Index: ontend/.angular/cache/19.0.6/DistributorApp/.tsbuildinfo
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/.tsbuildinfo	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,1 +1,0 @@
-{"fileNames":["../../../../src/main.ngtypecheck.ts","../../../../src/main.ts","../../../../src/main.server.ngtypecheck.ts","../../../../src/main.server.ts","../../../../src/server.ngtypecheck.ts","../../../../src/server.ts"],"fileIdsList":[[3],[1],[5]],"fileInfos":[{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"abed2fcecfc488c97265276567a7eaeac7acb0abf954ab6fd6ccfbab2243b3e5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"7adc736dd362f3694bfa0ead421710e99a78f81ba82ca176f190f95d452ea921","signature":"878ea92beb6bc8f2f306871f782a8d45d96bd6e2c3460efa8776eb4f11a86c84"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"40d323fd7775cf7bb6c7809fa281aa488dd8c15ce7a0304ee339fd1166eeaa13","signature":"94961f940e0e35d6b0d22a607b90b63b50e52d70c7e0d6593de45dde717bed65"}],"root":[[1,6]],"options":{"declaration":false,"declarationMap":false,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":true,"inlineSources":true,"module":7,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noPropertyAccessFromIndexSignature":true,"outDir":"../../../..","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[4,1],[2,2],[6,3]],"semanticDiagnosticsPerFile":[1,[2,[{"start":37,"length":27,"messageText":"Cannot find module '@angular/platform-browser' or its corresponding type declarations.","category":1,"code":2307},{"start":93,"length":18,"messageText":"Cannot find module './app/app.config' or its corresponding type declarations.","category":1,"code":2307},{"start":143,"length":21,"messageText":"Cannot find module './app/app.component' or its corresponding type declarations.","category":1,"code":2307},{"start":226,"length":3,"messageText":"Parameter 'err' implicitly has an 'any' type.","category":1,"code":7006},{"start":234,"length":7,"messageText":"Cannot find name 'console'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.","category":1,"code":2584}]],3,[4,[{"start":37,"length":27,"messageText":"Cannot find module '@angular/platform-browser' or its corresponding type declarations.","category":1,"code":2307},{"start":96,"length":21,"messageText":"Cannot find module './app/app.component' or its corresponding type declarations.","category":1,"code":2307},{"start":143,"length":25,"messageText":"Cannot find module './app/app.config.server' or its corresponding type declarations.","category":1,"code":2307}]],5,[6,[{"file":false,"messageText":"Cannot find global type 'ImportMeta'.","category":1,"code":2318},{"start":120,"length":19,"messageText":"Cannot find module '@angular/ssr/node' or its corresponding type declarations.","category":1,"code":2307},{"start":162,"length":9,"messageText":"Cannot find module 'express' or its corresponding type declarations.","category":1,"code":2307},{"start":207,"length":11,"messageText":"Cannot find module 'node:path' or its corresponding type declarations.","category":1,"code":2307},{"start":251,"length":10,"messageText":"Cannot find module 'node:url' or its corresponding type declarations.","category":1,"code":2307},{"start":325,"length":3,"code":2339,"category":1,"messageText":"Property 'url' does not exist on type '{}'."},{"start":971,"length":3,"messageText":"Parameter 'req' implicitly has an 'any' type.","category":1,"code":7006},{"start":976,"length":3,"messageText":"Parameter 'res' implicitly has an 'any' type.","category":1,"code":7006},{"start":981,"length":4,"messageText":"Parameter 'next' implicitly has an 'any' type.","category":1,"code":7006},{"start":1036,"length":8,"messageText":"Parameter 'response' implicitly has an 'any' type.","category":1,"code":7006},{"start":1354,"length":3,"code":2339,"category":1,"messageText":"Property 'url' does not exist on type '{}'."},{"start":1378,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.","category":1,"code":2591},{"start":1440,"length":7,"messageText":"Cannot find name 'console'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.","category":1,"code":2584}]]],"version":"5.6.3"}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_core.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_core.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,995 +1,0 @@
-import {
-  ALLOW_MULTIPLE_PLATFORMS,
-  ANIMATION_MODULE_TYPE,
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  APP_INITIALIZER,
-  AfterRenderManager,
-  AfterRenderPhase,
-  ApplicationInitStatus,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  COMPILER_OPTIONS,
-  CONTAINER_HEADER_OFFSET,
-  CSP_NONCE,
-  CUSTOM_ELEMENTS_SCHEMA,
-  ChangeDetectionScheduler,
-  ChangeDetectionSchedulerImpl,
-  ChangeDetectionStrategy,
-  ChangeDetectorRef,
-  Compiler,
-  CompilerFactory,
-  Component,
-  ComponentFactory,
-  ComponentFactory$1,
-  ComponentFactoryResolver$1,
-  ComponentRef,
-  ComponentRef$1,
-  Console,
-  ContentChild,
-  ContentChildren,
-  DEFAULT_CURRENCY_CODE,
-  DEFAULT_LOCALE_ID,
-  DEFER_BLOCK_CONFIG,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DebugElement,
-  DebugEventListener,
-  DebugNode,
-  DefaultIterableDiffer,
-  DeferBlockBehavior,
-  DeferBlockState,
-  DestroyRef,
-  Directive,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  ENVIRONMENT_INITIALIZER,
-  EffectScheduler,
-  ElementRef,
-  EmbeddedViewRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  EventEmitter,
-  FactoryTarget,
-  HOST_TAG_NAME,
-  Host,
-  HostAttributeToken,
-  HostBinding,
-  HostListener,
-  IMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS,
-  INJECTOR$1,
-  INJECTOR_SCOPE,
-  INTERNAL_APPLICATION_ERROR_HANDLER,
-  IS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  JSACTION_EVENT_CONTRACT,
-  KeyValueDiffers,
-  LContext,
-  LOCALE_ID,
-  LifecycleHooksFeature,
-  LocaleDataIndex,
-  MicrotaskEffectScheduler,
-  MissingTranslationStrategy,
-  ModuleWithComponentFactories,
-  NG_COMP_DEF,
-  NG_DIR_DEF,
-  NG_ELEMENT_ID,
-  NG_INJ_DEF,
-  NG_MOD_DEF,
-  NG_PIPE_DEF,
-  NG_PROV_DEF,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  NO_CHANGE,
-  NO_ERRORS_SCHEMA,
-  NgModule,
-  NgModuleFactory,
-  NgModuleFactory$1,
-  NgModuleRef,
-  NgModuleRef$1,
-  NgProbeToken,
-  NgZone,
-  NoopNgZone,
-  Optional,
-  Output,
-  OutputEmitterRef,
-  PACKAGE_ROOT_URL,
-  PERFORMANCE_MARK_PREFIX,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PROVIDED_NG_ZONE,
-  PendingTasks,
-  PendingTasksInternal,
-  Pipe,
-  PlatformRef,
-  Query,
-  QueryList,
-  REQUEST,
-  REQUEST_CONTEXT,
-  RESPONSE_INIT,
-  ReflectionCapabilities,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  ResourceStatus,
-  RuntimeError,
-  SIGNAL,
-  SSR_CONTENT_INTEGRITY_MARKER,
-  Sanitizer,
-  SecurityContext,
-  Self,
-  SimpleChange,
-  SkipSelf,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TracingAction,
-  TracingService,
-  TransferState,
-  Type,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  VERSION,
-  Version,
-  ViewChild,
-  ViewChildren,
-  ViewContainerRef,
-  ViewEncapsulation,
-  ViewRef,
-  ViewRef$1,
-  XSS_SECURITY_URL,
-  ZONELESS_ENABLED,
-  _global,
-  _sanitizeHtml,
-  _sanitizeUrl,
-  afterNextRender,
-  afterRender,
-  afterRenderEffect,
-  allowSanitizationBypassAndThrow,
-  annotateForHydration,
-  asNativeElements,
-  assertInInjectionContext,
-  assertNotInReactiveContext,
-  assertPlatform,
-  booleanAttribute,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl,
-  clearResolutionOfComponentResourcesQueue,
-  compileComponent,
-  compileDirective,
-  compileNgModule,
-  compileNgModuleDefs,
-  compileNgModuleFactory,
-  compilePipe,
-  computed,
-  contentChild,
-  contentChildren,
-  convertToBitFlags,
-  createComponent,
-  createEnvironmentInjector,
-  createInjector,
-  createNgModule,
-  createNgModuleRef,
-  createPlatform,
-  createPlatformFactory,
-  defaultIterableDiffers,
-  defaultKeyValueDiffers,
-  defineInjectable,
-  depsTracker,
-  destroyPlatform,
-  detectChangesInViewIfRequired,
-  devModeEqual,
-  disableProfiling,
-  effect,
-  enableProdMode,
-  enableProfiling,
-  findLocaleData,
-  flushModuleScopingQueueAsMuchAsPossible,
-  formatRuntimeError,
-  forwardRef,
-  generateStandaloneInDeclarationsError,
-  getAsyncClassMetadataFn,
-  getClosestComponentName,
-  getDebugNode,
-  getDeferBlocks,
-  getDirectives,
-  getHostElement,
-  getInjectableDef,
-  getLContext,
-  getLocaleCurrencyCode,
-  getLocalePluralCase,
-  getModuleFactory,
-  getNgModuleById,
-  getOutputDestroyRef,
-  getPlatform,
-  getSanitizationBypassType,
-  importProvidersFrom,
-  inject,
-  injectChangeDetectorRef,
-  input,
-  internalCreateApplication,
-  internalProvideZoneChangeDetection,
-  isBoundToModule,
-  isComponentDefPendingResolution,
-  isDevMode,
-  isEnvironmentProviders,
-  isInjectable,
-  isNgModule,
-  isPromise,
-  isSignal,
-  isStandalone,
-  isSubscribable,
-  linkedSignal,
-  makeEnvironmentProviders,
-  makeStateKey,
-  mergeApplicationConfig,
-  microtaskEffect,
-  model,
-  noSideEffects,
-  numberAttribute,
-  output,
-  patchComponentDefWithScope,
-  performanceMarkFeature,
-  platformCore,
-  provideAppInitializer,
-  provideEnvironmentInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  provideExperimentalZonelessChangeDetection,
-  providePlatformInitializer,
-  provideZoneChangeDetection,
-  publishExternalGlobalUtil,
-  readHydrationInfo,
-  reflectComponentType,
-  registerLocaleData,
-  registerNgModuleType,
-  renderDeferBlockState,
-  resetCompiledComponents,
-  resetJitOptions,
-  resolveComponentResources,
-  resolveForwardRef,
-  resource,
-  restoreComponentResolutionQueue,
-  runInInjectionContext,
-  setAllowDuplicateNgModuleIdsForTest,
-  setAlternateWeakRefImpl,
-  setClassMetadata,
-  setClassMetadataAsync,
-  setCurrentInjector,
-  setDocument,
-  setInjectorProfilerContext,
-  setLocaleId,
-  setTestabilityGetter,
-  signal,
-  startMeasuring,
-  stopMeasuring,
-  store,
-  stringify,
-  transitiveScopesFor,
-  triggerResourceLoading,
-  truncateMiddle,
-  unregisterAllLocaleData,
-  untracked,
-  unwrapSafeValue,
-  viewChild,
-  viewChildren,
-  withDomHydration,
-  withEventReplay,
-  withI18nSupport,
-  withIncrementalHydration,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  ɵgetUnknownElementStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  ɵsetClassDebugInfo,
-  ɵsetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  ɵunwrapWritableSignal,
-  ɵɵCopyDefinitionFeature,
-  ɵɵExternalStylesFeature,
-  ɵɵHostDirectivesFeature,
-  ɵɵInheritDefinitionFeature,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵProvidersFeature,
-  ɵɵadvance,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵclassProp,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵcontentQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵdeclareLet,
-  ɵɵdefer,
-  ɵɵdeferEnableTimerScheduling,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferOnHover,
-  ɵɵdeferOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferOnTimer,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferWhen,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵdisableBindings,
-  ɵɵelement,
-  ɵɵelementContainer,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainerStart,
-  ɵɵelementEnd,
-  ɵɵelementStart,
-  ɵɵenableBindings,
-  ɵɵgetComponentDepsFactory,
-  ɵɵgetCurrentView,
-  ɵɵgetInheritedFactory,
-  ɵɵhostProperty,
-  ɵɵi18n,
-  ɵɵi18nApply,
-  ɵɵi18nAttributes,
-  ɵɵi18nEnd,
-  ɵɵi18nExp,
-  ɵɵi18nPostprocess,
-  ɵɵi18nStart,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵinvalidFactoryDep,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵnamespaceHTML,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceSVG,
-  ɵɵnextContext,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵprojection,
-  ɵɵprojectionDef,
-  ɵɵproperty,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵqueryAdvance,
-  ɵɵqueryRefresh,
-  ɵɵreadContextLet,
-  ɵɵreference,
-  ɵɵrepeater,
-  ɵɵrepeaterCreate,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵreplaceMetadata,
-  ɵɵresetView,
-  ɵɵresolveBody,
-  ɵɵresolveDocument,
-  ɵɵresolveWindow,
-  ɵɵrestoreView,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵstoreLet,
-  ɵɵstyleMap,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstyleProp,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵsyntheticHostListener,
-  ɵɵsyntheticHostProperty,
-  ɵɵtemplate,
-  ɵɵtemplateRefExtractor,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵtwoWayProperty,
-  ɵɵvalidateIframeAttribute,
-  ɵɵviewQuery,
-  ɵɵviewQuerySignal
-} from "./chunk-GZKEX4RU.js";
-export {
-  ANIMATION_MODULE_TYPE,
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  APP_INITIALIZER,
-  AfterRenderPhase,
-  ApplicationInitStatus,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  COMPILER_OPTIONS,
-  CSP_NONCE,
-  CUSTOM_ELEMENTS_SCHEMA,
-  ChangeDetectionStrategy,
-  ChangeDetectorRef,
-  Compiler,
-  CompilerFactory,
-  Component,
-  ComponentFactory$1 as ComponentFactory,
-  ComponentFactoryResolver$1 as ComponentFactoryResolver,
-  ComponentRef$1 as ComponentRef,
-  ContentChild,
-  ContentChildren,
-  DEFAULT_CURRENCY_CODE,
-  DebugElement,
-  DebugEventListener,
-  DebugNode,
-  DefaultIterableDiffer,
-  DestroyRef,
-  Directive,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EmbeddedViewRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  EventEmitter,
-  HOST_TAG_NAME,
-  Host,
-  HostAttributeToken,
-  HostBinding,
-  HostListener,
-  INJECTOR$1 as INJECTOR,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  KeyValueDiffers,
-  LOCALE_ID,
-  MissingTranslationStrategy,
-  ModuleWithComponentFactories,
-  NO_ERRORS_SCHEMA,
-  NgModule,
-  NgModuleFactory$1 as NgModuleFactory,
-  NgModuleRef$1 as NgModuleRef,
-  NgProbeToken,
-  NgZone,
-  Optional,
-  Output,
-  OutputEmitterRef,
-  PACKAGE_ROOT_URL,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PendingTasks,
-  Pipe,
-  PlatformRef,
-  Query,
-  QueryList,
-  REQUEST,
-  REQUEST_CONTEXT,
-  RESPONSE_INIT,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  ResourceStatus,
-  Sanitizer,
-  SecurityContext,
-  Self,
-  SimpleChange,
-  SkipSelf,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TransferState,
-  Type,
-  VERSION,
-  Version,
-  ViewChild,
-  ViewChildren,
-  ViewContainerRef,
-  ViewEncapsulation,
-  ViewRef,
-  afterNextRender,
-  afterRender,
-  afterRenderEffect,
-  asNativeElements,
-  assertInInjectionContext,
-  assertNotInReactiveContext,
-  assertPlatform,
-  booleanAttribute,
-  computed,
-  contentChild,
-  contentChildren,
-  createComponent,
-  createEnvironmentInjector,
-  createNgModule,
-  createNgModuleRef,
-  createPlatform,
-  createPlatformFactory,
-  defineInjectable,
-  destroyPlatform,
-  effect,
-  enableProdMode,
-  forwardRef,
-  getDebugNode,
-  getModuleFactory,
-  getNgModuleById,
-  getPlatform,
-  importProvidersFrom,
-  inject,
-  input,
-  isDevMode,
-  isSignal,
-  isStandalone,
-  linkedSignal,
-  makeEnvironmentProviders,
-  makeStateKey,
-  mergeApplicationConfig,
-  model,
-  numberAttribute,
-  output,
-  platformCore,
-  provideAppInitializer,
-  provideEnvironmentInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  provideExperimentalZonelessChangeDetection,
-  providePlatformInitializer,
-  provideZoneChangeDetection,
-  reflectComponentType,
-  resolveForwardRef,
-  resource,
-  runInInjectionContext,
-  setTestabilityGetter,
-  signal,
-  untracked,
-  viewChild,
-  viewChildren,
-  ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS,
-  AfterRenderManager as ɵAfterRenderManager,
-  CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET,
-  ChangeDetectionScheduler as ɵChangeDetectionScheduler,
-  ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl,
-  ComponentFactory$1 as ɵComponentFactory,
-  Console as ɵConsole,
-  DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID,
-  DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DeferBlockBehavior as ɵDeferBlockBehavior,
-  DeferBlockState as ɵDeferBlockState,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  EffectScheduler as ɵEffectScheduler,
-  IMAGE_CONFIG as ɵIMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS,
-  INJECTOR_SCOPE as ɵINJECTOR_SCOPE,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER,
-  IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED,
-  JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT,
-  LContext as ɵLContext,
-  LifecycleHooksFeature as ɵLifecycleHooksFeature,
-  LocaleDataIndex as ɵLocaleDataIndex,
-  MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler,
-  NG_COMP_DEF as ɵNG_COMP_DEF,
-  NG_DIR_DEF as ɵNG_DIR_DEF,
-  NG_ELEMENT_ID as ɵNG_ELEMENT_ID,
-  NG_INJ_DEF as ɵNG_INJ_DEF,
-  NG_MOD_DEF as ɵNG_MOD_DEF,
-  NG_PIPE_DEF as ɵNG_PIPE_DEF,
-  NG_PROV_DEF as ɵNG_PROV_DEF,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  NO_CHANGE as ɵNO_CHANGE,
-  NgModuleFactory as ɵNgModuleFactory,
-  NoopNgZone as ɵNoopNgZone,
-  PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX,
-  PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE,
-  PendingTasksInternal as ɵPendingTasksInternal,
-  ReflectionCapabilities as ɵReflectionCapabilities,
-  ComponentFactory as ɵRender3ComponentFactory,
-  ComponentRef as ɵRender3ComponentRef,
-  NgModuleRef as ɵRender3NgModuleRef,
-  RuntimeError as ɵRuntimeError,
-  SIGNAL as ɵSIGNAL,
-  SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER,
-  TESTABILITY as ɵTESTABILITY,
-  TESTABILITY_GETTER as ɵTESTABILITY_GETTER,
-  TracingAction as ɵTracingAction,
-  TracingService as ɵTracingService,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  ViewRef$1 as ɵViewRef,
-  XSS_SECURITY_URL as ɵXSS_SECURITY_URL,
-  ZONELESS_ENABLED as ɵZONELESS_ENABLED,
-  _sanitizeHtml as ɵ_sanitizeHtml,
-  _sanitizeUrl as ɵ_sanitizeUrl,
-  allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow,
-  annotateForHydration as ɵannotateForHydration,
-  bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl,
-  clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue,
-  compileComponent as ɵcompileComponent,
-  compileDirective as ɵcompileDirective,
-  compileNgModule as ɵcompileNgModule,
-  compileNgModuleDefs as ɵcompileNgModuleDefs,
-  compileNgModuleFactory as ɵcompileNgModuleFactory,
-  compilePipe as ɵcompilePipe,
-  convertToBitFlags as ɵconvertToBitFlags,
-  createInjector as ɵcreateInjector,
-  defaultIterableDiffers as ɵdefaultIterableDiffers,
-  defaultKeyValueDiffers as ɵdefaultKeyValueDiffers,
-  depsTracker as ɵdepsTracker,
-  detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired,
-  devModeEqual as ɵdevModeEqual,
-  disableProfiling as ɵdisableProfiling,
-  enableProfiling as ɵenableProfiling,
-  findLocaleData as ɵfindLocaleData,
-  flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible,
-  formatRuntimeError as ɵformatRuntimeError,
-  generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError,
-  getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn,
-  getClosestComponentName as ɵgetClosestComponentName,
-  getDebugNode as ɵgetDebugNode,
-  getDeferBlocks as ɵgetDeferBlocks,
-  getDirectives as ɵgetDirectives,
-  getHostElement as ɵgetHostElement,
-  getInjectableDef as ɵgetInjectableDef,
-  getLContext as ɵgetLContext,
-  getLocaleCurrencyCode as ɵgetLocaleCurrencyCode,
-  getLocalePluralCase as ɵgetLocalePluralCase,
-  getOutputDestroyRef as ɵgetOutputDestroyRef,
-  getSanitizationBypassType as ɵgetSanitizationBypassType,
-  ɵgetUnknownElementStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  _global as ɵglobal,
-  injectChangeDetectorRef as ɵinjectChangeDetectorRef,
-  internalCreateApplication as ɵinternalCreateApplication,
-  internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection,
-  isBoundToModule as ɵisBoundToModule,
-  isComponentDefPendingResolution as ɵisComponentDefPendingResolution,
-  isEnvironmentProviders as ɵisEnvironmentProviders,
-  isInjectable as ɵisInjectable,
-  isNgModule as ɵisNgModule,
-  isPromise as ɵisPromise,
-  isSubscribable as ɵisSubscribable,
-  microtaskEffect as ɵmicrotaskEffect,
-  noSideEffects as ɵnoSideEffects,
-  patchComponentDefWithScope as ɵpatchComponentDefWithScope,
-  performanceMarkFeature as ɵperformanceMarkFeature,
-  publishExternalGlobalUtil as ɵpublishExternalGlobalUtil,
-  readHydrationInfo as ɵreadHydrationInfo,
-  registerLocaleData as ɵregisterLocaleData,
-  renderDeferBlockState as ɵrenderDeferBlockState,
-  resetCompiledComponents as ɵresetCompiledComponents,
-  resetJitOptions as ɵresetJitOptions,
-  resolveComponentResources as ɵresolveComponentResources,
-  restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue,
-  setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest,
-  setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl,
-  ɵsetClassDebugInfo,
-  setClassMetadata as ɵsetClassMetadata,
-  setClassMetadataAsync as ɵsetClassMetadataAsync,
-  setCurrentInjector as ɵsetCurrentInjector,
-  setDocument as ɵsetDocument,
-  setInjectorProfilerContext as ɵsetInjectorProfilerContext,
-  setLocaleId as ɵsetLocaleId,
-  ɵsetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  startMeasuring as ɵstartMeasuring,
-  stopMeasuring as ɵstopMeasuring,
-  store as ɵstore,
-  stringify as ɵstringify,
-  transitiveScopesFor as ɵtransitiveScopesFor,
-  triggerResourceLoading as ɵtriggerResourceLoading,
-  truncateMiddle as ɵtruncateMiddle,
-  unregisterAllLocaleData as ɵunregisterLocaleData,
-  unwrapSafeValue as ɵunwrapSafeValue,
-  ɵunwrapWritableSignal,
-  withDomHydration as ɵwithDomHydration,
-  withEventReplay as ɵwithEventReplay,
-  withI18nSupport as ɵwithI18nSupport,
-  withIncrementalHydration as ɵwithIncrementalHydration,
-  ɵɵCopyDefinitionFeature,
-  ɵɵExternalStylesFeature,
-  FactoryTarget as ɵɵFactoryTarget,
-  ɵɵHostDirectivesFeature,
-  ɵɵInheritDefinitionFeature,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵProvidersFeature,
-  ɵɵadvance,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵclassProp,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵcontentQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵdeclareLet,
-  ɵɵdefer,
-  ɵɵdeferEnableTimerScheduling,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferOnHover,
-  ɵɵdeferOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferOnTimer,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferWhen,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵdisableBindings,
-  ɵɵelement,
-  ɵɵelementContainer,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainerStart,
-  ɵɵelementEnd,
-  ɵɵelementStart,
-  ɵɵenableBindings,
-  ɵɵgetComponentDepsFactory,
-  ɵɵgetCurrentView,
-  ɵɵgetInheritedFactory,
-  ɵɵhostProperty,
-  ɵɵi18n,
-  ɵɵi18nApply,
-  ɵɵi18nAttributes,
-  ɵɵi18nEnd,
-  ɵɵi18nExp,
-  ɵɵi18nPostprocess,
-  ɵɵi18nStart,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵinvalidFactoryDep,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵnamespaceHTML,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceSVG,
-  ɵɵnextContext,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵprojection,
-  ɵɵprojectionDef,
-  ɵɵproperty,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵqueryAdvance,
-  ɵɵqueryRefresh,
-  ɵɵreadContextLet,
-  ɵɵreference,
-  registerNgModuleType as ɵɵregisterNgModuleType,
-  ɵɵrepeater,
-  ɵɵrepeaterCreate,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵreplaceMetadata,
-  ɵɵresetView,
-  ɵɵresolveBody,
-  ɵɵresolveDocument,
-  ɵɵresolveWindow,
-  ɵɵrestoreView,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵstoreLet,
-  ɵɵstyleMap,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstyleProp,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵsyntheticHostListener,
-  ɵɵsyntheticHostProperty,
-  ɵɵtemplate,
-  ɵɵtemplateRefExtractor,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵtwoWayProperty,
-  ɵɵvalidateIframeAttribute,
-  ɵɵviewQuery,
-  ɵɵviewQuerySignal
-};
-//# sourceMappingURL=@angular_core.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_core.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_core.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_platform-browser.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_platform-browser.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,82 +1,0 @@
-import {
-  BrowserDomAdapter,
-  BrowserGetTestability,
-  BrowserModule,
-  By,
-  DomEventsPlugin,
-  DomRendererFactory2,
-  DomSanitizer,
-  DomSanitizerImpl,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerGesturesPlugin,
-  HammerModule,
-  HydrationFeatureKind,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  KeyEventsPlugin,
-  Meta,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  SharedStylesHost,
-  Title,
-  VERSION,
-  bootstrapApplication,
-  createApplication,
-  disableDebugTools,
-  enableDebugTools,
-  getDOM,
-  initDomAdapter,
-  platformBrowser,
-  provideClientHydration,
-  provideProtractorTestingSupport,
-  withEventReplay,
-  withHttpTransferCacheOptions,
-  withI18nSupport,
-  withIncrementalHydration,
-  withNoHttpTransferCache
-} from "./chunk-DDSXTL3A.js";
-import "./chunk-GZKEX4RU.js";
-export {
-  BrowserModule,
-  By,
-  DomSanitizer,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerModule,
-  HydrationFeatureKind,
-  Meta,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  Title,
-  VERSION,
-  bootstrapApplication,
-  createApplication,
-  disableDebugTools,
-  enableDebugTools,
-  platformBrowser,
-  provideClientHydration,
-  provideProtractorTestingSupport,
-  withEventReplay,
-  withHttpTransferCacheOptions,
-  withI18nSupport,
-  withIncrementalHydration,
-  withNoHttpTransferCache,
-  BrowserDomAdapter as ɵBrowserDomAdapter,
-  BrowserGetTestability as ɵBrowserGetTestability,
-  DomEventsPlugin as ɵDomEventsPlugin,
-  DomRendererFactory2 as ɵDomRendererFactory2,
-  DomSanitizerImpl as ɵDomSanitizerImpl,
-  HammerGesturesPlugin as ɵHammerGesturesPlugin,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  KeyEventsPlugin as ɵKeyEventsPlugin,
-  SharedStylesHost as ɵSharedStylesHost,
-  getDOM as ɵgetDOM,
-  initDomAdapter as ɵinitDomAdapter
-};
-//# sourceMappingURL=@angular_platform-browser.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_platform-browser.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_platform-browser.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_router.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_router.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,5964 +1,0 @@
-import {
-  DOCUMENT,
-  HashLocationStrategy,
-  LOCATION_INITIALIZED,
-  Location,
-  LocationStrategy,
-  PathLocationStrategy,
-  Title,
-  ViewportScroller
-} from "./chunk-DDSXTL3A.js";
-import {
-  APP_BOOTSTRAP_LISTENER,
-  APP_INITIALIZER,
-  ApplicationRef,
-  Attribute,
-  BehaviorSubject,
-  ChangeDetectorRef,
-  Compiler,
-  Component,
-  ConnectableObservable,
-  Console,
-  ContentChildren,
-  Directive,
-  EMPTY,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EmptyError,
-  EnvironmentInjector,
-  EventEmitter,
-  HostBinding,
-  HostListener,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  NgModule,
-  NgModuleFactory$1,
-  NgZone,
-  Optional,
-  Output,
-  PendingTasksInternal,
-  Renderer2,
-  RuntimeError,
-  SkipSelf,
-  Subject,
-  Subscription,
-  Version,
-  ViewContainerRef,
-  __spreadProps,
-  __spreadValues,
-  afterNextRender,
-  booleanAttribute,
-  catchError,
-  combineLatest,
-  concat,
-  concatMap,
-  createEnvironmentInjector,
-  defaultIfEmpty,
-  defer,
-  filter,
-  finalize,
-  first,
-  from,
-  inject,
-  input,
-  isInjectable,
-  isNgModule,
-  isObservable,
-  isPromise,
-  isStandalone,
-  last,
-  makeEnvironmentProviders,
-  map,
-  mapTo,
-  mergeAll,
-  mergeMap,
-  of,
-  pipe,
-  publishExternalGlobalUtil,
-  refCount,
-  reflectComponentType,
-  runInInjectionContext,
-  scan,
-  setClassMetadata,
-  startWith,
-  switchMap,
-  take,
-  takeLast,
-  takeUntil,
-  tap,
-  throwError,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵattribute,
-  ɵɵcontentQuery,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdirectiveInject,
-  ɵɵelement,
-  ɵɵgetInheritedFactory,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵqueryRefresh,
-  ɵɵsanitizeUrlOrResourceUrl
-} from "./chunk-GZKEX4RU.js";
-
-// node_modules/@angular/router/fesm2022/router.mjs
-var PRIMARY_OUTLET = "primary";
-var RouteTitleKey = Symbol("RouteTitle");
-var ParamsAsMap = class {
-  params;
-  constructor(params) {
-    this.params = params || {};
-  }
-  has(name) {
-    return Object.prototype.hasOwnProperty.call(this.params, name);
-  }
-  get(name) {
-    if (this.has(name)) {
-      const v = this.params[name];
-      return Array.isArray(v) ? v[0] : v;
-    }
-    return null;
-  }
-  getAll(name) {
-    if (this.has(name)) {
-      const v = this.params[name];
-      return Array.isArray(v) ? v : [v];
-    }
-    return [];
-  }
-  get keys() {
-    return Object.keys(this.params);
-  }
-};
-function convertToParamMap(params) {
-  return new ParamsAsMap(params);
-}
-function defaultUrlMatcher(segments, segmentGroup, route) {
-  const parts = route.path.split("/");
-  if (parts.length > segments.length) {
-    return null;
-  }
-  if (route.pathMatch === "full" && (segmentGroup.hasChildren() || parts.length < segments.length)) {
-    return null;
-  }
-  const posParams = {};
-  for (let index = 0; index < parts.length; index++) {
-    const part = parts[index];
-    const segment = segments[index];
-    const isParameter = part[0] === ":";
-    if (isParameter) {
-      posParams[part.substring(1)] = segment;
-    } else if (part !== segment.path) {
-      return null;
-    }
-  }
-  return {
-    consumed: segments.slice(0, parts.length),
-    posParams
-  };
-}
-function shallowEqualArrays(a, b) {
-  if (a.length !== b.length) return false;
-  for (let i = 0; i < a.length; ++i) {
-    if (!shallowEqual(a[i], b[i])) return false;
-  }
-  return true;
-}
-function shallowEqual(a, b) {
-  const k1 = a ? getDataKeys(a) : void 0;
-  const k2 = b ? getDataKeys(b) : void 0;
-  if (!k1 || !k2 || k1.length != k2.length) {
-    return false;
-  }
-  let key;
-  for (let i = 0; i < k1.length; i++) {
-    key = k1[i];
-    if (!equalArraysOrString(a[key], b[key])) {
-      return false;
-    }
-  }
-  return true;
-}
-function getDataKeys(obj) {
-  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];
-}
-function equalArraysOrString(a, b) {
-  if (Array.isArray(a) && Array.isArray(b)) {
-    if (a.length !== b.length) return false;
-    const aSorted = [...a].sort();
-    const bSorted = [...b].sort();
-    return aSorted.every((val, index) => bSorted[index] === val);
-  } else {
-    return a === b;
-  }
-}
-function last2(a) {
-  return a.length > 0 ? a[a.length - 1] : null;
-}
-function wrapIntoObservable(value) {
-  if (isObservable(value)) {
-    return value;
-  }
-  if (isPromise(value)) {
-    return from(Promise.resolve(value));
-  }
-  return of(value);
-}
-var pathCompareMap = {
-  "exact": equalSegmentGroups,
-  "subset": containsSegmentGroup
-};
-var paramCompareMap = {
-  "exact": equalParams,
-  "subset": containsParams,
-  "ignored": () => true
-};
-function containsTree(container, containee, options) {
-  return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === "exact" && container.fragment !== containee.fragment);
-}
-function equalParams(container, containee) {
-  return shallowEqual(container, containee);
-}
-function equalSegmentGroups(container, containee, matrixParams) {
-  if (!equalPath(container.segments, containee.segments)) return false;
-  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {
-    return false;
-  }
-  if (container.numberOfChildren !== containee.numberOfChildren) return false;
-  for (const c in containee.children) {
-    if (!container.children[c]) return false;
-    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;
-  }
-  return true;
-}
-function containsParams(container, containee) {
-  return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every((key) => equalArraysOrString(container[key], containee[key]));
-}
-function containsSegmentGroup(container, containee, matrixParams) {
-  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);
-}
-function containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {
-  if (container.segments.length > containeePaths.length) {
-    const current = container.segments.slice(0, containeePaths.length);
-    if (!equalPath(current, containeePaths)) return false;
-    if (containee.hasChildren()) return false;
-    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;
-    return true;
-  } else if (container.segments.length === containeePaths.length) {
-    if (!equalPath(container.segments, containeePaths)) return false;
-    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;
-    for (const c in containee.children) {
-      if (!container.children[c]) return false;
-      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {
-        return false;
-      }
-    }
-    return true;
-  } else {
-    const current = containeePaths.slice(0, container.segments.length);
-    const next = containeePaths.slice(container.segments.length);
-    if (!equalPath(container.segments, current)) return false;
-    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;
-    if (!container.children[PRIMARY_OUTLET]) return false;
-    return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);
-  }
-}
-function matrixParamsMatch(containerPaths, containeePaths, options) {
-  return containeePaths.every((containeeSegment, i) => {
-    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);
-  });
-}
-var UrlTree = class {
-  root;
-  queryParams;
-  fragment;
-  /** @internal */
-  _queryParamMap;
-  constructor(root = new UrlSegmentGroup([], {}), queryParams = {}, fragment = null) {
-    this.root = root;
-    this.queryParams = queryParams;
-    this.fragment = fragment;
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (root.segments.length > 0) {
-        throw new RuntimeError(4015, "The root `UrlSegmentGroup` should not contain `segments`. Instead, these segments belong in the `children` so they can be associated with a named outlet.");
-      }
-    }
-  }
-  get queryParamMap() {
-    this._queryParamMap ??= convertToParamMap(this.queryParams);
-    return this._queryParamMap;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return DEFAULT_SERIALIZER.serialize(this);
-  }
-};
-var UrlSegmentGroup = class {
-  segments;
-  children;
-  /** The parent node in the url tree */
-  parent = null;
-  constructor(segments, children) {
-    this.segments = segments;
-    this.children = children;
-    Object.values(children).forEach((v) => v.parent = this);
-  }
-  /** Whether the segment has child segments */
-  hasChildren() {
-    return this.numberOfChildren > 0;
-  }
-  /** Number of child segments */
-  get numberOfChildren() {
-    return Object.keys(this.children).length;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return serializePaths(this);
-  }
-};
-var UrlSegment = class {
-  path;
-  parameters;
-  /** @internal */
-  _parameterMap;
-  constructor(path, parameters) {
-    this.path = path;
-    this.parameters = parameters;
-  }
-  get parameterMap() {
-    this._parameterMap ??= convertToParamMap(this.parameters);
-    return this._parameterMap;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return serializePath(this);
-  }
-};
-function equalSegments(as, bs) {
-  return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));
-}
-function equalPath(as, bs) {
-  if (as.length !== bs.length) return false;
-  return as.every((a, i) => a.path === bs[i].path);
-}
-function mapChildrenIntoArray(segment, fn) {
-  let res = [];
-  Object.entries(segment.children).forEach(([childOutlet, child]) => {
-    if (childOutlet === PRIMARY_OUTLET) {
-      res = res.concat(fn(child, childOutlet));
-    }
-  });
-  Object.entries(segment.children).forEach(([childOutlet, child]) => {
-    if (childOutlet !== PRIMARY_OUTLET) {
-      res = res.concat(fn(child, childOutlet));
-    }
-  });
-  return res;
-}
-var UrlSerializer = class _UrlSerializer {
-  static ɵfac = function UrlSerializer_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UrlSerializer)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _UrlSerializer,
-    factory: () => (() => new DefaultUrlSerializer())(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UrlSerializer, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => new DefaultUrlSerializer()
-    }]
-  }], null, null);
-})();
-var DefaultUrlSerializer = class {
-  /** Parses a url into a `UrlTree` */
-  parse(url) {
-    const p = new UrlParser(url);
-    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());
-  }
-  /** Converts a `UrlTree` into a url */
-  serialize(tree2) {
-    const segment = `/${serializeSegment(tree2.root, true)}`;
-    const query = serializeQueryParams(tree2.queryParams);
-    const fragment = typeof tree2.fragment === `string` ? `#${encodeUriFragment(tree2.fragment)}` : "";
-    return `${segment}${query}${fragment}`;
-  }
-};
-var DEFAULT_SERIALIZER = new DefaultUrlSerializer();
-function serializePaths(segment) {
-  return segment.segments.map((p) => serializePath(p)).join("/");
-}
-function serializeSegment(segment, root) {
-  if (!segment.hasChildren()) {
-    return serializePaths(segment);
-  }
-  if (root) {
-    const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : "";
-    const children = [];
-    Object.entries(segment.children).forEach(([k, v]) => {
-      if (k !== PRIMARY_OUTLET) {
-        children.push(`${k}:${serializeSegment(v, false)}`);
-      }
-    });
-    return children.length > 0 ? `${primary}(${children.join("//")})` : primary;
-  } else {
-    const children = mapChildrenIntoArray(segment, (v, k) => {
-      if (k === PRIMARY_OUTLET) {
-        return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];
-      }
-      return [`${k}:${serializeSegment(v, false)}`];
-    });
-    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {
-      return `${serializePaths(segment)}/${children[0]}`;
-    }
-    return `${serializePaths(segment)}/(${children.join("//")})`;
-  }
-}
-function encodeUriString(s) {
-  return encodeURIComponent(s).replace(/%40/g, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",");
-}
-function encodeUriQuery(s) {
-  return encodeUriString(s).replace(/%3B/gi, ";");
-}
-function encodeUriFragment(s) {
-  return encodeURI(s);
-}
-function encodeUriSegment(s) {
-  return encodeUriString(s).replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/%26/gi, "&");
-}
-function decode(s) {
-  return decodeURIComponent(s);
-}
-function decodeQuery(s) {
-  return decode(s.replace(/\+/g, "%20"));
-}
-function serializePath(path) {
-  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;
-}
-function serializeMatrixParams(params) {
-  return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join("");
-}
-function serializeQueryParams(params) {
-  const strParams = Object.entries(params).map(([name, value]) => {
-    return Array.isArray(value) ? value.map((v) => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join("&") : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;
-  }).filter((s) => s);
-  return strParams.length ? `?${strParams.join("&")}` : "";
-}
-var SEGMENT_RE = /^[^\/()?;#]+/;
-function matchSegments(str) {
-  const match2 = str.match(SEGMENT_RE);
-  return match2 ? match2[0] : "";
-}
-var MATRIX_PARAM_SEGMENT_RE = /^[^\/()?;=#]+/;
-function matchMatrixKeySegments(str) {
-  const match2 = str.match(MATRIX_PARAM_SEGMENT_RE);
-  return match2 ? match2[0] : "";
-}
-var QUERY_PARAM_RE = /^[^=?&#]+/;
-function matchQueryParams(str) {
-  const match2 = str.match(QUERY_PARAM_RE);
-  return match2 ? match2[0] : "";
-}
-var QUERY_PARAM_VALUE_RE = /^[^&#]+/;
-function matchUrlQueryParamValue(str) {
-  const match2 = str.match(QUERY_PARAM_VALUE_RE);
-  return match2 ? match2[0] : "";
-}
-var UrlParser = class {
-  url;
-  remaining;
-  constructor(url) {
-    this.url = url;
-    this.remaining = url;
-  }
-  parseRootSegment() {
-    this.consumeOptional("/");
-    if (this.remaining === "" || this.peekStartsWith("?") || this.peekStartsWith("#")) {
-      return new UrlSegmentGroup([], {});
-    }
-    return new UrlSegmentGroup([], this.parseChildren());
-  }
-  parseQueryParams() {
-    const params = {};
-    if (this.consumeOptional("?")) {
-      do {
-        this.parseQueryParam(params);
-      } while (this.consumeOptional("&"));
-    }
-    return params;
-  }
-  parseFragment() {
-    return this.consumeOptional("#") ? decodeURIComponent(this.remaining) : null;
-  }
-  parseChildren() {
-    if (this.remaining === "") {
-      return {};
-    }
-    this.consumeOptional("/");
-    const segments = [];
-    if (!this.peekStartsWith("(")) {
-      segments.push(this.parseSegment());
-    }
-    while (this.peekStartsWith("/") && !this.peekStartsWith("//") && !this.peekStartsWith("/(")) {
-      this.capture("/");
-      segments.push(this.parseSegment());
-    }
-    let children = {};
-    if (this.peekStartsWith("/(")) {
-      this.capture("/");
-      children = this.parseParens(true);
-    }
-    let res = {};
-    if (this.peekStartsWith("(")) {
-      res = this.parseParens(false);
-    }
-    if (segments.length > 0 || Object.keys(children).length > 0) {
-      res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);
-    }
-    return res;
-  }
-  // parse a segment with its matrix parameters
-  // ie `name;k1=v1;k2`
-  parseSegment() {
-    const path = matchSegments(this.remaining);
-    if (path === "" && this.peekStartsWith(";")) {
-      throw new RuntimeError(4009, (typeof ngDevMode === "undefined" || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
-    }
-    this.capture(path);
-    return new UrlSegment(decode(path), this.parseMatrixParams());
-  }
-  parseMatrixParams() {
-    const params = {};
-    while (this.consumeOptional(";")) {
-      this.parseParam(params);
-    }
-    return params;
-  }
-  parseParam(params) {
-    const key = matchMatrixKeySegments(this.remaining);
-    if (!key) {
-      return;
-    }
-    this.capture(key);
-    let value = "";
-    if (this.consumeOptional("=")) {
-      const valueMatch = matchSegments(this.remaining);
-      if (valueMatch) {
-        value = valueMatch;
-        this.capture(value);
-      }
-    }
-    params[decode(key)] = decode(value);
-  }
-  // Parse a single query parameter `name[=value]`
-  parseQueryParam(params) {
-    const key = matchQueryParams(this.remaining);
-    if (!key) {
-      return;
-    }
-    this.capture(key);
-    let value = "";
-    if (this.consumeOptional("=")) {
-      const valueMatch = matchUrlQueryParamValue(this.remaining);
-      if (valueMatch) {
-        value = valueMatch;
-        this.capture(value);
-      }
-    }
-    const decodedKey = decodeQuery(key);
-    const decodedVal = decodeQuery(value);
-    if (params.hasOwnProperty(decodedKey)) {
-      let currentVal = params[decodedKey];
-      if (!Array.isArray(currentVal)) {
-        currentVal = [currentVal];
-        params[decodedKey] = currentVal;
-      }
-      currentVal.push(decodedVal);
-    } else {
-      params[decodedKey] = decodedVal;
-    }
-  }
-  // parse `(a/b//outlet_name:c/d)`
-  parseParens(allowPrimary) {
-    const segments = {};
-    this.capture("(");
-    while (!this.consumeOptional(")") && this.remaining.length > 0) {
-      const path = matchSegments(this.remaining);
-      const next = this.remaining[path.length];
-      if (next !== "/" && next !== ")" && next !== ";") {
-        throw new RuntimeError(4010, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot parse url '${this.url}'`);
-      }
-      let outletName = void 0;
-      if (path.indexOf(":") > -1) {
-        outletName = path.slice(0, path.indexOf(":"));
-        this.capture(outletName);
-        this.capture(":");
-      } else if (allowPrimary) {
-        outletName = PRIMARY_OUTLET;
-      }
-      const children = this.parseChildren();
-      segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);
-      this.consumeOptional("//");
-    }
-    return segments;
-  }
-  peekStartsWith(str) {
-    return this.remaining.startsWith(str);
-  }
-  // Consumes the prefix when it is present and returns whether it has been consumed
-  consumeOptional(str) {
-    if (this.peekStartsWith(str)) {
-      this.remaining = this.remaining.substring(str.length);
-      return true;
-    }
-    return false;
-  }
-  capture(str) {
-    if (!this.consumeOptional(str)) {
-      throw new RuntimeError(4011, (typeof ngDevMode === "undefined" || ngDevMode) && `Expected "${str}".`);
-    }
-  }
-};
-function createRoot(rootCandidate) {
-  return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {
-    [PRIMARY_OUTLET]: rootCandidate
-  }) : rootCandidate;
-}
-function squashSegmentGroup(segmentGroup) {
-  const newChildren = {};
-  for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {
-    const childCandidate = squashSegmentGroup(child);
-    if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {
-      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {
-        newChildren[grandChildOutlet] = grandChild;
-      }
-    } else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {
-      newChildren[childOutlet] = childCandidate;
-    }
-  }
-  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);
-  return mergeTrivialChildren(s);
-}
-function mergeTrivialChildren(s) {
-  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {
-    const c = s.children[PRIMARY_OUTLET];
-    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);
-  }
-  return s;
-}
-function isUrlTree(v) {
-  return v instanceof UrlTree;
-}
-function createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null) {
-  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);
-  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);
-}
-function createSegmentGroupFromRoute(route) {
-  let targetGroup;
-  function createSegmentGroupFromRouteRecursive(currentRoute) {
-    const childOutlets = {};
-    for (const childSnapshot of currentRoute.children) {
-      const root = createSegmentGroupFromRouteRecursive(childSnapshot);
-      childOutlets[childSnapshot.outlet] = root;
-    }
-    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);
-    if (currentRoute === route) {
-      targetGroup = segmentGroup;
-    }
-    return segmentGroup;
-  }
-  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);
-  const rootSegmentGroup = createRoot(rootCandidate);
-  return targetGroup ?? rootSegmentGroup;
-}
-function createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment) {
-  let root = relativeTo;
-  while (root.parent) {
-    root = root.parent;
-  }
-  if (commands.length === 0) {
-    return tree(root, root, root, queryParams, fragment);
-  }
-  const nav = computeNavigation(commands);
-  if (nav.toRoot()) {
-    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);
-  }
-  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);
-  const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);
-  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);
-}
-function isMatrixParams(command) {
-  return typeof command === "object" && command != null && !command.outlets && !command.segmentPath;
-}
-function isCommandWithOutlets(command) {
-  return typeof command === "object" && command != null && command.outlets;
-}
-function tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment) {
-  let qp = {};
-  if (queryParams) {
-    Object.entries(queryParams).forEach(([name, value]) => {
-      qp[name] = Array.isArray(value) ? value.map((v) => `${v}`) : `${value}`;
-    });
-  }
-  let rootCandidate;
-  if (oldRoot === oldSegmentGroup) {
-    rootCandidate = newSegmentGroup;
-  } else {
-    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);
-  }
-  const newRoot = createRoot(squashSegmentGroup(rootCandidate));
-  return new UrlTree(newRoot, qp, fragment);
-}
-function replaceSegment(current, oldSegment, newSegment) {
-  const children = {};
-  Object.entries(current.children).forEach(([outletName, c]) => {
-    if (c === oldSegment) {
-      children[outletName] = newSegment;
-    } else {
-      children[outletName] = replaceSegment(c, oldSegment, newSegment);
-    }
-  });
-  return new UrlSegmentGroup(current.segments, children);
-}
-var Navigation = class {
-  isAbsolute;
-  numberOfDoubleDots;
-  commands;
-  constructor(isAbsolute, numberOfDoubleDots, commands) {
-    this.isAbsolute = isAbsolute;
-    this.numberOfDoubleDots = numberOfDoubleDots;
-    this.commands = commands;
-    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
-      throw new RuntimeError(4003, (typeof ngDevMode === "undefined" || ngDevMode) && "Root segment cannot have matrix parameters");
-    }
-    const cmdWithOutlet = commands.find(isCommandWithOutlets);
-    if (cmdWithOutlet && cmdWithOutlet !== last2(commands)) {
-      throw new RuntimeError(4004, (typeof ngDevMode === "undefined" || ngDevMode) && "{outlets:{}} has to be the last command");
-    }
-  }
-  toRoot() {
-    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == "/";
-  }
-};
-function computeNavigation(commands) {
-  if (typeof commands[0] === "string" && commands.length === 1 && commands[0] === "/") {
-    return new Navigation(true, 0, commands);
-  }
-  let numberOfDoubleDots = 0;
-  let isAbsolute = false;
-  const res = commands.reduce((res2, cmd, cmdIdx) => {
-    if (typeof cmd === "object" && cmd != null) {
-      if (cmd.outlets) {
-        const outlets = {};
-        Object.entries(cmd.outlets).forEach(([name, commands2]) => {
-          outlets[name] = typeof commands2 === "string" ? commands2.split("/") : commands2;
-        });
-        return [...res2, {
-          outlets
-        }];
-      }
-      if (cmd.segmentPath) {
-        return [...res2, cmd.segmentPath];
-      }
-    }
-    if (!(typeof cmd === "string")) {
-      return [...res2, cmd];
-    }
-    if (cmdIdx === 0) {
-      cmd.split("/").forEach((urlPart, partIndex) => {
-        if (partIndex == 0 && urlPart === ".") {
-        } else if (partIndex == 0 && urlPart === "") {
-          isAbsolute = true;
-        } else if (urlPart === "..") {
-          numberOfDoubleDots++;
-        } else if (urlPart != "") {
-          res2.push(urlPart);
-        }
-      });
-      return res2;
-    }
-    return [...res2, cmd];
-  }, []);
-  return new Navigation(isAbsolute, numberOfDoubleDots, res);
-}
-var Position = class {
-  segmentGroup;
-  processChildren;
-  index;
-  constructor(segmentGroup, processChildren, index) {
-    this.segmentGroup = segmentGroup;
-    this.processChildren = processChildren;
-    this.index = index;
-  }
-};
-function findStartingPositionForTargetGroup(nav, root, target) {
-  if (nav.isAbsolute) {
-    return new Position(root, true, 0);
-  }
-  if (!target) {
-    return new Position(root, false, NaN);
-  }
-  if (target.parent === null) {
-    return new Position(target, true, 0);
-  }
-  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
-  const index = target.segments.length - 1 + modifier;
-  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);
-}
-function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
-  let g = group;
-  let ci = index;
-  let dd = numberOfDoubleDots;
-  while (dd > ci) {
-    dd -= ci;
-    g = g.parent;
-    if (!g) {
-      throw new RuntimeError(4005, (typeof ngDevMode === "undefined" || ngDevMode) && "Invalid number of '../'");
-    }
-    ci = g.segments.length;
-  }
-  return new Position(g, false, ci - dd);
-}
-function getOutlets(commands) {
-  if (isCommandWithOutlets(commands[0])) {
-    return commands[0].outlets;
-  }
-  return {
-    [PRIMARY_OUTLET]: commands
-  };
-}
-function updateSegmentGroup(segmentGroup, startIndex, commands) {
-  segmentGroup ??= new UrlSegmentGroup([], {});
-  if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
-    return updateSegmentGroupChildren(segmentGroup, startIndex, commands);
-  }
-  const m = prefixedWith(segmentGroup, startIndex, commands);
-  const slicedCommands = commands.slice(m.commandIndex);
-  if (m.match && m.pathIndex < segmentGroup.segments.length) {
-    const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});
-    g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);
-    return updateSegmentGroupChildren(g, 0, slicedCommands);
-  } else if (m.match && slicedCommands.length === 0) {
-    return new UrlSegmentGroup(segmentGroup.segments, {});
-  } else if (m.match && !segmentGroup.hasChildren()) {
-    return createNewSegmentGroup(segmentGroup, startIndex, commands);
-  } else if (m.match) {
-    return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);
-  } else {
-    return createNewSegmentGroup(segmentGroup, startIndex, commands);
-  }
-}
-function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
-  if (commands.length === 0) {
-    return new UrlSegmentGroup(segmentGroup.segments, {});
-  } else {
-    const outlets = getOutlets(commands);
-    const children = {};
-    if (Object.keys(outlets).some((o) => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {
-      const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);
-      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);
-    }
-    Object.entries(outlets).forEach(([outlet, commands2]) => {
-      if (typeof commands2 === "string") {
-        commands2 = [commands2];
-      }
-      if (commands2 !== null) {
-        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands2);
-      }
-    });
-    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {
-      if (outlets[childOutlet] === void 0) {
-        children[childOutlet] = child;
-      }
-    });
-    return new UrlSegmentGroup(segmentGroup.segments, children);
-  }
-}
-function prefixedWith(segmentGroup, startIndex, commands) {
-  let currentCommandIndex = 0;
-  let currentPathIndex = startIndex;
-  const noMatch2 = {
-    match: false,
-    pathIndex: 0,
-    commandIndex: 0
-  };
-  while (currentPathIndex < segmentGroup.segments.length) {
-    if (currentCommandIndex >= commands.length) return noMatch2;
-    const path = segmentGroup.segments[currentPathIndex];
-    const command = commands[currentCommandIndex];
-    if (isCommandWithOutlets(command)) {
-      break;
-    }
-    const curr = `${command}`;
-    const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;
-    if (currentPathIndex > 0 && curr === void 0) break;
-    if (curr && next && typeof next === "object" && next.outlets === void 0) {
-      if (!compare(curr, next, path)) return noMatch2;
-      currentCommandIndex += 2;
-    } else {
-      if (!compare(curr, {}, path)) return noMatch2;
-      currentCommandIndex++;
-    }
-    currentPathIndex++;
-  }
-  return {
-    match: true,
-    pathIndex: currentPathIndex,
-    commandIndex: currentCommandIndex
-  };
-}
-function createNewSegmentGroup(segmentGroup, startIndex, commands) {
-  const paths = segmentGroup.segments.slice(0, startIndex);
-  let i = 0;
-  while (i < commands.length) {
-    const command = commands[i];
-    if (isCommandWithOutlets(command)) {
-      const children = createNewSegmentChildren(command.outlets);
-      return new UrlSegmentGroup(paths, children);
-    }
-    if (i === 0 && isMatrixParams(commands[0])) {
-      const p = segmentGroup.segments[startIndex];
-      paths.push(new UrlSegment(p.path, stringify(commands[0])));
-      i++;
-      continue;
-    }
-    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;
-    const next = i < commands.length - 1 ? commands[i + 1] : null;
-    if (curr && next && isMatrixParams(next)) {
-      paths.push(new UrlSegment(curr, stringify(next)));
-      i += 2;
-    } else {
-      paths.push(new UrlSegment(curr, {}));
-      i++;
-    }
-  }
-  return new UrlSegmentGroup(paths, {});
-}
-function createNewSegmentChildren(outlets) {
-  const children = {};
-  Object.entries(outlets).forEach(([outlet, commands]) => {
-    if (typeof commands === "string") {
-      commands = [commands];
-    }
-    if (commands !== null) {
-      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);
-    }
-  });
-  return children;
-}
-function stringify(params) {
-  const res = {};
-  Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);
-  return res;
-}
-function compare(path, params, segment) {
-  return path == segment.path && shallowEqual(params, segment.parameters);
-}
-var IMPERATIVE_NAVIGATION = "imperative";
-var EventType;
-(function(EventType2) {
-  EventType2[EventType2["NavigationStart"] = 0] = "NavigationStart";
-  EventType2[EventType2["NavigationEnd"] = 1] = "NavigationEnd";
-  EventType2[EventType2["NavigationCancel"] = 2] = "NavigationCancel";
-  EventType2[EventType2["NavigationError"] = 3] = "NavigationError";
-  EventType2[EventType2["RoutesRecognized"] = 4] = "RoutesRecognized";
-  EventType2[EventType2["ResolveStart"] = 5] = "ResolveStart";
-  EventType2[EventType2["ResolveEnd"] = 6] = "ResolveEnd";
-  EventType2[EventType2["GuardsCheckStart"] = 7] = "GuardsCheckStart";
-  EventType2[EventType2["GuardsCheckEnd"] = 8] = "GuardsCheckEnd";
-  EventType2[EventType2["RouteConfigLoadStart"] = 9] = "RouteConfigLoadStart";
-  EventType2[EventType2["RouteConfigLoadEnd"] = 10] = "RouteConfigLoadEnd";
-  EventType2[EventType2["ChildActivationStart"] = 11] = "ChildActivationStart";
-  EventType2[EventType2["ChildActivationEnd"] = 12] = "ChildActivationEnd";
-  EventType2[EventType2["ActivationStart"] = 13] = "ActivationStart";
-  EventType2[EventType2["ActivationEnd"] = 14] = "ActivationEnd";
-  EventType2[EventType2["Scroll"] = 15] = "Scroll";
-  EventType2[EventType2["NavigationSkipped"] = 16] = "NavigationSkipped";
-})(EventType || (EventType = {}));
-var RouterEvent = class {
-  id;
-  url;
-  constructor(id, url) {
-    this.id = id;
-    this.url = url;
-  }
-};
-var NavigationStart = class extends RouterEvent {
-  type = EventType.NavigationStart;
-  /**
-   * Identifies the call or event that triggered the navigation.
-   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.
-   *
-   * @see {@link NavigationEnd}
-   * @see {@link NavigationCancel}
-   * @see {@link NavigationError}
-   */
-  navigationTrigger;
-  /**
-   * The navigation state that was previously supplied to the `pushState` call,
-   * when the navigation is triggered by a `popstate` event. Otherwise null.
-   *
-   * The state object is defined by `NavigationExtras`, and contains any
-   * developer-defined state value, as well as a unique ID that
-   * the router assigns to every router transition/navigation.
-   *
-   * From the perspective of the router, the router never "goes back".
-   * When the user clicks on the back button in the browser,
-   * a new navigation ID is created.
-   *
-   * Use the ID in this previous-state object to differentiate between a newly created
-   * state and one returned to by a `popstate` event, so that you can restore some
-   * remembered state, such as scroll position.
-   *
-   */
-  restoredState;
-  constructor(id, url, navigationTrigger = "imperative", restoredState = null) {
-    super(id, url);
-    this.navigationTrigger = navigationTrigger;
-    this.restoredState = restoredState;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;
-  }
-};
-var NavigationEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  type = EventType.NavigationEnd;
-  constructor(id, url, urlAfterRedirects) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;
-  }
-};
-var NavigationCancellationCode;
-(function(NavigationCancellationCode2) {
-  NavigationCancellationCode2[NavigationCancellationCode2["Redirect"] = 0] = "Redirect";
-  NavigationCancellationCode2[NavigationCancellationCode2["SupersededByNewNavigation"] = 1] = "SupersededByNewNavigation";
-  NavigationCancellationCode2[NavigationCancellationCode2["NoDataFromResolver"] = 2] = "NoDataFromResolver";
-  NavigationCancellationCode2[NavigationCancellationCode2["GuardRejected"] = 3] = "GuardRejected";
-})(NavigationCancellationCode || (NavigationCancellationCode = {}));
-var NavigationSkippedCode;
-(function(NavigationSkippedCode2) {
-  NavigationSkippedCode2[NavigationSkippedCode2["IgnoredSameUrlNavigation"] = 0] = "IgnoredSameUrlNavigation";
-  NavigationSkippedCode2[NavigationSkippedCode2["IgnoredByUrlHandlingStrategy"] = 1] = "IgnoredByUrlHandlingStrategy";
-})(NavigationSkippedCode || (NavigationSkippedCode = {}));
-var NavigationCancel = class extends RouterEvent {
-  reason;
-  code;
-  type = EventType.NavigationCancel;
-  constructor(id, url, reason, code) {
-    super(id, url);
-    this.reason = reason;
-    this.code = code;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;
-  }
-};
-var NavigationSkipped = class extends RouterEvent {
-  reason;
-  code;
-  type = EventType.NavigationSkipped;
-  constructor(id, url, reason, code) {
-    super(id, url);
-    this.reason = reason;
-    this.code = code;
-  }
-};
-var NavigationError = class extends RouterEvent {
-  error;
-  target;
-  type = EventType.NavigationError;
-  constructor(id, url, error, target) {
-    super(id, url);
-    this.error = error;
-    this.target = target;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;
-  }
-};
-var RoutesRecognized = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.RoutesRecognized;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var GuardsCheckStart = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.GuardsCheckStart;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var GuardsCheckEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  shouldActivate;
-  type = EventType.GuardsCheckEnd;
-  constructor(id, url, urlAfterRedirects, state, shouldActivate) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-    this.shouldActivate = shouldActivate;
-  }
-  toString() {
-    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;
-  }
-};
-var ResolveStart = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.ResolveStart;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var ResolveEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.ResolveEnd;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var RouteConfigLoadStart = class {
-  route;
-  type = EventType.RouteConfigLoadStart;
-  constructor(route) {
-    this.route = route;
-  }
-  toString() {
-    return `RouteConfigLoadStart(path: ${this.route.path})`;
-  }
-};
-var RouteConfigLoadEnd = class {
-  route;
-  type = EventType.RouteConfigLoadEnd;
-  constructor(route) {
-    this.route = route;
-  }
-  toString() {
-    return `RouteConfigLoadEnd(path: ${this.route.path})`;
-  }
-};
-var ChildActivationStart = class {
-  snapshot;
-  type = EventType.ChildActivationStart;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ChildActivationStart(path: '${path}')`;
-  }
-};
-var ChildActivationEnd = class {
-  snapshot;
-  type = EventType.ChildActivationEnd;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ChildActivationEnd(path: '${path}')`;
-  }
-};
-var ActivationStart = class {
-  snapshot;
-  type = EventType.ActivationStart;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ActivationStart(path: '${path}')`;
-  }
-};
-var ActivationEnd = class {
-  snapshot;
-  type = EventType.ActivationEnd;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ActivationEnd(path: '${path}')`;
-  }
-};
-var Scroll = class {
-  routerEvent;
-  position;
-  anchor;
-  type = EventType.Scroll;
-  constructor(routerEvent, position, anchor) {
-    this.routerEvent = routerEvent;
-    this.position = position;
-    this.anchor = anchor;
-  }
-  toString() {
-    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;
-    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;
-  }
-};
-var BeforeActivateRoutes = class {
-};
-var RedirectRequest = class {
-  url;
-  navigationBehaviorOptions;
-  constructor(url, navigationBehaviorOptions) {
-    this.url = url;
-    this.navigationBehaviorOptions = navigationBehaviorOptions;
-  }
-};
-function stringifyEvent(routerEvent) {
-  switch (routerEvent.type) {
-    case EventType.ActivationEnd:
-      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ActivationStart:
-      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ChildActivationEnd:
-      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ChildActivationStart:
-      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.GuardsCheckEnd:
-      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;
-    case EventType.GuardsCheckStart:
-      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.NavigationCancel:
-      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.NavigationSkipped:
-      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.NavigationEnd:
-      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;
-    case EventType.NavigationError:
-      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;
-    case EventType.NavigationStart:
-      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.ResolveEnd:
-      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.ResolveStart:
-      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.RouteConfigLoadEnd:
-      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;
-    case EventType.RouteConfigLoadStart:
-      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;
-    case EventType.RoutesRecognized:
-      return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.Scroll:
-      const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;
-      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;
-  }
-}
-function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
-  if (route.providers && !route._injector) {
-    route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
-  }
-  return route._injector ?? currentInjector;
-}
-function validateConfig(config, parentPath = "", requireStandaloneComponents = false) {
-  for (let i = 0; i < config.length; i++) {
-    const route = config[i];
-    const fullPath = getFullPath(parentPath, route);
-    validateNode(route, fullPath, requireStandaloneComponents);
-  }
-}
-function assertStandalone(fullPath, component) {
-  if (component && isNgModule(component)) {
-    throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, but it must be used with standalone components. Use 'loadChildren' instead.`);
-  } else if (component && !isStandalone(component)) {
-    throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
-  }
-}
-function validateNode(route, fullPath, requireStandaloneComponents) {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (!route) {
-      throw new RuntimeError(4014, `
-      Invalid configuration of route '${fullPath}': Encountered undefined route.
-      The reason might be an extra comma.
-
-      Example:
-      const routes: Routes = [
-        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
-        { path: 'dashboard',  component: DashboardComponent },, << two commas
-        { path: 'detail/:id', component: HeroDetailComponent }
-      ];
-    `);
-    }
-    if (Array.isArray(route)) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
-    }
-    if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
-    }
-    if (route.redirectTo && route.children) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
-    }
-    if (route.redirectTo && route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
-    }
-    if (route.children && route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
-    }
-    if (route.redirectTo && (route.component || route.loadComponent)) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
-    }
-    if (route.component && route.loadComponent) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
-    }
-    if (route.redirectTo && route.canActivate) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation so canActivate will never be executed.`);
-    }
-    if (route.path && route.matcher) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
-    }
-    if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
-    }
-    if (route.path === void 0 && route.matcher === void 0) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
-    }
-    if (typeof route.path === "string" && route.path.charAt(0) === "/") {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
-    }
-    if (route.path === "" && route.redirectTo !== void 0 && route.pathMatch === void 0) {
-      const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
-      throw new RuntimeError(4014, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
-    }
-    if (requireStandaloneComponents) {
-      assertStandalone(fullPath, route.component);
-    }
-  }
-  if (route.children) {
-    validateConfig(route.children, fullPath, requireStandaloneComponents);
-  }
-}
-function getFullPath(parentPath, currentRoute) {
-  if (!currentRoute) {
-    return parentPath;
-  }
-  if (!parentPath && !currentRoute.path) {
-    return "";
-  } else if (parentPath && !currentRoute.path) {
-    return `${parentPath}/`;
-  } else if (!parentPath && currentRoute.path) {
-    return currentRoute.path;
-  } else {
-    return `${parentPath}/${currentRoute.path}`;
-  }
-}
-function getOutlet(route) {
-  return route.outlet || PRIMARY_OUTLET;
-}
-function sortByMatchingOutlets(routes, outletName) {
-  const sortedConfig = routes.filter((r) => getOutlet(r) === outletName);
-  sortedConfig.push(...routes.filter((r) => getOutlet(r) !== outletName));
-  return sortedConfig;
-}
-function getClosestRouteInjector(snapshot) {
-  if (!snapshot) return null;
-  if (snapshot.routeConfig?._injector) {
-    return snapshot.routeConfig._injector;
-  }
-  for (let s = snapshot.parent; s; s = s.parent) {
-    const route = s.routeConfig;
-    if (route?._loadedInjector) return route._loadedInjector;
-    if (route?._injector) return route._injector;
-  }
-  return null;
-}
-var OutletContext = class {
-  rootInjector;
-  outlet = null;
-  route = null;
-  children;
-  attachRef = null;
-  get injector() {
-    return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;
-  }
-  constructor(rootInjector) {
-    this.rootInjector = rootInjector;
-    this.children = new ChildrenOutletContexts(this.rootInjector);
-  }
-};
-var ChildrenOutletContexts = class _ChildrenOutletContexts {
-  rootInjector;
-  // contexts for child outlets, by name.
-  contexts = /* @__PURE__ */ new Map();
-  /** @nodoc */
-  constructor(rootInjector) {
-    this.rootInjector = rootInjector;
-  }
-  /** Called when a `RouterOutlet` directive is instantiated */
-  onChildOutletCreated(childName, outlet) {
-    const context = this.getOrCreateContext(childName);
-    context.outlet = outlet;
-    this.contexts.set(childName, context);
-  }
-  /**
-   * Called when a `RouterOutlet` directive is destroyed.
-   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
-   * re-created later.
-   */
-  onChildOutletDestroyed(childName) {
-    const context = this.getContext(childName);
-    if (context) {
-      context.outlet = null;
-      context.attachRef = null;
-    }
-  }
-  /**
-   * Called when the corresponding route is deactivated during navigation.
-   * Because the component get destroyed, all children outlet are destroyed.
-   */
-  onOutletDeactivated() {
-    const contexts = this.contexts;
-    this.contexts = /* @__PURE__ */ new Map();
-    return contexts;
-  }
-  onOutletReAttached(contexts) {
-    this.contexts = contexts;
-  }
-  getOrCreateContext(childName) {
-    let context = this.getContext(childName);
-    if (!context) {
-      context = new OutletContext(this.rootInjector);
-      this.contexts.set(childName, context);
-    }
-    return context;
-  }
-  getContext(childName) {
-    return this.contexts.get(childName) || null;
-  }
-  static ɵfac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ChildrenOutletContexts)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ChildrenOutletContexts,
-    factory: _ChildrenOutletContexts.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ChildrenOutletContexts, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var Tree = class {
-  /** @internal */
-  _root;
-  constructor(root) {
-    this._root = root;
-  }
-  get root() {
-    return this._root.value;
-  }
-  /**
-   * @internal
-   */
-  parent(t) {
-    const p = this.pathFromRoot(t);
-    return p.length > 1 ? p[p.length - 2] : null;
-  }
-  /**
-   * @internal
-   */
-  children(t) {
-    const n = findNode(t, this._root);
-    return n ? n.children.map((t2) => t2.value) : [];
-  }
-  /**
-   * @internal
-   */
-  firstChild(t) {
-    const n = findNode(t, this._root);
-    return n && n.children.length > 0 ? n.children[0].value : null;
-  }
-  /**
-   * @internal
-   */
-  siblings(t) {
-    const p = findPath(t, this._root);
-    if (p.length < 2) return [];
-    const c = p[p.length - 2].children.map((c2) => c2.value);
-    return c.filter((cc) => cc !== t);
-  }
-  /**
-   * @internal
-   */
-  pathFromRoot(t) {
-    return findPath(t, this._root).map((s) => s.value);
-  }
-};
-function findNode(value, node) {
-  if (value === node.value) return node;
-  for (const child of node.children) {
-    const node2 = findNode(value, child);
-    if (node2) return node2;
-  }
-  return null;
-}
-function findPath(value, node) {
-  if (value === node.value) return [node];
-  for (const child of node.children) {
-    const path = findPath(value, child);
-    if (path.length) {
-      path.unshift(node);
-      return path;
-    }
-  }
-  return [];
-}
-var TreeNode = class {
-  value;
-  children;
-  constructor(value, children) {
-    this.value = value;
-    this.children = children;
-  }
-  toString() {
-    return `TreeNode(${this.value})`;
-  }
-};
-function nodeChildrenAsMap(node) {
-  const map2 = {};
-  if (node) {
-    node.children.forEach((child) => map2[child.value.outlet] = child);
-  }
-  return map2;
-}
-var RouterState = class extends Tree {
-  snapshot;
-  /** @internal */
-  constructor(root, snapshot) {
-    super(root);
-    this.snapshot = snapshot;
-    setRouterState(this, root);
-  }
-  toString() {
-    return this.snapshot.toString();
-  }
-};
-function createEmptyState(rootComponent) {
-  const snapshot = createEmptyStateSnapshot(rootComponent);
-  const emptyUrl = new BehaviorSubject([new UrlSegment("", {})]);
-  const emptyParams = new BehaviorSubject({});
-  const emptyData = new BehaviorSubject({});
-  const emptyQueryParams = new BehaviorSubject({});
-  const fragment = new BehaviorSubject("");
-  const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);
-  activated.snapshot = snapshot.root;
-  return new RouterState(new TreeNode(activated, []), snapshot);
-}
-function createEmptyStateSnapshot(rootComponent) {
-  const emptyParams = {};
-  const emptyData = {};
-  const emptyQueryParams = {};
-  const fragment = "";
-  const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});
-  return new RouterStateSnapshot("", new TreeNode(activated, []));
-}
-var ActivatedRoute = class {
-  urlSubject;
-  paramsSubject;
-  queryParamsSubject;
-  fragmentSubject;
-  dataSubject;
-  outlet;
-  component;
-  /** The current snapshot of this route */
-  snapshot;
-  /** @internal */
-  _futureSnapshot;
-  /** @internal */
-  _routerState;
-  /** @internal */
-  _paramMap;
-  /** @internal */
-  _queryParamMap;
-  /** An Observable of the resolved route title */
-  title;
-  /** An observable of the URL segments matched by this route. */
-  url;
-  /** An observable of the matrix parameters scoped to this route. */
-  params;
-  /** An observable of the query parameters shared by all the routes. */
-  queryParams;
-  /** An observable of the URL fragment shared by all the routes. */
-  fragment;
-  /** An observable of the static and resolved data of this route. */
-  data;
-  /** @internal */
-  constructor(urlSubject, paramsSubject, queryParamsSubject, fragmentSubject, dataSubject, outlet, component, futureSnapshot) {
-    this.urlSubject = urlSubject;
-    this.paramsSubject = paramsSubject;
-    this.queryParamsSubject = queryParamsSubject;
-    this.fragmentSubject = fragmentSubject;
-    this.dataSubject = dataSubject;
-    this.outlet = outlet;
-    this.component = component;
-    this._futureSnapshot = futureSnapshot;
-    this.title = this.dataSubject?.pipe(map((d) => d[RouteTitleKey])) ?? of(void 0);
-    this.url = urlSubject;
-    this.params = paramsSubject;
-    this.queryParams = queryParamsSubject;
-    this.fragment = fragmentSubject;
-    this.data = dataSubject;
-  }
-  /** The configuration used to match this route. */
-  get routeConfig() {
-    return this._futureSnapshot.routeConfig;
-  }
-  /** The root of the router state. */
-  get root() {
-    return this._routerState.root;
-  }
-  /** The parent of this route in the router state tree. */
-  get parent() {
-    return this._routerState.parent(this);
-  }
-  /** The first child of this route in the router state tree. */
-  get firstChild() {
-    return this._routerState.firstChild(this);
-  }
-  /** The children of this route in the router state tree. */
-  get children() {
-    return this._routerState.children(this);
-  }
-  /** The path from the root of the router state tree to this route. */
-  get pathFromRoot() {
-    return this._routerState.pathFromRoot(this);
-  }
-  /**
-   * An Observable that contains a map of the required and optional parameters
-   * specific to the route.
-   * The map supports retrieving single and multiple values from the same parameter.
-   */
-  get paramMap() {
-    this._paramMap ??= this.params.pipe(map((p) => convertToParamMap(p)));
-    return this._paramMap;
-  }
-  /**
-   * An Observable that contains a map of the query parameters available to all routes.
-   * The map supports retrieving single and multiple values from the query parameter.
-   */
-  get queryParamMap() {
-    this._queryParamMap ??= this.queryParams.pipe(map((p) => convertToParamMap(p)));
-    return this._queryParamMap;
-  }
-  toString() {
-    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;
-  }
-};
-function getInherited(route, parent, paramsInheritanceStrategy = "emptyOnly") {
-  let inherited;
-  const {
-    routeConfig
-  } = route;
-  if (parent !== null && (paramsInheritanceStrategy === "always" || // inherit parent data if route is empty path
-  routeConfig?.path === "" || // inherit parent data if parent was componentless
-  !parent.component && !parent.routeConfig?.loadComponent)) {
-    inherited = {
-      params: __spreadValues(__spreadValues({}, parent.params), route.params),
-      data: __spreadValues(__spreadValues({}, parent.data), route.data),
-      resolve: __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, route.data), parent.data), routeConfig?.data), route._resolvedData)
-    };
-  } else {
-    inherited = {
-      params: __spreadValues({}, route.params),
-      data: __spreadValues({}, route.data),
-      resolve: __spreadValues(__spreadValues({}, route.data), route._resolvedData ?? {})
-    };
-  }
-  if (routeConfig && hasStaticTitle(routeConfig)) {
-    inherited.resolve[RouteTitleKey] = routeConfig.title;
-  }
-  return inherited;
-}
-var ActivatedRouteSnapshot = class {
-  url;
-  params;
-  queryParams;
-  fragment;
-  data;
-  outlet;
-  component;
-  /** The configuration used to match this route **/
-  routeConfig;
-  /** @internal */
-  _resolve;
-  /** @internal */
-  _resolvedData;
-  /** @internal */
-  _routerState;
-  /** @internal */
-  _paramMap;
-  /** @internal */
-  _queryParamMap;
-  /** The resolved route title */
-  get title() {
-    return this.data?.[RouteTitleKey];
-  }
-  /** @internal */
-  constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve) {
-    this.url = url;
-    this.params = params;
-    this.queryParams = queryParams;
-    this.fragment = fragment;
-    this.data = data;
-    this.outlet = outlet;
-    this.component = component;
-    this.routeConfig = routeConfig;
-    this._resolve = resolve;
-  }
-  /** The root of the router state */
-  get root() {
-    return this._routerState.root;
-  }
-  /** The parent of this route in the router state tree */
-  get parent() {
-    return this._routerState.parent(this);
-  }
-  /** The first child of this route in the router state tree */
-  get firstChild() {
-    return this._routerState.firstChild(this);
-  }
-  /** The children of this route in the router state tree */
-  get children() {
-    return this._routerState.children(this);
-  }
-  /** The path from the root of the router state tree to this route */
-  get pathFromRoot() {
-    return this._routerState.pathFromRoot(this);
-  }
-  get paramMap() {
-    this._paramMap ??= convertToParamMap(this.params);
-    return this._paramMap;
-  }
-  get queryParamMap() {
-    this._queryParamMap ??= convertToParamMap(this.queryParams);
-    return this._queryParamMap;
-  }
-  toString() {
-    const url = this.url.map((segment) => segment.toString()).join("/");
-    const matched = this.routeConfig ? this.routeConfig.path : "";
-    return `Route(url:'${url}', path:'${matched}')`;
-  }
-};
-var RouterStateSnapshot = class extends Tree {
-  url;
-  /** @internal */
-  constructor(url, root) {
-    super(root);
-    this.url = url;
-    setRouterState(this, root);
-  }
-  toString() {
-    return serializeNode(this._root);
-  }
-};
-function setRouterState(state, node) {
-  node.value._routerState = state;
-  node.children.forEach((c) => setRouterState(state, c));
-}
-function serializeNode(node) {
-  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(", ")} } ` : "";
-  return `${node.value}${c}`;
-}
-function advanceActivatedRoute(route) {
-  if (route.snapshot) {
-    const currentSnapshot = route.snapshot;
-    const nextSnapshot = route._futureSnapshot;
-    route.snapshot = nextSnapshot;
-    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {
-      route.queryParamsSubject.next(nextSnapshot.queryParams);
-    }
-    if (currentSnapshot.fragment !== nextSnapshot.fragment) {
-      route.fragmentSubject.next(nextSnapshot.fragment);
-    }
-    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {
-      route.paramsSubject.next(nextSnapshot.params);
-    }
-    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {
-      route.urlSubject.next(nextSnapshot.url);
-    }
-    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {
-      route.dataSubject.next(nextSnapshot.data);
-    }
-  } else {
-    route.snapshot = route._futureSnapshot;
-    route.dataSubject.next(route._futureSnapshot.data);
-  }
-}
-function equalParamsAndUrlSegments(a, b) {
-  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);
-  const parentsMismatch = !a.parent !== !b.parent;
-  return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));
-}
-function hasStaticTitle(config) {
-  return typeof config.title === "string" || config.title === null;
-}
-var ROUTER_OUTLET_DATA = new InjectionToken(ngDevMode ? "RouterOutlet data" : "");
-var RouterOutlet = class _RouterOutlet {
-  activated = null;
-  /** @internal */
-  get activatedComponentRef() {
-    return this.activated;
-  }
-  _activatedRoute = null;
-  /**
-   * The name of the outlet
-   *
-   */
-  name = PRIMARY_OUTLET;
-  activateEvents = new EventEmitter();
-  deactivateEvents = new EventEmitter();
-  /**
-   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a
-   * previously detached subtree.
-   **/
-  attachEvents = new EventEmitter();
-  /**
-   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the
-   * subtree.
-   */
-  detachEvents = new EventEmitter();
-  /**
-   * Data that will be provided to the child injector through the `ROUTER_OUTLET_DATA` token.
-   *
-   * When unset, the value of the token is `undefined` by default.
-   */
-  routerOutletData = input(void 0);
-  parentContexts = inject(ChildrenOutletContexts);
-  location = inject(ViewContainerRef);
-  changeDetector = inject(ChangeDetectorRef);
-  inputBinder = inject(INPUT_BINDER, {
-    optional: true
-  });
-  /** @nodoc */
-  supportsBindingToComponentInputs = true;
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (changes["name"]) {
-      const {
-        firstChange,
-        previousValue
-      } = changes["name"];
-      if (firstChange) {
-        return;
-      }
-      if (this.isTrackedInParentContexts(previousValue)) {
-        this.deactivate();
-        this.parentContexts.onChildOutletDestroyed(previousValue);
-      }
-      this.initializeOutletWithName();
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (this.isTrackedInParentContexts(this.name)) {
-      this.parentContexts.onChildOutletDestroyed(this.name);
-    }
-    this.inputBinder?.unsubscribeFromRouteData(this);
-  }
-  isTrackedInParentContexts(outletName) {
-    return this.parentContexts.getContext(outletName)?.outlet === this;
-  }
-  /** @nodoc */
-  ngOnInit() {
-    this.initializeOutletWithName();
-  }
-  initializeOutletWithName() {
-    this.parentContexts.onChildOutletCreated(this.name, this);
-    if (this.activated) {
-      return;
-    }
-    const context = this.parentContexts.getContext(this.name);
-    if (context?.route) {
-      if (context.attachRef) {
-        this.attach(context.attachRef, context.route);
-      } else {
-        this.activateWith(context.route, context.injector);
-      }
-    }
-  }
-  get isActivated() {
-    return !!this.activated;
-  }
-  /**
-   * @returns The currently activated component instance.
-   * @throws An error if the outlet is not activated.
-   */
-  get component() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    return this.activated.instance;
-  }
-  get activatedRoute() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    return this._activatedRoute;
-  }
-  get activatedRouteData() {
-    if (this._activatedRoute) {
-      return this._activatedRoute.snapshot.data;
-    }
-    return {};
-  }
-  /**
-   * Called when the `RouteReuseStrategy` instructs to detach the subtree
-   */
-  detach() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    this.location.detach();
-    const cmp = this.activated;
-    this.activated = null;
-    this._activatedRoute = null;
-    this.detachEvents.emit(cmp.instance);
-    return cmp;
-  }
-  /**
-   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
-   */
-  attach(ref, activatedRoute) {
-    this.activated = ref;
-    this._activatedRoute = activatedRoute;
-    this.location.insert(ref.hostView);
-    this.inputBinder?.bindActivatedRouteToOutletComponent(this);
-    this.attachEvents.emit(ref.instance);
-  }
-  deactivate() {
-    if (this.activated) {
-      const c = this.component;
-      this.activated.destroy();
-      this.activated = null;
-      this._activatedRoute = null;
-      this.deactivateEvents.emit(c);
-    }
-  }
-  activateWith(activatedRoute, environmentInjector) {
-    if (this.isActivated) {
-      throw new RuntimeError(4013, (typeof ngDevMode === "undefined" || ngDevMode) && "Cannot activate an already activated outlet");
-    }
-    this._activatedRoute = activatedRoute;
-    const location = this.location;
-    const snapshot = activatedRoute.snapshot;
-    const component = snapshot.component;
-    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;
-    const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);
-    this.activated = location.createComponent(component, {
-      index: location.length,
-      injector,
-      environmentInjector
-    });
-    this.changeDetector.markForCheck();
-    this.inputBinder?.bindActivatedRouteToOutletComponent(this);
-    this.activateEvents.emit(this.activated.instance);
-  }
-  static ɵfac = function RouterOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterOutlet)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterOutlet,
-    selectors: [["router-outlet"]],
-    inputs: {
-      name: "name",
-      routerOutletData: [1, "routerOutletData"]
-    },
-    outputs: {
-      activateEvents: "activate",
-      deactivateEvents: "deactivate",
-      attachEvents: "attach",
-      detachEvents: "detach"
-    },
-    exportAs: ["outlet"],
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "router-outlet",
-      exportAs: "outlet"
-    }]
-  }], null, {
-    name: [{
-      type: Input
-    }],
-    activateEvents: [{
-      type: Output,
-      args: ["activate"]
-    }],
-    deactivateEvents: [{
-      type: Output,
-      args: ["deactivate"]
-    }],
-    attachEvents: [{
-      type: Output,
-      args: ["attach"]
-    }],
-    detachEvents: [{
-      type: Output,
-      args: ["detach"]
-    }]
-  });
-})();
-var OutletInjector = class _OutletInjector {
-  route;
-  childContexts;
-  parent;
-  outletData;
-  /**
-   * This injector has a special handing for the `ActivatedRoute` and
-   * `ChildrenOutletContexts` tokens: it returns corresponding values for those
-   * tokens dynamically. This behavior is different from the regular injector logic,
-   * when we initialize and store a value, which is later returned for all inject
-   * requests.
-   *
-   * In some cases (e.g. when using `@defer`), this dynamic behavior requires special
-   * handling. This function allows to identify an instance of the `OutletInjector` and
-   * create an instance of it without referring to the class itself (so this logic can
-   * be invoked from the `core` package). This helps to retain dynamic behavior for the
-   * mentioned tokens.
-   *
-   * Note: it's a temporary solution and we should explore how to support this case better.
-   */
-  __ngOutletInjector(parentInjector) {
-    return new _OutletInjector(this.route, this.childContexts, parentInjector, this.outletData);
-  }
-  constructor(route, childContexts, parent, outletData) {
-    this.route = route;
-    this.childContexts = childContexts;
-    this.parent = parent;
-    this.outletData = outletData;
-  }
-  get(token, notFoundValue) {
-    if (token === ActivatedRoute) {
-      return this.route;
-    }
-    if (token === ChildrenOutletContexts) {
-      return this.childContexts;
-    }
-    if (token === ROUTER_OUTLET_DATA) {
-      return this.outletData;
-    }
-    return this.parent.get(token, notFoundValue);
-  }
-};
-var INPUT_BINDER = new InjectionToken("");
-var RoutedComponentInputBinder = class _RoutedComponentInputBinder {
-  outletDataSubscriptions = /* @__PURE__ */ new Map();
-  bindActivatedRouteToOutletComponent(outlet) {
-    this.unsubscribeFromRouteData(outlet);
-    this.subscribeToRouteData(outlet);
-  }
-  unsubscribeFromRouteData(outlet) {
-    this.outletDataSubscriptions.get(outlet)?.unsubscribe();
-    this.outletDataSubscriptions.delete(outlet);
-  }
-  subscribeToRouteData(outlet) {
-    const {
-      activatedRoute
-    } = outlet;
-    const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe(switchMap(([queryParams, params, data], index) => {
-      data = __spreadValues(__spreadValues(__spreadValues({}, queryParams), params), data);
-      if (index === 0) {
-        return of(data);
-      }
-      return Promise.resolve(data);
-    })).subscribe((data) => {
-      if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {
-        this.unsubscribeFromRouteData(outlet);
-        return;
-      }
-      const mirror = reflectComponentType(activatedRoute.component);
-      if (!mirror) {
-        this.unsubscribeFromRouteData(outlet);
-        return;
-      }
-      for (const {
-        templateName
-      } of mirror.inputs) {
-        outlet.activatedComponentRef.setInput(templateName, data[templateName]);
-      }
-    });
-    this.outletDataSubscriptions.set(outlet, dataSubscription);
-  }
-  static ɵfac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RoutedComponentInputBinder)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RoutedComponentInputBinder,
-    factory: _RoutedComponentInputBinder.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RoutedComponentInputBinder, [{
-    type: Injectable
-  }], null, null);
-})();
-function createRouterState(routeReuseStrategy, curr, prevState) {
-  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : void 0);
-  return new RouterState(root, curr);
-}
-function createNode(routeReuseStrategy, curr, prevState) {
-  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
-    const value = prevState.value;
-    value._futureSnapshot = curr.value;
-    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
-    return new TreeNode(value, children);
-  } else {
-    if (routeReuseStrategy.shouldAttach(curr.value)) {
-      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);
-      if (detachedRouteHandle !== null) {
-        const tree2 = detachedRouteHandle.route;
-        tree2.value._futureSnapshot = curr.value;
-        tree2.children = curr.children.map((c) => createNode(routeReuseStrategy, c));
-        return tree2;
-      }
-    }
-    const value = createActivatedRoute(curr.value);
-    const children = curr.children.map((c) => createNode(routeReuseStrategy, c));
-    return new TreeNode(value, children);
-  }
-}
-function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
-  return curr.children.map((child) => {
-    for (const p of prevState.children) {
-      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
-        return createNode(routeReuseStrategy, child, p);
-      }
-    }
-    return createNode(routeReuseStrategy, child);
-  });
-}
-function createActivatedRoute(c) {
-  return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);
-}
-var RedirectCommand = class {
-  redirectTo;
-  navigationBehaviorOptions;
-  constructor(redirectTo, navigationBehaviorOptions) {
-    this.redirectTo = redirectTo;
-    this.navigationBehaviorOptions = navigationBehaviorOptions;
-  }
-};
-var NAVIGATION_CANCELING_ERROR = "ngNavigationCancelingError";
-function redirectingNavigationError(urlSerializer, redirect) {
-  const {
-    redirectTo,
-    navigationBehaviorOptions
-  } = isUrlTree(redirect) ? {
-    redirectTo: redirect,
-    navigationBehaviorOptions: void 0
-  } : redirect;
-  const error = navigationCancelingError(ngDevMode && `Redirecting to "${urlSerializer.serialize(redirectTo)}"`, NavigationCancellationCode.Redirect);
-  error.url = redirectTo;
-  error.navigationBehaviorOptions = navigationBehaviorOptions;
-  return error;
-}
-function navigationCancelingError(message, code) {
-  const error = new Error(`NavigationCancelingError: ${message || ""}`);
-  error[NAVIGATION_CANCELING_ERROR] = true;
-  error.cancellationCode = code;
-  return error;
-}
-function isRedirectingNavigationCancelingError(error) {
-  return isNavigationCancelingError(error) && isUrlTree(error.url);
-}
-function isNavigationCancelingError(error) {
-  return !!error && error[NAVIGATION_CANCELING_ERROR];
-}
-var warnedAboutUnsupportedInputBinding = false;
-var activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => map((t) => {
-  new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled).activate(rootContexts);
-  return t;
-});
-var ActivateRoutes = class {
-  routeReuseStrategy;
-  futureState;
-  currState;
-  forwardEvent;
-  inputBindingEnabled;
-  constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {
-    this.routeReuseStrategy = routeReuseStrategy;
-    this.futureState = futureState;
-    this.currState = currState;
-    this.forwardEvent = forwardEvent;
-    this.inputBindingEnabled = inputBindingEnabled;
-  }
-  activate(parentContexts) {
-    const futureRoot = this.futureState._root;
-    const currRoot = this.currState ? this.currState._root : null;
-    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);
-    advanceActivatedRoute(this.futureState.root);
-    this.activateChildRoutes(futureRoot, currRoot, parentContexts);
-  }
-  // De-activate the child route that are not re-used for the future state
-  deactivateChildRoutes(futureNode, currNode, contexts) {
-    const children = nodeChildrenAsMap(currNode);
-    futureNode.children.forEach((futureChild) => {
-      const childOutletName = futureChild.value.outlet;
-      this.deactivateRoutes(futureChild, children[childOutletName], contexts);
-      delete children[childOutletName];
-    });
-    Object.values(children).forEach((v) => {
-      this.deactivateRouteAndItsChildren(v, contexts);
-    });
-  }
-  deactivateRoutes(futureNode, currNode, parentContext) {
-    const future = futureNode.value;
-    const curr = currNode ? currNode.value : null;
-    if (future === curr) {
-      if (future.component) {
-        const context = parentContext.getContext(future.outlet);
-        if (context) {
-          this.deactivateChildRoutes(futureNode, currNode, context.children);
-        }
-      } else {
-        this.deactivateChildRoutes(futureNode, currNode, parentContext);
-      }
-    } else {
-      if (curr) {
-        this.deactivateRouteAndItsChildren(currNode, parentContext);
-      }
-    }
-  }
-  deactivateRouteAndItsChildren(route, parentContexts) {
-    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {
-      this.detachAndStoreRouteSubtree(route, parentContexts);
-    } else {
-      this.deactivateRouteAndOutlet(route, parentContexts);
-    }
-  }
-  detachAndStoreRouteSubtree(route, parentContexts) {
-    const context = parentContexts.getContext(route.value.outlet);
-    const contexts = context && route.value.component ? context.children : parentContexts;
-    const children = nodeChildrenAsMap(route);
-    for (const treeNode of Object.values(children)) {
-      this.deactivateRouteAndItsChildren(treeNode, contexts);
-    }
-    if (context && context.outlet) {
-      const componentRef = context.outlet.detach();
-      const contexts2 = context.children.onOutletDeactivated();
-      this.routeReuseStrategy.store(route.value.snapshot, {
-        componentRef,
-        route,
-        contexts: contexts2
-      });
-    }
-  }
-  deactivateRouteAndOutlet(route, parentContexts) {
-    const context = parentContexts.getContext(route.value.outlet);
-    const contexts = context && route.value.component ? context.children : parentContexts;
-    const children = nodeChildrenAsMap(route);
-    for (const treeNode of Object.values(children)) {
-      this.deactivateRouteAndItsChildren(treeNode, contexts);
-    }
-    if (context) {
-      if (context.outlet) {
-        context.outlet.deactivate();
-        context.children.onOutletDeactivated();
-      }
-      context.attachRef = null;
-      context.route = null;
-    }
-  }
-  activateChildRoutes(futureNode, currNode, contexts) {
-    const children = nodeChildrenAsMap(currNode);
-    futureNode.children.forEach((c) => {
-      this.activateRoutes(c, children[c.value.outlet], contexts);
-      this.forwardEvent(new ActivationEnd(c.value.snapshot));
-    });
-    if (futureNode.children.length) {
-      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));
-    }
-  }
-  activateRoutes(futureNode, currNode, parentContexts) {
-    const future = futureNode.value;
-    const curr = currNode ? currNode.value : null;
-    advanceActivatedRoute(future);
-    if (future === curr) {
-      if (future.component) {
-        const context = parentContexts.getOrCreateContext(future.outlet);
-        this.activateChildRoutes(futureNode, currNode, context.children);
-      } else {
-        this.activateChildRoutes(futureNode, currNode, parentContexts);
-      }
-    } else {
-      if (future.component) {
-        const context = parentContexts.getOrCreateContext(future.outlet);
-        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {
-          const stored = this.routeReuseStrategy.retrieve(future.snapshot);
-          this.routeReuseStrategy.store(future.snapshot, null);
-          context.children.onOutletReAttached(stored.contexts);
-          context.attachRef = stored.componentRef;
-          context.route = stored.route.value;
-          if (context.outlet) {
-            context.outlet.attach(stored.componentRef, stored.route.value);
-          }
-          advanceActivatedRoute(stored.route.value);
-          this.activateChildRoutes(futureNode, null, context.children);
-        } else {
-          context.attachRef = null;
-          context.route = future;
-          if (context.outlet) {
-            context.outlet.activateWith(future, context.injector);
-          }
-          this.activateChildRoutes(futureNode, null, context.children);
-        }
-      } else {
-        this.activateChildRoutes(futureNode, null, parentContexts);
-      }
-    }
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      const context = parentContexts.getOrCreateContext(future.outlet);
-      const outlet = context.outlet;
-      if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {
-        console.warn(`'withComponentInputBinding' feature is enabled but this application is using an outlet that may not support binding to component inputs.`);
-        warnedAboutUnsupportedInputBinding = true;
-      }
-    }
-  }
-};
-var CanActivate = class {
-  path;
-  route;
-  constructor(path) {
-    this.path = path;
-    this.route = this.path[this.path.length - 1];
-  }
-};
-var CanDeactivate = class {
-  component;
-  route;
-  constructor(component, route) {
-    this.component = component;
-    this.route = route;
-  }
-};
-function getAllRouteGuards(future, curr, parentContexts) {
-  const futureRoot = future._root;
-  const currRoot = curr ? curr._root : null;
-  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);
-}
-function getCanActivateChild(p) {
-  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;
-  if (!canActivateChild || canActivateChild.length === 0) return null;
-  return {
-    node: p,
-    guards: canActivateChild
-  };
-}
-function getTokenOrFunctionIdentity(tokenOrFunction, injector) {
-  const NOT_FOUND = Symbol();
-  const result = injector.get(tokenOrFunction, NOT_FOUND);
-  if (result === NOT_FOUND) {
-    if (typeof tokenOrFunction === "function" && !isInjectable(tokenOrFunction)) {
-      return tokenOrFunction;
-    } else {
-      return injector.get(tokenOrFunction);
-    }
-  }
-  return result;
-}
-function getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {
-  canDeactivateChecks: [],
-  canActivateChecks: []
-}) {
-  const prevChildren = nodeChildrenAsMap(currNode);
-  futureNode.children.forEach((c) => {
-    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);
-    delete prevChildren[c.value.outlet];
-  });
-  Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));
-  return checks;
-}
-function getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {
-  canDeactivateChecks: [],
-  canActivateChecks: []
-}) {
-  const future = futureNode.value;
-  const curr = currNode ? currNode.value : null;
-  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;
-  if (curr && future.routeConfig === curr.routeConfig) {
-    const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);
-    if (shouldRun) {
-      checks.canActivateChecks.push(new CanActivate(futurePath));
-    } else {
-      future.data = curr.data;
-      future._resolvedData = curr._resolvedData;
-    }
-    if (future.component) {
-      getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);
-    } else {
-      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);
-    }
-    if (shouldRun && context && context.outlet && context.outlet.isActivated) {
-      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));
-    }
-  } else {
-    if (curr) {
-      deactivateRouteAndItsChildren(currNode, context, checks);
-    }
-    checks.canActivateChecks.push(new CanActivate(futurePath));
-    if (future.component) {
-      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);
-    } else {
-      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);
-    }
-  }
-  return checks;
-}
-function shouldRunGuardsAndResolvers(curr, future, mode) {
-  if (typeof mode === "function") {
-    return mode(curr, future);
-  }
-  switch (mode) {
-    case "pathParamsChange":
-      return !equalPath(curr.url, future.url);
-    case "pathParamsOrQueryParamsChange":
-      return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);
-    case "always":
-      return true;
-    case "paramsOrQueryParamsChange":
-      return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);
-    case "paramsChange":
-    default:
-      return !equalParamsAndUrlSegments(curr, future);
-  }
-}
-function deactivateRouteAndItsChildren(route, context, checks) {
-  const children = nodeChildrenAsMap(route);
-  const r = route.value;
-  Object.entries(children).forEach(([childName, node]) => {
-    if (!r.component) {
-      deactivateRouteAndItsChildren(node, context, checks);
-    } else if (context) {
-      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);
-    } else {
-      deactivateRouteAndItsChildren(node, null, checks);
-    }
-  });
-  if (!r.component) {
-    checks.canDeactivateChecks.push(new CanDeactivate(null, r));
-  } else if (context && context.outlet && context.outlet.isActivated) {
-    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));
-  } else {
-    checks.canDeactivateChecks.push(new CanDeactivate(null, r));
-  }
-}
-function isFunction(v) {
-  return typeof v === "function";
-}
-function isBoolean(v) {
-  return typeof v === "boolean";
-}
-function isCanLoad(guard) {
-  return guard && isFunction(guard.canLoad);
-}
-function isCanActivate(guard) {
-  return guard && isFunction(guard.canActivate);
-}
-function isCanActivateChild(guard) {
-  return guard && isFunction(guard.canActivateChild);
-}
-function isCanDeactivate(guard) {
-  return guard && isFunction(guard.canDeactivate);
-}
-function isCanMatch(guard) {
-  return guard && isFunction(guard.canMatch);
-}
-function isEmptyError(e) {
-  return e instanceof EmptyError || e?.name === "EmptyError";
-}
-var INITIAL_VALUE = Symbol("INITIAL_VALUE");
-function prioritizedGuardValue() {
-  return switchMap((obs) => {
-    return combineLatest(obs.map((o) => o.pipe(take(1), startWith(INITIAL_VALUE)))).pipe(map((results) => {
-      for (const result of results) {
-        if (result === true) {
-          continue;
-        } else if (result === INITIAL_VALUE) {
-          return INITIAL_VALUE;
-        } else if (result === false || isRedirect(result)) {
-          return result;
-        }
-      }
-      return true;
-    }), filter((item) => item !== INITIAL_VALUE), take(1));
-  });
-}
-function isRedirect(val) {
-  return isUrlTree(val) || val instanceof RedirectCommand;
-}
-function checkGuards(injector, forwardEvent) {
-  return mergeMap((t) => {
-    const {
-      targetSnapshot,
-      currentSnapshot,
-      guards: {
-        canActivateChecks,
-        canDeactivateChecks
-      }
-    } = t;
-    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {
-      return of(__spreadProps(__spreadValues({}, t), {
-        guardsResult: true
-      }));
-    }
-    return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, injector).pipe(mergeMap((canDeactivate) => {
-      return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, injector, forwardEvent) : of(canDeactivate);
-    }), map((guardsResult) => __spreadProps(__spreadValues({}, t), {
-      guardsResult
-    })));
-  });
-}
-function runCanDeactivateChecks(checks, futureRSS, currRSS, injector) {
-  return from(checks).pipe(mergeMap((check) => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)), first((result) => {
-    return result !== true;
-  }, true));
-}
-function runCanActivateChecks(futureSnapshot, checks, injector, forwardEvent) {
-  return from(checks).pipe(concatMap((check) => {
-    return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path, injector), runCanActivate(futureSnapshot, check.route, injector));
-  }), first((result) => {
-    return result !== true;
-  }, true));
-}
-function fireActivationStart(snapshot, forwardEvent) {
-  if (snapshot !== null && forwardEvent) {
-    forwardEvent(new ActivationStart(snapshot));
-  }
-  return of(true);
-}
-function fireChildActivationStart(snapshot, forwardEvent) {
-  if (snapshot !== null && forwardEvent) {
-    forwardEvent(new ChildActivationStart(snapshot));
-  }
-  return of(true);
-}
-function runCanActivate(futureRSS, futureARS, injector) {
-  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;
-  if (!canActivate || canActivate.length === 0) return of(true);
-  const canActivateObservables = canActivate.map((canActivate2) => {
-    return defer(() => {
-      const closestInjector = getClosestRouteInjector(futureARS) ?? injector;
-      const guard = getTokenOrFunctionIdentity(canActivate2, closestInjector);
-      const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
-      return wrapIntoObservable(guardVal).pipe(first());
-    });
-  });
-  return of(canActivateObservables).pipe(prioritizedGuardValue());
-}
-function runCanActivateChild(futureRSS, path, injector) {
-  const futureARS = path[path.length - 1];
-  const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map((p) => getCanActivateChild(p)).filter((_) => _ !== null);
-  const canActivateChildGuardsMapped = canActivateChildGuards.map((d) => {
-    return defer(() => {
-      const guardsMapped = d.guards.map((canActivateChild) => {
-        const closestInjector = getClosestRouteInjector(d.node) ?? injector;
-        const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);
-        const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
-        return wrapIntoObservable(guardVal).pipe(first());
-      });
-      return of(guardsMapped).pipe(prioritizedGuardValue());
-    });
-  });
-  return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());
-}
-function runCanDeactivate(component, currARS, currRSS, futureRSS, injector) {
-  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;
-  if (!canDeactivate || canDeactivate.length === 0) return of(true);
-  const canDeactivateObservables = canDeactivate.map((c) => {
-    const closestInjector = getClosestRouteInjector(currARS) ?? injector;
-    const guard = getTokenOrFunctionIdentity(c, closestInjector);
-    const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));
-    return wrapIntoObservable(guardVal).pipe(first());
-  });
-  return of(canDeactivateObservables).pipe(prioritizedGuardValue());
-}
-function runCanLoadGuards(injector, route, segments, urlSerializer) {
-  const canLoad = route.canLoad;
-  if (canLoad === void 0 || canLoad.length === 0) {
-    return of(true);
-  }
-  const canLoadObservables = canLoad.map((injectionToken) => {
-    const guard = getTokenOrFunctionIdentity(injectionToken, injector);
-    const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));
-    return wrapIntoObservable(guardVal);
-  });
-  return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));
-}
-function redirectIfUrlTree(urlSerializer) {
-  return pipe(tap((result) => {
-    if (typeof result === "boolean") return;
-    throw redirectingNavigationError(urlSerializer, result);
-  }), map((result) => result === true));
-}
-function runCanMatchGuards(injector, route, segments, urlSerializer) {
-  const canMatch = route.canMatch;
-  if (!canMatch || canMatch.length === 0) return of(true);
-  const canMatchObservables = canMatch.map((injectionToken) => {
-    const guard = getTokenOrFunctionIdentity(injectionToken, injector);
-    const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments) : runInInjectionContext(injector, () => guard(route, segments));
-    return wrapIntoObservable(guardVal);
-  });
-  return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));
-}
-var NoMatch = class {
-  segmentGroup;
-  constructor(segmentGroup) {
-    this.segmentGroup = segmentGroup || null;
-  }
-};
-var AbsoluteRedirect = class extends Error {
-  urlTree;
-  constructor(urlTree) {
-    super();
-    this.urlTree = urlTree;
-  }
-};
-function noMatch$1(segmentGroup) {
-  return throwError(new NoMatch(segmentGroup));
-}
-function namedOutletsRedirect(redirectTo) {
-  return throwError(new RuntimeError(4e3, (typeof ngDevMode === "undefined" || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));
-}
-function canLoadFails(route) {
-  return throwError(navigationCancelingError((typeof ngDevMode === "undefined" || ngDevMode) && `Cannot load children because the guard of the route "path: '${route.path}'" returned false`, NavigationCancellationCode.GuardRejected));
-}
-var ApplyRedirects = class {
-  urlSerializer;
-  urlTree;
-  constructor(urlSerializer, urlTree) {
-    this.urlSerializer = urlSerializer;
-    this.urlTree = urlTree;
-  }
-  lineralizeSegments(route, urlTree) {
-    let res = [];
-    let c = urlTree.root;
-    while (true) {
-      res = res.concat(c.segments);
-      if (c.numberOfChildren === 0) {
-        return of(res);
-      }
-      if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {
-        return namedOutletsRedirect(`${route.redirectTo}`);
-      }
-      c = c.children[PRIMARY_OUTLET];
-    }
-  }
-  applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {
-    if (typeof redirectTo !== "string") {
-      const redirectToFn = redirectTo;
-      const {
-        queryParams,
-        fragment,
-        routeConfig,
-        url,
-        outlet,
-        params,
-        data,
-        title
-      } = currentSnapshot;
-      const newRedirect = runInInjectionContext(injector, () => redirectToFn({
-        params,
-        data,
-        queryParams,
-        fragment,
-        routeConfig,
-        url,
-        outlet,
-        title
-      }));
-      if (newRedirect instanceof UrlTree) {
-        throw new AbsoluteRedirect(newRedirect);
-      }
-      redirectTo = newRedirect;
-    }
-    const newTree = this.applyRedirectCreateUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);
-    if (redirectTo[0] === "/") {
-      throw new AbsoluteRedirect(newTree);
-    }
-    return newTree;
-  }
-  applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {
-    const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);
-    return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);
-  }
-  createQueryParams(redirectToParams, actualParams) {
-    const res = {};
-    Object.entries(redirectToParams).forEach(([k, v]) => {
-      const copySourceValue = typeof v === "string" && v[0] === ":";
-      if (copySourceValue) {
-        const sourceName = v.substring(1);
-        res[k] = actualParams[sourceName];
-      } else {
-        res[k] = v;
-      }
-    });
-    return res;
-  }
-  createSegmentGroup(redirectTo, group, segments, posParams) {
-    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);
-    let children = {};
-    Object.entries(group.children).forEach(([name, child]) => {
-      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);
-    });
-    return new UrlSegmentGroup(updatedSegments, children);
-  }
-  createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {
-    return redirectToSegments.map((s) => s.path[0] === ":" ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));
-  }
-  findPosParam(redirectTo, redirectToUrlSegment, posParams) {
-    const pos = posParams[redirectToUrlSegment.path.substring(1)];
-    if (!pos) throw new RuntimeError(4001, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);
-    return pos;
-  }
-  findOrReturn(redirectToUrlSegment, actualSegments) {
-    let idx = 0;
-    for (const s of actualSegments) {
-      if (s.path === redirectToUrlSegment.path) {
-        actualSegments.splice(idx);
-        return s;
-      }
-      idx++;
-    }
-    return redirectToUrlSegment;
-  }
-};
-var noMatch = {
-  matched: false,
-  consumedSegments: [],
-  remainingSegments: [],
-  parameters: {},
-  positionalParamSegments: {}
-};
-function matchWithChecks(segmentGroup, route, segments, injector, urlSerializer) {
-  const result = match(segmentGroup, route, segments);
-  if (!result.matched) {
-    return of(result);
-  }
-  injector = getOrCreateRouteInjectorIfNeeded(route, injector);
-  return runCanMatchGuards(injector, route, segments, urlSerializer).pipe(map((v) => v === true ? result : __spreadValues({}, noMatch)));
-}
-function match(segmentGroup, route, segments) {
-  if (route.path === "**") {
-    return createWildcardMatchResult(segments);
-  }
-  if (route.path === "") {
-    if (route.pathMatch === "full" && (segmentGroup.hasChildren() || segments.length > 0)) {
-      return __spreadValues({}, noMatch);
-    }
-    return {
-      matched: true,
-      consumedSegments: [],
-      remainingSegments: segments,
-      parameters: {},
-      positionalParamSegments: {}
-    };
-  }
-  const matcher = route.matcher || defaultUrlMatcher;
-  const res = matcher(segments, segmentGroup, route);
-  if (!res) return __spreadValues({}, noMatch);
-  const posParams = {};
-  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {
-    posParams[k] = v.path;
-  });
-  const parameters = res.consumed.length > 0 ? __spreadValues(__spreadValues({}, posParams), res.consumed[res.consumed.length - 1].parameters) : posParams;
-  return {
-    matched: true,
-    consumedSegments: res.consumed,
-    remainingSegments: segments.slice(res.consumed.length),
-    // TODO(atscott): investigate combining parameters and positionalParamSegments
-    parameters,
-    positionalParamSegments: res.posParams ?? {}
-  };
-}
-function createWildcardMatchResult(segments) {
-  return {
-    matched: true,
-    parameters: segments.length > 0 ? last2(segments).parameters : {},
-    consumedSegments: segments,
-    remainingSegments: [],
-    positionalParamSegments: {}
-  };
-}
-function split(segmentGroup, consumedSegments, slicedSegments, config) {
-  if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
-    const s2 = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
-    return {
-      segmentGroup: s2,
-      slicedSegments: []
-    };
-  }
-  if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
-    const s2 = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));
-    return {
-      segmentGroup: s2,
-      slicedSegments
-    };
-  }
-  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
-  return {
-    segmentGroup: s,
-    slicedSegments
-  };
-}
-function addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {
-  const res = {};
-  for (const r of routes) {
-    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
-      const s = new UrlSegmentGroup([], {});
-      res[getOutlet(r)] = s;
-    }
-  }
-  return __spreadValues(__spreadValues({}, children), res);
-}
-function createChildrenForEmptyPaths(routes, primarySegment) {
-  const res = {};
-  res[PRIMARY_OUTLET] = primarySegment;
-  for (const r of routes) {
-    if (r.path === "" && getOutlet(r) !== PRIMARY_OUTLET) {
-      const s = new UrlSegmentGroup([], {});
-      res[getOutlet(r)] = s;
-    }
-  }
-  return res;
-}
-function containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {
-  return routes.some((r) => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);
-}
-function containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {
-  return routes.some((r) => emptyPathMatch(segmentGroup, slicedSegments, r));
-}
-function emptyPathMatch(segmentGroup, slicedSegments, r) {
-  if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === "full") {
-    return false;
-  }
-  return r.path === "";
-}
-function noLeftoversInUrl(segmentGroup, segments, outlet) {
-  return segments.length === 0 && !segmentGroup.children[outlet];
-}
-var NoLeftoversInUrl = class {
-};
-function recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = "emptyOnly") {
-  return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer).recognize();
-}
-var MAX_ALLOWED_REDIRECTS = 31;
-var Recognizer = class {
-  injector;
-  configLoader;
-  rootComponentType;
-  config;
-  urlTree;
-  paramsInheritanceStrategy;
-  urlSerializer;
-  applyRedirects;
-  absoluteRedirectCount = 0;
-  allowRedirects = true;
-  constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer) {
-    this.injector = injector;
-    this.configLoader = configLoader;
-    this.rootComponentType = rootComponentType;
-    this.config = config;
-    this.urlTree = urlTree;
-    this.paramsInheritanceStrategy = paramsInheritanceStrategy;
-    this.urlSerializer = urlSerializer;
-    this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);
-  }
-  noMatchError(e) {
-    return new RuntimeError(4002, typeof ngDevMode === "undefined" || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);
-  }
-  recognize() {
-    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;
-    return this.match(rootSegmentGroup).pipe(map(({
-      children,
-      rootSnapshot
-    }) => {
-      const rootNode = new TreeNode(rootSnapshot, children);
-      const routeState = new RouterStateSnapshot("", rootNode);
-      const tree2 = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);
-      tree2.queryParams = this.urlTree.queryParams;
-      routeState.url = this.urlSerializer.serialize(tree2);
-      return {
-        state: routeState,
-        tree: tree2
-      };
-    }));
-  }
-  match(rootSegmentGroup) {
-    const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});
-    return this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot).pipe(map((children) => {
-      return {
-        children,
-        rootSnapshot
-      };
-    }), catchError((e) => {
-      if (e instanceof AbsoluteRedirect) {
-        this.urlTree = e.urlTree;
-        return this.match(e.urlTree.root);
-      }
-      if (e instanceof NoMatch) {
-        throw this.noMatchError(e);
-      }
-      throw e;
-    }));
-  }
-  processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {
-    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
-      return this.processChildren(injector, config, segmentGroup, parentRoute);
-    }
-    return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute).pipe(map((child) => child instanceof TreeNode ? [child] : []));
-  }
-  /**
-   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if
-   * we cannot find a match for _any_ of the children.
-   *
-   * @param config - The `Routes` to match against
-   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the
-   *     config.
-   */
-  processChildren(injector, config, segmentGroup, parentRoute) {
-    const childOutlets = [];
-    for (const child of Object.keys(segmentGroup.children)) {
-      if (child === "primary") {
-        childOutlets.unshift(child);
-      } else {
-        childOutlets.push(child);
-      }
-    }
-    return from(childOutlets).pipe(concatMap((childOutlet) => {
-      const child = segmentGroup.children[childOutlet];
-      const sortedConfig = sortByMatchingOutlets(config, childOutlet);
-      return this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);
-    }), scan((children, outletChildren) => {
-      children.push(...outletChildren);
-      return children;
-    }), defaultIfEmpty(null), last(), mergeMap((children) => {
-      if (children === null) return noMatch$1(segmentGroup);
-      const mergedChildren = mergeEmptyPathMatches(children);
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        checkOutletNameUniqueness(mergedChildren);
-      }
-      sortActivatedRouteSnapshots(mergedChildren);
-      return of(mergedChildren);
-    }));
-  }
-  processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {
-    return from(routes).pipe(concatMap((r) => {
-      return this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute).pipe(catchError((e) => {
-        if (e instanceof NoMatch) {
-          return of(null);
-        }
-        throw e;
-      }));
-    }), first((x) => !!x), catchError((e) => {
-      if (isEmptyError(e)) {
-        if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
-          return of(new NoLeftoversInUrl());
-        }
-        return noMatch$1(segmentGroup);
-      }
-      throw e;
-    }));
-  }
-  processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {
-    if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {
-      return noMatch$1(rawSegment);
-    }
-    if (route.redirectTo === void 0) {
-      return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);
-    }
-    if (this.allowRedirects && allowRedirects) {
-      return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);
-    }
-    return noMatch$1(rawSegment);
-  }
-  expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {
-    const {
-      matched,
-      parameters,
-      consumedSegments,
-      positionalParamSegments,
-      remainingSegments
-    } = match(segmentGroup, route, segments);
-    if (!matched) return noMatch$1(segmentGroup);
-    if (typeof route.redirectTo === "string" && route.redirectTo[0] === "/") {
-      this.absoluteRedirectCount++;
-      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {
-        if (ngDevMode) {
-          throw new RuntimeError(4016, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.
-This is currently a dev mode only error but will become a call stack size exceeded error in production in a future major version.`);
-        }
-        this.allowRedirects = false;
-      }
-    }
-    const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
-    const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);
-    currentSnapshot.params = Object.freeze(inherited.params);
-    currentSnapshot.data = Object.freeze(inherited.data);
-    const newTree = this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, currentSnapshot, injector);
-    return this.applyRedirects.lineralizeSegments(route, newTree).pipe(mergeMap((newSegments) => {
-      return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);
-    }));
-  }
-  matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {
-    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);
-    if (route.path === "**") {
-      rawSegment.children = {};
-    }
-    return matchResult.pipe(switchMap((result) => {
-      if (!result.matched) {
-        return noMatch$1(rawSegment);
-      }
-      injector = route._injector ?? injector;
-      return this.getChildConfig(injector, route, segments).pipe(switchMap(({
-        routes: childConfig
-      }) => {
-        const childInjector = route._loadedInjector ?? injector;
-        const {
-          parameters,
-          consumedSegments,
-          remainingSegments
-        } = result;
-        const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
-        const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
-        snapshot.params = Object.freeze(inherited.params);
-        snapshot.data = Object.freeze(inherited.data);
-        const {
-          segmentGroup,
-          slicedSegments
-        } = split(rawSegment, consumedSegments, remainingSegments, childConfig);
-        if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
-          return this.processChildren(childInjector, childConfig, segmentGroup, snapshot).pipe(map((children) => {
-            return new TreeNode(snapshot, children);
-          }));
-        }
-        if (childConfig.length === 0 && slicedSegments.length === 0) {
-          return of(new TreeNode(snapshot, []));
-        }
-        const matchedOnOutlet = getOutlet(route) === outlet;
-        return this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot).pipe(map((child) => {
-          return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);
-        }));
-      }));
-    }));
-  }
-  getChildConfig(injector, route, segments) {
-    if (route.children) {
-      return of({
-        routes: route.children,
-        injector
-      });
-    }
-    if (route.loadChildren) {
-      if (route._loadedRoutes !== void 0) {
-        return of({
-          routes: route._loadedRoutes,
-          injector: route._loadedInjector
-        });
-      }
-      return runCanLoadGuards(injector, route, segments, this.urlSerializer).pipe(mergeMap((shouldLoadResult) => {
-        if (shouldLoadResult) {
-          return this.configLoader.loadChildren(injector, route).pipe(tap((cfg) => {
-            route._loadedRoutes = cfg.routes;
-            route._loadedInjector = cfg.injector;
-          }));
-        }
-        return canLoadFails(route);
-      }));
-    }
-    return of({
-      routes: [],
-      injector
-    });
-  }
-};
-function sortActivatedRouteSnapshots(nodes) {
-  nodes.sort((a, b) => {
-    if (a.value.outlet === PRIMARY_OUTLET) return -1;
-    if (b.value.outlet === PRIMARY_OUTLET) return 1;
-    return a.value.outlet.localeCompare(b.value.outlet);
-  });
-}
-function hasEmptyPathConfig(node) {
-  const config = node.value.routeConfig;
-  return config && config.path === "";
-}
-function mergeEmptyPathMatches(nodes) {
-  const result = [];
-  const mergedNodes = /* @__PURE__ */ new Set();
-  for (const node of nodes) {
-    if (!hasEmptyPathConfig(node)) {
-      result.push(node);
-      continue;
-    }
-    const duplicateEmptyPathNode = result.find((resultNode) => node.value.routeConfig === resultNode.value.routeConfig);
-    if (duplicateEmptyPathNode !== void 0) {
-      duplicateEmptyPathNode.children.push(...node.children);
-      mergedNodes.add(duplicateEmptyPathNode);
-    } else {
-      result.push(node);
-    }
-  }
-  for (const mergedNode of mergedNodes) {
-    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);
-    result.push(new TreeNode(mergedNode.value, mergedChildren));
-  }
-  return result.filter((n) => !mergedNodes.has(n));
-}
-function checkOutletNameUniqueness(nodes) {
-  const names = {};
-  nodes.forEach((n) => {
-    const routeWithSameOutletName = names[n.value.outlet];
-    if (routeWithSameOutletName) {
-      const p = routeWithSameOutletName.url.map((s) => s.toString()).join("/");
-      const c = n.value.url.map((s) => s.toString()).join("/");
-      throw new RuntimeError(4006, (typeof ngDevMode === "undefined" || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
-    }
-    names[n.value.outlet] = n.value;
-  });
-}
-function getData(route) {
-  return route.data || {};
-}
-function getResolve(route) {
-  return route.resolve || {};
-}
-function recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy) {
-  return mergeMap((t) => recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy).pipe(map(({
-    state: targetSnapshot,
-    tree: urlAfterRedirects
-  }) => {
-    return __spreadProps(__spreadValues({}, t), {
-      targetSnapshot,
-      urlAfterRedirects
-    });
-  })));
-}
-function resolveData(paramsInheritanceStrategy, injector) {
-  return mergeMap((t) => {
-    const {
-      targetSnapshot,
-      guards: {
-        canActivateChecks
-      }
-    } = t;
-    if (!canActivateChecks.length) {
-      return of(t);
-    }
-    const routesWithResolversToRun = new Set(canActivateChecks.map((check) => check.route));
-    const routesNeedingDataUpdates = /* @__PURE__ */ new Set();
-    for (const route of routesWithResolversToRun) {
-      if (routesNeedingDataUpdates.has(route)) {
-        continue;
-      }
-      for (const newRoute of flattenRouteTree(route)) {
-        routesNeedingDataUpdates.add(newRoute);
-      }
-    }
-    let routesProcessed = 0;
-    return from(routesNeedingDataUpdates).pipe(concatMap((route) => {
-      if (routesWithResolversToRun.has(route)) {
-        return runResolve(route, targetSnapshot, paramsInheritanceStrategy, injector);
-      } else {
-        route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;
-        return of(void 0);
-      }
-    }), tap(() => routesProcessed++), takeLast(1), mergeMap((_) => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY));
-  });
-}
-function flattenRouteTree(route) {
-  const descendants = route.children.map((child) => flattenRouteTree(child)).flat();
-  return [route, ...descendants];
-}
-function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {
-  const config = futureARS.routeConfig;
-  const resolve = futureARS._resolve;
-  if (config?.title !== void 0 && !hasStaticTitle(config)) {
-    resolve[RouteTitleKey] = config.title;
-  }
-  return resolveNode(resolve, futureARS, futureRSS, injector).pipe(map((resolvedData) => {
-    futureARS._resolvedData = resolvedData;
-    futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;
-    return null;
-  }));
-}
-function resolveNode(resolve, futureARS, futureRSS, injector) {
-  const keys = getDataKeys(resolve);
-  if (keys.length === 0) {
-    return of({});
-  }
-  const data = {};
-  return from(keys).pipe(mergeMap((key) => getResolver(resolve[key], futureARS, futureRSS, injector).pipe(first(), tap((value) => {
-    if (value instanceof RedirectCommand) {
-      throw redirectingNavigationError(new DefaultUrlSerializer(), value);
-    }
-    data[key] = value;
-  }))), takeLast(1), mapTo(data), catchError((e) => isEmptyError(e) ? EMPTY : throwError(e)));
-}
-function getResolver(injectionToken, futureARS, futureRSS, injector) {
-  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;
-  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);
-  const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));
-  return wrapIntoObservable(resolverValue);
-}
-function switchTap(next) {
-  return switchMap((v) => {
-    const nextResult = next(v);
-    if (nextResult) {
-      return from(nextResult).pipe(map(() => v));
-    }
-    return of(v);
-  });
-}
-var TitleStrategy = class _TitleStrategy {
-  /**
-   * @returns The `title` of the deepest primary route.
-   */
-  buildTitle(snapshot) {
-    let pageTitle;
-    let route = snapshot.root;
-    while (route !== void 0) {
-      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;
-      route = route.children.find((child) => child.outlet === PRIMARY_OUTLET);
-    }
-    return pageTitle;
-  }
-  /**
-   * Given an `ActivatedRouteSnapshot`, returns the final value of the
-   * `Route.title` property, which can either be a static string or a resolved value.
-   */
-  getResolvedTitleForRoute(snapshot) {
-    return snapshot.data[RouteTitleKey];
-  }
-  static ɵfac = function TitleStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TitleStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _TitleStrategy,
-    factory: () => (() => inject(DefaultTitleStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TitleStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultTitleStrategy)
-    }]
-  }], null, null);
-})();
-var DefaultTitleStrategy = class _DefaultTitleStrategy extends TitleStrategy {
-  title;
-  constructor(title) {
-    super();
-    this.title = title;
-  }
-  /**
-   * Sets the title of the browser to the given value.
-   *
-   * @param title The `pageTitle` from the deepest primary route.
-   */
-  updateTitle(snapshot) {
-    const title = this.buildTitle(snapshot);
-    if (title !== void 0) {
-      this.title.setTitle(title);
-    }
-  }
-  static ɵfac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DefaultTitleStrategy)(ɵɵinject(Title));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultTitleStrategy,
-    factory: _DefaultTitleStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultTitleStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: Title
-  }], null);
-})();
-var ROUTER_CONFIGURATION = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router config" : "", {
-  providedIn: "root",
-  factory: () => ({})
-});
-var ɵEmptyOutletComponent = class _ɵEmptyOutletComponent {
-  static ɵfac = function ɵEmptyOutletComponent_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ɵEmptyOutletComponent)();
-  };
-  static ɵcmp = ɵɵdefineComponent({
-    type: _ɵEmptyOutletComponent,
-    selectors: [["ng-component"]],
-    decls: 1,
-    vars: 0,
-    template: function _EmptyOutletComponent_Template(rf, ctx) {
-      if (rf & 1) {
-        ɵɵelement(0, "router-outlet");
-      }
-    },
-    dependencies: [RouterOutlet],
-    encapsulation: 2
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵEmptyOutletComponent, [{
-    type: Component,
-    args: [{
-      template: `<router-outlet></router-outlet>`,
-      imports: [RouterOutlet]
-    }]
-  }], null, null);
-})();
-function standardizeConfig(r) {
-  const children = r.children && r.children.map(standardizeConfig);
-  const c = children ? __spreadProps(__spreadValues({}, r), {
-    children
-  }) : __spreadValues({}, r);
-  if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {
-    c.component = ɵEmptyOutletComponent;
-  }
-  return c;
-}
-var ROUTES = new InjectionToken(ngDevMode ? "ROUTES" : "");
-var RouterConfigLoader = class _RouterConfigLoader {
-  componentLoaders = /* @__PURE__ */ new WeakMap();
-  childrenLoaders = /* @__PURE__ */ new WeakMap();
-  onLoadStartListener;
-  onLoadEndListener;
-  compiler = inject(Compiler);
-  loadComponent(route) {
-    if (this.componentLoaders.get(route)) {
-      return this.componentLoaders.get(route);
-    } else if (route._loadedComponent) {
-      return of(route._loadedComponent);
-    }
-    if (this.onLoadStartListener) {
-      this.onLoadStartListener(route);
-    }
-    const loadRunner = wrapIntoObservable(route.loadComponent()).pipe(map(maybeUnwrapDefaultExport), tap((component) => {
-      if (this.onLoadEndListener) {
-        this.onLoadEndListener(route);
-      }
-      (typeof ngDevMode === "undefined" || ngDevMode) && assertStandalone(route.path ?? "", component);
-      route._loadedComponent = component;
-    }), finalize(() => {
-      this.componentLoaders.delete(route);
-    }));
-    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());
-    this.componentLoaders.set(route, loader);
-    return loader;
-  }
-  loadChildren(parentInjector, route) {
-    if (this.childrenLoaders.get(route)) {
-      return this.childrenLoaders.get(route);
-    } else if (route._loadedRoutes) {
-      return of({
-        routes: route._loadedRoutes,
-        injector: route._loadedInjector
-      });
-    }
-    if (this.onLoadStartListener) {
-      this.onLoadStartListener(route);
-    }
-    const moduleFactoryOrRoutes$ = loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);
-    const loadRunner = moduleFactoryOrRoutes$.pipe(finalize(() => {
-      this.childrenLoaders.delete(route);
-    }));
-    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());
-    this.childrenLoaders.set(route, loader);
-    return loader;
-  }
-  static ɵfac = function RouterConfigLoader_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterConfigLoader)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterConfigLoader,
-    factory: _RouterConfigLoader.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterConfigLoader, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-function loadChildren(route, compiler, parentInjector, onLoadEndListener) {
-  return wrapIntoObservable(route.loadChildren()).pipe(map(maybeUnwrapDefaultExport), mergeMap((t) => {
-    if (t instanceof NgModuleFactory$1 || Array.isArray(t)) {
-      return of(t);
-    } else {
-      return from(compiler.compileModuleAsync(t));
-    }
-  }), map((factoryOrRoutes) => {
-    if (onLoadEndListener) {
-      onLoadEndListener(route);
-    }
-    let injector;
-    let rawRoutes;
-    let requireStandaloneComponents = false;
-    if (Array.isArray(factoryOrRoutes)) {
-      rawRoutes = factoryOrRoutes;
-      requireStandaloneComponents = true;
-    } else {
-      injector = factoryOrRoutes.create(parentInjector).injector;
-      rawRoutes = injector.get(ROUTES, [], {
-        optional: true,
-        self: true
-      }).flat();
-    }
-    const routes = rawRoutes.map(standardizeConfig);
-    (typeof ngDevMode === "undefined" || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);
-    return {
-      routes,
-      injector
-    };
-  }));
-}
-function isWrappedDefaultExport(value) {
-  return value && typeof value === "object" && "default" in value;
-}
-function maybeUnwrapDefaultExport(input2) {
-  return isWrappedDefaultExport(input2) ? input2["default"] : input2;
-}
-var UrlHandlingStrategy = class _UrlHandlingStrategy {
-  static ɵfac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UrlHandlingStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _UrlHandlingStrategy,
-    factory: () => (() => inject(DefaultUrlHandlingStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UrlHandlingStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultUrlHandlingStrategy)
-    }]
-  }], null, null);
-})();
-var DefaultUrlHandlingStrategy = class _DefaultUrlHandlingStrategy {
-  shouldProcessUrl(url) {
-    return true;
-  }
-  extract(url) {
-    return url;
-  }
-  merge(newUrlPart, wholeUrl) {
-    return newUrlPart;
-  }
-  static ɵfac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DefaultUrlHandlingStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultUrlHandlingStrategy,
-    factory: _DefaultUrlHandlingStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultUrlHandlingStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var CREATE_VIEW_TRANSITION = new InjectionToken(ngDevMode ? "view transition helper" : "");
-var VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? "view transition options" : "");
-function createViewTransition(injector, from2, to) {
-  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);
-  const document = injector.get(DOCUMENT);
-  return injector.get(NgZone).runOutsideAngular(() => {
-    if (!document.startViewTransition || transitionOptions.skipNextTransition) {
-      transitionOptions.skipNextTransition = false;
-      return new Promise((resolve) => setTimeout(resolve));
-    }
-    let resolveViewTransitionStarted;
-    const viewTransitionStarted = new Promise((resolve) => {
-      resolveViewTransitionStarted = resolve;
-    });
-    const transition = document.startViewTransition(() => {
-      resolveViewTransitionStarted();
-      return createRenderPromise(injector);
-    });
-    const {
-      onViewTransitionCreated
-    } = transitionOptions;
-    if (onViewTransitionCreated) {
-      runInInjectionContext(injector, () => onViewTransitionCreated({
-        transition,
-        from: from2,
-        to
-      }));
-    }
-    return viewTransitionStarted;
-  });
-}
-function createRenderPromise(injector) {
-  return new Promise((resolve) => {
-    afterNextRender({
-      read: () => setTimeout(resolve)
-    }, {
-      injector
-    });
-  });
-}
-var NAVIGATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "navigation error handler" : "");
-var NavigationTransitions = class _NavigationTransitions {
-  currentNavigation = null;
-  currentTransition = null;
-  lastSuccessfulNavigation = null;
-  /**
-   * These events are used to communicate back to the Router about the state of the transition. The
-   * Router wants to respond to these events in various ways. Because the `NavigationTransition`
-   * class is not public, this event subject is not publicly exposed.
-   */
-  events = new Subject();
-  /**
-   * Used to abort the current transition with an error.
-   */
-  transitionAbortSubject = new Subject();
-  configLoader = inject(RouterConfigLoader);
-  environmentInjector = inject(EnvironmentInjector);
-  urlSerializer = inject(UrlSerializer);
-  rootContexts = inject(ChildrenOutletContexts);
-  location = inject(Location);
-  inputBindingEnabled = inject(INPUT_BINDER, {
-    optional: true
-  }) !== null;
-  titleStrategy = inject(TitleStrategy);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || "emptyOnly";
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  createViewTransition = inject(CREATE_VIEW_TRANSITION, {
-    optional: true
-  });
-  navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {
-    optional: true
-  });
-  navigationId = 0;
-  get hasRequestedNavigation() {
-    return this.navigationId !== 0;
-  }
-  transitions;
-  /**
-   * Hook that enables you to pause navigation after the preactivation phase.
-   * Used by `RouterModule`.
-   *
-   * @internal
-   */
-  afterPreactivation = () => of(void 0);
-  /** @internal */
-  rootComponentType = null;
-  constructor() {
-    const onLoadStart = (r) => this.events.next(new RouteConfigLoadStart(r));
-    const onLoadEnd = (r) => this.events.next(new RouteConfigLoadEnd(r));
-    this.configLoader.onLoadEndListener = onLoadEnd;
-    this.configLoader.onLoadStartListener = onLoadStart;
-  }
-  complete() {
-    this.transitions?.complete();
-  }
-  handleNavigationRequest(request) {
-    const id = ++this.navigationId;
-    this.transitions?.next(__spreadProps(__spreadValues(__spreadValues({}, this.transitions.value), request), {
-      id
-    }));
-  }
-  setupNavigations(router, initialUrlTree, initialRouterState) {
-    this.transitions = new BehaviorSubject({
-      id: 0,
-      currentUrlTree: initialUrlTree,
-      currentRawUrl: initialUrlTree,
-      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),
-      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),
-      rawUrl: initialUrlTree,
-      extras: {},
-      resolve: () => {
-      },
-      reject: () => {
-      },
-      promise: Promise.resolve(true),
-      source: IMPERATIVE_NAVIGATION,
-      restoredState: null,
-      currentSnapshot: initialRouterState.snapshot,
-      targetSnapshot: null,
-      currentRouterState: initialRouterState,
-      targetRouterState: null,
-      guards: {
-        canActivateChecks: [],
-        canDeactivateChecks: []
-      },
-      guardsResult: null
-    });
-    return this.transitions.pipe(
-      filter((t) => t.id !== 0),
-      // Extract URL
-      map((t) => __spreadProps(__spreadValues({}, t), {
-        extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)
-      })),
-      // Using switchMap so we cancel executing navigations when a new one comes in
-      switchMap((overallTransitionState) => {
-        let completed = false;
-        let errored = false;
-        return of(overallTransitionState).pipe(
-          switchMap((t) => {
-            if (this.navigationId > overallTransitionState.id) {
-              const cancellationReason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : "";
-              this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);
-              return EMPTY;
-            }
-            this.currentTransition = overallTransitionState;
-            this.currentNavigation = {
-              id: t.id,
-              initialUrl: t.rawUrl,
-              extractedUrl: t.extractedUrl,
-              targetBrowserUrl: typeof t.extras.browserUrl === "string" ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,
-              trigger: t.source,
-              extras: t.extras,
-              previousNavigation: !this.lastSuccessfulNavigation ? null : __spreadProps(__spreadValues({}, this.lastSuccessfulNavigation), {
-                previousNavigation: null
-              })
-            };
-            const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();
-            const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;
-            if (!urlTransition && onSameUrlNavigation !== "reload") {
-              const reason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : "";
-              this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));
-              t.resolve(false);
-              return EMPTY;
-            }
-            if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {
-              return of(t).pipe(
-                // Fire NavigationStart event
-                switchMap((t2) => {
-                  const transition = this.transitions?.getValue();
-                  this.events.next(new NavigationStart(t2.id, this.urlSerializer.serialize(t2.extractedUrl), t2.source, t2.restoredState));
-                  if (transition !== this.transitions?.getValue()) {
-                    return EMPTY;
-                  }
-                  return Promise.resolve(t2);
-                }),
-                // Recognize
-                recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy),
-                // Update URL if in `eager` update mode
-                tap((t2) => {
-                  overallTransitionState.targetSnapshot = t2.targetSnapshot;
-                  overallTransitionState.urlAfterRedirects = t2.urlAfterRedirects;
-                  this.currentNavigation = __spreadProps(__spreadValues({}, this.currentNavigation), {
-                    finalUrl: t2.urlAfterRedirects
-                  });
-                  const routesRecognized = new RoutesRecognized(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                  this.events.next(routesRecognized);
-                })
-              );
-            } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {
-              const {
-                id,
-                extractedUrl,
-                source,
-                restoredState,
-                extras
-              } = t;
-              const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);
-              this.events.next(navStart);
-              const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;
-              this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-                targetSnapshot,
-                urlAfterRedirects: extractedUrl,
-                extras: __spreadProps(__spreadValues({}, extras), {
-                  skipLocationChange: false,
-                  replaceUrl: false
-                })
-              });
-              this.currentNavigation.finalUrl = extractedUrl;
-              return of(overallTransitionState);
-            } else {
-              const reason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : "";
-              this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));
-              t.resolve(false);
-              return EMPTY;
-            }
-          }),
-          // --- GUARDS ---
-          tap((t) => {
-            const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
-            this.events.next(guardsStart);
-          }),
-          map((t) => {
-            this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-              guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)
-            });
-            return overallTransitionState;
-          }),
-          checkGuards(this.environmentInjector, (evt) => this.events.next(evt)),
-          tap((t) => {
-            overallTransitionState.guardsResult = t.guardsResult;
-            if (t.guardsResult && typeof t.guardsResult !== "boolean") {
-              throw redirectingNavigationError(this.urlSerializer, t.guardsResult);
-            }
-            const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);
-            this.events.next(guardsEnd);
-          }),
-          filter((t) => {
-            if (!t.guardsResult) {
-              this.cancelNavigationTransition(t, "", NavigationCancellationCode.GuardRejected);
-              return false;
-            }
-            return true;
-          }),
-          // --- RESOLVE ---
-          switchTap((t) => {
-            if (t.guards.canActivateChecks.length) {
-              return of(t).pipe(tap((t2) => {
-                const resolveStart = new ResolveStart(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                this.events.next(resolveStart);
-              }), switchMap((t2) => {
-                let dataResolved = false;
-                return of(t2).pipe(resolveData(this.paramsInheritanceStrategy, this.environmentInjector), tap({
-                  next: () => dataResolved = true,
-                  complete: () => {
-                    if (!dataResolved) {
-                      this.cancelNavigationTransition(t2, typeof ngDevMode === "undefined" || ngDevMode ? `At least one route resolver didn't emit any value.` : "", NavigationCancellationCode.NoDataFromResolver);
-                    }
-                  }
-                }));
-              }), tap((t2) => {
-                const resolveEnd = new ResolveEnd(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                this.events.next(resolveEnd);
-              }));
-            }
-            return void 0;
-          }),
-          // --- LOAD COMPONENTS ---
-          switchTap((t) => {
-            const loadComponents = (route) => {
-              const loaders = [];
-              if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) {
-                loaders.push(this.configLoader.loadComponent(route.routeConfig).pipe(tap((loadedComponent) => {
-                  route.component = loadedComponent;
-                }), map(() => void 0)));
-              }
-              for (const child of route.children) {
-                loaders.push(...loadComponents(child));
-              }
-              return loaders;
-            };
-            return combineLatest(loadComponents(t.targetSnapshot.root)).pipe(defaultIfEmpty(null), take(1));
-          }),
-          switchTap(() => this.afterPreactivation()),
-          switchMap(() => {
-            const {
-              currentSnapshot,
-              targetSnapshot
-            } = overallTransitionState;
-            const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);
-            return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);
-          }),
-          map((t) => {
-            const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);
-            this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-              targetRouterState
-            });
-            this.currentNavigation.targetRouterState = targetRouterState;
-            return overallTransitionState;
-          }),
-          tap(() => {
-            this.events.next(new BeforeActivateRoutes());
-          }),
-          activateRoutes(this.rootContexts, router.routeReuseStrategy, (evt) => this.events.next(evt), this.inputBindingEnabled),
-          // Ensure that if some observable used to drive the transition doesn't
-          // complete, the navigation still finalizes This should never happen, but
-          // this is done as a safety measure to avoid surfacing this error (#49567).
-          take(1),
-          tap({
-            next: (t) => {
-              completed = true;
-              this.lastSuccessfulNavigation = this.currentNavigation;
-              this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));
-              this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);
-              t.resolve(true);
-            },
-            complete: () => {
-              completed = true;
-            }
-          }),
-          // There used to be a lot more logic happening directly within the
-          // transition Observable. Some of this logic has been refactored out to
-          // other places but there may still be errors that happen there. This gives
-          // us a way to cancel the transition from the outside. This may also be
-          // required in the future to support something like the abort signal of the
-          // Navigation API where the navigation gets aborted from outside the
-          // transition.
-          takeUntil(this.transitionAbortSubject.pipe(tap((err) => {
-            throw err;
-          }))),
-          finalize(() => {
-            if (!completed && !errored) {
-              const cancelationReason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : "";
-              this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);
-            }
-            if (this.currentTransition?.id === overallTransitionState.id) {
-              this.currentNavigation = null;
-              this.currentTransition = null;
-            }
-          }),
-          catchError((e) => {
-            errored = true;
-            if (isNavigationCancelingError(e)) {
-              this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));
-              if (!isRedirectingNavigationCancelingError(e)) {
-                overallTransitionState.resolve(false);
-              } else {
-                this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));
-              }
-            } else {
-              const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? void 0);
-              try {
-                const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));
-                if (navigationErrorHandlerResult instanceof RedirectCommand) {
-                  const {
-                    message,
-                    cancellationCode
-                  } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);
-                  this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));
-                  this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));
-                } else {
-                  this.events.next(navigationError);
-                  throw e;
-                }
-              } catch (ee) {
-                if (this.options.resolveNavigationPromiseOnError) {
-                  overallTransitionState.resolve(false);
-                } else {
-                  overallTransitionState.reject(ee);
-                }
-              }
-            }
-            return EMPTY;
-          })
-        );
-      })
-    );
-  }
-  cancelNavigationTransition(t, reason, code) {
-    const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);
-    this.events.next(navCancel);
-    t.resolve(false);
-  }
-  /**
-   * @returns Whether we're navigating to somewhere that is not what the Router is
-   * currently set to.
-   */
-  isUpdatingInternalState() {
-    return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();
-  }
-  /**
-   * @returns Whether we're updating the browser URL to something new (navigation is going
-   * to somewhere not displayed in the URL bar and we will update the URL
-   * bar if navigation succeeds).
-   */
-  isUpdatedBrowserUrl() {
-    const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));
-    const targetBrowserUrl = this.currentNavigation?.targetBrowserUrl ?? this.currentNavigation?.extractedUrl;
-    return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !this.currentNavigation?.extras.skipLocationChange;
-  }
-  static ɵfac = function NavigationTransitions_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NavigationTransitions)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NavigationTransitions,
-    factory: _NavigationTransitions.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NavigationTransitions, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function isBrowserTriggeredNavigation(source) {
-  return source !== IMPERATIVE_NAVIGATION;
-}
-var RouteReuseStrategy = class _RouteReuseStrategy {
-  static ɵfac = function RouteReuseStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouteReuseStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouteReuseStrategy,
-    factory: () => (() => inject(DefaultRouteReuseStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouteReuseStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultRouteReuseStrategy)
-    }]
-  }], null, null);
-})();
-var BaseRouteReuseStrategy = class {
-  /**
-   * Whether the given route should detach for later reuse.
-   * Always returns false for `BaseRouteReuseStrategy`.
-   * */
-  shouldDetach(route) {
-    return false;
-  }
-  /**
-   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.
-   */
-  store(route, detachedTree) {
-  }
-  /** Returns `false`, meaning the route (and its subtree) is never reattached */
-  shouldAttach(route) {
-    return false;
-  }
-  /** Returns `null` because this strategy does not store routes for later re-use. */
-  retrieve(route) {
-    return null;
-  }
-  /**
-   * Determines if a route should be reused.
-   * This strategy returns `true` when the future route config and current route config are
-   * identical.
-   */
-  shouldReuseRoute(future, curr) {
-    return future.routeConfig === curr.routeConfig;
-  }
-};
-var DefaultRouteReuseStrategy = class _DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
-  static ɵfac = /* @__PURE__ */ (() => {
-    let ɵDefaultRouteReuseStrategy_BaseFactory;
-    return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {
-      return (ɵDefaultRouteReuseStrategy_BaseFactory || (ɵDefaultRouteReuseStrategy_BaseFactory = ɵɵgetInheritedFactory(_DefaultRouteReuseStrategy)))(__ngFactoryType__ || _DefaultRouteReuseStrategy);
-    };
-  })();
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultRouteReuseStrategy,
-    factory: _DefaultRouteReuseStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultRouteReuseStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var StateManager = class _StateManager {
-  static ɵfac = function StateManager_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _StateManager)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _StateManager,
-    factory: () => (() => inject(HistoryStateManager))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(StateManager, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(HistoryStateManager)
-    }]
-  }], null, null);
-})();
-var HistoryStateManager = class _HistoryStateManager extends StateManager {
-  location = inject(Location);
-  urlSerializer = inject(UrlSerializer);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  canceledNavigationResolution = this.options.canceledNavigationResolution || "replace";
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  urlUpdateStrategy = this.options.urlUpdateStrategy || "deferred";
-  currentUrlTree = new UrlTree();
-  getCurrentUrlTree() {
-    return this.currentUrlTree;
-  }
-  rawUrlTree = this.currentUrlTree;
-  getRawUrlTree() {
-    return this.rawUrlTree;
-  }
-  /**
-   * The id of the currently active page in the router.
-   * Updated to the transition's target id on a successful navigation.
-   *
-   * This is used to track what page the router last activated. When an attempted navigation fails,
-   * the router can then use this to compute how to restore the state back to the previously active
-   * page.
-   */
-  currentPageId = 0;
-  lastSuccessfulId = -1;
-  restoredState() {
-    return this.location.getState();
-  }
-  /**
-   * The ɵrouterPageId of whatever page is currently active in the browser history. This is
-   * important for computing the target page id for new navigations because we need to ensure each
-   * page id in the browser history is 1 more than the previous entry.
-   */
-  get browserPageId() {
-    if (this.canceledNavigationResolution !== "computed") {
-      return this.currentPageId;
-    }
-    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;
-  }
-  routerState = createEmptyState(null);
-  getRouterState() {
-    return this.routerState;
-  }
-  stateMemento = this.createStateMemento();
-  createStateMemento() {
-    return {
-      rawUrlTree: this.rawUrlTree,
-      currentUrlTree: this.currentUrlTree,
-      routerState: this.routerState
-    };
-  }
-  registerNonRouterCurrentEntryChangeListener(listener) {
-    return this.location.subscribe((event) => {
-      if (event["type"] === "popstate") {
-        listener(event["url"], event.state);
-      }
-    });
-  }
-  handleRouterEvent(e, currentTransition) {
-    if (e instanceof NavigationStart) {
-      this.stateMemento = this.createStateMemento();
-    } else if (e instanceof NavigationSkipped) {
-      this.rawUrlTree = currentTransition.initialUrl;
-    } else if (e instanceof RoutesRecognized) {
-      if (this.urlUpdateStrategy === "eager") {
-        if (!currentTransition.extras.skipLocationChange) {
-          const rawUrl = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);
-          this.setBrowserUrl(currentTransition.targetBrowserUrl ?? rawUrl, currentTransition);
-        }
-      }
-    } else if (e instanceof BeforeActivateRoutes) {
-      this.currentUrlTree = currentTransition.finalUrl;
-      this.rawUrlTree = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);
-      this.routerState = currentTransition.targetRouterState;
-      if (this.urlUpdateStrategy === "deferred" && !currentTransition.extras.skipLocationChange) {
-        this.setBrowserUrl(currentTransition.targetBrowserUrl ?? this.rawUrlTree, currentTransition);
-      }
-    } else if (e instanceof NavigationCancel && (e.code === NavigationCancellationCode.GuardRejected || e.code === NavigationCancellationCode.NoDataFromResolver)) {
-      this.restoreHistory(currentTransition);
-    } else if (e instanceof NavigationError) {
-      this.restoreHistory(currentTransition, true);
-    } else if (e instanceof NavigationEnd) {
-      this.lastSuccessfulId = e.id;
-      this.currentPageId = this.browserPageId;
-    }
-  }
-  setBrowserUrl(url, transition) {
-    const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;
-    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {
-      const currentBrowserPageId = this.browserPageId;
-      const state = __spreadValues(__spreadValues({}, transition.extras.state), this.generateNgRouterState(transition.id, currentBrowserPageId));
-      this.location.replaceState(path, "", state);
-    } else {
-      const state = __spreadValues(__spreadValues({}, transition.extras.state), this.generateNgRouterState(transition.id, this.browserPageId + 1));
-      this.location.go(path, "", state);
-    }
-  }
-  /**
-   * Performs the necessary rollback action to restore the browser URL to the
-   * state before the transition.
-   */
-  restoreHistory(navigation, restoringFromCaughtError = false) {
-    if (this.canceledNavigationResolution === "computed") {
-      const currentBrowserPageId = this.browserPageId;
-      const targetPagePosition = this.currentPageId - currentBrowserPageId;
-      if (targetPagePosition !== 0) {
-        this.location.historyGo(targetPagePosition);
-      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {
-        this.resetState(navigation);
-        this.resetUrlToCurrentUrlTree();
-      } else {
-      }
-    } else if (this.canceledNavigationResolution === "replace") {
-      if (restoringFromCaughtError) {
-        this.resetState(navigation);
-      }
-      this.resetUrlToCurrentUrlTree();
-    }
-  }
-  resetState(navigation) {
-    this.routerState = this.stateMemento.routerState;
-    this.currentUrlTree = this.stateMemento.currentUrlTree;
-    this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);
-  }
-  resetUrlToCurrentUrlTree() {
-    this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), "", this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));
-  }
-  generateNgRouterState(navigationId, routerPageId) {
-    if (this.canceledNavigationResolution === "computed") {
-      return {
-        navigationId,
-        ɵrouterPageId: routerPageId
-      };
-    }
-    return {
-      navigationId
-    };
-  }
-  static ɵfac = /* @__PURE__ */ (() => {
-    let ɵHistoryStateManager_BaseFactory;
-    return function HistoryStateManager_Factory(__ngFactoryType__) {
-      return (ɵHistoryStateManager_BaseFactory || (ɵHistoryStateManager_BaseFactory = ɵɵgetInheritedFactory(_HistoryStateManager)))(__ngFactoryType__ || _HistoryStateManager);
-    };
-  })();
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HistoryStateManager,
-    factory: _HistoryStateManager.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HistoryStateManager, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var NavigationResult;
-(function(NavigationResult2) {
-  NavigationResult2[NavigationResult2["COMPLETE"] = 0] = "COMPLETE";
-  NavigationResult2[NavigationResult2["FAILED"] = 1] = "FAILED";
-  NavigationResult2[NavigationResult2["REDIRECTING"] = 2] = "REDIRECTING";
-})(NavigationResult || (NavigationResult = {}));
-function afterNextNavigation(router, action) {
-  router.events.pipe(filter((e) => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), map((e) => {
-    if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {
-      return NavigationResult.COMPLETE;
-    }
-    const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;
-    return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;
-  }), filter((result) => result !== NavigationResult.REDIRECTING), take(1)).subscribe(() => {
-    action();
-  });
-}
-var exactMatchOptions = {
-  paths: "exact",
-  fragment: "ignored",
-  matrixParams: "ignored",
-  queryParams: "exact"
-};
-var subsetMatchOptions = {
-  paths: "subset",
-  fragment: "ignored",
-  matrixParams: "ignored",
-  queryParams: "subset"
-};
-var Router = class _Router {
-  get currentUrlTree() {
-    return this.stateManager.getCurrentUrlTree();
-  }
-  get rawUrlTree() {
-    return this.stateManager.getRawUrlTree();
-  }
-  disposed = false;
-  nonRouterCurrentEntryChangeSubscription;
-  console = inject(Console);
-  stateManager = inject(StateManager);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  pendingTasks = inject(PendingTasksInternal);
-  urlUpdateStrategy = this.options.urlUpdateStrategy || "deferred";
-  navigationTransitions = inject(NavigationTransitions);
-  urlSerializer = inject(UrlSerializer);
-  location = inject(Location);
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  /**
-   * The private `Subject` type for the public events exposed in the getter. This is used internally
-   * to push events to. The separate field allows us to expose separate types in the public API
-   * (i.e., an Observable rather than the Subject).
-   */
-  _events = new Subject();
-  /**
-   * An event stream for routing events.
-   */
-  get events() {
-    return this._events;
-  }
-  /**
-   * The current state of routing in this NgModule.
-   */
-  get routerState() {
-    return this.stateManager.getRouterState();
-  }
-  /**
-   * True if at least one navigation event has occurred,
-   * false otherwise.
-   */
-  navigated = false;
-  /**
-   * A strategy for re-using routes.
-   *
-   * @deprecated Configure using `providers` instead:
-   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.
-   */
-  routeReuseStrategy = inject(RouteReuseStrategy);
-  /**
-   * How to handle a navigation request to the current URL.
-   *
-   *
-   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.
-   * @see {@link withRouterConfig}
-   * @see {@link provideRouter}
-   * @see {@link RouterModule}
-   */
-  onSameUrlNavigation = this.options.onSameUrlNavigation || "ignore";
-  config = inject(ROUTES, {
-    optional: true
-  })?.flat() ?? [];
-  /**
-   * Indicates whether the application has opted in to binding Router data to component inputs.
-   *
-   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or
-   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.
-   */
-  componentInputBindingEnabled = !!inject(INPUT_BINDER, {
-    optional: true
-  });
-  constructor() {
-    this.resetConfig(this.config);
-    this.navigationTransitions.setupNavigations(this, this.currentUrlTree, this.routerState).subscribe({
-      error: (e) => {
-        this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);
-      }
-    });
-    this.subscribeToNavigationEvents();
-  }
-  eventsSubscription = new Subscription();
-  subscribeToNavigationEvents() {
-    const subscription = this.navigationTransitions.events.subscribe((e) => {
-      try {
-        const currentTransition = this.navigationTransitions.currentTransition;
-        const currentNavigation = this.navigationTransitions.currentNavigation;
-        if (currentTransition !== null && currentNavigation !== null) {
-          this.stateManager.handleRouterEvent(e, currentNavigation);
-          if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {
-            this.navigated = true;
-          } else if (e instanceof NavigationEnd) {
-            this.navigated = true;
-          } else if (e instanceof RedirectRequest) {
-            const opts = e.navigationBehaviorOptions;
-            const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);
-            const extras = __spreadValues({
-              browserUrl: currentTransition.extras.browserUrl,
-              info: currentTransition.extras.info,
-              skipLocationChange: currentTransition.extras.skipLocationChange,
-              // The URL is already updated at this point if we have 'eager' URL
-              // updates or if the navigation was triggered by the browser (back
-              // button, URL bar, etc). We want to replace that item in history
-              // if the navigation is rejected.
-              replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === "eager" || isBrowserTriggeredNavigation(currentTransition.source)
-            }, opts);
-            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {
-              resolve: currentTransition.resolve,
-              reject: currentTransition.reject,
-              promise: currentTransition.promise
-            });
-          }
-        }
-        if (isPublicRouterEvent(e)) {
-          this._events.next(e);
-        }
-      } catch (e2) {
-        this.navigationTransitions.transitionAbortSubject.next(e2);
-      }
-    });
-    this.eventsSubscription.add(subscription);
-  }
-  /** @internal */
-  resetRootComponentType(rootComponentType) {
-    this.routerState.root.component = rootComponentType;
-    this.navigationTransitions.rootComponentType = rootComponentType;
-  }
-  /**
-   * Sets up the location change listener and performs the initial navigation.
-   */
-  initialNavigation() {
-    this.setUpLocationChangeListener();
-    if (!this.navigationTransitions.hasRequestedNavigation) {
-      this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());
-    }
-  }
-  /**
-   * Sets up the location change listener. This listener detects navigations triggered from outside
-   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router
-   * navigation so that the correct events, guards, etc. are triggered.
-   */
-  setUpLocationChangeListener() {
-    this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {
-      setTimeout(() => {
-        this.navigateToSyncWithBrowser(url, "popstate", state);
-      }, 0);
-    });
-  }
-  /**
-   * Schedules a router navigation to synchronize Router state with the browser state.
-   *
-   * This is done as a response to a popstate event and the initial navigation. These
-   * two scenarios represent times when the browser URL/state has been updated and
-   * the Router needs to respond to ensure its internal state matches.
-   */
-  navigateToSyncWithBrowser(url, source, state) {
-    const extras = {
-      replaceUrl: true
-    };
-    const restoredState = state?.navigationId ? state : null;
-    if (state) {
-      const stateCopy = __spreadValues({}, state);
-      delete stateCopy.navigationId;
-      delete stateCopy.ɵrouterPageId;
-      if (Object.keys(stateCopy).length !== 0) {
-        extras.state = stateCopy;
-      }
-    }
-    const urlTree = this.parseUrl(url);
-    this.scheduleNavigation(urlTree, source, restoredState, extras);
-  }
-  /** The current URL. */
-  get url() {
-    return this.serializeUrl(this.currentUrlTree);
-  }
-  /**
-   * Returns the current `Navigation` object when the router is navigating,
-   * and `null` when idle.
-   */
-  getCurrentNavigation() {
-    return this.navigationTransitions.currentNavigation;
-  }
-  /**
-   * The `Navigation` object of the most recent navigation to succeed and `null` if there
-   *     has not been a successful navigation yet.
-   */
-  get lastSuccessfulNavigation() {
-    return this.navigationTransitions.lastSuccessfulNavigation;
-  }
-  /**
-   * Resets the route configuration used for navigation and generating links.
-   *
-   * @param config The route array for the new configuration.
-   *
-   * @usageNotes
-   *
-   * ```
-   * router.resetConfig([
-   *  { path: 'team/:id', component: TeamCmp, children: [
-   *    { path: 'simple', component: SimpleCmp },
-   *    { path: 'user/:name', component: UserCmp }
-   *  ]}
-   * ]);
-   * ```
-   */
-  resetConfig(config) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && validateConfig(config);
-    this.config = config.map(standardizeConfig);
-    this.navigated = false;
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.dispose();
-  }
-  /** Disposes of the router. */
-  dispose() {
-    this.navigationTransitions.complete();
-    if (this.nonRouterCurrentEntryChangeSubscription) {
-      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();
-      this.nonRouterCurrentEntryChangeSubscription = void 0;
-    }
-    this.disposed = true;
-    this.eventsSubscription.unsubscribe();
-  }
-  /**
-   * Appends URL segments to the current URL tree to create a new URL tree.
-   *
-   * @param commands An array of URL fragments with which to construct the new URL tree.
-   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
-   * segments, followed by the parameters for each segment.
-   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`
-   * property of the options object, if supplied.
-   * @param navigationExtras Options that control the navigation strategy.
-   * @returns The new URL tree.
-   *
-   * @usageNotes
-   *
-   * ```
-   * // create /team/33/user/11
-   * router.createUrlTree(['/team', 33, 'user', 11]);
-   *
-   * // create /team/33;expand=true/user/11
-   * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);
-   *
-   * // you can collapse static segments like this (this works only with the first passed-in value):
-   * router.createUrlTree(['/team/33/user', userId]);
-   *
-   * // If the first segment can contain slashes, and you do not want the router to split it,
-   * // you can do the following:
-   * router.createUrlTree([{segmentPath: '/one/two'}]);
-   *
-   * // create /team/33/(user/11//right:chat)
-   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);
-   *
-   * // remove the right secondary node
-   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);
-   *
-   * // assuming the current url is `/team/33/user/11` and the route points to `user/11`
-   *
-   * // navigate to /team/33/user/11/details
-   * router.createUrlTree(['details'], {relativeTo: route});
-   *
-   * // navigate to /team/33/user/22
-   * router.createUrlTree(['../22'], {relativeTo: route});
-   *
-   * // navigate to /team/44/user/22
-   * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});
-   *
-   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the
-   * tree should be created relative to the root.
-   * ```
-   */
-  createUrlTree(commands, navigationExtras = {}) {
-    const {
-      relativeTo,
-      queryParams,
-      fragment,
-      queryParamsHandling,
-      preserveFragment
-    } = navigationExtras;
-    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;
-    let q = null;
-    switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {
-      case "merge":
-        q = __spreadValues(__spreadValues({}, this.currentUrlTree.queryParams), queryParams);
-        break;
-      case "preserve":
-        q = this.currentUrlTree.queryParams;
-        break;
-      default:
-        q = queryParams || null;
-    }
-    if (q !== null) {
-      q = this.removeEmptyProps(q);
-    }
-    let relativeToUrlSegmentGroup;
-    try {
-      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;
-      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
-    } catch (e) {
-      if (typeof commands[0] !== "string" || commands[0][0] !== "/") {
-        commands = [];
-      }
-      relativeToUrlSegmentGroup = this.currentUrlTree.root;
-    }
-    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);
-  }
-  /**
-   * Navigates to a view using an absolute route path.
-   *
-   * @param url An absolute path for a defined route. The function does not apply any delta to the
-   *     current URL.
-   * @param extras An object containing properties that modify the navigation strategy.
-   *
-   * @returns A Promise that resolves to 'true' when navigation succeeds,
-   * to 'false' when navigation fails, or is rejected on error.
-   *
-   * @usageNotes
-   *
-   * The following calls request navigation to an absolute path.
-   *
-   * ```
-   * router.navigateByUrl("/team/33/user/11");
-   *
-   * // Navigate without updating the URL
-   * router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
-   * ```
-   *
-   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)
-   *
-   */
-  navigateByUrl(url, extras = {
-    skipLocationChange: false
-  }) {
-    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);
-    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);
-    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);
-  }
-  /**
-   * Navigate based on the provided array of commands and a starting point.
-   * If no starting route is provided, the navigation is absolute.
-   *
-   * @param commands An array of URL fragments with which to construct the target URL.
-   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
-   * segments, followed by the parameters for each segment.
-   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property
-   * of the options object, if supplied.
-   * @param extras An options object that determines how the URL should be constructed or
-   *     interpreted.
-   *
-   * @returns A Promise that resolves to `true` when navigation succeeds, or `false` when navigation
-   *     fails. The Promise is rejected when an error occurs if `resolveNavigationPromiseOnError` is
-   * not `true`.
-   *
-   * @usageNotes
-   *
-   * The following calls request navigation to a dynamic route path relative to the current URL.
-   *
-   * ```
-   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});
-   *
-   * // Navigate without updating the URL, overriding the default behavior
-   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});
-   * ```
-   *
-   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)
-   *
-   */
-  navigate(commands, extras = {
-    skipLocationChange: false
-  }) {
-    validateCommands(commands);
-    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);
-  }
-  /** Serializes a `UrlTree` into a string */
-  serializeUrl(url) {
-    return this.urlSerializer.serialize(url);
-  }
-  /** Parses a string into a `UrlTree` */
-  parseUrl(url) {
-    try {
-      return this.urlSerializer.parse(url);
-    } catch {
-      return this.urlSerializer.parse("/");
-    }
-  }
-  isActive(url, matchOptions) {
-    let options;
-    if (matchOptions === true) {
-      options = __spreadValues({}, exactMatchOptions);
-    } else if (matchOptions === false) {
-      options = __spreadValues({}, subsetMatchOptions);
-    } else {
-      options = matchOptions;
-    }
-    if (isUrlTree(url)) {
-      return containsTree(this.currentUrlTree, url, options);
-    }
-    const urlTree = this.parseUrl(url);
-    return containsTree(this.currentUrlTree, urlTree, options);
-  }
-  removeEmptyProps(params) {
-    return Object.entries(params).reduce((result, [key, value]) => {
-      if (value !== null && value !== void 0) {
-        result[key] = value;
-      }
-      return result;
-    }, {});
-  }
-  scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {
-    if (this.disposed) {
-      return Promise.resolve(false);
-    }
-    let resolve;
-    let reject;
-    let promise;
-    if (priorPromise) {
-      resolve = priorPromise.resolve;
-      reject = priorPromise.reject;
-      promise = priorPromise.promise;
-    } else {
-      promise = new Promise((res, rej) => {
-        resolve = res;
-        reject = rej;
-      });
-    }
-    const taskId = this.pendingTasks.add();
-    afterNextNavigation(this, () => {
-      queueMicrotask(() => this.pendingTasks.remove(taskId));
-    });
-    this.navigationTransitions.handleNavigationRequest({
-      source,
-      restoredState,
-      currentUrlTree: this.currentUrlTree,
-      currentRawUrl: this.currentUrlTree,
-      rawUrl,
-      extras,
-      resolve,
-      reject,
-      promise,
-      currentSnapshot: this.routerState.snapshot,
-      currentRouterState: this.routerState
-    });
-    return promise.catch((e) => {
-      return Promise.reject(e);
-    });
-  }
-  static ɵfac = function Router_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Router)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Router,
-    factory: _Router.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Router, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function validateCommands(commands) {
-  for (let i = 0; i < commands.length; i++) {
-    const cmd = commands[i];
-    if (cmd == null) {
-      throw new RuntimeError(4008, (typeof ngDevMode === "undefined" || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);
-    }
-  }
-}
-function isPublicRouterEvent(e) {
-  return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);
-}
-var RouterLink = class _RouterLink {
-  router;
-  route;
-  tabIndexAttribute;
-  renderer;
-  el;
-  locationStrategy;
-  /**
-   * Represents an `href` attribute value applied to a host element,
-   * when a host element is `<a>`. For other tags, the value is `null`.
-   */
-  href = null;
-  /**
-   * Represents the `target` attribute on a host element.
-   * This is only used when the host element is an `<a>` tag.
-   */
-  target;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#queryParams}
-   * @see {@link Router#createUrlTree}
-   */
-  queryParams;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#fragment}
-   * @see {@link Router#createUrlTree}
-   */
-  fragment;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#queryParamsHandling}
-   * @see {@link Router#createUrlTree}
-   */
-  queryParamsHandling;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#state}
-   * @see {@link Router#navigateByUrl}
-   */
-  state;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#info}
-   * @see {@link Router#navigateByUrl}
-   */
-  info;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * Specify a value here when you do not want to use the default value
-   * for `routerLink`, which is the current activated route.
-   * Note that a value of `undefined` here will use the `routerLink` default.
-   * @see {@link UrlCreationOptions#relativeTo}
-   * @see {@link Router#createUrlTree}
-   */
-  relativeTo;
-  /** Whether a host element is an `<a>` tag. */
-  isAnchorElement;
-  subscription;
-  /** @internal */
-  onChanges = new Subject();
-  constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {
-    this.router = router;
-    this.route = route;
-    this.tabIndexAttribute = tabIndexAttribute;
-    this.renderer = renderer;
-    this.el = el;
-    this.locationStrategy = locationStrategy;
-    const tagName = el.nativeElement.tagName?.toLowerCase();
-    this.isAnchorElement = tagName === "a" || tagName === "area";
-    if (this.isAnchorElement) {
-      this.subscription = router.events.subscribe((s) => {
-        if (s instanceof NavigationEnd) {
-          this.updateHref();
-        }
-      });
-    } else {
-      this.setTabIndexIfNotOnNativeEl("0");
-    }
-  }
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#preserveFragment}
-   * @see {@link Router#createUrlTree}
-   */
-  preserveFragment = false;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#skipLocationChange}
-   * @see {@link Router#navigateByUrl}
-   */
-  skipLocationChange = false;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#replaceUrl}
-   * @see {@link Router#navigateByUrl}
-   */
-  replaceUrl = false;
-  /**
-   * Modifies the tab index if there was not a tabindex attribute on the element during
-   * instantiation.
-   */
-  setTabIndexIfNotOnNativeEl(newTabIndex) {
-    if (this.tabIndexAttribute != null || this.isAnchorElement) {
-      return;
-    }
-    this.applyAttributeValue("tabindex", newTabIndex);
-  }
-  /** @nodoc */
-  // TODO(atscott): Remove changes parameter in major version as a breaking change.
-  ngOnChanges(changes) {
-    if (ngDevMode && isUrlTree(this.routerLinkInput) && (this.fragment !== void 0 || this.queryParams || this.queryParamsHandling || this.preserveFragment || this.relativeTo)) {
-      throw new RuntimeError(4016, "Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.");
-    }
-    if (this.isAnchorElement) {
-      this.updateHref();
-    }
-    this.onChanges.next(this);
-  }
-  routerLinkInput = null;
-  /**
-   * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.
-   *   - **array**: commands to pass to {@link Router#createUrlTree}.
-   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
-   *   - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands
-   *     and other inputs that correspond to properties of `UrlCreationOptions`.
-   *   - **null|undefined**: effectively disables the `routerLink`
-   * @see {@link Router#createUrlTree}
-   */
-  set routerLink(commandsOrUrlTree) {
-    if (commandsOrUrlTree == null) {
-      this.routerLinkInput = null;
-      this.setTabIndexIfNotOnNativeEl(null);
-    } else {
-      if (isUrlTree(commandsOrUrlTree)) {
-        this.routerLinkInput = commandsOrUrlTree;
-      } else {
-        this.routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];
-      }
-      this.setTabIndexIfNotOnNativeEl("0");
-    }
-  }
-  /** @nodoc */
-  onClick(button, ctrlKey, shiftKey, altKey, metaKey) {
-    const urlTree = this.urlTree;
-    if (urlTree === null) {
-      return true;
-    }
-    if (this.isAnchorElement) {
-      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {
-        return true;
-      }
-      if (typeof this.target === "string" && this.target != "_self") {
-        return true;
-      }
-    }
-    const extras = {
-      skipLocationChange: this.skipLocationChange,
-      replaceUrl: this.replaceUrl,
-      state: this.state,
-      info: this.info
-    };
-    this.router.navigateByUrl(urlTree, extras);
-    return !this.isAnchorElement;
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.subscription?.unsubscribe();
-  }
-  updateHref() {
-    const urlTree = this.urlTree;
-    this.href = urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) : null;
-    const sanitizedValue = this.href === null ? null : (
-      // This class represents a directive that can be added to both `<a>` elements,
-      // as well as other elements. As a result, we can't define security context at
-      // compile time. So the security context is deferred to runtime.
-      // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function
-      // based on the tag and property names. The logic mimics the one from
-      // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.
-      //
-      // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`
-      // instead of applying a value via a renderer, after a final merge of the
-      // `RouterLinkWithHref` directive.
-      ɵɵsanitizeUrlOrResourceUrl(this.href, this.el.nativeElement.tagName.toLowerCase(), "href")
-    );
-    this.applyAttributeValue("href", sanitizedValue);
-  }
-  applyAttributeValue(attrName, attrValue) {
-    const renderer = this.renderer;
-    const nativeElement = this.el.nativeElement;
-    if (attrValue !== null) {
-      renderer.setAttribute(nativeElement, attrName, attrValue);
-    } else {
-      renderer.removeAttribute(nativeElement, attrName);
-    }
-  }
-  get urlTree() {
-    if (this.routerLinkInput === null) {
-      return null;
-    } else if (isUrlTree(this.routerLinkInput)) {
-      return this.routerLinkInput;
-    }
-    return this.router.createUrlTree(this.routerLinkInput, {
-      // If the `relativeTo` input is not defined, we want to use `this.route` by default.
-      // Otherwise, we should use the value provided by the user in the input.
-      relativeTo: this.relativeTo !== void 0 ? this.relativeTo : this.route,
-      queryParams: this.queryParams,
-      fragment: this.fragment,
-      queryParamsHandling: this.queryParamsHandling,
-      preserveFragment: this.preserveFragment
-    });
-  }
-  static ɵfac = function RouterLink_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterLink)(ɵɵdirectiveInject(Router), ɵɵdirectiveInject(ActivatedRoute), ɵɵinjectAttribute("tabindex"), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(LocationStrategy));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterLink,
-    selectors: [["", "routerLink", ""]],
-    hostVars: 1,
-    hostBindings: function RouterLink_HostBindings(rf, ctx) {
-      if (rf & 1) {
-        ɵɵlistener("click", function RouterLink_click_HostBindingHandler($event) {
-          return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);
-        });
-      }
-      if (rf & 2) {
-        ɵɵattribute("target", ctx.target);
-      }
-    },
-    inputs: {
-      target: "target",
-      queryParams: "queryParams",
-      fragment: "fragment",
-      queryParamsHandling: "queryParamsHandling",
-      state: "state",
-      info: "info",
-      relativeTo: "relativeTo",
-      preserveFragment: [2, "preserveFragment", "preserveFragment", booleanAttribute],
-      skipLocationChange: [2, "skipLocationChange", "skipLocationChange", booleanAttribute],
-      replaceUrl: [2, "replaceUrl", "replaceUrl", booleanAttribute],
-      routerLink: "routerLink"
-    },
-    features: [ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterLink, [{
-    type: Directive,
-    args: [{
-      selector: "[routerLink]"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: ActivatedRoute
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Attribute,
-      args: ["tabindex"]
-    }]
-  }, {
-    type: Renderer2
-  }, {
-    type: ElementRef
-  }, {
-    type: LocationStrategy
-  }], {
-    target: [{
-      type: HostBinding,
-      args: ["attr.target"]
-    }, {
-      type: Input
-    }],
-    queryParams: [{
-      type: Input
-    }],
-    fragment: [{
-      type: Input
-    }],
-    queryParamsHandling: [{
-      type: Input
-    }],
-    state: [{
-      type: Input
-    }],
-    info: [{
-      type: Input
-    }],
-    relativeTo: [{
-      type: Input
-    }],
-    preserveFragment: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    skipLocationChange: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    replaceUrl: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    routerLink: [{
-      type: Input
-    }],
-    onClick: [{
-      type: HostListener,
-      args: ["click", ["$event.button", "$event.ctrlKey", "$event.shiftKey", "$event.altKey", "$event.metaKey"]]
-    }]
-  });
-})();
-var RouterLinkActive = class _RouterLinkActive {
-  router;
-  element;
-  renderer;
-  cdr;
-  link;
-  links;
-  classes = [];
-  routerEventsSubscription;
-  linkInputChangesSubscription;
-  _isActive = false;
-  get isActive() {
-    return this._isActive;
-  }
-  /**
-   * Options to configure how to determine if the router link is active.
-   *
-   * These options are passed to the `Router.isActive()` function.
-   *
-   * @see {@link Router#isActive}
-   */
-  routerLinkActiveOptions = {
-    exact: false
-  };
-  /**
-   * Aria-current attribute to apply when the router link is active.
-   *
-   * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.
-   *
-   * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}
-   */
-  ariaCurrentWhenActive;
-  /**
-   *
-   * You can use the output `isActiveChange` to get notified each time the link becomes
-   * active or inactive.
-   *
-   * Emits:
-   * true  -> Route is active
-   * false -> Route is inactive
-   *
-   * ```
-   * <a
-   *  routerLink="/user/bob"
-   *  routerLinkActive="active-link"
-   *  (isActiveChange)="this.onRouterLinkActive($event)">Bob</a>
-   * ```
-   */
-  isActiveChange = new EventEmitter();
-  constructor(router, element, renderer, cdr, link) {
-    this.router = router;
-    this.element = element;
-    this.renderer = renderer;
-    this.cdr = cdr;
-    this.link = link;
-    this.routerEventsSubscription = router.events.subscribe((s) => {
-      if (s instanceof NavigationEnd) {
-        this.update();
-      }
-    });
-  }
-  /** @nodoc */
-  ngAfterContentInit() {
-    of(this.links.changes, of(null)).pipe(mergeAll()).subscribe((_) => {
-      this.update();
-      this.subscribeToEachLinkOnChanges();
-    });
-  }
-  subscribeToEachLinkOnChanges() {
-    this.linkInputChangesSubscription?.unsubscribe();
-    const allLinkChanges = [...this.links.toArray(), this.link].filter((link) => !!link).map((link) => link.onChanges);
-    this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe((link) => {
-      if (this._isActive !== this.isLinkActive(this.router)(link)) {
-        this.update();
-      }
-    });
-  }
-  set routerLinkActive(data) {
-    const classes = Array.isArray(data) ? data : data.split(" ");
-    this.classes = classes.filter((c) => !!c);
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    this.update();
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.routerEventsSubscription.unsubscribe();
-    this.linkInputChangesSubscription?.unsubscribe();
-  }
-  update() {
-    if (!this.links || !this.router.navigated) return;
-    queueMicrotask(() => {
-      const hasActiveLinks = this.hasActiveLinks();
-      this.classes.forEach((c) => {
-        if (hasActiveLinks) {
-          this.renderer.addClass(this.element.nativeElement, c);
-        } else {
-          this.renderer.removeClass(this.element.nativeElement, c);
-        }
-      });
-      if (hasActiveLinks && this.ariaCurrentWhenActive !== void 0) {
-        this.renderer.setAttribute(this.element.nativeElement, "aria-current", this.ariaCurrentWhenActive.toString());
-      } else {
-        this.renderer.removeAttribute(this.element.nativeElement, "aria-current");
-      }
-      if (this._isActive !== hasActiveLinks) {
-        this._isActive = hasActiveLinks;
-        this.cdr.markForCheck();
-        this.isActiveChange.emit(hasActiveLinks);
-      }
-    });
-  }
-  isLinkActive(router) {
-    const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions : (
-      // While the types should disallow `undefined` here, it's possible without strict inputs
-      this.routerLinkActiveOptions.exact || false
-    );
-    return (link) => {
-      const urlTree = link.urlTree;
-      return urlTree ? router.isActive(urlTree, options) : false;
-    };
-  }
-  hasActiveLinks() {
-    const isActiveCheckFn = this.isLinkActive(this.router);
-    return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
-  }
-  static ɵfac = function RouterLinkActive_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterLinkActive)(ɵɵdirectiveInject(Router), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ChangeDetectorRef), ɵɵdirectiveInject(RouterLink, 8));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterLinkActive,
-    selectors: [["", "routerLinkActive", ""]],
-    contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {
-      if (rf & 1) {
-        ɵɵcontentQuery(dirIndex, RouterLink, 5);
-      }
-      if (rf & 2) {
-        let _t;
-        ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.links = _t);
-      }
-    },
-    inputs: {
-      routerLinkActiveOptions: "routerLinkActiveOptions",
-      ariaCurrentWhenActive: "ariaCurrentWhenActive",
-      routerLinkActive: "routerLinkActive"
-    },
-    outputs: {
-      isActiveChange: "isActiveChange"
-    },
-    exportAs: ["routerLinkActive"],
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterLinkActive, [{
-    type: Directive,
-    args: [{
-      selector: "[routerLinkActive]",
-      exportAs: "routerLinkActive"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: ElementRef
-  }, {
-    type: Renderer2
-  }, {
-    type: ChangeDetectorRef
-  }, {
-    type: RouterLink,
-    decorators: [{
-      type: Optional
-    }]
-  }], {
-    links: [{
-      type: ContentChildren,
-      args: [RouterLink, {
-        descendants: true
-      }]
-    }],
-    routerLinkActiveOptions: [{
-      type: Input
-    }],
-    ariaCurrentWhenActive: [{
-      type: Input
-    }],
-    isActiveChange: [{
-      type: Output
-    }],
-    routerLinkActive: [{
-      type: Input
-    }]
-  });
-})();
-function isActiveMatchOptions(options) {
-  return !!options.paths;
-}
-var PreloadingStrategy = class {
-};
-var PreloadAllModules = class _PreloadAllModules {
-  preload(route, fn) {
-    return fn().pipe(catchError(() => of(null)));
-  }
-  static ɵfac = function PreloadAllModules_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreloadAllModules)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreloadAllModules,
-    factory: _PreloadAllModules.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreloadAllModules, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var NoPreloading = class _NoPreloading {
-  preload(route, fn) {
-    return of(null);
-  }
-  static ɵfac = function NoPreloading_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NoPreloading)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NoPreloading,
-    factory: _NoPreloading.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NoPreloading, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var RouterPreloader = class _RouterPreloader {
-  router;
-  injector;
-  preloadingStrategy;
-  loader;
-  subscription;
-  constructor(router, compiler, injector, preloadingStrategy, loader) {
-    this.router = router;
-    this.injector = injector;
-    this.preloadingStrategy = preloadingStrategy;
-    this.loader = loader;
-  }
-  setUpPreloading() {
-    this.subscription = this.router.events.pipe(filter((e) => e instanceof NavigationEnd), concatMap(() => this.preload())).subscribe(() => {
-    });
-  }
-  preload() {
-    return this.processRoutes(this.injector, this.router.config);
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (this.subscription) {
-      this.subscription.unsubscribe();
-    }
-  }
-  processRoutes(injector, routes) {
-    const res = [];
-    for (const route of routes) {
-      if (route.providers && !route._injector) {
-        route._injector = createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);
-      }
-      const injectorForCurrentRoute = route._injector ?? injector;
-      const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;
-      if (route.loadChildren && !route._loadedRoutes && route.canLoad === void 0 || route.loadComponent && !route._loadedComponent) {
-        res.push(this.preloadConfig(injectorForCurrentRoute, route));
-      }
-      if (route.children || route._loadedRoutes) {
-        res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));
-      }
-    }
-    return from(res).pipe(mergeAll());
-  }
-  preloadConfig(injector, route) {
-    return this.preloadingStrategy.preload(route, () => {
-      let loadedChildren$;
-      if (route.loadChildren && route.canLoad === void 0) {
-        loadedChildren$ = this.loader.loadChildren(injector, route);
-      } else {
-        loadedChildren$ = of(null);
-      }
-      const recursiveLoadChildren$ = loadedChildren$.pipe(mergeMap((config) => {
-        if (config === null) {
-          return of(void 0);
-        }
-        route._loadedRoutes = config.routes;
-        route._loadedInjector = config.injector;
-        return this.processRoutes(config.injector ?? injector, config.routes);
-      }));
-      if (route.loadComponent && !route._loadedComponent) {
-        const loadComponent$ = this.loader.loadComponent(route);
-        return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());
-      } else {
-        return recursiveLoadChildren$;
-      }
-    });
-  }
-  static ɵfac = function RouterPreloader_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterPreloader)(ɵɵinject(Router), ɵɵinject(Compiler), ɵɵinject(EnvironmentInjector), ɵɵinject(PreloadingStrategy), ɵɵinject(RouterConfigLoader));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterPreloader,
-    factory: _RouterPreloader.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterPreloader, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: Compiler
-  }, {
-    type: EnvironmentInjector
-  }, {
-    type: PreloadingStrategy
-  }, {
-    type: RouterConfigLoader
-  }], null);
-})();
-var ROUTER_SCROLLER = new InjectionToken("");
-var RouterScroller = class _RouterScroller {
-  urlSerializer;
-  transitions;
-  viewportScroller;
-  zone;
-  options;
-  routerEventsSubscription;
-  scrollEventsSubscription;
-  lastId = 0;
-  lastSource = "imperative";
-  restoredId = 0;
-  store = {};
-  /** @nodoc */
-  constructor(urlSerializer, transitions, viewportScroller, zone, options = {}) {
-    this.urlSerializer = urlSerializer;
-    this.transitions = transitions;
-    this.viewportScroller = viewportScroller;
-    this.zone = zone;
-    this.options = options;
-    options.scrollPositionRestoration ||= "disabled";
-    options.anchorScrolling ||= "disabled";
-  }
-  init() {
-    if (this.options.scrollPositionRestoration !== "disabled") {
-      this.viewportScroller.setHistoryScrollRestoration("manual");
-    }
-    this.routerEventsSubscription = this.createScrollEvents();
-    this.scrollEventsSubscription = this.consumeScrollEvents();
-  }
-  createScrollEvents() {
-    return this.transitions.events.subscribe((e) => {
-      if (e instanceof NavigationStart) {
-        this.store[this.lastId] = this.viewportScroller.getScrollPosition();
-        this.lastSource = e.navigationTrigger;
-        this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;
-      } else if (e instanceof NavigationEnd) {
-        this.lastId = e.id;
-        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);
-      } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {
-        this.lastSource = void 0;
-        this.restoredId = 0;
-        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);
-      }
-    });
-  }
-  consumeScrollEvents() {
-    return this.transitions.events.subscribe((e) => {
-      if (!(e instanceof Scroll)) return;
-      if (e.position) {
-        if (this.options.scrollPositionRestoration === "top") {
-          this.viewportScroller.scrollToPosition([0, 0]);
-        } else if (this.options.scrollPositionRestoration === "enabled") {
-          this.viewportScroller.scrollToPosition(e.position);
-        }
-      } else {
-        if (e.anchor && this.options.anchorScrolling === "enabled") {
-          this.viewportScroller.scrollToAnchor(e.anchor);
-        } else if (this.options.scrollPositionRestoration !== "disabled") {
-          this.viewportScroller.scrollToPosition([0, 0]);
-        }
-      }
-    });
-  }
-  scheduleScrollEvent(routerEvent, anchor) {
-    this.zone.runOutsideAngular(() => {
-      setTimeout(() => {
-        this.zone.run(() => {
-          this.transitions.events.next(new Scroll(routerEvent, this.lastSource === "popstate" ? this.store[this.restoredId] : null, anchor));
-        });
-      }, 0);
-    });
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.routerEventsSubscription?.unsubscribe();
-    this.scrollEventsSubscription?.unsubscribe();
-  }
-  static ɵfac = function RouterScroller_Factory(__ngFactoryType__) {
-    ɵɵinvalidFactory();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterScroller,
-    factory: _RouterScroller.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterScroller, [{
-    type: Injectable
-  }], () => [{
-    type: UrlSerializer
-  }, {
-    type: NavigationTransitions
-  }, {
-    type: ViewportScroller
-  }, {
-    type: NgZone
-  }, {
-    type: void 0
-  }], null);
-})();
-function provideRouter(routes, ...features) {
-  return makeEnvironmentProviders([{
-    provide: ROUTES,
-    multi: true,
-    useValue: routes
-  }, typeof ngDevMode === "undefined" || ngDevMode ? {
-    provide: ROUTER_IS_PROVIDED,
-    useValue: true
-  } : [], {
-    provide: ActivatedRoute,
-    useFactory: rootRoute,
-    deps: [Router]
-  }, {
-    provide: APP_BOOTSTRAP_LISTENER,
-    multi: true,
-    useFactory: getBootstrapListener
-  }, features.map((feature) => feature.ɵproviders)]);
-}
-function rootRoute(router) {
-  return router.routerState.root;
-}
-function routerFeature(kind, providers) {
-  return {
-    ɵkind: kind,
-    ɵproviders: providers
-  };
-}
-var ROUTER_IS_PROVIDED = new InjectionToken("", {
-  providedIn: "root",
-  factory: () => false
-});
-var routerIsProvidedDevModeCheck = {
-  provide: ENVIRONMENT_INITIALIZER,
-  multi: true,
-  useFactory() {
-    return () => {
-      if (!inject(ROUTER_IS_PROVIDED)) {
-        console.warn("`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. This is likely a mistake.");
-      }
-    };
-  }
-};
-function provideRoutes(routes) {
-  return [{
-    provide: ROUTES,
-    multi: true,
-    useValue: routes
-  }, typeof ngDevMode === "undefined" || ngDevMode ? routerIsProvidedDevModeCheck : []];
-}
-function withInMemoryScrolling(options = {}) {
-  const providers = [{
-    provide: ROUTER_SCROLLER,
-    useFactory: () => {
-      const viewportScroller = inject(ViewportScroller);
-      const zone = inject(NgZone);
-      const transitions = inject(NavigationTransitions);
-      const urlSerializer = inject(UrlSerializer);
-      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);
-    }
-  }];
-  return routerFeature(4, providers);
-}
-function getBootstrapListener() {
-  const injector = inject(Injector);
-  return (bootstrappedComponentRef) => {
-    const ref = injector.get(ApplicationRef);
-    if (bootstrappedComponentRef !== ref.components[0]) {
-      return;
-    }
-    const router = injector.get(Router);
-    const bootstrapDone = injector.get(BOOTSTRAP_DONE);
-    if (injector.get(INITIAL_NAVIGATION) === 1) {
-      router.initialNavigation();
-    }
-    injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();
-    injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();
-    router.resetRootComponentType(ref.componentTypes[0]);
-    if (!bootstrapDone.closed) {
-      bootstrapDone.next();
-      bootstrapDone.complete();
-      bootstrapDone.unsubscribe();
-    }
-  };
-}
-var BOOTSTRAP_DONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "bootstrap done indicator" : "", {
-  factory: () => {
-    return new Subject();
-  }
-});
-var INITIAL_NAVIGATION = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "initial navigation" : "", {
-  providedIn: "root",
-  factory: () => 1
-  /* InitialNavigation.EnabledNonBlocking */
-});
-function withEnabledBlockingInitialNavigation() {
-  const providers = [{
-    provide: INITIAL_NAVIGATION,
-    useValue: 0
-    /* InitialNavigation.EnabledBlocking */
-  }, {
-    provide: APP_INITIALIZER,
-    multi: true,
-    deps: [Injector],
-    useFactory: (injector) => {
-      const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());
-      return () => {
-        return locationInitialized.then(() => {
-          return new Promise((resolve) => {
-            const router = injector.get(Router);
-            const bootstrapDone = injector.get(BOOTSTRAP_DONE);
-            afterNextNavigation(router, () => {
-              resolve(true);
-            });
-            injector.get(NavigationTransitions).afterPreactivation = () => {
-              resolve(true);
-              return bootstrapDone.closed ? of(void 0) : bootstrapDone;
-            };
-            router.initialNavigation();
-          });
-        });
-      };
-    }
-  }];
-  return routerFeature(2, providers);
-}
-function withDisabledInitialNavigation() {
-  const providers = [{
-    provide: APP_INITIALIZER,
-    multi: true,
-    useFactory: () => {
-      const router = inject(Router);
-      return () => {
-        router.setUpLocationChangeListener();
-      };
-    }
-  }, {
-    provide: INITIAL_NAVIGATION,
-    useValue: 2
-    /* InitialNavigation.Disabled */
-  }];
-  return routerFeature(3, providers);
-}
-function withDebugTracing() {
-  let providers = [];
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    providers = [{
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const router = inject(Router);
-        return () => router.events.subscribe((e) => {
-          console.group?.(`Router Event: ${e.constructor.name}`);
-          console.log(stringifyEvent(e));
-          console.log(e);
-          console.groupEnd?.();
-        });
-      }
-    }];
-  } else {
-    providers = [];
-  }
-  return routerFeature(1, providers);
-}
-var ROUTER_PRELOADER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router preloader" : "");
-function withPreloading(preloadingStrategy) {
-  const providers = [{
-    provide: ROUTER_PRELOADER,
-    useExisting: RouterPreloader
-  }, {
-    provide: PreloadingStrategy,
-    useExisting: preloadingStrategy
-  }];
-  return routerFeature(0, providers);
-}
-function withRouterConfig(options) {
-  const providers = [{
-    provide: ROUTER_CONFIGURATION,
-    useValue: options
-  }];
-  return routerFeature(5, providers);
-}
-function withHashLocation() {
-  const providers = [{
-    provide: LocationStrategy,
-    useClass: HashLocationStrategy
-  }];
-  return routerFeature(6, providers);
-}
-function withNavigationErrorHandler(handler) {
-  const providers = [{
-    provide: NAVIGATION_ERROR_HANDLER,
-    useValue: handler
-  }];
-  return routerFeature(7, providers);
-}
-function withComponentInputBinding() {
-  const providers = [RoutedComponentInputBinder, {
-    provide: INPUT_BINDER,
-    useExisting: RoutedComponentInputBinder
-  }];
-  return routerFeature(8, providers);
-}
-function withViewTransitions(options) {
-  const providers = [{
-    provide: CREATE_VIEW_TRANSITION,
-    useValue: createViewTransition
-  }, {
-    provide: VIEW_TRANSITION_OPTIONS,
-    useValue: __spreadValues({
-      skipNextTransition: !!options?.skipInitialTransition
-    }, options)
-  }];
-  return routerFeature(9, providers);
-}
-var ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent];
-var ROUTER_FORROOT_GUARD = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router duplicate forRoot guard" : "ROUTER_FORROOT_GUARD");
-var ROUTER_PROVIDERS = [
-  Location,
-  {
-    provide: UrlSerializer,
-    useClass: DefaultUrlSerializer
-  },
-  Router,
-  ChildrenOutletContexts,
-  {
-    provide: ActivatedRoute,
-    useFactory: rootRoute,
-    deps: [Router]
-  },
-  RouterConfigLoader,
-  // Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can
-  // be removed when `provideRoutes` is removed.
-  typeof ngDevMode === "undefined" || ngDevMode ? {
-    provide: ROUTER_IS_PROVIDED,
-    useValue: true
-  } : []
-];
-var RouterModule = class _RouterModule {
-  constructor(guard) {
-  }
-  /**
-   * Creates and configures a module with all the router providers and directives.
-   * Optionally sets up an application listener to perform an initial navigation.
-   *
-   * When registering the NgModule at the root, import as follows:
-   *
-   * ```
-   * @NgModule({
-   *   imports: [RouterModule.forRoot(ROUTES)]
-   * })
-   * class MyNgModule {}
-   * ```
-   *
-   * @param routes An array of `Route` objects that define the navigation paths for the application.
-   * @param config An `ExtraOptions` configuration object that controls how navigation is performed.
-   * @return The new `NgModule`.
-   *
-   */
-  static forRoot(routes, config) {
-    return {
-      ngModule: _RouterModule,
-      providers: [ROUTER_PROVIDERS, typeof ngDevMode === "undefined" || ngDevMode ? config?.enableTracing ? withDebugTracing().ɵproviders : [] : [], {
-        provide: ROUTES,
-        multi: true,
-        useValue: routes
-      }, {
-        provide: ROUTER_FORROOT_GUARD,
-        useFactory: provideForRootGuard,
-        deps: [[Router, new Optional(), new SkipSelf()]]
-      }, config?.errorHandler ? {
-        provide: NAVIGATION_ERROR_HANDLER,
-        useValue: config.errorHandler
-      } : [], {
-        provide: ROUTER_CONFIGURATION,
-        useValue: config ? config : {}
-      }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [], config?.enableViewTransitions ? withViewTransitions().ɵproviders : [], provideRouterInitializer()]
-    };
-  }
-  /**
-   * Creates a module with all the router directives and a provider registering routes,
-   * without creating a new Router service.
-   * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:
-   *
-   * ```
-   * @NgModule({
-   *   imports: [RouterModule.forChild(ROUTES)]
-   * })
-   * class MyNgModule {}
-   * ```
-   *
-   * @param routes An array of `Route` objects that define the navigation paths for the submodule.
-   * @return The new NgModule.
-   *
-   */
-  static forChild(routes) {
-    return {
-      ngModule: _RouterModule,
-      providers: [{
-        provide: ROUTES,
-        multi: true,
-        useValue: routes
-      }]
-    };
-  }
-  static ɵfac = function RouterModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterModule)(ɵɵinject(ROUTER_FORROOT_GUARD, 8));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _RouterModule,
-    imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent],
-    exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent]
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterModule, [{
-    type: NgModule,
-    args: [{
-      imports: ROUTER_DIRECTIVES,
-      exports: ROUTER_DIRECTIVES
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [ROUTER_FORROOT_GUARD]
-    }]
-  }], null);
-})();
-function provideRouterScroller() {
-  return {
-    provide: ROUTER_SCROLLER,
-    useFactory: () => {
-      const viewportScroller = inject(ViewportScroller);
-      const zone = inject(NgZone);
-      const config = inject(ROUTER_CONFIGURATION);
-      const transitions = inject(NavigationTransitions);
-      const urlSerializer = inject(UrlSerializer);
-      if (config.scrollOffset) {
-        viewportScroller.setOffset(config.scrollOffset);
-      }
-      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);
-    }
-  };
-}
-function provideHashLocationStrategy() {
-  return {
-    provide: LocationStrategy,
-    useClass: HashLocationStrategy
-  };
-}
-function providePathLocationStrategy() {
-  return {
-    provide: LocationStrategy,
-    useClass: PathLocationStrategy
-  };
-}
-function provideForRootGuard(router) {
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && router) {
-    throw new RuntimeError(4007, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector. Lazy loaded modules should use RouterModule.forChild() instead.`);
-  }
-  return "guarded";
-}
-function provideInitialNavigation(config) {
-  return [config.initialNavigation === "disabled" ? withDisabledInitialNavigation().ɵproviders : [], config.initialNavigation === "enabledBlocking" ? withEnabledBlockingInitialNavigation().ɵproviders : []];
-}
-var ROUTER_INITIALIZER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Router Initializer" : "");
-function provideRouterInitializer() {
-  return [
-    // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just
-    // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.
-    {
-      provide: ROUTER_INITIALIZER,
-      useFactory: getBootstrapListener
-    },
-    {
-      provide: APP_BOOTSTRAP_LISTENER,
-      multi: true,
-      useExisting: ROUTER_INITIALIZER
-    }
-  ];
-}
-function mapToCanMatch(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canMatch(...params));
-}
-function mapToCanActivate(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canActivate(...params));
-}
-function mapToCanActivateChild(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canActivateChild(...params));
-}
-function mapToCanDeactivate(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canDeactivate(...params));
-}
-function mapToResolve(provider) {
-  return (...params) => inject(provider).resolve(...params);
-}
-var VERSION = new Version("19.0.5");
-function getLoadedRoutes(route) {
-  return route._loadedRoutes;
-}
-publishExternalGlobalUtil("ɵgetLoadedRoutes", getLoadedRoutes);
-export {
-  ActivatedRoute,
-  ActivatedRouteSnapshot,
-  ActivationEnd,
-  ActivationStart,
-  BaseRouteReuseStrategy,
-  ChildActivationEnd,
-  ChildActivationStart,
-  ChildrenOutletContexts,
-  DefaultTitleStrategy,
-  DefaultUrlSerializer,
-  EventType,
-  GuardsCheckEnd,
-  GuardsCheckStart,
-  NavigationCancel,
-  NavigationCancellationCode,
-  NavigationEnd,
-  NavigationError,
-  NavigationSkipped,
-  NavigationSkippedCode,
-  NavigationStart,
-  NoPreloading,
-  OutletContext,
-  PRIMARY_OUTLET,
-  PreloadAllModules,
-  PreloadingStrategy,
-  ROUTER_CONFIGURATION,
-  ROUTER_INITIALIZER,
-  ROUTER_OUTLET_DATA,
-  ROUTES,
-  RedirectCommand,
-  ResolveEnd,
-  ResolveStart,
-  RouteConfigLoadEnd,
-  RouteConfigLoadStart,
-  RouteReuseStrategy,
-  Router,
-  RouterEvent,
-  RouterLink,
-  RouterLinkActive,
-  RouterLink as RouterLinkWithHref,
-  RouterModule,
-  RouterOutlet,
-  RouterPreloader,
-  RouterState,
-  RouterStateSnapshot,
-  RoutesRecognized,
-  Scroll,
-  TitleStrategy,
-  UrlHandlingStrategy,
-  UrlSegment,
-  UrlSegmentGroup,
-  UrlSerializer,
-  UrlTree,
-  VERSION,
-  convertToParamMap,
-  createUrlTreeFromSnapshot,
-  defaultUrlMatcher,
-  mapToCanActivate,
-  mapToCanActivateChild,
-  mapToCanDeactivate,
-  mapToCanMatch,
-  mapToResolve,
-  provideRouter,
-  provideRoutes,
-  withComponentInputBinding,
-  withDebugTracing,
-  withDisabledInitialNavigation,
-  withEnabledBlockingInitialNavigation,
-  withHashLocation,
-  withInMemoryScrolling,
-  withNavigationErrorHandler,
-  withPreloading,
-  withRouterConfig,
-  withViewTransitions,
-  ɵEmptyOutletComponent,
-  ROUTER_PROVIDERS as ɵROUTER_PROVIDERS,
-  afterNextNavigation as ɵafterNextNavigation,
-  loadChildren as ɵloadChildren
-};
-/*! Bundled license information:
-
-@angular/router/fesm2022/router.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-*/
-//# sourceMappingURL=@angular_router.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_router.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/@angular_router.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/router/fesm2022/router.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { ɵisPromise, ɵRuntimeError, Injectable, createEnvironmentInjector, ɵisNgModule, isStandalone, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, ɵisInjectable, runInInjectionContext, Component, Compiler, NgModuleFactory, NgZone, afterNextRender, EnvironmentInjector, ɵConsole, ɵPendingTasksInternal, ɵɵsanitizeUrlOrResourceUrl, booleanAttribute, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, InjectFlags, APP_INITIALIZER, SkipSelf, NgModule, Inject, Version, ɵpublishExternalGlobalUtil } from '@angular/core';\nimport { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, concat, defer, pipe, throwError, EMPTY, ConnectableObservable, Subject, Subscription } from 'rxjs';\nimport * as i3 from '@angular/common';\nimport { DOCUMENT, Location, ViewportScroller, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { map, switchMap, take, startWith, filter, mergeMap, first, concatMap, tap, catchError, scan, defaultIfEmpty, last as last$1, takeLast, mapTo, finalize, refCount, takeUntil, mergeAll } from 'rxjs/operators';\nimport * as i1 from '@angular/platform-browser';\n\n/**\n * The primary routing outlet.\n *\n * @publicApi\n */\nconst PRIMARY_OUTLET = 'primary';\n/**\n * A private symbol used to store the value of `Route.title` inside the `Route.data` if it is a\n * static string or `Route.resolve` if anything else. This allows us to reuse the existing route\n * data/resolvers to support the title feature without new instrumentation in the `Router` pipeline.\n */\nconst RouteTitleKey = /* @__PURE__ */Symbol('RouteTitle');\nclass ParamsAsMap {\n  params;\n  constructor(params) {\n    this.params = params || {};\n  }\n  has(name) {\n    return Object.prototype.hasOwnProperty.call(this.params, name);\n  }\n  get(name) {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v[0] : v;\n    }\n    return null;\n  }\n  getAll(name) {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v : [v];\n    }\n    return [];\n  }\n  get keys() {\n    return Object.keys(this.params);\n  }\n}\n/**\n * Converts a `Params` instance to a `ParamMap`.\n * @param params The instance to convert.\n * @returns The new map instance.\n *\n * @publicApi\n */\nfunction convertToParamMap(params) {\n  return new ParamsAsMap(params);\n}\n/**\n * Matches the route configuration (`route`) against the actual URL (`segments`).\n *\n * When no matcher is defined on a `Route`, this is the matcher used by the Router by default.\n *\n * @param segments The remaining unmatched segments in the current navigation\n * @param segmentGroup The current segment group being matched\n * @param route The `Route` to match against.\n *\n * @see {@link UrlMatchResult}\n * @see {@link Route}\n *\n * @returns The resulting match information or `null` if the `route` should not match.\n * @publicApi\n */\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n  const parts = route.path.split('/');\n  if (parts.length > segments.length) {\n    // The actual URL is shorter than the config, no match\n    return null;\n  }\n  if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {\n    // The config is longer than the actual URL but we are looking for a full match, return null\n    return null;\n  }\n  const posParams = {};\n  // Check each config part against the actual URL\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index];\n    const segment = segments[index];\n    const isParameter = part[0] === ':';\n    if (isParameter) {\n      posParams[part.substring(1)] = segment;\n    } else if (part !== segment.path) {\n      // The actual URL part does not match the config, no match\n      return null;\n    }\n  }\n  return {\n    consumed: segments.slice(0, parts.length),\n    posParams\n  };\n}\nfunction shallowEqualArrays(a, b) {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; ++i) {\n    if (!shallowEqual(a[i], b[i])) return false;\n  }\n  return true;\n}\nfunction shallowEqual(a, b) {\n  // While `undefined` should never be possible, it would sometimes be the case in IE 11\n  // and pre-chromium Edge. The check below accounts for this edge case.\n  const k1 = a ? getDataKeys(a) : undefined;\n  const k2 = b ? getDataKeys(b) : undefined;\n  if (!k1 || !k2 || k1.length != k2.length) {\n    return false;\n  }\n  let key;\n  for (let i = 0; i < k1.length; i++) {\n    key = k1[i];\n    if (!equalArraysOrString(a[key], b[key])) {\n      return false;\n    }\n  }\n  return true;\n}\n/**\n * Gets the keys of an object, including `symbol` keys.\n */\nfunction getDataKeys(obj) {\n  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\n/**\n * Test equality for arrays of strings or a string.\n */\nfunction equalArraysOrString(a, b) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    const aSorted = [...a].sort();\n    const bSorted = [...b].sort();\n    return aSorted.every((val, index) => bSorted[index] === val);\n  } else {\n    return a === b;\n  }\n}\n/**\n * Return the last element of an array.\n */\nfunction last(a) {\n  return a.length > 0 ? a[a.length - 1] : null;\n}\nfunction wrapIntoObservable(value) {\n  if (isObservable(value)) {\n    return value;\n  }\n  if (ɵisPromise(value)) {\n    // Use `Promise.resolve()` to wrap promise-like instances.\n    // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n    // change detection.\n    return from(Promise.resolve(value));\n  }\n  return of(value);\n}\nconst pathCompareMap = {\n  'exact': equalSegmentGroups,\n  'subset': containsSegmentGroup\n};\nconst paramCompareMap = {\n  'exact': equalParams,\n  'subset': containsParams,\n  'ignored': () => true\n};\nfunction containsTree(container, containee, options) {\n  return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === 'exact' && container.fragment !== containee.fragment);\n}\nfunction equalParams(container, containee) {\n  // TODO: This does not handle array params correctly.\n  return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee, matrixParams) {\n  if (!equalPath(container.segments, containee.segments)) return false;\n  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n    return false;\n  }\n  if (container.numberOfChildren !== containee.numberOfChildren) return false;\n  for (const c in containee.children) {\n    if (!container.children[c]) return false;\n    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;\n  }\n  return true;\n}\nfunction containsParams(container, containee) {\n  return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\nfunction containsSegmentGroup(container, containee, matrixParams) {\n  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {\n  if (container.segments.length > containeePaths.length) {\n    const current = container.segments.slice(0, containeePaths.length);\n    if (!equalPath(current, containeePaths)) return false;\n    if (containee.hasChildren()) return false;\n    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n    return true;\n  } else if (container.segments.length === containeePaths.length) {\n    if (!equalPath(container.segments, containeePaths)) return false;\n    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n    for (const c in containee.children) {\n      if (!container.children[c]) return false;\n      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n        return false;\n      }\n    }\n    return true;\n  } else {\n    const current = containeePaths.slice(0, container.segments.length);\n    const next = containeePaths.slice(container.segments.length);\n    if (!equalPath(container.segments, current)) return false;\n    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n    if (!container.children[PRIMARY_OUTLET]) return false;\n    return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);\n  }\n}\nfunction matrixParamsMatch(containerPaths, containeePaths, options) {\n  return containeePaths.every((containeeSegment, i) => {\n    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n  });\n}\n/**\n * @description\n *\n * Represents the parsed URL.\n *\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree =\n *       router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n *     const f = tree.fragment; // return 'fragment'\n *     const q = tree.queryParams; // returns {debug: 'true'}\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n *     g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n *     g.children['support'].segments; // return 1 segment 'help'\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass UrlTree {\n  root;\n  queryParams;\n  fragment;\n  /** @internal */\n  _queryParamMap;\n  constructor(/** The root segment group of the URL tree */\n  root = new UrlSegmentGroup([], {}), /** The query params of the URL */\n  queryParams = {}, /** The fragment of the URL */\n  fragment = null) {\n    this.root = root;\n    this.queryParams = queryParams;\n    this.fragment = fragment;\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (root.segments.length > 0) {\n        throw new ɵRuntimeError(4015 /* RuntimeErrorCode.INVALID_ROOT_URL_SEGMENT */, 'The root `UrlSegmentGroup` should not contain `segments`. ' + 'Instead, these segments belong in the `children` so they can be associated with a named outlet.');\n      }\n    }\n  }\n  get queryParamMap() {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return DEFAULT_SERIALIZER.serialize(this);\n  }\n}\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n * @publicApi\n */\nclass UrlSegmentGroup {\n  segments;\n  children;\n  /** The parent node in the url tree */\n  parent = null;\n  constructor(/** The URL segments of this group. See `UrlSegment` for more information */\n  segments, /** The list of children of this group */\n  children) {\n    this.segments = segments;\n    this.children = children;\n    Object.values(children).forEach(v => v.parent = this);\n  }\n  /** Whether the segment has child segments */\n  hasChildren() {\n    return this.numberOfChildren > 0;\n  }\n  /** Number of child segments */\n  get numberOfChildren() {\n    return Object.keys(this.children).length;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return serializePaths(this);\n  }\n}\n/**\n * @description\n *\n * Represents a single URL segment.\n *\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree = router.parseUrl('/team;id=33');\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments;\n *     s[0].path; // returns 'team'\n *     s[0].parameters; // returns {id: 33}\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass UrlSegment {\n  path;\n  parameters;\n  /** @internal */\n  _parameterMap;\n  constructor(/** The path part of a URL segment */\n  path, /** The matrix parameters associated with a segment */\n  parameters) {\n    this.path = path;\n    this.parameters = parameters;\n  }\n  get parameterMap() {\n    this._parameterMap ??= convertToParamMap(this.parameters);\n    return this._parameterMap;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return serializePath(this);\n  }\n}\nfunction equalSegments(as, bs) {\n  return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\nfunction equalPath(as, bs) {\n  if (as.length !== bs.length) return false;\n  return as.every((a, i) => a.path === bs[i].path);\n}\nfunction mapChildrenIntoArray(segment, fn) {\n  let res = [];\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet === PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet !== PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  return res;\n}\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n * @publicApi\n */\nclass UrlSerializer {\n  static ɵfac = function UrlSerializer_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UrlSerializer)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: UrlSerializer,\n    factory: () => (() => new DefaultUrlSerializer())(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UrlSerializer, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => new DefaultUrlSerializer()\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\n *\n * Example URLs:\n *\n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n *\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n *\n * @publicApi\n */\nclass DefaultUrlSerializer {\n  /** Parses a url into a `UrlTree` */\n  parse(url) {\n    const p = new UrlParser(url);\n    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n  }\n  /** Converts a `UrlTree` into a url */\n  serialize(tree) {\n    const segment = `/${serializeSegment(tree.root, true)}`;\n    const query = serializeQueryParams(tree.queryParams);\n    const fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n    return `${segment}${query}${fragment}`;\n  }\n}\nconst DEFAULT_SERIALIZER = new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n  return segment.segments.map(p => serializePath(p)).join('/');\n}\nfunction serializeSegment(segment, root) {\n  if (!segment.hasChildren()) {\n    return serializePaths(segment);\n  }\n  if (root) {\n    const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : '';\n    const children = [];\n    Object.entries(segment.children).forEach(([k, v]) => {\n      if (k !== PRIMARY_OUTLET) {\n        children.push(`${k}:${serializeSegment(v, false)}`);\n      }\n    });\n    return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n  } else {\n    const children = mapChildrenIntoArray(segment, (v, k) => {\n      if (k === PRIMARY_OUTLET) {\n        return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n      }\n      return [`${k}:${serializeSegment(v, false)}`];\n    });\n    // use no parenthesis if the only child is a primary outlet route\n    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n      return `${serializePaths(segment)}/${children[0]}`;\n    }\n    return `${serializePaths(segment)}/(${children.join('//')})`;\n  }\n}\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s) {\n  return encodeURIComponent(s).replace(/%40/g, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',');\n}\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriQuery(s) {\n  return encodeUriString(s).replace(/%3B/gi, ';');\n}\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriFragment(s) {\n  return encodeURI(s);\n}\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriSegment(s) {\n  return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n  return decodeURIComponent(s);\n}\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nfunction decodeQuery(s) {\n  return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\nfunction serializeMatrixParams(params) {\n  return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join('');\n}\nfunction serializeQueryParams(params) {\n  const strParams = Object.entries(params).map(([name, value]) => {\n    return Array.isArray(value) ? value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n  }).filter(s => s);\n  return strParams.length ? `?${strParams.join('&')}` : '';\n}\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str) {\n  const match = str.match(SEGMENT_RE);\n  return match ? match[0] : '';\n}\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str) {\n  const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n  return match ? match[0] : '';\n}\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str) {\n  const match = str.match(QUERY_PARAM_RE);\n  return match ? match[0] : '';\n}\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str) {\n  const match = str.match(QUERY_PARAM_VALUE_RE);\n  return match ? match[0] : '';\n}\nclass UrlParser {\n  url;\n  remaining;\n  constructor(url) {\n    this.url = url;\n    this.remaining = url;\n  }\n  parseRootSegment() {\n    this.consumeOptional('/');\n    if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n      return new UrlSegmentGroup([], {});\n    }\n    // The root segment group never has segments\n    return new UrlSegmentGroup([], this.parseChildren());\n  }\n  parseQueryParams() {\n    const params = {};\n    if (this.consumeOptional('?')) {\n      do {\n        this.parseQueryParam(params);\n      } while (this.consumeOptional('&'));\n    }\n    return params;\n  }\n  parseFragment() {\n    return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n  }\n  parseChildren() {\n    if (this.remaining === '') {\n      return {};\n    }\n    this.consumeOptional('/');\n    const segments = [];\n    if (!this.peekStartsWith('(')) {\n      segments.push(this.parseSegment());\n    }\n    while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n      this.capture('/');\n      segments.push(this.parseSegment());\n    }\n    let children = {};\n    if (this.peekStartsWith('/(')) {\n      this.capture('/');\n      children = this.parseParens(true);\n    }\n    let res = {};\n    if (this.peekStartsWith('(')) {\n      res = this.parseParens(false);\n    }\n    if (segments.length > 0 || Object.keys(children).length > 0) {\n      res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n    }\n    return res;\n  }\n  // parse a segment with its matrix parameters\n  // ie `name;k1=v1;k2`\n  parseSegment() {\n    const path = matchSegments(this.remaining);\n    if (path === '' && this.peekStartsWith(';')) {\n      throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);\n    }\n    this.capture(path);\n    return new UrlSegment(decode(path), this.parseMatrixParams());\n  }\n  parseMatrixParams() {\n    const params = {};\n    while (this.consumeOptional(';')) {\n      this.parseParam(params);\n    }\n    return params;\n  }\n  parseParam(params) {\n    const key = matchMatrixKeySegments(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchSegments(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n    params[decode(key)] = decode(value);\n  }\n  // Parse a single query parameter `name[=value]`\n  parseQueryParam(params) {\n    const key = matchQueryParams(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchUrlQueryParamValue(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n    const decodedKey = decodeQuery(key);\n    const decodedVal = decodeQuery(value);\n    if (params.hasOwnProperty(decodedKey)) {\n      // Append to existing values\n      let currentVal = params[decodedKey];\n      if (!Array.isArray(currentVal)) {\n        currentVal = [currentVal];\n        params[decodedKey] = currentVal;\n      }\n      currentVal.push(decodedVal);\n    } else {\n      // Create a new value\n      params[decodedKey] = decodedVal;\n    }\n  }\n  // parse `(a/b//outlet_name:c/d)`\n  parseParens(allowPrimary) {\n    const segments = {};\n    this.capture('(');\n    while (!this.consumeOptional(')') && this.remaining.length > 0) {\n      const path = matchSegments(this.remaining);\n      const next = this.remaining[path.length];\n      // if is is not one of these characters, then the segment was unescaped\n      // or the group was not closed\n      if (next !== '/' && next !== ')' && next !== ';') {\n        throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`);\n      }\n      let outletName = undefined;\n      if (path.indexOf(':') > -1) {\n        outletName = path.slice(0, path.indexOf(':'));\n        this.capture(outletName);\n        this.capture(':');\n      } else if (allowPrimary) {\n        outletName = PRIMARY_OUTLET;\n      }\n      const children = this.parseChildren();\n      segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);\n      this.consumeOptional('//');\n    }\n    return segments;\n  }\n  peekStartsWith(str) {\n    return this.remaining.startsWith(str);\n  }\n  // Consumes the prefix when it is present and returns whether it has been consumed\n  consumeOptional(str) {\n    if (this.peekStartsWith(str)) {\n      this.remaining = this.remaining.substring(str.length);\n      return true;\n    }\n    return false;\n  }\n  capture(str) {\n    if (!this.consumeOptional(str)) {\n      throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`);\n    }\n  }\n}\nfunction createRoot(rootCandidate) {\n  return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {\n    [PRIMARY_OUTLET]: rootCandidate\n  }) : rootCandidate;\n}\n/**\n * Recursively\n * - merges primary segment children into their parents\n * - drops empty children (those which have no segments and no children themselves). This latter\n * prevents serializing a group into something like `/a(aux:)`, where `aux` is an empty child\n * segment.\n * - merges named outlets without a primary segment sibling into the children. This prevents\n * serializing a URL like `//(a:a)(b:b) instead of `/(a:a//b:b)` when the aux b route lives on the\n * root but the `a` route lives under an empty path primary route.\n */\nfunction squashSegmentGroup(segmentGroup) {\n  const newChildren = {};\n  for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {\n    const childCandidate = squashSegmentGroup(child);\n    // moves named children in an empty path primary child into this group\n    if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {\n      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n        newChildren[grandChildOutlet] = grandChild;\n      }\n    } // don't add empty children\n    else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n      newChildren[childOutlet] = childCandidate;\n    }\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n  return mergeTrivialChildren(s);\n}\n/**\n * When possible, merges the primary outlet child into the parent `UrlSegmentGroup`.\n *\n * When a segment group has only one child which is a primary outlet, merges that child into the\n * parent. That is, the child segment group's segments are merged into the `s` and the child's\n * children become the children of `s`. Think of this like a 'squash', merging the child segment\n * group into the parent.\n */\nfunction mergeTrivialChildren(s) {\n  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n    const c = s.children[PRIMARY_OUTLET];\n    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n  }\n  return s;\n}\nfunction isUrlTree(v) {\n  return v instanceof UrlTree;\n}\n\n/**\n * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.\n *\n * @publicApi\n *\n *\n * @param relativeTo The `ActivatedRouteSnapshot` to apply the commands to\n * @param commands An array of URL fragments with which to construct the new URL tree.\n * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n * segments, followed by the parameters for each segment.\n * The fragments are applied to the one provided in the `relativeTo` parameter.\n * @param queryParams The query parameters for the `UrlTree`. `null` if the `UrlTree` does not have\n *     any query parameters.\n * @param fragment The fragment for the `UrlTree`. `null` if the `UrlTree` does not have a fragment.\n *\n * @usageNotes\n *\n * ```ts\n * // create /team/33/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * createUrlTreeFromSnapshot(snapshot, ['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it,\n * // you can do the following:\n * createUrlTreeFromSnapshot(snapshot, [{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right:\n * 'chat'}}], null, null);\n *\n * // remove the right secondary node\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // For the examples below, assume the current URL is for the `/team/33/user/11` and the\n * `ActivatedRouteSnapshot` points to `user/11`:\n *\n * // navigate to /team/33/user/11/details\n * createUrlTreeFromSnapshot(snapshot, ['details']);\n *\n * // navigate to /team/33/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../22']);\n *\n * // navigate to /team/44/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../../team/44/user/22']);\n * ```\n */\nfunction createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null) {\n  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);\n}\nfunction createSegmentGroupFromRoute(route) {\n  let targetGroup;\n  function createSegmentGroupFromRouteRecursive(currentRoute) {\n    const childOutlets = {};\n    for (const childSnapshot of currentRoute.children) {\n      const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n      childOutlets[childSnapshot.outlet] = root;\n    }\n    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n    if (currentRoute === route) {\n      targetGroup = segmentGroup;\n    }\n    return segmentGroup;\n  }\n  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n  const rootSegmentGroup = createRoot(rootCandidate);\n  return targetGroup ?? rootSegmentGroup;\n}\nfunction createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment) {\n  let root = relativeTo;\n  while (root.parent) {\n    root = root.parent;\n  }\n  // There are no commands so the `UrlTree` goes to the same path as the one created from the\n  // `UrlSegmentGroup`. All we need to do is update the `queryParams` and `fragment` without\n  // applying any other logic.\n  if (commands.length === 0) {\n    return tree(root, root, root, queryParams, fragment);\n  }\n  const nav = computeNavigation(commands);\n  if (nav.toRoot()) {\n    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);\n  }\n  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n  const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);\n}\nfunction isMatrixParams(command) {\n  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n/**\n * Determines if a given command has an `outlets` map. When we encounter a command\n * with an outlets k/v map, we need to apply each outlet individually to the existing segment.\n */\nfunction isCommandWithOutlets(command) {\n  return typeof command === 'object' && command != null && command.outlets;\n}\nfunction tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment) {\n  let qp = {};\n  if (queryParams) {\n    Object.entries(queryParams).forEach(([name, value]) => {\n      qp[name] = Array.isArray(value) ? value.map(v => `${v}`) : `${value}`;\n    });\n  }\n  let rootCandidate;\n  if (oldRoot === oldSegmentGroup) {\n    rootCandidate = newSegmentGroup;\n  } else {\n    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n  }\n  const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n  return new UrlTree(newRoot, qp, fragment);\n}\n/**\n * Replaces the `oldSegment` which is located in some child of the `current` with the `newSegment`.\n * This also has the effect of creating new `UrlSegmentGroup` copies to update references. This\n * shouldn't be necessary but the fallback logic for an invalid ActivatedRoute in the creation uses\n * the Router's current url tree. If we don't create new segment groups, we end up modifying that\n * value.\n */\nfunction replaceSegment(current, oldSegment, newSegment) {\n  const children = {};\n  Object.entries(current.children).forEach(([outletName, c]) => {\n    if (c === oldSegment) {\n      children[outletName] = newSegment;\n    } else {\n      children[outletName] = replaceSegment(c, oldSegment, newSegment);\n    }\n  });\n  return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n  isAbsolute;\n  numberOfDoubleDots;\n  commands;\n  constructor(isAbsolute, numberOfDoubleDots, commands) {\n    this.isAbsolute = isAbsolute;\n    this.numberOfDoubleDots = numberOfDoubleDots;\n    this.commands = commands;\n    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n      throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Root segment cannot have matrix parameters');\n    }\n    const cmdWithOutlet = commands.find(isCommandWithOutlets);\n    if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n      throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, (typeof ngDevMode === 'undefined' || ngDevMode) && '{outlets:{}} has to be the last command');\n    }\n  }\n  toRoot() {\n    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n  }\n}\n/** Transforms commands to a normalized `Navigation` */\nfunction computeNavigation(commands) {\n  if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {\n    return new Navigation(true, 0, commands);\n  }\n  let numberOfDoubleDots = 0;\n  let isAbsolute = false;\n  const res = commands.reduce((res, cmd, cmdIdx) => {\n    if (typeof cmd === 'object' && cmd != null) {\n      if (cmd.outlets) {\n        const outlets = {};\n        Object.entries(cmd.outlets).forEach(([name, commands]) => {\n          outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n        });\n        return [...res, {\n          outlets\n        }];\n      }\n      if (cmd.segmentPath) {\n        return [...res, cmd.segmentPath];\n      }\n    }\n    if (!(typeof cmd === 'string')) {\n      return [...res, cmd];\n    }\n    if (cmdIdx === 0) {\n      cmd.split('/').forEach((urlPart, partIndex) => {\n        if (partIndex == 0 && urlPart === '.') {\n          // skip './a'\n        } else if (partIndex == 0 && urlPart === '') {\n          //  '/a'\n          isAbsolute = true;\n        } else if (urlPart === '..') {\n          //  '../a'\n          numberOfDoubleDots++;\n        } else if (urlPart != '') {\n          res.push(urlPart);\n        }\n      });\n      return res;\n    }\n    return [...res, cmd];\n  }, []);\n  return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nclass Position {\n  segmentGroup;\n  processChildren;\n  index;\n  constructor(segmentGroup, processChildren, index) {\n    this.segmentGroup = segmentGroup;\n    this.processChildren = processChildren;\n    this.index = index;\n  }\n}\nfunction findStartingPositionForTargetGroup(nav, root, target) {\n  if (nav.isAbsolute) {\n    return new Position(root, true, 0);\n  }\n  if (!target) {\n    // `NaN` is used only to maintain backwards compatibility with incorrectly mocked\n    // `ActivatedRouteSnapshot` in tests. In prior versions of this code, the position here was\n    // determined based on an internal property that was rarely mocked, resulting in `NaN`. In\n    // reality, this code path should _never_ be touched since `target` is not allowed to be falsey.\n    return new Position(root, false, NaN);\n  }\n  if (target.parent === null) {\n    return new Position(target, true, 0);\n  }\n  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n  const index = target.segments.length - 1 + modifier;\n  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n  let g = group;\n  let ci = index;\n  let dd = numberOfDoubleDots;\n  while (dd > ci) {\n    dd -= ci;\n    g = g.parent;\n    if (!g) {\n      throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, (typeof ngDevMode === 'undefined' || ngDevMode) && \"Invalid number of '../'\");\n    }\n    ci = g.segments.length;\n  }\n  return new Position(g, false, ci - dd);\n}\nfunction getOutlets(commands) {\n  if (isCommandWithOutlets(commands[0])) {\n    return commands[0].outlets;\n  }\n  return {\n    [PRIMARY_OUTLET]: commands\n  };\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n  segmentGroup ??= new UrlSegmentGroup([], {});\n  if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n    return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n  }\n  const m = prefixedWith(segmentGroup, startIndex, commands);\n  const slicedCommands = commands.slice(m.commandIndex);\n  if (m.match && m.pathIndex < segmentGroup.segments.length) {\n    const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n    g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n    return updateSegmentGroupChildren(g, 0, slicedCommands);\n  } else if (m.match && slicedCommands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else if (m.match && !segmentGroup.hasChildren()) {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  } else if (m.match) {\n    return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n  } else {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n  if (commands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else {\n    const outlets = getOutlets(commands);\n    const children = {};\n    // If the set of commands applies to anything other than the primary outlet and the child\n    // segment is an empty path primary segment on its own, we want to apply the commands to the\n    // empty child path rather than here. The outcome is that the empty primary child is effectively\n    // removed from the final output UrlTree. Imagine the following config:\n    //\n    // {path: '', children: [{path: '**', outlet: 'popup'}]}.\n    //\n    // Navigation to /(popup:a) will activate the child outlet correctly Given a follow-up\n    // navigation with commands\n    // ['/', {outlets: {'popup': 'b'}}], we _would not_ want to apply the outlet commands to the\n    // root segment because that would result in\n    // //(popup:a)(popup:b) since the outlet command got applied one level above where it appears in\n    // the `ActivatedRoute` rather than updating the existing one.\n    //\n    // Because empty paths do not appear in the URL segments and the fact that the segments used in\n    // the output `UrlTree` are squashed to eliminate these empty paths where possible\n    // https://github.com/angular/angular/blob/13f10de40e25c6900ca55bd83b36bd533dacfa9e/packages/router/src/url_tree.ts#L755\n    // it can be hard to determine what is the right thing to do when applying commands to a\n    // `UrlSegmentGroup` that is created from an \"unsquashed\"/expanded `ActivatedRoute` tree.\n    // This code effectively \"squashes\" empty path primary routes when they have no siblings on\n    // the same level of the tree.\n    if (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n      const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\n      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n    }\n    Object.entries(outlets).forEach(([outlet, commands]) => {\n      if (typeof commands === 'string') {\n        commands = [commands];\n      }\n      if (commands !== null) {\n        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n      }\n    });\n    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n      if (outlets[childOutlet] === undefined) {\n        children[childOutlet] = child;\n      }\n    });\n    return new UrlSegmentGroup(segmentGroup.segments, children);\n  }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n  let currentCommandIndex = 0;\n  let currentPathIndex = startIndex;\n  const noMatch = {\n    match: false,\n    pathIndex: 0,\n    commandIndex: 0\n  };\n  while (currentPathIndex < segmentGroup.segments.length) {\n    if (currentCommandIndex >= commands.length) return noMatch;\n    const path = segmentGroup.segments[currentPathIndex];\n    const command = commands[currentCommandIndex];\n    // Do not try to consume command as part of the prefixing if it has outlets because it can\n    // contain outlets other than the one being processed. Consuming the outlets command would\n    // result in other outlets being ignored.\n    if (isCommandWithOutlets(command)) {\n      break;\n    }\n    const curr = `${command}`;\n    const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n    if (currentPathIndex > 0 && curr === undefined) break;\n    if (curr && next && typeof next === 'object' && next.outlets === undefined) {\n      if (!compare(curr, next, path)) return noMatch;\n      currentCommandIndex += 2;\n    } else {\n      if (!compare(curr, {}, path)) return noMatch;\n      currentCommandIndex++;\n    }\n    currentPathIndex++;\n  }\n  return {\n    match: true,\n    pathIndex: currentPathIndex,\n    commandIndex: currentCommandIndex\n  };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n  const paths = segmentGroup.segments.slice(0, startIndex);\n  let i = 0;\n  while (i < commands.length) {\n    const command = commands[i];\n    if (isCommandWithOutlets(command)) {\n      const children = createNewSegmentChildren(command.outlets);\n      return new UrlSegmentGroup(paths, children);\n    }\n    // if we start with an object literal, we need to reuse the path part from the segment\n    if (i === 0 && isMatrixParams(commands[0])) {\n      const p = segmentGroup.segments[startIndex];\n      paths.push(new UrlSegment(p.path, stringify(commands[0])));\n      i++;\n      continue;\n    }\n    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n    const next = i < commands.length - 1 ? commands[i + 1] : null;\n    if (curr && next && isMatrixParams(next)) {\n      paths.push(new UrlSegment(curr, stringify(next)));\n      i += 2;\n    } else {\n      paths.push(new UrlSegment(curr, {}));\n      i++;\n    }\n  }\n  return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n  const children = {};\n  Object.entries(outlets).forEach(([outlet, commands]) => {\n    if (typeof commands === 'string') {\n      commands = [commands];\n    }\n    if (commands !== null) {\n      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n    }\n  });\n  return children;\n}\nfunction stringify(params) {\n  const res = {};\n  Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);\n  return res;\n}\nfunction compare(path, params, segment) {\n  return path == segment.path && shallowEqual(params, segment.parameters);\n}\nconst IMPERATIVE_NAVIGATION = 'imperative';\n/**\n * Identifies the type of a router event.\n *\n * @publicApi\n */\nvar EventType;\n(function (EventType) {\n  EventType[EventType[\"NavigationStart\"] = 0] = \"NavigationStart\";\n  EventType[EventType[\"NavigationEnd\"] = 1] = \"NavigationEnd\";\n  EventType[EventType[\"NavigationCancel\"] = 2] = \"NavigationCancel\";\n  EventType[EventType[\"NavigationError\"] = 3] = \"NavigationError\";\n  EventType[EventType[\"RoutesRecognized\"] = 4] = \"RoutesRecognized\";\n  EventType[EventType[\"ResolveStart\"] = 5] = \"ResolveStart\";\n  EventType[EventType[\"ResolveEnd\"] = 6] = \"ResolveEnd\";\n  EventType[EventType[\"GuardsCheckStart\"] = 7] = \"GuardsCheckStart\";\n  EventType[EventType[\"GuardsCheckEnd\"] = 8] = \"GuardsCheckEnd\";\n  EventType[EventType[\"RouteConfigLoadStart\"] = 9] = \"RouteConfigLoadStart\";\n  EventType[EventType[\"RouteConfigLoadEnd\"] = 10] = \"RouteConfigLoadEnd\";\n  EventType[EventType[\"ChildActivationStart\"] = 11] = \"ChildActivationStart\";\n  EventType[EventType[\"ChildActivationEnd\"] = 12] = \"ChildActivationEnd\";\n  EventType[EventType[\"ActivationStart\"] = 13] = \"ActivationStart\";\n  EventType[EventType[\"ActivationEnd\"] = 14] = \"ActivationEnd\";\n  EventType[EventType[\"Scroll\"] = 15] = \"Scroll\";\n  EventType[EventType[\"NavigationSkipped\"] = 16] = \"NavigationSkipped\";\n})(EventType || (EventType = {}));\n/**\n * Base for events the router goes through, as opposed to events tied to a specific\n * route. Fired one time for any given navigation.\n *\n * The following code shows how a class subscribes to router events.\n *\n * ```ts\n * import {Event, RouterEvent, Router} from '@angular/router';\n *\n * class MyService {\n *   constructor(public router: Router) {\n *     router.events.pipe(\n *        filter((e: Event | RouterEvent): e is RouterEvent => e instanceof RouterEvent)\n *     ).subscribe((e: RouterEvent) => {\n *       // Do something\n *     });\n *   }\n * }\n * ```\n *\n * @see {@link Event}\n * @see [Router events summary](guide/routing/router-reference#router-events)\n * @publicApi\n */\nclass RouterEvent {\n  id;\n  url;\n  constructor(/** A unique ID that the router assigns to every router navigation. */\n  id, /** The URL that is the destination for this navigation. */\n  url) {\n    this.id = id;\n    this.url = url;\n  }\n}\n/**\n * An event triggered when a navigation starts.\n *\n * @publicApi\n */\nclass NavigationStart extends RouterEvent {\n  type = EventType.NavigationStart;\n  /**\n   * Identifies the call or event that triggered the navigation.\n   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.\n   *\n   * @see {@link NavigationEnd}\n   * @see {@link NavigationCancel}\n   * @see {@link NavigationError}\n   */\n  navigationTrigger;\n  /**\n   * The navigation state that was previously supplied to the `pushState` call,\n   * when the navigation is triggered by a `popstate` event. Otherwise null.\n   *\n   * The state object is defined by `NavigationExtras`, and contains any\n   * developer-defined state value, as well as a unique ID that\n   * the router assigns to every router transition/navigation.\n   *\n   * From the perspective of the router, the router never \"goes back\".\n   * When the user clicks on the back button in the browser,\n   * a new navigation ID is created.\n   *\n   * Use the ID in this previous-state object to differentiate between a newly created\n   * state and one returned to by a `popstate` event, so that you can restore some\n   * remembered state, such as scroll position.\n   *\n   */\n  restoredState;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  navigationTrigger = 'imperative', /** @docsNotRequired */\n  restoredState = null) {\n    super(id, url);\n    this.navigationTrigger = navigationTrigger;\n    this.restoredState = restoredState;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n/**\n * An event triggered when a navigation ends successfully.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationCancel}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nclass NavigationEnd extends RouterEvent {\n  urlAfterRedirects;\n  type = EventType.NavigationEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n  }\n}\n/**\n * A code for the `NavigationCancel` event of the `Router` to indicate the\n * reason a navigation failed.\n *\n * @publicApi\n */\nvar NavigationCancellationCode;\n(function (NavigationCancellationCode) {\n  /**\n   * A navigation failed because a guard returned a `UrlTree` to redirect.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"Redirect\"] = 0] = \"Redirect\";\n  /**\n   * A navigation failed because a more recent navigation started.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"SupersededByNewNavigation\"] = 1] = \"SupersededByNewNavigation\";\n  /**\n   * A navigation failed because one of the resolvers completed without emitting a value.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"NoDataFromResolver\"] = 2] = \"NoDataFromResolver\";\n  /**\n   * A navigation failed because a guard returned `false`.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"GuardRejected\"] = 3] = \"GuardRejected\";\n})(NavigationCancellationCode || (NavigationCancellationCode = {}));\n/**\n * A code for the `NavigationSkipped` event of the `Router` to indicate the\n * reason a navigation was skipped.\n *\n * @publicApi\n */\nvar NavigationSkippedCode;\n(function (NavigationSkippedCode) {\n  /**\n   * A navigation was skipped because the navigation URL was the same as the current Router URL.\n   */\n  NavigationSkippedCode[NavigationSkippedCode[\"IgnoredSameUrlNavigation\"] = 0] = \"IgnoredSameUrlNavigation\";\n  /**\n   * A navigation was skipped because the configured `UrlHandlingStrategy` return `false` for both\n   * the current Router URL and the target of the navigation.\n   *\n   * @see {@link UrlHandlingStrategy}\n   */\n  NavigationSkippedCode[NavigationSkippedCode[\"IgnoredByUrlHandlingStrategy\"] = 1] = \"IgnoredByUrlHandlingStrategy\";\n})(NavigationSkippedCode || (NavigationSkippedCode = {}));\n/**\n * An event triggered when a navigation is canceled, directly or indirectly.\n * This can happen for several reasons including when a route guard\n * returns `false` or initiates a redirect by returning a `UrlTree`.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nclass NavigationCancel extends RouterEvent {\n  reason;\n  code;\n  type = EventType.NavigationCancel;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url,\n  /**\n   * A description of why the navigation was cancelled. For debug purposes only. Use `code`\n   * instead for a stable cancellation reason that can be used in production.\n   */\n  reason,\n  /**\n   * A code to indicate why the navigation was canceled. This cancellation code is stable for\n   * the reason and can be relied on whereas the `reason` string could change and should not be\n   * used in production.\n   */\n  code) {\n    super(id, url);\n    this.reason = reason;\n    this.code = code;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n/**\n * An event triggered when a navigation is skipped.\n * This can happen for a couple reasons including onSameUrlHandling\n * is set to `ignore` and the navigation URL is not different than the\n * current state.\n *\n * @publicApi\n */\nclass NavigationSkipped extends RouterEvent {\n  reason;\n  code;\n  type = EventType.NavigationSkipped;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url,\n  /**\n   * A description of why the navigation was skipped. For debug purposes only. Use `code`\n   * instead for a stable skipped reason that can be used in production.\n   */\n  reason,\n  /**\n   * A code to indicate why the navigation was skipped. This code is stable for\n   * the reason and can be relied on whereas the `reason` string could change and should not be\n   * used in production.\n   */\n  code) {\n    super(id, url);\n    this.reason = reason;\n    this.code = code;\n  }\n}\n/**\n * An event triggered when a navigation fails due to an unexpected error.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationCancel}\n *\n * @publicApi\n */\nclass NavigationError extends RouterEvent {\n  error;\n  target;\n  type = EventType.NavigationError;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  error,\n  /**\n   * The target of the navigation when the error occurred.\n   *\n   * Note that this can be `undefined` because an error could have occurred before the\n   * `RouterStateSnapshot` was created for the navigation.\n   */\n  target) {\n    super(id, url);\n    this.error = error;\n    this.target = target;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n  }\n}\n/**\n * An event triggered when routes are recognized.\n *\n * @publicApi\n */\nclass RoutesRecognized extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.RoutesRecognized;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the start of the Guard phase of routing.\n *\n * @see {@link GuardsCheckEnd}\n *\n * @publicApi\n */\nclass GuardsCheckStart extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.GuardsCheckStart;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the end of the Guard phase of routing.\n *\n * @see {@link GuardsCheckStart}\n *\n * @publicApi\n */\nclass GuardsCheckEnd extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  shouldActivate;\n  type = EventType.GuardsCheckEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state, /** @docsNotRequired */\n  shouldActivate) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n    this.shouldActivate = shouldActivate;\n  }\n  toString() {\n    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n  }\n}\n/**\n * An event triggered at the start of the Resolve phase of routing.\n *\n * Runs in the \"resolve\" phase whether or not there is anything to resolve.\n * In future, may change to only run when there are things to be resolved.\n *\n * @see {@link ResolveEnd}\n *\n * @publicApi\n */\nclass ResolveStart extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.ResolveStart;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the end of the Resolve phase of routing.\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ResolveEnd extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.ResolveEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered before lazy loading a route configuration.\n *\n * @see {@link RouteConfigLoadEnd}\n *\n * @publicApi\n */\nclass RouteConfigLoadStart {\n  route;\n  type = EventType.RouteConfigLoadStart;\n  constructor(/** @docsNotRequired */\n  route) {\n    this.route = route;\n  }\n  toString() {\n    return `RouteConfigLoadStart(path: ${this.route.path})`;\n  }\n}\n/**\n * An event triggered when a route has been lazy loaded.\n *\n * @see {@link RouteConfigLoadStart}\n *\n * @publicApi\n */\nclass RouteConfigLoadEnd {\n  route;\n  type = EventType.RouteConfigLoadEnd;\n  constructor(/** @docsNotRequired */\n  route) {\n    this.route = route;\n  }\n  toString() {\n    return `RouteConfigLoadEnd(path: ${this.route.path})`;\n  }\n}\n/**\n * An event triggered at the start of the child-activation\n * part of the Resolve phase of routing.\n * @see {@link ChildActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ChildActivationStart {\n  snapshot;\n  type = EventType.ChildActivationStart;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationStart(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the end of the child-activation part\n * of the Resolve phase of routing.\n * @see {@link ChildActivationStart}\n * @see {@link ResolveStart}\n * @publicApi\n */\nclass ChildActivationEnd {\n  snapshot;\n  type = EventType.ChildActivationEnd;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationEnd(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the start of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ActivationStart {\n  snapshot;\n  type = EventType.ActivationStart;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationStart(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the end of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationStart}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ActivationEnd {\n  snapshot;\n  type = EventType.ActivationEnd;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationEnd(path: '${path}')`;\n  }\n}\n/**\n * An event triggered by scrolling.\n *\n * @publicApi\n */\nclass Scroll {\n  routerEvent;\n  position;\n  anchor;\n  type = EventType.Scroll;\n  constructor(/** @docsNotRequired */\n  routerEvent, /** @docsNotRequired */\n  position, /** @docsNotRequired */\n  anchor) {\n    this.routerEvent = routerEvent;\n    this.position = position;\n    this.anchor = anchor;\n  }\n  toString() {\n    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n  }\n}\nclass BeforeActivateRoutes {}\nclass RedirectRequest {\n  url;\n  navigationBehaviorOptions;\n  constructor(url, navigationBehaviorOptions) {\n    this.url = url;\n    this.navigationBehaviorOptions = navigationBehaviorOptions;\n  }\n}\nfunction stringifyEvent(routerEvent) {\n  switch (routerEvent.type) {\n    case EventType.ActivationEnd:\n      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ActivationStart:\n      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationEnd:\n      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationStart:\n      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.GuardsCheckEnd:\n      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n    case EventType.GuardsCheckStart:\n      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.NavigationCancel:\n      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationSkipped:\n      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationEnd:\n      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;\n    case EventType.NavigationError:\n      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;\n    case EventType.NavigationStart:\n      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.ResolveEnd:\n      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.ResolveStart:\n      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.RouteConfigLoadEnd:\n      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n    case EventType.RouteConfigLoadStart:\n      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n    case EventType.RoutesRecognized:\n      return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.Scroll:\n      const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;\n      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n  }\n}\n\n/**\n * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist\n * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the\n * `currentInjector`.\n *\n * @param route The route that might have providers\n * @param currentInjector The parent injector of the `Route`\n */\nfunction getOrCreateRouteInjectorIfNeeded(route, currentInjector) {\n  if (route.providers && !route._injector) {\n    route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\n  }\n  return route._injector ?? currentInjector;\n}\nfunction getLoadedRoutes$1(route) {\n  return route._loadedRoutes;\n}\nfunction getLoadedInjector(route) {\n  return route._loadedInjector;\n}\nfunction getLoadedComponent(route) {\n  return route._loadedComponent;\n}\nfunction getProvidersInjector(route) {\n  return route._injector;\n}\nfunction validateConfig(config, parentPath = '', requireStandaloneComponents = false) {\n  // forEach doesn't iterate undefined values\n  for (let i = 0; i < config.length; i++) {\n    const route = config[i];\n    const fullPath = getFullPath(parentPath, route);\n    validateNode(route, fullPath, requireStandaloneComponents);\n  }\n}\nfunction assertStandalone(fullPath, component) {\n  if (component && ɵisNgModule(component)) {\n    throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);\n  } else if (component && !isStandalone(component)) {\n    throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);\n  }\n}\nfunction validateNode(route, fullPath, requireStandaloneComponents) {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (!route) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `\n      Invalid configuration of route '${fullPath}': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    `);\n    }\n    if (Array.isArray(route)) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': Array cannot be specified`);\n    }\n    if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n    }\n    if (route.redirectTo && route.children) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n    }\n    if (route.redirectTo && route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n    }\n    if (route.children && route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n    }\n    if (route.redirectTo && (route.component || route.loadComponent)) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);\n    }\n    if (route.component && route.loadComponent) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);\n    }\n    if (route.redirectTo && route.canActivate) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` + `so canActivate will never be executed.`);\n    }\n    if (route.path && route.matcher) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n    }\n    if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\n    }\n    if (route.path === void 0 && route.matcher === void 0) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);\n    }\n    if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);\n    }\n    if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n      const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n    }\n    if (requireStandaloneComponents) {\n      assertStandalone(fullPath, route.component);\n    }\n  }\n  if (route.children) {\n    validateConfig(route.children, fullPath, requireStandaloneComponents);\n  }\n}\nfunction getFullPath(parentPath, currentRoute) {\n  if (!currentRoute) {\n    return parentPath;\n  }\n  if (!parentPath && !currentRoute.path) {\n    return '';\n  } else if (parentPath && !currentRoute.path) {\n    return `${parentPath}/`;\n  } else if (!parentPath && currentRoute.path) {\n    return currentRoute.path;\n  } else {\n    return `${parentPath}/${currentRoute.path}`;\n  }\n}\n/** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */\nfunction getOutlet(route) {\n  return route.outlet || PRIMARY_OUTLET;\n}\n/**\n * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.\n * The order of the configs is otherwise preserved.\n */\nfunction sortByMatchingOutlets(routes, outletName) {\n  const sortedConfig = routes.filter(r => getOutlet(r) === outletName);\n  sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));\n  return sortedConfig;\n}\n/**\n * Gets the first injector in the snapshot's parent tree.\n *\n * If the `Route` has a static list of providers, the returned injector will be the one created from\n * those. If it does not exist, the returned injector may come from the parents, which may be from a\n * loaded config or their static providers.\n *\n * Returns `null` if there is neither this nor any parents have a stored injector.\n *\n * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and\n * also used for getting the correct injector to use for creating components.\n */\nfunction getClosestRouteInjector(snapshot) {\n  if (!snapshot) return null;\n  // If the current route has its own injector, which is created from the static providers on the\n  // route itself, we should use that. Otherwise, we start at the parent since we do not want to\n  // include the lazy loaded injector from this route.\n  if (snapshot.routeConfig?._injector) {\n    return snapshot.routeConfig._injector;\n  }\n  for (let s = snapshot.parent; s; s = s.parent) {\n    const route = s.routeConfig;\n    // Note that the order here is important. `_loadedInjector` stored on the route with\n    // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`\n    // is created from the static providers on that parent route, so it applies to the children as\n    // well, but only if there is no lazy loaded NgModuleRef injector.\n    if (route?._loadedInjector) return route._loadedInjector;\n    if (route?._injector) return route._injector;\n  }\n  return null;\n}\n\n/**\n * Store contextual information about a `RouterOutlet`\n *\n * @publicApi\n */\nclass OutletContext {\n  rootInjector;\n  outlet = null;\n  route = null;\n  children;\n  attachRef = null;\n  get injector() {\n    return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;\n  }\n  constructor(rootInjector) {\n    this.rootInjector = rootInjector;\n    this.children = new ChildrenOutletContexts(this.rootInjector);\n  }\n}\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n * @publicApi\n */\nclass ChildrenOutletContexts {\n  rootInjector;\n  // contexts for child outlets, by name.\n  contexts = new Map();\n  /** @nodoc */\n  constructor(rootInjector) {\n    this.rootInjector = rootInjector;\n  }\n  /** Called when a `RouterOutlet` directive is instantiated */\n  onChildOutletCreated(childName, outlet) {\n    const context = this.getOrCreateContext(childName);\n    context.outlet = outlet;\n    this.contexts.set(childName, context);\n  }\n  /**\n   * Called when a `RouterOutlet` directive is destroyed.\n   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n   * re-created later.\n   */\n  onChildOutletDestroyed(childName) {\n    const context = this.getContext(childName);\n    if (context) {\n      context.outlet = null;\n      context.attachRef = null;\n    }\n  }\n  /**\n   * Called when the corresponding route is deactivated during navigation.\n   * Because the component get destroyed, all children outlet are destroyed.\n   */\n  onOutletDeactivated() {\n    const contexts = this.contexts;\n    this.contexts = new Map();\n    return contexts;\n  }\n  onOutletReAttached(contexts) {\n    this.contexts = contexts;\n  }\n  getOrCreateContext(childName) {\n    let context = this.getContext(childName);\n    if (!context) {\n      context = new OutletContext(this.rootInjector);\n      this.contexts.set(childName, context);\n    }\n    return context;\n  }\n  getContext(childName) {\n    return this.contexts.get(childName) || null;\n  }\n  static ɵfac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ChildrenOutletContexts)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: ChildrenOutletContexts,\n    factory: ChildrenOutletContexts.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ChildrenOutletContexts, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\nclass Tree {\n  /** @internal */\n  _root;\n  constructor(root) {\n    this._root = root;\n  }\n  get root() {\n    return this._root.value;\n  }\n  /**\n   * @internal\n   */\n  parent(t) {\n    const p = this.pathFromRoot(t);\n    return p.length > 1 ? p[p.length - 2] : null;\n  }\n  /**\n   * @internal\n   */\n  children(t) {\n    const n = findNode(t, this._root);\n    return n ? n.children.map(t => t.value) : [];\n  }\n  /**\n   * @internal\n   */\n  firstChild(t) {\n    const n = findNode(t, this._root);\n    return n && n.children.length > 0 ? n.children[0].value : null;\n  }\n  /**\n   * @internal\n   */\n  siblings(t) {\n    const p = findPath(t, this._root);\n    if (p.length < 2) return [];\n    const c = p[p.length - 2].children.map(c => c.value);\n    return c.filter(cc => cc !== t);\n  }\n  /**\n   * @internal\n   */\n  pathFromRoot(t) {\n    return findPath(t, this._root).map(s => s.value);\n  }\n}\n// DFS for the node matching the value\nfunction findNode(value, node) {\n  if (value === node.value) return node;\n  for (const child of node.children) {\n    const node = findNode(value, child);\n    if (node) return node;\n  }\n  return null;\n}\n// Return the path to the node with the given value using DFS\nfunction findPath(value, node) {\n  if (value === node.value) return [node];\n  for (const child of node.children) {\n    const path = findPath(value, child);\n    if (path.length) {\n      path.unshift(node);\n      return path;\n    }\n  }\n  return [];\n}\nclass TreeNode {\n  value;\n  children;\n  constructor(value, children) {\n    this.value = value;\n    this.children = children;\n  }\n  toString() {\n    return `TreeNode(${this.value})`;\n  }\n}\n// Return the list of T indexed by outlet name\nfunction nodeChildrenAsMap(node) {\n  const map = {};\n  if (node) {\n    node.children.forEach(child => map[child.value.outlet] = child);\n  }\n  return map;\n}\n\n/**\n * Represents the state of the router as a tree of activated routes.\n *\n * @usageNotes\n *\n * Every node in the route tree is an `ActivatedRoute` instance\n * that knows about the \"consumed\" URL segments, the extracted parameters,\n * and the resolved data.\n * Use the `ActivatedRoute` properties to traverse the tree from any node.\n *\n * The following fragment shows how a component gets the root node\n * of the current state to establish its own route tree:\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const root: ActivatedRoute = state.root;\n *     const child = root.firstChild;\n *     const id: Observable<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @see {@link ActivatedRoute}\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nclass RouterState extends Tree {\n  snapshot;\n  /** @internal */\n  constructor(root, /** The current snapshot of the router state */\n  snapshot) {\n    super(root);\n    this.snapshot = snapshot;\n    setRouterState(this, root);\n  }\n  toString() {\n    return this.snapshot.toString();\n  }\n}\nfunction createEmptyState(rootComponent) {\n  const snapshot = createEmptyStateSnapshot(rootComponent);\n  const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n  const emptyParams = new BehaviorSubject({});\n  const emptyData = new BehaviorSubject({});\n  const emptyQueryParams = new BehaviorSubject({});\n  const fragment = new BehaviorSubject('');\n  const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n  activated.snapshot = snapshot.root;\n  return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(rootComponent) {\n  const emptyParams = {};\n  const emptyData = {};\n  const emptyQueryParams = {};\n  const fragment = '';\n  const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});\n  return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * Provides access to information about a route associated with a component\n * that is loaded in an outlet.\n * Use to traverse the `RouterState` tree and extract information from nodes.\n *\n * The following example shows how to construct a component using information from a\n * currently activated route.\n *\n * Note: the observables in this class only emit when the current and previous values differ based\n * on shallow equality. For example, changing deeply nested properties in resolved `data` will not\n * cause the `ActivatedRoute.data` `Observable` to emit a new value.\n *\n * {@example router/activated-route/module.ts region=\"activated-route\"\n *     header=\"activated-route.component.ts\"}\n *\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nclass ActivatedRoute {\n  urlSubject;\n  paramsSubject;\n  queryParamsSubject;\n  fragmentSubject;\n  dataSubject;\n  outlet;\n  component;\n  /** The current snapshot of this route */\n  snapshot;\n  /** @internal */\n  _futureSnapshot;\n  /** @internal */\n  _routerState;\n  /** @internal */\n  _paramMap;\n  /** @internal */\n  _queryParamMap;\n  /** An Observable of the resolved route title */\n  title;\n  /** An observable of the URL segments matched by this route. */\n  url;\n  /** An observable of the matrix parameters scoped to this route. */\n  params;\n  /** An observable of the query parameters shared by all the routes. */\n  queryParams;\n  /** An observable of the URL fragment shared by all the routes. */\n  fragment;\n  /** An observable of the static and resolved data of this route. */\n  data;\n  /** @internal */\n  constructor(/** @internal */\n  urlSubject, /** @internal */\n  paramsSubject, /** @internal */\n  queryParamsSubject, /** @internal */\n  fragmentSubject, /** @internal */\n  dataSubject, /** The outlet name of the route, a constant. */\n  outlet, /** The component of the route, a constant. */\n  component, futureSnapshot) {\n    this.urlSubject = urlSubject;\n    this.paramsSubject = paramsSubject;\n    this.queryParamsSubject = queryParamsSubject;\n    this.fragmentSubject = fragmentSubject;\n    this.dataSubject = dataSubject;\n    this.outlet = outlet;\n    this.component = component;\n    this._futureSnapshot = futureSnapshot;\n    this.title = this.dataSubject?.pipe(map(d => d[RouteTitleKey])) ?? of(undefined);\n    // TODO(atscott): Verify that these can be changed to `.asObservable()` with TGP.\n    this.url = urlSubject;\n    this.params = paramsSubject;\n    this.queryParams = queryParamsSubject;\n    this.fragment = fragmentSubject;\n    this.data = dataSubject;\n  }\n  /** The configuration used to match this route. */\n  get routeConfig() {\n    return this._futureSnapshot.routeConfig;\n  }\n  /** The root of the router state. */\n  get root() {\n    return this._routerState.root;\n  }\n  /** The parent of this route in the router state tree. */\n  get parent() {\n    return this._routerState.parent(this);\n  }\n  /** The first child of this route in the router state tree. */\n  get firstChild() {\n    return this._routerState.firstChild(this);\n  }\n  /** The children of this route in the router state tree. */\n  get children() {\n    return this._routerState.children(this);\n  }\n  /** The path from the root of the router state tree to this route. */\n  get pathFromRoot() {\n    return this._routerState.pathFromRoot(this);\n  }\n  /**\n   * An Observable that contains a map of the required and optional parameters\n   * specific to the route.\n   * The map supports retrieving single and multiple values from the same parameter.\n   */\n  get paramMap() {\n    this._paramMap ??= this.params.pipe(map(p => convertToParamMap(p)));\n    return this._paramMap;\n  }\n  /**\n   * An Observable that contains a map of the query parameters available to all routes.\n   * The map supports retrieving single and multiple values from the query parameter.\n   */\n  get queryParamMap() {\n    this._queryParamMap ??= this.queryParams.pipe(map(p => convertToParamMap(p)));\n    return this._queryParamMap;\n  }\n  toString() {\n    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n  }\n}\n/**\n * Returns the inherited params, data, and resolve for a given route.\n *\n * By default, we do not inherit parent data unless the current route is path-less or the parent\n * route is component-less.\n */\nfunction getInherited(route, parent, paramsInheritanceStrategy = 'emptyOnly') {\n  let inherited;\n  const {\n    routeConfig\n  } = route;\n  if (parent !== null && (paramsInheritanceStrategy === 'always' ||\n  // inherit parent data if route is empty path\n  routeConfig?.path === '' ||\n  // inherit parent data if parent was componentless\n  !parent.component && !parent.routeConfig?.loadComponent)) {\n    inherited = {\n      params: {\n        ...parent.params,\n        ...route.params\n      },\n      data: {\n        ...parent.data,\n        ...route.data\n      },\n      resolve: {\n        // Snapshots are created with data inherited from parent and guards (i.e. canActivate) can\n        // change data because it's not frozen...\n        // This first line could be deleted chose to break/disallow mutating the `data` object in\n        // guards.\n        // Note that data from parents still override this mutated data so anyone relying on this\n        // might be surprised that it doesn't work if parent data is inherited but otherwise does.\n        ...route.data,\n        // Ensure inherited resolved data overrides inherited static data\n        ...parent.data,\n        // static data from the current route overrides any inherited data\n        ...routeConfig?.data,\n        // resolved data from current route overrides everything\n        ...route._resolvedData\n      }\n    };\n  } else {\n    inherited = {\n      params: {\n        ...route.params\n      },\n      data: {\n        ...route.data\n      },\n      resolve: {\n        ...route.data,\n        ...(route._resolvedData ?? {})\n      }\n    };\n  }\n  if (routeConfig && hasStaticTitle(routeConfig)) {\n    inherited.resolve[RouteTitleKey] = routeConfig.title;\n  }\n  return inherited;\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * The following example initializes a component with route information extracted\n * from the snapshot of the root node at the time of creation.\n *\n * ```ts\n * @Component({templateUrl:'./my-component.html'})\n * class MyComponent {\n *   constructor(route: ActivatedRoute) {\n *     const id: string = route.snapshot.params.id;\n *     const url: string = route.snapshot.url.join('');\n *     const user = route.snapshot.data.user;\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass ActivatedRouteSnapshot {\n  url;\n  params;\n  queryParams;\n  fragment;\n  data;\n  outlet;\n  component;\n  /** The configuration used to match this route **/\n  routeConfig;\n  /** @internal */\n  _resolve;\n  /** @internal */\n  _resolvedData;\n  /** @internal */\n  _routerState;\n  /** @internal */\n  _paramMap;\n  /** @internal */\n  _queryParamMap;\n  /** The resolved route title */\n  get title() {\n    // Note: This _must_ be a getter because the data is mutated in the resolvers. Title will not be\n    // available at the time of class instantiation.\n    return this.data?.[RouteTitleKey];\n  }\n  /** @internal */\n  constructor(/** The URL segments matched by this route */\n  url,\n  /**\n   *  The matrix parameters scoped to this route.\n   *\n   *  You can compute all params (or data) in the router state or to get params outside\n   *  of an activated component by traversing the `RouterState` tree as in the following\n   *  example:\n   *  ```\n   *  collectRouteParams(router: Router) {\n   *    let params = {};\n   *    let stack: ActivatedRouteSnapshot[] = [router.routerState.snapshot.root];\n   *    while (stack.length > 0) {\n   *      const route = stack.pop()!;\n   *      params = {...params, ...route.params};\n   *      stack.push(...route.children);\n   *    }\n   *    return params;\n   *  }\n   *  ```\n   */\n  params, /** The query parameters shared by all the routes */\n  queryParams, /** The URL fragment shared by all the routes */\n  fragment, /** The static and resolved data of this route */\n  data, /** The outlet name of the route */\n  outlet, /** The component of the route */\n  component, routeConfig, resolve) {\n    this.url = url;\n    this.params = params;\n    this.queryParams = queryParams;\n    this.fragment = fragment;\n    this.data = data;\n    this.outlet = outlet;\n    this.component = component;\n    this.routeConfig = routeConfig;\n    this._resolve = resolve;\n  }\n  /** The root of the router state */\n  get root() {\n    return this._routerState.root;\n  }\n  /** The parent of this route in the router state tree */\n  get parent() {\n    return this._routerState.parent(this);\n  }\n  /** The first child of this route in the router state tree */\n  get firstChild() {\n    return this._routerState.firstChild(this);\n  }\n  /** The children of this route in the router state tree */\n  get children() {\n    return this._routerState.children(this);\n  }\n  /** The path from the root of the router state tree to this route */\n  get pathFromRoot() {\n    return this._routerState.pathFromRoot(this);\n  }\n  get paramMap() {\n    this._paramMap ??= convertToParamMap(this.params);\n    return this._paramMap;\n  }\n  get queryParamMap() {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n  toString() {\n    const url = this.url.map(segment => segment.toString()).join('/');\n    const matched = this.routeConfig ? this.routeConfig.path : '';\n    return `Route(url:'${url}', path:'${matched}')`;\n  }\n}\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n *\n * The following example shows how a component is initialized with information\n * from the snapshot of the root node's state at the time of creation.\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const snapshot: RouterStateSnapshot = state.snapshot;\n *     const root: ActivatedRouteSnapshot = snapshot.root;\n *     const child = root.firstChild;\n *     const id: Observable<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass RouterStateSnapshot extends Tree {\n  url;\n  /** @internal */\n  constructor(/** The url from which this snapshot was created */\n  url, root) {\n    super(root);\n    this.url = url;\n    setRouterState(this, root);\n  }\n  toString() {\n    return serializeNode(this._root);\n  }\n}\nfunction setRouterState(state, node) {\n  node.value._routerState = state;\n  node.children.forEach(c => setRouterState(state, c));\n}\nfunction serializeNode(node) {\n  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n  return `${node.value}${c}`;\n}\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n */\nfunction advanceActivatedRoute(route) {\n  if (route.snapshot) {\n    const currentSnapshot = route.snapshot;\n    const nextSnapshot = route._futureSnapshot;\n    route.snapshot = nextSnapshot;\n    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n      route.queryParamsSubject.next(nextSnapshot.queryParams);\n    }\n    if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n      route.fragmentSubject.next(nextSnapshot.fragment);\n    }\n    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n      route.paramsSubject.next(nextSnapshot.params);\n    }\n    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n      route.urlSubject.next(nextSnapshot.url);\n    }\n    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n      route.dataSubject.next(nextSnapshot.data);\n    }\n  } else {\n    route.snapshot = route._futureSnapshot;\n    // this is for resolved data\n    route.dataSubject.next(route._futureSnapshot.data);\n  }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n  const parentsMismatch = !a.parent !== !b.parent;\n  return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));\n}\nfunction hasStaticTitle(config) {\n  return typeof config.title === 'string' || config.title === null;\n}\n\n/**\n * An `InjectionToken` provided by the `RouterOutlet` and can be set using the `routerOutletData`\n * input.\n *\n * When unset, this value is `null` by default.\n *\n * @usageNotes\n *\n * To set the data from the template of the component with `router-outlet`:\n * ```html\n * <router-outlet [routerOutletData]=\"{name: 'Angular'}\" />\n * ```\n *\n * To read the data in the routed component:\n * ```ts\n * data = inject(ROUTER_OUTLET_DATA) as Signal<{name: string}>;\n * ```\n *\n * @publicApi\n */\nconst ROUTER_OUTLET_DATA = new InjectionToken(ngDevMode ? 'RouterOutlet data' : '');\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * Each outlet can have a unique name, determined by the optional `name` attribute.\n * The name cannot be set or changed dynamically. If not set, default value is \"primary\".\n *\n * ```html\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * Named outlets can be the targets of secondary routes.\n * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:\n *\n * `{path: <base-path>, component: <component>, outlet: <target_outlet_name>}`\n *\n * Using named outlets and secondary routes, you can target multiple outlets in\n * the same `RouterLink` directive.\n *\n * The router keeps track of separate branches in a navigation tree for each named outlet and\n * generates a representation of that tree in the URL.\n * The URL for a secondary route uses the following syntax to specify both the primary and secondary\n * routes at the same time:\n *\n * `http://base-path/primary-route-path(outlet-name:route-path)`\n *\n * A router outlet emits an activate event when a new component is instantiated,\n * deactivate event when a component is destroyed.\n * An attached event emits when the `RouteReuseStrategy` instructs the outlet to reattach the\n * subtree, and the detached event emits when the `RouteReuseStrategy` instructs the outlet to\n * detach the subtree.\n *\n * ```html\n * <router-outlet\n *   (activate)='onActivate($event)'\n *   (deactivate)='onDeactivate($event)'\n *   (attach)='onAttach($event)'\n *   (detach)='onDetach($event)'></router-outlet>\n * ```\n *\n * @see {@link RouterLink}\n * @see {@link Route}\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterOutlet {\n  activated = null;\n  /** @internal */\n  get activatedComponentRef() {\n    return this.activated;\n  }\n  _activatedRoute = null;\n  /**\n   * The name of the outlet\n   *\n   */\n  name = PRIMARY_OUTLET;\n  activateEvents = new EventEmitter();\n  deactivateEvents = new EventEmitter();\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  attachEvents = new EventEmitter();\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  detachEvents = new EventEmitter();\n  /**\n   * Data that will be provided to the child injector through the `ROUTER_OUTLET_DATA` token.\n   *\n   * When unset, the value of the token is `undefined` by default.\n   */\n  routerOutletData = input(undefined);\n  parentContexts = inject(ChildrenOutletContexts);\n  location = inject(ViewContainerRef);\n  changeDetector = inject(ChangeDetectorRef);\n  inputBinder = inject(INPUT_BINDER, {\n    optional: true\n  });\n  /** @nodoc */\n  supportsBindingToComponentInputs = true;\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (changes['name']) {\n      const {\n        firstChange,\n        previousValue\n      } = changes['name'];\n      if (firstChange) {\n        // The first change is handled by ngOnInit. Because ngOnChanges doesn't get called when no\n        // input is set at all, we need to centrally handle the first change there.\n        return;\n      }\n      // unregister with the old name\n      if (this.isTrackedInParentContexts(previousValue)) {\n        this.deactivate();\n        this.parentContexts.onChildOutletDestroyed(previousValue);\n      }\n      // register the new name\n      this.initializeOutletWithName();\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    // Ensure that the registered outlet is this one before removing it on the context.\n    if (this.isTrackedInParentContexts(this.name)) {\n      this.parentContexts.onChildOutletDestroyed(this.name);\n    }\n    this.inputBinder?.unsubscribeFromRouteData(this);\n  }\n  isTrackedInParentContexts(outletName) {\n    return this.parentContexts.getContext(outletName)?.outlet === this;\n  }\n  /** @nodoc */\n  ngOnInit() {\n    this.initializeOutletWithName();\n  }\n  initializeOutletWithName() {\n    this.parentContexts.onChildOutletCreated(this.name, this);\n    if (this.activated) {\n      return;\n    }\n    // If the outlet was not instantiated at the time the route got activated we need to populate\n    // the outlet when it is initialized (ie inside a NgIf)\n    const context = this.parentContexts.getContext(this.name);\n    if (context?.route) {\n      if (context.attachRef) {\n        // `attachRef` is populated when there is an existing component to mount\n        this.attach(context.attachRef, context.route);\n      } else {\n        // otherwise the component defined in the configuration is created\n        this.activateWith(context.route, context.injector);\n      }\n    }\n  }\n  get isActivated() {\n    return !!this.activated;\n  }\n  /**\n   * @returns The currently activated component instance.\n   * @throws An error if the outlet is not activated.\n   */\n  get component() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this.activated.instance;\n  }\n  get activatedRoute() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this._activatedRoute;\n  }\n  get activatedRouteData() {\n    if (this._activatedRoute) {\n      return this._activatedRoute.snapshot.data;\n    }\n    return {};\n  }\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree\n   */\n  detach() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    this.location.detach();\n    const cmp = this.activated;\n    this.activated = null;\n    this._activatedRoute = null;\n    this.detachEvents.emit(cmp.instance);\n    return cmp;\n  }\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n   */\n  attach(ref, activatedRoute) {\n    this.activated = ref;\n    this._activatedRoute = activatedRoute;\n    this.location.insert(ref.hostView);\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.attachEvents.emit(ref.instance);\n  }\n  deactivate() {\n    if (this.activated) {\n      const c = this.component;\n      this.activated.destroy();\n      this.activated = null;\n      this._activatedRoute = null;\n      this.deactivateEvents.emit(c);\n    }\n  }\n  activateWith(activatedRoute, environmentInjector) {\n    if (this.isActivated) {\n      throw new ɵRuntimeError(4013 /* RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot activate an already activated outlet');\n    }\n    this._activatedRoute = activatedRoute;\n    const location = this.location;\n    const snapshot = activatedRoute.snapshot;\n    const component = snapshot.component;\n    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n    const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);\n    this.activated = location.createComponent(component, {\n      index: location.length,\n      injector,\n      environmentInjector: environmentInjector\n    });\n    // Calling `markForCheck` to make sure we will run the change detection when the\n    // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n    this.changeDetector.markForCheck();\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.activateEvents.emit(this.activated.instance);\n  }\n  static ɵfac = function RouterOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterOutlet)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterOutlet,\n    selectors: [[\"router-outlet\"]],\n    inputs: {\n      name: \"name\",\n      routerOutletData: [1, \"routerOutletData\"]\n    },\n    outputs: {\n      activateEvents: \"activate\",\n      deactivateEvents: \"deactivate\",\n      attachEvents: \"attach\",\n      detachEvents: \"detach\"\n    },\n    exportAs: [\"outlet\"],\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterOutlet, [{\n    type: Directive,\n    args: [{\n      selector: 'router-outlet',\n      exportAs: 'outlet'\n    }]\n  }], null, {\n    name: [{\n      type: Input\n    }],\n    activateEvents: [{\n      type: Output,\n      args: ['activate']\n    }],\n    deactivateEvents: [{\n      type: Output,\n      args: ['deactivate']\n    }],\n    attachEvents: [{\n      type: Output,\n      args: ['attach']\n    }],\n    detachEvents: [{\n      type: Output,\n      args: ['detach']\n    }]\n  });\n})();\nclass OutletInjector {\n  route;\n  childContexts;\n  parent;\n  outletData;\n  /**\n   * This injector has a special handing for the `ActivatedRoute` and\n   * `ChildrenOutletContexts` tokens: it returns corresponding values for those\n   * tokens dynamically. This behavior is different from the regular injector logic,\n   * when we initialize and store a value, which is later returned for all inject\n   * requests.\n   *\n   * In some cases (e.g. when using `@defer`), this dynamic behavior requires special\n   * handling. This function allows to identify an instance of the `OutletInjector` and\n   * create an instance of it without referring to the class itself (so this logic can\n   * be invoked from the `core` package). This helps to retain dynamic behavior for the\n   * mentioned tokens.\n   *\n   * Note: it's a temporary solution and we should explore how to support this case better.\n   */\n  __ngOutletInjector(parentInjector) {\n    return new OutletInjector(this.route, this.childContexts, parentInjector, this.outletData);\n  }\n  constructor(route, childContexts, parent, outletData) {\n    this.route = route;\n    this.childContexts = childContexts;\n    this.parent = parent;\n    this.outletData = outletData;\n  }\n  get(token, notFoundValue) {\n    if (token === ActivatedRoute) {\n      return this.route;\n    }\n    if (token === ChildrenOutletContexts) {\n      return this.childContexts;\n    }\n    if (token === ROUTER_OUTLET_DATA) {\n      return this.outletData;\n    }\n    return this.parent.get(token, notFoundValue);\n  }\n}\nconst INPUT_BINDER = new InjectionToken('');\n/**\n * Injectable used as a tree-shakable provider for opting in to binding router data to component\n * inputs.\n *\n * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or\n * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,\n * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. If it were not done this way, the previous information would be\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n *\n * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that\n * the subscriptions are cleaned up.\n */\nclass RoutedComponentInputBinder {\n  outletDataSubscriptions = new Map();\n  bindActivatedRouteToOutletComponent(outlet) {\n    this.unsubscribeFromRouteData(outlet);\n    this.subscribeToRouteData(outlet);\n  }\n  unsubscribeFromRouteData(outlet) {\n    this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n    this.outletDataSubscriptions.delete(outlet);\n  }\n  subscribeToRouteData(outlet) {\n    const {\n      activatedRoute\n    } = outlet;\n    const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe(switchMap(([queryParams, params, data], index) => {\n      data = {\n        ...queryParams,\n        ...params,\n        ...data\n      };\n      // Get the first result from the data subscription synchronously so it's available to\n      // the component as soon as possible (and doesn't require a second change detection).\n      if (index === 0) {\n        return of(data);\n      }\n      // Promise.resolve is used to avoid synchronously writing the wrong data when\n      // two of the Observables in the `combineLatest` stream emit one after\n      // another.\n      return Promise.resolve(data);\n    })).subscribe(data => {\n      // Outlet may have been deactivated or changed names to be associated with a different\n      // route\n      if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\n        this.unsubscribeFromRouteData(outlet);\n        return;\n      }\n      const mirror = reflectComponentType(activatedRoute.component);\n      if (!mirror) {\n        this.unsubscribeFromRouteData(outlet);\n        return;\n      }\n      for (const {\n        templateName\n      } of mirror.inputs) {\n        outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n      }\n    });\n    this.outletDataSubscriptions.set(outlet, dataSubscription);\n  }\n  static ɵfac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RoutedComponentInputBinder)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RoutedComponentInputBinder,\n    factory: RoutedComponentInputBinder.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RoutedComponentInputBinder, [{\n    type: Injectable\n  }], null, null);\n})();\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n  return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n  // reuse an activated route that is currently displayed on the screen\n  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n    const value = prevState.value;\n    value._futureSnapshot = curr.value;\n    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n    return new TreeNode(value, children);\n  } else {\n    if (routeReuseStrategy.shouldAttach(curr.value)) {\n      // retrieve an activated route that is used to be displayed, but is not currently displayed\n      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n      if (detachedRouteHandle !== null) {\n        const tree = detachedRouteHandle.route;\n        tree.value._futureSnapshot = curr.value;\n        tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));\n        return tree;\n      }\n    }\n    const value = createActivatedRoute(curr.value);\n    const children = curr.children.map(c => createNode(routeReuseStrategy, c));\n    return new TreeNode(value, children);\n  }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n  return curr.children.map(child => {\n    for (const p of prevState.children) {\n      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n        return createNode(routeReuseStrategy, child, p);\n      }\n    }\n    return createNode(routeReuseStrategy, child);\n  });\n}\nfunction createActivatedRoute(c) {\n  return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);\n}\n\n/**\n * Can be returned by a `Router` guard to instruct the `Router` to redirect rather than continue\n * processing the path of the in-flight navigation. The `redirectTo` indicates _where_ the new\n * navigation should go to and the optional `navigationBehaviorOptions` can provide more information\n * about _how_ to perform the navigation.\n *\n * ```ts\n * const route: Route = {\n *   path: \"user/:userId\",\n *   component: User,\n *   canActivate: [\n *     () => {\n *       const router = inject(Router);\n *       const authService = inject(AuthenticationService);\n *\n *       if (!authService.isLoggedIn()) {\n *         const loginPath = router.parseUrl(\"/login\");\n *         return new RedirectCommand(loginPath, {\n *           skipLocationChange: \"true\",\n *         });\n *       }\n *\n *       return true;\n *     },\n *   ],\n * };\n * ```\n * @see [Routing guide](guide/routing/common-router-tasks#preventing-unauthorized-access)\n *\n * @publicApi\n */\nclass RedirectCommand {\n  redirectTo;\n  navigationBehaviorOptions;\n  constructor(redirectTo, navigationBehaviorOptions) {\n    this.redirectTo = redirectTo;\n    this.navigationBehaviorOptions = navigationBehaviorOptions;\n  }\n}\nconst NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction redirectingNavigationError(urlSerializer, redirect) {\n  const {\n    redirectTo,\n    navigationBehaviorOptions\n  } = isUrlTree(redirect) ? {\n    redirectTo: redirect,\n    navigationBehaviorOptions: undefined\n  } : redirect;\n  const error = navigationCancelingError(ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`, NavigationCancellationCode.Redirect);\n  error.url = redirectTo;\n  error.navigationBehaviorOptions = navigationBehaviorOptions;\n  return error;\n}\nfunction navigationCancelingError(message, code) {\n  const error = new Error(`NavigationCancelingError: ${message || ''}`);\n  error[NAVIGATION_CANCELING_ERROR] = true;\n  error.cancellationCode = code;\n  return error;\n}\nfunction isRedirectingNavigationCancelingError(error) {\n  return isNavigationCancelingError(error) && isUrlTree(error.url);\n}\nfunction isNavigationCancelingError(error) {\n  return !!error && error[NAVIGATION_CANCELING_ERROR];\n}\nlet warnedAboutUnsupportedInputBinding = false;\nconst activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => map(t => {\n  new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled).activate(rootContexts);\n  return t;\n});\nclass ActivateRoutes {\n  routeReuseStrategy;\n  futureState;\n  currState;\n  forwardEvent;\n  inputBindingEnabled;\n  constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {\n    this.routeReuseStrategy = routeReuseStrategy;\n    this.futureState = futureState;\n    this.currState = currState;\n    this.forwardEvent = forwardEvent;\n    this.inputBindingEnabled = inputBindingEnabled;\n  }\n  activate(parentContexts) {\n    const futureRoot = this.futureState._root;\n    const currRoot = this.currState ? this.currState._root : null;\n    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n    advanceActivatedRoute(this.futureState.root);\n    this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n  }\n  // De-activate the child route that are not re-used for the future state\n  deactivateChildRoutes(futureNode, currNode, contexts) {\n    const children = nodeChildrenAsMap(currNode);\n    // Recurse on the routes active in the future state to de-activate deeper children\n    futureNode.children.forEach(futureChild => {\n      const childOutletName = futureChild.value.outlet;\n      this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n      delete children[childOutletName];\n    });\n    // De-activate the routes that will not be re-used\n    Object.values(children).forEach(v => {\n      this.deactivateRouteAndItsChildren(v, contexts);\n    });\n  }\n  deactivateRoutes(futureNode, currNode, parentContext) {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n    if (future === curr) {\n      // Reusing the node, check to see if the children need to be de-activated\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContext.getContext(future.outlet);\n        if (context) {\n          this.deactivateChildRoutes(futureNode, currNode, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.deactivateChildRoutes(futureNode, currNode, parentContext);\n      }\n    } else {\n      if (curr) {\n        // Deactivate the current route which will not be re-used\n        this.deactivateRouteAndItsChildren(currNode, parentContext);\n      }\n    }\n  }\n  deactivateRouteAndItsChildren(route, parentContexts) {\n    // If there is no component, the Route is never attached to an outlet (because there is no\n    // component to attach).\n    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n      this.detachAndStoreRouteSubtree(route, parentContexts);\n    } else {\n      this.deactivateRouteAndOutlet(route, parentContexts);\n    }\n  }\n  detachAndStoreRouteSubtree(route, parentContexts) {\n    const context = parentContexts.getContext(route.value.outlet);\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children = nodeChildrenAsMap(route);\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n    if (context && context.outlet) {\n      const componentRef = context.outlet.detach();\n      const contexts = context.children.onOutletDeactivated();\n      this.routeReuseStrategy.store(route.value.snapshot, {\n        componentRef,\n        route,\n        contexts\n      });\n    }\n  }\n  deactivateRouteAndOutlet(route, parentContexts) {\n    const context = parentContexts.getContext(route.value.outlet);\n    // The context could be `null` if we are on a componentless route but there may still be\n    // children that need deactivating.\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children = nodeChildrenAsMap(route);\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n    if (context) {\n      if (context.outlet) {\n        // Destroy the component\n        context.outlet.deactivate();\n        // Destroy the contexts for all the outlets that were in the component\n        context.children.onOutletDeactivated();\n      }\n      // Clear the information about the attached component on the context but keep the reference to\n      // the outlet. Clear even if outlet was not yet activated to avoid activating later with old\n      // info\n      context.attachRef = null;\n      context.route = null;\n    }\n  }\n  activateChildRoutes(futureNode, currNode, contexts) {\n    const children = nodeChildrenAsMap(currNode);\n    futureNode.children.forEach(c => {\n      this.activateRoutes(c, children[c.value.outlet], contexts);\n      this.forwardEvent(new ActivationEnd(c.value.snapshot));\n    });\n    if (futureNode.children.length) {\n      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n    }\n  }\n  activateRoutes(futureNode, currNode, parentContexts) {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n    advanceActivatedRoute(future);\n    // reusing the node\n    if (future === curr) {\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        this.activateChildRoutes(futureNode, currNode, context.children);\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, currNode, parentContexts);\n      }\n    } else {\n      if (future.component) {\n        // if we have a normal route, we need to place the component into the outlet and recurse.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n          const stored = this.routeReuseStrategy.retrieve(future.snapshot);\n          this.routeReuseStrategy.store(future.snapshot, null);\n          context.children.onOutletReAttached(stored.contexts);\n          context.attachRef = stored.componentRef;\n          context.route = stored.route.value;\n          if (context.outlet) {\n            // Attach right away when the outlet has already been instantiated\n            // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n            context.outlet.attach(stored.componentRef, stored.route.value);\n          }\n          advanceActivatedRoute(stored.route.value);\n          this.activateChildRoutes(futureNode, null, context.children);\n        } else {\n          context.attachRef = null;\n          context.route = future;\n          if (context.outlet) {\n            // Activate the outlet when it has already been instantiated\n            // Otherwise it will get activated from its `ngOnInit` when instantiated\n            context.outlet.activateWith(future, context.injector);\n          }\n          this.activateChildRoutes(futureNode, null, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, null, parentContexts);\n      }\n    }\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const context = parentContexts.getOrCreateContext(future.outlet);\n      const outlet = context.outlet;\n      if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {\n        console.warn(`'withComponentInputBinding' feature is enabled but ` + `this application is using an outlet that may not support binding to component inputs.`);\n        warnedAboutUnsupportedInputBinding = true;\n      }\n    }\n  }\n}\nclass CanActivate {\n  path;\n  route;\n  constructor(path) {\n    this.path = path;\n    this.route = this.path[this.path.length - 1];\n  }\n}\nclass CanDeactivate {\n  component;\n  route;\n  constructor(component, route) {\n    this.component = component;\n    this.route = route;\n  }\n}\nfunction getAllRouteGuards(future, curr, parentContexts) {\n  const futureRoot = future._root;\n  const currRoot = curr ? curr._root : null;\n  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\nfunction getCanActivateChild(p) {\n  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n  if (!canActivateChild || canActivateChild.length === 0) return null;\n  return {\n    node: p,\n    guards: canActivateChild\n  };\n}\nfunction getTokenOrFunctionIdentity(tokenOrFunction, injector) {\n  const NOT_FOUND = Symbol();\n  const result = injector.get(tokenOrFunction, NOT_FOUND);\n  if (result === NOT_FOUND) {\n    if (typeof tokenOrFunction === 'function' && !ɵisInjectable(tokenOrFunction)) {\n      // We think the token is just a function so return it as-is\n      return tokenOrFunction;\n    } else {\n      // This will throw the not found error\n      return injector.get(tokenOrFunction);\n    }\n  }\n  return result;\n}\nfunction getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {\n  canDeactivateChecks: [],\n  canActivateChecks: []\n}) {\n  const prevChildren = nodeChildrenAsMap(currNode);\n  // Process the children of the future route\n  futureNode.children.forEach(c => {\n    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n    delete prevChildren[c.value.outlet];\n  });\n  // Process any children left from the current route (not active for the future route)\n  Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));\n  return checks;\n}\nfunction getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {\n  canDeactivateChecks: [],\n  canActivateChecks: []\n}) {\n  const future = futureNode.value;\n  const curr = currNode ? currNode.value : null;\n  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n  // reusing the node\n  if (curr && future.routeConfig === curr.routeConfig) {\n    const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n    if (shouldRun) {\n      checks.canActivateChecks.push(new CanActivate(futurePath));\n    } else {\n      // we need to set the data\n      future.data = curr.data;\n      future._resolvedData = curr._resolvedData;\n    }\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n    }\n    if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n    }\n  } else {\n    if (curr) {\n      deactivateRouteAndItsChildren(currNode, context, checks);\n    }\n    checks.canActivateChecks.push(new CanActivate(futurePath));\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n    }\n  }\n  return checks;\n}\nfunction shouldRunGuardsAndResolvers(curr, future, mode) {\n  if (typeof mode === 'function') {\n    return mode(curr, future);\n  }\n  switch (mode) {\n    case 'pathParamsChange':\n      return !equalPath(curr.url, future.url);\n    case 'pathParamsOrQueryParamsChange':\n      return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);\n    case 'always':\n      return true;\n    case 'paramsOrQueryParamsChange':\n      return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);\n    case 'paramsChange':\n    default:\n      return !equalParamsAndUrlSegments(curr, future);\n  }\n}\nfunction deactivateRouteAndItsChildren(route, context, checks) {\n  const children = nodeChildrenAsMap(route);\n  const r = route.value;\n  Object.entries(children).forEach(([childName, node]) => {\n    if (!r.component) {\n      deactivateRouteAndItsChildren(node, context, checks);\n    } else if (context) {\n      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n    } else {\n      deactivateRouteAndItsChildren(node, null, checks);\n    }\n  });\n  if (!r.component) {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  } else if (context && context.outlet && context.outlet.isActivated) {\n    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n  } else {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  }\n}\n\n/**\n * Simple function check, but generic so type inference will flow. Example:\n *\n * function product(a: number, b: number) {\n *   return a * b;\n * }\n *\n * if (isFunction<product>(fn)) {\n *   return fn(1, 2);\n * } else {\n *   throw \"Must provide the `product` function\";\n * }\n */\nfunction isFunction(v) {\n  return typeof v === 'function';\n}\nfunction isBoolean(v) {\n  return typeof v === 'boolean';\n}\nfunction isCanLoad(guard) {\n  return guard && isFunction(guard.canLoad);\n}\nfunction isCanActivate(guard) {\n  return guard && isFunction(guard.canActivate);\n}\nfunction isCanActivateChild(guard) {\n  return guard && isFunction(guard.canActivateChild);\n}\nfunction isCanDeactivate(guard) {\n  return guard && isFunction(guard.canDeactivate);\n}\nfunction isCanMatch(guard) {\n  return guard && isFunction(guard.canMatch);\n}\nfunction isEmptyError(e) {\n  return e instanceof EmptyError || e?.name === 'EmptyError';\n}\nconst INITIAL_VALUE = /* @__PURE__ */Symbol('INITIAL_VALUE');\nfunction prioritizedGuardValue() {\n  return switchMap(obs => {\n    return combineLatest(obs.map(o => o.pipe(take(1), startWith(INITIAL_VALUE)))).pipe(map(results => {\n      for (const result of results) {\n        if (result === true) {\n          // If result is true, check the next one\n          continue;\n        } else if (result === INITIAL_VALUE) {\n          // If guard has not finished, we need to stop processing.\n          return INITIAL_VALUE;\n        } else if (result === false || isRedirect(result)) {\n          // Result finished and was not true. Return the result.\n          // Note that we only allow false/UrlTree/RedirectCommand. Other values are considered invalid and\n          // ignored.\n          return result;\n        }\n      }\n      // Everything resolved to true. Return true.\n      return true;\n    }), filter(item => item !== INITIAL_VALUE), take(1));\n  });\n}\nfunction isRedirect(val) {\n  return isUrlTree(val) || val instanceof RedirectCommand;\n}\nfunction checkGuards(injector, forwardEvent) {\n  return mergeMap(t => {\n    const {\n      targetSnapshot,\n      currentSnapshot,\n      guards: {\n        canActivateChecks,\n        canDeactivateChecks\n      }\n    } = t;\n    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n      return of({\n        ...t,\n        guardsResult: true\n      });\n    }\n    return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, injector).pipe(mergeMap(canDeactivate => {\n      return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, injector, forwardEvent) : of(canDeactivate);\n    }), map(guardsResult => ({\n      ...t,\n      guardsResult\n    })));\n  });\n}\nfunction runCanDeactivateChecks(checks, futureRSS, currRSS, injector) {\n  return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)), first(result => {\n    return result !== true;\n  }, true));\n}\nfunction runCanActivateChecks(futureSnapshot, checks, injector, forwardEvent) {\n  return from(checks).pipe(concatMap(check => {\n    return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path, injector), runCanActivate(futureSnapshot, check.route, injector));\n  }), first(result => {\n    return result !== true;\n  }, true));\n}\n/**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireActivationStart(snapshot, forwardEvent) {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ActivationStart(snapshot));\n  }\n  return of(true);\n}\n/**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireChildActivationStart(snapshot, forwardEvent) {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ChildActivationStart(snapshot));\n  }\n  return of(true);\n}\nfunction runCanActivate(futureRSS, futureARS, injector) {\n  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n  if (!canActivate || canActivate.length === 0) return of(true);\n  const canActivateObservables = canActivate.map(canActivate => {\n    return defer(() => {\n      const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n      const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);\n      const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n      return wrapIntoObservable(guardVal).pipe(first());\n    });\n  });\n  return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanActivateChild(futureRSS, path, injector) {\n  const futureARS = path[path.length - 1];\n  const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(p => getCanActivateChild(p)).filter(_ => _ !== null);\n  const canActivateChildGuardsMapped = canActivateChildGuards.map(d => {\n    return defer(() => {\n      const guardsMapped = d.guards.map(canActivateChild => {\n        const closestInjector = getClosestRouteInjector(d.node) ?? injector;\n        const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);\n        const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n        return wrapIntoObservable(guardVal).pipe(first());\n      });\n      return of(guardsMapped).pipe(prioritizedGuardValue());\n    });\n  });\n  return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\nfunction runCanDeactivate(component, currARS, currRSS, futureRSS, injector) {\n  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n  if (!canDeactivate || canDeactivate.length === 0) return of(true);\n  const canDeactivateObservables = canDeactivate.map(c => {\n    const closestInjector = getClosestRouteInjector(currARS) ?? injector;\n    const guard = getTokenOrFunctionIdentity(c, closestInjector);\n    const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));\n    return wrapIntoObservable(guardVal).pipe(first());\n  });\n  return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanLoadGuards(injector, route, segments, urlSerializer) {\n  const canLoad = route.canLoad;\n  if (canLoad === undefined || canLoad.length === 0) {\n    return of(true);\n  }\n  const canLoadObservables = canLoad.map(injectionToken => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n  return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nfunction redirectIfUrlTree(urlSerializer) {\n  return pipe(tap(result => {\n    if (typeof result === 'boolean') return;\n    throw redirectingNavigationError(urlSerializer, result);\n  }), map(result => result === true));\n}\nfunction runCanMatchGuards(injector, route, segments, urlSerializer) {\n  const canMatch = route.canMatch;\n  if (!canMatch || canMatch.length === 0) return of(true);\n  const canMatchObservables = canMatch.map(injectionToken => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n  return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nclass NoMatch {\n  segmentGroup;\n  constructor(segmentGroup) {\n    this.segmentGroup = segmentGroup || null;\n  }\n}\nclass AbsoluteRedirect extends Error {\n  urlTree;\n  constructor(urlTree) {\n    super();\n    this.urlTree = urlTree;\n  }\n}\nfunction noMatch$1(segmentGroup) {\n  return throwError(new NoMatch(segmentGroup));\n}\nfunction absoluteRedirect(newTree) {\n  return throwError(new AbsoluteRedirect(newTree));\n}\nfunction namedOutletsRedirect(redirectTo) {\n  return throwError(new ɵRuntimeError(4000 /* RuntimeErrorCode.NAMED_OUTLET_REDIRECT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));\n}\nfunction canLoadFails(route) {\n  return throwError(navigationCancelingError((typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`, NavigationCancellationCode.GuardRejected));\n}\nclass ApplyRedirects {\n  urlSerializer;\n  urlTree;\n  constructor(urlSerializer, urlTree) {\n    this.urlSerializer = urlSerializer;\n    this.urlTree = urlTree;\n  }\n  lineralizeSegments(route, urlTree) {\n    let res = [];\n    let c = urlTree.root;\n    while (true) {\n      res = res.concat(c.segments);\n      if (c.numberOfChildren === 0) {\n        return of(res);\n      }\n      if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n        return namedOutletsRedirect(`${route.redirectTo}`);\n      }\n      c = c.children[PRIMARY_OUTLET];\n    }\n  }\n  applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {\n    if (typeof redirectTo !== 'string') {\n      const redirectToFn = redirectTo;\n      const {\n        queryParams,\n        fragment,\n        routeConfig,\n        url,\n        outlet,\n        params,\n        data,\n        title\n      } = currentSnapshot;\n      const newRedirect = runInInjectionContext(injector, () => redirectToFn({\n        params,\n        data,\n        queryParams,\n        fragment,\n        routeConfig,\n        url,\n        outlet,\n        title\n      }));\n      if (newRedirect instanceof UrlTree) {\n        throw new AbsoluteRedirect(newRedirect);\n      }\n      redirectTo = newRedirect;\n    }\n    const newTree = this.applyRedirectCreateUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n    if (redirectTo[0] === '/') {\n      throw new AbsoluteRedirect(newTree);\n    }\n    return newTree;\n  }\n  applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {\n    const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n    return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n  }\n  createQueryParams(redirectToParams, actualParams) {\n    const res = {};\n    Object.entries(redirectToParams).forEach(([k, v]) => {\n      const copySourceValue = typeof v === 'string' && v[0] === ':';\n      if (copySourceValue) {\n        const sourceName = v.substring(1);\n        res[k] = actualParams[sourceName];\n      } else {\n        res[k] = v;\n      }\n    });\n    return res;\n  }\n  createSegmentGroup(redirectTo, group, segments, posParams) {\n    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n    let children = {};\n    Object.entries(group.children).forEach(([name, child]) => {\n      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n    });\n    return new UrlSegmentGroup(updatedSegments, children);\n  }\n  createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {\n    return redirectToSegments.map(s => s.path[0] === ':' ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));\n  }\n  findPosParam(redirectTo, redirectToUrlSegment, posParams) {\n    const pos = posParams[redirectToUrlSegment.path.substring(1)];\n    if (!pos) throw new ɵRuntimeError(4001 /* RuntimeErrorCode.MISSING_REDIRECT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n    return pos;\n  }\n  findOrReturn(redirectToUrlSegment, actualSegments) {\n    let idx = 0;\n    for (const s of actualSegments) {\n      if (s.path === redirectToUrlSegment.path) {\n        actualSegments.splice(idx);\n        return s;\n      }\n      idx++;\n    }\n    return redirectToUrlSegment;\n  }\n}\nconst noMatch = {\n  matched: false,\n  consumedSegments: [],\n  remainingSegments: [],\n  parameters: {},\n  positionalParamSegments: {}\n};\nfunction matchWithChecks(segmentGroup, route, segments, injector, urlSerializer) {\n  const result = match(segmentGroup, route, segments);\n  if (!result.matched) {\n    return of(result);\n  }\n  // Only create the Route's `EnvironmentInjector` if it matches the attempted\n  // navigation\n  injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n  return runCanMatchGuards(injector, route, segments, urlSerializer).pipe(map(v => v === true ? result : {\n    ...noMatch\n  }));\n}\nfunction match(segmentGroup, route, segments) {\n  if (route.path === '**') {\n    return createWildcardMatchResult(segments);\n  }\n  if (route.path === '') {\n    if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n      return {\n        ...noMatch\n      };\n    }\n    return {\n      matched: true,\n      consumedSegments: [],\n      remainingSegments: segments,\n      parameters: {},\n      positionalParamSegments: {}\n    };\n  }\n  const matcher = route.matcher || defaultUrlMatcher;\n  const res = matcher(segments, segmentGroup, route);\n  if (!res) return {\n    ...noMatch\n  };\n  const posParams = {};\n  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n    posParams[k] = v.path;\n  });\n  const parameters = res.consumed.length > 0 ? {\n    ...posParams,\n    ...res.consumed[res.consumed.length - 1].parameters\n  } : posParams;\n  return {\n    matched: true,\n    consumedSegments: res.consumed,\n    remainingSegments: segments.slice(res.consumed.length),\n    // TODO(atscott): investigate combining parameters and positionalParamSegments\n    parameters,\n    positionalParamSegments: res.posParams ?? {}\n  };\n}\nfunction createWildcardMatchResult(segments) {\n  return {\n    matched: true,\n    parameters: segments.length > 0 ? last(segments).parameters : {},\n    consumedSegments: segments,\n    remainingSegments: [],\n    positionalParamSegments: {}\n  };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n  if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n    return {\n      segmentGroup: s,\n      slicedSegments: []\n    };\n  }\n  if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n    return {\n      segmentGroup: s,\n      slicedSegments\n    };\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n  return {\n    segmentGroup: s,\n    slicedSegments\n  };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n  const res = {};\n  for (const r of routes) {\n    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return {\n    ...children,\n    ...res\n  };\n}\nfunction createChildrenForEmptyPaths(routes, primarySegment) {\n  const res = {};\n  res[PRIMARY_OUTLET] = primarySegment;\n  for (const r of routes) {\n    if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return res;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n  return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n  return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n  if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n    return false;\n  }\n  return r.path === '';\n}\nfunction noLeftoversInUrl(segmentGroup, segments, outlet) {\n  return segments.length === 0 && !segmentGroup.children[outlet];\n}\n\n/**\n * Class used to indicate there were no additional route config matches but that all segments of\n * the URL were consumed during matching so the route was URL matched. When this happens, we still\n * try to match child configs in case there are empty path children.\n */\nclass NoLeftoversInUrl {}\nfunction recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = 'emptyOnly') {\n  return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer).recognize();\n}\nconst MAX_ALLOWED_REDIRECTS = 31;\nclass Recognizer {\n  injector;\n  configLoader;\n  rootComponentType;\n  config;\n  urlTree;\n  paramsInheritanceStrategy;\n  urlSerializer;\n  applyRedirects;\n  absoluteRedirectCount = 0;\n  allowRedirects = true;\n  constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer) {\n    this.injector = injector;\n    this.configLoader = configLoader;\n    this.rootComponentType = rootComponentType;\n    this.config = config;\n    this.urlTree = urlTree;\n    this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n    this.urlSerializer = urlSerializer;\n    this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n  }\n  noMatchError(e) {\n    return new ɵRuntimeError(4002 /* RuntimeErrorCode.NO_MATCH */, typeof ngDevMode === 'undefined' || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);\n  }\n  recognize() {\n    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n    return this.match(rootSegmentGroup).pipe(map(({\n      children,\n      rootSnapshot\n    }) => {\n      const rootNode = new TreeNode(rootSnapshot, children);\n      const routeState = new RouterStateSnapshot('', rootNode);\n      const tree = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);\n      // https://github.com/angular/angular/issues/47307\n      // Creating the tree stringifies the query params\n      // We don't want to do this here so reassign them to the original.\n      tree.queryParams = this.urlTree.queryParams;\n      routeState.url = this.urlSerializer.serialize(tree);\n      return {\n        state: routeState,\n        tree\n      };\n    }));\n  }\n  match(rootSegmentGroup) {\n    // Use Object.freeze to prevent readers of the Router state from modifying it outside\n    // of a navigation, resulting in the router being out of sync with the browser.\n    const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({\n      ...this.urlTree.queryParams\n    }), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});\n    return this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot).pipe(map(children => {\n      return {\n        children,\n        rootSnapshot\n      };\n    }), catchError(e => {\n      if (e instanceof AbsoluteRedirect) {\n        this.urlTree = e.urlTree;\n        return this.match(e.urlTree.root);\n      }\n      if (e instanceof NoMatch) {\n        throw this.noMatchError(e);\n      }\n      throw e;\n    }));\n  }\n  processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {\n    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n      return this.processChildren(injector, config, segmentGroup, parentRoute);\n    }\n    return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute).pipe(map(child => child instanceof TreeNode ? [child] : []));\n  }\n  /**\n   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if\n   * we cannot find a match for _any_ of the children.\n   *\n   * @param config - The `Routes` to match against\n   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the\n   *     config.\n   */\n  processChildren(injector, config, segmentGroup, parentRoute) {\n    // Expand outlets one at a time, starting with the primary outlet. We need to do it this way\n    // because an absolute redirect from the primary outlet takes precedence.\n    const childOutlets = [];\n    for (const child of Object.keys(segmentGroup.children)) {\n      if (child === 'primary') {\n        childOutlets.unshift(child);\n      } else {\n        childOutlets.push(child);\n      }\n    }\n    return from(childOutlets).pipe(concatMap(childOutlet => {\n      const child = segmentGroup.children[childOutlet];\n      // Sort the config so that routes with outlets that match the one being activated\n      // appear first, followed by routes for other outlets, which might match if they have\n      // an empty path.\n      const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n      return this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);\n    }), scan((children, outletChildren) => {\n      children.push(...outletChildren);\n      return children;\n    }), defaultIfEmpty(null), last$1(), mergeMap(children => {\n      if (children === null) return noMatch$1(segmentGroup);\n      // Because we may have matched two outlets to the same empty path segment, we can have\n      // multiple activated results for the same outlet. We should merge the children of\n      // these results so the final return value is only one `TreeNode` per outlet.\n      const mergedChildren = mergeEmptyPathMatches(children);\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        // This should really never happen - we are only taking the first match for each\n        // outlet and merge the empty path matches.\n        checkOutletNameUniqueness(mergedChildren);\n      }\n      sortActivatedRouteSnapshots(mergedChildren);\n      return of(mergedChildren);\n    }));\n  }\n  processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {\n    return from(routes).pipe(concatMap(r => {\n      return this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute).pipe(catchError(e => {\n        if (e instanceof NoMatch) {\n          return of(null);\n        }\n        throw e;\n      }));\n    }), first(x => !!x), catchError(e => {\n      if (isEmptyError(e)) {\n        if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n          return of(new NoLeftoversInUrl());\n        }\n        return noMatch$1(segmentGroup);\n      }\n      throw e;\n    }));\n  }\n  processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {\n    // We allow matches to empty paths when the outlets differ so we can match a url like `/(b:b)` to\n    // a config like\n    // * `{path: '', children: [{path: 'b', outlet: 'b'}]}`\n    // or even\n    // * `{path: '', outlet: 'a', children: [{path: 'b', outlet: 'b'}]`\n    //\n    // The exception here is when the segment outlet is for the primary outlet. This would\n    // result in a match inside the named outlet because all children there are written as primary\n    // outlets. So we need to prevent child named outlet matches in a url like `/b` in a config like\n    // * `{path: '', outlet: 'x' children: [{path: 'b'}]}`\n    // This should only match if the url is `/(x:b)`.\n    if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n      return noMatch$1(rawSegment);\n    }\n    if (route.redirectTo === undefined) {\n      return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);\n    }\n    if (this.allowRedirects && allowRedirects) {\n      return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);\n    }\n    return noMatch$1(rawSegment);\n  }\n  expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {\n    const {\n      matched,\n      parameters,\n      consumedSegments,\n      positionalParamSegments,\n      remainingSegments\n    } = match(segmentGroup, route, segments);\n    if (!matched) return noMatch$1(segmentGroup);\n    // TODO(atscott): Move all of this under an if(ngDevMode) as a breaking change and allow stack\n    // size exceeded in production\n    if (typeof route.redirectTo === 'string' && route.redirectTo[0] === '/') {\n      this.absoluteRedirectCount++;\n      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n        if (ngDevMode) {\n          throw new ɵRuntimeError(4016 /* RuntimeErrorCode.INFINITE_REDIRECT */, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.\\n` + `This is currently a dev mode only error but will become a` + ` call stack size exceeded error in production in a future major version.`);\n        }\n        this.allowRedirects = false;\n      }\n    }\n    const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({\n      ...this.urlTree.queryParams\n    }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n    const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);\n    currentSnapshot.params = Object.freeze(inherited.params);\n    currentSnapshot.data = Object.freeze(inherited.data);\n    const newTree = this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, currentSnapshot, injector);\n    return this.applyRedirects.lineralizeSegments(route, newTree).pipe(mergeMap(newSegments => {\n      return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);\n    }));\n  }\n  matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {\n    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);\n    if (route.path === '**') {\n      // Prior versions of the route matching algorithm would stop matching at the wildcard route.\n      // We should investigate a better strategy for any existing children. Otherwise, these\n      // child segments are silently dropped from the navigation.\n      // https://github.com/angular/angular/issues/40089\n      rawSegment.children = {};\n    }\n    return matchResult.pipe(switchMap(result => {\n      if (!result.matched) {\n        return noMatch$1(rawSegment);\n      }\n      // If the route has an injector created from providers, we should start using that.\n      injector = route._injector ?? injector;\n      return this.getChildConfig(injector, route, segments).pipe(switchMap(({\n        routes: childConfig\n      }) => {\n        const childInjector = route._loadedInjector ?? injector;\n        const {\n          parameters,\n          consumedSegments,\n          remainingSegments\n        } = result;\n        const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({\n          ...this.urlTree.queryParams\n        }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n        const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);\n        snapshot.params = Object.freeze(inherited.params);\n        snapshot.data = Object.freeze(inherited.data);\n        const {\n          segmentGroup,\n          slicedSegments\n        } = split(rawSegment, consumedSegments, remainingSegments, childConfig);\n        if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n          return this.processChildren(childInjector, childConfig, segmentGroup, snapshot).pipe(map(children => {\n            return new TreeNode(snapshot, children);\n          }));\n        }\n        if (childConfig.length === 0 && slicedSegments.length === 0) {\n          return of(new TreeNode(snapshot, []));\n        }\n        const matchedOnOutlet = getOutlet(route) === outlet;\n        // If we matched a config due to empty path match on a different outlet, we need to\n        // continue passing the current outlet for the segment rather than switch to PRIMARY.\n        // Note that we switch to primary when we have a match because outlet configs look like\n        // this: {path: 'a', outlet: 'a', children: [\n        //  {path: 'b', component: B},\n        //  {path: 'c', component: C},\n        // ]}\n        // Notice that the children of the named outlet are configured with the primary outlet\n        return this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot).pipe(map(child => {\n          return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n        }));\n      }));\n    }));\n  }\n  getChildConfig(injector, route, segments) {\n    if (route.children) {\n      // The children belong to the same module\n      return of({\n        routes: route.children,\n        injector\n      });\n    }\n    if (route.loadChildren) {\n      // lazy children belong to the loaded module\n      if (route._loadedRoutes !== undefined) {\n        return of({\n          routes: route._loadedRoutes,\n          injector: route._loadedInjector\n        });\n      }\n      return runCanLoadGuards(injector, route, segments, this.urlSerializer).pipe(mergeMap(shouldLoadResult => {\n        if (shouldLoadResult) {\n          return this.configLoader.loadChildren(injector, route).pipe(tap(cfg => {\n            route._loadedRoutes = cfg.routes;\n            route._loadedInjector = cfg.injector;\n          }));\n        }\n        return canLoadFails(route);\n      }));\n    }\n    return of({\n      routes: [],\n      injector\n    });\n  }\n}\nfunction sortActivatedRouteSnapshots(nodes) {\n  nodes.sort((a, b) => {\n    if (a.value.outlet === PRIMARY_OUTLET) return -1;\n    if (b.value.outlet === PRIMARY_OUTLET) return 1;\n    return a.value.outlet.localeCompare(b.value.outlet);\n  });\n}\nfunction hasEmptyPathConfig(node) {\n  const config = node.value.routeConfig;\n  return config && config.path === '';\n}\n/**\n * Finds `TreeNode`s with matching empty path route configs and merges them into `TreeNode` with\n * the children from each duplicate. This is necessary because different outlets can match a\n * single empty path route config and the results need to then be merged.\n */\nfunction mergeEmptyPathMatches(nodes) {\n  const result = [];\n  // The set of nodes which contain children that were merged from two duplicate empty path nodes.\n  const mergedNodes = new Set();\n  for (const node of nodes) {\n    if (!hasEmptyPathConfig(node)) {\n      result.push(node);\n      continue;\n    }\n    const duplicateEmptyPathNode = result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\n    if (duplicateEmptyPathNode !== undefined) {\n      duplicateEmptyPathNode.children.push(...node.children);\n      mergedNodes.add(duplicateEmptyPathNode);\n    } else {\n      result.push(node);\n    }\n  }\n  // For each node which has children from multiple sources, we need to recompute a new `TreeNode`\n  // by also merging those children. This is necessary when there are multiple empty path configs\n  // in a row. Put another way: whenever we combine children of two nodes, we need to also check\n  // if any of those children can be combined into a single node as well.\n  for (const mergedNode of mergedNodes) {\n    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n    result.push(new TreeNode(mergedNode.value, mergedChildren));\n  }\n  return result.filter(n => !mergedNodes.has(n));\n}\nfunction checkOutletNameUniqueness(nodes) {\n  const names = {};\n  nodes.forEach(n => {\n    const routeWithSameOutletName = names[n.value.outlet];\n    if (routeWithSameOutletName) {\n      const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n      const c = n.value.url.map(s => s.toString()).join('/');\n      throw new ɵRuntimeError(4006 /* RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n    }\n    names[n.value.outlet] = n.value;\n  });\n}\nfunction getData(route) {\n  return route.data || {};\n}\nfunction getResolve(route) {\n  return route.resolve || {};\n}\nfunction recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy) {\n  return mergeMap(t => recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy).pipe(map(({\n    state: targetSnapshot,\n    tree: urlAfterRedirects\n  }) => {\n    return {\n      ...t,\n      targetSnapshot,\n      urlAfterRedirects\n    };\n  })));\n}\nfunction resolveData(paramsInheritanceStrategy, injector) {\n  return mergeMap(t => {\n    const {\n      targetSnapshot,\n      guards: {\n        canActivateChecks\n      }\n    } = t;\n    if (!canActivateChecks.length) {\n      return of(t);\n    }\n    // Iterating a Set in javascript  happens in insertion order so it is safe to use a `Set` to\n    // preserve the correct order that the resolvers should run in.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#description\n    const routesWithResolversToRun = new Set(canActivateChecks.map(check => check.route));\n    const routesNeedingDataUpdates = new Set();\n    for (const route of routesWithResolversToRun) {\n      if (routesNeedingDataUpdates.has(route)) {\n        continue;\n      }\n      // All children under the route with a resolver to run need to recompute inherited data.\n      for (const newRoute of flattenRouteTree(route)) {\n        routesNeedingDataUpdates.add(newRoute);\n      }\n    }\n    let routesProcessed = 0;\n    return from(routesNeedingDataUpdates).pipe(concatMap(route => {\n      if (routesWithResolversToRun.has(route)) {\n        return runResolve(route, targetSnapshot, paramsInheritanceStrategy, injector);\n      } else {\n        route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n        return of(void 0);\n      }\n    }), tap(() => routesProcessed++), takeLast(1), mergeMap(_ => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY));\n  });\n}\n/**\n *  Returns the `ActivatedRouteSnapshot` tree as an array, using DFS to traverse the route tree.\n */\nfunction flattenRouteTree(route) {\n  const descendants = route.children.map(child => flattenRouteTree(child)).flat();\n  return [route, ...descendants];\n}\nfunction runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {\n  const config = futureARS.routeConfig;\n  const resolve = futureARS._resolve;\n  if (config?.title !== undefined && !hasStaticTitle(config)) {\n    resolve[RouteTitleKey] = config.title;\n  }\n  return resolveNode(resolve, futureARS, futureRSS, injector).pipe(map(resolvedData => {\n    futureARS._resolvedData = resolvedData;\n    futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n    return null;\n  }));\n}\nfunction resolveNode(resolve, futureARS, futureRSS, injector) {\n  const keys = getDataKeys(resolve);\n  if (keys.length === 0) {\n    return of({});\n  }\n  const data = {};\n  return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS, injector).pipe(first(), tap(value => {\n    if (value instanceof RedirectCommand) {\n      throw redirectingNavigationError(new DefaultUrlSerializer(), value);\n    }\n    data[key] = value;\n  }))), takeLast(1), mapTo(data), catchError(e => isEmptyError(e) ? EMPTY : throwError(e)));\n}\nfunction getResolver(injectionToken, futureARS, futureRSS, injector) {\n  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n  const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n  return wrapIntoObservable(resolverValue);\n}\n\n/**\n * Perform a side effect through a switchMap for every emission on the source Observable,\n * but return an Observable that is identical to the source. It's essentially the same as\n * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,\n * it will wait before continuing with the original value.\n */\nfunction switchTap(next) {\n  return switchMap(v => {\n    const nextResult = next(v);\n    if (nextResult) {\n      return from(nextResult).pipe(map(() => v));\n    }\n    return of(v);\n  });\n}\n\n/**\n * Provides a strategy for setting the page title after a router navigation.\n *\n * The built-in implementation traverses the router state snapshot and finds the deepest primary\n * outlet with `title` property. Given the `Routes` below, navigating to\n * `/base/child(popup:aux)` would result in the document title being set to \"child\".\n * ```ts\n * [\n *   {path: 'base', title: 'base', children: [\n *     {path: 'child', title: 'child'},\n *   ],\n *   {path: 'aux', outlet: 'popup', title: 'popupTitle'}\n * ]\n * ```\n *\n * This class can be used as a base class for custom title strategies. That is, you can create your\n * own class that extends the `TitleStrategy`. Note that in the above example, the `title`\n * from the named outlet is never used. However, a custom strategy might be implemented to\n * incorporate titles in named outlets.\n *\n * @publicApi\n * @see [Page title guide](guide/routing/common-router-tasks#setting-the-page-title)\n */\nclass TitleStrategy {\n  /**\n   * @returns The `title` of the deepest primary route.\n   */\n  buildTitle(snapshot) {\n    let pageTitle;\n    let route = snapshot.root;\n    while (route !== undefined) {\n      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n      route = route.children.find(child => child.outlet === PRIMARY_OUTLET);\n    }\n    return pageTitle;\n  }\n  /**\n   * Given an `ActivatedRouteSnapshot`, returns the final value of the\n   * `Route.title` property, which can either be a static string or a resolved value.\n   */\n  getResolvedTitleForRoute(snapshot) {\n    return snapshot.data[RouteTitleKey];\n  }\n  static ɵfac = function TitleStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TitleStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: TitleStrategy,\n    factory: () => (() => inject(DefaultTitleStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TitleStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultTitleStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * The default `TitleStrategy` used by the router that updates the title using the `Title` service.\n */\nclass DefaultTitleStrategy extends TitleStrategy {\n  title;\n  constructor(title) {\n    super();\n    this.title = title;\n  }\n  /**\n   * Sets the title of the browser to the given value.\n   *\n   * @param title The `pageTitle` from the deepest primary route.\n   */\n  updateTitle(snapshot) {\n    const title = this.buildTitle(snapshot);\n    if (title !== undefined) {\n      this.title.setTitle(title);\n    }\n  }\n  static ɵfac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DefaultTitleStrategy)(i0.ɵɵinject(i1.Title));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultTitleStrategy,\n    factory: DefaultTitleStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultTitleStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i1.Title\n  }], null);\n})();\n\n/**\n * A DI token for the router service.\n *\n * @publicApi\n */\nconst ROUTER_CONFIGURATION = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router config' : '', {\n  providedIn: 'root',\n  factory: () => ({})\n});\n\n/**\n * This component is used internally within the router to be a placeholder when an empty\n * router-outlet is needed. For example, with a config such as:\n *\n * `{path: 'parent', outlet: 'nav', children: [...]}`\n *\n * In order to render, there needs to be a component on this config, which will default\n * to this `EmptyOutletComponent`.\n */\nclass ɵEmptyOutletComponent {\n  static ɵfac = function ɵEmptyOutletComponent_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ɵEmptyOutletComponent)();\n  };\n  static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n    type: ɵEmptyOutletComponent,\n    selectors: [[\"ng-component\"]],\n    decls: 1,\n    vars: 0,\n    template: function _EmptyOutletComponent_Template(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵelement(0, \"router-outlet\");\n      }\n    },\n    dependencies: [RouterOutlet],\n    encapsulation: 2\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ɵEmptyOutletComponent, [{\n    type: Component,\n    args: [{\n      template: `<router-outlet></router-outlet>`,\n      imports: [RouterOutlet]\n    }]\n  }], null, null);\n})();\n/**\n * Makes a copy of the config and adds any default required properties.\n */\nfunction standardizeConfig(r) {\n  const children = r.children && r.children.map(standardizeConfig);\n  const c = children ? {\n    ...r,\n    children\n  } : {\n    ...r\n  };\n  if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {\n    c.component = ɵEmptyOutletComponent;\n  }\n  return c;\n}\n\n/**\n * The DI token for a router configuration.\n *\n * `ROUTES` is a low level API for router configuration via dependency injection.\n *\n * We recommend that in almost all cases to use higher level APIs such as `RouterModule.forRoot()`,\n * `provideRouter`, or `Router.resetConfig()`.\n *\n * @publicApi\n */\nconst ROUTES = new InjectionToken(ngDevMode ? 'ROUTES' : '');\nclass RouterConfigLoader {\n  componentLoaders = new WeakMap();\n  childrenLoaders = new WeakMap();\n  onLoadStartListener;\n  onLoadEndListener;\n  compiler = inject(Compiler);\n  loadComponent(route) {\n    if (this.componentLoaders.get(route)) {\n      return this.componentLoaders.get(route);\n    } else if (route._loadedComponent) {\n      return of(route._loadedComponent);\n    }\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const loadRunner = wrapIntoObservable(route.loadComponent()).pipe(map(maybeUnwrapDefaultExport), tap(component => {\n      if (this.onLoadEndListener) {\n        this.onLoadEndListener(route);\n      }\n      (typeof ngDevMode === 'undefined' || ngDevMode) && assertStandalone(route.path ?? '', component);\n      route._loadedComponent = component;\n    }), finalize(() => {\n      this.componentLoaders.delete(route);\n    }));\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());\n    this.componentLoaders.set(route, loader);\n    return loader;\n  }\n  loadChildren(parentInjector, route) {\n    if (this.childrenLoaders.get(route)) {\n      return this.childrenLoaders.get(route);\n    } else if (route._loadedRoutes) {\n      return of({\n        routes: route._loadedRoutes,\n        injector: route._loadedInjector\n      });\n    }\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const moduleFactoryOrRoutes$ = loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\n    const loadRunner = moduleFactoryOrRoutes$.pipe(finalize(() => {\n      this.childrenLoaders.delete(route);\n    }));\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());\n    this.childrenLoaders.set(route, loader);\n    return loader;\n  }\n  static ɵfac = function RouterConfigLoader_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterConfigLoader)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterConfigLoader,\n    factory: RouterConfigLoader.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterConfigLoader, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Executes a `route.loadChildren` callback and converts the result to an array of child routes and\n * an injector if that callback returned a module.\n *\n * This function is used for the route discovery during prerendering\n * in @angular-devkit/build-angular. If there are any updates to the contract here, it will require\n * an update to the extractor.\n */\nfunction loadChildren(route, compiler, parentInjector, onLoadEndListener) {\n  return wrapIntoObservable(route.loadChildren()).pipe(map(maybeUnwrapDefaultExport), mergeMap(t => {\n    if (t instanceof NgModuleFactory || Array.isArray(t)) {\n      return of(t);\n    } else {\n      return from(compiler.compileModuleAsync(t));\n    }\n  }), map(factoryOrRoutes => {\n    if (onLoadEndListener) {\n      onLoadEndListener(route);\n    }\n    // This injector comes from the `NgModuleRef` when lazy loading an `NgModule`. There is\n    // no injector associated with lazy loading a `Route` array.\n    let injector;\n    let rawRoutes;\n    let requireStandaloneComponents = false;\n    if (Array.isArray(factoryOrRoutes)) {\n      rawRoutes = factoryOrRoutes;\n      requireStandaloneComponents = true;\n    } else {\n      injector = factoryOrRoutes.create(parentInjector).injector;\n      // When loading a module that doesn't provide `RouterModule.forChild()` preloader\n      // will get stuck in an infinite loop. The child module's Injector will look to\n      // its parent `Injector` when it doesn't find any ROUTES so it will return routes\n      // for it's parent module instead.\n      rawRoutes = injector.get(ROUTES, [], {\n        optional: true,\n        self: true\n      }).flat();\n    }\n    const routes = rawRoutes.map(standardizeConfig);\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);\n    return {\n      routes,\n      injector\n    };\n  }));\n}\nfunction isWrappedDefaultExport(value) {\n  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be\n  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that\n  // `default` will be a renamed property.\n  return value && typeof value === 'object' && 'default' in value;\n}\nfunction maybeUnwrapDefaultExport(input) {\n  // As per `isWrappedDefaultExport`, the `default` key here is generated by the browser and not\n  // subject to property renaming, so we reference it with bracket access.\n  return isWrappedDefaultExport(input) ? input['default'] : input;\n}\n\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @publicApi\n */\nclass UrlHandlingStrategy {\n  static ɵfac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UrlHandlingStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: UrlHandlingStrategy,\n    factory: () => (() => inject(DefaultUrlHandlingStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UrlHandlingStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultUrlHandlingStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * @publicApi\n */\nclass DefaultUrlHandlingStrategy {\n  shouldProcessUrl(url) {\n    return true;\n  }\n  extract(url) {\n    return url;\n  }\n  merge(newUrlPart, wholeUrl) {\n    return newUrlPart;\n  }\n  static ɵfac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DefaultUrlHandlingStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultUrlHandlingStrategy,\n    factory: DefaultUrlHandlingStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultUrlHandlingStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n\n/// <reference types=\"dom-view-transitions\" />\nconst CREATE_VIEW_TRANSITION = new InjectionToken(ngDevMode ? 'view transition helper' : '');\nconst VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? 'view transition options' : '');\n/**\n * A helper function for using browser view transitions. This function skips the call to\n * `startViewTransition` if the browser does not support it.\n *\n * @returns A Promise that resolves when the view transition callback begins.\n */\nfunction createViewTransition(injector, from, to) {\n  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n  const document = injector.get(DOCUMENT);\n  // Create promises outside the Angular zone to avoid causing extra change detections\n  return injector.get(NgZone).runOutsideAngular(() => {\n    if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n      transitionOptions.skipNextTransition = false;\n      // The timing of `startViewTransition` is closer to a macrotask. It won't be called\n      // until the current event loop exits so we use a promise resolved in a timeout instead\n      // of Promise.resolve().\n      return new Promise(resolve => setTimeout(resolve));\n    }\n    let resolveViewTransitionStarted;\n    const viewTransitionStarted = new Promise(resolve => {\n      resolveViewTransitionStarted = resolve;\n    });\n    const transition = document.startViewTransition(() => {\n      resolveViewTransitionStarted();\n      // We don't actually update dom within the transition callback. The resolving of the above\n      // promise unblocks the Router navigation, which synchronously activates and deactivates\n      // routes (the DOM update). This view transition waits for the next change detection to\n      // complete (below), which includes the update phase of the routed components.\n      return createRenderPromise(injector);\n    });\n    const {\n      onViewTransitionCreated\n    } = transitionOptions;\n    if (onViewTransitionCreated) {\n      runInInjectionContext(injector, () => onViewTransitionCreated({\n        transition,\n        from,\n        to\n      }));\n    }\n    return viewTransitionStarted;\n  });\n}\n/**\n * Creates a promise that resolves after next render.\n */\nfunction createRenderPromise(injector) {\n  return new Promise(resolve => {\n    // Wait for the microtask queue to empty after the next render happens (by waiting a macrotask).\n    // This ensures any follow-up renders in the microtask queue are completed before the\n    // view transition starts animating.\n    afterNextRender({\n      read: () => setTimeout(resolve)\n    }, {\n      injector\n    });\n  });\n}\nconst NAVIGATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');\nclass NavigationTransitions {\n  currentNavigation = null;\n  currentTransition = null;\n  lastSuccessfulNavigation = null;\n  /**\n   * These events are used to communicate back to the Router about the state of the transition. The\n   * Router wants to respond to these events in various ways. Because the `NavigationTransition`\n   * class is not public, this event subject is not publicly exposed.\n   */\n  events = new Subject();\n  /**\n   * Used to abort the current transition with an error.\n   */\n  transitionAbortSubject = new Subject();\n  configLoader = inject(RouterConfigLoader);\n  environmentInjector = inject(EnvironmentInjector);\n  urlSerializer = inject(UrlSerializer);\n  rootContexts = inject(ChildrenOutletContexts);\n  location = inject(Location);\n  inputBindingEnabled = inject(INPUT_BINDER, {\n    optional: true\n  }) !== null;\n  titleStrategy = inject(TitleStrategy);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || 'emptyOnly';\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  createViewTransition = inject(CREATE_VIEW_TRANSITION, {\n    optional: true\n  });\n  navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {\n    optional: true\n  });\n  navigationId = 0;\n  get hasRequestedNavigation() {\n    return this.navigationId !== 0;\n  }\n  transitions;\n  /**\n   * Hook that enables you to pause navigation after the preactivation phase.\n   * Used by `RouterModule`.\n   *\n   * @internal\n   */\n  afterPreactivation = () => of(void 0);\n  /** @internal */\n  rootComponentType = null;\n  constructor() {\n    const onLoadStart = r => this.events.next(new RouteConfigLoadStart(r));\n    const onLoadEnd = r => this.events.next(new RouteConfigLoadEnd(r));\n    this.configLoader.onLoadEndListener = onLoadEnd;\n    this.configLoader.onLoadStartListener = onLoadStart;\n  }\n  complete() {\n    this.transitions?.complete();\n  }\n  handleNavigationRequest(request) {\n    const id = ++this.navigationId;\n    this.transitions?.next({\n      ...this.transitions.value,\n      ...request,\n      id\n    });\n  }\n  setupNavigations(router, initialUrlTree, initialRouterState) {\n    this.transitions = new BehaviorSubject({\n      id: 0,\n      currentUrlTree: initialUrlTree,\n      currentRawUrl: initialUrlTree,\n      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),\n      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),\n      rawUrl: initialUrlTree,\n      extras: {},\n      resolve: () => {},\n      reject: () => {},\n      promise: Promise.resolve(true),\n      source: IMPERATIVE_NAVIGATION,\n      restoredState: null,\n      currentSnapshot: initialRouterState.snapshot,\n      targetSnapshot: null,\n      currentRouterState: initialRouterState,\n      targetRouterState: null,\n      guards: {\n        canActivateChecks: [],\n        canDeactivateChecks: []\n      },\n      guardsResult: null\n    });\n    return this.transitions.pipe(filter(t => t.id !== 0),\n    // Extract URL\n    map(t => ({\n      ...t,\n      extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)\n    })),\n    // Using switchMap so we cancel executing navigations when a new one comes in\n    switchMap(overallTransitionState => {\n      let completed = false;\n      let errored = false;\n      return of(overallTransitionState).pipe(switchMap(t => {\n        // It is possible that `switchMap` fails to cancel previous navigations if a new one happens synchronously while the operator\n        // is processing the `next` notification of that previous navigation. This can happen when a new navigation (say 2) cancels a\n        // previous one (1) and yet another navigation (3) happens synchronously in response to the `NavigationCancel` event for (1).\n        // https://github.com/ReactiveX/rxjs/issues/7455\n        if (this.navigationId > overallTransitionState.id) {\n          const cancellationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n          this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);\n          return EMPTY;\n        }\n        this.currentTransition = overallTransitionState;\n        // Store the Navigation object\n        this.currentNavigation = {\n          id: t.id,\n          initialUrl: t.rawUrl,\n          extractedUrl: t.extractedUrl,\n          targetBrowserUrl: typeof t.extras.browserUrl === 'string' ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,\n          trigger: t.source,\n          extras: t.extras,\n          previousNavigation: !this.lastSuccessfulNavigation ? null : {\n            ...this.lastSuccessfulNavigation,\n            previousNavigation: null\n          }\n        };\n        const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n        const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n        if (!urlTransition && onSameUrlNavigation !== 'reload') {\n          const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : '';\n          this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));\n          t.resolve(false);\n          return EMPTY;\n        }\n        if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n          return of(t).pipe(\n          // Fire NavigationStart event\n          switchMap(t => {\n            const transition = this.transitions?.getValue();\n            this.events.next(new NavigationStart(t.id, this.urlSerializer.serialize(t.extractedUrl), t.source, t.restoredState));\n            if (transition !== this.transitions?.getValue()) {\n              return EMPTY;\n            }\n            // This delay is required to match old behavior that forced\n            // navigation to always be async\n            return Promise.resolve(t);\n          }),\n          // Recognize\n          recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy),\n          // Update URL if in `eager` update mode\n          tap(t => {\n            overallTransitionState.targetSnapshot = t.targetSnapshot;\n            overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n            this.currentNavigation = {\n              ...this.currentNavigation,\n              finalUrl: t.urlAfterRedirects\n            };\n            // Fire RoutesRecognized\n            const routesRecognized = new RoutesRecognized(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(routesRecognized);\n          }));\n        } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\n          /* When the current URL shouldn't be processed, but the previous one\n           * was, we handle this \"error condition\" by navigating to the\n           * previously successful URL, but leaving the URL intact.*/\n          const {\n            id,\n            extractedUrl,\n            source,\n            restoredState,\n            extras\n          } = t;\n          const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);\n          this.events.next(navStart);\n          const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;\n          this.currentTransition = overallTransitionState = {\n            ...t,\n            targetSnapshot,\n            urlAfterRedirects: extractedUrl,\n            extras: {\n              ...extras,\n              skipLocationChange: false,\n              replaceUrl: false\n            }\n          };\n          this.currentNavigation.finalUrl = extractedUrl;\n          return of(overallTransitionState);\n        } else {\n          /* When neither the current or previous URL can be processed, do\n           * nothing other than update router's internal reference to the\n           * current \"settled\" URL. This way the next navigation will be coming\n           * from the current URL in the browser.\n           */\n          const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy` + ` indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : '';\n          this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n          t.resolve(false);\n          return EMPTY;\n        }\n      }),\n      // --- GUARDS ---\n      tap(t => {\n        const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n        this.events.next(guardsStart);\n      }), map(t => {\n        this.currentTransition = overallTransitionState = {\n          ...t,\n          guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)\n        };\n        return overallTransitionState;\n      }), checkGuards(this.environmentInjector, evt => this.events.next(evt)), tap(t => {\n        overallTransitionState.guardsResult = t.guardsResult;\n        if (t.guardsResult && typeof t.guardsResult !== 'boolean') {\n          throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n        }\n        const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);\n        this.events.next(guardsEnd);\n      }), filter(t => {\n        if (!t.guardsResult) {\n          this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);\n          return false;\n        }\n        return true;\n      }),\n      // --- RESOLVE ---\n      switchTap(t => {\n        if (t.guards.canActivateChecks.length) {\n          return of(t).pipe(tap(t => {\n            const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(resolveStart);\n          }), switchMap(t => {\n            let dataResolved = false;\n            return of(t).pipe(resolveData(this.paramsInheritanceStrategy, this.environmentInjector), tap({\n              next: () => dataResolved = true,\n              complete: () => {\n                if (!dataResolved) {\n                  this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);\n                }\n              }\n            }));\n          }), tap(t => {\n            const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(resolveEnd);\n          }));\n        }\n        return undefined;\n      }),\n      // --- LOAD COMPONENTS ---\n      switchTap(t => {\n        const loadComponents = route => {\n          const loaders = [];\n          if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) {\n            loaders.push(this.configLoader.loadComponent(route.routeConfig).pipe(tap(loadedComponent => {\n              route.component = loadedComponent;\n            }), map(() => void 0)));\n          }\n          for (const child of route.children) {\n            loaders.push(...loadComponents(child));\n          }\n          return loaders;\n        };\n        return combineLatest(loadComponents(t.targetSnapshot.root)).pipe(defaultIfEmpty(null), take(1));\n      }), switchTap(() => this.afterPreactivation()), switchMap(() => {\n        const {\n          currentSnapshot,\n          targetSnapshot\n        } = overallTransitionState;\n        const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);\n        // If view transitions are enabled, block the navigation until the view\n        // transition callback starts. Otherwise, continue immediately.\n        return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);\n      }), map(t => {\n        const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);\n        this.currentTransition = overallTransitionState = {\n          ...t,\n          targetRouterState\n        };\n        this.currentNavigation.targetRouterState = targetRouterState;\n        return overallTransitionState;\n      }), tap(() => {\n        this.events.next(new BeforeActivateRoutes());\n      }), activateRoutes(this.rootContexts, router.routeReuseStrategy, evt => this.events.next(evt), this.inputBindingEnabled),\n      // Ensure that if some observable used to drive the transition doesn't\n      // complete, the navigation still finalizes This should never happen, but\n      // this is done as a safety measure to avoid surfacing this error (#49567).\n      take(1), tap({\n        next: t => {\n          completed = true;\n          this.lastSuccessfulNavigation = this.currentNavigation;\n          this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));\n          this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);\n          t.resolve(true);\n        },\n        complete: () => {\n          completed = true;\n        }\n      }),\n      // There used to be a lot more logic happening directly within the\n      // transition Observable. Some of this logic has been refactored out to\n      // other places but there may still be errors that happen there. This gives\n      // us a way to cancel the transition from the outside. This may also be\n      // required in the future to support something like the abort signal of the\n      // Navigation API where the navigation gets aborted from outside the\n      // transition.\n      takeUntil(this.transitionAbortSubject.pipe(tap(err => {\n        throw err;\n      }))), finalize(() => {\n        /* When the navigation stream finishes either through error or success,\n         * we set the `completed` or `errored` flag. However, there are some\n         * situations where we could get here without either of those being set.\n         * For instance, a redirect during NavigationStart. Therefore, this is a\n         * catch-all to make sure the NavigationCancel event is fired when a\n         * navigation gets cancelled but not caught by other means. */\n        if (!completed && !errored) {\n          const cancelationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n          this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);\n        }\n        // Only clear current navigation if it is still set to the one that\n        // finalized.\n        if (this.currentTransition?.id === overallTransitionState.id) {\n          this.currentNavigation = null;\n          this.currentTransition = null;\n        }\n      }), catchError(e => {\n        errored = true;\n        /* This error type is issued during Redirect, and is handled as a\n         * cancellation rather than an error. */\n        if (isNavigationCancelingError(e)) {\n          this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));\n          // When redirecting, we need to delay resolving the navigation\n          // promise and push it to the redirect navigation\n          if (!isRedirectingNavigationCancelingError(e)) {\n            overallTransitionState.resolve(false);\n          } else {\n            this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));\n          }\n          /* All other errors should reset to the router's internal URL reference\n           * to the pre-error state. */\n        } else {\n          const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? undefined);\n          try {\n            const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));\n            if (navigationErrorHandlerResult instanceof RedirectCommand) {\n              const {\n                message,\n                cancellationCode\n              } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);\n              this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));\n              this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));\n            } else {\n              this.events.next(navigationError);\n              throw e;\n            }\n          } catch (ee) {\n            // TODO(atscott): consider flipping the default behavior of\n            // resolveNavigationPromiseOnError to be `resolve(false)` when\n            // undefined. This is the most sane thing to do given that\n            // applications very rarely handle the promise rejection and, as a\n            // result, would get \"unhandled promise rejection\" console logs.\n            // The vast majority of applications would not be affected by this\n            // change so omitting a migration seems reasonable. Instead,\n            // applications that rely on rejection can specifically opt-in to the\n            // old behavior.\n            if (this.options.resolveNavigationPromiseOnError) {\n              overallTransitionState.resolve(false);\n            } else {\n              overallTransitionState.reject(ee);\n            }\n          }\n        }\n        return EMPTY;\n      }));\n      // casting because `pipe` returns observable({}) when called with 8+ arguments\n    }));\n  }\n  cancelNavigationTransition(t, reason, code) {\n    const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\n    this.events.next(navCancel);\n    t.resolve(false);\n  }\n  /**\n   * @returns Whether we're navigating to somewhere that is not what the Router is\n   * currently set to.\n   */\n  isUpdatingInternalState() {\n    // TODO(atscott): The serializer should likely be used instead of\n    // `UrlTree.toString()`. Custom serializers are often written to handle\n    // things better than the default one (objects, for example will be\n    // [Object object] with the custom serializer and be \"the same\" when they\n    // aren't).\n    // (Same for isUpdatedBrowserUrl)\n    return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();\n  }\n  /**\n   * @returns Whether we're updating the browser URL to something new (navigation is going\n   * to somewhere not displayed in the URL bar and we will update the URL\n   * bar if navigation succeeds).\n   */\n  isUpdatedBrowserUrl() {\n    // The extracted URL is the part of the URL that this application cares about. `extract` may\n    // return only part of the browser URL and that part may have not changed even if some other\n    // portion of the URL did.\n    const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n    const targetBrowserUrl = this.currentNavigation?.targetBrowserUrl ?? this.currentNavigation?.extractedUrl;\n    return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !this.currentNavigation?.extras.skipLocationChange;\n  }\n  static ɵfac = function NavigationTransitions_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NavigationTransitions)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NavigationTransitions,\n    factory: NavigationTransitions.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NavigationTransitions, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction isBrowserTriggeredNavigation(source) {\n  return source !== IMPERATIVE_NAVIGATION;\n}\n\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @publicApi\n */\nclass RouteReuseStrategy {\n  static ɵfac = function RouteReuseStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouteReuseStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouteReuseStrategy,\n    factory: () => (() => inject(DefaultRouteReuseStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouteReuseStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultRouteReuseStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * This base route reuse strategy only reuses routes when the matched router configs are\n * identical. This prevents components from being destroyed and recreated\n * when just the route parameters, query parameters or fragment change\n * (that is, the existing component is _reused_).\n *\n * This strategy does not store any routes for later reuse.\n *\n * Angular uses this strategy by default.\n *\n *\n * It can be used as a base class for custom route reuse strategies, i.e. you can create your own\n * class that extends the `BaseRouteReuseStrategy` one.\n * @publicApi\n */\nclass BaseRouteReuseStrategy {\n  /**\n   * Whether the given route should detach for later reuse.\n   * Always returns false for `BaseRouteReuseStrategy`.\n   * */\n  shouldDetach(route) {\n    return false;\n  }\n  /**\n   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.\n   */\n  store(route, detachedTree) {}\n  /** Returns `false`, meaning the route (and its subtree) is never reattached */\n  shouldAttach(route) {\n    return false;\n  }\n  /** Returns `null` because this strategy does not store routes for later re-use. */\n  retrieve(route) {\n    return null;\n  }\n  /**\n   * Determines if a route should be reused.\n   * This strategy returns `true` when the future route config and current route config are\n   * identical.\n   */\n  shouldReuseRoute(future, curr) {\n    return future.routeConfig === curr.routeConfig;\n  }\n}\nclass DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {\n  static ɵfac = /* @__PURE__ */(() => {\n    let ɵDefaultRouteReuseStrategy_BaseFactory;\n    return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {\n      return (ɵDefaultRouteReuseStrategy_BaseFactory || (ɵDefaultRouteReuseStrategy_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultRouteReuseStrategy)))(__ngFactoryType__ || DefaultRouteReuseStrategy);\n    };\n  })();\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultRouteReuseStrategy,\n    factory: DefaultRouteReuseStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultRouteReuseStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nclass StateManager {\n  static ɵfac = function StateManager_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || StateManager)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: StateManager,\n    factory: () => (() => inject(HistoryStateManager))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StateManager, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(HistoryStateManager)\n    }]\n  }], null, null);\n})();\nclass HistoryStateManager extends StateManager {\n  location = inject(Location);\n  urlSerializer = inject(UrlSerializer);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  canceledNavigationResolution = this.options.canceledNavigationResolution || 'replace';\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  currentUrlTree = new UrlTree();\n  getCurrentUrlTree() {\n    return this.currentUrlTree;\n  }\n  rawUrlTree = this.currentUrlTree;\n  getRawUrlTree() {\n    return this.rawUrlTree;\n  }\n  /**\n   * The id of the currently active page in the router.\n   * Updated to the transition's target id on a successful navigation.\n   *\n   * This is used to track what page the router last activated. When an attempted navigation fails,\n   * the router can then use this to compute how to restore the state back to the previously active\n   * page.\n   */\n  currentPageId = 0;\n  lastSuccessfulId = -1;\n  restoredState() {\n    return this.location.getState();\n  }\n  /**\n   * The ɵrouterPageId of whatever page is currently active in the browser history. This is\n   * important for computing the target page id for new navigations because we need to ensure each\n   * page id in the browser history is 1 more than the previous entry.\n   */\n  get browserPageId() {\n    if (this.canceledNavigationResolution !== 'computed') {\n      return this.currentPageId;\n    }\n    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;\n  }\n  routerState = createEmptyState(null);\n  getRouterState() {\n    return this.routerState;\n  }\n  stateMemento = this.createStateMemento();\n  createStateMemento() {\n    return {\n      rawUrlTree: this.rawUrlTree,\n      currentUrlTree: this.currentUrlTree,\n      routerState: this.routerState\n    };\n  }\n  registerNonRouterCurrentEntryChangeListener(listener) {\n    return this.location.subscribe(event => {\n      if (event['type'] === 'popstate') {\n        listener(event['url'], event.state);\n      }\n    });\n  }\n  handleRouterEvent(e, currentTransition) {\n    if (e instanceof NavigationStart) {\n      this.stateMemento = this.createStateMemento();\n    } else if (e instanceof NavigationSkipped) {\n      this.rawUrlTree = currentTransition.initialUrl;\n    } else if (e instanceof RoutesRecognized) {\n      if (this.urlUpdateStrategy === 'eager') {\n        if (!currentTransition.extras.skipLocationChange) {\n          const rawUrl = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);\n          this.setBrowserUrl(currentTransition.targetBrowserUrl ?? rawUrl, currentTransition);\n        }\n      }\n    } else if (e instanceof BeforeActivateRoutes) {\n      this.currentUrlTree = currentTransition.finalUrl;\n      this.rawUrlTree = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);\n      this.routerState = currentTransition.targetRouterState;\n      if (this.urlUpdateStrategy === 'deferred' && !currentTransition.extras.skipLocationChange) {\n        this.setBrowserUrl(currentTransition.targetBrowserUrl ?? this.rawUrlTree, currentTransition);\n      }\n    } else if (e instanceof NavigationCancel && (e.code === NavigationCancellationCode.GuardRejected || e.code === NavigationCancellationCode.NoDataFromResolver)) {\n      this.restoreHistory(currentTransition);\n    } else if (e instanceof NavigationError) {\n      this.restoreHistory(currentTransition, true);\n    } else if (e instanceof NavigationEnd) {\n      this.lastSuccessfulId = e.id;\n      this.currentPageId = this.browserPageId;\n    }\n  }\n  setBrowserUrl(url, transition) {\n    const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;\n    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {\n      // replacements do not update the target page\n      const currentBrowserPageId = this.browserPageId;\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, currentBrowserPageId)\n      };\n      this.location.replaceState(path, '', state);\n    } else {\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, this.browserPageId + 1)\n      };\n      this.location.go(path, '', state);\n    }\n  }\n  /**\n   * Performs the necessary rollback action to restore the browser URL to the\n   * state before the transition.\n   */\n  restoreHistory(navigation, restoringFromCaughtError = false) {\n    if (this.canceledNavigationResolution === 'computed') {\n      const currentBrowserPageId = this.browserPageId;\n      const targetPagePosition = this.currentPageId - currentBrowserPageId;\n      if (targetPagePosition !== 0) {\n        this.location.historyGo(targetPagePosition);\n      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {\n        // We got to the activation stage (where currentUrlTree is set to the navigation's\n        // finalUrl), but we weren't moving anywhere in history (skipLocationChange or replaceUrl).\n        // We still need to reset the router state back to what it was when the navigation started.\n        this.resetState(navigation);\n        this.resetUrlToCurrentUrlTree();\n      } else {\n        // The browser URL and router state was not updated before the navigation cancelled so\n        // there's no restoration needed.\n      }\n    } else if (this.canceledNavigationResolution === 'replace') {\n      // TODO(atscott): It seems like we should _always_ reset the state here. It would be a no-op\n      // for `deferred` navigations that haven't change the internal state yet because guards\n      // reject. For 'eager' navigations, it seems like we also really should reset the state\n      // because the navigation was cancelled. Investigate if this can be done by running TGP.\n      if (restoringFromCaughtError) {\n        this.resetState(navigation);\n      }\n      this.resetUrlToCurrentUrlTree();\n    }\n  }\n  resetState(navigation) {\n    this.routerState = this.stateMemento.routerState;\n    this.currentUrlTree = this.stateMemento.currentUrlTree;\n    // Note here that we use the urlHandlingStrategy to get the reset `rawUrlTree` because it may be\n    // configured to handle only part of the navigation URL. This means we would only want to reset\n    // the part of the navigation handled by the Angular router rather than the whole URL. In\n    // addition, the URLHandlingStrategy may be configured to specifically preserve parts of the URL\n    // when merging, such as the query params so they are not lost on a refresh.\n    this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);\n  }\n  resetUrlToCurrentUrlTree() {\n    this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\n  }\n  generateNgRouterState(navigationId, routerPageId) {\n    if (this.canceledNavigationResolution === 'computed') {\n      return {\n        navigationId,\n        ɵrouterPageId: routerPageId\n      };\n    }\n    return {\n      navigationId\n    };\n  }\n  static ɵfac = /* @__PURE__ */(() => {\n    let ɵHistoryStateManager_BaseFactory;\n    return function HistoryStateManager_Factory(__ngFactoryType__) {\n      return (ɵHistoryStateManager_BaseFactory || (ɵHistoryStateManager_BaseFactory = i0.ɵɵgetInheritedFactory(HistoryStateManager)))(__ngFactoryType__ || HistoryStateManager);\n    };\n  })();\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HistoryStateManager,\n    factory: HistoryStateManager.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HistoryStateManager, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nvar NavigationResult;\n(function (NavigationResult) {\n  NavigationResult[NavigationResult[\"COMPLETE\"] = 0] = \"COMPLETE\";\n  NavigationResult[NavigationResult[\"FAILED\"] = 1] = \"FAILED\";\n  NavigationResult[NavigationResult[\"REDIRECTING\"] = 2] = \"REDIRECTING\";\n})(NavigationResult || (NavigationResult = {}));\n/**\n * Performs the given action once the router finishes its next/current navigation.\n *\n * The navigation is considered complete under the following conditions:\n * - `NavigationCancel` event emits and the code is not `NavigationCancellationCode.Redirect` or\n * `NavigationCancellationCode.SupersededByNewNavigation`. In these cases, the\n * redirecting/superseding navigation must finish.\n * - `NavigationError`, `NavigationEnd`, or `NavigationSkipped` event emits\n */\nfunction afterNextNavigation(router, action) {\n  router.events.pipe(filter(e => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), map(e => {\n    if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n      return NavigationResult.COMPLETE;\n    }\n    const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;\n    return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;\n  }), filter(result => result !== NavigationResult.REDIRECTING), take(1)).subscribe(() => {\n    action();\n  });\n}\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `true`\n * (exact = true).\n */\nconst exactMatchOptions = {\n  paths: 'exact',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'exact'\n};\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `false`\n * (exact = false).\n */\nconst subsetMatchOptions = {\n  paths: 'subset',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'subset'\n};\n/**\n * @description\n *\n * A service that facilitates navigation among views and URL manipulation capabilities.\n * This service is provided in the root scope and configured with [provideRouter](api/router/provideRouter).\n *\n * @see {@link Route}\n * @see {@link provideRouter}\n * @see [Routing and Navigation Guide](guide/routing/common-router-tasks).\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass Router {\n  get currentUrlTree() {\n    return this.stateManager.getCurrentUrlTree();\n  }\n  get rawUrlTree() {\n    return this.stateManager.getRawUrlTree();\n  }\n  disposed = false;\n  nonRouterCurrentEntryChangeSubscription;\n  console = inject(ɵConsole);\n  stateManager = inject(StateManager);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  pendingTasks = inject(ɵPendingTasksInternal);\n  urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  navigationTransitions = inject(NavigationTransitions);\n  urlSerializer = inject(UrlSerializer);\n  location = inject(Location);\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  /**\n   * The private `Subject` type for the public events exposed in the getter. This is used internally\n   * to push events to. The separate field allows us to expose separate types in the public API\n   * (i.e., an Observable rather than the Subject).\n   */\n  _events = new Subject();\n  /**\n   * An event stream for routing events.\n   */\n  get events() {\n    // TODO(atscott): This _should_ be events.asObservable(). However, this change requires internal\n    // cleanup: tests are doing `(route.events as Subject<Event>).next(...)`. This isn't\n    // allowed/supported but we still have to fix these or file bugs against the teams before making\n    // the change.\n    return this._events;\n  }\n  /**\n   * The current state of routing in this NgModule.\n   */\n  get routerState() {\n    return this.stateManager.getRouterState();\n  }\n  /**\n   * True if at least one navigation event has occurred,\n   * false otherwise.\n   */\n  navigated = false;\n  /**\n   * A strategy for re-using routes.\n   *\n   * @deprecated Configure using `providers` instead:\n   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.\n   */\n  routeReuseStrategy = inject(RouteReuseStrategy);\n  /**\n   * How to handle a navigation request to the current URL.\n   *\n   *\n   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.\n   * @see {@link withRouterConfig}\n   * @see {@link provideRouter}\n   * @see {@link RouterModule}\n   */\n  onSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n  config = inject(ROUTES, {\n    optional: true\n  })?.flat() ?? [];\n  /**\n   * Indicates whether the application has opted in to binding Router data to component inputs.\n   *\n   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or\n   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.\n   */\n  componentInputBindingEnabled = !!inject(INPUT_BINDER, {\n    optional: true\n  });\n  constructor() {\n    this.resetConfig(this.config);\n    this.navigationTransitions.setupNavigations(this, this.currentUrlTree, this.routerState).subscribe({\n      error: e => {\n        this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);\n      }\n    });\n    this.subscribeToNavigationEvents();\n  }\n  eventsSubscription = new Subscription();\n  subscribeToNavigationEvents() {\n    const subscription = this.navigationTransitions.events.subscribe(e => {\n      try {\n        const currentTransition = this.navigationTransitions.currentTransition;\n        const currentNavigation = this.navigationTransitions.currentNavigation;\n        if (currentTransition !== null && currentNavigation !== null) {\n          this.stateManager.handleRouterEvent(e, currentNavigation);\n          if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\n            // It seems weird that `navigated` is set to `true` when the navigation is rejected,\n            // however it's how things were written initially. Investigation would need to be done\n            // to determine if this can be removed.\n            this.navigated = true;\n          } else if (e instanceof NavigationEnd) {\n            this.navigated = true;\n          } else if (e instanceof RedirectRequest) {\n            const opts = e.navigationBehaviorOptions;\n            const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n            const extras = {\n              browserUrl: currentTransition.extras.browserUrl,\n              info: currentTransition.extras.info,\n              skipLocationChange: currentTransition.extras.skipLocationChange,\n              // The URL is already updated at this point if we have 'eager' URL\n              // updates or if the navigation was triggered by the browser (back\n              // button, URL bar, etc). We want to replace that item in history\n              // if the navigation is rejected.\n              replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === 'eager' || isBrowserTriggeredNavigation(currentTransition.source),\n              // allow developer to override default options with RedirectCommand\n              ...opts\n            };\n            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n              resolve: currentTransition.resolve,\n              reject: currentTransition.reject,\n              promise: currentTransition.promise\n            });\n          }\n        }\n        // Note that it's important to have the Router process the events _before_ the event is\n        // pushed through the public observable. This ensures the correct router state is in place\n        // before applications observe the events.\n        if (isPublicRouterEvent(e)) {\n          this._events.next(e);\n        }\n      } catch (e) {\n        this.navigationTransitions.transitionAbortSubject.next(e);\n      }\n    });\n    this.eventsSubscription.add(subscription);\n  }\n  /** @internal */\n  resetRootComponentType(rootComponentType) {\n    // TODO: vsavkin router 4.0 should make the root component set to null\n    // this will simplify the lifecycle of the router.\n    this.routerState.root.component = rootComponentType;\n    this.navigationTransitions.rootComponentType = rootComponentType;\n  }\n  /**\n   * Sets up the location change listener and performs the initial navigation.\n   */\n  initialNavigation() {\n    this.setUpLocationChangeListener();\n    if (!this.navigationTransitions.hasRequestedNavigation) {\n      this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());\n    }\n  }\n  /**\n   * Sets up the location change listener. This listener detects navigations triggered from outside\n   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router\n   * navigation so that the correct events, guards, etc. are triggered.\n   */\n  setUpLocationChangeListener() {\n    // Don't need to use Zone.wrap any more, because zone.js\n    // already patch onPopState, so location change callback will\n    // run into ngZone\n    this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {\n      // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS\n      // hybrid apps.\n      setTimeout(() => {\n        this.navigateToSyncWithBrowser(url, 'popstate', state);\n      }, 0);\n    });\n  }\n  /**\n   * Schedules a router navigation to synchronize Router state with the browser state.\n   *\n   * This is done as a response to a popstate event and the initial navigation. These\n   * two scenarios represent times when the browser URL/state has been updated and\n   * the Router needs to respond to ensure its internal state matches.\n   */\n  navigateToSyncWithBrowser(url, source, state) {\n    const extras = {\n      replaceUrl: true\n    };\n    // TODO: restoredState should always include the entire state, regardless\n    // of navigationId. This requires a breaking change to update the type on\n    // NavigationStart’s restoredState, which currently requires navigationId\n    // to always be present. The Router used to only restore history state if\n    // a navigationId was present.\n    // The stored navigationId is used by the RouterScroller to retrieve the scroll\n    // position for the page.\n    const restoredState = state?.navigationId ? state : null;\n    // Separate to NavigationStart.restoredState, we must also restore the state to\n    // history.state and generate a new navigationId, since it will be overwritten\n    if (state) {\n      const stateCopy = {\n        ...state\n      };\n      delete stateCopy.navigationId;\n      delete stateCopy.ɵrouterPageId;\n      if (Object.keys(stateCopy).length !== 0) {\n        extras.state = stateCopy;\n      }\n    }\n    const urlTree = this.parseUrl(url);\n    this.scheduleNavigation(urlTree, source, restoredState, extras);\n  }\n  /** The current URL. */\n  get url() {\n    return this.serializeUrl(this.currentUrlTree);\n  }\n  /**\n   * Returns the current `Navigation` object when the router is navigating,\n   * and `null` when idle.\n   */\n  getCurrentNavigation() {\n    return this.navigationTransitions.currentNavigation;\n  }\n  /**\n   * The `Navigation` object of the most recent navigation to succeed and `null` if there\n   *     has not been a successful navigation yet.\n   */\n  get lastSuccessfulNavigation() {\n    return this.navigationTransitions.lastSuccessfulNavigation;\n  }\n  /**\n   * Resets the route configuration used for navigation and generating links.\n   *\n   * @param config The route array for the new configuration.\n   *\n   * @usageNotes\n   *\n   * ```\n   * router.resetConfig([\n   *  { path: 'team/:id', component: TeamCmp, children: [\n   *    { path: 'simple', component: SimpleCmp },\n   *    { path: 'user/:name', component: UserCmp }\n   *  ]}\n   * ]);\n   * ```\n   */\n  resetConfig(config) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n    this.config = config.map(standardizeConfig);\n    this.navigated = false;\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.dispose();\n  }\n  /** Disposes of the router. */\n  dispose() {\n    this.navigationTransitions.complete();\n    if (this.nonRouterCurrentEntryChangeSubscription) {\n      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();\n      this.nonRouterCurrentEntryChangeSubscription = undefined;\n    }\n    this.disposed = true;\n    this.eventsSubscription.unsubscribe();\n  }\n  /**\n   * Appends URL segments to the current URL tree to create a new URL tree.\n   *\n   * @param commands An array of URL fragments with which to construct the new URL tree.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`\n   * property of the options object, if supplied.\n   * @param navigationExtras Options that control the navigation strategy.\n   * @returns The new URL tree.\n   *\n   * @usageNotes\n   *\n   * ```\n   * // create /team/33/user/11\n   * router.createUrlTree(['/team', 33, 'user', 11]);\n   *\n   * // create /team/33;expand=true/user/11\n   * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n   *\n   * // you can collapse static segments like this (this works only with the first passed-in value):\n   * router.createUrlTree(['/team/33/user', userId]);\n   *\n   * // If the first segment can contain slashes, and you do not want the router to split it,\n   * // you can do the following:\n   * router.createUrlTree([{segmentPath: '/one/two'}]);\n   *\n   * // create /team/33/(user/11//right:chat)\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n   *\n   * // remove the right secondary node\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n   *\n   * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n   *\n   * // navigate to /team/33/user/11/details\n   * router.createUrlTree(['details'], {relativeTo: route});\n   *\n   * // navigate to /team/33/user/22\n   * router.createUrlTree(['../22'], {relativeTo: route});\n   *\n   * // navigate to /team/44/user/22\n   * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n   *\n   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the\n   * tree should be created relative to the root.\n   * ```\n   */\n  createUrlTree(commands, navigationExtras = {}) {\n    const {\n      relativeTo,\n      queryParams,\n      fragment,\n      queryParamsHandling,\n      preserveFragment\n    } = navigationExtras;\n    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n    let q = null;\n    switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {\n      case 'merge':\n        q = {\n          ...this.currentUrlTree.queryParams,\n          ...queryParams\n        };\n        break;\n      case 'preserve':\n        q = this.currentUrlTree.queryParams;\n        break;\n      default:\n        q = queryParams || null;\n    }\n    if (q !== null) {\n      q = this.removeEmptyProps(q);\n    }\n    let relativeToUrlSegmentGroup;\n    try {\n      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n    } catch (e) {\n      // This is strictly for backwards compatibility with tests that create\n      // invalid `ActivatedRoute` mocks.\n      // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and\n      // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at\n      // the moment.\n      if (typeof commands[0] !== 'string' || commands[0][0] !== '/') {\n        // Navigations that were absolute in the old way of creating UrlTrees\n        // would still work because they wouldn't attempt to match the\n        // segments in the `ActivatedRoute` to the `currentUrlTree` but\n        // instead just replace the root segment with the navigation result.\n        // Non-absolute navigations would fail to apply the commands because\n        // the logic could not find the segment to replace (so they'd act like there were no\n        // commands).\n        commands = [];\n      }\n      relativeToUrlSegmentGroup = this.currentUrlTree.root;\n    }\n    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);\n  }\n  /**\n   * Navigates to a view using an absolute route path.\n   *\n   * @param url An absolute path for a defined route. The function does not apply any delta to the\n   *     current URL.\n   * @param extras An object containing properties that modify the navigation strategy.\n   *\n   * @returns A Promise that resolves to 'true' when navigation succeeds,\n   * to 'false' when navigation fails, or is rejected on error.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to an absolute path.\n   *\n   * ```\n   * router.navigateByUrl(\"/team/33/user/11\");\n   *\n   * // Navigate without updating the URL\n   * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigateByUrl(url, extras = {\n    skipLocationChange: false\n  }) {\n    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n  }\n  /**\n   * Navigate based on the provided array of commands and a starting point.\n   * If no starting route is provided, the navigation is absolute.\n   *\n   * @param commands An array of URL fragments with which to construct the target URL.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property\n   * of the options object, if supplied.\n   * @param extras An options object that determines how the URL should be constructed or\n   *     interpreted.\n   *\n   * @returns A Promise that resolves to `true` when navigation succeeds, or `false` when navigation\n   *     fails. The Promise is rejected when an error occurs if `resolveNavigationPromiseOnError` is\n   * not `true`.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to a dynamic route path relative to the current URL.\n   *\n   * ```\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n   *\n   * // Navigate without updating the URL, overriding the default behavior\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigate(commands, extras = {\n    skipLocationChange: false\n  }) {\n    validateCommands(commands);\n    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n  }\n  /** Serializes a `UrlTree` into a string */\n  serializeUrl(url) {\n    return this.urlSerializer.serialize(url);\n  }\n  /** Parses a string into a `UrlTree` */\n  parseUrl(url) {\n    try {\n      return this.urlSerializer.parse(url);\n    } catch {\n      return this.urlSerializer.parse('/');\n    }\n  }\n  isActive(url, matchOptions) {\n    let options;\n    if (matchOptions === true) {\n      options = {\n        ...exactMatchOptions\n      };\n    } else if (matchOptions === false) {\n      options = {\n        ...subsetMatchOptions\n      };\n    } else {\n      options = matchOptions;\n    }\n    if (isUrlTree(url)) {\n      return containsTree(this.currentUrlTree, url, options);\n    }\n    const urlTree = this.parseUrl(url);\n    return containsTree(this.currentUrlTree, urlTree, options);\n  }\n  removeEmptyProps(params) {\n    return Object.entries(params).reduce((result, [key, value]) => {\n      if (value !== null && value !== undefined) {\n        result[key] = value;\n      }\n      return result;\n    }, {});\n  }\n  scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {\n    if (this.disposed) {\n      return Promise.resolve(false);\n    }\n    let resolve;\n    let reject;\n    let promise;\n    if (priorPromise) {\n      resolve = priorPromise.resolve;\n      reject = priorPromise.reject;\n      promise = priorPromise.promise;\n    } else {\n      promise = new Promise((res, rej) => {\n        resolve = res;\n        reject = rej;\n      });\n    }\n    // Indicate that the navigation is happening.\n    const taskId = this.pendingTasks.add();\n    afterNextNavigation(this, () => {\n      // Remove pending task in a microtask to allow for cancelled\n      // initial navigations and redirects within the same task.\n      queueMicrotask(() => this.pendingTasks.remove(taskId));\n    });\n    this.navigationTransitions.handleNavigationRequest({\n      source,\n      restoredState,\n      currentUrlTree: this.currentUrlTree,\n      currentRawUrl: this.currentUrlTree,\n      rawUrl,\n      extras,\n      resolve: resolve,\n      reject: reject,\n      promise,\n      currentSnapshot: this.routerState.snapshot,\n      currentRouterState: this.routerState\n    });\n    // Make sure that the error is propagated even though `processNavigations` catch\n    // handler does not rethrow\n    return promise.catch(e => {\n      return Promise.reject(e);\n    });\n  }\n  static ɵfac = function Router_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Router)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Router,\n    factory: Router.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Router, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction validateCommands(commands) {\n  for (let i = 0; i < commands.length; i++) {\n    const cmd = commands[i];\n    if (cmd == null) {\n      throw new ɵRuntimeError(4008 /* RuntimeErrorCode.NULLISH_COMMAND */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);\n    }\n  }\n}\nfunction isPublicRouterEvent(e) {\n  return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);\n}\n\n/**\n * @description\n *\n * When applied to an element in a template, makes that element a link\n * that initiates navigation to a route. Navigation opens one or more routed components\n * in one or more `<router-outlet>` locations on the page.\n *\n * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,\n * the following creates a static link to the route:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * You can use dynamic values to generate the link.\n * For a dynamic link, pass an array of path segments,\n * followed by the params for each segment.\n * For example, `['/team', teamId, 'user', userName, {details: true}]`\n * generates a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one term and combined with dynamic segments.\n * For example, `['/team/11/user', userName, {details: true}]`\n *\n * The input that you provide to the link is treated as a delta to the current URL.\n * For instance, suppose the current URL is `/user/(box//aux:team)`.\n * The link `<a [routerLink]=\"['/user/jim']\">Jim</a>` creates the URL\n * `/user/(jim//aux:team)`.\n * See {@link Router#createUrlTree} for more information.\n *\n * @usageNotes\n *\n * You can use absolute or relative paths in a link, set query parameters,\n * control how parameters are handled, and keep a history of navigation states.\n *\n * ### Relative link paths\n *\n * The first segment name can be prepended with `/`, `./`, or `../`.\n * * If the first segment begins with `/`, the router looks up the route from the root of the\n *   app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router\n *   looks in the children of the current activated route.\n * * If the first segment begins with `../`, the router goes up one level in the route tree.\n *\n * ### Setting and handling query params and fragments\n *\n * The following link adds a query parameter and a fragment to the generated URL:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n *   link to user component\n * </a>\n * ```\n * By default, the directive constructs the new URL using the given query parameters.\n * The example generates the link: `/user/bob?debug=true#education`.\n *\n * You can instruct the directive to handle query parameters differently\n * by specifying the `queryParamsHandling` option in the link.\n * Allowed values are:\n *\n *  - `'merge'`: Merge the given `queryParams` into the current query params.\n *  - `'preserve'`: Preserve the current query params.\n *\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n *   link to user component\n * </a>\n * ```\n *\n * `queryParams`, `fragment`, `queryParamsHandling`, `preserveFragment`, and `relativeTo`\n * cannot be used when the `routerLink` input is a `UrlTree`.\n *\n * See {@link UrlCreationOptions#queryParamsHandling}.\n *\n * ### Preserving navigation history\n *\n * You can provide a `state` value to be persisted to the browser's\n * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [state]=\"{tracingId: 123}\">\n *   link to user component\n * </a>\n * ```\n *\n * Use {@link Router#getCurrentNavigation} to retrieve a saved\n * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`\n * event:\n *\n * ```ts\n * // Get NavigationStart events\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\n *   const navigation = router.getCurrentNavigation();\n *   tracingService.trace({id: navigation.extras.state.tracingId});\n * });\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterLink {\n  router;\n  route;\n  tabIndexAttribute;\n  renderer;\n  el;\n  locationStrategy;\n  /**\n   * Represents an `href` attribute value applied to a host element,\n   * when a host element is `<a>`. For other tags, the value is `null`.\n   */\n  href = null;\n  /**\n   * Represents the `target` attribute on a host element.\n   * This is only used when the host element is an `<a>` tag.\n   */\n  target;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParams}\n   * @see {@link Router#createUrlTree}\n   */\n  queryParams;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#fragment}\n   * @see {@link Router#createUrlTree}\n   */\n  fragment;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParamsHandling}\n   * @see {@link Router#createUrlTree}\n   */\n  queryParamsHandling;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#state}\n   * @see {@link Router#navigateByUrl}\n   */\n  state;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#info}\n   * @see {@link Router#navigateByUrl}\n   */\n  info;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * Specify a value here when you do not want to use the default value\n   * for `routerLink`, which is the current activated route.\n   * Note that a value of `undefined` here will use the `routerLink` default.\n   * @see {@link UrlCreationOptions#relativeTo}\n   * @see {@link Router#createUrlTree}\n   */\n  relativeTo;\n  /** Whether a host element is an `<a>` tag. */\n  isAnchorElement;\n  subscription;\n  /** @internal */\n  onChanges = new Subject();\n  constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {\n    this.router = router;\n    this.route = route;\n    this.tabIndexAttribute = tabIndexAttribute;\n    this.renderer = renderer;\n    this.el = el;\n    this.locationStrategy = locationStrategy;\n    const tagName = el.nativeElement.tagName?.toLowerCase();\n    this.isAnchorElement = tagName === 'a' || tagName === 'area';\n    if (this.isAnchorElement) {\n      this.subscription = router.events.subscribe(s => {\n        if (s instanceof NavigationEnd) {\n          this.updateHref();\n        }\n      });\n    } else {\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#preserveFragment}\n   * @see {@link Router#createUrlTree}\n   */\n  preserveFragment = false;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#skipLocationChange}\n   * @see {@link Router#navigateByUrl}\n   */\n  skipLocationChange = false;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#replaceUrl}\n   * @see {@link Router#navigateByUrl}\n   */\n  replaceUrl = false;\n  /**\n   * Modifies the tab index if there was not a tabindex attribute on the element during\n   * instantiation.\n   */\n  setTabIndexIfNotOnNativeEl(newTabIndex) {\n    if (this.tabIndexAttribute != null /* both `null` and `undefined` */ || this.isAnchorElement) {\n      return;\n    }\n    this.applyAttributeValue('tabindex', newTabIndex);\n  }\n  /** @nodoc */\n  // TODO(atscott): Remove changes parameter in major version as a breaking change.\n  ngOnChanges(changes) {\n    if (ngDevMode && isUrlTree(this.routerLinkInput) && (this.fragment !== undefined || this.queryParams || this.queryParamsHandling || this.preserveFragment || this.relativeTo)) {\n      throw new ɵRuntimeError(4016 /* RuntimeErrorCode.INVALID_ROUTER_LINK_INPUTS */, 'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.');\n    }\n    if (this.isAnchorElement) {\n      this.updateHref();\n    }\n    // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes\n    // to the RouterLinks it's tracking.\n    this.onChanges.next(this);\n  }\n  routerLinkInput = null;\n  /**\n   * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.\n   *   - **array**: commands to pass to {@link Router#createUrlTree}.\n   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n   *   - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands\n   *     and other inputs that correspond to properties of `UrlCreationOptions`.\n   *   - **null|undefined**: effectively disables the `routerLink`\n   * @see {@link Router#createUrlTree}\n   */\n  set routerLink(commandsOrUrlTree) {\n    if (commandsOrUrlTree == null) {\n      this.routerLinkInput = null;\n      this.setTabIndexIfNotOnNativeEl(null);\n    } else {\n      if (isUrlTree(commandsOrUrlTree)) {\n        this.routerLinkInput = commandsOrUrlTree;\n      } else {\n        this.routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];\n      }\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n  /** @nodoc */\n  onClick(button, ctrlKey, shiftKey, altKey, metaKey) {\n    const urlTree = this.urlTree;\n    if (urlTree === null) {\n      return true;\n    }\n    if (this.isAnchorElement) {\n      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n        return true;\n      }\n      if (typeof this.target === 'string' && this.target != '_self') {\n        return true;\n      }\n    }\n    const extras = {\n      skipLocationChange: this.skipLocationChange,\n      replaceUrl: this.replaceUrl,\n      state: this.state,\n      info: this.info\n    };\n    this.router.navigateByUrl(urlTree, extras);\n    // Return `false` for `<a>` elements to prevent default action\n    // and cancel the native behavior, since the navigation is handled\n    // by the Router.\n    return !this.isAnchorElement;\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n  }\n  updateHref() {\n    const urlTree = this.urlTree;\n    this.href = urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) : null;\n    const sanitizedValue = this.href === null ? null :\n    // This class represents a directive that can be added to both `<a>` elements,\n    // as well as other elements. As a result, we can't define security context at\n    // compile time. So the security context is deferred to runtime.\n    // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function\n    // based on the tag and property names. The logic mimics the one from\n    // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.\n    //\n    // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`\n    // instead of applying a value via a renderer, after a final merge of the\n    // `RouterLinkWithHref` directive.\n    ɵɵsanitizeUrlOrResourceUrl(this.href, this.el.nativeElement.tagName.toLowerCase(), 'href');\n    this.applyAttributeValue('href', sanitizedValue);\n  }\n  applyAttributeValue(attrName, attrValue) {\n    const renderer = this.renderer;\n    const nativeElement = this.el.nativeElement;\n    if (attrValue !== null) {\n      renderer.setAttribute(nativeElement, attrName, attrValue);\n    } else {\n      renderer.removeAttribute(nativeElement, attrName);\n    }\n  }\n  get urlTree() {\n    if (this.routerLinkInput === null) {\n      return null;\n    } else if (isUrlTree(this.routerLinkInput)) {\n      return this.routerLinkInput;\n    }\n    return this.router.createUrlTree(this.routerLinkInput, {\n      // If the `relativeTo` input is not defined, we want to use `this.route` by default.\n      // Otherwise, we should use the value provided by the user in the input.\n      relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,\n      queryParams: this.queryParams,\n      fragment: this.fragment,\n      queryParamsHandling: this.queryParamsHandling,\n      preserveFragment: this.preserveFragment\n    });\n  }\n  static ɵfac = function RouterLink_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterLink)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(ActivatedRoute), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i3.LocationStrategy));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterLink,\n    selectors: [[\"\", \"routerLink\", \"\"]],\n    hostVars: 1,\n    hostBindings: function RouterLink_HostBindings(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵlistener(\"click\", function RouterLink_click_HostBindingHandler($event) {\n          return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);\n        });\n      }\n      if (rf & 2) {\n        i0.ɵɵattribute(\"target\", ctx.target);\n      }\n    },\n    inputs: {\n      target: \"target\",\n      queryParams: \"queryParams\",\n      fragment: \"fragment\",\n      queryParamsHandling: \"queryParamsHandling\",\n      state: \"state\",\n      info: \"info\",\n      relativeTo: \"relativeTo\",\n      preserveFragment: [2, \"preserveFragment\", \"preserveFragment\", booleanAttribute],\n      skipLocationChange: [2, \"skipLocationChange\", \"skipLocationChange\", booleanAttribute],\n      replaceUrl: [2, \"replaceUrl\", \"replaceUrl\", booleanAttribute],\n      routerLink: \"routerLink\"\n    },\n    features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterLink, [{\n    type: Directive,\n    args: [{\n      selector: '[routerLink]'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: ActivatedRoute\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Attribute,\n      args: ['tabindex']\n    }]\n  }, {\n    type: i0.Renderer2\n  }, {\n    type: i0.ElementRef\n  }, {\n    type: i3.LocationStrategy\n  }], {\n    target: [{\n      type: HostBinding,\n      args: ['attr.target']\n    }, {\n      type: Input\n    }],\n    queryParams: [{\n      type: Input\n    }],\n    fragment: [{\n      type: Input\n    }],\n    queryParamsHandling: [{\n      type: Input\n    }],\n    state: [{\n      type: Input\n    }],\n    info: [{\n      type: Input\n    }],\n    relativeTo: [{\n      type: Input\n    }],\n    preserveFragment: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    skipLocationChange: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    replaceUrl: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    routerLink: [{\n      type: Input\n    }],\n    onClick: [{\n      type: HostListener,\n      args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]\n    }]\n  });\n})();\n\n/**\n *\n * @description\n *\n * Tracks whether the linked route of an element is currently active, and allows you\n * to specify one or more CSS classes to add to the element when the linked route\n * is active.\n *\n * Use this directive to create a visual distinction for elements associated with an active route.\n * For example, the following code highlights the word \"Bob\" when the router\n * activates the associated route:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * Whenever the URL is either '/user' or '/user/bob', the \"active-link\" class is\n * added to the anchor tag. If the URL changes, the class is removed.\n *\n * You can set more than one class using a space-separated string or an array.\n * For example:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * To directly check the `isActive` status of the link, assign the `RouterLinkActive`\n * instance to a template variable.\n * For example, the following checks the status without assigning any CSS classes:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n *   Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.\n * For example, the following sets the active-link class on the `<div>`  parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```html\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n *   <a routerLink=\"/user/jim\">Jim</a>\n *   <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * The `RouterLinkActive` directive can also be used to set the aria-current attribute\n * to provide an alternative distinction for active elements to visually impaired users.\n *\n * For example, the following code adds the 'active' class to the Home Page link when it is\n * indeed active and in such case also sets its aria-current attribute to 'page':\n *\n * ```html\n * <a routerLink=\"/\" routerLinkActive=\"active\" ariaCurrentWhenActive=\"page\">Home Page</a>\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterLinkActive {\n  router;\n  element;\n  renderer;\n  cdr;\n  link;\n  links;\n  classes = [];\n  routerEventsSubscription;\n  linkInputChangesSubscription;\n  _isActive = false;\n  get isActive() {\n    return this._isActive;\n  }\n  /**\n   * Options to configure how to determine if the router link is active.\n   *\n   * These options are passed to the `Router.isActive()` function.\n   *\n   * @see {@link Router#isActive}\n   */\n  routerLinkActiveOptions = {\n    exact: false\n  };\n  /**\n   * Aria-current attribute to apply when the router link is active.\n   *\n   * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.\n   *\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}\n   */\n  ariaCurrentWhenActive;\n  /**\n   *\n   * You can use the output `isActiveChange` to get notified each time the link becomes\n   * active or inactive.\n   *\n   * Emits:\n   * true  -> Route is active\n   * false -> Route is inactive\n   *\n   * ```\n   * <a\n   *  routerLink=\"/user/bob\"\n   *  routerLinkActive=\"active-link\"\n   *  (isActiveChange)=\"this.onRouterLinkActive($event)\">Bob</a>\n   * ```\n   */\n  isActiveChange = new EventEmitter();\n  constructor(router, element, renderer, cdr, link) {\n    this.router = router;\n    this.element = element;\n    this.renderer = renderer;\n    this.cdr = cdr;\n    this.link = link;\n    this.routerEventsSubscription = router.events.subscribe(s => {\n      if (s instanceof NavigationEnd) {\n        this.update();\n      }\n    });\n  }\n  /** @nodoc */\n  ngAfterContentInit() {\n    // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).\n    of(this.links.changes, of(null)).pipe(mergeAll()).subscribe(_ => {\n      this.update();\n      this.subscribeToEachLinkOnChanges();\n    });\n  }\n  subscribeToEachLinkOnChanges() {\n    this.linkInputChangesSubscription?.unsubscribe();\n    const allLinkChanges = [...this.links.toArray(), this.link].filter(link => !!link).map(link => link.onChanges);\n    this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe(link => {\n      if (this._isActive !== this.isLinkActive(this.router)(link)) {\n        this.update();\n      }\n    });\n  }\n  set routerLinkActive(data) {\n    const classes = Array.isArray(data) ? data : data.split(' ');\n    this.classes = classes.filter(c => !!c);\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    this.update();\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.routerEventsSubscription.unsubscribe();\n    this.linkInputChangesSubscription?.unsubscribe();\n  }\n  update() {\n    if (!this.links || !this.router.navigated) return;\n    queueMicrotask(() => {\n      const hasActiveLinks = this.hasActiveLinks();\n      this.classes.forEach(c => {\n        if (hasActiveLinks) {\n          this.renderer.addClass(this.element.nativeElement, c);\n        } else {\n          this.renderer.removeClass(this.element.nativeElement, c);\n        }\n      });\n      if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n        this.renderer.setAttribute(this.element.nativeElement, 'aria-current', this.ariaCurrentWhenActive.toString());\n      } else {\n        this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n      }\n      // Only emit change if the active state changed.\n      if (this._isActive !== hasActiveLinks) {\n        this._isActive = hasActiveLinks;\n        this.cdr.markForCheck();\n        // Emit on isActiveChange after classes are updated\n        this.isActiveChange.emit(hasActiveLinks);\n      }\n    });\n  }\n  isLinkActive(router) {\n    const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions :\n    // While the types should disallow `undefined` here, it's possible without strict inputs\n    this.routerLinkActiveOptions.exact || false;\n    return link => {\n      const urlTree = link.urlTree;\n      return urlTree ? router.isActive(urlTree, options) : false;\n    };\n  }\n  hasActiveLinks() {\n    const isActiveCheckFn = this.isLinkActive(this.router);\n    return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);\n  }\n  static ɵfac = function RouterLinkActive_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterLinkActive)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(RouterLink, 8));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterLinkActive,\n    selectors: [[\"\", \"routerLinkActive\", \"\"]],\n    contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {\n      if (rf & 1) {\n        i0.ɵɵcontentQuery(dirIndex, RouterLink, 5);\n      }\n      if (rf & 2) {\n        let _t;\n        i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.links = _t);\n      }\n    },\n    inputs: {\n      routerLinkActiveOptions: \"routerLinkActiveOptions\",\n      ariaCurrentWhenActive: \"ariaCurrentWhenActive\",\n      routerLinkActive: \"routerLinkActive\"\n    },\n    outputs: {\n      isActiveChange: \"isActiveChange\"\n    },\n    exportAs: [\"routerLinkActive\"],\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterLinkActive, [{\n    type: Directive,\n    args: [{\n      selector: '[routerLinkActive]',\n      exportAs: 'routerLinkActive'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: i0.ElementRef\n  }, {\n    type: i0.Renderer2\n  }, {\n    type: i0.ChangeDetectorRef\n  }, {\n    type: RouterLink,\n    decorators: [{\n      type: Optional\n    }]\n  }], {\n    links: [{\n      type: ContentChildren,\n      args: [RouterLink, {\n        descendants: true\n      }]\n    }],\n    routerLinkActiveOptions: [{\n      type: Input\n    }],\n    ariaCurrentWhenActive: [{\n      type: Input\n    }],\n    isActiveChange: [{\n      type: Output\n    }],\n    routerLinkActive: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * Use instead of `'paths' in options` to be compatible with property renaming\n */\nfunction isActiveMatchOptions(options) {\n  return !!options.paths;\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @publicApi\n */\nclass PreloadingStrategy {}\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```ts\n * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @publicApi\n */\nclass PreloadAllModules {\n  preload(route, fn) {\n    return fn().pipe(catchError(() => of(null)));\n  }\n  static ɵfac = function PreloadAllModules_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreloadAllModules)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreloadAllModules,\n    factory: PreloadAllModules.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreloadAllModules, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @publicApi\n */\nclass NoPreloading {\n  preload(route, fn) {\n    return of(null);\n  }\n  static ɵfac = function NoPreloading_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NoPreloading)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NoPreloading,\n    factory: NoPreloading.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NoPreloading, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n * @publicApi\n */\nclass RouterPreloader {\n  router;\n  injector;\n  preloadingStrategy;\n  loader;\n  subscription;\n  constructor(router, compiler, injector, preloadingStrategy, loader) {\n    this.router = router;\n    this.injector = injector;\n    this.preloadingStrategy = preloadingStrategy;\n    this.loader = loader;\n  }\n  setUpPreloading() {\n    this.subscription = this.router.events.pipe(filter(e => e instanceof NavigationEnd), concatMap(() => this.preload())).subscribe(() => {});\n  }\n  preload() {\n    return this.processRoutes(this.injector, this.router.config);\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n  processRoutes(injector, routes) {\n    const res = [];\n    for (const route of routes) {\n      if (route.providers && !route._injector) {\n        route._injector = createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);\n      }\n      const injectorForCurrentRoute = route._injector ?? injector;\n      const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n      // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not\n      // `loadComponent`. `canLoad` guards only block loading of child routes by design. This\n      // happens as a consequence of needing to descend into children for route matching immediately\n      // while component loading is deferred until route activation. Because `canLoad` guards can\n      // have side effects, we cannot execute them here so we instead skip preloading altogether\n      // when present. Lastly, it remains to be decided whether `canLoad` should behave this way\n      // at all. Code splitting and lazy loading is separate from client-side authorization checks\n      // and should not be used as a security measure to prevent loading of code.\n      if (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined || route.loadComponent && !route._loadedComponent) {\n        res.push(this.preloadConfig(injectorForCurrentRoute, route));\n      }\n      if (route.children || route._loadedRoutes) {\n        res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));\n      }\n    }\n    return from(res).pipe(mergeAll());\n  }\n  preloadConfig(injector, route) {\n    return this.preloadingStrategy.preload(route, () => {\n      let loadedChildren$;\n      if (route.loadChildren && route.canLoad === undefined) {\n        loadedChildren$ = this.loader.loadChildren(injector, route);\n      } else {\n        loadedChildren$ = of(null);\n      }\n      const recursiveLoadChildren$ = loadedChildren$.pipe(mergeMap(config => {\n        if (config === null) {\n          return of(void 0);\n        }\n        route._loadedRoutes = config.routes;\n        route._loadedInjector = config.injector;\n        // If the loaded config was a module, use that as the module/module injector going\n        // forward. Otherwise, continue using the current module/module injector.\n        return this.processRoutes(config.injector ?? injector, config.routes);\n      }));\n      if (route.loadComponent && !route._loadedComponent) {\n        const loadComponent$ = this.loader.loadComponent(route);\n        return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n      } else {\n        return recursiveLoadChildren$;\n      }\n    });\n  }\n  static ɵfac = function RouterPreloader_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterPreloader)(i0.ɵɵinject(Router), i0.ɵɵinject(i0.Compiler), i0.ɵɵinject(i0.EnvironmentInjector), i0.ɵɵinject(PreloadingStrategy), i0.ɵɵinject(RouterConfigLoader));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterPreloader,\n    factory: RouterPreloader.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterPreloader, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: i0.Compiler\n  }, {\n    type: i0.EnvironmentInjector\n  }, {\n    type: PreloadingStrategy\n  }, {\n    type: RouterConfigLoader\n  }], null);\n})();\nconst ROUTER_SCROLLER = new InjectionToken('');\nclass RouterScroller {\n  urlSerializer;\n  transitions;\n  viewportScroller;\n  zone;\n  options;\n  routerEventsSubscription;\n  scrollEventsSubscription;\n  lastId = 0;\n  lastSource = 'imperative';\n  restoredId = 0;\n  store = {};\n  /** @nodoc */\n  constructor(urlSerializer, transitions, viewportScroller, zone, options = {}) {\n    this.urlSerializer = urlSerializer;\n    this.transitions = transitions;\n    this.viewportScroller = viewportScroller;\n    this.zone = zone;\n    this.options = options;\n    // Default both options to 'disabled'\n    options.scrollPositionRestoration ||= 'disabled';\n    options.anchorScrolling ||= 'disabled';\n  }\n  init() {\n    // we want to disable the automatic scrolling because having two places\n    // responsible for scrolling results race conditions, especially given\n    // that browser don't implement this behavior consistently\n    if (this.options.scrollPositionRestoration !== 'disabled') {\n      this.viewportScroller.setHistoryScrollRestoration('manual');\n    }\n    this.routerEventsSubscription = this.createScrollEvents();\n    this.scrollEventsSubscription = this.consumeScrollEvents();\n  }\n  createScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (e instanceof NavigationStart) {\n        // store the scroll position of the current stable navigations.\n        this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n        this.lastSource = e.navigationTrigger;\n        this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n      } else if (e instanceof NavigationEnd) {\n        this.lastId = e.id;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n      } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {\n        this.lastSource = undefined;\n        this.restoredId = 0;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n      }\n    });\n  }\n  consumeScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (!(e instanceof Scroll)) return;\n      // a popstate event. The pop state event will always ignore anchor scrolling.\n      if (e.position) {\n        if (this.options.scrollPositionRestoration === 'top') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        } else if (this.options.scrollPositionRestoration === 'enabled') {\n          this.viewportScroller.scrollToPosition(e.position);\n        }\n        // imperative navigation \"forward\"\n      } else {\n        if (e.anchor && this.options.anchorScrolling === 'enabled') {\n          this.viewportScroller.scrollToAnchor(e.anchor);\n        } else if (this.options.scrollPositionRestoration !== 'disabled') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        }\n      }\n    });\n  }\n  scheduleScrollEvent(routerEvent, anchor) {\n    this.zone.runOutsideAngular(() => {\n      // The scroll event needs to be delayed until after change detection. Otherwise, we may\n      // attempt to restore the scroll position before the router outlet has fully rendered the\n      // component by executing its update block of the template function.\n      setTimeout(() => {\n        this.zone.run(() => {\n          this.transitions.events.next(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor));\n        });\n      }, 0);\n    });\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.routerEventsSubscription?.unsubscribe();\n    this.scrollEventsSubscription?.unsubscribe();\n  }\n  static ɵfac = function RouterScroller_Factory(__ngFactoryType__) {\n    i0.ɵɵinvalidFactory();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterScroller,\n    factory: RouterScroller.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterScroller, [{\n    type: Injectable\n  }], () => [{\n    type: UrlSerializer\n  }, {\n    type: NavigationTransitions\n  }, {\n    type: i3.ViewportScroller\n  }, {\n    type: i0.NgZone\n  }, {\n    type: undefined\n  }], null);\n})();\n\n/**\n * Sets up providers necessary to enable `Router` functionality for the application.\n * Allows to configure a set of routes as well as extra features that should be enabled.\n *\n * @usageNotes\n *\n * Basic example of how you can add a Router to your application:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent, {\n *   providers: [provideRouter(appRoutes)]\n * });\n * ```\n *\n * You can also enable optional features in the Router by adding functions from the `RouterFeatures`\n * type:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes,\n *         withDebugTracing(),\n *         withRouterConfig({paramsInheritanceStrategy: 'always'}))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link RouterFeatures}\n *\n * @publicApi\n * @param routes A set of `Route`s to use for the application routing table.\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to setup a Router.\n */\nfunction provideRouter(routes, ...features) {\n  return makeEnvironmentProviders([{\n    provide: ROUTES,\n    multi: true,\n    useValue: routes\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n    provide: ROUTER_IS_PROVIDED,\n    useValue: true\n  } : [], {\n    provide: ActivatedRoute,\n    useFactory: rootRoute,\n    deps: [Router]\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useFactory: getBootstrapListener\n  }, features.map(feature => feature.ɵproviders)]);\n}\nfunction rootRoute(router) {\n  return router.routerState.root;\n}\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature(kind, providers) {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers\n  };\n}\n/**\n * An Injection token used to indicate whether `provideRouter` or `RouterModule.forRoot` was ever\n * called.\n */\nconst ROUTER_IS_PROVIDED = new InjectionToken('', {\n  providedIn: 'root',\n  factory: () => false\n});\nconst routerIsProvidedDevModeCheck = {\n  provide: ENVIRONMENT_INITIALIZER,\n  multi: true,\n  useFactory() {\n    return () => {\n      if (!inject(ROUTER_IS_PROVIDED)) {\n        console.warn('`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' + 'This is likely a mistake.');\n      }\n    };\n  }\n};\n/**\n * Registers a DI provider for a set of routes.\n * @param routes The route configuration to provide.\n *\n * @usageNotes\n *\n * ```ts\n * @NgModule({\n *   providers: [provideRoutes(ROUTES)]\n * })\n * class LazyLoadedChildModule {}\n * ```\n *\n * @deprecated If necessary, provide routes using the `ROUTES` `InjectionToken`.\n * @see {@link ROUTES}\n * @publicApi\n */\nfunction provideRoutes(routes) {\n  return [{\n    provide: ROUTES,\n    multi: true,\n    useValue: routes\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : []];\n}\n/**\n * Enables customizable scrolling behavior for router navigations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable scrolling feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withInMemoryScrolling())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link ViewportScroller}\n *\n * @publicApi\n * @param options Set of configuration parameters to customize scrolling behavior, see\n *     `InMemoryScrollingOptions` for additional information.\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withInMemoryScrolling(options = {}) {\n  const providers = [{\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n    }\n  }];\n  return routerFeature(4 /* RouterFeatureKind.InMemoryScrollingFeature */, providers);\n}\nfunction getBootstrapListener() {\n  const injector = inject(Injector);\n  return bootstrappedComponentRef => {\n    const ref = injector.get(ApplicationRef);\n    if (bootstrappedComponentRef !== ref.components[0]) {\n      return;\n    }\n    const router = injector.get(Router);\n    const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n    if (injector.get(INITIAL_NAVIGATION) === 1 /* InitialNavigation.EnabledNonBlocking */) {\n      router.initialNavigation();\n    }\n    injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();\n    injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();\n    router.resetRootComponentType(ref.componentTypes[0]);\n    if (!bootstrapDone.closed) {\n      bootstrapDone.next();\n      bootstrapDone.complete();\n      bootstrapDone.unsubscribe();\n    }\n  };\n}\n/**\n * A subject used to indicate that the bootstrapping phase is done. When initial navigation is\n * `enabledBlocking`, the first navigation waits until bootstrapping is finished before continuing\n * to the activation phase.\n */\nconst BOOTSTRAP_DONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '', {\n  factory: () => {\n    return new Subject();\n  }\n});\nconst INITIAL_NAVIGATION = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '', {\n  providedIn: 'root',\n  factory: () => 1 /* InitialNavigation.EnabledNonBlocking */\n});\n/**\n * Configures initial navigation to start before the root component is created.\n *\n * The bootstrap is blocked until the initial navigation is complete. This should be set in case\n * you use [server-side rendering](guide/ssr), but do not enable [hydration](guide/hydration) for\n * your application.\n *\n * @usageNotes\n *\n * Basic example of how you can enable this navigation behavior:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withEnabledBlockingInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withEnabledBlockingInitialNavigation() {\n  const providers = [{\n    provide: INITIAL_NAVIGATION,\n    useValue: 0 /* InitialNavigation.EnabledBlocking */\n  }, {\n    provide: APP_INITIALIZER,\n    multi: true,\n    deps: [Injector],\n    useFactory: injector => {\n      const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());\n      return () => {\n        return locationInitialized.then(() => {\n          return new Promise(resolve => {\n            const router = injector.get(Router);\n            const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n            afterNextNavigation(router, () => {\n              // Unblock APP_INITIALIZER in case the initial navigation was canceled or errored\n              // without a redirect.\n              resolve(true);\n            });\n            injector.get(NavigationTransitions).afterPreactivation = () => {\n              // Unblock APP_INITIALIZER once we get to `afterPreactivation`. At this point, we\n              // assume activation will complete successfully (even though this is not\n              // guaranteed).\n              resolve(true);\n              return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n            };\n            router.initialNavigation();\n          });\n        });\n      };\n    }\n  }];\n  return routerFeature(2 /* RouterFeatureKind.EnabledBlockingInitialNavigationFeature */, providers);\n}\n/**\n * Disables initial navigation.\n *\n * Use if there is a reason to have more control over when the router starts its initial navigation\n * due to some complex initialization logic.\n *\n * @usageNotes\n *\n * Basic example of how you can disable initial navigation:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDisabledInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withDisabledInitialNavigation() {\n  const providers = [{\n    provide: APP_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const router = inject(Router);\n      return () => {\n        router.setUpLocationChangeListener();\n      };\n    }\n  }, {\n    provide: INITIAL_NAVIGATION,\n    useValue: 2 /* InitialNavigation.Disabled */\n  }];\n  return routerFeature(3 /* RouterFeatureKind.DisabledInitialNavigationFeature */, providers);\n}\n/**\n * Enables logging of all internal navigation events to the console.\n * Extra logging might be useful for debugging purposes to inspect Router event sequence.\n *\n * @usageNotes\n *\n * Basic example of how you can enable debug tracing:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDebugTracing())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withDebugTracing() {\n  let providers = [];\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    providers = [{\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useFactory: () => {\n        const router = inject(Router);\n        return () => router.events.subscribe(e => {\n          // tslint:disable:no-console\n          console.group?.(`Router Event: ${e.constructor.name}`);\n          console.log(stringifyEvent(e));\n          console.log(e);\n          console.groupEnd?.();\n          // tslint:enable:no-console\n        });\n      }\n    }];\n  } else {\n    providers = [];\n  }\n  return routerFeature(1 /* RouterFeatureKind.DebugTracingFeature */, providers);\n}\nconst ROUTER_PRELOADER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '');\n/**\n * Allows to configure a preloading strategy to use. The strategy is configured by providing a\n * reference to a class that implements a `PreloadingStrategy`.\n *\n * @usageNotes\n *\n * Basic example of how you can configure preloading:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withPreloading(PreloadAllModules))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param preloadingStrategy A reference to a class that implements a `PreloadingStrategy` that\n *     should be used.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withPreloading(preloadingStrategy) {\n  const providers = [{\n    provide: ROUTER_PRELOADER,\n    useExisting: RouterPreloader\n  }, {\n    provide: PreloadingStrategy,\n    useExisting: preloadingStrategy\n  }];\n  return routerFeature(0 /* RouterFeatureKind.PreloadingFeature */, providers);\n}\n/**\n * Allows to provide extra parameters to configure Router.\n *\n * @usageNotes\n *\n * Basic example of how you can provide extra configuration options:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withRouterConfig({\n *          onSameUrlNavigation: 'reload'\n *       }))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param options A set of parameters to configure Router, see `RouterConfigOptions` for\n *     additional information.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withRouterConfig(options) {\n  const providers = [{\n    provide: ROUTER_CONFIGURATION,\n    useValue: options\n  }];\n  return routerFeature(5 /* RouterFeatureKind.RouterConfigurationFeature */, providers);\n}\n/**\n * Provides the location strategy that uses the URL fragment instead of the history API.\n *\n * @usageNotes\n *\n * Basic example of how you can use the hash location option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withHashLocation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link HashLocationStrategy}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withHashLocation() {\n  const providers = [{\n    provide: LocationStrategy,\n    useClass: HashLocationStrategy\n  }];\n  return routerFeature(6 /* RouterFeatureKind.RouterHashLocationFeature */, providers);\n}\n/**\n * Provides a function which is called when a navigation error occurs.\n *\n * This function is run inside application's [injection context](guide/di/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\n *\n * This function can return a `RedirectCommand` to convert the error to a redirect, similar to returning\n * a `UrlTree` or `RedirectCommand` from a guard. This will also prevent the `Router` from emitting\n * `NavigationError`; it will instead emit `NavigationCancel` with code NavigationCancellationCode.Redirect.\n * Return values other than `RedirectCommand` are ignored and do not change any behavior with respect to\n * how the `Router` handles the error.\n *\n * @usageNotes\n *\n * Basic example of how you can use the error handler option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withNavigationErrorHandler((e: NavigationError) =>\n * inject(MyErrorTracker).trackError(e)))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link NavigationError}\n * @see {@link core/inject}\n * @see {@link runInInjectionContext}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withNavigationErrorHandler(handler) {\n  const providers = [{\n    provide: NAVIGATION_ERROR_HANDLER,\n    useValue: handler\n  }];\n  return routerFeature(7 /* RouterFeatureKind.NavigationErrorHandlerFeature */, providers);\n}\n/**\n * Enables binding information from the `Router` state directly to the inputs of the component in\n * `Route` configurations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withComponentInputBinding())\n *     ]\n *   }\n * );\n * ```\n *\n * The router bindings information from any of the following sources:\n *\n *  - query parameters\n *  - path and matrix parameters\n *  - static route data\n *  - data from resolvers\n *\n * Duplicate keys are resolved in the same order from above, from least to greatest,\n * meaning that resolvers have the highest precedence and override any of the other information\n * from the route.\n *\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. This prevents previous information from being\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n * Default values can be provided with a resolver on the route to ensure the value is always present\n * or an input and use an input transform in the component.\n *\n * @see {@link guide/components/inputs#input-transforms input transforms}\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withComponentInputBinding() {\n  const providers = [RoutedComponentInputBinder, {\n    provide: INPUT_BINDER,\n    useExisting: RoutedComponentInputBinder\n  }];\n  return routerFeature(8 /* RouterFeatureKind.ComponentInputBindingFeature */, providers);\n}\n/**\n * Enables view transitions in the Router by running the route activation and deactivation inside of\n * `document.startViewTransition`.\n *\n * Note: The View Transitions API is not available in all browsers. If the browser does not support\n * view transitions, the Router will not attempt to start a view transition and continue processing\n * the navigation as usual.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withViewTransitions())\n *     ]\n *   }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n * @developerPreview\n */\nfunction withViewTransitions(options) {\n  const providers = [{\n    provide: CREATE_VIEW_TRANSITION,\n    useValue: createViewTransition\n  }, {\n    provide: VIEW_TRANSITION_OPTIONS,\n    useValue: {\n      skipNextTransition: !!options?.skipInitialTransition,\n      ...options\n    }\n  }];\n  return routerFeature(9 /* RouterFeatureKind.ViewTransitionsFeature */, providers);\n}\n\n/**\n * The directives defined in the `RouterModule`.\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent];\n/**\n * @docsNotRequired\n */\nconst ROUTER_FORROOT_GUARD = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router duplicate forRoot guard' : 'ROUTER_FORROOT_GUARD');\n// TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept\n// here to avoid a breaking change whereby the provider order matters based on where the\n// `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a \"breaking\"\n// change in a major version.\nconst ROUTER_PROVIDERS = [Location, {\n  provide: UrlSerializer,\n  useClass: DefaultUrlSerializer\n}, Router, ChildrenOutletContexts, {\n  provide: ActivatedRoute,\n  useFactory: rootRoute,\n  deps: [Router]\n}, RouterConfigLoader,\n// Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can\n// be removed when `provideRoutes` is removed.\ntypeof ngDevMode === 'undefined' || ngDevMode ? {\n  provide: ROUTER_IS_PROVIDED,\n  useValue: true\n} : []];\n/**\n * @description\n *\n * Adds directives and providers for in-app navigation among views defined in an application.\n * Use the Angular `Router` service to declaratively specify application states and manage state\n * transitions.\n *\n * You can import this NgModule multiple times, once for each lazy-loaded bundle.\n * However, only one `Router` service can be active.\n * To ensure this, there are two ways to register routes when importing this module:\n *\n * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given\n * routes, and the `Router` service itself.\n * * The `forChild()` method creates an `NgModule` that contains all the directives and the given\n * routes, but does not include the `Router` service.\n *\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks) for an\n * overview of how the `Router` service should be used.\n *\n * @publicApi\n */\nclass RouterModule {\n  constructor(guard) {}\n  /**\n   * Creates and configures a module with all the router providers and directives.\n   * Optionally sets up an application listener to perform an initial navigation.\n   *\n   * When registering the NgModule at the root, import as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forRoot(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the application.\n   * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\n   * @return The new `NgModule`.\n   *\n   */\n  static forRoot(routes, config) {\n    return {\n      ngModule: RouterModule,\n      providers: [ROUTER_PROVIDERS, typeof ngDevMode === 'undefined' || ngDevMode ? config?.enableTracing ? withDebugTracing().ɵproviders : [] : [], {\n        provide: ROUTES,\n        multi: true,\n        useValue: routes\n      }, {\n        provide: ROUTER_FORROOT_GUARD,\n        useFactory: provideForRootGuard,\n        deps: [[Router, new Optional(), new SkipSelf()]]\n      }, config?.errorHandler ? {\n        provide: NAVIGATION_ERROR_HANDLER,\n        useValue: config.errorHandler\n      } : [], {\n        provide: ROUTER_CONFIGURATION,\n        useValue: config ? config : {}\n      }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [], config?.enableViewTransitions ? withViewTransitions().ɵproviders : [], provideRouterInitializer()]\n    };\n  }\n  /**\n   * Creates a module with all the router directives and a provider registering routes,\n   * without creating a new Router service.\n   * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forChild(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the submodule.\n   * @return The new NgModule.\n   *\n   */\n  static forChild(routes) {\n    return {\n      ngModule: RouterModule,\n      providers: [{\n        provide: ROUTES,\n        multi: true,\n        useValue: routes\n      }]\n    };\n  }\n  static ɵfac = function RouterModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterModule)(i0.ɵɵinject(ROUTER_FORROOT_GUARD, 8));\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: RouterModule,\n    imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent],\n    exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterModule, [{\n    type: NgModule,\n    args: [{\n      imports: ROUTER_DIRECTIVES,\n      exports: ROUTER_DIRECTIVES\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [ROUTER_FORROOT_GUARD]\n    }]\n  }], null);\n})();\n/**\n * For internal use by `RouterModule` only. Note that this differs from `withInMemoryRouterScroller`\n * because it reads from the `ExtraOptions` which should not be used in the standalone world.\n */\nfunction provideRouterScroller() {\n  return {\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const config = inject(ROUTER_CONFIGURATION);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      if (config.scrollOffset) {\n        viewportScroller.setOffset(config.scrollOffset);\n      }\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);\n    }\n  };\n}\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` should\n// provide hash location directly via `{provide: LocationStrategy, useClass: HashLocationStrategy}`.\nfunction provideHashLocationStrategy() {\n  return {\n    provide: LocationStrategy,\n    useClass: HashLocationStrategy\n  };\n}\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` does not\n// need this at all because `PathLocationStrategy` is the default factory for `LocationStrategy`.\nfunction providePathLocationStrategy() {\n  return {\n    provide: LocationStrategy,\n    useClass: PathLocationStrategy\n  };\n}\nfunction provideForRootGuard(router) {\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {\n    throw new ɵRuntimeError(4007 /* RuntimeErrorCode.FOR_ROOT_CALLED_TWICE */, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` + ` Lazy loaded modules should use RouterModule.forChild() instead.`);\n  }\n  return 'guarded';\n}\n// Note: For internal use only with `RouterModule`. Standalone router setup with `provideRouter`\n// users call `withXInitialNavigation` directly.\nfunction provideInitialNavigation(config) {\n  return [config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [], config.initialNavigation === 'enabledBlocking' ? withEnabledBlockingInitialNavigation().ɵproviders : []];\n}\n// TODO(atscott): This should not be in the public API\n/**\n * A DI token for the router initializer that\n * is called after the app is bootstrapped.\n *\n * @publicApi\n */\nconst ROUTER_INITIALIZER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '');\nfunction provideRouterInitializer() {\n  return [\n  // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just\n  // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.\n  {\n    provide: ROUTER_INITIALIZER,\n    useFactory: getBootstrapListener\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useExisting: ROUTER_INITIALIZER\n  }];\n}\n\n/**\n * Maps an array of injectable classes with canMatch functions to an array of equivalent\n * `CanMatchFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanMatch(providers) {\n  return providers.map(provider => (...params) => inject(provider).canMatch(...params));\n}\n/**\n * Maps an array of injectable classes with canActivate functions to an array of equivalent\n * `CanActivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanActivate(providers) {\n  return providers.map(provider => (...params) => inject(provider).canActivate(...params));\n}\n/**\n * Maps an array of injectable classes with canActivateChild functions to an array of equivalent\n * `CanActivateChildFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanActivateChild(providers) {\n  return providers.map(provider => (...params) => inject(provider).canActivateChild(...params));\n}\n/**\n * Maps an array of injectable classes with canDeactivate functions to an array of equivalent\n * `CanDeactivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanDeactivate(providers) {\n  return providers.map(provider => (...params) => inject(provider).canDeactivate(...params));\n}\n/**\n * Maps an injectable class with a resolve function to an equivalent `ResolveFn`\n * for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='Resolve'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToResolve(provider) {\n  return (...params) => inject(provider).resolve(...params);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the router package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\nfunction getLoadedRoutes(route) {\n  return route._loadedRoutes;\n}\nɵpublishExternalGlobalUtil('ɵgetLoadedRoutes', getLoadedRoutes);\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTER_OUTLET_DATA, ROUTES, RedirectCommand, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLink as RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, createUrlTreeFromSnapshot, defaultUrlMatcher, mapToCanActivate, mapToCanActivateChild, mapToCanDeactivate, mapToCanMatch, mapToResolve, provideRouter, provideRoutes, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, withViewTransitions, ɵEmptyOutletComponent, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS, afterNextNavigation as ɵafterNextNavigation, loadChildren as ɵloadChildren };\n"],
-  "mappings": "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",
-  "names": ["last", "tree", "match", "res", "commands", "noMatch", "EventType", "NavigationCancellationCode", "NavigationSkippedCode", "t", "c", "node", "map", "tree", "contexts", "canActivate", "last", "s", "tree", "input", "from", "t", "NavigationResult", "e"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/_metadata.json
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/_metadata.json	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,34 +1,0 @@
-{
-  "hash": "ad3b8f0e",
-  "configHash": "793ec1c7",
-  "lockfileHash": "b10492bf",
-  "browserHash": "9387b085",
-  "optimized": {
-    "@angular/core": {
-      "src": "../../../../../../node_modules/@angular/core/fesm2022/core.mjs",
-      "file": "@angular_core.js",
-      "fileHash": "2485ee1b",
-      "needsInterop": false
-    },
-    "@angular/platform-browser": {
-      "src": "../../../../../../node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs",
-      "file": "@angular_platform-browser.js",
-      "fileHash": "84603227",
-      "needsInterop": false
-    },
-    "@angular/router": {
-      "src": "../../../../../../node_modules/@angular/router/fesm2022/router.mjs",
-      "file": "@angular_router.js",
-      "fileHash": "e365b221",
-      "needsInterop": false
-    }
-  },
-  "chunks": {
-    "chunk-DDSXTL3A": {
-      "file": "chunk-DDSXTL3A.js"
-    },
-    "chunk-GZKEX4RU": {
-      "file": "chunk-GZKEX4RU.js"
-    }
-  }
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-DDSXTL3A.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-DDSXTL3A.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,9232 +1,0 @@
-import {
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  CSP_NONCE,
-  ChangeDetectorRef,
-  Console,
-  DEFAULT_CURRENCY_CODE,
-  Directive,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  Host,
-  IMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS,
-  INJECTOR_SCOPE,
-  Inject,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  KeyValueDiffers,
-  LOCALE_ID,
-  LocaleDataIndex,
-  NgModule,
-  NgModuleRef$1,
-  NgZone,
-  Observable,
-  Optional,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PendingTasksInternal,
-  Pipe,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  RuntimeError,
-  SecurityContext,
-  SkipSelf,
-  Subject,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TransferState,
-  Version,
-  ViewContainerRef,
-  ViewEncapsulation,
-  XSS_SECURITY_URL,
-  ZONELESS_ENABLED,
-  __async,
-  __objRest,
-  __spreadProps,
-  __spreadValues,
-  _global,
-  _sanitizeHtml,
-  _sanitizeUrl,
-  allowSanitizationBypassAndThrow,
-  booleanAttribute,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl,
-  concatMap,
-  createNgModule,
-  createPlatformFactory,
-  filter,
-  finalize,
-  findLocaleData,
-  formatRuntimeError,
-  forwardRef,
-  from,
-  getLocalePluralCase,
-  inject,
-  internalCreateApplication,
-  isPromise,
-  isSubscribable,
-  makeEnvironmentProviders,
-  makeStateKey,
-  map,
-  numberAttribute,
-  of,
-  performanceMarkFeature,
-  platformCore,
-  runInInjectionContext,
-  setClassMetadata,
-  setDocument,
-  stringify,
-  switchMap,
-  tap,
-  truncateMiddle,
-  untracked,
-  unwrapSafeValue,
-  withDomHydration,
-  withEventReplay,
-  withI18nSupport,
-  withIncrementalHydration,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵstyleProp
-} from "./chunk-GZKEX4RU.js";
-
-// node_modules/@angular/common/fesm2022/common.mjs
-var _DOM = null;
-function getDOM() {
-  return _DOM;
-}
-function setRootDomAdapter(adapter) {
-  _DOM ??= adapter;
-}
-var DomAdapter = class {
-};
-var PlatformNavigation = class _PlatformNavigation {
-  static ɵfac = function PlatformNavigation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformNavigation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformNavigation,
-    factory: () => (() => window.navigation)(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformNavigation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => window.navigation
-    }]
-  }], null, null);
-})();
-var DOCUMENT = new InjectionToken(ngDevMode ? "DocumentToken" : "");
-var PlatformLocation = class _PlatformLocation {
-  historyGo(relativePosition) {
-    throw new Error(ngDevMode ? "Not implemented" : "");
-  }
-  static ɵfac = function PlatformLocation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformLocation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformLocation,
-    factory: () => (() => inject(BrowserPlatformLocation))(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformLocation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => inject(BrowserPlatformLocation)
-    }]
-  }], null, null);
-})();
-var LOCATION_INITIALIZED = new InjectionToken(ngDevMode ? "Location Initialized" : "");
-var BrowserPlatformLocation = class _BrowserPlatformLocation extends PlatformLocation {
-  _location;
-  _history;
-  _doc = inject(DOCUMENT);
-  constructor() {
-    super();
-    this._location = window.location;
-    this._history = window.history;
-  }
-  getBaseHrefFromDOM() {
-    return getDOM().getBaseHref(this._doc);
-  }
-  onPopState(fn) {
-    const window2 = getDOM().getGlobalEventTarget(this._doc, "window");
-    window2.addEventListener("popstate", fn, false);
-    return () => window2.removeEventListener("popstate", fn);
-  }
-  onHashChange(fn) {
-    const window2 = getDOM().getGlobalEventTarget(this._doc, "window");
-    window2.addEventListener("hashchange", fn, false);
-    return () => window2.removeEventListener("hashchange", fn);
-  }
-  get href() {
-    return this._location.href;
-  }
-  get protocol() {
-    return this._location.protocol;
-  }
-  get hostname() {
-    return this._location.hostname;
-  }
-  get port() {
-    return this._location.port;
-  }
-  get pathname() {
-    return this._location.pathname;
-  }
-  get search() {
-    return this._location.search;
-  }
-  get hash() {
-    return this._location.hash;
-  }
-  set pathname(newPath) {
-    this._location.pathname = newPath;
-  }
-  pushState(state, title, url) {
-    this._history.pushState(state, title, url);
-  }
-  replaceState(state, title, url) {
-    this._history.replaceState(state, title, url);
-  }
-  forward() {
-    this._history.forward();
-  }
-  back() {
-    this._history.back();
-  }
-  historyGo(relativePosition = 0) {
-    this._history.go(relativePosition);
-  }
-  getState() {
-    return this._history.state;
-  }
-  static ɵfac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserPlatformLocation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _BrowserPlatformLocation,
-    factory: () => (() => new _BrowserPlatformLocation())(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserPlatformLocation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => new BrowserPlatformLocation()
-    }]
-  }], () => [], null);
-})();
-function joinWithSlash(start, end) {
-  if (start.length == 0) {
-    return end;
-  }
-  if (end.length == 0) {
-    return start;
-  }
-  let slashes = 0;
-  if (start.endsWith("/")) {
-    slashes++;
-  }
-  if (end.startsWith("/")) {
-    slashes++;
-  }
-  if (slashes == 2) {
-    return start + end.substring(1);
-  }
-  if (slashes == 1) {
-    return start + end;
-  }
-  return start + "/" + end;
-}
-function stripTrailingSlash(url) {
-  const match = url.match(/#|\?|$/);
-  const pathEndIdx = match && match.index || url.length;
-  const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === "/" ? 1 : 0);
-  return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);
-}
-function normalizeQueryParams(params) {
-  return params && params[0] !== "?" ? "?" + params : params;
-}
-var LocationStrategy = class _LocationStrategy {
-  historyGo(relativePosition) {
-    throw new Error(ngDevMode ? "Not implemented" : "");
-  }
-  static ɵfac = function LocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LocationStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _LocationStrategy,
-    factory: () => (() => inject(PathLocationStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LocationStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(PathLocationStrategy)
-    }]
-  }], null, null);
-})();
-var APP_BASE_HREF = new InjectionToken(ngDevMode ? "appBaseHref" : "");
-var PathLocationStrategy = class _PathLocationStrategy extends LocationStrategy {
-  _platformLocation;
-  _baseHref;
-  _removeListenerFns = [];
-  constructor(_platformLocation, href) {
-    super();
-    this._platformLocation = _platformLocation;
-    this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? "";
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    while (this._removeListenerFns.length) {
-      this._removeListenerFns.pop()();
-    }
-  }
-  onPopState(fn) {
-    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
-  }
-  getBaseHref() {
-    return this._baseHref;
-  }
-  prepareExternalUrl(internal) {
-    return joinWithSlash(this._baseHref, internal);
-  }
-  path(includeHash = false) {
-    const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);
-    const hash = this._platformLocation.hash;
-    return hash && includeHash ? `${pathname}${hash}` : pathname;
-  }
-  pushState(state, title, url, queryParams) {
-    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
-    this._platformLocation.pushState(state, title, externalUrl);
-  }
-  replaceState(state, title, url, queryParams) {
-    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
-    this._platformLocation.replaceState(state, title, externalUrl);
-  }
-  forward() {
-    this._platformLocation.forward();
-  }
-  back() {
-    this._platformLocation.back();
-  }
-  getState() {
-    return this._platformLocation.getState();
-  }
-  historyGo(relativePosition = 0) {
-    this._platformLocation.historyGo?.(relativePosition);
-  }
-  static ɵfac = function PathLocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PathLocationStrategy)(ɵɵinject(PlatformLocation), ɵɵinject(APP_BASE_HREF, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PathLocationStrategy,
-    factory: _PathLocationStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PathLocationStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: PlatformLocation
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [APP_BASE_HREF]
-    }]
-  }], null);
-})();
-var HashLocationStrategy = class _HashLocationStrategy extends LocationStrategy {
-  _platformLocation;
-  _baseHref = "";
-  _removeListenerFns = [];
-  constructor(_platformLocation, _baseHref) {
-    super();
-    this._platformLocation = _platformLocation;
-    if (_baseHref != null) {
-      this._baseHref = _baseHref;
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    while (this._removeListenerFns.length) {
-      this._removeListenerFns.pop()();
-    }
-  }
-  onPopState(fn) {
-    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
-  }
-  getBaseHref() {
-    return this._baseHref;
-  }
-  path(includeHash = false) {
-    const path = this._platformLocation.hash ?? "#";
-    return path.length > 0 ? path.substring(1) : path;
-  }
-  prepareExternalUrl(internal) {
-    const url = joinWithSlash(this._baseHref, internal);
-    return url.length > 0 ? "#" + url : url;
-  }
-  pushState(state, title, path, queryParams) {
-    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
-    if (url.length == 0) {
-      url = this._platformLocation.pathname;
-    }
-    this._platformLocation.pushState(state, title, url);
-  }
-  replaceState(state, title, path, queryParams) {
-    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
-    if (url.length == 0) {
-      url = this._platformLocation.pathname;
-    }
-    this._platformLocation.replaceState(state, title, url);
-  }
-  forward() {
-    this._platformLocation.forward();
-  }
-  back() {
-    this._platformLocation.back();
-  }
-  getState() {
-    return this._platformLocation.getState();
-  }
-  historyGo(relativePosition = 0) {
-    this._platformLocation.historyGo?.(relativePosition);
-  }
-  static ɵfac = function HashLocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HashLocationStrategy)(ɵɵinject(PlatformLocation), ɵɵinject(APP_BASE_HREF, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HashLocationStrategy,
-    factory: _HashLocationStrategy.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HashLocationStrategy, [{
-    type: Injectable
-  }], () => [{
-    type: PlatformLocation
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [APP_BASE_HREF]
-    }]
-  }], null);
-})();
-var Location = class _Location {
-  /** @internal */
-  _subject = new Subject();
-  /** @internal */
-  _basePath;
-  /** @internal */
-  _locationStrategy;
-  /** @internal */
-  _urlChangeListeners = [];
-  /** @internal */
-  _urlChangeSubscription = null;
-  constructor(locationStrategy) {
-    this._locationStrategy = locationStrategy;
-    const baseHref = this._locationStrategy.getBaseHref();
-    this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));
-    this._locationStrategy.onPopState((ev) => {
-      this._subject.next({
-        "url": this.path(true),
-        "pop": true,
-        "state": ev.state,
-        "type": ev.type
-      });
-    });
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this._urlChangeSubscription?.unsubscribe();
-    this._urlChangeListeners = [];
-  }
-  /**
-   * Normalizes the URL path for this location.
-   *
-   * @param includeHash True to include an anchor fragment in the path.
-   *
-   * @returns The normalized URL path.
-   */
-  // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
-  // removed.
-  path(includeHash = false) {
-    return this.normalize(this._locationStrategy.path(includeHash));
-  }
-  /**
-   * Reports the current state of the location history.
-   * @returns The current value of the `history.state` object.
-   */
-  getState() {
-    return this._locationStrategy.getState();
-  }
-  /**
-   * Normalizes the given path and compares to the current normalized path.
-   *
-   * @param path The given URL path.
-   * @param query Query parameters.
-   *
-   * @returns True if the given URL path is equal to the current normalized path, false
-   * otherwise.
-   */
-  isCurrentPathEqualTo(path, query = "") {
-    return this.path() == this.normalize(path + normalizeQueryParams(query));
-  }
-  /**
-   * Normalizes a URL path by stripping any trailing slashes.
-   *
-   * @param url String representing a URL.
-   *
-   * @returns The normalized URL string.
-   */
-  normalize(url) {
-    return _Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));
-  }
-  /**
-   * Normalizes an external URL path.
-   * If the given URL doesn't begin with a leading slash (`'/'`), adds one
-   * before normalizing. Adds a hash if `HashLocationStrategy` is
-   * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
-   *
-   * @param url String representing a URL.
-   *
-   * @returns  A normalized platform-specific URL.
-   */
-  prepareExternalUrl(url) {
-    if (url && url[0] !== "/") {
-      url = "/" + url;
-    }
-    return this._locationStrategy.prepareExternalUrl(url);
-  }
-  // TODO: rename this method to pushState
-  /**
-   * Changes the browser's URL to a normalized version of a given URL, and pushes a
-   * new item onto the platform's history.
-   *
-   * @param path  URL path to normalize.
-   * @param query Query parameters.
-   * @param state Location history state.
-   *
-   */
-  go(path, query = "", state = null) {
-    this._locationStrategy.pushState(state, "", path, query);
-    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
-  }
-  /**
-   * Changes the browser's URL to a normalized version of the given URL, and replaces
-   * the top item on the platform's history stack.
-   *
-   * @param path  URL path to normalize.
-   * @param query Query parameters.
-   * @param state Location history state.
-   */
-  replaceState(path, query = "", state = null) {
-    this._locationStrategy.replaceState(state, "", path, query);
-    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
-  }
-  /**
-   * Navigates forward in the platform's history.
-   */
-  forward() {
-    this._locationStrategy.forward();
-  }
-  /**
-   * Navigates back in the platform's history.
-   */
-  back() {
-    this._locationStrategy.back();
-  }
-  /**
-   * Navigate to a specific page from session history, identified by its relative position to the
-   * current page.
-   *
-   * @param relativePosition  Position of the target page in the history relative to the current
-   *     page.
-   * A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)`
-   * moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go
-   * beyond what's stored in the history session, we stay in the current page. Same behaviour occurs
-   * when `relativePosition` equals 0.
-   * @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history
-   */
-  historyGo(relativePosition = 0) {
-    this._locationStrategy.historyGo?.(relativePosition);
-  }
-  /**
-   * Registers a URL change listener. Use to catch updates performed by the Angular
-   * framework that are not detectible through "popstate" or "hashchange" events.
-   *
-   * @param fn The change handler function, which take a URL and a location history state.
-   * @returns A function that, when executed, unregisters a URL change listener.
-   */
-  onUrlChange(fn) {
-    this._urlChangeListeners.push(fn);
-    this._urlChangeSubscription ??= this.subscribe((v) => {
-      this._notifyUrlChangeListeners(v.url, v.state);
-    });
-    return () => {
-      const fnIndex = this._urlChangeListeners.indexOf(fn);
-      this._urlChangeListeners.splice(fnIndex, 1);
-      if (this._urlChangeListeners.length === 0) {
-        this._urlChangeSubscription?.unsubscribe();
-        this._urlChangeSubscription = null;
-      }
-    };
-  }
-  /** @internal */
-  _notifyUrlChangeListeners(url = "", state) {
-    this._urlChangeListeners.forEach((fn) => fn(url, state));
-  }
-  /**
-   * Subscribes to the platform's `popState` events.
-   *
-   * Note: `Location.go()` does not trigger the `popState` event in the browser. Use
-   * `Location.onUrlChange()` to subscribe to URL changes instead.
-   *
-   * @param value Event that is triggered when the state history changes.
-   * @param exception The exception to throw.
-   *
-   * @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate)
-   *
-   * @returns Subscribed events.
-   */
-  subscribe(onNext, onThrow, onReturn) {
-    return this._subject.subscribe({
-      next: onNext,
-      error: onThrow ?? void 0,
-      complete: onReturn ?? void 0
-    });
-  }
-  /**
-   * Normalizes URL parameters by prepending with `?` if needed.
-   *
-   * @param  params String of URL parameters.
-   *
-   * @returns The normalized URL parameters string.
-   */
-  static normalizeQueryParams = normalizeQueryParams;
-  /**
-   * Joins two parts of a URL with a slash if needed.
-   *
-   * @param start  URL string
-   * @param end    URL string
-   *
-   *
-   * @returns The joined URL string.
-   */
-  static joinWithSlash = joinWithSlash;
-  /**
-   * Removes a trailing slash from a URL string if needed.
-   * Looks for the first occurrence of either `#`, `?`, or the end of the
-   * line as `/` characters and removes the trailing slash if one exists.
-   *
-   * @param url URL string.
-   *
-   * @returns The URL string, modified if needed.
-   */
-  static stripTrailingSlash = stripTrailingSlash;
-  static ɵfac = function Location_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Location)(ɵɵinject(LocationStrategy));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Location,
-    factory: () => createLocation(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Location, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      // See #23917
-      useFactory: createLocation
-    }]
-  }], () => [{
-    type: LocationStrategy
-  }], null);
-})();
-function createLocation() {
-  return new Location(ɵɵinject(LocationStrategy));
-}
-function _stripBasePath(basePath, url) {
-  if (!basePath || !url.startsWith(basePath)) {
-    return url;
-  }
-  const strippedUrl = url.substring(basePath.length);
-  if (strippedUrl === "" || ["/", ";", "?", "#"].includes(strippedUrl[0])) {
-    return strippedUrl;
-  }
-  return url;
-}
-function _stripIndexHtml(url) {
-  return url.replace(/\/index.html$/, "");
-}
-function _stripOrigin(baseHref) {
-  const isAbsoluteUrl2 = new RegExp("^(https?:)?//").test(baseHref);
-  if (isAbsoluteUrl2) {
-    const [, pathname] = baseHref.split(/\/\/[^\/]+/);
-    return pathname;
-  }
-  return baseHref;
-}
-var CURRENCIES_EN = {
-  "ADP": [void 0, void 0, 0],
-  "AFN": [void 0, "؋", 0],
-  "ALL": [void 0, void 0, 0],
-  "AMD": [void 0, "֏", 2],
-  "AOA": [void 0, "Kz"],
-  "ARS": [void 0, "$"],
-  "AUD": ["A$", "$"],
-  "AZN": [void 0, "₼"],
-  "BAM": [void 0, "KM"],
-  "BBD": [void 0, "$"],
-  "BDT": [void 0, "৳"],
-  "BHD": [void 0, void 0, 3],
-  "BIF": [void 0, void 0, 0],
-  "BMD": [void 0, "$"],
-  "BND": [void 0, "$"],
-  "BOB": [void 0, "Bs"],
-  "BRL": ["R$"],
-  "BSD": [void 0, "$"],
-  "BWP": [void 0, "P"],
-  "BYN": [void 0, void 0, 2],
-  "BYR": [void 0, void 0, 0],
-  "BZD": [void 0, "$"],
-  "CAD": ["CA$", "$", 2],
-  "CHF": [void 0, void 0, 2],
-  "CLF": [void 0, void 0, 4],
-  "CLP": [void 0, "$", 0],
-  "CNY": ["CN¥", "¥"],
-  "COP": [void 0, "$", 2],
-  "CRC": [void 0, "₡", 2],
-  "CUC": [void 0, "$"],
-  "CUP": [void 0, "$"],
-  "CZK": [void 0, "Kč", 2],
-  "DJF": [void 0, void 0, 0],
-  "DKK": [void 0, "kr", 2],
-  "DOP": [void 0, "$"],
-  "EGP": [void 0, "E£"],
-  "ESP": [void 0, "₧", 0],
-  "EUR": ["€"],
-  "FJD": [void 0, "$"],
-  "FKP": [void 0, "£"],
-  "GBP": ["£"],
-  "GEL": [void 0, "₾"],
-  "GHS": [void 0, "GH₵"],
-  "GIP": [void 0, "£"],
-  "GNF": [void 0, "FG", 0],
-  "GTQ": [void 0, "Q"],
-  "GYD": [void 0, "$", 2],
-  "HKD": ["HK$", "$"],
-  "HNL": [void 0, "L"],
-  "HRK": [void 0, "kn"],
-  "HUF": [void 0, "Ft", 2],
-  "IDR": [void 0, "Rp", 2],
-  "ILS": ["₪"],
-  "INR": ["₹"],
-  "IQD": [void 0, void 0, 0],
-  "IRR": [void 0, void 0, 0],
-  "ISK": [void 0, "kr", 0],
-  "ITL": [void 0, void 0, 0],
-  "JMD": [void 0, "$"],
-  "JOD": [void 0, void 0, 3],
-  "JPY": ["¥", void 0, 0],
-  "KHR": [void 0, "៛"],
-  "KMF": [void 0, "CF", 0],
-  "KPW": [void 0, "₩", 0],
-  "KRW": ["₩", void 0, 0],
-  "KWD": [void 0, void 0, 3],
-  "KYD": [void 0, "$"],
-  "KZT": [void 0, "₸"],
-  "LAK": [void 0, "₭", 0],
-  "LBP": [void 0, "L£", 0],
-  "LKR": [void 0, "Rs"],
-  "LRD": [void 0, "$"],
-  "LTL": [void 0, "Lt"],
-  "LUF": [void 0, void 0, 0],
-  "LVL": [void 0, "Ls"],
-  "LYD": [void 0, void 0, 3],
-  "MGA": [void 0, "Ar", 0],
-  "MGF": [void 0, void 0, 0],
-  "MMK": [void 0, "K", 0],
-  "MNT": [void 0, "₮", 2],
-  "MRO": [void 0, void 0, 0],
-  "MUR": [void 0, "Rs", 2],
-  "MXN": ["MX$", "$"],
-  "MYR": [void 0, "RM"],
-  "NAD": [void 0, "$"],
-  "NGN": [void 0, "₦"],
-  "NIO": [void 0, "C$"],
-  "NOK": [void 0, "kr", 2],
-  "NPR": [void 0, "Rs"],
-  "NZD": ["NZ$", "$"],
-  "OMR": [void 0, void 0, 3],
-  "PHP": ["₱"],
-  "PKR": [void 0, "Rs", 2],
-  "PLN": [void 0, "zł"],
-  "PYG": [void 0, "₲", 0],
-  "RON": [void 0, "lei"],
-  "RSD": [void 0, void 0, 0],
-  "RUB": [void 0, "₽"],
-  "RWF": [void 0, "RF", 0],
-  "SBD": [void 0, "$"],
-  "SEK": [void 0, "kr", 2],
-  "SGD": [void 0, "$"],
-  "SHP": [void 0, "£"],
-  "SLE": [void 0, void 0, 2],
-  "SLL": [void 0, void 0, 0],
-  "SOS": [void 0, void 0, 0],
-  "SRD": [void 0, "$"],
-  "SSP": [void 0, "£"],
-  "STD": [void 0, void 0, 0],
-  "STN": [void 0, "Db"],
-  "SYP": [void 0, "£", 0],
-  "THB": [void 0, "฿"],
-  "TMM": [void 0, void 0, 0],
-  "TND": [void 0, void 0, 3],
-  "TOP": [void 0, "T$"],
-  "TRL": [void 0, void 0, 0],
-  "TRY": [void 0, "₺"],
-  "TTD": [void 0, "$"],
-  "TWD": ["NT$", "$", 2],
-  "TZS": [void 0, void 0, 2],
-  "UAH": [void 0, "₴"],
-  "UGX": [void 0, void 0, 0],
-  "USD": ["$"],
-  "UYI": [void 0, void 0, 0],
-  "UYU": [void 0, "$"],
-  "UYW": [void 0, void 0, 4],
-  "UZS": [void 0, void 0, 2],
-  "VEF": [void 0, "Bs", 2],
-  "VND": ["₫", void 0, 0],
-  "VUV": [void 0, void 0, 0],
-  "XAF": ["FCFA", void 0, 0],
-  "XCD": ["EC$", "$"],
-  "XOF": ["F CFA", void 0, 0],
-  "XPF": ["CFPF", void 0, 0],
-  "XXX": ["¤"],
-  "YER": [void 0, void 0, 0],
-  "ZAR": [void 0, "R"],
-  "ZMK": [void 0, void 0, 0],
-  "ZMW": [void 0, "ZK"],
-  "ZWD": [void 0, void 0, 0]
-};
-var NumberFormatStyle;
-(function(NumberFormatStyle2) {
-  NumberFormatStyle2[NumberFormatStyle2["Decimal"] = 0] = "Decimal";
-  NumberFormatStyle2[NumberFormatStyle2["Percent"] = 1] = "Percent";
-  NumberFormatStyle2[NumberFormatStyle2["Currency"] = 2] = "Currency";
-  NumberFormatStyle2[NumberFormatStyle2["Scientific"] = 3] = "Scientific";
-})(NumberFormatStyle || (NumberFormatStyle = {}));
-var Plural;
-(function(Plural2) {
-  Plural2[Plural2["Zero"] = 0] = "Zero";
-  Plural2[Plural2["One"] = 1] = "One";
-  Plural2[Plural2["Two"] = 2] = "Two";
-  Plural2[Plural2["Few"] = 3] = "Few";
-  Plural2[Plural2["Many"] = 4] = "Many";
-  Plural2[Plural2["Other"] = 5] = "Other";
-})(Plural || (Plural = {}));
-var FormStyle;
-(function(FormStyle2) {
-  FormStyle2[FormStyle2["Format"] = 0] = "Format";
-  FormStyle2[FormStyle2["Standalone"] = 1] = "Standalone";
-})(FormStyle || (FormStyle = {}));
-var TranslationWidth;
-(function(TranslationWidth2) {
-  TranslationWidth2[TranslationWidth2["Narrow"] = 0] = "Narrow";
-  TranslationWidth2[TranslationWidth2["Abbreviated"] = 1] = "Abbreviated";
-  TranslationWidth2[TranslationWidth2["Wide"] = 2] = "Wide";
-  TranslationWidth2[TranslationWidth2["Short"] = 3] = "Short";
-})(TranslationWidth || (TranslationWidth = {}));
-var FormatWidth;
-(function(FormatWidth2) {
-  FormatWidth2[FormatWidth2["Short"] = 0] = "Short";
-  FormatWidth2[FormatWidth2["Medium"] = 1] = "Medium";
-  FormatWidth2[FormatWidth2["Long"] = 2] = "Long";
-  FormatWidth2[FormatWidth2["Full"] = 3] = "Full";
-})(FormatWidth || (FormatWidth = {}));
-var NumberSymbol = {
-  /**
-   * Decimal separator.
-   * For `en-US`, the dot character.
-   * Example: 2,345`.`67
-   */
-  Decimal: 0,
-  /**
-   * Grouping separator, typically for thousands.
-   * For `en-US`, the comma character.
-   * Example: 2`,`345.67
-   */
-  Group: 1,
-  /**
-   * List-item separator.
-   * Example: "one, two, and three"
-   */
-  List: 2,
-  /**
-   * Sign for percentage (out of 100).
-   * Example: 23.4%
-   */
-  PercentSign: 3,
-  /**
-   * Sign for positive numbers.
-   * Example: +23
-   */
-  PlusSign: 4,
-  /**
-   * Sign for negative numbers.
-   * Example: -23
-   */
-  MinusSign: 5,
-  /**
-   * Computer notation for exponential value (n times a power of 10).
-   * Example: 1.2E3
-   */
-  Exponential: 6,
-  /**
-   * Human-readable format of exponential.
-   * Example: 1.2x103
-   */
-  SuperscriptingExponent: 7,
-  /**
-   * Sign for permille (out of 1000).
-   * Example: 23.4‰
-   */
-  PerMille: 8,
-  /**
-   * Infinity, can be used with plus and minus.
-   * Example: ∞, +∞, -∞
-   */
-  Infinity: 9,
-  /**
-   * Not a number.
-   * Example: NaN
-   */
-  NaN: 10,
-  /**
-   * Symbol used between time units.
-   * Example: 10:52
-   */
-  TimeSeparator: 11,
-  /**
-   * Decimal separator for currency values (fallback to `Decimal`).
-   * Example: $2,345.67
-   */
-  CurrencyDecimal: 12,
-  /**
-   * Group separator for currency values (fallback to `Group`).
-   * Example: $2,345.67
-   */
-  CurrencyGroup: 13
-};
-var WeekDay;
-(function(WeekDay2) {
-  WeekDay2[WeekDay2["Sunday"] = 0] = "Sunday";
-  WeekDay2[WeekDay2["Monday"] = 1] = "Monday";
-  WeekDay2[WeekDay2["Tuesday"] = 2] = "Tuesday";
-  WeekDay2[WeekDay2["Wednesday"] = 3] = "Wednesday";
-  WeekDay2[WeekDay2["Thursday"] = 4] = "Thursday";
-  WeekDay2[WeekDay2["Friday"] = 5] = "Friday";
-  WeekDay2[WeekDay2["Saturday"] = 6] = "Saturday";
-})(WeekDay || (WeekDay = {}));
-function getLocaleId(locale) {
-  return findLocaleData(locale)[LocaleDataIndex.LocaleId];
-}
-function getLocaleDayPeriods(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const amPmData = [data[LocaleDataIndex.DayPeriodsFormat], data[LocaleDataIndex.DayPeriodsStandalone]];
-  const amPm = getLastDefinedValue(amPmData, formStyle);
-  return getLastDefinedValue(amPm, width);
-}
-function getLocaleDayNames(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const daysData = [data[LocaleDataIndex.DaysFormat], data[LocaleDataIndex.DaysStandalone]];
-  const days = getLastDefinedValue(daysData, formStyle);
-  return getLastDefinedValue(days, width);
-}
-function getLocaleMonthNames(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const monthsData = [data[LocaleDataIndex.MonthsFormat], data[LocaleDataIndex.MonthsStandalone]];
-  const months = getLastDefinedValue(monthsData, formStyle);
-  return getLastDefinedValue(months, width);
-}
-function getLocaleEraNames(locale, width) {
-  const data = findLocaleData(locale);
-  const erasData = data[LocaleDataIndex.Eras];
-  return getLastDefinedValue(erasData, width);
-}
-function getLocaleDateFormat(locale, width) {
-  const data = findLocaleData(locale);
-  return getLastDefinedValue(data[LocaleDataIndex.DateFormat], width);
-}
-function getLocaleTimeFormat(locale, width) {
-  const data = findLocaleData(locale);
-  return getLastDefinedValue(data[LocaleDataIndex.TimeFormat], width);
-}
-function getLocaleDateTimeFormat(locale, width) {
-  const data = findLocaleData(locale);
-  const dateTimeFormatData = data[LocaleDataIndex.DateTimeFormat];
-  return getLastDefinedValue(dateTimeFormatData, width);
-}
-function getLocaleNumberSymbol(locale, symbol) {
-  const data = findLocaleData(locale);
-  const res = data[LocaleDataIndex.NumberSymbols][symbol];
-  if (typeof res === "undefined") {
-    if (symbol === NumberSymbol.CurrencyDecimal) {
-      return data[LocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];
-    } else if (symbol === NumberSymbol.CurrencyGroup) {
-      return data[LocaleDataIndex.NumberSymbols][NumberSymbol.Group];
-    }
-  }
-  return res;
-}
-function getLocaleNumberFormat(locale, type) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.NumberFormats][type];
-}
-function getLocaleCurrencies(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.Currencies];
-}
-var getLocalePluralCase2 = getLocalePluralCase;
-function checkFullData(data) {
-  if (!data[LocaleDataIndex.ExtraData]) {
-    throw new Error(`Missing extra locale data for the locale "${data[LocaleDataIndex.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`);
-  }
-}
-function getLocaleExtraDayPeriodRules(locale) {
-  const data = findLocaleData(locale);
-  checkFullData(data);
-  const rules = data[LocaleDataIndex.ExtraData][
-    2
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodsRules */
-  ] || [];
-  return rules.map((rule) => {
-    if (typeof rule === "string") {
-      return extractTime(rule);
-    }
-    return [extractTime(rule[0]), extractTime(rule[1])];
-  });
-}
-function getLocaleExtraDayPeriods(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  checkFullData(data);
-  const dayPeriodsData = [data[LocaleDataIndex.ExtraData][
-    0
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodFormats */
-  ], data[LocaleDataIndex.ExtraData][
-    1
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone */
-  ]];
-  const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
-  return getLastDefinedValue(dayPeriods, width) || [];
-}
-function getLastDefinedValue(data, index) {
-  for (let i = index; i > -1; i--) {
-    if (typeof data[i] !== "undefined") {
-      return data[i];
-    }
-  }
-  throw new Error("Locale data API: locale data undefined");
-}
-function extractTime(time) {
-  const [h, m] = time.split(":");
-  return {
-    hours: +h,
-    minutes: +m
-  };
-}
-function getCurrencySymbol(code, format, locale = "en") {
-  const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
-  const symbolNarrow = currency[
-    1
-    /* ɵCurrencyIndex.SymbolNarrow */
-  ];
-  if (format === "narrow" && typeof symbolNarrow === "string") {
-    return symbolNarrow;
-  }
-  return currency[
-    0
-    /* ɵCurrencyIndex.Symbol */
-  ] || code;
-}
-var DEFAULT_NB_OF_CURRENCY_DIGITS = 2;
-function getNumberOfCurrencyDigits(code) {
-  let digits;
-  const currency = CURRENCIES_EN[code];
-  if (currency) {
-    digits = currency[
-      2
-      /* ɵCurrencyIndex.NbOfDigits */
-    ];
-  }
-  return typeof digits === "number" ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
-}
-var ISO8601_DATE_REGEX = /^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
-var NAMED_FORMATS = {};
-var DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
-var ZoneWidth;
-(function(ZoneWidth2) {
-  ZoneWidth2[ZoneWidth2["Short"] = 0] = "Short";
-  ZoneWidth2[ZoneWidth2["ShortGMT"] = 1] = "ShortGMT";
-  ZoneWidth2[ZoneWidth2["Long"] = 2] = "Long";
-  ZoneWidth2[ZoneWidth2["Extended"] = 3] = "Extended";
-})(ZoneWidth || (ZoneWidth = {}));
-var DateType;
-(function(DateType2) {
-  DateType2[DateType2["FullYear"] = 0] = "FullYear";
-  DateType2[DateType2["Month"] = 1] = "Month";
-  DateType2[DateType2["Date"] = 2] = "Date";
-  DateType2[DateType2["Hours"] = 3] = "Hours";
-  DateType2[DateType2["Minutes"] = 4] = "Minutes";
-  DateType2[DateType2["Seconds"] = 5] = "Seconds";
-  DateType2[DateType2["FractionalSeconds"] = 6] = "FractionalSeconds";
-  DateType2[DateType2["Day"] = 7] = "Day";
-})(DateType || (DateType = {}));
-var TranslationType;
-(function(TranslationType2) {
-  TranslationType2[TranslationType2["DayPeriods"] = 0] = "DayPeriods";
-  TranslationType2[TranslationType2["Days"] = 1] = "Days";
-  TranslationType2[TranslationType2["Months"] = 2] = "Months";
-  TranslationType2[TranslationType2["Eras"] = 3] = "Eras";
-})(TranslationType || (TranslationType = {}));
-function formatDate(value, format, locale, timezone) {
-  let date = toDate(value);
-  const namedFormat = getNamedFormat(locale, format);
-  format = namedFormat || format;
-  let parts = [];
-  let match;
-  while (format) {
-    match = DATE_FORMATS_SPLIT.exec(format);
-    if (match) {
-      parts = parts.concat(match.slice(1));
-      const part = parts.pop();
-      if (!part) {
-        break;
-      }
-      format = part;
-    } else {
-      parts.push(format);
-      break;
-    }
-  }
-  let dateTimezoneOffset = date.getTimezoneOffset();
-  if (timezone) {
-    dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
-    date = convertTimezoneToLocal(date, timezone, true);
-  }
-  let text = "";
-  parts.forEach((value2) => {
-    const dateFormatter = getDateFormatter(value2);
-    text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value2 === "''" ? "'" : value2.replace(/(^'|'$)/g, "").replace(/''/g, "'");
-  });
-  return text;
-}
-function createDate(year, month, date) {
-  const newDate = /* @__PURE__ */ new Date(0);
-  newDate.setFullYear(year, month, date);
-  newDate.setHours(0, 0, 0);
-  return newDate;
-}
-function getNamedFormat(locale, format) {
-  const localeId = getLocaleId(locale);
-  NAMED_FORMATS[localeId] ??= {};
-  if (NAMED_FORMATS[localeId][format]) {
-    return NAMED_FORMATS[localeId][format];
-  }
-  let formatValue = "";
-  switch (format) {
-    case "shortDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
-      break;
-    case "mediumDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
-      break;
-    case "longDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
-      break;
-    case "fullDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
-      break;
-    case "shortTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
-      break;
-    case "mediumTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
-      break;
-    case "longTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
-      break;
-    case "fullTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
-      break;
-    case "short":
-      const shortTime = getNamedFormat(locale, "shortTime");
-      const shortDate = getNamedFormat(locale, "shortDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
-      break;
-    case "medium":
-      const mediumTime = getNamedFormat(locale, "mediumTime");
-      const mediumDate = getNamedFormat(locale, "mediumDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
-      break;
-    case "long":
-      const longTime = getNamedFormat(locale, "longTime");
-      const longDate = getNamedFormat(locale, "longDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
-      break;
-    case "full":
-      const fullTime = getNamedFormat(locale, "fullTime");
-      const fullDate = getNamedFormat(locale, "fullDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
-      break;
-  }
-  if (formatValue) {
-    NAMED_FORMATS[localeId][format] = formatValue;
-  }
-  return formatValue;
-}
-function formatDateTime(str, opt_values) {
-  if (opt_values) {
-    str = str.replace(/\{([^}]+)}/g, function(match, key) {
-      return opt_values != null && key in opt_values ? opt_values[key] : match;
-    });
-  }
-  return str;
-}
-function padNumber(num, digits, minusSign = "-", trim, negWrap) {
-  let neg = "";
-  if (num < 0 || negWrap && num <= 0) {
-    if (negWrap) {
-      num = -num + 1;
-    } else {
-      num = -num;
-      neg = minusSign;
-    }
-  }
-  let strNum = String(num);
-  while (strNum.length < digits) {
-    strNum = "0" + strNum;
-  }
-  if (trim) {
-    strNum = strNum.slice(strNum.length - digits);
-  }
-  return neg + strNum;
-}
-function formatFractionalSeconds(milliseconds, digits) {
-  const strMs = padNumber(milliseconds, 3);
-  return strMs.substring(0, digits);
-}
-function dateGetter(name, size, offset = 0, trim = false, negWrap = false) {
-  return function(date, locale) {
-    let part = getDatePart(name, date);
-    if (offset > 0 || part > -offset) {
-      part += offset;
-    }
-    if (name === DateType.Hours) {
-      if (part === 0 && offset === -12) {
-        part = 12;
-      }
-    } else if (name === DateType.FractionalSeconds) {
-      return formatFractionalSeconds(part, size);
-    }
-    const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
-    return padNumber(part, size, localeMinus, trim, negWrap);
-  };
-}
-function getDatePart(part, date) {
-  switch (part) {
-    case DateType.FullYear:
-      return date.getFullYear();
-    case DateType.Month:
-      return date.getMonth();
-    case DateType.Date:
-      return date.getDate();
-    case DateType.Hours:
-      return date.getHours();
-    case DateType.Minutes:
-      return date.getMinutes();
-    case DateType.Seconds:
-      return date.getSeconds();
-    case DateType.FractionalSeconds:
-      return date.getMilliseconds();
-    case DateType.Day:
-      return date.getDay();
-    default:
-      throw new Error(`Unknown DateType value "${part}".`);
-  }
-}
-function dateStrGetter(name, width, form = FormStyle.Format, extended = false) {
-  return function(date, locale) {
-    return getDateTranslation(date, locale, name, width, form, extended);
-  };
-}
-function getDateTranslation(date, locale, name, width, form, extended) {
-  switch (name) {
-    case TranslationType.Months:
-      return getLocaleMonthNames(locale, form, width)[date.getMonth()];
-    case TranslationType.Days:
-      return getLocaleDayNames(locale, form, width)[date.getDay()];
-    case TranslationType.DayPeriods:
-      const currentHours = date.getHours();
-      const currentMinutes = date.getMinutes();
-      if (extended) {
-        const rules = getLocaleExtraDayPeriodRules(locale);
-        const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);
-        const index = rules.findIndex((rule) => {
-          if (Array.isArray(rule)) {
-            const [from2, to] = rule;
-            const afterFrom = currentHours >= from2.hours && currentMinutes >= from2.minutes;
-            const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;
-            if (from2.hours < to.hours) {
-              if (afterFrom && beforeTo) {
-                return true;
-              }
-            } else if (afterFrom || beforeTo) {
-              return true;
-            }
-          } else {
-            if (rule.hours === currentHours && rule.minutes === currentMinutes) {
-              return true;
-            }
-          }
-          return false;
-        });
-        if (index !== -1) {
-          return dayPeriods[index];
-        }
-      }
-      return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];
-    case TranslationType.Eras:
-      return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];
-    default:
-      const unexpected = name;
-      throw new Error(`unexpected translation type ${unexpected}`);
-  }
-}
-function timeZoneGetter(width) {
-  return function(date, locale, offset) {
-    const zone = -1 * offset;
-    const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
-    const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);
-    switch (width) {
-      case ZoneWidth.Short:
-        return (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);
-      case ZoneWidth.ShortGMT:
-        return "GMT" + (zone >= 0 ? "+" : "") + padNumber(hours, 1, minusSign);
-      case ZoneWidth.Long:
-        return "GMT" + (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + ":" + padNumber(Math.abs(zone % 60), 2, minusSign);
-      case ZoneWidth.Extended:
-        if (offset === 0) {
-          return "Z";
-        } else {
-          return (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + ":" + padNumber(Math.abs(zone % 60), 2, minusSign);
-        }
-      default:
-        throw new Error(`Unknown zone width "${width}"`);
-    }
-  };
-}
-var JANUARY = 0;
-var THURSDAY = 4;
-function getFirstThursdayOfYear(year) {
-  const firstDayOfYear = createDate(year, JANUARY, 1).getDay();
-  return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
-}
-function getThursdayThisIsoWeek(datetime) {
-  const currentDay = datetime.getDay();
-  const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;
-  return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);
-}
-function weekGetter(size, monthBased = false) {
-  return function(date, locale) {
-    let result;
-    if (monthBased) {
-      const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
-      const today = date.getDate();
-      result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
-    } else {
-      const thisThurs = getThursdayThisIsoWeek(date);
-      const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());
-      const diff = thisThurs.getTime() - firstThurs.getTime();
-      result = 1 + Math.round(diff / 6048e5);
-    }
-    return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  };
-}
-function weekNumberingYearGetter(size, trim = false) {
-  return function(date, locale) {
-    const thisThurs = getThursdayThisIsoWeek(date);
-    const weekNumberingYear = thisThurs.getFullYear();
-    return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);
-  };
-}
-var DATE_FORMATS = {};
-function getDateFormatter(format) {
-  if (DATE_FORMATS[format]) {
-    return DATE_FORMATS[format];
-  }
-  let formatter;
-  switch (format) {
-    case "G":
-    case "GG":
-    case "GGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);
-      break;
-    case "GGGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);
-      break;
-    case "GGGGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);
-      break;
-    case "y":
-      formatter = dateGetter(DateType.FullYear, 1, 0, false, true);
-      break;
-    case "yy":
-      formatter = dateGetter(DateType.FullYear, 2, 0, true, true);
-      break;
-    case "yyy":
-      formatter = dateGetter(DateType.FullYear, 3, 0, false, true);
-      break;
-    case "yyyy":
-      formatter = dateGetter(DateType.FullYear, 4, 0, false, true);
-      break;
-    case "Y":
-      formatter = weekNumberingYearGetter(1);
-      break;
-    case "YY":
-      formatter = weekNumberingYearGetter(2, true);
-      break;
-    case "YYY":
-      formatter = weekNumberingYearGetter(3);
-      break;
-    case "YYYY":
-      formatter = weekNumberingYearGetter(4);
-      break;
-    case "M":
-    case "L":
-      formatter = dateGetter(DateType.Month, 1, 1);
-      break;
-    case "MM":
-    case "LL":
-      formatter = dateGetter(DateType.Month, 2, 1);
-      break;
-    case "MMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);
-      break;
-    case "MMMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);
-      break;
-    case "MMMMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);
-      break;
-    case "LLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);
-      break;
-    case "LLLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);
-      break;
-    case "LLLLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);
-      break;
-    case "w":
-      formatter = weekGetter(1);
-      break;
-    case "ww":
-      formatter = weekGetter(2);
-      break;
-    case "W":
-      formatter = weekGetter(1, true);
-      break;
-    case "d":
-      formatter = dateGetter(DateType.Date, 1);
-      break;
-    case "dd":
-      formatter = dateGetter(DateType.Date, 2);
-      break;
-    case "c":
-    case "cc":
-      formatter = dateGetter(DateType.Day, 1);
-      break;
-    case "ccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone);
-      break;
-    case "cccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone);
-      break;
-    case "ccccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone);
-      break;
-    case "cccccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone);
-      break;
-    case "E":
-    case "EE":
-    case "EEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);
-      break;
-    case "EEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);
-      break;
-    case "EEEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);
-      break;
-    case "EEEEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);
-      break;
-    case "a":
-    case "aa":
-    case "aaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);
-      break;
-    case "aaaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);
-      break;
-    case "aaaaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);
-      break;
-    case "b":
-    case "bb":
-    case "bbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
-      break;
-    case "bbbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);
-      break;
-    case "bbbbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);
-      break;
-    case "B":
-    case "BB":
-    case "BBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);
-      break;
-    case "BBBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);
-      break;
-    case "BBBBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);
-      break;
-    case "h":
-      formatter = dateGetter(DateType.Hours, 1, -12);
-      break;
-    case "hh":
-      formatter = dateGetter(DateType.Hours, 2, -12);
-      break;
-    case "H":
-      formatter = dateGetter(DateType.Hours, 1);
-      break;
-    case "HH":
-      formatter = dateGetter(DateType.Hours, 2);
-      break;
-    case "m":
-      formatter = dateGetter(DateType.Minutes, 1);
-      break;
-    case "mm":
-      formatter = dateGetter(DateType.Minutes, 2);
-      break;
-    case "s":
-      formatter = dateGetter(DateType.Seconds, 1);
-      break;
-    case "ss":
-      formatter = dateGetter(DateType.Seconds, 2);
-      break;
-    case "S":
-      formatter = dateGetter(DateType.FractionalSeconds, 1);
-      break;
-    case "SS":
-      formatter = dateGetter(DateType.FractionalSeconds, 2);
-      break;
-    case "SSS":
-      formatter = dateGetter(DateType.FractionalSeconds, 3);
-      break;
-    case "Z":
-    case "ZZ":
-    case "ZZZ":
-      formatter = timeZoneGetter(ZoneWidth.Short);
-      break;
-    case "ZZZZZ":
-      formatter = timeZoneGetter(ZoneWidth.Extended);
-      break;
-    case "O":
-    case "OO":
-    case "OOO":
-    case "z":
-    case "zz":
-    case "zzz":
-      formatter = timeZoneGetter(ZoneWidth.ShortGMT);
-      break;
-    case "OOOO":
-    case "ZZZZ":
-    case "zzzz":
-      formatter = timeZoneGetter(ZoneWidth.Long);
-      break;
-    default:
-      return null;
-  }
-  DATE_FORMATS[format] = formatter;
-  return formatter;
-}
-function timezoneToOffset(timezone, fallback) {
-  timezone = timezone.replace(/:/g, "");
-  const requestedTimezoneOffset = Date.parse("Jan 01, 1970 00:00:00 " + timezone) / 6e4;
-  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
-}
-function addDateMinutes(date, minutes) {
-  date = new Date(date.getTime());
-  date.setMinutes(date.getMinutes() + minutes);
-  return date;
-}
-function convertTimezoneToLocal(date, timezone, reverse) {
-  const reverseValue = reverse ? -1 : 1;
-  const dateTimezoneOffset = date.getTimezoneOffset();
-  const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
-  return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
-}
-function toDate(value) {
-  if (isDate(value)) {
-    return value;
-  }
-  if (typeof value === "number" && !isNaN(value)) {
-    return new Date(value);
-  }
-  if (typeof value === "string") {
-    value = value.trim();
-    if (/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(value)) {
-      const [y, m = 1, d = 1] = value.split("-").map((val) => +val);
-      return createDate(y, m - 1, d);
-    }
-    const parsedNb = parseFloat(value);
-    if (!isNaN(value - parsedNb)) {
-      return new Date(parsedNb);
-    }
-    let match;
-    if (match = value.match(ISO8601_DATE_REGEX)) {
-      return isoStringToDate(match);
-    }
-  }
-  const date = new Date(value);
-  if (!isDate(date)) {
-    throw new Error(`Unable to convert "${value}" into a date`);
-  }
-  return date;
-}
-function isoStringToDate(match) {
-  const date = /* @__PURE__ */ new Date(0);
-  let tzHour = 0;
-  let tzMin = 0;
-  const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
-  const timeSetter = match[8] ? date.setUTCHours : date.setHours;
-  if (match[9]) {
-    tzHour = Number(match[9] + match[10]);
-    tzMin = Number(match[9] + match[11]);
-  }
-  dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));
-  const h = Number(match[4] || 0) - tzHour;
-  const m = Number(match[5] || 0) - tzMin;
-  const s = Number(match[6] || 0);
-  const ms = Math.floor(parseFloat("0." + (match[7] || 0)) * 1e3);
-  timeSetter.call(date, h, m, s, ms);
-  return date;
-}
-function isDate(value) {
-  return value instanceof Date && !isNaN(value.valueOf());
-}
-var NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
-var MAX_DIGITS = 22;
-var DECIMAL_SEP = ".";
-var ZERO_CHAR = "0";
-var PATTERN_SEP = ";";
-var GROUP_SEP = ",";
-var DIGIT_CHAR = "#";
-var CURRENCY_CHAR = "¤";
-var PERCENT_CHAR = "%";
-function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {
-  let formattedText = "";
-  let isZero = false;
-  if (!isFinite(value)) {
-    formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
-  } else {
-    let parsedNumber = parseNumber(value);
-    if (isPercent) {
-      parsedNumber = toPercent(parsedNumber);
-    }
-    let minInt = pattern.minInt;
-    let minFraction = pattern.minFrac;
-    let maxFraction = pattern.maxFrac;
-    if (digitsInfo) {
-      const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
-      if (parts === null) {
-        throw new Error(`${digitsInfo} is not a valid digit info`);
-      }
-      const minIntPart = parts[1];
-      const minFractionPart = parts[3];
-      const maxFractionPart = parts[5];
-      if (minIntPart != null) {
-        minInt = parseIntAutoRadix(minIntPart);
-      }
-      if (minFractionPart != null) {
-        minFraction = parseIntAutoRadix(minFractionPart);
-      }
-      if (maxFractionPart != null) {
-        maxFraction = parseIntAutoRadix(maxFractionPart);
-      } else if (minFractionPart != null && minFraction > maxFraction) {
-        maxFraction = minFraction;
-      }
-    }
-    roundNumber(parsedNumber, minFraction, maxFraction);
-    let digits = parsedNumber.digits;
-    let integerLen = parsedNumber.integerLen;
-    const exponent = parsedNumber.exponent;
-    let decimals = [];
-    isZero = digits.every((d) => !d);
-    for (; integerLen < minInt; integerLen++) {
-      digits.unshift(0);
-    }
-    for (; integerLen < 0; integerLen++) {
-      digits.unshift(0);
-    }
-    if (integerLen > 0) {
-      decimals = digits.splice(integerLen, digits.length);
-    } else {
-      decimals = digits;
-      digits = [0];
-    }
-    const groups = [];
-    if (digits.length >= pattern.lgSize) {
-      groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(""));
-    }
-    while (digits.length > pattern.gSize) {
-      groups.unshift(digits.splice(-pattern.gSize, digits.length).join(""));
-    }
-    if (digits.length) {
-      groups.unshift(digits.join(""));
-    }
-    formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));
-    if (decimals.length) {
-      formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join("");
-    }
-    if (exponent) {
-      formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + "+" + exponent;
-    }
-  }
-  if (value < 0 && !isZero) {
-    formattedText = pattern.negPre + formattedText + pattern.negSuf;
-  } else {
-    formattedText = pattern.posPre + formattedText + pattern.posSuf;
-  }
-  return formattedText;
-}
-function formatCurrency(value, locale, currency, currencyCode, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);
-  pattern.maxFrac = pattern.minFrac;
-  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);
-  return res.replace(CURRENCY_CHAR, currency).replace(CURRENCY_CHAR, "").trim();
-}
-function formatPercent(value, locale, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);
-  return res.replace(new RegExp(PERCENT_CHAR, "g"), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
-}
-function formatNumber(value, locale, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);
-}
-function parseNumberFormat(format, minusSign = "-") {
-  const p = {
-    minInt: 1,
-    minFrac: 0,
-    maxFrac: 0,
-    posPre: "",
-    posSuf: "",
-    negPre: "",
-    negSuf: "",
-    gSize: 0,
-    lgSize: 0
-  };
-  const patternParts = format.split(PATTERN_SEP);
-  const positive = patternParts[0];
-  const negative = patternParts[1];
-  const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)], integer = positiveParts[0], fraction = positiveParts[1] || "";
-  p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));
-  for (let i = 0; i < fraction.length; i++) {
-    const ch = fraction.charAt(i);
-    if (ch === ZERO_CHAR) {
-      p.minFrac = p.maxFrac = i + 1;
-    } else if (ch === DIGIT_CHAR) {
-      p.maxFrac = i + 1;
-    } else {
-      p.posSuf += ch;
-    }
-  }
-  const groups = integer.split(GROUP_SEP);
-  p.gSize = groups[1] ? groups[1].length : 0;
-  p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;
-  if (negative) {
-    const trunkLen = positive.length - p.posPre.length - p.posSuf.length, pos = negative.indexOf(DIGIT_CHAR);
-    p.negPre = negative.substring(0, pos).replace(/'/g, "");
-    p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, "");
-  } else {
-    p.negPre = minusSign + p.posPre;
-    p.negSuf = p.posSuf;
-  }
-  return p;
-}
-function toPercent(parsedNumber) {
-  if (parsedNumber.digits[0] === 0) {
-    return parsedNumber;
-  }
-  const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;
-  if (parsedNumber.exponent) {
-    parsedNumber.exponent += 2;
-  } else {
-    if (fractionLen === 0) {
-      parsedNumber.digits.push(0, 0);
-    } else if (fractionLen === 1) {
-      parsedNumber.digits.push(0);
-    }
-    parsedNumber.integerLen += 2;
-  }
-  return parsedNumber;
-}
-function parseNumber(num) {
-  let numStr = Math.abs(num) + "";
-  let exponent = 0, digits, integerLen;
-  let i, j, zeros;
-  if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
-    numStr = numStr.replace(DECIMAL_SEP, "");
-  }
-  if ((i = numStr.search(/e/i)) > 0) {
-    if (integerLen < 0) integerLen = i;
-    integerLen += +numStr.slice(i + 1);
-    numStr = numStr.substring(0, i);
-  } else if (integerLen < 0) {
-    integerLen = numStr.length;
-  }
-  for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {
-  }
-  if (i === (zeros = numStr.length)) {
-    digits = [0];
-    integerLen = 1;
-  } else {
-    zeros--;
-    while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;
-    integerLen -= i;
-    digits = [];
-    for (j = 0; i <= zeros; i++, j++) {
-      digits[j] = Number(numStr.charAt(i));
-    }
-  }
-  if (integerLen > MAX_DIGITS) {
-    digits = digits.splice(0, MAX_DIGITS - 1);
-    exponent = integerLen - 1;
-    integerLen = 1;
-  }
-  return {
-    digits,
-    exponent,
-    integerLen
-  };
-}
-function roundNumber(parsedNumber, minFrac, maxFrac) {
-  if (minFrac > maxFrac) {
-    throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);
-  }
-  let digits = parsedNumber.digits;
-  let fractionLen = digits.length - parsedNumber.integerLen;
-  const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);
-  let roundAt = fractionSize + parsedNumber.integerLen;
-  let digit = digits[roundAt];
-  if (roundAt > 0) {
-    digits.splice(Math.max(parsedNumber.integerLen, roundAt));
-    for (let j = roundAt; j < digits.length; j++) {
-      digits[j] = 0;
-    }
-  } else {
-    fractionLen = Math.max(0, fractionLen);
-    parsedNumber.integerLen = 1;
-    digits.length = Math.max(1, roundAt = fractionSize + 1);
-    digits[0] = 0;
-    for (let i = 1; i < roundAt; i++) digits[i] = 0;
-  }
-  if (digit >= 5) {
-    if (roundAt - 1 < 0) {
-      for (let k = 0; k > roundAt; k--) {
-        digits.unshift(0);
-        parsedNumber.integerLen++;
-      }
-      digits.unshift(1);
-      parsedNumber.integerLen++;
-    } else {
-      digits[roundAt - 1]++;
-    }
-  }
-  for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);
-  let dropTrailingZeros = fractionSize !== 0;
-  const minLen = minFrac + parsedNumber.integerLen;
-  const carry = digits.reduceRight(function(carry2, d, i, digits2) {
-    d = d + carry2;
-    digits2[i] = d < 10 ? d : d - 10;
-    if (dropTrailingZeros) {
-      if (digits2[i] === 0 && i >= minLen) {
-        digits2.pop();
-      } else {
-        dropTrailingZeros = false;
-      }
-    }
-    return d >= 10 ? 1 : 0;
-  }, 0);
-  if (carry) {
-    digits.unshift(carry);
-    parsedNumber.integerLen++;
-  }
-}
-function parseIntAutoRadix(text) {
-  const result = parseInt(text);
-  if (isNaN(result)) {
-    throw new Error("Invalid integer literal when parsing " + text);
-  }
-  return result;
-}
-var NgLocalization = class _NgLocalization {
-  static ɵfac = function NgLocalization_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgLocalization)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgLocalization,
-    factory: function NgLocalization_Factory(__ngFactoryType__) {
-      let __ngConditionalFactory__ = null;
-      if (__ngFactoryType__) {
-        __ngConditionalFactory__ = new __ngFactoryType__();
-      } else {
-        __ngConditionalFactory__ = ((locale) => new NgLocaleLocalization(locale))(ɵɵinject(LOCALE_ID));
-      }
-      return __ngConditionalFactory__;
-    },
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgLocalization, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: (locale) => new NgLocaleLocalization(locale),
-      deps: [LOCALE_ID]
-    }]
-  }], null, null);
-})();
-function getPluralCategory(value, cases, ngLocalization, locale) {
-  let key = `=${value}`;
-  if (cases.indexOf(key) > -1) {
-    return key;
-  }
-  key = ngLocalization.getPluralCategory(value, locale);
-  if (cases.indexOf(key) > -1) {
-    return key;
-  }
-  if (cases.indexOf("other") > -1) {
-    return "other";
-  }
-  throw new Error(`No plural message found for value "${value}"`);
-}
-var NgLocaleLocalization = class _NgLocaleLocalization extends NgLocalization {
-  locale;
-  constructor(locale) {
-    super();
-    this.locale = locale;
-  }
-  getPluralCategory(value, locale) {
-    const plural = getLocalePluralCase2(locale || this.locale)(value);
-    switch (plural) {
-      case Plural.Zero:
-        return "zero";
-      case Plural.One:
-        return "one";
-      case Plural.Two:
-        return "two";
-      case Plural.Few:
-        return "few";
-      case Plural.Many:
-        return "many";
-      default:
-        return "other";
-    }
-  }
-  static ɵfac = function NgLocaleLocalization_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgLocaleLocalization)(ɵɵinject(LOCALE_ID));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgLocaleLocalization,
-    factory: _NgLocaleLocalization.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgLocaleLocalization, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-function parseCookieValue(cookieStr, name) {
-  name = encodeURIComponent(name);
-  for (const cookie of cookieStr.split(";")) {
-    const eqIndex = cookie.indexOf("=");
-    const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ""] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];
-    if (cookieName.trim() === name) {
-      return decodeURIComponent(cookieValue);
-    }
-  }
-  return null;
-}
-var WS_REGEXP = /\s+/;
-var EMPTY_ARRAY = [];
-var NgClass = class _NgClass {
-  _ngEl;
-  _renderer;
-  initialClasses = EMPTY_ARRAY;
-  rawClass;
-  stateMap = /* @__PURE__ */ new Map();
-  constructor(_ngEl, _renderer) {
-    this._ngEl = _ngEl;
-    this._renderer = _renderer;
-  }
-  set klass(value) {
-    this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;
-  }
-  set ngClass(value) {
-    this.rawClass = typeof value === "string" ? value.trim().split(WS_REGEXP) : value;
-  }
-  /*
-  The NgClass directive uses the custom change detection algorithm for its inputs. The custom
-  algorithm is necessary since inputs are represented as complex object or arrays that need to be
-  deeply-compared.
-     This algorithm is perf-sensitive since NgClass is used very frequently and its poor performance
-  might negatively impact runtime performance of the entire change detection cycle. The design of
-  this algorithm is making sure that:
-  - there is no unnecessary DOM manipulation (CSS classes are added / removed from the DOM only when
-  needed), even if references to bound objects change;
-  - there is no memory allocation if nothing changes (even relatively modest memory allocation
-  during the change detection cycle can result in GC pauses for some of the CD cycles).
-     The algorithm works by iterating over the set of bound classes, staring with [class] binding and
-  then going over [ngClass] binding. For each CSS class name:
-  - check if it was seen before (this information is tracked in the state map) and if its value
-  changed;
-  - mark it as "touched" - names that are not marked are not present in the latest set of binding
-  and we can remove such class name from the internal data structures;
-     After iteration over all the CSS class names we've got data structure with all the information
-  necessary to synchronize changes to the DOM - it is enough to iterate over the state map, flush
-  changes to the DOM and reset internal data structures so those are ready for the next change
-  detection cycle.
-   */
-  ngDoCheck() {
-    for (const klass of this.initialClasses) {
-      this._updateState(klass, true);
-    }
-    const rawClass = this.rawClass;
-    if (Array.isArray(rawClass) || rawClass instanceof Set) {
-      for (const klass of rawClass) {
-        this._updateState(klass, true);
-      }
-    } else if (rawClass != null) {
-      for (const klass of Object.keys(rawClass)) {
-        this._updateState(klass, Boolean(rawClass[klass]));
-      }
-    }
-    this._applyStateDiff();
-  }
-  _updateState(klass, nextEnabled) {
-    const state = this.stateMap.get(klass);
-    if (state !== void 0) {
-      if (state.enabled !== nextEnabled) {
-        state.changed = true;
-        state.enabled = nextEnabled;
-      }
-      state.touched = true;
-    } else {
-      this.stateMap.set(klass, {
-        enabled: nextEnabled,
-        changed: true,
-        touched: true
-      });
-    }
-  }
-  _applyStateDiff() {
-    for (const stateEntry of this.stateMap) {
-      const klass = stateEntry[0];
-      const state = stateEntry[1];
-      if (state.changed) {
-        this._toggleClass(klass, state.enabled);
-        state.changed = false;
-      } else if (!state.touched) {
-        if (state.enabled) {
-          this._toggleClass(klass, false);
-        }
-        this.stateMap.delete(klass);
-      }
-      state.touched = false;
-    }
-  }
-  _toggleClass(klass, enabled) {
-    if (ngDevMode) {
-      if (typeof klass !== "string") {
-        throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${stringify(klass)}`);
-      }
-    }
-    klass = klass.trim();
-    if (klass.length > 0) {
-      klass.split(WS_REGEXP).forEach((klass2) => {
-        if (enabled) {
-          this._renderer.addClass(this._ngEl.nativeElement, klass2);
-        } else {
-          this._renderer.removeClass(this._ngEl.nativeElement, klass2);
-        }
-      });
-    }
-  }
-  static ɵfac = function NgClass_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgClass)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgClass,
-    selectors: [["", "ngClass", ""]],
-    inputs: {
-      klass: [0, "class", "klass"],
-      ngClass: "ngClass"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgClass, [{
-    type: Directive,
-    args: [{
-      selector: "[ngClass]"
-    }]
-  }], () => [{
-    type: ElementRef
-  }, {
-    type: Renderer2
-  }], {
-    klass: [{
-      type: Input,
-      args: ["class"]
-    }],
-    ngClass: [{
-      type: Input,
-      args: ["ngClass"]
-    }]
-  });
-})();
-var NgComponentOutlet = class _NgComponentOutlet {
-  _viewContainerRef;
-  ngComponentOutlet = null;
-  ngComponentOutletInputs;
-  ngComponentOutletInjector;
-  ngComponentOutletContent;
-  ngComponentOutletNgModule;
-  /**
-   * @deprecated This input is deprecated, use `ngComponentOutletNgModule` instead.
-   */
-  ngComponentOutletNgModuleFactory;
-  _componentRef;
-  _moduleRef;
-  /**
-   * A helper data structure that allows us to track inputs that were part of the
-   * ngComponentOutletInputs expression. Tracking inputs is necessary for proper removal of ones
-   * that are no longer referenced.
-   */
-  _inputsUsed = /* @__PURE__ */ new Map();
-  constructor(_viewContainerRef) {
-    this._viewContainerRef = _viewContainerRef;
-  }
-  _needToReCreateNgModuleInstance(changes) {
-    return changes["ngComponentOutletNgModule"] !== void 0 || changes["ngComponentOutletNgModuleFactory"] !== void 0;
-  }
-  _needToReCreateComponentInstance(changes) {
-    return changes["ngComponentOutlet"] !== void 0 || changes["ngComponentOutletContent"] !== void 0 || changes["ngComponentOutletInjector"] !== void 0 || this._needToReCreateNgModuleInstance(changes);
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (this._needToReCreateComponentInstance(changes)) {
-      this._viewContainerRef.clear();
-      this._inputsUsed.clear();
-      this._componentRef = void 0;
-      if (this.ngComponentOutlet) {
-        const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;
-        if (this._needToReCreateNgModuleInstance(changes)) {
-          this._moduleRef?.destroy();
-          if (this.ngComponentOutletNgModule) {
-            this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));
-          } else if (this.ngComponentOutletNgModuleFactory) {
-            this._moduleRef = this.ngComponentOutletNgModuleFactory.create(getParentInjector(injector));
-          } else {
-            this._moduleRef = void 0;
-          }
-        }
-        this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {
-          injector,
-          ngModuleRef: this._moduleRef,
-          projectableNodes: this.ngComponentOutletContent
-        });
-      }
-    }
-  }
-  /** @nodoc */
-  ngDoCheck() {
-    if (this._componentRef) {
-      if (this.ngComponentOutletInputs) {
-        for (const inputName of Object.keys(this.ngComponentOutletInputs)) {
-          this._inputsUsed.set(inputName, true);
-        }
-      }
-      this._applyInputStateDiff(this._componentRef);
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this._moduleRef?.destroy();
-  }
-  _applyInputStateDiff(componentRef) {
-    for (const [inputName, touched] of this._inputsUsed) {
-      if (!touched) {
-        componentRef.setInput(inputName, void 0);
-        this._inputsUsed.delete(inputName);
-      } else {
-        componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);
-        this._inputsUsed.set(inputName, false);
-      }
-    }
-  }
-  static ɵfac = function NgComponentOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgComponentOutlet)(ɵɵdirectiveInject(ViewContainerRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgComponentOutlet,
-    selectors: [["", "ngComponentOutlet", ""]],
-    inputs: {
-      ngComponentOutlet: "ngComponentOutlet",
-      ngComponentOutletInputs: "ngComponentOutletInputs",
-      ngComponentOutletInjector: "ngComponentOutletInjector",
-      ngComponentOutletContent: "ngComponentOutletContent",
-      ngComponentOutletNgModule: "ngComponentOutletNgModule",
-      ngComponentOutletNgModuleFactory: "ngComponentOutletNgModuleFactory"
-    },
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgComponentOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "[ngComponentOutlet]",
-      standalone: true
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }], {
-    ngComponentOutlet: [{
-      type: Input
-    }],
-    ngComponentOutletInputs: [{
-      type: Input
-    }],
-    ngComponentOutletInjector: [{
-      type: Input
-    }],
-    ngComponentOutletContent: [{
-      type: Input
-    }],
-    ngComponentOutletNgModule: [{
-      type: Input
-    }],
-    ngComponentOutletNgModuleFactory: [{
-      type: Input
-    }]
-  });
-})();
-function getParentInjector(injector) {
-  const parentNgModule = injector.get(NgModuleRef$1);
-  return parentNgModule.injector;
-}
-var NgForOfContext = class {
-  $implicit;
-  ngForOf;
-  index;
-  count;
-  constructor($implicit, ngForOf, index, count) {
-    this.$implicit = $implicit;
-    this.ngForOf = ngForOf;
-    this.index = index;
-    this.count = count;
-  }
-  // Indicates whether this is the first item in the collection.
-  get first() {
-    return this.index === 0;
-  }
-  // Indicates whether this is the last item in the collection.
-  get last() {
-    return this.index === this.count - 1;
-  }
-  // Indicates whether an index of this item in the collection is even.
-  get even() {
-    return this.index % 2 === 0;
-  }
-  // Indicates whether an index of this item in the collection is odd.
-  get odd() {
-    return !this.even;
-  }
-};
-var NgForOf = class _NgForOf {
-  _viewContainer;
-  _template;
-  _differs;
-  /**
-   * The value of the iterable expression, which can be used as a
-   * [template input variable](guide/directives/structural-directives#shorthand).
-   */
-  set ngForOf(ngForOf) {
-    this._ngForOf = ngForOf;
-    this._ngForOfDirty = true;
-  }
-  /**
-   * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable.
-   *
-   * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object
-   * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)
-   * as the key.
-   *
-   * `NgForOf` uses the computed key to associate items in an iterable with DOM elements
-   * it produces for these items.
-   *
-   * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an
-   * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a
-   * primary key), and this iterable could be updated with new object instances that still
-   * represent the same underlying entity (for example, when data is re-fetched from the server,
-   * and the iterable is recreated and re-rendered, but most of the data is still the same).
-   *
-   * @see {@link TrackByFunction}
-   */
-  set ngForTrackBy(fn) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && fn != null && typeof fn !== "function") {
-      console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. See https://angular.io/api/common/NgForOf#change-propagation for more information.`);
-    }
-    this._trackByFn = fn;
-  }
-  get ngForTrackBy() {
-    return this._trackByFn;
-  }
-  _ngForOf = null;
-  _ngForOfDirty = true;
-  _differ = null;
-  // TODO(issue/24571): remove '!'
-  // waiting for microsoft/typescript#43662 to allow the return type `TrackByFunction|undefined` for
-  // the getter
-  _trackByFn;
-  constructor(_viewContainer, _template, _differs) {
-    this._viewContainer = _viewContainer;
-    this._template = _template;
-    this._differs = _differs;
-  }
-  /**
-   * A reference to the template that is stamped out for each item in the iterable.
-   * @see [template reference variable](guide/templates/variables#template-reference-variables)
-   */
-  set ngForTemplate(value) {
-    if (value) {
-      this._template = value;
-    }
-  }
-  /**
-   * Applies the changes when needed.
-   * @nodoc
-   */
-  ngDoCheck() {
-    if (this._ngForOfDirty) {
-      this._ngForOfDirty = false;
-      const value = this._ngForOf;
-      if (!this._differ && value) {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          try {
-            this._differ = this._differs.find(value).create(this.ngForTrackBy);
-          } catch {
-            let errorMessage = `Cannot find a differ supporting object '${value}' of type '${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;
-            if (typeof value === "object") {
-              errorMessage += " Did you mean to use the keyvalue pipe?";
-            }
-            throw new RuntimeError(-2200, errorMessage);
-          }
-        } else {
-          this._differ = this._differs.find(value).create(this.ngForTrackBy);
-        }
-      }
-    }
-    if (this._differ) {
-      const changes = this._differ.diff(this._ngForOf);
-      if (changes) this._applyChanges(changes);
-    }
-  }
-  _applyChanges(changes) {
-    const viewContainer = this._viewContainer;
-    changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
-      if (item.previousIndex == null) {
-        viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? void 0 : currentIndex);
-      } else if (currentIndex == null) {
-        viewContainer.remove(adjustedPreviousIndex === null ? void 0 : adjustedPreviousIndex);
-      } else if (adjustedPreviousIndex !== null) {
-        const view = viewContainer.get(adjustedPreviousIndex);
-        viewContainer.move(view, currentIndex);
-        applyViewChange(view, item);
-      }
-    });
-    for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {
-      const viewRef = viewContainer.get(i);
-      const context = viewRef.context;
-      context.index = i;
-      context.count = ilen;
-      context.ngForOf = this._ngForOf;
-    }
-    changes.forEachIdentityChange((record) => {
-      const viewRef = viewContainer.get(record.currentIndex);
-      applyViewChange(viewRef, record);
-    });
-  }
-  /**
-   * Asserts the correct type of the context for the template that `NgForOf` will render.
-   *
-   * The presence of this method is a signal to the Ivy template type-check compiler that the
-   * `NgForOf` structural directive renders its template with a specific context type.
-   */
-  static ngTemplateContextGuard(dir, ctx) {
-    return true;
-  }
-  static ɵfac = function NgForOf_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgForOf)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(IterableDiffers));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgForOf,
-    selectors: [["", "ngFor", "", "ngForOf", ""]],
-    inputs: {
-      ngForOf: "ngForOf",
-      ngForTrackBy: "ngForTrackBy",
-      ngForTemplate: "ngForTemplate"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgForOf, [{
-    type: Directive,
-    args: [{
-      selector: "[ngFor][ngForOf]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: IterableDiffers
-  }], {
-    ngForOf: [{
-      type: Input
-    }],
-    ngForTrackBy: [{
-      type: Input
-    }],
-    ngForTemplate: [{
-      type: Input
-    }]
-  });
-})();
-function applyViewChange(view, record) {
-  view.context.$implicit = record.item;
-}
-function getTypeName(type) {
-  return type["name"] || typeof type;
-}
-var NgIf = class _NgIf {
-  _viewContainer;
-  _context = new NgIfContext();
-  _thenTemplateRef = null;
-  _elseTemplateRef = null;
-  _thenViewRef = null;
-  _elseViewRef = null;
-  constructor(_viewContainer, templateRef) {
-    this._viewContainer = _viewContainer;
-    this._thenTemplateRef = templateRef;
-  }
-  /**
-   * The Boolean expression to evaluate as the condition for showing a template.
-   */
-  set ngIf(condition) {
-    this._context.$implicit = this._context.ngIf = condition;
-    this._updateView();
-  }
-  /**
-   * A template to show if the condition expression evaluates to true.
-   */
-  set ngIfThen(templateRef) {
-    assertTemplate("ngIfThen", templateRef);
-    this._thenTemplateRef = templateRef;
-    this._thenViewRef = null;
-    this._updateView();
-  }
-  /**
-   * A template to show if the condition expression evaluates to false.
-   */
-  set ngIfElse(templateRef) {
-    assertTemplate("ngIfElse", templateRef);
-    this._elseTemplateRef = templateRef;
-    this._elseViewRef = null;
-    this._updateView();
-  }
-  _updateView() {
-    if (this._context.$implicit) {
-      if (!this._thenViewRef) {
-        this._viewContainer.clear();
-        this._elseViewRef = null;
-        if (this._thenTemplateRef) {
-          this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
-        }
-      }
-    } else {
-      if (!this._elseViewRef) {
-        this._viewContainer.clear();
-        this._thenViewRef = null;
-        if (this._elseTemplateRef) {
-          this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
-        }
-      }
-    }
-  }
-  /** @internal */
-  static ngIfUseIfTypeGuard;
-  /**
-   * Assert the correct type of the expression bound to the `ngIf` input within the template.
-   *
-   * The presence of this static field is a signal to the Ivy template type check compiler that
-   * when the `NgIf` structural directive renders its template, the type of the expression bound
-   * to `ngIf` should be narrowed in some way. For `NgIf`, the binding expression itself is used to
-   * narrow its type, which allows the strictNullChecks feature of TypeScript to work with `NgIf`.
-   */
-  static ngTemplateGuard_ngIf;
-  /**
-   * Asserts the correct type of the context for the template that `NgIf` will render.
-   *
-   * The presence of this method is a signal to the Ivy template type-check compiler that the
-   * `NgIf` structural directive renders its template with a specific context type.
-   */
-  static ngTemplateContextGuard(dir, ctx) {
-    return true;
-  }
-  static ɵfac = function NgIf_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgIf)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgIf,
-    selectors: [["", "ngIf", ""]],
-    inputs: {
-      ngIf: "ngIf",
-      ngIfThen: "ngIfThen",
-      ngIfElse: "ngIfElse"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgIf, [{
-    type: Directive,
-    args: [{
-      selector: "[ngIf]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }], {
-    ngIf: [{
-      type: Input
-    }],
-    ngIfThen: [{
-      type: Input
-    }],
-    ngIfElse: [{
-      type: Input
-    }]
-  });
-})();
-var NgIfContext = class {
-  $implicit = null;
-  ngIf = null;
-};
-function assertTemplate(property, templateRef) {
-  const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
-  if (!isTemplateRefOrNull) {
-    throw new Error(`${property} must be a TemplateRef, but received '${stringify(templateRef)}'.`);
-  }
-}
-var SwitchView = class {
-  _viewContainerRef;
-  _templateRef;
-  _created = false;
-  constructor(_viewContainerRef, _templateRef) {
-    this._viewContainerRef = _viewContainerRef;
-    this._templateRef = _templateRef;
-  }
-  create() {
-    this._created = true;
-    this._viewContainerRef.createEmbeddedView(this._templateRef);
-  }
-  destroy() {
-    this._created = false;
-    this._viewContainerRef.clear();
-  }
-  enforceState(created) {
-    if (created && !this._created) {
-      this.create();
-    } else if (!created && this._created) {
-      this.destroy();
-    }
-  }
-};
-var NgSwitch = class _NgSwitch {
-  _defaultViews = [];
-  _defaultUsed = false;
-  _caseCount = 0;
-  _lastCaseCheckIndex = 0;
-  _lastCasesMatched = false;
-  _ngSwitch;
-  set ngSwitch(newValue) {
-    this._ngSwitch = newValue;
-    if (this._caseCount === 0) {
-      this._updateDefaultCases(true);
-    }
-  }
-  /** @internal */
-  _addCase() {
-    return this._caseCount++;
-  }
-  /** @internal */
-  _addDefault(view) {
-    this._defaultViews.push(view);
-  }
-  /** @internal */
-  _matchCase(value) {
-    const matched = value === this._ngSwitch;
-    this._lastCasesMatched ||= matched;
-    this._lastCaseCheckIndex++;
-    if (this._lastCaseCheckIndex === this._caseCount) {
-      this._updateDefaultCases(!this._lastCasesMatched);
-      this._lastCaseCheckIndex = 0;
-      this._lastCasesMatched = false;
-    }
-    return matched;
-  }
-  _updateDefaultCases(useDefault) {
-    if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {
-      this._defaultUsed = useDefault;
-      for (const defaultView of this._defaultViews) {
-        defaultView.enforceState(useDefault);
-      }
-    }
-  }
-  static ɵfac = function NgSwitch_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitch)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitch,
-    selectors: [["", "ngSwitch", ""]],
-    inputs: {
-      ngSwitch: "ngSwitch"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitch, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitch]"
-    }]
-  }], null, {
-    ngSwitch: [{
-      type: Input
-    }]
-  });
-})();
-var NgSwitchCase = class _NgSwitchCase {
-  ngSwitch;
-  _view;
-  /**
-   * Stores the HTML template to be selected on match.
-   */
-  ngSwitchCase;
-  constructor(viewContainer, templateRef, ngSwitch) {
-    this.ngSwitch = ngSwitch;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !ngSwitch) {
-      throwNgSwitchProviderNotFoundError("ngSwitchCase", "NgSwitchCase");
-    }
-    ngSwitch._addCase();
-    this._view = new SwitchView(viewContainer, templateRef);
-  }
-  /**
-   * Performs case matching. For internal use only.
-   * @nodoc
-   */
-  ngDoCheck() {
-    this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));
-  }
-  static ɵfac = function NgSwitchCase_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitchCase)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(NgSwitch, 9));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitchCase,
-    selectors: [["", "ngSwitchCase", ""]],
-    inputs: {
-      ngSwitchCase: "ngSwitchCase"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitchCase, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitchCase]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: NgSwitch,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Host
-    }]
-  }], {
-    ngSwitchCase: [{
-      type: Input
-    }]
-  });
-})();
-var NgSwitchDefault = class _NgSwitchDefault {
-  constructor(viewContainer, templateRef, ngSwitch) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !ngSwitch) {
-      throwNgSwitchProviderNotFoundError("ngSwitchDefault", "NgSwitchDefault");
-    }
-    ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
-  }
-  static ɵfac = function NgSwitchDefault_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitchDefault)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(NgSwitch, 9));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitchDefault,
-    selectors: [["", "ngSwitchDefault", ""]]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitchDefault, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitchDefault]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: NgSwitch,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Host
-    }]
-  }], null);
-})();
-function throwNgSwitchProviderNotFoundError(attrName, directiveName) {
-  throw new RuntimeError(2e3, `An element with the "${attrName}" attribute (matching the "${directiveName}" directive) must be located inside an element with the "ngSwitch" attribute (matching "NgSwitch" directive)`);
-}
-var NgPlural = class _NgPlural {
-  _localization;
-  _activeView;
-  _caseViews = {};
-  constructor(_localization) {
-    this._localization = _localization;
-  }
-  set ngPlural(value) {
-    this._updateView(value);
-  }
-  addCase(value, switchView) {
-    this._caseViews[value] = switchView;
-  }
-  _updateView(switchValue) {
-    this._clearViews();
-    const cases = Object.keys(this._caseViews);
-    const key = getPluralCategory(switchValue, cases, this._localization);
-    this._activateView(this._caseViews[key]);
-  }
-  _clearViews() {
-    if (this._activeView) this._activeView.destroy();
-  }
-  _activateView(view) {
-    if (view) {
-      this._activeView = view;
-      this._activeView.create();
-    }
-  }
-  static ɵfac = function NgPlural_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgPlural)(ɵɵdirectiveInject(NgLocalization));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgPlural,
-    selectors: [["", "ngPlural", ""]],
-    inputs: {
-      ngPlural: "ngPlural"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgPlural, [{
-    type: Directive,
-    args: [{
-      selector: "[ngPlural]"
-    }]
-  }], () => [{
-    type: NgLocalization
-  }], {
-    ngPlural: [{
-      type: Input
-    }]
-  });
-})();
-var NgPluralCase = class _NgPluralCase {
-  value;
-  constructor(value, template, viewContainer, ngPlural) {
-    this.value = value;
-    const isANumber = !isNaN(Number(value));
-    ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));
-  }
-  static ɵfac = function NgPluralCase_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgPluralCase)(ɵɵinjectAttribute("ngPluralCase"), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(NgPlural, 1));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgPluralCase,
-    selectors: [["", "ngPluralCase", ""]]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgPluralCase, [{
-    type: Directive,
-    args: [{
-      selector: "[ngPluralCase]"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Attribute,
-      args: ["ngPluralCase"]
-    }]
-  }, {
-    type: TemplateRef
-  }, {
-    type: ViewContainerRef
-  }, {
-    type: NgPlural,
-    decorators: [{
-      type: Host
-    }]
-  }], null);
-})();
-var NgStyle = class _NgStyle {
-  _ngEl;
-  _differs;
-  _renderer;
-  _ngStyle = null;
-  _differ = null;
-  constructor(_ngEl, _differs, _renderer) {
-    this._ngEl = _ngEl;
-    this._differs = _differs;
-    this._renderer = _renderer;
-  }
-  set ngStyle(values) {
-    this._ngStyle = values;
-    if (!this._differ && values) {
-      this._differ = this._differs.find(values).create();
-    }
-  }
-  ngDoCheck() {
-    if (this._differ) {
-      const changes = this._differ.diff(this._ngStyle);
-      if (changes) {
-        this._applyChanges(changes);
-      }
-    }
-  }
-  _setStyle(nameAndUnit, value) {
-    const [name, unit] = nameAndUnit.split(".");
-    const flags = name.indexOf("-") === -1 ? void 0 : RendererStyleFlags2.DashCase;
-    if (value != null) {
-      this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);
-    } else {
-      this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);
-    }
-  }
-  _applyChanges(changes) {
-    changes.forEachRemovedItem((record) => this._setStyle(record.key, null));
-    changes.forEachAddedItem((record) => this._setStyle(record.key, record.currentValue));
-    changes.forEachChangedItem((record) => this._setStyle(record.key, record.currentValue));
-  }
-  static ɵfac = function NgStyle_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgStyle)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(KeyValueDiffers), ɵɵdirectiveInject(Renderer2));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgStyle,
-    selectors: [["", "ngStyle", ""]],
-    inputs: {
-      ngStyle: "ngStyle"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgStyle, [{
-    type: Directive,
-    args: [{
-      selector: "[ngStyle]"
-    }]
-  }], () => [{
-    type: ElementRef
-  }, {
-    type: KeyValueDiffers
-  }, {
-    type: Renderer2
-  }], {
-    ngStyle: [{
-      type: Input,
-      args: ["ngStyle"]
-    }]
-  });
-})();
-var NgTemplateOutlet = class _NgTemplateOutlet {
-  _viewContainerRef;
-  _viewRef = null;
-  /**
-   * A context object to attach to the {@link EmbeddedViewRef}. This should be an
-   * object, the object's keys will be available for binding by the local template `let`
-   * declarations.
-   * Using the key `$implicit` in the context object will set its value as default.
-   */
-  ngTemplateOutletContext = null;
-  /**
-   * A string defining the template reference and optionally the context object for the template.
-   */
-  ngTemplateOutlet = null;
-  /** Injector to be used within the embedded view. */
-  ngTemplateOutletInjector = null;
-  constructor(_viewContainerRef) {
-    this._viewContainerRef = _viewContainerRef;
-  }
-  ngOnChanges(changes) {
-    if (this._shouldRecreateView(changes)) {
-      const viewContainerRef = this._viewContainerRef;
-      if (this._viewRef) {
-        viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
-      }
-      if (!this.ngTemplateOutlet) {
-        this._viewRef = null;
-        return;
-      }
-      const viewContext = this._createContextForwardProxy();
-      this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {
-        injector: this.ngTemplateOutletInjector ?? void 0
-      });
-    }
-  }
-  /**
-   * We need to re-create existing embedded view if either is true:
-   * - the outlet changed.
-   * - the injector changed.
-   */
-  _shouldRecreateView(changes) {
-    return !!changes["ngTemplateOutlet"] || !!changes["ngTemplateOutletInjector"];
-  }
-  /**
-   * For a given outlet instance, we create a proxy object that delegates
-   * to the user-specified context. This allows changing, or swapping out
-   * the context object completely without having to destroy/re-create the view.
-   */
-  _createContextForwardProxy() {
-    return new Proxy({}, {
-      set: (_target, prop, newValue) => {
-        if (!this.ngTemplateOutletContext) {
-          return false;
-        }
-        return Reflect.set(this.ngTemplateOutletContext, prop, newValue);
-      },
-      get: (_target, prop, receiver) => {
-        if (!this.ngTemplateOutletContext) {
-          return void 0;
-        }
-        return Reflect.get(this.ngTemplateOutletContext, prop, receiver);
-      }
-    });
-  }
-  static ɵfac = function NgTemplateOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgTemplateOutlet)(ɵɵdirectiveInject(ViewContainerRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgTemplateOutlet,
-    selectors: [["", "ngTemplateOutlet", ""]],
-    inputs: {
-      ngTemplateOutletContext: "ngTemplateOutletContext",
-      ngTemplateOutlet: "ngTemplateOutlet",
-      ngTemplateOutletInjector: "ngTemplateOutletInjector"
-    },
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgTemplateOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "[ngTemplateOutlet]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }], {
-    ngTemplateOutletContext: [{
-      type: Input
-    }],
-    ngTemplateOutlet: [{
-      type: Input
-    }],
-    ngTemplateOutletInjector: [{
-      type: Input
-    }]
-  });
-})();
-var COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];
-function invalidPipeArgumentError(type, value) {
-  return new RuntimeError(2100, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${stringify(type)}'`);
-}
-var SubscribableStrategy = class {
-  createSubscription(async, updateLatestValue) {
-    return untracked(() => async.subscribe({
-      next: updateLatestValue,
-      error: (e) => {
-        throw e;
-      }
-    }));
-  }
-  dispose(subscription) {
-    untracked(() => subscription.unsubscribe());
-  }
-};
-var PromiseStrategy = class {
-  createSubscription(async, updateLatestValue) {
-    return async.then(updateLatestValue, (e) => {
-      throw e;
-    });
-  }
-  dispose(subscription) {
-  }
-};
-var _promiseStrategy = new PromiseStrategy();
-var _subscribableStrategy = new SubscribableStrategy();
-var AsyncPipe = class _AsyncPipe {
-  _ref;
-  _latestValue = null;
-  markForCheckOnValueUpdate = true;
-  _subscription = null;
-  _obj = null;
-  _strategy = null;
-  constructor(ref) {
-    this._ref = ref;
-  }
-  ngOnDestroy() {
-    if (this._subscription) {
-      this._dispose();
-    }
-    this._ref = null;
-  }
-  transform(obj) {
-    if (!this._obj) {
-      if (obj) {
-        try {
-          this.markForCheckOnValueUpdate = false;
-          this._subscribe(obj);
-        } finally {
-          this.markForCheckOnValueUpdate = true;
-        }
-      }
-      return this._latestValue;
-    }
-    if (obj !== this._obj) {
-      this._dispose();
-      return this.transform(obj);
-    }
-    return this._latestValue;
-  }
-  _subscribe(obj) {
-    this._obj = obj;
-    this._strategy = this._selectStrategy(obj);
-    this._subscription = this._strategy.createSubscription(obj, (value) => this._updateLatestValue(obj, value));
-  }
-  _selectStrategy(obj) {
-    if (isPromise(obj)) {
-      return _promiseStrategy;
-    }
-    if (isSubscribable(obj)) {
-      return _subscribableStrategy;
-    }
-    throw invalidPipeArgumentError(_AsyncPipe, obj);
-  }
-  _dispose() {
-    this._strategy.dispose(this._subscription);
-    this._latestValue = null;
-    this._subscription = null;
-    this._obj = null;
-  }
-  _updateLatestValue(async, value) {
-    if (async === this._obj) {
-      this._latestValue = value;
-      if (this.markForCheckOnValueUpdate) {
-        this._ref?.markForCheck();
-      }
-    }
-  }
-  static ɵfac = function AsyncPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _AsyncPipe)(ɵɵdirectiveInject(ChangeDetectorRef, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "async",
-    type: _AsyncPipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AsyncPipe, [{
-    type: Pipe,
-    args: [{
-      name: "async",
-      pure: false
-    }]
-  }], () => [{
-    type: ChangeDetectorRef
-  }], null);
-})();
-var LowerCasePipe = class _LowerCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_LowerCasePipe, value);
-    }
-    return value.toLowerCase();
-  }
-  static ɵfac = function LowerCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LowerCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "lowercase",
-    type: _LowerCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LowerCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "lowercase"
-    }]
-  }], null, null);
-})();
-var unicodeWordMatch = /(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;
-var TitleCasePipe = class _TitleCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_TitleCasePipe, value);
-    }
-    return value.replace(unicodeWordMatch, (txt) => txt[0].toUpperCase() + txt.slice(1).toLowerCase());
-  }
-  static ɵfac = function TitleCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TitleCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "titlecase",
-    type: _TitleCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TitleCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "titlecase"
-    }]
-  }], null, null);
-})();
-var UpperCasePipe = class _UpperCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_UpperCasePipe, value);
-    }
-    return value.toUpperCase();
-  }
-  static ɵfac = function UpperCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UpperCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "uppercase",
-    type: _UpperCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UpperCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "uppercase"
-    }]
-  }], null, null);
-})();
-var DEFAULT_DATE_FORMAT = "mediumDate";
-var DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken(ngDevMode ? "DATE_PIPE_DEFAULT_TIMEZONE" : "");
-var DATE_PIPE_DEFAULT_OPTIONS = new InjectionToken(ngDevMode ? "DATE_PIPE_DEFAULT_OPTIONS" : "");
-var DatePipe = class _DatePipe {
-  locale;
-  defaultTimezone;
-  defaultOptions;
-  constructor(locale, defaultTimezone, defaultOptions) {
-    this.locale = locale;
-    this.defaultTimezone = defaultTimezone;
-    this.defaultOptions = defaultOptions;
-  }
-  transform(value, format, timezone, locale) {
-    if (value == null || value === "" || value !== value) return null;
-    try {
-      const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;
-      const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? void 0;
-      return formatDate(value, _format, locale || this.locale, _timezone);
-    } catch (error) {
-      throw invalidPipeArgumentError(_DatePipe, error.message);
-    }
-  }
-  static ɵfac = function DatePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DatePipe)(ɵɵdirectiveInject(LOCALE_ID, 16), ɵɵdirectiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), ɵɵdirectiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "date",
-    type: _DatePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DatePipe, [{
-    type: Pipe,
-    args: [{
-      name: "date"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DATE_PIPE_DEFAULT_TIMEZONE]
-    }, {
-      type: Optional
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DATE_PIPE_DEFAULT_OPTIONS]
-    }, {
-      type: Optional
-    }]
-  }], null);
-})();
-var _INTERPOLATION_REGEXP = /#/g;
-var I18nPluralPipe = class _I18nPluralPipe {
-  _localization;
-  constructor(_localization) {
-    this._localization = _localization;
-  }
-  /**
-   * @param value the number to be formatted
-   * @param pluralMap an object that mimics the ICU format, see
-   * https://unicode-org.github.io/icu/userguide/format_parse/messages/.
-   * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by
-   * default).
-   */
-  transform(value, pluralMap, locale) {
-    if (value == null) return "";
-    if (typeof pluralMap !== "object" || pluralMap === null) {
-      throw invalidPipeArgumentError(_I18nPluralPipe, pluralMap);
-    }
-    const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
-    return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
-  }
-  static ɵfac = function I18nPluralPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _I18nPluralPipe)(ɵɵdirectiveInject(NgLocalization, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "i18nPlural",
-    type: _I18nPluralPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(I18nPluralPipe, [{
-    type: Pipe,
-    args: [{
-      name: "i18nPlural"
-    }]
-  }], () => [{
-    type: NgLocalization
-  }], null);
-})();
-var I18nSelectPipe = class _I18nSelectPipe {
-  /**
-   * @param value a string to be internationalized.
-   * @param mapping an object that indicates the text that should be displayed
-   * for different values of the provided `value`.
-   */
-  transform(value, mapping) {
-    if (value == null) return "";
-    if (typeof mapping !== "object" || typeof value !== "string") {
-      throw invalidPipeArgumentError(_I18nSelectPipe, mapping);
-    }
-    if (mapping.hasOwnProperty(value)) {
-      return mapping[value];
-    }
-    if (mapping.hasOwnProperty("other")) {
-      return mapping["other"];
-    }
-    return "";
-  }
-  static ɵfac = function I18nSelectPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _I18nSelectPipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "i18nSelect",
-    type: _I18nSelectPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(I18nSelectPipe, [{
-    type: Pipe,
-    args: [{
-      name: "i18nSelect"
-    }]
-  }], null, null);
-})();
-var JsonPipe = class _JsonPipe {
-  /**
-   * @param value A value of any type to convert into a JSON-format string.
-   */
-  transform(value) {
-    return JSON.stringify(value, null, 2);
-  }
-  static ɵfac = function JsonPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonPipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "json",
-    type: _JsonPipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonPipe, [{
-    type: Pipe,
-    args: [{
-      name: "json",
-      pure: false
-    }]
-  }], null, null);
-})();
-function makeKeyValuePair(key, value) {
-  return {
-    key,
-    value
-  };
-}
-var KeyValuePipe = class _KeyValuePipe {
-  differs;
-  constructor(differs) {
-    this.differs = differs;
-  }
-  differ;
-  keyValues = [];
-  compareFn = defaultComparator;
-  transform(input, compareFn = defaultComparator) {
-    if (!input || !(input instanceof Map) && typeof input !== "object") {
-      return null;
-    }
-    this.differ ??= this.differs.find(input).create();
-    const differChanges = this.differ.diff(input);
-    const compareFnChanged = compareFn !== this.compareFn;
-    if (differChanges) {
-      this.keyValues = [];
-      differChanges.forEachItem((r) => {
-        this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));
-      });
-    }
-    if (differChanges || compareFnChanged) {
-      if (compareFn) {
-        this.keyValues.sort(compareFn);
-      }
-      this.compareFn = compareFn;
-    }
-    return this.keyValues;
-  }
-  static ɵfac = function KeyValuePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _KeyValuePipe)(ɵɵdirectiveInject(KeyValueDiffers, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "keyvalue",
-    type: _KeyValuePipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(KeyValuePipe, [{
-    type: Pipe,
-    args: [{
-      name: "keyvalue",
-      pure: false
-    }]
-  }], () => [{
-    type: KeyValueDiffers
-  }], null);
-})();
-function defaultComparator(keyValueA, keyValueB) {
-  const a = keyValueA.key;
-  const b = keyValueB.key;
-  if (a === b) return 0;
-  if (a === void 0) return 1;
-  if (b === void 0) return -1;
-  if (a === null) return 1;
-  if (b === null) return -1;
-  if (typeof a == "string" && typeof b == "string") {
-    return a < b ? -1 : 1;
-  }
-  if (typeof a == "number" && typeof b == "number") {
-    return a - b;
-  }
-  if (typeof a == "boolean" && typeof b == "boolean") {
-    return a < b ? -1 : 1;
-  }
-  const aString = String(a);
-  const bString = String(b);
-  return aString == bString ? 0 : aString < bString ? -1 : 1;
-}
-var DecimalPipe = class _DecimalPipe {
-  _locale;
-  constructor(_locale) {
-    this._locale = _locale;
-  }
-  transform(value, digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    try {
-      const num = strToNumber(value);
-      return formatNumber(num, locale, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_DecimalPipe, error.message);
-    }
-  }
-  static ɵfac = function DecimalPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DecimalPipe)(ɵɵdirectiveInject(LOCALE_ID, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "number",
-    type: _DecimalPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DecimalPipe, [{
-    type: Pipe,
-    args: [{
-      name: "number"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-var PercentPipe = class _PercentPipe {
-  _locale;
-  constructor(_locale) {
-    this._locale = _locale;
-  }
-  /**
-   *
-   * @param value The number to be formatted as a percentage.
-   * @param digitsInfo Decimal representation options, specified by a string
-   * in the following format:<br>
-   * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.
-   *   - `minIntegerDigits`: The minimum number of integer digits before the decimal point.
-   * Default is `1`.
-   *   - `minFractionDigits`: The minimum number of digits after the decimal point.
-   * Default is `0`.
-   *   - `maxFractionDigits`: The maximum number of digits after the decimal point.
-   * Default is `0`.
-   * @param locale A locale code for the locale format rules to use.
-   * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.
-   * See [Setting your app locale](guide/i18n/locale-id).
-   */
-  transform(value, digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    try {
-      const num = strToNumber(value);
-      return formatPercent(num, locale, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_PercentPipe, error.message);
-    }
-  }
-  static ɵfac = function PercentPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PercentPipe)(ɵɵdirectiveInject(LOCALE_ID, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "percent",
-    type: _PercentPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PercentPipe, [{
-    type: Pipe,
-    args: [{
-      name: "percent"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-var CurrencyPipe = class _CurrencyPipe {
-  _locale;
-  _defaultCurrencyCode;
-  constructor(_locale, _defaultCurrencyCode = "USD") {
-    this._locale = _locale;
-    this._defaultCurrencyCode = _defaultCurrencyCode;
-  }
-  transform(value, currencyCode = this._defaultCurrencyCode, display = "symbol", digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    if (typeof display === "boolean") {
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && console && console.warn) {
-        console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".`);
-      }
-      display = display ? "symbol" : "code";
-    }
-    let currency = currencyCode || this._defaultCurrencyCode;
-    if (display !== "code") {
-      if (display === "symbol" || display === "symbol-narrow") {
-        currency = getCurrencySymbol(currency, display === "symbol" ? "wide" : "narrow", locale);
-      } else {
-        currency = display;
-      }
-    }
-    try {
-      const num = strToNumber(value);
-      return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_CurrencyPipe, error.message);
-    }
-  }
-  static ɵfac = function CurrencyPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _CurrencyPipe)(ɵɵdirectiveInject(LOCALE_ID, 16), ɵɵdirectiveInject(DEFAULT_CURRENCY_CODE, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "currency",
-    type: _CurrencyPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CurrencyPipe, [{
-    type: Pipe,
-    args: [{
-      name: "currency"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DEFAULT_CURRENCY_CODE]
-    }]
-  }], null);
-})();
-function isValue(value) {
-  return !(value == null || value === "" || value !== value);
-}
-function strToNumber(value) {
-  if (typeof value === "string" && !isNaN(Number(value) - parseFloat(value))) {
-    return Number(value);
-  }
-  if (typeof value !== "number") {
-    throw new Error(`${value} is not a number`);
-  }
-  return value;
-}
-var SlicePipe = class _SlicePipe {
-  transform(value, start, end) {
-    if (value == null) return null;
-    if (!this.supports(value)) {
-      throw invalidPipeArgumentError(_SlicePipe, value);
-    }
-    return value.slice(start, end);
-  }
-  supports(obj) {
-    return typeof obj === "string" || Array.isArray(obj);
-  }
-  static ɵfac = function SlicePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _SlicePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "slice",
-    type: _SlicePipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SlicePipe, [{
-    type: Pipe,
-    args: [{
-      name: "slice",
-      pure: false
-    }]
-  }], null, null);
-})();
-var COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];
-var CommonModule = class _CommonModule {
-  static ɵfac = function CommonModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _CommonModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _CommonModule,
-    imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],
-    exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CommonModule, [{
-    type: NgModule,
-    args: [{
-      imports: [COMMON_DIRECTIVES, COMMON_PIPES],
-      exports: [COMMON_DIRECTIVES, COMMON_PIPES]
-    }]
-  }], null, null);
-})();
-var PLATFORM_BROWSER_ID = "browser";
-var PLATFORM_SERVER_ID = "server";
-function isPlatformBrowser(platformId) {
-  return platformId === PLATFORM_BROWSER_ID;
-}
-function isPlatformServer(platformId) {
-  return platformId === PLATFORM_SERVER_ID;
-}
-var VERSION = new Version("19.0.5");
-var ViewportScroller = class _ViewportScroller {
-  // De-sugared tree-shakable injection
-  // See #23917
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _ViewportScroller,
-      providedIn: "root",
-      factory: () => isPlatformBrowser(inject(PLATFORM_ID)) ? new BrowserViewportScroller(inject(DOCUMENT), window) : new NullViewportScroller()
-    })
-  );
-};
-var BrowserViewportScroller = class {
-  document;
-  window;
-  offset = () => [0, 0];
-  constructor(document2, window2) {
-    this.document = document2;
-    this.window = window2;
-  }
-  /**
-   * Configures the top offset used when scrolling to an anchor.
-   * @param offset A position in screen coordinates (a tuple with x and y values)
-   * or a function that returns the top offset position.
-   *
-   */
-  setOffset(offset) {
-    if (Array.isArray(offset)) {
-      this.offset = () => offset;
-    } else {
-      this.offset = offset;
-    }
-  }
-  /**
-   * Retrieves the current scroll position.
-   * @returns The position in screen coordinates.
-   */
-  getScrollPosition() {
-    return [this.window.scrollX, this.window.scrollY];
-  }
-  /**
-   * Sets the scroll position.
-   * @param position The new position in screen coordinates.
-   */
-  scrollToPosition(position) {
-    this.window.scrollTo(position[0], position[1]);
-  }
-  /**
-   * Scrolls to an element and attempts to focus the element.
-   *
-   * Note that the function name here is misleading in that the target string may be an ID for a
-   * non-anchor element.
-   *
-   * @param target The ID of an element or name of the anchor.
-   *
-   * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document
-   * @see https://html.spec.whatwg.org/#scroll-to-fragid
-   */
-  scrollToAnchor(target) {
-    const elSelected = findAnchorFromDocument(this.document, target);
-    if (elSelected) {
-      this.scrollToElement(elSelected);
-      elSelected.focus();
-    }
-  }
-  /**
-   * Disables automatic scroll restoration provided by the browser.
-   */
-  setHistoryScrollRestoration(scrollRestoration) {
-    this.window.history.scrollRestoration = scrollRestoration;
-  }
-  /**
-   * Scrolls to an element using the native offset and the specified offset set on this scroller.
-   *
-   * The offset can be used when we know that there is a floating header and scrolling naively to an
-   * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.
-   */
-  scrollToElement(el) {
-    const rect = el.getBoundingClientRect();
-    const left = rect.left + this.window.pageXOffset;
-    const top = rect.top + this.window.pageYOffset;
-    const offset = this.offset();
-    this.window.scrollTo(left - offset[0], top - offset[1]);
-  }
-};
-function findAnchorFromDocument(document2, target) {
-  const documentResult = document2.getElementById(target) || document2.getElementsByName(target)[0];
-  if (documentResult) {
-    return documentResult;
-  }
-  if (typeof document2.createTreeWalker === "function" && document2.body && typeof document2.body.attachShadow === "function") {
-    const treeWalker = document2.createTreeWalker(document2.body, NodeFilter.SHOW_ELEMENT);
-    let currentNode = treeWalker.currentNode;
-    while (currentNode) {
-      const shadowRoot = currentNode.shadowRoot;
-      if (shadowRoot) {
-        const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name="${target}"]`);
-        if (result) {
-          return result;
-        }
-      }
-      currentNode = treeWalker.nextNode();
-    }
-  }
-  return null;
-}
-var NullViewportScroller = class {
-  /**
-   * Empty implementation
-   */
-  setOffset(offset) {
-  }
-  /**
-   * Empty implementation
-   */
-  getScrollPosition() {
-    return [0, 0];
-  }
-  /**
-   * Empty implementation
-   */
-  scrollToPosition(position) {
-  }
-  /**
-   * Empty implementation
-   */
-  scrollToAnchor(anchor) {
-  }
-  /**
-   * Empty implementation
-   */
-  setHistoryScrollRestoration(scrollRestoration) {
-  }
-};
-var XhrFactory = class {
-};
-var PLACEHOLDER_QUALITY = "20";
-function getUrl(src, win) {
-  return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);
-}
-function isAbsoluteUrl(src) {
-  return /^https?:\/\//.test(src);
-}
-function extractHostname(url) {
-  return isAbsoluteUrl(url) ? new URL(url).hostname : url;
-}
-function isValidPath(path) {
-  const isString = typeof path === "string";
-  if (!isString || path.trim() === "") {
-    return false;
-  }
-  try {
-    const url = new URL(path);
-    return true;
-  } catch {
-    return false;
-  }
-}
-function normalizePath(path) {
-  return path.endsWith("/") ? path.slice(0, -1) : path;
-}
-function normalizeSrc(src) {
-  return src.startsWith("/") ? src.slice(1) : src;
-}
-var noopImageLoader = (config) => config.src;
-var IMAGE_LOADER = new InjectionToken(ngDevMode ? "ImageLoader" : "", {
-  providedIn: "root",
-  factory: () => noopImageLoader
-});
-function createImageLoader(buildUrlFn, exampleUrls) {
-  return function provideImageLoader(path) {
-    if (!isValidPath(path)) {
-      throwInvalidPathError(path, exampleUrls || []);
-    }
-    path = normalizePath(path);
-    const loaderFn = (config) => {
-      if (isAbsoluteUrl(config.src)) {
-        throwUnexpectedAbsoluteUrlError(path, config.src);
-      }
-      return buildUrlFn(path, __spreadProps(__spreadValues({}, config), {
-        src: normalizeSrc(config.src)
-      }));
-    };
-    const providers = [{
-      provide: IMAGE_LOADER,
-      useValue: loaderFn
-    }];
-    return providers;
-  };
-}
-function throwInvalidPathError(path, exampleUrls) {
-  throw new RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\`${path}\`). To fix this, supply a path using one of the following formats: ${exampleUrls.join(" or ")}`);
-}
-function throwUnexpectedAbsoluteUrlError(path, url) {
-  throw new RuntimeError(2959, ngDevMode && `Image loader has detected a \`<img>\` tag with an invalid \`ngSrc\` attribute: ${url}. This image loader expects \`ngSrc\` to be a relative URL - however the provided value is an absolute URL. To fix this, provide \`ngSrc\` as a path relative to the base URL configured for this loader (\`${path}\`).`);
-}
-var provideCloudflareLoader = createImageLoader(createCloudflareUrl, ngDevMode ? ["https://<ZONE>/cdn-cgi/image/<OPTIONS>/<SOURCE-IMAGE>"] : void 0);
-function createCloudflareUrl(path, config) {
-  let params = `format=auto`;
-  if (config.width) {
-    params += `,width=${config.width}`;
-  }
-  if (config.isPlaceholder) {
-    params += `,quality=${PLACEHOLDER_QUALITY}`;
-  }
-  return `${path}/cdn-cgi/image/${params}/${config.src}`;
-}
-var cloudinaryLoaderInfo = {
-  name: "Cloudinary",
-  testUrl: isCloudinaryUrl
-};
-var CLOUDINARY_LOADER_REGEX = /https?\:\/\/[^\/]+\.cloudinary\.com\/.+/;
-function isCloudinaryUrl(url) {
-  return CLOUDINARY_LOADER_REGEX.test(url);
-}
-var provideCloudinaryLoader = createImageLoader(createCloudinaryUrl, ngDevMode ? ["https://res.cloudinary.com/mysite", "https://mysite.cloudinary.com", "https://subdomain.mysite.com"] : void 0);
-function createCloudinaryUrl(path, config) {
-  const quality = config.isPlaceholder ? "q_auto:low" : "q_auto";
-  let params = `f_auto,${quality}`;
-  if (config.width) {
-    params += `,w_${config.width}`;
-  }
-  if (config.loaderParams?.["rounded"]) {
-    params += `,r_max`;
-  }
-  return `${path}/image/upload/${params}/${config.src}`;
-}
-var imageKitLoaderInfo = {
-  name: "ImageKit",
-  testUrl: isImageKitUrl
-};
-var IMAGE_KIT_LOADER_REGEX = /https?\:\/\/[^\/]+\.imagekit\.io\/.+/;
-function isImageKitUrl(url) {
-  return IMAGE_KIT_LOADER_REGEX.test(url);
-}
-var provideImageKitLoader = createImageLoader(createImagekitUrl, ngDevMode ? ["https://ik.imagekit.io/mysite", "https://subdomain.mysite.com"] : void 0);
-function createImagekitUrl(path, config) {
-  const {
-    src,
-    width
-  } = config;
-  const params = [];
-  if (width) {
-    params.push(`w-${width}`);
-  }
-  if (config.isPlaceholder) {
-    params.push(`q-${PLACEHOLDER_QUALITY}`);
-  }
-  const urlSegments = params.length ? [path, `tr:${params.join(",")}`, src] : [path, src];
-  const url = new URL(urlSegments.join("/"));
-  return url.href;
-}
-var imgixLoaderInfo = {
-  name: "Imgix",
-  testUrl: isImgixUrl
-};
-var IMGIX_LOADER_REGEX = /https?\:\/\/[^\/]+\.imgix\.net\/.+/;
-function isImgixUrl(url) {
-  return IMGIX_LOADER_REGEX.test(url);
-}
-var provideImgixLoader = createImageLoader(createImgixUrl, ngDevMode ? ["https://somepath.imgix.net/"] : void 0);
-function createImgixUrl(path, config) {
-  const url = new URL(`${path}/${config.src}`);
-  url.searchParams.set("auto", "format");
-  if (config.width) {
-    url.searchParams.set("w", config.width.toString());
-  }
-  if (config.isPlaceholder) {
-    url.searchParams.set("q", PLACEHOLDER_QUALITY);
-  }
-  return url.href;
-}
-var netlifyLoaderInfo = {
-  name: "Netlify",
-  testUrl: isNetlifyUrl
-};
-var NETLIFY_LOADER_REGEX = /https?\:\/\/[^\/]+\.netlify\.app\/.+/;
-function isNetlifyUrl(url) {
-  return NETLIFY_LOADER_REGEX.test(url);
-}
-function imgDirectiveDetails(ngSrc, includeNgSrc = true) {
-  const ngSrcInfo = includeNgSrc ? `(activated on an <img> element with the \`ngSrc="${ngSrc}"\`) ` : "";
-  return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;
-}
-function assertDevMode(checkName) {
-  if (!ngDevMode) {
-    throw new RuntimeError(2958, `Unexpected invocation of the ${checkName} in the prod mode. Please make sure that the prod mode is enabled for production builds.`);
-  }
-}
-var LCPImageObserver = class _LCPImageObserver {
-  // Map of full image URLs -> original `ngSrc` values.
-  images = /* @__PURE__ */ new Map();
-  window = null;
-  observer = null;
-  constructor() {
-    const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
-    assertDevMode("LCP checker");
-    const win = inject(DOCUMENT).defaultView;
-    if (isBrowser && typeof PerformanceObserver !== "undefined") {
-      this.window = win;
-      this.observer = this.initPerformanceObserver();
-    }
-  }
-  /**
-   * Inits PerformanceObserver and subscribes to LCP events.
-   * Based on https://web.dev/lcp/#measure-lcp-in-javascript
-   */
-  initPerformanceObserver() {
-    const observer = new PerformanceObserver((entryList) => {
-      const entries = entryList.getEntries();
-      if (entries.length === 0) return;
-      const lcpElement = entries[entries.length - 1];
-      const imgSrc = lcpElement.element?.src ?? "";
-      if (imgSrc.startsWith("data:") || imgSrc.startsWith("blob:")) return;
-      const img = this.images.get(imgSrc);
-      if (!img) return;
-      if (!img.priority && !img.alreadyWarnedPriority) {
-        img.alreadyWarnedPriority = true;
-        logMissingPriorityError(imgSrc);
-      }
-      if (img.modified && !img.alreadyWarnedModified) {
-        img.alreadyWarnedModified = true;
-        logModifiedWarning(imgSrc);
-      }
-    });
-    observer.observe({
-      type: "largest-contentful-paint",
-      buffered: true
-    });
-    return observer;
-  }
-  registerImage(rewrittenSrc, originalNgSrc, isPriority) {
-    if (!this.observer) return;
-    const newObservedImageState = {
-      priority: isPriority,
-      modified: false,
-      alreadyWarnedModified: false,
-      alreadyWarnedPriority: false
-    };
-    this.images.set(getUrl(rewrittenSrc, this.window).href, newObservedImageState);
-  }
-  unregisterImage(rewrittenSrc) {
-    if (!this.observer) return;
-    this.images.delete(getUrl(rewrittenSrc, this.window).href);
-  }
-  updateImage(originalSrc, newSrc) {
-    if (!this.observer) return;
-    const originalUrl = getUrl(originalSrc, this.window).href;
-    const img = this.images.get(originalUrl);
-    if (img) {
-      img.modified = true;
-      this.images.set(getUrl(newSrc, this.window).href, img);
-      this.images.delete(originalUrl);
-    }
-  }
-  ngOnDestroy() {
-    if (!this.observer) return;
-    this.observer.disconnect();
-    this.images.clear();
-  }
-  static ɵfac = function LCPImageObserver_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LCPImageObserver)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _LCPImageObserver,
-    factory: _LCPImageObserver.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LCPImageObserver, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function logMissingPriorityError(ngSrc) {
-  const directiveDetails = imgDirectiveDetails(ngSrc);
-  console.error(formatRuntimeError(2955, `${directiveDetails} this image is the Largest Contentful Paint (LCP) element but was not marked "priority". This image should be marked "priority" in order to prioritize its loading. To fix this, add the "priority" attribute.`));
-}
-function logModifiedWarning(ngSrc) {
-  const directiveDetails = imgDirectiveDetails(ngSrc);
-  console.warn(formatRuntimeError(2964, `${directiveDetails} this image is the Largest Contentful Paint (LCP) element and has had its "ngSrc" attribute modified. This can cause slower loading performance. It is recommended not to modify the "ngSrc" property on any image which could be the LCP element.`));
-}
-var INTERNAL_PRECONNECT_CHECK_BLOCKLIST = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "0.0.0.0"]);
-var PRECONNECT_CHECK_BLOCKLIST = new InjectionToken(ngDevMode ? "PRECONNECT_CHECK_BLOCKLIST" : "");
-var PreconnectLinkChecker = class _PreconnectLinkChecker {
-  document = inject(DOCUMENT);
-  isServer = isPlatformServer(inject(PLATFORM_ID));
-  /**
-   * Set of <link rel="preconnect"> tags found on this page.
-   * The `null` value indicates that there was no DOM query operation performed.
-   */
-  preconnectLinks = null;
-  /*
-   * Keep track of all already seen origin URLs to avoid repeating the same check.
-   */
-  alreadySeen = /* @__PURE__ */ new Set();
-  window = null;
-  blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);
-  constructor() {
-    assertDevMode("preconnect link checker");
-    const win = this.document.defaultView;
-    if (typeof win !== "undefined") {
-      this.window = win;
-    }
-    const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {
-      optional: true
-    });
-    if (blocklist) {
-      this.populateBlocklist(blocklist);
-    }
-  }
-  populateBlocklist(origins) {
-    if (Array.isArray(origins)) {
-      deepForEach(origins, (origin) => {
-        this.blocklist.add(extractHostname(origin));
-      });
-    } else {
-      this.blocklist.add(extractHostname(origins));
-    }
-  }
-  /**
-   * Checks that a preconnect resource hint exists in the head for the
-   * given src.
-   *
-   * @param rewrittenSrc src formatted with loader
-   * @param originalNgSrc ngSrc value
-   */
-  assertPreconnect(rewrittenSrc, originalNgSrc) {
-    if (this.isServer) return;
-    const imgUrl = getUrl(rewrittenSrc, this.window);
-    if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;
-    this.alreadySeen.add(imgUrl.origin);
-    this.preconnectLinks ??= this.queryPreconnectLinks();
-    if (!this.preconnectLinks.has(imgUrl.origin)) {
-      console.warn(formatRuntimeError(2956, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this image. Preconnecting to the origin(s) that serve priority images ensures that these images are delivered as soon as possible. To fix this, please add the following element into the <head> of the document:
-  <link rel="preconnect" href="${imgUrl.origin}">`));
-    }
-  }
-  queryPreconnectLinks() {
-    const preconnectUrls = /* @__PURE__ */ new Set();
-    const selector = "link[rel=preconnect]";
-    const links = Array.from(this.document.querySelectorAll(selector));
-    for (let link of links) {
-      const url = getUrl(link.href, this.window);
-      preconnectUrls.add(url.origin);
-    }
-    return preconnectUrls;
-  }
-  ngOnDestroy() {
-    this.preconnectLinks?.clear();
-    this.alreadySeen.clear();
-  }
-  static ɵfac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreconnectLinkChecker)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreconnectLinkChecker,
-    factory: _PreconnectLinkChecker.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreconnectLinkChecker, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function deepForEach(input, fn) {
-  for (let value of input) {
-    Array.isArray(value) ? deepForEach(value, fn) : fn(value);
-  }
-}
-var DEFAULT_PRELOADED_IMAGES_LIMIT = 5;
-var PRELOADED_IMAGES = new InjectionToken("NG_OPTIMIZED_PRELOADED_IMAGES", {
-  providedIn: "root",
-  factory: () => /* @__PURE__ */ new Set()
-});
-var PreloadLinkCreator = class _PreloadLinkCreator {
-  preloadedImages = inject(PRELOADED_IMAGES);
-  document = inject(DOCUMENT);
-  /**
-   * @description Add a preload `<link>` to the `<head>` of the `index.html` that is served from the
-   * server while using Angular Universal and SSR to kick off image loads for high priority images.
-   *
-   * The `sizes` (passed in from the user) and `srcset` (parsed and formatted from `ngSrcset`)
-   * properties used to set the corresponding attributes, `imagesizes` and `imagesrcset`
-   * respectively, on the preload `<link>` tag so that the correctly sized image is preloaded from
-   * the CDN.
-   *
-   * {@link https://web.dev/preload-responsive-images/#imagesrcset-and-imagesizes}
-   *
-   * @param renderer The `Renderer2` passed in from the directive
-   * @param src The original src of the image that is set on the `ngSrc` input.
-   * @param srcset The parsed and formatted srcset created from the `ngSrcset` input
-   * @param sizes The value of the `sizes` attribute passed in to the `<img>` tag
-   */
-  createPreloadLinkTag(renderer, src, srcset, sizes) {
-    if (ngDevMode) {
-      if (this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {
-        throw new RuntimeError(2961, ngDevMode && `The \`NgOptimizedImage\` directive has detected that more than ${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. This might negatively affect an overall performance of the page. To fix this, remove the "priority" attribute from images with less priority.`);
-      }
-    }
-    if (this.preloadedImages.has(src)) {
-      return;
-    }
-    this.preloadedImages.add(src);
-    const preload = renderer.createElement("link");
-    renderer.setAttribute(preload, "as", "image");
-    renderer.setAttribute(preload, "href", src);
-    renderer.setAttribute(preload, "rel", "preload");
-    renderer.setAttribute(preload, "fetchpriority", "high");
-    if (sizes) {
-      renderer.setAttribute(preload, "imageSizes", sizes);
-    }
-    if (srcset) {
-      renderer.setAttribute(preload, "imageSrcset", srcset);
-    }
-    renderer.appendChild(this.document.head, preload);
-  }
-  static ɵfac = function PreloadLinkCreator_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreloadLinkCreator)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreloadLinkCreator,
-    factory: _PreloadLinkCreator.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreloadLinkCreator, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;
-var VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\s*\d+w\s*(,|$)){1,})$/;
-var VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\s*\d+(\.\d+)?x\s*(,|$)){1,})$/;
-var ABSOLUTE_SRCSET_DENSITY_CAP = 3;
-var RECOMMENDED_SRCSET_DENSITY_CAP = 2;
-var DENSITY_SRCSET_MULTIPLIERS = [1, 2];
-var VIEWPORT_BREAKPOINT_CUTOFF = 640;
-var ASPECT_RATIO_TOLERANCE = 0.1;
-var OVERSIZED_IMAGE_TOLERANCE = 1e3;
-var FIXED_SRCSET_WIDTH_LIMIT = 1920;
-var FIXED_SRCSET_HEIGHT_LIMIT = 1080;
-var PLACEHOLDER_BLUR_AMOUNT = 15;
-var PLACEHOLDER_DIMENSION_LIMIT = 1e3;
-var DATA_URL_WARN_LIMIT = 4e3;
-var DATA_URL_ERROR_LIMIT = 1e4;
-var BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];
-var PRIORITY_COUNT_THRESHOLD = 10;
-var IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
-var NgOptimizedImage = class _NgOptimizedImage {
-  imageLoader = inject(IMAGE_LOADER);
-  config = processConfig(inject(IMAGE_CONFIG));
-  renderer = inject(Renderer2);
-  imgElement = inject(ElementRef).nativeElement;
-  injector = inject(Injector);
-  isServer = isPlatformServer(inject(PLATFORM_ID));
-  preloadLinkCreator = inject(PreloadLinkCreator);
-  // a LCP image observer - should be injected only in the dev mode
-  lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;
-  /**
-   * Calculate the rewritten `src` once and store it.
-   * This is needed to avoid repetitive calculations and make sure the directive cleanup in the
-   * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other
-   * instance that might be already destroyed).
-   */
-  _renderedSrc = null;
-  /**
-   * Name of the source image.
-   * Image name will be processed by the image loader and the final URL will be applied as the `src`
-   * property of the image.
-   */
-  ngSrc;
-  /**
-   * A comma separated list of width or density descriptors.
-   * The image name will be taken from `ngSrc` and combined with the list of width or density
-   * descriptors to generate the final `srcset` property of the image.
-   *
-   * Example:
-   * ```
-   * <img ngSrc="hello.jpg" ngSrcset="100w, 200w" />  =>
-   * <img src="path/hello.jpg" srcset="path/hello.jpg?w=100 100w, path/hello.jpg?w=200 200w" />
-   * ```
-   */
-  ngSrcset;
-  /**
-   * The base `sizes` attribute passed through to the `<img>` element.
-   * Providing sizes causes the image to create an automatic responsive srcset.
-   */
-  sizes;
-  /**
-   * For responsive images: the intrinsic width of the image in pixels.
-   * For fixed size images: the desired rendered width of the image in pixels.
-   */
-  width;
-  /**
-   * For responsive images: the intrinsic height of the image in pixels.
-   * For fixed size images: the desired rendered height of the image in pixels.
-   */
-  height;
-  /**
-   * The desired loading behavior (lazy, eager, or auto). Defaults to `lazy`,
-   * which is recommended for most images.
-   *
-   * Warning: Setting images as loading="eager" or loading="auto" marks them
-   * as non-priority images and can hurt loading performance. For images which
-   * may be the LCP element, use the `priority` attribute instead of `loading`.
-   */
-  loading;
-  /**
-   * Indicates whether this image should have a high priority.
-   */
-  priority = false;
-  /**
-   * Data to pass through to custom loaders.
-   */
-  loaderParams;
-  /**
-   * Disables automatic srcset generation for this image.
-   */
-  disableOptimizedSrcset = false;
-  /**
-   * Sets the image to "fill mode", which eliminates the height/width requirement and adds
-   * styles such that the image fills its containing element.
-   */
-  fill = false;
-  /**
-   * A URL or data URL for an image to be used as a placeholder while this image loads.
-   */
-  placeholder;
-  /**
-   * Configuration object for placeholder settings. Options:
-   *   * blur: Setting this to false disables the automatic CSS blur.
-   */
-  placeholderConfig;
-  /**
-   * Value of the `src` attribute if set on the host `<img>` element.
-   * This input is exclusively read to assert that `src` is not set in conflict
-   * with `ngSrc` and that images don't start to load until a lazy loading strategy is set.
-   * @internal
-   */
-  src;
-  /**
-   * Value of the `srcset` attribute if set on the host `<img>` element.
-   * This input is exclusively read to assert that `srcset` is not set in conflict
-   * with `ngSrcset` and that images don't start to load until a lazy loading strategy is set.
-   * @internal
-   */
-  srcset;
-  /** @nodoc */
-  ngOnInit() {
-    performanceMarkFeature("NgOptimizedImage");
-    if (ngDevMode) {
-      const ngZone = this.injector.get(NgZone);
-      assertNonEmptyInput(this, "ngSrc", this.ngSrc);
-      assertValidNgSrcset(this, this.ngSrcset);
-      assertNoConflictingSrc(this);
-      if (this.ngSrcset) {
-        assertNoConflictingSrcset(this);
-      }
-      assertNotBase64Image(this);
-      assertNotBlobUrl(this);
-      if (this.fill) {
-        assertEmptyWidthAndHeight(this);
-        ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));
-      } else {
-        assertNonEmptyWidthAndHeight(this);
-        if (this.height !== void 0) {
-          assertGreaterThanZero(this, this.height, "height");
-        }
-        if (this.width !== void 0) {
-          assertGreaterThanZero(this, this.width, "width");
-        }
-        ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));
-      }
-      assertValidLoadingInput(this);
-      if (!this.ngSrcset) {
-        assertNoComplexSizes(this);
-      }
-      assertValidPlaceholder(this, this.imageLoader);
-      assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);
-      assertNoNgSrcsetWithoutLoader(this, this.imageLoader);
-      assertNoLoaderParamsWithoutLoader(this, this.imageLoader);
-      if (this.lcpObserver !== null) {
-        const ngZone2 = this.injector.get(NgZone);
-        ngZone2.runOutsideAngular(() => {
-          this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);
-        });
-      }
-      if (this.priority) {
-        const checker = this.injector.get(PreconnectLinkChecker);
-        checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);
-        if (!this.isServer) {
-          const applicationRef = this.injector.get(ApplicationRef);
-          assetPriorityCountBelowThreshold(applicationRef);
-        }
-      }
-    }
-    if (this.placeholder) {
-      this.removePlaceholderOnLoad(this.imgElement);
-    }
-    this.setHostAttributes();
-  }
-  setHostAttributes() {
-    if (this.fill) {
-      this.sizes ||= "100vw";
-    } else {
-      this.setHostAttribute("width", this.width.toString());
-      this.setHostAttribute("height", this.height.toString());
-    }
-    this.setHostAttribute("loading", this.getLoadingBehavior());
-    this.setHostAttribute("fetchpriority", this.getFetchPriority());
-    this.setHostAttribute("ng-img", "true");
-    const rewrittenSrcset = this.updateSrcAndSrcset();
-    if (this.sizes) {
-      if (this.getLoadingBehavior() === "lazy") {
-        this.setHostAttribute("sizes", "auto, " + this.sizes);
-      } else {
-        this.setHostAttribute("sizes", this.sizes);
-      }
-    } else {
-      if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === "lazy") {
-        this.setHostAttribute("sizes", "auto, 100vw");
-      }
-    }
-    if (this.isServer && this.priority) {
-      this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);
-    }
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (ngDevMode) {
-      assertNoPostInitInputChange(this, changes, ["ngSrcset", "width", "height", "priority", "fill", "loading", "sizes", "loaderParams", "disableOptimizedSrcset"]);
-    }
-    if (changes["ngSrc"] && !changes["ngSrc"].isFirstChange()) {
-      const oldSrc = this._renderedSrc;
-      this.updateSrcAndSrcset(true);
-      const newSrc = this._renderedSrc;
-      if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {
-        const ngZone = this.injector.get(NgZone);
-        ngZone.runOutsideAngular(() => {
-          this.lcpObserver?.updateImage(oldSrc, newSrc);
-        });
-      }
-    }
-    if (ngDevMode && changes["placeholder"]?.currentValue && !this.isServer) {
-      assertPlaceholderDimensions(this, this.imgElement);
-    }
-  }
-  callImageLoader(configWithoutCustomParams) {
-    let augmentedConfig = configWithoutCustomParams;
-    if (this.loaderParams) {
-      augmentedConfig.loaderParams = this.loaderParams;
-    }
-    return this.imageLoader(augmentedConfig);
-  }
-  getLoadingBehavior() {
-    if (!this.priority && this.loading !== void 0) {
-      return this.loading;
-    }
-    return this.priority ? "eager" : "lazy";
-  }
-  getFetchPriority() {
-    return this.priority ? "high" : "auto";
-  }
-  getRewrittenSrc() {
-    if (!this._renderedSrc) {
-      const imgConfig = {
-        src: this.ngSrc
-      };
-      this._renderedSrc = this.callImageLoader(imgConfig);
-    }
-    return this._renderedSrc;
-  }
-  getRewrittenSrcset() {
-    const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);
-    const finalSrcs = this.ngSrcset.split(",").filter((src) => src !== "").map((srcStr) => {
-      srcStr = srcStr.trim();
-      const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;
-      return `${this.callImageLoader({
-        src: this.ngSrc,
-        width
-      })} ${srcStr}`;
-    });
-    return finalSrcs.join(", ");
-  }
-  getAutomaticSrcset() {
-    if (this.sizes) {
-      return this.getResponsiveSrcset();
-    } else {
-      return this.getFixedSrcset();
-    }
-  }
-  getResponsiveSrcset() {
-    const {
-      breakpoints
-    } = this.config;
-    let filteredBreakpoints = breakpoints;
-    if (this.sizes?.trim() === "100vw") {
-      filteredBreakpoints = breakpoints.filter((bp) => bp >= VIEWPORT_BREAKPOINT_CUTOFF);
-    }
-    const finalSrcs = filteredBreakpoints.map((bp) => `${this.callImageLoader({
-      src: this.ngSrc,
-      width: bp
-    })} ${bp}w`);
-    return finalSrcs.join(", ");
-  }
-  updateSrcAndSrcset(forceSrcRecalc = false) {
-    if (forceSrcRecalc) {
-      this._renderedSrc = null;
-    }
-    const rewrittenSrc = this.getRewrittenSrc();
-    this.setHostAttribute("src", rewrittenSrc);
-    let rewrittenSrcset = void 0;
-    if (this.ngSrcset) {
-      rewrittenSrcset = this.getRewrittenSrcset();
-    } else if (this.shouldGenerateAutomaticSrcset()) {
-      rewrittenSrcset = this.getAutomaticSrcset();
-    }
-    if (rewrittenSrcset) {
-      this.setHostAttribute("srcset", rewrittenSrcset);
-    }
-    return rewrittenSrcset;
-  }
-  getFixedSrcset() {
-    const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map((multiplier) => `${this.callImageLoader({
-      src: this.ngSrc,
-      width: this.width * multiplier
-    })} ${multiplier}x`);
-    return finalSrcs.join(", ");
-  }
-  shouldGenerateAutomaticSrcset() {
-    let oversizedImage = false;
-    if (!this.sizes) {
-      oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;
-    }
-    return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;
-  }
-  /**
-   * Returns an image url formatted for use with the CSS background-image property. Expects one of:
-   * * A base64 encoded image, which is wrapped and passed through.
-   * * A boolean. If true, calls the image loader to generate a small placeholder url.
-   */
-  generatePlaceholder(placeholderInput) {
-    const {
-      placeholderResolution
-    } = this.config;
-    if (placeholderInput === true) {
-      return `url(${this.callImageLoader({
-        src: this.ngSrc,
-        width: placeholderResolution,
-        isPlaceholder: true
-      })})`;
-    } else if (typeof placeholderInput === "string") {
-      return `url(${placeholderInput})`;
-    }
-    return null;
-  }
-  /**
-   * Determines if blur should be applied, based on an optional boolean
-   * property `blur` within the optional configuration object `placeholderConfig`.
-   */
-  shouldBlurPlaceholder(placeholderConfig) {
-    if (!placeholderConfig || !placeholderConfig.hasOwnProperty("blur")) {
-      return true;
-    }
-    return Boolean(placeholderConfig.blur);
-  }
-  removePlaceholderOnLoad(img) {
-    const callback = () => {
-      const changeDetectorRef = this.injector.get(ChangeDetectorRef);
-      removeLoadListenerFn();
-      removeErrorListenerFn();
-      this.placeholder = false;
-      changeDetectorRef.markForCheck();
-    };
-    const removeLoadListenerFn = this.renderer.listen(img, "load", callback);
-    const removeErrorListenerFn = this.renderer.listen(img, "error", callback);
-    callOnLoadIfImageIsLoaded(img, callback);
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (ngDevMode) {
-      if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {
-        this.lcpObserver.unregisterImage(this._renderedSrc);
-      }
-    }
-  }
-  setHostAttribute(name, value) {
-    this.renderer.setAttribute(this.imgElement, name, value);
-  }
-  static ɵfac = function NgOptimizedImage_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgOptimizedImage)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgOptimizedImage,
-    selectors: [["img", "ngSrc", ""]],
-    hostVars: 18,
-    hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {
-      if (rf & 2) {
-        ɵɵstyleProp("position", ctx.fill ? "absolute" : null)("width", ctx.fill ? "100%" : null)("height", ctx.fill ? "100%" : null)("inset", ctx.fill ? "0" : null)("background-size", ctx.placeholder ? "cover" : null)("background-position", ctx.placeholder ? "50% 50%" : null)("background-repeat", ctx.placeholder ? "no-repeat" : null)("background-image", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)("filter", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? "blur(15px)" : null);
-      }
-    },
-    inputs: {
-      ngSrc: [2, "ngSrc", "ngSrc", unwrapSafeUrl],
-      ngSrcset: "ngSrcset",
-      sizes: "sizes",
-      width: [2, "width", "width", numberAttribute],
-      height: [2, "height", "height", numberAttribute],
-      loading: "loading",
-      priority: [2, "priority", "priority", booleanAttribute],
-      loaderParams: "loaderParams",
-      disableOptimizedSrcset: [2, "disableOptimizedSrcset", "disableOptimizedSrcset", booleanAttribute],
-      fill: [2, "fill", "fill", booleanAttribute],
-      placeholder: [2, "placeholder", "placeholder", booleanOrUrlAttribute],
-      placeholderConfig: "placeholderConfig",
-      src: "src",
-      srcset: "srcset"
-    },
-    features: [ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgOptimizedImage, [{
-    type: Directive,
-    args: [{
-      selector: "img[ngSrc]",
-      host: {
-        "[style.position]": 'fill ? "absolute" : null',
-        "[style.width]": 'fill ? "100%" : null',
-        "[style.height]": 'fill ? "100%" : null',
-        "[style.inset]": 'fill ? "0" : null',
-        "[style.background-size]": 'placeholder ? "cover" : null',
-        "[style.background-position]": 'placeholder ? "50% 50%" : null',
-        "[style.background-repeat]": 'placeholder ? "no-repeat" : null',
-        "[style.background-image]": "placeholder ? generatePlaceholder(placeholder) : null",
-        "[style.filter]": `placeholder && shouldBlurPlaceholder(placeholderConfig) ? "blur(${PLACEHOLDER_BLUR_AMOUNT}px)" : null`
-      }
-    }]
-  }], null, {
-    ngSrc: [{
-      type: Input,
-      args: [{
-        required: true,
-        transform: unwrapSafeUrl
-      }]
-    }],
-    ngSrcset: [{
-      type: Input
-    }],
-    sizes: [{
-      type: Input
-    }],
-    width: [{
-      type: Input,
-      args: [{
-        transform: numberAttribute
-      }]
-    }],
-    height: [{
-      type: Input,
-      args: [{
-        transform: numberAttribute
-      }]
-    }],
-    loading: [{
-      type: Input
-    }],
-    priority: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    loaderParams: [{
-      type: Input
-    }],
-    disableOptimizedSrcset: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    fill: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    placeholder: [{
-      type: Input,
-      args: [{
-        transform: booleanOrUrlAttribute
-      }]
-    }],
-    placeholderConfig: [{
-      type: Input
-    }],
-    src: [{
-      type: Input
-    }],
-    srcset: [{
-      type: Input
-    }]
-  });
-})();
-function processConfig(config) {
-  let sortedBreakpoints = {};
-  if (config.breakpoints) {
-    sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);
-  }
-  return Object.assign({}, IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);
-}
-function assertNoConflictingSrc(dir) {
-  if (dir.src) {
-    throw new RuntimeError(2950, `${imgDirectiveDetails(dir.ngSrc)} both \`src\` and \`ngSrc\` have been set. Supplying both of these attributes breaks lazy loading. The NgOptimizedImage directive sets \`src\` itself based on the value of \`ngSrc\`. To fix this, please remove the \`src\` attribute.`);
-  }
-}
-function assertNoConflictingSrcset(dir) {
-  if (dir.srcset) {
-    throw new RuntimeError(2951, `${imgDirectiveDetails(dir.ngSrc)} both \`srcset\` and \`ngSrcset\` have been set. Supplying both of these attributes breaks lazy loading. The NgOptimizedImage directive sets \`srcset\` itself based on the value of \`ngSrcset\`. To fix this, please remove the \`srcset\` attribute.`);
-  }
-}
-function assertNotBase64Image(dir) {
-  let ngSrc = dir.ngSrc.trim();
-  if (ngSrc.startsWith("data:")) {
-    if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {
-      ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + "...";
-    }
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`ngSrc\` is a Base64-encoded string (${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. To fix this, disable the NgOptimizedImage directive for this element by removing \`ngSrc\` and using a standard \`src\` attribute instead.`);
-  }
-}
-function assertNoComplexSizes(dir) {
-  let sizes = dir.sizes;
-  if (sizes?.match(/((\)|,)\s|^)\d+px/)) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`sizes\` was set to a string including pixel values. For automatic \`srcset\` generation, \`sizes\` must only include responsive values, such as \`sizes="50vw"\` or \`sizes="(min-width: 768px) 50vw, 100vw"\`. To fix this, modify the \`sizes\` attribute, or provide your own \`ngSrcset\` value directly.`);
-  }
-}
-function assertValidPlaceholder(dir, imageLoader) {
-  assertNoPlaceholderConfigWithoutPlaceholder(dir);
-  assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);
-  assertNoOversizedDataUrl(dir);
-}
-function assertNoPlaceholderConfigWithoutPlaceholder(dir) {
-  if (dir.placeholderConfig && !dir.placeholder) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`placeholderConfig\` options were provided for an image that does not use the \`placeholder\` attribute, and will have no effect.`);
-  }
-}
-function assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {
-  if (dir.placeholder === true && imageLoader === noopImageLoader) {
-    throw new RuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to true but no image loader is configured (i.e. the default one is being used), which would result in the same image being used for the primary image and its placeholder. To fix this, provide a loader or remove the \`placeholder\` attribute from the image.`);
-  }
-}
-function assertNoOversizedDataUrl(dir) {
-  if (dir.placeholder && typeof dir.placeholder === "string" && dir.placeholder.startsWith("data:")) {
-    if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {
-      throw new RuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders directly increase the bundle size of Angular and hurt page load performance. To fix this, generate a smaller data URL placeholder.`);
-    }
-    if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {
-      console.warn(formatRuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders directly increase the bundle size of Angular and hurt page load performance. For better loading performance, generate a smaller data URL placeholder.`));
-    }
-  }
-}
-function assertNotBlobUrl(dir) {
-  const ngSrc = dir.ngSrc.trim();
-  if (ngSrc.startsWith("blob:")) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrc\` was set to a blob URL (${ngSrc}). Blob URLs are not supported by the NgOptimizedImage directive. To fix this, disable the NgOptimizedImage directive for this element by removing \`ngSrc\` and using a regular \`src\` attribute instead.`);
-  }
-}
-function assertNonEmptyInput(dir, name, value) {
-  const isString = typeof value === "string";
-  const isEmptyString = isString && value.trim() === "";
-  if (!isString || isEmptyString) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`${name}\` has an invalid value (\`${value}\`). To fix this, change the value to a non-empty string.`);
-  }
-}
-function assertValidNgSrcset(dir, value) {
-  if (value == null) return;
-  assertNonEmptyInput(dir, "ngSrcset", value);
-  const stringVal = value;
-  const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);
-  const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);
-  if (isValidDensityDescriptor) {
-    assertUnderDensityCap(dir, stringVal);
-  }
-  const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;
-  if (!isValidSrcset) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrcset\` has an invalid value (\`${value}\`). To fix this, supply \`ngSrcset\` using a comma-separated list of one or more width descriptors (e.g. "100w, 200w") or density descriptors (e.g. "1x, 2x").`);
-  }
-}
-function assertUnderDensityCap(dir, value) {
-  const underDensityCap = value.split(",").every((num) => num === "" || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);
-  if (!underDensityCap) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` contains an unsupported image density:\`${value}\`. NgOptimizedImage generally recommends a max image density of ${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for most use cases. Images that will be pinch-zoomed are typically the primary use case for ${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);
-  }
-}
-function postInitInputChangeError(dir, inputName) {
-  let reason;
-  if (inputName === "width" || inputName === "height") {
-    reason = `Changing \`${inputName}\` may result in different attribute value applied to the underlying image element and cause layout shifts on a page.`;
-  } else {
-    reason = `Changing the \`${inputName}\` would have no effect on the underlying image element, because the resource loading has already occurred.`;
-  }
-  return new RuntimeError(2953, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` was updated after initialization. The NgOptimizedImage directive will not react to this input change. ${reason} To fix this, either switch \`${inputName}\` to a static value or wrap the image element in an @if that is gated on the necessary value.`);
-}
-function assertNoPostInitInputChange(dir, changes, inputs) {
-  inputs.forEach((input) => {
-    const isUpdated = changes.hasOwnProperty(input);
-    if (isUpdated && !changes[input].isFirstChange()) {
-      if (input === "ngSrc") {
-        dir = {
-          ngSrc: changes[input].previousValue
-        };
-      }
-      throw postInitInputChangeError(dir, input);
-    }
-  });
-}
-function assertGreaterThanZero(dir, inputValue, inputName) {
-  const validNumber = typeof inputValue === "number" && inputValue > 0;
-  const validString = typeof inputValue === "string" && /^\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;
-  if (!validNumber && !validString) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` has an invalid value. To fix this, provide \`${inputName}\` as a number greater than 0.`);
-  }
-}
-function assertNoImageDistortion(dir, img, renderer) {
-  const callback = () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-    const computedStyle = window.getComputedStyle(img);
-    let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-    let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-    const boxSizing = computedStyle.getPropertyValue("box-sizing");
-    if (boxSizing === "border-box") {
-      const paddingTop = computedStyle.getPropertyValue("padding-top");
-      const paddingRight = computedStyle.getPropertyValue("padding-right");
-      const paddingBottom = computedStyle.getPropertyValue("padding-bottom");
-      const paddingLeft = computedStyle.getPropertyValue("padding-left");
-      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
-      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
-    }
-    const renderedAspectRatio = renderedWidth / renderedHeight;
-    const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;
-    const intrinsicWidth = img.naturalWidth;
-    const intrinsicHeight = img.naturalHeight;
-    const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;
-    const suppliedWidth = dir.width;
-    const suppliedHeight = dir.height;
-    const suppliedAspectRatio = suppliedWidth / suppliedHeight;
-    const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;
-    const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;
-    if (inaccurateDimensions) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match the aspect ratio indicated by the width and height attributes. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h (aspect-ratio: ${round(intrinsicAspectRatio)}). 
-Supplied width and height attributes: ${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). 
-To fix this, update the width and height attributes.`));
-    } else if (stylingDistortion) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image does not match the image's intrinsic aspect ratio. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h (aspect-ratio: ${round(intrinsicAspectRatio)}). 
-Rendered image size: ${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ${round(renderedAspectRatio)}). 
-This issue can occur if "width" and "height" attributes are added to an image without updating the corresponding image styling. To fix this, adjust image styling. In most cases, adding "height: auto" or "width: auto" to the image styling will fix this issue.`));
-    } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {
-      const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;
-      const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;
-      const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
-      const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
-      if (oversizedWidth || oversizedHeight) {
-        console.warn(formatRuntimeError(2960, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly larger than necessary. 
-Rendered image size: ${renderedWidth}w x ${renderedHeight}h. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. 
-Recommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. 
-Note: Recommended intrinsic image size is calculated assuming a maximum DPR of ${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image or consider using the "ngSrcset" and "sizes" attributes.`));
-      }
-    }
-  };
-  const removeLoadListenerFn = renderer.listen(img, "load", callback);
-  const removeErrorListenerFn = renderer.listen(img, "error", () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-  });
-  callOnLoadIfImageIsLoaded(img, callback);
-}
-function assertNonEmptyWidthAndHeight(dir) {
-  let missingAttributes = [];
-  if (dir.width === void 0) missingAttributes.push("width");
-  if (dir.height === void 0) missingAttributes.push("height");
-  if (missingAttributes.length > 0) {
-    throw new RuntimeError(2954, `${imgDirectiveDetails(dir.ngSrc)} these required attributes are missing: ${missingAttributes.map((attr) => `"${attr}"`).join(", ")}. Including "width" and "height" attributes will prevent image-related layout shifts. To fix this, include "width" and "height" attributes on the image tag or turn on "fill" mode with the \`fill\` attribute.`);
-  }
-}
-function assertEmptyWidthAndHeight(dir) {
-  if (dir.width || dir.height) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the attributes \`height\` and/or \`width\` are present along with the \`fill\` attribute. Because \`fill\` mode causes an image to fill its containing element, the size attributes have no effect and should be removed.`);
-  }
-}
-function assertNonZeroRenderedHeight(dir, img, renderer) {
-  const callback = () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-    const renderedHeight = img.clientHeight;
-    if (dir.fill && renderedHeight === 0) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. This is likely because the containing element does not have the CSS 'position' property set to one of the following: "relative", "fixed", or "absolute". To fix this problem, make sure the container element has the CSS 'position' property defined and the height of the element is not zero.`));
-    }
-  };
-  const removeLoadListenerFn = renderer.listen(img, "load", callback);
-  const removeErrorListenerFn = renderer.listen(img, "error", () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-  });
-  callOnLoadIfImageIsLoaded(img, callback);
-}
-function assertValidLoadingInput(dir) {
-  if (dir.loading && dir.priority) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute was used on an image that was marked "priority". Setting \`loading\` on priority images is not allowed because these images will always be eagerly loaded. To fix this, remove the “loading” attribute from the priority image.`);
-  }
-  const validInputs = ["auto", "eager", "lazy"];
-  if (typeof dir.loading === "string" && !validInputs.includes(dir.loading)) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute has an invalid value (\`${dir.loading}\`). To fix this, provide a valid value ("lazy", "eager", or "auto").`);
-  }
-}
-function assertNotMissingBuiltInLoader(ngSrc, imageLoader) {
-  if (imageLoader === noopImageLoader) {
-    let builtInLoaderName = "";
-    for (const loader of BUILT_IN_LOADERS) {
-      if (loader.testUrl(ngSrc)) {
-        builtInLoaderName = loader.name;
-        break;
-      }
-    }
-    if (builtInLoaderName) {
-      console.warn(formatRuntimeError(2962, `NgOptimizedImage: It looks like your images may be hosted on the ${builtInLoaderName} CDN, but your app is not using Angular's built-in loader for that CDN. We recommend switching to use the built-in by calling \`provide${builtInLoaderName}Loader()\` in your \`providers\` and passing it your instance's base URL. If you don't want to use the built-in loader, define a custom loader function using IMAGE_LOADER to silence this warning.`));
-    }
-  }
-}
-function assertNoNgSrcsetWithoutLoader(dir, imageLoader) {
-  if (dir.ngSrcset && imageLoader === noopImageLoader) {
-    console.warn(formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` attribute is present but no image loader is configured (i.e. the default one is being used), which would result in the same image being used for all configured sizes. To fix this, provide a loader or remove the \`ngSrcset\` attribute from the image.`));
-  }
-}
-function assertNoLoaderParamsWithoutLoader(dir, imageLoader) {
-  if (dir.loaderParams && imageLoader === noopImageLoader) {
-    console.warn(formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`loaderParams\` attribute is present but no image loader is configured (i.e. the default one is being used), which means that the loaderParams data will not be consumed and will not affect the URL. To fix this, provide a custom loader or remove the \`loaderParams\` attribute from the image.`));
-  }
-}
-function assetPriorityCountBelowThreshold(appRef) {
-  return __async(this, null, function* () {
-    if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {
-      IMGS_WITH_PRIORITY_ATTR_COUNT++;
-      yield appRef.whenStable();
-      if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {
-        console.warn(formatRuntimeError(2966, `NgOptimizedImage: The "priority" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). Marking too many images as "high" priority can hurt your application's LCP (https://web.dev/lcp). "Priority" should only be set on the image expected to be the page's LCP element.`));
-      }
-    } else {
-      IMGS_WITH_PRIORITY_ATTR_COUNT++;
-    }
-  });
-}
-function assertPlaceholderDimensions(dir, imgElement) {
-  const computedStyle = window.getComputedStyle(imgElement);
-  let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-  let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-  if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {
-    console.warn(formatRuntimeError(2967, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. To fix this, use a smaller image as a placeholder.`));
-  }
-}
-function callOnLoadIfImageIsLoaded(img, callback) {
-  if (img.complete && img.naturalWidth) {
-    callback();
-  }
-}
-function round(input) {
-  return Number.isInteger(input) ? input : input.toFixed(2);
-}
-function unwrapSafeUrl(value) {
-  if (typeof value === "string") {
-    return value;
-  }
-  return unwrapSafeValue(value);
-}
-function booleanOrUrlAttribute(value) {
-  if (typeof value === "string" && value !== "true" && value !== "false" && value !== "") {
-    return value;
-  }
-  return booleanAttribute(value);
-}
-
-// node_modules/@angular/common/fesm2022/http.mjs
-var HttpHandler = class {
-};
-var HttpBackend = class {
-};
-var HttpHeaders = class _HttpHeaders {
-  /**
-   * Internal map of lowercase header names to values.
-   */
-  // TODO(issue/24571): remove '!'.
-  headers;
-  /**
-   * Internal map of lowercased header names to the normalized
-   * form of the name (the form seen first).
-   */
-  normalizedNames = /* @__PURE__ */ new Map();
-  /**
-   * Complete the lazy initialization of this object (needed before reading).
-   */
-  lazyInit;
-  /**
-   * Queued updates to be materialized the next initialization.
-   */
-  lazyUpdate = null;
-  /**  Constructs a new HTTP header object with the given values.*/
-  constructor(headers) {
-    if (!headers) {
-      this.headers = /* @__PURE__ */ new Map();
-    } else if (typeof headers === "string") {
-      this.lazyInit = () => {
-        this.headers = /* @__PURE__ */ new Map();
-        headers.split("\n").forEach((line) => {
-          const index = line.indexOf(":");
-          if (index > 0) {
-            const name = line.slice(0, index);
-            const value = line.slice(index + 1).trim();
-            this.addHeaderEntry(name, value);
-          }
-        });
-      };
-    } else if (typeof Headers !== "undefined" && headers instanceof Headers) {
-      this.headers = /* @__PURE__ */ new Map();
-      headers.forEach((value, name) => {
-        this.addHeaderEntry(name, value);
-      });
-    } else {
-      this.lazyInit = () => {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          assertValidHeaders(headers);
-        }
-        this.headers = /* @__PURE__ */ new Map();
-        Object.entries(headers).forEach(([name, values]) => {
-          this.setHeaderEntries(name, values);
-        });
-      };
-    }
-  }
-  /**
-   * Checks for existence of a given header.
-   *
-   * @param name The header name to check for existence.
-   *
-   * @returns True if the header exists, false otherwise.
-   */
-  has(name) {
-    this.init();
-    return this.headers.has(name.toLowerCase());
-  }
-  /**
-   * Retrieves the first value of a given header.
-   *
-   * @param name The header name.
-   *
-   * @returns The value string if the header exists, null otherwise
-   */
-  get(name) {
-    this.init();
-    const values = this.headers.get(name.toLowerCase());
-    return values && values.length > 0 ? values[0] : null;
-  }
-  /**
-   * Retrieves the names of the headers.
-   *
-   * @returns A list of header names.
-   */
-  keys() {
-    this.init();
-    return Array.from(this.normalizedNames.values());
-  }
-  /**
-   * Retrieves a list of values for a given header.
-   *
-   * @param name The header name from which to retrieve values.
-   *
-   * @returns A string of values if the header exists, null otherwise.
-   */
-  getAll(name) {
-    this.init();
-    return this.headers.get(name.toLowerCase()) || null;
-  }
-  /**
-   * Appends a new value to the existing set of values for a header
-   * and returns them in a clone of the original instance.
-   *
-   * @param name The header name for which to append the values.
-   * @param value The value to append.
-   *
-   * @returns A clone of the HTTP headers object with the value appended to the given header.
-   */
-  append(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "a"
-    });
-  }
-  /**
-   * Sets or modifies a value for a given header in a clone of the original instance.
-   * If the header already exists, its value is replaced with the given value
-   * in the returned object.
-   *
-   * @param name The header name.
-   * @param value The value or values to set or override for the given header.
-   *
-   * @returns A clone of the HTTP headers object with the newly set header value.
-   */
-  set(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "s"
-    });
-  }
-  /**
-   * Deletes values for a given header in a clone of the original instance.
-   *
-   * @param name The header name.
-   * @param value The value or values to delete for the given header.
-   *
-   * @returns A clone of the HTTP headers object with the given value deleted.
-   */
-  delete(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "d"
-    });
-  }
-  maybeSetNormalizedName(name, lcName) {
-    if (!this.normalizedNames.has(lcName)) {
-      this.normalizedNames.set(lcName, name);
-    }
-  }
-  init() {
-    if (!!this.lazyInit) {
-      if (this.lazyInit instanceof _HttpHeaders) {
-        this.copyFrom(this.lazyInit);
-      } else {
-        this.lazyInit();
-      }
-      this.lazyInit = null;
-      if (!!this.lazyUpdate) {
-        this.lazyUpdate.forEach((update) => this.applyUpdate(update));
-        this.lazyUpdate = null;
-      }
-    }
-  }
-  copyFrom(other) {
-    other.init();
-    Array.from(other.headers.keys()).forEach((key) => {
-      this.headers.set(key, other.headers.get(key));
-      this.normalizedNames.set(key, other.normalizedNames.get(key));
-    });
-  }
-  clone(update) {
-    const clone = new _HttpHeaders();
-    clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof _HttpHeaders ? this.lazyInit : this;
-    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);
-    return clone;
-  }
-  applyUpdate(update) {
-    const key = update.name.toLowerCase();
-    switch (update.op) {
-      case "a":
-      case "s":
-        let value = update.value;
-        if (typeof value === "string") {
-          value = [value];
-        }
-        if (value.length === 0) {
-          return;
-        }
-        this.maybeSetNormalizedName(update.name, key);
-        const base = (update.op === "a" ? this.headers.get(key) : void 0) || [];
-        base.push(...value);
-        this.headers.set(key, base);
-        break;
-      case "d":
-        const toDelete = update.value;
-        if (!toDelete) {
-          this.headers.delete(key);
-          this.normalizedNames.delete(key);
-        } else {
-          let existing = this.headers.get(key);
-          if (!existing) {
-            return;
-          }
-          existing = existing.filter((value2) => toDelete.indexOf(value2) === -1);
-          if (existing.length === 0) {
-            this.headers.delete(key);
-            this.normalizedNames.delete(key);
-          } else {
-            this.headers.set(key, existing);
-          }
-        }
-        break;
-    }
-  }
-  addHeaderEntry(name, value) {
-    const key = name.toLowerCase();
-    this.maybeSetNormalizedName(name, key);
-    if (this.headers.has(key)) {
-      this.headers.get(key).push(value);
-    } else {
-      this.headers.set(key, [value]);
-    }
-  }
-  setHeaderEntries(name, values) {
-    const headerValues = (Array.isArray(values) ? values : [values]).map((value) => value.toString());
-    const key = name.toLowerCase();
-    this.headers.set(key, headerValues);
-    this.maybeSetNormalizedName(name, key);
-  }
-  /**
-   * @internal
-   */
-  forEach(fn) {
-    this.init();
-    Array.from(this.normalizedNames.keys()).forEach((key) => fn(this.normalizedNames.get(key), this.headers.get(key)));
-  }
-};
-function assertValidHeaders(headers) {
-  for (const [key, value] of Object.entries(headers)) {
-    if (!(typeof value === "string" || typeof value === "number") && !Array.isArray(value)) {
-      throw new Error(`Unexpected value of the \`${key}\` header provided. Expecting either a string, a number or an array, but got: \`${value}\`.`);
-    }
-  }
-}
-var HttpUrlEncodingCodec = class {
-  /**
-   * Encodes a key name for a URL parameter or query-string.
-   * @param key The key name.
-   * @returns The encoded key name.
-   */
-  encodeKey(key) {
-    return standardEncoding(key);
-  }
-  /**
-   * Encodes the value of a URL parameter or query-string.
-   * @param value The value.
-   * @returns The encoded value.
-   */
-  encodeValue(value) {
-    return standardEncoding(value);
-  }
-  /**
-   * Decodes an encoded URL parameter or query-string key.
-   * @param key The encoded key name.
-   * @returns The decoded key name.
-   */
-  decodeKey(key) {
-    return decodeURIComponent(key);
-  }
-  /**
-   * Decodes an encoded URL parameter or query-string value.
-   * @param value The encoded value.
-   * @returns The decoded value.
-   */
-  decodeValue(value) {
-    return decodeURIComponent(value);
-  }
-};
-function paramParser(rawParams, codec) {
-  const map2 = /* @__PURE__ */ new Map();
-  if (rawParams.length > 0) {
-    const params = rawParams.replace(/^\?/, "").split("&");
-    params.forEach((param) => {
-      const eqIdx = param.indexOf("=");
-      const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ""] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];
-      const list = map2.get(key) || [];
-      list.push(val);
-      map2.set(key, list);
-    });
-  }
-  return map2;
-}
-var STANDARD_ENCODING_REGEX = /%(\d[a-f0-9])/gi;
-var STANDARD_ENCODING_REPLACEMENTS = {
-  "40": "@",
-  "3A": ":",
-  "24": "$",
-  "2C": ",",
-  "3B": ";",
-  "3D": "=",
-  "3F": "?",
-  "2F": "/"
-};
-function standardEncoding(v) {
-  return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);
-}
-function valueToString(value) {
-  return `${value}`;
-}
-var HttpParams = class _HttpParams {
-  map;
-  encoder;
-  updates = null;
-  cloneFrom = null;
-  constructor(options = {}) {
-    this.encoder = options.encoder || new HttpUrlEncodingCodec();
-    if (!!options.fromString) {
-      if (!!options.fromObject) {
-        throw new Error(`Cannot specify both fromString and fromObject.`);
-      }
-      this.map = paramParser(options.fromString, this.encoder);
-    } else if (!!options.fromObject) {
-      this.map = /* @__PURE__ */ new Map();
-      Object.keys(options.fromObject).forEach((key) => {
-        const value = options.fromObject[key];
-        const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];
-        this.map.set(key, values);
-      });
-    } else {
-      this.map = null;
-    }
-  }
-  /**
-   * Reports whether the body includes one or more values for a given parameter.
-   * @param param The parameter name.
-   * @returns True if the parameter has one or more values,
-   * false if it has no value or is not present.
-   */
-  has(param) {
-    this.init();
-    return this.map.has(param);
-  }
-  /**
-   * Retrieves the first value for a parameter.
-   * @param param The parameter name.
-   * @returns The first value of the given parameter,
-   * or `null` if the parameter is not present.
-   */
-  get(param) {
-    this.init();
-    const res = this.map.get(param);
-    return !!res ? res[0] : null;
-  }
-  /**
-   * Retrieves all values for a  parameter.
-   * @param param The parameter name.
-   * @returns All values in a string array,
-   * or `null` if the parameter not present.
-   */
-  getAll(param) {
-    this.init();
-    return this.map.get(param) || null;
-  }
-  /**
-   * Retrieves all the parameters for this body.
-   * @returns The parameter names in a string array.
-   */
-  keys() {
-    this.init();
-    return Array.from(this.map.keys());
-  }
-  /**
-   * Appends a new value to existing values for a parameter.
-   * @param param The parameter name.
-   * @param value The new value to add.
-   * @return A new body with the appended value.
-   */
-  append(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "a"
-    });
-  }
-  /**
-   * Constructs a new body with appended values for the given parameter name.
-   * @param params parameters and values
-   * @return A new body with the new value.
-   */
-  appendAll(params) {
-    const updates = [];
-    Object.keys(params).forEach((param) => {
-      const value = params[param];
-      if (Array.isArray(value)) {
-        value.forEach((_value) => {
-          updates.push({
-            param,
-            value: _value,
-            op: "a"
-          });
-        });
-      } else {
-        updates.push({
-          param,
-          value,
-          op: "a"
-        });
-      }
-    });
-    return this.clone(updates);
-  }
-  /**
-   * Replaces the value for a parameter.
-   * @param param The parameter name.
-   * @param value The new value.
-   * @return A new body with the new value.
-   */
-  set(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "s"
-    });
-  }
-  /**
-   * Removes a given value or all values from a parameter.
-   * @param param The parameter name.
-   * @param value The value to remove, if provided.
-   * @return A new body with the given value removed, or with all values
-   * removed if no value is specified.
-   */
-  delete(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "d"
-    });
-  }
-  /**
-   * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are
-   * separated by `&`s.
-   */
-  toString() {
-    this.init();
-    return this.keys().map((key) => {
-      const eKey = this.encoder.encodeKey(key);
-      return this.map.get(key).map((value) => eKey + "=" + this.encoder.encodeValue(value)).join("&");
-    }).filter((param) => param !== "").join("&");
-  }
-  clone(update) {
-    const clone = new _HttpParams({
-      encoder: this.encoder
-    });
-    clone.cloneFrom = this.cloneFrom || this;
-    clone.updates = (this.updates || []).concat(update);
-    return clone;
-  }
-  init() {
-    if (this.map === null) {
-      this.map = /* @__PURE__ */ new Map();
-    }
-    if (this.cloneFrom !== null) {
-      this.cloneFrom.init();
-      this.cloneFrom.keys().forEach((key) => this.map.set(key, this.cloneFrom.map.get(key)));
-      this.updates.forEach((update) => {
-        switch (update.op) {
-          case "a":
-          case "s":
-            const base = (update.op === "a" ? this.map.get(update.param) : void 0) || [];
-            base.push(valueToString(update.value));
-            this.map.set(update.param, base);
-            break;
-          case "d":
-            if (update.value !== void 0) {
-              let base2 = this.map.get(update.param) || [];
-              const idx = base2.indexOf(valueToString(update.value));
-              if (idx !== -1) {
-                base2.splice(idx, 1);
-              }
-              if (base2.length > 0) {
-                this.map.set(update.param, base2);
-              } else {
-                this.map.delete(update.param);
-              }
-            } else {
-              this.map.delete(update.param);
-              break;
-            }
-        }
-      });
-      this.cloneFrom = this.updates = null;
-    }
-  }
-};
-var HttpContext = class {
-  map = /* @__PURE__ */ new Map();
-  /**
-   * Store a value in the context. If a value is already present it will be overwritten.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   * @param value The value to store.
-   *
-   * @returns A reference to itself for easy chaining.
-   */
-  set(token, value) {
-    this.map.set(token, value);
-    return this;
-  }
-  /**
-   * Retrieve the value associated with the given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns The stored value or default if one is defined.
-   */
-  get(token) {
-    if (!this.map.has(token)) {
-      this.map.set(token, token.defaultValue());
-    }
-    return this.map.get(token);
-  }
-  /**
-   * Delete the value associated with the given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns A reference to itself for easy chaining.
-   */
-  delete(token) {
-    this.map.delete(token);
-    return this;
-  }
-  /**
-   * Checks for existence of a given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns True if the token exists, false otherwise.
-   */
-  has(token) {
-    return this.map.has(token);
-  }
-  /**
-   * @returns a list of tokens currently stored in the context.
-   */
-  keys() {
-    return this.map.keys();
-  }
-};
-function mightHaveBody(method) {
-  switch (method) {
-    case "DELETE":
-    case "GET":
-    case "HEAD":
-    case "OPTIONS":
-    case "JSONP":
-      return false;
-    default:
-      return true;
-  }
-}
-function isArrayBuffer(value) {
-  return typeof ArrayBuffer !== "undefined" && value instanceof ArrayBuffer;
-}
-function isBlob(value) {
-  return typeof Blob !== "undefined" && value instanceof Blob;
-}
-function isFormData(value) {
-  return typeof FormData !== "undefined" && value instanceof FormData;
-}
-function isUrlSearchParams(value) {
-  return typeof URLSearchParams !== "undefined" && value instanceof URLSearchParams;
-}
-var HttpRequest = class _HttpRequest {
-  url;
-  /**
-   * The request body, or `null` if one isn't set.
-   *
-   * Bodies are not enforced to be immutable, as they can include a reference to any
-   * user-defined data type. However, interceptors should take care to preserve
-   * idempotence by treating them as such.
-   */
-  body = null;
-  /**
-   * Outgoing headers for this request.
-   */
-  // TODO(issue/24571): remove '!'.
-  headers;
-  /**
-   * Shared and mutable context that can be used by interceptors
-   */
-  context;
-  /**
-   * Whether this request should be made in a way that exposes progress events.
-   *
-   * Progress events are expensive (change detection runs on each event) and so
-   * they should only be requested if the consumer intends to monitor them.
-   *
-   * Note: The `FetchBackend` doesn't support progress report on uploads.
-   */
-  reportProgress = false;
-  /**
-   * Whether this request should be sent with outgoing credentials (cookies).
-   */
-  withCredentials = false;
-  /**
-   * The expected response type of the server.
-   *
-   * This is used to parse the response appropriately before returning it to
-   * the requestee.
-   */
-  responseType = "json";
-  /**
-   * The outgoing HTTP request method.
-   */
-  method;
-  /**
-   * Outgoing URL parameters.
-   *
-   * To pass a string representation of HTTP parameters in the URL-query-string format,
-   * the `HttpParamsOptions`' `fromString` may be used. For example:
-   *
-   * ```
-   * new HttpParams({fromString: 'angular=awesome'})
-   * ```
-   */
-  // TODO(issue/24571): remove '!'.
-  params;
-  /**
-   * The outgoing URL with all URL parameters set.
-   */
-  urlWithParams;
-  /**
-   * The HttpTransferCache option for the request
-   */
-  transferCache;
-  constructor(method, url, third, fourth) {
-    this.url = url;
-    this.method = method.toUpperCase();
-    let options;
-    if (mightHaveBody(this.method) || !!fourth) {
-      this.body = third !== void 0 ? third : null;
-      options = fourth;
-    } else {
-      options = third;
-    }
-    if (options) {
-      this.reportProgress = !!options.reportProgress;
-      this.withCredentials = !!options.withCredentials;
-      if (!!options.responseType) {
-        this.responseType = options.responseType;
-      }
-      if (!!options.headers) {
-        this.headers = options.headers;
-      }
-      if (!!options.context) {
-        this.context = options.context;
-      }
-      if (!!options.params) {
-        this.params = options.params;
-      }
-      this.transferCache = options.transferCache;
-    }
-    this.headers ??= new HttpHeaders();
-    this.context ??= new HttpContext();
-    if (!this.params) {
-      this.params = new HttpParams();
-      this.urlWithParams = url;
-    } else {
-      const params = this.params.toString();
-      if (params.length === 0) {
-        this.urlWithParams = url;
-      } else {
-        const qIdx = url.indexOf("?");
-        const sep = qIdx === -1 ? "?" : qIdx < url.length - 1 ? "&" : "";
-        this.urlWithParams = url + sep + params;
-      }
-    }
-  }
-  /**
-   * Transform the free-form body into a serialized format suitable for
-   * transmission to the server.
-   */
-  serializeBody() {
-    if (this.body === null) {
-      return null;
-    }
-    if (typeof this.body === "string" || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {
-      return this.body;
-    }
-    if (this.body instanceof HttpParams) {
-      return this.body.toString();
-    }
-    if (typeof this.body === "object" || typeof this.body === "boolean" || Array.isArray(this.body)) {
-      return JSON.stringify(this.body);
-    }
-    return this.body.toString();
-  }
-  /**
-   * Examine the body and attempt to infer an appropriate MIME type
-   * for it.
-   *
-   * If no such type can be inferred, this method will return `null`.
-   */
-  detectContentTypeHeader() {
-    if (this.body === null) {
-      return null;
-    }
-    if (isFormData(this.body)) {
-      return null;
-    }
-    if (isBlob(this.body)) {
-      return this.body.type || null;
-    }
-    if (isArrayBuffer(this.body)) {
-      return null;
-    }
-    if (typeof this.body === "string") {
-      return "text/plain";
-    }
-    if (this.body instanceof HttpParams) {
-      return "application/x-www-form-urlencoded;charset=UTF-8";
-    }
-    if (typeof this.body === "object" || typeof this.body === "number" || typeof this.body === "boolean") {
-      return "application/json";
-    }
-    return null;
-  }
-  clone(update = {}) {
-    const method = update.method || this.method;
-    const url = update.url || this.url;
-    const responseType = update.responseType || this.responseType;
-    const transferCache = update.transferCache ?? this.transferCache;
-    const body = update.body !== void 0 ? update.body : this.body;
-    const withCredentials = update.withCredentials ?? this.withCredentials;
-    const reportProgress = update.reportProgress ?? this.reportProgress;
-    let headers = update.headers || this.headers;
-    let params = update.params || this.params;
-    const context = update.context ?? this.context;
-    if (update.setHeaders !== void 0) {
-      headers = Object.keys(update.setHeaders).reduce((headers2, name) => headers2.set(name, update.setHeaders[name]), headers);
-    }
-    if (update.setParams) {
-      params = Object.keys(update.setParams).reduce((params2, param) => params2.set(param, update.setParams[param]), params);
-    }
-    return new _HttpRequest(method, url, body, {
-      params,
-      headers,
-      context,
-      reportProgress,
-      responseType,
-      withCredentials,
-      transferCache
-    });
-  }
-};
-var HttpEventType;
-(function(HttpEventType2) {
-  HttpEventType2[HttpEventType2["Sent"] = 0] = "Sent";
-  HttpEventType2[HttpEventType2["UploadProgress"] = 1] = "UploadProgress";
-  HttpEventType2[HttpEventType2["ResponseHeader"] = 2] = "ResponseHeader";
-  HttpEventType2[HttpEventType2["DownloadProgress"] = 3] = "DownloadProgress";
-  HttpEventType2[HttpEventType2["Response"] = 4] = "Response";
-  HttpEventType2[HttpEventType2["User"] = 5] = "User";
-})(HttpEventType || (HttpEventType = {}));
-var HttpResponseBase = class {
-  /**
-   * All response headers.
-   */
-  headers;
-  /**
-   * Response status code.
-   */
-  status;
-  /**
-   * Textual description of response status code, defaults to OK.
-   *
-   * Do not depend on this.
-   */
-  statusText;
-  /**
-   * URL of the resource retrieved, or null if not available.
-   */
-  url;
-  /**
-   * Whether the status code falls in the 2xx range.
-   */
-  ok;
-  /**
-   * Type of the response, narrowed to either the full response or the header.
-   */
-  // TODO(issue/24571): remove '!'.
-  type;
-  /**
-   * Super-constructor for all responses.
-   *
-   * The single parameter accepted is an initialization hash. Any properties
-   * of the response passed there will override the default values.
-   */
-  constructor(init, defaultStatus = 200, defaultStatusText = "OK") {
-    this.headers = init.headers || new HttpHeaders();
-    this.status = init.status !== void 0 ? init.status : defaultStatus;
-    this.statusText = init.statusText || defaultStatusText;
-    this.url = init.url || null;
-    this.ok = this.status >= 200 && this.status < 300;
-  }
-};
-var HttpHeaderResponse = class _HttpHeaderResponse extends HttpResponseBase {
-  /**
-   * Create a new `HttpHeaderResponse` with the given parameters.
-   */
-  constructor(init = {}) {
-    super(init);
-  }
-  type = HttpEventType.ResponseHeader;
-  /**
-   * Copy this `HttpHeaderResponse`, overriding its contents with the
-   * given parameter hash.
-   */
-  clone(update = {}) {
-    return new _HttpHeaderResponse({
-      headers: update.headers || this.headers,
-      status: update.status !== void 0 ? update.status : this.status,
-      statusText: update.statusText || this.statusText,
-      url: update.url || this.url || void 0
-    });
-  }
-};
-var HttpResponse = class _HttpResponse extends HttpResponseBase {
-  /**
-   * The response body, or `null` if one was not returned.
-   */
-  body;
-  /**
-   * Construct a new `HttpResponse`.
-   */
-  constructor(init = {}) {
-    super(init);
-    this.body = init.body !== void 0 ? init.body : null;
-  }
-  type = HttpEventType.Response;
-  clone(update = {}) {
-    return new _HttpResponse({
-      body: update.body !== void 0 ? update.body : this.body,
-      headers: update.headers || this.headers,
-      status: update.status !== void 0 ? update.status : this.status,
-      statusText: update.statusText || this.statusText,
-      url: update.url || this.url || void 0
-    });
-  }
-};
-var HttpErrorResponse = class extends HttpResponseBase {
-  name = "HttpErrorResponse";
-  message;
-  error;
-  /**
-   * Errors are never okay, even when the status code is in the 2xx success range.
-   */
-  ok = false;
-  constructor(init) {
-    super(init, 0, "Unknown Error");
-    if (this.status >= 200 && this.status < 300) {
-      this.message = `Http failure during parsing for ${init.url || "(unknown url)"}`;
-    } else {
-      this.message = `Http failure response for ${init.url || "(unknown url)"}: ${init.status} ${init.statusText}`;
-    }
-    this.error = init.error || null;
-  }
-};
-var HTTP_STATUS_CODE_OK = 200;
-var HTTP_STATUS_CODE_NO_CONTENT = 204;
-var HttpStatusCode;
-(function(HttpStatusCode2) {
-  HttpStatusCode2[HttpStatusCode2["Continue"] = 100] = "Continue";
-  HttpStatusCode2[HttpStatusCode2["SwitchingProtocols"] = 101] = "SwitchingProtocols";
-  HttpStatusCode2[HttpStatusCode2["Processing"] = 102] = "Processing";
-  HttpStatusCode2[HttpStatusCode2["EarlyHints"] = 103] = "EarlyHints";
-  HttpStatusCode2[HttpStatusCode2["Ok"] = 200] = "Ok";
-  HttpStatusCode2[HttpStatusCode2["Created"] = 201] = "Created";
-  HttpStatusCode2[HttpStatusCode2["Accepted"] = 202] = "Accepted";
-  HttpStatusCode2[HttpStatusCode2["NonAuthoritativeInformation"] = 203] = "NonAuthoritativeInformation";
-  HttpStatusCode2[HttpStatusCode2["NoContent"] = 204] = "NoContent";
-  HttpStatusCode2[HttpStatusCode2["ResetContent"] = 205] = "ResetContent";
-  HttpStatusCode2[HttpStatusCode2["PartialContent"] = 206] = "PartialContent";
-  HttpStatusCode2[HttpStatusCode2["MultiStatus"] = 207] = "MultiStatus";
-  HttpStatusCode2[HttpStatusCode2["AlreadyReported"] = 208] = "AlreadyReported";
-  HttpStatusCode2[HttpStatusCode2["ImUsed"] = 226] = "ImUsed";
-  HttpStatusCode2[HttpStatusCode2["MultipleChoices"] = 300] = "MultipleChoices";
-  HttpStatusCode2[HttpStatusCode2["MovedPermanently"] = 301] = "MovedPermanently";
-  HttpStatusCode2[HttpStatusCode2["Found"] = 302] = "Found";
-  HttpStatusCode2[HttpStatusCode2["SeeOther"] = 303] = "SeeOther";
-  HttpStatusCode2[HttpStatusCode2["NotModified"] = 304] = "NotModified";
-  HttpStatusCode2[HttpStatusCode2["UseProxy"] = 305] = "UseProxy";
-  HttpStatusCode2[HttpStatusCode2["Unused"] = 306] = "Unused";
-  HttpStatusCode2[HttpStatusCode2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
-  HttpStatusCode2[HttpStatusCode2["PermanentRedirect"] = 308] = "PermanentRedirect";
-  HttpStatusCode2[HttpStatusCode2["BadRequest"] = 400] = "BadRequest";
-  HttpStatusCode2[HttpStatusCode2["Unauthorized"] = 401] = "Unauthorized";
-  HttpStatusCode2[HttpStatusCode2["PaymentRequired"] = 402] = "PaymentRequired";
-  HttpStatusCode2[HttpStatusCode2["Forbidden"] = 403] = "Forbidden";
-  HttpStatusCode2[HttpStatusCode2["NotFound"] = 404] = "NotFound";
-  HttpStatusCode2[HttpStatusCode2["MethodNotAllowed"] = 405] = "MethodNotAllowed";
-  HttpStatusCode2[HttpStatusCode2["NotAcceptable"] = 406] = "NotAcceptable";
-  HttpStatusCode2[HttpStatusCode2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
-  HttpStatusCode2[HttpStatusCode2["RequestTimeout"] = 408] = "RequestTimeout";
-  HttpStatusCode2[HttpStatusCode2["Conflict"] = 409] = "Conflict";
-  HttpStatusCode2[HttpStatusCode2["Gone"] = 410] = "Gone";
-  HttpStatusCode2[HttpStatusCode2["LengthRequired"] = 411] = "LengthRequired";
-  HttpStatusCode2[HttpStatusCode2["PreconditionFailed"] = 412] = "PreconditionFailed";
-  HttpStatusCode2[HttpStatusCode2["PayloadTooLarge"] = 413] = "PayloadTooLarge";
-  HttpStatusCode2[HttpStatusCode2["UriTooLong"] = 414] = "UriTooLong";
-  HttpStatusCode2[HttpStatusCode2["UnsupportedMediaType"] = 415] = "UnsupportedMediaType";
-  HttpStatusCode2[HttpStatusCode2["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
-  HttpStatusCode2[HttpStatusCode2["ExpectationFailed"] = 417] = "ExpectationFailed";
-  HttpStatusCode2[HttpStatusCode2["ImATeapot"] = 418] = "ImATeapot";
-  HttpStatusCode2[HttpStatusCode2["MisdirectedRequest"] = 421] = "MisdirectedRequest";
-  HttpStatusCode2[HttpStatusCode2["UnprocessableEntity"] = 422] = "UnprocessableEntity";
-  HttpStatusCode2[HttpStatusCode2["Locked"] = 423] = "Locked";
-  HttpStatusCode2[HttpStatusCode2["FailedDependency"] = 424] = "FailedDependency";
-  HttpStatusCode2[HttpStatusCode2["TooEarly"] = 425] = "TooEarly";
-  HttpStatusCode2[HttpStatusCode2["UpgradeRequired"] = 426] = "UpgradeRequired";
-  HttpStatusCode2[HttpStatusCode2["PreconditionRequired"] = 428] = "PreconditionRequired";
-  HttpStatusCode2[HttpStatusCode2["TooManyRequests"] = 429] = "TooManyRequests";
-  HttpStatusCode2[HttpStatusCode2["RequestHeaderFieldsTooLarge"] = 431] = "RequestHeaderFieldsTooLarge";
-  HttpStatusCode2[HttpStatusCode2["UnavailableForLegalReasons"] = 451] = "UnavailableForLegalReasons";
-  HttpStatusCode2[HttpStatusCode2["InternalServerError"] = 500] = "InternalServerError";
-  HttpStatusCode2[HttpStatusCode2["NotImplemented"] = 501] = "NotImplemented";
-  HttpStatusCode2[HttpStatusCode2["BadGateway"] = 502] = "BadGateway";
-  HttpStatusCode2[HttpStatusCode2["ServiceUnavailable"] = 503] = "ServiceUnavailable";
-  HttpStatusCode2[HttpStatusCode2["GatewayTimeout"] = 504] = "GatewayTimeout";
-  HttpStatusCode2[HttpStatusCode2["HttpVersionNotSupported"] = 505] = "HttpVersionNotSupported";
-  HttpStatusCode2[HttpStatusCode2["VariantAlsoNegotiates"] = 506] = "VariantAlsoNegotiates";
-  HttpStatusCode2[HttpStatusCode2["InsufficientStorage"] = 507] = "InsufficientStorage";
-  HttpStatusCode2[HttpStatusCode2["LoopDetected"] = 508] = "LoopDetected";
-  HttpStatusCode2[HttpStatusCode2["NotExtended"] = 510] = "NotExtended";
-  HttpStatusCode2[HttpStatusCode2["NetworkAuthenticationRequired"] = 511] = "NetworkAuthenticationRequired";
-})(HttpStatusCode || (HttpStatusCode = {}));
-function addBody(options, body) {
-  return {
-    body,
-    headers: options.headers,
-    context: options.context,
-    observe: options.observe,
-    params: options.params,
-    reportProgress: options.reportProgress,
-    responseType: options.responseType,
-    withCredentials: options.withCredentials,
-    transferCache: options.transferCache
-  };
-}
-var HttpClient = class _HttpClient {
-  handler;
-  constructor(handler) {
-    this.handler = handler;
-  }
-  /**
-   * Constructs an observable for a generic HTTP request that, when subscribed,
-   * fires the request through the chain of registered interceptors and on to the
-   * server.
-   *
-   * You can pass an `HttpRequest` directly as the only parameter. In this case,
-   * the call returns an observable of the raw `HttpEvent` stream.
-   *
-   * Alternatively you can pass an HTTP method as the first parameter,
-   * a URL string as the second, and an options hash containing the request body as the third.
-   * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the
-   * type of returned observable.
-   *   * The `responseType` value determines how a successful response body is parsed.
-   *   * If `responseType` is the default `json`, you can pass a type interface for the resulting
-   * object as a type parameter to the call.
-   *
-   * The `observe` value determines the return type, according to what you are interested in
-   * observing.
-   *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including
-   * progress events by default.
-   *   * An `observe` value of response returns an observable of `HttpResponse<T>`,
-   * where the `T` parameter depends on the `responseType` and any optionally provided type
-   * parameter.
-   *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.
-   *
-   */
-  request(first, url, options = {}) {
-    let req;
-    if (first instanceof HttpRequest) {
-      req = first;
-    } else {
-      let headers = void 0;
-      if (options.headers instanceof HttpHeaders) {
-        headers = options.headers;
-      } else {
-        headers = new HttpHeaders(options.headers);
-      }
-      let params = void 0;
-      if (!!options.params) {
-        if (options.params instanceof HttpParams) {
-          params = options.params;
-        } else {
-          params = new HttpParams({
-            fromObject: options.params
-          });
-        }
-      }
-      req = new HttpRequest(first, url, options.body !== void 0 ? options.body : null, {
-        headers,
-        context: options.context,
-        params,
-        reportProgress: options.reportProgress,
-        // By default, JSON is assumed to be returned for all calls.
-        responseType: options.responseType || "json",
-        withCredentials: options.withCredentials,
-        transferCache: options.transferCache
-      });
-    }
-    const events$ = of(req).pipe(concatMap((req2) => this.handler.handle(req2)));
-    if (first instanceof HttpRequest || options.observe === "events") {
-      return events$;
-    }
-    const res$ = events$.pipe(filter((event) => event instanceof HttpResponse));
-    switch (options.observe || "body") {
-      case "body":
-        switch (req.responseType) {
-          case "arraybuffer":
-            return res$.pipe(map((res) => {
-              if (res.body !== null && !(res.body instanceof ArrayBuffer)) {
-                throw new Error("Response is not an ArrayBuffer.");
-              }
-              return res.body;
-            }));
-          case "blob":
-            return res$.pipe(map((res) => {
-              if (res.body !== null && !(res.body instanceof Blob)) {
-                throw new Error("Response is not a Blob.");
-              }
-              return res.body;
-            }));
-          case "text":
-            return res$.pipe(map((res) => {
-              if (res.body !== null && typeof res.body !== "string") {
-                throw new Error("Response is not a string.");
-              }
-              return res.body;
-            }));
-          case "json":
-          default:
-            return res$.pipe(map((res) => res.body));
-        }
-      case "response":
-        return res$;
-      default:
-        throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);
-    }
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `DELETE` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   *
-   * @param url     The endpoint URL.
-   * @param options The HTTP options to send with the request.
-   *
-   */
-  delete(url, options = {}) {
-    return this.request("DELETE", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `GET` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   */
-  get(url, options = {}) {
-    return this.request("GET", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `HEAD` request to execute on the server. The `HEAD` method returns
-   * meta information about the resource without transferring the
-   * resource itself. See the individual overloads for
-   * details on the return type.
-   */
-  head(url, options = {}) {
-    return this.request("HEAD", url, options);
-  }
-  /**
-   * Constructs an `Observable` that, when subscribed, causes a request with the special method
-   * `JSONP` to be dispatched via the interceptor pipeline.
-   * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain
-   * API endpoints that don't support newer,
-   * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.
-   * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the
-   * requests even if the API endpoint is not located on the same domain (origin) as the client-side
-   * application making the request.
-   * The endpoint API must support JSONP callback for JSONP requests to work.
-   * The resource API returns the JSON response wrapped in a callback function.
-   * You can pass the callback function name as one of the query parameters.
-   * Note that JSONP requests can only be used with `GET` requests.
-   *
-   * @param url The resource URL.
-   * @param callbackParam The callback function name.
-   *
-   */
-  jsonp(url, callbackParam) {
-    return this.request("JSONP", url, {
-      params: new HttpParams().append(callbackParam, "JSONP_CALLBACK"),
-      observe: "body",
-      responseType: "json"
-    });
-  }
-  /**
-   * Constructs an `Observable` that, when subscribed, causes the configured
-   * `OPTIONS` request to execute on the server. This method allows the client
-   * to determine the supported HTTP methods and other capabilities of an endpoint,
-   * without implying a resource action. See the individual overloads for
-   * details on the return type.
-   */
-  options(url, options = {}) {
-    return this.request("OPTIONS", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `PATCH` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   */
-  patch(url, body, options = {}) {
-    return this.request("PATCH", url, addBody(options, body));
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `POST` request to execute on the server. The server responds with the location of
-   * the replaced resource. See the individual overloads for
-   * details on the return type.
-   */
-  post(url, body, options = {}) {
-    return this.request("POST", url, addBody(options, body));
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `PUT` request to execute on the server. The `PUT` method replaces an existing resource
-   * with a new set of values.
-   * See the individual overloads for details on the return type.
-   */
-  put(url, body, options = {}) {
-    return this.request("PUT", url, addBody(options, body));
-  }
-  static ɵfac = function HttpClient_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClient)(ɵɵinject(HttpHandler));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpClient,
-    factory: _HttpClient.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClient, [{
-    type: Injectable
-  }], () => [{
-    type: HttpHandler
-  }], null);
-})();
-var XSSI_PREFIX$1 = /^\)\]\}',?\n/;
-var REQUEST_URL_HEADER = `X-Request-URL`;
-function getResponseUrl$1(response) {
-  if (response.url) {
-    return response.url;
-  }
-  const xRequestUrl = REQUEST_URL_HEADER.toLocaleLowerCase();
-  return response.headers.get(xRequestUrl);
-}
-var FetchBackend = class _FetchBackend {
-  // We use an arrow function to always reference the current global implementation of `fetch`.
-  // This is helpful for cases when the global `fetch` implementation is modified by external code,
-  // see https://github.com/angular/angular/issues/57527.
-  fetchImpl = inject(FetchFactory, {
-    optional: true
-  })?.fetch ?? ((...args) => globalThis.fetch(...args));
-  ngZone = inject(NgZone);
-  handle(request) {
-    return new Observable((observer) => {
-      const aborter = new AbortController();
-      this.doRequest(request, aborter.signal, observer).then(noop, (error) => observer.error(new HttpErrorResponse({
-        error
-      })));
-      return () => aborter.abort();
-    });
-  }
-  doRequest(request, signal, observer) {
-    return __async(this, null, function* () {
-      const init = this.createRequestInit(request);
-      let response;
-      try {
-        const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, __spreadValues({
-          signal
-        }, init)));
-        silenceSuperfluousUnhandledPromiseRejection(fetchPromise);
-        observer.next({
-          type: HttpEventType.Sent
-        });
-        response = yield fetchPromise;
-      } catch (error) {
-        observer.error(new HttpErrorResponse({
-          error,
-          status: error.status ?? 0,
-          statusText: error.statusText,
-          url: request.urlWithParams,
-          headers: error.headers
-        }));
-        return;
-      }
-      const headers = new HttpHeaders(response.headers);
-      const statusText = response.statusText;
-      const url = getResponseUrl$1(response) ?? request.urlWithParams;
-      let status = response.status;
-      let body = null;
-      if (request.reportProgress) {
-        observer.next(new HttpHeaderResponse({
-          headers,
-          status,
-          statusText,
-          url
-        }));
-      }
-      if (response.body) {
-        const contentLength = response.headers.get("content-length");
-        const chunks = [];
-        const reader = response.body.getReader();
-        let receivedLength = 0;
-        let decoder;
-        let partialText;
-        const reqZone = typeof Zone !== "undefined" && Zone.current;
-        yield this.ngZone.runOutsideAngular(() => __async(this, null, function* () {
-          while (true) {
-            const {
-              done,
-              value
-            } = yield reader.read();
-            if (done) {
-              break;
-            }
-            chunks.push(value);
-            receivedLength += value.length;
-            if (request.reportProgress) {
-              partialText = request.responseType === "text" ? (partialText ?? "") + (decoder ??= new TextDecoder()).decode(value, {
-                stream: true
-              }) : void 0;
-              const reportProgress = () => observer.next({
-                type: HttpEventType.DownloadProgress,
-                total: contentLength ? +contentLength : void 0,
-                loaded: receivedLength,
-                partialText
-              });
-              reqZone ? reqZone.run(reportProgress) : reportProgress();
-            }
-          }
-        }));
-        const chunksAll = this.concatChunks(chunks, receivedLength);
-        try {
-          const contentType = response.headers.get("Content-Type") ?? "";
-          body = this.parseBody(request, chunksAll, contentType);
-        } catch (error) {
-          observer.error(new HttpErrorResponse({
-            error,
-            headers: new HttpHeaders(response.headers),
-            status: response.status,
-            statusText: response.statusText,
-            url: getResponseUrl$1(response) ?? request.urlWithParams
-          }));
-          return;
-        }
-      }
-      if (status === 0) {
-        status = body ? HTTP_STATUS_CODE_OK : 0;
-      }
-      const ok = status >= 200 && status < 300;
-      if (ok) {
-        observer.next(new HttpResponse({
-          body,
-          headers,
-          status,
-          statusText,
-          url
-        }));
-        observer.complete();
-      } else {
-        observer.error(new HttpErrorResponse({
-          error: body,
-          headers,
-          status,
-          statusText,
-          url
-        }));
-      }
-    });
-  }
-  parseBody(request, binContent, contentType) {
-    switch (request.responseType) {
-      case "json":
-        const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, "");
-        return text === "" ? null : JSON.parse(text);
-      case "text":
-        return new TextDecoder().decode(binContent);
-      case "blob":
-        return new Blob([binContent], {
-          type: contentType
-        });
-      case "arraybuffer":
-        return binContent.buffer;
-    }
-  }
-  createRequestInit(req) {
-    const headers = {};
-    const credentials = req.withCredentials ? "include" : void 0;
-    req.headers.forEach((name, values) => headers[name] = values.join(","));
-    if (!req.headers.has("Accept")) {
-      headers["Accept"] = "application/json, text/plain, */*";
-    }
-    if (!req.headers.has("Content-Type")) {
-      const detectedType = req.detectContentTypeHeader();
-      if (detectedType !== null) {
-        headers["Content-Type"] = detectedType;
-      }
-    }
-    return {
-      body: req.serializeBody(),
-      method: req.method,
-      headers,
-      credentials
-    };
-  }
-  concatChunks(chunks, totalLength) {
-    const chunksAll = new Uint8Array(totalLength);
-    let position = 0;
-    for (const chunk of chunks) {
-      chunksAll.set(chunk, position);
-      position += chunk.length;
-    }
-    return chunksAll;
-  }
-  static ɵfac = function FetchBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _FetchBackend)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _FetchBackend,
-    factory: _FetchBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FetchBackend, [{
-    type: Injectable
-  }], null, null);
-})();
-var FetchFactory = class {
-};
-function noop() {
-}
-function silenceSuperfluousUnhandledPromiseRejection(promise) {
-  promise.then(noop, noop);
-}
-function interceptorChainEndFn(req, finalHandlerFn) {
-  return finalHandlerFn(req);
-}
-function adaptLegacyInterceptorToChain(chainTailFn, interceptor) {
-  return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {
-    handle: (downstreamRequest) => chainTailFn(downstreamRequest, finalHandlerFn)
-  });
-}
-function chainedInterceptorFn(chainTailFn, interceptorFn, injector) {
-  return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, (downstreamRequest) => chainTailFn(downstreamRequest, finalHandlerFn)));
-}
-var HTTP_INTERCEPTORS = new InjectionToken(ngDevMode ? "HTTP_INTERCEPTORS" : "");
-var HTTP_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? "HTTP_INTERCEPTOR_FNS" : "");
-var HTTP_ROOT_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? "HTTP_ROOT_INTERCEPTOR_FNS" : "");
-var REQUESTS_CONTRIBUTE_TO_STABILITY = new InjectionToken(ngDevMode ? "REQUESTS_CONTRIBUTE_TO_STABILITY" : "", {
-  providedIn: "root",
-  factory: () => true
-});
-function legacyInterceptorFnFactory() {
-  let chain = null;
-  return (req, handler) => {
-    if (chain === null) {
-      const interceptors = inject(HTTP_INTERCEPTORS, {
-        optional: true
-      }) ?? [];
-      chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);
-    }
-    const pendingTasks = inject(PendingTasksInternal);
-    const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);
-    if (contributeToStability) {
-      const taskId = pendingTasks.add();
-      return chain(req, handler).pipe(finalize(() => pendingTasks.remove(taskId)));
-    } else {
-      return chain(req, handler);
-    }
-  };
-}
-var fetchBackendWarningDisplayed = false;
-var HttpInterceptorHandler = class _HttpInterceptorHandler extends HttpHandler {
-  backend;
-  injector;
-  chain = null;
-  pendingTasks = inject(PendingTasksInternal);
-  contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);
-  constructor(backend, injector) {
-    super();
-    this.backend = backend;
-    this.injector = injector;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !fetchBackendWarningDisplayed) {
-      const isServer = isPlatformServer(injector.get(PLATFORM_ID));
-      const isTestingBackend = this.backend.isTestingBackend;
-      if (isServer && !(this.backend instanceof FetchBackend) && !isTestingBackend) {
-        fetchBackendWarningDisplayed = true;
-        injector.get(Console).warn(formatRuntimeError(2801, "Angular detected that `HttpClient` is not configured to use `fetch` APIs. It's strongly recommended to enable `fetch` for applications that use Server-Side Rendering for better performance and compatibility. To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` call at the root of the application."));
-      }
-    }
-  }
-  handle(initialRequest) {
-    if (this.chain === null) {
-      const dedupedInterceptorFns = Array.from(/* @__PURE__ */ new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));
-      this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);
-    }
-    if (this.contributeToStability) {
-      const taskId = this.pendingTasks.add();
-      return this.chain(initialRequest, (downstreamRequest) => this.backend.handle(downstreamRequest)).pipe(finalize(() => this.pendingTasks.remove(taskId)));
-    } else {
-      return this.chain(initialRequest, (downstreamRequest) => this.backend.handle(downstreamRequest));
-    }
-  }
-  static ɵfac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpInterceptorHandler)(ɵɵinject(HttpBackend), ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpInterceptorHandler,
-    factory: _HttpInterceptorHandler.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpInterceptorHandler, [{
-    type: Injectable
-  }], () => [{
-    type: HttpBackend
-  }, {
-    type: EnvironmentInjector
-  }], null);
-})();
-var nextRequestId = 0;
-var foreignDocument;
-var JSONP_ERR_NO_CALLBACK = "JSONP injected script did not invoke callback.";
-var JSONP_ERR_WRONG_METHOD = "JSONP requests must use JSONP request method.";
-var JSONP_ERR_WRONG_RESPONSE_TYPE = "JSONP requests must use Json response type.";
-var JSONP_ERR_HEADERS_NOT_SUPPORTED = "JSONP requests do not support headers.";
-var JsonpCallbackContext = class {
-};
-function jsonpCallbackContext() {
-  if (typeof window === "object") {
-    return window;
-  }
-  return {};
-}
-var JsonpClientBackend = class _JsonpClientBackend {
-  callbackMap;
-  document;
-  /**
-   * A resolved promise that can be used to schedule microtasks in the event handlers.
-   */
-  resolvedPromise = Promise.resolve();
-  constructor(callbackMap, document2) {
-    this.callbackMap = callbackMap;
-    this.document = document2;
-  }
-  /**
-   * Get the name of the next callback method, by incrementing the global `nextRequestId`.
-   */
-  nextCallback() {
-    return `ng_jsonp_callback_${nextRequestId++}`;
-  }
-  /**
-   * Processes a JSONP request and returns an event stream of the results.
-   * @param req The request object.
-   * @returns An observable of the response events.
-   *
-   */
-  handle(req) {
-    if (req.method !== "JSONP") {
-      throw new Error(JSONP_ERR_WRONG_METHOD);
-    } else if (req.responseType !== "json") {
-      throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);
-    }
-    if (req.headers.keys().length > 0) {
-      throw new Error(JSONP_ERR_HEADERS_NOT_SUPPORTED);
-    }
-    return new Observable((observer) => {
-      const callback = this.nextCallback();
-      const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);
-      const node = this.document.createElement("script");
-      node.src = url;
-      let body = null;
-      let finished = false;
-      this.callbackMap[callback] = (data) => {
-        delete this.callbackMap[callback];
-        body = data;
-        finished = true;
-      };
-      const cleanup = () => {
-        node.removeEventListener("load", onLoad);
-        node.removeEventListener("error", onError);
-        node.remove();
-        delete this.callbackMap[callback];
-      };
-      const onLoad = (event) => {
-        this.resolvedPromise.then(() => {
-          cleanup();
-          if (!finished) {
-            observer.error(new HttpErrorResponse({
-              url,
-              status: 0,
-              statusText: "JSONP Error",
-              error: new Error(JSONP_ERR_NO_CALLBACK)
-            }));
-            return;
-          }
-          observer.next(new HttpResponse({
-            body,
-            status: HTTP_STATUS_CODE_OK,
-            statusText: "OK",
-            url
-          }));
-          observer.complete();
-        });
-      };
-      const onError = (error) => {
-        cleanup();
-        observer.error(new HttpErrorResponse({
-          error,
-          status: 0,
-          statusText: "JSONP Error",
-          url
-        }));
-      };
-      node.addEventListener("load", onLoad);
-      node.addEventListener("error", onError);
-      this.document.body.appendChild(node);
-      observer.next({
-        type: HttpEventType.Sent
-      });
-      return () => {
-        if (!finished) {
-          this.removeListeners(node);
-        }
-        cleanup();
-      };
-    });
-  }
-  removeListeners(script) {
-    foreignDocument ??= this.document.implementation.createHTMLDocument();
-    foreignDocument.adoptNode(script);
-  }
-  static ɵfac = function JsonpClientBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonpClientBackend)(ɵɵinject(JsonpCallbackContext), ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _JsonpClientBackend,
-    factory: _JsonpClientBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonpClientBackend, [{
-    type: Injectable
-  }], () => [{
-    type: JsonpCallbackContext
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function jsonpInterceptorFn(req, next) {
-  if (req.method === "JSONP") {
-    return inject(JsonpClientBackend).handle(req);
-  }
-  return next(req);
-}
-var JsonpInterceptor = class _JsonpInterceptor {
-  injector;
-  constructor(injector) {
-    this.injector = injector;
-  }
-  /**
-   * Identifies and handles a given JSONP request.
-   * @param initialRequest The outgoing request object to handle.
-   * @param next The next interceptor in the chain, or the backend
-   * if no interceptors remain in the chain.
-   * @returns An observable of the event stream.
-   */
-  intercept(initialRequest, next) {
-    return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)));
-  }
-  static ɵfac = function JsonpInterceptor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonpInterceptor)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _JsonpInterceptor,
-    factory: _JsonpInterceptor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonpInterceptor, [{
-    type: Injectable
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var XSSI_PREFIX = /^\)\]\}',?\n/;
-function getResponseUrl(xhr) {
-  if ("responseURL" in xhr && xhr.responseURL) {
-    return xhr.responseURL;
-  }
-  if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
-    return xhr.getResponseHeader("X-Request-URL");
-  }
-  return null;
-}
-var HttpXhrBackend = class _HttpXhrBackend {
-  xhrFactory;
-  constructor(xhrFactory) {
-    this.xhrFactory = xhrFactory;
-  }
-  /**
-   * Processes a request and returns a stream of response events.
-   * @param req The request object.
-   * @returns An observable of the response events.
-   */
-  handle(req) {
-    if (req.method === "JSONP") {
-      throw new RuntimeError(-2800, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \`withJsonpSupport()\` call (if \`provideHttpClient()\` is used) or import the \`HttpClientJsonpModule\` in the root NgModule.`);
-    }
-    const xhrFactory = this.xhrFactory;
-    const source = xhrFactory.ɵloadImpl ? from(xhrFactory.ɵloadImpl()) : of(null);
-    return source.pipe(switchMap(() => {
-      return new Observable((observer) => {
-        const xhr = xhrFactory.build();
-        xhr.open(req.method, req.urlWithParams);
-        if (req.withCredentials) {
-          xhr.withCredentials = true;
-        }
-        req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(",")));
-        if (!req.headers.has("Accept")) {
-          xhr.setRequestHeader("Accept", "application/json, text/plain, */*");
-        }
-        if (!req.headers.has("Content-Type")) {
-          const detectedType = req.detectContentTypeHeader();
-          if (detectedType !== null) {
-            xhr.setRequestHeader("Content-Type", detectedType);
-          }
-        }
-        if (req.responseType) {
-          const responseType = req.responseType.toLowerCase();
-          xhr.responseType = responseType !== "json" ? responseType : "text";
-        }
-        const reqBody = req.serializeBody();
-        let headerResponse = null;
-        const partialFromXhr = () => {
-          if (headerResponse !== null) {
-            return headerResponse;
-          }
-          const statusText = xhr.statusText || "OK";
-          const headers = new HttpHeaders(xhr.getAllResponseHeaders());
-          const url = getResponseUrl(xhr) || req.url;
-          headerResponse = new HttpHeaderResponse({
-            headers,
-            status: xhr.status,
-            statusText,
-            url
-          });
-          return headerResponse;
-        };
-        const onLoad = () => {
-          let {
-            headers,
-            status,
-            statusText,
-            url
-          } = partialFromXhr();
-          let body = null;
-          if (status !== HTTP_STATUS_CODE_NO_CONTENT) {
-            body = typeof xhr.response === "undefined" ? xhr.responseText : xhr.response;
-          }
-          if (status === 0) {
-            status = !!body ? HTTP_STATUS_CODE_OK : 0;
-          }
-          let ok = status >= 200 && status < 300;
-          if (req.responseType === "json" && typeof body === "string") {
-            const originalBody = body;
-            body = body.replace(XSSI_PREFIX, "");
-            try {
-              body = body !== "" ? JSON.parse(body) : null;
-            } catch (error) {
-              body = originalBody;
-              if (ok) {
-                ok = false;
-                body = {
-                  error,
-                  text: body
-                };
-              }
-            }
-          }
-          if (ok) {
-            observer.next(new HttpResponse({
-              body,
-              headers,
-              status,
-              statusText,
-              url: url || void 0
-            }));
-            observer.complete();
-          } else {
-            observer.error(new HttpErrorResponse({
-              // The error in this case is the response body (error from the server).
-              error: body,
-              headers,
-              status,
-              statusText,
-              url: url || void 0
-            }));
-          }
-        };
-        const onError = (error) => {
-          const {
-            url
-          } = partialFromXhr();
-          const res = new HttpErrorResponse({
-            error,
-            status: xhr.status || 0,
-            statusText: xhr.statusText || "Unknown Error",
-            url: url || void 0
-          });
-          observer.error(res);
-        };
-        let sentHeaders = false;
-        const onDownProgress = (event) => {
-          if (!sentHeaders) {
-            observer.next(partialFromXhr());
-            sentHeaders = true;
-          }
-          let progressEvent = {
-            type: HttpEventType.DownloadProgress,
-            loaded: event.loaded
-          };
-          if (event.lengthComputable) {
-            progressEvent.total = event.total;
-          }
-          if (req.responseType === "text" && !!xhr.responseText) {
-            progressEvent.partialText = xhr.responseText;
-          }
-          observer.next(progressEvent);
-        };
-        const onUpProgress = (event) => {
-          let progress = {
-            type: HttpEventType.UploadProgress,
-            loaded: event.loaded
-          };
-          if (event.lengthComputable) {
-            progress.total = event.total;
-          }
-          observer.next(progress);
-        };
-        xhr.addEventListener("load", onLoad);
-        xhr.addEventListener("error", onError);
-        xhr.addEventListener("timeout", onError);
-        xhr.addEventListener("abort", onError);
-        if (req.reportProgress) {
-          xhr.addEventListener("progress", onDownProgress);
-          if (reqBody !== null && xhr.upload) {
-            xhr.upload.addEventListener("progress", onUpProgress);
-          }
-        }
-        xhr.send(reqBody);
-        observer.next({
-          type: HttpEventType.Sent
-        });
-        return () => {
-          xhr.removeEventListener("error", onError);
-          xhr.removeEventListener("abort", onError);
-          xhr.removeEventListener("load", onLoad);
-          xhr.removeEventListener("timeout", onError);
-          if (req.reportProgress) {
-            xhr.removeEventListener("progress", onDownProgress);
-            if (reqBody !== null && xhr.upload) {
-              xhr.upload.removeEventListener("progress", onUpProgress);
-            }
-          }
-          if (xhr.readyState !== xhr.DONE) {
-            xhr.abort();
-          }
-        };
-      });
-    }));
-  }
-  static ɵfac = function HttpXhrBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXhrBackend)(ɵɵinject(XhrFactory));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXhrBackend,
-    factory: _HttpXhrBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXhrBackend, [{
-    type: Injectable
-  }], () => [{
-    type: XhrFactory
-  }], null);
-})();
-var XSRF_ENABLED = new InjectionToken(ngDevMode ? "XSRF_ENABLED" : "");
-var XSRF_DEFAULT_COOKIE_NAME = "XSRF-TOKEN";
-var XSRF_COOKIE_NAME = new InjectionToken(ngDevMode ? "XSRF_COOKIE_NAME" : "", {
-  providedIn: "root",
-  factory: () => XSRF_DEFAULT_COOKIE_NAME
-});
-var XSRF_DEFAULT_HEADER_NAME = "X-XSRF-TOKEN";
-var XSRF_HEADER_NAME = new InjectionToken(ngDevMode ? "XSRF_HEADER_NAME" : "", {
-  providedIn: "root",
-  factory: () => XSRF_DEFAULT_HEADER_NAME
-});
-var HttpXsrfTokenExtractor = class {
-};
-var HttpXsrfCookieExtractor = class _HttpXsrfCookieExtractor {
-  doc;
-  platform;
-  cookieName;
-  lastCookieString = "";
-  lastToken = null;
-  /**
-   * @internal for testing
-   */
-  parseCount = 0;
-  constructor(doc, platform, cookieName) {
-    this.doc = doc;
-    this.platform = platform;
-    this.cookieName = cookieName;
-  }
-  getToken() {
-    if (this.platform === "server") {
-      return null;
-    }
-    const cookieString = this.doc.cookie || "";
-    if (cookieString !== this.lastCookieString) {
-      this.parseCount++;
-      this.lastToken = parseCookieValue(cookieString, this.cookieName);
-      this.lastCookieString = cookieString;
-    }
-    return this.lastToken;
-  }
-  static ɵfac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXsrfCookieExtractor)(ɵɵinject(DOCUMENT), ɵɵinject(PLATFORM_ID), ɵɵinject(XSRF_COOKIE_NAME));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXsrfCookieExtractor,
-    factory: _HttpXsrfCookieExtractor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXsrfCookieExtractor, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [XSRF_COOKIE_NAME]
-    }]
-  }], null);
-})();
-function xsrfInterceptorFn(req, next) {
-  const lcUrl = req.url.toLowerCase();
-  if (!inject(XSRF_ENABLED) || req.method === "GET" || req.method === "HEAD" || lcUrl.startsWith("http://") || lcUrl.startsWith("https://")) {
-    return next(req);
-  }
-  const token = inject(HttpXsrfTokenExtractor).getToken();
-  const headerName = inject(XSRF_HEADER_NAME);
-  if (token != null && !req.headers.has(headerName)) {
-    req = req.clone({
-      headers: req.headers.set(headerName, token)
-    });
-  }
-  return next(req);
-}
-var HttpXsrfInterceptor = class _HttpXsrfInterceptor {
-  injector;
-  constructor(injector) {
-    this.injector = injector;
-  }
-  intercept(initialRequest, next) {
-    return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)));
-  }
-  static ɵfac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXsrfInterceptor)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXsrfInterceptor,
-    factory: _HttpXsrfInterceptor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXsrfInterceptor, [{
-    type: Injectable
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var HttpFeatureKind;
-(function(HttpFeatureKind2) {
-  HttpFeatureKind2[HttpFeatureKind2["Interceptors"] = 0] = "Interceptors";
-  HttpFeatureKind2[HttpFeatureKind2["LegacyInterceptors"] = 1] = "LegacyInterceptors";
-  HttpFeatureKind2[HttpFeatureKind2["CustomXsrfConfiguration"] = 2] = "CustomXsrfConfiguration";
-  HttpFeatureKind2[HttpFeatureKind2["NoXsrfProtection"] = 3] = "NoXsrfProtection";
-  HttpFeatureKind2[HttpFeatureKind2["JsonpSupport"] = 4] = "JsonpSupport";
-  HttpFeatureKind2[HttpFeatureKind2["RequestsMadeViaParent"] = 5] = "RequestsMadeViaParent";
-  HttpFeatureKind2[HttpFeatureKind2["Fetch"] = 6] = "Fetch";
-})(HttpFeatureKind || (HttpFeatureKind = {}));
-function makeHttpFeature(kind, providers) {
-  return {
-    ɵkind: kind,
-    ɵproviders: providers
-  };
-}
-function provideHttpClient(...features) {
-  if (ngDevMode) {
-    const featureKinds = new Set(features.map((f) => f.ɵkind));
-    if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {
-      throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : "");
-    }
-  }
-  const providers = [HttpClient, HttpXhrBackend, HttpInterceptorHandler, {
-    provide: HttpHandler,
-    useExisting: HttpInterceptorHandler
-  }, {
-    provide: HttpBackend,
-    useFactory: () => {
-      return inject(FetchBackend, {
-        optional: true
-      }) ?? inject(HttpXhrBackend);
-    }
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useValue: xsrfInterceptorFn,
-    multi: true
-  }, {
-    provide: XSRF_ENABLED,
-    useValue: true
-  }, {
-    provide: HttpXsrfTokenExtractor,
-    useClass: HttpXsrfCookieExtractor
-  }];
-  for (const feature of features) {
-    providers.push(...feature.ɵproviders);
-  }
-  return makeEnvironmentProviders(providers);
-}
-var LEGACY_INTERCEPTOR_FN = new InjectionToken(ngDevMode ? "LEGACY_INTERCEPTOR_FN" : "");
-function withInterceptorsFromDi() {
-  return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{
-    provide: LEGACY_INTERCEPTOR_FN,
-    useFactory: legacyInterceptorFnFactory
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useExisting: LEGACY_INTERCEPTOR_FN,
-    multi: true
-  }]);
-}
-function withXsrfConfiguration({
-  cookieName,
-  headerName
-}) {
-  const providers = [];
-  if (cookieName !== void 0) {
-    providers.push({
-      provide: XSRF_COOKIE_NAME,
-      useValue: cookieName
-    });
-  }
-  if (headerName !== void 0) {
-    providers.push({
-      provide: XSRF_HEADER_NAME,
-      useValue: headerName
-    });
-  }
-  return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);
-}
-function withNoXsrfProtection() {
-  return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{
-    provide: XSRF_ENABLED,
-    useValue: false
-  }]);
-}
-function withJsonpSupport() {
-  return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {
-    provide: JsonpCallbackContext,
-    useFactory: jsonpCallbackContext
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useValue: jsonpInterceptorFn,
-    multi: true
-  }]);
-}
-var HttpClientXsrfModule = class _HttpClientXsrfModule {
-  /**
-   * Disable the default XSRF protection.
-   */
-  static disable() {
-    return {
-      ngModule: _HttpClientXsrfModule,
-      providers: [withNoXsrfProtection().ɵproviders]
-    };
-  }
-  /**
-   * Configure XSRF protection.
-   * @param options An object that can specify either or both
-   * cookie name or header name.
-   * - Cookie name default is `XSRF-TOKEN`.
-   * - Header name default is `X-XSRF-TOKEN`.
-   *
-   */
-  static withOptions(options = {}) {
-    return {
-      ngModule: _HttpClientXsrfModule,
-      providers: withXsrfConfiguration(options).ɵproviders
-    };
-  }
-  static ɵfac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientXsrfModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientXsrfModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [HttpXsrfInterceptor, {
-      provide: HTTP_INTERCEPTORS,
-      useExisting: HttpXsrfInterceptor,
-      multi: true
-    }, {
-      provide: HttpXsrfTokenExtractor,
-      useClass: HttpXsrfCookieExtractor
-    }, withXsrfConfiguration({
-      cookieName: XSRF_DEFAULT_COOKIE_NAME,
-      headerName: XSRF_DEFAULT_HEADER_NAME
-    }).ɵproviders, {
-      provide: XSRF_ENABLED,
-      useValue: true
-    }]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientXsrfModule, [{
-    type: NgModule,
-    args: [{
-      providers: [HttpXsrfInterceptor, {
-        provide: HTTP_INTERCEPTORS,
-        useExisting: HttpXsrfInterceptor,
-        multi: true
-      }, {
-        provide: HttpXsrfTokenExtractor,
-        useClass: HttpXsrfCookieExtractor
-      }, withXsrfConfiguration({
-        cookieName: XSRF_DEFAULT_COOKIE_NAME,
-        headerName: XSRF_DEFAULT_HEADER_NAME
-      }).ɵproviders, {
-        provide: XSRF_ENABLED,
-        useValue: true
-      }]
-    }]
-  }], null, null);
-})();
-var HttpClientModule = class _HttpClientModule {
-  static ɵfac = function HttpClientModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [provideHttpClient(withInterceptorsFromDi())]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientModule, [{
-    type: NgModule,
-    args: [{
-      /**
-       * Configures the dependency injector where it is imported
-       * with supporting services for HTTP communications.
-       */
-      providers: [provideHttpClient(withInterceptorsFromDi())]
-    }]
-  }], null, null);
-})();
-var HttpClientJsonpModule = class _HttpClientJsonpModule {
-  static ɵfac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientJsonpModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientJsonpModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [withJsonpSupport().ɵproviders]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientJsonpModule, [{
-    type: NgModule,
-    args: [{
-      providers: [withJsonpSupport().ɵproviders]
-    }]
-  }], null, null);
-})();
-var HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken(ngDevMode ? "HTTP_TRANSFER_CACHE_ORIGIN_MAP" : "");
-var BODY = "b";
-var HEADERS = "h";
-var STATUS = "s";
-var STATUS_TEXT = "st";
-var REQ_URL = "u";
-var RESPONSE_TYPE = "rt";
-var CACHE_OPTIONS = new InjectionToken(ngDevMode ? "HTTP_TRANSFER_STATE_CACHE_OPTIONS" : "");
-var ALLOWED_METHODS = ["GET", "HEAD"];
-function transferCacheInterceptorFn(req, next) {
-  const _a = inject(CACHE_OPTIONS), {
-    isCacheActive
-  } = _a, globalOptions = __objRest(_a, [
-    "isCacheActive"
-  ]);
-  const {
-    transferCache: requestOptions,
-    method: requestMethod
-  } = req;
-  if (!isCacheActive || requestOptions === false || // POST requests are allowed either globally or at request level
-  requestMethod === "POST" && !globalOptions.includePostRequests && !requestOptions || requestMethod !== "POST" && !ALLOWED_METHODS.includes(requestMethod) || // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey
-  !globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req) || globalOptions.filter?.(req) === false) {
-    return next(req);
-  }
-  const transferState = inject(TransferState);
-  const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {
-    optional: true
-  });
-  const isServer = isPlatformServer(inject(PLATFORM_ID));
-  if (originMap && !isServer) {
-    throw new RuntimeError(2803, ngDevMode && "Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and present in the client side code. Please ensure that this token is only provided in the server code of the application.");
-  }
-  const requestUrl = isServer && originMap ? mapRequestOriginUrl(req.url, originMap) : req.url;
-  const storeKey = makeCacheKey(req, requestUrl);
-  const response = transferState.get(storeKey, null);
-  let headersToInclude = globalOptions.includeHeaders;
-  if (typeof requestOptions === "object" && requestOptions.includeHeaders) {
-    headersToInclude = requestOptions.includeHeaders;
-  }
-  if (response) {
-    const {
-      [BODY]: undecodedBody,
-      [RESPONSE_TYPE]: responseType,
-      [HEADERS]: httpHeaders,
-      [STATUS]: status,
-      [STATUS_TEXT]: statusText,
-      [REQ_URL]: url
-    } = response;
-    let body = undecodedBody;
-    switch (responseType) {
-      case "arraybuffer":
-        body = new TextEncoder().encode(undecodedBody).buffer;
-        break;
-      case "blob":
-        body = new Blob([undecodedBody]);
-        break;
-    }
-    let headers = new HttpHeaders(httpHeaders);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);
-    }
-    return of(new HttpResponse({
-      body,
-      headers,
-      status,
-      statusText,
-      url
-    }));
-  }
-  return next(req).pipe(tap((event) => {
-    if (event instanceof HttpResponse && isServer) {
-      transferState.set(storeKey, {
-        [BODY]: event.body,
-        [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),
-        [STATUS]: event.status,
-        [STATUS_TEXT]: event.statusText,
-        [REQ_URL]: requestUrl,
-        [RESPONSE_TYPE]: req.responseType
-      });
-    }
-  }));
-}
-function hasAuthHeaders(req) {
-  return req.headers.has("authorization") || req.headers.has("proxy-authorization");
-}
-function getFilteredHeaders(headers, includeHeaders) {
-  if (!includeHeaders) {
-    return {};
-  }
-  const headersMap = {};
-  for (const key of includeHeaders) {
-    const values = headers.getAll(key);
-    if (values !== null) {
-      headersMap[key] = values;
-    }
-  }
-  return headersMap;
-}
-function sortAndConcatParams(params) {
-  return [...params.keys()].sort().map((k) => `${k}=${params.getAll(k)}`).join("&");
-}
-function makeCacheKey(request, mappedRequestUrl) {
-  const {
-    params,
-    method,
-    responseType
-  } = request;
-  const encodedParams = sortAndConcatParams(params);
-  let serializedBody = request.serializeBody();
-  if (serializedBody instanceof URLSearchParams) {
-    serializedBody = sortAndConcatParams(serializedBody);
-  } else if (typeof serializedBody !== "string") {
-    serializedBody = "";
-  }
-  const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join("|");
-  const hash = generateHash(key);
-  return makeStateKey(hash);
-}
-function generateHash(value) {
-  let hash = 0;
-  for (const char of value) {
-    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;
-  }
-  hash += 2147483647 + 1;
-  return hash.toString();
-}
-function withHttpTransferCache(cacheOptions) {
-  return [{
-    provide: CACHE_OPTIONS,
-    useFactory: () => {
-      performanceMarkFeature("NgHttpTransferCache");
-      return __spreadValues({
-        isCacheActive: true
-      }, cacheOptions);
-    }
-  }, {
-    provide: HTTP_ROOT_INTERCEPTOR_FNS,
-    useValue: transferCacheInterceptorFn,
-    multi: true,
-    deps: [TransferState, CACHE_OPTIONS]
-  }, {
-    provide: APP_BOOTSTRAP_LISTENER,
-    multi: true,
-    useFactory: () => {
-      const appRef = inject(ApplicationRef);
-      const cacheState = inject(CACHE_OPTIONS);
-      return () => {
-        appRef.whenStable().then(() => {
-          cacheState.isCacheActive = false;
-        });
-      };
-    }
-  }];
-}
-function appendMissingHeadersDetection(url, headers, headersToInclude) {
-  const warningProduced = /* @__PURE__ */ new Set();
-  return new Proxy(headers, {
-    get(target, prop) {
-      const value = Reflect.get(target, prop);
-      const methods = /* @__PURE__ */ new Set(["get", "has", "getAll"]);
-      if (typeof value !== "function" || !methods.has(prop)) {
-        return value;
-      }
-      return (headerName) => {
-        const key = (prop + ":" + headerName).toLowerCase();
-        if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {
-          warningProduced.add(key);
-          const truncatedUrl = truncateMiddle(url);
-          console.warn(formatRuntimeError(2802, `Angular detected that the \`${headerName}\` header is accessed, but the value of the header was not transferred from the server to the client by the HttpTransferCache. To include the value of the \`${headerName}\` header for the \`${truncatedUrl}\` request, use the \`includeHeaders\` list. The \`includeHeaders\` can be defined either on a request level by adding the \`transferCache\` parameter, or on an application level by adding the \`httpCacheTransfer.includeHeaders\` argument to the \`provideClientHydration()\` call. `));
-        }
-        return value.apply(target, [headerName]);
-      };
-    }
-  });
-}
-function mapRequestOriginUrl(url, originMap) {
-  const origin = new URL(url, "resolve://").origin;
-  const mappedOrigin = originMap[origin];
-  if (!mappedOrigin) {
-    return url;
-  }
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    verifyMappedOrigin(mappedOrigin);
-  }
-  return url.replace(origin, mappedOrigin);
-}
-function verifyMappedOrigin(url) {
-  if (new URL(url, "resolve://").pathname !== "/") {
-    throw new RuntimeError(2804, `Angular detected a URL with a path segment in the value provided for the \`HTTP_TRANSFER_CACHE_ORIGIN_MAP\` token: ${url}. The map should only contain origins without any other segments.`);
-  }
-}
-
-// node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs
-var GenericBrowserDomAdapter = class extends DomAdapter {
-  supportsDOMEvents = true;
-};
-var BrowserDomAdapter = class _BrowserDomAdapter extends GenericBrowserDomAdapter {
-  static makeCurrent() {
-    setRootDomAdapter(new _BrowserDomAdapter());
-  }
-  onAndCancel(el, evt, listener) {
-    el.addEventListener(evt, listener);
-    return () => {
-      el.removeEventListener(evt, listener);
-    };
-  }
-  dispatchEvent(el, evt) {
-    el.dispatchEvent(evt);
-  }
-  remove(node) {
-    node.remove();
-  }
-  createElement(tagName, doc) {
-    doc = doc || this.getDefaultDocument();
-    return doc.createElement(tagName);
-  }
-  createHtmlDocument() {
-    return document.implementation.createHTMLDocument("fakeTitle");
-  }
-  getDefaultDocument() {
-    return document;
-  }
-  isElementNode(node) {
-    return node.nodeType === Node.ELEMENT_NODE;
-  }
-  isShadowRoot(node) {
-    return node instanceof DocumentFragment;
-  }
-  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */
-  getGlobalEventTarget(doc, target) {
-    if (target === "window") {
-      return window;
-    }
-    if (target === "document") {
-      return doc;
-    }
-    if (target === "body") {
-      return doc.body;
-    }
-    return null;
-  }
-  getBaseHref(doc) {
-    const href = getBaseElementHref();
-    return href == null ? null : relativePath(href);
-  }
-  resetBaseElement() {
-    baseElement = null;
-  }
-  getUserAgent() {
-    return window.navigator.userAgent;
-  }
-  getCookie(name) {
-    return parseCookieValue(document.cookie, name);
-  }
-};
-var baseElement = null;
-function getBaseElementHref() {
-  baseElement = baseElement || document.querySelector("base");
-  return baseElement ? baseElement.getAttribute("href") : null;
-}
-function relativePath(url) {
-  return new URL(url, document.baseURI).pathname;
-}
-var BrowserGetTestability = class {
-  addToWindow(registry) {
-    _global["getAngularTestability"] = (elem, findInAncestors = true) => {
-      const testability = registry.findTestabilityInTree(elem, findInAncestors);
-      if (testability == null) {
-        throw new RuntimeError(5103, (typeof ngDevMode === "undefined" || ngDevMode) && "Could not find testability for element.");
-      }
-      return testability;
-    };
-    _global["getAllAngularTestabilities"] = () => registry.getAllTestabilities();
-    _global["getAllAngularRootElements"] = () => registry.getAllRootElements();
-    const whenAllStable = (callback) => {
-      const testabilities = _global["getAllAngularTestabilities"]();
-      let count = testabilities.length;
-      const decrement = function() {
-        count--;
-        if (count == 0) {
-          callback();
-        }
-      };
-      testabilities.forEach((testability) => {
-        testability.whenStable(decrement);
-      });
-    };
-    if (!_global["frameworkStabilizers"]) {
-      _global["frameworkStabilizers"] = [];
-    }
-    _global["frameworkStabilizers"].push(whenAllStable);
-  }
-  findTestabilityInTree(registry, elem, findInAncestors) {
-    if (elem == null) {
-      return null;
-    }
-    const t = registry.getTestability(elem);
-    if (t != null) {
-      return t;
-    } else if (!findInAncestors) {
-      return null;
-    }
-    if (getDOM().isShadowRoot(elem)) {
-      return this.findTestabilityInTree(registry, elem.host, true);
-    }
-    return this.findTestabilityInTree(registry, elem.parentElement, true);
-  }
-};
-var BrowserXhr = class _BrowserXhr {
-  build() {
-    return new XMLHttpRequest();
-  }
-  static ɵfac = function BrowserXhr_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserXhr)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _BrowserXhr,
-    factory: _BrowserXhr.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserXhr, [{
-    type: Injectable
-  }], null, null);
-})();
-var EVENT_MANAGER_PLUGINS = new InjectionToken(ngDevMode ? "EventManagerPlugins" : "");
-var EventManager = class _EventManager {
-  _zone;
-  _plugins;
-  _eventNameToPlugin = /* @__PURE__ */ new Map();
-  /**
-   * Initializes an instance of the event-manager service.
-   */
-  constructor(plugins, _zone) {
-    this._zone = _zone;
-    plugins.forEach((plugin) => {
-      plugin.manager = this;
-    });
-    this._plugins = plugins.slice().reverse();
-  }
-  /**
-   * Registers a handler for a specific element and event.
-   *
-   * @param element The HTML element to receive event notifications.
-   * @param eventName The name of the event to listen for.
-   * @param handler A function to call when the notification occurs. Receives the
-   * event object as an argument.
-   * @returns  A callback function that can be used to remove the handler.
-   */
-  addEventListener(element, eventName, handler) {
-    const plugin = this._findPluginFor(eventName);
-    return plugin.addEventListener(element, eventName, handler);
-  }
-  /**
-   * Retrieves the compilation zone in which event listeners are registered.
-   */
-  getZone() {
-    return this._zone;
-  }
-  /** @internal */
-  _findPluginFor(eventName) {
-    let plugin = this._eventNameToPlugin.get(eventName);
-    if (plugin) {
-      return plugin;
-    }
-    const plugins = this._plugins;
-    plugin = plugins.find((plugin2) => plugin2.supports(eventName));
-    if (!plugin) {
-      throw new RuntimeError(5101, (typeof ngDevMode === "undefined" || ngDevMode) && `No event manager plugin found for event ${eventName}`);
-    }
-    this._eventNameToPlugin.set(eventName, plugin);
-    return plugin;
-  }
-  static ɵfac = function EventManager_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _EventManager)(ɵɵinject(EVENT_MANAGER_PLUGINS), ɵɵinject(NgZone));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _EventManager,
-    factory: _EventManager.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(EventManager, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [EVENT_MANAGER_PLUGINS]
-    }]
-  }, {
-    type: NgZone
-  }], null);
-})();
-var EventManagerPlugin = class {
-  _doc;
-  // TODO: remove (has some usage in G3)
-  constructor(_doc) {
-    this._doc = _doc;
-  }
-  // Using non-null assertion because it's set by EventManager's constructor
-  manager;
-};
-var APP_ID_ATTRIBUTE_NAME = "ng-app-id";
-function removeElements(elements) {
-  for (const element of elements) {
-    element.remove();
-  }
-}
-function createStyleElement(style, doc) {
-  const styleElement = doc.createElement("style");
-  styleElement.textContent = style;
-  return styleElement;
-}
-function addServerStyles(doc, appId, inline, external) {
-  const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}="${appId}"],link[${APP_ID_ATTRIBUTE_NAME}="${appId}"]`);
-  if (elements) {
-    for (const styleElement of elements) {
-      styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);
-      if (styleElement instanceof HTMLLinkElement) {
-        external.set(styleElement.href.slice(styleElement.href.lastIndexOf("/") + 1), {
-          usage: 0,
-          elements: [styleElement]
-        });
-      } else if (styleElement.textContent) {
-        inline.set(styleElement.textContent, {
-          usage: 0,
-          elements: [styleElement]
-        });
-      }
-    }
-  }
-}
-function createLinkElement(url, doc) {
-  const linkElement = doc.createElement("link");
-  linkElement.setAttribute("rel", "stylesheet");
-  linkElement.setAttribute("href", url);
-  return linkElement;
-}
-var SharedStylesHost = class _SharedStylesHost {
-  doc;
-  appId;
-  nonce;
-  /**
-   * Provides usage information for active inline style content and associated HTML <style> elements.
-   * Embedded styles typically originate from the `styles` metadata of a rendered component.
-   */
-  inline = /* @__PURE__ */ new Map();
-  /**
-   * Provides usage information for active external style URLs and the associated HTML <link> elements.
-   * External styles typically originate from the `ɵɵExternalStylesFeature` of a rendered component.
-   */
-  external = /* @__PURE__ */ new Map();
-  /**
-   * Set of host DOM nodes that will have styles attached.
-   */
-  hosts = /* @__PURE__ */ new Set();
-  /**
-   * Whether the application code is currently executing on a server.
-   */
-  isServer;
-  constructor(doc, appId, nonce, platformId = {}) {
-    this.doc = doc;
-    this.appId = appId;
-    this.nonce = nonce;
-    this.isServer = isPlatformServer(platformId);
-    addServerStyles(doc, appId, this.inline, this.external);
-    this.hosts.add(doc.head);
-  }
-  /**
-   * Adds embedded styles to the DOM via HTML `style` elements.
-   * @param styles An array of style content strings.
-   */
-  addStyles(styles, urls) {
-    for (const value of styles) {
-      this.addUsage(value, this.inline, createStyleElement);
-    }
-    urls?.forEach((value) => this.addUsage(value, this.external, createLinkElement));
-  }
-  /**
-   * Removes embedded styles from the DOM that were added as HTML `style` elements.
-   * @param styles An array of style content strings.
-   */
-  removeStyles(styles, urls) {
-    for (const value of styles) {
-      this.removeUsage(value, this.inline);
-    }
-    urls?.forEach((value) => this.removeUsage(value, this.external));
-  }
-  addUsage(value, usages, creator) {
-    const record = usages.get(value);
-    if (record) {
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && record.usage === 0) {
-        record.elements.forEach((element) => element.setAttribute("ng-style-reused", ""));
-      }
-      record.usage++;
-    } else {
-      usages.set(value, {
-        usage: 1,
-        elements: [...this.hosts].map((host) => this.addElement(host, creator(value, this.doc)))
-      });
-    }
-  }
-  removeUsage(value, usages) {
-    const record = usages.get(value);
-    if (record) {
-      record.usage--;
-      if (record.usage <= 0) {
-        removeElements(record.elements);
-        usages.delete(value);
-      }
-    }
-  }
-  ngOnDestroy() {
-    for (const [, {
-      elements
-    }] of [...this.inline, ...this.external]) {
-      removeElements(elements);
-    }
-    this.hosts.clear();
-  }
-  /**
-   * Adds a host node to the set of style hosts and adds all existing style usage to
-   * the newly added host node.
-   *
-   * This is currently only used for Shadow DOM encapsulation mode.
-   */
-  addHost(hostNode) {
-    this.hosts.add(hostNode);
-    for (const [style, {
-      elements
-    }] of this.inline) {
-      elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));
-    }
-    for (const [url, {
-      elements
-    }] of this.external) {
-      elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));
-    }
-  }
-  removeHost(hostNode) {
-    this.hosts.delete(hostNode);
-  }
-  addElement(host, element) {
-    if (this.nonce) {
-      element.setAttribute("nonce", this.nonce);
-    }
-    if (this.isServer) {
-      element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);
-    }
-    return host.appendChild(element);
-  }
-  static ɵfac = function SharedStylesHost_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _SharedStylesHost)(ɵɵinject(DOCUMENT), ɵɵinject(APP_ID), ɵɵinject(CSP_NONCE, 8), ɵɵinject(PLATFORM_ID));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _SharedStylesHost,
-    factory: _SharedStylesHost.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SharedStylesHost, [{
-    type: Injectable
-  }], () => [{
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [APP_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [CSP_NONCE]
-    }, {
-      type: Optional
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }], null);
-})();
-var NAMESPACE_URIS = {
-  "svg": "http://www.w3.org/2000/svg",
-  "xhtml": "http://www.w3.org/1999/xhtml",
-  "xlink": "http://www.w3.org/1999/xlink",
-  "xml": "http://www.w3.org/XML/1998/namespace",
-  "xmlns": "http://www.w3.org/2000/xmlns/",
-  "math": "http://www.w3.org/1998/Math/MathML"
-};
-var COMPONENT_REGEX = /%COMP%/g;
-var COMPONENT_VARIABLE = "%COMP%";
-var HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;
-var CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;
-var REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;
-var REMOVE_STYLES_ON_COMPONENT_DESTROY = new InjectionToken(ngDevMode ? "RemoveStylesOnCompDestroy" : "", {
-  providedIn: "root",
-  factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT
-});
-function shimContentAttribute(componentShortId) {
-  return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
-}
-function shimHostAttribute(componentShortId) {
-  return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
-}
-function shimStylesContent(compId, styles) {
-  return styles.map((s) => s.replace(COMPONENT_REGEX, compId));
-}
-var DomRendererFactory2 = class _DomRendererFactory2 {
-  eventManager;
-  sharedStylesHost;
-  appId;
-  removeStylesOnCompDestroy;
-  doc;
-  platformId;
-  ngZone;
-  nonce;
-  rendererByCompId = /* @__PURE__ */ new Map();
-  defaultRenderer;
-  platformIsServer;
-  constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, platformId, ngZone, nonce = null) {
-    this.eventManager = eventManager;
-    this.sharedStylesHost = sharedStylesHost;
-    this.appId = appId;
-    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
-    this.doc = doc;
-    this.platformId = platformId;
-    this.ngZone = ngZone;
-    this.nonce = nonce;
-    this.platformIsServer = isPlatformServer(platformId);
-    this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.platformIsServer);
-  }
-  createRenderer(element, type) {
-    if (!element || !type) {
-      return this.defaultRenderer;
-    }
-    if (this.platformIsServer && type.encapsulation === ViewEncapsulation.ShadowDom) {
-      type = __spreadProps(__spreadValues({}, type), {
-        encapsulation: ViewEncapsulation.Emulated
-      });
-    }
-    const renderer = this.getOrCreateRenderer(element, type);
-    if (renderer instanceof EmulatedEncapsulationDomRenderer2) {
-      renderer.applyToHost(element);
-    } else if (renderer instanceof NoneEncapsulationDomRenderer) {
-      renderer.applyStyles();
-    }
-    return renderer;
-  }
-  getOrCreateRenderer(element, type) {
-    const rendererByCompId = this.rendererByCompId;
-    let renderer = rendererByCompId.get(type.id);
-    if (!renderer) {
-      const doc = this.doc;
-      const ngZone = this.ngZone;
-      const eventManager = this.eventManager;
-      const sharedStylesHost = this.sharedStylesHost;
-      const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;
-      const platformIsServer = this.platformIsServer;
-      switch (type.encapsulation) {
-        case ViewEncapsulation.Emulated:
-          renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);
-          break;
-        case ViewEncapsulation.ShadowDom:
-          return new ShadowDomRenderer(eventManager, sharedStylesHost, element, type, doc, ngZone, this.nonce, platformIsServer);
-        default:
-          renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);
-          break;
-      }
-      rendererByCompId.set(type.id, renderer);
-    }
-    return renderer;
-  }
-  ngOnDestroy() {
-    this.rendererByCompId.clear();
-  }
-  static ɵfac = function DomRendererFactory2_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomRendererFactory2)(ɵɵinject(EventManager), ɵɵinject(SharedStylesHost), ɵɵinject(APP_ID), ɵɵinject(REMOVE_STYLES_ON_COMPONENT_DESTROY), ɵɵinject(DOCUMENT), ɵɵinject(PLATFORM_ID), ɵɵinject(NgZone), ɵɵinject(CSP_NONCE));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomRendererFactory2,
-    factory: _DomRendererFactory2.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomRendererFactory2, [{
-    type: Injectable
-  }], () => [{
-    type: EventManager
-  }, {
-    type: SharedStylesHost
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [APP_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [REMOVE_STYLES_ON_COMPONENT_DESTROY]
-    }]
-  }, {
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: Object,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }, {
-    type: NgZone
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [CSP_NONCE]
-    }]
-  }], null);
-})();
-var DefaultDomRenderer2 = class {
-  eventManager;
-  doc;
-  ngZone;
-  platformIsServer;
-  data = /* @__PURE__ */ Object.create(null);
-  /**
-   * By default this renderer throws when encountering synthetic properties
-   * This can be disabled for example by the AsyncAnimationRendererFactory
-   */
-  throwOnSyntheticProps = true;
-  constructor(eventManager, doc, ngZone, platformIsServer) {
-    this.eventManager = eventManager;
-    this.doc = doc;
-    this.ngZone = ngZone;
-    this.platformIsServer = platformIsServer;
-  }
-  destroy() {
-  }
-  destroyNode = null;
-  createElement(name, namespace) {
-    if (namespace) {
-      return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);
-    }
-    return this.doc.createElement(name);
-  }
-  createComment(value) {
-    return this.doc.createComment(value);
-  }
-  createText(value) {
-    return this.doc.createTextNode(value);
-  }
-  appendChild(parent, newChild) {
-    const targetParent = isTemplateNode(parent) ? parent.content : parent;
-    targetParent.appendChild(newChild);
-  }
-  insertBefore(parent, newChild, refChild) {
-    if (parent) {
-      const targetParent = isTemplateNode(parent) ? parent.content : parent;
-      targetParent.insertBefore(newChild, refChild);
-    }
-  }
-  removeChild(_parent, oldChild) {
-    oldChild.remove();
-  }
-  selectRootElement(selectorOrNode, preserveContent) {
-    let el = typeof selectorOrNode === "string" ? this.doc.querySelector(selectorOrNode) : selectorOrNode;
-    if (!el) {
-      throw new RuntimeError(-5104, (typeof ngDevMode === "undefined" || ngDevMode) && `The selector "${selectorOrNode}" did not match any elements`);
-    }
-    if (!preserveContent) {
-      el.textContent = "";
-    }
-    return el;
-  }
-  parentNode(node) {
-    return node.parentNode;
-  }
-  nextSibling(node) {
-    return node.nextSibling;
-  }
-  setAttribute(el, name, value, namespace) {
-    if (namespace) {
-      name = namespace + ":" + name;
-      const namespaceUri = NAMESPACE_URIS[namespace];
-      if (namespaceUri) {
-        el.setAttributeNS(namespaceUri, name, value);
-      } else {
-        el.setAttribute(name, value);
-      }
-    } else {
-      el.setAttribute(name, value);
-    }
-  }
-  removeAttribute(el, name, namespace) {
-    if (namespace) {
-      const namespaceUri = NAMESPACE_URIS[namespace];
-      if (namespaceUri) {
-        el.removeAttributeNS(namespaceUri, name);
-      } else {
-        el.removeAttribute(`${namespace}:${name}`);
-      }
-    } else {
-      el.removeAttribute(name);
-    }
-  }
-  addClass(el, name) {
-    el.classList.add(name);
-  }
-  removeClass(el, name) {
-    el.classList.remove(name);
-  }
-  setStyle(el, style, value, flags) {
-    if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {
-      el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? "important" : "");
-    } else {
-      el.style[style] = value;
-    }
-  }
-  removeStyle(el, style, flags) {
-    if (flags & RendererStyleFlags2.DashCase) {
-      el.style.removeProperty(style);
-    } else {
-      el.style[style] = "";
-    }
-  }
-  setProperty(el, name, value) {
-    if (el == null) {
-      return;
-    }
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, "property");
-    el[name] = value;
-  }
-  setValue(node, value) {
-    node.nodeValue = value;
-  }
-  listen(target, event, callback) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, "listener");
-    if (typeof target === "string") {
-      target = getDOM().getGlobalEventTarget(this.doc, target);
-      if (!target) {
-        throw new Error(`Unsupported event target ${target} for event ${event}`);
-      }
-    }
-    return this.eventManager.addEventListener(target, event, this.decoratePreventDefault(callback));
-  }
-  decoratePreventDefault(eventHandler) {
-    return (event) => {
-      if (event === "__ngUnwrap__") {
-        return eventHandler;
-      }
-      const allowDefaultBehavior = this.platformIsServer ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);
-      if (allowDefaultBehavior === false) {
-        event.preventDefault();
-      }
-      return void 0;
-    };
-  }
-};
-var AT_CHARCODE = (() => "@".charCodeAt(0))();
-function checkNoSyntheticProp(name, nameKind) {
-  if (name.charCodeAt(0) === AT_CHARCODE) {
-    throw new RuntimeError(5105, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:
-  - Either \`BrowserAnimationsModule\` or \`NoopAnimationsModule\` are imported in your application.
-  - There is corresponding configuration for the animation named \`${name}\` defined in the \`animations\` field of the \`@Component\` decorator (see https://angular.io/api/core/Component#animations).`);
-  }
-}
-function isTemplateNode(node) {
-  return node.tagName === "TEMPLATE" && node.content !== void 0;
-}
-var ShadowDomRenderer = class extends DefaultDomRenderer2 {
-  sharedStylesHost;
-  hostEl;
-  shadowRoot;
-  constructor(eventManager, sharedStylesHost, hostEl, component, doc, ngZone, nonce, platformIsServer) {
-    super(eventManager, doc, ngZone, platformIsServer);
-    this.sharedStylesHost = sharedStylesHost;
-    this.hostEl = hostEl;
-    this.shadowRoot = hostEl.attachShadow({
-      mode: "open"
-    });
-    this.sharedStylesHost.addHost(this.shadowRoot);
-    const styles = shimStylesContent(component.id, component.styles);
-    for (const style of styles) {
-      const styleEl = document.createElement("style");
-      if (nonce) {
-        styleEl.setAttribute("nonce", nonce);
-      }
-      styleEl.textContent = style;
-      this.shadowRoot.appendChild(styleEl);
-    }
-    const styleUrls = component.getExternalStyles?.();
-    if (styleUrls) {
-      for (const styleUrl of styleUrls) {
-        const linkEl = createLinkElement(styleUrl, doc);
-        if (nonce) {
-          linkEl.setAttribute("nonce", nonce);
-        }
-        this.shadowRoot.appendChild(linkEl);
-      }
-    }
-  }
-  nodeOrShadowRoot(node) {
-    return node === this.hostEl ? this.shadowRoot : node;
-  }
-  appendChild(parent, newChild) {
-    return super.appendChild(this.nodeOrShadowRoot(parent), newChild);
-  }
-  insertBefore(parent, newChild, refChild) {
-    return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);
-  }
-  removeChild(_parent, oldChild) {
-    return super.removeChild(null, oldChild);
-  }
-  parentNode(node) {
-    return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));
-  }
-  destroy() {
-    this.sharedStylesHost.removeHost(this.shadowRoot);
-  }
-};
-var NoneEncapsulationDomRenderer = class extends DefaultDomRenderer2 {
-  sharedStylesHost;
-  removeStylesOnCompDestroy;
-  styles;
-  styleUrls;
-  constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId) {
-    super(eventManager, doc, ngZone, platformIsServer);
-    this.sharedStylesHost = sharedStylesHost;
-    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
-    this.styles = compId ? shimStylesContent(compId, component.styles) : component.styles;
-    this.styleUrls = component.getExternalStyles?.(compId);
-  }
-  applyStyles() {
-    this.sharedStylesHost.addStyles(this.styles, this.styleUrls);
-  }
-  destroy() {
-    if (!this.removeStylesOnCompDestroy) {
-      return;
-    }
-    this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);
-  }
-};
-var EmulatedEncapsulationDomRenderer2 = class extends NoneEncapsulationDomRenderer {
-  contentAttr;
-  hostAttr;
-  constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer) {
-    const compId = appId + "-" + component.id;
-    super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId);
-    this.contentAttr = shimContentAttribute(compId);
-    this.hostAttr = shimHostAttribute(compId);
-  }
-  applyToHost(element) {
-    this.applyStyles();
-    this.setAttribute(element, this.hostAttr, "");
-  }
-  createElement(parent, name) {
-    const el = super.createElement(parent, name);
-    super.setAttribute(el, this.contentAttr, "");
-    return el;
-  }
-};
-var DomEventsPlugin = class _DomEventsPlugin extends EventManagerPlugin {
-  constructor(doc) {
-    super(doc);
-  }
-  // This plugin should come last in the list of plugins, because it accepts all
-  // events.
-  supports(eventName) {
-    return true;
-  }
-  addEventListener(element, eventName, handler) {
-    element.addEventListener(eventName, handler, false);
-    return () => this.removeEventListener(element, eventName, handler);
-  }
-  removeEventListener(target, eventName, callback) {
-    return target.removeEventListener(eventName, callback);
-  }
-  static ɵfac = function DomEventsPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomEventsPlugin)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomEventsPlugin,
-    factory: _DomEventsPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomEventsPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var MODIFIER_KEYS = ["alt", "control", "meta", "shift"];
-var _keyMap = {
-  "\b": "Backspace",
-  "	": "Tab",
-  "": "Delete",
-  "\x1B": "Escape",
-  "Del": "Delete",
-  "Esc": "Escape",
-  "Left": "ArrowLeft",
-  "Right": "ArrowRight",
-  "Up": "ArrowUp",
-  "Down": "ArrowDown",
-  "Menu": "ContextMenu",
-  "Scroll": "ScrollLock",
-  "Win": "OS"
-};
-var MODIFIER_KEY_GETTERS = {
-  "alt": (event) => event.altKey,
-  "control": (event) => event.ctrlKey,
-  "meta": (event) => event.metaKey,
-  "shift": (event) => event.shiftKey
-};
-var KeyEventsPlugin = class _KeyEventsPlugin extends EventManagerPlugin {
-  /**
-   * Initializes an instance of the browser plug-in.
-   * @param doc The document in which key events will be detected.
-   */
-  constructor(doc) {
-    super(doc);
-  }
-  /**
-   * Reports whether a named key event is supported.
-   * @param eventName The event name to query.
-   * @return True if the named key event is supported.
-   */
-  supports(eventName) {
-    return _KeyEventsPlugin.parseEventName(eventName) != null;
-  }
-  /**
-   * Registers a handler for a specific element and key event.
-   * @param element The HTML element to receive event notifications.
-   * @param eventName The name of the key event to listen for.
-   * @param handler A function to call when the notification occurs. Receives the
-   * event object as an argument.
-   * @returns The key event that was registered.
-   */
-  addEventListener(element, eventName, handler) {
-    const parsedEvent = _KeyEventsPlugin.parseEventName(eventName);
-    const outsideHandler = _KeyEventsPlugin.eventCallback(parsedEvent["fullKey"], handler, this.manager.getZone());
-    return this.manager.getZone().runOutsideAngular(() => {
-      return getDOM().onAndCancel(element, parsedEvent["domEventName"], outsideHandler);
-    });
-  }
-  /**
-   * Parses the user provided full keyboard event definition and normalizes it for
-   * later internal use. It ensures the string is all lowercase, converts special
-   * characters to a standard spelling, and orders all the values consistently.
-   *
-   * @param eventName The name of the key event to listen for.
-   * @returns an object with the full, normalized string, and the dom event name
-   * or null in the case when the event doesn't match a keyboard event.
-   */
-  static parseEventName(eventName) {
-    const parts = eventName.toLowerCase().split(".");
-    const domEventName = parts.shift();
-    if (parts.length === 0 || !(domEventName === "keydown" || domEventName === "keyup")) {
-      return null;
-    }
-    const key = _KeyEventsPlugin._normalizeKey(parts.pop());
-    let fullKey = "";
-    let codeIX = parts.indexOf("code");
-    if (codeIX > -1) {
-      parts.splice(codeIX, 1);
-      fullKey = "code.";
-    }
-    MODIFIER_KEYS.forEach((modifierName) => {
-      const index = parts.indexOf(modifierName);
-      if (index > -1) {
-        parts.splice(index, 1);
-        fullKey += modifierName + ".";
-      }
-    });
-    fullKey += key;
-    if (parts.length != 0 || key.length === 0) {
-      return null;
-    }
-    const result = {};
-    result["domEventName"] = domEventName;
-    result["fullKey"] = fullKey;
-    return result;
-  }
-  /**
-   * Determines whether the actual keys pressed match the configured key code string.
-   * The `fullKeyCode` event is normalized in the `parseEventName` method when the
-   * event is attached to the DOM during the `addEventListener` call. This is unseen
-   * by the end user and is normalized for internal consistency and parsing.
-   *
-   * @param event The keyboard event.
-   * @param fullKeyCode The normalized user defined expected key event string
-   * @returns boolean.
-   */
-  static matchEventFullKeyCode(event, fullKeyCode) {
-    let keycode = _keyMap[event.key] || event.key;
-    let key = "";
-    if (fullKeyCode.indexOf("code.") > -1) {
-      keycode = event.code;
-      key = "code.";
-    }
-    if (keycode == null || !keycode) return false;
-    keycode = keycode.toLowerCase();
-    if (keycode === " ") {
-      keycode = "space";
-    } else if (keycode === ".") {
-      keycode = "dot";
-    }
-    MODIFIER_KEYS.forEach((modifierName) => {
-      if (modifierName !== keycode) {
-        const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];
-        if (modifierGetter(event)) {
-          key += modifierName + ".";
-        }
-      }
-    });
-    key += keycode;
-    return key === fullKeyCode;
-  }
-  /**
-   * Configures a handler callback for a key event.
-   * @param fullKey The event name that combines all simultaneous keystrokes.
-   * @param handler The function that responds to the key event.
-   * @param zone The zone in which the event occurred.
-   * @returns A callback function.
-   */
-  static eventCallback(fullKey, handler, zone) {
-    return (event) => {
-      if (_KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {
-        zone.runGuarded(() => handler(event));
-      }
-    };
-  }
-  /** @internal */
-  static _normalizeKey(keyName) {
-    return keyName === "esc" ? "escape" : keyName;
-  }
-  static ɵfac = function KeyEventsPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _KeyEventsPlugin)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _KeyEventsPlugin,
-    factory: _KeyEventsPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(KeyEventsPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function bootstrapApplication(rootComponent, options) {
-  return internalCreateApplication(__spreadValues({
-    rootComponent
-  }, createProvidersConfig(options)));
-}
-function createApplication(options) {
-  return internalCreateApplication(createProvidersConfig(options));
-}
-function createProvidersConfig(options) {
-  return {
-    appProviders: [...BROWSER_MODULE_PROVIDERS, ...options?.providers ?? []],
-    platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS
-  };
-}
-function provideProtractorTestingSupport() {
-  return [...TESTABILITY_PROVIDERS];
-}
-function initDomAdapter() {
-  BrowserDomAdapter.makeCurrent();
-}
-function errorHandler() {
-  return new ErrorHandler();
-}
-function _document() {
-  setDocument(document);
-  return document;
-}
-var INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{
-  provide: PLATFORM_ID,
-  useValue: PLATFORM_BROWSER_ID
-}, {
-  provide: PLATFORM_INITIALIZER,
-  useValue: initDomAdapter,
-  multi: true
-}, {
-  provide: DOCUMENT,
-  useFactory: _document,
-  deps: []
-}];
-var platformBrowser = createPlatformFactory(platformCore, "browser", INTERNAL_BROWSER_PLATFORM_PROVIDERS);
-var BROWSER_MODULE_PROVIDERS_MARKER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "BrowserModule Providers Marker" : "");
-var TESTABILITY_PROVIDERS = [{
-  provide: TESTABILITY_GETTER,
-  useClass: BrowserGetTestability,
-  deps: []
-}, {
-  provide: TESTABILITY,
-  useClass: Testability,
-  deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
-}, {
-  provide: Testability,
-  // Also provide as `Testability` for backwards-compatibility.
-  useClass: Testability,
-  deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
-}];
-var BROWSER_MODULE_PROVIDERS = [{
-  provide: INJECTOR_SCOPE,
-  useValue: "root"
-}, {
-  provide: ErrorHandler,
-  useFactory: errorHandler,
-  deps: []
-}, {
-  provide: EVENT_MANAGER_PLUGINS,
-  useClass: DomEventsPlugin,
-  multi: true,
-  deps: [DOCUMENT, NgZone, PLATFORM_ID]
-}, {
-  provide: EVENT_MANAGER_PLUGINS,
-  useClass: KeyEventsPlugin,
-  multi: true,
-  deps: [DOCUMENT]
-}, DomRendererFactory2, SharedStylesHost, EventManager, {
-  provide: RendererFactory2,
-  useExisting: DomRendererFactory2
-}, {
-  provide: XhrFactory,
-  useClass: BrowserXhr,
-  deps: []
-}, typeof ngDevMode === "undefined" || ngDevMode ? {
-  provide: BROWSER_MODULE_PROVIDERS_MARKER,
-  useValue: true
-} : []];
-var BrowserModule = class _BrowserModule {
-  constructor(providersAlreadyPresent) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && providersAlreadyPresent) {
-      throw new RuntimeError(5100, `Providers from the \`BrowserModule\` have already been loaded. If you need access to common directives such as NgIf and NgFor, import the \`CommonModule\` instead.`);
-    }
-  }
-  static ɵfac = function BrowserModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserModule)(ɵɵinject(BROWSER_MODULE_PROVIDERS_MARKER, 12));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _BrowserModule,
-    exports: [CommonModule, ApplicationModule]
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
-    imports: [CommonModule, ApplicationModule]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserModule, [{
-    type: NgModule,
-    args: [{
-      providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
-      exports: [CommonModule, ApplicationModule]
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: SkipSelf
-    }, {
-      type: Inject,
-      args: [BROWSER_MODULE_PROVIDERS_MARKER]
-    }]
-  }], null);
-})();
-var Meta = class _Meta {
-  _doc;
-  _dom;
-  constructor(_doc) {
-    this._doc = _doc;
-    this._dom = getDOM();
-  }
-  /**
-   * Retrieves or creates a specific `<meta>` tag element in the current HTML document.
-   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
-   * values in the provided tag definition, and verifies that all other attribute values are equal.
-   * If an existing element is found, it is returned and is not modified in any way.
-   * @param tag The definition of a `<meta>` element to match or create.
-   * @param forceCreation True to create a new element without checking whether one already exists.
-   * @returns The existing element with the same attributes and values if found,
-   * the new element if no match is found, or `null` if the tag parameter is not defined.
-   */
-  addTag(tag, forceCreation = false) {
-    if (!tag) return null;
-    return this._getOrCreateElement(tag, forceCreation);
-  }
-  /**
-   * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.
-   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
-   * values in the provided tag definition, and verifies that all other attribute values are equal.
-   * @param tags An array of tag definitions to match or create.
-   * @param forceCreation True to create new elements without checking whether they already exist.
-   * @returns The matching elements if found, or the new elements.
-   */
-  addTags(tags, forceCreation = false) {
-    if (!tags) return [];
-    return tags.reduce((result, tag) => {
-      if (tag) {
-        result.push(this._getOrCreateElement(tag, forceCreation));
-      }
-      return result;
-    }, []);
-  }
-  /**
-   * Retrieves a `<meta>` tag element in the current HTML document.
-   * @param attrSelector The tag attribute and value to match against, in the format
-   * `"tag_attribute='value string'"`.
-   * @returns The matching element, if any.
-   */
-  getTag(attrSelector) {
-    if (!attrSelector) return null;
-    return this._doc.querySelector(`meta[${attrSelector}]`) || null;
-  }
-  /**
-   * Retrieves a set of `<meta>` tag elements in the current HTML document.
-   * @param attrSelector The tag attribute and value to match against, in the format
-   * `"tag_attribute='value string'"`.
-   * @returns The matching elements, if any.
-   */
-  getTags(attrSelector) {
-    if (!attrSelector) return [];
-    const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);
-    return list ? [].slice.call(list) : [];
-  }
-  /**
-   * Modifies an existing `<meta>` tag element in the current HTML document.
-   * @param tag The tag description with which to replace the existing tag content.
-   * @param selector A tag attribute and value to match against, to identify
-   * an existing tag. A string in the format `"tag_attribute=`value string`"`.
-   * If not supplied, matches a tag with the same `name` or `property` attribute value as the
-   * replacement tag.
-   * @return The modified element.
-   */
-  updateTag(tag, selector) {
-    if (!tag) return null;
-    selector = selector || this._parseSelector(tag);
-    const meta = this.getTag(selector);
-    if (meta) {
-      return this._setMetaElementAttributes(tag, meta);
-    }
-    return this._getOrCreateElement(tag, true);
-  }
-  /**
-   * Removes an existing `<meta>` tag element from the current HTML document.
-   * @param attrSelector A tag attribute and value to match against, to identify
-   * an existing tag. A string in the format `"tag_attribute=`value string`"`.
-   */
-  removeTag(attrSelector) {
-    this.removeTagElement(this.getTag(attrSelector));
-  }
-  /**
-   * Removes an existing `<meta>` tag element from the current HTML document.
-   * @param meta The tag definition to match against to identify an existing tag.
-   */
-  removeTagElement(meta) {
-    if (meta) {
-      this._dom.remove(meta);
-    }
-  }
-  _getOrCreateElement(meta, forceCreation = false) {
-    if (!forceCreation) {
-      const selector = this._parseSelector(meta);
-      const elem = this.getTags(selector).filter((elem2) => this._containsAttributes(meta, elem2))[0];
-      if (elem !== void 0) return elem;
-    }
-    const element = this._dom.createElement("meta");
-    this._setMetaElementAttributes(meta, element);
-    const head = this._doc.getElementsByTagName("head")[0];
-    head.appendChild(element);
-    return element;
-  }
-  _setMetaElementAttributes(tag, el) {
-    Object.keys(tag).forEach((prop) => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));
-    return el;
-  }
-  _parseSelector(tag) {
-    const attr = tag.name ? "name" : "property";
-    return `${attr}="${tag[attr]}"`;
-  }
-  _containsAttributes(tag, elem) {
-    return Object.keys(tag).every((key) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
-  }
-  _getMetaKeyMap(prop) {
-    return META_KEYS_MAP[prop] || prop;
-  }
-  static ɵfac = function Meta_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Meta)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Meta,
-    factory: _Meta.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Meta, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var META_KEYS_MAP = {
-  httpEquiv: "http-equiv"
-};
-var Title = class _Title {
-  _doc;
-  constructor(_doc) {
-    this._doc = _doc;
-  }
-  /**
-   * Get the title of the current HTML document.
-   */
-  getTitle() {
-    return this._doc.title;
-  }
-  /**
-   * Set the title of the current HTML document.
-   * @param newTitle
-   */
-  setTitle(newTitle) {
-    this._doc.title = newTitle || "";
-  }
-  static ɵfac = function Title_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Title)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Title,
-    factory: _Title.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Title, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function exportNgVar(name, value) {
-  if (typeof COMPILED === "undefined" || !COMPILED) {
-    const ng = _global["ng"] = _global["ng"] || {};
-    ng[name] = value;
-  }
-}
-var ChangeDetectionPerfRecord = class {
-  msPerTick;
-  numTicks;
-  constructor(msPerTick, numTicks) {
-    this.msPerTick = msPerTick;
-    this.numTicks = numTicks;
-  }
-};
-var AngularProfiler = class {
-  appRef;
-  constructor(ref) {
-    this.appRef = ref.injector.get(ApplicationRef);
-  }
-  // tslint:disable:no-console
-  /**
-   * Exercises change detection in a loop and then prints the average amount of
-   * time in milliseconds how long a single round of change detection takes for
-   * the current state of the UI. It runs a minimum of 5 rounds for a minimum
-   * of 500 milliseconds.
-   *
-   * Optionally, a user may pass a `config` parameter containing a map of
-   * options. Supported options are:
-   *
-   * `record` (boolean) - causes the profiler to record a CPU profile while
-   * it exercises the change detector. Example:
-   *
-   * ```
-   * ng.profiler.timeChangeDetection({record: true})
-   * ```
-   */
-  timeChangeDetection(config) {
-    const record = config && config["record"];
-    const profileName = "Change Detection";
-    if (record && "profile" in console && typeof console.profile === "function") {
-      console.profile(profileName);
-    }
-    const start = performance.now();
-    let numTicks = 0;
-    while (numTicks < 5 || performance.now() - start < 500) {
-      this.appRef.tick();
-      numTicks++;
-    }
-    const end = performance.now();
-    if (record && "profileEnd" in console && typeof console.profileEnd === "function") {
-      console.profileEnd(profileName);
-    }
-    const msPerTick = (end - start) / numTicks;
-    console.log(`ran ${numTicks} change detection cycles`);
-    console.log(`${msPerTick.toFixed(2)} ms per check`);
-    return new ChangeDetectionPerfRecord(msPerTick, numTicks);
-  }
-};
-var PROFILER_GLOBAL_NAME = "profiler";
-function enableDebugTools(ref) {
-  exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));
-  return ref;
-}
-function disableDebugTools() {
-  exportNgVar(PROFILER_GLOBAL_NAME, null);
-}
-var By = class {
-  /**
-   * Match all nodes.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
-   */
-  static all() {
-    return () => true;
-  }
-  /**
-   * Match elements by the given CSS selector.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
-   */
-  static css(selector) {
-    return (debugElement) => {
-      return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;
-    };
-  }
-  /**
-   * Match nodes that have the given directive present.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
-   */
-  static directive(type) {
-    return (debugNode) => debugNode.providerTokens.indexOf(type) !== -1;
-  }
-};
-function elementMatches(n, selector) {
-  if (getDOM().isElementNode(n)) {
-    return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);
-  }
-  return false;
-}
-var EVENT_NAMES = {
-  // pan
-  "pan": true,
-  "panstart": true,
-  "panmove": true,
-  "panend": true,
-  "pancancel": true,
-  "panleft": true,
-  "panright": true,
-  "panup": true,
-  "pandown": true,
-  // pinch
-  "pinch": true,
-  "pinchstart": true,
-  "pinchmove": true,
-  "pinchend": true,
-  "pinchcancel": true,
-  "pinchin": true,
-  "pinchout": true,
-  // press
-  "press": true,
-  "pressup": true,
-  // rotate
-  "rotate": true,
-  "rotatestart": true,
-  "rotatemove": true,
-  "rotateend": true,
-  "rotatecancel": true,
-  // swipe
-  "swipe": true,
-  "swipeleft": true,
-  "swiperight": true,
-  "swipeup": true,
-  "swipedown": true,
-  // tap
-  "tap": true,
-  "doubletap": true
-};
-var HAMMER_GESTURE_CONFIG = new InjectionToken("HammerGestureConfig");
-var HAMMER_LOADER = new InjectionToken("HammerLoader");
-var HammerGestureConfig = class _HammerGestureConfig {
-  /**
-   * A set of supported event names for gestures to be used in Angular.
-   * Angular supports all built-in recognizers, as listed in
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   */
-  events = [];
-  /**
-   * Maps gesture event names to a set of configuration options
-   * that specify overrides to the default values for specific properties.
-   *
-   * The key is a supported event name to be configured,
-   * and the options object contains a set of properties, with override values
-   * to be applied to the named recognizer event.
-   * For example, to disable recognition of the rotate event, specify
-   *  `{"rotate": {"enable": false}}`.
-   *
-   * Properties that are not present take the HammerJS default values.
-   * For information about which properties are supported for which events,
-   * and their allowed and default values, see
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   *
-   */
-  overrides = {};
-  /**
-   * Properties whose default values can be overridden for a given event.
-   * Different sets of properties apply to different events.
-   * For information about which properties are supported for which events,
-   * and their allowed and default values, see
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   */
-  options;
-  /**
-   * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
-   * and attaches it to a given HTML element.
-   * @param element The element that will recognize gestures.
-   * @returns A HammerJS event-manager object.
-   */
-  buildHammer(element) {
-    const mc = new Hammer(element, this.options);
-    mc.get("pinch").set({
-      enable: true
-    });
-    mc.get("rotate").set({
-      enable: true
-    });
-    for (const eventName in this.overrides) {
-      mc.get(eventName).set(this.overrides[eventName]);
-    }
-    return mc;
-  }
-  static ɵfac = function HammerGestureConfig_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerGestureConfig)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HammerGestureConfig,
-    factory: _HammerGestureConfig.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGestureConfig, [{
-    type: Injectable
-  }], null, null);
-})();
-var HammerGesturesPlugin = class _HammerGesturesPlugin extends EventManagerPlugin {
-  _config;
-  console;
-  loader;
-  _loaderPromise = null;
-  constructor(doc, _config, console2, loader) {
-    super(doc);
-    this._config = _config;
-    this.console = console2;
-    this.loader = loader;
-  }
-  supports(eventName) {
-    if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
-      return false;
-    }
-    if (!window.Hammer && !this.loader) {
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        this.console.warn(`The "${eventName}" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.`);
-      }
-      return false;
-    }
-    return true;
-  }
-  addEventListener(element, eventName, handler) {
-    const zone = this.manager.getZone();
-    eventName = eventName.toLowerCase();
-    if (!window.Hammer && this.loader) {
-      this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());
-      let cancelRegistration = false;
-      let deregister = () => {
-        cancelRegistration = true;
-      };
-      zone.runOutsideAngular(() => this._loaderPromise.then(() => {
-        if (!window.Hammer) {
-          if (typeof ngDevMode === "undefined" || ngDevMode) {
-            this.console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);
-          }
-          deregister = () => {
-          };
-          return;
-        }
-        if (!cancelRegistration) {
-          deregister = this.addEventListener(element, eventName, handler);
-        }
-      }).catch(() => {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          this.console.warn(`The "${eventName}" event cannot be bound because the custom Hammer.JS loader failed.`);
-        }
-        deregister = () => {
-        };
-      }));
-      return () => {
-        deregister();
-      };
-    }
-    return zone.runOutsideAngular(() => {
-      const mc = this._config.buildHammer(element);
-      const callback = function(eventObj) {
-        zone.runGuarded(function() {
-          handler(eventObj);
-        });
-      };
-      mc.on(eventName, callback);
-      return () => {
-        mc.off(eventName, callback);
-        if (typeof mc.destroy === "function") {
-          mc.destroy();
-        }
-      };
-    });
-  }
-  isCustomEvent(eventName) {
-    return this._config.events.indexOf(eventName) > -1;
-  }
-  static ɵfac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerGesturesPlugin)(ɵɵinject(DOCUMENT), ɵɵinject(HAMMER_GESTURE_CONFIG), ɵɵinject(Console), ɵɵinject(HAMMER_LOADER, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HammerGesturesPlugin,
-    factory: _HammerGesturesPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGesturesPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: HammerGestureConfig,
-    decorators: [{
-      type: Inject,
-      args: [HAMMER_GESTURE_CONFIG]
-    }]
-  }, {
-    type: Console
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [HAMMER_LOADER]
-    }]
-  }], null);
-})();
-var HammerModule = class _HammerModule {
-  static ɵfac = function HammerModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HammerModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [{
-      provide: EVENT_MANAGER_PLUGINS,
-      useClass: HammerGesturesPlugin,
-      multi: true,
-      deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Console, [new Optional(), HAMMER_LOADER]]
-    }, {
-      provide: HAMMER_GESTURE_CONFIG,
-      useClass: HammerGestureConfig,
-      deps: []
-    }]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerModule, [{
-    type: NgModule,
-    args: [{
-      providers: [{
-        provide: EVENT_MANAGER_PLUGINS,
-        useClass: HammerGesturesPlugin,
-        multi: true,
-        deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Console, [new Optional(), HAMMER_LOADER]]
-      }, {
-        provide: HAMMER_GESTURE_CONFIG,
-        useClass: HammerGestureConfig,
-        deps: []
-      }]
-    }]
-  }], null, null);
-})();
-var DomSanitizer = class _DomSanitizer {
-  static ɵfac = function DomSanitizer_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomSanitizer)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomSanitizer,
-    factory: function DomSanitizer_Factory(__ngFactoryType__) {
-      let __ngConditionalFactory__ = null;
-      if (__ngFactoryType__) {
-        __ngConditionalFactory__ = new (__ngFactoryType__ || _DomSanitizer)();
-      } else {
-        __ngConditionalFactory__ = ɵɵinject(DomSanitizerImpl);
-      }
-      return __ngConditionalFactory__;
-    },
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizer, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useExisting: forwardRef(() => DomSanitizerImpl)
-    }]
-  }], null, null);
-})();
-var DomSanitizerImpl = class _DomSanitizerImpl extends DomSanitizer {
-  _doc;
-  constructor(_doc) {
-    super();
-    this._doc = _doc;
-  }
-  sanitize(ctx, value) {
-    if (value == null) return null;
-    switch (ctx) {
-      case SecurityContext.NONE:
-        return value;
-      case SecurityContext.HTML:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "HTML"
-          /* BypassType.Html */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return _sanitizeHtml(this._doc, String(value)).toString();
-      case SecurityContext.STYLE:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "Style"
-          /* BypassType.Style */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return value;
-      case SecurityContext.SCRIPT:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "Script"
-          /* BypassType.Script */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        throw new RuntimeError(5200, (typeof ngDevMode === "undefined" || ngDevMode) && "unsafe value used in a script context");
-      case SecurityContext.URL:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "URL"
-          /* BypassType.Url */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return _sanitizeUrl(String(value));
-      case SecurityContext.RESOURCE_URL:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "ResourceURL"
-          /* BypassType.ResourceUrl */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        throw new RuntimeError(5201, (typeof ngDevMode === "undefined" || ngDevMode) && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);
-      default:
-        throw new RuntimeError(5202, (typeof ngDevMode === "undefined" || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`);
-    }
-  }
-  bypassSecurityTrustHtml(value) {
-    return bypassSanitizationTrustHtml(value);
-  }
-  bypassSecurityTrustStyle(value) {
-    return bypassSanitizationTrustStyle(value);
-  }
-  bypassSecurityTrustScript(value) {
-    return bypassSanitizationTrustScript(value);
-  }
-  bypassSecurityTrustUrl(value) {
-    return bypassSanitizationTrustUrl(value);
-  }
-  bypassSecurityTrustResourceUrl(value) {
-    return bypassSanitizationTrustResourceUrl(value);
-  }
-  static ɵfac = function DomSanitizerImpl_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomSanitizerImpl)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomSanitizerImpl,
-    factory: _DomSanitizerImpl.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizerImpl, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var HydrationFeatureKind;
-(function(HydrationFeatureKind2) {
-  HydrationFeatureKind2[HydrationFeatureKind2["NoHttpTransferCache"] = 0] = "NoHttpTransferCache";
-  HydrationFeatureKind2[HydrationFeatureKind2["HttpTransferCacheOptions"] = 1] = "HttpTransferCacheOptions";
-  HydrationFeatureKind2[HydrationFeatureKind2["I18nSupport"] = 2] = "I18nSupport";
-  HydrationFeatureKind2[HydrationFeatureKind2["EventReplay"] = 3] = "EventReplay";
-  HydrationFeatureKind2[HydrationFeatureKind2["IncrementalHydration"] = 4] = "IncrementalHydration";
-})(HydrationFeatureKind || (HydrationFeatureKind = {}));
-function hydrationFeature(ɵkind, ɵproviders = [], ɵoptions = {}) {
-  return {
-    ɵkind,
-    ɵproviders
-  };
-}
-function withNoHttpTransferCache() {
-  return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);
-}
-function withHttpTransferCacheOptions(options) {
-  return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, withHttpTransferCache(options));
-}
-function withI18nSupport2() {
-  return hydrationFeature(HydrationFeatureKind.I18nSupport, withI18nSupport());
-}
-function withEventReplay2() {
-  return hydrationFeature(HydrationFeatureKind.EventReplay, withEventReplay());
-}
-function withIncrementalHydration2() {
-  return hydrationFeature(HydrationFeatureKind.IncrementalHydration, withIncrementalHydration());
-}
-function provideZoneJsCompatibilityDetector() {
-  return [{
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      const ngZone = inject(NgZone);
-      const isZoneless = inject(ZONELESS_ENABLED);
-      if (!isZoneless && ngZone.constructor !== NgZone) {
-        const console2 = inject(Console);
-        const message = formatRuntimeError(-5e3, "Angular detected that hydration was enabled for an application that uses a custom or a noop Zone.js implementation. This is not yet a fully supported configuration.");
-        console2.warn(message);
-      }
-    },
-    multi: true
-  }];
-}
-function provideClientHydration(...features) {
-  const providers = [];
-  const featuresKind = /* @__PURE__ */ new Set();
-  const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);
-  for (const {
-    ɵproviders,
-    ɵkind
-  } of features) {
-    featuresKind.add(ɵkind);
-    if (ɵproviders.length) {
-      providers.push(ɵproviders);
-    }
-  }
-  if (typeof ngDevMode !== "undefined" && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {
-    throw new Error("Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.");
-  }
-  return makeEnvironmentProviders([typeof ngDevMode !== "undefined" && ngDevMode ? provideZoneJsCompatibilityDetector() : [], withDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : withHttpTransferCache({}), providers]);
-}
-var VERSION2 = new Version("19.0.5");
-
-export {
-  getDOM,
-  DOCUMENT,
-  LOCATION_INITIALIZED,
-  LocationStrategy,
-  PathLocationStrategy,
-  HashLocationStrategy,
-  Location,
-  ViewportScroller,
-  BrowserDomAdapter,
-  BrowserGetTestability,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  SharedStylesHost,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  DomRendererFactory2,
-  DomEventsPlugin,
-  KeyEventsPlugin,
-  bootstrapApplication,
-  createApplication,
-  provideProtractorTestingSupport,
-  initDomAdapter,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  platformBrowser,
-  BrowserModule,
-  Meta,
-  Title,
-  enableDebugTools,
-  disableDebugTools,
-  By,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerGesturesPlugin,
-  HammerModule,
-  DomSanitizer,
-  DomSanitizerImpl,
-  HydrationFeatureKind,
-  withNoHttpTransferCache,
-  withHttpTransferCacheOptions,
-  withI18nSupport2 as withI18nSupport,
-  withEventReplay2 as withEventReplay,
-  withIncrementalHydration2 as withIncrementalHydration,
-  provideClientHydration,
-  VERSION2 as VERSION
-};
-/*! Bundled license information:
-
-@angular/common/fesm2022/common.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/common/fesm2022/http.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/platform-browser/fesm2022/platform-browser.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-*/
-//# sourceMappingURL=chunk-DDSXTL3A.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-DDSXTL3A.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-DDSXTL3A.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/common/fesm2022/common.mjs", "../../../../../../node_modules/@angular/common/fesm2022/http.mjs", "../../../../../../node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, inject, Optional, Inject, ɵɵinject, ɵfindLocaleData, ɵLocaleDataIndex, ɵgetLocaleCurrencyCode, ɵgetLocalePluralCase, LOCALE_ID, ɵregisterLocaleData, ɵstringify, Directive, Input, createNgModule, NgModuleRef, ɵRuntimeError, Host, Attribute, RendererStyleFlags2, untracked, ɵisPromise, ɵisSubscribable, Pipe, DEFAULT_CURRENCY_CODE, NgModule, Version, ɵɵdefineInjectable, PLATFORM_ID, ɵformatRuntimeError, ɵIMAGE_CONFIG, Renderer2, ElementRef, Injector, ɵperformanceMarkFeature, NgZone, ApplicationRef, ChangeDetectorRef, numberAttribute, booleanAttribute, ɵIMAGE_CONFIG_DEFAULTS, ɵunwrapSafeValue } from '@angular/core';\nexport { ɵIMAGE_CONFIG as IMAGE_CONFIG } from '@angular/core';\nimport { Subject } from 'rxjs';\nlet _DOM = null;\nfunction getDOM() {\n  return _DOM;\n}\nfunction setRootDomAdapter(adapter) {\n  _DOM ??= adapter;\n}\n/* tslint:disable:requireParameterType */\n/**\n * Provides DOM operations in an environment-agnostic way.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nclass DomAdapter {}\n\n/**\n * This class wraps the platform Navigation API which allows server-specific and test\n * implementations.\n */\nclass PlatformNavigation {\n  static ɵfac = function PlatformNavigation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformNavigation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PlatformNavigation,\n    factory: () => (() => window.navigation)(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PlatformNavigation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => window.navigation\n    }]\n  }], null, null);\n})();\n\n/**\n * A DI Token representing the main rendering context.\n * In a browser and SSR this is the DOM Document.\n * When using SSR, that document is created by [Domino](https://github.com/angular/domino).\n *\n * @publicApi\n */\nconst DOCUMENT = new InjectionToken(ngDevMode ? 'DocumentToken' : '');\n\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be\n * platform-agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that Angular supports. For example, `@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `@angular/platform-server` provides\n * one suitable for use with server-side rendering.\n *\n * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}\n * when they need to interact with the DOM APIs like pushState, popState, etc.\n *\n * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly\n * by the {@link Router} in order to navigate between routes. Since all interactions between {@link\n * Router} /\n * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`\n * class, they are all platform-agnostic.\n *\n * @publicApi\n */\nclass PlatformLocation {\n  historyGo(relativePosition) {\n    throw new Error(ngDevMode ? 'Not implemented' : '');\n  }\n  static ɵfac = function PlatformLocation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformLocation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PlatformLocation,\n    factory: () => (() => inject(BrowserPlatformLocation))(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PlatformLocation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => inject(BrowserPlatformLocation)\n    }]\n  }], null, null);\n})();\n/**\n * @description\n * Indicates when a location is initialized.\n *\n * @publicApi\n */\nconst LOCATION_INITIALIZED = new InjectionToken(ngDevMode ? 'Location Initialized' : '');\n/**\n * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * @publicApi\n */\nclass BrowserPlatformLocation extends PlatformLocation {\n  _location;\n  _history;\n  _doc = inject(DOCUMENT);\n  constructor() {\n    super();\n    this._location = window.location;\n    this._history = window.history;\n  }\n  getBaseHrefFromDOM() {\n    return getDOM().getBaseHref(this._doc);\n  }\n  onPopState(fn) {\n    const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n    window.addEventListener('popstate', fn, false);\n    return () => window.removeEventListener('popstate', fn);\n  }\n  onHashChange(fn) {\n    const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n    window.addEventListener('hashchange', fn, false);\n    return () => window.removeEventListener('hashchange', fn);\n  }\n  get href() {\n    return this._location.href;\n  }\n  get protocol() {\n    return this._location.protocol;\n  }\n  get hostname() {\n    return this._location.hostname;\n  }\n  get port() {\n    return this._location.port;\n  }\n  get pathname() {\n    return this._location.pathname;\n  }\n  get search() {\n    return this._location.search;\n  }\n  get hash() {\n    return this._location.hash;\n  }\n  set pathname(newPath) {\n    this._location.pathname = newPath;\n  }\n  pushState(state, title, url) {\n    this._history.pushState(state, title, url);\n  }\n  replaceState(state, title, url) {\n    this._history.replaceState(state, title, url);\n  }\n  forward() {\n    this._history.forward();\n  }\n  back() {\n    this._history.back();\n  }\n  historyGo(relativePosition = 0) {\n    this._history.go(relativePosition);\n  }\n  getState() {\n    return this._history.state;\n  }\n  static ɵfac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserPlatformLocation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: BrowserPlatformLocation,\n    factory: () => (() => new BrowserPlatformLocation())(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserPlatformLocation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => new BrowserPlatformLocation()\n    }]\n  }], () => [], null);\n})();\n\n/**\n * Joins two parts of a URL with a slash if needed.\n *\n * @param start  URL string\n * @param end    URL string\n *\n *\n * @returns The joined URL string.\n */\nfunction joinWithSlash(start, end) {\n  if (start.length == 0) {\n    return end;\n  }\n  if (end.length == 0) {\n    return start;\n  }\n  let slashes = 0;\n  if (start.endsWith('/')) {\n    slashes++;\n  }\n  if (end.startsWith('/')) {\n    slashes++;\n  }\n  if (slashes == 2) {\n    return start + end.substring(1);\n  }\n  if (slashes == 1) {\n    return start + end;\n  }\n  return start + '/' + end;\n}\n/**\n * Removes a trailing slash from a URL string if needed.\n * Looks for the first occurrence of either `#`, `?`, or the end of the\n * line as `/` characters and removes the trailing slash if one exists.\n *\n * @param url URL string.\n *\n * @returns The URL string, modified if needed.\n */\nfunction stripTrailingSlash(url) {\n  const match = url.match(/#|\\?|$/);\n  const pathEndIdx = match && match.index || url.length;\n  const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);\n  return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);\n}\n/**\n * Normalizes URL parameters by prepending with `?` if needed.\n *\n * @param  params String of URL parameters.\n *\n * @returns The normalized URL parameters string.\n */\nfunction normalizeQueryParams(params) {\n  return params && params[0] !== '?' ? '?' + params : params;\n}\n\n/**\n * Enables the `Location` service to read route state from the browser's URL.\n * Angular provides two strategies:\n * `HashLocationStrategy` and `PathLocationStrategy`.\n *\n * Applications should use the `Router` or `Location` services to\n * interact with application route state.\n *\n * For instance, `HashLocationStrategy` produces URLs like\n * <code class=\"no-auto-link\">http://example.com/#/foo</code>,\n * and `PathLocationStrategy` produces\n * <code class=\"no-auto-link\">http://example.com/foo</code> as an equivalent URL.\n *\n * See these two classes for more.\n *\n * @publicApi\n */\nclass LocationStrategy {\n  historyGo(relativePosition) {\n    throw new Error(ngDevMode ? 'Not implemented' : '');\n  }\n  static ɵfac = function LocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LocationStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: LocationStrategy,\n    factory: () => (() => inject(PathLocationStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LocationStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(PathLocationStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * A predefined DI token for the base href\n * to be used with the `PathLocationStrategy`.\n * The base href is the URL prefix that should be preserved when generating\n * and recognizing URLs.\n *\n * @usageNotes\n *\n * The following example shows how to use this token to configure the root app injector\n * with a base href value, so that the DI framework can supply the dependency anywhere in the app.\n *\n * ```ts\n * import {NgModule} from '@angular/core';\n * import {APP_BASE_HREF} from '@angular/common';\n *\n * @NgModule({\n *   providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n */\nconst APP_BASE_HREF = new InjectionToken(ngDevMode ? 'appBaseHref' : '');\n/**\n * @description\n * A {@link LocationStrategy} used to configure the {@link Location} service to\n * represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n *\n * If you're using `PathLocationStrategy`, you may provide a {@link APP_BASE_HREF}\n * or add a `<base href>` element to the document to override the default.\n *\n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`. To ensure all relative URIs resolve correctly,\n * the `<base href>` and/or `APP_BASE_HREF` should end with a `/`.\n *\n * Similarly, if you add `<base href='/my/app/'/>` to the document and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * Note that when using `PathLocationStrategy`, neither the query nor\n * the fragment in the `<base href>` will be preserved, as outlined\n * by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2).\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass PathLocationStrategy extends LocationStrategy {\n  _platformLocation;\n  _baseHref;\n  _removeListenerFns = [];\n  constructor(_platformLocation, href) {\n    super();\n    this._platformLocation = _platformLocation;\n    this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? '';\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    while (this._removeListenerFns.length) {\n      this._removeListenerFns.pop()();\n    }\n  }\n  onPopState(fn) {\n    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n  }\n  getBaseHref() {\n    return this._baseHref;\n  }\n  prepareExternalUrl(internal) {\n    return joinWithSlash(this._baseHref, internal);\n  }\n  path(includeHash = false) {\n    const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);\n    const hash = this._platformLocation.hash;\n    return hash && includeHash ? `${pathname}${hash}` : pathname;\n  }\n  pushState(state, title, url, queryParams) {\n    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.pushState(state, title, externalUrl);\n  }\n  replaceState(state, title, url, queryParams) {\n    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.replaceState(state, title, externalUrl);\n  }\n  forward() {\n    this._platformLocation.forward();\n  }\n  back() {\n    this._platformLocation.back();\n  }\n  getState() {\n    return this._platformLocation.getState();\n  }\n  historyGo(relativePosition = 0) {\n    this._platformLocation.historyGo?.(relativePosition);\n  }\n  static ɵfac = function PathLocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PathLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PathLocationStrategy,\n    factory: PathLocationStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PathLocationStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: PlatformLocation\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [APP_BASE_HREF]\n    }]\n  }], null);\n})();\n\n/**\n * @description\n * A {@link LocationStrategy} used to configure the {@link Location} service to\n * represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n *\n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass HashLocationStrategy extends LocationStrategy {\n  _platformLocation;\n  _baseHref = '';\n  _removeListenerFns = [];\n  constructor(_platformLocation, _baseHref) {\n    super();\n    this._platformLocation = _platformLocation;\n    if (_baseHref != null) {\n      this._baseHref = _baseHref;\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    while (this._removeListenerFns.length) {\n      this._removeListenerFns.pop()();\n    }\n  }\n  onPopState(fn) {\n    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n  }\n  getBaseHref() {\n    return this._baseHref;\n  }\n  path(includeHash = false) {\n    // the hash value is always prefixed with a `#`\n    // and if it is empty then it will stay empty\n    const path = this._platformLocation.hash ?? '#';\n    return path.length > 0 ? path.substring(1) : path;\n  }\n  prepareExternalUrl(internal) {\n    const url = joinWithSlash(this._baseHref, internal);\n    return url.length > 0 ? '#' + url : url;\n  }\n  pushState(state, title, path, queryParams) {\n    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.pushState(state, title, url);\n  }\n  replaceState(state, title, path, queryParams) {\n    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.replaceState(state, title, url);\n  }\n  forward() {\n    this._platformLocation.forward();\n  }\n  back() {\n    this._platformLocation.back();\n  }\n  getState() {\n    return this._platformLocation.getState();\n  }\n  historyGo(relativePosition = 0) {\n    this._platformLocation.historyGo?.(relativePosition);\n  }\n  static ɵfac = function HashLocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HashLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HashLocationStrategy,\n    factory: HashLocationStrategy.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HashLocationStrategy, [{\n    type: Injectable\n  }], () => [{\n    type: PlatformLocation\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [APP_BASE_HREF]\n    }]\n  }], null);\n})();\n\n/**\n * @description\n *\n * A service that applications can use to interact with a browser's URL.\n *\n * Depending on the `LocationStrategy` used, `Location` persists\n * to the URL's path or the URL's hash segment.\n *\n * @usageNotes\n *\n * It's better to use the `Router.navigate()` service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n *\n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n *\n * ### Example\n *\n * {@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass Location {\n  /** @internal */\n  _subject = new Subject();\n  /** @internal */\n  _basePath;\n  /** @internal */\n  _locationStrategy;\n  /** @internal */\n  _urlChangeListeners = [];\n  /** @internal */\n  _urlChangeSubscription = null;\n  constructor(locationStrategy) {\n    this._locationStrategy = locationStrategy;\n    const baseHref = this._locationStrategy.getBaseHref();\n    // Note: This class's interaction with base HREF does not fully follow the rules\n    // outlined in the spec https://www.freesoft.org/CIE/RFC/1808/18.htm.\n    // Instead of trying to fix individual bugs with more and more code, we should\n    // investigate using the URL constructor and providing the base as a second\n    // argument.\n    // https://developer.mozilla.org/en-US/docs/Web/API/URL/URL#parameters\n    this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));\n    this._locationStrategy.onPopState(ev => {\n      this._subject.next({\n        'url': this.path(true),\n        'pop': true,\n        'state': ev.state,\n        'type': ev.type\n      });\n    });\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this._urlChangeSubscription?.unsubscribe();\n    this._urlChangeListeners = [];\n  }\n  /**\n   * Normalizes the URL path for this location.\n   *\n   * @param includeHash True to include an anchor fragment in the path.\n   *\n   * @returns The normalized URL path.\n   */\n  // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is\n  // removed.\n  path(includeHash = false) {\n    return this.normalize(this._locationStrategy.path(includeHash));\n  }\n  /**\n   * Reports the current state of the location history.\n   * @returns The current value of the `history.state` object.\n   */\n  getState() {\n    return this._locationStrategy.getState();\n  }\n  /**\n   * Normalizes the given path and compares to the current normalized path.\n   *\n   * @param path The given URL path.\n   * @param query Query parameters.\n   *\n   * @returns True if the given URL path is equal to the current normalized path, false\n   * otherwise.\n   */\n  isCurrentPathEqualTo(path, query = '') {\n    return this.path() == this.normalize(path + normalizeQueryParams(query));\n  }\n  /**\n   * Normalizes a URL path by stripping any trailing slashes.\n   *\n   * @param url String representing a URL.\n   *\n   * @returns The normalized URL string.\n   */\n  normalize(url) {\n    return Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));\n  }\n  /**\n   * Normalizes an external URL path.\n   * If the given URL doesn't begin with a leading slash (`'/'`), adds one\n   * before normalizing. Adds a hash if `HashLocationStrategy` is\n   * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n   *\n   * @param url String representing a URL.\n   *\n   * @returns  A normalized platform-specific URL.\n   */\n  prepareExternalUrl(url) {\n    if (url && url[0] !== '/') {\n      url = '/' + url;\n    }\n    return this._locationStrategy.prepareExternalUrl(url);\n  }\n  // TODO: rename this method to pushState\n  /**\n   * Changes the browser's URL to a normalized version of a given URL, and pushes a\n   * new item onto the platform's history.\n   *\n   * @param path  URL path to normalize.\n   * @param query Query parameters.\n   * @param state Location history state.\n   *\n   */\n  go(path, query = '', state = null) {\n    this._locationStrategy.pushState(state, '', path, query);\n    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n  }\n  /**\n   * Changes the browser's URL to a normalized version of the given URL, and replaces\n   * the top item on the platform's history stack.\n   *\n   * @param path  URL path to normalize.\n   * @param query Query parameters.\n   * @param state Location history state.\n   */\n  replaceState(path, query = '', state = null) {\n    this._locationStrategy.replaceState(state, '', path, query);\n    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n  }\n  /**\n   * Navigates forward in the platform's history.\n   */\n  forward() {\n    this._locationStrategy.forward();\n  }\n  /**\n   * Navigates back in the platform's history.\n   */\n  back() {\n    this._locationStrategy.back();\n  }\n  /**\n   * Navigate to a specific page from session history, identified by its relative position to the\n   * current page.\n   *\n   * @param relativePosition  Position of the target page in the history relative to the current\n   *     page.\n   * A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)`\n   * moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go\n   * beyond what's stored in the history session, we stay in the current page. Same behaviour occurs\n   * when `relativePosition` equals 0.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history\n   */\n  historyGo(relativePosition = 0) {\n    this._locationStrategy.historyGo?.(relativePosition);\n  }\n  /**\n   * Registers a URL change listener. Use to catch updates performed by the Angular\n   * framework that are not detectible through \"popstate\" or \"hashchange\" events.\n   *\n   * @param fn The change handler function, which take a URL and a location history state.\n   * @returns A function that, when executed, unregisters a URL change listener.\n   */\n  onUrlChange(fn) {\n    this._urlChangeListeners.push(fn);\n    this._urlChangeSubscription ??= this.subscribe(v => {\n      this._notifyUrlChangeListeners(v.url, v.state);\n    });\n    return () => {\n      const fnIndex = this._urlChangeListeners.indexOf(fn);\n      this._urlChangeListeners.splice(fnIndex, 1);\n      if (this._urlChangeListeners.length === 0) {\n        this._urlChangeSubscription?.unsubscribe();\n        this._urlChangeSubscription = null;\n      }\n    };\n  }\n  /** @internal */\n  _notifyUrlChangeListeners(url = '', state) {\n    this._urlChangeListeners.forEach(fn => fn(url, state));\n  }\n  /**\n   * Subscribes to the platform's `popState` events.\n   *\n   * Note: `Location.go()` does not trigger the `popState` event in the browser. Use\n   * `Location.onUrlChange()` to subscribe to URL changes instead.\n   *\n   * @param value Event that is triggered when the state history changes.\n   * @param exception The exception to throw.\n   *\n   * @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate)\n   *\n   * @returns Subscribed events.\n   */\n  subscribe(onNext, onThrow, onReturn) {\n    return this._subject.subscribe({\n      next: onNext,\n      error: onThrow ?? undefined,\n      complete: onReturn ?? undefined\n    });\n  }\n  /**\n   * Normalizes URL parameters by prepending with `?` if needed.\n   *\n   * @param  params String of URL parameters.\n   *\n   * @returns The normalized URL parameters string.\n   */\n  static normalizeQueryParams = normalizeQueryParams;\n  /**\n   * Joins two parts of a URL with a slash if needed.\n   *\n   * @param start  URL string\n   * @param end    URL string\n   *\n   *\n   * @returns The joined URL string.\n   */\n  static joinWithSlash = joinWithSlash;\n  /**\n   * Removes a trailing slash from a URL string if needed.\n   * Looks for the first occurrence of either `#`, `?`, or the end of the\n   * line as `/` characters and removes the trailing slash if one exists.\n   *\n   * @param url URL string.\n   *\n   * @returns The URL string, modified if needed.\n   */\n  static stripTrailingSlash = stripTrailingSlash;\n  static ɵfac = function Location_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Location)(i0.ɵɵinject(LocationStrategy));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Location,\n    factory: () => createLocation(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Location, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      // See #23917\n      useFactory: createLocation\n    }]\n  }], () => [{\n    type: LocationStrategy\n  }], null);\n})();\nfunction createLocation() {\n  return new Location(ɵɵinject(LocationStrategy));\n}\nfunction _stripBasePath(basePath, url) {\n  if (!basePath || !url.startsWith(basePath)) {\n    return url;\n  }\n  const strippedUrl = url.substring(basePath.length);\n  if (strippedUrl === '' || ['/', ';', '?', '#'].includes(strippedUrl[0])) {\n    return strippedUrl;\n  }\n  return url;\n}\nfunction _stripIndexHtml(url) {\n  return url.replace(/\\/index.html$/, '');\n}\nfunction _stripOrigin(baseHref) {\n  // DO NOT REFACTOR! Previously, this check looked like this:\n  // `/^(https?:)?\\/\\//.test(baseHref)`, but that resulted in\n  // syntactically incorrect code after Closure Compiler minification.\n  // This was likely caused by a bug in Closure Compiler, but\n  // for now, the check is rewritten to use `new RegExp` instead.\n  const isAbsoluteUrl = new RegExp('^(https?:)?//').test(baseHref);\n  if (isAbsoluteUrl) {\n    const [, pathname] = baseHref.split(/\\/\\/[^\\/]+/);\n    return pathname;\n  }\n  return baseHref;\n}\n\n/** @internal */\nconst CURRENCIES_EN = {\n  \"ADP\": [undefined, undefined, 0],\n  \"AFN\": [undefined, \"؋\", 0],\n  \"ALL\": [undefined, undefined, 0],\n  \"AMD\": [undefined, \"֏\", 2],\n  \"AOA\": [undefined, \"Kz\"],\n  \"ARS\": [undefined, \"$\"],\n  \"AUD\": [\"A$\", \"$\"],\n  \"AZN\": [undefined, \"₼\"],\n  \"BAM\": [undefined, \"KM\"],\n  \"BBD\": [undefined, \"$\"],\n  \"BDT\": [undefined, \"৳\"],\n  \"BHD\": [undefined, undefined, 3],\n  \"BIF\": [undefined, undefined, 0],\n  \"BMD\": [undefined, \"$\"],\n  \"BND\": [undefined, \"$\"],\n  \"BOB\": [undefined, \"Bs\"],\n  \"BRL\": [\"R$\"],\n  \"BSD\": [undefined, \"$\"],\n  \"BWP\": [undefined, \"P\"],\n  \"BYN\": [undefined, undefined, 2],\n  \"BYR\": [undefined, undefined, 0],\n  \"BZD\": [undefined, \"$\"],\n  \"CAD\": [\"CA$\", \"$\", 2],\n  \"CHF\": [undefined, undefined, 2],\n  \"CLF\": [undefined, undefined, 4],\n  \"CLP\": [undefined, \"$\", 0],\n  \"CNY\": [\"CN¥\", \"¥\"],\n  \"COP\": [undefined, \"$\", 2],\n  \"CRC\": [undefined, \"₡\", 2],\n  \"CUC\": [undefined, \"$\"],\n  \"CUP\": [undefined, \"$\"],\n  \"CZK\": [undefined, \"Kč\", 2],\n  \"DJF\": [undefined, undefined, 0],\n  \"DKK\": [undefined, \"kr\", 2],\n  \"DOP\": [undefined, \"$\"],\n  \"EGP\": [undefined, \"E£\"],\n  \"ESP\": [undefined, \"₧\", 0],\n  \"EUR\": [\"€\"],\n  \"FJD\": [undefined, \"$\"],\n  \"FKP\": [undefined, \"£\"],\n  \"GBP\": [\"£\"],\n  \"GEL\": [undefined, \"₾\"],\n  \"GHS\": [undefined, \"GH₵\"],\n  \"GIP\": [undefined, \"£\"],\n  \"GNF\": [undefined, \"FG\", 0],\n  \"GTQ\": [undefined, \"Q\"],\n  \"GYD\": [undefined, \"$\", 2],\n  \"HKD\": [\"HK$\", \"$\"],\n  \"HNL\": [undefined, \"L\"],\n  \"HRK\": [undefined, \"kn\"],\n  \"HUF\": [undefined, \"Ft\", 2],\n  \"IDR\": [undefined, \"Rp\", 2],\n  \"ILS\": [\"₪\"],\n  \"INR\": [\"₹\"],\n  \"IQD\": [undefined, undefined, 0],\n  \"IRR\": [undefined, undefined, 0],\n  \"ISK\": [undefined, \"kr\", 0],\n  \"ITL\": [undefined, undefined, 0],\n  \"JMD\": [undefined, \"$\"],\n  \"JOD\": [undefined, undefined, 3],\n  \"JPY\": [\"¥\", undefined, 0],\n  \"KHR\": [undefined, \"៛\"],\n  \"KMF\": [undefined, \"CF\", 0],\n  \"KPW\": [undefined, \"₩\", 0],\n  \"KRW\": [\"₩\", undefined, 0],\n  \"KWD\": [undefined, undefined, 3],\n  \"KYD\": [undefined, \"$\"],\n  \"KZT\": [undefined, \"₸\"],\n  \"LAK\": [undefined, \"₭\", 0],\n  \"LBP\": [undefined, \"L£\", 0],\n  \"LKR\": [undefined, \"Rs\"],\n  \"LRD\": [undefined, \"$\"],\n  \"LTL\": [undefined, \"Lt\"],\n  \"LUF\": [undefined, undefined, 0],\n  \"LVL\": [undefined, \"Ls\"],\n  \"LYD\": [undefined, undefined, 3],\n  \"MGA\": [undefined, \"Ar\", 0],\n  \"MGF\": [undefined, undefined, 0],\n  \"MMK\": [undefined, \"K\", 0],\n  \"MNT\": [undefined, \"₮\", 2],\n  \"MRO\": [undefined, undefined, 0],\n  \"MUR\": [undefined, \"Rs\", 2],\n  \"MXN\": [\"MX$\", \"$\"],\n  \"MYR\": [undefined, \"RM\"],\n  \"NAD\": [undefined, \"$\"],\n  \"NGN\": [undefined, \"₦\"],\n  \"NIO\": [undefined, \"C$\"],\n  \"NOK\": [undefined, \"kr\", 2],\n  \"NPR\": [undefined, \"Rs\"],\n  \"NZD\": [\"NZ$\", \"$\"],\n  \"OMR\": [undefined, undefined, 3],\n  \"PHP\": [\"₱\"],\n  \"PKR\": [undefined, \"Rs\", 2],\n  \"PLN\": [undefined, \"zł\"],\n  \"PYG\": [undefined, \"₲\", 0],\n  \"RON\": [undefined, \"lei\"],\n  \"RSD\": [undefined, undefined, 0],\n  \"RUB\": [undefined, \"₽\"],\n  \"RWF\": [undefined, \"RF\", 0],\n  \"SBD\": [undefined, \"$\"],\n  \"SEK\": [undefined, \"kr\", 2],\n  \"SGD\": [undefined, \"$\"],\n  \"SHP\": [undefined, \"£\"],\n  \"SLE\": [undefined, undefined, 2],\n  \"SLL\": [undefined, undefined, 0],\n  \"SOS\": [undefined, undefined, 0],\n  \"SRD\": [undefined, \"$\"],\n  \"SSP\": [undefined, \"£\"],\n  \"STD\": [undefined, undefined, 0],\n  \"STN\": [undefined, \"Db\"],\n  \"SYP\": [undefined, \"£\", 0],\n  \"THB\": [undefined, \"฿\"],\n  \"TMM\": [undefined, undefined, 0],\n  \"TND\": [undefined, undefined, 3],\n  \"TOP\": [undefined, \"T$\"],\n  \"TRL\": [undefined, undefined, 0],\n  \"TRY\": [undefined, \"₺\"],\n  \"TTD\": [undefined, \"$\"],\n  \"TWD\": [\"NT$\", \"$\", 2],\n  \"TZS\": [undefined, undefined, 2],\n  \"UAH\": [undefined, \"₴\"],\n  \"UGX\": [undefined, undefined, 0],\n  \"USD\": [\"$\"],\n  \"UYI\": [undefined, undefined, 0],\n  \"UYU\": [undefined, \"$\"],\n  \"UYW\": [undefined, undefined, 4],\n  \"UZS\": [undefined, undefined, 2],\n  \"VEF\": [undefined, \"Bs\", 2],\n  \"VND\": [\"₫\", undefined, 0],\n  \"VUV\": [undefined, undefined, 0],\n  \"XAF\": [\"FCFA\", undefined, 0],\n  \"XCD\": [\"EC$\", \"$\"],\n  \"XOF\": [\"F CFA\", undefined, 0],\n  \"XPF\": [\"CFPF\", undefined, 0],\n  \"XXX\": [\"¤\"],\n  \"YER\": [undefined, undefined, 0],\n  \"ZAR\": [undefined, \"R\"],\n  \"ZMK\": [undefined, undefined, 0],\n  \"ZMW\": [undefined, \"ZK\"],\n  \"ZWD\": [undefined, undefined, 0]\n};\n\n/**\n * Format styles that can be used to represent numbers.\n * @see {@link getLocaleNumberFormat}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocaleNumberFormat` is deprecated\n */\nvar NumberFormatStyle;\n(function (NumberFormatStyle) {\n  NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\n  NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\n  NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\n  NumberFormatStyle[NumberFormatStyle[\"Scientific\"] = 3] = \"Scientific\";\n})(NumberFormatStyle || (NumberFormatStyle = {}));\n/**\n * Plurality cases used for translating plurals to different languages.\n *\n * @see {@link NgPlural}\n * @see {@link NgPluralCase}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocalePluralCase` is deprecated\n */\nvar Plural;\n(function (Plural) {\n  Plural[Plural[\"Zero\"] = 0] = \"Zero\";\n  Plural[Plural[\"One\"] = 1] = \"One\";\n  Plural[Plural[\"Two\"] = 2] = \"Two\";\n  Plural[Plural[\"Few\"] = 3] = \"Few\";\n  Plural[Plural[\"Many\"] = 4] = \"Many\";\n  Plural[Plural[\"Other\"] = 5] = \"Other\";\n})(Plural || (Plural = {}));\n/**\n * Context-dependant translation forms for strings.\n * Typically the standalone version is for the nominative form of the word,\n * and the format version is used for the genitive case.\n * @see [CLDR website](http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles)\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated locale data getters are deprecated\n */\nvar FormStyle;\n(function (FormStyle) {\n  FormStyle[FormStyle[\"Format\"] = 0] = \"Format\";\n  FormStyle[FormStyle[\"Standalone\"] = 1] = \"Standalone\";\n})(FormStyle || (FormStyle = {}));\n/**\n * String widths available for translations.\n * The specific character widths are locale-specific.\n * Examples are given for the word \"Sunday\" in English.\n *\n * @publicApi\n *\n * @deprecated locale data getters are deprecated\n */\nvar TranslationWidth;\n(function (TranslationWidth) {\n  /** 1 character for `en-US`. For example: 'S' */\n  TranslationWidth[TranslationWidth[\"Narrow\"] = 0] = \"Narrow\";\n  /** 3 characters for `en-US`. For example: 'Sun' */\n  TranslationWidth[TranslationWidth[\"Abbreviated\"] = 1] = \"Abbreviated\";\n  /** Full length for `en-US`. For example: \"Sunday\" */\n  TranslationWidth[TranslationWidth[\"Wide\"] = 2] = \"Wide\";\n  /** 2 characters for `en-US`, For example: \"Su\" */\n  TranslationWidth[TranslationWidth[\"Short\"] = 3] = \"Short\";\n})(TranslationWidth || (TranslationWidth = {}));\n/**\n * String widths available for date-time formats.\n * The specific character widths are locale-specific.\n * Examples are given for `en-US`.\n *\n * @see {@link getLocaleDateFormat}\n * @see {@link getLocaleTimeFormat}\n * @see {@link getLocaleDateTimeFormat}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n * @publicApi\n *\n * @deprecated Date locale data getters are deprecated\n */\nvar FormatWidth;\n(function (FormatWidth) {\n  /**\n   * For `en-US`, `'M/d/yy, h:mm a'`\n   * (Example: `6/15/15, 9:03 AM`)\n   */\n  FormatWidth[FormatWidth[\"Short\"] = 0] = \"Short\";\n  /**\n   * For `en-US`, `'MMM d, y, h:mm:ss a'`\n   * (Example: `Jun 15, 2015, 9:03:01 AM`)\n   */\n  FormatWidth[FormatWidth[\"Medium\"] = 1] = \"Medium\";\n  /**\n   * For `en-US`, `'MMMM d, y, h:mm:ss a z'`\n   * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`)\n   */\n  FormatWidth[FormatWidth[\"Long\"] = 2] = \"Long\";\n  /**\n   * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'`\n   * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`)\n   */\n  FormatWidth[FormatWidth[\"Full\"] = 3] = \"Full\";\n})(FormatWidth || (FormatWidth = {}));\n// This needs to be an object literal, rather than an enum, because TypeScript 5.4+\n// doesn't allow numeric keys and we have `Infinity` and `NaN`.\n/**\n * Symbols that can be used to replace placeholders in number patterns.\n * Examples are based on `en-US` values.\n *\n * @see {@link getLocaleNumberSymbol}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocaleNumberSymbol` is deprecated\n *\n * @object-literal-as-enum\n */\nconst NumberSymbol = {\n  /**\n   * Decimal separator.\n   * For `en-US`, the dot character.\n   * Example: 2,345`.`67\n   */\n  Decimal: 0,\n  /**\n   * Grouping separator, typically for thousands.\n   * For `en-US`, the comma character.\n   * Example: 2`,`345.67\n   */\n  Group: 1,\n  /**\n   * List-item separator.\n   * Example: \"one, two, and three\"\n   */\n  List: 2,\n  /**\n   * Sign for percentage (out of 100).\n   * Example: 23.4%\n   */\n  PercentSign: 3,\n  /**\n   * Sign for positive numbers.\n   * Example: +23\n   */\n  PlusSign: 4,\n  /**\n   * Sign for negative numbers.\n   * Example: -23\n   */\n  MinusSign: 5,\n  /**\n   * Computer notation for exponential value (n times a power of 10).\n   * Example: 1.2E3\n   */\n  Exponential: 6,\n  /**\n   * Human-readable format of exponential.\n   * Example: 1.2x103\n   */\n  SuperscriptingExponent: 7,\n  /**\n   * Sign for permille (out of 1000).\n   * Example: 23.4‰\n   */\n  PerMille: 8,\n  /**\n   * Infinity, can be used with plus and minus.\n   * Example: ∞, +∞, -∞\n   */\n  Infinity: 9,\n  /**\n   * Not a number.\n   * Example: NaN\n   */\n  NaN: 10,\n  /**\n   * Symbol used between time units.\n   * Example: 10:52\n   */\n  TimeSeparator: 11,\n  /**\n   * Decimal separator for currency values (fallback to `Decimal`).\n   * Example: $2,345.67\n   */\n  CurrencyDecimal: 12,\n  /**\n   * Group separator for currency values (fallback to `Group`).\n   * Example: $2,345.67\n   */\n  CurrencyGroup: 13\n};\n/**\n * The value for each day of the week, based on the `en-US` locale\n *\n * @publicApi\n *\n * @deprecated Week locale getters are deprecated\n */\nvar WeekDay;\n(function (WeekDay) {\n  WeekDay[WeekDay[\"Sunday\"] = 0] = \"Sunday\";\n  WeekDay[WeekDay[\"Monday\"] = 1] = \"Monday\";\n  WeekDay[WeekDay[\"Tuesday\"] = 2] = \"Tuesday\";\n  WeekDay[WeekDay[\"Wednesday\"] = 3] = \"Wednesday\";\n  WeekDay[WeekDay[\"Thursday\"] = 4] = \"Thursday\";\n  WeekDay[WeekDay[\"Friday\"] = 5] = \"Friday\";\n  WeekDay[WeekDay[\"Saturday\"] = 6] = \"Saturday\";\n})(WeekDay || (WeekDay = {}));\n/**\n * Retrieves the locale ID from the currently loaded locale.\n * The loaded locale could be, for example, a global one rather than a regional one.\n * @param locale A locale code, such as `fr-FR`.\n * @returns The locale code. For example, `fr`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * This function serves no purpose when relying on the `Intl` API.\n */\nfunction getLocaleId(locale) {\n  return ɵfindLocaleData(locale)[ɵLocaleDataIndex.LocaleId];\n}\n/**\n * Retrieves day period strings for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized period strings. For example, `[AM, PM]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDayPeriods(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const amPmData = [data[ɵLocaleDataIndex.DayPeriodsFormat], data[ɵLocaleDataIndex.DayPeriodsStandalone]];\n  const amPm = getLastDefinedValue(amPmData, formStyle);\n  return getLastDefinedValue(amPm, width);\n}\n/**\n * Retrieves days of the week for the given locale, using the Gregorian calendar.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized name strings.\n * For example,`[Sunday, Monday, ... Saturday]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDayNames(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const daysData = [data[ɵLocaleDataIndex.DaysFormat], data[ɵLocaleDataIndex.DaysStandalone]];\n  const days = getLastDefinedValue(daysData, formStyle);\n  return getLastDefinedValue(days, width);\n}\n/**\n * Retrieves months of the year for the given locale, using the Gregorian calendar.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized name strings.\n * For example,  `[January, February, ...]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleMonthNames(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const monthsData = [data[ɵLocaleDataIndex.MonthsFormat], data[ɵLocaleDataIndex.MonthsStandalone]];\n  const months = getLastDefinedValue(monthsData, formStyle);\n  return getLastDefinedValue(months, width);\n}\n/**\n * Retrieves Gregorian-calendar eras for the given locale.\n * @param locale A locale code for the locale format rules to use.\n * @param width The required character width.\n\n * @returns An array of localized era strings.\n * For example, `[AD, BC]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleEraNames(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  const erasData = data[ɵLocaleDataIndex.Eras];\n  return getLastDefinedValue(erasData, width);\n}\n/**\n * Retrieves the first day of the week for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns A day index number, using the 0-based week-day index for `en-US`\n * (Sunday = 0, Monday = 1, ...).\n * For example, for `fr-FR`, returns 1 to indicate that the first day is Monday.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Intl's [`getWeekInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getWeekInfo) has partial support (Chromium M99 & Safari 17).\n * You may want to rely on the following alternatives:\n * - Libraries like [`Luxon`](https://moment.github.io/luxon/#/) rely on `Intl` but fallback on the ISO 8601 definition (monday) if `getWeekInfo` is not supported.\n * - Other librairies like [`date-fns`](https://date-fns.org/), [`day.js`](https://day.js.org/en/) or [`weekstart`](https://www.npmjs.com/package/weekstart) library provide their own locale based data for the first day of the week.\n */\nfunction getLocaleFirstDayOfWeek(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.FirstDayOfWeek];\n}\n/**\n * Range of week days that are considered the week-end for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The range of day values, `[startDay, endDay]`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Intl's [`getWeekInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getWeekInfo) has partial support (Chromium M99 & Safari 17).\n * Libraries like [`Luxon`](https://moment.github.io/luxon/#/) rely on `Intl` but fallback on the ISO 8601 definition (Saturday+Sunday) if `getWeekInfo` is not supported .\n */\nfunction getLocaleWeekEndRange(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.WeekendRange];\n}\n/**\n * Retrieves a localized date-value formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDateFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.DateFormat], width);\n}\n/**\n * Retrieves a localized time-value formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n\n * @publicApi\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleTimeFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.TimeFormat], width);\n}\n/**\n * Retrieves a localized date-time formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDateTimeFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  const dateTimeFormatData = data[ɵLocaleDataIndex.DateTimeFormat];\n  return getLastDefinedValue(dateTimeFormatData, width);\n}\n/**\n * Retrieves a localized number symbol that can be used to replace placeholders in number formats.\n * @param locale The locale code.\n * @param symbol The symbol to localize. Must be one of `NumberSymbol`.\n * @returns The character for the localized symbol.\n * @see {@link NumberSymbol}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.NumberFormat` to format numbers instead.\n */\nfunction getLocaleNumberSymbol(locale, symbol) {\n  const data = ɵfindLocaleData(locale);\n  const res = data[ɵLocaleDataIndex.NumberSymbols][symbol];\n  if (typeof res === 'undefined') {\n    if (symbol === NumberSymbol.CurrencyDecimal) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];\n    } else if (symbol === NumberSymbol.CurrencyGroup) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Group];\n    }\n  }\n  return res;\n}\n/**\n * Retrieves a number format for a given locale.\n *\n * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00`\n * when used to format the number 12345.678 could result in \"12'345,678\". That would happen if the\n * grouping separator for your language is an apostrophe, and the decimal separator is a comma.\n *\n * <b>Important:</b> The characters `.` `,` `0` `#` (and others below) are special placeholders\n * that stand for the decimal separator, and so on, and are NOT real characters.\n * You must NOT \"translate\" the placeholders. For example, don't change `.` to `,` even though in\n * your language the decimal point is written with a comma. The symbols should be replaced by the\n * local equivalents, using the appropriate `NumberSymbol` for your language.\n *\n * Here are the special characters used in number patterns:\n *\n * | Symbol | Meaning |\n * |--------|---------|\n * | . | Replaced automatically by the character used for the decimal point. |\n * | , | Replaced by the \"grouping\" (thousands) separator. |\n * | 0 | Replaced by a digit (or zero if there aren't enough digits). |\n * | # | Replaced by a digit (or nothing if there aren't enough). |\n * | ¤ | Replaced by a currency symbol, such as $ or USD. |\n * | % | Marks a percent format. The % symbol may change position, but must be retained. |\n * | E | Marks a scientific format. The E symbol may change position, but must be retained. |\n * | ' | Special characters used as literal characters are quoted with ASCII single quotes. |\n *\n * @param locale A locale code for the locale format rules to use.\n * @param type The type of numeric value to be formatted (such as `Decimal` or `Currency`.)\n * @returns The localized format string.\n * @see {@link NumberFormatStyle}\n * @see [CLDR website](http://cldr.unicode.org/translation/number-patterns)\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Let `Intl.NumberFormat` determine the number format instead\n */\nfunction getLocaleNumberFormat(locale, type) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.NumberFormats][type];\n}\n/**\n * Retrieves the symbol used to represent the currency for the main country\n * corresponding to a given locale. For example, '$' for `en-US`.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The localized symbol character,\n * or `null` if the main country cannot be determined.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Use the `Intl` API to format a currency with from currency code\n */\nfunction getLocaleCurrencySymbol(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.CurrencySymbol] || null;\n}\n/**\n * Retrieves the name of the currency for the main country corresponding\n * to a given locale. For example, 'US Dollar' for `en-US`.\n * @param locale A locale code for the locale format rules to use.\n * @returns The currency name,\n * or `null` if the main country cannot be determined.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Use the `Intl` API to format a currency with from currency code\n */\nfunction getLocaleCurrencyName(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.CurrencyName] || null;\n}\n/**\n * Retrieves the default currency code for the given locale.\n *\n * The default is defined as the first currency which is still in use.\n *\n * @param locale The code of the locale whose currency code we want.\n * @returns The code of the default currency for the given locale.\n *\n * @publicApi\n *\n * @deprecated We recommend you create a map of locale to ISO 4217 currency codes.\n * Time relative currency data is provided by the CLDR project. See https://www.unicode.org/cldr/charts/44/supplemental/detailed_territory_currency_information.html\n */\nfunction getLocaleCurrencyCode(locale) {\n  return ɵgetLocaleCurrencyCode(locale);\n}\n/**\n * Retrieves the currency values for a given locale.\n * @param locale A locale code for the locale format rules to use.\n * @returns The currency values.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n */\nfunction getLocaleCurrencies(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.Currencies];\n}\n/**\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.PluralRules` instead\n */\nconst getLocalePluralCase = ɵgetLocalePluralCase;\nfunction checkFullData(data) {\n  if (!data[ɵLocaleDataIndex.ExtraData]) {\n    throw new Error(`Missing extra locale data for the locale \"${data[ɵLocaleDataIndex.LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n  }\n}\n/**\n * Retrieves locale-specific rules used to determine which day period to use\n * when more than one period is defined for a locale.\n *\n * There is a rule for each defined day period. The\n * first rule is applied to the first day period and so on.\n * Fall back to AM/PM when no rules are available.\n *\n * A rule can specify a period as time range, or as a single time value.\n *\n * This functionality is only available when you have loaded the full locale data.\n * See the [\"I18n guide\"](guide/i18n/format-data-locale).\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The rules for the locale, a single time value or array of *from-time, to-time*,\n * or null if no periods are available.\n *\n * @see {@link getLocaleExtraDayPeriods}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Let `Intl.DateTimeFormat` determine the day period instead.\n */\nfunction getLocaleExtraDayPeriodRules(locale) {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const rules = data[ɵLocaleDataIndex.ExtraData][2 /* ɵExtraLocaleDataIndex.ExtraDayPeriodsRules */] || [];\n  return rules.map(rule => {\n    if (typeof rule === 'string') {\n      return extractTime(rule);\n    }\n    return [extractTime(rule[0]), extractTime(rule[1])];\n  });\n}\n/**\n * Retrieves locale-specific day periods, which indicate roughly how a day is broken up\n * in different languages.\n * For example, for `en-US`, periods are morning, noon, afternoon, evening, and midnight.\n *\n * This functionality is only available when you have loaded the full locale data.\n * See the [\"I18n guide\"](guide/i18n/format-data-locale).\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns The translated day-period strings.\n * @see {@link getLocaleExtraDayPeriodRules}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * To extract a day period use `Intl.DateTimeFormat` with the `dayPeriod` option instead.\n */\nfunction getLocaleExtraDayPeriods(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const dayPeriodsData = [data[ɵLocaleDataIndex.ExtraData][0 /* ɵExtraLocaleDataIndex.ExtraDayPeriodFormats */], data[ɵLocaleDataIndex.ExtraData][1 /* ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone */]];\n  const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n  return getLastDefinedValue(dayPeriods, width) || [];\n}\n/**\n * Retrieves the writing direction of a specified locale\n * @param locale A locale code for the locale format rules to use.\n * @publicApi\n * @returns 'rtl' or 'ltr'\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * For dates and numbers, let `Intl.DateTimeFormat()` and `Intl.NumberFormat()` determine the writing direction.\n * The `Intl` alternative [`getTextInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo).\n * has only partial support (Chromium M99 & Safari 17).\n * 3rd party alternatives like [`rtl-detect`](https://www.npmjs.com/package/rtl-detect) can work around this issue.\n */\nfunction getLocaleDirection(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.Directionality];\n}\n/**\n * Retrieves the first value that is defined in an array, going backwards from an index position.\n *\n * To avoid repeating the same data (as when the \"format\" and \"standalone\" forms are the same)\n * add the first value to the locale data arrays, and add other values only if they are different.\n *\n * @param data The data array to retrieve from.\n * @param index A 0-based index into the array to start from.\n * @returns The value immediately before the given index position.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n */\nfunction getLastDefinedValue(data, index) {\n  for (let i = index; i > -1; i--) {\n    if (typeof data[i] !== 'undefined') {\n      return data[i];\n    }\n  }\n  throw new Error('Locale data API: locale data undefined');\n}\n/**\n * Extracts the hours and minutes from a string like \"15:45\"\n */\nfunction extractTime(time) {\n  const [h, m] = time.split(':');\n  return {\n    hours: +h,\n    minutes: +m\n  };\n}\n/**\n * Retrieves the currency symbol for a given currency code.\n *\n * For example, for the default `en-US` locale, the code `USD` can\n * be represented by the narrow symbol `$` or the wide symbol `US$`.\n *\n * @param code The currency code.\n * @param format The format, `wide` or `narrow`.\n * @param locale A locale code for the locale format rules to use.\n *\n * @returns The symbol, or the currency code if no symbol is available.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * You can use `Intl.NumberFormat().formatToParts()` to extract the currency symbol.\n * For example: `Intl.NumberFormat('en', {style:'currency', currency: 'USD'}).formatToParts().find(part => part.type === 'currency').value`\n * returns `$` for USD currency code in the `en` locale.\n * Note: `US$` is a currency symbol for the `en-ca` locale but not the `en-us` locale.\n */\nfunction getCurrencySymbol(code, format, locale = 'en') {\n  const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];\n  const symbolNarrow = currency[1 /* ɵCurrencyIndex.SymbolNarrow */];\n  if (format === 'narrow' && typeof symbolNarrow === 'string') {\n    return symbolNarrow;\n  }\n  return currency[0 /* ɵCurrencyIndex.Symbol */] || code;\n}\n// Most currencies have cents, that's why the default is 2\nconst DEFAULT_NB_OF_CURRENCY_DIGITS = 2;\n/**\n * Reports the number of decimal digits for a given currency.\n * The value depends upon the presence of cents in that particular currency.\n *\n * @param code The currency code.\n * @returns The number of decimal digits, typically 0 or 2.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * This function should not be used anymore. Let `Intl.NumberFormat` determine the number of digits to display for the currency\n */\nfunction getNumberOfCurrencyDigits(code) {\n  let digits;\n  const currency = CURRENCIES_EN[code];\n  if (currency) {\n    digits = currency[2 /* ɵCurrencyIndex.NbOfDigits */];\n  }\n  return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;\n}\nconst ISO8601_DATE_REGEX = /^(\\d{4,})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n//    1        2       3         4          5          6          7          8  9     10      11\nconst NAMED_FORMATS = {};\nconst DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;\nvar ZoneWidth;\n(function (ZoneWidth) {\n  ZoneWidth[ZoneWidth[\"Short\"] = 0] = \"Short\";\n  ZoneWidth[ZoneWidth[\"ShortGMT\"] = 1] = \"ShortGMT\";\n  ZoneWidth[ZoneWidth[\"Long\"] = 2] = \"Long\";\n  ZoneWidth[ZoneWidth[\"Extended\"] = 3] = \"Extended\";\n})(ZoneWidth || (ZoneWidth = {}));\nvar DateType;\n(function (DateType) {\n  DateType[DateType[\"FullYear\"] = 0] = \"FullYear\";\n  DateType[DateType[\"Month\"] = 1] = \"Month\";\n  DateType[DateType[\"Date\"] = 2] = \"Date\";\n  DateType[DateType[\"Hours\"] = 3] = \"Hours\";\n  DateType[DateType[\"Minutes\"] = 4] = \"Minutes\";\n  DateType[DateType[\"Seconds\"] = 5] = \"Seconds\";\n  DateType[DateType[\"FractionalSeconds\"] = 6] = \"FractionalSeconds\";\n  DateType[DateType[\"Day\"] = 7] = \"Day\";\n})(DateType || (DateType = {}));\nvar TranslationType;\n(function (TranslationType) {\n  TranslationType[TranslationType[\"DayPeriods\"] = 0] = \"DayPeriods\";\n  TranslationType[TranslationType[\"Days\"] = 1] = \"Days\";\n  TranslationType[TranslationType[\"Months\"] = 2] = \"Months\";\n  TranslationType[TranslationType[\"Eras\"] = 3] = \"Eras\";\n})(TranslationType || (TranslationType = {}));\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a date according to locale rules.\n *\n * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch)\n * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime).\n * @param format The date-time components to include. See `DatePipe` for details.\n * @param locale A locale code for the locale format rules to use.\n * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`).\n * If not specified, uses host system settings.\n *\n * @returns The formatted date string.\n *\n * @see {@link DatePipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatDate(value, format, locale, timezone) {\n  let date = toDate(value);\n  const namedFormat = getNamedFormat(locale, format);\n  format = namedFormat || format;\n  let parts = [];\n  let match;\n  while (format) {\n    match = DATE_FORMATS_SPLIT.exec(format);\n    if (match) {\n      parts = parts.concat(match.slice(1));\n      const part = parts.pop();\n      if (!part) {\n        break;\n      }\n      format = part;\n    } else {\n      parts.push(format);\n      break;\n    }\n  }\n  let dateTimezoneOffset = date.getTimezoneOffset();\n  if (timezone) {\n    dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n    date = convertTimezoneToLocal(date, timezone, true);\n  }\n  let text = '';\n  parts.forEach(value => {\n    const dateFormatter = getDateFormatter(value);\n    text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n  });\n  return text;\n}\n/**\n * Create a new Date object with the given date value, and the time set to midnight.\n *\n * We cannot use `new Date(year, month, date)` because it maps years between 0 and 99 to 1900-1999.\n * See: https://github.com/angular/angular/issues/40377\n *\n * Note that this function returns a Date object whose time is midnight in the current locale's\n * timezone. In the future we might want to change this to be midnight in UTC, but this would be a\n * considerable breaking change.\n */\nfunction createDate(year, month, date) {\n  // The `newDate` is set to midnight (UTC) on January 1st 1970.\n  // - In PST this will be December 31st 1969 at 4pm.\n  // - In GMT this will be January 1st 1970 at 1am.\n  // Note that they even have different years, dates and months!\n  const newDate = new Date(0);\n  // `setFullYear()` allows years like 0001 to be set correctly. This function does not\n  // change the internal time of the date.\n  // Consider calling `setFullYear(2019, 8, 20)` (September 20, 2019).\n  // - In PST this will now be September 20, 2019 at 4pm\n  // - In GMT this will now be September 20, 2019 at 1am\n  newDate.setFullYear(year, month, date);\n  // We want the final date to be at local midnight, so we reset the time.\n  // - In PST this will now be September 20, 2019 at 12am\n  // - In GMT this will now be September 20, 2019 at 12am\n  newDate.setHours(0, 0, 0);\n  return newDate;\n}\nfunction getNamedFormat(locale, format) {\n  const localeId = getLocaleId(locale);\n  NAMED_FORMATS[localeId] ??= {};\n  if (NAMED_FORMATS[localeId][format]) {\n    return NAMED_FORMATS[localeId][format];\n  }\n  let formatValue = '';\n  switch (format) {\n    case 'shortDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Full);\n      break;\n    case 'shortTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n      break;\n    case 'short':\n      const shortTime = getNamedFormat(locale, 'shortTime');\n      const shortDate = getNamedFormat(locale, 'shortDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n      break;\n    case 'medium':\n      const mediumTime = getNamedFormat(locale, 'mediumTime');\n      const mediumDate = getNamedFormat(locale, 'mediumDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n      break;\n    case 'long':\n      const longTime = getNamedFormat(locale, 'longTime');\n      const longDate = getNamedFormat(locale, 'longDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n      break;\n    case 'full':\n      const fullTime = getNamedFormat(locale, 'fullTime');\n      const fullDate = getNamedFormat(locale, 'fullDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n      break;\n  }\n  if (formatValue) {\n    NAMED_FORMATS[localeId][format] = formatValue;\n  }\n  return formatValue;\n}\nfunction formatDateTime(str, opt_values) {\n  if (opt_values) {\n    str = str.replace(/\\{([^}]+)}/g, function (match, key) {\n      return opt_values != null && key in opt_values ? opt_values[key] : match;\n    });\n  }\n  return str;\n}\nfunction padNumber(num, digits, minusSign = '-', trim, negWrap) {\n  let neg = '';\n  if (num < 0 || negWrap && num <= 0) {\n    if (negWrap) {\n      num = -num + 1;\n    } else {\n      num = -num;\n      neg = minusSign;\n    }\n  }\n  let strNum = String(num);\n  while (strNum.length < digits) {\n    strNum = '0' + strNum;\n  }\n  if (trim) {\n    strNum = strNum.slice(strNum.length - digits);\n  }\n  return neg + strNum;\n}\nfunction formatFractionalSeconds(milliseconds, digits) {\n  const strMs = padNumber(milliseconds, 3);\n  return strMs.substring(0, digits);\n}\n/**\n * Returns a date formatter that transforms a date into its locale digit representation\n */\nfunction dateGetter(name, size, offset = 0, trim = false, negWrap = false) {\n  return function (date, locale) {\n    let part = getDatePart(name, date);\n    if (offset > 0 || part > -offset) {\n      part += offset;\n    }\n    if (name === DateType.Hours) {\n      if (part === 0 && offset === -12) {\n        part = 12;\n      }\n    } else if (name === DateType.FractionalSeconds) {\n      return formatFractionalSeconds(part, size);\n    }\n    const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    return padNumber(part, size, localeMinus, trim, negWrap);\n  };\n}\nfunction getDatePart(part, date) {\n  switch (part) {\n    case DateType.FullYear:\n      return date.getFullYear();\n    case DateType.Month:\n      return date.getMonth();\n    case DateType.Date:\n      return date.getDate();\n    case DateType.Hours:\n      return date.getHours();\n    case DateType.Minutes:\n      return date.getMinutes();\n    case DateType.Seconds:\n      return date.getSeconds();\n    case DateType.FractionalSeconds:\n      return date.getMilliseconds();\n    case DateType.Day:\n      return date.getDay();\n    default:\n      throw new Error(`Unknown DateType value \"${part}\".`);\n  }\n}\n/**\n * Returns a date formatter that transforms a date into its locale string representation\n */\nfunction dateStrGetter(name, width, form = FormStyle.Format, extended = false) {\n  return function (date, locale) {\n    return getDateTranslation(date, locale, name, width, form, extended);\n  };\n}\n/**\n * Returns the locale translation of a date for a given form, type and width\n */\nfunction getDateTranslation(date, locale, name, width, form, extended) {\n  switch (name) {\n    case TranslationType.Months:\n      return getLocaleMonthNames(locale, form, width)[date.getMonth()];\n    case TranslationType.Days:\n      return getLocaleDayNames(locale, form, width)[date.getDay()];\n    case TranslationType.DayPeriods:\n      const currentHours = date.getHours();\n      const currentMinutes = date.getMinutes();\n      if (extended) {\n        const rules = getLocaleExtraDayPeriodRules(locale);\n        const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n        const index = rules.findIndex(rule => {\n          if (Array.isArray(rule)) {\n            // morning, afternoon, evening, night\n            const [from, to] = rule;\n            const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;\n            const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;\n            // We must account for normal rules that span a period during the day (e.g. 6am-9am)\n            // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g.\n            // 10pm - 5am) where `from` is greater (later!) than `to`.\n            //\n            // In the first case the current time must be BOTH after `from` AND before `to`\n            // (e.g. 8am is after 6am AND before 10am).\n            //\n            // In the second case the current time must be EITHER after `from` OR before `to`\n            // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is\n            // after 10pm).\n            if (from.hours < to.hours) {\n              if (afterFrom && beforeTo) {\n                return true;\n              }\n            } else if (afterFrom || beforeTo) {\n              return true;\n            }\n          } else {\n            // noon or midnight\n            if (rule.hours === currentHours && rule.minutes === currentMinutes) {\n              return true;\n            }\n          }\n          return false;\n        });\n        if (index !== -1) {\n          return dayPeriods[index];\n        }\n      }\n      // if no rules for the day periods, we use am/pm by default\n      return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];\n    case TranslationType.Eras:\n      return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];\n    default:\n      // This default case is not needed by TypeScript compiler, as the switch is exhaustive.\n      // However Closure Compiler does not understand that and reports an error in typed mode.\n      // The `throw new Error` below works around the problem, and the unexpected: never variable\n      // makes sure tsc still checks this code is unreachable.\n      const unexpected = name;\n      throw new Error(`unexpected translation type ${unexpected}`);\n  }\n}\n/**\n * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or\n * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30,\n * extended = +04:30)\n */\nfunction timeZoneGetter(width) {\n  return function (date, locale, offset) {\n    const zone = -1 * offset;\n    const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);\n    switch (width) {\n      case ZoneWidth.Short:\n        return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.ShortGMT:\n        return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);\n      case ZoneWidth.Long:\n        return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.Extended:\n        if (offset === 0) {\n          return 'Z';\n        } else {\n          return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n        }\n      default:\n        throw new Error(`Unknown zone width \"${width}\"`);\n    }\n  };\n}\nconst JANUARY = 0;\nconst THURSDAY = 4;\nfunction getFirstThursdayOfYear(year) {\n  const firstDayOfYear = createDate(year, JANUARY, 1).getDay();\n  return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\n/**\n *  ISO Week starts on day 1 (Monday) and ends with day 0 (Sunday)\n */\nfunction getThursdayThisIsoWeek(datetime) {\n  // getDay returns 0-6 range with sunday as 0.\n  const currentDay = datetime.getDay();\n  // On a Sunday, read the previous Thursday since ISO weeks start on Monday.\n  const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;\n  return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);\n}\nfunction weekGetter(size, monthBased = false) {\n  return function (date, locale) {\n    let result;\n    if (monthBased) {\n      const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n      const today = date.getDate();\n      result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n    } else {\n      const thisThurs = getThursdayThisIsoWeek(date);\n      // Some days of a year are part of next year according to ISO 8601.\n      // Compute the firstThurs from the year of this week's Thursday\n      const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());\n      const diff = thisThurs.getTime() - firstThurs.getTime();\n      result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week\n    }\n    return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  };\n}\n/**\n * Returns a date formatter that provides the week-numbering year for the input date.\n */\nfunction weekNumberingYearGetter(size, trim = false) {\n  return function (date, locale) {\n    const thisThurs = getThursdayThisIsoWeek(date);\n    const weekNumberingYear = thisThurs.getFullYear();\n    return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);\n  };\n}\nconst DATE_FORMATS = {};\n// Based on CLDR formats:\n// See complete list: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n// See also explanations: http://cldr.unicode.org/translation/date-time\n// TODO(ocombe): support all missing cldr formats: U, Q, D, F, e, j, J, C, A, v, V, X, x\nfunction getDateFormatter(format) {\n  if (DATE_FORMATS[format]) {\n    return DATE_FORMATS[format];\n  }\n  let formatter;\n  switch (format) {\n    // Era name (AD/BC)\n    case 'G':\n    case 'GG':\n    case 'GGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);\n      break;\n    case 'GGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);\n      break;\n    case 'GGGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);\n      break;\n    // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'y':\n      formatter = dateGetter(DateType.FullYear, 1, 0, false, true);\n      break;\n    // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yy':\n      formatter = dateGetter(DateType.FullYear, 2, 0, true, true);\n      break;\n    // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yyy':\n      formatter = dateGetter(DateType.FullYear, 3, 0, false, true);\n      break;\n    // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'yyyy':\n      formatter = dateGetter(DateType.FullYear, 4, 0, false, true);\n      break;\n    // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'Y':\n      formatter = weekNumberingYearGetter(1);\n      break;\n    // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD\n    // 2010 => 10)\n    case 'YY':\n      formatter = weekNumberingYearGetter(2, true);\n      break;\n    // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD\n    // 2010 => 2010)\n    case 'YYY':\n      formatter = weekNumberingYearGetter(3);\n      break;\n    // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'YYYY':\n      formatter = weekNumberingYearGetter(4);\n      break;\n    // Month of the year (1-12), numeric\n    case 'M':\n    case 'L':\n      formatter = dateGetter(DateType.Month, 1, 1);\n      break;\n    case 'MM':\n    case 'LL':\n      formatter = dateGetter(DateType.Month, 2, 1);\n      break;\n    // Month of the year (January, ...), string, format\n    case 'MMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);\n      break;\n    case 'MMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);\n      break;\n    case 'MMMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);\n      break;\n    // Month of the year (January, ...), string, standalone\n    case 'LLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);\n      break;\n    case 'LLLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);\n      break;\n    case 'LLLLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);\n      break;\n    // Week of the year (1, ... 52)\n    case 'w':\n      formatter = weekGetter(1);\n      break;\n    case 'ww':\n      formatter = weekGetter(2);\n      break;\n    // Week of the month (1, ...)\n    case 'W':\n      formatter = weekGetter(1, true);\n      break;\n    // Day of the month (1-31)\n    case 'd':\n      formatter = dateGetter(DateType.Date, 1);\n      break;\n    case 'dd':\n      formatter = dateGetter(DateType.Date, 2);\n      break;\n    // Day of the Week StandAlone (1, 1, Mon, Monday, M, Mo)\n    case 'c':\n    case 'cc':\n      formatter = dateGetter(DateType.Day, 1);\n      break;\n    case 'ccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone);\n      break;\n    case 'cccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone);\n      break;\n    case 'ccccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone);\n      break;\n    case 'cccccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone);\n      break;\n    // Day of the Week\n    case 'E':\n    case 'EE':\n    case 'EEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);\n      break;\n    case 'EEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);\n      break;\n    case 'EEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);\n      break;\n    case 'EEEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);\n      break;\n    // Generic period of the day (am-pm)\n    case 'a':\n    case 'aa':\n    case 'aaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);\n      break;\n    case 'aaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);\n      break;\n    case 'aaaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);\n      break;\n    // Extended period of the day (midnight, at night, ...), standalone\n    case 'b':\n    case 'bb':\n    case 'bbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);\n      break;\n    case 'bbbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);\n      break;\n    case 'bbbbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);\n      break;\n    // Extended period of the day (midnight, night, ...), standalone\n    case 'B':\n    case 'BB':\n    case 'BBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);\n      break;\n    case 'BBBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);\n      break;\n    case 'BBBBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);\n      break;\n    // Hour in AM/PM, (1-12)\n    case 'h':\n      formatter = dateGetter(DateType.Hours, 1, -12);\n      break;\n    case 'hh':\n      formatter = dateGetter(DateType.Hours, 2, -12);\n      break;\n    // Hour of the day (0-23)\n    case 'H':\n      formatter = dateGetter(DateType.Hours, 1);\n      break;\n    // Hour in day, padded (00-23)\n    case 'HH':\n      formatter = dateGetter(DateType.Hours, 2);\n      break;\n    // Minute of the hour (0-59)\n    case 'm':\n      formatter = dateGetter(DateType.Minutes, 1);\n      break;\n    case 'mm':\n      formatter = dateGetter(DateType.Minutes, 2);\n      break;\n    // Second of the minute (0-59)\n    case 's':\n      formatter = dateGetter(DateType.Seconds, 1);\n      break;\n    case 'ss':\n      formatter = dateGetter(DateType.Seconds, 2);\n      break;\n    // Fractional second\n    case 'S':\n      formatter = dateGetter(DateType.FractionalSeconds, 1);\n      break;\n    case 'SS':\n      formatter = dateGetter(DateType.FractionalSeconds, 2);\n      break;\n    case 'SSS':\n      formatter = dateGetter(DateType.FractionalSeconds, 3);\n      break;\n    // Timezone ISO8601 short format (-0430)\n    case 'Z':\n    case 'ZZ':\n    case 'ZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Short);\n      break;\n    // Timezone ISO8601 extended format (-04:30)\n    case 'ZZZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Extended);\n      break;\n    // Timezone GMT short format (GMT+4)\n    case 'O':\n    case 'OO':\n    case 'OOO':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'z':\n    case 'zz':\n    case 'zzz':\n      formatter = timeZoneGetter(ZoneWidth.ShortGMT);\n      break;\n    // Timezone GMT long format (GMT+0430)\n    case 'OOOO':\n    case 'ZZZZ':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'zzzz':\n      formatter = timeZoneGetter(ZoneWidth.Long);\n      break;\n    default:\n      return null;\n  }\n  DATE_FORMATS[format] = formatter;\n  return formatter;\n}\nfunction timezoneToOffset(timezone, fallback) {\n  // Support: IE 11 only, Edge 13-15+\n  // IE/Edge do not \"understand\" colon (`:`) in timezone\n  timezone = timezone.replace(/:/g, '');\n  const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\nfunction addDateMinutes(date, minutes) {\n  date = new Date(date.getTime());\n  date.setMinutes(date.getMinutes() + minutes);\n  return date;\n}\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n  const reverseValue = reverse ? -1 : 1;\n  const dateTimezoneOffset = date.getTimezoneOffset();\n  const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n  return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\n/**\n * Converts a value to date.\n *\n * Supported input formats:\n * - `Date`\n * - number: timestamp\n * - string: numeric (e.g. \"1234\"), ISO and date strings in a format supported by\n *   [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n *   Note: ISO strings without time return a date without timeoffset.\n *\n * Throws if unable to convert to a date.\n */\nfunction toDate(value) {\n  if (isDate(value)) {\n    return value;\n  }\n  if (typeof value === 'number' && !isNaN(value)) {\n    return new Date(value);\n  }\n  if (typeof value === 'string') {\n    value = value.trim();\n    if (/^(\\d{4}(-\\d{1,2}(-\\d{1,2})?)?)$/.test(value)) {\n      /* For ISO Strings without time the day, month and year must be extracted from the ISO String\n      before Date creation to avoid time offset and errors in the new Date.\n      If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n      date, some browsers (e.g. IE 9) will throw an invalid Date error.\n      If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n      is applied.\n      Note: ISO months are 0 for January, 1 for February, ... */\n      const [y, m = 1, d = 1] = value.split('-').map(val => +val);\n      return createDate(y, m - 1, d);\n    }\n    const parsedNb = parseFloat(value);\n    // any string that only contains numbers, like \"1234\" but not like \"1234hello\"\n    if (!isNaN(value - parsedNb)) {\n      return new Date(parsedNb);\n    }\n    let match;\n    if (match = value.match(ISO8601_DATE_REGEX)) {\n      return isoStringToDate(match);\n    }\n  }\n  const date = new Date(value);\n  if (!isDate(date)) {\n    throw new Error(`Unable to convert \"${value}\" into a date`);\n  }\n  return date;\n}\n/**\n * Converts a date in ISO8601 to a Date.\n * Used instead of `Date.parse` because of browser discrepancies.\n */\nfunction isoStringToDate(match) {\n  const date = new Date(0);\n  let tzHour = 0;\n  let tzMin = 0;\n  // match[8] means that the string contains \"Z\" (UTC) or a timezone like \"+01:00\" or \"+0100\"\n  const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n  const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n  // if there is a timezone defined like \"+01:00\" or \"+0100\"\n  if (match[9]) {\n    tzHour = Number(match[9] + match[10]);\n    tzMin = Number(match[9] + match[11]);\n  }\n  dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n  const h = Number(match[4] || 0) - tzHour;\n  const m = Number(match[5] || 0) - tzMin;\n  const s = Number(match[6] || 0);\n  // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11)\n  // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms`\n  // becomes `999ms`.\n  const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);\n  timeSetter.call(date, h, m, s, ms);\n  return date;\n}\nfunction isDate(value) {\n  return value instanceof Date && !isNaN(value.valueOf());\n}\nconst NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\nconst MAX_DIGITS = 22;\nconst DECIMAL_SEP = '.';\nconst ZERO_CHAR = '0';\nconst PATTERN_SEP = ';';\nconst GROUP_SEP = ',';\nconst DIGIT_CHAR = '#';\nconst CURRENCY_CHAR = '¤';\nconst PERCENT_CHAR = '%';\n/**\n * Transforms a number to a locale string based on a style and a format.\n */\nfunction formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {\n  let formattedText = '';\n  let isZero = false;\n  if (!isFinite(value)) {\n    formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);\n  } else {\n    let parsedNumber = parseNumber(value);\n    if (isPercent) {\n      parsedNumber = toPercent(parsedNumber);\n    }\n    let minInt = pattern.minInt;\n    let minFraction = pattern.minFrac;\n    let maxFraction = pattern.maxFrac;\n    if (digitsInfo) {\n      const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n      if (parts === null) {\n        throw new Error(`${digitsInfo} is not a valid digit info`);\n      }\n      const minIntPart = parts[1];\n      const minFractionPart = parts[3];\n      const maxFractionPart = parts[5];\n      if (minIntPart != null) {\n        minInt = parseIntAutoRadix(minIntPart);\n      }\n      if (minFractionPart != null) {\n        minFraction = parseIntAutoRadix(minFractionPart);\n      }\n      if (maxFractionPart != null) {\n        maxFraction = parseIntAutoRadix(maxFractionPart);\n      } else if (minFractionPart != null && minFraction > maxFraction) {\n        maxFraction = minFraction;\n      }\n    }\n    roundNumber(parsedNumber, minFraction, maxFraction);\n    let digits = parsedNumber.digits;\n    let integerLen = parsedNumber.integerLen;\n    const exponent = parsedNumber.exponent;\n    let decimals = [];\n    isZero = digits.every(d => !d);\n    // pad zeros for small numbers\n    for (; integerLen < minInt; integerLen++) {\n      digits.unshift(0);\n    }\n    // pad zeros for small numbers\n    for (; integerLen < 0; integerLen++) {\n      digits.unshift(0);\n    }\n    // extract decimals digits\n    if (integerLen > 0) {\n      decimals = digits.splice(integerLen, digits.length);\n    } else {\n      decimals = digits;\n      digits = [0];\n    }\n    // format the integer digits with grouping separators\n    const groups = [];\n    if (digits.length >= pattern.lgSize) {\n      groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));\n    }\n    while (digits.length > pattern.gSize) {\n      groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));\n    }\n    if (digits.length) {\n      groups.unshift(digits.join(''));\n    }\n    formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));\n    // append the decimal digits\n    if (decimals.length) {\n      formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');\n    }\n    if (exponent) {\n      formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;\n    }\n  }\n  if (value < 0 && !isZero) {\n    formattedText = pattern.negPre + formattedText + pattern.negSuf;\n  } else {\n    formattedText = pattern.posPre + formattedText + pattern.posSuf;\n  }\n  return formattedText;\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as currency using locale rules.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param currency A string containing the currency symbol or its name,\n * such as \"$\" or \"Canadian Dollar\". Used in output string, but does not affect the operation\n * of the function.\n * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)\n * currency code, such as `USD` for the US dollar and `EUR` for the euro.\n * Used to determine the number of digits in the decimal part.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted currency value.\n *\n * @see {@link formatNumber}\n * @see {@link DecimalPipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatCurrency(value, locale, currency, currencyCode, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);\n  pattern.maxFrac = pattern.minFrac;\n  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);\n  return res.replace(CURRENCY_CHAR, currency)\n  // if we have 2 time the currency character, the second one is ignored\n  .replace(CURRENCY_CHAR, '')\n  // If there is a spacing between currency character and the value and\n  // the currency character is suppressed by passing an empty string, the\n  // spacing character would remain as part of the string. Then we\n  // should remove it.\n  .trim();\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as a percentage according to locale rules.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted percentage value.\n *\n * @see {@link formatNumber}\n * @see {@link DecimalPipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n * @publicApi\n *\n */\nfunction formatPercent(value, locale, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);\n  return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as text, with group sizing, separator, and other\n * parameters based on the locale.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted text string.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatNumber(value, locale, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);\n}\nfunction parseNumberFormat(format, minusSign = '-') {\n  const p = {\n    minInt: 1,\n    minFrac: 0,\n    maxFrac: 0,\n    posPre: '',\n    posSuf: '',\n    negPre: '',\n    negSuf: '',\n    gSize: 0,\n    lgSize: 0\n  };\n  const patternParts = format.split(PATTERN_SEP);\n  const positive = patternParts[0];\n  const negative = patternParts[1];\n  const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],\n    integer = positiveParts[0],\n    fraction = positiveParts[1] || '';\n  p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));\n  for (let i = 0; i < fraction.length; i++) {\n    const ch = fraction.charAt(i);\n    if (ch === ZERO_CHAR) {\n      p.minFrac = p.maxFrac = i + 1;\n    } else if (ch === DIGIT_CHAR) {\n      p.maxFrac = i + 1;\n    } else {\n      p.posSuf += ch;\n    }\n  }\n  const groups = integer.split(GROUP_SEP);\n  p.gSize = groups[1] ? groups[1].length : 0;\n  p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;\n  if (negative) {\n    const trunkLen = positive.length - p.posPre.length - p.posSuf.length,\n      pos = negative.indexOf(DIGIT_CHAR);\n    p.negPre = negative.substring(0, pos).replace(/'/g, '');\n    p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, '');\n  } else {\n    p.negPre = minusSign + p.posPre;\n    p.negSuf = p.posSuf;\n  }\n  return p;\n}\n// Transforms a parsed number into a percentage by multiplying it by 100\nfunction toPercent(parsedNumber) {\n  // if the number is 0, don't do anything\n  if (parsedNumber.digits[0] === 0) {\n    return parsedNumber;\n  }\n  // Getting the current number of decimals\n  const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;\n  if (parsedNumber.exponent) {\n    parsedNumber.exponent += 2;\n  } else {\n    if (fractionLen === 0) {\n      parsedNumber.digits.push(0, 0);\n    } else if (fractionLen === 1) {\n      parsedNumber.digits.push(0);\n    }\n    parsedNumber.integerLen += 2;\n  }\n  return parsedNumber;\n}\n/**\n * Parses a number.\n * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/\n */\nfunction parseNumber(num) {\n  let numStr = Math.abs(num) + '';\n  let exponent = 0,\n    digits,\n    integerLen;\n  let i, j, zeros;\n  // Decimal point?\n  if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {\n    numStr = numStr.replace(DECIMAL_SEP, '');\n  }\n  // Exponential form?\n  if ((i = numStr.search(/e/i)) > 0) {\n    // Work out the exponent.\n    if (integerLen < 0) integerLen = i;\n    integerLen += +numStr.slice(i + 1);\n    numStr = numStr.substring(0, i);\n  } else if (integerLen < 0) {\n    // There was no decimal point or exponent so it is an integer.\n    integerLen = numStr.length;\n  }\n  // Count the number of leading zeros.\n  for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {\n    /* empty */\n  }\n  if (i === (zeros = numStr.length)) {\n    // The digits are all zero.\n    digits = [0];\n    integerLen = 1;\n  } else {\n    // Count the number of trailing zeros\n    zeros--;\n    while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;\n    // Trailing zeros are insignificant so ignore them\n    integerLen -= i;\n    digits = [];\n    // Convert string to array of digits without leading/trailing zeros.\n    for (j = 0; i <= zeros; i++, j++) {\n      digits[j] = Number(numStr.charAt(i));\n    }\n  }\n  // If the number overflows the maximum allowed digits then use an exponent.\n  if (integerLen > MAX_DIGITS) {\n    digits = digits.splice(0, MAX_DIGITS - 1);\n    exponent = integerLen - 1;\n    integerLen = 1;\n  }\n  return {\n    digits,\n    exponent,\n    integerLen\n  };\n}\n/**\n * Round the parsed number to the specified number of decimal places\n * This function changes the parsedNumber in-place\n */\nfunction roundNumber(parsedNumber, minFrac, maxFrac) {\n  if (minFrac > maxFrac) {\n    throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);\n  }\n  let digits = parsedNumber.digits;\n  let fractionLen = digits.length - parsedNumber.integerLen;\n  const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);\n  // The index of the digit to where rounding is to occur\n  let roundAt = fractionSize + parsedNumber.integerLen;\n  let digit = digits[roundAt];\n  if (roundAt > 0) {\n    // Drop fractional digits beyond `roundAt`\n    digits.splice(Math.max(parsedNumber.integerLen, roundAt));\n    // Set non-fractional digits beyond `roundAt` to 0\n    for (let j = roundAt; j < digits.length; j++) {\n      digits[j] = 0;\n    }\n  } else {\n    // We rounded to zero so reset the parsedNumber\n    fractionLen = Math.max(0, fractionLen);\n    parsedNumber.integerLen = 1;\n    digits.length = Math.max(1, roundAt = fractionSize + 1);\n    digits[0] = 0;\n    for (let i = 1; i < roundAt; i++) digits[i] = 0;\n  }\n  if (digit >= 5) {\n    if (roundAt - 1 < 0) {\n      for (let k = 0; k > roundAt; k--) {\n        digits.unshift(0);\n        parsedNumber.integerLen++;\n      }\n      digits.unshift(1);\n      parsedNumber.integerLen++;\n    } else {\n      digits[roundAt - 1]++;\n    }\n  }\n  // Pad out with zeros to get the required fraction length\n  for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);\n  let dropTrailingZeros = fractionSize !== 0;\n  // Minimal length = nb of decimals required + current nb of integers\n  // Any number besides that is optional and can be removed if it's a trailing 0\n  const minLen = minFrac + parsedNumber.integerLen;\n  // Do any carrying, e.g. a digit was rounded up to 10\n  const carry = digits.reduceRight(function (carry, d, i, digits) {\n    d = d + carry;\n    digits[i] = d < 10 ? d : d - 10; // d % 10\n    if (dropTrailingZeros) {\n      // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52)\n      if (digits[i] === 0 && i >= minLen) {\n        digits.pop();\n      } else {\n        dropTrailingZeros = false;\n      }\n    }\n    return d >= 10 ? 1 : 0; // Math.floor(d / 10);\n  }, 0);\n  if (carry) {\n    digits.unshift(carry);\n    parsedNumber.integerLen++;\n  }\n}\nfunction parseIntAutoRadix(text) {\n  const result = parseInt(text);\n  if (isNaN(result)) {\n    throw new Error('Invalid integer literal when parsing ' + text);\n  }\n  return result;\n}\n\n/**\n * @publicApi\n */\nclass NgLocalization {\n  static ɵfac = function NgLocalization_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgLocalization)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NgLocalization,\n    factory: function NgLocalization_Factory(__ngFactoryType__) {\n      let __ngConditionalFactory__ = null;\n      if (__ngFactoryType__) {\n        __ngConditionalFactory__ = new __ngFactoryType__();\n      } else {\n        __ngConditionalFactory__ = (locale => new NgLocaleLocalization(locale))(i0.ɵɵinject(LOCALE_ID));\n      }\n      return __ngConditionalFactory__;\n    },\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgLocalization, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: locale => new NgLocaleLocalization(locale),\n      deps: [LOCALE_ID]\n    }]\n  }], null, null);\n})();\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n */\nfunction getPluralCategory(value, cases, ngLocalization, locale) {\n  let key = `=${value}`;\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n  key = ngLocalization.getPluralCategory(value, locale);\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n  if (cases.indexOf('other') > -1) {\n    return 'other';\n  }\n  throw new Error(`No plural message found for value \"${value}\"`);\n}\n/**\n * Returns the plural case based on the locale\n *\n * @publicApi\n */\nclass NgLocaleLocalization extends NgLocalization {\n  locale;\n  constructor(locale) {\n    super();\n    this.locale = locale;\n  }\n  getPluralCategory(value, locale) {\n    const plural = getLocalePluralCase(locale || this.locale)(value);\n    switch (plural) {\n      case Plural.Zero:\n        return 'zero';\n      case Plural.One:\n        return 'one';\n      case Plural.Two:\n        return 'two';\n      case Plural.Few:\n        return 'few';\n      case Plural.Many:\n        return 'many';\n      default:\n        return 'other';\n    }\n  }\n  static ɵfac = function NgLocaleLocalization_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgLocaleLocalization)(i0.ɵɵinject(LOCALE_ID));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NgLocaleLocalization,\n    factory: NgLocaleLocalization.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgLocaleLocalization, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n\n/**\n * Register global data to be used internally by Angular. See the\n * [\"I18n guide\"](guide/i18n/format-data-locale) to know how to import additional locale\n * data.\n *\n * The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1\n *\n * @publicApi\n */\nfunction registerLocaleData(data, localeId, extraData) {\n  return ɵregisterLocaleData(data, localeId, extraData);\n}\nfunction parseCookieValue(cookieStr, name) {\n  name = encodeURIComponent(name);\n  for (const cookie of cookieStr.split(';')) {\n    const eqIndex = cookie.indexOf('=');\n    const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n    if (cookieName.trim() === name) {\n      return decodeURIComponent(cookieValue);\n    }\n  }\n  return null;\n}\nconst WS_REGEXP = /\\s+/;\nconst EMPTY_ARRAY = [];\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n * ```html\n *     <some-element [ngClass]=\"'first second'\">...</some-element>\n *\n *     <some-element [ngClass]=\"['first', 'second']\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'first': true, 'second': true, 'third': false}\">...</some-element>\n *\n *     <some-element [ngClass]=\"stringExp|arrayExp|objExp\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'class1 class2 class3' : true}\">...</some-element>\n * ```\n *\n * @description\n *\n * Adds and removes CSS classes on an HTML element.\n *\n * The CSS classes are updated as follows, depending on the type of the expression evaluation:\n * - `string` - the CSS classes listed in the string (space delimited) are added,\n * - `Array` - the CSS classes declared as Array elements are added,\n * - `Object` - keys are CSS classes that get added when the expression given in the value\n *              evaluates to a truthy value, otherwise they are removed.\n *\n * @publicApi\n */\nclass NgClass {\n  _ngEl;\n  _renderer;\n  initialClasses = EMPTY_ARRAY;\n  rawClass;\n  stateMap = new Map();\n  constructor(_ngEl, _renderer) {\n    this._ngEl = _ngEl;\n    this._renderer = _renderer;\n  }\n  set klass(value) {\n    this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;\n  }\n  set ngClass(value) {\n    this.rawClass = typeof value === 'string' ? value.trim().split(WS_REGEXP) : value;\n  }\n  /*\n  The NgClass directive uses the custom change detection algorithm for its inputs. The custom\n  algorithm is necessary since inputs are represented as complex object or arrays that need to be\n  deeply-compared.\n     This algorithm is perf-sensitive since NgClass is used very frequently and its poor performance\n  might negatively impact runtime performance of the entire change detection cycle. The design of\n  this algorithm is making sure that:\n  - there is no unnecessary DOM manipulation (CSS classes are added / removed from the DOM only when\n  needed), even if references to bound objects change;\n  - there is no memory allocation if nothing changes (even relatively modest memory allocation\n  during the change detection cycle can result in GC pauses for some of the CD cycles).\n     The algorithm works by iterating over the set of bound classes, staring with [class] binding and\n  then going over [ngClass] binding. For each CSS class name:\n  - check if it was seen before (this information is tracked in the state map) and if its value\n  changed;\n  - mark it as \"touched\" - names that are not marked are not present in the latest set of binding\n  and we can remove such class name from the internal data structures;\n     After iteration over all the CSS class names we've got data structure with all the information\n  necessary to synchronize changes to the DOM - it is enough to iterate over the state map, flush\n  changes to the DOM and reset internal data structures so those are ready for the next change\n  detection cycle.\n   */\n  ngDoCheck() {\n    // classes from the [class] binding\n    for (const klass of this.initialClasses) {\n      this._updateState(klass, true);\n    }\n    // classes from the [ngClass] binding\n    const rawClass = this.rawClass;\n    if (Array.isArray(rawClass) || rawClass instanceof Set) {\n      for (const klass of rawClass) {\n        this._updateState(klass, true);\n      }\n    } else if (rawClass != null) {\n      for (const klass of Object.keys(rawClass)) {\n        this._updateState(klass, Boolean(rawClass[klass]));\n      }\n    }\n    this._applyStateDiff();\n  }\n  _updateState(klass, nextEnabled) {\n    const state = this.stateMap.get(klass);\n    if (state !== undefined) {\n      if (state.enabled !== nextEnabled) {\n        state.changed = true;\n        state.enabled = nextEnabled;\n      }\n      state.touched = true;\n    } else {\n      this.stateMap.set(klass, {\n        enabled: nextEnabled,\n        changed: true,\n        touched: true\n      });\n    }\n  }\n  _applyStateDiff() {\n    for (const stateEntry of this.stateMap) {\n      const klass = stateEntry[0];\n      const state = stateEntry[1];\n      if (state.changed) {\n        this._toggleClass(klass, state.enabled);\n        state.changed = false;\n      } else if (!state.touched) {\n        // A class that was previously active got removed from the new collection of classes -\n        // remove from the DOM as well.\n        if (state.enabled) {\n          this._toggleClass(klass, false);\n        }\n        this.stateMap.delete(klass);\n      }\n      state.touched = false;\n    }\n  }\n  _toggleClass(klass, enabled) {\n    if (ngDevMode) {\n      if (typeof klass !== 'string') {\n        throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${ɵstringify(klass)}`);\n      }\n    }\n    klass = klass.trim();\n    if (klass.length > 0) {\n      klass.split(WS_REGEXP).forEach(klass => {\n        if (enabled) {\n          this._renderer.addClass(this._ngEl.nativeElement, klass);\n        } else {\n          this._renderer.removeClass(this._ngEl.nativeElement, klass);\n        }\n      });\n    }\n  }\n  static ɵfac = function NgClass_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgClass)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgClass,\n    selectors: [[\"\", \"ngClass\", \"\"]],\n    inputs: {\n      klass: [0, \"class\", \"klass\"],\n      ngClass: \"ngClass\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgClass, [{\n    type: Directive,\n    args: [{\n      selector: '[ngClass]'\n    }]\n  }], () => [{\n    type: i0.ElementRef\n  }, {\n    type: i0.Renderer2\n  }], {\n    klass: [{\n      type: Input,\n      args: ['class']\n    }],\n    ngClass: [{\n      type: Input,\n      args: ['ngClass']\n    }]\n  });\n})();\n\n/**\n * Instantiates a {@link Component} type and inserts its Host View into the current View.\n * `NgComponentOutlet` provides a declarative approach for dynamic component creation.\n *\n * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and\n * any existing component will be destroyed.\n *\n * @usageNotes\n *\n * ### Fine tune control\n *\n * You can control the component creation process by using the following optional attributes:\n *\n * * `ngComponentOutletInputs`: Optional component inputs object, which will be bind to the\n * component.\n *\n * * `ngComponentOutletInjector`: Optional custom {@link Injector} that will be used as parent for\n * the Component. Defaults to the injector of the current view container.\n *\n * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content\n * section of the component, if it exists.\n *\n * * `ngComponentOutletNgModule`: Optional NgModule class reference to allow loading another\n * module dynamically, then loading a component from that module.\n *\n * * `ngComponentOutletNgModuleFactory`: Deprecated config option that allows providing optional\n * NgModule factory to allow loading another module dynamically, then loading a component from that\n * module. Use `ngComponentOutletNgModule` instead.\n *\n * ### Syntax\n *\n * Simple\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression\"></ng-container>\n * ```\n *\n * With inputs\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   inputs: inputsExpression;\">\n * </ng-container>\n * ```\n *\n * Customized injector/content\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   injector: injectorExpression;\n *                                   content: contentNodesExpression;\">\n * </ng-container>\n * ```\n *\n * Customized NgModule reference\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   ngModule: ngModuleClass;\">\n * </ng-container>\n * ```\n *\n * ### A simple example\n *\n * {@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}\n *\n * A more complete example with additional options:\n *\n * {@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}\n *\n * @publicApi\n * @ngModule CommonModule\n */\nclass NgComponentOutlet {\n  _viewContainerRef;\n  ngComponentOutlet = null;\n  ngComponentOutletInputs;\n  ngComponentOutletInjector;\n  ngComponentOutletContent;\n  ngComponentOutletNgModule;\n  /**\n   * @deprecated This input is deprecated, use `ngComponentOutletNgModule` instead.\n   */\n  ngComponentOutletNgModuleFactory;\n  _componentRef;\n  _moduleRef;\n  /**\n   * A helper data structure that allows us to track inputs that were part of the\n   * ngComponentOutletInputs expression. Tracking inputs is necessary for proper removal of ones\n   * that are no longer referenced.\n   */\n  _inputsUsed = new Map();\n  constructor(_viewContainerRef) {\n    this._viewContainerRef = _viewContainerRef;\n  }\n  _needToReCreateNgModuleInstance(changes) {\n    // Note: square brackets property accessor is safe for Closure compiler optimizations (the\n    // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that\n    // were changed).\n    return changes['ngComponentOutletNgModule'] !== undefined || changes['ngComponentOutletNgModuleFactory'] !== undefined;\n  }\n  _needToReCreateComponentInstance(changes) {\n    // Note: square brackets property accessor is safe for Closure compiler optimizations (the\n    // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that\n    // were changed).\n    return changes['ngComponentOutlet'] !== undefined || changes['ngComponentOutletContent'] !== undefined || changes['ngComponentOutletInjector'] !== undefined || this._needToReCreateNgModuleInstance(changes);\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (this._needToReCreateComponentInstance(changes)) {\n      this._viewContainerRef.clear();\n      this._inputsUsed.clear();\n      this._componentRef = undefined;\n      if (this.ngComponentOutlet) {\n        const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n        if (this._needToReCreateNgModuleInstance(changes)) {\n          this._moduleRef?.destroy();\n          if (this.ngComponentOutletNgModule) {\n            this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));\n          } else if (this.ngComponentOutletNgModuleFactory) {\n            this._moduleRef = this.ngComponentOutletNgModuleFactory.create(getParentInjector(injector));\n          } else {\n            this._moduleRef = undefined;\n          }\n        }\n        this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {\n          injector,\n          ngModuleRef: this._moduleRef,\n          projectableNodes: this.ngComponentOutletContent\n        });\n      }\n    }\n  }\n  /** @nodoc */\n  ngDoCheck() {\n    if (this._componentRef) {\n      if (this.ngComponentOutletInputs) {\n        for (const inputName of Object.keys(this.ngComponentOutletInputs)) {\n          this._inputsUsed.set(inputName, true);\n        }\n      }\n      this._applyInputStateDiff(this._componentRef);\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this._moduleRef?.destroy();\n  }\n  _applyInputStateDiff(componentRef) {\n    for (const [inputName, touched] of this._inputsUsed) {\n      if (!touched) {\n        // The input that was previously active no longer exists and needs to be set to undefined.\n        componentRef.setInput(inputName, undefined);\n        this._inputsUsed.delete(inputName);\n      } else {\n        // Since touched is true, it can be asserted that the inputs object is not empty.\n        componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);\n        this._inputsUsed.set(inputName, false);\n      }\n    }\n  }\n  static ɵfac = function NgComponentOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgComponentOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgComponentOutlet,\n    selectors: [[\"\", \"ngComponentOutlet\", \"\"]],\n    inputs: {\n      ngComponentOutlet: \"ngComponentOutlet\",\n      ngComponentOutletInputs: \"ngComponentOutletInputs\",\n      ngComponentOutletInjector: \"ngComponentOutletInjector\",\n      ngComponentOutletContent: \"ngComponentOutletContent\",\n      ngComponentOutletNgModule: \"ngComponentOutletNgModule\",\n      ngComponentOutletNgModuleFactory: \"ngComponentOutletNgModuleFactory\"\n    },\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgComponentOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[ngComponentOutlet]',\n      standalone: true\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }], {\n    ngComponentOutlet: [{\n      type: Input\n    }],\n    ngComponentOutletInputs: [{\n      type: Input\n    }],\n    ngComponentOutletInjector: [{\n      type: Input\n    }],\n    ngComponentOutletContent: [{\n      type: Input\n    }],\n    ngComponentOutletNgModule: [{\n      type: Input\n    }],\n    ngComponentOutletNgModuleFactory: [{\n      type: Input\n    }]\n  });\n})();\n// Helper function that returns an Injector instance of a parent NgModule.\nfunction getParentInjector(injector) {\n  const parentNgModule = injector.get(NgModuleRef);\n  return parentNgModule.injector;\n}\n\n/**\n * @publicApi\n */\nclass NgForOfContext {\n  $implicit;\n  ngForOf;\n  index;\n  count;\n  constructor(/** Reference to the current item from the collection. */\n  $implicit,\n  /**\n   * The value of the iterable expression. Useful when the expression is\n   * more complex then a property access, for example when using the async pipe\n   * (`userStreams | async`).\n   */\n  ngForOf, /** Returns an index of the current item in the collection. */\n  index, /** Returns total amount of items in the collection. */\n  count) {\n    this.$implicit = $implicit;\n    this.ngForOf = ngForOf;\n    this.index = index;\n    this.count = count;\n  }\n  // Indicates whether this is the first item in the collection.\n  get first() {\n    return this.index === 0;\n  }\n  // Indicates whether this is the last item in the collection.\n  get last() {\n    return this.index === this.count - 1;\n  }\n  // Indicates whether an index of this item in the collection is even.\n  get even() {\n    return this.index % 2 === 0;\n  }\n  // Indicates whether an index of this item in the collection is odd.\n  get odd() {\n    return !this.even;\n  }\n}\n/**\n * A [structural directive](guide/directives/structural-directives) that renders\n * a template for each item in a collection.\n * The directive is placed on an element, which becomes the parent\n * of the cloned templates.\n *\n * The `ngForOf` directive is generally used in the\n * [shorthand form](guide/directives/structural-directives#asterisk) `*ngFor`.\n * In this form, the template to be rendered for each iteration is the content\n * of an anchor element containing the directive.\n *\n * The following example shows the shorthand syntax with some options,\n * contained in an `<li>` element.\n *\n * ```html\n * <li *ngFor=\"let item of items; index as i; trackBy: trackByFn\">...</li>\n * ```\n *\n * The shorthand form expands into a long form that uses the `ngForOf` selector\n * on an `<ng-template>` element.\n * The content of the `<ng-template>` element is the `<li>` element that held the\n * short-form directive.\n *\n * Here is the expanded version of the short-form example.\n *\n * ```html\n * <ng-template ngFor let-item [ngForOf]=\"items\" let-i=\"index\" [ngForTrackBy]=\"trackByFn\">\n *   <li>...</li>\n * </ng-template>\n * ```\n *\n * Angular automatically expands the shorthand syntax as it compiles the template.\n * The context for each embedded view is logically merged to the current component\n * context according to its lexical position.\n *\n * When using the shorthand syntax, Angular allows only [one structural directive\n * on an element](guide/directives/structural-directives#one-per-element).\n * If you want to iterate conditionally, for example,\n * put the `*ngIf` on a container element that wraps the `*ngFor` element.\n * For further discussion, see\n * [Structural Directives](guide/directives/structural-directives#one-per-element).\n *\n * @usageNotes\n *\n * ### Local variables\n *\n * `NgForOf` provides exported values that can be aliased to local variables.\n * For example:\n *\n *  ```html\n * <li *ngFor=\"let user of users; index as i; first as isFirst\">\n *    {{i}}/{{users.length}}. {{user}} <span *ngIf=\"isFirst\">default</span>\n * </li>\n * ```\n *\n * The following exported values can be aliased to local variables:\n *\n * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).\n * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is\n * more complex then a property access, for example when using the async pipe (`userStreams |\n * async`).\n * - `index: number`: The index of the current item in the iterable.\n * - `count: number`: The length of the iterable.\n * - `first: boolean`: True when the item is the first item in the iterable.\n * - `last: boolean`: True when the item is the last item in the iterable.\n * - `even: boolean`: True when the item has an even index in the iterable.\n * - `odd: boolean`: True when the item has an odd index in the iterable.\n *\n * ### Change propagation\n *\n * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n *\n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls that are present, such as `<input>` elements that accept user input. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n * For more on animations, see [Transitions and Triggers](guide/animations/transition-and-triggers).\n *\n * The identities of elements in the iterator can change while the data does not.\n * This can happen, for example, if the iterator is produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response produces objects with\n * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted).\n *\n * To avoid this expensive operation, you can customize the default tracking algorithm.\n * by supplying the `trackBy` option to `NgForOf`.\n * `trackBy` takes a function that has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * @see [Structural Directives](guide/directives/structural-directives)\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgForOf {\n  _viewContainer;\n  _template;\n  _differs;\n  /**\n   * The value of the iterable expression, which can be used as a\n   * [template input variable](guide/directives/structural-directives#shorthand).\n   */\n  set ngForOf(ngForOf) {\n    this._ngForOf = ngForOf;\n    this._ngForOfDirty = true;\n  }\n  /**\n   * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable.\n   *\n   * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object\n   * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)\n   * as the key.\n   *\n   * `NgForOf` uses the computed key to associate items in an iterable with DOM elements\n   * it produces for these items.\n   *\n   * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an\n   * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a\n   * primary key), and this iterable could be updated with new object instances that still\n   * represent the same underlying entity (for example, when data is re-fetched from the server,\n   * and the iterable is recreated and re-rendered, but most of the data is still the same).\n   *\n   * @see {@link TrackByFunction}\n   */\n  set ngForTrackBy(fn) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n      console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.io/api/common/NgForOf#change-propagation for more information.`);\n    }\n    this._trackByFn = fn;\n  }\n  get ngForTrackBy() {\n    return this._trackByFn;\n  }\n  _ngForOf = null;\n  _ngForOfDirty = true;\n  _differ = null;\n  // TODO(issue/24571): remove '!'\n  // waiting for microsoft/typescript#43662 to allow the return type `TrackByFunction|undefined` for\n  // the getter\n  _trackByFn;\n  constructor(_viewContainer, _template, _differs) {\n    this._viewContainer = _viewContainer;\n    this._template = _template;\n    this._differs = _differs;\n  }\n  /**\n   * A reference to the template that is stamped out for each item in the iterable.\n   * @see [template reference variable](guide/templates/variables#template-reference-variables)\n   */\n  set ngForTemplate(value) {\n    // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1\n    // The current type is too restrictive; a template that just uses index, for example,\n    // should be acceptable.\n    if (value) {\n      this._template = value;\n    }\n  }\n  /**\n   * Applies the changes when needed.\n   * @nodoc\n   */\n  ngDoCheck() {\n    if (this._ngForOfDirty) {\n      this._ngForOfDirty = false;\n      // React on ngForOf changes only once all inputs have been initialized\n      const value = this._ngForOf;\n      if (!this._differ && value) {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          try {\n            // CAUTION: this logic is duplicated for production mode below, as the try-catch\n            // is only present in development builds.\n            this._differ = this._differs.find(value).create(this.ngForTrackBy);\n          } catch {\n            let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;\n            if (typeof value === 'object') {\n              errorMessage += ' Did you mean to use the keyvalue pipe?';\n            }\n            throw new ɵRuntimeError(-2200 /* RuntimeErrorCode.NG_FOR_MISSING_DIFFER */, errorMessage);\n          }\n        } else {\n          // CAUTION: this logic is duplicated for development mode above, as the try-catch\n          // is only present in development builds.\n          this._differ = this._differs.find(value).create(this.ngForTrackBy);\n        }\n      }\n    }\n    if (this._differ) {\n      const changes = this._differ.diff(this._ngForOf);\n      if (changes) this._applyChanges(changes);\n    }\n  }\n  _applyChanges(changes) {\n    const viewContainer = this._viewContainer;\n    changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n      if (item.previousIndex == null) {\n        // NgForOf is never \"null\" or \"undefined\" here because the differ detected\n        // that a new item needs to be inserted from the iterable. This implies that\n        // there is an iterable value for \"_ngForOf\".\n        viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);\n      } else if (currentIndex == null) {\n        viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);\n      } else if (adjustedPreviousIndex !== null) {\n        const view = viewContainer.get(adjustedPreviousIndex);\n        viewContainer.move(view, currentIndex);\n        applyViewChange(view, item);\n      }\n    });\n    for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {\n      const viewRef = viewContainer.get(i);\n      const context = viewRef.context;\n      context.index = i;\n      context.count = ilen;\n      context.ngForOf = this._ngForOf;\n    }\n    changes.forEachIdentityChange(record => {\n      const viewRef = viewContainer.get(record.currentIndex);\n      applyViewChange(viewRef, record);\n    });\n  }\n  /**\n   * Asserts the correct type of the context for the template that `NgForOf` will render.\n   *\n   * The presence of this method is a signal to the Ivy template type-check compiler that the\n   * `NgForOf` structural directive renders its template with a specific context type.\n   */\n  static ngTemplateContextGuard(dir, ctx) {\n    return true;\n  }\n  static ɵfac = function NgForOf_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgForOf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgForOf,\n    selectors: [[\"\", \"ngFor\", \"\", \"ngForOf\", \"\"]],\n    inputs: {\n      ngForOf: \"ngForOf\",\n      ngForTrackBy: \"ngForTrackBy\",\n      ngForTemplate: \"ngForTemplate\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgForOf, [{\n    type: Directive,\n    args: [{\n      selector: '[ngFor][ngForOf]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: i0.IterableDiffers\n  }], {\n    ngForOf: [{\n      type: Input\n    }],\n    ngForTrackBy: [{\n      type: Input\n    }],\n    ngForTemplate: [{\n      type: Input\n    }]\n  });\n})();\nfunction applyViewChange(view, record) {\n  view.context.$implicit = record.item;\n}\nfunction getTypeName(type) {\n  return type['name'] || typeof type;\n}\n\n/**\n * A structural directive that conditionally includes a template based on the value of\n * an expression coerced to Boolean.\n * When the expression evaluates to true, Angular renders the template\n * provided in a `then` clause, and when  false or null,\n * Angular renders the template provided in an optional `else` clause. The default\n * template for the `else` clause is blank.\n *\n * A [shorthand form](guide/directives/structural-directives#asterisk) of the directive,\n * `*ngIf=\"condition\"`, is generally used, provided\n * as an attribute of the anchor element for the inserted template.\n * Angular expands this into a more explicit version, in which the anchor element\n * is contained in an `<ng-template>` element.\n *\n * Simple form with shorthand syntax:\n *\n * ```html\n * <div *ngIf=\"condition\">Content to render when condition is true.</div>\n * ```\n *\n * Simple form with expanded syntax:\n *\n * ```html\n * <ng-template [ngIf]=\"condition\"><div>Content to render when condition is\n * true.</div></ng-template>\n * ```\n *\n * Form with an \"else\" block:\n *\n * ```html\n * <div *ngIf=\"condition; else elseBlock\">Content to render when condition is true.</div>\n * <ng-template #elseBlock>Content to render when condition is false.</ng-template>\n * ```\n *\n * Shorthand form with \"then\" and \"else\" blocks:\n *\n * ```html\n * <div *ngIf=\"condition; then thenBlock else elseBlock\"></div>\n * <ng-template #thenBlock>Content to render when condition is true.</ng-template>\n * <ng-template #elseBlock>Content to render when condition is false.</ng-template>\n * ```\n *\n * Form with storing the value locally:\n *\n * ```html\n * <div *ngIf=\"condition as value; else elseBlock\">{{value}}</div>\n * <ng-template #elseBlock>Content to render when value is null.</ng-template>\n * ```\n *\n * @usageNotes\n *\n * The `*ngIf` directive is most commonly used to conditionally show an inline template,\n * as seen in the following  example.\n * The default `else` template is blank.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ### Showing an alternative template using `else`\n *\n * To display a template when `expression` evaluates to false, use an `else` template\n * binding as shown in the following example.\n * The `else` binding points to an `<ng-template>`  element labeled `#elseBlock`.\n * The template can be defined anywhere in the component view, but is typically placed right after\n * `ngIf` for readability.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfElse'}\n *\n * ### Using an external `then` template\n *\n * In the previous example, the then-clause template is specified inline, as the content of the\n * tag that contains the `ngIf` directive. You can also specify a template that is defined\n * externally, by referencing a labeled `<ng-template>` element. When you do this, you can\n * change which template to use at runtime, as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ### Storing a conditional result in a variable\n *\n * You might want to show a set of properties from the same object. If you are waiting\n * for asynchronous data, the object can be undefined.\n * In this case, you can use `ngIf` and store the result of the condition in a local\n * variable as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * This code uses only one `AsyncPipe`, so only one subscription is created.\n * The conditional statement stores the result of `userStream|async` in the local variable `user`.\n * You can then bind the local `user` repeatedly.\n *\n * The conditional displays the data only if `userStream` returns a value,\n * so you don't need to use the\n * safe-navigation-operator (`?.`)\n * to guard against null values when accessing properties.\n * You can display an alternative template while waiting for the data.\n *\n * ### Shorthand syntax\n *\n * The shorthand syntax `*ngIf` expands into two separate template specifications\n * for the \"then\" and \"else\" clauses. For example, consider the following shorthand statement,\n * that is meant to show a loading page while waiting for data to be loaded.\n *\n * ```html\n * <div class=\"hero-list\" *ngIf=\"heroes else loading\">\n *  ...\n * </div>\n *\n * <ng-template #loading>\n *  <div>Loading...</div>\n * </ng-template>\n * ```\n *\n * You can see that the \"else\" clause references the `<ng-template>`\n * with the `#loading` label, and the template for the \"then\" clause\n * is provided as the content of the anchor element.\n *\n * However, when Angular expands the shorthand syntax, it creates\n * another `<ng-template>` tag, with `ngIf` and `ngIfElse` directives.\n * The anchor element containing the template for the \"then\" clause becomes\n * the content of this unlabeled `<ng-template>` tag.\n *\n * ```html\n * <ng-template [ngIf]=\"heroes\" [ngIfElse]=\"loading\">\n *  <div class=\"hero-list\">\n *   ...\n *  </div>\n * </ng-template>\n *\n * <ng-template #loading>\n *  <div>Loading...</div>\n * </ng-template>\n * ```\n *\n * The presence of the implicit template object has implications for the nesting of\n * structural directives. For more on this subject, see\n * [Structural Directives](guide/directives/structural-directives#one-per-element).\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgIf {\n  _viewContainer;\n  _context = new NgIfContext();\n  _thenTemplateRef = null;\n  _elseTemplateRef = null;\n  _thenViewRef = null;\n  _elseViewRef = null;\n  constructor(_viewContainer, templateRef) {\n    this._viewContainer = _viewContainer;\n    this._thenTemplateRef = templateRef;\n  }\n  /**\n   * The Boolean expression to evaluate as the condition for showing a template.\n   */\n  set ngIf(condition) {\n    this._context.$implicit = this._context.ngIf = condition;\n    this._updateView();\n  }\n  /**\n   * A template to show if the condition expression evaluates to true.\n   */\n  set ngIfThen(templateRef) {\n    assertTemplate('ngIfThen', templateRef);\n    this._thenTemplateRef = templateRef;\n    this._thenViewRef = null; // clear previous view if any.\n    this._updateView();\n  }\n  /**\n   * A template to show if the condition expression evaluates to false.\n   */\n  set ngIfElse(templateRef) {\n    assertTemplate('ngIfElse', templateRef);\n    this._elseTemplateRef = templateRef;\n    this._elseViewRef = null; // clear previous view if any.\n    this._updateView();\n  }\n  _updateView() {\n    if (this._context.$implicit) {\n      if (!this._thenViewRef) {\n        this._viewContainer.clear();\n        this._elseViewRef = null;\n        if (this._thenTemplateRef) {\n          this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n        }\n      }\n    } else {\n      if (!this._elseViewRef) {\n        this._viewContainer.clear();\n        this._thenViewRef = null;\n        if (this._elseTemplateRef) {\n          this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n        }\n      }\n    }\n  }\n  /** @internal */\n  static ngIfUseIfTypeGuard;\n  /**\n   * Assert the correct type of the expression bound to the `ngIf` input within the template.\n   *\n   * The presence of this static field is a signal to the Ivy template type check compiler that\n   * when the `NgIf` structural directive renders its template, the type of the expression bound\n   * to `ngIf` should be narrowed in some way. For `NgIf`, the binding expression itself is used to\n   * narrow its type, which allows the strictNullChecks feature of TypeScript to work with `NgIf`.\n   */\n  static ngTemplateGuard_ngIf;\n  /**\n   * Asserts the correct type of the context for the template that `NgIf` will render.\n   *\n   * The presence of this method is a signal to the Ivy template type-check compiler that the\n   * `NgIf` structural directive renders its template with a specific context type.\n   */\n  static ngTemplateContextGuard(dir, ctx) {\n    return true;\n  }\n  static ɵfac = function NgIf_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgIf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgIf,\n    selectors: [[\"\", \"ngIf\", \"\"]],\n    inputs: {\n      ngIf: \"ngIf\",\n      ngIfThen: \"ngIfThen\",\n      ngIfElse: \"ngIfElse\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgIf, [{\n    type: Directive,\n    args: [{\n      selector: '[ngIf]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }], {\n    ngIf: [{\n      type: Input\n    }],\n    ngIfThen: [{\n      type: Input\n    }],\n    ngIfElse: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @publicApi\n */\nclass NgIfContext {\n  $implicit = null;\n  ngIf = null;\n}\nfunction assertTemplate(property, templateRef) {\n  const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n  if (!isTemplateRefOrNull) {\n    throw new Error(`${property} must be a TemplateRef, but received '${ɵstringify(templateRef)}'.`);\n  }\n}\nclass SwitchView {\n  _viewContainerRef;\n  _templateRef;\n  _created = false;\n  constructor(_viewContainerRef, _templateRef) {\n    this._viewContainerRef = _viewContainerRef;\n    this._templateRef = _templateRef;\n  }\n  create() {\n    this._created = true;\n    this._viewContainerRef.createEmbeddedView(this._templateRef);\n  }\n  destroy() {\n    this._created = false;\n    this._viewContainerRef.clear();\n  }\n  enforceState(created) {\n    if (created && !this._created) {\n      this.create();\n    } else if (!created && this._created) {\n      this.destroy();\n    }\n  }\n}\n/**\n * @ngModule CommonModule\n *\n * @description\n * The `[ngSwitch]` directive on a container specifies an expression to match against.\n * The expressions to match are provided by `ngSwitchCase` directives on views within the container.\n * - Every view that matches is rendered.\n * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered.\n * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase`\n * or `ngSwitchDefault` directive are preserved at the location.\n *\n * @usageNotes\n * Define a container element for the directive, and specify the switch expression\n * to match against as an attribute:\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n * ```\n *\n * Within the container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *    <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * ...\n *    <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * ### Usage Examples\n *\n * The following example shows how to use more than one case to display the same view:\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <!-- the same view can be shown in more than one case -->\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *   <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *   <!--default case when there are no matches -->\n *   <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * The following example shows how cases can be nested:\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *       <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *       <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *       <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *       <ng-container *ngSwitchCase=\"match_expression_3\">\n *         <!-- use a ng-container to group multiple root nodes -->\n *         <inner-element></inner-element>\n *         <inner-other-element></inner-other-element>\n *       </ng-container>\n *       <some-element *ngSwitchDefault>...</some-element>\n *     </container-element>\n * ```\n *\n * @publicApi\n * @see {@link NgSwitchCase}\n * @see {@link NgSwitchDefault}\n * @see [Structural Directives](guide/directives/structural-directives)\n *\n */\nclass NgSwitch {\n  _defaultViews = [];\n  _defaultUsed = false;\n  _caseCount = 0;\n  _lastCaseCheckIndex = 0;\n  _lastCasesMatched = false;\n  _ngSwitch;\n  set ngSwitch(newValue) {\n    this._ngSwitch = newValue;\n    if (this._caseCount === 0) {\n      this._updateDefaultCases(true);\n    }\n  }\n  /** @internal */\n  _addCase() {\n    return this._caseCount++;\n  }\n  /** @internal */\n  _addDefault(view) {\n    this._defaultViews.push(view);\n  }\n  /** @internal */\n  _matchCase(value) {\n    const matched = value === this._ngSwitch;\n    this._lastCasesMatched ||= matched;\n    this._lastCaseCheckIndex++;\n    if (this._lastCaseCheckIndex === this._caseCount) {\n      this._updateDefaultCases(!this._lastCasesMatched);\n      this._lastCaseCheckIndex = 0;\n      this._lastCasesMatched = false;\n    }\n    return matched;\n  }\n  _updateDefaultCases(useDefault) {\n    if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {\n      this._defaultUsed = useDefault;\n      for (const defaultView of this._defaultViews) {\n        defaultView.enforceState(useDefault);\n      }\n    }\n  }\n  static ɵfac = function NgSwitch_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitch)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitch,\n    selectors: [[\"\", \"ngSwitch\", \"\"]],\n    inputs: {\n      ngSwitch: \"ngSwitch\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitch, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitch]'\n    }]\n  }], null, {\n    ngSwitch: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n * Provides a switch case expression to match against an enclosing `ngSwitch` expression.\n * When the expressions match, the given `NgSwitchCase` template is rendered.\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * @usageNotes\n *\n * Within a switch container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   ...\n *   <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * Each switch-case statement contains an in-line HTML template or template reference\n * that defines the subtree to be selected if the value of the match expression\n * matches the value of the switch expression.\n *\n * As of Angular v17 the NgSwitch directive uses strict equality comparison (`===`) instead of\n * loose equality (`==`) to match different cases.\n *\n * @publicApi\n * @see {@link NgSwitch}\n * @see {@link NgSwitchDefault}\n *\n */\nclass NgSwitchCase {\n  ngSwitch;\n  _view;\n  /**\n   * Stores the HTML template to be selected on match.\n   */\n  ngSwitchCase;\n  constructor(viewContainer, templateRef, ngSwitch) {\n    this.ngSwitch = ngSwitch;\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n      throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');\n    }\n    ngSwitch._addCase();\n    this._view = new SwitchView(viewContainer, templateRef);\n  }\n  /**\n   * Performs case matching. For internal use only.\n   * @nodoc\n   */\n  ngDoCheck() {\n    this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));\n  }\n  static ɵfac = function NgSwitchCase_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitchCase)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitchCase,\n    selectors: [[\"\", \"ngSwitchCase\", \"\"]],\n    inputs: {\n      ngSwitchCase: \"ngSwitchCase\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitchCase, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitchCase]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: NgSwitch,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Host\n    }]\n  }], {\n    ngSwitchCase: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that is rendered when no `NgSwitchCase` expressions\n * match the `NgSwitch` expression.\n * This statement should be the final case in an `NgSwitch`.\n *\n * @publicApi\n * @see {@link NgSwitch}\n * @see {@link NgSwitchCase}\n *\n */\nclass NgSwitchDefault {\n  constructor(viewContainer, templateRef, ngSwitch) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n      throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');\n    }\n    ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n  }\n  static ɵfac = function NgSwitchDefault_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitchDefault)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitchDefault,\n    selectors: [[\"\", \"ngSwitchDefault\", \"\"]]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitchDefault, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitchDefault]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: NgSwitch,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Host\n    }]\n  }], null);\n})();\nfunction throwNgSwitchProviderNotFoundError(attrName, directiveName) {\n  throw new ɵRuntimeError(2000 /* RuntimeErrorCode.PARENT_NG_SWITCH_NOT_FOUND */, `An element with the \"${attrName}\" attribute ` + `(matching the \"${directiveName}\" directive) must be located inside an element with the \"ngSwitch\" attribute ` + `(matching \"NgSwitch\" directive)`);\n}\nfunction stringifyValue(value) {\n  return typeof value === 'string' ? `'${value}'` : String(value);\n}\n\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n * ```html\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">there is nothing</ng-template>\n *   <ng-template ngPluralCase=\"=1\">there is one</ng-template>\n *   <ng-template ngPluralCase=\"few\">there are a few</ng-template>\n * </some-element>\n * ```\n *\n * @description\n *\n * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n *\n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n *   matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n *   value matches aren't found and the value maps to its category for the defined locale.\n *\n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n *\n * @publicApi\n */\nclass NgPlural {\n  _localization;\n  _activeView;\n  _caseViews = {};\n  constructor(_localization) {\n    this._localization = _localization;\n  }\n  set ngPlural(value) {\n    this._updateView(value);\n  }\n  addCase(value, switchView) {\n    this._caseViews[value] = switchView;\n  }\n  _updateView(switchValue) {\n    this._clearViews();\n    const cases = Object.keys(this._caseViews);\n    const key = getPluralCategory(switchValue, cases, this._localization);\n    this._activateView(this._caseViews[key]);\n  }\n  _clearViews() {\n    if (this._activeView) this._activeView.destroy();\n  }\n  _activateView(view) {\n    if (view) {\n      this._activeView = view;\n      this._activeView.create();\n    }\n  }\n  static ɵfac = function NgPlural_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgPlural)(i0.ɵɵdirectiveInject(NgLocalization));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgPlural,\n    selectors: [[\"\", \"ngPlural\", \"\"]],\n    inputs: {\n      ngPlural: \"ngPlural\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgPlural, [{\n    type: Directive,\n    args: [{\n      selector: '[ngPlural]'\n    }]\n  }], () => [{\n    type: NgLocalization\n  }], {\n    ngPlural: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that will be added/removed from the parent {@link NgPlural} when the\n * given expression matches the plural expression according to CLDR rules.\n *\n * @usageNotes\n * ```html\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">...</ng-template>\n *   <ng-template ngPluralCase=\"other\">...</ng-template>\n * </some-element>\n *```\n *\n * See {@link NgPlural} for more details and example.\n *\n * @publicApi\n */\nclass NgPluralCase {\n  value;\n  constructor(value, template, viewContainer, ngPlural) {\n    this.value = value;\n    const isANumber = !isNaN(Number(value));\n    ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n  }\n  static ɵfac = function NgPluralCase_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgPluralCase)(i0.ɵɵinjectAttribute('ngPluralCase'), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(NgPlural, 1));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgPluralCase,\n    selectors: [[\"\", \"ngPluralCase\", \"\"]]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgPluralCase, [{\n    type: Directive,\n    args: [{\n      selector: '[ngPluralCase]'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Attribute,\n      args: ['ngPluralCase']\n    }]\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: i0.ViewContainerRef\n  }, {\n    type: NgPlural,\n    decorators: [{\n      type: Host\n    }]\n  }], null);\n})();\n\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n *\n * Set the font of the containing element to the result of an expression.\n *\n * ```html\n * <some-element [ngStyle]=\"{'font-style': styleExp}\">...</some-element>\n * ```\n *\n * Set the width of the containing element to a pixel value returned by an expression.\n *\n * ```html\n * <some-element [ngStyle]=\"{'max-width.px': widthExp}\">...</some-element>\n * ```\n *\n * Set a collection of style values using an expression that returns key-value pairs.\n *\n * ```html\n * <some-element [ngStyle]=\"objExp\">...</some-element>\n * ```\n *\n * @description\n *\n * An attribute directive that updates styles for the containing HTML element.\n * Sets one or more style properties, specified as colon-separated key-value pairs.\n * The key is a style name, with an optional `.<unit>` suffix\n * (such as 'top.px', 'font-style.em').\n * The value is an expression to be evaluated.\n * The resulting non-null value, expressed in the given unit,\n * is assigned to the given style property.\n * If the result of evaluation is null, the corresponding style is removed.\n *\n * @publicApi\n */\nclass NgStyle {\n  _ngEl;\n  _differs;\n  _renderer;\n  _ngStyle = null;\n  _differ = null;\n  constructor(_ngEl, _differs, _renderer) {\n    this._ngEl = _ngEl;\n    this._differs = _differs;\n    this._renderer = _renderer;\n  }\n  set ngStyle(values) {\n    this._ngStyle = values;\n    if (!this._differ && values) {\n      this._differ = this._differs.find(values).create();\n    }\n  }\n  ngDoCheck() {\n    if (this._differ) {\n      const changes = this._differ.diff(this._ngStyle);\n      if (changes) {\n        this._applyChanges(changes);\n      }\n    }\n  }\n  _setStyle(nameAndUnit, value) {\n    const [name, unit] = nameAndUnit.split('.');\n    const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n    if (value != null) {\n      this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);\n    } else {\n      this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);\n    }\n  }\n  _applyChanges(changes) {\n    changes.forEachRemovedItem(record => this._setStyle(record.key, null));\n    changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue));\n    changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue));\n  }\n  static ɵfac = function NgStyle_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgStyle)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.KeyValueDiffers), i0.ɵɵdirectiveInject(i0.Renderer2));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgStyle,\n    selectors: [[\"\", \"ngStyle\", \"\"]],\n    inputs: {\n      ngStyle: \"ngStyle\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgStyle, [{\n    type: Directive,\n    args: [{\n      selector: '[ngStyle]'\n    }]\n  }], () => [{\n    type: i0.ElementRef\n  }, {\n    type: i0.KeyValueDiffers\n  }, {\n    type: i0.Renderer2\n  }], {\n    ngStyle: [{\n      type: Input,\n      args: ['ngStyle']\n    }]\n  });\n})();\n\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Inserts an embedded view from a prepared `TemplateRef`.\n *\n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n *\n * @usageNotes\n * ```html\n * <ng-container *ngTemplateOutlet=\"templateRefExp; context: contextExp\"></ng-container>\n * ```\n *\n * Using the key `$implicit` in the context object will set its value as default.\n *\n * ### Example\n *\n * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n *\n * @publicApi\n */\nclass NgTemplateOutlet {\n  _viewContainerRef;\n  _viewRef = null;\n  /**\n   * A context object to attach to the {@link EmbeddedViewRef}. This should be an\n   * object, the object's keys will be available for binding by the local template `let`\n   * declarations.\n   * Using the key `$implicit` in the context object will set its value as default.\n   */\n  ngTemplateOutletContext = null;\n  /**\n   * A string defining the template reference and optionally the context object for the template.\n   */\n  ngTemplateOutlet = null;\n  /** Injector to be used within the embedded view. */\n  ngTemplateOutletInjector = null;\n  constructor(_viewContainerRef) {\n    this._viewContainerRef = _viewContainerRef;\n  }\n  ngOnChanges(changes) {\n    if (this._shouldRecreateView(changes)) {\n      const viewContainerRef = this._viewContainerRef;\n      if (this._viewRef) {\n        viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n      }\n      // If there is no outlet, clear the destroyed view ref.\n      if (!this.ngTemplateOutlet) {\n        this._viewRef = null;\n        return;\n      }\n      // Create a context forward `Proxy` that will always bind to the user-specified context,\n      // without having to destroy and re-create views whenever the context changes.\n      const viewContext = this._createContextForwardProxy();\n      this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {\n        injector: this.ngTemplateOutletInjector ?? undefined\n      });\n    }\n  }\n  /**\n   * We need to re-create existing embedded view if either is true:\n   * - the outlet changed.\n   * - the injector changed.\n   */\n  _shouldRecreateView(changes) {\n    return !!changes['ngTemplateOutlet'] || !!changes['ngTemplateOutletInjector'];\n  }\n  /**\n   * For a given outlet instance, we create a proxy object that delegates\n   * to the user-specified context. This allows changing, or swapping out\n   * the context object completely without having to destroy/re-create the view.\n   */\n  _createContextForwardProxy() {\n    return new Proxy({}, {\n      set: (_target, prop, newValue) => {\n        if (!this.ngTemplateOutletContext) {\n          return false;\n        }\n        return Reflect.set(this.ngTemplateOutletContext, prop, newValue);\n      },\n      get: (_target, prop, receiver) => {\n        if (!this.ngTemplateOutletContext) {\n          return undefined;\n        }\n        return Reflect.get(this.ngTemplateOutletContext, prop, receiver);\n      }\n    });\n  }\n  static ɵfac = function NgTemplateOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgTemplateOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgTemplateOutlet,\n    selectors: [[\"\", \"ngTemplateOutlet\", \"\"]],\n    inputs: {\n      ngTemplateOutletContext: \"ngTemplateOutletContext\",\n      ngTemplateOutlet: \"ngTemplateOutlet\",\n      ngTemplateOutletInjector: \"ngTemplateOutletInjector\"\n    },\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgTemplateOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[ngTemplateOutlet]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }], {\n    ngTemplateOutletContext: [{\n      type: Input\n    }],\n    ngTemplateOutlet: [{\n      type: Input\n    }],\n    ngTemplateOutletInjector: [{\n      type: Input\n    }]\n  });\n})();\n\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nconst COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];\nfunction invalidPipeArgumentError(type, value) {\n  return new ɵRuntimeError(2100 /* RuntimeErrorCode.INVALID_PIPE_ARGUMENT */, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${ɵstringify(type)}'`);\n}\nclass SubscribableStrategy {\n  createSubscription(async, updateLatestValue) {\n    // Subscription can be side-effectful, and we don't want any signal reads which happen in the\n    // side effect of the subscription to be tracked by a component's template when that\n    // subscription is triggered via the async pipe. So we wrap the subscription in `untracked` to\n    // decouple from the current reactive context.\n    //\n    // `untracked` also prevents signal _writes_ which happen in the subscription side effect from\n    // being treated as signal writes during the template evaluation (which throws errors).\n    return untracked(() => async.subscribe({\n      next: updateLatestValue,\n      error: e => {\n        throw e;\n      }\n    }));\n  }\n  dispose(subscription) {\n    // See the comment in `createSubscription` above on the use of `untracked`.\n    untracked(() => subscription.unsubscribe());\n  }\n}\nclass PromiseStrategy {\n  createSubscription(async, updateLatestValue) {\n    return async.then(updateLatestValue, e => {\n      throw e;\n    });\n  }\n  dispose(subscription) {}\n}\nconst _promiseStrategy = new PromiseStrategy();\nconst _subscribableStrategy = new SubscribableStrategy();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Unwraps a value from an asynchronous primitive.\n *\n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks. When the reference of the expression changes, the `async` pipe\n * automatically unsubscribes from the old `Observable` or `Promise` and subscribes to the new one.\n *\n * @usageNotes\n *\n * ### Examples\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n *\n * @publicApi\n */\nclass AsyncPipe {\n  _ref;\n  _latestValue = null;\n  markForCheckOnValueUpdate = true;\n  _subscription = null;\n  _obj = null;\n  _strategy = null;\n  constructor(ref) {\n    // Assign `ref` into `this._ref` manually instead of declaring `_ref` in the constructor\n    // parameter list, as the type of `this._ref` includes `null` unlike the type of `ref`.\n    this._ref = ref;\n  }\n  ngOnDestroy() {\n    if (this._subscription) {\n      this._dispose();\n    }\n    // Clear the `ChangeDetectorRef` and its association with the view data, to mitigate\n    // potential memory leaks in Observables that could otherwise cause the view data to\n    // be retained.\n    // https://github.com/angular/angular/issues/17624\n    this._ref = null;\n  }\n  transform(obj) {\n    if (!this._obj) {\n      if (obj) {\n        try {\n          // Only call `markForCheck` if the value is updated asynchronously.\n          // Synchronous updates _during_ subscription should not wastefully mark for check -\n          // this value is already going to be returned from the transform function.\n          this.markForCheckOnValueUpdate = false;\n          this._subscribe(obj);\n        } finally {\n          this.markForCheckOnValueUpdate = true;\n        }\n      }\n      return this._latestValue;\n    }\n    if (obj !== this._obj) {\n      this._dispose();\n      return this.transform(obj);\n    }\n    return this._latestValue;\n  }\n  _subscribe(obj) {\n    this._obj = obj;\n    this._strategy = this._selectStrategy(obj);\n    this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value));\n  }\n  _selectStrategy(obj) {\n    if (ɵisPromise(obj)) {\n      return _promiseStrategy;\n    }\n    if (ɵisSubscribable(obj)) {\n      return _subscribableStrategy;\n    }\n    throw invalidPipeArgumentError(AsyncPipe, obj);\n  }\n  _dispose() {\n    // Note: `dispose` is only called if a subscription has been initialized before, indicating\n    // that `this._strategy` is also available.\n    this._strategy.dispose(this._subscription);\n    this._latestValue = null;\n    this._subscription = null;\n    this._obj = null;\n  }\n  _updateLatestValue(async, value) {\n    if (async === this._obj) {\n      this._latestValue = value;\n      if (this.markForCheckOnValueUpdate) {\n        this._ref?.markForCheck();\n      }\n    }\n  }\n  static ɵfac = function AsyncPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || AsyncPipe)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"async\",\n    type: AsyncPipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AsyncPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'async',\n      pure: false\n    }]\n  }], () => [{\n    type: i0.ChangeDetectorRef\n  }], null);\n})();\n\n/**\n * Transforms text to all lower case.\n *\n * @see {@link UpperCasePipe}\n * @see {@link TitleCasePipe}\n * @usageNotes\n *\n * The following example defines a view that allows the user to enter\n * text, and then uses the pipe to convert the input text to all lower case.\n *\n * {@example common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe'}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass LowerCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(LowerCasePipe, value);\n    }\n    return value.toLowerCase();\n  }\n  static ɵfac = function LowerCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LowerCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"lowercase\",\n    type: LowerCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LowerCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'lowercase'\n    }]\n  }], null, null);\n})();\n//\n// Regex below matches any Unicode word and number compatible with ES5. In ES2018 the same result\n// can be achieved by using /[0-9\\p{L}]\\S*/gu and also known as Unicode Property Escapes\n// (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no\n// transpilation of this functionality down to ES5 without external tool, the only solution is\n// to use already transpiled form. Example can be found here -\n// https://mothereff.in/regexpu#input=var+regex+%3D+%2F%5B0-9%5Cp%7BL%7D%5D%5CS*%2Fgu%3B%0A%0A&unicodePropertyEscape=1\n//\nconst unicodeWordMatch = /(?:[0-9A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])\\S*/g;\n/**\n * Transforms text to title case.\n * Capitalizes the first letter of each word and transforms the\n * rest of the word to lower case.\n * Words are delimited by any whitespace character, such as a space, tab, or line-feed character.\n *\n * @see {@link LowerCasePipe}\n * @see {@link UpperCasePipe}\n *\n * @usageNotes\n * The following example shows the result of transforming various strings into title case.\n *\n * {@example common/pipes/ts/titlecase_pipe.ts region='TitleCasePipe'}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass TitleCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(TitleCasePipe, value);\n    }\n    return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase());\n  }\n  static ɵfac = function TitleCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TitleCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"titlecase\",\n    type: TitleCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TitleCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'titlecase'\n    }]\n  }], null, null);\n})();\n/**\n * Transforms text to all upper case.\n * @see {@link LowerCasePipe}\n * @see {@link TitleCasePipe}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass UpperCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(UpperCasePipe, value);\n    }\n    return value.toUpperCase();\n  }\n  static ɵfac = function UpperCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UpperCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"uppercase\",\n    type: UpperCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UpperCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'uppercase'\n    }]\n  }], null, null);\n})();\n\n/**\n * The default date format of Angular date pipe, which corresponds to the following format:\n * `'MMM d,y'` (e.g. `Jun 15, 2015`)\n */\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\n\n/**\n * Optionally-provided default timezone to use for all instances of `DatePipe` (such as `'+0430'`).\n * If the value isn't provided, the `DatePipe` will use the end-user's local system timezone.\n *\n * @deprecated use DATE_PIPE_DEFAULT_OPTIONS token to configure DatePipe\n */\nconst DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken(ngDevMode ? 'DATE_PIPE_DEFAULT_TIMEZONE' : '');\n/**\n * DI token that allows to provide default configuration for the `DatePipe` instances in an\n * application. The value is an object which can include the following fields:\n * - `dateFormat`: configures the default date format. If not provided, the `DatePipe`\n * will use the 'mediumDate' as a value.\n * - `timezone`: configures the default timezone. If not provided, the `DatePipe` will\n * use the end-user's local system timezone.\n *\n * @see {@link DatePipeConfig}\n *\n * @usageNotes\n *\n * Various date pipe default values can be overwritten by providing this token with\n * the value that has this interface.\n *\n * For example:\n *\n * Override the default date format by providing a value using the token:\n * ```ts\n * providers: [\n *   {provide: DATE_PIPE_DEFAULT_OPTIONS, useValue: {dateFormat: 'shortDate'}}\n * ]\n * ```\n *\n * Override the default timezone by providing a value using the token:\n * ```ts\n * providers: [\n *   {provide: DATE_PIPE_DEFAULT_OPTIONS, useValue: {timezone: '-1200'}}\n * ]\n * ```\n */\nconst DATE_PIPE_DEFAULT_OPTIONS = new InjectionToken(ngDevMode ? 'DATE_PIPE_DEFAULT_OPTIONS' : '');\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a date value according to locale rules.\n *\n * `DatePipe` is executed only when it detects a pure change to the input value.\n * A pure change is either a change to a primitive input value\n * (such as `String`, `Number`, `Boolean`, or `Symbol`),\n * or a changed object reference (such as `Date`, `Array`, `Function`, or `Object`).\n *\n * Note that mutating a `Date` object does not cause the pipe to be rendered again.\n * To ensure that the pipe is executed, you must create a new `Date` object.\n *\n * Only the `en-US` locale data comes with Angular. To localize dates\n * in another language, you must import the corresponding locale data.\n * See the [I18n guide](guide/i18n/format-data-locale) for more information.\n *\n * The time zone of the formatted value can be specified either by passing it in as the second\n * parameter of the pipe, or by setting the default through the `DATE_PIPE_DEFAULT_OPTIONS`\n * injection token. The value that is passed in as the second parameter takes precedence over\n * the one defined using the injection token.\n *\n * @see {@link formatDate}\n *\n *\n * @usageNotes\n *\n * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to\n * reformat the date on every change-detection cycle, treat the date as an immutable object\n * and change the reference when the pipe needs to run again.\n *\n * ### Pre-defined format options\n *\n * | Option        | Equivalent to                       | Examples (given in `en-US` locale)              |\n * |---------------|-------------------------------------|-------------------------------------------------|\n * | `'short'`     | `'M/d/yy, h:mm a'`                  | `6/15/15, 9:03 AM`                              |\n * | `'medium'`    | `'MMM d, y, h:mm:ss a'`             | `Jun 15, 2015, 9:03:01 AM`                      |\n * | `'long'`      | `'MMMM d, y, h:mm:ss a z'`          | `June 15, 2015 at 9:03:01 AM GMT+1`             |\n * | `'full'`      | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` |\n * | `'shortDate'` | `'M/d/yy'`                          | `6/15/15`                                       |\n * | `'mediumDate'`| `'MMM d, y'`                        | `Jun 15, 2015`                                  |\n * | `'longDate'`  | `'MMMM d, y'`                       | `June 15, 2015`                                 |\n * | `'fullDate'`  | `'EEEE, MMMM d, y'`                 | `Monday, June 15, 2015`                         |\n * | `'shortTime'` | `'h:mm a'`                          | `9:03 AM`                                       |\n * | `'mediumTime'`| `'h:mm:ss a'`                       | `9:03:01 AM`                                    |\n * | `'longTime'`  | `'h:mm:ss a z'`                     | `9:03:01 AM GMT+1`                              |\n * | `'fullTime'`  | `'h:mm:ss a zzzz'`                  | `9:03:01 AM GMT+01:00`                          |\n *\n * ### Custom format options\n *\n * You can construct a format string using symbols to specify the components\n * of a date-time value, as described in the following table.\n * Format details depend on the locale.\n * Fields marked with (*) are only available in the extra data set for the given locale.\n *\n *  | Field type              | Format      | Description                                                   | Example Value                                              |\n *  |-------------------------|-------------|---------------------------------------------------------------|------------------------------------------------------------|\n *  | Era                     | G, GG & GGG | Abbreviated                                                   | AD                                                         |\n *  |                         | GGGG        | Wide                                                          | Anno Domini                                                |\n *  |                         | GGGGG       | Narrow                                                        | A                                                          |\n *  | Year                    | y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |\n *  |                         | yy          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |\n *  |                         | yyy         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |\n *  |                         | yyyy        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |\n *  | ISO Week-numbering year | Y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |\n *  |                         | YY          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |\n *  |                         | YYY         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |\n *  |                         | YYYY        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |\n *  | Month                   | M           | Numeric: 1 digit                                              | 9, 12                                                      |\n *  |                         | MM          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |\n *  |                         | MMM         | Abbreviated                                                   | Sep                                                        |\n *  |                         | MMMM        | Wide                                                          | September                                                  |\n *  |                         | MMMMM       | Narrow                                                        | S                                                          |\n *  | Month standalone        | L           | Numeric: 1 digit                                              | 9, 12                                                      |\n *  |                         | LL          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |\n *  |                         | LLL         | Abbreviated                                                   | Sep                                                        |\n *  |                         | LLLL        | Wide                                                          | September                                                  |\n *  |                         | LLLLL       | Narrow                                                        | S                                                          |\n *  | ISO Week of year        | w           | Numeric: minimum digits                                       | 1... 53                                                    |\n *  |                         | ww          | Numeric: 2 digits + zero padded                               | 01... 53                                                   |\n *  | Week of month           | W           | Numeric: 1 digit                                              | 1... 5                                                     |\n *  | Day of month            | d           | Numeric: minimum digits                                       | 1                                                          |\n *  |                         | dd          | Numeric: 2 digits + zero padded                               | 01                                                         |\n *  | Week day                | E, EE & EEE | Abbreviated                                                   | Tue                                                        |\n *  |                         | EEEE        | Wide                                                          | Tuesday                                                    |\n *  |                         | EEEEE       | Narrow                                                        | T                                                          |\n *  |                         | EEEEEE      | Short                                                         | Tu                                                         |\n *  | Week day standalone     | c, cc       | Numeric: 1 digit                                              | 2                                                          |\n *  |                         | ccc         | Abbreviated                                                   | Tue                                                        |\n *  |                         | cccc        | Wide                                                          | Tuesday                                                    |\n *  |                         | ccccc       | Narrow                                                        | T                                                          |\n *  |                         | cccccc      | Short                                                         | Tu                                                         |\n *  | Period                  | a, aa & aaa | Abbreviated                                                   | am/pm or AM/PM                                             |\n *  |                         | aaaa        | Wide (fallback to `a` when missing)                           | ante meridiem/post meridiem                                |\n *  |                         | aaaaa       | Narrow                                                        | a/p                                                        |\n *  | Period*                 | B, BB & BBB | Abbreviated                                                   | mid.                                                       |\n *  |                         | BBBB        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |\n *  |                         | BBBBB       | Narrow                                                        | md                                                         |\n *  | Period standalone*      | b, bb & bbb | Abbreviated                                                   | mid.                                                       |\n *  |                         | bbbb        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |\n *  |                         | bbbbb       | Narrow                                                        | md                                                         |\n *  | Hour 1-12               | h           | Numeric: minimum digits                                       | 1, 12                                                      |\n *  |                         | hh          | Numeric: 2 digits + zero padded                               | 01, 12                                                     |\n *  | Hour 0-23               | H           | Numeric: minimum digits                                       | 0, 23                                                      |\n *  |                         | HH          | Numeric: 2 digits + zero padded                               | 00, 23                                                     |\n *  | Minute                  | m           | Numeric: minimum digits                                       | 8, 59                                                      |\n *  |                         | mm          | Numeric: 2 digits + zero padded                               | 08, 59                                                     |\n *  | Second                  | s           | Numeric: minimum digits                                       | 0... 59                                                    |\n *  |                         | ss          | Numeric: 2 digits + zero padded                               | 00... 59                                                   |\n *  | Fractional seconds      | S           | Numeric: 1 digit                                              | 0... 9                                                     |\n *  |                         | SS          | Numeric: 2 digits + zero padded                               | 00... 99                                                   |\n *  |                         | SSS         | Numeric: 3 digits + zero padded (= milliseconds)              | 000... 999                                                 |\n *  | Zone                    | z, zz & zzz | Short specific non location format (fallback to O)            | GMT-8                                                      |\n *  |                         | zzzz        | Long specific non location format (fallback to OOOO)          | GMT-08:00                                                  |\n *  |                         | Z, ZZ & ZZZ | ISO8601 basic format                                          | -0800                                                      |\n *  |                         | ZZZZ        | Long localized GMT format                                     | GMT-8:00                                                   |\n *  |                         | ZZZZZ       | ISO8601 extended format + Z indicator for offset 0 (= XXXXX)  | -08:00                                                     |\n *  |                         | O, OO & OOO | Short localized GMT format                                    | GMT-8                                                      |\n *  |                         | OOOO        | Long localized GMT format                                     | GMT-08:00                                                  |\n *\n *\n * ### Format examples\n *\n * These examples transform a date into various formats,\n * assuming that `dateObj` is a JavaScript `Date` object for\n * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11,\n * given in the local time for the `en-US` locale.\n *\n * ```\n * {{ dateObj | date }}               // output is 'Jun 15, 2015'\n * {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\n * {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\n * {{ dateObj | date:'mm:ss' }}       // output is '43:11'\n * {{ dateObj | date:\"MMM dd, yyyy 'at' hh:mm a\" }}  // output is 'Jun 15, 2015 at 09:43 PM'\n * ```\n *\n * ### Usage example\n *\n * The following component uses a date pipe to display the current date in different formats.\n *\n * ```angular-ts\n * @Component({\n *  selector: 'date-pipe',\n *  template: `<div>\n *    <p>Today is {{today | date}}</p>\n *    <p>Or if you prefer, {{today | date:'fullDate'}}</p>\n *    <p>The time is {{today | date:'h:mm a z'}}</p>\n *  </div>`\n * })\n * // Get the current date and time as a date-time value.\n * export class DatePipeComponent {\n *   today: number = Date.now();\n * }\n * ```\n *\n * @publicApi\n */\nclass DatePipe {\n  locale;\n  defaultTimezone;\n  defaultOptions;\n  constructor(locale, defaultTimezone, defaultOptions) {\n    this.locale = locale;\n    this.defaultTimezone = defaultTimezone;\n    this.defaultOptions = defaultOptions;\n  }\n  transform(value, format, timezone, locale) {\n    if (value == null || value === '' || value !== value) return null;\n    try {\n      const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;\n      const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? undefined;\n      return formatDate(value, _format, locale || this.locale, _timezone);\n    } catch (error) {\n      throw invalidPipeArgumentError(DatePipe, error.message);\n    }\n  }\n  static ɵfac = function DatePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DatePipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"date\",\n    type: DatePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DatePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'date'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DATE_PIPE_DEFAULT_TIMEZONE]\n    }, {\n      type: Optional\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DATE_PIPE_DEFAULT_OPTIONS]\n    }, {\n      type: Optional\n    }]\n  }], null);\n})();\nconst _INTERPOLATION_REGEXP = /#/g;\n/**\n * @ngModule CommonModule\n * @description\n *\n * Maps a value to a string that pluralizes the value according to locale rules.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * @publicApi\n */\nclass I18nPluralPipe {\n  _localization;\n  constructor(_localization) {\n    this._localization = _localization;\n  }\n  /**\n   * @param value the number to be formatted\n   * @param pluralMap an object that mimics the ICU format, see\n   * https://unicode-org.github.io/icu/userguide/format_parse/messages/.\n   * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by\n   * default).\n   */\n  transform(value, pluralMap, locale) {\n    if (value == null) return '';\n    if (typeof pluralMap !== 'object' || pluralMap === null) {\n      throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n    }\n    const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n    return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n  }\n  static ɵfac = function I18nPluralPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || I18nPluralPipe)(i0.ɵɵdirectiveInject(NgLocalization, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"i18nPlural\",\n    type: I18nPluralPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(I18nPluralPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'i18nPlural'\n    }]\n  }], () => [{\n    type: NgLocalization\n  }], null);\n})();\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Generic selector that displays the string that matches the current value.\n *\n * If none of the keys of the `mapping` match the `value`, then the content\n * of the `other` key is returned when present, otherwise an empty string is returned.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n * @publicApi\n */\nclass I18nSelectPipe {\n  /**\n   * @param value a string to be internationalized.\n   * @param mapping an object that indicates the text that should be displayed\n   * for different values of the provided `value`.\n   */\n  transform(value, mapping) {\n    if (value == null) return '';\n    if (typeof mapping !== 'object' || typeof value !== 'string') {\n      throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n    }\n    if (mapping.hasOwnProperty(value)) {\n      return mapping[value];\n    }\n    if (mapping.hasOwnProperty('other')) {\n      return mapping['other'];\n    }\n    return '';\n  }\n  static ɵfac = function I18nSelectPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || I18nSelectPipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"i18nSelect\",\n    type: I18nSelectPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(I18nSelectPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'i18nSelect'\n    }]\n  }], null, null);\n})();\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Converts a value into its JSON-format representation.  Useful for debugging.\n *\n * @usageNotes\n *\n * The following component uses a JSON pipe to convert an object\n * to JSON format, and displays the string in both formats for comparison.\n *\n * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * @publicApi\n */\nclass JsonPipe {\n  /**\n   * @param value A value of any type to convert into a JSON-format string.\n   */\n  transform(value) {\n    return JSON.stringify(value, null, 2);\n  }\n  static ɵfac = function JsonPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonPipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"json\",\n    type: JsonPipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'json',\n      pure: false\n    }]\n  }], null, null);\n})();\nfunction makeKeyValuePair(key, value) {\n  return {\n    key: key,\n    value: value\n  };\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms Object or Map into an array of key value pairs.\n *\n * The output array will be ordered by keys.\n * By default the comparator will be by Unicode point value.\n * You can optionally pass a compareFn if your keys are complex types.\n * Passing `null` as the compareFn will use natural ordering of the input.\n *\n * @usageNotes\n * ### Examples\n *\n * This examples show how an Object or a Map can be iterated by ngFor with the use of this\n * keyvalue pipe.\n *\n * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}\n *\n * @publicApi\n */\nclass KeyValuePipe {\n  differs;\n  constructor(differs) {\n    this.differs = differs;\n  }\n  differ;\n  keyValues = [];\n  compareFn = defaultComparator;\n  transform(input, compareFn = defaultComparator) {\n    if (!input || !(input instanceof Map) && typeof input !== 'object') {\n      return null;\n    }\n    // make a differ for whatever type we've been passed in\n    this.differ ??= this.differs.find(input).create();\n    const differChanges = this.differ.diff(input);\n    const compareFnChanged = compareFn !== this.compareFn;\n    if (differChanges) {\n      this.keyValues = [];\n      differChanges.forEachItem(r => {\n        this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));\n      });\n    }\n    if (differChanges || compareFnChanged) {\n      if (compareFn) {\n        this.keyValues.sort(compareFn);\n      }\n      this.compareFn = compareFn;\n    }\n    return this.keyValues;\n  }\n  static ɵfac = function KeyValuePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || KeyValuePipe)(i0.ɵɵdirectiveInject(i0.KeyValueDiffers, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"keyvalue\",\n    type: KeyValuePipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(KeyValuePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'keyvalue',\n      pure: false\n    }]\n  }], () => [{\n    type: i0.KeyValueDiffers\n  }], null);\n})();\nfunction defaultComparator(keyValueA, keyValueB) {\n  const a = keyValueA.key;\n  const b = keyValueB.key;\n  // if same exit with 0;\n  if (a === b) return 0;\n  // make sure that undefined are at the end of the sort.\n  if (a === undefined) return 1;\n  if (b === undefined) return -1;\n  // make sure that nulls are at the end of the sort.\n  if (a === null) return 1;\n  if (b === null) return -1;\n  if (typeof a == 'string' && typeof b == 'string') {\n    return a < b ? -1 : 1;\n  }\n  if (typeof a == 'number' && typeof b == 'number') {\n    return a - b;\n  }\n  if (typeof a == 'boolean' && typeof b == 'boolean') {\n    return a < b ? -1 : 1;\n  }\n  // `a` and `b` are of different types. Compare their string values.\n  const aString = String(a);\n  const bString = String(b);\n  return aString == bString ? 0 : aString < bString ? -1 : 1;\n}\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a value according to digit options and locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * @see {@link formatNumber}\n *\n * @usageNotes\n *\n * ### digitsInfo\n *\n * The value's decimal representation is specified by the `digitsInfo`\n * parameter, written in the following format:<br>\n *\n * ```\n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n * ```\n *\n *  - `minIntegerDigits`:\n * The minimum number of integer digits before the decimal point.\n * Default is 1.\n *\n * - `minFractionDigits`:\n * The minimum number of digits after the decimal point.\n * Default is 0.\n *\n *  - `maxFractionDigits`:\n * The maximum number of digits after the decimal point.\n * Default is 3.\n *\n * If the formatted value is truncated it will be rounded using the \"to-nearest\" method:\n *\n * ```\n * {{3.6 | number: '1.0-0'}}\n * <!--will output '4'-->\n *\n * {{-3.6 | number:'1.0-0'}}\n * <!--will output '-4'-->\n * ```\n *\n * ### locale\n *\n * `locale` will format a value according to locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n *\n * See [Setting your app locale](guide/i18n/locale-id).\n *\n * ### Example\n *\n * The following code shows how the pipe transforms values\n * according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n *\n * @publicApi\n */\nclass DecimalPipe {\n  _locale;\n  constructor(_locale) {\n    this._locale = _locale;\n  }\n  transform(value, digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    try {\n      const num = strToNumber(value);\n      return formatNumber(num, locale, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(DecimalPipe, error.message);\n    }\n  }\n  static ɵfac = function DecimalPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DecimalPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"number\",\n    type: DecimalPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DecimalPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'number'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a percentage\n * string, formatted according to locale rules that determine group sizing and\n * separator, decimal-point character, and other locale-specific\n * configurations.\n *\n * @see {@link formatPercent}\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/percent_pipe.ts region='PercentPipe'}\n *\n * @publicApi\n */\nclass PercentPipe {\n  _locale;\n  constructor(_locale) {\n    this._locale = _locale;\n  }\n  /**\n   *\n   * @param value The number to be formatted as a percentage.\n   * @param digitsInfo Decimal representation options, specified by a string\n   * in the following format:<br>\n   * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.\n   *   - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n   * Default is `1`.\n   *   - `minFractionDigits`: The minimum number of digits after the decimal point.\n   * Default is `0`.\n   *   - `maxFractionDigits`: The maximum number of digits after the decimal point.\n   * Default is `0`.\n   * @param locale A locale code for the locale format rules to use.\n   * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n   * See [Setting your app locale](guide/i18n/locale-id).\n   */\n  transform(value, digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    try {\n      const num = strToNumber(value);\n      return formatPercent(num, locale, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(PercentPipe, error.message);\n    }\n  }\n  static ɵfac = function PercentPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PercentPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"percent\",\n    type: PercentPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PercentPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'percent'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a currency string, formatted according to locale rules\n * that determine group sizing and separator, decimal-point character,\n * and other locale-specific configurations.\n *\n *\n * @see {@link getCurrencySymbol}\n * @see {@link formatCurrency}\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/currency_pipe.ts region='CurrencyPipe'}\n *\n * @publicApi\n */\nclass CurrencyPipe {\n  _locale;\n  _defaultCurrencyCode;\n  constructor(_locale, _defaultCurrencyCode = 'USD') {\n    this._locale = _locale;\n    this._defaultCurrencyCode = _defaultCurrencyCode;\n  }\n  transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    if (typeof display === 'boolean') {\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) {\n        console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".`);\n      }\n      display = display ? 'symbol' : 'code';\n    }\n    let currency = currencyCode || this._defaultCurrencyCode;\n    if (display !== 'code') {\n      if (display === 'symbol' || display === 'symbol-narrow') {\n        currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);\n      } else {\n        currency = display;\n      }\n    }\n    try {\n      const num = strToNumber(value);\n      return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(CurrencyPipe, error.message);\n    }\n  }\n  static ɵfac = function CurrencyPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || CurrencyPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DEFAULT_CURRENCY_CODE, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"currency\",\n    type: CurrencyPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CurrencyPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'currency'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DEFAULT_CURRENCY_CODE]\n    }]\n  }], null);\n})();\nfunction isValue(value) {\n  return !(value == null || value === '' || value !== value);\n}\n/**\n * Transforms a string into a number (if needed).\n */\nfunction strToNumber(value) {\n  // Convert strings to numbers\n  if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n    return Number(value);\n  }\n  if (typeof value !== 'number') {\n    throw new Error(`${value} is not a number`);\n  }\n  return value;\n}\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Creates a new `Array` or `String` containing a subset (slice) of the elements.\n *\n * @usageNotes\n *\n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n *\n * When operating on an `Array`, the returned `Array` is always a copy even when all\n * the elements are being returned.\n *\n * When operating on a blank value, the pipe returns the blank value.\n *\n * ### List Example\n *\n * This `ngFor` example:\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n * ```html\n * <li>b</li>\n * <li>c</li>\n * ```\n *\n * ### String Examples\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * @publicApi\n */\nclass SlicePipe {\n  transform(value, start, end) {\n    if (value == null) return null;\n    if (!this.supports(value)) {\n      throw invalidPipeArgumentError(SlicePipe, value);\n    }\n    return value.slice(start, end);\n  }\n  supports(obj) {\n    return typeof obj === 'string' || Array.isArray(obj);\n  }\n  static ɵfac = function SlicePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || SlicePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"slice\",\n    type: SlicePipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SlicePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'slice',\n      pure: false\n    }]\n  }], null, null);\n})();\n\n/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nconst COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];\n\n// Note: This does not contain the location providers,\n// as they need some platform specific implementations to work.\n/**\n * Exports all the basic Angular directives and pipes,\n * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on.\n * Re-exported by `BrowserModule`, which is included automatically in the root\n * `AppModule` when you create a new app with the CLI `new` command.\n *\n * @publicApi\n */\nclass CommonModule {\n  static ɵfac = function CommonModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || CommonModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: CommonModule,\n    imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],\n    exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CommonModule, [{\n    type: NgModule,\n    args: [{\n      imports: [COMMON_DIRECTIVES, COMMON_PIPES],\n      exports: [COMMON_DIRECTIVES, COMMON_PIPES]\n    }]\n  }], null, null);\n})();\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\n/**\n * Returns whether a platform id represents a browser platform.\n * @publicApi\n */\nfunction isPlatformBrowser(platformId) {\n  return platformId === PLATFORM_BROWSER_ID;\n}\n/**\n * Returns whether a platform id represents a server platform.\n * @publicApi\n */\nfunction isPlatformServer(platformId) {\n  return platformId === PLATFORM_SERVER_ID;\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * Defines a scroll position manager. Implemented by `BrowserViewportScroller`.\n *\n * @publicApi\n */\nclass ViewportScroller {\n  // De-sugared tree-shakable injection\n  // See #23917\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: ViewportScroller,\n    providedIn: 'root',\n    factory: () => isPlatformBrowser(inject(PLATFORM_ID)) ? new BrowserViewportScroller(inject(DOCUMENT), window) : new NullViewportScroller()\n  });\n}\n/**\n * Manages the scroll position for a browser window.\n */\nclass BrowserViewportScroller {\n  document;\n  window;\n  offset = () => [0, 0];\n  constructor(document, window) {\n    this.document = document;\n    this.window = window;\n  }\n  /**\n   * Configures the top offset used when scrolling to an anchor.\n   * @param offset A position in screen coordinates (a tuple with x and y values)\n   * or a function that returns the top offset position.\n   *\n   */\n  setOffset(offset) {\n    if (Array.isArray(offset)) {\n      this.offset = () => offset;\n    } else {\n      this.offset = offset;\n    }\n  }\n  /**\n   * Retrieves the current scroll position.\n   * @returns The position in screen coordinates.\n   */\n  getScrollPosition() {\n    return [this.window.scrollX, this.window.scrollY];\n  }\n  /**\n   * Sets the scroll position.\n   * @param position The new position in screen coordinates.\n   */\n  scrollToPosition(position) {\n    this.window.scrollTo(position[0], position[1]);\n  }\n  /**\n   * Scrolls to an element and attempts to focus the element.\n   *\n   * Note that the function name here is misleading in that the target string may be an ID for a\n   * non-anchor element.\n   *\n   * @param target The ID of an element or name of the anchor.\n   *\n   * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n   * @see https://html.spec.whatwg.org/#scroll-to-fragid\n   */\n  scrollToAnchor(target) {\n    const elSelected = findAnchorFromDocument(this.document, target);\n    if (elSelected) {\n      this.scrollToElement(elSelected);\n      // After scrolling to the element, the spec dictates that we follow the focus steps for the\n      // target. Rather than following the robust steps, simply attempt focus.\n      //\n      // @see https://html.spec.whatwg.org/#get-the-focusable-area\n      // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus\n      // @see https://html.spec.whatwg.org/#focusable-area\n      elSelected.focus();\n    }\n  }\n  /**\n   * Disables automatic scroll restoration provided by the browser.\n   */\n  setHistoryScrollRestoration(scrollRestoration) {\n    this.window.history.scrollRestoration = scrollRestoration;\n  }\n  /**\n   * Scrolls to an element using the native offset and the specified offset set on this scroller.\n   *\n   * The offset can be used when we know that there is a floating header and scrolling naively to an\n   * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.\n   */\n  scrollToElement(el) {\n    const rect = el.getBoundingClientRect();\n    const left = rect.left + this.window.pageXOffset;\n    const top = rect.top + this.window.pageYOffset;\n    const offset = this.offset();\n    this.window.scrollTo(left - offset[0], top - offset[1]);\n  }\n}\nfunction findAnchorFromDocument(document, target) {\n  const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];\n  if (documentResult) {\n    return documentResult;\n  }\n  // `getElementById` and `getElementsByName` won't pierce through the shadow DOM so we\n  // have to traverse the DOM manually and do the lookup through the shadow roots.\n  if (typeof document.createTreeWalker === 'function' && document.body && typeof document.body.attachShadow === 'function') {\n    const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n    let currentNode = treeWalker.currentNode;\n    while (currentNode) {\n      const shadowRoot = currentNode.shadowRoot;\n      if (shadowRoot) {\n        // Note that `ShadowRoot` doesn't support `getElementsByName`\n        // so we have to fall back to `querySelector`.\n        const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name=\"${target}\"]`);\n        if (result) {\n          return result;\n        }\n      }\n      currentNode = treeWalker.nextNode();\n    }\n  }\n  return null;\n}\n/**\n * Provides an empty implementation of the viewport scroller.\n */\nclass NullViewportScroller {\n  /**\n   * Empty implementation\n   */\n  setOffset(offset) {}\n  /**\n   * Empty implementation\n   */\n  getScrollPosition() {\n    return [0, 0];\n  }\n  /**\n   * Empty implementation\n   */\n  scrollToPosition(position) {}\n  /**\n   * Empty implementation\n   */\n  scrollToAnchor(anchor) {}\n  /**\n   * Empty implementation\n   */\n  setHistoryScrollRestoration(scrollRestoration) {}\n}\n\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nclass XhrFactory {}\n\n/**\n * Value (out of 100) of the requested quality for placeholder images.\n */\nconst PLACEHOLDER_QUALITY = '20';\n\n// Converts a string that represents a URL into a URL class instance.\nfunction getUrl(src, win) {\n  // Don't use a base URL is the URL is absolute.\n  return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);\n}\n// Checks whether a URL is absolute (i.e. starts with `http://` or `https://`).\nfunction isAbsoluteUrl(src) {\n  return /^https?:\\/\\//.test(src);\n}\n// Given a URL, extract the hostname part.\n// If a URL is a relative one - the URL is returned as is.\nfunction extractHostname(url) {\n  return isAbsoluteUrl(url) ? new URL(url).hostname : url;\n}\nfunction isValidPath(path) {\n  const isString = typeof path === 'string';\n  if (!isString || path.trim() === '') {\n    return false;\n  }\n  // Calling new URL() will throw if the path string is malformed\n  try {\n    const url = new URL(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction normalizePath(path) {\n  return path.endsWith('/') ? path.slice(0, -1) : path;\n}\nfunction normalizeSrc(src) {\n  return src.startsWith('/') ? src.slice(1) : src;\n}\n\n/**\n * Noop image loader that does no transformation to the original src and just returns it as is.\n * This loader is used as a default one if more specific logic is not provided in an app config.\n *\n * @see {@link ImageLoader}\n * @see {@link NgOptimizedImage}\n */\nconst noopImageLoader = config => config.src;\n/**\n * Injection token that configures the image loader function.\n *\n * @see {@link ImageLoader}\n * @see {@link NgOptimizedImage}\n * @publicApi\n */\nconst IMAGE_LOADER = new InjectionToken(ngDevMode ? 'ImageLoader' : '', {\n  providedIn: 'root',\n  factory: () => noopImageLoader\n});\n/**\n * Internal helper function that makes it easier to introduce custom image loaders for the\n * `NgOptimizedImage` directive. It is enough to specify a URL builder function to obtain full DI\n * configuration for a given loader: a DI token corresponding to the actual loader function, plus DI\n * tokens managing preconnect check functionality.\n * @param buildUrlFn a function returning a full URL based on loader's configuration\n * @param exampleUrls example of full URLs for a given loader (used in error messages)\n * @returns a set of DI providers corresponding to the configured image loader\n */\nfunction createImageLoader(buildUrlFn, exampleUrls) {\n  return function provideImageLoader(path) {\n    if (!isValidPath(path)) {\n      throwInvalidPathError(path, exampleUrls || []);\n    }\n    // The trailing / is stripped (if provided) to make URL construction (concatenation) easier in\n    // the individual loader functions.\n    path = normalizePath(path);\n    const loaderFn = config => {\n      if (isAbsoluteUrl(config.src)) {\n        // Image loader functions expect an image file name (e.g. `my-image.png`)\n        // or a relative path + a file name (e.g. `/a/b/c/my-image.png`) as an input,\n        // so the final absolute URL can be constructed.\n        // When an absolute URL is provided instead - the loader can not\n        // build a final URL, thus the error is thrown to indicate that.\n        throwUnexpectedAbsoluteUrlError(path, config.src);\n      }\n      return buildUrlFn(path, {\n        ...config,\n        src: normalizeSrc(config.src)\n      });\n    };\n    const providers = [{\n      provide: IMAGE_LOADER,\n      useValue: loaderFn\n    }];\n    return providers;\n  };\n}\nfunction throwInvalidPathError(path, exampleUrls) {\n  throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply a path using one of the following formats: ${exampleUrls.join(' or ')}`);\n}\nfunction throwUnexpectedAbsoluteUrlError(path, url) {\n  throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected a \\`<img>\\` tag with an invalid \\`ngSrc\\` attribute: ${url}. ` + `This image loader expects \\`ngSrc\\` to be a relative URL - ` + `however the provided value is an absolute URL. ` + `To fix this, provide \\`ngSrc\\` as a path relative to the base URL ` + `configured for this loader (\\`${path}\\`).`);\n}\n\n/**\n * Function that generates an ImageLoader for [Cloudflare Image\n * Resizing](https://developers.cloudflare.com/images/image-resizing/) and turns it into an Angular\n * provider. Note: Cloudflare has multiple image products - this provider is specifically for\n * Cloudflare Image Resizing; it will not work with Cloudflare Images or Cloudflare Polish.\n *\n * @param path Your domain name, e.g. https://mysite.com\n * @returns Provider that provides an ImageLoader function\n *\n * @publicApi\n */\nconst provideCloudflareLoader = createImageLoader(createCloudflareUrl, ngDevMode ? ['https://<ZONE>/cdn-cgi/image/<OPTIONS>/<SOURCE-IMAGE>'] : undefined);\nfunction createCloudflareUrl(path, config) {\n  let params = `format=auto`;\n  if (config.width) {\n    params += `,width=${config.width}`;\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    params += `,quality=${PLACEHOLDER_QUALITY}`;\n  }\n  // Cloudflare image URLs format:\n  // https://developers.cloudflare.com/images/image-resizing/url-format/\n  return `${path}/cdn-cgi/image/${params}/${config.src}`;\n}\n\n/**\n * Name and URL tester for Cloudinary.\n */\nconst cloudinaryLoaderInfo = {\n  name: 'Cloudinary',\n  testUrl: isCloudinaryUrl\n};\nconst CLOUDINARY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.cloudinary\\.com\\/.+/;\n/**\n * Tests whether a URL is from Cloudinary CDN.\n */\nfunction isCloudinaryUrl(url) {\n  return CLOUDINARY_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Cloudinary and turns it into an Angular provider.\n *\n * @param path Base URL of your Cloudinary images\n * This URL should match one of the following formats:\n * https://res.cloudinary.com/mysite\n * https://mysite.cloudinary.com\n * https://subdomain.mysite.com\n * @returns Set of providers to configure the Cloudinary loader.\n *\n * @publicApi\n */\nconst provideCloudinaryLoader = createImageLoader(createCloudinaryUrl, ngDevMode ? ['https://res.cloudinary.com/mysite', 'https://mysite.cloudinary.com', 'https://subdomain.mysite.com'] : undefined);\nfunction createCloudinaryUrl(path, config) {\n  // Cloudinary image URLformat:\n  // https://cloudinary.com/documentation/image_transformations#transformation_url_structure\n  // Example of a Cloudinary image URL:\n  // https://res.cloudinary.com/mysite/image/upload/c_scale,f_auto,q_auto,w_600/marketing/tile-topics-m.png\n  // For a placeholder image, we use the lowest image setting available to reduce the load time\n  // else we use the auto size\n  const quality = config.isPlaceholder ? 'q_auto:low' : 'q_auto';\n  let params = `f_auto,${quality}`;\n  if (config.width) {\n    params += `,w_${config.width}`;\n  }\n  if (config.loaderParams?.['rounded']) {\n    params += `,r_max`;\n  }\n  return `${path}/image/upload/${params}/${config.src}`;\n}\n\n/**\n * Name and URL tester for ImageKit.\n */\nconst imageKitLoaderInfo = {\n  name: 'ImageKit',\n  testUrl: isImageKitUrl\n};\nconst IMAGE_KIT_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imagekit\\.io\\/.+/;\n/**\n * Tests whether a URL is from ImageKit CDN.\n */\nfunction isImageKitUrl(url) {\n  return IMAGE_KIT_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for ImageKit and turns it into an Angular provider.\n *\n * @param path Base URL of your ImageKit images\n * This URL should match one of the following formats:\n * https://ik.imagekit.io/myaccount\n * https://subdomain.mysite.com\n * @returns Set of providers to configure the ImageKit loader.\n *\n * @publicApi\n */\nconst provideImageKitLoader = createImageLoader(createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined);\nfunction createImagekitUrl(path, config) {\n  // Example of an ImageKit image URL:\n  // https://ik.imagekit.io/demo/tr:w-300,h-300/medium_cafe_B1iTdD0C.jpg\n  const {\n    src,\n    width\n  } = config;\n  const params = [];\n  if (width) {\n    params.push(`w-${width}`);\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    params.push(`q-${PLACEHOLDER_QUALITY}`);\n  }\n  const urlSegments = params.length ? [path, `tr:${params.join(',')}`, src] : [path, src];\n  const url = new URL(urlSegments.join('/'));\n  return url.href;\n}\n\n/**\n * Name and URL tester for Imgix.\n */\nconst imgixLoaderInfo = {\n  name: 'Imgix',\n  testUrl: isImgixUrl\n};\nconst IMGIX_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imgix\\.net\\/.+/;\n/**\n * Tests whether a URL is from Imgix CDN.\n */\nfunction isImgixUrl(url) {\n  return IMGIX_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Imgix and turns it into an Angular provider.\n *\n * @param path path to the desired Imgix origin,\n * e.g. https://somepath.imgix.net or https://images.mysite.com\n * @returns Set of providers to configure the Imgix loader.\n *\n * @publicApi\n */\nconst provideImgixLoader = createImageLoader(createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined);\nfunction createImgixUrl(path, config) {\n  const url = new URL(`${path}/${config.src}`);\n  // This setting ensures the smallest allowable format is set.\n  url.searchParams.set('auto', 'format');\n  if (config.width) {\n    url.searchParams.set('w', config.width.toString());\n  }\n  // When requesting a placeholder image we ask a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    url.searchParams.set('q', PLACEHOLDER_QUALITY);\n  }\n  return url.href;\n}\n\n/**\n * Name and URL tester for Netlify.\n */\nconst netlifyLoaderInfo = {\n  name: 'Netlify',\n  testUrl: isNetlifyUrl\n};\nconst NETLIFY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.netlify\\.app\\/.+/;\n/**\n * Tests whether a URL is from a Netlify site. This won't catch sites with a custom domain,\n * but it's a good start for sites in development. This is only used to warn users who haven't\n * configured an image loader.\n */\nfunction isNetlifyUrl(url) {\n  return NETLIFY_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Netlify and turns it into an Angular provider.\n *\n * @param path optional URL of the desired Netlify site. Defaults to the current site.\n * @returns Set of providers to configure the Netlify loader.\n *\n * @publicApi\n */\nfunction provideNetlifyLoader(path) {\n  if (path && !isValidPath(path)) {\n    throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply either the full URL to the Netlify site, or leave it empty to use the current site.`);\n  }\n  if (path) {\n    const url = new URL(path);\n    path = url.origin;\n  }\n  const loaderFn = config => {\n    return createNetlifyUrl(config, path);\n  };\n  const providers = [{\n    provide: IMAGE_LOADER,\n    useValue: loaderFn\n  }];\n  return providers;\n}\nconst validParams = new Map([['height', 'h'], ['fit', 'fit'], ['quality', 'q'], ['q', 'q'], ['position', 'position']]);\nfunction createNetlifyUrl(config, path) {\n  // Note: `path` can be undefined, in which case we use a fake one to construct a `URL` instance.\n  const url = new URL(path ?? 'https://a/');\n  url.pathname = '/.netlify/images';\n  if (!isAbsoluteUrl(config.src) && !config.src.startsWith('/')) {\n    config.src = '/' + config.src;\n  }\n  url.searchParams.set('url', config.src);\n  if (config.width) {\n    url.searchParams.set('w', config.width.toString());\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  // If the quality is specified in the loader config - always use provided value.\n  const configQuality = config.loaderParams?.['quality'] ?? config.loaderParams?.['q'];\n  if (config.isPlaceholder && !configQuality) {\n    url.searchParams.set('q', PLACEHOLDER_QUALITY);\n  }\n  for (const [param, value] of Object.entries(config.loaderParams ?? {})) {\n    if (validParams.has(param)) {\n      url.searchParams.set(validParams.get(param), value.toString());\n    } else {\n      if (ngDevMode) {\n        console.warn(ɵformatRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, `The Netlify image loader has detected an \\`<img>\\` tag with the unsupported attribute \"\\`${param}\\`\".`));\n      }\n    }\n  }\n  // The \"a\" hostname is used for relative URLs, so we can remove it from the final URL.\n  return url.hostname === 'a' ? url.href.replace(url.origin, '') : url.href;\n}\n\n// Assembles directive details string, useful for error messages.\nfunction imgDirectiveDetails(ngSrc, includeNgSrc = true) {\n  const ngSrcInfo = includeNgSrc ? `(activated on an <img> element with the \\`ngSrc=\"${ngSrc}\"\\`) ` : '';\n  return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;\n}\n\n/**\n * Asserts that the application is in development mode. Throws an error if the application is in\n * production mode. This assert can be used to make sure that there is no dev-mode code invoked in\n * the prod mode accidentally.\n */\nfunction assertDevMode(checkName) {\n  if (!ngDevMode) {\n    throw new ɵRuntimeError(2958 /* RuntimeErrorCode.UNEXPECTED_DEV_MODE_CHECK_IN_PROD_MODE */, `Unexpected invocation of the ${checkName} in the prod mode. ` + `Please make sure that the prod mode is enabled for production builds.`);\n  }\n}\n\n/**\n * Observer that detects whether an image with `NgOptimizedImage`\n * is treated as a Largest Contentful Paint (LCP) element. If so,\n * asserts that the image has the `priority` attribute.\n *\n * Note: this is a dev-mode only class and it does not appear in prod bundles,\n * thus there is no `ngDevMode` use in the code.\n *\n * Based on https://web.dev/lcp/#measure-lcp-in-javascript.\n */\nclass LCPImageObserver {\n  // Map of full image URLs -> original `ngSrc` values.\n  images = new Map();\n  window = null;\n  observer = null;\n  constructor() {\n    const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n    assertDevMode('LCP checker');\n    const win = inject(DOCUMENT).defaultView;\n    if (isBrowser && typeof PerformanceObserver !== 'undefined') {\n      this.window = win;\n      this.observer = this.initPerformanceObserver();\n    }\n  }\n  /**\n   * Inits PerformanceObserver and subscribes to LCP events.\n   * Based on https://web.dev/lcp/#measure-lcp-in-javascript\n   */\n  initPerformanceObserver() {\n    const observer = new PerformanceObserver(entryList => {\n      const entries = entryList.getEntries();\n      if (entries.length === 0) return;\n      // We use the latest entry produced by the `PerformanceObserver` as the best\n      // signal on which element is actually an LCP one. As an example, the first image to load on\n      // a page, by virtue of being the only thing on the page so far, is often a LCP candidate\n      // and gets reported by PerformanceObserver, but isn't necessarily the LCP element.\n      const lcpElement = entries[entries.length - 1];\n      // Cast to `any` due to missing `element` on the `LargestContentfulPaint` type of entry.\n      // See https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint\n      const imgSrc = lcpElement.element?.src ?? '';\n      // Exclude `data:` and `blob:` URLs, since they are not supported by the directive.\n      if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n      const img = this.images.get(imgSrc);\n      if (!img) return;\n      if (!img.priority && !img.alreadyWarnedPriority) {\n        img.alreadyWarnedPriority = true;\n        logMissingPriorityError(imgSrc);\n      }\n      if (img.modified && !img.alreadyWarnedModified) {\n        img.alreadyWarnedModified = true;\n        logModifiedWarning(imgSrc);\n      }\n    });\n    observer.observe({\n      type: 'largest-contentful-paint',\n      buffered: true\n    });\n    return observer;\n  }\n  registerImage(rewrittenSrc, originalNgSrc, isPriority) {\n    if (!this.observer) return;\n    const newObservedImageState = {\n      priority: isPriority,\n      modified: false,\n      alreadyWarnedModified: false,\n      alreadyWarnedPriority: false\n    };\n    this.images.set(getUrl(rewrittenSrc, this.window).href, newObservedImageState);\n  }\n  unregisterImage(rewrittenSrc) {\n    if (!this.observer) return;\n    this.images.delete(getUrl(rewrittenSrc, this.window).href);\n  }\n  updateImage(originalSrc, newSrc) {\n    if (!this.observer) return;\n    const originalUrl = getUrl(originalSrc, this.window).href;\n    const img = this.images.get(originalUrl);\n    if (img) {\n      img.modified = true;\n      this.images.set(getUrl(newSrc, this.window).href, img);\n      this.images.delete(originalUrl);\n    }\n  }\n  ngOnDestroy() {\n    if (!this.observer) return;\n    this.observer.disconnect();\n    this.images.clear();\n  }\n  static ɵfac = function LCPImageObserver_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LCPImageObserver)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: LCPImageObserver,\n    factory: LCPImageObserver.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LCPImageObserver, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction logMissingPriorityError(ngSrc) {\n  const directiveDetails = imgDirectiveDetails(ngSrc);\n  console.error(ɵformatRuntimeError(2955 /* RuntimeErrorCode.LCP_IMG_MISSING_PRIORITY */, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element but was not marked \"priority\". This image should be marked ` + `\"priority\" in order to prioritize its loading. ` + `To fix this, add the \"priority\" attribute.`));\n}\nfunction logModifiedWarning(ngSrc) {\n  const directiveDetails = imgDirectiveDetails(ngSrc);\n  console.warn(ɵformatRuntimeError(2964 /* RuntimeErrorCode.LCP_IMG_NGSRC_MODIFIED */, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element and has had its \"ngSrc\" attribute modified. This can cause ` + `slower loading performance. It is recommended not to modify the \"ngSrc\" ` + `property on any image which could be the LCP element.`));\n}\n\n// Set of origins that are always excluded from the preconnect checks.\nconst INTERNAL_PRECONNECT_CHECK_BLOCKLIST = new Set(['localhost', '127.0.0.1', '0.0.0.0']);\n/**\n * Injection token to configure which origins should be excluded\n * from the preconnect checks. It can either be a single string or an array of strings\n * to represent a group of origins, for example:\n *\n * ```ts\n *  {provide: PRECONNECT_CHECK_BLOCKLIST, useValue: 'https://your-domain.com'}\n * ```\n *\n * or:\n *\n * ```ts\n *  {provide: PRECONNECT_CHECK_BLOCKLIST,\n *   useValue: ['https://your-domain-1.com', 'https://your-domain-2.com']}\n * ```\n *\n * @publicApi\n */\nconst PRECONNECT_CHECK_BLOCKLIST = new InjectionToken(ngDevMode ? 'PRECONNECT_CHECK_BLOCKLIST' : '');\n/**\n * Contains the logic to detect whether an image, marked with the \"priority\" attribute\n * has a corresponding `<link rel=\"preconnect\">` tag in the `document.head`.\n *\n * Note: this is a dev-mode only class, which should not appear in prod bundles,\n * thus there is no `ngDevMode` use in the code.\n */\nclass PreconnectLinkChecker {\n  document = inject(DOCUMENT);\n  isServer = isPlatformServer(inject(PLATFORM_ID));\n  /**\n   * Set of <link rel=\"preconnect\"> tags found on this page.\n   * The `null` value indicates that there was no DOM query operation performed.\n   */\n  preconnectLinks = null;\n  /*\n   * Keep track of all already seen origin URLs to avoid repeating the same check.\n   */\n  alreadySeen = new Set();\n  window = null;\n  blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);\n  constructor() {\n    assertDevMode('preconnect link checker');\n    const win = this.document.defaultView;\n    if (typeof win !== 'undefined') {\n      this.window = win;\n    }\n    const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {\n      optional: true\n    });\n    if (blocklist) {\n      this.populateBlocklist(blocklist);\n    }\n  }\n  populateBlocklist(origins) {\n    if (Array.isArray(origins)) {\n      deepForEach(origins, origin => {\n        this.blocklist.add(extractHostname(origin));\n      });\n    } else {\n      this.blocklist.add(extractHostname(origins));\n    }\n  }\n  /**\n   * Checks that a preconnect resource hint exists in the head for the\n   * given src.\n   *\n   * @param rewrittenSrc src formatted with loader\n   * @param originalNgSrc ngSrc value\n   */\n  assertPreconnect(rewrittenSrc, originalNgSrc) {\n    if (this.isServer) return;\n    const imgUrl = getUrl(rewrittenSrc, this.window);\n    if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;\n    // Register this origin as seen, so we don't check it again later.\n    this.alreadySeen.add(imgUrl.origin);\n    // Note: we query for preconnect links only *once* and cache the results\n    // for the entire lifespan of an application, since it's unlikely that the\n    // list would change frequently. This allows to make sure there are no\n    // performance implications of making extra DOM lookups for each image.\n    this.preconnectLinks ??= this.queryPreconnectLinks();\n    if (!this.preconnectLinks.has(imgUrl.origin)) {\n      console.warn(ɵformatRuntimeError(2956 /* RuntimeErrorCode.PRIORITY_IMG_MISSING_PRECONNECT_TAG */, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this ` + `image. Preconnecting to the origin(s) that serve priority images ensures that these ` + `images are delivered as soon as possible. To fix this, please add the following ` + `element into the <head> of the document:\\n` + `  <link rel=\"preconnect\" href=\"${imgUrl.origin}\">`));\n    }\n  }\n  queryPreconnectLinks() {\n    const preconnectUrls = new Set();\n    const selector = 'link[rel=preconnect]';\n    const links = Array.from(this.document.querySelectorAll(selector));\n    for (let link of links) {\n      const url = getUrl(link.href, this.window);\n      preconnectUrls.add(url.origin);\n    }\n    return preconnectUrls;\n  }\n  ngOnDestroy() {\n    this.preconnectLinks?.clear();\n    this.alreadySeen.clear();\n  }\n  static ɵfac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreconnectLinkChecker)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreconnectLinkChecker,\n    factory: PreconnectLinkChecker.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreconnectLinkChecker, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n/**\n * Invokes a callback for each element in the array. Also invokes a callback\n * recursively for each nested array.\n */\nfunction deepForEach(input, fn) {\n  for (let value of input) {\n    Array.isArray(value) ? deepForEach(value, fn) : fn(value);\n  }\n}\n\n/**\n * In SSR scenarios, a preload `<link>` element is generated for priority images.\n * Having a large number of preload tags may negatively affect the performance,\n * so we warn developers (by throwing an error) if the number of preloaded images\n * is above a certain threshold. This const specifies this threshold.\n */\nconst DEFAULT_PRELOADED_IMAGES_LIMIT = 5;\n/**\n * Helps to keep track of priority images that already have a corresponding\n * preload tag (to avoid generating multiple preload tags with the same URL).\n *\n * This Set tracks the original src passed into the `ngSrc` input not the src after it has been\n * run through the specified `IMAGE_LOADER`.\n */\nconst PRELOADED_IMAGES = new InjectionToken('NG_OPTIMIZED_PRELOADED_IMAGES', {\n  providedIn: 'root',\n  factory: () => new Set()\n});\n\n/**\n * @description Contains the logic needed to track and add preload link tags to the `<head>` tag. It\n * will also track what images have already had preload link tags added so as to not duplicate link\n * tags.\n *\n * In dev mode this service will validate that the number of preloaded images does not exceed the\n * configured default preloaded images limit: {@link DEFAULT_PRELOADED_IMAGES_LIMIT}.\n */\nclass PreloadLinkCreator {\n  preloadedImages = inject(PRELOADED_IMAGES);\n  document = inject(DOCUMENT);\n  /**\n   * @description Add a preload `<link>` to the `<head>` of the `index.html` that is served from the\n   * server while using Angular Universal and SSR to kick off image loads for high priority images.\n   *\n   * The `sizes` (passed in from the user) and `srcset` (parsed and formatted from `ngSrcset`)\n   * properties used to set the corresponding attributes, `imagesizes` and `imagesrcset`\n   * respectively, on the preload `<link>` tag so that the correctly sized image is preloaded from\n   * the CDN.\n   *\n   * {@link https://web.dev/preload-responsive-images/#imagesrcset-and-imagesizes}\n   *\n   * @param renderer The `Renderer2` passed in from the directive\n   * @param src The original src of the image that is set on the `ngSrc` input.\n   * @param srcset The parsed and formatted srcset created from the `ngSrcset` input\n   * @param sizes The value of the `sizes` attribute passed in to the `<img>` tag\n   */\n  createPreloadLinkTag(renderer, src, srcset, sizes) {\n    if (ngDevMode) {\n      if (this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {\n        throw new ɵRuntimeError(2961 /* RuntimeErrorCode.TOO_MANY_PRELOADED_IMAGES */, ngDevMode && `The \\`NgOptimizedImage\\` directive has detected that more than ` + `${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. ` + `This might negatively affect an overall performance of the page. ` + `To fix this, remove the \"priority\" attribute from images with less priority.`);\n      }\n    }\n    if (this.preloadedImages.has(src)) {\n      return;\n    }\n    this.preloadedImages.add(src);\n    const preload = renderer.createElement('link');\n    renderer.setAttribute(preload, 'as', 'image');\n    renderer.setAttribute(preload, 'href', src);\n    renderer.setAttribute(preload, 'rel', 'preload');\n    renderer.setAttribute(preload, 'fetchpriority', 'high');\n    if (sizes) {\n      renderer.setAttribute(preload, 'imageSizes', sizes);\n    }\n    if (srcset) {\n      renderer.setAttribute(preload, 'imageSrcset', srcset);\n    }\n    renderer.appendChild(this.document.head, preload);\n  }\n  static ɵfac = function PreloadLinkCreator_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreloadLinkCreator)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreloadLinkCreator,\n    factory: PreloadLinkCreator.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreloadLinkCreator, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n\n/**\n * When a Base64-encoded image is passed as an input to the `NgOptimizedImage` directive,\n * an error is thrown. The image content (as a string) might be very long, thus making\n * it hard to read an error message if the entire string is included. This const defines\n * the number of characters that should be included into the error message. The rest\n * of the content is truncated.\n */\nconst BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;\n/**\n * RegExpr to determine whether a src in a srcset is using width descriptors.\n * Should match something like: \"100w, 200w\".\n */\nconst VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\\s*\\d+w\\s*(,|$)){1,})$/;\n/**\n * RegExpr to determine whether a src in a srcset is using density descriptors.\n * Should match something like: \"1x, 2x, 50x\". Also supports decimals like \"1.5x, 1.50x\".\n */\nconst VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\\s*\\d+(\\.\\d+)?x\\s*(,|$)){1,})$/;\n/**\n * Srcset values with a density descriptor higher than this value will actively\n * throw an error. Such densities are not permitted as they cause image sizes\n * to be unreasonably large and slow down LCP.\n */\nconst ABSOLUTE_SRCSET_DENSITY_CAP = 3;\n/**\n * Used only in error message text to communicate best practices, as we will\n * only throw based on the slightly more conservative ABSOLUTE_SRCSET_DENSITY_CAP.\n */\nconst RECOMMENDED_SRCSET_DENSITY_CAP = 2;\n/**\n * Used in generating automatic density-based srcsets\n */\nconst DENSITY_SRCSET_MULTIPLIERS = [1, 2];\n/**\n * Used to determine which breakpoints to use on full-width images\n */\nconst VIEWPORT_BREAKPOINT_CUTOFF = 640;\n/**\n * Used to determine whether two aspect ratios are similar in value.\n */\nconst ASPECT_RATIO_TOLERANCE = 0.1;\n/**\n * Used to determine whether the image has been requested at an overly\n * large size compared to the actual rendered image size (after taking\n * into account a typical device pixel ratio). In pixels.\n */\nconst OVERSIZED_IMAGE_TOLERANCE = 1000;\n/**\n * Used to limit automatic srcset generation of very large sources for\n * fixed-size images. In pixels.\n */\nconst FIXED_SRCSET_WIDTH_LIMIT = 1920;\nconst FIXED_SRCSET_HEIGHT_LIMIT = 1080;\n/**\n * Default blur radius of the CSS filter used on placeholder images, in pixels\n */\nconst PLACEHOLDER_BLUR_AMOUNT = 15;\n/**\n * Placeholder dimension (height or width) limit in pixels. Angular produces a warning\n * when this limit is crossed.\n */\nconst PLACEHOLDER_DIMENSION_LIMIT = 1000;\n/**\n * Used to warn or error when the user provides an overly large dataURL for the placeholder\n * attribute.\n * Character count of Base64 images is 1 character per byte, and base64 encoding is approximately\n * 33% larger than base images, so 4000 characters is around 3KB on disk and 10000 characters is\n * around 7.7KB. Experimentally, 4000 characters is about 20x20px in PNG or medium-quality JPEG\n * format, and 10,000 is around 50x50px, but there's quite a bit of variation depending on how the\n * image is saved.\n */\nconst DATA_URL_WARN_LIMIT = 4000;\nconst DATA_URL_ERROR_LIMIT = 10000;\n/** Info about built-in loaders we can test for. */\nconst BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];\n/**\n * Threshold for the PRIORITY_TRUE_COUNT\n */\nconst PRIORITY_COUNT_THRESHOLD = 10;\n/**\n * This count is used to log a devMode warning\n * when the count of directive instances with priority=true\n * exceeds the threshold PRIORITY_COUNT_THRESHOLD\n */\nlet IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\n/**\n * This function is for testing purpose.\n */\nfunction resetImagePriorityCount() {\n  IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\n}\n/**\n * Directive that improves image loading performance by enforcing best practices.\n *\n * `NgOptimizedImage` ensures that the loading of the Largest Contentful Paint (LCP) image is\n * prioritized by:\n * - Automatically setting the `fetchpriority` attribute on the `<img>` tag\n * - Lazy loading non-priority images by default\n * - Automatically generating a preconnect link tag in the document head\n *\n * In addition, the directive:\n * - Generates appropriate asset URLs if a corresponding `ImageLoader` function is provided\n * - Automatically generates a srcset\n * - Requires that `width` and `height` are set\n * - Warns if `width` or `height` have been set incorrectly\n * - Warns if the image will be visually distorted when rendered\n *\n * @usageNotes\n * The `NgOptimizedImage` directive is marked as [standalone](guide/components/importing) and can\n * be imported directly.\n *\n * Follow the steps below to enable and use the directive:\n * 1. Import it into the necessary NgModule or a standalone Component.\n * 2. Optionally provide an `ImageLoader` if you use an image hosting service.\n * 3. Update the necessary `<img>` tags in templates and replace `src` attributes with `ngSrc`.\n * Using a `ngSrc` allows the directive to control when the `src` gets set, which triggers an image\n * download.\n *\n * Step 1: import the `NgOptimizedImage` directive.\n *\n * ```ts\n * import { NgOptimizedImage } from '@angular/common';\n *\n * // Include it into the necessary NgModule\n * @NgModule({\n *   imports: [NgOptimizedImage],\n * })\n * class AppModule {}\n *\n * // ... or a standalone Component\n * @Component({\n *   imports: [NgOptimizedImage],\n * })\n * class MyStandaloneComponent {}\n * ```\n *\n * Step 2: configure a loader.\n *\n * To use the **default loader**: no additional code changes are necessary. The URL returned by the\n * generic loader will always match the value of \"src\". In other words, this loader applies no\n * transformations to the resource URL and the value of the `ngSrc` attribute will be used as is.\n *\n * To use an existing loader for a **third-party image service**: add the provider factory for your\n * chosen service to the `providers` array. In the example below, the Imgix loader is used:\n *\n * ```ts\n * import {provideImgixLoader} from '@angular/common';\n *\n * // Call the function and add the result to the `providers` array:\n * providers: [\n *   provideImgixLoader(\"https://my.base.url/\"),\n * ],\n * ```\n *\n * The `NgOptimizedImage` directive provides the following functions:\n * - `provideCloudflareLoader`\n * - `provideCloudinaryLoader`\n * - `provideImageKitLoader`\n * - `provideImgixLoader`\n *\n * If you use a different image provider, you can create a custom loader function as described\n * below.\n *\n * To use a **custom loader**: provide your loader function as a value for the `IMAGE_LOADER` DI\n * token.\n *\n * ```ts\n * import {IMAGE_LOADER, ImageLoaderConfig} from '@angular/common';\n *\n * // Configure the loader using the `IMAGE_LOADER` token.\n * providers: [\n *   {\n *      provide: IMAGE_LOADER,\n *      useValue: (config: ImageLoaderConfig) => {\n *        return `https://example.com/${config.src}-${config.width}.jpg`;\n *      }\n *   },\n * ],\n * ```\n *\n * Step 3: update `<img>` tags in templates to use `ngSrc` instead of `src`.\n *\n * ```html\n * <img ngSrc=\"logo.png\" width=\"200\" height=\"100\">\n * ```\n *\n * @publicApi\n */\nclass NgOptimizedImage {\n  imageLoader = inject(IMAGE_LOADER);\n  config = processConfig(inject(ɵIMAGE_CONFIG));\n  renderer = inject(Renderer2);\n  imgElement = inject(ElementRef).nativeElement;\n  injector = inject(Injector);\n  isServer = isPlatformServer(inject(PLATFORM_ID));\n  preloadLinkCreator = inject(PreloadLinkCreator);\n  // a LCP image observer - should be injected only in the dev mode\n  lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;\n  /**\n   * Calculate the rewritten `src` once and store it.\n   * This is needed to avoid repetitive calculations and make sure the directive cleanup in the\n   * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other\n   * instance that might be already destroyed).\n   */\n  _renderedSrc = null;\n  /**\n   * Name of the source image.\n   * Image name will be processed by the image loader and the final URL will be applied as the `src`\n   * property of the image.\n   */\n  ngSrc;\n  /**\n   * A comma separated list of width or density descriptors.\n   * The image name will be taken from `ngSrc` and combined with the list of width or density\n   * descriptors to generate the final `srcset` property of the image.\n   *\n   * Example:\n   * ```\n   * <img ngSrc=\"hello.jpg\" ngSrcset=\"100w, 200w\" />  =>\n   * <img src=\"path/hello.jpg\" srcset=\"path/hello.jpg?w=100 100w, path/hello.jpg?w=200 200w\" />\n   * ```\n   */\n  ngSrcset;\n  /**\n   * The base `sizes` attribute passed through to the `<img>` element.\n   * Providing sizes causes the image to create an automatic responsive srcset.\n   */\n  sizes;\n  /**\n   * For responsive images: the intrinsic width of the image in pixels.\n   * For fixed size images: the desired rendered width of the image in pixels.\n   */\n  width;\n  /**\n   * For responsive images: the intrinsic height of the image in pixels.\n   * For fixed size images: the desired rendered height of the image in pixels.\n   */\n  height;\n  /**\n   * The desired loading behavior (lazy, eager, or auto). Defaults to `lazy`,\n   * which is recommended for most images.\n   *\n   * Warning: Setting images as loading=\"eager\" or loading=\"auto\" marks them\n   * as non-priority images and can hurt loading performance. For images which\n   * may be the LCP element, use the `priority` attribute instead of `loading`.\n   */\n  loading;\n  /**\n   * Indicates whether this image should have a high priority.\n   */\n  priority = false;\n  /**\n   * Data to pass through to custom loaders.\n   */\n  loaderParams;\n  /**\n   * Disables automatic srcset generation for this image.\n   */\n  disableOptimizedSrcset = false;\n  /**\n   * Sets the image to \"fill mode\", which eliminates the height/width requirement and adds\n   * styles such that the image fills its containing element.\n   */\n  fill = false;\n  /**\n   * A URL or data URL for an image to be used as a placeholder while this image loads.\n   */\n  placeholder;\n  /**\n   * Configuration object for placeholder settings. Options:\n   *   * blur: Setting this to false disables the automatic CSS blur.\n   */\n  placeholderConfig;\n  /**\n   * Value of the `src` attribute if set on the host `<img>` element.\n   * This input is exclusively read to assert that `src` is not set in conflict\n   * with `ngSrc` and that images don't start to load until a lazy loading strategy is set.\n   * @internal\n   */\n  src;\n  /**\n   * Value of the `srcset` attribute if set on the host `<img>` element.\n   * This input is exclusively read to assert that `srcset` is not set in conflict\n   * with `ngSrcset` and that images don't start to load until a lazy loading strategy is set.\n   * @internal\n   */\n  srcset;\n  /** @nodoc */\n  ngOnInit() {\n    ɵperformanceMarkFeature('NgOptimizedImage');\n    if (ngDevMode) {\n      const ngZone = this.injector.get(NgZone);\n      assertNonEmptyInput(this, 'ngSrc', this.ngSrc);\n      assertValidNgSrcset(this, this.ngSrcset);\n      assertNoConflictingSrc(this);\n      if (this.ngSrcset) {\n        assertNoConflictingSrcset(this);\n      }\n      assertNotBase64Image(this);\n      assertNotBlobUrl(this);\n      if (this.fill) {\n        assertEmptyWidthAndHeight(this);\n        // This leaves the Angular zone to avoid triggering unnecessary change detection cycles when\n        // `load` tasks are invoked on images.\n        ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));\n      } else {\n        assertNonEmptyWidthAndHeight(this);\n        if (this.height !== undefined) {\n          assertGreaterThanZero(this, this.height, 'height');\n        }\n        if (this.width !== undefined) {\n          assertGreaterThanZero(this, this.width, 'width');\n        }\n        // Only check for distorted images when not in fill mode, where\n        // images may be intentionally stretched, cropped or letterboxed.\n        ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));\n      }\n      assertValidLoadingInput(this);\n      if (!this.ngSrcset) {\n        assertNoComplexSizes(this);\n      }\n      assertValidPlaceholder(this, this.imageLoader);\n      assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);\n      assertNoNgSrcsetWithoutLoader(this, this.imageLoader);\n      assertNoLoaderParamsWithoutLoader(this, this.imageLoader);\n      if (this.lcpObserver !== null) {\n        const ngZone = this.injector.get(NgZone);\n        ngZone.runOutsideAngular(() => {\n          this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);\n        });\n      }\n      if (this.priority) {\n        const checker = this.injector.get(PreconnectLinkChecker);\n        checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);\n        if (!this.isServer) {\n          const applicationRef = this.injector.get(ApplicationRef);\n          assetPriorityCountBelowThreshold(applicationRef);\n        }\n      }\n    }\n    if (this.placeholder) {\n      this.removePlaceholderOnLoad(this.imgElement);\n    }\n    this.setHostAttributes();\n  }\n  setHostAttributes() {\n    // Must set width/height explicitly in case they are bound (in which case they will\n    // only be reflected and not found by the browser)\n    if (this.fill) {\n      this.sizes ||= '100vw';\n    } else {\n      this.setHostAttribute('width', this.width.toString());\n      this.setHostAttribute('height', this.height.toString());\n    }\n    this.setHostAttribute('loading', this.getLoadingBehavior());\n    this.setHostAttribute('fetchpriority', this.getFetchPriority());\n    // The `data-ng-img` attribute flags an image as using the directive, to allow\n    // for analysis of the directive's performance.\n    this.setHostAttribute('ng-img', 'true');\n    // The `src` and `srcset` attributes should be set last since other attributes\n    // could affect the image's loading behavior.\n    const rewrittenSrcset = this.updateSrcAndSrcset();\n    if (this.sizes) {\n      if (this.getLoadingBehavior() === 'lazy') {\n        this.setHostAttribute('sizes', 'auto, ' + this.sizes);\n      } else {\n        this.setHostAttribute('sizes', this.sizes);\n      }\n    } else {\n      if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === 'lazy') {\n        this.setHostAttribute('sizes', 'auto, 100vw');\n      }\n    }\n    if (this.isServer && this.priority) {\n      this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);\n    }\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (ngDevMode) {\n      assertNoPostInitInputChange(this, changes, ['ngSrcset', 'width', 'height', 'priority', 'fill', 'loading', 'sizes', 'loaderParams', 'disableOptimizedSrcset']);\n    }\n    if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {\n      const oldSrc = this._renderedSrc;\n      this.updateSrcAndSrcset(true);\n      const newSrc = this._renderedSrc;\n      if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {\n        const ngZone = this.injector.get(NgZone);\n        ngZone.runOutsideAngular(() => {\n          this.lcpObserver?.updateImage(oldSrc, newSrc);\n        });\n      }\n    }\n    if (ngDevMode && changes['placeholder']?.currentValue && !this.isServer) {\n      assertPlaceholderDimensions(this, this.imgElement);\n    }\n  }\n  callImageLoader(configWithoutCustomParams) {\n    let augmentedConfig = configWithoutCustomParams;\n    if (this.loaderParams) {\n      augmentedConfig.loaderParams = this.loaderParams;\n    }\n    return this.imageLoader(augmentedConfig);\n  }\n  getLoadingBehavior() {\n    if (!this.priority && this.loading !== undefined) {\n      return this.loading;\n    }\n    return this.priority ? 'eager' : 'lazy';\n  }\n  getFetchPriority() {\n    return this.priority ? 'high' : 'auto';\n  }\n  getRewrittenSrc() {\n    // ImageLoaderConfig supports setting a width property. However, we're not setting width here\n    // because if the developer uses rendered width instead of intrinsic width in the HTML width\n    // attribute, the image requested may be too small for 2x+ screens.\n    if (!this._renderedSrc) {\n      const imgConfig = {\n        src: this.ngSrc\n      };\n      // Cache calculated image src to reuse it later in the code.\n      this._renderedSrc = this.callImageLoader(imgConfig);\n    }\n    return this._renderedSrc;\n  }\n  getRewrittenSrcset() {\n    const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);\n    const finalSrcs = this.ngSrcset.split(',').filter(src => src !== '').map(srcStr => {\n      srcStr = srcStr.trim();\n      const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;\n      return `${this.callImageLoader({\n        src: this.ngSrc,\n        width\n      })} ${srcStr}`;\n    });\n    return finalSrcs.join(', ');\n  }\n  getAutomaticSrcset() {\n    if (this.sizes) {\n      return this.getResponsiveSrcset();\n    } else {\n      return this.getFixedSrcset();\n    }\n  }\n  getResponsiveSrcset() {\n    const {\n      breakpoints\n    } = this.config;\n    let filteredBreakpoints = breakpoints;\n    if (this.sizes?.trim() === '100vw') {\n      // Since this is a full-screen-width image, our srcset only needs to include\n      // breakpoints with full viewport widths.\n      filteredBreakpoints = breakpoints.filter(bp => bp >= VIEWPORT_BREAKPOINT_CUTOFF);\n    }\n    const finalSrcs = filteredBreakpoints.map(bp => `${this.callImageLoader({\n      src: this.ngSrc,\n      width: bp\n    })} ${bp}w`);\n    return finalSrcs.join(', ');\n  }\n  updateSrcAndSrcset(forceSrcRecalc = false) {\n    if (forceSrcRecalc) {\n      // Reset cached value, so that the followup `getRewrittenSrc()` call\n      // will recalculate it and update the cache.\n      this._renderedSrc = null;\n    }\n    const rewrittenSrc = this.getRewrittenSrc();\n    this.setHostAttribute('src', rewrittenSrc);\n    let rewrittenSrcset = undefined;\n    if (this.ngSrcset) {\n      rewrittenSrcset = this.getRewrittenSrcset();\n    } else if (this.shouldGenerateAutomaticSrcset()) {\n      rewrittenSrcset = this.getAutomaticSrcset();\n    }\n    if (rewrittenSrcset) {\n      this.setHostAttribute('srcset', rewrittenSrcset);\n    }\n    return rewrittenSrcset;\n  }\n  getFixedSrcset() {\n    const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map(multiplier => `${this.callImageLoader({\n      src: this.ngSrc,\n      width: this.width * multiplier\n    })} ${multiplier}x`);\n    return finalSrcs.join(', ');\n  }\n  shouldGenerateAutomaticSrcset() {\n    let oversizedImage = false;\n    if (!this.sizes) {\n      oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;\n    }\n    return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;\n  }\n  /**\n   * Returns an image url formatted for use with the CSS background-image property. Expects one of:\n   * * A base64 encoded image, which is wrapped and passed through.\n   * * A boolean. If true, calls the image loader to generate a small placeholder url.\n   */\n  generatePlaceholder(placeholderInput) {\n    const {\n      placeholderResolution\n    } = this.config;\n    if (placeholderInput === true) {\n      return `url(${this.callImageLoader({\n        src: this.ngSrc,\n        width: placeholderResolution,\n        isPlaceholder: true\n      })})`;\n    } else if (typeof placeholderInput === 'string') {\n      return `url(${placeholderInput})`;\n    }\n    return null;\n  }\n  /**\n   * Determines if blur should be applied, based on an optional boolean\n   * property `blur` within the optional configuration object `placeholderConfig`.\n   */\n  shouldBlurPlaceholder(placeholderConfig) {\n    if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {\n      return true;\n    }\n    return Boolean(placeholderConfig.blur);\n  }\n  removePlaceholderOnLoad(img) {\n    const callback = () => {\n      const changeDetectorRef = this.injector.get(ChangeDetectorRef);\n      removeLoadListenerFn();\n      removeErrorListenerFn();\n      this.placeholder = false;\n      changeDetectorRef.markForCheck();\n    };\n    const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);\n    const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);\n    callOnLoadIfImageIsLoaded(img, callback);\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    if (ngDevMode) {\n      if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {\n        this.lcpObserver.unregisterImage(this._renderedSrc);\n      }\n    }\n  }\n  setHostAttribute(name, value) {\n    this.renderer.setAttribute(this.imgElement, name, value);\n  }\n  static ɵfac = function NgOptimizedImage_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgOptimizedImage)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgOptimizedImage,\n    selectors: [[\"img\", \"ngSrc\", \"\"]],\n    hostVars: 18,\n    hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {\n      if (rf & 2) {\n        i0.ɵɵstyleProp(\"position\", ctx.fill ? \"absolute\" : null)(\"width\", ctx.fill ? \"100%\" : null)(\"height\", ctx.fill ? \"100%\" : null)(\"inset\", ctx.fill ? \"0\" : null)(\"background-size\", ctx.placeholder ? \"cover\" : null)(\"background-position\", ctx.placeholder ? \"50% 50%\" : null)(\"background-repeat\", ctx.placeholder ? \"no-repeat\" : null)(\"background-image\", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)(\"filter\", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? \"blur(15px)\" : null);\n      }\n    },\n    inputs: {\n      ngSrc: [2, \"ngSrc\", \"ngSrc\", unwrapSafeUrl],\n      ngSrcset: \"ngSrcset\",\n      sizes: \"sizes\",\n      width: [2, \"width\", \"width\", numberAttribute],\n      height: [2, \"height\", \"height\", numberAttribute],\n      loading: \"loading\",\n      priority: [2, \"priority\", \"priority\", booleanAttribute],\n      loaderParams: \"loaderParams\",\n      disableOptimizedSrcset: [2, \"disableOptimizedSrcset\", \"disableOptimizedSrcset\", booleanAttribute],\n      fill: [2, \"fill\", \"fill\", booleanAttribute],\n      placeholder: [2, \"placeholder\", \"placeholder\", booleanOrUrlAttribute],\n      placeholderConfig: \"placeholderConfig\",\n      src: \"src\",\n      srcset: \"srcset\"\n    },\n    features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgOptimizedImage, [{\n    type: Directive,\n    args: [{\n      selector: 'img[ngSrc]',\n      host: {\n        '[style.position]': 'fill ? \"absolute\" : null',\n        '[style.width]': 'fill ? \"100%\" : null',\n        '[style.height]': 'fill ? \"100%\" : null',\n        '[style.inset]': 'fill ? \"0\" : null',\n        '[style.background-size]': 'placeholder ? \"cover\" : null',\n        '[style.background-position]': 'placeholder ? \"50% 50%\" : null',\n        '[style.background-repeat]': 'placeholder ? \"no-repeat\" : null',\n        '[style.background-image]': 'placeholder ? generatePlaceholder(placeholder) : null',\n        '[style.filter]': `placeholder && shouldBlurPlaceholder(placeholderConfig) ? \"blur(${PLACEHOLDER_BLUR_AMOUNT}px)\" : null`\n      }\n    }]\n  }], null, {\n    ngSrc: [{\n      type: Input,\n      args: [{\n        required: true,\n        transform: unwrapSafeUrl\n      }]\n    }],\n    ngSrcset: [{\n      type: Input\n    }],\n    sizes: [{\n      type: Input\n    }],\n    width: [{\n      type: Input,\n      args: [{\n        transform: numberAttribute\n      }]\n    }],\n    height: [{\n      type: Input,\n      args: [{\n        transform: numberAttribute\n      }]\n    }],\n    loading: [{\n      type: Input\n    }],\n    priority: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    loaderParams: [{\n      type: Input\n    }],\n    disableOptimizedSrcset: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    fill: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    placeholder: [{\n      type: Input,\n      args: [{\n        transform: booleanOrUrlAttribute\n      }]\n    }],\n    placeholderConfig: [{\n      type: Input\n    }],\n    src: [{\n      type: Input\n    }],\n    srcset: [{\n      type: Input\n    }]\n  });\n})();\n/***** Helpers *****/\n/**\n * Sorts provided config breakpoints and uses defaults.\n */\nfunction processConfig(config) {\n  let sortedBreakpoints = {};\n  if (config.breakpoints) {\n    sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);\n  }\n  return Object.assign({}, ɵIMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);\n}\n/***** Assert functions *****/\n/**\n * Verifies that there is no `src` set on a host element.\n */\nfunction assertNoConflictingSrc(dir) {\n  if (dir.src) {\n    throw new ɵRuntimeError(2950 /* RuntimeErrorCode.UNEXPECTED_SRC_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \\`src\\` and \\`ngSrc\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`src\\` itself based on the value of \\`ngSrc\\`. ` + `To fix this, please remove the \\`src\\` attribute.`);\n  }\n}\n/**\n * Verifies that there is no `srcset` set on a host element.\n */\nfunction assertNoConflictingSrcset(dir) {\n  if (dir.srcset) {\n    throw new ɵRuntimeError(2951 /* RuntimeErrorCode.UNEXPECTED_SRCSET_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \\`srcset\\` and \\`ngSrcset\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`srcset\\` itself based on the value of ` + `\\`ngSrcset\\`. To fix this, please remove the \\`srcset\\` attribute.`);\n  }\n}\n/**\n * Verifies that the `ngSrc` is not a Base64-encoded image.\n */\nfunction assertNotBase64Image(dir) {\n  let ngSrc = dir.ngSrc.trim();\n  if (ngSrc.startsWith('data:')) {\n    if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {\n      ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';\n    }\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`ngSrc\\` is a Base64-encoded string ` + `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a standard \\`src\\` attribute instead.`);\n  }\n}\n/**\n * Verifies that the 'sizes' only includes responsive values.\n */\nfunction assertNoComplexSizes(dir) {\n  let sizes = dir.sizes;\n  if (sizes?.match(/((\\)|,)\\s|^)\\d+px/)) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`sizes\\` was set to a string including ` + `pixel values. For automatic \\`srcset\\` generation, \\`sizes\\` must only include responsive ` + `values, such as \\`sizes=\"50vw\"\\` or \\`sizes=\"(min-width: 768px) 50vw, 100vw\"\\`. ` + `To fix this, modify the \\`sizes\\` attribute, or provide your own \\`ngSrcset\\` value directly.`);\n  }\n}\nfunction assertValidPlaceholder(dir, imageLoader) {\n  assertNoPlaceholderConfigWithoutPlaceholder(dir);\n  assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);\n  assertNoOversizedDataUrl(dir);\n}\n/**\n * Verifies that placeholderConfig isn't being used without placeholder\n */\nfunction assertNoPlaceholderConfigWithoutPlaceholder(dir) {\n  if (dir.placeholderConfig && !dir.placeholder) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`placeholderConfig\\` options were provided for an ` + `image that does not use the \\`placeholder\\` attribute, and will have no effect.`);\n  }\n}\n/**\n * Warns if a relative URL placeholder is specified, but no loader is present to provide the small\n * image.\n */\nfunction assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {\n  if (dir.placeholder === true && imageLoader === noopImageLoader) {\n    throw new ɵRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to true but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for the primary image and its placeholder. ` + `To fix this, provide a loader or remove the \\`placeholder\\` attribute from the image.`);\n  }\n}\n/**\n * Warns or throws an error if an oversized dataURL placeholder is provided.\n */\nfunction assertNoOversizedDataUrl(dir) {\n  if (dir.placeholder && typeof dir.placeholder === 'string' && dir.placeholder.startsWith('data:')) {\n    if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {\n      throw new ɵRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` + `a smaller data URL placeholder.`);\n    }\n    if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {\n      console.warn(ɵformatRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` + `generate a smaller data URL placeholder.`));\n    }\n  }\n}\n/**\n * Verifies that the `ngSrc` is not a Blob URL.\n */\nfunction assertNotBlobUrl(dir) {\n  const ngSrc = dir.ngSrc.trim();\n  if (ngSrc.startsWith('blob:')) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrc\\` was set to a blob URL (${ngSrc}). ` + `Blob URLs are not supported by the NgOptimizedImage directive. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a regular \\`src\\` attribute instead.`);\n  }\n}\n/**\n * Verifies that the input is set to a non-empty string.\n */\nfunction assertNonEmptyInput(dir, name, value) {\n  const isString = typeof value === 'string';\n  const isEmptyString = isString && value.trim() === '';\n  if (!isString || isEmptyString) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`${name}\\` has an invalid value ` + `(\\`${value}\\`). To fix this, change the value to a non-empty string.`);\n  }\n}\n/**\n * Verifies that the `ngSrcset` is in a valid format, e.g. \"100w, 200w\" or \"1x, 2x\".\n */\nfunction assertValidNgSrcset(dir, value) {\n  if (value == null) return;\n  assertNonEmptyInput(dir, 'ngSrcset', value);\n  const stringVal = value;\n  const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);\n  const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);\n  if (isValidDensityDescriptor) {\n    assertUnderDensityCap(dir, stringVal);\n  }\n  const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;\n  if (!isValidSrcset) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrcset\\` has an invalid value (\\`${value}\\`). ` + `To fix this, supply \\`ngSrcset\\` using a comma-separated list of one or more width ` + `descriptors (e.g. \"100w, 200w\") or density descriptors (e.g. \"1x, 2x\").`);\n  }\n}\nfunction assertUnderDensityCap(dir, value) {\n  const underDensityCap = value.split(',').every(num => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);\n  if (!underDensityCap) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` contains an unsupported image density:` + `\\`${value}\\`. NgOptimizedImage generally recommends a max image density of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` + `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` + `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);\n  }\n}\n/**\n * Creates a `RuntimeError` instance to represent a situation when an input is set after\n * the directive has initialized.\n */\nfunction postInitInputChangeError(dir, inputName) {\n  let reason;\n  if (inputName === 'width' || inputName === 'height') {\n    reason = `Changing \\`${inputName}\\` may result in different attribute value ` + `applied to the underlying image element and cause layout shifts on a page.`;\n  } else {\n    reason = `Changing the \\`${inputName}\\` would have no effect on the underlying ` + `image element, because the resource loading has already occurred.`;\n  }\n  return new ɵRuntimeError(2953 /* RuntimeErrorCode.UNEXPECTED_INPUT_CHANGE */, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` was updated after initialization. ` + `The NgOptimizedImage directive will not react to this input change. ${reason} ` + `To fix this, either switch \\`${inputName}\\` to a static value ` + `or wrap the image element in an @if that is gated on the necessary value.`);\n}\n/**\n * Verify that none of the listed inputs has changed.\n */\nfunction assertNoPostInitInputChange(dir, changes, inputs) {\n  inputs.forEach(input => {\n    const isUpdated = changes.hasOwnProperty(input);\n    if (isUpdated && !changes[input].isFirstChange()) {\n      if (input === 'ngSrc') {\n        // When the `ngSrc` input changes, we detect that only in the\n        // `ngOnChanges` hook, thus the `ngSrc` is already set. We use\n        // `ngSrc` in the error message, so we use a previous value, but\n        // not the updated one in it.\n        dir = {\n          ngSrc: changes[input].previousValue\n        };\n      }\n      throw postInitInputChangeError(dir, input);\n    }\n  });\n}\n/**\n * Verifies that a specified input is a number greater than 0.\n */\nfunction assertGreaterThanZero(dir, inputValue, inputName) {\n  const validNumber = typeof inputValue === 'number' && inputValue > 0;\n  const validString = typeof inputValue === 'string' && /^\\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;\n  if (!validNumber && !validString) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` has an invalid value. ` + `To fix this, provide \\`${inputName}\\` as a number greater than 0.`);\n  }\n}\n/**\n * Verifies that the rendered image is not visually distorted. Effectively this is checking:\n * - Whether the \"width\" and \"height\" attributes reflect the actual dimensions of the image.\n * - Whether image styling is \"correct\" (see below for a longer explanation).\n */\nfunction assertNoImageDistortion(dir, img, renderer) {\n  const callback = () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n    const computedStyle = window.getComputedStyle(img);\n    let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n    let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n    const boxSizing = computedStyle.getPropertyValue('box-sizing');\n    if (boxSizing === 'border-box') {\n      const paddingTop = computedStyle.getPropertyValue('padding-top');\n      const paddingRight = computedStyle.getPropertyValue('padding-right');\n      const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n      const paddingLeft = computedStyle.getPropertyValue('padding-left');\n      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n    }\n    const renderedAspectRatio = renderedWidth / renderedHeight;\n    const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;\n    const intrinsicWidth = img.naturalWidth;\n    const intrinsicHeight = img.naturalHeight;\n    const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;\n    const suppliedWidth = dir.width;\n    const suppliedHeight = dir.height;\n    const suppliedAspectRatio = suppliedWidth / suppliedHeight;\n    // Tolerance is used to account for the impact of subpixel rendering.\n    // Due to subpixel rendering, the rendered, intrinsic, and supplied\n    // aspect ratios of a correctly configured image may not exactly match.\n    // For example, a `width=4030 height=3020` image might have a rendered\n    // size of \"1062w, 796.48h\". (An aspect ratio of 1.334... vs. 1.333...)\n    const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;\n    const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;\n    if (inaccurateDimensions) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` + `the aspect ratio indicated by the width and height attributes. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nSupplied width and height attributes: ` + `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` + `\\nTo fix this, update the width and height attributes.`));\n    } else if (stylingDistortion) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` + `does not match the image's intrinsic aspect ratio. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nRendered image size: ` + `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` + `${round(renderedAspectRatio)}). \\nThis issue can occur if \"width\" and \"height\" ` + `attributes are added to an image without updating the corresponding ` + `image styling. To fix this, adjust image styling. In most cases, ` + `adding \"height: auto\" or \"width: auto\" to the image styling will fix ` + `this issue.`));\n    } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {\n      // If `ngSrcset` hasn't been set, sanity check the intrinsic size.\n      const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;\n      const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;\n      const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n      const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n      if (oversizedWidth || oversizedHeight) {\n        console.warn(ɵformatRuntimeError(2960 /* RuntimeErrorCode.OVERSIZED_IMAGE */, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` + `larger than necessary. ` + `\\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` + `\\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` + `\\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` + `or consider using the \"ngSrcset\" and \"sizes\" attributes.`));\n      }\n    }\n  };\n  const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n  // We only listen to the `error` event to remove the `load` event listener because it will not be\n  // fired if the image fails to load. This is done to prevent memory leaks in development mode\n  // because image elements aren't garbage-collected properly. It happens because zone.js stores the\n  // event listener directly on the element and closures capture `dir`.\n  const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n  });\n  callOnLoadIfImageIsLoaded(img, callback);\n}\n/**\n * Verifies that a specified input is set.\n */\nfunction assertNonEmptyWidthAndHeight(dir) {\n  let missingAttributes = [];\n  if (dir.width === undefined) missingAttributes.push('width');\n  if (dir.height === undefined) missingAttributes.push('height');\n  if (missingAttributes.length > 0) {\n    throw new ɵRuntimeError(2954 /* RuntimeErrorCode.REQUIRED_INPUT_MISSING */, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` + `are missing: ${missingAttributes.map(attr => `\"${attr}\"`).join(', ')}. ` + `Including \"width\" and \"height\" attributes will prevent image-related layout shifts. ` + `To fix this, include \"width\" and \"height\" attributes on the image tag or turn on ` + `\"fill\" mode with the \\`fill\\` attribute.`);\n  }\n}\n/**\n * Verifies that width and height are not set. Used in fill mode, where those attributes don't make\n * sense.\n */\nfunction assertEmptyWidthAndHeight(dir) {\n  if (dir.width || dir.height) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the attributes \\`height\\` and/or \\`width\\` are present ` + `along with the \\`fill\\` attribute. Because \\`fill\\` mode causes an image to fill its containing ` + `element, the size attributes have no effect and should be removed.`);\n  }\n}\n/**\n * Verifies that the rendered image has a nonzero height. If the image is in fill mode, provides\n * guidance that this can be caused by the containing element's CSS position property.\n */\nfunction assertNonZeroRenderedHeight(dir, img, renderer) {\n  const callback = () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n    const renderedHeight = img.clientHeight;\n    if (dir.fill && renderedHeight === 0) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` + `This is likely because the containing element does not have the CSS 'position' ` + `property set to one of the following: \"relative\", \"fixed\", or \"absolute\". ` + `To fix this problem, make sure the container element has the CSS 'position' ` + `property defined and the height of the element is not zero.`));\n    }\n  };\n  const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n  // See comments in the `assertNoImageDistortion`.\n  const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n  });\n  callOnLoadIfImageIsLoaded(img, callback);\n}\n/**\n * Verifies that the `loading` attribute is set to a valid input &\n * is not used on priority images.\n */\nfunction assertValidLoadingInput(dir) {\n  if (dir.loading && dir.priority) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `was used on an image that was marked \"priority\". ` + `Setting \\`loading\\` on priority images is not allowed ` + `because these images will always be eagerly loaded. ` + `To fix this, remove the “loading” attribute from the priority image.`);\n  }\n  const validInputs = ['auto', 'eager', 'lazy'];\n  if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `has an invalid value (\\`${dir.loading}\\`). ` + `To fix this, provide a valid value (\"lazy\", \"eager\", or \"auto\").`);\n  }\n}\n/**\n * Warns if NOT using a loader (falling back to the generic loader) and\n * the image appears to be hosted on one of the image CDNs for which\n * we do have a built-in image loader. Suggests switching to the\n * built-in loader.\n *\n * @param ngSrc Value of the ngSrc attribute\n * @param imageLoader ImageLoader provided\n */\nfunction assertNotMissingBuiltInLoader(ngSrc, imageLoader) {\n  if (imageLoader === noopImageLoader) {\n    let builtInLoaderName = '';\n    for (const loader of BUILT_IN_LOADERS) {\n      if (loader.testUrl(ngSrc)) {\n        builtInLoaderName = loader.name;\n        break;\n      }\n    }\n    if (builtInLoaderName) {\n      console.warn(ɵformatRuntimeError(2962 /* RuntimeErrorCode.MISSING_BUILTIN_LOADER */, `NgOptimizedImage: It looks like your images may be hosted on the ` + `${builtInLoaderName} CDN, but your app is not using Angular's ` + `built-in loader for that CDN. We recommend switching to use ` + `the built-in by calling \\`provide${builtInLoaderName}Loader()\\` ` + `in your \\`providers\\` and passing it your instance's base URL. ` + `If you don't want to use the built-in loader, define a custom ` + `loader function using IMAGE_LOADER to silence this warning.`));\n    }\n  }\n}\n/**\n * Warns if ngSrcset is present and no loader is configured (i.e. the default one is being used).\n */\nfunction assertNoNgSrcsetWithoutLoader(dir, imageLoader) {\n  if (dir.ngSrcset && imageLoader === noopImageLoader) {\n    console.warn(ɵformatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for all configured sizes. ` + `To fix this, provide a loader or remove the \\`ngSrcset\\` attribute from the image.`));\n  }\n}\n/**\n * Warns if loaderParams is present and no loader is configured (i.e. the default one is being\n * used).\n */\nfunction assertNoLoaderParamsWithoutLoader(dir, imageLoader) {\n  if (dir.loaderParams && imageLoader === noopImageLoader) {\n    console.warn(ɵformatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loaderParams\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which means that the loaderParams data will not be consumed and will not affect the URL. ` + `To fix this, provide a custom loader or remove the \\`loaderParams\\` attribute from the image.`));\n  }\n}\n/**\n * Warns if the priority attribute is used too often on page load\n */\nasync function assetPriorityCountBelowThreshold(appRef) {\n  if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {\n    IMGS_WITH_PRIORITY_ATTR_COUNT++;\n    await appRef.whenStable();\n    if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {\n      console.warn(ɵformatRuntimeError(2966 /* RuntimeErrorCode.TOO_MANY_PRIORITY_ATTRIBUTES */, `NgOptimizedImage: The \"priority\" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` + `Marking too many images as \"high\" priority can hurt your application's LCP (https://web.dev/lcp). ` + `\"Priority\" should only be set on the image expected to be the page's LCP element.`));\n    }\n  } else {\n    IMGS_WITH_PRIORITY_ATTR_COUNT++;\n  }\n}\n/**\n * Warns if placeholder's dimension are over a threshold.\n *\n * This assert function is meant to only run on the browser.\n */\nfunction assertPlaceholderDimensions(dir, imgElement) {\n  const computedStyle = window.getComputedStyle(imgElement);\n  let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n  let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n  if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {\n    console.warn(ɵformatRuntimeError(2967 /* RuntimeErrorCode.PLACEHOLDER_DIMENSION_LIMIT_EXCEEDED */, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` + `of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` + `To fix this, use a smaller image as a placeholder.`));\n  }\n}\nfunction callOnLoadIfImageIsLoaded(img, callback) {\n  // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-complete\n  // The spec defines that `complete` is truthy once its request state is fully available.\n  // The image may already be available if it’s loaded from the browser cache.\n  // In that case, the `load` event will not fire at all, meaning that all setup\n  // callbacks listening for the `load` event will not be invoked.\n  // In Safari, there is a known behavior where the `complete` property of an\n  // `HTMLImageElement` may sometimes return `true` even when the image is not fully loaded.\n  // Checking both `img.complete` and `img.naturalWidth` is the most reliable way to\n  // determine if an image has been fully loaded, especially in browsers where the\n  // `complete` property may return `true` prematurely.\n  if (img.complete && img.naturalWidth) {\n    callback();\n  }\n}\nfunction round(input) {\n  return Number.isInteger(input) ? input : input.toFixed(2);\n}\n// Transform function to handle SafeValue input for ngSrc. This doesn't do any sanitization,\n// as that is not needed for img.src and img.srcset. This transform is purely for compatibility.\nfunction unwrapSafeUrl(value) {\n  if (typeof value === 'string') {\n    return value;\n  }\n  return ɵunwrapSafeValue(value);\n}\n// Transform function to handle inputs which may be booleans, strings, or string representations\n// of boolean values. Used for the placeholder attribute.\nfunction booleanOrUrlAttribute(value) {\n  if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {\n    return value;\n  }\n  return booleanAttribute(value);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { APP_BASE_HREF, AsyncPipe, BrowserPlatformLocation, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DOCUMENT, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, IMAGE_LOADER, JsonPipe, KeyValuePipe, LOCATION_INITIALIZED, Location, LocationStrategy, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf as NgFor, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgOptimizedImage, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PRECONNECT_CHECK_BLOCKLIST, PathLocationStrategy, PercentPipe, PlatformLocation, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, VERSION, ViewportScroller, WeekDay, XhrFactory, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits, isPlatformBrowser, isPlatformServer, provideCloudflareLoader, provideCloudinaryLoader, provideImageKitLoader, provideImgixLoader, provideNetlifyLoader, registerLocaleData, DomAdapter as ɵDomAdapter, NullViewportScroller as ɵNullViewportScroller, PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, PlatformNavigation as ɵPlatformNavigation, getDOM as ɵgetDOM, normalizeQueryParams as ɵnormalizeQueryParams, parseCookieValue as ɵparseCookieValue, setRootDomAdapter as ɵsetRootDomAdapter };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, NgZone, runInInjectionContext, InjectionToken, ɵPendingTasksInternal, PLATFORM_ID, ɵConsole, ɵformatRuntimeError, Inject, ɵRuntimeError, makeEnvironmentProviders, NgModule, TransferState, makeStateKey, ɵperformanceMarkFeature, APP_BOOTSTRAP_LISTENER, ApplicationRef, ɵtruncateMiddle } from '@angular/core';\nimport { of, Observable, from } from 'rxjs';\nimport { concatMap, filter, map, finalize, switchMap, tap } from 'rxjs/operators';\nimport * as i1 from '@angular/common';\nimport { isPlatformServer, DOCUMENT, ɵparseCookieValue } from '@angular/common';\n\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * @publicApi\n */\nclass HttpHandler {}\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * @publicApi\n */\nclass HttpBackend {}\n\n/**\n * Represents the header configuration options for an HTTP request.\n * Instances are immutable. Modifying methods return a cloned\n * instance with the change. The original object is never changed.\n *\n * @publicApi\n */\nclass HttpHeaders {\n  /**\n   * Internal map of lowercase header names to values.\n   */\n  // TODO(issue/24571): remove '!'.\n  headers;\n  /**\n   * Internal map of lowercased header names to the normalized\n   * form of the name (the form seen first).\n   */\n  normalizedNames = new Map();\n  /**\n   * Complete the lazy initialization of this object (needed before reading).\n   */\n  lazyInit;\n  /**\n   * Queued updates to be materialized the next initialization.\n   */\n  lazyUpdate = null;\n  /**  Constructs a new HTTP header object with the given values.*/\n  constructor(headers) {\n    if (!headers) {\n      this.headers = new Map();\n    } else if (typeof headers === 'string') {\n      this.lazyInit = () => {\n        this.headers = new Map();\n        headers.split('\\n').forEach(line => {\n          const index = line.indexOf(':');\n          if (index > 0) {\n            const name = line.slice(0, index);\n            const value = line.slice(index + 1).trim();\n            this.addHeaderEntry(name, value);\n          }\n        });\n      };\n    } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n      this.headers = new Map();\n      headers.forEach((value, name) => {\n        this.addHeaderEntry(name, value);\n      });\n    } else {\n      this.lazyInit = () => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          assertValidHeaders(headers);\n        }\n        this.headers = new Map();\n        Object.entries(headers).forEach(([name, values]) => {\n          this.setHeaderEntries(name, values);\n        });\n      };\n    }\n  }\n  /**\n   * Checks for existence of a given header.\n   *\n   * @param name The header name to check for existence.\n   *\n   * @returns True if the header exists, false otherwise.\n   */\n  has(name) {\n    this.init();\n    return this.headers.has(name.toLowerCase());\n  }\n  /**\n   * Retrieves the first value of a given header.\n   *\n   * @param name The header name.\n   *\n   * @returns The value string if the header exists, null otherwise\n   */\n  get(name) {\n    this.init();\n    const values = this.headers.get(name.toLowerCase());\n    return values && values.length > 0 ? values[0] : null;\n  }\n  /**\n   * Retrieves the names of the headers.\n   *\n   * @returns A list of header names.\n   */\n  keys() {\n    this.init();\n    return Array.from(this.normalizedNames.values());\n  }\n  /**\n   * Retrieves a list of values for a given header.\n   *\n   * @param name The header name from which to retrieve values.\n   *\n   * @returns A string of values if the header exists, null otherwise.\n   */\n  getAll(name) {\n    this.init();\n    return this.headers.get(name.toLowerCase()) || null;\n  }\n  /**\n   * Appends a new value to the existing set of values for a header\n   * and returns them in a clone of the original instance.\n   *\n   * @param name The header name for which to append the values.\n   * @param value The value to append.\n   *\n   * @returns A clone of the HTTP headers object with the value appended to the given header.\n   */\n  append(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 'a'\n    });\n  }\n  /**\n   * Sets or modifies a value for a given header in a clone of the original instance.\n   * If the header already exists, its value is replaced with the given value\n   * in the returned object.\n   *\n   * @param name The header name.\n   * @param value The value or values to set or override for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the newly set header value.\n   */\n  set(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 's'\n    });\n  }\n  /**\n   * Deletes values for a given header in a clone of the original instance.\n   *\n   * @param name The header name.\n   * @param value The value or values to delete for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the given value deleted.\n   */\n  delete(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 'd'\n    });\n  }\n  maybeSetNormalizedName(name, lcName) {\n    if (!this.normalizedNames.has(lcName)) {\n      this.normalizedNames.set(lcName, name);\n    }\n  }\n  init() {\n    if (!!this.lazyInit) {\n      if (this.lazyInit instanceof HttpHeaders) {\n        this.copyFrom(this.lazyInit);\n      } else {\n        this.lazyInit();\n      }\n      this.lazyInit = null;\n      if (!!this.lazyUpdate) {\n        this.lazyUpdate.forEach(update => this.applyUpdate(update));\n        this.lazyUpdate = null;\n      }\n    }\n  }\n  copyFrom(other) {\n    other.init();\n    Array.from(other.headers.keys()).forEach(key => {\n      this.headers.set(key, other.headers.get(key));\n      this.normalizedNames.set(key, other.normalizedNames.get(key));\n    });\n  }\n  clone(update) {\n    const clone = new HttpHeaders();\n    clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n    return clone;\n  }\n  applyUpdate(update) {\n    const key = update.name.toLowerCase();\n    switch (update.op) {\n      case 'a':\n      case 's':\n        let value = update.value;\n        if (typeof value === 'string') {\n          value = [value];\n        }\n        if (value.length === 0) {\n          return;\n        }\n        this.maybeSetNormalizedName(update.name, key);\n        const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n        base.push(...value);\n        this.headers.set(key, base);\n        break;\n      case 'd':\n        const toDelete = update.value;\n        if (!toDelete) {\n          this.headers.delete(key);\n          this.normalizedNames.delete(key);\n        } else {\n          let existing = this.headers.get(key);\n          if (!existing) {\n            return;\n          }\n          existing = existing.filter(value => toDelete.indexOf(value) === -1);\n          if (existing.length === 0) {\n            this.headers.delete(key);\n            this.normalizedNames.delete(key);\n          } else {\n            this.headers.set(key, existing);\n          }\n        }\n        break;\n    }\n  }\n  addHeaderEntry(name, value) {\n    const key = name.toLowerCase();\n    this.maybeSetNormalizedName(name, key);\n    if (this.headers.has(key)) {\n      this.headers.get(key).push(value);\n    } else {\n      this.headers.set(key, [value]);\n    }\n  }\n  setHeaderEntries(name, values) {\n    const headerValues = (Array.isArray(values) ? values : [values]).map(value => value.toString());\n    const key = name.toLowerCase();\n    this.headers.set(key, headerValues);\n    this.maybeSetNormalizedName(name, key);\n  }\n  /**\n   * @internal\n   */\n  forEach(fn) {\n    this.init();\n    Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n  }\n}\n/**\n * Verifies that the headers object has the right shape: the values\n * must be either strings, numbers or arrays. Throws an error if an invalid\n * header value is present.\n */\nfunction assertValidHeaders(headers) {\n  for (const [key, value] of Object.entries(headers)) {\n    if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n      throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` + `Expecting either a string, a number or an array, but got: \\`${value}\\`.`);\n    }\n  }\n}\n\n/**\n * Provides encoding and decoding of URL parameter and query-string values.\n *\n * Serializes and parses URL parameter keys and values to encode and decode them.\n * If you pass URL query parameters without encoding,\n * the query parameters can be misinterpreted at the receiving end.\n *\n *\n * @publicApi\n */\nclass HttpUrlEncodingCodec {\n  /**\n   * Encodes a key name for a URL parameter or query-string.\n   * @param key The key name.\n   * @returns The encoded key name.\n   */\n  encodeKey(key) {\n    return standardEncoding(key);\n  }\n  /**\n   * Encodes the value of a URL parameter or query-string.\n   * @param value The value.\n   * @returns The encoded value.\n   */\n  encodeValue(value) {\n    return standardEncoding(value);\n  }\n  /**\n   * Decodes an encoded URL parameter or query-string key.\n   * @param key The encoded key name.\n   * @returns The decoded key name.\n   */\n  decodeKey(key) {\n    return decodeURIComponent(key);\n  }\n  /**\n   * Decodes an encoded URL parameter or query-string value.\n   * @param value The encoded value.\n   * @returns The decoded value.\n   */\n  decodeValue(value) {\n    return decodeURIComponent(value);\n  }\n}\nfunction paramParser(rawParams, codec) {\n  const map = new Map();\n  if (rawParams.length > 0) {\n    // The `window.location.search` can be used while creating an instance of the `HttpParams` class\n    // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search`\n    // may start with the `?` char, so we strip it if it's present.\n    const params = rawParams.replace(/^\\?/, '').split('&');\n    params.forEach(param => {\n      const eqIdx = param.indexOf('=');\n      const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n      const list = map.get(key) || [];\n      list.push(val);\n      map.set(key, list);\n    });\n  }\n  return map;\n}\n/**\n * Encode input string with standard encodeURIComponent and then un-encode specific characters.\n */\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n  '40': '@',\n  '3A': ':',\n  '24': '$',\n  '2C': ',',\n  '3B': ';',\n  '3D': '=',\n  '3F': '?',\n  '2F': '/'\n};\nfunction standardEncoding(v) {\n  return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n  return `${value}`;\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable; all mutation operations return a new instance.\n *\n * @publicApi\n */\nclass HttpParams {\n  map;\n  encoder;\n  updates = null;\n  cloneFrom = null;\n  constructor(options = {}) {\n    this.encoder = options.encoder || new HttpUrlEncodingCodec();\n    if (!!options.fromString) {\n      if (!!options.fromObject) {\n        throw new Error(`Cannot specify both fromString and fromObject.`);\n      }\n      this.map = paramParser(options.fromString, this.encoder);\n    } else if (!!options.fromObject) {\n      this.map = new Map();\n      Object.keys(options.fromObject).forEach(key => {\n        const value = options.fromObject[key];\n        // convert the values to strings\n        const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n        this.map.set(key, values);\n      });\n    } else {\n      this.map = null;\n    }\n  }\n  /**\n   * Reports whether the body includes one or more values for a given parameter.\n   * @param param The parameter name.\n   * @returns True if the parameter has one or more values,\n   * false if it has no value or is not present.\n   */\n  has(param) {\n    this.init();\n    return this.map.has(param);\n  }\n  /**\n   * Retrieves the first value for a parameter.\n   * @param param The parameter name.\n   * @returns The first value of the given parameter,\n   * or `null` if the parameter is not present.\n   */\n  get(param) {\n    this.init();\n    const res = this.map.get(param);\n    return !!res ? res[0] : null;\n  }\n  /**\n   * Retrieves all values for a  parameter.\n   * @param param The parameter name.\n   * @returns All values in a string array,\n   * or `null` if the parameter not present.\n   */\n  getAll(param) {\n    this.init();\n    return this.map.get(param) || null;\n  }\n  /**\n   * Retrieves all the parameters for this body.\n   * @returns The parameter names in a string array.\n   */\n  keys() {\n    this.init();\n    return Array.from(this.map.keys());\n  }\n  /**\n   * Appends a new value to existing values for a parameter.\n   * @param param The parameter name.\n   * @param value The new value to add.\n   * @return A new body with the appended value.\n   */\n  append(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 'a'\n    });\n  }\n  /**\n   * Constructs a new body with appended values for the given parameter name.\n   * @param params parameters and values\n   * @return A new body with the new value.\n   */\n  appendAll(params) {\n    const updates = [];\n    Object.keys(params).forEach(param => {\n      const value = params[param];\n      if (Array.isArray(value)) {\n        value.forEach(_value => {\n          updates.push({\n            param,\n            value: _value,\n            op: 'a'\n          });\n        });\n      } else {\n        updates.push({\n          param,\n          value: value,\n          op: 'a'\n        });\n      }\n    });\n    return this.clone(updates);\n  }\n  /**\n   * Replaces the value for a parameter.\n   * @param param The parameter name.\n   * @param value The new value.\n   * @return A new body with the new value.\n   */\n  set(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 's'\n    });\n  }\n  /**\n   * Removes a given value or all values from a parameter.\n   * @param param The parameter name.\n   * @param value The value to remove, if provided.\n   * @return A new body with the given value removed, or with all values\n   * removed if no value is specified.\n   */\n  delete(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 'd'\n    });\n  }\n  /**\n   * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are\n   * separated by `&`s.\n   */\n  toString() {\n    this.init();\n    return this.keys().map(key => {\n      const eKey = this.encoder.encodeKey(key);\n      // `a: ['1']` produces `'a=1'`\n      // `b: []` produces `''`\n      // `c: ['1', '2']` produces `'c=1&c=2'`\n      return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&');\n    })\n    // filter out empty values because `b: []` produces `''`\n    // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't\n    .filter(param => param !== '').join('&');\n  }\n  clone(update) {\n    const clone = new HttpParams({\n      encoder: this.encoder\n    });\n    clone.cloneFrom = this.cloneFrom || this;\n    clone.updates = (this.updates || []).concat(update);\n    return clone;\n  }\n  init() {\n    if (this.map === null) {\n      this.map = new Map();\n    }\n    if (this.cloneFrom !== null) {\n      this.cloneFrom.init();\n      this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n      this.updates.forEach(update => {\n        switch (update.op) {\n          case 'a':\n          case 's':\n            const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n            base.push(valueToString(update.value));\n            this.map.set(update.param, base);\n            break;\n          case 'd':\n            if (update.value !== undefined) {\n              let base = this.map.get(update.param) || [];\n              const idx = base.indexOf(valueToString(update.value));\n              if (idx !== -1) {\n                base.splice(idx, 1);\n              }\n              if (base.length > 0) {\n                this.map.set(update.param, base);\n              } else {\n                this.map.delete(update.param);\n              }\n            } else {\n              this.map.delete(update.param);\n              break;\n            }\n        }\n      });\n      this.cloneFrom = this.updates = null;\n    }\n  }\n}\n\n/**\n * A token used to manipulate and access values stored in `HttpContext`.\n *\n * @publicApi\n */\nclass HttpContextToken {\n  defaultValue;\n  constructor(defaultValue) {\n    this.defaultValue = defaultValue;\n  }\n}\n/**\n * Http context stores arbitrary user defined values and ensures type safety without\n * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash.\n *\n * This context is mutable and is shared between cloned requests unless explicitly specified.\n *\n * @usageNotes\n *\n * ### Usage Example\n *\n * ```ts\n * // inside cache.interceptors.ts\n * export const IS_CACHE_ENABLED = new HttpContextToken<boolean>(() => false);\n *\n * export class CacheInterceptor implements HttpInterceptor {\n *\n *   intercept(req: HttpRequest<any>, delegate: HttpHandler): Observable<HttpEvent<any>> {\n *     if (req.context.get(IS_CACHE_ENABLED) === true) {\n *       return ...;\n *     }\n *     return delegate.handle(req);\n *   }\n * }\n *\n * // inside a service\n *\n * this.httpClient.get('/api/weather', {\n *   context: new HttpContext().set(IS_CACHE_ENABLED, true)\n * }).subscribe(...);\n * ```\n *\n * @publicApi\n */\nclass HttpContext {\n  map = new Map();\n  /**\n   * Store a value in the context. If a value is already present it will be overwritten.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   * @param value The value to store.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  set(token, value) {\n    this.map.set(token, value);\n    return this;\n  }\n  /**\n   * Retrieve the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns The stored value or default if one is defined.\n   */\n  get(token) {\n    if (!this.map.has(token)) {\n      this.map.set(token, token.defaultValue());\n    }\n    return this.map.get(token);\n  }\n  /**\n   * Delete the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  delete(token) {\n    this.map.delete(token);\n    return this;\n  }\n  /**\n   * Checks for existence of a given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns True if the token exists, false otherwise.\n   */\n  has(token) {\n    return this.map.has(token);\n  }\n  /**\n   * @returns a list of tokens currently stored in the context.\n   */\n  keys() {\n    return this.map.keys();\n  }\n}\n\n/**\n * Determine whether the given HTTP method may include a body.\n */\nfunction mightHaveBody(method) {\n  switch (method) {\n    case 'DELETE':\n    case 'GET':\n    case 'HEAD':\n    case 'OPTIONS':\n    case 'JSONP':\n      return false;\n    default:\n      return true;\n  }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n */\nfunction isArrayBuffer(value) {\n  return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n */\nfunction isBlob(value) {\n  return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n */\nfunction isFormData(value) {\n  return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * Safely assert whether the given value is a URLSearchParams instance.\n *\n * In some execution environments URLSearchParams is not defined.\n */\nfunction isUrlSearchParams(value) {\n  return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * @publicApi\n */\nclass HttpRequest {\n  url;\n  /**\n   * The request body, or `null` if one isn't set.\n   *\n   * Bodies are not enforced to be immutable, as they can include a reference to any\n   * user-defined data type. However, interceptors should take care to preserve\n   * idempotence by treating them as such.\n   */\n  body = null;\n  /**\n   * Outgoing headers for this request.\n   */\n  // TODO(issue/24571): remove '!'.\n  headers;\n  /**\n   * Shared and mutable context that can be used by interceptors\n   */\n  context;\n  /**\n   * Whether this request should be made in a way that exposes progress events.\n   *\n   * Progress events are expensive (change detection runs on each event) and so\n   * they should only be requested if the consumer intends to monitor them.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  reportProgress = false;\n  /**\n   * Whether this request should be sent with outgoing credentials (cookies).\n   */\n  withCredentials = false;\n  /**\n   * The expected response type of the server.\n   *\n   * This is used to parse the response appropriately before returning it to\n   * the requestee.\n   */\n  responseType = 'json';\n  /**\n   * The outgoing HTTP request method.\n   */\n  method;\n  /**\n   * Outgoing URL parameters.\n   *\n   * To pass a string representation of HTTP parameters in the URL-query-string format,\n   * the `HttpParamsOptions`' `fromString` may be used. For example:\n   *\n   * ```\n   * new HttpParams({fromString: 'angular=awesome'})\n   * ```\n   */\n  // TODO(issue/24571): remove '!'.\n  params;\n  /**\n   * The outgoing URL with all URL parameters set.\n   */\n  urlWithParams;\n  /**\n   * The HttpTransferCache option for the request\n   */\n  transferCache;\n  constructor(method, url, third, fourth) {\n    this.url = url;\n    this.method = method.toUpperCase();\n    // Next, need to figure out which argument holds the HttpRequestInit\n    // options, if any.\n    let options;\n    // Check whether a body argument is expected. The only valid way to omit\n    // the body argument is to use a known no-body method like GET.\n    if (mightHaveBody(this.method) || !!fourth) {\n      // Body is the third argument, options are the fourth.\n      this.body = third !== undefined ? third : null;\n      options = fourth;\n    } else {\n      // No body required, options are the third argument. The body stays null.\n      options = third;\n    }\n    // If options have been passed, interpret them.\n    if (options) {\n      // Normalize reportProgress and withCredentials.\n      this.reportProgress = !!options.reportProgress;\n      this.withCredentials = !!options.withCredentials;\n      // Override default response type of 'json' if one is provided.\n      if (!!options.responseType) {\n        this.responseType = options.responseType;\n      }\n      // Override headers if they're provided.\n      if (!!options.headers) {\n        this.headers = options.headers;\n      }\n      if (!!options.context) {\n        this.context = options.context;\n      }\n      if (!!options.params) {\n        this.params = options.params;\n      }\n      // We do want to assign transferCache even if it's falsy (false is valid value)\n      this.transferCache = options.transferCache;\n    }\n    // If no headers have been passed in, construct a new HttpHeaders instance.\n    this.headers ??= new HttpHeaders();\n    // If no context have been passed in, construct a new HttpContext instance.\n    this.context ??= new HttpContext();\n    // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n    if (!this.params) {\n      this.params = new HttpParams();\n      this.urlWithParams = url;\n    } else {\n      // Encode the parameters to a string in preparation for inclusion in the URL.\n      const params = this.params.toString();\n      if (params.length === 0) {\n        // No parameters, the visible URL is just the URL given at creation time.\n        this.urlWithParams = url;\n      } else {\n        // Does the URL already have query parameters? Look for '?'.\n        const qIdx = url.indexOf('?');\n        // There are 3 cases to handle:\n        // 1) No existing parameters -> append '?' followed by params.\n        // 2) '?' exists and is followed by existing query string ->\n        //    append '&' followed by params.\n        // 3) '?' exists at the end of the url -> append params directly.\n        // This basically amounts to determining the character, if any, with\n        // which to join the URL and parameters.\n        const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n        this.urlWithParams = url + sep + params;\n      }\n    }\n  }\n  /**\n   * Transform the free-form body into a serialized format suitable for\n   * transmission to the server.\n   */\n  serializeBody() {\n    // If no body is present, no need to serialize it.\n    if (this.body === null) {\n      return null;\n    }\n    // Check whether the body is already in a serialized form. If so,\n    // it can just be returned directly.\n    if (typeof this.body === 'string' || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {\n      return this.body;\n    }\n    // Check whether the body is an instance of HttpUrlEncodedParams.\n    if (this.body instanceof HttpParams) {\n      return this.body.toString();\n    }\n    // Check whether the body is an object or array, and serialize with JSON if so.\n    if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {\n      return JSON.stringify(this.body);\n    }\n    // Fall back on toString() for everything else.\n    return this.body.toString();\n  }\n  /**\n   * Examine the body and attempt to infer an appropriate MIME type\n   * for it.\n   *\n   * If no such type can be inferred, this method will return `null`.\n   */\n  detectContentTypeHeader() {\n    // An empty body has no content type.\n    if (this.body === null) {\n      return null;\n    }\n    // FormData bodies rely on the browser's content type assignment.\n    if (isFormData(this.body)) {\n      return null;\n    }\n    // Blobs usually have their own content type. If it doesn't, then\n    // no type can be inferred.\n    if (isBlob(this.body)) {\n      return this.body.type || null;\n    }\n    // Array buffers have unknown contents and thus no type can be inferred.\n    if (isArrayBuffer(this.body)) {\n      return null;\n    }\n    // Technically, strings could be a form of JSON data, but it's safe enough\n    // to assume they're plain strings.\n    if (typeof this.body === 'string') {\n      return 'text/plain';\n    }\n    // `HttpUrlEncodedParams` has its own content-type.\n    if (this.body instanceof HttpParams) {\n      return 'application/x-www-form-urlencoded;charset=UTF-8';\n    }\n    // Arrays, objects, boolean and numbers will be encoded as JSON.\n    if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') {\n      return 'application/json';\n    }\n    // No type could be inferred.\n    return null;\n  }\n  clone(update = {}) {\n    // For method, url, and responseType, take the current value unless\n    // it is overridden in the update hash.\n    const method = update.method || this.method;\n    const url = update.url || this.url;\n    const responseType = update.responseType || this.responseType;\n    // Carefully handle the transferCache to differentiate between\n    // `false` and `undefined` in the update args.\n    const transferCache = update.transferCache ?? this.transferCache;\n    // The body is somewhat special - a `null` value in update.body means\n    // whatever current body is present is being overridden with an empty\n    // body, whereas an `undefined` value in update.body implies no\n    // override.\n    const body = update.body !== undefined ? update.body : this.body;\n    // Carefully handle the boolean options to differentiate between\n    // `false` and `undefined` in the update args.\n    const withCredentials = update.withCredentials ?? this.withCredentials;\n    const reportProgress = update.reportProgress ?? this.reportProgress;\n    // Headers and params may be appended to if `setHeaders` or\n    // `setParams` are used.\n    let headers = update.headers || this.headers;\n    let params = update.params || this.params;\n    // Pass on context if needed\n    const context = update.context ?? this.context;\n    // Check whether the caller has asked to add headers.\n    if (update.setHeaders !== undefined) {\n      // Set every requested header.\n      headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n    }\n    // Check whether the caller has asked to set params.\n    if (update.setParams) {\n      // Set every requested param.\n      params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params);\n    }\n    // Finally, construct the new HttpRequest using the pieces from above.\n    return new HttpRequest(method, url, body, {\n      params,\n      headers,\n      context,\n      reportProgress,\n      responseType,\n      withCredentials,\n      transferCache\n    });\n  }\n}\n\n/**\n * Type enumeration for the different kinds of `HttpEvent`.\n *\n * @publicApi\n */\nvar HttpEventType;\n(function (HttpEventType) {\n  /**\n   * The request was sent out over the wire.\n   */\n  HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n  /**\n   * An upload progress event was received.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n  /**\n   * The response status code and headers were received.\n   */\n  HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n  /**\n   * A download progress event was received.\n   */\n  HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n  /**\n   * The full response including the body was received.\n   */\n  HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n  /**\n   * A custom event from an interceptor or a backend.\n   */\n  HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n})(HttpEventType || (HttpEventType = {}));\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * @publicApi\n */\nclass HttpResponseBase {\n  /**\n   * All response headers.\n   */\n  headers;\n  /**\n   * Response status code.\n   */\n  status;\n  /**\n   * Textual description of response status code, defaults to OK.\n   *\n   * Do not depend on this.\n   */\n  statusText;\n  /**\n   * URL of the resource retrieved, or null if not available.\n   */\n  url;\n  /**\n   * Whether the status code falls in the 2xx range.\n   */\n  ok;\n  /**\n   * Type of the response, narrowed to either the full response or the header.\n   */\n  // TODO(issue/24571): remove '!'.\n  type;\n  /**\n   * Super-constructor for all responses.\n   *\n   * The single parameter accepted is an initialization hash. Any properties\n   * of the response passed there will override the default values.\n   */\n  constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {\n    // If the hash has values passed, use them to initialize the response.\n    // Otherwise use the default values.\n    this.headers = init.headers || new HttpHeaders();\n    this.status = init.status !== undefined ? init.status : defaultStatus;\n    this.statusText = init.statusText || defaultStatusText;\n    this.url = init.url || null;\n    // Cache the ok value to avoid defining a getter.\n    this.ok = this.status >= 200 && this.status < 300;\n  }\n}\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * @publicApi\n */\nclass HttpHeaderResponse extends HttpResponseBase {\n  /**\n   * Create a new `HttpHeaderResponse` with the given parameters.\n   */\n  constructor(init = {}) {\n    super(init);\n  }\n  type = HttpEventType.ResponseHeader;\n  /**\n   * Copy this `HttpHeaderResponse`, overriding its contents with the\n   * given parameter hash.\n   */\n  clone(update = {}) {\n    // Perform a straightforward initialization of the new HttpHeaderResponse,\n    // overriding the current parameters with new ones if given.\n    return new HttpHeaderResponse({\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined\n    });\n  }\n}\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * @publicApi\n */\nclass HttpResponse extends HttpResponseBase {\n  /**\n   * The response body, or `null` if one was not returned.\n   */\n  body;\n  /**\n   * Construct a new `HttpResponse`.\n   */\n  constructor(init = {}) {\n    super(init);\n    this.body = init.body !== undefined ? init.body : null;\n  }\n  type = HttpEventType.Response;\n  clone(update = {}) {\n    return new HttpResponse({\n      body: update.body !== undefined ? update.body : this.body,\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined\n    });\n  }\n}\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * @publicApi\n */\nclass HttpErrorResponse extends HttpResponseBase {\n  name = 'HttpErrorResponse';\n  message;\n  error;\n  /**\n   * Errors are never okay, even when the status code is in the 2xx success range.\n   */\n  ok = false;\n  constructor(init) {\n    // Initialize with a default status of 0 / Unknown Error.\n    super(init, 0, 'Unknown Error');\n    // If the response was successful, then this was a parse error. Otherwise, it was\n    // a protocol-level failure of some sort. Either the request failed in transit\n    // or the server returned an unsuccessful status code.\n    if (this.status >= 200 && this.status < 300) {\n      this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n    } else {\n      this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n    }\n    this.error = init.error || null;\n  }\n}\n/**\n * We use these constant to prevent pulling the whole HttpStatusCode enum\n * Those are the only ones referenced directly by the framework\n */\nconst HTTP_STATUS_CODE_OK = 200;\nconst HTTP_STATUS_CODE_NO_CONTENT = 204;\n/**\n * Http status codes.\n * As per https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n * @publicApi\n */\nvar HttpStatusCode;\n(function (HttpStatusCode) {\n  HttpStatusCode[HttpStatusCode[\"Continue\"] = 100] = \"Continue\";\n  HttpStatusCode[HttpStatusCode[\"SwitchingProtocols\"] = 101] = \"SwitchingProtocols\";\n  HttpStatusCode[HttpStatusCode[\"Processing\"] = 102] = \"Processing\";\n  HttpStatusCode[HttpStatusCode[\"EarlyHints\"] = 103] = \"EarlyHints\";\n  HttpStatusCode[HttpStatusCode[\"Ok\"] = 200] = \"Ok\";\n  HttpStatusCode[HttpStatusCode[\"Created\"] = 201] = \"Created\";\n  HttpStatusCode[HttpStatusCode[\"Accepted\"] = 202] = \"Accepted\";\n  HttpStatusCode[HttpStatusCode[\"NonAuthoritativeInformation\"] = 203] = \"NonAuthoritativeInformation\";\n  HttpStatusCode[HttpStatusCode[\"NoContent\"] = 204] = \"NoContent\";\n  HttpStatusCode[HttpStatusCode[\"ResetContent\"] = 205] = \"ResetContent\";\n  HttpStatusCode[HttpStatusCode[\"PartialContent\"] = 206] = \"PartialContent\";\n  HttpStatusCode[HttpStatusCode[\"MultiStatus\"] = 207] = \"MultiStatus\";\n  HttpStatusCode[HttpStatusCode[\"AlreadyReported\"] = 208] = \"AlreadyReported\";\n  HttpStatusCode[HttpStatusCode[\"ImUsed\"] = 226] = \"ImUsed\";\n  HttpStatusCode[HttpStatusCode[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n  HttpStatusCode[HttpStatusCode[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n  HttpStatusCode[HttpStatusCode[\"Found\"] = 302] = \"Found\";\n  HttpStatusCode[HttpStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n  HttpStatusCode[HttpStatusCode[\"NotModified\"] = 304] = \"NotModified\";\n  HttpStatusCode[HttpStatusCode[\"UseProxy\"] = 305] = \"UseProxy\";\n  HttpStatusCode[HttpStatusCode[\"Unused\"] = 306] = \"Unused\";\n  HttpStatusCode[HttpStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n  HttpStatusCode[HttpStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n  HttpStatusCode[HttpStatusCode[\"BadRequest\"] = 400] = \"BadRequest\";\n  HttpStatusCode[HttpStatusCode[\"Unauthorized\"] = 401] = \"Unauthorized\";\n  HttpStatusCode[HttpStatusCode[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n  HttpStatusCode[HttpStatusCode[\"Forbidden\"] = 403] = \"Forbidden\";\n  HttpStatusCode[HttpStatusCode[\"NotFound\"] = 404] = \"NotFound\";\n  HttpStatusCode[HttpStatusCode[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n  HttpStatusCode[HttpStatusCode[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n  HttpStatusCode[HttpStatusCode[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n  HttpStatusCode[HttpStatusCode[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n  HttpStatusCode[HttpStatusCode[\"Conflict\"] = 409] = \"Conflict\";\n  HttpStatusCode[HttpStatusCode[\"Gone\"] = 410] = \"Gone\";\n  HttpStatusCode[HttpStatusCode[\"LengthRequired\"] = 411] = \"LengthRequired\";\n  HttpStatusCode[HttpStatusCode[\"PreconditionFailed\"] = 412] = \"PreconditionFailed\";\n  HttpStatusCode[HttpStatusCode[\"PayloadTooLarge\"] = 413] = \"PayloadTooLarge\";\n  HttpStatusCode[HttpStatusCode[\"UriTooLong\"] = 414] = \"UriTooLong\";\n  HttpStatusCode[HttpStatusCode[\"UnsupportedMediaType\"] = 415] = \"UnsupportedMediaType\";\n  HttpStatusCode[HttpStatusCode[\"RangeNotSatisfiable\"] = 416] = \"RangeNotSatisfiable\";\n  HttpStatusCode[HttpStatusCode[\"ExpectationFailed\"] = 417] = \"ExpectationFailed\";\n  HttpStatusCode[HttpStatusCode[\"ImATeapot\"] = 418] = \"ImATeapot\";\n  HttpStatusCode[HttpStatusCode[\"MisdirectedRequest\"] = 421] = \"MisdirectedRequest\";\n  HttpStatusCode[HttpStatusCode[\"UnprocessableEntity\"] = 422] = \"UnprocessableEntity\";\n  HttpStatusCode[HttpStatusCode[\"Locked\"] = 423] = \"Locked\";\n  HttpStatusCode[HttpStatusCode[\"FailedDependency\"] = 424] = \"FailedDependency\";\n  HttpStatusCode[HttpStatusCode[\"TooEarly\"] = 425] = \"TooEarly\";\n  HttpStatusCode[HttpStatusCode[\"UpgradeRequired\"] = 426] = \"UpgradeRequired\";\n  HttpStatusCode[HttpStatusCode[\"PreconditionRequired\"] = 428] = \"PreconditionRequired\";\n  HttpStatusCode[HttpStatusCode[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n  HttpStatusCode[HttpStatusCode[\"RequestHeaderFieldsTooLarge\"] = 431] = \"RequestHeaderFieldsTooLarge\";\n  HttpStatusCode[HttpStatusCode[\"UnavailableForLegalReasons\"] = 451] = \"UnavailableForLegalReasons\";\n  HttpStatusCode[HttpStatusCode[\"InternalServerError\"] = 500] = \"InternalServerError\";\n  HttpStatusCode[HttpStatusCode[\"NotImplemented\"] = 501] = \"NotImplemented\";\n  HttpStatusCode[HttpStatusCode[\"BadGateway\"] = 502] = \"BadGateway\";\n  HttpStatusCode[HttpStatusCode[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n  HttpStatusCode[HttpStatusCode[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n  HttpStatusCode[HttpStatusCode[\"HttpVersionNotSupported\"] = 505] = \"HttpVersionNotSupported\";\n  HttpStatusCode[HttpStatusCode[\"VariantAlsoNegotiates\"] = 506] = \"VariantAlsoNegotiates\";\n  HttpStatusCode[HttpStatusCode[\"InsufficientStorage\"] = 507] = \"InsufficientStorage\";\n  HttpStatusCode[HttpStatusCode[\"LoopDetected\"] = 508] = \"LoopDetected\";\n  HttpStatusCode[HttpStatusCode[\"NotExtended\"] = 510] = \"NotExtended\";\n  HttpStatusCode[HttpStatusCode[\"NetworkAuthenticationRequired\"] = 511] = \"NetworkAuthenticationRequired\";\n})(HttpStatusCode || (HttpStatusCode = {}));\n\n/**\n * Constructs an instance of `HttpRequestOptions<T>` from a source `HttpMethodOptions` and\n * the given `body`. This function clones the object and adds the body.\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n */\nfunction addBody(options, body) {\n  return {\n    body,\n    headers: options.headers,\n    context: options.context,\n    observe: options.observe,\n    params: options.params,\n    reportProgress: options.reportProgress,\n    responseType: options.responseType,\n    withCredentials: options.withCredentials,\n    transferCache: options.transferCache\n  };\n}\n/**\n * Performs HTTP requests.\n * This service is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies based on\n * the signature that is called (mainly the values of `observe` and `responseType`).\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n\n * TODO(adev): review\n * @usageNotes\n *\n * ### HTTP Request Example\n *\n * ```ts\n *  // GET heroes whose name contains search term\n * searchHeroes(term: string): observable<Hero[]>{\n *\n *  const params = new HttpParams({fromString: 'name=term'});\n *    return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});\n * }\n * ```\n *\n * Alternatively, the parameter string can be used without invoking HttpParams\n * by directly joining to the URL.\n * ```ts\n * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'});\n * ```\n *\n *\n * ### JSONP Example\n * ```ts\n * requestJsonp(url, callback = 'callback') {\n *  return this.httpClient.jsonp(this.heroesURL, callback);\n * }\n * ```\n *\n * ### PATCH Example\n * ```ts\n * // PATCH one of the heroes' name\n * patchHero (id: number, heroName: string): Observable<{}> {\n * const url = `${this.heroesUrl}/${id}`;   // PATCH api/heroes/42\n *  return this.httpClient.patch(url, {name: heroName}, httpOptions)\n *    .pipe(catchError(this.handleError('patchHero')));\n * }\n * ```\n *\n * @see [HTTP Guide](guide/http)\n * @see [HTTP Request](api/common/http/HttpRequest)\n *\n * @publicApi\n */\nclass HttpClient {\n  handler;\n  constructor(handler) {\n    this.handler = handler;\n  }\n  /**\n   * Constructs an observable for a generic HTTP request that, when subscribed,\n   * fires the request through the chain of registered interceptors and on to the\n   * server.\n   *\n   * You can pass an `HttpRequest` directly as the only parameter. In this case,\n   * the call returns an observable of the raw `HttpEvent` stream.\n   *\n   * Alternatively you can pass an HTTP method as the first parameter,\n   * a URL string as the second, and an options hash containing the request body as the third.\n   * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the\n   * type of returned observable.\n   *   * The `responseType` value determines how a successful response body is parsed.\n   *   * If `responseType` is the default `json`, you can pass a type interface for the resulting\n   * object as a type parameter to the call.\n   *\n   * The `observe` value determines the return type, according to what you are interested in\n   * observing.\n   *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including\n   * progress events by default.\n   *   * An `observe` value of response returns an observable of `HttpResponse<T>`,\n   * where the `T` parameter depends on the `responseType` and any optionally provided type\n   * parameter.\n   *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.\n   *\n   */\n  request(first, url, options = {}) {\n    let req;\n    // First, check whether the primary argument is an instance of `HttpRequest`.\n    if (first instanceof HttpRequest) {\n      // It is. The other arguments must be undefined (per the signatures) and can be\n      // ignored.\n      req = first;\n    } else {\n      // It's a string, so it represents a URL. Construct a request based on it,\n      // and incorporate the remaining arguments (assuming `GET` unless a method is\n      // provided.\n      // Figure out the headers.\n      let headers = undefined;\n      if (options.headers instanceof HttpHeaders) {\n        headers = options.headers;\n      } else {\n        headers = new HttpHeaders(options.headers);\n      }\n      // Sort out parameters.\n      let params = undefined;\n      if (!!options.params) {\n        if (options.params instanceof HttpParams) {\n          params = options.params;\n        } else {\n          params = new HttpParams({\n            fromObject: options.params\n          });\n        }\n      }\n      // Construct the request.\n      req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {\n        headers,\n        context: options.context,\n        params,\n        reportProgress: options.reportProgress,\n        // By default, JSON is assumed to be returned for all calls.\n        responseType: options.responseType || 'json',\n        withCredentials: options.withCredentials,\n        transferCache: options.transferCache\n      });\n    }\n    // Start with an Observable.of() the initial request, and run the handler (which\n    // includes all interceptors) inside a concatMap(). This way, the handler runs\n    // inside an Observable chain, which causes interceptors to be re-run on every\n    // subscription (this also makes retries re-run the handler, including interceptors).\n    const events$ = of(req).pipe(concatMap(req => this.handler.handle(req)));\n    // If coming via the API signature which accepts a previously constructed HttpRequest,\n    // the only option is to get the event stream. Otherwise, return the event stream if\n    // that is what was requested.\n    if (first instanceof HttpRequest || options.observe === 'events') {\n      return events$;\n    }\n    // The requested stream contains either the full response or the body. In either\n    // case, the first step is to filter the event stream to extract a stream of\n    // responses(s).\n    const res$ = events$.pipe(filter(event => event instanceof HttpResponse));\n    // Decide which stream to return.\n    switch (options.observe || 'body') {\n      case 'body':\n        // The requested stream is the body. Map the response stream to the response\n        // body. This could be done more simply, but a misbehaving interceptor might\n        // transform the response body into a different format and ignore the requested\n        // responseType. Guard against this by validating that the response is of the\n        // requested type.\n        switch (req.responseType) {\n          case 'arraybuffer':\n            return res$.pipe(map(res => {\n              // Validate that the body is an ArrayBuffer.\n              if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n                throw new Error('Response is not an ArrayBuffer.');\n              }\n              return res.body;\n            }));\n          case 'blob':\n            return res$.pipe(map(res => {\n              // Validate that the body is a Blob.\n              if (res.body !== null && !(res.body instanceof Blob)) {\n                throw new Error('Response is not a Blob.');\n              }\n              return res.body;\n            }));\n          case 'text':\n            return res$.pipe(map(res => {\n              // Validate that the body is a string.\n              if (res.body !== null && typeof res.body !== 'string') {\n                throw new Error('Response is not a string.');\n              }\n              return res.body;\n            }));\n          case 'json':\n          default:\n            // No validation needed for JSON responses, as they can be of any type.\n            return res$.pipe(map(res => res.body));\n        }\n      case 'response':\n        // The response stream was requested directly, so return it.\n        return res$;\n      default:\n        // Guard against new future observe types being added.\n        throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);\n    }\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `DELETE` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   */\n  delete(url, options = {}) {\n    return this.request('DELETE', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `GET` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  get(url, options = {}) {\n    return this.request('GET', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `HEAD` request to execute on the server. The `HEAD` method returns\n   * meta information about the resource without transferring the\n   * resource itself. See the individual overloads for\n   * details on the return type.\n   */\n  head(url, options = {}) {\n    return this.request('HEAD', url, options);\n  }\n  /**\n   * Constructs an `Observable` that, when subscribed, causes a request with the special method\n   * `JSONP` to be dispatched via the interceptor pipeline.\n   * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain\n   * API endpoints that don't support newer,\n   * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.\n   * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the\n   * requests even if the API endpoint is not located on the same domain (origin) as the client-side\n   * application making the request.\n   * The endpoint API must support JSONP callback for JSONP requests to work.\n   * The resource API returns the JSON response wrapped in a callback function.\n   * You can pass the callback function name as one of the query parameters.\n   * Note that JSONP requests can only be used with `GET` requests.\n   *\n   * @param url The resource URL.\n   * @param callbackParam The callback function name.\n   *\n   */\n  jsonp(url, callbackParam) {\n    return this.request('JSONP', url, {\n      params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n      observe: 'body',\n      responseType: 'json'\n    });\n  }\n  /**\n   * Constructs an `Observable` that, when subscribed, causes the configured\n   * `OPTIONS` request to execute on the server. This method allows the client\n   * to determine the supported HTTP methods and other capabilities of an endpoint,\n   * without implying a resource action. See the individual overloads for\n   * details on the return type.\n   */\n  options(url, options = {}) {\n    return this.request('OPTIONS', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PATCH` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  patch(url, body, options = {}) {\n    return this.request('PATCH', url, addBody(options, body));\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `POST` request to execute on the server. The server responds with the location of\n   * the replaced resource. See the individual overloads for\n   * details on the return type.\n   */\n  post(url, body, options = {}) {\n    return this.request('POST', url, addBody(options, body));\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PUT` request to execute on the server. The `PUT` method replaces an existing resource\n   * with a new set of values.\n   * See the individual overloads for details on the return type.\n   */\n  put(url, body, options = {}) {\n    return this.request('PUT', url, addBody(options, body));\n  }\n  static ɵfac = function HttpClient_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClient)(i0.ɵɵinject(HttpHandler));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpClient,\n    factory: HttpClient.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClient, [{\n    type: Injectable\n  }], () => [{\n    type: HttpHandler\n  }], null);\n})();\nconst XSSI_PREFIX$1 = /^\\)\\]\\}',?\\n/;\nconst REQUEST_URL_HEADER = `X-Request-URL`;\n/**\n * Determine an appropriate URL for the response, by checking either\n * response url or the X-Request-URL header.\n */\nfunction getResponseUrl$1(response) {\n  if (response.url) {\n    return response.url;\n  }\n  // stored as lowercase in the map\n  const xRequestUrl = REQUEST_URL_HEADER.toLocaleLowerCase();\n  return response.headers.get(xRequestUrl);\n}\n/**\n * Uses `fetch` to send requests to a backend server.\n *\n * This `FetchBackend` requires the support of the\n * [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which is available on all\n * supported browsers and on Node.js v18 or later.\n *\n * @see {@link HttpHandler}\n *\n * @publicApi\n */\nclass FetchBackend {\n  // We use an arrow function to always reference the current global implementation of `fetch`.\n  // This is helpful for cases when the global `fetch` implementation is modified by external code,\n  // see https://github.com/angular/angular/issues/57527.\n  fetchImpl = inject(FetchFactory, {\n    optional: true\n  })?.fetch ?? ((...args) => globalThis.fetch(...args));\n  ngZone = inject(NgZone);\n  handle(request) {\n    return new Observable(observer => {\n      const aborter = new AbortController();\n      this.doRequest(request, aborter.signal, observer).then(noop, error => observer.error(new HttpErrorResponse({\n        error\n      })));\n      return () => aborter.abort();\n    });\n  }\n  async doRequest(request, signal, observer) {\n    const init = this.createRequestInit(request);\n    let response;\n    try {\n      // Run fetch outside of Angular zone.\n      // This is due to Node.js fetch implementation (Undici) which uses a number of setTimeouts to check if\n      // the response should eventually timeout which causes extra CD cycles every 500ms\n      const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, {\n        signal,\n        ...init\n      }));\n      // Make sure Zone.js doesn't trigger false-positive unhandled promise\n      // error in case the Promise is rejected synchronously. See function\n      // description for additional information.\n      silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n      // Send the `Sent` event before awaiting the response.\n      observer.next({\n        type: HttpEventType.Sent\n      });\n      response = await fetchPromise;\n    } catch (error) {\n      observer.error(new HttpErrorResponse({\n        error,\n        status: error.status ?? 0,\n        statusText: error.statusText,\n        url: request.urlWithParams,\n        headers: error.headers\n      }));\n      return;\n    }\n    const headers = new HttpHeaders(response.headers);\n    const statusText = response.statusText;\n    const url = getResponseUrl$1(response) ?? request.urlWithParams;\n    let status = response.status;\n    let body = null;\n    if (request.reportProgress) {\n      observer.next(new HttpHeaderResponse({\n        headers,\n        status,\n        statusText,\n        url\n      }));\n    }\n    if (response.body) {\n      // Read Progress\n      const contentLength = response.headers.get('content-length');\n      const chunks = [];\n      const reader = response.body.getReader();\n      let receivedLength = 0;\n      let decoder;\n      let partialText;\n      // We have to check whether the Zone is defined in the global scope because this may be called\n      // when the zone is nooped.\n      const reqZone = typeof Zone !== 'undefined' && Zone.current;\n      // Perform response processing outside of Angular zone to\n      // ensure no excessive change detection runs are executed\n      // Here calling the async ReadableStreamDefaultReader.read() is responsible for triggering CD\n      await this.ngZone.runOutsideAngular(async () => {\n        while (true) {\n          const {\n            done,\n            value\n          } = await reader.read();\n          if (done) {\n            break;\n          }\n          chunks.push(value);\n          receivedLength += value.length;\n          if (request.reportProgress) {\n            partialText = request.responseType === 'text' ? (partialText ?? '') + (decoder ??= new TextDecoder()).decode(value, {\n              stream: true\n            }) : undefined;\n            const reportProgress = () => observer.next({\n              type: HttpEventType.DownloadProgress,\n              total: contentLength ? +contentLength : undefined,\n              loaded: receivedLength,\n              partialText\n            });\n            reqZone ? reqZone.run(reportProgress) : reportProgress();\n          }\n        }\n      });\n      // Combine all chunks.\n      const chunksAll = this.concatChunks(chunks, receivedLength);\n      try {\n        const contentType = response.headers.get('Content-Type') ?? '';\n        body = this.parseBody(request, chunksAll, contentType);\n      } catch (error) {\n        // Body loading or parsing failed\n        observer.error(new HttpErrorResponse({\n          error,\n          headers: new HttpHeaders(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          url: getResponseUrl$1(response) ?? request.urlWithParams\n        }));\n        return;\n      }\n    }\n    // Same behavior as the XhrBackend\n    if (status === 0) {\n      status = body ? HTTP_STATUS_CODE_OK : 0;\n    }\n    // ok determines whether the response will be transmitted on the event or\n    // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n    // but a successful status code can still result in an error if the user\n    // asked for JSON data and the body cannot be parsed as such.\n    const ok = status >= 200 && status < 300;\n    if (ok) {\n      observer.next(new HttpResponse({\n        body,\n        headers,\n        status,\n        statusText,\n        url\n      }));\n      // The full body has been received and delivered, no further events\n      // are possible. This request is complete.\n      observer.complete();\n    } else {\n      observer.error(new HttpErrorResponse({\n        error: body,\n        headers,\n        status,\n        statusText,\n        url\n      }));\n    }\n  }\n  parseBody(request, binContent, contentType) {\n    switch (request.responseType) {\n      case 'json':\n        // stripping the XSSI when present\n        const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, '');\n        return text === '' ? null : JSON.parse(text);\n      case 'text':\n        return new TextDecoder().decode(binContent);\n      case 'blob':\n        return new Blob([binContent], {\n          type: contentType\n        });\n      case 'arraybuffer':\n        return binContent.buffer;\n    }\n  }\n  createRequestInit(req) {\n    // We could share some of this logic with the XhrBackend\n    const headers = {};\n    const credentials = req.withCredentials ? 'include' : undefined;\n    // Setting all the requested headers.\n    req.headers.forEach((name, values) => headers[name] = values.join(','));\n    // Add an Accept header if one isn't present already.\n    if (!req.headers.has('Accept')) {\n      headers['Accept'] = 'application/json, text/plain, */*';\n    }\n    // Auto-detect the Content-Type header if one isn't present already.\n    if (!req.headers.has('Content-Type')) {\n      const detectedType = req.detectContentTypeHeader();\n      // Sometimes Content-Type detection fails.\n      if (detectedType !== null) {\n        headers['Content-Type'] = detectedType;\n      }\n    }\n    return {\n      body: req.serializeBody(),\n      method: req.method,\n      headers,\n      credentials\n    };\n  }\n  concatChunks(chunks, totalLength) {\n    const chunksAll = new Uint8Array(totalLength);\n    let position = 0;\n    for (const chunk of chunks) {\n      chunksAll.set(chunk, position);\n      position += chunk.length;\n    }\n    return chunksAll;\n  }\n  static ɵfac = function FetchBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || FetchBackend)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: FetchBackend,\n    factory: FetchBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FetchBackend, [{\n    type: Injectable\n  }], null, null);\n})();\n/**\n * Abstract class to provide a mocked implementation of `fetch()`\n */\nclass FetchFactory {}\nfunction noop() {}\n/**\n * Zone.js treats a rejected promise that has not yet been awaited\n * as an unhandled error. This function adds a noop `.then` to make\n * sure that Zone.js doesn't throw an error if the Promise is rejected\n * synchronously.\n */\nfunction silenceSuperfluousUnhandledPromiseRejection(promise) {\n  promise.then(noop, noop);\n}\nfunction interceptorChainEndFn(req, finalHandlerFn) {\n  return finalHandlerFn(req);\n}\n/**\n * Constructs a `ChainedInterceptorFn` which adapts a legacy `HttpInterceptor` to the\n * `ChainedInterceptorFn` interface.\n */\nfunction adaptLegacyInterceptorToChain(chainTailFn, interceptor) {\n  return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {\n    handle: downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)\n  });\n}\n/**\n * Constructs a `ChainedInterceptorFn` which wraps and invokes a functional interceptor in the given\n * injector.\n */\nfunction chainedInterceptorFn(chainTailFn, interceptorFn, injector) {\n  return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)));\n}\n/**\n * A multi-provider token that represents the array of registered\n * `HttpInterceptor` objects.\n *\n * @publicApi\n */\nconst HTTP_INTERCEPTORS = new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTORS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s.\n */\nconst HTTP_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s that are only set in root.\n */\nconst HTTP_ROOT_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '');\n// TODO(atscott): We need a larger discussion about stability and what should contribute to stability.\n// Should the whole interceptor chain contribute to stability or just the backend request #55075?\n// Should HttpClient contribute to stability automatically at all?\nconst REQUESTS_CONTRIBUTE_TO_STABILITY = new InjectionToken(ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '', {\n  providedIn: 'root',\n  factory: () => true\n});\n/**\n * Creates an `HttpInterceptorFn` which lazily initializes an interceptor chain from the legacy\n * class-based interceptors and runs the request through it.\n */\nfunction legacyInterceptorFnFactory() {\n  let chain = null;\n  return (req, handler) => {\n    if (chain === null) {\n      const interceptors = inject(HTTP_INTERCEPTORS, {\n        optional: true\n      }) ?? [];\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `interceptors` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);\n    }\n    const pendingTasks = inject(ɵPendingTasksInternal);\n    const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n    if (contributeToStability) {\n      const taskId = pendingTasks.add();\n      return chain(req, handler).pipe(finalize(() => pendingTasks.remove(taskId)));\n    } else {\n      return chain(req, handler);\n    }\n  };\n}\nlet fetchBackendWarningDisplayed = false;\n/** Internal function to reset the flag in tests */\nfunction resetFetchBackendWarningFlag() {\n  fetchBackendWarningDisplayed = false;\n}\nclass HttpInterceptorHandler extends HttpHandler {\n  backend;\n  injector;\n  chain = null;\n  pendingTasks = inject(ɵPendingTasksInternal);\n  contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n  constructor(backend, injector) {\n    super();\n    this.backend = backend;\n    this.injector = injector;\n    // We strongly recommend using fetch backend for HTTP calls when SSR is used\n    // for an application. The logic below checks if that's the case and produces\n    // a warning otherwise.\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n      const isServer = isPlatformServer(injector.get(PLATFORM_ID));\n      // This flag is necessary because provideHttpClientTesting() overrides the backend\n      // even if `withFetch()` is used within the test. When the testing HTTP backend is provided,\n      // no HTTP calls are actually performed during the test, so producing a warning would be\n      // misleading.\n      const isTestingBackend = this.backend.isTestingBackend;\n      if (isServer && !(this.backend instanceof FetchBackend) && !isTestingBackend) {\n        fetchBackendWarningDisplayed = true;\n        injector.get(ɵConsole).warn(ɵformatRuntimeError(2801 /* RuntimeErrorCode.NOT_USING_FETCH_BACKEND_IN_SSR */, 'Angular detected that `HttpClient` is not configured ' + \"to use `fetch` APIs. It's strongly recommended to \" + 'enable `fetch` for applications that use Server-Side Rendering ' + 'for better performance and compatibility. ' + 'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' + 'call at the root of the application.'));\n      }\n    }\n  }\n  handle(initialRequest) {\n    if (this.chain === null) {\n      const dedupedInterceptorFns = Array.from(new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `dedupedInterceptorFns` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);\n    }\n    if (this.contributeToStability) {\n      const taskId = this.pendingTasks.add();\n      return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest)).pipe(finalize(() => this.pendingTasks.remove(taskId)));\n    } else {\n      return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest));\n    }\n  }\n  static ɵfac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpInterceptorHandler)(i0.ɵɵinject(HttpBackend), i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpInterceptorHandler,\n    factory: HttpInterceptorHandler.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpInterceptorHandler, [{\n    type: Injectable\n  }], () => [{\n    type: HttpBackend\n  }, {\n    type: i0.EnvironmentInjector\n  }], null);\n})();\n\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nlet nextRequestId = 0;\n/**\n * When a pending <script> is unsubscribed we'll move it to this document, so it won't be\n * executed.\n */\nlet foreignDocument;\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nconst JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n// Error text given when a request is passed to the JsonpClientBackend that has\n// headers set\nconst JSONP_ERR_HEADERS_NOT_SUPPORTED = 'JSONP requests do not support headers.';\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n *\n */\nclass JsonpCallbackContext {}\n/**\n * Factory function that determines where to store JSONP callbacks.\n *\n * Ordinarily JSONP callbacks are stored on the `window` object, but this may not exist\n * in test environments. In that case, callbacks are stored on an anonymous object instead.\n *\n *\n */\nfunction jsonpCallbackContext() {\n  if (typeof window === 'object') {\n    return window;\n  }\n  return {};\n}\n/**\n * Processes an `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n * @see {@link HttpHandler}\n * @see {@link HttpXhrBackend}\n *\n * @publicApi\n */\nclass JsonpClientBackend {\n  callbackMap;\n  document;\n  /**\n   * A resolved promise that can be used to schedule microtasks in the event handlers.\n   */\n  resolvedPromise = Promise.resolve();\n  constructor(callbackMap, document) {\n    this.callbackMap = callbackMap;\n    this.document = document;\n  }\n  /**\n   * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n   */\n  nextCallback() {\n    return `ng_jsonp_callback_${nextRequestId++}`;\n  }\n  /**\n   * Processes a JSONP request and returns an event stream of the results.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   *\n   */\n  handle(req) {\n    // Firstly, check both the method and response type. If either doesn't match\n    // then the request was improperly routed here and cannot be handled.\n    if (req.method !== 'JSONP') {\n      throw new Error(JSONP_ERR_WRONG_METHOD);\n    } else if (req.responseType !== 'json') {\n      throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);\n    }\n    // Check the request headers. JSONP doesn't support headers and\n    // cannot set any that were supplied.\n    if (req.headers.keys().length > 0) {\n      throw new Error(JSONP_ERR_HEADERS_NOT_SUPPORTED);\n    }\n    // Everything else happens inside the Observable boundary.\n    return new Observable(observer => {\n      // The first step to make a request is to generate the callback name, and replace the\n      // callback placeholder in the URL with the name. Care has to be taken here to ensure\n      // a trailing &, if matched, gets inserted back into the URL in the correct place.\n      const callback = this.nextCallback();\n      const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);\n      // Construct the <script> tag and point it at the URL.\n      const node = this.document.createElement('script');\n      node.src = url;\n      // A JSONP request requires waiting for multiple callbacks. These variables\n      // are closed over and track state across those callbacks.\n      // The response object, if one has been received, or null otherwise.\n      let body = null;\n      // Whether the response callback has been called.\n      let finished = false;\n      // Set the response callback in this.callbackMap (which will be the window\n      // object in the browser. The script being loaded via the <script> tag will\n      // eventually call this callback.\n      this.callbackMap[callback] = data => {\n        // Data has been received from the JSONP script. Firstly, delete this callback.\n        delete this.callbackMap[callback];\n        // Set state to indicate data was received.\n        body = data;\n        finished = true;\n      };\n      // cleanup() is a utility closure that removes the <script> from the page and\n      // the response callback from the window. This logic is used in both the\n      // success, error, and cancellation paths, so it's extracted out for convenience.\n      const cleanup = () => {\n        node.removeEventListener('load', onLoad);\n        node.removeEventListener('error', onError);\n        // Remove the <script> tag if it's still on the page.\n        node.remove();\n        // Remove the response callback from the callbackMap (window object in the\n        // browser).\n        delete this.callbackMap[callback];\n      };\n      // onLoad() is the success callback which runs after the response callback\n      // if the JSONP script loads successfully. The event itself is unimportant.\n      // If something went wrong, onLoad() may run without the response callback\n      // having been invoked.\n      const onLoad = event => {\n        // We wrap it in an extra Promise, to ensure the microtask\n        // is scheduled after the loaded endpoint has executed any potential microtask itself,\n        // which is not guaranteed in Internet Explorer and EdgeHTML. See issue #39496\n        this.resolvedPromise.then(() => {\n          // Cleanup the page.\n          cleanup();\n          // Check whether the response callback has run.\n          if (!finished) {\n            // It hasn't, something went wrong with the request. Return an error via\n            // the Observable error path. All JSONP errors have status 0.\n            observer.error(new HttpErrorResponse({\n              url,\n              status: 0,\n              statusText: 'JSONP Error',\n              error: new Error(JSONP_ERR_NO_CALLBACK)\n            }));\n            return;\n          }\n          // Success. body either contains the response body or null if none was\n          // returned.\n          observer.next(new HttpResponse({\n            body,\n            status: HTTP_STATUS_CODE_OK,\n            statusText: 'OK',\n            url\n          }));\n          // Complete the stream, the response is over.\n          observer.complete();\n        });\n      };\n      // onError() is the error callback, which runs if the script returned generates\n      // a Javascript error. It emits the error via the Observable error channel as\n      // a HttpErrorResponse.\n      const onError = error => {\n        cleanup();\n        // Wrap the error in a HttpErrorResponse.\n        observer.error(new HttpErrorResponse({\n          error,\n          status: 0,\n          statusText: 'JSONP Error',\n          url\n        }));\n      };\n      // Subscribe to both the success (load) and error events on the <script> tag,\n      // and add it to the page.\n      node.addEventListener('load', onLoad);\n      node.addEventListener('error', onError);\n      this.document.body.appendChild(node);\n      // The request has now been successfully sent.\n      observer.next({\n        type: HttpEventType.Sent\n      });\n      // Cancellation handler.\n      return () => {\n        if (!finished) {\n          this.removeListeners(node);\n        }\n        // And finally, clean up the page.\n        cleanup();\n      };\n    });\n  }\n  removeListeners(script) {\n    // Issue #34818\n    // Changing <script>'s ownerDocument will prevent it from execution.\n    // https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block\n    foreignDocument ??= this.document.implementation.createHTMLDocument();\n    foreignDocument.adoptNode(script);\n  }\n  static ɵfac = function JsonpClientBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonpClientBackend)(i0.ɵɵinject(JsonpCallbackContext), i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: JsonpClientBackend,\n    factory: JsonpClientBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonpClientBackend, [{\n    type: Injectable\n  }], () => [{\n    type: JsonpCallbackContext\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n/**\n * Identifies requests with the method JSONP and shifts them to the `JsonpClientBackend`.\n */\nfunction jsonpInterceptorFn(req, next) {\n  if (req.method === 'JSONP') {\n    return inject(JsonpClientBackend).handle(req);\n  }\n  // Fall through for normal HTTP requests.\n  return next(req);\n}\n/**\n * Identifies requests with the method JSONP and\n * shifts them to the `JsonpClientBackend`.\n *\n * @see {@link HttpInterceptor}\n *\n * @publicApi\n */\nclass JsonpInterceptor {\n  injector;\n  constructor(injector) {\n    this.injector = injector;\n  }\n  /**\n   * Identifies and handles a given JSONP request.\n   * @param initialRequest The outgoing request object to handle.\n   * @param next The next interceptor in the chain, or the backend\n   * if no interceptors remain in the chain.\n   * @returns An observable of the event stream.\n   */\n  intercept(initialRequest, next) {\n    return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n  }\n  static ɵfac = function JsonpInterceptor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonpInterceptor)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: JsonpInterceptor,\n    factory: JsonpInterceptor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonpInterceptor, [{\n    type: Injectable\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n/**\n * Determine an appropriate URL for the response, by checking either\n * XMLHttpRequest.responseURL or the X-Request-URL header.\n */\nfunction getResponseUrl(xhr) {\n  if ('responseURL' in xhr && xhr.responseURL) {\n    return xhr.responseURL;\n  }\n  if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n    return xhr.getResponseHeader('X-Request-URL');\n  }\n  return null;\n}\n/**\n * Uses `XMLHttpRequest` to send requests to a backend server.\n * @see {@link HttpHandler}\n * @see {@link JsonpClientBackend}\n *\n * @publicApi\n */\nclass HttpXhrBackend {\n  xhrFactory;\n  constructor(xhrFactory) {\n    this.xhrFactory = xhrFactory;\n  }\n  /**\n   * Processes a request and returns a stream of response events.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   */\n  handle(req) {\n    // Quick check to give a better error message when a user attempts to use\n    // HttpClient.jsonp() without installing the HttpClientJsonpModule\n    if (req.method === 'JSONP') {\n      throw new ɵRuntimeError(-2800 /* RuntimeErrorCode.MISSING_JSONP_MODULE */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \\`withJsonpSupport()\\` call (if \\`provideHttpClient()\\` is used) or import the \\`HttpClientJsonpModule\\` in the root NgModule.`);\n    }\n    // Check whether this factory has a special function to load an XHR implementation\n    // for various non-browser environments. We currently limit it to only `ServerXhr`\n    // class, which needs to load an XHR implementation.\n    const xhrFactory = this.xhrFactory;\n    const source = xhrFactory.ɵloadImpl ? from(xhrFactory.ɵloadImpl()) : of(null);\n    return source.pipe(switchMap(() => {\n      // Everything happens on Observable subscription.\n      return new Observable(observer => {\n        // Start by setting up the XHR object with request method, URL, and withCredentials\n        // flag.\n        const xhr = xhrFactory.build();\n        xhr.open(req.method, req.urlWithParams);\n        if (req.withCredentials) {\n          xhr.withCredentials = true;\n        }\n        // Add all the requested headers.\n        req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));\n        // Add an Accept header if one isn't present already.\n        if (!req.headers.has('Accept')) {\n          xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n        }\n        // Auto-detect the Content-Type header if one isn't present already.\n        if (!req.headers.has('Content-Type')) {\n          const detectedType = req.detectContentTypeHeader();\n          // Sometimes Content-Type detection fails.\n          if (detectedType !== null) {\n            xhr.setRequestHeader('Content-Type', detectedType);\n          }\n        }\n        // Set the responseType if one was requested.\n        if (req.responseType) {\n          const responseType = req.responseType.toLowerCase();\n          // JSON responses need to be processed as text. This is because if the server\n          // returns an XSSI-prefixed JSON response, the browser will fail to parse it,\n          // xhr.response will be null, and xhr.responseText cannot be accessed to\n          // retrieve the prefixed JSON data in order to strip the prefix. Thus, all JSON\n          // is parsed by first requesting text and then applying JSON.parse.\n          xhr.responseType = responseType !== 'json' ? responseType : 'text';\n        }\n        // Serialize the request body if one is present. If not, this will be set to null.\n        const reqBody = req.serializeBody();\n        // If progress events are enabled, response headers will be delivered\n        // in two events - the HttpHeaderResponse event and the full HttpResponse\n        // event. However, since response headers don't change in between these\n        // two events, it doesn't make sense to parse them twice. So headerResponse\n        // caches the data extracted from the response whenever it's first parsed,\n        // to ensure parsing isn't duplicated.\n        let headerResponse = null;\n        // partialFromXhr extracts the HttpHeaderResponse from the current XMLHttpRequest\n        // state, and memoizes it into headerResponse.\n        const partialFromXhr = () => {\n          if (headerResponse !== null) {\n            return headerResponse;\n          }\n          const statusText = xhr.statusText || 'OK';\n          // Parse headers from XMLHttpRequest - this step is lazy.\n          const headers = new HttpHeaders(xhr.getAllResponseHeaders());\n          // Read the response URL from the XMLHttpResponse instance and fall back on the\n          // request URL.\n          const url = getResponseUrl(xhr) || req.url;\n          // Construct the HttpHeaderResponse and memoize it.\n          headerResponse = new HttpHeaderResponse({\n            headers,\n            status: xhr.status,\n            statusText,\n            url\n          });\n          return headerResponse;\n        };\n        // Next, a few closures are defined for the various events which XMLHttpRequest can\n        // emit. This allows them to be unregistered as event listeners later.\n        // First up is the load event, which represents a response being fully available.\n        const onLoad = () => {\n          // Read response state from the memoized partial data.\n          let {\n            headers,\n            status,\n            statusText,\n            url\n          } = partialFromXhr();\n          // The body will be read out if present.\n          let body = null;\n          if (status !== HTTP_STATUS_CODE_NO_CONTENT) {\n            // Use XMLHttpRequest.response if set, responseText otherwise.\n            body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n          }\n          // Normalize another potential bug (this one comes from CORS).\n          if (status === 0) {\n            status = !!body ? HTTP_STATUS_CODE_OK : 0;\n          }\n          // ok determines whether the response will be transmitted on the event or\n          // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n          // but a successful status code can still result in an error if the user\n          // asked for JSON data and the body cannot be parsed as such.\n          let ok = status >= 200 && status < 300;\n          // Check whether the body needs to be parsed as JSON (in many cases the browser\n          // will have done that already).\n          if (req.responseType === 'json' && typeof body === 'string') {\n            // Save the original body, before attempting XSSI prefix stripping.\n            const originalBody = body;\n            body = body.replace(XSSI_PREFIX, '');\n            try {\n              // Attempt the parse. If it fails, a parse error should be delivered to the\n              // user.\n              body = body !== '' ? JSON.parse(body) : null;\n            } catch (error) {\n              // Since the JSON.parse failed, it's reasonable to assume this might not have\n              // been a JSON response. Restore the original body (including any XSSI prefix)\n              // to deliver a better error response.\n              body = originalBody;\n              // If this was an error request to begin with, leave it as a string, it\n              // probably just isn't JSON. Otherwise, deliver the parsing error to the user.\n              if (ok) {\n                // Even though the response status was 2xx, this is still an error.\n                ok = false;\n                // The parse error contains the text of the body that failed to parse.\n                body = {\n                  error,\n                  text: body\n                };\n              }\n            }\n          }\n          if (ok) {\n            // A successful response is delivered on the event stream.\n            observer.next(new HttpResponse({\n              body,\n              headers,\n              status,\n              statusText,\n              url: url || undefined\n            }));\n            // The full body has been received and delivered, no further events\n            // are possible. This request is complete.\n            observer.complete();\n          } else {\n            // An unsuccessful request is delivered on the error channel.\n            observer.error(new HttpErrorResponse({\n              // The error in this case is the response body (error from the server).\n              error: body,\n              headers,\n              status,\n              statusText,\n              url: url || undefined\n            }));\n          }\n        };\n        // The onError callback is called when something goes wrong at the network level.\n        // Connection timeout, DNS error, offline, etc. These are actual errors, and are\n        // transmitted on the error channel.\n        const onError = error => {\n          const {\n            url\n          } = partialFromXhr();\n          const res = new HttpErrorResponse({\n            error,\n            status: xhr.status || 0,\n            statusText: xhr.statusText || 'Unknown Error',\n            url: url || undefined\n          });\n          observer.error(res);\n        };\n        // The sentHeaders flag tracks whether the HttpResponseHeaders event\n        // has been sent on the stream. This is necessary to track if progress\n        // is enabled since the event will be sent on only the first download\n        // progress event.\n        let sentHeaders = false;\n        // The download progress event handler, which is only registered if\n        // progress events are enabled.\n        const onDownProgress = event => {\n          // Send the HttpResponseHeaders event if it hasn't been sent already.\n          if (!sentHeaders) {\n            observer.next(partialFromXhr());\n            sentHeaders = true;\n          }\n          // Start building the download progress event to deliver on the response\n          // event stream.\n          let progressEvent = {\n            type: HttpEventType.DownloadProgress,\n            loaded: event.loaded\n          };\n          // Set the total number of bytes in the event if it's available.\n          if (event.lengthComputable) {\n            progressEvent.total = event.total;\n          }\n          // If the request was for text content and a partial response is\n          // available on XMLHttpRequest, include it in the progress event\n          // to allow for streaming reads.\n          if (req.responseType === 'text' && !!xhr.responseText) {\n            progressEvent.partialText = xhr.responseText;\n          }\n          // Finally, fire the event.\n          observer.next(progressEvent);\n        };\n        // The upload progress event handler, which is only registered if\n        // progress events are enabled.\n        const onUpProgress = event => {\n          // Upload progress events are simpler. Begin building the progress\n          // event.\n          let progress = {\n            type: HttpEventType.UploadProgress,\n            loaded: event.loaded\n          };\n          // If the total number of bytes being uploaded is available, include\n          // it.\n          if (event.lengthComputable) {\n            progress.total = event.total;\n          }\n          // Send the event.\n          observer.next(progress);\n        };\n        // By default, register for load and error events.\n        xhr.addEventListener('load', onLoad);\n        xhr.addEventListener('error', onError);\n        xhr.addEventListener('timeout', onError);\n        xhr.addEventListener('abort', onError);\n        // Progress events are only enabled if requested.\n        if (req.reportProgress) {\n          // Download progress is always enabled if requested.\n          xhr.addEventListener('progress', onDownProgress);\n          // Upload progress depends on whether there is a body to upload.\n          if (reqBody !== null && xhr.upload) {\n            xhr.upload.addEventListener('progress', onUpProgress);\n          }\n        }\n        // Fire the request, and notify the event stream that it was fired.\n        xhr.send(reqBody);\n        observer.next({\n          type: HttpEventType.Sent\n        });\n        // This is the return from the Observable function, which is the\n        // request cancellation handler.\n        return () => {\n          // On a cancellation, remove all registered event listeners.\n          xhr.removeEventListener('error', onError);\n          xhr.removeEventListener('abort', onError);\n          xhr.removeEventListener('load', onLoad);\n          xhr.removeEventListener('timeout', onError);\n          if (req.reportProgress) {\n            xhr.removeEventListener('progress', onDownProgress);\n            if (reqBody !== null && xhr.upload) {\n              xhr.upload.removeEventListener('progress', onUpProgress);\n            }\n          }\n          // Finally, abort the in-flight request.\n          if (xhr.readyState !== xhr.DONE) {\n            xhr.abort();\n          }\n        };\n      });\n    }));\n  }\n  static ɵfac = function HttpXhrBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXhrBackend)(i0.ɵɵinject(i1.XhrFactory));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXhrBackend,\n    factory: HttpXhrBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXhrBackend, [{\n    type: Injectable\n  }], () => [{\n    type: i1.XhrFactory\n  }], null);\n})();\nconst XSRF_ENABLED = new InjectionToken(ngDevMode ? 'XSRF_ENABLED' : '');\nconst XSRF_DEFAULT_COOKIE_NAME = 'XSRF-TOKEN';\nconst XSRF_COOKIE_NAME = new InjectionToken(ngDevMode ? 'XSRF_COOKIE_NAME' : '', {\n  providedIn: 'root',\n  factory: () => XSRF_DEFAULT_COOKIE_NAME\n});\nconst XSRF_DEFAULT_HEADER_NAME = 'X-XSRF-TOKEN';\nconst XSRF_HEADER_NAME = new InjectionToken(ngDevMode ? 'XSRF_HEADER_NAME' : '', {\n  providedIn: 'root',\n  factory: () => XSRF_DEFAULT_HEADER_NAME\n});\n/**\n * Retrieves the current XSRF token to use with the next outgoing request.\n *\n * @publicApi\n */\nclass HttpXsrfTokenExtractor {}\n/**\n * `HttpXsrfTokenExtractor` which retrieves the token from a cookie.\n */\nclass HttpXsrfCookieExtractor {\n  doc;\n  platform;\n  cookieName;\n  lastCookieString = '';\n  lastToken = null;\n  /**\n   * @internal for testing\n   */\n  parseCount = 0;\n  constructor(doc, platform, cookieName) {\n    this.doc = doc;\n    this.platform = platform;\n    this.cookieName = cookieName;\n  }\n  getToken() {\n    if (this.platform === 'server') {\n      return null;\n    }\n    const cookieString = this.doc.cookie || '';\n    if (cookieString !== this.lastCookieString) {\n      this.parseCount++;\n      this.lastToken = ɵparseCookieValue(cookieString, this.cookieName);\n      this.lastCookieString = cookieString;\n    }\n    return this.lastToken;\n  }\n  static ɵfac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXsrfCookieExtractor)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(XSRF_COOKIE_NAME));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXsrfCookieExtractor,\n    factory: HttpXsrfCookieExtractor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXsrfCookieExtractor, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [XSRF_COOKIE_NAME]\n    }]\n  }], null);\n})();\nfunction xsrfInterceptorFn(req, next) {\n  const lcUrl = req.url.toLowerCase();\n  // Skip both non-mutating requests and absolute URLs.\n  // Non-mutating requests don't require a token, and absolute URLs require special handling\n  // anyway as the cookie set\n  // on our origin is not the same as the token expected by another origin.\n  if (!inject(XSRF_ENABLED) || req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') || lcUrl.startsWith('https://')) {\n    return next(req);\n  }\n  const token = inject(HttpXsrfTokenExtractor).getToken();\n  const headerName = inject(XSRF_HEADER_NAME);\n  // Be careful not to overwrite an existing header of the same name.\n  if (token != null && !req.headers.has(headerName)) {\n    req = req.clone({\n      headers: req.headers.set(headerName, token)\n    });\n  }\n  return next(req);\n}\n/**\n * `HttpInterceptor` which adds an XSRF token to eligible outgoing requests.\n */\nclass HttpXsrfInterceptor {\n  injector;\n  constructor(injector) {\n    this.injector = injector;\n  }\n  intercept(initialRequest, next) {\n    return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n  }\n  static ɵfac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXsrfInterceptor)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXsrfInterceptor,\n    factory: HttpXsrfInterceptor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXsrfInterceptor, [{\n    type: Injectable\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\n\n/**\n * Identifies a particular kind of `HttpFeature`.\n *\n * @publicApi\n */\nvar HttpFeatureKind;\n(function (HttpFeatureKind) {\n  HttpFeatureKind[HttpFeatureKind[\"Interceptors\"] = 0] = \"Interceptors\";\n  HttpFeatureKind[HttpFeatureKind[\"LegacyInterceptors\"] = 1] = \"LegacyInterceptors\";\n  HttpFeatureKind[HttpFeatureKind[\"CustomXsrfConfiguration\"] = 2] = \"CustomXsrfConfiguration\";\n  HttpFeatureKind[HttpFeatureKind[\"NoXsrfProtection\"] = 3] = \"NoXsrfProtection\";\n  HttpFeatureKind[HttpFeatureKind[\"JsonpSupport\"] = 4] = \"JsonpSupport\";\n  HttpFeatureKind[HttpFeatureKind[\"RequestsMadeViaParent\"] = 5] = \"RequestsMadeViaParent\";\n  HttpFeatureKind[HttpFeatureKind[\"Fetch\"] = 6] = \"Fetch\";\n})(HttpFeatureKind || (HttpFeatureKind = {}));\nfunction makeHttpFeature(kind, providers) {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers\n  };\n}\n/**\n * Configures Angular's `HttpClient` service to be available for injection.\n *\n * By default, `HttpClient` will be configured for injection with its default options for XSRF\n * protection of outgoing requests. Additional configuration options can be provided by passing\n * feature functions to `provideHttpClient`. For example, HTTP interceptors can be added using the\n * `withInterceptors(...)` feature.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * It's strongly recommended to enable\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) for applications that use\n * Server-Side Rendering for better performance and compatibility. To enable `fetch`, add\n * `withFetch()` feature to the `provideHttpClient()` call at the root of the application:\n *\n * ```ts\n * provideHttpClient(withFetch());\n * ```\n *\n * </div>\n *\n * @see {@link withInterceptors}\n * @see {@link withInterceptorsFromDi}\n * @see {@link withXsrfConfiguration}\n * @see {@link withNoXsrfProtection}\n * @see {@link withJsonpSupport}\n * @see {@link withRequestsMadeViaParent}\n * @see {@link withFetch}\n */\nfunction provideHttpClient(...features) {\n  if (ngDevMode) {\n    const featureKinds = new Set(features.map(f => f.ɵkind));\n    if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {\n      throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : '');\n    }\n  }\n  const providers = [HttpClient, HttpXhrBackend, HttpInterceptorHandler, {\n    provide: HttpHandler,\n    useExisting: HttpInterceptorHandler\n  }, {\n    provide: HttpBackend,\n    useFactory: () => {\n      return inject(FetchBackend, {\n        optional: true\n      }) ?? inject(HttpXhrBackend);\n    }\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useValue: xsrfInterceptorFn,\n    multi: true\n  }, {\n    provide: XSRF_ENABLED,\n    useValue: true\n  }, {\n    provide: HttpXsrfTokenExtractor,\n    useClass: HttpXsrfCookieExtractor\n  }];\n  for (const feature of features) {\n    providers.push(...feature.ɵproviders);\n  }\n  return makeEnvironmentProviders(providers);\n}\n/**\n * Adds one or more functional-style HTTP interceptors to the configuration of the `HttpClient`\n * instance.\n *\n * @see {@link HttpInterceptorFn}\n * @see {@link provideHttpClient}\n * @publicApi\n */\nfunction withInterceptors(interceptorFns) {\n  return makeHttpFeature(HttpFeatureKind.Interceptors, interceptorFns.map(interceptorFn => {\n    return {\n      provide: HTTP_INTERCEPTOR_FNS,\n      useValue: interceptorFn,\n      multi: true\n    };\n  }));\n}\nconst LEGACY_INTERCEPTOR_FN = new InjectionToken(ngDevMode ? 'LEGACY_INTERCEPTOR_FN' : '');\n/**\n * Includes class-based interceptors configured using a multi-provider in the current injector into\n * the configured `HttpClient` instance.\n *\n * Prefer `withInterceptors` and functional interceptors instead, as support for DI-provided\n * interceptors may be phased out in a later release.\n *\n * @see {@link HttpInterceptor}\n * @see {@link HTTP_INTERCEPTORS}\n * @see {@link provideHttpClient}\n */\nfunction withInterceptorsFromDi() {\n  // Note: the legacy interceptor function is provided here via an intermediate token\n  // (`LEGACY_INTERCEPTOR_FN`), using a pattern which guarantees that if these providers are\n  // included multiple times, all of the multi-provider entries will have the same instance of the\n  // interceptor function. That way, the `HttpINterceptorHandler` will dedup them and legacy\n  // interceptors will not run multiple times.\n  return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{\n    provide: LEGACY_INTERCEPTOR_FN,\n    useFactory: legacyInterceptorFnFactory\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useExisting: LEGACY_INTERCEPTOR_FN,\n    multi: true\n  }]);\n}\n/**\n * Customizes the XSRF protection for the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withNoXsrfProtection` feature.\n *\n * @see {@link provideHttpClient}\n */\nfunction withXsrfConfiguration({\n  cookieName,\n  headerName\n}) {\n  const providers = [];\n  if (cookieName !== undefined) {\n    providers.push({\n      provide: XSRF_COOKIE_NAME,\n      useValue: cookieName\n    });\n  }\n  if (headerName !== undefined) {\n    providers.push({\n      provide: XSRF_HEADER_NAME,\n      useValue: headerName\n    });\n  }\n  return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);\n}\n/**\n * Disables XSRF protection in the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withXsrfConfiguration` feature.\n *\n * @see {@link provideHttpClient}\n */\nfunction withNoXsrfProtection() {\n  return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{\n    provide: XSRF_ENABLED,\n    useValue: false\n  }]);\n}\n/**\n * Add JSONP support to the configuration of the current `HttpClient` instance.\n *\n * @see {@link provideHttpClient}\n */\nfunction withJsonpSupport() {\n  return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {\n    provide: JsonpCallbackContext,\n    useFactory: jsonpCallbackContext\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useValue: jsonpInterceptorFn,\n    multi: true\n  }]);\n}\n/**\n * Configures the current `HttpClient` instance to make requests via the parent injector's\n * `HttpClient` instead of directly.\n *\n * By default, `provideHttpClient` configures `HttpClient` in its injector to be an independent\n * instance. For example, even if `HttpClient` is configured in the parent injector with\n * one or more interceptors, they will not intercept requests made via this instance.\n *\n * With this option enabled, once the request has passed through the current injector's\n * interceptors, it will be delegated to the parent injector's `HttpClient` chain instead of\n * dispatched directly, and interceptors in the parent configuration will be applied to the request.\n *\n * If there are several `HttpClient` instances in the injector hierarchy, it's possible for\n * `withRequestsMadeViaParent` to be used at multiple levels, which will cause the request to\n * \"bubble up\" until either reaching the root level or an `HttpClient` which was not configured with\n * this option.\n *\n * @see {@link provideHttpClient}\n * @publicApi\n */\nfunction withRequestsMadeViaParent() {\n  return makeHttpFeature(HttpFeatureKind.RequestsMadeViaParent, [{\n    provide: HttpBackend,\n    useFactory: () => {\n      const handlerFromParent = inject(HttpHandler, {\n        skipSelf: true,\n        optional: true\n      });\n      if (ngDevMode && handlerFromParent === null) {\n        throw new Error('withRequestsMadeViaParent() can only be used when the parent injector also configures HttpClient');\n      }\n      return handlerFromParent;\n    }\n  }]);\n}\n/**\n * Configures the current `HttpClient` instance to make requests using the fetch API.\n *\n * Note: The Fetch API doesn't support progress report on uploads.\n *\n * @publicApi\n */\nfunction withFetch() {\n  return makeHttpFeature(HttpFeatureKind.Fetch, [FetchBackend, {\n    provide: HttpBackend,\n    useExisting: FetchBackend\n  }]);\n}\n\n/**\n * Configures XSRF protection support for outgoing requests.\n *\n * For a server that supports a cookie-based XSRF protection system,\n * use directly to configure XSRF protection with the correct\n * cookie and header names.\n *\n * If no names are supplied, the default cookie name is `XSRF-TOKEN`\n * and the default header name is `X-XSRF-TOKEN`.\n *\n * @publicApi\n * @deprecated Use withXsrfConfiguration({cookieName: 'XSRF-TOKEN', headerName: 'X-XSRF-TOKEN'}) as\n *     providers instead or `withNoXsrfProtection` if you want to disabled XSRF protection.\n */\nclass HttpClientXsrfModule {\n  /**\n   * Disable the default XSRF protection.\n   */\n  static disable() {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: [withNoXsrfProtection().ɵproviders]\n    };\n  }\n  /**\n   * Configure XSRF protection.\n   * @param options An object that can specify either or both\n   * cookie name or header name.\n   * - Cookie name default is `XSRF-TOKEN`.\n   * - Header name default is `X-XSRF-TOKEN`.\n   *\n   */\n  static withOptions(options = {}) {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: withXsrfConfiguration(options).ɵproviders\n    };\n  }\n  static ɵfac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientXsrfModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientXsrfModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [HttpXsrfInterceptor, {\n      provide: HTTP_INTERCEPTORS,\n      useExisting: HttpXsrfInterceptor,\n      multi: true\n    }, {\n      provide: HttpXsrfTokenExtractor,\n      useClass: HttpXsrfCookieExtractor\n    }, withXsrfConfiguration({\n      cookieName: XSRF_DEFAULT_COOKIE_NAME,\n      headerName: XSRF_DEFAULT_HEADER_NAME\n    }).ɵproviders, {\n      provide: XSRF_ENABLED,\n      useValue: true\n    }]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientXsrfModule, [{\n    type: NgModule,\n    args: [{\n      providers: [HttpXsrfInterceptor, {\n        provide: HTTP_INTERCEPTORS,\n        useExisting: HttpXsrfInterceptor,\n        multi: true\n      }, {\n        provide: HttpXsrfTokenExtractor,\n        useClass: HttpXsrfCookieExtractor\n      }, withXsrfConfiguration({\n        cookieName: XSRF_DEFAULT_COOKIE_NAME,\n        headerName: XSRF_DEFAULT_HEADER_NAME\n      }).ɵproviders, {\n        provide: XSRF_ENABLED,\n        useValue: true\n      }]\n    }]\n  }], null, null);\n})();\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for XSRF. Automatically imported by `HttpClientModule`.\n *\n * You can add interceptors to the chain behind `HttpClient` by binding them to the\n * multiprovider for built-in DI token `HTTP_INTERCEPTORS`.\n *\n * @publicApi\n * @deprecated use `provideHttpClient(withInterceptorsFromDi())` as providers instead\n */\nclass HttpClientModule {\n  static ɵfac = function HttpClientModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [provideHttpClient(withInterceptorsFromDi())]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientModule, [{\n    type: NgModule,\n    args: [{\n      /**\n       * Configures the dependency injector where it is imported\n       * with supporting services for HTTP communications.\n       */\n      providers: [provideHttpClient(withInterceptorsFromDi())]\n    }]\n  }], null, null);\n})();\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for JSONP.\n * Without this module, Jsonp requests reach the backend\n * with method JSONP, where they are rejected.\n *\n * @publicApi\n * @deprecated `withJsonpSupport()` as providers instead\n */\nclass HttpClientJsonpModule {\n  static ɵfac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientJsonpModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientJsonpModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [withJsonpSupport().ɵproviders]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientJsonpModule, [{\n    type: NgModule,\n    args: [{\n      providers: [withJsonpSupport().ɵproviders]\n    }]\n  }], null, null);\n})();\n\n/**\n * If your application uses different HTTP origins to make API calls (via `HttpClient`) on the server and\n * on the client, the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token allows you to establish a mapping\n * between those origins, so that `HttpTransferCache` feature can recognize those requests as the same\n * ones and reuse the data cached on the server during hydration on the client.\n *\n * **Important note**: the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token should *only* be provided in\n * the *server* code of your application (typically in the `app.server.config.ts` script). Angular throws an\n * error if it detects that the token is defined while running on the client.\n *\n * @usageNotes\n *\n * When the same API endpoint is accessed via `http://internal-domain.com:8080` on the server and\n * via `https://external-domain.com` on the client, you can use the following configuration:\n * ```ts\n * // in app.server.config.ts\n * {\n *     provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,\n *     useValue: {\n *         'http://internal-domain.com:8080': 'https://external-domain.com'\n *     }\n * }\n * ```\n *\n * @publicApi\n */\nconst HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_CACHE_ORIGIN_MAP' : '');\n/**\n * Keys within cached response data structure.\n */\nconst BODY = 'b';\nconst HEADERS = 'h';\nconst STATUS = 's';\nconst STATUS_TEXT = 'st';\nconst REQ_URL = 'u';\nconst RESPONSE_TYPE = 'rt';\nconst CACHE_OPTIONS = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_STATE_CACHE_OPTIONS' : '');\n/**\n * A list of allowed HTTP methods to cache.\n */\nconst ALLOWED_METHODS = ['GET', 'HEAD'];\nfunction transferCacheInterceptorFn(req, next) {\n  const {\n    isCacheActive,\n    ...globalOptions\n  } = inject(CACHE_OPTIONS);\n  const {\n    transferCache: requestOptions,\n    method: requestMethod\n  } = req;\n  // In the following situations we do not want to cache the request\n  if (!isCacheActive || requestOptions === false ||\n  // POST requests are allowed either globally or at request level\n  requestMethod === 'POST' && !globalOptions.includePostRequests && !requestOptions || requestMethod !== 'POST' && !ALLOWED_METHODS.includes(requestMethod) ||\n  // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey\n  !globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req) || globalOptions.filter?.(req) === false) {\n    return next(req);\n  }\n  const transferState = inject(TransferState);\n  const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {\n    optional: true\n  });\n  const isServer = isPlatformServer(inject(PLATFORM_ID));\n  if (originMap && !isServer) {\n    throw new ɵRuntimeError(2803 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_USED_IN_CLIENT */, ngDevMode && 'Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and ' + 'present in the client side code. Please ensure that this token is only provided in the ' + 'server code of the application.');\n  }\n  const requestUrl = isServer && originMap ? mapRequestOriginUrl(req.url, originMap) : req.url;\n  const storeKey = makeCacheKey(req, requestUrl);\n  const response = transferState.get(storeKey, null);\n  let headersToInclude = globalOptions.includeHeaders;\n  if (typeof requestOptions === 'object' && requestOptions.includeHeaders) {\n    // Request-specific config takes precedence over the global config.\n    headersToInclude = requestOptions.includeHeaders;\n  }\n  if (response) {\n    const {\n      [BODY]: undecodedBody,\n      [RESPONSE_TYPE]: responseType,\n      [HEADERS]: httpHeaders,\n      [STATUS]: status,\n      [STATUS_TEXT]: statusText,\n      [REQ_URL]: url\n    } = response;\n    // Request found in cache. Respond using it.\n    let body = undecodedBody;\n    switch (responseType) {\n      case 'arraybuffer':\n        body = new TextEncoder().encode(undecodedBody).buffer;\n        break;\n      case 'blob':\n        body = new Blob([undecodedBody]);\n        break;\n    }\n    // We want to warn users accessing a header provided from the cache\n    // That HttpTransferCache alters the headers\n    // The warning will be logged a single time by HttpHeaders instance\n    let headers = new HttpHeaders(httpHeaders);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Append extra logic in dev mode to produce a warning when a header\n      // that was not transferred to the client is accessed in the code via `get`\n      // and `has` calls.\n      headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);\n    }\n    return of(new HttpResponse({\n      body,\n      headers,\n      status,\n      statusText,\n      url\n    }));\n  }\n  // Request not found in cache. Make the request and cache it if on the server.\n  return next(req).pipe(tap(event => {\n    if (event instanceof HttpResponse && isServer) {\n      transferState.set(storeKey, {\n        [BODY]: event.body,\n        [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),\n        [STATUS]: event.status,\n        [STATUS_TEXT]: event.statusText,\n        [REQ_URL]: requestUrl,\n        [RESPONSE_TYPE]: req.responseType\n      });\n    }\n  }));\n}\n/** @returns true when the requests contains autorization related headers. */\nfunction hasAuthHeaders(req) {\n  return req.headers.has('authorization') || req.headers.has('proxy-authorization');\n}\nfunction getFilteredHeaders(headers, includeHeaders) {\n  if (!includeHeaders) {\n    return {};\n  }\n  const headersMap = {};\n  for (const key of includeHeaders) {\n    const values = headers.getAll(key);\n    if (values !== null) {\n      headersMap[key] = values;\n    }\n  }\n  return headersMap;\n}\nfunction sortAndConcatParams(params) {\n  return [...params.keys()].sort().map(k => `${k}=${params.getAll(k)}`).join('&');\n}\nfunction makeCacheKey(request, mappedRequestUrl) {\n  // make the params encoded same as a url so it's easy to identify\n  const {\n    params,\n    method,\n    responseType\n  } = request;\n  const encodedParams = sortAndConcatParams(params);\n  let serializedBody = request.serializeBody();\n  if (serializedBody instanceof URLSearchParams) {\n    serializedBody = sortAndConcatParams(serializedBody);\n  } else if (typeof serializedBody !== 'string') {\n    serializedBody = '';\n  }\n  const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join('|');\n  const hash = generateHash(key);\n  return makeStateKey(hash);\n}\n/**\n * A method that returns a hash representation of a string using a variant of DJB2 hash\n * algorithm.\n *\n * This is the same hashing logic that is used to generate component ids.\n */\nfunction generateHash(value) {\n  let hash = 0;\n  for (const char of value) {\n    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n  }\n  // Force positive number hash.\n  // 2147483647 = equivalent of Integer.MAX_VALUE.\n  hash += 2147483647 + 1;\n  return hash.toString();\n}\n/**\n * Returns the DI providers needed to enable HTTP transfer cache.\n *\n * By default, when using server rendering, requests are performed twice: once on the server and\n * other one on the browser.\n *\n * When these providers are added, requests performed on the server are cached and reused during the\n * bootstrapping of the application in the browser thus avoiding duplicate requests and reducing\n * load time.\n *\n */\nfunction withHttpTransferCache(cacheOptions) {\n  return [{\n    provide: CACHE_OPTIONS,\n    useFactory: () => {\n      ɵperformanceMarkFeature('NgHttpTransferCache');\n      return {\n        isCacheActive: true,\n        ...cacheOptions\n      };\n    }\n  }, {\n    provide: HTTP_ROOT_INTERCEPTOR_FNS,\n    useValue: transferCacheInterceptorFn,\n    multi: true,\n    deps: [TransferState, CACHE_OPTIONS]\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useFactory: () => {\n      const appRef = inject(ApplicationRef);\n      const cacheState = inject(CACHE_OPTIONS);\n      return () => {\n        appRef.whenStable().then(() => {\n          cacheState.isCacheActive = false;\n        });\n      };\n    }\n  }];\n}\n/**\n * This function will add a proxy to an HttpHeader to intercept calls to get/has\n * and log a warning if the header entry requested has been removed\n */\nfunction appendMissingHeadersDetection(url, headers, headersToInclude) {\n  const warningProduced = new Set();\n  return new Proxy(headers, {\n    get(target, prop) {\n      const value = Reflect.get(target, prop);\n      const methods = new Set(['get', 'has', 'getAll']);\n      if (typeof value !== 'function' || !methods.has(prop)) {\n        return value;\n      }\n      return headerName => {\n        // We log when the key has been removed and a warning hasn't been produced for the header\n        const key = (prop + ':' + headerName).toLowerCase(); // e.g. `get:cache-control`\n        if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {\n          warningProduced.add(key);\n          const truncatedUrl = ɵtruncateMiddle(url);\n          // TODO: create Error guide for this warning\n          console.warn(ɵformatRuntimeError(2802 /* RuntimeErrorCode.HEADERS_ALTERED_BY_TRANSFER_CACHE */, `Angular detected that the \\`${headerName}\\` header is accessed, but the value of the header ` + `was not transferred from the server to the client by the HttpTransferCache. ` + `To include the value of the \\`${headerName}\\` header for the \\`${truncatedUrl}\\` request, ` + `use the \\`includeHeaders\\` list. The \\`includeHeaders\\` can be defined either ` + `on a request level by adding the \\`transferCache\\` parameter, or on an application ` + `level by adding the \\`httpCacheTransfer.includeHeaders\\` argument to the ` + `\\`provideClientHydration()\\` call. `));\n        }\n        // invoking the original method\n        return value.apply(target, [headerName]);\n      };\n    }\n  });\n}\nfunction mapRequestOriginUrl(url, originMap) {\n  const origin = new URL(url, 'resolve://').origin;\n  const mappedOrigin = originMap[origin];\n  if (!mappedOrigin) {\n    return url;\n  }\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    verifyMappedOrigin(mappedOrigin);\n  }\n  return url.replace(origin, mappedOrigin);\n}\nfunction verifyMappedOrigin(url) {\n  if (new URL(url, 'resolve://').pathname !== '/') {\n    throw new ɵRuntimeError(2804 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_CONTAINS_PATH */, 'Angular detected a URL with a path segment in the value provided for the ' + `\\`HTTP_TRANSFER_CACHE_ORIGIN_MAP\\` token: ${url}. The map should only contain origins ` + 'without any other segments.');\n  }\n}\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { FetchBackend, HTTP_INTERCEPTORS, HTTP_TRANSFER_CACHE_ORIGIN_MAP, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpContext, HttpContextToken, HttpErrorResponse, HttpEventType, HttpFeatureKind, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpStatusCode, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, provideHttpClient, withFetch, withInterceptors, withInterceptorsFromDi, withJsonpSupport, withNoXsrfProtection, withRequestsMadeViaParent, withXsrfConfiguration, HTTP_ROOT_INTERCEPTOR_FNS as ɵHTTP_ROOT_INTERCEPTOR_FNS, HttpInterceptorHandler as ɵHttpInterceptingHandler, HttpInterceptorHandler as ɵHttpInterceptorHandler, REQUESTS_CONTRIBUTE_TO_STABILITY as ɵREQUESTS_CONTRIBUTE_TO_STABILITY, withHttpTransferCache as ɵwithHttpTransferCache };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵDomAdapter, ɵsetRootDomAdapter, ɵparseCookieValue, ɵgetDOM, isPlatformServer, DOCUMENT, ɵPLATFORM_BROWSER_ID, XhrFactory, CommonModule } from '@angular/common';\nexport { ɵgetDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { ɵglobal, ɵRuntimeError, Injectable, InjectionToken, Inject, APP_ID, CSP_NONCE, PLATFORM_ID, Optional, ViewEncapsulation, RendererStyleFlags2, ɵinternalCreateApplication, ErrorHandler, ɵsetDocument, PLATFORM_INITIALIZER, createPlatformFactory, platformCore, ɵTESTABILITY_GETTER, ɵTESTABILITY, Testability, NgZone, TestabilityRegistry, ɵINJECTOR_SCOPE, RendererFactory2, ApplicationModule, NgModule, SkipSelf, ApplicationRef, ɵConsole, forwardRef, ɵXSS_SECURITY_URL, SecurityContext, ɵallowSanitizationBypassAndThrow, ɵunwrapSafeValue, ɵ_sanitizeUrl, ɵ_sanitizeHtml, ɵbypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl, ɵwithI18nSupport, ɵwithEventReplay, ɵwithIncrementalHydration, ENVIRONMENT_INITIALIZER, inject, ɵZONELESS_ENABLED, ɵformatRuntimeError, makeEnvironmentProviders, ɵwithDomHydration, Version } from '@angular/core';\nimport { ɵwithHttpTransferCache } from '@angular/common/http';\n\n/**\n * Provides DOM operations in any browser environment.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nclass GenericBrowserDomAdapter extends ɵDomAdapter {\n  supportsDOMEvents = true;\n}\n\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\n/* tslint:disable:requireParameterType no-console */\nclass BrowserDomAdapter extends GenericBrowserDomAdapter {\n  static makeCurrent() {\n    ɵsetRootDomAdapter(new BrowserDomAdapter());\n  }\n  onAndCancel(el, evt, listener) {\n    el.addEventListener(evt, listener);\n    return () => {\n      el.removeEventListener(evt, listener);\n    };\n  }\n  dispatchEvent(el, evt) {\n    el.dispatchEvent(evt);\n  }\n  remove(node) {\n    node.remove();\n  }\n  createElement(tagName, doc) {\n    doc = doc || this.getDefaultDocument();\n    return doc.createElement(tagName);\n  }\n  createHtmlDocument() {\n    return document.implementation.createHTMLDocument('fakeTitle');\n  }\n  getDefaultDocument() {\n    return document;\n  }\n  isElementNode(node) {\n    return node.nodeType === Node.ELEMENT_NODE;\n  }\n  isShadowRoot(node) {\n    return node instanceof DocumentFragment;\n  }\n  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n  getGlobalEventTarget(doc, target) {\n    if (target === 'window') {\n      return window;\n    }\n    if (target === 'document') {\n      return doc;\n    }\n    if (target === 'body') {\n      return doc.body;\n    }\n    return null;\n  }\n  getBaseHref(doc) {\n    const href = getBaseElementHref();\n    return href == null ? null : relativePath(href);\n  }\n  resetBaseElement() {\n    baseElement = null;\n  }\n  getUserAgent() {\n    return window.navigator.userAgent;\n  }\n  getCookie(name) {\n    return ɵparseCookieValue(document.cookie, name);\n  }\n}\nlet baseElement = null;\nfunction getBaseElementHref() {\n  baseElement = baseElement || document.querySelector('base');\n  return baseElement ? baseElement.getAttribute('href') : null;\n}\nfunction relativePath(url) {\n  // The base URL doesn't really matter, we just need it so relative paths have something\n  // to resolve against. In the browser `HTMLBaseElement.href` is always absolute.\n  return new URL(url, document.baseURI).pathname;\n}\nclass BrowserGetTestability {\n  addToWindow(registry) {\n    ɵglobal['getAngularTestability'] = (elem, findInAncestors = true) => {\n      const testability = registry.findTestabilityInTree(elem, findInAncestors);\n      if (testability == null) {\n        throw new ɵRuntimeError(5103 /* RuntimeErrorCode.TESTABILITY_NOT_FOUND */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Could not find testability for element.');\n      }\n      return testability;\n    };\n    ɵglobal['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n    ɵglobal['getAllAngularRootElements'] = () => registry.getAllRootElements();\n    const whenAllStable = callback => {\n      const testabilities = ɵglobal['getAllAngularTestabilities']();\n      let count = testabilities.length;\n      const decrement = function () {\n        count--;\n        if (count == 0) {\n          callback();\n        }\n      };\n      testabilities.forEach(testability => {\n        testability.whenStable(decrement);\n      });\n    };\n    if (!ɵglobal['frameworkStabilizers']) {\n      ɵglobal['frameworkStabilizers'] = [];\n    }\n    ɵglobal['frameworkStabilizers'].push(whenAllStable);\n  }\n  findTestabilityInTree(registry, elem, findInAncestors) {\n    if (elem == null) {\n      return null;\n    }\n    const t = registry.getTestability(elem);\n    if (t != null) {\n      return t;\n    } else if (!findInAncestors) {\n      return null;\n    }\n    if (ɵgetDOM().isShadowRoot(elem)) {\n      return this.findTestabilityInTree(registry, elem.host, true);\n    }\n    return this.findTestabilityInTree(registry, elem.parentElement, true);\n  }\n}\n\n/**\n * A factory for `HttpXhrBackend` that uses the `XMLHttpRequest` browser API.\n */\nclass BrowserXhr {\n  build() {\n    return new XMLHttpRequest();\n  }\n  static ɵfac = function BrowserXhr_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserXhr)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: BrowserXhr,\n    factory: BrowserXhr.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserXhr, [{\n    type: Injectable\n  }], null, null);\n})();\n\n/**\n * The injection token for plugins of the `EventManager` service.\n *\n * @publicApi\n */\nconst EVENT_MANAGER_PLUGINS = new InjectionToken(ngDevMode ? 'EventManagerPlugins' : '');\n/**\n * An injectable service that provides event management for Angular\n * through a browser plug-in.\n *\n * @publicApi\n */\nclass EventManager {\n  _zone;\n  _plugins;\n  _eventNameToPlugin = new Map();\n  /**\n   * Initializes an instance of the event-manager service.\n   */\n  constructor(plugins, _zone) {\n    this._zone = _zone;\n    plugins.forEach(plugin => {\n      plugin.manager = this;\n    });\n    this._plugins = plugins.slice().reverse();\n  }\n  /**\n   * Registers a handler for a specific element and event.\n   *\n   * @param element The HTML element to receive event notifications.\n   * @param eventName The name of the event to listen for.\n   * @param handler A function to call when the notification occurs. Receives the\n   * event object as an argument.\n   * @returns  A callback function that can be used to remove the handler.\n   */\n  addEventListener(element, eventName, handler) {\n    const plugin = this._findPluginFor(eventName);\n    return plugin.addEventListener(element, eventName, handler);\n  }\n  /**\n   * Retrieves the compilation zone in which event listeners are registered.\n   */\n  getZone() {\n    return this._zone;\n  }\n  /** @internal */\n  _findPluginFor(eventName) {\n    let plugin = this._eventNameToPlugin.get(eventName);\n    if (plugin) {\n      return plugin;\n    }\n    const plugins = this._plugins;\n    plugin = plugins.find(plugin => plugin.supports(eventName));\n    if (!plugin) {\n      throw new ɵRuntimeError(5101 /* RuntimeErrorCode.NO_PLUGIN_FOR_EVENT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `No event manager plugin found for event ${eventName}`);\n    }\n    this._eventNameToPlugin.set(eventName, plugin);\n    return plugin;\n  }\n  static ɵfac = function EventManager_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || EventManager)(i0.ɵɵinject(EVENT_MANAGER_PLUGINS), i0.ɵɵinject(i0.NgZone));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: EventManager,\n    factory: EventManager.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(EventManager, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [EVENT_MANAGER_PLUGINS]\n    }]\n  }, {\n    type: i0.NgZone\n  }], null);\n})();\n/**\n * The plugin definition for the `EventManager` class\n *\n * It can be used as a base class to create custom manager plugins, i.e. you can create your own\n * class that extends the `EventManagerPlugin` one.\n *\n * @publicApi\n */\nclass EventManagerPlugin {\n  _doc;\n  // TODO: remove (has some usage in G3)\n  constructor(_doc) {\n    this._doc = _doc;\n  }\n  // Using non-null assertion because it's set by EventManager's constructor\n  manager;\n}\n\n/** The style elements attribute name used to set value of `APP_ID` token. */\nconst APP_ID_ATTRIBUTE_NAME = 'ng-app-id';\n/**\n * Removes all provided elements from the document.\n * @param elements An array of HTML Elements.\n */\nfunction removeElements(elements) {\n  for (const element of elements) {\n    element.remove();\n  }\n}\n/**\n * Creates a `style` element with the provided inline style content.\n * @param style A string of the inline style content.\n * @param doc A DOM Document to use to create the element.\n * @returns An HTMLStyleElement instance.\n */\nfunction createStyleElement(style, doc) {\n  const styleElement = doc.createElement('style');\n  styleElement.textContent = style;\n  return styleElement;\n}\n/**\n * Searches a DOM document's head element for style elements with a matching application\n * identifier attribute (`ng-app-id`) to the provide identifier and adds usage records for each.\n * @param doc An HTML DOM document instance.\n * @param appId A string containing an Angular application identifer.\n * @param inline A Map object for tracking inline (defined via `styles` in component decorator) style usage.\n * @param external A Map object for tracking external (defined via `styleUrls` in component decorator) style usage.\n */\nfunction addServerStyles(doc, appId, inline, external) {\n  const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"],link[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"]`);\n  if (elements) {\n    for (const styleElement of elements) {\n      styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);\n      if (styleElement instanceof HTMLLinkElement) {\n        // Only use filename from href\n        // The href is build time generated with a unique value to prevent duplicates.\n        external.set(styleElement.href.slice(styleElement.href.lastIndexOf('/') + 1), {\n          usage: 0,\n          elements: [styleElement]\n        });\n      } else if (styleElement.textContent) {\n        inline.set(styleElement.textContent, {\n          usage: 0,\n          elements: [styleElement]\n        });\n      }\n    }\n  }\n}\n/**\n * Creates a `link` element for the provided external style URL.\n * @param url A string of the URL for the stylesheet.\n * @param doc A DOM Document to use to create the element.\n * @returns An HTMLLinkElement instance.\n */\nfunction createLinkElement(url, doc) {\n  const linkElement = doc.createElement('link');\n  linkElement.setAttribute('rel', 'stylesheet');\n  linkElement.setAttribute('href', url);\n  return linkElement;\n}\nclass SharedStylesHost {\n  doc;\n  appId;\n  nonce;\n  /**\n   * Provides usage information for active inline style content and associated HTML <style> elements.\n   * Embedded styles typically originate from the `styles` metadata of a rendered component.\n   */\n  inline = new Map();\n  /**\n   * Provides usage information for active external style URLs and the associated HTML <link> elements.\n   * External styles typically originate from the `ɵɵExternalStylesFeature` of a rendered component.\n   */\n  external = new Map();\n  /**\n   * Set of host DOM nodes that will have styles attached.\n   */\n  hosts = new Set();\n  /**\n   * Whether the application code is currently executing on a server.\n   */\n  isServer;\n  constructor(doc, appId, nonce, platformId = {}) {\n    this.doc = doc;\n    this.appId = appId;\n    this.nonce = nonce;\n    this.isServer = isPlatformServer(platformId);\n    addServerStyles(doc, appId, this.inline, this.external);\n    this.hosts.add(doc.head);\n  }\n  /**\n   * Adds embedded styles to the DOM via HTML `style` elements.\n   * @param styles An array of style content strings.\n   */\n  addStyles(styles, urls) {\n    for (const value of styles) {\n      this.addUsage(value, this.inline, createStyleElement);\n    }\n    urls?.forEach(value => this.addUsage(value, this.external, createLinkElement));\n  }\n  /**\n   * Removes embedded styles from the DOM that were added as HTML `style` elements.\n   * @param styles An array of style content strings.\n   */\n  removeStyles(styles, urls) {\n    for (const value of styles) {\n      this.removeUsage(value, this.inline);\n    }\n    urls?.forEach(value => this.removeUsage(value, this.external));\n  }\n  addUsage(value, usages, creator) {\n    // Attempt to get any current usage of the value\n    const record = usages.get(value);\n    // If existing, just increment the usage count\n    if (record) {\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && record.usage === 0) {\n        // A usage count of zero indicates a preexisting server generated style.\n        // This attribute is solely used for debugging purposes of SSR style reuse.\n        record.elements.forEach(element => element.setAttribute('ng-style-reused', ''));\n      }\n      record.usage++;\n    } else {\n      // Otherwise, create an entry to track the elements and add element for each host\n      usages.set(value, {\n        usage: 1,\n        elements: [...this.hosts].map(host => this.addElement(host, creator(value, this.doc)))\n      });\n    }\n  }\n  removeUsage(value, usages) {\n    // Attempt to get any current usage of the value\n    const record = usages.get(value);\n    // If there is a record, reduce the usage count and if no longer used,\n    // remove from DOM and delete usage record.\n    if (record) {\n      record.usage--;\n      if (record.usage <= 0) {\n        removeElements(record.elements);\n        usages.delete(value);\n      }\n    }\n  }\n  ngOnDestroy() {\n    for (const [, {\n      elements\n    }] of [...this.inline, ...this.external]) {\n      removeElements(elements);\n    }\n    this.hosts.clear();\n  }\n  /**\n   * Adds a host node to the set of style hosts and adds all existing style usage to\n   * the newly added host node.\n   *\n   * This is currently only used for Shadow DOM encapsulation mode.\n   */\n  addHost(hostNode) {\n    this.hosts.add(hostNode);\n    // Add existing styles to new host\n    for (const [style, {\n      elements\n    }] of this.inline) {\n      elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));\n    }\n    for (const [url, {\n      elements\n    }] of this.external) {\n      elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));\n    }\n  }\n  removeHost(hostNode) {\n    this.hosts.delete(hostNode);\n  }\n  addElement(host, element) {\n    // Add a nonce if present\n    if (this.nonce) {\n      element.setAttribute('nonce', this.nonce);\n    }\n    // Add application identifier when on the server to support client-side reuse\n    if (this.isServer) {\n      element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);\n    }\n    // Insert the element into the DOM with the host node as parent\n    return host.appendChild(element);\n  }\n  static ɵfac = function SharedStylesHost_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || SharedStylesHost)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(APP_ID), i0.ɵɵinject(CSP_NONCE, 8), i0.ɵɵinject(PLATFORM_ID));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: SharedStylesHost,\n    factory: SharedStylesHost.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SharedStylesHost, [{\n    type: Injectable\n  }], () => [{\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [APP_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [CSP_NONCE]\n    }, {\n      type: Optional\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }], null);\n})();\nconst NAMESPACE_URIS = {\n  'svg': 'http://www.w3.org/2000/svg',\n  'xhtml': 'http://www.w3.org/1999/xhtml',\n  'xlink': 'http://www.w3.org/1999/xlink',\n  'xml': 'http://www.w3.org/XML/1998/namespace',\n  'xmlns': 'http://www.w3.org/2000/xmlns/',\n  'math': 'http://www.w3.org/1998/Math/MathML'\n};\nconst COMPONENT_REGEX = /%COMP%/g;\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n/**\n * The default value for the `REMOVE_STYLES_ON_COMPONENT_DESTROY` DI token.\n */\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;\n/**\n * A DI token that indicates whether styles\n * of destroyed components should be removed from DOM.\n *\n * By default, the value is set to `true`.\n * @publicApi\n */\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY = new InjectionToken(ngDevMode ? 'RemoveStylesOnCompDestroy' : '', {\n  providedIn: 'root',\n  factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT\n});\nfunction shimContentAttribute(componentShortId) {\n  return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimHostAttribute(componentShortId) {\n  return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimStylesContent(compId, styles) {\n  return styles.map(s => s.replace(COMPONENT_REGEX, compId));\n}\nclass DomRendererFactory2 {\n  eventManager;\n  sharedStylesHost;\n  appId;\n  removeStylesOnCompDestroy;\n  doc;\n  platformId;\n  ngZone;\n  nonce;\n  rendererByCompId = new Map();\n  defaultRenderer;\n  platformIsServer;\n  constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, platformId, ngZone, nonce = null) {\n    this.eventManager = eventManager;\n    this.sharedStylesHost = sharedStylesHost;\n    this.appId = appId;\n    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n    this.doc = doc;\n    this.platformId = platformId;\n    this.ngZone = ngZone;\n    this.nonce = nonce;\n    this.platformIsServer = isPlatformServer(platformId);\n    this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.platformIsServer);\n  }\n  createRenderer(element, type) {\n    if (!element || !type) {\n      return this.defaultRenderer;\n    }\n    if (this.platformIsServer && type.encapsulation === ViewEncapsulation.ShadowDom) {\n      // Domino does not support shadow DOM.\n      type = {\n        ...type,\n        encapsulation: ViewEncapsulation.Emulated\n      };\n    }\n    const renderer = this.getOrCreateRenderer(element, type);\n    // Renderers have different logic due to different encapsulation behaviours.\n    // Ex: for emulated, an attribute is added to the element.\n    if (renderer instanceof EmulatedEncapsulationDomRenderer2) {\n      renderer.applyToHost(element);\n    } else if (renderer instanceof NoneEncapsulationDomRenderer) {\n      renderer.applyStyles();\n    }\n    return renderer;\n  }\n  getOrCreateRenderer(element, type) {\n    const rendererByCompId = this.rendererByCompId;\n    let renderer = rendererByCompId.get(type.id);\n    if (!renderer) {\n      const doc = this.doc;\n      const ngZone = this.ngZone;\n      const eventManager = this.eventManager;\n      const sharedStylesHost = this.sharedStylesHost;\n      const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;\n      const platformIsServer = this.platformIsServer;\n      switch (type.encapsulation) {\n        case ViewEncapsulation.Emulated:\n          renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);\n          break;\n        case ViewEncapsulation.ShadowDom:\n          return new ShadowDomRenderer(eventManager, sharedStylesHost, element, type, doc, ngZone, this.nonce, platformIsServer);\n        default:\n          renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);\n          break;\n      }\n      rendererByCompId.set(type.id, renderer);\n    }\n    return renderer;\n  }\n  ngOnDestroy() {\n    this.rendererByCompId.clear();\n  }\n  static ɵfac = function DomRendererFactory2_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomRendererFactory2)(i0.ɵɵinject(EventManager), i0.ɵɵinject(SharedStylesHost), i0.ɵɵinject(APP_ID), i0.ɵɵinject(REMOVE_STYLES_ON_COMPONENT_DESTROY), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(CSP_NONCE));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomRendererFactory2,\n    factory: DomRendererFactory2.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomRendererFactory2, [{\n    type: Injectable\n  }], () => [{\n    type: EventManager\n  }, {\n    type: SharedStylesHost\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [APP_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [REMOVE_STYLES_ON_COMPONENT_DESTROY]\n    }]\n  }, {\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: Object,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }, {\n    type: i0.NgZone\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [CSP_NONCE]\n    }]\n  }], null);\n})();\nclass DefaultDomRenderer2 {\n  eventManager;\n  doc;\n  ngZone;\n  platformIsServer;\n  data = Object.create(null);\n  /**\n   * By default this renderer throws when encountering synthetic properties\n   * This can be disabled for example by the AsyncAnimationRendererFactory\n   */\n  throwOnSyntheticProps = true;\n  constructor(eventManager, doc, ngZone, platformIsServer) {\n    this.eventManager = eventManager;\n    this.doc = doc;\n    this.ngZone = ngZone;\n    this.platformIsServer = platformIsServer;\n  }\n  destroy() {}\n  destroyNode = null;\n  createElement(name, namespace) {\n    if (namespace) {\n      // TODO: `|| namespace` was added in\n      // https://github.com/angular/angular/commit/2b9cc8503d48173492c29f5a271b61126104fbdb to\n      // support how Ivy passed around the namespace URI rather than short name at the time. It did\n      // not, however extend the support to other parts of the system (setAttribute, setAttribute,\n      // and the ServerRenderer). We should decide what exactly the semantics for dealing with\n      // namespaces should be and make it consistent.\n      // Related issues:\n      // https://github.com/angular/angular/issues/44028\n      // https://github.com/angular/angular/issues/44883\n      return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);\n    }\n    return this.doc.createElement(name);\n  }\n  createComment(value) {\n    return this.doc.createComment(value);\n  }\n  createText(value) {\n    return this.doc.createTextNode(value);\n  }\n  appendChild(parent, newChild) {\n    const targetParent = isTemplateNode(parent) ? parent.content : parent;\n    targetParent.appendChild(newChild);\n  }\n  insertBefore(parent, newChild, refChild) {\n    if (parent) {\n      const targetParent = isTemplateNode(parent) ? parent.content : parent;\n      targetParent.insertBefore(newChild, refChild);\n    }\n  }\n  removeChild(_parent, oldChild) {\n    oldChild.remove();\n  }\n  selectRootElement(selectorOrNode, preserveContent) {\n    let el = typeof selectorOrNode === 'string' ? this.doc.querySelector(selectorOrNode) : selectorOrNode;\n    if (!el) {\n      throw new ɵRuntimeError(-5104 /* RuntimeErrorCode.ROOT_NODE_NOT_FOUND */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The selector \"${selectorOrNode}\" did not match any elements`);\n    }\n    if (!preserveContent) {\n      el.textContent = '';\n    }\n    return el;\n  }\n  parentNode(node) {\n    return node.parentNode;\n  }\n  nextSibling(node) {\n    return node.nextSibling;\n  }\n  setAttribute(el, name, value, namespace) {\n    if (namespace) {\n      name = namespace + ':' + name;\n      const namespaceUri = NAMESPACE_URIS[namespace];\n      if (namespaceUri) {\n        el.setAttributeNS(namespaceUri, name, value);\n      } else {\n        el.setAttribute(name, value);\n      }\n    } else {\n      el.setAttribute(name, value);\n    }\n  }\n  removeAttribute(el, name, namespace) {\n    if (namespace) {\n      const namespaceUri = NAMESPACE_URIS[namespace];\n      if (namespaceUri) {\n        el.removeAttributeNS(namespaceUri, name);\n      } else {\n        el.removeAttribute(`${namespace}:${name}`);\n      }\n    } else {\n      el.removeAttribute(name);\n    }\n  }\n  addClass(el, name) {\n    el.classList.add(name);\n  }\n  removeClass(el, name) {\n    el.classList.remove(name);\n  }\n  setStyle(el, style, value, flags) {\n    if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {\n      el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? 'important' : '');\n    } else {\n      el.style[style] = value;\n    }\n  }\n  removeStyle(el, style, flags) {\n    if (flags & RendererStyleFlags2.DashCase) {\n      // removeProperty has no effect when used on camelCased properties.\n      el.style.removeProperty(style);\n    } else {\n      el.style[style] = '';\n    }\n  }\n  setProperty(el, name, value) {\n    if (el == null) {\n      return;\n    }\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, 'property');\n    el[name] = value;\n  }\n  setValue(node, value) {\n    node.nodeValue = value;\n  }\n  listen(target, event, callback) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, 'listener');\n    if (typeof target === 'string') {\n      target = ɵgetDOM().getGlobalEventTarget(this.doc, target);\n      if (!target) {\n        throw new Error(`Unsupported event target ${target} for event ${event}`);\n      }\n    }\n    return this.eventManager.addEventListener(target, event, this.decoratePreventDefault(callback));\n  }\n  decoratePreventDefault(eventHandler) {\n    // `DebugNode.triggerEventHandler` needs to know if the listener was created with\n    // decoratePreventDefault or is a listener added outside the Angular context so it can handle\n    // the two differently. In the first case, the special '__ngUnwrap__' token is passed to the\n    // unwrap the listener (see below).\n    return event => {\n      // Ivy uses '__ngUnwrap__' as a special token that allows us to unwrap the function\n      // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`. The\n      // debug_node can inspect the listener toString contents for the existence of this special\n      // token. Because the token is a string literal, it is ensured to not be modified by compiled\n      // code.\n      if (event === '__ngUnwrap__') {\n        return eventHandler;\n      }\n      // Run the event handler inside the ngZone because event handlers are not patched\n      // by Zone on the server. This is required only for tests.\n      const allowDefaultBehavior = this.platformIsServer ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);\n      if (allowDefaultBehavior === false) {\n        event.preventDefault();\n      }\n      return undefined;\n    };\n  }\n}\nconst AT_CHARCODE = (() => '@'.charCodeAt(0))();\nfunction checkNoSyntheticProp(name, nameKind) {\n  if (name.charCodeAt(0) === AT_CHARCODE) {\n    throw new ɵRuntimeError(5105 /* RuntimeErrorCode.UNEXPECTED_SYNTHETIC_PROPERTY */, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:\n  - Either \\`BrowserAnimationsModule\\` or \\`NoopAnimationsModule\\` are imported in your application.\n  - There is corresponding configuration for the animation named \\`${name}\\` defined in the \\`animations\\` field of the \\`@Component\\` decorator (see https://angular.io/api/core/Component#animations).`);\n  }\n}\nfunction isTemplateNode(node) {\n  return node.tagName === 'TEMPLATE' && node.content !== undefined;\n}\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\n  sharedStylesHost;\n  hostEl;\n  shadowRoot;\n  constructor(eventManager, sharedStylesHost, hostEl, component, doc, ngZone, nonce, platformIsServer) {\n    super(eventManager, doc, ngZone, platformIsServer);\n    this.sharedStylesHost = sharedStylesHost;\n    this.hostEl = hostEl;\n    this.shadowRoot = hostEl.attachShadow({\n      mode: 'open'\n    });\n    this.sharedStylesHost.addHost(this.shadowRoot);\n    const styles = shimStylesContent(component.id, component.styles);\n    for (const style of styles) {\n      const styleEl = document.createElement('style');\n      if (nonce) {\n        styleEl.setAttribute('nonce', nonce);\n      }\n      styleEl.textContent = style;\n      this.shadowRoot.appendChild(styleEl);\n    }\n    // Apply any external component styles to the shadow root for the component's element.\n    // The ShadowDOM renderer uses an alternative execution path for component styles that\n    // does not use the SharedStylesHost that other encapsulation modes leverage. Much like\n    // the manual addition of embedded styles directly above, any external stylesheets\n    // must be manually added here to ensure ShadowDOM components are correctly styled.\n    // TODO: Consider reworking the DOM Renderers to consolidate style handling.\n    const styleUrls = component.getExternalStyles?.();\n    if (styleUrls) {\n      for (const styleUrl of styleUrls) {\n        const linkEl = createLinkElement(styleUrl, doc);\n        if (nonce) {\n          linkEl.setAttribute('nonce', nonce);\n        }\n        this.shadowRoot.appendChild(linkEl);\n      }\n    }\n  }\n  nodeOrShadowRoot(node) {\n    return node === this.hostEl ? this.shadowRoot : node;\n  }\n  appendChild(parent, newChild) {\n    return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n  }\n  insertBefore(parent, newChild, refChild) {\n    return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n  }\n  removeChild(_parent, oldChild) {\n    return super.removeChild(null, oldChild);\n  }\n  parentNode(node) {\n    return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n  }\n  destroy() {\n    this.sharedStylesHost.removeHost(this.shadowRoot);\n  }\n}\nclass NoneEncapsulationDomRenderer extends DefaultDomRenderer2 {\n  sharedStylesHost;\n  removeStylesOnCompDestroy;\n  styles;\n  styleUrls;\n  constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId) {\n    super(eventManager, doc, ngZone, platformIsServer);\n    this.sharedStylesHost = sharedStylesHost;\n    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n    this.styles = compId ? shimStylesContent(compId, component.styles) : component.styles;\n    this.styleUrls = component.getExternalStyles?.(compId);\n  }\n  applyStyles() {\n    this.sharedStylesHost.addStyles(this.styles, this.styleUrls);\n  }\n  destroy() {\n    if (!this.removeStylesOnCompDestroy) {\n      return;\n    }\n    this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);\n  }\n}\nclass EmulatedEncapsulationDomRenderer2 extends NoneEncapsulationDomRenderer {\n  contentAttr;\n  hostAttr;\n  constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer) {\n    const compId = appId + '-' + component.id;\n    super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId);\n    this.contentAttr = shimContentAttribute(compId);\n    this.hostAttr = shimHostAttribute(compId);\n  }\n  applyToHost(element) {\n    this.applyStyles();\n    this.setAttribute(element, this.hostAttr, '');\n  }\n  createElement(parent, name) {\n    const el = super.createElement(parent, name);\n    super.setAttribute(el, this.contentAttr, '');\n    return el;\n  }\n}\nclass DomEventsPlugin extends EventManagerPlugin {\n  constructor(doc) {\n    super(doc);\n  }\n  // This plugin should come last in the list of plugins, because it accepts all\n  // events.\n  supports(eventName) {\n    return true;\n  }\n  addEventListener(element, eventName, handler) {\n    element.addEventListener(eventName, handler, false);\n    return () => this.removeEventListener(element, eventName, handler);\n  }\n  removeEventListener(target, eventName, callback) {\n    return target.removeEventListener(eventName, callback);\n  }\n  static ɵfac = function DomEventsPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomEventsPlugin,\n    factory: DomEventsPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomEventsPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Defines supported modifiers for key events.\n */\nconst MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\n// The following values are here for cross-browser compatibility and to match the W3C standard\n// cf https://www.w3.org/TR/DOM-Level-3-Events-key/\nconst _keyMap = {\n  '\\b': 'Backspace',\n  '\\t': 'Tab',\n  '\\x7F': 'Delete',\n  '\\x1B': 'Escape',\n  'Del': 'Delete',\n  'Esc': 'Escape',\n  'Left': 'ArrowLeft',\n  'Right': 'ArrowRight',\n  'Up': 'ArrowUp',\n  'Down': 'ArrowDown',\n  'Menu': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'Win': 'OS'\n};\n/**\n * Retrieves modifiers from key-event objects.\n */\nconst MODIFIER_KEY_GETTERS = {\n  'alt': event => event.altKey,\n  'control': event => event.ctrlKey,\n  'meta': event => event.metaKey,\n  'shift': event => event.shiftKey\n};\n/**\n * A browser plug-in that provides support for handling of key events in Angular.\n */\nclass KeyEventsPlugin extends EventManagerPlugin {\n  /**\n   * Initializes an instance of the browser plug-in.\n   * @param doc The document in which key events will be detected.\n   */\n  constructor(doc) {\n    super(doc);\n  }\n  /**\n   * Reports whether a named key event is supported.\n   * @param eventName The event name to query.\n   * @return True if the named key event is supported.\n   */\n  supports(eventName) {\n    return KeyEventsPlugin.parseEventName(eventName) != null;\n  }\n  /**\n   * Registers a handler for a specific element and key event.\n   * @param element The HTML element to receive event notifications.\n   * @param eventName The name of the key event to listen for.\n   * @param handler A function to call when the notification occurs. Receives the\n   * event object as an argument.\n   * @returns The key event that was registered.\n   */\n  addEventListener(element, eventName, handler) {\n    const parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n    const outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n    return this.manager.getZone().runOutsideAngular(() => {\n      return ɵgetDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n    });\n  }\n  /**\n   * Parses the user provided full keyboard event definition and normalizes it for\n   * later internal use. It ensures the string is all lowercase, converts special\n   * characters to a standard spelling, and orders all the values consistently.\n   *\n   * @param eventName The name of the key event to listen for.\n   * @returns an object with the full, normalized string, and the dom event name\n   * or null in the case when the event doesn't match a keyboard event.\n   */\n  static parseEventName(eventName) {\n    const parts = eventName.toLowerCase().split('.');\n    const domEventName = parts.shift();\n    if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n      return null;\n    }\n    const key = KeyEventsPlugin._normalizeKey(parts.pop());\n    let fullKey = '';\n    let codeIX = parts.indexOf('code');\n    if (codeIX > -1) {\n      parts.splice(codeIX, 1);\n      fullKey = 'code.';\n    }\n    MODIFIER_KEYS.forEach(modifierName => {\n      const index = parts.indexOf(modifierName);\n      if (index > -1) {\n        parts.splice(index, 1);\n        fullKey += modifierName + '.';\n      }\n    });\n    fullKey += key;\n    if (parts.length != 0 || key.length === 0) {\n      // returning null instead of throwing to let another plugin process the event\n      return null;\n    }\n    // NOTE: Please don't rewrite this as so, as it will break JSCompiler property renaming.\n    //       The code must remain in the `result['domEventName']` form.\n    // return {domEventName, fullKey};\n    const result = {};\n    result['domEventName'] = domEventName;\n    result['fullKey'] = fullKey;\n    return result;\n  }\n  /**\n   * Determines whether the actual keys pressed match the configured key code string.\n   * The `fullKeyCode` event is normalized in the `parseEventName` method when the\n   * event is attached to the DOM during the `addEventListener` call. This is unseen\n   * by the end user and is normalized for internal consistency and parsing.\n   *\n   * @param event The keyboard event.\n   * @param fullKeyCode The normalized user defined expected key event string\n   * @returns boolean.\n   */\n  static matchEventFullKeyCode(event, fullKeyCode) {\n    let keycode = _keyMap[event.key] || event.key;\n    let key = '';\n    if (fullKeyCode.indexOf('code.') > -1) {\n      keycode = event.code;\n      key = 'code.';\n    }\n    // the keycode could be unidentified so we have to check here\n    if (keycode == null || !keycode) return false;\n    keycode = keycode.toLowerCase();\n    if (keycode === ' ') {\n      keycode = 'space'; // for readability\n    } else if (keycode === '.') {\n      keycode = 'dot'; // because '.' is used as a separator in event names\n    }\n    MODIFIER_KEYS.forEach(modifierName => {\n      if (modifierName !== keycode) {\n        const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n        if (modifierGetter(event)) {\n          key += modifierName + '.';\n        }\n      }\n    });\n    key += keycode;\n    return key === fullKeyCode;\n  }\n  /**\n   * Configures a handler callback for a key event.\n   * @param fullKey The event name that combines all simultaneous keystrokes.\n   * @param handler The function that responds to the key event.\n   * @param zone The zone in which the event occurred.\n   * @returns A callback function.\n   */\n  static eventCallback(fullKey, handler, zone) {\n    return event => {\n      if (KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {\n        zone.runGuarded(() => handler(event));\n      }\n    };\n  }\n  /** @internal */\n  static _normalizeKey(keyName) {\n    return keyName === 'esc' ? 'escape' : keyName;\n  }\n  static ɵfac = function KeyEventsPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || KeyEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: KeyEventsPlugin,\n    factory: KeyEventsPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(KeyEventsPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Bootstraps an instance of an Angular application and renders a standalone component as the\n * application's root component. More information about standalone components can be found in [this\n * guide](guide/components/importing).\n *\n * @usageNotes\n * The root component passed into this function *must* be a standalone one (should have the\n * `standalone: true` flag in the `@Component` decorator config).\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   template: 'Hello world!'\n * })\n * class RootComponent {}\n *\n * const appRef: ApplicationRef = await bootstrapApplication(RootComponent);\n * ```\n *\n * You can add the list of providers that should be available in the application injector by\n * specifying the `providers` field in an object passed as the second argument:\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     {provide: BACKEND_URL, useValue: 'https://yourdomain.com/api'}\n *   ]\n * });\n * ```\n *\n * The `importProvidersFrom` helper method can be used to collect all providers from any\n * existing NgModule (and transitively from all NgModules that it imports):\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     importProvidersFrom(SomeNgModule)\n *   ]\n * });\n * ```\n *\n * Note: the `bootstrapApplication` method doesn't include [Testability](api/core/Testability) by\n * default. You can add [Testability](api/core/Testability) by getting the list of necessary\n * providers using `provideProtractorTestingSupport()` function and adding them into the `providers`\n * array, for example:\n *\n * ```ts\n * import {provideProtractorTestingSupport} from '@angular/platform-browser';\n *\n * await bootstrapApplication(RootComponent, {providers: [provideProtractorTestingSupport()]});\n * ```\n *\n * @param rootComponent A reference to a standalone component that should be rendered.\n * @param options Extra configuration for the bootstrap operation, see `ApplicationConfig` for\n *     additional info.\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n *\n * @publicApi\n */\nfunction bootstrapApplication(rootComponent, options) {\n  return ɵinternalCreateApplication({\n    rootComponent,\n    ...createProvidersConfig(options)\n  });\n}\n/**\n * Create an instance of an Angular application without bootstrapping any components. This is useful\n * for the situation where one wants to decouple application environment creation (a platform and\n * associated injectors) from rendering components on a screen. Components can be subsequently\n * bootstrapped on the returned `ApplicationRef`.\n *\n * @param options Extra configuration for the application environment, see `ApplicationConfig` for\n *     additional info.\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n *\n * @publicApi\n */\nfunction createApplication(options) {\n  return ɵinternalCreateApplication(createProvidersConfig(options));\n}\nfunction createProvidersConfig(options) {\n  return {\n    appProviders: [...BROWSER_MODULE_PROVIDERS, ...(options?.providers ?? [])],\n    platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS\n  };\n}\n/**\n * Returns a set of providers required to setup [Testability](api/core/Testability) for an\n * application bootstrapped using the `bootstrapApplication` function. The set of providers is\n * needed to support testing an application with Protractor (which relies on the Testability APIs\n * to be present).\n *\n * @returns An array of providers required to setup Testability for an application and make it\n *     available for testing using Protractor.\n *\n * @publicApi\n */\nfunction provideProtractorTestingSupport() {\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideProtractorTestingSupport` call results in app\n  // code.\n  return [...TESTABILITY_PROVIDERS];\n}\nfunction initDomAdapter() {\n  BrowserDomAdapter.makeCurrent();\n}\nfunction errorHandler() {\n  return new ErrorHandler();\n}\nfunction _document() {\n  // Tell ivy about the global document\n  ɵsetDocument(document);\n  return document;\n}\nconst INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{\n  provide: PLATFORM_ID,\n  useValue: ɵPLATFORM_BROWSER_ID\n}, {\n  provide: PLATFORM_INITIALIZER,\n  useValue: initDomAdapter,\n  multi: true\n}, {\n  provide: DOCUMENT,\n  useFactory: _document,\n  deps: []\n}];\n/**\n * A factory function that returns a `PlatformRef` instance associated with browser service\n * providers.\n *\n * @publicApi\n */\nconst platformBrowser = createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * Internal marker to signal whether providers from the `BrowserModule` are already present in DI.\n * This is needed to avoid loading `BrowserModule` providers twice. We can't rely on the\n * `BrowserModule` presence itself, since the standalone-based bootstrap just imports\n * `BrowserModule` providers without referencing the module itself.\n */\nconst BROWSER_MODULE_PROVIDERS_MARKER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'BrowserModule Providers Marker' : '');\nconst TESTABILITY_PROVIDERS = [{\n  provide: ɵTESTABILITY_GETTER,\n  useClass: BrowserGetTestability,\n  deps: []\n}, {\n  provide: ɵTESTABILITY,\n  useClass: Testability,\n  deps: [NgZone, TestabilityRegistry, ɵTESTABILITY_GETTER]\n}, {\n  provide: Testability,\n  // Also provide as `Testability` for backwards-compatibility.\n  useClass: Testability,\n  deps: [NgZone, TestabilityRegistry, ɵTESTABILITY_GETTER]\n}];\nconst BROWSER_MODULE_PROVIDERS = [{\n  provide: ɵINJECTOR_SCOPE,\n  useValue: 'root'\n}, {\n  provide: ErrorHandler,\n  useFactory: errorHandler,\n  deps: []\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: DomEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT, NgZone, PLATFORM_ID]\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: KeyEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT]\n}, DomRendererFactory2, SharedStylesHost, EventManager, {\n  provide: RendererFactory2,\n  useExisting: DomRendererFactory2\n}, {\n  provide: XhrFactory,\n  useClass: BrowserXhr,\n  deps: []\n}, typeof ngDevMode === 'undefined' || ngDevMode ? {\n  provide: BROWSER_MODULE_PROVIDERS_MARKER,\n  useValue: true\n} : []];\n/**\n * Exports required infrastructure for all Angular apps.\n * Included by default in all Angular apps created with the CLI\n * `new` command.\n * Re-exports `CommonModule` and `ApplicationModule`, making their\n * exports and providers available to all apps.\n *\n * @publicApi\n */\nclass BrowserModule {\n  constructor(providersAlreadyPresent) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && providersAlreadyPresent) {\n      throw new ɵRuntimeError(5100 /* RuntimeErrorCode.BROWSER_MODULE_ALREADY_LOADED */, `Providers from the \\`BrowserModule\\` have already been loaded. If you need access ` + `to common directives such as NgIf and NgFor, import the \\`CommonModule\\` instead.`);\n    }\n  }\n  static ɵfac = function BrowserModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserModule)(i0.ɵɵinject(BROWSER_MODULE_PROVIDERS_MARKER, 12));\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: BrowserModule,\n    exports: [CommonModule, ApplicationModule]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n    imports: [CommonModule, ApplicationModule]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserModule, [{\n    type: NgModule,\n    args: [{\n      providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n      exports: [CommonModule, ApplicationModule]\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: SkipSelf\n    }, {\n      type: Inject,\n      args: [BROWSER_MODULE_PROVIDERS_MARKER]\n    }]\n  }], null);\n})();\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\nclass Meta {\n  _doc;\n  _dom;\n  constructor(_doc) {\n    this._doc = _doc;\n    this._dom = ɵgetDOM();\n  }\n  /**\n   * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n   * values in the provided tag definition, and verifies that all other attribute values are equal.\n   * If an existing element is found, it is returned and is not modified in any way.\n   * @param tag The definition of a `<meta>` element to match or create.\n   * @param forceCreation True to create a new element without checking whether one already exists.\n   * @returns The existing element with the same attributes and values if found,\n   * the new element if no match is found, or `null` if the tag parameter is not defined.\n   */\n  addTag(tag, forceCreation = false) {\n    if (!tag) return null;\n    return this._getOrCreateElement(tag, forceCreation);\n  }\n  /**\n   * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n   * values in the provided tag definition, and verifies that all other attribute values are equal.\n   * @param tags An array of tag definitions to match or create.\n   * @param forceCreation True to create new elements without checking whether they already exist.\n   * @returns The matching elements if found, or the new elements.\n   */\n  addTags(tags, forceCreation = false) {\n    if (!tags) return [];\n    return tags.reduce((result, tag) => {\n      if (tag) {\n        result.push(this._getOrCreateElement(tag, forceCreation));\n      }\n      return result;\n    }, []);\n  }\n  /**\n   * Retrieves a `<meta>` tag element in the current HTML document.\n   * @param attrSelector The tag attribute and value to match against, in the format\n   * `\"tag_attribute='value string'\"`.\n   * @returns The matching element, if any.\n   */\n  getTag(attrSelector) {\n    if (!attrSelector) return null;\n    return this._doc.querySelector(`meta[${attrSelector}]`) || null;\n  }\n  /**\n   * Retrieves a set of `<meta>` tag elements in the current HTML document.\n   * @param attrSelector The tag attribute and value to match against, in the format\n   * `\"tag_attribute='value string'\"`.\n   * @returns The matching elements, if any.\n   */\n  getTags(attrSelector) {\n    if (!attrSelector) return [];\n    const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n    return list ? [].slice.call(list) : [];\n  }\n  /**\n   * Modifies an existing `<meta>` tag element in the current HTML document.\n   * @param tag The tag description with which to replace the existing tag content.\n   * @param selector A tag attribute and value to match against, to identify\n   * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n   * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n   * replacement tag.\n   * @return The modified element.\n   */\n  updateTag(tag, selector) {\n    if (!tag) return null;\n    selector = selector || this._parseSelector(tag);\n    const meta = this.getTag(selector);\n    if (meta) {\n      return this._setMetaElementAttributes(tag, meta);\n    }\n    return this._getOrCreateElement(tag, true);\n  }\n  /**\n   * Removes an existing `<meta>` tag element from the current HTML document.\n   * @param attrSelector A tag attribute and value to match against, to identify\n   * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n   */\n  removeTag(attrSelector) {\n    this.removeTagElement(this.getTag(attrSelector));\n  }\n  /**\n   * Removes an existing `<meta>` tag element from the current HTML document.\n   * @param meta The tag definition to match against to identify an existing tag.\n   */\n  removeTagElement(meta) {\n    if (meta) {\n      this._dom.remove(meta);\n    }\n  }\n  _getOrCreateElement(meta, forceCreation = false) {\n    if (!forceCreation) {\n      const selector = this._parseSelector(meta);\n      // It's allowed to have multiple elements with the same name so it's not enough to\n      // just check that element with the same name already present on the page. We also need to\n      // check if element has tag attributes\n      const elem = this.getTags(selector).filter(elem => this._containsAttributes(meta, elem))[0];\n      if (elem !== undefined) return elem;\n    }\n    const element = this._dom.createElement('meta');\n    this._setMetaElementAttributes(meta, element);\n    const head = this._doc.getElementsByTagName('head')[0];\n    head.appendChild(element);\n    return element;\n  }\n  _setMetaElementAttributes(tag, el) {\n    Object.keys(tag).forEach(prop => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));\n    return el;\n  }\n  _parseSelector(tag) {\n    const attr = tag.name ? 'name' : 'property';\n    return `${attr}=\"${tag[attr]}\"`;\n  }\n  _containsAttributes(tag, elem) {\n    return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);\n  }\n  _getMetaKeyMap(prop) {\n    return META_KEYS_MAP[prop] || prop;\n  }\n  static ɵfac = function Meta_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Meta)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Meta,\n    factory: Meta.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Meta, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP = {\n  httpEquiv: 'http-equiv'\n};\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\nclass Title {\n  _doc;\n  constructor(_doc) {\n    this._doc = _doc;\n  }\n  /**\n   * Get the title of the current HTML document.\n   */\n  getTitle() {\n    return this._doc.title;\n  }\n  /**\n   * Set the title of the current HTML document.\n   * @param newTitle\n   */\n  setTitle(newTitle) {\n    this._doc.title = newTitle || '';\n  }\n  static ɵfac = function Title_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Title)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Title,\n    factory: Title.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Title, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nfunction exportNgVar(name, value) {\n  if (typeof COMPILED === 'undefined' || !COMPILED) {\n    // Note: we can't export `ng` when using closure enhanced optimization as:\n    // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n    // - we can't declare a closure extern as the namespace `ng` is already used within Google\n    //   for typings for angularJS (via `goog.provide('ng....')`).\n    const ng = ɵglobal['ng'] = ɵglobal['ng'] || {};\n    ng[name] = value;\n  }\n}\nclass ChangeDetectionPerfRecord {\n  msPerTick;\n  numTicks;\n  constructor(msPerTick, numTicks) {\n    this.msPerTick = msPerTick;\n    this.numTicks = numTicks;\n  }\n}\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nclass AngularProfiler {\n  appRef;\n  constructor(ref) {\n    this.appRef = ref.injector.get(ApplicationRef);\n  }\n  // tslint:disable:no-console\n  /**\n   * Exercises change detection in a loop and then prints the average amount of\n   * time in milliseconds how long a single round of change detection takes for\n   * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n   * of 500 milliseconds.\n   *\n   * Optionally, a user may pass a `config` parameter containing a map of\n   * options. Supported options are:\n   *\n   * `record` (boolean) - causes the profiler to record a CPU profile while\n   * it exercises the change detector. Example:\n   *\n   * ```\n   * ng.profiler.timeChangeDetection({record: true})\n   * ```\n   */\n  timeChangeDetection(config) {\n    const record = config && config['record'];\n    const profileName = 'Change Detection';\n    // Profiler is not available in Android browsers without dev tools opened\n    if (record && 'profile' in console && typeof console.profile === 'function') {\n      console.profile(profileName);\n    }\n    const start = performance.now();\n    let numTicks = 0;\n    while (numTicks < 5 || performance.now() - start < 500) {\n      this.appRef.tick();\n      numTicks++;\n    }\n    const end = performance.now();\n    if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n      console.profileEnd(profileName);\n    }\n    const msPerTick = (end - start) / numTicks;\n    console.log(`ran ${numTicks} change detection cycles`);\n    console.log(`${msPerTick.toFixed(2)} ms per check`);\n    return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n  }\n}\nconst PROFILER_GLOBAL_NAME = 'profiler';\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n *    then hit Enter.\n *\n * @publicApi\n */\nfunction enableDebugTools(ref) {\n  exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n  return ref;\n}\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nfunction disableDebugTools() {\n  exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nclass By {\n  /**\n   * Match all nodes.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n   */\n  static all() {\n    return () => true;\n  }\n  /**\n   * Match elements by the given CSS selector.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n   */\n  static css(selector) {\n    return debugElement => {\n      return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;\n    };\n  }\n  /**\n   * Match nodes that have the given directive present.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n   */\n  static directive(type) {\n    return debugNode => debugNode.providerTokens.indexOf(type) !== -1;\n  }\n}\nfunction elementMatches(n, selector) {\n  if (ɵgetDOM().isElementNode(n)) {\n    return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n  }\n  return false;\n}\n\n/**\n * Supported HammerJS recognizer event names.\n */\nconst EVENT_NAMES = {\n  // pan\n  'pan': true,\n  'panstart': true,\n  'panmove': true,\n  'panend': true,\n  'pancancel': true,\n  'panleft': true,\n  'panright': true,\n  'panup': true,\n  'pandown': true,\n  // pinch\n  'pinch': true,\n  'pinchstart': true,\n  'pinchmove': true,\n  'pinchend': true,\n  'pinchcancel': true,\n  'pinchin': true,\n  'pinchout': true,\n  // press\n  'press': true,\n  'pressup': true,\n  // rotate\n  'rotate': true,\n  'rotatestart': true,\n  'rotatemove': true,\n  'rotateend': true,\n  'rotatecancel': true,\n  // swipe\n  'swipe': true,\n  'swipeleft': true,\n  'swiperight': true,\n  'swipeup': true,\n  'swipedown': true,\n  // tap\n  'tap': true,\n  'doubletap': true\n};\n/**\n * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.\n * @see {@link HammerGestureConfig}\n *\n * @ngModule HammerModule\n * @publicApi\n */\nconst HAMMER_GESTURE_CONFIG = new InjectionToken('HammerGestureConfig');\n/**\n * Injection token used to provide a HammerLoader to Angular.\n *\n * @see {@link HammerLoader}\n *\n * @publicApi\n */\nconst HAMMER_LOADER = new InjectionToken('HammerLoader');\n/**\n * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * for gesture recognition. Configures specific event recognition.\n * @publicApi\n */\nclass HammerGestureConfig {\n  /**\n   * A set of supported event names for gestures to be used in Angular.\n   * Angular supports all built-in recognizers, as listed in\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   */\n  events = [];\n  /**\n   * Maps gesture event names to a set of configuration options\n   * that specify overrides to the default values for specific properties.\n   *\n   * The key is a supported event name to be configured,\n   * and the options object contains a set of properties, with override values\n   * to be applied to the named recognizer event.\n   * For example, to disable recognition of the rotate event, specify\n   *  `{\"rotate\": {\"enable\": false}}`.\n   *\n   * Properties that are not present take the HammerJS default values.\n   * For information about which properties are supported for which events,\n   * and their allowed and default values, see\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   *\n   */\n  overrides = {};\n  /**\n   * Properties whose default values can be overridden for a given event.\n   * Different sets of properties apply to different events.\n   * For information about which properties are supported for which events,\n   * and their allowed and default values, see\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   */\n  options;\n  /**\n   * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n   * and attaches it to a given HTML element.\n   * @param element The element that will recognize gestures.\n   * @returns A HammerJS event-manager object.\n   */\n  buildHammer(element) {\n    const mc = new Hammer(element, this.options);\n    mc.get('pinch').set({\n      enable: true\n    });\n    mc.get('rotate').set({\n      enable: true\n    });\n    for (const eventName in this.overrides) {\n      mc.get(eventName).set(this.overrides[eventName]);\n    }\n    return mc;\n  }\n  static ɵfac = function HammerGestureConfig_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerGestureConfig)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HammerGestureConfig,\n    factory: HammerGestureConfig.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerGestureConfig, [{\n    type: Injectable\n  }], null, null);\n})();\n/**\n * Event plugin that adds Hammer support to an application.\n *\n * @ngModule HammerModule\n */\nclass HammerGesturesPlugin extends EventManagerPlugin {\n  _config;\n  console;\n  loader;\n  _loaderPromise = null;\n  constructor(doc, _config, console, loader) {\n    super(doc);\n    this._config = _config;\n    this.console = console;\n    this.loader = loader;\n  }\n  supports(eventName) {\n    if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n      return false;\n    }\n    if (!window.Hammer && !this.loader) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        this.console.warn(`The \"${eventName}\" event cannot be bound because Hammer.JS is not ` + `loaded and no custom loader has been specified.`);\n      }\n      return false;\n    }\n    return true;\n  }\n  addEventListener(element, eventName, handler) {\n    const zone = this.manager.getZone();\n    eventName = eventName.toLowerCase();\n    // If Hammer is not present but a loader is specified, we defer adding the event listener\n    // until Hammer is loaded.\n    if (!window.Hammer && this.loader) {\n      this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());\n      // This `addEventListener` method returns a function to remove the added listener.\n      // Until Hammer is loaded, the returned function needs to *cancel* the registration rather\n      // than remove anything.\n      let cancelRegistration = false;\n      let deregister = () => {\n        cancelRegistration = true;\n      };\n      zone.runOutsideAngular(() => this._loaderPromise.then(() => {\n        // If Hammer isn't actually loaded when the custom loader resolves, give up.\n        if (!window.Hammer) {\n          if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            this.console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n          }\n          deregister = () => {};\n          return;\n        }\n        if (!cancelRegistration) {\n          // Now that Hammer is loaded and the listener is being loaded for real,\n          // the deregistration function changes from canceling registration to\n          // removal.\n          deregister = this.addEventListener(element, eventName, handler);\n        }\n      }).catch(() => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          this.console.warn(`The \"${eventName}\" event cannot be bound because the custom ` + `Hammer.JS loader failed.`);\n        }\n        deregister = () => {};\n      }));\n      // Return a function that *executes* `deregister` (and not `deregister` itself) so that we\n      // can change the behavior of `deregister` once the listener is added. Using a closure in\n      // this way allows us to avoid any additional data structures to track listener removal.\n      return () => {\n        deregister();\n      };\n    }\n    return zone.runOutsideAngular(() => {\n      // Creating the manager bind events, must be done outside of angular\n      const mc = this._config.buildHammer(element);\n      const callback = function (eventObj) {\n        zone.runGuarded(function () {\n          handler(eventObj);\n        });\n      };\n      mc.on(eventName, callback);\n      return () => {\n        mc.off(eventName, callback);\n        // destroy mc to prevent memory leak\n        if (typeof mc.destroy === 'function') {\n          mc.destroy();\n        }\n      };\n    });\n  }\n  isCustomEvent(eventName) {\n    return this._config.events.indexOf(eventName) > -1;\n  }\n  static ɵfac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerGesturesPlugin)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(HAMMER_GESTURE_CONFIG), i0.ɵɵinject(i0.ɵConsole), i0.ɵɵinject(HAMMER_LOADER, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HammerGesturesPlugin,\n    factory: HammerGesturesPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerGesturesPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: HammerGestureConfig,\n    decorators: [{\n      type: Inject,\n      args: [HAMMER_GESTURE_CONFIG]\n    }]\n  }, {\n    type: i0.ɵConsole\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [HAMMER_LOADER]\n    }]\n  }], null);\n})();\n/**\n * Adds support for HammerJS.\n *\n * Import this module at the root of your application so that Angular can work with\n * HammerJS to detect gesture events.\n *\n * Note that applications still need to include the HammerJS script itself. This module\n * simply sets up the coordination layer between HammerJS and Angular's `EventManager`.\n *\n * @publicApi\n */\nclass HammerModule {\n  static ɵfac = function HammerModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HammerModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [{\n      provide: EVENT_MANAGER_PLUGINS,\n      useClass: HammerGesturesPlugin,\n      multi: true,\n      deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, ɵConsole, [new Optional(), HAMMER_LOADER]]\n    }, {\n      provide: HAMMER_GESTURE_CONFIG,\n      useClass: HammerGestureConfig,\n      deps: []\n    }]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerModule, [{\n    type: NgModule,\n    args: [{\n      providers: [{\n        provide: EVENT_MANAGER_PLUGINS,\n        useClass: HammerGesturesPlugin,\n        multi: true,\n        deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, ɵConsole, [new Optional(), HAMMER_LOADER]]\n      }, {\n        provide: HAMMER_GESTURE_CONFIG,\n        useClass: HammerGestureConfig,\n        deps: []\n      }]\n    }]\n  }], null, null);\n})();\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\nclass DomSanitizer {\n  static ɵfac = function DomSanitizer_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomSanitizer)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomSanitizer,\n    factory: function DomSanitizer_Factory(__ngFactoryType__) {\n      let __ngConditionalFactory__ = null;\n      if (__ngFactoryType__) {\n        __ngConditionalFactory__ = new (__ngFactoryType__ || DomSanitizer)();\n      } else {\n        __ngConditionalFactory__ = i0.ɵɵinject(DomSanitizerImpl);\n      }\n      return __ngConditionalFactory__;\n    },\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomSanitizer, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useExisting: forwardRef(() => DomSanitizerImpl)\n    }]\n  }], null, null);\n})();\nclass DomSanitizerImpl extends DomSanitizer {\n  _doc;\n  constructor(_doc) {\n    super();\n    this._doc = _doc;\n  }\n  sanitize(ctx, value) {\n    if (value == null) return null;\n    switch (ctx) {\n      case SecurityContext.NONE:\n        return value;\n      case SecurityContext.HTML:\n        if (ɵallowSanitizationBypassAndThrow(value, \"HTML\" /* BypassType.Html */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return ɵ_sanitizeHtml(this._doc, String(value)).toString();\n      case SecurityContext.STYLE:\n        if (ɵallowSanitizationBypassAndThrow(value, \"Style\" /* BypassType.Style */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return value;\n      case SecurityContext.SCRIPT:\n        if (ɵallowSanitizationBypassAndThrow(value, \"Script\" /* BypassType.Script */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        throw new ɵRuntimeError(5200 /* RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'unsafe value used in a script context');\n      case SecurityContext.URL:\n        if (ɵallowSanitizationBypassAndThrow(value, \"URL\" /* BypassType.Url */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return ɵ_sanitizeUrl(String(value));\n      case SecurityContext.RESOURCE_URL:\n        if (ɵallowSanitizationBypassAndThrow(value, \"ResourceURL\" /* BypassType.ResourceUrl */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        throw new ɵRuntimeError(5201 /* RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${ɵXSS_SECURITY_URL})`);\n      default:\n        throw new ɵRuntimeError(5202 /* RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${ɵXSS_SECURITY_URL})`);\n    }\n  }\n  bypassSecurityTrustHtml(value) {\n    return ɵbypassSanitizationTrustHtml(value);\n  }\n  bypassSecurityTrustStyle(value) {\n    return ɵbypassSanitizationTrustStyle(value);\n  }\n  bypassSecurityTrustScript(value) {\n    return ɵbypassSanitizationTrustScript(value);\n  }\n  bypassSecurityTrustUrl(value) {\n    return ɵbypassSanitizationTrustUrl(value);\n  }\n  bypassSecurityTrustResourceUrl(value) {\n    return ɵbypassSanitizationTrustResourceUrl(value);\n  }\n  static ɵfac = function DomSanitizerImpl_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomSanitizerImpl)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomSanitizerImpl,\n    factory: DomSanitizerImpl.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomSanitizerImpl, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nvar HydrationFeatureKind;\n(function (HydrationFeatureKind) {\n  HydrationFeatureKind[HydrationFeatureKind[\"NoHttpTransferCache\"] = 0] = \"NoHttpTransferCache\";\n  HydrationFeatureKind[HydrationFeatureKind[\"HttpTransferCacheOptions\"] = 1] = \"HttpTransferCacheOptions\";\n  HydrationFeatureKind[HydrationFeatureKind[\"I18nSupport\"] = 2] = \"I18nSupport\";\n  HydrationFeatureKind[HydrationFeatureKind[\"EventReplay\"] = 3] = \"EventReplay\";\n  HydrationFeatureKind[HydrationFeatureKind[\"IncrementalHydration\"] = 4] = \"IncrementalHydration\";\n})(HydrationFeatureKind || (HydrationFeatureKind = {}));\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature(ɵkind, ɵproviders = [], ɵoptions = {}) {\n  return {\n    ɵkind,\n    ɵproviders\n  };\n}\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @publicApi\n */\nfunction withNoHttpTransferCache() {\n  // This feature has no providers and acts as a flag that turns off\n  // HTTP transfer cache (which otherwise is turned on by default).\n  return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @publicApi\n */\nfunction withHttpTransferCacheOptions(options) {\n  // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n  return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, ɵwithHttpTransferCache(options));\n}\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @developerPreview\n * @publicApi\n */\nfunction withI18nSupport() {\n  return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nfunction withEventReplay() {\n  return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @experimental\n * @publicApi\n * @see {@link provideClientHydration}\n */\nfunction withIncrementalHydration() {\n  return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether compatible ZoneJS was used in an application\n * and logs a warning in a console if it's not the case.\n */\nfunction provideZoneJsCompatibilityDetector() {\n  return [{\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      const ngZone = inject(NgZone);\n      const isZoneless = inject(ɵZONELESS_ENABLED);\n      // Checking `ngZone instanceof NgZone` would be insufficient here,\n      // because custom implementations might use NgZone as a base class.\n      if (!isZoneless && ngZone.constructor !== NgZone) {\n        const console = inject(ɵConsole);\n        const message = ɵformatRuntimeError(-5000 /* RuntimeErrorCode.UNSUPPORTED_ZONEJS_INSTANCE */, 'Angular detected that hydration was enabled for an application ' + 'that uses a custom or a noop Zone.js implementation. ' + 'This is not yet a fully supported configuration.');\n        // tslint:disable-next-line:no-console\n        console.warn(message);\n      }\n    },\n    multi: true\n  }];\n}\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n *   declarations: [RootCmp],\n *   bootstrap: [RootCmp],\n *   providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n *\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi\n */\nfunction provideClientHydration(...features) {\n  const providers = [];\n  const featuresKind = new Set();\n  const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);\n  for (const {\n    ɵproviders,\n    ɵkind\n  } of features) {\n    featuresKind.add(ɵkind);\n    if (ɵproviders.length) {\n      providers.push(ɵproviders);\n    }\n  }\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n    // TODO: Make this a runtime error\n    throw new Error('Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.');\n  }\n  return makeEnvironmentProviders([typeof ngDevMode !== 'undefined' && ngDevMode ? provideZoneJsCompatibilityDetector() : [], ɵwithDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : ɵwithHttpTransferCache({}), providers]);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-browser package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserModule, By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManager, EventManagerPlugin, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, HydrationFeatureKind, Meta, REMOVE_STYLES_ON_COMPONENT_DESTROY, Title, VERSION, bootstrapApplication, createApplication, disableDebugTools, enableDebugTools, platformBrowser, provideClientHydration, provideProtractorTestingSupport, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserGetTestability as ɵBrowserGetTestability, DomEventsPlugin as ɵDomEventsPlugin, DomRendererFactory2 as ɵDomRendererFactory2, DomSanitizerImpl as ɵDomSanitizerImpl, HammerGesturesPlugin as ɵHammerGesturesPlugin, INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, KeyEventsPlugin as ɵKeyEventsPlugin, SharedStylesHost as ɵSharedStylesHost, initDomAdapter as ɵinitDomAdapter };\n"],
-  "mappings": "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",
-  "names": ["window", "isAbsoluteUrl", "NumberFormatStyle", "Plural", "FormStyle", "TranslationWidth", "FormatWidth", "WeekDay", "getLocalePluralCase", "ZoneWidth", "DateType", "TranslationType", "value", "from", "carry", "digits", "getLocalePluralCase", "klass", "document", "window", "ngZone", "value", "map", "base", "headers", "params", "HttpEventType", "HttpStatusCode", "req", "document", "HttpFeatureKind", "plugin", "elem", "console", "HydrationFeatureKind", "withI18nSupport", "withEventReplay", "withIncrementalHydration", "VERSION"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-GZKEX4RU.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-GZKEX4RU.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,29700 +1,0 @@
-var __defProp = Object.defineProperty;
-var __defProps = Object.defineProperties;
-var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols = Object.getOwnPropertySymbols;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __propIsEnum = Object.prototype.propertyIsEnumerable;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues = (a, b) => {
-  for (var prop in b ||= {})
-    if (__hasOwnProp.call(b, prop))
-      __defNormalProp(a, prop, b[prop]);
-  if (__getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(b)) {
-      if (__propIsEnum.call(b, prop))
-        __defNormalProp(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
-var __objRest = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-var __async = (__this, __arguments, generator) => {
-  return new Promise((resolve, reject) => {
-    var fulfilled = (value) => {
-      try {
-        step(generator.next(value));
-      } catch (e) {
-        reject(e);
-      }
-    };
-    var rejected = (value) => {
-      try {
-        step(generator.throw(value));
-      } catch (e) {
-        reject(e);
-      }
-    };
-    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
-    step((generator = generator.apply(__this, __arguments)).next());
-  });
-};
-
-// node_modules/@angular/core/fesm2022/primitives/signals.mjs
-function defaultEquals(a, b) {
-  return Object.is(a, b);
-}
-var activeConsumer = null;
-var inNotificationPhase = false;
-var epoch = 1;
-var SIGNAL = Symbol("SIGNAL");
-function setActiveConsumer(consumer) {
-  const prev = activeConsumer;
-  activeConsumer = consumer;
-  return prev;
-}
-function getActiveConsumer() {
-  return activeConsumer;
-}
-function isInNotificationPhase() {
-  return inNotificationPhase;
-}
-var REACTIVE_NODE = {
-  version: 0,
-  lastCleanEpoch: 0,
-  dirty: false,
-  producerNode: void 0,
-  producerLastReadVersion: void 0,
-  producerIndexOfThis: void 0,
-  nextProducerIndex: 0,
-  liveConsumerNode: void 0,
-  liveConsumerIndexOfThis: void 0,
-  consumerAllowSignalWrites: false,
-  consumerIsAlwaysLive: false,
-  producerMustRecompute: () => false,
-  producerRecomputeValue: () => {
-  },
-  consumerMarkedDirty: () => {
-  },
-  consumerOnSignalRead: () => {
-  }
-};
-function producerAccessed(node) {
-  if (inNotificationPhase) {
-    throw new Error(typeof ngDevMode !== "undefined" && ngDevMode ? `Assertion error: signal read during notification phase` : "");
-  }
-  if (activeConsumer === null) {
-    return;
-  }
-  activeConsumer.consumerOnSignalRead(node);
-  const idx = activeConsumer.nextProducerIndex++;
-  assertConsumerNode(activeConsumer);
-  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
-    if (consumerIsLive(activeConsumer)) {
-      const staleProducer = activeConsumer.producerNode[idx];
-      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
-    }
-  }
-  if (activeConsumer.producerNode[idx] !== node) {
-    activeConsumer.producerNode[idx] = node;
-    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;
-  }
-  activeConsumer.producerLastReadVersion[idx] = node.version;
-}
-function producerIncrementEpoch() {
-  epoch++;
-}
-function producerUpdateValueVersion(node) {
-  if (consumerIsLive(node) && !node.dirty) {
-    return;
-  }
-  if (!node.dirty && node.lastCleanEpoch === epoch) {
-    return;
-  }
-  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
-    producerMarkClean(node);
-    return;
-  }
-  node.producerRecomputeValue(node);
-  producerMarkClean(node);
-}
-function producerNotifyConsumers(node) {
-  if (node.liveConsumerNode === void 0) {
-    return;
-  }
-  const prev = inNotificationPhase;
-  inNotificationPhase = true;
-  try {
-    for (const consumer of node.liveConsumerNode) {
-      if (!consumer.dirty) {
-        consumerMarkDirty(consumer);
-      }
-    }
-  } finally {
-    inNotificationPhase = prev;
-  }
-}
-function producerUpdatesAllowed() {
-  return activeConsumer?.consumerAllowSignalWrites !== false;
-}
-function consumerMarkDirty(node) {
-  node.dirty = true;
-  producerNotifyConsumers(node);
-  node.consumerMarkedDirty?.(node);
-}
-function producerMarkClean(node) {
-  node.dirty = false;
-  node.lastCleanEpoch = epoch;
-}
-function consumerBeforeComputation(node) {
-  node && (node.nextProducerIndex = 0);
-  return setActiveConsumer(node);
-}
-function consumerAfterComputation(node, prevConsumer) {
-  setActiveConsumer(prevConsumer);
-  if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {
-    return;
-  }
-  if (consumerIsLive(node)) {
-    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  while (node.producerNode.length > node.nextProducerIndex) {
-    node.producerNode.pop();
-    node.producerLastReadVersion.pop();
-    node.producerIndexOfThis.pop();
-  }
-}
-function consumerPollProducersForChange(node) {
-  assertConsumerNode(node);
-  for (let i = 0; i < node.producerNode.length; i++) {
-    const producer = node.producerNode[i];
-    const seenVersion = node.producerLastReadVersion[i];
-    if (seenVersion !== producer.version) {
-      return true;
-    }
-    producerUpdateValueVersion(producer);
-    if (seenVersion !== producer.version) {
-      return true;
-    }
-  }
-  return false;
-}
-function consumerDestroy(node) {
-  assertConsumerNode(node);
-  if (consumerIsLive(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;
-  if (node.liveConsumerNode) {
-    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
-  }
-}
-function producerAddLiveConsumer(node, consumer, indexOfThis) {
-  assertProducerNode(node);
-  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
-    }
-  }
-  node.liveConsumerIndexOfThis.push(indexOfThis);
-  return node.liveConsumerNode.push(consumer) - 1;
-}
-function producerRemoveLiveConsumerAtIndex(node, idx) {
-  assertProducerNode(node);
-  if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) {
-    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
-  }
-  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  const lastIdx = node.liveConsumerNode.length - 1;
-  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
-  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
-  node.liveConsumerNode.length--;
-  node.liveConsumerIndexOfThis.length--;
-  if (idx < node.liveConsumerNode.length) {
-    const idxProducer = node.liveConsumerIndexOfThis[idx];
-    const consumer = node.liveConsumerNode[idx];
-    assertConsumerNode(consumer);
-    consumer.producerIndexOfThis[idxProducer] = idx;
-  }
-}
-function consumerIsLive(node) {
-  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
-}
-function assertConsumerNode(node) {
-  node.producerNode ??= [];
-  node.producerIndexOfThis ??= [];
-  node.producerLastReadVersion ??= [];
-}
-function assertProducerNode(node) {
-  node.liveConsumerNode ??= [];
-  node.liveConsumerIndexOfThis ??= [];
-}
-function isConsumerNode(node) {
-  return node.producerNode !== void 0;
-}
-function createComputed(computation) {
-  const node = Object.create(COMPUTED_NODE);
-  node.computation = computation;
-  const computed2 = () => {
-    producerUpdateValueVersion(node);
-    producerAccessed(node);
-    if (node.value === ERRORED) {
-      throw node.error;
-    }
-    return node.value;
-  };
-  computed2[SIGNAL] = node;
-  return computed2;
-}
-var UNSET = Symbol("UNSET");
-var COMPUTING = Symbol("COMPUTING");
-var ERRORED = Symbol("ERRORED");
-var COMPUTED_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    value: UNSET,
-    dirty: true,
-    error: null,
-    equal: defaultEquals,
-    producerMustRecompute(node) {
-      return node.value === UNSET || node.value === COMPUTING;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING;
-      const prevConsumer = consumerBeforeComputation(node);
-      let newValue;
-      try {
-        newValue = node.computation();
-      } catch (err) {
-        newValue = ERRORED;
-        node.error = err;
-      } finally {
-        consumerAfterComputation(node, prevConsumer);
-      }
-      if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-function defaultThrowError() {
-  throw new Error();
-}
-var throwInvalidWriteToSignalErrorFn = defaultThrowError;
-function throwInvalidWriteToSignalError() {
-  throwInvalidWriteToSignalErrorFn();
-}
-function setThrowInvalidWriteToSignalError(fn) {
-  throwInvalidWriteToSignalErrorFn = fn;
-}
-var postSignalSetFn = null;
-function createSignal(initialValue) {
-  const node = Object.create(SIGNAL_NODE);
-  node.value = initialValue;
-  const getter = () => {
-    producerAccessed(node);
-    return node.value;
-  };
-  getter[SIGNAL] = node;
-  return getter;
-}
-function signalSetFn(node, newValue) {
-  if (!producerUpdatesAllowed()) {
-    throwInvalidWriteToSignalError();
-  }
-  if (!node.equal(node.value, newValue)) {
-    node.value = newValue;
-    signalValueChanged(node);
-  }
-}
-function signalUpdateFn(node, updater) {
-  if (!producerUpdatesAllowed()) {
-    throwInvalidWriteToSignalError();
-  }
-  signalSetFn(node, updater(node.value));
-}
-var SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    equal: defaultEquals,
-    value: void 0
-  });
-})();
-function signalValueChanged(node) {
-  node.version++;
-  producerIncrementEpoch();
-  producerNotifyConsumers(node);
-  postSignalSetFn?.();
-}
-function createWatch(fn, schedule, allowSignalWrites) {
-  const node = Object.create(WATCH_NODE);
-  if (allowSignalWrites) {
-    node.consumerAllowSignalWrites = true;
-  }
-  node.fn = fn;
-  node.schedule = schedule;
-  const registerOnCleanup = (cleanupFn) => {
-    node.cleanupFn = cleanupFn;
-  };
-  function isWatchNodeDestroyed(node2) {
-    return node2.fn === null && node2.schedule === null;
-  }
-  function destroyWatchNode(node2) {
-    if (!isWatchNodeDestroyed(node2)) {
-      consumerDestroy(node2);
-      node2.cleanupFn();
-      node2.fn = null;
-      node2.schedule = null;
-      node2.cleanupFn = NOOP_CLEANUP_FN;
-    }
-  }
-  const run = () => {
-    if (node.fn === null) {
-      return;
-    }
-    if (isInNotificationPhase()) {
-      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
-    }
-    node.dirty = false;
-    if (node.hasRun && !consumerPollProducersForChange(node)) {
-      return;
-    }
-    node.hasRun = true;
-    const prevConsumer = consumerBeforeComputation(node);
-    try {
-      node.cleanupFn();
-      node.cleanupFn = NOOP_CLEANUP_FN;
-      node.fn(registerOnCleanup);
-    } finally {
-      consumerAfterComputation(node, prevConsumer);
-    }
-  };
-  node.ref = {
-    notify: () => consumerMarkDirty(node),
-    run,
-    cleanup: () => node.cleanupFn(),
-    destroy: () => destroyWatchNode(node),
-    [SIGNAL]: node
-  };
-  return node.ref;
-}
-var NOOP_CLEANUP_FN = () => {
-};
-var WATCH_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    consumerIsAlwaysLive: true,
-    consumerAllowSignalWrites: false,
-    consumerMarkedDirty: (node) => {
-      if (node.schedule !== null) {
-        node.schedule(node.ref);
-      }
-    },
-    hasRun: false,
-    cleanupFn: NOOP_CLEANUP_FN
-  });
-})();
-
-// node_modules/tslib/tslib.es6.mjs
-var extendStatics = function(d, b) {
-  extendStatics = Object.setPrototypeOf || {
-    __proto__: []
-  } instanceof Array && function(d2, b2) {
-    d2.__proto__ = b2;
-  } || function(d2, b2) {
-    for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-  };
-  return extendStatics(d, b);
-};
-function __extends(d, b) {
-  if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-  extendStatics(d, b);
-  function __() {
-    this.constructor = d;
-  }
-  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-function __awaiter(thisArg, _arguments, P, generator) {
-  function adopt(value) {
-    return value instanceof P ? value : new P(function(resolve) {
-      resolve(value);
-    });
-  }
-  return new (P || (P = Promise))(function(resolve, reject) {
-    function fulfilled(value) {
-      try {
-        step(generator.next(value));
-      } catch (e) {
-        reject(e);
-      }
-    }
-    function rejected(value) {
-      try {
-        step(generator["throw"](value));
-      } catch (e) {
-        reject(e);
-      }
-    }
-    function step(result) {
-      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
-    }
-    step((generator = generator.apply(thisArg, _arguments || [])).next());
-  });
-}
-function __generator(thisArg, body) {
-  var _ = {
-    label: 0,
-    sent: function() {
-      if (t[0] & 1) throw t[1];
-      return t[1];
-    },
-    trys: [],
-    ops: []
-  }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
-  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
-    return this;
-  }), g;
-  function verb(n) {
-    return function(v) {
-      return step([n, v]);
-    };
-  }
-  function step(op) {
-    if (f) throw new TypeError("Generator is already executing.");
-    while (g && (g = 0, op[0] && (_ = 0)), _) try {
-      if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
-      if (y = 0, t) op = [op[0] & 2, t.value];
-      switch (op[0]) {
-        case 0:
-        case 1:
-          t = op;
-          break;
-        case 4:
-          _.label++;
-          return {
-            value: op[1],
-            done: false
-          };
-        case 5:
-          _.label++;
-          y = op[1];
-          op = [0];
-          continue;
-        case 7:
-          op = _.ops.pop();
-          _.trys.pop();
-          continue;
-        default:
-          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
-            _ = 0;
-            continue;
-          }
-          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
-            _.label = op[1];
-            break;
-          }
-          if (op[0] === 6 && _.label < t[1]) {
-            _.label = t[1];
-            t = op;
-            break;
-          }
-          if (t && _.label < t[2]) {
-            _.label = t[2];
-            _.ops.push(op);
-            break;
-          }
-          if (t[2]) _.ops.pop();
-          _.trys.pop();
-          continue;
-      }
-      op = body.call(thisArg, _);
-    } catch (e) {
-      op = [6, e];
-      y = 0;
-    } finally {
-      f = t = 0;
-    }
-    if (op[0] & 5) throw op[1];
-    return {
-      value: op[0] ? op[1] : void 0,
-      done: true
-    };
-  }
-}
-function __values(o) {
-  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-function __read(o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o), r, ar = [], e;
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-  } catch (error) {
-    e = {
-      error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-  return ar;
-}
-function __spreadArray(to, from2, pack) {
-  if (pack || arguments.length === 2) for (var i = 0, l = from2.length, ar; i < l; i++) {
-    if (ar || !(i in from2)) {
-      if (!ar) ar = Array.prototype.slice.call(from2, 0, i);
-      ar[i] = from2[i];
-    }
-  }
-  return to.concat(ar || Array.prototype.slice.call(from2));
-}
-function __await(v) {
-  return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-function __asyncGenerator(thisArg, _arguments, generator) {
-  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-  var g = generator.apply(thisArg, _arguments || []), i, q = [];
-  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
-    return this;
-  }, i;
-  function awaitReturn(f) {
-    return function(v) {
-      return Promise.resolve(v).then(f, reject);
-    };
-  }
-  function verb(n, f) {
-    if (g[n]) {
-      i[n] = function(v) {
-        return new Promise(function(a, b) {
-          q.push([n, v, a, b]) > 1 || resume(n, v);
-        });
-      };
-      if (f) i[n] = f(i[n]);
-    }
-  }
-  function resume(n, v) {
-    try {
-      step(g[n](v));
-    } catch (e) {
-      settle(q[0][3], e);
-    }
-  }
-  function step(r) {
-    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
-  }
-  function fulfill(value) {
-    resume("next", value);
-  }
-  function reject(value) {
-    resume("throw", value);
-  }
-  function settle(f, v) {
-    if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
-  }
-}
-function __asyncValues(o) {
-  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-  var m = o[Symbol.asyncIterator], i;
-  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
-    return this;
-  }, i);
-  function verb(n) {
-    i[n] = o[n] && function(v) {
-      return new Promise(function(resolve, reject) {
-        v = o[n](v), settle(resolve, reject, v.done, v.value);
-      });
-    };
-  }
-  function settle(resolve, reject, d, v) {
-    Promise.resolve(v).then(function(v2) {
-      resolve({
-        value: v2,
-        done: d
-      });
-    }, reject);
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isFunction.js
-function isFunction(value) {
-  return typeof value === "function";
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js
-function createErrorClass(createImpl) {
-  var _super = function(instance) {
-    Error.call(instance);
-    instance.stack = new Error().stack;
-  };
-  var ctorFunc = createImpl(_super);
-  ctorFunc.prototype = Object.create(Error.prototype);
-  ctorFunc.prototype.constructor = ctorFunc;
-  return ctorFunc;
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js
-var UnsubscriptionError = createErrorClass(function(_super) {
-  return function UnsubscriptionErrorImpl(errors) {
-    _super(this);
-    this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) {
-      return i + 1 + ") " + err.toString();
-    }).join("\n  ") : "";
-    this.name = "UnsubscriptionError";
-    this.errors = errors;
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/util/arrRemove.js
-function arrRemove(arr, item) {
-  if (arr) {
-    var index = arr.indexOf(item);
-    0 <= index && arr.splice(index, 1);
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/Subscription.js
-var Subscription = function() {
-  function Subscription2(initialTeardown) {
-    this.initialTeardown = initialTeardown;
-    this.closed = false;
-    this._parentage = null;
-    this._finalizers = null;
-  }
-  Subscription2.prototype.unsubscribe = function() {
-    var e_1, _a, e_2, _b;
-    var errors;
-    if (!this.closed) {
-      this.closed = true;
-      var _parentage = this._parentage;
-      if (_parentage) {
-        this._parentage = null;
-        if (Array.isArray(_parentage)) {
-          try {
-            for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
-              var parent_1 = _parentage_1_1.value;
-              parent_1.remove(this);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-        } else {
-          _parentage.remove(this);
-        }
-      }
-      var initialFinalizer = this.initialTeardown;
-      if (isFunction(initialFinalizer)) {
-        try {
-          initialFinalizer();
-        } catch (e) {
-          errors = e instanceof UnsubscriptionError ? e.errors : [e];
-        }
-      }
-      var _finalizers = this._finalizers;
-      if (_finalizers) {
-        this._finalizers = null;
-        try {
-          for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
-            var finalizer = _finalizers_1_1.value;
-            try {
-              execFinalizer(finalizer);
-            } catch (err) {
-              errors = errors !== null && errors !== void 0 ? errors : [];
-              if (err instanceof UnsubscriptionError) {
-                errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
-              } else {
-                errors.push(err);
-              }
-            }
-          }
-        } catch (e_2_1) {
-          e_2 = {
-            error: e_2_1
-          };
-        } finally {
-          try {
-            if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);
-          } finally {
-            if (e_2) throw e_2.error;
-          }
-        }
-      }
-      if (errors) {
-        throw new UnsubscriptionError(errors);
-      }
-    }
-  };
-  Subscription2.prototype.add = function(teardown) {
-    var _a;
-    if (teardown && teardown !== this) {
-      if (this.closed) {
-        execFinalizer(teardown);
-      } else {
-        if (teardown instanceof Subscription2) {
-          if (teardown.closed || teardown._hasParent(this)) {
-            return;
-          }
-          teardown._addParent(this);
-        }
-        (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);
-      }
-    }
-  };
-  Subscription2.prototype._hasParent = function(parent) {
-    var _parentage = this._parentage;
-    return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
-  };
-  Subscription2.prototype._addParent = function(parent) {
-    var _parentage = this._parentage;
-    this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
-  };
-  Subscription2.prototype._removeParent = function(parent) {
-    var _parentage = this._parentage;
-    if (_parentage === parent) {
-      this._parentage = null;
-    } else if (Array.isArray(_parentage)) {
-      arrRemove(_parentage, parent);
-    }
-  };
-  Subscription2.prototype.remove = function(teardown) {
-    var _finalizers = this._finalizers;
-    _finalizers && arrRemove(_finalizers, teardown);
-    if (teardown instanceof Subscription2) {
-      teardown._removeParent(this);
-    }
-  };
-  Subscription2.EMPTY = function() {
-    var empty2 = new Subscription2();
-    empty2.closed = true;
-    return empty2;
-  }();
-  return Subscription2;
-}();
-var EMPTY_SUBSCRIPTION = Subscription.EMPTY;
-function isSubscription(value) {
-  return value instanceof Subscription || value && "closed" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);
-}
-function execFinalizer(finalizer) {
-  if (isFunction(finalizer)) {
-    finalizer();
-  } else {
-    finalizer.unsubscribe();
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/config.js
-var config = {
-  onUnhandledError: null,
-  onStoppedNotification: null,
-  Promise: void 0,
-  useDeprecatedSynchronousErrorHandling: false,
-  useDeprecatedNextContext: false
-};
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js
-var timeoutProvider = {
-  setTimeout: function(handler, timeout2) {
-    var args = [];
-    for (var _i = 2; _i < arguments.length; _i++) {
-      args[_i - 2] = arguments[_i];
-    }
-    var delegate = timeoutProvider.delegate;
-    if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {
-      return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout2], __read(args)));
-    }
-    return setTimeout.apply(void 0, __spreadArray([handler, timeout2], __read(args)));
-  },
-  clearTimeout: function(handle) {
-    var delegate = timeoutProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js
-function reportUnhandledError(err) {
-  timeoutProvider.setTimeout(function() {
-    var onUnhandledError = config.onUnhandledError;
-    if (onUnhandledError) {
-      onUnhandledError(err);
-    } else {
-      throw err;
-    }
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/noop.js
-function noop() {
-}
-
-// node_modules/rxjs/dist/esm5/internal/NotificationFactories.js
-var COMPLETE_NOTIFICATION = function() {
-  return createNotification("C", void 0, void 0);
-}();
-function errorNotification(error) {
-  return createNotification("E", void 0, error);
-}
-function nextNotification(value) {
-  return createNotification("N", value, void 0);
-}
-function createNotification(kind, value, error) {
-  return {
-    kind,
-    value,
-    error
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/errorContext.js
-var context = null;
-function errorContext(cb) {
-  if (config.useDeprecatedSynchronousErrorHandling) {
-    var isRoot = !context;
-    if (isRoot) {
-      context = {
-        errorThrown: false,
-        error: null
-      };
-    }
-    cb();
-    if (isRoot) {
-      var _a = context, errorThrown = _a.errorThrown, error = _a.error;
-      context = null;
-      if (errorThrown) {
-        throw error;
-      }
-    }
-  } else {
-    cb();
-  }
-}
-function captureError(err) {
-  if (config.useDeprecatedSynchronousErrorHandling && context) {
-    context.errorThrown = true;
-    context.error = err;
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/Subscriber.js
-var Subscriber = function(_super) {
-  __extends(Subscriber2, _super);
-  function Subscriber2(destination) {
-    var _this = _super.call(this) || this;
-    _this.isStopped = false;
-    if (destination) {
-      _this.destination = destination;
-      if (isSubscription(destination)) {
-        destination.add(_this);
-      }
-    } else {
-      _this.destination = EMPTY_OBSERVER;
-    }
-    return _this;
-  }
-  Subscriber2.create = function(next, error, complete) {
-    return new SafeSubscriber(next, error, complete);
-  };
-  Subscriber2.prototype.next = function(value) {
-    if (this.isStopped) {
-      handleStoppedNotification(nextNotification(value), this);
-    } else {
-      this._next(value);
-    }
-  };
-  Subscriber2.prototype.error = function(err) {
-    if (this.isStopped) {
-      handleStoppedNotification(errorNotification(err), this);
-    } else {
-      this.isStopped = true;
-      this._error(err);
-    }
-  };
-  Subscriber2.prototype.complete = function() {
-    if (this.isStopped) {
-      handleStoppedNotification(COMPLETE_NOTIFICATION, this);
-    } else {
-      this.isStopped = true;
-      this._complete();
-    }
-  };
-  Subscriber2.prototype.unsubscribe = function() {
-    if (!this.closed) {
-      this.isStopped = true;
-      _super.prototype.unsubscribe.call(this);
-      this.destination = null;
-    }
-  };
-  Subscriber2.prototype._next = function(value) {
-    this.destination.next(value);
-  };
-  Subscriber2.prototype._error = function(err) {
-    try {
-      this.destination.error(err);
-    } finally {
-      this.unsubscribe();
-    }
-  };
-  Subscriber2.prototype._complete = function() {
-    try {
-      this.destination.complete();
-    } finally {
-      this.unsubscribe();
-    }
-  };
-  return Subscriber2;
-}(Subscription);
-var _bind = Function.prototype.bind;
-function bind(fn, thisArg) {
-  return _bind.call(fn, thisArg);
-}
-var ConsumerObserver = function() {
-  function ConsumerObserver2(partialObserver) {
-    this.partialObserver = partialObserver;
-  }
-  ConsumerObserver2.prototype.next = function(value) {
-    var partialObserver = this.partialObserver;
-    if (partialObserver.next) {
-      try {
-        partialObserver.next(value);
-      } catch (error) {
-        handleUnhandledError(error);
-      }
-    }
-  };
-  ConsumerObserver2.prototype.error = function(err) {
-    var partialObserver = this.partialObserver;
-    if (partialObserver.error) {
-      try {
-        partialObserver.error(err);
-      } catch (error) {
-        handleUnhandledError(error);
-      }
-    } else {
-      handleUnhandledError(err);
-    }
-  };
-  ConsumerObserver2.prototype.complete = function() {
-    var partialObserver = this.partialObserver;
-    if (partialObserver.complete) {
-      try {
-        partialObserver.complete();
-      } catch (error) {
-        handleUnhandledError(error);
-      }
-    }
-  };
-  return ConsumerObserver2;
-}();
-var SafeSubscriber = function(_super) {
-  __extends(SafeSubscriber2, _super);
-  function SafeSubscriber2(observerOrNext, error, complete) {
-    var _this = _super.call(this) || this;
-    var partialObserver;
-    if (isFunction(observerOrNext) || !observerOrNext) {
-      partialObserver = {
-        next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0,
-        error: error !== null && error !== void 0 ? error : void 0,
-        complete: complete !== null && complete !== void 0 ? complete : void 0
-      };
-    } else {
-      var context_1;
-      if (_this && config.useDeprecatedNextContext) {
-        context_1 = Object.create(observerOrNext);
-        context_1.unsubscribe = function() {
-          return _this.unsubscribe();
-        };
-        partialObserver = {
-          next: observerOrNext.next && bind(observerOrNext.next, context_1),
-          error: observerOrNext.error && bind(observerOrNext.error, context_1),
-          complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)
-        };
-      } else {
-        partialObserver = observerOrNext;
-      }
-    }
-    _this.destination = new ConsumerObserver(partialObserver);
-    return _this;
-  }
-  return SafeSubscriber2;
-}(Subscriber);
-function handleUnhandledError(error) {
-  if (config.useDeprecatedSynchronousErrorHandling) {
-    captureError(error);
-  } else {
-    reportUnhandledError(error);
-  }
-}
-function defaultErrorHandler(err) {
-  throw err;
-}
-function handleStoppedNotification(notification, subscriber) {
-  var onStoppedNotification = config.onStoppedNotification;
-  onStoppedNotification && timeoutProvider.setTimeout(function() {
-    return onStoppedNotification(notification, subscriber);
-  });
-}
-var EMPTY_OBSERVER = {
-  closed: true,
-  next: noop,
-  error: defaultErrorHandler,
-  complete: noop
-};
-
-// node_modules/rxjs/dist/esm5/internal/symbol/observable.js
-var observable = function() {
-  return typeof Symbol === "function" && Symbol.observable || "@@observable";
-}();
-
-// node_modules/rxjs/dist/esm5/internal/util/identity.js
-function identity(x) {
-  return x;
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/pipe.js
-function pipe() {
-  var fns = [];
-  for (var _i = 0; _i < arguments.length; _i++) {
-    fns[_i] = arguments[_i];
-  }
-  return pipeFromArray(fns);
-}
-function pipeFromArray(fns) {
-  if (fns.length === 0) {
-    return identity;
-  }
-  if (fns.length === 1) {
-    return fns[0];
-  }
-  return function piped(input2) {
-    return fns.reduce(function(prev, fn) {
-      return fn(prev);
-    }, input2);
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/Observable.js
-var Observable = function() {
-  function Observable2(subscribe) {
-    if (subscribe) {
-      this._subscribe = subscribe;
-    }
-  }
-  Observable2.prototype.lift = function(operator) {
-    var observable2 = new Observable2();
-    observable2.source = this;
-    observable2.operator = operator;
-    return observable2;
-  };
-  Observable2.prototype.subscribe = function(observerOrNext, error, complete) {
-    var _this = this;
-    var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
-    errorContext(function() {
-      var _a = _this, operator = _a.operator, source = _a.source;
-      subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
-    });
-    return subscriber;
-  };
-  Observable2.prototype._trySubscribe = function(sink) {
-    try {
-      return this._subscribe(sink);
-    } catch (err) {
-      sink.error(err);
-    }
-  };
-  Observable2.prototype.forEach = function(next, promiseCtor) {
-    var _this = this;
-    promiseCtor = getPromiseCtor(promiseCtor);
-    return new promiseCtor(function(resolve, reject) {
-      var subscriber = new SafeSubscriber({
-        next: function(value) {
-          try {
-            next(value);
-          } catch (err) {
-            reject(err);
-            subscriber.unsubscribe();
-          }
-        },
-        error: reject,
-        complete: resolve
-      });
-      _this.subscribe(subscriber);
-    });
-  };
-  Observable2.prototype._subscribe = function(subscriber) {
-    var _a;
-    return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);
-  };
-  Observable2.prototype[observable] = function() {
-    return this;
-  };
-  Observable2.prototype.pipe = function() {
-    var operations = [];
-    for (var _i = 0; _i < arguments.length; _i++) {
-      operations[_i] = arguments[_i];
-    }
-    return pipeFromArray(operations)(this);
-  };
-  Observable2.prototype.toPromise = function(promiseCtor) {
-    var _this = this;
-    promiseCtor = getPromiseCtor(promiseCtor);
-    return new promiseCtor(function(resolve, reject) {
-      var value;
-      _this.subscribe(function(x) {
-        return value = x;
-      }, function(err) {
-        return reject(err);
-      }, function() {
-        return resolve(value);
-      });
-    });
-  };
-  Observable2.create = function(subscribe) {
-    return new Observable2(subscribe);
-  };
-  return Observable2;
-}();
-function getPromiseCtor(promiseCtor) {
-  var _a;
-  return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;
-}
-function isObserver(value) {
-  return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);
-}
-function isSubscriber(value) {
-  return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/lift.js
-function hasLift(source) {
-  return isFunction(source === null || source === void 0 ? void 0 : source.lift);
-}
-function operate(init) {
-  return function(source) {
-    if (hasLift(source)) {
-      return source.lift(function(liftedSource) {
-        try {
-          return init(liftedSource, this);
-        } catch (err) {
-          this.error(err);
-        }
-      });
-    }
-    throw new TypeError("Unable to lift unknown Observable type");
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js
-function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
-  return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
-}
-var OperatorSubscriber = function(_super) {
-  __extends(OperatorSubscriber2, _super);
-  function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
-    var _this = _super.call(this, destination) || this;
-    _this.onFinalize = onFinalize;
-    _this.shouldUnsubscribe = shouldUnsubscribe;
-    _this._next = onNext ? function(value) {
-      try {
-        onNext(value);
-      } catch (err) {
-        destination.error(err);
-      }
-    } : _super.prototype._next;
-    _this._error = onError ? function(err) {
-      try {
-        onError(err);
-      } catch (err2) {
-        destination.error(err2);
-      } finally {
-        this.unsubscribe();
-      }
-    } : _super.prototype._error;
-    _this._complete = onComplete ? function() {
-      try {
-        onComplete();
-      } catch (err) {
-        destination.error(err);
-      } finally {
-        this.unsubscribe();
-      }
-    } : _super.prototype._complete;
-    return _this;
-  }
-  OperatorSubscriber2.prototype.unsubscribe = function() {
-    var _a;
-    if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
-      var closed_1 = this.closed;
-      _super.prototype.unsubscribe.call(this);
-      !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));
-    }
-  };
-  return OperatorSubscriber2;
-}(Subscriber);
-
-// node_modules/rxjs/dist/esm5/internal/operators/refCount.js
-function refCount() {
-  return operate(function(source, subscriber) {
-    var connection = null;
-    source._refCount++;
-    var refCounter = createOperatorSubscriber(subscriber, void 0, void 0, void 0, function() {
-      if (!source || source._refCount <= 0 || 0 < --source._refCount) {
-        connection = null;
-        return;
-      }
-      var sharedConnection = source._connection;
-      var conn = connection;
-      connection = null;
-      if (sharedConnection && (!conn || sharedConnection === conn)) {
-        sharedConnection.unsubscribe();
-      }
-      subscriber.unsubscribe();
-    });
-    source.subscribe(refCounter);
-    if (!refCounter.closed) {
-      connection = source.connect();
-    }
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/ConnectableObservable.js
-var ConnectableObservable = function(_super) {
-  __extends(ConnectableObservable2, _super);
-  function ConnectableObservable2(source, subjectFactory) {
-    var _this = _super.call(this) || this;
-    _this.source = source;
-    _this.subjectFactory = subjectFactory;
-    _this._subject = null;
-    _this._refCount = 0;
-    _this._connection = null;
-    if (hasLift(source)) {
-      _this.lift = source.lift;
-    }
-    return _this;
-  }
-  ConnectableObservable2.prototype._subscribe = function(subscriber) {
-    return this.getSubject().subscribe(subscriber);
-  };
-  ConnectableObservable2.prototype.getSubject = function() {
-    var subject = this._subject;
-    if (!subject || subject.isStopped) {
-      this._subject = this.subjectFactory();
-    }
-    return this._subject;
-  };
-  ConnectableObservable2.prototype._teardown = function() {
-    this._refCount = 0;
-    var _connection = this._connection;
-    this._subject = this._connection = null;
-    _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe();
-  };
-  ConnectableObservable2.prototype.connect = function() {
-    var _this = this;
-    var connection = this._connection;
-    if (!connection) {
-      connection = this._connection = new Subscription();
-      var subject_1 = this.getSubject();
-      connection.add(this.source.subscribe(createOperatorSubscriber(subject_1, void 0, function() {
-        _this._teardown();
-        subject_1.complete();
-      }, function(err) {
-        _this._teardown();
-        subject_1.error(err);
-      }, function() {
-        return _this._teardown();
-      })));
-      if (connection.closed) {
-        this._connection = null;
-        connection = Subscription.EMPTY;
-      }
-    }
-    return connection;
-  };
-  ConnectableObservable2.prototype.refCount = function() {
-    return refCount()(this);
-  };
-  return ConnectableObservable2;
-}(Observable);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/performanceTimestampProvider.js
-var performanceTimestampProvider = {
-  now: function() {
-    return (performanceTimestampProvider.delegate || performance).now();
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/animationFrameProvider.js
-var animationFrameProvider = {
-  schedule: function(callback) {
-    var request = requestAnimationFrame;
-    var cancel = cancelAnimationFrame;
-    var delegate = animationFrameProvider.delegate;
-    if (delegate) {
-      request = delegate.requestAnimationFrame;
-      cancel = delegate.cancelAnimationFrame;
-    }
-    var handle = request(function(timestamp2) {
-      cancel = void 0;
-      callback(timestamp2);
-    });
-    return new Subscription(function() {
-      return cancel === null || cancel === void 0 ? void 0 : cancel(handle);
-    });
-  },
-  requestAnimationFrame: function() {
-    var args = [];
-    for (var _i = 0; _i < arguments.length; _i++) {
-      args[_i] = arguments[_i];
-    }
-    var delegate = animationFrameProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args)));
-  },
-  cancelAnimationFrame: function() {
-    var args = [];
-    for (var _i = 0; _i < arguments.length; _i++) {
-      args[_i] = arguments[_i];
-    }
-    var delegate = animationFrameProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args)));
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/observable/dom/animationFrames.js
-function animationFramesFactory(timestampProvider) {
-  return new Observable(function(subscriber) {
-    var provider = timestampProvider || performanceTimestampProvider;
-    var start = provider.now();
-    var id = 0;
-    var run = function() {
-      if (!subscriber.closed) {
-        id = animationFrameProvider.requestAnimationFrame(function(timestamp2) {
-          id = 0;
-          var now = provider.now();
-          subscriber.next({
-            timestamp: timestampProvider ? now : timestamp2,
-            elapsed: now - start
-          });
-          run();
-        });
-      }
-    };
-    run();
-    return function() {
-      if (id) {
-        animationFrameProvider.cancelAnimationFrame(id);
-      }
-    };
-  });
-}
-var DEFAULT_ANIMATION_FRAMES = animationFramesFactory();
-
-// node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js
-var ObjectUnsubscribedError = createErrorClass(function(_super) {
-  return function ObjectUnsubscribedErrorImpl() {
-    _super(this);
-    this.name = "ObjectUnsubscribedError";
-    this.message = "object unsubscribed";
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/Subject.js
-var Subject = function(_super) {
-  __extends(Subject2, _super);
-  function Subject2() {
-    var _this = _super.call(this) || this;
-    _this.closed = false;
-    _this.currentObservers = null;
-    _this.observers = [];
-    _this.isStopped = false;
-    _this.hasError = false;
-    _this.thrownError = null;
-    return _this;
-  }
-  Subject2.prototype.lift = function(operator) {
-    var subject = new AnonymousSubject(this, this);
-    subject.operator = operator;
-    return subject;
-  };
-  Subject2.prototype._throwIfClosed = function() {
-    if (this.closed) {
-      throw new ObjectUnsubscribedError();
-    }
-  };
-  Subject2.prototype.next = function(value) {
-    var _this = this;
-    errorContext(function() {
-      var e_1, _a;
-      _this._throwIfClosed();
-      if (!_this.isStopped) {
-        if (!_this.currentObservers) {
-          _this.currentObservers = Array.from(_this.observers);
-        }
-        try {
-          for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {
-            var observer = _c.value;
-            observer.next(value);
-          }
-        } catch (e_1_1) {
-          e_1 = {
-            error: e_1_1
-          };
-        } finally {
-          try {
-            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-          } finally {
-            if (e_1) throw e_1.error;
-          }
-        }
-      }
-    });
-  };
-  Subject2.prototype.error = function(err) {
-    var _this = this;
-    errorContext(function() {
-      _this._throwIfClosed();
-      if (!_this.isStopped) {
-        _this.hasError = _this.isStopped = true;
-        _this.thrownError = err;
-        var observers = _this.observers;
-        while (observers.length) {
-          observers.shift().error(err);
-        }
-      }
-    });
-  };
-  Subject2.prototype.complete = function() {
-    var _this = this;
-    errorContext(function() {
-      _this._throwIfClosed();
-      if (!_this.isStopped) {
-        _this.isStopped = true;
-        var observers = _this.observers;
-        while (observers.length) {
-          observers.shift().complete();
-        }
-      }
-    });
-  };
-  Subject2.prototype.unsubscribe = function() {
-    this.isStopped = this.closed = true;
-    this.observers = this.currentObservers = null;
-  };
-  Object.defineProperty(Subject2.prototype, "observed", {
-    get: function() {
-      var _a;
-      return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Subject2.prototype._trySubscribe = function(subscriber) {
-    this._throwIfClosed();
-    return _super.prototype._trySubscribe.call(this, subscriber);
-  };
-  Subject2.prototype._subscribe = function(subscriber) {
-    this._throwIfClosed();
-    this._checkFinalizedStatuses(subscriber);
-    return this._innerSubscribe(subscriber);
-  };
-  Subject2.prototype._innerSubscribe = function(subscriber) {
-    var _this = this;
-    var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;
-    if (hasError || isStopped) {
-      return EMPTY_SUBSCRIPTION;
-    }
-    this.currentObservers = null;
-    observers.push(subscriber);
-    return new Subscription(function() {
-      _this.currentObservers = null;
-      arrRemove(observers, subscriber);
-    });
-  };
-  Subject2.prototype._checkFinalizedStatuses = function(subscriber) {
-    var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;
-    if (hasError) {
-      subscriber.error(thrownError);
-    } else if (isStopped) {
-      subscriber.complete();
-    }
-  };
-  Subject2.prototype.asObservable = function() {
-    var observable2 = new Observable();
-    observable2.source = this;
-    return observable2;
-  };
-  Subject2.create = function(destination, source) {
-    return new AnonymousSubject(destination, source);
-  };
-  return Subject2;
-}(Observable);
-var AnonymousSubject = function(_super) {
-  __extends(AnonymousSubject2, _super);
-  function AnonymousSubject2(destination, source) {
-    var _this = _super.call(this) || this;
-    _this.destination = destination;
-    _this.source = source;
-    return _this;
-  }
-  AnonymousSubject2.prototype.next = function(value) {
-    var _a, _b;
-    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);
-  };
-  AnonymousSubject2.prototype.error = function(err) {
-    var _a, _b;
-    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);
-  };
-  AnonymousSubject2.prototype.complete = function() {
-    var _a, _b;
-    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);
-  };
-  AnonymousSubject2.prototype._subscribe = function(subscriber) {
-    var _a, _b;
-    return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;
-  };
-  return AnonymousSubject2;
-}(Subject);
-
-// node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js
-var BehaviorSubject = function(_super) {
-  __extends(BehaviorSubject2, _super);
-  function BehaviorSubject2(_value) {
-    var _this = _super.call(this) || this;
-    _this._value = _value;
-    return _this;
-  }
-  Object.defineProperty(BehaviorSubject2.prototype, "value", {
-    get: function() {
-      return this.getValue();
-    },
-    enumerable: false,
-    configurable: true
-  });
-  BehaviorSubject2.prototype._subscribe = function(subscriber) {
-    var subscription = _super.prototype._subscribe.call(this, subscriber);
-    !subscription.closed && subscriber.next(this._value);
-    return subscription;
-  };
-  BehaviorSubject2.prototype.getValue = function() {
-    var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;
-    if (hasError) {
-      throw thrownError;
-    }
-    this._throwIfClosed();
-    return _value;
-  };
-  BehaviorSubject2.prototype.next = function(value) {
-    _super.prototype.next.call(this, this._value = value);
-  };
-  return BehaviorSubject2;
-}(Subject);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js
-var dateTimestampProvider = {
-  now: function() {
-    return (dateTimestampProvider.delegate || Date).now();
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/ReplaySubject.js
-var ReplaySubject = function(_super) {
-  __extends(ReplaySubject2, _super);
-  function ReplaySubject2(_bufferSize, _windowTime, _timestampProvider) {
-    if (_bufferSize === void 0) {
-      _bufferSize = Infinity;
-    }
-    if (_windowTime === void 0) {
-      _windowTime = Infinity;
-    }
-    if (_timestampProvider === void 0) {
-      _timestampProvider = dateTimestampProvider;
-    }
-    var _this = _super.call(this) || this;
-    _this._bufferSize = _bufferSize;
-    _this._windowTime = _windowTime;
-    _this._timestampProvider = _timestampProvider;
-    _this._buffer = [];
-    _this._infiniteTimeWindow = true;
-    _this._infiniteTimeWindow = _windowTime === Infinity;
-    _this._bufferSize = Math.max(1, _bufferSize);
-    _this._windowTime = Math.max(1, _windowTime);
-    return _this;
-  }
-  ReplaySubject2.prototype.next = function(value) {
-    var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;
-    if (!isStopped) {
-      _buffer.push(value);
-      !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);
-    }
-    this._trimBuffer();
-    _super.prototype.next.call(this, value);
-  };
-  ReplaySubject2.prototype._subscribe = function(subscriber) {
-    this._throwIfClosed();
-    this._trimBuffer();
-    var subscription = this._innerSubscribe(subscriber);
-    var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;
-    var copy = _buffer.slice();
-    for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {
-      subscriber.next(copy[i]);
-    }
-    this._checkFinalizedStatuses(subscriber);
-    return subscription;
-  };
-  ReplaySubject2.prototype._trimBuffer = function() {
-    var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;
-    var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;
-    _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);
-    if (!_infiniteTimeWindow) {
-      var now = _timestampProvider.now();
-      var last3 = 0;
-      for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {
-        last3 = i;
-      }
-      last3 && _buffer.splice(0, last3 + 1);
-    }
-  };
-  return ReplaySubject2;
-}(Subject);
-
-// node_modules/rxjs/dist/esm5/internal/AsyncSubject.js
-var AsyncSubject = function(_super) {
-  __extends(AsyncSubject2, _super);
-  function AsyncSubject2() {
-    var _this = _super !== null && _super.apply(this, arguments) || this;
-    _this._value = null;
-    _this._hasValue = false;
-    _this._isComplete = false;
-    return _this;
-  }
-  AsyncSubject2.prototype._checkFinalizedStatuses = function(subscriber) {
-    var _a = this, hasError = _a.hasError, _hasValue = _a._hasValue, _value = _a._value, thrownError = _a.thrownError, isStopped = _a.isStopped, _isComplete = _a._isComplete;
-    if (hasError) {
-      subscriber.error(thrownError);
-    } else if (isStopped || _isComplete) {
-      _hasValue && subscriber.next(_value);
-      subscriber.complete();
-    }
-  };
-  AsyncSubject2.prototype.next = function(value) {
-    if (!this.isStopped) {
-      this._value = value;
-      this._hasValue = true;
-    }
-  };
-  AsyncSubject2.prototype.complete = function() {
-    var _a = this, _hasValue = _a._hasValue, _value = _a._value, _isComplete = _a._isComplete;
-    if (!_isComplete) {
-      this._isComplete = true;
-      _hasValue && _super.prototype.next.call(this, _value);
-      _super.prototype.complete.call(this);
-    }
-  };
-  return AsyncSubject2;
-}(Subject);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/Action.js
-var Action = function(_super) {
-  __extends(Action2, _super);
-  function Action2(scheduler, work) {
-    return _super.call(this) || this;
-  }
-  Action2.prototype.schedule = function(state, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    return this;
-  };
-  return Action2;
-}(Subscription);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js
-var intervalProvider = {
-  setInterval: function(handler, timeout2) {
-    var args = [];
-    for (var _i = 2; _i < arguments.length; _i++) {
-      args[_i - 2] = arguments[_i];
-    }
-    var delegate = intervalProvider.delegate;
-    if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {
-      return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout2], __read(args)));
-    }
-    return setInterval.apply(void 0, __spreadArray([handler, timeout2], __read(args)));
-  },
-  clearInterval: function(handle) {
-    var delegate = intervalProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js
-var AsyncAction = function(_super) {
-  __extends(AsyncAction2, _super);
-  function AsyncAction2(scheduler, work) {
-    var _this = _super.call(this, scheduler, work) || this;
-    _this.scheduler = scheduler;
-    _this.work = work;
-    _this.pending = false;
-    return _this;
-  }
-  AsyncAction2.prototype.schedule = function(state, delay2) {
-    var _a;
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (this.closed) {
-      return this;
-    }
-    this.state = state;
-    var id = this.id;
-    var scheduler = this.scheduler;
-    if (id != null) {
-      this.id = this.recycleAsyncId(scheduler, id, delay2);
-    }
-    this.pending = true;
-    this.delay = delay2;
-    this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay2);
-    return this;
-  };
-  AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay2);
-  };
-  AsyncAction2.prototype.recycleAsyncId = function(_scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 != null && this.delay === delay2 && this.pending === false) {
-      return id;
-    }
-    if (id != null) {
-      intervalProvider.clearInterval(id);
-    }
-    return void 0;
-  };
-  AsyncAction2.prototype.execute = function(state, delay2) {
-    if (this.closed) {
-      return new Error("executing a cancelled action");
-    }
-    this.pending = false;
-    var error = this._execute(state, delay2);
-    if (error) {
-      return error;
-    } else if (this.pending === false && this.id != null) {
-      this.id = this.recycleAsyncId(this.scheduler, this.id, null);
-    }
-  };
-  AsyncAction2.prototype._execute = function(state, _delay) {
-    var errored = false;
-    var errorValue;
-    try {
-      this.work(state);
-    } catch (e) {
-      errored = true;
-      errorValue = e ? e : new Error("Scheduled action threw falsy error");
-    }
-    if (errored) {
-      this.unsubscribe();
-      return errorValue;
-    }
-  };
-  AsyncAction2.prototype.unsubscribe = function() {
-    if (!this.closed) {
-      var _a = this, id = _a.id, scheduler = _a.scheduler;
-      var actions = scheduler.actions;
-      this.work = this.state = this.scheduler = null;
-      this.pending = false;
-      arrRemove(actions, this);
-      if (id != null) {
-        this.id = this.recycleAsyncId(scheduler, id, null);
-      }
-      this.delay = null;
-      _super.prototype.unsubscribe.call(this);
-    }
-  };
-  return AsyncAction2;
-}(Action);
-
-// node_modules/rxjs/dist/esm5/internal/util/Immediate.js
-var nextHandle = 1;
-var resolved;
-var activeHandles = {};
-function findAndClearHandle(handle) {
-  if (handle in activeHandles) {
-    delete activeHandles[handle];
-    return true;
-  }
-  return false;
-}
-var Immediate = {
-  setImmediate: function(cb) {
-    var handle = nextHandle++;
-    activeHandles[handle] = true;
-    if (!resolved) {
-      resolved = Promise.resolve();
-    }
-    resolved.then(function() {
-      return findAndClearHandle(handle) && cb();
-    });
-    return handle;
-  },
-  clearImmediate: function(handle) {
-    findAndClearHandle(handle);
-  }
-};
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/immediateProvider.js
-var setImmediate = Immediate.setImmediate;
-var clearImmediate = Immediate.clearImmediate;
-var immediateProvider = {
-  setImmediate: function() {
-    var args = [];
-    for (var _i = 0; _i < arguments.length; _i++) {
-      args[_i] = arguments[_i];
-    }
-    var delegate = immediateProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args)));
-  },
-  clearImmediate: function(handle) {
-    var delegate = immediateProvider.delegate;
-    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);
-  },
-  delegate: void 0
-};
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AsapAction.js
-var AsapAction = function(_super) {
-  __extends(AsapAction2, _super);
-  function AsapAction2(scheduler, work) {
-    var _this = _super.call(this, scheduler, work) || this;
-    _this.scheduler = scheduler;
-    _this.work = work;
-    return _this;
-  }
-  AsapAction2.prototype.requestAsyncId = function(scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 !== null && delay2 > 0) {
-      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay2);
-    }
-    scheduler.actions.push(this);
-    return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, void 0)));
-  };
-  AsapAction2.prototype.recycleAsyncId = function(scheduler, id, delay2) {
-    var _a;
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 != null ? delay2 > 0 : this.delay > 0) {
-      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay2);
-    }
-    var actions = scheduler.actions;
-    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {
-      immediateProvider.clearImmediate(id);
-      if (scheduler._scheduled === id) {
-        scheduler._scheduled = void 0;
-      }
-    }
-    return void 0;
-  };
-  return AsapAction2;
-}(AsyncAction);
-
-// node_modules/rxjs/dist/esm5/internal/Scheduler.js
-var Scheduler = function() {
-  function Scheduler2(schedulerActionCtor, now) {
-    if (now === void 0) {
-      now = Scheduler2.now;
-    }
-    this.schedulerActionCtor = schedulerActionCtor;
-    this.now = now;
-  }
-  Scheduler2.prototype.schedule = function(work, delay2, state) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    return new this.schedulerActionCtor(this, work).schedule(state, delay2);
-  };
-  Scheduler2.now = dateTimestampProvider.now;
-  return Scheduler2;
-}();
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js
-var AsyncScheduler = function(_super) {
-  __extends(AsyncScheduler2, _super);
-  function AsyncScheduler2(SchedulerAction, now) {
-    if (now === void 0) {
-      now = Scheduler.now;
-    }
-    var _this = _super.call(this, SchedulerAction, now) || this;
-    _this.actions = [];
-    _this._active = false;
-    return _this;
-  }
-  AsyncScheduler2.prototype.flush = function(action) {
-    var actions = this.actions;
-    if (this._active) {
-      actions.push(action);
-      return;
-    }
-    var error;
-    this._active = true;
-    do {
-      if (error = action.execute(action.state, action.delay)) {
-        break;
-      }
-    } while (action = actions.shift());
-    this._active = false;
-    if (error) {
-      while (action = actions.shift()) {
-        action.unsubscribe();
-      }
-      throw error;
-    }
-  };
-  return AsyncScheduler2;
-}(Scheduler);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AsapScheduler.js
-var AsapScheduler = function(_super) {
-  __extends(AsapScheduler2, _super);
-  function AsapScheduler2() {
-    return _super !== null && _super.apply(this, arguments) || this;
-  }
-  AsapScheduler2.prototype.flush = function(action) {
-    this._active = true;
-    var flushId = this._scheduled;
-    this._scheduled = void 0;
-    var actions = this.actions;
-    var error;
-    action = action || actions.shift();
-    do {
-      if (error = action.execute(action.state, action.delay)) {
-        break;
-      }
-    } while ((action = actions[0]) && action.id === flushId && actions.shift());
-    this._active = false;
-    if (error) {
-      while ((action = actions[0]) && action.id === flushId && actions.shift()) {
-        action.unsubscribe();
-      }
-      throw error;
-    }
-  };
-  return AsapScheduler2;
-}(AsyncScheduler);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/asap.js
-var asapScheduler = new AsapScheduler(AsapAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/async.js
-var asyncScheduler = new AsyncScheduler(AsyncAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/QueueAction.js
-var QueueAction = function(_super) {
-  __extends(QueueAction2, _super);
-  function QueueAction2(scheduler, work) {
-    var _this = _super.call(this, scheduler, work) || this;
-    _this.scheduler = scheduler;
-    _this.work = work;
-    return _this;
-  }
-  QueueAction2.prototype.schedule = function(state, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 > 0) {
-      return _super.prototype.schedule.call(this, state, delay2);
-    }
-    this.delay = delay2;
-    this.state = state;
-    this.scheduler.flush(this);
-    return this;
-  };
-  QueueAction2.prototype.execute = function(state, delay2) {
-    return delay2 > 0 || this.closed ? _super.prototype.execute.call(this, state, delay2) : this._execute(state, delay2);
-  };
-  QueueAction2.prototype.requestAsyncId = function(scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 != null && delay2 > 0 || delay2 == null && this.delay > 0) {
-      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay2);
-    }
-    scheduler.flush(this);
-    return 0;
-  };
-  return QueueAction2;
-}(AsyncAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/QueueScheduler.js
-var QueueScheduler = function(_super) {
-  __extends(QueueScheduler2, _super);
-  function QueueScheduler2() {
-    return _super !== null && _super.apply(this, arguments) || this;
-  }
-  return QueueScheduler2;
-}(AsyncScheduler);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/queue.js
-var queueScheduler = new QueueScheduler(QueueAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AnimationFrameAction.js
-var AnimationFrameAction = function(_super) {
-  __extends(AnimationFrameAction2, _super);
-  function AnimationFrameAction2(scheduler, work) {
-    var _this = _super.call(this, scheduler, work) || this;
-    _this.scheduler = scheduler;
-    _this.work = work;
-    return _this;
-  }
-  AnimationFrameAction2.prototype.requestAsyncId = function(scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 !== null && delay2 > 0) {
-      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay2);
-    }
-    scheduler.actions.push(this);
-    return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(function() {
-      return scheduler.flush(void 0);
-    }));
-  };
-  AnimationFrameAction2.prototype.recycleAsyncId = function(scheduler, id, delay2) {
-    var _a;
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (delay2 != null ? delay2 > 0 : this.delay > 0) {
-      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay2);
-    }
-    var actions = scheduler.actions;
-    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {
-      animationFrameProvider.cancelAnimationFrame(id);
-      scheduler._scheduled = void 0;
-    }
-    return void 0;
-  };
-  return AnimationFrameAction2;
-}(AsyncAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/AnimationFrameScheduler.js
-var AnimationFrameScheduler = function(_super) {
-  __extends(AnimationFrameScheduler2, _super);
-  function AnimationFrameScheduler2() {
-    return _super !== null && _super.apply(this, arguments) || this;
-  }
-  AnimationFrameScheduler2.prototype.flush = function(action) {
-    this._active = true;
-    var flushId = this._scheduled;
-    this._scheduled = void 0;
-    var actions = this.actions;
-    var error;
-    action = action || actions.shift();
-    do {
-      if (error = action.execute(action.state, action.delay)) {
-        break;
-      }
-    } while ((action = actions[0]) && action.id === flushId && actions.shift());
-    this._active = false;
-    if (error) {
-      while ((action = actions[0]) && action.id === flushId && actions.shift()) {
-        action.unsubscribe();
-      }
-      throw error;
-    }
-  };
-  return AnimationFrameScheduler2;
-}(AsyncScheduler);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/animationFrame.js
-var animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);
-
-// node_modules/rxjs/dist/esm5/internal/scheduler/VirtualTimeScheduler.js
-var VirtualTimeScheduler = function(_super) {
-  __extends(VirtualTimeScheduler2, _super);
-  function VirtualTimeScheduler2(schedulerActionCtor, maxFrames) {
-    if (schedulerActionCtor === void 0) {
-      schedulerActionCtor = VirtualAction;
-    }
-    if (maxFrames === void 0) {
-      maxFrames = Infinity;
-    }
-    var _this = _super.call(this, schedulerActionCtor, function() {
-      return _this.frame;
-    }) || this;
-    _this.maxFrames = maxFrames;
-    _this.frame = 0;
-    _this.index = -1;
-    return _this;
-  }
-  VirtualTimeScheduler2.prototype.flush = function() {
-    var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
-    var error;
-    var action;
-    while ((action = actions[0]) && action.delay <= maxFrames) {
-      actions.shift();
-      this.frame = action.delay;
-      if (error = action.execute(action.state, action.delay)) {
-        break;
-      }
-    }
-    if (error) {
-      while (action = actions.shift()) {
-        action.unsubscribe();
-      }
-      throw error;
-    }
-  };
-  VirtualTimeScheduler2.frameTimeFactor = 10;
-  return VirtualTimeScheduler2;
-}(AsyncScheduler);
-var VirtualAction = function(_super) {
-  __extends(VirtualAction2, _super);
-  function VirtualAction2(scheduler, work, index) {
-    if (index === void 0) {
-      index = scheduler.index += 1;
-    }
-    var _this = _super.call(this, scheduler, work) || this;
-    _this.scheduler = scheduler;
-    _this.work = work;
-    _this.index = index;
-    _this.active = true;
-    _this.index = scheduler.index = index;
-    return _this;
-  }
-  VirtualAction2.prototype.schedule = function(state, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    if (Number.isFinite(delay2)) {
-      if (!this.id) {
-        return _super.prototype.schedule.call(this, state, delay2);
-      }
-      this.active = false;
-      var action = new VirtualAction2(this.scheduler, this.work);
-      this.add(action);
-      return action.schedule(state, delay2);
-    } else {
-      return Subscription.EMPTY;
-    }
-  };
-  VirtualAction2.prototype.requestAsyncId = function(scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    this.delay = scheduler.frame + delay2;
-    var actions = scheduler.actions;
-    actions.push(this);
-    actions.sort(VirtualAction2.sortActions);
-    return 1;
-  };
-  VirtualAction2.prototype.recycleAsyncId = function(scheduler, id, delay2) {
-    if (delay2 === void 0) {
-      delay2 = 0;
-    }
-    return void 0;
-  };
-  VirtualAction2.prototype._execute = function(state, delay2) {
-    if (this.active === true) {
-      return _super.prototype._execute.call(this, state, delay2);
-    }
-  };
-  VirtualAction2.sortActions = function(a, b) {
-    if (a.delay === b.delay) {
-      if (a.index === b.index) {
-        return 0;
-      } else if (a.index > b.index) {
-        return 1;
-      } else {
-        return -1;
-      }
-    } else if (a.delay > b.delay) {
-      return 1;
-    } else {
-      return -1;
-    }
-  };
-  return VirtualAction2;
-}(AsyncAction);
-
-// node_modules/rxjs/dist/esm5/internal/observable/empty.js
-var EMPTY = new Observable(function(subscriber) {
-  return subscriber.complete();
-});
-
-// node_modules/rxjs/dist/esm5/internal/util/isScheduler.js
-function isScheduler(value) {
-  return value && isFunction(value.schedule);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/args.js
-function last(arr) {
-  return arr[arr.length - 1];
-}
-function popResultSelector(args) {
-  return isFunction(last(args)) ? args.pop() : void 0;
-}
-function popScheduler(args) {
-  return isScheduler(last(args)) ? args.pop() : void 0;
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js
-var isArrayLike = function(x) {
-  return x && typeof x.length === "number" && typeof x !== "function";
-};
-
-// node_modules/rxjs/dist/esm5/internal/util/isPromise.js
-function isPromise(value) {
-  return isFunction(value === null || value === void 0 ? void 0 : value.then);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js
-function isInteropObservable(input2) {
-  return isFunction(input2[observable]);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js
-function isAsyncIterable(obj) {
-  return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js
-function createInvalidObservableTypeError(input2) {
-  return new TypeError("You provided " + (input2 !== null && typeof input2 === "object" ? "an invalid object" : "'" + input2 + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
-}
-
-// node_modules/rxjs/dist/esm5/internal/symbol/iterator.js
-function getSymbolIterator() {
-  if (typeof Symbol !== "function" || !Symbol.iterator) {
-    return "@@iterator";
-  }
-  return Symbol.iterator;
-}
-var iterator = getSymbolIterator();
-
-// node_modules/rxjs/dist/esm5/internal/util/isIterable.js
-function isIterable(input2) {
-  return isFunction(input2 === null || input2 === void 0 ? void 0 : input2[iterator]);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js
-function readableStreamLikeToAsyncGenerator(readableStream) {
-  return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {
-    var reader, _a, value, done;
-    return __generator(this, function(_b) {
-      switch (_b.label) {
-        case 0:
-          reader = readableStream.getReader();
-          _b.label = 1;
-        case 1:
-          _b.trys.push([1, , 9, 10]);
-          _b.label = 2;
-        case 2:
-          if (false) return [3, 8];
-          return [4, __await(reader.read())];
-        case 3:
-          _a = _b.sent(), value = _a.value, done = _a.done;
-          if (!done) return [3, 5];
-          return [4, __await(void 0)];
-        case 4:
-          return [2, _b.sent()];
-        case 5:
-          return [4, __await(value)];
-        case 6:
-          return [4, _b.sent()];
-        case 7:
-          _b.sent();
-          return [3, 2];
-        case 8:
-          return [3, 10];
-        case 9:
-          reader.releaseLock();
-          return [7];
-        case 10:
-          return [2];
-      }
-    });
-  });
-}
-function isReadableStreamLike(obj) {
-  return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js
-function innerFrom(input2) {
-  if (input2 instanceof Observable) {
-    return input2;
-  }
-  if (input2 != null) {
-    if (isInteropObservable(input2)) {
-      return fromInteropObservable(input2);
-    }
-    if (isArrayLike(input2)) {
-      return fromArrayLike(input2);
-    }
-    if (isPromise(input2)) {
-      return fromPromise(input2);
-    }
-    if (isAsyncIterable(input2)) {
-      return fromAsyncIterable(input2);
-    }
-    if (isIterable(input2)) {
-      return fromIterable(input2);
-    }
-    if (isReadableStreamLike(input2)) {
-      return fromReadableStreamLike(input2);
-    }
-  }
-  throw createInvalidObservableTypeError(input2);
-}
-function fromInteropObservable(obj) {
-  return new Observable(function(subscriber) {
-    var obs = obj[observable]();
-    if (isFunction(obs.subscribe)) {
-      return obs.subscribe(subscriber);
-    }
-    throw new TypeError("Provided object does not correctly implement Symbol.observable");
-  });
-}
-function fromArrayLike(array) {
-  return new Observable(function(subscriber) {
-    for (var i = 0; i < array.length && !subscriber.closed; i++) {
-      subscriber.next(array[i]);
-    }
-    subscriber.complete();
-  });
-}
-function fromPromise(promise) {
-  return new Observable(function(subscriber) {
-    promise.then(function(value) {
-      if (!subscriber.closed) {
-        subscriber.next(value);
-        subscriber.complete();
-      }
-    }, function(err) {
-      return subscriber.error(err);
-    }).then(null, reportUnhandledError);
-  });
-}
-function fromIterable(iterable) {
-  return new Observable(function(subscriber) {
-    var e_1, _a;
-    try {
-      for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
-        var value = iterable_1_1.value;
-        subscriber.next(value);
-        if (subscriber.closed) {
-          return;
-        }
-      }
-    } catch (e_1_1) {
-      e_1 = {
-        error: e_1_1
-      };
-    } finally {
-      try {
-        if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);
-      } finally {
-        if (e_1) throw e_1.error;
-      }
-    }
-    subscriber.complete();
-  });
-}
-function fromAsyncIterable(asyncIterable) {
-  return new Observable(function(subscriber) {
-    process(asyncIterable, subscriber).catch(function(err) {
-      return subscriber.error(err);
-    });
-  });
-}
-function fromReadableStreamLike(readableStream) {
-  return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));
-}
-function process(asyncIterable, subscriber) {
-  var asyncIterable_1, asyncIterable_1_1;
-  var e_2, _a;
-  return __awaiter(this, void 0, void 0, function() {
-    var value, e_2_1;
-    return __generator(this, function(_b) {
-      switch (_b.label) {
-        case 0:
-          _b.trys.push([0, 5, 6, 11]);
-          asyncIterable_1 = __asyncValues(asyncIterable);
-          _b.label = 1;
-        case 1:
-          return [4, asyncIterable_1.next()];
-        case 2:
-          if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];
-          value = asyncIterable_1_1.value;
-          subscriber.next(value);
-          if (subscriber.closed) {
-            return [2];
-          }
-          _b.label = 3;
-        case 3:
-          return [3, 1];
-        case 4:
-          return [3, 11];
-        case 5:
-          e_2_1 = _b.sent();
-          e_2 = {
-            error: e_2_1
-          };
-          return [3, 11];
-        case 6:
-          _b.trys.push([6, , 9, 10]);
-          if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];
-          return [4, _a.call(asyncIterable_1)];
-        case 7:
-          _b.sent();
-          _b.label = 8;
-        case 8:
-          return [3, 10];
-        case 9:
-          if (e_2) throw e_2.error;
-          return [7];
-        case 10:
-          return [7];
-        case 11:
-          subscriber.complete();
-          return [2];
-      }
-    });
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js
-function executeSchedule(parentSubscription, scheduler, work, delay2, repeat2) {
-  if (delay2 === void 0) {
-    delay2 = 0;
-  }
-  if (repeat2 === void 0) {
-    repeat2 = false;
-  }
-  var scheduleSubscription = scheduler.schedule(function() {
-    work();
-    if (repeat2) {
-      parentSubscription.add(this.schedule(null, delay2));
-    } else {
-      this.unsubscribe();
-    }
-  }, delay2);
-  parentSubscription.add(scheduleSubscription);
-  if (!repeat2) {
-    return scheduleSubscription;
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/observeOn.js
-function observeOn(scheduler, delay2) {
-  if (delay2 === void 0) {
-    delay2 = 0;
-  }
-  return operate(function(source, subscriber) {
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      return executeSchedule(subscriber, scheduler, function() {
-        return subscriber.next(value);
-      }, delay2);
-    }, function() {
-      return executeSchedule(subscriber, scheduler, function() {
-        return subscriber.complete();
-      }, delay2);
-    }, function(err) {
-      return executeSchedule(subscriber, scheduler, function() {
-        return subscriber.error(err);
-      }, delay2);
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js
-function subscribeOn(scheduler, delay2) {
-  if (delay2 === void 0) {
-    delay2 = 0;
-  }
-  return operate(function(source, subscriber) {
-    subscriber.add(scheduler.schedule(function() {
-      return source.subscribe(subscriber);
-    }, delay2));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js
-function scheduleObservable(input2, scheduler) {
-  return innerFrom(input2).pipe(subscribeOn(scheduler), observeOn(scheduler));
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js
-function schedulePromise(input2, scheduler) {
-  return innerFrom(input2).pipe(subscribeOn(scheduler), observeOn(scheduler));
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js
-function scheduleArray(input2, scheduler) {
-  return new Observable(function(subscriber) {
-    var i = 0;
-    return scheduler.schedule(function() {
-      if (i === input2.length) {
-        subscriber.complete();
-      } else {
-        subscriber.next(input2[i++]);
-        if (!subscriber.closed) {
-          this.schedule();
-        }
-      }
-    });
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js
-function scheduleIterable(input2, scheduler) {
-  return new Observable(function(subscriber) {
-    var iterator2;
-    executeSchedule(subscriber, scheduler, function() {
-      iterator2 = input2[iterator]();
-      executeSchedule(subscriber, scheduler, function() {
-        var _a;
-        var value;
-        var done;
-        try {
-          _a = iterator2.next(), value = _a.value, done = _a.done;
-        } catch (err) {
-          subscriber.error(err);
-          return;
-        }
-        if (done) {
-          subscriber.complete();
-        } else {
-          subscriber.next(value);
-        }
-      }, 0, true);
-    });
-    return function() {
-      return isFunction(iterator2 === null || iterator2 === void 0 ? void 0 : iterator2.return) && iterator2.return();
-    };
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js
-function scheduleAsyncIterable(input2, scheduler) {
-  if (!input2) {
-    throw new Error("Iterable cannot be null");
-  }
-  return new Observable(function(subscriber) {
-    executeSchedule(subscriber, scheduler, function() {
-      var iterator2 = input2[Symbol.asyncIterator]();
-      executeSchedule(subscriber, scheduler, function() {
-        iterator2.next().then(function(result) {
-          if (result.done) {
-            subscriber.complete();
-          } else {
-            subscriber.next(result.value);
-          }
-        });
-      }, 0, true);
-    });
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js
-function scheduleReadableStreamLike(input2, scheduler) {
-  return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input2), scheduler);
-}
-
-// node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js
-function scheduled(input2, scheduler) {
-  if (input2 != null) {
-    if (isInteropObservable(input2)) {
-      return scheduleObservable(input2, scheduler);
-    }
-    if (isArrayLike(input2)) {
-      return scheduleArray(input2, scheduler);
-    }
-    if (isPromise(input2)) {
-      return schedulePromise(input2, scheduler);
-    }
-    if (isAsyncIterable(input2)) {
-      return scheduleAsyncIterable(input2, scheduler);
-    }
-    if (isIterable(input2)) {
-      return scheduleIterable(input2, scheduler);
-    }
-    if (isReadableStreamLike(input2)) {
-      return scheduleReadableStreamLike(input2, scheduler);
-    }
-  }
-  throw createInvalidObservableTypeError(input2);
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/from.js
-function from(input2, scheduler) {
-  return scheduler ? scheduled(input2, scheduler) : innerFrom(input2);
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/of.js
-function of() {
-  var args = [];
-  for (var _i = 0; _i < arguments.length; _i++) {
-    args[_i] = arguments[_i];
-  }
-  var scheduler = popScheduler(args);
-  return from(args, scheduler);
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/throwError.js
-function throwError(errorOrErrorFactory, scheduler) {
-  var errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function() {
-    return errorOrErrorFactory;
-  };
-  var init = function(subscriber) {
-    return subscriber.error(errorFactory());
-  };
-  return new Observable(scheduler ? function(subscriber) {
-    return scheduler.schedule(init, 0, subscriber);
-  } : init);
-}
-
-// node_modules/rxjs/dist/esm5/internal/Notification.js
-var NotificationKind;
-(function(NotificationKind2) {
-  NotificationKind2["NEXT"] = "N";
-  NotificationKind2["ERROR"] = "E";
-  NotificationKind2["COMPLETE"] = "C";
-})(NotificationKind || (NotificationKind = {}));
-var Notification = function() {
-  function Notification2(kind, value, error) {
-    this.kind = kind;
-    this.value = value;
-    this.error = error;
-    this.hasValue = kind === "N";
-  }
-  Notification2.prototype.observe = function(observer) {
-    return observeNotification(this, observer);
-  };
-  Notification2.prototype.do = function(nextHandler, errorHandler, completeHandler) {
-    var _a = this, kind = _a.kind, value = _a.value, error = _a.error;
-    return kind === "N" ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === "E" ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler();
-  };
-  Notification2.prototype.accept = function(nextOrObserver, error, complete) {
-    var _a;
-    return isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) ? this.observe(nextOrObserver) : this.do(nextOrObserver, error, complete);
-  };
-  Notification2.prototype.toObservable = function() {
-    var _a = this, kind = _a.kind, value = _a.value, error = _a.error;
-    var result = kind === "N" ? of(value) : kind === "E" ? throwError(function() {
-      return error;
-    }) : kind === "C" ? EMPTY : 0;
-    if (!result) {
-      throw new TypeError("Unexpected notification kind " + kind);
-    }
-    return result;
-  };
-  Notification2.createNext = function(value) {
-    return new Notification2("N", value);
-  };
-  Notification2.createError = function(err) {
-    return new Notification2("E", void 0, err);
-  };
-  Notification2.createComplete = function() {
-    return Notification2.completeNotification;
-  };
-  Notification2.completeNotification = new Notification2("C");
-  return Notification2;
-}();
-function observeNotification(notification, observer) {
-  var _a, _b, _c;
-  var _d = notification, kind = _d.kind, value = _d.value, error = _d.error;
-  if (typeof kind !== "string") {
-    throw new TypeError('Invalid notification, missing "kind"');
-  }
-  kind === "N" ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === "E" ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/isObservable.js
-function isObservable(obj) {
-  return !!obj && (obj instanceof Observable || isFunction(obj.lift) && isFunction(obj.subscribe));
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/EmptyError.js
-var EmptyError = createErrorClass(function(_super) {
-  return function EmptyErrorImpl() {
-    _super(this);
-    this.name = "EmptyError";
-    this.message = "no elements in sequence";
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/util/ArgumentOutOfRangeError.js
-var ArgumentOutOfRangeError = createErrorClass(function(_super) {
-  return function ArgumentOutOfRangeErrorImpl() {
-    _super(this);
-    this.name = "ArgumentOutOfRangeError";
-    this.message = "argument out of range";
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/util/NotFoundError.js
-var NotFoundError = createErrorClass(function(_super) {
-  return function NotFoundErrorImpl(message) {
-    _super(this);
-    this.name = "NotFoundError";
-    this.message = message;
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/util/SequenceError.js
-var SequenceError = createErrorClass(function(_super) {
-  return function SequenceErrorImpl(message) {
-    _super(this);
-    this.name = "SequenceError";
-    this.message = message;
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/operators/timeout.js
-var TimeoutError = createErrorClass(function(_super) {
-  return function TimeoutErrorImpl(info) {
-    if (info === void 0) {
-      info = null;
-    }
-    _super(this);
-    this.message = "Timeout has occurred";
-    this.name = "TimeoutError";
-    this.info = info;
-  };
-});
-
-// node_modules/rxjs/dist/esm5/internal/operators/map.js
-function map(project, thisArg) {
-  return operate(function(source, subscriber) {
-    var index = 0;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      subscriber.next(project.call(thisArg, value, index++));
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js
-var isArray = Array.isArray;
-function callOrApply(fn, args) {
-  return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);
-}
-function mapOneOrManyArgs(fn) {
-  return map(function(args) {
-    return callOrApply(fn, args);
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js
-var isArray2 = Array.isArray;
-var getPrototypeOf = Object.getPrototypeOf;
-var objectProto = Object.prototype;
-var getKeys = Object.keys;
-function argsArgArrayOrObject(args) {
-  if (args.length === 1) {
-    var first_1 = args[0];
-    if (isArray2(first_1)) {
-      return {
-        args: first_1,
-        keys: null
-      };
-    }
-    if (isPOJO(first_1)) {
-      var keys = getKeys(first_1);
-      return {
-        args: keys.map(function(key) {
-          return first_1[key];
-        }),
-        keys
-      };
-    }
-  }
-  return {
-    args,
-    keys: null
-  };
-}
-function isPOJO(obj) {
-  return obj && typeof obj === "object" && getPrototypeOf(obj) === objectProto;
-}
-
-// node_modules/rxjs/dist/esm5/internal/util/createObject.js
-function createObject(keys, values) {
-  return keys.reduce(function(result, key, i) {
-    return result[key] = values[i], result;
-  }, {});
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js
-function combineLatest() {
-  var args = [];
-  for (var _i = 0; _i < arguments.length; _i++) {
-    args[_i] = arguments[_i];
-  }
-  var scheduler = popScheduler(args);
-  var resultSelector = popResultSelector(args);
-  var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;
-  if (observables.length === 0) {
-    return from([], scheduler);
-  }
-  var result = new Observable(combineLatestInit(observables, scheduler, keys ? function(values) {
-    return createObject(keys, values);
-  } : identity));
-  return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;
-}
-function combineLatestInit(observables, scheduler, valueTransform) {
-  if (valueTransform === void 0) {
-    valueTransform = identity;
-  }
-  return function(subscriber) {
-    maybeSchedule(scheduler, function() {
-      var length = observables.length;
-      var values = new Array(length);
-      var active = length;
-      var remainingFirstValues = length;
-      var _loop_1 = function(i2) {
-        maybeSchedule(scheduler, function() {
-          var source = from(observables[i2], scheduler);
-          var hasFirstValue = false;
-          source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-            values[i2] = value;
-            if (!hasFirstValue) {
-              hasFirstValue = true;
-              remainingFirstValues--;
-            }
-            if (!remainingFirstValues) {
-              subscriber.next(valueTransform(values.slice()));
-            }
-          }, function() {
-            if (!--active) {
-              subscriber.complete();
-            }
-          }));
-        }, subscriber);
-      };
-      for (var i = 0; i < length; i++) {
-        _loop_1(i);
-      }
-    }, subscriber);
-  };
-}
-function maybeSchedule(scheduler, execute, subscription) {
-  if (scheduler) {
-    executeSchedule(subscription, scheduler, execute);
-  } else {
-    execute();
-  }
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js
-function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand2, innerSubScheduler, additionalFinalizer) {
-  var buffer2 = [];
-  var active = 0;
-  var index = 0;
-  var isComplete = false;
-  var checkComplete = function() {
-    if (isComplete && !buffer2.length && !active) {
-      subscriber.complete();
-    }
-  };
-  var outerNext = function(value) {
-    return active < concurrent ? doInnerSub(value) : buffer2.push(value);
-  };
-  var doInnerSub = function(value) {
-    expand2 && subscriber.next(value);
-    active++;
-    var innerComplete = false;
-    innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) {
-      onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
-      if (expand2) {
-        outerNext(innerValue);
-      } else {
-        subscriber.next(innerValue);
-      }
-    }, function() {
-      innerComplete = true;
-    }, void 0, function() {
-      if (innerComplete) {
-        try {
-          active--;
-          var _loop_1 = function() {
-            var bufferedValue = buffer2.shift();
-            if (innerSubScheduler) {
-              executeSchedule(subscriber, innerSubScheduler, function() {
-                return doInnerSub(bufferedValue);
-              });
-            } else {
-              doInnerSub(bufferedValue);
-            }
-          };
-          while (buffer2.length && active < concurrent) {
-            _loop_1();
-          }
-          checkComplete();
-        } catch (err) {
-          subscriber.error(err);
-        }
-      }
-    }));
-  };
-  source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() {
-    isComplete = true;
-    checkComplete();
-  }));
-  return function() {
-    additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js
-function mergeMap(project, resultSelector, concurrent) {
-  if (concurrent === void 0) {
-    concurrent = Infinity;
-  }
-  if (isFunction(resultSelector)) {
-    return mergeMap(function(a, i) {
-      return map(function(b, ii) {
-        return resultSelector(a, b, i, ii);
-      })(innerFrom(project(a, i)));
-    }, concurrent);
-  } else if (typeof resultSelector === "number") {
-    concurrent = resultSelector;
-  }
-  return operate(function(source, subscriber) {
-    return mergeInternals(source, subscriber, project, concurrent);
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js
-function mergeAll(concurrent) {
-  if (concurrent === void 0) {
-    concurrent = Infinity;
-  }
-  return mergeMap(identity, concurrent);
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/concatAll.js
-function concatAll() {
-  return mergeAll(1);
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/concat.js
-function concat() {
-  var args = [];
-  for (var _i = 0; _i < arguments.length; _i++) {
-    args[_i] = arguments[_i];
-  }
-  return concatAll()(from(args, popScheduler(args)));
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/defer.js
-function defer(observableFactory) {
-  return new Observable(function(subscriber) {
-    innerFrom(observableFactory()).subscribe(subscriber);
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/observable/never.js
-var NEVER = new Observable(noop);
-
-// node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js
-var isArray3 = Array.isArray;
-
-// node_modules/rxjs/dist/esm5/internal/operators/filter.js
-function filter(predicate, thisArg) {
-  return operate(function(source, subscriber) {
-    var index = 0;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      return predicate.call(thisArg, value, index++) && subscriber.next(value);
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/catchError.js
-function catchError(selector) {
-  return operate(function(source, subscriber) {
-    var innerSub = null;
-    var syncUnsub = false;
-    var handledResult;
-    innerSub = source.subscribe(createOperatorSubscriber(subscriber, void 0, void 0, function(err) {
-      handledResult = innerFrom(selector(err, catchError(selector)(source)));
-      if (innerSub) {
-        innerSub.unsubscribe();
-        innerSub = null;
-        handledResult.subscribe(subscriber);
-      } else {
-        syncUnsub = true;
-      }
-    }));
-    if (syncUnsub) {
-      innerSub.unsubscribe();
-      innerSub = null;
-      handledResult.subscribe(subscriber);
-    }
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js
-function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {
-  return function(source, subscriber) {
-    var hasState = hasSeed;
-    var state = seed;
-    var index = 0;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      var i = index++;
-      state = hasState ? accumulator(state, value, i) : (hasState = true, value);
-      emitOnNext && subscriber.next(state);
-    }, emitBeforeComplete && function() {
-      hasState && subscriber.next(state);
-      subscriber.complete();
-    }));
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/concatMap.js
-function concatMap(project, resultSelector) {
-  return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js
-function defaultIfEmpty(defaultValue) {
-  return operate(function(source, subscriber) {
-    var hasValue = false;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      hasValue = true;
-      subscriber.next(value);
-    }, function() {
-      if (!hasValue) {
-        subscriber.next(defaultValue);
-      }
-      subscriber.complete();
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/take.js
-function take(count2) {
-  return count2 <= 0 ? function() {
-    return EMPTY;
-  } : operate(function(source, subscriber) {
-    var seen = 0;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      if (++seen <= count2) {
-        subscriber.next(value);
-        if (count2 <= seen) {
-          subscriber.complete();
-        }
-      }
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/mapTo.js
-function mapTo(value) {
-  return map(function() {
-    return value;
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js
-function throwIfEmpty(errorFactory) {
-  if (errorFactory === void 0) {
-    errorFactory = defaultErrorFactory;
-  }
-  return operate(function(source, subscriber) {
-    var hasValue = false;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      hasValue = true;
-      subscriber.next(value);
-    }, function() {
-      return hasValue ? subscriber.complete() : subscriber.error(errorFactory());
-    }));
-  });
-}
-function defaultErrorFactory() {
-  return new EmptyError();
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/finalize.js
-function finalize(callback) {
-  return operate(function(source, subscriber) {
-    try {
-      source.subscribe(subscriber);
-    } finally {
-      subscriber.add(callback);
-    }
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/first.js
-function first(predicate, defaultValue) {
-  var hasDefaultValue = arguments.length >= 2;
-  return function(source) {
-    return source.pipe(predicate ? filter(function(v, i) {
-      return predicate(v, i, source);
-    }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function() {
-      return new EmptyError();
-    }));
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/takeLast.js
-function takeLast(count2) {
-  return count2 <= 0 ? function() {
-    return EMPTY;
-  } : operate(function(source, subscriber) {
-    var buffer2 = [];
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      buffer2.push(value);
-      count2 < buffer2.length && buffer2.shift();
-    }, function() {
-      var e_1, _a;
-      try {
-        for (var buffer_1 = __values(buffer2), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {
-          var value = buffer_1_1.value;
-          subscriber.next(value);
-        }
-      } catch (e_1_1) {
-        e_1 = {
-          error: e_1_1
-        };
-      } finally {
-        try {
-          if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);
-        } finally {
-          if (e_1) throw e_1.error;
-        }
-      }
-      subscriber.complete();
-    }, void 0, function() {
-      buffer2 = null;
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/last.js
-function last2(predicate, defaultValue) {
-  var hasDefaultValue = arguments.length >= 2;
-  return function(source) {
-    return source.pipe(predicate ? filter(function(v, i) {
-      return predicate(v, i, source);
-    }) : identity, takeLast(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function() {
-      return new EmptyError();
-    }));
-  };
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/scan.js
-function scan(accumulator, seed) {
-  return operate(scanInternals(accumulator, seed, arguments.length >= 2, true));
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/startWith.js
-function startWith() {
-  var values = [];
-  for (var _i = 0; _i < arguments.length; _i++) {
-    values[_i] = arguments[_i];
-  }
-  var scheduler = popScheduler(values);
-  return operate(function(source, subscriber) {
-    (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/switchMap.js
-function switchMap(project, resultSelector) {
-  return operate(function(source, subscriber) {
-    var innerSubscriber = null;
-    var index = 0;
-    var isComplete = false;
-    var checkComplete = function() {
-      return isComplete && !innerSubscriber && subscriber.complete();
-    };
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();
-      var innerIndex = 0;
-      var outerIndex = index++;
-      innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, function(innerValue) {
-        return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);
-      }, function() {
-        innerSubscriber = null;
-        checkComplete();
-      }));
-    }, function() {
-      isComplete = true;
-      checkComplete();
-    }));
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js
-function takeUntil(notifier) {
-  return operate(function(source, subscriber) {
-    innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function() {
-      return subscriber.complete();
-    }, noop));
-    !subscriber.closed && source.subscribe(subscriber);
-  });
-}
-
-// node_modules/rxjs/dist/esm5/internal/operators/tap.js
-function tap(observerOrNext, error, complete) {
-  var tapObserver = isFunction(observerOrNext) || error || complete ? {
-    next: observerOrNext,
-    error,
-    complete
-  } : observerOrNext;
-  return tapObserver ? operate(function(source, subscriber) {
-    var _a;
-    (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
-    var isUnsub = true;
-    source.subscribe(createOperatorSubscriber(subscriber, function(value) {
-      var _a2;
-      (_a2 = tapObserver.next) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, value);
-      subscriber.next(value);
-    }, function() {
-      var _a2;
-      isUnsub = false;
-      (_a2 = tapObserver.complete) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
-      subscriber.complete();
-    }, function(err) {
-      var _a2;
-      isUnsub = false;
-      (_a2 = tapObserver.error) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, err);
-      subscriber.error(err);
-    }, function() {
-      var _a2, _b;
-      if (isUnsub) {
-        (_a2 = tapObserver.unsubscribe) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
-      }
-      (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
-    }));
-  }) : identity;
-}
-
-// node_modules/@angular/core/fesm2022/primitives/event-dispatch.mjs
-var Attribute = {
-  /**
-   * The jsaction attribute defines a mapping of a DOM event to a
-   * generic event (aka jsaction), to which the actual event handlers
-   * that implement the behavior of the application are bound. The
-   * value is a semicolon separated list of colon separated pairs of
-   * an optional DOM event name and a jsaction name. If the optional
-   * DOM event name is omitted, 'click' is assumed. The jsaction names
-   * are dot separated pairs of a namespace and a simple jsaction
-   * name.
-   *
-   * See grammar in README.md for expected syntax in the attribute value.
-   */
-  JSACTION: "jsaction"
-};
-var Property = {
-  /**
-   * The parsed value of the jsaction attribute is stored in this
-   * property on the DOM node. The parsed value is an Object. The
-   * property names of the object are the events; the values are the
-   * names of the actions. This property is attached even on nodes
-   * that don't have a jsaction attribute as an optimization, because
-   * property lookup is faster than attribute access.
-   */
-  JSACTION: "__jsaction",
-  /**
-   * The owner property references an a logical owner for a DOM node. JSAction
-   * will follow this reference instead of parentNode when traversing the DOM
-   * to find jsaction attributes. This allows overlaying a logical structure
-   * over a document where the DOM structure can't reflect that structure.
-   */
-  OWNER: "__owner"
-};
-var parseCache = {};
-function get(element) {
-  return element[Property.JSACTION];
-}
-function set(element, actionMap) {
-  element[Property.JSACTION] = actionMap;
-}
-function getParsed(text) {
-  return parseCache[text];
-}
-function setParsed(text, parsed) {
-  parseCache[text] = parsed;
-}
-var EventType = {
-  /**
-   * Mouse middle click, introduced in Chrome 55 and not yet supported on
-   * other browsers.
-   */
-  AUXCLICK: "auxclick",
-  /**
-   * The change event fired by browsers when the `value` attribute of input,
-   * select, and textarea elements are changed.
-   */
-  CHANGE: "change",
-  /**
-   * The click event. In addEvent() refers to all click events, in the
-   * jsaction attribute it refers to the unmodified click and Enter/Space
-   * keypress events.  In the latter case, a jsaction click will be triggered,
-   * for accessibility reasons.  See clickmod and clickonly, below.
-   */
-  CLICK: "click",
-  /**
-   * Specifies the jsaction for a modified click event (i.e. a mouse
-   * click with the modifier key Cmd/Ctrl pressed). This event isn't
-   * separately enabled in addEvent(), because in the DOM, it's just a
-   * click event.
-   */
-  CLICKMOD: "clickmod",
-  /**
-   * Specifies the jsaction for a click-only event.  Click-only doesn't take
-   * into account the case where an element with focus receives an Enter/Space
-   * keypress.  This event isn't separately enabled in addEvent().
-   */
-  CLICKONLY: "clickonly",
-  /**
-   * The dblclick event.
-   */
-  DBLCLICK: "dblclick",
-  /**
-   * Focus doesn't bubble, but you can use it in addEvent() and
-   * jsaction anyway. EventContract does the right thing under the
-   * hood.
-   */
-  FOCUS: "focus",
-  /**
-   * This event only exists in IE. For addEvent() and jsaction, use
-   * focus instead; EventContract does the right thing even though
-   * focus doesn't bubble.
-   */
-  FOCUSIN: "focusin",
-  /**
-   * Analog to focus.
-   */
-  BLUR: "blur",
-  /**
-   * Analog to focusin.
-   */
-  FOCUSOUT: "focusout",
-  /**
-   * Submit doesn't bubble, so it cannot be used with event
-   * contract. However, the browser helpfully fires a click event on
-   * the submit button of a form (even if the form is not submitted by
-   * a click on the submit button). So you should handle click on the
-   * submit button instead.
-   */
-  SUBMIT: "submit",
-  /**
-   * The keydown event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keydown event. It represents click actions in non-Gecko
-   * browsers.
-   */
-  KEYDOWN: "keydown",
-  /**
-   * The keypress event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keypress event. It represents click actions in Gecko browsers.
-   */
-  KEYPRESS: "keypress",
-  /**
-   * The keyup event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keyup event. It represents click actions in non-Gecko
-   * browsers.
-   */
-  KEYUP: "keyup",
-  /**
-   * The mouseup event. Can either be used directly or used implicitly to
-   * capture mouseup events. In addEvent(), it represents a regular DOM
-   * mouseup event.
-   */
-  MOUSEUP: "mouseup",
-  /**
-   * The mousedown event. Can either be used directly or used implicitly to
-   * capture mouseenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  MOUSEDOWN: "mousedown",
-  /**
-   * The mouseover event. Can either be used directly or used implicitly to
-   * capture mouseenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  MOUSEOVER: "mouseover",
-  /**
-   * The mouseout event. Can either be used directly or used implicitly to
-   * capture mouseover events. In addEvent(), it represents a regular DOM
-   * mouseout event.
-   */
-  MOUSEOUT: "mouseout",
-  /**
-   * The mouseenter event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  MOUSEENTER: "mouseenter",
-  /**
-   * The mouseleave event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  MOUSELEAVE: "mouseleave",
-  /**
-   * The mousemove event.
-   */
-  MOUSEMOVE: "mousemove",
-  /**
-   * The pointerup event. Can either be used directly or used implicitly to
-   * capture pointerup events. In addEvent(), it represents a regular DOM
-   * pointerup event.
-   */
-  POINTERUP: "pointerup",
-  /**
-   * The pointerdown event. Can either be used directly or used implicitly to
-   * capture pointerenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  POINTERDOWN: "pointerdown",
-  /**
-   * The pointerover event. Can either be used directly or used implicitly to
-   * capture pointerenter events. In addEvent(), it represents a regular DOM
-   * pointerover event.
-   */
-  POINTEROVER: "pointerover",
-  /**
-   * The pointerout event. Can either be used directly or used implicitly to
-   * capture pointerover events. In addEvent(), it represents a regular DOM
-   * pointerout event.
-   */
-  POINTEROUT: "pointerout",
-  /**
-   * The pointerenter event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  POINTERENTER: "pointerenter",
-  /**
-   * The pointerleave event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  POINTERLEAVE: "pointerleave",
-  /**
-   * The pointermove event.
-   */
-  POINTERMOVE: "pointermove",
-  /**
-   * The pointercancel event.
-   */
-  POINTERCANCEL: "pointercancel",
-  /**
-   * The gotpointercapture event is fired when
-   * Element.setPointerCapture(pointerId) is called on a mouse input, or
-   * implicitly when a touch input begins.
-   */
-  GOTPOINTERCAPTURE: "gotpointercapture",
-  /**
-   * The lostpointercapture event is fired when
-   * Element.releasePointerCapture(pointerId) is called, or implicitly after a
-   * touch input ends.
-   */
-  LOSTPOINTERCAPTURE: "lostpointercapture",
-  /**
-   * The error event. The error event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing under
-   * the hood (except in IE8 which does not use error events).
-   */
-  ERROR: "error",
-  /**
-   * The load event. The load event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing
-   * under the hood.
-   */
-  LOAD: "load",
-  /**
-   * The unload event.
-   */
-  UNLOAD: "unload",
-  /**
-   * The touchstart event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHSTART: "touchstart",
-  /**
-   * The touchend event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHEND: "touchend",
-  /**
-   * The touchmove event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHMOVE: "touchmove",
-  /**
-   * The input event.
-   */
-  INPUT: "input",
-  /**
-   * The scroll event.
-   */
-  SCROLL: "scroll",
-  /**
-   * The toggle event. The toggle event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing
-   * under the hood.
-   */
-  TOGGLE: "toggle",
-  /**
-   * A custom event. The actual custom event type is declared as the 'type'
-   * field in the event details. Supported in Firefox 6+, IE 9+, and all Chrome
-   * versions.
-   *
-   * This is an internal name. Users should use jsaction's fireCustomEvent to
-   * fire custom events instead of relying on this type to create them.
-   */
-  CUSTOM: "_custom"
-};
-var MOUSE_SPECIAL_EVENT_TYPES = [EventType.MOUSEENTER, EventType.MOUSELEAVE, "pointerenter", "pointerleave"];
-var BUBBLE_EVENT_TYPES = [
-  EventType.CLICK,
-  EventType.DBLCLICK,
-  EventType.FOCUSIN,
-  EventType.FOCUSOUT,
-  EventType.KEYDOWN,
-  EventType.KEYUP,
-  EventType.KEYPRESS,
-  EventType.MOUSEOVER,
-  EventType.MOUSEOUT,
-  EventType.SUBMIT,
-  EventType.TOUCHSTART,
-  EventType.TOUCHEND,
-  EventType.TOUCHMOVE,
-  "touchcancel",
-  "auxclick",
-  "change",
-  "compositionstart",
-  "compositionupdate",
-  "compositionend",
-  "beforeinput",
-  "input",
-  "select",
-  "copy",
-  "cut",
-  "paste",
-  "mousedown",
-  "mouseup",
-  "wheel",
-  "contextmenu",
-  "dragover",
-  "dragenter",
-  "dragleave",
-  "drop",
-  "dragstart",
-  "dragend",
-  "pointerdown",
-  "pointermove",
-  "pointerup",
-  "pointercancel",
-  "pointerover",
-  "pointerout",
-  "gotpointercapture",
-  "lostpointercapture",
-  // Video events.
-  "ended",
-  "loadedmetadata",
-  // Page visibility events.
-  "pagehide",
-  "pageshow",
-  "visibilitychange",
-  // Content visibility events.
-  "beforematch"
-];
-var CAPTURE_EVENT_TYPES = [EventType.FOCUS, EventType.BLUR, EventType.ERROR, EventType.LOAD, EventType.TOGGLE];
-var isCaptureEventType = (eventType) => CAPTURE_EVENT_TYPES.indexOf(eventType) >= 0;
-var EARLY_EVENT_TYPES = BUBBLE_EVENT_TYPES.concat(CAPTURE_EVENT_TYPES);
-var isEarlyEventType = (eventType) => EARLY_EVENT_TYPES.indexOf(eventType) >= 0;
-var MAC_ENTER = 3;
-var ENTER = 13;
-var SPACE = 32;
-var KeyCode = {
-  MAC_ENTER,
-  ENTER,
-  SPACE
-};
-function getBrowserEventType(eventType) {
-  if (eventType === EventType.MOUSEENTER) {
-    return EventType.MOUSEOVER;
-  } else if (eventType === EventType.MOUSELEAVE) {
-    return EventType.MOUSEOUT;
-  } else if (eventType === EventType.POINTERENTER) {
-    return EventType.POINTEROVER;
-  } else if (eventType === EventType.POINTERLEAVE) {
-    return EventType.POINTEROUT;
-  }
-  return eventType;
-}
-function addEventListener(element, eventType, handler, passive) {
-  let capture = false;
-  if (isCaptureEventType(eventType)) {
-    capture = true;
-  }
-  const options = typeof passive === "boolean" ? {
-    capture,
-    passive
-  } : capture;
-  element.addEventListener(eventType, handler, options);
-  return {
-    eventType,
-    handler,
-    capture,
-    passive
-  };
-}
-function removeEventListener(element, info) {
-  if (element.removeEventListener) {
-    const options = typeof info.passive === "boolean" ? {
-      capture: info.capture
-    } : info.capture;
-    element.removeEventListener(info.eventType, info.handler, options);
-  } else if (element.detachEvent) {
-    element.detachEvent(`on${info.eventType}`, info.handler);
-  }
-}
-function preventDefault(e) {
-  e.preventDefault ? e.preventDefault() : e.returnValue = false;
-}
-var isMac = typeof navigator !== "undefined" && /Macintosh/.test(navigator.userAgent);
-function isMiddleClick(e) {
-  return (
-    // `which` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    e.which === 2 || // `which` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    e.which == null && // `button` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    e.button === 4
-  );
-}
-function isModifiedClickEvent(e) {
-  return (
-    // `metaKey` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    isMac && e.metaKey || // `ctrlKey` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    !isMac && e.ctrlKey || isMiddleClick(e) || // `shiftKey` is an old DOM API.
-    // tslint:disable-next-line:no-any
-    e.shiftKey
-  );
-}
-var isWebKit = typeof navigator !== "undefined" && !/Opera/.test(navigator.userAgent) && /WebKit/.test(navigator.userAgent);
-var isIe = typeof navigator !== "undefined" && (/MSIE/.test(navigator.userAgent) || /Trident/.test(navigator.userAgent));
-var isGecko = typeof navigator !== "undefined" && !/Opera|WebKit/.test(navigator.userAgent) && /Gecko/.test(navigator.product);
-function isMouseSpecialEvent(e, type, element) {
-  const related = e.relatedTarget;
-  return (e.type === EventType.MOUSEOVER && type === EventType.MOUSEENTER || e.type === EventType.MOUSEOUT && type === EventType.MOUSELEAVE || e.type === EventType.POINTEROVER && type === EventType.POINTERENTER || e.type === EventType.POINTEROUT && type === EventType.POINTERLEAVE) && (!related || related !== element && !element.contains(related));
-}
-function createMouseSpecialEvent(e, target) {
-  const copy = {};
-  for (const property in e) {
-    if (property === "srcElement" || property === "target") {
-      continue;
-    }
-    const key = property;
-    const value = e[key];
-    if (typeof value === "function") {
-      continue;
-    }
-    copy[key] = value;
-  }
-  if (e.type === EventType.MOUSEOVER) {
-    copy["type"] = EventType.MOUSEENTER;
-  } else if (e.type === EventType.MOUSEOUT) {
-    copy["type"] = EventType.MOUSELEAVE;
-  } else if (e.type === EventType.POINTEROVER) {
-    copy["type"] = EventType.POINTERENTER;
-  } else {
-    copy["type"] = EventType.POINTERLEAVE;
-  }
-  copy["target"] = copy["srcElement"] = target;
-  copy["bubbles"] = false;
-  return copy;
-}
-var ACTION_KEY_TO_KEYCODE = {
-  "Enter": KeyCode.ENTER,
-  " ": KeyCode.SPACE
-};
-var IDENTIFIER_TO_KEY_TRIGGER_MAPPING = {
-  "A": KeyCode.ENTER,
-  "BUTTON": 0,
-  "CHECKBOX": KeyCode.SPACE,
-  "COMBOBOX": KeyCode.ENTER,
-  "FILE": 0,
-  "GRIDCELL": KeyCode.ENTER,
-  "LINK": KeyCode.ENTER,
-  "LISTBOX": KeyCode.ENTER,
-  "MENU": 0,
-  "MENUBAR": 0,
-  "MENUITEM": 0,
-  "MENUITEMCHECKBOX": 0,
-  "MENUITEMRADIO": 0,
-  "OPTION": 0,
-  "RADIO": KeyCode.SPACE,
-  "RADIOGROUP": KeyCode.SPACE,
-  "RESET": 0,
-  "SUBMIT": 0,
-  "SWITCH": KeyCode.SPACE,
-  "TAB": 0,
-  "TREE": KeyCode.ENTER,
-  "TREEITEM": KeyCode.ENTER
-};
-var isIos = typeof navigator !== "undefined" && /iPhone|iPad|iPod/.test(navigator.userAgent);
-var EventContractContainer = class {
-  element;
-  /**
-   * Array of event handlers and their corresponding event types that are
-   * installed on this container.
-   *
-   */
-  handlerInfos = [];
-  /**
-   * @param element The container Element.
-   */
-  constructor(element) {
-    this.element = element;
-  }
-  /**
-   * Installs the provided installer on the element owned by this container,
-   * and maintains a reference to resulting handler in order to remove it
-   * later if desired.
-   */
-  addEventListener(eventType, getHandler, passive) {
-    if (isIos) {
-      this.element.style.cursor = "pointer";
-    }
-    this.handlerInfos.push(addEventListener(this.element, eventType, getHandler(this.element), passive));
-  }
-  /**
-   * Removes all the handlers installed on this container.
-   */
-  cleanUp() {
-    for (let i = 0; i < this.handlerInfos.length; i++) {
-      removeEventListener(this.element, this.handlerInfos[i]);
-    }
-    this.handlerInfos = [];
-  }
-};
-var Char = {
-  /**
-   * The separator between the namespace and the action name in the
-   * jsaction attribute value.
-   */
-  NAMESPACE_ACTION_SEPARATOR: ".",
-  /**
-   * The separator between the event name and action in the jsaction
-   * attribute value.
-   */
-  EVENT_ACTION_SEPARATOR: ":"
-};
-function getEventType(eventInfo) {
-  return eventInfo.eventType;
-}
-function setEventType(eventInfo, eventType) {
-  eventInfo.eventType = eventType;
-}
-function getEvent(eventInfo) {
-  return eventInfo.event;
-}
-function setEvent(eventInfo, event) {
-  eventInfo.event = event;
-}
-function getTargetElement(eventInfo) {
-  return eventInfo.targetElement;
-}
-function setTargetElement(eventInfo, targetElement) {
-  eventInfo.targetElement = targetElement;
-}
-function getContainer(eventInfo) {
-  return eventInfo.eic;
-}
-function setContainer(eventInfo, container) {
-  eventInfo.eic = container;
-}
-function getTimestamp(eventInfo) {
-  return eventInfo.timeStamp;
-}
-function setTimestamp(eventInfo, timestamp2) {
-  eventInfo.timeStamp = timestamp2;
-}
-function getAction(eventInfo) {
-  return eventInfo.eia;
-}
-function setAction(eventInfo, actionName, actionElement) {
-  eventInfo.eia = [actionName, actionElement];
-}
-function unsetAction(eventInfo) {
-  eventInfo.eia = void 0;
-}
-function getActionElement(actionInfo) {
-  return actionInfo[1];
-}
-function getIsReplay(eventInfo) {
-  return eventInfo.eirp;
-}
-function setIsReplay(eventInfo, replay) {
-  eventInfo.eirp = replay;
-}
-function getResolved(eventInfo) {
-  return eventInfo.eir;
-}
-function setResolved(eventInfo, resolved2) {
-  eventInfo.eir = resolved2;
-}
-function cloneEventInfo(eventInfo) {
-  return {
-    eventType: eventInfo.eventType,
-    event: eventInfo.event,
-    targetElement: eventInfo.targetElement,
-    eic: eventInfo.eic,
-    eia: eventInfo.eia,
-    timeStamp: eventInfo.timeStamp,
-    eirp: eventInfo.eirp,
-    eiack: eventInfo.eiack,
-    eir: eventInfo.eir
-  };
-}
-function createEventInfoFromParameters(eventType, event, targetElement, container, timestamp2, action, isReplay, a11yClickKey) {
-  return {
-    eventType,
-    event,
-    targetElement,
-    eic: container,
-    timeStamp: timestamp2,
-    eia: action,
-    eirp: isReplay,
-    eiack: a11yClickKey
-  };
-}
-var EventInfoWrapper = class _EventInfoWrapper {
-  eventInfo;
-  constructor(eventInfo) {
-    this.eventInfo = eventInfo;
-  }
-  getEventType() {
-    return getEventType(this.eventInfo);
-  }
-  setEventType(eventType) {
-    setEventType(this.eventInfo, eventType);
-  }
-  getEvent() {
-    return getEvent(this.eventInfo);
-  }
-  setEvent(event) {
-    setEvent(this.eventInfo, event);
-  }
-  getTargetElement() {
-    return getTargetElement(this.eventInfo);
-  }
-  setTargetElement(targetElement) {
-    setTargetElement(this.eventInfo, targetElement);
-  }
-  getContainer() {
-    return getContainer(this.eventInfo);
-  }
-  setContainer(container) {
-    setContainer(this.eventInfo, container);
-  }
-  getTimestamp() {
-    return getTimestamp(this.eventInfo);
-  }
-  setTimestamp(timestamp2) {
-    setTimestamp(this.eventInfo, timestamp2);
-  }
-  getAction() {
-    const action = getAction(this.eventInfo);
-    if (!action) return void 0;
-    return {
-      name: action[0],
-      element: action[1]
-    };
-  }
-  setAction(action) {
-    if (!action) {
-      unsetAction(this.eventInfo);
-      return;
-    }
-    setAction(this.eventInfo, action.name, action.element);
-  }
-  getIsReplay() {
-    return getIsReplay(this.eventInfo);
-  }
-  setIsReplay(replay) {
-    setIsReplay(this.eventInfo, replay);
-  }
-  getResolved() {
-    return getResolved(this.eventInfo);
-  }
-  setResolved(resolved2) {
-    setResolved(this.eventInfo, resolved2);
-  }
-  clone() {
-    return new _EventInfoWrapper(cloneEventInfo(this.eventInfo));
-  }
-};
-var EMPTY_ACTION_MAP = {};
-var REGEXP_SEMICOLON = /\s*;\s*/;
-var DEFAULT_EVENT_TYPE = EventType.CLICK;
-var ActionResolver = class {
-  a11yClickSupport = false;
-  clickModSupport = true;
-  syntheticMouseEventSupport;
-  updateEventInfoForA11yClick = void 0;
-  preventDefaultForA11yClick = void 0;
-  populateClickOnlyAction = void 0;
-  constructor({
-    syntheticMouseEventSupport = false,
-    clickModSupport = true
-  } = {}) {
-    this.syntheticMouseEventSupport = syntheticMouseEventSupport;
-    this.clickModSupport = clickModSupport;
-  }
-  resolveEventType(eventInfo) {
-    if (this.clickModSupport && getEventType(eventInfo) === EventType.CLICK && isModifiedClickEvent(getEvent(eventInfo))) {
-      setEventType(eventInfo, EventType.CLICKMOD);
-    } else if (this.a11yClickSupport) {
-      this.updateEventInfoForA11yClick(eventInfo);
-    }
-  }
-  resolveAction(eventInfo) {
-    if (getResolved(eventInfo)) {
-      return;
-    }
-    this.populateAction(eventInfo, getTargetElement(eventInfo));
-    setResolved(eventInfo, true);
-  }
-  resolveParentAction(eventInfo) {
-    const action = getAction(eventInfo);
-    const actionElement = action && getActionElement(action);
-    unsetAction(eventInfo);
-    const parentNode = actionElement && this.getParentNode(actionElement);
-    if (!parentNode) {
-      return;
-    }
-    this.populateAction(eventInfo, parentNode);
-  }
-  /**
-   * Searches for a jsaction that the DOM event maps to and creates an
-   * object containing event information used for dispatching by
-   * jsaction.Dispatcher. This method populates the `action` and `actionElement`
-   * fields of the EventInfo object passed in by finding the first
-   * jsaction attribute above the target Node of the event, and below
-   * the container Node, that specifies a jsaction for the event
-   * type. If no such jsaction is found, then action is undefined.
-   *
-   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an
-   *    action is found on any `Element` in the path of the `Event`.
-   */
-  populateAction(eventInfo, currentTarget) {
-    let actionElement = currentTarget;
-    while (actionElement && actionElement !== getContainer(eventInfo)) {
-      if (actionElement.nodeType === Node.ELEMENT_NODE) {
-        this.populateActionOnElement(actionElement, eventInfo);
-      }
-      if (getAction(eventInfo)) {
-        break;
-      }
-      actionElement = this.getParentNode(actionElement);
-    }
-    const action = getAction(eventInfo);
-    if (!action) {
-      return;
-    }
-    if (this.a11yClickSupport) {
-      this.preventDefaultForA11yClick(eventInfo);
-    }
-    if (this.syntheticMouseEventSupport) {
-      if (getEventType(eventInfo) === EventType.MOUSEENTER || getEventType(eventInfo) === EventType.MOUSELEAVE || getEventType(eventInfo) === EventType.POINTERENTER || getEventType(eventInfo) === EventType.POINTERLEAVE) {
-        if (isMouseSpecialEvent(getEvent(eventInfo), getEventType(eventInfo), getActionElement(action))) {
-          const copiedEvent = createMouseSpecialEvent(getEvent(eventInfo), getActionElement(action));
-          setEvent(eventInfo, copiedEvent);
-          setTargetElement(eventInfo, getActionElement(action));
-        } else {
-          unsetAction(eventInfo);
-        }
-      }
-    }
-  }
-  /**
-   * Walk to the parent node, unless the node has a different owner in
-   * which case we walk to the owner. Attempt to walk to host of a
-   * shadow root if needed.
-   */
-  getParentNode(element) {
-    const owner = element[Property.OWNER];
-    if (owner) {
-      return owner;
-    }
-    const parentNode = element.parentNode;
-    if (parentNode?.nodeName === "#document-fragment") {
-      return parentNode?.host ?? null;
-    }
-    return parentNode;
-  }
-  /**
-   * Accesses the jsaction map on a node and retrieves the name of the
-   * action the given event is mapped to, if any. It parses the
-   * attribute value and stores it in a property on the node for
-   * subsequent retrieval without re-parsing and re-accessing the
-   * attribute.
-   *
-   * @param actionElement The DOM node to retrieve the jsaction map from.
-   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an
-   *    action is found on the `actionElement`.
-   */
-  populateActionOnElement(actionElement, eventInfo) {
-    const actionMap = this.parseActions(actionElement);
-    const actionName = actionMap[getEventType(eventInfo)];
-    if (actionName !== void 0) {
-      setAction(eventInfo, actionName, actionElement);
-    }
-    if (this.a11yClickSupport) {
-      this.populateClickOnlyAction(actionElement, eventInfo, actionMap);
-    }
-  }
-  /**
-   * Parses and caches an element's jsaction element into a map.
-   *
-   * This is primarily for internal use.
-   *
-   * @param actionElement The DOM node to retrieve the jsaction map from.
-   * @return Map from event to qualified name of the jsaction bound to it.
-   */
-  parseActions(actionElement) {
-    let actionMap = get(actionElement);
-    if (!actionMap) {
-      const jsactionAttribute = actionElement.getAttribute(Attribute.JSACTION);
-      if (!jsactionAttribute) {
-        actionMap = EMPTY_ACTION_MAP;
-        set(actionElement, actionMap);
-      } else {
-        actionMap = getParsed(jsactionAttribute);
-        if (!actionMap) {
-          actionMap = {};
-          const values = jsactionAttribute.split(REGEXP_SEMICOLON);
-          for (let idx = 0; idx < values.length; idx++) {
-            const value = values[idx];
-            if (!value) {
-              continue;
-            }
-            const colon = value.indexOf(Char.EVENT_ACTION_SEPARATOR);
-            const hasColon = colon !== -1;
-            const type = hasColon ? value.substr(0, colon).trim() : DEFAULT_EVENT_TYPE;
-            const action = hasColon ? value.substr(colon + 1).trim() : value;
-            actionMap[type] = action;
-          }
-          setParsed(jsactionAttribute, actionMap);
-        }
-        set(actionElement, actionMap);
-      }
-    }
-    return actionMap;
-  }
-  addA11yClickSupport(updateEventInfoForA11yClick, preventDefaultForA11yClick, populateClickOnlyAction) {
-    this.a11yClickSupport = true;
-    this.updateEventInfoForA11yClick = updateEventInfoForA11yClick;
-    this.preventDefaultForA11yClick = preventDefaultForA11yClick;
-    this.populateClickOnlyAction = populateClickOnlyAction;
-  }
-};
-var Restriction;
-(function(Restriction2) {
-  Restriction2[Restriction2["I_AM_THE_JSACTION_FRAMEWORK"] = 0] = "I_AM_THE_JSACTION_FRAMEWORK";
-})(Restriction || (Restriction = {}));
-var Dispatcher = class {
-  dispatchDelegate;
-  // The ActionResolver to use to resolve actions.
-  actionResolver;
-  /** The replayer function to be called when there are queued events. */
-  eventReplayer;
-  /** Whether the event replay is scheduled. */
-  eventReplayScheduled = false;
-  /** The queue of events. */
-  replayEventInfoWrappers = [];
-  /**
-   * Options are:
-   *   - `eventReplayer`: When the event contract dispatches replay events
-   *      to the Dispatcher, the Dispatcher collects them and in the next tick
-   *      dispatches them to the `eventReplayer`. Defaults to dispatching to `dispatchDelegate`.
-   * @param dispatchDelegate A function that should handle dispatching an `EventInfoWrapper` to handlers.
-   */
-  constructor(dispatchDelegate, {
-    actionResolver,
-    eventReplayer
-  } = {}) {
-    this.dispatchDelegate = dispatchDelegate;
-    this.actionResolver = actionResolver;
-    this.eventReplayer = eventReplayer;
-  }
-  /**
-   * Receives an event or the event queue from the EventContract. The event
-   * queue is copied and it attempts to replay.
-   * If event info is passed in it looks for an action handler that can handle
-   * the given event.  If there is no handler registered queues the event and
-   * checks if a loader is registered for the given namespace. If so, calls it.
-   *
-   * Alternatively, if in global dispatch mode, calls all registered global
-   * handlers for the appropriate event type.
-   *
-   * The three functionalities of this call are deliberately not split into
-   * three methods (and then declared as an abstract interface), because the
-   * interface is used by EventContract, which lives in a different jsbinary.
-   * Therefore the interface between the three is defined entirely in terms that
-   * are invariant under jscompiler processing (Function and Array, as opposed
-   * to a custom type with method names).
-   *
-   * @param eventInfo The info for the event that triggered this call or the
-   *     queue of events from EventContract.
-   */
-  dispatch(eventInfo) {
-    const eventInfoWrapper = new EventInfoWrapper(eventInfo);
-    this.actionResolver?.resolveEventType(eventInfo);
-    this.actionResolver?.resolveAction(eventInfo);
-    const action = eventInfoWrapper.getAction();
-    if (action && shouldPreventDefaultBeforeDispatching(action.element, eventInfoWrapper)) {
-      preventDefault(eventInfoWrapper.getEvent());
-    }
-    if (this.eventReplayer && eventInfoWrapper.getIsReplay()) {
-      this.scheduleEventInfoWrapperReplay(eventInfoWrapper);
-      return;
-    }
-    this.dispatchDelegate(eventInfoWrapper);
-  }
-  /**
-   * Schedules an `EventInfoWrapper` for replay. The replaying will happen in its own
-   * stack once the current flow cedes control. This is done to mimic
-   * browser event handling.
-   */
-  scheduleEventInfoWrapperReplay(eventInfoWrapper) {
-    this.replayEventInfoWrappers.push(eventInfoWrapper);
-    if (this.eventReplayScheduled) {
-      return;
-    }
-    this.eventReplayScheduled = true;
-    Promise.resolve().then(() => {
-      this.eventReplayScheduled = false;
-      this.eventReplayer(this.replayEventInfoWrappers);
-    });
-  }
-};
-function shouldPreventDefaultBeforeDispatching(actionElement, eventInfoWrapper) {
-  return actionElement.tagName === "A" && (eventInfoWrapper.getEventType() === EventType.CLICK || eventInfoWrapper.getEventType() === EventType.CLICKMOD);
-}
-var PROPAGATION_STOPPED_SYMBOL = Symbol.for("propagationStopped");
-var EventPhase = {
-  REPLAY: 101
-};
-var PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS = " Because event replay occurs after browser dispatch, `preventDefault` would have no effect. You can check whether an event is being replayed by accessing the event phase: `event.eventPhase === EventPhase.REPLAY`.";
-var PREVENT_DEFAULT_ERROR_MESSAGE = `\`preventDefault\` called during event replay.`;
-var COMPOSED_PATH_ERROR_MESSAGE_DETAILS = " Because event replay occurs after browser dispatch, `composedPath()` will be empty. Iterate parent nodes from `event.target` or `event.currentTarget` if you need to check elements in the event path.";
-var COMPOSED_PATH_ERROR_MESSAGE = `\`composedPath\` called during event replay.`;
-var EventDispatcher = class {
-  dispatchDelegate;
-  clickModSupport;
-  actionResolver;
-  dispatcher;
-  constructor(dispatchDelegate, clickModSupport = true) {
-    this.dispatchDelegate = dispatchDelegate;
-    this.clickModSupport = clickModSupport;
-    this.actionResolver = new ActionResolver({
-      clickModSupport
-    });
-    this.dispatcher = new Dispatcher((eventInfoWrapper) => {
-      this.dispatchToDelegate(eventInfoWrapper);
-    }, {
-      actionResolver: this.actionResolver
-    });
-  }
-  /**
-   * The entrypoint for the `EventContract` dispatch.
-   */
-  dispatch(eventInfo) {
-    this.dispatcher.dispatch(eventInfo);
-  }
-  /** Internal method that does basic disaptching. */
-  dispatchToDelegate(eventInfoWrapper) {
-    if (eventInfoWrapper.getIsReplay()) {
-      prepareEventForReplay(eventInfoWrapper);
-    }
-    prepareEventForBubbling(eventInfoWrapper);
-    while (eventInfoWrapper.getAction()) {
-      prepareEventForDispatch(eventInfoWrapper);
-      if (isCaptureEventType(eventInfoWrapper.getEventType()) && eventInfoWrapper.getAction().element !== eventInfoWrapper.getTargetElement()) {
-        return;
-      }
-      this.dispatchDelegate(eventInfoWrapper.getEvent(), eventInfoWrapper.getAction().name);
-      if (propagationStopped(eventInfoWrapper)) {
-        return;
-      }
-      this.actionResolver.resolveParentAction(eventInfoWrapper.eventInfo);
-    }
-  }
-};
-function prepareEventForBubbling(eventInfoWrapper) {
-  const event = eventInfoWrapper.getEvent();
-  const originalStopPropagation = eventInfoWrapper.getEvent().stopPropagation.bind(event);
-  const stopPropagation = () => {
-    event[PROPAGATION_STOPPED_SYMBOL] = true;
-    originalStopPropagation();
-  };
-  patchEventInstance(event, "stopPropagation", stopPropagation);
-  patchEventInstance(event, "stopImmediatePropagation", stopPropagation);
-}
-function propagationStopped(eventInfoWrapper) {
-  const event = eventInfoWrapper.getEvent();
-  return !!event[PROPAGATION_STOPPED_SYMBOL];
-}
-function prepareEventForReplay(eventInfoWrapper) {
-  const event = eventInfoWrapper.getEvent();
-  const target = eventInfoWrapper.getTargetElement();
-  const originalPreventDefault = event.preventDefault.bind(event);
-  patchEventInstance(event, "target", target);
-  patchEventInstance(event, "eventPhase", EventPhase.REPLAY);
-  patchEventInstance(event, "preventDefault", () => {
-    originalPreventDefault();
-    throw new Error(PREVENT_DEFAULT_ERROR_MESSAGE + (ngDevMode ? PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS : ""));
-  });
-  patchEventInstance(event, "composedPath", () => {
-    throw new Error(COMPOSED_PATH_ERROR_MESSAGE + (ngDevMode ? COMPOSED_PATH_ERROR_MESSAGE_DETAILS : ""));
-  });
-}
-function prepareEventForDispatch(eventInfoWrapper) {
-  const event = eventInfoWrapper.getEvent();
-  const currentTarget = eventInfoWrapper.getAction()?.element;
-  if (currentTarget) {
-    patchEventInstance(event, "currentTarget", currentTarget, {
-      // `currentTarget` is going to get reassigned every dispatch.
-      configurable: true
-    });
-  }
-}
-function patchEventInstance(event, property, value, {
-  configurable = false
-} = {}) {
-  Object.defineProperty(event, property, {
-    value,
-    configurable
-  });
-}
-function registerDispatcher$1(eventContract, dispatcher) {
-  eventContract.ecrd((eventInfo) => {
-    dispatcher.dispatch(eventInfo);
-  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);
-}
-function getQueuedEventInfos(earlyJsactionData) {
-  return earlyJsactionData?.q ?? [];
-}
-function removeAllEventListeners(earlyJsactionData) {
-  if (!earlyJsactionData) {
-    return;
-  }
-  removeEventListeners(earlyJsactionData.c, earlyJsactionData.et, earlyJsactionData.h);
-  removeEventListeners(earlyJsactionData.c, earlyJsactionData.etc, earlyJsactionData.h, true);
-}
-function removeEventListeners(container, eventTypes, earlyEventHandler, capture) {
-  for (let i = 0; i < eventTypes.length; i++) {
-    container.removeEventListener(
-      eventTypes[i],
-      earlyEventHandler,
-      /* useCapture */
-      capture
-    );
-  }
-}
-var MOUSE_SPECIAL_SUPPORT = false;
-var EventContract = class _EventContract {
-  static MOUSE_SPECIAL_SUPPORT = MOUSE_SPECIAL_SUPPORT;
-  containerManager;
-  /**
-   * The DOM events which this contract covers. Used to prevent double
-   * registration of event types. The value of the map is the
-   * internally created DOM event handler function that handles the
-   * DOM events. See addEvent().
-   *
-   */
-  eventHandlers = {};
-  browserEventTypeToExtraEventTypes = {};
-  /**
-   * The dispatcher function. Events are passed to this function for
-   * handling once it was set using the registerDispatcher() method. This is
-   * done because the function is passed from another jsbinary, so passing the
-   * instance and invoking the method here would require to leave the method
-   * unobfuscated.
-   */
-  dispatcher = null;
-  /**
-   * The list of suspended `EventInfo` that will be dispatched
-   * as soon as the `Dispatcher` is registered.
-   */
-  queuedEventInfos = [];
-  constructor(containerManager) {
-    this.containerManager = containerManager;
-  }
-  handleEvent(eventType, event, container) {
-    const eventInfo = createEventInfoFromParameters(
-      /* eventType= */
-      eventType,
-      /* event= */
-      event,
-      /* targetElement= */
-      event.target,
-      /* container= */
-      container,
-      /* timestamp= */
-      Date.now()
-    );
-    this.handleEventInfo(eventInfo);
-  }
-  /**
-   * Handle an `EventInfo`.
-   */
-  handleEventInfo(eventInfo) {
-    if (!this.dispatcher) {
-      setIsReplay(eventInfo, true);
-      this.queuedEventInfos?.push(eventInfo);
-      return;
-    }
-    this.dispatcher(eventInfo);
-  }
-  /**
-   * Enables jsaction handlers to be called for the event type given by
-   * name.
-   *
-   * If the event is already registered, this does nothing.
-   *
-   * @param prefixedEventType If supplied, this event is used in
-   *     the actual browser event registration instead of the name that is
-   *     exposed to jsaction. Use this if you e.g. want users to be able
-   *     to subscribe to jsaction="transitionEnd:foo" while the underlying
-   *     event is webkitTransitionEnd in one browser and mozTransitionEnd
-   *     in another.
-   *
-   * @param passive A boolean value that, if `true`, indicates that the event
-   *     handler will never call `preventDefault()`.
-   */
-  addEvent(eventType, prefixedEventType, passive) {
-    if (eventType in this.eventHandlers || !this.containerManager) {
-      return;
-    }
-    if (!_EventContract.MOUSE_SPECIAL_SUPPORT && MOUSE_SPECIAL_EVENT_TYPES.indexOf(eventType) >= 0) {
-      return;
-    }
-    const eventHandler = (eventType2, event, container) => {
-      this.handleEvent(eventType2, event, container);
-    };
-    this.eventHandlers[eventType] = eventHandler;
-    const browserEventType = getBrowserEventType(prefixedEventType || eventType);
-    if (browserEventType !== eventType) {
-      const eventTypes = this.browserEventTypeToExtraEventTypes[browserEventType] || [];
-      eventTypes.push(eventType);
-      this.browserEventTypeToExtraEventTypes[browserEventType] = eventTypes;
-    }
-    this.containerManager.addEventListener(browserEventType, (element) => {
-      return (event) => {
-        eventHandler(eventType, event, element);
-      };
-    }, passive);
-  }
-  /**
-   * Gets the queued early events and replay them using the appropriate handler
-   * in the provided event contract. Once all the events are replayed, it cleans
-   * up the early contract.
-   */
-  replayEarlyEvents(earlyJsactionData = window._ejsa) {
-    if (!earlyJsactionData) {
-      return;
-    }
-    this.replayEarlyEventInfos(earlyJsactionData.q);
-    removeAllEventListeners(earlyJsactionData);
-    delete window._ejsa;
-  }
-  /**
-   * Replays all the early `EventInfo` objects, dispatching them through the normal
-   * `EventContract` flow.
-   */
-  replayEarlyEventInfos(earlyEventInfos) {
-    for (let i = 0; i < earlyEventInfos.length; i++) {
-      const earlyEventInfo = earlyEventInfos[i];
-      const eventTypes = this.getEventTypesForBrowserEventType(earlyEventInfo.eventType);
-      for (let j = 0; j < eventTypes.length; j++) {
-        const eventInfo = cloneEventInfo(earlyEventInfo);
-        setEventType(eventInfo, eventTypes[j]);
-        this.handleEventInfo(eventInfo);
-      }
-    }
-  }
-  /**
-   * Returns all JSAction event types that have been registered for a given
-   * browser event type.
-   */
-  getEventTypesForBrowserEventType(browserEventType) {
-    const eventTypes = [];
-    if (this.eventHandlers[browserEventType]) {
-      eventTypes.push(browserEventType);
-    }
-    if (this.browserEventTypeToExtraEventTypes[browserEventType]) {
-      eventTypes.push(...this.browserEventTypeToExtraEventTypes[browserEventType]);
-    }
-    return eventTypes;
-  }
-  /**
-   * Returns the event handler function for a given event type.
-   */
-  handler(eventType) {
-    return this.eventHandlers[eventType];
-  }
-  /**
-   * Cleans up the event contract. This resets all of the `EventContract`'s
-   * internal state. Users are responsible for not using this `EventContract`
-   * after it has been cleaned up.
-   */
-  cleanUp() {
-    this.containerManager?.cleanUp();
-    this.containerManager = null;
-    this.eventHandlers = {};
-    this.browserEventTypeToExtraEventTypes = {};
-    this.dispatcher = null;
-    this.queuedEventInfos = [];
-  }
-  /**
-   * Register a dispatcher function. Event info of each event mapped to
-   * a jsaction is passed for handling to this callback. The queued
-   * events are passed as well to the dispatcher for later replaying
-   * once the dispatcher is registered. Clears the event queue to null.
-   *
-   * @param dispatcher The dispatcher function.
-   * @param restriction
-   */
-  registerDispatcher(dispatcher, restriction) {
-    this.ecrd(dispatcher, restriction);
-  }
-  /**
-   * Unrenamed alias for registerDispatcher. Necessary for any codebases that
-   * split the `EventContract` and `Dispatcher` code into different compilation
-   * units.
-   */
-  ecrd(dispatcher, restriction) {
-    this.dispatcher = dispatcher;
-    if (this.queuedEventInfos?.length) {
-      for (let i = 0; i < this.queuedEventInfos.length; i++) {
-        this.handleEventInfo(this.queuedEventInfos[i]);
-      }
-      this.queuedEventInfos = null;
-    }
-  }
-};
-function getAppScopedQueuedEventInfos(appId, dataContainer = window) {
-  return getQueuedEventInfos(dataContainer._ejsas?.[appId]);
-}
-function clearAppScopedEarlyEventContract(appId, dataContainer = window) {
-  if (!dataContainer._ejsas) {
-    return;
-  }
-  dataContainer._ejsas[appId] = void 0;
-}
-
-// node_modules/@angular/core/fesm2022/core.mjs
-var ERROR_DETAILS_PAGE_BASE_URL = "https://angular.dev/errors";
-var XSS_SECURITY_URL = "https://g.co/ng/security#xss";
-var RuntimeError = class extends Error {
-  code;
-  constructor(code, message) {
-    super(formatRuntimeError(code, message));
-    this.code = code;
-  }
-};
-function formatRuntimeError(code, message) {
-  const fullCode = `NG0${Math.abs(code)}`;
-  let errorMessage = `${fullCode}${message ? ": " + message : ""}`;
-  if (ngDevMode && code < 0) {
-    const addPeriodSeparator = !errorMessage.match(/[.,;!?\n]$/);
-    const separator = addPeriodSeparator ? "." : "";
-    errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;
-  }
-  return errorMessage;
-}
-var REQUIRED_UNSET_VALUE = Symbol("InputSignalNode#UNSET");
-var INPUT_SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, SIGNAL_NODE), {
-    transformFn: void 0,
-    applyValueToInputSignal(node, value) {
-      signalSetFn(node, value);
-    }
-  });
-})();
-var ɵINPUT_SIGNAL_BRAND_READ_TYPE = Symbol();
-var ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = Symbol();
-function createInputSignal(initialValue, options) {
-  const node = Object.create(INPUT_SIGNAL_NODE);
-  node.value = initialValue;
-  node.transformFn = options?.transform;
-  function inputValueFn() {
-    producerAccessed(node);
-    if (node.value === REQUIRED_UNSET_VALUE) {
-      throw new RuntimeError(-950, ngDevMode && "Input is required but no value is available yet.");
-    }
-    return node.value;
-  }
-  inputValueFn[SIGNAL] = node;
-  if (ngDevMode) {
-    inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;
-    node.debugName = options?.debugName;
-  }
-  return inputValueFn;
-}
-function noSideEffects(fn) {
-  return {
-    toString: fn
-  }.toString();
-}
-var ANNOTATIONS = "__annotations__";
-var PARAMETERS = "__parameters__";
-var PROP_METADATA = "__prop__metadata__";
-function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function DecoratorFactory(...args) {
-      if (this instanceof DecoratorFactory) {
-        metaCtor.call(this, ...args);
-        return this;
-      }
-      const annotationInstance = new DecoratorFactory(...args);
-      return function TypeDecorator(cls) {
-        if (typeFn) typeFn(cls, ...args);
-        const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {
-          value: []
-        })[ANNOTATIONS];
-        annotations.push(annotationInstance);
-        if (additionalProcessing) additionalProcessing(cls);
-        return cls;
-      };
-    }
-    if (parentClass) {
-      DecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    DecoratorFactory.prototype.ngMetadataName = name;
-    DecoratorFactory.annotationCls = DecoratorFactory;
-    return DecoratorFactory;
-  });
-}
-function makeMetadataCtor(props) {
-  return function ctor(...args) {
-    if (props) {
-      const values = props(...args);
-      for (const propName in values) {
-        this[propName] = values[propName];
-      }
-    }
-  };
-}
-function makeParamDecorator(name, props, parentClass) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function ParamDecoratorFactory(...args) {
-      if (this instanceof ParamDecoratorFactory) {
-        metaCtor.apply(this, args);
-        return this;
-      }
-      const annotationInstance = new ParamDecoratorFactory(...args);
-      ParamDecorator.annotation = annotationInstance;
-      return ParamDecorator;
-      function ParamDecorator(cls, unusedKey, index) {
-        const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {
-          value: []
-        })[PARAMETERS];
-        while (parameters.length <= index) {
-          parameters.push(null);
-        }
-        (parameters[index] = parameters[index] || []).push(annotationInstance);
-        return cls;
-      }
-    }
-    if (parentClass) {
-      ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    ParamDecoratorFactory.prototype.ngMetadataName = name;
-    ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
-    return ParamDecoratorFactory;
-  });
-}
-function makePropDecorator(name, props, parentClass, additionalProcessing) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function PropDecoratorFactory(...args) {
-      if (this instanceof PropDecoratorFactory) {
-        metaCtor.apply(this, args);
-        return this;
-      }
-      const decoratorInstance = new PropDecoratorFactory(...args);
-      function PropDecorator(target, name2) {
-        if (target === void 0) {
-          throw new Error("Standard Angular field decorators are not supported in JIT mode.");
-        }
-        const constructor = target.constructor;
-        const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {
-          value: {}
-        })[PROP_METADATA];
-        meta[name2] = meta.hasOwnProperty(name2) && meta[name2] || [];
-        meta[name2].unshift(decoratorInstance);
-        if (additionalProcessing) additionalProcessing(target, name2, ...args);
-      }
-      return PropDecorator;
-    }
-    if (parentClass) {
-      PropDecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    PropDecoratorFactory.prototype.ngMetadataName = name;
-    PropDecoratorFactory.annotationCls = PropDecoratorFactory;
-    return PropDecoratorFactory;
-  });
-}
-var _global = globalThis;
-function ngDevModeResetPerfCounters() {
-  const locationString = typeof location !== "undefined" ? location.toString() : "";
-  const newCounters = {
-    namedConstructors: locationString.indexOf("ngDevMode=namedConstructors") != -1,
-    firstCreatePass: 0,
-    tNode: 0,
-    tView: 0,
-    rendererCreateTextNode: 0,
-    rendererSetText: 0,
-    rendererCreateElement: 0,
-    rendererAddEventListener: 0,
-    rendererSetAttribute: 0,
-    rendererRemoveAttribute: 0,
-    rendererSetProperty: 0,
-    rendererSetClassName: 0,
-    rendererAddClass: 0,
-    rendererRemoveClass: 0,
-    rendererSetStyle: 0,
-    rendererRemoveStyle: 0,
-    rendererDestroy: 0,
-    rendererDestroyNode: 0,
-    rendererMoveNode: 0,
-    rendererRemoveNode: 0,
-    rendererAppendChild: 0,
-    rendererInsertBefore: 0,
-    rendererCreateComment: 0,
-    hydratedNodes: 0,
-    hydratedComponents: 0,
-    dehydratedViewsRemoved: 0,
-    dehydratedViewsCleanupRuns: 0,
-    componentsSkippedHydration: 0,
-    deferBlocksWithIncrementalHydration: 0
-  };
-  const allowNgDevModeTrue = locationString.indexOf("ngDevMode=false") === -1;
-  if (!allowNgDevModeTrue) {
-    _global["ngDevMode"] = false;
-  } else {
-    if (typeof _global["ngDevMode"] !== "object") {
-      _global["ngDevMode"] = {};
-    }
-    Object.assign(_global["ngDevMode"], newCounters);
-  }
-  return newCounters;
-}
-function initNgDevMode() {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (typeof ngDevMode !== "object" || Object.keys(ngDevMode).length === 0) {
-      ngDevModeResetPerfCounters();
-    }
-    return typeof ngDevMode !== "undefined" && !!ngDevMode;
-  }
-  return false;
-}
-function getClosureSafeProperty(objWithPropertyToExtract) {
-  for (let key in objWithPropertyToExtract) {
-    if (objWithPropertyToExtract[key] === getClosureSafeProperty) {
-      return key;
-    }
-  }
-  throw Error("Could not find renamed property on target object.");
-}
-function fillProperties(target, source) {
-  for (const key in source) {
-    if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
-      target[key] = source[key];
-    }
-  }
-}
-function stringify(token) {
-  if (typeof token === "string") {
-    return token;
-  }
-  if (Array.isArray(token)) {
-    return "[" + token.map(stringify).join(", ") + "]";
-  }
-  if (token == null) {
-    return "" + token;
-  }
-  if (token.overriddenName) {
-    return `${token.overriddenName}`;
-  }
-  if (token.name) {
-    return `${token.name}`;
-  }
-  const res = token.toString();
-  if (res == null) {
-    return "" + res;
-  }
-  const newLineIndex = res.indexOf("\n");
-  return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
-}
-function concatStringsWithSpace(before, after) {
-  return before == null || before === "" ? after === null ? "" : after : after == null || after === "" ? before : before + " " + after;
-}
-function truncateMiddle(str, maxLength = 100) {
-  if (!str || maxLength < 1 || str.length <= maxLength) return str;
-  if (maxLength == 1) return str.substring(0, 1) + "...";
-  const halfLimit = Math.round(maxLength / 2);
-  return str.substring(0, halfLimit) + "..." + str.substring(str.length - halfLimit);
-}
-var __forward_ref__ = getClosureSafeProperty({
-  __forward_ref__: getClosureSafeProperty
-});
-function forwardRef(forwardRefFn) {
-  forwardRefFn.__forward_ref__ = forwardRef;
-  forwardRefFn.toString = function() {
-    return stringify(this());
-  };
-  return forwardRefFn;
-}
-function resolveForwardRef(type) {
-  return isForwardRef(type) ? type() : type;
-}
-function isForwardRef(fn) {
-  return typeof fn === "function" && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;
-}
-function assertNumber(actual, msg) {
-  if (!(typeof actual === "number")) {
-    throwError2(msg, typeof actual, "number", "===");
-  }
-}
-function assertNumberInRange(actual, minInclusive, maxInclusive) {
-  assertNumber(actual, "Expected a number");
-  assertLessThanOrEqual(actual, maxInclusive, "Expected number to be less than or equal to");
-  assertGreaterThanOrEqual(actual, minInclusive, "Expected number to be greater than or equal to");
-}
-function assertString(actual, msg) {
-  if (!(typeof actual === "string")) {
-    throwError2(msg, actual === null ? "null" : typeof actual, "string", "===");
-  }
-}
-function assertFunction(actual, msg) {
-  if (!(typeof actual === "function")) {
-    throwError2(msg, actual === null ? "null" : typeof actual, "function", "===");
-  }
-}
-function assertEqual(actual, expected, msg) {
-  if (!(actual == expected)) {
-    throwError2(msg, actual, expected, "==");
-  }
-}
-function assertNotEqual(actual, expected, msg) {
-  if (!(actual != expected)) {
-    throwError2(msg, actual, expected, "!=");
-  }
-}
-function assertSame(actual, expected, msg) {
-  if (!(actual === expected)) {
-    throwError2(msg, actual, expected, "===");
-  }
-}
-function assertNotSame(actual, expected, msg) {
-  if (!(actual !== expected)) {
-    throwError2(msg, actual, expected, "!==");
-  }
-}
-function assertLessThan(actual, expected, msg) {
-  if (!(actual < expected)) {
-    throwError2(msg, actual, expected, "<");
-  }
-}
-function assertLessThanOrEqual(actual, expected, msg) {
-  if (!(actual <= expected)) {
-    throwError2(msg, actual, expected, "<=");
-  }
-}
-function assertGreaterThan(actual, expected, msg) {
-  if (!(actual > expected)) {
-    throwError2(msg, actual, expected, ">");
-  }
-}
-function assertGreaterThanOrEqual(actual, expected, msg) {
-  if (!(actual >= expected)) {
-    throwError2(msg, actual, expected, ">=");
-  }
-}
-function assertDefined(actual, msg) {
-  if (actual == null) {
-    throwError2(msg, actual, null, "!=");
-  }
-}
-function throwError2(msg, actual, expected, comparison) {
-  throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? "" : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));
-}
-function assertDomNode(node) {
-  if (!(node instanceof Node)) {
-    throwError2(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);
-  }
-}
-function assertElement(node) {
-  if (!(node instanceof Element)) {
-    throwError2(`The provided value must be an element but got ${stringify(node)}`);
-  }
-}
-function assertIndexInRange(arr, index) {
-  assertDefined(arr, "Array must be defined.");
-  const maxLen = arr.length;
-  if (index < 0 || index >= maxLen) {
-    throwError2(`Index expected to be less than ${maxLen} but got ${index}`);
-  }
-}
-function assertOneOf(value, ...validValues) {
-  if (validValues.indexOf(value) !== -1) return true;
-  throwError2(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
-}
-function assertNotReactive(fn) {
-  if (getActiveConsumer() !== null) {
-    throwError2(`${fn}() should never be called in a reactive context.`);
-  }
-}
-function ɵɵdefineInjectable(opts) {
-  return {
-    token: opts.token,
-    providedIn: opts.providedIn || null,
-    factory: opts.factory,
-    value: void 0
-  };
-}
-var defineInjectable = ɵɵdefineInjectable;
-function ɵɵdefineInjector(options) {
-  return {
-    providers: options.providers || [],
-    imports: options.imports || []
-  };
-}
-function getInjectableDef(type) {
-  return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);
-}
-function isInjectable(type) {
-  return getInjectableDef(type) !== null;
-}
-function getOwnDefinition(type, field) {
-  return type.hasOwnProperty(field) ? type[field] : null;
-}
-function getInheritedInjectableDef(type) {
-  const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);
-  if (def) {
-    ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token "${type.name}" that inherits its @Injectable decorator but does not provide one itself.
-This will become an error in a future version of Angular. Please add @Injectable() to the "${type.name}" class.`);
-    return def;
-  } else {
-    return null;
-  }
-}
-function getInjectorDef(type) {
-  return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ? type[NG_INJ_DEF] : null;
-}
-var NG_PROV_DEF = getClosureSafeProperty({
-  ɵprov: getClosureSafeProperty
-});
-var NG_INJ_DEF = getClosureSafeProperty({
-  ɵinj: getClosureSafeProperty
-});
-var NG_INJECTABLE_DEF = getClosureSafeProperty({
-  ngInjectableDef: getClosureSafeProperty
-});
-var NG_INJECTOR_DEF = getClosureSafeProperty({
-  ngInjectorDef: getClosureSafeProperty
-});
-var InjectionToken = class {
-  _desc;
-  /** @internal */
-  ngMetadataName = "InjectionToken";
-  ɵprov;
-  /**
-   * @param _desc   Description for the token,
-   *                used only for debugging purposes,
-   *                it should but does not need to be unique
-   * @param options Options for the token's usage, as described above
-   */
-  constructor(_desc, options) {
-    this._desc = _desc;
-    this.ɵprov = void 0;
-    if (typeof options == "number") {
-      (typeof ngDevMode === "undefined" || ngDevMode) && assertLessThan(options, 0, "Only negative numbers are supported here");
-      this.__NG_ELEMENT_ID__ = options;
-    } else if (options !== void 0) {
-      this.ɵprov = ɵɵdefineInjectable({
-        token: this,
-        providedIn: options.providedIn || "root",
-        factory: options.factory
-      });
-    }
-  }
-  /**
-   * @internal
-   */
-  get multi() {
-    return this;
-  }
-  toString() {
-    return `InjectionToken ${this._desc}`;
-  }
-};
-var _injectorProfilerContext;
-function getInjectorProfilerContext() {
-  !ngDevMode && throwError2("getInjectorProfilerContext should never be called in production mode");
-  return _injectorProfilerContext;
-}
-function setInjectorProfilerContext(context2) {
-  !ngDevMode && throwError2("setInjectorProfilerContext should never be called in production mode");
-  const previous = _injectorProfilerContext;
-  _injectorProfilerContext = context2;
-  return previous;
-}
-var injectorProfilerCallback = null;
-var setInjectorProfiler = (injectorProfiler2) => {
-  !ngDevMode && throwError2("setInjectorProfiler should never be called in production mode");
-  injectorProfilerCallback = injectorProfiler2;
-};
-function injectorProfiler(event) {
-  !ngDevMode && throwError2("Injector profiler should never be called in production mode");
-  if (injectorProfilerCallback != null) {
-    injectorProfilerCallback(event);
-  }
-}
-function emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {
-  !ngDevMode && throwError2("Injector profiler should never be called in production mode");
-  let token;
-  if (typeof eventProvider === "function") {
-    token = eventProvider;
-  } else if (eventProvider instanceof InjectionToken) {
-    token = eventProvider;
-  } else {
-    token = resolveForwardRef(eventProvider.provide);
-  }
-  let provider = eventProvider;
-  if (eventProvider instanceof InjectionToken) {
-    provider = eventProvider.ɵprov || eventProvider;
-  }
-  injectorProfiler({
-    type: 2,
-    context: getInjectorProfilerContext(),
-    providerRecord: {
-      token,
-      provider,
-      isViewProvider
-    }
-  });
-}
-function emitInstanceCreatedByInjectorEvent(instance) {
-  !ngDevMode && throwError2("Injector profiler should never be called in production mode");
-  injectorProfiler({
-    type: 1,
-    context: getInjectorProfilerContext(),
-    instance: {
-      value: instance
-    }
-  });
-}
-function emitInjectEvent(token, value, flags) {
-  !ngDevMode && throwError2("Injector profiler should never be called in production mode");
-  injectorProfiler({
-    type: 0,
-    context: getInjectorProfilerContext(),
-    service: {
-      token,
-      value,
-      flags
-    }
-  });
-}
-function runInInjectorProfilerContext(injector, token, callback) {
-  !ngDevMode && throwError2("runInInjectorProfilerContext should never be called in production mode");
-  const prevInjectContext = setInjectorProfilerContext({
-    injector,
-    token
-  });
-  try {
-    callback();
-  } finally {
-    setInjectorProfilerContext(prevInjectContext);
-  }
-}
-function isEnvironmentProviders(value) {
-  return value && !!value.ɵproviders;
-}
-var NG_COMP_DEF = getClosureSafeProperty({
-  ɵcmp: getClosureSafeProperty
-});
-var NG_DIR_DEF = getClosureSafeProperty({
-  ɵdir: getClosureSafeProperty
-});
-var NG_PIPE_DEF = getClosureSafeProperty({
-  ɵpipe: getClosureSafeProperty
-});
-var NG_MOD_DEF = getClosureSafeProperty({
-  ɵmod: getClosureSafeProperty
-});
-var NG_FACTORY_DEF = getClosureSafeProperty({
-  ɵfac: getClosureSafeProperty
-});
-var NG_ELEMENT_ID = getClosureSafeProperty({
-  __NG_ELEMENT_ID__: getClosureSafeProperty
-});
-var NG_ENV_ID = getClosureSafeProperty({
-  __NG_ENV_ID__: getClosureSafeProperty
-});
-function renderStringify(value) {
-  if (typeof value === "string") return value;
-  if (value == null) return "";
-  return String(value);
-}
-function stringifyForError(value) {
-  if (typeof value === "function") return value.name || value.toString();
-  if (typeof value === "object" && value != null && typeof value.type === "function") {
-    return value.type.name || value.type.toString();
-  }
-  return renderStringify(value);
-}
-function debugStringifyTypeForError(type) {
-  let componentDef = type[NG_COMP_DEF] || null;
-  if (componentDef !== null && componentDef.debugInfo) {
-    return stringifyTypeFromDebugInfo(componentDef.debugInfo);
-  }
-  return stringifyForError(type);
-}
-function stringifyTypeFromDebugInfo(debugInfo) {
-  if (!debugInfo.filePath || !debugInfo.lineNumber) {
-    return debugInfo.className;
-  } else {
-    return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;
-  }
-}
-function throwCyclicDependencyError(token, path) {
-  const depPath = path ? `. Dependency path: ${path.join(" > ")} > ${token}` : "";
-  throw new RuntimeError(-200, ngDevMode ? `Circular dependency in DI detected for ${token}${depPath}` : token);
-}
-function throwMixedMultiProviderError() {
-  throw new Error(`Cannot mix multi providers and regular providers`);
-}
-function throwInvalidProviderError(ngModuleType, providers, provider) {
-  if (ngModuleType && providers) {
-    const providerDetail = providers.map((v) => v == provider ? "?" + provider + "?" : "...");
-    throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(", ")}]`);
-  } else if (isEnvironmentProviders(provider)) {
-    if (provider.ɵfromNgModule) {
-      throw new RuntimeError(207, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);
-    } else {
-      throw new RuntimeError(207, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);
-    }
-  } else {
-    throw new Error("Invalid provider");
-  }
-}
-function throwProviderNotFoundError(token, injectorName) {
-  const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ""}`;
-  throw new RuntimeError(-201, errorMessage);
-}
-var InjectFlags;
-(function(InjectFlags2) {
-  InjectFlags2[InjectFlags2["Default"] = 0] = "Default";
-  InjectFlags2[InjectFlags2["Host"] = 1] = "Host";
-  InjectFlags2[InjectFlags2["Self"] = 2] = "Self";
-  InjectFlags2[InjectFlags2["SkipSelf"] = 4] = "SkipSelf";
-  InjectFlags2[InjectFlags2["Optional"] = 8] = "Optional";
-})(InjectFlags || (InjectFlags = {}));
-var _injectImplementation;
-function getInjectImplementation() {
-  return _injectImplementation;
-}
-function setInjectImplementation(impl) {
-  const previous = _injectImplementation;
-  _injectImplementation = impl;
-  return previous;
-}
-function injectRootLimpMode(token, notFoundValue, flags) {
-  const injectableDef = getInjectableDef(token);
-  if (injectableDef && injectableDef.providedIn == "root") {
-    return injectableDef.value === void 0 ? injectableDef.value = injectableDef.factory() : injectableDef.value;
-  }
-  if (flags & InjectFlags.Optional) return null;
-  if (notFoundValue !== void 0) return notFoundValue;
-  throwProviderNotFoundError(token, "Injector");
-}
-function assertInjectImplementationNotEqual(fn) {
-  ngDevMode && assertNotEqual(_injectImplementation, fn, "Calling ɵɵinject would cause infinite recursion");
-}
-var _THROW_IF_NOT_FOUND = {};
-var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
-var DI_DECORATOR_FLAG = "__NG_DI_FLAG__";
-var NG_TEMP_TOKEN_PATH = "ngTempTokenPath";
-var NG_TOKEN_PATH = "ngTokenPath";
-var NEW_LINE = /\n/gm;
-var NO_NEW_LINE = "ɵ";
-var SOURCE = "__source";
-var _currentInjector = void 0;
-function getCurrentInjector() {
-  return _currentInjector;
-}
-function setCurrentInjector(injector) {
-  const former = _currentInjector;
-  _currentInjector = injector;
-  return former;
-}
-function injectInjectorOnly(token, flags = InjectFlags.Default) {
-  if (_currentInjector === void 0) {
-    throw new RuntimeError(-203, ngDevMode && `inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
-  } else if (_currentInjector === null) {
-    return injectRootLimpMode(token, void 0, flags);
-  } else {
-    const value = _currentInjector.get(token, flags & InjectFlags.Optional ? null : void 0, flags);
-    ngDevMode && emitInjectEvent(token, value, flags);
-    return value;
-  }
-}
-function ɵɵinject(token, flags = InjectFlags.Default) {
-  return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
-}
-function ɵɵinvalidFactoryDep(index) {
-  throw new RuntimeError(202, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.
-This can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.
-
-Please check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);
-}
-function inject(token, flags = InjectFlags.Default) {
-  return ɵɵinject(token, convertToBitFlags(flags));
-}
-function convertToBitFlags(flags) {
-  if (typeof flags === "undefined" || typeof flags === "number") {
-    return flags;
-  }
-  return 0 | // comment to force a line break in the formatter
-  (flags.optional && 8) | (flags.host && 1) | (flags.self && 2) | (flags.skipSelf && 4);
-}
-function injectArgs(types) {
-  const args = [];
-  for (let i = 0; i < types.length; i++) {
-    const arg = resolveForwardRef(types[i]);
-    if (Array.isArray(arg)) {
-      if (arg.length === 0) {
-        throw new RuntimeError(900, ngDevMode && "Arguments array must have arguments.");
-      }
-      let type = void 0;
-      let flags = InjectFlags.Default;
-      for (let j = 0; j < arg.length; j++) {
-        const meta = arg[j];
-        const flag = getInjectFlag(meta);
-        if (typeof flag === "number") {
-          if (flag === -1) {
-            type = meta.token;
-          } else {
-            flags |= flag;
-          }
-        } else {
-          type = meta;
-        }
-      }
-      args.push(ɵɵinject(type, flags));
-    } else {
-      args.push(ɵɵinject(arg));
-    }
-  }
-  return args;
-}
-function attachInjectFlag(decorator, flag) {
-  decorator[DI_DECORATOR_FLAG] = flag;
-  decorator.prototype[DI_DECORATOR_FLAG] = flag;
-  return decorator;
-}
-function getInjectFlag(token) {
-  return token[DI_DECORATOR_FLAG];
-}
-function catchInjectorError(e, token, injectorErrorName, source) {
-  const tokenPath = e[NG_TEMP_TOKEN_PATH];
-  if (token[SOURCE]) {
-    tokenPath.unshift(token[SOURCE]);
-  }
-  e.message = formatError("\n" + e.message, tokenPath, injectorErrorName, source);
-  e[NG_TOKEN_PATH] = tokenPath;
-  e[NG_TEMP_TOKEN_PATH] = null;
-  throw e;
-}
-function formatError(text, obj, injectorErrorName, source = null) {
-  text = text && text.charAt(0) === "\n" && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;
-  let context2 = stringify(obj);
-  if (Array.isArray(obj)) {
-    context2 = obj.map(stringify).join(" -> ");
-  } else if (typeof obj === "object") {
-    let parts = [];
-    for (let key in obj) {
-      if (obj.hasOwnProperty(key)) {
-        let value = obj[key];
-        parts.push(key + ":" + (typeof value === "string" ? JSON.stringify(value) : stringify(value)));
-      }
-    }
-    context2 = `{${parts.join(", ")}}`;
-  }
-  return `${injectorErrorName}${source ? "(" + source + ")" : ""}[${context2}]: ${text.replace(NEW_LINE, "\n  ")}`;
-}
-var Inject = attachInjectFlag(
-  // Disable tslint because `DecoratorFlags` is a const enum which gets inlined.
-  makeParamDecorator("Inject", (token) => ({
-    token
-  })),
-  -1
-  /* DecoratorFlags.Inject */
-);
-var Optional = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Optional"),
-    8
-    /* InternalInjectFlags.Optional */
-  )
-);
-var Self = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Self"),
-    2
-    /* InternalInjectFlags.Self */
-  )
-);
-var SkipSelf = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("SkipSelf"),
-    4
-    /* InternalInjectFlags.SkipSelf */
-  )
-);
-var Host = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Host"),
-    1
-    /* InternalInjectFlags.Host */
-  )
-);
-function getFactoryDef(type, throwNotFound) {
-  const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);
-  if (!hasFactoryDef && throwNotFound === true && ngDevMode) {
-    throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);
-  }
-  return hasFactoryDef ? type[NG_FACTORY_DEF] : null;
-}
-function arrayEquals(a, b, identityAccessor) {
-  if (a.length !== b.length) return false;
-  for (let i = 0; i < a.length; i++) {
-    let valueA = a[i];
-    let valueB = b[i];
-    if (identityAccessor) {
-      valueA = identityAccessor(valueA);
-      valueB = identityAccessor(valueB);
-    }
-    if (valueB !== valueA) {
-      return false;
-    }
-  }
-  return true;
-}
-function flatten(list) {
-  return list.flat(Number.POSITIVE_INFINITY);
-}
-function deepForEach(input2, fn) {
-  input2.forEach((value) => Array.isArray(value) ? deepForEach(value, fn) : fn(value));
-}
-function addToArray(arr, index, value) {
-  if (index >= arr.length) {
-    arr.push(value);
-  } else {
-    arr.splice(index, 0, value);
-  }
-}
-function removeFromArray(arr, index) {
-  if (index >= arr.length - 1) {
-    return arr.pop();
-  } else {
-    return arr.splice(index, 1)[0];
-  }
-}
-function newArray(size, value) {
-  const list = [];
-  for (let i = 0; i < size; i++) {
-    list.push(value);
-  }
-  return list;
-}
-function arraySplice(array, index, count2) {
-  const length = array.length - count2;
-  while (index < length) {
-    array[index] = array[index + count2];
-    index++;
-  }
-  while (count2--) {
-    array.pop();
-  }
-}
-function arrayInsert2(array, index, value1, value2) {
-  ngDevMode && assertLessThanOrEqual(index, array.length, "Can't insert past array end.");
-  let end = array.length;
-  if (end == index) {
-    array.push(value1, value2);
-  } else if (end === 1) {
-    array.push(value2, array[0]);
-    array[0] = value1;
-  } else {
-    end--;
-    array.push(array[end - 1], array[end]);
-    while (end > index) {
-      const previousEnd = end - 2;
-      array[end] = array[previousEnd];
-      end--;
-    }
-    array[index] = value1;
-    array[index + 1] = value2;
-  }
-}
-function keyValueArraySet(keyValueArray, key, value) {
-  let index = keyValueArrayIndexOf(keyValueArray, key);
-  if (index >= 0) {
-    keyValueArray[index | 1] = value;
-  } else {
-    index = ~index;
-    arrayInsert2(keyValueArray, index, key, value);
-  }
-  return index;
-}
-function keyValueArrayGet(keyValueArray, key) {
-  const index = keyValueArrayIndexOf(keyValueArray, key);
-  if (index >= 0) {
-    return keyValueArray[index | 1];
-  }
-  return void 0;
-}
-function keyValueArrayIndexOf(keyValueArray, key) {
-  return _arrayIndexOfSorted(keyValueArray, key, 1);
-}
-function _arrayIndexOfSorted(array, value, shift) {
-  ngDevMode && assertEqual(Array.isArray(array), true, "Expecting an array");
-  let start = 0;
-  let end = array.length >> shift;
-  while (end !== start) {
-    const middle = start + (end - start >> 1);
-    const current = array[middle << shift];
-    if (value === current) {
-      return middle << shift;
-    } else if (current > value) {
-      end = middle;
-    } else {
-      start = middle + 1;
-    }
-  }
-  return ~(end << shift);
-}
-var EMPTY_OBJ = {};
-var EMPTY_ARRAY = [];
-if ((typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode()) {
-  Object.freeze(EMPTY_OBJ);
-  Object.freeze(EMPTY_ARRAY);
-}
-var ENVIRONMENT_INITIALIZER = new InjectionToken(ngDevMode ? "ENVIRONMENT_INITIALIZER" : "");
-var INJECTOR$1 = new InjectionToken(
-  ngDevMode ? "INJECTOR" : "",
-  // Disable tslint because this is const enum which gets inlined not top level prop access.
-  // tslint:disable-next-line: no-toplevel-property-access
-  -1
-  /* InjectorMarkers.Injector */
-);
-var INJECTOR_DEF_TYPES = new InjectionToken(ngDevMode ? "INJECTOR_DEF_TYPES" : "");
-var NullInjector = class {
-  get(token, notFoundValue = THROW_IF_NOT_FOUND) {
-    if (notFoundValue === THROW_IF_NOT_FOUND) {
-      const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);
-      error.name = "NullInjectorError";
-      throw error;
-    }
-    return notFoundValue;
-  }
-};
-function getNgModuleDef(type, throwNotFound) {
-  const ngModuleDef = type[NG_MOD_DEF] || null;
-  if (!ngModuleDef && throwNotFound === true) {
-    throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);
-  }
-  return ngModuleDef;
-}
-function getComponentDef(type) {
-  return type[NG_COMP_DEF] || null;
-}
-function getDirectiveDef(type) {
-  return type[NG_DIR_DEF] || null;
-}
-function getPipeDef$1(type) {
-  return type[NG_PIPE_DEF] || null;
-}
-function isStandalone(type) {
-  const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-  return def !== null ? def.standalone : false;
-}
-function makeEnvironmentProviders(providers) {
-  return {
-    ɵproviders: providers
-  };
-}
-function provideEnvironmentInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: ENVIRONMENT_INITIALIZER,
-    multi: true,
-    useValue: initializerFn
-  }]);
-}
-function importProvidersFrom(...sources) {
-  return {
-    ɵproviders: internalImportProvidersFrom(true, sources),
-    ɵfromNgModule: true
-  };
-}
-function internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {
-  const providersOut = [];
-  const dedup = /* @__PURE__ */ new Set();
-  let injectorTypesWithProviders;
-  const collectProviders = (provider) => {
-    providersOut.push(provider);
-  };
-  deepForEach(sources, (source) => {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && checkForStandaloneCmp) {
-      const cmpDef = getComponentDef(source);
-      if (cmpDef?.standalone) {
-        throw new RuntimeError(800, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component "${stringifyForError(source)}"`);
-      }
-    }
-    const internalSource = source;
-    if (walkProviderTree(internalSource, collectProviders, [], dedup)) {
-      injectorTypesWithProviders ||= [];
-      injectorTypesWithProviders.push(internalSource);
-    }
-  });
-  if (injectorTypesWithProviders !== void 0) {
-    processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);
-  }
-  return providersOut;
-}
-function processInjectorTypesWithProviders(typesWithProviders, visitor) {
-  for (let i = 0; i < typesWithProviders.length; i++) {
-    const {
-      ngModule,
-      providers
-    } = typesWithProviders[i];
-    deepForEachProvider(providers, (provider) => {
-      ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);
-      visitor(provider, ngModule);
-    });
-  }
-}
-function walkProviderTree(container, visitor, parents, dedup) {
-  container = resolveForwardRef(container);
-  if (!container) return false;
-  let defType = null;
-  let injDef = getInjectorDef(container);
-  const cmpDef = !injDef && getComponentDef(container);
-  if (!injDef && !cmpDef) {
-    const ngModule = container.ngModule;
-    injDef = getInjectorDef(ngModule);
-    if (injDef) {
-      defType = ngModule;
-    } else {
-      return false;
-    }
-  } else if (cmpDef && !cmpDef.standalone) {
-    return false;
-  } else {
-    defType = container;
-  }
-  if (ngDevMode && parents.indexOf(defType) !== -1) {
-    const defName = stringify(defType);
-    const path = parents.map(stringify);
-    throwCyclicDependencyError(defName, path);
-  }
-  const isDuplicate = dedup.has(defType);
-  if (cmpDef) {
-    if (isDuplicate) {
-      return false;
-    }
-    dedup.add(defType);
-    if (cmpDef.dependencies) {
-      const deps = typeof cmpDef.dependencies === "function" ? cmpDef.dependencies() : cmpDef.dependencies;
-      for (const dep of deps) {
-        walkProviderTree(dep, visitor, parents, dedup);
-      }
-    }
-  } else if (injDef) {
-    if (injDef.imports != null && !isDuplicate) {
-      ngDevMode && parents.push(defType);
-      dedup.add(defType);
-      let importTypesWithProviders;
-      try {
-        deepForEach(injDef.imports, (imported) => {
-          if (walkProviderTree(imported, visitor, parents, dedup)) {
-            importTypesWithProviders ||= [];
-            importTypesWithProviders.push(imported);
-          }
-        });
-      } finally {
-        ngDevMode && parents.pop();
-      }
-      if (importTypesWithProviders !== void 0) {
-        processInjectorTypesWithProviders(importTypesWithProviders, visitor);
-      }
-    }
-    if (!isDuplicate) {
-      const factory = getFactoryDef(defType) || (() => new defType());
-      visitor({
-        provide: defType,
-        useFactory: factory,
-        deps: EMPTY_ARRAY
-      }, defType);
-      visitor({
-        provide: INJECTOR_DEF_TYPES,
-        useValue: defType,
-        multi: true
-      }, defType);
-      visitor({
-        provide: ENVIRONMENT_INITIALIZER,
-        useValue: () => ɵɵinject(defType),
-        multi: true
-      }, defType);
-    }
-    const defProviders = injDef.providers;
-    if (defProviders != null && !isDuplicate) {
-      const injectorType = container;
-      deepForEachProvider(defProviders, (provider) => {
-        ngDevMode && validateProvider(provider, defProviders, injectorType);
-        visitor(provider, injectorType);
-      });
-    }
-  } else {
-    return false;
-  }
-  return defType !== container && container.providers !== void 0;
-}
-function validateProvider(provider, providers, containerType) {
-  if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {
-    return;
-  }
-  const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));
-  if (!classRef) {
-    throwInvalidProviderError(containerType, providers, provider);
-  }
-}
-function deepForEachProvider(providers, fn) {
-  for (let provider of providers) {
-    if (isEnvironmentProviders(provider)) {
-      provider = provider.ɵproviders;
-    }
-    if (Array.isArray(provider)) {
-      deepForEachProvider(provider, fn);
-    } else {
-      fn(provider);
-    }
-  }
-}
-var USE_VALUE$1 = getClosureSafeProperty({
-  provide: String,
-  useValue: getClosureSafeProperty
-});
-function isValueProvider(value) {
-  return value !== null && typeof value == "object" && USE_VALUE$1 in value;
-}
-function isExistingProvider(value) {
-  return !!(value && value.useExisting);
-}
-function isFactoryProvider(value) {
-  return !!(value && value.useFactory);
-}
-function isTypeProvider(value) {
-  return typeof value === "function";
-}
-function isClassProvider(value) {
-  return !!value.useClass;
-}
-var INJECTOR_SCOPE = new InjectionToken(ngDevMode ? "Set Injector scope." : "");
-var NOT_YET = {};
-var CIRCULAR = {};
-var NULL_INJECTOR = void 0;
-function getNullInjector() {
-  if (NULL_INJECTOR === void 0) {
-    NULL_INJECTOR = new NullInjector();
-  }
-  return NULL_INJECTOR;
-}
-var EnvironmentInjector = class {
-};
-var R3Injector = class extends EnvironmentInjector {
-  parent;
-  source;
-  scopes;
-  /**
-   * Map of tokens to records which contain the instances of those tokens.
-   * - `null` value implies that we don't have the record. Used by tree-shakable injectors
-   * to prevent further searches.
-   */
-  records = /* @__PURE__ */ new Map();
-  /**
-   * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.
-   */
-  _ngOnDestroyHooks = /* @__PURE__ */ new Set();
-  _onDestroyHooks = [];
-  /**
-   * Flag indicating that this injector was previously destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  _destroyed = false;
-  injectorDefTypes;
-  constructor(providers, parent, source, scopes) {
-    super();
-    this.parent = parent;
-    this.source = source;
-    this.scopes = scopes;
-    forEachSingleProvider(providers, (provider) => this.processProvider(provider));
-    this.records.set(INJECTOR$1, makeRecord(void 0, this));
-    if (scopes.has("environment")) {
-      this.records.set(EnvironmentInjector, makeRecord(void 0, this));
-    }
-    const record = this.records.get(INJECTOR_SCOPE);
-    if (record != null && typeof record.value === "string") {
-      this.scopes.add(record.value);
-    }
-    this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));
-  }
-  /**
-   * Destroy the injector and release references to every instance or provider associated with it.
-   *
-   * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a
-   * hook was found.
-   */
-  destroy() {
-    assertNotDestroyed(this);
-    this._destroyed = true;
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      for (const service of this._ngOnDestroyHooks) {
-        service.ngOnDestroy();
-      }
-      const onDestroyHooks = this._onDestroyHooks;
-      this._onDestroyHooks = [];
-      for (const hook of onDestroyHooks) {
-        hook();
-      }
-    } finally {
-      this.records.clear();
-      this._ngOnDestroyHooks.clear();
-      this.injectorDefTypes.clear();
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  onDestroy(callback) {
-    assertNotDestroyed(this);
-    this._onDestroyHooks.push(callback);
-    return () => this.removeOnDestroy(callback);
-  }
-  runInContext(fn) {
-    assertNotDestroyed(this);
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token: null
-      });
-    }
-    try {
-      return fn();
-    } finally {
-      setCurrentInjector(previousInjector);
-      setInjectImplementation(previousInjectImplementation);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-    }
-  }
-  get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {
-    assertNotDestroyed(this);
-    if (token.hasOwnProperty(NG_ENV_ID)) {
-      return token[NG_ENV_ID](this);
-    }
-    flags = convertToBitFlags(flags);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token
-      });
-    }
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    try {
-      if (!(flags & InjectFlags.SkipSelf)) {
-        let record = this.records.get(token);
-        if (record === void 0) {
-          const def = couldBeInjectableType(token) && getInjectableDef(token);
-          if (def && this.injectableDefInScope(def)) {
-            if (ngDevMode) {
-              runInInjectorProfilerContext(this, token, () => {
-                emitProviderConfiguredEvent(token);
-              });
-            }
-            record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);
-          } else {
-            record = null;
-          }
-          this.records.set(token, record);
-        }
-        if (record != null) {
-          return this.hydrate(token, record);
-        }
-      }
-      const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();
-      notFoundValue = flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;
-      return nextInjector.get(token, notFoundValue);
-    } catch (e) {
-      if (e.name === "NullInjectorError") {
-        const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
-        path.unshift(stringify(token));
-        if (previousInjector) {
-          throw e;
-        } else {
-          return catchInjectorError(e, token, "R3InjectorError", this.source);
-        }
-      } else {
-        throw e;
-      }
-    } finally {
-      setInjectImplementation(previousInjectImplementation);
-      setCurrentInjector(previousInjector);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-    }
-  }
-  /** @internal */
-  resolveInjectorInitializers() {
-    const prevConsumer = setActiveConsumer(null);
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token: null
-      });
-    }
-    try {
-      const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, InjectFlags.Self);
-      if (ngDevMode && !Array.isArray(initializers)) {
-        throw new RuntimeError(-209, `Unexpected type of the \`ENVIRONMENT_INITIALIZER\` token value (expected an array, but got ${typeof initializers}). Please check that the \`ENVIRONMENT_INITIALIZER\` token is configured as a \`multi: true\` provider.`);
-      }
-      for (const initializer of initializers) {
-        initializer();
-      }
-    } finally {
-      setCurrentInjector(previousInjector);
-      setInjectImplementation(previousInjectImplementation);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  toString() {
-    const tokens = [];
-    const records = this.records;
-    for (const token of records.keys()) {
-      tokens.push(stringify(token));
-    }
-    return `R3Injector[${tokens.join(", ")}]`;
-  }
-  /**
-   * Process a `SingleProvider` and add it.
-   */
-  processProvider(provider) {
-    provider = resolveForwardRef(provider);
-    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);
-    const record = providerToRecord(provider);
-    if (ngDevMode) {
-      runInInjectorProfilerContext(this, token, () => {
-        if (isValueProvider(provider)) {
-          emitInstanceCreatedByInjectorEvent(provider.useValue);
-        }
-        emitProviderConfiguredEvent(provider);
-      });
-    }
-    if (!isTypeProvider(provider) && provider.multi === true) {
-      let multiRecord = this.records.get(token);
-      if (multiRecord) {
-        if (ngDevMode && multiRecord.multi === void 0) {
-          throwMixedMultiProviderError();
-        }
-      } else {
-        multiRecord = makeRecord(void 0, NOT_YET, true);
-        multiRecord.factory = () => injectArgs(multiRecord.multi);
-        this.records.set(token, multiRecord);
-      }
-      token = provider;
-      multiRecord.multi.push(provider);
-    } else {
-      if (ngDevMode) {
-        const existing = this.records.get(token);
-        if (existing && existing.multi !== void 0) {
-          throwMixedMultiProviderError();
-        }
-      }
-    }
-    this.records.set(token, record);
-  }
-  hydrate(token, record) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (ngDevMode && record.value === CIRCULAR) {
-        throwCyclicDependencyError(stringify(token));
-      } else if (record.value === NOT_YET) {
-        record.value = CIRCULAR;
-        if (ngDevMode) {
-          runInInjectorProfilerContext(this, token, () => {
-            record.value = record.factory();
-            emitInstanceCreatedByInjectorEvent(record.value);
-          });
-        } else {
-          record.value = record.factory();
-        }
-      }
-      if (typeof record.value === "object" && record.value && hasOnDestroy(record.value)) {
-        this._ngOnDestroyHooks.add(record.value);
-      }
-      return record.value;
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  injectableDefInScope(def) {
-    if (!def.providedIn) {
-      return false;
-    }
-    const providedIn = resolveForwardRef(def.providedIn);
-    if (typeof providedIn === "string") {
-      return providedIn === "any" || this.scopes.has(providedIn);
-    } else {
-      return this.injectorDefTypes.has(providedIn);
-    }
-  }
-  removeOnDestroy(callback) {
-    const destroyCBIdx = this._onDestroyHooks.indexOf(callback);
-    if (destroyCBIdx !== -1) {
-      this._onDestroyHooks.splice(destroyCBIdx, 1);
-    }
-  }
-};
-function injectableDefOrInjectorDefFactory(token) {
-  const injectableDef = getInjectableDef(token);
-  const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);
-  if (factory !== null) {
-    return factory;
-  }
-  if (token instanceof InjectionToken) {
-    throw new RuntimeError(204, ngDevMode && `Token ${stringify(token)} is missing a ɵprov definition.`);
-  }
-  if (token instanceof Function) {
-    return getUndecoratedInjectableFactory(token);
-  }
-  throw new RuntimeError(204, ngDevMode && "unreachable");
-}
-function getUndecoratedInjectableFactory(token) {
-  const paramLength = token.length;
-  if (paramLength > 0) {
-    throw new RuntimeError(204, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, "?").join(", ")}).`);
-  }
-  const inheritedInjectableDef = getInheritedInjectableDef(token);
-  if (inheritedInjectableDef !== null) {
-    return () => inheritedInjectableDef.factory(token);
-  } else {
-    return () => new token();
-  }
-}
-function providerToRecord(provider) {
-  if (isValueProvider(provider)) {
-    return makeRecord(void 0, provider.useValue);
-  } else {
-    const factory = providerToFactory(provider);
-    return makeRecord(factory, NOT_YET);
-  }
-}
-function providerToFactory(provider, ngModuleType, providers) {
-  let factory = void 0;
-  if (ngDevMode && isEnvironmentProviders(provider)) {
-    throwInvalidProviderError(void 0, providers, provider);
-  }
-  if (isTypeProvider(provider)) {
-    const unwrappedProvider = resolveForwardRef(provider);
-    return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);
-  } else {
-    if (isValueProvider(provider)) {
-      factory = () => resolveForwardRef(provider.useValue);
-    } else if (isFactoryProvider(provider)) {
-      factory = () => provider.useFactory(...injectArgs(provider.deps || []));
-    } else if (isExistingProvider(provider)) {
-      factory = () => ɵɵinject(resolveForwardRef(provider.useExisting));
-    } else {
-      const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));
-      if (ngDevMode && !classRef) {
-        throwInvalidProviderError(ngModuleType, providers, provider);
-      }
-      if (hasDeps(provider)) {
-        factory = () => new classRef(...injectArgs(provider.deps));
-      } else {
-        return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);
-      }
-    }
-  }
-  return factory;
-}
-function assertNotDestroyed(injector) {
-  if (injector.destroyed) {
-    throw new RuntimeError(205, ngDevMode && "Injector has already been destroyed.");
-  }
-}
-function makeRecord(factory, value, multi = false) {
-  return {
-    factory,
-    value,
-    multi: multi ? [] : void 0
-  };
-}
-function hasDeps(value) {
-  return !!value.deps;
-}
-function hasOnDestroy(value) {
-  return value !== null && typeof value === "object" && typeof value.ngOnDestroy === "function";
-}
-function couldBeInjectableType(value) {
-  return typeof value === "function" || typeof value === "object" && value instanceof InjectionToken;
-}
-function forEachSingleProvider(providers, fn) {
-  for (const provider of providers) {
-    if (Array.isArray(provider)) {
-      forEachSingleProvider(provider, fn);
-    } else if (provider && isEnvironmentProviders(provider)) {
-      forEachSingleProvider(provider.ɵproviders, fn);
-    } else {
-      fn(provider);
-    }
-  }
-}
-function runInInjectionContext(injector, fn) {
-  if (injector instanceof R3Injector) {
-    assertNotDestroyed(injector);
-  }
-  let prevInjectorProfilerContext;
-  if (ngDevMode) {
-    prevInjectorProfilerContext = setInjectorProfilerContext({
-      injector,
-      token: null
-    });
-  }
-  const prevInjector = setCurrentInjector(injector);
-  const previousInjectImplementation = setInjectImplementation(void 0);
-  try {
-    return fn();
-  } finally {
-    setCurrentInjector(prevInjector);
-    ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);
-    setInjectImplementation(previousInjectImplementation);
-  }
-}
-function isInInjectionContext() {
-  return getInjectImplementation() !== void 0 || getCurrentInjector() != null;
-}
-function assertInInjectionContext(debugFn) {
-  if (!isInInjectionContext()) {
-    throw new RuntimeError(-203, ngDevMode && debugFn.name + "() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`");
-  }
-}
-var FactoryTarget;
-(function(FactoryTarget2) {
-  FactoryTarget2[FactoryTarget2["Directive"] = 0] = "Directive";
-  FactoryTarget2[FactoryTarget2["Component"] = 1] = "Component";
-  FactoryTarget2[FactoryTarget2["Injectable"] = 2] = "Injectable";
-  FactoryTarget2[FactoryTarget2["Pipe"] = 3] = "Pipe";
-  FactoryTarget2[FactoryTarget2["NgModule"] = 4] = "NgModule";
-})(FactoryTarget || (FactoryTarget = {}));
-var R3TemplateDependencyKind;
-(function(R3TemplateDependencyKind2) {
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["Directive"] = 0] = "Directive";
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["Pipe"] = 1] = "Pipe";
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["NgModule"] = 2] = "NgModule";
-})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
-var ViewEncapsulation$1;
-(function(ViewEncapsulation2) {
-  ViewEncapsulation2[ViewEncapsulation2["Emulated"] = 0] = "Emulated";
-  ViewEncapsulation2[ViewEncapsulation2["None"] = 2] = "None";
-  ViewEncapsulation2[ViewEncapsulation2["ShadowDom"] = 3] = "ShadowDom";
-})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));
-function getCompilerFacade(request) {
-  const globalNg = _global["ng"];
-  if (globalNg && globalNg.ɵcompilerFacade) {
-    return globalNg.ɵcompilerFacade;
-  }
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    console.error(`JIT compilation failed for ${request.kind}`, request.type);
-    let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.
-
-`;
-    if (request.usage === 1) {
-      message += `The ${request.kind} is part of a library that has been partially compiled.
-`;
-      message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.
-`;
-      message += "\n";
-      message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.
-`;
-    } else {
-      message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.
-`;
-    }
-    message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',
-`;
-    message += `or manually provide the compiler with 'import "@angular/compiler";' before bootstrapping.`;
-    throw new Error(message);
-  } else {
-    throw new Error("JIT compiler unavailable");
-  }
-}
-var angularCoreDiEnv = {
-  "ɵɵdefineInjectable": ɵɵdefineInjectable,
-  "ɵɵdefineInjector": ɵɵdefineInjector,
-  "ɵɵinject": ɵɵinject,
-  "ɵɵinvalidFactoryDep": ɵɵinvalidFactoryDep,
-  "resolveForwardRef": resolveForwardRef
-};
-var Type = Function;
-function isType(v) {
-  return typeof v === "function";
-}
-var ES5_DELEGATE_CTOR = /^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*(arguments|(?:[^()]+\(\[\],)?[^()]+\(arguments\).*)\)/;
-var ES2015_INHERITED_CLASS = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/;
-var ES2015_INHERITED_CLASS_WITH_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/;
-var ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{[^}]*super\(\.\.\.arguments\)/;
-function isDelegateCtor(typeStr) {
-  return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);
-}
-var ReflectionCapabilities = class {
-  _reflect;
-  constructor(reflect) {
-    this._reflect = reflect || _global["Reflect"];
-  }
-  factory(t) {
-    return (...args) => new t(...args);
-  }
-  /** @internal */
-  _zipTypesAndAnnotations(paramTypes, paramAnnotations) {
-    let result;
-    if (typeof paramTypes === "undefined") {
-      result = newArray(paramAnnotations.length);
-    } else {
-      result = newArray(paramTypes.length);
-    }
-    for (let i = 0; i < result.length; i++) {
-      if (typeof paramTypes === "undefined") {
-        result[i] = [];
-      } else if (paramTypes[i] && paramTypes[i] != Object) {
-        result[i] = [paramTypes[i]];
-      } else {
-        result[i] = [];
-      }
-      if (paramAnnotations && paramAnnotations[i] != null) {
-        result[i] = result[i].concat(paramAnnotations[i]);
-      }
-    }
-    return result;
-  }
-  _ownParameters(type, parentCtor) {
-    const typeStr = type.toString();
-    if (isDelegateCtor(typeStr)) {
-      return null;
-    }
-    if (type.parameters && type.parameters !== parentCtor.parameters) {
-      return type.parameters;
-    }
-    const tsickleCtorParams = type.ctorParameters;
-    if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {
-      const ctorParameters = typeof tsickleCtorParams === "function" ? tsickleCtorParams() : tsickleCtorParams;
-      const paramTypes2 = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);
-      const paramAnnotations2 = ctorParameters.map((ctorParam) => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));
-      return this._zipTypesAndAnnotations(paramTypes2, paramAnnotations2);
-    }
-    const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];
-    const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata("design:paramtypes", type);
-    if (paramTypes || paramAnnotations) {
-      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
-    }
-    return newArray(type.length);
-  }
-  parameters(type) {
-    if (!isType(type)) {
-      return [];
-    }
-    const parentCtor = getParentCtor(type);
-    let parameters = this._ownParameters(type, parentCtor);
-    if (!parameters && parentCtor !== Object) {
-      parameters = this.parameters(parentCtor);
-    }
-    return parameters || [];
-  }
-  _ownAnnotations(typeOrFunc, parentCtor) {
-    if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {
-      let annotations = typeOrFunc.annotations;
-      if (typeof annotations === "function" && annotations.annotations) {
-        annotations = annotations.annotations;
-      }
-      return annotations;
-    }
-    if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {
-      return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);
-    }
-    if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {
-      return typeOrFunc[ANNOTATIONS];
-    }
-    return null;
-  }
-  annotations(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return [];
-    }
-    const parentCtor = getParentCtor(typeOrFunc);
-    const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];
-    const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];
-    return parentAnnotations.concat(ownAnnotations);
-  }
-  _ownPropMetadata(typeOrFunc, parentCtor) {
-    if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {
-      let propMetadata = typeOrFunc.propMetadata;
-      if (typeof propMetadata === "function" && propMetadata.propMetadata) {
-        propMetadata = propMetadata.propMetadata;
-      }
-      return propMetadata;
-    }
-    if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {
-      const propDecorators = typeOrFunc.propDecorators;
-      const propMetadata = {};
-      Object.keys(propDecorators).forEach((prop) => {
-        propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);
-      });
-      return propMetadata;
-    }
-    if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {
-      return typeOrFunc[PROP_METADATA];
-    }
-    return null;
-  }
-  propMetadata(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return {};
-    }
-    const parentCtor = getParentCtor(typeOrFunc);
-    const propMetadata = {};
-    if (parentCtor !== Object) {
-      const parentPropMetadata = this.propMetadata(parentCtor);
-      Object.keys(parentPropMetadata).forEach((propName) => {
-        propMetadata[propName] = parentPropMetadata[propName];
-      });
-    }
-    const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);
-    if (ownPropMetadata) {
-      Object.keys(ownPropMetadata).forEach((propName) => {
-        const decorators = [];
-        if (propMetadata.hasOwnProperty(propName)) {
-          decorators.push(...propMetadata[propName]);
-        }
-        decorators.push(...ownPropMetadata[propName]);
-        propMetadata[propName] = decorators;
-      });
-    }
-    return propMetadata;
-  }
-  ownPropMetadata(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return {};
-    }
-    return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};
-  }
-  hasLifecycleHook(type, lcProperty) {
-    return type instanceof Type && lcProperty in type.prototype;
-  }
-};
-function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
-  if (!decoratorInvocations) {
-    return [];
-  }
-  return decoratorInvocations.map((decoratorInvocation) => {
-    const decoratorType = decoratorInvocation.type;
-    const annotationCls = decoratorType.annotationCls;
-    const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];
-    return new annotationCls(...annotationArgs);
-  });
-}
-function getParentCtor(ctor) {
-  const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;
-  const parentCtor = parentProto ? parentProto.constructor : null;
-  return parentCtor || Object;
-}
-var HOST = 0;
-var TVIEW = 1;
-var FLAGS = 2;
-var PARENT = 3;
-var NEXT = 4;
-var T_HOST = 5;
-var HYDRATION = 6;
-var CLEANUP = 7;
-var CONTEXT = 8;
-var INJECTOR = 9;
-var ENVIRONMENT = 10;
-var RENDERER = 11;
-var CHILD_HEAD = 12;
-var CHILD_TAIL = 13;
-var DECLARATION_VIEW = 14;
-var DECLARATION_COMPONENT_VIEW = 15;
-var DECLARATION_LCONTAINER = 16;
-var PREORDER_HOOK_FLAGS = 17;
-var QUERIES = 18;
-var ID = 19;
-var EMBEDDED_VIEW_INJECTOR = 20;
-var ON_DESTROY_HOOKS = 21;
-var EFFECTS_TO_SCHEDULE = 22;
-var EFFECTS = 23;
-var REACTIVE_TEMPLATE_CONSUMER = 24;
-var HEADER_OFFSET = 25;
-var TYPE = 1;
-var DEHYDRATED_VIEWS = 6;
-var NATIVE = 7;
-var VIEW_REFS = 8;
-var MOVED_VIEWS = 9;
-var CONTAINER_HEADER_OFFSET = 10;
-var LContainerFlags;
-(function(LContainerFlags2) {
-  LContainerFlags2[LContainerFlags2["None"] = 0] = "None";
-  LContainerFlags2[LContainerFlags2["HasTransplantedViews"] = 2] = "HasTransplantedViews";
-})(LContainerFlags || (LContainerFlags = {}));
-function isLView(value) {
-  return Array.isArray(value) && typeof value[TYPE] === "object";
-}
-function isLContainer(value) {
-  return Array.isArray(value) && value[TYPE] === true;
-}
-function isContentQueryHost(tNode) {
-  return (tNode.flags & 4) !== 0;
-}
-function isComponentHost(tNode) {
-  return tNode.componentOffset > -1;
-}
-function isDirectiveHost(tNode) {
-  return (tNode.flags & 1) === 1;
-}
-function isComponentDef(def) {
-  return !!def.template;
-}
-function isRootView(target) {
-  return (target[FLAGS] & 512) !== 0;
-}
-function isProjectionTNode(tNode) {
-  return (tNode.type & 16) === 16;
-}
-function hasI18n(lView) {
-  return (lView[FLAGS] & 32) === 32;
-}
-function isDestroyed(lView) {
-  return (lView[FLAGS] & 256) === 256;
-}
-function assertTNodeForLView(tNode, lView) {
-  assertTNodeForTView(tNode, lView[TVIEW]);
-}
-function assertTNodeForTView(tNode, tView) {
-  assertTNode(tNode);
-  const tData = tView.data;
-  for (let i = HEADER_OFFSET; i < tData.length; i++) {
-    if (tData[i] === tNode) {
-      return;
-    }
-  }
-  throwError2("This TNode does not belong to this TView.");
-}
-function assertTNode(tNode) {
-  assertDefined(tNode, "TNode must be defined");
-  if (!(tNode && typeof tNode === "object" && tNode.hasOwnProperty("directiveStylingLast"))) {
-    throwError2("Not of type TNode, got: " + tNode);
-  }
-}
-function assertTIcu(tIcu) {
-  assertDefined(tIcu, "Expected TIcu to be defined");
-  if (!(typeof tIcu.currentCaseLViewIndex === "number")) {
-    throwError2("Object is not of TIcu type.");
-  }
-}
-function assertComponentType(actual, msg = "Type passed in is not ComponentType, it does not have 'ɵcmp' property.") {
-  if (!getComponentDef(actual)) {
-    throwError2(msg);
-  }
-}
-function assertNgModuleType(actual, msg = "Type passed in is not NgModuleType, it does not have 'ɵmod' property.") {
-  if (!getNgModuleDef(actual)) {
-    throwError2(msg);
-  }
-}
-function assertHasParent(tNode) {
-  assertDefined(tNode, "currentTNode should exist!");
-  assertDefined(tNode.parent, "currentTNode should have a parent");
-}
-function assertLContainer(value) {
-  assertDefined(value, "LContainer must be defined");
-  assertEqual(isLContainer(value), true, "Expecting LContainer");
-}
-function assertLViewOrUndefined(value) {
-  value && assertEqual(isLView(value), true, "Expecting LView or undefined or null");
-}
-function assertLView(value) {
-  assertDefined(value, "LView must be defined");
-  assertEqual(isLView(value), true, "Expecting LView");
-}
-function assertFirstCreatePass(tView, errMessage) {
-  assertEqual(tView.firstCreatePass, true, errMessage || "Should only be called in first create pass.");
-}
-function assertFirstUpdatePass(tView, errMessage) {
-  assertEqual(tView.firstUpdatePass, true, errMessage || "Should only be called in first update pass.");
-}
-function assertDirectiveDef(obj) {
-  if (obj.type === void 0 || obj.selectors == void 0 || obj.inputs === void 0) {
-    throwError2(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);
-  }
-}
-function assertIndexInDeclRange(tView, index) {
-  assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);
-}
-function assertIndexInExpandoRange(lView, index) {
-  const tView = lView[1];
-  assertBetween(tView.expandoStartIndex, lView.length, index);
-}
-function assertBetween(lower, upper, index) {
-  if (!(lower <= index && index < upper)) {
-    throwError2(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);
-  }
-}
-function assertProjectionSlots(lView, errMessage) {
-  assertDefined(lView[DECLARATION_COMPONENT_VIEW], "Component views should exist.");
-  assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage || "Components with projection nodes (<ng-content>) must have projection slots defined.");
-}
-function assertParentView(lView, errMessage) {
-  assertDefined(lView, errMessage || "Component views should always have a parent view (component's host view)");
-}
-function assertNoDuplicateDirectives(directives) {
-  if (directives.length < 2) {
-    return;
-  }
-  const seenDirectives = /* @__PURE__ */ new Set();
-  for (const current of directives) {
-    if (seenDirectives.has(current)) {
-      throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. Directives can only match an element once.`);
-    }
-    seenDirectives.add(current);
-  }
-}
-function assertNodeInjector(lView, injectorIndex) {
-  assertIndexInExpandoRange(lView, injectorIndex);
-  assertIndexInExpandoRange(
-    lView,
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  );
-  assertNumber(lView[injectorIndex + 0], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 1], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 2], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 3], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 4], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 5], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 6], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 7], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ], "injectorIndex should point to parent injector");
-}
-var SimpleChange = class {
-  previousValue;
-  currentValue;
-  firstChange;
-  constructor(previousValue, currentValue, firstChange) {
-    this.previousValue = previousValue;
-    this.currentValue = currentValue;
-    this.firstChange = firstChange;
-  }
-  /**
-   * Check whether the new value is the first value assigned.
-   */
-  isFirstChange() {
-    return this.firstChange;
-  }
-};
-function applyValueToInputField(instance, inputSignalNode, privateName, value) {
-  if (inputSignalNode !== null) {
-    inputSignalNode.applyValueToInputSignal(inputSignalNode, value);
-  } else {
-    instance[privateName] = value;
-  }
-}
-var ɵɵNgOnChangesFeature = (() => {
-  const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;
-  ɵɵNgOnChangesFeatureImpl.ngInherit = true;
-  return ɵɵNgOnChangesFeatureImpl;
-})();
-function NgOnChangesFeatureImpl(definition) {
-  if (definition.type.prototype.ngOnChanges) {
-    definition.setInput = ngOnChangesSetInput;
-  }
-  return rememberChangeHistoryAndInvokeOnChangesHook;
-}
-function rememberChangeHistoryAndInvokeOnChangesHook() {
-  const simpleChangesStore = getSimpleChangesStore(this);
-  const current = simpleChangesStore?.current;
-  if (current) {
-    const previous = simpleChangesStore.previous;
-    if (previous === EMPTY_OBJ) {
-      simpleChangesStore.previous = current;
-    } else {
-      for (let key in current) {
-        previous[key] = current[key];
-      }
-    }
-    simpleChangesStore.current = null;
-    this.ngOnChanges(current);
-  }
-}
-function ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {
-  const declaredName = this.declaredInputs[publicName];
-  ngDevMode && assertString(declaredName, "Name of input in ngOnChanges has to be a string");
-  const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {
-    previous: EMPTY_OBJ,
-    current: null
-  });
-  const current = simpleChangesStore.current || (simpleChangesStore.current = {});
-  const previous = simpleChangesStore.previous;
-  const previousChange = previous[declaredName];
-  current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);
-  applyValueToInputField(instance, inputSignalNode, privateName, value);
-}
-var SIMPLE_CHANGES_STORE = "__ngSimpleChanges__";
-function getSimpleChangesStore(instance) {
-  return instance[SIMPLE_CHANGES_STORE] || null;
-}
-function setSimpleChangesStore(instance, store2) {
-  return instance[SIMPLE_CHANGES_STORE] = store2;
-}
-var profilerCallback = null;
-var setProfiler = (profiler2) => {
-  profilerCallback = profiler2;
-};
-var profiler = function(event, instance, hookOrListener) {
-  if (profilerCallback != null) {
-    profilerCallback(event, instance, hookOrListener);
-  }
-};
-var SVG_NAMESPACE = "svg";
-var MATH_ML_NAMESPACE = "math";
-function unwrapRNode(value) {
-  while (Array.isArray(value)) {
-    value = value[HOST];
-  }
-  return value;
-}
-function unwrapLView(value) {
-  while (Array.isArray(value)) {
-    if (typeof value[TYPE] === "object") return value;
-    value = value[HOST];
-  }
-  return null;
-}
-function getNativeByIndex(index, lView) {
-  ngDevMode && assertIndexInRange(lView, index);
-  ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, "Expected to be past HEADER_OFFSET");
-  return unwrapRNode(lView[index]);
-}
-function getNativeByTNode(tNode, lView) {
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  ngDevMode && assertIndexInRange(lView, tNode.index);
-  const node = unwrapRNode(lView[tNode.index]);
-  return node;
-}
-function getNativeByTNodeOrNull(tNode, lView) {
-  const index = tNode === null ? -1 : tNode.index;
-  if (index !== -1) {
-    ngDevMode && assertTNodeForLView(tNode, lView);
-    const node = unwrapRNode(lView[index]);
-    return node;
-  }
-  return null;
-}
-function getTNode(tView, index) {
-  ngDevMode && assertGreaterThan(index, -1, "wrong index for TNode");
-  ngDevMode && assertLessThan(index, tView.data.length, "wrong index for TNode");
-  const tNode = tView.data[index];
-  ngDevMode && tNode !== null && assertTNode(tNode);
-  return tNode;
-}
-function load(view, index) {
-  ngDevMode && assertIndexInRange(view, index);
-  return view[index];
-}
-function getComponentLViewByIndex(nodeIndex, hostView) {
-  ngDevMode && assertIndexInRange(hostView, nodeIndex);
-  const slotValue = hostView[nodeIndex];
-  const lView = isLView(slotValue) ? slotValue : slotValue[HOST];
-  return lView;
-}
-function isCreationMode(view) {
-  return (view[FLAGS] & 4) === 4;
-}
-function viewAttachedToChangeDetector(view) {
-  return (view[FLAGS] & 128) === 128;
-}
-function viewAttachedToContainer(view) {
-  return isLContainer(view[PARENT]);
-}
-function getConstant(consts, index) {
-  if (index === null || index === void 0) return null;
-  ngDevMode && assertIndexInRange(consts, index);
-  return consts[index];
-}
-function resetPreOrderHookFlags(lView) {
-  lView[PREORDER_HOOK_FLAGS] = 0;
-}
-function markViewForRefresh(lView) {
-  if (lView[FLAGS] & 1024) {
-    return;
-  }
-  lView[FLAGS] |= 1024;
-  if (viewAttachedToChangeDetector(lView)) {
-    markAncestorsForTraversal(lView);
-  }
-}
-function walkUpViews(nestingLevel, currentView) {
-  while (nestingLevel > 0) {
-    ngDevMode && assertDefined(currentView[DECLARATION_VIEW], "Declaration view should be defined if nesting level is greater than 0.");
-    currentView = currentView[DECLARATION_VIEW];
-    nestingLevel--;
-  }
-  return currentView;
-}
-function requiresRefreshOrTraversal(lView) {
-  return !!(lView[FLAGS] & (1024 | 8192) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);
-}
-function updateAncestorTraversalFlagsOnAttach(lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    9
-    /* NotificationSource.ViewAttached */
-  );
-  if (lView[FLAGS] & 64) {
-    lView[FLAGS] |= 1024;
-  }
-  if (requiresRefreshOrTraversal(lView)) {
-    markAncestorsForTraversal(lView);
-  }
-}
-function markAncestorsForTraversal(lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    0
-    /* NotificationSource.MarkAncestorsForTraversal */
-  );
-  let parent = getLViewParent(lView);
-  while (parent !== null) {
-    if (parent[FLAGS] & 8192) {
-      break;
-    }
-    parent[FLAGS] |= 8192;
-    if (!viewAttachedToChangeDetector(parent)) {
-      break;
-    }
-    parent = getLViewParent(parent);
-  }
-}
-function storeLViewOnDestroy(lView, onDestroyCallback) {
-  if ((lView[FLAGS] & 256) === 256) {
-    throw new RuntimeError(911, ngDevMode && "View has already been destroyed.");
-  }
-  if (lView[ON_DESTROY_HOOKS] === null) {
-    lView[ON_DESTROY_HOOKS] = [];
-  }
-  lView[ON_DESTROY_HOOKS].push(onDestroyCallback);
-}
-function removeLViewOnDestroy(lView, onDestroyCallback) {
-  if (lView[ON_DESTROY_HOOKS] === null) return;
-  const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);
-  if (destroyCBIdx !== -1) {
-    lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);
-  }
-}
-function getLViewParent(lView) {
-  ngDevMode && assertLView(lView);
-  const parent = lView[PARENT];
-  return isLContainer(parent) ? parent[PARENT] : parent;
-}
-var instructionState = {
-  lFrame: createLFrame(null),
-  bindingsEnabled: true,
-  skipHydrationRootTNode: null
-};
-var CheckNoChangesMode;
-(function(CheckNoChangesMode2) {
-  CheckNoChangesMode2[CheckNoChangesMode2["Off"] = 0] = "Off";
-  CheckNoChangesMode2[CheckNoChangesMode2["Exhaustive"] = 1] = "Exhaustive";
-  CheckNoChangesMode2[CheckNoChangesMode2["OnlyDirtyViews"] = 2] = "OnlyDirtyViews";
-})(CheckNoChangesMode || (CheckNoChangesMode = {}));
-var _checkNoChangesMode = 0;
-var _isRefreshingViews = false;
-function getElementDepthCount() {
-  return instructionState.lFrame.elementDepthCount;
-}
-function increaseElementDepthCount() {
-  instructionState.lFrame.elementDepthCount++;
-}
-function decreaseElementDepthCount() {
-  instructionState.lFrame.elementDepthCount--;
-}
-function getBindingsEnabled() {
-  return instructionState.bindingsEnabled;
-}
-function isInSkipHydrationBlock$1() {
-  return instructionState.skipHydrationRootTNode !== null;
-}
-function isSkipHydrationRootTNode(tNode) {
-  return instructionState.skipHydrationRootTNode === tNode;
-}
-function ɵɵenableBindings() {
-  instructionState.bindingsEnabled = true;
-}
-function enterSkipHydrationBlock(tNode) {
-  instructionState.skipHydrationRootTNode = tNode;
-}
-function ɵɵdisableBindings() {
-  instructionState.bindingsEnabled = false;
-}
-function leaveSkipHydrationBlock() {
-  instructionState.skipHydrationRootTNode = null;
-}
-function getLView() {
-  return instructionState.lFrame.lView;
-}
-function getTView() {
-  return instructionState.lFrame.tView;
-}
-function ɵɵrestoreView(viewToRestore) {
-  instructionState.lFrame.contextLView = viewToRestore;
-  return viewToRestore[CONTEXT];
-}
-function ɵɵresetView(value) {
-  instructionState.lFrame.contextLView = null;
-  return value;
-}
-function getCurrentTNode() {
-  let currentTNode = getCurrentTNodePlaceholderOk();
-  while (currentTNode !== null && currentTNode.type === 64) {
-    currentTNode = currentTNode.parent;
-  }
-  return currentTNode;
-}
-function getCurrentTNodePlaceholderOk() {
-  return instructionState.lFrame.currentTNode;
-}
-function getCurrentParentTNode() {
-  const lFrame = instructionState.lFrame;
-  const currentTNode = lFrame.currentTNode;
-  return lFrame.isParent ? currentTNode : currentTNode.parent;
-}
-function setCurrentTNode(tNode, isParent) {
-  ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);
-  const lFrame = instructionState.lFrame;
-  lFrame.currentTNode = tNode;
-  lFrame.isParent = isParent;
-}
-function isCurrentTNodeParent() {
-  return instructionState.lFrame.isParent;
-}
-function setCurrentTNodeAsNotParent() {
-  instructionState.lFrame.isParent = false;
-}
-function getContextLView() {
-  const contextLView = instructionState.lFrame.contextLView;
-  ngDevMode && assertDefined(contextLView, "contextLView must be defined.");
-  return contextLView;
-}
-function isInCheckNoChangesMode() {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  return _checkNoChangesMode !== CheckNoChangesMode.Off;
-}
-function isExhaustiveCheckNoChanges() {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;
-}
-function setIsInCheckNoChangesMode(mode) {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  _checkNoChangesMode = mode;
-}
-function isRefreshingViews() {
-  return _isRefreshingViews;
-}
-function setIsRefreshingViews(mode) {
-  const prev = _isRefreshingViews;
-  _isRefreshingViews = mode;
-  return prev;
-}
-function getBindingRoot() {
-  const lFrame = instructionState.lFrame;
-  let index = lFrame.bindingRootIndex;
-  if (index === -1) {
-    index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;
-  }
-  return index;
-}
-function getBindingIndex() {
-  return instructionState.lFrame.bindingIndex;
-}
-function setBindingIndex(value) {
-  return instructionState.lFrame.bindingIndex = value;
-}
-function nextBindingIndex() {
-  return instructionState.lFrame.bindingIndex++;
-}
-function incrementBindingIndex(count2) {
-  const lFrame = instructionState.lFrame;
-  const index = lFrame.bindingIndex;
-  lFrame.bindingIndex = lFrame.bindingIndex + count2;
-  return index;
-}
-function isInI18nBlock() {
-  return instructionState.lFrame.inI18n;
-}
-function setInI18nBlock(isInI18nBlock2) {
-  instructionState.lFrame.inI18n = isInI18nBlock2;
-}
-function setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {
-  const lFrame = instructionState.lFrame;
-  lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;
-  setCurrentDirectiveIndex(currentDirectiveIndex);
-}
-function getCurrentDirectiveIndex() {
-  return instructionState.lFrame.currentDirectiveIndex;
-}
-function setCurrentDirectiveIndex(currentDirectiveIndex) {
-  instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;
-}
-function getCurrentDirectiveDef(tData) {
-  const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;
-  return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];
-}
-function getCurrentQueryIndex() {
-  return instructionState.lFrame.currentQueryIndex;
-}
-function setCurrentQueryIndex(value) {
-  instructionState.lFrame.currentQueryIndex = value;
-}
-function getDeclarationTNode(lView) {
-  const tView = lView[TVIEW];
-  if (tView.type === 2) {
-    ngDevMode && assertDefined(tView.declTNode, "Embedded TNodes should have declaration parents.");
-    return tView.declTNode;
-  }
-  if (tView.type === 1) {
-    return lView[T_HOST];
-  }
-  return null;
-}
-function enterDI(lView, tNode, flags) {
-  ngDevMode && assertLViewOrUndefined(lView);
-  if (flags & InjectFlags.SkipSelf) {
-    ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);
-    let parentTNode = tNode;
-    let parentLView = lView;
-    while (true) {
-      ngDevMode && assertDefined(parentTNode, "Parent TNode should be defined");
-      parentTNode = parentTNode.parent;
-      if (parentTNode === null && !(flags & InjectFlags.Host)) {
-        parentTNode = getDeclarationTNode(parentLView);
-        if (parentTNode === null) break;
-        ngDevMode && assertDefined(parentLView, "Parent LView should be defined");
-        parentLView = parentLView[DECLARATION_VIEW];
-        if (parentTNode.type & (2 | 8)) {
-          break;
-        }
-      } else {
-        break;
-      }
-    }
-    if (parentTNode === null) {
-      return false;
-    } else {
-      tNode = parentTNode;
-      lView = parentLView;
-    }
-  }
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  const lFrame = instructionState.lFrame = allocLFrame();
-  lFrame.currentTNode = tNode;
-  lFrame.lView = lView;
-  return true;
-}
-function enterView(newView) {
-  ngDevMode && assertNotEqual(newView[0], newView[1], "????");
-  ngDevMode && assertLViewOrUndefined(newView);
-  const newLFrame = allocLFrame();
-  if (ngDevMode) {
-    assertEqual(newLFrame.isParent, true, "Expected clean LFrame");
-    assertEqual(newLFrame.lView, null, "Expected clean LFrame");
-    assertEqual(newLFrame.tView, null, "Expected clean LFrame");
-    assertEqual(newLFrame.selectedIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.elementDepthCount, 0, "Expected clean LFrame");
-    assertEqual(newLFrame.currentDirectiveIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.currentNamespace, null, "Expected clean LFrame");
-    assertEqual(newLFrame.bindingRootIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.currentQueryIndex, 0, "Expected clean LFrame");
-  }
-  const tView = newView[TVIEW];
-  instructionState.lFrame = newLFrame;
-  ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);
-  newLFrame.currentTNode = tView.firstChild;
-  newLFrame.lView = newView;
-  newLFrame.tView = tView;
-  newLFrame.contextLView = newView;
-  newLFrame.bindingIndex = tView.bindingStartIndex;
-  newLFrame.inI18n = false;
-}
-function allocLFrame() {
-  const currentLFrame = instructionState.lFrame;
-  const childLFrame = currentLFrame === null ? null : currentLFrame.child;
-  const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;
-  return newLFrame;
-}
-function createLFrame(parent) {
-  const lFrame = {
-    currentTNode: null,
-    isParent: true,
-    lView: null,
-    tView: null,
-    selectedIndex: -1,
-    contextLView: null,
-    elementDepthCount: 0,
-    currentNamespace: null,
-    currentDirectiveIndex: -1,
-    bindingRootIndex: -1,
-    bindingIndex: -1,
-    currentQueryIndex: 0,
-    parent,
-    child: null,
-    inI18n: false
-  };
-  parent !== null && (parent.child = lFrame);
-  return lFrame;
-}
-function leaveViewLight() {
-  const oldLFrame = instructionState.lFrame;
-  instructionState.lFrame = oldLFrame.parent;
-  oldLFrame.currentTNode = null;
-  oldLFrame.lView = null;
-  return oldLFrame;
-}
-var leaveDI = leaveViewLight;
-function leaveView() {
-  const oldLFrame = leaveViewLight();
-  oldLFrame.isParent = true;
-  oldLFrame.tView = null;
-  oldLFrame.selectedIndex = -1;
-  oldLFrame.contextLView = null;
-  oldLFrame.elementDepthCount = 0;
-  oldLFrame.currentDirectiveIndex = -1;
-  oldLFrame.currentNamespace = null;
-  oldLFrame.bindingRootIndex = -1;
-  oldLFrame.bindingIndex = -1;
-  oldLFrame.currentQueryIndex = 0;
-}
-function nextContextImpl(level) {
-  const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);
-  return contextLView[CONTEXT];
-}
-function getSelectedIndex() {
-  return instructionState.lFrame.selectedIndex;
-}
-function setSelectedIndex(index) {
-  ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, "Index must be past HEADER_OFFSET (or -1).");
-  ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, "Can't set index passed end of LView");
-  instructionState.lFrame.selectedIndex = index;
-}
-function getSelectedTNode() {
-  const lFrame = instructionState.lFrame;
-  return getTNode(lFrame.tView, lFrame.selectedIndex);
-}
-function ɵɵnamespaceSVG() {
-  instructionState.lFrame.currentNamespace = SVG_NAMESPACE;
-}
-function ɵɵnamespaceMathML() {
-  instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;
-}
-function ɵɵnamespaceHTML() {
-  namespaceHTMLInternal();
-}
-function namespaceHTMLInternal() {
-  instructionState.lFrame.currentNamespace = null;
-}
-function getNamespace$1() {
-  return instructionState.lFrame.currentNamespace;
-}
-var _wasLastNodeCreated = true;
-function wasLastNodeCreated() {
-  return _wasLastNodeCreated;
-}
-function lastNodeWasCreated(flag) {
-  _wasLastNodeCreated = flag;
-}
-function registerPreOrderHooks(directiveIndex, directiveDef, tView) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const {
-    ngOnChanges,
-    ngOnInit,
-    ngDoCheck
-  } = directiveDef.type.prototype;
-  if (ngOnChanges) {
-    const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);
-    (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);
-    (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);
-  }
-  if (ngOnInit) {
-    (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);
-  }
-  if (ngDoCheck) {
-    (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);
-    (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);
-  }
-}
-function registerPostOrderHooks(tView, tNode) {
-  ngDevMode && assertFirstCreatePass(tView);
-  for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {
-    const directiveDef = tView.data[i];
-    ngDevMode && assertDefined(directiveDef, "Expecting DirectiveDef");
-    const lifecycleHooks = directiveDef.type.prototype;
-    const {
-      ngAfterContentInit,
-      ngAfterContentChecked,
-      ngAfterViewInit,
-      ngAfterViewChecked,
-      ngOnDestroy
-    } = lifecycleHooks;
-    if (ngAfterContentInit) {
-      (tView.contentHooks ??= []).push(-i, ngAfterContentInit);
-    }
-    if (ngAfterContentChecked) {
-      (tView.contentHooks ??= []).push(i, ngAfterContentChecked);
-      (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);
-    }
-    if (ngAfterViewInit) {
-      (tView.viewHooks ??= []).push(-i, ngAfterViewInit);
-    }
-    if (ngAfterViewChecked) {
-      (tView.viewHooks ??= []).push(i, ngAfterViewChecked);
-      (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);
-    }
-    if (ngOnDestroy != null) {
-      (tView.destroyHooks ??= []).push(i, ngOnDestroy);
-    }
-  }
-}
-function executeCheckHooks(lView, hooks, nodeIndex) {
-  callHooks(lView, hooks, 3, nodeIndex);
-}
-function executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {
-  ngDevMode && assertNotEqual(initPhase, 3, "Init pre-order hooks should not be called more than once");
-  if ((lView[FLAGS] & 3) === initPhase) {
-    callHooks(lView, hooks, initPhase, nodeIndex);
-  }
-}
-function incrementInitPhaseFlags(lView, initPhase) {
-  ngDevMode && assertNotEqual(initPhase, 3, "Init hooks phase should not be incremented after all init hooks have been run.");
-  let flags = lView[FLAGS];
-  if ((flags & 3) === initPhase) {
-    flags &= 16383;
-    flags += 1;
-    lView[FLAGS] = flags;
-  }
-}
-function callHooks(currentView, arr, initPhase, currentNodeIndex) {
-  ngDevMode && assertEqual(isInCheckNoChangesMode(), false, "Hooks should never be run when in check no changes mode.");
-  const startIndex = currentNodeIndex !== void 0 ? currentView[PREORDER_HOOK_FLAGS] & 65535 : 0;
-  const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;
-  const max2 = arr.length - 1;
-  let lastNodeIndexFound = 0;
-  for (let i = startIndex; i < max2; i++) {
-    const hook = arr[i + 1];
-    if (typeof hook === "number") {
-      lastNodeIndexFound = arr[i];
-      if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {
-        break;
-      }
-    } else {
-      const isInitHook = arr[i] < 0;
-      if (isInitHook) {
-        currentView[PREORDER_HOOK_FLAGS] += 65536;
-      }
-      if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {
-        callHook(currentView, initPhase, arr, i);
-        currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760) + i + 2;
-      }
-      i++;
-    }
-  }
-}
-function callHookInternal(directive, hook) {
-  profiler(4, directive, hook);
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    hook.call(directive);
-  } finally {
-    setActiveConsumer(prevConsumer);
-    profiler(5, directive, hook);
-  }
-}
-function callHook(currentView, initPhase, arr, i) {
-  const isInitHook = arr[i] < 0;
-  const hook = arr[i + 1];
-  const directiveIndex = isInitHook ? -arr[i] : arr[i];
-  const directive = currentView[directiveIndex];
-  if (isInitHook) {
-    const indexWithintInitPhase = currentView[FLAGS] >> 14;
-    if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 && (currentView[FLAGS] & 3) === initPhase) {
-      currentView[FLAGS] += 16384;
-      callHookInternal(directive, hook);
-    }
-  } else {
-    callHookInternal(directive, hook);
-  }
-}
-var NO_PARENT_INJECTOR = -1;
-var NodeInjectorFactory = class {
-  factory;
-  /**
-   * The inject implementation to be activated when using the factory.
-   */
-  injectImpl;
-  /**
-   * Marker set to true during factory invocation to see if we get into recursive loop.
-   * Recursive loop causes an error to be displayed.
-   */
-  resolving = false;
-  /**
-   * Marks that the token can see other Tokens declared in `viewProviders` on the same node.
-   */
-  canSeeViewProviders;
-  /**
-   * An array of factories to use in case of `multi` provider.
-   */
-  multi;
-  /**
-   * Number of `multi`-providers which belong to the component.
-   *
-   * This is needed because when multiple components and directives declare the `multi` provider
-   * they have to be concatenated in the correct order.
-   *
-   * Example:
-   *
-   * If we have a component and directive active an a single element as declared here
-   * ```
-   * component:
-   *   providers: [ {provide: String, useValue: 'component', multi: true} ],
-   *   viewProviders: [ {provide: String, useValue: 'componentView', multi: true} ],
-   *
-   * directive:
-   *   providers: [ {provide: String, useValue: 'directive', multi: true} ],
-   * ```
-   *
-   * Then the expected results are:
-   *
-   * ```
-   * providers: ['component', 'directive']
-   * viewProviders: ['component', 'componentView', 'directive']
-   * ```
-   *
-   * The way to think about it is that the `viewProviders` have been inserted after the component
-   * but before the directives, which is why we need to know how many `multi`s have been declared by
-   * the component.
-   */
-  componentProviders;
-  /**
-   * Current index of the Factory in the `data`. Needed for `viewProviders` and `providers` merging.
-   * See `providerFactory`.
-   */
-  index;
-  /**
-   * Because the same `multi` provider can be declared in `providers` and `viewProviders` it is
-   * possible for `viewProviders` to shadow the `providers`. For this reason we store the
-   * `provideFactory` of the `providers` so that `providers` can be extended with `viewProviders`.
-   *
-   * Example:
-   *
-   * Given:
-   * ```
-   * providers: [ {provide: String, useValue: 'all', multi: true} ],
-   * viewProviders: [ {provide: String, useValue: 'viewOnly', multi: true} ],
-   * ```
-   *
-   * We have to return `['all']` in case of content injection, but `['all', 'viewOnly']` in case
-   * of view injection. We further have to make sure that the shared instances (in our case
-   * `all`) are the exact same instance in both the content as well as the view injection. (We
-   * have to make sure that we don't double instantiate.) For this reason the `viewProviders`
-   * `Factory` has a pointer to the shadowed `providers` factory so that it can instantiate the
-   * `providers` (`['all']`) and then extend it with `viewProviders` (`['all'] + ['viewOnly'] =
-   * ['all', 'viewOnly']`).
-   */
-  providerFactory;
-  constructor(factory, isViewProvider, injectImplementation) {
-    this.factory = factory;
-    ngDevMode && assertDefined(factory, "Factory not specified");
-    ngDevMode && assertEqual(typeof factory, "function", "Expected factory function.");
-    this.canSeeViewProviders = isViewProvider;
-    this.injectImpl = injectImplementation;
-  }
-};
-function isFactory(obj) {
-  return obj instanceof NodeInjectorFactory;
-}
-function toTNodeTypeAsString(tNodeType) {
-  let text = "";
-  tNodeType & 1 && (text += "|Text");
-  tNodeType & 2 && (text += "|Element");
-  tNodeType & 4 && (text += "|Container");
-  tNodeType & 8 && (text += "|ElementContainer");
-  tNodeType & 16 && (text += "|Projection");
-  tNodeType & 32 && (text += "|IcuContainer");
-  tNodeType & 64 && (text += "|Placeholder");
-  tNodeType & 128 && (text += "|LetDeclaration");
-  return text.length > 0 ? text.substring(1) : text;
-}
-function isTNodeShape(value) {
-  return value != null && typeof value === "object" && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === "number" || Array.isArray(value.insertBeforeIndex));
-}
-function isLetDeclaration(tNode) {
-  return !!(tNode.type & 128);
-}
-function hasClassInput(tNode) {
-  return (tNode.flags & 8) !== 0;
-}
-function hasStyleInput(tNode) {
-  return (tNode.flags & 16) !== 0;
-}
-function assertTNodeType(tNode, expectedTypes, message) {
-  assertDefined(tNode, "should be called with a TNode");
-  if ((tNode.type & expectedTypes) === 0) {
-    throwError2(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);
-  }
-}
-function assertPureTNodeType(type) {
-  if (!(type === 2 || type === 1 || type === 4 || type === 8 || type === 32 || type === 16 || type === 64 || type === 128)) {
-    throwError2(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);
-  }
-}
-function setUpAttributes(renderer, native, attrs) {
-  let i = 0;
-  while (i < attrs.length) {
-    const value = attrs[i];
-    if (typeof value === "number") {
-      if (value !== 0) {
-        break;
-      }
-      i++;
-      const namespaceURI = attrs[i++];
-      const attrName = attrs[i++];
-      const attrVal = attrs[i++];
-      ngDevMode && ngDevMode.rendererSetAttribute++;
-      renderer.setAttribute(native, attrName, attrVal, namespaceURI);
-    } else {
-      const attrName = value;
-      const attrVal = attrs[++i];
-      ngDevMode && ngDevMode.rendererSetAttribute++;
-      if (isAnimationProp(attrName)) {
-        renderer.setProperty(native, attrName, attrVal);
-      } else {
-        renderer.setAttribute(native, attrName, attrVal);
-      }
-      i++;
-    }
-  }
-  return i;
-}
-function isNameOnlyAttributeMarker(marker) {
-  return marker === 3 || marker === 4 || marker === 6;
-}
-function isAnimationProp(name) {
-  return name.charCodeAt(0) === 64;
-}
-function mergeHostAttrs(dst, src) {
-  if (src === null || src.length === 0) {
-  } else if (dst === null || dst.length === 0) {
-    dst = src.slice();
-  } else {
-    let srcMarker = -1;
-    for (let i = 0; i < src.length; i++) {
-      const item = src[i];
-      if (typeof item === "number") {
-        srcMarker = item;
-      } else {
-        if (srcMarker === 0) {
-        } else if (srcMarker === -1 || srcMarker === 2) {
-          mergeHostAttribute(dst, srcMarker, item, null, src[++i]);
-        } else {
-          mergeHostAttribute(dst, srcMarker, item, null, null);
-        }
-      }
-    }
-  }
-  return dst;
-}
-function mergeHostAttribute(dst, marker, key1, key2, value) {
-  let i = 0;
-  let markerInsertPosition = dst.length;
-  if (marker === -1) {
-    markerInsertPosition = -1;
-  } else {
-    while (i < dst.length) {
-      const dstValue = dst[i++];
-      if (typeof dstValue === "number") {
-        if (dstValue === marker) {
-          markerInsertPosition = -1;
-          break;
-        } else if (dstValue > marker) {
-          markerInsertPosition = i - 1;
-          break;
-        }
-      }
-    }
-  }
-  while (i < dst.length) {
-    const item = dst[i];
-    if (typeof item === "number") {
-      break;
-    } else if (item === key1) {
-      if (key2 === null) {
-        if (value !== null) {
-          dst[i + 1] = value;
-        }
-        return;
-      } else if (key2 === dst[i + 1]) {
-        dst[i + 2] = value;
-        return;
-      }
-    }
-    i++;
-    if (key2 !== null) i++;
-    if (value !== null) i++;
-  }
-  if (markerInsertPosition !== -1) {
-    dst.splice(markerInsertPosition, 0, marker);
-    i = markerInsertPosition + 1;
-  }
-  dst.splice(i++, 0, key1);
-  if (key2 !== null) {
-    dst.splice(i++, 0, key2);
-  }
-  if (value !== null) {
-    dst.splice(i++, 0, value);
-  }
-}
-var NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
-var ChainedInjector = class {
-  injector;
-  parentInjector;
-  constructor(injector, parentInjector) {
-    this.injector = injector;
-    this.parentInjector = parentInjector;
-  }
-  get(token, notFoundValue, flags) {
-    flags = convertToBitFlags(flags);
-    const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
-    if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
-      return value;
-    }
-    return this.parentInjector.get(token, notFoundValue, flags);
-  }
-};
-function hasParentInjector(parentLocation) {
-  return parentLocation !== NO_PARENT_INJECTOR;
-}
-function getParentInjectorIndex(parentLocation) {
-  if (ngDevMode) {
-    assertNumber(parentLocation, "Number expected");
-    assertNotEqual(parentLocation, -1, "Not a valid state.");
-    const parentInjectorIndex = parentLocation & 32767;
-    assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, "Parent injector must be pointing past HEADER_OFFSET.");
-  }
-  return parentLocation & 32767;
-}
-function getParentInjectorViewOffset(parentLocation) {
-  return parentLocation >> 16;
-}
-function getParentInjectorView(location2, startView) {
-  let viewOffset = getParentInjectorViewOffset(location2);
-  let parentView = startView;
-  while (viewOffset > 0) {
-    parentView = parentView[DECLARATION_VIEW];
-    viewOffset--;
-  }
-  return parentView;
-}
-function isRouterOutletInjector(currentInjector) {
-  return currentInjector instanceof ChainedInjector && typeof currentInjector.injector.__ngOutletInjector === "function";
-}
-var includeViewProviders = true;
-function setIncludeViewProviders(v) {
-  const oldValue = includeViewProviders;
-  includeViewProviders = v;
-  return oldValue;
-}
-var BLOOM_SIZE = 256;
-var BLOOM_MASK = BLOOM_SIZE - 1;
-var BLOOM_BUCKET_BITS = 5;
-var nextNgElementId = 0;
-var NOT_FOUND = {};
-function bloomAdd(injectorIndex, tView, type) {
-  ngDevMode && assertEqual(tView.firstCreatePass, true, "expected firstCreatePass to be true");
-  let id;
-  if (typeof type === "string") {
-    id = type.charCodeAt(0) || 0;
-  } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {
-    id = type[NG_ELEMENT_ID];
-  }
-  if (id == null) {
-    id = type[NG_ELEMENT_ID] = nextNgElementId++;
-  }
-  const bloomHash = id & BLOOM_MASK;
-  const mask = 1 << bloomHash;
-  tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;
-}
-function getOrCreateNodeInjectorForNode(tNode, lView) {
-  const existingInjectorIndex = getInjectorIndex(tNode, lView);
-  if (existingInjectorIndex !== -1) {
-    return existingInjectorIndex;
-  }
-  const tView = lView[TVIEW];
-  if (tView.firstCreatePass) {
-    tNode.injectorIndex = lView.length;
-    insertBloom(tView.data, tNode);
-    insertBloom(lView, null);
-    insertBloom(tView.blueprint, null);
-  }
-  const parentLoc = getParentInjectorLocation(tNode, lView);
-  const injectorIndex = tNode.injectorIndex;
-  if (hasParentInjector(parentLoc)) {
-    const parentIndex = getParentInjectorIndex(parentLoc);
-    const parentLView = getParentInjectorView(parentLoc, lView);
-    const parentData = parentLView[TVIEW].data;
-    for (let i = 0; i < 8; i++) {
-      lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];
-    }
-  }
-  lView[
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ] = parentLoc;
-  return injectorIndex;
-}
-function insertBloom(arr, footer) {
-  arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);
-}
-function getInjectorIndex(tNode, lView) {
-  if (tNode.injectorIndex === -1 || // If the injector index is the same as its parent's injector index, then the index has been
-  // copied down from the parent node. No injector has been created yet on this node.
-  tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex || // After the first template pass, the injector index might exist but the parent values
-  // might not have been calculated yet for this instance
-  lView[
-    tNode.injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ] === null) {
-    return -1;
-  } else {
-    ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);
-    return tNode.injectorIndex;
-  }
-}
-function getParentInjectorLocation(tNode, lView) {
-  if (tNode.parent && tNode.parent.injectorIndex !== -1) {
-    return tNode.parent.injectorIndex;
-  }
-  let declarationViewOffset = 0;
-  let parentTNode = null;
-  let lViewCursor = lView;
-  while (lViewCursor !== null) {
-    parentTNode = getTNodeFromLView(lViewCursor);
-    if (parentTNode === null) {
-      return NO_PARENT_INJECTOR;
-    }
-    ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);
-    declarationViewOffset++;
-    lViewCursor = lViewCursor[DECLARATION_VIEW];
-    if (parentTNode.injectorIndex !== -1) {
-      return parentTNode.injectorIndex | declarationViewOffset << 16;
-    }
-  }
-  return NO_PARENT_INJECTOR;
-}
-function diPublicInInjector(injectorIndex, tView, token) {
-  bloomAdd(injectorIndex, tView, token);
-}
-function injectAttributeImpl(tNode, attrNameToInject) {
-  ngDevMode && assertTNodeType(
-    tNode,
-    12 | 3
-    /* TNodeType.AnyRNode */
-  );
-  ngDevMode && assertDefined(tNode, "expecting tNode");
-  if (attrNameToInject === "class") {
-    return tNode.classes;
-  }
-  if (attrNameToInject === "style") {
-    return tNode.styles;
-  }
-  const attrs = tNode.attrs;
-  if (attrs) {
-    const attrsLength = attrs.length;
-    let i = 0;
-    while (i < attrsLength) {
-      const value = attrs[i];
-      if (isNameOnlyAttributeMarker(value)) break;
-      if (value === 0) {
-        i = i + 2;
-      } else if (typeof value === "number") {
-        i++;
-        while (i < attrsLength && typeof attrs[i] === "string") {
-          i++;
-        }
-      } else if (value === attrNameToInject) {
-        return attrs[i + 1];
-      } else {
-        i = i + 2;
-      }
-    }
-  }
-  return null;
-}
-function notFoundValueOrThrow(notFoundValue, token, flags) {
-  if (flags & InjectFlags.Optional || notFoundValue !== void 0) {
-    return notFoundValue;
-  } else {
-    throwProviderNotFoundError(token, "NodeInjector");
-  }
-}
-function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
-  if (flags & InjectFlags.Optional && notFoundValue === void 0) {
-    notFoundValue = null;
-  }
-  if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {
-    const moduleInjector = lView[INJECTOR];
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    try {
-      if (moduleInjector) {
-        return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);
-      } else {
-        return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);
-      }
-    } finally {
-      setInjectImplementation(previousInjectImplementation);
-    }
-  }
-  return notFoundValueOrThrow(notFoundValue, token, flags);
-}
-function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
-  if (tNode !== null) {
-    if (lView[FLAGS] & 2048 && // The token must be present on the current node injector when the `Self`
-    // flag is set, so the lookup on embedded view injector(s) can be skipped.
-    !(flags & InjectFlags.Self)) {
-      const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
-      if (embeddedInjectorValue !== NOT_FOUND) {
-        return embeddedInjectorValue;
-      }
-    }
-    const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
-    if (value !== NOT_FOUND) {
-      return value;
-    }
-  }
-  return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
-}
-function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
-  const bloomHash = bloomHashBitOrFactory(token);
-  if (typeof bloomHash === "function") {
-    if (!enterDI(lView, tNode, flags)) {
-      return flags & InjectFlags.Host ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
-    }
-    try {
-      let value;
-      if (ngDevMode) {
-        runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {
-          value = bloomHash(flags);
-          if (value != null) {
-            emitInstanceCreatedByInjectorEvent(value);
-          }
-        });
-      } else {
-        value = bloomHash(flags);
-      }
-      if (value == null && !(flags & InjectFlags.Optional)) {
-        throwProviderNotFoundError(token);
-      } else {
-        return value;
-      }
-    } finally {
-      leaveDI();
-    }
-  } else if (typeof bloomHash === "number") {
-    let previousTView = null;
-    let injectorIndex = getInjectorIndex(tNode, lView);
-    let parentLocation = NO_PARENT_INJECTOR;
-    let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
-    if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
-      parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[
-        injectorIndex + 8
-        /* NodeInjectorOffset.PARENT */
-      ];
-      if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
-        injectorIndex = -1;
-      } else {
-        previousTView = lView[TVIEW];
-        injectorIndex = getParentInjectorIndex(parentLocation);
-        lView = getParentInjectorView(parentLocation, lView);
-      }
-    }
-    while (injectorIndex !== -1) {
-      ngDevMode && assertNodeInjector(lView, injectorIndex);
-      const tView = lView[TVIEW];
-      ngDevMode && assertTNodeForLView(tView.data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ], lView);
-      if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
-        const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
-        if (instance !== NOT_FOUND) {
-          return instance;
-        }
-      }
-      parentLocation = lView[
-        injectorIndex + 8
-        /* NodeInjectorOffset.PARENT */
-      ];
-      if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {
-        previousTView = tView;
-        injectorIndex = getParentInjectorIndex(parentLocation);
-        lView = getParentInjectorView(parentLocation, lView);
-      } else {
-        injectorIndex = -1;
-      }
-    }
-  }
-  return notFoundValue;
-}
-function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
-  const currentTView = lView[TVIEW];
-  const tNode = currentTView.data[
-    injectorIndex + 8
-    /* NodeInjectorOffset.TNODE */
-  ];
-  const canAccessViewProviders = previousTView == null ? (
-    // 1) This is the first invocation `previousTView == null` which means that we are at the
-    // `TNode` of where injector is starting to look. In such a case the only time we are allowed
-    // to look into the ViewProviders is if:
-    // - we are on a component
-    // - AND the injector set `includeViewProviders` to true (implying that the token can see
-    // ViewProviders because it is the Component or a Service which itself was declared in
-    // ViewProviders)
-    isComponentHost(tNode) && includeViewProviders
-  ) : (
-    // 2) `previousTView != null` which means that we are now walking across the parent nodes.
-    // In such a case we are only allowed to look into the ViewProviders if:
-    // - We just crossed from child View to Parent View `previousTView != currentTView`
-    // - AND the parent TNode is an Element.
-    // This means that we just came from the Component's View and therefore are allowed to see
-    // into the ViewProviders.
-    previousTView != currentTView && (tNode.type & 3) !== 0
-  );
-  const isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;
-  const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);
-  if (injectableIdx !== null) {
-    return getNodeInjectable(lView, currentTView, injectableIdx, tNode);
-  } else {
-    return NOT_FOUND;
-  }
-}
-function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {
-  const nodeProviderIndexes = tNode.providerIndexes;
-  const tInjectables = tView.data;
-  const injectablesStart = nodeProviderIndexes & 1048575;
-  const directivesStart = tNode.directiveStart;
-  const directiveEnd = tNode.directiveEnd;
-  const cptViewProvidersCount = nodeProviderIndexes >> 20;
-  const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;
-  const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;
-  for (let i = startingIndex; i < endIndex; i++) {
-    const providerTokenOrDef = tInjectables[i];
-    if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {
-      return i;
-    }
-  }
-  if (isHostSpecialCase) {
-    const dirDef = tInjectables[directivesStart];
-    if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {
-      return directivesStart;
-    }
-  }
-  return null;
-}
-function getNodeInjectable(lView, tView, index, tNode) {
-  let value = lView[index];
-  const tData = tView.data;
-  if (isFactory(value)) {
-    const factory = value;
-    if (factory.resolving) {
-      throwCyclicDependencyError(stringifyForError(tData[index]));
-    }
-    const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);
-    factory.resolving = true;
-    let prevInjectContext;
-    if (ngDevMode) {
-      const token = tData[index].type || tData[index];
-      const injector = new NodeInjector(tNode, lView);
-      prevInjectContext = setInjectorProfilerContext({
-        injector,
-        token
-      });
-    }
-    const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;
-    const success = enterDI(lView, tNode, InjectFlags.Default);
-    ngDevMode && assertEqual(success, true, "Because flags do not contain `SkipSelf' we expect this to always succeed.");
-    try {
-      value = lView[index] = factory.factory(void 0, tData, lView, tNode);
-      ngDevMode && emitInstanceCreatedByInjectorEvent(value);
-      if (tView.firstCreatePass && index >= tNode.directiveStart) {
-        ngDevMode && assertDirectiveDef(tData[index]);
-        registerPreOrderHooks(index, tData[index], tView);
-      }
-    } finally {
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-      previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);
-      setIncludeViewProviders(previousIncludeViewProviders);
-      factory.resolving = false;
-      leaveDI();
-    }
-  }
-  return value;
-}
-function bloomHashBitOrFactory(token) {
-  ngDevMode && assertDefined(token, "token must be defined");
-  if (typeof token === "string") {
-    return token.charCodeAt(0) || 0;
-  }
-  const tokenId = (
-    // First check with `hasOwnProperty` so we don't get an inherited ID.
-    token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : void 0
-  );
-  if (typeof tokenId === "number") {
-    if (tokenId >= 0) {
-      return tokenId & BLOOM_MASK;
-    } else {
-      ngDevMode && assertEqual(tokenId, -1, "Expecting to get Special Injector Id");
-      return createNodeInjector;
-    }
-  } else {
-    return tokenId;
-  }
-}
-function bloomHasToken(bloomHash, injectorIndex, injectorView) {
-  const mask = 1 << bloomHash;
-  const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];
-  return !!(value & mask);
-}
-function shouldSearchParent(flags, isFirstHostTNode) {
-  return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);
-}
-function getNodeInjectorLView(nodeInjector) {
-  return nodeInjector._lView;
-}
-function getNodeInjectorTNode(nodeInjector) {
-  return nodeInjector._tNode;
-}
-var NodeInjector = class {
-  _tNode;
-  _lView;
-  constructor(_tNode, _lView) {
-    this._tNode = _tNode;
-    this._lView = _lView;
-  }
-  get(token, notFoundValue, flags) {
-    return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);
-  }
-};
-function createNodeInjector() {
-  return new NodeInjector(getCurrentTNode(), getLView());
-}
-function ɵɵgetInheritedFactory(type) {
-  return noSideEffects(() => {
-    const ownConstructor = type.prototype.constructor;
-    const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);
-    const objectPrototype = Object.prototype;
-    let parent = Object.getPrototypeOf(type.prototype).constructor;
-    while (parent && parent !== objectPrototype) {
-      const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);
-      if (factory && factory !== ownFactory) {
-        return factory;
-      }
-      parent = Object.getPrototypeOf(parent);
-    }
-    return (t) => new t();
-  });
-}
-function getFactoryOf(type) {
-  if (isForwardRef(type)) {
-    return () => {
-      const factory = getFactoryOf(resolveForwardRef(type));
-      return factory && factory();
-    };
-  }
-  return getFactoryDef(type);
-}
-function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
-  let currentTNode = tNode;
-  let currentLView = lView;
-  while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 && !(currentLView[FLAGS] & 512)) {
-    ngDevMode && assertTNodeForLView(currentTNode, currentLView);
-    const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
-    if (nodeInjectorValue !== NOT_FOUND) {
-      return nodeInjectorValue;
-    }
-    let parentTNode = currentTNode.parent;
-    if (!parentTNode) {
-      const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
-      if (embeddedViewInjector) {
-        const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
-        if (embeddedViewInjectorValue !== NOT_FOUND) {
-          return embeddedViewInjectorValue;
-        }
-      }
-      parentTNode = getTNodeFromLView(currentLView);
-      currentLView = currentLView[DECLARATION_VIEW];
-    }
-    currentTNode = parentTNode;
-  }
-  return notFoundValue;
-}
-function getTNodeFromLView(lView) {
-  const tView = lView[TVIEW];
-  const tViewType = tView.type;
-  if (tViewType === 2) {
-    ngDevMode && assertDefined(tView.declTNode, "Embedded TNodes should have declaration parents.");
-    return tView.declTNode;
-  } else if (tViewType === 1) {
-    return lView[T_HOST];
-  }
-  return null;
-}
-function ɵɵinjectAttribute(attrNameToInject) {
-  return injectAttributeImpl(getCurrentTNode(), attrNameToInject);
-}
-var Attribute2 = makeParamDecorator("Attribute", (attributeName) => ({
-  attributeName,
-  __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName)
-}));
-var _reflect = null;
-function getReflect() {
-  return _reflect = _reflect || new ReflectionCapabilities();
-}
-function reflectDependencies(type) {
-  return convertDependencies(getReflect().parameters(type));
-}
-function convertDependencies(deps) {
-  return deps.map((dep) => reflectDependency(dep));
-}
-function reflectDependency(dep) {
-  const meta = {
-    token: null,
-    attribute: null,
-    host: false,
-    optional: false,
-    self: false,
-    skipSelf: false
-  };
-  if (Array.isArray(dep) && dep.length > 0) {
-    for (let j = 0; j < dep.length; j++) {
-      const param = dep[j];
-      if (param === void 0) {
-        continue;
-      }
-      const proto = Object.getPrototypeOf(param);
-      if (param instanceof Optional || proto.ngMetadataName === "Optional") {
-        meta.optional = true;
-      } else if (param instanceof SkipSelf || proto.ngMetadataName === "SkipSelf") {
-        meta.skipSelf = true;
-      } else if (param instanceof Self || proto.ngMetadataName === "Self") {
-        meta.self = true;
-      } else if (param instanceof Host || proto.ngMetadataName === "Host") {
-        meta.host = true;
-      } else if (param instanceof Inject) {
-        meta.token = param.token;
-      } else if (param instanceof Attribute2) {
-        if (param.attributeName === void 0) {
-          throw new RuntimeError(204, ngDevMode && `Attribute name must be defined.`);
-        }
-        meta.attribute = param.attributeName;
-      } else {
-        meta.token = param;
-      }
-    }
-  } else if (dep === void 0 || Array.isArray(dep) && dep.length === 0) {
-    meta.token = null;
-  } else {
-    meta.token = dep;
-  }
-  return meta;
-}
-function compileInjectable(type, meta) {
-  let ngInjectableDef = null;
-  let ngFactoryDef = null;
-  if (!type.hasOwnProperty(NG_PROV_DEF)) {
-    Object.defineProperty(type, NG_PROV_DEF, {
-      get: () => {
-        if (ngInjectableDef === null) {
-          const compiler = getCompilerFacade({
-            usage: 0,
-            kind: "injectable",
-            type
-          });
-          ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, meta));
-        }
-        return ngInjectableDef;
-      }
-    });
-  }
-  if (!type.hasOwnProperty(NG_FACTORY_DEF)) {
-    Object.defineProperty(type, NG_FACTORY_DEF, {
-      get: () => {
-        if (ngFactoryDef === null) {
-          const compiler = getCompilerFacade({
-            usage: 0,
-            kind: "injectable",
-            type
-          });
-          ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {
-            name: type.name,
-            type,
-            typeArgumentCount: 0,
-            // In JIT mode types are not available nor used.
-            deps: reflectDependencies(type),
-            target: compiler.FactoryTarget.Injectable
-          });
-        }
-        return ngFactoryDef;
-      },
-      // Leave this configurable so that the factories from directives or pipes can take precedence.
-      configurable: true
-    });
-  }
-}
-var USE_VALUE = getClosureSafeProperty({
-  provide: String,
-  useValue: getClosureSafeProperty
-});
-function isUseClassProvider(meta) {
-  return meta.useClass !== void 0;
-}
-function isUseValueProvider(meta) {
-  return USE_VALUE in meta;
-}
-function isUseFactoryProvider(meta) {
-  return meta.useFactory !== void 0;
-}
-function isUseExistingProvider(meta) {
-  return meta.useExisting !== void 0;
-}
-function getInjectableMetadata(type, srcMeta) {
-  const meta = srcMeta || {
-    providedIn: null
-  };
-  const compilerMeta = {
-    name: type.name,
-    type,
-    typeArgumentCount: 0,
-    providedIn: meta.providedIn
-  };
-  if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== void 0) {
-    compilerMeta.deps = convertDependencies(meta.deps);
-  }
-  if (isUseClassProvider(meta)) {
-    compilerMeta.useClass = meta.useClass;
-  } else if (isUseValueProvider(meta)) {
-    compilerMeta.useValue = meta.useValue;
-  } else if (isUseFactoryProvider(meta)) {
-    compilerMeta.useFactory = meta.useFactory;
-  } else if (isUseExistingProvider(meta)) {
-    compilerMeta.useExisting = meta.useExisting;
-  }
-  return compilerMeta;
-}
-var Injectable = makeDecorator("Injectable", void 0, void 0, void 0, (type, meta) => compileInjectable(type, meta));
-function createInjector(defType, parent = null, additionalProviders = null, name) {
-  const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);
-  injector.resolveInjectorInitializers();
-  return injector;
-}
-function createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = /* @__PURE__ */ new Set()) {
-  const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];
-  name = name || (typeof defType === "object" ? void 0 : stringify(defType));
-  return new R3Injector(providers, parent || getNullInjector(), name || null, scopes);
-}
-var Injector = class _Injector {
-  static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
-  static NULL = new NullInjector();
-  static create(options, parent) {
-    if (Array.isArray(options)) {
-      return createInjector({
-        name: ""
-      }, parent, options, "");
-    } else {
-      const name = options.name ?? "";
-      return createInjector({
-        name
-      }, options.parent, options.providers, name);
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _Injector,
-      providedIn: "any",
-      factory: () => ɵɵinject(INJECTOR$1)
-    })
-  );
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = -1;
-};
-var HostAttributeToken = class {
-  attributeName;
-  constructor(attributeName) {
-    this.attributeName = attributeName;
-  }
-  /** @internal */
-  __NG_ELEMENT_ID__ = () => ɵɵinjectAttribute(this.attributeName);
-  toString() {
-    return `HostAttributeToken ${this.attributeName}`;
-  }
-};
-var HOST_TAG_NAME = new InjectionToken(ngDevMode ? "HOST_TAG_NAME" : "");
-HOST_TAG_NAME.__NG_ELEMENT_ID__ = (flags) => {
-  const tNode = getCurrentTNode();
-  if (tNode === null) {
-    throw new RuntimeError(204, ngDevMode && "HOST_TAG_NAME can only be injected in directives and components during construction time (in a class constructor or as a class field initializer)");
-  }
-  if (tNode.type & 2) {
-    return tNode.value;
-  }
-  if (flags & InjectFlags.Optional) {
-    return null;
-  }
-  throw new RuntimeError(204, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. This is invalid, and so the dependency should be marked as optional.`);
-};
-function getDevModeNodeName(tNode) {
-  if (tNode.type & 8) {
-    return "an <ng-container>";
-  } else if (tNode.type & 4) {
-    return "an <ng-template>";
-  } else if (tNode.type & 128) {
-    return "an @let declaration";
-  } else {
-    return "a node";
-  }
-}
-var SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;
-var DestroyRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectDestroyRef;
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ENV_ID__ = (injector) => injector;
-};
-var NodeInjectorDestroyRef = class extends DestroyRef {
-  _lView;
-  constructor(_lView) {
-    super();
-    this._lView = _lView;
-  }
-  onDestroy(callback) {
-    storeLViewOnDestroy(this._lView, callback);
-    return () => removeLViewOnDestroy(this._lView, callback);
-  }
-};
-function injectDestroyRef() {
-  return new NodeInjectorDestroyRef(getLView());
-}
-var ChangeDetectionScheduler = class {
-};
-var ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Zoneless enabled" : "", {
-  providedIn: "root",
-  factory: () => false
-});
-var PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Zoneless provided" : "", {
-  providedIn: "root",
-  factory: () => false
-});
-var ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "scheduler disabled" : "");
-var SCHEDULE_IN_ROOT_ZONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "run changes outside zone in root" : "");
-var PendingTasksInternal = class _PendingTasksInternal {
-  taskId = 0;
-  pendingTasks = /* @__PURE__ */ new Set();
-  get _hasPendingTasks() {
-    return this.hasPendingTasks.value;
-  }
-  hasPendingTasks = new BehaviorSubject(false);
-  add() {
-    if (!this._hasPendingTasks) {
-      this.hasPendingTasks.next(true);
-    }
-    const taskId = this.taskId++;
-    this.pendingTasks.add(taskId);
-    return taskId;
-  }
-  has(taskId) {
-    return this.pendingTasks.has(taskId);
-  }
-  remove(taskId) {
-    this.pendingTasks.delete(taskId);
-    if (this.pendingTasks.size === 0 && this._hasPendingTasks) {
-      this.hasPendingTasks.next(false);
-    }
-  }
-  ngOnDestroy() {
-    this.pendingTasks.clear();
-    if (this._hasPendingTasks) {
-      this.hasPendingTasks.next(false);
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _PendingTasksInternal,
-      providedIn: "root",
-      factory: () => new _PendingTasksInternal()
-    })
-  );
-};
-var PendingTasks = class _PendingTasks {
-  internalPendingTasks = inject(PendingTasksInternal);
-  scheduler = inject(ChangeDetectionScheduler);
-  /**
-   * Adds a new task that should block application's stability.
-   * @returns A cleanup function that removes a task when called.
-   */
-  add() {
-    const taskId = this.internalPendingTasks.add();
-    return () => {
-      if (!this.internalPendingTasks.has(taskId)) {
-        return;
-      }
-      this.scheduler.notify(
-        12
-        /* NotificationSource.PendingTaskRemoved */
-      );
-      this.internalPendingTasks.remove(taskId);
-    };
-  }
-  /**
-   * Runs an asynchronous function and blocks the application's stability until the function completes.
-   *
-   * ```
-   * pendingTasks.run(async () => {
-   *   const userData = await fetch('/api/user');
-   *   this.userData.set(userData);
-   * });
-   * ```
-   *
-   * Application stability is at least delayed until the next tick after the `run` method resolves
-   * so it is safe to make additional updates to application state that would require UI synchronization:
-   *
-   * ```
-   * const userData = await pendingTasks.run(() => fetch('/api/user'));
-   * this.userData.set(userData);
-   * ```
-   *
-   * @param fn The asynchronous function to execute
-   */
-  run(fn) {
-    return __async(this, null, function* () {
-      const removeTask = this.add();
-      try {
-        return yield fn();
-      } finally {
-        removeTask();
-      }
-    });
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _PendingTasks,
-      providedIn: "root",
-      factory: () => new _PendingTasks()
-    })
-  );
-};
-var EventEmitter_ = class extends Subject {
-  __isAsync;
-  // tslint:disable-line
-  destroyRef = void 0;
-  pendingTasks = void 0;
-  constructor(isAsync = false) {
-    super();
-    this.__isAsync = isAsync;
-    if (isInInjectionContext()) {
-      this.destroyRef = inject(DestroyRef, {
-        optional: true
-      }) ?? void 0;
-      this.pendingTasks = inject(PendingTasksInternal, {
-        optional: true
-      }) ?? void 0;
-    }
-  }
-  emit(value) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      super.next(value);
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  subscribe(observerOrNext, error, complete) {
-    let nextFn = observerOrNext;
-    let errorFn = error || (() => null);
-    let completeFn = complete;
-    if (observerOrNext && typeof observerOrNext === "object") {
-      const observer = observerOrNext;
-      nextFn = observer.next?.bind(observer);
-      errorFn = observer.error?.bind(observer);
-      completeFn = observer.complete?.bind(observer);
-    }
-    if (this.__isAsync) {
-      errorFn = this.wrapInTimeout(errorFn);
-      if (nextFn) {
-        nextFn = this.wrapInTimeout(nextFn);
-      }
-      if (completeFn) {
-        completeFn = this.wrapInTimeout(completeFn);
-      }
-    }
-    const sink = super.subscribe({
-      next: nextFn,
-      error: errorFn,
-      complete: completeFn
-    });
-    if (observerOrNext instanceof Subscription) {
-      observerOrNext.add(sink);
-    }
-    return sink;
-  }
-  wrapInTimeout(fn) {
-    return (value) => {
-      const taskId = this.pendingTasks?.add();
-      setTimeout(() => {
-        fn(value);
-        if (taskId !== void 0) {
-          this.pendingTasks?.remove(taskId);
-        }
-      });
-    };
-  }
-};
-var EventEmitter = EventEmitter_;
-function noop2(...args) {
-}
-function scheduleCallbackWithRafRace(callback) {
-  let timeoutId;
-  let animationFrameId;
-  function cleanup() {
-    callback = noop2;
-    try {
-      if (animationFrameId !== void 0 && typeof cancelAnimationFrame === "function") {
-        cancelAnimationFrame(animationFrameId);
-      }
-      if (timeoutId !== void 0) {
-        clearTimeout(timeoutId);
-      }
-    } catch {
-    }
-  }
-  timeoutId = setTimeout(() => {
-    callback();
-    cleanup();
-  });
-  if (typeof requestAnimationFrame === "function") {
-    animationFrameId = requestAnimationFrame(() => {
-      callback();
-      cleanup();
-    });
-  }
-  return () => cleanup();
-}
-function scheduleCallbackWithMicrotask(callback) {
-  queueMicrotask(() => callback());
-  return () => {
-    callback = noop2;
-  };
-}
-var AsyncStackTaggingZoneSpec = class {
-  createTask;
-  constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {
-    this.name = "asyncStackTagging for " + namePrefix;
-    this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);
-  }
-  // ZoneSpec implementation below.
-  name;
-  onScheduleTask(delegate, _current, target, task) {
-    task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);
-    return delegate.scheduleTask(target, task);
-  }
-  onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {
-    let ret;
-    if (task.consoleTask) {
-      ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));
-    } else {
-      ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);
-    }
-    return ret;
-  }
-};
-var isAngularZoneProperty = "isAngularZone";
-var angularZoneInstanceIdProperty = isAngularZoneProperty + "_ID";
-var ngZoneInstanceId = 0;
-var NgZone = class _NgZone {
-  hasPendingMacrotasks = false;
-  hasPendingMicrotasks = false;
-  /**
-   * Whether there are no outstanding microtasks or macrotasks.
-   */
-  isStable = true;
-  /**
-   * Notifies when code enters Angular Zone. This gets fired first on VM Turn.
-   */
-  onUnstable = new EventEmitter(false);
-  /**
-   * Notifies when there is no more microtasks enqueued in the current VM Turn.
-   * This is a hint for Angular to do change detection, which may enqueue more microtasks.
-   * For this reason this event can fire multiple times per VM Turn.
-   */
-  onMicrotaskEmpty = new EventEmitter(false);
-  /**
-   * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
-   * implies we are about to relinquish VM turn.
-   * This event gets called just once.
-   */
-  onStable = new EventEmitter(false);
-  /**
-   * Notifies that an error has been delivered.
-   */
-  onError = new EventEmitter(false);
-  constructor(options) {
-    const {
-      enableLongStackTrace = false,
-      shouldCoalesceEventChangeDetection = false,
-      shouldCoalesceRunChangeDetection = false,
-      scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT
-    } = options;
-    if (typeof Zone == "undefined") {
-      throw new RuntimeError(908, ngDevMode && `In this configuration Angular requires Zone.js`);
-    }
-    Zone.assertZonePatched();
-    const self = this;
-    self._nesting = 0;
-    self._outer = self._inner = Zone.current;
-    if (ngDevMode) {
-      self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec("Angular"));
-    }
-    if (Zone["TaskTrackingZoneSpec"]) {
-      self._inner = self._inner.fork(new Zone["TaskTrackingZoneSpec"]());
-    }
-    if (enableLongStackTrace && Zone["longStackTraceZoneSpec"]) {
-      self._inner = self._inner.fork(Zone["longStackTraceZoneSpec"]);
-    }
-    self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
-    self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
-    self.callbackScheduled = false;
-    self.scheduleInRootZone = scheduleInRootZone;
-    forkInnerZoneWithAngularBehavior(self);
-  }
-  /**
-    This method checks whether the method call happens within an Angular Zone instance.
-  */
-  static isInAngularZone() {
-    return typeof Zone !== "undefined" && Zone.current.get(isAngularZoneProperty) === true;
-  }
-  /**
-    Assures that the method is called within the Angular Zone, otherwise throws an error.
-  */
-  static assertInAngularZone() {
-    if (!_NgZone.isInAngularZone()) {
-      throw new RuntimeError(909, ngDevMode && "Expected to be in Angular Zone, but it is not!");
-    }
-  }
-  /**
-    Assures that the method is called outside of the Angular Zone, otherwise throws an error.
-  */
-  static assertNotInAngularZone() {
-    if (_NgZone.isInAngularZone()) {
-      throw new RuntimeError(909, ngDevMode && "Expected to not be in Angular Zone, but it is!");
-    }
-  }
-  /**
-   * Executes the `fn` function synchronously within the Angular zone and returns value returned by
-   * the function.
-   *
-   * Running functions via `run` allows you to reenter Angular zone from a task that was executed
-   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * within the Angular zone.
-   *
-   * If a synchronous error happens it will be rethrown and not reported via `onError`.
-   */
-  run(fn, applyThis, applyArgs) {
-    return this._inner.run(fn, applyThis, applyArgs);
-  }
-  /**
-   * Executes the `fn` function synchronously within the Angular zone as a task and returns value
-   * returned by the function.
-   *
-   * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
-   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * within the Angular zone.
-   *
-   * If a synchronous error happens it will be rethrown and not reported via `onError`.
-   */
-  runTask(fn, applyThis, applyArgs, name) {
-    const zone = this._inner;
-    const task = zone.scheduleEventTask("NgZoneEvent: " + name, fn, EMPTY_PAYLOAD, noop2, noop2);
-    try {
-      return zone.runTask(task, applyThis, applyArgs);
-    } finally {
-      zone.cancelTask(task);
-    }
-  }
-  /**
-   * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
-   * rethrown.
-   */
-  runGuarded(fn, applyThis, applyArgs) {
-    return this._inner.runGuarded(fn, applyThis, applyArgs);
-  }
-  /**
-   * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
-   * the function.
-   *
-   * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
-   * work that
-   * doesn't trigger Angular change-detection or is subject to Angular's error handling.
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * outside of the Angular zone.
-   *
-   * Use {@link #run} to reenter the Angular zone and do work that updates the application model.
-   */
-  runOutsideAngular(fn) {
-    return this._outer.run(fn);
-  }
-};
-var EMPTY_PAYLOAD = {};
-function checkStable(zone) {
-  if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
-    try {
-      zone._nesting++;
-      zone.onMicrotaskEmpty.emit(null);
-    } finally {
-      zone._nesting--;
-      if (!zone.hasPendingMicrotasks) {
-        try {
-          zone.runOutsideAngular(() => zone.onStable.emit(null));
-        } finally {
-          zone.isStable = true;
-        }
-      }
-    }
-  }
-}
-function delayChangeDetectionForEvents(zone) {
-  if (zone.isCheckStableRunning || zone.callbackScheduled) {
-    return;
-  }
-  zone.callbackScheduled = true;
-  function scheduleCheckStable() {
-    scheduleCallbackWithRafRace(() => {
-      zone.callbackScheduled = false;
-      updateMicroTaskStatus(zone);
-      zone.isCheckStableRunning = true;
-      checkStable(zone);
-      zone.isCheckStableRunning = false;
-    });
-  }
-  if (zone.scheduleInRootZone) {
-    Zone.root.run(() => {
-      scheduleCheckStable();
-    });
-  } else {
-    zone._outer.run(() => {
-      scheduleCheckStable();
-    });
-  }
-  updateMicroTaskStatus(zone);
-}
-function forkInnerZoneWithAngularBehavior(zone) {
-  const delayChangeDetectionForEventsDelegate = () => {
-    delayChangeDetectionForEvents(zone);
-  };
-  const instanceId = ngZoneInstanceId++;
-  zone._inner = zone._inner.fork({
-    name: "angular",
-    properties: {
-      [isAngularZoneProperty]: true,
-      [angularZoneInstanceIdProperty]: instanceId,
-      [angularZoneInstanceIdProperty + instanceId]: true
-    },
-    onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
-      if (shouldBeIgnoredByZone(applyArgs)) {
-        return delegate.invokeTask(target, task, applyThis, applyArgs);
-      }
-      try {
-        onEnter(zone);
-        return delegate.invokeTask(target, task, applyThis, applyArgs);
-      } finally {
-        if (zone.shouldCoalesceEventChangeDetection && task.type === "eventTask" || zone.shouldCoalesceRunChangeDetection) {
-          delayChangeDetectionForEventsDelegate();
-        }
-        onLeave(zone);
-      }
-    },
-    onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
-      try {
-        onEnter(zone);
-        return delegate.invoke(target, callback, applyThis, applyArgs, source);
-      } finally {
-        if (zone.shouldCoalesceRunChangeDetection && // Do not delay change detection when the task is the scheduler's tick.
-        // We need to synchronously trigger the stability logic so that the
-        // zone-based scheduler can prevent a duplicate ApplicationRef.tick
-        // by first checking if the scheduler tick is running. This does seem a bit roundabout,
-        // but we _do_ still want to trigger all the correct events when we exit the zone.run
-        // (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which
-        // relies on these events happening after change detection runs).
-        // Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate
-        // but is added here as well to prevent reads of applyArgs when not necessary
-        !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {
-          delayChangeDetectionForEventsDelegate();
-        }
-        onLeave(zone);
-      }
-    },
-    onHasTask: (delegate, current, target, hasTaskState) => {
-      delegate.hasTask(target, hasTaskState);
-      if (current === target) {
-        if (hasTaskState.change == "microTask") {
-          zone._hasPendingMicrotasks = hasTaskState.microTask;
-          updateMicroTaskStatus(zone);
-          checkStable(zone);
-        } else if (hasTaskState.change == "macroTask") {
-          zone.hasPendingMacrotasks = hasTaskState.macroTask;
-        }
-      }
-    },
-    onHandleError: (delegate, current, target, error) => {
-      delegate.handleError(target, error);
-      zone.runOutsideAngular(() => zone.onError.emit(error));
-      return false;
-    }
-  });
-}
-function updateMicroTaskStatus(zone) {
-  if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {
-    zone.hasPendingMicrotasks = true;
-  } else {
-    zone.hasPendingMicrotasks = false;
-  }
-}
-function onEnter(zone) {
-  zone._nesting++;
-  if (zone.isStable) {
-    zone.isStable = false;
-    zone.onUnstable.emit(null);
-  }
-}
-function onLeave(zone) {
-  zone._nesting--;
-  checkStable(zone);
-}
-var NoopNgZone = class {
-  hasPendingMicrotasks = false;
-  hasPendingMacrotasks = false;
-  isStable = true;
-  onUnstable = new EventEmitter();
-  onMicrotaskEmpty = new EventEmitter();
-  onStable = new EventEmitter();
-  onError = new EventEmitter();
-  run(fn, applyThis, applyArgs) {
-    return fn.apply(applyThis, applyArgs);
-  }
-  runGuarded(fn, applyThis, applyArgs) {
-    return fn.apply(applyThis, applyArgs);
-  }
-  runOutsideAngular(fn) {
-    return fn();
-  }
-  runTask(fn, applyThis, applyArgs, name) {
-    return fn.apply(applyThis, applyArgs);
-  }
-};
-function shouldBeIgnoredByZone(applyArgs) {
-  return hasApplyArgsData(applyArgs, "__ignore_ng_zone__");
-}
-function isSchedulerTick(applyArgs) {
-  return hasApplyArgsData(applyArgs, "__scheduler_tick__");
-}
-function hasApplyArgsData(applyArgs, key) {
-  if (!Array.isArray(applyArgs)) {
-    return false;
-  }
-  if (applyArgs.length !== 1) {
-    return false;
-  }
-  return applyArgs[0]?.data?.[key] === true;
-}
-function getNgZone(ngZoneToUse = "zone.js", options) {
-  if (ngZoneToUse === "noop") {
-    return new NoopNgZone();
-  }
-  if (ngZoneToUse === "zone.js") {
-    return new NgZone(options);
-  }
-  return ngZoneToUse;
-}
-var ErrorHandler = class {
-  /**
-   * @internal
-   */
-  _console = console;
-  handleError(error) {
-    this._console.error("ERROR", error);
-  }
-};
-var INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "internal error handler" : "", {
-  providedIn: "root",
-  factory: () => {
-    const zone = inject(NgZone);
-    const userErrorHandler = inject(ErrorHandler);
-    return (e) => zone.runOutsideAngular(() => userErrorHandler.handleError(e));
-  }
-});
-var OutputEmitterRef = class {
-  destroyed = false;
-  listeners = null;
-  errorHandler = inject(ErrorHandler, {
-    optional: true
-  });
-  /** @internal */
-  destroyRef = inject(DestroyRef);
-  constructor() {
-    this.destroyRef.onDestroy(() => {
-      this.destroyed = true;
-      this.listeners = null;
-    });
-  }
-  subscribe(callback) {
-    if (this.destroyed) {
-      throw new RuntimeError(953, ngDevMode && "Unexpected subscription to destroyed `OutputRef`. The owning directive/component is destroyed.");
-    }
-    (this.listeners ??= []).push(callback);
-    return {
-      unsubscribe: () => {
-        const idx = this.listeners?.indexOf(callback);
-        if (idx !== void 0 && idx !== -1) {
-          this.listeners?.splice(idx, 1);
-        }
-      }
-    };
-  }
-  /** Emits a new value to the output. */
-  emit(value) {
-    if (this.destroyed) {
-      throw new RuntimeError(953, ngDevMode && "Unexpected emit for destroyed `OutputRef`. The owning directive/component is destroyed.");
-    }
-    if (this.listeners === null) {
-      return;
-    }
-    const previousConsumer = setActiveConsumer(null);
-    try {
-      for (const listenerFn of this.listeners) {
-        try {
-          listenerFn(value);
-        } catch (err) {
-          this.errorHandler?.handleError(err);
-        }
-      }
-    } finally {
-      setActiveConsumer(previousConsumer);
-    }
-  }
-};
-function getOutputDestroyRef(ref) {
-  return ref.destroyRef;
-}
-function output(opts) {
-  ngDevMode && assertInInjectionContext(output);
-  return new OutputEmitterRef();
-}
-function inputFunction(initialValue, opts) {
-  ngDevMode && assertInInjectionContext(input);
-  return createInputSignal(initialValue, opts);
-}
-function inputRequiredFunction(opts) {
-  ngDevMode && assertInInjectionContext(input);
-  return createInputSignal(REQUIRED_UNSET_VALUE, opts);
-}
-var input = (() => {
-  inputFunction.required = inputRequiredFunction;
-  return inputFunction;
-})();
-function injectElementRef() {
-  return createElementRef(getCurrentTNode(), getLView());
-}
-function createElementRef(tNode, lView) {
-  return new ElementRef(getNativeByTNode(tNode, lView));
-}
-var ElementRef = class {
-  /**
-   * <div class="callout is-critical">
-   *   <header>Use with caution</header>
-   *   <p>
-   *    Use this API as the last resort when direct access to DOM is needed. Use templating and
-   *    data-binding provided by Angular instead. Alternatively you can take a look at
-   *    {@link Renderer2} which provides an API that can be safely used.
-   *   </p>
-   * </div>
-   */
-  nativeElement;
-  constructor(nativeElement) {
-    this.nativeElement = nativeElement;
-  }
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectElementRef;
-};
-function unwrapElementRef(value) {
-  return value instanceof ElementRef ? value.nativeElement : value;
-}
-function symbolIterator() {
-  return this._results[Symbol.iterator]();
-}
-var QueryList = class {
-  _emitDistinctChangesOnly;
-  dirty = true;
-  _onDirty = void 0;
-  _results = [];
-  _changesDetected = false;
-  _changes = void 0;
-  length = 0;
-  first = void 0;
-  last = void 0;
-  /**
-   * Returns `Observable` of `QueryList` notifying the subscriber of changes.
-   */
-  get changes() {
-    return this._changes ??= new Subject();
-  }
-  /**
-   * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change
-   *     has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in
-   *     the same result)
-   */
-  constructor(_emitDistinctChangesOnly = false) {
-    this._emitDistinctChangesOnly = _emitDistinctChangesOnly;
-  }
-  /**
-   * Returns the QueryList entry at `index`.
-   */
-  get(index) {
-    return this._results[index];
-  }
-  /**
-   * See
-   * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
-   */
-  map(fn) {
-    return this._results.map(fn);
-  }
-  filter(fn) {
-    return this._results.filter(fn);
-  }
-  /**
-   * See
-   * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
-   */
-  find(fn) {
-    return this._results.find(fn);
-  }
-  /**
-   * See
-   * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
-   */
-  reduce(fn, init) {
-    return this._results.reduce(fn, init);
-  }
-  /**
-   * See
-   * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
-   */
-  forEach(fn) {
-    this._results.forEach(fn);
-  }
-  /**
-   * See
-   * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
-   */
-  some(fn) {
-    return this._results.some(fn);
-  }
-  /**
-   * Returns a copy of the internal results list as an Array.
-   */
-  toArray() {
-    return this._results.slice();
-  }
-  toString() {
-    return this._results.toString();
-  }
-  /**
-   * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that
-   * on change detection, it will not notify of changes to the queries, unless a new change
-   * occurs.
-   *
-   * @param resultsTree The query results to store
-   * @param identityAccessor Optional function for extracting stable object identity from a value
-   *    in the array. This function is executed for each element of the query result list while
-   *    comparing current query list with the new one (provided as a first argument of the `reset`
-   *    function) to detect if the lists are different. If the function is not provided, elements
-   *    are compared as is (without any pre-processing).
-   */
-  reset(resultsTree, identityAccessor) {
-    this.dirty = false;
-    const newResultFlat = flatten(resultsTree);
-    if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {
-      this._results = newResultFlat;
-      this.length = newResultFlat.length;
-      this.last = newResultFlat[this.length - 1];
-      this.first = newResultFlat[0];
-    }
-  }
-  /**
-   * Triggers a change event by emitting on the `changes` {@link EventEmitter}.
-   */
-  notifyOnChanges() {
-    if (this._changes !== void 0 && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);
-  }
-  /** @internal */
-  onDirty(cb) {
-    this._onDirty = cb;
-  }
-  /** internal */
-  setDirty() {
-    this.dirty = true;
-    this._onDirty?.();
-  }
-  /** internal */
-  destroy() {
-    if (this._changes !== void 0) {
-      this._changes.complete();
-      this._changes.unsubscribe();
-    }
-  }
-  [Symbol.iterator] = /* @__PURE__ */ (() => symbolIterator)();
-};
-var SKIP_HYDRATION_ATTR_NAME = "ngSkipHydration";
-var SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = "ngskiphydration";
-function hasSkipHydrationAttrOnTNode(tNode) {
-  const attrs = tNode.mergedAttrs;
-  if (attrs === null) return false;
-  for (let i = 0; i < attrs.length; i += 2) {
-    const value = attrs[i];
-    if (typeof value === "number") return false;
-    if (typeof value === "string" && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {
-      return true;
-    }
-  }
-  return false;
-}
-function hasSkipHydrationAttrOnRElement(rNode) {
-  return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);
-}
-function hasInSkipHydrationBlockFlag(tNode) {
-  return (tNode.flags & 128) === 128;
-}
-function isInSkipHydrationBlock(tNode) {
-  if (hasInSkipHydrationBlockFlag(tNode)) {
-    return true;
-  }
-  let currentTNode = tNode.parent;
-  while (currentTNode) {
-    if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {
-      return true;
-    }
-    currentTNode = currentTNode.parent;
-  }
-  return false;
-}
-function isI18nInSkipHydrationBlock(parentTNode) {
-  return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);
-}
-var ChangeDetectionStrategy;
-(function(ChangeDetectionStrategy2) {
-  ChangeDetectionStrategy2[ChangeDetectionStrategy2["OnPush"] = 0] = "OnPush";
-  ChangeDetectionStrategy2[ChangeDetectionStrategy2["Default"] = 1] = "Default";
-})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
-var TRACKED_LVIEWS = /* @__PURE__ */ new Map();
-var uniqueIdCounter = 0;
-function getUniqueLViewId() {
-  return uniqueIdCounter++;
-}
-function registerLView(lView) {
-  ngDevMode && assertNumber(lView[ID], "LView must have an ID in order to be registered");
-  TRACKED_LVIEWS.set(lView[ID], lView);
-}
-function getLViewById(id) {
-  ngDevMode && assertNumber(id, "ID used for LView lookup must be a number");
-  return TRACKED_LVIEWS.get(id) || null;
-}
-function unregisterLView(lView) {
-  ngDevMode && assertNumber(lView[ID], "Cannot stop tracking an LView that does not have an ID");
-  TRACKED_LVIEWS.delete(lView[ID]);
-}
-function getTrackedLViews() {
-  return TRACKED_LVIEWS;
-}
-var LContext = class {
-  lViewId;
-  nodeIndex;
-  native;
-  /**
-   * The instance of the Component node.
-   */
-  component;
-  /**
-   * The list of active directives that exist on this element.
-   */
-  directives;
-  /**
-   * The map of local references (local reference name => element or directive instance) that
-   * exist on this element.
-   */
-  localRefs;
-  /** Component's parent view data. */
-  get lView() {
-    return getLViewById(this.lViewId);
-  }
-  constructor(lViewId, nodeIndex, native) {
-    this.lViewId = lViewId;
-    this.nodeIndex = nodeIndex;
-    this.native = native;
-  }
-};
-function getLContext(target) {
-  let mpValue = readPatchedData(target);
-  if (mpValue) {
-    if (isLView(mpValue)) {
-      const lView = mpValue;
-      let nodeIndex;
-      let component = void 0;
-      let directives = void 0;
-      if (isComponentInstance(target)) {
-        nodeIndex = findViaComponent(lView, target);
-        if (nodeIndex == -1) {
-          throw new Error("The provided component was not found in the application");
-        }
-        component = target;
-      } else if (isDirectiveInstance(target)) {
-        nodeIndex = findViaDirective(lView, target);
-        if (nodeIndex == -1) {
-          throw new Error("The provided directive was not found in the application");
-        }
-        directives = getDirectivesAtNodeIndex(nodeIndex, lView);
-      } else {
-        nodeIndex = findViaNativeElement(lView, target);
-        if (nodeIndex == -1) {
-          return null;
-        }
-      }
-      const native = unwrapRNode(lView[nodeIndex]);
-      const existingCtx = readPatchedData(native);
-      const context2 = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);
-      if (component && context2.component === void 0) {
-        context2.component = component;
-        attachPatchData(context2.component, context2);
-      }
-      if (directives && context2.directives === void 0) {
-        context2.directives = directives;
-        for (let i = 0; i < directives.length; i++) {
-          attachPatchData(directives[i], context2);
-        }
-      }
-      attachPatchData(context2.native, context2);
-      mpValue = context2;
-    }
-  } else {
-    const rElement = target;
-    ngDevMode && assertDomNode(rElement);
-    let parent = rElement;
-    while (parent = parent.parentNode) {
-      const parentContext = readPatchedData(parent);
-      if (parentContext) {
-        const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
-        if (!lView) {
-          return null;
-        }
-        const index = findViaNativeElement(lView, rElement);
-        if (index >= 0) {
-          const native = unwrapRNode(lView[index]);
-          const context2 = createLContext(lView, index, native);
-          attachPatchData(native, context2);
-          mpValue = context2;
-          break;
-        }
-      }
-    }
-  }
-  return mpValue || null;
-}
-function createLContext(lView, nodeIndex, native) {
-  return new LContext(lView[ID], nodeIndex, native);
-}
-function getComponentViewByInstance(componentInstance) {
-  let patchedData = readPatchedData(componentInstance);
-  let lView;
-  if (isLView(patchedData)) {
-    const contextLView = patchedData;
-    const nodeIndex = findViaComponent(contextLView, componentInstance);
-    lView = getComponentLViewByIndex(nodeIndex, contextLView);
-    const context2 = createLContext(contextLView, nodeIndex, lView[HOST]);
-    context2.component = componentInstance;
-    attachPatchData(componentInstance, context2);
-    attachPatchData(context2.native, context2);
-  } else {
-    const context2 = patchedData;
-    const contextLView = context2.lView;
-    ngDevMode && assertLView(contextLView);
-    lView = getComponentLViewByIndex(context2.nodeIndex, contextLView);
-  }
-  return lView;
-}
-var MONKEY_PATCH_KEY_NAME = "__ngContext__";
-function attachPatchData(target, data) {
-  ngDevMode && assertDefined(target, "Target expected");
-  if (isLView(data)) {
-    target[MONKEY_PATCH_KEY_NAME] = data[ID];
-    registerLView(data);
-  } else {
-    target[MONKEY_PATCH_KEY_NAME] = data;
-  }
-}
-function readPatchedData(target) {
-  ngDevMode && assertDefined(target, "Target expected");
-  const data = target[MONKEY_PATCH_KEY_NAME];
-  return typeof data === "number" ? getLViewById(data) : data || null;
-}
-function readPatchedLView(target) {
-  const value = readPatchedData(target);
-  if (value) {
-    return isLView(value) ? value : value.lView;
-  }
-  return null;
-}
-function isComponentInstance(instance) {
-  return instance && instance.constructor && instance.constructor.ɵcmp;
-}
-function isDirectiveInstance(instance) {
-  return instance && instance.constructor && instance.constructor.ɵdir;
-}
-function findViaNativeElement(lView, target) {
-  const tView = lView[TVIEW];
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    if (unwrapRNode(lView[i]) === target) {
-      return i;
-    }
-  }
-  return -1;
-}
-function traverseNextElement(tNode) {
-  if (tNode.child) {
-    return tNode.child;
-  } else if (tNode.next) {
-    return tNode.next;
-  } else {
-    while (tNode.parent && !tNode.parent.next) {
-      tNode = tNode.parent;
-    }
-    return tNode.parent && tNode.parent.next;
-  }
-}
-function findViaComponent(lView, componentInstance) {
-  const componentIndices = lView[TVIEW].components;
-  if (componentIndices) {
-    for (let i = 0; i < componentIndices.length; i++) {
-      const elementComponentIndex = componentIndices[i];
-      const componentView = getComponentLViewByIndex(elementComponentIndex, lView);
-      if (componentView[CONTEXT] === componentInstance) {
-        return elementComponentIndex;
-      }
-    }
-  } else {
-    const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);
-    const rootComponent = rootComponentView[CONTEXT];
-    if (rootComponent === componentInstance) {
-      return HEADER_OFFSET;
-    }
-  }
-  return -1;
-}
-function findViaDirective(lView, directiveInstance) {
-  let tNode = lView[TVIEW].firstChild;
-  while (tNode) {
-    const directiveIndexStart = tNode.directiveStart;
-    const directiveIndexEnd = tNode.directiveEnd;
-    for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {
-      if (lView[i] === directiveInstance) {
-        return tNode.index;
-      }
-    }
-    tNode = traverseNextElement(tNode);
-  }
-  return -1;
-}
-function getDirectivesAtNodeIndex(nodeIndex, lView) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  if (tNode.directiveStart === 0) return EMPTY_ARRAY;
-  const results = [];
-  for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
-    const directiveInstance = lView[i];
-    if (!isComponentInstance(directiveInstance)) {
-      results.push(directiveInstance);
-    }
-  }
-  return results;
-}
-function getComponentAtNodeIndex(nodeIndex, lView) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  const {
-    directiveStart,
-    componentOffset
-  } = tNode;
-  return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;
-}
-function discoverLocalRefs(lView, nodeIndex) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  if (tNode && tNode.localNames) {
-    const result = {};
-    let localIndex = tNode.index + 1;
-    for (let i = 0; i < tNode.localNames.length; i += 2) {
-      result[tNode.localNames[i]] = lView[localIndex];
-      localIndex++;
-    }
-    return result;
-  }
-  return null;
-}
-function getRootView(componentOrLView) {
-  ngDevMode && assertDefined(componentOrLView, "component");
-  let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
-  while (lView && !(lView[FLAGS] & 512)) {
-    lView = getLViewParent(lView);
-  }
-  ngDevMode && assertLView(lView);
-  return lView;
-}
-function getRootContext(viewOrComponent) {
-  const rootView = getRootView(viewOrComponent);
-  ngDevMode && assertDefined(rootView[CONTEXT], "Root view has no context. Perhaps it is disconnected?");
-  return rootView[CONTEXT];
-}
-function getFirstLContainer(lView) {
-  return getNearestLContainer(lView[CHILD_HEAD]);
-}
-function getNextLContainer(container) {
-  return getNearestLContainer(container[NEXT]);
-}
-function getNearestLContainer(viewOrContainer) {
-  while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
-    viewOrContainer = viewOrContainer[NEXT];
-  }
-  return viewOrContainer;
-}
-function getComponent(element) {
-  ngDevMode && assertDomElement(element);
-  const context2 = getLContext(element);
-  if (context2 === null) return null;
-  if (context2.component === void 0) {
-    const lView = context2.lView;
-    if (lView === null) {
-      return null;
-    }
-    context2.component = getComponentAtNodeIndex(context2.nodeIndex, lView);
-  }
-  return context2.component;
-}
-function getContext(element) {
-  assertDomElement(element);
-  const context2 = getLContext(element);
-  const lView = context2 ? context2.lView : null;
-  return lView === null ? null : lView[CONTEXT];
-}
-function getOwningComponent(elementOrDir) {
-  const context2 = getLContext(elementOrDir);
-  let lView = context2 ? context2.lView : null;
-  if (lView === null) return null;
-  let parent;
-  while (lView[TVIEW].type === 2 && (parent = getLViewParent(lView))) {
-    lView = parent;
-  }
-  return lView[FLAGS] & 512 ? null : lView[CONTEXT];
-}
-function getRootComponents(elementOrDir) {
-  const lView = readPatchedLView(elementOrDir);
-  return lView !== null ? [getRootContext(lView)] : [];
-}
-function getInjector(elementOrDir) {
-  const context2 = getLContext(elementOrDir);
-  const lView = context2 ? context2.lView : null;
-  if (lView === null) return Injector.NULL;
-  const tNode = lView[TVIEW].data[context2.nodeIndex];
-  return new NodeInjector(tNode, lView);
-}
-function getInjectionTokens(element) {
-  const context2 = getLContext(element);
-  const lView = context2 ? context2.lView : null;
-  if (lView === null) return [];
-  const tView = lView[TVIEW];
-  const tNode = tView.data[context2.nodeIndex];
-  const providerTokens = [];
-  const startIndex = tNode.providerIndexes & 1048575;
-  const endIndex = tNode.directiveEnd;
-  for (let i = startIndex; i < endIndex; i++) {
-    let value = tView.data[i];
-    if (isDirectiveDefHack(value)) {
-      value = value.type;
-    }
-    providerTokens.push(value);
-  }
-  return providerTokens;
-}
-function getDirectives(node) {
-  if (node instanceof Text) {
-    return [];
-  }
-  const context2 = getLContext(node);
-  const lView = context2 ? context2.lView : null;
-  if (lView === null) {
-    return [];
-  }
-  const tView = lView[TVIEW];
-  const nodeIndex = context2.nodeIndex;
-  if (!tView?.data[nodeIndex]) {
-    return [];
-  }
-  if (context2.directives === void 0) {
-    context2.directives = getDirectivesAtNodeIndex(nodeIndex, lView);
-  }
-  return context2.directives === null ? [] : [...context2.directives];
-}
-function getDirectiveMetadata$1(directiveOrComponentInstance) {
-  const {
-    constructor
-  } = directiveOrComponentInstance;
-  if (!constructor) {
-    throw new Error("Unable to find the instance constructor");
-  }
-  const componentDef = getComponentDef(constructor);
-  if (componentDef) {
-    const inputs = extractInputDebugMetadata(componentDef.inputs);
-    return {
-      inputs,
-      outputs: componentDef.outputs,
-      encapsulation: componentDef.encapsulation,
-      changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Default
-    };
-  }
-  const directiveDef = getDirectiveDef(constructor);
-  if (directiveDef) {
-    const inputs = extractInputDebugMetadata(directiveDef.inputs);
-    return {
-      inputs,
-      outputs: directiveDef.outputs
-    };
-  }
-  return null;
-}
-function getLocalRefs(target) {
-  const context2 = getLContext(target);
-  if (context2 === null) return {};
-  if (context2.localRefs === void 0) {
-    const lView = context2.lView;
-    if (lView === null) {
-      return {};
-    }
-    context2.localRefs = discoverLocalRefs(lView, context2.nodeIndex);
-  }
-  return context2.localRefs || {};
-}
-function getHostElement(componentOrDirective) {
-  return getLContext(componentOrDirective).native;
-}
-function getListeners(element) {
-  ngDevMode && assertDomElement(element);
-  const lContext = getLContext(element);
-  const lView = lContext === null ? null : lContext.lView;
-  if (lView === null) return [];
-  const tView = lView[TVIEW];
-  const lCleanup = lView[CLEANUP];
-  const tCleanup = tView.cleanup;
-  const listeners = [];
-  if (tCleanup && lCleanup) {
-    for (let i = 0; i < tCleanup.length; ) {
-      const firstParam = tCleanup[i++];
-      const secondParam = tCleanup[i++];
-      if (typeof firstParam === "string") {
-        const name = firstParam;
-        const listenerElement = unwrapRNode(lView[secondParam]);
-        const callback = lCleanup[tCleanup[i++]];
-        const useCaptureOrIndx = tCleanup[i++];
-        const type = typeof useCaptureOrIndx === "boolean" || useCaptureOrIndx >= 0 ? "dom" : "output";
-        const useCapture = typeof useCaptureOrIndx === "boolean" ? useCaptureOrIndx : false;
-        if (element == listenerElement) {
-          listeners.push({
-            element,
-            name,
-            callback,
-            useCapture,
-            type
-          });
-        }
-      }
-    }
-  }
-  listeners.sort(sortListeners);
-  return listeners;
-}
-function sortListeners(a, b) {
-  if (a.name == b.name) return 0;
-  return a.name < b.name ? -1 : 1;
-}
-function isDirectiveDefHack(obj) {
-  return obj.type !== void 0 && obj.declaredInputs !== void 0 && obj.findHostDirectiveDefs !== void 0;
-}
-function assertDomElement(value) {
-  if (typeof Element !== "undefined" && !(value instanceof Element)) {
-    throw new Error("Expecting instance of DOM Element");
-  }
-}
-function extractInputDebugMetadata(inputs) {
-  const res = {};
-  for (const key in inputs) {
-    if (!inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    const value = inputs[key];
-    if (value === void 0) {
-      continue;
-    }
-    let minifiedName;
-    if (Array.isArray(value)) {
-      minifiedName = value[0];
-    } else {
-      minifiedName = value;
-    }
-    res[key] = minifiedName;
-  }
-  return res;
-}
-var DOCUMENT = void 0;
-function setDocument(document2) {
-  DOCUMENT = document2;
-}
-function getDocument() {
-  if (DOCUMENT !== void 0) {
-    return DOCUMENT;
-  } else if (typeof document !== "undefined") {
-    return document;
-  }
-  throw new RuntimeError(210, (typeof ngDevMode === "undefined" || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);
-}
-var APP_ID = new InjectionToken(ngDevMode ? "AppId" : "", {
-  providedIn: "root",
-  factory: () => DEFAULT_APP_ID
-});
-var DEFAULT_APP_ID = "ng";
-var PLATFORM_INITIALIZER = new InjectionToken(ngDevMode ? "Platform Initializer" : "");
-var PLATFORM_ID = new InjectionToken(ngDevMode ? "Platform ID" : "", {
-  providedIn: "platform",
-  factory: () => "unknown"
-  // set a default platform name, when none set explicitly
-});
-var PACKAGE_ROOT_URL = new InjectionToken(ngDevMode ? "Application Packages Root URL" : "");
-var ANIMATION_MODULE_TYPE = new InjectionToken(ngDevMode ? "AnimationModuleType" : "");
-var CSP_NONCE = new InjectionToken(ngDevMode ? "CSP nonce" : "", {
-  providedIn: "root",
-  factory: () => {
-    return getDocument().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce") || null;
-  }
-});
-var IMAGE_CONFIG_DEFAULTS = {
-  breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-  placeholderResolution: 30,
-  disableImageSizeWarning: false,
-  disableImageLazyLoadWarning: false
-};
-var IMAGE_CONFIG = new InjectionToken(ngDevMode ? "ImageConfig" : "", {
-  providedIn: "root",
-  factory: () => IMAGE_CONFIG_DEFAULTS
-});
-function makeStateKey(key) {
-  return key;
-}
-function initTransferState() {
-  const transferState = new TransferState();
-  if (inject(PLATFORM_ID) === "browser") {
-    transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
-  }
-  return transferState;
-}
-var TransferState = class _TransferState {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _TransferState,
-      providedIn: "root",
-      factory: initTransferState
-    })
-  );
-  /** @internal */
-  store = {};
-  onSerializeCallbacks = {};
-  /**
-   * Get the value corresponding to a key. Return `defaultValue` if key is not found.
-   */
-  get(key, defaultValue) {
-    return this.store[key] !== void 0 ? this.store[key] : defaultValue;
-  }
-  /**
-   * Set the value corresponding to a key.
-   */
-  set(key, value) {
-    this.store[key] = value;
-  }
-  /**
-   * Remove a key from the store.
-   */
-  remove(key) {
-    delete this.store[key];
-  }
-  /**
-   * Test whether a key exists in the store.
-   */
-  hasKey(key) {
-    return this.store.hasOwnProperty(key);
-  }
-  /**
-   * Indicates whether the state is empty.
-   */
-  get isEmpty() {
-    return Object.keys(this.store).length === 0;
-  }
-  /**
-   * Register a callback to provide the value for a key when `toJson` is called.
-   */
-  onSerialize(key, callback) {
-    this.onSerializeCallbacks[key] = callback;
-  }
-  /**
-   * Serialize the current state of the store to JSON.
-   */
-  toJson() {
-    for (const key in this.onSerializeCallbacks) {
-      if (this.onSerializeCallbacks.hasOwnProperty(key)) {
-        try {
-          this.store[key] = this.onSerializeCallbacks[key]();
-        } catch (e) {
-          console.warn("Exception in onSerialize callback: ", e);
-        }
-      }
-    }
-    return JSON.stringify(this.store).replace(/</g, "\\u003C");
-  }
-};
-function retrieveTransferredState(doc, appId) {
-  const script = doc.getElementById(appId + "-state");
-  if (script?.textContent) {
-    try {
-      return JSON.parse(script.textContent);
-    } catch (e) {
-      console.warn("Exception while restoring TransferState for app " + appId, e);
-    }
-  }
-  return {};
-}
-var REFERENCE_NODE_HOST = "h";
-var REFERENCE_NODE_BODY = "b";
-var NodeNavigationStep;
-(function(NodeNavigationStep2) {
-  NodeNavigationStep2["FirstChild"] = "f";
-  NodeNavigationStep2["NextSibling"] = "n";
-})(NodeNavigationStep || (NodeNavigationStep = {}));
-var ELEMENT_CONTAINERS = "e";
-var TEMPLATES = "t";
-var CONTAINERS = "c";
-var MULTIPLIER = "x";
-var NUM_ROOT_NODES = "r";
-var TEMPLATE_ID = "i";
-var NODES = "n";
-var DISCONNECTED_NODES = "d";
-var I18N_DATA = "l";
-var DEFER_BLOCK_ID = "di";
-var DEFER_BLOCK_STATE$1 = "s";
-var DEFER_PARENT_BLOCK_ID = "p";
-var DEFER_HYDRATE_TRIGGERS = "t";
-var IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_HYDRATION_DOM_REUSE_ENABLED" : "");
-var PRESERVE_HOST_CONTENT_DEFAULT = false;
-var PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "PRESERVE_HOST_CONTENT" : "", {
-  providedIn: "root",
-  factory: () => PRESERVE_HOST_CONTENT_DEFAULT
-});
-var IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_I18N_HYDRATION_ENABLED" : "");
-var IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_EVENT_REPLAY_ENABLED" : "");
-var EVENT_REPLAY_ENABLED_DEFAULT = false;
-var IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_INCREMENTAL_HYDRATION_ENABLED" : "");
-var JSACTION_BLOCK_ELEMENT_MAP = new InjectionToken(ngDevMode ? "JSACTION_BLOCK_ELEMENT_MAP" : "", {
-  providedIn: "root",
-  factory: () => /* @__PURE__ */ new Map()
-});
-var TracingAction;
-(function(TracingAction2) {
-  TracingAction2[TracingAction2["CHANGE_DETECTION"] = 0] = "CHANGE_DETECTION";
-  TracingAction2[TracingAction2["AFTER_NEXT_RENDER"] = 1] = "AFTER_NEXT_RENDER";
-})(TracingAction || (TracingAction = {}));
-var TracingService = new InjectionToken(ngDevMode ? "TracingService" : "");
-var markedFeatures = /* @__PURE__ */ new Set();
-function performanceMarkFeature(feature) {
-  if (markedFeatures.has(feature)) {
-    return;
-  }
-  markedFeatures.add(feature);
-  performance?.mark?.("mark_feature_usage", {
-    detail: {
-      feature
-    }
-  });
-}
-function assertNotInReactiveContext(debugFn, extraContext) {
-  if (getActiveConsumer() !== null) {
-    throw new RuntimeError(-602, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ""}`);
-  }
-}
-var AfterRenderPhase;
-(function(AfterRenderPhase2) {
-  AfterRenderPhase2[AfterRenderPhase2["EarlyRead"] = 0] = "EarlyRead";
-  AfterRenderPhase2[AfterRenderPhase2["Write"] = 1] = "Write";
-  AfterRenderPhase2[AfterRenderPhase2["MixedReadWrite"] = 2] = "MixedReadWrite";
-  AfterRenderPhase2[AfterRenderPhase2["Read"] = 3] = "Read";
-})(AfterRenderPhase || (AfterRenderPhase = {}));
-var AfterRenderManager = class _AfterRenderManager {
-  impl = null;
-  execute() {
-    this.impl?.execute();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _AfterRenderManager,
-      providedIn: "root",
-      factory: () => new _AfterRenderManager()
-    })
-  );
-};
-var AFTER_RENDER_PHASES = (() => [AfterRenderPhase.EarlyRead, AfterRenderPhase.Write, AfterRenderPhase.MixedReadWrite, AfterRenderPhase.Read])();
-var AfterRenderImpl = class _AfterRenderImpl {
-  ngZone = inject(NgZone);
-  scheduler = inject(ChangeDetectionScheduler);
-  errorHandler = inject(ErrorHandler, {
-    optional: true
-  });
-  /** Current set of active sequences. */
-  sequences = /* @__PURE__ */ new Set();
-  /** Tracks registrations made during the current set of executions. */
-  deferredRegistrations = /* @__PURE__ */ new Set();
-  /** Whether the `AfterRenderManager` is currently executing hooks. */
-  executing = false;
-  constructor() {
-    inject(TracingService, {
-      optional: true
-    });
-  }
-  /**
-   * Run the sequence of phases of hooks, once through. As a result of executing some hooks, more
-   * might be scheduled.
-   */
-  execute() {
-    this.executing = true;
-    for (const phase of AFTER_RENDER_PHASES) {
-      for (const sequence of this.sequences) {
-        if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {
-          continue;
-        }
-        try {
-          sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => sequence.hooks[phase](sequence.pipelinedValue), sequence.snapshot));
-        } catch (err) {
-          sequence.erroredOrDestroyed = true;
-          this.errorHandler?.handleError(err);
-        }
-      }
-    }
-    this.executing = false;
-    for (const sequence of this.sequences) {
-      sequence.afterRun();
-      if (sequence.once) {
-        this.sequences.delete(sequence);
-        sequence.destroy();
-      }
-    }
-    for (const sequence of this.deferredRegistrations) {
-      this.sequences.add(sequence);
-    }
-    if (this.deferredRegistrations.size > 0) {
-      this.scheduler.notify(
-        8
-        /* NotificationSource.DeferredRenderHook */
-      );
-    }
-    this.deferredRegistrations.clear();
-  }
-  register(sequence) {
-    if (!this.executing) {
-      this.sequences.add(sequence);
-      this.scheduler.notify(
-        7
-        /* NotificationSource.RenderHook */
-      );
-    } else {
-      this.deferredRegistrations.add(sequence);
-    }
-  }
-  unregister(sequence) {
-    if (this.executing && this.sequences.has(sequence)) {
-      sequence.erroredOrDestroyed = true;
-      sequence.pipelinedValue = void 0;
-      sequence.once = true;
-    } else {
-      this.sequences.delete(sequence);
-      this.deferredRegistrations.delete(sequence);
-    }
-  }
-  maybeTrace(fn, snapshot) {
-    return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _AfterRenderImpl,
-      providedIn: "root",
-      factory: () => new _AfterRenderImpl()
-    })
-  );
-};
-var AfterRenderSequence = class {
-  impl;
-  hooks;
-  once;
-  snapshot;
-  /**
-   * Whether this sequence errored or was destroyed during this execution, and hooks should no
-   * longer run for it.
-   */
-  erroredOrDestroyed = false;
-  /**
-   * The value returned by the last hook execution (if any), ready to be pipelined into the next
-   * one.
-   */
-  pipelinedValue = void 0;
-  unregisterOnDestroy;
-  constructor(impl, hooks, once, destroyRef, snapshot = null) {
-    this.impl = impl;
-    this.hooks = hooks;
-    this.once = once;
-    this.snapshot = snapshot;
-    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
-  }
-  afterRun() {
-    this.erroredOrDestroyed = false;
-    this.pipelinedValue = void 0;
-    this.snapshot?.dispose();
-    this.snapshot = null;
-  }
-  destroy() {
-    this.impl.unregister(this);
-    this.unregisterOnDestroy?.();
-  }
-};
-function afterRender(callbackOrSpec, options) {
-  ngDevMode && assertNotInReactiveContext(afterRender, "Call `afterRender` outside of a reactive context. For example, schedule the render callback inside the component constructor`.");
-  !options?.injector && assertInInjectionContext(afterRender);
-  const injector = options?.injector ?? inject(Injector);
-  if (false) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  performanceMarkFeature("NgAfterRender");
-  return afterRenderImpl(
-    callbackOrSpec,
-    injector,
-    options,
-    /* once */
-    false
-  );
-}
-function afterNextRender(callbackOrSpec, options) {
-  !options?.injector && assertInInjectionContext(afterNextRender);
-  const injector = options?.injector ?? inject(Injector);
-  if (false) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  performanceMarkFeature("NgAfterNextRender");
-  return afterRenderImpl(
-    callbackOrSpec,
-    injector,
-    options,
-    /* once */
-    true
-  );
-}
-function getHooks(callbackOrSpec, phase) {
-  if (callbackOrSpec instanceof Function) {
-    const hooks = [void 0, void 0, void 0, void 0];
-    hooks[phase] = callbackOrSpec;
-    return hooks;
-  } else {
-    return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];
-  }
-}
-function afterRenderImpl(callbackOrSpec, injector, options, once) {
-  const manager = injector.get(AfterRenderManager);
-  manager.impl ??= injector.get(AfterRenderImpl);
-  const tracing = injector.get(TracingService, null, {
-    optional: true
-  });
-  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;
-  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef, tracing?.snapshot(null));
-  manager.impl.register(sequence);
-  return sequence;
-}
-var DeferDependenciesLoadingState;
-(function(DeferDependenciesLoadingState2) {
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["NOT_STARTED"] = 0] = "NOT_STARTED";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["IN_PROGRESS"] = 1] = "IN_PROGRESS";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["COMPLETE"] = 2] = "COMPLETE";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["FAILED"] = 3] = "FAILED";
-})(DeferDependenciesLoadingState || (DeferDependenciesLoadingState = {}));
-var MINIMUM_SLOT = 0;
-var LOADING_AFTER_SLOT = 1;
-var DeferBlockState;
-(function(DeferBlockState2) {
-  DeferBlockState2[DeferBlockState2["Placeholder"] = 0] = "Placeholder";
-  DeferBlockState2[DeferBlockState2["Loading"] = 1] = "Loading";
-  DeferBlockState2[DeferBlockState2["Complete"] = 2] = "Complete";
-  DeferBlockState2[DeferBlockState2["Error"] = 3] = "Error";
-})(DeferBlockState || (DeferBlockState = {}));
-var DeferBlockInternalState;
-(function(DeferBlockInternalState2) {
-  DeferBlockInternalState2[DeferBlockInternalState2["Initial"] = -1] = "Initial";
-})(DeferBlockInternalState || (DeferBlockInternalState = {}));
-var NEXT_DEFER_BLOCK_STATE = 0;
-var DEFER_BLOCK_STATE = 1;
-var STATE_IS_FROZEN_UNTIL = 2;
-var LOADING_AFTER_CLEANUP_FN = 3;
-var TRIGGER_CLEANUP_FNS = 4;
-var PREFETCH_TRIGGER_CLEANUP_FNS = 5;
-var SSR_UNIQUE_ID = 6;
-var SSR_BLOCK_STATE = 7;
-var ON_COMPLETE_FNS = 8;
-var HYDRATE_TRIGGER_CLEANUP_FNS = 9;
-var DeferBlockBehavior;
-(function(DeferBlockBehavior2) {
-  DeferBlockBehavior2[DeferBlockBehavior2["Manual"] = 0] = "Manual";
-  DeferBlockBehavior2[DeferBlockBehavior2["Playthrough"] = 1] = "Playthrough";
-})(DeferBlockBehavior || (DeferBlockBehavior = {}));
-function storeTriggerCleanupFn(type, lDetails, cleanupFn) {
-  const key = getCleanupFnKeyByType(type);
-  if (lDetails[key] === null) {
-    lDetails[key] = [];
-  }
-  lDetails[key].push(cleanupFn);
-}
-function invokeTriggerCleanupFns(type, lDetails) {
-  const key = getCleanupFnKeyByType(type);
-  const cleanupFns = lDetails[key];
-  if (cleanupFns !== null) {
-    for (const cleanupFn of cleanupFns) {
-      cleanupFn();
-    }
-    lDetails[key] = null;
-  }
-}
-function invokeAllTriggerCleanupFns(lDetails) {
-  invokeTriggerCleanupFns(1, lDetails);
-  invokeTriggerCleanupFns(0, lDetails);
-  invokeTriggerCleanupFns(2, lDetails);
-}
-function getCleanupFnKeyByType(type) {
-  let key = TRIGGER_CLEANUP_FNS;
-  if (type === 1) {
-    key = PREFETCH_TRIGGER_CLEANUP_FNS;
-  } else if (type === 2) {
-    key = HYDRATE_TRIGGER_CLEANUP_FNS;
-  }
-  return key;
-}
-function getDeferBlockDataIndex(deferBlockIndex) {
-  return deferBlockIndex + 1;
-}
-function getLDeferBlockDetails(lView, tNode) {
-  const tView = lView[TVIEW];
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  return lView[slotIndex];
-}
-function setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {
-  const tView = lView[TVIEW];
-  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  lView[slotIndex] = lDetails;
-}
-function getTDeferBlockDetails(tView, tNode) {
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  return tView.data[slotIndex];
-}
-function setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {
-  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  tView.data[slotIndex] = deferBlockConfig;
-}
-function getTemplateIndexForState(newState, hostLView, tNode) {
-  const tView = hostLView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  switch (newState) {
-    case DeferBlockState.Complete:
-      return tDetails.primaryTmplIndex;
-    case DeferBlockState.Loading:
-      return tDetails.loadingTmplIndex;
-    case DeferBlockState.Error:
-      return tDetails.errorTmplIndex;
-    case DeferBlockState.Placeholder:
-      return tDetails.placeholderTmplIndex;
-    default:
-      ngDevMode && throwError2(`Unexpected defer block state: ${newState}`);
-      return null;
-  }
-}
-function getMinimumDurationForState(tDetails, currentState) {
-  if (currentState === DeferBlockState.Placeholder) {
-    return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;
-  } else if (currentState === DeferBlockState.Loading) {
-    return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;
-  }
-  return null;
-}
-function getLoadingBlockAfter(tDetails) {
-  return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;
-}
-function addDepsToRegistry(currentDeps, newDeps) {
-  if (!currentDeps || currentDeps.length === 0) {
-    return newDeps;
-  }
-  const currentDepSet = new Set(currentDeps);
-  for (const dep of newDeps) {
-    currentDepSet.add(dep);
-  }
-  return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);
-}
-function getPrimaryBlockTNode(tView, tDetails) {
-  const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;
-  return getTNode(tView, adjustedIndex);
-}
-function assertDeferredDependenciesLoaded(tDetails) {
-  assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, "Expecting all deferred dependencies to be loaded.");
-}
-function isTDeferBlockDetails(value) {
-  return value !== null && typeof value === "object" && typeof value.primaryTmplIndex === "number";
-}
-function isDeferBlock(tView, tNode) {
-  let tDetails = null;
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {
-    tDetails = getTDeferBlockDetails(tView, tNode);
-  }
-  return !!tDetails && isTDeferBlockDetails(tDetails);
-}
-var eventListenerOptions = {
-  passive: true,
-  capture: true
-};
-var hoverTriggers = /* @__PURE__ */ new WeakMap();
-var interactionTriggers = /* @__PURE__ */ new WeakMap();
-var viewportTriggers = /* @__PURE__ */ new WeakMap();
-var interactionEventNames = ["click", "keydown"];
-var hoverEventNames = ["mouseenter", "mouseover", "focusin"];
-var intersectionObserver = null;
-var observedViewportElements = 0;
-var DeferEventEntry = class {
-  callbacks = /* @__PURE__ */ new Set();
-  listener = () => {
-    for (const callback of this.callbacks) {
-      callback();
-    }
-  };
-};
-function onInteraction(trigger, callback) {
-  let entry = interactionTriggers.get(trigger);
-  if (!entry) {
-    entry = new DeferEventEntry();
-    interactionTriggers.set(trigger, entry);
-    for (const name of interactionEventNames) {
-      trigger.addEventListener(name, entry.listener, eventListenerOptions);
-    }
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    const {
-      callbacks,
-      listener
-    } = entry;
-    callbacks.delete(callback);
-    if (callbacks.size === 0) {
-      interactionTriggers.delete(trigger);
-      for (const name of interactionEventNames) {
-        trigger.removeEventListener(name, listener, eventListenerOptions);
-      }
-    }
-  };
-}
-function onHover(trigger, callback) {
-  let entry = hoverTriggers.get(trigger);
-  if (!entry) {
-    entry = new DeferEventEntry();
-    hoverTriggers.set(trigger, entry);
-    for (const name of hoverEventNames) {
-      trigger.addEventListener(name, entry.listener, eventListenerOptions);
-    }
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    const {
-      callbacks,
-      listener
-    } = entry;
-    callbacks.delete(callback);
-    if (callbacks.size === 0) {
-      for (const name of hoverEventNames) {
-        trigger.removeEventListener(name, listener, eventListenerOptions);
-      }
-      hoverTriggers.delete(trigger);
-    }
-  };
-}
-function onViewport(trigger, callback, injector) {
-  const ngZone = injector.get(NgZone);
-  let entry = viewportTriggers.get(trigger);
-  intersectionObserver = intersectionObserver || ngZone.runOutsideAngular(() => {
-    return new IntersectionObserver((entries) => {
-      for (const current of entries) {
-        if (current.isIntersecting && viewportTriggers.has(current.target)) {
-          ngZone.run(viewportTriggers.get(current.target).listener);
-        }
-      }
-    });
-  });
-  if (!entry) {
-    entry = new DeferEventEntry();
-    ngZone.runOutsideAngular(() => intersectionObserver.observe(trigger));
-    viewportTriggers.set(trigger, entry);
-    observedViewportElements++;
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    if (!viewportTriggers.has(trigger)) {
-      return;
-    }
-    entry.callbacks.delete(callback);
-    if (entry.callbacks.size === 0) {
-      intersectionObserver?.unobserve(trigger);
-      viewportTriggers.delete(trigger);
-      observedViewportElements--;
-    }
-    if (observedViewportElements === 0) {
-      intersectionObserver?.disconnect();
-      intersectionObserver = null;
-    }
-  };
-}
-function getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {
-  if (walkUpTimes == null) {
-    return deferredHostLView;
-  }
-  if (walkUpTimes >= 0) {
-    return walkUpViews(walkUpTimes, deferredHostLView);
-  }
-  const deferredContainer = deferredHostLView[deferredTNode.index];
-  ngDevMode && assertLContainer(deferredContainer);
-  const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;
-  if (ngDevMode && triggerLView !== null) {
-    const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);
-    const renderedState = lDetails[DEFER_BLOCK_STATE];
-    assertEqual(renderedState, DeferBlockState.Placeholder, "Expected a placeholder to be rendered in this defer block.");
-    assertLView(triggerLView);
-  }
-  return triggerLView;
-}
-function getTriggerElement(triggerLView, triggerIndex) {
-  const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);
-  ngDevMode && assertElement(element);
-  return element;
-}
-function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type) {
-  const injector = initialLView[INJECTOR];
-  const zone = injector.get(NgZone);
-  function pollDomTrigger() {
-    if (isDestroyed(initialLView)) {
-      return;
-    }
-    const lDetails = getLDeferBlockDetails(initialLView, tNode);
-    const renderedState = lDetails[DEFER_BLOCK_STATE];
-    if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {
-      return;
-    }
-    const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);
-    if (!triggerLView) {
-      afterNextRender({
-        read: pollDomTrigger
-      }, {
-        injector
-      });
-      return;
-    }
-    if (isDestroyed(triggerLView)) {
-      return;
-    }
-    const element = getTriggerElement(triggerLView, triggerIndex);
-    const cleanup = registerFn(element, () => {
-      zone.run(() => {
-        if (initialLView !== triggerLView) {
-          removeLViewOnDestroy(triggerLView, cleanup);
-        }
-        callback();
-      });
-    }, injector);
-    if (initialLView !== triggerLView) {
-      storeLViewOnDestroy(triggerLView, cleanup);
-    }
-    storeTriggerCleanupFn(type, lDetails, cleanup);
-  }
-  afterNextRender({
-    read: pollDomTrigger
-  }, {
-    injector
-  });
-}
-var DEFER_BLOCK_SSR_ID_ATTRIBUTE = "ngb";
-function setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {
-  if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {
-    return;
-  }
-  const existingAttr = nativeElement.getAttribute(Attribute.JSACTION);
-  const parts = eventTypes.reduce((prev, curr) => {
-    return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ":;" : prev;
-  }, "");
-  nativeElement.setAttribute(Attribute.JSACTION, `${existingAttr ?? ""}${parts}`);
-  const blockName = parentDeferBlockId ?? "";
-  if (blockName !== "" && parts.length > 0) {
-    nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);
-  }
-}
-var sharedStashFunction = (rEl, eventType, listenerFn) => {
-  const el = rEl;
-  const eventListenerMap = el.__jsaction_fns ?? /* @__PURE__ */ new Map();
-  const eventListeners = eventListenerMap.get(eventType) ?? [];
-  eventListeners.push(listenerFn);
-  eventListenerMap.set(eventType, eventListeners);
-  el.__jsaction_fns = eventListenerMap;
-};
-var sharedMapFunction = (rEl, jsActionMap) => {
-  let blockName = rEl.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? "";
-  const el = rEl;
-  const blockSet = jsActionMap.get(blockName) ?? /* @__PURE__ */ new Set();
-  if (!blockSet.has(el)) {
-    blockSet.add(el);
-  }
-  jsActionMap.set(blockName, blockSet);
-};
-function removeListenersFromBlocks(blockNames, jsActionMap) {
-  if (blockNames.length > 0) {
-    let blockList = [];
-    for (let blockName of blockNames) {
-      if (jsActionMap.has(blockName)) {
-        blockList = [...blockList, ...jsActionMap.get(blockName)];
-      }
-    }
-    const replayList = new Set(blockList);
-    replayList.forEach(removeListeners);
-  }
-}
-var removeListeners = (el) => {
-  el.removeAttribute(Attribute.JSACTION);
-  el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);
-  el.__jsaction_fns = void 0;
-};
-var JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? "EVENT_CONTRACT_DETAILS" : "", {
-  providedIn: "root",
-  factory: () => ({})
-});
-function invokeListeners(event, currentTarget) {
-  const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);
-  if (!handlerFns) {
-    return;
-  }
-  for (const handler of handlerFns) {
-    handler(event);
-  }
-}
-var DEHYDRATED_BLOCK_REGISTRY = new InjectionToken(ngDevMode ? "DEHYDRATED_BLOCK_REGISTRY" : "");
-var DehydratedBlockRegistry = class _DehydratedBlockRegistry {
-  registry = /* @__PURE__ */ new Map();
-  cleanupFns = /* @__PURE__ */ new Map();
-  jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
-  contract = inject(JSACTION_EVENT_CONTRACT);
-  add(blockId, info) {
-    this.registry.set(blockId, info);
-  }
-  get(blockId) {
-    return this.registry.get(blockId) ?? null;
-  }
-  has(blockId) {
-    return this.registry.has(blockId);
-  }
-  cleanup(hydratedBlocks) {
-    removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);
-    for (let blockId of hydratedBlocks) {
-      this.registry.delete(blockId);
-      this.jsActionMap.delete(blockId);
-      this.invokeTriggerCleanupFns(blockId);
-      this.hydrating.delete(blockId);
-    }
-    if (this.size === 0) {
-      this.contract.instance?.cleanUp();
-    }
-  }
-  get size() {
-    return this.registry.size;
-  }
-  // we have to leave the lowest block Id in the registry
-  // unless that block has no children
-  addCleanupFn(blockId, fn) {
-    let cleanupFunctions = [];
-    if (this.cleanupFns.has(blockId)) {
-      cleanupFunctions = this.cleanupFns.get(blockId);
-    }
-    cleanupFunctions.push(fn);
-    this.cleanupFns.set(blockId, cleanupFunctions);
-  }
-  invokeTriggerCleanupFns(blockId) {
-    const fns = this.cleanupFns.get(blockId) ?? [];
-    for (let fn of fns) {
-      fn();
-    }
-    this.cleanupFns.delete(blockId);
-  }
-  // Blocks that are being hydrated.
-  hydrating = /* @__PURE__ */ new Map();
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _DehydratedBlockRegistry,
-      providedIn: null,
-      factory: () => new _DehydratedBlockRegistry()
-    })
-  );
-};
-var TRANSFER_STATE_TOKEN_ID = "__nghData__";
-var NGH_DATA_KEY = makeStateKey(TRANSFER_STATE_TOKEN_ID);
-var TRANSFER_STATE_DEFER_BLOCKS_INFO = "__nghDeferData__";
-var NGH_DEFER_BLOCKS_KEY = makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);
-var NGH_ATTR_NAME = "ngh";
-var SSR_CONTENT_INTEGRITY_MARKER = "nghm";
-var _retrieveHydrationInfoImpl = () => null;
-function retrieveHydrationInfoImpl(rNode, injector, isRootView2 = false) {
-  let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
-  if (nghAttrValue == null) return null;
-  const [componentViewNgh, rootViewNgh] = nghAttrValue.split("|");
-  nghAttrValue = isRootView2 ? rootViewNgh : componentViewNgh;
-  if (!nghAttrValue) return null;
-  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : "";
-  const remainingNgh = isRootView2 ? componentViewNgh : rootNgh;
-  let data = {};
-  if (nghAttrValue !== "") {
-    const transferState = injector.get(TransferState, null, {
-      optional: true
-    });
-    if (transferState !== null) {
-      const nghData = transferState.get(NGH_DATA_KEY, []);
-      data = nghData[Number(nghAttrValue)];
-      ngDevMode && assertDefined(data, "Unable to retrieve hydration info from the TransferState.");
-    }
-  }
-  const dehydratedView = {
-    data,
-    firstChild: rNode.firstChild ?? null
-  };
-  if (isRootView2) {
-    dehydratedView.firstChild = rNode;
-    setSegmentHead(dehydratedView, 0, rNode.nextSibling);
-  }
-  if (remainingNgh) {
-    rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);
-  } else {
-    rNode.removeAttribute(NGH_ATTR_NAME);
-  }
-  ngDevMode && markRNodeAsClaimedByHydration(
-    rNode,
-    /* checkIfAlreadyClaimed */
-    false
-  );
-  ngDevMode && ngDevMode.hydratedComponents++;
-  return dehydratedView;
-}
-function enableRetrieveHydrationInfoImpl() {
-  _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;
-}
-function retrieveHydrationInfo(rNode, injector, isRootView2 = false) {
-  return _retrieveHydrationInfoImpl(rNode, injector, isRootView2);
-}
-function getLNodeForHydration(viewRef) {
-  let lView = viewRef._lView;
-  const tView = lView[TVIEW];
-  if (tView.type === 2) {
-    return null;
-  }
-  if (isRootView(lView)) {
-    lView = lView[HEADER_OFFSET];
-  }
-  return lView;
-}
-function getTextNodeContent(node) {
-  return node.textContent?.replace(/\s/gm, "");
-}
-function processTextNodeMarkersBeforeHydration(node) {
-  const doc = getDocument();
-  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {
-    acceptNode(node2) {
-      const content = getTextNodeContent(node2);
-      const isTextNodeMarker = content === "ngetn" || content === "ngtns";
-      return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
-    }
-  });
-  let currentNode;
-  const nodes = [];
-  while (currentNode = commentNodesIterator.nextNode()) {
-    nodes.push(currentNode);
-  }
-  for (const node2 of nodes) {
-    if (node2.textContent === "ngetn") {
-      node2.replaceWith(doc.createTextNode(""));
-    } else {
-      node2.remove();
-    }
-  }
-}
-var HydrationStatus;
-(function(HydrationStatus2) {
-  HydrationStatus2["Hydrated"] = "hydrated";
-  HydrationStatus2["Skipped"] = "skipped";
-  HydrationStatus2["Mismatched"] = "mismatched";
-})(HydrationStatus || (HydrationStatus = {}));
-var HYDRATION_INFO_KEY = "__ngDebugHydrationInfo__";
-function patchHydrationInfo(node, info) {
-  node[HYDRATION_INFO_KEY] = info;
-}
-function readHydrationInfo(node) {
-  return node[HYDRATION_INFO_KEY] ?? null;
-}
-function markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsClaimedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {
-    throw new Error("Trying to claim a node, which was claimed already.");
-  }
-  patchHydrationInfo(node, {
-    status: HydrationStatus.Hydrated
-  });
-  ngDevMode.hydratedNodes++;
-}
-function markRNodeAsSkippedByHydration(node) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsSkippedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  patchHydrationInfo(node, {
-    status: HydrationStatus.Skipped
-  });
-  ngDevMode.componentsSkippedHydration++;
-}
-function countBlocksSkippedByHydration(injector) {
-  const transferState = injector.get(TransferState);
-  const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
-  if (ngDevMode) {
-    ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;
-  }
-}
-function markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsMismatchedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  while (node && !getComponent(node)) {
-    node = node?.parentNode;
-  }
-  if (node) {
-    patchHydrationInfo(node, {
-      status: HydrationStatus.Mismatched,
-      expectedNodeDetails,
-      actualNodeDetails
-    });
-  }
-}
-function isRNodeClaimedForHydration(node) {
-  return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;
-}
-function setSegmentHead(hydrationInfo, index, node) {
-  hydrationInfo.segmentHeads ??= {};
-  hydrationInfo.segmentHeads[index] = node;
-}
-function getSegmentHead(hydrationInfo, index) {
-  return hydrationInfo.segmentHeads?.[index] ?? null;
-}
-function isIncrementalHydrationEnabled(injector) {
-  return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {
-    optional: true
-  });
-}
-function assertIncrementalHydrationIsConfigured(injector) {
-  if (!isIncrementalHydrationEnabled(injector)) {
-    throw new RuntimeError(508, "Angular has detected that some `@defer` blocks use `hydrate` triggers, but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` call is added as an argument for the `provideClientHydration()` function call in your application config.");
-  }
-}
-function assertSsrIdDefined(ssrUniqueId) {
-  assertDefined(ssrUniqueId, "Internal error: expecting an SSR id for a defer block that should be hydrated, but the id is not present");
-}
-function getNgContainerSize(hydrationInfo, index) {
-  const data = hydrationInfo.data;
-  let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;
-  if (size === null && data[CONTAINERS]?.[index]) {
-    size = calcSerializedContainerSize(hydrationInfo, index);
-  }
-  return size;
-}
-function isSerializedElementContainer(hydrationInfo, index) {
-  return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== void 0;
-}
-function getSerializedContainerViews(hydrationInfo, index) {
-  return hydrationInfo.data[CONTAINERS]?.[index] ?? null;
-}
-function calcSerializedContainerSize(hydrationInfo, index) {
-  const views = getSerializedContainerViews(hydrationInfo, index) ?? [];
-  let numNodes = 0;
-  for (let view of views) {
-    numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);
-  }
-  return numNodes;
-}
-function initDisconnectedNodes(hydrationInfo) {
-  if (typeof hydrationInfo.disconnectedNodes === "undefined") {
-    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];
-    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;
-  }
-  return hydrationInfo.disconnectedNodes;
-}
-function isDisconnectedNode$1(hydrationInfo, index) {
-  if (typeof hydrationInfo.disconnectedNodes === "undefined") {
-    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];
-    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;
-  }
-  return !!initDisconnectedNodes(hydrationInfo)?.has(index);
-}
-function processTextNodeBeforeSerialization(context2, node) {
-  const el = node;
-  const corruptedTextNodes = context2.corruptedTextNodes;
-  if (el.textContent === "") {
-    corruptedTextNodes.set(
-      el,
-      "ngetn"
-      /* TextNodeMarker.EmptyNode */
-    );
-  } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {
-    corruptedTextNodes.set(
-      el,
-      "ngtns"
-      /* TextNodeMarker.Separator */
-    );
-  }
-}
-function convertHydrateTriggersToJsAction(triggers) {
-  let actionList = [];
-  if (triggers !== null) {
-    if (triggers.has(
-      4
-      /* DeferBlockTrigger.Hover */
-    )) {
-      actionList.push(...hoverEventNames);
-    }
-    if (triggers.has(
-      3
-      /* DeferBlockTrigger.Interaction */
-    )) {
-      actionList.push(...interactionEventNames);
-    }
-  }
-  return actionList;
-}
-function getParentBlockHydrationQueue(deferBlockId, injector) {
-  const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-  const transferState = injector.get(TransferState);
-  const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
-  let isTopMostDeferBlock = false;
-  let currentBlockId = deferBlockId;
-  let parentBlockPromise = null;
-  const hydrationQueue = [];
-  while (!isTopMostDeferBlock && currentBlockId) {
-    ngDevMode && assertEqual(hydrationQueue.indexOf(currentBlockId), -1, "Internal error: defer block hierarchy has a cycle.");
-    isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);
-    const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);
-    if (parentBlockPromise === null && hydratingParentBlock != null) {
-      parentBlockPromise = hydratingParentBlock.promise;
-      break;
-    }
-    hydrationQueue.unshift(currentBlockId);
-    currentBlockId = deferBlockParents[currentBlockId][DEFER_PARENT_BLOCK_ID];
-  }
-  return {
-    parentBlockPromise,
-    hydrationQueue
-  };
-}
-function gatherDeferBlocksByJSActionAttribute(doc) {
-  const jsactionNodes = doc.body.querySelectorAll("[jsaction]");
-  const blockMap = /* @__PURE__ */ new Set();
-  for (let node of jsactionNodes) {
-    const attr = node.getAttribute("jsaction");
-    const blockId = node.getAttribute("ngb");
-    const eventTypes = [...hoverEventNames.join(":;"), ...interactionEventNames.join(":;")].join("|");
-    if (attr?.match(eventTypes) && blockId !== null) {
-      blockMap.add(node);
-    }
-  }
-  return blockMap;
-}
-function appendDeferBlocksToJSActionMap(doc, injector) {
-  const blockMap = gatherDeferBlocksByJSActionAttribute(doc);
-  for (let rNode of blockMap) {
-    const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
-    sharedMapFunction(rNode, jsActionMap);
-  }
-}
-var _retrieveDeferBlockDataImpl = () => {
-  return {};
-};
-function retrieveDeferBlockDataImpl(injector) {
-  const transferState = injector.get(TransferState, null, {
-    optional: true
-  });
-  if (transferState !== null) {
-    const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
-    ngDevMode && assertDefined(nghDeferData, "Unable to retrieve defer block info from the TransferState.");
-    return nghDeferData;
-  }
-  return {};
-}
-function enableRetrieveDeferBlockDataImpl() {
-  _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;
-}
-function retrieveDeferBlockData(injector) {
-  return _retrieveDeferBlockDataImpl(injector);
-}
-function isTimerTrigger(triggerInfo) {
-  return typeof triggerInfo === "object" && triggerInfo.trigger === 5;
-}
-function getHydrateTimerTrigger(blockData) {
-  const trigger = blockData[DEFER_HYDRATE_TRIGGERS]?.find((t) => isTimerTrigger(t));
-  return trigger?.delay ?? null;
-}
-function hasHydrateTrigger(blockData, trigger) {
-  return blockData[DEFER_HYDRATE_TRIGGERS]?.includes(trigger) ?? false;
-}
-function createBlockSummary(blockInfo) {
-  return {
-    data: blockInfo,
-    hydrate: {
-      idle: hasHydrateTrigger(
-        blockInfo,
-        0
-        /* DeferBlockTrigger.Idle */
-      ),
-      immediate: hasHydrateTrigger(
-        blockInfo,
-        1
-        /* DeferBlockTrigger.Immediate */
-      ),
-      timer: getHydrateTimerTrigger(blockInfo),
-      viewport: hasHydrateTrigger(
-        blockInfo,
-        2
-        /* DeferBlockTrigger.Viewport */
-      )
-    }
-  };
-}
-function processBlockData(injector) {
-  const blockData = retrieveDeferBlockData(injector);
-  let blockDetails = /* @__PURE__ */ new Map();
-  for (let blockId in blockData) {
-    blockDetails.set(blockId, createBlockSummary(blockData[blockId]));
-  }
-  return blockDetails;
-}
-var ViewEncapsulation;
-(function(ViewEncapsulation2) {
-  ViewEncapsulation2[ViewEncapsulation2["Emulated"] = 0] = "Emulated";
-  ViewEncapsulation2[ViewEncapsulation2["None"] = 2] = "None";
-  ViewEncapsulation2[ViewEncapsulation2["ShadowDom"] = 3] = "ShadowDom";
-})(ViewEncapsulation || (ViewEncapsulation = {}));
-var policy$1;
-function getPolicy$1() {
-  if (policy$1 === void 0) {
-    policy$1 = null;
-    if (_global.trustedTypes) {
-      try {
-        policy$1 = _global.trustedTypes.createPolicy("angular", {
-          createHTML: (s) => s,
-          createScript: (s) => s,
-          createScriptURL: (s) => s
-        });
-      } catch {
-      }
-    }
-  }
-  return policy$1;
-}
-function trustedHTMLFromString(html) {
-  return getPolicy$1()?.createHTML(html) || html;
-}
-function trustedScriptURLFromString(url) {
-  return getPolicy$1()?.createScriptURL(url) || url;
-}
-var policy;
-function getPolicy() {
-  if (policy === void 0) {
-    policy = null;
-    if (_global.trustedTypes) {
-      try {
-        policy = _global.trustedTypes.createPolicy("angular#unsafe-bypass", {
-          createHTML: (s) => s,
-          createScript: (s) => s,
-          createScriptURL: (s) => s
-        });
-      } catch {
-      }
-    }
-  }
-  return policy;
-}
-function trustedHTMLFromStringBypass(html) {
-  return getPolicy()?.createHTML(html) || html;
-}
-function trustedScriptFromStringBypass(script) {
-  return getPolicy()?.createScript(script) || script;
-}
-function trustedScriptURLFromStringBypass(url) {
-  return getPolicy()?.createScriptURL(url) || url;
-}
-var SafeValueImpl = class {
-  changingThisBreaksApplicationSecurity;
-  constructor(changingThisBreaksApplicationSecurity) {
-    this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;
-  }
-  toString() {
-    return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${XSS_SECURITY_URL})`;
-  }
-};
-var SafeHtmlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "HTML";
-  }
-};
-var SafeStyleImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "Style";
-  }
-};
-var SafeScriptImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "Script";
-  }
-};
-var SafeUrlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "URL";
-  }
-};
-var SafeResourceUrlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "ResourceURL";
-  }
-};
-function unwrapSafeValue(value) {
-  return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;
-}
-function allowSanitizationBypassAndThrow(value, type) {
-  const actualType = getSanitizationBypassType(value);
-  if (actualType != null && actualType !== type) {
-    if (actualType === "ResourceURL" && type === "URL") return true;
-    throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);
-  }
-  return actualType === type;
-}
-function getSanitizationBypassType(value) {
-  return value instanceof SafeValueImpl && value.getTypeName() || null;
-}
-function bypassSanitizationTrustHtml(trustedHtml) {
-  return new SafeHtmlImpl(trustedHtml);
-}
-function bypassSanitizationTrustStyle(trustedStyle) {
-  return new SafeStyleImpl(trustedStyle);
-}
-function bypassSanitizationTrustScript(trustedScript) {
-  return new SafeScriptImpl(trustedScript);
-}
-function bypassSanitizationTrustUrl(trustedUrl) {
-  return new SafeUrlImpl(trustedUrl);
-}
-function bypassSanitizationTrustResourceUrl(trustedResourceUrl) {
-  return new SafeResourceUrlImpl(trustedResourceUrl);
-}
-function getInertBodyHelper(defaultDoc) {
-  const inertDocumentHelper = new InertDocumentHelper(defaultDoc);
-  return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;
-}
-var DOMParserHelper = class {
-  inertDocumentHelper;
-  constructor(inertDocumentHelper) {
-    this.inertDocumentHelper = inertDocumentHelper;
-  }
-  getInertBodyElement(html) {
-    html = "<body><remove></remove>" + html;
-    try {
-      const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), "text/html").body;
-      if (body === null) {
-        return this.inertDocumentHelper.getInertBodyElement(html);
-      }
-      body.firstChild?.remove();
-      return body;
-    } catch {
-      return null;
-    }
-  }
-};
-var InertDocumentHelper = class {
-  defaultDoc;
-  inertDocument;
-  constructor(defaultDoc) {
-    this.defaultDoc = defaultDoc;
-    this.inertDocument = this.defaultDoc.implementation.createHTMLDocument("sanitization-inert");
-  }
-  getInertBodyElement(html) {
-    const templateEl = this.inertDocument.createElement("template");
-    templateEl.innerHTML = trustedHTMLFromString(html);
-    return templateEl;
-  }
-};
-function isDOMParserAvailable() {
-  try {
-    return !!new window.DOMParser().parseFromString(trustedHTMLFromString(""), "text/html");
-  } catch {
-    return false;
-  }
-}
-var SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;
-function _sanitizeUrl(url) {
-  url = String(url);
-  if (url.match(SAFE_URL_PATTERN)) return url;
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);
-  }
-  return "unsafe:" + url;
-}
-function tagSet(tags) {
-  const res = {};
-  for (const t of tags.split(",")) res[t] = true;
-  return res;
-}
-function merge3(...sets) {
-  const res = {};
-  for (const s of sets) {
-    for (const v in s) {
-      if (s.hasOwnProperty(v)) res[v] = true;
-    }
-  }
-  return res;
-}
-var VOID_ELEMENTS = tagSet("area,br,col,hr,img,wbr");
-var OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");
-var OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet("rp,rt");
-var OPTIONAL_END_TAG_ELEMENTS = merge3(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);
-var BLOCK_ELEMENTS = merge3(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul"));
-var INLINE_ELEMENTS = merge3(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video"));
-var VALID_ELEMENTS = merge3(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
-var URI_ATTRS = tagSet("background,cite,href,itemtype,longdesc,poster,src,xlink:href");
-var HTML_ATTRS = tagSet("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width");
-var ARIA_ATTRS = tagSet("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext");
-var VALID_ATTRS = merge3(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);
-var SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet("script,style,template");
-var SanitizingHtmlSerializer = class {
-  // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just
-  // because characters were re-encoded.
-  sanitizedSomething = false;
-  buf = [];
-  sanitizeChildren(el) {
-    let current = el.firstChild;
-    let traverseContent = true;
-    let parentNodes = [];
-    while (current) {
-      if (current.nodeType === Node.ELEMENT_NODE) {
-        traverseContent = this.startElement(current);
-      } else if (current.nodeType === Node.TEXT_NODE) {
-        this.chars(current.nodeValue);
-      } else {
-        this.sanitizedSomething = true;
-      }
-      if (traverseContent && current.firstChild) {
-        parentNodes.push(current);
-        current = getFirstChild(current);
-        continue;
-      }
-      while (current) {
-        if (current.nodeType === Node.ELEMENT_NODE) {
-          this.endElement(current);
-        }
-        let next = getNextSibling(current);
-        if (next) {
-          current = next;
-          break;
-        }
-        current = parentNodes.pop();
-      }
-    }
-    return this.buf.join("");
-  }
-  /**
-   * Sanitizes an opening element tag (if valid) and returns whether the element's contents should
-   * be traversed. Element content must always be traversed (even if the element itself is not
-   * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.
-   *
-   * @param element The element to sanitize.
-   * @return True if the element's contents should be traversed.
-   */
-  startElement(element) {
-    const tagName = getNodeName(element).toLowerCase();
-    if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {
-      this.sanitizedSomething = true;
-      return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);
-    }
-    this.buf.push("<");
-    this.buf.push(tagName);
-    const elAttrs = element.attributes;
-    for (let i = 0; i < elAttrs.length; i++) {
-      const elAttr = elAttrs.item(i);
-      const attrName = elAttr.name;
-      const lower = attrName.toLowerCase();
-      if (!VALID_ATTRS.hasOwnProperty(lower)) {
-        this.sanitizedSomething = true;
-        continue;
-      }
-      let value = elAttr.value;
-      if (URI_ATTRS[lower]) value = _sanitizeUrl(value);
-      this.buf.push(" ", attrName, '="', encodeEntities(value), '"');
-    }
-    this.buf.push(">");
-    return true;
-  }
-  endElement(current) {
-    const tagName = getNodeName(current).toLowerCase();
-    if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {
-      this.buf.push("</");
-      this.buf.push(tagName);
-      this.buf.push(">");
-    }
-  }
-  chars(chars) {
-    this.buf.push(encodeEntities(chars));
-  }
-};
-function isClobberedElement(parentNode, childNode) {
-  return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;
-}
-function getNextSibling(node) {
-  const nextSibling = node.nextSibling;
-  if (nextSibling && node !== nextSibling.previousSibling) {
-    throw clobberedElementError(nextSibling);
-  }
-  return nextSibling;
-}
-function getFirstChild(node) {
-  const firstChild = node.firstChild;
-  if (firstChild && isClobberedElement(node, firstChild)) {
-    throw clobberedElementError(firstChild);
-  }
-  return firstChild;
-}
-function getNodeName(node) {
-  const nodeName = node.nodeName;
-  return typeof nodeName === "string" ? nodeName : "FORM";
-}
-function clobberedElementError(node) {
-  return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);
-}
-var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
-var NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
-function encodeEntities(value) {
-  return value.replace(/&/g, "&amp;").replace(SURROGATE_PAIR_REGEXP, function(match) {
-    const hi = match.charCodeAt(0);
-    const low = match.charCodeAt(1);
-    return "&#" + ((hi - 55296) * 1024 + (low - 56320) + 65536) + ";";
-  }).replace(NON_ALPHANUMERIC_REGEXP, function(match) {
-    return "&#" + match.charCodeAt(0) + ";";
-  }).replace(/</g, "&lt;").replace(/>/g, "&gt;");
-}
-var inertBodyHelper;
-function _sanitizeHtml(defaultDoc, unsafeHtmlInput) {
-  let inertBodyElement = null;
-  try {
-    inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);
-    let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : "";
-    inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
-    let mXSSAttempts = 5;
-    let parsedHtml = unsafeHtml;
-    do {
-      if (mXSSAttempts === 0) {
-        throw new Error("Failed to sanitize html because the input is unstable");
-      }
-      mXSSAttempts--;
-      unsafeHtml = parsedHtml;
-      parsedHtml = inertBodyElement.innerHTML;
-      inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
-    } while (unsafeHtml !== parsedHtml);
-    const sanitizer = new SanitizingHtmlSerializer();
-    const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && sanitizer.sanitizedSomething) {
-      console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);
-    }
-    return trustedHTMLFromString(safeHtml);
-  } finally {
-    if (inertBodyElement) {
-      const parent = getTemplateContent(inertBodyElement) || inertBodyElement;
-      while (parent.firstChild) {
-        parent.firstChild.remove();
-      }
-    }
-  }
-}
-function getTemplateContent(el) {
-  return "content" in el && isTemplateElement(el) ? el.content : null;
-}
-function isTemplateElement(el) {
-  return el.nodeType === Node.ELEMENT_NODE && el.nodeName === "TEMPLATE";
-}
-var SecurityContext;
-(function(SecurityContext2) {
-  SecurityContext2[SecurityContext2["NONE"] = 0] = "NONE";
-  SecurityContext2[SecurityContext2["HTML"] = 1] = "HTML";
-  SecurityContext2[SecurityContext2["STYLE"] = 2] = "STYLE";
-  SecurityContext2[SecurityContext2["SCRIPT"] = 3] = "SCRIPT";
-  SecurityContext2[SecurityContext2["URL"] = 4] = "URL";
-  SecurityContext2[SecurityContext2["RESOURCE_URL"] = 5] = "RESOURCE_URL";
-})(SecurityContext || (SecurityContext = {}));
-function ɵɵsanitizeHtml(unsafeHtml) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeHtml,
-    "HTML"
-    /* BypassType.Html */
-  )) {
-    return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));
-  }
-  return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));
-}
-function ɵɵsanitizeStyle(unsafeStyle) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || "";
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeStyle,
-    "Style"
-    /* BypassType.Style */
-  )) {
-    return unwrapSafeValue(unsafeStyle);
-  }
-  return renderStringify(unsafeStyle);
-}
-function ɵɵsanitizeUrl(unsafeUrl) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || "";
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeUrl,
-    "URL"
-    /* BypassType.Url */
-  )) {
-    return unwrapSafeValue(unsafeUrl);
-  }
-  return _sanitizeUrl(renderStringify(unsafeUrl));
-}
-function ɵɵsanitizeResourceUrl(unsafeResourceUrl) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeResourceUrl,
-    "ResourceURL"
-    /* BypassType.ResourceUrl */
-  )) {
-    return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));
-  }
-  throw new RuntimeError(904, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);
-}
-function ɵɵsanitizeScript(unsafeScript) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeScript,
-    "Script"
-    /* BypassType.Script */
-  )) {
-    return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));
-  }
-  throw new RuntimeError(905, ngDevMode && "unsafe value used in a script context");
-}
-function ɵɵtrustConstantHtml(html) {
-  if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {
-    throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join("?")}`);
-  }
-  return trustedHTMLFromString(html[0]);
-}
-function ɵɵtrustConstantResourceUrl(url) {
-  if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {
-    throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join("?")}`);
-  }
-  return trustedScriptURLFromString(url[0]);
-}
-function getUrlSanitizer(tag, prop) {
-  if (prop === "src" && (tag === "embed" || tag === "frame" || tag === "iframe" || tag === "media" || tag === "script") || prop === "href" && (tag === "base" || tag === "link")) {
-    return ɵɵsanitizeResourceUrl;
-  }
-  return ɵɵsanitizeUrl;
-}
-function ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {
-  return getUrlSanitizer(tag, prop)(unsafeUrl);
-}
-function validateAgainstEventProperties(name) {
-  if (name.toLowerCase().startsWith("on")) {
-    const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, please use (${name.slice(2)})=...
-If '${name}' is a directive input, make sure the directive is imported by the current module.`;
-    throw new RuntimeError(306, errorMessage);
-  }
-}
-function validateAgainstEventAttributes(name) {
-  if (name.toLowerCase().startsWith("on")) {
-    const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, please use (${name.slice(2)})=...`;
-    throw new RuntimeError(306, errorMessage);
-  }
-}
-function getSanitizer() {
-  const lView = getLView();
-  return lView && lView[ENVIRONMENT].sanitizer;
-}
-var COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;
-var COMMENT_DELIMITER = /(<|>)/g;
-var COMMENT_DELIMITER_ESCAPED = "​$1​";
-function escapeCommentText(value) {
-  return value.replace(COMMENT_DISALLOWED, (text) => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));
-}
-function normalizeDebugBindingName(name) {
-  name = camelCaseToDashCase(name.replace(/[$@]/g, "_"));
-  return `ng-reflect-${name}`;
-}
-var CAMEL_CASE_REGEXP = /([A-Z])/g;
-function camelCaseToDashCase(input2) {
-  return input2.replace(CAMEL_CASE_REGEXP, (...m) => "-" + m[1].toLowerCase());
-}
-function normalizeDebugBindingValue(value) {
-  try {
-    return value != null ? value.toString().slice(0, 30) : value;
-  } catch (e) {
-    return "[ERROR] Exception while trying to serialize the value";
-  }
-}
-var CUSTOM_ELEMENTS_SCHEMA = {
-  name: "custom-elements"
-};
-var NO_ERRORS_SCHEMA = {
-  name: "no-errors-schema"
-};
-var shouldThrowErrorOnUnknownElement = false;
-function ɵsetUnknownElementStrictMode(shouldThrow) {
-  shouldThrowErrorOnUnknownElement = shouldThrow;
-}
-function ɵgetUnknownElementStrictMode() {
-  return shouldThrowErrorOnUnknownElement;
-}
-var shouldThrowErrorOnUnknownProperty = false;
-function ɵsetUnknownPropertyStrictMode(shouldThrow) {
-  shouldThrowErrorOnUnknownProperty = shouldThrow;
-}
-function ɵgetUnknownPropertyStrictMode() {
-  return shouldThrowErrorOnUnknownProperty;
-}
-function validateElementIsKnown(element, lView, tagName, schemas, hasDirectives) {
-  if (schemas === null) return;
-  if (!hasDirectives && tagName !== null) {
-    const isUnknown = (
-      // Note that we can't check for `typeof HTMLUnknownElement === 'function'` because
-      // Domino doesn't expose HTMLUnknownElement globally.
-      typeof HTMLUnknownElement !== "undefined" && HTMLUnknownElement && element instanceof HTMLUnknownElement || typeof customElements !== "undefined" && tagName.indexOf("-") > -1 && !customElements.get(tagName)
-    );
-    if (isUnknown && !matchingSchemas(schemas, tagName)) {
-      const isHostStandalone = isHostComponentStandalone(lView);
-      const templateLocation = getTemplateLocationDetails(lView);
-      const schemas2 = `'${isHostStandalone ? "@Component" : "@NgModule"}.schemas'`;
-      let message = `'${tagName}' is not a known element${templateLocation}:
-`;
-      message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? "included in the '@Component.imports' of this component" : "a part of an @NgModule where this component is declared"}.
-`;
-      if (tagName && tagName.indexOf("-") > -1) {
-        message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas2} of this component to suppress this message.`;
-      } else {
-        message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas2} of this component.`;
-      }
-      if (shouldThrowErrorOnUnknownElement) {
-        throw new RuntimeError(304, message);
-      } else {
-        console.error(formatRuntimeError(304, message));
-      }
-    }
-  }
-}
-function isPropertyValid(element, propName, tagName, schemas) {
-  if (schemas === null) return true;
-  if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {
-    return true;
-  }
-  return typeof Node === "undefined" || Node === null || !(element instanceof Node);
-}
-function handleUnknownPropertyError(propName, tagName, nodeType, lView) {
-  if (!tagName && nodeType === 4) {
-    tagName = "ng-template";
-  }
-  const isHostStandalone = isHostComponentStandalone(lView);
-  const templateLocation = getTemplateLocationDetails(lView);
-  let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;
-  const schemas = `'${isHostStandalone ? "@Component" : "@NgModule"}.schemas'`;
-  const importLocation = isHostStandalone ? "included in the '@Component.imports' of this component" : "a part of an @NgModule where this component is declared";
-  if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {
-    const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);
-    message += `
-If the '${propName}' is an Angular control flow directive, please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;
-  } else {
-    message += `
-1. If '${tagName}' is an Angular component and it has the '${propName}' input, then verify that it is ${importLocation}.`;
-    if (tagName && tagName.indexOf("-") > -1) {
-      message += `
-2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;
-      message += `
-3. To allow any property add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;
-    } else {
-      message += `
-2. To allow any property add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;
-    }
-  }
-  reportUnknownPropertyError(message);
-}
-function reportUnknownPropertyError(message) {
-  if (shouldThrowErrorOnUnknownProperty) {
-    throw new RuntimeError(303, message);
-  } else {
-    console.error(formatRuntimeError(303, message));
-  }
-}
-function getDeclarationComponentDef(lView) {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context2 = declarationLView[CONTEXT];
-  if (!context2) return null;
-  return context2.constructor ? getComponentDef(context2.constructor) : null;
-}
-function isHostComponentStandalone(lView) {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  const componentDef = getDeclarationComponentDef(lView);
-  return !!componentDef?.standalone;
-}
-function getTemplateLocationDetails(lView) {
-  !ngDevMode && throwError2("Must never be called in production mode");
-  const hostComponentDef = getDeclarationComponentDef(lView);
-  const componentClassName = hostComponentDef?.type?.name;
-  return componentClassName ? ` (used in the '${componentClassName}' component template)` : "";
-}
-var KNOWN_CONTROL_FLOW_DIRECTIVES = /* @__PURE__ */ new Map([["ngIf", "NgIf"], ["ngFor", "NgFor"], ["ngSwitchCase", "NgSwitchCase"], ["ngSwitchDefault", "NgSwitchDefault"]]);
-function matchingSchemas(schemas, tagName) {
-  if (schemas !== null) {
-    for (let i = 0; i < schemas.length; i++) {
-      const schema = schemas[i];
-      if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf("-") > -1) {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function ɵɵresolveWindow(element) {
-  return element.ownerDocument.defaultView;
-}
-function ɵɵresolveDocument(element) {
-  return element.ownerDocument;
-}
-function ɵɵresolveBody(element) {
-  return element.ownerDocument.body;
-}
-var INTERPOLATION_DELIMITER = `�`;
-function maybeUnwrapFn(value) {
-  if (value instanceof Function) {
-    return value();
-  } else {
-    return value;
-  }
-}
-var VALUE_STRING_LENGTH_LIMIT = 200;
-function assertStandaloneComponentType(type) {
-  assertComponentDef(type);
-  const componentDef = getComponentDef(type);
-  if (!componentDef.standalone) {
-    throw new RuntimeError(907, `The ${stringifyForError(type)} component is not marked as standalone, but Angular expects to have a standalone component here. Please make sure the ${stringifyForError(type)} component has the \`standalone: true\` flag in the decorator.`);
-  }
-}
-function assertComponentDef(type) {
-  if (!getComponentDef(type)) {
-    throw new RuntimeError(906, `The ${stringifyForError(type)} is not an Angular component, make sure it has the \`@Component\` decorator.`);
-  }
-}
-function throwMultipleComponentError(tNode, first2, second) {
-  throw new RuntimeError(-300, `Multiple components match node with tagname ${tNode.value}: ${stringifyForError(first2)} and ${stringifyForError(second)}`);
-}
-function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {
-  const hostComponentDef = getDeclarationComponentDef(lView);
-  const componentClassName = hostComponentDef?.type?.name;
-  const field = propName ? ` for '${propName}'` : "";
-  let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ""}`;
-  if (creationMode) {
-    msg += ` It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook?`;
-  }
-  throw new RuntimeError(-100, msg);
-}
-function formatValue(value) {
-  let strValue = String(value);
-  try {
-    if (Array.isArray(value) || strValue === "[object Object]") {
-      strValue = JSON.stringify(value);
-    }
-  } catch (error) {
-  }
-  return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + "…" : strValue;
-}
-function constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {
-  const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);
-  let oldValue = prefix, newValue = prefix;
-  for (let i = 0; i < chunks.length; i++) {
-    const slotIdx = rootIndex + i;
-    oldValue += `${lView[slotIdx]}${chunks[i]}`;
-    newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;
-  }
-  return {
-    propName,
-    oldValue,
-    newValue
-  };
-}
-function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {
-  const tData = lView[TVIEW].data;
-  const metadata = tData[bindingIndex];
-  if (typeof metadata === "string") {
-    if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {
-      return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);
-    }
-    return {
-      propName: metadata,
-      oldValue,
-      newValue
-    };
-  }
-  if (metadata === null) {
-    let idx = bindingIndex - 1;
-    while (typeof tData[idx] !== "string" && tData[idx + 1] === null) {
-      idx--;
-    }
-    const meta = tData[idx];
-    if (typeof meta === "string") {
-      const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, "g"));
-      if (matches && matches.length - 1 > bindingIndex - idx) {
-        return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);
-      }
-    }
-  }
-  return {
-    propName: void 0,
-    oldValue,
-    newValue
-  };
-}
-var InputFlags;
-(function(InputFlags2) {
-  InputFlags2[InputFlags2["None"] = 0] = "None";
-  InputFlags2[InputFlags2["SignalBased"] = 1] = "SignalBased";
-  InputFlags2[InputFlags2["HasDecoratorInputTransform"] = 2] = "HasDecoratorInputTransform";
-})(InputFlags || (InputFlags = {}));
-var RendererStyleFlags2;
-(function(RendererStyleFlags22) {
-  RendererStyleFlags22[RendererStyleFlags22["Important"] = 1] = "Important";
-  RendererStyleFlags22[RendererStyleFlags22["DashCase"] = 2] = "DashCase";
-})(RendererStyleFlags2 || (RendererStyleFlags2 = {}));
-var _icuContainerIterate;
-function icuContainerIterate(tIcuContainerNode, lView) {
-  return _icuContainerIterate(tIcuContainerNode, lView);
-}
-function ensureIcuContainerVisitorLoaded(loader) {
-  if (_icuContainerIterate === void 0) {
-    _icuContainerIterate = loader();
-  }
-}
-function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
-  if (lNodeToHandle != null) {
-    let lContainer;
-    let isComponent2 = false;
-    if (isLContainer(lNodeToHandle)) {
-      lContainer = lNodeToHandle;
-    } else if (isLView(lNodeToHandle)) {
-      isComponent2 = true;
-      ngDevMode && assertDefined(lNodeToHandle[HOST], "HOST must be defined for a component LView");
-      lNodeToHandle = lNodeToHandle[HOST];
-    }
-    const rNode = unwrapRNode(lNodeToHandle);
-    if (action === 0 && parent !== null) {
-      if (beforeNode == null) {
-        nativeAppendChild(renderer, parent, rNode);
-      } else {
-        nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
-      }
-    } else if (action === 1 && parent !== null) {
-      nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
-    } else if (action === 2) {
-      nativeRemoveNode(renderer, rNode, isComponent2);
-    } else if (action === 3) {
-      ngDevMode && ngDevMode.rendererDestroyNode++;
-      renderer.destroyNode(rNode);
-    }
-    if (lContainer != null) {
-      applyContainer(renderer, action, lContainer, parent, beforeNode);
-    }
-  }
-}
-function createTextNode(renderer, value) {
-  ngDevMode && ngDevMode.rendererCreateTextNode++;
-  ngDevMode && ngDevMode.rendererSetText++;
-  return renderer.createText(value);
-}
-function updateTextNode(renderer, rNode, value) {
-  ngDevMode && ngDevMode.rendererSetText++;
-  renderer.setValue(rNode, value);
-}
-function createCommentNode(renderer, value) {
-  ngDevMode && ngDevMode.rendererCreateComment++;
-  return renderer.createComment(escapeCommentText(value));
-}
-function createElementNode(renderer, name, namespace) {
-  ngDevMode && ngDevMode.rendererCreateElement++;
-  return renderer.createElement(name, namespace);
-}
-function removeViewFromDOM(tView, lView) {
-  detachViewFromDOM(tView, lView);
-  lView[HOST] = null;
-  lView[T_HOST] = null;
-}
-function addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
-  lView[HOST] = parentNativeNode;
-  lView[T_HOST] = parentTNode;
-  applyView(tView, lView, renderer, 1, parentNativeNode, beforeNode);
-}
-function detachViewFromDOM(tView, lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    10
-    /* NotificationSource.ViewDetachedFromDOM */
-  );
-  applyView(tView, lView, lView[RENDERER], 2, null, null);
-}
-function destroyViewTree(rootView) {
-  let lViewOrLContainer = rootView[CHILD_HEAD];
-  if (!lViewOrLContainer) {
-    return cleanUpView(rootView[TVIEW], rootView);
-  }
-  while (lViewOrLContainer) {
-    let next = null;
-    if (isLView(lViewOrLContainer)) {
-      next = lViewOrLContainer[CHILD_HEAD];
-    } else {
-      ngDevMode && assertLContainer(lViewOrLContainer);
-      const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];
-      if (firstView) next = firstView;
-    }
-    if (!next) {
-      while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {
-        if (isLView(lViewOrLContainer)) {
-          cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
-        }
-        lViewOrLContainer = lViewOrLContainer[PARENT];
-      }
-      if (lViewOrLContainer === null) lViewOrLContainer = rootView;
-      if (isLView(lViewOrLContainer)) {
-        cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
-      }
-      next = lViewOrLContainer && lViewOrLContainer[NEXT];
-    }
-    lViewOrLContainer = next;
-  }
-}
-function insertView(tView, lView, lContainer, index) {
-  ngDevMode && assertLView(lView);
-  ngDevMode && assertLContainer(lContainer);
-  const indexInContainer = CONTAINER_HEADER_OFFSET + index;
-  const containerLength = lContainer.length;
-  if (index > 0) {
-    lContainer[indexInContainer - 1][NEXT] = lView;
-  }
-  if (index < containerLength - CONTAINER_HEADER_OFFSET) {
-    lView[NEXT] = lContainer[indexInContainer];
-    addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);
-  } else {
-    lContainer.push(lView);
-    lView[NEXT] = null;
-  }
-  lView[PARENT] = lContainer;
-  const declarationLContainer = lView[DECLARATION_LCONTAINER];
-  if (declarationLContainer !== null && lContainer !== declarationLContainer) {
-    trackMovedView(declarationLContainer, lView);
-  }
-  const lQueries = lView[QUERIES];
-  if (lQueries !== null) {
-    lQueries.insertView(tView);
-  }
-  updateAncestorTraversalFlagsOnAttach(lView);
-  lView[FLAGS] |= 128;
-}
-function trackMovedView(declarationContainer, lView) {
-  ngDevMode && assertDefined(lView, "LView required");
-  ngDevMode && assertLContainer(declarationContainer);
-  const movedViews = declarationContainer[MOVED_VIEWS];
-  const parent = lView[PARENT];
-  ngDevMode && assertDefined(parent, "missing parent");
-  if (isLView(parent)) {
-    declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;
-  } else {
-    const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];
-    ngDevMode && assertDefined(insertedComponentLView, "Missing insertedComponentLView");
-    const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];
-    ngDevMode && assertDefined(declaredComponentLView, "Missing declaredComponentLView");
-    if (declaredComponentLView !== insertedComponentLView) {
-      declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;
-    }
-  }
-  if (movedViews === null) {
-    declarationContainer[MOVED_VIEWS] = [lView];
-  } else {
-    movedViews.push(lView);
-  }
-}
-function detachMovedView(declarationContainer, lView) {
-  ngDevMode && assertLContainer(declarationContainer);
-  ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], "A projected view should belong to a non-empty projected views collection");
-  const movedViews = declarationContainer[MOVED_VIEWS];
-  const declarationViewIndex = movedViews.indexOf(lView);
-  movedViews.splice(declarationViewIndex, 1);
-}
-function detachView(lContainer, removeIndex) {
-  if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;
-  const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;
-  const viewToDetach = lContainer[indexInContainer];
-  if (viewToDetach) {
-    const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];
-    if (declarationLContainer !== null && declarationLContainer !== lContainer) {
-      detachMovedView(declarationLContainer, viewToDetach);
-    }
-    if (removeIndex > 0) {
-      lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];
-    }
-    const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);
-    removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);
-    const lQueries = removedLView[QUERIES];
-    if (lQueries !== null) {
-      lQueries.detachView(removedLView[TVIEW]);
-    }
-    viewToDetach[PARENT] = null;
-    viewToDetach[NEXT] = null;
-    viewToDetach[FLAGS] &= ~128;
-  }
-  return viewToDetach;
-}
-function destroyLView(tView, lView) {
-  if (!(lView[FLAGS] & 256)) {
-    const renderer = lView[RENDERER];
-    if (renderer.destroyNode) {
-      applyView(tView, lView, renderer, 3, null, null);
-    }
-    destroyViewTree(lView);
-  }
-}
-function cleanUpView(tView, lView) {
-  if (lView[FLAGS] & 256) {
-    return;
-  }
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    lView[FLAGS] &= ~128;
-    lView[FLAGS] |= 256;
-    lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
-    executeOnDestroys(tView, lView);
-    processCleanups(tView, lView);
-    if (lView[TVIEW].type === 1) {
-      ngDevMode && ngDevMode.rendererDestroy++;
-      lView[RENDERER].destroy();
-    }
-    const declarationContainer = lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && isLContainer(lView[PARENT])) {
-      if (declarationContainer !== lView[PARENT]) {
-        detachMovedView(declarationContainer, lView);
-      }
-      const lQueries = lView[QUERIES];
-      if (lQueries !== null) {
-        lQueries.detachView(tView);
-      }
-    }
-    unregisterLView(lView);
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function processCleanups(tView, lView) {
-  ngDevMode && assertNotReactive(processCleanups.name);
-  const tCleanup = tView.cleanup;
-  const lCleanup = lView[CLEANUP];
-  if (tCleanup !== null) {
-    for (let i = 0; i < tCleanup.length - 1; i += 2) {
-      if (typeof tCleanup[i] === "string") {
-        const targetIdx = tCleanup[i + 3];
-        ngDevMode && assertNumber(targetIdx, "cleanup target must be a number");
-        if (targetIdx >= 0) {
-          lCleanup[targetIdx]();
-        } else {
-          lCleanup[-targetIdx].unsubscribe();
-        }
-        i += 2;
-      } else {
-        const context2 = lCleanup[tCleanup[i + 1]];
-        tCleanup[i].call(context2);
-      }
-    }
-  }
-  if (lCleanup !== null) {
-    lView[CLEANUP] = null;
-  }
-  const destroyHooks = lView[ON_DESTROY_HOOKS];
-  if (destroyHooks !== null) {
-    lView[ON_DESTROY_HOOKS] = null;
-    for (let i = 0; i < destroyHooks.length; i++) {
-      const destroyHooksFn = destroyHooks[i];
-      ngDevMode && assertFunction(destroyHooksFn, "Expecting destroy hook to be a function.");
-      destroyHooksFn();
-    }
-  }
-  const effects = lView[EFFECTS];
-  if (effects !== null) {
-    lView[EFFECTS] = null;
-    for (const effect2 of effects) {
-      effect2.destroy();
-    }
-  }
-}
-function executeOnDestroys(tView, lView) {
-  ngDevMode && assertNotReactive(executeOnDestroys.name);
-  let destroyHooks;
-  if (tView != null && (destroyHooks = tView.destroyHooks) != null) {
-    for (let i = 0; i < destroyHooks.length; i += 2) {
-      const context2 = lView[destroyHooks[i]];
-      if (!(context2 instanceof NodeInjectorFactory)) {
-        const toCall = destroyHooks[i + 1];
-        if (Array.isArray(toCall)) {
-          for (let j = 0; j < toCall.length; j += 2) {
-            const callContext = context2[toCall[j]];
-            const hook = toCall[j + 1];
-            profiler(4, callContext, hook);
-            try {
-              hook.call(callContext);
-            } finally {
-              profiler(5, callContext, hook);
-            }
-          }
-        } else {
-          profiler(4, context2, toCall);
-          try {
-            toCall.call(context2);
-          } finally {
-            profiler(5, context2, toCall);
-          }
-        }
-      }
-    }
-  }
-}
-function getParentRElement(tView, tNode, lView) {
-  return getClosestRElement(tView, tNode.parent, lView);
-}
-function getClosestRElement(tView, tNode, lView) {
-  let parentTNode = tNode;
-  while (parentTNode !== null && parentTNode.type & (8 | 32 | 128)) {
-    tNode = parentTNode;
-    parentTNode = tNode.parent;
-  }
-  if (parentTNode === null) {
-    return lView[HOST];
-  } else {
-    ngDevMode && assertTNodeType(
-      parentTNode,
-      3 | 4
-      /* TNodeType.Container */
-    );
-    const {
-      componentOffset
-    } = parentTNode;
-    if (componentOffset > -1) {
-      ngDevMode && assertTNodeForLView(parentTNode, lView);
-      const {
-        encapsulation
-      } = tView.data[parentTNode.directiveStart + componentOffset];
-      if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {
-        return null;
-      }
-    }
-    return getNativeByTNode(parentTNode, lView);
-  }
-}
-function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
-  ngDevMode && ngDevMode.rendererInsertBefore++;
-  renderer.insertBefore(parent, child, beforeNode, isMove);
-}
-function nativeAppendChild(renderer, parent, child) {
-  ngDevMode && ngDevMode.rendererAppendChild++;
-  ngDevMode && assertDefined(parent, "parent node must be defined");
-  renderer.appendChild(parent, child);
-}
-function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
-  if (beforeNode !== null) {
-    nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
-  } else {
-    nativeAppendChild(renderer, parent, child);
-  }
-}
-function nativeParentNode(renderer, node) {
-  return renderer.parentNode(node);
-}
-function nativeNextSibling(renderer, node) {
-  return renderer.nextSibling(node);
-}
-function getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {
-  return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);
-}
-function getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {
-  if (parentTNode.type & (8 | 32)) {
-    return getNativeByTNode(parentTNode, lView);
-  }
-  return null;
-}
-var _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;
-var _processI18nInsertBefore;
-function setI18nHandling(getInsertInFrontOfRNodeWithI18n2, processI18nInsertBefore2) {
-  _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n2;
-  _processI18nInsertBefore = processI18nInsertBefore2;
-}
-function appendChild(tView, lView, childRNode, childTNode) {
-  const parentRNode = getParentRElement(tView, childTNode, lView);
-  const renderer = lView[RENDERER];
-  const parentTNode = childTNode.parent || lView[T_HOST];
-  const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);
-  if (parentRNode != null) {
-    if (Array.isArray(childRNode)) {
-      for (let i = 0; i < childRNode.length; i++) {
-        nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);
-      }
-    } else {
-      nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);
-    }
-  }
-  _processI18nInsertBefore !== void 0 && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);
-}
-function getFirstNativeNode(lView, tNode) {
-  if (tNode !== null) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 32 | 16 | 128
-      /* TNodeType.LetDeclaration */
-    );
-    const tNodeType = tNode.type;
-    if (tNodeType & 3) {
-      return getNativeByTNode(tNode, lView);
-    } else if (tNodeType & 4) {
-      return getBeforeNodeForView(-1, lView[tNode.index]);
-    } else if (tNodeType & 8) {
-      const elIcuContainerChild = tNode.child;
-      if (elIcuContainerChild !== null) {
-        return getFirstNativeNode(lView, elIcuContainerChild);
-      } else {
-        const rNodeOrLContainer = lView[tNode.index];
-        if (isLContainer(rNodeOrLContainer)) {
-          return getBeforeNodeForView(-1, rNodeOrLContainer);
-        } else {
-          return unwrapRNode(rNodeOrLContainer);
-        }
-      }
-    } else if (tNodeType & 128) {
-      return getFirstNativeNode(lView, tNode.next);
-    } else if (tNodeType & 32) {
-      let nextRNode = icuContainerIterate(tNode, lView);
-      let rNode = nextRNode();
-      return rNode || unwrapRNode(lView[tNode.index]);
-    } else {
-      const projectionNodes = getProjectionNodes(lView, tNode);
-      if (projectionNodes !== null) {
-        if (Array.isArray(projectionNodes)) {
-          return projectionNodes[0];
-        }
-        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
-        ngDevMode && assertParentView(parentView);
-        return getFirstNativeNode(parentView, projectionNodes);
-      } else {
-        return getFirstNativeNode(lView, tNode.next);
-      }
-    }
-  }
-  return null;
-}
-function getProjectionNodes(lView, tNode) {
-  if (tNode !== null) {
-    const componentView = lView[DECLARATION_COMPONENT_VIEW];
-    const componentHost = componentView[T_HOST];
-    const slotIdx = tNode.projection;
-    ngDevMode && assertProjectionSlots(lView);
-    return componentHost.projection[slotIdx];
-  }
-  return null;
-}
-function getBeforeNodeForView(viewIndexInContainer, lContainer) {
-  const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;
-  if (nextViewIndex < lContainer.length) {
-    const lView = lContainer[nextViewIndex];
-    const firstTNodeOfView = lView[TVIEW].firstChild;
-    if (firstTNodeOfView !== null) {
-      return getFirstNativeNode(lView, firstTNodeOfView);
-    }
-  }
-  return lContainer[NATIVE];
-}
-function nativeRemoveNode(renderer, rNode, isHostElement) {
-  ngDevMode && ngDevMode.rendererRemoveNode++;
-  renderer.removeChild(null, rNode, isHostElement);
-}
-function clearElementContents(rElement) {
-  rElement.textContent = "";
-}
-function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {
-  while (tNode != null) {
-    ngDevMode && assertTNodeForLView(tNode, lView);
-    if (tNode.type === 128) {
-      tNode = tNode.next;
-      continue;
-    }
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 16 | 32
-      /* TNodeType.Icu */
-    );
-    const rawSlotValue = lView[tNode.index];
-    const tNodeType = tNode.type;
-    if (isProjection) {
-      if (action === 0) {
-        rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);
-        tNode.flags |= 2;
-      }
-    }
-    if ((tNode.flags & 32) !== 32) {
-      if (tNodeType & 8) {
-        applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      } else if (tNodeType & 32) {
-        const nextRNode = icuContainerIterate(tNode, lView);
-        let rNode;
-        while (rNode = nextRNode()) {
-          applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
-        }
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      } else if (tNodeType & 16) {
-        applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);
-      } else {
-        ngDevMode && assertTNodeType(
-          tNode,
-          3 | 4
-          /* TNodeType.Container */
-        );
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      }
-    }
-    tNode = isProjection ? tNode.projectionNext : tNode.next;
-  }
-}
-function applyView(tView, lView, renderer, action, parentRElement, beforeNode) {
-  applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);
-}
-function applyProjection(tView, lView, tProjectionNode) {
-  const renderer = lView[RENDERER];
-  const parentRNode = getParentRElement(tView, tProjectionNode, lView);
-  const parentTNode = tProjectionNode.parent || lView[T_HOST];
-  let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);
-  applyProjectionRecursive(renderer, 0, lView, tProjectionNode, parentRNode, beforeNode);
-}
-function applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {
-  const componentLView = lView[DECLARATION_COMPONENT_VIEW];
-  const componentNode = componentLView[T_HOST];
-  ngDevMode && assertEqual(typeof tProjectionNode.projection, "number", "expecting projection index");
-  const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];
-  if (Array.isArray(nodeToProjectOrRNodes)) {
-    for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {
-      const rNode = nodeToProjectOrRNodes[i];
-      applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
-    }
-  } else {
-    let nodeToProject = nodeToProjectOrRNodes;
-    const projectedComponentLView = componentLView[PARENT];
-    if (hasInSkipHydrationBlockFlag(tProjectionNode)) {
-      nodeToProject.flags |= 128;
-    }
-    applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);
-  }
-}
-function applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {
-  ngDevMode && assertLContainer(lContainer);
-  const anchor = lContainer[NATIVE];
-  const native = unwrapRNode(lContainer);
-  if (anchor !== native) {
-    applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);
-  }
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const lView = lContainer[i];
-    applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);
-  }
-}
-function applyStyling(renderer, isClassBased, rNode, prop, value) {
-  if (isClassBased) {
-    if (!value) {
-      ngDevMode && ngDevMode.rendererRemoveClass++;
-      renderer.removeClass(rNode, prop);
-    } else {
-      ngDevMode && ngDevMode.rendererAddClass++;
-      renderer.addClass(rNode, prop);
-    }
-  } else {
-    let flags = prop.indexOf("-") === -1 ? void 0 : RendererStyleFlags2.DashCase;
-    if (value == null) {
-      ngDevMode && ngDevMode.rendererRemoveStyle++;
-      renderer.removeStyle(rNode, prop, flags);
-    } else {
-      const isImportant = typeof value === "string" ? value.endsWith("!important") : false;
-      if (isImportant) {
-        value = value.slice(0, -10);
-        flags |= RendererStyleFlags2.Important;
-      }
-      ngDevMode && ngDevMode.rendererSetStyle++;
-      renderer.setStyle(rNode, prop, value, flags);
-    }
-  }
-}
-function writeDirectStyle(renderer, element, newValue) {
-  ngDevMode && assertString(newValue, "'newValue' should be a string");
-  renderer.setAttribute(element, "style", newValue);
-  ngDevMode && ngDevMode.rendererSetStyle++;
-}
-function writeDirectClass(renderer, element, newValue) {
-  ngDevMode && assertString(newValue, "'newValue' should be a string");
-  if (newValue === "") {
-    renderer.removeAttribute(element, "class");
-  } else {
-    renderer.setAttribute(element, "class", newValue);
-  }
-  ngDevMode && ngDevMode.rendererSetClassName++;
-}
-function setupStaticAttributes(renderer, element, tNode) {
-  const {
-    mergedAttrs,
-    classes,
-    styles
-  } = tNode;
-  if (mergedAttrs !== null) {
-    setUpAttributes(renderer, element, mergedAttrs);
-  }
-  if (classes !== null) {
-    writeDirectClass(renderer, element, classes);
-  }
-  if (styles !== null) {
-    writeDirectStyle(renderer, element, styles);
-  }
-}
-function classIndexOf(className, classToSearch, startingIndex) {
-  ngDevMode && assertNotEqual(classToSearch, "", 'can not look for "" string.');
-  let end = className.length;
-  while (true) {
-    const foundIndex = className.indexOf(classToSearch, startingIndex);
-    if (foundIndex === -1) return foundIndex;
-    if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32) {
-      const length = classToSearch.length;
-      if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32) {
-        return foundIndex;
-      }
-    }
-    startingIndex = foundIndex + 1;
-  }
-}
-var NG_TEMPLATE_SELECTOR = "ng-template";
-function isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {
-  ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), "Class name expected to be lowercase.");
-  let i = 0;
-  if (isProjectionMode) {
-    for (; i < attrs.length && typeof attrs[i] === "string"; i += 2) {
-      if (attrs[i] === "class" && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {
-        return true;
-      }
-    }
-  } else if (isInlineTemplate(tNode)) {
-    return false;
-  }
-  i = attrs.indexOf(1, i);
-  if (i > -1) {
-    let item;
-    while (++i < attrs.length && typeof (item = attrs[i]) === "string") {
-      if (item.toLowerCase() === cssClassToMatch) {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function isInlineTemplate(tNode) {
-  return tNode.type === 4 && tNode.value !== NG_TEMPLATE_SELECTOR;
-}
-function hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {
-  const tagNameToCompare = tNode.type === 4 && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;
-  return currentSelector === tagNameToCompare;
-}
-function isNodeMatchingSelector(tNode, selector, isProjectionMode) {
-  ngDevMode && assertDefined(selector[0], "Selector should have a tag name");
-  let mode = 4;
-  const nodeAttrs = tNode.attrs;
-  const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;
-  let skipToNextSelector = false;
-  for (let i = 0; i < selector.length; i++) {
-    const current = selector[i];
-    if (typeof current === "number") {
-      if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {
-        return false;
-      }
-      if (skipToNextSelector && isPositive(current)) continue;
-      skipToNextSelector = false;
-      mode = current | mode & 1;
-      continue;
-    }
-    if (skipToNextSelector) continue;
-    if (mode & 4) {
-      mode = 2 | mode & 1;
-      if (current !== "" && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === "" && selector.length === 1) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-      }
-    } else if (mode & 8) {
-      if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-      }
-    } else {
-      const selectorAttrValue = selector[++i];
-      const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);
-      if (attrIndexInNode === -1) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-        continue;
-      }
-      if (selectorAttrValue !== "") {
-        let nodeAttrValue;
-        if (attrIndexInNode > nameOnlyMarkerIdx) {
-          nodeAttrValue = "";
-        } else {
-          ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0, "We do not match directives on namespaced attributes");
-          nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();
-        }
-        if (mode & 2 && selectorAttrValue !== nodeAttrValue) {
-          if (isPositive(mode)) return false;
-          skipToNextSelector = true;
-        }
-      }
-    }
-  }
-  return isPositive(mode) || skipToNextSelector;
-}
-function isPositive(mode) {
-  return (mode & 1) === 0;
-}
-function findAttrIndexInNode(name, attrs, isInlineTemplate2, isProjectionMode) {
-  if (attrs === null) return -1;
-  let i = 0;
-  if (isProjectionMode || !isInlineTemplate2) {
-    let bindingsMode = false;
-    while (i < attrs.length) {
-      const maybeAttrName = attrs[i];
-      if (maybeAttrName === name) {
-        return i;
-      } else if (maybeAttrName === 3 || maybeAttrName === 6) {
-        bindingsMode = true;
-      } else if (maybeAttrName === 1 || maybeAttrName === 2) {
-        let value = attrs[++i];
-        while (typeof value === "string") {
-          value = attrs[++i];
-        }
-        continue;
-      } else if (maybeAttrName === 4) {
-        break;
-      } else if (maybeAttrName === 0) {
-        i += 4;
-        continue;
-      }
-      i += bindingsMode ? 1 : 2;
-    }
-    return -1;
-  } else {
-    return matchTemplateAttribute(attrs, name);
-  }
-}
-function isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {
-  for (let i = 0; i < selector.length; i++) {
-    if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {
-      return true;
-    }
-  }
-  return false;
-}
-function getProjectAsAttrValue(tNode) {
-  const nodeAttrs = tNode.attrs;
-  if (nodeAttrs != null) {
-    const ngProjectAsAttrIdx = nodeAttrs.indexOf(
-      5
-      /* AttributeMarker.ProjectAs */
-    );
-    if ((ngProjectAsAttrIdx & 1) === 0) {
-      return nodeAttrs[ngProjectAsAttrIdx + 1];
-    }
-  }
-  return null;
-}
-function getNameOnlyMarkerIndex(nodeAttrs) {
-  for (let i = 0; i < nodeAttrs.length; i++) {
-    const nodeAttr = nodeAttrs[i];
-    if (isNameOnlyAttributeMarker(nodeAttr)) {
-      return i;
-    }
-  }
-  return nodeAttrs.length;
-}
-function matchTemplateAttribute(attrs, name) {
-  let i = attrs.indexOf(
-    4
-    /* AttributeMarker.Template */
-  );
-  if (i > -1) {
-    i++;
-    while (i < attrs.length) {
-      const attr = attrs[i];
-      if (typeof attr === "number") return -1;
-      if (attr === name) return i;
-      i++;
-    }
-  }
-  return -1;
-}
-function isSelectorInSelectorList(selector, list) {
-  selectorListLoop: for (let i = 0; i < list.length; i++) {
-    const currentSelectorInList = list[i];
-    if (selector.length !== currentSelectorInList.length) {
-      continue;
-    }
-    for (let j = 0; j < selector.length; j++) {
-      if (selector[j] !== currentSelectorInList[j]) {
-        continue selectorListLoop;
-      }
-    }
-    return true;
-  }
-  return false;
-}
-function maybeWrapInNotSelector(isNegativeMode, chunk) {
-  return isNegativeMode ? ":not(" + chunk.trim() + ")" : chunk;
-}
-function stringifyCSSSelector(selector) {
-  let result = selector[0];
-  let i = 1;
-  let mode = 2;
-  let currentChunk = "";
-  let isNegativeMode = false;
-  while (i < selector.length) {
-    let valueOrMarker = selector[i];
-    if (typeof valueOrMarker === "string") {
-      if (mode & 2) {
-        const attrValue = selector[++i];
-        currentChunk += "[" + valueOrMarker + (attrValue.length > 0 ? '="' + attrValue + '"' : "") + "]";
-      } else if (mode & 8) {
-        currentChunk += "." + valueOrMarker;
-      } else if (mode & 4) {
-        currentChunk += " " + valueOrMarker;
-      }
-    } else {
-      if (currentChunk !== "" && !isPositive(valueOrMarker)) {
-        result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
-        currentChunk = "";
-      }
-      mode = valueOrMarker;
-      isNegativeMode = isNegativeMode || !isPositive(mode);
-    }
-    i++;
-  }
-  if (currentChunk !== "") {
-    result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
-  }
-  return result;
-}
-function stringifyCSSSelectorList(selectorList) {
-  return selectorList.map(stringifyCSSSelector).join(",");
-}
-function extractAttrsAndClassesFromSelector(selector) {
-  const attrs = [];
-  const classes = [];
-  let i = 1;
-  let mode = 2;
-  while (i < selector.length) {
-    let valueOrMarker = selector[i];
-    if (typeof valueOrMarker === "string") {
-      if (mode === 2) {
-        if (valueOrMarker !== "") {
-          attrs.push(valueOrMarker, selector[++i]);
-        }
-      } else if (mode === 8) {
-        classes.push(valueOrMarker);
-      }
-    } else {
-      if (!isPositive(mode)) break;
-      mode = valueOrMarker;
-    }
-    i++;
-  }
-  return {
-    attrs,
-    classes
-  };
-}
-var NO_CHANGE = typeof ngDevMode === "undefined" || ngDevMode ? {
-  __brand__: "NO_CHANGE"
-} : {};
-function ɵɵadvance(delta = 1) {
-  ngDevMode && assertGreaterThan(delta, 0, "Can only advance forward");
-  selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
-}
-function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
-  ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);
-  if (!checkNoChangesMode) {
-    const hooksInitPhaseCompleted = (lView[FLAGS] & 3) === 3;
-    if (hooksInitPhaseCompleted) {
-      const preOrderCheckHooks = tView.preOrderCheckHooks;
-      if (preOrderCheckHooks !== null) {
-        executeCheckHooks(lView, preOrderCheckHooks, index);
-      }
-    } else {
-      const preOrderHooks = tView.preOrderHooks;
-      if (preOrderHooks !== null) {
-        executeInitAndCheckHooks(lView, preOrderHooks, 0, index);
-      }
-    }
-  }
-  setSelectedIndex(index);
-}
-function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
-  const lView = getLView();
-  if (lView === null) {
-    ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
-    return ɵɵinject(token, flags);
-  }
-  const tNode = getCurrentTNode();
-  const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
-  ngDevMode && emitInjectEvent(token, value, flags);
-  return value;
-}
-function ɵɵinvalidFactory() {
-  const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : "invalid";
-  throw new Error(msg);
-}
-function writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    let inputSignalNode = null;
-    if ((flags & InputFlags.SignalBased) !== 0) {
-      const field = instance[privateName];
-      inputSignalNode = field[SIGNAL];
-    }
-    if (inputSignalNode !== null && inputSignalNode.transformFn !== void 0) {
-      value = inputSignalNode.transformFn(value);
-    }
-    if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {
-      value = def.inputTransforms[privateName].call(instance, value);
-    }
-    if (def.setInput !== null) {
-      def.setInput(instance, inputSignalNode, value, publicName, privateName);
-    } else {
-      applyValueToInputField(instance, inputSignalNode, privateName, value);
-    }
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function processHostBindingOpCodes(tView, lView) {
-  const hostBindingOpCodes = tView.hostBindingOpCodes;
-  if (hostBindingOpCodes === null) return;
-  try {
-    for (let i = 0; i < hostBindingOpCodes.length; i++) {
-      const opCode = hostBindingOpCodes[i];
-      if (opCode < 0) {
-        setSelectedIndex(~opCode);
-      } else {
-        const directiveIdx = opCode;
-        const bindingRootIndx = hostBindingOpCodes[++i];
-        const hostBindingFn = hostBindingOpCodes[++i];
-        setBindingRootForHostBindings(bindingRootIndx, directiveIdx);
-        const context2 = lView[directiveIdx];
-        hostBindingFn(2, context2);
-      }
-    }
-  } finally {
-    setSelectedIndex(-1);
-  }
-}
-function createLView(parentLView, tView, context2, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
-  const lView = tView.blueprint.slice();
-  lView[HOST] = host;
-  lView[FLAGS] = flags | 4 | 128 | 8 | 64 | 1024;
-  if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048) {
-    lView[FLAGS] |= 2048;
-  }
-  resetPreOrderHookFlags(lView);
-  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
-  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
-  lView[CONTEXT] = context2;
-  lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];
-  ngDevMode && assertDefined(lView[ENVIRONMENT], "LViewEnvironment is required");
-  lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];
-  ngDevMode && assertDefined(lView[RENDERER], "Renderer is required");
-  lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;
-  lView[T_HOST] = tHostNode;
-  lView[ID] = getUniqueLViewId();
-  lView[HYDRATION] = hydrationInfo;
-  lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
-  ngDevMode && assertEqual(tView.type == 2 ? parentLView !== null : true, true, "Embedded views must have parentLView");
-  lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
-  return lView;
-}
-function getOrCreateTNode(tView, index, type, name, attrs) {
-  ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
-  // `view_engine_compatibility` for additional context.
-  assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
-  ngDevMode && assertPureTNodeType(type);
-  let tNode = tView.data[index];
-  if (tNode === null) {
-    tNode = createTNodeAtIndex(tView, index, type, name, attrs);
-    if (isInI18nBlock()) {
-      tNode.flags |= 32;
-    }
-  } else if (tNode.type & 64) {
-    tNode.type = type;
-    tNode.value = name;
-    tNode.attrs = attrs;
-    const parent = getCurrentParentTNode();
-    tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
-    ngDevMode && assertTNodeForTView(tNode, tView);
-    ngDevMode && assertEqual(index, tNode.index, "Expecting same index");
-  }
-  setCurrentTNode(tNode, true);
-  return tNode;
-}
-function createTNodeAtIndex(tView, index, type, name, attrs) {
-  const currentTNode = getCurrentTNodePlaceholderOk();
-  const isParent = isCurrentTNodeParent();
-  const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
-  const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);
-  if (tView.firstChild === null) {
-    tView.firstChild = tNode;
-  }
-  if (currentTNode !== null) {
-    if (isParent) {
-      if (currentTNode.child == null && tNode.parent !== null) {
-        currentTNode.child = tNode;
-      }
-    } else {
-      if (currentTNode.next === null) {
-        currentTNode.next = tNode;
-        tNode.prev = currentTNode;
-      }
-    }
-  }
-  return tNode;
-}
-function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
-  if (numSlotsToAlloc === 0) return -1;
-  if (ngDevMode) {
-    assertFirstCreatePass(tView);
-    assertSame(tView, lView[TVIEW], "`LView` must be associated with `TView`!");
-    assertEqual(tView.data.length, lView.length, "Expecting LView to be same size as TView");
-    assertEqual(tView.data.length, tView.blueprint.length, "Expecting Blueprint to be same size as TView");
-    assertFirstUpdatePass(tView);
-  }
-  const allocIdx = lView.length;
-  for (let i = 0; i < numSlotsToAlloc; i++) {
-    lView.push(initialValue);
-    tView.blueprint.push(initialValue);
-    tView.data.push(null);
-  }
-  return allocIdx;
-}
-function executeTemplate(tView, lView, templateFn, rf, context2) {
-  const prevSelectedIndex = getSelectedIndex();
-  const isUpdatePhase = rf & 2;
-  try {
-    setSelectedIndex(-1);
-    if (isUpdatePhase && lView.length > HEADER_OFFSET) {
-      selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());
-    }
-    const preHookType = isUpdatePhase ? 2 : 0;
-    profiler(preHookType, context2);
-    templateFn(rf, context2);
-  } finally {
-    setSelectedIndex(prevSelectedIndex);
-    const postHookType = isUpdatePhase ? 3 : 1;
-    profiler(postHookType, context2);
-  }
-}
-function executeContentQueries(tView, tNode, lView) {
-  if (isContentQueryHost(tNode)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const start = tNode.directiveStart;
-      const end = tNode.directiveEnd;
-      for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
-        const def = tView.data[directiveIndex];
-        if (def.contentQueries) {
-          const directiveInstance = lView[directiveIndex];
-          ngDevMode && assertDefined(directiveIndex, "Incorrect reference to a directive defining a content query");
-          def.contentQueries(1, directiveInstance, directiveIndex);
-        }
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function createDirectivesInstances(tView, lView, tNode) {
-  if (!getBindingsEnabled()) return;
-  instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));
-  if ((tNode.flags & 64) === 64) {
-    invokeDirectivesHostBindings(tView, lView, tNode);
-  }
-}
-function saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {
-  const localNames = tNode.localNames;
-  if (localNames !== null) {
-    let localIndex = tNode.index + 1;
-    for (let i = 0; i < localNames.length; i += 2) {
-      const index = localNames[i + 1];
-      const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];
-      viewData[localIndex++] = value;
-    }
-  }
-}
-function getOrCreateComponentTView(def) {
-  const tView = def.tView;
-  if (tView === null || tView.incompleteFirstPass) {
-    const declTNode = null;
-    return def.tView = createTView(1, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);
-  }
-  return tView;
-}
-function createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {
-  ngDevMode && ngDevMode.tView++;
-  const bindingStartIndex = HEADER_OFFSET + decls;
-  const initialViewLength = bindingStartIndex + vars;
-  const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);
-  const consts = typeof constsOrFactory === "function" ? constsOrFactory() : constsOrFactory;
-  const tView = blueprint[TVIEW] = {
-    type,
-    blueprint,
-    template: templateFn,
-    queries: null,
-    viewQuery,
-    declTNode,
-    data: blueprint.slice().fill(null, bindingStartIndex),
-    bindingStartIndex,
-    expandoStartIndex: initialViewLength,
-    hostBindingOpCodes: null,
-    firstCreatePass: true,
-    firstUpdatePass: true,
-    staticViewQueries: false,
-    staticContentQueries: false,
-    preOrderHooks: null,
-    preOrderCheckHooks: null,
-    contentHooks: null,
-    contentCheckHooks: null,
-    viewHooks: null,
-    viewCheckHooks: null,
-    destroyHooks: null,
-    cleanup: null,
-    contentQueries: null,
-    components: null,
-    directiveRegistry: typeof directives === "function" ? directives() : directives,
-    pipeRegistry: typeof pipes === "function" ? pipes() : pipes,
-    firstChild: null,
-    schemas,
-    consts,
-    incompleteFirstPass: false,
-    ssrId
-  };
-  if (ngDevMode) {
-    Object.seal(tView);
-  }
-  return tView;
-}
-function createViewBlueprint(bindingStartIndex, initialViewLength) {
-  const blueprint = [];
-  for (let i = 0; i < initialViewLength; i++) {
-    blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);
-  }
-  return blueprint;
-}
-function locateHostElement(renderer, elementOrSelector, encapsulation, injector) {
-  const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);
-  const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom;
-  const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);
-  applyRootElementTransform(rootElement);
-  return rootElement;
-}
-function applyRootElementTransform(rootElement) {
-  _applyRootElementTransformImpl(rootElement);
-}
-var _applyRootElementTransformImpl = () => null;
-function applyRootElementTransformImpl(rootElement) {
-  if (hasSkipHydrationAttrOnRElement(rootElement)) {
-    clearElementContents(rootElement);
-  } else {
-    processTextNodeMarkersBeforeHydration(rootElement);
-  }
-}
-function enableApplyRootElementTransformImpl() {
-  _applyRootElementTransformImpl = applyRootElementTransformImpl;
-}
-function storeCleanupWithContext(tView, lView, context2, cleanupFn) {
-  const lCleanup = getOrCreateLViewCleanup(lView);
-  ngDevMode && assertDefined(context2, "Cleanup context is mandatory when registering framework-level destroy hooks");
-  lCleanup.push(context2);
-  if (tView.firstCreatePass) {
-    getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);
-  } else {
-    if (ngDevMode) {
-      Object.freeze(getOrCreateTViewCleanup(tView));
-    }
-  }
-}
-function createTNode(tView, tParent, type, index, value, attrs) {
-  ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
-  // `view_engine_compatibility` for additional context.
-  assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
-  ngDevMode && assertNotSame(attrs, void 0, "'undefined' is not valid value for 'attrs'");
-  ngDevMode && ngDevMode.tNode++;
-  ngDevMode && tParent && assertTNodeForTView(tParent, tView);
-  let injectorIndex = tParent ? tParent.injectorIndex : -1;
-  let flags = 0;
-  if (isInSkipHydrationBlock$1()) {
-    flags |= 128;
-  }
-  const tNode = {
-    type,
-    index,
-    insertBeforeIndex: null,
-    injectorIndex,
-    directiveStart: -1,
-    directiveEnd: -1,
-    directiveStylingLast: -1,
-    componentOffset: -1,
-    propertyBindings: null,
-    flags,
-    providerIndexes: 0,
-    value,
-    attrs,
-    mergedAttrs: null,
-    localNames: null,
-    initialInputs: void 0,
-    inputs: null,
-    outputs: null,
-    tView: null,
-    next: null,
-    prev: null,
-    projectionNext: null,
-    child: null,
-    parent: tParent,
-    projection: null,
-    styles: null,
-    stylesWithoutHost: null,
-    residualStyles: void 0,
-    classes: null,
-    classesWithoutHost: null,
-    residualClasses: void 0,
-    classBindings: 0,
-    styleBindings: 0
-  };
-  if (ngDevMode) {
-    Object.seal(tNode);
-  }
-  return tNode;
-}
-function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
-  for (let publicName in aliasMap) {
-    if (!aliasMap.hasOwnProperty(publicName)) {
-      continue;
-    }
-    const value = aliasMap[publicName];
-    if (value === void 0) {
-      continue;
-    }
-    bindingsResult ??= {};
-    let internalName;
-    let inputFlags = InputFlags.None;
-    if (Array.isArray(value)) {
-      internalName = value[0];
-      inputFlags = value[1];
-    } else {
-      internalName = value;
-    }
-    let finalPublicName = publicName;
-    if (hostDirectiveAliasMap !== null) {
-      if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {
-        continue;
-      }
-      finalPublicName = hostDirectiveAliasMap[publicName];
-    }
-    if (mode === 0) {
-      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);
-    } else {
-      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);
-    }
-  }
-  return bindingsResult;
-}
-function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
-  let values;
-  if (bindings.hasOwnProperty(publicName)) {
-    (values = bindings[publicName]).push(directiveIndex, internalName);
-  } else {
-    values = bindings[publicName] = [directiveIndex, internalName];
-  }
-  if (inputFlags !== void 0) {
-    values.push(inputFlags);
-  }
-}
-function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  const tViewData = tView.data;
-  const tNodeAttrs = tNode.attrs;
-  const inputsFromAttrs = [];
-  let inputsStore = null;
-  let outputsStore = null;
-  for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
-    const directiveDef = tViewData[directiveIndex];
-    const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;
-    const aliasedInputs = aliasData ? aliasData.inputs : null;
-    const aliasedOutputs = aliasData ? aliasData.outputs : null;
-    inputsStore = captureNodeBindings(0, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);
-    outputsStore = captureNodeBindings(1, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
-    const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode) ? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs) : null;
-    inputsFromAttrs.push(initialInputs);
-  }
-  if (inputsStore !== null) {
-    if (inputsStore.hasOwnProperty("class")) {
-      tNode.flags |= 8;
-    }
-    if (inputsStore.hasOwnProperty("style")) {
-      tNode.flags |= 16;
-    }
-  }
-  tNode.initialInputs = inputsFromAttrs;
-  tNode.inputs = inputsStore;
-  tNode.outputs = outputsStore;
-}
-function mapPropName(name) {
-  if (name === "class") return "className";
-  if (name === "for") return "htmlFor";
-  if (name === "formaction") return "formAction";
-  if (name === "innerHtml") return "innerHTML";
-  if (name === "readonly") return "readOnly";
-  if (name === "tabindex") return "tabIndex";
-  return name;
-}
-function elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {
-  ngDevMode && assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-  const element = getNativeByTNode(tNode, lView);
-  let inputData = tNode.inputs;
-  let dataValue;
-  if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {
-    setInputsForProperty(tView, lView, dataValue, propName, value);
-    if (isComponentHost(tNode)) markDirtyIfOnPush(lView, tNode.index);
-    if (ngDevMode) {
-      setNgReflectProperties(lView, element, tNode.type, dataValue, value);
-    }
-  } else if (tNode.type & 3) {
-    propName = mapPropName(propName);
-    if (ngDevMode) {
-      validateAgainstEventProperties(propName);
-      if (!isPropertyValid(element, propName, tNode.value, tView.schemas)) {
-        handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);
-      }
-      ngDevMode.rendererSetProperty++;
-    }
-    value = sanitizer != null ? sanitizer(value, tNode.value || "", propName) : value;
-    renderer.setProperty(element, propName, value);
-  } else if (tNode.type & 12) {
-    if (ngDevMode && !matchingSchemas(tView.schemas, tNode.value)) {
-      handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);
-    }
-  }
-}
-function markDirtyIfOnPush(lView, viewIndex) {
-  ngDevMode && assertLView(lView);
-  const childComponentLView = getComponentLViewByIndex(viewIndex, lView);
-  if (!(childComponentLView[FLAGS] & 16)) {
-    childComponentLView[FLAGS] |= 64;
-  }
-}
-function setNgReflectProperty(lView, element, type, attrName, value) {
-  const renderer = lView[RENDERER];
-  attrName = normalizeDebugBindingName(attrName);
-  const debugValue = normalizeDebugBindingValue(value);
-  if (type & 3) {
-    if (value == null) {
-      renderer.removeAttribute(element, attrName);
-    } else {
-      renderer.setAttribute(element, attrName, debugValue);
-    }
-  } else {
-    const textContent = escapeCommentText(`bindings=${JSON.stringify({
-      [attrName]: debugValue
-    }, null, 2)}`);
-    renderer.setValue(element, textContent);
-  }
-}
-function setNgReflectProperties(lView, element, type, dataValue, value) {
-  if (type & (3 | 4)) {
-    for (let i = 0; i < dataValue.length; i += 3) {
-      setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
-    }
-  }
-}
-function resolveDirectives(tView, lView, tNode, localRefs) {
-  ngDevMode && assertFirstCreatePass(tView);
-  if (getBindingsEnabled()) {
-    const exportsMap = localRefs === null ? null : {
-      "": -1
-    };
-    const matchResult = findDirectiveDefMatches(tView, tNode);
-    let directiveDefs;
-    let hostDirectiveDefs;
-    if (matchResult === null) {
-      directiveDefs = hostDirectiveDefs = null;
-    } else {
-      [directiveDefs, hostDirectiveDefs] = matchResult;
-    }
-    if (directiveDefs !== null) {
-      initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
-    }
-    if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);
-  }
-  tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
-}
-function initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {
-  ngDevMode && assertFirstCreatePass(tView);
-  for (let i = 0; i < directives.length; i++) {
-    diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);
-  }
-  initTNodeFlags(tNode, tView.data.length, directives.length);
-  for (let i = 0; i < directives.length; i++) {
-    const def = directives[i];
-    if (def.providersResolver) def.providersResolver(def);
-  }
-  let preOrderHooksFound = false;
-  let preOrderCheckHooksFound = false;
-  let directiveIdx = allocExpando(tView, lView, directives.length, null);
-  ngDevMode && assertSame(directiveIdx, tNode.directiveStart, "TNode.directiveStart should point to just allocated space");
-  for (let i = 0; i < directives.length; i++) {
-    const def = directives[i];
-    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
-    configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
-    saveNameToExportMap(directiveIdx, def, exportsMap);
-    if (def.contentQueries !== null) tNode.flags |= 4;
-    if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;
-    const lifeCycleHooks = def.type.prototype;
-    if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
-      (tView.preOrderHooks ??= []).push(tNode.index);
-      preOrderHooksFound = true;
-    }
-    if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
-      (tView.preOrderCheckHooks ??= []).push(tNode.index);
-      preOrderCheckHooksFound = true;
-    }
-    directiveIdx++;
-  }
-  initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
-}
-function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const hostBindings = def.hostBindings;
-  if (hostBindings) {
-    let hostBindingOpCodes = tView.hostBindingOpCodes;
-    if (hostBindingOpCodes === null) {
-      hostBindingOpCodes = tView.hostBindingOpCodes = [];
-    }
-    const elementIndx = ~tNode.index;
-    if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
-      hostBindingOpCodes.push(elementIndx);
-    }
-    hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
-  }
-}
-function lastSelectedElementIdx(hostBindingOpCodes) {
-  let i = hostBindingOpCodes.length;
-  while (i > 0) {
-    const value = hostBindingOpCodes[--i];
-    if (typeof value === "number" && value < 0) {
-      return value;
-    }
-  }
-  return 0;
-}
-function instantiateAllDirectives(tView, lView, tNode, native) {
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  if (isComponentHost(tNode)) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3
-      /* TNodeType.AnyRNode */
-    );
-    addComponentLogic(lView, tNode, tView.data[start + tNode.componentOffset]);
-  }
-  if (!tView.firstCreatePass) {
-    getOrCreateNodeInjectorForNode(tNode, lView);
-  }
-  attachPatchData(native, lView);
-  const initialInputs = tNode.initialInputs;
-  for (let i = start; i < end; i++) {
-    const def = tView.data[i];
-    const directive = getNodeInjectable(lView, tView, i, tNode);
-    attachPatchData(directive, lView);
-    if (initialInputs !== null) {
-      setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);
-    }
-    if (isComponentDef(def)) {
-      const componentView = getComponentLViewByIndex(tNode.index, lView);
-      componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);
-    }
-  }
-}
-function invokeDirectivesHostBindings(tView, lView, tNode) {
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  const elementIndex = tNode.index;
-  const currentDirectiveIndex = getCurrentDirectiveIndex();
-  try {
-    setSelectedIndex(elementIndex);
-    for (let dirIndex = start; dirIndex < end; dirIndex++) {
-      const def = tView.data[dirIndex];
-      const directive = lView[dirIndex];
-      setCurrentDirectiveIndex(dirIndex);
-      if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {
-        invokeHostBindingsInCreationMode(def, directive);
-      }
-    }
-  } finally {
-    setSelectedIndex(-1);
-    setCurrentDirectiveIndex(currentDirectiveIndex);
-  }
-}
-function invokeHostBindingsInCreationMode(def, directive) {
-  if (def.hostBindings !== null) {
-    def.hostBindings(1, directive);
-  }
-}
-function findDirectiveDefMatches(tView, tNode) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && assertTNodeType(
-    tNode,
-    3 | 12
-    /* TNodeType.AnyContainer */
-  );
-  const registry = tView.directiveRegistry;
-  let matches = null;
-  let hostDirectiveDefs = null;
-  if (registry) {
-    for (let i = 0; i < registry.length; i++) {
-      const def = registry[i];
-      if (isNodeMatchingSelectorList(
-        tNode,
-        def.selectors,
-        /* isProjectionMode */
-        false
-      )) {
-        matches || (matches = []);
-        if (isComponentDef(def)) {
-          if (ngDevMode) {
-            assertTNodeType(tNode, 2, `"${tNode.value}" tags cannot be used as component hosts. Please use a different tag to activate the ${stringify(def.type)} component.`);
-            if (isComponentHost(tNode)) {
-              throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);
-            }
-          }
-          if (def.findHostDirectiveDefs !== null) {
-            const hostDirectiveMatches = [];
-            hostDirectiveDefs = hostDirectiveDefs || /* @__PURE__ */ new Map();
-            def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);
-            matches.unshift(...hostDirectiveMatches, def);
-            const componentOffset = hostDirectiveMatches.length;
-            markAsComponentHost(tView, tNode, componentOffset);
-          } else {
-            matches.unshift(def);
-            markAsComponentHost(tView, tNode, 0);
-          }
-        } else {
-          hostDirectiveDefs = hostDirectiveDefs || /* @__PURE__ */ new Map();
-          def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);
-          matches.push(def);
-        }
-      }
-    }
-  }
-  ngDevMode && matches !== null && assertNoDuplicateDirectives(matches);
-  return matches === null ? null : [matches, hostDirectiveDefs];
-}
-function markAsComponentHost(tView, hostTNode, componentOffset) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && assertGreaterThan(componentOffset, -1, "componentOffset must be great than -1");
-  hostTNode.componentOffset = componentOffset;
-  (tView.components ??= []).push(hostTNode.index);
-}
-function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
-  if (localRefs) {
-    const localNames = tNode.localNames = [];
-    for (let i = 0; i < localRefs.length; i += 2) {
-      const index = exportsMap[localRefs[i + 1]];
-      if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
-      localNames.push(localRefs[i], index);
-    }
-  }
-}
-function saveNameToExportMap(directiveIdx, def, exportsMap) {
-  if (exportsMap) {
-    if (def.exportAs) {
-      for (let i = 0; i < def.exportAs.length; i++) {
-        exportsMap[def.exportAs[i]] = directiveIdx;
-      }
-    }
-    if (isComponentDef(def)) exportsMap[""] = directiveIdx;
-  }
-}
-function initTNodeFlags(tNode, index, numberOfDirectives) {
-  ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, "Reached the max number of directives");
-  tNode.flags |= 1;
-  tNode.directiveStart = index;
-  tNode.directiveEnd = index + numberOfDirectives;
-  tNode.providerIndexes = index;
-}
-function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
-  ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, "Must be in Expando section");
-  tView.data[directiveIndex] = def;
-  const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
-  const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);
-  tView.blueprint[directiveIndex] = nodeInjectorFactory;
-  lView[directiveIndex] = nodeInjectorFactory;
-  registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
-}
-function getInitialLViewFlagsFromDef(def) {
-  let flags = 16;
-  if (def.signals) {
-    flags = 4096;
-  } else if (def.onPush) {
-    flags = 64;
-  }
-  return flags;
-}
-function addComponentLogic(lView, hostTNode, def) {
-  const native = getNativeByTNode(hostTNode, lView);
-  const tView = getOrCreateComponentTView(def);
-  const rendererFactory = lView[ENVIRONMENT].rendererFactory;
-  const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
-  lView[hostTNode.index] = componentView;
-}
-function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
-  if (ngDevMode) {
-    assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-    validateAgainstEventAttributes(name);
-    assertTNodeType(tNode, 2, `Attempted to set attribute \`${name}\` on a container node. Host bindings are not valid on ng-container or ng-template.`);
-  }
-  const element = getNativeByTNode(tNode, lView);
-  setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);
-}
-function setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {
-  if (value == null) {
-    ngDevMode && ngDevMode.rendererRemoveAttribute++;
-    renderer.removeAttribute(element, name, namespace);
-  } else {
-    ngDevMode && ngDevMode.rendererSetAttribute++;
-    const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || "", name);
-    renderer.setAttribute(element, name, strValue, namespace);
-  }
-}
-function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {
-  const initialInputs = initialInputData[directiveIndex];
-  if (initialInputs !== null) {
-    for (let i = 0; i < initialInputs.length; ) {
-      const publicName = initialInputs[i++];
-      const privateName = initialInputs[i++];
-      const flags = initialInputs[i++];
-      const value = initialInputs[i++];
-      writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
-      if (ngDevMode) {
-        const nativeElement = getNativeByTNode(tNode, lView);
-        setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
-      }
-    }
-  }
-}
-function generateInitialInputs(inputs, directiveIndex, attrs) {
-  let inputsToStore = null;
-  let i = 0;
-  while (i < attrs.length) {
-    const attrName = attrs[i];
-    if (attrName === 0) {
-      i += 4;
-      continue;
-    } else if (attrName === 5) {
-      i += 2;
-      continue;
-    }
-    if (typeof attrName === "number") break;
-    if (inputs.hasOwnProperty(attrName)) {
-      if (inputsToStore === null) inputsToStore = [];
-      const inputConfig = inputs[attrName];
-      for (let j = 0; j < inputConfig.length; j += 3) {
-        if (inputConfig[j] === directiveIndex) {
-          inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
-          break;
-        }
-      }
-    }
-    i += 2;
-  }
-  return inputsToStore;
-}
-function createLContainer(hostNative, currentView, native, tNode) {
-  ngDevMode && assertLView(currentView);
-  const lContainer = [
-    hostNative,
-    // host native
-    true,
-    // Boolean `true` in this position signifies that this is an `LContainer`
-    0,
-    // flags
-    currentView,
-    // parent
-    null,
-    // next
-    tNode,
-    // t_host
-    null,
-    // dehydrated views
-    native,
-    // native,
-    null,
-    // view refs
-    null
-    // moved views
-  ];
-  ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, "Should allocate correct number of slots for LContainer header.");
-  return lContainer;
-}
-function refreshContentQueries(tView, lView) {
-  const contentQueries = tView.contentQueries;
-  if (contentQueries !== null) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      for (let i = 0; i < contentQueries.length; i += 2) {
-        const queryStartIdx = contentQueries[i];
-        const directiveDefIdx = contentQueries[i + 1];
-        if (directiveDefIdx !== -1) {
-          const directiveDef = tView.data[directiveDefIdx];
-          ngDevMode && assertDefined(directiveDef, "DirectiveDef not found.");
-          ngDevMode && assertDefined(directiveDef.contentQueries, "contentQueries function should be defined");
-          setCurrentQueryIndex(queryStartIdx);
-          directiveDef.contentQueries(2, lView[directiveDefIdx], directiveDefIdx);
-        }
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function addToEndOfViewTree(lView, lViewOrLContainer) {
-  if (lView[CHILD_HEAD]) {
-    lView[CHILD_TAIL][NEXT] = lViewOrLContainer;
-  } else {
-    lView[CHILD_HEAD] = lViewOrLContainer;
-  }
-  lView[CHILD_TAIL] = lViewOrLContainer;
-  return lViewOrLContainer;
-}
-function executeViewQueryFn(flags, viewQueryFn, component) {
-  ngDevMode && assertDefined(viewQueryFn, "View queries function to execute must be defined.");
-  setCurrentQueryIndex(0);
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    viewQueryFn(flags, component);
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {
-  if (tData[bindingIndex] === null) {
-    if (tNode.inputs == null || !tNode.inputs[propertyName]) {
-      const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);
-      propBindingIdxs.push(bindingIndex);
-      let bindingMetadata = propertyName;
-      if (interpolationParts.length > 0) {
-        bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);
-      }
-      tData[bindingIndex] = bindingMetadata;
-    }
-  }
-}
-function getOrCreateLViewCleanup(view) {
-  return view[CLEANUP] ??= [];
-}
-function getOrCreateTViewCleanup(tView) {
-  return tView.cleanup ??= [];
-}
-function loadComponentRenderer(currentDef, tNode, lView) {
-  if (currentDef === null || isComponentDef(currentDef)) {
-    lView = unwrapLView(lView[tNode.index]);
-  }
-  return lView[RENDERER];
-}
-function handleError(lView, error) {
-  const injector = lView[INJECTOR];
-  const errorHandler = injector ? injector.get(ErrorHandler, null) : null;
-  errorHandler && errorHandler.handleError(error);
-}
-function setInputsForProperty(tView, lView, inputs, publicName, value) {
-  for (let i = 0; i < inputs.length; ) {
-    const index = inputs[i++];
-    const privateName = inputs[i++];
-    const flags = inputs[i++];
-    const instance = lView[index];
-    ngDevMode && assertIndexInRange(lView, index);
-    const def = tView.data[index];
-    writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
-  }
-}
-function textBindingInternal(lView, index, value) {
-  ngDevMode && assertString(value, "Value should be a string");
-  ngDevMode && assertNotSame(value, NO_CHANGE, "value should not be NO_CHANGE");
-  ngDevMode && assertIndexInRange(lView, index);
-  const element = getNativeByIndex(index, lView);
-  ngDevMode && assertDefined(element, "native element should exist");
-  updateTextNode(lView[RENDERER], element, value);
-}
-function renderComponent(hostLView, componentHostIdx) {
-  ngDevMode && assertEqual(isCreationMode(hostLView), true, "Should be run in creation mode");
-  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
-  const componentTView = componentView[TVIEW];
-  syncViewWithBlueprint(componentTView, componentView);
-  const hostRNode = componentView[HOST];
-  if (hostRNode !== null && componentView[HYDRATION] === null) {
-    componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);
-  }
-  renderView(componentTView, componentView, componentView[CONTEXT]);
-}
-function syncViewWithBlueprint(tView, lView) {
-  for (let i = lView.length; i < tView.blueprint.length; i++) {
-    lView.push(tView.blueprint[i]);
-  }
-}
-function renderView(tView, lView, context2) {
-  ngDevMode && assertEqual(isCreationMode(lView), true, "Should be run in creation mode");
-  ngDevMode && assertNotReactive(renderView.name);
-  enterView(lView);
-  try {
-    const viewQuery = tView.viewQuery;
-    if (viewQuery !== null) {
-      executeViewQueryFn(1, viewQuery, context2);
-    }
-    const templateFn = tView.template;
-    if (templateFn !== null) {
-      executeTemplate(tView, lView, templateFn, 1, context2);
-    }
-    if (tView.firstCreatePass) {
-      tView.firstCreatePass = false;
-    }
-    lView[QUERIES]?.finishViewCreation(tView);
-    if (tView.staticContentQueries) {
-      refreshContentQueries(tView, lView);
-    }
-    if (tView.staticViewQueries) {
-      executeViewQueryFn(2, tView.viewQuery, context2);
-    }
-    const components = tView.components;
-    if (components !== null) {
-      renderChildComponents(lView, components);
-    }
-  } catch (error) {
-    if (tView.firstCreatePass) {
-      tView.incompleteFirstPass = true;
-      tView.firstCreatePass = false;
-    }
-    throw error;
-  } finally {
-    lView[FLAGS] &= ~4;
-    leaveView();
-  }
-}
-function renderChildComponents(hostLView, components) {
-  for (let i = 0; i < components.length; i++) {
-    renderComponent(hostLView, components[i]);
-  }
-}
-function createAndRenderEmbeddedLView(declarationLView, templateTNode, context2, options) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    const embeddedTView = templateTNode.tView;
-    ngDevMode && assertDefined(embeddedTView, "TView must be defined for a template node.");
-    ngDevMode && assertTNodeForLView(templateTNode, declarationLView);
-    const isSignalView = declarationLView[FLAGS] & 4096;
-    const viewFlags = isSignalView ? 4096 : 16;
-    const embeddedLView = createLView(declarationLView, embeddedTView, context2, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);
-    const declarationLContainer = declarationLView[templateTNode.index];
-    ngDevMode && assertLContainer(declarationLContainer);
-    embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
-    const declarationViewLQueries = declarationLView[QUERIES];
-    if (declarationViewLQueries !== null) {
-      embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
-    }
-    renderView(embeddedTView, embeddedLView, context2);
-    return embeddedLView;
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function getLViewFromLContainer(lContainer, index) {
-  const adjustedIndex = CONTAINER_HEADER_OFFSET + index;
-  if (adjustedIndex < lContainer.length) {
-    const lView = lContainer[adjustedIndex];
-    ngDevMode && assertLView(lView);
-    return lView;
-  }
-  return void 0;
-}
-function shouldAddViewToDom(tNode, dehydratedView) {
-  return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);
-}
-function addLViewToLContainer(lContainer, lView, index, addToDOM = true) {
-  const tView = lView[TVIEW];
-  insertView(tView, lView, lContainer, index);
-  if (addToDOM) {
-    const beforeNode = getBeforeNodeForView(index, lContainer);
-    const renderer = lView[RENDERER];
-    const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);
-    if (parentRNode !== null) {
-      addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
-    }
-  }
-  const hydrationInfo = lView[HYDRATION];
-  if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {
-    hydrationInfo.firstChild = null;
-  }
-}
-function removeLViewFromLContainer(lContainer, index) {
-  const lView = detachView(lContainer, index);
-  if (lView !== void 0) {
-    destroyLView(lView[TVIEW], lView);
-  }
-  return lView;
-}
-function collectNativeNodes(tView, lView, tNode, result, isProjection = false) {
-  while (tNode !== null) {
-    if (tNode.type === 128) {
-      tNode = isProjection ? tNode.projectionNext : tNode.next;
-      continue;
-    }
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 16 | 32
-      /* TNodeType.Icu */
-    );
-    const lNode = lView[tNode.index];
-    if (lNode !== null) {
-      result.push(unwrapRNode(lNode));
-    }
-    if (isLContainer(lNode)) {
-      collectNativeNodesInLContainer(lNode, result);
-    }
-    const tNodeType = tNode.type;
-    if (tNodeType & 8) {
-      collectNativeNodes(tView, lView, tNode.child, result);
-    } else if (tNodeType & 32) {
-      const nextRNode = icuContainerIterate(tNode, lView);
-      let rNode;
-      while (rNode = nextRNode()) {
-        result.push(rNode);
-      }
-    } else if (tNodeType & 16) {
-      const nodesInSlot = getProjectionNodes(lView, tNode);
-      if (Array.isArray(nodesInSlot)) {
-        result.push(...nodesInSlot);
-      } else {
-        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
-        ngDevMode && assertParentView(parentView);
-        collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);
-      }
-    }
-    tNode = isProjection ? tNode.projectionNext : tNode.next;
-  }
-  return result;
-}
-function collectNativeNodesInLContainer(lContainer, result) {
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const lViewInAContainer = lContainer[i];
-    const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;
-    if (lViewFirstChildTNode !== null) {
-      collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);
-    }
-  }
-  if (lContainer[NATIVE] !== lContainer[HOST]) {
-    result.push(lContainer[NATIVE]);
-  }
-}
-var freeConsumers = [];
-function getOrBorrowReactiveLViewConsumer(lView) {
-  return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);
-}
-function borrowReactiveLViewConsumer(lView) {
-  const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);
-  consumer.lView = lView;
-  return consumer;
-}
-function maybeReturnReactiveLViewConsumer(consumer) {
-  if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {
-    return;
-  }
-  consumer.lView = null;
-  freeConsumers.push(consumer);
-}
-var REACTIVE_LVIEW_CONSUMER_NODE = __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerMarkedDirty: (node) => {
-    markAncestorsForTraversal(node.lView);
-  },
-  consumerOnSignalRead() {
-    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;
-  }
-});
-function getOrCreateTemporaryConsumer(lView) {
-  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);
-  consumer.lView = lView;
-  return consumer;
-}
-var TEMPORARY_CONSUMER_NODE = __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerMarkedDirty: (node) => {
-    let parent = getLViewParent(node.lView);
-    while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {
-      parent = getLViewParent(parent);
-    }
-    if (!parent) {
-      return;
-    }
-    markViewForRefresh(parent);
-  },
-  consumerOnSignalRead() {
-    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;
-  }
-});
-function viewShouldHaveReactiveConsumer(tView) {
-  return tView.type !== 2;
-}
-function runEffectsInView(view) {
-  if (view[EFFECTS] === null) {
-    return;
-  }
-  let tryFlushEffects = true;
-  while (tryFlushEffects) {
-    let foundDirtyEffect = false;
-    for (const effect2 of view[EFFECTS]) {
-      if (!effect2.dirty) {
-        continue;
-      }
-      foundDirtyEffect = true;
-      if (effect2.zone === null || Zone.current === effect2.zone) {
-        effect2.run();
-      } else {
-        effect2.zone.run(() => effect2.run());
-      }
-    }
-    tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192);
-  }
-}
-var MAXIMUM_REFRESH_RERUNS$1 = 100;
-function detectChangesInternal(lView, notifyErrorHandler = true, mode = 0) {
-  const environment = lView[ENVIRONMENT];
-  const rendererFactory = environment.rendererFactory;
-  const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
-  if (!checkNoChangesMode) {
-    rendererFactory.begin?.();
-  }
-  try {
-    detectChangesInViewWhileDirty(lView, mode);
-  } catch (error) {
-    if (notifyErrorHandler) {
-      handleError(lView, error);
-    }
-    throw error;
-  } finally {
-    if (!checkNoChangesMode) {
-      rendererFactory.end?.();
-    }
-  }
-}
-function detectChangesInViewWhileDirty(lView, mode) {
-  const lastIsRefreshingViewsValue = isRefreshingViews();
-  try {
-    setIsRefreshingViews(true);
-    detectChangesInView(lView, mode);
-    if (ngDevMode && isExhaustiveCheckNoChanges()) {
-      return;
-    }
-    let retries = 0;
-    while (requiresRefreshOrTraversal(lView)) {
-      if (retries === MAXIMUM_REFRESH_RERUNS$1) {
-        throw new RuntimeError(103, ngDevMode && "Infinite change detection while trying to refresh views. There may be components which each cause the other to require a refresh, causing an infinite loop.");
-      }
-      retries++;
-      detectChangesInView(
-        lView,
-        1
-        /* ChangeDetectionMode.Targeted */
-      );
-    }
-  } finally {
-    setIsRefreshingViews(lastIsRefreshingViewsValue);
-  }
-}
-function checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {
-  setIsInCheckNoChangesMode(mode);
-  try {
-    detectChangesInternal(lView, notifyErrorHandler);
-  } finally {
-    setIsInCheckNoChangesMode(CheckNoChangesMode.Off);
-  }
-}
-function refreshView(tView, lView, templateFn, context2) {
-  ngDevMode && assertEqual(isCreationMode(lView), false, "Should be run in update mode");
-  const flags = lView[FLAGS];
-  if ((flags & 256) === 256) return;
-  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
-  const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();
-  enterView(lView);
-  let returnConsumerToPool = true;
-  let prevConsumer = null;
-  let currentConsumer = null;
-  if (!isInCheckNoChangesPass) {
-    if (viewShouldHaveReactiveConsumer(tView)) {
-      currentConsumer = getOrBorrowReactiveLViewConsumer(lView);
-      prevConsumer = consumerBeforeComputation(currentConsumer);
-    } else if (getActiveConsumer() === null) {
-      returnConsumerToPool = false;
-      currentConsumer = getOrCreateTemporaryConsumer(lView);
-      prevConsumer = consumerBeforeComputation(currentConsumer);
-    } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {
-      consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
-      lView[REACTIVE_TEMPLATE_CONSUMER] = null;
-    }
-  }
-  try {
-    resetPreOrderHookFlags(lView);
-    setBindingIndex(tView.bindingStartIndex);
-    if (templateFn !== null) {
-      executeTemplate(tView, lView, templateFn, 2, context2);
-    }
-    const hooksInitPhaseCompleted = (flags & 3) === 3;
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const preOrderCheckHooks = tView.preOrderCheckHooks;
-        if (preOrderCheckHooks !== null) {
-          executeCheckHooks(lView, preOrderCheckHooks, null);
-        }
-      } else {
-        const preOrderHooks = tView.preOrderHooks;
-        if (preOrderHooks !== null) {
-          executeInitAndCheckHooks(lView, preOrderHooks, 0, null);
-        }
-        incrementInitPhaseFlags(
-          lView,
-          0
-          /* InitPhaseState.OnInitHooksToBeRun */
-        );
-      }
-    }
-    if (!isInExhaustiveCheckNoChangesPass) {
-      markTransplantedViewsForRefresh(lView);
-    }
-    runEffectsInView(lView);
-    detectChangesInEmbeddedViews(
-      lView,
-      0
-      /* ChangeDetectionMode.Global */
-    );
-    if (tView.contentQueries !== null) {
-      refreshContentQueries(tView, lView);
-    }
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const contentCheckHooks = tView.contentCheckHooks;
-        if (contentCheckHooks !== null) {
-          executeCheckHooks(lView, contentCheckHooks);
-        }
-      } else {
-        const contentHooks = tView.contentHooks;
-        if (contentHooks !== null) {
-          executeInitAndCheckHooks(
-            lView,
-            contentHooks,
-            1
-            /* InitPhaseState.AfterContentInitHooksToBeRun */
-          );
-        }
-        incrementInitPhaseFlags(
-          lView,
-          1
-          /* InitPhaseState.AfterContentInitHooksToBeRun */
-        );
-      }
-    }
-    processHostBindingOpCodes(tView, lView);
-    const components = tView.components;
-    if (components !== null) {
-      detectChangesInChildComponents(
-        lView,
-        components,
-        0
-        /* ChangeDetectionMode.Global */
-      );
-    }
-    const viewQuery = tView.viewQuery;
-    if (viewQuery !== null) {
-      executeViewQueryFn(2, viewQuery, context2);
-    }
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const viewCheckHooks = tView.viewCheckHooks;
-        if (viewCheckHooks !== null) {
-          executeCheckHooks(lView, viewCheckHooks);
-        }
-      } else {
-        const viewHooks = tView.viewHooks;
-        if (viewHooks !== null) {
-          executeInitAndCheckHooks(
-            lView,
-            viewHooks,
-            2
-            /* InitPhaseState.AfterViewInitHooksToBeRun */
-          );
-        }
-        incrementInitPhaseFlags(
-          lView,
-          2
-          /* InitPhaseState.AfterViewInitHooksToBeRun */
-        );
-      }
-    }
-    if (tView.firstUpdatePass === true) {
-      tView.firstUpdatePass = false;
-    }
-    if (lView[EFFECTS_TO_SCHEDULE]) {
-      for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {
-        notifyEffect();
-      }
-      lView[EFFECTS_TO_SCHEDULE] = null;
-    }
-    if (!isInCheckNoChangesPass) {
-      lView[FLAGS] &= ~(64 | 8);
-    }
-  } catch (e) {
-    if (!isInCheckNoChangesPass) {
-      markAncestorsForTraversal(lView);
-    }
-    throw e;
-  } finally {
-    if (currentConsumer !== null) {
-      consumerAfterComputation(currentConsumer, prevConsumer);
-      if (returnConsumerToPool) {
-        maybeReturnReactiveLViewConsumer(currentConsumer);
-      }
-    }
-    leaveView();
-  }
-}
-function detectChangesInEmbeddedViews(lView, mode) {
-  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
-    for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-      const embeddedLView = lContainer[i];
-      detectChangesInViewIfAttached(embeddedLView, mode);
-    }
-  }
-}
-function markTransplantedViewsForRefresh(lView) {
-  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
-    if (!(lContainer[FLAGS] & LContainerFlags.HasTransplantedViews)) continue;
-    const movedViews = lContainer[MOVED_VIEWS];
-    ngDevMode && assertDefined(movedViews, "Transplanted View flags set but missing MOVED_VIEWS");
-    for (let i = 0; i < movedViews.length; i++) {
-      const movedLView = movedViews[i];
-      markViewForRefresh(movedLView);
-    }
-  }
-}
-function detectChangesInComponent(hostLView, componentHostIdx, mode) {
-  ngDevMode && assertEqual(isCreationMode(hostLView), false, "Should be run in update mode");
-  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
-  detectChangesInViewIfAttached(componentView, mode);
-}
-function detectChangesInViewIfAttached(lView, mode) {
-  if (!viewAttachedToChangeDetector(lView)) {
-    return;
-  }
-  detectChangesInView(lView, mode);
-}
-function detectChangesInView(lView, mode) {
-  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
-  const tView = lView[TVIEW];
-  const flags = lView[FLAGS];
-  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];
-  let shouldRefreshView = !!(mode === 0 && flags & 16);
-  shouldRefreshView ||= !!(flags & 64 && mode === 0 && !isInCheckNoChangesPass);
-  shouldRefreshView ||= !!(flags & 1024);
-  shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));
-  shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
-  if (consumer) {
-    consumer.dirty = false;
-  }
-  lView[FLAGS] &= ~(8192 | 1024);
-  if (shouldRefreshView) {
-    refreshView(tView, lView, tView.template, lView[CONTEXT]);
-  } else if (flags & 8192) {
-    runEffectsInView(lView);
-    detectChangesInEmbeddedViews(
-      lView,
-      1
-      /* ChangeDetectionMode.Targeted */
-    );
-    const components = tView.components;
-    if (components !== null) {
-      detectChangesInChildComponents(
-        lView,
-        components,
-        1
-        /* ChangeDetectionMode.Targeted */
-      );
-    }
-  }
-}
-function detectChangesInChildComponents(hostLView, components, mode) {
-  for (let i = 0; i < components.length; i++) {
-    detectChangesInComponent(hostLView, components[i], mode);
-  }
-}
-function markViewDirty(lView, source) {
-  const dirtyBitsToUse = isRefreshingViews() ? (
-    // When we are actively refreshing views, we only use the `Dirty` bit to mark a view
-    64
-  ) : (
-    // When we are not actively refreshing a view tree, it is absolutely
-    // valid to update state and mark views dirty. We use the `RefreshView` flag in this
-    // case to allow synchronously rerunning change detection. This applies today to
-    // afterRender hooks as well as animation listeners which execute after detecting
-    // changes in a view when the render factory flushes.
-    1024 | 64
-  );
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);
-  while (lView) {
-    lView[FLAGS] |= dirtyBitsToUse;
-    const parent = getLViewParent(lView);
-    if (isRootView(lView) && !parent) {
-      return lView;
-    }
-    lView = parent;
-  }
-  return null;
-}
-var ViewRef$1 = class {
-  _lView;
-  _cdRefInjectingView;
-  notifyErrorHandler;
-  _appRef = null;
-  _attachedToViewContainer = false;
-  get rootNodes() {
-    const lView = this._lView;
-    const tView = lView[TVIEW];
-    return collectNativeNodes(tView, lView, tView.firstChild, []);
-  }
-  constructor(_lView, _cdRefInjectingView, notifyErrorHandler = true) {
-    this._lView = _lView;
-    this._cdRefInjectingView = _cdRefInjectingView;
-    this.notifyErrorHandler = notifyErrorHandler;
-  }
-  get context() {
-    return this._lView[CONTEXT];
-  }
-  /**
-   * Reports whether the given view is considered dirty according to the different marking mechanisms.
-   */
-  get dirty() {
-    return !!(this._lView[FLAGS] & (64 | 1024 | 8192)) || !!this._lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty;
-  }
-  /**
-   * @deprecated Replacing the full context object is not supported. Modify the context
-   *   directly, or consider using a `Proxy` if you need to replace the full object.
-   * // TODO(devversion): Remove this.
-   */
-  set context(value) {
-    if (ngDevMode) {
-      console.warn("Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.");
-    }
-    this._lView[CONTEXT] = value;
-  }
-  get destroyed() {
-    return (this._lView[FLAGS] & 256) === 256;
-  }
-  destroy() {
-    if (this._appRef) {
-      this._appRef.detachView(this);
-    } else if (this._attachedToViewContainer) {
-      const parent = this._lView[PARENT];
-      if (isLContainer(parent)) {
-        const viewRefs = parent[VIEW_REFS];
-        const index = viewRefs ? viewRefs.indexOf(this) : -1;
-        if (index > -1) {
-          ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, "An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.");
-          detachView(parent, index);
-          removeFromArray(viewRefs, index);
-        }
-      }
-      this._attachedToViewContainer = false;
-    }
-    destroyLView(this._lView[TVIEW], this._lView);
-  }
-  onDestroy(callback) {
-    storeLViewOnDestroy(this._lView, callback);
-  }
-  /**
-   * Marks a view and all of its ancestors dirty.
-   *
-   * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush} component is
-   * checked when it needs to be re-rendered but the two normal triggers haven't marked it
-   * dirty (i.e. inputs haven't changed and events haven't fired in the view).
-   *
-   * <!-- TODO: Add a link to a chapter on OnPush components -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * ```ts
-   * @Component({
-   *   selector: 'app-root',
-   *   template: `Number of ticks: {{numberOfTicks}}`
-   *   changeDetection: ChangeDetectionStrategy.OnPush,
-   * })
-   * class AppComponent {
-   *   numberOfTicks = 0;
-   *
-   *   constructor(private ref: ChangeDetectorRef) {
-   *     setInterval(() => {
-   *       this.numberOfTicks++;
-   *       // the following is required, otherwise the view will not be updated
-   *       this.ref.markForCheck();
-   *     }, 1000);
-   *   }
-   * }
-   * ```
-   */
-  markForCheck() {
-    markViewDirty(
-      this._cdRefInjectingView || this._lView,
-      4
-      /* NotificationSource.MarkForCheck */
-    );
-  }
-  markForRefresh() {
-    markViewForRefresh(this._cdRefInjectingView || this._lView);
-  }
-  /**
-   * Detaches the view from the change detection tree.
-   *
-   * Detached views will not be checked during change detection runs until they are
-   * re-attached, even if they are dirty. `detach` can be used in combination with
-   * {@link ChangeDetectorRef#detectChanges} to implement local change
-   * detection checks.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example defines a component with a large list of readonly data.
-   * Imagine the data changes constantly, many times per second. For performance reasons,
-   * we want to check and update the list every five seconds. We can do that by detaching
-   * the component's change detector and doing a local check every five seconds.
-   *
-   * ```ts
-   * class DataProvider {
-   *   // in a real application the returned data will be different every time
-   *   get data() {
-   *     return [1,2,3,4,5];
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'giant-list',
-   *   template: `
-   *     <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
-   *   `,
-   * })
-   * class GiantList {
-   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
-   *     ref.detach();
-   *     setInterval(() => {
-   *       this.ref.detectChanges();
-   *     }, 5000);
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'app',
-   *   providers: [DataProvider],
-   *   template: `
-   *     <giant-list><giant-list>
-   *   `,
-   * })
-   * class App {
-   * }
-   * ```
-   */
-  detach() {
-    this._lView[FLAGS] &= ~128;
-  }
-  /**
-   * Re-attaches a view to the change detection tree.
-   *
-   * This can be used to re-attach views that were previously detached from the tree
-   * using {@link ChangeDetectorRef#detach}. Views are attached to the tree by default.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example creates a component displaying `live` data. The component will detach
-   * its change detector from the main change detector tree when the component's live property
-   * is set to false.
-   *
-   * ```ts
-   * class DataProvider {
-   *   data = 1;
-   *
-   *   constructor() {
-   *     setInterval(() => {
-   *       this.data = this.data * 2;
-   *     }, 500);
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'live-data',
-   *   inputs: ['live'],
-   *   template: 'Data: {{dataProvider.data}}'
-   * })
-   * class LiveData {
-   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
-   *
-   *   set live(value) {
-   *     if (value) {
-   *       this.ref.reattach();
-   *     } else {
-   *       this.ref.detach();
-   *     }
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'app-root',
-   *   providers: [DataProvider],
-   *   template: `
-   *     Live Update: <input type="checkbox" [(ngModel)]="live">
-   *     <live-data [live]="live"><live-data>
-   *   `,
-   * })
-   * class AppComponent {
-   *   live = true;
-   * }
-   * ```
-   */
-  reattach() {
-    updateAncestorTraversalFlagsOnAttach(this._lView);
-    this._lView[FLAGS] |= 128;
-  }
-  /**
-   * Checks the view and its children.
-   *
-   * This can also be used in combination with {@link ChangeDetectorRef#detach} to implement
-   * local change detection checks.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example defines a component with a large list of readonly data.
-   * Imagine, the data changes constantly, many times per second. For performance reasons,
-   * we want to check and update the list every five seconds.
-   *
-   * We can do that by detaching the component's change detector and doing a local change detection
-   * check every five seconds.
-   *
-   * See {@link ChangeDetectorRef#detach} for more information.
-   */
-  detectChanges() {
-    this._lView[FLAGS] |= 1024;
-    detectChangesInternal(this._lView, this.notifyErrorHandler);
-  }
-  /**
-   * Checks the change detector and its children, and throws if any changes are detected.
-   *
-   * This is used in development mode to verify that running change detection doesn't
-   * introduce other changes.
-   */
-  checkNoChanges() {
-    if (ngDevMode) {
-      checkNoChangesInternal(this._lView, CheckNoChangesMode.OnlyDirtyViews, this.notifyErrorHandler);
-    }
-  }
-  attachToViewContainerRef() {
-    if (this._appRef) {
-      throw new RuntimeError(902, ngDevMode && "This view is already attached directly to the ApplicationRef!");
-    }
-    this._attachedToViewContainer = true;
-  }
-  detachFromAppRef() {
-    this._appRef = null;
-    const isRoot = isRootView(this._lView);
-    const declarationContainer = this._lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && !isRoot) {
-      detachMovedView(declarationContainer, this._lView);
-    }
-    detachViewFromDOM(this._lView[TVIEW], this._lView);
-  }
-  attachToAppRef(appRef) {
-    if (this._attachedToViewContainer) {
-      throw new RuntimeError(902, ngDevMode && "This view is already attached to a ViewContainer!");
-    }
-    this._appRef = appRef;
-    const isRoot = isRootView(this._lView);
-    const declarationContainer = this._lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && !isRoot) {
-      trackMovedView(declarationContainer, this._lView);
-    }
-    updateAncestorTraversalFlagsOnAttach(this._lView);
-  }
-};
-var TemplateRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectTemplateRef;
-};
-var ViewEngineTemplateRef = TemplateRef;
-var R3TemplateRef = class TemplateRef2 extends ViewEngineTemplateRef {
-  _declarationLView;
-  _declarationTContainer;
-  elementRef;
-  constructor(_declarationLView, _declarationTContainer, elementRef) {
-    super();
-    this._declarationLView = _declarationLView;
-    this._declarationTContainer = _declarationTContainer;
-    this.elementRef = elementRef;
-  }
-  /**
-   * Returns an `ssrId` associated with a TView, which was used to
-   * create this instance of the `TemplateRef`.
-   *
-   * @internal
-   */
-  get ssrId() {
-    return this._declarationTContainer.tView?.ssrId || null;
-  }
-  createEmbeddedView(context2, injector) {
-    return this.createEmbeddedViewImpl(context2, injector);
-  }
-  /**
-   * @internal
-   */
-  createEmbeddedViewImpl(context2, injector, dehydratedView) {
-    const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context2, {
-      embeddedViewInjector: injector,
-      dehydratedView
-    });
-    return new ViewRef$1(embeddedLView);
-  }
-};
-function injectTemplateRef() {
-  return createTemplateRef(getCurrentTNode(), getLView());
-}
-function createTemplateRef(hostTNode, hostLView) {
-  if (hostTNode.type & 4) {
-    ngDevMode && assertDefined(hostTNode.tView, "TView must be allocated");
-    return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));
-  }
-  return null;
-}
-var AT_THIS_LOCATION = "<-- AT THIS LOCATION";
-function getFriendlyStringFromTNodeType(tNodeType) {
-  switch (tNodeType) {
-    case 4:
-      return "view container";
-    case 2:
-      return "element";
-    case 8:
-      return "ng-container";
-    case 32:
-      return "icu";
-    case 64:
-      return "i18n";
-    case 16:
-      return "projection";
-    case 1:
-      return "text";
-    case 128:
-      return "@let";
-    default:
-      return "<unknown>";
-  }
-}
-function validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {
-  if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {
-    const expectedNode = shortRNodeDescription(nodeType, tagName, null);
-    let header = `During hydration Angular expected ${expectedNode} but `;
-    const hostComponentDef = getDeclarationComponentDef(lView);
-    const componentClassName = hostComponentDef?.type?.name;
-    const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);
-    const expected = `Angular expected this DOM:
-
-${expectedDom}
-
-`;
-    let actual = "";
-    const componentHostElement = unwrapRNode(lView[HOST]);
-    if (!node) {
-      header += `the node was not found.
-
-`;
-      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);
-    } else {
-      const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);
-      header += `found ${actualNode}.
-
-`;
-      const actualDom = describeDomFromNode(node);
-      actual = `Actual DOM is:
-
-${actualDom}
-
-`;
-      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);
-    }
-    const footer = getHydrationErrorFooter(componentClassName);
-    const message = header + expected + actual + getHydrationAttributeNote() + footer;
-    throw new RuntimeError(-500, message);
-  }
-}
-function validateSiblingNodeExists(node) {
-  validateNodeExists(node);
-  if (!node.nextSibling) {
-    const header = "During hydration Angular expected more sibling nodes to be present.\n\n";
-    const actual = `Actual DOM is:
-
-${describeDomFromNode(node)}
-
-`;
-    const footer = getHydrationErrorFooter();
-    const message = header + actual + footer;
-    markRNodeAsHavingHydrationMismatch(node, "", actual);
-    throw new RuntimeError(-501, message);
-  }
-}
-function validateNodeExists(node, lView = null, tNode = null) {
-  if (!node) {
-    const header = "During hydration, Angular expected an element to be present at this location.\n\n";
-    let expected = "";
-    let footer = "";
-    if (lView !== null && tNode !== null) {
-      expected = describeExpectedDom(lView, tNode, false);
-      footer = getHydrationErrorFooter();
-      markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, "");
-    }
-    throw new RuntimeError(-502, `${header}${expected}
-
-${footer}`);
-  }
-}
-function nodeNotFoundError(lView, tNode) {
-  const header = "During serialization, Angular was unable to find an element in the DOM:\n\n";
-  const expected = `${describeExpectedDom(lView, tNode, false)}
-
-`;
-  const footer = getHydrationErrorFooter();
-  throw new RuntimeError(-502, header + expected + footer);
-}
-function nodeNotFoundAtPathError(host, path) {
-  const header = `During hydration Angular was unable to locate a node using the "${path}" path, starting from the ${describeRNode(host)} node.
-
-`;
-  const footer = getHydrationErrorFooter();
-  markRNodeAsHavingHydrationMismatch(host);
-  throw new RuntimeError(-502, header + footer);
-}
-function unsupportedProjectionOfDomNodes(rNode) {
-  const header = "During serialization, Angular detected DOM nodes that were created outside of Angular context and provided as projectable nodes (likely via `ViewContainerRef.createComponent` or `createComponent` APIs). Hydration is not supported for such cases, consider refactoring the code to avoid this pattern or using `ngSkipHydration` on the host element of the component.\n\n";
-  const actual = `${describeDomFromNode(rNode)}
-
-`;
-  const message = header + actual + getHydrationAttributeNote();
-  return new RuntimeError(-503, message);
-}
-function invalidSkipHydrationHost(rNode) {
-  const header = "The `ngSkipHydration` flag is applied on a node that doesn't act as a component host. Hydration can be skipped only on per-component basis.\n\n";
-  const actual = `${describeDomFromNode(rNode)}
-
-`;
-  const footer = "Please move the `ngSkipHydration` attribute to the component host element.\n\n";
-  const message = header + actual + footer;
-  return new RuntimeError(-504, message);
-}
-function stringifyTNodeAttrs(tNode) {
-  const results = [];
-  if (tNode.attrs) {
-    for (let i = 0; i < tNode.attrs.length; ) {
-      const attrName = tNode.attrs[i++];
-      if (typeof attrName == "number") {
-        break;
-      }
-      const attrValue = tNode.attrs[i++];
-      results.push(`${attrName}="${shorten(attrValue)}"`);
-    }
-  }
-  return results.join(" ");
-}
-var internalAttrs = /* @__PURE__ */ new Set(["ngh", "ng-version", "ng-server-context"]);
-function stringifyRNodeAttrs(rNode) {
-  const results = [];
-  for (let i = 0; i < rNode.attributes.length; i++) {
-    const attr = rNode.attributes[i];
-    if (internalAttrs.has(attr.name)) continue;
-    results.push(`${attr.name}="${shorten(attr.value)}"`);
-  }
-  return results.join(" ");
-}
-function describeTNode(tNode, innerContent = "…") {
-  switch (tNode.type) {
-    case 1:
-      const content = tNode.value ? `(${tNode.value})` : "";
-      return `#text${content}`;
-    case 2:
-      const attrs = stringifyTNodeAttrs(tNode);
-      const tag = tNode.value.toLowerCase();
-      return `<${tag}${attrs ? " " + attrs : ""}>${innerContent}</${tag}>`;
-    case 8:
-      return "<!-- ng-container -->";
-    case 4:
-      return "<!-- container -->";
-    default:
-      const typeAsString = getFriendlyStringFromTNodeType(tNode.type);
-      return `#node(${typeAsString})`;
-  }
-}
-function describeRNode(rNode, innerContent = "…") {
-  const node = rNode;
-  switch (node.nodeType) {
-    case Node.ELEMENT_NODE:
-      const tag = node.tagName.toLowerCase();
-      const attrs = stringifyRNodeAttrs(node);
-      return `<${tag}${attrs ? " " + attrs : ""}>${innerContent}</${tag}>`;
-    case Node.TEXT_NODE:
-      const content = node.textContent ? shorten(node.textContent) : "";
-      return `#text${content ? `(${content})` : ""}`;
-    case Node.COMMENT_NODE:
-      return `<!-- ${shorten(node.textContent ?? "")} -->`;
-    default:
-      return `#node(${node.nodeType})`;
-  }
-}
-function describeExpectedDom(lView, tNode, isViewContainerAnchor) {
-  const spacer = "  ";
-  let content = "";
-  if (tNode.prev) {
-    content += spacer + "…\n";
-    content += spacer + describeTNode(tNode.prev) + "\n";
-  } else if (tNode.type && tNode.type & 12) {
-    content += spacer + "…\n";
-  }
-  if (isViewContainerAnchor) {
-    content += spacer + describeTNode(tNode) + "\n";
-    content += spacer + `<!-- container -->  ${AT_THIS_LOCATION}
-`;
-  } else {
-    content += spacer + describeTNode(tNode) + `  ${AT_THIS_LOCATION}
-`;
-  }
-  content += spacer + "…\n";
-  const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;
-  if (parentRNode) {
-    content = describeRNode(parentRNode, "\n" + content);
-  }
-  return content;
-}
-function describeDomFromNode(node) {
-  const spacer = "  ";
-  let content = "";
-  const currentNode = node;
-  if (currentNode.previousSibling) {
-    content += spacer + "…\n";
-    content += spacer + describeRNode(currentNode.previousSibling) + "\n";
-  }
-  content += spacer + describeRNode(currentNode) + `  ${AT_THIS_LOCATION}
-`;
-  if (node.nextSibling) {
-    content += spacer + "…\n";
-  }
-  if (node.parentNode) {
-    content = describeRNode(currentNode.parentNode, "\n" + content);
-  }
-  return content;
-}
-function shortRNodeDescription(nodeType, tagName, textContent) {
-  switch (nodeType) {
-    case Node.ELEMENT_NODE:
-      return `<${tagName.toLowerCase()}>`;
-    case Node.TEXT_NODE:
-      const content = textContent ? ` (with the "${shorten(textContent)}" content)` : "";
-      return `a text node${content}`;
-    case Node.COMMENT_NODE:
-      return "a comment node";
-    default:
-      return `#node(nodeType=${nodeType})`;
-  }
-}
-function getHydrationErrorFooter(componentClassName) {
-  const componentInfo = componentClassName ? `the "${componentClassName}"` : "corresponding";
-  return `To fix this problem:
-  * check ${componentInfo} component for hydration-related issues
-  * check to see if your template has valid HTML structure
-  * or skip hydration by adding the \`ngSkipHydration\` attribute to its host node in a template
-
-`;
-}
-function getHydrationAttributeNote() {
-  return "Note: attributes are only displayed to better represent the DOM but have no effect on hydration mismatches.\n\n";
-}
-function stripNewlines(input2) {
-  return input2.replace(/\s+/gm, "");
-}
-function shorten(input2, maxLength = 50) {
-  if (!input2) {
-    return "";
-  }
-  input2 = stripNewlines(input2);
-  return input2.length > maxLength ? `${input2.substring(0, maxLength - 1)}…` : input2;
-}
-function getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {
-  const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;
-  const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;
-  if (insertBeforeIndex === null) {
-    return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);
-  } else {
-    ngDevMode && assertIndexInRange(lView, insertBeforeIndex);
-    return unwrapRNode(lView[insertBeforeIndex]);
-  }
-}
-function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {
-  const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;
-  if (Array.isArray(tNodeInsertBeforeIndex)) {
-    ngDevMode && assertDomNode(childRNode);
-    let i18nParent = childRNode;
-    let anchorRNode = null;
-    if (!(childTNode.type & 3)) {
-      anchorRNode = i18nParent;
-      i18nParent = parentRElement;
-    }
-    if (i18nParent !== null && childTNode.componentOffset === -1) {
-      for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {
-        const i18nChild = lView[tNodeInsertBeforeIndex[i]];
-        nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);
-      }
-    }
-  }
-}
-function addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {
-  ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, "We expect that insertBeforeIndex is not set");
-  previousTNodes.push(newTNode);
-  if (previousTNodes.length > 1) {
-    for (let i = previousTNodes.length - 2; i >= 0; i--) {
-      const existingTNode = previousTNodes[i];
-      if (!isI18nText(existingTNode)) {
-        if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {
-          setInsertBeforeIndex(existingTNode, newTNode.index);
-        }
-      }
-    }
-  }
-}
-function isI18nText(tNode) {
-  return !(tNode.type & 64);
-}
-function isNewTNodeCreatedBefore(existingTNode, newTNode) {
-  return isI18nText(newTNode) || existingTNode.index > newTNode.index;
-}
-function getInsertBeforeIndex(tNode) {
-  const index = tNode.insertBeforeIndex;
-  return Array.isArray(index) ? index[0] : index;
-}
-function setInsertBeforeIndex(tNode, value) {
-  const index = tNode.insertBeforeIndex;
-  if (Array.isArray(index)) {
-    index[0] = value;
-  } else {
-    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
-    tNode.insertBeforeIndex = value;
-  }
-}
-function getTIcu(tView, index) {
-  const value = tView.data[index];
-  if (value === null || typeof value === "string") return null;
-  if (ngDevMode && !(value.hasOwnProperty("tView") || value.hasOwnProperty("currentCaseLViewIndex"))) {
-    throwError2("We expect to get 'null'|'TIcu'|'TIcuContainer', but got: " + value);
-  }
-  const tIcu = value.hasOwnProperty("currentCaseLViewIndex") ? value : value.value;
-  ngDevMode && assertTIcu(tIcu);
-  return tIcu;
-}
-function setTIcu(tView, index, tIcu) {
-  const tNode = tView.data[index];
-  ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty("tView"), true, "We expect to get 'null'|'TIcuContainer'");
-  if (tNode === null) {
-    tView.data[index] = tIcu;
-  } else {
-    ngDevMode && assertTNodeType(
-      tNode,
-      32
-      /* TNodeType.Icu */
-    );
-    tNode.value = tIcu;
-  }
-}
-function setTNodeInsertBeforeIndex(tNode, index) {
-  ngDevMode && assertTNode(tNode);
-  let insertBeforeIndex = tNode.insertBeforeIndex;
-  if (insertBeforeIndex === null) {
-    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
-    insertBeforeIndex = tNode.insertBeforeIndex = [null, index];
-  } else {
-    assertEqual(Array.isArray(insertBeforeIndex), true, "Expecting array here");
-    insertBeforeIndex.push(index);
-  }
-}
-function createTNodePlaceholder(tView, previousTNodes, index) {
-  const tNode = createTNodeAtIndex(tView, index, 64, null, null);
-  addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);
-  return tNode;
-}
-function getCurrentICUCaseIndex(tIcu, lView) {
-  const currentCase = lView[tIcu.currentCaseLViewIndex];
-  return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;
-}
-function getParentFromIcuCreateOpCode(mergedCode) {
-  return mergedCode >>> 17;
-}
-function getRefFromIcuCreateOpCode(mergedCode) {
-  return (mergedCode & 131070) >>> 1;
-}
-function getInstructionFromIcuCreateOpCode(mergedCode) {
-  return mergedCode & 1;
-}
-function icuCreateOpCode(opCode, parentIdx, refIdx) {
-  ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, "Missing parent index");
-  ngDevMode && assertGreaterThan(refIdx, 0, "Missing ref index");
-  return opCode | parentIdx << 17 | refIdx << 1;
-}
-function isRootTemplateMessage(subTemplateIndex) {
-  return subTemplateIndex === -1;
-}
-function enterIcu(state, tIcu, lView) {
-  state.index = 0;
-  const currentCase = getCurrentICUCaseIndex(tIcu, lView);
-  if (currentCase !== null) {
-    ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
-    state.removes = tIcu.remove[currentCase];
-  } else {
-    state.removes = EMPTY_ARRAY;
-  }
-}
-function icuContainerIteratorNext(state) {
-  if (state.index < state.removes.length) {
-    const removeOpCode = state.removes[state.index++];
-    ngDevMode && assertNumber(removeOpCode, "Expecting OpCode number");
-    if (removeOpCode > 0) {
-      const rNode = state.lView[removeOpCode];
-      ngDevMode && assertDomNode(rNode);
-      return rNode;
-    } else {
-      state.stack.push(state.index, state.removes);
-      const tIcuIndex = ~removeOpCode;
-      const tIcu = state.lView[TVIEW].data[tIcuIndex];
-      ngDevMode && assertTIcu(tIcu);
-      enterIcu(state, tIcu, state.lView);
-      return icuContainerIteratorNext(state);
-    }
-  } else {
-    if (state.stack.length === 0) {
-      return null;
-    } else {
-      state.removes = state.stack.pop();
-      state.index = state.stack.pop();
-      return icuContainerIteratorNext(state);
-    }
-  }
-}
-function loadIcuContainerVisitor() {
-  const _state = {
-    stack: [],
-    index: -1
-  };
-  function icuContainerIteratorStart(tIcuContainerNode, lView) {
-    _state.lView = lView;
-    while (_state.stack.length) _state.stack.pop();
-    ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
-    enterIcu(_state, tIcuContainerNode.value, lView);
-    return icuContainerIteratorNext.bind(null, _state);
-  }
-  return icuContainerIteratorStart;
-}
-function createIcuIterator(tIcu, lView) {
-  const state = {
-    stack: [],
-    index: -1,
-    lView
-  };
-  ngDevMode && assertTIcu(tIcu);
-  enterIcu(state, tIcu, lView);
-  return icuContainerIteratorNext.bind(null, state);
-}
-var REF_EXTRACTOR_REGEXP = new RegExp(`^(\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);
-function compressNodeLocation(referenceNode, path) {
-  const result = [referenceNode];
-  for (const segment of path) {
-    const lastIdx = result.length - 1;
-    if (lastIdx > 0 && result[lastIdx - 1] === segment) {
-      const value = result[lastIdx] || 1;
-      result[lastIdx] = value + 1;
-    } else {
-      result.push(segment, "");
-    }
-  }
-  return result.join("");
-}
-function decompressNodeLocation(path) {
-  const matches = path.match(REF_EXTRACTOR_REGEXP);
-  const [_, refNodeId, refNodeName, rest] = matches;
-  const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;
-  const steps = [];
-  for (const [_2, step, count2] of rest.matchAll(/(f|n)(\d*)/g)) {
-    const repeat2 = parseInt(count2, 10) || 1;
-    steps.push(step, repeat2);
-  }
-  return [ref, ...steps];
-}
-function isFirstElementInNgContainer(tNode) {
-  return !tNode.prev && tNode.parent?.type === 8;
-}
-function getNoOffsetIndex(tNode) {
-  return tNode.index - HEADER_OFFSET;
-}
-function isDisconnectedNode(tNode, lView) {
-  return !(tNode.type & (16 | 128)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));
-}
-function isDisconnectedRNode(rNode) {
-  return !!rNode && !rNode.isConnected;
-}
-function locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {
-  const i18nNodes = hydrationInfo.i18nNodes;
-  if (i18nNodes) {
-    return i18nNodes.get(noOffsetIndex);
-  }
-  return void 0;
-}
-function tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {
-  const nodes = hydrationInfo.data[NODES];
-  const path = nodes?.[noOffsetIndex];
-  return path ? locateRNodeByPath(path, lView) : null;
-}
-function locateNextRNode(hydrationInfo, tView, lView, tNode) {
-  const noOffsetIndex = getNoOffsetIndex(tNode);
-  let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);
-  if (native === void 0) {
-    const nodes = hydrationInfo.data[NODES];
-    if (nodes?.[noOffsetIndex]) {
-      native = locateRNodeByPath(nodes[noOffsetIndex], lView);
-    } else if (tView.firstChild === tNode) {
-      native = hydrationInfo.firstChild;
-    } else {
-      const previousTNodeParent = tNode.prev === null;
-      const previousTNode = tNode.prev ?? tNode.parent;
-      ngDevMode && assertDefined(previousTNode, "Unexpected state: current TNode does not have a connection to the previous node or a parent node.");
-      if (isFirstElementInNgContainer(tNode)) {
-        const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);
-        native = getSegmentHead(hydrationInfo, noOffsetParentIndex);
-      } else {
-        let previousRElement = getNativeByTNode(previousTNode, lView);
-        if (previousTNodeParent) {
-          native = previousRElement.firstChild;
-        } else {
-          const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);
-          const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);
-          if (previousTNode.type === 2 && segmentHead) {
-            const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);
-            const nodesToSkip = numRootNodesToSkip + 1;
-            native = siblingAfter(nodesToSkip, segmentHead);
-          } else {
-            native = previousRElement.nextSibling;
-          }
-        }
-      }
-    }
-  }
-  return native;
-}
-function siblingAfter(skip2, from2) {
-  let currentNode = from2;
-  for (let i = 0; i < skip2; i++) {
-    ngDevMode && validateSiblingNodeExists(currentNode);
-    currentNode = currentNode.nextSibling;
-  }
-  return currentNode;
-}
-function stringifyNavigationInstructions(instructions) {
-  const container = [];
-  for (let i = 0; i < instructions.length; i += 2) {
-    const step = instructions[i];
-    const repeat2 = instructions[i + 1];
-    for (let r = 0; r < repeat2; r++) {
-      container.push(step === NodeNavigationStep.FirstChild ? "firstChild" : "nextSibling");
-    }
-  }
-  return container.join(".");
-}
-function navigateToNode(from2, instructions) {
-  let node = from2;
-  for (let i = 0; i < instructions.length; i += 2) {
-    const step = instructions[i];
-    const repeat2 = instructions[i + 1];
-    for (let r = 0; r < repeat2; r++) {
-      if (ngDevMode && !node) {
-        throw nodeNotFoundAtPathError(from2, stringifyNavigationInstructions(instructions));
-      }
-      switch (step) {
-        case NodeNavigationStep.FirstChild:
-          node = node.firstChild;
-          break;
-        case NodeNavigationStep.NextSibling:
-          node = node.nextSibling;
-          break;
-      }
-    }
-  }
-  if (ngDevMode && !node) {
-    throw nodeNotFoundAtPathError(from2, stringifyNavigationInstructions(instructions));
-  }
-  return node;
-}
-function locateRNodeByPath(path, lView) {
-  const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);
-  let ref;
-  if (referenceNode === REFERENCE_NODE_HOST) {
-    ref = lView[DECLARATION_COMPONENT_VIEW][HOST];
-  } else if (referenceNode === REFERENCE_NODE_BODY) {
-    ref = ɵɵresolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);
-  } else {
-    const parentElementId = Number(referenceNode);
-    ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);
-  }
-  return navigateToNode(ref, navigationInstructions);
-}
-function navigateBetween(start, finish) {
-  if (start === finish) {
-    return [];
-  } else if (start.parentElement == null || finish.parentElement == null) {
-    return null;
-  } else if (start.parentElement === finish.parentElement) {
-    return navigateBetweenSiblings(start, finish);
-  } else {
-    const parent = finish.parentElement;
-    const parentPath = navigateBetween(start, parent);
-    const childPath = navigateBetween(parent.firstChild, finish);
-    if (!parentPath || !childPath) return null;
-    return [
-      // First navigate to `finish`'s parent
-      ...parentPath,
-      // Then to its first child.
-      NodeNavigationStep.FirstChild,
-      // And finally from that node to `finish` (maybe a no-op if we're already there).
-      ...childPath
-    ];
-  }
-}
-function navigateBetweenSiblings(start, finish) {
-  const nav = [];
-  let node = null;
-  for (node = start; node != null && node !== finish; node = node.nextSibling) {
-    nav.push(NodeNavigationStep.NextSibling);
-  }
-  return node == null ? null : nav;
-}
-function calcPathBetween(from2, to, fromNodeName) {
-  const path = navigateBetween(from2, to);
-  return path === null ? null : compressNodeLocation(fromNodeName, path);
-}
-function calcPathForNode(tNode, lView, excludedParentNodes) {
-  let parentTNode = tNode.parent;
-  let parentIndex;
-  let parentRNode;
-  let referenceNodeName;
-  while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {
-    parentTNode = parentTNode.parent;
-  }
-  if (parentTNode === null || !(parentTNode.type & 3)) {
-    parentIndex = referenceNodeName = REFERENCE_NODE_HOST;
-    parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];
-  } else {
-    parentIndex = parentTNode.index;
-    parentRNode = unwrapRNode(lView[parentIndex]);
-    referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);
-  }
-  let rNode = unwrapRNode(lView[tNode.index]);
-  if (tNode.type & (12 | 32)) {
-    const firstRNode = getFirstNativeNode(lView, tNode);
-    if (firstRNode) {
-      rNode = firstRNode;
-    }
-  }
-  let path = calcPathBetween(parentRNode, rNode, referenceNodeName);
-  if (path === null && parentRNode !== rNode) {
-    const body = parentRNode.ownerDocument.body;
-    path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);
-    if (path === null) {
-      throw nodeNotFoundError(lView, tNode);
-    }
-  }
-  return path;
-}
-function gatherDeferBlocksCommentNodes(doc, node) {
-  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {
-    acceptNode
-  });
-  let currentNode;
-  const nodesByBlockId = /* @__PURE__ */ new Map();
-  while (currentNode = commentNodesIterator.nextNode()) {
-    const nghPattern = "ngh=";
-    const content = currentNode?.textContent;
-    const nghIdx = content?.indexOf(nghPattern) ?? -1;
-    if (nghIdx > -1) {
-      const nghValue = content.substring(nghIdx + nghPattern.length).trim();
-      ngDevMode && assertEqual(nghValue.startsWith("d"), true, "Invalid defer block id found in a comment node.");
-      nodesByBlockId.set(nghValue, currentNode);
-    }
-  }
-  return nodesByBlockId;
-}
-function acceptNode(node) {
-  return node.textContent?.trimStart().startsWith("ngh=") ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
-}
-var _isI18nHydrationSupportEnabled = false;
-var _prepareI18nBlockForHydrationImpl = () => {
-};
-function setIsI18nHydrationSupportEnabled(enabled) {
-  _isI18nHydrationSupportEnabled = enabled;
-}
-function isI18nHydrationSupportEnabled() {
-  return _isI18nHydrationSupportEnabled;
-}
-function prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {
-  _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);
-}
-function enablePrepareI18nBlockForHydrationImpl() {
-  _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;
-}
-function isI18nHydrationEnabled(injector) {
-  injector = injector ?? inject(Injector);
-  return injector.get(IS_I18N_HYDRATION_ENABLED, false);
-}
-function getOrComputeI18nChildren(tView, context2) {
-  let i18nChildren = context2.i18nChildren.get(tView);
-  if (i18nChildren === void 0) {
-    i18nChildren = collectI18nChildren(tView);
-    context2.i18nChildren.set(tView, i18nChildren);
-  }
-  return i18nChildren;
-}
-function collectI18nChildren(tView) {
-  const children = /* @__PURE__ */ new Set();
-  function collectI18nViews(node) {
-    children.add(node.index);
-    switch (node.kind) {
-      case 1:
-      case 2: {
-        for (const childNode of node.children) {
-          collectI18nViews(childNode);
-        }
-        break;
-      }
-      case 3: {
-        for (const caseNodes of node.cases) {
-          for (const caseNode of caseNodes) {
-            collectI18nViews(caseNode);
-          }
-        }
-        break;
-      }
-    }
-  }
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const tI18n = tView.data[i];
-    if (!tI18n || !tI18n.ast) {
-      continue;
-    }
-    for (const node of tI18n.ast) {
-      collectI18nViews(node);
-    }
-  }
-  return children.size === 0 ? null : children;
-}
-function trySerializeI18nBlock(lView, index, context2) {
-  if (!context2.isI18nHydrationEnabled) {
-    return null;
-  }
-  const tView = lView[TVIEW];
-  const tI18n = tView.data[index];
-  if (!tI18n || !tI18n.ast) {
-    return null;
-  }
-  const parentTNode = tView.data[tI18n.parentTNodeIndex];
-  if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {
-    return null;
-  }
-  const serializedI18nBlock = {
-    caseQueue: [],
-    disconnectedNodes: /* @__PURE__ */ new Set(),
-    disjointNodes: /* @__PURE__ */ new Set()
-  };
-  serializeI18nBlock(lView, serializedI18nBlock, context2, tI18n.ast);
-  return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;
-}
-function serializeI18nBlock(lView, serializedI18nBlock, context2, nodes) {
-  let prevRNode = null;
-  for (const node of nodes) {
-    const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context2, node);
-    if (nextRNode) {
-      if (isDisjointNode(prevRNode, nextRNode)) {
-        serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);
-      }
-      prevRNode = nextRNode;
-    }
-  }
-  return prevRNode;
-}
-function isDisjointNode(prevNode, nextNode) {
-  return prevNode && prevNode.nextSibling !== nextNode;
-}
-function serializeI18nNode(lView, serializedI18nBlock, context2, node) {
-  const maybeRNode = unwrapRNode(lView[node.index]);
-  if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {
-    serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);
-    return null;
-  }
-  const rNode = maybeRNode;
-  switch (node.kind) {
-    case 0: {
-      processTextNodeBeforeSerialization(context2, rNode);
-      break;
-    }
-    case 1:
-    case 2: {
-      serializeI18nBlock(lView, serializedI18nBlock, context2, node.children);
-      break;
-    }
-    case 3: {
-      const currentCase = lView[node.currentCaseLViewIndex];
-      if (currentCase != null) {
-        const caseIdx = currentCase < 0 ? ~currentCase : currentCase;
-        serializedI18nBlock.caseQueue.push(caseIdx);
-        serializeI18nBlock(lView, serializedI18nBlock, context2, node.cases[caseIdx]);
-      }
-      break;
-    }
-  }
-  return getFirstNativeNodeForI18nNode(lView, node);
-}
-function getFirstNativeNodeForI18nNode(lView, node) {
-  const tView = lView[TVIEW];
-  const maybeTNode = tView.data[node.index];
-  if (isTNodeShape(maybeTNode)) {
-    return getFirstNativeNode(lView, maybeTNode);
-  } else if (node.kind === 3) {
-    const icuIterator = createIcuIterator(maybeTNode, lView);
-    let rNode = icuIterator();
-    return rNode ?? unwrapRNode(lView[node.index]);
-  } else {
-    return unwrapRNode(lView[node.index]) ?? null;
-  }
-}
-function setCurrentNode(state, node) {
-  state.currentNode = node;
-}
-function appendI18nNodeToCollection(context2, state, astNode) {
-  const noOffsetIndex = astNode.index - HEADER_OFFSET;
-  const {
-    disconnectedNodes
-  } = context2;
-  const currentNode = state.currentNode;
-  if (state.isConnected) {
-    context2.i18nNodes.set(noOffsetIndex, currentNode);
-    disconnectedNodes.delete(noOffsetIndex);
-  } else {
-    disconnectedNodes.add(noOffsetIndex);
-  }
-  return currentNode;
-}
-function skipSiblingNodes(state, skip2) {
-  let currentNode = state.currentNode;
-  for (let i = 0; i < skip2; i++) {
-    if (!currentNode) {
-      break;
-    }
-    currentNode = currentNode?.nextSibling ?? null;
-  }
-  return currentNode;
-}
-function forkHydrationState(state, nextNode) {
-  return {
-    currentNode: nextNode,
-    isConnected: state.isConnected
-  };
-}
-function prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {
-  const hydrationInfo = lView[HYDRATION];
-  if (!hydrationInfo) {
-    return;
-  }
-  if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {
-    return;
-  }
-  const tView = lView[TVIEW];
-  const tI18n = tView.data[index];
-  ngDevMode && assertDefined(tI18n, "Expected i18n data to be present in a given TView slot during hydration");
-  function findHydrationRoot() {
-    if (isRootTemplateMessage(subTemplateIndex)) {
-      ngDevMode && assertDefined(parentTNode, "Expected parent TNode while hydrating i18n root");
-      const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);
-      return parentTNode.type & 8 ? rootNode : rootNode.firstChild;
-    }
-    return hydrationInfo?.firstChild;
-  }
-  const currentNode = findHydrationRoot();
-  ngDevMode && assertDefined(currentNode, "Expected root i18n node during hydration");
-  const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? /* @__PURE__ */ new Set();
-  const i18nNodes = hydrationInfo.i18nNodes ??= /* @__PURE__ */ new Map();
-  const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];
-  const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= /* @__PURE__ */ new Map();
-  collectI18nNodesFromDom({
-    hydrationInfo,
-    lView,
-    i18nNodes,
-    disconnectedNodes,
-    caseQueue,
-    dehydratedIcuData
-  }, {
-    currentNode,
-    isConnected: true
-  }, tI18n.ast);
-  hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;
-}
-function collectI18nNodesFromDom(context2, state, nodeOrNodes) {
-  if (Array.isArray(nodeOrNodes)) {
-    let nextState = state;
-    for (const node of nodeOrNodes) {
-      const targetNode = tryLocateRNodeByPath(context2.hydrationInfo, context2.lView, node.index - HEADER_OFFSET);
-      if (targetNode) {
-        nextState = forkHydrationState(state, targetNode);
-      }
-      collectI18nNodesFromDom(context2, nextState, node);
-    }
-  } else {
-    if (context2.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {
-      return;
-    }
-    switch (nodeOrNodes.kind) {
-      case 0: {
-        const currentNode = appendI18nNodeToCollection(context2, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-      case 1: {
-        collectI18nNodesFromDom(context2, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);
-        const currentNode = appendI18nNodeToCollection(context2, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-      case 2: {
-        const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;
-        const {
-          hydrationInfo
-        } = context2;
-        const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);
-        switch (nodeOrNodes.type) {
-          case 0: {
-            const currentNode = appendI18nNodeToCollection(context2, state, nodeOrNodes);
-            if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {
-              collectI18nNodesFromDom(context2, state, nodeOrNodes.children);
-              const nextNode = skipSiblingNodes(state, 1);
-              setCurrentNode(state, nextNode);
-            } else {
-              collectI18nNodesFromDom(context2, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);
-              setCurrentNode(state, currentNode?.nextSibling ?? null);
-              if (containerSize !== null) {
-                const nextNode = skipSiblingNodes(state, containerSize + 1);
-                setCurrentNode(state, nextNode);
-              }
-            }
-            break;
-          }
-          case 1: {
-            ngDevMode && assertNotEqual(containerSize, null, "Expected a container size while hydrating i18n subtemplate");
-            appendI18nNodeToCollection(context2, state, nodeOrNodes);
-            const nextNode = skipSiblingNodes(state, containerSize + 1);
-            setCurrentNode(state, nextNode);
-            break;
-          }
-        }
-        break;
-      }
-      case 3: {
-        const selectedCase = state.isConnected ? context2.caseQueue.shift() : null;
-        const childState = {
-          currentNode: null,
-          isConnected: false
-        };
-        for (let i = 0; i < nodeOrNodes.cases.length; i++) {
-          collectI18nNodesFromDom(context2, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);
-        }
-        if (selectedCase !== null) {
-          context2.dehydratedIcuData.set(nodeOrNodes.index, {
-            case: selectedCase,
-            node: nodeOrNodes
-          });
-        }
-        const currentNode = appendI18nNodeToCollection(context2, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-    }
-  }
-}
-var _claimDehydratedIcuCaseImpl = () => {
-};
-function claimDehydratedIcuCase(lView, icuIndex, caseIndex) {
-  _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);
-}
-function enableClaimDehydratedIcuCaseImpl() {
-  _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;
-}
-function claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {
-  const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;
-  if (dehydratedIcuDataMap) {
-    const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);
-    if (dehydratedIcuData?.case === caseIndex) {
-      dehydratedIcuDataMap.delete(icuIndex);
-    }
-  }
-}
-function cleanupI18nHydrationData(lView) {
-  const hydrationInfo = lView[HYDRATION];
-  if (hydrationInfo) {
-    const {
-      i18nNodes,
-      dehydratedIcuData: dehydratedIcuDataMap
-    } = hydrationInfo;
-    if (i18nNodes && dehydratedIcuDataMap) {
-      const renderer = lView[RENDERER];
-      for (const dehydratedIcuData of dehydratedIcuDataMap.values()) {
-        cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData);
-      }
-    }
-    hydrationInfo.i18nNodes = void 0;
-    hydrationInfo.dehydratedIcuData = void 0;
-  }
-}
-function cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData) {
-  for (const node of dehydratedIcuData.node.cases[dehydratedIcuData.case]) {
-    const rNode = i18nNodes.get(node.index - HEADER_OFFSET);
-    if (rNode) {
-      nativeRemoveNode(renderer, rNode, false);
-    }
-  }
-}
-function removeDehydratedViews(lContainer) {
-  const views = lContainer[DEHYDRATED_VIEWS] ?? [];
-  const parentLView = lContainer[PARENT];
-  const renderer = parentLView[RENDERER];
-  const retainedViews = [];
-  for (const view of views) {
-    if (view.data[DEFER_BLOCK_ID] !== void 0) {
-      retainedViews.push(view);
-    } else {
-      removeDehydratedView(view, renderer);
-      ngDevMode && ngDevMode.dehydratedViewsRemoved++;
-    }
-  }
-  lContainer[DEHYDRATED_VIEWS] = retainedViews;
-}
-function removeDehydratedView(dehydratedView, renderer) {
-  let nodesRemoved = 0;
-  let currentRNode = dehydratedView.firstChild;
-  if (currentRNode) {
-    const numNodes = dehydratedView.data[NUM_ROOT_NODES];
-    while (nodesRemoved < numNodes) {
-      ngDevMode && validateSiblingNodeExists(currentRNode);
-      const nextSibling = currentRNode.nextSibling;
-      nativeRemoveNode(renderer, currentRNode, false);
-      currentRNode = nextSibling;
-      nodesRemoved++;
-    }
-  }
-}
-function cleanupLContainer(lContainer) {
-  removeDehydratedViews(lContainer);
-  const hostLView = lContainer[HOST];
-  if (isLView(hostLView)) {
-    cleanupLView(hostLView);
-  }
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    cleanupLView(lContainer[i]);
-  }
-}
-function cleanupLView(lView) {
-  cleanupI18nHydrationData(lView);
-  const tView = lView[TVIEW];
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    if (isLContainer(lView[i])) {
-      const lContainer = lView[i];
-      cleanupLContainer(lContainer);
-    } else if (isLView(lView[i])) {
-      cleanupLView(lView[i]);
-    }
-  }
-}
-function cleanupDehydratedViews(appRef) {
-  const viewRefs = appRef._views;
-  for (const viewRef of viewRefs) {
-    const lNode = getLNodeForHydration(viewRef);
-    if (lNode !== null && lNode[HOST] !== null) {
-      if (isLView(lNode)) {
-        cleanupLView(lNode);
-      } else {
-        cleanupLContainer(lNode);
-      }
-      ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;
-    }
-  }
-}
-function cleanupHydratedDeferBlocks(deferBlock, hydratedBlocks, registry, appRef) {
-  if (deferBlock !== null) {
-    registry.cleanup(hydratedBlocks);
-    cleanupLContainer(deferBlock.lContainer);
-    cleanupDehydratedViews(appRef);
-  }
-}
-function locateDehydratedViewsInContainer(currentRNode, serializedViews) {
-  const dehydratedViews = [];
-  for (const serializedView of serializedViews) {
-    for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {
-      const view = {
-        data: serializedView,
-        firstChild: null
-      };
-      if (serializedView[NUM_ROOT_NODES] > 0) {
-        view.firstChild = currentRNode;
-        currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);
-      }
-      dehydratedViews.push(view);
-    }
-  }
-  return [currentRNode, dehydratedViews];
-}
-var _findMatchingDehydratedViewImpl = () => null;
-function findMatchingDehydratedViewImpl(lContainer, template) {
-  const views = lContainer[DEHYDRATED_VIEWS];
-  if (!template || views === null || views.length === 0) {
-    return null;
-  }
-  const view = views[0];
-  if (view.data[TEMPLATE_ID] === template) {
-    return views.shift();
-  } else {
-    removeDehydratedViews(lContainer);
-    return null;
-  }
-}
-function enableFindMatchingDehydratedViewImpl() {
-  _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;
-}
-function findMatchingDehydratedView(lContainer, template) {
-  return _findMatchingDehydratedViewImpl(lContainer, template);
-}
-var ComponentRef$1 = class {
-};
-var ComponentFactory$1 = class {
-};
-var _NullComponentFactoryResolver = class {
-  resolveComponentFactory(component) {
-    throw Error(`No component factory found for ${stringify(component)}.`);
-  }
-};
-var ComponentFactoryResolver$1 = class {
-  static NULL = new _NullComponentFactoryResolver();
-};
-var RendererFactory2 = class {
-};
-var Renderer2 = class {
-  /**
-   * If null or undefined, the view engine won't call it.
-   * This is used as a performance optimization for production mode.
-   */
-  destroyNode = null;
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = () => injectRenderer2();
-};
-function injectRenderer2() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);
-  return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];
-}
-var Sanitizer = class _Sanitizer {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _Sanitizer,
-      providedIn: "root",
-      factory: () => null
-    })
-  );
-};
-function isModuleWithProviders(value) {
-  return value.ngModule !== void 0;
-}
-function isNgModule(value) {
-  return !!getNgModuleDef(value);
-}
-function isPipe(value) {
-  return !!getPipeDef$1(value);
-}
-function isDirective(value) {
-  return !!getDirectiveDef(value);
-}
-function isComponent(value) {
-  return !!getComponentDef(value);
-}
-function getDependencyTypeForError(type) {
-  if (getComponentDef(type)) return "component";
-  if (getDirectiveDef(type)) return "directive";
-  if (getPipeDef$1(type)) return "pipe";
-  return "type";
-}
-function verifyStandaloneImport(depType, importingType) {
-  if (isForwardRef(depType)) {
-    depType = resolveForwardRef(depType);
-    if (!depType) {
-      throw new Error(`Expected forwardRef function, imported from "${stringifyForError(importingType)}", to return a standalone entity or NgModule but got "${stringifyForError(depType) || depType}".`);
-    }
-  }
-  if (getNgModuleDef(depType) == null) {
-    const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);
-    if (def != null) {
-      if (!def.standalone) {
-        throw new Error(`The "${stringifyForError(depType)}" ${getDependencyTypeForError(depType)}, imported from "${stringifyForError(importingType)}", is not standalone. Did you forget to add the standalone: true flag?`);
-      }
-    } else {
-      if (isModuleWithProviders(depType)) {
-        throw new Error(`A module with providers was imported from "${stringifyForError(importingType)}". Modules with providers are not supported in standalone components imports.`);
-      } else {
-        throw new Error(`The "${stringifyForError(depType)}" type, imported from "${stringifyForError(importingType)}", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);
-      }
-    }
-  }
-}
-var USE_RUNTIME_DEPS_TRACKER_FOR_JIT = true;
-var DepsTracker = class {
-  ownerNgModule = /* @__PURE__ */ new Map();
-  ngModulesWithSomeUnresolvedDecls = /* @__PURE__ */ new Set();
-  ngModulesScopeCache = /* @__PURE__ */ new Map();
-  standaloneComponentsScopeCache = /* @__PURE__ */ new Map();
-  /**
-   * Attempts to resolve ng module's forward ref declarations as much as possible and add them to
-   * the `ownerNgModule` map. This method normally should be called after the initial parsing when
-   * all the forward refs are resolved (e.g., when trying to render a component)
-   */
-  resolveNgModulesDecls() {
-    if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {
-      return;
-    }
-    for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {
-      const def = getNgModuleDef(moduleType);
-      if (def?.declarations) {
-        for (const decl of maybeUnwrapFn(def.declarations)) {
-          if (isComponent(decl)) {
-            this.ownerNgModule.set(decl, moduleType);
-          }
-        }
-      }
-    }
-    this.ngModulesWithSomeUnresolvedDecls.clear();
-  }
-  /** @override */
-  getComponentDependencies(type, rawImports) {
-    this.resolveNgModulesDecls();
-    const def = getComponentDef(type);
-    if (def === null) {
-      throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);
-    }
-    if (def.standalone) {
-      const scope = this.getStandaloneComponentScope(type, rawImports);
-      if (scope.compilation.isPoisoned) {
-        return {
-          dependencies: []
-        };
-      }
-      return {
-        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]
-      };
-    } else {
-      if (!this.ownerNgModule.has(type)) {
-        return {
-          dependencies: []
-        };
-      }
-      const scope = this.getNgModuleScope(this.ownerNgModule.get(type));
-      if (scope.compilation.isPoisoned) {
-        return {
-          dependencies: []
-        };
-      }
-      return {
-        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]
-      };
-    }
-  }
-  /**
-   * @override
-   * This implementation does not make use of param scopeInfo since it assumes the scope info is
-   * already added to the type itself through methods like {@link ɵɵsetNgModuleScope}
-   */
-  registerNgModule(type, scopeInfo) {
-    if (!isNgModule(type)) {
-      throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);
-    }
-    this.ngModulesWithSomeUnresolvedDecls.add(type);
-  }
-  /** @override */
-  clearScopeCacheFor(type) {
-    this.ngModulesScopeCache.delete(type);
-    this.standaloneComponentsScopeCache.delete(type);
-  }
-  /** @override */
-  getNgModuleScope(type) {
-    if (this.ngModulesScopeCache.has(type)) {
-      return this.ngModulesScopeCache.get(type);
-    }
-    const scope = this.computeNgModuleScope(type);
-    this.ngModulesScopeCache.set(type, scope);
-    return scope;
-  }
-  /** Compute NgModule scope afresh. */
-  computeNgModuleScope(type) {
-    const def = getNgModuleDef(type, true);
-    const scope = {
-      exported: {
-        directives: /* @__PURE__ */ new Set(),
-        pipes: /* @__PURE__ */ new Set()
-      },
-      compilation: {
-        directives: /* @__PURE__ */ new Set(),
-        pipes: /* @__PURE__ */ new Set()
-      }
-    };
-    for (const imported of maybeUnwrapFn(def.imports)) {
-      if (isNgModule(imported)) {
-        const importedScope = this.getNgModuleScope(imported);
-        addSet(importedScope.exported.directives, scope.compilation.directives);
-        addSet(importedScope.exported.pipes, scope.compilation.pipes);
-      } else if (isStandalone(imported)) {
-        if (isDirective(imported) || isComponent(imported)) {
-          scope.compilation.directives.add(imported);
-        } else if (isPipe(imported)) {
-          scope.compilation.pipes.add(imported);
-        } else {
-          throw new RuntimeError(980, "The standalone imported type is neither a component nor a directive nor a pipe");
-        }
-      } else {
-        scope.compilation.isPoisoned = true;
-        break;
-      }
-    }
-    if (!scope.compilation.isPoisoned) {
-      for (const decl of maybeUnwrapFn(def.declarations)) {
-        if (isNgModule(decl) || isStandalone(decl)) {
-          scope.compilation.isPoisoned = true;
-          break;
-        }
-        if (isPipe(decl)) {
-          scope.compilation.pipes.add(decl);
-        } else {
-          scope.compilation.directives.add(decl);
-        }
-      }
-    }
-    for (const exported of maybeUnwrapFn(def.exports)) {
-      if (isNgModule(exported)) {
-        const exportedScope = this.getNgModuleScope(exported);
-        addSet(exportedScope.exported.directives, scope.exported.directives);
-        addSet(exportedScope.exported.pipes, scope.exported.pipes);
-        addSet(exportedScope.exported.directives, scope.compilation.directives);
-        addSet(exportedScope.exported.pipes, scope.compilation.pipes);
-      } else if (isPipe(exported)) {
-        scope.exported.pipes.add(exported);
-      } else {
-        scope.exported.directives.add(exported);
-      }
-    }
-    return scope;
-  }
-  /** @override */
-  getStandaloneComponentScope(type, rawImports) {
-    if (this.standaloneComponentsScopeCache.has(type)) {
-      return this.standaloneComponentsScopeCache.get(type);
-    }
-    const ans = this.computeStandaloneComponentScope(type, rawImports);
-    this.standaloneComponentsScopeCache.set(type, ans);
-    return ans;
-  }
-  computeStandaloneComponentScope(type, rawImports) {
-    const ans = {
-      compilation: {
-        // Standalone components are always able to self-reference.
-        directives: /* @__PURE__ */ new Set([type]),
-        pipes: /* @__PURE__ */ new Set(),
-        ngModules: /* @__PURE__ */ new Set()
-      }
-    };
-    for (const rawImport of flatten(rawImports ?? [])) {
-      const imported = resolveForwardRef(rawImport);
-      try {
-        verifyStandaloneImport(imported, type);
-      } catch (e) {
-        ans.compilation.isPoisoned = true;
-        return ans;
-      }
-      if (isNgModule(imported)) {
-        ans.compilation.ngModules.add(imported);
-        const importedScope = this.getNgModuleScope(imported);
-        if (importedScope.exported.isPoisoned) {
-          ans.compilation.isPoisoned = true;
-          return ans;
-        }
-        addSet(importedScope.exported.directives, ans.compilation.directives);
-        addSet(importedScope.exported.pipes, ans.compilation.pipes);
-      } else if (isPipe(imported)) {
-        ans.compilation.pipes.add(imported);
-      } else if (isDirective(imported) || isComponent(imported)) {
-        ans.compilation.directives.add(imported);
-      } else {
-        ans.compilation.isPoisoned = true;
-        return ans;
-      }
-    }
-    return ans;
-  }
-  /** @override */
-  isOrphanComponent(cmp) {
-    const def = getComponentDef(cmp);
-    if (!def || def.standalone) {
-      return false;
-    }
-    this.resolveNgModulesDecls();
-    return !this.ownerNgModule.has(cmp);
-  }
-};
-function addSet(sourceSet, targetSet) {
-  for (const m of sourceSet) {
-    targetSet.add(m);
-  }
-}
-var depsTracker = new DepsTracker();
-function computeStaticStyling(tNode, attrs, writeToHost) {
-  ngDevMode && assertFirstCreatePass(getTView(), "Expecting to be called in first template pass only");
-  let styles = writeToHost ? tNode.styles : null;
-  let classes = writeToHost ? tNode.classes : null;
-  let mode = 0;
-  if (attrs !== null) {
-    for (let i = 0; i < attrs.length; i++) {
-      const value = attrs[i];
-      if (typeof value === "number") {
-        mode = value;
-      } else if (mode == 1) {
-        classes = concatStringsWithSpace(classes, value);
-      } else if (mode == 2) {
-        const style = value;
-        const styleValue = attrs[++i];
-        styles = concatStringsWithSpace(styles, style + ": " + styleValue + ";");
-      }
-    }
-  }
-  writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;
-  writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;
-}
-var ComponentFactoryResolver = class extends ComponentFactoryResolver$1 {
-  ngModule;
-  /**
-   * @param ngModule The NgModuleRef to which all resolved factories are bound.
-   */
-  constructor(ngModule) {
-    super();
-    this.ngModule = ngModule;
-  }
-  resolveComponentFactory(component) {
-    ngDevMode && assertComponentType(component);
-    const componentDef = getComponentDef(component);
-    return new ComponentFactory(componentDef, this.ngModule);
-  }
-};
-function toRefArray(map2, isInputMap) {
-  const array = [];
-  for (const publicName in map2) {
-    if (!map2.hasOwnProperty(publicName)) {
-      continue;
-    }
-    const value = map2[publicName];
-    if (value === void 0) {
-      continue;
-    }
-    const isArray4 = Array.isArray(value);
-    const propName = isArray4 ? value[0] : value;
-    const flags = isArray4 ? value[1] : InputFlags.None;
-    if (isInputMap) {
-      array.push({
-        propName,
-        templateName: publicName,
-        isSignal: (flags & InputFlags.SignalBased) !== 0
-      });
-    } else {
-      array.push({
-        propName,
-        templateName: publicName
-      });
-    }
-  }
-  return array;
-}
-function getNamespace(elementName) {
-  const name = elementName.toLowerCase();
-  return name === "svg" ? SVG_NAMESPACE : name === "math" ? MATH_ML_NAMESPACE : null;
-}
-var ComponentFactory = class extends ComponentFactory$1 {
-  componentDef;
-  ngModule;
-  selector;
-  componentType;
-  ngContentSelectors;
-  isBoundToModule;
-  get inputs() {
-    const componentDef = this.componentDef;
-    const inputTransforms = componentDef.inputTransforms;
-    const refArray = toRefArray(componentDef.inputs, true);
-    if (inputTransforms !== null) {
-      for (const input2 of refArray) {
-        if (inputTransforms.hasOwnProperty(input2.propName)) {
-          input2.transform = inputTransforms[input2.propName];
-        }
-      }
-    }
-    return refArray;
-  }
-  get outputs() {
-    return toRefArray(this.componentDef.outputs, false);
-  }
-  /**
-   * @param componentDef The component definition.
-   * @param ngModule The NgModuleRef to which the factory is bound.
-   */
-  constructor(componentDef, ngModule) {
-    super();
-    this.componentDef = componentDef;
-    this.ngModule = ngModule;
-    this.componentType = componentDef.type;
-    this.selector = stringifyCSSSelectorList(componentDef.selectors);
-    this.ngContentSelectors = componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];
-    this.isBoundToModule = !!ngModule;
-  }
-  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (ngDevMode && (typeof ngJitMode === "undefined" || ngJitMode) && this.componentDef.debugInfo?.forbidOrphanRendering) {
-        if (depsTracker.isOrphanComponent(this.componentType)) {
-          throw new RuntimeError(981, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(this.componentType)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);
-        }
-      }
-      environmentInjector = environmentInjector || this.ngModule;
-      let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;
-      if (realEnvironmentInjector && this.componentDef.getStandaloneInjector !== null) {
-        realEnvironmentInjector = this.componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;
-      }
-      const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;
-      const rendererFactory = rootViewInjector.get(RendererFactory2, null);
-      if (rendererFactory === null) {
-        throw new RuntimeError(407, ngDevMode && "Angular was not able to inject a renderer (RendererFactory2). Likely this is due to a broken DI hierarchy. Make sure that any injector used to create this component has a correct parent.");
-      }
-      const sanitizer = rootViewInjector.get(Sanitizer, null);
-      const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);
-      const environment = {
-        rendererFactory,
-        sanitizer,
-        changeDetectionScheduler
-      };
-      const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
-      const elementName = this.componentDef.selectors[0][0] || "div";
-      const hostRNode = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) : createElementNode(hostRenderer, elementName, getNamespace(elementName));
-      let rootFlags = 512;
-      if (this.componentDef.signals) {
-        rootFlags |= 4096;
-      } else if (!this.componentDef.onPush) {
-        rootFlags |= 16;
-      }
-      let hydrationInfo = null;
-      if (hostRNode !== null) {
-        hydrationInfo = retrieveHydrationInfo(
-          hostRNode,
-          rootViewInjector,
-          true
-          /* isRootView */
-        );
-      }
-      const rootTView = createTView(0, null, null, 1, 0, null, null, null, null, null, null);
-      const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);
-      enterView(rootLView);
-      let component;
-      let tElementNode;
-      let componentView = null;
-      try {
-        const rootComponentDef = this.componentDef;
-        let rootDirectives;
-        let hostDirectiveDefs = null;
-        if (rootComponentDef.findHostDirectiveDefs) {
-          rootDirectives = [];
-          hostDirectiveDefs = /* @__PURE__ */ new Map();
-          rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);
-          rootDirectives.push(rootComponentDef);
-          ngDevMode && assertNoDuplicateDirectives(rootDirectives);
-        } else {
-          rootDirectives = [rootComponentDef];
-        }
-        const hostTNode = createRootComponentTNode(rootLView, hostRNode);
-        componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment, hostRenderer);
-        tElementNode = getTNode(rootTView, HEADER_OFFSET);
-        if (hostRNode) {
-          setRootNodeAttributes(hostRenderer, rootComponentDef, hostRNode, rootSelectorOrNode);
-        }
-        if (projectableNodes !== void 0) {
-          projectNodes(tElementNode, this.ngContentSelectors, projectableNodes);
-        }
-        component = createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, [LifecycleHooksFeature]);
-        renderView(rootTView, rootLView, null);
-      } catch (e) {
-        if (componentView !== null) {
-          unregisterLView(componentView);
-        }
-        unregisterLView(rootLView);
-        throw e;
-      } finally {
-        leaveView();
-      }
-      return new ComponentRef(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-};
-var ComponentRef = class extends ComponentRef$1 {
-  location;
-  _rootLView;
-  _tNode;
-  instance;
-  hostView;
-  changeDetectorRef;
-  componentType;
-  previousInputValues = null;
-  constructor(componentType, instance, location2, _rootLView, _tNode) {
-    super();
-    this.location = location2;
-    this._rootLView = _rootLView;
-    this._tNode = _tNode;
-    this.instance = instance;
-    this.hostView = this.changeDetectorRef = new ViewRef$1(
-      _rootLView,
-      void 0,
-      false
-      /* notifyErrorHandler */
-    );
-    this.componentType = componentType;
-  }
-  setInput(name, value) {
-    const inputData = this._tNode.inputs;
-    let dataValue;
-    if (inputData !== null && (dataValue = inputData[name])) {
-      this.previousInputValues ??= /* @__PURE__ */ new Map();
-      if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {
-        return;
-      }
-      const lView = this._rootLView;
-      setInputsForProperty(lView[TVIEW], lView, dataValue, name, value);
-      this.previousInputValues.set(name, value);
-      const childComponentLView = getComponentLViewByIndex(this._tNode.index, lView);
-      markViewDirty(
-        childComponentLView,
-        1
-        /* NotificationSource.SetInput */
-      );
-    } else {
-      if (ngDevMode) {
-        const cmpNameForError = stringifyForError(this.componentType);
-        let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;
-        message += `Make sure that the '${name}' property is annotated with @Input() or a mapped @Input('${name}') exists.`;
-        reportUnknownPropertyError(message);
-      }
-    }
-  }
-  get injector() {
-    return new NodeInjector(this._tNode, this._rootLView);
-  }
-  destroy() {
-    this.hostView.destroy();
-  }
-  onDestroy(callback) {
-    this.hostView.onDestroy(callback);
-  }
-};
-function createRootComponentTNode(lView, rNode) {
-  const tView = lView[TVIEW];
-  const index = HEADER_OFFSET;
-  ngDevMode && assertIndexInRange(lView, index);
-  lView[index] = rNode;
-  return getOrCreateTNode(tView, index, 2, "#host", null);
-}
-function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment, hostRenderer) {
-  const tView = rootView[TVIEW];
-  applyRootComponentStyling(rootDirectives, tNode, hostRNode, hostRenderer);
-  let hydrationInfo = null;
-  if (hostRNode !== null) {
-    hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
-  }
-  const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
-  const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
-  if (tView.firstCreatePass) {
-    markAsComponentHost(tView, tNode, rootDirectives.length - 1);
-  }
-  addToEndOfViewTree(rootView, componentView);
-  return rootView[tNode.index] = componentView;
-}
-function applyRootComponentStyling(rootDirectives, tNode, rNode, hostRenderer) {
-  for (const def of rootDirectives) {
-    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
-  }
-  if (tNode.mergedAttrs !== null) {
-    computeStaticStyling(tNode, tNode.mergedAttrs, true);
-    if (rNode !== null) {
-      setupStaticAttributes(hostRenderer, rNode, tNode);
-    }
-  }
-}
-function createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {
-  const rootTNode = getCurrentTNode();
-  ngDevMode && assertDefined(rootTNode, "tNode should have been already created");
-  const tView = rootLView[TVIEW];
-  const native = getNativeByTNode(rootTNode, rootLView);
-  initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);
-  for (let i = 0; i < rootDirectives.length; i++) {
-    const directiveIndex = rootTNode.directiveStart + i;
-    const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);
-    attachPatchData(directiveInstance, rootLView);
-  }
-  invokeDirectivesHostBindings(tView, rootLView, rootTNode);
-  if (native) {
-    attachPatchData(native, rootLView);
-  }
-  ngDevMode && assertGreaterThan(rootTNode.componentOffset, -1, "componentOffset must be great than -1");
-  const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);
-  componentView[CONTEXT] = rootLView[CONTEXT] = component;
-  if (hostFeatures !== null) {
-    for (const feature of hostFeatures) {
-      feature(component, rootComponentDef);
-    }
-  }
-  executeContentQueries(tView, rootTNode, rootLView);
-  return component;
-}
-function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
-  if (rootSelectorOrNode) {
-    setUpAttributes(hostRenderer, hostRNode, ["ng-version", "19.0.5"]);
-  } else {
-    const {
-      attrs,
-      classes
-    } = extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
-    if (attrs) {
-      setUpAttributes(hostRenderer, hostRNode, attrs);
-    }
-    if (classes && classes.length > 0) {
-      writeDirectClass(hostRenderer, hostRNode, classes.join(" "));
-    }
-  }
-}
-function projectNodes(tNode, ngContentSelectors, projectableNodes) {
-  const projection = tNode.projection = [];
-  for (let i = 0; i < ngContentSelectors.length; i++) {
-    const nodesforSlot = projectableNodes[i];
-    projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);
-  }
-}
-function LifecycleHooksFeature() {
-  const tNode = getCurrentTNode();
-  ngDevMode && assertDefined(tNode, "TNode is required");
-  registerPostOrderHooks(getLView()[TVIEW], tNode);
-}
-var ViewContainerRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectViewContainerRef;
-};
-function injectViewContainerRef() {
-  const previousTNode = getCurrentTNode();
-  return createContainerRef(previousTNode, getLView());
-}
-var VE_ViewContainerRef = ViewContainerRef;
-var R3ViewContainerRef = class ViewContainerRef2 extends VE_ViewContainerRef {
-  _lContainer;
-  _hostTNode;
-  _hostLView;
-  constructor(_lContainer, _hostTNode, _hostLView) {
-    super();
-    this._lContainer = _lContainer;
-    this._hostTNode = _hostTNode;
-    this._hostLView = _hostLView;
-  }
-  get element() {
-    return createElementRef(this._hostTNode, this._hostLView);
-  }
-  get injector() {
-    return new NodeInjector(this._hostTNode, this._hostLView);
-  }
-  /** @deprecated No replacement */
-  get parentInjector() {
-    const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);
-    if (hasParentInjector(parentLocation)) {
-      const parentView = getParentInjectorView(parentLocation, this._hostLView);
-      const injectorIndex = getParentInjectorIndex(parentLocation);
-      ngDevMode && assertNodeInjector(parentView, injectorIndex);
-      const parentTNode = parentView[TVIEW].data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ];
-      return new NodeInjector(parentTNode, parentView);
-    } else {
-      return new NodeInjector(null, this._hostLView);
-    }
-  }
-  clear() {
-    while (this.length > 0) {
-      this.remove(this.length - 1);
-    }
-  }
-  get(index) {
-    const viewRefs = getViewRefs(this._lContainer);
-    return viewRefs !== null && viewRefs[index] || null;
-  }
-  get length() {
-    return this._lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-  createEmbeddedView(templateRef, context2, indexOrOptions) {
-    let index;
-    let injector;
-    if (typeof indexOrOptions === "number") {
-      index = indexOrOptions;
-    } else if (indexOrOptions != null) {
-      index = indexOrOptions.index;
-      injector = indexOrOptions.injector;
-    }
-    const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);
-    const viewRef = templateRef.createEmbeddedViewImpl(context2 || {}, injector, dehydratedView);
-    this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));
-    return viewRef;
-  }
-  createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {
-    const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);
-    let index;
-    if (isComponentFactory) {
-      if (ngDevMode) {
-        assertEqual(typeof indexOrOptions !== "object", true, "It looks like Component factory was provided as the first argument and an options object as the second argument. This combination of arguments is incompatible. You can either change the first argument to provide Component type or change the second argument to be a number (representing an index at which to insert the new component's host view into this container)");
-      }
-      index = indexOrOptions;
-    } else {
-      if (ngDevMode) {
-        assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. Please check whether provided class has @Component decorator.`);
-        assertEqual(typeof indexOrOptions !== "number", true, "It looks like Component type was provided as the first argument and a number (representing an index at which to insert the new component's host view into this container as the second argument. This combination of arguments is incompatible. Please use an object as the second argument instead.");
-      }
-      const options = indexOrOptions || {};
-      if (ngDevMode && options.environmentInjector && options.ngModuleRef) {
-        throwError2(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);
-      }
-      index = options.index;
-      injector = options.injector;
-      projectableNodes = options.projectableNodes;
-      environmentInjector = options.environmentInjector || options.ngModuleRef;
-    }
-    const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));
-    const contextInjector = injector || this.parentInjector;
-    if (!environmentInjector && componentFactory.ngModule == null) {
-      const _injector = isComponentFactory ? contextInjector : this.parentInjector;
-      const result = _injector.get(EnvironmentInjector, null);
-      if (result) {
-        environmentInjector = result;
-      }
-    }
-    const componentDef = getComponentDef(componentFactory.componentType ?? {});
-    const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);
-    const rNode = dehydratedView?.firstChild ?? null;
-    const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector);
-    this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));
-    return componentRef;
-  }
-  insert(viewRef, index) {
-    return this.insertImpl(viewRef, index, true);
-  }
-  insertImpl(viewRef, index, addToDOM) {
-    const lView = viewRef._lView;
-    if (ngDevMode && viewRef.destroyed) {
-      throw new Error("Cannot insert a destroyed View in a ViewContainer!");
-    }
-    if (viewAttachedToContainer(lView)) {
-      const prevIdx = this.indexOf(viewRef);
-      if (prevIdx !== -1) {
-        this.detach(prevIdx);
-      } else {
-        const prevLContainer = lView[PARENT];
-        ngDevMode && assertEqual(isLContainer(prevLContainer), true, "An attached view should have its PARENT point to a container.");
-        const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);
-        prevVCRef.detach(prevVCRef.indexOf(viewRef));
-      }
-    }
-    const adjustedIdx = this._adjustIndex(index);
-    const lContainer = this._lContainer;
-    addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);
-    viewRef.attachToViewContainerRef();
-    addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
-    return viewRef;
-  }
-  move(viewRef, newIndex) {
-    if (ngDevMode && viewRef.destroyed) {
-      throw new Error("Cannot move a destroyed View in a ViewContainer!");
-    }
-    return this.insert(viewRef, newIndex);
-  }
-  indexOf(viewRef) {
-    const viewRefsArr = getViewRefs(this._lContainer);
-    return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;
-  }
-  remove(index) {
-    const adjustedIdx = this._adjustIndex(index, -1);
-    const detachedView = detachView(this._lContainer, adjustedIdx);
-    if (detachedView) {
-      removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);
-      destroyLView(detachedView[TVIEW], detachedView);
-    }
-  }
-  detach(index) {
-    const adjustedIdx = this._adjustIndex(index, -1);
-    const view = detachView(this._lContainer, adjustedIdx);
-    const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;
-    return wasDetached ? new ViewRef$1(view) : null;
-  }
-  _adjustIndex(index, shift = 0) {
-    if (index == null) {
-      return this.length + shift;
-    }
-    if (ngDevMode) {
-      assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);
-      assertLessThan(index, this.length + 1 + shift, "index");
-    }
-    return index;
-  }
-};
-function getViewRefs(lContainer) {
-  return lContainer[VIEW_REFS];
-}
-function getOrCreateViewRefs(lContainer) {
-  return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);
-}
-function createContainerRef(hostTNode, hostLView) {
-  ngDevMode && assertTNodeType(
-    hostTNode,
-    12 | 3
-    /* TNodeType.AnyRNode */
-  );
-  let lContainer;
-  const slotValue = hostLView[hostTNode.index];
-  if (isLContainer(slotValue)) {
-    lContainer = slotValue;
-  } else {
-    lContainer = createLContainer(slotValue, hostLView, null, hostTNode);
-    hostLView[hostTNode.index] = lContainer;
-    addToEndOfViewTree(hostLView, lContainer);
-  }
-  _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);
-  return new R3ViewContainerRef(lContainer, hostTNode, hostLView);
-}
-function insertAnchorNode(hostLView, hostTNode) {
-  const renderer = hostLView[RENDERER];
-  ngDevMode && ngDevMode.rendererCreateComment++;
-  const commentNode = renderer.createComment(ngDevMode ? "container" : "");
-  const hostNative = getNativeByTNode(hostTNode, hostLView);
-  const parentOfHostNative = nativeParentNode(renderer, hostNative);
-  nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);
-  return commentNode;
-}
-var _locateOrCreateAnchorNode = createAnchorNode;
-var _populateDehydratedViewsInLContainer = () => false;
-function populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {
-  return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);
-}
-function createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
-  if (lContainer[NATIVE]) return;
-  let commentNode;
-  if (hostTNode.type & 8) {
-    commentNode = unwrapRNode(slotValue);
-  } else {
-    commentNode = insertAnchorNode(hostLView, hostTNode);
-  }
-  lContainer[NATIVE] = commentNode;
-}
-function populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {
-  if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {
-    return true;
-  }
-  const hydrationInfo = hostLView[HYDRATION];
-  const noOffsetIndex = tNode.index - HEADER_OFFSET;
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
-  if (isNodeCreationMode) {
-    return false;
-  }
-  const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);
-  const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];
-  ngDevMode && assertDefined(serializedViews, "Unexpected state: no hydration info available for a given TNode, which represents a view container.");
-  const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);
-  if (ngDevMode) {
-    validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);
-    markRNodeAsClaimedByHydration(commentNode, false);
-  }
-  lContainer[NATIVE] = commentNode;
-  lContainer[DEHYDRATED_VIEWS] = dehydratedViews;
-  return true;
-}
-function locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
-  if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {
-    createAnchorNode(lContainer, hostLView, hostTNode, slotValue);
-  }
-}
-function enableLocateOrCreateContainerRefImpl() {
-  _locateOrCreateAnchorNode = locateOrCreateAnchorNode;
-  _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;
-}
-var LQuery_ = class _LQuery_ {
-  queryList;
-  matches = null;
-  constructor(queryList) {
-    this.queryList = queryList;
-  }
-  clone() {
-    return new _LQuery_(this.queryList);
-  }
-  setDirty() {
-    this.queryList.setDirty();
-  }
-};
-var LQueries_ = class _LQueries_ {
-  queries;
-  constructor(queries = []) {
-    this.queries = queries;
-  }
-  createEmbeddedView(tView) {
-    const tQueries = tView.queries;
-    if (tQueries !== null) {
-      const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;
-      const viewLQueries = [];
-      for (let i = 0; i < noOfInheritedQueries; i++) {
-        const tQuery = tQueries.getByIndex(i);
-        const parentLQuery = this.queries[tQuery.indexInDeclarationView];
-        viewLQueries.push(parentLQuery.clone());
-      }
-      return new _LQueries_(viewLQueries);
-    }
-    return null;
-  }
-  insertView(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  detachView(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  finishViewCreation(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  dirtyQueriesWithMatches(tView) {
-    for (let i = 0; i < this.queries.length; i++) {
-      if (getTQuery(tView, i).matches !== null) {
-        this.queries[i].setDirty();
-      }
-    }
-  }
-};
-var TQueryMetadata_ = class {
-  flags;
-  read;
-  predicate;
-  constructor(predicate, flags, read = null) {
-    this.flags = flags;
-    this.read = read;
-    if (typeof predicate === "string") {
-      this.predicate = splitQueryMultiSelectors(predicate);
-    } else {
-      this.predicate = predicate;
-    }
-  }
-};
-var TQueries_ = class _TQueries_ {
-  queries;
-  constructor(queries = []) {
-    this.queries = queries;
-  }
-  elementStart(tView, tNode) {
-    ngDevMode && assertFirstCreatePass(tView, "Queries should collect results on the first template pass only");
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].elementStart(tView, tNode);
-    }
-  }
-  elementEnd(tNode) {
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].elementEnd(tNode);
-    }
-  }
-  embeddedTView(tNode) {
-    let queriesForTemplateRef = null;
-    for (let i = 0; i < this.length; i++) {
-      const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;
-      const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);
-      if (tqueryClone) {
-        tqueryClone.indexInDeclarationView = i;
-        if (queriesForTemplateRef !== null) {
-          queriesForTemplateRef.push(tqueryClone);
-        } else {
-          queriesForTemplateRef = [tqueryClone];
-        }
-      }
-    }
-    return queriesForTemplateRef !== null ? new _TQueries_(queriesForTemplateRef) : null;
-  }
-  template(tView, tNode) {
-    ngDevMode && assertFirstCreatePass(tView, "Queries should collect results on the first template pass only");
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].template(tView, tNode);
-    }
-  }
-  getByIndex(index) {
-    ngDevMode && assertIndexInRange(this.queries, index);
-    return this.queries[index];
-  }
-  get length() {
-    return this.queries.length;
-  }
-  track(tquery) {
-    this.queries.push(tquery);
-  }
-};
-var TQuery_ = class _TQuery_ {
-  metadata;
-  matches = null;
-  indexInDeclarationView = -1;
-  crossesNgTemplate = false;
-  /**
-   * A node index on which a query was declared (-1 for view queries and ones inherited from the
-   * declaration template). We use this index (alongside with _appliesToNextNode flag) to know
-   * when to apply content queries to elements in a template.
-   */
-  _declarationNodeIndex;
-  /**
-   * A flag indicating if a given query still applies to nodes it is crossing. We use this flag
-   * (alongside with _declarationNodeIndex) to know when to stop applying content queries to
-   * elements in a template.
-   */
-  _appliesToNextNode = true;
-  constructor(metadata, nodeIndex = -1) {
-    this.metadata = metadata;
-    this._declarationNodeIndex = nodeIndex;
-  }
-  elementStart(tView, tNode) {
-    if (this.isApplyingToNode(tNode)) {
-      this.matchTNode(tView, tNode);
-    }
-  }
-  elementEnd(tNode) {
-    if (this._declarationNodeIndex === tNode.index) {
-      this._appliesToNextNode = false;
-    }
-  }
-  template(tView, tNode) {
-    this.elementStart(tView, tNode);
-  }
-  embeddedTView(tNode, childQueryIndex) {
-    if (this.isApplyingToNode(tNode)) {
-      this.crossesNgTemplate = true;
-      this.addMatch(-tNode.index, childQueryIndex);
-      return new _TQuery_(this.metadata);
-    }
-    return null;
-  }
-  isApplyingToNode(tNode) {
-    if (this._appliesToNextNode && (this.metadata.flags & 1) !== 1) {
-      const declarationNodeIdx = this._declarationNodeIndex;
-      let parent = tNode.parent;
-      while (parent !== null && parent.type & 8 && parent.index !== declarationNodeIdx) {
-        parent = parent.parent;
-      }
-      return declarationNodeIdx === (parent !== null ? parent.index : -1);
-    }
-    return this._appliesToNextNode;
-  }
-  matchTNode(tView, tNode) {
-    const predicate = this.metadata.predicate;
-    if (Array.isArray(predicate)) {
-      for (let i = 0; i < predicate.length; i++) {
-        const name = predicate[i];
-        this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));
-        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));
-      }
-    } else {
-      if (predicate === TemplateRef) {
-        if (tNode.type & 4) {
-          this.matchTNodeWithReadOption(tView, tNode, -1);
-        }
-      } else {
-        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));
-      }
-    }
-  }
-  matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {
-    if (nodeMatchIdx !== null) {
-      const read = this.metadata.read;
-      if (read !== null) {
-        if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4) {
-          this.addMatch(tNode.index, -2);
-        } else {
-          const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);
-          if (directiveOrProviderIdx !== null) {
-            this.addMatch(tNode.index, directiveOrProviderIdx);
-          }
-        }
-      } else {
-        this.addMatch(tNode.index, nodeMatchIdx);
-      }
-    }
-  }
-  addMatch(tNodeIdx, matchIdx) {
-    if (this.matches === null) {
-      this.matches = [tNodeIdx, matchIdx];
-    } else {
-      this.matches.push(tNodeIdx, matchIdx);
-    }
-  }
-};
-function getIdxOfMatchingSelector(tNode, selector) {
-  const localNames = tNode.localNames;
-  if (localNames !== null) {
-    for (let i = 0; i < localNames.length; i += 2) {
-      if (localNames[i] === selector) {
-        return localNames[i + 1];
-      }
-    }
-  }
-  return null;
-}
-function createResultByTNodeType(tNode, currentView) {
-  if (tNode.type & (3 | 8)) {
-    return createElementRef(tNode, currentView);
-  } else if (tNode.type & 4) {
-    return createTemplateRef(tNode, currentView);
-  }
-  return null;
-}
-function createResultForNode(lView, tNode, matchingIdx, read) {
-  if (matchingIdx === -1) {
-    return createResultByTNodeType(tNode, lView);
-  } else if (matchingIdx === -2) {
-    return createSpecialToken(lView, tNode, read);
-  } else {
-    return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);
-  }
-}
-function createSpecialToken(lView, tNode, read) {
-  if (read === ElementRef) {
-    return createElementRef(tNode, lView);
-  } else if (read === TemplateRef) {
-    return createTemplateRef(tNode, lView);
-  } else if (read === ViewContainerRef) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12
-      /* TNodeType.AnyContainer */
-    );
-    return createContainerRef(tNode, lView);
-  } else {
-    ngDevMode && throwError2(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);
-  }
-}
-function materializeViewResults(tView, lView, tQuery, queryIndex) {
-  const lQuery = lView[QUERIES].queries[queryIndex];
-  if (lQuery.matches === null) {
-    const tViewData = tView.data;
-    const tQueryMatches = tQuery.matches;
-    const result = [];
-    for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {
-      const matchedNodeIdx = tQueryMatches[i];
-      if (matchedNodeIdx < 0) {
-        result.push(null);
-      } else {
-        ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);
-        const tNode = tViewData[matchedNodeIdx];
-        result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));
-      }
-    }
-    lQuery.matches = result;
-  }
-  return lQuery.matches;
-}
-function collectQueryResults(tView, lView, queryIndex, result) {
-  const tQuery = tView.queries.getByIndex(queryIndex);
-  const tQueryMatches = tQuery.matches;
-  if (tQueryMatches !== null) {
-    const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);
-    for (let i = 0; i < tQueryMatches.length; i += 2) {
-      const tNodeIdx = tQueryMatches[i];
-      if (tNodeIdx > 0) {
-        result.push(lViewResults[i / 2]);
-      } else {
-        const childQueryIndex = tQueryMatches[i + 1];
-        const declarationLContainer = lView[-tNodeIdx];
-        ngDevMode && assertLContainer(declarationLContainer);
-        for (let i2 = CONTAINER_HEADER_OFFSET; i2 < declarationLContainer.length; i2++) {
-          const embeddedLView = declarationLContainer[i2];
-          if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {
-            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
-          }
-        }
-        if (declarationLContainer[MOVED_VIEWS] !== null) {
-          const embeddedLViews = declarationLContainer[MOVED_VIEWS];
-          for (let i2 = 0; i2 < embeddedLViews.length; i2++) {
-            const embeddedLView = embeddedLViews[i2];
-            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
-          }
-        }
-      }
-    }
-  }
-  return result;
-}
-function loadQueryInternal(lView, queryIndex) {
-  ngDevMode && assertDefined(lView[QUERIES], "LQueries should be defined when trying to load a query");
-  ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);
-  return lView[QUERIES].queries[queryIndex].queryList;
-}
-function createLQuery(tView, lView, flags) {
-  const queryList = new QueryList(
-    (flags & 4) === 4
-    /* QueryFlags.emitDistinctChangesOnly */
-  );
-  storeCleanupWithContext(tView, lView, queryList, queryList.destroy);
-  const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;
-  return lQueries.push(new LQuery_(queryList)) - 1;
-}
-function createViewQuery(predicate, flags, read) {
-  ngDevMode && assertNumber(flags, "Expecting flags");
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);
-    if ((flags & 2) === 2) {
-      tView.staticViewQueries = true;
-    }
-  }
-  return createLQuery(tView, getLView(), flags);
-}
-function createContentQuery(directiveIndex, predicate, flags, read) {
-  ngDevMode && assertNumber(flags, "Expecting flags");
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    const tNode = getCurrentTNode();
-    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);
-    saveContentQueryAndDirectiveIndex(tView, directiveIndex);
-    if ((flags & 2) === 2) {
-      tView.staticContentQueries = true;
-    }
-  }
-  return createLQuery(tView, getLView(), flags);
-}
-function splitQueryMultiSelectors(locator) {
-  return locator.split(",").map((s) => s.trim());
-}
-function createTQuery(tView, metadata, nodeIndex) {
-  if (tView.queries === null) tView.queries = new TQueries_();
-  tView.queries.track(new TQuery_(metadata, nodeIndex));
-}
-function saveContentQueryAndDirectiveIndex(tView, directiveIndex) {
-  const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);
-  const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;
-  if (directiveIndex !== lastSavedDirectiveIndex) {
-    tViewContentQueries.push(tView.queries.length - 1, directiveIndex);
-  }
-}
-function getTQuery(tView, index) {
-  ngDevMode && assertDefined(tView.queries, "TQueries must be defined to retrieve a TQuery");
-  return tView.queries.getByIndex(index);
-}
-function getQueryResults(lView, queryIndex) {
-  const tView = lView[TVIEW];
-  const tQuery = getTQuery(tView, queryIndex);
-  return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);
-}
-function isSignal(value) {
-  return typeof value === "function" && value[SIGNAL] !== void 0;
-}
-var ɵWRITABLE_SIGNAL = Symbol("WRITABLE_SIGNAL");
-function ɵunwrapWritableSignal(value) {
-  return null;
-}
-function signal(initialValue, options) {
-  performanceMarkFeature("NgSignals");
-  const signalFn = createSignal(initialValue);
-  const node = signalFn[SIGNAL];
-  if (options?.equal) {
-    node.equal = options.equal;
-  }
-  signalFn.set = (newValue) => signalSetFn(node, newValue);
-  signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
-  signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
-  if (ngDevMode) {
-    signalFn.toString = () => `[Signal: ${signalFn()}]`;
-    node.debugName = options?.debugName;
-  }
-  return signalFn;
-}
-function signalAsReadonlyFn() {
-  const node = this[SIGNAL];
-  if (node.readonlyFn === void 0) {
-    const readonlyFn = () => this();
-    readonlyFn[SIGNAL] = node;
-    node.readonlyFn = readonlyFn;
-  }
-  return node.readonlyFn;
-}
-function isWritableSignal(value) {
-  return isSignal(value) && typeof value.set === "function";
-}
-function createQuerySignalFn(firstOnly, required, opts) {
-  let node;
-  const signalFn = createComputed(() => {
-    node._dirtyCounter();
-    const value = refreshSignalQuery(node, firstOnly);
-    if (required && value === void 0) {
-      throw new RuntimeError(-951, ngDevMode && "Child query result is required but no value is available.");
-    }
-    return value;
-  });
-  node = signalFn[SIGNAL];
-  node._dirtyCounter = signal(0);
-  node._flatValue = void 0;
-  if (ngDevMode) {
-    signalFn.toString = () => `[Query Signal]`;
-    node.debugName = opts?.debugName;
-  }
-  return signalFn;
-}
-function createSingleResultOptionalQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    true,
-    /* required */
-    false,
-    opts
-  );
-}
-function createSingleResultRequiredQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    true,
-    /* required */
-    true,
-    opts
-  );
-}
-function createMultiResultQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    false,
-    /* required */
-    false,
-    opts
-  );
-}
-function bindQueryToSignal(target, queryIndex) {
-  const node = target[SIGNAL];
-  node._lView = getLView();
-  node._queryIndex = queryIndex;
-  node._queryList = loadQueryInternal(node._lView, queryIndex);
-  node._queryList.onDirty(() => node._dirtyCounter.update((v) => v + 1));
-}
-function refreshSignalQuery(node, firstOnly) {
-  const lView = node._lView;
-  const queryIndex = node._queryIndex;
-  if (lView === void 0 || queryIndex === void 0 || lView[FLAGS] & 4) {
-    return firstOnly ? void 0 : EMPTY_ARRAY;
-  }
-  const queryList = loadQueryInternal(lView, queryIndex);
-  const results = getQueryResults(lView, queryIndex);
-  queryList.reset(results, unwrapElementRef);
-  if (firstOnly) {
-    return queryList.first;
-  } else {
-    const resultChanged = queryList._changesDetected;
-    if (resultChanged || node._flatValue === void 0) {
-      return node._flatValue = queryList.toArray();
-    }
-    return node._flatValue;
-  }
-}
-function viewChildFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChild);
-  return createSingleResultOptionalQuerySignalFn(opts);
-}
-function viewChildRequiredFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChild);
-  return createSingleResultRequiredQuerySignalFn(opts);
-}
-var viewChild = (() => {
-  viewChildFn.required = viewChildRequiredFn;
-  return viewChildFn;
-})();
-function viewChildren(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChildren);
-  return createMultiResultQuerySignalFn(opts);
-}
-function contentChildFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(contentChild);
-  return createSingleResultOptionalQuerySignalFn(opts);
-}
-function contentChildRequiredFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(contentChildren);
-  return createSingleResultRequiredQuerySignalFn(opts);
-}
-var contentChild = (() => {
-  contentChildFn.required = contentChildRequiredFn;
-  return contentChildFn;
-})();
-function contentChildren(locator, opts) {
-  return createMultiResultQuerySignalFn(opts);
-}
-function createModelSignal(initialValue, opts) {
-  const node = Object.create(INPUT_SIGNAL_NODE);
-  const emitterRef = new OutputEmitterRef();
-  node.value = initialValue;
-  function getter() {
-    producerAccessed(node);
-    assertModelSet(node.value);
-    return node.value;
-  }
-  getter[SIGNAL] = node;
-  getter.asReadonly = signalAsReadonlyFn.bind(getter);
-  getter.set = (newValue) => {
-    if (!node.equal(node.value, newValue)) {
-      signalSetFn(node, newValue);
-      emitterRef.emit(newValue);
-    }
-  };
-  getter.update = (updateFn) => {
-    assertModelSet(node.value);
-    getter.set(updateFn(node.value));
-  };
-  getter.subscribe = emitterRef.subscribe.bind(emitterRef);
-  getter.destroyRef = emitterRef.destroyRef;
-  if (ngDevMode) {
-    getter.toString = () => `[Model Signal: ${getter()}]`;
-    node.debugName = opts?.debugName;
-  }
-  return getter;
-}
-function assertModelSet(value) {
-  if (value === REQUIRED_UNSET_VALUE) {
-    throw new RuntimeError(952, ngDevMode && "Model is required but no value is available yet.");
-  }
-}
-function modelFunction(initialValue, opts) {
-  ngDevMode && assertInInjectionContext(model);
-  return createModelSignal(initialValue, opts);
-}
-function modelRequiredFunction(opts) {
-  ngDevMode && assertInInjectionContext(model);
-  return createModelSignal(REQUIRED_UNSET_VALUE, opts);
-}
-var model = (() => {
-  modelFunction.required = modelRequiredFunction;
-  return modelFunction;
-})();
-var emitDistinctChangesOnlyDefaultValue = true;
-var Query = class {
-};
-var ContentChildren = makePropDecorator("ContentChildren", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: false,
-  isViewQuery: false,
-  descendants: false,
-  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
-}, opts), Query);
-var ContentChild = makePropDecorator("ContentChild", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: true,
-  isViewQuery: false,
-  descendants: true
-}, opts), Query);
-var ViewChildren = makePropDecorator("ViewChildren", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: false,
-  isViewQuery: true,
-  descendants: true,
-  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
-}, opts), Query);
-var ViewChild = makePropDecorator("ViewChild", (selector, opts) => __spreadValues({
-  selector,
-  first: true,
-  isViewQuery: true,
-  descendants: true
-}, opts), Query);
-function resolveComponentResources(resourceResolver) {
-  const componentResolved = [];
-  const urlMap = /* @__PURE__ */ new Map();
-  function cachedResourceResolve(url) {
-    let promise = urlMap.get(url);
-    if (!promise) {
-      const resp = resourceResolver(url);
-      urlMap.set(url, promise = resp.then(unwrapResponse));
-    }
-    return promise;
-  }
-  componentResourceResolutionQueue.forEach((component, type) => {
-    const promises = [];
-    if (component.templateUrl) {
-      promises.push(cachedResourceResolve(component.templateUrl).then((template) => {
-        component.template = template;
-      }));
-    }
-    const styles = typeof component.styles === "string" ? [component.styles] : component.styles || [];
-    component.styles = styles;
-    if (component.styleUrl && component.styleUrls?.length) {
-      throw new Error("@Component cannot define both `styleUrl` and `styleUrls`. Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple");
-    } else if (component.styleUrls?.length) {
-      const styleOffset = component.styles.length;
-      const styleUrls = component.styleUrls;
-      component.styleUrls.forEach((styleUrl, index) => {
-        styles.push("");
-        promises.push(cachedResourceResolve(styleUrl).then((style) => {
-          styles[styleOffset + index] = style;
-          styleUrls.splice(styleUrls.indexOf(styleUrl), 1);
-          if (styleUrls.length == 0) {
-            component.styleUrls = void 0;
-          }
-        }));
-      });
-    } else if (component.styleUrl) {
-      promises.push(cachedResourceResolve(component.styleUrl).then((style) => {
-        styles.push(style);
-        component.styleUrl = void 0;
-      }));
-    }
-    const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));
-    componentResolved.push(fullyResolved);
-  });
-  clearResolutionOfComponentResourcesQueue();
-  return Promise.all(componentResolved).then(() => void 0);
-}
-var componentResourceResolutionQueue = /* @__PURE__ */ new Map();
-var componentDefPendingResolution = /* @__PURE__ */ new Set();
-function maybeQueueResolutionOfComponentResources(type, metadata) {
-  if (componentNeedsResolution(metadata)) {
-    componentResourceResolutionQueue.set(type, metadata);
-    componentDefPendingResolution.add(type);
-  }
-}
-function isComponentDefPendingResolution(type) {
-  return componentDefPendingResolution.has(type);
-}
-function componentNeedsResolution(component) {
-  return !!(component.templateUrl && !component.hasOwnProperty("template") || component.styleUrls && component.styleUrls.length || component.styleUrl);
-}
-function clearResolutionOfComponentResourcesQueue() {
-  const old = componentResourceResolutionQueue;
-  componentResourceResolutionQueue = /* @__PURE__ */ new Map();
-  return old;
-}
-function restoreComponentResolutionQueue(queue2) {
-  componentDefPendingResolution.clear();
-  queue2.forEach((_, type) => componentDefPendingResolution.add(type));
-  componentResourceResolutionQueue = queue2;
-}
-function isComponentResourceResolutionQueueEmpty() {
-  return componentResourceResolutionQueue.size === 0;
-}
-function unwrapResponse(response) {
-  return typeof response == "string" ? response : response.text();
-}
-function componentDefResolved(type) {
-  componentDefPendingResolution.delete(type);
-}
-var modules = /* @__PURE__ */ new Map();
-var checkForDuplicateNgModules = true;
-function assertSameOrNotExisting(id, type, incoming) {
-  if (type && type !== incoming && checkForDuplicateNgModules) {
-    throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
-  }
-}
-function registerNgModuleType(ngModuleType, id) {
-  const existing = modules.get(id) || null;
-  assertSameOrNotExisting(id, existing, ngModuleType);
-  modules.set(id, ngModuleType);
-}
-function getRegisteredNgModuleType(id) {
-  return modules.get(id);
-}
-function setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {
-  checkForDuplicateNgModules = !allowDuplicates;
-}
-function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  const element = getNativeByTNode(tNode, lView);
-  if (tNode.type === 2 && tagName.toLowerCase() === "iframe") {
-    const iframe = element;
-    iframe.src = "";
-    iframe.srcdoc = trustedHTMLFromString("");
-    nativeRemoveNode(lView[RENDERER], iframe);
-    const errorMessage = ngDevMode && `Angular has detected that the \`${attrName}\` was applied as a binding to an <iframe>${getTemplateLocationDetails(lView)}. For security reasons, the \`${attrName}\` can be set on an <iframe> as a static attribute only. 
-To fix this, switch the \`${attrName}\` binding to a static attribute in a template or in host bindings section.`;
-    throw new RuntimeError(-910, errorMessage);
-  }
-  return attrValue;
-}
-var NgModuleRef$1 = class {
-};
-var NgModuleFactory$1 = class {
-};
-function createNgModule(ngModule, parentInjector) {
-  return new NgModuleRef(ngModule, parentInjector ?? null, []);
-}
-var createNgModuleRef = createNgModule;
-var NgModuleRef = class extends NgModuleRef$1 {
-  ngModuleType;
-  _parent;
-  // tslint:disable-next-line:require-internal-with-underscore
-  _bootstrapComponents = [];
-  // tslint:disable-next-line:require-internal-with-underscore
-  _r3Injector;
-  instance;
-  destroyCbs = [];
-  // When bootstrapping a module we have a dependency graph that looks like this:
-  // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the
-  // module being resolved tries to inject the ComponentFactoryResolver, it'll create a
-  // circular dependency which will result in a runtime error, because the injector doesn't
-  // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves
-  // and providing it, rather than letting the injector resolve it.
-  componentFactoryResolver = new ComponentFactoryResolver(this);
-  constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {
-    super();
-    this.ngModuleType = ngModuleType;
-    this._parent = _parent;
-    const ngModuleDef = getNgModuleDef(ngModuleType);
-    ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);
-    this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);
-    this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{
-      provide: NgModuleRef$1,
-      useValue: this
-    }, {
-      provide: ComponentFactoryResolver$1,
-      useValue: this.componentFactoryResolver
-    }, ...additionalProviders], stringify(ngModuleType), /* @__PURE__ */ new Set(["environment"]));
-    if (runInjectorInitializers) {
-      this.resolveInjectorInitializers();
-    }
-  }
-  resolveInjectorInitializers() {
-    this._r3Injector.resolveInjectorInitializers();
-    this.instance = this._r3Injector.get(this.ngModuleType);
-  }
-  get injector() {
-    return this._r3Injector;
-  }
-  destroy() {
-    ngDevMode && assertDefined(this.destroyCbs, "NgModule already destroyed");
-    const injector = this._r3Injector;
-    !injector.destroyed && injector.destroy();
-    this.destroyCbs.forEach((fn) => fn());
-    this.destroyCbs = null;
-  }
-  onDestroy(callback) {
-    ngDevMode && assertDefined(this.destroyCbs, "NgModule already destroyed");
-    this.destroyCbs.push(callback);
-  }
-};
-var NgModuleFactory = class extends NgModuleFactory$1 {
-  moduleType;
-  constructor(moduleType) {
-    super();
-    this.moduleType = moduleType;
-  }
-  create(parentInjector) {
-    return new NgModuleRef(this.moduleType, parentInjector, []);
-  }
-};
-function createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {
-  return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);
-}
-var EnvironmentNgModuleRefAdapter = class extends NgModuleRef$1 {
-  injector;
-  componentFactoryResolver = new ComponentFactoryResolver(this);
-  instance = null;
-  constructor(config2) {
-    super();
-    const injector = new R3Injector([...config2.providers, {
-      provide: NgModuleRef$1,
-      useValue: this
-    }, {
-      provide: ComponentFactoryResolver$1,
-      useValue: this.componentFactoryResolver
-    }], config2.parent || getNullInjector(), config2.debugName, /* @__PURE__ */ new Set(["environment"]));
-    this.injector = injector;
-    if (config2.runEnvironmentInitializers) {
-      injector.resolveInjectorInitializers();
-    }
-  }
-  destroy() {
-    this.injector.destroy();
-  }
-  onDestroy(callback) {
-    this.injector.onDestroy(callback);
-  }
-};
-function createEnvironmentInjector(providers, parent, debugName = null) {
-  const adapter = new EnvironmentNgModuleRefAdapter({
-    providers,
-    parent,
-    debugName,
-    runEnvironmentInitializers: true
-  });
-  return adapter.injector;
-}
-var StandaloneService = class _StandaloneService {
-  _injector;
-  cachedInjectors = /* @__PURE__ */ new Map();
-  constructor(_injector) {
-    this._injector = _injector;
-  }
-  getOrCreateStandaloneInjector(componentDef) {
-    if (!componentDef.standalone) {
-      return null;
-    }
-    if (!this.cachedInjectors.has(componentDef)) {
-      const providers = internalImportProvidersFrom(false, componentDef.type);
-      const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, `Standalone[${componentDef.type.name}]`) : null;
-      this.cachedInjectors.set(componentDef, standaloneInjector);
-    }
-    return this.cachedInjectors.get(componentDef);
-  }
-  ngOnDestroy() {
-    try {
-      for (const injector of this.cachedInjectors.values()) {
-        if (injector !== null) {
-          injector.destroy();
-        }
-      }
-    } finally {
-      this.cachedInjectors.clear();
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _StandaloneService,
-      providedIn: "environment",
-      factory: () => new _StandaloneService(ɵɵinject(EnvironmentInjector))
-    })
-  );
-};
-function ɵɵdefineComponent(componentDefinition) {
-  return noSideEffects(() => {
-    (typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode();
-    const baseDef = getNgDirectiveDef(componentDefinition);
-    const def = __spreadProps(__spreadValues({}, baseDef), {
-      decls: componentDefinition.decls,
-      vars: componentDefinition.vars,
-      template: componentDefinition.template,
-      consts: componentDefinition.consts || null,
-      ngContentSelectors: componentDefinition.ngContentSelectors,
-      onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
-      directiveDefs: null,
-      // assigned in noSideEffects
-      pipeDefs: null,
-      // assigned in noSideEffects
-      dependencies: baseDef.standalone && componentDefinition.dependencies || null,
-      getStandaloneInjector: baseDef.standalone ? (parentInjector) => {
-        return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);
-      } : null,
-      getExternalStyles: null,
-      signals: componentDefinition.signals ?? false,
-      data: componentDefinition.data || {},
-      encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,
-      styles: componentDefinition.styles || EMPTY_ARRAY,
-      _: null,
-      schemas: componentDefinition.schemas || null,
-      tView: null,
-      id: ""
-    });
-    if (baseDef.standalone) {
-      performanceMarkFeature("NgStandalone");
-    }
-    initFeatures(def);
-    const dependencies = componentDefinition.dependencies;
-    def.directiveDefs = extractDefListOrFactory(
-      dependencies,
-      /* pipeDef */
-      false
-    );
-    def.pipeDefs = extractDefListOrFactory(
-      dependencies,
-      /* pipeDef */
-      true
-    );
-    def.id = getComponentId(def);
-    return def;
-  });
-}
-function extractDirectiveDef(type) {
-  return getComponentDef(type) || getDirectiveDef(type);
-}
-function nonNull(value) {
-  return value !== null;
-}
-function ɵɵdefineNgModule(def) {
-  return noSideEffects(() => {
-    const res = {
-      type: def.type,
-      bootstrap: def.bootstrap || EMPTY_ARRAY,
-      declarations: def.declarations || EMPTY_ARRAY,
-      imports: def.imports || EMPTY_ARRAY,
-      exports: def.exports || EMPTY_ARRAY,
-      transitiveCompileScopes: null,
-      schemas: def.schemas || null,
-      id: def.id || null
-    };
-    return res;
-  });
-}
-function parseAndConvertBindingsForDefinition(obj, declaredInputs) {
-  if (obj == null) return EMPTY_OBJ;
-  const newLookup = {};
-  for (const minifiedKey in obj) {
-    if (obj.hasOwnProperty(minifiedKey)) {
-      const value = obj[minifiedKey];
-      let publicName;
-      let declaredName;
-      let inputFlags = InputFlags.None;
-      if (Array.isArray(value)) {
-        inputFlags = value[0];
-        publicName = value[1];
-        declaredName = value[2] ?? publicName;
-      } else {
-        publicName = value;
-        declaredName = value;
-      }
-      if (declaredInputs) {
-        newLookup[publicName] = inputFlags !== InputFlags.None ? [minifiedKey, inputFlags] : minifiedKey;
-        declaredInputs[publicName] = declaredName;
-      } else {
-        newLookup[publicName] = minifiedKey;
-      }
-    }
-  }
-  return newLookup;
-}
-function ɵɵdefineDirective(directiveDefinition) {
-  return noSideEffects(() => {
-    const def = getNgDirectiveDef(directiveDefinition);
-    initFeatures(def);
-    return def;
-  });
-}
-function ɵɵdefinePipe(pipeDef) {
-  return {
-    type: pipeDef.type,
-    name: pipeDef.name,
-    factory: null,
-    pure: pipeDef.pure !== false,
-    standalone: pipeDef.standalone ?? true,
-    onDestroy: pipeDef.type.prototype.ngOnDestroy || null
-  };
-}
-function getNgDirectiveDef(directiveDefinition) {
-  const declaredInputs = {};
-  return {
-    type: directiveDefinition.type,
-    providersResolver: null,
-    factory: null,
-    hostBindings: directiveDefinition.hostBindings || null,
-    hostVars: directiveDefinition.hostVars || 0,
-    hostAttrs: directiveDefinition.hostAttrs || null,
-    contentQueries: directiveDefinition.contentQueries || null,
-    declaredInputs,
-    inputTransforms: null,
-    inputConfig: directiveDefinition.inputs || EMPTY_OBJ,
-    exportAs: directiveDefinition.exportAs || null,
-    standalone: directiveDefinition.standalone ?? true,
-    signals: directiveDefinition.signals === true,
-    selectors: directiveDefinition.selectors || EMPTY_ARRAY,
-    viewQuery: directiveDefinition.viewQuery || null,
-    features: directiveDefinition.features || null,
-    setInput: null,
-    findHostDirectiveDefs: null,
-    hostDirectives: null,
-    inputs: parseAndConvertBindingsForDefinition(directiveDefinition.inputs, declaredInputs),
-    outputs: parseAndConvertBindingsForDefinition(directiveDefinition.outputs),
-    debugInfo: null
-  };
-}
-function initFeatures(definition) {
-  definition.features?.forEach((fn) => fn(definition));
-}
-function extractDefListOrFactory(dependencies, pipeDef) {
-  if (!dependencies) {
-    return null;
-  }
-  const defExtractor = pipeDef ? getPipeDef$1 : extractDirectiveDef;
-  return () => (typeof dependencies === "function" ? dependencies() : dependencies).map((dep) => defExtractor(dep)).filter(nonNull);
-}
-var GENERATED_COMP_IDS = /* @__PURE__ */ new Map();
-function getComponentId(componentDef) {
-  let hash = 0;
-  const componentDefConsts = typeof componentDef.consts === "function" ? "" : componentDef.consts;
-  const hashSelectors = [
-    componentDef.selectors,
-    componentDef.ngContentSelectors,
-    componentDef.hostVars,
-    componentDef.hostAttrs,
-    componentDefConsts,
-    componentDef.vars,
-    componentDef.decls,
-    componentDef.encapsulation,
-    componentDef.standalone,
-    componentDef.signals,
-    componentDef.exportAs,
-    JSON.stringify(componentDef.inputs),
-    JSON.stringify(componentDef.outputs),
-    // We cannot use 'componentDef.type.name' as the name of the symbol will change and will not
-    // match in the server and browser bundles.
-    Object.getOwnPropertyNames(componentDef.type.prototype),
-    !!componentDef.contentQueries,
-    !!componentDef.viewQuery
-  ];
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    for (const item of hashSelectors) {
-      assertNotEqual(typeof item, "function", "Internal error: attempting to use a function in component id computation logic.");
-    }
-  }
-  for (const char of hashSelectors.join("|")) {
-    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;
-  }
-  hash += 2147483647 + 1;
-  const compId = "c" + hash;
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (GENERATED_COMP_IDS.has(compId)) {
-      const previousCompDefType = GENERATED_COMP_IDS.get(compId);
-      if (previousCompDefType !== componentDef.type) {
-        console.warn(formatRuntimeError(-912, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));
-      }
-    } else {
-      GENERATED_COMP_IDS.set(compId, componentDef.type);
-    }
-  }
-  return compId;
-}
-function getSuperType(type) {
-  return Object.getPrototypeOf(type.prototype).constructor;
-}
-function ɵɵInheritDefinitionFeature(definition) {
-  let superType = getSuperType(definition.type);
-  let shouldInheritFields = true;
-  const inheritanceChain = [definition];
-  while (superType) {
-    let superDef = void 0;
-    if (isComponentDef(definition)) {
-      superDef = superType.ɵcmp || superType.ɵdir;
-    } else {
-      if (superType.ɵcmp) {
-        throw new RuntimeError(903, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);
-      }
-      superDef = superType.ɵdir;
-    }
-    if (superDef) {
-      if (shouldInheritFields) {
-        inheritanceChain.push(superDef);
-        const writeableDef = definition;
-        writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);
-        writeableDef.inputTransforms = maybeUnwrapEmpty(definition.inputTransforms);
-        writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);
-        writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);
-        const superHostBindings = superDef.hostBindings;
-        superHostBindings && inheritHostBindings(definition, superHostBindings);
-        const superViewQuery = superDef.viewQuery;
-        const superContentQueries = superDef.contentQueries;
-        superViewQuery && inheritViewQuery(definition, superViewQuery);
-        superContentQueries && inheritContentQueries(definition, superContentQueries);
-        mergeInputsWithTransforms(definition, superDef);
-        fillProperties(definition.outputs, superDef.outputs);
-        if (isComponentDef(superDef) && superDef.data.animation) {
-          const defData = definition.data;
-          defData.animation = (defData.animation || []).concat(superDef.data.animation);
-        }
-      }
-      const features = superDef.features;
-      if (features) {
-        for (let i = 0; i < features.length; i++) {
-          const feature = features[i];
-          if (feature && feature.ngInherit) {
-            feature(definition);
-          }
-          if (feature === ɵɵInheritDefinitionFeature) {
-            shouldInheritFields = false;
-          }
-        }
-      }
-    }
-    superType = Object.getPrototypeOf(superType);
-  }
-  mergeHostAttrsAcrossInheritance(inheritanceChain);
-}
-function mergeInputsWithTransforms(target, source) {
-  for (const key in source.inputs) {
-    if (!source.inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    if (target.inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    const value = source.inputs[key];
-    if (value === void 0) {
-      continue;
-    }
-    target.inputs[key] = value;
-    target.declaredInputs[key] = source.declaredInputs[key];
-    if (source.inputTransforms !== null) {
-      const minifiedName = Array.isArray(value) ? value[0] : value;
-      if (!source.inputTransforms.hasOwnProperty(minifiedName)) {
-        continue;
-      }
-      target.inputTransforms ??= {};
-      target.inputTransforms[minifiedName] = source.inputTransforms[minifiedName];
-    }
-  }
-}
-function mergeHostAttrsAcrossInheritance(inheritanceChain) {
-  let hostVars = 0;
-  let hostAttrs = null;
-  for (let i = inheritanceChain.length - 1; i >= 0; i--) {
-    const def = inheritanceChain[i];
-    def.hostVars = hostVars += def.hostVars;
-    def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));
-  }
-}
-function maybeUnwrapEmpty(value) {
-  if (value === EMPTY_OBJ) {
-    return {};
-  } else if (value === EMPTY_ARRAY) {
-    return [];
-  } else {
-    return value;
-  }
-}
-function inheritViewQuery(definition, superViewQuery) {
-  const prevViewQuery = definition.viewQuery;
-  if (prevViewQuery) {
-    definition.viewQuery = (rf, ctx) => {
-      superViewQuery(rf, ctx);
-      prevViewQuery(rf, ctx);
-    };
-  } else {
-    definition.viewQuery = superViewQuery;
-  }
-}
-function inheritContentQueries(definition, superContentQueries) {
-  const prevContentQueries = definition.contentQueries;
-  if (prevContentQueries) {
-    definition.contentQueries = (rf, ctx, directiveIndex) => {
-      superContentQueries(rf, ctx, directiveIndex);
-      prevContentQueries(rf, ctx, directiveIndex);
-    };
-  } else {
-    definition.contentQueries = superContentQueries;
-  }
-}
-function inheritHostBindings(definition, superHostBindings) {
-  const prevHostBindings = definition.hostBindings;
-  if (prevHostBindings) {
-    definition.hostBindings = (rf, ctx) => {
-      superHostBindings(rf, ctx);
-      prevHostBindings(rf, ctx);
-    };
-  } else {
-    definition.hostBindings = superHostBindings;
-  }
-}
-var COPY_DIRECTIVE_FIELDS = [
-  // The child class should use the providers of its parent.
-  "providersResolver"
-  // Not listed here are any fields which are handled by the `ɵɵInheritDefinitionFeature`, such
-  // as inputs, outputs, and host binding functions.
-];
-var COPY_COMPONENT_FIELDS = [
-  // The child class should use the template function of its parent, including all template
-  // semantics.
-  "template",
-  "decls",
-  "consts",
-  "vars",
-  "onPush",
-  "ngContentSelectors",
-  // The child class should use the CSS styles of its parent, including all styling semantics.
-  "styles",
-  "encapsulation",
-  // The child class should be checked by the runtime in the same way as its parent.
-  "schemas"
-];
-function ɵɵCopyDefinitionFeature(definition) {
-  let superType = getSuperType(definition.type);
-  let superDef = void 0;
-  if (isComponentDef(definition)) {
-    superDef = superType.ɵcmp;
-  } else {
-    superDef = superType.ɵdir;
-  }
-  const defAny = definition;
-  for (const field of COPY_DIRECTIVE_FIELDS) {
-    defAny[field] = superDef[field];
-  }
-  if (isComponentDef(superDef)) {
-    for (const field of COPY_COMPONENT_FIELDS) {
-      defAny[field] = superDef[field];
-    }
-  }
-}
-function ɵɵHostDirectivesFeature(rawHostDirectives) {
-  const feature = (definition) => {
-    const isEager = Array.isArray(rawHostDirectives);
-    if (definition.hostDirectives === null) {
-      definition.findHostDirectiveDefs = findHostDirectiveDefs;
-      definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];
-    } else if (isEager) {
-      definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));
-    } else {
-      definition.hostDirectives.unshift(rawHostDirectives);
-    }
-  };
-  feature.ngInherit = true;
-  return feature;
-}
-function findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {
-  if (currentDef.hostDirectives !== null) {
-    for (const configOrFn of currentDef.hostDirectives) {
-      if (typeof configOrFn === "function") {
-        const resolved2 = configOrFn();
-        for (const config2 of resolved2) {
-          trackHostDirectiveDef(createHostDirectiveDef(config2), matchedDefs, hostDirectiveDefs);
-        }
-      } else {
-        trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);
-      }
-    }
-  }
-}
-function trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {
-  const hostDirectiveDef = getDirectiveDef(def.directive);
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    validateHostDirective(def, hostDirectiveDef);
-  }
-  patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);
-  findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);
-  hostDirectiveDefs.set(hostDirectiveDef, def);
-  matchedDefs.push(hostDirectiveDef);
-}
-function createHostDirectiveDef(config2) {
-  return typeof config2 === "function" ? {
-    directive: resolveForwardRef(config2),
-    inputs: EMPTY_OBJ,
-    outputs: EMPTY_OBJ
-  } : {
-    directive: resolveForwardRef(config2.directive),
-    inputs: bindingArrayToMap(config2.inputs),
-    outputs: bindingArrayToMap(config2.outputs)
-  };
-}
-function bindingArrayToMap(bindings) {
-  if (bindings === void 0 || bindings.length === 0) {
-    return EMPTY_OBJ;
-  }
-  const result = {};
-  for (let i = 0; i < bindings.length; i += 2) {
-    result[bindings[i]] = bindings[i + 1];
-  }
-  return result;
-}
-function patchDeclaredInputs(declaredInputs, exposedInputs) {
-  for (const publicName in exposedInputs) {
-    if (exposedInputs.hasOwnProperty(publicName)) {
-      const remappedPublicName = exposedInputs[publicName];
-      const privateName = declaredInputs[publicName];
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {
-        assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);
-      }
-      declaredInputs[remappedPublicName] = privateName;
-    }
-  }
-}
-function validateHostDirective(hostDirectiveConfig, directiveDef) {
-  const type = hostDirectiveConfig.directive;
-  if (directiveDef === null) {
-    if (getComponentDef(type) !== null) {
-      throw new RuntimeError(310, `Host directive ${type.name} cannot be a component.`);
-    }
-    throw new RuntimeError(307, `Could not resolve metadata for host directive ${type.name}. Make sure that the ${type.name} class is annotated with an @Directive decorator.`);
-  }
-  if (!directiveDef.standalone) {
-    throw new RuntimeError(308, `Host directive ${directiveDef.type.name} must be standalone.`);
-  }
-  validateMappings("input", directiveDef, hostDirectiveConfig.inputs);
-  validateMappings("output", directiveDef, hostDirectiveConfig.outputs);
-}
-function validateMappings(bindingType, def, hostDirectiveBindings) {
-  const className = def.type.name;
-  const bindings = bindingType === "input" ? def.inputs : def.outputs;
-  for (const publicName in hostDirectiveBindings) {
-    if (hostDirectiveBindings.hasOwnProperty(publicName)) {
-      if (!bindings.hasOwnProperty(publicName)) {
-        throw new RuntimeError(311, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);
-      }
-      const remappedPublicName = hostDirectiveBindings[publicName];
-      if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {
-        throw new RuntimeError(312, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);
-      }
-    }
-  }
-}
-function ɵɵInputTransformsFeature(definition) {
-  const inputs = definition.inputConfig;
-  const inputTransforms = {};
-  for (const minifiedKey in inputs) {
-    if (inputs.hasOwnProperty(minifiedKey)) {
-      const value = inputs[minifiedKey];
-      if (Array.isArray(value) && value[3]) {
-        inputTransforms[minifiedKey] = value[3];
-      }
-    }
-  }
-  definition.inputTransforms = inputTransforms;
-}
-function isListLikeIterable(obj) {
-  if (!isJsObject(obj)) return false;
-  return Array.isArray(obj) || !(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]
-  Symbol.iterator in obj;
-}
-function areIterablesEqual(a, b, comparator) {
-  const iterator1 = a[Symbol.iterator]();
-  const iterator2 = b[Symbol.iterator]();
-  while (true) {
-    const item1 = iterator1.next();
-    const item2 = iterator2.next();
-    if (item1.done && item2.done) return true;
-    if (item1.done || item2.done) return false;
-    if (!comparator(item1.value, item2.value)) return false;
-  }
-}
-function iterateListLike(obj, fn) {
-  if (Array.isArray(obj)) {
-    for (let i = 0; i < obj.length; i++) {
-      fn(obj[i]);
-    }
-  } else {
-    const iterator2 = obj[Symbol.iterator]();
-    let item;
-    while (!(item = iterator2.next()).done) {
-      fn(item.value);
-    }
-  }
-}
-function isJsObject(o) {
-  return o !== null && (typeof o === "function" || typeof o === "object");
-}
-function devModeEqual(a, b) {
-  const isListLikeIterableA = isListLikeIterable(a);
-  const isListLikeIterableB = isListLikeIterable(b);
-  if (isListLikeIterableA && isListLikeIterableB) {
-    return areIterablesEqual(a, b, devModeEqual);
-  } else {
-    const isAObject = a && (typeof a === "object" || typeof a === "function");
-    const isBObject = b && (typeof b === "object" || typeof b === "function");
-    if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
-      return true;
-    } else {
-      return Object.is(a, b);
-    }
-  }
-}
-function updateBinding(lView, bindingIndex, value) {
-  return lView[bindingIndex] = value;
-}
-function getBinding(lView, bindingIndex) {
-  ngDevMode && assertIndexInRange(lView, bindingIndex);
-  ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, "Stored value should never be NO_CHANGE.");
-  return lView[bindingIndex];
-}
-function bindingUpdated(lView, bindingIndex, value) {
-  ngDevMode && assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-  ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
-  const oldValue = lView[bindingIndex];
-  if (Object.is(oldValue, value)) {
-    return false;
-  } else {
-    if (ngDevMode && isInCheckNoChangesMode()) {
-      const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : void 0;
-      if (!devModeEqual(oldValueToCompare, value)) {
-        const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
-        throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);
-      }
-      return false;
-    }
-    lView[bindingIndex] = value;
-    return true;
-  }
-}
-function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
-  const different = bindingUpdated(lView, bindingIndex, exp1);
-  return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
-}
-function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
-  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
-  return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
-}
-function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
-  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
-  return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
-}
-function isDetachedByI18n(tNode) {
-  return (tNode.flags & 32) === 32;
-}
-function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const tNode = getOrCreateTNode(tView, index, 4, tagName || null, attrs || null);
-  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
-  registerPostOrderHooks(tView, tNode);
-  const embeddedTView = tNode.tView = createTView(
-    2,
-    tNode,
-    templateFn,
-    decls,
-    vars,
-    tView.directiveRegistry,
-    tView.pipeRegistry,
-    null,
-    tView.schemas,
-    tViewConsts,
-    null
-    /* ssrId */
-  );
-  if (tView.queries !== null) {
-    tView.queries.template(tView, tNode);
-    embeddedTView.queries = tView.queries.embeddedTView(tNode);
-  }
-  return tNode;
-}
-function declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = declarationTView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, declarationTView, declarationLView, templateFn, decls, vars, tagName, attrs, localRefsIndex) : declarationTView.data[adjustedIndex];
-  setCurrentTNode(tNode, false);
-  const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);
-  if (wasLastNodeCreated()) {
-    appendChild(declarationTView, declarationLView, comment, tNode);
-  }
-  attachPatchData(comment, declarationLView);
-  const lContainer = createLContainer(comment, declarationLView, comment, tNode);
-  declarationLView[adjustedIndex] = lContainer;
-  addToEndOfViewTree(declarationLView, lContainer);
-  populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);
-  if (isDirectiveHost(tNode)) {
-    createDirectivesInstances(declarationTView, declarationLView, tNode);
-  }
-  if (localRefsIndex != null) {
-    saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);
-  }
-  return tNode;
-}
-function ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
-  const lView = getLView();
-  const tView = getTView();
-  const attrs = getConstant(tView.consts, attrsIndex);
-  declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor);
-  return ɵɵtemplate;
-}
-var _locateOrCreateContainerAnchor = createContainerAnchorImpl;
-function createContainerAnchorImpl(tView, lView, tNode, index) {
-  lastNodeWasCreated(true);
-  return lView[RENDERER].createComment(ngDevMode ? "container" : "");
-}
-function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createContainerAnchorImpl(tView, lView, tNode, index);
-  }
-  const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;
-  if (ssrId !== null && tNode.tView !== null) {
-    if (tNode.tView.ssrId === null) {
-      tNode.tView.ssrId = ssrId;
-    } else {
-      ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, "Unexpected value of the `ssrId` for this TView");
-    }
-  }
-  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateNodeExists(currentRNode, lView, tNode);
-  setSegmentHead(hydrationInfo, index, currentRNode);
-  const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);
-  const comment = siblingAfter(viewContainerSize, currentRNode);
-  if (ngDevMode) {
-    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);
-    markRNodeAsClaimedByHydration(comment);
-  }
-  return comment;
-}
-function enableLocateOrCreateContainerAnchorImpl() {
-  _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;
-}
-function onIdle(callback, injector) {
-  const scheduler = injector.get(IdleScheduler);
-  const cleanupFn = () => scheduler.remove(callback);
-  scheduler.add(callback);
-  return cleanupFn;
-}
-var _requestIdleCallback = () => typeof requestIdleCallback !== "undefined" ? requestIdleCallback : setTimeout;
-var _cancelIdleCallback = () => typeof requestIdleCallback !== "undefined" ? cancelIdleCallback : clearTimeout;
-var IdleScheduler = class _IdleScheduler {
-  // Indicates whether current callbacks are being invoked.
-  executingCallbacks = false;
-  // Currently scheduled idle callback id.
-  idleId = null;
-  // Set of callbacks to be invoked next.
-  current = /* @__PURE__ */ new Set();
-  // Set of callbacks collected while invoking current set of callbacks.
-  // Those callbacks are scheduled for the next idle period.
-  deferred = /* @__PURE__ */ new Set();
-  ngZone = inject(NgZone);
-  requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);
-  cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);
-  add(callback) {
-    const target = this.executingCallbacks ? this.deferred : this.current;
-    target.add(callback);
-    if (this.idleId === null) {
-      this.scheduleIdleCallback();
-    }
-  }
-  remove(callback) {
-    const {
-      current,
-      deferred
-    } = this;
-    current.delete(callback);
-    deferred.delete(callback);
-    if (current.size === 0 && deferred.size === 0) {
-      this.cancelIdleCallback();
-    }
-  }
-  scheduleIdleCallback() {
-    const callback = () => {
-      this.cancelIdleCallback();
-      this.executingCallbacks = true;
-      for (const callback2 of this.current) {
-        callback2();
-      }
-      this.current.clear();
-      this.executingCallbacks = false;
-      if (this.deferred.size > 0) {
-        for (const callback2 of this.deferred) {
-          this.current.add(callback2);
-        }
-        this.deferred.clear();
-        this.scheduleIdleCallback();
-      }
-    };
-    this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));
-  }
-  cancelIdleCallback() {
-    if (this.idleId !== null) {
-      this.cancelIdleCallbackFn(this.idleId);
-      this.idleId = null;
-    }
-  }
-  ngOnDestroy() {
-    this.cancelIdleCallback();
-    this.current.clear();
-    this.deferred.clear();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _IdleScheduler,
-      providedIn: "root",
-      factory: () => new _IdleScheduler()
-    })
-  );
-};
-function onTimer(delay2) {
-  return (callback, injector) => scheduleTimerTrigger(delay2, callback, injector);
-}
-function scheduleTimerTrigger(delay2, callback, injector) {
-  const scheduler = injector.get(TimerScheduler);
-  const cleanupFn = () => scheduler.remove(callback);
-  scheduler.add(delay2, callback);
-  return cleanupFn;
-}
-var TimerScheduler = class _TimerScheduler {
-  // Indicates whether current callbacks are being invoked.
-  executingCallbacks = false;
-  // Currently scheduled `setTimeout` id.
-  timeoutId = null;
-  // When currently scheduled timer would fire.
-  invokeTimerAt = null;
-  // List of callbacks to be invoked.
-  // For each callback we also store a timestamp on when the callback
-  // should be invoked. We store timestamps and callback functions
-  // in a flat array to avoid creating new objects for each entry.
-  // [timestamp1, callback1, timestamp2, callback2, ...]
-  current = [];
-  // List of callbacks collected while invoking current set of callbacks.
-  // Those callbacks are added to the "current" queue at the end of
-  // the current callback invocation. The shape of this list is the same
-  // as the shape of the `current` list.
-  deferred = [];
-  add(delay2, callback) {
-    const target = this.executingCallbacks ? this.deferred : this.current;
-    this.addToQueue(target, Date.now() + delay2, callback);
-    this.scheduleTimer();
-  }
-  remove(callback) {
-    const {
-      current,
-      deferred
-    } = this;
-    const callbackIndex = this.removeFromQueue(current, callback);
-    if (callbackIndex === -1) {
-      this.removeFromQueue(deferred, callback);
-    }
-    if (current.length === 0 && deferred.length === 0) {
-      this.clearTimeout();
-    }
-  }
-  addToQueue(target, invokeAt, callback) {
-    let insertAtIndex = target.length;
-    for (let i = 0; i < target.length; i += 2) {
-      const invokeQueuedCallbackAt = target[i];
-      if (invokeQueuedCallbackAt > invokeAt) {
-        insertAtIndex = i;
-        break;
-      }
-    }
-    arrayInsert2(target, insertAtIndex, invokeAt, callback);
-  }
-  removeFromQueue(target, callback) {
-    let index = -1;
-    for (let i = 0; i < target.length; i += 2) {
-      const queuedCallback = target[i + 1];
-      if (queuedCallback === callback) {
-        index = i;
-        break;
-      }
-    }
-    if (index > -1) {
-      arraySplice(target, index, 2);
-    }
-    return index;
-  }
-  scheduleTimer() {
-    const callback = () => {
-      this.clearTimeout();
-      this.executingCallbacks = true;
-      const current = [...this.current];
-      const now = Date.now();
-      for (let i = 0; i < current.length; i += 2) {
-        const invokeAt = current[i];
-        const callback2 = current[i + 1];
-        if (invokeAt <= now) {
-          callback2();
-        } else {
-          break;
-        }
-      }
-      let lastCallbackIndex = -1;
-      for (let i = 0; i < this.current.length; i += 2) {
-        const invokeAt = this.current[i];
-        if (invokeAt <= now) {
-          lastCallbackIndex = i + 1;
-        } else {
-          break;
-        }
-      }
-      if (lastCallbackIndex >= 0) {
-        arraySplice(this.current, 0, lastCallbackIndex + 1);
-      }
-      this.executingCallbacks = false;
-      if (this.deferred.length > 0) {
-        for (let i = 0; i < this.deferred.length; i += 2) {
-          const invokeAt = this.deferred[i];
-          const callback2 = this.deferred[i + 1];
-          this.addToQueue(this.current, invokeAt, callback2);
-        }
-        this.deferred.length = 0;
-      }
-      this.scheduleTimer();
-    };
-    const FRAME_DURATION_MS = 16;
-    if (this.current.length > 0) {
-      const now = Date.now();
-      const invokeAt = this.current[0];
-      if (this.timeoutId === null || // Reschedule a timer in case a queue contains an item with
-      // an earlier timestamp and the delta is more than an average
-      // frame duration.
-      this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {
-        this.clearTimeout();
-        const timeout2 = Math.max(invokeAt - now, FRAME_DURATION_MS);
-        this.invokeTimerAt = invokeAt;
-        this.timeoutId = setTimeout(callback, timeout2);
-      }
-    }
-  }
-  clearTimeout() {
-    if (this.timeoutId !== null) {
-      clearTimeout(this.timeoutId);
-      this.timeoutId = null;
-    }
-  }
-  ngOnDestroy() {
-    this.clearTimeout();
-    this.current.length = 0;
-    this.deferred.length = 0;
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _TimerScheduler,
-      providedIn: "root",
-      factory: () => new _TimerScheduler()
-    })
-  );
-};
-var CachedInjectorService = class _CachedInjectorService {
-  cachedInjectors = /* @__PURE__ */ new Map();
-  getOrCreateInjector(key, parentInjector, providers, debugName) {
-    if (!this.cachedInjectors.has(key)) {
-      const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;
-      this.cachedInjectors.set(key, injector);
-    }
-    return this.cachedInjectors.get(key);
-  }
-  ngOnDestroy() {
-    try {
-      for (const injector of this.cachedInjectors.values()) {
-        if (injector !== null) {
-          injector.destroy();
-        }
-      }
-    } finally {
-      this.cachedInjectors.clear();
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _CachedInjectorService,
-      providedIn: "environment",
-      factory: () => new _CachedInjectorService()
-    })
-  );
-};
-var DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken("DEFER_BLOCK_DEPENDENCY_INTERCEPTOR");
-var DEFER_BLOCK_CONFIG = new InjectionToken(ngDevMode ? "DEFER_BLOCK_CONFIG" : "");
-function getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {
-  return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? "DeferBlock Injector" : "");
-}
-function createDeferBlockInjector(parentInjector, tDetails, providers) {
-  if (parentInjector instanceof ChainedInjector) {
-    const origInjector = parentInjector.injector;
-    const parentEnvInjector2 = parentInjector.parentInjector;
-    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector2, tDetails, providers);
-    return new ChainedInjector(origInjector, envInjector);
-  }
-  const parentEnvInjector = parentInjector.get(EnvironmentInjector);
-  if (parentEnvInjector !== parentInjector) {
-    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);
-    return new ChainedInjector(parentInjector, envInjector);
-  }
-  return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);
-}
-function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {
-  const hostLView = lContainer[PARENT];
-  const hostTView = hostLView[TVIEW];
-  if (isDestroyed(hostLView)) return;
-  ngDevMode && assertTNodeForLView(tNode, hostLView);
-  const lDetails = getLDeferBlockDetails(hostLView, tNode);
-  ngDevMode && assertDefined(lDetails, "Expected a defer block state defined");
-  const currentState = lDetails[DEFER_BLOCK_STATE];
-  const ssrState = lDetails[SSR_BLOCK_STATE];
-  if (ssrState !== null && newState < ssrState) {
-    return;
-  }
-  if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {
-    const tDetails = getTDeferBlockDetails(hostTView, tNode);
-    const needsScheduling = !skipTimerScheduling && true && (getLoadingBlockAfter(tDetails) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Loading) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Placeholder));
-    if (ngDevMode && needsScheduling) {
-      assertDefined(applyDeferBlockStateWithSchedulingImpl, "Expected scheduling function to be defined");
-    }
-    const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;
-    try {
-      applyStateFn(newState, lDetails, lContainer, tNode, hostLView);
-    } catch (error) {
-      handleError(hostLView, error);
-    }
-  }
-}
-function findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {
-  return lContainer[DEHYDRATED_VIEWS]?.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null;
-}
-function applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {
-  const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);
-  if (stateTmplIndex !== null) {
-    lDetails[DEFER_BLOCK_STATE] = newState;
-    const hostTView = hostLView[TVIEW];
-    const adjustedIndex = stateTmplIndex + HEADER_OFFSET;
-    const activeBlockTNode = getTNode(hostTView, adjustedIndex);
-    const viewIndex = 0;
-    removeLViewFromLContainer(lContainer, viewIndex);
-    let injector;
-    if (newState === DeferBlockState.Complete) {
-      const tDetails = getTDeferBlockDetails(hostTView, tNode);
-      const providers = tDetails.providers;
-      if (providers && providers.length > 0) {
-        injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);
-      }
-    }
-    const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);
-    lContainer[DEHYDRATED_VIEWS] = null;
-    const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
-      injector,
-      dehydratedView
-    });
-    addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
-    markViewDirty(
-      embeddedLView,
-      2
-      /* NotificationSource.DeferBlockStateUpdate */
-    );
-    if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {
-      for (const callback of lDetails[ON_COMPLETE_FNS]) {
-        callback();
-      }
-      lDetails[ON_COMPLETE_FNS] = null;
-    }
-  }
-}
-function applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {
-  const now = Date.now();
-  const hostTView = hostLView[TVIEW];
-  const tDetails = getTDeferBlockDetails(hostTView, tNode);
-  if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {
-    lDetails[STATE_IS_FROZEN_UNTIL] = null;
-    const loadingAfter = getLoadingBlockAfter(tDetails);
-    const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;
-    if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {
-      lDetails[NEXT_DEFER_BLOCK_STATE] = newState;
-      const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);
-      lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;
-    } else {
-      if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {
-        lDetails[LOADING_AFTER_CLEANUP_FN]();
-        lDetails[LOADING_AFTER_CLEANUP_FN] = null;
-        lDetails[NEXT_DEFER_BLOCK_STATE] = null;
-      }
-      applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);
-      const duration = getMinimumDurationForState(tDetails, newState);
-      if (duration !== null) {
-        lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;
-        scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);
-      }
-    }
-  } else {
-    lDetails[NEXT_DEFER_BLOCK_STATE] = newState;
-  }
-}
-function scheduleDeferBlockUpdate(timeout2, lDetails, tNode, lContainer, hostLView) {
-  const callback = () => {
-    const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];
-    lDetails[STATE_IS_FROZEN_UNTIL] = null;
-    lDetails[NEXT_DEFER_BLOCK_STATE] = null;
-    if (nextState !== null) {
-      renderDeferBlockState(nextState, tNode, lContainer);
-    }
-  };
-  return scheduleTimerTrigger(timeout2, callback, hostLView[INJECTOR]);
-}
-function isValidStateChange(currentState, newState) {
-  return currentState < newState;
-}
-function renderPlaceholder(lView, tNode) {
-  const lContainer = lView[tNode.index];
-  ngDevMode && assertLContainer(lContainer);
-  renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);
-}
-function renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {
-  ngDevMode && assertDefined(tDetails.loadingPromise, "Expected loading Promise to exist on this defer block");
-  tDetails.loadingPromise.then(() => {
-    if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {
-      ngDevMode && assertDeferredDependenciesLoaded(tDetails);
-      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
-    } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {
-      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
-    }
-  });
-}
-var applyDeferBlockStateWithSchedulingImpl = null;
-function ɵɵdeferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {
-  const tViewConsts = tView.consts;
-  if (placeholderConfigIndex != null) {
-    tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);
-  }
-  if (loadingConfigIndex != null) {
-    tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);
-  }
-  if (applyDeferBlockStateWithSchedulingImpl === null) {
-    applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;
-  }
-}
-var ASYNC_COMPONENT_METADATA_FN = "__ngAsyncComponentMetadataFn__";
-function getAsyncClassMetadataFn(type) {
-  const componentClass = type;
-  return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;
-}
-function setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {
-  const componentClass = type;
-  componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then((dependencies) => {
-    metadataSetterFn(...dependencies);
-    componentClass[ASYNC_COMPONENT_METADATA_FN] = null;
-    return dependencies;
-  });
-  return componentClass[ASYNC_COMPONENT_METADATA_FN];
-}
-function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
-  return noSideEffects(() => {
-    const clazz = type;
-    if (decorators !== null) {
-      if (clazz.hasOwnProperty("decorators") && clazz.decorators !== void 0) {
-        clazz.decorators.push(...decorators);
-      } else {
-        clazz.decorators = decorators;
-      }
-    }
-    if (ctorParameters !== null) {
-      clazz.ctorParameters = ctorParameters;
-    }
-    if (propDecorators !== null) {
-      if (clazz.hasOwnProperty("propDecorators") && clazz.propDecorators !== void 0) {
-        clazz.propDecorators = __spreadValues(__spreadValues({}, clazz.propDecorators), propDecorators);
-      } else {
-        clazz.propDecorators = propDecorators;
-      }
-    }
-  });
-}
-var Console = class _Console {
-  log(message) {
-    console.log(message);
-  }
-  // Note: for reporting errors use `DOM.logError()` as it is platform specific
-  warn(message) {
-    console.warn(message);
-  }
-  static ɵfac = function Console_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Console)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Console,
-    factory: _Console.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Console, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], null, null);
-})();
-var DIDebugData = class {
-  resolverToTokenToDependencies = /* @__PURE__ */ new WeakMap();
-  resolverToProviders = /* @__PURE__ */ new WeakMap();
-  standaloneInjectorToComponent = /* @__PURE__ */ new WeakMap();
-  reset() {
-    this.resolverToTokenToDependencies = /* @__PURE__ */ new WeakMap();
-    this.resolverToProviders = /* @__PURE__ */ new WeakMap();
-    this.standaloneInjectorToComponent = /* @__PURE__ */ new WeakMap();
-  }
-};
-var frameworkDIDebugData = new DIDebugData();
-function getFrameworkDIDebugData() {
-  return frameworkDIDebugData;
-}
-function setupFrameworkInjectorProfiler() {
-  frameworkDIDebugData.reset();
-  setInjectorProfiler((injectorProfilerEvent) => handleInjectorProfilerEvent(injectorProfilerEvent));
-}
-function handleInjectorProfilerEvent(injectorProfilerEvent) {
-  const {
-    context: context2,
-    type
-  } = injectorProfilerEvent;
-  if (type === 0) {
-    handleInjectEvent(context2, injectorProfilerEvent.service);
-  } else if (type === 1) {
-    handleInstanceCreatedByInjectorEvent(context2, injectorProfilerEvent.instance);
-  } else if (type === 2) {
-    handleProviderConfiguredEvent(context2, injectorProfilerEvent.providerRecord);
-  }
-}
-function handleInjectEvent(context2, data) {
-  const diResolver = getDIResolver(context2.injector);
-  if (diResolver === null) {
-    throwError2("An Inject event must be run within an injection context.");
-  }
-  const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;
-  if (!diResolverToInstantiatedToken.has(diResolver)) {
-    diResolverToInstantiatedToken.set(diResolver, /* @__PURE__ */ new WeakMap());
-  }
-  if (!canBeHeldWeakly(context2.token)) {
-    return;
-  }
-  const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);
-  if (!instantiatedTokenToDependencies.has(context2.token)) {
-    instantiatedTokenToDependencies.set(context2.token, []);
-  }
-  const {
-    token,
-    value,
-    flags
-  } = data;
-  assertDefined(context2.token, "Injector profiler context token is undefined.");
-  const dependencies = instantiatedTokenToDependencies.get(context2.token);
-  assertDefined(dependencies, "Could not resolve dependencies for token.");
-  if (context2.injector instanceof NodeInjector) {
-    dependencies.push({
-      token,
-      value,
-      flags,
-      injectedIn: getNodeInjectorContext(context2.injector)
-    });
-  } else {
-    dependencies.push({
-      token,
-      value,
-      flags
-    });
-  }
-}
-function getNodeInjectorContext(injector) {
-  if (!(injector instanceof NodeInjector)) {
-    throwError2("getNodeInjectorContext must be called with a NodeInjector");
-  }
-  const lView = getNodeInjectorLView(injector);
-  const tNode = getNodeInjectorTNode(injector);
-  if (tNode === null) {
-    return;
-  }
-  assertTNodeForLView(tNode, lView);
-  return {
-    lView,
-    tNode
-  };
-}
-function handleInstanceCreatedByInjectorEvent(context2, data) {
-  const {
-    value
-  } = data;
-  if (getDIResolver(context2.injector) === null) {
-    throwError2("An InjectorCreatedInstance event must be run within an injection context.");
-  }
-  let standaloneComponent = void 0;
-  if (typeof value === "object") {
-    standaloneComponent = value?.constructor;
-  }
-  if (standaloneComponent == void 0 || !isStandaloneComponent(standaloneComponent)) {
-    return;
-  }
-  const environmentInjector = context2.injector.get(EnvironmentInjector, null, {
-    optional: true
-  });
-  if (environmentInjector === null) {
-    return;
-  }
-  const {
-    standaloneInjectorToComponent
-  } = frameworkDIDebugData;
-  if (standaloneInjectorToComponent.has(environmentInjector)) {
-    return;
-  }
-  standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);
-}
-function isStandaloneComponent(value) {
-  const def = getComponentDef(value);
-  return !!def?.standalone;
-}
-function handleProviderConfiguredEvent(context2, data) {
-  const {
-    resolverToProviders
-  } = frameworkDIDebugData;
-  let diResolver;
-  if (context2?.injector instanceof NodeInjector) {
-    diResolver = getNodeInjectorTNode(context2.injector);
-  } else {
-    diResolver = context2.injector;
-  }
-  if (diResolver === null) {
-    throwError2("A ProviderConfigured event must be run within an injection context.");
-  }
-  if (!resolverToProviders.has(diResolver)) {
-    resolverToProviders.set(diResolver, []);
-  }
-  resolverToProviders.get(diResolver).push(data);
-}
-function getDIResolver(injector) {
-  let diResolver = null;
-  if (injector === void 0) {
-    return diResolver;
-  }
-  if (injector instanceof NodeInjector) {
-    diResolver = getNodeInjectorLView(injector);
-  } else {
-    diResolver = injector;
-  }
-  return diResolver;
-}
-function canBeHeldWeakly(value) {
-  return value !== null && (typeof value === "object" || typeof value === "function" || typeof value === "symbol");
-}
-function applyChanges(component) {
-  ngDevMode && assertDefined(component, "component");
-  markViewDirty(
-    getComponentViewByInstance(component),
-    3
-    /* NotificationSource.DebugApplyChanges */
-  );
-  getRootComponents(component).forEach((rootComponent) => detectChanges(rootComponent));
-}
-function detectChanges(component) {
-  const view = getComponentViewByInstance(component);
-  view[FLAGS] |= 1024;
-  detectChangesInternal(view);
-}
-function getDependenciesFromInjectable(injector, token) {
-  const instance = injector.get(token, null, {
-    self: true,
-    optional: true
-  });
-  if (instance === null) {
-    throw new Error(`Unable to determine instance of ${token} in given injector`);
-  }
-  const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);
-  const resolutionPath = getInjectorResolutionPath(injector);
-  const dependencies = unformattedDependencies.map((dep) => {
-    const formattedDependency = {
-      value: dep.value
-    };
-    const flags = dep.flags;
-    formattedDependency.flags = {
-      optional: (8 & flags) === 8,
-      host: (1 & flags) === 1,
-      self: (2 & flags) === 2,
-      skipSelf: (4 & flags) === 4
-      /* InternalInjectFlags.SkipSelf */
-    };
-    for (let i = 0; i < resolutionPath.length; i++) {
-      const injectorToCheck = resolutionPath[i];
-      if (i === 0 && formattedDependency.flags.skipSelf) {
-        continue;
-      }
-      if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {
-        break;
-      }
-      const instance2 = injectorToCheck.get(dep.token, null, {
-        self: true,
-        optional: true
-      });
-      if (instance2 !== null) {
-        if (formattedDependency.flags.host) {
-          const firstInjector = resolutionPath[0];
-          const lookupFromFirstInjector = firstInjector.get(dep.token, null, __spreadProps(__spreadValues({}, formattedDependency.flags), {
-            optional: true
-          }));
-          if (lookupFromFirstInjector !== null) {
-            formattedDependency.providedIn = injectorToCheck;
-          }
-          break;
-        }
-        formattedDependency.providedIn = injectorToCheck;
-        break;
-      }
-      if (i === 0 && formattedDependency.flags.self) {
-        break;
-      }
-    }
-    if (dep.token) formattedDependency.token = dep.token;
-    return formattedDependency;
-  });
-  return {
-    instance,
-    dependencies
-  };
-}
-function getDependenciesForTokenInInjector(token, injector) {
-  const {
-    resolverToTokenToDependencies
-  } = getFrameworkDIDebugData();
-  if (!(injector instanceof NodeInjector)) {
-    return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];
-  }
-  const lView = getNodeInjectorLView(injector);
-  const tokenDependencyMap = resolverToTokenToDependencies.get(lView);
-  const dependencies = tokenDependencyMap?.get(token) ?? [];
-  return dependencies.filter((dependency) => {
-    const dependencyNode = dependency.injectedIn?.tNode;
-    if (dependencyNode === void 0) {
-      return false;
-    }
-    const instanceNode = getNodeInjectorTNode(injector);
-    assertTNode(dependencyNode);
-    assertTNode(instanceNode);
-    return dependencyNode === instanceNode;
-  });
-}
-function getProviderImportsContainer(injector) {
-  const {
-    standaloneInjectorToComponent
-  } = getFrameworkDIDebugData();
-  if (standaloneInjectorToComponent.has(injector)) {
-    return standaloneInjectorToComponent.get(injector);
-  }
-  const defTypeRef = injector.get(NgModuleRef$1, null, {
-    self: true,
-    optional: true
-  });
-  if (defTypeRef === null) {
-    return null;
-  }
-  if (defTypeRef.instance === null) {
-    return null;
-  }
-  return defTypeRef.instance.constructor;
-}
-function getNodeInjectorProviders(injector) {
-  const diResolver = getNodeInjectorTNode(injector);
-  const {
-    resolverToProviders
-  } = getFrameworkDIDebugData();
-  return resolverToProviders.get(diResolver) ?? [];
-}
-function getProviderImportPaths(providerImportsContainer) {
-  const providerToPath = /* @__PURE__ */ new Map();
-  const visitedContainers = /* @__PURE__ */ new Set();
-  const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);
-  walkProviderTree(providerImportsContainer, visitor, [], /* @__PURE__ */ new Set());
-  return providerToPath;
-}
-function walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {
-  return (provider, container) => {
-    if (!providerToPath.has(provider)) {
-      providerToPath.set(provider, [container]);
-    }
-    if (!visitedContainers.has(container)) {
-      for (const prov of providerToPath.keys()) {
-        const existingImportPath = providerToPath.get(prov);
-        let containerDef = getInjectorDef(container);
-        if (!containerDef) {
-          const ngModule = container.ngModule;
-          containerDef = getInjectorDef(ngModule);
-        }
-        if (!containerDef) {
-          return;
-        }
-        const lastContainerAddedToPath = existingImportPath[0];
-        let isNextStepInPath = false;
-        deepForEach(containerDef.imports, (moduleImport) => {
-          if (isNextStepInPath) {
-            return;
-          }
-          isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;
-          if (isNextStepInPath) {
-            providerToPath.get(prov)?.unshift(container);
-          }
-        });
-      }
-    }
-    visitedContainers.add(container);
-  };
-}
-function getEnvironmentInjectorProviders(injector) {
-  const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];
-  if (isPlatformInjector(injector)) {
-    return providerRecordsWithoutImportPaths;
-  }
-  const providerImportsContainer = getProviderImportsContainer(injector);
-  if (providerImportsContainer === null) {
-    return providerRecordsWithoutImportPaths;
-  }
-  const providerToPath = getProviderImportPaths(providerImportsContainer);
-  const providerRecords = [];
-  for (const providerRecord of providerRecordsWithoutImportPaths) {
-    const provider = providerRecord.provider;
-    const token = provider.provide;
-    if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {
-      continue;
-    }
-    let importPath = providerToPath.get(provider) ?? [];
-    const def = getComponentDef(providerImportsContainer);
-    const isStandaloneComponent2 = !!def?.standalone;
-    if (isStandaloneComponent2) {
-      importPath = [providerImportsContainer, ...importPath];
-    }
-    providerRecords.push(__spreadProps(__spreadValues({}, providerRecord), {
-      importPath
-    }));
-  }
-  return providerRecords;
-}
-function isPlatformInjector(injector) {
-  return injector instanceof R3Injector && injector.scopes.has("platform");
-}
-function getInjectorProviders(injector) {
-  if (injector instanceof NodeInjector) {
-    return getNodeInjectorProviders(injector);
-  } else if (injector instanceof EnvironmentInjector) {
-    return getEnvironmentInjectorProviders(injector);
-  }
-  throwError2("getInjectorProviders only supports NodeInjector and EnvironmentInjector");
-}
-function getInjectorMetadata(injector) {
-  if (injector instanceof NodeInjector) {
-    const lView = getNodeInjectorLView(injector);
-    const tNode = getNodeInjectorTNode(injector);
-    assertTNodeForLView(tNode, lView);
-    return {
-      type: "element",
-      source: getNativeByTNode(tNode, lView)
-    };
-  }
-  if (injector instanceof R3Injector) {
-    return {
-      type: "environment",
-      source: injector.source ?? null
-    };
-  }
-  if (injector instanceof NullInjector) {
-    return {
-      type: "null",
-      source: null
-    };
-  }
-  return null;
-}
-function getInjectorResolutionPath(injector) {
-  const resolutionPath = [injector];
-  getInjectorResolutionPathHelper(injector, resolutionPath);
-  return resolutionPath;
-}
-function getInjectorResolutionPathHelper(injector, resolutionPath) {
-  const parent = getInjectorParent(injector);
-  if (parent === null) {
-    if (injector instanceof NodeInjector) {
-      const firstInjector = resolutionPath[0];
-      if (firstInjector instanceof NodeInjector) {
-        const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);
-        if (moduleInjector === null) {
-          throwError2("NodeInjector must have some connection to the module injector tree");
-        }
-        resolutionPath.push(moduleInjector);
-        getInjectorResolutionPathHelper(moduleInjector, resolutionPath);
-      }
-      return resolutionPath;
-    }
-  } else {
-    resolutionPath.push(parent);
-    getInjectorResolutionPathHelper(parent, resolutionPath);
-  }
-  return resolutionPath;
-}
-function getInjectorParent(injector) {
-  if (injector instanceof R3Injector) {
-    const parent = injector.parent;
-    if (isRouterOutletInjector(parent)) {
-      return parent.parentInjector;
-    }
-    return parent;
-  }
-  let tNode;
-  let lView;
-  if (injector instanceof NodeInjector) {
-    tNode = getNodeInjectorTNode(injector);
-    lView = getNodeInjectorLView(injector);
-  } else if (injector instanceof NullInjector) {
-    return null;
-  } else if (injector instanceof ChainedInjector) {
-    return injector.parentInjector;
-  } else {
-    throwError2("getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector");
-  }
-  const parentLocation = getParentInjectorLocation(tNode, lView);
-  if (hasParentInjector(parentLocation)) {
-    const parentInjectorIndex = getParentInjectorIndex(parentLocation);
-    const parentLView = getParentInjectorView(parentLocation, lView);
-    const parentTView = parentLView[TVIEW];
-    const parentTNode = parentTView.data[
-      parentInjectorIndex + 8
-      /* NodeInjectorOffset.TNODE */
-    ];
-    return new NodeInjector(parentTNode, parentLView);
-  } else {
-    const chainedInjector = lView[INJECTOR];
-    const injectorParent = chainedInjector.injector?.parent;
-    if (injectorParent instanceof NodeInjector) {
-      return injectorParent;
-    }
-  }
-  return null;
-}
-function getModuleInjectorOfNodeInjector(injector) {
-  let lView;
-  if (injector instanceof NodeInjector) {
-    lView = getNodeInjectorLView(injector);
-  } else {
-    throwError2("getModuleInjectorOfNodeInjector must be called with a NodeInjector");
-  }
-  const inj = lView[INJECTOR];
-  const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;
-  if (!moduleInjector) {
-    throwError2("NodeInjector must have some connection to the module injector tree");
-  }
-  return moduleInjector;
-}
-var GLOBAL_PUBLISH_EXPANDO_KEY = "ng";
-var globalUtilsFunctions = {
-  /**
-   * Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon
-   * in application's code. The contract of those functions might be changed in any release and/or a
-   * function can be removed completely.
-   */
-  "ɵgetDependenciesFromInjectable": getDependenciesFromInjectable,
-  "ɵgetInjectorProviders": getInjectorProviders,
-  "ɵgetInjectorResolutionPath": getInjectorResolutionPath,
-  "ɵgetInjectorMetadata": getInjectorMetadata,
-  "ɵsetProfiler": setProfiler,
-  "getDirectiveMetadata": getDirectiveMetadata$1,
-  "getComponent": getComponent,
-  "getContext": getContext,
-  "getListeners": getListeners,
-  "getOwningComponent": getOwningComponent,
-  "getHostElement": getHostElement,
-  "getInjector": getInjector,
-  "getRootComponents": getRootComponents,
-  "getDirectives": getDirectives,
-  "applyChanges": applyChanges,
-  "isSignal": isSignal
-};
-var _published = false;
-function publishDefaultGlobalUtils$1() {
-  if (!_published) {
-    _published = true;
-    if (typeof window !== "undefined") {
-      setupFrameworkInjectorProfiler();
-    }
-    for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {
-      publishGlobalUtil(methodName, method);
-    }
-  }
-}
-function publishGlobalUtil(name, fn) {
-  publishUtil(name, fn);
-}
-function publishExternalGlobalUtil(name, fn) {
-  publishUtil(name, fn);
-}
-function publishUtil(name, fn) {
-  if (typeof COMPILED === "undefined" || !COMPILED) {
-    const w = _global;
-    ngDevMode && assertDefined(fn, "function not defined");
-    w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};
-    w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;
-  }
-}
-var TESTABILITY = new InjectionToken("");
-var TESTABILITY_GETTER = new InjectionToken("");
-var Testability = class _Testability {
-  _ngZone;
-  registry;
-  _isZoneStable = true;
-  _callbacks = [];
-  taskTrackingZone = null;
-  constructor(_ngZone, registry, testabilityGetter) {
-    this._ngZone = _ngZone;
-    this.registry = registry;
-    if (!_testabilityGetter) {
-      setTestabilityGetter(testabilityGetter);
-      testabilityGetter.addToWindow(registry);
-    }
-    this._watchAngularEvents();
-    _ngZone.run(() => {
-      this.taskTrackingZone = typeof Zone == "undefined" ? null : Zone.current.get("TaskTrackingZone");
-    });
-  }
-  _watchAngularEvents() {
-    this._ngZone.onUnstable.subscribe({
-      next: () => {
-        this._isZoneStable = false;
-      }
-    });
-    this._ngZone.runOutsideAngular(() => {
-      this._ngZone.onStable.subscribe({
-        next: () => {
-          NgZone.assertNotInAngularZone();
-          queueMicrotask(() => {
-            this._isZoneStable = true;
-            this._runCallbacksIfReady();
-          });
-        }
-      });
-    });
-  }
-  /**
-   * Whether an associated application is stable
-   */
-  isStable() {
-    return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;
-  }
-  _runCallbacksIfReady() {
-    if (this.isStable()) {
-      queueMicrotask(() => {
-        while (this._callbacks.length !== 0) {
-          let cb = this._callbacks.pop();
-          clearTimeout(cb.timeoutId);
-          cb.doneCb();
-        }
-      });
-    } else {
-      let pending = this.getPendingTasks();
-      this._callbacks = this._callbacks.filter((cb) => {
-        if (cb.updateCb && cb.updateCb(pending)) {
-          clearTimeout(cb.timeoutId);
-          return false;
-        }
-        return true;
-      });
-    }
-  }
-  getPendingTasks() {
-    if (!this.taskTrackingZone) {
-      return [];
-    }
-    return this.taskTrackingZone.macroTasks.map((t) => {
-      return {
-        source: t.source,
-        // From TaskTrackingZone:
-        // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40
-        creationLocation: t.creationLocation,
-        data: t.data
-      };
-    });
-  }
-  addCallback(cb, timeout2, updateCb) {
-    let timeoutId = -1;
-    if (timeout2 && timeout2 > 0) {
-      timeoutId = setTimeout(() => {
-        this._callbacks = this._callbacks.filter((cb2) => cb2.timeoutId !== timeoutId);
-        cb();
-      }, timeout2);
-    }
-    this._callbacks.push({
-      doneCb: cb,
-      timeoutId,
-      updateCb
-    });
-  }
-  /**
-   * Wait for the application to be stable with a timeout. If the timeout is reached before that
-   * happens, the callback receives a list of the macro tasks that were pending, otherwise null.
-   *
-   * @param doneCb The callback to invoke when Angular is stable or the timeout expires
-   *    whichever comes first.
-   * @param timeout Optional. The maximum time to wait for Angular to become stable. If not
-   *    specified, whenStable() will wait forever.
-   * @param updateCb Optional. If specified, this callback will be invoked whenever the set of
-   *    pending macrotasks changes. If this callback returns true doneCb will not be invoked
-   *    and no further updates will be issued.
-   */
-  whenStable(doneCb, timeout2, updateCb) {
-    if (updateCb && !this.taskTrackingZone) {
-      throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');
-    }
-    this.addCallback(doneCb, timeout2, updateCb);
-    this._runCallbacksIfReady();
-  }
-  /**
-   * Registers an application with a testability hook so that it can be tracked.
-   * @param token token of application, root element
-   *
-   * @internal
-   */
-  registerApplication(token) {
-    this.registry.registerApplication(token, this);
-  }
-  /**
-   * Unregisters an application.
-   * @param token token of application, root element
-   *
-   * @internal
-   */
-  unregisterApplication(token) {
-    this.registry.unregisterApplication(token);
-  }
-  /**
-   * Find providers by name
-   * @param using The root element to search from
-   * @param provider The name of binding variable
-   * @param exactMatch Whether using exactMatch
-   */
-  findProviders(using2, provider, exactMatch) {
-    return [];
-  }
-  static ɵfac = function Testability_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Testability,
-    factory: _Testability.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Testability, [{
-    type: Injectable
-  }], () => [{
-    type: NgZone
-  }, {
-    type: TestabilityRegistry
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [TESTABILITY_GETTER]
-    }]
-  }], null);
-})();
-var TestabilityRegistry = class _TestabilityRegistry {
-  /** @internal */
-  _applications = /* @__PURE__ */ new Map();
-  /**
-   * Registers an application with a testability hook so that it can be tracked
-   * @param token token of application, root element
-   * @param testability Testability hook
-   */
-  registerApplication(token, testability) {
-    this._applications.set(token, testability);
-  }
-  /**
-   * Unregisters an application.
-   * @param token token of application, root element
-   */
-  unregisterApplication(token) {
-    this._applications.delete(token);
-  }
-  /**
-   * Unregisters all applications
-   */
-  unregisterAllApplications() {
-    this._applications.clear();
-  }
-  /**
-   * Get a testability hook associated with the application
-   * @param elem root element
-   */
-  getTestability(elem) {
-    return this._applications.get(elem) || null;
-  }
-  /**
-   * Get all registered testabilities
-   */
-  getAllTestabilities() {
-    return Array.from(this._applications.values());
-  }
-  /**
-   * Get all registered applications(root elements)
-   */
-  getAllRootElements() {
-    return Array.from(this._applications.keys());
-  }
-  /**
-   * Find testability of a node in the Tree
-   * @param elem node
-   * @param findInAncestors whether finding testability in ancestors if testability was not found in
-   * current node
-   */
-  findTestabilityInTree(elem, findInAncestors = true) {
-    return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;
-  }
-  static ɵfac = function TestabilityRegistry_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TestabilityRegistry)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _TestabilityRegistry,
-    factory: _TestabilityRegistry.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], null, null);
-})();
-function setTestabilityGetter(getter) {
-  _testabilityGetter = getter;
-}
-var _testabilityGetter;
-function isPromise2(obj) {
-  return !!obj && typeof obj.then === "function";
-}
-function isSubscribable(obj) {
-  return !!obj && typeof obj.subscribe === "function";
-}
-var APP_INITIALIZER = new InjectionToken(ngDevMode ? "Application Initializer" : "");
-function provideAppInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: APP_INITIALIZER,
-    multi: true,
-    useValue: initializerFn
-  }]);
-}
-var ApplicationInitStatus = class _ApplicationInitStatus {
-  // Using non null assertion, these fields are defined below
-  // within the `new Promise` callback (synchronously).
-  resolve;
-  reject;
-  initialized = false;
-  done = false;
-  donePromise = new Promise((res, rej) => {
-    this.resolve = res;
-    this.reject = rej;
-  });
-  appInits = inject(APP_INITIALIZER, {
-    optional: true
-  }) ?? [];
-  injector = inject(Injector);
-  constructor() {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !Array.isArray(this.appInits)) {
-      throw new RuntimeError(-209, `Unexpected type of the \`APP_INITIALIZER\` token value (expected an array, but got ${typeof this.appInits}). Please check that the \`APP_INITIALIZER\` token is configured as a \`multi: true\` provider.`);
-    }
-  }
-  /** @internal */
-  runInitializers() {
-    if (this.initialized) {
-      return;
-    }
-    const asyncInitPromises = [];
-    for (const appInits of this.appInits) {
-      const initResult = runInInjectionContext(this.injector, appInits);
-      if (isPromise2(initResult)) {
-        asyncInitPromises.push(initResult);
-      } else if (isSubscribable(initResult)) {
-        const observableAsPromise = new Promise((resolve, reject) => {
-          initResult.subscribe({
-            complete: resolve,
-            error: reject
-          });
-        });
-        asyncInitPromises.push(observableAsPromise);
-      }
-    }
-    const complete = () => {
-      this.done = true;
-      this.resolve();
-    };
-    Promise.all(asyncInitPromises).then(() => {
-      complete();
-    }).catch((e) => {
-      this.reject(e);
-    });
-    if (asyncInitPromises.length === 0) {
-      complete();
-    }
-    this.initialized = true;
-  }
-  static ɵfac = function ApplicationInitStatus_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationInitStatus)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ApplicationInitStatus,
-    factory: _ApplicationInitStatus.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-var EffectScheduler = class _EffectScheduler {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _EffectScheduler,
-      providedIn: "root",
-      factory: () => new ZoneAwareEffectScheduler()
-    })
-  );
-};
-var ZoneAwareEffectScheduler = class {
-  queuedEffectCount = 0;
-  queues = /* @__PURE__ */ new Map();
-  schedule(handle) {
-    this.enqueue(handle);
-  }
-  enqueue(handle) {
-    const zone = handle.zone;
-    if (!this.queues.has(zone)) {
-      this.queues.set(zone, /* @__PURE__ */ new Set());
-    }
-    const queue2 = this.queues.get(zone);
-    if (queue2.has(handle)) {
-      return;
-    }
-    this.queuedEffectCount++;
-    queue2.add(handle);
-  }
-  /**
-   * Run all scheduled effects.
-   *
-   * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
-   * ordering guarantee between effects scheduled in different zones.
-   */
-  flush() {
-    while (this.queuedEffectCount > 0) {
-      for (const [zone, queue2] of this.queues) {
-        if (zone === null) {
-          this.flushQueue(queue2);
-        } else {
-          zone.run(() => this.flushQueue(queue2));
-        }
-      }
-    }
-  }
-  flushQueue(queue2) {
-    for (const handle of queue2) {
-      queue2.delete(handle);
-      this.queuedEffectCount--;
-      handle.run();
-    }
-  }
-};
-var APP_BOOTSTRAP_LISTENER = new InjectionToken(ngDevMode ? "appBootstrapListener" : "");
-function publishDefaultGlobalUtils() {
-  ngDevMode && publishDefaultGlobalUtils$1();
-}
-function publishSignalConfiguration() {
-  setThrowInvalidWriteToSignalError(() => {
-    throw new RuntimeError(600, ngDevMode && "Writing to signals is not allowed in a `computed`.");
-  });
-}
-function isBoundToModule(cf) {
-  return cf.isBoundToModule;
-}
-var NgProbeToken = class {
-  name;
-  token;
-  constructor(name, token) {
-    this.name = name;
-    this.token = token;
-  }
-};
-var MAXIMUM_REFRESH_RERUNS = 10;
-function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
-  try {
-    const result = callback();
-    if (isPromise2(result)) {
-      return result.catch((e) => {
-        ngZone.runOutsideAngular(() => errorHandler.handleError(e));
-        throw e;
-      });
-    }
-    return result;
-  } catch (e) {
-    ngZone.runOutsideAngular(() => errorHandler.handleError(e));
-    throw e;
-  }
-}
-function optionsReducer(dst, objs) {
-  if (Array.isArray(objs)) {
-    return objs.reduce(optionsReducer, dst);
-  }
-  return __spreadValues(__spreadValues({}, dst), objs);
-}
-var ApplicationRef = class _ApplicationRef {
-  /** @internal */
-  _runningTick = false;
-  _destroyed = false;
-  _destroyListeners = [];
-  /** @internal */
-  _views = [];
-  internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
-  afterRenderManager = inject(AfterRenderManager);
-  zonelessEnabled = inject(ZONELESS_ENABLED);
-  rootEffectScheduler = inject(EffectScheduler);
-  /**
-   * Current dirty state of the application across a number of dimensions (views, afterRender hooks,
-   * etc).
-   *
-   * A flag set here means that `tick()` will attempt to resolve the dirtiness when executed.
-   *
-   * @internal
-   */
-  dirtyFlags = 0;
-  /**
-   * Like `dirtyFlags` but don't cause `tick()` to loop.
-   *
-   * @internal
-   */
-  deferredDirtyFlags = 0;
-  /**
-   * Most recent snapshot from the `TracingService`, if any.
-   *
-   * This snapshot attempts to capture the context when `tick()` was first
-   * scheduled. It then runs wrapped in this context.
-   *
-   * @internal
-   */
-  tracingSnapshot = null;
-  // Needed for ComponentFixture temporarily during migration of autoDetect behavior
-  // Eventually the hostView of the fixture should just attach to ApplicationRef.
-  externalTestViews = /* @__PURE__ */ new Set();
-  /** @internal */
-  afterTick = new Subject();
-  /** @internal */
-  get allViews() {
-    return [...this.externalTestViews.keys(), ...this._views];
-  }
-  /**
-   * Indicates whether this instance was destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  /**
-   * Get a list of component types registered to this application.
-   * This list is populated even before the component is created.
-   */
-  componentTypes = [];
-  /**
-   * Get a list of components registered to this application.
-   */
-  components = [];
-  /**
-   * Returns an Observable that indicates when the application is stable or unstable.
-   */
-  isStable = inject(PendingTasksInternal).hasPendingTasks.pipe(map((pending) => !pending));
-  constructor() {
-    inject(TracingService, {
-      optional: true
-    });
-  }
-  /**
-   * @returns A promise that resolves when the application becomes stable
-   */
-  whenStable() {
-    let subscription;
-    return new Promise((resolve) => {
-      subscription = this.isStable.subscribe({
-        next: (stable) => {
-          if (stable) {
-            resolve();
-          }
-        }
-      });
-    }).finally(() => {
-      subscription.unsubscribe();
-    });
-  }
-  _injector = inject(EnvironmentInjector);
-  _rendererFactory = null;
-  /**
-   * The `EnvironmentInjector` used to create this application.
-   */
-  get injector() {
-    return this._injector;
-  }
-  /**
-   * Bootstrap a component onto the element identified by its selector or, optionally, to a
-   * specified element.
-   *
-   * @usageNotes
-   * ### Bootstrap process
-   *
-   * When bootstrapping a component, Angular mounts it onto a target DOM element
-   * and kicks off automatic change detection. The target DOM element can be
-   * provided using the `rootSelectorOrNode` argument.
-   *
-   * If the target DOM element is not provided, Angular tries to find one on a page
-   * using the `selector` of the component that is being bootstrapped
-   * (first matched element is used).
-   *
-   * ### Example
-   *
-   * Generally, we define the component to bootstrap in the `bootstrap` array of `NgModule`,
-   * but it requires us to know the component while writing the application code.
-   *
-   * Imagine a situation where we have to wait for an API call to decide about the component to
-   * bootstrap. We can use the `ngDoBootstrap` hook of the `NgModule` and call this method to
-   * dynamically bootstrap a component.
-   *
-   * {@example core/ts/platform/platform.ts region='componentSelector'}
-   *
-   * Optionally, a component can be mounted onto a DOM element that does not match the
-   * selector of the bootstrapped component.
-   *
-   * In the following example, we are providing a CSS selector to match the target element.
-   *
-   * {@example core/ts/platform/platform.ts region='cssSelector'}
-   *
-   * While in this example, we are providing reference to a DOM node.
-   *
-   * {@example core/ts/platform/platform.ts region='domNode'}
-   */
-  bootstrap(componentOrFactory, rootSelectorOrNode) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
-    const initStatus = this._injector.get(ApplicationInitStatus);
-    if (!initStatus.done) {
-      const standalone = !isComponentFactory && isStandalone(componentOrFactory);
-      const errorMessage = (typeof ngDevMode === "undefined" || ngDevMode) && "Cannot bootstrap as there are still asynchronous initializers running." + (standalone ? "" : " Bootstrap components in the `ngDoBootstrap` method of the root module.");
-      throw new RuntimeError(405, errorMessage);
-    }
-    let componentFactory;
-    if (isComponentFactory) {
-      componentFactory = componentOrFactory;
-    } else {
-      const resolver = this._injector.get(ComponentFactoryResolver$1);
-      componentFactory = resolver.resolveComponentFactory(componentOrFactory);
-    }
-    this.componentTypes.push(componentFactory.componentType);
-    const ngModule = isBoundToModule(componentFactory) ? void 0 : this._injector.get(NgModuleRef$1);
-    const selectorOrNode = rootSelectorOrNode || componentFactory.selector;
-    const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
-    const nativeElement = compRef.location.nativeElement;
-    const testability = compRef.injector.get(TESTABILITY, null);
-    testability?.registerApplication(nativeElement);
-    compRef.onDestroy(() => {
-      this.detachView(compRef.hostView);
-      remove(this.components, compRef);
-      testability?.unregisterApplication(nativeElement);
-    });
-    this._loadComponent(compRef);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      const _console = this._injector.get(Console);
-      _console.log(`Angular is running in development mode.`);
-    }
-    return compRef;
-  }
-  /**
-   * Invoke this method to explicitly process change detection and its side-effects.
-   *
-   * In development mode, `tick()` also performs a second change detection cycle to ensure that no
-   * further changes are detected. If additional changes are picked up during this second cycle,
-   * bindings in the app have side-effects that cannot be resolved in a single change detection
-   * pass.
-   * In this case, Angular throws an error, since an Angular application can only have one change
-   * detection pass during which all change detection must complete.
-   */
-  tick() {
-    if (!this.zonelessEnabled) {
-      this.dirtyFlags |= 1;
-    }
-    this._tick();
-  }
-  /** @internal */
-  _tick = () => {
-    if (this.tracingSnapshot !== null) {
-      const snapshot = this.tracingSnapshot;
-      this.tracingSnapshot = null;
-      snapshot.run(TracingAction.CHANGE_DETECTION, this._tick);
-      snapshot.dispose();
-      return;
-    }
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    if (this._runningTick) {
-      throw new RuntimeError(101, ngDevMode && "ApplicationRef.tick is called recursively");
-    }
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      this._runningTick = true;
-      this.synchronize();
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        for (let view of this.allViews) {
-          view.checkNoChanges();
-        }
-      }
-    } catch (e) {
-      this.internalErrorHandler(e);
-    } finally {
-      this._runningTick = false;
-      setActiveConsumer(prevConsumer);
-      this.afterTick.next();
-    }
-  };
-  /**
-   * Performs the core work of synchronizing the application state with the UI, resolving any
-   * pending dirtiness (potentially in a loop).
-   */
-  synchronize() {
-    if (this._rendererFactory === null && !this._injector.destroyed) {
-      this._rendererFactory = this._injector.get(RendererFactory2, null, {
-        optional: true
-      });
-    }
-    this.dirtyFlags |= this.deferredDirtyFlags;
-    this.deferredDirtyFlags = 0;
-    let runs = 0;
-    while (this.dirtyFlags !== 0 && runs++ < MAXIMUM_REFRESH_RERUNS) {
-      this.synchronizeOnce();
-    }
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {
-      throw new RuntimeError(103, ngDevMode && "Infinite change detection while refreshing application views. Ensure views are not calling `markForCheck` on every template execution or that afterRender hooks always mark views for check.");
-    }
-  }
-  /**
-   * Perform a single synchronization pass.
-   */
-  synchronizeOnce() {
-    this.dirtyFlags |= this.deferredDirtyFlags;
-    this.deferredDirtyFlags = 0;
-    if (this.dirtyFlags & 16) {
-      this.dirtyFlags &= ~16;
-      this.rootEffectScheduler.flush();
-    }
-    if (this.dirtyFlags & 7) {
-      const useGlobalCheck = Boolean(
-        this.dirtyFlags & 1
-        /* ApplicationRefDirtyFlags.ViewTreeGlobal */
-      );
-      this.dirtyFlags &= ~7;
-      this.dirtyFlags |= 8;
-      for (let {
-        _lView,
-        notifyErrorHandler
-      } of this.allViews) {
-        detectChangesInViewIfRequired(_lView, notifyErrorHandler, useGlobalCheck, this.zonelessEnabled);
-      }
-      this.dirtyFlags &= ~4;
-      this.syncDirtyFlagsWithViews();
-      if (this.dirtyFlags & (7 | 16)) {
-        return;
-      }
-    } else {
-      this._rendererFactory?.begin?.();
-      this._rendererFactory?.end?.();
-    }
-    if (this.dirtyFlags & 8) {
-      this.dirtyFlags &= ~8;
-      this.afterRenderManager.execute();
-    }
-    this.syncDirtyFlagsWithViews();
-  }
-  /**
-   * Checks `allViews` for views which require refresh/traversal, and updates `dirtyFlags`
-   * accordingly, with two potential behaviors:
-   *
-   * 1. If any of our views require updating, then this adds the `ViewTreeTraversal` dirty flag.
-   *    This _should_ be a no-op, since the scheduler should've added the flag at the same time the
-   *    view was marked as needing updating.
-   *
-   *    TODO(alxhub): figure out if this behavior is still needed for edge cases.
-   *
-   * 2. If none of our views require updating, then clear the view-related `dirtyFlag`s. This
-   *    happens when the scheduler is notified of a view becoming dirty, but the view itself isn't
-   *    reachable through traversal from our roots (e.g. it's detached from the CD tree).
-   */
-  syncDirtyFlagsWithViews() {
-    if (this.allViews.some(({
-      _lView
-    }) => requiresRefreshOrTraversal(_lView))) {
-      this.dirtyFlags |= 2;
-      return;
-    } else {
-      this.dirtyFlags &= ~7;
-    }
-  }
-  /**
-   * Attaches a view so that it will be dirty checked.
-   * The view will be automatically detached when it is destroyed.
-   * This will throw if the view is already attached to a ViewContainer.
-   */
-  attachView(viewRef) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const view = viewRef;
-    this._views.push(view);
-    view.attachToAppRef(this);
-  }
-  /**
-   * Detaches a view from dirty checking again.
-   */
-  detachView(viewRef) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const view = viewRef;
-    remove(this._views, view);
-    view.detachFromAppRef();
-  }
-  _loadComponent(componentRef) {
-    this.attachView(componentRef.hostView);
-    this.tick();
-    this.components.push(componentRef);
-    const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);
-    if (ngDevMode && !Array.isArray(listeners)) {
-      throw new RuntimeError(-209, `Unexpected type of the \`APP_BOOTSTRAP_LISTENER\` token value (expected an array, but got ${typeof listeners}). Please check that the \`APP_BOOTSTRAP_LISTENER\` token is configured as a \`multi: true\` provider.`);
-    }
-    listeners.forEach((listener) => listener(componentRef));
-  }
-  /** @internal */
-  ngOnDestroy() {
-    if (this._destroyed) return;
-    try {
-      this._destroyListeners.forEach((listener) => listener());
-      this._views.slice().forEach((view) => view.destroy());
-    } finally {
-      this._destroyed = true;
-      this._views = [];
-      this._destroyListeners = [];
-    }
-  }
-  /**
-   * Registers a listener to be called when an instance is destroyed.
-   *
-   * @param callback A callback function to add as a listener.
-   * @returns A function which unregisters a listener.
-   */
-  onDestroy(callback) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    this._destroyListeners.push(callback);
-    return () => remove(this._destroyListeners, callback);
-  }
-  /**
-   * Destroys an Angular application represented by this `ApplicationRef`. Calling this function
-   * will destroy the associated environment injectors as well as all the bootstrapped components
-   * with their views.
-   */
-  destroy() {
-    if (this._destroyed) {
-      throw new RuntimeError(406, ngDevMode && "This instance of the `ApplicationRef` has already been destroyed.");
-    }
-    const injector = this._injector;
-    if (injector.destroy && !injector.destroyed) {
-      injector.destroy();
-    }
-  }
-  /**
-   * Returns the number of attached views.
-   */
-  get viewCount() {
-    return this._views.length;
-  }
-  warnIfDestroyed() {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && this._destroyed) {
-      console.warn(formatRuntimeError(406, "This instance of the `ApplicationRef` has already been destroyed."));
-    }
-  }
-  static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationRef)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ApplicationRef,
-    factory: _ApplicationRef.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function remove(list, el) {
-  const index = list.indexOf(el);
-  if (index > -1) {
-    list.splice(index, 1);
-  }
-}
-function detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, zonelessEnabled) {
-  if (!isFirstPass && !requiresRefreshOrTraversal(lView)) {
-    return;
-  }
-  const mode = isFirstPass && !zonelessEnabled ? (
-    // The first pass is always in Global mode, which includes `CheckAlways` views.
-    0
-  ) : (
-    // Only refresh views with the `RefreshView` flag or views is a changed signal
-    1
-  );
-  detectChangesInternal(lView, notifyErrorHandler, mode);
-}
-function scheduleDelayedTrigger(scheduleFn) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  renderPlaceholder(lView, tNode);
-  if (!shouldTriggerDeferBlock(0, lView)) return;
-  const injector = lView[INJECTOR];
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const cleanupFn = scheduleFn(() => triggerDeferBlock(0, lView, tNode), injector);
-  storeTriggerCleanupFn(0, lDetails, cleanupFn);
-}
-function scheduleDelayedPrefetching(scheduleFn, trigger) {
-  if (false) return;
-  const lView = getLView();
-  const injector = lView[INJECTOR];
-  const tNode = getCurrentTNode();
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    const lDetails = getLDeferBlockDetails(lView, tNode);
-    const prefetch = () => triggerPrefetching(tDetails, lView, tNode);
-    const cleanupFn = scheduleFn(prefetch, injector);
-    storeTriggerCleanupFn(1, lDetails, cleanupFn);
-  }
-}
-function scheduleDelayedHydrating(scheduleFn, lView, tNode) {
-  if (false) return;
-  const injector = lView[INJECTOR];
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const ssrUniqueId = lDetails[SSR_UNIQUE_ID];
-  ngDevMode && assertSsrIdDefined(ssrUniqueId);
-  const cleanupFn = scheduleFn(() => triggerHydrationFromBlockName(injector, ssrUniqueId), injector);
-  storeTriggerCleanupFn(2, lDetails, cleanupFn);
-}
-function triggerPrefetching(tDetails, lView, tNode) {
-  triggerResourceLoading(tDetails, lView, tNode);
-}
-function triggerResourceLoading(tDetails, lView, tNode) {
-  const injector = lView[INJECTOR];
-  const tView = lView[TVIEW];
-  if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {
-    return tDetails.loadingPromise ?? Promise.resolve();
-  }
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);
-  tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;
-  invokeTriggerCleanupFns(1, lDetails);
-  let dependenciesFn = tDetails.dependencyResolverFn;
-  if (ngDevMode) {
-    const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {
-      optional: true
-    });
-    if (deferDependencyInterceptor) {
-      dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);
-    }
-  }
-  const pendingTasks = injector.get(PendingTasksInternal);
-  const taskId = pendingTasks.add();
-  if (!dependenciesFn) {
-    tDetails.loadingPromise = Promise.resolve().then(() => {
-      tDetails.loadingPromise = null;
-      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
-      pendingTasks.remove(taskId);
-    });
-    return tDetails.loadingPromise;
-  }
-  tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then((results) => {
-    let failed = false;
-    const directiveDefs = [];
-    const pipeDefs = [];
-    for (const result of results) {
-      if (result.status === "fulfilled") {
-        const dependency = result.value;
-        const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);
-        if (directiveDef) {
-          directiveDefs.push(directiveDef);
-        } else {
-          const pipeDef = getPipeDef$1(dependency);
-          if (pipeDef) {
-            pipeDefs.push(pipeDef);
-          }
-        }
-      } else {
-        failed = true;
-        break;
-      }
-    }
-    tDetails.loadingPromise = null;
-    pendingTasks.remove(taskId);
-    if (failed) {
-      tDetails.loadingState = DeferDependenciesLoadingState.FAILED;
-      if (tDetails.errorTmplIndex === null) {
-        const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : "";
-        const error = new RuntimeError(750, ngDevMode && `Loading dependencies for \`@defer\` block failed, but no \`@error\` block was configured${templateLocation}. Consider using the \`@error\` block to render an error state.`);
-        handleError(lView, error);
-      }
-    } else {
-      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
-      const primaryBlockTView = primaryBlockTNode.tView;
-      if (directiveDefs.length > 0) {
-        primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);
-        const directiveTypes = directiveDefs.map((def) => def.type);
-        const providers = internalImportProvidersFrom(false, ...directiveTypes);
-        tDetails.providers = providers;
-      }
-      if (pipeDefs.length > 0) {
-        primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);
-      }
-    }
-  });
-  return tDetails.loadingPromise;
-}
-function shouldTriggerDeferBlock(triggerType, lView) {
-  if (triggerType === 0 && true && false) {
-    return false;
-  }
-  const injector = lView[INJECTOR];
-  const config2 = injector.get(DEFER_BLOCK_CONFIG, null, {
-    optional: true
-  });
-  if (config2?.behavior === DeferBlockBehavior.Manual) {
-    return false;
-  }
-  return true;
-}
-function triggerDeferBlock(triggerType, lView, tNode) {
-  const tView = lView[TVIEW];
-  const lContainer = lView[tNode.index];
-  ngDevMode && assertLContainer(lContainer);
-  if (!shouldTriggerDeferBlock(triggerType, lView)) return;
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  invokeAllTriggerCleanupFns(lDetails);
-  switch (tDetails.loadingState) {
-    case DeferDependenciesLoadingState.NOT_STARTED:
-      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);
-      triggerResourceLoading(tDetails, lView, tNode);
-      if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {
-        renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
-      }
-      break;
-    case DeferDependenciesLoadingState.IN_PROGRESS:
-      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);
-      renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
-      break;
-    case DeferDependenciesLoadingState.COMPLETE:
-      ngDevMode && assertDeferredDependenciesLoaded(tDetails);
-      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
-      break;
-    case DeferDependenciesLoadingState.FAILED:
-      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
-      break;
-    default:
-      if (ngDevMode) {
-        throwError2("Unknown defer block state");
-      }
-  }
-}
-function triggerHydrationFromBlockName(injector, blockName, replayQueuedEventsFn) {
-  return __async(this, null, function* () {
-    const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;
-    if (blocksBeingHydrated.has(blockName)) {
-      return;
-    }
-    const {
-      parentBlockPromise,
-      hydrationQueue
-    } = getParentBlockHydrationQueue(blockName, injector);
-    populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);
-    const pendingTasks = injector.get(PendingTasksInternal);
-    const taskId = pendingTasks.add();
-    if (parentBlockPromise !== null) {
-      yield parentBlockPromise;
-    }
-    for (const dehydratedBlockId of hydrationQueue) {
-      yield triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry);
-      yield nextRender(injector);
-      blocksBeingHydrated.get(dehydratedBlockId).resolve();
-    }
-    yield blocksBeingHydrated.get(blockName)?.promise;
-    pendingTasks.remove(taskId);
-    if (replayQueuedEventsFn) {
-      replayQueuedEventsFn(hydrationQueue);
-    }
-    cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(blockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));
-  });
-}
-function populateHydratingStateForQueue(registry, queue2) {
-  for (let blockId of queue2) {
-    registry.hydrating.set(blockId, Promise.withResolvers());
-  }
-}
-function nextRender(injector) {
-  return new Promise((resolveFn) => afterNextRender(resolveFn, {
-    injector
-  }));
-}
-function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {
-  return __async(this, null, function* () {
-    const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);
-    if (deferBlock === null) {
-      return;
-    }
-    const {
-      tNode,
-      lView
-    } = deferBlock;
-    const lDetails = getLDeferBlockDetails(lView, tNode);
-    return new Promise((resolve) => {
-      onDeferBlockCompletion(lDetails, resolve);
-      triggerDeferBlock(2, lView, tNode);
-    });
-  });
-}
-function onDeferBlockCompletion(lDetails, callback) {
-  if (!Array.isArray(lDetails[ON_COMPLETE_FNS])) {
-    lDetails[ON_COMPLETE_FNS] = [];
-  }
-  lDetails[ON_COMPLETE_FNS].push(callback);
-}
-function shouldAttachTrigger(triggerType, lView, tNode) {
-  if (triggerType === 0) {
-    return shouldAttachRegularTrigger(lView, tNode);
-  } else if (triggerType === 2) {
-    return !shouldAttachRegularTrigger(lView, tNode);
-  }
-  return true;
-}
-function shouldAttachRegularTrigger(lView, tNode) {
-  const injector = lView[INJECTOR];
-  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-  const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);
-  const hasHydrateTriggers = tDetails.flags !== null && (tDetails.flags & 1) === 1;
-  if (false) {
-    return !incrementalHydrationEnabled || !hasHydrateTriggers;
-  }
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;
-  if (hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {
-    return false;
-  }
-  return true;
-}
-function getHydrateTriggers(tView, tNode) {
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  return tDetails.hydrateTriggers ??= /* @__PURE__ */ new Map();
-}
-function processAndInitTriggers(injector, blockData, nodes) {
-  const idleElements = [];
-  const timerElements = [];
-  const viewportElements = [];
-  const immediateElements = [];
-  for (let [blockId, blockSummary] of blockData) {
-    const commentNode = nodes.get(blockId);
-    if (commentNode !== void 0) {
-      const numRootNodes = blockSummary.data[NUM_ROOT_NODES];
-      let currentNode = commentNode;
-      for (let i = 0; i < numRootNodes; i++) {
-        currentNode = currentNode.previousSibling;
-        if (currentNode.nodeType !== Node.ELEMENT_NODE) {
-          continue;
-        }
-        const elementTrigger = {
-          el: currentNode,
-          blockName: blockId
-        };
-        if (blockSummary.hydrate.idle) {
-          idleElements.push(elementTrigger);
-        }
-        if (blockSummary.hydrate.immediate) {
-          immediateElements.push(elementTrigger);
-        }
-        if (blockSummary.hydrate.timer !== null) {
-          elementTrigger.delay = blockSummary.hydrate.timer;
-          timerElements.push(elementTrigger);
-        }
-        if (blockSummary.hydrate.viewport) {
-          viewportElements.push(elementTrigger);
-        }
-      }
-    }
-  }
-  setIdleTriggers(injector, idleElements);
-  setImmediateTriggers(injector, immediateElements);
-  setViewportTriggers(injector, viewportElements);
-  setTimerTriggers(injector, timerElements);
-}
-function setIdleTriggers(injector, elementTriggers) {
-  for (const elementTrigger of elementTriggers) {
-    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);
-    const cleanupFn = onIdle(onInvoke, injector);
-    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);
-  }
-}
-function setViewportTriggers(injector, elementTriggers) {
-  if (elementTriggers.length > 0) {
-    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    for (let elementTrigger of elementTriggers) {
-      const cleanupFn = onViewport(elementTrigger.el, () => triggerHydrationFromBlockName(injector, elementTrigger.blockName), injector);
-      registry.addCleanupFn(elementTrigger.blockName, cleanupFn);
-    }
-  }
-}
-function setTimerTriggers(injector, elementTriggers) {
-  for (const elementTrigger of elementTriggers) {
-    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);
-    const timerFn = onTimer(elementTrigger.delay);
-    const cleanupFn = timerFn(onInvoke, injector);
-    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);
-  }
-}
-function setImmediateTriggers(injector, elementTriggers) {
-  for (const elementTrigger of elementTriggers) {
-    triggerHydrationFromBlockName(injector, elementTrigger.blockName);
-  }
-}
-function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = declareTemplate(lView, tView, index, null, 0, 0);
-  const injector = lView[INJECTOR];
-  if (tView.firstCreatePass) {
-    performanceMarkFeature("NgDefer");
-    const tDetails = {
-      primaryTmplIndex,
-      loadingTmplIndex: loadingTmplIndex ?? null,
-      placeholderTmplIndex: placeholderTmplIndex ?? null,
-      errorTmplIndex: errorTmplIndex ?? null,
-      placeholderBlockConfig: null,
-      loadingBlockConfig: null,
-      dependencyResolverFn: dependencyResolverFn ?? null,
-      loadingState: DeferDependenciesLoadingState.NOT_STARTED,
-      loadingPromise: null,
-      providers: null,
-      hydrateTriggers: null,
-      prefetchTriggers: null,
-      flags: flags ?? 0
-      /* TDeferDetailsFlags.Default */
-    };
-    enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);
-    setTDeferBlockDetails(tView, adjustedIndex, tDetails);
-  }
-  const lContainer = lView[adjustedIndex];
-  populateDehydratedViewsInLContainer(lContainer, tNode, lView);
-  let ssrBlockState = null;
-  let ssrUniqueId = null;
-  if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {
-    const info = lContainer[DEHYDRATED_VIEWS][0].data;
-    ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;
-    ssrBlockState = info[DEFER_BLOCK_STATE$1];
-  }
-  const lDetails = [
-    null,
-    // NEXT_DEFER_BLOCK_STATE
-    DeferBlockInternalState.Initial,
-    // DEFER_BLOCK_STATE
-    null,
-    // STATE_IS_FROZEN_UNTIL
-    null,
-    // LOADING_AFTER_CLEANUP_FN
-    null,
-    // TRIGGER_CLEANUP_FNS
-    null,
-    // PREFETCH_TRIGGER_CLEANUP_FNS
-    ssrUniqueId,
-    // SSR_UNIQUE_ID
-    ssrBlockState,
-    // SSR_BLOCK_STATE
-    null,
-    // ON_COMPLETE_FNS
-    null
-    // HYDRATE_TRIGGER_CLEANUP_FNS
-  ];
-  setLDeferBlockDetails(lView, adjustedIndex, lDetails);
-  let registry = null;
-  if (ssrUniqueId !== null) {
-    ngDevMode && assertIncrementalHydrationIsConfigured(injector);
-    registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    registry.add(ssrUniqueId, {
-      lView,
-      tNode,
-      lContainer
-    });
-  }
-  const onLViewDestroy = () => {
-    invokeAllTriggerCleanupFns(lDetails);
-    if (ssrUniqueId !== null) {
-      registry?.cleanup([ssrUniqueId]);
-    }
-  };
-  storeTriggerCleanupFn(0, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));
-  storeLViewOnDestroy(lView, onLViewDestroy);
-}
-function ɵɵdeferWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const value = Boolean(rawValue);
-      const lDetails = getLDeferBlockDetails(lView, tNode);
-      const renderedState = lDetails[DEFER_BLOCK_STATE];
-      if (value === false && renderedState === DeferBlockInternalState.Initial) {
-        renderPlaceholder(lView, tNode);
-      } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {
-        triggerDeferBlock(0, lView, tNode);
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function ɵɵdeferPrefetchWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const value = Boolean(rawValue);
-      const tView = lView[TVIEW];
-      const tNode2 = getSelectedTNode();
-      const tDetails = getTDeferBlockDetails(tView, tNode2);
-      if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-        triggerPrefetching(tDetails, lView, tNode2);
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function ɵɵdeferHydrateWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  const tView = getTView();
-  const hydrateTriggers = getHydrateTriggers(tView, tNode);
-  hydrateTriggers.set(6, null);
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    if (false) {
-      triggerDeferBlock(2, lView, tNode);
-    } else {
-      const injector = lView[INJECTOR];
-      const prevConsumer = setActiveConsumer(null);
-      try {
-        const value = Boolean(rawValue);
-        if (value === true) {
-          const lDetails = getLDeferBlockDetails(lView, tNode);
-          const ssrUniqueId = lDetails[SSR_UNIQUE_ID];
-          ngDevMode && assertSsrIdDefined(ssrUniqueId);
-          triggerHydrationFromBlockName(injector, ssrUniqueId);
-        }
-      } finally {
-        setActiveConsumer(prevConsumer);
-      }
-    }
-  }
-}
-function ɵɵdeferHydrateNever() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(7, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  scheduleDelayedTrigger(onIdle);
-}
-function ɵɵdeferPrefetchOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  scheduleDelayedPrefetching(
-    onIdle,
-    0
-    /* DeferBlockTrigger.Idle */
-  );
-}
-function ɵɵdeferHydrateOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(0, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    scheduleDelayedHydrating(onIdle, lView, tNode);
-  }
-}
-function ɵɵdeferOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-  if (tDetails.loadingTmplIndex === null) {
-    renderPlaceholder(lView, tNode);
-  }
-  triggerDeferBlock(0, lView, tNode);
-}
-function ɵɵdeferPrefetchOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    triggerResourceLoading(tDetails, lView, tNode);
-  }
-}
-function ɵɵdeferHydrateOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(1, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    const injector = lView[INJECTOR];
-    const lDetails = getLDeferBlockDetails(lView, tNode);
-    const ssrUniqueId = lDetails[SSR_UNIQUE_ID];
-    ngDevMode && assertSsrIdDefined(ssrUniqueId);
-    triggerHydrationFromBlockName(injector, ssrUniqueId);
-  }
-}
-function ɵɵdeferOnTimer(delay2) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  scheduleDelayedTrigger(onTimer(delay2));
-}
-function ɵɵdeferPrefetchOnTimer(delay2) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  scheduleDelayedPrefetching(
-    onTimer(delay2),
-    5
-    /* DeferBlockTrigger.Timer */
-  );
-}
-function ɵɵdeferHydrateOnTimer(delay2) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(5, {
-    delay: delay2
-  });
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    scheduleDelayedHydrating(onTimer(delay2), lView, tNode);
-  }
-}
-function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (true) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onHover,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onHover,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnHover() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(4, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (true) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onInteraction,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onInteraction,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnInteraction() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(3, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (true) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onViewport,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onViewport,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnViewport() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(2, null);
-  if (false) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵattribute(name, value, sanitizer, namespace) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, "attr." + name, bindingIndex);
-  }
-  return ɵɵattribute;
-}
-function interpolationV(lView, values) {
-  ngDevMode && assertLessThan(2, values.length, "should have at least 3 values");
-  ngDevMode && assertEqual(values.length % 2, 1, "should have an odd number of values");
-  let isBindingUpdated = false;
-  let bindingIndex = getBindingIndex();
-  for (let i = 1; i < values.length; i += 2) {
-    isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;
-  }
-  setBindingIndex(bindingIndex);
-  if (!isBindingUpdated) {
-    return NO_CHANGE;
-  }
-  let content = values[0];
-  for (let i = 1; i < values.length; i += 2) {
-    content += renderStringify(values[i]) + values[i + 1];
-  }
-  return content;
-}
-function interpolation1(lView, prefix, v0, suffix) {
-  const different = bindingUpdated(lView, nextBindingIndex(), v0);
-  return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
-}
-function interpolation2(lView, prefix, v0, i0, v1, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated2(lView, bindingIndex, v0, v1);
-  incrementBindingIndex(2);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
-}
-function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);
-  incrementBindingIndex(3);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;
-}
-function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  incrementBindingIndex(4);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;
-}
-function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated(lView, bindingIndex + 4, v4) || different;
-  incrementBindingIndex(5);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;
-}
-function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;
-  incrementBindingIndex(6);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;
-}
-function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;
-  incrementBindingIndex(7);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;
-}
-function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;
-  incrementBindingIndex(8);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;
-}
-function ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 1, prefix, suffix);
-  }
-  return ɵɵattributeInterpolate1;
-}
-function ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 2, prefix, i0, suffix);
-  }
-  return ɵɵattributeInterpolate2;
-}
-function ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);
-  }
-  return ɵɵattributeInterpolate3;
-}
-function ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
-  }
-  return ɵɵattributeInterpolate4;
-}
-function ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
-  }
-  return ɵɵattributeInterpolate5;
-}
-function ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
-  }
-  return ɵɵattributeInterpolate6;
-}
-function ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
-  }
-  return ɵɵattributeInterpolate7;
-}
-function ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
-  }
-  return ɵɵattributeInterpolate8;
-}
-function ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolated = interpolationV(lView, values);
-  if (interpolated !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);
-    if (ngDevMode) {
-      const interpolationInBetween = [values[0]];
-      for (let i = 2; i < values.length; i += 2) {
-        interpolationInBetween.push(values[i]);
-      }
-      storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
-    }
-  }
-  return ɵɵattributeInterpolateV;
-}
-function toTStylingRange(prev, next) {
-  ngDevMode && assertNumberInRange(
-    prev,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  ngDevMode && assertNumberInRange(
-    next,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return prev << 17 | next << 2;
-}
-function getTStylingRangePrev(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange >> 17 & 32767;
-}
-function getTStylingRangePrevDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 2) == 2;
-}
-function setTStylingRangePrev(tStylingRange, previous) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  ngDevMode && assertNumberInRange(
-    previous,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return tStylingRange & ~4294836224 | previous << 17;
-}
-function setTStylingRangePrevDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange | 2;
-}
-function getTStylingRangeNext(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 131068) >> 2;
-}
-function setTStylingRangeNext(tStylingRange, next) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  ngDevMode && assertNumberInRange(
-    next,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return tStylingRange & ~131068 | //
-  next << 2;
-}
-function getTStylingRangeNextDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 1) === 1;
-}
-function setTStylingRangeNextDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange | 1;
-}
-function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {
-  ngDevMode && assertFirstUpdatePass(getTView());
-  let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;
-  let tmplHead = getTStylingRangePrev(tBindings);
-  let tmplTail = getTStylingRangeNext(tBindings);
-  tData[index] = tStylingKeyWithStatic;
-  let isKeyDuplicateOfStatic = false;
-  let tStylingKey;
-  if (Array.isArray(tStylingKeyWithStatic)) {
-    const staticKeyValueArray = tStylingKeyWithStatic;
-    tStylingKey = staticKeyValueArray[1];
-    if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {
-      isKeyDuplicateOfStatic = true;
-    }
-  } else {
-    tStylingKey = tStylingKeyWithStatic;
-  }
-  if (isHostBinding) {
-    const hasTemplateBindings = tmplTail !== 0;
-    if (hasTemplateBindings) {
-      const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);
-      tData[index + 1] = toTStylingRange(previousNode, tmplHead);
-      if (previousNode !== 0) {
-        tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);
-      }
-      tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);
-    } else {
-      tData[index + 1] = toTStylingRange(tmplHead, 0);
-      if (tmplHead !== 0) {
-        tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);
-      }
-      tmplHead = index;
-    }
-  } else {
-    tData[index + 1] = toTStylingRange(tmplTail, 0);
-    ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, "Adding template bindings after hostBindings is not allowed.");
-    if (tmplHead === 0) {
-      tmplHead = index;
-    } else {
-      tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);
-    }
-    tmplTail = index;
-  }
-  if (isKeyDuplicateOfStatic) {
-    tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
-  }
-  markDuplicates(tData, tStylingKey, index, true);
-  markDuplicates(tData, tStylingKey, index, false);
-  markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
-  tBindings = toTStylingRange(tmplHead, tmplTail);
-  if (isClassBinding) {
-    tNode.classBindings = tBindings;
-  } else {
-    tNode.styleBindings = tBindings;
-  }
-}
-function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {
-  const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;
-  if (residual != null && typeof tStylingKey == "string" && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {
-    tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);
-  }
-}
-function markDuplicates(tData, tStylingKey, index, isPrevDir) {
-  const tStylingAtIndex = tData[index + 1];
-  const isMap = tStylingKey === null;
-  let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
-  let foundDuplicate = false;
-  while (cursor !== 0 && (foundDuplicate === false || isMap)) {
-    ngDevMode && assertIndexInRange(tData, cursor);
-    const tStylingValueAtCursor = tData[cursor];
-    const tStyleRangeAtCursor = tData[cursor + 1];
-    if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {
-      foundDuplicate = true;
-      tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);
-    }
-    cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);
-  }
-  if (foundDuplicate) {
-    tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);
-  }
-}
-function isStylingMatch(tStylingKeyCursor, tStylingKey) {
-  ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, "Expected that 'tStylingKey' has been unwrapped");
-  if (tStylingKeyCursor === null || // If the cursor is `null` it means that we have map at that
-  // location so we must assume that we have a match.
-  tStylingKey == null || // If `tStylingKey` is `null` then it is a map therefor assume that it
-  // contains a match.
-  (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey) {
-    return true;
-  } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === "string") {
-    return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0;
-  }
-  return false;
-}
-var parserState = {
-  textEnd: 0,
-  key: 0,
-  keyEnd: 0,
-  value: 0,
-  valueEnd: 0
-};
-function getLastParsedKey(text) {
-  return text.substring(parserState.key, parserState.keyEnd);
-}
-function getLastParsedValue(text) {
-  return text.substring(parserState.value, parserState.valueEnd);
-}
-function parseClassName(text) {
-  resetParserState(text);
-  return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));
-}
-function parseClassNameNext(text, index) {
-  const end = parserState.textEnd;
-  if (end === index) {
-    return -1;
-  }
-  index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);
-  return consumeWhitespace(text, index, end);
-}
-function parseStyle(text) {
-  resetParserState(text);
-  return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));
-}
-function parseStyleNext(text, startIndex) {
-  const end = parserState.textEnd;
-  let index = parserState.key = consumeWhitespace(text, startIndex, end);
-  if (end === index) {
-    return -1;
-  }
-  index = parserState.keyEnd = consumeStyleKey(text, index, end);
-  index = consumeSeparator(
-    text,
-    index,
-    end,
-    58
-    /* CharCode.COLON */
-  );
-  index = parserState.value = consumeWhitespace(text, index, end);
-  index = parserState.valueEnd = consumeStyleValue(text, index, end);
-  return consumeSeparator(
-    text,
-    index,
-    end,
-    59
-    /* CharCode.SEMI_COLON */
-  );
-}
-function resetParserState(text) {
-  parserState.key = 0;
-  parserState.keyEnd = 0;
-  parserState.value = 0;
-  parserState.valueEnd = 0;
-  parserState.textEnd = text.length;
-}
-function consumeWhitespace(text, startIndex, endIndex) {
-  while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeClassToken(text, startIndex, endIndex) {
-  while (startIndex < endIndex && text.charCodeAt(startIndex) > 32) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeStyleKey(text, startIndex, endIndex) {
-  let ch;
-  while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 || ch === 95 || (ch & -33) >= 65 && (ch & -33) <= 90 || ch >= 48 && ch <= 57)) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeSeparator(text, startIndex, endIndex, separator) {
-  startIndex = consumeWhitespace(text, startIndex, endIndex);
-  if (startIndex < endIndex) {
-    if (ngDevMode && text.charCodeAt(startIndex) !== separator) {
-      malformedStyleError(text, String.fromCharCode(separator), startIndex);
-    }
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeStyleValue(text, startIndex, endIndex) {
-  let ch1 = -1;
-  let ch2 = -1;
-  let ch3 = -1;
-  let i = startIndex;
-  let lastChIndex = i;
-  while (i < endIndex) {
-    const ch = text.charCodeAt(i++);
-    if (ch === 59) {
-      return lastChIndex;
-    } else if (ch === 34 || ch === 39) {
-      lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);
-    } else if (startIndex === i - 4 && // We have seen only 4 characters so far "URL(" (Ignore "foo_URL()")
-    ch3 === 85 && ch2 === 82 && ch1 === 76 && ch === 40) {
-      lastChIndex = i = consumeQuotedText(text, 41, i, endIndex);
-    } else if (ch > 32) {
-      lastChIndex = i;
-    }
-    ch3 = ch2;
-    ch2 = ch1;
-    ch1 = ch & -33;
-  }
-  return lastChIndex;
-}
-function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
-  let ch1 = -1;
-  let index = startIndex;
-  while (index < endIndex) {
-    const ch = text.charCodeAt(index++);
-    if (ch == quoteCharCode && ch1 !== 92) {
-      return index;
-    }
-    if (ch == 92 && ch1 === 92) {
-      ch1 = 0;
-    } else {
-      ch1 = ch;
-    }
-  }
-  throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();
-}
-function malformedStyleError(text, expecting, index) {
-  ngDevMode && assertEqual(typeof text === "string", true, "String expected here");
-  throw throwError2(`Malformed style at location ${index} in string '` + text.substring(0, index) + "[>>" + text.substring(index, index + 1) + "<<]" + text.slice(index + 1) + `'. Expecting '${expecting}'.`);
-}
-function ɵɵproperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵproperty;
-}
-function setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {
-  const inputs = tNode.inputs;
-  const property = isClassBased ? "class" : "style";
-  setInputsForProperty(tView, lView, inputs[property], property, value);
-}
-function ɵɵstyleProp(prop, value, suffix) {
-  checkStylingProperty(prop, value, suffix, false);
-  return ɵɵstyleProp;
-}
-function ɵɵclassProp(className, value) {
-  checkStylingProperty(className, value, null, true);
-  return ɵɵclassProp;
-}
-function ɵɵstyleMap(styles) {
-  checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);
-}
-function styleStringParser(keyValueArray, text) {
-  for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {
-    styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));
-  }
-}
-function ɵɵclassMap(classes) {
-  checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);
-}
-function classStringParser(keyValueArray, text) {
-  for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
-    keyValueArraySet(keyValueArray, getLastParsedKey(text), true);
-  }
-}
-function checkStylingProperty(prop, value, suffix, isClassBased) {
-  const lView = getLView();
-  const tView = getTView();
-  const bindingIndex = incrementBindingIndex(2);
-  if (tView.firstUpdatePass) {
-    stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);
-  }
-  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
-    const tNode = tView.data[getSelectedIndex()];
-    updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);
-  }
-}
-function checkStylingMap(keyValueArraySet2, stringParser, value, isClassBased) {
-  const tView = getTView();
-  const bindingIndex = incrementBindingIndex(2);
-  if (tView.firstUpdatePass) {
-    stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);
-  }
-  const lView = getLView();
-  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
-    const tNode = tView.data[getSelectedIndex()];
-    if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {
-      if (ngDevMode) {
-        const tStylingKey = tView.data[bindingIndex];
-        assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, "Styling linked list shadow input should be marked as 'false'");
-      }
-      let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;
-      ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(";"), true, "Expecting static portion to end with ';'");
-      if (staticPrefix !== null) {
-        value = concatStringsWithSpace(staticPrefix, value ? value : "");
-      }
-      setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);
-    } else {
-      updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet2, stringParser, value), isClassBased, bindingIndex);
-    }
-  }
-}
-function isInHostBindings(tView, bindingIndex) {
-  return bindingIndex >= tView.expandoStartIndex;
-}
-function stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {
-  ngDevMode && assertFirstUpdatePass(tView);
-  const tData = tView.data;
-  if (tData[bindingIndex + 1] === null) {
-    const tNode = tData[getSelectedIndex()];
-    ngDevMode && assertDefined(tNode, "TNode expected");
-    const isHostBindings = isInHostBindings(tView, bindingIndex);
-    if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {
-      tStylingKey = false;
-    }
-    tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);
-    insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);
-  }
-}
-function wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {
-  const hostDirectiveDef = getCurrentDirectiveDef(tData);
-  let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
-  if (hostDirectiveDef === null) {
-    const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;
-    if (isFirstStylingInstructionInTemplate) {
-      stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);
-      stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);
-      residual = null;
-    }
-  } else {
-    const directiveStylingLast = tNode.directiveStylingLast;
-    const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;
-    if (isFirstStylingInstructionInHostBinding) {
-      stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);
-      if (residual === null) {
-        let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);
-        if (templateStylingKey !== void 0 && Array.isArray(templateStylingKey)) {
-          templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1], isClassBased);
-          templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);
-          setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);
-        }
-      } else {
-        residual = collectResidual(tData, tNode, isClassBased);
-      }
-    }
-  }
-  if (residual !== void 0) {
-    isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;
-  }
-  return stylingKey;
-}
-function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
-  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
-  if (getTStylingRangeNext(bindings) === 0) {
-    return void 0;
-  }
-  return tData[getTStylingRangePrev(bindings)];
-}
-function setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {
-  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
-  ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, "Expecting to have at least one template styling binding.");
-  tData[getTStylingRangePrev(bindings)] = tStylingKey;
-}
-function collectResidual(tData, tNode, isClassBased) {
-  let residual = void 0;
-  const directiveEnd = tNode.directiveEnd;
-  ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, "By the time this function gets called at least one hostBindings-node styling instruction must have executed.");
-  for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {
-    const attrs = tData[i].hostAttrs;
-    residual = collectStylingFromTAttrs(residual, attrs, isClassBased);
-  }
-  return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);
-}
-function collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {
-  let currentDirective = null;
-  const directiveEnd = tNode.directiveEnd;
-  let directiveStylingLast = tNode.directiveStylingLast;
-  if (directiveStylingLast === -1) {
-    directiveStylingLast = tNode.directiveStart;
-  } else {
-    directiveStylingLast++;
-  }
-  while (directiveStylingLast < directiveEnd) {
-    currentDirective = tData[directiveStylingLast];
-    ngDevMode && assertDefined(currentDirective, "expected to be defined");
-    stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);
-    if (currentDirective === hostDirectiveDef) break;
-    directiveStylingLast++;
-  }
-  if (hostDirectiveDef !== null) {
-    tNode.directiveStylingLast = directiveStylingLast;
-  }
-  return stylingKey;
-}
-function collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {
-  const desiredMarker = isClassBased ? 1 : 2;
-  let currentMarker = -1;
-  if (attrs !== null) {
-    for (let i = 0; i < attrs.length; i++) {
-      const item = attrs[i];
-      if (typeof item === "number") {
-        currentMarker = item;
-      } else {
-        if (currentMarker === desiredMarker) {
-          if (!Array.isArray(stylingKey)) {
-            stylingKey = stylingKey === void 0 ? [] : ["", stylingKey];
-          }
-          keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);
-        }
-      }
-    }
-  }
-  return stylingKey === void 0 ? null : stylingKey;
-}
-function toStylingKeyValueArray(keyValueArraySet2, stringParser, value) {
-  if (value == null || value === "") return EMPTY_ARRAY;
-  const styleKeyValueArray = [];
-  const unwrappedValue = unwrapSafeValue(value);
-  if (Array.isArray(unwrappedValue)) {
-    for (let i = 0; i < unwrappedValue.length; i++) {
-      keyValueArraySet2(styleKeyValueArray, unwrappedValue[i], true);
-    }
-  } else if (typeof unwrappedValue === "object") {
-    for (const key in unwrappedValue) {
-      if (unwrappedValue.hasOwnProperty(key)) {
-        keyValueArraySet2(styleKeyValueArray, key, unwrappedValue[key]);
-      }
-    }
-  } else if (typeof unwrappedValue === "string") {
-    stringParser(styleKeyValueArray, unwrappedValue);
-  } else {
-    ngDevMode && throwError2("Unsupported styling type " + typeof unwrappedValue + ": " + unwrappedValue);
-  }
-  return styleKeyValueArray;
-}
-function styleKeyValueArraySet(keyValueArray, key, value) {
-  keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));
-}
-function classKeyValueArraySet(keyValueArray, key, value) {
-  const stringKey = String(key);
-  if (stringKey !== "" && !stringKey.includes(" ")) {
-    keyValueArraySet(keyValueArray, stringKey, value);
-  }
-}
-function updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {
-  if (oldKeyValueArray === NO_CHANGE) {
-    oldKeyValueArray = EMPTY_ARRAY;
-  }
-  let oldIndex = 0;
-  let newIndex = 0;
-  let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;
-  let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;
-  while (oldKey !== null || newKey !== null) {
-    ngDevMode && assertLessThan(oldIndex, 999, "Are we stuck in infinite loop?");
-    ngDevMode && assertLessThan(newIndex, 999, "Are we stuck in infinite loop?");
-    const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : void 0;
-    const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : void 0;
-    let setKey = null;
-    let setValue = void 0;
-    if (oldKey === newKey) {
-      oldIndex += 2;
-      newIndex += 2;
-      if (oldValue !== newValue) {
-        setKey = newKey;
-        setValue = newValue;
-      }
-    } else if (newKey === null || oldKey !== null && oldKey < newKey) {
-      oldIndex += 2;
-      setKey = oldKey;
-    } else {
-      ngDevMode && assertDefined(newKey, "Expecting to have a valid key");
-      newIndex += 2;
-      setKey = newKey;
-      setValue = newValue;
-    }
-    if (setKey !== null) {
-      updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);
-    }
-    oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;
-    newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;
-  }
-}
-function updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {
-  if (!(tNode.type & 3)) {
-    return;
-  }
-  const tData = tView.data;
-  const tRange = tData[bindingIndex + 1];
-  const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : void 0;
-  if (!isStylingValuePresent(higherPriorityValue)) {
-    if (!isStylingValuePresent(value)) {
-      if (getTStylingRangePrevDuplicate(tRange)) {
-        value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);
-      }
-    }
-    const rNode = getNativeByIndex(getSelectedIndex(), lView);
-    applyStyling(renderer, isClassBased, rNode, prop, value);
-  }
-}
-function findStylingValue(tData, tNode, lView, prop, index, isClassBased) {
-  const isPrevDirection = tNode === null;
-  let value = void 0;
-  while (index > 0) {
-    const rawKey = tData[index];
-    const containsStatics = Array.isArray(rawKey);
-    const key = containsStatics ? rawKey[1] : rawKey;
-    const isStylingMap = key === null;
-    let valueAtLViewIndex = lView[index + 1];
-    if (valueAtLViewIndex === NO_CHANGE) {
-      valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : void 0;
-    }
-    let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : void 0;
-    if (containsStatics && !isStylingValuePresent(currentValue)) {
-      currentValue = keyValueArrayGet(rawKey, prop);
-    }
-    if (isStylingValuePresent(currentValue)) {
-      value = currentValue;
-      if (isPrevDirection) {
-        return value;
-      }
-    }
-    const tRange = tData[index + 1];
-    index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);
-  }
-  if (tNode !== null) {
-    let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
-    if (residual != null) {
-      value = keyValueArrayGet(residual, prop);
-    }
-  }
-  return value;
-}
-function isStylingValuePresent(value) {
-  return value !== void 0;
-}
-function normalizeSuffix(value, suffix) {
-  if (value == null || value === "") {
-  } else if (typeof suffix === "string") {
-    value = value + suffix;
-  } else if (typeof value === "object") {
-    value = stringify(unwrapSafeValue(value));
-  }
-  return value;
-}
-function hasStylingInputShadow(tNode, isClassBased) {
-  return (tNode.flags & (isClassBased ? 8 : 16)) !== 0;
-}
-function ɵɵclassMapInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolateV(values) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵcomponentInstance() {
-  const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];
-  ngDevMode && assertDefined(instance, "Expected component instance to be defined");
-  return instance;
-}
-var LiveCollection = class {
-  destroy(item) {
-  }
-  updateValue(index, value) {
-  }
-  // operations below could be implemented on top of the operations defined so far, but having
-  // them explicitly allow clear expression of intent and potentially more performant
-  // implementations
-  swap(index1, index2) {
-    const startIdx = Math.min(index1, index2);
-    const endIdx = Math.max(index1, index2);
-    const endItem = this.detach(endIdx);
-    if (endIdx - startIdx > 1) {
-      const startItem = this.detach(startIdx);
-      this.attach(startIdx, endItem);
-      this.attach(endIdx, startItem);
-    } else {
-      this.attach(startIdx, endItem);
-    }
-  }
-  move(prevIndex, newIdx) {
-    this.attach(newIdx, this.detach(prevIndex));
-  }
-};
-function valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {
-  if (liveIdx === newIdx && Object.is(liveValue, newValue)) {
-    return 1;
-  } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {
-    return -1;
-  }
-  return 0;
-}
-function recordDuplicateKeys(keyToIdx, key, idx) {
-  const idxSoFar = keyToIdx.get(key);
-  if (idxSoFar !== void 0) {
-    idxSoFar.add(idx);
-  } else {
-    keyToIdx.set(key, /* @__PURE__ */ new Set([idx]));
-  }
-}
-function reconcile(liveCollection, newCollection, trackByFn) {
-  let detachedItems = void 0;
-  let liveKeysInTheFuture = void 0;
-  let liveStartIdx = 0;
-  let liveEndIdx = liveCollection.length - 1;
-  const duplicateKeys = ngDevMode ? /* @__PURE__ */ new Map() : void 0;
-  if (Array.isArray(newCollection)) {
-    let newEndIdx = newCollection.length - 1;
-    while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {
-      const liveStartValue = liveCollection.at(liveStartIdx);
-      const newStartValue = newCollection[liveStartIdx];
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);
-      }
-      const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);
-      if (isStartMatching !== 0) {
-        if (isStartMatching < 0) {
-          liveCollection.updateValue(liveStartIdx, newStartValue);
-        }
-        liveStartIdx++;
-        continue;
-      }
-      const liveEndValue = liveCollection.at(liveEndIdx);
-      const newEndValue = newCollection[newEndIdx];
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);
-      }
-      const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);
-      if (isEndMatching !== 0) {
-        if (isEndMatching < 0) {
-          liveCollection.updateValue(liveEndIdx, newEndValue);
-        }
-        liveEndIdx--;
-        newEndIdx--;
-        continue;
-      }
-      const liveStartKey = trackByFn(liveStartIdx, liveStartValue);
-      const liveEndKey = trackByFn(liveEndIdx, liveEndValue);
-      const newStartKey = trackByFn(liveStartIdx, newStartValue);
-      if (Object.is(newStartKey, liveEndKey)) {
-        const newEndKey = trackByFn(newEndIdx, newEndValue);
-        if (Object.is(newEndKey, liveStartKey)) {
-          liveCollection.swap(liveStartIdx, liveEndIdx);
-          liveCollection.updateValue(liveEndIdx, newEndValue);
-          newEndIdx--;
-          liveEndIdx--;
-        } else {
-          liveCollection.move(liveEndIdx, liveStartIdx);
-        }
-        liveCollection.updateValue(liveStartIdx, newStartValue);
-        liveStartIdx++;
-        continue;
-      }
-      detachedItems ??= new UniqueValueMultiKeyMap();
-      liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);
-      if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {
-        liveCollection.updateValue(liveStartIdx, newStartValue);
-        liveStartIdx++;
-        liveEndIdx++;
-      } else if (!liveKeysInTheFuture.has(newStartKey)) {
-        const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);
-        liveCollection.attach(liveStartIdx, newItem);
-        liveStartIdx++;
-        liveEndIdx++;
-      } else {
-        detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));
-        liveEndIdx--;
-      }
-    }
-    while (liveStartIdx <= newEndIdx) {
-      createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);
-      liveStartIdx++;
-    }
-  } else if (newCollection != null) {
-    const newCollectionIterator = newCollection[Symbol.iterator]();
-    let newIterationResult = newCollectionIterator.next();
-    while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {
-      const liveValue = liveCollection.at(liveStartIdx);
-      const newValue = newIterationResult.value;
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);
-      }
-      const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);
-      if (isStartMatching !== 0) {
-        if (isStartMatching < 0) {
-          liveCollection.updateValue(liveStartIdx, newValue);
-        }
-        liveStartIdx++;
-        newIterationResult = newCollectionIterator.next();
-      } else {
-        detachedItems ??= new UniqueValueMultiKeyMap();
-        liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);
-        const newKey = trackByFn(liveStartIdx, newValue);
-        if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {
-          liveCollection.updateValue(liveStartIdx, newValue);
-          liveStartIdx++;
-          liveEndIdx++;
-          newIterationResult = newCollectionIterator.next();
-        } else if (!liveKeysInTheFuture.has(newKey)) {
-          liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));
-          liveStartIdx++;
-          liveEndIdx++;
-          newIterationResult = newCollectionIterator.next();
-        } else {
-          const liveKey = trackByFn(liveStartIdx, liveValue);
-          detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));
-          liveEndIdx--;
-        }
-      }
-    }
-    while (!newIterationResult.done) {
-      createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);
-      newIterationResult = newCollectionIterator.next();
-    }
-  }
-  while (liveStartIdx <= liveEndIdx) {
-    liveCollection.destroy(liveCollection.detach(liveEndIdx--));
-  }
-  detachedItems?.forEach((item) => {
-    liveCollection.destroy(item);
-  });
-  if (ngDevMode) {
-    let duplicatedKeysMsg = [];
-    for (const [key, idxSet] of duplicateKeys) {
-      if (idxSet.size > 1) {
-        const idx = [...idxSet].sort((a, b) => a - b);
-        for (let i = 1; i < idx.length; i++) {
-          duplicatedKeysMsg.push(`key "${stringifyForError(key)}" at index "${idx[i - 1]}" and "${idx[i]}"`);
-        }
-      }
-    }
-    if (duplicatedKeysMsg.length > 0) {
-      const message = formatRuntimeError(-955, "The provided track expression resulted in duplicated keys for a given collection. Adjust the tracking expression such that it uniquely identifies all the items in the collection. Duplicated keys were: \n" + duplicatedKeysMsg.join(", \n") + ".");
-      console.warn(message);
-    }
-  }
-}
-function attachPreviouslyDetached(prevCollection, detachedItems, index, key) {
-  if (detachedItems !== void 0 && detachedItems.has(key)) {
-    prevCollection.attach(index, detachedItems.get(key));
-    detachedItems.delete(key);
-    return true;
-  }
-  return false;
-}
-function createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {
-  if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {
-    const newItem = liveCollection.create(index, value);
-    liveCollection.attach(index, newItem);
-  } else {
-    liveCollection.updateValue(index, value);
-  }
-}
-function initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {
-  const keys = /* @__PURE__ */ new Set();
-  for (let i = start; i <= end; i++) {
-    keys.add(trackByFn(i, liveCollection.at(i)));
-  }
-  return keys;
-}
-var UniqueValueMultiKeyMap = class {
-  // A map from a key to the first value corresponding to this key.
-  kvMap = /* @__PURE__ */ new Map();
-  // A map that acts as a linked list of values - each value maps to the next value in this "linked
-  // list" (this only works if values are unique). Allocated lazily to avoid memory consumption when
-  // there are no duplicated values.
-  _vMap = void 0;
-  has(key) {
-    return this.kvMap.has(key);
-  }
-  delete(key) {
-    if (!this.has(key)) return false;
-    const value = this.kvMap.get(key);
-    if (this._vMap !== void 0 && this._vMap.has(value)) {
-      this.kvMap.set(key, this._vMap.get(value));
-      this._vMap.delete(value);
-    } else {
-      this.kvMap.delete(key);
-    }
-    return true;
-  }
-  get(key) {
-    return this.kvMap.get(key);
-  }
-  set(key, value) {
-    if (this.kvMap.has(key)) {
-      let prevValue = this.kvMap.get(key);
-      if (ngDevMode && prevValue === value) {
-        throw new Error(`Detected a duplicated value ${value} for the key ${key}`);
-      }
-      if (this._vMap === void 0) {
-        this._vMap = /* @__PURE__ */ new Map();
-      }
-      const vMap = this._vMap;
-      while (vMap.has(prevValue)) {
-        prevValue = vMap.get(prevValue);
-      }
-      vMap.set(prevValue, value);
-    } else {
-      this.kvMap.set(key, value);
-    }
-  }
-  forEach(cb) {
-    for (let [key, value] of this.kvMap) {
-      cb(value, key);
-      if (this._vMap !== void 0) {
-        const vMap = this._vMap;
-        while (vMap.has(value)) {
-          value = vMap.get(value);
-          cb(value, key);
-        }
-      }
-    }
-  }
-};
-function ɵɵconditional(matchingTemplateIndex, contextValue) {
-  performanceMarkFeature("NgControlFlow");
-  const hostLView = getLView();
-  const bindingIndex = nextBindingIndex();
-  const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;
-  const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : void 0;
-  const viewInContainerIdx = 0;
-  if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (prevContainer !== void 0) {
-        removeLViewFromLContainer(prevContainer, viewInContainerIdx);
-      }
-      if (matchingTemplateIndex !== -1) {
-        const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;
-        const nextContainer = getLContainer(hostLView, nextLContainerIndex);
-        const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);
-        const dehydratedView = findMatchingDehydratedView(nextContainer, templateTNode.tView.ssrId);
-        const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {
-          dehydratedView
-        });
-        addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  } else if (prevContainer !== void 0) {
-    const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);
-    if (lView !== void 0) {
-      lView[CONTEXT] = contextValue;
-    }
-  }
-}
-var RepeaterContext = class {
-  lContainer;
-  $implicit;
-  $index;
-  constructor(lContainer, $implicit, $index) {
-    this.lContainer = lContainer;
-    this.$implicit = $implicit;
-    this.$index = $index;
-  }
-  get $count() {
-    return this.lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-};
-function ɵɵrepeaterTrackByIndex(index) {
-  return index;
-}
-function ɵɵrepeaterTrackByIdentity(_, value) {
-  return value;
-}
-var RepeaterMetadata = class {
-  hasEmptyBlock;
-  trackByFn;
-  liveCollection;
-  constructor(hasEmptyBlock, trackByFn, liveCollection) {
-    this.hasEmptyBlock = hasEmptyBlock;
-    this.trackByFn = trackByFn;
-    this.liveCollection = liveCollection;
-  }
-};
-function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {
-  performanceMarkFeature("NgControlFlow");
-  ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);
-  const lView = getLView();
-  const tView = getTView();
-  const hasEmptyBlock = emptyTemplateFn !== void 0;
-  const hostLView = getLView();
-  const boundTrackBy = trackByUsesComponentInstance ? (
-    // We only want to bind when necessary, because it produces a
-    // new function. For pure functions it's not necessary.
-    trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT])
-  ) : trackByFn;
-  const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);
-  hostLView[HEADER_OFFSET + index] = metadata;
-  declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex));
-  if (hasEmptyBlock) {
-    ngDevMode && assertDefined(emptyDecls, "Missing number of declarations for the empty repeater block.");
-    ngDevMode && assertDefined(emptyVars, "Missing number of bindings for the empty repeater block.");
-    declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex));
-  }
-}
-function isViewExpensiveToRecreate(lView) {
-  return lView.length - HEADER_OFFSET > 2;
-}
-var OperationsCounter = class {
-  created = 0;
-  destroyed = 0;
-  reset() {
-    this.created = 0;
-    this.destroyed = 0;
-  }
-  recordCreate() {
-    this.created++;
-  }
-  recordDestroy() {
-    this.destroyed++;
-  }
-  /**
-   * A method indicating if the entire collection was re-created as part of the reconciliation pass.
-   * Used to warn developers about the usage of a tracking function that might result in excessive
-   * amount of view creation / destroy operations.
-   *
-   * @returns boolean value indicating if a live collection was re-created
-   */
-  wasReCreated(collectionLen) {
-    return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;
-  }
-};
-var LiveCollectionLContainerImpl = class extends LiveCollection {
-  lContainer;
-  hostLView;
-  templateTNode;
-  operationsCounter = ngDevMode ? new OperationsCounter() : void 0;
-  /**
-   Property indicating if indexes in the repeater context need to be updated following the live
-   collection changes. Index updates are necessary if and only if views are inserted / removed in
-   the middle of LContainer. Adds and removals at the end don't require index updates.
-  */
-  needsIndexUpdate = false;
-  constructor(lContainer, hostLView, templateTNode) {
-    super();
-    this.lContainer = lContainer;
-    this.hostLView = hostLView;
-    this.templateTNode = templateTNode;
-  }
-  get length() {
-    return this.lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-  at(index) {
-    return this.getLView(index)[CONTEXT].$implicit;
-  }
-  attach(index, lView) {
-    const dehydratedView = lView[HYDRATION];
-    this.needsIndexUpdate ||= index !== this.length;
-    addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));
-  }
-  detach(index) {
-    this.needsIndexUpdate ||= index !== this.length - 1;
-    return detachExistingView(this.lContainer, index);
-  }
-  create(index, value) {
-    const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);
-    const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {
-      dehydratedView
-    });
-    this.operationsCounter?.recordCreate();
-    return embeddedLView;
-  }
-  destroy(lView) {
-    destroyLView(lView[TVIEW], lView);
-    this.operationsCounter?.recordDestroy();
-  }
-  updateValue(index, value) {
-    this.getLView(index)[CONTEXT].$implicit = value;
-  }
-  reset() {
-    this.needsIndexUpdate = false;
-    this.operationsCounter?.reset();
-  }
-  updateIndexes() {
-    if (this.needsIndexUpdate) {
-      for (let i = 0; i < this.length; i++) {
-        this.getLView(i)[CONTEXT].$index = i;
-      }
-    }
-  }
-  getLView(index) {
-    return getExistingLViewFromLContainer(this.lContainer, index);
-  }
-};
-function ɵɵrepeater(collection) {
-  const prevConsumer = setActiveConsumer(null);
-  const metadataSlotIdx = getSelectedIndex();
-  try {
-    const hostLView = getLView();
-    const hostTView = hostLView[TVIEW];
-    const metadata = hostLView[metadataSlotIdx];
-    const containerIndex = metadataSlotIdx + 1;
-    const lContainer = getLContainer(hostLView, containerIndex);
-    if (metadata.liveCollection === void 0) {
-      const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);
-      metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);
-    } else {
-      metadata.liveCollection.reset();
-    }
-    const liveCollection = metadata.liveCollection;
-    reconcile(liveCollection, collection, metadata.trackByFn);
-    if (ngDevMode && metadata.trackByFn === ɵɵrepeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {
-      const message = formatRuntimeError(-956, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. Please review the "track expression" and make sure that it uniquely identifies items in a collection.`);
-      console.warn(message);
-    }
-    liveCollection.updateIndexes();
-    if (metadata.hasEmptyBlock) {
-      const bindingIndex = nextBindingIndex();
-      const isCollectionEmpty = liveCollection.length === 0;
-      if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {
-        const emptyTemplateIndex = metadataSlotIdx + 2;
-        const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);
-        if (isCollectionEmpty) {
-          const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);
-          const dehydratedView = findMatchingDehydratedView(lContainerForEmpty, emptyTemplateTNode.tView.ssrId);
-          const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, void 0, {
-            dehydratedView
-          });
-          addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));
-        } else {
-          removeLViewFromLContainer(lContainerForEmpty, 0);
-        }
-      }
-    }
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function getLContainer(lView, index) {
-  const lContainer = lView[index];
-  ngDevMode && assertLContainer(lContainer);
-  return lContainer;
-}
-function detachExistingView(lContainer, index) {
-  const existingLView = detachView(lContainer, index);
-  ngDevMode && assertLView(existingLView);
-  return existingLView;
-}
-function getExistingLViewFromLContainer(lContainer, index) {
-  const existingLView = getLViewFromLContainer(lContainer, index);
-  ngDevMode && assertLView(existingLView);
-  return existingLView;
-}
-function getExistingTNode(tView, index) {
-  const tNode = getTNode(tView, index);
-  ngDevMode && assertTNode(tNode);
-  return tNode;
-}
-function elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const attrs = getConstant(tViewConsts, attrsIndex);
-  const tNode = getOrCreateTNode(tView, index, 2, name, attrs);
-  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
-  if (tNode.attrs !== null) {
-    computeStaticStyling(tNode, tNode.attrs, false);
-  }
-  if (tNode.mergedAttrs !== null) {
-    computeStaticStyling(tNode, tNode.mergedAttrs, true);
-  }
-  if (tView.queries !== null) {
-    tView.queries.elementStart(tView, tNode);
-  }
-  return tNode;
-}
-function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = HEADER_OFFSET + index;
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "elements should be created before any bindings");
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  const renderer = lView[RENDERER];
-  const tNode = tView.firstCreatePass ? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
-  const native = _locateOrCreateElementNode(tView, lView, tNode, renderer, name, index);
-  lView[adjustedIndex] = native;
-  const hasDirectives = isDirectiveHost(tNode);
-  if (ngDevMode && tView.firstCreatePass) {
-    validateElementIsKnown(native, lView, tNode.value, tView.schemas, hasDirectives);
-  }
-  setCurrentTNode(tNode, true);
-  setupStaticAttributes(renderer, native, tNode);
-  if (!isDetachedByI18n(tNode) && wasLastNodeCreated()) {
-    appendChild(tView, lView, native, tNode);
-  }
-  if (getElementDepthCount() === 0) {
-    attachPatchData(native, lView);
-  }
-  increaseElementDepthCount();
-  if (hasDirectives) {
-    createDirectivesInstances(tView, lView, tNode);
-    executeContentQueries(tView, tNode, lView);
-  }
-  if (localRefsIndex !== null) {
-    saveResolvedLocalsInData(lView, tNode);
-  }
-  return ɵɵelementStart;
-}
-function ɵɵelementEnd() {
-  let currentTNode = getCurrentTNode();
-  ngDevMode && assertDefined(currentTNode, "No parent node to close.");
-  if (isCurrentTNodeParent()) {
-    setCurrentTNodeAsNotParent();
-  } else {
-    ngDevMode && assertHasParent(getCurrentTNode());
-    currentTNode = currentTNode.parent;
-    setCurrentTNode(currentTNode, false);
-  }
-  const tNode = currentTNode;
-  ngDevMode && assertTNodeType(
-    tNode,
-    3
-    /* TNodeType.AnyRNode */
-  );
-  if (isSkipHydrationRootTNode(tNode)) {
-    leaveSkipHydrationBlock();
-  }
-  decreaseElementDepthCount();
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    registerPostOrderHooks(tView, currentTNode);
-    if (isContentQueryHost(currentTNode)) {
-      tView.queries.elementEnd(currentTNode);
-    }
-  }
-  if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {
-    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);
-  }
-  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
-    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
-  }
-  return ɵɵelementEnd;
-}
-function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
-  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
-  ɵɵelementEnd();
-  return ɵɵelement;
-}
-var _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) => {
-  lastNodeWasCreated(true);
-  return createElementNode(renderer, name, getNamespace$1());
-};
-function locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createElementNode(renderer, name, getNamespace$1());
-  }
-  const native = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);
-  ngDevMode && markRNodeAsClaimedByHydration(native);
-  if (getSerializedContainerViews(hydrationInfo, index)) {
-    ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);
-    setSegmentHead(hydrationInfo, index, native.nextSibling);
-  }
-  if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {
-    if (isComponentHost(tNode)) {
-      enterSkipHydrationBlock(tNode);
-      clearElementContents(native);
-      ngDevMode && markRNodeAsSkippedByHydration(native);
-    } else if (ngDevMode) {
-      throw invalidSkipHydrationHost(native);
-    }
-  }
-  return native;
-}
-function enableLocateOrCreateElementNodeImpl() {
-  _locateOrCreateElementNode = locateOrCreateElementNodeImpl;
-}
-function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const attrs = getConstant(tViewConsts, attrsIndex);
-  const tNode = getOrCreateTNode(tView, index, 8, "ng-container", attrs);
-  if (attrs !== null) {
-    computeStaticStyling(tNode, attrs, true);
-  }
-  const localRefs = getConstant(tViewConsts, localRefsIndex);
-  resolveDirectives(tView, lView, tNode, localRefs);
-  if (tView.queries !== null) {
-    tView.queries.elementStart(tView, tNode);
-  }
-  return tNode;
-}
-function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "element containers should be created before any bindings");
-  const tNode = tView.firstCreatePass ? elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
-  setCurrentTNode(tNode, true);
-  const comment = _locateOrCreateElementContainerNode(tView, lView, tNode, index);
-  lView[adjustedIndex] = comment;
-  if (wasLastNodeCreated()) {
-    appendChild(tView, lView, comment, tNode);
-  }
-  attachPatchData(comment, lView);
-  if (isDirectiveHost(tNode)) {
-    createDirectivesInstances(tView, lView, tNode);
-    executeContentQueries(tView, tNode, lView);
-  }
-  if (localRefsIndex != null) {
-    saveResolvedLocalsInData(lView, tNode);
-  }
-  return ɵɵelementContainerStart;
-}
-function ɵɵelementContainerEnd() {
-  let currentTNode = getCurrentTNode();
-  const tView = getTView();
-  if (isCurrentTNodeParent()) {
-    setCurrentTNodeAsNotParent();
-  } else {
-    ngDevMode && assertHasParent(currentTNode);
-    currentTNode = currentTNode.parent;
-    setCurrentTNode(currentTNode, false);
-  }
-  ngDevMode && assertTNodeType(
-    currentTNode,
-    8
-    /* TNodeType.ElementContainer */
-  );
-  if (tView.firstCreatePass) {
-    registerPostOrderHooks(tView, currentTNode);
-    if (isContentQueryHost(currentTNode)) {
-      tView.queries.elementEnd(currentTNode);
-    }
-  }
-  return ɵɵelementContainerEnd;
-}
-function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
-  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
-  ɵɵelementContainerEnd();
-  return ɵɵelementContainer;
-}
-var _locateOrCreateElementContainerNode = (tView, lView, tNode, index) => {
-  lastNodeWasCreated(true);
-  return createCommentNode(lView[RENDERER], ngDevMode ? "ng-container" : "");
-};
-function locateOrCreateElementContainerNode(tView, lView, tNode, index) {
-  let comment;
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index) || isDetachedByI18n(tNode);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createCommentNode(lView[RENDERER], ngDevMode ? "ng-container" : "");
-  }
-  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateNodeExists(currentRNode, lView, tNode);
-  const ngContainerSize = getNgContainerSize(hydrationInfo, index);
-  ngDevMode && assertNumber(ngContainerSize, "Unexpected state: hydrating an <ng-container>, but no hydration info is available.");
-  setSegmentHead(hydrationInfo, index, currentRNode);
-  comment = siblingAfter(ngContainerSize, currentRNode);
-  if (ngDevMode) {
-    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);
-    markRNodeAsClaimedByHydration(comment);
-  }
-  return comment;
-}
-function enableLocateOrCreateElementContainerNodeImpl() {
-  _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;
-}
-function ɵɵgetCurrentView() {
-  return getLView();
-}
-function ɵɵhostProperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵhostProperty;
-}
-function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    const currentDef = getCurrentDirectiveDef(tView.data);
-    const renderer = loadComponentRenderer(currentDef, tNode, lView);
-    elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵsyntheticHostProperty;
-}
-if (typeof ngI18nClosureMode === "undefined") {
-  (function() {
-    _global["ngI18nClosureMode"] = // TODO(FW-1250): validate that this actually, you know, works.
-    // tslint:disable-next-line:no-toplevel-property-access
-    typeof goog !== "undefined" && typeof goog.getMsg === "function";
-  })();
-}
-var u = void 0;
-function plural(val) {
-  const n = val, i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, "").length;
-  if (i === 1 && v === 0) return 1;
-  return 5;
-}
-var localeEn = ["en", [["a", "p"], ["AM", "PM"], u], [["AM", "PM"], u, u], [["S", "M", "T", "W", "T", "F", "S"], ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]], u, [["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]], u, [["B", "A"], ["BC", "AD"], ["Before Christ", "Anno Domini"]], 0, [6, 0], ["M/d/yy", "MMM d, y", "MMMM d, y", "EEEE, MMMM d, y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} 'at' {0}", u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "USD", "$", "US Dollar", {}, "ltr", plural];
-var LOCALE_DATA = {};
-function registerLocaleData(data, localeId, extraData) {
-  if (typeof localeId !== "string") {
-    extraData = localeId;
-    localeId = data[LocaleDataIndex.LocaleId];
-  }
-  localeId = localeId.toLowerCase().replace(/_/g, "-");
-  LOCALE_DATA[localeId] = data;
-  if (extraData) {
-    LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
-  }
-}
-function findLocaleData(locale) {
-  const normalizedLocale = normalizeLocale(locale);
-  let match = getLocaleData(normalizedLocale);
-  if (match) {
-    return match;
-  }
-  const parentLocale = normalizedLocale.split("-")[0];
-  match = getLocaleData(parentLocale);
-  if (match) {
-    return match;
-  }
-  if (parentLocale === "en") {
-    return localeEn;
-  }
-  throw new RuntimeError(701, ngDevMode && `Missing locale data for the locale "${locale}".`);
-}
-function getLocaleCurrencyCode(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.CurrencyCode] || null;
-}
-function getLocalePluralCase(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.PluralCase];
-}
-function getLocaleData(normalizedLocale) {
-  if (!(normalizedLocale in LOCALE_DATA)) {
-    LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];
-  }
-  return LOCALE_DATA[normalizedLocale];
-}
-function unregisterAllLocaleData() {
-  LOCALE_DATA = {};
-}
-var LocaleDataIndex;
-(function(LocaleDataIndex2) {
-  LocaleDataIndex2[LocaleDataIndex2["LocaleId"] = 0] = "LocaleId";
-  LocaleDataIndex2[LocaleDataIndex2["DayPeriodsFormat"] = 1] = "DayPeriodsFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DayPeriodsStandalone"] = 2] = "DayPeriodsStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["DaysFormat"] = 3] = "DaysFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DaysStandalone"] = 4] = "DaysStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["MonthsFormat"] = 5] = "MonthsFormat";
-  LocaleDataIndex2[LocaleDataIndex2["MonthsStandalone"] = 6] = "MonthsStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["Eras"] = 7] = "Eras";
-  LocaleDataIndex2[LocaleDataIndex2["FirstDayOfWeek"] = 8] = "FirstDayOfWeek";
-  LocaleDataIndex2[LocaleDataIndex2["WeekendRange"] = 9] = "WeekendRange";
-  LocaleDataIndex2[LocaleDataIndex2["DateFormat"] = 10] = "DateFormat";
-  LocaleDataIndex2[LocaleDataIndex2["TimeFormat"] = 11] = "TimeFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DateTimeFormat"] = 12] = "DateTimeFormat";
-  LocaleDataIndex2[LocaleDataIndex2["NumberSymbols"] = 13] = "NumberSymbols";
-  LocaleDataIndex2[LocaleDataIndex2["NumberFormats"] = 14] = "NumberFormats";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencyCode"] = 15] = "CurrencyCode";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencySymbol"] = 16] = "CurrencySymbol";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencyName"] = 17] = "CurrencyName";
-  LocaleDataIndex2[LocaleDataIndex2["Currencies"] = 18] = "Currencies";
-  LocaleDataIndex2[LocaleDataIndex2["Directionality"] = 19] = "Directionality";
-  LocaleDataIndex2[LocaleDataIndex2["PluralCase"] = 20] = "PluralCase";
-  LocaleDataIndex2[LocaleDataIndex2["ExtraData"] = 21] = "ExtraData";
-})(LocaleDataIndex || (LocaleDataIndex = {}));
-function normalizeLocale(locale) {
-  return locale.toLowerCase().replace(/_/g, "-");
-}
-var pluralMapping = ["zero", "one", "two", "few", "many"];
-function getPluralCase(value, locale) {
-  const plural2 = getLocalePluralCase(locale)(parseInt(value, 10));
-  const result = pluralMapping[plural2];
-  return result !== void 0 ? result : "other";
-}
-var DEFAULT_LOCALE_ID = "en-US";
-var USD_CURRENCY_CODE = "USD";
-var ELEMENT_MARKER = {
-  marker: "element"
-};
-var ICU_MARKER = {
-  marker: "ICU"
-};
-var I18nCreateOpCode;
-(function(I18nCreateOpCode2) {
-  I18nCreateOpCode2[I18nCreateOpCode2["SHIFT"] = 2] = "SHIFT";
-  I18nCreateOpCode2[I18nCreateOpCode2["APPEND_EAGERLY"] = 1] = "APPEND_EAGERLY";
-  I18nCreateOpCode2[I18nCreateOpCode2["COMMENT"] = 2] = "COMMENT";
-})(I18nCreateOpCode || (I18nCreateOpCode = {}));
-var LOCALE_ID$1 = DEFAULT_LOCALE_ID;
-function setLocaleId(localeId) {
-  ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);
-  if (typeof localeId === "string") {
-    LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, "-");
-  }
-}
-function getLocaleId() {
-  return LOCALE_ID$1;
-}
-var changeMask = 0;
-var changeMaskCounter = 0;
-function setMaskBit(hasChange) {
-  if (hasChange) {
-    changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);
-  }
-  changeMaskCounter++;
-}
-function applyI18n(tView, lView, index) {
-  if (changeMaskCounter > 0) {
-    ngDevMode && assertDefined(tView, `tView should be defined`);
-    const tI18n = tView.data[index];
-    const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;
-    const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;
-    applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);
-  }
-  changeMask = 0;
-  changeMaskCounter = 0;
-}
-function createNodeWithoutHydration(lView, textOrName, nodeType) {
-  const renderer = lView[RENDERER];
-  switch (nodeType) {
-    case Node.COMMENT_NODE:
-      return createCommentNode(renderer, textOrName);
-    case Node.TEXT_NODE:
-      return createTextNode(renderer, textOrName);
-    case Node.ELEMENT_NODE:
-      return createElementNode(renderer, textOrName, null);
-  }
-}
-var _locateOrCreateNode = (lView, index, textOrName, nodeType) => {
-  lastNodeWasCreated(true);
-  return createNodeWithoutHydration(lView, textOrName, nodeType);
-};
-function locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {
-  const hydrationInfo = lView[HYDRATION];
-  const noOffsetIndex = index - HEADER_OFFSET;
-  const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createNodeWithoutHydration(lView, textOrName, nodeType);
-  }
-  const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);
-  ngDevMode && assertDefined(native, "expected native element");
-  ngDevMode && assertEqual(native.nodeType, nodeType, "expected matching nodeType");
-  ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), "expecting matching tagName");
-  ngDevMode && markRNodeAsClaimedByHydration(native);
-  return native;
-}
-function enableLocateOrCreateI18nNodeImpl() {
-  _locateOrCreateNode = locateOrCreateNodeImpl;
-}
-function applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {
-  const renderer = lView[RENDERER];
-  for (let i = 0; i < createOpCodes.length; i++) {
-    const opCode = createOpCodes[i++];
-    const text = createOpCodes[i];
-    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
-    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
-    const index = opCode >>> I18nCreateOpCode.SHIFT;
-    let rNode = lView[index];
-    let lastNodeWasCreated2 = false;
-    if (rNode === null) {
-      rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);
-      lastNodeWasCreated2 = wasLastNodeCreated();
-    }
-    if (appendNow && parentRNode !== null && lastNodeWasCreated2) {
-      nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);
-    }
-  }
-}
-function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
-  ngDevMode && assertDomNode(anchorRNode);
-  const renderer = lView[RENDERER];
-  let rootIdx = null;
-  let rootRNode;
-  for (let i = 0; i < mutableOpCodes.length; i++) {
-    const opCode = mutableOpCodes[i];
-    if (typeof opCode == "string") {
-      const textNodeIndex = mutableOpCodes[++i];
-      if (lView[textNodeIndex] === null) {
-        ngDevMode && ngDevMode.rendererCreateTextNode++;
-        ngDevMode && assertIndexInRange(lView, textNodeIndex);
-        lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);
-      }
-    } else if (typeof opCode == "number") {
-      switch (opCode & 1) {
-        case 0:
-          const parentIdx = getParentFromIcuCreateOpCode(opCode);
-          if (rootIdx === null) {
-            rootIdx = parentIdx;
-            rootRNode = nativeParentNode(renderer, anchorRNode);
-          }
-          let insertInFrontOf;
-          let parentRNode;
-          if (parentIdx === rootIdx) {
-            insertInFrontOf = anchorRNode;
-            parentRNode = rootRNode;
-          } else {
-            insertInFrontOf = null;
-            parentRNode = unwrapRNode(lView[parentIdx]);
-          }
-          if (parentRNode !== null) {
-            ngDevMode && assertDomNode(parentRNode);
-            const refIdx = getRefFromIcuCreateOpCode(opCode);
-            ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, "Missing ref");
-            const child = lView[refIdx];
-            ngDevMode && assertDomNode(child);
-            nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);
-            const tIcu = getTIcu(tView, refIdx);
-            if (tIcu !== null && typeof tIcu === "object") {
-              ngDevMode && assertTIcu(tIcu);
-              const caseIndex = getCurrentICUCaseIndex(tIcu, lView);
-              if (caseIndex !== null) {
-                applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);
-              }
-            }
-          }
-          break;
-        case 1:
-          const elementNodeIndex = opCode >>> 1;
-          const attrName = mutableOpCodes[++i];
-          const attrValue = mutableOpCodes[++i];
-          setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);
-          break;
-        default:
-          if (ngDevMode) {
-            throw new RuntimeError(700, `Unable to determine the type of mutate operation for "${opCode}"`);
-          }
-      }
-    } else {
-      switch (opCode) {
-        case ICU_MARKER:
-          const commentValue = mutableOpCodes[++i];
-          const commentNodeIndex = mutableOpCodes[++i];
-          if (lView[commentNodeIndex] === null) {
-            ngDevMode && assertEqual(typeof commentValue, "string", `Expected "${commentValue}" to be a comment node value`);
-            ngDevMode && ngDevMode.rendererCreateComment++;
-            ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);
-            const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);
-            attachPatchData(commentRNode, lView);
-          }
-          break;
-        case ELEMENT_MARKER:
-          const tagName = mutableOpCodes[++i];
-          const elementNodeIndex = mutableOpCodes[++i];
-          if (lView[elementNodeIndex] === null) {
-            ngDevMode && assertEqual(typeof tagName, "string", `Expected "${tagName}" to be an element node tag name`);
-            ngDevMode && ngDevMode.rendererCreateElement++;
-            ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);
-            const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);
-            attachPatchData(elementRNode, lView);
-          }
-          break;
-        default:
-          ngDevMode && throwError2(`Unable to determine the type of mutate operation for "${opCode}"`);
-      }
-    }
-  }
-}
-function applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask2) {
-  for (let i = 0; i < updateOpCodes.length; i++) {
-    const checkBit = updateOpCodes[i];
-    const skipCodes = updateOpCodes[++i];
-    if (checkBit & changeMask2) {
-      let value = "";
-      for (let j = i + 1; j <= i + skipCodes; j++) {
-        const opCode = updateOpCodes[j];
-        if (typeof opCode == "string") {
-          value += opCode;
-        } else if (typeof opCode == "number") {
-          if (opCode < 0) {
-            value += renderStringify(lView[bindingsStartIndex - opCode]);
-          } else {
-            const nodeIndex = opCode >>> 2;
-            switch (opCode & 3) {
-              case 1:
-                const propName = updateOpCodes[++j];
-                const sanitizeFn = updateOpCodes[++j];
-                const tNodeOrTagName = tView.data[nodeIndex];
-                ngDevMode && assertDefined(tNodeOrTagName, "Experting TNode or string");
-                if (typeof tNodeOrTagName === "string") {
-                  setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);
-                } else {
-                  elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);
-                }
-                break;
-              case 0:
-                const rText = lView[nodeIndex];
-                rText !== null && updateTextNode(lView[RENDERER], rText, value);
-                break;
-              case 2:
-                applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);
-                break;
-              case 3:
-                applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);
-                break;
-            }
-          }
-        }
-      }
-    } else {
-      const opCode = updateOpCodes[i + 1];
-      if (opCode > 0 && (opCode & 3) === 3) {
-        const nodeIndex = opCode >>> 2;
-        const tIcu = getTIcu(tView, nodeIndex);
-        const currentIndex = lView[tIcu.currentCaseLViewIndex];
-        if (currentIndex < 0) {
-          applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);
-        }
-      }
-    }
-    i += skipCodes;
-  }
-}
-function applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {
-  ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);
-  let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];
-  if (activeCaseIndex !== null) {
-    let mask = changeMask;
-    if (activeCaseIndex < 0) {
-      activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;
-      mask = -1;
-    }
-    applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);
-  }
-}
-function applyIcuSwitchCase(tView, tIcu, lView, value) {
-  const caseIndex = getCaseIndex(tIcu, value);
-  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
-  if (activeCaseIndex !== caseIndex) {
-    applyIcuSwitchCaseRemove(tView, tIcu, lView);
-    lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;
-    if (caseIndex !== null) {
-      const anchorRNode = lView[tIcu.anchorIdx];
-      if (anchorRNode) {
-        ngDevMode && assertDomNode(anchorRNode);
-        applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);
-      }
-      claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);
-    }
-  }
-}
-function applyIcuSwitchCaseRemove(tView, tIcu, lView) {
-  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
-  if (activeCaseIndex !== null) {
-    const removeCodes = tIcu.remove[activeCaseIndex];
-    for (let i = 0; i < removeCodes.length; i++) {
-      const nodeOrIcuIndex = removeCodes[i];
-      if (nodeOrIcuIndex > 0) {
-        const rNode = getNativeByIndex(nodeOrIcuIndex, lView);
-        rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);
-      } else {
-        applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);
-      }
-    }
-  }
-}
-function getCaseIndex(icuExpression, bindingValue) {
-  let index = icuExpression.cases.indexOf(bindingValue);
-  if (index === -1) {
-    switch (icuExpression.type) {
-      case 1: {
-        const resolvedCase = getPluralCase(bindingValue, getLocaleId());
-        index = icuExpression.cases.indexOf(resolvedCase);
-        if (index === -1 && resolvedCase !== "other") {
-          index = icuExpression.cases.indexOf("other");
-        }
-        break;
-      }
-      case 0: {
-        index = icuExpression.cases.indexOf("other");
-        break;
-      }
-    }
-  }
-  return index === -1 ? null : index;
-}
-function i18nCreateOpCodesToString(opcodes) {
-  const createOpCodes = opcodes || (Array.isArray(this) ? this : []);
-  let lines = [];
-  for (let i = 0; i < createOpCodes.length; i++) {
-    const opCode = createOpCodes[i++];
-    const text = createOpCodes[i];
-    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
-    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
-    const index = opCode >>> I18nCreateOpCode.SHIFT;
-    lines.push(`lView[${index}] = document.${isComment ? "createComment" : "createText"}(${JSON.stringify(text)});`);
-    if (appendNow) {
-      lines.push(`parent.appendChild(lView[${index}]);`);
-    }
-  }
-  return lines;
-}
-function i18nUpdateOpCodesToString(opcodes) {
-  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
-  let lines = [];
-  function consumeOpCode(value) {
-    const ref = value >>> 2;
-    const opCode = value & 3;
-    switch (opCode) {
-      case 0:
-        return `(lView[${ref}] as Text).textContent = $$$`;
-      case 1:
-        const attrName = parser.consumeString();
-        const sanitizationFn = parser.consumeFunction();
-        const value2 = sanitizationFn ? `(${sanitizationFn})($$$)` : "$$$";
-        return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value2})`;
-      case 2:
-        return `icuSwitchCase(${ref}, $$$)`;
-      case 3:
-        return `icuUpdateCase(${ref})`;
-    }
-    throw new Error("unexpected OpCode");
-  }
-  while (parser.hasMore()) {
-    let mask = parser.consumeNumber();
-    let size = parser.consumeNumber();
-    const end = parser.i + size;
-    const statements = [];
-    let statement = "";
-    while (parser.i < end) {
-      let value = parser.consumeNumberOrString();
-      if (typeof value === "string") {
-        statement += value;
-      } else if (value < 0) {
-        statement += "${lView[i" + value + "]}";
-      } else {
-        const opCodeText = consumeOpCode(value);
-        statements.push(opCodeText.replace("$$$", "`" + statement + "`") + ";");
-        statement = "";
-      }
-    }
-    lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(" ")} }`);
-  }
-  return lines;
-}
-function icuCreateOpCodesToString(opcodes) {
-  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
-  let lines = [];
-  function consumeOpCode(opCode) {
-    const parent = getParentFromIcuCreateOpCode(opCode);
-    const ref = getRefFromIcuCreateOpCode(opCode);
-    switch (getInstructionFromIcuCreateOpCode(opCode)) {
-      case 0:
-        return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;
-      case 1:
-        return `(lView[${ref}] as Element).setAttribute("${parser.consumeString()}", "${parser.consumeString()}")`;
-    }
-    throw new Error("Unexpected OpCode: " + getInstructionFromIcuCreateOpCode(opCode));
-  }
-  let lastRef = -1;
-  while (parser.hasMore()) {
-    let value = parser.consumeNumberStringOrMarker();
-    if (value === ICU_MARKER) {
-      const text = parser.consumeString();
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createComment("${text}")`);
-    } else if (value === ELEMENT_MARKER) {
-      const text = parser.consumeString();
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createElement("${text}")`);
-    } else if (typeof value === "string") {
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createTextNode("${value}")`);
-    } else if (typeof value === "number") {
-      const line = consumeOpCode(value);
-      line && lines.push(line);
-    } else {
-      throw new Error("Unexpected value");
-    }
-  }
-  return lines;
-}
-function i18nRemoveOpCodesToString(opcodes) {
-  const removeCodes = opcodes || (Array.isArray(this) ? this : []);
-  let lines = [];
-  for (let i = 0; i < removeCodes.length; i++) {
-    const nodeOrIcuIndex = removeCodes[i];
-    if (nodeOrIcuIndex > 0) {
-      lines.push(`remove(lView[${nodeOrIcuIndex}])`);
-    } else {
-      lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);
-    }
-  }
-  return lines;
-}
-var OpCodeParser = class {
-  i = 0;
-  codes;
-  constructor(codes) {
-    this.codes = codes;
-  }
-  hasMore() {
-    return this.i < this.codes.length;
-  }
-  consumeNumber() {
-    let value = this.codes[this.i++];
-    assertNumber(value, "expecting number in OpCode");
-    return value;
-  }
-  consumeString() {
-    let value = this.codes[this.i++];
-    assertString(value, "expecting string in OpCode");
-    return value;
-  }
-  consumeFunction() {
-    let value = this.codes[this.i++];
-    if (value === null || typeof value === "function") {
-      return value;
-    }
-    throw new Error("expecting function in OpCode");
-  }
-  consumeNumberOrString() {
-    let value = this.codes[this.i++];
-    if (typeof value === "string") {
-      return value;
-    }
-    assertNumber(value, "expecting number or string in OpCode");
-    return value;
-  }
-  consumeNumberStringOrMarker() {
-    let value = this.codes[this.i++];
-    if (typeof value === "string" || typeof value === "number" || value == ICU_MARKER || value == ELEMENT_MARKER) {
-      return value;
-    }
-    assertNumber(value, "expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode");
-    return value;
-  }
-};
-var BINDING_REGEXP = /�(\d+):?\d*�/gi;
-var ICU_REGEXP = /({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi;
-var NESTED_ICU = /�(\d+)�/;
-var ICU_BLOCK_REGEXP = /^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/;
-var MARKER = `�`;
-var SUBTEMPLATE_REGEXP = /�\/?\*(\d+:\d+)�/gi;
-var PH_REGEXP = /�(\/?[#*]\d+):?\d*�/gi;
-var NGSP_UNICODE_REGEXP = /\uE500/g;
-function replaceNgsp(value) {
-  return value.replace(NGSP_UNICODE_REGEXP, " ");
-}
-function attachDebugGetter(obj, debugGetter) {
-  if (ngDevMode) {
-    Object.defineProperty(obj, "debug", {
-      get: debugGetter,
-      enumerable: false
-    });
-  } else {
-    throw new Error("This method should be guarded with `ngDevMode` so that it can be tree shaken in production!");
-  }
-}
-function i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {
-  const rootTNode = getCurrentParentTNode();
-  const createOpCodes = [];
-  const updateOpCodes = [];
-  const existingTNodeStack = [[]];
-  const astStack = [[]];
-  if (ngDevMode) {
-    attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  message = getTranslationForTemplate(message, subTemplateIndex);
-  const msgParts = replaceNgsp(message).split(PH_REGEXP);
-  for (let i = 0; i < msgParts.length; i++) {
-    let value = msgParts[i];
-    if ((i & 1) === 0) {
-      const parts = i18nParseTextIntoPartsAndICU(value);
-      for (let j = 0; j < parts.length; j++) {
-        let part = parts[j];
-        if ((j & 1) === 0) {
-          const text = part;
-          ngDevMode && assertString(text, "Parsed ICU part should be string");
-          if (text !== "") {
-            i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);
-          }
-        } else {
-          const icuExpression = part;
-          if (typeof icuExpression !== "object") {
-            throw new Error(`Unable to parse ICU expression in "${message}" message.`);
-          }
-          const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : "", true);
-          const icuNodeIndex = icuContainerTNode.index;
-          ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, "Index must be in absolute LView offset");
-          icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);
-        }
-      }
-    } else {
-      const isClosing = value.charCodeAt(0) === 47;
-      const type = value.charCodeAt(isClosing ? 1 : 0);
-      ngDevMode && assertOneOf(
-        type,
-        42,
-        35
-        /* CharCode.HASH */
-      );
-      const index2 = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));
-      if (isClosing) {
-        existingTNodeStack.shift();
-        astStack.shift();
-        setCurrentTNode(getCurrentParentTNode(), false);
-      } else {
-        const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index2);
-        existingTNodeStack.unshift([]);
-        setCurrentTNode(tNode, true);
-        const placeholderNode = {
-          kind: 2,
-          index: index2,
-          children: [],
-          type: type === 35 ? 0 : 1
-          /* I18nPlaceholderType.SUBTEMPLATE */
-        };
-        astStack[0].push(placeholderNode);
-        astStack.unshift(placeholderNode.children);
-      }
-    }
-  }
-  tView.data[index] = {
-    create: createOpCodes,
-    update: updateOpCodes,
-    ast: astStack[0],
-    parentTNodeIndex
-  };
-}
-function createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {
-  const i18nNodeIdx = allocExpando(tView, lView, 1, null);
-  let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;
-  let parentTNode = getCurrentParentTNode();
-  if (rootTNode === parentTNode) {
-    parentTNode = null;
-  }
-  if (parentTNode === null) {
-    opCode |= I18nCreateOpCode.APPEND_EAGERLY;
-  }
-  if (isICU) {
-    opCode |= I18nCreateOpCode.COMMENT;
-    ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);
-  }
-  createOpCodes.push(opCode, text === null ? "" : text);
-  const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 : 1, text === null ? ngDevMode ? "{{?}}" : "" : text, null);
-  addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);
-  const tNodeIdx = tNode.index;
-  setCurrentTNode(
-    tNode,
-    false
-    /* Text nodes are self closing */
-  );
-  if (parentTNode !== null && rootTNode !== parentTNode) {
-    setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);
-  }
-  return tNode;
-}
-function i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {
-  const hasBinding = text.match(BINDING_REGEXP);
-  const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);
-  const index = tNode.index;
-  if (hasBinding) {
-    generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);
-  }
-  ast.push({
-    kind: 0,
-    index
-  });
-}
-function i18nAttributesFirstPass(tView, index, values) {
-  const previousElement = getCurrentTNode();
-  const previousElementIndex = previousElement.index;
-  const updateOpCodes = [];
-  if (ngDevMode) {
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  if (tView.firstCreatePass && tView.data[index] === null) {
-    for (let i = 0; i < values.length; i += 2) {
-      const attrName = values[i];
-      const message = values[i + 1];
-      if (message !== "") {
-        if (ICU_REGEXP.test(message)) {
-          throw new Error(`ICU expressions are not supported in attributes. Message: "${message}".`);
-        }
-        generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), null);
-      }
-    }
-    tView.data[index] = updateOpCodes;
-  }
-}
-function generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {
-  ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, "Index must be in absolute LView offset");
-  const maskIndex = updateOpCodes.length;
-  const sizeIndex = maskIndex + 1;
-  updateOpCodes.push(null, null);
-  const startIndex = maskIndex + 2;
-  if (ngDevMode) {
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  const textParts = str.split(BINDING_REGEXP);
-  let mask = 0;
-  for (let j = 0; j < textParts.length; j++) {
-    const textValue = textParts[j];
-    if (j & 1) {
-      const bindingIndex = bindingStart + parseInt(textValue, 10);
-      updateOpCodes.push(-1 - bindingIndex);
-      mask = mask | toMaskBit(bindingIndex);
-    } else if (textValue !== "") {
-      updateOpCodes.push(textValue);
-    }
-  }
-  updateOpCodes.push(destinationNode << 2 | (attrName ? 1 : 0));
-  if (attrName) {
-    updateOpCodes.push(attrName, sanitizeFn);
-  }
-  updateOpCodes[maskIndex] = mask;
-  updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;
-  return mask;
-}
-function countBindings(opCodes) {
-  let count2 = 0;
-  for (let i = 0; i < opCodes.length; i++) {
-    const opCode = opCodes[i];
-    if (typeof opCode === "number" && opCode < 0) {
-      count2++;
-    }
-  }
-  return count2;
-}
-function toMaskBit(bindingIndex) {
-  return 1 << Math.min(bindingIndex, 31);
-}
-function removeInnerTemplateTranslation(message) {
-  let match;
-  let res = "";
-  let index = 0;
-  let inTemplate = false;
-  let tagMatched;
-  while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {
-    if (!inTemplate) {
-      res += message.substring(index, match.index + match[0].length);
-      tagMatched = match[1];
-      inTemplate = true;
-    } else {
-      if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {
-        index = match.index;
-        inTemplate = false;
-      }
-    }
-  }
-  ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation "${message}"`);
-  res += message.slice(index);
-  return res;
-}
-function getTranslationForTemplate(message, subTemplateIndex) {
-  if (isRootTemplateMessage(subTemplateIndex)) {
-    return removeInnerTemplateTranslation(message);
-  } else {
-    const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;
-    const end = message.search(new RegExp(`${MARKER}\\/\\*\\d+:${subTemplateIndex}${MARKER}`));
-    return removeInnerTemplateTranslation(message.substring(start, end));
-  }
-}
-function icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {
-  ngDevMode && assertDefined(icuExpression, "ICU expression must be defined");
-  let bindingMask = 0;
-  const tIcu = {
-    type: icuExpression.type,
-    currentCaseLViewIndex: allocExpando(tView, lView, 1, null),
-    anchorIdx,
-    cases: [],
-    create: [],
-    remove: [],
-    update: []
-  };
-  addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);
-  setTIcu(tView, anchorIdx, tIcu);
-  const values = icuExpression.values;
-  const cases = [];
-  for (let i = 0; i < values.length; i++) {
-    const valueArr = values[i];
-    const nestedIcus = [];
-    for (let j = 0; j < valueArr.length; j++) {
-      const value = valueArr[j];
-      if (typeof value !== "string") {
-        const icuIndex = nestedIcus.push(value) - 1;
-        valueArr[j] = `<!--�${icuIndex}�-->`;
-      }
-    }
-    const caseAst = [];
-    cases.push(caseAst);
-    bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(""), nestedIcus) | bindingMask;
-  }
-  if (bindingMask) {
-    addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);
-  }
-  ast.push({
-    kind: 3,
-    index: anchorIdx,
-    cases,
-    currentCaseLViewIndex: tIcu.currentCaseLViewIndex
-  });
-}
-function parseICUBlock(pattern) {
-  const cases = [];
-  const values = [];
-  let icuType = 1;
-  let mainBinding = 0;
-  pattern = pattern.replace(ICU_BLOCK_REGEXP, function(str, binding, type) {
-    if (type === "select") {
-      icuType = 0;
-    } else {
-      icuType = 1;
-    }
-    mainBinding = parseInt(binding.slice(1), 10);
-    return "";
-  });
-  const parts = i18nParseTextIntoPartsAndICU(pattern);
-  for (let pos = 0; pos < parts.length; ) {
-    let key = parts[pos++].trim();
-    if (icuType === 1) {
-      key = key.replace(/\s*(?:=)?(\w+)\s*/, "$1");
-    }
-    if (key.length) {
-      cases.push(key);
-    }
-    const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);
-    if (cases.length > values.length) {
-      values.push(blocks);
-    }
-  }
-  return {
-    type: icuType,
-    mainBinding,
-    cases,
-    values
-  };
-}
-function i18nParseTextIntoPartsAndICU(pattern) {
-  if (!pattern) {
-    return [];
-  }
-  let prevPos = 0;
-  const braceStack = [];
-  const results = [];
-  const braces = /[{}]/g;
-  braces.lastIndex = 0;
-  let match;
-  while (match = braces.exec(pattern)) {
-    const pos = match.index;
-    if (match[0] == "}") {
-      braceStack.pop();
-      if (braceStack.length == 0) {
-        const block = pattern.substring(prevPos, pos);
-        if (ICU_BLOCK_REGEXP.test(block)) {
-          results.push(parseICUBlock(block));
-        } else {
-          results.push(block);
-        }
-        prevPos = pos + 1;
-      }
-    } else {
-      if (braceStack.length == 0) {
-        const substring2 = pattern.substring(prevPos, pos);
-        results.push(substring2);
-        prevPos = pos + 1;
-      }
-      braceStack.push("{");
-    }
-  }
-  const substring = pattern.substring(prevPos);
-  results.push(substring);
-  return results;
-}
-function parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {
-  const create = [];
-  const remove2 = [];
-  const update = [];
-  if (ngDevMode) {
-    attachDebugGetter(create, icuCreateOpCodesToString);
-    attachDebugGetter(remove2, i18nRemoveOpCodesToString);
-    attachDebugGetter(update, i18nUpdateOpCodesToString);
-  }
-  tIcu.cases.push(caseName);
-  tIcu.create.push(create);
-  tIcu.remove.push(remove2);
-  tIcu.update.push(update);
-  const inertBodyHelper2 = getInertBodyHelper(getDocument());
-  const inertBodyElement = inertBodyHelper2.getInertBodyElement(unsafeCaseHtml);
-  ngDevMode && assertDefined(inertBodyElement, "Unable to generate inert body element");
-  const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;
-  if (inertRootNode) {
-    return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove2, update, inertRootNode, parentIdx, nestedIcus, 0);
-  } else {
-    return 0;
-  }
-}
-function walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove2, update, parentNode, parentIdx, nestedIcus, depth) {
-  let bindingMask = 0;
-  let currentNode = parentNode.firstChild;
-  while (currentNode) {
-    const newIndex = allocExpando(tView, lView, 1, null);
-    switch (currentNode.nodeType) {
-      case Node.ELEMENT_NODE:
-        const element = currentNode;
-        const tagName = element.tagName.toLowerCase();
-        if (VALID_ELEMENTS.hasOwnProperty(tagName)) {
-          addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);
-          tView.data[newIndex] = tagName;
-          const elAttrs = element.attributes;
-          for (let i = 0; i < elAttrs.length; i++) {
-            const attr = elAttrs.item(i);
-            const lowerAttrName = attr.name.toLowerCase();
-            const hasBinding2 = !!attr.value.match(BINDING_REGEXP);
-            if (hasBinding2) {
-              if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {
-                if (URI_ATTRS[lowerAttrName]) {
-                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, _sanitizeUrl);
-                } else {
-                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, null);
-                }
-              } else {
-                ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ${lowerAttrName} on element ${tagName} (see ${XSS_SECURITY_URL})`);
-              }
-            } else {
-              addCreateAttribute(create, newIndex, attr);
-            }
-          }
-          const elementNode = {
-            kind: 1,
-            index: newIndex,
-            children: []
-          };
-          ast.push(elementNode);
-          bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove2, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;
-          addRemoveNode(remove2, newIndex, depth);
-        }
-        break;
-      case Node.TEXT_NODE:
-        const value = currentNode.textContent || "";
-        const hasBinding = value.match(BINDING_REGEXP);
-        addCreateNodeAndAppend(create, null, hasBinding ? "" : value, parentIdx, newIndex);
-        addRemoveNode(remove2, newIndex, depth);
-        if (hasBinding) {
-          bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;
-        }
-        ast.push({
-          kind: 0,
-          index: newIndex
-        });
-        break;
-      case Node.COMMENT_NODE:
-        const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || "");
-        if (isNestedIcu) {
-          const nestedIcuIndex = parseInt(isNestedIcu[1], 10);
-          const icuExpression = nestedIcus[nestedIcuIndex];
-          addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : "", parentIdx, newIndex);
-          icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);
-          addRemoveNestedIcu(remove2, newIndex, depth);
-        }
-        break;
-    }
-    currentNode = currentNode.nextSibling;
-  }
-  return bindingMask;
-}
-function addRemoveNode(remove2, index, depth) {
-  if (depth === 0) {
-    remove2.push(index);
-  }
-}
-function addRemoveNestedIcu(remove2, index, depth) {
-  if (depth === 0) {
-    remove2.push(~index);
-    remove2.push(index);
-  }
-}
-function addUpdateIcuSwitch(update, icuExpression, index) {
-  update.push(
-    toMaskBit(icuExpression.mainBinding),
-    2,
-    -1 - icuExpression.mainBinding,
-    index << 2 | 2
-    /* I18nUpdateOpCode.IcuSwitch */
-  );
-}
-function addUpdateIcuUpdate(update, bindingMask, index) {
-  update.push(
-    bindingMask,
-    1,
-    index << 2 | 3
-    /* I18nUpdateOpCode.IcuUpdate */
-  );
-}
-function addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {
-  if (marker !== null) {
-    create.push(marker);
-  }
-  create.push(text, createAtIdx, icuCreateOpCode(0, appendToParentIdx, createAtIdx));
-}
-function addCreateAttribute(create, newIndex, attr) {
-  create.push(newIndex << 1 | 1, attr.name, attr.value);
-}
-var ROOT_TEMPLATE_ID = 0;
-var PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]/;
-var PP_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g;
-var PP_ICU_VARS_REGEXP = /({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g;
-var PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;
-var PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\d+)?)�/g;
-var PP_CLOSE_TEMPLATE_REGEXP = /\/\*/;
-var PP_TEMPLATE_ID_REGEXP = /\d+\:(\d+)/;
-function i18nPostprocess(message, replacements = {}) {
-  let result = message;
-  if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {
-    const matches = {};
-    const templateIdsStack = [ROOT_TEMPLATE_ID];
-    result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {
-      const content = phs || tmpl;
-      const placeholders = matches[content] || [];
-      if (!placeholders.length) {
-        content.split("|").forEach((placeholder2) => {
-          const match = placeholder2.match(PP_TEMPLATE_ID_REGEXP);
-          const templateId2 = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;
-          const isCloseTemplateTag2 = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder2);
-          placeholders.push([templateId2, isCloseTemplateTag2, placeholder2]);
-        });
-        matches[content] = placeholders;
-      }
-      if (!placeholders.length) {
-        throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);
-      }
-      const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];
-      let idx = 0;
-      for (let i = 0; i < placeholders.length; i++) {
-        if (placeholders[i][0] === currentTemplateId) {
-          idx = i;
-          break;
-        }
-      }
-      const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];
-      if (isCloseTemplateTag) {
-        templateIdsStack.pop();
-      } else if (currentTemplateId !== templateId) {
-        templateIdsStack.push(templateId);
-      }
-      placeholders.splice(idx, 1);
-      return placeholder;
-    });
-  }
-  if (!Object.keys(replacements).length) {
-    return result;
-  }
-  result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {
-    return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;
-  });
-  result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {
-    return replacements.hasOwnProperty(key) ? replacements[key] : match;
-  });
-  result = result.replace(PP_ICUS_REGEXP, (match, key) => {
-    if (replacements.hasOwnProperty(key)) {
-      const list = replacements[key];
-      if (!list.length) {
-        throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);
-      }
-      return list.shift();
-    }
-    return match;
-  });
-  return result;
-}
-function ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {
-  const tView = getTView();
-  const lView = getLView();
-  const adjustedIndex = HEADER_OFFSET + index;
-  ngDevMode && assertDefined(tView, `tView should be defined`);
-  const message = getConstant(tView.consts, messageIndex);
-  const parentTNode = getCurrentParentTNode();
-  if (tView.firstCreatePass) {
-    i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);
-  }
-  if (tView.type === 2) {
-    const componentLView = lView[DECLARATION_COMPONENT_VIEW];
-    componentLView[FLAGS] |= 32;
-  } else {
-    lView[FLAGS] |= 32;
-  }
-  const tI18n = tView.data[adjustedIndex];
-  const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;
-  const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);
-  const insertInFrontOf = parentTNode && parentTNode.type & 8 ? lView[parentTNode.index] : null;
-  prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);
-  applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);
-  setInI18nBlock(true);
-}
-function ɵɵi18nEnd() {
-  setInI18nBlock(false);
-}
-function ɵɵi18n(index, messageIndex, subTemplateIndex) {
-  ɵɵi18nStart(index, messageIndex, subTemplateIndex);
-  ɵɵi18nEnd();
-}
-function ɵɵi18nAttributes(index, attrsIndex) {
-  const tView = getTView();
-  ngDevMode && assertDefined(tView, `tView should be defined`);
-  const attrs = getConstant(tView.consts, attrsIndex);
-  i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);
-}
-function ɵɵi18nExp(value) {
-  const lView = getLView();
-  setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));
-  return ɵɵi18nExp;
-}
-function ɵɵi18nApply(index) {
-  applyI18n(getTView(), getLView(), index + HEADER_OFFSET);
-}
-function ɵɵi18nPostprocess(message, replacements = {}) {
-  return i18nPostprocess(message, replacements);
-}
-var stashEventListener = (el, eventName, listenerFn) => {
-};
-function setStashFn(fn) {
-  stashEventListener = fn;
-}
-function ɵɵlistener(eventName, listenerFn, useCapture, eventTargetResolver) {
-  const lView = getLView();
-  const tView = getTView();
-  const tNode = getCurrentTNode();
-  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);
-  return ɵɵlistener;
-}
-function ɵɵsyntheticHostListener(eventName, listenerFn) {
-  const tNode = getCurrentTNode();
-  const lView = getLView();
-  const tView = getTView();
-  const currentDef = getCurrentDirectiveDef(tView.data);
-  const renderer = loadComponentRenderer(currentDef, tNode, lView);
-  listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);
-  return ɵɵsyntheticHostListener;
-}
-function findExistingListener(tView, lView, eventName, tNodeIdx) {
-  const tCleanup = tView.cleanup;
-  if (tCleanup != null) {
-    for (let i = 0; i < tCleanup.length - 1; i += 2) {
-      const cleanupEventName = tCleanup[i];
-      if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
-        const lCleanup = lView[CLEANUP];
-        const listenerIdxInLCleanup = tCleanup[i + 2];
-        return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
-      }
-      if (typeof cleanupEventName === "string") {
-        i += 2;
-      }
-    }
-  }
-  return null;
-}
-function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {
-  const isTNodeDirectiveHost = isDirectiveHost(tNode);
-  const firstCreatePass = tView.firstCreatePass;
-  const tCleanup = firstCreatePass && getOrCreateTViewCleanup(tView);
-  const context2 = lView[CONTEXT];
-  const lCleanup = getOrCreateLViewCleanup(lView);
-  ngDevMode && assertTNodeType(
-    tNode,
-    3 | 12
-    /* TNodeType.AnyContainer */
-  );
-  let processOutputs = true;
-  if (tNode.type & 3 || eventTargetResolver) {
-    const native = getNativeByTNode(tNode, lView);
-    const target = eventTargetResolver ? eventTargetResolver(native) : native;
-    const lCleanupIndex = lCleanup.length;
-    const idxOrTargetGetter = eventTargetResolver ? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;
-    let existingListener = null;
-    if (!eventTargetResolver && isTNodeDirectiveHost) {
-      existingListener = findExistingListener(tView, lView, eventName, tNode.index);
-    }
-    if (existingListener !== null) {
-      const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
-      lastListenerFn.__ngNextListenerFn__ = listenerFn;
-      existingListener.__ngLastListenerFn__ = listenerFn;
-      processOutputs = false;
-    } else {
-      listenerFn = wrapListener(tNode, lView, context2, listenerFn);
-      stashEventListener(native, eventName, listenerFn);
-      const cleanupFn = renderer.listen(target, eventName, listenerFn);
-      ngDevMode && ngDevMode.rendererAddEventListener++;
-      lCleanup.push(listenerFn, cleanupFn);
-      tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
-    }
-  } else {
-    listenerFn = wrapListener(tNode, lView, context2, listenerFn);
-  }
-  const outputs = tNode.outputs;
-  let props;
-  if (processOutputs && outputs !== null && (props = outputs[eventName])) {
-    const propsLength = props.length;
-    if (propsLength) {
-      for (let i = 0; i < propsLength; i += 2) {
-        const index = props[i];
-        ngDevMode && assertIndexInRange(lView, index);
-        const minifiedName = props[i + 1];
-        const directiveInstance = lView[index];
-        const output2 = directiveInstance[minifiedName];
-        if (ngDevMode && !isOutputSubscribable(output2)) {
-          throw new Error(`@Output ${minifiedName} not initialized in '${directiveInstance.constructor.name}'.`);
-        }
-        const subscription = output2.subscribe(listenerFn);
-        const idx = lCleanup.length;
-        lCleanup.push(listenerFn, subscription);
-        tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
-      }
-    }
-  }
-}
-function executeListenerWithErrorHandling(lView, context2, listenerFn, e) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    profiler(6, context2, listenerFn);
-    return listenerFn(e) !== false;
-  } catch (error) {
-    handleError(lView, error);
-    return false;
-  } finally {
-    profiler(7, context2, listenerFn);
-    setActiveConsumer(prevConsumer);
-  }
-}
-function wrapListener(tNode, lView, context2, listenerFn) {
-  return function wrapListenerIn_markDirtyAndPreventDefault(e) {
-    if (e === Function) {
-      return listenerFn;
-    }
-    const startView = tNode.componentOffset > -1 ? getComponentLViewByIndex(tNode.index, lView) : lView;
-    markViewDirty(
-      startView,
-      5
-      /* NotificationSource.Listener */
-    );
-    let result = executeListenerWithErrorHandling(lView, context2, listenerFn, e);
-    let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;
-    while (nextListenerFn) {
-      result = executeListenerWithErrorHandling(lView, context2, nextListenerFn, e) && result;
-      nextListenerFn = nextListenerFn.__ngNextListenerFn__;
-    }
-    return result;
-  };
-}
-function isOutputSubscribable(value) {
-  return value != null && typeof value.subscribe === "function";
-}
-function ɵɵnextContext(level = 1) {
-  return nextContextImpl(level);
-}
-function matchingProjectionSlotIndex(tNode, projectionSlots) {
-  let wildcardNgContentIndex = null;
-  const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);
-  for (let i = 0; i < projectionSlots.length; i++) {
-    const slotValue = projectionSlots[i];
-    if (slotValue === "*") {
-      wildcardNgContentIndex = i;
-      continue;
-    }
-    if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(
-      tNode,
-      slotValue,
-      /* isProjectionMode */
-      true
-    ) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {
-      return i;
-    }
-  }
-  return wildcardNgContentIndex;
-}
-function ɵɵprojectionDef(projectionSlots) {
-  const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];
-  if (!componentNode.projection) {
-    const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;
-    const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);
-    const tails = projectionHeads.slice();
-    let componentChild = componentNode.child;
-    while (componentChild !== null) {
-      if (componentChild.type !== 128) {
-        const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;
-        if (slotIndex !== null) {
-          if (tails[slotIndex]) {
-            tails[slotIndex].projectionNext = componentChild;
-          } else {
-            projectionHeads[slotIndex] = componentChild;
-          }
-          tails[slotIndex] = componentChild;
-        }
-      }
-      componentChild = componentChild.next;
-    }
-  }
-}
-function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {
-  const lView = getLView();
-  const tView = getTView();
-  const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;
-  if (fallbackIndex !== null) {
-    declareTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);
-  }
-  const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16, null, attrs || null);
-  if (tProjectionNode.projection === null) {
-    tProjectionNode.projection = selectorIndex;
-  }
-  setCurrentTNodeAsNotParent();
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();
-  const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];
-  const isEmpty2 = componentHostNode.projection[tProjectionNode.projection] === null;
-  if (isEmpty2 && fallbackIndex !== null) {
-    insertFallbackContent(lView, tView, fallbackIndex);
-  } else if (isNodeCreationMode && (tProjectionNode.flags & 32) !== 32) {
-    applyProjection(tView, lView, tProjectionNode);
-  }
-}
-function insertFallbackContent(lView, tView, fallbackIndex) {
-  const adjustedIndex = HEADER_OFFSET + fallbackIndex;
-  const fallbackTNode = tView.data[adjustedIndex];
-  const fallbackLContainer = lView[adjustedIndex];
-  ngDevMode && assertTNode(fallbackTNode);
-  ngDevMode && assertLContainer(fallbackLContainer);
-  const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);
-  const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, void 0, {
-    dehydratedView
-  });
-  addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));
-}
-function ɵɵpropertyInterpolate(propName, v0, sanitizer) {
-  ɵɵpropertyInterpolate1(propName, "", v0, "", sanitizer);
-  return ɵɵpropertyInterpolate;
-}
-function ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);
-  }
-  return ɵɵpropertyInterpolate1;
-}
-function ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);
-  }
-  return ɵɵpropertyInterpolate2;
-}
-function ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);
-  }
-  return ɵɵpropertyInterpolate3;
-}
-function ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
-  }
-  return ɵɵpropertyInterpolate4;
-}
-function ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
-  }
-  return ɵɵpropertyInterpolate5;
-}
-function ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
-  }
-  return ɵɵpropertyInterpolate6;
-}
-function ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
-  }
-  return ɵɵpropertyInterpolate7;
-}
-function ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
-  }
-  return ɵɵpropertyInterpolate8;
-}
-function ɵɵpropertyInterpolateV(propName, values, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    if (ngDevMode) {
-      const interpolationInBetween = [values[0]];
-      for (let i = 2; i < values.length; i += 2) {
-        interpolationInBetween.push(values[i]);
-      }
-      storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
-    }
-  }
-  return ɵɵpropertyInterpolateV;
-}
-function ɵɵcontentQuery(directiveIndex, predicate, flags, read) {
-  createContentQuery(directiveIndex, predicate, flags, read);
-}
-function ɵɵviewQuery(predicate, flags, read) {
-  createViewQuery(predicate, flags, read);
-}
-function ɵɵqueryRefresh(queryList) {
-  const lView = getLView();
-  const tView = getTView();
-  const queryIndex = getCurrentQueryIndex();
-  setCurrentQueryIndex(queryIndex + 1);
-  const tQuery = getTQuery(tView, queryIndex);
-  if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2) === 2)) {
-    if (tQuery.matches === null) {
-      queryList.reset([]);
-    } else {
-      const result = getQueryResults(lView, queryIndex);
-      queryList.reset(result, unwrapElementRef);
-      queryList.notifyOnChanges();
-    }
-    return true;
-  }
-  return false;
-}
-function ɵɵloadQuery() {
-  return loadQueryInternal(getLView(), getCurrentQueryIndex());
-}
-function ɵɵcontentQuerySignal(directiveIndex, target, predicate, flags, read) {
-  bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));
-}
-function ɵɵviewQuerySignal(target, predicate, flags, read) {
-  bindQueryToSignal(target, createViewQuery(predicate, flags, read));
-}
-function ɵɵqueryAdvance(indexOffset = 1) {
-  setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);
-}
-function store(tView, lView, index, value) {
-  if (index >= tView.data.length) {
-    tView.data[index] = null;
-    tView.blueprint[index] = null;
-  }
-  lView[index] = value;
-}
-function ɵɵreference(index) {
-  const contextLView = getContextLView();
-  return load(contextLView, HEADER_OFFSET + index);
-}
-function ɵɵstyleMapInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolateV(values) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate1;
-}
-function ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate2;
-}
-function ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate3;
-}
-function ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate4;
-}
-function ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate5;
-}
-function ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate6;
-}
-function ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate7;
-}
-function ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate8;
-}
-function ɵɵstylePropInterpolateV(prop, values, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolateV;
-}
-function ɵɵtext(index, value = "") {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "text nodes should be created before any bindings");
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1, value, null) : tView.data[adjustedIndex];
-  const textNative = _locateOrCreateTextNode(tView, lView, tNode, value, index);
-  lView[adjustedIndex] = textNative;
-  if (wasLastNodeCreated()) {
-    appendChild(tView, lView, textNative, tNode);
-  }
-  setCurrentTNode(tNode, false);
-}
-var _locateOrCreateTextNode = (tView, lView, tNode, value, index) => {
-  lastNodeWasCreated(true);
-  return createTextNode(lView[RENDERER], value);
-};
-function locateOrCreateTextNodeImpl(tView, lView, tNode, value, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createTextNode(lView[RENDERER], value);
-  }
-  const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);
-  ngDevMode && markRNodeAsClaimedByHydration(textNative);
-  return textNative;
-}
-function enableLocateOrCreateTextNodeImpl() {
-  _locateOrCreateTextNode = locateOrCreateTextNodeImpl;
-}
-function ɵɵtextInterpolate(v0) {
-  ɵɵtextInterpolate1("", v0, "");
-  return ɵɵtextInterpolate;
-}
-function ɵɵtextInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation1(lView, prefix, v0, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate1;
-}
-function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate2;
-}
-function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate3;
-}
-function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate4;
-}
-function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate5;
-}
-function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate6;
-}
-function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate7;
-}
-function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate8;
-}
-function ɵɵtextInterpolateV(values) {
-  const lView = getLView();
-  const interpolated = interpolationV(lView, values);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolateV;
-}
-function ɵɵtwoWayProperty(propName, value, sanitizer) {
-  if (isWritableSignal(value)) {
-    value = value();
-  }
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵtwoWayProperty;
-}
-function ɵɵtwoWayBindingSet(target, value) {
-  const canWrite = isWritableSignal(target);
-  canWrite && target.set(value);
-  return canWrite;
-}
-function ɵɵtwoWayListener(eventName, listenerFn) {
-  const lView = getLView();
-  const tView = getTView();
-  const tNode = getCurrentTNode();
-  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);
-  return ɵɵtwoWayListener;
-}
-var UNINITIALIZED_LET = {};
-function ɵɵdeclareLet(index) {
-  const tView = getTView();
-  const lView = getLView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = getOrCreateTNode(tView, adjustedIndex, 128, null, null);
-  setCurrentTNode(tNode, false);
-  store(tView, lView, adjustedIndex, UNINITIALIZED_LET);
-  return ɵɵdeclareLet;
-}
-function ɵɵstoreLet(value) {
-  performanceMarkFeature("NgLet");
-  const tView = getTView();
-  const lView = getLView();
-  const index = getSelectedIndex();
-  store(tView, lView, index, value);
-  return value;
-}
-function ɵɵreadContextLet(index) {
-  const contextLView = getContextLView();
-  const value = load(contextLView, HEADER_OFFSET + index);
-  if (value === UNINITIALIZED_LET) {
-    throw new RuntimeError(314, ngDevMode && "Attempting to access a @let declaration whose value is not available yet");
-  }
-  return value;
-}
-function providersResolver(def, providers, viewProviders) {
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    const isComponent2 = isComponentDef(def);
-    resolveProvider(viewProviders, tView.data, tView.blueprint, isComponent2, true);
-    resolveProvider(providers, tView.data, tView.blueprint, isComponent2, false);
-  }
-}
-function resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent2, isViewProvider) {
-  provider = resolveForwardRef(provider);
-  if (Array.isArray(provider)) {
-    for (let i = 0; i < provider.length; i++) {
-      resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent2, isViewProvider);
-    }
-  } else {
-    const tView = getTView();
-    const lView = getLView();
-    const tNode = getCurrentTNode();
-    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);
-    const providerFactory = providerToFactory(provider);
-    if (ngDevMode) {
-      const injector = new NodeInjector(tNode, lView);
-      runInInjectorProfilerContext(injector, token, () => {
-        emitProviderConfiguredEvent(provider, isViewProvider);
-      });
-    }
-    const beginIndex = tNode.providerIndexes & 1048575;
-    const endIndex = tNode.directiveStart;
-    const cptViewProvidersCount = tNode.providerIndexes >> 20;
-    if (isTypeProvider(provider) || !provider.multi) {
-      const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);
-      const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);
-      if (existingFactoryIndex === -1) {
-        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
-        registerDestroyHooksIfSupported(tView, provider, tInjectables.length);
-        tInjectables.push(token);
-        tNode.directiveStart++;
-        tNode.directiveEnd++;
-        if (isViewProvider) {
-          tNode.providerIndexes += 1048576;
-        }
-        lInjectablesBlueprint.push(factory);
-        lView.push(factory);
-      } else {
-        lInjectablesBlueprint[existingFactoryIndex] = factory;
-        lView[existingFactoryIndex] = factory;
-      }
-    } else {
-      const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);
-      const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);
-      const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];
-      const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];
-      if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {
-        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
-        const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent2, providerFactory);
-        if (!isViewProvider && doesViewProvidersFactoryExist) {
-          lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;
-        }
-        registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);
-        tInjectables.push(token);
-        tNode.directiveStart++;
-        tNode.directiveEnd++;
-        if (isViewProvider) {
-          tNode.providerIndexes += 1048576;
-        }
-        lInjectablesBlueprint.push(factory);
-        lView.push(factory);
-      } else {
-        const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent2);
-        registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);
-      }
-      if (!isViewProvider && isComponent2 && doesViewProvidersFactoryExist) {
-        lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;
-      }
-    }
-  }
-}
-function registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {
-  const providerIsTypeProvider = isTypeProvider(provider);
-  const providerIsClassProvider = isClassProvider(provider);
-  if (providerIsTypeProvider || providerIsClassProvider) {
-    const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;
-    const prototype = classToken.prototype;
-    const ngOnDestroy = prototype.ngOnDestroy;
-    if (ngOnDestroy) {
-      const hooks = tView.destroyHooks || (tView.destroyHooks = []);
-      if (!providerIsTypeProvider && provider.multi) {
-        ngDevMode && assertDefined(indexInFactory, "indexInFactory when registering multi factory destroy hook");
-        const existingCallbacksIndex = hooks.indexOf(contextIndex);
-        if (existingCallbacksIndex === -1) {
-          hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);
-        } else {
-          hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);
-        }
-      } else {
-        hooks.push(contextIndex, ngOnDestroy);
-      }
-    }
-  }
-}
-function multiFactoryAdd(multiFactory2, factory, isComponentProvider) {
-  if (isComponentProvider) {
-    multiFactory2.componentProviders++;
-  }
-  return multiFactory2.multi.push(factory) - 1;
-}
-function indexOf(item, arr, begin, end) {
-  for (let i = begin; i < end; i++) {
-    if (arr[i] === item) return i;
-  }
-  return -1;
-}
-function multiProvidersFactoryResolver(_, tData, lData, tNode) {
-  return multiResolve(this.multi, []);
-}
-function multiViewProvidersFactoryResolver(_, tData, lView, tNode) {
-  const factories = this.multi;
-  let result;
-  if (this.providerFactory) {
-    const componentCount = this.providerFactory.componentProviders;
-    const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);
-    result = multiProviders.slice(0, componentCount);
-    multiResolve(factories, result);
-    for (let i = componentCount; i < multiProviders.length; i++) {
-      result.push(multiProviders[i]);
-    }
-  } else {
-    result = [];
-    multiResolve(factories, result);
-  }
-  return result;
-}
-function multiResolve(factories, result) {
-  for (let i = 0; i < factories.length; i++) {
-    const factory = factories[i];
-    result.push(factory());
-  }
-  return result;
-}
-function multiFactory(factoryFn, index, isViewProvider, isComponent2, f) {
-  const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);
-  factory.multi = [];
-  factory.index = index;
-  factory.componentProviders = 0;
-  multiFactoryAdd(factory, f, isComponent2 && !isViewProvider);
-  return factory;
-}
-function ɵɵProvidersFeature(providers, viewProviders = []) {
-  return (definition) => {
-    definition.providersResolver = (def, processProvidersFn) => {
-      return providersResolver(
-        def,
-        //
-        processProvidersFn ? processProvidersFn(providers) : providers,
-        //
-        viewProviders
-      );
-    };
-  };
-}
-function ɵɵExternalStylesFeature(styleUrls) {
-  return (definition) => {
-    if (styleUrls.length < 1) {
-      return;
-    }
-    definition.getExternalStyles = (encapsulationId) => {
-      const urls = styleUrls.map((value) => value + "?ngcomp" + (encapsulationId ? "=" + encodeURIComponent(encapsulationId) : "") + "&e=" + definition.encapsulation);
-      return urls;
-    };
-  };
-}
-function ɵɵsetComponentScope(type, directives, pipes) {
-  const def = type.ɵcmp;
-  def.directiveDefs = extractDefListOrFactory(
-    directives,
-    /* pipeDef */
-    false
-  );
-  def.pipeDefs = extractDefListOrFactory(
-    pipes,
-    /* pipeDef */
-    true
-  );
-}
-function ɵɵsetNgModuleScope(type, scope) {
-  return noSideEffects(() => {
-    const ngModuleDef = getNgModuleDef(type, true);
-    ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);
-    ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);
-    ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);
-    if (scope.bootstrap) {
-      ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);
-    }
-    depsTracker.registerNgModule(type, scope);
-  });
-}
-function convertToTypeArray(values) {
-  if (typeof values === "function") {
-    return values;
-  }
-  const flattenValues = flatten(values);
-  if (flattenValues.some(isForwardRef)) {
-    return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);
-  } else {
-    return flattenValues.map(maybeUnwrapModuleWithProviders);
-  }
-}
-function maybeUnwrapModuleWithProviders(value) {
-  return isModuleWithProviders(value) ? value.ngModule : value;
-}
-function ɵɵpureFunction0(slotOffset, pureFn, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) : getBinding(lView, bindingIndex);
-}
-function ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {
-  return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);
-}
-function ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {
-  return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);
-}
-function ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
-  return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);
-}
-function ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
-  return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);
-}
-function ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) : pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);
-}
-function ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);
-}
-function ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);
-}
-function ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);
-}
-function ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {
-  return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);
-}
-function getPureFunctionReturnValue(lView, returnValueIndex) {
-  ngDevMode && assertIndexInRange(lView, returnValueIndex);
-  const lastReturnValue = lView[returnValueIndex];
-  return lastReturnValue === NO_CHANGE ? void 0 : lastReturnValue;
-}
-function pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);
-}
-function pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);
-}
-function pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);
-}
-function pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);
-}
-function pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {
-  let bindingIndex = bindingRoot + slotOffset;
-  let different = false;
-  for (let i = 0; i < exps.length; i++) {
-    bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);
-  }
-  return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);
-}
-function ɵɵpipe(index, pipeName) {
-  const tView = getTView();
-  let pipeDef;
-  const adjustedIndex = index + HEADER_OFFSET;
-  if (tView.firstCreatePass) {
-    pipeDef = getPipeDef(pipeName, tView.pipeRegistry);
-    tView.data[adjustedIndex] = pipeDef;
-    if (pipeDef.onDestroy) {
-      (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);
-    }
-  } else {
-    pipeDef = tView.data[adjustedIndex];
-  }
-  const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));
-  let previousInjectorProfilerContext;
-  if (ngDevMode) {
-    previousInjectorProfilerContext = setInjectorProfilerContext({
-      injector: new NodeInjector(getCurrentTNode(), getLView()),
-      token: pipeDef.type
-    });
-  }
-  const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);
-  try {
-    const previousIncludeViewProviders = setIncludeViewProviders(false);
-    const pipeInstance = pipeFactory();
-    setIncludeViewProviders(previousIncludeViewProviders);
-    store(tView, getLView(), adjustedIndex, pipeInstance);
-    return pipeInstance;
-  } finally {
-    setInjectImplementation(previousInjectImplementation);
-    ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);
-  }
-}
-function getPipeDef(name, registry) {
-  if (registry) {
-    if (ngDevMode) {
-      const pipes = registry.filter((pipe2) => pipe2.name === name);
-      if (pipes.length > 1) {
-        console.warn(formatRuntimeError(313, getMultipleMatchingPipesMessage(name)));
-      }
-    }
-    for (let i = registry.length - 1; i >= 0; i--) {
-      const pipeDef = registry[i];
-      if (name === pipeDef.name) {
-        return pipeDef;
-      }
-    }
-  }
-  if (ngDevMode) {
-    throw new RuntimeError(-302, getPipeNotFoundErrorMessage(name));
-  }
-  return;
-}
-function getMultipleMatchingPipesMessage(name) {
-  const lView = getLView();
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context2 = declarationLView[CONTEXT];
-  const hostIsStandalone = isHostComponentStandalone(lView);
-  const componentInfoMessage = context2 ? ` in the '${context2.constructor.name}' component` : "";
-  const verifyMessage = `check ${hostIsStandalone ? "'@Component.imports' of this component" : "the imports of this module"}`;
-  const errorMessage = `Multiple pipes match the name \`${name}\`${componentInfoMessage}. ${verifyMessage}`;
-  return errorMessage;
-}
-function getPipeNotFoundErrorMessage(name) {
-  const lView = getLView();
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context2 = declarationLView[CONTEXT];
-  const hostIsStandalone = isHostComponentStandalone(lView);
-  const componentInfoMessage = context2 ? ` in the '${context2.constructor.name}' component` : "";
-  const verifyMessage = `Verify that it is ${hostIsStandalone ? "included in the '@Component.imports' of this component" : "declared or imported in this module"}`;
-  const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;
-  return errorMessage;
-}
-function ɵɵpipeBind1(index, offset, v1) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);
-}
-function ɵɵpipeBind2(index, slotOffset, v1, v2) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);
-}
-function ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);
-}
-function ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);
-}
-function ɵɵpipeBindV(index, slotOffset, values) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);
-}
-function isPure(lView, index) {
-  return lView[TVIEW].data[index].pure;
-}
-function ɵɵtemplateRefExtractor(tNode, lView) {
-  return createTemplateRef(tNode, lView);
-}
-function ɵɵgetComponentDepsFactory(type, rawImports) {
-  return () => {
-    try {
-      return depsTracker.getComponentDependencies(type, rawImports).dependencies;
-    } catch (e) {
-      console.error(`Computing dependencies in local compilation mode for the component "${type.name}" failed with the exception:`, e);
-      throw e;
-    }
-  };
-}
-function ɵsetClassDebugInfo(type, debugInfo) {
-  const def = getComponentDef(type);
-  if (def !== null) {
-    def.debugInfo = debugInfo;
-  }
-}
-function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
-  ngDevMode && assertComponentDef(type);
-  const oldDef = getComponentDef(type);
-  applyMetadata.apply(null, [type, namespaces, ...locals]);
-  if (oldDef.tView) {
-    const trackedViews = getTrackedLViews().values();
-    for (const root of trackedViews) {
-      if (root[FLAGS] & 512 && root[PARENT] === null) {
-        recreateMatchingLViews(oldDef, root);
-      }
-    }
-  }
-}
-function recreateMatchingLViews(def, rootLView) {
-  ngDevMode && assertDefined(def.tView, "Expected a component definition that has been instantiated at least once");
-  const tView = rootLView[TVIEW];
-  if (tView === def.tView) {
-    ngDevMode && assertComponentDef(def.type);
-    recreateLView(getComponentDef(def.type), rootLView);
-    return;
-  }
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const current = rootLView[i];
-    if (isLContainer(current)) {
-      for (let i2 = CONTAINER_HEADER_OFFSET; i2 < current.length; i2++) {
-        recreateMatchingLViews(def, current[i2]);
-      }
-    } else if (isLView(current)) {
-      recreateMatchingLViews(def, current);
-    }
-  }
-}
-function clearRendererCache(factory, def) {
-  factory.rendererByCompId?.delete(def.id);
-}
-function recreateLView(def, lView) {
-  const instance = lView[CONTEXT];
-  const host = lView[HOST];
-  const parentLView = lView[PARENT];
-  ngDevMode && assertLView(parentLView);
-  const tNode = lView[T_HOST];
-  ngDevMode && assertTNodeType(
-    tNode,
-    2
-    /* TNodeType.Element */
-  );
-  const newTView = getOrCreateComponentTView(def);
-  const rendererFactory = lView[ENVIRONMENT].rendererFactory;
-  clearRendererCache(rendererFactory, def);
-  const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(def), host, tNode, null, rendererFactory.createRenderer(host, def), null, null, null);
-  replaceLViewInTree(parentLView, lView, newLView, tNode.index);
-  destroyLView(lView[TVIEW], lView);
-  removeViewFromDOM(lView[TVIEW], lView);
-  resetProjectionState(tNode);
-  renderView(newTView, newLView, instance);
-  refreshView(newTView, newLView, newTView.template, instance);
-}
-function replaceLViewInTree(parentLView, oldLView, newLView, index) {
-  for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {
-    const current = parentLView[i];
-    if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {
-      current[NEXT] = newLView;
-      break;
-    }
-  }
-  if (parentLView[CHILD_HEAD] === oldLView) {
-    parentLView[CHILD_HEAD] = newLView;
-  }
-  if (parentLView[CHILD_TAIL] === oldLView) {
-    parentLView[CHILD_TAIL] = newLView;
-  }
-  newLView[NEXT] = oldLView[NEXT];
-  oldLView[NEXT] = null;
-  parentLView[index] = newLView;
-}
-function resetProjectionState(tNode) {
-  if (tNode.projection !== null) {
-    for (const current of tNode.projection) {
-      if (isTNodeShape(current)) {
-        current.projectionNext = null;
-        current.flags &= ~2;
-      }
-    }
-    tNode.projection = null;
-  }
-}
-var angularCoreEnv = /* @__PURE__ */ (() => ({
-  "ɵɵattribute": ɵɵattribute,
-  "ɵɵattributeInterpolate1": ɵɵattributeInterpolate1,
-  "ɵɵattributeInterpolate2": ɵɵattributeInterpolate2,
-  "ɵɵattributeInterpolate3": ɵɵattributeInterpolate3,
-  "ɵɵattributeInterpolate4": ɵɵattributeInterpolate4,
-  "ɵɵattributeInterpolate5": ɵɵattributeInterpolate5,
-  "ɵɵattributeInterpolate6": ɵɵattributeInterpolate6,
-  "ɵɵattributeInterpolate7": ɵɵattributeInterpolate7,
-  "ɵɵattributeInterpolate8": ɵɵattributeInterpolate8,
-  "ɵɵattributeInterpolateV": ɵɵattributeInterpolateV,
-  "ɵɵdefineComponent": ɵɵdefineComponent,
-  "ɵɵdefineDirective": ɵɵdefineDirective,
-  "ɵɵdefineInjectable": ɵɵdefineInjectable,
-  "ɵɵdefineInjector": ɵɵdefineInjector,
-  "ɵɵdefineNgModule": ɵɵdefineNgModule,
-  "ɵɵdefinePipe": ɵɵdefinePipe,
-  "ɵɵdirectiveInject": ɵɵdirectiveInject,
-  "ɵɵgetInheritedFactory": ɵɵgetInheritedFactory,
-  "ɵɵinject": ɵɵinject,
-  "ɵɵinjectAttribute": ɵɵinjectAttribute,
-  "ɵɵinvalidFactory": ɵɵinvalidFactory,
-  "ɵɵinvalidFactoryDep": ɵɵinvalidFactoryDep,
-  "ɵɵtemplateRefExtractor": ɵɵtemplateRefExtractor,
-  "ɵɵresetView": ɵɵresetView,
-  "ɵɵHostDirectivesFeature": ɵɵHostDirectivesFeature,
-  "ɵɵNgOnChangesFeature": ɵɵNgOnChangesFeature,
-  "ɵɵProvidersFeature": ɵɵProvidersFeature,
-  "ɵɵCopyDefinitionFeature": ɵɵCopyDefinitionFeature,
-  "ɵɵInheritDefinitionFeature": ɵɵInheritDefinitionFeature,
-  "ɵɵInputTransformsFeature": ɵɵInputTransformsFeature,
-  "ɵɵExternalStylesFeature": ɵɵExternalStylesFeature,
-  "ɵɵnextContext": ɵɵnextContext,
-  "ɵɵnamespaceHTML": ɵɵnamespaceHTML,
-  "ɵɵnamespaceMathML": ɵɵnamespaceMathML,
-  "ɵɵnamespaceSVG": ɵɵnamespaceSVG,
-  "ɵɵenableBindings": ɵɵenableBindings,
-  "ɵɵdisableBindings": ɵɵdisableBindings,
-  "ɵɵelementStart": ɵɵelementStart,
-  "ɵɵelementEnd": ɵɵelementEnd,
-  "ɵɵelement": ɵɵelement,
-  "ɵɵelementContainerStart": ɵɵelementContainerStart,
-  "ɵɵelementContainerEnd": ɵɵelementContainerEnd,
-  "ɵɵelementContainer": ɵɵelementContainer,
-  "ɵɵpureFunction0": ɵɵpureFunction0,
-  "ɵɵpureFunction1": ɵɵpureFunction1,
-  "ɵɵpureFunction2": ɵɵpureFunction2,
-  "ɵɵpureFunction3": ɵɵpureFunction3,
-  "ɵɵpureFunction4": ɵɵpureFunction4,
-  "ɵɵpureFunction5": ɵɵpureFunction5,
-  "ɵɵpureFunction6": ɵɵpureFunction6,
-  "ɵɵpureFunction7": ɵɵpureFunction7,
-  "ɵɵpureFunction8": ɵɵpureFunction8,
-  "ɵɵpureFunctionV": ɵɵpureFunctionV,
-  "ɵɵgetCurrentView": ɵɵgetCurrentView,
-  "ɵɵrestoreView": ɵɵrestoreView,
-  "ɵɵlistener": ɵɵlistener,
-  "ɵɵprojection": ɵɵprojection,
-  "ɵɵsyntheticHostProperty": ɵɵsyntheticHostProperty,
-  "ɵɵsyntheticHostListener": ɵɵsyntheticHostListener,
-  "ɵɵpipeBind1": ɵɵpipeBind1,
-  "ɵɵpipeBind2": ɵɵpipeBind2,
-  "ɵɵpipeBind3": ɵɵpipeBind3,
-  "ɵɵpipeBind4": ɵɵpipeBind4,
-  "ɵɵpipeBindV": ɵɵpipeBindV,
-  "ɵɵprojectionDef": ɵɵprojectionDef,
-  "ɵɵhostProperty": ɵɵhostProperty,
-  "ɵɵproperty": ɵɵproperty,
-  "ɵɵpropertyInterpolate": ɵɵpropertyInterpolate,
-  "ɵɵpropertyInterpolate1": ɵɵpropertyInterpolate1,
-  "ɵɵpropertyInterpolate2": ɵɵpropertyInterpolate2,
-  "ɵɵpropertyInterpolate3": ɵɵpropertyInterpolate3,
-  "ɵɵpropertyInterpolate4": ɵɵpropertyInterpolate4,
-  "ɵɵpropertyInterpolate5": ɵɵpropertyInterpolate5,
-  "ɵɵpropertyInterpolate6": ɵɵpropertyInterpolate6,
-  "ɵɵpropertyInterpolate7": ɵɵpropertyInterpolate7,
-  "ɵɵpropertyInterpolate8": ɵɵpropertyInterpolate8,
-  "ɵɵpropertyInterpolateV": ɵɵpropertyInterpolateV,
-  "ɵɵpipe": ɵɵpipe,
-  "ɵɵqueryRefresh": ɵɵqueryRefresh,
-  "ɵɵqueryAdvance": ɵɵqueryAdvance,
-  "ɵɵviewQuery": ɵɵviewQuery,
-  "ɵɵviewQuerySignal": ɵɵviewQuerySignal,
-  "ɵɵloadQuery": ɵɵloadQuery,
-  "ɵɵcontentQuery": ɵɵcontentQuery,
-  "ɵɵcontentQuerySignal": ɵɵcontentQuerySignal,
-  "ɵɵreference": ɵɵreference,
-  "ɵɵclassMap": ɵɵclassMap,
-  "ɵɵclassMapInterpolate1": ɵɵclassMapInterpolate1,
-  "ɵɵclassMapInterpolate2": ɵɵclassMapInterpolate2,
-  "ɵɵclassMapInterpolate3": ɵɵclassMapInterpolate3,
-  "ɵɵclassMapInterpolate4": ɵɵclassMapInterpolate4,
-  "ɵɵclassMapInterpolate5": ɵɵclassMapInterpolate5,
-  "ɵɵclassMapInterpolate6": ɵɵclassMapInterpolate6,
-  "ɵɵclassMapInterpolate7": ɵɵclassMapInterpolate7,
-  "ɵɵclassMapInterpolate8": ɵɵclassMapInterpolate8,
-  "ɵɵclassMapInterpolateV": ɵɵclassMapInterpolateV,
-  "ɵɵstyleMap": ɵɵstyleMap,
-  "ɵɵstyleMapInterpolate1": ɵɵstyleMapInterpolate1,
-  "ɵɵstyleMapInterpolate2": ɵɵstyleMapInterpolate2,
-  "ɵɵstyleMapInterpolate3": ɵɵstyleMapInterpolate3,
-  "ɵɵstyleMapInterpolate4": ɵɵstyleMapInterpolate4,
-  "ɵɵstyleMapInterpolate5": ɵɵstyleMapInterpolate5,
-  "ɵɵstyleMapInterpolate6": ɵɵstyleMapInterpolate6,
-  "ɵɵstyleMapInterpolate7": ɵɵstyleMapInterpolate7,
-  "ɵɵstyleMapInterpolate8": ɵɵstyleMapInterpolate8,
-  "ɵɵstyleMapInterpolateV": ɵɵstyleMapInterpolateV,
-  "ɵɵstyleProp": ɵɵstyleProp,
-  "ɵɵstylePropInterpolate1": ɵɵstylePropInterpolate1,
-  "ɵɵstylePropInterpolate2": ɵɵstylePropInterpolate2,
-  "ɵɵstylePropInterpolate3": ɵɵstylePropInterpolate3,
-  "ɵɵstylePropInterpolate4": ɵɵstylePropInterpolate4,
-  "ɵɵstylePropInterpolate5": ɵɵstylePropInterpolate5,
-  "ɵɵstylePropInterpolate6": ɵɵstylePropInterpolate6,
-  "ɵɵstylePropInterpolate7": ɵɵstylePropInterpolate7,
-  "ɵɵstylePropInterpolate8": ɵɵstylePropInterpolate8,
-  "ɵɵstylePropInterpolateV": ɵɵstylePropInterpolateV,
-  "ɵɵclassProp": ɵɵclassProp,
-  "ɵɵadvance": ɵɵadvance,
-  "ɵɵtemplate": ɵɵtemplate,
-  "ɵɵconditional": ɵɵconditional,
-  "ɵɵdefer": ɵɵdefer,
-  "ɵɵdeferWhen": ɵɵdeferWhen,
-  "ɵɵdeferOnIdle": ɵɵdeferOnIdle,
-  "ɵɵdeferOnImmediate": ɵɵdeferOnImmediate,
-  "ɵɵdeferOnTimer": ɵɵdeferOnTimer,
-  "ɵɵdeferOnHover": ɵɵdeferOnHover,
-  "ɵɵdeferOnInteraction": ɵɵdeferOnInteraction,
-  "ɵɵdeferOnViewport": ɵɵdeferOnViewport,
-  "ɵɵdeferPrefetchWhen": ɵɵdeferPrefetchWhen,
-  "ɵɵdeferPrefetchOnIdle": ɵɵdeferPrefetchOnIdle,
-  "ɵɵdeferPrefetchOnImmediate": ɵɵdeferPrefetchOnImmediate,
-  "ɵɵdeferPrefetchOnTimer": ɵɵdeferPrefetchOnTimer,
-  "ɵɵdeferPrefetchOnHover": ɵɵdeferPrefetchOnHover,
-  "ɵɵdeferPrefetchOnInteraction": ɵɵdeferPrefetchOnInteraction,
-  "ɵɵdeferPrefetchOnViewport": ɵɵdeferPrefetchOnViewport,
-  "ɵɵdeferHydrateWhen": ɵɵdeferHydrateWhen,
-  "ɵɵdeferHydrateNever": ɵɵdeferHydrateNever,
-  "ɵɵdeferHydrateOnIdle": ɵɵdeferHydrateOnIdle,
-  "ɵɵdeferHydrateOnImmediate": ɵɵdeferHydrateOnImmediate,
-  "ɵɵdeferHydrateOnTimer": ɵɵdeferHydrateOnTimer,
-  "ɵɵdeferHydrateOnHover": ɵɵdeferHydrateOnHover,
-  "ɵɵdeferHydrateOnInteraction": ɵɵdeferHydrateOnInteraction,
-  "ɵɵdeferHydrateOnViewport": ɵɵdeferHydrateOnViewport,
-  "ɵɵdeferEnableTimerScheduling": ɵɵdeferEnableTimerScheduling,
-  "ɵɵrepeater": ɵɵrepeater,
-  "ɵɵrepeaterCreate": ɵɵrepeaterCreate,
-  "ɵɵrepeaterTrackByIndex": ɵɵrepeaterTrackByIndex,
-  "ɵɵrepeaterTrackByIdentity": ɵɵrepeaterTrackByIdentity,
-  "ɵɵcomponentInstance": ɵɵcomponentInstance,
-  "ɵɵtext": ɵɵtext,
-  "ɵɵtextInterpolate": ɵɵtextInterpolate,
-  "ɵɵtextInterpolate1": ɵɵtextInterpolate1,
-  "ɵɵtextInterpolate2": ɵɵtextInterpolate2,
-  "ɵɵtextInterpolate3": ɵɵtextInterpolate3,
-  "ɵɵtextInterpolate4": ɵɵtextInterpolate4,
-  "ɵɵtextInterpolate5": ɵɵtextInterpolate5,
-  "ɵɵtextInterpolate6": ɵɵtextInterpolate6,
-  "ɵɵtextInterpolate7": ɵɵtextInterpolate7,
-  "ɵɵtextInterpolate8": ɵɵtextInterpolate8,
-  "ɵɵtextInterpolateV": ɵɵtextInterpolateV,
-  "ɵɵi18n": ɵɵi18n,
-  "ɵɵi18nAttributes": ɵɵi18nAttributes,
-  "ɵɵi18nExp": ɵɵi18nExp,
-  "ɵɵi18nStart": ɵɵi18nStart,
-  "ɵɵi18nEnd": ɵɵi18nEnd,
-  "ɵɵi18nApply": ɵɵi18nApply,
-  "ɵɵi18nPostprocess": ɵɵi18nPostprocess,
-  "ɵɵresolveWindow": ɵɵresolveWindow,
-  "ɵɵresolveDocument": ɵɵresolveDocument,
-  "ɵɵresolveBody": ɵɵresolveBody,
-  "ɵɵsetComponentScope": ɵɵsetComponentScope,
-  "ɵɵsetNgModuleScope": ɵɵsetNgModuleScope,
-  "ɵɵregisterNgModuleType": registerNgModuleType,
-  "ɵɵgetComponentDepsFactory": ɵɵgetComponentDepsFactory,
-  "ɵsetClassDebugInfo": ɵsetClassDebugInfo,
-  "ɵɵdeclareLet": ɵɵdeclareLet,
-  "ɵɵstoreLet": ɵɵstoreLet,
-  "ɵɵreadContextLet": ɵɵreadContextLet,
-  "ɵɵsanitizeHtml": ɵɵsanitizeHtml,
-  "ɵɵsanitizeStyle": ɵɵsanitizeStyle,
-  "ɵɵsanitizeResourceUrl": ɵɵsanitizeResourceUrl,
-  "ɵɵsanitizeScript": ɵɵsanitizeScript,
-  "ɵɵsanitizeUrl": ɵɵsanitizeUrl,
-  "ɵɵsanitizeUrlOrResourceUrl": ɵɵsanitizeUrlOrResourceUrl,
-  "ɵɵtrustConstantHtml": ɵɵtrustConstantHtml,
-  "ɵɵtrustConstantResourceUrl": ɵɵtrustConstantResourceUrl,
-  "ɵɵvalidateIframeAttribute": ɵɵvalidateIframeAttribute,
-  "forwardRef": forwardRef,
-  "resolveForwardRef": resolveForwardRef,
-  "ɵɵtwoWayProperty": ɵɵtwoWayProperty,
-  "ɵɵtwoWayBindingSet": ɵɵtwoWayBindingSet,
-  "ɵɵtwoWayListener": ɵɵtwoWayListener,
-  "ɵɵreplaceMetadata": ɵɵreplaceMetadata
-}))();
-var jitOptions = null;
-function setJitOptions(options) {
-  if (jitOptions !== null) {
-    if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {
-      ngDevMode && console.error("Provided value for `defaultEncapsulation` can not be changed once it has been set.");
-      return;
-    }
-    if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {
-      ngDevMode && console.error("Provided value for `preserveWhitespaces` can not be changed once it has been set.");
-      return;
-    }
-  }
-  jitOptions = options;
-}
-function getJitOptions() {
-  return jitOptions;
-}
-function resetJitOptions() {
-  jitOptions = null;
-}
-function patchModuleCompilation() {
-}
-var moduleQueue = [];
-function enqueueModuleForDelayedScoping(moduleType, ngModule) {
-  moduleQueue.push({
-    moduleType,
-    ngModule
-  });
-}
-var flushingModuleQueue = false;
-function flushModuleScopingQueueAsMuchAsPossible() {
-  if (!flushingModuleQueue) {
-    flushingModuleQueue = true;
-    try {
-      for (let i = moduleQueue.length - 1; i >= 0; i--) {
-        const {
-          moduleType,
-          ngModule
-        } = moduleQueue[i];
-        if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {
-          moduleQueue.splice(i, 1);
-          setScopeOnDeclaredComponents(moduleType, ngModule);
-        }
-      }
-    } finally {
-      flushingModuleQueue = false;
-    }
-  }
-}
-function isResolvedDeclaration(declaration) {
-  if (Array.isArray(declaration)) {
-    return declaration.every(isResolvedDeclaration);
-  }
-  return !!resolveForwardRef(declaration);
-}
-function compileNgModule(moduleType, ngModule = {}) {
-  patchModuleCompilation();
-  compileNgModuleDefs(moduleType, ngModule);
-  if (ngModule.id !== void 0) {
-    registerNgModuleType(moduleType, ngModule.id);
-  }
-  enqueueModuleForDelayedScoping(moduleType, ngModule);
-}
-function compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {
-  ngDevMode && assertDefined(moduleType, "Required value moduleType");
-  ngDevMode && assertDefined(ngModule, "Required value ngModule");
-  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
-  let ngModuleDef = null;
-  Object.defineProperty(moduleType, NG_MOD_DEF, {
-    configurable: true,
-    get: () => {
-      if (ngModuleDef === null) {
-        if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {
-          throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);
-        }
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {
-          type: moduleType,
-          bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),
-          declarations: declarations.map(resolveForwardRef),
-          imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),
-          exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),
-          schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,
-          id: ngModule.id || null
-        });
-        if (!ngModuleDef.schemas) {
-          ngModuleDef.schemas = [];
-        }
-      }
-      return ngModuleDef;
-    }
-  });
-  let ngFactoryDef = null;
-  Object.defineProperty(moduleType, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/ɵfac.js`, {
-          name: moduleType.name,
-          type: moduleType,
-          deps: reflectDependencies(moduleType),
-          target: compiler.FactoryTarget.NgModule,
-          typeArgumentCount: 0
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-  let ngInjectorDef = null;
-  Object.defineProperty(moduleType, NG_INJ_DEF, {
-    get: () => {
-      if (ngInjectorDef === null) {
-        ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);
-        const meta = {
-          name: moduleType.name,
-          type: moduleType,
-          providers: ngModule.providers || EMPTY_ARRAY,
-          imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]
-        };
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);
-      }
-      return ngInjectorDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function generateStandaloneInDeclarationsError(type, location2) {
-  const prefix = `Unexpected "${stringifyForError(type)}" found in the "declarations" array of the`;
-  const suffix = `"${stringifyForError(type)}" is marked as standalone and can't be declared in any NgModule - did you intend to import it instead (by adding it to the "imports" array)?`;
-  return `${prefix} ${location2}, ${suffix}`;
-}
-function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {
-  if (verifiedNgModule.get(moduleType)) return;
-  if (isStandalone(moduleType)) return;
-  verifiedNgModule.set(moduleType, true);
-  moduleType = resolveForwardRef(moduleType);
-  let ngModuleDef;
-  if (importingModule) {
-    ngModuleDef = getNgModuleDef(moduleType);
-    if (!ngModuleDef) {
-      throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);
-    }
-  } else {
-    ngModuleDef = getNgModuleDef(moduleType, true);
-  }
-  const errors = [];
-  const declarations = maybeUnwrapFn(ngModuleDef.declarations);
-  const imports = maybeUnwrapFn(ngModuleDef.imports);
-  flatten(imports).map(unwrapModuleWithProvidersImports).forEach((modOrStandaloneCmpt) => {
-    verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);
-    verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);
-  });
-  const exports = maybeUnwrapFn(ngModuleDef.exports);
-  declarations.forEach(verifyDeclarationsHaveDefinitions);
-  declarations.forEach(verifyDirectivesHaveSelector);
-  declarations.forEach((declarationType) => verifyNotStandalone(declarationType, moduleType));
-  const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];
-  exports.forEach(verifyExportsAreDeclaredOrReExported);
-  declarations.forEach((decl) => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
-  const ngModule = getAnnotation(moduleType, "NgModule");
-  if (ngModule) {
-    ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach((mod) => {
-      verifySemanticsOfNgModuleImport(mod, moduleType);
-      verifySemanticsOfNgModuleDef(mod, false, moduleType);
-    });
-    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);
-    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);
-  }
-  if (errors.length) {
-    throw new Error(errors.join("\n"));
-  }
-  function verifyDeclarationsHaveDefinitions(type) {
-    type = resolveForwardRef(type);
-    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-    if (!def) {
-      errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);
-    }
-  }
-  function verifyDirectivesHaveSelector(type) {
-    type = resolveForwardRef(type);
-    const def = getDirectiveDef(type);
-    if (!getComponentDef(type) && def && def.selectors.length == 0) {
-      errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);
-    }
-  }
-  function verifyNotStandalone(type, moduleType2) {
-    type = resolveForwardRef(type);
-    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-    if (def?.standalone) {
-      const location2 = `"${stringifyForError(moduleType2)}" NgModule`;
-      errors.push(generateStandaloneInDeclarationsError(type, location2));
-    }
-  }
-  function verifyExportsAreDeclaredOrReExported(type) {
-    type = resolveForwardRef(type);
-    const kind = getComponentDef(type) && "component" || getDirectiveDef(type) && "directive" || getPipeDef$1(type) && "pipe";
-    if (kind) {
-      if (combinedDeclarations.lastIndexOf(type) === -1) {
-        errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);
-      }
-    }
-  }
-  function verifyDeclarationIsUnique(type, suppressErrors) {
-    type = resolveForwardRef(type);
-    const existingModule = ownerNgModule.get(type);
-    if (existingModule && existingModule !== moduleType) {
-      if (!suppressErrors) {
-        const modules2 = [existingModule, moduleType].map(stringifyForError).sort();
-        errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules2[0]} and ${modules2[1]}! Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules2[0]} and ${modules2[1]}. You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules2[0]} and ${modules2[1]}.`);
-      }
-    } else {
-      ownerNgModule.set(type, moduleType);
-    }
-  }
-  function verifyComponentIsPartOfNgModule(type) {
-    type = resolveForwardRef(type);
-    const existingModule = ownerNgModule.get(type);
-    if (!existingModule && !isStandalone(type)) {
-      errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);
-    }
-  }
-  function verifyCorrectBootstrapType(type) {
-    type = resolveForwardRef(type);
-    if (!getComponentDef(type)) {
-      errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);
-    }
-    if (isStandalone(type)) {
-      errors.push(`The \`${stringifyForError(type)}\` class is a standalone component, which can not be used in the \`@NgModule.bootstrap\` array. Use the \`bootstrapApplication\` function for bootstrap instead.`);
-    }
-  }
-  function verifySemanticsOfNgModuleImport(type, importingModule2) {
-    type = resolveForwardRef(type);
-    const directiveDef = getComponentDef(type) || getDirectiveDef(type);
-    if (directiveDef !== null && !directiveDef.standalone) {
-      throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule2.name}'. Please add an @NgModule annotation.`);
-    }
-    const pipeDef = getPipeDef$1(type);
-    if (pipeDef !== null && !pipeDef.standalone) {
-      throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule2.name}'. Please add an @NgModule annotation.`);
-    }
-  }
-}
-function unwrapModuleWithProvidersImports(typeOrWithProviders) {
-  typeOrWithProviders = resolveForwardRef(typeOrWithProviders);
-  return typeOrWithProviders.ngModule || typeOrWithProviders;
-}
-function getAnnotation(type, name) {
-  let annotation = null;
-  collect(type.__annotations__);
-  collect(type.decorators);
-  return annotation;
-  function collect(annotations) {
-    if (annotations) {
-      annotations.forEach(readAnnotation);
-    }
-  }
-  function readAnnotation(decorator) {
-    if (!annotation) {
-      const proto = Object.getPrototypeOf(decorator);
-      if (proto.ngMetadataName == name) {
-        annotation = decorator;
-      } else if (decorator.type) {
-        const proto2 = Object.getPrototypeOf(decorator.type);
-        if (proto2.ngMetadataName == name) {
-          annotation = decorator.args[0];
-        }
-      }
-    }
-  }
-}
-var ownerNgModule = /* @__PURE__ */ new WeakMap();
-var verifiedNgModule = /* @__PURE__ */ new WeakMap();
-function resetCompiledComponents() {
-  ownerNgModule = /* @__PURE__ */ new WeakMap();
-  verifiedNgModule = /* @__PURE__ */ new WeakMap();
-  moduleQueue.length = 0;
-  GENERATED_COMP_IDS.clear();
-}
-function computeCombinedExports(type) {
-  type = resolveForwardRef(type);
-  const ngModuleDef = getNgModuleDef(type);
-  if (ngModuleDef === null) {
-    return [type];
-  }
-  return flatten(maybeUnwrapFn(ngModuleDef.exports).map((type2) => {
-    const ngModuleDef2 = getNgModuleDef(type2);
-    if (ngModuleDef2) {
-      verifySemanticsOfNgModuleDef(type2, false);
-      return computeCombinedExports(type2);
-    } else {
-      return type2;
-    }
-  }));
-}
-function setScopeOnDeclaredComponents(moduleType, ngModule) {
-  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
-  const transitiveScopes = transitiveScopesFor(moduleType);
-  declarations.forEach((declaration) => {
-    declaration = resolveForwardRef(declaration);
-    if (declaration.hasOwnProperty(NG_COMP_DEF)) {
-      const component = declaration;
-      const componentDef = getComponentDef(component);
-      patchComponentDefWithScope(componentDef, transitiveScopes);
-    } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {
-      declaration.ngSelectorScope = moduleType;
-    }
-  });
-}
-function patchComponentDefWithScope(componentDef, transitiveScopes) {
-  componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map((dir) => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter((def) => !!def);
-  componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map((pipe2) => getPipeDef$1(pipe2));
-  componentDef.schemas = transitiveScopes.schemas;
-  componentDef.tView = null;
-}
-function transitiveScopesFor(type) {
-  if (isNgModule(type)) {
-    if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      const scope = depsTracker.getNgModuleScope(type);
-      const def = getNgModuleDef(type, true);
-      return __spreadValues({
-        schemas: def.schemas || null
-      }, scope);
-    } else {
-      return transitiveScopesForNgModule(type);
-    }
-  } else if (isStandalone(type)) {
-    const directiveDef = getComponentDef(type) || getDirectiveDef(type);
-    if (directiveDef !== null) {
-      return {
-        schemas: null,
-        compilation: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set()
-        },
-        exported: {
-          directives: /* @__PURE__ */ new Set([type]),
-          pipes: /* @__PURE__ */ new Set()
-        }
-      };
-    }
-    const pipeDef = getPipeDef$1(type);
-    if (pipeDef !== null) {
-      return {
-        schemas: null,
-        compilation: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set()
-        },
-        exported: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set([type])
-        }
-      };
-    }
-  }
-  throw new Error(`${type.name} does not have a module def (ɵmod property)`);
-}
-function transitiveScopesForNgModule(moduleType) {
-  const def = getNgModuleDef(moduleType, true);
-  if (def.transitiveCompileScopes !== null) {
-    return def.transitiveCompileScopes;
-  }
-  const scopes = {
-    schemas: def.schemas || null,
-    compilation: {
-      directives: /* @__PURE__ */ new Set(),
-      pipes: /* @__PURE__ */ new Set()
-    },
-    exported: {
-      directives: /* @__PURE__ */ new Set(),
-      pipes: /* @__PURE__ */ new Set()
-    }
-  };
-  maybeUnwrapFn(def.imports).forEach((imported) => {
-    const importedScope = transitiveScopesFor(imported);
-    importedScope.exported.directives.forEach((entry) => scopes.compilation.directives.add(entry));
-    importedScope.exported.pipes.forEach((entry) => scopes.compilation.pipes.add(entry));
-  });
-  maybeUnwrapFn(def.declarations).forEach((declared) => {
-    const declaredWithDefs = declared;
-    if (getPipeDef$1(declaredWithDefs)) {
-      scopes.compilation.pipes.add(declared);
-    } else {
-      scopes.compilation.directives.add(declared);
-    }
-  });
-  maybeUnwrapFn(def.exports).forEach((exported) => {
-    const exportedType = exported;
-    if (isNgModule(exportedType)) {
-      const exportedScope = transitiveScopesFor(exportedType);
-      exportedScope.exported.directives.forEach((entry) => {
-        scopes.compilation.directives.add(entry);
-        scopes.exported.directives.add(entry);
-      });
-      exportedScope.exported.pipes.forEach((entry) => {
-        scopes.compilation.pipes.add(entry);
-        scopes.exported.pipes.add(entry);
-      });
-    } else if (getPipeDef$1(exportedType)) {
-      scopes.exported.pipes.add(exportedType);
-    } else {
-      scopes.exported.directives.add(exportedType);
-    }
-  });
-  def.transitiveCompileScopes = scopes;
-  return scopes;
-}
-function expandModuleWithProviders(value) {
-  if (isModuleWithProviders(value)) {
-    return value.ngModule;
-  }
-  return value;
-}
-var compilationDepth = 0;
-function compileComponent(type, metadata) {
-  (typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode();
-  let ngComponentDef = null;
-  maybeQueueResolutionOfComponentResources(type, metadata);
-  addDirectiveFactoryDef(type, metadata);
-  Object.defineProperty(type, NG_COMP_DEF, {
-    get: () => {
-      if (ngComponentDef === null) {
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "component",
-          type
-        });
-        if (componentNeedsResolution(metadata)) {
-          const error = [`Component '${type.name}' is not resolved:`];
-          if (metadata.templateUrl) {
-            error.push(` - templateUrl: ${metadata.templateUrl}`);
-          }
-          if (metadata.styleUrls && metadata.styleUrls.length) {
-            error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);
-          }
-          if (metadata.styleUrl) {
-            error.push(` - styleUrl: ${metadata.styleUrl}`);
-          }
-          error.push(`Did you run and wait for 'resolveComponentResources()'?`);
-          throw new Error(error.join("\n"));
-        }
-        const options = getJitOptions();
-        let preserveWhitespaces = metadata.preserveWhitespaces;
-        if (preserveWhitespaces === void 0) {
-          if (options !== null && options.preserveWhitespaces !== void 0) {
-            preserveWhitespaces = options.preserveWhitespaces;
-          } else {
-            preserveWhitespaces = false;
-          }
-        }
-        let encapsulation = metadata.encapsulation;
-        if (encapsulation === void 0) {
-          if (options !== null && options.defaultEncapsulation !== void 0) {
-            encapsulation = options.defaultEncapsulation;
-          } else {
-            encapsulation = ViewEncapsulation.Emulated;
-          }
-        }
-        const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;
-        const meta = __spreadProps(__spreadValues({}, directiveMetadata(type, metadata)), {
-          typeSourceSpan: compiler.createParseSourceSpan("Component", type.name, templateUrl),
-          template: metadata.template || "",
-          preserveWhitespaces,
-          styles: typeof metadata.styles === "string" ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,
-          animations: metadata.animations,
-          // JIT components are always compiled against an empty set of `declarations`. Instead, the
-          // `directiveDefs` and `pipeDefs` are updated at a later point:
-          //  * for NgModule-based components, they're set when the NgModule which declares the
-          //    component resolves in the module scoping queue
-          //  * for standalone components, they're set just below, after `compileComponent`.
-          declarations: [],
-          changeDetection: metadata.changeDetection,
-          encapsulation,
-          interpolation: metadata.interpolation,
-          viewProviders: metadata.viewProviders || null
-        });
-        compilationDepth++;
-        try {
-          if (meta.usesInheritance) {
-            addDirectiveDefToUndecoratedParents(type);
-          }
-          ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);
-          if (meta.isStandalone) {
-            const imports = flatten(metadata.imports || EMPTY_ARRAY);
-            const {
-              directiveDefs,
-              pipeDefs
-            } = getStandaloneDefFunctions(type, imports);
-            ngComponentDef.directiveDefs = directiveDefs;
-            ngComponentDef.pipeDefs = pipeDefs;
-            ngComponentDef.dependencies = () => imports.map(resolveForwardRef);
-          }
-        } finally {
-          compilationDepth--;
-        }
-        if (compilationDepth === 0) {
-          flushModuleScopingQueueAsMuchAsPossible();
-        }
-        if (hasSelectorScope(type)) {
-          const scopes = transitiveScopesFor(type.ngSelectorScope);
-          patchComponentDefWithScope(ngComponentDef, scopes);
-        }
-        if (metadata.schemas) {
-          if (meta.isStandalone) {
-            ngComponentDef.schemas = metadata.schemas;
-          } else {
-            throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);
-          }
-        } else if (meta.isStandalone) {
-          ngComponentDef.schemas = [];
-        }
-      }
-      return ngComponentDef;
-    },
-    set: (def) => {
-      ngComponentDef = def;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getStandaloneDefFunctions(type, imports) {
-  let cachedDirectiveDefs = null;
-  let cachedPipeDefs = null;
-  const directiveDefs = () => {
-    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      if (cachedDirectiveDefs === null) {
-        cachedDirectiveDefs = [getComponentDef(type)];
-        const seen = /* @__PURE__ */ new Set([type]);
-        for (const rawDep of imports) {
-          ngDevMode && verifyStandaloneImport(rawDep, type);
-          const dep = resolveForwardRef(rawDep);
-          if (seen.has(dep)) {
-            continue;
-          }
-          seen.add(dep);
-          if (!!getNgModuleDef(dep)) {
-            const scope = transitiveScopesFor(dep);
-            for (const dir of scope.exported.directives) {
-              const def = getComponentDef(dir) || getDirectiveDef(dir);
-              if (def && !seen.has(dir)) {
-                seen.add(dir);
-                cachedDirectiveDefs.push(def);
-              }
-            }
-          } else {
-            const def = getComponentDef(dep) || getDirectiveDef(dep);
-            if (def) {
-              cachedDirectiveDefs.push(def);
-            }
-          }
-        }
-      }
-      return cachedDirectiveDefs;
-    } else {
-      if (ngDevMode) {
-        for (const rawDep of imports) {
-          verifyStandaloneImport(rawDep, type);
-        }
-      }
-      if (!isComponent(type)) {
-        return [];
-      }
-      const scope = depsTracker.getStandaloneComponentScope(type, imports);
-      return [...scope.compilation.directives].map((p) => getComponentDef(p) || getDirectiveDef(p)).filter((d) => d !== null);
-    }
-  };
-  const pipeDefs = () => {
-    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      if (cachedPipeDefs === null) {
-        cachedPipeDefs = [];
-        const seen = /* @__PURE__ */ new Set();
-        for (const rawDep of imports) {
-          const dep = resolveForwardRef(rawDep);
-          if (seen.has(dep)) {
-            continue;
-          }
-          seen.add(dep);
-          if (!!getNgModuleDef(dep)) {
-            const scope = transitiveScopesFor(dep);
-            for (const pipe2 of scope.exported.pipes) {
-              const def = getPipeDef$1(pipe2);
-              if (def && !seen.has(pipe2)) {
-                seen.add(pipe2);
-                cachedPipeDefs.push(def);
-              }
-            }
-          } else {
-            const def = getPipeDef$1(dep);
-            if (def) {
-              cachedPipeDefs.push(def);
-            }
-          }
-        }
-      }
-      return cachedPipeDefs;
-    } else {
-      if (ngDevMode) {
-        for (const rawDep of imports) {
-          verifyStandaloneImport(rawDep, type);
-        }
-      }
-      if (!isComponent(type)) {
-        return [];
-      }
-      const scope = depsTracker.getStandaloneComponentScope(type, imports);
-      return [...scope.compilation.pipes].map((p) => getPipeDef$1(p)).filter((d) => d !== null);
-    }
-  };
-  return {
-    directiveDefs,
-    pipeDefs
-  };
-}
-function hasSelectorScope(component) {
-  return component.ngSelectorScope !== void 0;
-}
-function compileDirective(type, directive) {
-  let ngDirectiveDef = null;
-  addDirectiveFactoryDef(type, directive || {});
-  Object.defineProperty(type, NG_DIR_DEF, {
-    get: () => {
-      if (ngDirectiveDef === null) {
-        const meta = getDirectiveMetadata(type, directive || {});
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "directive",
-          type
-        });
-        ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);
-      }
-      return ngDirectiveDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getDirectiveMetadata(type, metadata) {
-  const name = type && type.name;
-  const sourceMapUrl = `ng:///${name}/ɵdir.js`;
-  const compiler = getCompilerFacade({
-    usage: 0,
-    kind: "directive",
-    type
-  });
-  const facade = directiveMetadata(type, metadata);
-  facade.typeSourceSpan = compiler.createParseSourceSpan("Directive", name, sourceMapUrl);
-  if (facade.usesInheritance) {
-    addDirectiveDefToUndecoratedParents(type);
-  }
-  return {
-    metadata: facade,
-    sourceMapUrl
-  };
-}
-function addDirectiveFactoryDef(type, metadata) {
-  let ngFactoryDef = null;
-  Object.defineProperty(type, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const meta = getDirectiveMetadata(type, metadata);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "directive",
-          type
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, {
-          name: meta.metadata.name,
-          type: meta.metadata.type,
-          typeArgumentCount: 0,
-          deps: reflectDependencies(type),
-          target: compiler.FactoryTarget.Directive
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function extendsDirectlyFromObject(type) {
-  return Object.getPrototypeOf(type.prototype) === Object.prototype;
-}
-function directiveMetadata(type, metadata) {
-  const reflect = getReflect();
-  const propMetadata = reflect.ownPropMetadata(type);
-  return {
-    name: type.name,
-    type,
-    selector: metadata.selector !== void 0 ? metadata.selector : null,
-    host: metadata.host || EMPTY_OBJ,
-    propMetadata,
-    inputs: metadata.inputs || EMPTY_ARRAY,
-    outputs: metadata.outputs || EMPTY_ARRAY,
-    queries: extractQueriesMetadata(type, propMetadata, isContentQuery),
-    lifecycle: {
-      usesOnChanges: reflect.hasLifecycleHook(type, "ngOnChanges")
-    },
-    typeSourceSpan: null,
-    usesInheritance: !extendsDirectlyFromObject(type),
-    exportAs: extractExportAs(metadata.exportAs),
-    providers: metadata.providers || null,
-    viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),
-    isStandalone: metadata.standalone === void 0 ? true : !!metadata.standalone,
-    isSignal: !!metadata.signals,
-    hostDirectives: metadata.hostDirectives?.map((directive) => typeof directive === "function" ? {
-      directive
-    } : directive) || null
-  };
-}
-function addDirectiveDefToUndecoratedParents(type) {
-  const objPrototype = Object.prototype;
-  let parent = Object.getPrototypeOf(type.prototype).constructor;
-  while (parent && parent !== objPrototype) {
-    if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {
-      compileDirective(parent, null);
-    }
-    parent = Object.getPrototypeOf(parent);
-  }
-}
-function convertToR3QueryPredicate(selector) {
-  return typeof selector === "string" ? splitByComma(selector) : resolveForwardRef(selector);
-}
-function convertToR3QueryMetadata(propertyName, ann) {
-  return {
-    propertyName,
-    predicate: convertToR3QueryPredicate(ann.selector),
-    descendants: ann.descendants,
-    first: ann.first,
-    read: ann.read ? ann.read : null,
-    static: !!ann.static,
-    emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,
-    isSignal: !!ann.isSignal
-  };
-}
-function extractQueriesMetadata(type, propMetadata, isQueryAnn) {
-  const queriesMeta = [];
-  for (const field in propMetadata) {
-    if (propMetadata.hasOwnProperty(field)) {
-      const annotations = propMetadata[field];
-      annotations.forEach((ann) => {
-        if (isQueryAnn(ann)) {
-          if (!ann.selector) {
-            throw new Error(`Can't construct a query for the property "${field}" of "${stringifyForError(type)}" since the query selector wasn't defined.`);
-          }
-          if (annotations.some(isInputAnnotation)) {
-            throw new Error(`Cannot combine @Input decorators with query decorators`);
-          }
-          queriesMeta.push(convertToR3QueryMetadata(field, ann));
-        }
-      });
-    }
-  }
-  return queriesMeta;
-}
-function extractExportAs(exportAs) {
-  return exportAs === void 0 ? null : splitByComma(exportAs);
-}
-function isContentQuery(value) {
-  const name = value.ngMetadataName;
-  return name === "ContentChild" || name === "ContentChildren";
-}
-function isViewQuery(value) {
-  const name = value.ngMetadataName;
-  return name === "ViewChild" || name === "ViewChildren";
-}
-function isInputAnnotation(value) {
-  return value.ngMetadataName === "Input";
-}
-function splitByComma(value) {
-  return value.split(",").map((piece) => piece.trim());
-}
-var LIFECYCLE_HOOKS = ["ngOnChanges", "ngOnInit", "ngOnDestroy", "ngDoCheck", "ngAfterViewInit", "ngAfterViewChecked", "ngAfterContentInit", "ngAfterContentChecked"];
-function shouldAddAbstractDirective(type) {
-  const reflect = getReflect();
-  if (LIFECYCLE_HOOKS.some((hookName) => reflect.hasLifecycleHook(type, hookName))) {
-    return true;
-  }
-  const propMetadata = reflect.propMetadata(type);
-  for (const field in propMetadata) {
-    const annotations = propMetadata[field];
-    for (let i = 0; i < annotations.length; i++) {
-      const current = annotations[i];
-      const metadataName = current.ngMetadataName;
-      if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === "Output" || metadataName === "HostBinding" || metadataName === "HostListener") {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function compilePipe(type, meta) {
-  let ngPipeDef = null;
-  let ngFactoryDef = null;
-  Object.defineProperty(type, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const metadata = getPipeMetadata(type, meta);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "pipe",
-          type: metadata.type
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, {
-          name: metadata.name,
-          type: metadata.type,
-          typeArgumentCount: 0,
-          deps: reflectDependencies(type),
-          target: compiler.FactoryTarget.Pipe
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-  Object.defineProperty(type, NG_PIPE_DEF, {
-    get: () => {
-      if (ngPipeDef === null) {
-        const metadata = getPipeMetadata(type, meta);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "pipe",
-          type: metadata.type
-        });
-        ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);
-      }
-      return ngPipeDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getPipeMetadata(type, meta) {
-  return {
-    type,
-    name: type.name,
-    pipeName: meta.name,
-    pure: meta.pure !== void 0 ? meta.pure : true,
-    isStandalone: meta.standalone === void 0 ? true : !!meta.standalone
-  };
-}
-var Directive = makeDecorator("Directive", (dir = {}) => dir, void 0, void 0, (type, meta) => compileDirective(type, meta));
-var Component = makeDecorator("Component", (c = {}) => __spreadValues({
-  changeDetection: ChangeDetectionStrategy.Default
-}, c), Directive, void 0, (type, meta) => compileComponent(type, meta));
-var Pipe = makeDecorator("Pipe", (p) => __spreadValues({
-  pure: true
-}, p), void 0, void 0, (type, meta) => compilePipe(type, meta));
-var Input = makePropDecorator("Input", (arg) => {
-  if (!arg) {
-    return {};
-  }
-  return typeof arg === "string" ? {
-    alias: arg
-  } : arg;
-});
-var Output = makePropDecorator("Output", (alias) => ({
-  alias
-}));
-var HostBinding = makePropDecorator("HostBinding", (hostPropertyName) => ({
-  hostPropertyName
-}));
-var HostListener = makePropDecorator("HostListener", (eventName, args) => ({
-  eventName,
-  args
-}));
-var NgModule = makeDecorator(
-  "NgModule",
-  (ngModule) => ngModule,
-  void 0,
-  void 0,
-  /**
-   * Decorator that marks the following class as an NgModule, and supplies
-   * configuration metadata for it.
-   *
-   * * The `declarations` option configures the compiler
-   * with information about what belongs to the NgModule.
-   * * The `providers` options configures the NgModule's injector to provide
-   * dependencies the NgModule members.
-   * * The `imports` and `exports` options bring in members from other modules, and make
-   * this module's members available to others.
-   */
-  (type, meta) => compileNgModule(type, meta)
-);
-var Version = class {
-  full;
-  major;
-  minor;
-  patch;
-  constructor(full) {
-    this.full = full;
-    const parts = full.split(".");
-    this.major = parts[0];
-    this.minor = parts[1];
-    this.patch = parts.slice(2).join(".");
-  }
-};
-var VERSION = new Version("19.0.5");
-var ModuleWithComponentFactories = class {
-  ngModuleFactory;
-  componentFactories;
-  constructor(ngModuleFactory, componentFactories) {
-    this.ngModuleFactory = ngModuleFactory;
-    this.componentFactories = componentFactories;
-  }
-};
-var Compiler = class _Compiler {
-  /**
-   * Compiles the given NgModule and all of its components. All templates of the components
-   * have to be inlined.
-   */
-  compileModuleSync(moduleType) {
-    return new NgModuleFactory(moduleType);
-  }
-  /**
-   * Compiles the given NgModule and all of its components
-   */
-  compileModuleAsync(moduleType) {
-    return Promise.resolve(this.compileModuleSync(moduleType));
-  }
-  /**
-   * Same as {@link Compiler#compileModuleSync compileModuleSync} but also creates ComponentFactories for all components.
-   */
-  compileModuleAndAllComponentsSync(moduleType) {
-    const ngModuleFactory = this.compileModuleSync(moduleType);
-    const moduleDef = getNgModuleDef(moduleType);
-    const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {
-      const componentDef = getComponentDef(declaration);
-      componentDef && factories.push(new ComponentFactory(componentDef));
-      return factories;
-    }, []);
-    return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
-  }
-  /**
-   * Same as {@link Compiler#compileModuleAsync compileModuleAsync} but also creates ComponentFactories for all components.
-   */
-  compileModuleAndAllComponentsAsync(moduleType) {
-    return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));
-  }
-  /**
-   * Clears all caches.
-   */
-  clearCache() {
-  }
-  /**
-   * Clears the cache for the given component/ngModule.
-   */
-  clearCacheFor(type) {
-  }
-  /**
-   * Returns the id for a given NgModule, if one is defined and known to the compiler.
-   */
-  getModuleId(moduleType) {
-    return void 0;
-  }
-  static ɵfac = function Compiler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Compiler)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Compiler,
-    factory: _Compiler.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var COMPILER_OPTIONS = new InjectionToken(ngDevMode ? "compilerOptions" : "");
-var CompilerFactory = class {
-};
-function compileNgModuleFactory(injector, options, moduleType) {
-  ngDevMode && assertNgModuleType(moduleType);
-  const moduleFactory = new NgModuleFactory(moduleType);
-  if (typeof ngJitMode !== "undefined" && !ngJitMode) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);
-  setJitOptions({
-    defaultEncapsulation: _lastDefined(compilerOptions.map((opts) => opts.defaultEncapsulation)),
-    preserveWhitespaces: _lastDefined(compilerOptions.map((opts) => opts.preserveWhitespaces))
-  });
-  if (isComponentResourceResolutionQueueEmpty()) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compilerProviders = compilerOptions.flatMap((option) => option.providers ?? []);
-  if (compilerProviders.length === 0) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compiler = getCompilerFacade({
-    usage: 0,
-    kind: "NgModule",
-    type: moduleType
-  });
-  const compilerInjector = Injector.create({
-    providers: compilerProviders
-  });
-  const resourceLoader = compilerInjector.get(compiler.ResourceLoader);
-  return resolveComponentResources((url) => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);
-}
-function _lastDefined(args) {
-  for (let i = args.length - 1; i >= 0; i--) {
-    if (args[i] !== void 0) {
-      return args[i];
-    }
-  }
-  return void 0;
-}
-var NgZoneChangeDetectionScheduler = class _NgZoneChangeDetectionScheduler {
-  zone = inject(NgZone);
-  changeDetectionScheduler = inject(ChangeDetectionScheduler);
-  applicationRef = inject(ApplicationRef);
-  _onMicrotaskEmptySubscription;
-  initialize() {
-    if (this._onMicrotaskEmptySubscription) {
-      return;
-    }
-    this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({
-      next: () => {
-        if (this.changeDetectionScheduler.runningTick) {
-          return;
-        }
-        this.zone.run(() => {
-          this.applicationRef.tick();
-        });
-      }
-    });
-  }
-  ngOnDestroy() {
-    this._onMicrotaskEmptySubscription?.unsubscribe();
-  }
-  static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgZoneChangeDetectionScheduler)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgZoneChangeDetectionScheduler,
-    factory: _NgZoneChangeDetectionScheduler.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "provideZoneChangeDetection token" : "", {
-  factory: () => false
-});
-function internalProvideZoneChangeDetection({
-  ngZoneFactory,
-  ignoreChangesOutsideZone,
-  scheduleInRootZone
-}) {
-  ngZoneFactory ??= () => new NgZone(__spreadProps(__spreadValues({}, getNgZoneOptions()), {
-    scheduleInRootZone
-  }));
-  return [
-    {
-      provide: NgZone,
-      useFactory: ngZoneFactory
-    },
-    {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {
-          optional: true
-        });
-        if ((typeof ngDevMode === "undefined" || ngDevMode) && ngZoneChangeDetectionScheduler === null) {
-          throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. If you are bootstrapping an NgModule, make sure that the \`BrowserModule\` is imported.`);
-        }
-        return () => ngZoneChangeDetectionScheduler.initialize();
-      }
-    },
-    {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const service = inject(ZoneStablePendingTask);
-        return () => {
-          service.initialize();
-        };
-      }
-    },
-    // Always disable scheduler whenever explicitly disabled, even if another place called
-    // `provideZoneChangeDetection` without the 'ignore' option.
-    ignoreChangesOutsideZone === true ? {
-      provide: ZONELESS_SCHEDULER_DISABLED,
-      useValue: true
-    } : [],
-    {
-      provide: SCHEDULE_IN_ROOT_ZONE,
-      useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT
-    }
-  ];
-}
-function provideZoneChangeDetection(options) {
-  const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
-  const scheduleInRootZone = options?.scheduleInRootZone;
-  const zoneProviders = internalProvideZoneChangeDetection({
-    ngZoneFactory: () => {
-      const ngZoneOptions = getNgZoneOptions(options);
-      ngZoneOptions.scheduleInRootZone = scheduleInRootZone;
-      if (ngZoneOptions.shouldCoalesceEventChangeDetection) {
-        performanceMarkFeature("NgZone_CoalesceEvent");
-      }
-      return new NgZone(ngZoneOptions);
-    },
-    ignoreChangesOutsideZone,
-    scheduleInRootZone
-  });
-  return makeEnvironmentProviders([{
-    provide: PROVIDED_NG_ZONE,
-    useValue: true
-  }, {
-    provide: ZONELESS_ENABLED,
-    useValue: false
-  }, zoneProviders]);
-}
-function getNgZoneOptions(options) {
-  return {
-    enableLongStackTrace: typeof ngDevMode === "undefined" ? false : !!ngDevMode,
-    shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,
-    shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false
-  };
-}
-var ZoneStablePendingTask = class _ZoneStablePendingTask {
-  subscription = new Subscription();
-  initialized = false;
-  zone = inject(NgZone);
-  pendingTasks = inject(PendingTasksInternal);
-  initialize() {
-    if (this.initialized) {
-      return;
-    }
-    this.initialized = true;
-    let task = null;
-    if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
-      task = this.pendingTasks.add();
-    }
-    this.zone.runOutsideAngular(() => {
-      this.subscription.add(this.zone.onStable.subscribe(() => {
-        NgZone.assertNotInAngularZone();
-        queueMicrotask(() => {
-          if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
-            this.pendingTasks.remove(task);
-            task = null;
-          }
-        });
-      }));
-    });
-    this.subscription.add(this.zone.onUnstable.subscribe(() => {
-      NgZone.assertInAngularZone();
-      task ??= this.pendingTasks.add();
-    }));
-  }
-  ngOnDestroy() {
-    this.subscription.unsubscribe();
-  }
-  static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ZoneStablePendingTask)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ZoneStablePendingTask,
-    factory: _ZoneStablePendingTask.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;
-var consecutiveMicrotaskNotifications = 0;
-var stackFromLastFewNotifications = [];
-function trackMicrotaskNotificationForDebugging() {
-  consecutiveMicrotaskNotifications++;
-  if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {
-    const stack = new Error().stack;
-    if (stack) {
-      stackFromLastFewNotifications.push(stack);
-    }
-  }
-  if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {
-    throw new RuntimeError(103, "Angular could not stabilize because there were endless change notifications within the browser event loop. The stack from the last several notifications: \n" + stackFromLastFewNotifications.join("\n"));
-  }
-}
-var ChangeDetectionSchedulerImpl = class _ChangeDetectionSchedulerImpl {
-  appRef = inject(ApplicationRef);
-  taskService = inject(PendingTasksInternal);
-  ngZone = inject(NgZone);
-  zonelessEnabled = inject(ZONELESS_ENABLED);
-  tracing = inject(TracingService, {
-    optional: true
-  });
-  disableScheduling = inject(ZONELESS_SCHEDULER_DISABLED, {
-    optional: true
-  }) ?? false;
-  zoneIsDefined = typeof Zone !== "undefined" && !!Zone.root.run;
-  schedulerTickApplyArgs = [{
-    data: {
-      "__scheduler_tick__": true
-    }
-  }];
-  subscriptions = new Subscription();
-  angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;
-  scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {
-    optional: true
-  }) ?? false);
-  cancelScheduledCallback = null;
-  useMicrotaskScheduler = false;
-  runningTick = false;
-  pendingRenderTaskId = null;
-  constructor() {
-    this.subscriptions.add(this.appRef.afterTick.subscribe(() => {
-      if (!this.runningTick) {
-        this.cleanup();
-      }
-    }));
-    this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {
-      if (!this.runningTick) {
-        this.cleanup();
-      }
-    }));
-    this.disableScheduling ||= !this.zonelessEnabled && // NoopNgZone without enabling zoneless means no scheduling whatsoever
-    (this.ngZone instanceof NoopNgZone || // The same goes for the lack of Zone without enabling zoneless scheduling
-    !this.zoneIsDefined);
-  }
-  notify(source) {
-    if (!this.zonelessEnabled && source === 5) {
-      return;
-    }
-    let force = false;
-    switch (source) {
-      case 0: {
-        this.appRef.dirtyFlags |= 2;
-        break;
-      }
-      case 3:
-      case 2:
-      case 4:
-      case 5:
-      case 1: {
-        this.appRef.dirtyFlags |= 4;
-        break;
-      }
-      case 8: {
-        this.appRef.deferredDirtyFlags |= 8;
-        break;
-      }
-      case 6: {
-        this.appRef.dirtyFlags |= 2;
-        force = true;
-        break;
-      }
-      case 13: {
-        this.appRef.dirtyFlags |= 16;
-        force = true;
-        break;
-      }
-      case 14: {
-        this.appRef.dirtyFlags |= 2;
-        force = true;
-        break;
-      }
-      case 12: {
-        force = true;
-        break;
-      }
-      case 10:
-      case 9:
-      case 7:
-      case 11:
-      default: {
-        this.appRef.dirtyFlags |= 8;
-      }
-    }
-    this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;
-    if (!this.shouldScheduleTick(force)) {
-      return;
-    }
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (this.useMicrotaskScheduler) {
-        trackMicrotaskNotificationForDebugging();
-      } else {
-        consecutiveMicrotaskNotifications = 0;
-        stackFromLastFewNotifications.length = 0;
-      }
-    }
-    const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;
-    this.pendingRenderTaskId = this.taskService.add();
-    if (this.scheduleInRootZone) {
-      this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));
-    } else {
-      this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));
-    }
-  }
-  shouldScheduleTick(force) {
-    if (this.disableScheduling && !force || this.appRef.destroyed) {
-      return false;
-    }
-    if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {
-      return false;
-    }
-    if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {
-      return false;
-    }
-    return true;
-  }
-  /**
-   * Calls ApplicationRef._tick inside the `NgZone`.
-   *
-   * Calling `tick` directly runs change detection and cancels any change detection that had been
-   * scheduled previously.
-   *
-   * @param shouldRefreshViews Passed directly to `ApplicationRef._tick` and skips straight to
-   *     render hooks when `false`.
-   */
-  tick() {
-    if (this.runningTick || this.appRef.destroyed) {
-      return;
-    }
-    if (this.appRef.dirtyFlags === 0) {
-      this.cleanup();
-      return;
-    }
-    if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7) {
-      this.appRef.dirtyFlags |= 1;
-    }
-    const task = this.taskService.add();
-    try {
-      this.ngZone.run(() => {
-        this.runningTick = true;
-        this.appRef._tick();
-      }, void 0, this.schedulerTickApplyArgs);
-    } catch (e) {
-      this.taskService.remove(task);
-      throw e;
-    } finally {
-      this.cleanup();
-    }
-    this.useMicrotaskScheduler = true;
-    scheduleCallbackWithMicrotask(() => {
-      this.useMicrotaskScheduler = false;
-      this.taskService.remove(task);
-    });
-  }
-  ngOnDestroy() {
-    this.subscriptions.unsubscribe();
-    this.cleanup();
-  }
-  cleanup() {
-    this.runningTick = false;
-    this.cancelScheduledCallback?.();
-    this.cancelScheduledCallback = null;
-    if (this.pendingRenderTaskId !== null) {
-      const taskId = this.pendingRenderTaskId;
-      this.pendingRenderTaskId = null;
-      this.taskService.remove(taskId);
-    }
-  }
-  static ɵfac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ChangeDetectionSchedulerImpl)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ChangeDetectionSchedulerImpl,
-    factory: _ChangeDetectionSchedulerImpl.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function provideExperimentalZonelessChangeDetection() {
-  performanceMarkFeature("NgZoneless");
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && typeof Zone !== "undefined" && Zone) {
-    const message = formatRuntimeError(914, `The application is using zoneless change detection, but is still loading Zone.js. Consider removing Zone.js to get the full benefits of zoneless. In applications using the Angular CLI, Zone.js is typically included in the "polyfills" section of the angular.json file.`);
-    console.warn(message);
-  }
-  return makeEnvironmentProviders([{
-    provide: ChangeDetectionScheduler,
-    useExisting: ChangeDetectionSchedulerImpl
-  }, {
-    provide: NgZone,
-    useClass: NoopNgZone
-  }, {
-    provide: ZONELESS_ENABLED,
-    useValue: true
-  }, {
-    provide: SCHEDULE_IN_ROOT_ZONE,
-    useValue: false
-  }, typeof ngDevMode === "undefined" || ngDevMode ? [{
-    provide: PROVIDED_ZONELESS,
-    useValue: true
-  }] : []]);
-}
-function getGlobalLocale() {
-  if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode && typeof goog !== "undefined" && goog.LOCALE !== "en") {
-    return goog.LOCALE;
-  } else {
-    return typeof $localize !== "undefined" && $localize.locale || DEFAULT_LOCALE_ID;
-  }
-}
-var LOCALE_ID = new InjectionToken(ngDevMode ? "LocaleId" : "", {
-  providedIn: "root",
-  factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale()
-});
-var DEFAULT_CURRENCY_CODE = new InjectionToken(ngDevMode ? "DefaultCurrencyCode" : "", {
-  providedIn: "root",
-  factory: () => USD_CURRENCY_CODE
-});
-var TRANSLATIONS = new InjectionToken(ngDevMode ? "Translations" : "");
-var TRANSLATIONS_FORMAT = new InjectionToken(ngDevMode ? "TranslationsFormat" : "");
-var MissingTranslationStrategy;
-(function(MissingTranslationStrategy2) {
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Error"] = 0] = "Error";
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Warning"] = 1] = "Warning";
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Ignore"] = 2] = "Ignore";
-})(MissingTranslationStrategy || (MissingTranslationStrategy = {}));
-var SCAN_DELAY = 200;
-var OVERSIZED_IMAGE_TOLERANCE = 1200;
-var ImagePerformanceWarning = class _ImagePerformanceWarning {
-  // Map of full image URLs -> original `ngSrc` values.
-  window = null;
-  observer = null;
-  options = inject(IMAGE_CONFIG);
-  isBrowser = inject(PLATFORM_ID) === "browser";
-  lcpImageUrl;
-  start() {
-    if (!this.isBrowser || typeof PerformanceObserver === "undefined" || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {
-      return;
-    }
-    this.observer = this.initPerformanceObserver();
-    const doc = getDocument();
-    const win = doc.defaultView;
-    if (typeof win !== "undefined") {
-      this.window = win;
-      const waitToScan = () => {
-        setTimeout(this.scanImages.bind(this), SCAN_DELAY);
-      };
-      const setup = () => {
-        if (doc.readyState === "complete") {
-          waitToScan();
-        } else {
-          this.window?.addEventListener("load", waitToScan, {
-            once: true
-          });
-        }
-      };
-      if (typeof Zone !== "undefined") {
-        Zone.root.run(() => setup());
-      } else {
-        setup();
-      }
-    }
-  }
-  ngOnDestroy() {
-    this.observer?.disconnect();
-  }
-  initPerformanceObserver() {
-    if (typeof PerformanceObserver === "undefined") {
-      return null;
-    }
-    const observer = new PerformanceObserver((entryList) => {
-      const entries = entryList.getEntries();
-      if (entries.length === 0) return;
-      const lcpElement = entries[entries.length - 1];
-      const imgSrc = lcpElement.element?.src ?? "";
-      if (imgSrc.startsWith("data:") || imgSrc.startsWith("blob:")) return;
-      this.lcpImageUrl = imgSrc;
-    });
-    observer.observe({
-      type: "largest-contentful-paint",
-      buffered: true
-    });
-    return observer;
-  }
-  scanImages() {
-    const images = getDocument().querySelectorAll("img");
-    let lcpElementFound, lcpElementLoadedCorrectly = false;
-    images.forEach((image) => {
-      if (!this.options?.disableImageSizeWarning) {
-        if (!image.getAttribute("ng-img") && this.isOversized(image)) {
-          logOversizedImageWarning(image.src);
-        }
-      }
-      if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {
-        if (image.src === this.lcpImageUrl) {
-          lcpElementFound = true;
-          if (image.loading !== "lazy" || image.getAttribute("ng-img")) {
-            lcpElementLoadedCorrectly = true;
-          }
-        }
-      }
-    });
-    if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {
-      logLazyLCPWarning(this.lcpImageUrl);
-    }
-  }
-  isOversized(image) {
-    if (!this.window) {
-      return false;
-    }
-    const nonOversizedImageExtentions = [
-      // SVG images are vector-based, which means they can scale
-      // to any size without losing quality.
-      ".svg"
-    ];
-    const imageSource = (image.src || "").toLowerCase();
-    if (nonOversizedImageExtentions.some((extension) => imageSource.endsWith(extension))) {
-      return false;
-    }
-    const computedStyle = this.window.getComputedStyle(image);
-    let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-    let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-    const boxSizing = computedStyle.getPropertyValue("box-sizing");
-    const objectFit = computedStyle.getPropertyValue("object-fit");
-    if (objectFit === `cover`) {
-      return false;
-    }
-    if (boxSizing === "border-box") {
-      const paddingTop = computedStyle.getPropertyValue("padding-top");
-      const paddingRight = computedStyle.getPropertyValue("padding-right");
-      const paddingBottom = computedStyle.getPropertyValue("padding-bottom");
-      const paddingLeft = computedStyle.getPropertyValue("padding-left");
-      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
-      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
-    }
-    const intrinsicWidth = image.naturalWidth;
-    const intrinsicHeight = image.naturalHeight;
-    const recommendedWidth = this.window.devicePixelRatio * renderedWidth;
-    const recommendedHeight = this.window.devicePixelRatio * renderedHeight;
-    const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
-    const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
-    return oversizedWidth || oversizedHeight;
-  }
-  static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ImagePerformanceWarning)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ImagePerformanceWarning,
-    factory: _ImagePerformanceWarning.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-function logLazyLCPWarning(src) {
-  console.warn(formatRuntimeError(-913, `An image with src ${src} is the Largest Contentful Paint (LCP) element but was given a "loading" value of "lazy", which can negatively impact application loading performance. This warning can be addressed by changing the loading value of the LCP image to "eager", or by using the NgOptimizedImage directive's prioritization utilities. For more information about addressing or disabling this warning, see https://angular.dev/errors/NG0913`));
-}
-function logOversizedImageWarning(src) {
-  console.warn(formatRuntimeError(-913, `An image with src ${src} has intrinsic file dimensions much larger than its rendered size. This can negatively impact application loading performance. For more information about addressing or disabling this warning, see https://angular.dev/errors/NG0913`));
-}
-var PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? "PlatformDestroyListeners" : "");
-var ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? "ENABLE_ROOT_COMPONENT_BOOTSTRAP" : "");
-function isApplicationBootstrapConfig(config2) {
-  return !config2.moduleRef;
-}
-function bootstrap(config2) {
-  const envInjector = isApplicationBootstrapConfig(config2) ? config2.r3Injector : config2.moduleRef.injector;
-  const ngZone = envInjector.get(NgZone);
-  return ngZone.run(() => {
-    if (isApplicationBootstrapConfig(config2)) {
-      config2.r3Injector.resolveInjectorInitializers();
-    } else {
-      config2.moduleRef.resolveInjectorInitializers();
-    }
-    const exceptionHandler = envInjector.get(ErrorHandler, null);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (exceptionHandler === null) {
-        const errorMessage = isApplicationBootstrapConfig(config2) ? "No `ErrorHandler` found in the Dependency Injection tree." : "No ErrorHandler. Is platform module (BrowserModule) included";
-        throw new RuntimeError(402, errorMessage);
-      }
-      if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
-        throw new RuntimeError(408, "Invalid change detection configuration: provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.");
-      }
-    }
-    let onErrorSubscription;
-    ngZone.runOutsideAngular(() => {
-      onErrorSubscription = ngZone.onError.subscribe({
-        next: (error) => {
-          exceptionHandler.handleError(error);
-        }
-      });
-    });
-    if (isApplicationBootstrapConfig(config2)) {
-      const destroyListener = () => envInjector.destroy();
-      const onPlatformDestroyListeners = config2.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
-      onPlatformDestroyListeners.add(destroyListener);
-      envInjector.onDestroy(() => {
-        onErrorSubscription.unsubscribe();
-        onPlatformDestroyListeners.delete(destroyListener);
-      });
-    } else {
-      const destroyListener = () => config2.moduleRef.destroy();
-      const onPlatformDestroyListeners = config2.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
-      onPlatformDestroyListeners.add(destroyListener);
-      config2.moduleRef.onDestroy(() => {
-        remove(config2.allPlatformModules, config2.moduleRef);
-        onErrorSubscription.unsubscribe();
-        onPlatformDestroyListeners.delete(destroyListener);
-      });
-    }
-    return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {
-      const initStatus = envInjector.get(ApplicationInitStatus);
-      initStatus.runInitializers();
-      return initStatus.donePromise.then(() => {
-        const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
-        setLocaleId(localeId || DEFAULT_LOCALE_ID);
-        const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
-        if (!enableRootComponentBoostrap) {
-          if (isApplicationBootstrapConfig(config2)) {
-            return envInjector.get(ApplicationRef);
-          }
-          config2.allPlatformModules.push(config2.moduleRef);
-          return config2.moduleRef;
-        }
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
-          imagePerformanceService.start();
-        }
-        if (isApplicationBootstrapConfig(config2)) {
-          const appRef = envInjector.get(ApplicationRef);
-          if (config2.rootComponent !== void 0) {
-            appRef.bootstrap(config2.rootComponent);
-          }
-          return appRef;
-        } else {
-          moduleDoBootstrap(config2.moduleRef, config2.allPlatformModules);
-          return config2.moduleRef;
-        }
-      });
-    });
-  });
-}
-function moduleDoBootstrap(moduleRef, allPlatformModules) {
-  const appRef = moduleRef.injector.get(ApplicationRef);
-  if (moduleRef._bootstrapComponents.length > 0) {
-    moduleRef._bootstrapComponents.forEach((f) => appRef.bootstrap(f));
-  } else if (moduleRef.instance.ngDoBootstrap) {
-    moduleRef.instance.ngDoBootstrap(appRef);
-  } else {
-    throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);
-  }
-  allPlatformModules.push(moduleRef);
-}
-var PlatformRef = class _PlatformRef {
-  _injector;
-  _modules = [];
-  _destroyListeners = [];
-  _destroyed = false;
-  /** @internal */
-  constructor(_injector) {
-    this._injector = _injector;
-  }
-  /**
-   * Creates an instance of an `@NgModule` for the given platform.
-   *
-   * @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function
-   *     argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.
-   */
-  bootstrapModuleFactory(moduleFactory, options) {
-    const scheduleInRootZone = options?.scheduleInRootZone;
-    const ngZoneFactory = () => getNgZone(options?.ngZone, __spreadProps(__spreadValues({}, getNgZoneOptions({
-      eventCoalescing: options?.ngZoneEventCoalescing,
-      runCoalescing: options?.ngZoneRunCoalescing
-    })), {
-      scheduleInRootZone
-    }));
-    const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
-    const allAppProviders = [internalProvideZoneChangeDetection({
-      ngZoneFactory,
-      ignoreChangesOutsideZone
-    }), {
-      provide: ChangeDetectionScheduler,
-      useExisting: ChangeDetectionSchedulerImpl
-    }];
-    const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);
-    return bootstrap({
-      moduleRef,
-      allPlatformModules: this._modules,
-      platformInjector: this.injector
-    });
-  }
-  /**
-   * Creates an instance of an `@NgModule` for a given platform.
-   *
-   * @usageNotes
-   * ### Simple Example
-   *
-   * ```ts
-   * @NgModule({
-   *   imports: [BrowserModule]
-   * })
-   * class MyModule {}
-   *
-   * let moduleRef = platformBrowser().bootstrapModule(MyModule);
-   * ```
-   *
-   */
-  bootstrapModule(moduleType, compilerOptions = []) {
-    const options = optionsReducer({}, compilerOptions);
-    return compileNgModuleFactory(this.injector, options, moduleType).then((moduleFactory) => this.bootstrapModuleFactory(moduleFactory, options));
-  }
-  /**
-   * Registers a listener to be called when the platform is destroyed.
-   */
-  onDestroy(callback) {
-    this._destroyListeners.push(callback);
-  }
-  /**
-   * Retrieves the platform {@link Injector}, which is the parent injector for
-   * every Angular application on the page and provides singleton providers.
-   */
-  get injector() {
-    return this._injector;
-  }
-  /**
-   * Destroys the current Angular platform and all Angular applications on the page.
-   * Destroys all modules and listeners registered with the platform.
-   */
-  destroy() {
-    if (this._destroyed) {
-      throw new RuntimeError(404, ngDevMode && "The platform has already been destroyed!");
-    }
-    this._modules.slice().forEach((module) => module.destroy());
-    this._destroyListeners.forEach((listener) => listener());
-    const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);
-    if (destroyListeners) {
-      destroyListeners.forEach((listener) => listener());
-      destroyListeners.clear();
-    }
-    this._destroyed = true;
-  }
-  /**
-   * Indicates whether this instance was destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformRef)(ɵɵinject(Injector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformRef,
-    factory: _PlatformRef.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformRef, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], () => [{
-    type: Injector
-  }], null);
-})();
-var _platformInjector = null;
-var ALLOW_MULTIPLE_PLATFORMS = new InjectionToken(ngDevMode ? "AllowMultipleToken" : "");
-function createPlatform(injector) {
-  if (_platformInjector && !_platformInjector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
-    throw new RuntimeError(400, ngDevMode && "There can be only one platform. Destroy the previous one to create a new one.");
-  }
-  publishDefaultGlobalUtils();
-  publishSignalConfiguration();
-  _platformInjector = injector;
-  const platform = injector.get(PlatformRef);
-  runPlatformInitializers(injector);
-  return platform;
-}
-function createPlatformFactory(parentPlatformFactory, name, providers = []) {
-  const desc = `Platform: ${name}`;
-  const marker = new InjectionToken(desc);
-  return (extraProviders = []) => {
-    let platform = getPlatform();
-    if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
-      const platformProviders = [...providers, ...extraProviders, {
-        provide: marker,
-        useValue: true
-      }];
-      if (parentPlatformFactory) {
-        parentPlatformFactory(platformProviders);
-      } else {
-        createPlatform(createPlatformInjector(platformProviders, desc));
-      }
-    }
-    return assertPlatform(marker);
-  };
-}
-function createPlatformInjector(providers = [], name) {
-  return Injector.create({
-    name,
-    providers: [{
-      provide: INJECTOR_SCOPE,
-      useValue: "platform"
-    }, {
-      provide: PLATFORM_DESTROY_LISTENERS,
-      useValue: /* @__PURE__ */ new Set([() => _platformInjector = null])
-    }, ...providers]
-  });
-}
-function assertPlatform(requiredToken) {
-  const platform = getPlatform();
-  if (!platform) {
-    throw new RuntimeError(401, ngDevMode && "No platform exists!");
-  }
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && !platform.injector.get(requiredToken, null)) {
-    throw new RuntimeError(400, "A platform with a different configuration has been created. Please destroy it first.");
-  }
-  return platform;
-}
-function getPlatform() {
-  return _platformInjector?.get(PlatformRef) ?? null;
-}
-function destroyPlatform() {
-  getPlatform()?.destroy();
-}
-function createOrReusePlatformInjector(providers = []) {
-  if (_platformInjector) return _platformInjector;
-  publishDefaultGlobalUtils();
-  const injector = createPlatformInjector(providers);
-  _platformInjector = injector;
-  publishSignalConfiguration();
-  runPlatformInitializers(injector);
-  return injector;
-}
-function providePlatformInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: PLATFORM_INITIALIZER,
-    useValue: initializerFn,
-    multi: true
-  }]);
-}
-function runPlatformInitializers(injector) {
-  const inits = injector.get(PLATFORM_INITIALIZER, null);
-  runInInjectionContext(injector, () => {
-    inits?.forEach((init) => init());
-  });
-}
-function provideExperimentalCheckNoChangesForDebug(options) {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (options.interval === void 0 && !options.useNgZoneOnStable) {
-      throw new Error("Must provide one of `useNgZoneOnStable` or `interval`");
-    }
-    const checkNoChangesMode = options?.exhaustive === false ? CheckNoChangesMode.OnlyDirtyViews : CheckNoChangesMode.Exhaustive;
-    return makeEnvironmentProviders([options?.useNgZoneOnStable ? {
-      provide: NgZone,
-      useFactory: () => new DebugNgZoneForCheckNoChanges(checkNoChangesMode)
-    } : [], options?.interval !== void 0 ? exhaustiveCheckNoChangesInterval(options.interval, checkNoChangesMode) : [], {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useValue: () => {
-        if (options?.useNgZoneOnStable && !(inject(NgZone) instanceof DebugNgZoneForCheckNoChanges)) {
-          throw new Error("`provideExperimentalCheckNoChangesForDebug` with `useNgZoneOnStable` must be after any other provider for `NgZone`.");
-        }
-      }
-    }]);
-  } else {
-    return makeEnvironmentProviders([]);
-  }
-}
-var DebugNgZoneForCheckNoChanges = class extends NgZone {
-  checkNoChangesMode;
-  applicationRef;
-  scheduler;
-  errorHandler;
-  injector = inject(EnvironmentInjector);
-  constructor(checkNoChangesMode) {
-    const zonelessEnabled = inject(ZONELESS_ENABLED);
-    super({
-      shouldCoalesceEventChangeDetection: true,
-      shouldCoalesceRunChangeDetection: zonelessEnabled
-    });
-    this.checkNoChangesMode = checkNoChangesMode;
-    if (zonelessEnabled) {
-      this.onMicrotaskEmpty.emit = () => {
-      };
-      this.onStable.emit = () => {
-        this.scheduler ||= this.injector.get(ChangeDetectionSchedulerImpl);
-        if (this.scheduler.pendingRenderTaskId || this.scheduler.runningTick) {
-          return;
-        }
-        this.checkApplicationViews();
-      };
-      this.onUnstable.emit = () => {
-      };
-    } else {
-      this.runOutsideAngular(() => {
-        this.onStable.subscribe(() => {
-          this.checkApplicationViews();
-        });
-      });
-    }
-  }
-  checkApplicationViews() {
-    this.applicationRef ||= this.injector.get(ApplicationRef);
-    for (const view of this.applicationRef.allViews) {
-      try {
-        checkNoChangesInternal(view._lView, this.checkNoChangesMode, view.notifyErrorHandler);
-      } catch (e) {
-        this.errorHandler ||= this.injector.get(ErrorHandler);
-        this.errorHandler.handleError(e);
-      }
-    }
-  }
-};
-function exhaustiveCheckNoChangesInterval(interval2, checkNoChangesMode) {
-  return {
-    provide: ENVIRONMENT_INITIALIZER,
-    multi: true,
-    useFactory: () => {
-      const applicationRef = inject(ApplicationRef);
-      const errorHandler = inject(ErrorHandler);
-      const scheduler = inject(ChangeDetectionSchedulerImpl);
-      const ngZone = inject(NgZone);
-      return () => {
-        function scheduleCheckNoChanges() {
-          ngZone.runOutsideAngular(() => {
-            setTimeout(() => {
-              if (applicationRef.destroyed) {
-                return;
-              }
-              if (scheduler.pendingRenderTaskId || scheduler.runningTick) {
-                scheduleCheckNoChanges();
-                return;
-              }
-              for (const view of applicationRef.allViews) {
-                try {
-                  checkNoChangesInternal(view._lView, checkNoChangesMode, view.notifyErrorHandler);
-                } catch (e) {
-                  errorHandler.handleError(e);
-                }
-              }
-              scheduleCheckNoChanges();
-            }, interval2);
-          });
-        }
-        scheduleCheckNoChanges();
-      };
-    }
-  };
-}
-function isDevMode() {
-  return typeof ngDevMode === "undefined" || !!ngDevMode;
-}
-function enableProdMode() {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    _global["ngDevMode"] = false;
-  }
-}
-function getModuleFactory(id) {
-  const type = getRegisteredNgModuleType(id);
-  if (!type) throw noModuleError(id);
-  return new NgModuleFactory(type);
-}
-function getNgModuleById(id) {
-  const type = getRegisteredNgModuleType(id);
-  if (!type) throw noModuleError(id);
-  return type;
-}
-function noModuleError(id) {
-  return new Error(`No module with ID ${id} loaded`);
-}
-var ChangeDetectorRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectChangeDetectorRef;
-};
-function injectChangeDetectorRef(flags) {
-  return createViewRef(
-    getCurrentTNode(),
-    getLView(),
-    (flags & 16) === 16
-    /* InternalInjectFlags.ForPipe */
-  );
-}
-function createViewRef(tNode, lView, isPipe2) {
-  if (isComponentHost(tNode) && !isPipe2) {
-    const componentView = getComponentLViewByIndex(tNode.index, lView);
-    return new ViewRef$1(componentView, componentView);
-  } else if (tNode.type & (3 | 12 | 32 | 128)) {
-    const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];
-    return new ViewRef$1(hostComponentView, lView);
-  }
-  return null;
-}
-var ViewRef = class extends ChangeDetectorRef {
-};
-var EmbeddedViewRef = class extends ViewRef {
-};
-var DebugEventListener = class {
-  name;
-  callback;
-  constructor(name, callback) {
-    this.name = name;
-    this.callback = callback;
-  }
-};
-function asNativeElements(debugEls) {
-  return debugEls.map((el) => el.nativeElement);
-}
-var DebugNode = class {
-  /**
-   * The underlying DOM node.
-   */
-  nativeNode;
-  constructor(nativeNode) {
-    this.nativeNode = nativeNode;
-  }
-  /**
-   * The `DebugElement` parent. Will be `null` if this is the root element.
-   */
-  get parent() {
-    const parent = this.nativeNode.parentNode;
-    return parent ? new DebugElement(parent) : null;
-  }
-  /**
-   * The host dependency injector. For example, the root element's component instance injector.
-   */
-  get injector() {
-    return getInjector(this.nativeNode);
-  }
-  /**
-   * The element's own component instance, if it has one.
-   */
-  get componentInstance() {
-    const nativeElement = this.nativeNode;
-    return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));
-  }
-  /**
-   * An object that provides parent context for this element. Often an ancestor component instance
-   * that governs this element.
-   *
-   * When an element is repeated within *ngFor, the context is an `NgForOf` whose `$implicit`
-   * property is the value of the row instance value. For example, the `hero` in `*ngFor="let hero
-   * of heroes"`.
-   */
-  get context() {
-    return getComponent(this.nativeNode) || getContext(this.nativeNode);
-  }
-  /**
-   * The callbacks attached to the component's @Output properties and/or the element's event
-   * properties.
-   */
-  get listeners() {
-    return getListeners(this.nativeNode).filter((listener) => listener.type === "dom");
-  }
-  /**
-   * Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local
-   * variable name.
-   */
-  get references() {
-    return getLocalRefs(this.nativeNode);
-  }
-  /**
-   * This component's injector lookup tokens. Includes the component itself plus the tokens that the
-   * component lists in its providers metadata.
-   */
-  get providerTokens() {
-    return getInjectionTokens(this.nativeNode);
-  }
-};
-var DebugElement = class extends DebugNode {
-  constructor(nativeNode) {
-    ngDevMode && assertDomNode(nativeNode);
-    super(nativeNode);
-  }
-  /**
-   * The underlying DOM element at the root of the component.
-   */
-  get nativeElement() {
-    return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;
-  }
-  /**
-   * The element tag name, if it is an element.
-   */
-  get name() {
-    const context2 = getLContext(this.nativeNode);
-    const lView = context2 ? context2.lView : null;
-    if (lView !== null) {
-      const tData = lView[TVIEW].data;
-      const tNode = tData[context2.nodeIndex];
-      return tNode.value;
-    } else {
-      return this.nativeNode.nodeName;
-    }
-  }
-  /**
-   *  Gets a map of property names to property values for an element.
-   *
-   *  This map includes:
-   *  - Regular property bindings (e.g. `[id]="id"`)
-   *  - Host property bindings (e.g. `host: { '[id]': "id" }`)
-   *  - Interpolated property bindings (e.g. `id="{{ value }}")
-   *
-   *  It does not include:
-   *  - input property bindings (e.g. `[myCustomInput]="value"`)
-   *  - attribute bindings (e.g. `[attr.role]="menu"`)
-   */
-  get properties() {
-    const context2 = getLContext(this.nativeNode);
-    const lView = context2 ? context2.lView : null;
-    if (lView === null) {
-      return {};
-    }
-    const tData = lView[TVIEW].data;
-    const tNode = tData[context2.nodeIndex];
-    const properties = {};
-    copyDomProperties(this.nativeElement, properties);
-    collectPropertyBindings(properties, tNode, lView, tData);
-    return properties;
-  }
-  /**
-   *  A map of attribute names to attribute values for an element.
-   */
-  // TODO: replace null by undefined in the return type
-  get attributes() {
-    const attributes = {};
-    const element = this.nativeElement;
-    if (!element) {
-      return attributes;
-    }
-    const context2 = getLContext(element);
-    const lView = context2 ? context2.lView : null;
-    if (lView === null) {
-      return {};
-    }
-    const tNodeAttrs = lView[TVIEW].data[context2.nodeIndex].attrs;
-    const lowercaseTNodeAttrs = [];
-    if (tNodeAttrs) {
-      let i = 0;
-      while (i < tNodeAttrs.length) {
-        const attrName = tNodeAttrs[i];
-        if (typeof attrName !== "string") break;
-        const attrValue = tNodeAttrs[i + 1];
-        attributes[attrName] = attrValue;
-        lowercaseTNodeAttrs.push(attrName.toLowerCase());
-        i += 2;
-      }
-    }
-    for (const attr of element.attributes) {
-      if (!lowercaseTNodeAttrs.includes(attr.name)) {
-        attributes[attr.name] = attr.value;
-      }
-    }
-    return attributes;
-  }
-  /**
-   * The inline styles of the DOM element.
-   */
-  // TODO: replace null by undefined in the return type
-  get styles() {
-    const element = this.nativeElement;
-    return element?.style ?? {};
-  }
-  /**
-   * A map containing the class names on the element as keys.
-   *
-   * This map is derived from the `className` property of the DOM element.
-   *
-   * Note: The values of this object will always be `true`. The class key will not appear in the KV
-   * object if it does not exist on the element.
-   *
-   * @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)
-   */
-  get classes() {
-    const result = {};
-    const element = this.nativeElement;
-    const className = element.className;
-    const classes = typeof className !== "string" ? className.baseVal.split(" ") : className.split(" ");
-    classes.forEach((value) => result[value] = true);
-    return result;
-  }
-  /**
-   * The `childNodes` of the DOM element as a `DebugNode` array.
-   *
-   * @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)
-   */
-  get childNodes() {
-    const childNodes = this.nativeNode.childNodes;
-    const children = [];
-    for (let i = 0; i < childNodes.length; i++) {
-      const element = childNodes[i];
-      children.push(getDebugNode(element));
-    }
-    return children;
-  }
-  /**
-   * The immediate `DebugElement` children. Walk the tree by descending through `children`.
-   */
-  get children() {
-    const nativeElement = this.nativeElement;
-    if (!nativeElement) return [];
-    const childNodes = nativeElement.children;
-    const children = [];
-    for (let i = 0; i < childNodes.length; i++) {
-      const element = childNodes[i];
-      children.push(getDebugNode(element));
-    }
-    return children;
-  }
-  /**
-   * @returns the first `DebugElement` that matches the predicate at any depth in the subtree.
-   */
-  query(predicate) {
-    const results = this.queryAll(predicate);
-    return results[0] || null;
-  }
-  /**
-   * @returns All `DebugElement` matches for the predicate at any depth in the subtree.
-   */
-  queryAll(predicate) {
-    const matches = [];
-    _queryAll(this, predicate, matches, true);
-    return matches;
-  }
-  /**
-   * @returns All `DebugNode` matches for the predicate at any depth in the subtree.
-   */
-  queryAllNodes(predicate) {
-    const matches = [];
-    _queryAll(this, predicate, matches, false);
-    return matches;
-  }
-  /**
-   * Triggers the event by its name if there is a corresponding listener in the element's
-   * `listeners` collection.
-   *
-   * If the event lacks a listener or there's some other problem, consider
-   * calling `nativeElement.dispatchEvent(eventObject)`.
-   *
-   * @param eventName The name of the event to trigger
-   * @param eventObj The _event object_ expected by the handler
-   *
-   * @see [Testing components scenarios](guide/testing/components-scenarios#trigger-event-handler)
-   */
-  triggerEventHandler(eventName, eventObj) {
-    const node = this.nativeNode;
-    const invokedListeners = [];
-    this.listeners.forEach((listener) => {
-      if (listener.name === eventName) {
-        const callback = listener.callback;
-        callback.call(node, eventObj);
-        invokedListeners.push(callback);
-      }
-    });
-    if (typeof node.eventListeners === "function") {
-      node.eventListeners(eventName).forEach((listener) => {
-        if (listener.toString().indexOf("__ngUnwrap__") !== -1) {
-          const unwrappedListener = listener("__ngUnwrap__");
-          return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);
-        }
-      });
-    }
-  }
-};
-function copyDomProperties(element, properties) {
-  if (element) {
-    let obj = Object.getPrototypeOf(element);
-    const NodePrototype = Node.prototype;
-    while (obj !== null && obj !== NodePrototype) {
-      const descriptors = Object.getOwnPropertyDescriptors(obj);
-      for (let key in descriptors) {
-        if (!key.startsWith("__") && !key.startsWith("on")) {
-          const value = element[key];
-          if (isPrimitiveValue(value)) {
-            properties[key] = value;
-          }
-        }
-      }
-      obj = Object.getPrototypeOf(obj);
-    }
-  }
-}
-function isPrimitiveValue(value) {
-  return typeof value === "string" || typeof value === "boolean" || typeof value === "number" || value === null;
-}
-function _queryAll(parentElement, predicate, matches, elementsOnly) {
-  const context2 = getLContext(parentElement.nativeNode);
-  const lView = context2 ? context2.lView : null;
-  if (lView !== null) {
-    const parentTNode = lView[TVIEW].data[context2.nodeIndex];
-    _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
-  } else {
-    _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);
-  }
-}
-function _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  const nativeNode = getNativeByTNodeOrNull(tNode, lView);
-  if (tNode.type & (3 | 8)) {
-    _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
-    if (isComponentHost(tNode)) {
-      const componentView = getComponentLViewByIndex(tNode.index, lView);
-      if (componentView && componentView[TVIEW].firstChild) {
-        _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);
-      }
-    } else {
-      if (tNode.child) {
-        _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
-      }
-      nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);
-    }
-    const nodeOrContainer = lView[tNode.index];
-    if (isLContainer(nodeOrContainer)) {
-      _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  } else if (tNode.type & 4) {
-    const lContainer = lView[tNode.index];
-    _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);
-    _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);
-  } else if (tNode.type & 16) {
-    const componentView = lView[DECLARATION_COMPONENT_VIEW];
-    const componentHost = componentView[T_HOST];
-    const head = componentHost.projection[tNode.projection];
-    if (Array.isArray(head)) {
-      for (let nativeNode2 of head) {
-        _addQueryMatch(nativeNode2, predicate, matches, elementsOnly, rootNativeNode);
-      }
-    } else if (head) {
-      const nextLView = componentView[PARENT];
-      const nextTNode = nextLView[TVIEW].data[head.index];
-      _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  } else if (tNode.child) {
-    _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
-  }
-  if (rootNativeNode !== nativeNode) {
-    const nextTNode = tNode.flags & 2 ? tNode.projectionNext : tNode.next;
-    if (nextTNode) {
-      _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  }
-}
-function _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const childView = lContainer[i];
-    const firstChild = childView[TVIEW].firstChild;
-    if (firstChild) {
-      _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  }
-}
-function _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {
-  if (rootNativeNode !== nativeNode) {
-    const debugNode = getDebugNode(nativeNode);
-    if (!debugNode) {
-      return;
-    }
-    if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-      matches.push(debugNode);
-    } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-      matches.push(debugNode);
-    }
-  }
-}
-function _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {
-  const nodes = parentNode.childNodes;
-  const length = nodes.length;
-  for (let i = 0; i < length; i++) {
-    const node = nodes[i];
-    const debugNode = getDebugNode(node);
-    if (debugNode) {
-      if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-        matches.push(debugNode);
-      } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-        matches.push(debugNode);
-      }
-      _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);
-    }
-  }
-}
-function collectPropertyBindings(properties, tNode, lView, tData) {
-  let bindingIndexes = tNode.propertyBindings;
-  if (bindingIndexes !== null) {
-    for (let i = 0; i < bindingIndexes.length; i++) {
-      const bindingIndex = bindingIndexes[i];
-      const propMetadata = tData[bindingIndex];
-      const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);
-      const propertyName = metadataParts[0];
-      if (metadataParts.length > 1) {
-        let value = metadataParts[1];
-        for (let j = 1; j < metadataParts.length - 1; j++) {
-          value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];
-        }
-        properties[propertyName] = value;
-      } else {
-        properties[propertyName] = lView[bindingIndex];
-      }
-    }
-  }
-}
-var NG_DEBUG_PROPERTY = "__ng_debug__";
-function getDebugNode(nativeNode) {
-  if (nativeNode instanceof Node) {
-    if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {
-      nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);
-    }
-    return nativeNode[NG_DEBUG_PROPERTY];
-  }
-  return null;
-}
-var DefaultIterableDifferFactory = class {
-  constructor() {
-  }
-  supports(obj) {
-    return isListLikeIterable(obj);
-  }
-  create(trackByFn) {
-    return new DefaultIterableDiffer(trackByFn);
-  }
-};
-var trackByIdentity = (index, item) => item;
-var DefaultIterableDiffer = class {
-  length = 0;
-  // TODO: confirm the usage of `collection` as it's unused, readonly and on a non public API.
-  collection;
-  // Keeps track of the used records at any point in time (during & across `_check()` calls)
-  _linkedRecords = null;
-  // Keeps track of the removed records at any point in time during `_check()` calls.
-  _unlinkedRecords = null;
-  _previousItHead = null;
-  _itHead = null;
-  _itTail = null;
-  _additionsHead = null;
-  _additionsTail = null;
-  _movesHead = null;
-  _movesTail = null;
-  _removalsHead = null;
-  _removalsTail = null;
-  // Keeps track of records where custom track by is the same, but item identity has changed
-  _identityChangesHead = null;
-  _identityChangesTail = null;
-  _trackByFn;
-  constructor(trackByFn) {
-    this._trackByFn = trackByFn || trackByIdentity;
-  }
-  forEachItem(fn) {
-    let record;
-    for (record = this._itHead; record !== null; record = record._next) {
-      fn(record);
-    }
-  }
-  forEachOperation(fn) {
-    let nextIt = this._itHead;
-    let nextRemove = this._removalsHead;
-    let addRemoveOffset = 0;
-    let moveOffsets = null;
-    while (nextIt || nextRemove) {
-      const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;
-      const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
-      const currentIndex = record.currentIndex;
-      if (record === nextRemove) {
-        addRemoveOffset--;
-        nextRemove = nextRemove._nextRemoved;
-      } else {
-        nextIt = nextIt._next;
-        if (record.previousIndex == null) {
-          addRemoveOffset++;
-        } else {
-          if (!moveOffsets) moveOffsets = [];
-          const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
-          const localCurrentIndex = currentIndex - addRemoveOffset;
-          if (localMovePreviousIndex != localCurrentIndex) {
-            for (let i = 0; i < localMovePreviousIndex; i++) {
-              const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;
-              const index = offset + i;
-              if (localCurrentIndex <= index && index < localMovePreviousIndex) {
-                moveOffsets[i] = offset + 1;
-              }
-            }
-            const previousIndex = record.previousIndex;
-            moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
-          }
-        }
-      }
-      if (adjPreviousIndex !== currentIndex) {
-        fn(record, adjPreviousIndex, currentIndex);
-      }
-    }
-  }
-  forEachPreviousItem(fn) {
-    let record;
-    for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
-      fn(record);
-    }
-  }
-  forEachAddedItem(fn) {
-    let record;
-    for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-      fn(record);
-    }
-  }
-  forEachMovedItem(fn) {
-    let record;
-    for (record = this._movesHead; record !== null; record = record._nextMoved) {
-      fn(record);
-    }
-  }
-  forEachRemovedItem(fn) {
-    let record;
-    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
-      fn(record);
-    }
-  }
-  forEachIdentityChange(fn) {
-    let record;
-    for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
-      fn(record);
-    }
-  }
-  diff(collection) {
-    if (collection == null) collection = [];
-    if (!isListLikeIterable(collection)) {
-      throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);
-    }
-    if (this.check(collection)) {
-      return this;
-    } else {
-      return null;
-    }
-  }
-  onDestroy() {
-  }
-  check(collection) {
-    this._reset();
-    let record = this._itHead;
-    let mayBeDirty = false;
-    let index;
-    let item;
-    let itemTrackBy;
-    if (Array.isArray(collection)) {
-      this.length = collection.length;
-      for (let index2 = 0; index2 < this.length; index2++) {
-        item = collection[index2];
-        itemTrackBy = this._trackByFn(index2, item);
-        if (record === null || !Object.is(record.trackById, itemTrackBy)) {
-          record = this._mismatch(record, item, itemTrackBy, index2);
-          mayBeDirty = true;
-        } else {
-          if (mayBeDirty) {
-            record = this._verifyReinsertion(record, item, itemTrackBy, index2);
-          }
-          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-        }
-        record = record._next;
-      }
-    } else {
-      index = 0;
-      iterateListLike(collection, (item2) => {
-        itemTrackBy = this._trackByFn(index, item2);
-        if (record === null || !Object.is(record.trackById, itemTrackBy)) {
-          record = this._mismatch(record, item2, itemTrackBy, index);
-          mayBeDirty = true;
-        } else {
-          if (mayBeDirty) {
-            record = this._verifyReinsertion(record, item2, itemTrackBy, index);
-          }
-          if (!Object.is(record.item, item2)) this._addIdentityChange(record, item2);
-        }
-        record = record._next;
-        index++;
-      });
-      this.length = index;
-    }
-    this._truncate(record);
-    this.collection = collection;
-    return this.isDirty;
-  }
-  /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity
-   * changes.
-   */
-  get isDirty() {
-    return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;
-  }
-  /**
-   * Reset the state of the change objects to show no changes. This means set previousKey to
-   * currentKey, and clear all of the queues (additions, moves, removals).
-   * Set the previousIndexes of moved and added items to their currentIndexes
-   * Reset the list of additions, moves and removals
-   *
-   * @internal
-   */
-  _reset() {
-    if (this.isDirty) {
-      let record;
-      for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
-        record._nextPrevious = record._next;
-      }
-      for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-        record.previousIndex = record.currentIndex;
-      }
-      this._additionsHead = this._additionsTail = null;
-      for (record = this._movesHead; record !== null; record = record._nextMoved) {
-        record.previousIndex = record.currentIndex;
-      }
-      this._movesHead = this._movesTail = null;
-      this._removalsHead = this._removalsTail = null;
-      this._identityChangesHead = this._identityChangesTail = null;
-    }
-  }
-  /**
-   * This is the core function which handles differences between collections.
-   *
-   * - `record` is the record which we saw at this position last time. If null then it is a new
-   *   item.
-   * - `item` is the current item in the collection
-   * - `index` is the position of the item in the collection
-   *
-   * @internal
-   */
-  _mismatch(record, item, itemTrackBy, index) {
-    let previousRecord;
-    if (record === null) {
-      previousRecord = this._itTail;
-    } else {
-      previousRecord = record._prev;
-      this._remove(record);
-    }
-    record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
-    if (record !== null) {
-      if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-      this._reinsertAfter(record, previousRecord, index);
-    } else {
-      record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
-      if (record !== null) {
-        if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-        this._moveAfter(record, previousRecord, index);
-      } else {
-        record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
-      }
-    }
-    return record;
-  }
-  /**
-   * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
-   *
-   * Use case: `[a, a]` => `[b, a, a]`
-   *
-   * If we did not have this check then the insertion of `b` would:
-   *   1) evict first `a`
-   *   2) insert `b` at `0` index.
-   *   3) leave `a` at index `1` as is. <-- this is wrong!
-   *   3) reinsert `a` at index 2. <-- this is wrong!
-   *
-   * The correct behavior is:
-   *   1) evict first `a`
-   *   2) insert `b` at `0` index.
-   *   3) reinsert `a` at index 1.
-   *   3) move `a` at from `1` to `2`.
-   *
-   *
-   * Double check that we have not evicted a duplicate item. We need to check if the item type may
-   * have already been removed:
-   * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
-   * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
-   * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
-   * at the end.
-   *
-   * @internal
-   */
-  _verifyReinsertion(record, item, itemTrackBy, index) {
-    let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
-    if (reinsertRecord !== null) {
-      record = this._reinsertAfter(reinsertRecord, record._prev, index);
-    } else if (record.currentIndex != index) {
-      record.currentIndex = index;
-      this._addToMoves(record, index);
-    }
-    return record;
-  }
-  /**
-   * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection
-   *
-   * - `record` The first excess {@link IterableChangeRecord_}.
-   *
-   * @internal
-   */
-  _truncate(record) {
-    while (record !== null) {
-      const nextRecord = record._next;
-      this._addToRemovals(this._unlink(record));
-      record = nextRecord;
-    }
-    if (this._unlinkedRecords !== null) {
-      this._unlinkedRecords.clear();
-    }
-    if (this._additionsTail !== null) {
-      this._additionsTail._nextAdded = null;
-    }
-    if (this._movesTail !== null) {
-      this._movesTail._nextMoved = null;
-    }
-    if (this._itTail !== null) {
-      this._itTail._next = null;
-    }
-    if (this._removalsTail !== null) {
-      this._removalsTail._nextRemoved = null;
-    }
-    if (this._identityChangesTail !== null) {
-      this._identityChangesTail._nextIdentityChange = null;
-    }
-  }
-  /** @internal */
-  _reinsertAfter(record, prevRecord, index) {
-    if (this._unlinkedRecords !== null) {
-      this._unlinkedRecords.remove(record);
-    }
-    const prev = record._prevRemoved;
-    const next = record._nextRemoved;
-    if (prev === null) {
-      this._removalsHead = next;
-    } else {
-      prev._nextRemoved = next;
-    }
-    if (next === null) {
-      this._removalsTail = prev;
-    } else {
-      next._prevRemoved = prev;
-    }
-    this._insertAfter(record, prevRecord, index);
-    this._addToMoves(record, index);
-    return record;
-  }
-  /** @internal */
-  _moveAfter(record, prevRecord, index) {
-    this._unlink(record);
-    this._insertAfter(record, prevRecord, index);
-    this._addToMoves(record, index);
-    return record;
-  }
-  /** @internal */
-  _addAfter(record, prevRecord, index) {
-    this._insertAfter(record, prevRecord, index);
-    if (this._additionsTail === null) {
-      this._additionsTail = this._additionsHead = record;
-    } else {
-      this._additionsTail = this._additionsTail._nextAdded = record;
-    }
-    return record;
-  }
-  /** @internal */
-  _insertAfter(record, prevRecord, index) {
-    const next = prevRecord === null ? this._itHead : prevRecord._next;
-    record._next = next;
-    record._prev = prevRecord;
-    if (next === null) {
-      this._itTail = record;
-    } else {
-      next._prev = record;
-    }
-    if (prevRecord === null) {
-      this._itHead = record;
-    } else {
-      prevRecord._next = record;
-    }
-    if (this._linkedRecords === null) {
-      this._linkedRecords = new _DuplicateMap();
-    }
-    this._linkedRecords.put(record);
-    record.currentIndex = index;
-    return record;
-  }
-  /** @internal */
-  _remove(record) {
-    return this._addToRemovals(this._unlink(record));
-  }
-  /** @internal */
-  _unlink(record) {
-    if (this._linkedRecords !== null) {
-      this._linkedRecords.remove(record);
-    }
-    const prev = record._prev;
-    const next = record._next;
-    if (prev === null) {
-      this._itHead = next;
-    } else {
-      prev._next = next;
-    }
-    if (next === null) {
-      this._itTail = prev;
-    } else {
-      next._prev = prev;
-    }
-    return record;
-  }
-  /** @internal */
-  _addToMoves(record, toIndex) {
-    if (record.previousIndex === toIndex) {
-      return record;
-    }
-    if (this._movesTail === null) {
-      this._movesTail = this._movesHead = record;
-    } else {
-      this._movesTail = this._movesTail._nextMoved = record;
-    }
-    return record;
-  }
-  _addToRemovals(record) {
-    if (this._unlinkedRecords === null) {
-      this._unlinkedRecords = new _DuplicateMap();
-    }
-    this._unlinkedRecords.put(record);
-    record.currentIndex = null;
-    record._nextRemoved = null;
-    if (this._removalsTail === null) {
-      this._removalsTail = this._removalsHead = record;
-      record._prevRemoved = null;
-    } else {
-      record._prevRemoved = this._removalsTail;
-      this._removalsTail = this._removalsTail._nextRemoved = record;
-    }
-    return record;
-  }
-  /** @internal */
-  _addIdentityChange(record, item) {
-    record.item = item;
-    if (this._identityChangesTail === null) {
-      this._identityChangesTail = this._identityChangesHead = record;
-    } else {
-      this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
-    }
-    return record;
-  }
-};
-var IterableChangeRecord_ = class {
-  item;
-  trackById;
-  currentIndex = null;
-  previousIndex = null;
-  /** @internal */
-  _nextPrevious = null;
-  /** @internal */
-  _prev = null;
-  /** @internal */
-  _next = null;
-  /** @internal */
-  _prevDup = null;
-  /** @internal */
-  _nextDup = null;
-  /** @internal */
-  _prevRemoved = null;
-  /** @internal */
-  _nextRemoved = null;
-  /** @internal */
-  _nextAdded = null;
-  /** @internal */
-  _nextMoved = null;
-  /** @internal */
-  _nextIdentityChange = null;
-  constructor(item, trackById) {
-    this.item = item;
-    this.trackById = trackById;
-  }
-};
-var _DuplicateItemRecordList = class {
-  /** @internal */
-  _head = null;
-  /** @internal */
-  _tail = null;
-  /**
-   * Append the record to the list of duplicates.
-   *
-   * Note: by design all records in the list of duplicates hold the same value in record.item.
-   */
-  add(record) {
-    if (this._head === null) {
-      this._head = this._tail = record;
-      record._nextDup = null;
-      record._prevDup = null;
-    } else {
-      this._tail._nextDup = record;
-      record._prevDup = this._tail;
-      record._nextDup = null;
-      this._tail = record;
-    }
-  }
-  // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and
-  // IterableChangeRecord_.currentIndex >= atOrAfterIndex
-  get(trackById, atOrAfterIndex) {
-    let record;
-    for (record = this._head; record !== null; record = record._nextDup) {
-      if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {
-        return record;
-      }
-    }
-    return null;
-  }
-  /**
-   * Remove one {@link IterableChangeRecord_} from the list of duplicates.
-   *
-   * Returns whether the list of duplicates is empty.
-   */
-  remove(record) {
-    const prev = record._prevDup;
-    const next = record._nextDup;
-    if (prev === null) {
-      this._head = next;
-    } else {
-      prev._nextDup = next;
-    }
-    if (next === null) {
-      this._tail = prev;
-    } else {
-      next._prevDup = prev;
-    }
-    return this._head === null;
-  }
-};
-var _DuplicateMap = class {
-  map = /* @__PURE__ */ new Map();
-  put(record) {
-    const key = record.trackById;
-    let duplicates = this.map.get(key);
-    if (!duplicates) {
-      duplicates = new _DuplicateItemRecordList();
-      this.map.set(key, duplicates);
-    }
-    duplicates.add(record);
-  }
-  /**
-   * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
-   * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
-   *
-   * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
-   * have any more `a`s needs to return the second `a`.
-   */
-  get(trackById, atOrAfterIndex) {
-    const key = trackById;
-    const recordList = this.map.get(key);
-    return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
-  }
-  /**
-   * Removes a {@link IterableChangeRecord_} from the list of duplicates.
-   *
-   * The list of duplicates also is removed from the map if it gets empty.
-   */
-  remove(record) {
-    const key = record.trackById;
-    const recordList = this.map.get(key);
-    if (recordList.remove(record)) {
-      this.map.delete(key);
-    }
-    return record;
-  }
-  get isEmpty() {
-    return this.map.size === 0;
-  }
-  clear() {
-    this.map.clear();
-  }
-};
-function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
-  const previousIndex = item.previousIndex;
-  if (previousIndex === null) return previousIndex;
-  let moveOffset = 0;
-  if (moveOffsets && previousIndex < moveOffsets.length) {
-    moveOffset = moveOffsets[previousIndex];
-  }
-  return previousIndex + addRemoveOffset + moveOffset;
-}
-var DefaultKeyValueDifferFactory = class {
-  constructor() {
-  }
-  supports(obj) {
-    return obj instanceof Map || isJsObject(obj);
-  }
-  create() {
-    return new DefaultKeyValueDiffer();
-  }
-};
-var DefaultKeyValueDiffer = class {
-  _records = /* @__PURE__ */ new Map();
-  _mapHead = null;
-  // _appendAfter is used in the check loop
-  _appendAfter = null;
-  _previousMapHead = null;
-  _changesHead = null;
-  _changesTail = null;
-  _additionsHead = null;
-  _additionsTail = null;
-  _removalsHead = null;
-  _removalsTail = null;
-  get isDirty() {
-    return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;
-  }
-  forEachItem(fn) {
-    let record;
-    for (record = this._mapHead; record !== null; record = record._next) {
-      fn(record);
-    }
-  }
-  forEachPreviousItem(fn) {
-    let record;
-    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
-      fn(record);
-    }
-  }
-  forEachChangedItem(fn) {
-    let record;
-    for (record = this._changesHead; record !== null; record = record._nextChanged) {
-      fn(record);
-    }
-  }
-  forEachAddedItem(fn) {
-    let record;
-    for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-      fn(record);
-    }
-  }
-  forEachRemovedItem(fn) {
-    let record;
-    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
-      fn(record);
-    }
-  }
-  diff(map2) {
-    if (!map2) {
-      map2 = /* @__PURE__ */ new Map();
-    } else if (!(map2 instanceof Map || isJsObject(map2))) {
-      throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(map2)}'. Only maps and objects are allowed`);
-    }
-    return this.check(map2) ? this : null;
-  }
-  onDestroy() {
-  }
-  /**
-   * Check the current state of the map vs the previous.
-   * The algorithm is optimised for when the keys do no change.
-   */
-  check(map2) {
-    this._reset();
-    let insertBefore = this._mapHead;
-    this._appendAfter = null;
-    this._forEach(map2, (value, key) => {
-      if (insertBefore && insertBefore.key === key) {
-        this._maybeAddToChanges(insertBefore, value);
-        this._appendAfter = insertBefore;
-        insertBefore = insertBefore._next;
-      } else {
-        const record = this._getOrCreateRecordForKey(key, value);
-        insertBefore = this._insertBeforeOrAppend(insertBefore, record);
-      }
-    });
-    if (insertBefore) {
-      if (insertBefore._prev) {
-        insertBefore._prev._next = null;
-      }
-      this._removalsHead = insertBefore;
-      for (let record = insertBefore; record !== null; record = record._nextRemoved) {
-        if (record === this._mapHead) {
-          this._mapHead = null;
-        }
-        this._records.delete(record.key);
-        record._nextRemoved = record._next;
-        record.previousValue = record.currentValue;
-        record.currentValue = null;
-        record._prev = null;
-        record._next = null;
-      }
-    }
-    if (this._changesTail) this._changesTail._nextChanged = null;
-    if (this._additionsTail) this._additionsTail._nextAdded = null;
-    return this.isDirty;
-  }
-  /**
-   * Inserts a record before `before` or append at the end of the list when `before` is null.
-   *
-   * Notes:
-   * - This method appends at `this._appendAfter`,
-   * - This method updates `this._appendAfter`,
-   * - The return value is the new value for the insertion pointer.
-   */
-  _insertBeforeOrAppend(before, record) {
-    if (before) {
-      const prev = before._prev;
-      record._next = before;
-      record._prev = prev;
-      before._prev = record;
-      if (prev) {
-        prev._next = record;
-      }
-      if (before === this._mapHead) {
-        this._mapHead = record;
-      }
-      this._appendAfter = before;
-      return before;
-    }
-    if (this._appendAfter) {
-      this._appendAfter._next = record;
-      record._prev = this._appendAfter;
-    } else {
-      this._mapHead = record;
-    }
-    this._appendAfter = record;
-    return null;
-  }
-  _getOrCreateRecordForKey(key, value) {
-    if (this._records.has(key)) {
-      const record2 = this._records.get(key);
-      this._maybeAddToChanges(record2, value);
-      const prev = record2._prev;
-      const next = record2._next;
-      if (prev) {
-        prev._next = next;
-      }
-      if (next) {
-        next._prev = prev;
-      }
-      record2._next = null;
-      record2._prev = null;
-      return record2;
-    }
-    const record = new KeyValueChangeRecord_(key);
-    this._records.set(key, record);
-    record.currentValue = value;
-    this._addToAdditions(record);
-    return record;
-  }
-  /** @internal */
-  _reset() {
-    if (this.isDirty) {
-      let record;
-      this._previousMapHead = this._mapHead;
-      for (record = this._previousMapHead; record !== null; record = record._next) {
-        record._nextPrevious = record._next;
-      }
-      for (record = this._changesHead; record !== null; record = record._nextChanged) {
-        record.previousValue = record.currentValue;
-      }
-      for (record = this._additionsHead; record != null; record = record._nextAdded) {
-        record.previousValue = record.currentValue;
-      }
-      this._changesHead = this._changesTail = null;
-      this._additionsHead = this._additionsTail = null;
-      this._removalsHead = null;
-    }
-  }
-  // Add the record or a given key to the list of changes only when the value has actually changed
-  _maybeAddToChanges(record, newValue) {
-    if (!Object.is(newValue, record.currentValue)) {
-      record.previousValue = record.currentValue;
-      record.currentValue = newValue;
-      this._addToChanges(record);
-    }
-  }
-  _addToAdditions(record) {
-    if (this._additionsHead === null) {
-      this._additionsHead = this._additionsTail = record;
-    } else {
-      this._additionsTail._nextAdded = record;
-      this._additionsTail = record;
-    }
-  }
-  _addToChanges(record) {
-    if (this._changesHead === null) {
-      this._changesHead = this._changesTail = record;
-    } else {
-      this._changesTail._nextChanged = record;
-      this._changesTail = record;
-    }
-  }
-  /** @internal */
-  _forEach(obj, fn) {
-    if (obj instanceof Map) {
-      obj.forEach(fn);
-    } else {
-      Object.keys(obj).forEach((k) => fn(obj[k], k));
-    }
-  }
-};
-var KeyValueChangeRecord_ = class {
-  key;
-  previousValue = null;
-  currentValue = null;
-  /** @internal */
-  _nextPrevious = null;
-  /** @internal */
-  _next = null;
-  /** @internal */
-  _prev = null;
-  /** @internal */
-  _nextAdded = null;
-  /** @internal */
-  _nextRemoved = null;
-  /** @internal */
-  _nextChanged = null;
-  constructor(key) {
-    this.key = key;
-  }
-};
-function defaultIterableDiffersFactory() {
-  return new IterableDiffers([new DefaultIterableDifferFactory()]);
-}
-var IterableDiffers = class _IterableDiffers {
-  factories;
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _IterableDiffers,
-      providedIn: "root",
-      factory: defaultIterableDiffersFactory
-    })
-  );
-  constructor(factories) {
-    this.factories = factories;
-  }
-  static create(factories, parent) {
-    if (parent != null) {
-      const copied = parent.factories.slice();
-      factories = factories.concat(copied);
-    }
-    return new _IterableDiffers(factories);
-  }
-  /**
-   * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the
-   * inherited {@link IterableDiffers} instance with the provided factories and return a new
-   * {@link IterableDiffers} instance.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example shows how to extend an existing list of factories,
-   * which will only be applied to the injector for this component and its children.
-   * This step is all that's required to make a new {@link IterableDiffer} available.
-   *
-   * ```
-   * @Component({
-   *   viewProviders: [
-   *     IterableDiffers.extend([new ImmutableListDiffer()])
-   *   ]
-   * })
-   * ```
-   */
-  static extend(factories) {
-    return {
-      provide: _IterableDiffers,
-      useFactory: (parent) => {
-        return _IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());
-      },
-      // Dependency technically isn't optional, but we can provide a better error message this way.
-      deps: [[_IterableDiffers, new SkipSelf(), new Optional()]]
-    };
-  }
-  find(iterable) {
-    const factory = this.factories.find((f) => f.supports(iterable));
-    if (factory != null) {
-      return factory;
-    } else {
-      throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);
-    }
-  }
-};
-function getTypeNameForDebugging(type) {
-  return type["name"] || typeof type;
-}
-function defaultKeyValueDiffersFactory() {
-  return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);
-}
-var KeyValueDiffers = class _KeyValueDiffers {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _KeyValueDiffers,
-      providedIn: "root",
-      factory: defaultKeyValueDiffersFactory
-    })
-  );
-  factories;
-  constructor(factories) {
-    this.factories = factories;
-  }
-  static create(factories, parent) {
-    if (parent) {
-      const copied = parent.factories.slice();
-      factories = factories.concat(copied);
-    }
-    return new _KeyValueDiffers(factories);
-  }
-  /**
-   * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the
-   * inherited {@link KeyValueDiffers} instance with the provided factories and return a new
-   * {@link KeyValueDiffers} instance.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example shows how to extend an existing list of factories,
-   * which will only be applied to the injector for this component and its children.
-   * This step is all that's required to make a new {@link KeyValueDiffer} available.
-   *
-   * ```
-   * @Component({
-   *   viewProviders: [
-   *     KeyValueDiffers.extend([new ImmutableMapDiffer()])
-   *   ]
-   * })
-   * ```
-   */
-  static extend(factories) {
-    return {
-      provide: _KeyValueDiffers,
-      useFactory: (parent) => {
-        return _KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());
-      },
-      // Dependency technically isn't optional, but we can provide a better error message this way.
-      deps: [[_KeyValueDiffers, new SkipSelf(), new Optional()]]
-    };
-  }
-  find(kv) {
-    const factory = this.factories.find((f) => f.supports(kv));
-    if (factory) {
-      return factory;
-    }
-    throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${kv}'`);
-  }
-};
-var keyValDiff = [new DefaultKeyValueDifferFactory()];
-var iterableDiff = [new DefaultIterableDifferFactory()];
-var defaultIterableDiffers = new IterableDiffers(iterableDiff);
-var defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
-var platformCore = createPlatformFactory(null, "core", []);
-var ApplicationModule = class _ApplicationModule {
-  // Inject ApplicationRef to make it eager...
-  constructor(appRef) {
-  }
-  static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationModule)(ɵɵinject(ApplicationRef));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _ApplicationModule
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
-    type: NgModule
-  }], () => [{
-    type: ApplicationRef
-  }], null);
-})();
-function defaultEquals2(a, b) {
-  return Object.is(a, b);
-}
-var activeConsumer2 = null;
-var SIGNAL2 = Symbol("SIGNAL");
-function setActiveConsumer2(consumer) {
-  const prev = activeConsumer2;
-  activeConsumer2 = consumer;
-  return prev;
-}
-var REACTIVE_NODE2 = {
-  version: 0,
-  lastCleanEpoch: 0,
-  dirty: false,
-  producerNode: void 0,
-  producerLastReadVersion: void 0,
-  producerIndexOfThis: void 0,
-  nextProducerIndex: 0,
-  liveConsumerNode: void 0,
-  liveConsumerIndexOfThis: void 0,
-  consumerAllowSignalWrites: false,
-  consumerIsAlwaysLive: false,
-  producerMustRecompute: () => false,
-  producerRecomputeValue: () => {
-  },
-  consumerMarkedDirty: () => {
-  },
-  consumerOnSignalRead: () => {
-  }
-};
-function consumerBeforeComputation2(node) {
-  node && (node.nextProducerIndex = 0);
-  return setActiveConsumer2(node);
-}
-function consumerAfterComputation2(node, prevConsumer) {
-  setActiveConsumer2(prevConsumer);
-  if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {
-    return;
-  }
-  if (consumerIsLive2(node)) {
-    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex2(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  while (node.producerNode.length > node.nextProducerIndex) {
-    node.producerNode.pop();
-    node.producerLastReadVersion.pop();
-    node.producerIndexOfThis.pop();
-  }
-}
-function producerRemoveLiveConsumerAtIndex2(node, idx) {
-  assertProducerNode2(node);
-  if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) {
-    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
-  }
-  if (node.liveConsumerNode.length === 1 && isConsumerNode2(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex2(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  const lastIdx = node.liveConsumerNode.length - 1;
-  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
-  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
-  node.liveConsumerNode.length--;
-  node.liveConsumerIndexOfThis.length--;
-  if (idx < node.liveConsumerNode.length) {
-    const idxProducer = node.liveConsumerIndexOfThis[idx];
-    const consumer = node.liveConsumerNode[idx];
-    assertConsumerNode2(consumer);
-    consumer.producerIndexOfThis[idxProducer] = idx;
-  }
-}
-function consumerIsLive2(node) {
-  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
-}
-function assertConsumerNode2(node) {
-  node.producerNode ??= [];
-  node.producerIndexOfThis ??= [];
-  node.producerLastReadVersion ??= [];
-}
-function assertProducerNode2(node) {
-  node.liveConsumerNode ??= [];
-  node.liveConsumerIndexOfThis ??= [];
-}
-function isConsumerNode2(node) {
-  return node.producerNode !== void 0;
-}
-var UNSET$1 = Symbol("UNSET");
-var COMPUTING$1 = Symbol("COMPUTING");
-var ERRORED$1 = Symbol("ERRORED");
-var COMPUTED_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    value: UNSET$1,
-    dirty: true,
-    error: null,
-    equal: defaultEquals2,
-    producerMustRecompute(node) {
-      return node.value === UNSET$1 || node.value === COMPUTING$1;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING$1) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING$1;
-      const prevConsumer = consumerBeforeComputation2(node);
-      let newValue;
-      try {
-        newValue = node.computation();
-      } catch (err) {
-        newValue = ERRORED$1;
-        node.error = err;
-      } finally {
-        consumerAfterComputation2(node, prevConsumer);
-      }
-      if (oldValue !== UNSET$1 && oldValue !== ERRORED$1 && newValue !== ERRORED$1 && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-var SIGNAL_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    equal: defaultEquals2,
-    value: void 0
-  });
-})();
-var NOOP_CLEANUP_FN2 = () => {
-};
-var WATCH_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    consumerIsAlwaysLive: true,
-    consumerAllowSignalWrites: false,
-    consumerMarkedDirty: (node) => {
-      if (node.schedule !== null) {
-        node.schedule(node.ref);
-      }
-    },
-    hasRun: false,
-    cleanupFn: NOOP_CLEANUP_FN2
-  });
-})();
-function setAlternateWeakRefImpl(impl) {
-}
-function internalCreateApplication(config2) {
-  try {
-    const {
-      rootComponent,
-      appProviders,
-      platformProviders
-    } = config2;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && rootComponent !== void 0) {
-      assertStandaloneComponentType(rootComponent);
-    }
-    const platformInjector = createOrReusePlatformInjector(platformProviders);
-    const allAppProviders = [internalProvideZoneChangeDetection({}), {
-      provide: ChangeDetectionScheduler,
-      useExisting: ChangeDetectionSchedulerImpl
-    }, ...appProviders || []];
-    const adapter = new EnvironmentNgModuleRefAdapter({
-      providers: allAppProviders,
-      parent: platformInjector,
-      debugName: typeof ngDevMode === "undefined" || ngDevMode ? "Environment Injector" : "",
-      // We skip environment initializers because we need to run them inside the NgZone, which
-      // happens after we get the NgZone instance from the Injector.
-      runEnvironmentInitializers: false
-    });
-    return bootstrap({
-      r3Injector: adapter.injector,
-      platformInjector,
-      rootComponent
-    });
-  } catch (e) {
-    return Promise.reject(e);
-  }
-}
-function getDeferBlocks(lView, deferBlocks) {
-  const tView = lView[TVIEW];
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    if (isLContainer(lView[i])) {
-      const lContainer = lView[i];
-      const isLast = i === tView.bindingStartIndex - 1;
-      if (!isLast) {
-        const tNode = tView.data[i];
-        const tDetails = getTDeferBlockDetails(tView, tNode);
-        if (isTDeferBlockDetails(tDetails)) {
-          deferBlocks.push({
-            lContainer,
-            lView,
-            tNode,
-            tDetails
-          });
-          continue;
-        }
-      }
-      for (let i2 = CONTAINER_HEADER_OFFSET; i2 < lContainer.length; i2++) {
-        getDeferBlocks(lContainer[i2], deferBlocks);
-      }
-    } else if (isLView(lView[i])) {
-      getDeferBlocks(lView[i], deferBlocks);
-    }
-  }
-}
-var appsWithEventReplay = /* @__PURE__ */ new WeakSet();
-var EAGER_CONTENT_LISTENERS_KEY = "";
-var blockEventQueue = [];
-function shouldEnableEventReplay(injector) {
-  return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
-}
-function withEventReplay() {
-  const providers = [{
-    provide: IS_EVENT_REPLAY_ENABLED,
-    useFactory: () => {
-      let isEnabled = true;
-      if (true) {
-        const appId = inject(APP_ID);
-        isEnabled = !!window._ejsas?.[appId];
-      }
-      if (isEnabled) {
-        performanceMarkFeature("NgEventReplay");
-      }
-      return isEnabled;
-    }
-  }];
-  if (true) {
-    providers.push({
-      provide: ENVIRONMENT_INITIALIZER,
-      useValue: () => {
-        const injector = inject(Injector);
-        const appRef = injector.get(ApplicationRef);
-        if (!appsWithEventReplay.has(appRef)) {
-          const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
-          if (shouldEnableEventReplay(injector)) {
-            setStashFn((rEl, eventName, listenerFn) => {
-              sharedStashFunction(rEl, eventName, listenerFn);
-              sharedMapFunction(rEl, jsActionMap);
-            });
-          }
-        }
-      },
-      multi: true
-    }, {
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        const injector = inject(Injector);
-        const appRef = inject(ApplicationRef);
-        return () => {
-          if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {
-            return;
-          }
-          appsWithEventReplay.add(appRef);
-          appRef.onDestroy(() => appsWithEventReplay.delete(appRef));
-          appRef.whenStable().then(() => {
-            const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
-            initEventReplay(eventContractDetails, injector);
-            const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
-            jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);
-            jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);
-            const eventContract = eventContractDetails.instance;
-            if (isIncrementalHydrationEnabled(injector)) {
-              appRef.onDestroy(() => eventContract.cleanUp());
-            } else {
-              eventContract.cleanUp();
-            }
-          });
-        };
-      },
-      multi: true
-    });
-  }
-  return providers;
-}
-var initEventReplay = (eventDelegation, injector) => {
-  const appId = injector.get(APP_ID);
-  const earlyJsactionData = window._ejsas[appId];
-  const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));
-  for (const et of earlyJsactionData.et) {
-    eventContract.addEvent(et);
-  }
-  for (const et of earlyJsactionData.etc) {
-    eventContract.addEvent(et);
-  }
-  const eventInfos = getAppScopedQueuedEventInfos(appId);
-  eventContract.replayEarlyEventInfos(eventInfos);
-  clearAppScopedEarlyEventContract(appId);
-  const dispatcher = new EventDispatcher((event) => {
-    invokeRegisteredReplayListeners(injector, event, event.currentTarget);
-  });
-  registerDispatcher$1(eventContract, dispatcher);
-};
-function collectDomEventsInfo(tView, lView, eventTypesToReplay) {
-  const domEventsInfo = /* @__PURE__ */ new Map();
-  const lCleanup = lView[CLEANUP];
-  const tCleanup = tView.cleanup;
-  if (!tCleanup || !lCleanup) {
-    return domEventsInfo;
-  }
-  for (let i = 0; i < tCleanup.length; ) {
-    const firstParam = tCleanup[i++];
-    const secondParam = tCleanup[i++];
-    if (typeof firstParam !== "string") {
-      continue;
-    }
-    const eventType = firstParam;
-    if (!isEarlyEventType(eventType)) {
-      continue;
-    }
-    if (isCaptureEventType(eventType)) {
-      eventTypesToReplay.capture.add(eventType);
-    } else {
-      eventTypesToReplay.regular.add(eventType);
-    }
-    const listenerElement = unwrapRNode(lView[secondParam]);
-    i++;
-    const useCaptureOrIndx = tCleanup[i++];
-    const isDomEvent = typeof useCaptureOrIndx === "boolean" || useCaptureOrIndx >= 0;
-    if (!isDomEvent) {
-      continue;
-    }
-    if (!domEventsInfo.has(listenerElement)) {
-      domEventsInfo.set(listenerElement, [eventType]);
-    } else {
-      domEventsInfo.get(listenerElement).push(eventType);
-    }
-  }
-  return domEventsInfo;
-}
-function invokeRegisteredReplayListeners(injector, event, currentTarget) {
-  const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? "";
-  if (/d\d+/.test(blockName)) {
-    hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);
-  } else if (event.eventPhase === EventPhase.REPLAY) {
-    invokeListeners(event, currentTarget);
-  }
-}
-function hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {
-  blockEventQueue.push({
-    event,
-    currentTarget
-  });
-  triggerHydrationFromBlockName(injector, blockName, replayQueuedBlockEvents);
-}
-function replayQueuedBlockEvents(hydratedBlocks) {
-  const queue2 = [...blockEventQueue];
-  const hydrated = new Set(hydratedBlocks);
-  blockEventQueue = [];
-  for (let {
-    event,
-    currentTarget
-  } of queue2) {
-    const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);
-    if (hydrated.has(blockName)) {
-      invokeListeners(event, currentTarget);
-    } else {
-      blockEventQueue.push({
-        event,
-        currentTarget
-      });
-    }
-  }
-}
-var SerializedViewCollection = class {
-  views = [];
-  indexByContent = /* @__PURE__ */ new Map();
-  add(serializedView) {
-    const viewAsString = JSON.stringify(serializedView);
-    if (!this.indexByContent.has(viewAsString)) {
-      const index = this.views.length;
-      this.views.push(serializedView);
-      this.indexByContent.set(viewAsString, index);
-      return index;
-    }
-    return this.indexByContent.get(viewAsString);
-  }
-  getAll() {
-    return this.views;
-  }
-};
-var tViewSsrId = 0;
-function getSsrId(tView) {
-  if (!tView.ssrId) {
-    tView.ssrId = `t${tViewSsrId++}`;
-  }
-  return tView.ssrId;
-}
-function calcNumRootNodes(tView, lView, tNode) {
-  const rootNodes = [];
-  collectNativeNodes(tView, lView, tNode, rootNodes);
-  return rootNodes.length;
-}
-function calcNumRootNodesInLContainer(lContainer) {
-  const rootNodes = [];
-  collectNativeNodesInLContainer(lContainer, rootNodes);
-  return rootNodes.length;
-}
-function annotateComponentLViewForHydration(lView, context2, injector) {
-  const hostElement = lView[HOST];
-  if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-    return annotateHostElementForHydration(hostElement, lView, null, context2);
-  }
-  return null;
-}
-function annotateLContainerForHydration(lContainer, context2, injector) {
-  const componentLView = unwrapLView(lContainer[HOST]);
-  const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context2, injector);
-  if (componentLViewNghIndex === null) {
-    return;
-  }
-  const hostElement = unwrapRNode(componentLView[HOST]);
-  const rootLView = lContainer[PARENT];
-  const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context2);
-  const renderer = componentLView[RENDERER];
-  const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;
-  renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);
-}
-function annotateForHydration(appRef, doc) {
-  const injector = appRef.injector;
-  const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);
-  const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);
-  const serializedViewCollection = new SerializedViewCollection();
-  const corruptedTextNodes = /* @__PURE__ */ new Map();
-  const viewRefs = appRef._views;
-  const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
-  const eventTypesToReplay = {
-    regular: /* @__PURE__ */ new Set(),
-    capture: /* @__PURE__ */ new Set()
-  };
-  const deferBlocks = /* @__PURE__ */ new Map();
-  const appId = appRef.injector.get(APP_ID);
-  for (const viewRef of viewRefs) {
-    const lNode = getLNodeForHydration(viewRef);
-    if (lNode !== null) {
-      const context2 = {
-        serializedViewCollection,
-        corruptedTextNodes,
-        isI18nHydrationEnabled: isI18nHydrationEnabledVal,
-        isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,
-        i18nChildren: /* @__PURE__ */ new Map(),
-        eventTypesToReplay,
-        shouldReplayEvents,
-        appId,
-        deferBlocks
-      };
-      if (isLContainer(lNode)) {
-        annotateLContainerForHydration(lNode, context2, injector);
-      } else {
-        annotateComponentLViewForHydration(lNode, context2, injector);
-      }
-      insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
-    }
-  }
-  const serializedViews = serializedViewCollection.getAll();
-  const transferState = injector.get(TransferState);
-  transferState.set(NGH_DATA_KEY, serializedViews);
-  if (deferBlocks.size > 0) {
-    const blocks = {};
-    for (const [id, info] of deferBlocks.entries()) {
-      blocks[id] = info;
-    }
-    transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);
-  }
-  return eventTypesToReplay;
-}
-function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context2) {
-  const views = [];
-  let lastViewAsString = "";
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    let childLView = lContainer[i];
-    let template;
-    let numRootNodes;
-    let serializedView;
-    if (isRootView(childLView)) {
-      childLView = childLView[HEADER_OFFSET];
-      if (isLContainer(childLView)) {
-        numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
-        annotateLContainerForHydration(childLView, context2, lView[INJECTOR]);
-        const componentLView = unwrapLView(childLView[HOST]);
-        serializedView = {
-          [TEMPLATE_ID]: componentLView[TVIEW].ssrId,
-          [NUM_ROOT_NODES]: numRootNodes
-        };
-      }
-    }
-    if (!serializedView) {
-      const childTView = childLView[TVIEW];
-      if (childTView.type === 1) {
-        template = childTView.ssrId;
-        numRootNodes = 1;
-      } else {
-        template = getSsrId(childTView);
-        numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);
-      }
-      serializedView = {
-        [TEMPLATE_ID]: template,
-        [NUM_ROOT_NODES]: numRootNodes
-      };
-      let isHydrateNeverBlock = false;
-      if (isDeferBlock(lView[TVIEW], tNode)) {
-        const lDetails = getLDeferBlockDetails(lView, tNode);
-        const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-        if (context2.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {
-          const deferBlockId = `d${context2.deferBlocks.size}`;
-          if (tDetails.hydrateTriggers.has(
-            7
-            /* DeferBlockTrigger.Never */
-          )) {
-            isHydrateNeverBlock = true;
-          }
-          let rootNodes = [];
-          collectNativeNodesInLContainer(lContainer, rootNodes);
-          const deferBlockInfo = {
-            [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,
-            [NUM_ROOT_NODES]: rootNodes.length,
-            [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE]
-          };
-          const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);
-          if (serializedTriggers.length > 0) {
-            deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;
-          }
-          context2.deferBlocks.set(deferBlockId, deferBlockInfo);
-          const node = unwrapRNode(lContainer);
-          if (node !== void 0) {
-            if (node.nodeType === Node.COMMENT_NODE) {
-              annotateDeferBlockAnchorForHydration(node, deferBlockId);
-            }
-          } else {
-            ngDevMode && validateNodeExists(node, childLView, tNode);
-            ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);
-            annotateDeferBlockAnchorForHydration(node, deferBlockId);
-          }
-          if (!isHydrateNeverBlock) {
-            annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context2);
-          }
-          parentDeferBlockId = deferBlockId;
-          serializedView[DEFER_BLOCK_ID] = deferBlockId;
-        }
-        serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];
-      }
-      if (!isHydrateNeverBlock) {
-        Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context2));
-      }
-    }
-    const currentViewAsString = JSON.stringify(serializedView);
-    if (views.length > 0 && currentViewAsString === lastViewAsString) {
-      const previousView = views[views.length - 1];
-      previousView[MULTIPLIER] ??= 1;
-      previousView[MULTIPLIER]++;
-    } else {
-      lastViewAsString = currentViewAsString;
-      views.push(serializedView);
-    }
-  }
-  return views;
-}
-function serializeHydrateTriggers(triggerMap) {
-  const serializableDeferBlockTrigger = /* @__PURE__ */ new Set([
-    0,
-    1,
-    2,
-    5
-    /* DeferBlockTrigger.Timer */
-  ]);
-  let triggers = [];
-  for (let [trigger, details] of triggerMap) {
-    if (serializableDeferBlockTrigger.has(trigger)) {
-      if (details === null) {
-        triggers.push(trigger);
-      } else {
-        triggers.push({
-          trigger,
-          delay: details.delay
-        });
-      }
-    }
-  }
-  return triggers;
-}
-function appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {
-  const noOffsetIndex = tNode.index - HEADER_OFFSET;
-  ngh[NODES] ??= {};
-  ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);
-}
-function appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {
-  const noOffsetIndex = typeof tNodeOrNoOffsetIndex === "number" ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;
-  ngh[DISCONNECTED_NODES] ??= [];
-  if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {
-    ngh[DISCONNECTED_NODES].push(noOffsetIndex);
-  }
-}
-function serializeLView(lView, parentDeferBlockId = null, context2) {
-  const ngh = {};
-  const tView = lView[TVIEW];
-  const i18nChildren = getOrComputeI18nChildren(tView, context2);
-  const nativeElementsToEventTypes = context2.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context2.eventTypesToReplay) : null;
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const tNode = tView.data[i];
-    const noOffsetIndex = i - HEADER_OFFSET;
-    const i18nData = trySerializeI18nBlock(lView, i, context2);
-    if (i18nData) {
-      ngh[I18N_DATA] ??= {};
-      ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;
-      for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {
-        appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);
-      }
-      for (const nodeNoOffsetIndex of i18nData.disjointNodes) {
-        const tNode2 = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];
-        ngDevMode && assertTNode(tNode2);
-        appendSerializedNodePath(ngh, tNode2, lView, i18nChildren);
-      }
-      continue;
-    }
-    if (!isTNodeShape(tNode)) {
-      continue;
-    }
-    if (isDetachedByI18n(tNode)) {
-      continue;
-    }
-    if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {
-      appendDisconnectedNodeIndex(ngh, tNode);
-      continue;
-    }
-    if (Array.isArray(tNode.projection)) {
-      for (const projectionHeadTNode of tNode.projection) {
-        if (!projectionHeadTNode) continue;
-        if (!Array.isArray(projectionHeadTNode)) {
-          if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {
-            if (isDisconnectedNode(projectionHeadTNode, lView)) {
-              appendDisconnectedNodeIndex(ngh, projectionHeadTNode);
-            } else {
-              appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);
-            }
-          }
-        } else {
-          throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));
-        }
-      }
-    }
-    conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);
-    if (isLContainer(lView[i])) {
-      const embeddedTView = tNode.tView;
-      if (embeddedTView !== null) {
-        ngh[TEMPLATES] ??= {};
-        ngh[TEMPLATES][noOffsetIndex] = getSsrId(embeddedTView);
-      }
-      const hostNode = lView[i][HOST];
-      if (Array.isArray(hostNode)) {
-        const targetNode = unwrapRNode(hostNode);
-        if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-          annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context2);
-        }
-      }
-      ngh[CONTAINERS] ??= {};
-      ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context2);
-    } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {
-      const targetNode = unwrapRNode(lView[i][HOST]);
-      if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-        annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context2);
-      }
-    } else {
-      if (tNode.type & 8) {
-        ngh[ELEMENT_CONTAINERS] ??= {};
-        ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);
-      } else if (tNode.type & (16 | 128)) {
-        let nextTNode = tNode.next;
-        while (nextTNode !== null && nextTNode.type & (16 | 128)) {
-          nextTNode = nextTNode.next;
-        }
-        if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {
-          appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);
-        }
-      } else if (tNode.type & 1) {
-        const rNode = unwrapRNode(lView[i]);
-        processTextNodeBeforeSerialization(context2, rNode);
-      }
-    }
-    if (nativeElementsToEventTypes && tNode.type & 2) {
-      const nativeElement = unwrapRNode(lView[i]);
-      if (nativeElementsToEventTypes.has(nativeElement)) {
-        setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);
-      }
-    }
-  }
-  return ngh;
-}
-function conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {
-  if (isProjectionTNode(tNode)) {
-    return;
-  }
-  if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {
-    appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);
-  }
-  if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {
-    appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);
-  }
-}
-function componentUsesShadowDomEncapsulation(lView) {
-  const instance = lView[CONTEXT];
-  return instance?.constructor ? getComponentDef(instance.constructor)?.encapsulation === ViewEncapsulation.ShadowDom : false;
-}
-function annotateHostElementForHydration(element, lView, parentDeferBlockId, context2) {
-  const renderer = lView[RENDERER];
-  if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {
-    renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, "");
-    return null;
-  } else {
-    const ngh = serializeLView(lView, parentDeferBlockId, context2);
-    const index = context2.serializedViewCollection.add(ngh);
-    renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());
-    return index;
-  }
-}
-function annotateDeferBlockAnchorForHydration(comment, deferBlockId) {
-  comment.textContent = `ngh=${deferBlockId}`;
-}
-function insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {
-  for (const [textNode, marker] of corruptedTextNodes) {
-    textNode.after(doc.createComment(marker));
-  }
-}
-function isContentProjectedNode(tNode) {
-  let currentTNode = tNode;
-  while (currentTNode != null) {
-    if (isComponentHost(currentTNode)) {
-      return true;
-    }
-    currentTNode = currentTNode.parent;
-  }
-  return false;
-}
-function annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context2) {
-  const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);
-  for (let et of actionList) {
-    context2.eventTypesToReplay.regular.add(et);
-  }
-  if (actionList.length > 0) {
-    const elementNodes = rootNodes.filter((rn) => rn.nodeType === Node.ELEMENT_NODE);
-    for (let rNode of elementNodes) {
-      setJSActionAttributes(rNode, actionList, parentDeferBlockId);
-    }
-  }
-}
-var isHydrationSupportEnabled = false;
-var isI18nHydrationRuntimeSupportEnabled = false;
-var isIncrementalHydrationRuntimeSupportEnabled = false;
-var APPLICATION_IS_STABLE_TIMEOUT = 1e4;
-function enableHydrationRuntimeSupport() {
-  if (!isHydrationSupportEnabled) {
-    isHydrationSupportEnabled = true;
-    enableRetrieveHydrationInfoImpl();
-    enableLocateOrCreateElementNodeImpl();
-    enableLocateOrCreateTextNodeImpl();
-    enableLocateOrCreateElementContainerNodeImpl();
-    enableLocateOrCreateContainerAnchorImpl();
-    enableLocateOrCreateContainerRefImpl();
-    enableFindMatchingDehydratedViewImpl();
-    enableApplyRootElementTransformImpl();
-  }
-}
-function enableI18nHydrationRuntimeSupport() {
-  if (!isI18nHydrationRuntimeSupportEnabled) {
-    isI18nHydrationRuntimeSupportEnabled = true;
-    enableLocateOrCreateI18nNodeImpl();
-    enablePrepareI18nBlockForHydrationImpl();
-    enableClaimDehydratedIcuCaseImpl();
-  }
-}
-function enableIncrementalHydrationRuntimeSupport() {
-  if (!isIncrementalHydrationRuntimeSupportEnabled) {
-    isIncrementalHydrationRuntimeSupportEnabled = true;
-    enableRetrieveDeferBlockDataImpl();
-  }
-}
-function printHydrationStats(injector) {
-  const console2 = injector.get(Console);
-  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) and ${ngDevMode.hydratedNodes} node(s), ${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : "") + `Learn more at https://angular.dev/guide/hydration.`;
-  console2.log(message);
-}
-function whenStableWithTimeout(appRef, injector) {
-  const whenStablePromise = appRef.whenStable();
-  if (typeof ngDevMode !== "undefined" && ngDevMode) {
-    const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;
-    const console2 = injector.get(Console);
-    const ngZone = injector.get(NgZone);
-    const timeoutId = ngZone.runOutsideAngular(() => {
-      return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console2), timeoutTime);
-    });
-    whenStablePromise.finally(() => clearTimeout(timeoutId));
-  }
-  return whenStablePromise;
-}
-var CLIENT_RENDER_MODE_FLAG = "ngcm";
-function isClientRenderModeEnabled() {
-  const doc = getDocument();
-  return doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);
-}
-function withDomHydration() {
-  const providers = [{
-    provide: IS_HYDRATION_DOM_REUSE_ENABLED,
-    useFactory: () => {
-      let isEnabled = true;
-      if (true) {
-        const transferState = inject(TransferState, {
-          optional: true
-        });
-        isEnabled = !!transferState?.get(NGH_DATA_KEY, null);
-      }
-      if (isEnabled) {
-        performanceMarkFeature("NgHydration");
-      }
-      return isEnabled;
-    }
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      setIsI18nHydrationSupportEnabled(false);
-      if (false) {
-        return;
-      }
-      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-        verifySsrContentsIntegrity();
-        enableHydrationRuntimeSupport();
-      } else if (typeof ngDevMode !== "undefined" && ngDevMode && !isClientRenderModeEnabled()) {
-        const console2 = inject(Console);
-        const message = formatRuntimeError(-505, "Angular hydration was requested on the client, but there was no serialized information present in the server response, thus hydration was not enabled. Make sure the `provideClientHydration()` is included into the list of providers in the server part of the application configuration.");
-        console2.warn(message);
-      }
-    },
-    multi: true
-  }];
-  if (true) {
-    providers.push({
-      provide: PRESERVE_HOST_CONTENT,
-      useFactory: () => {
-        return inject(IS_HYDRATION_DOM_REUSE_ENABLED);
-      }
-    }, {
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-          const appRef = inject(ApplicationRef);
-          const injector = inject(Injector);
-          return () => {
-            whenStableWithTimeout(appRef, injector).then(() => {
-              cleanupDehydratedViews(appRef);
-              if (typeof ngDevMode !== "undefined" && ngDevMode) {
-                countBlocksSkippedByHydration(injector);
-                printHydrationStats(injector);
-              }
-            });
-          };
-        }
-        return () => {
-        };
-      },
-      multi: true
-    });
-  }
-  return makeEnvironmentProviders(providers);
-}
-function withI18nSupport() {
-  return [{
-    provide: IS_I18N_HYDRATION_ENABLED,
-    useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-        enableI18nHydrationRuntimeSupport();
-        setIsI18nHydrationSupportEnabled(true);
-        performanceMarkFeature("NgI18nHydration");
-      }
-    },
-    multi: true
-  }];
-}
-function withIncrementalHydration() {
-  const providers = [withEventReplay(), {
-    provide: IS_INCREMENTAL_HYDRATION_ENABLED,
-    useValue: true
-  }, {
-    provide: DEHYDRATED_BLOCK_REGISTRY,
-    useClass: DehydratedBlockRegistry
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      enableIncrementalHydrationRuntimeSupport();
-      performanceMarkFeature("NgIncrementalHydration");
-    },
-    multi: true
-  }];
-  if (true) {
-    providers.push({
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        const injector = inject(Injector);
-        const doc = getDocument();
-        return () => {
-          const deferBlockData = processBlockData(injector);
-          const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);
-          processAndInitTriggers(injector, deferBlockData, commentsByBlockId);
-          appendDeferBlocksToJSActionMap(doc, injector);
-        };
-      },
-      multi: true
-    });
-  }
-  return providers;
-}
-function logWarningOnStableTimedout(time, console2) {
-  const message = `Angular hydration expected the ApplicationRef.isStable() to emit \`true\`, but it didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable as a signal to complete hydration process.`;
-  console2.warn(formatRuntimeError(-506, message));
-}
-function verifySsrContentsIntegrity() {
-  const doc = getDocument();
-  let hydrationMarker;
-  for (const node of doc.body.childNodes) {
-    if (node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {
-      hydrationMarker = node;
-      break;
-    }
-  }
-  if (!hydrationMarker) {
-    throw new RuntimeError(-507, typeof ngDevMode !== "undefined" && ngDevMode && "Angular hydration logic detected that HTML content of this page was modified after it was produced during server side rendering. Make sure that there are no optimizations that remove comment nodes from HTML enabled on your CDN. Angular hydration relies on HTML produced by the server, including whitespaces and comment nodes.");
-  }
-}
-function booleanAttribute(value) {
-  return typeof value === "boolean" ? value : value != null && value !== "false";
-}
-function numberAttribute(value, fallbackValue = NaN) {
-  const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));
-  return isNumberValue ? Number(value) : fallbackValue;
-}
-var PERFORMANCE_MARK_PREFIX = "🅰️";
-var enablePerfLogging = false;
-function startMeasuring(label) {
-  if (!enablePerfLogging) {
-    return;
-  }
-  const {
-    startLabel
-  } = labels(label);
-  performance.mark(startLabel);
-}
-function stopMeasuring(label) {
-  if (!enablePerfLogging) {
-    return;
-  }
-  const {
-    startLabel,
-    labelName,
-    endLabel
-  } = labels(label);
-  performance.mark(endLabel);
-  performance.measure(labelName, startLabel, endLabel);
-  performance.clearMarks(startLabel);
-  performance.clearMarks(endLabel);
-}
-function labels(label) {
-  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;
-  return {
-    labelName,
-    startLabel: `start:${labelName}`,
-    endLabel: `end:${labelName}`
-  };
-}
-var warningLogged = false;
-function enableProfiling() {
-  if (!warningLogged && (typeof performance === "undefined" || !performance.mark || !performance.measure)) {
-    warningLogged = true;
-    console.warn("Performance API is not supported on this platform");
-    return;
-  }
-  enablePerfLogging = true;
-}
-function disableProfiling() {
-  enablePerfLogging = false;
-}
-function getClosestComponentName(node) {
-  let currentNode = node;
-  while (currentNode) {
-    const lView = readPatchedLView(currentNode);
-    if (lView !== null) {
-      for (let i = HEADER_OFFSET; i < lView.length; i++) {
-        const current = lView[i];
-        if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {
-          continue;
-        }
-        const tView = lView[TVIEW];
-        const tNode = getTNode(tView, i);
-        if (isComponentHost(tNode)) {
-          const def = tView.data[tNode.directiveStart + tNode.componentOffset];
-          const name = def.debugInfo?.className || def.type.name;
-          if (name) {
-            return name;
-          } else {
-            break;
-          }
-        }
-      }
-    }
-    currentNode = currentNode.parentNode;
-  }
-  return null;
-}
-function ɵɵngDeclareDirective(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "directive",
-    type: decl.type
-  });
-  return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
-}
-function ɵɵngDeclareClassMetadata(decl) {
-  setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);
-}
-function ɵɵngDeclareClassMetadataAsync(decl) {
-  setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {
-    const meta = decl.resolveMetadata(...types);
-    setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);
-  });
-}
-function ɵɵngDeclareComponent(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "component",
-    type: decl.type
-  });
-  return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);
-}
-function ɵɵngDeclareFactory(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: getFactoryKind(decl.target),
-    type: decl.type
-  });
-  return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
-}
-function getFactoryKind(target) {
-  switch (target) {
-    case FactoryTarget.Directive:
-      return "directive";
-    case FactoryTarget.Component:
-      return "component";
-    case FactoryTarget.Injectable:
-      return "injectable";
-    case FactoryTarget.Pipe:
-      return "pipe";
-    case FactoryTarget.NgModule:
-      return "NgModule";
-  }
-}
-function ɵɵngDeclareInjectable(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "injectable",
-    type: decl.type
-  });
-  return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);
-}
-function ɵɵngDeclareInjector(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "NgModule",
-    type: decl.type
-  });
-  return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);
-}
-function ɵɵngDeclareNgModule(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "NgModule",
-    type: decl.type
-  });
-  return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);
-}
-function ɵɵngDeclarePipe(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "pipe",
-    type: decl.type
-  });
-  return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
-}
-function computed(computation, options) {
-  performanceMarkFeature("NgSignals");
-  const getter = createComputed(computation);
-  if (options?.equal) {
-    getter[SIGNAL].equal = options.equal;
-  }
-  if (ngDevMode) {
-    getter.toString = () => `[Computed: ${getter()}]`;
-    getter[SIGNAL].debugName = options?.debugName;
-  }
-  return getter;
-}
-var identityFn = (v) => v;
-function createLinkedSignal(node) {
-  const linkedSignalGetter = () => {
-    producerUpdateValueVersion(node);
-    producerAccessed(node);
-    if (node.value === ERRORED2) {
-      throw node.error;
-    }
-    return node.value;
-  };
-  const getter = linkedSignalGetter;
-  getter[SIGNAL] = node;
-  if (ngDevMode) {
-    getter.toString = () => `[LinkedSignal: ${getter()}]`;
-  }
-  getter.set = (newValue) => {
-    producerUpdateValueVersion(node);
-    signalSetFn(node, newValue);
-    producerMarkClean(node);
-  };
-  getter.update = (updateFn) => {
-    producerUpdateValueVersion(node);
-    signalUpdateFn(node, updateFn);
-    producerMarkClean(node);
-  };
-  getter.asReadonly = signalAsReadonlyFn.bind(getter);
-  return getter;
-}
-function linkedSignal(optionsOrComputation, options) {
-  performanceMarkFeature("NgSignals");
-  const isShorthand = typeof optionsOrComputation === "function";
-  const node = Object.create(LINKED_SIGNAL_NODE);
-  node.source = isShorthand ? optionsOrComputation : optionsOrComputation.source;
-  if (!isShorthand) {
-    node.computation = optionsOrComputation.computation;
-  }
-  const equal = isShorthand ? options?.equal : optionsOrComputation.equal;
-  if (equal) {
-    node.equal = equal;
-  }
-  return createLinkedSignal(node);
-}
-var UNSET2 = Symbol("UNSET");
-var COMPUTING2 = Symbol("COMPUTING");
-var ERRORED2 = Symbol("ERRORED");
-var LINKED_SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    value: UNSET2,
-    dirty: true,
-    error: null,
-    equal: defaultEquals,
-    computation: identityFn,
-    producerMustRecompute(node) {
-      return node.value === UNSET2 || node.value === COMPUTING2;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING2) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING2;
-      const prevConsumer = consumerBeforeComputation(node);
-      let newValue;
-      try {
-        const newSourceValue = node.source();
-        const prev = oldValue === UNSET2 || oldValue === ERRORED2 ? void 0 : {
-          source: node.sourceValue,
-          value: oldValue
-        };
-        newValue = node.computation(newSourceValue, prev);
-        node.sourceValue = newSourceValue;
-      } catch (err) {
-        newValue = ERRORED2;
-        node.error = err;
-      } finally {
-        consumerAfterComputation(node, prevConsumer);
-      }
-      if (oldValue !== UNSET2 && newValue !== ERRORED2 && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-function untracked(nonReactiveReadsFn) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    return nonReactiveReadsFn();
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-var ViewContext = class {
-  view;
-  node;
-  constructor(view, node) {
-    this.view = view;
-    this.node = node;
-  }
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectViewContext;
-};
-function injectViewContext() {
-  return new ViewContext(getLView(), getCurrentTNode());
-}
-var USE_MICROTASK_EFFECT_BY_DEFAULT = false;
-var MicrotaskEffectScheduler = class _MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
-  pendingTasks = inject(PendingTasksInternal);
-  taskId = null;
-  schedule(effect2) {
-    super.schedule(effect2);
-    if (this.taskId === null) {
-      this.taskId = this.pendingTasks.add();
-      queueMicrotask(() => this.flush());
-    }
-  }
-  flush() {
-    try {
-      super.flush();
-    } finally {
-      if (this.taskId !== null) {
-        this.pendingTasks.remove(this.taskId);
-        this.taskId = null;
-      }
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _MicrotaskEffectScheduler,
-      providedIn: "root",
-      factory: () => new _MicrotaskEffectScheduler()
-    })
-  );
-};
-var EffectHandle = class {
-  scheduler;
-  effectFn;
-  zone;
-  injector;
-  unregisterOnDestroy;
-  watcher;
-  constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {
-    this.scheduler = scheduler;
-    this.effectFn = effectFn;
-    this.zone = zone;
-    this.injector = injector;
-    this.watcher = createWatch((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
-    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
-  }
-  runEffect(onCleanup) {
-    try {
-      this.effectFn(onCleanup);
-    } catch (err) {
-      const errorHandler = this.injector.get(ErrorHandler, null, {
-        optional: true
-      });
-      errorHandler?.handleError(err);
-    }
-  }
-  run() {
-    this.watcher.run();
-  }
-  schedule() {
-    this.scheduler.schedule(this);
-  }
-  destroy() {
-    this.watcher.destroy();
-    this.unregisterOnDestroy?.();
-  }
-};
-function effect$1() {
-}
-function microtaskEffect(effectFn, options) {
-  performanceMarkFeature("NgSignals");
-  ngDevMode && assertNotInReactiveContext(effect$1, "Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor.");
-  !options?.injector && assertInInjectionContext(effect$1);
-  const injector = options?.injector ?? inject(Injector);
-  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === "undefined" ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
-  const cdr = injector.get(ChangeDetectorRef, null, {
-    optional: true
-  });
-  if (!cdr || !(cdr._lView[FLAGS] & 8)) {
-    handle.watcher.notify();
-  } else {
-    (cdr._lView[EFFECTS_TO_SCHEDULE] ??= []).push(handle.watcher.notify);
-  }
-  return handle;
-}
-var useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
-var EffectRefImpl = class {
-  [SIGNAL];
-  constructor(node) {
-    this[SIGNAL] = node;
-  }
-  destroy() {
-    this[SIGNAL].destroy();
-  }
-};
-function effect(effectFn, options) {
-  if (useMicrotaskEffectsByDefault) {
-    if (ngDevMode && options?.forceRoot) {
-      throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
-    }
-    return microtaskEffect(effectFn, options);
-  }
-  performanceMarkFeature("NgSignals");
-  ngDevMode && assertNotInReactiveContext(effect, "Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor.");
-  !options?.injector && assertInInjectionContext(effect);
-  if (ngDevMode && options?.allowSignalWrites !== void 0) {
-    console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);
-  }
-  const injector = options?.injector ?? inject(Injector);
-  let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  let node;
-  const viewContext = injector.get(ViewContext, null, {
-    optional: true
-  });
-  const notifier = injector.get(ChangeDetectionScheduler);
-  if (viewContext !== null && !options?.forceRoot) {
-    node = createViewEffect(viewContext.view, notifier, effectFn);
-    if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {
-      destroyRef = null;
-    }
-  } else {
-    node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);
-  }
-  node.injector = injector;
-  if (destroyRef !== null) {
-    node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());
-  }
-  if (ngDevMode) {
-    node.debugName = options?.debugName ?? "";
-  }
-  return new EffectRefImpl(node);
-}
-var APP_EFFECT_SCHEDULER = new InjectionToken("", {
-  providedIn: "root",
-  factory: () => inject(EffectScheduler)
-});
-var BASE_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerAllowSignalWrites: true,
-  dirty: true,
-  hasRun: false,
-  cleanupFns: void 0,
-  zone: null,
-  onDestroyFn: noop2,
-  run() {
-    this.dirty = false;
-    if (ngDevMode && isInNotificationPhase()) {
-      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
-    }
-    if (this.hasRun && !consumerPollProducersForChange(this)) {
-      return;
-    }
-    this.hasRun = true;
-    const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
-    const prevNode = consumerBeforeComputation(this);
-    const prevRefreshingViews = setIsRefreshingViews(false);
-    try {
-      this.maybeCleanup();
-      this.fn(registerCleanupFn);
-    } finally {
-      setIsRefreshingViews(prevRefreshingViews);
-      consumerAfterComputation(this, prevNode);
-    }
-  },
-  maybeCleanup() {
-    if (!this.cleanupFns?.length) {
-      return;
-    }
-    try {
-      while (this.cleanupFns.length) {
-        this.cleanupFns.pop()();
-      }
-    } finally {
-      this.cleanupFns = [];
-    }
-  }
-}))();
-var ROOT_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, BASE_EFFECT_NODE), {
-  consumerMarkedDirty() {
-    this.scheduler.schedule(this);
-    this.notifier.notify(
-      13
-      /* NotificationSource.RootEffect */
-    );
-  },
-  destroy() {
-    consumerDestroy(this);
-    this.onDestroyFn();
-    this.maybeCleanup();
-  }
-}))();
-var VIEW_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, BASE_EFFECT_NODE), {
-  consumerMarkedDirty() {
-    this.view[FLAGS] |= 8192;
-    markAncestorsForTraversal(this.view);
-    this.notifier.notify(
-      14
-      /* NotificationSource.ViewEffect */
-    );
-  },
-  destroy() {
-    consumerDestroy(this);
-    this.onDestroyFn();
-    this.maybeCleanup();
-    this.view[EFFECTS]?.delete(this);
-  }
-}))();
-function createViewEffect(view, notifier, fn) {
-  const node = Object.create(VIEW_EFFECT_NODE);
-  node.view = view;
-  node.zone = typeof Zone !== "undefined" ? Zone.current : null;
-  node.notifier = notifier;
-  node.fn = fn;
-  view[EFFECTS] ??= /* @__PURE__ */ new Set();
-  view[EFFECTS].add(node);
-  node.consumerMarkedDirty(node);
-  return node;
-}
-function createRootEffect(fn, scheduler, notifier) {
-  const node = Object.create(ROOT_EFFECT_NODE);
-  node.fn = fn;
-  node.scheduler = scheduler;
-  node.notifier = notifier;
-  node.zone = typeof Zone !== "undefined" ? Zone.current : null;
-  node.scheduler.schedule(node);
-  node.notifier.notify(
-    13
-    /* NotificationSource.RootEffect */
-  );
-  return node;
-}
-var NOT_SET = Symbol("NOT_SET");
-var EMPTY_CLEANUP_SET = /* @__PURE__ */ new Set();
-var AFTER_RENDER_PHASE_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, SIGNAL_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerAllowSignalWrites: true,
-  value: NOT_SET,
-  cleanup: null,
-  /** Called when the effect becomes dirty */
-  consumerMarkedDirty() {
-    if (this.sequence.impl.executing) {
-      if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {
-        return;
-      }
-      this.sequence.erroredOrDestroyed = true;
-    }
-    this.sequence.scheduler.notify(
-      7
-      /* NotificationSource.RenderHook */
-    );
-  },
-  phaseFn(previousValue) {
-    this.sequence.lastPhase = this.phase;
-    if (!this.dirty) {
-      return this.signal;
-    }
-    this.dirty = false;
-    if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {
-      return this.signal;
-    }
-    try {
-      for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {
-        cleanupFn();
-      }
-    } finally {
-      this.cleanup?.clear();
-    }
-    const args = [];
-    if (previousValue !== void 0) {
-      args.push(previousValue);
-    }
-    args.push(this.registerCleanupFn);
-    const prevConsumer = consumerBeforeComputation(this);
-    let newValue;
-    try {
-      newValue = this.userFn.apply(null, args);
-    } finally {
-      consumerAfterComputation(this, prevConsumer);
-    }
-    if (this.value === NOT_SET || !this.equal(this.value, newValue)) {
-      this.value = newValue;
-      this.version++;
-    }
-    return this.signal;
-  }
-}))();
-var AfterRenderEffectSequence = class extends AfterRenderSequence {
-  scheduler;
-  /**
-   * While this sequence is executing, this tracks the last phase which was called by the
-   * `afterRender` machinery.
-   *
-   * When a phase effect is marked dirty, this is used to determine whether it's already run or not.
-   */
-  lastPhase = null;
-  /**
-   * The reactive nodes for each phase, if a phase effect is defined for that phase.
-   *
-   * These are initialized to `undefined` but set in the constructor.
-   */
-  nodes = [void 0, void 0, void 0, void 0];
-  constructor(impl, effectHooks, scheduler, destroyRef, snapshot = null) {
-    super(impl, [void 0, void 0, void 0, void 0], false, destroyRef, snapshot);
-    this.scheduler = scheduler;
-    for (const phase of AFTER_RENDER_PHASES) {
-      const effectHook = effectHooks[phase];
-      if (effectHook === void 0) {
-        continue;
-      }
-      const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);
-      node.sequence = this;
-      node.phase = phase;
-      node.userFn = effectHook;
-      node.dirty = true;
-      node.signal = () => {
-        producerAccessed(node);
-        return node.value;
-      };
-      node.signal[SIGNAL] = node;
-      node.registerCleanupFn = (fn) => (node.cleanup ??= /* @__PURE__ */ new Set()).add(fn);
-      this.nodes[phase] = node;
-      this.hooks[phase] = (value) => node.phaseFn(value);
-    }
-  }
-  afterRun() {
-    super.afterRun();
-    this.lastPhase = null;
-  }
-  destroy() {
-    super.destroy();
-    for (const node of this.nodes) {
-      for (const fn of node?.cleanup ?? EMPTY_CLEANUP_SET) {
-        fn();
-      }
-    }
-  }
-};
-function afterRenderEffect(callbackOrSpec, options) {
-  ngDevMode && assertNotInReactiveContext(afterRenderEffect, "Call `afterRenderEffect` outside of a reactive context. For example, create the render effect inside the component constructor`.");
-  !options?.injector && assertInInjectionContext(afterRenderEffect);
-  if (false) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  const injector = options?.injector ?? inject(Injector);
-  const scheduler = injector.get(ChangeDetectionScheduler);
-  const manager = injector.get(AfterRenderManager);
-  const tracing = injector.get(TracingService, null, {
-    optional: true
-  });
-  manager.impl ??= injector.get(AfterRenderImpl);
-  let spec = callbackOrSpec;
-  if (typeof spec === "function") {
-    spec = {
-      mixedReadWrite: callbackOrSpec
-    };
-  }
-  const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], scheduler, injector.get(DestroyRef), tracing?.snapshot(null));
-  manager.impl.register(sequence);
-  return sequence;
-}
-var ResourceStatus;
-(function(ResourceStatus2) {
-  ResourceStatus2[ResourceStatus2["Idle"] = 0] = "Idle";
-  ResourceStatus2[ResourceStatus2["Error"] = 1] = "Error";
-  ResourceStatus2[ResourceStatus2["Loading"] = 2] = "Loading";
-  ResourceStatus2[ResourceStatus2["Reloading"] = 3] = "Reloading";
-  ResourceStatus2[ResourceStatus2["Resolved"] = 4] = "Resolved";
-  ResourceStatus2[ResourceStatus2["Local"] = 5] = "Local";
-})(ResourceStatus || (ResourceStatus = {}));
-function resource(options) {
-  options?.injector || assertInInjectionContext(resource);
-  const request = options.request ?? (() => null);
-  return new WritableResourceImpl(request, options.loader, options.equal, options.injector);
-}
-var BaseWritableResource = class {
-  value;
-  status = signal(ResourceStatus.Idle);
-  error = signal(void 0);
-  rawSetValue;
-  constructor(equal) {
-    this.value = signal(void 0, {
-      equal: equal ? wrapEqualityFn(equal) : void 0
-    });
-    this.rawSetValue = this.value.set;
-    this.value.set = (value) => this.set(value);
-    this.value.update = (fn) => this.set(fn(untracked(this.value)));
-  }
-  set(value) {
-    const prevVersion = this.value[SIGNAL].version;
-    this.rawSetValue(value);
-    if (this.value[SIGNAL].version === prevVersion) {
-      return;
-    }
-    this.onLocalValue();
-    this.status.set(ResourceStatus.Local);
-    this.error.set(void 0);
-  }
-  update(updater) {
-    this.value.update(updater);
-  }
-  isLoading = computed(() => this.status() === ResourceStatus.Loading || this.status() === ResourceStatus.Reloading);
-  hasValue() {
-    return this.status() === ResourceStatus.Resolved || this.status() === ResourceStatus.Local || this.status() === ResourceStatus.Reloading;
-  }
-  asReadonly() {
-    return this;
-  }
-  /**
-   * Put the resource in a state with a given value.
-   */
-  setValueState(status, value = void 0) {
-    this.status.set(status);
-    this.rawSetValue(value);
-    this.error.set(void 0);
-  }
-  /**
-   * Put the resource into the error state.
-   */
-  setErrorState(err) {
-    this.value.set(void 0);
-    this.status.set(ResourceStatus.Error);
-    this.error.set(err);
-  }
-};
-var WritableResourceImpl = class extends BaseWritableResource {
-  loaderFn;
-  request;
-  pendingTasks;
-  effectRef;
-  pendingController;
-  resolvePendingTask = void 0;
-  constructor(requestFn, loaderFn, equal, injector) {
-    super(equal);
-    this.loaderFn = loaderFn;
-    injector = injector ?? inject(Injector);
-    this.pendingTasks = injector.get(PendingTasks);
-    this.request = computed(() => ({
-      // The current request as defined for this resource.
-      request: requestFn(),
-      // A counter signal which increments from 0, re-initialized for each request (similar to the
-      // `linkedSignal` pattern). A value other than 0 indicates a refresh operation.
-      reload: signal(0)
-    }));
-    this.effectRef = effect(this.loadEffect.bind(this), {
-      injector,
-      manualCleanup: true
-    });
-    injector.get(DestroyRef).onDestroy(() => this.destroy());
-  }
-  reload() {
-    const status = untracked(this.status);
-    if (status === ResourceStatus.Idle || status === ResourceStatus.Loading || status === ResourceStatus.Reloading) {
-      return false;
-    }
-    untracked(this.request).reload.update((v) => v + 1);
-    return true;
-  }
-  destroy() {
-    this.effectRef.destroy();
-    this.abortInProgressLoad();
-    this.setValueState(ResourceStatus.Idle);
-  }
-  loadEffect() {
-    return __async(this, null, function* () {
-      const previousStatus = untracked(this.status);
-      this.abortInProgressLoad();
-      const request = this.request();
-      if (request.request === void 0) {
-        this.setValueState(ResourceStatus.Idle);
-        return;
-      }
-      if (request.reload() === 0) {
-        this.setValueState(ResourceStatus.Loading);
-      } else {
-        this.status.set(ResourceStatus.Reloading);
-      }
-      const resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();
-      const {
-        signal: abortSignal
-      } = this.pendingController = new AbortController();
-      try {
-        const result = yield untracked(() => this.loaderFn({
-          abortSignal,
-          request: request.request,
-          previous: {
-            status: previousStatus
-          }
-        }));
-        if (abortSignal.aborted) {
-          return;
-        }
-        this.setValueState(ResourceStatus.Resolved, result);
-      } catch (err) {
-        if (abortSignal.aborted) {
-          return;
-        }
-        this.setErrorState(err);
-      } finally {
-        resolvePendingTask();
-      }
-    });
-  }
-  abortInProgressLoad() {
-    this.pendingController?.abort();
-    this.pendingController = void 0;
-    this.resolvePendingTask?.();
-    this.resolvePendingTask = void 0;
-  }
-  onLocalValue() {
-    this.abortInProgressLoad();
-  }
-};
-function wrapEqualityFn(equal) {
-  return (a, b) => a === void 0 || b === void 0 ? a === b : equal(a, b);
-}
-function createComponent(component, options) {
-  ngDevMode && assertComponentDef(component);
-  const componentDef = getComponentDef(component);
-  const elementInjector = options.elementInjector || getNullInjector();
-  const factory = new ComponentFactory(componentDef);
-  return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector);
-}
-function reflectComponentType(component) {
-  const componentDef = getComponentDef(component);
-  if (!componentDef) return null;
-  const factory = new ComponentFactory(componentDef);
-  return {
-    get selector() {
-      return factory.selector;
-    },
-    get type() {
-      return factory.componentType;
-    },
-    get inputs() {
-      return factory.inputs;
-    },
-    get outputs() {
-      return factory.outputs;
-    },
-    get ngContentSelectors() {
-      return factory.ngContentSelectors;
-    },
-    get isStandalone() {
-      return componentDef.standalone;
-    },
-    get isSignal() {
-      return componentDef.signals;
-    }
-  };
-}
-function mergeApplicationConfig(...configs) {
-  return configs.reduce((prev, curr) => {
-    return Object.assign(prev, curr, {
-      providers: [...prev.providers, ...curr.providers]
-    });
-  }, {
-    providers: []
-  });
-}
-var REQUEST = new InjectionToken("REQUEST", {
-  providedIn: "platform",
-  factory: () => null
-});
-var RESPONSE_INIT = new InjectionToken("RESPONSE_INIT", {
-  providedIn: "platform",
-  factory: () => null
-});
-var REQUEST_CONTEXT = new InjectionToken("REQUEST_CONTEXT", {
-  providedIn: "platform",
-  factory: () => null
-});
-if (typeof ngDevMode !== "undefined" && ngDevMode) {
-  _global.$localize ??= function() {
-    throw new Error("It looks like your application or one of its dependencies is using i18n.\nAngular 9 introduced a global `$localize()` function that needs to be loaded.\nPlease run `ng add @angular/localize` from the Angular CLI.\n(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\nFor server-side rendering applications add the import to your `main.server.ts` file.)");
-  };
-}
-
-export {
-  __spreadValues,
-  __spreadProps,
-  __objRest,
-  __async,
-  SIGNAL,
-  Subscription,
-  pipe,
-  Observable,
-  refCount,
-  ConnectableObservable,
-  Subject,
-  BehaviorSubject,
-  EMPTY,
-  from,
-  of,
-  throwError,
-  isObservable,
-  EmptyError,
-  map,
-  combineLatest,
-  mergeMap,
-  mergeAll,
-  concat,
-  defer,
-  filter,
-  catchError,
-  concatMap,
-  defaultIfEmpty,
-  take,
-  mapTo,
-  finalize,
-  first,
-  takeLast,
-  last2 as last,
-  scan,
-  startWith,
-  switchMap,
-  takeUntil,
-  tap,
-  XSS_SECURITY_URL,
-  RuntimeError,
-  formatRuntimeError,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  noSideEffects,
-  _global,
-  stringify,
-  truncateMiddle,
-  forwardRef,
-  resolveForwardRef,
-  ɵɵdefineInjectable,
-  defineInjectable,
-  ɵɵdefineInjector,
-  getInjectableDef,
-  isInjectable,
-  NG_PROV_DEF,
-  NG_INJ_DEF,
-  InjectionToken,
-  setInjectorProfilerContext,
-  isEnvironmentProviders,
-  NG_COMP_DEF,
-  NG_DIR_DEF,
-  NG_PIPE_DEF,
-  NG_MOD_DEF,
-  NG_ELEMENT_ID,
-  InjectFlags,
-  setCurrentInjector,
-  ɵɵinject,
-  ɵɵinvalidFactoryDep,
-  inject,
-  convertToBitFlags,
-  Inject,
-  Optional,
-  Self,
-  SkipSelf,
-  Host,
-  ENVIRONMENT_INITIALIZER,
-  INJECTOR$1,
-  isStandalone,
-  makeEnvironmentProviders,
-  provideEnvironmentInitializer,
-  importProvidersFrom,
-  INJECTOR_SCOPE,
-  EnvironmentInjector,
-  runInInjectionContext,
-  assertInInjectionContext,
-  FactoryTarget,
-  Type,
-  ReflectionCapabilities,
-  CONTAINER_HEADER_OFFSET,
-  SimpleChange,
-  ɵɵNgOnChangesFeature,
-  ɵɵenableBindings,
-  ɵɵdisableBindings,
-  ɵɵrestoreView,
-  ɵɵresetView,
-  ɵɵnamespaceSVG,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceHTML,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  ɵɵgetInheritedFactory,
-  ɵɵinjectAttribute,
-  Attribute2 as Attribute,
-  Injectable,
-  createInjector,
-  Injector,
-  HostAttributeToken,
-  HOST_TAG_NAME,
-  DestroyRef,
-  ChangeDetectionScheduler,
-  ZONELESS_ENABLED,
-  PendingTasksInternal,
-  PendingTasks,
-  EventEmitter,
-  NgZone,
-  NoopNgZone,
-  ErrorHandler,
-  INTERNAL_APPLICATION_ERROR_HANDLER,
-  OutputEmitterRef,
-  getOutputDestroyRef,
-  output,
-  input,
-  ElementRef,
-  QueryList,
-  ChangeDetectionStrategy,
-  LContext,
-  getLContext,
-  getDirectives,
-  getHostElement,
-  setDocument,
-  APP_ID,
-  PLATFORM_INITIALIZER,
-  PLATFORM_ID,
-  PACKAGE_ROOT_URL,
-  ANIMATION_MODULE_TYPE,
-  CSP_NONCE,
-  IMAGE_CONFIG_DEFAULTS,
-  IMAGE_CONFIG,
-  makeStateKey,
-  TransferState,
-  IS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED,
-  TracingAction,
-  TracingService,
-  performanceMarkFeature,
-  assertNotInReactiveContext,
-  AfterRenderPhase,
-  AfterRenderManager,
-  afterRender,
-  afterNextRender,
-  DeferBlockState,
-  DeferBlockBehavior,
-  JSACTION_EVENT_CONTRACT,
-  SSR_CONTENT_INTEGRITY_MARKER,
-  readHydrationInfo,
-  ViewEncapsulation,
-  unwrapSafeValue,
-  allowSanitizationBypassAndThrow,
-  getSanitizationBypassType,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustUrl,
-  bypassSanitizationTrustResourceUrl,
-  _sanitizeUrl,
-  _sanitizeHtml,
-  SecurityContext,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  CUSTOM_ELEMENTS_SCHEMA,
-  NO_ERRORS_SCHEMA,
-  ɵsetUnknownElementStrictMode,
-  ɵgetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  ɵɵresolveWindow,
-  ɵɵresolveDocument,
-  ɵɵresolveBody,
-  RendererStyleFlags2,
-  NO_CHANGE,
-  ɵɵadvance,
-  ɵɵdirectiveInject,
-  ɵɵinvalidFactory,
-  ViewRef$1,
-  TemplateRef,
-  ComponentRef$1,
-  ComponentFactory$1,
-  ComponentFactoryResolver$1,
-  RendererFactory2,
-  Renderer2,
-  Sanitizer,
-  isNgModule,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  depsTracker,
-  ComponentFactory,
-  ComponentRef,
-  LifecycleHooksFeature,
-  ViewContainerRef,
-  isSignal,
-  ɵunwrapWritableSignal,
-  signal,
-  viewChild,
-  viewChildren,
-  contentChild,
-  contentChildren,
-  model,
-  Query,
-  ContentChildren,
-  ContentChild,
-  ViewChildren,
-  ViewChild,
-  resolveComponentResources,
-  isComponentDefPendingResolution,
-  clearResolutionOfComponentResourcesQueue,
-  restoreComponentResolutionQueue,
-  registerNgModuleType,
-  setAllowDuplicateNgModuleIdsForTest,
-  ɵɵvalidateIframeAttribute,
-  NgModuleRef$1,
-  NgModuleFactory$1,
-  createNgModule,
-  createNgModuleRef,
-  NgModuleRef,
-  NgModuleFactory,
-  createEnvironmentInjector,
-  ɵɵdefineComponent,
-  ɵɵdefineNgModule,
-  ɵɵdefineDirective,
-  ɵɵdefinePipe,
-  ɵɵInheritDefinitionFeature,
-  ɵɵCopyDefinitionFeature,
-  ɵɵHostDirectivesFeature,
-  ɵɵInputTransformsFeature,
-  devModeEqual,
-  ɵɵtemplate,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DEFER_BLOCK_CONFIG,
-  renderDeferBlockState,
-  ɵɵdeferEnableTimerScheduling,
-  getAsyncClassMetadataFn,
-  setClassMetadataAsync,
-  setClassMetadata,
-  Console,
-  publishExternalGlobalUtil,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  Testability,
-  TestabilityRegistry,
-  setTestabilityGetter,
-  isPromise2 as isPromise,
-  isSubscribable,
-  APP_INITIALIZER,
-  provideAppInitializer,
-  ApplicationInitStatus,
-  EffectScheduler,
-  APP_BOOTSTRAP_LISTENER,
-  isBoundToModule,
-  NgProbeToken,
-  ApplicationRef,
-  detectChangesInViewIfRequired,
-  triggerResourceLoading,
-  ɵɵdefer,
-  ɵɵdeferWhen,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferOnIdle,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferOnTimer,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferOnHover,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵproperty,
-  ɵɵstyleProp,
-  ɵɵclassProp,
-  ɵɵstyleMap,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterCreate,
-  ɵɵrepeater,
-  ɵɵelementStart,
-  ɵɵelementEnd,
-  ɵɵelement,
-  ɵɵelementContainerStart,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainer,
-  ɵɵgetCurrentView,
-  ɵɵhostProperty,
-  ɵɵsyntheticHostProperty,
-  registerLocaleData,
-  findLocaleData,
-  getLocaleCurrencyCode,
-  getLocalePluralCase,
-  unregisterAllLocaleData,
-  LocaleDataIndex,
-  DEFAULT_LOCALE_ID,
-  setLocaleId,
-  ɵɵi18nStart,
-  ɵɵi18nEnd,
-  ɵɵi18n,
-  ɵɵi18nAttributes,
-  ɵɵi18nExp,
-  ɵɵi18nApply,
-  ɵɵi18nPostprocess,
-  ɵɵlistener,
-  ɵɵsyntheticHostListener,
-  ɵɵnextContext,
-  ɵɵprojectionDef,
-  ɵɵprojection,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵcontentQuery,
-  ɵɵviewQuery,
-  ɵɵqueryRefresh,
-  ɵɵloadQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵviewQuerySignal,
-  ɵɵqueryAdvance,
-  store,
-  ɵɵreference,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtwoWayProperty,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵdeclareLet,
-  ɵɵstoreLet,
-  ɵɵreadContextLet,
-  ɵɵProvidersFeature,
-  ɵɵExternalStylesFeature,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵtemplateRefExtractor,
-  ɵɵgetComponentDepsFactory,
-  ɵsetClassDebugInfo,
-  ɵɵreplaceMetadata,
-  resetJitOptions,
-  flushModuleScopingQueueAsMuchAsPossible,
-  compileNgModule,
-  compileNgModuleDefs,
-  generateStandaloneInDeclarationsError,
-  resetCompiledComponents,
-  patchComponentDefWithScope,
-  transitiveScopesFor,
-  compileComponent,
-  compileDirective,
-  compilePipe,
-  Directive,
-  Component,
-  Pipe,
-  Input,
-  Output,
-  HostBinding,
-  HostListener,
-  NgModule,
-  Version,
-  VERSION,
-  ModuleWithComponentFactories,
-  Compiler,
-  COMPILER_OPTIONS,
-  CompilerFactory,
-  compileNgModuleFactory,
-  PROVIDED_NG_ZONE,
-  internalProvideZoneChangeDetection,
-  provideZoneChangeDetection,
-  ChangeDetectionSchedulerImpl,
-  provideExperimentalZonelessChangeDetection,
-  LOCALE_ID,
-  DEFAULT_CURRENCY_CODE,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  MissingTranslationStrategy,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  PlatformRef,
-  ALLOW_MULTIPLE_PLATFORMS,
-  createPlatform,
-  createPlatformFactory,
-  assertPlatform,
-  getPlatform,
-  destroyPlatform,
-  providePlatformInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  isDevMode,
-  enableProdMode,
-  getModuleFactory,
-  getNgModuleById,
-  ChangeDetectorRef,
-  injectChangeDetectorRef,
-  ViewRef,
-  EmbeddedViewRef,
-  DebugEventListener,
-  asNativeElements,
-  DebugNode,
-  DebugElement,
-  getDebugNode,
-  DefaultIterableDiffer,
-  IterableDiffers,
-  KeyValueDiffers,
-  defaultIterableDiffers,
-  defaultKeyValueDiffers,
-  platformCore,
-  ApplicationModule,
-  setAlternateWeakRefImpl,
-  internalCreateApplication,
-  getDeferBlocks,
-  withEventReplay,
-  annotateForHydration,
-  withDomHydration,
-  withI18nSupport,
-  withIncrementalHydration,
-  booleanAttribute,
-  numberAttribute,
-  PERFORMANCE_MARK_PREFIX,
-  startMeasuring,
-  stopMeasuring,
-  enableProfiling,
-  disableProfiling,
-  getClosestComponentName,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  computed,
-  linkedSignal,
-  untracked,
-  MicrotaskEffectScheduler,
-  microtaskEffect,
-  effect,
-  afterRenderEffect,
-  ResourceStatus,
-  resource,
-  createComponent,
-  reflectComponentType,
-  mergeApplicationConfig,
-  REQUEST,
-  RESPONSE_INIT,
-  REQUEST_CONTEXT
-};
-/*! Bundled license information:
-
-@angular/core/fesm2022/primitives/signals.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/primitives/event-dispatch.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-*/
-//# sourceMappingURL=chunk-GZKEX4RU.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-GZKEX4RU.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/chunk-GZKEX4RU.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/core/fesm2022/primitives/signals.mjs", "../../../../../../node_modules/tslib/tslib.es6.mjs", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isFunction.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Subscription.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/config.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/noop.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/NotificationFactories.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/errorContext.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Subscriber.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/symbol/observable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/identity.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/pipe.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Observable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/lift.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/refCount.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/ConnectableObservable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/performanceTimestampProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/animationFrameProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/dom/animationFrames.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Subject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/ReplaySubject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/AsyncSubject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/Immediate.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/immediateProvider.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsapAction.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Scheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsapScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/asap.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/async.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/QueueAction.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/QueueScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/queue.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AnimationFrameAction.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/AnimationFrameScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/animationFrame.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduler/VirtualTimeScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/empty.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/args.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isPromise.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isIterable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/from.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/of.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/throwError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/Notification.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/isObservable.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/EmptyError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/ArgumentOutOfRangeError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/NotFoundError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/SequenceError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/timeout.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/map.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/createObject.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/concatAll.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/concat.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/defer.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/observable/never.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/filter.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/catchError.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/concatMap.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/take.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/finalize.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/first.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/takeLast.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/last.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/scan.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/startWith.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/switchMap.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js", "../../../../../../node_modules/rxjs/dist/esm5/internal/operators/tap.js", "../../../../../../node_modules/@angular/core/fesm2022/primitives/event-dispatch.mjs", "../../../../../../node_modules/@angular/core/fesm2022/core.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\n/**\n * The default equality function used for `signal` and `computed`, which uses referential equality.\n */\nfunction defaultEquals(a, b) {\n  return Object.is(a, b);\n}\n\n/**\n * The currently active consumer `ReactiveNode`, if running code in a reactive context.\n *\n * Change this via `setActiveConsumer`.\n */\nlet activeConsumer = null;\nlet inNotificationPhase = false;\n/**\n * Global epoch counter. Incremented whenever a source signal is set.\n */\nlet epoch = 1;\n/**\n * Symbol used to tell `Signal`s apart from other functions.\n *\n * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.\n */\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n  const prev = activeConsumer;\n  activeConsumer = consumer;\n  return prev;\n}\nfunction getActiveConsumer() {\n  return activeConsumer;\n}\nfunction isInNotificationPhase() {\n  return inNotificationPhase;\n}\nfunction isReactive(value) {\n  return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n  version: 0,\n  lastCleanEpoch: 0,\n  dirty: false,\n  producerNode: undefined,\n  producerLastReadVersion: undefined,\n  producerIndexOfThis: undefined,\n  nextProducerIndex: 0,\n  liveConsumerNode: undefined,\n  liveConsumerIndexOfThis: undefined,\n  consumerAllowSignalWrites: false,\n  consumerIsAlwaysLive: false,\n  producerMustRecompute: () => false,\n  producerRecomputeValue: () => {},\n  consumerMarkedDirty: () => {},\n  consumerOnSignalRead: () => {}\n};\n/**\n * Called by implementations when a producer's signal is read.\n */\nfunction producerAccessed(node) {\n  if (inNotificationPhase) {\n    throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n  }\n  if (activeConsumer === null) {\n    // Accessed outside of a reactive context, so nothing to record.\n    return;\n  }\n  activeConsumer.consumerOnSignalRead(node);\n  // This producer is the `idx`th dependency of `activeConsumer`.\n  const idx = activeConsumer.nextProducerIndex++;\n  assertConsumerNode(activeConsumer);\n  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {\n    // There's been a change in producers since the last execution of `activeConsumer`.\n    // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and\n    // replaced with `this`.\n    //\n    // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in\n    // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need\n    // to remove it from the stale producer's `liveConsumer`s.\n    if (consumerIsLive(activeConsumer)) {\n      const staleProducer = activeConsumer.producerNode[idx];\n      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);\n      // At this point, the only record of `staleProducer` is the reference at\n      // `activeConsumer.producerNode[idx]` which will be overwritten below.\n    }\n  }\n  if (activeConsumer.producerNode[idx] !== node) {\n    // We're a new dependency of the consumer (at `idx`).\n    activeConsumer.producerNode[idx] = node;\n    // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a\n    // placeholder value.\n    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;\n  }\n  activeConsumer.producerLastReadVersion[idx] = node.version;\n}\n/**\n * Increment the global epoch counter.\n *\n * Called by source producers (that is, not computeds) whenever their values change.\n */\nfunction producerIncrementEpoch() {\n  epoch++;\n}\n/**\n * Ensure this producer's `version` is up-to-date.\n */\nfunction producerUpdateValueVersion(node) {\n  if (consumerIsLive(node) && !node.dirty) {\n    // A live consumer will be marked dirty by producers, so a clean state means that its version\n    // is guaranteed to be up-to-date.\n    return;\n  }\n  if (!node.dirty && node.lastCleanEpoch === epoch) {\n    // Even non-live consumers can skip polling if they previously found themselves to be clean at\n    // the current epoch, since their dependencies could not possibly have changed (such a change\n    // would've increased the epoch).\n    return;\n  }\n  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n    // None of our producers report a change since the last time they were read, so no\n    // recomputation of our value is necessary, and we can consider ourselves clean.\n    producerMarkClean(node);\n    return;\n  }\n  node.producerRecomputeValue(node);\n  // After recomputing the value, we're no longer dirty.\n  producerMarkClean(node);\n}\n/**\n * Propagate a dirty notification to live consumers of this producer.\n */\nfunction producerNotifyConsumers(node) {\n  if (node.liveConsumerNode === undefined) {\n    return;\n  }\n  // Prevent signal reads when we're updating the graph\n  const prev = inNotificationPhase;\n  inNotificationPhase = true;\n  try {\n    for (const consumer of node.liveConsumerNode) {\n      if (!consumer.dirty) {\n        consumerMarkDirty(consumer);\n      }\n    }\n  } finally {\n    inNotificationPhase = prev;\n  }\n}\n/**\n * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,\n * based on the current consumer context.\n */\nfunction producerUpdatesAllowed() {\n  return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n  node.dirty = true;\n  producerNotifyConsumers(node);\n  node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n  node.dirty = false;\n  node.lastCleanEpoch = epoch;\n}\n/**\n * Prepare this consumer to run a computation in its reactive context.\n *\n * Must be called by subclasses which represent reactive computations, before those computations\n * begin.\n */\nfunction consumerBeforeComputation(node) {\n  node && (node.nextProducerIndex = 0);\n  return setActiveConsumer(node);\n}\n/**\n * Finalize this consumer's state after a reactive computation has run.\n *\n * Must be called by subclasses which represent reactive computations, after those computations\n * have finished.\n */\nfunction consumerAfterComputation(node, prevConsumer) {\n  setActiveConsumer(prevConsumer);\n  if (!node || node.producerNode === undefined || node.producerIndexOfThis === undefined || node.producerLastReadVersion === undefined) {\n    return;\n  }\n  if (consumerIsLive(node)) {\n    // For live consumers, we need to remove the producer -> consumer edge for any stale producers\n    // which weren't dependencies after the recomputation.\n    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate the producer tracking arrays.\n  // Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but\n  // benchmarking has shown that individual pop operations are faster.\n  while (node.producerNode.length > node.nextProducerIndex) {\n    node.producerNode.pop();\n    node.producerLastReadVersion.pop();\n    node.producerIndexOfThis.pop();\n  }\n}\n/**\n * Determine whether this consumer has any dependencies which have changed since the last time\n * they were read.\n */\nfunction consumerPollProducersForChange(node) {\n  assertConsumerNode(node);\n  // Poll producers for change.\n  for (let i = 0; i < node.producerNode.length; i++) {\n    const producer = node.producerNode[i];\n    const seenVersion = node.producerLastReadVersion[i];\n    // First check the versions. A mismatch means that the producer's value is known to have\n    // changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n    // The producer's version is the same as the last time we read it, but it might itself be\n    // stale. Force the producer to recompute its version (calculating a new value if necessary).\n    producerUpdateValueVersion(producer);\n    // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the\n    // versions still match then it has not changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Disconnect this consumer from the graph.\n */\nfunction consumerDestroy(node) {\n  assertConsumerNode(node);\n  if (consumerIsLive(node)) {\n    // Drop all connections from the graph to this node.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate all the arrays to drop all connection from this node to the graph.\n  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;\n  if (node.liveConsumerNode) {\n    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;\n  }\n}\n/**\n * Add `consumer` as a live consumer of this node.\n *\n * Note that this operation is potentially transitive. If this node becomes live, then it becomes\n * a live consumer of all of its current producers.\n */\nfunction producerAddLiveConsumer(node, consumer, indexOfThis) {\n  assertProducerNode(node);\n  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {\n    // When going from 0 to 1 live consumers, we become a live consumer to our producers.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);\n    }\n  }\n  node.liveConsumerIndexOfThis.push(indexOfThis);\n  return node.liveConsumerNode.push(consumer) - 1;\n}\n/**\n * Remove the live consumer at `idx`.\n */\nfunction producerRemoveLiveConsumerAtIndex(node, idx) {\n  assertProducerNode(node);\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {\n    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);\n  }\n  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {\n    // When removing the last live consumer, we will no longer be live. We need to remove\n    // ourselves from our producers' tracking (which may cause consumer-producers to lose\n    // liveness as well).\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single\n  // live consumer, this is a no-op.\n  const lastIdx = node.liveConsumerNode.length - 1;\n  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];\n  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];\n  // Truncate the array.\n  node.liveConsumerNode.length--;\n  node.liveConsumerIndexOfThis.length--;\n  // If the index is still valid, then we need to fix the index pointer from the producer to this\n  // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).\n  if (idx < node.liveConsumerNode.length) {\n    const idxProducer = node.liveConsumerIndexOfThis[idx];\n    const consumer = node.liveConsumerNode[idx];\n    assertConsumerNode(consumer);\n    consumer.producerIndexOfThis[idxProducer] = idx;\n  }\n}\nfunction consumerIsLive(node) {\n  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;\n}\nfunction assertConsumerNode(node) {\n  node.producerNode ??= [];\n  node.producerIndexOfThis ??= [];\n  node.producerLastReadVersion ??= [];\n}\nfunction assertProducerNode(node) {\n  node.liveConsumerNode ??= [];\n  node.liveConsumerIndexOfThis ??= [];\n}\nfunction isConsumerNode(node) {\n  return node.producerNode !== undefined;\n}\n\n/**\n * Create a computed signal which derives a reactive value from an expression.\n */\nfunction createComputed(computation) {\n  const node = Object.create(COMPUTED_NODE);\n  node.computation = computation;\n  const computed = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion(node);\n    // Record that someone looked at this signal.\n    producerAccessed(node);\n    if (node.value === ERRORED) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  computed[SIGNAL] = node;\n  return computed;\n}\n/**\n * A dedicated symbol used before a computed value has been calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    value: UNSET,\n    dirty: true,\n    error: null,\n    equal: defaultEquals,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET || node.value === COMPUTING;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING;\n      const prevConsumer = consumerBeforeComputation(node);\n      let newValue;\n      try {\n        newValue = node.computation();\n      } catch (err) {\n        newValue = ERRORED;\n        node.error = err;\n      } finally {\n        consumerAfterComputation(node, prevConsumer);\n      }\n      if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\nfunction defaultThrowError() {\n  throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError() {\n  throwInvalidWriteToSignalErrorFn();\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n  throwInvalidWriteToSignalErrorFn = fn;\n}\n\n/**\n * If set, called after `WritableSignal`s are updated.\n *\n * This hook can be used to achieve various effects, such as running effects synchronously as part\n * of setting a signal.\n */\nlet postSignalSetFn = null;\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction createSignal(initialValue) {\n  const node = Object.create(SIGNAL_NODE);\n  node.value = initialValue;\n  const getter = () => {\n    producerAccessed(node);\n    return node.value;\n  };\n  getter[SIGNAL] = node;\n  return getter;\n}\nfunction setPostSignalSetFn(fn) {\n  const prev = postSignalSetFn;\n  postSignalSetFn = fn;\n  return prev;\n}\nfunction signalGetFn() {\n  producerAccessed(this);\n  return this.value;\n}\nfunction signalSetFn(node, newValue) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  if (!node.equal(node.value, newValue)) {\n    node.value = newValue;\n    signalValueChanged(node);\n  }\n}\nfunction signalUpdateFn(node, updater) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn() {\n  postSignalSetFn?.();\n}\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    equal: defaultEquals,\n    value: undefined\n  };\n})();\nfunction signalValueChanged(node) {\n  node.version++;\n  producerIncrementEpoch();\n  producerNotifyConsumers(node);\n  postSignalSetFn?.();\n}\nfunction createWatch(fn, schedule, allowSignalWrites) {\n  const node = Object.create(WATCH_NODE);\n  if (allowSignalWrites) {\n    node.consumerAllowSignalWrites = true;\n  }\n  node.fn = fn;\n  node.schedule = schedule;\n  const registerOnCleanup = cleanupFn => {\n    node.cleanupFn = cleanupFn;\n  };\n  function isWatchNodeDestroyed(node) {\n    return node.fn === null && node.schedule === null;\n  }\n  function destroyWatchNode(node) {\n    if (!isWatchNodeDestroyed(node)) {\n      consumerDestroy(node); // disconnect watcher from the reactive graph\n      node.cleanupFn();\n      // nullify references to the integration functions to mark node as destroyed\n      node.fn = null;\n      node.schedule = null;\n      node.cleanupFn = NOOP_CLEANUP_FN;\n    }\n  }\n  const run = () => {\n    if (node.fn === null) {\n      // trying to run a destroyed watch is noop\n      return;\n    }\n    if (isInNotificationPhase()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    node.dirty = false;\n    if (node.hasRun && !consumerPollProducersForChange(node)) {\n      return;\n    }\n    node.hasRun = true;\n    const prevConsumer = consumerBeforeComputation(node);\n    try {\n      node.cleanupFn();\n      node.cleanupFn = NOOP_CLEANUP_FN;\n      node.fn(registerOnCleanup);\n    } finally {\n      consumerAfterComputation(node, prevConsumer);\n    }\n  };\n  node.ref = {\n    notify: () => consumerMarkDirty(node),\n    run,\n    cleanup: () => node.cleanupFn(),\n    destroy: () => destroyWatchNode(node),\n    [SIGNAL]: node\n  };\n  return node.ref;\n}\nconst NOOP_CLEANUP_FN = () => {};\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst WATCH_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    consumerIsAlwaysLive: true,\n    consumerAllowSignalWrites: false,\n    consumerMarkedDirty: node => {\n      if (node.schedule !== null) {\n        node.schedule(node.ref);\n      }\n    },\n    hasRun: false,\n    cleanupFn: NOOP_CLEANUP_FN\n  };\n})();\nfunction setAlternateWeakRefImpl(impl) {\n  // TODO: remove this function\n}\nexport { REACTIVE_NODE, SIGNAL, SIGNAL_NODE, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, createComputed, createSignal, createWatch, defaultEquals, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, runPostSignalSetFn, setActiveConsumer, setAlternateWeakRefImpl, setPostSignalSetFn, setThrowInvalidWriteToSignalError, signalSetFn, signalUpdateFn };\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function (d, b) {\n  extendStatics = Object.setPrototypeOf || {\n    __proto__: []\n  } instanceof Array && function (d, b) {\n    d.__proto__ = b;\n  } || function (d, b) {\n    for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n  };\n  return extendStatics(d, b);\n};\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() {\n    this.constructor = d;\n  }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nexport var __assign = function () {\n  __assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length,\n    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n    d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n  return function (target, key) {\n    decorator(target, key, paramIndex);\n  };\n}\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) {\n    if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n    return f;\n  }\n  var kind = contextIn.kind,\n    key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _,\n    done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n    var context = {};\n    for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n    for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n    context.addInitializer = function (f) {\n      if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n      extraInitializers.push(accept(f || null));\n    };\n    var result = (0, decorators[i])(kind === \"accessor\" ? {\n      get: descriptor.get,\n      set: descriptor.set\n    } : descriptor[key], context);\n    if (kind === \"accessor\") {\n      if (result === void 0) continue;\n      if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n      if (_ = accept(result.get)) descriptor.get = _;\n      if (_ = accept(result.set)) descriptor.set = _;\n      if (_ = accept(result.init)) initializers.unshift(_);\n    } else if (_ = accept(result)) {\n      if (kind === \"field\") initializers.unshift(_);else descriptor[key] = _;\n    }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n}\n;\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n    value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n}\n;\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n}\n;\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", {\n    configurable: true,\n    value: prefix ? \"\".concat(prefix, \" \", name) : name\n  });\n}\n;\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function (resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function (resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\nexport function __generator(thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (g && (g = 0, op[0] && (_ = 0)), _) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n    desc = {\n      enumerable: true,\n      get: function () {\n        return m[k];\n      }\n    };\n  }\n  Object.defineProperty(o, k2, desc);\n} : function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n  return r;\n}\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []),\n    i,\n    q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i;\n  function awaitReturn(f) {\n    return function (v) {\n      return Promise.resolve(v).then(f, reject);\n    };\n  }\n  function verb(n, f) {\n    if (g[n]) {\n      i[n] = function (v) {\n        return new Promise(function (a, b) {\n          q.push([n, v, a, b]) > 1 || resume(n, v);\n        });\n      };\n      if (f) i[n] = f(i[n]);\n    }\n  }\n  function resume(n, v) {\n    try {\n      step(g[n](v));\n    } catch (e) {\n      settle(q[0][3], e);\n    }\n  }\n  function step(r) {\n    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n  }\n  function fulfill(value) {\n    resume(\"next\", value);\n  }\n  function reject(value) {\n    resume(\"throw\", value);\n  }\n  function settle(f, v) {\n    if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n  }\n}\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n    throw e;\n  }), verb(\"return\"), i[Symbol.iterator] = function () {\n    return this;\n  }, i;\n  function verb(n, f) {\n    i[n] = o[n] ? function (v) {\n      return (p = !p) ? {\n        value: __await(o[n](v)),\n        done: false\n      } : f ? f(v) : v;\n    } : f;\n  }\n}\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator],\n    i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i);\n  function verb(n) {\n    i[n] = o[n] && function (v) {\n      return new Promise(function (resolve, reject) {\n        v = o[n](v), settle(resolve, reject, v.done, v.value);\n      });\n    };\n  }\n  function settle(resolve, reject, d, v) {\n    Promise.resolve(v).then(function (v) {\n      resolve({\n        value: v,\n        done: d\n      });\n    }, reject);\n  }\n}\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) {\n    Object.defineProperty(cooked, \"raw\", {\n      value: raw\n    });\n  } else {\n    cooked.raw = raw;\n  }\n  return cooked;\n}\n;\nvar __setModuleDefault = Object.create ? function (o, v) {\n  Object.defineProperty(o, \"default\", {\n    enumerable: true,\n    value: v\n  });\n} : function (o, v) {\n  o[\"default\"] = v;\n};\nvar ownKeys = function (o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\nexport function __importDefault(mod) {\n  return mod && mod.__esModule ? mod : {\n    default: mod\n  };\n}\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || typeof receiver !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function () {\n      try {\n        inner.call(this);\n      } catch (e) {\n        return Promise.reject(e);\n      }\n    };\n    env.stack.push({\n      value: value,\n      dispose: dispose,\n      async: async\n    });\n  } else if (async) {\n    env.stack.push({\n      async: true\n    });\n  }\n  return value;\n}\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r,\n    s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function (e) {\n            fail(e);\n            return next();\n          });\n        } else s |= 1;\n      } catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n    return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n      return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n    });\n  }\n  return path;\n}\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension\n};", "export function isFunction(value) {\n  return typeof value === 'function';\n}\n", "export function createErrorClass(createImpl) {\n  var _super = function (instance) {\n    Error.call(instance);\n    instance.stack = new Error().stack;\n  };\n  var ctorFunc = createImpl(_super);\n  ctorFunc.prototype = Object.create(Error.prototype);\n  ctorFunc.prototype.constructor = ctorFunc;\n  return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n  return function UnsubscriptionErrorImpl(errors) {\n    _super(this);\n    this.message = errors ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) {\n      return i + 1 + \") \" + err.toString();\n    }).join('\\n  ') : '';\n    this.name = 'UnsubscriptionError';\n    this.errors = errors;\n  };\n});\n", "export function arrRemove(arr, item) {\n  if (arr) {\n    var index = arr.indexOf(item);\n    0 <= index && arr.splice(index, 1);\n  }\n}\n", "import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = function () {\n  function Subscription(initialTeardown) {\n    this.initialTeardown = initialTeardown;\n    this.closed = false;\n    this._parentage = null;\n    this._finalizers = null;\n  }\n  Subscription.prototype.unsubscribe = function () {\n    var e_1, _a, e_2, _b;\n    var errors;\n    if (!this.closed) {\n      this.closed = true;\n      var _parentage = this._parentage;\n      if (_parentage) {\n        this._parentage = null;\n        if (Array.isArray(_parentage)) {\n          try {\n            for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n              var parent_1 = _parentage_1_1.value;\n              parent_1.remove(this);\n            }\n          } catch (e_1_1) {\n            e_1 = {\n              error: e_1_1\n            };\n          } finally {\n            try {\n              if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n            } finally {\n              if (e_1) throw e_1.error;\n            }\n          }\n        } else {\n          _parentage.remove(this);\n        }\n      }\n      var initialFinalizer = this.initialTeardown;\n      if (isFunction(initialFinalizer)) {\n        try {\n          initialFinalizer();\n        } catch (e) {\n          errors = e instanceof UnsubscriptionError ? e.errors : [e];\n        }\n      }\n      var _finalizers = this._finalizers;\n      if (_finalizers) {\n        this._finalizers = null;\n        try {\n          for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n            var finalizer = _finalizers_1_1.value;\n            try {\n              execFinalizer(finalizer);\n            } catch (err) {\n              errors = errors !== null && errors !== void 0 ? errors : [];\n              if (err instanceof UnsubscriptionError) {\n                errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n              } else {\n                errors.push(err);\n              }\n            }\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n      }\n      if (errors) {\n        throw new UnsubscriptionError(errors);\n      }\n    }\n  };\n  Subscription.prototype.add = function (teardown) {\n    var _a;\n    if (teardown && teardown !== this) {\n      if (this.closed) {\n        execFinalizer(teardown);\n      } else {\n        if (teardown instanceof Subscription) {\n          if (teardown.closed || teardown._hasParent(this)) {\n            return;\n          }\n          teardown._addParent(this);\n        }\n        (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n      }\n    }\n  };\n  Subscription.prototype._hasParent = function (parent) {\n    var _parentage = this._parentage;\n    return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);\n  };\n  Subscription.prototype._addParent = function (parent) {\n    var _parentage = this._parentage;\n    this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n  };\n  Subscription.prototype._removeParent = function (parent) {\n    var _parentage = this._parentage;\n    if (_parentage === parent) {\n      this._parentage = null;\n    } else if (Array.isArray(_parentage)) {\n      arrRemove(_parentage, parent);\n    }\n  };\n  Subscription.prototype.remove = function (teardown) {\n    var _finalizers = this._finalizers;\n    _finalizers && arrRemove(_finalizers, teardown);\n    if (teardown instanceof Subscription) {\n      teardown._removeParent(this);\n    }\n  };\n  Subscription.EMPTY = function () {\n    var empty = new Subscription();\n    empty.closed = true;\n    return empty;\n  }();\n  return Subscription;\n}();\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n  return value instanceof Subscription || value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);\n}\nfunction execFinalizer(finalizer) {\n  if (isFunction(finalizer)) {\n    finalizer();\n  } else {\n    finalizer.unsubscribe();\n  }\n}\n", "export var config = {\n  onUnhandledError: null,\n  onStoppedNotification: null,\n  Promise: undefined,\n  useDeprecatedSynchronousErrorHandling: false,\n  useDeprecatedNextContext: false\n};\n", "import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n  setTimeout: function (handler, timeout) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      args[_i - 2] = arguments[_i];\n    }\n    var delegate = timeoutProvider.delegate;\n    if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n      return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n    }\n    return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n  },\n  clearTimeout: function (handle) {\n    var delegate = timeoutProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n  },\n  delegate: undefined\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n  timeoutProvider.setTimeout(function () {\n    var onUnhandledError = config.onUnhandledError;\n    if (onUnhandledError) {\n      onUnhandledError(err);\n    } else {\n      throw err;\n    }\n  });\n}\n", "export function noop() {}\n", "export var COMPLETE_NOTIFICATION = function () {\n  return createNotification('C', undefined, undefined);\n}();\nexport function errorNotification(error) {\n  return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n  return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n  return {\n    kind: kind,\n    value: value,\n    error: error\n  };\n}\n", "import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n  if (config.useDeprecatedSynchronousErrorHandling) {\n    var isRoot = !context;\n    if (isRoot) {\n      context = {\n        errorThrown: false,\n        error: null\n      };\n    }\n    cb();\n    if (isRoot) {\n      var _a = context,\n        errorThrown = _a.errorThrown,\n        error = _a.error;\n      context = null;\n      if (errorThrown) {\n        throw error;\n      }\n    }\n  } else {\n    cb();\n  }\n}\nexport function captureError(err) {\n  if (config.useDeprecatedSynchronousErrorHandling && context) {\n    context.errorThrown = true;\n    context.error = err;\n  }\n}\n", "import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = function (_super) {\n  __extends(Subscriber, _super);\n  function Subscriber(destination) {\n    var _this = _super.call(this) || this;\n    _this.isStopped = false;\n    if (destination) {\n      _this.destination = destination;\n      if (isSubscription(destination)) {\n        destination.add(_this);\n      }\n    } else {\n      _this.destination = EMPTY_OBSERVER;\n    }\n    return _this;\n  }\n  Subscriber.create = function (next, error, complete) {\n    return new SafeSubscriber(next, error, complete);\n  };\n  Subscriber.prototype.next = function (value) {\n    if (this.isStopped) {\n      handleStoppedNotification(nextNotification(value), this);\n    } else {\n      this._next(value);\n    }\n  };\n  Subscriber.prototype.error = function (err) {\n    if (this.isStopped) {\n      handleStoppedNotification(errorNotification(err), this);\n    } else {\n      this.isStopped = true;\n      this._error(err);\n    }\n  };\n  Subscriber.prototype.complete = function () {\n    if (this.isStopped) {\n      handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n    } else {\n      this.isStopped = true;\n      this._complete();\n    }\n  };\n  Subscriber.prototype.unsubscribe = function () {\n    if (!this.closed) {\n      this.isStopped = true;\n      _super.prototype.unsubscribe.call(this);\n      this.destination = null;\n    }\n  };\n  Subscriber.prototype._next = function (value) {\n    this.destination.next(value);\n  };\n  Subscriber.prototype._error = function (err) {\n    try {\n      this.destination.error(err);\n    } finally {\n      this.unsubscribe();\n    }\n  };\n  Subscriber.prototype._complete = function () {\n    try {\n      this.destination.complete();\n    } finally {\n      this.unsubscribe();\n    }\n  };\n  return Subscriber;\n}(Subscription);\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n  return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = function () {\n  function ConsumerObserver(partialObserver) {\n    this.partialObserver = partialObserver;\n  }\n  ConsumerObserver.prototype.next = function (value) {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.next) {\n      try {\n        partialObserver.next(value);\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    }\n  };\n  ConsumerObserver.prototype.error = function (err) {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.error) {\n      try {\n        partialObserver.error(err);\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    } else {\n      handleUnhandledError(err);\n    }\n  };\n  ConsumerObserver.prototype.complete = function () {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.complete) {\n      try {\n        partialObserver.complete();\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    }\n  };\n  return ConsumerObserver;\n}();\nvar SafeSubscriber = function (_super) {\n  __extends(SafeSubscriber, _super);\n  function SafeSubscriber(observerOrNext, error, complete) {\n    var _this = _super.call(this) || this;\n    var partialObserver;\n    if (isFunction(observerOrNext) || !observerOrNext) {\n      partialObserver = {\n        next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,\n        error: error !== null && error !== void 0 ? error : undefined,\n        complete: complete !== null && complete !== void 0 ? complete : undefined\n      };\n    } else {\n      var context_1;\n      if (_this && config.useDeprecatedNextContext) {\n        context_1 = Object.create(observerOrNext);\n        context_1.unsubscribe = function () {\n          return _this.unsubscribe();\n        };\n        partialObserver = {\n          next: observerOrNext.next && bind(observerOrNext.next, context_1),\n          error: observerOrNext.error && bind(observerOrNext.error, context_1),\n          complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)\n        };\n      } else {\n        partialObserver = observerOrNext;\n      }\n    }\n    _this.destination = new ConsumerObserver(partialObserver);\n    return _this;\n  }\n  return SafeSubscriber;\n}(Subscriber);\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n  if (config.useDeprecatedSynchronousErrorHandling) {\n    captureError(error);\n  } else {\n    reportUnhandledError(error);\n  }\n}\nfunction defaultErrorHandler(err) {\n  throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n  var onStoppedNotification = config.onStoppedNotification;\n  onStoppedNotification && timeoutProvider.setTimeout(function () {\n    return onStoppedNotification(notification, subscriber);\n  });\n}\nexport var EMPTY_OBSERVER = {\n  closed: true,\n  next: noop,\n  error: defaultErrorHandler,\n  complete: noop\n};\n", "export var observable = function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}();\n", "export function identity(x) {\n  return x;\n}\n", "import { identity } from './identity';\nexport function pipe() {\n  var fns = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    fns[_i] = arguments[_i];\n  }\n  return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n  if (fns.length === 0) {\n    return identity;\n  }\n  if (fns.length === 1) {\n    return fns[0];\n  }\n  return function piped(input) {\n    return fns.reduce(function (prev, fn) {\n      return fn(prev);\n    }, input);\n  };\n}\n", "import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = function () {\n  function Observable(subscribe) {\n    if (subscribe) {\n      this._subscribe = subscribe;\n    }\n  }\n  Observable.prototype.lift = function (operator) {\n    var observable = new Observable();\n    observable.source = this;\n    observable.operator = operator;\n    return observable;\n  };\n  Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n    var _this = this;\n    var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n    errorContext(function () {\n      var _a = _this,\n        operator = _a.operator,\n        source = _a.source;\n      subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));\n    });\n    return subscriber;\n  };\n  Observable.prototype._trySubscribe = function (sink) {\n    try {\n      return this._subscribe(sink);\n    } catch (err) {\n      sink.error(err);\n    }\n  };\n  Observable.prototype.forEach = function (next, promiseCtor) {\n    var _this = this;\n    promiseCtor = getPromiseCtor(promiseCtor);\n    return new promiseCtor(function (resolve, reject) {\n      var subscriber = new SafeSubscriber({\n        next: function (value) {\n          try {\n            next(value);\n          } catch (err) {\n            reject(err);\n            subscriber.unsubscribe();\n          }\n        },\n        error: reject,\n        complete: resolve\n      });\n      _this.subscribe(subscriber);\n    });\n  };\n  Observable.prototype._subscribe = function (subscriber) {\n    var _a;\n    return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n  };\n  Observable.prototype[Symbol_observable] = function () {\n    return this;\n  };\n  Observable.prototype.pipe = function () {\n    var operations = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      operations[_i] = arguments[_i];\n    }\n    return pipeFromArray(operations)(this);\n  };\n  Observable.prototype.toPromise = function (promiseCtor) {\n    var _this = this;\n    promiseCtor = getPromiseCtor(promiseCtor);\n    return new promiseCtor(function (resolve, reject) {\n      var value;\n      _this.subscribe(function (x) {\n        return value = x;\n      }, function (err) {\n        return reject(err);\n      }, function () {\n        return resolve(value);\n      });\n    });\n  };\n  Observable.create = function (subscribe) {\n    return new Observable(subscribe);\n  };\n  return Observable;\n}();\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n  var _a;\n  return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n  return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n  return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);\n}\n", "import { isFunction } from './isFunction';\nexport function hasLift(source) {\n  return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n  return function (source) {\n    if (hasLift(source)) {\n      return source.lift(function (liftedSource) {\n        try {\n          return init(liftedSource, this);\n        } catch (err) {\n          this.error(err);\n        }\n      });\n    }\n    throw new TypeError('Unable to lift unknown Observable type');\n  };\n}\n", "import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n  return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = function (_super) {\n  __extends(OperatorSubscriber, _super);\n  function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n    var _this = _super.call(this, destination) || this;\n    _this.onFinalize = onFinalize;\n    _this.shouldUnsubscribe = shouldUnsubscribe;\n    _this._next = onNext ? function (value) {\n      try {\n        onNext(value);\n      } catch (err) {\n        destination.error(err);\n      }\n    } : _super.prototype._next;\n    _this._error = onError ? function (err) {\n      try {\n        onError(err);\n      } catch (err) {\n        destination.error(err);\n      } finally {\n        this.unsubscribe();\n      }\n    } : _super.prototype._error;\n    _this._complete = onComplete ? function () {\n      try {\n        onComplete();\n      } catch (err) {\n        destination.error(err);\n      } finally {\n        this.unsubscribe();\n      }\n    } : _super.prototype._complete;\n    return _this;\n  }\n  OperatorSubscriber.prototype.unsubscribe = function () {\n    var _a;\n    if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n      var closed_1 = this.closed;\n      _super.prototype.unsubscribe.call(this);\n      !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n    }\n  };\n  return OperatorSubscriber;\n}(Subscriber);\nexport { OperatorSubscriber };\n", "import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function refCount() {\n  return operate(function (source, subscriber) {\n    var connection = null;\n    source._refCount++;\n    var refCounter = createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () {\n      if (!source || source._refCount <= 0 || 0 < --source._refCount) {\n        connection = null;\n        return;\n      }\n      var sharedConnection = source._connection;\n      var conn = connection;\n      connection = null;\n      if (sharedConnection && (!conn || sharedConnection === conn)) {\n        sharedConnection.unsubscribe();\n      }\n      subscriber.unsubscribe();\n    });\n    source.subscribe(refCounter);\n    if (!refCounter.closed) {\n      connection = source.connect();\n    }\n  });\n}\n", "import { __extends } from \"tslib\";\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { hasLift } from '../util/lift';\nvar ConnectableObservable = function (_super) {\n  __extends(ConnectableObservable, _super);\n  function ConnectableObservable(source, subjectFactory) {\n    var _this = _super.call(this) || this;\n    _this.source = source;\n    _this.subjectFactory = subjectFactory;\n    _this._subject = null;\n    _this._refCount = 0;\n    _this._connection = null;\n    if (hasLift(source)) {\n      _this.lift = source.lift;\n    }\n    return _this;\n  }\n  ConnectableObservable.prototype._subscribe = function (subscriber) {\n    return this.getSubject().subscribe(subscriber);\n  };\n  ConnectableObservable.prototype.getSubject = function () {\n    var subject = this._subject;\n    if (!subject || subject.isStopped) {\n      this._subject = this.subjectFactory();\n    }\n    return this._subject;\n  };\n  ConnectableObservable.prototype._teardown = function () {\n    this._refCount = 0;\n    var _connection = this._connection;\n    this._subject = this._connection = null;\n    _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe();\n  };\n  ConnectableObservable.prototype.connect = function () {\n    var _this = this;\n    var connection = this._connection;\n    if (!connection) {\n      connection = this._connection = new Subscription();\n      var subject_1 = this.getSubject();\n      connection.add(this.source.subscribe(createOperatorSubscriber(subject_1, undefined, function () {\n        _this._teardown();\n        subject_1.complete();\n      }, function (err) {\n        _this._teardown();\n        subject_1.error(err);\n      }, function () {\n        return _this._teardown();\n      })));\n      if (connection.closed) {\n        this._connection = null;\n        connection = Subscription.EMPTY;\n      }\n    }\n    return connection;\n  };\n  ConnectableObservable.prototype.refCount = function () {\n    return higherOrderRefCount()(this);\n  };\n  return ConnectableObservable;\n}(Observable);\nexport { ConnectableObservable };\n", "export var performanceTimestampProvider = {\n  now: function () {\n    return (performanceTimestampProvider.delegate || performance).now();\n  },\n  delegate: undefined\n};\n", "import { __read, __spreadArray } from \"tslib\";\nimport { Subscription } from '../Subscription';\nexport var animationFrameProvider = {\n  schedule: function (callback) {\n    var request = requestAnimationFrame;\n    var cancel = cancelAnimationFrame;\n    var delegate = animationFrameProvider.delegate;\n    if (delegate) {\n      request = delegate.requestAnimationFrame;\n      cancel = delegate.cancelAnimationFrame;\n    }\n    var handle = request(function (timestamp) {\n      cancel = undefined;\n      callback(timestamp);\n    });\n    return new Subscription(function () {\n      return cancel === null || cancel === void 0 ? void 0 : cancel(handle);\n    });\n  },\n  requestAnimationFrame: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = animationFrameProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args)));\n  },\n  cancelAnimationFrame: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = animationFrameProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args)));\n  },\n  delegate: undefined\n};\n", "import { Observable } from '../../Observable';\nimport { performanceTimestampProvider } from '../../scheduler/performanceTimestampProvider';\nimport { animationFrameProvider } from '../../scheduler/animationFrameProvider';\nexport function animationFrames(timestampProvider) {\n  return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES;\n}\nfunction animationFramesFactory(timestampProvider) {\n  return new Observable(function (subscriber) {\n    var provider = timestampProvider || performanceTimestampProvider;\n    var start = provider.now();\n    var id = 0;\n    var run = function () {\n      if (!subscriber.closed) {\n        id = animationFrameProvider.requestAnimationFrame(function (timestamp) {\n          id = 0;\n          var now = provider.now();\n          subscriber.next({\n            timestamp: timestampProvider ? now : timestamp,\n            elapsed: now - start\n          });\n          run();\n        });\n      }\n    };\n    run();\n    return function () {\n      if (id) {\n        animationFrameProvider.cancelAnimationFrame(id);\n      }\n    };\n  });\n}\nvar DEFAULT_ANIMATION_FRAMES = animationFramesFactory();\n", "import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n  return function ObjectUnsubscribedErrorImpl() {\n    _super(this);\n    this.name = 'ObjectUnsubscribedError';\n    this.message = 'object unsubscribed';\n  };\n});\n", "import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = function (_super) {\n  __extends(Subject, _super);\n  function Subject() {\n    var _this = _super.call(this) || this;\n    _this.closed = false;\n    _this.currentObservers = null;\n    _this.observers = [];\n    _this.isStopped = false;\n    _this.hasError = false;\n    _this.thrownError = null;\n    return _this;\n  }\n  Subject.prototype.lift = function (operator) {\n    var subject = new AnonymousSubject(this, this);\n    subject.operator = operator;\n    return subject;\n  };\n  Subject.prototype._throwIfClosed = function () {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    }\n  };\n  Subject.prototype.next = function (value) {\n    var _this = this;\n    errorContext(function () {\n      var e_1, _a;\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        if (!_this.currentObservers) {\n          _this.currentObservers = Array.from(_this.observers);\n        }\n        try {\n          for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var observer = _c.value;\n            observer.next(value);\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n      }\n    });\n  };\n  Subject.prototype.error = function (err) {\n    var _this = this;\n    errorContext(function () {\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        _this.hasError = _this.isStopped = true;\n        _this.thrownError = err;\n        var observers = _this.observers;\n        while (observers.length) {\n          observers.shift().error(err);\n        }\n      }\n    });\n  };\n  Subject.prototype.complete = function () {\n    var _this = this;\n    errorContext(function () {\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        _this.isStopped = true;\n        var observers = _this.observers;\n        while (observers.length) {\n          observers.shift().complete();\n        }\n      }\n    });\n  };\n  Subject.prototype.unsubscribe = function () {\n    this.isStopped = this.closed = true;\n    this.observers = this.currentObservers = null;\n  };\n  Object.defineProperty(Subject.prototype, \"observed\", {\n    get: function () {\n      var _a;\n      return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Subject.prototype._trySubscribe = function (subscriber) {\n    this._throwIfClosed();\n    return _super.prototype._trySubscribe.call(this, subscriber);\n  };\n  Subject.prototype._subscribe = function (subscriber) {\n    this._throwIfClosed();\n    this._checkFinalizedStatuses(subscriber);\n    return this._innerSubscribe(subscriber);\n  };\n  Subject.prototype._innerSubscribe = function (subscriber) {\n    var _this = this;\n    var _a = this,\n      hasError = _a.hasError,\n      isStopped = _a.isStopped,\n      observers = _a.observers;\n    if (hasError || isStopped) {\n      return EMPTY_SUBSCRIPTION;\n    }\n    this.currentObservers = null;\n    observers.push(subscriber);\n    return new Subscription(function () {\n      _this.currentObservers = null;\n      arrRemove(observers, subscriber);\n    });\n  };\n  Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n    var _a = this,\n      hasError = _a.hasError,\n      thrownError = _a.thrownError,\n      isStopped = _a.isStopped;\n    if (hasError) {\n      subscriber.error(thrownError);\n    } else if (isStopped) {\n      subscriber.complete();\n    }\n  };\n  Subject.prototype.asObservable = function () {\n    var observable = new Observable();\n    observable.source = this;\n    return observable;\n  };\n  Subject.create = function (destination, source) {\n    return new AnonymousSubject(destination, source);\n  };\n  return Subject;\n}(Observable);\nexport { Subject };\nvar AnonymousSubject = function (_super) {\n  __extends(AnonymousSubject, _super);\n  function AnonymousSubject(destination, source) {\n    var _this = _super.call(this) || this;\n    _this.destination = destination;\n    _this.source = source;\n    return _this;\n  }\n  AnonymousSubject.prototype.next = function (value) {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n  };\n  AnonymousSubject.prototype.error = function (err) {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n  };\n  AnonymousSubject.prototype.complete = function () {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n  };\n  AnonymousSubject.prototype._subscribe = function (subscriber) {\n    var _a, _b;\n    return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n  };\n  return AnonymousSubject;\n}(Subject);\nexport { AnonymousSubject };\n", "import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = function (_super) {\n  __extends(BehaviorSubject, _super);\n  function BehaviorSubject(_value) {\n    var _this = _super.call(this) || this;\n    _this._value = _value;\n    return _this;\n  }\n  Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n    get: function () {\n      return this.getValue();\n    },\n    enumerable: false,\n    configurable: true\n  });\n  BehaviorSubject.prototype._subscribe = function (subscriber) {\n    var subscription = _super.prototype._subscribe.call(this, subscriber);\n    !subscription.closed && subscriber.next(this._value);\n    return subscription;\n  };\n  BehaviorSubject.prototype.getValue = function () {\n    var _a = this,\n      hasError = _a.hasError,\n      thrownError = _a.thrownError,\n      _value = _a._value;\n    if (hasError) {\n      throw thrownError;\n    }\n    this._throwIfClosed();\n    return _value;\n  };\n  BehaviorSubject.prototype.next = function (value) {\n    _super.prototype.next.call(this, this._value = value);\n  };\n  return BehaviorSubject;\n}(Subject);\nexport { BehaviorSubject };\n", "export var dateTimestampProvider = {\n  now: function () {\n    return (dateTimestampProvider.delegate || Date).now();\n  },\n  delegate: undefined\n};\n", "import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar ReplaySubject = function (_super) {\n  __extends(ReplaySubject, _super);\n  function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n    if (_bufferSize === void 0) {\n      _bufferSize = Infinity;\n    }\n    if (_windowTime === void 0) {\n      _windowTime = Infinity;\n    }\n    if (_timestampProvider === void 0) {\n      _timestampProvider = dateTimestampProvider;\n    }\n    var _this = _super.call(this) || this;\n    _this._bufferSize = _bufferSize;\n    _this._windowTime = _windowTime;\n    _this._timestampProvider = _timestampProvider;\n    _this._buffer = [];\n    _this._infiniteTimeWindow = true;\n    _this._infiniteTimeWindow = _windowTime === Infinity;\n    _this._bufferSize = Math.max(1, _bufferSize);\n    _this._windowTime = Math.max(1, _windowTime);\n    return _this;\n  }\n  ReplaySubject.prototype.next = function (value) {\n    var _a = this,\n      isStopped = _a.isStopped,\n      _buffer = _a._buffer,\n      _infiniteTimeWindow = _a._infiniteTimeWindow,\n      _timestampProvider = _a._timestampProvider,\n      _windowTime = _a._windowTime;\n    if (!isStopped) {\n      _buffer.push(value);\n      !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n    }\n    this._trimBuffer();\n    _super.prototype.next.call(this, value);\n  };\n  ReplaySubject.prototype._subscribe = function (subscriber) {\n    this._throwIfClosed();\n    this._trimBuffer();\n    var subscription = this._innerSubscribe(subscriber);\n    var _a = this,\n      _infiniteTimeWindow = _a._infiniteTimeWindow,\n      _buffer = _a._buffer;\n    var copy = _buffer.slice();\n    for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n      subscriber.next(copy[i]);\n    }\n    this._checkFinalizedStatuses(subscriber);\n    return subscription;\n  };\n  ReplaySubject.prototype._trimBuffer = function () {\n    var _a = this,\n      _bufferSize = _a._bufferSize,\n      _timestampProvider = _a._timestampProvider,\n      _buffer = _a._buffer,\n      _infiniteTimeWindow = _a._infiniteTimeWindow;\n    var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n    _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n    if (!_infiniteTimeWindow) {\n      var now = _timestampProvider.now();\n      var last = 0;\n      for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n        last = i;\n      }\n      last && _buffer.splice(0, last + 1);\n    }\n  };\n  return ReplaySubject;\n}(Subject);\nexport { ReplaySubject };\n", "import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar AsyncSubject = function (_super) {\n  __extends(AsyncSubject, _super);\n  function AsyncSubject() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n    _this._value = null;\n    _this._hasValue = false;\n    _this._isComplete = false;\n    return _this;\n  }\n  AsyncSubject.prototype._checkFinalizedStatuses = function (subscriber) {\n    var _a = this,\n      hasError = _a.hasError,\n      _hasValue = _a._hasValue,\n      _value = _a._value,\n      thrownError = _a.thrownError,\n      isStopped = _a.isStopped,\n      _isComplete = _a._isComplete;\n    if (hasError) {\n      subscriber.error(thrownError);\n    } else if (isStopped || _isComplete) {\n      _hasValue && subscriber.next(_value);\n      subscriber.complete();\n    }\n  };\n  AsyncSubject.prototype.next = function (value) {\n    if (!this.isStopped) {\n      this._value = value;\n      this._hasValue = true;\n    }\n  };\n  AsyncSubject.prototype.complete = function () {\n    var _a = this,\n      _hasValue = _a._hasValue,\n      _value = _a._value,\n      _isComplete = _a._isComplete;\n    if (!_isComplete) {\n      this._isComplete = true;\n      _hasValue && _super.prototype.next.call(this, _value);\n      _super.prototype.complete.call(this);\n    }\n  };\n  return AsyncSubject;\n}(Subject);\nexport { AsyncSubject };\n", "import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = function (_super) {\n  __extends(Action, _super);\n  function Action(scheduler, work) {\n    return _super.call(this) || this;\n  }\n  Action.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return this;\n  };\n  return Action;\n}(Subscription);\nexport { Action };\n", "import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n  setInterval: function (handler, timeout) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      args[_i - 2] = arguments[_i];\n    }\n    var delegate = intervalProvider.delegate;\n    if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n      return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n    }\n    return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n  },\n  clearInterval: function (handle) {\n    var delegate = intervalProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n  },\n  delegate: undefined\n};\n", "import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = function (_super) {\n  __extends(AsyncAction, _super);\n  function AsyncAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    _this.pending = false;\n    return _this;\n  }\n  AsyncAction.prototype.schedule = function (state, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (this.closed) {\n      return this;\n    }\n    this.state = state;\n    var id = this.id;\n    var scheduler = this.scheduler;\n    if (id != null) {\n      this.id = this.recycleAsyncId(scheduler, id, delay);\n    }\n    this.pending = true;\n    this.delay = delay;\n    this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n    return this;\n  };\n  AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n  };\n  AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null && this.delay === delay && this.pending === false) {\n      return id;\n    }\n    if (id != null) {\n      intervalProvider.clearInterval(id);\n    }\n    return undefined;\n  };\n  AsyncAction.prototype.execute = function (state, delay) {\n    if (this.closed) {\n      return new Error('executing a cancelled action');\n    }\n    this.pending = false;\n    var error = this._execute(state, delay);\n    if (error) {\n      return error;\n    } else if (this.pending === false && this.id != null) {\n      this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n    }\n  };\n  AsyncAction.prototype._execute = function (state, _delay) {\n    var errored = false;\n    var errorValue;\n    try {\n      this.work(state);\n    } catch (e) {\n      errored = true;\n      errorValue = e ? e : new Error('Scheduled action threw falsy error');\n    }\n    if (errored) {\n      this.unsubscribe();\n      return errorValue;\n    }\n  };\n  AsyncAction.prototype.unsubscribe = function () {\n    if (!this.closed) {\n      var _a = this,\n        id = _a.id,\n        scheduler = _a.scheduler;\n      var actions = scheduler.actions;\n      this.work = this.state = this.scheduler = null;\n      this.pending = false;\n      arrRemove(actions, this);\n      if (id != null) {\n        this.id = this.recycleAsyncId(scheduler, id, null);\n      }\n      this.delay = null;\n      _super.prototype.unsubscribe.call(this);\n    }\n  };\n  return AsyncAction;\n}(Action);\nexport { AsyncAction };\n", "var nextHandle = 1;\nvar resolved;\nvar activeHandles = {};\nfunction findAndClearHandle(handle) {\n  if (handle in activeHandles) {\n    delete activeHandles[handle];\n    return true;\n  }\n  return false;\n}\nexport var Immediate = {\n  setImmediate: function (cb) {\n    var handle = nextHandle++;\n    activeHandles[handle] = true;\n    if (!resolved) {\n      resolved = Promise.resolve();\n    }\n    resolved.then(function () {\n      return findAndClearHandle(handle) && cb();\n    });\n    return handle;\n  },\n  clearImmediate: function (handle) {\n    findAndClearHandle(handle);\n  }\n};\nexport var TestTools = {\n  pending: function () {\n    return Object.keys(activeHandles).length;\n  }\n};\n", "import { __read, __spreadArray } from \"tslib\";\nimport { Immediate } from '../util/Immediate';\nvar setImmediate = Immediate.setImmediate,\n  clearImmediate = Immediate.clearImmediate;\nexport var immediateProvider = {\n  setImmediate: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = immediateProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args)));\n  },\n  clearImmediate: function (handle) {\n    var delegate = immediateProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);\n  },\n  delegate: undefined\n};\n", "import { __extends } from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nimport { immediateProvider } from './immediateProvider';\nvar AsapAction = function (_super) {\n  __extends(AsapAction, _super);\n  function AsapAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay !== null && delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.actions.push(this);\n    return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n  };\n  AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null ? delay > 0 : this.delay > 0) {\n      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n    }\n    var actions = scheduler.actions;\n    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n      immediateProvider.clearImmediate(id);\n      if (scheduler._scheduled === id) {\n        scheduler._scheduled = undefined;\n      }\n    }\n    return undefined;\n  };\n  return AsapAction;\n}(AsyncAction);\nexport { AsapAction };\n", "import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = function () {\n  function Scheduler(schedulerActionCtor, now) {\n    if (now === void 0) {\n      now = Scheduler.now;\n    }\n    this.schedulerActionCtor = schedulerActionCtor;\n    this.now = now;\n  }\n  Scheduler.prototype.schedule = function (work, delay, state) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return new this.schedulerActionCtor(this, work).schedule(state, delay);\n  };\n  Scheduler.now = dateTimestampProvider.now;\n  return Scheduler;\n}();\nexport { Scheduler };\n", "import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = function (_super) {\n  __extends(AsyncScheduler, _super);\n  function AsyncScheduler(SchedulerAction, now) {\n    if (now === void 0) {\n      now = Scheduler.now;\n    }\n    var _this = _super.call(this, SchedulerAction, now) || this;\n    _this.actions = [];\n    _this._active = false;\n    return _this;\n  }\n  AsyncScheduler.prototype.flush = function (action) {\n    var actions = this.actions;\n    if (this._active) {\n      actions.push(action);\n      return;\n    }\n    var error;\n    this._active = true;\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while (action = actions.shift());\n    this._active = false;\n    if (error) {\n      while (action = actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AsyncScheduler;\n}(Scheduler);\nexport { AsyncScheduler };\n", "import { __extends } from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AsapScheduler = function (_super) {\n  __extends(AsapScheduler, _super);\n  function AsapScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  AsapScheduler.prototype.flush = function (action) {\n    this._active = true;\n    var flushId = this._scheduled;\n    this._scheduled = undefined;\n    var actions = this.actions;\n    var error;\n    action = action || actions.shift();\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while ((action = actions[0]) && action.id === flushId && actions.shift());\n    this._active = false;\n    if (error) {\n      while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AsapScheduler;\n}(AsyncScheduler);\nexport { AsapScheduler };\n", "import { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\nexport var asapScheduler = new AsapScheduler(AsapAction);\nexport var asap = asapScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n", "import { __extends } from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nvar QueueAction = function (_super) {\n  __extends(QueueAction, _super);\n  function QueueAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  QueueAction.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay > 0) {\n      return _super.prototype.schedule.call(this, state, delay);\n    }\n    this.delay = delay;\n    this.state = state;\n    this.scheduler.flush(this);\n    return this;\n  };\n  QueueAction.prototype.execute = function (state, delay) {\n    return delay > 0 || this.closed ? _super.prototype.execute.call(this, state, delay) : this._execute(state, delay);\n  };\n  QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null && delay > 0 || delay == null && this.delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.flush(this);\n    return 0;\n  };\n  return QueueAction;\n}(AsyncAction);\nexport { QueueAction };\n", "import { __extends } from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar QueueScheduler = function (_super) {\n  __extends(QueueScheduler, _super);\n  function QueueScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  return QueueScheduler;\n}(AsyncScheduler);\nexport { QueueScheduler };\n", "import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\nexport var queueScheduler = new QueueScheduler(QueueAction);\nexport var queue = queueScheduler;\n", "import { __extends } from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nimport { animationFrameProvider } from './animationFrameProvider';\nvar AnimationFrameAction = function (_super) {\n  __extends(AnimationFrameAction, _super);\n  function AnimationFrameAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay !== null && delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.actions.push(this);\n    return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(function () {\n      return scheduler.flush(undefined);\n    }));\n  };\n  AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null ? delay > 0 : this.delay > 0) {\n      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n    }\n    var actions = scheduler.actions;\n    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n      animationFrameProvider.cancelAnimationFrame(id);\n      scheduler._scheduled = undefined;\n    }\n    return undefined;\n  };\n  return AnimationFrameAction;\n}(AsyncAction);\nexport { AnimationFrameAction };\n", "import { __extends } from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AnimationFrameScheduler = function (_super) {\n  __extends(AnimationFrameScheduler, _super);\n  function AnimationFrameScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  AnimationFrameScheduler.prototype.flush = function (action) {\n    this._active = true;\n    var flushId = this._scheduled;\n    this._scheduled = undefined;\n    var actions = this.actions;\n    var error;\n    action = action || actions.shift();\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while ((action = actions[0]) && action.id === flushId && actions.shift());\n    this._active = false;\n    if (error) {\n      while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AnimationFrameScheduler;\n}(AsyncScheduler);\nexport { AnimationFrameScheduler };\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport var animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport var animationFrame = animationFrameScheduler;\n", "import { __extends } from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nvar VirtualTimeScheduler = function (_super) {\n  __extends(VirtualTimeScheduler, _super);\n  function VirtualTimeScheduler(schedulerActionCtor, maxFrames) {\n    if (schedulerActionCtor === void 0) {\n      schedulerActionCtor = VirtualAction;\n    }\n    if (maxFrames === void 0) {\n      maxFrames = Infinity;\n    }\n    var _this = _super.call(this, schedulerActionCtor, function () {\n      return _this.frame;\n    }) || this;\n    _this.maxFrames = maxFrames;\n    _this.frame = 0;\n    _this.index = -1;\n    return _this;\n  }\n  VirtualTimeScheduler.prototype.flush = function () {\n    var _a = this,\n      actions = _a.actions,\n      maxFrames = _a.maxFrames;\n    var error;\n    var action;\n    while ((action = actions[0]) && action.delay <= maxFrames) {\n      actions.shift();\n      this.frame = action.delay;\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    }\n    if (error) {\n      while (action = actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  VirtualTimeScheduler.frameTimeFactor = 10;\n  return VirtualTimeScheduler;\n}(AsyncScheduler);\nexport { VirtualTimeScheduler };\nvar VirtualAction = function (_super) {\n  __extends(VirtualAction, _super);\n  function VirtualAction(scheduler, work, index) {\n    if (index === void 0) {\n      index = scheduler.index += 1;\n    }\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    _this.index = index;\n    _this.active = true;\n    _this.index = scheduler.index = index;\n    return _this;\n  }\n  VirtualAction.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (Number.isFinite(delay)) {\n      if (!this.id) {\n        return _super.prototype.schedule.call(this, state, delay);\n      }\n      this.active = false;\n      var action = new VirtualAction(this.scheduler, this.work);\n      this.add(action);\n      return action.schedule(state, delay);\n    } else {\n      return Subscription.EMPTY;\n    }\n  };\n  VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    this.delay = scheduler.frame + delay;\n    var actions = scheduler.actions;\n    actions.push(this);\n    actions.sort(VirtualAction.sortActions);\n    return 1;\n  };\n  VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return undefined;\n  };\n  VirtualAction.prototype._execute = function (state, delay) {\n    if (this.active === true) {\n      return _super.prototype._execute.call(this, state, delay);\n    }\n  };\n  VirtualAction.sortActions = function (a, b) {\n    if (a.delay === b.delay) {\n      if (a.index === b.index) {\n        return 0;\n      } else if (a.index > b.index) {\n        return 1;\n      } else {\n        return -1;\n      }\n    } else if (a.delay > b.delay) {\n      return 1;\n    } else {\n      return -1;\n    }\n  };\n  return VirtualAction;\n}(AsyncAction);\nexport { VirtualAction };\n", "import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) {\n  return subscriber.complete();\n});\nexport function empty(scheduler) {\n  return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n  return new Observable(function (subscriber) {\n    return scheduler.schedule(function () {\n      return subscriber.complete();\n    });\n  });\n}\n", "import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n  return value && isFunction(value.schedule);\n}\n", "import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n  return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n  return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n  return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n  return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n", "export var isArrayLike = function (x) {\n  return x && typeof x.length === 'number' && typeof x !== 'function';\n};\n", "import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n  return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n", "import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n  return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n  return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n", "export function createInvalidObservableTypeError(input) {\n  return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n", "export function getSymbolIterator() {\n  if (typeof Symbol !== 'function' || !Symbol.iterator) {\n    return '@@iterator';\n  }\n  return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n  return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n", "import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n  return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n    var reader, _a, value, done;\n    return __generator(this, function (_b) {\n      switch (_b.label) {\n        case 0:\n          reader = readableStream.getReader();\n          _b.label = 1;\n        case 1:\n          _b.trys.push([1,, 9, 10]);\n          _b.label = 2;\n        case 2:\n          if (!true) return [3, 8];\n          return [4, __await(reader.read())];\n        case 3:\n          _a = _b.sent(), value = _a.value, done = _a.done;\n          if (!done) return [3, 5];\n          return [4, __await(void 0)];\n        case 4:\n          return [2, _b.sent()];\n        case 5:\n          return [4, __await(value)];\n        case 6:\n          return [4, _b.sent()];\n        case 7:\n          _b.sent();\n          return [3, 2];\n        case 8:\n          return [3, 10];\n        case 9:\n          reader.releaseLock();\n          return [7];\n        case 10:\n          return [2];\n      }\n    });\n  });\n}\nexport function isReadableStreamLike(obj) {\n  return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n", "import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n  if (input instanceof Observable) {\n    return input;\n  }\n  if (input != null) {\n    if (isInteropObservable(input)) {\n      return fromInteropObservable(input);\n    }\n    if (isArrayLike(input)) {\n      return fromArrayLike(input);\n    }\n    if (isPromise(input)) {\n      return fromPromise(input);\n    }\n    if (isAsyncIterable(input)) {\n      return fromAsyncIterable(input);\n    }\n    if (isIterable(input)) {\n      return fromIterable(input);\n    }\n    if (isReadableStreamLike(input)) {\n      return fromReadableStreamLike(input);\n    }\n  }\n  throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n  return new Observable(function (subscriber) {\n    var obs = obj[Symbol_observable]();\n    if (isFunction(obs.subscribe)) {\n      return obs.subscribe(subscriber);\n    }\n    throw new TypeError('Provided object does not correctly implement Symbol.observable');\n  });\n}\nexport function fromArrayLike(array) {\n  return new Observable(function (subscriber) {\n    for (var i = 0; i < array.length && !subscriber.closed; i++) {\n      subscriber.next(array[i]);\n    }\n    subscriber.complete();\n  });\n}\nexport function fromPromise(promise) {\n  return new Observable(function (subscriber) {\n    promise.then(function (value) {\n      if (!subscriber.closed) {\n        subscriber.next(value);\n        subscriber.complete();\n      }\n    }, function (err) {\n      return subscriber.error(err);\n    }).then(null, reportUnhandledError);\n  });\n}\nexport function fromIterable(iterable) {\n  return new Observable(function (subscriber) {\n    var e_1, _a;\n    try {\n      for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n        var value = iterable_1_1.value;\n        subscriber.next(value);\n        if (subscriber.closed) {\n          return;\n        }\n      }\n    } catch (e_1_1) {\n      e_1 = {\n        error: e_1_1\n      };\n    } finally {\n      try {\n        if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n      } finally {\n        if (e_1) throw e_1.error;\n      }\n    }\n    subscriber.complete();\n  });\n}\nexport function fromAsyncIterable(asyncIterable) {\n  return new Observable(function (subscriber) {\n    process(asyncIterable, subscriber).catch(function (err) {\n      return subscriber.error(err);\n    });\n  });\n}\nexport function fromReadableStreamLike(readableStream) {\n  return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n  var asyncIterable_1, asyncIterable_1_1;\n  var e_2, _a;\n  return __awaiter(this, void 0, void 0, function () {\n    var value, e_2_1;\n    return __generator(this, function (_b) {\n      switch (_b.label) {\n        case 0:\n          _b.trys.push([0, 5, 6, 11]);\n          asyncIterable_1 = __asyncValues(asyncIterable);\n          _b.label = 1;\n        case 1:\n          return [4, asyncIterable_1.next()];\n        case 2:\n          if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n          value = asyncIterable_1_1.value;\n          subscriber.next(value);\n          if (subscriber.closed) {\n            return [2];\n          }\n          _b.label = 3;\n        case 3:\n          return [3, 1];\n        case 4:\n          return [3, 11];\n        case 5:\n          e_2_1 = _b.sent();\n          e_2 = {\n            error: e_2_1\n          };\n          return [3, 11];\n        case 6:\n          _b.trys.push([6,, 9, 10]);\n          if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n          return [4, _a.call(asyncIterable_1)];\n        case 7:\n          _b.sent();\n          _b.label = 8;\n        case 8:\n          return [3, 10];\n        case 9:\n          if (e_2) throw e_2.error;\n          return [7];\n        case 10:\n          return [7];\n        case 11:\n          subscriber.complete();\n          return [2];\n      }\n    });\n  });\n}\n", "export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  if (repeat === void 0) {\n    repeat = false;\n  }\n  var scheduleSubscription = scheduler.schedule(function () {\n    work();\n    if (repeat) {\n      parentSubscription.add(this.schedule(null, delay));\n    } else {\n      this.unsubscribe();\n    }\n  }, delay);\n  parentSubscription.add(scheduleSubscription);\n  if (!repeat) {\n    return scheduleSubscription;\n  }\n}\n", "import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return operate(function (source, subscriber) {\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      return executeSchedule(subscriber, scheduler, function () {\n        return subscriber.next(value);\n      }, delay);\n    }, function () {\n      return executeSchedule(subscriber, scheduler, function () {\n        return subscriber.complete();\n      }, delay);\n    }, function (err) {\n      return executeSchedule(subscriber, scheduler, function () {\n        return subscriber.error(err);\n      }, delay);\n    }));\n  });\n}\n", "import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return operate(function (source, subscriber) {\n    subscriber.add(scheduler.schedule(function () {\n      return source.subscribe(subscriber);\n    }, delay));\n  });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n  return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n  return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n", "import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n  return new Observable(function (subscriber) {\n    var i = 0;\n    return scheduler.schedule(function () {\n      if (i === input.length) {\n        subscriber.complete();\n      } else {\n        subscriber.next(input[i++]);\n        if (!subscriber.closed) {\n          this.schedule();\n        }\n      }\n    });\n  });\n}\n", "import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n  return new Observable(function (subscriber) {\n    var iterator;\n    executeSchedule(subscriber, scheduler, function () {\n      iterator = input[Symbol_iterator]();\n      executeSchedule(subscriber, scheduler, function () {\n        var _a;\n        var value;\n        var done;\n        try {\n          _a = iterator.next(), value = _a.value, done = _a.done;\n        } catch (err) {\n          subscriber.error(err);\n          return;\n        }\n        if (done) {\n          subscriber.complete();\n        } else {\n          subscriber.next(value);\n        }\n      }, 0, true);\n    });\n    return function () {\n      return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();\n    };\n  });\n}\n", "import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n  if (!input) {\n    throw new Error('Iterable cannot be null');\n  }\n  return new Observable(function (subscriber) {\n    executeSchedule(subscriber, scheduler, function () {\n      var iterator = input[Symbol.asyncIterator]();\n      executeSchedule(subscriber, scheduler, function () {\n        iterator.next().then(function (result) {\n          if (result.done) {\n            subscriber.complete();\n          } else {\n            subscriber.next(result.value);\n          }\n        });\n      }, 0, true);\n    });\n  });\n}\n", "import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n  return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n", "import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n  if (input != null) {\n    if (isInteropObservable(input)) {\n      return scheduleObservable(input, scheduler);\n    }\n    if (isArrayLike(input)) {\n      return scheduleArray(input, scheduler);\n    }\n    if (isPromise(input)) {\n      return schedulePromise(input, scheduler);\n    }\n    if (isAsyncIterable(input)) {\n      return scheduleAsyncIterable(input, scheduler);\n    }\n    if (isIterable(input)) {\n      return scheduleIterable(input, scheduler);\n    }\n    if (isReadableStreamLike(input)) {\n      return scheduleReadableStreamLike(input, scheduler);\n    }\n  }\n  throw createInvalidObservableTypeError(input);\n}\n", "import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n  return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n", "import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = popScheduler(args);\n  return from(args, scheduler);\n}\n", "import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nexport function throwError(errorOrErrorFactory, scheduler) {\n  var errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () {\n    return errorOrErrorFactory;\n  };\n  var init = function (subscriber) {\n    return subscriber.error(errorFactory());\n  };\n  return new Observable(scheduler ? function (subscriber) {\n    return scheduler.schedule(init, 0, subscriber);\n  } : init);\n}\n", "import { EMPTY } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nimport { isFunction } from './util/isFunction';\nexport var NotificationKind;\n(function (NotificationKind) {\n  NotificationKind[\"NEXT\"] = \"N\";\n  NotificationKind[\"ERROR\"] = \"E\";\n  NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind || (NotificationKind = {}));\nvar Notification = function () {\n  function Notification(kind, value, error) {\n    this.kind = kind;\n    this.value = value;\n    this.error = error;\n    this.hasValue = kind === 'N';\n  }\n  Notification.prototype.observe = function (observer) {\n    return observeNotification(this, observer);\n  };\n  Notification.prototype.do = function (nextHandler, errorHandler, completeHandler) {\n    var _a = this,\n      kind = _a.kind,\n      value = _a.value,\n      error = _a.error;\n    return kind === 'N' ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === 'E' ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler();\n  };\n  Notification.prototype.accept = function (nextOrObserver, error, complete) {\n    var _a;\n    return isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) ? this.observe(nextOrObserver) : this.do(nextOrObserver, error, complete);\n  };\n  Notification.prototype.toObservable = function () {\n    var _a = this,\n      kind = _a.kind,\n      value = _a.value,\n      error = _a.error;\n    var result = kind === 'N' ? of(value) : kind === 'E' ? throwError(function () {\n      return error;\n    }) : kind === 'C' ? EMPTY : 0;\n    if (!result) {\n      throw new TypeError(\"Unexpected notification kind \" + kind);\n    }\n    return result;\n  };\n  Notification.createNext = function (value) {\n    return new Notification('N', value);\n  };\n  Notification.createError = function (err) {\n    return new Notification('E', undefined, err);\n  };\n  Notification.createComplete = function () {\n    return Notification.completeNotification;\n  };\n  Notification.completeNotification = new Notification('C');\n  return Notification;\n}();\nexport { Notification };\nexport function observeNotification(notification, observer) {\n  var _a, _b, _c;\n  var _d = notification,\n    kind = _d.kind,\n    value = _d.value,\n    error = _d.error;\n  if (typeof kind !== 'string') {\n    throw new TypeError('Invalid notification, missing \"kind\"');\n  }\n  kind === 'N' ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === 'E' ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);\n}\n", "import { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\nexport function isObservable(obj) {\n  return !!obj && (obj instanceof Observable || isFunction(obj.lift) && isFunction(obj.subscribe));\n}\n", "import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) {\n  return function EmptyErrorImpl() {\n    _super(this);\n    this.name = 'EmptyError';\n    this.message = 'no elements in sequence';\n  };\n});\n", "import { createErrorClass } from './createErrorClass';\nexport var ArgumentOutOfRangeError = createErrorClass(function (_super) {\n  return function ArgumentOutOfRangeErrorImpl() {\n    _super(this);\n    this.name = 'ArgumentOutOfRangeError';\n    this.message = 'argument out of range';\n  };\n});\n", "import { createErrorClass } from './createErrorClass';\nexport var NotFoundError = createErrorClass(function (_super) {\n  return function NotFoundErrorImpl(message) {\n    _super(this);\n    this.name = 'NotFoundError';\n    this.message = message;\n  };\n});\n", "import { createErrorClass } from './createErrorClass';\nexport var SequenceError = createErrorClass(function (_super) {\n  return function SequenceErrorImpl(message) {\n    _super(this);\n    this.name = 'SequenceError';\n    this.message = message;\n  };\n});\n", "import { asyncScheduler } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport var TimeoutError = createErrorClass(function (_super) {\n  return function TimeoutErrorImpl(info) {\n    if (info === void 0) {\n      info = null;\n    }\n    _super(this);\n    this.message = 'Timeout has occurred';\n    this.name = 'TimeoutError';\n    this.info = info;\n  };\n});\nexport function timeout(config, schedulerArg) {\n  var _a = isValidDate(config) ? {\n      first: config\n    } : typeof config === 'number' ? {\n      each: config\n    } : config,\n    first = _a.first,\n    each = _a.each,\n    _b = _a.with,\n    _with = _b === void 0 ? timeoutErrorFactory : _b,\n    _c = _a.scheduler,\n    scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : asyncScheduler : _c,\n    _d = _a.meta,\n    meta = _d === void 0 ? null : _d;\n  if (first == null && each == null) {\n    throw new TypeError('No timeout provided.');\n  }\n  return operate(function (source, subscriber) {\n    var originalSourceSubscription;\n    var timerSubscription;\n    var lastValue = null;\n    var seen = 0;\n    var startTimer = function (delay) {\n      timerSubscription = executeSchedule(subscriber, scheduler, function () {\n        try {\n          originalSourceSubscription.unsubscribe();\n          innerFrom(_with({\n            meta: meta,\n            lastValue: lastValue,\n            seen: seen\n          })).subscribe(subscriber);\n        } catch (err) {\n          subscriber.error(err);\n        }\n      }, delay);\n    };\n    originalSourceSubscription = source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n      seen++;\n      subscriber.next(lastValue = value);\n      each > 0 && startTimer(each);\n    }, undefined, undefined, function () {\n      if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {\n        timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n      }\n      lastValue = null;\n    }));\n    !seen && startTimer(first != null ? typeof first === 'number' ? first : +first - scheduler.now() : each);\n  });\n}\nfunction timeoutErrorFactory(info) {\n  throw new TimeoutError(info);\n}\n", "import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n  return operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      subscriber.next(project.call(thisArg, value, index++));\n    }));\n  });\n}\n", "import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n  return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n  return map(function (args) {\n    return callOrApply(fn, args);\n  });\n}\n", "var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf,\n  objectProto = Object.prototype,\n  getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n  if (args.length === 1) {\n    var first_1 = args[0];\n    if (isArray(first_1)) {\n      return {\n        args: first_1,\n        keys: null\n      };\n    }\n    if (isPOJO(first_1)) {\n      var keys = getKeys(first_1);\n      return {\n        args: keys.map(function (key) {\n          return first_1[key];\n        }),\n        keys: keys\n      };\n    }\n  }\n  return {\n    args: args,\n    keys: null\n  };\n}\nfunction isPOJO(obj) {\n  return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n", "export function createObject(keys, values) {\n  return keys.reduce(function (result, key, i) {\n    return result[key] = values[i], result;\n  }, {});\n}\n", "import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = popScheduler(args);\n  var resultSelector = popResultSelector(args);\n  var _a = argsArgArrayOrObject(args),\n    observables = _a.args,\n    keys = _a.keys;\n  if (observables.length === 0) {\n    return from([], scheduler);\n  }\n  var result = new Observable(combineLatestInit(observables, scheduler, keys ? function (values) {\n    return createObject(keys, values);\n  } : identity));\n  return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n  if (valueTransform === void 0) {\n    valueTransform = identity;\n  }\n  return function (subscriber) {\n    maybeSchedule(scheduler, function () {\n      var length = observables.length;\n      var values = new Array(length);\n      var active = length;\n      var remainingFirstValues = length;\n      var _loop_1 = function (i) {\n        maybeSchedule(scheduler, function () {\n          var source = from(observables[i], scheduler);\n          var hasFirstValue = false;\n          source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            values[i] = value;\n            if (!hasFirstValue) {\n              hasFirstValue = true;\n              remainingFirstValues--;\n            }\n            if (!remainingFirstValues) {\n              subscriber.next(valueTransform(values.slice()));\n            }\n          }, function () {\n            if (! --active) {\n              subscriber.complete();\n            }\n          }));\n        }, subscriber);\n      };\n      for (var i = 0; i < length; i++) {\n        _loop_1(i);\n      }\n    }, subscriber);\n  };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n  if (scheduler) {\n    executeSchedule(subscription, scheduler, execute);\n  } else {\n    execute();\n  }\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n  var buffer = [];\n  var active = 0;\n  var index = 0;\n  var isComplete = false;\n  var checkComplete = function () {\n    if (isComplete && !buffer.length && !active) {\n      subscriber.complete();\n    }\n  };\n  var outerNext = function (value) {\n    return active < concurrent ? doInnerSub(value) : buffer.push(value);\n  };\n  var doInnerSub = function (value) {\n    expand && subscriber.next(value);\n    active++;\n    var innerComplete = false;\n    innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n      onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n      if (expand) {\n        outerNext(innerValue);\n      } else {\n        subscriber.next(innerValue);\n      }\n    }, function () {\n      innerComplete = true;\n    }, undefined, function () {\n      if (innerComplete) {\n        try {\n          active--;\n          var _loop_1 = function () {\n            var bufferedValue = buffer.shift();\n            if (innerSubScheduler) {\n              executeSchedule(subscriber, innerSubScheduler, function () {\n                return doInnerSub(bufferedValue);\n              });\n            } else {\n              doInnerSub(bufferedValue);\n            }\n          };\n          while (buffer.length && active < concurrent) {\n            _loop_1();\n          }\n          checkComplete();\n        } catch (err) {\n          subscriber.error(err);\n        }\n      }\n    }));\n  };\n  source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n    isComplete = true;\n    checkComplete();\n  }));\n  return function () {\n    additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n  };\n}\n", "import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  if (isFunction(resultSelector)) {\n    return mergeMap(function (a, i) {\n      return map(function (b, ii) {\n        return resultSelector(a, b, i, ii);\n      })(innerFrom(project(a, i)));\n    }, concurrent);\n  } else if (typeof resultSelector === 'number') {\n    concurrent = resultSelector;\n  }\n  return operate(function (source, subscriber) {\n    return mergeInternals(source, subscriber, project, concurrent);\n  });\n}\n", "import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  return mergeMap(identity, concurrent);\n}\n", "import { mergeAll } from './mergeAll';\nexport function concatAll() {\n  return mergeAll(1);\n}\n", "import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  return concatAll()(from(args, popScheduler(args)));\n}\n", "import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n  return new Observable(function (subscriber) {\n    innerFrom(observableFactory()).subscribe(subscriber);\n  });\n}\n", "import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport var NEVER = new Observable(noop);\nexport function never() {\n  return NEVER;\n}\n", "var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n  return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n", "import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n  return operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      return predicate.call(thisArg, value, index++) && subscriber.next(value);\n    }));\n  });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n  return operate(function (source, subscriber) {\n    var innerSub = null;\n    var syncUnsub = false;\n    var handledResult;\n    innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n      handledResult = innerFrom(selector(err, catchError(selector)(source)));\n      if (innerSub) {\n        innerSub.unsubscribe();\n        innerSub = null;\n        handledResult.subscribe(subscriber);\n      } else {\n        syncUnsub = true;\n      }\n    }));\n    if (syncUnsub) {\n      innerSub.unsubscribe();\n      innerSub = null;\n      handledResult.subscribe(subscriber);\n    }\n  });\n}\n", "import { createOperatorSubscriber } from './OperatorSubscriber';\nexport function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {\n  return function (source, subscriber) {\n    var hasState = hasSeed;\n    var state = seed;\n    var index = 0;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      var i = index++;\n      state = hasState ? accumulator(state, value, i) : (hasState = true, value);\n      emitOnNext && subscriber.next(state);\n    }, emitBeforeComplete && function () {\n      hasState && subscriber.next(state);\n      subscriber.complete();\n    }));\n  };\n}\n", "import { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\nexport function concatMap(project, resultSelector) {\n  return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n", "import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function defaultIfEmpty(defaultValue) {\n  return operate(function (source, subscriber) {\n    var hasValue = false;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      subscriber.next(value);\n    }, function () {\n      if (!hasValue) {\n        subscriber.next(defaultValue);\n      }\n      subscriber.complete();\n    }));\n  });\n}\n", "import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n  return count <= 0 ? function () {\n    return EMPTY;\n  } : operate(function (source, subscriber) {\n    var seen = 0;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      if (++seen <= count) {\n        subscriber.next(value);\n        if (count <= seen) {\n          subscriber.complete();\n        }\n      }\n    }));\n  });\n}\n", "import { map } from './map';\nexport function mapTo(value) {\n  return map(function () {\n    return value;\n  });\n}\n", "import { EmptyError } from '../util/EmptyError';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function throwIfEmpty(errorFactory) {\n  if (errorFactory === void 0) {\n    errorFactory = defaultErrorFactory;\n  }\n  return operate(function (source, subscriber) {\n    var hasValue = false;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      subscriber.next(value);\n    }, function () {\n      return hasValue ? subscriber.complete() : subscriber.error(errorFactory());\n    }));\n  });\n}\nfunction defaultErrorFactory() {\n  return new EmptyError();\n}\n", "import { operate } from '../util/lift';\nexport function finalize(callback) {\n  return operate(function (source, subscriber) {\n    try {\n      source.subscribe(subscriber);\n    } finally {\n      subscriber.add(callback);\n    }\n  });\n}\n", "import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\nexport function first(predicate, defaultValue) {\n  var hasDefaultValue = arguments.length >= 2;\n  return function (source) {\n    return source.pipe(predicate ? filter(function (v, i) {\n      return predicate(v, i, source);\n    }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () {\n      return new EmptyError();\n    }));\n  };\n}\n", "import { __values } from \"tslib\";\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeLast(count) {\n  return count <= 0 ? function () {\n    return EMPTY;\n  } : operate(function (source, subscriber) {\n    var buffer = [];\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      buffer.push(value);\n      count < buffer.length && buffer.shift();\n    }, function () {\n      var e_1, _a;\n      try {\n        for (var buffer_1 = __values(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {\n          var value = buffer_1_1.value;\n          subscriber.next(value);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      subscriber.complete();\n    }, undefined, function () {\n      buffer = null;\n    }));\n  });\n}\n", "import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { takeLast } from './takeLast';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { identity } from '../util/identity';\nexport function last(predicate, defaultValue) {\n  var hasDefaultValue = arguments.length >= 2;\n  return function (source) {\n    return source.pipe(predicate ? filter(function (v, i) {\n      return predicate(v, i, source);\n    }) : identity, takeLast(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () {\n      return new EmptyError();\n    }));\n  };\n}\n", "import { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\nexport function scan(accumulator, seed) {\n  return operate(scanInternals(accumulator, seed, arguments.length >= 2, true));\n}\n", "import { concat } from '../observable/concat';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\nexport function startWith() {\n  var values = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    values[_i] = arguments[_i];\n  }\n  var scheduler = popScheduler(values);\n  return operate(function (source, subscriber) {\n    (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n  });\n}\n", "import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n  return operate(function (source, subscriber) {\n    var innerSubscriber = null;\n    var index = 0;\n    var isComplete = false;\n    var checkComplete = function () {\n      return isComplete && !innerSubscriber && subscriber.complete();\n    };\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n      var innerIndex = 0;\n      var outerIndex = index++;\n      innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) {\n        return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);\n      }, function () {\n        innerSubscriber = null;\n        checkComplete();\n      }));\n    }, function () {\n      isComplete = true;\n      checkComplete();\n    }));\n  });\n}\n", "import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n  return operate(function (source, subscriber) {\n    innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () {\n      return subscriber.complete();\n    }, noop));\n    !subscriber.closed && source.subscribe(subscriber);\n  });\n}\n", "import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n  var tapObserver = isFunction(observerOrNext) || error || complete ? {\n    next: observerOrNext,\n    error: error,\n    complete: complete\n  } : observerOrNext;\n  return tapObserver ? operate(function (source, subscriber) {\n    var _a;\n    (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n    var isUnsub = true;\n    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n      var _a;\n      (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n      subscriber.next(value);\n    }, function () {\n      var _a;\n      isUnsub = false;\n      (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n      subscriber.complete();\n    }, function (err) {\n      var _a;\n      isUnsub = false;\n      (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n      subscriber.error(err);\n    }, function () {\n      var _a, _b;\n      if (isUnsub) {\n        (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n      }\n      (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n    }));\n  }) : identity;\n}\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nconst Attribute = {\n  /**\n   * The jsaction attribute defines a mapping of a DOM event to a\n   * generic event (aka jsaction), to which the actual event handlers\n   * that implement the behavior of the application are bound. The\n   * value is a semicolon separated list of colon separated pairs of\n   * an optional DOM event name and a jsaction name. If the optional\n   * DOM event name is omitted, 'click' is assumed. The jsaction names\n   * are dot separated pairs of a namespace and a simple jsaction\n   * name.\n   *\n   * See grammar in README.md for expected syntax in the attribute value.\n   */\n  JSACTION: 'jsaction'\n};\n\n/** All properties that are used by jsaction. */\nconst Property = {\n  /**\n   * The parsed value of the jsaction attribute is stored in this\n   * property on the DOM node. The parsed value is an Object. The\n   * property names of the object are the events; the values are the\n   * names of the actions. This property is attached even on nodes\n   * that don't have a jsaction attribute as an optimization, because\n   * property lookup is faster than attribute access.\n   */\n  JSACTION: '__jsaction',\n  /**\n   * The owner property references an a logical owner for a DOM node. JSAction\n   * will follow this reference instead of parentNode when traversing the DOM\n   * to find jsaction attributes. This allows overlaying a logical structure\n   * over a document where the DOM structure can't reflect that structure.\n   */\n  OWNER: '__owner'\n};\n\n/**\n * Map from jsaction annotation to a parsed map from event name to action name.\n */\nconst parseCache = {};\n/**\n * Reads the jsaction parser cache from the given DOM Element.\n */\nfunction get(element) {\n  return element[Property.JSACTION];\n}\n/**\n * Reads the jsaction parser cache for the given DOM element. If no cache is yet present,\n * creates an empty one.\n */\nfunction getDefaulted(element) {\n  const cache = get(element) ?? {};\n  set(element, cache);\n  return cache;\n}\n/**\n * Writes the jsaction parser cache to the given DOM Element.\n */\nfunction set(element, actionMap) {\n  element[Property.JSACTION] = actionMap;\n}\n/**\n * Looks up the parsed action map from the source jsaction attribute value.\n *\n * @param text Unparsed jsaction attribute value.\n * @return Parsed jsaction attribute value, if already present in the cache.\n */\nfunction getParsed(text) {\n  return parseCache[text];\n}\n/**\n * Inserts the parse result for the given source jsaction value into the cache.\n *\n * @param text Unparsed jsaction attribute value.\n * @param parsed Attribute value parsed into the action map.\n */\nfunction setParsed(text, parsed) {\n  parseCache[text] = parsed;\n}\n/**\n * Clears the jsaction parser cache from the given DOM Element.\n *\n * @param element .\n */\nfunction clear(element) {\n  if (Property.JSACTION in element) {\n    delete element[Property.JSACTION];\n  }\n}\n\n/*\n * Names of events that are special to jsaction. These are not all\n * event types that are legal to use in either HTML or the addEvent()\n * API, but these are the ones that are treated specially. All other\n * DOM events can be used in either addEvent() or in the value of the\n * jsaction attribute. Beware of browser specific events or events\n * that don't bubble though: If they are not mentioned here, then\n * event contract doesn't work around their peculiarities.\n */\nconst EventType = {\n  /**\n   * Mouse middle click, introduced in Chrome 55 and not yet supported on\n   * other browsers.\n   */\n  AUXCLICK: 'auxclick',\n  /**\n   * The change event fired by browsers when the `value` attribute of input,\n   * select, and textarea elements are changed.\n   */\n  CHANGE: 'change',\n  /**\n   * The click event. In addEvent() refers to all click events, in the\n   * jsaction attribute it refers to the unmodified click and Enter/Space\n   * keypress events.  In the latter case, a jsaction click will be triggered,\n   * for accessibility reasons.  See clickmod and clickonly, below.\n   */\n  CLICK: 'click',\n  /**\n   * Specifies the jsaction for a modified click event (i.e. a mouse\n   * click with the modifier key Cmd/Ctrl pressed). This event isn't\n   * separately enabled in addEvent(), because in the DOM, it's just a\n   * click event.\n   */\n  CLICKMOD: 'clickmod',\n  /**\n   * Specifies the jsaction for a click-only event.  Click-only doesn't take\n   * into account the case where an element with focus receives an Enter/Space\n   * keypress.  This event isn't separately enabled in addEvent().\n   */\n  CLICKONLY: 'clickonly',\n  /**\n   * The dblclick event.\n   */\n  DBLCLICK: 'dblclick',\n  /**\n   * Focus doesn't bubble, but you can use it in addEvent() and\n   * jsaction anyway. EventContract does the right thing under the\n   * hood.\n   */\n  FOCUS: 'focus',\n  /**\n   * This event only exists in IE. For addEvent() and jsaction, use\n   * focus instead; EventContract does the right thing even though\n   * focus doesn't bubble.\n   */\n  FOCUSIN: 'focusin',\n  /**\n   * Analog to focus.\n   */\n  BLUR: 'blur',\n  /**\n   * Analog to focusin.\n   */\n  FOCUSOUT: 'focusout',\n  /**\n   * Submit doesn't bubble, so it cannot be used with event\n   * contract. However, the browser helpfully fires a click event on\n   * the submit button of a form (even if the form is not submitted by\n   * a click on the submit button). So you should handle click on the\n   * submit button instead.\n   */\n  SUBMIT: 'submit',\n  /**\n   * The keydown event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keydown event. It represents click actions in non-Gecko\n   * browsers.\n   */\n  KEYDOWN: 'keydown',\n  /**\n   * The keypress event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keypress event. It represents click actions in Gecko browsers.\n   */\n  KEYPRESS: 'keypress',\n  /**\n   * The keyup event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keyup event. It represents click actions in non-Gecko\n   * browsers.\n   */\n  KEYUP: 'keyup',\n  /**\n   * The mouseup event. Can either be used directly or used implicitly to\n   * capture mouseup events. In addEvent(), it represents a regular DOM\n   * mouseup event.\n   */\n  MOUSEUP: 'mouseup',\n  /**\n   * The mousedown event. Can either be used directly or used implicitly to\n   * capture mouseenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  MOUSEDOWN: 'mousedown',\n  /**\n   * The mouseover event. Can either be used directly or used implicitly to\n   * capture mouseenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  MOUSEOVER: 'mouseover',\n  /**\n   * The mouseout event. Can either be used directly or used implicitly to\n   * capture mouseover events. In addEvent(), it represents a regular DOM\n   * mouseout event.\n   */\n  MOUSEOUT: 'mouseout',\n  /**\n   * The mouseenter event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  MOUSEENTER: 'mouseenter',\n  /**\n   * The mouseleave event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  MOUSELEAVE: 'mouseleave',\n  /**\n   * The mousemove event.\n   */\n  MOUSEMOVE: 'mousemove',\n  /**\n   * The pointerup event. Can either be used directly or used implicitly to\n   * capture pointerup events. In addEvent(), it represents a regular DOM\n   * pointerup event.\n   */\n  POINTERUP: 'pointerup',\n  /**\n   * The pointerdown event. Can either be used directly or used implicitly to\n   * capture pointerenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  POINTERDOWN: 'pointerdown',\n  /**\n   * The pointerover event. Can either be used directly or used implicitly to\n   * capture pointerenter events. In addEvent(), it represents a regular DOM\n   * pointerover event.\n   */\n  POINTEROVER: 'pointerover',\n  /**\n   * The pointerout event. Can either be used directly or used implicitly to\n   * capture pointerover events. In addEvent(), it represents a regular DOM\n   * pointerout event.\n   */\n  POINTEROUT: 'pointerout',\n  /**\n   * The pointerenter event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  POINTERENTER: 'pointerenter',\n  /**\n   * The pointerleave event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  POINTERLEAVE: 'pointerleave',\n  /**\n   * The pointermove event.\n   */\n  POINTERMOVE: 'pointermove',\n  /**\n   * The pointercancel event.\n   */\n  POINTERCANCEL: 'pointercancel',\n  /**\n   * The gotpointercapture event is fired when\n   * Element.setPointerCapture(pointerId) is called on a mouse input, or\n   * implicitly when a touch input begins.\n   */\n  GOTPOINTERCAPTURE: 'gotpointercapture',\n  /**\n   * The lostpointercapture event is fired when\n   * Element.releasePointerCapture(pointerId) is called, or implicitly after a\n   * touch input ends.\n   */\n  LOSTPOINTERCAPTURE: 'lostpointercapture',\n  /**\n   * The error event. The error event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing under\n   * the hood (except in IE8 which does not use error events).\n   */\n  ERROR: 'error',\n  /**\n   * The load event. The load event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing\n   * under the hood.\n   */\n  LOAD: 'load',\n  /**\n   * The unload event.\n   */\n  UNLOAD: 'unload',\n  /**\n   * The touchstart event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHSTART: 'touchstart',\n  /**\n   * The touchend event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHEND: 'touchend',\n  /**\n   * The touchmove event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHMOVE: 'touchmove',\n  /**\n   * The input event.\n   */\n  INPUT: 'input',\n  /**\n   * The scroll event.\n   */\n  SCROLL: 'scroll',\n  /**\n   * The toggle event. The toggle event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing\n   * under the hood.\n   */\n  TOGGLE: 'toggle',\n  /**\n   * A custom event. The actual custom event type is declared as the 'type'\n   * field in the event details. Supported in Firefox 6+, IE 9+, and all Chrome\n   * versions.\n   *\n   * This is an internal name. Users should use jsaction's fireCustomEvent to\n   * fire custom events instead of relying on this type to create them.\n   */\n  CUSTOM: '_custom'\n};\n/** All event types that do not bubble or capture and need a polyfill. */\nconst MOUSE_SPECIAL_EVENT_TYPES = [EventType.MOUSEENTER, EventType.MOUSELEAVE, 'pointerenter', 'pointerleave'];\n/** All event types that are registered in the bubble phase. */\nconst BUBBLE_EVENT_TYPES = [EventType.CLICK, EventType.DBLCLICK, EventType.FOCUSIN, EventType.FOCUSOUT, EventType.KEYDOWN, EventType.KEYUP, EventType.KEYPRESS, EventType.MOUSEOVER, EventType.MOUSEOUT, EventType.SUBMIT, EventType.TOUCHSTART, EventType.TOUCHEND, EventType.TOUCHMOVE, 'touchcancel', 'auxclick', 'change', 'compositionstart', 'compositionupdate', 'compositionend', 'beforeinput', 'input', 'select', 'copy', 'cut', 'paste', 'mousedown', 'mouseup', 'wheel', 'contextmenu', 'dragover', 'dragenter', 'dragleave', 'drop', 'dragstart', 'dragend', 'pointerdown', 'pointermove', 'pointerup', 'pointercancel', 'pointerover', 'pointerout', 'gotpointercapture', 'lostpointercapture',\n// Video events.\n'ended', 'loadedmetadata',\n// Page visibility events.\n'pagehide', 'pageshow', 'visibilitychange',\n// Content visibility events.\n'beforematch'];\n/** All event types that are registered in the capture phase. */\nconst CAPTURE_EVENT_TYPES = [EventType.FOCUS, EventType.BLUR, EventType.ERROR, EventType.LOAD, EventType.TOGGLE];\n/**\n * Whether or not an event type should be registered in the capture phase.\n * @param eventType\n * @returns bool\n */\nconst isCaptureEventType = eventType => CAPTURE_EVENT_TYPES.indexOf(eventType) >= 0;\n/** All event types that are registered early.  */\nconst EARLY_EVENT_TYPES = BUBBLE_EVENT_TYPES.concat(CAPTURE_EVENT_TYPES);\n/**\n * Whether or not an event type is registered in the early contract.\n */\nconst isEarlyEventType = eventType => EARLY_EVENT_TYPES.indexOf(eventType) >= 0;\n\n/**\n * If on a Macintosh with an extended keyboard, the Enter key located in the\n * numeric pad has a different ASCII code.\n */\nconst MAC_ENTER = 3;\n/** The Enter key. */\nconst ENTER = 13;\n/** The Space key. */\nconst SPACE = 32;\n/** Special keycodes used by jsaction for the generic click action. */\nconst KeyCode = {\n  MAC_ENTER,\n  ENTER,\n  SPACE\n};\n\n/**\n * Gets a browser event type, if it would differ from the JSAction event type.\n */\nfunction getBrowserEventType(eventType) {\n  // Mouseenter and mouseleave events are not handled directly because they\n  // are not available everywhere. In browsers where they are available, they\n  // don't bubble and aren't visible at the container boundary. Instead, we\n  // synthesize the mouseenter and mouseleave events from mouseover and\n  // mouseout events, respectively. Cf. eventcontract.js.\n  if (eventType === EventType.MOUSEENTER) {\n    return EventType.MOUSEOVER;\n  } else if (eventType === EventType.MOUSELEAVE) {\n    return EventType.MOUSEOUT;\n  } else if (eventType === EventType.POINTERENTER) {\n    return EventType.POINTEROVER;\n  } else if (eventType === EventType.POINTERLEAVE) {\n    return EventType.POINTEROUT;\n  }\n  return eventType;\n}\n/**\n * Registers the event handler function with the given DOM element for\n * the given event type.\n *\n * @param element The element.\n * @param eventType The event type.\n * @param handler The handler function to install.\n * @param passive A boolean value that, if `true`, indicates that the function\n *     specified by `handler` will never call `preventDefault()`.\n * @return Information needed to uninstall the event handler eventually.\n */\nfunction addEventListener(element, eventType, handler, passive) {\n  // All event handlers are registered in the bubbling\n  // phase.\n  //\n  // All browsers support focus and blur, but these events only are propagated\n  // in the capture phase. Very legacy browsers do not support focusin or\n  // focusout.\n  //\n  // It would be a bad idea to register all event handlers in the\n  // capture phase because then regular onclick handlers would not be\n  // executed at all on events that trigger a jsaction. That's not\n  // entirely what we want, at least for now.\n  //\n  // Error and load events (i.e. on images) do not bubble so they are also\n  // handled in the capture phase.\n  let capture = false;\n  if (isCaptureEventType(eventType)) {\n    capture = true;\n  }\n  const options = typeof passive === 'boolean' ? {\n    capture,\n    passive\n  } : capture;\n  element.addEventListener(eventType, handler, options);\n  return {\n    eventType,\n    handler,\n    capture,\n    passive\n  };\n}\n/**\n * Removes the event handler for the given event from the element.\n * the given event type.\n *\n * @param element The element.\n * @param info The information needed to deregister the handler, as returned by\n *     addEventListener(), above.\n */\nfunction removeEventListener(element, info) {\n  if (element.removeEventListener) {\n    // It's worth noting that some browser releases have been inconsistent on this, and unless\n    // you have specific reasons otherwise, it's probably wise to use the same values used for\n    // the call to addEventListener() when calling removeEventListener().\n    const options = typeof info.passive === 'boolean' ? {\n      capture: info.capture\n    } : info.capture;\n    element.removeEventListener(info.eventType, info.handler, options);\n    // `detachEvent` is an old DOM API.\n    // tslint:disable-next-line:no-any\n  } else if (element.detachEvent) {\n    // `detachEvent` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    element.detachEvent(`on${info.eventType}`, info.handler);\n  }\n}\n/**\n * Cancels propagation of an event.\n * @param e The event to cancel propagation for.\n */\nfunction stopPropagation(e) {\n  e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n}\n/**\n * Prevents the default action of an event.\n * @param e The event to prevent the default action for.\n */\nfunction preventDefault(e) {\n  e.preventDefault ? e.preventDefault() : e.returnValue = false;\n}\n/**\n * Gets the target Element of the event. In Firefox, a text node may appear as\n * the target of the event, in which case we return the parent element of the\n * text node.\n * @param e The event to get the target of.\n * @return The target element.\n */\nfunction getTarget(e) {\n  let el = e.target;\n  // In Firefox, the event may have a text node as its target. We always\n  // want the parent Element the text node belongs to, however.\n  if (!el.getAttribute && el.parentNode) {\n    el = el.parentNode;\n  }\n  return el;\n}\n/**\n * Whether we are on a Mac. Not pulling in useragent just for this.\n */\nlet isMac = typeof navigator !== 'undefined' && /Macintosh/.test(navigator.userAgent);\n/**\n * Determines and returns whether the given event (which is assumed to be a\n * click event) is a middle click.\n * NOTE: There is not a consistent way to identify middle click\n * http://www.unixpapa.com/js/mouse.html\n */\nfunction isMiddleClick(e) {\n  return (\n    // `which` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.which === 2 ||\n    // `which` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.which == null &&\n    // `button` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.button === 4 // middle click for IE\n  );\n}\n/**\n * Determines and returns whether the given event (which is assumed\n * to be a click event) is modified. A middle click is considered a modified\n * click to retain the default browser action, which opens a link in a new tab.\n * @param e The event.\n * @return Whether the given event is modified.\n */\nfunction isModifiedClickEvent(e) {\n  return (\n    // `metaKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    isMac && e.metaKey ||\n    // `ctrlKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    !isMac && e.ctrlKey || isMiddleClick(e) ||\n    // `shiftKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.shiftKey\n  );\n}\n/** Whether we are on WebKit (e.g., Chrome). */\nconst isWebKit = typeof navigator !== 'undefined' && !/Opera/.test(navigator.userAgent) && /WebKit/.test(navigator.userAgent);\n/** Whether we are on IE. */\nconst isIe = typeof navigator !== 'undefined' && (/MSIE/.test(navigator.userAgent) || /Trident/.test(navigator.userAgent));\n/** Whether we are on Gecko (e.g., Firefox). */\nconst isGecko = typeof navigator !== 'undefined' && !/Opera|WebKit/.test(navigator.userAgent) && /Gecko/.test(navigator.product);\n/**\n * Determines and returns whether the given element is a valid target for\n * keypress/keydown DOM events that act like regular DOM clicks.\n * @param el The element.\n * @return Whether the given element is a valid action key target.\n */\nfunction isValidActionKeyTarget(el) {\n  if (!('getAttribute' in el)) {\n    return false;\n  }\n  if (isTextControl(el)) {\n    return false;\n  }\n  if (isNativelyActivatable(el)) {\n    return false;\n  }\n  // `isContentEditable` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  if (el.isContentEditable) {\n    return false;\n  }\n  return true;\n}\n/**\n * Whether an event has a modifier key activated.\n * @param e The event.\n * @return True, if a modifier key is activated.\n */\nfunction hasModifierKey(e) {\n  return (\n    // `ctrlKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.ctrlKey ||\n    // `shiftKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.shiftKey ||\n    // `altKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.altKey ||\n    // `metaKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.metaKey\n  );\n}\n/**\n * Determines and returns whether the given event has a target that already\n * has event handlers attached because it is a native HTML control. Used to\n * determine if preventDefault should be called when isActionKeyEvent is true.\n * @param e The event.\n * @return If preventDefault should be called.\n */\nfunction shouldCallPreventDefaultOnNativeHtmlControl(e) {\n  const el = getTarget(e);\n  const tagName = el.tagName.toUpperCase();\n  const role = (el.getAttribute('role') || '').toUpperCase();\n  if (tagName === 'BUTTON' || role === 'BUTTON') {\n    return true;\n  }\n  if (!isNativeHTMLControl(el)) {\n    return false;\n  }\n  if (tagName === 'A') {\n    return false;\n  }\n  /**\n   * Fix for physical d-pads on feature phone platforms; the native event\n   * (ie. isTrusted: true) needs to fire to show the OPTION list. See\n   * b/135288469 for more info.\n   */\n  if (tagName === 'SELECT') {\n    return false;\n  }\n  if (processSpace(el)) {\n    return false;\n  }\n  if (isTextControl(el)) {\n    return false;\n  }\n  return true;\n}\n/**\n * Determines and returns whether the given event acts like a regular DOM click,\n * and should be handled instead of the click.  If this returns true, the caller\n * will call preventDefault() to prevent a possible duplicate event.\n * This is represented by a keypress (keydown on Gecko browsers) on Enter or\n * Space key.\n * @param e The event.\n * @return True, if the event emulates a DOM click.\n */\nfunction isActionKeyEvent(e) {\n  let key =\n  // `which` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.which ||\n  // `keyCode` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.keyCode;\n  if (!key && e.key) {\n    key = ACTION_KEY_TO_KEYCODE[e.key];\n  }\n  if (isWebKit && key === KeyCode.MAC_ENTER) {\n    key = KeyCode.ENTER;\n  }\n  if (key !== KeyCode.ENTER && key !== KeyCode.SPACE) {\n    return false;\n  }\n  const el = getTarget(e);\n  if (e.type !== EventType.KEYDOWN || !isValidActionKeyTarget(el) || hasModifierKey(e)) {\n    return false;\n  }\n  // For <input type=\"checkbox\">, we must only handle the browser's native click\n  // event, so that the browser can toggle the checkbox.\n  if (processSpace(el) && key === KeyCode.SPACE) {\n    return false;\n  }\n  // If this element is non-focusable, ignore stray keystrokes (b/18337209)\n  // Sscreen readers can move without tab focus, so any tabIndex is focusable.\n  // See B/21809604\n  if (!isFocusable(el)) {\n    return false;\n  }\n  const type = (el.getAttribute('role') || el.type || el.tagName).toUpperCase();\n  const isSpecificTriggerKey = IDENTIFIER_TO_KEY_TRIGGER_MAPPING[type] % key === 0;\n  const isDefaultTriggerKey = !(type in IDENTIFIER_TO_KEY_TRIGGER_MAPPING) && key === KeyCode.ENTER;\n  const hasType = el.tagName.toUpperCase() !== 'INPUT' || !!el.type;\n  return (isSpecificTriggerKey || isDefaultTriggerKey) && hasType;\n}\n/**\n * Checks whether a DOM element can receive keyboard focus.\n * This code is based on goog.dom.isFocusable, but simplified since we shouldn't\n * care about visibility if we're already handling a keyboard event.\n */\nfunction isFocusable(el) {\n  return (el.tagName in NATIVELY_FOCUSABLE_ELEMENTS || hasSpecifiedTabIndex(el)) && !el.disabled;\n}\n/**\n * @param element Element to check.\n * @return Whether the element has a specified tab index.\n */\nfunction hasSpecifiedTabIndex(element) {\n  // IE returns 0 for an unset tabIndex, so we must use getAttributeNode(),\n  // which returns an object with a 'specified' property if tabIndex is\n  // specified.  This works on other browsers, too.\n  const attrNode = element.getAttributeNode('tabindex'); // Must be lowercase!\n  return attrNode != null && attrNode.specified;\n}\n/** Element tagnames that are focusable by default. */\nconst NATIVELY_FOCUSABLE_ELEMENTS = {\n  'A': 1,\n  'INPUT': 1,\n  'TEXTAREA': 1,\n  'SELECT': 1,\n  'BUTTON': 1\n};\n/** @return True, if the Space key was pressed. */\nfunction isSpaceKeyEvent(e) {\n  const key =\n  // `which` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.which ||\n  // `keyCode` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.keyCode;\n  const el = getTarget(e);\n  const elementName = (el.type || el.tagName).toUpperCase();\n  return key === KeyCode.SPACE && elementName !== 'CHECKBOX';\n}\n/**\n * Determines whether the event corresponds to a non-bubbling mouse\n * event type (mouseenter, mouseleave, pointerenter, and pointerleave).\n *\n * During mouseover (mouseenter) and pointerover (pointerenter), the\n * relatedTarget is the element being entered from. During mouseout (mouseleave)\n * and pointerout (pointerleave), the relatedTarget is the element being exited\n * to.\n *\n * In both cases, if relatedTarget is outside target, then the corresponding\n * special event has occurred, otherwise it hasn't.\n *\n * @param e The mouseover/mouseout event.\n * @param type The type of the mouse special event.\n * @param element The element on which the jsaction for the\n *     mouseenter/mouseleave event is defined.\n * @return True if the event is a mouseenter/mouseleave event.\n */\nfunction isMouseSpecialEvent(e, type, element) {\n  // `relatedTarget` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  const related = e.relatedTarget;\n  return (e.type === EventType.MOUSEOVER && type === EventType.MOUSEENTER || e.type === EventType.MOUSEOUT && type === EventType.MOUSELEAVE || e.type === EventType.POINTEROVER && type === EventType.POINTERENTER || e.type === EventType.POINTEROUT && type === EventType.POINTERLEAVE) && (!related || related !== element && !element.contains(related));\n}\n/**\n * Creates a new EventLike object for a mouseenter/mouseleave event that's\n * derived from the original corresponding mouseover/mouseout event.\n * @param e The event.\n * @param target The element on which the jsaction for the mouseenter/mouseleave\n *     event is defined.\n * @return A modified event-like object copied from the event object passed into\n *     this function.\n */\nfunction createMouseSpecialEvent(e, target) {\n  // We have to create a copy of the event object because we need to mutate\n  // its fields. We do this for the special mouse events because the event\n  // target needs to be retargeted to the action element rather than the real\n  // element (since we are simulating the special mouse events with mouseover/\n  // mouseout).\n  //\n  // Since we're making a copy anyways, we might as well attempt to convert\n  // this event into a pseudo-real mouseenter/mouseleave event by adjusting\n  // its type.\n  //\n  // tslint:disable-next-line:no-any\n  const copy = {};\n  for (const property in e) {\n    if (property === 'srcElement' || property === 'target') {\n      continue;\n    }\n    const key = property;\n    // Making a copy requires iterating through all properties of `Event`.\n    // tslint:disable-next-line:no-dict-access-on-struct-type\n    const value = e[key];\n    if (typeof value === 'function') {\n      continue;\n    }\n    // Value should be the expected type, but the value of `key` is not known\n    // statically.\n    // tslint:disable-next-line:no-any\n    copy[key] = value;\n  }\n  if (e.type === EventType.MOUSEOVER) {\n    copy['type'] = EventType.MOUSEENTER;\n  } else if (e.type === EventType.MOUSEOUT) {\n    copy['type'] = EventType.MOUSELEAVE;\n  } else if (e.type === EventType.POINTEROVER) {\n    copy['type'] = EventType.POINTERENTER;\n  } else {\n    copy['type'] = EventType.POINTERLEAVE;\n  }\n  copy['target'] = copy['srcElement'] = target;\n  copy['bubbles'] = false;\n  return copy;\n}\n/**\n * Returns touch data extracted from the touch event: clientX, clientY, screenX\n * and screenY. If the event has no touch information at all, the returned\n * value is null.\n *\n * The fields of this Object are unquoted.\n *\n * @param event A touch event.\n */\nfunction getTouchData(event) {\n  const touch = event.changedTouches && event.changedTouches[0] || event.touches && event.touches[0];\n  if (!touch) {\n    return null;\n  }\n  return {\n    clientX: touch.clientX,\n    clientY: touch.clientY,\n    screenX: touch.screenX,\n    screenY: touch.screenY\n  };\n}\n/**\n * Creates a new EventLike object for a \"click\" event that's derived from the\n * original corresponding \"touchend\" event for a fast-click implementation.\n *\n * It takes a touch event, adds common fields found in a click event and\n * changes the type to 'click', so that the resulting event looks more like\n * a real click event.\n *\n * @param event A touch event.\n * @return A modified event-like object copied from the event object passed into\n *     this function.\n */\nfunction recreateTouchEventAsClick(event) {\n  const click = {};\n  click['originalEventType'] = event.type;\n  click['type'] = EventType.CLICK;\n  for (const property in event) {\n    if (property === 'type' || property === 'srcElement') {\n      continue;\n    }\n    const key = property;\n    // Making a copy requires iterating through all properties of `TouchEvent`.\n    // tslint:disable-next-line:no-dict-access-on-struct-type\n    const value = event[key];\n    if (typeof value === 'function') {\n      continue;\n    }\n    // Value should be the expected type, but the value of `key` is not known\n    // statically.\n    // tslint:disable-next-line:no-any\n    click[key] = value;\n  }\n  // Ensure that the event has the most recent timestamp. This timestamp\n  // may be used in the future to validate or cancel subsequent click events.\n  click['timeStamp'] = Date.now();\n  // Emulate preventDefault and stopPropagation behavior\n  click['defaultPrevented'] = false;\n  click['preventDefault'] = syntheticPreventDefault;\n  click['_propagationStopped'] = false;\n  click['stopPropagation'] = syntheticStopPropagation;\n  // Emulate click coordinates using touch info\n  const touch = getTouchData(event);\n  if (touch) {\n    click['clientX'] = touch.clientX;\n    click['clientY'] = touch.clientY;\n    click['screenX'] = touch.screenX;\n    click['screenY'] = touch.screenY;\n  }\n  return click;\n}\n/**\n * An implementation of \"preventDefault\" for a synthesized event. Simply\n * sets \"defaultPrevented\" property to true.\n */\nfunction syntheticPreventDefault() {\n  this.defaultPrevented = true;\n}\n/**\n * An implementation of \"stopPropagation\" for a synthesized event. It simply\n * sets a synthetic non-standard \"_propagationStopped\" property to true.\n */\nfunction syntheticStopPropagation() {\n  this._propagationStopped = true;\n}\n/**\n * Mapping of KeyboardEvent.key values to\n * KeyCode values.\n */\nconst ACTION_KEY_TO_KEYCODE = {\n  'Enter': KeyCode.ENTER,\n  ' ': KeyCode.SPACE\n};\n/**\n * Mapping of HTML element identifiers (ARIA role, type, or tagName) to the\n * keys (enter and/or space) that should activate them. A value of zero means\n * that both should activate them.\n */\nconst IDENTIFIER_TO_KEY_TRIGGER_MAPPING = {\n  'A': KeyCode.ENTER,\n  'BUTTON': 0,\n  'CHECKBOX': KeyCode.SPACE,\n  'COMBOBOX': KeyCode.ENTER,\n  'FILE': 0,\n  'GRIDCELL': KeyCode.ENTER,\n  'LINK': KeyCode.ENTER,\n  'LISTBOX': KeyCode.ENTER,\n  'MENU': 0,\n  'MENUBAR': 0,\n  'MENUITEM': 0,\n  'MENUITEMCHECKBOX': 0,\n  'MENUITEMRADIO': 0,\n  'OPTION': 0,\n  'RADIO': KeyCode.SPACE,\n  'RADIOGROUP': KeyCode.SPACE,\n  'RESET': 0,\n  'SUBMIT': 0,\n  'SWITCH': KeyCode.SPACE,\n  'TAB': 0,\n  'TREE': KeyCode.ENTER,\n  'TREEITEM': KeyCode.ENTER\n};\n/**\n * Returns whether or not to process space based on the type of the element;\n * checks to make sure that type is not null.\n * @param element The element.\n * @return Whether or not to process space based on type.\n */\nfunction processSpace(element) {\n  const type = (element.getAttribute('type') || element.tagName).toUpperCase();\n  return type in PROCESS_SPACE;\n}\n/**\n * Returns whether or not the given element is a text control.\n * @param el The element.\n * @return Whether or not the given element is a text control.\n */\nfunction isTextControl(el) {\n  const type = (el.getAttribute('type') || el.tagName).toUpperCase();\n  return type in TEXT_CONTROLS;\n}\n/**\n * Returns if the given element is a native HTML control.\n * @param el The element.\n * @return If the given element is a native HTML control.\n */\nfunction isNativeHTMLControl(el) {\n  return el.tagName.toUpperCase() in NATIVE_HTML_CONTROLS;\n}\n/**\n * Returns if the given element is natively activatable. Browsers emit click\n * events for natively activatable elements, even when activated via keyboard.\n * For these elements, we don't need to raise a11y click events.\n * @param el The element.\n * @return If the given element is a native HTML control.\n */\nfunction isNativelyActivatable(el) {\n  return el.tagName.toUpperCase() === 'BUTTON' || !!el.type && el.type.toUpperCase() === 'FILE';\n}\n/**\n * HTML <input> types (not ARIA roles) which will auto-trigger a click event for\n * the Space key, with side-effects. We will not call preventDefault if space is\n * pressed, nor will we raise a11y click events.  For all other elements, we can\n * suppress the default event (which has no desired side-effects) and handle the\n * keydown ourselves.\n */\nconst PROCESS_SPACE = {\n  'CHECKBOX': true,\n  'FILE': true,\n  'OPTION': true,\n  'RADIO': true\n};\n/** TagNames and Input types for which to not process enter/space as click. */\nconst TEXT_CONTROLS = {\n  'COLOR': true,\n  'DATE': true,\n  'DATETIME': true,\n  'DATETIME-LOCAL': true,\n  'EMAIL': true,\n  'MONTH': true,\n  'NUMBER': true,\n  'PASSWORD': true,\n  'RANGE': true,\n  'SEARCH': true,\n  'TEL': true,\n  'TEXT': true,\n  'TEXTAREA': true,\n  'TIME': true,\n  'URL': true,\n  'WEEK': true\n};\n/** TagNames that are native HTML controls. */\nconst NATIVE_HTML_CONTROLS = {\n  'A': true,\n  'AREA': true,\n  'BUTTON': true,\n  'DIALOG': true,\n  'IMG': true,\n  'INPUT': true,\n  'LINK': true,\n  'MENU': true,\n  'OPTGROUP': true,\n  'OPTION': true,\n  'PROGRESS': true,\n  'SELECT': true,\n  'TEXTAREA': true\n};\n/** Exported for testing. */\nconst testing = {\n  setIsMac(value) {\n    isMac = value;\n  }\n};\n\n/**\n * Whether the user agent is running on iOS.\n */\nconst isIos = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/.test(navigator.userAgent);\n/**\n * A class representing a container node and all the event handlers\n * installed on it. Used so that handlers can be cleaned up if the\n * container is removed from the contract.\n */\nclass EventContractContainer {\n  element;\n  /**\n   * Array of event handlers and their corresponding event types that are\n   * installed on this container.\n   *\n   */\n  handlerInfos = [];\n  /**\n   * @param element The container Element.\n   */\n  constructor(element) {\n    this.element = element;\n  }\n  /**\n   * Installs the provided installer on the element owned by this container,\n   * and maintains a reference to resulting handler in order to remove it\n   * later if desired.\n   */\n  addEventListener(eventType, getHandler, passive) {\n    // In iOS, event bubbling doesn't happen automatically in any DOM element,\n    // unless it has an onclick attribute or DOM event handler attached to it.\n    // This breaks JsAction in some cases. See \"Making Elements Clickable\"\n    // section at http://goo.gl/2VoGnB.\n    //\n    // A workaround for this issue is to change the CSS cursor style to 'pointer'\n    // for the container element, which magically turns on event bubbling. This\n    // solution is described in the comments section at http://goo.gl/6pEO1z.\n    //\n    // We use a navigator.userAgent check here as this problem is present both\n    // on Mobile Safari and thin WebKit wrappers, such as Chrome for iOS.\n    if (isIos) {\n      this.element.style.cursor = 'pointer';\n    }\n    this.handlerInfos.push(addEventListener(this.element, eventType, getHandler(this.element), passive));\n  }\n  /**\n   * Removes all the handlers installed on this container.\n   */\n  cleanUp() {\n    for (let i = 0; i < this.handlerInfos.length; i++) {\n      removeEventListener(this.element, this.handlerInfos[i]);\n    }\n    this.handlerInfos = [];\n  }\n}\nconst Char = {\n  /**\n   * The separator between the namespace and the action name in the\n   * jsaction attribute value.\n   */\n  NAMESPACE_ACTION_SEPARATOR: '.',\n  /**\n   * The separator between the event name and action in the jsaction\n   * attribute value.\n   */\n  EVENT_ACTION_SEPARATOR: ':'\n};\n\n/** Added for readability when accessing stable property names. */\nfunction getEventType(eventInfo) {\n  return eventInfo.eventType;\n}\n/** Added for readability when accessing stable property names. */\nfunction setEventType(eventInfo, eventType) {\n  eventInfo.eventType = eventType;\n}\n/** Added for readability when accessing stable property names. */\nfunction getEvent(eventInfo) {\n  return eventInfo.event;\n}\n/** Added for readability when accessing stable property names. */\nfunction setEvent(eventInfo, event) {\n  eventInfo.event = event;\n}\n/** Added for readability when accessing stable property names. */\nfunction getTargetElement(eventInfo) {\n  return eventInfo.targetElement;\n}\n/** Added for readability when accessing stable property names. */\nfunction setTargetElement(eventInfo, targetElement) {\n  eventInfo.targetElement = targetElement;\n}\n/** Added for readability when accessing stable property names. */\nfunction getContainer(eventInfo) {\n  return eventInfo.eic;\n}\n/** Added for readability when accessing stable property names. */\nfunction setContainer(eventInfo, container) {\n  eventInfo.eic = container;\n}\n/** Added for readability when accessing stable property names. */\nfunction getTimestamp(eventInfo) {\n  return eventInfo.timeStamp;\n}\n/** Added for readability when accessing stable property names. */\nfunction setTimestamp(eventInfo, timestamp) {\n  eventInfo.timeStamp = timestamp;\n}\n/** Added for readability when accessing stable property names. */\nfunction getAction(eventInfo) {\n  return eventInfo.eia;\n}\n/** Added for readability when accessing stable property names. */\nfunction setAction(eventInfo, actionName, actionElement) {\n  eventInfo.eia = [actionName, actionElement];\n}\n/** Added for readability when accessing stable property names. */\nfunction unsetAction(eventInfo) {\n  eventInfo.eia = undefined;\n}\n/** Added for readability when accessing stable property names. */\nfunction getActionName(actionInfo) {\n  return actionInfo[0];\n}\n/** Added for readability when accessing stable property names. */\nfunction getActionElement(actionInfo) {\n  return actionInfo[1];\n}\n/** Added for readability when accessing stable property names. */\nfunction getIsReplay(eventInfo) {\n  return eventInfo.eirp;\n}\n/** Added for readability when accessing stable property names. */\nfunction setIsReplay(eventInfo, replay) {\n  eventInfo.eirp = replay;\n}\n/** Added for readability when accessing stable property names. */\nfunction getA11yClickKey(eventInfo) {\n  return eventInfo.eiack;\n}\n/** Added for readability when accessing stable property names. */\nfunction setA11yClickKey(eventInfo, a11yClickKey) {\n  eventInfo.eiack = a11yClickKey;\n}\n/** Added for readability when accessing stable property names. */\nfunction getResolved(eventInfo) {\n  return eventInfo.eir;\n}\n/** Added for readability when accessing stable property names. */\nfunction setResolved(eventInfo, resolved) {\n  eventInfo.eir = resolved;\n}\n/** Clones an `EventInfo` */\nfunction cloneEventInfo(eventInfo) {\n  return {\n    eventType: eventInfo.eventType,\n    event: eventInfo.event,\n    targetElement: eventInfo.targetElement,\n    eic: eventInfo.eic,\n    eia: eventInfo.eia,\n    timeStamp: eventInfo.timeStamp,\n    eirp: eventInfo.eirp,\n    eiack: eventInfo.eiack,\n    eir: eventInfo.eir\n  };\n}\n/**\n * Utility function for creating an `EventInfo`.\n *\n * This can be used from code-size sensitive compilation units, as taking\n * parameters vs. an `Object` literal reduces code size.\n */\nfunction createEventInfoFromParameters(eventType, event, targetElement, container, timestamp, action, isReplay, a11yClickKey) {\n  return {\n    eventType,\n    event,\n    targetElement,\n    eic: container,\n    timeStamp: timestamp,\n    eia: action,\n    eirp: isReplay,\n    eiack: a11yClickKey\n  };\n}\n/**\n * Utility function for creating an `EventInfo`.\n *\n * This should be used in compilation units that are less sensitive to code\n * size.\n */\nfunction createEventInfo({\n  eventType,\n  event,\n  targetElement,\n  container,\n  timestamp,\n  action,\n  isReplay,\n  a11yClickKey\n}) {\n  return {\n    eventType,\n    event,\n    targetElement,\n    eic: container,\n    timeStamp: timestamp,\n    eia: action ? [action.name, action.element] : undefined,\n    eirp: isReplay,\n    eiack: a11yClickKey\n  };\n}\n/**\n * Utility class around an `EventInfo`.\n *\n * This should be used in compilation units that are less sensitive to code\n * size.\n */\nclass EventInfoWrapper {\n  eventInfo;\n  constructor(eventInfo) {\n    this.eventInfo = eventInfo;\n  }\n  getEventType() {\n    return getEventType(this.eventInfo);\n  }\n  setEventType(eventType) {\n    setEventType(this.eventInfo, eventType);\n  }\n  getEvent() {\n    return getEvent(this.eventInfo);\n  }\n  setEvent(event) {\n    setEvent(this.eventInfo, event);\n  }\n  getTargetElement() {\n    return getTargetElement(this.eventInfo);\n  }\n  setTargetElement(targetElement) {\n    setTargetElement(this.eventInfo, targetElement);\n  }\n  getContainer() {\n    return getContainer(this.eventInfo);\n  }\n  setContainer(container) {\n    setContainer(this.eventInfo, container);\n  }\n  getTimestamp() {\n    return getTimestamp(this.eventInfo);\n  }\n  setTimestamp(timestamp) {\n    setTimestamp(this.eventInfo, timestamp);\n  }\n  getAction() {\n    const action = getAction(this.eventInfo);\n    if (!action) return undefined;\n    return {\n      name: action[0],\n      element: action[1]\n    };\n  }\n  setAction(action) {\n    if (!action) {\n      unsetAction(this.eventInfo);\n      return;\n    }\n    setAction(this.eventInfo, action.name, action.element);\n  }\n  getIsReplay() {\n    return getIsReplay(this.eventInfo);\n  }\n  setIsReplay(replay) {\n    setIsReplay(this.eventInfo, replay);\n  }\n  getResolved() {\n    return getResolved(this.eventInfo);\n  }\n  setResolved(resolved) {\n    setResolved(this.eventInfo, resolved);\n  }\n  clone() {\n    return new EventInfoWrapper(cloneEventInfo(this.eventInfo));\n  }\n}\n\n/**\n * Since maps from event to action are immutable we can use a single map\n * to represent the empty map.\n */\nconst EMPTY_ACTION_MAP = {};\n/**\n * This regular expression matches a semicolon.\n */\nconst REGEXP_SEMICOLON = /\\s*;\\s*/;\n/** If no event type is defined, defaults to `click`. */\nconst DEFAULT_EVENT_TYPE = EventType.CLICK;\n/** Resolves actions for Events. */\nclass ActionResolver {\n  a11yClickSupport = false;\n  clickModSupport = true;\n  syntheticMouseEventSupport;\n  updateEventInfoForA11yClick = undefined;\n  preventDefaultForA11yClick = undefined;\n  populateClickOnlyAction = undefined;\n  constructor({\n    syntheticMouseEventSupport = false,\n    clickModSupport = true\n  } = {}) {\n    this.syntheticMouseEventSupport = syntheticMouseEventSupport;\n    this.clickModSupport = clickModSupport;\n  }\n  resolveEventType(eventInfo) {\n    // We distinguish modified and plain clicks in order to support the\n    // default browser behavior of modified clicks on links; usually to\n    // open the URL of the link in new tab or new window on ctrl/cmd\n    // click. A DOM 'click' event is mapped to the jsaction 'click'\n    // event iff there is no modifier present on the event. If there is\n    // a modifier, it's mapped to 'clickmod' instead.\n    //\n    // It's allowed to omit the event in the jsaction attribute. In that\n    // case, 'click' is assumed. Thus the following two are equivalent:\n    //\n    //   <a href=\"someurl\" jsaction=\"gna.fu\">\n    //   <a href=\"someurl\" jsaction=\"click:gna.fu\">\n    //\n    // For unmodified clicks, EventContract invokes the jsaction\n    // 'gna.fu'. For modified clicks, EventContract won't find a\n    // suitable action and leave the event to be handled by the\n    // browser.\n    //\n    // In order to also invoke a jsaction handler for a modifier click,\n    // 'clickmod' needs to be used:\n    //\n    //   <a href=\"someurl\" jsaction=\"clickmod:gna.fu\">\n    //\n    // EventContract invokes the jsaction 'gna.fu' for modified\n    // clicks. Unmodified clicks are left to the browser.\n    //\n    // In order to set up the event contract to handle both clickonly and\n    // clickmod, only addEvent(EventType.CLICK) is necessary.\n    //\n    // In order to set up the event contract to handle click,\n    // addEvent() is necessary for CLICK, KEYDOWN, and KEYPRESS event types.  If\n    // a11y click support is enabled, addEvent() will set up the appropriate key\n    // event handler automatically.\n    if (this.clickModSupport && getEventType(eventInfo) === EventType.CLICK && isModifiedClickEvent(getEvent(eventInfo))) {\n      setEventType(eventInfo, EventType.CLICKMOD);\n    } else if (this.a11yClickSupport) {\n      this.updateEventInfoForA11yClick(eventInfo);\n    }\n  }\n  resolveAction(eventInfo) {\n    if (getResolved(eventInfo)) {\n      return;\n    }\n    this.populateAction(eventInfo, getTargetElement(eventInfo));\n    setResolved(eventInfo, true);\n  }\n  resolveParentAction(eventInfo) {\n    const action = getAction(eventInfo);\n    const actionElement = action && getActionElement(action);\n    unsetAction(eventInfo);\n    const parentNode = actionElement && this.getParentNode(actionElement);\n    if (!parentNode) {\n      return;\n    }\n    this.populateAction(eventInfo, parentNode);\n  }\n  /**\n   * Searches for a jsaction that the DOM event maps to and creates an\n   * object containing event information used for dispatching by\n   * jsaction.Dispatcher. This method populates the `action` and `actionElement`\n   * fields of the EventInfo object passed in by finding the first\n   * jsaction attribute above the target Node of the event, and below\n   * the container Node, that specifies a jsaction for the event\n   * type. If no such jsaction is found, then action is undefined.\n   *\n   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an\n   *    action is found on any `Element` in the path of the `Event`.\n   */\n  populateAction(eventInfo, currentTarget) {\n    let actionElement = currentTarget;\n    while (actionElement && actionElement !== getContainer(eventInfo)) {\n      if (actionElement.nodeType === Node.ELEMENT_NODE) {\n        this.populateActionOnElement(actionElement, eventInfo);\n      }\n      if (getAction(eventInfo)) {\n        // An event is handled by at most one jsaction. Thus we stop at the\n        // first matching jsaction specified in a jsaction attribute up the\n        // ancestor chain of the event target node.\n        break;\n      }\n      actionElement = this.getParentNode(actionElement);\n    }\n    const action = getAction(eventInfo);\n    if (!action) {\n      // No action found.\n      return;\n    }\n    if (this.a11yClickSupport) {\n      this.preventDefaultForA11yClick(eventInfo);\n    }\n    // We attempt to handle the mouseenter/mouseleave events here by\n    // detecting whether the mouseover/mouseout events correspond to\n    // entering/leaving an element.\n    if (this.syntheticMouseEventSupport) {\n      if (getEventType(eventInfo) === EventType.MOUSEENTER || getEventType(eventInfo) === EventType.MOUSELEAVE || getEventType(eventInfo) === EventType.POINTERENTER || getEventType(eventInfo) === EventType.POINTERLEAVE) {\n        // We attempt to handle the mouseenter/mouseleave events here by\n        // detecting whether the mouseover/mouseout events correspond to\n        // entering/leaving an element.\n        if (isMouseSpecialEvent(getEvent(eventInfo), getEventType(eventInfo), getActionElement(action))) {\n          // If both mouseover/mouseout and mouseenter/mouseleave events are\n          // enabled, two separate handlers for mouseover/mouseout are\n          // registered. Both handlers will see the same event instance\n          // so we create a copy to avoid interfering with the dispatching of\n          // the mouseover/mouseout event.\n          const copiedEvent = createMouseSpecialEvent(getEvent(eventInfo), getActionElement(action));\n          setEvent(eventInfo, copiedEvent);\n          // Since the mouseenter/mouseleave events do not bubble, the target\n          // of the event is technically the `actionElement` (the node with the\n          // `jsaction` attribute)\n          setTargetElement(eventInfo, getActionElement(action));\n        } else {\n          unsetAction(eventInfo);\n        }\n      }\n    }\n  }\n  /**\n   * Walk to the parent node, unless the node has a different owner in\n   * which case we walk to the owner. Attempt to walk to host of a\n   * shadow root if needed.\n   */\n  getParentNode(element) {\n    const owner = element[Property.OWNER];\n    if (owner) {\n      return owner;\n    }\n    const parentNode = element.parentNode;\n    if (parentNode?.nodeName === '#document-fragment') {\n      return parentNode?.host ?? null;\n    }\n    return parentNode;\n  }\n  /**\n   * Accesses the jsaction map on a node and retrieves the name of the\n   * action the given event is mapped to, if any. It parses the\n   * attribute value and stores it in a property on the node for\n   * subsequent retrieval without re-parsing and re-accessing the\n   * attribute.\n   *\n   * @param actionElement The DOM node to retrieve the jsaction map from.\n   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an\n   *    action is found on the `actionElement`.\n   */\n  populateActionOnElement(actionElement, eventInfo) {\n    const actionMap = this.parseActions(actionElement);\n    const actionName = actionMap[getEventType(eventInfo)];\n    if (actionName !== undefined) {\n      setAction(eventInfo, actionName, actionElement);\n    }\n    if (this.a11yClickSupport) {\n      this.populateClickOnlyAction(actionElement, eventInfo, actionMap);\n    }\n  }\n  /**\n   * Parses and caches an element's jsaction element into a map.\n   *\n   * This is primarily for internal use.\n   *\n   * @param actionElement The DOM node to retrieve the jsaction map from.\n   * @return Map from event to qualified name of the jsaction bound to it.\n   */\n  parseActions(actionElement) {\n    let actionMap = get(actionElement);\n    if (!actionMap) {\n      const jsactionAttribute = actionElement.getAttribute(Attribute.JSACTION);\n      if (!jsactionAttribute) {\n        actionMap = EMPTY_ACTION_MAP;\n        set(actionElement, actionMap);\n      } else {\n        actionMap = getParsed(jsactionAttribute);\n        if (!actionMap) {\n          actionMap = {};\n          const values = jsactionAttribute.split(REGEXP_SEMICOLON);\n          for (let idx = 0; idx < values.length; idx++) {\n            const value = values[idx];\n            if (!value) {\n              continue;\n            }\n            const colon = value.indexOf(Char.EVENT_ACTION_SEPARATOR);\n            const hasColon = colon !== -1;\n            const type = hasColon ? value.substr(0, colon).trim() : DEFAULT_EVENT_TYPE;\n            const action = hasColon ? value.substr(colon + 1).trim() : value;\n            actionMap[type] = action;\n          }\n          setParsed(jsactionAttribute, actionMap);\n        }\n        set(actionElement, actionMap);\n      }\n    }\n    return actionMap;\n  }\n  addA11yClickSupport(updateEventInfoForA11yClick, preventDefaultForA11yClick, populateClickOnlyAction) {\n    this.a11yClickSupport = true;\n    this.updateEventInfoForA11yClick = updateEventInfoForA11yClick;\n    this.preventDefaultForA11yClick = preventDefaultForA11yClick;\n    this.populateClickOnlyAction = populateClickOnlyAction;\n  }\n}\n\n/**\n * @fileoverview An enum to control who can call certain jsaction APIs.\n */\nvar Restriction;\n(function (Restriction) {\n  Restriction[Restriction[\"I_AM_THE_JSACTION_FRAMEWORK\"] = 0] = \"I_AM_THE_JSACTION_FRAMEWORK\";\n})(Restriction || (Restriction = {}));\n\n/**\n * Receives a DOM event, determines the jsaction associated with the source\n * element of the DOM event, and invokes the handler associated with the\n * jsaction.\n */\nclass Dispatcher {\n  dispatchDelegate;\n  // The ActionResolver to use to resolve actions.\n  actionResolver;\n  /** The replayer function to be called when there are queued events. */\n  eventReplayer;\n  /** Whether the event replay is scheduled. */\n  eventReplayScheduled = false;\n  /** The queue of events. */\n  replayEventInfoWrappers = [];\n  /**\n   * Options are:\n   *   - `eventReplayer`: When the event contract dispatches replay events\n   *      to the Dispatcher, the Dispatcher collects them and in the next tick\n   *      dispatches them to the `eventReplayer`. Defaults to dispatching to `dispatchDelegate`.\n   * @param dispatchDelegate A function that should handle dispatching an `EventInfoWrapper` to handlers.\n   */\n  constructor(dispatchDelegate, {\n    actionResolver,\n    eventReplayer\n  } = {}) {\n    this.dispatchDelegate = dispatchDelegate;\n    this.actionResolver = actionResolver;\n    this.eventReplayer = eventReplayer;\n  }\n  /**\n   * Receives an event or the event queue from the EventContract. The event\n   * queue is copied and it attempts to replay.\n   * If event info is passed in it looks for an action handler that can handle\n   * the given event.  If there is no handler registered queues the event and\n   * checks if a loader is registered for the given namespace. If so, calls it.\n   *\n   * Alternatively, if in global dispatch mode, calls all registered global\n   * handlers for the appropriate event type.\n   *\n   * The three functionalities of this call are deliberately not split into\n   * three methods (and then declared as an abstract interface), because the\n   * interface is used by EventContract, which lives in a different jsbinary.\n   * Therefore the interface between the three is defined entirely in terms that\n   * are invariant under jscompiler processing (Function and Array, as opposed\n   * to a custom type with method names).\n   *\n   * @param eventInfo The info for the event that triggered this call or the\n   *     queue of events from EventContract.\n   */\n  dispatch(eventInfo) {\n    const eventInfoWrapper = new EventInfoWrapper(eventInfo);\n    this.actionResolver?.resolveEventType(eventInfo);\n    this.actionResolver?.resolveAction(eventInfo);\n    const action = eventInfoWrapper.getAction();\n    if (action && shouldPreventDefaultBeforeDispatching(action.element, eventInfoWrapper)) {\n      preventDefault(eventInfoWrapper.getEvent());\n    }\n    if (this.eventReplayer && eventInfoWrapper.getIsReplay()) {\n      this.scheduleEventInfoWrapperReplay(eventInfoWrapper);\n      return;\n    }\n    this.dispatchDelegate(eventInfoWrapper);\n  }\n  /**\n   * Schedules an `EventInfoWrapper` for replay. The replaying will happen in its own\n   * stack once the current flow cedes control. This is done to mimic\n   * browser event handling.\n   */\n  scheduleEventInfoWrapperReplay(eventInfoWrapper) {\n    this.replayEventInfoWrappers.push(eventInfoWrapper);\n    if (this.eventReplayScheduled) {\n      return;\n    }\n    this.eventReplayScheduled = true;\n    Promise.resolve().then(() => {\n      this.eventReplayScheduled = false;\n      this.eventReplayer(this.replayEventInfoWrappers);\n    });\n  }\n}\n/**\n * Creates an `EventReplayer` that calls the `replay` function for every `eventInfoWrapper` in\n * the queue.\n */\nfunction createEventReplayer(replay) {\n  return eventInfoWrappers => {\n    for (const eventInfoWrapper of eventInfoWrappers) {\n      replay(eventInfoWrapper);\n    }\n  };\n}\n/**\n * Returns true if the default action of this event should be prevented before\n * this event is dispatched.\n */\nfunction shouldPreventDefaultBeforeDispatching(actionElement, eventInfoWrapper) {\n  // Prevent browser from following <a> node links if a jsaction is present\n  // and we are dispatching the action now. Note that the targetElement may be\n  // a child of an anchor that has a jsaction attached. For that reason, we\n  // need to check the actionElement rather than the targetElement.\n  return actionElement.tagName === 'A' && (eventInfoWrapper.getEventType() === EventType.CLICK || eventInfoWrapper.getEventType() === EventType.CLICKMOD);\n}\n/**\n * Registers deferred functionality for an EventContract and a Jsaction\n * Dispatcher.\n */\nfunction registerDispatcher$2(eventContract, dispatcher) {\n  eventContract.ecrd(eventInfo => {\n    dispatcher.dispatch(eventInfo);\n  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);\n}\n\n/** An internal symbol used to indicate whether propagation should be stopped or not. */\nconst PROPAGATION_STOPPED_SYMBOL = Symbol.for('propagationStopped');\n/** Extra event phases beyond what the browser provides. */\nconst EventPhase = {\n  REPLAY: 101\n};\nconst PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS = ' Because event replay occurs after browser dispatch, `preventDefault` would have no ' + 'effect. You can check whether an event is being replayed by accessing the event phase: ' + '`event.eventPhase === EventPhase.REPLAY`.';\nconst PREVENT_DEFAULT_ERROR_MESSAGE = `\\`preventDefault\\` called during event replay.`;\nconst COMPOSED_PATH_ERROR_MESSAGE_DETAILS = ' Because event replay occurs after browser ' + 'dispatch, `composedPath()` will be empty. Iterate parent nodes from `event.target` or ' + '`event.currentTarget` if you need to check elements in the event path.';\nconst COMPOSED_PATH_ERROR_MESSAGE = `\\`composedPath\\` called during event replay.`;\n/**\n * A dispatcher that uses browser-based `Event` semantics, for example bubbling, `stopPropagation`,\n * `currentTarget`, etc.\n */\nclass EventDispatcher {\n  dispatchDelegate;\n  clickModSupport;\n  actionResolver;\n  dispatcher;\n  constructor(dispatchDelegate, clickModSupport = true) {\n    this.dispatchDelegate = dispatchDelegate;\n    this.clickModSupport = clickModSupport;\n    this.actionResolver = new ActionResolver({\n      clickModSupport\n    });\n    this.dispatcher = new Dispatcher(eventInfoWrapper => {\n      this.dispatchToDelegate(eventInfoWrapper);\n    }, {\n      actionResolver: this.actionResolver\n    });\n  }\n  /**\n   * The entrypoint for the `EventContract` dispatch.\n   */\n  dispatch(eventInfo) {\n    this.dispatcher.dispatch(eventInfo);\n  }\n  /** Internal method that does basic disaptching. */\n  dispatchToDelegate(eventInfoWrapper) {\n    if (eventInfoWrapper.getIsReplay()) {\n      prepareEventForReplay(eventInfoWrapper);\n    }\n    prepareEventForBubbling(eventInfoWrapper);\n    while (eventInfoWrapper.getAction()) {\n      prepareEventForDispatch(eventInfoWrapper);\n      // If this is a capture event, ONLY dispatch if the action element is the target.\n      if (isCaptureEventType(eventInfoWrapper.getEventType()) && eventInfoWrapper.getAction().element !== eventInfoWrapper.getTargetElement()) {\n        return;\n      }\n      this.dispatchDelegate(eventInfoWrapper.getEvent(), eventInfoWrapper.getAction().name);\n      if (propagationStopped(eventInfoWrapper)) {\n        return;\n      }\n      this.actionResolver.resolveParentAction(eventInfoWrapper.eventInfo);\n    }\n  }\n}\nfunction prepareEventForBubbling(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const originalStopPropagation = eventInfoWrapper.getEvent().stopPropagation.bind(event);\n  const stopPropagation = () => {\n    event[PROPAGATION_STOPPED_SYMBOL] = true;\n    originalStopPropagation();\n  };\n  patchEventInstance(event, 'stopPropagation', stopPropagation);\n  patchEventInstance(event, 'stopImmediatePropagation', stopPropagation);\n}\nfunction propagationStopped(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  return !!event[PROPAGATION_STOPPED_SYMBOL];\n}\nfunction prepareEventForReplay(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const target = eventInfoWrapper.getTargetElement();\n  const originalPreventDefault = event.preventDefault.bind(event);\n  patchEventInstance(event, 'target', target);\n  patchEventInstance(event, 'eventPhase', EventPhase.REPLAY);\n  patchEventInstance(event, 'preventDefault', () => {\n    originalPreventDefault();\n    throw new Error(PREVENT_DEFAULT_ERROR_MESSAGE + (ngDevMode ? PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS : ''));\n  });\n  patchEventInstance(event, 'composedPath', () => {\n    throw new Error(COMPOSED_PATH_ERROR_MESSAGE + (ngDevMode ? COMPOSED_PATH_ERROR_MESSAGE_DETAILS : ''));\n  });\n}\nfunction prepareEventForDispatch(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const currentTarget = eventInfoWrapper.getAction()?.element;\n  if (currentTarget) {\n    patchEventInstance(event, 'currentTarget', currentTarget, {\n      // `currentTarget` is going to get reassigned every dispatch.\n      configurable: true\n    });\n  }\n}\n/**\n * Patch `Event` instance during non-standard `Event` dispatch. This patches just the `Event`\n * instance that the browser created, it does not patch global properties or methods.\n *\n * This is necessary because dispatching an `Event` outside of browser dispatch results in\n * incorrect properties and methods that need to be polyfilled or do not work.\n *\n * JSAction dispatch adds two extra \"phases\" to event dispatch:\n * 1. Event delegation - the event is being dispatched by a delegating event handler on a container\n *    (typically `window.document.documentElement`), to a delegated event handler on some child\n *    element. Certain `Event` properties will be unintuitive, such as `currentTarget`, which would\n *    be the container rather than the child element. Bubbling would also not work. In order to\n *    emulate the browser, these properties and methods on the `Event` are patched.\n * 2. Event replay - the event is being dispatched by the framework once the handlers have been\n *    loaded (during hydration, or late-loaded). Certain `Event` properties can be unset by the\n *    browser because the `Event` is no longer actively being dispatched, such as `target`. Other\n *    methods have no effect because the `Event` has already been dispatched, such as\n *    `preventDefault`. Bubbling would also not work. These properties and methods are patched,\n *    either to fill in information that the browser may have removed, or to throw errors in methods\n *    that no longer behave as expected.\n */\nfunction patchEventInstance(event, property, value, {\n  configurable = false\n} = {}) {\n  Object.defineProperty(event, property, {\n    value,\n    configurable\n  });\n}\n/**\n * Registers deferred functionality for an EventContract and a Jsaction\n * Dispatcher.\n */\nfunction registerDispatcher$1(eventContract, dispatcher) {\n  eventContract.ecrd(eventInfo => {\n    dispatcher.dispatch(eventInfo);\n  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);\n}\n\n/**\n * EarlyEventContract intercepts events in the bubbling phase at the\n * boundary of the document body. This mapping will be passed to the\n * late-loaded EventContract.\n */\nclass EarlyEventContract {\n  dataContainer;\n  constructor(dataContainer = window, container = window.document.documentElement) {\n    this.dataContainer = dataContainer;\n    dataContainer._ejsa = createEarlyJsactionData(container);\n  }\n  /**\n   * Installs a list of event types for container .\n   */\n  addEvents(types, capture) {\n    addEvents(this.dataContainer._ejsa, types, capture);\n  }\n}\n/** Creates an `EarlyJsactionData` object. */\nfunction createEarlyJsactionData(container) {\n  const q = [];\n  const d = eventInfo => {\n    q.push(eventInfo);\n  };\n  const h = event => {\n    d(createEventInfoFromParameters(event.type, event, event.target, container, Date.now()));\n  };\n  return {\n    c: container,\n    q,\n    et: [],\n    etc: [],\n    d,\n    h\n  };\n}\n/** Add all the events to the container stored in the `EarlyJsactionData`. */\nfunction addEvents(earlyJsactionData, types, capture) {\n  for (let i = 0; i < types.length; i++) {\n    const eventType = types[i];\n    const eventTypes = capture ? earlyJsactionData.etc : earlyJsactionData.et;\n    eventTypes.push(eventType);\n    earlyJsactionData.c.addEventListener(eventType, earlyJsactionData.h, capture);\n  }\n}\n/** Get the queued `EventInfo` objects that were dispatched before a dispatcher was registered. */\nfunction getQueuedEventInfos(earlyJsactionData) {\n  return earlyJsactionData?.q ?? [];\n}\n/** Register a different dispatcher function on the `EarlyJsactionData`. */\nfunction registerDispatcher(earlyJsactionData, dispatcher) {\n  if (!earlyJsactionData) {\n    return;\n  }\n  earlyJsactionData.d = dispatcher;\n}\n/** Removes all event listener handlers. */\nfunction removeAllEventListeners(earlyJsactionData) {\n  if (!earlyJsactionData) {\n    return;\n  }\n  removeEventListeners(earlyJsactionData.c, earlyJsactionData.et, earlyJsactionData.h);\n  removeEventListeners(earlyJsactionData.c, earlyJsactionData.etc, earlyJsactionData.h, true);\n}\nfunction removeEventListeners(container, eventTypes, earlyEventHandler, capture) {\n  for (let i = 0; i < eventTypes.length; i++) {\n    container.removeEventListener(eventTypes[i], earlyEventHandler, /* useCapture */capture);\n  }\n}\n\n/**\n * @define Support for the non-bubbling mouseenter and mouseleave events.  This\n * flag can be overridden in a build rule.\n */\nconst MOUSE_SPECIAL_SUPPORT = false;\n\n/**\n * @fileoverview Implements the local event handling contract. This\n * allows DOM objects in a container that enters into this contract to\n * define event handlers which are executed in a local context.\n *\n * One EventContract instance can manage the contract for multiple\n * containers, which are added using the addContainer() method.\n *\n * Events can be registered using the addEvent() method.\n *\n * A Dispatcher is added using the registerDispatcher() method. Until there is\n * a dispatcher, events are queued. The idea is that the EventContract\n * class is inlined in the HTML of the top level page and instantiated\n * right after the start of <body>. The Dispatcher class is contained\n * in the external deferred js, and instantiated and registered with\n * EventContract when the external javascript in the page loads. The\n * external javascript will also register the jsaction handlers, which\n * then pick up the queued events at the time of registration.\n *\n * Since this class is meant to be inlined in the main page HTML, the\n * size of the binary compiled from this file MUST be kept as small as\n * possible and thus its dependencies to a minimum.\n */\n/**\n * EventContract intercepts events in the bubbling phase at the\n * boundary of a container element, and maps them to generic actions\n * which are specified using the custom jsaction attribute in\n * HTML. Behavior of the application is then specified in terms of\n * handler for such actions, cf. jsaction.Dispatcher in dispatcher.js.\n *\n * This has several benefits: (1) No DOM event handlers need to be\n * registered on the specific elements in the UI. (2) The set of\n * events that the application has to handle can be specified in terms\n * of the semantics of the application, rather than in terms of DOM\n * events. (3) Invocation of handlers can be delayed and handlers can\n * be delay loaded in a generic way.\n */\nclass EventContract {\n  static MOUSE_SPECIAL_SUPPORT = MOUSE_SPECIAL_SUPPORT;\n  containerManager;\n  /**\n   * The DOM events which this contract covers. Used to prevent double\n   * registration of event types. The value of the map is the\n   * internally created DOM event handler function that handles the\n   * DOM events. See addEvent().\n   *\n   */\n  eventHandlers = {};\n  browserEventTypeToExtraEventTypes = {};\n  /**\n   * The dispatcher function. Events are passed to this function for\n   * handling once it was set using the registerDispatcher() method. This is\n   * done because the function is passed from another jsbinary, so passing the\n   * instance and invoking the method here would require to leave the method\n   * unobfuscated.\n   */\n  dispatcher = null;\n  /**\n   * The list of suspended `EventInfo` that will be dispatched\n   * as soon as the `Dispatcher` is registered.\n   */\n  queuedEventInfos = [];\n  constructor(containerManager) {\n    this.containerManager = containerManager;\n  }\n  handleEvent(eventType, event, container) {\n    const eventInfo = createEventInfoFromParameters(/* eventType= */eventType, /* event= */event, /* targetElement= */event.target, /* container= */container, /* timestamp= */Date.now());\n    this.handleEventInfo(eventInfo);\n  }\n  /**\n   * Handle an `EventInfo`.\n   */\n  handleEventInfo(eventInfo) {\n    if (!this.dispatcher) {\n      // All events are queued when the dispatcher isn't yet loaded.\n      setIsReplay(eventInfo, true);\n      this.queuedEventInfos?.push(eventInfo);\n      return;\n    }\n    this.dispatcher(eventInfo);\n  }\n  /**\n   * Enables jsaction handlers to be called for the event type given by\n   * name.\n   *\n   * If the event is already registered, this does nothing.\n   *\n   * @param prefixedEventType If supplied, this event is used in\n   *     the actual browser event registration instead of the name that is\n   *     exposed to jsaction. Use this if you e.g. want users to be able\n   *     to subscribe to jsaction=\"transitionEnd:foo\" while the underlying\n   *     event is webkitTransitionEnd in one browser and mozTransitionEnd\n   *     in another.\n   *\n   * @param passive A boolean value that, if `true`, indicates that the event\n   *     handler will never call `preventDefault()`.\n   */\n  addEvent(eventType, prefixedEventType, passive) {\n    if (eventType in this.eventHandlers || !this.containerManager) {\n      return;\n    }\n    if (!EventContract.MOUSE_SPECIAL_SUPPORT && MOUSE_SPECIAL_EVENT_TYPES.indexOf(eventType) >= 0) {\n      return;\n    }\n    const eventHandler = (eventType, event, container) => {\n      this.handleEvent(eventType, event, container);\n    };\n    // Store the callback to allow us to replay events.\n    this.eventHandlers[eventType] = eventHandler;\n    const browserEventType = getBrowserEventType(prefixedEventType || eventType);\n    if (browserEventType !== eventType) {\n      const eventTypes = this.browserEventTypeToExtraEventTypes[browserEventType] || [];\n      eventTypes.push(eventType);\n      this.browserEventTypeToExtraEventTypes[browserEventType] = eventTypes;\n    }\n    this.containerManager.addEventListener(browserEventType, element => {\n      return event => {\n        eventHandler(eventType, event, element);\n      };\n    }, passive);\n  }\n  /**\n   * Gets the queued early events and replay them using the appropriate handler\n   * in the provided event contract. Once all the events are replayed, it cleans\n   * up the early contract.\n   */\n  replayEarlyEvents(earlyJsactionData = window._ejsa) {\n    // Check if the early contract is present and prevent calling this function\n    // more than once.\n    if (!earlyJsactionData) {\n      return;\n    }\n    // Replay the early contract events.\n    this.replayEarlyEventInfos(earlyJsactionData.q);\n    // Clean up the early contract.\n    removeAllEventListeners(earlyJsactionData);\n    delete window._ejsa;\n  }\n  /**\n   * Replays all the early `EventInfo` objects, dispatching them through the normal\n   * `EventContract` flow.\n   */\n  replayEarlyEventInfos(earlyEventInfos) {\n    for (let i = 0; i < earlyEventInfos.length; i++) {\n      const earlyEventInfo = earlyEventInfos[i];\n      const eventTypes = this.getEventTypesForBrowserEventType(earlyEventInfo.eventType);\n      for (let j = 0; j < eventTypes.length; j++) {\n        const eventInfo = cloneEventInfo(earlyEventInfo);\n        // EventInfo eventType maps to JSAction's internal event type,\n        // rather than the browser event type.\n        setEventType(eventInfo, eventTypes[j]);\n        this.handleEventInfo(eventInfo);\n      }\n    }\n  }\n  /**\n   * Returns all JSAction event types that have been registered for a given\n   * browser event type.\n   */\n  getEventTypesForBrowserEventType(browserEventType) {\n    const eventTypes = [];\n    if (this.eventHandlers[browserEventType]) {\n      eventTypes.push(browserEventType);\n    }\n    if (this.browserEventTypeToExtraEventTypes[browserEventType]) {\n      eventTypes.push(...this.browserEventTypeToExtraEventTypes[browserEventType]);\n    }\n    return eventTypes;\n  }\n  /**\n   * Returns the event handler function for a given event type.\n   */\n  handler(eventType) {\n    return this.eventHandlers[eventType];\n  }\n  /**\n   * Cleans up the event contract. This resets all of the `EventContract`'s\n   * internal state. Users are responsible for not using this `EventContract`\n   * after it has been cleaned up.\n   */\n  cleanUp() {\n    this.containerManager?.cleanUp();\n    this.containerManager = null;\n    this.eventHandlers = {};\n    this.browserEventTypeToExtraEventTypes = {};\n    this.dispatcher = null;\n    this.queuedEventInfos = [];\n  }\n  /**\n   * Register a dispatcher function. Event info of each event mapped to\n   * a jsaction is passed for handling to this callback. The queued\n   * events are passed as well to the dispatcher for later replaying\n   * once the dispatcher is registered. Clears the event queue to null.\n   *\n   * @param dispatcher The dispatcher function.\n   * @param restriction\n   */\n  registerDispatcher(dispatcher, restriction) {\n    this.ecrd(dispatcher, restriction);\n  }\n  /**\n   * Unrenamed alias for registerDispatcher. Necessary for any codebases that\n   * split the `EventContract` and `Dispatcher` code into different compilation\n   * units.\n   */\n  ecrd(dispatcher, restriction) {\n    this.dispatcher = dispatcher;\n    if (this.queuedEventInfos?.length) {\n      for (let i = 0; i < this.queuedEventInfos.length; i++) {\n        this.handleEventInfo(this.queuedEventInfos[i]);\n      }\n      this.queuedEventInfos = null;\n    }\n  }\n}\n\n/**\n * Creates an `EarlyJsactionData`, adds events to it, and populates it on a nested object on\n * the window.\n */\nfunction bootstrapAppScopedEarlyEventContract(container, appId, bubbleEventTypes, captureEventTypes, dataContainer = window) {\n  const earlyJsactionData = createEarlyJsactionData(container);\n  if (!dataContainer._ejsas) {\n    dataContainer._ejsas = {};\n  }\n  dataContainer._ejsas[appId] = earlyJsactionData;\n  addEvents(earlyJsactionData, bubbleEventTypes);\n  addEvents(earlyJsactionData, captureEventTypes, /* capture= */true);\n}\n/** Get the queued `EventInfo` objects that were dispatched before a dispatcher was registered. */\nfunction getAppScopedQueuedEventInfos(appId, dataContainer = window) {\n  return getQueuedEventInfos(dataContainer._ejsas?.[appId]);\n}\n/**\n * Registers a dispatcher function on the `EarlyJsactionData` present on the nested object on the\n * window.\n */\nfunction registerAppScopedDispatcher(restriction, appId, dispatcher, dataContainer = window) {\n  registerDispatcher(dataContainer._ejsas?.[appId], dispatcher);\n}\n/** Removes all event listener handlers. */\nfunction removeAllAppScopedEventListeners(appId, dataContainer = window) {\n  removeAllEventListeners(dataContainer._ejsas?.[appId]);\n}\n/** Clear the early event contract. */\nfunction clearAppScopedEarlyEventContract(appId, dataContainer = window) {\n  if (!dataContainer._ejsas) {\n    return;\n  }\n  dataContainer._ejsas[appId] = undefined;\n}\nexport { Attribute, EventContract, EventContractContainer, EventDispatcher, EventInfoWrapper, EventPhase, bootstrapAppScopedEarlyEventContract, clearAppScopedEarlyEventContract, getDefaulted as getActionCache, getAppScopedQueuedEventInfos, isCaptureEventType, isEarlyEventType, registerAppScopedDispatcher, registerDispatcher$1 as registerDispatcher, removeAllAppScopedEventListeners };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, producerUpdateValueVersion as producerUpdateValueVersion$1, producerMarkClean as producerMarkClean$1, defaultEquals as defaultEquals$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';\nexport { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { Attribute as Attribute$1, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, clearAppScopedEarlyEventContract, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType, EventPhase } from '@angular/core/primitives/event-dispatch';\nimport { map } from 'rxjs/operators';\n\n/**\n * Base URL for the error details page.\n *\n * Keep this constant in sync across:\n *  - packages/compiler-cli/src/ngtsc/diagnostics/src/error_details_base_url.ts\n *  - packages/core/src/error_details_base_url.ts\n */\nconst ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.dev/errors';\n/**\n * URL for the XSS security documentation.\n */\nconst XSS_SECURITY_URL = 'https://g.co/ng/security#xss';\n\n/**\n * Class that represents a runtime error.\n * Formats and outputs the error message in a consistent way.\n *\n * Example:\n * ```ts\n *  throw new RuntimeError(\n *    RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,\n *    ngDevMode && 'Injector has already been destroyed.');\n * ```\n *\n * Note: the `message` argument contains a descriptive error message as a string in development\n * mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the\n * `message` argument becomes `false`, thus we account for it in the typings and the runtime\n * logic.\n */\nclass RuntimeError extends Error {\n  code;\n  constructor(code, message) {\n    super(formatRuntimeError(code, message));\n    this.code = code;\n  }\n}\n/**\n * Called to format a runtime error.\n * See additional info on the `message` argument type in the `RuntimeError` class description.\n */\nfunction formatRuntimeError(code, message) {\n  // Error code might be a negative number, which is a special marker that instructs the logic to\n  // generate a link to the error details page on angular.io.\n  // We also prepend `0` to non-compile-time errors.\n  const fullCode = `NG0${Math.abs(code)}`;\n  let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;\n  if (ngDevMode && code < 0) {\n    const addPeriodSeparator = !errorMessage.match(/[.,;!?\\n]$/);\n    const separator = addPeriodSeparator ? '.' : '';\n    errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;\n  }\n  return errorMessage;\n}\nconst REQUIRED_UNSET_VALUE = /* @__PURE__ */Symbol('InputSignalNode#UNSET');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst INPUT_SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...SIGNAL_NODE$1,\n    transformFn: undefined,\n    applyValueToInputSignal(node, value) {\n      signalSetFn$1(node, value);\n    }\n  };\n})();\nconst ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */Symbol();\nconst ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */Symbol();\n/**\n * Creates an input signal.\n *\n * @param initialValue The initial value.\n *   Can be set to {@link REQUIRED_UNSET_VALUE} for required inputs.\n * @param options Additional options for the input. e.g. a transform, or an alias.\n */\nfunction createInputSignal(initialValue, options) {\n  const node = Object.create(INPUT_SIGNAL_NODE);\n  node.value = initialValue;\n  // Perf note: Always set `transformFn` here to ensure that `node` always\n  // has the same v8 class shape, allowing monomorphic reads on input signals.\n  node.transformFn = options?.transform;\n  function inputValueFn() {\n    // Record that someone looked at this signal.\n    producerAccessed$1(node);\n    if (node.value === REQUIRED_UNSET_VALUE) {\n      throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, ngDevMode && 'Input is required but no value is available yet.');\n    }\n    return node.value;\n  }\n  inputValueFn[SIGNAL$1] = node;\n  if (ngDevMode) {\n    inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;\n    node.debugName = options?.debugName;\n  }\n  return inputValueFn;\n}\n\n/**\n * Convince closure compiler that the wrapped function has no side-effects.\n *\n * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to\n * allow us to execute a function but have closure compiler mark the call as no-side-effects.\n * It is important that the return value for the `noSideEffects` function be assigned\n * to something which is retained otherwise the call to `noSideEffects` will be removed by closure\n * compiler.\n */\nfunction noSideEffects(fn) {\n  return {\n    toString: fn\n  }.toString();\n}\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\n/**\n * @suppress {globalThis}\n */\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function DecoratorFactory(...args) {\n      if (this instanceof DecoratorFactory) {\n        metaCtor.call(this, ...args);\n        return this;\n      }\n      const annotationInstance = new DecoratorFactory(...args);\n      return function TypeDecorator(cls) {\n        if (typeFn) typeFn(cls, ...args);\n        // Use of Object.defineProperty is important since it creates non-enumerable property which\n        // prevents the property is copied during subclassing.\n        const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {\n          value: []\n        })[ANNOTATIONS];\n        annotations.push(annotationInstance);\n        if (additionalProcessing) additionalProcessing(cls);\n        return cls;\n      };\n    }\n    if (parentClass) {\n      DecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    DecoratorFactory.prototype.ngMetadataName = name;\n    DecoratorFactory.annotationCls = DecoratorFactory;\n    return DecoratorFactory;\n  });\n}\nfunction makeMetadataCtor(props) {\n  return function ctor(...args) {\n    if (props) {\n      const values = props(...args);\n      for (const propName in values) {\n        this[propName] = values[propName];\n      }\n    }\n  };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function ParamDecoratorFactory(...args) {\n      if (this instanceof ParamDecoratorFactory) {\n        metaCtor.apply(this, args);\n        return this;\n      }\n      const annotationInstance = new ParamDecoratorFactory(...args);\n      ParamDecorator.annotation = annotationInstance;\n      return ParamDecorator;\n      function ParamDecorator(cls, unusedKey, index) {\n        // Use of Object.defineProperty is important since it creates non-enumerable property which\n        // prevents the property is copied during subclassing.\n        const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {\n          value: []\n        })[PARAMETERS];\n        // there might be gaps if some in between parameters do not have annotations.\n        // we pad with nulls.\n        while (parameters.length <= index) {\n          parameters.push(null);\n        }\n        (parameters[index] = parameters[index] || []).push(annotationInstance);\n        return cls;\n      }\n    }\n    if (parentClass) {\n      ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    ParamDecoratorFactory.prototype.ngMetadataName = name;\n    ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n    return ParamDecoratorFactory;\n  });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function PropDecoratorFactory(...args) {\n      if (this instanceof PropDecoratorFactory) {\n        metaCtor.apply(this, args);\n        return this;\n      }\n      const decoratorInstance = new PropDecoratorFactory(...args);\n      function PropDecorator(target, name) {\n        // target is undefined with standard decorators. This case is not supported and will throw\n        // if this decorator is used in JIT mode with standard decorators.\n        if (target === undefined) {\n          throw new Error('Standard Angular field decorators are not supported in JIT mode.');\n        }\n        const constructor = target.constructor;\n        // Use of Object.defineProperty is important because it creates a non-enumerable property\n        // which prevents the property from being copied during subclassing.\n        const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {\n          value: {}\n        })[PROP_METADATA];\n        meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n        meta[name].unshift(decoratorInstance);\n        if (additionalProcessing) additionalProcessing(target, name, ...args);\n      }\n      return PropDecorator;\n    }\n    if (parentClass) {\n      PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    PropDecoratorFactory.prototype.ngMetadataName = name;\n    PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n    return PropDecoratorFactory;\n  });\n}\nconst _global = globalThis;\nfunction ngDevModeResetPerfCounters() {\n  const locationString = typeof location !== 'undefined' ? location.toString() : '';\n  const newCounters = {\n    namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,\n    firstCreatePass: 0,\n    tNode: 0,\n    tView: 0,\n    rendererCreateTextNode: 0,\n    rendererSetText: 0,\n    rendererCreateElement: 0,\n    rendererAddEventListener: 0,\n    rendererSetAttribute: 0,\n    rendererRemoveAttribute: 0,\n    rendererSetProperty: 0,\n    rendererSetClassName: 0,\n    rendererAddClass: 0,\n    rendererRemoveClass: 0,\n    rendererSetStyle: 0,\n    rendererRemoveStyle: 0,\n    rendererDestroy: 0,\n    rendererDestroyNode: 0,\n    rendererMoveNode: 0,\n    rendererRemoveNode: 0,\n    rendererAppendChild: 0,\n    rendererInsertBefore: 0,\n    rendererCreateComment: 0,\n    hydratedNodes: 0,\n    hydratedComponents: 0,\n    dehydratedViewsRemoved: 0,\n    dehydratedViewsCleanupRuns: 0,\n    componentsSkippedHydration: 0,\n    deferBlocksWithIncrementalHydration: 0\n  };\n  // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.\n  const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n  if (!allowNgDevModeTrue) {\n    _global['ngDevMode'] = false;\n  } else {\n    if (typeof _global['ngDevMode'] !== 'object') {\n      _global['ngDevMode'] = {};\n    }\n    Object.assign(_global['ngDevMode'], newCounters);\n  }\n  return newCounters;\n}\n/**\n * This function checks to see if the `ngDevMode` has been set. If yes,\n * then we honor it, otherwise we default to dev mode with additional checks.\n *\n * The idea is that unless we are doing production build where we explicitly\n * set `ngDevMode == false` we should be helping the developer by providing\n * as much early warning and errors as possible.\n *\n * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions\n * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode\n * is defined for the entire instruction set.\n *\n * When checking `ngDevMode` on toplevel, always init it before referencing it\n * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can\n *  get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.\n *\n * Details on possible values for `ngDevMode` can be found on its docstring.\n *\n * NOTE:\n * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nfunction initNgDevMode() {\n  // The below checks are to ensure that calling `initNgDevMode` multiple times does not\n  // reset the counters.\n  // If the `ngDevMode` is not an object, then it means we have not created the perf counters\n  // yet.\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (typeof ngDevMode !== 'object' || Object.keys(ngDevMode).length === 0) {\n      ngDevModeResetPerfCounters();\n    }\n    return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n  }\n  return false;\n}\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n  for (let key in objWithPropertyToExtract) {\n    if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n      return key;\n    }\n  }\n  throw Error('Could not find renamed property on target object.');\n}\n/**\n * Sets properties on a target object from a source object, but only if\n * the property doesn't already exist on the target object.\n * @param target The target to set properties on\n * @param source The source of the property keys and values to set\n */\nfunction fillProperties(target, source) {\n  for (const key in source) {\n    if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n      target[key] = source[key];\n    }\n  }\n}\nfunction stringify(token) {\n  if (typeof token === 'string') {\n    return token;\n  }\n  if (Array.isArray(token)) {\n    return '[' + token.map(stringify).join(', ') + ']';\n  }\n  if (token == null) {\n    return '' + token;\n  }\n  if (token.overriddenName) {\n    return `${token.overriddenName}`;\n  }\n  if (token.name) {\n    return `${token.name}`;\n  }\n  const res = token.toString();\n  if (res == null) {\n    return '' + res;\n  }\n  const newLineIndex = res.indexOf('\\n');\n  return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n}\n/**\n * Concatenates two strings with separator, allocating new strings only when necessary.\n *\n * @param before before string.\n * @param separator separator string.\n * @param after after string.\n * @returns concatenated string.\n */\nfunction concatStringsWithSpace(before, after) {\n  return before == null || before === '' ? after === null ? '' : after : after == null || after === '' ? before : before + ' ' + after;\n}\n/**\n * Ellipses the string in the middle when longer than the max length\n *\n * @param string\n * @param maxLength of the output string\n * @returns ellipsed string with ... in the middle\n */\nfunction truncateMiddle(str, maxLength = 100) {\n  if (!str || maxLength < 1 || str.length <= maxLength) return str;\n  if (maxLength == 1) return str.substring(0, 1) + '...';\n  const halfLimit = Math.round(maxLength / 2);\n  return str.substring(0, halfLimit) + '...' + str.substring(str.length - halfLimit);\n}\nconst __forward_ref__ = getClosureSafeProperty({\n  __forward_ref__: getClosureSafeProperty\n});\n/**\n * Allows to refer to references which are not yet defined.\n *\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\n * DI is declared, but not yet defined. It is also used when the `token` which we use when creating\n * a query is not yet defined.\n *\n * `forwardRef` is also used to break circularities in standalone components imports.\n *\n * @usageNotes\n * ### Circular dependency example\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\n *\n * ### Circular standalone reference import example\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   imports: [ChildComponent],\n *   selector: 'app-parent',\n *   template: `<app-child [hideParent]=\"hideParent\"></app-child>`,\n * })\n * export class ParentComponent {\n *   @Input() hideParent: boolean;\n * }\n *\n *\n * @Component({\n *   standalone: true,\n *   imports: [CommonModule, forwardRef(() => ParentComponent)],\n *   selector: 'app-child',\n *   template: `<app-parent *ngIf=\"!hideParent\"></app-parent>`,\n * })\n * export class ChildComponent {\n *   @Input() hideParent: boolean;\n * }\n * ```\n *\n * @publicApi\n */\nfunction forwardRef(forwardRefFn) {\n  forwardRefFn.__forward_ref__ = forwardRef;\n  forwardRefFn.toString = function () {\n    return stringify(this());\n  };\n  return forwardRefFn;\n}\n/**\n * Lazily retrieves the reference value from a forwardRef.\n *\n * Acts as the identity function when given a non-forward-ref value.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\n *\n * @see {@link forwardRef}\n * @publicApi\n */\nfunction resolveForwardRef(type) {\n  return isForwardRef(type) ? type() : type;\n}\n/** Checks whether a function is wrapped by a `forwardRef`. */\nfunction isForwardRef(fn) {\n  return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;\n}\n\n// The functions in this file verify that the assumptions we are making\nfunction assertNumber(actual, msg) {\n  if (!(typeof actual === 'number')) {\n    throwError(msg, typeof actual, 'number', '===');\n  }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n  assertNumber(actual, 'Expected a number');\n  assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n  assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n  if (!(typeof actual === 'string')) {\n    throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n  }\n}\nfunction assertFunction(actual, msg) {\n  if (!(typeof actual === 'function')) {\n    throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n  }\n}\nfunction assertEqual(actual, expected, msg) {\n  if (!(actual == expected)) {\n    throwError(msg, actual, expected, '==');\n  }\n}\nfunction assertNotEqual(actual, expected, msg) {\n  if (!(actual != expected)) {\n    throwError(msg, actual, expected, '!=');\n  }\n}\nfunction assertSame(actual, expected, msg) {\n  if (!(actual === expected)) {\n    throwError(msg, actual, expected, '===');\n  }\n}\nfunction assertNotSame(actual, expected, msg) {\n  if (!(actual !== expected)) {\n    throwError(msg, actual, expected, '!==');\n  }\n}\nfunction assertLessThan(actual, expected, msg) {\n  if (!(actual < expected)) {\n    throwError(msg, actual, expected, '<');\n  }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n  if (!(actual <= expected)) {\n    throwError(msg, actual, expected, '<=');\n  }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n  if (!(actual > expected)) {\n    throwError(msg, actual, expected, '>');\n  }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n  if (!(actual >= expected)) {\n    throwError(msg, actual, expected, '>=');\n  }\n}\nfunction assertNotDefined(actual, msg) {\n  if (actual != null) {\n    throwError(msg, actual, null, '==');\n  }\n}\nfunction assertDefined(actual, msg) {\n  if (actual == null) {\n    throwError(msg, actual, null, '!=');\n  }\n}\nfunction throwError(msg, actual, expected, comparison) {\n  throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n  if (!(node instanceof Node)) {\n    throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n  }\n}\nfunction assertElement(node) {\n  if (!(node instanceof Element)) {\n    throwError(`The provided value must be an element but got ${stringify(node)}`);\n  }\n}\nfunction assertIndexInRange(arr, index) {\n  assertDefined(arr, 'Array must be defined.');\n  const maxLen = arr.length;\n  if (index < 0 || index >= maxLen) {\n    throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n  }\n}\nfunction assertOneOf(value, ...validValues) {\n  if (validValues.indexOf(value) !== -1) return true;\n  throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\nfunction assertNotReactive(fn) {\n  if (getActiveConsumer$1() !== null) {\n    throwError(`${fn}() should never be called in a reactive context.`);\n  }\n}\n\n/**\n * Construct an injectable definition which defines how a token will be constructed by the DI\n * system, and in which injectors (if any) it will be available.\n *\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\n * `InjectableType`.\n *\n * Options:\n * * `providedIn` determines which injectors will include the injectable, by either associating it\n *   with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\n *   provided in the `'root'` injector, which will be the application-level injector in most apps.\n * * `factory` gives the zero argument function which will create an instance of the injectable.\n *   The factory can call [`inject`](api/core/inject) to access the `Injector` and request injection\n * of dependencies.\n *\n * @codeGenApi\n * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.\n */\nfunction ɵɵdefineInjectable(opts) {\n  return {\n    token: opts.token,\n    providedIn: opts.providedIn || null,\n    factory: opts.factory,\n    value: undefined\n  };\n}\n/**\n * @deprecated in v8, delete after v10. This API should be used only by generated code, and that\n * code should now use ɵɵdefineInjectable instead.\n * @publicApi\n */\nconst defineInjectable = ɵɵdefineInjectable;\n/**\n * Construct an `InjectorDef` which configures an injector.\n *\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\n * `InjectorType`.\n *\n * Options:\n *\n * * `providers`: an optional array of providers to add to the injector. Each provider must\n *   either have a factory or point to a type which has a `ɵprov` static property (the\n *   type must be an `InjectableType`).\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\n *   whose providers will also be added to the injector. Locally provided types will override\n *   providers from imports.\n *\n * @codeGenApi\n */\nfunction ɵɵdefineInjector(options) {\n  return {\n    providers: options.providers || [],\n    imports: options.imports || []\n  };\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading\n * inherited value.\n *\n * @param type A type which may have its own (non-inherited) `ɵprov`.\n */\nfunction getInjectableDef(type) {\n  return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);\n}\nfunction isInjectable(type) {\n  return getInjectableDef(type) !== null;\n}\n/**\n * Return definition only if it is defined directly on `type` and is not inherited from a base\n * class of `type`.\n */\nfunction getOwnDefinition(type, field) {\n  return type.hasOwnProperty(field) ? type[field] : null;\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.\n *\n * @param type A type which may have `ɵprov`, via inheritance.\n *\n * @deprecated Will be removed in a future version of Angular, where an error will occur in the\n *     scenario if we find the `ɵprov` on an ancestor only.\n */\nfunction getInheritedInjectableDef(type) {\n  const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);\n  if (def) {\n    ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token \"${type.name}\" that inherits its @Injectable decorator but does not provide one itself.\\n` + `This will become an error in a future version of Angular. Please add @Injectable() to the \"${type.name}\" class.`);\n    return def;\n  } else {\n    return null;\n  }\n}\n/**\n * Read the injector def type in a way which is immune to accidentally reading inherited value.\n *\n * @param type type which may have an injector def (`ɵinj`)\n */\nfunction getInjectorDef(type) {\n  return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ? type[NG_INJ_DEF] : null;\n}\nconst NG_PROV_DEF = getClosureSafeProperty({\n  ɵprov: getClosureSafeProperty\n});\nconst NG_INJ_DEF = getClosureSafeProperty({\n  ɵinj: getClosureSafeProperty\n});\n// We need to keep these around so we can read off old defs if new defs are unavailable\nconst NG_INJECTABLE_DEF = getClosureSafeProperty({\n  ngInjectableDef: getClosureSafeProperty\n});\nconst NG_INJECTOR_DEF = getClosureSafeProperty({\n  ngInjectorDef: getClosureSafeProperty\n});\n\n/**\n * Creates a token that can be used in a DI Provider.\n *\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\n * runtime representation) such as when injecting an interface, callable type, array or\n * parameterized type.\n *\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\n * the `Injector`. This provides an additional level of type safety.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * **Important Note**: Ensure that you use the same instance of the `InjectionToken` in both the\n * provider and the injection call. Creating a new instance of `InjectionToken` in different places,\n * even with the same description, will be treated as different tokens by Angular's DI system,\n * leading to a `NullInjectorError`.\n *\n * </div>\n *\n * {@example injection-token/src/main.ts region='InjectionToken'}\n *\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\n * dependencies, it can do so using the [`inject`](api/core/inject) function.\n * As you can see in the Tree-shakable InjectionToken example below.\n *\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:\n * this option is now deprecated). As mentioned above, `'root'` is the default value for\n * `providedIn`.\n *\n * The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.\n *\n * @usageNotes\n * ### Basic Examples\n *\n * ### Plain InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\n *\n * ### Tree-shakable InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n * @publicApi\n */\nclass InjectionToken {\n  _desc;\n  /** @internal */\n  ngMetadataName = 'InjectionToken';\n  ɵprov;\n  /**\n   * @param _desc   Description for the token,\n   *                used only for debugging purposes,\n   *                it should but does not need to be unique\n   * @param options Options for the token's usage, as described above\n   */\n  constructor(_desc, options) {\n    this._desc = _desc;\n    this.ɵprov = undefined;\n    if (typeof options == 'number') {\n      (typeof ngDevMode === 'undefined' || ngDevMode) && assertLessThan(options, 0, 'Only negative numbers are supported here');\n      // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.\n      // See `InjectorMarkers`\n      this.__NG_ELEMENT_ID__ = options;\n    } else if (options !== undefined) {\n      this.ɵprov = ɵɵdefineInjectable({\n        token: this,\n        providedIn: options.providedIn || 'root',\n        factory: options.factory\n      });\n    }\n  }\n  /**\n   * @internal\n   */\n  get multi() {\n    return this;\n  }\n  toString() {\n    return `InjectionToken ${this._desc}`;\n  }\n}\nlet _injectorProfilerContext;\nfunction getInjectorProfilerContext() {\n  !ngDevMode && throwError('getInjectorProfilerContext should never be called in production mode');\n  return _injectorProfilerContext;\n}\nfunction setInjectorProfilerContext(context) {\n  !ngDevMode && throwError('setInjectorProfilerContext should never be called in production mode');\n  const previous = _injectorProfilerContext;\n  _injectorProfilerContext = context;\n  return previous;\n}\nlet injectorProfilerCallback = null;\n/**\n * Sets the callback function which will be invoked during certain DI events within the\n * runtime (for example: injecting services, creating injectable instances, configuring providers)\n *\n * Warning: this function is *INTERNAL* and should not be relied upon in application's code.\n * The contract of the function might be changed in any release and/or the function can be removed\n * completely.\n *\n * @param profiler function provided by the caller or null value to disable profiling.\n */\nconst setInjectorProfiler = injectorProfiler => {\n  !ngDevMode && throwError('setInjectorProfiler should never be called in production mode');\n  injectorProfilerCallback = injectorProfiler;\n};\n/**\n * Injector profiler function which emits on DI events executed by the runtime.\n *\n * @param event InjectorProfilerEvent corresponding to the DI event being emitted\n */\nfunction injectorProfiler(event) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  if (injectorProfilerCallback != null /* both `null` and `undefined` */) {\n    injectorProfilerCallback(event);\n  }\n}\n/**\n * Emits an InjectorProfilerEventType.ProviderConfigured to the injector profiler. The data in the\n * emitted event includes the raw provider, as well as the token that provider is providing.\n *\n * @param eventProvider A provider object\n */\nfunction emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  let token;\n  // if the provider is a TypeProvider (typeof provider is function) then the token is the\n  // provider itself\n  if (typeof eventProvider === 'function') {\n    token = eventProvider;\n  }\n  // if the provider is an injection token, then the token is the injection token.\n  else if (eventProvider instanceof InjectionToken) {\n    token = eventProvider;\n  }\n  // in all other cases we can access the token via the `provide` property of the provider\n  else {\n    token = resolveForwardRef(eventProvider.provide);\n  }\n  let provider = eventProvider;\n  // Injection tokens may define their own default provider which gets attached to the token itself\n  // as `ɵprov`. In this case, we want to emit the provider that is attached to the token, not the\n  // token itself.\n  if (eventProvider instanceof InjectionToken) {\n    provider = eventProvider.ɵprov || eventProvider;\n  }\n  injectorProfiler({\n    type: 2 /* InjectorProfilerEventType.ProviderConfigured */,\n    context: getInjectorProfilerContext(),\n    providerRecord: {\n      token,\n      provider,\n      isViewProvider\n    }\n  });\n}\n/**\n * Emits an event to the injector profiler with the instance that was created. Note that\n * the injector associated with this emission can be accessed by using getDebugInjectContext()\n *\n * @param instance an object created by an injector\n */\nfunction emitInstanceCreatedByInjectorEvent(instance) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  injectorProfiler({\n    type: 1 /* InjectorProfilerEventType.InstanceCreatedByInjector */,\n    context: getInjectorProfilerContext(),\n    instance: {\n      value: instance\n    }\n  });\n}\n/**\n * @param token DI token associated with injected service\n * @param value the instance of the injected service (i.e the result of `inject(token)`)\n * @param flags the flags that the token was injected with\n */\nfunction emitInjectEvent(token, value, flags) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  injectorProfiler({\n    type: 0 /* InjectorProfilerEventType.Inject */,\n    context: getInjectorProfilerContext(),\n    service: {\n      token,\n      value,\n      flags\n    }\n  });\n}\nfunction runInInjectorProfilerContext(injector, token, callback) {\n  !ngDevMode && throwError('runInInjectorProfilerContext should never be called in production mode');\n  const prevInjectContext = setInjectorProfilerContext({\n    injector,\n    token\n  });\n  try {\n    callback();\n  } finally {\n    setInjectorProfilerContext(prevInjectContext);\n  }\n}\nfunction isEnvironmentProviders(value) {\n  return value && !!value.ɵproviders;\n}\nconst NG_COMP_DEF = getClosureSafeProperty({\n  ɵcmp: getClosureSafeProperty\n});\nconst NG_DIR_DEF = getClosureSafeProperty({\n  ɵdir: getClosureSafeProperty\n});\nconst NG_PIPE_DEF = getClosureSafeProperty({\n  ɵpipe: getClosureSafeProperty\n});\nconst NG_MOD_DEF = getClosureSafeProperty({\n  ɵmod: getClosureSafeProperty\n});\nconst NG_FACTORY_DEF = getClosureSafeProperty({\n  ɵfac: getClosureSafeProperty\n});\n/**\n * If a directive is diPublic, bloomAdd sets a property on the type with this constant as\n * the key and the directive's unique ID as the value. This allows us to map directives to their\n * bloom filter bit for DI.\n */\n// TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.\nconst NG_ELEMENT_ID = getClosureSafeProperty({\n  __NG_ELEMENT_ID__: getClosureSafeProperty\n});\n/**\n * The `NG_ENV_ID` field on a DI token indicates special processing in the `EnvironmentInjector`:\n * getting such tokens from the `EnvironmentInjector` will bypass the standard DI resolution\n * strategy and instead will return implementation produced by the `NG_ENV_ID` factory function.\n *\n * This particular retrieval of DI tokens is mostly done to eliminate circular dependencies and\n * improve tree-shaking.\n */\nconst NG_ENV_ID = getClosureSafeProperty({\n  __NG_ENV_ID__: getClosureSafeProperty\n});\n\n/**\n * Used for stringify render output in Ivy.\n * Important! This function is very performance-sensitive and we should\n * be extra careful not to introduce megamorphic reads in it.\n * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.\n */\nfunction renderStringify(value) {\n  if (typeof value === 'string') return value;\n  if (value == null) return '';\n  // Use `String` so that it invokes the `toString` method of the value. Note that this\n  // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).\n  return String(value);\n}\n/**\n * Used to stringify a value so that it can be displayed in an error message.\n *\n * Important! This function contains a megamorphic read and should only be\n * used for error messages.\n */\nfunction stringifyForError(value) {\n  if (typeof value === 'function') return value.name || value.toString();\n  if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n    return value.type.name || value.type.toString();\n  }\n  return renderStringify(value);\n}\n/**\n * Used to stringify a `Type` and including the file path and line number in which it is defined, if\n * possible, for better debugging experience.\n *\n * Important! This function contains a megamorphic read and should only be used for error messages.\n */\nfunction debugStringifyTypeForError(type) {\n  // TODO(pmvald): Do some refactoring so that we can use getComponentDef here without creating\n  // circular deps.\n  let componentDef = type[NG_COMP_DEF] || null;\n  if (componentDef !== null && componentDef.debugInfo) {\n    return stringifyTypeFromDebugInfo(componentDef.debugInfo);\n  }\n  return stringifyForError(type);\n}\n// TODO(pmvald): Do some refactoring so that we can use the type ClassDebugInfo for the param\n// debugInfo here without creating circular deps.\nfunction stringifyTypeFromDebugInfo(debugInfo) {\n  if (!debugInfo.filePath || !debugInfo.lineNumber) {\n    return debugInfo.className;\n  } else {\n    return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;\n  }\n}\n\n/** Called when directives inject each other (creating a circular dependency) */\nfunction throwCyclicDependencyError(token, path) {\n  const depPath = path ? `. Dependency path: ${path.join(' > ')} > ${token}` : '';\n  throw new RuntimeError(-200 /* RuntimeErrorCode.CYCLIC_DI_DEPENDENCY */, ngDevMode ? `Circular dependency in DI detected for ${token}${depPath}` : token);\n}\nfunction throwMixedMultiProviderError() {\n  throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n  if (ngModuleType && providers) {\n    const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n    throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`);\n  } else if (isEnvironmentProviders(provider)) {\n    if (provider.ɵfromNgModule) {\n      throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);\n    } else {\n      throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);\n    }\n  } else {\n    throw new Error('Invalid provider');\n  }\n}\n/** Throws an error when a token is not found in DI. */\nfunction throwProviderNotFoundError(token, injectorName) {\n  const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ''}`;\n  throw new RuntimeError(-201 /* RuntimeErrorCode.PROVIDER_NOT_FOUND */, errorMessage);\n}\n\n/**\n * Injection flags for DI.\n *\n * @publicApi\n * @deprecated use an options object for [`inject`](api/core/inject) instead.\n */\nvar InjectFlags;\n(function (InjectFlags) {\n  // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer\n  // writes exports of it into ngfactory files.\n  /** Check self and check parent injector if needed */\n  InjectFlags[InjectFlags[\"Default\"] = 0] = \"Default\";\n  /**\n   * Specifies that an injector should retrieve a dependency from any injector until reaching the\n   * host element of the current component. (Only used with Element Injector)\n   */\n  InjectFlags[InjectFlags[\"Host\"] = 1] = \"Host\";\n  /** Don't ascend to ancestors of the node requesting injection. */\n  InjectFlags[InjectFlags[\"Self\"] = 2] = \"Self\";\n  /** Skip the node that is requesting injection. */\n  InjectFlags[InjectFlags[\"SkipSelf\"] = 4] = \"SkipSelf\";\n  /** Inject `defaultValue` instead if token not found. */\n  InjectFlags[InjectFlags[\"Optional\"] = 8] = \"Optional\";\n})(InjectFlags || (InjectFlags = {}));\n\n/**\n * Current implementation of inject.\n *\n * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed\n * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this\n * way for two reasons:\n *  1. `Injector` should not depend on ivy logic.\n *  2. To maintain tree shake-ability we don't want to bring in unnecessary code.\n */\nlet _injectImplementation;\nfunction getInjectImplementation() {\n  return _injectImplementation;\n}\n/**\n * Sets the current inject implementation.\n */\nfunction setInjectImplementation(impl) {\n  const previous = _injectImplementation;\n  _injectImplementation = impl;\n  return previous;\n}\n/**\n * Injects `root` tokens in limp mode.\n *\n * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to\n * `\"root\"`. This is known as the limp mode injection. In such case the value is stored in the\n * injectable definition.\n */\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n  const injectableDef = getInjectableDef(token);\n  if (injectableDef && injectableDef.providedIn == 'root') {\n    return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() : injectableDef.value;\n  }\n  if (flags & InjectFlags.Optional) return null;\n  if (notFoundValue !== undefined) return notFoundValue;\n  throwProviderNotFoundError(token, 'Injector');\n}\n/**\n * Assert that `_injectImplementation` is not `fn`.\n *\n * This is useful, to prevent infinite recursion.\n *\n * @param fn Function which it should not equal to\n */\nfunction assertInjectImplementationNotEqual(fn) {\n  ngDevMode && assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');\n}\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\n/*\n * Name of a property (that we patch onto DI decorator), which is used as an annotation of which\n * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators\n * in the code, thus making them tree-shakable.\n */\nconst DI_DECORATOR_FLAG = '__NG_DI_FLAG__';\nconst NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';\nconst NG_TOKEN_PATH = 'ngTokenPath';\nconst NEW_LINE = /\\n/gm;\nconst NO_NEW_LINE = 'ɵ';\nconst SOURCE = '__source';\n/**\n * Current injector value used by `inject`.\n * - `undefined`: it is an error to call `inject`\n * - `null`: `inject` can be called but there is no injector (limp-mode).\n * - Injector instance: Use the injector for resolution.\n */\nlet _currentInjector = undefined;\nfunction getCurrentInjector() {\n  return _currentInjector;\n}\nfunction setCurrentInjector(injector) {\n  const former = _currentInjector;\n  _currentInjector = injector;\n  return former;\n}\nfunction injectInjectorOnly(token, flags = InjectFlags.Default) {\n  if (_currentInjector === undefined) {\n    throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode && `inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \\`runInInjectionContext\\`.`);\n  } else if (_currentInjector === null) {\n    return injectRootLimpMode(token, undefined, flags);\n  } else {\n    const value = _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);\n    ngDevMode && emitInjectEvent(token, value, flags);\n    return value;\n  }\n}\nfunction ɵɵinject(token, flags = InjectFlags.Default) {\n  return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactoryDep(index) {\n  throw new RuntimeError(202 /* RuntimeErrorCode.INVALID_FACTORY_DEPENDENCY */, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);\n}\n/**\n * Injects a token from the currently active injector.\n * `inject` is only supported in an [injection context](guide/di/dependency-injection-context). It\n * can be used during:\n * - Construction (via the `constructor`) of a class being instantiated by the DI system, such\n * as an `@Injectable` or `@Component`.\n * - In the initializer for fields of such classes.\n * - In the factory function specified for `useFactory` of a `Provider` or an `@Injectable`.\n * - In the `factory` function specified for an `InjectionToken`.\n * - In a stackframe of a function call in a DI context\n *\n * @param token A token that represents a dependency that should be injected.\n * @param flags Optional flags that control how injection is executed.\n * The flags correspond to injection strategies that can be specified with\n * parameter decorators `@Host`, `@Self`, `@SkipSelf`, and `@Optional`.\n * @returns the injected value if operation is successful, `null` otherwise.\n * @throws if called outside of a supported context.\n *\n * @usageNotes\n * In practice the `inject()` calls are allowed in a constructor, a constructor parameter and a\n * field initializer:\n *\n * ```ts\n * @Injectable({providedIn: 'root'})\n * export class Car {\n *   radio: Radio|undefined;\n *   // OK: field initializer\n *   spareTyre = inject(Tyre);\n *\n *   constructor() {\n *     // OK: constructor body\n *     this.radio = inject(Radio);\n *   }\n * }\n * ```\n *\n * It is also legal to call `inject` from a provider's factory:\n *\n * ```ts\n * providers: [\n *   {provide: Car, useFactory: () => {\n *     // OK: a class factory\n *     const engine = inject(Engine);\n *     return new Car(engine);\n *   }}\n * ]\n * ```\n *\n * Calls to the `inject()` function outside of the class creation context will result in error. Most\n * notably, calls to `inject()` are disallowed after a class instance was created, in methods\n * (including lifecycle hooks):\n *\n * ```ts\n * @Component({ ... })\n * export class CarComponent {\n *   ngOnInit() {\n *     // ERROR: too late, the component instance was already created\n *     const engine = inject(Engine);\n *     engine.start();\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nfunction inject(token, flags = InjectFlags.Default) {\n  // The `as any` here _shouldn't_ be necessary, but without it JSCompiler\n  // throws a disambiguation  error due to the multiple signatures.\n  return ɵɵinject(token, convertToBitFlags(flags));\n}\n// Converts object-based DI flags (`InjectOptions`) to bit flags (`InjectFlags`).\nfunction convertToBitFlags(flags) {\n  if (typeof flags === 'undefined' || typeof flags === 'number') {\n    return flags;\n  }\n  // While TypeScript doesn't accept it without a cast, bitwise OR with false-y values in\n  // JavaScript is a no-op. We can use that for a very codesize-efficient conversion from\n  // `InjectOptions` to `InjectFlags`.\n  return 0 /* InternalInjectFlags.Default */ | (\n  // comment to force a line break in the formatter\n  flags.optional && 8 /* InternalInjectFlags.Optional */) | (flags.host && 1 /* InternalInjectFlags.Host */) | (flags.self && 2 /* InternalInjectFlags.Self */) | (flags.skipSelf && 4 /* InternalInjectFlags.SkipSelf */);\n}\nfunction injectArgs(types) {\n  const args = [];\n  for (let i = 0; i < types.length; i++) {\n    const arg = resolveForwardRef(types[i]);\n    if (Array.isArray(arg)) {\n      if (arg.length === 0) {\n        throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && 'Arguments array must have arguments.');\n      }\n      let type = undefined;\n      let flags = InjectFlags.Default;\n      for (let j = 0; j < arg.length; j++) {\n        const meta = arg[j];\n        const flag = getInjectFlag(meta);\n        if (typeof flag === 'number') {\n          // Special case when we handle @Inject decorator.\n          if (flag === -1 /* DecoratorFlags.Inject */) {\n            type = meta.token;\n          } else {\n            flags |= flag;\n          }\n        } else {\n          type = meta;\n        }\n      }\n      args.push(ɵɵinject(type, flags));\n    } else {\n      args.push(ɵɵinject(arg));\n    }\n  }\n  return args;\n}\n/**\n * Attaches a given InjectFlag to a given decorator using monkey-patching.\n * Since DI decorators can be used in providers `deps` array (when provider is configured using\n * `useFactory`) without initialization (e.g. `Host`) and as an instance (e.g. `new Host()`), we\n * attach the flag to make it available both as a static property and as a field on decorator\n * instance.\n *\n * @param decorator Provided DI decorator.\n * @param flag InjectFlag that should be applied.\n */\nfunction attachInjectFlag(decorator, flag) {\n  decorator[DI_DECORATOR_FLAG] = flag;\n  decorator.prototype[DI_DECORATOR_FLAG] = flag;\n  return decorator;\n}\n/**\n * Reads monkey-patched property that contains InjectFlag attached to a decorator.\n *\n * @param token Token that may contain monkey-patched DI flags property.\n */\nfunction getInjectFlag(token) {\n  return token[DI_DECORATOR_FLAG];\n}\nfunction catchInjectorError(e, token, injectorErrorName, source) {\n  const tokenPath = e[NG_TEMP_TOKEN_PATH];\n  if (token[SOURCE]) {\n    tokenPath.unshift(token[SOURCE]);\n  }\n  e.message = formatError('\\n' + e.message, tokenPath, injectorErrorName, source);\n  e[NG_TOKEN_PATH] = tokenPath;\n  e[NG_TEMP_TOKEN_PATH] = null;\n  throw e;\n}\nfunction formatError(text, obj, injectorErrorName, source = null) {\n  text = text && text.charAt(0) === '\\n' && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;\n  let context = stringify(obj);\n  if (Array.isArray(obj)) {\n    context = obj.map(stringify).join(' -> ');\n  } else if (typeof obj === 'object') {\n    let parts = [];\n    for (let key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        let value = obj[key];\n        parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));\n      }\n    }\n    context = `{${parts.join(', ')}}`;\n  }\n  return `${injectorErrorName}${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\\n  ')}`;\n}\n\n/**\n * Inject decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Inject = attachInjectFlag(\n// Disable tslint because `DecoratorFlags` is a const enum which gets inlined.\nmakeParamDecorator('Inject', token => ({\n  token\n})), -1 /* DecoratorFlags.Inject */);\n/**\n * Optional decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Optional =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Optional'), 8 /* InternalInjectFlags.Optional */);\n/**\n * Self decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Self =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Self'), 2 /* InternalInjectFlags.Self */);\n/**\n * `SkipSelf` decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst SkipSelf =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('SkipSelf'), 4 /* InternalInjectFlags.SkipSelf */);\n/**\n * Host decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Host =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Host'), 1 /* InternalInjectFlags.Host */);\nfunction getFactoryDef(type, throwNotFound) {\n  const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n  if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n    throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);\n  }\n  return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\n\n/**\n * Determines if the contents of two arrays is identical\n *\n * @param a first array\n * @param b second array\n * @param identityAccessor Optional function for extracting stable object identity from a value in\n *     the array.\n */\nfunction arrayEquals(a, b, identityAccessor) {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) {\n    let valueA = a[i];\n    let valueB = b[i];\n    if (identityAccessor) {\n      valueA = identityAccessor(valueA);\n      valueB = identityAccessor(valueB);\n    }\n    if (valueB !== valueA) {\n      return false;\n    }\n  }\n  return true;\n}\n/**\n * Flattens an array.\n */\nfunction flatten(list) {\n  return list.flat(Number.POSITIVE_INFINITY);\n}\nfunction deepForEach(input, fn) {\n  input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n  // perf: array.push is faster than array.splice!\n  if (index >= arr.length) {\n    arr.push(value);\n  } else {\n    arr.splice(index, 0, value);\n  }\n}\nfunction removeFromArray(arr, index) {\n  // perf: array.pop is faster than array.splice!\n  if (index >= arr.length - 1) {\n    return arr.pop();\n  } else {\n    return arr.splice(index, 1)[0];\n  }\n}\nfunction newArray(size, value) {\n  const list = [];\n  for (let i = 0; i < size; i++) {\n    list.push(value);\n  }\n  return list;\n}\n/**\n * Remove item from array (Same as `Array.splice()` but faster.)\n *\n * `Array.splice()` is not as fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * https://jsperf.com/fast-array-splice (About 20x faster)\n *\n * @param array Array to splice\n * @param index Index of element in array to remove.\n * @param count Number of items to remove.\n */\nfunction arraySplice(array, index, count) {\n  const length = array.length - count;\n  while (index < length) {\n    array[index] = array[index + count];\n    index++;\n  }\n  while (count--) {\n    array.pop(); // shrink the array\n  }\n}\n/**\n * Same as `Array.splice(index, 0, value)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value Value to add to array.\n */\nfunction arrayInsert(array, index, value) {\n  ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n  let end = array.length;\n  while (end > index) {\n    const previousEnd = end - 1;\n    array[end] = array[previousEnd];\n    end = previousEnd;\n  }\n  array[index] = value;\n}\n/**\n * Same as `Array.splice2(index, 0, value1, value2)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value1 Value to add to array.\n * @param value2 Value to add to array.\n */\nfunction arrayInsert2(array, index, value1, value2) {\n  ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n  let end = array.length;\n  if (end == index) {\n    // inserting at the end.\n    array.push(value1, value2);\n  } else if (end === 1) {\n    // corner case when we have less items in array than we have items to insert.\n    array.push(value2, array[0]);\n    array[0] = value1;\n  } else {\n    end--;\n    array.push(array[end - 1], array[end]);\n    while (end > index) {\n      const previousEnd = end - 2;\n      array[end] = array[previousEnd];\n      end--;\n    }\n    array[index] = value1;\n    array[index + 1] = value2;\n  }\n}\n/**\n * Get an index of an `value` in a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @returns index of the value.\n *   - positive index if value found.\n *   - negative index if value not found. (`~index` to get the value where it should have been\n *     located)\n */\nfunction arrayIndexOfSorted(array, value) {\n  return _arrayIndexOfSorted(array, value, 0);\n}\n/**\n * Set a `value` for a `key`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or create.\n * @param value The value to set for a `key`.\n * @returns index (always even) of where the value vas set.\n */\nfunction keyValueArraySet(keyValueArray, key, value) {\n  let index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it set it.\n    keyValueArray[index | 1] = value;\n  } else {\n    index = ~index;\n    arrayInsert2(keyValueArray, index, key, value);\n  }\n  return index;\n}\n/**\n * Retrieve a `value` for a `key` (on `undefined` if not found.)\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @return The `value` stored at the `key` location or `undefined if not found.\n */\nfunction keyValueArrayGet(keyValueArray, key) {\n  const index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it retrieve it.\n    return keyValueArray[index | 1];\n  }\n  return undefined;\n}\n/**\n * Retrieve a `key` index value in the array or `-1` if not found.\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @returns index of where the key is (or should have been.)\n *   - positive (even) index if key found.\n *   - negative index if key not found. (`~index` (even) to get the index where it should have\n *     been inserted.)\n */\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n  return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\n/**\n * Delete a `key` (and `value`) from the `KeyValueArray`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or delete (if exist).\n * @returns index of where the key was (or should have been.)\n *   - positive (even) index if key found and deleted.\n *   - negative index if key not found. (`~index` (even) to get the index where it should have\n *     been.)\n */\nfunction keyValueArrayDelete(keyValueArray, key) {\n  const index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it remove it.\n    arraySplice(keyValueArray, index, 2);\n  }\n  return index;\n}\n/**\n * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @param shift grouping shift.\n *   - `0` means look at every location\n *   - `1` means only look at every other (even) location (the odd locations are to be ignored as\n *         they are values.)\n * @returns index of the value.\n *   - positive index if value found.\n *   - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction _arrayIndexOfSorted(array, value, shift) {\n  ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n  let start = 0;\n  let end = array.length >> shift;\n  while (end !== start) {\n    const middle = start + (end - start >> 1); // find the middle.\n    const current = array[middle << shift];\n    if (value === current) {\n      return middle << shift;\n    } else if (current > value) {\n      end = middle;\n    } else {\n      start = middle + 1; // We already searched middle so make it non-inclusive by adding 1\n    }\n  }\n  return ~(end << shift);\n}\n\n/**\n * This file contains reuseable \"empty\" symbols that can be used as default return values\n * in different parts of the rendering code. Because the same symbols are returned, this\n * allows for identity checks against these values to be consistently used by the framework\n * code.\n */\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\n// freezing the values prevents any code from accidentally inserting new values in\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {\n  // These property accesses can be ignored because ngDevMode will be set to false\n  // when optimizing code and the whole if statement will be dropped.\n  // tslint:disable-next-line:no-toplevel-property-access\n  Object.freeze(EMPTY_OBJ);\n  // tslint:disable-next-line:no-toplevel-property-access\n  Object.freeze(EMPTY_ARRAY);\n}\n\n/**\n * A multi-provider token for initialization functions that will run upon construction of an\n * environment injector.\n *\n * @deprecated from v19.0.0, use provideEnvironmentInitializer instead\n *\n * @see {@link provideEnvironmentInitializer}\n *\n * Note: As opposed to the `APP_INITIALIZER` token, the `ENVIRONMENT_INITIALIZER` functions are not awaited,\n * hence they should not be `async`.\n *\n * @publicApi\n */\nconst ENVIRONMENT_INITIALIZER = new InjectionToken(ngDevMode ? 'ENVIRONMENT_INITIALIZER' : '');\n\n/**\n * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.\n *\n * Requesting this token instead of `Injector` allows `StaticInjector` to be tree-shaken from a\n * project.\n *\n * @publicApi\n */\nconst INJECTOR$1 = new InjectionToken(ngDevMode ? 'INJECTOR' : '',\n// Disable tslint because this is const enum which gets inlined not top level prop access.\n// tslint:disable-next-line: no-toplevel-property-access\n-1 /* InjectorMarkers.Injector */);\nconst INJECTOR_DEF_TYPES = new InjectionToken(ngDevMode ? 'INJECTOR_DEF_TYPES' : '');\nclass NullInjector {\n  get(token, notFoundValue = THROW_IF_NOT_FOUND) {\n    if (notFoundValue === THROW_IF_NOT_FOUND) {\n      const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);\n      error.name = 'NullInjectorError';\n      throw error;\n    }\n    return notFoundValue;\n  }\n}\nfunction getNgModuleDef(type, throwNotFound) {\n  const ngModuleDef = type[NG_MOD_DEF] || null;\n  if (!ngModuleDef && throwNotFound === true) {\n    throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);\n  }\n  return ngModuleDef;\n}\n/**\n * The following getter methods retrieve the definition from the type. Currently the retrieval\n * honors inheritance, but in the future we may change the rule to require that definitions are\n * explicit. This would require some sort of migration strategy.\n */\nfunction getComponentDef(type) {\n  return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDef(type) {\n  return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef$1(type) {\n  return type[NG_PIPE_DEF] || null;\n}\n/**\n * Checks whether a given Component, Directive or Pipe is marked as standalone.\n * This will return false if passed anything other than a Component, Directive, or Pipe class\n * See [this guide](guide/components/importing) for additional information:\n *\n * @param type A reference to a Component, Directive or Pipe.\n * @publicApi\n */\nfunction isStandalone(type) {\n  const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n  // TODO: standalone as default value (invert the condition)\n  return def !== null ? def.standalone : false;\n}\n\n/**\n * Wrap an array of `Provider`s into `EnvironmentProviders`, preventing them from being accidentally\n * referenced in `@Component` in a component injector.\n */\nfunction makeEnvironmentProviders(providers) {\n  return {\n    ɵproviders: providers\n  };\n}\n/**\n * @description\n * This function is used to provide initialization functions that will be executed upon construction\n * of an environment injector.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `ENVIRONMENT_INITIALIZER` token which is now deprecated.\n *\n * @see {@link ENVIRONMENT_INITIALIZER}\n *\n * @usageNotes\n * The following example illustrates how to configure an initialization function using\n * `provideEnvironmentInitializer()`\n * ```ts\n * createEnvironmentInjector(\n *   [\n *     provideEnvironmentInitializer(() => {\n *       console.log('environment initialized');\n *     }),\n *   ],\n *   parentInjector\n * );\n * ```\n *\n * @publicApi\n */\nfunction provideEnvironmentInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useValue: initializerFn\n  }]);\n}\n/**\n * Collects providers from all NgModules and standalone components, including transitively imported\n * ones.\n *\n * Providers extracted via `importProvidersFrom` are only usable in an application injector or\n * another environment injector (such as a route injector). They should not be used in component\n * providers.\n *\n * More information about standalone components can be found in [this\n * guide](guide/components/importing).\n *\n * @usageNotes\n * The results of the `importProvidersFrom` call can be used in the `bootstrapApplication` call:\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     importProvidersFrom(NgModuleOne, NgModuleTwo)\n *   ]\n * });\n * ```\n *\n * You can also use the `importProvidersFrom` results in the `providers` field of a route, when a\n * standalone component is used:\n *\n * ```ts\n * export const ROUTES: Route[] = [\n *   {\n *     path: 'foo',\n *     providers: [\n *       importProvidersFrom(NgModuleOne, NgModuleTwo)\n *     ],\n *     component: YourStandaloneComponent\n *   }\n * ];\n * ```\n *\n * @returns Collected providers from the specified list of types.\n * @publicApi\n */\nfunction importProvidersFrom(...sources) {\n  return {\n    ɵproviders: internalImportProvidersFrom(true, sources),\n    ɵfromNgModule: true\n  };\n}\nfunction internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {\n  const providersOut = [];\n  const dedup = new Set(); // already seen types\n  let injectorTypesWithProviders;\n  const collectProviders = provider => {\n    providersOut.push(provider);\n  };\n  deepForEach(sources, source => {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && checkForStandaloneCmp) {\n      const cmpDef = getComponentDef(source);\n      if (cmpDef?.standalone) {\n        throw new RuntimeError(800 /* RuntimeErrorCode.IMPORT_PROVIDERS_FROM_STANDALONE */, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component \"${stringifyForError(source)}\"`);\n      }\n    }\n    // Narrow `source` to access the internal type analogue for `ModuleWithProviders`.\n    const internalSource = source;\n    if (walkProviderTree(internalSource, collectProviders, [], dedup)) {\n      injectorTypesWithProviders ||= [];\n      injectorTypesWithProviders.push(internalSource);\n    }\n  });\n  // Collect all providers from `ModuleWithProviders` types.\n  if (injectorTypesWithProviders !== undefined) {\n    processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);\n  }\n  return providersOut;\n}\n/**\n * Collects all providers from the list of `ModuleWithProviders` and appends them to the provided\n * array.\n */\nfunction processInjectorTypesWithProviders(typesWithProviders, visitor) {\n  for (let i = 0; i < typesWithProviders.length; i++) {\n    const {\n      ngModule,\n      providers\n    } = typesWithProviders[i];\n    deepForEachProvider(providers, provider => {\n      ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);\n      visitor(provider, ngModule);\n    });\n  }\n}\n/**\n * The logic visits an `InjectorType`, an `InjectorTypeWithProviders`, or a standalone\n * `ComponentType`, and all of its transitive providers and collects providers.\n *\n * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,\n * the function will return \"true\" to indicate that the providers of the type definition need\n * to be processed. This allows us to process providers of injector types after all imports of\n * an injector definition are processed. (following View Engine semantics: see FW-1349)\n */\nfunction walkProviderTree(container, visitor, parents, dedup) {\n  container = resolveForwardRef(container);\n  if (!container) return false;\n  // The actual type which had the definition. Usually `container`, but may be an unwrapped type\n  // from `InjectorTypeWithProviders`.\n  let defType = null;\n  let injDef = getInjectorDef(container);\n  const cmpDef = !injDef && getComponentDef(container);\n  if (!injDef && !cmpDef) {\n    // `container` is not an injector type or a component type. It might be:\n    //  * An `InjectorTypeWithProviders` that wraps an injector type.\n    //  * A standalone directive or pipe that got pulled in from a standalone component's\n    //    dependencies.\n    // Try to unwrap it as an `InjectorTypeWithProviders` first.\n    const ngModule = container.ngModule;\n    injDef = getInjectorDef(ngModule);\n    if (injDef) {\n      defType = ngModule;\n    } else {\n      // Not a component or injector type, so ignore it.\n      return false;\n    }\n  } else if (cmpDef && !cmpDef.standalone) {\n    return false;\n  } else {\n    defType = container;\n  }\n  // Check for circular dependencies.\n  if (ngDevMode && parents.indexOf(defType) !== -1) {\n    const defName = stringify(defType);\n    const path = parents.map(stringify);\n    throwCyclicDependencyError(defName, path);\n  }\n  // Check for multiple imports of the same module\n  const isDuplicate = dedup.has(defType);\n  if (cmpDef) {\n    if (isDuplicate) {\n      // This component definition has already been processed.\n      return false;\n    }\n    dedup.add(defType);\n    if (cmpDef.dependencies) {\n      const deps = typeof cmpDef.dependencies === 'function' ? cmpDef.dependencies() : cmpDef.dependencies;\n      for (const dep of deps) {\n        walkProviderTree(dep, visitor, parents, dedup);\n      }\n    }\n  } else if (injDef) {\n    // First, include providers from any imports.\n    if (injDef.imports != null && !isDuplicate) {\n      // Before processing defType's imports, add it to the set of parents. This way, if it ends\n      // up deeply importing itself, this can be detected.\n      ngDevMode && parents.push(defType);\n      // Add it to the set of dedups. This way we can detect multiple imports of the same module\n      dedup.add(defType);\n      let importTypesWithProviders;\n      try {\n        deepForEach(injDef.imports, imported => {\n          if (walkProviderTree(imported, visitor, parents, dedup)) {\n            importTypesWithProviders ||= [];\n            // If the processed import is an injector type with providers, we store it in the\n            // list of import types with providers, so that we can process those afterwards.\n            importTypesWithProviders.push(imported);\n          }\n        });\n      } finally {\n        // Remove it from the parents set when finished.\n        ngDevMode && parents.pop();\n      }\n      // Imports which are declared with providers (TypeWithProviders) need to be processed\n      // after all imported modules are processed. This is similar to how View Engine\n      // processes/merges module imports in the metadata resolver. See: FW-1349.\n      if (importTypesWithProviders !== undefined) {\n        processInjectorTypesWithProviders(importTypesWithProviders, visitor);\n      }\n    }\n    if (!isDuplicate) {\n      // Track the InjectorType and add a provider for it.\n      // It's important that this is done after the def's imports.\n      const factory = getFactoryDef(defType) || (() => new defType());\n      // Append extra providers to make more info available for consumers (to retrieve an injector\n      // type), as well as internally (to calculate an injection scope correctly and eagerly\n      // instantiate a `defType` when an injector is created).\n      // Provider to create `defType` using its factory.\n      visitor({\n        provide: defType,\n        useFactory: factory,\n        deps: EMPTY_ARRAY\n      }, defType);\n      // Make this `defType` available to an internal logic that calculates injector scope.\n      visitor({\n        provide: INJECTOR_DEF_TYPES,\n        useValue: defType,\n        multi: true\n      }, defType);\n      // Provider to eagerly instantiate `defType` via `INJECTOR_INITIALIZER`.\n      visitor({\n        provide: ENVIRONMENT_INITIALIZER,\n        useValue: () => ɵɵinject(defType),\n        multi: true\n      }, defType);\n    }\n    // Next, include providers listed on the definition itself.\n    const defProviders = injDef.providers;\n    if (defProviders != null && !isDuplicate) {\n      const injectorType = container;\n      deepForEachProvider(defProviders, provider => {\n        ngDevMode && validateProvider(provider, defProviders, injectorType);\n        visitor(provider, injectorType);\n      });\n    }\n  } else {\n    // Should not happen, but just in case.\n    return false;\n  }\n  return defType !== container && container.providers !== undefined;\n}\nfunction validateProvider(provider, providers, containerType) {\n  if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {\n    return;\n  }\n  // Here we expect the provider to be a `useClass` provider (by elimination).\n  const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n  if (!classRef) {\n    throwInvalidProviderError(containerType, providers, provider);\n  }\n}\nfunction deepForEachProvider(providers, fn) {\n  for (let provider of providers) {\n    if (isEnvironmentProviders(provider)) {\n      provider = provider.ɵproviders;\n    }\n    if (Array.isArray(provider)) {\n      deepForEachProvider(provider, fn);\n    } else {\n      fn(provider);\n    }\n  }\n}\nconst USE_VALUE$1 = getClosureSafeProperty({\n  provide: String,\n  useValue: getClosureSafeProperty\n});\nfunction isValueProvider(value) {\n  return value !== null && typeof value == 'object' && USE_VALUE$1 in value;\n}\nfunction isExistingProvider(value) {\n  return !!(value && value.useExisting);\n}\nfunction isFactoryProvider(value) {\n  return !!(value && value.useFactory);\n}\nfunction isTypeProvider(value) {\n  return typeof value === 'function';\n}\nfunction isClassProvider(value) {\n  return !!value.useClass;\n}\n\n/**\n * An internal token whose presence in an injector indicates that the injector should treat itself\n * as a root scoped injector when processing requests for unknown tokens which may indicate\n * they are provided in the root scope.\n */\nconst INJECTOR_SCOPE = new InjectionToken(ngDevMode ? 'Set Injector scope.' : '');\n\n/**\n * Marker which indicates that a value has not yet been created from the factory function.\n */\nconst NOT_YET = {};\n/**\n * Marker which indicates that the factory function for a token is in the process of being called.\n *\n * If the injector is asked to inject a token with its value set to CIRCULAR, that indicates\n * injection of a dependency has recursively attempted to inject the original token, and there is\n * a circular dependency among the providers.\n */\nconst CIRCULAR = {};\n/**\n * A lazily initialized NullInjector.\n */\nlet NULL_INJECTOR = undefined;\nfunction getNullInjector() {\n  if (NULL_INJECTOR === undefined) {\n    NULL_INJECTOR = new NullInjector();\n  }\n  return NULL_INJECTOR;\n}\n/**\n * An `Injector` that's part of the environment injector hierarchy, which exists outside of the\n * component tree.\n */\nclass EnvironmentInjector {}\nclass R3Injector extends EnvironmentInjector {\n  parent;\n  source;\n  scopes;\n  /**\n   * Map of tokens to records which contain the instances of those tokens.\n   * - `null` value implies that we don't have the record. Used by tree-shakable injectors\n   * to prevent further searches.\n   */\n  records = new Map();\n  /**\n   * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.\n   */\n  _ngOnDestroyHooks = new Set();\n  _onDestroyHooks = [];\n  /**\n   * Flag indicating that this injector was previously destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  _destroyed = false;\n  injectorDefTypes;\n  constructor(providers, parent, source, scopes) {\n    super();\n    this.parent = parent;\n    this.source = source;\n    this.scopes = scopes;\n    // Start off by creating Records for every provider.\n    forEachSingleProvider(providers, provider => this.processProvider(provider));\n    // Make sure the INJECTOR token provides this injector.\n    this.records.set(INJECTOR$1, makeRecord(undefined, this));\n    // And `EnvironmentInjector` if the current injector is supposed to be env-scoped.\n    if (scopes.has('environment')) {\n      this.records.set(EnvironmentInjector, makeRecord(undefined, this));\n    }\n    // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide\n    // any injectable scoped to APP_ROOT_SCOPE.\n    const record = this.records.get(INJECTOR_SCOPE);\n    if (record != null && typeof record.value === 'string') {\n      this.scopes.add(record.value);\n    }\n    this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));\n  }\n  /**\n   * Destroy the injector and release references to every instance or provider associated with it.\n   *\n   * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a\n   * hook was found.\n   */\n  destroy() {\n    assertNotDestroyed(this);\n    // Set destroyed = true first, in case lifecycle hooks re-enter destroy().\n    this._destroyed = true;\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // Call all the lifecycle hooks.\n      for (const service of this._ngOnDestroyHooks) {\n        service.ngOnDestroy();\n      }\n      const onDestroyHooks = this._onDestroyHooks;\n      // Reset the _onDestroyHooks array before iterating over it to prevent hooks that unregister\n      // themselves from mutating the array during iteration.\n      this._onDestroyHooks = [];\n      for (const hook of onDestroyHooks) {\n        hook();\n      }\n    } finally {\n      // Release all references.\n      this.records.clear();\n      this._ngOnDestroyHooks.clear();\n      this.injectorDefTypes.clear();\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  onDestroy(callback) {\n    assertNotDestroyed(this);\n    this._onDestroyHooks.push(callback);\n    return () => this.removeOnDestroy(callback);\n  }\n  runInContext(fn) {\n    assertNotDestroyed(this);\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: null\n      });\n    }\n    try {\n      return fn();\n    } finally {\n      setCurrentInjector(previousInjector);\n      setInjectImplementation(previousInjectImplementation);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n    }\n  }\n  get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {\n    assertNotDestroyed(this);\n    if (token.hasOwnProperty(NG_ENV_ID)) {\n      return token[NG_ENV_ID](this);\n    }\n    flags = convertToBitFlags(flags);\n    // Set the injection context.\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: token\n      });\n    }\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    try {\n      // Check for the SkipSelf flag.\n      if (!(flags & InjectFlags.SkipSelf)) {\n        // SkipSelf isn't set, check if the record belongs to this injector.\n        let record = this.records.get(token);\n        if (record === undefined) {\n          // No record, but maybe the token is scoped to this injector. Look for an injectable\n          // def with a scope matching this injector.\n          const def = couldBeInjectableType(token) && getInjectableDef(token);\n          if (def && this.injectableDefInScope(def)) {\n            // Found an injectable def and it's scoped to this injector. Pretend as if it was here\n            // all along.\n            if (ngDevMode) {\n              runInInjectorProfilerContext(this, token, () => {\n                emitProviderConfiguredEvent(token);\n              });\n            }\n            record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);\n          } else {\n            record = null;\n          }\n          this.records.set(token, record);\n        }\n        // If a record was found, get the instance for it and return it.\n        if (record != null /* NOT null || undefined */) {\n          return this.hydrate(token, record);\n        }\n      }\n      // Select the next injector based on the Self flag - if self is set, the next injector is\n      // the NullInjector, otherwise it's the parent.\n      const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();\n      // Set the notFoundValue based on the Optional flag - if optional is set and notFoundValue\n      // is undefined, the value is null, otherwise it's the notFoundValue.\n      notFoundValue = flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;\n      return nextInjector.get(token, notFoundValue);\n    } catch (e) {\n      if (e.name === 'NullInjectorError') {\n        const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];\n        path.unshift(stringify(token));\n        if (previousInjector) {\n          // We still have a parent injector, keep throwing\n          throw e;\n        } else {\n          // Format & throw the final error message when we don't have any previous injector\n          return catchInjectorError(e, token, 'R3InjectorError', this.source);\n        }\n      } else {\n        throw e;\n      }\n    } finally {\n      // Lastly, restore the previous injection context.\n      setInjectImplementation(previousInjectImplementation);\n      setCurrentInjector(previousInjector);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n    }\n  }\n  /** @internal */\n  resolveInjectorInitializers() {\n    const prevConsumer = setActiveConsumer$1(null);\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: null\n      });\n    }\n    try {\n      const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, InjectFlags.Self);\n      if (ngDevMode && !Array.isArray(initializers)) {\n        throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `ENVIRONMENT_INITIALIZER` token value ' + `(expected an array, but got ${typeof initializers}). ` + 'Please check that the `ENVIRONMENT_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n      }\n      for (const initializer of initializers) {\n        initializer();\n      }\n    } finally {\n      setCurrentInjector(previousInjector);\n      setInjectImplementation(previousInjectImplementation);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  toString() {\n    const tokens = [];\n    const records = this.records;\n    for (const token of records.keys()) {\n      tokens.push(stringify(token));\n    }\n    return `R3Injector[${tokens.join(', ')}]`;\n  }\n  /**\n   * Process a `SingleProvider` and add it.\n   */\n  processProvider(provider) {\n    // Determine the token from the provider. Either it's its own token, or has a {provide: ...}\n    // property.\n    provider = resolveForwardRef(provider);\n    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);\n    // Construct a `Record` for the provider.\n    const record = providerToRecord(provider);\n    if (ngDevMode) {\n      runInInjectorProfilerContext(this, token, () => {\n        // Emit InjectorProfilerEventType.Create if provider is a value provider because\n        // these are the only providers that do not go through the value hydration logic\n        // where this event would normally be emitted from.\n        if (isValueProvider(provider)) {\n          emitInstanceCreatedByInjectorEvent(provider.useValue);\n        }\n        emitProviderConfiguredEvent(provider);\n      });\n    }\n    if (!isTypeProvider(provider) && provider.multi === true) {\n      // If the provider indicates that it's a multi-provider, process it specially.\n      // First check whether it's been defined already.\n      let multiRecord = this.records.get(token);\n      if (multiRecord) {\n        // It has. Throw a nice error if\n        if (ngDevMode && multiRecord.multi === undefined) {\n          throwMixedMultiProviderError();\n        }\n      } else {\n        multiRecord = makeRecord(undefined, NOT_YET, true);\n        multiRecord.factory = () => injectArgs(multiRecord.multi);\n        this.records.set(token, multiRecord);\n      }\n      token = provider;\n      multiRecord.multi.push(provider);\n    } else {\n      if (ngDevMode) {\n        const existing = this.records.get(token);\n        if (existing && existing.multi !== undefined) {\n          throwMixedMultiProviderError();\n        }\n      }\n    }\n    this.records.set(token, record);\n  }\n  hydrate(token, record) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      if (ngDevMode && record.value === CIRCULAR) {\n        throwCyclicDependencyError(stringify(token));\n      } else if (record.value === NOT_YET) {\n        record.value = CIRCULAR;\n        if (ngDevMode) {\n          runInInjectorProfilerContext(this, token, () => {\n            record.value = record.factory();\n            emitInstanceCreatedByInjectorEvent(record.value);\n          });\n        } else {\n          record.value = record.factory();\n        }\n      }\n      if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {\n        this._ngOnDestroyHooks.add(record.value);\n      }\n      return record.value;\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  injectableDefInScope(def) {\n    if (!def.providedIn) {\n      return false;\n    }\n    const providedIn = resolveForwardRef(def.providedIn);\n    if (typeof providedIn === 'string') {\n      return providedIn === 'any' || this.scopes.has(providedIn);\n    } else {\n      return this.injectorDefTypes.has(providedIn);\n    }\n  }\n  removeOnDestroy(callback) {\n    const destroyCBIdx = this._onDestroyHooks.indexOf(callback);\n    if (destroyCBIdx !== -1) {\n      this._onDestroyHooks.splice(destroyCBIdx, 1);\n    }\n  }\n}\nfunction injectableDefOrInjectorDefFactory(token) {\n  // Most tokens will have an injectable def directly on them, which specifies a factory directly.\n  const injectableDef = getInjectableDef(token);\n  const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);\n  if (factory !== null) {\n    return factory;\n  }\n  // InjectionTokens should have an injectable def (ɵprov) and thus should be handled above.\n  // If it's missing that, it's an error.\n  if (token instanceof InjectionToken) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Token ${stringify(token)} is missing a ɵprov definition.`);\n  }\n  // Undecorated types can sometimes be created if they have no constructor arguments.\n  if (token instanceof Function) {\n    return getUndecoratedInjectableFactory(token);\n  }\n  // There was no way to resolve a factory for this token.\n  throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && 'unreachable');\n}\nfunction getUndecoratedInjectableFactory(token) {\n  // If the token has parameters then it has dependencies that we cannot resolve implicitly.\n  const paramLength = token.length;\n  if (paramLength > 0) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);\n  }\n  // The constructor function appears to have no parameters.\n  // This might be because it inherits from a super-class. In which case, use an injectable\n  // def from an ancestor if there is one.\n  // Otherwise this really is a simple class with no dependencies, so return a factory that\n  // just instantiates the zero-arg constructor.\n  const inheritedInjectableDef = getInheritedInjectableDef(token);\n  if (inheritedInjectableDef !== null) {\n    return () => inheritedInjectableDef.factory(token);\n  } else {\n    return () => new token();\n  }\n}\nfunction providerToRecord(provider) {\n  if (isValueProvider(provider)) {\n    return makeRecord(undefined, provider.useValue);\n  } else {\n    const factory = providerToFactory(provider);\n    return makeRecord(factory, NOT_YET);\n  }\n}\n/**\n * Converts a `SingleProvider` into a factory function.\n *\n * @param provider provider to convert to factory\n */\nfunction providerToFactory(provider, ngModuleType, providers) {\n  let factory = undefined;\n  if (ngDevMode && isEnvironmentProviders(provider)) {\n    throwInvalidProviderError(undefined, providers, provider);\n  }\n  if (isTypeProvider(provider)) {\n    const unwrappedProvider = resolveForwardRef(provider);\n    return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);\n  } else {\n    if (isValueProvider(provider)) {\n      factory = () => resolveForwardRef(provider.useValue);\n    } else if (isFactoryProvider(provider)) {\n      factory = () => provider.useFactory(...injectArgs(provider.deps || []));\n    } else if (isExistingProvider(provider)) {\n      factory = () => ɵɵinject(resolveForwardRef(provider.useExisting));\n    } else {\n      const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n      if (ngDevMode && !classRef) {\n        throwInvalidProviderError(ngModuleType, providers, provider);\n      }\n      if (hasDeps(provider)) {\n        factory = () => new classRef(...injectArgs(provider.deps));\n      } else {\n        return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);\n      }\n    }\n  }\n  return factory;\n}\nfunction assertNotDestroyed(injector) {\n  if (injector.destroyed) {\n    throw new RuntimeError(205 /* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED */, ngDevMode && 'Injector has already been destroyed.');\n  }\n}\nfunction makeRecord(factory, value, multi = false) {\n  return {\n    factory: factory,\n    value: value,\n    multi: multi ? [] : undefined\n  };\n}\nfunction hasDeps(value) {\n  return !!value.deps;\n}\nfunction hasOnDestroy(value) {\n  return value !== null && typeof value === 'object' && typeof value.ngOnDestroy === 'function';\n}\nfunction couldBeInjectableType(value) {\n  return typeof value === 'function' || typeof value === 'object' && value instanceof InjectionToken;\n}\nfunction forEachSingleProvider(providers, fn) {\n  for (const provider of providers) {\n    if (Array.isArray(provider)) {\n      forEachSingleProvider(provider, fn);\n    } else if (provider && isEnvironmentProviders(provider)) {\n      forEachSingleProvider(provider.ɵproviders, fn);\n    } else {\n      fn(provider);\n    }\n  }\n}\n\n/**\n * Runs the given function in the [context](guide/di/dependency-injection-context) of the given\n * `Injector`.\n *\n * Within the function's stack frame, [`inject`](api/core/inject) can be used to inject dependencies\n * from the given `Injector`. Note that `inject` is only usable synchronously, and cannot be used in\n * any asynchronous callbacks or after any `await` points.\n *\n * @param injector the injector which will satisfy calls to [`inject`](api/core/inject) while `fn`\n *     is executing\n * @param fn the closure to be run in the context of `injector`\n * @returns the return value of the function, if any\n * @publicApi\n */\nfunction runInInjectionContext(injector, fn) {\n  if (injector instanceof R3Injector) {\n    assertNotDestroyed(injector);\n  }\n  let prevInjectorProfilerContext;\n  if (ngDevMode) {\n    prevInjectorProfilerContext = setInjectorProfilerContext({\n      injector,\n      token: null\n    });\n  }\n  const prevInjector = setCurrentInjector(injector);\n  const previousInjectImplementation = setInjectImplementation(undefined);\n  try {\n    return fn();\n  } finally {\n    setCurrentInjector(prevInjector);\n    ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);\n    setInjectImplementation(previousInjectImplementation);\n  }\n}\n/**\n * Whether the current stack frame is inside an injection context.\n */\nfunction isInInjectionContext() {\n  return getInjectImplementation() !== undefined || getCurrentInjector() != null;\n}\n/**\n * Asserts that the current stack frame is within an [injection\n * context](guide/di/dependency-injection-context) and has access to `inject`.\n *\n * @param debugFn a reference to the function making the assertion (used for the error message).\n *\n * @publicApi\n */\nfunction assertInInjectionContext(debugFn) {\n  // Taking a `Function` instead of a string name here prevents the unminified name of the function\n  // from being retained in the bundle regardless of minification.\n  if (!isInInjectionContext()) {\n    throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode && debugFn.name + '() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`');\n  }\n}\nvar FactoryTarget;\n(function (FactoryTarget) {\n  FactoryTarget[FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n  FactoryTarget[FactoryTarget[\"Component\"] = 1] = \"Component\";\n  FactoryTarget[FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n  FactoryTarget[FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n  FactoryTarget[FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n})(FactoryTarget || (FactoryTarget = {}));\nvar R3TemplateDependencyKind;\n(function (R3TemplateDependencyKind) {\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"Directive\"] = 0] = \"Directive\";\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"Pipe\"] = 1] = \"Pipe\";\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"NgModule\"] = 2] = \"NgModule\";\n})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));\nvar ViewEncapsulation$1;\n(function (ViewEncapsulation) {\n  ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n  // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n  ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n  ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));\nfunction getCompilerFacade(request) {\n  const globalNg = _global['ng'];\n  if (globalNg && globalNg.ɵcompilerFacade) {\n    return globalNg.ɵcompilerFacade;\n  }\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // Log the type as an error so that a developer can easily navigate to the type from the\n    // console.\n    console.error(`JIT compilation failed for ${request.kind}`, request.type);\n    let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.\\n\\n`;\n    if (request.usage === 1 /* JitCompilerUsage.PartialDeclaration */) {\n      message += `The ${request.kind} is part of a library that has been partially compiled.\\n`;\n      message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.\\n`;\n      message += '\\n';\n      message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.\\n`;\n    } else {\n      message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.\\n`;\n    }\n    message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',\\n`;\n    message += `or manually provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`;\n    throw new Error(message);\n  } else {\n    throw new Error('JIT compiler unavailable');\n  }\n}\n\n/**\n * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.\n *\n * This should be kept up to date with the public exports of @angular/core.\n */\nconst angularCoreDiEnv = {\n  'ɵɵdefineInjectable': ɵɵdefineInjectable,\n  'ɵɵdefineInjector': ɵɵdefineInjector,\n  'ɵɵinject': ɵɵinject,\n  'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,\n  'resolveForwardRef': resolveForwardRef\n};\n\n/**\n * @description\n *\n * Represents a type that a Component or other object is instances of.\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by\n * the `MyCustomComponent` constructor function.\n *\n * @publicApi\n */\nconst Type = Function;\nfunction isType(v) {\n  return typeof v === 'function';\n}\n\n/*\n * #########################\n * Attention: These Regular expressions have to hold even if the code is minified!\n * ##########################\n */\n/**\n * Regular expression that detects pass-through constructors for ES5 output. This Regex\n * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also\n * it intends to capture the pattern where existing constructors have been downleveled from\n * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.\n *\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, arguments) || this;\n * ```\n *\n * downleveled to ES5 with `downlevelIteration` for TypeScript < 4.2:\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, __spread(arguments)) || this;\n * ```\n *\n * or downleveled to ES5 with `downlevelIteration` for TypeScript >= 4.2:\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;\n * ```\n *\n * More details can be found in: https://github.com/angular/angular/issues/38453.\n */\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|(?:[^()]+\\(\\[\\],)?[^()]+\\(arguments\\).*)\\)/;\n/** Regular expression that detects ES2015 classes which extend from other classes. */\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes and\n * have an explicit constructor defined.\n */\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes\n * and inherit a constructor.\n */\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{[^}]*super\\(\\.\\.\\.arguments\\)/;\n/**\n * Determine whether a stringified type is a class which delegates its constructor\n * to its parent.\n *\n * This is not trivial since compiled code can actually contain a constructor function\n * even if the original source code did not. For instance, when the child class contains\n * an initialized instance property.\n */\nfunction isDelegateCtor(typeStr) {\n  return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);\n}\nclass ReflectionCapabilities {\n  _reflect;\n  constructor(reflect) {\n    this._reflect = reflect || _global['Reflect'];\n  }\n  factory(t) {\n    return (...args) => new t(...args);\n  }\n  /** @internal */\n  _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n    let result;\n    if (typeof paramTypes === 'undefined') {\n      result = newArray(paramAnnotations.length);\n    } else {\n      result = newArray(paramTypes.length);\n    }\n    for (let i = 0; i < result.length; i++) {\n      // TS outputs Object for parameters without types, while Traceur omits\n      // the annotations. For now we preserve the Traceur behavior to aid\n      // migration, but this can be revisited.\n      if (typeof paramTypes === 'undefined') {\n        result[i] = [];\n      } else if (paramTypes[i] && paramTypes[i] != Object) {\n        result[i] = [paramTypes[i]];\n      } else {\n        result[i] = [];\n      }\n      if (paramAnnotations && paramAnnotations[i] != null) {\n        result[i] = result[i].concat(paramAnnotations[i]);\n      }\n    }\n    return result;\n  }\n  _ownParameters(type, parentCtor) {\n    const typeStr = type.toString();\n    // If we have no decorators, we only have function.length as metadata.\n    // In that case, to detect whether a child class declared an own constructor or not,\n    // we need to look inside of that constructor to check whether it is\n    // just calling the parent.\n    // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439\n    // that sets 'design:paramtypes' to []\n    // if a class inherits from another class but has no ctor declared itself.\n    if (isDelegateCtor(typeStr)) {\n      return null;\n    }\n    // Prefer the direct API.\n    if (type.parameters && type.parameters !== parentCtor.parameters) {\n      return type.parameters;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    const tsickleCtorParams = type.ctorParameters;\n    if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n      // Newer tsickle uses a function closure\n      // Retain the non-function case for compatibility with older tsickle\n      const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n      const paramTypes = ctorParameters.map(ctorParam => ctorParam && ctorParam.type);\n      const paramAnnotations = ctorParameters.map(ctorParam => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n    }\n    // API for metadata created by invoking the decorators.\n    const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n    const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata('design:paramtypes', type);\n    if (paramTypes || paramAnnotations) {\n      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n    }\n    // If a class has no decorators, at least create metadata\n    // based on function.length.\n    // Note: We know that this is a real constructor as we checked\n    // the content of the constructor above.\n    return newArray(type.length);\n  }\n  parameters(type) {\n    // Note: only report metadata if we have at least one class decorator\n    // to stay in sync with the static reflector.\n    if (!isType(type)) {\n      return [];\n    }\n    const parentCtor = getParentCtor(type);\n    let parameters = this._ownParameters(type, parentCtor);\n    if (!parameters && parentCtor !== Object) {\n      parameters = this.parameters(parentCtor);\n    }\n    return parameters || [];\n  }\n  _ownAnnotations(typeOrFunc, parentCtor) {\n    // Prefer the direct API.\n    if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n      let annotations = typeOrFunc.annotations;\n      if (typeof annotations === 'function' && annotations.annotations) {\n        annotations = annotations.annotations;\n      }\n      return annotations;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n      return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n    }\n    // API for metadata created by invoking the decorators.\n    if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n      return typeOrFunc[ANNOTATIONS];\n    }\n    return null;\n  }\n  annotations(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return [];\n    }\n    const parentCtor = getParentCtor(typeOrFunc);\n    const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n    const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n    return parentAnnotations.concat(ownAnnotations);\n  }\n  _ownPropMetadata(typeOrFunc, parentCtor) {\n    // Prefer the direct API.\n    if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n      let propMetadata = typeOrFunc.propMetadata;\n      if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n        propMetadata = propMetadata.propMetadata;\n      }\n      return propMetadata;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n      const propDecorators = typeOrFunc.propDecorators;\n      const propMetadata = {};\n      Object.keys(propDecorators).forEach(prop => {\n        propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n      });\n      return propMetadata;\n    }\n    // API for metadata created by invoking the decorators.\n    if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n      return typeOrFunc[PROP_METADATA];\n    }\n    return null;\n  }\n  propMetadata(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return {};\n    }\n    const parentCtor = getParentCtor(typeOrFunc);\n    const propMetadata = {};\n    if (parentCtor !== Object) {\n      const parentPropMetadata = this.propMetadata(parentCtor);\n      Object.keys(parentPropMetadata).forEach(propName => {\n        propMetadata[propName] = parentPropMetadata[propName];\n      });\n    }\n    const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n    if (ownPropMetadata) {\n      Object.keys(ownPropMetadata).forEach(propName => {\n        const decorators = [];\n        if (propMetadata.hasOwnProperty(propName)) {\n          decorators.push(...propMetadata[propName]);\n        }\n        decorators.push(...ownPropMetadata[propName]);\n        propMetadata[propName] = decorators;\n      });\n    }\n    return propMetadata;\n  }\n  ownPropMetadata(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return {};\n    }\n    return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n  }\n  hasLifecycleHook(type, lcProperty) {\n    return type instanceof Type && lcProperty in type.prototype;\n  }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n  if (!decoratorInvocations) {\n    return [];\n  }\n  return decoratorInvocations.map(decoratorInvocation => {\n    const decoratorType = decoratorInvocation.type;\n    const annotationCls = decoratorType.annotationCls;\n    const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n    return new annotationCls(...annotationArgs);\n  });\n}\nfunction getParentCtor(ctor) {\n  const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n  const parentCtor = parentProto ? parentProto.constructor : null;\n  // Note: We always use `Object` as the null value\n  // to simplify checking later on.\n  return parentCtor || Object;\n}\n\n// Below are constants for LView indices to help us look up LView members\n// without having to remember the specific indices.\n// Uglify will inline these when minifying so there shouldn't be a cost.\nconst HOST = 0;\nconst TVIEW = 1;\n// Shared with LContainer\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst T_HOST = 5;\n// End shared with LContainer\nconst HYDRATION = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR = 9;\nconst ENVIRONMENT = 10;\nconst RENDERER = 11;\nconst CHILD_HEAD = 12;\nconst CHILD_TAIL = 13;\n// FIXME(misko): Investigate if the three declarations aren't all same thing.\nconst DECLARATION_VIEW = 14;\nconst DECLARATION_COMPONENT_VIEW = 15;\nconst DECLARATION_LCONTAINER = 16;\nconst PREORDER_HOOK_FLAGS = 17;\nconst QUERIES = 18;\nconst ID = 19;\nconst EMBEDDED_VIEW_INJECTOR = 20;\nconst ON_DESTROY_HOOKS = 21;\nconst EFFECTS_TO_SCHEDULE = 22;\nconst EFFECTS = 23;\nconst REACTIVE_TEMPLATE_CONSUMER = 24;\n/**\n * Size of LView's header. Necessary to adjust for it when setting slots.\n *\n * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate\n * instruction index into `LView` index. All other indexes should be in the `LView` index space and\n * there should be no need to refer to `HEADER_OFFSET` anywhere else.\n */\nconst HEADER_OFFSET = 25;\n\n/**\n * Special location which allows easy identification of type. If we have an array which was\n * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is\n * `LContainer`.\n */\nconst TYPE = 1;\n/**\n * Below are constants for LContainer indices to help us look up LContainer members\n * without having to remember the specific indices.\n * Uglify will inline these when minifying so there shouldn't be a cost.\n */\n// FLAGS, PARENT, NEXT, and T_HOST are indices 2, 3, 4, and 5\n// As we already have these constants in LView, we don't need to re-create them.\nconst DEHYDRATED_VIEWS = 6;\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\n/**\n * Size of LContainer's header. Represents the index after which all views in the\n * container will be inserted. We need to keep a record of current views so we know\n * which views are already in the DOM (and don't need to be re-added) and so we can\n * remove views from the DOM when they are no longer required.\n */\nconst CONTAINER_HEADER_OFFSET = 10;\n/** Flags associated with an LContainer (saved in LContainer[FLAGS]) */\nvar LContainerFlags;\n(function (LContainerFlags) {\n  LContainerFlags[LContainerFlags[\"None\"] = 0] = \"None\";\n  /**\n   * Flag to signify that this `LContainer` may have transplanted views which need to be change\n   * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.\n   *\n   * This flag, once set, is never unset for the `LContainer`.\n   */\n  LContainerFlags[LContainerFlags[\"HasTransplantedViews\"] = 2] = \"HasTransplantedViews\";\n})(LContainerFlags || (LContainerFlags = {}));\n\n/**\n * True if `value` is `LView`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLView(value) {\n  return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\n/**\n * True if `value` is `LContainer`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLContainer(value) {\n  return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n  return (tNode.flags & 4 /* TNodeFlags.hasContentQuery */) !== 0;\n}\nfunction isComponentHost(tNode) {\n  return tNode.componentOffset > -1;\n}\nfunction isDirectiveHost(tNode) {\n  return (tNode.flags & 1 /* TNodeFlags.isDirectiveHost */) === 1 /* TNodeFlags.isDirectiveHost */;\n}\nfunction isComponentDef(def) {\n  return !!def.template;\n}\nfunction isRootView(target) {\n  return (target[FLAGS] & 512 /* LViewFlags.IsRoot */) !== 0;\n}\nfunction isProjectionTNode(tNode) {\n  return (tNode.type & 16 /* TNodeType.Projection */) === 16 /* TNodeType.Projection */;\n}\nfunction hasI18n(lView) {\n  return (lView[FLAGS] & 32 /* LViewFlags.HasI18n */) === 32 /* LViewFlags.HasI18n */;\n}\nfunction isDestroyed(lView) {\n  return (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;\n}\n\n// [Assert functions do not constraint type when they are guarded by a truthy\n// expression.](https://github.com/microsoft/TypeScript/issues/37295)\nfunction assertTNodeForLView(tNode, lView) {\n  assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeForTView(tNode, tView) {\n  assertTNode(tNode);\n  const tData = tView.data;\n  for (let i = HEADER_OFFSET; i < tData.length; i++) {\n    if (tData[i] === tNode) {\n      return;\n    }\n  }\n  throwError('This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n  assertDefined(tNode, 'TNode must be defined');\n  if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n    throwError('Not of type TNode, got: ' + tNode);\n  }\n}\nfunction assertTIcu(tIcu) {\n  assertDefined(tIcu, 'Expected TIcu to be defined');\n  if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n    throwError('Object is not of TIcu type.');\n  }\n}\nfunction assertComponentType(actual, msg = \"Type passed in is not ComponentType, it does not have 'ɵcmp' property.\") {\n  if (!getComponentDef(actual)) {\n    throwError(msg);\n  }\n}\nfunction assertNgModuleType(actual, msg = \"Type passed in is not NgModuleType, it does not have 'ɵmod' property.\") {\n  if (!getNgModuleDef(actual)) {\n    throwError(msg);\n  }\n}\nfunction assertCurrentTNodeIsParent(isParent) {\n  assertEqual(isParent, true, 'currentTNode should be a parent');\n}\nfunction assertHasParent(tNode) {\n  assertDefined(tNode, 'currentTNode should exist!');\n  assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertLContainer(value) {\n  assertDefined(value, 'LContainer must be defined');\n  assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n  value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n  assertDefined(value, 'LView must be defined');\n  assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n  assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n  assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');\n}\n/**\n * This is a basic sanity check that an object is probably a directive def. DirectiveDef is\n * an interface, so we can't do a direct instanceof check.\n */\nfunction assertDirectiveDef(obj) {\n  if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n    throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n  }\n}\nfunction assertIndexInDeclRange(tView, index) {\n  assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n  const tView = lView[1];\n  assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n  if (!(lower <= index && index < upper)) {\n    throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n  }\n}\nfunction assertProjectionSlots(lView, errMessage) {\n  assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');\n  assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage || 'Components with projection nodes (<ng-content>) must have projection slots defined.');\n}\nfunction assertParentView(lView, errMessage) {\n  assertDefined(lView, errMessage || \"Component views should always have a parent view (component's host view)\");\n}\nfunction assertNoDuplicateDirectives(directives) {\n  // The array needs at least two elements in order to have duplicates.\n  if (directives.length < 2) {\n    return;\n  }\n  const seenDirectives = new Set();\n  for (const current of directives) {\n    if (seenDirectives.has(current)) {\n      throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);\n    }\n    seenDirectives.add(current);\n  }\n}\n/**\n * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a\n * NodeInjector data structure.\n *\n * @param lView `LView` which should be checked.\n * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.\n */\nfunction assertNodeInjector(lView, injectorIndex) {\n  assertIndexInExpandoRange(lView, injectorIndex);\n  assertIndexInExpandoRange(lView, injectorIndex + 8 /* NodeInjectorOffset.PARENT */);\n  assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */], 'injectorIndex should point to parent injector');\n}\n\n/**\n * Represents a basic change from a previous to a new value for a single\n * property on a directive instance. Passed as a value in a\n * {@link SimpleChanges} object to the `ngOnChanges` hook.\n *\n * @see {@link OnChanges}\n *\n * @publicApi\n */\nclass SimpleChange {\n  previousValue;\n  currentValue;\n  firstChange;\n  constructor(previousValue, currentValue, firstChange) {\n    this.previousValue = previousValue;\n    this.currentValue = currentValue;\n    this.firstChange = firstChange;\n  }\n  /**\n   * Check whether the new value is the first value assigned.\n   */\n  isFirstChange() {\n    return this.firstChange;\n  }\n}\nfunction applyValueToInputField(instance, inputSignalNode, privateName, value) {\n  if (inputSignalNode !== null) {\n    inputSignalNode.applyValueToInputSignal(inputSignalNode, value);\n  } else {\n    instance[privateName] = value;\n  }\n}\n\n/**\n * The NgOnChangesFeature decorates a component with support for the ngOnChanges\n * lifecycle hook, so it should be included in any component that implements\n * that hook.\n *\n * If the component or directive uses inheritance, the NgOnChangesFeature MUST\n * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise\n * inherited properties will not be propagated to the ngOnChanges lifecycle\n * hook.\n *\n * Example usage:\n *\n * ```ts\n * static ɵcmp = defineComponent({\n *   ...\n *   inputs: {name: 'publicName'},\n *   features: [NgOnChangesFeature]\n * });\n * ```\n *\n * @codeGenApi\n */\nconst ɵɵNgOnChangesFeature = /* @__PURE__ */(() => {\n  const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;\n  // This option ensures that the ngOnChanges lifecycle hook will be inherited\n  // from superclasses (in InheritDefinitionFeature).\n  /** @nocollapse */\n  ɵɵNgOnChangesFeatureImpl.ngInherit = true;\n  return ɵɵNgOnChangesFeatureImpl;\n})();\nfunction NgOnChangesFeatureImpl(definition) {\n  if (definition.type.prototype.ngOnChanges) {\n    definition.setInput = ngOnChangesSetInput;\n  }\n  return rememberChangeHistoryAndInvokeOnChangesHook;\n}\n/**\n * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate\n * `ngOnChanges`.\n *\n * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are\n * found it invokes `ngOnChanges` on the component instance.\n *\n * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,\n *     it is guaranteed to be called with component instance.\n */\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n  const simpleChangesStore = getSimpleChangesStore(this);\n  const current = simpleChangesStore?.current;\n  if (current) {\n    const previous = simpleChangesStore.previous;\n    if (previous === EMPTY_OBJ) {\n      simpleChangesStore.previous = current;\n    } else {\n      // New changes are copied to the previous store, so that we don't lose history for inputs\n      // which were not changed this time\n      for (let key in current) {\n        previous[key] = current[key];\n      }\n    }\n    simpleChangesStore.current = null;\n    this.ngOnChanges(current);\n  }\n}\nfunction ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {\n  const declaredName = this.declaredInputs[publicName];\n  ngDevMode && assertString(declaredName, 'Name of input in ngOnChanges has to be a string');\n  const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {\n    previous: EMPTY_OBJ,\n    current: null\n  });\n  const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n  const previous = simpleChangesStore.previous;\n  const previousChange = previous[declaredName];\n  current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n  applyValueToInputField(instance, inputSignalNode, privateName, value);\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n  return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n  return instance[SIMPLE_CHANGES_STORE] = store;\n}\nlet profilerCallback = null;\n/**\n * Sets the callback function which will be invoked before and after performing certain actions at\n * runtime (for example, before and after running change detection).\n *\n * Warning: this function is *INTERNAL* and should not be relied upon in application's code.\n * The contract of the function might be changed in any release and/or the function can be removed\n * completely.\n *\n * @param profiler function provided by the caller or null value to disable profiling.\n */\nconst setProfiler = profiler => {\n  profilerCallback = profiler;\n};\n/**\n * Profiler function which wraps user code executed by the runtime.\n *\n * @param event ProfilerEvent corresponding to the execution context\n * @param instance component instance\n * @param hookOrListener lifecycle hook function or output listener. The value depends on the\n *  execution context\n * @returns\n */\nconst profiler = function (event, instance, hookOrListener) {\n  if (profilerCallback != null /* both `null` and `undefined` */) {\n    profilerCallback(event, instance, hookOrListener);\n  }\n};\nconst SVG_NAMESPACE = 'svg';\nconst MATH_ML_NAMESPACE = 'math';\n\n/**\n * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)\n * in same location in `LView`. This is because we don't want to pre-allocate space for it\n * because the storage is sparse. This file contains utilities for dealing with such data types.\n *\n * How do we know what is stored at a given location in `LView`.\n * - `Array.isArray(value) === false` => `RNode` (The normal storage value)\n * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.\n *   - `typeof value[TYPE] === 'object'` => `LView`\n *      - This happens when we have a component at a given location\n *   - `typeof value[TYPE] === true` => `LContainer`\n *      - This happens when we have `LContainer` binding at a given location.\n *\n *\n * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.\n */\n/**\n * Returns `RNode`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapRNode(value) {\n  while (Array.isArray(value)) {\n    value = value[HOST];\n  }\n  return value;\n}\n/**\n * Returns `LView` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLView(value) {\n  while (Array.isArray(value)) {\n    // This check is same as `isLView()` but we don't call at as we don't want to call\n    // `Array.isArray()` twice and give JITer more work for inlining.\n    if (typeof value[TYPE] === 'object') return value;\n    value = value[HOST];\n  }\n  return null;\n}\n/**\n * Retrieves an element value from the provided `viewData`, by unwrapping\n * from any containers, component views, or style contexts.\n */\nfunction getNativeByIndex(index, lView) {\n  ngDevMode && assertIndexInRange(lView, index);\n  ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n  return unwrapRNode(lView[index]);\n}\n/**\n * Retrieve an `RNode` for a given `TNode` and `LView`.\n *\n * This function guarantees in dev mode to retrieve a non-null `RNode`.\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNode(tNode, lView) {\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  ngDevMode && assertIndexInRange(lView, tNode.index);\n  const node = unwrapRNode(lView[tNode.index]);\n  return node;\n}\n/**\n * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.\n *\n * Some `TNode`s don't have associated `RNode`s. For example `Projection`\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNodeOrNull(tNode, lView) {\n  const index = tNode === null ? -1 : tNode.index;\n  if (index !== -1) {\n    ngDevMode && assertTNodeForLView(tNode, lView);\n    const node = unwrapRNode(lView[index]);\n    return node;\n  }\n  return null;\n}\n// fixme(misko): The return Type should be `TNode|null`\nfunction getTNode(tView, index) {\n  ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n  ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n  const tNode = tView.data[index];\n  ngDevMode && tNode !== null && assertTNode(tNode);\n  return tNode;\n}\n/** Retrieves a value from any `LView` or `TData`. */\nfunction load(view, index) {\n  ngDevMode && assertIndexInRange(view, index);\n  return view[index];\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n  // Could be an LView or an LContainer. If LContainer, unwrap to find LView.\n  ngDevMode && assertIndexInRange(hostView, nodeIndex);\n  const slotValue = hostView[nodeIndex];\n  const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n  return lView;\n}\n/** Checks whether a given view is in creation mode */\nfunction isCreationMode(view) {\n  return (view[FLAGS] & 4 /* LViewFlags.CreationMode */) === 4 /* LViewFlags.CreationMode */;\n}\n/**\n * Returns a boolean for whether the view is attached to the change detection tree.\n *\n * Note: This determines whether a view should be checked, not whether it's inserted\n * into a container. For that, you'll want `viewAttachedToContainer` below.\n */\nfunction viewAttachedToChangeDetector(view) {\n  return (view[FLAGS] & 128 /* LViewFlags.Attached */) === 128 /* LViewFlags.Attached */;\n}\n/** Returns a boolean for whether the view is attached to a container. */\nfunction viewAttachedToContainer(view) {\n  return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n  if (index === null || index === undefined) return null;\n  ngDevMode && assertIndexInRange(consts, index);\n  return consts[index];\n}\n/**\n * Resets the pre-order hook flags of the view.\n * @param lView the LView on which the flags are reset\n */\nfunction resetPreOrderHookFlags(lView) {\n  lView[PREORDER_HOOK_FLAGS] = 0;\n}\n/**\n * Adds the `RefreshView` flag from the lView and updates HAS_CHILD_VIEWS_TO_REFRESH flag of\n * parents.\n */\nfunction markViewForRefresh(lView) {\n  if (lView[FLAGS] & 1024 /* LViewFlags.RefreshView */) {\n    return;\n  }\n  lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  if (viewAttachedToChangeDetector(lView)) {\n    markAncestorsForTraversal(lView);\n  }\n}\n/**\n * Walks up the LView hierarchy.\n * @param nestingLevel Number of times to walk up in hierarchy.\n * @param currentView View from which to start the lookup.\n */\nfunction walkUpViews(nestingLevel, currentView) {\n  while (nestingLevel > 0) {\n    ngDevMode && assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n    currentView = currentView[DECLARATION_VIEW];\n    nestingLevel--;\n  }\n  return currentView;\n}\nfunction requiresRefreshOrTraversal(lView) {\n  return !!(lView[FLAGS] & (1024 /* LViewFlags.RefreshView */ | 8192 /* LViewFlags.HasChildViewsToRefresh */) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);\n}\n/**\n * Updates the `HasChildViewsToRefresh` flag on the parents of the `LView` as well as the\n * parents above.\n */\nfunction updateAncestorTraversalFlagsOnAttach(lView) {\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(9 /* NotificationSource.ViewAttached */);\n  if (lView[FLAGS] & 64 /* LViewFlags.Dirty */) {\n    lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  }\n  if (requiresRefreshOrTraversal(lView)) {\n    markAncestorsForTraversal(lView);\n  }\n}\n/**\n * Ensures views above the given `lView` are traversed during change detection even when they are\n * not dirty.\n *\n * This is done by setting the `HAS_CHILD_VIEWS_TO_REFRESH` flag up to the root, stopping when the\n * flag is already `true` or the `lView` is detached.\n */\nfunction markAncestorsForTraversal(lView) {\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(0 /* NotificationSource.MarkAncestorsForTraversal */);\n  let parent = getLViewParent(lView);\n  while (parent !== null) {\n    // We stop adding markers to the ancestors once we reach one that already has the marker. This\n    // is to avoid needlessly traversing all the way to the root when the marker already exists.\n    if (parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */) {\n      break;\n    }\n    parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;\n    if (!viewAttachedToChangeDetector(parent)) {\n      break;\n    }\n    parent = getLViewParent(parent);\n  }\n}\n/**\n * Stores a LView-specific destroy callback.\n */\nfunction storeLViewOnDestroy(lView, onDestroyCallback) {\n  if ((lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) {\n    throw new RuntimeError(911 /* RuntimeErrorCode.VIEW_ALREADY_DESTROYED */, ngDevMode && 'View has already been destroyed.');\n  }\n  if (lView[ON_DESTROY_HOOKS] === null) {\n    lView[ON_DESTROY_HOOKS] = [];\n  }\n  lView[ON_DESTROY_HOOKS].push(onDestroyCallback);\n}\n/**\n * Removes previously registered LView-specific destroy callback.\n */\nfunction removeLViewOnDestroy(lView, onDestroyCallback) {\n  if (lView[ON_DESTROY_HOOKS] === null) return;\n  const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);\n  if (destroyCBIdx !== -1) {\n    lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);\n  }\n}\n/**\n * Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of\n * that LContainer, which is an LView\n * @param lView the lView whose parent to get\n */\nfunction getLViewParent(lView) {\n  ngDevMode && assertLView(lView);\n  const parent = lView[PARENT];\n  return isLContainer(parent) ? parent[PARENT] : parent;\n}\nconst instructionState = {\n  lFrame: createLFrame(null),\n  bindingsEnabled: true,\n  skipHydrationRootTNode: null\n};\nvar CheckNoChangesMode;\n(function (CheckNoChangesMode) {\n  CheckNoChangesMode[CheckNoChangesMode[\"Off\"] = 0] = \"Off\";\n  CheckNoChangesMode[CheckNoChangesMode[\"Exhaustive\"] = 1] = \"Exhaustive\";\n  CheckNoChangesMode[CheckNoChangesMode[\"OnlyDirtyViews\"] = 2] = \"OnlyDirtyViews\";\n})(CheckNoChangesMode || (CheckNoChangesMode = {}));\n/**\n * In this mode, any changes in bindings will throw an ExpressionChangedAfterChecked error.\n *\n * Necessary to support ChangeDetectorRef.checkNoChanges().\n *\n * The `checkNoChanges` function is invoked only in ngDevMode=true and verifies that no unintended\n * changes exist in the change detector or its children.\n */\nlet _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */\n/**\n * Flag used to indicate that we are in the middle running change detection on a view\n *\n * @see detectChangesInViewWhileDirty\n */\nlet _isRefreshingViews = false;\n/**\n * Returns true if the instruction state stack is empty.\n *\n * Intended to be called from tests only (tree shaken otherwise).\n */\nfunction specOnlyIsInstructionStateEmpty() {\n  return instructionState.lFrame.parent === null;\n}\nfunction getElementDepthCount() {\n  return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n  instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n  instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n  return instructionState.bindingsEnabled;\n}\n/**\n * Returns true if currently inside a skip hydration block.\n * @returns boolean\n */\nfunction isInSkipHydrationBlock$1() {\n  return instructionState.skipHydrationRootTNode !== null;\n}\n/**\n * Returns true if this is the root TNode of the skip hydration block.\n * @param tNode the current TNode\n * @returns boolean\n */\nfunction isSkipHydrationRootTNode(tNode) {\n  return instructionState.skipHydrationRootTNode === tNode;\n}\n/**\n * Enables directive matching on elements.\n *\n *  * Example:\n * ```html\n * <my-comp my-directive>\n *   Should match component / directive.\n * </my-comp>\n * <div ngNonBindable>\n *   <!-- ɵɵdisableBindings() -->\n *   <my-comp my-directive>\n *     Should not match component / directive because we are in ngNonBindable.\n *   </my-comp>\n *   <!-- ɵɵenableBindings() -->\n * </div>\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵenableBindings() {\n  instructionState.bindingsEnabled = true;\n}\n/**\n * Sets a flag to specify that the TNode is in a skip hydration block.\n * @param tNode the current TNode\n */\nfunction enterSkipHydrationBlock(tNode) {\n  instructionState.skipHydrationRootTNode = tNode;\n}\n/**\n * Disables directive matching on element.\n *\n *  * Example:\n * ```html\n * <my-comp my-directive>\n *   Should match component / directive.\n * </my-comp>\n * <div ngNonBindable>\n *   <!-- ɵɵdisableBindings() -->\n *   <my-comp my-directive>\n *     Should not match component / directive because we are in ngNonBindable.\n *   </my-comp>\n *   <!-- ɵɵenableBindings() -->\n * </div>\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdisableBindings() {\n  instructionState.bindingsEnabled = false;\n}\n/**\n * Clears the root skip hydration node when leaving a skip hydration block.\n */\nfunction leaveSkipHydrationBlock() {\n  instructionState.skipHydrationRootTNode = null;\n}\n/**\n * Return the current `LView`.\n */\nfunction getLView() {\n  return instructionState.lFrame.lView;\n}\n/**\n * Return the current `TView`.\n */\nfunction getTView() {\n  return instructionState.lFrame.tView;\n}\n/**\n * Restores `contextViewData` to the given OpaqueViewState instance.\n *\n * Used in conjunction with the getCurrentView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @param viewToRestore The OpaqueViewState instance to restore.\n * @returns Context of the restored OpaqueViewState instance.\n *\n * @codeGenApi\n */\nfunction ɵɵrestoreView(viewToRestore) {\n  instructionState.lFrame.contextLView = viewToRestore;\n  return viewToRestore[CONTEXT];\n}\n/**\n * Clears the view set in `ɵɵrestoreView` from memory. Returns the passed in\n * value so that it can be used as a return value of an instruction.\n *\n * @codeGenApi\n */\nfunction ɵɵresetView(value) {\n  instructionState.lFrame.contextLView = null;\n  return value;\n}\nfunction getCurrentTNode() {\n  let currentTNode = getCurrentTNodePlaceholderOk();\n  while (currentTNode !== null && currentTNode.type === 64 /* TNodeType.Placeholder */) {\n    currentTNode = currentTNode.parent;\n  }\n  return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n  return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n  const lFrame = instructionState.lFrame;\n  const currentTNode = lFrame.currentTNode;\n  return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n  ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n  const lFrame = instructionState.lFrame;\n  lFrame.currentTNode = tNode;\n  lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n  return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n  instructionState.lFrame.isParent = false;\n}\nfunction getContextLView() {\n  const contextLView = instructionState.lFrame.contextLView;\n  ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');\n  return contextLView;\n}\nfunction isInCheckNoChangesMode() {\n  !ngDevMode && throwError('Must never be called in production mode');\n  return _checkNoChangesMode !== CheckNoChangesMode.Off;\n}\nfunction isExhaustiveCheckNoChanges() {\n  !ngDevMode && throwError('Must never be called in production mode');\n  return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  _checkNoChangesMode = mode;\n}\nfunction isRefreshingViews() {\n  return _isRefreshingViews;\n}\nfunction setIsRefreshingViews(mode) {\n  const prev = _isRefreshingViews;\n  _isRefreshingViews = mode;\n  return prev;\n}\n// top level variables should not be exported for performance reasons (PERF_NOTES.md)\nfunction getBindingRoot() {\n  const lFrame = instructionState.lFrame;\n  let index = lFrame.bindingRootIndex;\n  if (index === -1) {\n    index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n  }\n  return index;\n}\nfunction getBindingIndex() {\n  return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n  return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n  return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n  const lFrame = instructionState.lFrame;\n  const index = lFrame.bindingIndex;\n  lFrame.bindingIndex = lFrame.bindingIndex + count;\n  return index;\n}\nfunction isInI18nBlock() {\n  return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n  instructionState.lFrame.inI18n = isInI18nBlock;\n}\n/**\n * Set a new binding root index so that host template functions can execute.\n *\n * Bindings inside the host template are 0 index. But because we don't know ahead of time\n * how many host bindings we have we can't pre-compute them. For this reason they are all\n * 0 index and we just shift the root so that they match next available location in the LView.\n *\n * @param bindingRootIndex Root index for `hostBindings`\n * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive\n *        whose `hostBindings` are being processed.\n */\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n  const lFrame = instructionState.lFrame;\n  lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n  setCurrentDirectiveIndex(currentDirectiveIndex);\n}\n/**\n * When host binding is executing this points to the directive index.\n * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`\n * `LView[getCurrentDirectiveIndex()]` is directive instance.\n */\nfunction getCurrentDirectiveIndex() {\n  return instructionState.lFrame.currentDirectiveIndex;\n}\n/**\n * Sets an index of a directive whose `hostBindings` are being processed.\n *\n * @param currentDirectiveIndex `TData` index where current directive instance can be found.\n */\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n  instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\n/**\n * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being\n * executed.\n *\n * @param tData Current `TData` where the `DirectiveDef` will be looked up at.\n */\nfunction getCurrentDirectiveDef(tData) {\n  const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n  return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n  return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n  instructionState.lFrame.currentQueryIndex = value;\n}\n/**\n * Returns a `TNode` of the location where the current `LView` is declared at.\n *\n * @param lView an `LView` that we want to find parent `TNode` for.\n */\nfunction getDeclarationTNode(lView) {\n  const tView = lView[TVIEW];\n  // Return the declaration parent for embedded views\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n    return tView.declTNode;\n  }\n  // Components don't have `TView.declTNode` because each instance of component could be\n  // inserted in different location, hence `TView.declTNode` is meaningless.\n  // Falling back to `T_HOST` in case we cross component boundary.\n  if (tView.type === 1 /* TViewType.Component */) {\n    return lView[T_HOST];\n  }\n  // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.\n  return null;\n}\n/**\n * This is a light weight version of the `enterView` which is needed by the DI system.\n *\n * @param lView `LView` location of the DI context.\n * @param tNode `TNode` for DI context\n * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration\n *     tree from `tNode`  until we find parent declared `TElementNode`.\n * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared\n *     `TNode` if `flags` has  `SkipSelf`). Failing to enter DI implies that no associated\n *     `NodeInjector` can be found and we should instead use `ModuleInjector`.\n *     - If `true` than this call must be fallowed by `leaveDI`\n *     - If `false` than this call failed and we should NOT call `leaveDI`\n */\nfunction enterDI(lView, tNode, flags) {\n  ngDevMode && assertLViewOrUndefined(lView);\n  if (flags & InjectFlags.SkipSelf) {\n    ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n    let parentTNode = tNode;\n    let parentLView = lView;\n    while (true) {\n      ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n      parentTNode = parentTNode.parent;\n      if (parentTNode === null && !(flags & InjectFlags.Host)) {\n        parentTNode = getDeclarationTNode(parentLView);\n        if (parentTNode === null) break;\n        // In this case, a parent exists and is definitely an element. So it will definitely\n        // have an existing lView as the declaration view, which is why we can assume it's defined.\n        ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n        parentLView = parentLView[DECLARATION_VIEW];\n        // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives\n        // We want to skip those and look only at Elements and ElementContainers to ensure\n        // we're looking at true parent nodes, and not content or other types.\n        if (parentTNode.type & (2 /* TNodeType.Element */ | 8 /* TNodeType.ElementContainer */)) {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (parentTNode === null) {\n      // If we failed to find a parent TNode this means that we should use module injector.\n      return false;\n    } else {\n      tNode = parentTNode;\n      lView = parentLView;\n    }\n  }\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  const lFrame = instructionState.lFrame = allocLFrame();\n  lFrame.currentTNode = tNode;\n  lFrame.lView = lView;\n  return true;\n}\n/**\n * Swap the current lView with a new lView.\n *\n * For performance reasons we store the lView in the top level of the module.\n * This way we minimize the number of properties to read. Whenever a new view\n * is entered we have to store the lView for later, and when the view is\n * exited the state has to be restored\n *\n * @param newView New lView to become active\n * @returns the previously active lView;\n */\nfunction enterView(newView) {\n  ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n  ngDevMode && assertLViewOrUndefined(newView);\n  const newLFrame = allocLFrame();\n  if (ngDevMode) {\n    assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n    assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n  }\n  const tView = newView[TVIEW];\n  instructionState.lFrame = newLFrame;\n  ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n  newLFrame.currentTNode = tView.firstChild;\n  newLFrame.lView = newView;\n  newLFrame.tView = tView;\n  newLFrame.contextLView = newView;\n  newLFrame.bindingIndex = tView.bindingStartIndex;\n  newLFrame.inI18n = false;\n}\n/**\n * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.\n */\nfunction allocLFrame() {\n  const currentLFrame = instructionState.lFrame;\n  const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n  const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n  return newLFrame;\n}\nfunction createLFrame(parent) {\n  const lFrame = {\n    currentTNode: null,\n    isParent: true,\n    lView: null,\n    tView: null,\n    selectedIndex: -1,\n    contextLView: null,\n    elementDepthCount: 0,\n    currentNamespace: null,\n    currentDirectiveIndex: -1,\n    bindingRootIndex: -1,\n    bindingIndex: -1,\n    currentQueryIndex: 0,\n    parent: parent,\n    child: null,\n    inI18n: false\n  };\n  parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.\n  return lFrame;\n}\n/**\n * A lightweight version of leave which is used with DI.\n *\n * This function only resets `currentTNode` and `LView` as those are the only properties\n * used with DI (`enterDI()`).\n *\n * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where\n * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.\n */\nfunction leaveViewLight() {\n  const oldLFrame = instructionState.lFrame;\n  instructionState.lFrame = oldLFrame.parent;\n  oldLFrame.currentTNode = null;\n  oldLFrame.lView = null;\n  return oldLFrame;\n}\n/**\n * This is a lightweight version of the `leaveView` which is needed by the DI system.\n *\n * NOTE: this function is an alias so that we can change the type of the function to have `void`\n * return type.\n */\nconst leaveDI = leaveViewLight;\n/**\n * Leave the current `LView`\n *\n * This pops the `LFrame` with the associated `LView` from the stack.\n *\n * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is\n * because for performance reasons we don't release `LFrame` but rather keep it for next use.\n */\nfunction leaveView() {\n  const oldLFrame = leaveViewLight();\n  oldLFrame.isParent = true;\n  oldLFrame.tView = null;\n  oldLFrame.selectedIndex = -1;\n  oldLFrame.contextLView = null;\n  oldLFrame.elementDepthCount = 0;\n  oldLFrame.currentDirectiveIndex = -1;\n  oldLFrame.currentNamespace = null;\n  oldLFrame.bindingRootIndex = -1;\n  oldLFrame.bindingIndex = -1;\n  oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n  const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);\n  return contextLView[CONTEXT];\n}\n/**\n * Gets the currently selected element index.\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n */\nfunction getSelectedIndex() {\n  return instructionState.lFrame.selectedIndex;\n}\n/**\n * Sets the most recent index passed to {@link select}\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n *\n * (Note that if an \"exit function\" was set earlier (via `setElementExitFn()`) then that will be\n * run if and when the provided `index` value is different from the current selected index value.)\n */\nfunction setSelectedIndex(index) {\n  ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n  ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, \"Can't set index passed end of LView\");\n  instructionState.lFrame.selectedIndex = index;\n}\n/**\n * Gets the `tNode` that represents currently selected element.\n */\nfunction getSelectedTNode() {\n  const lFrame = instructionState.lFrame;\n  return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceSVG() {\n  instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceMathML() {\n  instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceHTML() {\n  namespaceHTMLInternal();\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n */\nfunction namespaceHTMLInternal() {\n  instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace$1() {\n  return instructionState.lFrame.currentNamespace;\n}\nlet _wasLastNodeCreated = true;\n/**\n * Retrieves a global flag that indicates whether the most recent DOM node\n * was created or hydrated.\n */\nfunction wasLastNodeCreated() {\n  return _wasLastNodeCreated;\n}\n/**\n * Sets a global flag to indicate whether the most recent DOM node\n * was created or hydrated.\n */\nfunction lastNodeWasCreated(flag) {\n  _wasLastNodeCreated = flag;\n}\n\n/**\n * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.\n *\n * Must be run *only* on the first template pass.\n *\n * Sets up the pre-order hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * @param directiveIndex The index of the directive in LView\n * @param directiveDef The definition containing the hooks to setup in tView\n * @param tView The current TView\n */\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const {\n    ngOnChanges,\n    ngOnInit,\n    ngDoCheck\n  } = directiveDef.type.prototype;\n  if (ngOnChanges) {\n    const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n    (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);\n    (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);\n  }\n  if (ngOnInit) {\n    (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);\n  }\n  if (ngDoCheck) {\n    (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);\n    (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);\n  }\n}\n/**\n *\n * Loops through the directives on the provided `tNode` and queues hooks to be\n * run that are not initialization hooks.\n *\n * Should be executed during `elementEnd()` and similar to\n * preserve hook execution order. Content, view, and destroy hooks for projected\n * components and directives must be called *before* their hosts.\n *\n * Sets up the content, view, and destroy hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up\n * separately at `elementStart`.\n *\n * @param tView The current TView\n * @param tNode The TNode whose directives are to be searched for hooks to queue\n */\nfunction registerPostOrderHooks(tView, tNode) {\n  ngDevMode && assertFirstCreatePass(tView);\n  // It's necessary to loop through the directives at elementEnd() (rather than processing in\n  // directiveCreate) so we can preserve the current hook order. Content, view, and destroy\n  // hooks for projected components and directives must be called *before* their hosts.\n  for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n    const directiveDef = tView.data[i];\n    ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n    const lifecycleHooks = directiveDef.type.prototype;\n    const {\n      ngAfterContentInit,\n      ngAfterContentChecked,\n      ngAfterViewInit,\n      ngAfterViewChecked,\n      ngOnDestroy\n    } = lifecycleHooks;\n    if (ngAfterContentInit) {\n      (tView.contentHooks ??= []).push(-i, ngAfterContentInit);\n    }\n    if (ngAfterContentChecked) {\n      (tView.contentHooks ??= []).push(i, ngAfterContentChecked);\n      (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);\n    }\n    if (ngAfterViewInit) {\n      (tView.viewHooks ??= []).push(-i, ngAfterViewInit);\n    }\n    if (ngAfterViewChecked) {\n      (tView.viewHooks ??= []).push(i, ngAfterViewChecked);\n      (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);\n    }\n    if (ngOnDestroy != null) {\n      (tView.destroyHooks ??= []).push(i, ngOnDestroy);\n    }\n  }\n}\n/**\n * Executing hooks requires complex logic as we need to deal with 2 constraints.\n *\n * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only\n * once, across many change detection cycles. This must be true even if some hooks throw, or if\n * some recursively trigger a change detection cycle.\n * To solve that, it is required to track the state of the execution of these init hooks.\n * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},\n * and the index within that phase. They can be seen as a cursor in the following structure:\n * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]\n * They are stored as flags in LView[FLAGS].\n *\n * 2. Pre-order hooks can be executed in batches, because of the select instruction.\n * To be able to pause and resume their execution, we also need some state about the hook's array\n * that is being processed:\n * - the index of the next hook to be executed\n * - the number of init hooks already found in the processed part of the  array\n * They are stored as flags in LView[PREORDER_HOOK_FLAGS].\n */\n/**\n * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were\n * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read\n * / write of the init-hooks related flags.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n  callHooks(lView, hooks, 3 /* InitPhaseState.InitPhaseCompleted */, nodeIndex);\n}\n/**\n * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,\n * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param initPhase A phase for which hooks should be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n  ngDevMode && assertNotEqual(initPhase, 3 /* InitPhaseState.InitPhaseCompleted */, 'Init pre-order hooks should not be called more than once');\n  if ((lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n    callHooks(lView, hooks, initPhase, nodeIndex);\n  }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n  ngDevMode && assertNotEqual(initPhase, 3 /* InitPhaseState.InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');\n  let flags = lView[FLAGS];\n  if ((flags & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n    flags &= 16383 /* LViewFlags.IndexWithinInitPhaseReset */;\n    flags += 1 /* LViewFlags.InitPhaseStateIncrementer */;\n    lView[FLAGS] = flags;\n  }\n}\n/**\n * Calls lifecycle hooks with their contexts, skipping init hooks if it's not\n * the first LView pass\n *\n * @param currentView The current view\n * @param arr The array in which the hooks are found\n * @param initPhaseState the current state of the init phase\n * @param currentNodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n  ngDevMode && assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n  const startIndex = currentNodeIndex !== undefined ? currentView[PREORDER_HOOK_FLAGS] & 65535 /* PreOrderHookFlags.IndexOfTheNextPreOrderHookMaskMask */ : 0;\n  const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n  const max = arr.length - 1; // Stop the loop at length - 1, because we look for the hook at i + 1\n  let lastNodeIndexFound = 0;\n  for (let i = startIndex; i < max; i++) {\n    const hook = arr[i + 1];\n    if (typeof hook === 'number') {\n      lastNodeIndexFound = arr[i];\n      if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n        break;\n      }\n    } else {\n      const isInitHook = arr[i] < 0;\n      if (isInitHook) {\n        currentView[PREORDER_HOOK_FLAGS] += 65536 /* PreOrderHookFlags.NumberOfInitHooksCalledIncrementer */;\n      }\n      if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n        callHook(currentView, initPhase, arr, i);\n        currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760 /* PreOrderHookFlags.NumberOfInitHooksCalledMask */) + i + 2;\n      }\n      i++;\n    }\n  }\n}\n/**\n * Executes a single lifecycle hook, making sure that:\n * - it is called in the non-reactive context;\n * - profiling data are registered.\n */\nfunction callHookInternal(directive, hook) {\n  profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    hook.call(directive);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n    profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);\n  }\n}\n/**\n * Execute one hook against the current `LView`.\n *\n * @param currentView The current view\n * @param initPhaseState the current state of the init phase\n * @param arr The array in which the hooks are found\n * @param i The current index within the hook data array\n */\nfunction callHook(currentView, initPhase, arr, i) {\n  const isInitHook = arr[i] < 0;\n  const hook = arr[i + 1];\n  const directiveIndex = isInitHook ? -arr[i] : arr[i];\n  const directive = currentView[directiveIndex];\n  if (isInitHook) {\n    const indexWithintInitPhase = currentView[FLAGS] >> 14 /* LViewFlags.IndexWithinInitPhaseShift */;\n    // The init phase state must be always checked here as it may have been recursively updated.\n    if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 /* PreOrderHookFlags.NumberOfInitHooksCalledShift */ && (currentView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n      currentView[FLAGS] += 16384 /* LViewFlags.IndexWithinInitPhaseIncrementer */;\n      callHookInternal(directive, hook);\n    }\n  } else {\n    callHookInternal(directive, hook);\n  }\n}\nconst NO_PARENT_INJECTOR = -1;\n/**\n * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in\n * `TView.data`. This allows us to store information about the current node's tokens (which\n * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be\n * shared, so they live in `LView`).\n *\n * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter\n * determines whether a directive is available on the associated node or not. This prevents us\n * from searching the directives array at this level unless it's probable the directive is in it.\n *\n * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.\n *\n * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed\n * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`\n * will differ based on where it is flattened into the main array, so it's not possible to know\n * the indices ahead of time and save their types here. The interfaces are still included here\n * for documentation purposes.\n *\n * export interface LInjector extends Array<any> {\n *\n *    // Cumulative bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)\n *    [0]: number;\n *\n *    // Cumulative bloom for directive IDs 32-63\n *    [1]: number;\n *\n *    // Cumulative bloom for directive IDs 64-95\n *    [2]: number;\n *\n *    // Cumulative bloom for directive IDs 96-127\n *    [3]: number;\n *\n *    // Cumulative bloom for directive IDs 128-159\n *    [4]: number;\n *\n *    // Cumulative bloom for directive IDs 160 - 191\n *    [5]: number;\n *\n *    // Cumulative bloom for directive IDs 192 - 223\n *    [6]: number;\n *\n *    // Cumulative bloom for directive IDs 224 - 255\n *    [7]: number;\n *\n *    // We need to store a reference to the injector's parent so DI can keep looking up\n *    // the injector tree until it finds the dependency it's looking for.\n *    [PARENT_INJECTOR]: number;\n * }\n *\n * export interface TInjector extends Array<any> {\n *\n *    // Shared node bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)\n *    [0]: number;\n *\n *    // Shared node bloom for directive IDs 32-63\n *    [1]: number;\n *\n *    // Shared node bloom for directive IDs 64-95\n *    [2]: number;\n *\n *    // Shared node bloom for directive IDs 96-127\n *    [3]: number;\n *\n *    // Shared node bloom for directive IDs 128-159\n *    [4]: number;\n *\n *    // Shared node bloom for directive IDs 160 - 191\n *    [5]: number;\n *\n *    // Shared node bloom for directive IDs 192 - 223\n *    [6]: number;\n *\n *    // Shared node bloom for directive IDs 224 - 255\n *    [7]: number;\n *\n *    // Necessary to find directive indices for a particular node.\n *    [TNODE]: TElementNode|TElementContainerNode|TContainerNode;\n *  }\n */\n/**\n * Factory for creating instances of injectors in the NodeInjector.\n *\n * This factory is complicated by the fact that it can resolve `multi` factories as well.\n *\n * NOTE: Some of the fields are optional which means that this class has two hidden classes.\n * - One without `multi` support (most common)\n * - One with `multi` values, (rare).\n *\n * Since VMs can cache up to 4 inline hidden classes this is OK.\n *\n * - Single factory: Only `resolving` and `factory` is defined.\n * - `providers` factory: `componentProviders` is a number and `index = -1`.\n * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.\n */\nclass NodeInjectorFactory {\n  factory;\n  /**\n   * The inject implementation to be activated when using the factory.\n   */\n  injectImpl;\n  /**\n   * Marker set to true during factory invocation to see if we get into recursive loop.\n   * Recursive loop causes an error to be displayed.\n   */\n  resolving = false;\n  /**\n   * Marks that the token can see other Tokens declared in `viewProviders` on the same node.\n   */\n  canSeeViewProviders;\n  /**\n   * An array of factories to use in case of `multi` provider.\n   */\n  multi;\n  /**\n   * Number of `multi`-providers which belong to the component.\n   *\n   * This is needed because when multiple components and directives declare the `multi` provider\n   * they have to be concatenated in the correct order.\n   *\n   * Example:\n   *\n   * If we have a component and directive active an a single element as declared here\n   * ```\n   * component:\n   *   providers: [ {provide: String, useValue: 'component', multi: true} ],\n   *   viewProviders: [ {provide: String, useValue: 'componentView', multi: true} ],\n   *\n   * directive:\n   *   providers: [ {provide: String, useValue: 'directive', multi: true} ],\n   * ```\n   *\n   * Then the expected results are:\n   *\n   * ```\n   * providers: ['component', 'directive']\n   * viewProviders: ['component', 'componentView', 'directive']\n   * ```\n   *\n   * The way to think about it is that the `viewProviders` have been inserted after the component\n   * but before the directives, which is why we need to know how many `multi`s have been declared by\n   * the component.\n   */\n  componentProviders;\n  /**\n   * Current index of the Factory in the `data`. Needed for `viewProviders` and `providers` merging.\n   * See `providerFactory`.\n   */\n  index;\n  /**\n   * Because the same `multi` provider can be declared in `providers` and `viewProviders` it is\n   * possible for `viewProviders` to shadow the `providers`. For this reason we store the\n   * `provideFactory` of the `providers` so that `providers` can be extended with `viewProviders`.\n   *\n   * Example:\n   *\n   * Given:\n   * ```\n   * providers: [ {provide: String, useValue: 'all', multi: true} ],\n   * viewProviders: [ {provide: String, useValue: 'viewOnly', multi: true} ],\n   * ```\n   *\n   * We have to return `['all']` in case of content injection, but `['all', 'viewOnly']` in case\n   * of view injection. We further have to make sure that the shared instances (in our case\n   * `all`) are the exact same instance in both the content as well as the view injection. (We\n   * have to make sure that we don't double instantiate.) For this reason the `viewProviders`\n   * `Factory` has a pointer to the shadowed `providers` factory so that it can instantiate the\n   * `providers` (`['all']`) and then extend it with `viewProviders` (`['all'] + ['viewOnly'] =\n   * ['all', 'viewOnly']`).\n   */\n  providerFactory;\n  constructor(\n  /**\n   * Factory to invoke in order to create a new instance.\n   */\n  factory,\n  /**\n   * Set to `true` if the token is declared in `viewProviders` (or if it is component).\n   */\n  isViewProvider, injectImplementation) {\n    this.factory = factory;\n    ngDevMode && assertDefined(factory, 'Factory not specified');\n    ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n    this.canSeeViewProviders = isViewProvider;\n    this.injectImpl = injectImplementation;\n  }\n}\nfunction isFactory(obj) {\n  return obj instanceof NodeInjectorFactory;\n}\n\n/**\n * Converts `TNodeType` into human readable text.\n * Make sure this matches with `TNodeType`\n */\nfunction toTNodeTypeAsString(tNodeType) {\n  let text = '';\n  tNodeType & 1 /* TNodeType.Text */ && (text += '|Text');\n  tNodeType & 2 /* TNodeType.Element */ && (text += '|Element');\n  tNodeType & 4 /* TNodeType.Container */ && (text += '|Container');\n  tNodeType & 8 /* TNodeType.ElementContainer */ && (text += '|ElementContainer');\n  tNodeType & 16 /* TNodeType.Projection */ && (text += '|Projection');\n  tNodeType & 32 /* TNodeType.Icu */ && (text += '|IcuContainer');\n  tNodeType & 64 /* TNodeType.Placeholder */ && (text += '|Placeholder');\n  tNodeType & 128 /* TNodeType.LetDeclaration */ && (text += '|LetDeclaration');\n  return text.length > 0 ? text.substring(1) : text;\n}\n/**\n * Helper function to detect if a given value matches a `TNode` shape.\n *\n * The logic uses the `insertBeforeIndex` and its possible values as\n * a way to differentiate a TNode shape from other types of objects\n * within the `TView.data`. This is not a perfect check, but it can\n * be a reasonable differentiator, since we control the shapes of objects\n * within `TView.data`.\n */\nfunction isTNodeShape(value) {\n  return value != null && typeof value === 'object' && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === 'number' || Array.isArray(value.insertBeforeIndex));\n}\nfunction isLetDeclaration(tNode) {\n  return !!(tNode.type & 128 /* TNodeType.LetDeclaration */);\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.\n *\n * ```html\n * <div my-dir [class]=\"exp\"></div>\n * ```\n * and\n * ```ts\n * @Directive({\n * })\n * class MyDirective {\n *   @Input()\n *   class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasClassInput(tNode) {\n  return (tNode.flags & 8 /* TNodeFlags.hasClassInput */) !== 0;\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.\n *\n * ```html\n * <div my-dir [style]=\"exp\"></div>\n * ```\n * and\n * ```ts\n * @Directive({\n * })\n * class MyDirective {\n *   @Input()\n *   class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasStyleInput(tNode) {\n  return (tNode.flags & 16 /* TNodeFlags.hasStyleInput */) !== 0;\n}\nfunction assertTNodeType(tNode, expectedTypes, message) {\n  assertDefined(tNode, 'should be called with a TNode');\n  if ((tNode.type & expectedTypes) === 0) {\n    throwError(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n  }\n}\nfunction assertPureTNodeType(type) {\n  if (!(type === 2 /* TNodeType.Element */ || type === 1 /* TNodeType.Text */ || type === 4 /* TNodeType.Container */ || type === 8 /* TNodeType.ElementContainer */ || type === 32 /* TNodeType.Icu */ || type === 16 /* TNodeType.Projection */ || type === 64 /* TNodeType.Placeholder */ || type === 128 /* TNodeType.LetDeclaration */)) {\n    throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n  }\n}\n\n/**\n * Assigns all attribute values to the provided element via the inferred renderer.\n *\n * This function accepts two forms of attribute entries:\n *\n * default: (key, value):\n *  attrs = [key1, value1, key2, value2]\n *\n * namespaced: (NAMESPACE_MARKER, uri, name, value)\n *  attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]\n *\n * The `attrs` array can contain a mix of both the default and namespaced entries.\n * The \"default\" values are set without a marker, but if the function comes across\n * a marker value then it will attempt to set a namespaced value. If the marker is\n * not of a namespaced value then the function will quit and return the index value\n * where it stopped during the iteration of the attrs array.\n *\n * See [AttributeMarker] to understand what the namespace marker value is.\n *\n * Note that this instruction does not support assigning style and class values to\n * an element. See `elementStart` and `elementHostAttrs` to learn how styling values\n * are applied to an element.\n * @param renderer The renderer to be used\n * @param native The element that the attributes will be assigned to\n * @param attrs The attribute array of values that will be assigned to the element\n * @returns the index value that was last accessed in the attributes array\n */\nfunction setUpAttributes(renderer, native, attrs) {\n  let i = 0;\n  while (i < attrs.length) {\n    const value = attrs[i];\n    if (typeof value === 'number') {\n      // only namespaces are supported. Other value types (such as style/class\n      // entries) are not supported in this function.\n      if (value !== 0 /* AttributeMarker.NamespaceURI */) {\n        break;\n      }\n      // we just landed on the marker value ... therefore\n      // we should skip to the next entry\n      i++;\n      const namespaceURI = attrs[i++];\n      const attrName = attrs[i++];\n      const attrVal = attrs[i++];\n      ngDevMode && ngDevMode.rendererSetAttribute++;\n      renderer.setAttribute(native, attrName, attrVal, namespaceURI);\n    } else {\n      // attrName is string;\n      const attrName = value;\n      const attrVal = attrs[++i];\n      // Standard attributes\n      ngDevMode && ngDevMode.rendererSetAttribute++;\n      if (isAnimationProp(attrName)) {\n        renderer.setProperty(native, attrName, attrVal);\n      } else {\n        renderer.setAttribute(native, attrName, attrVal);\n      }\n      i++;\n    }\n  }\n  // another piece of code may iterate over the same attributes array. Therefore\n  // it may be helpful to return the exact spot where the attributes array exited\n  // whether by running into an unsupported marker or if all the static values were\n  // iterated over.\n  return i;\n}\n/**\n * Test whether the given value is a marker that indicates that the following\n * attribute values in a `TAttributes` array are only the names of attributes,\n * and not name-value pairs.\n * @param marker The attribute marker to test.\n * @returns true if the marker is a \"name-only\" marker (e.g. `Bindings`, `Template` or `I18n`).\n */\nfunction isNameOnlyAttributeMarker(marker) {\n  return marker === 3 /* AttributeMarker.Bindings */ || marker === 4 /* AttributeMarker.Template */ || marker === 6 /* AttributeMarker.I18n */;\n}\nfunction isAnimationProp(name) {\n  // Perf note: accessing charCodeAt to check for the first character of a string is faster as\n  // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that\n  // charCodeAt doesn't allocate memory to return a substring.\n  return name.charCodeAt(0) === 64 /* CharCode.AT_SIGN */;\n}\n/**\n * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.\n *\n * This merge function keeps the order of attrs same.\n *\n * @param dst Location of where the merged `TAttributes` should end up.\n * @param src `TAttributes` which should be appended to `dst`\n */\nfunction mergeHostAttrs(dst, src) {\n  if (src === null || src.length === 0) {\n    // do nothing\n  } else if (dst === null || dst.length === 0) {\n    // We have source, but dst is empty, just make a copy.\n    dst = src.slice();\n  } else {\n    let srcMarker = -1 /* AttributeMarker.ImplicitAttributes */;\n    for (let i = 0; i < src.length; i++) {\n      const item = src[i];\n      if (typeof item === 'number') {\n        srcMarker = item;\n      } else {\n        if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) {\n          // Case where we need to consume `key1`, `key2`, `value` items.\n        } else if (srcMarker === -1 /* AttributeMarker.ImplicitAttributes */ || srcMarker === 2 /* AttributeMarker.Styles */) {\n          // Case where we have to consume `key1` and `value` only.\n          mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n        } else {\n          // Case where we have to consume `key1` only.\n          mergeHostAttribute(dst, srcMarker, item, null, null);\n        }\n      }\n    }\n  }\n  return dst;\n}\n/**\n * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.\n *\n * @param dst `TAttributes` to append to.\n * @param marker Region where the `key`/`value` should be added.\n * @param key1 Key to add to `TAttributes`\n * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)\n * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.\n */\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n  let i = 0;\n  // Assume that new markers will be inserted at the end.\n  let markerInsertPosition = dst.length;\n  // scan until correct type.\n  if (marker === -1 /* AttributeMarker.ImplicitAttributes */) {\n    markerInsertPosition = -1;\n  } else {\n    while (i < dst.length) {\n      const dstValue = dst[i++];\n      if (typeof dstValue === 'number') {\n        if (dstValue === marker) {\n          markerInsertPosition = -1;\n          break;\n        } else if (dstValue > marker) {\n          // We need to save this as we want the markers to be inserted in specific order.\n          markerInsertPosition = i - 1;\n          break;\n        }\n      }\n    }\n  }\n  // search until you find place of insertion\n  while (i < dst.length) {\n    const item = dst[i];\n    if (typeof item === 'number') {\n      // since `i` started as the index after the marker, we did not find it if we are at the next\n      // marker\n      break;\n    } else if (item === key1) {\n      // We already have same token\n      if (key2 === null) {\n        if (value !== null) {\n          dst[i + 1] = value;\n        }\n        return;\n      } else if (key2 === dst[i + 1]) {\n        dst[i + 2] = value;\n        return;\n      }\n    }\n    // Increment counter.\n    i++;\n    if (key2 !== null) i++;\n    if (value !== null) i++;\n  }\n  // insert at location.\n  if (markerInsertPosition !== -1) {\n    dst.splice(markerInsertPosition, 0, marker);\n    i = markerInsertPosition + 1;\n  }\n  dst.splice(i++, 0, key1);\n  if (key2 !== null) {\n    dst.splice(i++, 0, key2);\n  }\n  if (value !== null) {\n    dst.splice(i++, 0, value);\n  }\n}\n\n// This default value is when checking the hierarchy for a token.\n//\n// It means both:\n// - the token is not provided by the current injector,\n// - only the element injectors should be checked (ie do not check module injectors\n//\n//          mod1\n//         /\n//       el1   mod2\n//         \\  /\n//         el2\n//\n// When requesting el2.injector.get(token), we should check in the following order and return the\n// first found value:\n// - el2.injector.get(token, default)\n// - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module\n// - mod2.injector.get(token, default)\nconst NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};\n\n/**\n * Injector that looks up a value using a specific injector, before falling back to the module\n * injector. Used primarily when creating components or embedded views dynamically.\n */\nclass ChainedInjector {\n  injector;\n  parentInjector;\n  constructor(injector, parentInjector) {\n    this.injector = injector;\n    this.parentInjector = parentInjector;\n  }\n  get(token, notFoundValue, flags) {\n    flags = convertToBitFlags(flags);\n    const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);\n    if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {\n      // Return the value from the root element injector when\n      // - it provides it\n      //   (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)\n      // - the module injector should not be checked\n      //   (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)\n      return value;\n    }\n    return this.parentInjector.get(token, notFoundValue, flags);\n  }\n}\n\n/// Parent Injector Utils ///////////////////////////////////////////////////////////////\nfunction hasParentInjector(parentLocation) {\n  return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n  if (ngDevMode) {\n    assertNumber(parentLocation, 'Number expected');\n    assertNotEqual(parentLocation, -1, 'Not a valid state.');\n    const parentInjectorIndex = parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;\n    assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n  }\n  return parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n  return parentLocation >> 16 /* RelativeInjectorLocationFlags.ViewOffsetShift */;\n}\n/**\n * Unwraps a parent injector location number to find the view offset from the current injector,\n * then walks up the declaration view tree until the view is found that contains the parent\n * injector.\n *\n * @param location The location of the parent injector, which contains the view offset\n * @param startView The LView instance from which to start walking up the view tree\n * @returns The LView instance that contains the parent injector\n */\nfunction getParentInjectorView(location, startView) {\n  let viewOffset = getParentInjectorViewOffset(location);\n  let parentView = startView;\n  // For most cases, the parent injector can be found on the host node (e.g. for component\n  // or container), but we must keep the loop here to support the rarer case of deeply nested\n  // <ng-template> tags or inline views, where the parent injector might live many views\n  // above the child injector.\n  while (viewOffset > 0) {\n    parentView = parentView[DECLARATION_VIEW];\n    viewOffset--;\n  }\n  return parentView;\n}\n/**\n * Detects whether an injector is an instance of a `ChainedInjector`,\n * created based on the `OutletInjector`.\n */\nfunction isRouterOutletInjector(currentInjector) {\n  return currentInjector instanceof ChainedInjector && typeof currentInjector.injector.__ngOutletInjector === 'function';\n}\n\n/**\n * Defines if the call to `inject` should include `viewProviders` in its resolution.\n *\n * This is set to true when we try to instantiate a component. This value is reset in\n * `getNodeInjectable` to a value which matches the declaration location of the token about to be\n * instantiated. This is done so that if we are injecting a token which was declared outside of\n * `viewProviders` we don't accidentally pull `viewProviders` in.\n *\n * Example:\n *\n * ```ts\n * @Injectable()\n * class MyService {\n *   constructor(public value: String) {}\n * }\n *\n * @Component({\n *   providers: [\n *     MyService,\n *     {provide: String, value: 'providers' }\n *   ]\n *   viewProviders: [\n *     {provide: String, value: 'viewProviders'}\n *   ]\n * })\n * class MyComponent {\n *   constructor(myService: MyService, value: String) {\n *     // We expect that Component can see into `viewProviders`.\n *     expect(value).toEqual('viewProviders');\n *     // `MyService` was not declared in `viewProviders` hence it can't see it.\n *     expect(myService.value).toEqual('providers');\n *   }\n * }\n *\n * ```\n */\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n  const oldValue = includeViewProviders;\n  includeViewProviders = v;\n  return oldValue;\n}\n/**\n * The number of slots in each bloom filter (used by DI). The larger this number, the fewer\n * directives that will share slots, and thus, the fewer false positives when checking for\n * the existence of a directive.\n */\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\n/**\n * The number of bits that is represented by a single bloom bucket. JS bit operations are 32 bits,\n * so each bucket represents 32 distinct tokens which accounts for log2(32) = 5 bits of a bloom hash\n * number.\n */\nconst BLOOM_BUCKET_BITS = 5;\n/** Counter used to generate unique IDs for directives. */\nlet nextNgElementId = 0;\n/** Value used when something wasn't found by an injector. */\nconst NOT_FOUND = {};\n/**\n * Registers this directive as present in its node's injector by flipping the directive's\n * corresponding bit in the injector's bloom filter.\n *\n * @param injectorIndex The index of the node injector where this token should be registered\n * @param tView The TView for the injector's bloom filters\n * @param type The directive token to register\n */\nfunction bloomAdd(injectorIndex, tView, type) {\n  ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n  let id;\n  if (typeof type === 'string') {\n    id = type.charCodeAt(0) || 0;\n  } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n    id = type[NG_ELEMENT_ID];\n  }\n  // Set a unique ID on the directive type, so if something tries to inject the directive,\n  // we can easily retrieve the ID and hash it into the bloom bit that should be checked.\n  if (id == null) {\n    id = type[NG_ELEMENT_ID] = nextNgElementId++;\n  }\n  // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),\n  // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.\n  const bloomHash = id & BLOOM_MASK;\n  // Create a mask that targets the specific bit associated with the directive.\n  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n  // to bit positions 0 - 31 in a 32 bit integer.\n  const mask = 1 << bloomHash;\n  // Each bloom bucket in `tData` represents `BLOOM_BUCKET_BITS` number of bits of `bloomHash`.\n  // Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset that the mask\n  // should be written to.\n  tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;\n}\n/**\n * Creates (or gets an existing) injector for a given element or container.\n *\n * @param tNode for which an injector should be retrieved / created.\n * @param lView View where the node is stored\n * @returns Node injector\n */\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n  const existingInjectorIndex = getInjectorIndex(tNode, lView);\n  if (existingInjectorIndex !== -1) {\n    return existingInjectorIndex;\n  }\n  const tView = lView[TVIEW];\n  if (tView.firstCreatePass) {\n    tNode.injectorIndex = lView.length;\n    insertBloom(tView.data, tNode); // foundation for node bloom\n    insertBloom(lView, null); // foundation for cumulative bloom\n    insertBloom(tView.blueprint, null);\n  }\n  const parentLoc = getParentInjectorLocation(tNode, lView);\n  const injectorIndex = tNode.injectorIndex;\n  // If a parent injector can't be found, its location is set to -1.\n  // In that case, we don't need to set up a cumulative bloom\n  if (hasParentInjector(parentLoc)) {\n    const parentIndex = getParentInjectorIndex(parentLoc);\n    const parentLView = getParentInjectorView(parentLoc, lView);\n    const parentData = parentLView[TVIEW].data;\n    // Creates a cumulative bloom filter that merges the parent's bloom filter\n    // and its own cumulative bloom (which contains tokens for all ancestors)\n    for (let i = 0; i < 8 /* NodeInjectorOffset.BLOOM_SIZE */; i++) {\n      lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n    }\n  }\n  lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */] = parentLoc;\n  return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n  arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n  if (tNode.injectorIndex === -1 ||\n  // If the injector index is the same as its parent's injector index, then the index has been\n  // copied down from the parent node. No injector has been created yet on this node.\n  tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex ||\n  // After the first template pass, the injector index might exist but the parent values\n  // might not have been calculated yet for this instance\n  lView[tNode.injectorIndex + 8 /* NodeInjectorOffset.PARENT */] === null) {\n    return -1;\n  } else {\n    ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n    return tNode.injectorIndex;\n  }\n}\n/**\n * Finds the index of the parent injector, with a view offset if applicable. Used to set the\n * parent injector initially.\n *\n * @returns Returns a number that is the combination of the number of LViews that we have to go up\n * to find the LView containing the parent inject AND the index of the injector within that LView.\n */\nfunction getParentInjectorLocation(tNode, lView) {\n  if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n    // If we have a parent `TNode` and there is an injector associated with it we are done, because\n    // the parent injector is within the current `LView`.\n    return tNode.parent.injectorIndex; // ViewOffset is 0\n  }\n  // When parent injector location is computed it may be outside of the current view. (ie it could\n  // be pointing to a declared parent location). This variable stores number of declaration parents\n  // we need to walk up in order to find the parent injector location.\n  let declarationViewOffset = 0;\n  let parentTNode = null;\n  let lViewCursor = lView;\n  // The parent injector is not in the current `LView`. We will have to walk the declared parent\n  // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent\n  // `NodeInjector`.\n  while (lViewCursor !== null) {\n    parentTNode = getTNodeFromLView(lViewCursor);\n    if (parentTNode === null) {\n      // If we have no parent, than we are done.\n      return NO_PARENT_INJECTOR;\n    }\n    ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n    // Every iteration of the loop requires that we go to the declared parent.\n    declarationViewOffset++;\n    lViewCursor = lViewCursor[DECLARATION_VIEW];\n    if (parentTNode.injectorIndex !== -1) {\n      // We found a NodeInjector which points to something.\n      return parentTNode.injectorIndex | declarationViewOffset << 16 /* RelativeInjectorLocationFlags.ViewOffsetShift */;\n    }\n  }\n  return NO_PARENT_INJECTOR;\n}\n/**\n * Makes a type or an injection token public to the DI system by adding it to an\n * injector's bloom filter.\n *\n * @param di The node injector in which a directive will be added\n * @param token The type or the injection token to be made public\n */\nfunction diPublicInInjector(injectorIndex, tView, token) {\n  bloomAdd(injectorIndex, tView, token);\n}\n/**\n * Inject static attribute value into directive constructor.\n *\n * This method is used with `factory` functions which are generated as part of\n * `defineDirective` or `defineComponent`. The method retrieves the static value\n * of an attribute. (Dynamic attributes are not supported since they are not resolved\n *  at the time of injection and can change over time.)\n *\n * # Example\n * Given:\n * ```ts\n * @Component(...)\n * class MyComponent {\n *   constructor(@Attribute('title') title: string) { ... }\n * }\n * ```\n * When instantiated with\n * ```html\n * <my-component title=\"Hello\"></my-component>\n * ```\n *\n * Then factory method generated is:\n * ```ts\n * MyComponent.ɵcmp = defineComponent({\n *   factory: () => new MyComponent(injectAttribute('title'))\n *   ...\n * })\n * ```\n *\n * @publicApi\n */\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n  ngDevMode && assertTNodeType(tNode, 12 /* TNodeType.AnyContainer */ | 3 /* TNodeType.AnyRNode */);\n  ngDevMode && assertDefined(tNode, 'expecting tNode');\n  if (attrNameToInject === 'class') {\n    return tNode.classes;\n  }\n  if (attrNameToInject === 'style') {\n    return tNode.styles;\n  }\n  const attrs = tNode.attrs;\n  if (attrs) {\n    const attrsLength = attrs.length;\n    let i = 0;\n    while (i < attrsLength) {\n      const value = attrs[i];\n      // If we hit a `Bindings` or `Template` marker then we are done.\n      if (isNameOnlyAttributeMarker(value)) break;\n      // Skip namespaced attributes\n      if (value === 0 /* AttributeMarker.NamespaceURI */) {\n        // we skip the next two values\n        // as namespaced attributes looks like\n        // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',\n        // 'existValue', ...]\n        i = i + 2;\n      } else if (typeof value === 'number') {\n        // Skip to the first value of the marked attribute.\n        i++;\n        while (i < attrsLength && typeof attrs[i] === 'string') {\n          i++;\n        }\n      } else if (value === attrNameToInject) {\n        return attrs[i + 1];\n      } else {\n        i = i + 2;\n      }\n    }\n  }\n  return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n  if (flags & InjectFlags.Optional || notFoundValue !== undefined) {\n    return notFoundValue;\n  } else {\n    throwProviderNotFoundError(token, 'NodeInjector');\n  }\n}\n/**\n * Returns the value associated to the given token from the ModuleInjector or throws exception\n *\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector or throws an exception\n */\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n  if (flags & InjectFlags.Optional && notFoundValue === undefined) {\n    // This must be set or the NullInjector will throw for optional deps\n    notFoundValue = null;\n  }\n  if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {\n    const moduleInjector = lView[INJECTOR];\n    // switch to `injectInjectorOnly` implementation for module injector, since module injector\n    // should not have access to Component/Directive DI scope (that may happen through\n    // `directiveInject` implementation)\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    try {\n      if (moduleInjector) {\n        return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);\n      } else {\n        return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);\n      }\n    } finally {\n      setInjectImplementation(previousInjectImplementation);\n    }\n  }\n  return notFoundValueOrThrow(notFoundValue, token, flags);\n}\n/**\n * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.\n *\n * Look for the injector providing the token by walking up the node injector tree and then\n * the module injector tree.\n *\n * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom\n * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {\n  if (tNode !== null) {\n    // If the view or any of its ancestors have an embedded\n    // view injector, we have to look it up there first.\n    if (lView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ &&\n    // The token must be present on the current node injector when the `Self`\n    // flag is set, so the lookup on embedded view injector(s) can be skipped.\n    !(flags & InjectFlags.Self)) {\n      const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);\n      if (embeddedInjectorValue !== NOT_FOUND) {\n        return embeddedInjectorValue;\n      }\n    }\n    // Otherwise try the node injector.\n    const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);\n    if (value !== NOT_FOUND) {\n      return value;\n    }\n  }\n  // Finally, fall back to the module injector.\n  return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\n/**\n * Returns the value associated to the given token from the node injector.\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {\n  const bloomHash = bloomHashBitOrFactory(token);\n  // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef\n  // so just call the factory function to create it.\n  if (typeof bloomHash === 'function') {\n    if (!enterDI(lView, tNode, flags)) {\n      // Failed to enter DI, try module injector instead. If a token is injected with the @Host\n      // flag, the module injector is not searched for that token in Ivy.\n      return flags & InjectFlags.Host ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n    }\n    try {\n      let value;\n      if (ngDevMode) {\n        runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {\n          value = bloomHash(flags);\n          if (value != null) {\n            emitInstanceCreatedByInjectorEvent(value);\n          }\n        });\n      } else {\n        value = bloomHash(flags);\n      }\n      if (value == null && !(flags & InjectFlags.Optional)) {\n        throwProviderNotFoundError(token);\n      } else {\n        return value;\n      }\n    } finally {\n      leaveDI();\n    }\n  } else if (typeof bloomHash === 'number') {\n    // A reference to the previous injector TView that was found while climbing the element\n    // injector tree. This is used to know if viewProviders can be accessed on the current\n    // injector.\n    let previousTView = null;\n    let injectorIndex = getInjectorIndex(tNode, lView);\n    let parentLocation = NO_PARENT_INJECTOR;\n    let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n    // If we should skip this injector, or if there is no injector on this node, start by\n    // searching the parent injector.\n    if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {\n      parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */];\n      if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n        injectorIndex = -1;\n      } else {\n        previousTView = lView[TVIEW];\n        injectorIndex = getParentInjectorIndex(parentLocation);\n        lView = getParentInjectorView(parentLocation, lView);\n      }\n    }\n    // Traverse up the injector tree until we find a potential match or until we know there\n    // *isn't* a match.\n    while (injectorIndex !== -1) {\n      ngDevMode && assertNodeInjector(lView, injectorIndex);\n      // Check the current injector. If it matches, see if it contains token.\n      const tView = lView[TVIEW];\n      ngDevMode && assertTNodeForLView(tView.data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */], lView);\n      if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n        // At this point, we have an injector which *may* contain the token, so we step through\n        // the providers and directives associated with the injector's corresponding node to get\n        // the instance.\n        const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n        if (instance !== NOT_FOUND) {\n          return instance;\n        }\n      }\n      parentLocation = lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */];\n      if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {\n        // The def wasn't found anywhere on this node, so it was a false positive.\n        // Traverse up the tree and continue searching.\n        previousTView = tView;\n        injectorIndex = getParentInjectorIndex(parentLocation);\n        lView = getParentInjectorView(parentLocation, lView);\n      } else {\n        // If we should not search parent OR If the ancestor bloom filter value does not have the\n        // bit corresponding to the directive we can give up on traversing up to find the specific\n        // injector.\n        injectorIndex = -1;\n      }\n    }\n  }\n  return notFoundValue;\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n  const currentTView = lView[TVIEW];\n  const tNode = currentTView.data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n  // First, we need to determine if view providers can be accessed by the starting element.\n  // There are two possibilities\n  const canAccessViewProviders = previousTView == null ?\n  // 1) This is the first invocation `previousTView == null` which means that we are at the\n  // `TNode` of where injector is starting to look. In such a case the only time we are allowed\n  // to look into the ViewProviders is if:\n  // - we are on a component\n  // - AND the injector set `includeViewProviders` to true (implying that the token can see\n  // ViewProviders because it is the Component or a Service which itself was declared in\n  // ViewProviders)\n  isComponentHost(tNode) && includeViewProviders :\n  // 2) `previousTView != null` which means that we are now walking across the parent nodes.\n  // In such a case we are only allowed to look into the ViewProviders if:\n  // - We just crossed from child View to Parent View `previousTView != currentTView`\n  // - AND the parent TNode is an Element.\n  // This means that we just came from the Component's View and therefore are allowed to see\n  // into the ViewProviders.\n  previousTView != currentTView && (tNode.type & 3 /* TNodeType.AnyRNode */) !== 0;\n  // This special case happens when there is a @host on the inject and when we are searching\n  // on the host element node.\n  const isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;\n  const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n  if (injectableIdx !== null) {\n    return getNodeInjectable(lView, currentTView, injectableIdx, tNode);\n  } else {\n    return NOT_FOUND;\n  }\n}\n/**\n * Searches for the given token among the node's directives and providers.\n *\n * @param tNode TNode on which directives are present.\n * @param tView The tView we are currently processing\n * @param token Provider token or type of a directive to look for.\n * @param canAccessViewProviders Whether view providers should be considered.\n * @param isHostSpecialCase Whether the host special case applies.\n * @returns Index of a found directive or provider, or null when none found.\n */\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n  const nodeProviderIndexes = tNode.providerIndexes;\n  const tInjectables = tView.data;\n  const injectablesStart = nodeProviderIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n  const directivesStart = tNode.directiveStart;\n  const directiveEnd = tNode.directiveEnd;\n  const cptViewProvidersCount = nodeProviderIndexes >> 20 /* TNodeProviderIndexes.CptViewProvidersCountShift */;\n  const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n  // When the host special case applies, only the viewProviders and the component are visible\n  const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n  for (let i = startingIndex; i < endIndex; i++) {\n    const providerTokenOrDef = tInjectables[i];\n    if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {\n      return i;\n    }\n  }\n  if (isHostSpecialCase) {\n    const dirDef = tInjectables[directivesStart];\n    if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n      return directivesStart;\n    }\n  }\n  return null;\n}\n/**\n * Retrieve or instantiate the injectable from the `LView` at particular `index`.\n *\n * This function checks to see if the value has already been instantiated and if so returns the\n * cached `injectable`. Otherwise if it detects that the value is still a factory it\n * instantiates the `injectable` and caches the value.\n */\nfunction getNodeInjectable(lView, tView, index, tNode) {\n  let value = lView[index];\n  const tData = tView.data;\n  if (isFactory(value)) {\n    const factory = value;\n    if (factory.resolving) {\n      throwCyclicDependencyError(stringifyForError(tData[index]));\n    }\n    const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n    factory.resolving = true;\n    let prevInjectContext;\n    if (ngDevMode) {\n      // tData indexes mirror the concrete instances in its corresponding LView.\n      // lView[index] here is either the injectable instace itself or a factory,\n      // therefore tData[index] is the constructor of that injectable or a\n      // definition object that contains the constructor in a `.type` field.\n      const token = tData[index].type || tData[index];\n      const injector = new NodeInjector(tNode, lView);\n      prevInjectContext = setInjectorProfilerContext({\n        injector,\n        token\n      });\n    }\n    const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n    const success = enterDI(lView, tNode, InjectFlags.Default);\n    ngDevMode && assertEqual(success, true, \"Because flags do not contain `SkipSelf' we expect this to always succeed.\");\n    try {\n      value = lView[index] = factory.factory(undefined, tData, lView, tNode);\n      ngDevMode && emitInstanceCreatedByInjectorEvent(value);\n      // This code path is hit for both directives and providers.\n      // For perf reasons, we want to avoid searching for hooks on providers.\n      // It does no harm to try (the hooks just won't exist), but the extra\n      // checks are unnecessary and this is a hot path. So we check to see\n      // if the index of the dependency is in the directive range for this\n      // tNode. If it's not, we know it's a provider and skip hook registration.\n      if (tView.firstCreatePass && index >= tNode.directiveStart) {\n        ngDevMode && assertDirectiveDef(tData[index]);\n        registerPreOrderHooks(index, tData[index], tView);\n      }\n    } finally {\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n      previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);\n      setIncludeViewProviders(previousIncludeViewProviders);\n      factory.resolving = false;\n      leaveDI();\n    }\n  }\n  return value;\n}\n/**\n * Returns the bit in an injector's bloom filter that should be used to determine whether or not\n * the directive might be provided by the injector.\n *\n * When a directive is public, it is added to the bloom filter and given a unique ID that can be\n * retrieved on the Type. When the directive isn't public or the token is not a directive `null`\n * is returned as the node injector can not possibly provide that token.\n *\n * @param token the injection token\n * @returns the matching bit to check in the bloom filter or `null` if the token is not known.\n *   When the returned value is negative then it represents special values such as `Injector`.\n */\nfunction bloomHashBitOrFactory(token) {\n  ngDevMode && assertDefined(token, 'token must be defined');\n  if (typeof token === 'string') {\n    return token.charCodeAt(0) || 0;\n  }\n  const tokenId =\n  // First check with `hasOwnProperty` so we don't get an inherited ID.\n  token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n  // Negative token IDs are used for special objects such as `Injector`\n  if (typeof tokenId === 'number') {\n    if (tokenId >= 0) {\n      return tokenId & BLOOM_MASK;\n    } else {\n      ngDevMode && assertEqual(tokenId, -1 /* InjectorMarkers.Injector */, 'Expecting to get Special Injector Id');\n      return createNodeInjector;\n    }\n  } else {\n    return tokenId;\n  }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n  // Create a mask that targets the specific bit associated with the directive we're looking for.\n  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n  // to bit positions 0 - 31 in a 32 bit integer.\n  const mask = 1 << bloomHash;\n  // Each bloom bucket in `injectorView` represents `BLOOM_BUCKET_BITS` number of bits of\n  // `bloomHash`. Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset\n  // that should be used.\n  const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];\n  // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,\n  // this injector is a potential match.\n  return !!(value & mask);\n}\n/** Returns true if flags prevent parent injector from being searched for tokens */\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n  return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);\n}\nfunction getNodeInjectorLView(nodeInjector) {\n  return nodeInjector._lView;\n}\nfunction getNodeInjectorTNode(nodeInjector) {\n  return nodeInjector._tNode;\n}\nclass NodeInjector {\n  _tNode;\n  _lView;\n  constructor(_tNode, _lView) {\n    this._tNode = _tNode;\n    this._lView = _lView;\n  }\n  get(token, notFoundValue, flags) {\n    return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);\n  }\n}\n/** Creates a `NodeInjector` for the current node. */\nfunction createNodeInjector() {\n  return new NodeInjector(getCurrentTNode(), getLView());\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵgetInheritedFactory(type) {\n  return noSideEffects(() => {\n    const ownConstructor = type.prototype.constructor;\n    const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);\n    const objectPrototype = Object.prototype;\n    let parent = Object.getPrototypeOf(type.prototype).constructor;\n    // Go up the prototype until we hit `Object`.\n    while (parent && parent !== objectPrototype) {\n      const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);\n      // If we hit something that has a factory and the factory isn't the same as the type,\n      // we've found the inherited factory. Note the check that the factory isn't the type's\n      // own factory is redundant in most cases, but if the user has custom decorators on the\n      // class, this lookup will start one level down in the prototype chain, causing us to\n      // find the own factory first and potentially triggering an infinite loop downstream.\n      if (factory && factory !== ownFactory) {\n        return factory;\n      }\n      parent = Object.getPrototypeOf(parent);\n    }\n    // There is no factory defined. Either this was improper usage of inheritance\n    // (no Angular decorator on the superclass) or there is no constructor at all\n    // in the inheritance chain. Since the two cases cannot be distinguished, the\n    // latter has to be assumed.\n    return t => new t();\n  });\n}\nfunction getFactoryOf(type) {\n  if (isForwardRef(type)) {\n    return () => {\n      const factory = getFactoryOf(resolveForwardRef(type));\n      return factory && factory();\n    };\n  }\n  return getFactoryDef(type);\n}\n/**\n * Returns a value from the closest embedded or node injector.\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {\n  let currentTNode = tNode;\n  let currentLView = lView;\n  // When an LView with an embedded view injector is inserted, it'll likely be interlaced with\n  // nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).\n  // Since the bloom filters for the node injectors have already been constructed and we don't\n  // have a way of extracting the records from an injector, the only way to maintain the correct\n  // hierarchy when resolving the value is to walk it node-by-node while attempting to resolve\n  // the token at each level.\n  while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ && !(currentLView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {\n    ngDevMode && assertTNodeForLView(currentTNode, currentLView);\n    // Note that this lookup on the node injector is using the `Self` flag, because\n    // we don't want the node injector to look at any parent injectors since we\n    // may hit the embedded view injector first.\n    const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);\n    if (nodeInjectorValue !== NOT_FOUND) {\n      return nodeInjectorValue;\n    }\n    // Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191\n    let parentTNode = currentTNode.parent;\n    // `TNode.parent` includes the parent within the current view only. If it doesn't exist,\n    // it means that we've hit the view boundary and we need to go up to the next view.\n    if (!parentTNode) {\n      // Before we go to the next LView, check if the token exists on the current embedded injector.\n      const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];\n      if (embeddedViewInjector) {\n        const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);\n        if (embeddedViewInjectorValue !== NOT_FOUND) {\n          return embeddedViewInjectorValue;\n        }\n      }\n      // Otherwise keep going up the tree.\n      parentTNode = getTNodeFromLView(currentLView);\n      currentLView = currentLView[DECLARATION_VIEW];\n    }\n    currentTNode = parentTNode;\n  }\n  return notFoundValue;\n}\n/** Gets the TNode associated with an LView inside of the declaration view. */\nfunction getTNodeFromLView(lView) {\n  const tView = lView[TVIEW];\n  const tViewType = tView.type;\n  // The parent pointer differs based on `TView.type`.\n  if (tViewType === 2 /* TViewType.Embedded */) {\n    ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n    return tView.declTNode;\n  } else if (tViewType === 1 /* TViewType.Component */) {\n    // Components don't have `TView.declTNode` because each instance of component could be\n    // inserted in different location, hence `TView.declTNode` is meaningless.\n    return lView[T_HOST];\n  }\n  return null;\n}\n\n/**\n * Facade for the attribute injection from DI.\n *\n * @codeGenApi\n */\nfunction ɵɵinjectAttribute(attrNameToInject) {\n  return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\n\n/**\n * Attribute decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Attribute = makeParamDecorator('Attribute', attributeName => ({\n  attributeName,\n  __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName)\n}));\nlet _reflect = null;\nfunction getReflect() {\n  return _reflect = _reflect || new ReflectionCapabilities();\n}\nfunction reflectDependencies(type) {\n  return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n  return deps.map(dep => reflectDependency(dep));\n}\nfunction reflectDependency(dep) {\n  const meta = {\n    token: null,\n    attribute: null,\n    host: false,\n    optional: false,\n    self: false,\n    skipSelf: false\n  };\n  if (Array.isArray(dep) && dep.length > 0) {\n    for (let j = 0; j < dep.length; j++) {\n      const param = dep[j];\n      if (param === undefined) {\n        // param may be undefined if type of dep is not set by ngtsc\n        continue;\n      }\n      const proto = Object.getPrototypeOf(param);\n      if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n        meta.optional = true;\n      } else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n        meta.skipSelf = true;\n      } else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n        meta.self = true;\n      } else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n        meta.host = true;\n      } else if (param instanceof Inject) {\n        meta.token = param.token;\n      } else if (param instanceof Attribute) {\n        if (param.attributeName === undefined) {\n          throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Attribute name must be defined.`);\n        }\n        meta.attribute = param.attributeName;\n      } else {\n        meta.token = param;\n      }\n    }\n  } else if (dep === undefined || Array.isArray(dep) && dep.length === 0) {\n    meta.token = null;\n  } else {\n    meta.token = dep;\n  }\n  return meta;\n}\n\n/**\n * Compile an Angular injectable according to its `Injectable` metadata, and patch the resulting\n * injectable def (`ɵprov`) onto the injectable type.\n */\nfunction compileInjectable(type, meta) {\n  let ngInjectableDef = null;\n  let ngFactoryDef = null;\n  // if NG_PROV_DEF is already defined on this class then don't overwrite it\n  if (!type.hasOwnProperty(NG_PROV_DEF)) {\n    Object.defineProperty(type, NG_PROV_DEF, {\n      get: () => {\n        if (ngInjectableDef === null) {\n          const compiler = getCompilerFacade({\n            usage: 0 /* JitCompilerUsage.Decorator */,\n            kind: 'injectable',\n            type\n          });\n          ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, meta));\n        }\n        return ngInjectableDef;\n      }\n    });\n  }\n  // if NG_FACTORY_DEF is already defined on this class then don't overwrite it\n  if (!type.hasOwnProperty(NG_FACTORY_DEF)) {\n    Object.defineProperty(type, NG_FACTORY_DEF, {\n      get: () => {\n        if (ngFactoryDef === null) {\n          const compiler = getCompilerFacade({\n            usage: 0 /* JitCompilerUsage.Decorator */,\n            kind: 'injectable',\n            type\n          });\n          ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {\n            name: type.name,\n            type,\n            typeArgumentCount: 0,\n            // In JIT mode types are not available nor used.\n            deps: reflectDependencies(type),\n            target: compiler.FactoryTarget.Injectable\n          });\n        }\n        return ngFactoryDef;\n      },\n      // Leave this configurable so that the factories from directives or pipes can take precedence.\n      configurable: true\n    });\n  }\n}\nconst USE_VALUE = getClosureSafeProperty({\n  provide: String,\n  useValue: getClosureSafeProperty\n});\nfunction isUseClassProvider(meta) {\n  return meta.useClass !== undefined;\n}\nfunction isUseValueProvider(meta) {\n  return USE_VALUE in meta;\n}\nfunction isUseFactoryProvider(meta) {\n  return meta.useFactory !== undefined;\n}\nfunction isUseExistingProvider(meta) {\n  return meta.useExisting !== undefined;\n}\nfunction getInjectableMetadata(type, srcMeta) {\n  // Allow the compilation of a class with a `@Injectable()` decorator without parameters\n  const meta = srcMeta || {\n    providedIn: null\n  };\n  const compilerMeta = {\n    name: type.name,\n    type: type,\n    typeArgumentCount: 0,\n    providedIn: meta.providedIn\n  };\n  if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {\n    compilerMeta.deps = convertDependencies(meta.deps);\n  }\n  // Check to see if the user explicitly provided a `useXxxx` property.\n  if (isUseClassProvider(meta)) {\n    compilerMeta.useClass = meta.useClass;\n  } else if (isUseValueProvider(meta)) {\n    compilerMeta.useValue = meta.useValue;\n  } else if (isUseFactoryProvider(meta)) {\n    compilerMeta.useFactory = meta.useFactory;\n  } else if (isUseExistingProvider(meta)) {\n    compilerMeta.useExisting = meta.useExisting;\n  }\n  return compilerMeta;\n}\n\n/**\n * Injectable decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Injectable = makeDecorator('Injectable', undefined, undefined, undefined, (type, meta) => compileInjectable(type, meta));\n\n/**\n * Create a new `Injector` which is configured using a `defType` of `InjectorType<any>`s.\n */\nfunction createInjector(defType, parent = null, additionalProviders = null, name) {\n  const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);\n  injector.resolveInjectorInitializers();\n  return injector;\n}\n/**\n * Creates a new injector without eagerly resolving its injector types. Can be used in places\n * where resolving the injector types immediately can lead to an infinite loop. The injector types\n * should be resolved at a later point by calling `_resolveInjectorDefTypes`.\n */\nfunction createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = new Set()) {\n  const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];\n  name = name || (typeof defType === 'object' ? undefined : stringify(defType));\n  return new R3Injector(providers, parent || getNullInjector(), name || null, scopes);\n}\n\n/**\n * Concrete injectors implement this interface. Injectors are configured\n * with [providers](guide/di/dependency-injection-providers) that associate\n * dependencies of various types with [injection tokens](guide/di/dependency-injection-providers).\n *\n * @see [DI Providers](guide/di/dependency-injection-providers).\n * @see {@link StaticProvider}\n *\n * @usageNotes\n *\n *  The following example creates a service injector instance.\n *\n * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}\n *\n * ### Usage example\n *\n * {@example core/di/ts/injector_spec.ts region='Injector'}\n *\n * `Injector` returns itself when given `Injector` as a token:\n *\n * {@example core/di/ts/injector_spec.ts region='injectInjector'}\n *\n * @publicApi\n */\nclass Injector {\n  static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;\n  static NULL = new NullInjector();\n  static create(options, parent) {\n    if (Array.isArray(options)) {\n      return createInjector({\n        name: ''\n      }, parent, options, '');\n    } else {\n      const name = options.name ?? '';\n      return createInjector({\n        name\n      }, options.parent, options.providers, name);\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: Injector,\n    providedIn: 'any',\n    factory: () => ɵɵinject(INJECTOR$1)\n  });\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = -1 /* InjectorMarkers.Injector */;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Creates a token that can be used to inject static attributes of the host node.\n *\n * @usageNotes\n * ### Injecting an attribute that is known to exist\n * ```ts\n * @Directive()\n * class MyDir {\n *   attr: string = inject(new HostAttributeToken('some-attr'));\n * }\n * ```\n *\n * ### Optionally injecting an attribute\n * ```ts\n * @Directive()\n * class MyDir {\n *   attr: string | null = inject(new HostAttributeToken('some-attr'), {optional: true});\n * }\n * ```\n * @publicApi\n */\nclass HostAttributeToken {\n  attributeName;\n  constructor(attributeName) {\n    this.attributeName = attributeName;\n  }\n  /** @internal */\n  __NG_ELEMENT_ID__ = () => ɵɵinjectAttribute(this.attributeName);\n  toString() {\n    return `HostAttributeToken ${this.attributeName}`;\n  }\n}\n\n/**\n * A token that can be used to inject the tag name of the host node.\n *\n * @usageNotes\n * ### Injecting a tag name that is known to exist\n * ```ts\n * @Directive()\n * class MyDir {\n *   tagName: string = inject(HOST_TAG_NAME);\n * }\n * ```\n *\n * ### Optionally injecting a tag name\n * ```ts\n * @Directive()\n * class MyDir {\n *   tagName: string | null = inject(HOST_TAG_NAME, {optional: true});\n * }\n * ```\n * @publicApi\n */\nconst HOST_TAG_NAME = new InjectionToken(ngDevMode ? 'HOST_TAG_NAME' : '');\n// HOST_TAG_NAME should be resolved at the current node, similar to e.g. ElementRef,\n// so we manually specify __NG_ELEMENT_ID__ here, instead of using a factory.\n// tslint:disable-next-line:no-toplevel-property-access\nHOST_TAG_NAME.__NG_ELEMENT_ID__ = flags => {\n  const tNode = getCurrentTNode();\n  if (tNode === null) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && 'HOST_TAG_NAME can only be injected in directives and components ' + 'during construction time (in a class constructor or as a class field initializer)');\n  }\n  if (tNode.type & 2 /* TNodeType.Element */) {\n    return tNode.value;\n  }\n  if (flags & InjectFlags.Optional) {\n    return null;\n  }\n  throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. ` + `This is invalid, and so the dependency should be marked as optional.`);\n};\nfunction getDevModeNodeName(tNode) {\n  if (tNode.type & 8 /* TNodeType.ElementContainer */) {\n    return 'an <ng-container>';\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    return 'an <ng-template>';\n  } else if (tNode.type & 128 /* TNodeType.LetDeclaration */) {\n    return 'an @let declaration';\n  } else {\n    return 'a node';\n  }\n}\n\n/**\n * @module\n * @description\n * The `di` module provides dependency injection container services.\n */\n\n/**\n * This file should not be necessary because node resolution should just default to `./di/index`!\n *\n * However it does not seem to work and it breaks:\n *  - //packages/animations/browser/test:test_web_chromium-local\n *  - //packages/compiler-cli/test:extract_i18n\n *  - //packages/compiler-cli/test:ngc\n *  - //packages/compiler-cli/test:perform_watch\n *  - //packages/compiler-cli/test/diagnostics:check_types\n *  - //packages/compiler-cli/test/transformers:test\n *  - //packages/compiler/test:test\n *  - //tools/public_api_guard:core_api\n *\n * Remove this file once the above is solved or wait until `ngc` is deleted and then it should be\n * safe to delete this file.\n */\n\nconst SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;\n\n/**\n * `DestroyRef` lets you set callbacks to run for any cleanup or destruction behavior.\n * The scope of this destruction depends on where `DestroyRef` is injected. If `DestroyRef`\n * is injected in a component or directive, the callbacks run when that component or\n * directive is destroyed. Otherwise the callbacks run when a corresponding injector is destroyed.\n *\n * @publicApi\n */\nclass DestroyRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectDestroyRef;\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ENV_ID__ = injector => injector;\n}\nclass NodeInjectorDestroyRef extends DestroyRef {\n  _lView;\n  constructor(_lView) {\n    super();\n    this._lView = _lView;\n  }\n  onDestroy(callback) {\n    storeLViewOnDestroy(this._lView, callback);\n    return () => removeLViewOnDestroy(this._lView, callback);\n  }\n}\nfunction injectDestroyRef() {\n  return new NodeInjectorDestroyRef(getLView());\n}\n\n/**\n * Injectable that is notified when an `LView` is made aware of changes to application state.\n */\nclass ChangeDetectionScheduler {}\n/** Token used to indicate if zoneless was enabled via provideZonelessChangeDetection(). */\nconst ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', {\n  providedIn: 'root',\n  factory: () => false\n});\n/** Token used to indicate `provideExperimentalZonelessChangeDetection` was used. */\nconst PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', {\n  providedIn: 'root',\n  factory: () => false\n});\nconst ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'scheduler disabled' : '');\n// TODO(atscott): Remove in v19. Scheduler should be done with runOutsideAngular.\nconst SCHEDULE_IN_ROOT_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'run changes outside zone in root' : '');\n\n/**\n * Internal implementation of the pending tasks service.\n */\nclass PendingTasksInternal {\n  taskId = 0;\n  pendingTasks = new Set();\n  get _hasPendingTasks() {\n    return this.hasPendingTasks.value;\n  }\n  hasPendingTasks = new BehaviorSubject(false);\n  add() {\n    if (!this._hasPendingTasks) {\n      this.hasPendingTasks.next(true);\n    }\n    const taskId = this.taskId++;\n    this.pendingTasks.add(taskId);\n    return taskId;\n  }\n  has(taskId) {\n    return this.pendingTasks.has(taskId);\n  }\n  remove(taskId) {\n    this.pendingTasks.delete(taskId);\n    if (this.pendingTasks.size === 0 && this._hasPendingTasks) {\n      this.hasPendingTasks.next(false);\n    }\n  }\n  ngOnDestroy() {\n    this.pendingTasks.clear();\n    if (this._hasPendingTasks) {\n      this.hasPendingTasks.next(false);\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: PendingTasksInternal,\n    providedIn: 'root',\n    factory: () => new PendingTasksInternal()\n  });\n}\n/**\n * Service that keeps track of pending tasks contributing to the stableness of Angular\n * application. While several existing Angular services (ex.: `HttpClient`) will internally manage\n * tasks influencing stability, this API gives control over stability to library and application\n * developers for specific cases not covered by Angular internals.\n *\n * The concept of stability comes into play in several important scenarios:\n * - SSR process needs to wait for the application stability before serializing and sending rendered\n * HTML;\n * - tests might want to delay assertions until the application becomes stable;\n *\n * @usageNotes\n * ```ts\n * const pendingTasks = inject(PendingTasks);\n * const taskCleanup = pendingTasks.add();\n * // do work that should block application's stability and then:\n * taskCleanup();\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nclass PendingTasks {\n  internalPendingTasks = inject(PendingTasksInternal);\n  scheduler = inject(ChangeDetectionScheduler);\n  /**\n   * Adds a new task that should block application's stability.\n   * @returns A cleanup function that removes a task when called.\n   */\n  add() {\n    const taskId = this.internalPendingTasks.add();\n    return () => {\n      if (!this.internalPendingTasks.has(taskId)) {\n        // This pending task has already been cleared.\n        return;\n      }\n      // Notifying the scheduler will hold application stability open until the next tick.\n      this.scheduler.notify(12 /* NotificationSource.PendingTaskRemoved */);\n      this.internalPendingTasks.remove(taskId);\n    };\n  }\n  /**\n   * Runs an asynchronous function and blocks the application's stability until the function completes.\n   *\n   * ```\n   * pendingTasks.run(async () => {\n   *   const userData = await fetch('/api/user');\n   *   this.userData.set(userData);\n   * });\n   * ```\n   *\n   * Application stability is at least delayed until the next tick after the `run` method resolves\n   * so it is safe to make additional updates to application state that would require UI synchronization:\n   *\n   * ```\n   * const userData = await pendingTasks.run(() => fetch('/api/user'));\n   * this.userData.set(userData);\n   * ```\n   *\n   * @param fn The asynchronous function to execute\n   */\n  async run(fn) {\n    const removeTask = this.add();\n    try {\n      return await fn();\n    } finally {\n      removeTask();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: PendingTasks,\n    providedIn: 'root',\n    factory: () => new PendingTasks()\n  });\n}\nclass EventEmitter_ extends Subject {\n  __isAsync; // tslint:disable-line\n  destroyRef = undefined;\n  pendingTasks = undefined;\n  constructor(isAsync = false) {\n    super();\n    this.__isAsync = isAsync;\n    // Attempt to retrieve a `DestroyRef` and `PendingTasks` optionally.\n    // For backwards compatibility reasons, this cannot be required.\n    if (isInInjectionContext()) {\n      // `DestroyRef` is optional because it is not available in all contexts.\n      // But it is useful to properly complete the `EventEmitter` if used with `outputToObservable`\n      // when the component/directive is destroyed. (See `outputToObservable` for more details.)\n      this.destroyRef = inject(DestroyRef, {\n        optional: true\n      }) ?? undefined;\n      this.pendingTasks = inject(PendingTasksInternal, {\n        optional: true\n      }) ?? undefined;\n    }\n  }\n  emit(value) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      super.next(value);\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  subscribe(observerOrNext, error, complete) {\n    let nextFn = observerOrNext;\n    let errorFn = error || (() => null);\n    let completeFn = complete;\n    if (observerOrNext && typeof observerOrNext === 'object') {\n      const observer = observerOrNext;\n      nextFn = observer.next?.bind(observer);\n      errorFn = observer.error?.bind(observer);\n      completeFn = observer.complete?.bind(observer);\n    }\n    if (this.__isAsync) {\n      errorFn = this.wrapInTimeout(errorFn);\n      if (nextFn) {\n        nextFn = this.wrapInTimeout(nextFn);\n      }\n      if (completeFn) {\n        completeFn = this.wrapInTimeout(completeFn);\n      }\n    }\n    const sink = super.subscribe({\n      next: nextFn,\n      error: errorFn,\n      complete: completeFn\n    });\n    if (observerOrNext instanceof Subscription) {\n      observerOrNext.add(sink);\n    }\n    return sink;\n  }\n  wrapInTimeout(fn) {\n    return value => {\n      const taskId = this.pendingTasks?.add();\n      setTimeout(() => {\n        fn(value);\n        if (taskId !== undefined) {\n          this.pendingTasks?.remove(taskId);\n        }\n      });\n    };\n  }\n}\n/**\n * @publicApi\n */\nconst EventEmitter = EventEmitter_;\nfunction noop(...args) {\n  // Do nothing.\n}\n\n/**\n * Gets a scheduling function that runs the callback after the first of setTimeout and\n * requestAnimationFrame resolves.\n *\n * - `requestAnimationFrame` ensures that change detection runs ahead of a browser repaint.\n * This ensures that the create and update passes of a change detection always happen\n * in the same frame.\n * - When the browser is resource-starved, `rAF` can execute _before_ a `setTimeout` because\n * rendering is a very high priority process. This means that `setTimeout` cannot guarantee\n * same-frame create and update pass, when `setTimeout` is used to schedule the update phase.\n * - While `rAF` gives us the desirable same-frame updates, it has two limitations that\n * prevent it from being used alone. First, it does not run in background tabs, which would\n * prevent Angular from initializing an application when opened in a new tab (for example).\n * Second, repeated calls to requestAnimationFrame will execute at the refresh rate of the\n * hardware (~16ms for a 60Hz display). This would cause significant slowdown of tests that\n * are written with several updates and asserts in the form of \"update; await stable; assert;\".\n * - Both `setTimeout` and `rAF` are able to \"coalesce\" several events from a single user\n * interaction into a single change detection. Importantly, this reduces view tree traversals when\n * compared to an alternative timing mechanism like `queueMicrotask`, where change detection would\n * then be interleaves between each event.\n *\n * By running change detection after the first of `setTimeout` and `rAF` to execute, we get the\n * best of both worlds.\n *\n * @returns a function to cancel the scheduled callback\n */\nfunction scheduleCallbackWithRafRace(callback) {\n  let timeoutId;\n  let animationFrameId;\n  function cleanup() {\n    callback = noop;\n    try {\n      if (animationFrameId !== undefined && typeof cancelAnimationFrame === 'function') {\n        cancelAnimationFrame(animationFrameId);\n      }\n      if (timeoutId !== undefined) {\n        clearTimeout(timeoutId);\n      }\n    } catch {\n      // Clearing/canceling can fail in tests due to the timing of functions being patched and unpatched\n      // Just ignore the errors - we protect ourselves from this issue by also making the callback a no-op.\n    }\n  }\n  timeoutId = setTimeout(() => {\n    callback();\n    cleanup();\n  });\n  if (typeof requestAnimationFrame === 'function') {\n    animationFrameId = requestAnimationFrame(() => {\n      callback();\n      cleanup();\n    });\n  }\n  return () => cleanup();\n}\nfunction scheduleCallbackWithMicrotask(callback) {\n  queueMicrotask(() => callback());\n  return () => {\n    callback = noop;\n  };\n}\nclass AsyncStackTaggingZoneSpec {\n  createTask;\n  constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {\n    this.name = 'asyncStackTagging for ' + namePrefix;\n    this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);\n  }\n  // ZoneSpec implementation below.\n  name;\n  onScheduleTask(delegate, _current, target, task) {\n    task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);\n    return delegate.scheduleTask(target, task);\n  }\n  onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {\n    let ret;\n    if (task.consoleTask) {\n      ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));\n    } else {\n      ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);\n    }\n    return ret;\n  }\n}\nconst isAngularZoneProperty = 'isAngularZone';\nconst angularZoneInstanceIdProperty = isAngularZoneProperty + '_ID';\nlet ngZoneInstanceId = 0;\n/**\n * An injectable service for executing work inside or outside of the Angular zone.\n *\n * The most common use of this service is to optimize performance when starting a work consisting of\n * one or more asynchronous tasks that don't require UI updates or error handling to be handled by\n * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks\n * can reenter the Angular zone via {@link #run}.\n *\n * <!-- TODO: add/fix links to:\n *   - docs explaining zones and the use of zones in Angular and change-detection\n *   - link to runOutsideAngular/run (throughout this file!)\n *   -->\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import {Component, NgZone} from '@angular/core';\n * import {NgIf} from '@angular/common';\n *\n * @Component({\n *   selector: 'ng-zone-demo',\n *   template: `\n *     <h2>Demo: NgZone</h2>\n *\n *     <p>Progress: {{progress}}%</p>\n *     <p *ngIf=\"progress >= 100\">Done processing {{label}} of Angular zone!</p>\n *\n *     <button (click)=\"processWithinAngularZone()\">Process within Angular zone</button>\n *     <button (click)=\"processOutsideOfAngularZone()\">Process outside of Angular zone</button>\n *   `,\n * })\n * export class NgZoneDemo {\n *   progress: number = 0;\n *   label: string;\n *\n *   constructor(private _ngZone: NgZone) {}\n *\n *   // Loop inside the Angular zone\n *   // so the UI DOES refresh after each setTimeout cycle\n *   processWithinAngularZone() {\n *     this.label = 'inside';\n *     this.progress = 0;\n *     this._increaseProgress(() => console.log('Inside Done!'));\n *   }\n *\n *   // Loop outside of the Angular zone\n *   // so the UI DOES NOT refresh after each setTimeout cycle\n *   processOutsideOfAngularZone() {\n *     this.label = 'outside';\n *     this.progress = 0;\n *     this._ngZone.runOutsideAngular(() => {\n *       this._increaseProgress(() => {\n *         // reenter the Angular zone and display done\n *         this._ngZone.run(() => { console.log('Outside Done!'); });\n *       });\n *     });\n *   }\n *\n *   _increaseProgress(doneCallback: () => void) {\n *     this.progress += 1;\n *     console.log(`Current progress: ${this.progress}%`);\n *\n *     if (this.progress < 100) {\n *       window.setTimeout(() => this._increaseProgress(doneCallback), 10);\n *     } else {\n *       doneCallback();\n *     }\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass NgZone {\n  hasPendingMacrotasks = false;\n  hasPendingMicrotasks = false;\n  /**\n   * Whether there are no outstanding microtasks or macrotasks.\n   */\n  isStable = true;\n  /**\n   * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\n   */\n  onUnstable = new EventEmitter(false);\n  /**\n   * Notifies when there is no more microtasks enqueued in the current VM Turn.\n   * This is a hint for Angular to do change detection, which may enqueue more microtasks.\n   * For this reason this event can fire multiple times per VM Turn.\n   */\n  onMicrotaskEmpty = new EventEmitter(false);\n  /**\n   * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\n   * implies we are about to relinquish VM turn.\n   * This event gets called just once.\n   */\n  onStable = new EventEmitter(false);\n  /**\n   * Notifies that an error has been delivered.\n   */\n  onError = new EventEmitter(false);\n  constructor(options) {\n    const {\n      enableLongStackTrace = false,\n      shouldCoalesceEventChangeDetection = false,\n      shouldCoalesceRunChangeDetection = false,\n      scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT\n    } = options;\n    if (typeof Zone == 'undefined') {\n      throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);\n    }\n    Zone.assertZonePatched();\n    const self = this;\n    self._nesting = 0;\n    self._outer = self._inner = Zone.current;\n    // AsyncStackTaggingZoneSpec provides `linked stack traces` to show\n    // where the async operation is scheduled. For more details, refer\n    // to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/\n    // And we only import this AsyncStackTaggingZoneSpec in development mode,\n    // in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.\n    if (ngDevMode) {\n      self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));\n    }\n    if (Zone['TaskTrackingZoneSpec']) {\n      self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());\n    }\n    if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n      self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n    }\n    // if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be\n    // coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.\n    self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;\n    self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;\n    self.callbackScheduled = false;\n    self.scheduleInRootZone = scheduleInRootZone;\n    forkInnerZoneWithAngularBehavior(self);\n  }\n  /**\n    This method checks whether the method call happens within an Angular Zone instance.\n  */\n  static isInAngularZone() {\n    // Zone needs to be checked, because this method might be called even when NoopNgZone is used.\n    return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;\n  }\n  /**\n    Assures that the method is called within the Angular Zone, otherwise throws an error.\n  */\n  static assertInAngularZone() {\n    if (!NgZone.isInAngularZone()) {\n      throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');\n    }\n  }\n  /**\n    Assures that the method is called outside of the Angular Zone, otherwise throws an error.\n  */\n  static assertNotInAngularZone() {\n    if (NgZone.isInAngularZone()) {\n      throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');\n    }\n  }\n  /**\n   * Executes the `fn` function synchronously within the Angular zone and returns value returned by\n   * the function.\n   *\n   * Running functions via `run` allows you to reenter Angular zone from a task that was executed\n   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * within the Angular zone.\n   *\n   * If a synchronous error happens it will be rethrown and not reported via `onError`.\n   */\n  run(fn, applyThis, applyArgs) {\n    return this._inner.run(fn, applyThis, applyArgs);\n  }\n  /**\n   * Executes the `fn` function synchronously within the Angular zone as a task and returns value\n   * returned by the function.\n   *\n   * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed\n   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * within the Angular zone.\n   *\n   * If a synchronous error happens it will be rethrown and not reported via `onError`.\n   */\n  runTask(fn, applyThis, applyArgs, name) {\n    const zone = this._inner;\n    const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n    try {\n      return zone.runTask(task, applyThis, applyArgs);\n    } finally {\n      zone.cancelTask(task);\n    }\n  }\n  /**\n   * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not\n   * rethrown.\n   */\n  runGuarded(fn, applyThis, applyArgs) {\n    return this._inner.runGuarded(fn, applyThis, applyArgs);\n  }\n  /**\n   * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\n   * the function.\n   *\n   * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do\n   * work that\n   * doesn't trigger Angular change-detection or is subject to Angular's error handling.\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * outside of the Angular zone.\n   *\n   * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\n   */\n  runOutsideAngular(fn) {\n    return this._outer.run(fn);\n  }\n}\nconst EMPTY_PAYLOAD = {};\nfunction checkStable(zone) {\n  // TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent\n  // re-entry. The case is:\n  //\n  // @Component({...})\n  // export class AppComponent {\n  // constructor(private ngZone: NgZone) {\n  //   this.ngZone.onStable.subscribe(() => {\n  //     this.ngZone.run(() => console.log('stable'););\n  //   });\n  // }\n  //\n  // The onStable subscriber run another function inside ngZone\n  // which causes `checkStable()` re-entry.\n  // But this fix causes some issues in g3, so this fix will be\n  // launched in another PR.\n  if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n    try {\n      zone._nesting++;\n      zone.onMicrotaskEmpty.emit(null);\n    } finally {\n      zone._nesting--;\n      if (!zone.hasPendingMicrotasks) {\n        try {\n          zone.runOutsideAngular(() => zone.onStable.emit(null));\n        } finally {\n          zone.isStable = true;\n        }\n      }\n    }\n  }\n}\nfunction delayChangeDetectionForEvents(zone) {\n  /**\n   * We also need to check _nesting here\n   * Consider the following case with shouldCoalesceRunChangeDetection = true\n   *\n   * ngZone.run(() => {});\n   * ngZone.run(() => {});\n   *\n   * We want the two `ngZone.run()` only trigger one change detection\n   * when shouldCoalesceRunChangeDetection is true.\n   * And because in this case, change detection run in async way(requestAnimationFrame),\n   * so we also need to check the _nesting here to prevent multiple\n   * change detections.\n   */\n  if (zone.isCheckStableRunning || zone.callbackScheduled) {\n    return;\n  }\n  zone.callbackScheduled = true;\n  function scheduleCheckStable() {\n    scheduleCallbackWithRafRace(() => {\n      zone.callbackScheduled = false;\n      updateMicroTaskStatus(zone);\n      zone.isCheckStableRunning = true;\n      checkStable(zone);\n      zone.isCheckStableRunning = false;\n    });\n  }\n  if (zone.scheduleInRootZone) {\n    Zone.root.run(() => {\n      scheduleCheckStable();\n    });\n  } else {\n    zone._outer.run(() => {\n      scheduleCheckStable();\n    });\n  }\n  updateMicroTaskStatus(zone);\n}\nfunction forkInnerZoneWithAngularBehavior(zone) {\n  const delayChangeDetectionForEventsDelegate = () => {\n    delayChangeDetectionForEvents(zone);\n  };\n  const instanceId = ngZoneInstanceId++;\n  zone._inner = zone._inner.fork({\n    name: 'angular',\n    properties: {\n      [isAngularZoneProperty]: true,\n      [angularZoneInstanceIdProperty]: instanceId,\n      [angularZoneInstanceIdProperty + instanceId]: true\n    },\n    onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n      // Prevent triggering change detection when the flag is detected.\n      if (shouldBeIgnoredByZone(applyArgs)) {\n        return delegate.invokeTask(target, task, applyThis, applyArgs);\n      }\n      try {\n        onEnter(zone);\n        return delegate.invokeTask(target, task, applyThis, applyArgs);\n      } finally {\n        if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {\n          delayChangeDetectionForEventsDelegate();\n        }\n        onLeave(zone);\n      }\n    },\n    onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {\n      try {\n        onEnter(zone);\n        return delegate.invoke(target, callback, applyThis, applyArgs, source);\n      } finally {\n        if (zone.shouldCoalesceRunChangeDetection &&\n        // Do not delay change detection when the task is the scheduler's tick.\n        // We need to synchronously trigger the stability logic so that the\n        // zone-based scheduler can prevent a duplicate ApplicationRef.tick\n        // by first checking if the scheduler tick is running. This does seem a bit roundabout,\n        // but we _do_ still want to trigger all the correct events when we exit the zone.run\n        // (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which\n        // relies on these events happening after change detection runs).\n        // Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate\n        // but is added here as well to prevent reads of applyArgs when not necessary\n        !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {\n          delayChangeDetectionForEventsDelegate();\n        }\n        onLeave(zone);\n      }\n    },\n    onHasTask: (delegate, current, target, hasTaskState) => {\n      delegate.hasTask(target, hasTaskState);\n      if (current === target) {\n        // We are only interested in hasTask events which originate from our zone\n        // (A child hasTask event is not interesting to us)\n        if (hasTaskState.change == 'microTask') {\n          zone._hasPendingMicrotasks = hasTaskState.microTask;\n          updateMicroTaskStatus(zone);\n          checkStable(zone);\n        } else if (hasTaskState.change == 'macroTask') {\n          zone.hasPendingMacrotasks = hasTaskState.macroTask;\n        }\n      }\n    },\n    onHandleError: (delegate, current, target, error) => {\n      delegate.handleError(target, error);\n      zone.runOutsideAngular(() => zone.onError.emit(error));\n      return false;\n    }\n  });\n}\nfunction updateMicroTaskStatus(zone) {\n  if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {\n    zone.hasPendingMicrotasks = true;\n  } else {\n    zone.hasPendingMicrotasks = false;\n  }\n}\nfunction onEnter(zone) {\n  zone._nesting++;\n  if (zone.isStable) {\n    zone.isStable = false;\n    zone.onUnstable.emit(null);\n  }\n}\nfunction onLeave(zone) {\n  zone._nesting--;\n  checkStable(zone);\n}\n/**\n * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls\n * to framework to perform rendering.\n */\nclass NoopNgZone {\n  hasPendingMicrotasks = false;\n  hasPendingMacrotasks = false;\n  isStable = true;\n  onUnstable = new EventEmitter();\n  onMicrotaskEmpty = new EventEmitter();\n  onStable = new EventEmitter();\n  onError = new EventEmitter();\n  run(fn, applyThis, applyArgs) {\n    return fn.apply(applyThis, applyArgs);\n  }\n  runGuarded(fn, applyThis, applyArgs) {\n    return fn.apply(applyThis, applyArgs);\n  }\n  runOutsideAngular(fn) {\n    return fn();\n  }\n  runTask(fn, applyThis, applyArgs, name) {\n    return fn.apply(applyThis, applyArgs);\n  }\n}\nfunction shouldBeIgnoredByZone(applyArgs) {\n  return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');\n}\nfunction isSchedulerTick(applyArgs) {\n  return hasApplyArgsData(applyArgs, '__scheduler_tick__');\n}\nfunction hasApplyArgsData(applyArgs, key) {\n  if (!Array.isArray(applyArgs)) {\n    return false;\n  }\n  // We should only ever get 1 arg passed through to invokeTask.\n  // Short circuit here incase that behavior changes.\n  if (applyArgs.length !== 1) {\n    return false;\n  }\n  return applyArgs[0]?.data?.[key] === true;\n}\nfunction getNgZone(ngZoneToUse = 'zone.js', options) {\n  if (ngZoneToUse === 'noop') {\n    return new NoopNgZone();\n  }\n  if (ngZoneToUse === 'zone.js') {\n    return new NgZone(options);\n  }\n  return ngZoneToUse;\n}\n\n// Public API for Zone\n\n/**\n * Provides a hook for centralized exception handling.\n *\n * The default implementation of `ErrorHandler` prints error messages to the `console`. To\n * intercept error handling, write a custom exception handler that replaces this default as\n * appropriate for your app.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * class MyErrorHandler implements ErrorHandler {\n *   handleError(error) {\n *     // do something with the exception\n *   }\n * }\n *\n * // Provide in standalone apps\n * bootstrapApplication(AppComponent, {\n *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n *\n * // Provide in module-based apps\n * @NgModule({\n *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n * class MyModule {}\n * ```\n *\n * @publicApi\n */\nclass ErrorHandler {\n  /**\n   * @internal\n   */\n  _console = console;\n  handleError(error) {\n    this._console.error('ERROR', error);\n  }\n}\n/**\n * `InjectionToken` used to configure how to call the `ErrorHandler`.\n *\n * `NgZone` is provided by default today so the default (and only) implementation for this\n * is calling `ErrorHandler.handleError` outside of the Angular zone.\n */\nconst INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'internal error handler' : '', {\n  providedIn: 'root',\n  factory: () => {\n    const zone = inject(NgZone);\n    const userErrorHandler = inject(ErrorHandler);\n    return e => zone.runOutsideAngular(() => userErrorHandler.handleError(e));\n  }\n});\n\n/**\n * An `OutputEmitterRef` is created by the `output()` function and can be\n * used to emit values to consumers of your directive or component.\n *\n * Consumers of your directive/component can bind to the output and\n * subscribe to changes via the bound event syntax. For example:\n *\n * ```html\n * <my-comp (valueChange)=\"processNewValue($event)\" />\n * ```\n *\n * @publicAPI\n */\nclass OutputEmitterRef {\n  destroyed = false;\n  listeners = null;\n  errorHandler = inject(ErrorHandler, {\n    optional: true\n  });\n  /** @internal */\n  destroyRef = inject(DestroyRef);\n  constructor() {\n    // Clean-up all listeners and mark as destroyed upon destroy.\n    this.destroyRef.onDestroy(() => {\n      this.destroyed = true;\n      this.listeners = null;\n    });\n  }\n  subscribe(callback) {\n    if (this.destroyed) {\n      throw new RuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n    }\n    (this.listeners ??= []).push(callback);\n    return {\n      unsubscribe: () => {\n        const idx = this.listeners?.indexOf(callback);\n        if (idx !== undefined && idx !== -1) {\n          this.listeners?.splice(idx, 1);\n        }\n      }\n    };\n  }\n  /** Emits a new value to the output. */\n  emit(value) {\n    if (this.destroyed) {\n      throw new RuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected emit for destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n    }\n    if (this.listeners === null) {\n      return;\n    }\n    const previousConsumer = setActiveConsumer$1(null);\n    try {\n      for (const listenerFn of this.listeners) {\n        try {\n          listenerFn(value);\n        } catch (err) {\n          this.errorHandler?.handleError(err);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(previousConsumer);\n    }\n  }\n}\n/** Gets the owning `DestroyRef` for the given output. */\nfunction getOutputDestroyRef(ref) {\n  return ref.destroyRef;\n}\n\n/**\n * The `output` function allows declaration of Angular outputs in\n * directives and components.\n *\n * You can use outputs to emit values to parent directives and component.\n * Parents can subscribe to changes via:\n *\n * - template event bindings. For example, `(myOutput)=\"doSomething($event)\"`\n * - programmatic subscription by using `OutputRef#subscribe`.\n *\n * @usageNotes\n *\n * To use `output()`, import the function from `@angular/core`.\n *\n * ```ts\n * import {output} from '@angular/core';\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `output`.\n *\n * ```ts\n * @Directive({\n *   ...\n * })\n * export class MyDir {\n *   nameChange = output<string>();    // OutputEmitterRef<string>\n *   onClick    = output();            // OutputEmitterRef<void>\n * }\n * ```\n *\n * You can emit values to consumers of your directive, by using\n * the `emit` method from `OutputEmitterRef`.\n *\n * ```ts\n * updateName(newName: string): void {\n *   this.nameChange.emit(newName);\n * }\n * ```\n * @initializerApiFunction {\"showTypesInSignaturePreview\": true}\n * @publicAPI\n */\nfunction output(opts) {\n  ngDevMode && assertInInjectionContext(output);\n  return new OutputEmitterRef();\n}\nfunction inputFunction(initialValue, opts) {\n  ngDevMode && assertInInjectionContext(input);\n  return createInputSignal(initialValue, opts);\n}\nfunction inputRequiredFunction(opts) {\n  ngDevMode && assertInInjectionContext(input);\n  return createInputSignal(REQUIRED_UNSET_VALUE, opts);\n}\n/**\n * The `input` function allows declaration of Angular inputs in directives\n * and components.\n *\n * There are two variants of inputs that can be declared:\n *\n *   1. **Optional inputs** with an initial value.\n *   2. **Required inputs** that consumers need to set.\n *\n * By default, the `input` function will declare optional inputs that\n * always have an initial value. Required inputs can be declared\n * using the `input.required()` function.\n *\n * Inputs are signals. The values of an input are exposed as a `Signal`.\n * The signal always holds the latest value of the input that is bound\n * from the parent.\n *\n * @usageNotes\n * To use signal-based inputs, import `input` from `@angular/core`.\n *\n * ```ts\n * import {input} from '@angular/core`;\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `input` or `input.required`.\n *\n * ```ts\n * @Component({\n *   ...\n * })\n * export class UserProfileComponent {\n *   firstName = input<string>();             // Signal<string|undefined>\n *   lastName  = input.required<string>();    // Signal<string>\n *   age       = input(0)                     // Signal<number>\n * }\n * ```\n *\n * Inside your component template, you can display values of the inputs\n * by calling the signal.\n *\n * ```html\n * <span>{{firstName()}}</span>\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst input = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `input` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing`input` export.\n  inputFunction.required = inputRequiredFunction;\n  return inputFunction;\n})();\n\n/**\n * Creates an ElementRef from the most recent node.\n *\n * @returns The ElementRef instance to use\n */\nfunction injectElementRef() {\n  return createElementRef(getCurrentTNode(), getLView());\n}\n/**\n * Creates an ElementRef given a node.\n *\n * @param tNode The node for which you'd like an ElementRef\n * @param lView The view to which the node belongs\n * @returns The ElementRef instance to use\n */\nfunction createElementRef(tNode, lView) {\n  return new ElementRef(getNativeByTNode(tNode, lView));\n}\n/**\n * A wrapper around a native element inside of a View.\n *\n * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\n * element.\n *\n * @security Permitting direct access to the DOM can make your application more vulnerable to\n * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the\n * [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n// Note: We don't expose things like `Injector`, `ViewContainer`, ... here,\n// i.e. users have to ask for what they need. With that, we can build better analysis tools\n// and could do better codegen in the future.\nclass ElementRef {\n  /**\n   * <div class=\"callout is-critical\">\n   *   <header>Use with caution</header>\n   *   <p>\n   *    Use this API as the last resort when direct access to DOM is needed. Use templating and\n   *    data-binding provided by Angular instead. Alternatively you can take a look at\n   *    {@link Renderer2} which provides an API that can be safely used.\n   *   </p>\n   * </div>\n   */\n  nativeElement;\n  constructor(nativeElement) {\n    this.nativeElement = nativeElement;\n  }\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectElementRef;\n}\n/**\n * Unwraps `ElementRef` and return the `nativeElement`.\n *\n * @param value value to unwrap\n * @returns `nativeElement` if `ElementRef` otherwise returns value as is.\n */\nfunction unwrapElementRef(value) {\n  return value instanceof ElementRef ? value.nativeElement : value;\n}\nfunction symbolIterator() {\n  // @ts-expect-error accessing a private member\n  return this._results[Symbol.iterator]();\n}\n/**\n * An unmodifiable list of items that Angular keeps up to date when the state\n * of the application changes.\n *\n * The type of object that {@link ViewChildren}, {@link ContentChildren}, and {@link QueryList}\n * provide.\n *\n * Implements an iterable interface, therefore it can be used in both ES6\n * javascript `for (var i of items)` loops as well as in Angular templates with\n * `*ngFor=\"let i of myList\"`.\n *\n * Changes can be observed by subscribing to the changes `Observable`.\n *\n * NOTE: In the future this class will implement an `Observable` interface.\n *\n * @usageNotes\n * ### Example\n * ```ts\n * @Component({...})\n * class Container {\n *   @ViewChildren(Item) items:QueryList<Item>;\n * }\n * ```\n *\n * @publicApi\n */\nclass QueryList {\n  _emitDistinctChangesOnly;\n  dirty = true;\n  _onDirty = undefined;\n  _results = [];\n  _changesDetected = false;\n  _changes = undefined;\n  length = 0;\n  first = undefined;\n  last = undefined;\n  /**\n   * Returns `Observable` of `QueryList` notifying the subscriber of changes.\n   */\n  get changes() {\n    return this._changes ??= new Subject();\n  }\n  /**\n   * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change\n   *     has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in\n   *     the same result)\n   */\n  constructor(_emitDistinctChangesOnly = false) {\n    this._emitDistinctChangesOnly = _emitDistinctChangesOnly;\n  }\n  /**\n   * Returns the QueryList entry at `index`.\n   */\n  get(index) {\n    return this._results[index];\n  }\n  /**\n   * See\n   * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)\n   */\n  map(fn) {\n    return this._results.map(fn);\n  }\n  filter(fn) {\n    return this._results.filter(fn);\n  }\n  /**\n   * See\n   * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)\n   */\n  find(fn) {\n    return this._results.find(fn);\n  }\n  /**\n   * See\n   * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)\n   */\n  reduce(fn, init) {\n    return this._results.reduce(fn, init);\n  }\n  /**\n   * See\n   * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)\n   */\n  forEach(fn) {\n    this._results.forEach(fn);\n  }\n  /**\n   * See\n   * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)\n   */\n  some(fn) {\n    return this._results.some(fn);\n  }\n  /**\n   * Returns a copy of the internal results list as an Array.\n   */\n  toArray() {\n    return this._results.slice();\n  }\n  toString() {\n    return this._results.toString();\n  }\n  /**\n   * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that\n   * on change detection, it will not notify of changes to the queries, unless a new change\n   * occurs.\n   *\n   * @param resultsTree The query results to store\n   * @param identityAccessor Optional function for extracting stable object identity from a value\n   *    in the array. This function is executed for each element of the query result list while\n   *    comparing current query list with the new one (provided as a first argument of the `reset`\n   *    function) to detect if the lists are different. If the function is not provided, elements\n   *    are compared as is (without any pre-processing).\n   */\n  reset(resultsTree, identityAccessor) {\n    this.dirty = false;\n    const newResultFlat = flatten(resultsTree);\n    if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {\n      this._results = newResultFlat;\n      this.length = newResultFlat.length;\n      this.last = newResultFlat[this.length - 1];\n      this.first = newResultFlat[0];\n    }\n  }\n  /**\n   * Triggers a change event by emitting on the `changes` {@link EventEmitter}.\n   */\n  notifyOnChanges() {\n    if (this._changes !== undefined && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);\n  }\n  /** @internal */\n  onDirty(cb) {\n    this._onDirty = cb;\n  }\n  /** internal */\n  setDirty() {\n    this.dirty = true;\n    this._onDirty?.();\n  }\n  /** internal */\n  destroy() {\n    if (this._changes !== undefined) {\n      this._changes.complete();\n      this._changes.unsubscribe();\n    }\n  }\n  [Symbol.iterator] = (() => symbolIterator)();\n}\n\n/**\n * The name of an attribute that can be added to the hydration boundary node\n * (component host node) to disable hydration for the content within that boundary.\n */\nconst SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';\n/** Lowercase name of the `ngSkipHydration` attribute used for case-insensitive comparisons. */\nconst SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = 'ngskiphydration';\n/**\n * Helper function to check if a given TNode has the 'ngSkipHydration' attribute.\n */\nfunction hasSkipHydrationAttrOnTNode(tNode) {\n  const attrs = tNode.mergedAttrs;\n  if (attrs === null) return false;\n  // only ever look at the attribute name and skip the values\n  for (let i = 0; i < attrs.length; i += 2) {\n    const value = attrs[i];\n    // This is a marker, which means that the static attributes section is over,\n    // so we can exit early.\n    if (typeof value === 'number') return false;\n    if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Helper function to check if a given RElement has the 'ngSkipHydration' attribute.\n */\nfunction hasSkipHydrationAttrOnRElement(rNode) {\n  return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);\n}\n/**\n * Checks whether a TNode has a flag to indicate that it's a part of\n * a skip hydration block.\n */\nfunction hasInSkipHydrationBlockFlag(tNode) {\n  return (tNode.flags & 128 /* TNodeFlags.inSkipHydrationBlock */) === 128 /* TNodeFlags.inSkipHydrationBlock */;\n}\n/**\n * Helper function that determines if a given node is within a skip hydration block\n * by navigating up the TNode tree to see if any parent nodes have skip hydration\n * attribute.\n */\nfunction isInSkipHydrationBlock(tNode) {\n  if (hasInSkipHydrationBlockFlag(tNode)) {\n    return true;\n  }\n  let currentTNode = tNode.parent;\n  while (currentTNode) {\n    if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {\n      return true;\n    }\n    currentTNode = currentTNode.parent;\n  }\n  return false;\n}\n/**\n * Check if an i18n block is in a skip hydration section by looking at a parent TNode\n * to determine if this TNode is in a skip hydration section or the TNode has\n * the `ngSkipHydration` attribute.\n */\nfunction isI18nInSkipHydrationBlock(parentTNode) {\n  return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);\n}\n\n/**\n * The strategy that the default change detector uses to detect changes.\n * When set, takes effect the next time change detection is triggered.\n *\n * @see [Change detection usage](/api/core/ChangeDetectorRef?tab=usage-notes)\n * @see [Skipping component subtrees](/best-practices/skipping-subtrees)\n *\n * @publicApi\n */\nvar ChangeDetectionStrategy;\n(function (ChangeDetectionStrategy) {\n  /**\n   * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated\n   * until reactivated by setting the strategy to `Default` (`CheckAlways`).\n   * Change detection can still be explicitly invoked.\n   * This strategy applies to all child directives and cannot be overridden.\n   */\n  ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n  /**\n   * Use the default `CheckAlways` strategy, in which change detection is automatic until\n   * explicitly deactivated.\n   */\n  ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));\n\n// Keeps track of the currently-active LViews.\nconst TRACKED_LVIEWS = new Map();\n// Used for generating unique IDs for LViews.\nlet uniqueIdCounter = 0;\n/** Gets a unique ID that can be assigned to an LView. */\nfunction getUniqueLViewId() {\n  return uniqueIdCounter++;\n}\n/** Starts tracking an LView. */\nfunction registerLView(lView) {\n  ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');\n  TRACKED_LVIEWS.set(lView[ID], lView);\n}\n/** Gets an LView by its unique ID. */\nfunction getLViewById(id) {\n  ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');\n  return TRACKED_LVIEWS.get(id) || null;\n}\n/** Stops tracking an LView. */\nfunction unregisterLView(lView) {\n  ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');\n  TRACKED_LVIEWS.delete(lView[ID]);\n}\n/** Gets the currently-tracked views. */\nfunction getTrackedLViews() {\n  return TRACKED_LVIEWS;\n}\n\n/**\n * The internal view context which is specific to a given DOM element, directive or\n * component instance. Each value in here (besides the LView and element node details)\n * can be present, null or undefined. If undefined then it implies the value has not been\n * looked up yet, otherwise, if null, then a lookup was executed and nothing was found.\n *\n * Each value will get filled when the respective value is examined within the getContext\n * function. The component, element and each directive instance will share the same instance\n * of the context.\n */\nclass LContext {\n  lViewId;\n  nodeIndex;\n  native;\n  /**\n   * The instance of the Component node.\n   */\n  component;\n  /**\n   * The list of active directives that exist on this element.\n   */\n  directives;\n  /**\n   * The map of local references (local reference name => element or directive instance) that\n   * exist on this element.\n   */\n  localRefs;\n  /** Component's parent view data. */\n  get lView() {\n    return getLViewById(this.lViewId);\n  }\n  constructor(\n  /**\n   * ID of the component's parent view data.\n   */\n  lViewId,\n  /**\n   * The index instance of the node.\n   */\n  nodeIndex,\n  /**\n   * The instance of the DOM node that is attached to the lNode.\n   */\n  native) {\n    this.lViewId = lViewId;\n    this.nodeIndex = nodeIndex;\n    this.native = native;\n  }\n}\n\n/**\n * Returns the matching `LContext` data for a given DOM node, directive or component instance.\n *\n * This function will examine the provided DOM element, component, or directive instance\\'s\n * monkey-patched property to derive the `LContext` data. Once called then the monkey-patched\n * value will be that of the newly created `LContext`.\n *\n * If the monkey-patched value is the `LView` instance then the context value for that\n * target will be created and the monkey-patch reference will be updated. Therefore when this\n * function is called it may mutate the provided element\\'s, component\\'s or any of the associated\n * directive\\'s monkey-patch values.\n *\n * If the monkey-patch value is not detected then the code will walk up the DOM until an element\n * is found which contains a monkey-patch reference. When that occurs then the provided element\n * will be updated with a new context (which is then returned). If the monkey-patch value is not\n * detected for a component/directive instance then it will throw an error (all components and\n * directives should be automatically monkey-patched by ivy).\n *\n * @param target Component, Directive or DOM Node.\n */\nfunction getLContext(target) {\n  let mpValue = readPatchedData(target);\n  if (mpValue) {\n    // only when it's an array is it considered an LView instance\n    // ... otherwise it's an already constructed LContext instance\n    if (isLView(mpValue)) {\n      const lView = mpValue;\n      let nodeIndex;\n      let component = undefined;\n      let directives = undefined;\n      if (isComponentInstance(target)) {\n        nodeIndex = findViaComponent(lView, target);\n        if (nodeIndex == -1) {\n          throw new Error('The provided component was not found in the application');\n        }\n        component = target;\n      } else if (isDirectiveInstance(target)) {\n        nodeIndex = findViaDirective(lView, target);\n        if (nodeIndex == -1) {\n          throw new Error('The provided directive was not found in the application');\n        }\n        directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n      } else {\n        nodeIndex = findViaNativeElement(lView, target);\n        if (nodeIndex == -1) {\n          return null;\n        }\n      }\n      // the goal is not to fill the entire context full of data because the lookups\n      // are expensive. Instead, only the target data (the element, component, container, ICU\n      // expression or directive details) are filled into the context. If called multiple times\n      // with different target values then the missing target data will be filled in.\n      const native = unwrapRNode(lView[nodeIndex]);\n      const existingCtx = readPatchedData(native);\n      const context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);\n      // only when the component has been discovered then update the monkey-patch\n      if (component && context.component === undefined) {\n        context.component = component;\n        attachPatchData(context.component, context);\n      }\n      // only when the directives have been discovered then update the monkey-patch\n      if (directives && context.directives === undefined) {\n        context.directives = directives;\n        for (let i = 0; i < directives.length; i++) {\n          attachPatchData(directives[i], context);\n        }\n      }\n      attachPatchData(context.native, context);\n      mpValue = context;\n    }\n  } else {\n    const rElement = target;\n    ngDevMode && assertDomNode(rElement);\n    // if the context is not found then we need to traverse upwards up the DOM\n    // to find the nearest element that has already been monkey patched with data\n    let parent = rElement;\n    while (parent = parent.parentNode) {\n      const parentContext = readPatchedData(parent);\n      if (parentContext) {\n        const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;\n        // the edge of the app was also reached here through another means\n        // (maybe because the DOM was changed manually).\n        if (!lView) {\n          return null;\n        }\n        const index = findViaNativeElement(lView, rElement);\n        if (index >= 0) {\n          const native = unwrapRNode(lView[index]);\n          const context = createLContext(lView, index, native);\n          attachPatchData(native, context);\n          mpValue = context;\n          break;\n        }\n      }\n    }\n  }\n  return mpValue || null;\n}\n/**\n * Creates an empty instance of a `LContext` context\n */\nfunction createLContext(lView, nodeIndex, native) {\n  return new LContext(lView[ID], nodeIndex, native);\n}\n/**\n * Takes a component instance and returns the view for that component.\n *\n * @param componentInstance\n * @returns The component's view\n */\nfunction getComponentViewByInstance(componentInstance) {\n  let patchedData = readPatchedData(componentInstance);\n  let lView;\n  if (isLView(patchedData)) {\n    const contextLView = patchedData;\n    const nodeIndex = findViaComponent(contextLView, componentInstance);\n    lView = getComponentLViewByIndex(nodeIndex, contextLView);\n    const context = createLContext(contextLView, nodeIndex, lView[HOST]);\n    context.component = componentInstance;\n    attachPatchData(componentInstance, context);\n    attachPatchData(context.native, context);\n  } else {\n    const context = patchedData;\n    const contextLView = context.lView;\n    ngDevMode && assertLView(contextLView);\n    lView = getComponentLViewByIndex(context.nodeIndex, contextLView);\n  }\n  return lView;\n}\n/**\n * This property will be monkey-patched on elements, components and directives.\n */\nconst MONKEY_PATCH_KEY_NAME = '__ngContext__';\nfunction attachLViewId(target, data) {\n  target[MONKEY_PATCH_KEY_NAME] = data[ID];\n}\n/**\n * Returns the monkey-patch value data present on the target (which could be\n * a component, directive or a DOM node).\n */\nfunction readLView(target) {\n  const data = readPatchedData(target);\n  if (isLView(data)) {\n    return data;\n  }\n  return data ? data.lView : null;\n}\n/**\n * Assigns the given data to the given target (which could be a component,\n * directive or DOM node instance) using monkey-patching.\n */\nfunction attachPatchData(target, data) {\n  ngDevMode && assertDefined(target, 'Target expected');\n  // Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this\n  // for `LView`, because we have control over when an `LView` is created and destroyed, whereas\n  // we can't know when to remove an `LContext`.\n  if (isLView(data)) {\n    target[MONKEY_PATCH_KEY_NAME] = data[ID];\n    registerLView(data);\n  } else {\n    target[MONKEY_PATCH_KEY_NAME] = data;\n  }\n}\n/**\n * Returns the monkey-patch value data present on the target (which could be\n * a component, directive or a DOM node).\n */\nfunction readPatchedData(target) {\n  ngDevMode && assertDefined(target, 'Target expected');\n  const data = target[MONKEY_PATCH_KEY_NAME];\n  return typeof data === 'number' ? getLViewById(data) : data || null;\n}\nfunction readPatchedLView(target) {\n  const value = readPatchedData(target);\n  if (value) {\n    return isLView(value) ? value : value.lView;\n  }\n  return null;\n}\nfunction isComponentInstance(instance) {\n  return instance && instance.constructor && instance.constructor.ɵcmp;\n}\nfunction isDirectiveInstance(instance) {\n  return instance && instance.constructor && instance.constructor.ɵdir;\n}\n/**\n * Locates the element within the given LView and returns the matching index\n */\nfunction findViaNativeElement(lView, target) {\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (unwrapRNode(lView[i]) === target) {\n      return i;\n    }\n  }\n  return -1;\n}\n/**\n * Locates the next tNode (child, sibling or parent).\n */\nfunction traverseNextElement(tNode) {\n  if (tNode.child) {\n    return tNode.child;\n  } else if (tNode.next) {\n    return tNode.next;\n  } else {\n    // Let's take the following template: <div><span>text</span></div><component/>\n    // After checking the text node, we need to find the next parent that has a \"next\" TNode,\n    // in this case the parent `div`, so that we can find the component.\n    while (tNode.parent && !tNode.parent.next) {\n      tNode = tNode.parent;\n    }\n    return tNode.parent && tNode.parent.next;\n  }\n}\n/**\n * Locates the component within the given LView and returns the matching index\n */\nfunction findViaComponent(lView, componentInstance) {\n  const componentIndices = lView[TVIEW].components;\n  if (componentIndices) {\n    for (let i = 0; i < componentIndices.length; i++) {\n      const elementComponentIndex = componentIndices[i];\n      const componentView = getComponentLViewByIndex(elementComponentIndex, lView);\n      if (componentView[CONTEXT] === componentInstance) {\n        return elementComponentIndex;\n      }\n    }\n  } else {\n    const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);\n    const rootComponent = rootComponentView[CONTEXT];\n    if (rootComponent === componentInstance) {\n      // we are dealing with the root element here therefore we know that the\n      // element is the very first element after the HEADER data in the lView\n      return HEADER_OFFSET;\n    }\n  }\n  return -1;\n}\n/**\n * Locates the directive within the given LView and returns the matching index\n */\nfunction findViaDirective(lView, directiveInstance) {\n  // if a directive is monkey patched then it will (by default)\n  // have a reference to the LView of the current view. The\n  // element bound to the directive being search lives somewhere\n  // in the view data. We loop through the nodes and check their\n  // list of directives for the instance.\n  let tNode = lView[TVIEW].firstChild;\n  while (tNode) {\n    const directiveIndexStart = tNode.directiveStart;\n    const directiveIndexEnd = tNode.directiveEnd;\n    for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {\n      if (lView[i] === directiveInstance) {\n        return tNode.index;\n      }\n    }\n    tNode = traverseNextElement(tNode);\n  }\n  return -1;\n}\n/**\n * Returns a list of directives applied to a node at a specific index. The list includes\n * directives matched by selector and any host directives, but it excludes components.\n * Use `getComponentAtNodeIndex` to find the component applied to a node.\n *\n * @param nodeIndex The node index\n * @param lView The target view data\n */\nfunction getDirectivesAtNodeIndex(nodeIndex, lView) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  if (tNode.directiveStart === 0) return EMPTY_ARRAY;\n  const results = [];\n  for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n    const directiveInstance = lView[i];\n    if (!isComponentInstance(directiveInstance)) {\n      results.push(directiveInstance);\n    }\n  }\n  return results;\n}\nfunction getComponentAtNodeIndex(nodeIndex, lView) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  const {\n    directiveStart,\n    componentOffset\n  } = tNode;\n  return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;\n}\n/**\n * Returns a map of local references (local reference name => element or directive instance) that\n * exist on a given element.\n */\nfunction discoverLocalRefs(lView, nodeIndex) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  if (tNode && tNode.localNames) {\n    const result = {};\n    let localIndex = tNode.index + 1;\n    for (let i = 0; i < tNode.localNames.length; i += 2) {\n      result[tNode.localNames[i]] = lView[localIndex];\n      localIndex++;\n    }\n    return result;\n  }\n  return null;\n}\n\n/**\n * Retrieve the root view from any component or `LView` by walking the parent `LView` until\n * reaching the root `LView`.\n *\n * @param componentOrLView any component or `LView`\n */\nfunction getRootView(componentOrLView) {\n  ngDevMode && assertDefined(componentOrLView, 'component');\n  let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);\n  while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {\n    lView = getLViewParent(lView);\n  }\n  ngDevMode && assertLView(lView);\n  return lView;\n}\n/**\n * Returns the context information associated with the application where the target is situated. It\n * does this by walking the parent views until it gets to the root view, then getting the context\n * off of that.\n *\n * @param viewOrComponent the `LView` or component to get the root context for.\n */\nfunction getRootContext(viewOrComponent) {\n  const rootView = getRootView(viewOrComponent);\n  ngDevMode && assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');\n  return rootView[CONTEXT];\n}\n/**\n * Gets the first `LContainer` in the LView or `null` if none exists.\n */\nfunction getFirstLContainer(lView) {\n  return getNearestLContainer(lView[CHILD_HEAD]);\n}\n/**\n * Gets the next `LContainer` that is a sibling of the given container.\n */\nfunction getNextLContainer(container) {\n  return getNearestLContainer(container[NEXT]);\n}\nfunction getNearestLContainer(viewOrContainer) {\n  while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {\n    viewOrContainer = viewOrContainer[NEXT];\n  }\n  return viewOrContainer;\n}\n\n/**\n * Retrieves the component instance associated with a given DOM element.\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <div>\n *     <child-comp></child-comp>\n *   </div>\n * </app-root>\n * ```\n *\n * Calling `getComponent` on `<child-comp>` will return the instance of `ChildComponent`\n * associated with this DOM element.\n *\n * Calling the function on `<app-root>` will return the `MyApp` instance.\n *\n *\n * @param element DOM element from which the component should be retrieved.\n * @returns Component instance associated with the element or `null` if there\n *    is no component associated with it.\n *\n * @publicApi\n */\nfunction getComponent(element) {\n  ngDevMode && assertDomElement(element);\n  const context = getLContext(element);\n  if (context === null) return null;\n  if (context.component === undefined) {\n    const lView = context.lView;\n    if (lView === null) {\n      return null;\n    }\n    context.component = getComponentAtNodeIndex(context.nodeIndex, lView);\n  }\n  return context.component;\n}\n/**\n * If inside an embedded view (e.g. `*ngIf` or `*ngFor`), retrieves the context of the embedded\n * view that the element is part of. Otherwise retrieves the instance of the component whose view\n * owns the element (in this case, the result is the same as calling `getOwningComponent`).\n *\n * @param element Element for which to get the surrounding component instance.\n * @returns Instance of the component that is around the element or null if the element isn't\n *    inside any component.\n *\n * @publicApi\n */\nfunction getContext(element) {\n  assertDomElement(element);\n  const context = getLContext(element);\n  const lView = context ? context.lView : null;\n  return lView === null ? null : lView[CONTEXT];\n}\n/**\n * Retrieves the component instance whose view contains the DOM element.\n *\n * For example, if `<child-comp>` is used in the template of `<app-comp>`\n * (i.e. a `ViewChild` of `<app-comp>`), calling `getOwningComponent` on `<child-comp>`\n * would return `<app-comp>`.\n *\n * @param elementOrDir DOM element, component or directive instance\n *    for which to retrieve the root components.\n * @returns Component instance whose view owns the DOM element or null if the element is not\n *    part of a component view.\n *\n * @publicApi\n */\nfunction getOwningComponent(elementOrDir) {\n  const context = getLContext(elementOrDir);\n  let lView = context ? context.lView : null;\n  if (lView === null) return null;\n  let parent;\n  while (lView[TVIEW].type === 2 /* TViewType.Embedded */ && (parent = getLViewParent(lView))) {\n    lView = parent;\n  }\n  return lView[FLAGS] & 512 /* LViewFlags.IsRoot */ ? null : lView[CONTEXT];\n}\n/**\n * Retrieves all root components associated with a DOM element, directive or component instance.\n * Root components are those which have been bootstrapped by Angular.\n *\n * @param elementOrDir DOM element, component or directive instance\n *    for which to retrieve the root components.\n * @returns Root components associated with the target object.\n *\n * @publicApi\n */\nfunction getRootComponents(elementOrDir) {\n  const lView = readPatchedLView(elementOrDir);\n  return lView !== null ? [getRootContext(lView)] : [];\n}\n/**\n * Retrieves an `Injector` associated with an element, component or directive instance.\n *\n * @param elementOrDir DOM element, component or directive instance for which to\n *    retrieve the injector.\n * @returns Injector associated with the element, component or directive instance.\n *\n * @publicApi\n */\nfunction getInjector(elementOrDir) {\n  const context = getLContext(elementOrDir);\n  const lView = context ? context.lView : null;\n  if (lView === null) return Injector.NULL;\n  const tNode = lView[TVIEW].data[context.nodeIndex];\n  return new NodeInjector(tNode, lView);\n}\n/**\n * Retrieve a set of injection tokens at a given DOM node.\n *\n * @param element Element for which the injection tokens should be retrieved.\n */\nfunction getInjectionTokens(element) {\n  const context = getLContext(element);\n  const lView = context ? context.lView : null;\n  if (lView === null) return [];\n  const tView = lView[TVIEW];\n  const tNode = tView.data[context.nodeIndex];\n  const providerTokens = [];\n  const startIndex = tNode.providerIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n  const endIndex = tNode.directiveEnd;\n  for (let i = startIndex; i < endIndex; i++) {\n    let value = tView.data[i];\n    if (isDirectiveDefHack(value)) {\n      // The fact that we sometimes store Type and sometimes DirectiveDef in this location is a\n      // design flaw.  We should always store same type so that we can be monomorphic. The issue\n      // is that for Components/Directives we store the def instead the type. The correct behavior\n      // is that we should always be storing injectable type in this location.\n      value = value.type;\n    }\n    providerTokens.push(value);\n  }\n  return providerTokens;\n}\n/**\n * Retrieves directive instances associated with a given DOM node. Does not include\n * component instances.\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <button my-button></button>\n *   <my-comp></my-comp>\n * </app-root>\n * ```\n *\n * Calling `getDirectives` on `<button>` will return an array with an instance of the `MyButton`\n * directive that is associated with the DOM node.\n *\n * Calling `getDirectives` on `<my-comp>` will return an empty array.\n *\n * @param node DOM node for which to get the directives.\n * @returns Array of directives associated with the node.\n *\n * @publicApi\n */\nfunction getDirectives(node) {\n  // Skip text nodes because we can't have directives associated with them.\n  if (node instanceof Text) {\n    return [];\n  }\n  const context = getLContext(node);\n  const lView = context ? context.lView : null;\n  if (lView === null) {\n    return [];\n  }\n  const tView = lView[TVIEW];\n  const nodeIndex = context.nodeIndex;\n  if (!tView?.data[nodeIndex]) {\n    return [];\n  }\n  if (context.directives === undefined) {\n    context.directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n  }\n  // The `directives` in this case are a named array called `LComponentView`. Clone the\n  // result so we don't expose an internal data structure in the user's console.\n  return context.directives === null ? [] : [...context.directives];\n}\n/**\n * Returns the debug (partial) metadata for a particular directive or component instance.\n * The function accepts an instance of a directive or component and returns the corresponding\n * metadata.\n *\n * @param directiveOrComponentInstance Instance of a directive or component\n * @returns metadata of the passed directive or component\n *\n * @publicApi\n */\nfunction getDirectiveMetadata$1(directiveOrComponentInstance) {\n  const {\n    constructor\n  } = directiveOrComponentInstance;\n  if (!constructor) {\n    throw new Error('Unable to find the instance constructor');\n  }\n  // In case a component inherits from a directive, we may have component and directive metadata\n  // To ensure we don't get the metadata of the directive, we want to call `getComponentDef` first.\n  const componentDef = getComponentDef(constructor);\n  if (componentDef) {\n    const inputs = extractInputDebugMetadata(componentDef.inputs);\n    return {\n      inputs,\n      outputs: componentDef.outputs,\n      encapsulation: componentDef.encapsulation,\n      changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Default\n    };\n  }\n  const directiveDef = getDirectiveDef(constructor);\n  if (directiveDef) {\n    const inputs = extractInputDebugMetadata(directiveDef.inputs);\n    return {\n      inputs,\n      outputs: directiveDef.outputs\n    };\n  }\n  return null;\n}\n/**\n * Retrieve map of local references.\n *\n * The references are retrieved as a map of local reference name to element or directive instance.\n *\n * @param target DOM element, component or directive instance for which to retrieve\n *    the local references.\n */\nfunction getLocalRefs(target) {\n  const context = getLContext(target);\n  if (context === null) return {};\n  if (context.localRefs === undefined) {\n    const lView = context.lView;\n    if (lView === null) {\n      return {};\n    }\n    context.localRefs = discoverLocalRefs(lView, context.nodeIndex);\n  }\n  return context.localRefs || {};\n}\n/**\n * Retrieves the host element of a component or directive instance.\n * The host element is the DOM element that matched the selector of the directive.\n *\n * @param componentOrDirective Component or directive instance for which the host\n *     element should be retrieved.\n * @returns Host element of the target.\n *\n * @publicApi\n */\nfunction getHostElement(componentOrDirective) {\n  return getLContext(componentOrDirective).native;\n}\n/**\n * Retrieves the rendered text for a given component.\n *\n * This function retrieves the host element of a component and\n * and then returns the `textContent` for that element. This implies\n * that the text returned will include re-projected content of\n * the component as well.\n *\n * @param component The component to return the content text for.\n */\nfunction getRenderedText(component) {\n  const hostElement = getHostElement(component);\n  return hostElement.textContent || '';\n}\n/**\n * Retrieves a list of event listeners associated with a DOM element. The list does include host\n * listeners, but it does not include event listeners defined outside of the Angular context\n * (e.g. through `addEventListener`).\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <div (click)=\"doSomething()\"></div>\n * </app-root>\n * ```\n *\n * Calling `getListeners` on `<div>` will return an object that looks as follows:\n *\n * ```ts\n * {\n *   name: 'click',\n *   element: <div>,\n *   callback: () => doSomething(),\n *   useCapture: false\n * }\n * ```\n *\n * @param element Element for which the DOM listeners should be retrieved.\n * @returns Array of event listeners on the DOM element.\n *\n * @publicApi\n */\nfunction getListeners(element) {\n  ngDevMode && assertDomElement(element);\n  const lContext = getLContext(element);\n  const lView = lContext === null ? null : lContext.lView;\n  if (lView === null) return [];\n  const tView = lView[TVIEW];\n  const lCleanup = lView[CLEANUP];\n  const tCleanup = tView.cleanup;\n  const listeners = [];\n  if (tCleanup && lCleanup) {\n    for (let i = 0; i < tCleanup.length;) {\n      const firstParam = tCleanup[i++];\n      const secondParam = tCleanup[i++];\n      if (typeof firstParam === 'string') {\n        const name = firstParam;\n        const listenerElement = unwrapRNode(lView[secondParam]);\n        const callback = lCleanup[tCleanup[i++]];\n        const useCaptureOrIndx = tCleanup[i++];\n        // if useCaptureOrIndx is boolean then report it as is.\n        // if useCaptureOrIndx is positive number then it in unsubscribe method\n        // if useCaptureOrIndx is negative number then it is a Subscription\n        const type = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0 ? 'dom' : 'output';\n        const useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;\n        if (element == listenerElement) {\n          listeners.push({\n            element,\n            name,\n            callback,\n            useCapture,\n            type\n          });\n        }\n      }\n    }\n  }\n  listeners.sort(sortListeners);\n  return listeners;\n}\nfunction sortListeners(a, b) {\n  if (a.name == b.name) return 0;\n  return a.name < b.name ? -1 : 1;\n}\n/**\n * This function should not exist because it is megamorphic and only mostly correct.\n *\n * See call site for more info.\n */\nfunction isDirectiveDefHack(obj) {\n  return obj.type !== undefined && obj.declaredInputs !== undefined && obj.findHostDirectiveDefs !== undefined;\n}\n/**\n * Retrieve the component `LView` from component/element.\n *\n * NOTE: `LView` is a private and should not be leaked outside.\n *       Don't export this method to `ng.*` on window.\n *\n * @param target DOM element or component instance for which to retrieve the LView.\n */\nfunction getComponentLView(target) {\n  const lContext = getLContext(target);\n  const nodeIndx = lContext.nodeIndex;\n  const lView = lContext.lView;\n  ngDevMode && assertLView(lView);\n  const componentLView = lView[nodeIndx];\n  ngDevMode && assertLView(componentLView);\n  return componentLView;\n}\n/** Asserts that a value is a DOM Element. */\nfunction assertDomElement(value) {\n  if (typeof Element !== 'undefined' && !(value instanceof Element)) {\n    throw new Error('Expecting instance of DOM Element');\n  }\n}\n/**\n * A directive definition holds additional metadata using bitwise flags to indicate\n * for example whether it is signal based.\n *\n * This information needs to be separate from the `publicName -> minifiedName`\n * mappings for backwards compatibility.\n */\nfunction extractInputDebugMetadata(inputs) {\n  const res = {};\n  for (const key in inputs) {\n    if (!inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    const value = inputs[key];\n    if (value === undefined) {\n      continue;\n    }\n    let minifiedName;\n    if (Array.isArray(value)) {\n      minifiedName = value[0];\n      // flags are not used for now.\n      // TODO: Consider exposing flag information in discovery.\n    } else {\n      minifiedName = value;\n    }\n    res[key] = minifiedName;\n  }\n  return res;\n}\n\n/**\n * Most of the use of `document` in Angular is from within the DI system so it is possible to simply\n * inject the `DOCUMENT` token and are done.\n *\n * Ivy is special because it does not rely upon the DI and must get hold of the document some other\n * way.\n *\n * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.\n * Wherever ivy needs the global document, it calls `getDocument()` instead.\n *\n * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to\n * tell ivy what the global `document` is.\n *\n * Angular does this for us in each of the standard platforms (`Browser` and `Server`)\n * by calling `setDocument()` when providing the `DOCUMENT` token.\n */\nlet DOCUMENT = undefined;\n/**\n * Tell ivy what the `document` is for this platform.\n *\n * It is only necessary to call this if the current platform is not a browser.\n *\n * @param document The object representing the global `document` in this environment.\n */\nfunction setDocument(document) {\n  DOCUMENT = document;\n}\n/**\n * Access the object that represents the `document` for this platform.\n *\n * Ivy calls this whenever it needs to access the `document` object.\n * For example to create the renderer or to do sanitization.\n */\nfunction getDocument() {\n  if (DOCUMENT !== undefined) {\n    return DOCUMENT;\n  } else if (typeof document !== 'undefined') {\n    return document;\n  }\n  throw new RuntimeError(210 /* RuntimeErrorCode.MISSING_DOCUMENT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);\n  // No \"document\" can be found. This should only happen if we are running ivy outside Angular and\n  // the current platform is not a browser. Since this is not a supported scenario at the moment\n  // this should not happen in Angular apps.\n  // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a\n  // public API.\n}\n\n/**\n * A DI token representing a string ID, used\n * primarily for prefixing application attributes and CSS styles when\n * {@link ViewEncapsulation#Emulated} is being used.\n *\n * The token is needed in cases when multiple applications are bootstrapped on a page\n * (for example, using `bootstrapApplication` calls). In this case, ensure that those applications\n * have different `APP_ID` value setup. For example:\n *\n * ```ts\n * bootstrapApplication(ComponentA, {\n *   providers: [\n *     { provide: APP_ID, useValue: 'app-a' },\n *     // ... other providers ...\n *   ]\n * });\n *\n * bootstrapApplication(ComponentB, {\n *   providers: [\n *     { provide: APP_ID, useValue: 'app-b' },\n *     // ... other providers ...\n *   ]\n * });\n * ```\n *\n * By default, when there is only one application bootstrapped, you don't need to provide the\n * `APP_ID` token (the `ng` will be used as an app ID).\n *\n * @publicApi\n */\nconst APP_ID = new InjectionToken(ngDevMode ? 'AppId' : '', {\n  providedIn: 'root',\n  factory: () => DEFAULT_APP_ID\n});\n/** Default value of the `APP_ID` token. */\nconst DEFAULT_APP_ID = 'ng';\n/**\n * A function that is executed when a platform is initialized.\n *\n * @deprecated from v19.0.0, use providePlatformInitializer instead\n *\n * @see {@link providePlatformInitializer}\n *\n * @publicApi\n */\nconst PLATFORM_INITIALIZER = new InjectionToken(ngDevMode ? 'Platform Initializer' : '');\n/**\n * A token that indicates an opaque platform ID.\n * @publicApi\n */\nconst PLATFORM_ID = new InjectionToken(ngDevMode ? 'Platform ID' : '', {\n  providedIn: 'platform',\n  factory: () => 'unknown' // set a default platform name, when none set explicitly\n});\n/**\n * A DI token that indicates the root directory of\n * the application\n * @publicApi\n * @deprecated\n */\nconst PACKAGE_ROOT_URL = new InjectionToken(ngDevMode ? 'Application Packages Root URL' : '');\n// We keep this token here, rather than the animations package, so that modules that only care\n// about which animations module is loaded (e.g. the CDK) can retrieve it without having to\n// include extra dependencies. See #44970 for more context.\n/**\n * A [DI token](api/core/InjectionToken) that indicates which animations\n * module has been loaded.\n * @publicApi\n */\nconst ANIMATION_MODULE_TYPE = new InjectionToken(ngDevMode ? 'AnimationModuleType' : '');\n// TODO(crisbeto): link to CSP guide here.\n/**\n * Token used to configure the [Content Security Policy](https://web.dev/strict-csp/) nonce that\n * Angular will apply when inserting inline styles. If not provided, Angular will look up its value\n * from the `ngCspNonce` attribute of the application root node.\n *\n * @publicApi\n */\nconst CSP_NONCE = new InjectionToken(ngDevMode ? 'CSP nonce' : '', {\n  providedIn: 'root',\n  factory: () => {\n    // Ideally we wouldn't have to use `querySelector` here since we know that the nonce will be on\n    // the root node, but because the token value is used in renderers, it has to be available\n    // *very* early in the bootstrapping process. This should be a fairly shallow search, because\n    // the app won't have been added to the DOM yet. Some approaches that were considered:\n    // 1. Find the root node through `ApplicationRef.components[i].location` - normally this would\n    // be enough for our purposes, but the token is injected very early so the `components` array\n    // isn't populated yet.\n    // 2. Find the root `LView` through the current `LView` - renderers are a prerequisite to\n    // creating the `LView`. This means that no `LView` will have been entered when this factory is\n    // invoked for the root component.\n    // 3. Have the token factory return `() => string` which is invoked when a nonce is requested -\n    // the slightly later execution does allow us to get an `LView` reference, but the fact that\n    // it is a function means that it could be executed at *any* time (including immediately) which\n    // may lead to weird bugs.\n    // 4. Have the `ComponentFactory` read the attribute and provide it to the injector under the\n    // hood - has the same problem as #1 and #2 in that the renderer is used to query for the root\n    // node and the nonce value needs to be available when the renderer is created.\n    return getDocument().body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce') || null;\n  }\n});\nconst IMAGE_CONFIG_DEFAULTS = {\n  breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n  placeholderResolution: 30,\n  disableImageSizeWarning: false,\n  disableImageLazyLoadWarning: false\n};\n/**\n * Injection token that configures the image optimized image functionality.\n * See {@link ImageConfig} for additional information about parameters that\n * can be used.\n *\n * @see {@link NgOptimizedImage}\n * @see {@link ImageConfig}\n * @publicApi\n */\nconst IMAGE_CONFIG = new InjectionToken(ngDevMode ? 'ImageConfig' : '', {\n  providedIn: 'root',\n  factory: () => IMAGE_CONFIG_DEFAULTS\n});\n\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```ts\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * @publicApi\n */\nfunction makeStateKey(key) {\n  return key;\n}\nfunction initTransferState() {\n  const transferState = new TransferState();\n  if (inject(PLATFORM_ID) === 'browser') {\n    transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));\n  }\n  return transferState;\n}\n/**\n * A key value store that is transferred from the application on the server side to the application\n * on the client side.\n *\n * The `TransferState` is available as an injectable token.\n * On the client, just inject this token using DI and use it, it will be lazily initialized.\n * On the server it's already included if `renderApplication` function is used. Otherwise, import\n * the `ServerTransferStateModule` module to make the `TransferState` available.\n *\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\n * boolean, number, string, null and non-class objects will be serialized and deserialized in a\n * non-lossy manner.\n *\n * @publicApi\n */\nclass TransferState {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: TransferState,\n    providedIn: 'root',\n    factory: initTransferState\n  });\n  /** @internal */\n  store = {};\n  onSerializeCallbacks = {};\n  /**\n   * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n   */\n  get(key, defaultValue) {\n    return this.store[key] !== undefined ? this.store[key] : defaultValue;\n  }\n  /**\n   * Set the value corresponding to a key.\n   */\n  set(key, value) {\n    this.store[key] = value;\n  }\n  /**\n   * Remove a key from the store.\n   */\n  remove(key) {\n    delete this.store[key];\n  }\n  /**\n   * Test whether a key exists in the store.\n   */\n  hasKey(key) {\n    return this.store.hasOwnProperty(key);\n  }\n  /**\n   * Indicates whether the state is empty.\n   */\n  get isEmpty() {\n    return Object.keys(this.store).length === 0;\n  }\n  /**\n   * Register a callback to provide the value for a key when `toJson` is called.\n   */\n  onSerialize(key, callback) {\n    this.onSerializeCallbacks[key] = callback;\n  }\n  /**\n   * Serialize the current state of the store to JSON.\n   */\n  toJson() {\n    // Call the onSerialize callbacks and put those values into the store.\n    for (const key in this.onSerializeCallbacks) {\n      if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n        try {\n          this.store[key] = this.onSerializeCallbacks[key]();\n        } catch (e) {\n          console.warn('Exception in onSerialize callback: ', e);\n        }\n      }\n    }\n    // Escape script tag to avoid break out of <script> tag in serialized output.\n    // Encoding of `<` is the same behaviour as G3 script_builders.\n    return JSON.stringify(this.store).replace(/</g, '\\\\u003C');\n  }\n}\nfunction retrieveTransferredState(doc, appId) {\n  // Locate the script tag with the JSON data transferred from the server.\n  // The id of the script tag is set to the Angular appId + 'state'.\n  const script = doc.getElementById(appId + '-state');\n  if (script?.textContent) {\n    try {\n      // Avoid using any here as it triggers lint errors in google3 (any is not allowed).\n      // Decoding of `<` is done of the box by browsers and node.js, same behaviour as G3\n      // script_builders.\n      return JSON.parse(script.textContent);\n    } catch (e) {\n      console.warn('Exception while restoring TransferState for app ' + appId, e);\n    }\n  }\n  return {};\n}\n\n/** Encodes that the node lookup should start from the host node of this component. */\nconst REFERENCE_NODE_HOST = 'h';\n/** Encodes that the node lookup should start from the document body node. */\nconst REFERENCE_NODE_BODY = 'b';\n/**\n * Describes navigation steps that the runtime logic need to perform,\n * starting from a given (known) element.\n */\nvar NodeNavigationStep;\n(function (NodeNavigationStep) {\n  NodeNavigationStep[\"FirstChild\"] = \"f\";\n  NodeNavigationStep[\"NextSibling\"] = \"n\";\n})(NodeNavigationStep || (NodeNavigationStep = {}));\n/**\n * Keys within serialized view data structure to represent various\n * parts. See the `SerializedView` interface below for additional information.\n */\nconst ELEMENT_CONTAINERS = 'e';\nconst TEMPLATES = 't';\nconst CONTAINERS = 'c';\nconst MULTIPLIER = 'x';\nconst NUM_ROOT_NODES = 'r';\nconst TEMPLATE_ID = 'i'; // as it's also an \"id\"\nconst NODES = 'n';\nconst DISCONNECTED_NODES = 'd';\nconst I18N_DATA = 'l';\nconst DEFER_BLOCK_ID = 'di';\nconst DEFER_BLOCK_STATE$1 = 's';\nconst DEFER_PARENT_BLOCK_ID = 'p';\nconst DEFER_HYDRATE_TRIGGERS = 't';\nconst DEFER_PREFETCH_TRIGGERS = 'pt';\n\n/**\n * Internal token that specifies whether DOM reuse logic\n * during hydration is enabled.\n */\nconst IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_HYDRATION_DOM_REUSE_ENABLED' : '');\n// By default (in client rendering mode), we remove all the contents\n// of the host element and render an application after that.\nconst PRESERVE_HOST_CONTENT_DEFAULT = false;\n/**\n * Internal token that indicates whether host element content should be\n * retained during the bootstrap.\n */\nconst PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'PRESERVE_HOST_CONTENT' : '', {\n  providedIn: 'root',\n  factory: () => PRESERVE_HOST_CONTENT_DEFAULT\n});\n/**\n * Internal token that indicates whether hydration support for i18n\n * is enabled.\n */\nconst IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');\n/**\n * Internal token that indicates whether event replay support for SSR\n * is enabled.\n */\nconst IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');\nconst EVENT_REPLAY_ENABLED_DEFAULT = false;\n/**\n * Internal token that indicates whether incremental hydration support\n * is enabled.\n */\nconst IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');\n/**\n * A map of DOM elements with `jsaction` attributes grouped by action names.\n */\nconst JSACTION_BLOCK_ELEMENT_MAP = new InjectionToken(ngDevMode ? 'JSACTION_BLOCK_ELEMENT_MAP' : '', {\n  providedIn: 'root',\n  factory: () => new Map()\n});\n\n/** Actions that are supported by the tracing framework. */\nvar TracingAction;\n(function (TracingAction) {\n  TracingAction[TracingAction[\"CHANGE_DETECTION\"] = 0] = \"CHANGE_DETECTION\";\n  TracingAction[TracingAction[\"AFTER_NEXT_RENDER\"] = 1] = \"AFTER_NEXT_RENDER\";\n})(TracingAction || (TracingAction = {}));\n/**\n * Injection token for a `TracingService`, optionally provided.\n */\nconst TracingService = new InjectionToken(ngDevMode ? 'TracingService' : '');\nconst markedFeatures = new Set();\n// tslint:disable:ban\n/**\n * A guarded `performance.mark` for feature marking.\n *\n * This method exists because while all supported browser and node.js version supported by Angular\n * support performance.mark API. This is not the case for other environments such as JSDOM and\n * Cloudflare workers.\n */\nfunction performanceMarkFeature(feature) {\n  if (markedFeatures.has(feature)) {\n    return;\n  }\n  markedFeatures.add(feature);\n  performance?.mark?.('mark_feature_usage', {\n    detail: {\n      feature\n    }\n  });\n}\n\n/**\n * Asserts that the current stack frame is not within a reactive context. Useful\n * to disallow certain code from running inside a reactive context (see {@link toSignal}).\n *\n * @param debugFn a reference to the function making the assertion (used for the error message).\n *\n * @publicApi\n */\nfunction assertNotInReactiveContext(debugFn, extraContext) {\n  // Taking a `Function` instead of a string name here prevents the un-minified name of the function\n  // from being retained in the bundle regardless of minification.\n  if (getActiveConsumer$1() !== null) {\n    throw new RuntimeError(-602 /* RuntimeErrorCode.ASSERTION_NOT_INSIDE_REACTIVE_CONTEXT */, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);\n  }\n}\n\n/**\n * The phase to run an `afterRender` or `afterNextRender` callback in.\n *\n * Callbacks in the same phase run in the order they are registered. Phases run in the\n * following order after each render:\n *\n *   1. `AfterRenderPhase.EarlyRead`\n *   2. `AfterRenderPhase.Write`\n *   3. `AfterRenderPhase.MixedReadWrite`\n *   4. `AfterRenderPhase.Read`\n *\n * Angular is unable to verify or enforce that phases are used correctly, and instead\n * relies on each developer to follow the guidelines documented for each value and\n * carefully choose the appropriate one, refactoring their code if necessary. By doing\n * so, Angular is better able to minimize the performance degradation associated with\n * manual DOM access, ensuring the best experience for the end users of your application\n * or library.\n *\n * @deprecated Specify the phase for your callback to run in by passing a spec-object as the first\n *   parameter to `afterRender` or `afterNextRender` instead of a function.\n */\nvar AfterRenderPhase;\n(function (AfterRenderPhase) {\n  /**\n   * Use `AfterRenderPhase.EarlyRead` for callbacks that only need to **read** from the\n   * DOM before a subsequent `AfterRenderPhase.Write` callback, for example to perform\n   * custom layout that the browser doesn't natively support. Prefer the\n   * `AfterRenderPhase.EarlyRead` phase if reading can wait until after the write phase.\n   * **Never** write to the DOM in this phase.\n   *\n   * <div class=\"docs-alert docs-alert-important\">\n   *\n   * Using this value can degrade performance.\n   * Instead, prefer using built-in browser functionality when possible.\n   *\n   * </div>\n   */\n  AfterRenderPhase[AfterRenderPhase[\"EarlyRead\"] = 0] = \"EarlyRead\";\n  /**\n   * Use `AfterRenderPhase.Write` for callbacks that only **write** to the DOM. **Never**\n   * read from the DOM in this phase.\n   */\n  AfterRenderPhase[AfterRenderPhase[\"Write\"] = 1] = \"Write\";\n  /**\n   * Use `AfterRenderPhase.MixedReadWrite` for callbacks that read from or write to the\n   * DOM, that haven't been refactored to use a different phase. **Never** use this phase if\n   * it is possible to divide the work among the other phases instead.\n   *\n   * <div class=\"docs-alert docs-alert-critical\">\n   *\n   * Using this value can **significantly** degrade performance.\n   * Instead, prefer dividing work into the appropriate phase callbacks.\n   *\n   * </div>\n   */\n  AfterRenderPhase[AfterRenderPhase[\"MixedReadWrite\"] = 2] = \"MixedReadWrite\";\n  /**\n   * Use `AfterRenderPhase.Read` for callbacks that only **read** from the DOM. **Never**\n   * write to the DOM in this phase.\n   */\n  AfterRenderPhase[AfterRenderPhase[\"Read\"] = 3] = \"Read\";\n})(AfterRenderPhase || (AfterRenderPhase = {}));\nclass AfterRenderManager {\n  impl = null;\n  execute() {\n    this.impl?.execute();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: AfterRenderManager,\n    providedIn: 'root',\n    factory: () => new AfterRenderManager()\n  });\n}\nconst AFTER_RENDER_PHASES = /* @__PURE__ **/(() => [AfterRenderPhase.EarlyRead, AfterRenderPhase.Write, AfterRenderPhase.MixedReadWrite, AfterRenderPhase.Read])();\nclass AfterRenderImpl {\n  ngZone = inject(NgZone);\n  scheduler = inject(ChangeDetectionScheduler);\n  errorHandler = inject(ErrorHandler, {\n    optional: true\n  });\n  /** Current set of active sequences. */\n  sequences = new Set();\n  /** Tracks registrations made during the current set of executions. */\n  deferredRegistrations = new Set();\n  /** Whether the `AfterRenderManager` is currently executing hooks. */\n  executing = false;\n  constructor() {\n    // Inject the tracing service to make sure it's initialized.\n    inject(TracingService, {\n      optional: true\n    });\n  }\n  /**\n   * Run the sequence of phases of hooks, once through. As a result of executing some hooks, more\n   * might be scheduled.\n   */\n  execute() {\n    this.executing = true;\n    for (const phase of AFTER_RENDER_PHASES) {\n      for (const sequence of this.sequences) {\n        if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {\n          continue;\n        }\n        try {\n          sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => sequence.hooks[phase](sequence.pipelinedValue), sequence.snapshot));\n        } catch (err) {\n          sequence.erroredOrDestroyed = true;\n          this.errorHandler?.handleError(err);\n        }\n      }\n    }\n    this.executing = false;\n    // Cleanup step to reset sequence state and also collect one-shot sequences for removal.\n    for (const sequence of this.sequences) {\n      sequence.afterRun();\n      if (sequence.once) {\n        this.sequences.delete(sequence);\n        // Destroy the sequence so its on destroy callbacks can be cleaned up\n        // immediately, instead of waiting until the injector is destroyed.\n        sequence.destroy();\n      }\n    }\n    for (const sequence of this.deferredRegistrations) {\n      this.sequences.add(sequence);\n    }\n    if (this.deferredRegistrations.size > 0) {\n      this.scheduler.notify(8 /* NotificationSource.DeferredRenderHook */);\n    }\n    this.deferredRegistrations.clear();\n  }\n  register(sequence) {\n    if (!this.executing) {\n      this.sequences.add(sequence);\n      // Trigger an `ApplicationRef.tick()` if one is not already pending/running, because we have a\n      // new render hook that needs to run.\n      this.scheduler.notify(7 /* NotificationSource.RenderHook */);\n    } else {\n      this.deferredRegistrations.add(sequence);\n    }\n  }\n  unregister(sequence) {\n    if (this.executing && this.sequences.has(sequence)) {\n      // We can't remove an `AfterRenderSequence` in the middle of iteration.\n      // Instead, mark it as destroyed so it doesn't run any more, and mark it as one-shot so it'll\n      // be removed at the end of the current execution.\n      sequence.erroredOrDestroyed = true;\n      sequence.pipelinedValue = undefined;\n      sequence.once = true;\n    } else {\n      // It's safe to directly remove this sequence.\n      this.sequences.delete(sequence);\n      this.deferredRegistrations.delete(sequence);\n    }\n  }\n  maybeTrace(fn, snapshot) {\n    // Only trace the execution if the snapshot is defined.\n    return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: AfterRenderImpl,\n    providedIn: 'root',\n    factory: () => new AfterRenderImpl()\n  });\n}\nclass AfterRenderSequence {\n  impl;\n  hooks;\n  once;\n  snapshot;\n  /**\n   * Whether this sequence errored or was destroyed during this execution, and hooks should no\n   * longer run for it.\n   */\n  erroredOrDestroyed = false;\n  /**\n   * The value returned by the last hook execution (if any), ready to be pipelined into the next\n   * one.\n   */\n  pipelinedValue = undefined;\n  unregisterOnDestroy;\n  constructor(impl, hooks, once, destroyRef, snapshot = null) {\n    this.impl = impl;\n    this.hooks = hooks;\n    this.once = once;\n    this.snapshot = snapshot;\n    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n  }\n  afterRun() {\n    this.erroredOrDestroyed = false;\n    this.pipelinedValue = undefined;\n    // Clear the tracing snapshot after the initial run. This snapshot only\n    // associates the initial run of the hook with the context that created it.\n    // Follow-up runs are independent of that initial context and have different\n    // triggers.\n    this.snapshot?.dispose();\n    this.snapshot = null;\n  }\n  destroy() {\n    this.impl.unregister(this);\n    this.unregisterOnDestroy?.();\n  }\n}\nfunction afterRender(callbackOrSpec, options) {\n  ngDevMode && assertNotInReactiveContext(afterRender, 'Call `afterRender` outside of a reactive context. For example, schedule the render ' + 'callback inside the component constructor`.');\n  !options?.injector && assertInInjectionContext(afterRender);\n  const injector = options?.injector ?? inject(Injector);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  performanceMarkFeature('NgAfterRender');\n  return afterRenderImpl(callbackOrSpec, injector, options, /* once */false);\n}\nfunction afterNextRender(callbackOrSpec, options) {\n  !options?.injector && assertInInjectionContext(afterNextRender);\n  const injector = options?.injector ?? inject(Injector);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  performanceMarkFeature('NgAfterNextRender');\n  return afterRenderImpl(callbackOrSpec, injector, options, /* once */true);\n}\nfunction getHooks(callbackOrSpec, phase) {\n  if (callbackOrSpec instanceof Function) {\n    const hooks = [undefined, undefined, undefined, undefined];\n    hooks[phase] = callbackOrSpec;\n    return hooks;\n  } else {\n    return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];\n  }\n}\n/**\n * Shared implementation for `afterRender` and `afterNextRender`.\n */\nfunction afterRenderImpl(callbackOrSpec, injector, options, once) {\n  const manager = injector.get(AfterRenderManager);\n  // Lazily initialize the handler implementation, if necessary. This is so that it can be\n  // tree-shaken if `afterRender` and `afterNextRender` aren't used.\n  manager.impl ??= injector.get(AfterRenderImpl);\n  const tracing = injector.get(TracingService, null, {\n    optional: true\n  });\n  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;\n  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef, tracing?.snapshot(null));\n  manager.impl.register(sequence);\n  return sequence;\n}\n/** `AfterRenderRef` that does nothing. */\nconst NOOP_AFTER_RENDER_REF = {\n  destroy() {}\n};\n\n/**\n * Describes the state of defer block dependency loading.\n */\nvar DeferDependenciesLoadingState;\n(function (DeferDependenciesLoadingState) {\n  /** Initial state, dependency loading is not yet triggered */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"NOT_STARTED\"] = 0] = \"NOT_STARTED\";\n  /** Dependency loading is in progress */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"IN_PROGRESS\"] = 1] = \"IN_PROGRESS\";\n  /** Dependency loading has completed successfully */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"COMPLETE\"] = 2] = \"COMPLETE\";\n  /** Dependency loading has failed */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"FAILED\"] = 3] = \"FAILED\";\n})(DeferDependenciesLoadingState || (DeferDependenciesLoadingState = {}));\n/** Slot index where `minimum` parameter value is stored. */\nconst MINIMUM_SLOT = 0;\n/** Slot index where `after` parameter value is stored. */\nconst LOADING_AFTER_SLOT = 1;\n/**\n * Describes the current state of this defer block instance.\n *\n * @publicApi\n */\nvar DeferBlockState;\n(function (DeferBlockState) {\n  /** The placeholder block content is rendered */\n  DeferBlockState[DeferBlockState[\"Placeholder\"] = 0] = \"Placeholder\";\n  /** The loading block content is rendered */\n  DeferBlockState[DeferBlockState[\"Loading\"] = 1] = \"Loading\";\n  /** The main content block content is rendered */\n  DeferBlockState[DeferBlockState[\"Complete\"] = 2] = \"Complete\";\n  /** The error block content is rendered */\n  DeferBlockState[DeferBlockState[\"Error\"] = 3] = \"Error\";\n})(DeferBlockState || (DeferBlockState = {}));\n/**\n * Describes the initial state of this defer block instance.\n *\n * Note: this state is internal only and *must* be represented\n * with a number lower than any value in the `DeferBlockState` enum.\n */\nvar DeferBlockInternalState;\n(function (DeferBlockInternalState) {\n  /** Initial state. Nothing is rendered yet. */\n  DeferBlockInternalState[DeferBlockInternalState[\"Initial\"] = -1] = \"Initial\";\n})(DeferBlockInternalState || (DeferBlockInternalState = {}));\nconst NEXT_DEFER_BLOCK_STATE = 0;\n// Note: it's *important* to keep the state in this slot, because this slot\n// is used by runtime logic to differentiate between LViews, LContainers and\n// other types (see `isLView` and `isLContainer` functions). In case of defer\n// blocks, this slot would always be a number.\nconst DEFER_BLOCK_STATE = 1;\nconst STATE_IS_FROZEN_UNTIL = 2;\nconst LOADING_AFTER_CLEANUP_FN = 3;\nconst TRIGGER_CLEANUP_FNS = 4;\nconst PREFETCH_TRIGGER_CLEANUP_FNS = 5;\nconst SSR_UNIQUE_ID = 6;\nconst SSR_BLOCK_STATE = 7;\nconst ON_COMPLETE_FNS = 8;\nconst HYDRATE_TRIGGER_CLEANUP_FNS = 9;\n/**\n * Options for configuring defer blocks behavior.\n * @publicApi\n */\nvar DeferBlockBehavior;\n(function (DeferBlockBehavior) {\n  /**\n   * Manual triggering mode for defer blocks. Provides control over when defer blocks render\n   * and which state they render.\n   */\n  DeferBlockBehavior[DeferBlockBehavior[\"Manual\"] = 0] = \"Manual\";\n  /**\n   * Playthrough mode for defer blocks. This mode behaves like defer blocks would in a browser.\n   * This is the default behavior in test environments.\n   */\n  DeferBlockBehavior[DeferBlockBehavior[\"Playthrough\"] = 1] = \"Playthrough\";\n})(DeferBlockBehavior || (DeferBlockBehavior = {}));\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Registers a cleanup function associated with a prefetching trigger\n * or a regular trigger of a defer block.\n */\nfunction storeTriggerCleanupFn(type, lDetails, cleanupFn) {\n  const key = getCleanupFnKeyByType(type);\n  if (lDetails[key] === null) {\n    lDetails[key] = [];\n  }\n  lDetails[key].push(cleanupFn);\n}\n/**\n * Invokes registered cleanup functions either for prefetch or for regular triggers.\n */\nfunction invokeTriggerCleanupFns(type, lDetails) {\n  const key = getCleanupFnKeyByType(type);\n  const cleanupFns = lDetails[key];\n  if (cleanupFns !== null) {\n    for (const cleanupFn of cleanupFns) {\n      cleanupFn();\n    }\n    lDetails[key] = null;\n  }\n}\n/**\n * Invokes registered cleanup functions for prefetch, hydrate, and regular triggers.\n */\nfunction invokeAllTriggerCleanupFns(lDetails) {\n  invokeTriggerCleanupFns(1 /* TriggerType.Prefetch */, lDetails);\n  invokeTriggerCleanupFns(0 /* TriggerType.Regular */, lDetails);\n  invokeTriggerCleanupFns(2 /* TriggerType.Hydrate */, lDetails);\n}\nfunction getCleanupFnKeyByType(type) {\n  let key = TRIGGER_CLEANUP_FNS;\n  if (type === 1 /* TriggerType.Prefetch */) {\n    key = PREFETCH_TRIGGER_CLEANUP_FNS;\n  } else if (type === 2 /* TriggerType.Hydrate */) {\n    key = HYDRATE_TRIGGER_CLEANUP_FNS;\n  }\n  return key;\n}\n\n/**\n * Calculates a data slot index for defer block info (either static or\n * instance-specific), given an index of a defer instruction.\n */\nfunction getDeferBlockDataIndex(deferBlockIndex) {\n  // Instance state is located at the *next* position\n  // after the defer block slot in an LView or TView.data.\n  return deferBlockIndex + 1;\n}\n/** Retrieves a defer block state from an LView, given a TNode that represents a block. */\nfunction getLDeferBlockDetails(lView, tNode) {\n  const tView = lView[TVIEW];\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  return lView[slotIndex];\n}\n/** Stores a defer block instance state in LView. */\nfunction setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {\n  const tView = lView[TVIEW];\n  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  lView[slotIndex] = lDetails;\n}\n/** Retrieves static info about a defer block, given a TView and a TNode that represents a block. */\nfunction getTDeferBlockDetails(tView, tNode) {\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  return tView.data[slotIndex];\n}\n/** Stores a defer block static info in `TView.data`. */\nfunction setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {\n  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  tView.data[slotIndex] = deferBlockConfig;\n}\nfunction getTemplateIndexForState(newState, hostLView, tNode) {\n  const tView = hostLView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  switch (newState) {\n    case DeferBlockState.Complete:\n      return tDetails.primaryTmplIndex;\n    case DeferBlockState.Loading:\n      return tDetails.loadingTmplIndex;\n    case DeferBlockState.Error:\n      return tDetails.errorTmplIndex;\n    case DeferBlockState.Placeholder:\n      return tDetails.placeholderTmplIndex;\n    default:\n      ngDevMode && throwError(`Unexpected defer block state: ${newState}`);\n      return null;\n  }\n}\n/**\n * Returns a minimum amount of time that a given state should be rendered for,\n * taking into account `minimum` parameter value. If the `minimum` value is\n * not specified - returns `null`.\n */\nfunction getMinimumDurationForState(tDetails, currentState) {\n  if (currentState === DeferBlockState.Placeholder) {\n    return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;\n  } else if (currentState === DeferBlockState.Loading) {\n    return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;\n  }\n  return null;\n}\n/** Retrieves the value of the `after` parameter on the @loading block. */\nfunction getLoadingBlockAfter(tDetails) {\n  return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;\n}\n/**\n * Adds downloaded dependencies into a directive or a pipe registry,\n * making sure that a dependency doesn't yet exist in the registry.\n */\nfunction addDepsToRegistry(currentDeps, newDeps) {\n  if (!currentDeps || currentDeps.length === 0) {\n    return newDeps;\n  }\n  const currentDepSet = new Set(currentDeps);\n  for (const dep of newDeps) {\n    currentDepSet.add(dep);\n  }\n  // If `currentDeps` is the same length, there were no new deps and can\n  // return the original array.\n  return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);\n}\n/** Retrieves a TNode that represents main content of a defer block. */\nfunction getPrimaryBlockTNode(tView, tDetails) {\n  const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;\n  return getTNode(tView, adjustedIndex);\n}\n/**\n * Asserts whether all dependencies for a defer block are loaded.\n * Always run this function (in dev mode) before rendering a defer\n * block in completed state.\n */\nfunction assertDeferredDependenciesLoaded(tDetails) {\n  assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, 'Expecting all deferred dependencies to be loaded.');\n}\n/**\n * Determines if a given value matches the expected structure of a defer block\n *\n * We can safely rely on the primaryTmplIndex because every defer block requires\n * that a primary template exists. All the other template options are optional.\n */\nfunction isTDeferBlockDetails(value) {\n  return value !== null && typeof value === 'object' && typeof value.primaryTmplIndex === 'number';\n}\n/**\n * Whether a given TNode represents a defer block.\n */\nfunction isDeferBlock(tView, tNode) {\n  let tDetails = null;\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  // Check if a slot index is in the reasonable range.\n  // Note: we do `-1` on the right border, since defer block details are stored\n  // in the `n+1` slot, see `getDeferBlockDataIndex` for more info.\n  if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {\n    tDetails = getTDeferBlockDetails(tView, tNode);\n  }\n  return !!tDetails && isTDeferBlockDetails(tDetails);\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/** Configuration object used to register passive and capturing events. */\nconst eventListenerOptions = {\n  passive: true,\n  capture: true\n};\n/** Keeps track of the currently-registered `on hover` triggers. */\nconst hoverTriggers = new WeakMap();\n/** Keeps track of the currently-registered `on interaction` triggers. */\nconst interactionTriggers = new WeakMap();\n/** Currently-registered `viewport` triggers. */\nconst viewportTriggers = new WeakMap();\n/** Names of the events considered as interaction events. */\nconst interactionEventNames = ['click', 'keydown'];\n/** Names of the events considered as hover events. */\nconst hoverEventNames = ['mouseenter', 'mouseover', 'focusin'];\n/** `IntersectionObserver` used to observe `viewport` triggers. */\nlet intersectionObserver = null;\n/** Number of elements currently observed with `viewport` triggers. */\nlet observedViewportElements = 0;\n/** Object keeping track of registered callbacks for a deferred block trigger. */\nclass DeferEventEntry {\n  callbacks = new Set();\n  listener = () => {\n    for (const callback of this.callbacks) {\n      callback();\n    }\n  };\n}\n/**\n * Registers an interaction trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger is interacted with.\n */\nfunction onInteraction(trigger, callback) {\n  let entry = interactionTriggers.get(trigger);\n  // If this is the first entry for this element, add the listeners.\n  if (!entry) {\n    // Note that managing events centrally like this lends itself well to using global\n    // event delegation. It currently does delegation at the element level, rather than the\n    // document level, because:\n    // 1. Global delegation is the most effective when there are a lot of events being registered\n    // at the same time. Deferred blocks are unlikely to be used in such a way.\n    // 2. Matching events to their target isn't free. For each `click` and `keydown` event we\n    // would have look through all the triggers and check if the target either is the element\n    // itself or it's contained within the element. Given that `click` and `keydown` are some\n    // of the most common events, this may end up introducing a lot of runtime overhead.\n    // 3. We're still registering only two events per element, no matter how many deferred blocks\n    // are referencing it.\n    entry = new DeferEventEntry();\n    interactionTriggers.set(trigger, entry);\n    for (const name of interactionEventNames) {\n      trigger.addEventListener(name, entry.listener, eventListenerOptions);\n    }\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    const {\n      callbacks,\n      listener\n    } = entry;\n    callbacks.delete(callback);\n    if (callbacks.size === 0) {\n      interactionTriggers.delete(trigger);\n      for (const name of interactionEventNames) {\n        trigger.removeEventListener(name, listener, eventListenerOptions);\n      }\n    }\n  };\n}\n/**\n * Registers a hover trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger is hovered over.\n */\nfunction onHover(trigger, callback) {\n  let entry = hoverTriggers.get(trigger);\n  // If this is the first entry for this element, add the listener.\n  if (!entry) {\n    entry = new DeferEventEntry();\n    hoverTriggers.set(trigger, entry);\n    for (const name of hoverEventNames) {\n      trigger.addEventListener(name, entry.listener, eventListenerOptions);\n    }\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    const {\n      callbacks,\n      listener\n    } = entry;\n    callbacks.delete(callback);\n    if (callbacks.size === 0) {\n      for (const name of hoverEventNames) {\n        trigger.removeEventListener(name, listener, eventListenerOptions);\n      }\n      hoverTriggers.delete(trigger);\n    }\n  };\n}\n/**\n * Registers a viewport trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger comes into the viewport.\n * @param injector Injector that can be used by the trigger to resolve DI tokens.\n */\nfunction onViewport(trigger, callback, injector) {\n  const ngZone = injector.get(NgZone);\n  let entry = viewportTriggers.get(trigger);\n  intersectionObserver = intersectionObserver || ngZone.runOutsideAngular(() => {\n    return new IntersectionObserver(entries => {\n      for (const current of entries) {\n        // Only invoke the callbacks if the specific element is intersecting.\n        if (current.isIntersecting && viewportTriggers.has(current.target)) {\n          ngZone.run(viewportTriggers.get(current.target).listener);\n        }\n      }\n    });\n  });\n  if (!entry) {\n    entry = new DeferEventEntry();\n    ngZone.runOutsideAngular(() => intersectionObserver.observe(trigger));\n    viewportTriggers.set(trigger, entry);\n    observedViewportElements++;\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    // It's possible that a different cleanup callback fully removed this element already.\n    if (!viewportTriggers.has(trigger)) {\n      return;\n    }\n    entry.callbacks.delete(callback);\n    if (entry.callbacks.size === 0) {\n      intersectionObserver?.unobserve(trigger);\n      viewportTriggers.delete(trigger);\n      observedViewportElements--;\n    }\n    if (observedViewportElements === 0) {\n      intersectionObserver?.disconnect();\n      intersectionObserver = null;\n    }\n  };\n}\n/**\n * Helper function to get the LView in which a deferred block's trigger is rendered.\n * @param deferredHostLView LView in which the deferred block is defined.\n * @param deferredTNode TNode defining the deferred block.\n * @param walkUpTimes Number of times to go up in the view hierarchy to find the trigger's view.\n *   A negative value means that the trigger is inside the block's placeholder, while an undefined\n *   value means that the trigger is in the same LView as the deferred block.\n */\nfunction getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {\n  // The trigger is in the same view, we don't need to traverse.\n  if (walkUpTimes == null) {\n    return deferredHostLView;\n  }\n  // A positive value or zero means that the trigger is in a parent view.\n  if (walkUpTimes >= 0) {\n    return walkUpViews(walkUpTimes, deferredHostLView);\n  }\n  // If the value is negative, it means that the trigger is inside the placeholder.\n  const deferredContainer = deferredHostLView[deferredTNode.index];\n  ngDevMode && assertLContainer(deferredContainer);\n  const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;\n  // We need to null check, because the placeholder might not have been rendered yet.\n  if (ngDevMode && triggerLView !== null) {\n    const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);\n    const renderedState = lDetails[DEFER_BLOCK_STATE];\n    assertEqual(renderedState, DeferBlockState.Placeholder, 'Expected a placeholder to be rendered in this defer block.');\n    assertLView(triggerLView);\n  }\n  return triggerLView;\n}\n/**\n * Gets the element that a deferred block's trigger is pointing to.\n * @param triggerLView LView in which the trigger is defined.\n * @param triggerIndex Index at which the trigger element should've been rendered.\n */\nfunction getTriggerElement(triggerLView, triggerIndex) {\n  const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);\n  ngDevMode && assertElement(element);\n  return element;\n}\n/**\n * Registers a DOM-node based trigger.\n * @param initialLView LView in which the defer block is rendered.\n * @param tNode TNode representing the defer block.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to go up/down in the view hierarchy to find the trigger.\n * @param registerFn Function that will register the DOM events.\n * @param callback Callback to be invoked when the trigger receives the event that should render\n *     the deferred block.\n * @param type Trigger type to distinguish between regular and prefetch triggers.\n */\nfunction registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type) {\n  const injector = initialLView[INJECTOR];\n  const zone = injector.get(NgZone);\n  function pollDomTrigger() {\n    // If the initial view was destroyed, we don't need to do anything.\n    if (isDestroyed(initialLView)) {\n      return;\n    }\n    const lDetails = getLDeferBlockDetails(initialLView, tNode);\n    const renderedState = lDetails[DEFER_BLOCK_STATE];\n    // If the block was loaded before the trigger was resolved, we don't need to do anything.\n    if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {\n      return;\n    }\n    const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);\n    // Keep polling until we resolve the trigger's LView.\n    if (!triggerLView) {\n      afterNextRender({\n        read: pollDomTrigger\n      }, {\n        injector\n      });\n      return;\n    }\n    // It's possible that the trigger's view was destroyed before we resolved the trigger element.\n    if (isDestroyed(triggerLView)) {\n      return;\n    }\n    const element = getTriggerElement(triggerLView, triggerIndex);\n    const cleanup = registerFn(element, () => {\n      // `pollDomTrigger` runs outside the zone (because of `afterNextRender`) and registers its\n      // listeners outside the zone, so we jump back into the zone prior to running the callback.\n      zone.run(() => {\n        if (initialLView !== triggerLView) {\n          removeLViewOnDestroy(triggerLView, cleanup);\n        }\n        callback();\n      });\n    }, injector);\n    // The trigger and deferred block might be in different LViews.\n    // For the main LView the cleanup would happen as a part of\n    // `storeTriggerCleanupFn` logic. For trigger LView we register\n    // a cleanup function there to remove event handlers in case an\n    // LView gets destroyed before a trigger is invoked.\n    if (initialLView !== triggerLView) {\n      storeLViewOnDestroy(triggerLView, cleanup);\n    }\n    storeTriggerCleanupFn(type, lDetails, cleanup);\n  }\n  // Begin polling for the trigger.\n  afterNextRender({\n    read: pollDomTrigger\n  }, {\n    injector\n  });\n}\nconst DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';\nfunction invokeRegisteredDelegationListeners(event) {\n  const handlerFns = event.currentTarget?.__jsaction_fns?.get(event.type);\n  if (!handlerFns) {\n    return;\n  }\n  for (const handler of handlerFns) {\n    handler(event);\n  }\n}\nfunction setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {\n  // jsaction attributes specifically should be applied to elements and not comment nodes.\n  // Comment nodes also have no setAttribute function. So this avoids errors.\n  if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {\n    return;\n  }\n  const existingAttr = nativeElement.getAttribute(Attribute$1.JSACTION);\n  // we dedupe cases where hydrate triggers are used as it's possible that\n  // someone may have added an event binding to the root node that matches what the\n  // hydrate trigger adds.\n  const parts = eventTypes.reduce((prev, curr) => {\n    // if there is no existing attribute OR it's not in the existing one, we need to add it\n    return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ':;' : prev;\n  }, '');\n  //  This is required to be a module accessor to appease security tests on setAttribute.\n  nativeElement.setAttribute(Attribute$1.JSACTION, `${existingAttr ?? ''}${parts}`);\n  const blockName = parentDeferBlockId ?? '';\n  if (blockName !== '' && parts.length > 0) {\n    nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);\n  }\n}\nconst sharedStashFunction = (rEl, eventType, listenerFn) => {\n  const el = rEl;\n  const eventListenerMap = el.__jsaction_fns ?? new Map();\n  const eventListeners = eventListenerMap.get(eventType) ?? [];\n  eventListeners.push(listenerFn);\n  eventListenerMap.set(eventType, eventListeners);\n  el.__jsaction_fns = eventListenerMap;\n};\nconst sharedMapFunction = (rEl, jsActionMap) => {\n  let blockName = rEl.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';\n  const el = rEl;\n  const blockSet = jsActionMap.get(blockName) ?? new Set();\n  if (!blockSet.has(el)) {\n    blockSet.add(el);\n  }\n  jsActionMap.set(blockName, blockSet);\n};\nfunction removeListenersFromBlocks(blockNames, jsActionMap) {\n  if (blockNames.length > 0) {\n    let blockList = [];\n    for (let blockName of blockNames) {\n      if (jsActionMap.has(blockName)) {\n        blockList = [...blockList, ...jsActionMap.get(blockName)];\n      }\n    }\n    const replayList = new Set(blockList);\n    replayList.forEach(removeListeners);\n  }\n}\nconst removeListeners = el => {\n  el.removeAttribute(Attribute$1.JSACTION);\n  el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n  el.__jsaction_fns = undefined;\n};\nconst JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? 'EVENT_CONTRACT_DETAILS' : '', {\n  providedIn: 'root',\n  factory: () => ({})\n});\nfunction invokeListeners(event, currentTarget) {\n  const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);\n  if (!handlerFns) {\n    return;\n  }\n  for (const handler of handlerFns) {\n    handler(event);\n  }\n}\n\n/**\n * An internal injection token to reference `DehydratedBlockRegistry` implementation\n * in a tree-shakable way.\n */\nconst DEHYDRATED_BLOCK_REGISTRY = new InjectionToken(ngDevMode ? 'DEHYDRATED_BLOCK_REGISTRY' : '');\n/**\n * The DehydratedBlockRegistry is used for incremental hydration purposes. It keeps\n * track of the Defer Blocks that need hydration so we can effectively\n * navigate up to the top dehydrated defer block and fire appropriate cleanup\n * functions post hydration.\n */\nclass DehydratedBlockRegistry {\n  registry = new Map();\n  cleanupFns = new Map();\n  jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n  contract = inject(JSACTION_EVENT_CONTRACT);\n  add(blockId, info) {\n    this.registry.set(blockId, info);\n  }\n  get(blockId) {\n    return this.registry.get(blockId) ?? null;\n  }\n  has(blockId) {\n    return this.registry.has(blockId);\n  }\n  cleanup(hydratedBlocks) {\n    removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);\n    for (let blockId of hydratedBlocks) {\n      this.registry.delete(blockId);\n      this.jsActionMap.delete(blockId);\n      this.invokeTriggerCleanupFns(blockId);\n      this.hydrating.delete(blockId);\n    }\n    if (this.size === 0) {\n      this.contract.instance?.cleanUp();\n    }\n  }\n  get size() {\n    return this.registry.size;\n  }\n  // we have to leave the lowest block Id in the registry\n  // unless that block has no children\n  addCleanupFn(blockId, fn) {\n    let cleanupFunctions = [];\n    if (this.cleanupFns.has(blockId)) {\n      cleanupFunctions = this.cleanupFns.get(blockId);\n    }\n    cleanupFunctions.push(fn);\n    this.cleanupFns.set(blockId, cleanupFunctions);\n  }\n  invokeTriggerCleanupFns(blockId) {\n    const fns = this.cleanupFns.get(blockId) ?? [];\n    for (let fn of fns) {\n      fn();\n    }\n    this.cleanupFns.delete(blockId);\n  }\n  // Blocks that are being hydrated.\n  hydrating = new Map();\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: DehydratedBlockRegistry,\n    providedIn: null,\n    factory: () => new DehydratedBlockRegistry()\n  });\n}\n\n/**\n * The name of the key used in the TransferState collection,\n * where hydration information is located.\n */\nconst TRANSFER_STATE_TOKEN_ID = '__nghData__';\n/**\n * Lookup key used to reference DOM hydration data (ngh) in `TransferState`.\n */\nconst NGH_DATA_KEY = makeStateKey(TRANSFER_STATE_TOKEN_ID);\n/**\n * The name of the key used in the TransferState collection,\n * where serialized defer block information is located.\n */\nconst TRANSFER_STATE_DEFER_BLOCKS_INFO = '__nghDeferData__';\n/**\n * Lookup key used to retrieve defer block datain `TransferState`.\n */\nconst NGH_DEFER_BLOCKS_KEY = makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);\n/**\n * The name of the attribute that would be added to host component\n * nodes and contain a reference to a particular slot in transferred\n * state that contains the necessary hydration info for this component.\n */\nconst NGH_ATTR_NAME = 'ngh';\n/**\n * Marker used in a comment node to ensure hydration content integrity\n */\nconst SSR_CONTENT_INTEGRITY_MARKER = 'nghm';\n/**\n * Reference to a function that reads `ngh` attribute value from a given RNode\n * and retrieves hydration information from the TransferState using that value\n * as an index. Returns `null` by default, when hydration is not enabled.\n *\n * @param rNode Component's host element.\n * @param injector Injector that this component has access to.\n * @param isRootView Specifies whether we trying to read hydration info for the root view.\n */\nlet _retrieveHydrationInfoImpl = () => null;\nfunction retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {\n  let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);\n  if (nghAttrValue == null) return null;\n  // For cases when a root component also acts as an anchor node for a ViewContainerRef\n  // (for example, when ViewContainerRef is injected in a root component), there is a need\n  // to serialize information about the component itself, as well as an LContainer that\n  // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:\n  // (1) hydration info for the root component itself and (2) hydration info for the\n  // ViewContainerRef instance (an LContainer). Each piece of information is included into\n  // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.\n  // Since we only have 1 root element, we encode both bits of info into a single string:\n  // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view\n  // and 25 is the `ngh` for a root view which holds LContainer).\n  const [componentViewNgh, rootViewNgh] = nghAttrValue.split('|');\n  nghAttrValue = isRootView ? rootViewNgh : componentViewNgh;\n  if (!nghAttrValue) return null;\n  // We've read one of the ngh ids, keep the remaining one, so that\n  // we can set it back on the DOM element.\n  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';\n  const remainingNgh = isRootView ? componentViewNgh : rootNgh;\n  let data = {};\n  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh=\"\" />`),\n  // which means that no special annotations are required. Do not attempt to read\n  // from the TransferState in this case.\n  if (nghAttrValue !== '') {\n    const transferState = injector.get(TransferState, null, {\n      optional: true\n    });\n    if (transferState !== null) {\n      const nghData = transferState.get(NGH_DATA_KEY, []);\n      // The nghAttrValue is always a number referencing an index\n      // in the hydration TransferState data.\n      data = nghData[Number(nghAttrValue)];\n      // If the `ngh` attribute exists and has a non-empty value,\n      // the hydration info *must* be present in the TransferState.\n      // If there is no data for some reasons, this is an error.\n      ngDevMode && assertDefined(data, 'Unable to retrieve hydration info from the TransferState.');\n    }\n  }\n  const dehydratedView = {\n    data,\n    firstChild: rNode.firstChild ?? null\n  };\n  if (isRootView) {\n    // If there is hydration info present for the root view, it means that there was\n    // a ViewContainerRef injected in the root component. The root component host element\n    // acted as an anchor node in this scenario. As a result, the DOM nodes that represent\n    // embedded views in this ViewContainerRef are located as siblings to the host node,\n    // i.e. `<app-root /><#VIEW1><#VIEW2>...<!--container-->`. In this case, the current\n    // node becomes the first child of this root view and the next sibling is the first\n    // element in the DOM segment.\n    dehydratedView.firstChild = rNode;\n    // We use `0` here, since this is the slot (right after the HEADER_OFFSET)\n    // where a component LView or an LContainer is located in a root LView.\n    setSegmentHead(dehydratedView, 0, rNode.nextSibling);\n  }\n  if (remainingNgh) {\n    // If we have only used one of the ngh ids, store the remaining one\n    // back on this RNode.\n    rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);\n  } else {\n    // The `ngh` attribute is cleared from the DOM node now\n    // that the data has been retrieved for all indices.\n    rNode.removeAttribute(NGH_ATTR_NAME);\n  }\n  // Note: don't check whether this node was claimed for hydration,\n  // because this node might've been previously claimed while processing\n  // template instructions.\n  ngDevMode && markRNodeAsClaimedByHydration(rNode, /* checkIfAlreadyClaimed */false);\n  ngDevMode && ngDevMode.hydratedComponents++;\n  return dehydratedView;\n}\n/**\n * Sets the implementation for the `retrieveHydrationInfo` function.\n */\nfunction enableRetrieveHydrationInfoImpl() {\n  _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;\n}\n/**\n * Retrieves hydration info by reading the value from the `ngh` attribute\n * and accessing a corresponding slot in TransferState storage.\n */\nfunction retrieveHydrationInfo(rNode, injector, isRootView = false) {\n  return _retrieveHydrationInfoImpl(rNode, injector, isRootView);\n}\n/**\n * Retrieves the necessary object from a given ViewRef to serialize:\n *  - an LView for component views\n *  - an LContainer for cases when component acts as a ViewContainerRef anchor\n *  - `null` in case of an embedded view\n */\nfunction getLNodeForHydration(viewRef) {\n  // Reading an internal field from `ViewRef` instance.\n  let lView = viewRef._lView;\n  const tView = lView[TVIEW];\n  // A registered ViewRef might represent an instance of an\n  // embedded view, in which case we do not need to annotate it.\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    return null;\n  }\n  // Check if it's a root view and if so, retrieve component's\n  // LView from the first slot after the header.\n  if (isRootView(lView)) {\n    lView = lView[HEADER_OFFSET];\n  }\n  return lView;\n}\nfunction getTextNodeContent(node) {\n  return node.textContent?.replace(/\\s/gm, '');\n}\n/**\n * Restores text nodes and separators into the DOM that were lost during SSR\n * serialization. The hydration process replaces empty text nodes and text\n * nodes that are immediately adjacent to other text nodes with comment nodes\n * that this method filters on to restore those missing nodes that the\n * hydration process is expecting to be present.\n *\n * @param node The app's root HTML Element\n */\nfunction processTextNodeMarkersBeforeHydration(node) {\n  const doc = getDocument();\n  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n    acceptNode(node) {\n      const content = getTextNodeContent(node);\n      const isTextNodeMarker = content === \"ngetn\" /* TextNodeMarker.EmptyNode */ || content === \"ngtns\" /* TextNodeMarker.Separator */;\n      return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n    }\n  });\n  let currentNode;\n  // We cannot modify the DOM while using the commentIterator,\n  // because it throws off the iterator state.\n  // So we collect all marker nodes first and then follow up with\n  // applying the changes to the DOM: either inserting an empty node\n  // or just removing the marker if it was used as a separator.\n  const nodes = [];\n  while (currentNode = commentNodesIterator.nextNode()) {\n    nodes.push(currentNode);\n  }\n  for (const node of nodes) {\n    if (node.textContent === \"ngetn\" /* TextNodeMarker.EmptyNode */) {\n      node.replaceWith(doc.createTextNode(''));\n    } else {\n      node.remove();\n    }\n  }\n}\n/**\n * Internal type that represents a claimed node.\n * Only used in dev mode.\n */\nvar HydrationStatus;\n(function (HydrationStatus) {\n  HydrationStatus[\"Hydrated\"] = \"hydrated\";\n  HydrationStatus[\"Skipped\"] = \"skipped\";\n  HydrationStatus[\"Mismatched\"] = \"mismatched\";\n})(HydrationStatus || (HydrationStatus = {}));\nconst HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';\nfunction patchHydrationInfo(node, info) {\n  node[HYDRATION_INFO_KEY] = info;\n}\nfunction readHydrationInfo(node) {\n  return node[HYDRATION_INFO_KEY] ?? null;\n}\n/**\n * Marks a node as \"claimed\" by hydration process.\n * This is needed to make assessments in tests whether\n * the hydration process handled all nodes.\n */\nfunction markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsClaimedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {\n    throw new Error('Trying to claim a node, which was claimed already.');\n  }\n  patchHydrationInfo(node, {\n    status: HydrationStatus.Hydrated\n  });\n  ngDevMode.hydratedNodes++;\n}\nfunction markRNodeAsSkippedByHydration(node) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsSkippedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  patchHydrationInfo(node, {\n    status: HydrationStatus.Skipped\n  });\n  ngDevMode.componentsSkippedHydration++;\n}\nfunction countBlocksSkippedByHydration(injector) {\n  const transferState = injector.get(TransferState);\n  const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n  if (ngDevMode) {\n    ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;\n  }\n}\nfunction markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  // The RNode can be a standard HTMLElement (not an Angular component or directive)\n  // The devtools component tree only displays Angular components & directives\n  // Therefore we attach the debug info to the closest component/directive\n  while (node && !getComponent(node)) {\n    node = node?.parentNode;\n  }\n  if (node) {\n    patchHydrationInfo(node, {\n      status: HydrationStatus.Mismatched,\n      expectedNodeDetails,\n      actualNodeDetails\n    });\n  }\n}\nfunction isRNodeClaimedForHydration(node) {\n  return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;\n}\nfunction setSegmentHead(hydrationInfo, index, node) {\n  hydrationInfo.segmentHeads ??= {};\n  hydrationInfo.segmentHeads[index] = node;\n}\nfunction getSegmentHead(hydrationInfo, index) {\n  return hydrationInfo.segmentHeads?.[index] ?? null;\n}\nfunction isIncrementalHydrationEnabled(injector) {\n  return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {\n    optional: true\n  });\n}\n/** Throws an error if the incremental hydration is not enabled */\nfunction assertIncrementalHydrationIsConfigured(injector) {\n  if (!isIncrementalHydrationEnabled(injector)) {\n    throw new RuntimeError(508 /* RuntimeErrorCode.MISCONFIGURED_INCREMENTAL_HYDRATION */, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` ' + 'call is added as an argument for the `provideClientHydration()` function call ' + 'in your application config.');\n  }\n}\n/** Throws an error if the ssrUniqueId on the LDeferBlockDetails is not present  */\nfunction assertSsrIdDefined(ssrUniqueId) {\n  assertDefined(ssrUniqueId, 'Internal error: expecting an SSR id for a defer block that should be hydrated, but the id is not present');\n}\n/**\n * Returns the size of an <ng-container>, using either the information\n * serialized in `ELEMENT_CONTAINERS` (element container size) or by\n * computing the sum of root nodes in all dehydrated views in a given\n * container (in case this `<ng-container>` was also used as a view\n * container host node, e.g. <ng-container *ngIf>).\n */\nfunction getNgContainerSize(hydrationInfo, index) {\n  const data = hydrationInfo.data;\n  let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;\n  // If there is no serialized information available in the `ELEMENT_CONTAINERS` slot,\n  // check if we have info about view containers at this location (e.g.\n  // `<ng-container *ngIf>`) and use container size as a number of root nodes in this\n  // element container.\n  if (size === null && data[CONTAINERS]?.[index]) {\n    size = calcSerializedContainerSize(hydrationInfo, index);\n  }\n  return size;\n}\nfunction isSerializedElementContainer(hydrationInfo, index) {\n  return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== undefined;\n}\nfunction getSerializedContainerViews(hydrationInfo, index) {\n  return hydrationInfo.data[CONTAINERS]?.[index] ?? null;\n}\n/**\n * Computes the size of a serialized container (the number of root nodes)\n * by calculating the sum of root nodes in all dehydrated views in this container.\n */\nfunction calcSerializedContainerSize(hydrationInfo, index) {\n  const views = getSerializedContainerViews(hydrationInfo, index) ?? [];\n  let numNodes = 0;\n  for (let view of views) {\n    numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);\n  }\n  return numNodes;\n}\n/**\n * Attempt to initialize the `disconnectedNodes` field of the given\n * `DehydratedView`. Returns the initialized value.\n */\nfunction initDisconnectedNodes(hydrationInfo) {\n  // Check if we are processing disconnected info for the first time.\n  if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n  }\n  return hydrationInfo.disconnectedNodes;\n}\n/**\n * Checks whether a node is annotated as \"disconnected\", i.e. not present\n * in the DOM at serialization time. We should not attempt hydration for\n * such nodes and instead, use a regular \"creation mode\".\n */\nfunction isDisconnectedNode$1(hydrationInfo, index) {\n  // Check if we are processing disconnected info for the first time.\n  if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n  }\n  return !!initDisconnectedNodes(hydrationInfo)?.has(index);\n}\n/**\n * Helper function to prepare text nodes for serialization by ensuring\n * that seperate logical text blocks in the DOM remain separate after\n * serialization.\n */\nfunction processTextNodeBeforeSerialization(context, node) {\n  // Handle cases where text nodes can be lost after DOM serialization:\n  //  1. When there is an *empty text node* in DOM: in this case, this\n  //     node would not make it into the serialized string and as a result,\n  //     this node wouldn't be created in a browser. This would result in\n  //     a mismatch during the hydration, where the runtime logic would expect\n  //     a text node to be present in live DOM, but no text node would exist.\n  //     Example: `<span>{{ name }}</span>` when the `name` is an empty string.\n  //     This would result in `<span></span>` string after serialization and\n  //     in a browser only the `span` element would be created. To resolve that,\n  //     an extra comment node is appended in place of an empty text node and\n  //     that special comment node is replaced with an empty text node *before*\n  //     hydration.\n  //  2. When there are 2 consecutive text nodes present in the DOM.\n  //     Example: `<div>Hello <ng-container *ngIf=\"true\">world</ng-container></div>`.\n  //     In this scenario, the live DOM would look like this:\n  //       <div>#text('Hello ') #text('world') #comment('container')</div>\n  //     Serialized string would look like this: `<div>Hello world<!--container--></div>`.\n  //     The live DOM in a browser after that would be:\n  //       <div>#text('Hello world') #comment('container')</div>\n  //     Notice how 2 text nodes are now \"merged\" into one. This would cause hydration\n  //     logic to fail, since it'd expect 2 text nodes being present, not one.\n  //     To fix this, we insert a special comment node in between those text nodes, so\n  //     serialized representation is: `<div>Hello <!--ngtns-->world<!--container--></div>`.\n  //     This forces browser to create 2 text nodes separated by a comment node.\n  //     Before running a hydration process, this special comment node is removed, so the\n  //     live DOM has exactly the same state as it was before serialization.\n  // Collect this node as required special annotation only when its\n  // contents is empty. Otherwise, such text node would be present on\n  // the client after server-side rendering and no special handling needed.\n  const el = node;\n  const corruptedTextNodes = context.corruptedTextNodes;\n  if (el.textContent === '') {\n    corruptedTextNodes.set(el, \"ngetn\" /* TextNodeMarker.EmptyNode */);\n  } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {\n    corruptedTextNodes.set(el, \"ngtns\" /* TextNodeMarker.Separator */);\n  }\n}\nfunction convertHydrateTriggersToJsAction(triggers) {\n  let actionList = [];\n  if (triggers !== null) {\n    if (triggers.has(4 /* DeferBlockTrigger.Hover */)) {\n      actionList.push(...hoverEventNames);\n    }\n    if (triggers.has(3 /* DeferBlockTrigger.Interaction */)) {\n      actionList.push(...interactionEventNames);\n    }\n  }\n  return actionList;\n}\n/**\n * Builds a queue of blocks that need to be hydrated, looking up the\n * tree to the topmost defer block that exists in the tree that hasn't\n * been hydrated, but exists in the registry. This queue is in top down\n * hierarchical order as a list of defer block ids.\n * Note: This is utilizing serialized information to navigate up the tree\n */\nfunction getParentBlockHydrationQueue(deferBlockId, injector) {\n  const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n  const transferState = injector.get(TransferState);\n  const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n  let isTopMostDeferBlock = false;\n  let currentBlockId = deferBlockId;\n  let parentBlockPromise = null;\n  const hydrationQueue = [];\n  while (!isTopMostDeferBlock && currentBlockId) {\n    ngDevMode && assertEqual(hydrationQueue.indexOf(currentBlockId), -1, 'Internal error: defer block hierarchy has a cycle.');\n    isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);\n    const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);\n    if (parentBlockPromise === null && hydratingParentBlock != null) {\n      // TODO: add an ngDevMode asset that `hydratingParentBlock.promise` exists and is of type Promise.\n      parentBlockPromise = hydratingParentBlock.promise;\n      break;\n    }\n    hydrationQueue.unshift(currentBlockId);\n    currentBlockId = deferBlockParents[currentBlockId][DEFER_PARENT_BLOCK_ID];\n  }\n  return {\n    parentBlockPromise,\n    hydrationQueue\n  };\n}\nfunction gatherDeferBlocksByJSActionAttribute(doc) {\n  const jsactionNodes = doc.body.querySelectorAll('[jsaction]');\n  const blockMap = new Set();\n  for (let node of jsactionNodes) {\n    const attr = node.getAttribute('jsaction');\n    const blockId = node.getAttribute('ngb');\n    const eventTypes = [...hoverEventNames.join(':;'), ...interactionEventNames.join(':;')].join('|');\n    if (attr?.match(eventTypes) && blockId !== null) {\n      blockMap.add(node);\n    }\n  }\n  return blockMap;\n}\nfunction appendDeferBlocksToJSActionMap(doc, injector) {\n  const blockMap = gatherDeferBlocksByJSActionAttribute(doc);\n  for (let rNode of blockMap) {\n    const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n    sharedMapFunction(rNode, jsActionMap);\n  }\n}\n/**\n * Retrieves defer block hydration information from the TransferState.\n *\n * @param injector Injector that this component has access to.\n */\nlet _retrieveDeferBlockDataImpl = () => {\n  return {};\n};\nfunction retrieveDeferBlockDataImpl(injector) {\n  const transferState = injector.get(TransferState, null, {\n    optional: true\n  });\n  if (transferState !== null) {\n    const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n    ngDevMode && assertDefined(nghDeferData, 'Unable to retrieve defer block info from the TransferState.');\n    return nghDeferData;\n  }\n  return {};\n}\n/**\n * Sets the implementation for the `retrieveDeferBlockData` function.\n */\nfunction enableRetrieveDeferBlockDataImpl() {\n  _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;\n}\n/**\n * Retrieves defer block data from TransferState storage\n */\nfunction retrieveDeferBlockData(injector) {\n  return _retrieveDeferBlockDataImpl(injector);\n}\nfunction isTimerTrigger(triggerInfo) {\n  return typeof triggerInfo === 'object' && triggerInfo.trigger === 5 /* DeferBlockTrigger.Timer */;\n}\nfunction getHydrateTimerTrigger(blockData) {\n  const trigger = blockData[DEFER_HYDRATE_TRIGGERS]?.find(t => isTimerTrigger(t));\n  return trigger?.delay ?? null;\n}\nfunction hasHydrateTrigger(blockData, trigger) {\n  return blockData[DEFER_HYDRATE_TRIGGERS]?.includes(trigger) ?? false;\n}\n/**\n * Creates a summary of the given serialized defer block, which is used later to properly initialize\n * specific triggers.\n */\nfunction createBlockSummary(blockInfo) {\n  return {\n    data: blockInfo,\n    hydrate: {\n      idle: hasHydrateTrigger(blockInfo, 0 /* DeferBlockTrigger.Idle */),\n      immediate: hasHydrateTrigger(blockInfo, 1 /* DeferBlockTrigger.Immediate */),\n      timer: getHydrateTimerTrigger(blockInfo),\n      viewport: hasHydrateTrigger(blockInfo, 2 /* DeferBlockTrigger.Viewport */)\n    }\n  };\n}\n/**\n * Processes all of the defer block data in the transfer state and creates a map of the summaries\n */\nfunction processBlockData(injector) {\n  const blockData = retrieveDeferBlockData(injector);\n  let blockDetails = new Map();\n  for (let blockId in blockData) {\n    blockDetails.set(blockId, createBlockSummary(blockData[blockId]));\n  }\n  return blockDetails;\n}\n\n/**\n * Defines the CSS styles encapsulation policies for the {@link Component} decorator's\n * `encapsulation` option.\n *\n * See {@link Component#encapsulation encapsulation}.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/ts/metadata/encapsulation.ts region='longform'}\n *\n * @publicApi\n */\nvar ViewEncapsulation;\n(function (ViewEncapsulation) {\n  // TODO: consider making `ViewEncapsulation` a `const enum` instead. See\n  // https://github.com/angular/angular/issues/44119 for additional information.\n  /**\n   * Emulates a native Shadow DOM encapsulation behavior by adding a specific attribute to the\n   * component's host element and applying the same attribute to all the CSS selectors provided\n   * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls}.\n   *\n   * This is the default option.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n  // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n  /**\n   * Doesn't provide any sort of CSS style encapsulation, meaning that all the styles provided\n   * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls} are applicable\n   * to any HTML element of the application regardless of their host Component.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n  /**\n   * Uses the browser's native Shadow DOM API to encapsulate CSS styles, meaning that it creates\n   * a ShadowRoot for the component's host element which is then used to encapsulate\n   * all the Component's styling.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation || (ViewEncapsulation = {}));\n\n/**\n * @fileoverview\n * A module to facilitate use of a Trusted Types policy internally within\n * Angular. It lazily constructs the Trusted Types policy, providing helper\n * utilities for promoting strings to Trusted Types. When Trusted Types are not\n * available, strings are used as a fallback.\n * @security All use of this module is security-sensitive and should go through\n * security review.\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy$1;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy$1() {\n  if (policy$1 === undefined) {\n    policy$1 = null;\n    if (_global.trustedTypes) {\n      try {\n        policy$1 = _global.trustedTypes.createPolicy('angular', {\n          createHTML: s => s,\n          createScript: s => s,\n          createScriptURL: s => s\n        });\n      } catch {\n        // trustedTypes.createPolicy throws if called with a name that is\n        // already registered, even in report-only mode. Until the API changes,\n        // catch the error not to break the applications functionally. In such\n        // cases, the code will fall back to using strings.\n      }\n    }\n  }\n  return policy$1;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will be interpreted as HTML by a browser, e.g. when assigning to\n * element.innerHTML.\n */\nfunction trustedHTMLFromString(html) {\n  return getPolicy$1()?.createHTML(html) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security In particular, it must be assured that the provided string will\n * never cause an XSS vulnerability if used in a context that will be\n * interpreted and executed as a script by a browser, e.g. when calling eval.\n */\nfunction trustedScriptFromString(script) {\n  return getPolicy$1()?.createScript(script) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will cause a browser to load and execute a resource, e.g. when\n * assigning to script.src.\n */\nfunction trustedScriptURLFromString(url) {\n  return getPolicy$1()?.createScriptURL(url) || url;\n}\n/**\n * Unsafely call the Function constructor with the given string arguments. It\n * is only available in development mode, and should be stripped out of\n * production code.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only called from development code, as use in production code can lead to\n * XSS vulnerabilities.\n */\nfunction newTrustedFunctionForDev(...args) {\n  if (typeof ngDevMode === 'undefined') {\n    throw new Error('newTrustedFunctionForDev should never be called in production');\n  }\n  if (!_global.trustedTypes) {\n    // In environments that don't support Trusted Types, fall back to the most\n    // straightforward implementation:\n    return new Function(...args);\n  }\n  // Chrome currently does not support passing TrustedScript to the Function\n  // constructor. The following implements the workaround proposed on the page\n  // below, where the Chromium bug is also referenced:\n  // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor\n  const fnArgs = args.slice(0, -1).join(',');\n  const fnBody = args[args.length - 1];\n  const body = `(function anonymous(${fnArgs}\n) { ${fnBody}\n})`;\n  // Using eval directly confuses the compiler and prevents this module from\n  // being stripped out of JS binaries even if not used. The global['eval']\n  // indirection fixes that.\n  const fn = _global['eval'](trustedScriptFromString(body));\n  if (fn.bind === undefined) {\n    // Workaround for a browser bug that only exists in Chrome 83, where passing\n    // a TrustedScript to eval just returns the TrustedScript back without\n    // evaluating it. In that case, fall back to the most straightforward\n    // implementation:\n    return new Function(...args);\n  }\n  // To completely mimic the behavior of calling \"new Function\", two more\n  // things need to happen:\n  // 1. Stringifying the resulting function should return its source code\n  fn.toString = () => body;\n  // 2. When calling the resulting function, `this` should refer to `global`\n  return fn.bind(_global);\n  // When Trusted Types support in Function constructors is widely available,\n  // the implementation of this function can be simplified to:\n  // return new Function(...args.map(a => trustedScriptFromString(a)));\n}\n\n/**\n * @fileoverview\n * A module to facilitate use of a Trusted Types policy internally within\n * Angular specifically for bypassSecurityTrust* and custom sanitizers. It\n * lazily constructs the Trusted Types policy, providing helper utilities for\n * promoting strings to Trusted Types. When Trusted Types are not available,\n * strings are used as a fallback.\n * @security All use of this module is security-sensitive and should go through\n * security review.\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy() {\n  if (policy === undefined) {\n    policy = null;\n    if (_global.trustedTypes) {\n      try {\n        policy = _global.trustedTypes.createPolicy('angular#unsafe-bypass', {\n          createHTML: s => s,\n          createScript: s => s,\n          createScriptURL: s => s\n        });\n      } catch {\n        // trustedTypes.createPolicy throws if called with a name that is\n        // already registered, even in report-only mode. Until the API changes,\n        // catch the error not to break the applications functionally. In such\n        // cases, the code will fall back to using strings.\n      }\n    }\n  }\n  return policy;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedHTMLFromStringBypass(html) {\n  return getPolicy()?.createHTML(html) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptFromStringBypass(script) {\n  return getPolicy()?.createScript(script) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptURLFromStringBypass(url) {\n  return getPolicy()?.createScriptURL(url) || url;\n}\nclass SafeValueImpl {\n  changingThisBreaksApplicationSecurity;\n  constructor(changingThisBreaksApplicationSecurity) {\n    this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n  }\n  toString() {\n    return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` + ` (see ${XSS_SECURITY_URL})`;\n  }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"HTML\" /* BypassType.Html */;\n  }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"Style\" /* BypassType.Style */;\n  }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"Script\" /* BypassType.Script */;\n  }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"URL\" /* BypassType.Url */;\n  }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"ResourceURL\" /* BypassType.ResourceUrl */;\n  }\n}\nfunction unwrapSafeValue(value) {\n  return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n  const actualType = getSanitizationBypassType(value);\n  if (actualType != null && actualType !== type) {\n    // Allow ResourceURLs in URL contexts, they are strictly more trusted.\n    if (actualType === \"ResourceURL\" /* BypassType.ResourceUrl */ && type === \"URL\" /* BypassType.Url */) return true;\n    throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);\n  }\n  return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n  return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\n/**\n * Mark `html` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link htmlSanitizer} to be trusted implicitly.\n *\n * @param trustedHtml `html` string which needs to be implicitly trusted.\n * @returns a `html` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n  return new SafeHtmlImpl(trustedHtml);\n}\n/**\n * Mark `style` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link styleSanitizer} to be trusted implicitly.\n *\n * @param trustedStyle `style` string which needs to be implicitly trusted.\n * @returns a `style` hich has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n  return new SafeStyleImpl(trustedStyle);\n}\n/**\n * Mark `script` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link scriptSanitizer} to be trusted implicitly.\n *\n * @param trustedScript `script` string which needs to be implicitly trusted.\n * @returns a `script` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustScript(trustedScript) {\n  return new SafeScriptImpl(trustedScript);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link urlSanitizer} to be trusted implicitly.\n *\n * @param trustedUrl `url` string which needs to be implicitly trusted.\n * @returns a `url`  which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n  return new SafeUrlImpl(trustedUrl);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.\n *\n * @param trustedResourceUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n  return new SafeResourceUrlImpl(trustedResourceUrl);\n}\n\n/**\n * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we use one of two strategies for doing this.\n * Default: DOMParser strategy\n * Fallback: InertDocument strategy\n */\nfunction getInertBodyHelper(defaultDoc) {\n  const inertDocumentHelper = new InertDocumentHelper(defaultDoc);\n  return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;\n}\n/**\n * Uses DOMParser to create and fill an inert body element.\n * This is the default strategy used in browsers that support it.\n */\nclass DOMParserHelper {\n  inertDocumentHelper;\n  constructor(inertDocumentHelper) {\n    this.inertDocumentHelper = inertDocumentHelper;\n  }\n  getInertBodyElement(html) {\n    // We add these extra elements to ensure that the rest of the content is parsed as expected\n    // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n    // `<head>` tag. Note that the `<body>` tag is closed implicitly to prevent unclosed tags\n    // in `html` from consuming the otherwise explicit `</body>` tag.\n    html = '<body><remove></remove>' + html;\n    try {\n      const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), 'text/html').body;\n      if (body === null) {\n        // In some browsers (e.g. Mozilla/5.0 iPad AppleWebKit Mobile) the `body` property only\n        // becomes available in the following tick of the JS engine. In that case we fall back to\n        // the `inertDocumentHelper` instead.\n        return this.inertDocumentHelper.getInertBodyElement(html);\n      }\n      body.firstChild?.remove();\n      return body;\n    } catch {\n      return null;\n    }\n  }\n}\n/**\n * Use an HTML5 `template` element to create and fill an inert DOM element.\n * This is the fallback strategy if the browser does not support DOMParser.\n */\nclass InertDocumentHelper {\n  defaultDoc;\n  inertDocument;\n  constructor(defaultDoc) {\n    this.defaultDoc = defaultDoc;\n    this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n  }\n  getInertBodyElement(html) {\n    const templateEl = this.inertDocument.createElement('template');\n    templateEl.innerHTML = trustedHTMLFromString(html);\n    return templateEl;\n  }\n}\n/**\n * We need to determine whether the DOMParser exists in the global context and\n * supports parsing HTML; HTML parsing support is not as wide as other formats, see\n * https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility.\n *\n * @suppress {uselessCode}\n */\nfunction isDOMParserAvailable() {\n  try {\n    return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');\n  } catch {\n    return false;\n  }\n}\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * This regular expression matches a subset of URLs that will not cause script\n * execution if used in URL context within a HTML document. Specifically, this\n * regular expression matches if:\n * (1) Either a protocol that is not javascript:, and that has valid characters\n *     (alphanumeric or [+-.]).\n * (2) or no protocol.  A protocol must be followed by a colon. The below\n *     allows that by allowing colons only after one of the characters [/?#].\n *     A colon after a hash (#) must be in the fragment.\n *     Otherwise, a colon after a (?) must be in a query.\n *     Otherwise, a colon after a single solidus (/) must be in a path.\n *     Otherwise, a colon after a double solidus (//) must be in the authority\n *     (before port).\n *\n * The pattern disallows &, used in HTML entity declarations before\n * one of the characters in [/?#]. This disallows HTML entities used in the\n * protocol name, which should never happen, e.g. \"h&#116;tp\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo&lt;bar/baz\".  Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript&#58;...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\\/?#]*(?:[\\/?#]|$))/i;\nfunction _sanitizeUrl(url) {\n  url = String(url);\n  if (url.match(SAFE_URL_PATTERN)) return url;\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);\n  }\n  return 'unsafe:' + url;\n}\nfunction tagSet(tags) {\n  const res = {};\n  for (const t of tags.split(',')) res[t] = true;\n  return res;\n}\nfunction merge(...sets) {\n  const res = {};\n  for (const s of sets) {\n    for (const v in s) {\n      if (s.hasOwnProperty(v)) res[v] = true;\n    }\n  }\n  return res;\n}\n// Good source of info about elements and attributes\n// https://html.spec.whatwg.org/#semantics\n// https://simon.html5.org/html-elements\n// Safe Void Elements - HTML5\n// https://html.spec.whatwg.org/#void-elements\nconst VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n// Elements that you can, intentionally, leave open (and which close themselves)\n// https://html.spec.whatwg.org/#optional-tags\nconst OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nconst OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nconst OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n// Safe Block Elements - HTML5\nconst BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' + 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\n// Inline Elements - HTML5\nconst INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' + 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' + 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\nconst VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n// Attributes that have href and hence need to be sanitized\nconst URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\nconst HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' + 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' + 'scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,' + 'valign,value,vspace,width');\n// Accessibility attributes as per WAI-ARIA 1.1 (W3C Working Draft 14 December 2018)\nconst ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' + 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' + 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' + 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' + 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' + 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' + 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext');\n// NB: This currently consciously doesn't support SVG. SVG sanitization has had several security\n// issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via\n// innerHTML is required, SVG attributes should be added here.\n// NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those\n// can be sanitized, but they increase security surface area without a legitimate use case, so they\n// are left out here.\nconst VALID_ATTRS = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);\n// Elements whose content should not be traversed/preserved, if the elements themselves are invalid.\n//\n// Typically, `<invalid>Some content</invalid>` would traverse (and in this case preserve)\n// `Some content`, but strip `invalid-element` opening/closing tags. For some elements, though, we\n// don't want to preserve the content, if the elements themselves are going to be removed.\nconst SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet('script,style,template');\n/**\n * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe\n * attributes.\n */\nclass SanitizingHtmlSerializer {\n  // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just\n  // because characters were re-encoded.\n  sanitizedSomething = false;\n  buf = [];\n  sanitizeChildren(el) {\n    // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.\n    // However this code never accesses properties off of `document` before deleting its contents\n    // again, so it shouldn't be vulnerable to DOM clobbering.\n    let current = el.firstChild;\n    let traverseContent = true;\n    let parentNodes = [];\n    while (current) {\n      if (current.nodeType === Node.ELEMENT_NODE) {\n        traverseContent = this.startElement(current);\n      } else if (current.nodeType === Node.TEXT_NODE) {\n        this.chars(current.nodeValue);\n      } else {\n        // Strip non-element, non-text nodes.\n        this.sanitizedSomething = true;\n      }\n      if (traverseContent && current.firstChild) {\n        // Push current node to the parent stack before entering its content.\n        parentNodes.push(current);\n        current = getFirstChild(current);\n        continue;\n      }\n      while (current) {\n        // Leaving the element.\n        // Walk up and to the right, closing tags as we go.\n        if (current.nodeType === Node.ELEMENT_NODE) {\n          this.endElement(current);\n        }\n        let next = getNextSibling(current);\n        if (next) {\n          current = next;\n          break;\n        }\n        // There was no next sibling, walk up to the parent node (extract it from the stack).\n        current = parentNodes.pop();\n      }\n    }\n    return this.buf.join('');\n  }\n  /**\n   * Sanitizes an opening element tag (if valid) and returns whether the element's contents should\n   * be traversed. Element content must always be traversed (even if the element itself is not\n   * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.\n   *\n   * @param element The element to sanitize.\n   * @return True if the element's contents should be traversed.\n   */\n  startElement(element) {\n    const tagName = getNodeName(element).toLowerCase();\n    if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n      this.sanitizedSomething = true;\n      return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);\n    }\n    this.buf.push('<');\n    this.buf.push(tagName);\n    const elAttrs = element.attributes;\n    for (let i = 0; i < elAttrs.length; i++) {\n      const elAttr = elAttrs.item(i);\n      const attrName = elAttr.name;\n      const lower = attrName.toLowerCase();\n      if (!VALID_ATTRS.hasOwnProperty(lower)) {\n        this.sanitizedSomething = true;\n        continue;\n      }\n      let value = elAttr.value;\n      // TODO(martinprobst): Special case image URIs for data:image/...\n      if (URI_ATTRS[lower]) value = _sanitizeUrl(value);\n      this.buf.push(' ', attrName, '=\"', encodeEntities(value), '\"');\n    }\n    this.buf.push('>');\n    return true;\n  }\n  endElement(current) {\n    const tagName = getNodeName(current).toLowerCase();\n    if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n      this.buf.push('</');\n      this.buf.push(tagName);\n      this.buf.push('>');\n    }\n  }\n  chars(chars) {\n    this.buf.push(encodeEntities(chars));\n  }\n}\n/**\n * Verifies whether a given child node is a descendant of a given parent node.\n * It may not be the case when properties like `.firstChild` are clobbered and\n * accessing `.firstChild` results in an unexpected node returned.\n */\nfunction isClobberedElement(parentNode, childNode) {\n  return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;\n}\n/**\n * Retrieves next sibling node and makes sure that there is no\n * clobbering of the `nextSibling` property happening.\n */\nfunction getNextSibling(node) {\n  const nextSibling = node.nextSibling;\n  // Make sure there is no `nextSibling` clobbering: navigating to\n  // the next sibling and going back to the previous one should result\n  // in the original node.\n  if (nextSibling && node !== nextSibling.previousSibling) {\n    throw clobberedElementError(nextSibling);\n  }\n  return nextSibling;\n}\n/**\n * Retrieves first child node and makes sure that there is no\n * clobbering of the `firstChild` property happening.\n */\nfunction getFirstChild(node) {\n  const firstChild = node.firstChild;\n  if (firstChild && isClobberedElement(node, firstChild)) {\n    throw clobberedElementError(firstChild);\n  }\n  return firstChild;\n}\n/** Gets a reasonable nodeName, even for clobbered nodes. */\nfunction getNodeName(node) {\n  const nodeName = node.nodeName;\n  // If the property is clobbered, assume it is an `HTMLFormElement`.\n  return typeof nodeName === 'string' ? nodeName : 'FORM';\n}\nfunction clobberedElementError(node) {\n  return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);\n}\n// Regular Expressions for parsing tags and attributes\nconst SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nconst NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n */\nfunction encodeEntities(value) {\n  return value.replace(/&/g, '&amp;').replace(SURROGATE_PAIR_REGEXP, function (match) {\n    const hi = match.charCodeAt(0);\n    const low = match.charCodeAt(1);\n    return '&#' + ((hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000) + ';';\n  }).replace(NON_ALPHANUMERIC_REGEXP, function (match) {\n    return '&#' + match.charCodeAt(0) + ';';\n  }).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nlet inertBodyHelper;\n/**\n * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to\n * the DOM in a browser environment.\n */\nfunction _sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n  let inertBodyElement = null;\n  try {\n    inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);\n    // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n    let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n    inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n    // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser\n    // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.\n    let mXSSAttempts = 5;\n    let parsedHtml = unsafeHtml;\n    do {\n      if (mXSSAttempts === 0) {\n        throw new Error('Failed to sanitize html because the input is unstable');\n      }\n      mXSSAttempts--;\n      unsafeHtml = parsedHtml;\n      parsedHtml = inertBodyElement.innerHTML;\n      inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n    } while (unsafeHtml !== parsedHtml);\n    const sanitizer = new SanitizingHtmlSerializer();\n    const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {\n      console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);\n    }\n    return trustedHTMLFromString(safeHtml);\n  } finally {\n    // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n    if (inertBodyElement) {\n      const parent = getTemplateContent(inertBodyElement) || inertBodyElement;\n      while (parent.firstChild) {\n        parent.firstChild.remove();\n      }\n    }\n  }\n}\nfunction getTemplateContent(el) {\n  return 'content' in el /** Microsoft/TypeScript#21517 */ && isTemplateElement(el) ? el.content : null;\n}\nfunction isTemplateElement(el) {\n  return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';\n}\n\n/**\n * A SecurityContext marks a location that has dangerous security implications, e.g. a DOM property\n * like `innerHTML` that could cause Cross Site Scripting (XSS) security bugs when improperly\n * handled.\n *\n * See DomSanitizer for more details on security in Angular applications.\n *\n * @publicApi\n */\nvar SecurityContext;\n(function (SecurityContext) {\n  SecurityContext[SecurityContext[\"NONE\"] = 0] = \"NONE\";\n  SecurityContext[SecurityContext[\"HTML\"] = 1] = \"HTML\";\n  SecurityContext[SecurityContext[\"STYLE\"] = 2] = \"STYLE\";\n  SecurityContext[SecurityContext[\"SCRIPT\"] = 3] = \"SCRIPT\";\n  SecurityContext[SecurityContext[\"URL\"] = 4] = \"URL\";\n  SecurityContext[SecurityContext[\"RESOURCE_URL\"] = 5] = \"RESOURCE_URL\";\n})(SecurityContext || (SecurityContext = {}));\n\n/**\n * An `html` sanitizer which converts untrusted `html` **string** into trusted string by removing\n * dangerous content.\n *\n * This method parses the `html` and locates potentially dangerous content (such as urls and\n * javascript) and removes it.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustHtml}.\n *\n * @param unsafeHtml untrusted `html`, typically from the user.\n * @returns `html` string which is safe to display to user, because all of the dangerous javascript\n * and urls have been removed.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeHtml(unsafeHtml) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeHtml, \"HTML\" /* BypassType.Html */)) {\n    return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));\n  }\n  return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));\n}\n/**\n * A `style` sanitizer which converts untrusted `style` **string** into trusted string by removing\n * dangerous content.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustStyle}.\n *\n * @param unsafeStyle untrusted `style`, typically from the user.\n * @returns `style` string which is safe to bind to the `style` properties.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeStyle(unsafeStyle) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';\n  }\n  if (allowSanitizationBypassAndThrow(unsafeStyle, \"Style\" /* BypassType.Style */)) {\n    return unwrapSafeValue(unsafeStyle);\n  }\n  return renderStringify(unsafeStyle);\n}\n/**\n * A `url` sanitizer which converts untrusted `url` **string** into trusted string by removing\n * dangerous\n * content.\n *\n * This method parses the `url` and locates potentially dangerous content (such as javascript) and\n * removes it.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustUrl}.\n *\n * @param unsafeUrl untrusted `url`, typically from the user.\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\n * all of the dangerous javascript has been removed.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeUrl(unsafeUrl) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';\n  }\n  if (allowSanitizationBypassAndThrow(unsafeUrl, \"URL\" /* BypassType.Url */)) {\n    return unwrapSafeValue(unsafeUrl);\n  }\n  return _sanitizeUrl(renderStringify(unsafeUrl));\n}\n/**\n * A `url` sanitizer which only lets trusted `url`s through.\n *\n * This passes only `url`s marked trusted by calling {@link bypassSanitizationTrustResourceUrl}.\n *\n * @param unsafeResourceUrl untrusted `url`, typically from the user.\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\n * only trusted `url`s have been allowed to pass.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeResourceUrl(unsafeResourceUrl) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeResourceUrl, \"ResourceURL\" /* BypassType.ResourceUrl */)) {\n    return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));\n  }\n  throw new RuntimeError(904 /* RuntimeErrorCode.UNSAFE_VALUE_IN_RESOURCE_URL */, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);\n}\n/**\n * A `script` sanitizer which only lets trusted javascript through.\n *\n * This passes only `script`s marked trusted by calling {@link\n * bypassSanitizationTrustScript}.\n *\n * @param unsafeScript untrusted `script`, typically from the user.\n * @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,\n * because only trusted `scripts` have been allowed to pass.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeScript(unsafeScript) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeScript, \"Script\" /* BypassType.Script */)) {\n    return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));\n  }\n  throw new RuntimeError(905 /* RuntimeErrorCode.UNSAFE_VALUE_IN_SCRIPT */, ngDevMode && 'unsafe value used in a script context');\n}\n/**\n * A template tag function for promoting the associated constant literal to a\n * TrustedHTML. Interpolation is explicitly not allowed.\n *\n * @param html constant template literal containing trusted HTML.\n * @returns TrustedHTML wrapping `html`.\n *\n * @security This is a security-sensitive function and should only be used to\n * convert constant values of attributes and properties found in\n * application-provided Angular templates to TrustedHTML.\n *\n * @codeGenApi\n */\nfunction ɵɵtrustConstantHtml(html) {\n  // The following runtime check ensures that the function was called as a\n  // template tag (e.g. ɵɵtrustConstantHtml`content`), without any interpolation\n  // (e.g. not ɵɵtrustConstantHtml`content ${variable}`). A TemplateStringsArray\n  // is an array with a `raw` property that is also an array. The associated\n  // template literal has no interpolation if and only if the length of the\n  // TemplateStringsArray is 1.\n  if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {\n    throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join('?')}`);\n  }\n  return trustedHTMLFromString(html[0]);\n}\n/**\n * A template tag function for promoting the associated constant literal to a\n * TrustedScriptURL. Interpolation is explicitly not allowed.\n *\n * @param url constant template literal containing a trusted script URL.\n * @returns TrustedScriptURL wrapping `url`.\n *\n * @security This is a security-sensitive function and should only be used to\n * convert constant values of attributes and properties found in\n * application-provided Angular templates to TrustedScriptURL.\n *\n * @codeGenApi\n */\nfunction ɵɵtrustConstantResourceUrl(url) {\n  // The following runtime check ensures that the function was called as a\n  // template tag (e.g. ɵɵtrustConstantResourceUrl`content`), without any\n  // interpolation (e.g. not ɵɵtrustConstantResourceUrl`content ${variable}`). A\n  // TemplateStringsArray is an array with a `raw` property that is also an\n  // array. The associated template literal has no interpolation if and only if\n  // the length of the TemplateStringsArray is 1.\n  if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {\n    throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join('?')}`);\n  }\n  return trustedScriptURLFromString(url[0]);\n}\n/**\n * Detects which sanitizer to use for URL property, based on tag name and prop name.\n *\n * The rules are based on the RESOURCE_URL context config from\n * `packages/compiler/src/schema/dom_security_schema.ts`.\n * If tag and prop names don't match Resource URL schema, use URL sanitizer.\n */\nfunction getUrlSanitizer(tag, prop) {\n  if (prop === 'src' && (tag === 'embed' || tag === 'frame' || tag === 'iframe' || tag === 'media' || tag === 'script') || prop === 'href' && (tag === 'base' || tag === 'link')) {\n    return ɵɵsanitizeResourceUrl;\n  }\n  return ɵɵsanitizeUrl;\n}\n/**\n * Sanitizes URL, selecting sanitizer function based on tag and property names.\n *\n * This function is used in case we can't define security context at compile time, when only prop\n * name is available. This happens when we generate host bindings for Directives/Components. The\n * host element is unknown at compile time, so we defer calculation of specific sanitizer to\n * runtime.\n *\n * @param unsafeUrl untrusted `url`, typically from the user.\n * @param tag target element tag name.\n * @param prop name of the property that contains the value.\n * @returns `url` string which is safe to bind.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {\n  return getUrlSanitizer(tag, prop)(unsafeUrl);\n}\nfunction validateAgainstEventProperties(name) {\n  if (name.toLowerCase().startsWith('on')) {\n    const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...` + `\\nIf '${name}' is a directive input, make sure the directive is imported by the` + ` current module.`;\n    throw new RuntimeError(306 /* RuntimeErrorCode.INVALID_EVENT_BINDING */, errorMessage);\n  }\n}\nfunction validateAgainstEventAttributes(name) {\n  if (name.toLowerCase().startsWith('on')) {\n    const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...`;\n    throw new RuntimeError(306 /* RuntimeErrorCode.INVALID_EVENT_BINDING */, errorMessage);\n  }\n}\nfunction getSanitizer() {\n  const lView = getLView();\n  return lView && lView[ENVIRONMENT].sanitizer;\n}\n\n/**\n * Disallowed strings in the comment.\n *\n * see: https://html.spec.whatwg.org/multipage/syntax.html#comments\n */\nconst COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;\n/**\n * Delimiter in the disallowed strings which needs to be wrapped with zero with character.\n */\nconst COMMENT_DELIMITER = /(<|>)/g;\nconst COMMENT_DELIMITER_ESCAPED = '\\u200B$1\\u200B';\n/**\n * Escape the content of comment strings so that it can be safely inserted into a comment node.\n *\n * The issue is that HTML does not specify any way to escape comment end text inside the comment.\n * Consider: `<!-- The way you close a comment is with \">\", and \"->\" at the beginning or by \"-->\" or\n * \"--!>\" at the end. -->`. Above the `\"-->\"` is meant to be text not an end to the comment. This\n * can be created programmatically through DOM APIs. (`<!--` are also disallowed.)\n *\n * see: https://html.spec.whatwg.org/multipage/syntax.html#comments\n *\n * ```ts\n * div.innerHTML = div.innerHTML\n * ```\n *\n * One would expect that the above code would be safe to do, but it turns out that because comment\n * text is not escaped, the comment may contain text which will prematurely close the comment\n * opening up the application for XSS attack. (In SSR we programmatically create comment nodes which\n * may contain such text and expect them to be safe.)\n *\n * This function escapes the comment text by looking for comment delimiters (`<` and `>`) and\n * surrounding them with `_>_` where the `_` is a zero width space `\\u200B`. The result is that if a\n * comment contains any of the comment start/end delimiters (such as `<!--`, `-->` or `--!>`) the\n * text it will render normally but it will not cause the HTML parser to close/open the comment.\n *\n * @param value text to make safe for comment node by escaping the comment open/close character\n *     sequence.\n */\nfunction escapeCommentText(value) {\n  return value.replace(COMMENT_DISALLOWED, text => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));\n}\nfunction normalizeDebugBindingName(name) {\n  // Attribute names with `$` (eg `x-y$`) are valid per spec, but unsupported by some browsers\n  name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));\n  return `ng-reflect-${name}`;\n}\nconst CAMEL_CASE_REGEXP = /([A-Z])/g;\nfunction camelCaseToDashCase(input) {\n  return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());\n}\nfunction normalizeDebugBindingValue(value) {\n  try {\n    // Limit the size of the value as otherwise the DOM just gets polluted.\n    return value != null ? value.toString().slice(0, 30) : value;\n  } catch (e) {\n    return '[ERROR] Exception while trying to serialize the value';\n  }\n}\n\n/**\n * Defines a schema that allows an NgModule to contain the following:\n * - Non-Angular elements named with dash case (`-`).\n * - Element properties named with dash case (`-`).\n * Dash case is the naming convention for custom elements.\n *\n * @publicApi\n */\nconst CUSTOM_ELEMENTS_SCHEMA = {\n  name: 'custom-elements'\n};\n/**\n * Defines a schema that allows any property on any element.\n *\n * This schema allows you to ignore the errors related to any unknown elements or properties in a\n * template. The usage of this schema is generally discouraged because it prevents useful validation\n * and may hide real errors in your template. Consider using the `CUSTOM_ELEMENTS_SCHEMA` instead.\n *\n * @publicApi\n */\nconst NO_ERRORS_SCHEMA = {\n  name: 'no-errors-schema'\n};\nlet shouldThrowErrorOnUnknownElement = false;\n/**\n * Sets a strict mode for JIT-compiled components to throw an error on unknown elements,\n * instead of just logging the error.\n * (for AOT-compiled ones this check happens at build time).\n */\nfunction ɵsetUnknownElementStrictMode(shouldThrow) {\n  shouldThrowErrorOnUnknownElement = shouldThrow;\n}\n/**\n * Gets the current value of the strict mode.\n */\nfunction ɵgetUnknownElementStrictMode() {\n  return shouldThrowErrorOnUnknownElement;\n}\nlet shouldThrowErrorOnUnknownProperty = false;\n/**\n * Sets a strict mode for JIT-compiled components to throw an error on unknown properties,\n * instead of just logging the error.\n * (for AOT-compiled ones this check happens at build time).\n */\nfunction ɵsetUnknownPropertyStrictMode(shouldThrow) {\n  shouldThrowErrorOnUnknownProperty = shouldThrow;\n}\n/**\n * Gets the current value of the strict mode.\n */\nfunction ɵgetUnknownPropertyStrictMode() {\n  return shouldThrowErrorOnUnknownProperty;\n}\n/**\n * Validates that the element is known at runtime and produces\n * an error if it's not the case.\n * This check is relevant for JIT-compiled components (for AOT-compiled\n * ones this check happens at build time).\n *\n * The element is considered known if either:\n * - it's a known HTML element\n * - it's a known custom element\n * - the element matches any directive\n * - the element is allowed by one of the schemas\n *\n * @param element Element to validate\n * @param lView An `LView` that represents a current component that is being rendered\n * @param tagName Name of the tag to check\n * @param schemas Array of schemas\n * @param hasDirectives Boolean indicating that the element matches any directive\n */\nfunction validateElementIsKnown(element, lView, tagName, schemas, hasDirectives) {\n  // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT\n  // mode where this check happens at compile time. In JIT mode, `schemas` is always present and\n  // defined as an array (as an empty array in case `schemas` field is not defined) and we should\n  // execute the check below.\n  if (schemas === null) return;\n  // If the element matches any directive, it's considered as valid.\n  if (!hasDirectives && tagName !== null) {\n    // The element is unknown if it's an instance of HTMLUnknownElement, or it isn't registered\n    // as a custom element. Note that unknown elements with a dash in their name won't be instances\n    // of HTMLUnknownElement in browsers that support web components.\n    const isUnknown =\n    // Note that we can't check for `typeof HTMLUnknownElement === 'function'` because\n    // Domino doesn't expose HTMLUnknownElement globally.\n    typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement && element instanceof HTMLUnknownElement || typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 && !customElements.get(tagName);\n    if (isUnknown && !matchingSchemas(schemas, tagName)) {\n      const isHostStandalone = isHostComponentStandalone(lView);\n      const templateLocation = getTemplateLocationDetails(lView);\n      const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n      let message = `'${tagName}' is not a known element${templateLocation}:\\n`;\n      message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared'}.\\n`;\n      if (tagName && tagName.indexOf('-') > -1) {\n        message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;\n      } else {\n        message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;\n      }\n      if (shouldThrowErrorOnUnknownElement) {\n        throw new RuntimeError(304 /* RuntimeErrorCode.UNKNOWN_ELEMENT */, message);\n      } else {\n        console.error(formatRuntimeError(304 /* RuntimeErrorCode.UNKNOWN_ELEMENT */, message));\n      }\n    }\n  }\n}\n/**\n * Validates that the property of the element is known at runtime and returns\n * false if it's not the case.\n * This check is relevant for JIT-compiled components (for AOT-compiled\n * ones this check happens at build time).\n *\n * The property is considered known if either:\n * - it's a known property of the element\n * - the element is allowed by one of the schemas\n * - the property is used for animations\n *\n * @param element Element to validate\n * @param propName Name of the property to check\n * @param tagName Name of the tag hosting the property\n * @param schemas Array of schemas\n */\nfunction isPropertyValid(element, propName, tagName, schemas) {\n  // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT\n  // mode where this check happens at compile time. In JIT mode, `schemas` is always present and\n  // defined as an array (as an empty array in case `schemas` field is not defined) and we should\n  // execute the check below.\n  if (schemas === null) return true;\n  // The property is considered valid if the element matches the schema, it exists on the element,\n  // or it is synthetic.\n  if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {\n    return true;\n  }\n  // Note: `typeof Node` returns 'function' in most browsers, but is undefined with domino.\n  return typeof Node === 'undefined' || Node === null || !(element instanceof Node);\n}\n/**\n * Logs or throws an error that a property is not supported on an element.\n *\n * @param propName Name of the invalid property\n * @param tagName Name of the tag hosting the property\n * @param nodeType Type of the node hosting the property\n * @param lView An `LView` that represents a current component\n */\nfunction handleUnknownPropertyError(propName, tagName, nodeType, lView) {\n  // Special-case a situation when a structural directive is applied to\n  // an `<ng-template>` element, for example: `<ng-template *ngIf=\"true\">`.\n  // In this case the compiler generates the `ɵɵtemplate` instruction with\n  // the `null` as the tagName. The directive matching logic at runtime relies\n  // on this effect (see `isInlineTemplate`), thus using the 'ng-template' as\n  // a default value of the `tNode.value` is not feasible at this moment.\n  if (!tagName && nodeType === 4 /* TNodeType.Container */) {\n    tagName = 'ng-template';\n  }\n  const isHostStandalone = isHostComponentStandalone(lView);\n  const templateLocation = getTemplateLocationDetails(lView);\n  let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;\n  const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n  const importLocation = isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared';\n  if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {\n    // Most likely this is a control flow directive (such as `*ngIf`) used in\n    // a template, but the directive or the `CommonModule` is not imported.\n    const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);\n    message += `\\nIf the '${propName}' is an Angular control flow directive, ` + `please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;\n  } else {\n    // May be an Angular component, which is not imported/declared?\n    message += `\\n1. If '${tagName}' is an Angular component and it has the ` + `'${propName}' input, then verify that it is ${importLocation}.`;\n    // May be a Web Component?\n    if (tagName && tagName.indexOf('-') > -1) {\n      message += `\\n2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' ` + `to the ${schemas} of this component to suppress this message.`;\n      message += `\\n3. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n    } else {\n      // If it's expected, the error can be suppressed by the `NO_ERRORS_SCHEMA` schema.\n      message += `\\n2. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n    }\n  }\n  reportUnknownPropertyError(message);\n}\nfunction reportUnknownPropertyError(message) {\n  if (shouldThrowErrorOnUnknownProperty) {\n    throw new RuntimeError(303 /* RuntimeErrorCode.UNKNOWN_BINDING */, message);\n  } else {\n    console.error(formatRuntimeError(303 /* RuntimeErrorCode.UNKNOWN_BINDING */, message));\n  }\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode and also it relies on the constructor function being available.\n *\n * Gets a reference to the host component def (where a current component is declared).\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction getDeclarationComponentDef(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  // Unable to obtain a context.\n  if (!context) return null;\n  return context.constructor ? getComponentDef(context.constructor) : null;\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode.\n *\n * Checks if the current component is declared inside of a standalone component template.\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction isHostComponentStandalone(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const componentDef = getDeclarationComponentDef(lView);\n  // Treat host component as non-standalone if we can't obtain the def.\n  return !!componentDef?.standalone;\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode.\n *\n * Constructs a string describing the location of the host component template. The function is used\n * in dev mode to produce error messages.\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction getTemplateLocationDetails(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const hostComponentDef = getDeclarationComponentDef(lView);\n  const componentClassName = hostComponentDef?.type?.name;\n  return componentClassName ? ` (used in the '${componentClassName}' component template)` : '';\n}\n/**\n * The set of known control flow directives and their corresponding imports.\n * We use this set to produce a more precises error message with a note\n * that the `CommonModule` should also be included.\n */\nconst KNOWN_CONTROL_FLOW_DIRECTIVES = new Map([['ngIf', 'NgIf'], ['ngFor', 'NgFor'], ['ngSwitchCase', 'NgSwitchCase'], ['ngSwitchDefault', 'NgSwitchDefault']]);\n/**\n * Returns true if the tag name is allowed by specified schemas.\n * @param schemas Array of schemas\n * @param tagName Name of the tag\n */\nfunction matchingSchemas(schemas, tagName) {\n  if (schemas !== null) {\n    for (let i = 0; i < schemas.length; i++) {\n      const schema = schemas[i];\n      if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveWindow(element) {\n  return element.ownerDocument.defaultView;\n}\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveDocument(element) {\n  return element.ownerDocument;\n}\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveBody(element) {\n  return element.ownerDocument.body;\n}\n/**\n * The special delimiter we use to separate property names, prefixes, and suffixes\n * in property binding metadata. See storeBindingMetadata().\n *\n * We intentionally use the Unicode \"REPLACEMENT CHARACTER\" (U+FFFD) as a delimiter\n * because it is a very uncommon character that is unlikely to be part of a user's\n * property names or interpolation strings. If it is in fact used in a property\n * binding, DebugElement.properties will not return the correct value for that\n * binding. However, there should be no runtime effect for real applications.\n *\n * This character is typically rendered as a question mark inside of a diamond.\n * See https://en.wikipedia.org/wiki/Specials_(Unicode_block)\n *\n */\nconst INTERPOLATION_DELIMITER = `�`;\n/**\n * Unwrap a value which might be behind a closure (for forward declaration reasons).\n */\nfunction maybeUnwrapFn(value) {\n  if (value instanceof Function) {\n    return value();\n  } else {\n    return value;\n  }\n}\n\n/**\n * The max length of the string representation of a value in an error message\n */\nconst VALUE_STRING_LENGTH_LIMIT = 200;\n/** Verifies that a given type is a Standalone Component. */\nfunction assertStandaloneComponentType(type) {\n  assertComponentDef(type);\n  const componentDef = getComponentDef(type);\n  if (!componentDef.standalone) {\n    throw new RuntimeError(907 /* RuntimeErrorCode.TYPE_IS_NOT_STANDALONE */, `The ${stringifyForError(type)} component is not marked as standalone, ` + `but Angular expects to have a standalone component here. ` + `Please make sure the ${stringifyForError(type)} component has ` + `the \\`standalone: true\\` flag in the decorator.`);\n  }\n}\n/** Verifies whether a given type is a component */\nfunction assertComponentDef(type) {\n  if (!getComponentDef(type)) {\n    throw new RuntimeError(906 /* RuntimeErrorCode.MISSING_GENERATED_DEF */, `The ${stringifyForError(type)} is not an Angular component, ` + `make sure it has the \\`@Component\\` decorator.`);\n  }\n}\n/** Called when there are multiple component selectors that match a given node */\nfunction throwMultipleComponentError(tNode, first, second) {\n  throw new RuntimeError(-300 /* RuntimeErrorCode.MULTIPLE_COMPONENTS_MATCH */, `Multiple components match node with tagname ${tNode.value}: ` + `${stringifyForError(first)} and ` + `${stringifyForError(second)}`);\n}\n/** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */\nfunction throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {\n  const hostComponentDef = getDeclarationComponentDef(lView);\n  const componentClassName = hostComponentDef?.type?.name;\n  const field = propName ? ` for '${propName}'` : '';\n  let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ''}`;\n  if (creationMode) {\n    msg += ` It seems like the view has been created after its parent and its children have been dirty checked.` + ` Has it been created in a change detection hook?`;\n  }\n  throw new RuntimeError(-100 /* RuntimeErrorCode.EXPRESSION_CHANGED_AFTER_CHECKED */, msg);\n}\nfunction formatValue(value) {\n  let strValue = String(value);\n  // JSON.stringify will throw on circular references\n  try {\n    if (Array.isArray(value) || strValue === '[object Object]') {\n      strValue = JSON.stringify(value);\n    }\n  } catch (error) {}\n  return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + '…' : strValue;\n}\nfunction constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {\n  const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);\n  let oldValue = prefix,\n    newValue = prefix;\n  for (let i = 0; i < chunks.length; i++) {\n    const slotIdx = rootIndex + i;\n    oldValue += `${lView[slotIdx]}${chunks[i]}`;\n    newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;\n  }\n  return {\n    propName,\n    oldValue,\n    newValue\n  };\n}\n/**\n * Constructs an object that contains details for the ExpressionChangedAfterItHasBeenCheckedError:\n * - property name (for property bindings or interpolations)\n * - old and new values, enriched using information from metadata\n *\n * More information on the metadata storage format can be found in `storePropertyBindingMetadata`\n * function description.\n */\nfunction getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {\n  const tData = lView[TVIEW].data;\n  const metadata = tData[bindingIndex];\n  if (typeof metadata === 'string') {\n    // metadata for property interpolation\n    if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {\n      return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);\n    }\n    // metadata for property binding\n    return {\n      propName: metadata,\n      oldValue,\n      newValue\n    };\n  }\n  // metadata is not available for this expression, check if this expression is a part of the\n  // property interpolation by going from the current binding index left and look for a string that\n  // contains INTERPOLATION_DELIMITER, the layout in tView.data for this case will look like this:\n  // [..., 'id�Prefix � and � suffix', null, null, null, ...]\n  if (metadata === null) {\n    let idx = bindingIndex - 1;\n    while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {\n      idx--;\n    }\n    const meta = tData[idx];\n    if (typeof meta === 'string') {\n      const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g'));\n      // first interpolation delimiter separates property name from interpolation parts (in case of\n      // property interpolations), so we subtract one from total number of found delimiters\n      if (matches && matches.length - 1 > bindingIndex - idx) {\n        return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);\n      }\n    }\n  }\n  return {\n    propName: undefined,\n    oldValue,\n    newValue\n  };\n}\n\n/** Flags describing an input for a directive. */\nvar InputFlags;\n(function (InputFlags) {\n  InputFlags[InputFlags[\"None\"] = 0] = \"None\";\n  InputFlags[InputFlags[\"SignalBased\"] = 1] = \"SignalBased\";\n  InputFlags[InputFlags[\"HasDecoratorInputTransform\"] = 2] = \"HasDecoratorInputTransform\";\n})(InputFlags || (InputFlags = {}));\n\n/**\n * Flags for renderer-specific style modifiers.\n * @publicApi\n */\nvar RendererStyleFlags2;\n(function (RendererStyleFlags2) {\n  // TODO(misko): This needs to be refactored into a separate file so that it can be imported from\n  // `node_manipulation.ts` Currently doing the import cause resolution order to change and fails\n  // the tests. The work around is to have hard coded value in `node_manipulation.ts` for now.\n  /**\n   * Marks a style as important.\n   */\n  RendererStyleFlags2[RendererStyleFlags2[\"Important\"] = 1] = \"Important\";\n  /**\n   * Marks a style as using dash case naming (this-is-dash-case).\n   */\n  RendererStyleFlags2[RendererStyleFlags2[\"DashCase\"] = 2] = \"DashCase\";\n})(RendererStyleFlags2 || (RendererStyleFlags2 = {}));\nlet _icuContainerIterate;\n/**\n * Iterator which provides ability to visit all of the `TIcuContainerNode` root `RNode`s.\n */\nfunction icuContainerIterate(tIcuContainerNode, lView) {\n  return _icuContainerIterate(tIcuContainerNode, lView);\n}\n/**\n * Ensures that `IcuContainerVisitor`'s implementation is present.\n *\n * This function is invoked when i18n instruction comes across an ICU. The purpose is to allow the\n * bundler to tree shake ICU logic and only load it if ICU instruction is executed.\n */\nfunction ensureIcuContainerVisitorLoaded(loader) {\n  if (_icuContainerIterate === undefined) {\n    // Do not inline this function. We want to keep `ensureIcuContainerVisitorLoaded` light, so it\n    // can be inlined into call-site.\n    _icuContainerIterate = loader();\n  }\n}\n\n/**\n * NOTE: for performance reasons, the possible actions are inlined within the function instead of\n * being passed as an argument.\n */\nfunction applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {\n  // If this slot was allocated for a text node dynamically created by i18n, the text node itself\n  // won't be created until i18nApply() in the update block, so this node should be skipped.\n  // For more info, see \"ICU expressions should work inside an ngTemplateOutlet inside an ngFor\"\n  // in `i18n_spec.ts`.\n  if (lNodeToHandle != null) {\n    let lContainer;\n    let isComponent = false;\n    // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is\n    // wrapped in an array which needs to be unwrapped. We need to know if it is a component and if\n    // it has LContainer so that we can process all of those cases appropriately.\n    if (isLContainer(lNodeToHandle)) {\n      lContainer = lNodeToHandle;\n    } else if (isLView(lNodeToHandle)) {\n      isComponent = true;\n      ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');\n      lNodeToHandle = lNodeToHandle[HOST];\n    }\n    const rNode = unwrapRNode(lNodeToHandle);\n    if (action === 0 /* WalkTNodeTreeAction.Create */ && parent !== null) {\n      if (beforeNode == null) {\n        nativeAppendChild(renderer, parent, rNode);\n      } else {\n        nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n      }\n    } else if (action === 1 /* WalkTNodeTreeAction.Insert */ && parent !== null) {\n      nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n    } else if (action === 2 /* WalkTNodeTreeAction.Detach */) {\n      nativeRemoveNode(renderer, rNode, isComponent);\n    } else if (action === 3 /* WalkTNodeTreeAction.Destroy */) {\n      ngDevMode && ngDevMode.rendererDestroyNode++;\n      renderer.destroyNode(rNode);\n    }\n    if (lContainer != null) {\n      applyContainer(renderer, action, lContainer, parent, beforeNode);\n    }\n  }\n}\nfunction createTextNode(renderer, value) {\n  ngDevMode && ngDevMode.rendererCreateTextNode++;\n  ngDevMode && ngDevMode.rendererSetText++;\n  return renderer.createText(value);\n}\nfunction updateTextNode(renderer, rNode, value) {\n  ngDevMode && ngDevMode.rendererSetText++;\n  renderer.setValue(rNode, value);\n}\nfunction createCommentNode(renderer, value) {\n  ngDevMode && ngDevMode.rendererCreateComment++;\n  return renderer.createComment(escapeCommentText(value));\n}\n/**\n * Creates a native element from a tag name, using a renderer.\n * @param renderer A renderer to use\n * @param name the tag name\n * @param namespace Optional namespace for element.\n * @returns the element created\n */\nfunction createElementNode(renderer, name, namespace) {\n  ngDevMode && ngDevMode.rendererCreateElement++;\n  return renderer.createElement(name, namespace);\n}\n/**\n * Removes all DOM elements associated with a view.\n *\n * Because some root nodes of the view may be containers, we sometimes need\n * to propagate deeply into the nested containers to remove all elements in the\n * views beneath it.\n *\n * @param tView The `TView' of the `LView` from which elements should be added or removed\n * @param lView The view from which elements should be added or removed\n */\nfunction removeViewFromDOM(tView, lView) {\n  detachViewFromDOM(tView, lView);\n  lView[HOST] = null;\n  lView[T_HOST] = null;\n}\n/**\n * Adds all DOM elements associated with a view.\n *\n * Because some root nodes of the view may be containers, we sometimes need\n * to propagate deeply into the nested containers to add all elements in the\n * views beneath it.\n *\n * @param tView The `TView' of the `LView` from which elements should be added or removed\n * @param parentTNode The `TNode` where the `LView` should be attached to.\n * @param renderer Current renderer to use for DOM manipulations.\n * @param lView The view from which elements should be added or removed\n * @param parentNativeNode The parent `RElement` where it should be inserted into.\n * @param beforeNode The node before which elements should be added, if insert mode\n */\nfunction addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {\n  lView[HOST] = parentNativeNode;\n  lView[T_HOST] = parentTNode;\n  applyView(tView, lView, renderer, 1 /* WalkTNodeTreeAction.Insert */, parentNativeNode, beforeNode);\n}\n/**\n * Detach a `LView` from the DOM by detaching its nodes.\n *\n * @param tView The `TView' of the `LView` to be detached\n * @param lView the `LView` to be detached.\n */\nfunction detachViewFromDOM(tView, lView) {\n  // When we remove a view from the DOM, we need to rerun afterRender hooks\n  // We don't necessarily needs to run change detection. DOM removal only requires\n  // change detection if animations are enabled (this notification is handled by animations).\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(10 /* NotificationSource.ViewDetachedFromDOM */);\n  applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);\n}\n/**\n * Traverses down and up the tree of views and containers to remove listeners and\n * call onDestroy callbacks.\n *\n * Notes:\n *  - Because it's used for onDestroy calls, it needs to be bottom-up.\n *  - Must process containers instead of their views to avoid splicing\n *  when views are destroyed and re-added.\n *  - Using a while loop because it's faster than recursion\n *  - Destroy only called on movement to sibling or movement to parent (laterally or up)\n *\n *  @param rootView The view to destroy\n */\nfunction destroyViewTree(rootView) {\n  // If the view has no children, we can clean it up and return early.\n  let lViewOrLContainer = rootView[CHILD_HEAD];\n  if (!lViewOrLContainer) {\n    return cleanUpView(rootView[TVIEW], rootView);\n  }\n  while (lViewOrLContainer) {\n    let next = null;\n    if (isLView(lViewOrLContainer)) {\n      // If LView, traverse down to child.\n      next = lViewOrLContainer[CHILD_HEAD];\n    } else {\n      ngDevMode && assertLContainer(lViewOrLContainer);\n      // If container, traverse down to its first LView.\n      const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];\n      if (firstView) next = firstView;\n    }\n    if (!next) {\n      // Only clean up view when moving to the side or up, as destroy hooks\n      // should be called in order from the bottom up.\n      while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {\n        if (isLView(lViewOrLContainer)) {\n          cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n        }\n        lViewOrLContainer = lViewOrLContainer[PARENT];\n      }\n      if (lViewOrLContainer === null) lViewOrLContainer = rootView;\n      if (isLView(lViewOrLContainer)) {\n        cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n      }\n      next = lViewOrLContainer && lViewOrLContainer[NEXT];\n    }\n    lViewOrLContainer = next;\n  }\n}\n/**\n * Inserts a view into a container.\n *\n * This adds the view to the container's array of active views in the correct\n * position. It also adds the view's elements to the DOM if the container isn't a\n * root node of another view (in that case, the view's elements will be added when\n * the container's parent view is added later).\n *\n * @param tView The `TView' of the `LView` to insert\n * @param lView The view to insert\n * @param lContainer The container into which the view should be inserted\n * @param index Which index in the container to insert the child view into\n */\nfunction insertView(tView, lView, lContainer, index) {\n  ngDevMode && assertLView(lView);\n  ngDevMode && assertLContainer(lContainer);\n  const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n  const containerLength = lContainer.length;\n  if (index > 0) {\n    // This is a new view, we need to add it to the children.\n    lContainer[indexInContainer - 1][NEXT] = lView;\n  }\n  if (index < containerLength - CONTAINER_HEADER_OFFSET) {\n    lView[NEXT] = lContainer[indexInContainer];\n    addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);\n  } else {\n    lContainer.push(lView);\n    lView[NEXT] = null;\n  }\n  lView[PARENT] = lContainer;\n  // track views where declaration and insertion points are different\n  const declarationLContainer = lView[DECLARATION_LCONTAINER];\n  if (declarationLContainer !== null && lContainer !== declarationLContainer) {\n    trackMovedView(declarationLContainer, lView);\n  }\n  // notify query that a new view has been added\n  const lQueries = lView[QUERIES];\n  if (lQueries !== null) {\n    lQueries.insertView(tView);\n  }\n  updateAncestorTraversalFlagsOnAttach(lView);\n  // Sets the attached flag\n  lView[FLAGS] |= 128 /* LViewFlags.Attached */;\n}\n/**\n * Track views created from the declaration container (TemplateRef) and inserted into a\n * different LContainer or attached directly to ApplicationRef.\n */\nfunction trackMovedView(declarationContainer, lView) {\n  ngDevMode && assertDefined(lView, 'LView required');\n  ngDevMode && assertLContainer(declarationContainer);\n  const movedViews = declarationContainer[MOVED_VIEWS];\n  const parent = lView[PARENT];\n  ngDevMode && assertDefined(parent, 'missing parent');\n  if (isLView(parent)) {\n    declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;\n  } else {\n    const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];\n    ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');\n    const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];\n    ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');\n    if (declaredComponentLView !== insertedComponentLView) {\n      // At this point the declaration-component is not same as insertion-component; this means that\n      // this is a transplanted view. Mark the declared lView as having transplanted views so that\n      // those views can participate in CD.\n      declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;\n    }\n  }\n  if (movedViews === null) {\n    declarationContainer[MOVED_VIEWS] = [lView];\n  } else {\n    movedViews.push(lView);\n  }\n}\nfunction detachMovedView(declarationContainer, lView) {\n  ngDevMode && assertLContainer(declarationContainer);\n  ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');\n  const movedViews = declarationContainer[MOVED_VIEWS];\n  const declarationViewIndex = movedViews.indexOf(lView);\n  movedViews.splice(declarationViewIndex, 1);\n}\n/**\n * Detaches a view from a container.\n *\n * This method removes the view from the container's array of active views. It also\n * removes the view's elements from the DOM.\n *\n * @param lContainer The container from which to detach a view\n * @param removeIndex The index of the view to detach\n * @returns Detached LView instance.\n */\nfunction detachView(lContainer, removeIndex) {\n  if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n  const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;\n  const viewToDetach = lContainer[indexInContainer];\n  if (viewToDetach) {\n    const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];\n    if (declarationLContainer !== null && declarationLContainer !== lContainer) {\n      detachMovedView(declarationLContainer, viewToDetach);\n    }\n    if (removeIndex > 0) {\n      lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];\n    }\n    const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);\n    removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);\n    // notify query that a view has been removed\n    const lQueries = removedLView[QUERIES];\n    if (lQueries !== null) {\n      lQueries.detachView(removedLView[TVIEW]);\n    }\n    viewToDetach[PARENT] = null;\n    viewToDetach[NEXT] = null;\n    // Unsets the attached flag\n    viewToDetach[FLAGS] &= ~128 /* LViewFlags.Attached */;\n  }\n  return viewToDetach;\n}\n/**\n * A standalone function which destroys an LView,\n * conducting clean up (e.g. removing listeners, calling onDestroys).\n *\n * @param tView The `TView' of the `LView` to be destroyed\n * @param lView The view to be destroyed.\n */\nfunction destroyLView(tView, lView) {\n  if (!(lView[FLAGS] & 256 /* LViewFlags.Destroyed */)) {\n    const renderer = lView[RENDERER];\n    if (renderer.destroyNode) {\n      applyView(tView, lView, renderer, 3 /* WalkTNodeTreeAction.Destroy */, null, null);\n    }\n    destroyViewTree(lView);\n  }\n}\n/**\n * Calls onDestroys hooks for all directives and pipes in a given view and then removes all\n * listeners. Listeners are removed as the last step so events delivered in the onDestroys hooks\n * can be propagated to @Output listeners.\n *\n * @param tView `TView` for the `LView` to clean up.\n * @param lView The LView to clean up\n */\nfunction cleanUpView(tView, lView) {\n  if (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) {\n    return;\n  }\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    // Usually the Attached flag is removed when the view is detached from its parent, however\n    // if it's a root view, the flag won't be unset hence why we're also removing on destroy.\n    lView[FLAGS] &= ~128 /* LViewFlags.Attached */;\n    // Mark the LView as destroyed *before* executing the onDestroy hooks. An onDestroy hook\n    // runs arbitrary user code, which could include its own `viewRef.destroy()` (or similar). If\n    // We don't flag the view as destroyed before the hooks, this could lead to an infinite loop.\n    // This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is\n    // really more of an \"afterDestroy\" hook if you think about it.\n    lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;\n    lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);\n    executeOnDestroys(tView, lView);\n    processCleanups(tView, lView);\n    // For component views only, the local renderer is destroyed at clean up time.\n    if (lView[TVIEW].type === 1 /* TViewType.Component */) {\n      ngDevMode && ngDevMode.rendererDestroy++;\n      lView[RENDERER].destroy();\n    }\n    const declarationContainer = lView[DECLARATION_LCONTAINER];\n    // we are dealing with an embedded view that is still inserted into a container\n    if (declarationContainer !== null && isLContainer(lView[PARENT])) {\n      // and this is a projected view\n      if (declarationContainer !== lView[PARENT]) {\n        detachMovedView(declarationContainer, lView);\n      }\n      // For embedded views still attached to a container: remove query result from this view.\n      const lQueries = lView[QUERIES];\n      if (lQueries !== null) {\n        lQueries.detachView(tView);\n      }\n    }\n    // Unregister the view once everything else has been cleaned up.\n    unregisterLView(lView);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n/** Removes listeners and unsubscribes from output subscriptions */\nfunction processCleanups(tView, lView) {\n  ngDevMode && assertNotReactive(processCleanups.name);\n  const tCleanup = tView.cleanup;\n  const lCleanup = lView[CLEANUP];\n  if (tCleanup !== null) {\n    for (let i = 0; i < tCleanup.length - 1; i += 2) {\n      if (typeof tCleanup[i] === 'string') {\n        // This is a native DOM listener. It will occupy 4 entries in the TCleanup array (hence i +=\n        // 2 at the end of this block).\n        const targetIdx = tCleanup[i + 3];\n        ngDevMode && assertNumber(targetIdx, 'cleanup target must be a number');\n        if (targetIdx >= 0) {\n          // Destroy anything whose teardown is a function call (e.g. QueryList, ModelSignal).\n          lCleanup[targetIdx]();\n        } else {\n          // Subscription\n          lCleanup[-targetIdx].unsubscribe();\n        }\n        i += 2;\n      } else {\n        // This is a cleanup function that is grouped with the index of its context\n        const context = lCleanup[tCleanup[i + 1]];\n        tCleanup[i].call(context);\n      }\n    }\n  }\n  if (lCleanup !== null) {\n    lView[CLEANUP] = null;\n  }\n  const destroyHooks = lView[ON_DESTROY_HOOKS];\n  if (destroyHooks !== null) {\n    // Reset the ON_DESTROY_HOOKS array before iterating over it to prevent hooks that unregister\n    // themselves from mutating the array during iteration.\n    lView[ON_DESTROY_HOOKS] = null;\n    for (let i = 0; i < destroyHooks.length; i++) {\n      const destroyHooksFn = destroyHooks[i];\n      ngDevMode && assertFunction(destroyHooksFn, 'Expecting destroy hook to be a function.');\n      destroyHooksFn();\n    }\n  }\n  // Destroy effects registered to the view. Many of these will have been processed above.\n  const effects = lView[EFFECTS];\n  if (effects !== null) {\n    lView[EFFECTS] = null;\n    for (const effect of effects) {\n      effect.destroy();\n    }\n  }\n}\n/** Calls onDestroy hooks for this view */\nfunction executeOnDestroys(tView, lView) {\n  ngDevMode && assertNotReactive(executeOnDestroys.name);\n  let destroyHooks;\n  if (tView != null && (destroyHooks = tView.destroyHooks) != null) {\n    for (let i = 0; i < destroyHooks.length; i += 2) {\n      const context = lView[destroyHooks[i]];\n      // Only call the destroy hook if the context has been requested.\n      if (!(context instanceof NodeInjectorFactory)) {\n        const toCall = destroyHooks[i + 1];\n        if (Array.isArray(toCall)) {\n          for (let j = 0; j < toCall.length; j += 2) {\n            const callContext = context[toCall[j]];\n            const hook = toCall[j + 1];\n            profiler(4 /* ProfilerEvent.LifecycleHookStart */, callContext, hook);\n            try {\n              hook.call(callContext);\n            } finally {\n              profiler(5 /* ProfilerEvent.LifecycleHookEnd */, callContext, hook);\n            }\n          }\n        } else {\n          profiler(4 /* ProfilerEvent.LifecycleHookStart */, context, toCall);\n          try {\n            toCall.call(context);\n          } finally {\n            profiler(5 /* ProfilerEvent.LifecycleHookEnd */, context, toCall);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Returns a native element if a node can be inserted into the given parent.\n *\n * There are two reasons why we may not be able to insert a element immediately.\n * - Projection: When creating a child content element of a component, we have to skip the\n *   insertion because the content of a component will be projected.\n *   `<component><content>delayed due to projection</content></component>`\n * - Parent container is disconnected: This can happen when we are inserting a view into\n *   parent container, which itself is disconnected. For example the parent container is part\n *   of a View which has not be inserted or is made for projection but has not been inserted\n *   into destination.\n *\n * @param tView: Current `TView`.\n * @param tNode: `TNode` for which we wish to retrieve render parent.\n * @param lView: Current `LView`.\n */\nfunction getParentRElement(tView, tNode, lView) {\n  return getClosestRElement(tView, tNode.parent, lView);\n}\n/**\n * Get closest `RElement` or `null` if it can't be found.\n *\n * If `TNode` is `TNodeType.Element` => return `RElement` at `LView[tNode.index]` location.\n * If `TNode` is `TNodeType.ElementContainer|IcuContain` => return the parent (recursively).\n * If `TNode` is `null` then return host `RElement`:\n *   - return `null` if projection\n *   - return `null` if parent container is disconnected (we have no parent.)\n *\n * @param tView: Current `TView`.\n * @param tNode: `TNode` for which we wish to retrieve `RElement` (or `null` if host element is\n *     needed).\n * @param lView: Current `LView`.\n * @returns `null` if the `RElement` can't be determined at this time (no parent / projection)\n */\nfunction getClosestRElement(tView, tNode, lView) {\n  let parentTNode = tNode;\n  // Skip over element and ICU containers as those are represented by a comment node and\n  // can't be used as a render parent. Also skip let declarations since they don't have a\n  // corresponding DOM node at all.\n  while (parentTNode !== null && parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {\n    tNode = parentTNode;\n    parentTNode = tNode.parent;\n  }\n  // If the parent tNode is null, then we are inserting across views: either into an embedded view\n  // or a component view.\n  if (parentTNode === null) {\n    // We are inserting a root element of the component view into the component host element and\n    // it should always be eager.\n    return lView[HOST];\n  } else {\n    ngDevMode && assertTNodeType(parentTNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);\n    const {\n      componentOffset\n    } = parentTNode;\n    if (componentOffset > -1) {\n      ngDevMode && assertTNodeForLView(parentTNode, lView);\n      const {\n        encapsulation\n      } = tView.data[parentTNode.directiveStart + componentOffset];\n      // We've got a parent which is an element in the current view. We just need to verify if the\n      // parent element is not a component. Component's content nodes are not inserted immediately\n      // because they will be projected, and so doing insert at this point would be wasteful.\n      // Since the projection would then move it to its final destination. Note that we can't\n      // make this assumption when using the Shadow DOM, because the native projection placeholders\n      // (<content> or <slot>) have to be in place as elements are being inserted.\n      if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {\n        return null;\n      }\n    }\n    return getNativeByTNode(parentTNode, lView);\n  }\n}\n/**\n * Inserts a native node before another native node for a given parent.\n * This is a utility function that can be used when native nodes were determined.\n */\nfunction nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {\n  ngDevMode && ngDevMode.rendererInsertBefore++;\n  renderer.insertBefore(parent, child, beforeNode, isMove);\n}\nfunction nativeAppendChild(renderer, parent, child) {\n  ngDevMode && ngDevMode.rendererAppendChild++;\n  ngDevMode && assertDefined(parent, 'parent node must be defined');\n  renderer.appendChild(parent, child);\n}\nfunction nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {\n  if (beforeNode !== null) {\n    nativeInsertBefore(renderer, parent, child, beforeNode, isMove);\n  } else {\n    nativeAppendChild(renderer, parent, child);\n  }\n}\n/**\n * Returns a native parent of a given native node.\n */\nfunction nativeParentNode(renderer, node) {\n  return renderer.parentNode(node);\n}\n/**\n * Returns a native sibling of a given native node.\n */\nfunction nativeNextSibling(renderer, node) {\n  return renderer.nextSibling(node);\n}\n/**\n * Find a node in front of which `currentTNode` should be inserted.\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * takes `TNode.insertBeforeIndex` into account if i18n code has been invoked.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {\n  return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);\n}\n/**\n * Find a node in front of which `currentTNode` should be inserted. (Does not take i18n into\n * account)\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * does not take `TNode.insertBeforeIndex` into account.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {\n  if (parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */)) {\n    return getNativeByTNode(parentTNode, lView);\n  }\n  return null;\n}\n/**\n * Tree shakable boundary for `getInsertInFrontOfRNodeWithI18n` function.\n *\n * This function will only be set if i18n code runs.\n */\nlet _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;\n/**\n * Tree shakable boundary for `processI18nInsertBefore` function.\n *\n * This function will only be set if i18n code runs.\n */\nlet _processI18nInsertBefore;\nfunction setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {\n  _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;\n  _processI18nInsertBefore = processI18nInsertBefore;\n}\n/**\n * Appends the `child` native node (or a collection of nodes) to the `parent`.\n *\n * @param tView The `TView' to be appended\n * @param lView The current LView\n * @param childRNode The native child (or children) that should be appended\n * @param childTNode The TNode of the child element\n */\nfunction appendChild(tView, lView, childRNode, childTNode) {\n  const parentRNode = getParentRElement(tView, childTNode, lView);\n  const renderer = lView[RENDERER];\n  const parentTNode = childTNode.parent || lView[T_HOST];\n  const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);\n  if (parentRNode != null) {\n    if (Array.isArray(childRNode)) {\n      for (let i = 0; i < childRNode.length; i++) {\n        nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);\n      }\n    } else {\n      nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);\n    }\n  }\n  _processI18nInsertBefore !== undefined && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);\n}\n/**\n * Returns the first native node for a given LView, starting from the provided TNode.\n *\n * Native nodes are returned in the order in which those appear in the native tree (DOM).\n */\nfunction getFirstNativeNode(lView, tNode) {\n  if (tNode !== null) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */ | 16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */);\n    const tNodeType = tNode.type;\n    if (tNodeType & 3 /* TNodeType.AnyRNode */) {\n      return getNativeByTNode(tNode, lView);\n    } else if (tNodeType & 4 /* TNodeType.Container */) {\n      return getBeforeNodeForView(-1, lView[tNode.index]);\n    } else if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n      const elIcuContainerChild = tNode.child;\n      if (elIcuContainerChild !== null) {\n        return getFirstNativeNode(lView, elIcuContainerChild);\n      } else {\n        const rNodeOrLContainer = lView[tNode.index];\n        if (isLContainer(rNodeOrLContainer)) {\n          return getBeforeNodeForView(-1, rNodeOrLContainer);\n        } else {\n          return unwrapRNode(rNodeOrLContainer);\n        }\n      }\n    } else if (tNodeType & 128 /* TNodeType.LetDeclaration */) {\n      return getFirstNativeNode(lView, tNode.next);\n    } else if (tNodeType & 32 /* TNodeType.Icu */) {\n      let nextRNode = icuContainerIterate(tNode, lView);\n      let rNode = nextRNode();\n      // If the ICU container has no nodes, than we use the ICU anchor as the node.\n      return rNode || unwrapRNode(lView[tNode.index]);\n    } else {\n      const projectionNodes = getProjectionNodes(lView, tNode);\n      if (projectionNodes !== null) {\n        if (Array.isArray(projectionNodes)) {\n          return projectionNodes[0];\n        }\n        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n        ngDevMode && assertParentView(parentView);\n        return getFirstNativeNode(parentView, projectionNodes);\n      } else {\n        return getFirstNativeNode(lView, tNode.next);\n      }\n    }\n  }\n  return null;\n}\nfunction getProjectionNodes(lView, tNode) {\n  if (tNode !== null) {\n    const componentView = lView[DECLARATION_COMPONENT_VIEW];\n    const componentHost = componentView[T_HOST];\n    const slotIdx = tNode.projection;\n    ngDevMode && assertProjectionSlots(lView);\n    return componentHost.projection[slotIdx];\n  }\n  return null;\n}\nfunction getBeforeNodeForView(viewIndexInContainer, lContainer) {\n  const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;\n  if (nextViewIndex < lContainer.length) {\n    const lView = lContainer[nextViewIndex];\n    const firstTNodeOfView = lView[TVIEW].firstChild;\n    if (firstTNodeOfView !== null) {\n      return getFirstNativeNode(lView, firstTNodeOfView);\n    }\n  }\n  return lContainer[NATIVE];\n}\n/**\n * Removes a native node itself using a given renderer. To remove the node we are looking up its\n * parent from the native tree as not all platforms / browsers support the equivalent of\n * node.remove().\n *\n * @param renderer A renderer to be used\n * @param rNode The native node that should be removed\n * @param isHostElement A flag indicating if a node to be removed is a host of a component.\n */\nfunction nativeRemoveNode(renderer, rNode, isHostElement) {\n  ngDevMode && ngDevMode.rendererRemoveNode++;\n  renderer.removeChild(null, rNode, isHostElement);\n}\n/**\n * Clears the contents of a given RElement.\n *\n * @param rElement the native RElement to be cleared\n */\nfunction clearElementContents(rElement) {\n  rElement.textContent = '';\n}\n/**\n * Performs the operation of `action` on the node. Typically this involves inserting or removing\n * nodes on the LView or projection boundary.\n */\nfunction applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {\n  while (tNode != null) {\n    ngDevMode && assertTNodeForLView(tNode, lView);\n    // Let declarations don't have corresponding DOM nodes so we skip over them.\n    if (tNode.type === 128 /* TNodeType.LetDeclaration */) {\n      tNode = tNode.next;\n      continue;\n    }\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);\n    const rawSlotValue = lView[tNode.index];\n    const tNodeType = tNode.type;\n    if (isProjection) {\n      if (action === 0 /* WalkTNodeTreeAction.Create */) {\n        rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);\n        tNode.flags |= 2 /* TNodeFlags.isProjected */;\n      }\n    }\n    if ((tNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {\n      if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n        applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      } else if (tNodeType & 32 /* TNodeType.Icu */) {\n        const nextRNode = icuContainerIterate(tNode, lView);\n        let rNode;\n        while (rNode = nextRNode()) {\n          applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);\n        }\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      } else if (tNodeType & 16 /* TNodeType.Projection */) {\n        applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);\n      } else {\n        ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      }\n    }\n    tNode = isProjection ? tNode.projectionNext : tNode.next;\n  }\n}\nfunction applyView(tView, lView, renderer, action, parentRElement, beforeNode) {\n  applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);\n}\n/**\n * `applyProjection` performs operation on the projection.\n *\n * Inserting a projection requires us to locate the projected nodes from the parent component. The\n * complication is that those nodes themselves could be re-projected from their parent component.\n *\n * @param tView The `TView` of `LView` which needs to be inserted, detached, destroyed\n * @param lView The `LView` which needs to be inserted, detached, destroyed.\n * @param tProjectionNode node to project\n */\nfunction applyProjection(tView, lView, tProjectionNode) {\n  const renderer = lView[RENDERER];\n  const parentRNode = getParentRElement(tView, tProjectionNode, lView);\n  const parentTNode = tProjectionNode.parent || lView[T_HOST];\n  let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);\n  applyProjectionRecursive(renderer, 0 /* WalkTNodeTreeAction.Create */, lView, tProjectionNode, parentRNode, beforeNode);\n}\n/**\n * `applyProjectionRecursive` performs operation on the projection specified by `action` (insert,\n * detach, destroy)\n *\n * Inserting a projection requires us to locate the projected nodes from the parent component. The\n * complication is that those nodes themselves could be re-projected from their parent component.\n *\n * @param renderer Render to use\n * @param action action to perform (insert, detach, destroy)\n * @param lView The LView which needs to be inserted, detached, destroyed.\n * @param tProjectionNode node to project\n * @param parentRElement parent DOM element for insertion/removal.\n * @param beforeNode Before which node the insertions should happen.\n */\nfunction applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {\n  const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n  const componentNode = componentLView[T_HOST];\n  ngDevMode && assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');\n  const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];\n  if (Array.isArray(nodeToProjectOrRNodes)) {\n    // This should not exist, it is a bit of a hack. When we bootstrap a top level node and we\n    // need to support passing projectable nodes, so we cheat and put them in the TNode\n    // of the Host TView. (Yes we put instance info at the T Level). We can get away with it\n    // because we know that TView is not shared and therefore it will not be a problem.\n    // This should be refactored and cleaned up.\n    for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {\n      const rNode = nodeToProjectOrRNodes[i];\n      applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);\n    }\n  } else {\n    let nodeToProject = nodeToProjectOrRNodes;\n    const projectedComponentLView = componentLView[PARENT];\n    // If a parent <ng-content> is located within a skip hydration block,\n    // annotate an actual node that is being projected with the same flag too.\n    if (hasInSkipHydrationBlockFlag(tProjectionNode)) {\n      nodeToProject.flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;\n    }\n    applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);\n  }\n}\n/**\n * `applyContainer` performs an operation on the container and its views as specified by\n * `action` (insert, detach, destroy)\n *\n * Inserting a Container is complicated by the fact that the container may have Views which\n * themselves have containers or projections.\n *\n * @param renderer Renderer to use\n * @param action action to perform (insert, detach, destroy)\n * @param lContainer The LContainer which needs to be inserted, detached, destroyed.\n * @param parentRElement parent DOM element for insertion/removal.\n * @param beforeNode Before which node the insertions should happen.\n */\nfunction applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {\n  ngDevMode && assertLContainer(lContainer);\n  const anchor = lContainer[NATIVE]; // LContainer has its own before node.\n  const native = unwrapRNode(lContainer);\n  // An LContainer can be created dynamically on any node by injecting ViewContainerRef.\n  // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor\n  // node (comment in the DOM) that will be different from the LContainer's host node. In this\n  // particular case we need to execute action on 2 nodes:\n  // - container's host node (this is done in the executeActionOnElementOrContainer)\n  // - container's host node (this is done here)\n  if (anchor !== native) {\n    // This is very strange to me (Misko). I would expect that the native is same as anchor. I\n    // don't see a reason why they should be different, but they are.\n    //\n    // If they are we need to process the second anchor as well.\n    applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);\n  }\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const lView = lContainer[i];\n    applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);\n  }\n}\n/**\n * Writes class/style to element.\n *\n * @param renderer Renderer to use.\n * @param isClassBased `true` if it should be written to `class` (`false` to write to `style`)\n * @param rNode The Node to write to.\n * @param prop Property to write to. This would be the class/style name.\n * @param value Value to write. If `null`/`undefined`/`false` this is considered a remove (set/add\n *        otherwise).\n */\nfunction applyStyling(renderer, isClassBased, rNode, prop, value) {\n  if (isClassBased) {\n    // We actually want JS true/false here because any truthy value should add the class\n    if (!value) {\n      ngDevMode && ngDevMode.rendererRemoveClass++;\n      renderer.removeClass(rNode, prop);\n    } else {\n      ngDevMode && ngDevMode.rendererAddClass++;\n      renderer.addClass(rNode, prop);\n    }\n  } else {\n    let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n    if (value == null /** || value === undefined */) {\n      ngDevMode && ngDevMode.rendererRemoveStyle++;\n      renderer.removeStyle(rNode, prop, flags);\n    } else {\n      // A value is important if it ends with `!important`. The style\n      // parser strips any semicolons at the end of the value.\n      const isImportant = typeof value === 'string' ? value.endsWith('!important') : false;\n      if (isImportant) {\n        // !important has to be stripped from the value for it to be valid.\n        value = value.slice(0, -10);\n        flags |= RendererStyleFlags2.Important;\n      }\n      ngDevMode && ngDevMode.rendererSetStyle++;\n      renderer.setStyle(rNode, prop, value, flags);\n    }\n  }\n}\n/**\n * Write `cssText` to `RElement`.\n *\n * This function does direct write without any reconciliation. Used for writing initial values, so\n * that static styling values do not pull in the style parser.\n *\n * @param renderer Renderer to use\n * @param element The element which needs to be updated.\n * @param newValue The new class list to write.\n */\nfunction writeDirectStyle(renderer, element, newValue) {\n  ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n  renderer.setAttribute(element, 'style', newValue);\n  ngDevMode && ngDevMode.rendererSetStyle++;\n}\n/**\n * Write `className` to `RElement`.\n *\n * This function does direct write without any reconciliation. Used for writing initial values, so\n * that static styling values do not pull in the style parser.\n *\n * @param renderer Renderer to use\n * @param element The element which needs to be updated.\n * @param newValue The new class list to write.\n */\nfunction writeDirectClass(renderer, element, newValue) {\n  ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n  if (newValue === '') {\n    // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.\n    renderer.removeAttribute(element, 'class');\n  } else {\n    renderer.setAttribute(element, 'class', newValue);\n  }\n  ngDevMode && ngDevMode.rendererSetClassName++;\n}\n/** Sets up the static DOM attributes on an `RNode`. */\nfunction setupStaticAttributes(renderer, element, tNode) {\n  const {\n    mergedAttrs,\n    classes,\n    styles\n  } = tNode;\n  if (mergedAttrs !== null) {\n    setUpAttributes(renderer, element, mergedAttrs);\n  }\n  if (classes !== null) {\n    writeDirectClass(renderer, element, classes);\n  }\n  if (styles !== null) {\n    writeDirectStyle(renderer, element, styles);\n  }\n}\n\n/**\n * Returns an index of `classToSearch` in `className` taking token boundaries into account.\n *\n * `classIndexOf('AB A', 'A', 0)` will be 3 (not 0 since `AB!==A`)\n *\n * @param className A string containing classes (whitespace separated)\n * @param classToSearch A class name to locate\n * @param startingIndex Starting location of search\n * @returns an index of the located class (or -1 if not found)\n */\nfunction classIndexOf(className, classToSearch, startingIndex) {\n  ngDevMode && assertNotEqual(classToSearch, '', 'can not look for \"\" string.');\n  let end = className.length;\n  while (true) {\n    const foundIndex = className.indexOf(classToSearch, startingIndex);\n    if (foundIndex === -1) return foundIndex;\n    if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32 /* CharCode.SPACE */) {\n      // Ensure that it has leading whitespace\n      const length = classToSearch.length;\n      if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32 /* CharCode.SPACE */) {\n        // Ensure that it has trailing whitespace\n        return foundIndex;\n      }\n    }\n    // False positive, keep searching from where we left off.\n    startingIndex = foundIndex + 1;\n  }\n}\nconst NG_TEMPLATE_SELECTOR = 'ng-template';\n/**\n * Search the `TAttributes` to see if it contains `cssClassToMatch` (case insensitive)\n *\n * @param tNode static data of the node to match\n * @param attrs `TAttributes` to search through.\n * @param cssClassToMatch class to match (lowercase)\n * @param isProjectionMode Whether or not class matching should look into the attribute `class` in\n *    addition to the `AttributeMarker.Classes`.\n */\nfunction isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {\n  ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');\n  let i = 0;\n  if (isProjectionMode) {\n    for (; i < attrs.length && typeof attrs[i] === 'string'; i += 2) {\n      // Search for an implicit `class` attribute and check if its value matches `cssClassToMatch`.\n      if (attrs[i] === 'class' && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {\n        return true;\n      }\n    }\n  } else if (isInlineTemplate(tNode)) {\n    // Matching directives (i.e. when not matching for projection mode) should not consider the\n    // class bindings that are present on inline templates, as those class bindings only target\n    // the root node of the template, not the template itself.\n    return false;\n  }\n  // Resume the search for classes after the `Classes` marker.\n  i = attrs.indexOf(1 /* AttributeMarker.Classes */, i);\n  if (i > -1) {\n    // We found the classes section. Start searching for the class.\n    let item;\n    while (++i < attrs.length && typeof (item = attrs[i]) === 'string') {\n      if (item.toLowerCase() === cssClassToMatch) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n/**\n * Checks whether the `tNode` represents an inline template (e.g. `*ngFor`).\n *\n * @param tNode current TNode\n */\nfunction isInlineTemplate(tNode) {\n  return tNode.type === 4 /* TNodeType.Container */ && tNode.value !== NG_TEMPLATE_SELECTOR;\n}\n/**\n * Function that checks whether a given tNode matches tag-based selector and has a valid type.\n *\n * Matching can be performed in 2 modes: projection mode (when we project nodes) and regular\n * directive matching mode:\n * - in the \"directive matching\" mode we do _not_ take TContainer's tagName into account if it is\n * different from NG_TEMPLATE_SELECTOR (value different from NG_TEMPLATE_SELECTOR indicates that a\n * tag name was extracted from * syntax so we would match the same directive twice);\n * - in the \"projection\" mode, we use a tag name potentially extracted from the * syntax processing\n * (applicable to TNodeType.Container only).\n */\nfunction hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {\n  const tagNameToCompare = tNode.type === 4 /* TNodeType.Container */ && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;\n  return currentSelector === tagNameToCompare;\n}\n/**\n * A utility function to match an Ivy node static data against a simple CSS selector\n *\n * @param tNode static data of the node to match\n * @param selector The selector to try matching against the node.\n * @param isProjectionMode if `true` we are matching for content projection, otherwise we are doing\n * directive matching.\n * @returns true if node matches the selector.\n */\nfunction isNodeMatchingSelector(tNode, selector, isProjectionMode) {\n  ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');\n  let mode = 4 /* SelectorFlags.ELEMENT */;\n  const nodeAttrs = tNode.attrs;\n  // Find the index of first attribute that has no value, only a name.\n  const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;\n  // When processing \":not\" selectors, we skip to the next \":not\" if the\n  // current one doesn't match\n  let skipToNextSelector = false;\n  for (let i = 0; i < selector.length; i++) {\n    const current = selector[i];\n    if (typeof current === 'number') {\n      // If we finish processing a :not selector and it hasn't failed, return false\n      if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {\n        return false;\n      }\n      // If we are skipping to the next :not() and this mode flag is positive,\n      // it's a part of the current :not() selector, and we should keep skipping\n      if (skipToNextSelector && isPositive(current)) continue;\n      skipToNextSelector = false;\n      mode = current | mode & 1 /* SelectorFlags.NOT */;\n      continue;\n    }\n    if (skipToNextSelector) continue;\n    if (mode & 4 /* SelectorFlags.ELEMENT */) {\n      mode = 2 /* SelectorFlags.ATTRIBUTE */ | mode & 1 /* SelectorFlags.NOT */;\n      if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === '' && selector.length === 1) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n      }\n    } else if (mode & 8 /* SelectorFlags.CLASS */) {\n      if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n      }\n    } else {\n      const selectorAttrValue = selector[++i];\n      const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);\n      if (attrIndexInNode === -1) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n        continue;\n      }\n      if (selectorAttrValue !== '') {\n        let nodeAttrValue;\n        if (attrIndexInNode > nameOnlyMarkerIdx) {\n          nodeAttrValue = '';\n        } else {\n          ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0 /* AttributeMarker.NamespaceURI */, 'We do not match directives on namespaced attributes');\n          // we lowercase the attribute value to be able to match\n          // selectors without case-sensitivity\n          // (selectors are already in lowercase when generated)\n          nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();\n        }\n        if (mode & 2 /* SelectorFlags.ATTRIBUTE */ && selectorAttrValue !== nodeAttrValue) {\n          if (isPositive(mode)) return false;\n          skipToNextSelector = true;\n        }\n      }\n    }\n  }\n  return isPositive(mode) || skipToNextSelector;\n}\nfunction isPositive(mode) {\n  return (mode & 1 /* SelectorFlags.NOT */) === 0;\n}\n/**\n * Examines the attribute's definition array for a node to find the index of the\n * attribute that matches the given `name`.\n *\n * NOTE: This will not match namespaced attributes.\n *\n * Attribute matching depends upon `isInlineTemplate` and `isProjectionMode`.\n * The following table summarizes which types of attributes we attempt to match:\n *\n * ===========================================================================================================\n * Modes                   | Normal Attributes | Bindings Attributes | Template Attributes | I18n\n * Attributes\n * ===========================================================================================================\n * Inline + Projection     | YES               | YES                 | NO                  | YES\n * -----------------------------------------------------------------------------------------------------------\n * Inline + Directive      | NO                | NO                  | YES                 | NO\n * -----------------------------------------------------------------------------------------------------------\n * Non-inline + Projection | YES               | YES                 | NO                  | YES\n * -----------------------------------------------------------------------------------------------------------\n * Non-inline + Directive  | YES               | YES                 | NO                  | YES\n * ===========================================================================================================\n *\n * @param name the name of the attribute to find\n * @param attrs the attribute array to examine\n * @param isInlineTemplate true if the node being matched is an inline template (e.g. `*ngFor`)\n * rather than a manually expanded template node (e.g `<ng-template>`).\n * @param isProjectionMode true if we are matching against content projection otherwise we are\n * matching against directives.\n */\nfunction findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {\n  if (attrs === null) return -1;\n  let i = 0;\n  if (isProjectionMode || !isInlineTemplate) {\n    let bindingsMode = false;\n    while (i < attrs.length) {\n      const maybeAttrName = attrs[i];\n      if (maybeAttrName === name) {\n        return i;\n      } else if (maybeAttrName === 3 /* AttributeMarker.Bindings */ || maybeAttrName === 6 /* AttributeMarker.I18n */) {\n        bindingsMode = true;\n      } else if (maybeAttrName === 1 /* AttributeMarker.Classes */ || maybeAttrName === 2 /* AttributeMarker.Styles */) {\n        let value = attrs[++i];\n        // We should skip classes here because we have a separate mechanism for\n        // matching classes in projection mode.\n        while (typeof value === 'string') {\n          value = attrs[++i];\n        }\n        continue;\n      } else if (maybeAttrName === 4 /* AttributeMarker.Template */) {\n        // We do not care about Template attributes in this scenario.\n        break;\n      } else if (maybeAttrName === 0 /* AttributeMarker.NamespaceURI */) {\n        // Skip the whole namespaced attribute and value. This is by design.\n        i += 4;\n        continue;\n      }\n      // In binding mode there are only names, rather than name-value pairs.\n      i += bindingsMode ? 1 : 2;\n    }\n    // We did not match the attribute\n    return -1;\n  } else {\n    return matchTemplateAttribute(attrs, name);\n  }\n}\nfunction isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {\n  for (let i = 0; i < selector.length; i++) {\n    if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction getProjectAsAttrValue(tNode) {\n  const nodeAttrs = tNode.attrs;\n  if (nodeAttrs != null) {\n    const ngProjectAsAttrIdx = nodeAttrs.indexOf(5 /* AttributeMarker.ProjectAs */);\n    // only check for ngProjectAs in attribute names, don't accidentally match attribute's value\n    // (attribute names are stored at even indexes)\n    if ((ngProjectAsAttrIdx & 1) === 0) {\n      return nodeAttrs[ngProjectAsAttrIdx + 1];\n    }\n  }\n  return null;\n}\nfunction getNameOnlyMarkerIndex(nodeAttrs) {\n  for (let i = 0; i < nodeAttrs.length; i++) {\n    const nodeAttr = nodeAttrs[i];\n    if (isNameOnlyAttributeMarker(nodeAttr)) {\n      return i;\n    }\n  }\n  return nodeAttrs.length;\n}\nfunction matchTemplateAttribute(attrs, name) {\n  let i = attrs.indexOf(4 /* AttributeMarker.Template */);\n  if (i > -1) {\n    i++;\n    while (i < attrs.length) {\n      const attr = attrs[i];\n      // Return in case we checked all template attrs and are switching to the next section in the\n      // attrs array (that starts with a number that represents an attribute marker).\n      if (typeof attr === 'number') return -1;\n      if (attr === name) return i;\n      i++;\n    }\n  }\n  return -1;\n}\n/**\n * Checks whether a selector is inside a CssSelectorList\n * @param selector Selector to be checked.\n * @param list List in which to look for the selector.\n */\nfunction isSelectorInSelectorList(selector, list) {\n  selectorListLoop: for (let i = 0; i < list.length; i++) {\n    const currentSelectorInList = list[i];\n    if (selector.length !== currentSelectorInList.length) {\n      continue;\n    }\n    for (let j = 0; j < selector.length; j++) {\n      if (selector[j] !== currentSelectorInList[j]) {\n        continue selectorListLoop;\n      }\n    }\n    return true;\n  }\n  return false;\n}\nfunction maybeWrapInNotSelector(isNegativeMode, chunk) {\n  return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;\n}\nfunction stringifyCSSSelector(selector) {\n  let result = selector[0];\n  let i = 1;\n  let mode = 2 /* SelectorFlags.ATTRIBUTE */;\n  let currentChunk = '';\n  let isNegativeMode = false;\n  while (i < selector.length) {\n    let valueOrMarker = selector[i];\n    if (typeof valueOrMarker === 'string') {\n      if (mode & 2 /* SelectorFlags.ATTRIBUTE */) {\n        const attrValue = selector[++i];\n        currentChunk += '[' + valueOrMarker + (attrValue.length > 0 ? '=\"' + attrValue + '\"' : '') + ']';\n      } else if (mode & 8 /* SelectorFlags.CLASS */) {\n        currentChunk += '.' + valueOrMarker;\n      } else if (mode & 4 /* SelectorFlags.ELEMENT */) {\n        currentChunk += ' ' + valueOrMarker;\n      }\n    } else {\n      //\n      // Append current chunk to the final result in case we come across SelectorFlag, which\n      // indicates that the previous section of a selector is over. We need to accumulate content\n      // between flags to make sure we wrap the chunk later in :not() selector if needed, e.g.\n      // ```\n      //  ['', Flags.CLASS, '.classA', Flags.CLASS | Flags.NOT, '.classB', '.classC']\n      // ```\n      // should be transformed to `.classA :not(.classB .classC)`.\n      //\n      // Note: for negative selector part, we accumulate content between flags until we find the\n      // next negative flag. This is needed to support a case where `:not()` rule contains more than\n      // one chunk, e.g. the following selector:\n      // ```\n      //  ['', Flags.ELEMENT | Flags.NOT, 'p', Flags.CLASS, 'foo', Flags.CLASS | Flags.NOT, 'bar']\n      // ```\n      // should be stringified to `:not(p.foo) :not(.bar)`\n      //\n      if (currentChunk !== '' && !isPositive(valueOrMarker)) {\n        result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n        currentChunk = '';\n      }\n      mode = valueOrMarker;\n      // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative\n      // mode is maintained for remaining chunks of a selector.\n      isNegativeMode = isNegativeMode || !isPositive(mode);\n    }\n    i++;\n  }\n  if (currentChunk !== '') {\n    result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n  }\n  return result;\n}\n/**\n * Generates string representation of CSS selector in parsed form.\n *\n * ComponentDef and DirectiveDef are generated with the selector in parsed form to avoid doing\n * additional parsing at runtime (for example, for directive matching). However in some cases (for\n * example, while bootstrapping a component), a string version of the selector is required to query\n * for the host element on the page. This function takes the parsed form of a selector and returns\n * its string representation.\n *\n * @param selectorList selector in parsed form\n * @returns string representation of a given selector\n */\nfunction stringifyCSSSelectorList(selectorList) {\n  return selectorList.map(stringifyCSSSelector).join(',');\n}\n/**\n * Extracts attributes and classes information from a given CSS selector.\n *\n * This function is used while creating a component dynamically. In this case, the host element\n * (that is created dynamically) should contain attributes and classes specified in component's CSS\n * selector.\n *\n * @param selector CSS selector in parsed form (in a form of array)\n * @returns object with `attrs` and `classes` fields that contain extracted information\n */\nfunction extractAttrsAndClassesFromSelector(selector) {\n  const attrs = [];\n  const classes = [];\n  let i = 1;\n  let mode = 2 /* SelectorFlags.ATTRIBUTE */;\n  while (i < selector.length) {\n    let valueOrMarker = selector[i];\n    if (typeof valueOrMarker === 'string') {\n      if (mode === 2 /* SelectorFlags.ATTRIBUTE */) {\n        if (valueOrMarker !== '') {\n          attrs.push(valueOrMarker, selector[++i]);\n        }\n      } else if (mode === 8 /* SelectorFlags.CLASS */) {\n        classes.push(valueOrMarker);\n      }\n    } else {\n      // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative\n      // mode is maintained for remaining chunks of a selector. Since attributes and classes are\n      // extracted only for \"positive\" part of the selector, we can stop here.\n      if (!isPositive(mode)) break;\n      mode = valueOrMarker;\n    }\n    i++;\n  }\n  return {\n    attrs,\n    classes\n  };\n}\n\n/** A special value which designates that a value has not changed. */\nconst NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? {\n  __brand__: 'NO_CHANGE'\n} : {};\n\n/**\n * Advances to an element for later binding instructions.\n *\n * Used in conjunction with instructions like {@link property} to act on elements with specified\n * indices, for example those created with {@link element} or {@link elementStart}.\n *\n * ```ts\n * (rf: RenderFlags, ctx: any) => {\n *   if (rf & 1) {\n *     text(0, 'Hello');\n *     text(1, 'Goodbye')\n *     element(2, 'div');\n *   }\n *   if (rf & 2) {\n *     advance(2); // Advance twice to the <div>.\n *     property('title', 'test');\n *   }\n *  }\n * ```\n * @param delta Number of elements to advance forwards by.\n *\n * @codeGenApi\n */\nfunction ɵɵadvance(delta = 1) {\n  ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');\n  selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());\n}\nfunction selectIndexInternal(tView, lView, index, checkNoChangesMode) {\n  ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);\n  // Flush the initial hooks for elements in the view that have been added up to this point.\n  // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n  if (!checkNoChangesMode) {\n    const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;\n    if (hooksInitPhaseCompleted) {\n      const preOrderCheckHooks = tView.preOrderCheckHooks;\n      if (preOrderCheckHooks !== null) {\n        executeCheckHooks(lView, preOrderCheckHooks, index);\n      }\n    } else {\n      const preOrderHooks = tView.preOrderHooks;\n      if (preOrderHooks !== null) {\n        executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, index);\n      }\n    }\n  }\n  // We must set the selected index *after* running the hooks, because hooks may have side-effects\n  // that cause other template functions to run, thus updating the selected index, which is global\n  // state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index\n  // will be altered by the time we leave the `ɵɵadvance` instruction.\n  setSelectedIndex(index);\n}\nfunction ɵɵdirectiveInject(token, flags = InjectFlags.Default) {\n  const lView = getLView();\n  // Fall back to inject() if view hasn't been created. This situation can happen in tests\n  // if inject utilities are used before bootstrapping.\n  if (lView === null) {\n    // Verify that we will not get into infinite loop.\n    ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);\n    return ɵɵinject(token, flags);\n  }\n  const tNode = getCurrentTNode();\n  const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);\n  ngDevMode && emitInjectEvent(token, value, flags);\n  return value;\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * This instruction allows the actual error message to be optimized away when ngDevMode is turned\n * off, saving bytes of generated code while still providing a good experience in dev mode.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactory() {\n  const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';\n  throw new Error(msg);\n}\nfunction writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    // If we know we are dealing with a signal input, we cache its reference\n    // in a tree-shakable way. The input signal node can then be used for\n    // value transform execution or actual value updates without introducing\n    // additional megamorphic accesses for accessing the instance field.\n    let inputSignalNode = null;\n    if ((flags & InputFlags.SignalBased) !== 0) {\n      const field = instance[privateName];\n      inputSignalNode = field[SIGNAL$1];\n    }\n    // If there is a signal node and a transform, run it before potentially\n    // delegating to features like `NgOnChanges`.\n    if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {\n      value = inputSignalNode.transformFn(value);\n    }\n    // If there is a decorator input transform, run it.\n    if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {\n      value = def.inputTransforms[privateName].call(instance, value);\n    }\n    if (def.setInput !== null) {\n      def.setInput(instance, inputSignalNode, value, publicName, privateName);\n    } else {\n      applyValueToInputField(instance, inputSignalNode, privateName, value);\n    }\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n\n/**\n * Invoke `HostBindingsFunction`s for view.\n *\n * This methods executes `TView.hostBindingOpCodes`. It is used to execute the\n * `HostBindingsFunction`s associated with the current `LView`.\n *\n * @param tView Current `TView`.\n * @param lView Current `LView`.\n */\nfunction processHostBindingOpCodes(tView, lView) {\n  const hostBindingOpCodes = tView.hostBindingOpCodes;\n  if (hostBindingOpCodes === null) return;\n  try {\n    for (let i = 0; i < hostBindingOpCodes.length; i++) {\n      const opCode = hostBindingOpCodes[i];\n      if (opCode < 0) {\n        // Negative numbers are element indexes.\n        setSelectedIndex(~opCode);\n      } else {\n        // Positive numbers are NumberTuple which store bindingRootIndex and directiveIndex.\n        const directiveIdx = opCode;\n        const bindingRootIndx = hostBindingOpCodes[++i];\n        const hostBindingFn = hostBindingOpCodes[++i];\n        setBindingRootForHostBindings(bindingRootIndx, directiveIdx);\n        const context = lView[directiveIdx];\n        hostBindingFn(2 /* RenderFlags.Update */, context);\n      }\n    }\n  } finally {\n    setSelectedIndex(-1);\n  }\n}\nfunction createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {\n  const lView = tView.blueprint.slice();\n  lView[HOST] = host;\n  lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ | 128 /* LViewFlags.Attached */ | 8 /* LViewFlags.FirstLViewPass */ | 64 /* LViewFlags.Dirty */ | 1024 /* LViewFlags.RefreshView */;\n  if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */) {\n    lView[FLAGS] |= 2048 /* LViewFlags.HasEmbeddedViewInjector */;\n  }\n  resetPreOrderHookFlags(lView);\n  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);\n  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;\n  lView[CONTEXT] = context;\n  lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];\n  ngDevMode && assertDefined(lView[ENVIRONMENT], 'LViewEnvironment is required');\n  lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];\n  ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');\n  lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;\n  lView[T_HOST] = tHostNode;\n  lView[ID] = getUniqueLViewId();\n  lView[HYDRATION] = hydrationInfo;\n  lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;\n  ngDevMode && assertEqual(tView.type == 2 /* TViewType.Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');\n  lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 /* TViewType.Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;\n  return lView;\n}\nfunction getOrCreateTNode(tView, index, type, name, attrs) {\n  ngDevMode && index !== 0 &&\n  // 0 are bogus nodes and they are OK. See `createContainerRef` in\n  // `view_engine_compatibility` for additional context.\n  assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n  // Keep this function short, so that the VM will inline it.\n  ngDevMode && assertPureTNodeType(type);\n  let tNode = tView.data[index];\n  if (tNode === null) {\n    tNode = createTNodeAtIndex(tView, index, type, name, attrs);\n    if (isInI18nBlock()) {\n      // If we are in i18n block then all elements should be pre declared through `Placeholder`\n      // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.\n      // If the `TNode` was not pre-declared than it means it was not mentioned which means it was\n      // removed, so we mark it as detached.\n      tNode.flags |= 32 /* TNodeFlags.isDetached */;\n    }\n  } else if (tNode.type & 64 /* TNodeType.Placeholder */) {\n    tNode.type = type;\n    tNode.value = name;\n    tNode.attrs = attrs;\n    const parent = getCurrentParentTNode();\n    tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;\n    ngDevMode && assertTNodeForTView(tNode, tView);\n    ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');\n  }\n  setCurrentTNode(tNode, true);\n  return tNode;\n}\nfunction createTNodeAtIndex(tView, index, type, name, attrs) {\n  const currentTNode = getCurrentTNodePlaceholderOk();\n  const isParent = isCurrentTNodeParent();\n  const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;\n  // Parents cannot cross component boundaries because components will be used in multiple places.\n  const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);\n  // Assign a pointer to the first child node of a given view. The first node is not always the one\n  // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has\n  // the index 1 or more, so we can't just check node index.\n  if (tView.firstChild === null) {\n    tView.firstChild = tNode;\n  }\n  if (currentTNode !== null) {\n    if (isParent) {\n      // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?\n      if (currentTNode.child == null && tNode.parent !== null) {\n        // We are in the same view, which means we are adding content node to the parent view.\n        currentTNode.child = tNode;\n      }\n    } else {\n      if (currentTNode.next === null) {\n        // In the case of i18n the `currentTNode` may already be linked, in which case we don't want\n        // to break the links which i18n created.\n        currentTNode.next = tNode;\n        tNode.prev = currentTNode;\n      }\n    }\n  }\n  return tNode;\n}\n/**\n * When elements are created dynamically after a view blueprint is created (e.g. through\n * i18nApply()), we need to adjust the blueprint for future\n * template passes.\n *\n * @param tView `TView` associated with `LView`\n * @param lView The `LView` containing the blueprint to adjust\n * @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0\n * @param initialValue Initial value to store in blueprint\n */\nfunction allocExpando(tView, lView, numSlotsToAlloc, initialValue) {\n  if (numSlotsToAlloc === 0) return -1;\n  if (ngDevMode) {\n    assertFirstCreatePass(tView);\n    assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');\n    assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');\n    assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');\n    assertFirstUpdatePass(tView);\n  }\n  const allocIdx = lView.length;\n  for (let i = 0; i < numSlotsToAlloc; i++) {\n    lView.push(initialValue);\n    tView.blueprint.push(initialValue);\n    tView.data.push(null);\n  }\n  return allocIdx;\n}\nfunction executeTemplate(tView, lView, templateFn, rf, context) {\n  const prevSelectedIndex = getSelectedIndex();\n  const isUpdatePhase = rf & 2 /* RenderFlags.Update */;\n  try {\n    setSelectedIndex(-1);\n    if (isUpdatePhase && lView.length > HEADER_OFFSET) {\n      // When we're updating, inherently select 0 so we don't\n      // have to generate that instruction for most update blocks.\n      selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());\n    }\n    const preHookType = isUpdatePhase ? 2 /* ProfilerEvent.TemplateUpdateStart */ : 0 /* ProfilerEvent.TemplateCreateStart */;\n    profiler(preHookType, context);\n    templateFn(rf, context);\n  } finally {\n    setSelectedIndex(prevSelectedIndex);\n    const postHookType = isUpdatePhase ? 3 /* ProfilerEvent.TemplateUpdateEnd */ : 1 /* ProfilerEvent.TemplateCreateEnd */;\n    profiler(postHookType, context);\n  }\n}\n//////////////////////////\n//// Element\n//////////////////////////\nfunction executeContentQueries(tView, tNode, lView) {\n  if (isContentQueryHost(tNode)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const start = tNode.directiveStart;\n      const end = tNode.directiveEnd;\n      for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n        const def = tView.data[directiveIndex];\n        if (def.contentQueries) {\n          const directiveInstance = lView[directiveIndex];\n          ngDevMode && assertDefined(directiveIndex, 'Incorrect reference to a directive defining a content query');\n          def.contentQueries(1 /* RenderFlags.Create */, directiveInstance, directiveIndex);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Creates directive instances.\n */\nfunction createDirectivesInstances(tView, lView, tNode) {\n  if (!getBindingsEnabled()) return;\n  instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));\n  if ((tNode.flags & 64 /* TNodeFlags.hasHostBindings */) === 64 /* TNodeFlags.hasHostBindings */) {\n    invokeDirectivesHostBindings(tView, lView, tNode);\n  }\n}\n/**\n * Takes a list of local names and indices and pushes the resolved local variable values\n * to LView in the same order as they are loaded in the template with load().\n */\nfunction saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {\n  const localNames = tNode.localNames;\n  if (localNames !== null) {\n    let localIndex = tNode.index + 1;\n    for (let i = 0; i < localNames.length; i += 2) {\n      const index = localNames[i + 1];\n      const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];\n      viewData[localIndex++] = value;\n    }\n  }\n}\n/**\n * Gets TView from a template function or creates a new TView\n * if it doesn't already exist.\n *\n * @param def ComponentDef\n * @returns TView\n */\nfunction getOrCreateComponentTView(def) {\n  const tView = def.tView;\n  // Create a TView if there isn't one, or recreate it if the first create pass didn't\n  // complete successfully since we can't know for sure whether it's in a usable shape.\n  if (tView === null || tView.incompleteFirstPass) {\n    // Declaration node here is null since this function is called when we dynamically create a\n    // component and hence there is no declaration.\n    const declTNode = null;\n    return def.tView = createTView(1 /* TViewType.Component */, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);\n  }\n  return tView;\n}\n/**\n * Creates a TView instance\n *\n * @param type Type of `TView`.\n * @param declTNode Declaration location of this `TView`.\n * @param templateFn Template function\n * @param decls The number of nodes, local refs, and pipes in this template\n * @param directives Registry of directives for this view\n * @param pipes Registry of pipes for this view\n * @param viewQuery View queries for this view\n * @param schemas Schemas for this view\n * @param consts Constants for this view\n */\nfunction createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {\n  ngDevMode && ngDevMode.tView++;\n  const bindingStartIndex = HEADER_OFFSET + decls;\n  // This length does not yet contain host bindings from child directives because at this point,\n  // we don't know which directives are active on this template. As soon as a directive is matched\n  // that has a host binding, we will update the blueprint with that def's hostVars count.\n  const initialViewLength = bindingStartIndex + vars;\n  const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);\n  const consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;\n  const tView = blueprint[TVIEW] = {\n    type: type,\n    blueprint: blueprint,\n    template: templateFn,\n    queries: null,\n    viewQuery: viewQuery,\n    declTNode: declTNode,\n    data: blueprint.slice().fill(null, bindingStartIndex),\n    bindingStartIndex: bindingStartIndex,\n    expandoStartIndex: initialViewLength,\n    hostBindingOpCodes: null,\n    firstCreatePass: true,\n    firstUpdatePass: true,\n    staticViewQueries: false,\n    staticContentQueries: false,\n    preOrderHooks: null,\n    preOrderCheckHooks: null,\n    contentHooks: null,\n    contentCheckHooks: null,\n    viewHooks: null,\n    viewCheckHooks: null,\n    destroyHooks: null,\n    cleanup: null,\n    contentQueries: null,\n    components: null,\n    directiveRegistry: typeof directives === 'function' ? directives() : directives,\n    pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,\n    firstChild: null,\n    schemas: schemas,\n    consts: consts,\n    incompleteFirstPass: false,\n    ssrId\n  };\n  if (ngDevMode) {\n    // For performance reasons it is important that the tView retains the same shape during runtime.\n    // (To make sure that all of the code is monomorphic.) For this reason we seal the object to\n    // prevent class transitions.\n    Object.seal(tView);\n  }\n  return tView;\n}\nfunction createViewBlueprint(bindingStartIndex, initialViewLength) {\n  const blueprint = [];\n  for (let i = 0; i < initialViewLength; i++) {\n    blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);\n  }\n  return blueprint;\n}\n/**\n * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.\n *\n * @param renderer the renderer used to locate the element.\n * @param elementOrSelector Render element or CSS selector to locate the element.\n * @param encapsulation View Encapsulation defined for component that requests host element.\n * @param injector Root view injector instance.\n */\nfunction locateHostElement(renderer, elementOrSelector, encapsulation, injector) {\n  // Note: we use default value for the `PRESERVE_HOST_CONTENT` here even though it's a\n  // tree-shakable one (providedIn:'root'). This code path can be triggered during dynamic\n  // component creation (after calling ViewContainerRef.createComponent) when an injector\n  // instance can be provided. The injector instance might be disconnected from the main DI\n  // tree, thus the `PRESERVE_HOST_CONTENT` would not be able to instantiate. In this case, the\n  // default value will be used.\n  const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);\n  // When using native Shadow DOM, do not clear host element to allow native slot\n  // projection.\n  const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom;\n  const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);\n  applyRootElementTransform(rootElement);\n  return rootElement;\n}\n/**\n * Applies any root element transformations that are needed. If hydration is enabled,\n * this will process corrupted text nodes.\n *\n * @param rootElement the app root HTML Element\n */\nfunction applyRootElementTransform(rootElement) {\n  _applyRootElementTransformImpl(rootElement);\n}\n/**\n * Reference to a function that applies transformations to the root HTML element\n * of an app. When hydration is enabled, this processes any corrupt text nodes\n * so they are properly hydratable on the client.\n *\n * @param rootElement the app root HTML Element\n */\nlet _applyRootElementTransformImpl = () => null;\n/**\n * Processes text node markers before hydration begins. This replaces any special comment\n * nodes that were added prior to serialization are swapped out to restore proper text\n * nodes before hydration.\n *\n * @param rootElement the app root HTML Element\n */\nfunction applyRootElementTransformImpl(rootElement) {\n  if (hasSkipHydrationAttrOnRElement(rootElement)) {\n    // Handle a situation when the `ngSkipHydration` attribute is applied\n    // to the root node of an application. In this case, we should clear\n    // the contents and render everything from scratch.\n    clearElementContents(rootElement);\n  } else {\n    processTextNodeMarkersBeforeHydration(rootElement);\n  }\n}\n/**\n * Sets the implementation for the `applyRootElementTransform` function.\n */\nfunction enableApplyRootElementTransformImpl() {\n  _applyRootElementTransformImpl = applyRootElementTransformImpl;\n}\n/**\n * Saves context for this cleanup function in LView.cleanupInstances.\n *\n * On the first template pass, saves in TView:\n * - Cleanup function\n * - Index of context we just saved in LView.cleanupInstances\n */\nfunction storeCleanupWithContext(tView, lView, context, cleanupFn) {\n  const lCleanup = getOrCreateLViewCleanup(lView);\n  // Historically the `storeCleanupWithContext` was used to register both framework-level and\n  // user-defined cleanup callbacks, but over time those two types of cleanups were separated.\n  // This dev mode checks assures that user-level cleanup callbacks are _not_ stored in data\n  // structures reserved for framework-specific hooks.\n  ngDevMode && assertDefined(context, 'Cleanup context is mandatory when registering framework-level destroy hooks');\n  lCleanup.push(context);\n  if (tView.firstCreatePass) {\n    getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);\n  } else {\n    // Make sure that no new framework-level cleanup functions are registered after the first\n    // template pass is done (and TView data structures are meant to fully constructed).\n    if (ngDevMode) {\n      Object.freeze(getOrCreateTViewCleanup(tView));\n    }\n  }\n}\nfunction createTNode(tView, tParent, type, index, value, attrs) {\n  ngDevMode && index !== 0 &&\n  // 0 are bogus nodes and they are OK. See `createContainerRef` in\n  // `view_engine_compatibility` for additional context.\n  assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n  ngDevMode && assertNotSame(attrs, undefined, \"'undefined' is not valid value for 'attrs'\");\n  ngDevMode && ngDevMode.tNode++;\n  ngDevMode && tParent && assertTNodeForTView(tParent, tView);\n  let injectorIndex = tParent ? tParent.injectorIndex : -1;\n  let flags = 0;\n  if (isInSkipHydrationBlock$1()) {\n    flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;\n  }\n  const tNode = {\n    type,\n    index,\n    insertBeforeIndex: null,\n    injectorIndex,\n    directiveStart: -1,\n    directiveEnd: -1,\n    directiveStylingLast: -1,\n    componentOffset: -1,\n    propertyBindings: null,\n    flags,\n    providerIndexes: 0,\n    value: value,\n    attrs: attrs,\n    mergedAttrs: null,\n    localNames: null,\n    initialInputs: undefined,\n    inputs: null,\n    outputs: null,\n    tView: null,\n    next: null,\n    prev: null,\n    projectionNext: null,\n    child: null,\n    parent: tParent,\n    projection: null,\n    styles: null,\n    stylesWithoutHost: null,\n    residualStyles: undefined,\n    classes: null,\n    classesWithoutHost: null,\n    residualClasses: undefined,\n    classBindings: 0,\n    styleBindings: 0\n  };\n  if (ngDevMode) {\n    // For performance reasons it is important that the tNode retains the same shape during runtime.\n    // (To make sure that all of the code is monomorphic.) For this reason we seal the object to\n    // prevent class transitions.\n    Object.seal(tNode);\n  }\n  return tNode;\n}\nfunction captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {\n  for (let publicName in aliasMap) {\n    if (!aliasMap.hasOwnProperty(publicName)) {\n      continue;\n    }\n    const value = aliasMap[publicName];\n    if (value === undefined) {\n      continue;\n    }\n    bindingsResult ??= {};\n    let internalName;\n    let inputFlags = InputFlags.None;\n    // For inputs, the value might be an array capturing additional\n    // input flags.\n    if (Array.isArray(value)) {\n      internalName = value[0];\n      inputFlags = value[1];\n    } else {\n      internalName = value;\n    }\n    // If there are no host directive mappings, we want to remap using the alias map from the\n    // definition itself. If there is an alias map, it has two functions:\n    // 1. It serves as an allowlist of bindings that are exposed by the host directives. Only the\n    // ones inside the host directive map will be exposed on the host.\n    // 2. The public name of the property is aliased using the host directive alias map, rather\n    // than the alias map from the definition.\n    let finalPublicName = publicName;\n    if (hostDirectiveAliasMap !== null) {\n      // If there is no mapping, it's not part of the allowlist and this input/output\n      // is not captured and should be ignored.\n      if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {\n        continue;\n      }\n      finalPublicName = hostDirectiveAliasMap[publicName];\n    }\n    if (mode === 0 /* CaptureNodeBindingMode.Inputs */) {\n      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);\n    } else {\n      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);\n    }\n  }\n  return bindingsResult;\n}\nfunction addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {\n  let values;\n  if (bindings.hasOwnProperty(publicName)) {\n    (values = bindings[publicName]).push(directiveIndex, internalName);\n  } else {\n    values = bindings[publicName] = [directiveIndex, internalName];\n  }\n  if (inputFlags !== undefined) {\n    values.push(inputFlags);\n  }\n}\n/**\n * Initializes data structures required to work with directive inputs and outputs.\n * Initialization is done for all directives matched on a given TNode.\n */\nfunction initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  const tViewData = tView.data;\n  const tNodeAttrs = tNode.attrs;\n  const inputsFromAttrs = [];\n  let inputsStore = null;\n  let outputsStore = null;\n  for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n    const directiveDef = tViewData[directiveIndex];\n    const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;\n    const aliasedInputs = aliasData ? aliasData.inputs : null;\n    const aliasedOutputs = aliasData ? aliasData.outputs : null;\n    inputsStore = captureNodeBindings(0 /* CaptureNodeBindingMode.Inputs */, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);\n    outputsStore = captureNodeBindings(1 /* CaptureNodeBindingMode.Outputs */, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);\n    // Do not use unbound attributes as inputs to structural directives, since structural\n    // directive inputs can only be set using microsyntax (e.g. `<div *dir=\"exp\">`).\n    // TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which\n    // should be set for inline templates.\n    const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode) ? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs) : null;\n    inputsFromAttrs.push(initialInputs);\n  }\n  if (inputsStore !== null) {\n    if (inputsStore.hasOwnProperty('class')) {\n      tNode.flags |= 8 /* TNodeFlags.hasClassInput */;\n    }\n    if (inputsStore.hasOwnProperty('style')) {\n      tNode.flags |= 16 /* TNodeFlags.hasStyleInput */;\n    }\n  }\n  tNode.initialInputs = inputsFromAttrs;\n  tNode.inputs = inputsStore;\n  tNode.outputs = outputsStore;\n}\n/**\n * Mapping between attributes names that don't correspond to their element property names.\n *\n * Performance note: this function is written as a series of if checks (instead of, say, a property\n * object lookup) for performance reasons - the series of `if` checks seems to be the fastest way of\n * mapping property names. Do NOT change without benchmarking.\n *\n * Note: this mapping has to be kept in sync with the equally named mapping in the template\n * type-checking machinery of ngtsc.\n */\nfunction mapPropName(name) {\n  if (name === 'class') return 'className';\n  if (name === 'for') return 'htmlFor';\n  if (name === 'formaction') return 'formAction';\n  if (name === 'innerHtml') return 'innerHTML';\n  if (name === 'readonly') return 'readOnly';\n  if (name === 'tabindex') return 'tabIndex';\n  return name;\n}\nfunction elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n  const element = getNativeByTNode(tNode, lView);\n  let inputData = tNode.inputs;\n  let dataValue;\n  if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {\n    setInputsForProperty(tView, lView, dataValue, propName, value);\n    if (isComponentHost(tNode)) markDirtyIfOnPush(lView, tNode.index);\n    if (ngDevMode) {\n      setNgReflectProperties(lView, element, tNode.type, dataValue, value);\n    }\n  } else if (tNode.type & 3 /* TNodeType.AnyRNode */) {\n    propName = mapPropName(propName);\n    if (ngDevMode) {\n      validateAgainstEventProperties(propName);\n      if (!isPropertyValid(element, propName, tNode.value, tView.schemas)) {\n        handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n      }\n      ngDevMode.rendererSetProperty++;\n    }\n    // It is assumed that the sanitizer is only added when the compiler determines that the\n    // property is risky, so sanitization can be done without further checks.\n    value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;\n    renderer.setProperty(element, propName, value);\n  } else if (tNode.type & 12 /* TNodeType.AnyContainer */) {\n    // If the node is a container and the property didn't\n    // match any of the inputs or schemas we should throw.\n    if (ngDevMode && !matchingSchemas(tView.schemas, tNode.value)) {\n      handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n    }\n  }\n}\n/** If node is an OnPush component, marks its LView dirty. */\nfunction markDirtyIfOnPush(lView, viewIndex) {\n  ngDevMode && assertLView(lView);\n  const childComponentLView = getComponentLViewByIndex(viewIndex, lView);\n  if (!(childComponentLView[FLAGS] & 16 /* LViewFlags.CheckAlways */)) {\n    childComponentLView[FLAGS] |= 64 /* LViewFlags.Dirty */;\n  }\n}\nfunction setNgReflectProperty(lView, element, type, attrName, value) {\n  const renderer = lView[RENDERER];\n  attrName = normalizeDebugBindingName(attrName);\n  const debugValue = normalizeDebugBindingValue(value);\n  if (type & 3 /* TNodeType.AnyRNode */) {\n    if (value == null) {\n      renderer.removeAttribute(element, attrName);\n    } else {\n      renderer.setAttribute(element, attrName, debugValue);\n    }\n  } else {\n    const textContent = escapeCommentText(`bindings=${JSON.stringify({\n      [attrName]: debugValue\n    }, null, 2)}`);\n    renderer.setValue(element, textContent);\n  }\n}\nfunction setNgReflectProperties(lView, element, type, dataValue, value) {\n  if (type & (3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */)) {\n    /**\n     * dataValue is an array containing runtime input or output names for the directives:\n     * i+0: directive instance index\n     * i+1: privateName\n     *\n     * e.g. [0, 'change', 'change-minified']\n     * we want to set the reflected property with the privateName: dataValue[i+1]\n     */\n    for (let i = 0; i < dataValue.length; i += 3) {\n      setNgReflectProperty(lView, element, type, dataValue[i + 1], value);\n    }\n  }\n}\n/**\n * Resolve the matched directives on a node.\n */\nfunction resolveDirectives(tView, lView, tNode, localRefs) {\n  // Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in\n  // tsickle.\n  ngDevMode && assertFirstCreatePass(tView);\n  if (getBindingsEnabled()) {\n    const exportsMap = localRefs === null ? null : {\n      '': -1\n    };\n    const matchResult = findDirectiveDefMatches(tView, tNode);\n    let directiveDefs;\n    let hostDirectiveDefs;\n    if (matchResult === null) {\n      directiveDefs = hostDirectiveDefs = null;\n    } else {\n      [directiveDefs, hostDirectiveDefs] = matchResult;\n    }\n    if (directiveDefs !== null) {\n      initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);\n    }\n    if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);\n  }\n  // Merge the template attrs last so that they have the highest priority.\n  tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n}\n/** Initializes the data structures necessary for a list of directives to be instantiated. */\nfunction initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {\n  ngDevMode && assertFirstCreatePass(tView);\n  // Publishes the directive types to DI so they can be injected. Needs to\n  // happen in a separate pass before the TNode flags have been initialized.\n  for (let i = 0; i < directives.length; i++) {\n    diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);\n  }\n  initTNodeFlags(tNode, tView.data.length, directives.length);\n  // When the same token is provided by several directives on the same node, some rules apply in\n  // the viewEngine:\n  // - viewProviders have priority over providers\n  // - the last directive in NgModule.declarations has priority over the previous one\n  // So to match these rules, the order in which providers are added in the arrays is very\n  // important.\n  for (let i = 0; i < directives.length; i++) {\n    const def = directives[i];\n    if (def.providersResolver) def.providersResolver(def);\n  }\n  let preOrderHooksFound = false;\n  let preOrderCheckHooksFound = false;\n  let directiveIdx = allocExpando(tView, lView, directives.length, null);\n  ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');\n  for (let i = 0; i < directives.length; i++) {\n    const def = directives[i];\n    // Merge the attrs in the order of matches. This assumes that the first directive is the\n    // component itself, so that the component has the least priority.\n    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n    configureViewWithDirective(tView, tNode, lView, directiveIdx, def);\n    saveNameToExportMap(directiveIdx, def, exportsMap);\n    if (def.contentQueries !== null) tNode.flags |= 4 /* TNodeFlags.hasContentQuery */;\n    if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64 /* TNodeFlags.hasHostBindings */;\n    const lifeCycleHooks = def.type.prototype;\n    // Only push a node index into the preOrderHooks array if this is the first\n    // pre-order hook found on this node.\n    if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {\n      // We will push the actual hook function into this array later during dir instantiation.\n      // We cannot do it now because we must ensure hooks are registered in the same\n      // order that directives are created (i.e. injection order).\n      (tView.preOrderHooks ??= []).push(tNode.index);\n      preOrderHooksFound = true;\n    }\n    if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {\n      (tView.preOrderCheckHooks ??= []).push(tNode.index);\n      preOrderCheckHooksFound = true;\n    }\n    directiveIdx++;\n  }\n  initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);\n}\n/**\n * Add `hostBindings` to the `TView.hostBindingOpCodes`.\n *\n * @param tView `TView` to which the `hostBindings` should be added.\n * @param tNode `TNode` the element which contains the directive\n * @param directiveIdx Directive index in view.\n * @param directiveVarsIdx Where will the directive's vars be stored\n * @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.\n */\nfunction registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const hostBindings = def.hostBindings;\n  if (hostBindings) {\n    let hostBindingOpCodes = tView.hostBindingOpCodes;\n    if (hostBindingOpCodes === null) {\n      hostBindingOpCodes = tView.hostBindingOpCodes = [];\n    }\n    const elementIndx = ~tNode.index;\n    if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {\n      // Conditionally add select element so that we are more efficient in execution.\n      // NOTE: this is strictly not necessary and it trades code size for runtime perf.\n      // (We could just always add it.)\n      hostBindingOpCodes.push(elementIndx);\n    }\n    hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);\n  }\n}\n/**\n * Returns the last selected element index in the `HostBindingOpCodes`\n *\n * For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only\n * if it changes. This method returns the last index (or '0' if not found.)\n *\n * Selected element index are only the ones which are negative.\n */\nfunction lastSelectedElementIdx(hostBindingOpCodes) {\n  let i = hostBindingOpCodes.length;\n  while (i > 0) {\n    const value = hostBindingOpCodes[--i];\n    if (typeof value === 'number' && value < 0) {\n      return value;\n    }\n  }\n  return 0;\n}\n/**\n * Instantiate all the directives that were previously resolved on the current node.\n */\nfunction instantiateAllDirectives(tView, lView, tNode, native) {\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  // The component view needs to be created before creating the node injector\n  // since it is used to inject some special symbols like `ChangeDetectorRef`.\n  if (isComponentHost(tNode)) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);\n    addComponentLogic(lView, tNode, tView.data[start + tNode.componentOffset]);\n  }\n  if (!tView.firstCreatePass) {\n    getOrCreateNodeInjectorForNode(tNode, lView);\n  }\n  attachPatchData(native, lView);\n  const initialInputs = tNode.initialInputs;\n  for (let i = start; i < end; i++) {\n    const def = tView.data[i];\n    const directive = getNodeInjectable(lView, tView, i, tNode);\n    attachPatchData(directive, lView);\n    if (initialInputs !== null) {\n      setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);\n    }\n    if (isComponentDef(def)) {\n      const componentView = getComponentLViewByIndex(tNode.index, lView);\n      componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);\n    }\n  }\n}\nfunction invokeDirectivesHostBindings(tView, lView, tNode) {\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  const elementIndex = tNode.index;\n  const currentDirectiveIndex = getCurrentDirectiveIndex();\n  try {\n    setSelectedIndex(elementIndex);\n    for (let dirIndex = start; dirIndex < end; dirIndex++) {\n      const def = tView.data[dirIndex];\n      const directive = lView[dirIndex];\n      setCurrentDirectiveIndex(dirIndex);\n      if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {\n        invokeHostBindingsInCreationMode(def, directive);\n      }\n    }\n  } finally {\n    setSelectedIndex(-1);\n    setCurrentDirectiveIndex(currentDirectiveIndex);\n  }\n}\n/**\n * Invoke the host bindings in creation mode.\n *\n * @param def `DirectiveDef` which may contain the `hostBindings` function.\n * @param directive Instance of directive.\n */\nfunction invokeHostBindingsInCreationMode(def, directive) {\n  if (def.hostBindings !== null) {\n    def.hostBindings(1 /* RenderFlags.Create */, directive);\n  }\n}\n/**\n * Matches the current node against all available selectors.\n * If a component is matched (at most one), it is returned in first position in the array.\n */\nfunction findDirectiveDefMatches(tView, tNode) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n  const registry = tView.directiveRegistry;\n  let matches = null;\n  let hostDirectiveDefs = null;\n  if (registry) {\n    for (let i = 0; i < registry.length; i++) {\n      const def = registry[i];\n      if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */false)) {\n        matches || (matches = []);\n        if (isComponentDef(def)) {\n          if (ngDevMode) {\n            assertTNodeType(tNode, 2 /* TNodeType.Element */, `\"${tNode.value}\" tags cannot be used as component hosts. ` + `Please use a different tag to activate the ${stringify(def.type)} component.`);\n            if (isComponentHost(tNode)) {\n              throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);\n            }\n          }\n          // Components are inserted at the front of the matches array so that their lifecycle\n          // hooks run before any directive lifecycle hooks. This appears to be for ViewEngine\n          // compatibility. This logic doesn't make sense with host directives, because it\n          // would allow the host directives to undo any overrides the host may have made.\n          // To handle this case, the host directives of components are inserted at the beginning\n          // of the array, followed by the component. As such, the insertion order is as follows:\n          // 1. Host directives belonging to the selector-matched component.\n          // 2. Selector-matched component.\n          // 3. Host directives belonging to selector-matched directives.\n          // 4. Selector-matched directives.\n          if (def.findHostDirectiveDefs !== null) {\n            const hostDirectiveMatches = [];\n            hostDirectiveDefs = hostDirectiveDefs || new Map();\n            def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);\n            // Add all host directives declared on this component, followed by the component itself.\n            // Host directives should execute first so the host has a chance to override changes\n            // to the DOM made by them.\n            matches.unshift(...hostDirectiveMatches, def);\n            // Component is offset starting from the beginning of the host directives array.\n            const componentOffset = hostDirectiveMatches.length;\n            markAsComponentHost(tView, tNode, componentOffset);\n          } else {\n            // No host directives on this component, just add the\n            // component def to the beginning of the matches.\n            matches.unshift(def);\n            markAsComponentHost(tView, tNode, 0);\n          }\n        } else {\n          // Append any host directives to the matches first.\n          hostDirectiveDefs = hostDirectiveDefs || new Map();\n          def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);\n          matches.push(def);\n        }\n      }\n    }\n  }\n  ngDevMode && matches !== null && assertNoDuplicateDirectives(matches);\n  return matches === null ? null : [matches, hostDirectiveDefs];\n}\n/**\n * Marks a given TNode as a component's host. This consists of:\n * - setting the component offset on the TNode.\n * - storing index of component's host element so it will be queued for view refresh during CD.\n */\nfunction markAsComponentHost(tView, hostTNode, componentOffset) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');\n  hostTNode.componentOffset = componentOffset;\n  (tView.components ??= []).push(hostTNode.index);\n}\n/** Caches local names and their matching directive indices for query and template lookups. */\nfunction cacheMatchingLocalNames(tNode, localRefs, exportsMap) {\n  if (localRefs) {\n    const localNames = tNode.localNames = [];\n    // Local names must be stored in tNode in the same order that localRefs are defined\n    // in the template to ensure the data is loaded in the same slots as their refs\n    // in the template (for template queries).\n    for (let i = 0; i < localRefs.length; i += 2) {\n      const index = exportsMap[localRefs[i + 1]];\n      if (index == null) throw new RuntimeError(-301 /* RuntimeErrorCode.EXPORT_NOT_FOUND */, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);\n      localNames.push(localRefs[i], index);\n    }\n  }\n}\n/**\n * Builds up an export map as directives are created, so local refs can be quickly mapped\n * to their directive instances.\n */\nfunction saveNameToExportMap(directiveIdx, def, exportsMap) {\n  if (exportsMap) {\n    if (def.exportAs) {\n      for (let i = 0; i < def.exportAs.length; i++) {\n        exportsMap[def.exportAs[i]] = directiveIdx;\n      }\n    }\n    if (isComponentDef(def)) exportsMap[''] = directiveIdx;\n  }\n}\n/**\n * Initializes the flags on the current node, setting all indices to the initial index,\n * the directive count to 0, and adding the isComponent flag.\n * @param index the initial index\n */\nfunction initTNodeFlags(tNode, index, numberOfDirectives) {\n  ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');\n  tNode.flags |= 1 /* TNodeFlags.isDirectiveHost */;\n  // When the first directive is created on a node, save the index\n  tNode.directiveStart = index;\n  tNode.directiveEnd = index + numberOfDirectives;\n  tNode.providerIndexes = index;\n}\n/**\n * Setup directive for instantiation.\n *\n * We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well\n * as `LView`. `TView` gets the `DirectiveDef`.\n *\n * @param tView `TView`\n * @param tNode `TNode`\n * @param lView `LView`\n * @param directiveIndex Index where the directive will be stored in the Expando.\n * @param def `DirectiveDef`\n */\nfunction configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {\n  ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');\n  tView.data[directiveIndex] = def;\n  const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));\n  // Even though `directiveFactory` will already be using `ɵɵdirectiveInject` in its generated code,\n  // we also want to support `inject()` directly from the directive constructor context so we set\n  // `ɵɵdirectiveInject` as the inject implementation here too.\n  const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);\n  tView.blueprint[directiveIndex] = nodeInjectorFactory;\n  lView[directiveIndex] = nodeInjectorFactory;\n  registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);\n}\n/**\n * Gets the initial set of LView flags based on the component definition that the LView represents.\n * @param def Component definition from which to determine the flags.\n */\nfunction getInitialLViewFlagsFromDef(def) {\n  let flags = 16 /* LViewFlags.CheckAlways */;\n  if (def.signals) {\n    flags = 4096 /* LViewFlags.SignalView */;\n  } else if (def.onPush) {\n    flags = 64 /* LViewFlags.Dirty */;\n  }\n  return flags;\n}\nfunction addComponentLogic(lView, hostTNode, def) {\n  const native = getNativeByTNode(hostTNode, lView);\n  const tView = getOrCreateComponentTView(def);\n  // Only component views should be added to the view tree directly. Embedded views are\n  // accessed through their containers because they may be removed / re-added later.\n  const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n  const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));\n  // Component view will always be created before any injected LContainers,\n  // so this is a regular element, wrap it with the component view\n  lView[hostTNode.index] = componentView;\n}\nfunction elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {\n  if (ngDevMode) {\n    assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n    validateAgainstEventAttributes(name);\n    assertTNodeType(tNode, 2 /* TNodeType.Element */, `Attempted to set attribute \\`${name}\\` on a container node. ` + `Host bindings are not valid on ng-container or ng-template.`);\n  }\n  const element = getNativeByTNode(tNode, lView);\n  setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);\n}\nfunction setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {\n  if (value == null) {\n    ngDevMode && ngDevMode.rendererRemoveAttribute++;\n    renderer.removeAttribute(element, name, namespace);\n  } else {\n    ngDevMode && ngDevMode.rendererSetAttribute++;\n    const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);\n    renderer.setAttribute(element, name, strValue, namespace);\n  }\n}\n/**\n * Sets initial input properties on directive instances from attribute data\n *\n * @param lView Current LView that is being processed.\n * @param directiveIndex Index of the directive in directives array\n * @param instance Instance of the directive on which to set the initial inputs\n * @param def The directive def that contains the list of inputs\n * @param tNode The static data for this node\n */\nfunction setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {\n  const initialInputs = initialInputData[directiveIndex];\n  if (initialInputs !== null) {\n    for (let i = 0; i < initialInputs.length;) {\n      const publicName = initialInputs[i++];\n      const privateName = initialInputs[i++];\n      const flags = initialInputs[i++];\n      const value = initialInputs[i++];\n      writeToDirectiveInput(def, instance, publicName, privateName, flags, value);\n      if (ngDevMode) {\n        const nativeElement = getNativeByTNode(tNode, lView);\n        setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);\n      }\n    }\n  }\n}\n/**\n * Generates initialInputData for a node and stores it in the template's static storage\n * so subsequent template invocations don't have to recalculate it.\n *\n * initialInputData is an array containing values that need to be set as input properties\n * for directives on this node, but only once on creation. We need this array to support\n * the case where you set an @Input property of a directive using attribute-like syntax.\n * e.g. if you have a `name` @Input, you can set it once like this:\n *\n * <my-component name=\"Bess\"></my-component>\n *\n * @param inputs Input alias map that was generated from the directive def inputs.\n * @param directiveIndex Index of the directive that is currently being processed.\n * @param attrs Static attrs on this node.\n */\nfunction generateInitialInputs(inputs, directiveIndex, attrs) {\n  let inputsToStore = null;\n  let i = 0;\n  while (i < attrs.length) {\n    const attrName = attrs[i];\n    if (attrName === 0 /* AttributeMarker.NamespaceURI */) {\n      // We do not allow inputs on namespaced attributes.\n      i += 4;\n      continue;\n    } else if (attrName === 5 /* AttributeMarker.ProjectAs */) {\n      // Skip over the `ngProjectAs` value.\n      i += 2;\n      continue;\n    }\n    // If we hit any other attribute markers, we're done anyway. None of those are valid inputs.\n    if (typeof attrName === 'number') break;\n    if (inputs.hasOwnProperty(attrName)) {\n      if (inputsToStore === null) inputsToStore = [];\n      // Find the input's public name from the input store. Note that we can be found easier\n      // through the directive def, but we want to do it using the inputs store so that it can\n      // account for host directive aliases.\n      const inputConfig = inputs[attrName];\n      for (let j = 0; j < inputConfig.length; j += 3) {\n        if (inputConfig[j] === directiveIndex) {\n          inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);\n          // A directive can't have multiple inputs with the same name so we can break here.\n          break;\n        }\n      }\n    }\n    i += 2;\n  }\n  return inputsToStore;\n}\n//////////////////////////\n//// ViewContainer & View\n//////////////////////////\n/**\n * Creates a LContainer, either from a container instruction, or for a ViewContainerRef.\n *\n * @param hostNative The host element for the LContainer\n * @param hostTNode The host TNode for the LContainer\n * @param currentView The parent view of the LContainer\n * @param native The native comment element\n * @param isForViewContainerRef Optional a flag indicating the ViewContainerRef case\n * @returns LContainer\n */\nfunction createLContainer(hostNative, currentView, native, tNode) {\n  ngDevMode && assertLView(currentView);\n  const lContainer = [hostNative,\n  // host native\n  true,\n  // Boolean `true` in this position signifies that this is an `LContainer`\n  0,\n  // flags\n  currentView,\n  // parent\n  null,\n  // next\n  tNode,\n  // t_host\n  null,\n  // dehydrated views\n  native,\n  // native,\n  null,\n  // view refs\n  null // moved views\n  ];\n  ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');\n  return lContainer;\n}\n/** Refreshes all content queries declared by directives in a given view */\nfunction refreshContentQueries(tView, lView) {\n  const contentQueries = tView.contentQueries;\n  if (contentQueries !== null) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      for (let i = 0; i < contentQueries.length; i += 2) {\n        const queryStartIdx = contentQueries[i];\n        const directiveDefIdx = contentQueries[i + 1];\n        if (directiveDefIdx !== -1) {\n          const directiveDef = tView.data[directiveDefIdx];\n          ngDevMode && assertDefined(directiveDef, 'DirectiveDef not found.');\n          ngDevMode && assertDefined(directiveDef.contentQueries, 'contentQueries function should be defined');\n          setCurrentQueryIndex(queryStartIdx);\n          directiveDef.contentQueries(2 /* RenderFlags.Update */, lView[directiveDefIdx], directiveDefIdx);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Adds LView or LContainer to the end of the current view tree.\n *\n * This structure will be used to traverse through nested views to remove listeners\n * and call onDestroy callbacks.\n *\n * @param lView The view where LView or LContainer should be added\n * @param adjustedHostIndex Index of the view's host node in LView[], adjusted for header\n * @param lViewOrLContainer The LView or LContainer to add to the view tree\n * @returns The state passed in\n */\nfunction addToEndOfViewTree(lView, lViewOrLContainer) {\n  // TODO(benlesh/misko): This implementation is incorrect, because it always adds the LContainer\n  // to the end of the queue, which means if the developer retrieves the LContainers from RNodes out\n  // of order, the change detection will run out of order, as the act of retrieving the the\n  // LContainer from the RNode is what adds it to the queue.\n  if (lView[CHILD_HEAD]) {\n    lView[CHILD_TAIL][NEXT] = lViewOrLContainer;\n  } else {\n    lView[CHILD_HEAD] = lViewOrLContainer;\n  }\n  lView[CHILD_TAIL] = lViewOrLContainer;\n  return lViewOrLContainer;\n}\n///////////////////////////////\n//// Change detection\n///////////////////////////////\nfunction executeViewQueryFn(flags, viewQueryFn, component) {\n  ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');\n  setCurrentQueryIndex(0);\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    viewQueryFn(flags, component);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n///////////////////////////////\n//// Bindings & interpolations\n///////////////////////////////\n/**\n * Stores meta-data for a property binding to be used by TestBed's `DebugElement.properties`.\n *\n * In order to support TestBed's `DebugElement.properties` we need to save, for each binding:\n * - a bound property name;\n * - a static parts of interpolated strings;\n *\n * A given property metadata is saved at the binding's index in the `TView.data` (in other words, a\n * property binding metadata will be stored in `TView.data` at the same index as a bound value in\n * `LView`). Metadata are represented as `INTERPOLATION_DELIMITER`-delimited string with the\n * following format:\n * - `propertyName` for bound properties;\n * - `propertyName�prefix�interpolation_static_part1�..interpolation_static_partN�suffix` for\n * interpolated properties.\n *\n * @param tData `TData` where meta-data will be saved;\n * @param tNode `TNode` that is a target of the binding;\n * @param propertyName bound property name;\n * @param bindingIndex binding index in `LView`\n * @param interpolationParts static interpolation parts (for property interpolations)\n */\nfunction storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {\n  // Binding meta-data are stored only the first time a given property instruction is processed.\n  // Since we don't have a concept of the \"first update pass\" we need to check for presence of the\n  // binding meta-data to decide if one should be stored (or if was stored already).\n  if (tData[bindingIndex] === null) {\n    if (tNode.inputs == null || !tNode.inputs[propertyName]) {\n      const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);\n      propBindingIdxs.push(bindingIndex);\n      let bindingMetadata = propertyName;\n      if (interpolationParts.length > 0) {\n        bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);\n      }\n      tData[bindingIndex] = bindingMetadata;\n    }\n  }\n}\nfunction getOrCreateLViewCleanup(view) {\n  // top level variables should not be exported for performance reasons (PERF_NOTES.md)\n  return view[CLEANUP] ??= [];\n}\nfunction getOrCreateTViewCleanup(tView) {\n  return tView.cleanup ??= [];\n}\n/**\n * There are cases where the sub component's renderer needs to be included\n * instead of the current renderer (see the componentSyntheticHost* instructions).\n */\nfunction loadComponentRenderer(currentDef, tNode, lView) {\n  // TODO(FW-2043): the `currentDef` is null when host bindings are invoked while creating root\n  // component (see packages/core/src/render3/component.ts). This is not consistent with the process\n  // of creating inner components, when current directive index is available in the state. In order\n  // to avoid relying on current def being `null` (thus special-casing root component creation), the\n  // process of creating root component should be unified with the process of creating inner\n  // components.\n  if (currentDef === null || isComponentDef(currentDef)) {\n    lView = unwrapLView(lView[tNode.index]);\n  }\n  return lView[RENDERER];\n}\n/** Handles an error thrown in an LView. */\nfunction handleError(lView, error) {\n  const injector = lView[INJECTOR];\n  const errorHandler = injector ? injector.get(ErrorHandler, null) : null;\n  errorHandler && errorHandler.handleError(error);\n}\n/**\n * Set the inputs of directives at the current node to corresponding value.\n *\n * @param tView The current TView\n * @param lView the `LView` which contains the directives.\n * @param inputs mapping between the public \"input\" name and privately-known,\n *        possibly minified, property names to write to.\n * @param value Value to set.\n */\nfunction setInputsForProperty(tView, lView, inputs, publicName, value) {\n  for (let i = 0; i < inputs.length;) {\n    const index = inputs[i++];\n    const privateName = inputs[i++];\n    const flags = inputs[i++];\n    const instance = lView[index];\n    ngDevMode && assertIndexInRange(lView, index);\n    const def = tView.data[index];\n    writeToDirectiveInput(def, instance, publicName, privateName, flags, value);\n  }\n}\n/**\n * Updates a text binding at a given index in a given LView.\n */\nfunction textBindingInternal(lView, index, value) {\n  ngDevMode && assertString(value, 'Value should be a string');\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');\n  ngDevMode && assertIndexInRange(lView, index);\n  const element = getNativeByIndex(index, lView);\n  ngDevMode && assertDefined(element, 'native element should exist');\n  updateTextNode(lView[RENDERER], element, value);\n}\nfunction renderComponent(hostLView, componentHostIdx) {\n  ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');\n  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n  const componentTView = componentView[TVIEW];\n  syncViewWithBlueprint(componentTView, componentView);\n  const hostRNode = componentView[HOST];\n  // Populate an LView with hydration info retrieved from the DOM via TransferState.\n  if (hostRNode !== null && componentView[HYDRATION] === null) {\n    componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);\n  }\n  renderView(componentTView, componentView, componentView[CONTEXT]);\n}\n/**\n * Syncs an LView instance with its blueprint if they have gotten out of sync.\n *\n * Typically, blueprints and their view instances should always be in sync, so the loop here\n * will be skipped. However, consider this case of two components side-by-side:\n *\n * App template:\n * ```html\n * <comp></comp>\n * <comp></comp>\n * ```\n *\n * The following will happen:\n * 1. App template begins processing.\n * 2. First <comp> is matched as a component and its LView is created.\n * 3. Second <comp> is matched as a component and its LView is created.\n * 4. App template completes processing, so it's time to check child templates.\n * 5. First <comp> template is checked. It has a directive, so its def is pushed to blueprint.\n * 6. Second <comp> template is checked. Its blueprint has been updated by the first\n * <comp> template, but its LView was created before this update, so it is out of sync.\n *\n * Note that embedded views inside ngFor loops will never be out of sync because these views\n * are processed as soon as they are created.\n *\n * @param tView The `TView` that contains the blueprint for syncing\n * @param lView The view to sync\n */\nfunction syncViewWithBlueprint(tView, lView) {\n  for (let i = lView.length; i < tView.blueprint.length; i++) {\n    lView.push(tView.blueprint[i]);\n  }\n}\n/**\n * Processes a view in the creation mode. This includes a number of steps in a specific order:\n * - creating view query functions (if any);\n * - executing a template function in the creation mode;\n * - updating static queries (if any);\n * - creating child components defined in a given view.\n */\nfunction renderView(tView, lView, context) {\n  ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');\n  ngDevMode && assertNotReactive(renderView.name);\n  enterView(lView);\n  try {\n    const viewQuery = tView.viewQuery;\n    if (viewQuery !== null) {\n      executeViewQueryFn(1 /* RenderFlags.Create */, viewQuery, context);\n    }\n    // Execute a template associated with this view, if it exists. A template function might not be\n    // defined for the root component views.\n    const templateFn = tView.template;\n    if (templateFn !== null) {\n      executeTemplate(tView, lView, templateFn, 1 /* RenderFlags.Create */, context);\n    }\n    // This needs to be set before children are processed to support recursive components.\n    // This must be set to false immediately after the first creation run because in an\n    // ngFor loop, all the views will be created together before update mode runs and turns\n    // off firstCreatePass. If we don't set it here, instances will perform directive\n    // matching, etc again and again.\n    if (tView.firstCreatePass) {\n      tView.firstCreatePass = false;\n    }\n    // Mark all queries active in this view as dirty. This is necessary for signal-based queries to\n    // have a clear marking point where we can read query results atomically (for a given view).\n    lView[QUERIES]?.finishViewCreation(tView);\n    // We resolve content queries specifically marked as `static` in creation mode. Dynamic\n    // content queries are resolved during change detection (i.e. update mode), after embedded\n    // views are refreshed (see block above).\n    if (tView.staticContentQueries) {\n      refreshContentQueries(tView, lView);\n    }\n    // We must materialize query results before child components are processed\n    // in case a child component has projected a container. The LContainer needs\n    // to exist so the embedded views are properly attached by the container.\n    if (tView.staticViewQueries) {\n      executeViewQueryFn(2 /* RenderFlags.Update */, tView.viewQuery, context);\n    }\n    // Render child component views.\n    const components = tView.components;\n    if (components !== null) {\n      renderChildComponents(lView, components);\n    }\n  } catch (error) {\n    // If we didn't manage to get past the first template pass due to\n    // an error, mark the view as corrupted so we can try to recover.\n    if (tView.firstCreatePass) {\n      tView.incompleteFirstPass = true;\n      tView.firstCreatePass = false;\n    }\n    throw error;\n  } finally {\n    lView[FLAGS] &= ~4 /* LViewFlags.CreationMode */;\n    leaveView();\n  }\n}\n/** Renders child components in the current view (creation mode). */\nfunction renderChildComponents(hostLView, components) {\n  for (let i = 0; i < components.length; i++) {\n    renderComponent(hostLView, components[i]);\n  }\n}\nfunction createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    const embeddedTView = templateTNode.tView;\n    ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');\n    ngDevMode && assertTNodeForLView(templateTNode, declarationLView);\n    // Embedded views follow the change detection strategy of the view they're declared in.\n    const isSignalView = declarationLView[FLAGS] & 4096 /* LViewFlags.SignalView */;\n    const viewFlags = isSignalView ? 4096 /* LViewFlags.SignalView */ : 16 /* LViewFlags.CheckAlways */;\n    const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);\n    const declarationLContainer = declarationLView[templateTNode.index];\n    ngDevMode && assertLContainer(declarationLContainer);\n    embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;\n    const declarationViewLQueries = declarationLView[QUERIES];\n    if (declarationViewLQueries !== null) {\n      embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);\n    }\n    // execute creation mode of a view\n    renderView(embeddedTView, embeddedLView, context);\n    return embeddedLView;\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nfunction getLViewFromLContainer(lContainer, index) {\n  const adjustedIndex = CONTAINER_HEADER_OFFSET + index;\n  // avoid reading past the array boundaries\n  if (adjustedIndex < lContainer.length) {\n    const lView = lContainer[adjustedIndex];\n    ngDevMode && assertLView(lView);\n    return lView;\n  }\n  return undefined;\n}\n/**\n * Returns whether an elements that belong to a view should be\n * inserted into the DOM. For client-only cases, DOM elements are\n * always inserted. For hydration cases, we check whether serialized\n * info is available for a view and the view is not in a \"skip hydration\"\n * block (in which case view contents was re-created, thus needing insertion).\n */\nfunction shouldAddViewToDom(tNode, dehydratedView) {\n  return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);\n}\nfunction addLViewToLContainer(lContainer, lView, index, addToDOM = true) {\n  const tView = lView[TVIEW];\n  // Insert into the view tree so the new view can be change-detected\n  insertView(tView, lView, lContainer, index);\n  // Insert elements that belong to this view into the DOM tree\n  if (addToDOM) {\n    const beforeNode = getBeforeNodeForView(index, lContainer);\n    const renderer = lView[RENDERER];\n    const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);\n    if (parentRNode !== null) {\n      addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);\n    }\n  }\n  // When in hydration mode, reset the pointer to the first child in\n  // the dehydrated view. This indicates that the view was hydrated and\n  // further attaching/detaching should work with this view as normal.\n  const hydrationInfo = lView[HYDRATION];\n  if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {\n    hydrationInfo.firstChild = null;\n  }\n}\nfunction removeLViewFromLContainer(lContainer, index) {\n  const lView = detachView(lContainer, index);\n  if (lView !== undefined) {\n    destroyLView(lView[TVIEW], lView);\n  }\n  return lView;\n}\nfunction collectNativeNodes(tView, lView, tNode, result, isProjection = false) {\n  while (tNode !== null) {\n    // Let declarations don't have corresponding DOM nodes so we skip over them.\n    if (tNode.type === 128 /* TNodeType.LetDeclaration */) {\n      tNode = isProjection ? tNode.projectionNext : tNode.next;\n      continue;\n    }\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);\n    const lNode = lView[tNode.index];\n    if (lNode !== null) {\n      result.push(unwrapRNode(lNode));\n    }\n    // A given lNode can represent either a native node or a LContainer (when it is a host of a\n    // ViewContainerRef). When we find a LContainer we need to descend into it to collect root nodes\n    // from the views in this container.\n    if (isLContainer(lNode)) {\n      collectNativeNodesInLContainer(lNode, result);\n    }\n    const tNodeType = tNode.type;\n    if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n      collectNativeNodes(tView, lView, tNode.child, result);\n    } else if (tNodeType & 32 /* TNodeType.Icu */) {\n      const nextRNode = icuContainerIterate(tNode, lView);\n      let rNode;\n      while (rNode = nextRNode()) {\n        result.push(rNode);\n      }\n    } else if (tNodeType & 16 /* TNodeType.Projection */) {\n      const nodesInSlot = getProjectionNodes(lView, tNode);\n      if (Array.isArray(nodesInSlot)) {\n        result.push(...nodesInSlot);\n      } else {\n        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n        ngDevMode && assertParentView(parentView);\n        collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);\n      }\n    }\n    tNode = isProjection ? tNode.projectionNext : tNode.next;\n  }\n  return result;\n}\n/**\n * Collects all root nodes in all views in a given LContainer.\n */\nfunction collectNativeNodesInLContainer(lContainer, result) {\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const lViewInAContainer = lContainer[i];\n    const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;\n    if (lViewFirstChildTNode !== null) {\n      collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);\n    }\n  }\n  // When an LContainer is created, the anchor (comment) node is:\n  // - (1) either reused in case of an ElementContainer (<ng-container>)\n  // - (2) or a new comment node is created\n  // In the first case, the anchor comment node would be added to the final\n  // list by the code in the `collectNativeNodes` function\n  // (see the `result.push(unwrapRNode(lNode))` line), but the second\n  // case requires extra handling: the anchor node needs to be added to the\n  // final list manually. See additional information in the `createAnchorNode`\n  // function in the `view_container_ref.ts`.\n  //\n  // In the first case, the same reference would be stored in the `NATIVE`\n  // and `HOST` slots in an LContainer. Otherwise, this is the second case and\n  // we should add an element to the final list.\n  if (lContainer[NATIVE] !== lContainer[HOST]) {\n    result.push(lContainer[NATIVE]);\n  }\n}\nlet freeConsumers = [];\n/**\n * Create a new template consumer pointing at the specified LView.\n * Sometimes, a previously created consumer may be reused, in order to save on allocations. In that\n * case, the LView will be updated.\n */\nfunction getOrBorrowReactiveLViewConsumer(lView) {\n  return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);\n}\nfunction borrowReactiveLViewConsumer(lView) {\n  const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);\n  consumer.lView = lView;\n  return consumer;\n}\nfunction maybeReturnReactiveLViewConsumer(consumer) {\n  if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {\n    // The consumer got committed.\n    return;\n  }\n  consumer.lView = null;\n  freeConsumers.push(consumer);\n}\nconst REACTIVE_LVIEW_CONSUMER_NODE = {\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerMarkedDirty: node => {\n    markAncestorsForTraversal(node.lView);\n  },\n  consumerOnSignalRead() {\n    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n  }\n};\n/**\n * Creates a temporary consumer for use with `LView`s that should not have consumers.\n * If the LView already has a consumer, returns the existing one instead.\n *\n * This is necessary because some APIs may cause change detection directly on an LView\n * that we do not want to have a consumer (Embedded views today). As a result, there\n * would be no active consumer from running change detection on its host component\n * and any signals in the LView template would be untracked. Instead, we create\n * this temporary consumer that marks the first parent that _should_ have a consumer\n * for refresh. Once change detection runs as part of that refresh, we throw away\n * this consumer because its signals will then be tracked by the parent's consumer.\n */\nfunction getOrCreateTemporaryConsumer(lView) {\n  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);\n  consumer.lView = lView;\n  return consumer;\n}\nconst TEMPORARY_CONSUMER_NODE = {\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerMarkedDirty: node => {\n    let parent = getLViewParent(node.lView);\n    while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {\n      parent = getLViewParent(parent);\n    }\n    if (!parent) {\n      // If we can't find an appropriate parent that should have a consumer, we\n      // don't have a way of appropriately refreshing this LView as part of application synchronization.\n      return;\n    }\n    markViewForRefresh(parent);\n  },\n  consumerOnSignalRead() {\n    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n  }\n};\n/**\n * Indicates if the view should get its own reactive consumer node.\n *\n * In the current design, all embedded views share a consumer with the component view. This allows\n * us to refresh at the component level rather than at a per-view level. In addition, root views get\n * their own reactive node because root component will have a host view that executes the\n * component's host bindings. This needs to be tracked in a consumer as well.\n *\n * To get a more granular change detection than per-component, all we would just need to update the\n * condition here so that a given view gets a reactive consumer which can become dirty independently\n * from its parent component. For example embedded views for signal components could be created with\n * a new type \"SignalEmbeddedView\" and the condition here wouldn't even need updating in order to\n * get granular per-view change detection for signal components.\n */\nfunction viewShouldHaveReactiveConsumer(tView) {\n  return tView.type !== 2 /* TViewType.Embedded */;\n}\nfunction runEffectsInView(view) {\n  if (view[EFFECTS] === null) {\n    return;\n  }\n  // Since effects can make other effects dirty, we flush them in a loop until there are no more to\n  // flush.\n  let tryFlushEffects = true;\n  while (tryFlushEffects) {\n    let foundDirtyEffect = false;\n    for (const effect of view[EFFECTS]) {\n      if (!effect.dirty) {\n        continue;\n      }\n      foundDirtyEffect = true;\n      // `runEffectsInView` is called during change detection, and therefore runs\n      // in the Angular zone if it's available.\n      if (effect.zone === null || Zone.current === effect.zone) {\n        effect.run();\n      } else {\n        effect.zone.run(() => effect.run());\n      }\n    }\n    // Check if we need to continue flushing. If we didn't find any dirty effects, then there's\n    // no need to loop back. Otherwise, check the view to see if it was marked for traversal\n    // again. If so, there's a chance that one of the effects we ran caused another effect to\n    // become dirty.\n    tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */);\n  }\n}\n\n/**\n * The maximum number of times the change detection traversal will rerun before throwing an error.\n */\nconst MAXIMUM_REFRESH_RERUNS$1 = 100;\nfunction detectChangesInternal(lView, notifyErrorHandler = true, mode = 0 /* ChangeDetectionMode.Global */) {\n  const environment = lView[ENVIRONMENT];\n  const rendererFactory = environment.rendererFactory;\n  // Check no changes mode is a dev only mode used to verify that bindings have not changed\n  // since they were assigned. We do not want to invoke renderer factory functions in that mode\n  // to avoid any possible side-effects.\n  const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();\n  if (!checkNoChangesMode) {\n    rendererFactory.begin?.();\n  }\n  try {\n    detectChangesInViewWhileDirty(lView, mode);\n  } catch (error) {\n    if (notifyErrorHandler) {\n      handleError(lView, error);\n    }\n    throw error;\n  } finally {\n    if (!checkNoChangesMode) {\n      rendererFactory.end?.();\n    }\n  }\n}\nfunction detectChangesInViewWhileDirty(lView, mode) {\n  const lastIsRefreshingViewsValue = isRefreshingViews();\n  try {\n    setIsRefreshingViews(true);\n    detectChangesInView(lView, mode);\n    // We don't need or want to do any looping when in exhaustive checkNoChanges because we\n    // already traverse all the views and nothing should change so we shouldn't have to do\n    // another pass to pick up new changes.\n    if (ngDevMode && isExhaustiveCheckNoChanges()) {\n      return;\n    }\n    let retries = 0;\n    // If after running change detection, this view still needs to be refreshed or there are\n    // descendants views that need to be refreshed due to re-dirtying during the change detection\n    // run, detect changes on the view again. We run change detection in `Targeted` mode to only\n    // refresh views with the `RefreshView` flag.\n    while (requiresRefreshOrTraversal(lView)) {\n      if (retries === MAXIMUM_REFRESH_RERUNS$1) {\n        throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, ngDevMode && 'Infinite change detection while trying to refresh views. ' + 'There may be components which each cause the other to require a refresh, ' + 'causing an infinite loop.');\n      }\n      retries++;\n      // Even if this view is detached, we still detect changes in targeted mode because this was\n      // the root of the change detection run.\n      detectChangesInView(lView, 1 /* ChangeDetectionMode.Targeted */);\n    }\n  } finally {\n    // restore state to what it was before entering this change detection loop\n    setIsRefreshingViews(lastIsRefreshingViewsValue);\n  }\n}\nfunction checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {\n  setIsInCheckNoChangesMode(mode);\n  try {\n    detectChangesInternal(lView, notifyErrorHandler);\n  } finally {\n    setIsInCheckNoChangesMode(CheckNoChangesMode.Off);\n  }\n}\n/**\n * Processes a view in update mode. This includes a number of steps in a specific order:\n * - executing a template function in update mode;\n * - executing hooks;\n * - refreshing queries;\n * - setting host bindings;\n * - refreshing child (embedded and component) views.\n */\nfunction refreshView(tView, lView, templateFn, context) {\n  ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');\n  const flags = lView[FLAGS];\n  if ((flags & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) return;\n  // Check no changes mode is a dev only mode used to verify that bindings have not changed\n  // since they were assigned. We do not want to execute lifecycle hooks in that mode.\n  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n  const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();\n  // Start component reactive context\n  // - We might already be in a reactive context if this is an embedded view of the host.\n  // - We might be descending into a view that needs a consumer.\n  enterView(lView);\n  let returnConsumerToPool = true;\n  let prevConsumer = null;\n  let currentConsumer = null;\n  if (!isInCheckNoChangesPass) {\n    if (viewShouldHaveReactiveConsumer(tView)) {\n      currentConsumer = getOrBorrowReactiveLViewConsumer(lView);\n      prevConsumer = consumerBeforeComputation$1(currentConsumer);\n    } else if (getActiveConsumer$1() === null) {\n      // If the current view should not have a reactive consumer but we don't have an active consumer,\n      // we still need to create a temporary consumer to track any signal reads in this template.\n      // This is a rare case that can happen with `viewContainerRef.createEmbeddedView(...).detectChanges()`.\n      // This temporary consumer marks the first parent that _should_ have a consumer for refresh.\n      // Once that refresh happens, the signals will be tracked in the parent consumer and we can destroy\n      // the temporary one.\n      returnConsumerToPool = false;\n      currentConsumer = getOrCreateTemporaryConsumer(lView);\n      prevConsumer = consumerBeforeComputation$1(currentConsumer);\n    } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {\n      consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);\n      lView[REACTIVE_TEMPLATE_CONSUMER] = null;\n    }\n  }\n  try {\n    resetPreOrderHookFlags(lView);\n    setBindingIndex(tView.bindingStartIndex);\n    if (templateFn !== null) {\n      executeTemplate(tView, lView, templateFn, 2 /* RenderFlags.Update */, context);\n    }\n    const hooksInitPhaseCompleted = (flags & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;\n    // execute pre-order hooks (OnInit, OnChanges, DoCheck)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const preOrderCheckHooks = tView.preOrderCheckHooks;\n        if (preOrderCheckHooks !== null) {\n          executeCheckHooks(lView, preOrderCheckHooks, null);\n        }\n      } else {\n        const preOrderHooks = tView.preOrderHooks;\n        if (preOrderHooks !== null) {\n          executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, null);\n        }\n        incrementInitPhaseFlags(lView, 0 /* InitPhaseState.OnInitHooksToBeRun */);\n      }\n    }\n    // We do not need to mark transplanted views for refresh when doing exhaustive checks\n    // because all views will be reached anyways during the traversal.\n    if (!isInExhaustiveCheckNoChangesPass) {\n      // First mark transplanted views that are declared in this lView as needing a refresh at their\n      // insertion points. This is needed to avoid the situation where the template is defined in this\n      // `LView` but its declaration appears after the insertion component.\n      markTransplantedViewsForRefresh(lView);\n    }\n    runEffectsInView(lView);\n    detectChangesInEmbeddedViews(lView, 0 /* ChangeDetectionMode.Global */);\n    // Content query results must be refreshed before content hooks are called.\n    if (tView.contentQueries !== null) {\n      refreshContentQueries(tView, lView);\n    }\n    // execute content hooks (AfterContentInit, AfterContentChecked)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const contentCheckHooks = tView.contentCheckHooks;\n        if (contentCheckHooks !== null) {\n          executeCheckHooks(lView, contentCheckHooks);\n        }\n      } else {\n        const contentHooks = tView.contentHooks;\n        if (contentHooks !== null) {\n          executeInitAndCheckHooks(lView, contentHooks, 1 /* InitPhaseState.AfterContentInitHooksToBeRun */);\n        }\n        incrementInitPhaseFlags(lView, 1 /* InitPhaseState.AfterContentInitHooksToBeRun */);\n      }\n    }\n    processHostBindingOpCodes(tView, lView);\n    // Refresh child component views.\n    const components = tView.components;\n    if (components !== null) {\n      detectChangesInChildComponents(lView, components, 0 /* ChangeDetectionMode.Global */);\n    }\n    // View queries must execute after refreshing child components because a template in this view\n    // could be inserted in a child component. If the view query executes before child component\n    // refresh, the template might not yet be inserted.\n    const viewQuery = tView.viewQuery;\n    if (viewQuery !== null) {\n      executeViewQueryFn(2 /* RenderFlags.Update */, viewQuery, context);\n    }\n    // execute view hooks (AfterViewInit, AfterViewChecked)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const viewCheckHooks = tView.viewCheckHooks;\n        if (viewCheckHooks !== null) {\n          executeCheckHooks(lView, viewCheckHooks);\n        }\n      } else {\n        const viewHooks = tView.viewHooks;\n        if (viewHooks !== null) {\n          executeInitAndCheckHooks(lView, viewHooks, 2 /* InitPhaseState.AfterViewInitHooksToBeRun */);\n        }\n        incrementInitPhaseFlags(lView, 2 /* InitPhaseState.AfterViewInitHooksToBeRun */);\n      }\n    }\n    if (tView.firstUpdatePass === true) {\n      // We need to make sure that we only flip the flag on successful `refreshView` only\n      // Don't do this in `finally` block.\n      // If we did this in `finally` block then an exception could block the execution of styling\n      // instructions which in turn would be unable to insert themselves into the styling linked\n      // list. The result of this would be that if the exception would not be throw on subsequent CD\n      // the styling would be unable to process it data and reflect to the DOM.\n      tView.firstUpdatePass = false;\n    }\n    // Schedule any effects that are waiting on the update pass of this view.\n    if (lView[EFFECTS_TO_SCHEDULE]) {\n      for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {\n        notifyEffect();\n      }\n      // Once they've been run, we can drop the array.\n      lView[EFFECTS_TO_SCHEDULE] = null;\n    }\n    // Do not reset the dirty state when running in check no changes mode. We don't want components\n    // to behave differently depending on whether check no changes is enabled or not. For example:\n    // Marking an OnPush component as dirty from within the `ngAfterViewInit` hook in order to\n    // refresh a `NgClass` binding should work. If we would reset the dirty state in the check\n    // no changes cycle, the component would be not be dirty for the next update pass. This would\n    // be different in production mode where the component dirty state is not reset.\n    if (!isInCheckNoChangesPass) {\n      lView[FLAGS] &= ~(64 /* LViewFlags.Dirty */ | 8 /* LViewFlags.FirstLViewPass */);\n    }\n  } catch (e) {\n    if (!isInCheckNoChangesPass) {\n      // If refreshing a view causes an error, we need to remark the ancestors as needing traversal\n      // because the error might have caused a situation where views below the current location are\n      // dirty but will be unreachable because the \"has dirty children\" flag in the ancestors has been\n      // cleared during change detection and we failed to run to completion.\n      markAncestorsForTraversal(lView);\n    }\n    throw e;\n  } finally {\n    if (currentConsumer !== null) {\n      consumerAfterComputation$1(currentConsumer, prevConsumer);\n      if (returnConsumerToPool) {\n        maybeReturnReactiveLViewConsumer(currentConsumer);\n      }\n    }\n    leaveView();\n  }\n}\n/**\n * Goes over embedded views (ones created through ViewContainerRef APIs) and refreshes\n * them by executing an associated template function.\n */\nfunction detectChangesInEmbeddedViews(lView, mode) {\n  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n    for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n      const embeddedLView = lContainer[i];\n      detectChangesInViewIfAttached(embeddedLView, mode);\n    }\n  }\n}\n/**\n * Mark transplanted views as needing to be refreshed at their attachment points.\n *\n * @param lView The `LView` that may have transplanted views.\n */\nfunction markTransplantedViewsForRefresh(lView) {\n  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n    if (!(lContainer[FLAGS] & LContainerFlags.HasTransplantedViews)) continue;\n    const movedViews = lContainer[MOVED_VIEWS];\n    ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');\n    for (let i = 0; i < movedViews.length; i++) {\n      const movedLView = movedViews[i];\n      markViewForRefresh(movedLView);\n    }\n  }\n}\n/**\n * Detects changes in a component by entering the component view and processing its bindings,\n * queries, etc. if it is CheckAlways, OnPush and Dirty, etc.\n *\n * @param componentHostIdx  Element index in LView[] (adjusted for HEADER_OFFSET)\n */\nfunction detectChangesInComponent(hostLView, componentHostIdx, mode) {\n  ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');\n  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n  detectChangesInViewIfAttached(componentView, mode);\n}\n/**\n * Visits a view as part of change detection traversal.\n *\n * If the view is detached, no additional traversal happens.\n */\nfunction detectChangesInViewIfAttached(lView, mode) {\n  if (!viewAttachedToChangeDetector(lView)) {\n    return;\n  }\n  detectChangesInView(lView, mode);\n}\n/**\n * Visits a view as part of change detection traversal.\n *\n * The view is refreshed if:\n * - If the view is CheckAlways or Dirty and ChangeDetectionMode is `Global`\n * - If the view has the `RefreshView` flag\n *\n * The view is not refreshed, but descendants are traversed in `ChangeDetectionMode.Targeted` if the\n * view HasChildViewsToRefresh flag is set.\n */\nfunction detectChangesInView(lView, mode) {\n  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n  const tView = lView[TVIEW];\n  const flags = lView[FLAGS];\n  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];\n  // Refresh CheckAlways views in Global mode.\n  let shouldRefreshView = !!(mode === 0 /* ChangeDetectionMode.Global */ && flags & 16 /* LViewFlags.CheckAlways */);\n  // Refresh Dirty views in Global mode, as long as we're not in checkNoChanges.\n  // CheckNoChanges never worked with `OnPush` components because the `Dirty` flag was\n  // cleared before checkNoChanges ran. Because there is now a loop for to check for\n  // backwards views, it gives an opportunity for `OnPush` components to be marked `Dirty`\n  // before the CheckNoChanges pass. We don't want existing errors that are hidden by the\n  // current CheckNoChanges bug to surface when making unrelated changes.\n  shouldRefreshView ||= !!(flags & 64 /* LViewFlags.Dirty */ && mode === 0 /* ChangeDetectionMode.Global */ && !isInCheckNoChangesPass);\n  // Always refresh views marked for refresh, regardless of mode.\n  shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);\n  // Refresh views when they have a dirty reactive consumer, regardless of mode.\n  shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange$1(consumer));\n  shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());\n  // Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they\n  // can be re-dirtied during the refresh process.\n  if (consumer) {\n    consumer.dirty = false;\n  }\n  lView[FLAGS] &= ~(8192 /* LViewFlags.HasChildViewsToRefresh */ | 1024 /* LViewFlags.RefreshView */);\n  if (shouldRefreshView) {\n    refreshView(tView, lView, tView.template, lView[CONTEXT]);\n  } else if (flags & 8192 /* LViewFlags.HasChildViewsToRefresh */) {\n    runEffectsInView(lView);\n    detectChangesInEmbeddedViews(lView, 1 /* ChangeDetectionMode.Targeted */);\n    const components = tView.components;\n    if (components !== null) {\n      detectChangesInChildComponents(lView, components, 1 /* ChangeDetectionMode.Targeted */);\n    }\n  }\n}\n/** Refreshes child components in the current view (update mode). */\nfunction detectChangesInChildComponents(hostLView, components, mode) {\n  for (let i = 0; i < components.length; i++) {\n    detectChangesInComponent(hostLView, components[i], mode);\n  }\n}\n\n/**\n * Marks current view and all ancestors dirty.\n *\n * Returns the root view because it is found as a byproduct of marking the view tree\n * dirty, and can be used by methods that consume markViewDirty() to easily schedule\n * change detection. Otherwise, such methods would need to traverse up the view tree\n * an additional time to get the root view and schedule a tick on it.\n *\n * @param lView The starting LView to mark dirty\n * @returns the root LView\n */\nfunction markViewDirty(lView, source) {\n  const dirtyBitsToUse = isRefreshingViews() ?\n  // When we are actively refreshing views, we only use the `Dirty` bit to mark a view\n  64 /* LViewFlags.Dirty */ :\n  // When we are not actively refreshing a view tree, it is absolutely\n  // valid to update state and mark views dirty. We use the `RefreshView` flag in this\n  // case to allow synchronously rerunning change detection. This applies today to\n  // afterRender hooks as well as animation listeners which execute after detecting\n  // changes in a view when the render factory flushes.\n  1024 /* LViewFlags.RefreshView */ | 64 /* LViewFlags.Dirty */;\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);\n  while (lView) {\n    lView[FLAGS] |= dirtyBitsToUse;\n    const parent = getLViewParent(lView);\n    // Stop traversing up as soon as you find a root view that wasn't attached to any container\n    if (isRootView(lView) && !parent) {\n      return lView;\n    }\n    // continue otherwise\n    lView = parent;\n  }\n  return null;\n}\nclass ViewRef$1 {\n  _lView;\n  _cdRefInjectingView;\n  notifyErrorHandler;\n  _appRef = null;\n  _attachedToViewContainer = false;\n  get rootNodes() {\n    const lView = this._lView;\n    const tView = lView[TVIEW];\n    return collectNativeNodes(tView, lView, tView.firstChild, []);\n  }\n  constructor(\n  /**\n   * This represents `LView` associated with the component when ViewRef is a ChangeDetectorRef.\n   *\n   * When ViewRef is created for a dynamic component, this also represents the `LView` for the\n   * component.\n   *\n   * For a \"regular\" ViewRef created for an embedded view, this is the `LView` for the embedded\n   * view.\n   *\n   * @internal\n   */\n  _lView,\n  /**\n   * This represents the `LView` associated with the point where `ChangeDetectorRef` was\n   * requested.\n   *\n   * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view.\n   */\n  _cdRefInjectingView, notifyErrorHandler = true) {\n    this._lView = _lView;\n    this._cdRefInjectingView = _cdRefInjectingView;\n    this.notifyErrorHandler = notifyErrorHandler;\n  }\n  get context() {\n    return this._lView[CONTEXT];\n  }\n  /**\n   * Reports whether the given view is considered dirty according to the different marking mechanisms.\n   */\n  get dirty() {\n    return !!(this._lView[FLAGS] & (64 /* LViewFlags.Dirty */ | 1024 /* LViewFlags.RefreshView */ | 8192 /* LViewFlags.HasChildViewsToRefresh */)) || !!this._lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty;\n  }\n  /**\n   * @deprecated Replacing the full context object is not supported. Modify the context\n   *   directly, or consider using a `Proxy` if you need to replace the full object.\n   * // TODO(devversion): Remove this.\n   */\n  set context(value) {\n    if (ngDevMode) {\n      // Note: We have a warning message here because the `@deprecated` JSDoc will not be picked\n      // up for assignments on the setter. We want to let users know about the deprecated usage.\n      console.warn('Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.');\n    }\n    this._lView[CONTEXT] = value;\n  }\n  get destroyed() {\n    return (this._lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;\n  }\n  destroy() {\n    if (this._appRef) {\n      this._appRef.detachView(this);\n    } else if (this._attachedToViewContainer) {\n      const parent = this._lView[PARENT];\n      if (isLContainer(parent)) {\n        const viewRefs = parent[VIEW_REFS];\n        const index = viewRefs ? viewRefs.indexOf(this) : -1;\n        if (index > -1) {\n          ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');\n          detachView(parent, index);\n          removeFromArray(viewRefs, index);\n        }\n      }\n      this._attachedToViewContainer = false;\n    }\n    destroyLView(this._lView[TVIEW], this._lView);\n  }\n  onDestroy(callback) {\n    storeLViewOnDestroy(this._lView, callback);\n  }\n  /**\n   * Marks a view and all of its ancestors dirty.\n   *\n   * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush} component is\n   * checked when it needs to be re-rendered but the two normal triggers haven't marked it\n   * dirty (i.e. inputs haven't changed and events haven't fired in the view).\n   *\n   * <!-- TODO: Add a link to a chapter on OnPush components -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * ```ts\n   * @Component({\n   *   selector: 'app-root',\n   *   template: `Number of ticks: {{numberOfTicks}}`\n   *   changeDetection: ChangeDetectionStrategy.OnPush,\n   * })\n   * class AppComponent {\n   *   numberOfTicks = 0;\n   *\n   *   constructor(private ref: ChangeDetectorRef) {\n   *     setInterval(() => {\n   *       this.numberOfTicks++;\n   *       // the following is required, otherwise the view will not be updated\n   *       this.ref.markForCheck();\n   *     }, 1000);\n   *   }\n   * }\n   * ```\n   */\n  markForCheck() {\n    markViewDirty(this._cdRefInjectingView || this._lView, 4 /* NotificationSource.MarkForCheck */);\n  }\n  markForRefresh() {\n    markViewForRefresh(this._cdRefInjectingView || this._lView);\n  }\n  /**\n   * Detaches the view from the change detection tree.\n   *\n   * Detached views will not be checked during change detection runs until they are\n   * re-attached, even if they are dirty. `detach` can be used in combination with\n   * {@link ChangeDetectorRef#detectChanges} to implement local change\n   * detection checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds. We can do that by detaching\n   * the component's change detector and doing a local check every five seconds.\n   *\n   * ```ts\n   * class DataProvider {\n   *   // in a real application the returned data will be different every time\n   *   get data() {\n   *     return [1,2,3,4,5];\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'giant-list',\n   *   template: `\n   *     <li *ngFor=\"let d of dataProvider.data\">Data {{d}}</li>\n   *   `,\n   * })\n   * class GiantList {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {\n   *     ref.detach();\n   *     setInterval(() => {\n   *       this.ref.detectChanges();\n   *     }, 5000);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   providers: [DataProvider],\n   *   template: `\n   *     <giant-list><giant-list>\n   *   `,\n   * })\n   * class App {\n   * }\n   * ```\n   */\n  detach() {\n    this._lView[FLAGS] &= ~128 /* LViewFlags.Attached */;\n  }\n  /**\n   * Re-attaches a view to the change detection tree.\n   *\n   * This can be used to re-attach views that were previously detached from the tree\n   * using {@link ChangeDetectorRef#detach}. Views are attached to the tree by default.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example creates a component displaying `live` data. The component will detach\n   * its change detector from the main change detector tree when the component's live property\n   * is set to false.\n   *\n   * ```ts\n   * class DataProvider {\n   *   data = 1;\n   *\n   *   constructor() {\n   *     setInterval(() => {\n   *       this.data = this.data * 2;\n   *     }, 500);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'live-data',\n   *   inputs: ['live'],\n   *   template: 'Data: {{dataProvider.data}}'\n   * })\n   * class LiveData {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}\n   *\n   *   set live(value) {\n   *     if (value) {\n   *       this.ref.reattach();\n   *     } else {\n   *       this.ref.detach();\n   *     }\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app-root',\n   *   providers: [DataProvider],\n   *   template: `\n   *     Live Update: <input type=\"checkbox\" [(ngModel)]=\"live\">\n   *     <live-data [live]=\"live\"><live-data>\n   *   `,\n   * })\n   * class AppComponent {\n   *   live = true;\n   * }\n   * ```\n   */\n  reattach() {\n    updateAncestorTraversalFlagsOnAttach(this._lView);\n    this._lView[FLAGS] |= 128 /* LViewFlags.Attached */;\n  }\n  /**\n   * Checks the view and its children.\n   *\n   * This can also be used in combination with {@link ChangeDetectorRef#detach} to implement\n   * local change detection checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine, the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds.\n   *\n   * We can do that by detaching the component's change detector and doing a local change detection\n   * check every five seconds.\n   *\n   * See {@link ChangeDetectorRef#detach} for more information.\n   */\n  detectChanges() {\n    // Add `RefreshView` flag to ensure this view is refreshed if not already dirty.\n    // `RefreshView` flag is used intentionally over `Dirty` because it gets cleared before\n    // executing any of the actual refresh code while the `Dirty` flag doesn't get cleared\n    // until the end of the refresh. Using `RefreshView` prevents creating a potential difference\n    // in the state of the LViewFlags during template execution.\n    this._lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n    detectChangesInternal(this._lView, this.notifyErrorHandler);\n  }\n  /**\n   * Checks the change detector and its children, and throws if any changes are detected.\n   *\n   * This is used in development mode to verify that running change detection doesn't\n   * introduce other changes.\n   */\n  checkNoChanges() {\n    if (ngDevMode) {\n      checkNoChangesInternal(this._lView, CheckNoChangesMode.OnlyDirtyViews, this.notifyErrorHandler);\n    }\n  }\n  attachToViewContainerRef() {\n    if (this._appRef) {\n      throw new RuntimeError(902 /* RuntimeErrorCode.VIEW_ALREADY_ATTACHED */, ngDevMode && 'This view is already attached directly to the ApplicationRef!');\n    }\n    this._attachedToViewContainer = true;\n  }\n  detachFromAppRef() {\n    this._appRef = null;\n    const isRoot = isRootView(this._lView);\n    const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n    if (declarationContainer !== null && !isRoot) {\n      detachMovedView(declarationContainer, this._lView);\n    }\n    detachViewFromDOM(this._lView[TVIEW], this._lView);\n  }\n  attachToAppRef(appRef) {\n    if (this._attachedToViewContainer) {\n      throw new RuntimeError(902 /* RuntimeErrorCode.VIEW_ALREADY_ATTACHED */, ngDevMode && 'This view is already attached to a ViewContainer!');\n    }\n    this._appRef = appRef;\n    const isRoot = isRootView(this._lView);\n    const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n    if (declarationContainer !== null && !isRoot) {\n      trackMovedView(declarationContainer, this._lView);\n    }\n    updateAncestorTraversalFlagsOnAttach(this._lView);\n  }\n}\n\n/**\n * Represents an embedded template that can be used to instantiate embedded views.\n * To instantiate embedded views based on a template, use the `ViewContainerRef`\n * method `createEmbeddedView()`.\n *\n * Access a `TemplateRef` instance by placing a directive on an `<ng-template>`\n * element (or directive prefixed with `*`). The `TemplateRef` for the embedded view\n * is injected into the constructor of the directive,\n * using the `TemplateRef` token.\n *\n * You can also use a `Query` to find a `TemplateRef` associated with\n * a component or a directive.\n *\n * @see {@link ViewContainerRef}\n *\n * @publicApi\n */\nclass TemplateRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectTemplateRef;\n}\nconst ViewEngineTemplateRef = TemplateRef;\n// TODO(alxhub): combine interface and implementation. Currently this is challenging since something\n// in g3 depends on them being separate.\nconst R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {\n  _declarationLView;\n  _declarationTContainer;\n  elementRef;\n  constructor(_declarationLView, _declarationTContainer, elementRef) {\n    super();\n    this._declarationLView = _declarationLView;\n    this._declarationTContainer = _declarationTContainer;\n    this.elementRef = elementRef;\n  }\n  /**\n   * Returns an `ssrId` associated with a TView, which was used to\n   * create this instance of the `TemplateRef`.\n   *\n   * @internal\n   */\n  get ssrId() {\n    return this._declarationTContainer.tView?.ssrId || null;\n  }\n  createEmbeddedView(context, injector) {\n    return this.createEmbeddedViewImpl(context, injector);\n  }\n  /**\n   * @internal\n   */\n  createEmbeddedViewImpl(context, injector, dehydratedView) {\n    const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, {\n      embeddedViewInjector: injector,\n      dehydratedView\n    });\n    return new ViewRef$1(embeddedLView);\n  }\n};\n/**\n * Creates a TemplateRef given a node.\n *\n * @returns The TemplateRef instance to use\n */\nfunction injectTemplateRef() {\n  return createTemplateRef(getCurrentTNode(), getLView());\n}\n/**\n * Creates a TemplateRef and stores it on the injector.\n *\n * @param hostTNode The node on which a TemplateRef is requested\n * @param hostLView The `LView` to which the node belongs\n * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type\n */\nfunction createTemplateRef(hostTNode, hostLView) {\n  if (hostTNode.type & 4 /* TNodeType.Container */) {\n    ngDevMode && assertDefined(hostTNode.tView, 'TView must be allocated');\n    return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));\n  }\n  return null;\n}\nconst AT_THIS_LOCATION = '<-- AT THIS LOCATION';\n/**\n * Retrieves a user friendly string for a given TNodeType for use in\n * friendly error messages\n *\n * @param tNodeType\n * @returns\n */\nfunction getFriendlyStringFromTNodeType(tNodeType) {\n  switch (tNodeType) {\n    case 4 /* TNodeType.Container */:\n      return 'view container';\n    case 2 /* TNodeType.Element */:\n      return 'element';\n    case 8 /* TNodeType.ElementContainer */:\n      return 'ng-container';\n    case 32 /* TNodeType.Icu */:\n      return 'icu';\n    case 64 /* TNodeType.Placeholder */:\n      return 'i18n';\n    case 16 /* TNodeType.Projection */:\n      return 'projection';\n    case 1 /* TNodeType.Text */:\n      return 'text';\n    case 128 /* TNodeType.LetDeclaration */:\n      return '@let';\n    default:\n      // This should not happen as we cover all possible TNode types above.\n      return '<unknown>';\n  }\n}\n/**\n * Validates that provided nodes match during the hydration process.\n */\nfunction validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {\n  if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {\n    const expectedNode = shortRNodeDescription(nodeType, tagName, null);\n    let header = `During hydration Angular expected ${expectedNode} but `;\n    const hostComponentDef = getDeclarationComponentDef(lView);\n    const componentClassName = hostComponentDef?.type?.name;\n    const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);\n    const expected = `Angular expected this DOM:\\n\\n${expectedDom}\\n\\n`;\n    let actual = '';\n    const componentHostElement = unwrapRNode(lView[HOST]);\n    if (!node) {\n      // No node found during hydration.\n      header += `the node was not found.\\n\\n`;\n      // Since the node is missing, we use the closest node to attach the error to\n      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);\n    } else {\n      const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);\n      header += `found ${actualNode}.\\n\\n`;\n      const actualDom = describeDomFromNode(node);\n      actual = `Actual DOM is:\\n\\n${actualDom}\\n\\n`;\n      // DevTools only report hydration issues on the component level, so we attach extra debug\n      // info to a component host element to make it available to DevTools.\n      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);\n    }\n    const footer = getHydrationErrorFooter(componentClassName);\n    const message = header + expected + actual + getHydrationAttributeNote() + footer;\n    throw new RuntimeError(-500 /* RuntimeErrorCode.HYDRATION_NODE_MISMATCH */, message);\n  }\n}\n/**\n * Validates that a given node has sibling nodes\n */\nfunction validateSiblingNodeExists(node) {\n  validateNodeExists(node);\n  if (!node.nextSibling) {\n    const header = 'During hydration Angular expected more sibling nodes to be present.\\n\\n';\n    const actual = `Actual DOM is:\\n\\n${describeDomFromNode(node)}\\n\\n`;\n    const footer = getHydrationErrorFooter();\n    const message = header + actual + footer;\n    markRNodeAsHavingHydrationMismatch(node, '', actual);\n    throw new RuntimeError(-501 /* RuntimeErrorCode.HYDRATION_MISSING_SIBLINGS */, message);\n  }\n}\n/**\n * Validates that a node exists or throws\n */\nfunction validateNodeExists(node, lView = null, tNode = null) {\n  if (!node) {\n    const header = 'During hydration, Angular expected an element to be present at this location.\\n\\n';\n    let expected = '';\n    let footer = '';\n    if (lView !== null && tNode !== null) {\n      expected = describeExpectedDom(lView, tNode, false);\n      footer = getHydrationErrorFooter();\n      // Since the node is missing, we use the closest node to attach the error to\n      markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, '');\n    }\n    throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, `${header}${expected}\\n\\n${footer}`);\n  }\n}\n/**\n * Builds the hydration error message when a node is not found\n *\n * @param lView the LView where the node exists\n * @param tNode the TNode\n */\nfunction nodeNotFoundError(lView, tNode) {\n  const header = 'During serialization, Angular was unable to find an element in the DOM:\\n\\n';\n  const expected = `${describeExpectedDom(lView, tNode, false)}\\n\\n`;\n  const footer = getHydrationErrorFooter();\n  throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, header + expected + footer);\n}\n/**\n * Builds a hydration error message when a node is not found at a path location\n *\n * @param host the Host Node\n * @param path the path to the node\n */\nfunction nodeNotFoundAtPathError(host, path) {\n  const header = `During hydration Angular was unable to locate a node ` + `using the \"${path}\" path, starting from the ${describeRNode(host)} node.\\n\\n`;\n  const footer = getHydrationErrorFooter();\n  markRNodeAsHavingHydrationMismatch(host);\n  throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, header + footer);\n}\n/**\n * Builds the hydration error message in the case that dom nodes are created outside of\n * the Angular context and are being used as projected nodes\n *\n * @param lView the LView\n * @param tNode the TNode\n * @returns an error\n */\nfunction unsupportedProjectionOfDomNodes(rNode) {\n  const header = 'During serialization, Angular detected DOM nodes ' + 'that were created outside of Angular context and provided as projectable nodes ' + '(likely via `ViewContainerRef.createComponent` or `createComponent` APIs). ' + 'Hydration is not supported for such cases, consider refactoring the code to avoid ' + 'this pattern or using `ngSkipHydration` on the host element of the component.\\n\\n';\n  const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n  const message = header + actual + getHydrationAttributeNote();\n  return new RuntimeError(-503 /* RuntimeErrorCode.UNSUPPORTED_PROJECTION_DOM_NODES */, message);\n}\n/**\n * Builds the hydration error message in the case that ngSkipHydration was used on a\n * node that is not a component host element or host binding\n *\n * @param rNode the HTML Element\n * @returns an error\n */\nfunction invalidSkipHydrationHost(rNode) {\n  const header = 'The `ngSkipHydration` flag is applied on a node ' + \"that doesn't act as a component host. Hydration can be \" + 'skipped only on per-component basis.\\n\\n';\n  const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n  const footer = 'Please move the `ngSkipHydration` attribute to the component host element.\\n\\n';\n  const message = header + actual + footer;\n  return new RuntimeError(-504 /* RuntimeErrorCode.INVALID_SKIP_HYDRATION_HOST */, message);\n}\n// Stringification methods\n/**\n * Stringifies a given TNode's attributes\n *\n * @param tNode a provided TNode\n * @returns string\n */\nfunction stringifyTNodeAttrs(tNode) {\n  const results = [];\n  if (tNode.attrs) {\n    for (let i = 0; i < tNode.attrs.length;) {\n      const attrName = tNode.attrs[i++];\n      // Once we reach the first flag, we know that the list of\n      // attributes is over.\n      if (typeof attrName == 'number') {\n        break;\n      }\n      const attrValue = tNode.attrs[i++];\n      results.push(`${attrName}=\"${shorten(attrValue)}\"`);\n    }\n  }\n  return results.join(' ');\n}\n/**\n * The list of internal attributes that should be filtered out while\n * producing an error message.\n */\nconst internalAttrs = new Set(['ngh', 'ng-version', 'ng-server-context']);\n/**\n * Stringifies an HTML Element's attributes\n *\n * @param rNode an HTML Element\n * @returns string\n */\nfunction stringifyRNodeAttrs(rNode) {\n  const results = [];\n  for (let i = 0; i < rNode.attributes.length; i++) {\n    const attr = rNode.attributes[i];\n    if (internalAttrs.has(attr.name)) continue;\n    results.push(`${attr.name}=\"${shorten(attr.value)}\"`);\n  }\n  return results.join(' ');\n}\n// Methods for Describing the DOM\n/**\n * Converts a tNode to a helpful readable string value for use in error messages\n *\n * @param tNode a given TNode\n * @param innerContent the content of the node\n * @returns string\n */\nfunction describeTNode(tNode, innerContent = '…') {\n  switch (tNode.type) {\n    case 1 /* TNodeType.Text */:\n      const content = tNode.value ? `(${tNode.value})` : '';\n      return `#text${content}`;\n    case 2 /* TNodeType.Element */:\n      const attrs = stringifyTNodeAttrs(tNode);\n      const tag = tNode.value.toLowerCase();\n      return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}</${tag}>`;\n    case 8 /* TNodeType.ElementContainer */:\n      return '<!-- ng-container -->';\n    case 4 /* TNodeType.Container */:\n      return '<!-- container -->';\n    default:\n      const typeAsString = getFriendlyStringFromTNodeType(tNode.type);\n      return `#node(${typeAsString})`;\n  }\n}\n/**\n * Converts an RNode to a helpful readable string value for use in error messages\n *\n * @param rNode a given RNode\n * @param innerContent the content of the node\n * @returns string\n */\nfunction describeRNode(rNode, innerContent = '…') {\n  const node = rNode;\n  switch (node.nodeType) {\n    case Node.ELEMENT_NODE:\n      const tag = node.tagName.toLowerCase();\n      const attrs = stringifyRNodeAttrs(node);\n      return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}</${tag}>`;\n    case Node.TEXT_NODE:\n      const content = node.textContent ? shorten(node.textContent) : '';\n      return `#text${content ? `(${content})` : ''}`;\n    case Node.COMMENT_NODE:\n      return `<!-- ${shorten(node.textContent ?? '')} -->`;\n    default:\n      return `#node(${node.nodeType})`;\n  }\n}\n/**\n * Builds the string containing the expected DOM present given the LView and TNode\n * values for a readable error message\n *\n * @param lView the lView containing the DOM\n * @param tNode the tNode\n * @param isViewContainerAnchor boolean\n * @returns string\n */\nfunction describeExpectedDom(lView, tNode, isViewContainerAnchor) {\n  const spacer = '  ';\n  let content = '';\n  if (tNode.prev) {\n    content += spacer + '…\\n';\n    content += spacer + describeTNode(tNode.prev) + '\\n';\n  } else if (tNode.type && tNode.type & 12 /* TNodeType.AnyContainer */) {\n    content += spacer + '…\\n';\n  }\n  if (isViewContainerAnchor) {\n    content += spacer + describeTNode(tNode) + '\\n';\n    content += spacer + `<!-- container -->  ${AT_THIS_LOCATION}\\n`;\n  } else {\n    content += spacer + describeTNode(tNode) + `  ${AT_THIS_LOCATION}\\n`;\n  }\n  content += spacer + '…\\n';\n  const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;\n  if (parentRNode) {\n    content = describeRNode(parentRNode, '\\n' + content);\n  }\n  return content;\n}\n/**\n * Builds the string containing the DOM present around a given RNode for a\n * readable error message\n *\n * @param node the RNode\n * @returns string\n */\nfunction describeDomFromNode(node) {\n  const spacer = '  ';\n  let content = '';\n  const currentNode = node;\n  if (currentNode.previousSibling) {\n    content += spacer + '…\\n';\n    content += spacer + describeRNode(currentNode.previousSibling) + '\\n';\n  }\n  content += spacer + describeRNode(currentNode) + `  ${AT_THIS_LOCATION}\\n`;\n  if (node.nextSibling) {\n    content += spacer + '…\\n';\n  }\n  if (node.parentNode) {\n    content = describeRNode(currentNode.parentNode, '\\n' + content);\n  }\n  return content;\n}\n/**\n * Shortens the description of a given RNode by its type for readability\n *\n * @param nodeType the type of node\n * @param tagName the node tag name\n * @param textContent the text content in the node\n * @returns string\n */\nfunction shortRNodeDescription(nodeType, tagName, textContent) {\n  switch (nodeType) {\n    case Node.ELEMENT_NODE:\n      return `<${tagName.toLowerCase()}>`;\n    case Node.TEXT_NODE:\n      const content = textContent ? ` (with the \"${shorten(textContent)}\" content)` : '';\n      return `a text node${content}`;\n    case Node.COMMENT_NODE:\n      return 'a comment node';\n    default:\n      return `#node(nodeType=${nodeType})`;\n  }\n}\n/**\n * Builds the footer hydration error message\n *\n * @param componentClassName the name of the component class\n * @returns string\n */\nfunction getHydrationErrorFooter(componentClassName) {\n  const componentInfo = componentClassName ? `the \"${componentClassName}\"` : 'corresponding';\n  return `To fix this problem:\\n` + `  * check ${componentInfo} component for hydration-related issues\\n` + `  * check to see if your template has valid HTML structure\\n` + `  * or skip hydration by adding the \\`ngSkipHydration\\` attribute ` + `to its host node in a template\\n\\n`;\n}\n/**\n * An attribute related note for hydration errors\n */\nfunction getHydrationAttributeNote() {\n  return 'Note: attributes are only displayed to better represent the DOM' + ' but have no effect on hydration mismatches.\\n\\n';\n}\n// Node string utility functions\n/**\n * Strips all newlines out of a given string\n *\n * @param input a string to be cleared of new line characters\n * @returns\n */\nfunction stripNewlines(input) {\n  return input.replace(/\\s+/gm, '');\n}\n/**\n * Reduces a string down to a maximum length of characters with ellipsis for readability\n *\n * @param input a string input\n * @param maxLength a maximum length in characters\n * @returns string\n */\nfunction shorten(input, maxLength = 50) {\n  if (!input) {\n    return '';\n  }\n  input = stripNewlines(input);\n  return input.length > maxLength ? `${input.substring(0, maxLength - 1)}…` : input;\n}\n\n/**\n * Find a node in front of which `currentTNode` should be inserted (takes i18n into account).\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * takes `TNode.insertBeforeIndex` into account.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {\n  const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;\n  const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;\n  if (insertBeforeIndex === null) {\n    return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);\n  } else {\n    ngDevMode && assertIndexInRange(lView, insertBeforeIndex);\n    return unwrapRNode(lView[insertBeforeIndex]);\n  }\n}\n/**\n * Process `TNode.insertBeforeIndex` by adding i18n text nodes.\n *\n * See `TNode.insertBeforeIndex`\n */\nfunction processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {\n  const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;\n  if (Array.isArray(tNodeInsertBeforeIndex)) {\n    // An array indicates that there are i18n nodes that need to be added as children of this\n    // `childRNode`. These i18n nodes were created before this `childRNode` was available and so\n    // only now can be added. The first element of the array is the normal index where we should\n    // insert the `childRNode`. Additional elements are the extra nodes to be added as children of\n    // `childRNode`.\n    ngDevMode && assertDomNode(childRNode);\n    let i18nParent = childRNode;\n    let anchorRNode = null;\n    if (!(childTNode.type & 3 /* TNodeType.AnyRNode */)) {\n      anchorRNode = i18nParent;\n      i18nParent = parentRElement;\n    }\n    if (i18nParent !== null && childTNode.componentOffset === -1) {\n      for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {\n        // No need to `unwrapRNode` because all of the indexes point to i18n text nodes.\n        // see `assertDomNode` below.\n        const i18nChild = lView[tNodeInsertBeforeIndex[i]];\n        nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);\n      }\n    }\n  }\n}\n\n/**\n * Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list\n * `tNode.insertBeforeIndex`.\n *\n * Things to keep in mind:\n * 1. All i18n text nodes are encoded as `TNodeType.Element` and are created eagerly by the\n *    `ɵɵi18nStart` instruction.\n * 2. All `TNodeType.Placeholder` `TNodes` are elements which will be created later by\n *    `ɵɵelementStart` instruction.\n * 3. `ɵɵelementStart` instruction will create `TNode`s in the ascending `TNode.index` order. (So a\n *    smaller index `TNode` is guaranteed to be created before a larger one)\n *\n * We use the above three invariants to determine `TNode.insertBeforeIndex`.\n *\n * In an ideal world `TNode.insertBeforeIndex` would always be `TNode.next.index`. However,\n * this will not work because `TNode.next.index` may be larger than `TNode.index` which means that\n * the next node is not yet created and therefore we can't insert in front of it.\n *\n * Rule1: `TNode.insertBeforeIndex = null` if `TNode.next === null` (Initial condition, as we don't\n *        know if there will be further `TNode`s inserted after.)\n * Rule2: If `previousTNode` is created after the `tNode` being inserted, then\n *        `previousTNode.insertBeforeNode = tNode.index` (So when a new `tNode` is added we check\n *        previous to see if we can update its `insertBeforeTNode`)\n *\n * See `TNode.insertBeforeIndex` for more context.\n *\n * @param previousTNodes A list of previous TNodes so that we can easily traverse `TNode`s in\n *     reverse order. (If `TNode` would have `previous` this would not be necessary.)\n * @param newTNode A TNode to add to the `previousTNodes` list.\n */\nfunction addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {\n  // Start with Rule1\n  ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');\n  previousTNodes.push(newTNode);\n  if (previousTNodes.length > 1) {\n    for (let i = previousTNodes.length - 2; i >= 0; i--) {\n      const existingTNode = previousTNodes[i];\n      // Text nodes are created eagerly and so they don't need their `indexBeforeIndex` updated.\n      // It is safe to ignore them.\n      if (!isI18nText(existingTNode)) {\n        if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {\n          // If it was created before us in time, (and it does not yet have `insertBeforeIndex`)\n          // then add the `insertBeforeIndex`.\n          setInsertBeforeIndex(existingTNode, newTNode.index);\n        }\n      }\n    }\n  }\n}\nfunction isI18nText(tNode) {\n  return !(tNode.type & 64 /* TNodeType.Placeholder */);\n}\nfunction isNewTNodeCreatedBefore(existingTNode, newTNode) {\n  return isI18nText(newTNode) || existingTNode.index > newTNode.index;\n}\nfunction getInsertBeforeIndex(tNode) {\n  const index = tNode.insertBeforeIndex;\n  return Array.isArray(index) ? index[0] : index;\n}\nfunction setInsertBeforeIndex(tNode, value) {\n  const index = tNode.insertBeforeIndex;\n  if (Array.isArray(index)) {\n    // Array is stored if we have to insert child nodes. See `TNode.insertBeforeIndex`\n    index[0] = value;\n  } else {\n    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n    tNode.insertBeforeIndex = value;\n  }\n}\n\n/**\n * Retrieve `TIcu` at a given `index`.\n *\n * The `TIcu` can be stored either directly (if it is nested ICU) OR\n * it is stored inside tho `TIcuContainer` if it is top level ICU.\n *\n * The reason for this is that the top level ICU need a `TNode` so that they are part of the render\n * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is\n * expressed (parent ICU may have selected a case which does not contain it.)\n *\n * @param tView Current `TView`.\n * @param index Index where the value should be read from.\n */\nfunction getTIcu(tView, index) {\n  const value = tView.data[index];\n  if (value === null || typeof value === 'string') return null;\n  if (ngDevMode && !(value.hasOwnProperty('tView') || value.hasOwnProperty('currentCaseLViewIndex'))) {\n    throwError(\"We expect to get 'null'|'TIcu'|'TIcuContainer', but got: \" + value);\n  }\n  // Here the `value.hasOwnProperty('currentCaseLViewIndex')` is a polymorphic read as it can be\n  // either TIcu or TIcuContainerNode. This is not ideal, but we still think it is OK because it\n  // will be just two cases which fits into the browser inline cache (inline cache can take up to\n  // 4)\n  const tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value : value.value;\n  ngDevMode && assertTIcu(tIcu);\n  return tIcu;\n}\n/**\n * Store `TIcu` at a give `index`.\n *\n * The `TIcu` can be stored either directly (if it is nested ICU) OR\n * it is stored inside tho `TIcuContainer` if it is top level ICU.\n *\n * The reason for this is that the top level ICU need a `TNode` so that they are part of the render\n * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is\n * expressed (parent ICU may have selected a case which does not contain it.)\n *\n * @param tView Current `TView`.\n * @param index Index where the value should be stored at in `Tview.data`\n * @param tIcu The TIcu to store.\n */\nfunction setTIcu(tView, index, tIcu) {\n  const tNode = tView.data[index];\n  ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty('tView'), true, \"We expect to get 'null'|'TIcuContainer'\");\n  if (tNode === null) {\n    tView.data[index] = tIcu;\n  } else {\n    ngDevMode && assertTNodeType(tNode, 32 /* TNodeType.Icu */);\n    tNode.value = tIcu;\n  }\n}\n/**\n * Set `TNode.insertBeforeIndex` taking the `Array` into account.\n *\n * See `TNode.insertBeforeIndex`\n */\nfunction setTNodeInsertBeforeIndex(tNode, index) {\n  ngDevMode && assertTNode(tNode);\n  let insertBeforeIndex = tNode.insertBeforeIndex;\n  if (insertBeforeIndex === null) {\n    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n    insertBeforeIndex = tNode.insertBeforeIndex = [null /* may be updated to number later */, index];\n  } else {\n    assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');\n    insertBeforeIndex.push(index);\n  }\n}\n/**\n * Create `TNode.type=TNodeType.Placeholder` node.\n *\n * See `TNodeType.Placeholder` for more information.\n */\nfunction createTNodePlaceholder(tView, previousTNodes, index) {\n  const tNode = createTNodeAtIndex(tView, index, 64 /* TNodeType.Placeholder */, null, null);\n  addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);\n  return tNode;\n}\n/**\n * Returns current ICU case.\n *\n * ICU cases are stored as index into the `TIcu.cases`.\n * At times it is necessary to communicate that the ICU case just switched and that next ICU update\n * should update all bindings regardless of the mask. In such a case the we store negative numbers\n * for cases which have just been switched. This function removes the negative flag.\n */\nfunction getCurrentICUCaseIndex(tIcu, lView) {\n  const currentCase = lView[tIcu.currentCaseLViewIndex];\n  return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;\n}\nfunction getParentFromIcuCreateOpCode(mergedCode) {\n  return mergedCode >>> 17 /* IcuCreateOpCode.SHIFT_PARENT */;\n}\nfunction getRefFromIcuCreateOpCode(mergedCode) {\n  return (mergedCode & 131070 /* IcuCreateOpCode.MASK_REF */) >>> 1 /* IcuCreateOpCode.SHIFT_REF */;\n}\nfunction getInstructionFromIcuCreateOpCode(mergedCode) {\n  return mergedCode & 1 /* IcuCreateOpCode.MASK_INSTRUCTION */;\n}\nfunction icuCreateOpCode(opCode, parentIdx, refIdx) {\n  ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');\n  ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');\n  return opCode | parentIdx << 17 /* IcuCreateOpCode.SHIFT_PARENT */ | refIdx << 1 /* IcuCreateOpCode.SHIFT_REF */;\n}\n// Returns whether the given value corresponds to a root template message,\n// or a sub-template.\nfunction isRootTemplateMessage(subTemplateIndex) {\n  return subTemplateIndex === -1;\n}\nfunction enterIcu(state, tIcu, lView) {\n  state.index = 0;\n  const currentCase = getCurrentICUCaseIndex(tIcu, lView);\n  if (currentCase !== null) {\n    ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);\n    state.removes = tIcu.remove[currentCase];\n  } else {\n    state.removes = EMPTY_ARRAY;\n  }\n}\nfunction icuContainerIteratorNext(state) {\n  if (state.index < state.removes.length) {\n    const removeOpCode = state.removes[state.index++];\n    ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');\n    if (removeOpCode > 0) {\n      const rNode = state.lView[removeOpCode];\n      ngDevMode && assertDomNode(rNode);\n      return rNode;\n    } else {\n      state.stack.push(state.index, state.removes);\n      // ICUs are represented by negative indices\n      const tIcuIndex = ~removeOpCode;\n      const tIcu = state.lView[TVIEW].data[tIcuIndex];\n      ngDevMode && assertTIcu(tIcu);\n      enterIcu(state, tIcu, state.lView);\n      return icuContainerIteratorNext(state);\n    }\n  } else {\n    if (state.stack.length === 0) {\n      return null;\n    } else {\n      state.removes = state.stack.pop();\n      state.index = state.stack.pop();\n      return icuContainerIteratorNext(state);\n    }\n  }\n}\nfunction loadIcuContainerVisitor() {\n  const _state = {\n    stack: [],\n    index: -1\n  };\n  /**\n   * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`\n   * to determine which root belong to the ICU.\n   *\n   * Example of usage.\n   * ```\n   * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);\n   * let rNode: RNode|null;\n   * while(rNode = nextRNode()) {\n   *   console.log(rNode);\n   * }\n   * ```\n   *\n   * @param tIcuContainerNode Current `TIcuContainerNode`\n   * @param lView `LView` where the `RNode`s should be looked up.\n   */\n  function icuContainerIteratorStart(tIcuContainerNode, lView) {\n    _state.lView = lView;\n    while (_state.stack.length) _state.stack.pop();\n    ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);\n    enterIcu(_state, tIcuContainerNode.value, lView);\n    return icuContainerIteratorNext.bind(null, _state);\n  }\n  return icuContainerIteratorStart;\n}\nfunction createIcuIterator(tIcu, lView) {\n  const state = {\n    stack: [],\n    index: -1,\n    lView\n  };\n  ngDevMode && assertTIcu(tIcu);\n  enterIcu(state, tIcu, lView);\n  return icuContainerIteratorNext.bind(null, state);\n}\n\n/**\n * Regexp that extracts a reference node information from the compressed node location.\n * The reference node is represented as either:\n *  - a number which points to an LView slot\n *  - the `b` char which indicates that the lookup should start from the `document.body`\n *  - the `h` char to start lookup from the component host node (`lView[HOST]`)\n */\nconst REF_EXTRACTOR_REGEXP = new RegExp(`^(\\\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);\n/**\n * Helper function that takes a reference node location and a set of navigation steps\n * (from the reference node) to a target node and outputs a string that represents\n * a location.\n *\n * For example, given: referenceNode = 'b' (body) and path = ['firstChild', 'firstChild',\n * 'nextSibling'], the function returns: `bf2n`.\n */\nfunction compressNodeLocation(referenceNode, path) {\n  const result = [referenceNode];\n  for (const segment of path) {\n    const lastIdx = result.length - 1;\n    if (lastIdx > 0 && result[lastIdx - 1] === segment) {\n      // An empty string in a count slot represents 1 occurrence of an instruction.\n      const value = result[lastIdx] || 1;\n      result[lastIdx] = value + 1;\n    } else {\n      // Adding a new segment to the path.\n      // Using an empty string in a counter field to avoid encoding `1`s\n      // into the path, since they are implicit (e.g. `f1n1` vs `fn`), so\n      // it's enough to have a single char in this case.\n      result.push(segment, '');\n    }\n  }\n  return result.join('');\n}\n/**\n * Helper function that reverts the `compressNodeLocation` and transforms a given\n * string into an array where at 0th position there is a reference node info and\n * after that it contains information (in pairs) about a navigation step and the\n * number of repetitions.\n *\n * For example, the path like 'bf2n' will be transformed to:\n * ['b', 'firstChild', 2, 'nextSibling', 1].\n *\n * This information is later consumed by the code that navigates the DOM to find\n * a given node by its location.\n */\nfunction decompressNodeLocation(path) {\n  const matches = path.match(REF_EXTRACTOR_REGEXP);\n  const [_, refNodeId, refNodeName, rest] = matches;\n  // If a reference node is represented by an index, transform it to a number.\n  const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;\n  const steps = [];\n  // Match all segments in a path.\n  for (const [_, step, count] of rest.matchAll(/(f|n)(\\d*)/g)) {\n    const repeat = parseInt(count, 10) || 1;\n    steps.push(step, repeat);\n  }\n  return [ref, ...steps];\n}\n\n/** Whether current TNode is a first node in an <ng-container>. */\nfunction isFirstElementInNgContainer(tNode) {\n  return !tNode.prev && tNode.parent?.type === 8 /* TNodeType.ElementContainer */;\n}\n/** Returns an instruction index (subtracting HEADER_OFFSET). */\nfunction getNoOffsetIndex(tNode) {\n  return tNode.index - HEADER_OFFSET;\n}\n/**\n * Check whether a given node exists, but is disconnected from the DOM.\n */\nfunction isDisconnectedNode(tNode, lView) {\n  return !(tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));\n}\n/**\n * Check whether the given node exists, but is disconnected from the DOM.\n *\n * Note: we leverage the fact that we have this information available in the DOM emulation\n * layer (in Domino) for now. Longer-term solution should not rely on the DOM emulation and\n * only use internal data structures and state to compute this information.\n */\nfunction isDisconnectedRNode(rNode) {\n  return !!rNode && !rNode.isConnected;\n}\n/**\n * Locate a node in an i18n tree that corresponds to a given instruction index.\n *\n * @param hydrationInfo The hydration annotation data\n * @param noOffsetIndex the instruction index\n * @returns an RNode that corresponds to the instruction index\n */\nfunction locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {\n  const i18nNodes = hydrationInfo.i18nNodes;\n  if (i18nNodes) {\n    return i18nNodes.get(noOffsetIndex);\n  }\n  return undefined;\n}\n/**\n * Attempt to locate an RNode by a path, if it exists.\n *\n * @param hydrationInfo The hydration annotation data\n * @param lView the current lView\n * @param noOffsetIndex the instruction index\n * @returns an RNode that corresponds to the instruction index or null if no path exists\n */\nfunction tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {\n  const nodes = hydrationInfo.data[NODES];\n  const path = nodes?.[noOffsetIndex];\n  return path ? locateRNodeByPath(path, lView) : null;\n}\n/**\n * Locate a node in DOM tree that corresponds to a given TNode.\n *\n * @param hydrationInfo The hydration annotation data\n * @param tView the current tView\n * @param lView the current lView\n * @param tNode the current tNode\n * @returns an RNode that represents a given tNode\n */\nfunction locateNextRNode(hydrationInfo, tView, lView, tNode) {\n  const noOffsetIndex = getNoOffsetIndex(tNode);\n  let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n  if (native === undefined) {\n    const nodes = hydrationInfo.data[NODES];\n    if (nodes?.[noOffsetIndex]) {\n      // We know the exact location of the node.\n      native = locateRNodeByPath(nodes[noOffsetIndex], lView);\n    } else if (tView.firstChild === tNode) {\n      // We create a first node in this view, so we use a reference\n      // to the first child in this DOM segment.\n      native = hydrationInfo.firstChild;\n    } else {\n      // Locate a node based on a previous sibling or a parent node.\n      const previousTNodeParent = tNode.prev === null;\n      const previousTNode = tNode.prev ?? tNode.parent;\n      ngDevMode && assertDefined(previousTNode, 'Unexpected state: current TNode does not have a connection ' + 'to the previous node or a parent node.');\n      if (isFirstElementInNgContainer(tNode)) {\n        const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);\n        native = getSegmentHead(hydrationInfo, noOffsetParentIndex);\n      } else {\n        let previousRElement = getNativeByTNode(previousTNode, lView);\n        if (previousTNodeParent) {\n          native = previousRElement.firstChild;\n        } else {\n          // If the previous node is an element, but it also has container info,\n          // this means that we are processing a node like `<div #vcrTarget>`, which is\n          // represented in the DOM as `<div></div>...<!--container-->`.\n          // In this case, there are nodes *after* this element and we need to skip\n          // all of them to reach an element that we are looking for.\n          const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);\n          const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);\n          if (previousTNode.type === 2 /* TNodeType.Element */ && segmentHead) {\n            const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);\n            // `+1` stands for an anchor comment node after all the views in this container.\n            const nodesToSkip = numRootNodesToSkip + 1;\n            // First node after this segment.\n            native = siblingAfter(nodesToSkip, segmentHead);\n          } else {\n            native = previousRElement.nextSibling;\n          }\n        }\n      }\n    }\n  }\n  return native;\n}\n/**\n * Skips over a specified number of nodes and returns the next sibling node after that.\n */\nfunction siblingAfter(skip, from) {\n  let currentNode = from;\n  for (let i = 0; i < skip; i++) {\n    ngDevMode && validateSiblingNodeExists(currentNode);\n    currentNode = currentNode.nextSibling;\n  }\n  return currentNode;\n}\n/**\n * Helper function to produce a string representation of the navigation steps\n * (in terms of `nextSibling` and `firstChild` navigations). Used in error\n * messages in dev mode.\n */\nfunction stringifyNavigationInstructions(instructions) {\n  const container = [];\n  for (let i = 0; i < instructions.length; i += 2) {\n    const step = instructions[i];\n    const repeat = instructions[i + 1];\n    for (let r = 0; r < repeat; r++) {\n      container.push(step === NodeNavigationStep.FirstChild ? 'firstChild' : 'nextSibling');\n    }\n  }\n  return container.join('.');\n}\n/**\n * Helper function that navigates from a starting point node (the `from` node)\n * using provided set of navigation instructions (within `path` argument).\n */\nfunction navigateToNode(from, instructions) {\n  let node = from;\n  for (let i = 0; i < instructions.length; i += 2) {\n    const step = instructions[i];\n    const repeat = instructions[i + 1];\n    for (let r = 0; r < repeat; r++) {\n      if (ngDevMode && !node) {\n        throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n      }\n      switch (step) {\n        case NodeNavigationStep.FirstChild:\n          node = node.firstChild;\n          break;\n        case NodeNavigationStep.NextSibling:\n          node = node.nextSibling;\n          break;\n      }\n    }\n  }\n  if (ngDevMode && !node) {\n    throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n  }\n  return node;\n}\n/**\n * Locates an RNode given a set of navigation instructions (which also contains\n * a starting point node info).\n */\nfunction locateRNodeByPath(path, lView) {\n  const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);\n  let ref;\n  if (referenceNode === REFERENCE_NODE_HOST) {\n    ref = lView[DECLARATION_COMPONENT_VIEW][HOST];\n  } else if (referenceNode === REFERENCE_NODE_BODY) {\n    ref = ɵɵresolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);\n  } else {\n    const parentElementId = Number(referenceNode);\n    ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);\n  }\n  return navigateToNode(ref, navigationInstructions);\n}\n/**\n * Generate a list of DOM navigation operations to get from node `start` to node `finish`.\n *\n * Note: assumes that node `start` occurs before node `finish` in an in-order traversal of the DOM\n * tree. That is, we should be able to get from `start` to `finish` purely by using `.firstChild`\n * and `.nextSibling` operations.\n */\nfunction navigateBetween(start, finish) {\n  if (start === finish) {\n    return [];\n  } else if (start.parentElement == null || finish.parentElement == null) {\n    return null;\n  } else if (start.parentElement === finish.parentElement) {\n    return navigateBetweenSiblings(start, finish);\n  } else {\n    // `finish` is a child of its parent, so the parent will always have a child.\n    const parent = finish.parentElement;\n    const parentPath = navigateBetween(start, parent);\n    const childPath = navigateBetween(parent.firstChild, finish);\n    if (!parentPath || !childPath) return null;\n    return [\n    // First navigate to `finish`'s parent\n    ...parentPath,\n    // Then to its first child.\n    NodeNavigationStep.FirstChild,\n    // And finally from that node to `finish` (maybe a no-op if we're already there).\n    ...childPath];\n  }\n}\n/**\n * Calculates a path between 2 sibling nodes (generates a number of `NextSibling` navigations).\n * Returns `null` if no such path exists between the given nodes.\n */\nfunction navigateBetweenSiblings(start, finish) {\n  const nav = [];\n  let node = null;\n  for (node = start; node != null && node !== finish; node = node.nextSibling) {\n    nav.push(NodeNavigationStep.NextSibling);\n  }\n  // If the `node` becomes `null` or `undefined` at the end, that means that we\n  // didn't find the `end` node, thus return `null` (which would trigger serialization\n  // error to be produced).\n  return node == null ? null : nav;\n}\n/**\n * Calculates a path between 2 nodes in terms of `nextSibling` and `firstChild`\n * navigations:\n * - the `from` node is a known node, used as an starting point for the lookup\n *   (the `fromNodeName` argument is a string representation of the node).\n * - the `to` node is a node that the runtime logic would be looking up,\n *   using the path generated by this function.\n */\nfunction calcPathBetween(from, to, fromNodeName) {\n  const path = navigateBetween(from, to);\n  return path === null ? null : compressNodeLocation(fromNodeName, path);\n}\n/**\n * Invoked at serialization time (on the server) when a set of navigation\n * instructions needs to be generated for a TNode.\n */\nfunction calcPathForNode(tNode, lView, excludedParentNodes) {\n  let parentTNode = tNode.parent;\n  let parentIndex;\n  let parentRNode;\n  let referenceNodeName;\n  // Skip over all parent nodes that are disconnected from the DOM, such nodes\n  // can not be used as anchors.\n  //\n  // This might happen in certain content projection-based use-cases, where\n  // a content of an element is projected and used, when a parent element\n  // itself remains detached from DOM. In this scenario we try to find a parent\n  // element that is attached to DOM and can act as an anchor instead.\n  //\n  // It can also happen that the parent node should be excluded, for example,\n  // because it belongs to an i18n block, which requires paths which aren't\n  // relative to other views in an i18n block.\n  while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {\n    parentTNode = parentTNode.parent;\n  }\n  if (parentTNode === null || !(parentTNode.type & 3 /* TNodeType.AnyRNode */)) {\n    // If there is no parent TNode or a parent TNode does not represent an RNode\n    // (i.e. not a DOM node), use component host element as a reference node.\n    parentIndex = referenceNodeName = REFERENCE_NODE_HOST;\n    parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];\n  } else {\n    // Use parent TNode as a reference node.\n    parentIndex = parentTNode.index;\n    parentRNode = unwrapRNode(lView[parentIndex]);\n    referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);\n  }\n  let rNode = unwrapRNode(lView[tNode.index]);\n  if (tNode.type & (12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */)) {\n    // For <ng-container> nodes, instead of serializing a reference\n    // to the anchor comment node, serialize a location of the first\n    // DOM element. Paired with the container size (serialized as a part\n    // of `ngh.containers`), it should give enough information for runtime\n    // to hydrate nodes in this container.\n    const firstRNode = getFirstNativeNode(lView, tNode);\n    // If container is not empty, use a reference to the first element,\n    // otherwise, rNode would point to an anchor comment node.\n    if (firstRNode) {\n      rNode = firstRNode;\n    }\n  }\n  let path = calcPathBetween(parentRNode, rNode, referenceNodeName);\n  if (path === null && parentRNode !== rNode) {\n    // Searching for a path between elements within a host node failed.\n    // Trying to find a path to an element starting from the `document.body` instead.\n    //\n    // Important note: this type of reference is relatively unstable, since Angular\n    // may not be able to control parts of the page that the runtime logic navigates\n    // through. This is mostly needed to cover \"portals\" use-case (like menus, dialog boxes,\n    // etc), where nodes are content-projected (including direct DOM manipulations) outside\n    // of the host node. The better solution is to provide APIs to work with \"portals\",\n    // at which point this code path would not be needed.\n    const body = parentRNode.ownerDocument.body;\n    path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);\n    if (path === null) {\n      // If the path is still empty, it's likely that this node is detached and\n      // won't be found during hydration.\n      throw nodeNotFoundError(lView, tNode);\n    }\n  }\n  return path;\n}\n/**\n * Retrieves all comments nodes that contain ngh comments referring to a defer block\n */\nfunction gatherDeferBlocksCommentNodes(doc, node) {\n  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n    acceptNode\n  });\n  let currentNode;\n  const nodesByBlockId = new Map();\n  while (currentNode = commentNodesIterator.nextNode()) {\n    const nghPattern = 'ngh=';\n    const content = currentNode?.textContent;\n    const nghIdx = content?.indexOf(nghPattern) ?? -1;\n    if (nghIdx > -1) {\n      const nghValue = content.substring(nghIdx + nghPattern.length).trim();\n      // Make sure the value has an expected format.\n      ngDevMode && assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');\n      nodesByBlockId.set(nghValue, currentNode);\n    }\n  }\n  return nodesByBlockId;\n}\nfunction acceptNode(node) {\n  return node.textContent?.trimStart().startsWith('ngh=') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n}\nlet _isI18nHydrationSupportEnabled = false;\nlet _prepareI18nBlockForHydrationImpl = () => {\n  // noop unless `enablePrepareI18nBlockForHydrationImpl` is invoked.\n};\nfunction setIsI18nHydrationSupportEnabled(enabled) {\n  _isI18nHydrationSupportEnabled = enabled;\n}\nfunction isI18nHydrationSupportEnabled() {\n  return _isI18nHydrationSupportEnabled;\n}\n/**\n * Prepares an i18n block and its children, located at the given\n * view and instruction index, for hydration.\n *\n * @param lView lView with the i18n block\n * @param index index of the i18n block in the lView\n * @param parentTNode TNode of the parent of the i18n block\n * @param subTemplateIndex sub-template index, or -1 for the main template\n */\nfunction prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {\n  _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);\n}\nfunction enablePrepareI18nBlockForHydrationImpl() {\n  _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;\n}\nfunction isI18nHydrationEnabled(injector) {\n  injector = injector ?? inject(Injector);\n  return injector.get(IS_I18N_HYDRATION_ENABLED, false);\n}\n/**\n * Collects, if not already cached, all of the indices in the\n * given TView which are children of an i18n block.\n *\n * Since i18n blocks don't introduce a parent TNode, this is necessary\n * in order to determine which indices in a LView are translated.\n */\nfunction getOrComputeI18nChildren(tView, context) {\n  let i18nChildren = context.i18nChildren.get(tView);\n  if (i18nChildren === undefined) {\n    i18nChildren = collectI18nChildren(tView);\n    context.i18nChildren.set(tView, i18nChildren);\n  }\n  return i18nChildren;\n}\nfunction collectI18nChildren(tView) {\n  const children = new Set();\n  function collectI18nViews(node) {\n    children.add(node.index);\n    switch (node.kind) {\n      case 1 /* I18nNodeKind.ELEMENT */:\n      case 2 /* I18nNodeKind.PLACEHOLDER */:\n        {\n          for (const childNode of node.children) {\n            collectI18nViews(childNode);\n          }\n          break;\n        }\n      case 3 /* I18nNodeKind.ICU */:\n        {\n          for (const caseNodes of node.cases) {\n            for (const caseNode of caseNodes) {\n              collectI18nViews(caseNode);\n            }\n          }\n          break;\n        }\n    }\n  }\n  // Traverse through the AST of each i18n block in the LView,\n  // and collect every instruction index.\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const tI18n = tView.data[i];\n    if (!tI18n || !tI18n.ast) {\n      continue;\n    }\n    for (const node of tI18n.ast) {\n      collectI18nViews(node);\n    }\n  }\n  return children.size === 0 ? null : children;\n}\n/**\n * Attempts to serialize i18n data for an i18n block, located at\n * the given view and instruction index.\n *\n * @param lView lView with the i18n block\n * @param index index of the i18n block in the lView\n * @param context the hydration context\n * @returns the i18n data, or null if there is no relevant data\n */\nfunction trySerializeI18nBlock(lView, index, context) {\n  if (!context.isI18nHydrationEnabled) {\n    return null;\n  }\n  const tView = lView[TVIEW];\n  const tI18n = tView.data[index];\n  if (!tI18n || !tI18n.ast) {\n    return null;\n  }\n  const parentTNode = tView.data[tI18n.parentTNodeIndex];\n  if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {\n    return null;\n  }\n  const serializedI18nBlock = {\n    caseQueue: [],\n    disconnectedNodes: new Set(),\n    disjointNodes: new Set()\n  };\n  serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);\n  return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;\n}\nfunction serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {\n  let prevRNode = null;\n  for (const node of nodes) {\n    const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);\n    if (nextRNode) {\n      if (isDisjointNode(prevRNode, nextRNode)) {\n        serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);\n      }\n      prevRNode = nextRNode;\n    }\n  }\n  return prevRNode;\n}\n/**\n * Helper to determine whether the given nodes are \"disjoint\".\n *\n * The i18n hydration process walks through the DOM and i18n nodes\n * at the same time. It expects the sibling DOM node of the previous\n * i18n node to be the first node of the next i18n node.\n *\n * In cases of content projection, this won't always be the case. So\n * when we detect that, we mark the node as \"disjoint\", ensuring that\n * we will serialize the path to the node. This way, when we hydrate the\n * i18n node, we will be able to find the correct place to start.\n */\nfunction isDisjointNode(prevNode, nextNode) {\n  return prevNode && prevNode.nextSibling !== nextNode;\n}\n/**\n * Process the given i18n node for serialization.\n * Returns the first RNode for the i18n node to begin hydration.\n */\nfunction serializeI18nNode(lView, serializedI18nBlock, context, node) {\n  const maybeRNode = unwrapRNode(lView[node.index]);\n  if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {\n    serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);\n    return null;\n  }\n  const rNode = maybeRNode;\n  switch (node.kind) {\n    case 0 /* I18nNodeKind.TEXT */:\n      {\n        processTextNodeBeforeSerialization(context, rNode);\n        break;\n      }\n    case 1 /* I18nNodeKind.ELEMENT */:\n    case 2 /* I18nNodeKind.PLACEHOLDER */:\n      {\n        serializeI18nBlock(lView, serializedI18nBlock, context, node.children);\n        break;\n      }\n    case 3 /* I18nNodeKind.ICU */:\n      {\n        const currentCase = lView[node.currentCaseLViewIndex];\n        if (currentCase != null) {\n          // i18n uses a negative value to signal a change to a new case, so we\n          // need to invert it to get the proper value.\n          const caseIdx = currentCase < 0 ? ~currentCase : currentCase;\n          serializedI18nBlock.caseQueue.push(caseIdx);\n          serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);\n        }\n        break;\n      }\n  }\n  return getFirstNativeNodeForI18nNode(lView, node);\n}\n/**\n * Helper function to get the first native node to begin hydrating\n * the given i18n node.\n */\nfunction getFirstNativeNodeForI18nNode(lView, node) {\n  const tView = lView[TVIEW];\n  const maybeTNode = tView.data[node.index];\n  if (isTNodeShape(maybeTNode)) {\n    // If the node is backed by an actual TNode, we can simply delegate.\n    return getFirstNativeNode(lView, maybeTNode);\n  } else if (node.kind === 3 /* I18nNodeKind.ICU */) {\n    // A nested ICU container won't have an actual TNode. In that case, we can use\n    // an iterator to find the first child.\n    const icuIterator = createIcuIterator(maybeTNode, lView);\n    let rNode = icuIterator();\n    // If the ICU container has no nodes, then we use the ICU anchor as the node.\n    return rNode ?? unwrapRNode(lView[node.index]);\n  } else {\n    // Otherwise, the node is a text or trivial element in an ICU container,\n    // and we can just use the RNode directly.\n    return unwrapRNode(lView[node.index]) ?? null;\n  }\n}\nfunction setCurrentNode(state, node) {\n  state.currentNode = node;\n}\n/**\n * Marks the current RNode as the hydration root for the given\n * AST node.\n */\nfunction appendI18nNodeToCollection(context, state, astNode) {\n  const noOffsetIndex = astNode.index - HEADER_OFFSET;\n  const {\n    disconnectedNodes\n  } = context;\n  const currentNode = state.currentNode;\n  if (state.isConnected) {\n    context.i18nNodes.set(noOffsetIndex, currentNode);\n    // We expect the node to be connected, so ensure that it\n    // is not in the set, regardless of whether we found it,\n    // so that the downstream error handling can provide the\n    // proper context.\n    disconnectedNodes.delete(noOffsetIndex);\n  } else {\n    disconnectedNodes.add(noOffsetIndex);\n  }\n  return currentNode;\n}\n/**\n * Skip over some sibling nodes during hydration.\n *\n * Note: we use this instead of `siblingAfter` as it's expected that\n * sometimes we might encounter null nodes. In those cases, we want to\n * defer to downstream error handling to provide proper context.\n */\nfunction skipSiblingNodes(state, skip) {\n  let currentNode = state.currentNode;\n  for (let i = 0; i < skip; i++) {\n    if (!currentNode) {\n      break;\n    }\n    currentNode = currentNode?.nextSibling ?? null;\n  }\n  return currentNode;\n}\n/**\n * Fork the given state into a new state for hydrating children.\n */\nfunction forkHydrationState(state, nextNode) {\n  return {\n    currentNode: nextNode,\n    isConnected: state.isConnected\n  };\n}\nfunction prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {\n  const hydrationInfo = lView[HYDRATION];\n  if (!hydrationInfo) {\n    return;\n  }\n  if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {\n    return;\n  }\n  const tView = lView[TVIEW];\n  const tI18n = tView.data[index];\n  ngDevMode && assertDefined(tI18n, 'Expected i18n data to be present in a given TView slot during hydration');\n  function findHydrationRoot() {\n    if (isRootTemplateMessage(subTemplateIndex)) {\n      // This is the root of an i18n block. In this case, our hydration root will\n      // depend on where our parent TNode (i.e. the block with i18n applied) is\n      // in the DOM.\n      ngDevMode && assertDefined(parentTNode, 'Expected parent TNode while hydrating i18n root');\n      const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);\n      // If this i18n block is attached to an <ng-container>, then we want to begin\n      // hydrating directly with the RNode. Otherwise, for a TNode with a physical DOM\n      // element, we want to recurse into the first child and begin there.\n      return parentTNode.type & 8 /* TNodeType.ElementContainer */ ? rootNode : rootNode.firstChild;\n    }\n    // This is a nested template in an i18n block. In this case, the entire view\n    // is translated, and part of a dehydrated view in a container. This means that\n    // we can simply begin hydration with the first dehydrated child.\n    return hydrationInfo?.firstChild;\n  }\n  const currentNode = findHydrationRoot();\n  ngDevMode && assertDefined(currentNode, 'Expected root i18n node during hydration');\n  const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? new Set();\n  const i18nNodes = hydrationInfo.i18nNodes ??= new Map();\n  const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];\n  const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= new Map();\n  collectI18nNodesFromDom({\n    hydrationInfo,\n    lView,\n    i18nNodes,\n    disconnectedNodes,\n    caseQueue,\n    dehydratedIcuData\n  }, {\n    currentNode,\n    isConnected: true\n  }, tI18n.ast);\n  // Nodes from inactive ICU cases should be considered disconnected. We track them above\n  // because they aren't (and shouldn't be) serialized. Since we may mutate or create a\n  // new set, we need to be sure to write the expected value back to the DehydratedView.\n  hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;\n}\nfunction collectI18nNodesFromDom(context, state, nodeOrNodes) {\n  if (Array.isArray(nodeOrNodes)) {\n    let nextState = state;\n    for (const node of nodeOrNodes) {\n      // Whenever a node doesn't directly follow the previous RNode, it\n      // is given a path. We need to resume collecting nodes from that location\n      // until and unless we find another disjoint node.\n      const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);\n      if (targetNode) {\n        nextState = forkHydrationState(state, targetNode);\n      }\n      collectI18nNodesFromDom(context, nextState, node);\n    }\n  } else {\n    if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {\n      // i18n nodes can be considered disconnected if e.g. they were projected.\n      // In that case, we have to make sure to skip over them.\n      return;\n    }\n    switch (nodeOrNodes.kind) {\n      case 0 /* I18nNodeKind.TEXT */:\n        {\n          // Claim a text node for hydration\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n      case 1 /* I18nNodeKind.ELEMENT */:\n        {\n          // Recurse into the current element's children...\n          collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n          // And claim the parent element itself.\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n      case 2 /* I18nNodeKind.PLACEHOLDER */:\n        {\n          const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;\n          const {\n            hydrationInfo\n          } = context;\n          const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);\n          switch (nodeOrNodes.type) {\n            case 0 /* I18nPlaceholderType.ELEMENT */:\n              {\n                // Hydration expects to find the head of the element.\n                const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n                // A TNode for the node may not yet if we're hydrating during the first pass,\n                // so use the serialized data to determine if this is an <ng-container>.\n                if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {\n                  // An <ng-container> doesn't have a physical DOM node, so we need to\n                  // continue hydrating from siblings.\n                  collectI18nNodesFromDom(context, state, nodeOrNodes.children);\n                  // Skip over the anchor element. It will be claimed by the\n                  // downstream container hydration.\n                  const nextNode = skipSiblingNodes(state, 1);\n                  setCurrentNode(state, nextNode);\n                } else {\n                  // Non-container elements represent an actual node in the DOM, so we\n                  // need to continue hydration with the children, and claim the node.\n                  collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n                  setCurrentNode(state, currentNode?.nextSibling ?? null);\n                  // Elements can also be the anchor of a view container, so there may\n                  // be elements after this node that we need to skip.\n                  if (containerSize !== null) {\n                    // `+1` stands for an anchor node after all of the views in the container.\n                    const nextNode = skipSiblingNodes(state, containerSize + 1);\n                    setCurrentNode(state, nextNode);\n                  }\n                }\n                break;\n              }\n            case 1 /* I18nPlaceholderType.SUBTEMPLATE */:\n              {\n                ngDevMode && assertNotEqual(containerSize, null, 'Expected a container size while hydrating i18n subtemplate');\n                // Hydration expects to find the head of the template.\n                appendI18nNodeToCollection(context, state, nodeOrNodes);\n                // Skip over all of the template children, as well as the anchor\n                // node, since the template itself will handle them instead.\n                const nextNode = skipSiblingNodes(state, containerSize + 1);\n                setCurrentNode(state, nextNode);\n                break;\n              }\n          }\n          break;\n        }\n      case 3 /* I18nNodeKind.ICU */:\n        {\n          // If the current node is connected, we need to pop the next case from the\n          // queue, so that the active case is also considered connected.\n          const selectedCase = state.isConnected ? context.caseQueue.shift() : null;\n          const childState = {\n            currentNode: null,\n            isConnected: false\n          };\n          // We traverse through each case, even if it's not active,\n          // so that we correctly populate disconnected nodes.\n          for (let i = 0; i < nodeOrNodes.cases.length; i++) {\n            collectI18nNodesFromDom(context, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);\n          }\n          if (selectedCase !== null) {\n            // ICUs represent a branching state, and the selected case could be different\n            // than what it was on the server. In that case, we need to be able to clean\n            // up the nodes from the original case. To do that, we store the selected case.\n            context.dehydratedIcuData.set(nodeOrNodes.index, {\n              case: selectedCase,\n              node: nodeOrNodes\n            });\n          }\n          // Hydration expects to find the ICU anchor element.\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n    }\n  }\n}\nlet _claimDehydratedIcuCaseImpl = () => {\n  // noop unless `enableClaimDehydratedIcuCaseImpl` is invoked\n};\n/**\n * Mark the case for the ICU node at the given index in the view as claimed,\n * allowing its nodes to be hydrated and not cleaned up.\n */\nfunction claimDehydratedIcuCase(lView, icuIndex, caseIndex) {\n  _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);\n}\nfunction enableClaimDehydratedIcuCaseImpl() {\n  _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;\n}\nfunction claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {\n  const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;\n  if (dehydratedIcuDataMap) {\n    const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);\n    if (dehydratedIcuData?.case === caseIndex) {\n      // If the case we're attempting to claim matches the dehydrated one,\n      // we remove it from the map to mark it as \"claimed.\"\n      dehydratedIcuDataMap.delete(icuIndex);\n    }\n  }\n}\n/**\n * Clean up all i18n hydration data associated with the given view.\n */\nfunction cleanupI18nHydrationData(lView) {\n  const hydrationInfo = lView[HYDRATION];\n  if (hydrationInfo) {\n    const {\n      i18nNodes,\n      dehydratedIcuData: dehydratedIcuDataMap\n    } = hydrationInfo;\n    if (i18nNodes && dehydratedIcuDataMap) {\n      const renderer = lView[RENDERER];\n      for (const dehydratedIcuData of dehydratedIcuDataMap.values()) {\n        cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData);\n      }\n    }\n    hydrationInfo.i18nNodes = undefined;\n    hydrationInfo.dehydratedIcuData = undefined;\n  }\n}\nfunction cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData) {\n  for (const node of dehydratedIcuData.node.cases[dehydratedIcuData.case]) {\n    const rNode = i18nNodes.get(node.index - HEADER_OFFSET);\n    if (rNode) {\n      nativeRemoveNode(renderer, rNode, false);\n    }\n  }\n}\n\n/**\n * Removes all dehydrated views from a given LContainer:\n * both in internal data structure, as well as removing\n * corresponding DOM nodes that belong to that dehydrated view.\n */\nfunction removeDehydratedViews(lContainer) {\n  const views = lContainer[DEHYDRATED_VIEWS] ?? [];\n  const parentLView = lContainer[PARENT];\n  const renderer = parentLView[RENDERER];\n  const retainedViews = [];\n  for (const view of views) {\n    // Do not clean up contents of `@defer` blocks.\n    // The cleanup for this content would happen once a given block\n    // is triggered and hydrated.\n    if (view.data[DEFER_BLOCK_ID] !== undefined) {\n      retainedViews.push(view);\n    } else {\n      removeDehydratedView(view, renderer);\n      ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n    }\n  }\n  // Reset the value to an array to indicate that no\n  // further processing of dehydrated views is needed for\n  // this view container (i.e. do not trigger the lookup process\n  // once again in case a `ViewContainerRef` is created later).\n  lContainer[DEHYDRATED_VIEWS] = retainedViews;\n}\n/**\n * Helper function to remove all nodes from a dehydrated view.\n */\nfunction removeDehydratedView(dehydratedView, renderer) {\n  let nodesRemoved = 0;\n  let currentRNode = dehydratedView.firstChild;\n  if (currentRNode) {\n    const numNodes = dehydratedView.data[NUM_ROOT_NODES];\n    while (nodesRemoved < numNodes) {\n      ngDevMode && validateSiblingNodeExists(currentRNode);\n      const nextSibling = currentRNode.nextSibling;\n      nativeRemoveNode(renderer, currentRNode, false);\n      currentRNode = nextSibling;\n      nodesRemoved++;\n    }\n  }\n}\n/**\n * Walks over all views within this LContainer invokes dehydrated views\n * cleanup function for each one.\n */\nfunction cleanupLContainer(lContainer) {\n  removeDehydratedViews(lContainer);\n  // The host could be an LView if this container is on a component node.\n  // In this case, descend into host LView for further cleanup. See also\n  // LContainer[HOST] docs for additional information.\n  const hostLView = lContainer[HOST];\n  if (isLView(hostLView)) {\n    cleanupLView(hostLView);\n  }\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    cleanupLView(lContainer[i]);\n  }\n}\n/**\n * Walks over `LContainer`s and components registered within\n * this LView and invokes dehydrated views cleanup function for each one.\n */\nfunction cleanupLView(lView) {\n  cleanupI18nHydrationData(lView);\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (isLContainer(lView[i])) {\n      const lContainer = lView[i];\n      cleanupLContainer(lContainer);\n    } else if (isLView(lView[i])) {\n      // This is a component, enter the `cleanupLView` recursively.\n      cleanupLView(lView[i]);\n    }\n  }\n}\n/**\n * Walks over all views registered within the ApplicationRef and removes\n * all dehydrated views from all `LContainer`s along the way.\n */\nfunction cleanupDehydratedViews(appRef) {\n  const viewRefs = appRef._views;\n  for (const viewRef of viewRefs) {\n    const lNode = getLNodeForHydration(viewRef);\n    // An `lView` might be `null` if a `ViewRef` represents\n    // an embedded view (not a component view).\n    if (lNode !== null && lNode[HOST] !== null) {\n      if (isLView(lNode)) {\n        cleanupLView(lNode);\n      } else {\n        // Cleanup in all views within this view container\n        cleanupLContainer(lNode);\n      }\n      ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;\n    }\n  }\n}\n/**\n * post hydration cleanup handling for defer blocks that were incrementally\n * hydrated. This removes all the jsaction attributes, timers, observers,\n * dehydrated views and containers\n */\nfunction cleanupHydratedDeferBlocks(deferBlock, hydratedBlocks, registry, appRef) {\n  if (deferBlock !== null) {\n    registry.cleanup(hydratedBlocks);\n    cleanupLContainer(deferBlock.lContainer);\n    cleanupDehydratedViews(appRef);\n  }\n}\n\n/**\n * Given a current DOM node and a serialized information about the views\n * in a container, walks over the DOM structure, collecting the list of\n * dehydrated views.\n */\nfunction locateDehydratedViewsInContainer(currentRNode, serializedViews) {\n  const dehydratedViews = [];\n  for (const serializedView of serializedViews) {\n    // Repeats a view multiple times as needed, based on the serialized information\n    // (for example, for *ngFor-produced views).\n    for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {\n      const view = {\n        data: serializedView,\n        firstChild: null\n      };\n      if (serializedView[NUM_ROOT_NODES] > 0) {\n        // Keep reference to the first node in this view,\n        // so it can be accessed while invoking template instructions.\n        view.firstChild = currentRNode;\n        // Move over to the next node after this view, which can\n        // either be a first node of the next view or an anchor comment\n        // node after the last view in a container.\n        currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);\n      }\n      dehydratedViews.push(view);\n    }\n  }\n  return [currentRNode, dehydratedViews];\n}\n/**\n * Reference to a function that searches for a matching dehydrated views\n * stored on a given lContainer.\n * Returns `null` by default, when hydration is not enabled.\n */\nlet _findMatchingDehydratedViewImpl = () => null;\n/**\n * Retrieves the next dehydrated view from the LContainer and verifies that\n * it matches a given template id (from the TView that was used to create this\n * instance of a view). If the id doesn't match, that means that we are in an\n * unexpected state and can not complete the reconciliation process. Thus,\n * all dehydrated views from this LContainer are removed (including corresponding\n * DOM nodes) and the rendering is performed as if there were no dehydrated views\n * in this container.\n */\nfunction findMatchingDehydratedViewImpl(lContainer, template) {\n  const views = lContainer[DEHYDRATED_VIEWS];\n  if (!template || views === null || views.length === 0) {\n    return null;\n  }\n  const view = views[0];\n  // Verify whether the first dehydrated view in the container matches\n  // the template id passed to this function (that originated from a TView\n  // that was used to create an instance of an embedded or component views.\n  if (view.data[TEMPLATE_ID] === template) {\n    // If the template id matches - extract the first view and return it.\n    return views.shift();\n  } else {\n    // Otherwise, we are at the state when reconciliation can not be completed,\n    // thus we remove all dehydrated views within this container (remove them\n    // from internal data structures as well as delete associated elements from\n    // the DOM tree).\n    removeDehydratedViews(lContainer);\n    return null;\n  }\n}\nfunction enableFindMatchingDehydratedViewImpl() {\n  _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;\n}\nfunction findMatchingDehydratedView(lContainer, template) {\n  return _findMatchingDehydratedViewImpl(lContainer, template);\n}\n\n/**\n * Represents a component created by a `ComponentFactory`.\n * Provides access to the component instance and related objects,\n * and provides the means of destroying the instance.\n *\n * @publicApi\n */\nclass ComponentRef$1 {}\n/**\n * Base class for a factory that can create a component dynamically.\n * Instantiate a factory for a given type of component with `resolveComponentFactory()`.\n * Use the resulting `ComponentFactory.create()` method to create a component of that type.\n *\n * @publicApi\n *\n * @deprecated Angular no longer requires Component factories. Please use other APIs where\n *     Component class can be used directly.\n */\nclass ComponentFactory$1 {}\nclass _NullComponentFactoryResolver {\n  resolveComponentFactory(component) {\n    throw Error(`No component factory found for ${stringify(component)}.`);\n  }\n}\n/**\n * A simple registry that maps `Components` to generated `ComponentFactory` classes\n * that can be used to create instances of components.\n * Use to obtain the factory for a given component type,\n * then use the factory's `create()` method to create a component of that type.\n *\n * Note: since v13, dynamic component creation via\n * [`ViewContainerRef.createComponent`](api/core/ViewContainerRef#createComponent)\n * does **not** require resolving component factory: component class can be used directly.\n *\n * @publicApi\n *\n * @deprecated Angular no longer requires Component factories. Please use other APIs where\n *     Component class can be used directly.\n */\nclass ComponentFactoryResolver$1 {\n  static NULL = new _NullComponentFactoryResolver();\n}\n\n/**\n * Creates and initializes a custom renderer that implements the `Renderer2` base class.\n *\n * @publicApi\n */\nclass RendererFactory2 {}\n/**\n * Extend this base class to implement custom rendering. By default, Angular\n * renders a template into DOM. You can use custom rendering to intercept\n * rendering calls, or to render to something other than DOM.\n *\n * Create your custom renderer using `RendererFactory2`.\n *\n * Use a custom renderer to bypass Angular's templating and\n * make custom UI changes that can't be expressed declaratively.\n * For example if you need to set a property or an attribute whose name is\n * not statically known, use the `setProperty()` or\n * `setAttribute()` method.\n *\n * @publicApi\n */\nclass Renderer2 {\n  /**\n   * If null or undefined, the view engine won't call it.\n   * This is used as a performance optimization for production mode.\n   */\n  destroyNode = null;\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = () => injectRenderer2();\n}\n/** Injects a Renderer2 for the current component. */\nfunction injectRenderer2() {\n  // We need the Renderer to be based on the component that it's being injected into, however since\n  // DI happens before we've entered its view, `getLView` will return the parent view instead.\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);\n  return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];\n}\n\n/**\n * Sanitizer is used by the views to sanitize potentially dangerous values.\n *\n * @publicApi\n */\nclass Sanitizer {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: Sanitizer,\n    providedIn: 'root',\n    factory: () => null\n  });\n}\nfunction isModuleWithProviders(value) {\n  return value.ngModule !== undefined;\n}\nfunction isNgModule(value) {\n  return !!getNgModuleDef(value);\n}\nfunction isPipe(value) {\n  return !!getPipeDef$1(value);\n}\nfunction isDirective(value) {\n  return !!getDirectiveDef(value);\n}\nfunction isComponent(value) {\n  return !!getComponentDef(value);\n}\nfunction getDependencyTypeForError(type) {\n  if (getComponentDef(type)) return 'component';\n  if (getDirectiveDef(type)) return 'directive';\n  if (getPipeDef$1(type)) return 'pipe';\n  return 'type';\n}\nfunction verifyStandaloneImport(depType, importingType) {\n  if (isForwardRef(depType)) {\n    depType = resolveForwardRef(depType);\n    if (!depType) {\n      throw new Error(`Expected forwardRef function, imported from \"${stringifyForError(importingType)}\", to return a standalone entity or NgModule but got \"${stringifyForError(depType) || depType}\".`);\n    }\n  }\n  if (getNgModuleDef(depType) == null) {\n    const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);\n    if (def != null) {\n      // if a component, directive or pipe is imported make sure that it is standalone\n      if (!def.standalone) {\n        throw new Error(`The \"${stringifyForError(depType)}\" ${getDependencyTypeForError(depType)}, imported from \"${stringifyForError(importingType)}\", is not standalone. Did you forget to add the standalone: true flag?`);\n      }\n    } else {\n      // it can be either a module with provider or an unknown (not annotated) type\n      if (isModuleWithProviders(depType)) {\n        throw new Error(`A module with providers was imported from \"${stringifyForError(importingType)}\". Modules with providers are not supported in standalone components imports.`);\n      } else {\n        throw new Error(`The \"${stringifyForError(depType)}\" type, imported from \"${stringifyForError(importingType)}\", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);\n      }\n    }\n  }\n}\n\n/**\n * Indicates whether to use the runtime dependency tracker for scope calculation in JIT compilation.\n * The value \"false\" means the old code path based on patching scope info into the types will be\n * used.\n *\n * @deprecated For migration purposes only, to be removed soon.\n */\nconst USE_RUNTIME_DEPS_TRACKER_FOR_JIT = true;\n/**\n * An implementation of DepsTrackerApi which will be used for JIT and local compilation.\n */\nclass DepsTracker {\n  ownerNgModule = new Map();\n  ngModulesWithSomeUnresolvedDecls = new Set();\n  ngModulesScopeCache = new Map();\n  standaloneComponentsScopeCache = new Map();\n  /**\n   * Attempts to resolve ng module's forward ref declarations as much as possible and add them to\n   * the `ownerNgModule` map. This method normally should be called after the initial parsing when\n   * all the forward refs are resolved (e.g., when trying to render a component)\n   */\n  resolveNgModulesDecls() {\n    if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {\n      return;\n    }\n    for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {\n      const def = getNgModuleDef(moduleType);\n      if (def?.declarations) {\n        for (const decl of maybeUnwrapFn(def.declarations)) {\n          if (isComponent(decl)) {\n            this.ownerNgModule.set(decl, moduleType);\n          }\n        }\n      }\n    }\n    this.ngModulesWithSomeUnresolvedDecls.clear();\n  }\n  /** @override */\n  getComponentDependencies(type, rawImports) {\n    this.resolveNgModulesDecls();\n    const def = getComponentDef(type);\n    if (def === null) {\n      throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);\n    }\n    if (def.standalone) {\n      const scope = this.getStandaloneComponentScope(type, rawImports);\n      if (scope.compilation.isPoisoned) {\n        return {\n          dependencies: []\n        };\n      }\n      return {\n        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]\n      };\n    } else {\n      if (!this.ownerNgModule.has(type)) {\n        // This component is orphan! No need to handle the error since the component rendering\n        // pipeline (e.g., view_container_ref) will check for this error based on configs.\n        return {\n          dependencies: []\n        };\n      }\n      const scope = this.getNgModuleScope(this.ownerNgModule.get(type));\n      if (scope.compilation.isPoisoned) {\n        return {\n          dependencies: []\n        };\n      }\n      return {\n        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]\n      };\n    }\n  }\n  /**\n   * @override\n   * This implementation does not make use of param scopeInfo since it assumes the scope info is\n   * already added to the type itself through methods like {@link ɵɵsetNgModuleScope}\n   */\n  registerNgModule(type, scopeInfo) {\n    if (!isNgModule(type)) {\n      throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);\n    }\n    // Lazily process the NgModules later when needed.\n    this.ngModulesWithSomeUnresolvedDecls.add(type);\n  }\n  /** @override */\n  clearScopeCacheFor(type) {\n    this.ngModulesScopeCache.delete(type);\n    this.standaloneComponentsScopeCache.delete(type);\n  }\n  /** @override */\n  getNgModuleScope(type) {\n    if (this.ngModulesScopeCache.has(type)) {\n      return this.ngModulesScopeCache.get(type);\n    }\n    const scope = this.computeNgModuleScope(type);\n    this.ngModulesScopeCache.set(type, scope);\n    return scope;\n  }\n  /** Compute NgModule scope afresh. */\n  computeNgModuleScope(type) {\n    const def = getNgModuleDef(type, true);\n    const scope = {\n      exported: {\n        directives: new Set(),\n        pipes: new Set()\n      },\n      compilation: {\n        directives: new Set(),\n        pipes: new Set()\n      }\n    };\n    // Analyzing imports\n    for (const imported of maybeUnwrapFn(def.imports)) {\n      if (isNgModule(imported)) {\n        const importedScope = this.getNgModuleScope(imported);\n        // When this module imports another, the imported module's exported directives and pipes\n        // are added to the compilation scope of this module.\n        addSet(importedScope.exported.directives, scope.compilation.directives);\n        addSet(importedScope.exported.pipes, scope.compilation.pipes);\n      } else if (isStandalone(imported)) {\n        if (isDirective(imported) || isComponent(imported)) {\n          scope.compilation.directives.add(imported);\n        } else if (isPipe(imported)) {\n          scope.compilation.pipes.add(imported);\n        } else {\n          // The standalone thing is neither a component nor a directive nor a pipe ... (what?)\n          throw new RuntimeError(980 /* RuntimeErrorCode.RUNTIME_DEPS_INVALID_IMPORTED_TYPE */, 'The standalone imported type is neither a component nor a directive nor a pipe');\n        }\n      } else {\n        // The import is neither a module nor a module-with-providers nor a standalone thing. This\n        // is going to be an error. So we short circuit.\n        scope.compilation.isPoisoned = true;\n        break;\n      }\n    }\n    // Analyzing declarations\n    if (!scope.compilation.isPoisoned) {\n      for (const decl of maybeUnwrapFn(def.declarations)) {\n        // Cannot declare another NgModule or a standalone thing\n        if (isNgModule(decl) || isStandalone(decl)) {\n          scope.compilation.isPoisoned = true;\n          break;\n        }\n        if (isPipe(decl)) {\n          scope.compilation.pipes.add(decl);\n        } else {\n          // decl is either a directive or a component. The component may not yet have the ɵcmp due\n          // to async compilation.\n          scope.compilation.directives.add(decl);\n        }\n      }\n    }\n    // Analyzing exports\n    for (const exported of maybeUnwrapFn(def.exports)) {\n      if (isNgModule(exported)) {\n        // When this module exports another, the exported module's exported directives and pipes\n        // are added to both the compilation and exported scopes of this module.\n        const exportedScope = this.getNgModuleScope(exported);\n        // Based on the current logic there is no way to have poisoned exported scope. So no need to\n        // check for it.\n        addSet(exportedScope.exported.directives, scope.exported.directives);\n        addSet(exportedScope.exported.pipes, scope.exported.pipes);\n        // Some test toolings which run in JIT mode depend on this behavior that the exported scope\n        // should also be present in the compilation scope, even though AoT does not support this\n        // and it is also in odds with NgModule metadata definitions. Without this some tests in\n        // Google will fail.\n        addSet(exportedScope.exported.directives, scope.compilation.directives);\n        addSet(exportedScope.exported.pipes, scope.compilation.pipes);\n      } else if (isPipe(exported)) {\n        scope.exported.pipes.add(exported);\n      } else {\n        scope.exported.directives.add(exported);\n      }\n    }\n    return scope;\n  }\n  /** @override */\n  getStandaloneComponentScope(type, rawImports) {\n    if (this.standaloneComponentsScopeCache.has(type)) {\n      return this.standaloneComponentsScopeCache.get(type);\n    }\n    const ans = this.computeStandaloneComponentScope(type, rawImports);\n    this.standaloneComponentsScopeCache.set(type, ans);\n    return ans;\n  }\n  computeStandaloneComponentScope(type, rawImports) {\n    const ans = {\n      compilation: {\n        // Standalone components are always able to self-reference.\n        directives: new Set([type]),\n        pipes: new Set(),\n        ngModules: new Set()\n      }\n    };\n    for (const rawImport of flatten(rawImports ?? [])) {\n      const imported = resolveForwardRef(rawImport);\n      try {\n        verifyStandaloneImport(imported, type);\n      } catch (e) {\n        // Short-circuit if an import is not valid\n        ans.compilation.isPoisoned = true;\n        return ans;\n      }\n      if (isNgModule(imported)) {\n        ans.compilation.ngModules.add(imported);\n        const importedScope = this.getNgModuleScope(imported);\n        // Short-circuit if an imported NgModule has corrupted exported scope.\n        if (importedScope.exported.isPoisoned) {\n          ans.compilation.isPoisoned = true;\n          return ans;\n        }\n        addSet(importedScope.exported.directives, ans.compilation.directives);\n        addSet(importedScope.exported.pipes, ans.compilation.pipes);\n      } else if (isPipe(imported)) {\n        ans.compilation.pipes.add(imported);\n      } else if (isDirective(imported) || isComponent(imported)) {\n        ans.compilation.directives.add(imported);\n      } else {\n        // The imported thing is not module/pipe/directive/component, so we error and short-circuit\n        // here\n        ans.compilation.isPoisoned = true;\n        return ans;\n      }\n    }\n    return ans;\n  }\n  /** @override */\n  isOrphanComponent(cmp) {\n    const def = getComponentDef(cmp);\n    if (!def || def.standalone) {\n      return false;\n    }\n    this.resolveNgModulesDecls();\n    return !this.ownerNgModule.has(cmp);\n  }\n}\nfunction addSet(sourceSet, targetSet) {\n  for (const m of sourceSet) {\n    targetSet.add(m);\n  }\n}\n/** The deps tracker to be used in the current Angular app in dev mode. */\nconst depsTracker = new DepsTracker();\nconst TEST_ONLY = {\n  DepsTracker\n};\n\n/**\n * Compute the static styling (class/style) from `TAttributes`.\n *\n * This function should be called during `firstCreatePass` only.\n *\n * @param tNode The `TNode` into which the styling information should be loaded.\n * @param attrs `TAttributes` containing the styling information.\n * @param writeToHost Where should the resulting static styles be written?\n *   - `false` Write to `TNode.stylesWithoutHost` / `TNode.classesWithoutHost`\n *   - `true` Write to `TNode.styles` / `TNode.classes`\n */\nfunction computeStaticStyling(tNode, attrs, writeToHost) {\n  ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');\n  let styles = writeToHost ? tNode.styles : null;\n  let classes = writeToHost ? tNode.classes : null;\n  let mode = 0;\n  if (attrs !== null) {\n    for (let i = 0; i < attrs.length; i++) {\n      const value = attrs[i];\n      if (typeof value === 'number') {\n        mode = value;\n      } else if (mode == 1 /* AttributeMarker.Classes */) {\n        classes = concatStringsWithSpace(classes, value);\n      } else if (mode == 2 /* AttributeMarker.Styles */) {\n        const style = value;\n        const styleValue = attrs[++i];\n        styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');\n      }\n    }\n  }\n  writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;\n  writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;\n}\nclass ComponentFactoryResolver extends ComponentFactoryResolver$1 {\n  ngModule;\n  /**\n   * @param ngModule The NgModuleRef to which all resolved factories are bound.\n   */\n  constructor(ngModule) {\n    super();\n    this.ngModule = ngModule;\n  }\n  resolveComponentFactory(component) {\n    ngDevMode && assertComponentType(component);\n    const componentDef = getComponentDef(component);\n    return new ComponentFactory(componentDef, this.ngModule);\n  }\n}\nfunction toRefArray(map, isInputMap) {\n  const array = [];\n  for (const publicName in map) {\n    if (!map.hasOwnProperty(publicName)) {\n      continue;\n    }\n    const value = map[publicName];\n    if (value === undefined) {\n      continue;\n    }\n    const isArray = Array.isArray(value);\n    const propName = isArray ? value[0] : value;\n    const flags = isArray ? value[1] : InputFlags.None;\n    if (isInputMap) {\n      array.push({\n        propName: propName,\n        templateName: publicName,\n        isSignal: (flags & InputFlags.SignalBased) !== 0\n      });\n    } else {\n      array.push({\n        propName: propName,\n        templateName: publicName\n      });\n    }\n  }\n  return array;\n}\nfunction getNamespace(elementName) {\n  const name = elementName.toLowerCase();\n  return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;\n}\n/**\n * ComponentFactory interface implementation.\n */\nclass ComponentFactory extends ComponentFactory$1 {\n  componentDef;\n  ngModule;\n  selector;\n  componentType;\n  ngContentSelectors;\n  isBoundToModule;\n  get inputs() {\n    const componentDef = this.componentDef;\n    const inputTransforms = componentDef.inputTransforms;\n    const refArray = toRefArray(componentDef.inputs, true);\n    if (inputTransforms !== null) {\n      for (const input of refArray) {\n        if (inputTransforms.hasOwnProperty(input.propName)) {\n          input.transform = inputTransforms[input.propName];\n        }\n      }\n    }\n    return refArray;\n  }\n  get outputs() {\n    return toRefArray(this.componentDef.outputs, false);\n  }\n  /**\n   * @param componentDef The component definition.\n   * @param ngModule The NgModuleRef to which the factory is bound.\n   */\n  constructor(componentDef, ngModule) {\n    super();\n    this.componentDef = componentDef;\n    this.ngModule = ngModule;\n    this.componentType = componentDef.type;\n    this.selector = stringifyCSSSelectorList(componentDef.selectors);\n    this.ngContentSelectors = componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];\n    this.isBoundToModule = !!ngModule;\n  }\n  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // Check if the component is orphan\n      if (ngDevMode && (typeof ngJitMode === 'undefined' || ngJitMode) && this.componentDef.debugInfo?.forbidOrphanRendering) {\n        if (depsTracker.isOrphanComponent(this.componentType)) {\n          throw new RuntimeError(981 /* RuntimeErrorCode.RUNTIME_DEPS_ORPHAN_COMPONENT */, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(this.componentType)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);\n        }\n      }\n      environmentInjector = environmentInjector || this.ngModule;\n      let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;\n      if (realEnvironmentInjector && this.componentDef.getStandaloneInjector !== null) {\n        realEnvironmentInjector = this.componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;\n      }\n      const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;\n      const rendererFactory = rootViewInjector.get(RendererFactory2, null);\n      if (rendererFactory === null) {\n        throw new RuntimeError(407 /* RuntimeErrorCode.RENDERER_NOT_FOUND */, ngDevMode && 'Angular was not able to inject a renderer (RendererFactory2). ' + 'Likely this is due to a broken DI hierarchy. ' + 'Make sure that any injector used to create this component has a correct parent.');\n      }\n      const sanitizer = rootViewInjector.get(Sanitizer, null);\n      const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);\n      const environment = {\n        rendererFactory,\n        sanitizer,\n        changeDetectionScheduler\n      };\n      const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);\n      // Determine a tag name used for creating host elements when this component is created\n      // dynamically. Default to 'div' if this component did not specify any tag name in its\n      // selector.\n      const elementName = this.componentDef.selectors[0][0] || 'div';\n      const hostRNode = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) : createElementNode(hostRenderer, elementName, getNamespace(elementName));\n      let rootFlags = 512 /* LViewFlags.IsRoot */;\n      if (this.componentDef.signals) {\n        rootFlags |= 4096 /* LViewFlags.SignalView */;\n      } else if (!this.componentDef.onPush) {\n        rootFlags |= 16 /* LViewFlags.CheckAlways */;\n      }\n      let hydrationInfo = null;\n      if (hostRNode !== null) {\n        hydrationInfo = retrieveHydrationInfo(hostRNode, rootViewInjector, true /* isRootView */);\n      }\n      // Create the root view. Uses empty TView and ContentTemplate.\n      const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);\n      const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);\n      // rootView is the parent when bootstrapping\n      // TODO(misko): it looks like we are entering view here but we don't really need to as\n      // `renderView` does that. However as the code is written it is needed because\n      // `createRootComponentView` and `createRootComponent` both read global state. Fixing those\n      // issues would allow us to drop this.\n      enterView(rootLView);\n      let component;\n      let tElementNode;\n      let componentView = null;\n      try {\n        const rootComponentDef = this.componentDef;\n        let rootDirectives;\n        let hostDirectiveDefs = null;\n        if (rootComponentDef.findHostDirectiveDefs) {\n          rootDirectives = [];\n          hostDirectiveDefs = new Map();\n          rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);\n          rootDirectives.push(rootComponentDef);\n          ngDevMode && assertNoDuplicateDirectives(rootDirectives);\n        } else {\n          rootDirectives = [rootComponentDef];\n        }\n        const hostTNode = createRootComponentTNode(rootLView, hostRNode);\n        componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment, hostRenderer);\n        tElementNode = getTNode(rootTView, HEADER_OFFSET);\n        // TODO(crisbeto): in practice `hostRNode` should always be defined, but there are some\n        // tests where the renderer is mocked out and `undefined` is returned. We should update the\n        // tests so that this check can be removed.\n        if (hostRNode) {\n          setRootNodeAttributes(hostRenderer, rootComponentDef, hostRNode, rootSelectorOrNode);\n        }\n        if (projectableNodes !== undefined) {\n          projectNodes(tElementNode, this.ngContentSelectors, projectableNodes);\n        }\n        // TODO: should LifecycleHooksFeature and other host features be generated by the compiler\n        // and executed here? Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref\n        component = createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, [LifecycleHooksFeature]);\n        renderView(rootTView, rootLView, null);\n      } catch (e) {\n        // Stop tracking the views if creation failed since\n        // the consumer won't have a way to dereference them.\n        if (componentView !== null) {\n          unregisterLView(componentView);\n        }\n        unregisterLView(rootLView);\n        throw e;\n      } finally {\n        leaveView();\n      }\n      return new ComponentRef(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Represents an instance of a Component created via a {@link ComponentFactory}.\n *\n * `ComponentRef` provides access to the Component Instance as well other objects related to this\n * Component Instance and allows you to destroy the Component Instance via the {@link #destroy}\n * method.\n *\n */\nclass ComponentRef extends ComponentRef$1 {\n  location;\n  _rootLView;\n  _tNode;\n  instance;\n  hostView;\n  changeDetectorRef;\n  componentType;\n  previousInputValues = null;\n  constructor(componentType, instance, location, _rootLView, _tNode) {\n    super();\n    this.location = location;\n    this._rootLView = _rootLView;\n    this._tNode = _tNode;\n    this.instance = instance;\n    this.hostView = this.changeDetectorRef = new ViewRef$1(_rootLView, undefined /* _cdRefInjectingView */, false /* notifyErrorHandler */);\n    this.componentType = componentType;\n  }\n  setInput(name, value) {\n    const inputData = this._tNode.inputs;\n    let dataValue;\n    if (inputData !== null && (dataValue = inputData[name])) {\n      this.previousInputValues ??= new Map();\n      // Do not set the input if it is the same as the last value\n      // This behavior matches `bindingUpdated` when binding inputs in templates.\n      if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {\n        return;\n      }\n      const lView = this._rootLView;\n      setInputsForProperty(lView[TVIEW], lView, dataValue, name, value);\n      this.previousInputValues.set(name, value);\n      const childComponentLView = getComponentLViewByIndex(this._tNode.index, lView);\n      markViewDirty(childComponentLView, 1 /* NotificationSource.SetInput */);\n    } else {\n      if (ngDevMode) {\n        const cmpNameForError = stringifyForError(this.componentType);\n        let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;\n        message += `Make sure that the '${name}' property is annotated with @Input() or a mapped @Input('${name}') exists.`;\n        reportUnknownPropertyError(message);\n      }\n    }\n  }\n  get injector() {\n    return new NodeInjector(this._tNode, this._rootLView);\n  }\n  destroy() {\n    this.hostView.destroy();\n  }\n  onDestroy(callback) {\n    this.hostView.onDestroy(callback);\n  }\n}\n/** Creates a TNode that can be used to instantiate a root component. */\nfunction createRootComponentTNode(lView, rNode) {\n  const tView = lView[TVIEW];\n  const index = HEADER_OFFSET;\n  ngDevMode && assertIndexInRange(lView, index);\n  lView[index] = rNode;\n  // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at\n  // the same time we want to communicate the debug `TNode` that this is a special `TNode`\n  // representing a host element.\n  return getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, '#host', null);\n}\n/**\n * Creates the root component view and the root component node.\n *\n * @param hostRNode Render host element.\n * @param rootComponentDef ComponentDef\n * @param rootView The parent view where the host node is stored\n * @param rendererFactory Factory to be used for creating child renderers.\n * @param hostRenderer The current renderer\n * @param sanitizer The sanitizer, if provided\n *\n * @returns Component view created\n */\nfunction createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment, hostRenderer) {\n  const tView = rootView[TVIEW];\n  applyRootComponentStyling(rootDirectives, tNode, hostRNode, hostRenderer);\n  // Hydration info is on the host element and needs to be retrieved\n  // and passed to the component LView.\n  let hydrationInfo = null;\n  if (hostRNode !== null) {\n    hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);\n  }\n  const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);\n  const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);\n  if (tView.firstCreatePass) {\n    markAsComponentHost(tView, tNode, rootDirectives.length - 1);\n  }\n  addToEndOfViewTree(rootView, componentView);\n  // Store component view at node index, with node as the HOST\n  return rootView[tNode.index] = componentView;\n}\n/** Sets up the styling information on a root component. */\nfunction applyRootComponentStyling(rootDirectives, tNode, rNode, hostRenderer) {\n  for (const def of rootDirectives) {\n    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n  }\n  if (tNode.mergedAttrs !== null) {\n    computeStaticStyling(tNode, tNode.mergedAttrs, true);\n    if (rNode !== null) {\n      setupStaticAttributes(hostRenderer, rNode, tNode);\n    }\n  }\n}\n/**\n * Creates a root component and sets it up with features and host bindings.Shared by\n * renderComponent() and ViewContainerRef.createComponent().\n */\nfunction createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {\n  const rootTNode = getCurrentTNode();\n  ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');\n  const tView = rootLView[TVIEW];\n  const native = getNativeByTNode(rootTNode, rootLView);\n  initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);\n  for (let i = 0; i < rootDirectives.length; i++) {\n    const directiveIndex = rootTNode.directiveStart + i;\n    const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);\n    attachPatchData(directiveInstance, rootLView);\n  }\n  invokeDirectivesHostBindings(tView, rootLView, rootTNode);\n  if (native) {\n    attachPatchData(native, rootLView);\n  }\n  // We're guaranteed for the `componentOffset` to be positive here\n  // since a root component always matches a component def.\n  ngDevMode && assertGreaterThan(rootTNode.componentOffset, -1, 'componentOffset must be great than -1');\n  const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);\n  componentView[CONTEXT] = rootLView[CONTEXT] = component;\n  if (hostFeatures !== null) {\n    for (const feature of hostFeatures) {\n      feature(component, rootComponentDef);\n    }\n  }\n  // We want to generate an empty QueryList for root content queries for backwards\n  // compatibility with ViewEngine.\n  executeContentQueries(tView, rootTNode, rootLView);\n  return component;\n}\n/** Sets the static attributes on a root component. */\nfunction setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {\n  if (rootSelectorOrNode) {\n    // The placeholder will be replaced with the actual version at build time.\n    setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.0.5']);\n  } else {\n    // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`\n    // is not defined), also apply attributes and classes extracted from component selector.\n    // Extract attributes and classes from the first selector only to match VE behavior.\n    const {\n      attrs,\n      classes\n    } = extractAttrsAndClassesFromSelector(componentDef.selectors[0]);\n    if (attrs) {\n      setUpAttributes(hostRenderer, hostRNode, attrs);\n    }\n    if (classes && classes.length > 0) {\n      writeDirectClass(hostRenderer, hostRNode, classes.join(' '));\n    }\n  }\n}\n/** Projects the `projectableNodes` that were specified when creating a root component. */\nfunction projectNodes(tNode, ngContentSelectors, projectableNodes) {\n  const projection = tNode.projection = [];\n  for (let i = 0; i < ngContentSelectors.length; i++) {\n    const nodesforSlot = projectableNodes[i];\n    // Projectable nodes can be passed as array of arrays or an array of iterables (ngUpgrade\n    // case). Here we do normalize passed data structure to be an array of arrays to avoid\n    // complex checks down the line.\n    // We also normalize the length of the passed in projectable nodes (to match the number of\n    // <ng-container> slots defined by a component).\n    projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);\n  }\n}\n/**\n * Used to enable lifecycle hooks on the root component.\n *\n * Include this feature when calling `renderComponent` if the root component\n * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't\n * be called properly.\n *\n * Example:\n *\n * ```ts\n * renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});\n * ```\n */\nfunction LifecycleHooksFeature() {\n  const tNode = getCurrentTNode();\n  ngDevMode && assertDefined(tNode, 'TNode is required');\n  registerPostOrderHooks(getLView()[TVIEW], tNode);\n}\n\n/**\n * Represents a container where one or more views can be attached to a component.\n *\n * Can contain *host views* (created by instantiating a\n * component with the `createComponent()` method), and *embedded views*\n * (created by instantiating a `TemplateRef` with the `createEmbeddedView()` method).\n *\n * A view container instance can contain other view containers,\n * creating a view hierarchy.\n *\n * @usageNotes\n *\n * The example below demonstrates how the `createComponent` function can be used\n * to create an instance of a ComponentRef dynamically and attach it to an ApplicationRef,\n * so that it gets included into change detection cycles.\n *\n * Note: the example uses standalone components, but the function can also be used for\n * non-standalone components (declared in an NgModule) as well.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   selector: 'dynamic',\n *   template: `<span>This is a content of a dynamic component.</span>`,\n * })\n * class DynamicComponent {\n *   vcr = inject(ViewContainerRef);\n * }\n *\n * @Component({\n *   standalone: true,\n *   selector: 'app',\n *   template: `<main>Hi! This is the main content.</main>`,\n * })\n * class AppComponent {\n *   vcr = inject(ViewContainerRef);\n *\n *   ngAfterViewInit() {\n *     const compRef = this.vcr.createComponent(DynamicComponent);\n *     compRef.changeDetectorRef.detectChanges();\n *   }\n * }\n * ```\n *\n * @see {@link ComponentRef}\n * @see {@link EmbeddedViewRef}\n *\n * @publicApi\n */\nclass ViewContainerRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectViewContainerRef;\n}\n/**\n * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef\n * already exists, retrieves the existing ViewContainerRef.\n *\n * @returns The ViewContainerRef instance to use\n */\nfunction injectViewContainerRef() {\n  const previousTNode = getCurrentTNode();\n  return createContainerRef(previousTNode, getLView());\n}\nconst VE_ViewContainerRef = ViewContainerRef;\n// TODO(alxhub): cleaning up this indirection triggers a subtle bug in Closure in g3. Once the fix\n// for that lands, this can be cleaned up.\nconst R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {\n  _lContainer;\n  _hostTNode;\n  _hostLView;\n  constructor(_lContainer, _hostTNode, _hostLView) {\n    super();\n    this._lContainer = _lContainer;\n    this._hostTNode = _hostTNode;\n    this._hostLView = _hostLView;\n  }\n  get element() {\n    return createElementRef(this._hostTNode, this._hostLView);\n  }\n  get injector() {\n    return new NodeInjector(this._hostTNode, this._hostLView);\n  }\n  /** @deprecated No replacement */\n  get parentInjector() {\n    const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);\n    if (hasParentInjector(parentLocation)) {\n      const parentView = getParentInjectorView(parentLocation, this._hostLView);\n      const injectorIndex = getParentInjectorIndex(parentLocation);\n      ngDevMode && assertNodeInjector(parentView, injectorIndex);\n      const parentTNode = parentView[TVIEW].data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n      return new NodeInjector(parentTNode, parentView);\n    } else {\n      return new NodeInjector(null, this._hostLView);\n    }\n  }\n  clear() {\n    while (this.length > 0) {\n      this.remove(this.length - 1);\n    }\n  }\n  get(index) {\n    const viewRefs = getViewRefs(this._lContainer);\n    return viewRefs !== null && viewRefs[index] || null;\n  }\n  get length() {\n    return this._lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n  createEmbeddedView(templateRef, context, indexOrOptions) {\n    let index;\n    let injector;\n    if (typeof indexOrOptions === 'number') {\n      index = indexOrOptions;\n    } else if (indexOrOptions != null) {\n      index = indexOrOptions.index;\n      injector = indexOrOptions.injector;\n    }\n    const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);\n    const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, dehydratedView);\n    this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n    return viewRef;\n  }\n  createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {\n    const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);\n    let index;\n    // This function supports 2 signatures and we need to handle options correctly for both:\n    //   1. When first argument is a Component type. This signature also requires extra\n    //      options to be provided as object (more ergonomic option).\n    //   2. First argument is a Component factory. In this case extra options are represented as\n    //      positional arguments. This signature is less ergonomic and will be deprecated.\n    if (isComponentFactory) {\n      if (ngDevMode) {\n        assertEqual(typeof indexOrOptions !== 'object', true, 'It looks like Component factory was provided as the first argument ' + 'and an options object as the second argument. This combination of arguments ' + 'is incompatible. You can either change the first argument to provide Component ' + 'type or change the second argument to be a number (representing an index at ' + \"which to insert the new component's host view into this container)\");\n      }\n      index = indexOrOptions;\n    } else {\n      if (ngDevMode) {\n        assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. ` + `Please check whether provided class has @Component decorator.`);\n        assertEqual(typeof indexOrOptions !== 'number', true, 'It looks like Component type was provided as the first argument ' + \"and a number (representing an index at which to insert the new component's \" + 'host view into this container as the second argument. This combination of arguments ' + 'is incompatible. Please use an object as the second argument instead.');\n      }\n      const options = indexOrOptions || {};\n      if (ngDevMode && options.environmentInjector && options.ngModuleRef) {\n        throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);\n      }\n      index = options.index;\n      injector = options.injector;\n      projectableNodes = options.projectableNodes;\n      environmentInjector = options.environmentInjector || options.ngModuleRef;\n    }\n    const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));\n    const contextInjector = injector || this.parentInjector;\n    // If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.\n    if (!environmentInjector && componentFactory.ngModule == null) {\n      // For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that\n      // an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an\n      // `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based\n      // use-cases. For the `ComponentFactory` case we preserve backwards-compatibility and try\n      // using a provided injector first, then fall back to the parent injector of this\n      // `ViewContainerRef` instance.\n      //\n      // For the factory-less case, it's critical to establish a connection with the module\n      // injector tree (by retrieving an instance of an `NgModuleRef` and accessing its injector),\n      // so that a component can use DI tokens provided in MgModules. For this reason, we can not\n      // rely on the provided injector, since it might be detached from the DI tree (for example, if\n      // it was created via `Injector.create` without specifying a parent injector, or if an\n      // injector is retrieved from an `NgModuleRef` created via `createNgModule` using an\n      // NgModule outside of a module tree). Instead, we always use `ViewContainerRef`'s parent\n      // injector, which is normally connected to the DI tree, which includes module injector\n      // subtree.\n      const _injector = isComponentFactory ? contextInjector : this.parentInjector;\n      // DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||\n      // undefined` expression which seems to cause internal google apps to fail. This is documented\n      // in the following internal bug issue: go/b/142967802\n      const result = _injector.get(EnvironmentInjector, null);\n      if (result) {\n        environmentInjector = result;\n      }\n    }\n    const componentDef = getComponentDef(componentFactory.componentType ?? {});\n    const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);\n    const rNode = dehydratedView?.firstChild ?? null;\n    const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector);\n    this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n    return componentRef;\n  }\n  insert(viewRef, index) {\n    return this.insertImpl(viewRef, index, true);\n  }\n  insertImpl(viewRef, index, addToDOM) {\n    const lView = viewRef._lView;\n    if (ngDevMode && viewRef.destroyed) {\n      throw new Error('Cannot insert a destroyed View in a ViewContainer!');\n    }\n    if (viewAttachedToContainer(lView)) {\n      // If view is already attached, detach it first so we clean up references appropriately.\n      const prevIdx = this.indexOf(viewRef);\n      // A view might be attached either to this or a different container. The `prevIdx` for\n      // those cases will be:\n      // equal to -1 for views attached to this ViewContainerRef\n      // >= 0 for views attached to a different ViewContainerRef\n      if (prevIdx !== -1) {\n        this.detach(prevIdx);\n      } else {\n        const prevLContainer = lView[PARENT];\n        ngDevMode && assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.');\n        // We need to re-create a R3ViewContainerRef instance since those are not stored on\n        // LView (nor anywhere else).\n        const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);\n        prevVCRef.detach(prevVCRef.indexOf(viewRef));\n      }\n    }\n    // Logical operation of adding `LView` to `LContainer`\n    const adjustedIdx = this._adjustIndex(index);\n    const lContainer = this._lContainer;\n    addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);\n    viewRef.attachToViewContainerRef();\n    addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);\n    return viewRef;\n  }\n  move(viewRef, newIndex) {\n    if (ngDevMode && viewRef.destroyed) {\n      throw new Error('Cannot move a destroyed View in a ViewContainer!');\n    }\n    return this.insert(viewRef, newIndex);\n  }\n  indexOf(viewRef) {\n    const viewRefsArr = getViewRefs(this._lContainer);\n    return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;\n  }\n  remove(index) {\n    const adjustedIdx = this._adjustIndex(index, -1);\n    const detachedView = detachView(this._lContainer, adjustedIdx);\n    if (detachedView) {\n      // Before destroying the view, remove it from the container's array of `ViewRef`s.\n      // This ensures the view container length is updated before calling\n      // `destroyLView`, which could recursively call view container methods that\n      // rely on an accurate container length.\n      // (e.g. a method on this view container being called by a child directive's OnDestroy\n      // lifecycle hook)\n      removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);\n      destroyLView(detachedView[TVIEW], detachedView);\n    }\n  }\n  detach(index) {\n    const adjustedIdx = this._adjustIndex(index, -1);\n    const view = detachView(this._lContainer, adjustedIdx);\n    const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;\n    return wasDetached ? new ViewRef$1(view) : null;\n  }\n  _adjustIndex(index, shift = 0) {\n    if (index == null) {\n      return this.length + shift;\n    }\n    if (ngDevMode) {\n      assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);\n      // +1 because it's legal to insert at the end.\n      assertLessThan(index, this.length + 1 + shift, 'index');\n    }\n    return index;\n  }\n};\nfunction getViewRefs(lContainer) {\n  return lContainer[VIEW_REFS];\n}\nfunction getOrCreateViewRefs(lContainer) {\n  return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);\n}\n/**\n * Creates a ViewContainerRef and stores it on the injector.\n *\n * @param hostTNode The node that is requesting a ViewContainerRef\n * @param hostLView The view to which the node belongs\n * @returns The ViewContainerRef instance to use\n */\nfunction createContainerRef(hostTNode, hostLView) {\n  ngDevMode && assertTNodeType(hostTNode, 12 /* TNodeType.AnyContainer */ | 3 /* TNodeType.AnyRNode */);\n  let lContainer;\n  const slotValue = hostLView[hostTNode.index];\n  if (isLContainer(slotValue)) {\n    // If the host is a container, we don't need to create a new LContainer\n    lContainer = slotValue;\n  } else {\n    // An LContainer anchor can not be `null`, but we set it here temporarily\n    // and update to the actual value later in this function (see\n    // `_locateOrCreateAnchorNode`).\n    lContainer = createLContainer(slotValue, hostLView, null, hostTNode);\n    hostLView[hostTNode.index] = lContainer;\n    addToEndOfViewTree(hostLView, lContainer);\n  }\n  _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n  return new R3ViewContainerRef(lContainer, hostTNode, hostLView);\n}\n/**\n * Creates and inserts a comment node that acts as an anchor for a view container.\n *\n * If the host is a regular element, we have to insert a comment node manually which will\n * be used as an anchor when inserting elements. In this specific case we use low-level DOM\n * manipulation to insert it.\n */\nfunction insertAnchorNode(hostLView, hostTNode) {\n  const renderer = hostLView[RENDERER];\n  ngDevMode && ngDevMode.rendererCreateComment++;\n  const commentNode = renderer.createComment(ngDevMode ? 'container' : '');\n  const hostNative = getNativeByTNode(hostTNode, hostLView);\n  const parentOfHostNative = nativeParentNode(renderer, hostNative);\n  nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);\n  return commentNode;\n}\nlet _locateOrCreateAnchorNode = createAnchorNode;\nlet _populateDehydratedViewsInLContainer = () => false; // noop by default\n/**\n * Looks up dehydrated views that belong to a given LContainer and populates\n * this information into the `LContainer[DEHYDRATED_VIEWS]` slot. When running\n * in client-only mode, this function is a noop.\n *\n * @param lContainer LContainer that should be populated.\n * @param tNode Corresponding TNode.\n * @param hostLView LView that hosts LContainer.\n * @returns a boolean flag that indicates whether a populating operation\n *   was successful. The operation might be unsuccessful in case is has completed\n *   previously, we are rendering in client-only mode or this content is located\n *   in a skip hydration section.\n */\nfunction populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {\n  return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);\n}\n/**\n * Regular creation mode: an anchor is created and\n * assigned to the `lContainer[NATIVE]` slot.\n */\nfunction createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n  // We already have a native element (anchor) set, return.\n  if (lContainer[NATIVE]) return;\n  let commentNode;\n  // If the host is an element container, the native host element is guaranteed to be a\n  // comment and we can reuse that comment as anchor element for the new LContainer.\n  // The comment node in question is already part of the DOM structure so we don't need to append\n  // it again.\n  if (hostTNode.type & 8 /* TNodeType.ElementContainer */) {\n    commentNode = unwrapRNode(slotValue);\n  } else {\n    commentNode = insertAnchorNode(hostLView, hostTNode);\n  }\n  lContainer[NATIVE] = commentNode;\n}\n/**\n * Hydration logic that looks up all dehydrated views in this container\n * and puts them into `lContainer[DEHYDRATED_VIEWS]` slot.\n *\n * @returns a boolean flag that indicates whether a populating operation\n *   was successful. The operation might be unsuccessful in case is has completed\n *   previously, we are rendering in client-only mode or this content is located\n *   in a skip hydration section.\n */\nfunction populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {\n  // We already have a native element (anchor) set and the process\n  // of finding dehydrated views happened (so the `lContainer[DEHYDRATED_VIEWS]`\n  // is not null), exit early.\n  if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {\n    return true;\n  }\n  const hydrationInfo = hostLView[HYDRATION];\n  const noOffsetIndex = tNode.index - HEADER_OFFSET;\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return false;\n  }\n  // Hydration mode, looking up an anchor node and dehydrated views in DOM.\n  const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);\n  const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];\n  ngDevMode && assertDefined(serializedViews, 'Unexpected state: no hydration info available for a given TNode, ' + 'which represents a view container.');\n  const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);\n  if (ngDevMode) {\n    validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);\n    // Do not throw in case this node is already claimed (thus `false` as a second\n    // argument). If this container is created based on an `<ng-template>`, the comment\n    // node would be already claimed from the `template` instruction. If an element acts\n    // as an anchor (e.g. <div #vcRef>), a separate comment node would be created/located,\n    // so we need to claim it here.\n    markRNodeAsClaimedByHydration(commentNode, false);\n  }\n  lContainer[NATIVE] = commentNode;\n  lContainer[DEHYDRATED_VIEWS] = dehydratedViews;\n  return true;\n}\nfunction locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n  if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {\n    // Populating dehydrated views operation returned `false`, which indicates\n    // that the logic was running in client-only mode, this an anchor comment\n    // node should be created for this container.\n    createAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n  }\n}\nfunction enableLocateOrCreateContainerRefImpl() {\n  _locateOrCreateAnchorNode = locateOrCreateAnchorNode;\n  _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;\n}\nclass LQuery_ {\n  queryList;\n  matches = null;\n  constructor(queryList) {\n    this.queryList = queryList;\n  }\n  clone() {\n    return new LQuery_(this.queryList);\n  }\n  setDirty() {\n    this.queryList.setDirty();\n  }\n}\nclass LQueries_ {\n  queries;\n  constructor(queries = []) {\n    this.queries = queries;\n  }\n  createEmbeddedView(tView) {\n    const tQueries = tView.queries;\n    if (tQueries !== null) {\n      const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;\n      const viewLQueries = [];\n      // An embedded view has queries propagated from a declaration view at the beginning of the\n      // TQueries collection and up until a first content query declared in the embedded view. Only\n      // propagated LQueries are created at this point (LQuery corresponding to declared content\n      // queries will be instantiated from the content query instructions for each directive).\n      for (let i = 0; i < noOfInheritedQueries; i++) {\n        const tQuery = tQueries.getByIndex(i);\n        const parentLQuery = this.queries[tQuery.indexInDeclarationView];\n        viewLQueries.push(parentLQuery.clone());\n      }\n      return new LQueries_(viewLQueries);\n    }\n    return null;\n  }\n  insertView(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  detachView(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  finishViewCreation(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  dirtyQueriesWithMatches(tView) {\n    for (let i = 0; i < this.queries.length; i++) {\n      if (getTQuery(tView, i).matches !== null) {\n        this.queries[i].setDirty();\n      }\n    }\n  }\n}\nclass TQueryMetadata_ {\n  flags;\n  read;\n  predicate;\n  constructor(predicate, flags, read = null) {\n    this.flags = flags;\n    this.read = read;\n    // Compiler might not be able to pre-optimize and split multiple selectors.\n    if (typeof predicate === 'string') {\n      this.predicate = splitQueryMultiSelectors(predicate);\n    } else {\n      this.predicate = predicate;\n    }\n  }\n}\nclass TQueries_ {\n  queries;\n  constructor(queries = []) {\n    this.queries = queries;\n  }\n  elementStart(tView, tNode) {\n    ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].elementStart(tView, tNode);\n    }\n  }\n  elementEnd(tNode) {\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].elementEnd(tNode);\n    }\n  }\n  embeddedTView(tNode) {\n    let queriesForTemplateRef = null;\n    for (let i = 0; i < this.length; i++) {\n      const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;\n      const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);\n      if (tqueryClone) {\n        tqueryClone.indexInDeclarationView = i;\n        if (queriesForTemplateRef !== null) {\n          queriesForTemplateRef.push(tqueryClone);\n        } else {\n          queriesForTemplateRef = [tqueryClone];\n        }\n      }\n    }\n    return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;\n  }\n  template(tView, tNode) {\n    ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].template(tView, tNode);\n    }\n  }\n  getByIndex(index) {\n    ngDevMode && assertIndexInRange(this.queries, index);\n    return this.queries[index];\n  }\n  get length() {\n    return this.queries.length;\n  }\n  track(tquery) {\n    this.queries.push(tquery);\n  }\n}\nclass TQuery_ {\n  metadata;\n  matches = null;\n  indexInDeclarationView = -1;\n  crossesNgTemplate = false;\n  /**\n   * A node index on which a query was declared (-1 for view queries and ones inherited from the\n   * declaration template). We use this index (alongside with _appliesToNextNode flag) to know\n   * when to apply content queries to elements in a template.\n   */\n  _declarationNodeIndex;\n  /**\n   * A flag indicating if a given query still applies to nodes it is crossing. We use this flag\n   * (alongside with _declarationNodeIndex) to know when to stop applying content queries to\n   * elements in a template.\n   */\n  _appliesToNextNode = true;\n  constructor(metadata, nodeIndex = -1) {\n    this.metadata = metadata;\n    this._declarationNodeIndex = nodeIndex;\n  }\n  elementStart(tView, tNode) {\n    if (this.isApplyingToNode(tNode)) {\n      this.matchTNode(tView, tNode);\n    }\n  }\n  elementEnd(tNode) {\n    if (this._declarationNodeIndex === tNode.index) {\n      this._appliesToNextNode = false;\n    }\n  }\n  template(tView, tNode) {\n    this.elementStart(tView, tNode);\n  }\n  embeddedTView(tNode, childQueryIndex) {\n    if (this.isApplyingToNode(tNode)) {\n      this.crossesNgTemplate = true;\n      // A marker indicating a `<ng-template>` element (a placeholder for query results from\n      // embedded views created based on this `<ng-template>`).\n      this.addMatch(-tNode.index, childQueryIndex);\n      return new TQuery_(this.metadata);\n    }\n    return null;\n  }\n  isApplyingToNode(tNode) {\n    if (this._appliesToNextNode && (this.metadata.flags & 1 /* QueryFlags.descendants */) !== 1 /* QueryFlags.descendants */) {\n      const declarationNodeIdx = this._declarationNodeIndex;\n      let parent = tNode.parent;\n      // Determine if a given TNode is a \"direct\" child of a node on which a content query was\n      // declared (only direct children of query's host node can match with the descendants: false\n      // option). There are 3 main use-case / conditions to consider here:\n      // - <needs-target><i #target></i></needs-target>: here <i #target> parent node is a query\n      // host node;\n      // - <needs-target><ng-template [ngIf]=\"true\"><i #target></i></ng-template></needs-target>:\n      // here <i #target> parent node is null;\n      // - <needs-target><ng-container><i #target></i></ng-container></needs-target>: here we need\n      // to go past `<ng-container>` to determine <i #target> parent node (but we shouldn't traverse\n      // up past the query's host node!).\n      while (parent !== null && parent.type & 8 /* TNodeType.ElementContainer */ && parent.index !== declarationNodeIdx) {\n        parent = parent.parent;\n      }\n      return declarationNodeIdx === (parent !== null ? parent.index : -1);\n    }\n    return this._appliesToNextNode;\n  }\n  matchTNode(tView, tNode) {\n    const predicate = this.metadata.predicate;\n    if (Array.isArray(predicate)) {\n      for (let i = 0; i < predicate.length; i++) {\n        const name = predicate[i];\n        this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));\n        // Also try matching the name to a provider since strings can be used as DI tokens too.\n        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));\n      }\n    } else {\n      if (predicate === TemplateRef) {\n        if (tNode.type & 4 /* TNodeType.Container */) {\n          this.matchTNodeWithReadOption(tView, tNode, -1);\n        }\n      } else {\n        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));\n      }\n    }\n  }\n  matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {\n    if (nodeMatchIdx !== null) {\n      const read = this.metadata.read;\n      if (read !== null) {\n        if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4 /* TNodeType.Container */) {\n          this.addMatch(tNode.index, -2);\n        } else {\n          const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);\n          if (directiveOrProviderIdx !== null) {\n            this.addMatch(tNode.index, directiveOrProviderIdx);\n          }\n        }\n      } else {\n        this.addMatch(tNode.index, nodeMatchIdx);\n      }\n    }\n  }\n  addMatch(tNodeIdx, matchIdx) {\n    if (this.matches === null) {\n      this.matches = [tNodeIdx, matchIdx];\n    } else {\n      this.matches.push(tNodeIdx, matchIdx);\n    }\n  }\n}\n/**\n * Iterates over local names for a given node and returns directive index\n * (or -1 if a local name points to an element).\n *\n * @param tNode static data of a node to check\n * @param selector selector to match\n * @returns directive index, -1 or null if a selector didn't match any of the local names\n */\nfunction getIdxOfMatchingSelector(tNode, selector) {\n  const localNames = tNode.localNames;\n  if (localNames !== null) {\n    for (let i = 0; i < localNames.length; i += 2) {\n      if (localNames[i] === selector) {\n        return localNames[i + 1];\n      }\n    }\n  }\n  return null;\n}\nfunction createResultByTNodeType(tNode, currentView) {\n  if (tNode.type & (3 /* TNodeType.AnyRNode */ | 8 /* TNodeType.ElementContainer */)) {\n    return createElementRef(tNode, currentView);\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    return createTemplateRef(tNode, currentView);\n  }\n  return null;\n}\nfunction createResultForNode(lView, tNode, matchingIdx, read) {\n  if (matchingIdx === -1) {\n    // if read token and / or strategy is not specified, detect it using appropriate tNode type\n    return createResultByTNodeType(tNode, lView);\n  } else if (matchingIdx === -2) {\n    // read a special token from a node injector\n    return createSpecialToken(lView, tNode, read);\n  } else {\n    // read a token\n    return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);\n  }\n}\nfunction createSpecialToken(lView, tNode, read) {\n  if (read === ElementRef) {\n    return createElementRef(tNode, lView);\n  } else if (read === TemplateRef) {\n    return createTemplateRef(tNode, lView);\n  } else if (read === ViewContainerRef) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n    return createContainerRef(tNode, lView);\n  } else {\n    ngDevMode && throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);\n  }\n}\n/**\n * A helper function that creates query results for a given view. This function is meant to do the\n * processing once and only once for a given view instance (a set of results for a given view\n * doesn't change).\n */\nfunction materializeViewResults(tView, lView, tQuery, queryIndex) {\n  const lQuery = lView[QUERIES].queries[queryIndex];\n  if (lQuery.matches === null) {\n    const tViewData = tView.data;\n    const tQueryMatches = tQuery.matches;\n    const result = [];\n    for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {\n      const matchedNodeIdx = tQueryMatches[i];\n      if (matchedNodeIdx < 0) {\n        // we at the <ng-template> marker which might have results in views created based on this\n        // <ng-template> - those results will be in separate views though, so here we just leave\n        // null as a placeholder\n        result.push(null);\n      } else {\n        ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);\n        const tNode = tViewData[matchedNodeIdx];\n        result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));\n      }\n    }\n    lQuery.matches = result;\n  }\n  return lQuery.matches;\n}\n/**\n * A helper function that collects (already materialized) query results from a tree of views,\n * starting with a provided LView.\n */\nfunction collectQueryResults(tView, lView, queryIndex, result) {\n  const tQuery = tView.queries.getByIndex(queryIndex);\n  const tQueryMatches = tQuery.matches;\n  if (tQueryMatches !== null) {\n    const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);\n    for (let i = 0; i < tQueryMatches.length; i += 2) {\n      const tNodeIdx = tQueryMatches[i];\n      if (tNodeIdx > 0) {\n        result.push(lViewResults[i / 2]);\n      } else {\n        const childQueryIndex = tQueryMatches[i + 1];\n        const declarationLContainer = lView[-tNodeIdx];\n        ngDevMode && assertLContainer(declarationLContainer);\n        // collect matches for views inserted in this container\n        for (let i = CONTAINER_HEADER_OFFSET; i < declarationLContainer.length; i++) {\n          const embeddedLView = declarationLContainer[i];\n          if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {\n            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n          }\n        }\n        // collect matches for views created from this declaration container and inserted into\n        // different containers\n        if (declarationLContainer[MOVED_VIEWS] !== null) {\n          const embeddedLViews = declarationLContainer[MOVED_VIEWS];\n          for (let i = 0; i < embeddedLViews.length; i++) {\n            const embeddedLView = embeddedLViews[i];\n            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n          }\n        }\n      }\n    }\n  }\n  return result;\n}\nfunction loadQueryInternal(lView, queryIndex) {\n  ngDevMode && assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');\n  ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);\n  return lView[QUERIES].queries[queryIndex].queryList;\n}\n/**\n * Creates a new instance of LQuery and returns its index in the collection of LQuery objects.\n *\n * @returns index in the collection of LQuery objects\n */\nfunction createLQuery(tView, lView, flags) {\n  const queryList = new QueryList((flags & 4 /* QueryFlags.emitDistinctChangesOnly */) === 4 /* QueryFlags.emitDistinctChangesOnly */);\n  storeCleanupWithContext(tView, lView, queryList, queryList.destroy);\n  const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;\n  return lQueries.push(new LQuery_(queryList)) - 1;\n}\nfunction createViewQuery(predicate, flags, read) {\n  ngDevMode && assertNumber(flags, 'Expecting flags');\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);\n    if ((flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */) {\n      tView.staticViewQueries = true;\n    }\n  }\n  return createLQuery(tView, getLView(), flags);\n}\nfunction createContentQuery(directiveIndex, predicate, flags, read) {\n  ngDevMode && assertNumber(flags, 'Expecting flags');\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    const tNode = getCurrentTNode();\n    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);\n    saveContentQueryAndDirectiveIndex(tView, directiveIndex);\n    if ((flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */) {\n      tView.staticContentQueries = true;\n    }\n  }\n  return createLQuery(tView, getLView(), flags);\n}\n/** Splits multiple selectors in the locator. */\nfunction splitQueryMultiSelectors(locator) {\n  return locator.split(',').map(s => s.trim());\n}\nfunction createTQuery(tView, metadata, nodeIndex) {\n  if (tView.queries === null) tView.queries = new TQueries_();\n  tView.queries.track(new TQuery_(metadata, nodeIndex));\n}\nfunction saveContentQueryAndDirectiveIndex(tView, directiveIndex) {\n  const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);\n  const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;\n  if (directiveIndex !== lastSavedDirectiveIndex) {\n    tViewContentQueries.push(tView.queries.length - 1, directiveIndex);\n  }\n}\nfunction getTQuery(tView, index) {\n  ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');\n  return tView.queries.getByIndex(index);\n}\n/**\n * A helper function collecting results from all the views where a given query was active.\n * @param lView\n * @param queryIndex\n */\nfunction getQueryResults(lView, queryIndex) {\n  const tView = lView[TVIEW];\n  const tQuery = getTQuery(tView, queryIndex);\n  return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);\n}\n\n/**\n * Checks if the given `value` is a reactive `Signal`.\n */\nfunction isSignal(value) {\n  return typeof value === 'function' && value[SIGNAL$1] !== undefined;\n}\n\n/** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */\nconst ɵWRITABLE_SIGNAL = /* @__PURE__ */Symbol('WRITABLE_SIGNAL');\n/**\n * Utility function used during template type checking to extract the value from a `WritableSignal`.\n * @codeGenApi\n */\nfunction ɵunwrapWritableSignal(value) {\n  // Note: the function uses `WRITABLE_SIGNAL` as a brand instead of `WritableSignal<T>`,\n  // because the latter incorrectly unwraps non-signal getter functions.\n  return null;\n}\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction signal(initialValue, options) {\n  performanceMarkFeature('NgSignals');\n  const signalFn = createSignal$1(initialValue);\n  const node = signalFn[SIGNAL$1];\n  if (options?.equal) {\n    node.equal = options.equal;\n  }\n  signalFn.set = newValue => signalSetFn$1(node, newValue);\n  signalFn.update = updateFn => signalUpdateFn$1(node, updateFn);\n  signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);\n  if (ngDevMode) {\n    signalFn.toString = () => `[Signal: ${signalFn()}]`;\n    node.debugName = options?.debugName;\n  }\n  return signalFn;\n}\nfunction signalAsReadonlyFn() {\n  const node = this[SIGNAL$1];\n  if (node.readonlyFn === undefined) {\n    const readonlyFn = () => this();\n    readonlyFn[SIGNAL$1] = node;\n    node.readonlyFn = readonlyFn;\n  }\n  return node.readonlyFn;\n}\n/**\n * Checks if the given `value` is a writeable signal.\n */\nfunction isWritableSignal(value) {\n  return isSignal(value) && typeof value.set === 'function';\n}\n\n/**\n * A signal factory function in charge of creating a new computed signal capturing query\n * results. This centralized creation function is used by all types of queries (child / children,\n * required / optional).\n *\n * @param firstOnly indicates if all or only the first result should be returned\n * @param required indicates if at least one result is required\n * @returns a read-only signal with query results\n */\nfunction createQuerySignalFn(firstOnly, required, opts) {\n  let node;\n  const signalFn = createComputed$1(() => {\n    // A dedicated signal that increments its value every time a query changes its dirty status. By\n    // using this signal we can implement a query as computed and avoid creation of a specialized\n    // reactive node type. Please note that a query gets marked dirty under the following\n    // circumstances:\n    // - a view (where a query is active) finished its first creation pass;\n    // - a new view is inserted / deleted and it impacts query results.\n    node._dirtyCounter();\n    const value = refreshSignalQuery(node, firstOnly);\n    if (required && value === undefined) {\n      throw new RuntimeError(-951 /* RuntimeErrorCode.REQUIRED_QUERY_NO_VALUE */, ngDevMode && 'Child query result is required but no value is available.');\n    }\n    return value;\n  });\n  node = signalFn[SIGNAL$1];\n  node._dirtyCounter = signal(0);\n  node._flatValue = undefined;\n  if (ngDevMode) {\n    signalFn.toString = () => `[Query Signal]`;\n    node.debugName = opts?.debugName;\n  }\n  return signalFn;\n}\nfunction createSingleResultOptionalQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */true, /* required */false, opts);\n}\nfunction createSingleResultRequiredQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */true, /* required */true, opts);\n}\nfunction createMultiResultQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */false, /* required */false, opts);\n}\nfunction bindQueryToSignal(target, queryIndex) {\n  const node = target[SIGNAL$1];\n  node._lView = getLView();\n  node._queryIndex = queryIndex;\n  node._queryList = loadQueryInternal(node._lView, queryIndex);\n  node._queryList.onDirty(() => node._dirtyCounter.update(v => v + 1));\n}\nfunction refreshSignalQuery(node, firstOnly) {\n  const lView = node._lView;\n  const queryIndex = node._queryIndex;\n  // There are 2 conditions under which we want to return \"empty\" results instead of the ones\n  // collected by a query:\n  //\n  // 1) a given query wasn't created yet (this is a period of time between the directive creation\n  // and execution of the query creation function) - in this case a query doesn't exist yet and we\n  // don't have any results to return.\n  //\n  // 2) we are in the process of constructing a view (the first\n  // creation pass didn't finish) and a query might have partial results, but we don't want to\n  // return those - instead we do delay results collection until all nodes had a chance of matching\n  // and we can present consistent, \"atomic\" (on a view level) results.\n  if (lView === undefined || queryIndex === undefined || lView[FLAGS] & 4 /* LViewFlags.CreationMode */) {\n    return firstOnly ? undefined : EMPTY_ARRAY;\n  }\n  const queryList = loadQueryInternal(lView, queryIndex);\n  const results = getQueryResults(lView, queryIndex);\n  queryList.reset(results, unwrapElementRef);\n  if (firstOnly) {\n    return queryList.first;\n  } else {\n    // TODO: remove access to the private _changesDetected field by abstracting / removing usage of\n    // QueryList in the signal-based queries (perf follow-up)\n    const resultChanged = queryList._changesDetected;\n    if (resultChanged || node._flatValue === undefined) {\n      return node._flatValue = queryList.toArray();\n    }\n    return node._flatValue;\n  }\n}\nfunction viewChildFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChild);\n  return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction viewChildRequiredFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChild);\n  return createSingleResultRequiredQuerySignalFn(opts);\n}\n/**\n * Initializes a view child query.\n *\n * Consider using `viewChild.required` for queries that should always match.\n *\n * @usageNotes\n * Create a child query in your component by declaring a\n * class field and initializing it with the `viewChild()` function.\n *\n * ```angular-ts\n * @Component({template: '<div #el></div><my-component #cmp />'})\n * export class TestComponent {\n *   divEl = viewChild<ElementRef>('el');                   // Signal<ElementRef|undefined>\n *   divElRequired = viewChild.required<ElementRef>('el');  // Signal<ElementRef>\n *   cmp = viewChild(MyComponent);                          // Signal<MyComponent|undefined>\n *   cmpRequired = viewChild.required(MyComponent);         // Signal<MyComponent>\n * }\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst viewChild = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `viewChild` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `viewChild` export.\n  viewChildFn.required = viewChildRequiredFn;\n  return viewChildFn;\n})();\n/**\n * Initializes a view children query.\n *\n * Query results are represented as a signal of a read-only collection containing all matched\n * elements.\n *\n * @usageNotes\n * Create a children query in your component by declaring a\n * class field and initializing it with the `viewChildren()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   divEls = viewChildren<ElementRef>('el');   // Signal<ReadonlyArray<ElementRef>>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nfunction viewChildren(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChildren);\n  return createMultiResultQuerySignalFn(opts);\n}\nfunction contentChildFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(contentChild);\n  return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction contentChildRequiredFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(contentChildren);\n  return createSingleResultRequiredQuerySignalFn(opts);\n}\n/**\n * Initializes a content child query. Consider using `contentChild.required` for queries that should\n * always match.\n *\n * @usageNotes\n * Create a child query in your component by declaring a\n * class field and initializing it with the `contentChild()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   headerEl = contentChild<ElementRef>('h');                    // Signal<ElementRef|undefined>\n *   headerElElRequired = contentChild.required<ElementRef>('h'); // Signal<ElementRef>\n *   header = contentChild(MyHeader);                             // Signal<MyHeader|undefined>\n *   headerRequired = contentChild.required(MyHeader);            // Signal<MyHeader>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nconst contentChild = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `viewChild` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `viewChild` export.\n  contentChildFn.required = contentChildRequiredFn;\n  return contentChildFn;\n})();\n/**\n * Initializes a content children query.\n *\n * Query results are represented as a signal of a read-only collection containing all matched\n * elements.\n *\n * @usageNotes\n * Create a children query in your component by declaring a\n * class field and initializing it with the `contentChildren()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   headerEl = contentChildren<ElementRef>('h');   // Signal<ReadonlyArray<ElementRef>>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nfunction contentChildren(locator, opts) {\n  return createMultiResultQuerySignalFn(opts);\n}\n\n/**\n * Creates a model signal.\n *\n * @param initialValue The initial value.\n *   Can be set to {@link REQUIRED_UNSET_VALUE} for required model signals.\n * @param options Additional options for the model.\n */\nfunction createModelSignal(initialValue, opts) {\n  const node = Object.create(INPUT_SIGNAL_NODE);\n  const emitterRef = new OutputEmitterRef();\n  node.value = initialValue;\n  function getter() {\n    producerAccessed$1(node);\n    assertModelSet(node.value);\n    return node.value;\n  }\n  getter[SIGNAL$1] = node;\n  getter.asReadonly = signalAsReadonlyFn.bind(getter);\n  // TODO: Should we throw an error when updating a destroyed model?\n  getter.set = newValue => {\n    if (!node.equal(node.value, newValue)) {\n      signalSetFn$1(node, newValue);\n      emitterRef.emit(newValue);\n    }\n  };\n  getter.update = updateFn => {\n    assertModelSet(node.value);\n    getter.set(updateFn(node.value));\n  };\n  getter.subscribe = emitterRef.subscribe.bind(emitterRef);\n  getter.destroyRef = emitterRef.destroyRef;\n  if (ngDevMode) {\n    getter.toString = () => `[Model Signal: ${getter()}]`;\n    node.debugName = opts?.debugName;\n  }\n  return getter;\n}\n/** Asserts that a model's value is set. */\nfunction assertModelSet(value) {\n  if (value === REQUIRED_UNSET_VALUE) {\n    throw new RuntimeError(952 /* RuntimeErrorCode.REQUIRED_MODEL_NO_VALUE */, ngDevMode && 'Model is required but no value is available yet.');\n  }\n}\nfunction modelFunction(initialValue, opts) {\n  ngDevMode && assertInInjectionContext(model);\n  return createModelSignal(initialValue, opts);\n}\nfunction modelRequiredFunction(opts) {\n  ngDevMode && assertInInjectionContext(model);\n  return createModelSignal(REQUIRED_UNSET_VALUE, opts);\n}\n/**\n * `model` declares a writeable signal that is exposed as an input/output\n * pair on the containing directive.\n *\n * The input name is taken either from the class member or from the `alias` option.\n * The output name is generated by taking the input name and appending `Change`.\n *\n * @usageNotes\n *\n * To use `model()`, import the function from `@angular/core`.\n *\n * ```ts\n * import {model} from '@angular/core`;\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `model` or `model.required`.\n *\n * ```ts\n * @Directive({\n *   ...\n * })\n * export class MyDir {\n *   firstName = model<string>();            // ModelSignal<string|undefined>\n *   lastName  = model.required<string>();   // ModelSignal<string>\n *   age       = model(0);                   // ModelSignal<number>\n * }\n * ```\n *\n * Inside your component template, you can display the value of a `model`\n * by calling the signal.\n *\n * ```html\n * <span>{{firstName()}}</span>\n * ```\n *\n * Updating the `model` is equivalent to updating a writable signal.\n *\n * ```ts\n * updateName(newFirstName: string): void {\n *   this.firstName.set(newFirstName);\n * }\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst model = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `model` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `model` export.\n  modelFunction.required = modelRequiredFunction;\n  return modelFunction;\n})();\n\n// Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not\n// explicitly set.\nconst emitDistinctChangesOnlyDefaultValue = true;\n/**\n * Base class for query metadata.\n *\n * @see {@link ContentChildren}\n * @see {@link ContentChild}\n * @see {@link ViewChildren}\n * @see {@link ViewChild}\n *\n * @publicApi\n */\nclass Query {}\n/**\n * ContentChildren decorator and metadata.\n *\n *\n * @Annotation\n * @publicApi\n */\nconst ContentChildren = makePropDecorator('ContentChildren', (selector, opts = {}) => ({\n  selector,\n  first: false,\n  isViewQuery: false,\n  descendants: false,\n  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n  ...opts\n}), Query);\n/**\n * ContentChild decorator and metadata.\n *\n *\n * @Annotation\n *\n * @publicApi\n */\nconst ContentChild = makePropDecorator('ContentChild', (selector, opts = {}) => ({\n  selector,\n  first: true,\n  isViewQuery: false,\n  descendants: true,\n  ...opts\n}), Query);\n/**\n * ViewChildren decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChildren = makePropDecorator('ViewChildren', (selector, opts = {}) => ({\n  selector,\n  first: false,\n  isViewQuery: true,\n  descendants: true,\n  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n  ...opts\n}), Query);\n/**\n * ViewChild decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChild = makePropDecorator('ViewChild', (selector, opts) => ({\n  selector,\n  first: true,\n  isViewQuery: true,\n  descendants: true,\n  ...opts\n}), Query);\n\n/**\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\n *\n * Example:\n * ```ts\n * @Component({\n *   selector: 'my-comp',\n *   templateUrl: 'my-comp.html', // This requires asynchronous resolution\n * })\n * class MyComponent{\n * }\n *\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\n *\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\n *\n * // Use browser's `fetch()` function as the default resource resolution strategy.\n * resolveComponentResources(fetch).then(() => {\n *   // After resolution all URLs have been converted into `template` strings.\n *   renderComponent(MyComponent);\n * });\n *\n * ```\n *\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\n * to call this method outside JIT mode.\n *\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\n */\nfunction resolveComponentResources(resourceResolver) {\n  // Store all promises which are fetching the resources.\n  const componentResolved = [];\n  // Cache so that we don't fetch the same resource more than once.\n  const urlMap = new Map();\n  function cachedResourceResolve(url) {\n    let promise = urlMap.get(url);\n    if (!promise) {\n      const resp = resourceResolver(url);\n      urlMap.set(url, promise = resp.then(unwrapResponse));\n    }\n    return promise;\n  }\n  componentResourceResolutionQueue.forEach((component, type) => {\n    const promises = [];\n    if (component.templateUrl) {\n      promises.push(cachedResourceResolve(component.templateUrl).then(template => {\n        component.template = template;\n      }));\n    }\n    const styles = typeof component.styles === 'string' ? [component.styles] : component.styles || [];\n    component.styles = styles;\n    if (component.styleUrl && component.styleUrls?.length) {\n      throw new Error('@Component cannot define both `styleUrl` and `styleUrls`. ' + 'Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple');\n    } else if (component.styleUrls?.length) {\n      const styleOffset = component.styles.length;\n      const styleUrls = component.styleUrls;\n      component.styleUrls.forEach((styleUrl, index) => {\n        styles.push(''); // pre-allocate array.\n        promises.push(cachedResourceResolve(styleUrl).then(style => {\n          styles[styleOffset + index] = style;\n          styleUrls.splice(styleUrls.indexOf(styleUrl), 1);\n          if (styleUrls.length == 0) {\n            component.styleUrls = undefined;\n          }\n        }));\n      });\n    } else if (component.styleUrl) {\n      promises.push(cachedResourceResolve(component.styleUrl).then(style => {\n        styles.push(style);\n        component.styleUrl = undefined;\n      }));\n    }\n    const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));\n    componentResolved.push(fullyResolved);\n  });\n  clearResolutionOfComponentResourcesQueue();\n  return Promise.all(componentResolved).then(() => undefined);\n}\nlet componentResourceResolutionQueue = new Map();\n// Track when existing ɵcmp for a Type is waiting on resources.\nconst componentDefPendingResolution = new Set();\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n  if (componentNeedsResolution(metadata)) {\n    componentResourceResolutionQueue.set(type, metadata);\n    componentDefPendingResolution.add(type);\n  }\n}\nfunction isComponentDefPendingResolution(type) {\n  return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n  return !!(component.templateUrl && !component.hasOwnProperty('template') || component.styleUrls && component.styleUrls.length || component.styleUrl);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n  const old = componentResourceResolutionQueue;\n  componentResourceResolutionQueue = new Map();\n  return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n  componentDefPendingResolution.clear();\n  queue.forEach((_, type) => componentDefPendingResolution.add(type));\n  componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n  return componentResourceResolutionQueue.size === 0;\n}\nfunction unwrapResponse(response) {\n  return typeof response == 'string' ? response : response.text();\n}\nfunction componentDefResolved(type) {\n  componentDefPendingResolution.delete(type);\n}\n\n/**\n * Map of module-id to the corresponding NgModule.\n */\nconst modules = new Map();\n/**\n * Whether to check for duplicate NgModule registrations.\n *\n * This can be disabled for testing.\n */\nlet checkForDuplicateNgModules = true;\nfunction assertSameOrNotExisting(id, type, incoming) {\n  if (type && type !== incoming && checkForDuplicateNgModules) {\n    throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);\n  }\n}\n/**\n * Adds the given NgModule type to Angular's NgModule registry.\n *\n * This is generated as a side-effect of NgModule compilation. Note that the `id` is passed in\n * explicitly and not read from the NgModule definition. This is for two reasons: it avoids a\n * megamorphic read, and in JIT there's a chicken-and-egg problem where the NgModule may not be\n * fully resolved when it's registered.\n *\n * @codeGenApi\n */\nfunction registerNgModuleType(ngModuleType, id) {\n  const existing = modules.get(id) || null;\n  assertSameOrNotExisting(id, existing, ngModuleType);\n  modules.set(id, ngModuleType);\n}\nfunction clearModulesForTest() {\n  modules.clear();\n}\nfunction getRegisteredNgModuleType(id) {\n  return modules.get(id);\n}\n/**\n * Control whether the NgModule registration system enforces that each NgModule type registered has\n * a unique id.\n *\n * This is useful for testing as the NgModule registry cannot be properly reset between tests with\n * Angular's current API.\n */\nfunction setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {\n  checkForDuplicateNgModules = !allowDuplicates;\n}\n\n/**\n * Validation function invoked at runtime for each binding that might potentially\n * represent a security-sensitive attribute of an <iframe>.\n * See `IFRAME_SECURITY_SENSITIVE_ATTRS` in the\n * `packages/compiler/src/schema/dom_security_schema.ts` script for the full list\n * of such attributes.\n *\n * @codeGenApi\n */\nfunction ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  const element = getNativeByTNode(tNode, lView);\n  // Restrict any dynamic bindings of security-sensitive attributes/properties\n  // on an <iframe> for security reasons.\n  if (tNode.type === 2 /* TNodeType.Element */ && tagName.toLowerCase() === 'iframe') {\n    const iframe = element;\n    // Unset previously applied `src` and `srcdoc` if we come across a situation when\n    // a security-sensitive attribute is set later via an attribute/property binding.\n    iframe.src = '';\n    iframe.srcdoc = trustedHTMLFromString('');\n    // Also remove the <iframe> from the document.\n    nativeRemoveNode(lView[RENDERER], iframe);\n    const errorMessage = ngDevMode && `Angular has detected that the \\`${attrName}\\` was applied ` + `as a binding to an <iframe>${getTemplateLocationDetails(lView)}. ` + `For security reasons, the \\`${attrName}\\` can be set on an <iframe> ` + `as a static attribute only. \\n` + `To fix this, switch the \\`${attrName}\\` binding to a static attribute ` + `in a template or in host bindings section.`;\n    throw new RuntimeError(-910 /* RuntimeErrorCode.UNSAFE_IFRAME_ATTRS */, errorMessage);\n  }\n  return attrValue;\n}\n\n/**\n * Represents an instance of an `NgModule` created by an `NgModuleFactory`.\n * Provides access to the `NgModule` instance and related objects.\n *\n * @publicApi\n */\nclass NgModuleRef$1 {}\n/**\n * @publicApi\n *\n * @deprecated\n * This class was mostly used as a part of ViewEngine-based JIT API and is no longer needed in Ivy\n * JIT mode. Angular provides APIs that accept NgModule classes directly (such as\n * [PlatformRef.bootstrapModule](api/core/PlatformRef#bootstrapModule) and\n * [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of\n * using factory-based ones.\n */\nclass NgModuleFactory$1 {}\n\n/**\n * Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.\n *\n * @param ngModule NgModule class.\n * @param parentInjector Optional injector instance to use as a parent for the module injector. If\n *     not provided, `NullInjector` will be used instead.\n * @returns NgModuleRef that represents an NgModule instance.\n *\n * @publicApi\n */\nfunction createNgModule(ngModule, parentInjector) {\n  return new NgModuleRef(ngModule, parentInjector ?? null, []);\n}\n/**\n * The `createNgModule` function alias for backwards-compatibility.\n * Please avoid using it directly and use `createNgModule` instead.\n *\n * @deprecated Use `createNgModule` instead.\n */\nconst createNgModuleRef = createNgModule;\nclass NgModuleRef extends NgModuleRef$1 {\n  ngModuleType;\n  _parent;\n  // tslint:disable-next-line:require-internal-with-underscore\n  _bootstrapComponents = [];\n  // tslint:disable-next-line:require-internal-with-underscore\n  _r3Injector;\n  instance;\n  destroyCbs = [];\n  // When bootstrapping a module we have a dependency graph that looks like this:\n  // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the\n  // module being resolved tries to inject the ComponentFactoryResolver, it'll create a\n  // circular dependency which will result in a runtime error, because the injector doesn't\n  // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves\n  // and providing it, rather than letting the injector resolve it.\n  componentFactoryResolver = new ComponentFactoryResolver(this);\n  constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {\n    super();\n    this.ngModuleType = ngModuleType;\n    this._parent = _parent;\n    const ngModuleDef = getNgModuleDef(ngModuleType);\n    ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);\n    this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);\n    this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{\n      provide: NgModuleRef$1,\n      useValue: this\n    }, {\n      provide: ComponentFactoryResolver$1,\n      useValue: this.componentFactoryResolver\n    }, ...additionalProviders], stringify(ngModuleType), new Set(['environment']));\n    // We need to resolve the injector types separately from the injector creation, because\n    // the module might be trying to use this ref in its constructor for DI which will cause a\n    // circular error that will eventually error out, because the injector isn't created yet.\n    if (runInjectorInitializers) {\n      this.resolveInjectorInitializers();\n    }\n  }\n  resolveInjectorInitializers() {\n    this._r3Injector.resolveInjectorInitializers();\n    this.instance = this._r3Injector.get(this.ngModuleType);\n  }\n  get injector() {\n    return this._r3Injector;\n  }\n  destroy() {\n    ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n    const injector = this._r3Injector;\n    !injector.destroyed && injector.destroy();\n    this.destroyCbs.forEach(fn => fn());\n    this.destroyCbs = null;\n  }\n  onDestroy(callback) {\n    ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n    this.destroyCbs.push(callback);\n  }\n}\nclass NgModuleFactory extends NgModuleFactory$1 {\n  moduleType;\n  constructor(moduleType) {\n    super();\n    this.moduleType = moduleType;\n  }\n  create(parentInjector) {\n    return new NgModuleRef(this.moduleType, parentInjector, []);\n  }\n}\nfunction createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {\n  return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);\n}\nclass EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {\n  injector;\n  componentFactoryResolver = new ComponentFactoryResolver(this);\n  instance = null;\n  constructor(config) {\n    super();\n    const injector = new R3Injector([...config.providers, {\n      provide: NgModuleRef$1,\n      useValue: this\n    }, {\n      provide: ComponentFactoryResolver$1,\n      useValue: this.componentFactoryResolver\n    }], config.parent || getNullInjector(), config.debugName, new Set(['environment']));\n    this.injector = injector;\n    if (config.runEnvironmentInitializers) {\n      injector.resolveInjectorInitializers();\n    }\n  }\n  destroy() {\n    this.injector.destroy();\n  }\n  onDestroy(callback) {\n    this.injector.onDestroy(callback);\n  }\n}\n/**\n * Create a new environment injector.\n *\n * @param providers An array of providers.\n * @param parent A parent environment injector.\n * @param debugName An optional name for this injector instance, which will be used in error\n *     messages.\n *\n * @publicApi\n */\nfunction createEnvironmentInjector(providers, parent, debugName = null) {\n  const adapter = new EnvironmentNgModuleRefAdapter({\n    providers,\n    parent,\n    debugName,\n    runEnvironmentInitializers: true\n  });\n  return adapter.injector;\n}\n\n/**\n * A service used by the framework to create instances of standalone injectors. Those injectors are\n * created on demand in case of dynamic component instantiation and contain ambient providers\n * collected from the imports graph rooted at a given standalone component.\n */\nclass StandaloneService {\n  _injector;\n  cachedInjectors = new Map();\n  constructor(_injector) {\n    this._injector = _injector;\n  }\n  getOrCreateStandaloneInjector(componentDef) {\n    if (!componentDef.standalone) {\n      return null;\n    }\n    if (!this.cachedInjectors.has(componentDef)) {\n      const providers = internalImportProvidersFrom(false, componentDef.type);\n      const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, `Standalone[${componentDef.type.name}]`) : null;\n      this.cachedInjectors.set(componentDef, standaloneInjector);\n    }\n    return this.cachedInjectors.get(componentDef);\n  }\n  ngOnDestroy() {\n    try {\n      for (const injector of this.cachedInjectors.values()) {\n        if (injector !== null) {\n          injector.destroy();\n        }\n      }\n    } finally {\n      this.cachedInjectors.clear();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: StandaloneService,\n    providedIn: 'environment',\n    factory: () => new StandaloneService(ɵɵinject(EnvironmentInjector))\n  });\n}\n\n/**\n * Create a component definition object.\n *\n *\n * # Example\n * ```ts\n * class MyComponent {\n *   // Generated by Angular Template Compiler\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\n *   static ɵcmp = defineComponent({\n *     ...\n *   });\n * }\n * ```\n * @codeGenApi\n */\nfunction ɵɵdefineComponent(componentDefinition) {\n  return noSideEffects(() => {\n    // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.\n    // See the `initNgDevMode` docstring for more information.\n    (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n    const baseDef = getNgDirectiveDef(componentDefinition);\n    const def = {\n      ...baseDef,\n      decls: componentDefinition.decls,\n      vars: componentDefinition.vars,\n      template: componentDefinition.template,\n      consts: componentDefinition.consts || null,\n      ngContentSelectors: componentDefinition.ngContentSelectors,\n      onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n      directiveDefs: null,\n      // assigned in noSideEffects\n      pipeDefs: null,\n      // assigned in noSideEffects\n      dependencies: baseDef.standalone && componentDefinition.dependencies || null,\n      getStandaloneInjector: baseDef.standalone ? parentInjector => {\n        return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);\n      } : null,\n      getExternalStyles: null,\n      signals: componentDefinition.signals ?? false,\n      data: componentDefinition.data || {},\n      encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,\n      styles: componentDefinition.styles || EMPTY_ARRAY,\n      _: null,\n      schemas: componentDefinition.schemas || null,\n      tView: null,\n      id: ''\n    };\n    // TODO: Do we still need/want this ?\n    if (baseDef.standalone) {\n      performanceMarkFeature('NgStandalone');\n    }\n    initFeatures(def);\n    const dependencies = componentDefinition.dependencies;\n    def.directiveDefs = extractDefListOrFactory(dependencies, /* pipeDef */false);\n    def.pipeDefs = extractDefListOrFactory(dependencies, /* pipeDef */true);\n    def.id = getComponentId(def);\n    return def;\n  });\n}\nfunction extractDirectiveDef(type) {\n  return getComponentDef(type) || getDirectiveDef(type);\n}\nfunction nonNull(value) {\n  return value !== null;\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵdefineNgModule(def) {\n  return noSideEffects(() => {\n    const res = {\n      type: def.type,\n      bootstrap: def.bootstrap || EMPTY_ARRAY,\n      declarations: def.declarations || EMPTY_ARRAY,\n      imports: def.imports || EMPTY_ARRAY,\n      exports: def.exports || EMPTY_ARRAY,\n      transitiveCompileScopes: null,\n      schemas: def.schemas || null,\n      id: def.id || null\n    };\n    return res;\n  });\n}\nfunction parseAndConvertBindingsForDefinition(obj, declaredInputs) {\n  if (obj == null) return EMPTY_OBJ;\n  const newLookup = {};\n  for (const minifiedKey in obj) {\n    if (obj.hasOwnProperty(minifiedKey)) {\n      const value = obj[minifiedKey];\n      let publicName;\n      let declaredName;\n      let inputFlags = InputFlags.None;\n      if (Array.isArray(value)) {\n        inputFlags = value[0];\n        publicName = value[1];\n        declaredName = value[2] ?? publicName; // declared name might not be set to save bytes.\n      } else {\n        publicName = value;\n        declaredName = value;\n      }\n      // For inputs, capture the declared name, or if some flags are set.\n      if (declaredInputs) {\n        // Perf note: An array is only allocated for the input if there are flags.\n        newLookup[publicName] = inputFlags !== InputFlags.None ? [minifiedKey, inputFlags] : minifiedKey;\n        declaredInputs[publicName] = declaredName;\n      } else {\n        newLookup[publicName] = minifiedKey;\n      }\n    }\n  }\n  return newLookup;\n}\n/**\n * Create a directive definition object.\n *\n * # Example\n * ```ts\n * class MyDirective {\n *   // Generated by Angular Template Compiler\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\n *   static ɵdir = ɵɵdefineDirective({\n *     ...\n *   });\n * }\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdefineDirective(directiveDefinition) {\n  return noSideEffects(() => {\n    const def = getNgDirectiveDef(directiveDefinition);\n    initFeatures(def);\n    return def;\n  });\n}\n/**\n * Create a pipe definition object.\n *\n * # Example\n * ```ts\n * class MyPipe implements PipeTransform {\n *   // Generated by Angular Template Compiler\n *   static ɵpipe = definePipe({\n *     ...\n *   });\n * }\n * ```\n * @param pipeDef Pipe definition generated by the compiler\n *\n * @codeGenApi\n */\nfunction ɵɵdefinePipe(pipeDef) {\n  return {\n    type: pipeDef.type,\n    name: pipeDef.name,\n    factory: null,\n    pure: pipeDef.pure !== false,\n    standalone: pipeDef.standalone ?? true,\n    onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n  };\n}\nfunction getNgDirectiveDef(directiveDefinition) {\n  const declaredInputs = {};\n  return {\n    type: directiveDefinition.type,\n    providersResolver: null,\n    factory: null,\n    hostBindings: directiveDefinition.hostBindings || null,\n    hostVars: directiveDefinition.hostVars || 0,\n    hostAttrs: directiveDefinition.hostAttrs || null,\n    contentQueries: directiveDefinition.contentQueries || null,\n    declaredInputs: declaredInputs,\n    inputTransforms: null,\n    inputConfig: directiveDefinition.inputs || EMPTY_OBJ,\n    exportAs: directiveDefinition.exportAs || null,\n    standalone: directiveDefinition.standalone ?? true,\n    signals: directiveDefinition.signals === true,\n    selectors: directiveDefinition.selectors || EMPTY_ARRAY,\n    viewQuery: directiveDefinition.viewQuery || null,\n    features: directiveDefinition.features || null,\n    setInput: null,\n    findHostDirectiveDefs: null,\n    hostDirectives: null,\n    inputs: parseAndConvertBindingsForDefinition(directiveDefinition.inputs, declaredInputs),\n    outputs: parseAndConvertBindingsForDefinition(directiveDefinition.outputs),\n    debugInfo: null\n  };\n}\nfunction initFeatures(definition) {\n  definition.features?.forEach(fn => fn(definition));\n}\nfunction extractDefListOrFactory(dependencies, pipeDef) {\n  if (!dependencies) {\n    return null;\n  }\n  const defExtractor = pipeDef ? getPipeDef$1 : extractDirectiveDef;\n  return () => (typeof dependencies === 'function' ? dependencies() : dependencies).map(dep => defExtractor(dep)).filter(nonNull);\n}\n/**\n * A map that contains the generated component IDs and type.\n */\nconst GENERATED_COMP_IDS = new Map();\n/**\n * A method can returns a component ID from the component definition using a variant of DJB2 hash\n * algorithm.\n */\nfunction getComponentId(componentDef) {\n  let hash = 0;\n  // For components with i18n in templates, the `consts` array is generated by the compiler\n  // as a function. If client and server bundles were produced with different minification\n  // configurations, the serializable contents of the function body would be different on\n  // the client and on the server. This might result in different ids generated. To avoid this\n  // issue, we do not take the `consts` contents into account if it's a function.\n  // See https://github.com/angular/angular/issues/58713.\n  const componentDefConsts = typeof componentDef.consts === 'function' ? '' : componentDef.consts;\n  // We cannot rely solely on the component selector as the same selector can be used in different\n  // modules.\n  //\n  // `componentDef.style` is not used, due to it causing inconsistencies. Ex: when server\n  // component styles has no sourcemaps and browsers do.\n  //\n  // Example:\n  // https://github.com/angular/components/blob/d9f82c8f95309e77a6d82fd574c65871e91354c2/src/material/core/option/option.ts#L248\n  // https://github.com/angular/components/blob/285f46dc2b4c5b127d356cb7c4714b221f03ce50/src/material/legacy-core/option/option.ts#L32\n  const hashSelectors = [componentDef.selectors, componentDef.ngContentSelectors, componentDef.hostVars, componentDef.hostAttrs, componentDefConsts, componentDef.vars, componentDef.decls, componentDef.encapsulation, componentDef.standalone, componentDef.signals, componentDef.exportAs, JSON.stringify(componentDef.inputs), JSON.stringify(componentDef.outputs),\n  // We cannot use 'componentDef.type.name' as the name of the symbol will change and will not\n  // match in the server and browser bundles.\n  Object.getOwnPropertyNames(componentDef.type.prototype), !!componentDef.contentQueries, !!componentDef.viewQuery];\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // If client and server bundles were produced with different minification configurations,\n    // the serializable contents of the function body would be different on the client and on\n    // the server. Ensure that we do not accidentally use functions in component id computation.\n    for (const item of hashSelectors) {\n      assertNotEqual(typeof item, 'function', 'Internal error: attempting to use a function in component id computation logic.');\n    }\n  }\n  for (const char of hashSelectors.join('|')) {\n    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n  }\n  // Force positive number hash.\n  // 2147483647 = equivalent of Integer.MAX_VALUE.\n  hash += 2147483647 + 1;\n  const compId = 'c' + hash;\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (GENERATED_COMP_IDS.has(compId)) {\n      const previousCompDefType = GENERATED_COMP_IDS.get(compId);\n      if (previousCompDefType !== componentDef.type) {\n        console.warn(formatRuntimeError(-912 /* RuntimeErrorCode.COMPONENT_ID_COLLISION */, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));\n      }\n    } else {\n      GENERATED_COMP_IDS.set(compId, componentDef.type);\n    }\n  }\n  return compId;\n}\nfunction getSuperType(type) {\n  return Object.getPrototypeOf(type.prototype).constructor;\n}\n/**\n * Merges the definition from a super class to a sub class.\n * @param definition The definition that is a SubClass of another directive of component\n *\n * @codeGenApi\n */\nfunction ɵɵInheritDefinitionFeature(definition) {\n  let superType = getSuperType(definition.type);\n  let shouldInheritFields = true;\n  const inheritanceChain = [definition];\n  while (superType) {\n    let superDef = undefined;\n    if (isComponentDef(definition)) {\n      // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n      superDef = superType.ɵcmp || superType.ɵdir;\n    } else {\n      if (superType.ɵcmp) {\n        throw new RuntimeError(903 /* RuntimeErrorCode.INVALID_INHERITANCE */, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);\n      }\n      // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n      superDef = superType.ɵdir;\n    }\n    if (superDef) {\n      if (shouldInheritFields) {\n        inheritanceChain.push(superDef);\n        // Some fields in the definition may be empty, if there were no values to put in them that\n        // would've justified object creation. Unwrap them if necessary.\n        const writeableDef = definition;\n        writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);\n        writeableDef.inputTransforms = maybeUnwrapEmpty(definition.inputTransforms);\n        writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);\n        writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);\n        // Merge hostBindings\n        const superHostBindings = superDef.hostBindings;\n        superHostBindings && inheritHostBindings(definition, superHostBindings);\n        // Merge queries\n        const superViewQuery = superDef.viewQuery;\n        const superContentQueries = superDef.contentQueries;\n        superViewQuery && inheritViewQuery(definition, superViewQuery);\n        superContentQueries && inheritContentQueries(definition, superContentQueries);\n        // Merge inputs and outputs\n        mergeInputsWithTransforms(definition, superDef);\n        fillProperties(definition.outputs, superDef.outputs);\n        // Merge animations metadata.\n        // If `superDef` is a Component, the `data` field is present (defaults to an empty object).\n        if (isComponentDef(superDef) && superDef.data.animation) {\n          // If super def is a Component, the `definition` is also a Component, since Directives can\n          // not inherit Components (we throw an error above and cannot reach this code).\n          const defData = definition.data;\n          defData.animation = (defData.animation || []).concat(superDef.data.animation);\n        }\n      }\n      // Run parent features\n      const features = superDef.features;\n      if (features) {\n        for (let i = 0; i < features.length; i++) {\n          const feature = features[i];\n          if (feature && feature.ngInherit) {\n            feature(definition);\n          }\n          // If `InheritDefinitionFeature` is a part of the current `superDef`, it means that this\n          // def already has all the necessary information inherited from its super class(es), so we\n          // can stop merging fields from super classes. However we need to iterate through the\n          // prototype chain to look for classes that might contain other \"features\" (like\n          // NgOnChanges), which we should invoke for the original `definition`. We set the\n          // `shouldInheritFields` flag to indicate that, essentially skipping fields inheritance\n          // logic and only invoking functions from the \"features\" list.\n          if (feature === ɵɵInheritDefinitionFeature) {\n            shouldInheritFields = false;\n          }\n        }\n      }\n    }\n    superType = Object.getPrototypeOf(superType);\n  }\n  mergeHostAttrsAcrossInheritance(inheritanceChain);\n}\nfunction mergeInputsWithTransforms(target, source) {\n  for (const key in source.inputs) {\n    if (!source.inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    if (target.inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    const value = source.inputs[key];\n    if (value === undefined) {\n      continue;\n    }\n    target.inputs[key] = value;\n    target.declaredInputs[key] = source.declaredInputs[key];\n    // If the input is inherited, and we have a transform for it, we also inherit it.\n    // Note that transforms should not be inherited if the input has its own metadata\n    // in the `source` directive itself already (i.e. the input is re-declared/overridden).\n    if (source.inputTransforms !== null) {\n      // Note: transforms are stored with their minified names.\n      // Perf: only access the minified name when there are source transforms.\n      const minifiedName = Array.isArray(value) ? value[0] : value;\n      if (!source.inputTransforms.hasOwnProperty(minifiedName)) {\n        continue;\n      }\n      target.inputTransforms ??= {};\n      target.inputTransforms[minifiedName] = source.inputTransforms[minifiedName];\n    }\n  }\n}\n/**\n * Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.\n *\n * @param inheritanceChain A list of `WritableDefs` starting at the top most type and listing\n * sub-types in order. For each type take the `hostAttrs` and `hostVars` and merge it with the child\n * type.\n */\nfunction mergeHostAttrsAcrossInheritance(inheritanceChain) {\n  let hostVars = 0;\n  let hostAttrs = null;\n  // We process the inheritance order from the base to the leaves here.\n  for (let i = inheritanceChain.length - 1; i >= 0; i--) {\n    const def = inheritanceChain[i];\n    // For each `hostVars`, we need to add the superclass amount.\n    def.hostVars = hostVars += def.hostVars;\n    // for each `hostAttrs` we need to merge it with superclass.\n    def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));\n  }\n}\nfunction maybeUnwrapEmpty(value) {\n  if (value === EMPTY_OBJ) {\n    return {};\n  } else if (value === EMPTY_ARRAY) {\n    return [];\n  } else {\n    return value;\n  }\n}\nfunction inheritViewQuery(definition, superViewQuery) {\n  const prevViewQuery = definition.viewQuery;\n  if (prevViewQuery) {\n    definition.viewQuery = (rf, ctx) => {\n      superViewQuery(rf, ctx);\n      prevViewQuery(rf, ctx);\n    };\n  } else {\n    definition.viewQuery = superViewQuery;\n  }\n}\nfunction inheritContentQueries(definition, superContentQueries) {\n  const prevContentQueries = definition.contentQueries;\n  if (prevContentQueries) {\n    definition.contentQueries = (rf, ctx, directiveIndex) => {\n      superContentQueries(rf, ctx, directiveIndex);\n      prevContentQueries(rf, ctx, directiveIndex);\n    };\n  } else {\n    definition.contentQueries = superContentQueries;\n  }\n}\nfunction inheritHostBindings(definition, superHostBindings) {\n  const prevHostBindings = definition.hostBindings;\n  if (prevHostBindings) {\n    definition.hostBindings = (rf, ctx) => {\n      superHostBindings(rf, ctx);\n      prevHostBindings(rf, ctx);\n    };\n  } else {\n    definition.hostBindings = superHostBindings;\n  }\n}\n\n/**\n * Fields which exist on either directive or component definitions, and need to be copied from\n * parent to child classes by the `ɵɵCopyDefinitionFeature`.\n */\nconst COPY_DIRECTIVE_FIELDS = [\n// The child class should use the providers of its parent.\n'providersResolver'\n// Not listed here are any fields which are handled by the `ɵɵInheritDefinitionFeature`, such\n// as inputs, outputs, and host binding functions.\n];\n/**\n * Fields which exist only on component definitions, and need to be copied from parent to child\n * classes by the `ɵɵCopyDefinitionFeature`.\n *\n * The type here allows any field of `ComponentDef` which is not also a property of `DirectiveDef`,\n * since those should go in `COPY_DIRECTIVE_FIELDS` above.\n */\nconst COPY_COMPONENT_FIELDS = [\n// The child class should use the template function of its parent, including all template\n// semantics.\n'template', 'decls', 'consts', 'vars', 'onPush', 'ngContentSelectors',\n// The child class should use the CSS styles of its parent, including all styling semantics.\n'styles', 'encapsulation',\n// The child class should be checked by the runtime in the same way as its parent.\n'schemas'];\n/**\n * Copies the fields not handled by the `ɵɵInheritDefinitionFeature` from the supertype of a\n * definition.\n *\n * This exists primarily to support ngcc migration of an existing View Engine pattern, where an\n * entire decorator is inherited from a parent to a child class. When ngcc detects this case, it\n * generates a skeleton definition on the child class, and applies this feature.\n *\n * The `ɵɵCopyDefinitionFeature` then copies any needed fields from the parent class' definition,\n * including things like the component template function.\n *\n * @param definition The definition of a child class which inherits from a parent class with its\n * own definition.\n *\n * @codeGenApi\n */\nfunction ɵɵCopyDefinitionFeature(definition) {\n  let superType = getSuperType(definition.type);\n  let superDef = undefined;\n  if (isComponentDef(definition)) {\n    // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n    superDef = superType.ɵcmp;\n  } else {\n    // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n    superDef = superType.ɵdir;\n  }\n  // Needed because `definition` fields are readonly.\n  const defAny = definition;\n  // Copy over any fields that apply to either directives or components.\n  for (const field of COPY_DIRECTIVE_FIELDS) {\n    defAny[field] = superDef[field];\n  }\n  if (isComponentDef(superDef)) {\n    // Copy over any component-specific fields.\n    for (const field of COPY_COMPONENT_FIELDS) {\n      defAny[field] = superDef[field];\n    }\n  }\n}\n\n/**\n * This feature adds the host directives behavior to a directive definition by patching a\n * function onto it. The expectation is that the runtime will invoke the function during\n * directive matching.\n *\n * For example:\n * ```ts\n * class ComponentWithHostDirective {\n *   static ɵcmp = defineComponent({\n *    type: ComponentWithHostDirective,\n *    features: [ɵɵHostDirectivesFeature([\n *      SimpleHostDirective,\n *      {directive: AdvancedHostDirective, inputs: ['foo: alias'], outputs: ['bar']},\n *    ])]\n *  });\n * }\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵHostDirectivesFeature(rawHostDirectives) {\n  const feature = definition => {\n    const isEager = Array.isArray(rawHostDirectives);\n    if (definition.hostDirectives === null) {\n      definition.findHostDirectiveDefs = findHostDirectiveDefs;\n      definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];\n    } else if (isEager) {\n      definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));\n    } else {\n      definition.hostDirectives.unshift(rawHostDirectives);\n    }\n  };\n  feature.ngInherit = true;\n  return feature;\n}\nfunction findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {\n  if (currentDef.hostDirectives !== null) {\n    for (const configOrFn of currentDef.hostDirectives) {\n      if (typeof configOrFn === 'function') {\n        const resolved = configOrFn();\n        for (const config of resolved) {\n          trackHostDirectiveDef(createHostDirectiveDef(config), matchedDefs, hostDirectiveDefs);\n        }\n      } else {\n        trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);\n      }\n    }\n  }\n}\n/** Tracks a single host directive during directive matching. */\nfunction trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {\n  const hostDirectiveDef = getDirectiveDef(def.directive);\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    validateHostDirective(def, hostDirectiveDef);\n  }\n  // We need to patch the `declaredInputs` so that\n  // `ngOnChanges` can map the properties correctly.\n  patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);\n  // Host directives execute before the host so that its host bindings can be overwritten.\n  findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);\n  hostDirectiveDefs.set(hostDirectiveDef, def);\n  matchedDefs.push(hostDirectiveDef);\n}\n/** Creates a `HostDirectiveDef` from a used-defined host directive configuration. */\nfunction createHostDirectiveDef(config) {\n  return typeof config === 'function' ? {\n    directive: resolveForwardRef(config),\n    inputs: EMPTY_OBJ,\n    outputs: EMPTY_OBJ\n  } : {\n    directive: resolveForwardRef(config.directive),\n    inputs: bindingArrayToMap(config.inputs),\n    outputs: bindingArrayToMap(config.outputs)\n  };\n}\n/**\n * Converts an array in the form of `['publicName', 'alias', 'otherPublicName', 'otherAlias']` into\n * a map in the form of `{publicName: 'alias', otherPublicName: 'otherAlias'}`.\n */\nfunction bindingArrayToMap(bindings) {\n  if (bindings === undefined || bindings.length === 0) {\n    return EMPTY_OBJ;\n  }\n  const result = {};\n  for (let i = 0; i < bindings.length; i += 2) {\n    result[bindings[i]] = bindings[i + 1];\n  }\n  return result;\n}\n/**\n * `ngOnChanges` has some leftover legacy ViewEngine behavior where the keys inside the\n * `SimpleChanges` event refer to the *declared* name of the input, not its public name or its\n * minified name. E.g. in `@Input('alias') foo: string`, the name in the `SimpleChanges` object\n * will always be `foo`, and not `alias` or the minified name of `foo` in apps using property\n * minification.\n *\n * This is achieved through the `DirectiveDef.declaredInputs` map that is constructed when the\n * definition is declared. When a property is written to the directive instance, the\n * `NgOnChangesFeature` will try to remap the property name being written to using the\n * `declaredInputs`.\n *\n * Since the host directive input remapping happens during directive matching, `declaredInputs`\n * won't contain the new alias that the input is available under. This function addresses the\n * issue by patching the host directive aliases to the `declaredInputs`. There is *not* a risk of\n * this patching accidentally introducing new inputs to the host directive, because `declaredInputs`\n * is used *only* by the `NgOnChangesFeature` when determining what name is used in the\n * `SimpleChanges` object which won't be reached if an input doesn't exist.\n */\nfunction patchDeclaredInputs(declaredInputs, exposedInputs) {\n  for (const publicName in exposedInputs) {\n    if (exposedInputs.hasOwnProperty(publicName)) {\n      const remappedPublicName = exposedInputs[publicName];\n      const privateName = declaredInputs[publicName];\n      // We *technically* shouldn't be able to hit this case because we can't have multiple\n      // inputs on the same property and we have validations against conflicting aliases in\n      // `validateMappings`. If we somehow did, it would lead to `ngOnChanges` being invoked\n      // with the wrong name so we have a non-user-friendly assertion here just in case.\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {\n        assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);\n      }\n      declaredInputs[remappedPublicName] = privateName;\n    }\n  }\n}\n/**\n * Verifies that the host directive has been configured correctly.\n * @param hostDirectiveConfig Host directive configuration object.\n * @param directiveDef Directive definition of the host directive.\n */\nfunction validateHostDirective(hostDirectiveConfig, directiveDef) {\n  const type = hostDirectiveConfig.directive;\n  if (directiveDef === null) {\n    if (getComponentDef(type) !== null) {\n      throw new RuntimeError(310 /* RuntimeErrorCode.HOST_DIRECTIVE_COMPONENT */, `Host directive ${type.name} cannot be a component.`);\n    }\n    throw new RuntimeError(307 /* RuntimeErrorCode.HOST_DIRECTIVE_UNRESOLVABLE */, `Could not resolve metadata for host directive ${type.name}. ` + `Make sure that the ${type.name} class is annotated with an @Directive decorator.`);\n  }\n  if (!directiveDef.standalone) {\n    throw new RuntimeError(308 /* RuntimeErrorCode.HOST_DIRECTIVE_NOT_STANDALONE */, `Host directive ${directiveDef.type.name} must be standalone.`);\n  }\n  validateMappings('input', directiveDef, hostDirectiveConfig.inputs);\n  validateMappings('output', directiveDef, hostDirectiveConfig.outputs);\n}\n/**\n * Checks that the host directive inputs/outputs configuration is valid.\n * @param bindingType Kind of binding that is being validated. Used in the error message.\n * @param def Definition of the host directive that is being validated against.\n * @param hostDirectiveBindings Host directive mapping object that shold be validated.\n */\nfunction validateMappings(bindingType, def, hostDirectiveBindings) {\n  const className = def.type.name;\n  const bindings = bindingType === 'input' ? def.inputs : def.outputs;\n  for (const publicName in hostDirectiveBindings) {\n    if (hostDirectiveBindings.hasOwnProperty(publicName)) {\n      if (!bindings.hasOwnProperty(publicName)) {\n        throw new RuntimeError(311 /* RuntimeErrorCode.HOST_DIRECTIVE_UNDEFINED_BINDING */, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);\n      }\n      const remappedPublicName = hostDirectiveBindings[publicName];\n      if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {\n        throw new RuntimeError(312 /* RuntimeErrorCode.HOST_DIRECTIVE_CONFLICTING_ALIAS */, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);\n      }\n    }\n  }\n}\n\n/**\n * Decorates the directive definition with support for input transform functions.\n *\n * If the directive uses inheritance, the feature should be included before the\n * `InheritDefinitionFeature` to ensure that the `inputTransforms` field is populated.\n *\n * @codeGenApi\n */\nfunction ɵɵInputTransformsFeature(definition) {\n  const inputs = definition.inputConfig;\n  const inputTransforms = {};\n  for (const minifiedKey in inputs) {\n    if (inputs.hasOwnProperty(minifiedKey)) {\n      // Note: the private names are used for the keys, rather than the public ones, because public\n      // names can be re-aliased in host directives which would invalidate the lookup.\n      const value = inputs[minifiedKey];\n      if (Array.isArray(value) && value[3]) {\n        inputTransforms[minifiedKey] = value[3];\n      }\n    }\n  }\n  definition.inputTransforms = inputTransforms;\n}\nfunction isIterable(obj) {\n  return obj !== null && typeof obj === 'object' && obj[Symbol.iterator] !== undefined;\n}\nfunction isListLikeIterable(obj) {\n  if (!isJsObject(obj)) return false;\n  return Array.isArray(obj) || !(obj instanceof Map) &&\n  // JS Map are iterables but return entries as [k, v]\n  Symbol.iterator in obj; // JS Iterable have a Symbol.iterator prop\n}\nfunction areIterablesEqual(a, b, comparator) {\n  const iterator1 = a[Symbol.iterator]();\n  const iterator2 = b[Symbol.iterator]();\n  while (true) {\n    const item1 = iterator1.next();\n    const item2 = iterator2.next();\n    if (item1.done && item2.done) return true;\n    if (item1.done || item2.done) return false;\n    if (!comparator(item1.value, item2.value)) return false;\n  }\n}\nfunction iterateListLike(obj, fn) {\n  if (Array.isArray(obj)) {\n    for (let i = 0; i < obj.length; i++) {\n      fn(obj[i]);\n    }\n  } else {\n    const iterator = obj[Symbol.iterator]();\n    let item;\n    while (!(item = iterator.next()).done) {\n      fn(item.value);\n    }\n  }\n}\nfunction isJsObject(o) {\n  return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\nfunction devModeEqual(a, b) {\n  const isListLikeIterableA = isListLikeIterable(a);\n  const isListLikeIterableB = isListLikeIterable(b);\n  if (isListLikeIterableA && isListLikeIterableB) {\n    return areIterablesEqual(a, b, devModeEqual);\n  } else {\n    const isAObject = a && (typeof a === 'object' || typeof a === 'function');\n    const isBObject = b && (typeof b === 'object' || typeof b === 'function');\n    if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {\n      return true;\n    } else {\n      return Object.is(a, b);\n    }\n  }\n}\n\n// TODO(misko): consider inlining\n/** Updates binding and returns the value. */\nfunction updateBinding(lView, bindingIndex, value) {\n  return lView[bindingIndex] = value;\n}\n/** Gets the current binding value. */\nfunction getBinding(lView, bindingIndex) {\n  ngDevMode && assertIndexInRange(lView, bindingIndex);\n  ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');\n  return lView[bindingIndex];\n}\n/**\n * Updates binding if changed, then returns whether it was updated.\n *\n * This function also checks the `CheckNoChangesMode` and throws if changes are made.\n * Some changes (Objects/iterables) during `CheckNoChangesMode` are exempt to comply with VE\n * behavior.\n *\n * @param lView current `LView`\n * @param bindingIndex The binding in the `LView` to check\n * @param value New value to check against `lView[bindingIndex]`\n * @returns `true` if the bindings has changed. (Throws if binding has changed during\n *          `CheckNoChangesMode`)\n */\nfunction bindingUpdated(lView, bindingIndex, value) {\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n  ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);\n  const oldValue = lView[bindingIndex];\n  if (Object.is(oldValue, value)) {\n    return false;\n  } else {\n    if (ngDevMode && isInCheckNoChangesMode()) {\n      // View engine didn't report undefined values as changed on the first checkNoChanges pass\n      // (before the change detection was run).\n      const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;\n      if (!devModeEqual(oldValueToCompare, value)) {\n        const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);\n        throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);\n      }\n      // There was a change, but the `devModeEqual` decided that the change is exempt from an error.\n      // For this reason we exit as if no change. The early exit is needed to prevent the changed\n      // value to be written into `LView` (If we would write the new value that we would not see it\n      // as change on next CD.)\n      return false;\n    }\n    lView[bindingIndex] = value;\n    return true;\n  }\n}\n/** Updates 2 bindings if changed, then returns whether either was updated. */\nfunction bindingUpdated2(lView, bindingIndex, exp1, exp2) {\n  const different = bindingUpdated(lView, bindingIndex, exp1);\n  return bindingUpdated(lView, bindingIndex + 1, exp2) || different;\n}\n/** Updates 3 bindings if changed, then returns whether any was updated. */\nfunction bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {\n  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n  return bindingUpdated(lView, bindingIndex + 2, exp3) || different;\n}\n/** Updates 4 bindings if changed, then returns whether any was updated. */\nfunction bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {\n  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n  return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;\n}\n\n/**\n * Checks whether a TNode is considered detached, i.e. not present in the\n * translated i18n template. We should not attempt hydration for such nodes\n * and instead, use a regular \"creation mode\".\n */\nfunction isDetachedByI18n(tNode) {\n  return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;\n}\nfunction templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  // TODO(pk): refactor getOrCreateTNode to have the \"create\" only version\n  const tNode = getOrCreateTNode(tView, index, 4 /* TNodeType.Container */, tagName || null, attrs || null);\n  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));\n  registerPostOrderHooks(tView, tNode);\n  const embeddedTView = tNode.tView = createTView(2 /* TViewType.Embedded */, tNode, templateFn, decls, vars, tView.directiveRegistry, tView.pipeRegistry, null, tView.schemas, tViewConsts, null /* ssrId */);\n  if (tView.queries !== null) {\n    tView.queries.template(tView, tNode);\n    embeddedTView.queries = tView.queries.embeddedTView(tNode);\n  }\n  return tNode;\n}\n/**\n * Creates an LContainer for an embedded view.\n *\n * @param declarationLView LView in which the template was declared.\n * @param declarationTView TView in which the template wa declared.\n * @param index The index of the container in the data array\n * @param templateFn Inline template\n * @param decls The number of nodes, local refs, and pipes for this template\n * @param vars The number of bindings for this template\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param localRefs Index of the local references in the `consts` array.\n * @param localRefExtractor A function which extracts local-refs values from the template.\n *        Defaults to the current element associated with the local-ref.\n */\nfunction declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = declarationTView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, declarationTView, declarationLView, templateFn, decls, vars, tagName, attrs, localRefsIndex) : declarationTView.data[adjustedIndex];\n  setCurrentTNode(tNode, false);\n  const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);\n  if (wasLastNodeCreated()) {\n    appendChild(declarationTView, declarationLView, comment, tNode);\n  }\n  attachPatchData(comment, declarationLView);\n  const lContainer = createLContainer(comment, declarationLView, comment, tNode);\n  declarationLView[adjustedIndex] = lContainer;\n  addToEndOfViewTree(declarationLView, lContainer);\n  // If hydration is enabled, looks up dehydrated views in the DOM\n  // using hydration annotation info and stores those views on LContainer.\n  // In client-only mode, this function is a noop.\n  populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);\n  if (isDirectiveHost(tNode)) {\n    createDirectivesInstances(declarationTView, declarationLView, tNode);\n  }\n  if (localRefsIndex != null) {\n    saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n  }\n  return tNode;\n}\n/**\n * Creates an LContainer for an ng-template (dynamically-inserted view), e.g.\n *\n * <ng-template #foo>\n *    <div></div>\n * </ng-template>\n *\n * @param index The index of the container in the data array\n * @param templateFn Inline template\n * @param decls The number of nodes, local refs, and pipes for this template\n * @param vars The number of bindings for this template\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param localRefs Index of the local references in the `consts` array.\n * @param localRefExtractor A function which extracts local-refs values from the template.\n *        Defaults to the current element associated with the local-ref.\n *\n * @codeGenApi\n */\nfunction ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n  const lView = getLView();\n  const tView = getTView();\n  const attrs = getConstant(tView.consts, attrsIndex);\n  declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor);\n  return ɵɵtemplate;\n}\nlet _locateOrCreateContainerAnchor = createContainerAnchorImpl;\n/**\n * Regular creation mode for LContainers and their anchor (comment) nodes.\n */\nfunction createContainerAnchorImpl(tView, lView, tNode, index) {\n  lastNodeWasCreated(true);\n  return lView[RENDERER].createComment(ngDevMode ? 'container' : '');\n}\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode for LContainers and their\n * anchor (comment) nodes.\n */\nfunction locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createContainerAnchorImpl(tView, lView, tNode, index);\n  }\n  const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;\n  // Apply `ssrId` value to the underlying TView if it was not previously set.\n  //\n  // There might be situations when the same component is present in a template\n  // multiple times and some instances are opted-out of using hydration via\n  // `ngSkipHydration` attribute. In this scenario, at the time a TView is created,\n  // the `ssrId` might be `null` (if the first component is opted-out of hydration).\n  // The code below makes sure that the `ssrId` is applied to the TView if it's still\n  // `null` and verifies we never try to override it with a different value.\n  if (ssrId !== null && tNode.tView !== null) {\n    if (tNode.tView.ssrId === null) {\n      tNode.tView.ssrId = ssrId;\n    } else {\n      ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, 'Unexpected value of the `ssrId` for this TView');\n    }\n  }\n  // Hydration mode, looking up existing elements in DOM.\n  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n  setSegmentHead(hydrationInfo, index, currentRNode);\n  const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);\n  const comment = siblingAfter(viewContainerSize, currentRNode);\n  if (ngDevMode) {\n    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n    markRNodeAsClaimedByHydration(comment);\n  }\n  return comment;\n}\nfunction enableLocateOrCreateContainerAnchorImpl() {\n  _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;\n}\n\n/**\n * Helper function to schedule a callback to be invoked when a browser becomes idle.\n *\n * @param callback A function to be invoked when a browser becomes idle.\n * @param injector injector for the app\n */\nfunction onIdle(callback, injector) {\n  const scheduler = injector.get(IdleScheduler);\n  const cleanupFn = () => scheduler.remove(callback);\n  scheduler.add(callback);\n  return cleanupFn;\n}\n/**\n * Use shims for the `requestIdleCallback` and `cancelIdleCallback` functions for\n * environments where those functions are not available (e.g. Node.js and Safari).\n *\n * Note: we wrap the `requestIdleCallback` call into a function, so that it can be\n * overridden/mocked in test environment and picked up by the runtime code.\n */\nconst _requestIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : setTimeout;\nconst _cancelIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? cancelIdleCallback : clearTimeout;\n/**\n * Helper service to schedule `requestIdleCallback`s for batches of defer blocks,\n * to avoid calling `requestIdleCallback` for each defer block (e.g. if\n * defer blocks are defined inside a for loop).\n */\nclass IdleScheduler {\n  // Indicates whether current callbacks are being invoked.\n  executingCallbacks = false;\n  // Currently scheduled idle callback id.\n  idleId = null;\n  // Set of callbacks to be invoked next.\n  current = new Set();\n  // Set of callbacks collected while invoking current set of callbacks.\n  // Those callbacks are scheduled for the next idle period.\n  deferred = new Set();\n  ngZone = inject(NgZone);\n  requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);\n  cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);\n  add(callback) {\n    const target = this.executingCallbacks ? this.deferred : this.current;\n    target.add(callback);\n    if (this.idleId === null) {\n      this.scheduleIdleCallback();\n    }\n  }\n  remove(callback) {\n    const {\n      current,\n      deferred\n    } = this;\n    current.delete(callback);\n    deferred.delete(callback);\n    // If the last callback was removed and there is a pending\n    // idle callback - cancel it.\n    if (current.size === 0 && deferred.size === 0) {\n      this.cancelIdleCallback();\n    }\n  }\n  scheduleIdleCallback() {\n    const callback = () => {\n      this.cancelIdleCallback();\n      this.executingCallbacks = true;\n      for (const callback of this.current) {\n        callback();\n      }\n      this.current.clear();\n      this.executingCallbacks = false;\n      // If there are any callbacks added during an invocation\n      // of the current ones - make them \"current\" and schedule\n      // a new idle callback.\n      if (this.deferred.size > 0) {\n        for (const callback of this.deferred) {\n          this.current.add(callback);\n        }\n        this.deferred.clear();\n        this.scheduleIdleCallback();\n      }\n    };\n    // Ensure that the callback runs in the NgZone since\n    // the `requestIdleCallback` is not currently patched by Zone.js.\n    this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));\n  }\n  cancelIdleCallback() {\n    if (this.idleId !== null) {\n      this.cancelIdleCallbackFn(this.idleId);\n      this.idleId = null;\n    }\n  }\n  ngOnDestroy() {\n    this.cancelIdleCallback();\n    this.current.clear();\n    this.deferred.clear();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: IdleScheduler,\n    providedIn: 'root',\n    factory: () => new IdleScheduler()\n  });\n}\n\n/**\n * Returns a function that captures a provided delay.\n * Invoking the returned function schedules a trigger.\n */\nfunction onTimer(delay) {\n  return (callback, injector) => scheduleTimerTrigger(delay, callback, injector);\n}\n/**\n * Schedules a callback to be invoked after a given timeout.\n *\n * @param delay A number of ms to wait until firing a callback.\n * @param callback A function to be invoked after a timeout.\n * @param injector injector for the app.\n */\nfunction scheduleTimerTrigger(delay, callback, injector) {\n  const scheduler = injector.get(TimerScheduler);\n  const cleanupFn = () => scheduler.remove(callback);\n  scheduler.add(delay, callback);\n  return cleanupFn;\n}\n/**\n * Helper service to schedule `setTimeout`s for batches of defer blocks,\n * to avoid calling `setTimeout` for each defer block (e.g. if defer blocks\n * are created inside a for loop).\n */\nclass TimerScheduler {\n  // Indicates whether current callbacks are being invoked.\n  executingCallbacks = false;\n  // Currently scheduled `setTimeout` id.\n  timeoutId = null;\n  // When currently scheduled timer would fire.\n  invokeTimerAt = null;\n  // List of callbacks to be invoked.\n  // For each callback we also store a timestamp on when the callback\n  // should be invoked. We store timestamps and callback functions\n  // in a flat array to avoid creating new objects for each entry.\n  // [timestamp1, callback1, timestamp2, callback2, ...]\n  current = [];\n  // List of callbacks collected while invoking current set of callbacks.\n  // Those callbacks are added to the \"current\" queue at the end of\n  // the current callback invocation. The shape of this list is the same\n  // as the shape of the `current` list.\n  deferred = [];\n  add(delay, callback) {\n    const target = this.executingCallbacks ? this.deferred : this.current;\n    this.addToQueue(target, Date.now() + delay, callback);\n    this.scheduleTimer();\n  }\n  remove(callback) {\n    const {\n      current,\n      deferred\n    } = this;\n    const callbackIndex = this.removeFromQueue(current, callback);\n    if (callbackIndex === -1) {\n      // Try cleaning up deferred queue only in case\n      // we didn't find a callback in the \"current\" queue.\n      this.removeFromQueue(deferred, callback);\n    }\n    // If the last callback was removed and there is a pending timeout - cancel it.\n    if (current.length === 0 && deferred.length === 0) {\n      this.clearTimeout();\n    }\n  }\n  addToQueue(target, invokeAt, callback) {\n    let insertAtIndex = target.length;\n    for (let i = 0; i < target.length; i += 2) {\n      const invokeQueuedCallbackAt = target[i];\n      if (invokeQueuedCallbackAt > invokeAt) {\n        // We've reached a first timer that is scheduled\n        // for a later time than what we are trying to insert.\n        // This is the location at which we need to insert,\n        // no need to iterate further.\n        insertAtIndex = i;\n        break;\n      }\n    }\n    arrayInsert2(target, insertAtIndex, invokeAt, callback);\n  }\n  removeFromQueue(target, callback) {\n    let index = -1;\n    for (let i = 0; i < target.length; i += 2) {\n      const queuedCallback = target[i + 1];\n      if (queuedCallback === callback) {\n        index = i;\n        break;\n      }\n    }\n    if (index > -1) {\n      // Remove 2 elements: a timestamp slot and\n      // the following slot with a callback function.\n      arraySplice(target, index, 2);\n    }\n    return index;\n  }\n  scheduleTimer() {\n    const callback = () => {\n      this.clearTimeout();\n      this.executingCallbacks = true;\n      // Clone the current state of the queue, since it might be altered\n      // as we invoke callbacks.\n      const current = [...this.current];\n      // Invoke callbacks that were scheduled to run before the current time.\n      const now = Date.now();\n      for (let i = 0; i < current.length; i += 2) {\n        const invokeAt = current[i];\n        const callback = current[i + 1];\n        if (invokeAt <= now) {\n          callback();\n        } else {\n          // We've reached a timer that should not be invoked yet.\n          break;\n        }\n      }\n      // The state of the queue might've changed after callbacks invocation,\n      // run the cleanup logic based on the *current* state of the queue.\n      let lastCallbackIndex = -1;\n      for (let i = 0; i < this.current.length; i += 2) {\n        const invokeAt = this.current[i];\n        if (invokeAt <= now) {\n          // Add +1 to account for a callback function that\n          // goes after the timestamp in events array.\n          lastCallbackIndex = i + 1;\n        } else {\n          // We've reached a timer that should not be invoked yet.\n          break;\n        }\n      }\n      if (lastCallbackIndex >= 0) {\n        arraySplice(this.current, 0, lastCallbackIndex + 1);\n      }\n      this.executingCallbacks = false;\n      // If there are any callbacks added during an invocation\n      // of the current ones - move them over to the \"current\"\n      // queue.\n      if (this.deferred.length > 0) {\n        for (let i = 0; i < this.deferred.length; i += 2) {\n          const invokeAt = this.deferred[i];\n          const callback = this.deferred[i + 1];\n          this.addToQueue(this.current, invokeAt, callback);\n        }\n        this.deferred.length = 0;\n      }\n      this.scheduleTimer();\n    };\n    // Avoid running timer callbacks more than once per\n    // average frame duration. This is needed for better\n    // batching and to avoid kicking off excessive change\n    // detection cycles.\n    const FRAME_DURATION_MS = 16; // 1000ms / 60fps\n    if (this.current.length > 0) {\n      const now = Date.now();\n      // First element in the queue points at the timestamp\n      // of the first (earliest) event.\n      const invokeAt = this.current[0];\n      if (this.timeoutId === null ||\n      // Reschedule a timer in case a queue contains an item with\n      // an earlier timestamp and the delta is more than an average\n      // frame duration.\n      this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {\n        // There was a timeout already, but an earlier event was added\n        // into the queue. In this case we drop an old timer and setup\n        // a new one with an updated (smaller) timeout.\n        this.clearTimeout();\n        const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);\n        this.invokeTimerAt = invokeAt;\n        this.timeoutId = setTimeout(callback, timeout);\n      }\n    }\n  }\n  clearTimeout() {\n    if (this.timeoutId !== null) {\n      clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n  }\n  ngOnDestroy() {\n    this.clearTimeout();\n    this.current.length = 0;\n    this.deferred.length = 0;\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: TimerScheduler,\n    providedIn: 'root',\n    factory: () => new TimerScheduler()\n  });\n}\n\n/**\n * A service used by the framework to create and cache injector instances.\n *\n * This service is used to create a single injector instance for each defer\n * block definition, to avoid creating an injector for each defer block instance\n * of a certain type.\n */\nclass CachedInjectorService {\n  cachedInjectors = new Map();\n  getOrCreateInjector(key, parentInjector, providers, debugName) {\n    if (!this.cachedInjectors.has(key)) {\n      const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;\n      this.cachedInjectors.set(key, injector);\n    }\n    return this.cachedInjectors.get(key);\n  }\n  ngOnDestroy() {\n    try {\n      for (const injector of this.cachedInjectors.values()) {\n        if (injector !== null) {\n          injector.destroy();\n        }\n      }\n    } finally {\n      this.cachedInjectors.clear();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: CachedInjectorService,\n    providedIn: 'environment',\n    factory: () => new CachedInjectorService()\n  });\n}\n\n/**\n * **INTERNAL**, avoid referencing it in application code.\n * *\n * Injector token that allows to provide `DeferBlockDependencyInterceptor` class\n * implementation.\n *\n * This token is only injected in devMode\n */\nconst DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');\n/**\n * **INTERNAL**, token used for configuring defer block behavior.\n */\nconst DEFER_BLOCK_CONFIG = new InjectionToken(ngDevMode ? 'DEFER_BLOCK_CONFIG' : '');\n/**\n * Checks whether there is a cached injector associated with a given defer block\n * declaration and returns if it exists. If there is no cached injector present -\n * creates a new injector and stores in the cache.\n */\nfunction getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {\n  return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? 'DeferBlock Injector' : '');\n}\n/** Injector Helpers */\n/**\n * Creates a new injector, which contains providers collected from dependencies (NgModules) of\n * defer-loaded components. This function detects different types of parent injectors and creates\n * a new injector based on that.\n */\nfunction createDeferBlockInjector(parentInjector, tDetails, providers) {\n  // Check if the parent injector is an instance of a `ChainedInjector`.\n  //\n  // In this case, we retain the shape of the injector and use a newly created\n  // `EnvironmentInjector` as a parent in the `ChainedInjector`. That is needed to\n  // make sure that the primary injector gets consulted first (since it's typically\n  // a NodeInjector) and `EnvironmentInjector` tree is consulted after that.\n  if (parentInjector instanceof ChainedInjector) {\n    const origInjector = parentInjector.injector;\n    // Guaranteed to be an environment injector\n    const parentEnvInjector = parentInjector.parentInjector;\n    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n    return new ChainedInjector(origInjector, envInjector);\n  }\n  const parentEnvInjector = parentInjector.get(EnvironmentInjector);\n  // If the `parentInjector` is *not* an `EnvironmentInjector` - we need to create\n  // a new `ChainedInjector` with the following setup:\n  //\n  //  - the provided `parentInjector` becomes a primary injector\n  //  - an existing (real) `EnvironmentInjector` becomes a parent injector for\n  //    a newly-created one, which contains extra providers\n  //\n  // So the final order in which injectors would be consulted in this case would look like this:\n  //\n  //  1. Provided `parentInjector`\n  //  2. Newly-created `EnvironmentInjector` with extra providers\n  //  3. `EnvironmentInjector` from the `parentInjector`\n  if (parentEnvInjector !== parentInjector) {\n    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n    return new ChainedInjector(parentInjector, envInjector);\n  }\n  // The `parentInjector` is an instance of an `EnvironmentInjector`.\n  // No need for special handling, we can use `parentInjector` as a\n  // parent injector directly.\n  return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);\n}\n/** Rendering Helpers */\n/**\n * Transitions a defer block to the new state. Updates the  necessary\n * data structures and renders corresponding block.\n *\n * @param newState New state that should be applied to the defer block.\n * @param tNode TNode that represents a defer block.\n * @param lContainer Represents an instance of a defer block.\n * @param skipTimerScheduling Indicates that `@loading` and `@placeholder` block\n *   should be rendered immediately, even if they have `after` or `minimum` config\n *   options setup. This flag to needed for testing APIs to transition defer block\n *   between states via `DeferFixture.render` method.\n */\nfunction renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {\n  const hostLView = lContainer[PARENT];\n  const hostTView = hostLView[TVIEW];\n  // Check if this view is not destroyed. Since the loading process was async,\n  // the view might end up being destroyed by the time rendering happens.\n  if (isDestroyed(hostLView)) return;\n  // Make sure this TNode belongs to TView that represents host LView.\n  ngDevMode && assertTNodeForLView(tNode, hostLView);\n  const lDetails = getLDeferBlockDetails(hostLView, tNode);\n  ngDevMode && assertDefined(lDetails, 'Expected a defer block state defined');\n  const currentState = lDetails[DEFER_BLOCK_STATE];\n  const ssrState = lDetails[SSR_BLOCK_STATE];\n  if (ssrState !== null && newState < ssrState) {\n    return; // trying to render a previous state, exit\n  }\n  if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {\n    const tDetails = getTDeferBlockDetails(hostTView, tNode);\n    // Skips scheduling on the server since it can delay the server response.\n    const needsScheduling = !skipTimerScheduling && (typeof ngServerMode === 'undefined' || !ngServerMode) && (getLoadingBlockAfter(tDetails) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Loading) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Placeholder));\n    if (ngDevMode && needsScheduling) {\n      assertDefined(applyDeferBlockStateWithSchedulingImpl, 'Expected scheduling function to be defined');\n    }\n    const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;\n    try {\n      applyStateFn(newState, lDetails, lContainer, tNode, hostLView);\n    } catch (error) {\n      handleError(hostLView, error);\n    }\n  }\n}\nfunction findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {\n  // Find matching view based on serialized defer block state.\n  return lContainer[DEHYDRATED_VIEWS]?.find(view => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null;\n}\n/**\n * Applies changes to the DOM to reflect a given state.\n */\nfunction applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {\n  const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);\n  if (stateTmplIndex !== null) {\n    lDetails[DEFER_BLOCK_STATE] = newState;\n    const hostTView = hostLView[TVIEW];\n    const adjustedIndex = stateTmplIndex + HEADER_OFFSET;\n    // The TNode that represents a template that will activated in the defer block\n    const activeBlockTNode = getTNode(hostTView, adjustedIndex);\n    // There is only 1 view that can be present in an LContainer that\n    // represents a defer block, so always refer to the first one.\n    const viewIndex = 0;\n    removeLViewFromLContainer(lContainer, viewIndex);\n    let injector;\n    if (newState === DeferBlockState.Complete) {\n      // When we render a defer block in completed state, there might be\n      // newly loaded standalone components used within the block, which may\n      // import NgModules with providers. In order to make those providers\n      // available for components declared in that NgModule, we create an instance\n      // of an environment injector to host those providers and pass this injector\n      // to the logic that creates a view.\n      const tDetails = getTDeferBlockDetails(hostTView, tNode);\n      const providers = tDetails.providers;\n      if (providers && providers.length > 0) {\n        injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);\n      }\n    }\n    const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);\n    // Erase dehydrated view info, so that it's not removed later\n    // by post-hydration cleanup process.\n    lContainer[DEHYDRATED_VIEWS] = null;\n    const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {\n      injector,\n      dehydratedView\n    });\n    addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));\n    markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);\n    // TODO(incremental-hydration):\n    // - what if we had some views in `lContainer[DEHYDRATED_VIEWS]`, but\n    //   we didn't find a view that matches the expected state?\n    // - for example, handle a situation when a block was in the \"completed\" state\n    //   on the server, but the loading failing on the client. How do we reconcile and cleanup?\n    if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n      for (const callback of lDetails[ON_COMPLETE_FNS]) {\n        callback();\n      }\n      lDetails[ON_COMPLETE_FNS] = null;\n    }\n  }\n}\n/**\n * Extends the `applyDeferBlockState` with timer-based scheduling.\n * This function becomes available on a page if there are defer blocks\n * that use `after` or `minimum` parameters in the `@loading` or\n * `@placeholder` blocks.\n */\nfunction applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {\n  const now = Date.now();\n  const hostTView = hostLView[TVIEW];\n  const tDetails = getTDeferBlockDetails(hostTView, tNode);\n  if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {\n    lDetails[STATE_IS_FROZEN_UNTIL] = null;\n    const loadingAfter = getLoadingBlockAfter(tDetails);\n    const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;\n    if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {\n      // Trying to render loading, but it has an `after` config,\n      // so schedule an update action after a timeout.\n      lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n      const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);\n      lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;\n    } else {\n      // If we transition to a complete or an error state and there is a pending\n      // operation to render loading after a timeout - invoke a cleanup operation,\n      // which stops the timer.\n      if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {\n        lDetails[LOADING_AFTER_CLEANUP_FN]();\n        lDetails[LOADING_AFTER_CLEANUP_FN] = null;\n        lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n      }\n      applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);\n      const duration = getMinimumDurationForState(tDetails, newState);\n      if (duration !== null) {\n        lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;\n        scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);\n      }\n    }\n  } else {\n    // We are still rendering the previous state.\n    // Update the `NEXT_DEFER_BLOCK_STATE`, which would be\n    // picked up once it's time to transition to the next state.\n    lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n  }\n}\n/**\n * Schedules an update operation after a specified timeout.\n */\nfunction scheduleDeferBlockUpdate(timeout, lDetails, tNode, lContainer, hostLView) {\n  const callback = () => {\n    const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];\n    lDetails[STATE_IS_FROZEN_UNTIL] = null;\n    lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n    if (nextState !== null) {\n      renderDeferBlockState(nextState, tNode, lContainer);\n    }\n  };\n  return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);\n}\n/**\n * Checks whether we can transition to the next state.\n *\n * We transition to the next state if the previous state was represented\n * with a number that is less than the next state. For example, if the current\n * state is \"loading\" (represented as `1`), we should not show a placeholder\n * (represented as `0`), but we can show a completed state (represented as `2`)\n * or an error state (represented as `3`).\n */\nfunction isValidStateChange(currentState, newState) {\n  return currentState < newState;\n}\n/** Utility function to render placeholder content (if present) */\nfunction renderPlaceholder(lView, tNode) {\n  const lContainer = lView[tNode.index];\n  ngDevMode && assertLContainer(lContainer);\n  renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);\n}\n/**\n * Subscribes to the \"loading\" Promise and renders corresponding defer sub-block,\n * based on the loading results.\n *\n * @param lContainer Represents an instance of a defer block.\n * @param tNode Represents defer block info shared across all instances.\n */\nfunction renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {\n  ngDevMode && assertDefined(tDetails.loadingPromise, 'Expected loading Promise to exist on this defer block');\n  tDetails.loadingPromise.then(() => {\n    if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {\n      ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n      // Everything is loaded, show the primary block content\n      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n    } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {\n      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n    }\n  });\n}\n/**\n * Reference to the timer-based scheduler implementation of defer block state\n * rendering method. It's used to make timer-based scheduling tree-shakable.\n * If `minimum` or `after` parameters are used, compiler generates an extra\n * argument for the `ɵɵdefer` instruction, which references a timer-based\n * implementation.\n */\nlet applyDeferBlockStateWithSchedulingImpl = null;\n/**\n * Enables timer-related scheduling if `after` or `minimum` parameters are setup\n * on the `@loading` or `@placeholder` blocks.\n */\nfunction ɵɵdeferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {\n  const tViewConsts = tView.consts;\n  if (placeholderConfigIndex != null) {\n    tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);\n  }\n  if (loadingConfigIndex != null) {\n    tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);\n  }\n  // Enable implementation that supports timer-based scheduling.\n  if (applyDeferBlockStateWithSchedulingImpl === null) {\n    applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;\n  }\n}\n\n/**\n * The name of a field that Angular monkey-patches onto a component\n * class to store a function that loads defer-loadable dependencies\n * and applies metadata to a class.\n */\nconst ASYNC_COMPONENT_METADATA_FN = '__ngAsyncComponentMetadataFn__';\n/**\n * If a given component has unresolved async metadata - returns a reference\n * to a function that applies component metadata after resolving defer-loadable\n * dependencies. Otherwise - this function returns `null`.\n */\nfunction getAsyncClassMetadataFn(type) {\n  const componentClass = type; // cast to `any`, so that we can read a monkey-patched field\n  return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;\n}\n/**\n * Handles the process of applying metadata info to a component class in case\n * component template has defer blocks (thus some dependencies became deferrable).\n *\n * @param type Component class where metadata should be added\n * @param dependencyLoaderFn Function that loads dependencies\n * @param metadataSetterFn Function that forms a scope in which the `setClassMetadata` is invoked\n */\nfunction setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {\n  const componentClass = type; // cast to `any`, so that we can monkey-patch it\n  componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then(dependencies => {\n    metadataSetterFn(...dependencies);\n    // Metadata is now set, reset field value to indicate that this component\n    // can by used/compiled synchronously.\n    componentClass[ASYNC_COMPONENT_METADATA_FN] = null;\n    return dependencies;\n  });\n  return componentClass[ASYNC_COMPONENT_METADATA_FN];\n}\n/**\n * Adds decorator, constructor, and property metadata to a given type via static metadata fields\n * on the type.\n *\n * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.\n *\n * Calls to `setClassMetadata` can be guarded by ngDevMode, resulting in the metadata assignments\n * being tree-shaken away during production builds.\n */\nfunction setClassMetadata(type, decorators, ctorParameters, propDecorators) {\n  return noSideEffects(() => {\n    const clazz = type;\n    if (decorators !== null) {\n      if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {\n        clazz.decorators.push(...decorators);\n      } else {\n        clazz.decorators = decorators;\n      }\n    }\n    if (ctorParameters !== null) {\n      // Rather than merging, clobber the existing parameters. If other projects exist which\n      // use tsickle-style annotations and reflect over them in the same way, this could\n      // cause issues, but that is vanishingly unlikely.\n      clazz.ctorParameters = ctorParameters;\n    }\n    if (propDecorators !== null) {\n      // The property decorator objects are merged as it is possible different fields have\n      // different decorator types. Decorators on individual fields are not merged, as it's\n      // also incredibly unlikely that a field will be decorated both with an Angular\n      // decorator and a non-Angular decorator that's also been downleveled.\n      if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {\n        clazz.propDecorators = {\n          ...clazz.propDecorators,\n          ...propDecorators\n        };\n      } else {\n        clazz.propDecorators = propDecorators;\n      }\n    }\n  });\n}\n\n/*\n * This file exists to support compilation of @angular/core in Ivy mode.\n *\n * When the Angular compiler processes a compilation unit, it normally writes imports to\n * @angular/core. When compiling the core package itself this strategy isn't usable. Instead, the\n * compiler writes imports to this file.\n *\n * Only a subset of such imports are supported - core is not allowed to declare components or pipes.\n * A check in ngtsc's `R3SymbolsImportRewriter` validates this condition. The rewriter is only used\n * when compiling @angular/core and is responsible for translating an external name (prefixed with\n * ɵ) to the internal symbol name as exported below.\n *\n * The below symbols are used for @Injectable and @NgModule compilation.\n */\n/**\n * The existence of this constant (in this particular file) informs the Angular compiler that the\n * current program is actually @angular/core, which needs to be compiled specially.\n */\nconst ITS_JUST_ANGULAR = true;\nclass Console {\n  log(message) {\n    // tslint:disable-next-line:no-console\n    console.log(message);\n  }\n  // Note: for reporting errors use `DOM.logError()` as it is platform specific\n  warn(message) {\n    // tslint:disable-next-line:no-console\n    console.warn(message);\n  }\n  static ɵfac = function Console_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Console)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Console,\n    factory: Console.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Console, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], null, null);\n})();\n\n/**\n * These are the data structures that our framework injector profiler will fill with data in order\n * to support DI debugging APIs.\n *\n * resolverToTokenToDependencies: Maps an injector to a Map of tokens to an Array of\n * dependencies. Injector -> Token -> Dependencies This is used to support the\n * getDependenciesFromInjectable API, which takes in an injector and a token and returns it's\n * dependencies.\n *\n * resolverToProviders: Maps a DI resolver (an Injector or a TNode) to the providers configured\n * within it This is used to support the getInjectorProviders API, which takes in an injector and\n * returns the providers that it was configured with. Note that for the element injector case we\n * use the TNode instead of the LView as the DI resolver. This is because the registration of\n * providers happens only once per type of TNode. If an injector is created with an identical TNode,\n * the providers for that injector will not be reconfigured.\n *\n * standaloneInjectorToComponent: Maps the injector of a standalone component to the standalone\n * component that it is associated with. Used in the getInjectorProviders API, specificially in the\n * discovery of import paths for each provider. This is necessary because the imports array of a\n * standalone component is processed and configured in its standalone injector, but exists within\n * the component's definition. Because getInjectorProviders takes in an injector, if that injector\n * is the injector of a standalone component, we need to be able to discover the place where the\n * imports array is located (the component) in order to flatten the imports array within it to\n * discover all of it's providers.\n *\n *\n * All of these data structures are instantiated with WeakMaps. This will ensure that the presence\n * of any object in the keys of these maps does not prevent the garbage collector from collecting\n * those objects. Because of this property of WeakMaps, these data structures will never be the\n * source of a memory leak.\n *\n * An example of this advantage: When components are destroyed, we don't need to do\n * any additional work to remove that component from our mappings.\n *\n */\nclass DIDebugData {\n  resolverToTokenToDependencies = new WeakMap();\n  resolverToProviders = new WeakMap();\n  standaloneInjectorToComponent = new WeakMap();\n  reset() {\n    this.resolverToTokenToDependencies = new WeakMap();\n    this.resolverToProviders = new WeakMap();\n    this.standaloneInjectorToComponent = new WeakMap();\n  }\n}\nlet frameworkDIDebugData = new DIDebugData();\nfunction getFrameworkDIDebugData() {\n  return frameworkDIDebugData;\n}\n/**\n * Initalize default handling of injector events. This handling parses events\n * as they are emitted and constructs the data structures necessary to support\n * some of debug APIs.\n *\n * See handleInjectEvent, handleCreateEvent and handleProviderConfiguredEvent\n * for descriptions of each handler\n *\n * Supported APIs:\n *               - getDependenciesFromInjectable\n *               - getInjectorProviders\n */\nfunction setupFrameworkInjectorProfiler() {\n  frameworkDIDebugData.reset();\n  setInjectorProfiler(injectorProfilerEvent => handleInjectorProfilerEvent(injectorProfilerEvent));\n}\nfunction handleInjectorProfilerEvent(injectorProfilerEvent) {\n  const {\n    context,\n    type\n  } = injectorProfilerEvent;\n  if (type === 0 /* InjectorProfilerEventType.Inject */) {\n    handleInjectEvent(context, injectorProfilerEvent.service);\n  } else if (type === 1 /* InjectorProfilerEventType.InstanceCreatedByInjector */) {\n    handleInstanceCreatedByInjectorEvent(context, injectorProfilerEvent.instance);\n  } else if (type === 2 /* InjectorProfilerEventType.ProviderConfigured */) {\n    handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);\n  }\n}\n/**\n *\n * Stores the injected service in frameworkDIDebugData.resolverToTokenToDependencies\n * based on it's injector and token.\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data InjectedService the service associated with this inject event.\n *\n */\nfunction handleInjectEvent(context, data) {\n  const diResolver = getDIResolver(context.injector);\n  if (diResolver === null) {\n    throwError('An Inject event must be run within an injection context.');\n  }\n  const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;\n  if (!diResolverToInstantiatedToken.has(diResolver)) {\n    diResolverToInstantiatedToken.set(diResolver, new WeakMap());\n  }\n  // if token is a primitive type, ignore this event. We do this because we cannot keep track of\n  // non-primitive tokens in WeakMaps since they are not garbage collectable.\n  if (!canBeHeldWeakly(context.token)) {\n    return;\n  }\n  const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);\n  if (!instantiatedTokenToDependencies.has(context.token)) {\n    instantiatedTokenToDependencies.set(context.token, []);\n  }\n  const {\n    token,\n    value,\n    flags\n  } = data;\n  assertDefined(context.token, 'Injector profiler context token is undefined.');\n  const dependencies = instantiatedTokenToDependencies.get(context.token);\n  assertDefined(dependencies, 'Could not resolve dependencies for token.');\n  if (context.injector instanceof NodeInjector) {\n    dependencies.push({\n      token,\n      value,\n      flags,\n      injectedIn: getNodeInjectorContext(context.injector)\n    });\n  } else {\n    dependencies.push({\n      token,\n      value,\n      flags\n    });\n  }\n}\n/**\n *\n * Returns the LView and TNode associated with a NodeInjector. Returns undefined if the injector\n * is not a NodeInjector.\n *\n * @param injector\n * @returns {lView: LView, tNode: TNode}|undefined\n */\nfunction getNodeInjectorContext(injector) {\n  if (!(injector instanceof NodeInjector)) {\n    throwError('getNodeInjectorContext must be called with a NodeInjector');\n  }\n  const lView = getNodeInjectorLView(injector);\n  const tNode = getNodeInjectorTNode(injector);\n  if (tNode === null) {\n    return;\n  }\n  assertTNodeForLView(tNode, lView);\n  return {\n    lView,\n    tNode\n  };\n}\n/**\n *\n * If the created instance is an instance of a standalone component, maps the injector to that\n * standalone component in frameworkDIDebugData.standaloneInjectorToComponent\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data InjectorCreatedInstance an object containing the instance that was just created\n *\n */\nfunction handleInstanceCreatedByInjectorEvent(context, data) {\n  const {\n    value\n  } = data;\n  if (getDIResolver(context.injector) === null) {\n    throwError('An InjectorCreatedInstance event must be run within an injection context.');\n  }\n  // if our value is an instance of a standalone component, map the injector of that standalone\n  // component to the component class. Otherwise, this event is a noop.\n  let standaloneComponent = undefined;\n  if (typeof value === 'object') {\n    standaloneComponent = value?.constructor;\n  }\n  // We want to also cover if `standaloneComponent === null` in addition to `undefined`\n  if (standaloneComponent == undefined || !isStandaloneComponent(standaloneComponent)) {\n    return;\n  }\n  const environmentInjector = context.injector.get(EnvironmentInjector, null, {\n    optional: true\n  });\n  // Standalone components should have an environment injector. If one cannot be\n  // found we may be in a test case for low level functionality that did not explicitly\n  // setup this injector. In those cases, we simply ignore this event.\n  if (environmentInjector === null) {\n    return;\n  }\n  const {\n    standaloneInjectorToComponent\n  } = frameworkDIDebugData;\n  // If our injector has already been mapped, as is the case\n  // when a standalone component imports another standalone component,\n  // we consider the original component (the component doing the importing)\n  // as the component connected to our injector.\n  if (standaloneInjectorToComponent.has(environmentInjector)) {\n    return;\n  }\n  // If our injector hasn't been mapped, then we map it to the standalone component\n  standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);\n}\nfunction isStandaloneComponent(value) {\n  const def = getComponentDef(value);\n  return !!def?.standalone;\n}\n/**\n *\n * Stores the emitted ProviderRecords from the InjectorProfilerEventType.ProviderConfigured\n * event in frameworkDIDebugData.resolverToProviders\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data ProviderRecord an object containing the instance that was just created\n *\n */\nfunction handleProviderConfiguredEvent(context, data) {\n  const {\n    resolverToProviders\n  } = frameworkDIDebugData;\n  let diResolver;\n  if (context?.injector instanceof NodeInjector) {\n    diResolver = getNodeInjectorTNode(context.injector);\n  } else {\n    diResolver = context.injector;\n  }\n  if (diResolver === null) {\n    throwError('A ProviderConfigured event must be run within an injection context.');\n  }\n  if (!resolverToProviders.has(diResolver)) {\n    resolverToProviders.set(diResolver, []);\n  }\n  resolverToProviders.get(diResolver).push(data);\n}\nfunction getDIResolver(injector) {\n  let diResolver = null;\n  if (injector === undefined) {\n    return diResolver;\n  }\n  // We use the LView as the diResolver for NodeInjectors because they\n  // do not persist anywhere in the framework. They are simply wrappers around an LView and a TNode\n  // that do persist. Because of this, we rely on the LView of the NodeInjector in order to use\n  // as a concrete key to represent this injector. If we get the same LView back later, we know\n  // we're looking at the same injector.\n  if (injector instanceof NodeInjector) {\n    diResolver = getNodeInjectorLView(injector);\n  }\n  // Other injectors can be used a keys for a map because their instances\n  // persist\n  else {\n    diResolver = injector;\n  }\n  return diResolver;\n}\n// inspired by\n// https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-canbeheldweakly\nfunction canBeHeldWeakly(value) {\n  // we check for value !== null here because typeof null === 'object\n  return value !== null && (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol');\n}\n\n/**\n * Marks a component for check (in case of OnPush components) and synchronously\n * performs change detection on the application this component belongs to.\n *\n * @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}.\n *\n * @publicApi\n */\nfunction applyChanges(component) {\n  ngDevMode && assertDefined(component, 'component');\n  markViewDirty(getComponentViewByInstance(component), 3 /* NotificationSource.DebugApplyChanges */);\n  getRootComponents(component).forEach(rootComponent => detectChanges(rootComponent));\n}\n/**\n * Synchronously perform change detection on a component (and possibly its sub-components).\n *\n * This function triggers change detection in a synchronous way on a component.\n *\n * @param component The component which the change detection should be performed on.\n */\nfunction detectChanges(component) {\n  const view = getComponentViewByInstance(component);\n  view[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  detectChangesInternal(view);\n}\n\n/**\n * Discovers the dependencies of an injectable instance. Provides DI information about each\n * dependency that the injectable was instantiated with, including where they were provided from.\n *\n * @param injector An injector instance\n * @param token a DI token that was constructed by the given injector instance\n * @returns an object that contains the created instance of token as well as all of the dependencies\n * that it was instantiated with OR undefined if the token was not created within the given\n * injector.\n */\nfunction getDependenciesFromInjectable(injector, token) {\n  // First we check to see if the token given maps to an actual instance in the injector given.\n  // We use `self: true` because we only want to look at the injector we were given.\n  // We use `optional: true` because it's possible that the token we were given was never\n  // constructed by the injector we were given.\n  const instance = injector.get(token, null, {\n    self: true,\n    optional: true\n  });\n  if (instance === null) {\n    throw new Error(`Unable to determine instance of ${token} in given injector`);\n  }\n  const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);\n  const resolutionPath = getInjectorResolutionPath(injector);\n  const dependencies = unformattedDependencies.map(dep => {\n    // injectedIn contains private fields, so we omit it from the response\n    const formattedDependency = {\n      value: dep.value\n    };\n    // convert injection flags to booleans\n    const flags = dep.flags;\n    formattedDependency.flags = {\n      optional: (8 /* InternalInjectFlags.Optional */ & flags) === 8 /* InternalInjectFlags.Optional */,\n      host: (1 /* InternalInjectFlags.Host */ & flags) === 1 /* InternalInjectFlags.Host */,\n      self: (2 /* InternalInjectFlags.Self */ & flags) === 2 /* InternalInjectFlags.Self */,\n      skipSelf: (4 /* InternalInjectFlags.SkipSelf */ & flags) === 4 /* InternalInjectFlags.SkipSelf */\n    };\n    // find the injector that provided the dependency\n    for (let i = 0; i < resolutionPath.length; i++) {\n      const injectorToCheck = resolutionPath[i];\n      // if skipSelf is true we skip the first injector\n      if (i === 0 && formattedDependency.flags.skipSelf) {\n        continue;\n      }\n      // host only applies to NodeInjectors\n      if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {\n        break;\n      }\n      const instance = injectorToCheck.get(dep.token, null, {\n        self: true,\n        optional: true\n      });\n      if (instance !== null) {\n        // if host flag is true we double check that we can get the service from the first element\n        // in the resolution path by using the host flag. This is done to make sure that we've found\n        // the correct providing injector, and not a node injector that is connected to our path via\n        // a router outlet.\n        if (formattedDependency.flags.host) {\n          const firstInjector = resolutionPath[0];\n          const lookupFromFirstInjector = firstInjector.get(dep.token, null, {\n            ...formattedDependency.flags,\n            optional: true\n          });\n          if (lookupFromFirstInjector !== null) {\n            formattedDependency.providedIn = injectorToCheck;\n          }\n          break;\n        }\n        formattedDependency.providedIn = injectorToCheck;\n        break;\n      }\n      // if self is true we stop after the first injector\n      if (i === 0 && formattedDependency.flags.self) {\n        break;\n      }\n    }\n    if (dep.token) formattedDependency.token = dep.token;\n    return formattedDependency;\n  });\n  return {\n    instance,\n    dependencies\n  };\n}\nfunction getDependenciesForTokenInInjector(token, injector) {\n  const {\n    resolverToTokenToDependencies\n  } = getFrameworkDIDebugData();\n  if (!(injector instanceof NodeInjector)) {\n    return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];\n  }\n  const lView = getNodeInjectorLView(injector);\n  const tokenDependencyMap = resolverToTokenToDependencies.get(lView);\n  const dependencies = tokenDependencyMap?.get(token) ?? [];\n  // In the NodeInjector case, all injections for every node are stored in the same lView.\n  // We use the injectedIn field of the dependency to filter out the dependencies that\n  // do not come from the same node as the instance we're looking at.\n  return dependencies.filter(dependency => {\n    const dependencyNode = dependency.injectedIn?.tNode;\n    if (dependencyNode === undefined) {\n      return false;\n    }\n    const instanceNode = getNodeInjectorTNode(injector);\n    assertTNode(dependencyNode);\n    assertTNode(instanceNode);\n    return dependencyNode === instanceNode;\n  });\n}\n/**\n * Gets the class associated with an injector that contains a provider `imports` array in it's\n * definition\n *\n * For Module Injectors this returns the NgModule constructor.\n *\n * For Standalone injectors this returns the standalone component constructor.\n *\n * @param injector Injector an injector instance\n * @returns the constructor where the `imports` array that configures this injector is located\n */\nfunction getProviderImportsContainer(injector) {\n  const {\n    standaloneInjectorToComponent\n  } = getFrameworkDIDebugData();\n  // standalone components configure providers through a component def, so we have to\n  // use the standalone component associated with this injector if Injector represents\n  // a standalone components EnvironmentInjector\n  if (standaloneInjectorToComponent.has(injector)) {\n    return standaloneInjectorToComponent.get(injector);\n  }\n  // Module injectors configure providers through their NgModule def, so we use the\n  // injector to lookup its NgModuleRef and through that grab its instance\n  const defTypeRef = injector.get(NgModuleRef$1, null, {\n    self: true,\n    optional: true\n  });\n  // If we can't find an associated imports container, return null.\n  // This could be the case if this function is called with an R3Injector that does not represent\n  // a standalone component or NgModule.\n  if (defTypeRef === null) {\n    return null;\n  }\n  // In standalone applications, the root environment injector created by bootstrapApplication\n  // may have no associated \"instance\".\n  if (defTypeRef.instance === null) {\n    return null;\n  }\n  return defTypeRef.instance.constructor;\n}\n/**\n * Gets the providers configured on a NodeInjector\n *\n * @param injector A NodeInjector instance\n * @returns ProviderRecord[] an array of objects representing the providers configured on this\n *     injector\n */\nfunction getNodeInjectorProviders(injector) {\n  const diResolver = getNodeInjectorTNode(injector);\n  const {\n    resolverToProviders\n  } = getFrameworkDIDebugData();\n  return resolverToProviders.get(diResolver) ?? [];\n}\n/**\n * Gets a mapping of providers configured on an injector to their import paths\n *\n * ModuleA -> imports ModuleB\n * ModuleB -> imports ModuleC\n * ModuleB -> provides MyServiceA\n * ModuleC -> provides MyServiceB\n *\n * getProviderImportPaths(ModuleA)\n * > Map(2) {\n *   MyServiceA => [ModuleA, ModuleB]\n *   MyServiceB => [ModuleA, ModuleB, ModuleC]\n *  }\n *\n * @param providerImportsContainer constructor of class that contains an `imports` array in it's\n *     definition\n * @returns A Map object that maps providers to an array of constructors representing it's import\n *     path\n *\n */\nfunction getProviderImportPaths(providerImportsContainer) {\n  const providerToPath = new Map();\n  const visitedContainers = new Set();\n  const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);\n  walkProviderTree(providerImportsContainer, visitor, [], new Set());\n  return providerToPath;\n}\n/**\n *\n * Higher order function that returns a visitor for WalkProviderTree\n *\n * Takes in a Map and Set to keep track of the providers and containers\n * visited, so that we can discover the import paths of these providers\n * during the traversal.\n *\n * This visitor takes advantage of the fact that walkProviderTree performs a\n * postorder traversal of the provider tree for the passed in container. Because postorder\n * traversal recursively processes subtrees from leaf nodes until the traversal reaches the root,\n * we write a visitor that constructs provider import paths in reverse.\n *\n *\n * We use the visitedContainers set defined outside this visitor\n * because we want to run some logic only once for\n * each container in the tree. That logic can be described as:\n *\n *\n * 1. for each discovered_provider and discovered_path in the incomplete provider paths we've\n * already discovered\n * 2. get the first container in discovered_path\n * 3. if that first container is in the imports array of the container we're visiting\n *    Then the container we're visiting is also in the import path of discovered_provider, so we\n *    unshift discovered_path with the container we're currently visiting\n *\n *\n * Example Run:\n * ```\n *                 ┌──────────┐\n *                 │containerA│\n *      ┌─imports-─┤          ├──imports─┐\n *      │          │  provA   │          │\n *      │          │  provB   │          │\n *      │          └──────────┘          │\n *      │                                │\n *     ┌▼─────────┐             ┌────────▼─┐\n *     │containerB│             │containerC│\n *     │          │             │          │\n *     │  provD   │             │  provF   │\n *     │  provE   │             │  provG   │\n *     └──────────┘             └──────────┘\n * ```\n *\n * Each step of the traversal,\n *\n * ```\n * visitor(provD, containerB)\n * providerToPath === Map { provD => [containerB] }\n * visitedContainers === Set { containerB }\n *\n * visitor(provE, containerB)\n * providerToPath === Map { provD => [containerB], provE => [containerB] }\n * visitedContainers === Set { containerB }\n *\n * visitor(provF, containerC)\n * providerToPath === Map { provD => [containerB], provE => [containerB], provF => [containerC] }\n * visitedContainers === Set { containerB, containerC }\n *\n * visitor(provG, containerC)\n * providerToPath === Map {\n *   provD => [containerB], provE => [containerB], provF => [containerC], provG => [containerC]\n * }\n * visitedContainers === Set { containerB, containerC }\n *\n * visitor(provA, containerA)\n * providerToPath === Map {\n *   provD => [containerA, containerB],\n *   provE => [containerA, containerB],\n *   provF => [containerA, containerC],\n *   provG => [containerA, containerC],\n *   provA => [containerA]\n * }\n * visitedContainers === Set { containerB, containerC, containerA }\n *\n * visitor(provB, containerA)\n * providerToPath === Map {\n *   provD => [containerA, containerB],\n *   provE => [containerA, containerB],\n *   provF => [containerA, containerC],\n *   provG => [containerA, containerC],\n *   provA => [containerA]\n *   provB => [containerA]\n * }\n * visitedContainers === Set { containerB, containerC, containerA }\n * ```\n *\n * @param providerToPath Map map of providers to paths that this function fills\n * @param visitedContainers Set a set to keep track of the containers we've already visited\n * @return function(provider SingleProvider, container: Type<unknown> | InjectorType<unknown>) =>\n *     void\n */\nfunction walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {\n  return (provider, container) => {\n    // If the provider is not already in the providerToPath map,\n    // add an entry with the provider as the key and an array containing the current container as\n    // the value\n    if (!providerToPath.has(provider)) {\n      providerToPath.set(provider, [container]);\n    }\n    // This block will run exactly once for each container in the import tree.\n    // This is where we run the logic to check the imports array of the current\n    // container to see if it's the next container in the path for our currently\n    // discovered providers.\n    if (!visitedContainers.has(container)) {\n      // Iterate through the providers we've already seen\n      for (const prov of providerToPath.keys()) {\n        const existingImportPath = providerToPath.get(prov);\n        let containerDef = getInjectorDef(container);\n        if (!containerDef) {\n          const ngModule = container.ngModule;\n          containerDef = getInjectorDef(ngModule);\n        }\n        if (!containerDef) {\n          return;\n        }\n        const lastContainerAddedToPath = existingImportPath[0];\n        let isNextStepInPath = false;\n        deepForEach(containerDef.imports, moduleImport => {\n          if (isNextStepInPath) {\n            return;\n          }\n          isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;\n          if (isNextStepInPath) {\n            providerToPath.get(prov)?.unshift(container);\n          }\n        });\n      }\n    }\n    visitedContainers.add(container);\n  };\n}\n/**\n * Gets the providers configured on an EnvironmentInjector\n *\n * @param injector EnvironmentInjector\n * @returns an array of objects representing the providers of the given injector\n */\nfunction getEnvironmentInjectorProviders(injector) {\n  const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];\n  // platform injector has no provider imports container so can we skip trying to\n  // find import paths\n  if (isPlatformInjector(injector)) {\n    return providerRecordsWithoutImportPaths;\n  }\n  const providerImportsContainer = getProviderImportsContainer(injector);\n  if (providerImportsContainer === null) {\n    // We assume that if an environment injector exists without an associated provider imports\n    // container, it was created without such a container. Some examples cases where this could\n    // happen:\n    // - The root injector of a standalone application\n    // - A router injector created by using the providers array in a lazy loaded route\n    // - A manually created injector that is attached to the injector tree\n    // Since each of these cases has no provider container, there is no concept of import paths,\n    // so we can simply return the provider records.\n    return providerRecordsWithoutImportPaths;\n  }\n  const providerToPath = getProviderImportPaths(providerImportsContainer);\n  const providerRecords = [];\n  for (const providerRecord of providerRecordsWithoutImportPaths) {\n    const provider = providerRecord.provider;\n    // Ignore these special providers for now until we have a cleaner way of\n    // determing when they are provided by the framework vs provided by the user.\n    const token = provider.provide;\n    if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {\n      continue;\n    }\n    let importPath = providerToPath.get(provider) ?? [];\n    const def = getComponentDef(providerImportsContainer);\n    const isStandaloneComponent = !!def?.standalone;\n    // We prepend the component constructor in the standalone case\n    // because walkProviderTree does not visit this constructor during it's traversal\n    if (isStandaloneComponent) {\n      importPath = [providerImportsContainer, ...importPath];\n    }\n    providerRecords.push({\n      ...providerRecord,\n      importPath\n    });\n  }\n  return providerRecords;\n}\nfunction isPlatformInjector(injector) {\n  return injector instanceof R3Injector && injector.scopes.has('platform');\n}\n/**\n * Gets the providers configured on an injector.\n *\n * @param injector the injector to lookup the providers of\n * @returns ProviderRecord[] an array of objects representing the providers of the given injector\n */\nfunction getInjectorProviders(injector) {\n  if (injector instanceof NodeInjector) {\n    return getNodeInjectorProviders(injector);\n  } else if (injector instanceof EnvironmentInjector) {\n    return getEnvironmentInjectorProviders(injector);\n  }\n  throwError('getInjectorProviders only supports NodeInjector and EnvironmentInjector');\n}\n/**\n *\n * Given an injector, this function will return\n * an object containing the type and source of the injector.\n *\n * |              | type        | source                                                      |\n * |--------------|-------------|-------------------------------------------------------------|\n * | NodeInjector | element     | DOM element that created this injector                      |\n * | R3Injector   | environment | `injector.source`                                           |\n * | NullInjector | null        | null                                                        |\n *\n * @param injector the Injector to get metadata for\n * @returns an object containing the type and source of the given injector. If the injector metadata\n *     cannot be determined, returns null.\n */\nfunction getInjectorMetadata(injector) {\n  if (injector instanceof NodeInjector) {\n    const lView = getNodeInjectorLView(injector);\n    const tNode = getNodeInjectorTNode(injector);\n    assertTNodeForLView(tNode, lView);\n    return {\n      type: 'element',\n      source: getNativeByTNode(tNode, lView)\n    };\n  }\n  if (injector instanceof R3Injector) {\n    return {\n      type: 'environment',\n      source: injector.source ?? null\n    };\n  }\n  if (injector instanceof NullInjector) {\n    return {\n      type: 'null',\n      source: null\n    };\n  }\n  return null;\n}\nfunction getInjectorResolutionPath(injector) {\n  const resolutionPath = [injector];\n  getInjectorResolutionPathHelper(injector, resolutionPath);\n  return resolutionPath;\n}\nfunction getInjectorResolutionPathHelper(injector, resolutionPath) {\n  const parent = getInjectorParent(injector);\n  // if getInjectorParent can't find a parent, then we've either reached the end\n  // of the path, or we need to move from the Element Injector tree to the\n  // module injector tree using the first injector in our path as the connection point.\n  if (parent === null) {\n    if (injector instanceof NodeInjector) {\n      const firstInjector = resolutionPath[0];\n      if (firstInjector instanceof NodeInjector) {\n        const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);\n        if (moduleInjector === null) {\n          throwError('NodeInjector must have some connection to the module injector tree');\n        }\n        resolutionPath.push(moduleInjector);\n        getInjectorResolutionPathHelper(moduleInjector, resolutionPath);\n      }\n      return resolutionPath;\n    }\n  } else {\n    resolutionPath.push(parent);\n    getInjectorResolutionPathHelper(parent, resolutionPath);\n  }\n  return resolutionPath;\n}\n/**\n * Gets the parent of an injector.\n *\n * This function is not able to make the jump from the Element Injector Tree to the Module\n * injector tree. This is because the \"parent\" (the next step in the reoslution path)\n * of a root NodeInjector is dependent on which NodeInjector ancestor initiated\n * the DI lookup. See getInjectorResolutionPath for a function that can make this jump.\n *\n * In the below diagram:\n * ```ts\n * getInjectorParent(NodeInjectorB)\n *  > NodeInjectorA\n * getInjectorParent(NodeInjectorA) // or getInjectorParent(getInjectorParent(NodeInjectorB))\n *  > null // cannot jump to ModuleInjector tree\n * ```\n *\n * ```\n *                ┌───────┐                ┌───────────────────┐\n *    ┌───────────┤ModuleA├───Injector────►│EnvironmentInjector│\n *    │           └───┬───┘                └───────────────────┘\n *    │               │\n *    │           bootstraps\n *    │               │\n *    │               │\n *    │          ┌────▼─────┐                 ┌─────────────┐\n * declares      │ComponentA├────Injector────►│NodeInjectorA│\n *    │          └────┬─────┘                 └─────▲───────┘\n *    │               │                             │\n *    │            renders                        parent\n *    │               │                             │\n *    │          ┌────▼─────┐                 ┌─────┴───────┐\n *    └─────────►│ComponentB├────Injector────►│NodeInjectorB│\n *               └──────────┘                 └─────────────┘\n *```\n *\n * @param injector an Injector to get the parent of\n * @returns Injector the parent of the given injector\n */\nfunction getInjectorParent(injector) {\n  if (injector instanceof R3Injector) {\n    const parent = injector.parent;\n    if (isRouterOutletInjector(parent)) {\n      // This is a special case for a `ChainedInjector` instance, which represents\n      // a combination of a Router's `OutletInjector` and an EnvironmentInjector,\n      // which represents a `@defer` block. Since the `OutletInjector` doesn't store\n      // any tokens itself, we point to the parent injector instead. See the\n      // `OutletInjector.__ngOutletInjector` field for additional information.\n      return parent.parentInjector;\n    }\n    return parent;\n  }\n  let tNode;\n  let lView;\n  if (injector instanceof NodeInjector) {\n    tNode = getNodeInjectorTNode(injector);\n    lView = getNodeInjectorLView(injector);\n  } else if (injector instanceof NullInjector) {\n    return null;\n  } else if (injector instanceof ChainedInjector) {\n    return injector.parentInjector;\n  } else {\n    throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector');\n  }\n  const parentLocation = getParentInjectorLocation(tNode, lView);\n  if (hasParentInjector(parentLocation)) {\n    const parentInjectorIndex = getParentInjectorIndex(parentLocation);\n    const parentLView = getParentInjectorView(parentLocation, lView);\n    const parentTView = parentLView[TVIEW];\n    const parentTNode = parentTView.data[parentInjectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n    return new NodeInjector(parentTNode, parentLView);\n  } else {\n    const chainedInjector = lView[INJECTOR];\n    // Case where chainedInjector.injector is an OutletInjector and chainedInjector.injector.parent\n    // is a NodeInjector.\n    // todo(aleksanderbodurri): ideally nothing in packages/core should deal\n    // directly with router concerns. Refactor this so that we can make the jump from\n    // NodeInjector -> OutletInjector -> NodeInjector\n    // without explicitly relying on types contracts from packages/router\n    const injectorParent = chainedInjector.injector?.parent;\n    if (injectorParent instanceof NodeInjector) {\n      return injectorParent;\n    }\n  }\n  return null;\n}\n/**\n * Gets the module injector of a NodeInjector.\n *\n * @param injector NodeInjector to get module injector of\n * @returns Injector representing module injector of the given NodeInjector\n */\nfunction getModuleInjectorOfNodeInjector(injector) {\n  let lView;\n  if (injector instanceof NodeInjector) {\n    lView = getNodeInjectorLView(injector);\n  } else {\n    throwError('getModuleInjectorOfNodeInjector must be called with a NodeInjector');\n  }\n  const inj = lView[INJECTOR];\n  const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;\n  if (!moduleInjector) {\n    throwError('NodeInjector must have some connection to the module injector tree');\n  }\n  return moduleInjector;\n}\n\n/**\n * This file introduces series of globally accessible debug tools\n * to allow for the Angular debugging story to function.\n *\n * To see this in action run the following command:\n *\n *   bazel run //packages/core/test/bundling/todo:devserver\n *\n *  Then load `localhost:5432` and start using the console tools.\n */\n/**\n * This value reflects the property on the window where the dev\n * tools are patched (window.ng).\n * */\nconst GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';\nconst globalUtilsFunctions = {\n  /**\n   * Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon\n   * in application's code. The contract of those functions might be changed in any release and/or a\n   * function can be removed completely.\n   */\n  'ɵgetDependenciesFromInjectable': getDependenciesFromInjectable,\n  'ɵgetInjectorProviders': getInjectorProviders,\n  'ɵgetInjectorResolutionPath': getInjectorResolutionPath,\n  'ɵgetInjectorMetadata': getInjectorMetadata,\n  'ɵsetProfiler': setProfiler,\n  'getDirectiveMetadata': getDirectiveMetadata$1,\n  'getComponent': getComponent,\n  'getContext': getContext,\n  'getListeners': getListeners,\n  'getOwningComponent': getOwningComponent,\n  'getHostElement': getHostElement,\n  'getInjector': getInjector,\n  'getRootComponents': getRootComponents,\n  'getDirectives': getDirectives,\n  'applyChanges': applyChanges,\n  'isSignal': isSignal\n};\nlet _published = false;\n/**\n * Publishes a collection of default debug tools onto`window.ng`.\n *\n * These functions are available globally when Angular is in development\n * mode and are automatically stripped away from prod mode is on.\n */\nfunction publishDefaultGlobalUtils$1() {\n  if (!_published) {\n    _published = true;\n    if (typeof window !== 'undefined') {\n      // Only configure the injector profiler when running in the browser.\n      setupFrameworkInjectorProfiler();\n    }\n    for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {\n      publishGlobalUtil(methodName, method);\n    }\n  }\n}\n/**\n * Publishes the given function to `window.ng` so that it can be\n * used from the browser console when an application is not in production.\n */\nfunction publishGlobalUtil(name, fn) {\n  publishUtil(name, fn);\n}\n/**\n * Publishes the given function to `window.ng` from package other than @angular/core\n * So that it can be used from the browser console when an application is not in production.\n */\nfunction publishExternalGlobalUtil(name, fn) {\n  publishUtil(name, fn);\n}\nfunction publishUtil(name, fn) {\n  if (typeof COMPILED === 'undefined' || !COMPILED) {\n    // Note: we can't export `ng` when using closure enhanced optimization as:\n    // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n    // - we can't declare a closure extern as the namespace `ng` is already used within Google\n    //   for typings for AngularJS (via `goog.provide('ng....')`).\n    const w = _global;\n    ngDevMode && assertDefined(fn, 'function not defined');\n    w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};\n    w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;\n  }\n}\n\n/**\n * Internal injection token that can used to access an instance of a Testability class.\n *\n * This token acts as a bridge between the core bootstrap code and the `Testability` class. This is\n * needed to ensure that there are no direct references to the `Testability` class, so it can be\n * tree-shaken away (if not referenced). For the environments/setups when the `Testability` class\n * should be available, this token is used to add a provider that references the `Testability`\n * class. Otherwise, only this token is retained in a bundle, but the `Testability` class is not.\n */\nconst TESTABILITY = new InjectionToken('');\n/**\n * Internal injection token to retrieve Testability getter class instance.\n */\nconst TESTABILITY_GETTER = new InjectionToken('');\n/**\n * The Testability service provides testing hooks that can be accessed from\n * the browser.\n *\n * Angular applications bootstrapped using an NgModule (via `@NgModule.bootstrap` field) will also\n * instantiate Testability by default (in both development and production modes).\n *\n * For applications bootstrapped using the `bootstrapApplication` function, Testability is not\n * included by default. You can include it into your applications by getting the list of necessary\n * providers using the `provideProtractorTestingSupport()` function and adding them into the\n * `options.providers` array. Example:\n *\n * ```ts\n * import {provideProtractorTestingSupport} from '@angular/platform-browser';\n *\n * await bootstrapApplication(RootComponent, providers: [provideProtractorTestingSupport()]);\n * ```\n *\n * @publicApi\n */\nclass Testability {\n  _ngZone;\n  registry;\n  _isZoneStable = true;\n  _callbacks = [];\n  taskTrackingZone = null;\n  constructor(_ngZone, registry, testabilityGetter) {\n    this._ngZone = _ngZone;\n    this.registry = registry;\n    // If there was no Testability logic registered in the global scope\n    // before, register the current testability getter as a global one.\n    if (!_testabilityGetter) {\n      setTestabilityGetter(testabilityGetter);\n      testabilityGetter.addToWindow(registry);\n    }\n    this._watchAngularEvents();\n    _ngZone.run(() => {\n      this.taskTrackingZone = typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');\n    });\n  }\n  _watchAngularEvents() {\n    this._ngZone.onUnstable.subscribe({\n      next: () => {\n        this._isZoneStable = false;\n      }\n    });\n    this._ngZone.runOutsideAngular(() => {\n      this._ngZone.onStable.subscribe({\n        next: () => {\n          NgZone.assertNotInAngularZone();\n          queueMicrotask(() => {\n            this._isZoneStable = true;\n            this._runCallbacksIfReady();\n          });\n        }\n      });\n    });\n  }\n  /**\n   * Whether an associated application is stable\n   */\n  isStable() {\n    return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;\n  }\n  _runCallbacksIfReady() {\n    if (this.isStable()) {\n      // Schedules the call backs in a new frame so that it is always async.\n      queueMicrotask(() => {\n        while (this._callbacks.length !== 0) {\n          let cb = this._callbacks.pop();\n          clearTimeout(cb.timeoutId);\n          cb.doneCb();\n        }\n      });\n    } else {\n      // Still not stable, send updates.\n      let pending = this.getPendingTasks();\n      this._callbacks = this._callbacks.filter(cb => {\n        if (cb.updateCb && cb.updateCb(pending)) {\n          clearTimeout(cb.timeoutId);\n          return false;\n        }\n        return true;\n      });\n    }\n  }\n  getPendingTasks() {\n    if (!this.taskTrackingZone) {\n      return [];\n    }\n    // Copy the tasks data so that we don't leak tasks.\n    return this.taskTrackingZone.macroTasks.map(t => {\n      return {\n        source: t.source,\n        // From TaskTrackingZone:\n        // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40\n        creationLocation: t.creationLocation,\n        data: t.data\n      };\n    });\n  }\n  addCallback(cb, timeout, updateCb) {\n    let timeoutId = -1;\n    if (timeout && timeout > 0) {\n      timeoutId = setTimeout(() => {\n        this._callbacks = this._callbacks.filter(cb => cb.timeoutId !== timeoutId);\n        cb();\n      }, timeout);\n    }\n    this._callbacks.push({\n      doneCb: cb,\n      timeoutId: timeoutId,\n      updateCb: updateCb\n    });\n  }\n  /**\n   * Wait for the application to be stable with a timeout. If the timeout is reached before that\n   * happens, the callback receives a list of the macro tasks that were pending, otherwise null.\n   *\n   * @param doneCb The callback to invoke when Angular is stable or the timeout expires\n   *    whichever comes first.\n   * @param timeout Optional. The maximum time to wait for Angular to become stable. If not\n   *    specified, whenStable() will wait forever.\n   * @param updateCb Optional. If specified, this callback will be invoked whenever the set of\n   *    pending macrotasks changes. If this callback returns true doneCb will not be invoked\n   *    and no further updates will be issued.\n   */\n  whenStable(doneCb, timeout, updateCb) {\n    if (updateCb && !this.taskTrackingZone) {\n      throw new Error('Task tracking zone is required when passing an update callback to ' + 'whenStable(). Is \"zone.js/plugins/task-tracking\" loaded?');\n    }\n    this.addCallback(doneCb, timeout, updateCb);\n    this._runCallbacksIfReady();\n  }\n  /**\n   * Registers an application with a testability hook so that it can be tracked.\n   * @param token token of application, root element\n   *\n   * @internal\n   */\n  registerApplication(token) {\n    this.registry.registerApplication(token, this);\n  }\n  /**\n   * Unregisters an application.\n   * @param token token of application, root element\n   *\n   * @internal\n   */\n  unregisterApplication(token) {\n    this.registry.unregisterApplication(token);\n  }\n  /**\n   * Find providers by name\n   * @param using The root element to search from\n   * @param provider The name of binding variable\n   * @param exactMatch Whether using exactMatch\n   */\n  findProviders(using, provider, exactMatch) {\n    // TODO(juliemr): implement.\n    return [];\n  }\n  static ɵfac = function Testability_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER));\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Testability,\n    factory: Testability.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Testability, [{\n    type: Injectable\n  }], () => [{\n    type: NgZone\n  }, {\n    type: TestabilityRegistry\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [TESTABILITY_GETTER]\n    }]\n  }], null);\n})();\n/**\n * A global registry of {@link Testability} instances for specific elements.\n * @publicApi\n */\nclass TestabilityRegistry {\n  /** @internal */\n  _applications = new Map();\n  /**\n   * Registers an application with a testability hook so that it can be tracked\n   * @param token token of application, root element\n   * @param testability Testability hook\n   */\n  registerApplication(token, testability) {\n    this._applications.set(token, testability);\n  }\n  /**\n   * Unregisters an application.\n   * @param token token of application, root element\n   */\n  unregisterApplication(token) {\n    this._applications.delete(token);\n  }\n  /**\n   * Unregisters all applications\n   */\n  unregisterAllApplications() {\n    this._applications.clear();\n  }\n  /**\n   * Get a testability hook associated with the application\n   * @param elem root element\n   */\n  getTestability(elem) {\n    return this._applications.get(elem) || null;\n  }\n  /**\n   * Get all registered testabilities\n   */\n  getAllTestabilities() {\n    return Array.from(this._applications.values());\n  }\n  /**\n   * Get all registered applications(root elements)\n   */\n  getAllRootElements() {\n    return Array.from(this._applications.keys());\n  }\n  /**\n   * Find testability of a node in the Tree\n   * @param elem node\n   * @param findInAncestors whether finding testability in ancestors if testability was not found in\n   * current node\n   */\n  findTestabilityInTree(elem, findInAncestors = true) {\n    return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;\n  }\n  static ɵfac = function TestabilityRegistry_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TestabilityRegistry)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: TestabilityRegistry,\n    factory: TestabilityRegistry.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], null, null);\n})();\n/**\n * Set the {@link GetTestability} implementation used by the Angular testing framework.\n * @publicApi\n */\nfunction setTestabilityGetter(getter) {\n  _testabilityGetter = getter;\n}\nlet _testabilityGetter;\n\n/**\n * Determine if the argument is shaped like a Promise\n */\nfunction isPromise(obj) {\n  // allow any Promise/A+ compliant thenable.\n  // It's up to the caller to ensure that obj.then conforms to the spec\n  return !!obj && typeof obj.then === 'function';\n}\n/**\n * Determine if the argument is a Subscribable\n */\nfunction isSubscribable(obj) {\n  return !!obj && typeof obj.subscribe === 'function';\n}\n\n/**\n * A DI token that you can use to provide\n * one or more initialization functions.\n *\n * The provided functions are injected at application startup and executed during\n * app initialization. If any of these functions returns a Promise or an Observable, initialization\n * does not complete until the Promise is resolved or the Observable is completed.\n *\n * You can, for example, create a factory function that loads language data\n * or an external configuration, and provide that function to the `APP_INITIALIZER` token.\n * The function is executed during the application bootstrap process,\n * and the needed data is available on startup.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * @deprecated from v19.0.0, use provideAppInitializer instead\n *\n * @see {@link ApplicationInitStatus}\n * @see {@link provideAppInitializer}\n *\n * @usageNotes\n *\n * The following example illustrates how to configure a multi-provider using `APP_INITIALIZER` token\n * and a function returning a promise.\n * ### Example with NgModule-based application\n * ```ts\n *  function initializeApp(): Promise<any> {\n *    const http = inject(HttpClient);\n *    return firstValueFrom(\n *      http\n *        .get(\"https://someUrl.com/api/user\")\n *        .pipe(tap(user => { ... }))\n *    );\n *  }\n *\n *  @NgModule({\n *   imports: [BrowserModule],\n *   declarations: [AppComponent],\n *   bootstrap: [AppComponent],\n *   providers: [{\n *     provide: APP_INITIALIZER,\n *     useValue: initializeApp,\n *     multi: true,\n *    }]\n *   })\n *  export class AppModule {}\n * ```\n *\n * ### Example with standalone application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * bootstrapApplication(App, {\n *   providers: [\n *     provideHttpClient(),\n *     {\n *       provide: APP_INITIALIZER,\n *       useValue: initializeApp,\n *       multi: true,\n *     },\n *   ],\n * });\n\n * ```\n *\n *\n * It's also possible to configure a multi-provider using `APP_INITIALIZER` token and a function\n * returning an observable, see an example below. Note: the `HttpClient` in this example is used for\n * demo purposes to illustrate how the factory function can work with other providers available\n * through DI.\n *\n * ### Example with NgModule-based application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * @NgModule({\n *   imports: [BrowserModule, HttpClientModule],\n *   declarations: [AppComponent],\n *   bootstrap: [AppComponent],\n *   providers: [{\n *     provide: APP_INITIALIZER,\n *     useValue: initializeApp,\n *     multi: true,\n *   }]\n * })\n * export class AppModule {}\n * ```\n *\n * ### Example with standalone application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * bootstrapApplication(App, {\n *   providers: [\n *     provideHttpClient(),\n *     {\n *       provide: APP_INITIALIZER,\n *       useValue: initializeApp,\n *       multi: true,\n *     },\n *   ],\n * });\n * ```\n *\n * @publicApi\n */\nconst APP_INITIALIZER = new InjectionToken(ngDevMode ? 'Application Initializer' : '');\n/**\n * @description\n * The provided function is injected at application startup and executed during\n * app initialization. If the function returns a Promise or an Observable, initialization\n * does not complete until the Promise is resolved or the Observable is completed.\n *\n * You can, for example, create a function that loads language data\n * or an external configuration, and provide that function using `provideAppInitializer()`.\n * The function is executed during the application bootstrap process,\n * and the needed data is available on startup.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `APP_INITIALIZER` token which is now deprecated.\n *\n * @see {@link APP_INITIALIZER}\n *\n * @usageNotes\n * The following example illustrates how to configure an initialization function using\n * `provideAppInitializer()`\n * ```ts\n * bootstrapApplication(App, {\n *   providers: [\n *     provideAppInitializer(() => {\n *       const http = inject(HttpClient);\n *       return firstValueFrom(\n *         http\n *           .get(\"https://someUrl.com/api/user\")\n *           .pipe(tap(user => { ... }))\n *       );\n *     }),\n *     provideHttpClient(),\n *   ],\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideAppInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: APP_INITIALIZER,\n    multi: true,\n    useValue: initializerFn\n  }]);\n}\n/**\n * A class that reflects the state of running {@link APP_INITIALIZER} functions.\n *\n * @publicApi\n */\nclass ApplicationInitStatus {\n  // Using non null assertion, these fields are defined below\n  // within the `new Promise` callback (synchronously).\n  resolve;\n  reject;\n  initialized = false;\n  done = false;\n  donePromise = new Promise((res, rej) => {\n    this.resolve = res;\n    this.reject = rej;\n  });\n  appInits = inject(APP_INITIALIZER, {\n    optional: true\n  }) ?? [];\n  injector = inject(Injector);\n  constructor() {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !Array.isArray(this.appInits)) {\n      throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `APP_INITIALIZER` token value ' + `(expected an array, but got ${typeof this.appInits}). ` + 'Please check that the `APP_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n    }\n  }\n  /** @internal */\n  runInitializers() {\n    if (this.initialized) {\n      return;\n    }\n    const asyncInitPromises = [];\n    for (const appInits of this.appInits) {\n      const initResult = runInInjectionContext(this.injector, appInits);\n      if (isPromise(initResult)) {\n        asyncInitPromises.push(initResult);\n      } else if (isSubscribable(initResult)) {\n        const observableAsPromise = new Promise((resolve, reject) => {\n          initResult.subscribe({\n            complete: resolve,\n            error: reject\n          });\n        });\n        asyncInitPromises.push(observableAsPromise);\n      }\n    }\n    const complete = () => {\n      // @ts-expect-error overwriting a readonly\n      this.done = true;\n      this.resolve();\n    };\n    Promise.all(asyncInitPromises).then(() => {\n      complete();\n    }).catch(e => {\n      this.reject(e);\n    });\n    if (asyncInitPromises.length === 0) {\n      complete();\n    }\n    this.initialized = true;\n  }\n  static ɵfac = function ApplicationInitStatus_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationInitStatus)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ApplicationInitStatus,\n    factory: ApplicationInitStatus.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n\n/**\n * A scheduler which manages the execution of effects.\n */\nclass EffectScheduler {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: EffectScheduler,\n    providedIn: 'root',\n    factory: () => new ZoneAwareEffectScheduler()\n  });\n}\n/**\n * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue\n * when.\n */\nclass ZoneAwareEffectScheduler {\n  queuedEffectCount = 0;\n  queues = new Map();\n  schedule(handle) {\n    this.enqueue(handle);\n  }\n  enqueue(handle) {\n    const zone = handle.zone;\n    if (!this.queues.has(zone)) {\n      this.queues.set(zone, new Set());\n    }\n    const queue = this.queues.get(zone);\n    if (queue.has(handle)) {\n      return;\n    }\n    this.queuedEffectCount++;\n    queue.add(handle);\n  }\n  /**\n   * Run all scheduled effects.\n   *\n   * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no\n   * ordering guarantee between effects scheduled in different zones.\n   */\n  flush() {\n    while (this.queuedEffectCount > 0) {\n      for (const [zone, queue] of this.queues) {\n        // `zone` here must be defined.\n        if (zone === null) {\n          this.flushQueue(queue);\n        } else {\n          zone.run(() => this.flushQueue(queue));\n        }\n      }\n    }\n  }\n  flushQueue(queue) {\n    for (const handle of queue) {\n      queue.delete(handle);\n      this.queuedEffectCount--;\n      // TODO: what happens if this throws an error?\n      handle.run();\n    }\n  }\n}\n\n/**\n * A DI token that provides a set of callbacks to\n * be called for every component that is bootstrapped.\n *\n * Each callback must take a `ComponentRef` instance and return nothing.\n *\n * `(componentRef: ComponentRef) => void`\n *\n * @publicApi\n */\nconst APP_BOOTSTRAP_LISTENER = new InjectionToken(ngDevMode ? 'appBootstrapListener' : '');\nfunction publishDefaultGlobalUtils() {\n  ngDevMode && publishDefaultGlobalUtils$1();\n}\n/**\n * Sets the error for an invalid write to a signal to be an Angular `RuntimeError`.\n */\nfunction publishSignalConfiguration() {\n  setThrowInvalidWriteToSignalError$1(() => {\n    throw new RuntimeError(600 /* RuntimeErrorCode.SIGNAL_WRITE_FROM_ILLEGAL_CONTEXT */, ngDevMode && 'Writing to signals is not allowed in a `computed`.');\n  });\n}\nfunction isBoundToModule(cf) {\n  return cf.isBoundToModule;\n}\n/**\n * A token for third-party components that can register themselves with NgProbe.\n *\n * @deprecated\n * @publicApi\n */\nclass NgProbeToken {\n  name;\n  token;\n  constructor(name, token) {\n    this.name = name;\n    this.token = token;\n  }\n}\n/** Maximum number of times ApplicationRef will refresh all attached views in a single tick. */\nconst MAXIMUM_REFRESH_RERUNS = 10;\nfunction _callAndReportToErrorHandler(errorHandler, ngZone, callback) {\n  try {\n    const result = callback();\n    if (isPromise(result)) {\n      return result.catch(e => {\n        ngZone.runOutsideAngular(() => errorHandler.handleError(e));\n        // rethrow as the exception handler might not do it\n        throw e;\n      });\n    }\n    return result;\n  } catch (e) {\n    ngZone.runOutsideAngular(() => errorHandler.handleError(e));\n    // rethrow as the exception handler might not do it\n    throw e;\n  }\n}\nfunction optionsReducer(dst, objs) {\n  if (Array.isArray(objs)) {\n    return objs.reduce(optionsReducer, dst);\n  }\n  return {\n    ...dst,\n    ...objs\n  };\n}\n/**\n * A reference to an Angular application running on a page.\n *\n * @usageNotes\n * {@a is-stable-examples}\n * ### isStable examples and caveats\n *\n * Note two important points about `isStable`, demonstrated in the examples below:\n * - the application will never be stable if you start any kind\n * of recurrent asynchronous task when the application starts\n * (for example for a polling process, started with a `setInterval`, a `setTimeout`\n * or using RxJS operators like `interval`);\n * - the `isStable` Observable runs outside of the Angular zone.\n *\n * Let's imagine that you start a recurrent task\n * (here incrementing a counter, using RxJS `interval`),\n * and at the same time subscribe to `isStable`.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *      filter(stable => stable)\n *   ).subscribe(() => console.log('App is stable now');\n *   interval(1000).subscribe(counter => console.log(counter));\n * }\n * ```\n * In this example, `isStable` will never emit `true`,\n * and the trace \"App is stable now\" will never get logged.\n *\n * If you want to execute something when the app is stable,\n * you have to wait for the application to be stable\n * before starting your polling process.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     tap(stable => console.log('App is stable now')),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => console.log(counter));\n * }\n * ```\n * In this example, the trace \"App is stable now\" will be logged\n * and then the counter starts incrementing every second.\n *\n * Note also that this Observable runs outside of the Angular zone,\n * which means that the code in the subscription\n * to this Observable will not trigger the change detection.\n *\n * Let's imagine that instead of logging the counter value,\n * you update a field of your component\n * and display it in its template.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => this.value = counter);\n * }\n * ```\n * As the `isStable` Observable runs outside the zone,\n * the `value` field will be updated properly,\n * but the template will not be refreshed!\n *\n * You'll have to manually trigger the change detection to update the template.\n *\n * ```ts\n * constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => {\n *     this.value = counter;\n *     cd.detectChanges();\n *   });\n * }\n * ```\n *\n * Or make the subscription callback run inside the zone.\n *\n * ```ts\n * constructor(appRef: ApplicationRef, zone: NgZone) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => zone.run(() => this.value = counter));\n * }\n * ```\n *\n * @publicApi\n */\nclass ApplicationRef {\n  /** @internal */\n  _runningTick = false;\n  _destroyed = false;\n  _destroyListeners = [];\n  /** @internal */\n  _views = [];\n  internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n  afterRenderManager = inject(AfterRenderManager);\n  zonelessEnabled = inject(ZONELESS_ENABLED);\n  rootEffectScheduler = inject(EffectScheduler);\n  /**\n   * Current dirty state of the application across a number of dimensions (views, afterRender hooks,\n   * etc).\n   *\n   * A flag set here means that `tick()` will attempt to resolve the dirtiness when executed.\n   *\n   * @internal\n   */\n  dirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n  /**\n   * Like `dirtyFlags` but don't cause `tick()` to loop.\n   *\n   * @internal\n   */\n  deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n  /**\n   * Most recent snapshot from the `TracingService`, if any.\n   *\n   * This snapshot attempts to capture the context when `tick()` was first\n   * scheduled. It then runs wrapped in this context.\n   *\n   * @internal\n   */\n  tracingSnapshot = null;\n  // Needed for ComponentFixture temporarily during migration of autoDetect behavior\n  // Eventually the hostView of the fixture should just attach to ApplicationRef.\n  externalTestViews = new Set();\n  /** @internal */\n  afterTick = new Subject();\n  /** @internal */\n  get allViews() {\n    return [...this.externalTestViews.keys(), ...this._views];\n  }\n  /**\n   * Indicates whether this instance was destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  /**\n   * Get a list of component types registered to this application.\n   * This list is populated even before the component is created.\n   */\n  componentTypes = [];\n  /**\n   * Get a list of components registered to this application.\n   */\n  components = [];\n  /**\n   * Returns an Observable that indicates when the application is stable or unstable.\n   */\n  isStable = inject(PendingTasksInternal).hasPendingTasks.pipe(map(pending => !pending));\n  constructor() {\n    // Inject the tracing service to initialize it.\n    inject(TracingService, {\n      optional: true\n    });\n  }\n  /**\n   * @returns A promise that resolves when the application becomes stable\n   */\n  whenStable() {\n    let subscription;\n    return new Promise(resolve => {\n      subscription = this.isStable.subscribe({\n        next: stable => {\n          if (stable) {\n            resolve();\n          }\n        }\n      });\n    }).finally(() => {\n      subscription.unsubscribe();\n    });\n  }\n  _injector = inject(EnvironmentInjector);\n  _rendererFactory = null;\n  /**\n   * The `EnvironmentInjector` used to create this application.\n   */\n  get injector() {\n    return this._injector;\n  }\n  /**\n   * Bootstrap a component onto the element identified by its selector or, optionally, to a\n   * specified element.\n   *\n   * @usageNotes\n   * ### Bootstrap process\n   *\n   * When bootstrapping a component, Angular mounts it onto a target DOM element\n   * and kicks off automatic change detection. The target DOM element can be\n   * provided using the `rootSelectorOrNode` argument.\n   *\n   * If the target DOM element is not provided, Angular tries to find one on a page\n   * using the `selector` of the component that is being bootstrapped\n   * (first matched element is used).\n   *\n   * ### Example\n   *\n   * Generally, we define the component to bootstrap in the `bootstrap` array of `NgModule`,\n   * but it requires us to know the component while writing the application code.\n   *\n   * Imagine a situation where we have to wait for an API call to decide about the component to\n   * bootstrap. We can use the `ngDoBootstrap` hook of the `NgModule` and call this method to\n   * dynamically bootstrap a component.\n   *\n   * {@example core/ts/platform/platform.ts region='componentSelector'}\n   *\n   * Optionally, a component can be mounted onto a DOM element that does not match the\n   * selector of the bootstrapped component.\n   *\n   * In the following example, we are providing a CSS selector to match the target element.\n   *\n   * {@example core/ts/platform/platform.ts region='cssSelector'}\n   *\n   * While in this example, we are providing reference to a DOM node.\n   *\n   * {@example core/ts/platform/platform.ts region='domNode'}\n   */\n  bootstrap(componentOrFactory, rootSelectorOrNode) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;\n    const initStatus = this._injector.get(ApplicationInitStatus);\n    if (!initStatus.done) {\n      const standalone = !isComponentFactory && isStandalone(componentOrFactory);\n      const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot bootstrap as there are still asynchronous initializers running.' + (standalone ? '' : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');\n      throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);\n    }\n    let componentFactory;\n    if (isComponentFactory) {\n      componentFactory = componentOrFactory;\n    } else {\n      const resolver = this._injector.get(ComponentFactoryResolver$1);\n      componentFactory = resolver.resolveComponentFactory(componentOrFactory);\n    }\n    this.componentTypes.push(componentFactory.componentType);\n    // Create a factory associated with the current module if it's not bound to some other\n    const ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef$1);\n    const selectorOrNode = rootSelectorOrNode || componentFactory.selector;\n    const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);\n    const nativeElement = compRef.location.nativeElement;\n    const testability = compRef.injector.get(TESTABILITY, null);\n    testability?.registerApplication(nativeElement);\n    compRef.onDestroy(() => {\n      this.detachView(compRef.hostView);\n      remove(this.components, compRef);\n      testability?.unregisterApplication(nativeElement);\n    });\n    this._loadComponent(compRef);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const _console = this._injector.get(Console);\n      _console.log(`Angular is running in development mode.`);\n    }\n    return compRef;\n  }\n  /**\n   * Invoke this method to explicitly process change detection and its side-effects.\n   *\n   * In development mode, `tick()` also performs a second change detection cycle to ensure that no\n   * further changes are detected. If additional changes are picked up during this second cycle,\n   * bindings in the app have side-effects that cannot be resolved in a single change detection\n   * pass.\n   * In this case, Angular throws an error, since an Angular application can only have one change\n   * detection pass during which all change detection must complete.\n   */\n  tick() {\n    if (!this.zonelessEnabled) {\n      this.dirtyFlags |= 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */;\n    }\n    this._tick();\n  }\n  /** @internal */\n  _tick = () => {\n    if (this.tracingSnapshot !== null) {\n      const snapshot = this.tracingSnapshot;\n      this.tracingSnapshot = null;\n      // Ensure we always run `_tick()` in the context of the most recent snapshot,\n      // if one exists. Snapshots may be reference counted by the implementation so\n      // we want to ensure that if we request a snapshot that we use it.\n      snapshot.run(TracingAction.CHANGE_DETECTION, this._tick);\n      snapshot.dispose();\n      return;\n    }\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    if (this._runningTick) {\n      throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');\n    }\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      this._runningTick = true;\n      this.synchronize();\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        for (let view of this.allViews) {\n          view.checkNoChanges();\n        }\n      }\n    } catch (e) {\n      // Attention: Don't rethrow as it could cancel subscriptions to Observables!\n      this.internalErrorHandler(e);\n    } finally {\n      this._runningTick = false;\n      setActiveConsumer$1(prevConsumer);\n      this.afterTick.next();\n    }\n  };\n  /**\n   * Performs the core work of synchronizing the application state with the UI, resolving any\n   * pending dirtiness (potentially in a loop).\n   */\n  synchronize() {\n    if (this._rendererFactory === null && !this._injector.destroyed) {\n      this._rendererFactory = this._injector.get(RendererFactory2, null, {\n        optional: true\n      });\n    }\n    // When beginning synchronization, all deferred dirtiness becomes active dirtiness.\n    this.dirtyFlags |= this.deferredDirtyFlags;\n    this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n    let runs = 0;\n    while (this.dirtyFlags !== 0 /* ApplicationRefDirtyFlags.None */ && runs++ < MAXIMUM_REFRESH_RERUNS) {\n      this.synchronizeOnce();\n    }\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {\n      throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, ngDevMode && 'Infinite change detection while refreshing application views. ' + 'Ensure views are not calling `markForCheck` on every template execution or ' + 'that afterRender hooks always mark views for check.');\n    }\n  }\n  /**\n   * Perform a single synchronization pass.\n   */\n  synchronizeOnce() {\n    // If we happened to loop, deferred dirtiness can be processed as active dirtiness again.\n    this.dirtyFlags |= this.deferredDirtyFlags;\n    this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n    // First, process any dirty root effects.\n    if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {\n      this.dirtyFlags &= ~16 /* ApplicationRefDirtyFlags.RootEffects */;\n      this.rootEffectScheduler.flush();\n    }\n    // First check dirty views, if there are any.\n    if (this.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {\n      // Change detection on views starts in targeted mode (only check components if they're\n      // marked as dirty) unless global checking is specifically requested via APIs like\n      // `ApplicationRef.tick()` and the `NgZone` integration.\n      const useGlobalCheck = Boolean(this.dirtyFlags & 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */);\n      // Clear the view-related dirty flags.\n      this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;\n      // Set the AfterRender bit, as we're checking views and will need to run afterRender hooks.\n      this.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n      // Check all potentially dirty views.\n      for (let {\n        _lView,\n        notifyErrorHandler\n      } of this.allViews) {\n        detectChangesInViewIfRequired(_lView, notifyErrorHandler, useGlobalCheck, this.zonelessEnabled);\n      }\n      // If `markForCheck()` was called during view checking, it will have set the `ViewTreeCheck`\n      // flag. We clear the flag here because, for backwards compatibility, `markForCheck()`\n      // during view checking doesn't cause the view to be re-checked.\n      this.dirtyFlags &= ~4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;\n      // Check if any views are still dirty after checking and we need to loop back.\n      this.syncDirtyFlagsWithViews();\n      if (this.dirtyFlags & (7 /* ApplicationRefDirtyFlags.ViewTreeAny */ | 16 /* ApplicationRefDirtyFlags.RootEffects */)) {\n        // If any views or effects are still dirty after checking, loop back before running render\n        // hooks.\n        return;\n      }\n    } else {\n      // If we skipped refreshing views above, there might still be unflushed animations\n      // because we never called `detectChangesInternal` on the views.\n      this._rendererFactory?.begin?.();\n      this._rendererFactory?.end?.();\n    }\n    // Even if there were no dirty views, afterRender hooks might still be dirty.\n    if (this.dirtyFlags & 8 /* ApplicationRefDirtyFlags.AfterRender */) {\n      this.dirtyFlags &= ~8 /* ApplicationRefDirtyFlags.AfterRender */;\n      this.afterRenderManager.execute();\n      // afterRender hooks might influence dirty flags.\n    }\n    this.syncDirtyFlagsWithViews();\n  }\n  /**\n   * Checks `allViews` for views which require refresh/traversal, and updates `dirtyFlags`\n   * accordingly, with two potential behaviors:\n   *\n   * 1. If any of our views require updating, then this adds the `ViewTreeTraversal` dirty flag.\n   *    This _should_ be a no-op, since the scheduler should've added the flag at the same time the\n   *    view was marked as needing updating.\n   *\n   *    TODO(alxhub): figure out if this behavior is still needed for edge cases.\n   *\n   * 2. If none of our views require updating, then clear the view-related `dirtyFlag`s. This\n   *    happens when the scheduler is notified of a view becoming dirty, but the view itself isn't\n   *    reachable through traversal from our roots (e.g. it's detached from the CD tree).\n   */\n  syncDirtyFlagsWithViews() {\n    if (this.allViews.some(({\n      _lView\n    }) => requiresRefreshOrTraversal(_lView))) {\n      // If after running all afterRender callbacks new views are dirty, ensure we loop back.\n      this.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n      return;\n    } else {\n      // Even though this flag may be set, none of _our_ views require traversal, and so the\n      // `ApplicationRef` doesn't require any repeated checking.\n      this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;\n    }\n  }\n  /**\n   * Attaches a view so that it will be dirty checked.\n   * The view will be automatically detached when it is destroyed.\n   * This will throw if the view is already attached to a ViewContainer.\n   */\n  attachView(viewRef) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const view = viewRef;\n    this._views.push(view);\n    view.attachToAppRef(this);\n  }\n  /**\n   * Detaches a view from dirty checking again.\n   */\n  detachView(viewRef) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const view = viewRef;\n    remove(this._views, view);\n    view.detachFromAppRef();\n  }\n  _loadComponent(componentRef) {\n    this.attachView(componentRef.hostView);\n    this.tick();\n    this.components.push(componentRef);\n    // Get the listeners lazily to prevent DI cycles.\n    const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);\n    if (ngDevMode && !Array.isArray(listeners)) {\n      throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `APP_BOOTSTRAP_LISTENER` token value ' + `(expected an array, but got ${typeof listeners}). ` + 'Please check that the `APP_BOOTSTRAP_LISTENER` token is configured as a ' + '`multi: true` provider.');\n    }\n    listeners.forEach(listener => listener(componentRef));\n  }\n  /** @internal */\n  ngOnDestroy() {\n    if (this._destroyed) return;\n    try {\n      // Call all the lifecycle hooks.\n      this._destroyListeners.forEach(listener => listener());\n      // Destroy all registered views.\n      this._views.slice().forEach(view => view.destroy());\n    } finally {\n      // Indicate that this instance is destroyed.\n      this._destroyed = true;\n      // Release all references.\n      this._views = [];\n      this._destroyListeners = [];\n    }\n  }\n  /**\n   * Registers a listener to be called when an instance is destroyed.\n   *\n   * @param callback A callback function to add as a listener.\n   * @returns A function which unregisters a listener.\n   */\n  onDestroy(callback) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    this._destroyListeners.push(callback);\n    return () => remove(this._destroyListeners, callback);\n  }\n  /**\n   * Destroys an Angular application represented by this `ApplicationRef`. Calling this function\n   * will destroy the associated environment injectors as well as all the bootstrapped components\n   * with their views.\n   */\n  destroy() {\n    if (this._destroyed) {\n      throw new RuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, ngDevMode && 'This instance of the `ApplicationRef` has already been destroyed.');\n    }\n    const injector = this._injector;\n    // Check that this injector instance supports destroy operation.\n    if (injector.destroy && !injector.destroyed) {\n      // Destroying an underlying injector will trigger the `ngOnDestroy` lifecycle\n      // hook, which invokes the remaining cleanup actions.\n      injector.destroy();\n    }\n  }\n  /**\n   * Returns the number of attached views.\n   */\n  get viewCount() {\n    return this._views.length;\n  }\n  warnIfDestroyed() {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._destroyed) {\n      console.warn(formatRuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));\n    }\n  }\n  static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationRef)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ApplicationRef,\n    factory: ApplicationRef.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationRef, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction remove(list, el) {\n  const index = list.indexOf(el);\n  if (index > -1) {\n    list.splice(index, 1);\n  }\n}\nfunction detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, zonelessEnabled) {\n  // When re-checking, only check views which actually need it.\n  if (!isFirstPass && !requiresRefreshOrTraversal(lView)) {\n    return;\n  }\n  const mode = isFirstPass && !zonelessEnabled ?\n  // The first pass is always in Global mode, which includes `CheckAlways` views.\n  0 /* ChangeDetectionMode.Global */ :\n  // Only refresh views with the `RefreshView` flag or views is a changed signal\n  1 /* ChangeDetectionMode.Targeted */;\n  detectChangesInternal(lView, notifyErrorHandler, mode);\n}\n\n/**\n * Schedules triggering of a defer block for `on idle` and `on timer` conditions.\n */\nfunction scheduleDelayedTrigger(scheduleFn) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  renderPlaceholder(lView, tNode);\n  // Exit early to avoid invoking `scheduleFn`, which would\n  // add `setTimeout` call and potentially delay serialization\n  // on the server unnecessarily.\n  if (!shouldTriggerDeferBlock(0 /* TriggerType.Regular */, lView)) return;\n  const injector = lView[INJECTOR];\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const cleanupFn = scheduleFn(() => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), injector);\n  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);\n}\n/**\n * Schedules prefetching for `on idle` and `on timer` triggers.\n *\n * @param scheduleFn A function that does the scheduling.\n */\nfunction scheduleDelayedPrefetching(scheduleFn, trigger) {\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n  const lView = getLView();\n  const injector = lView[INJECTOR];\n  // Only trigger the scheduled trigger on the browser\n  // since we don't want to delay the server response.\n  const tNode = getCurrentTNode();\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    const lDetails = getLDeferBlockDetails(lView, tNode);\n    const prefetch = () => triggerPrefetching(tDetails, lView, tNode);\n    const cleanupFn = scheduleFn(prefetch, injector);\n    storeTriggerCleanupFn(1 /* TriggerType.Prefetch */, lDetails, cleanupFn);\n  }\n}\n/**\n * Schedules hydration triggering of a defer block for `on idle` and `on timer` conditions.\n */\nfunction scheduleDelayedHydrating(scheduleFn, lView, tNode) {\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n  // Only trigger the scheduled trigger on the browser\n  // since we don't want to delay the server response.\n  const injector = lView[INJECTOR];\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n  ngDevMode && assertSsrIdDefined(ssrUniqueId);\n  const cleanupFn = scheduleFn(() => triggerHydrationFromBlockName(injector, ssrUniqueId), injector);\n  storeTriggerCleanupFn(2 /* TriggerType.Hydrate */, lDetails, cleanupFn);\n}\n/**\n * Trigger prefetching of dependencies for a defer block.\n *\n * @param tDetails Static information about this defer block.\n * @param lView LView of a host view.\n * @param tNode TNode that represents a defer block.\n */\nfunction triggerPrefetching(tDetails, lView, tNode) {\n  triggerResourceLoading(tDetails, lView, tNode);\n}\n/**\n * Trigger loading of defer block dependencies if the process hasn't started yet.\n *\n * @param tDetails Static information about this defer block.\n * @param lView LView of a host view.\n */\nfunction triggerResourceLoading(tDetails, lView, tNode) {\n  const injector = lView[INJECTOR];\n  const tView = lView[TVIEW];\n  if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {\n    // If the loading status is different from initial one, it means that\n    // the loading of dependencies is in progress and there is nothing to do\n    // in this function. All details can be obtained from the `tDetails` object.\n    return tDetails.loadingPromise ?? Promise.resolve();\n  }\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);\n  // Switch from NOT_STARTED -> IN_PROGRESS state.\n  tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;\n  // Prefetching is triggered, cleanup all registered prefetch triggers.\n  invokeTriggerCleanupFns(1 /* TriggerType.Prefetch */, lDetails);\n  let dependenciesFn = tDetails.dependencyResolverFn;\n  if (ngDevMode) {\n    // Check if dependency function interceptor is configured.\n    const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {\n      optional: true\n    });\n    if (deferDependencyInterceptor) {\n      dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);\n    }\n  }\n  // Indicate that an application is not stable and has a pending task.\n  const pendingTasks = injector.get(PendingTasksInternal);\n  const taskId = pendingTasks.add();\n  // The `dependenciesFn` might be `null` when all dependencies within\n  // a given defer block were eagerly referenced elsewhere in a file,\n  // thus no dynamic `import()`s were produced.\n  if (!dependenciesFn) {\n    tDetails.loadingPromise = Promise.resolve().then(() => {\n      tDetails.loadingPromise = null;\n      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n      pendingTasks.remove(taskId);\n    });\n    return tDetails.loadingPromise;\n  }\n  // Start downloading of defer block dependencies.\n  tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then(results => {\n    let failed = false;\n    const directiveDefs = [];\n    const pipeDefs = [];\n    for (const result of results) {\n      if (result.status === 'fulfilled') {\n        const dependency = result.value;\n        const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);\n        if (directiveDef) {\n          directiveDefs.push(directiveDef);\n        } else {\n          const pipeDef = getPipeDef$1(dependency);\n          if (pipeDef) {\n            pipeDefs.push(pipeDef);\n          }\n        }\n      } else {\n        failed = true;\n        break;\n      }\n    }\n    // Loading is completed, we no longer need the loading Promise\n    // and a pending task should also be removed.\n    tDetails.loadingPromise = null;\n    pendingTasks.remove(taskId);\n    if (failed) {\n      tDetails.loadingState = DeferDependenciesLoadingState.FAILED;\n      if (tDetails.errorTmplIndex === null) {\n        const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';\n        const error = new RuntimeError(750 /* RuntimeErrorCode.DEFER_LOADING_FAILED */, ngDevMode && 'Loading dependencies for `@defer` block failed, ' + `but no \\`@error\\` block was configured${templateLocation}. ` + 'Consider using the `@error` block to render an error state.');\n        handleError(lView, error);\n      }\n    } else {\n      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n      // Update directive and pipe registries to add newly downloaded dependencies.\n      const primaryBlockTView = primaryBlockTNode.tView;\n      if (directiveDefs.length > 0) {\n        primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);\n        // Extract providers from all NgModules imported by standalone components\n        // used within this defer block.\n        const directiveTypes = directiveDefs.map(def => def.type);\n        const providers = internalImportProvidersFrom(false, ...directiveTypes);\n        tDetails.providers = providers;\n      }\n      if (pipeDefs.length > 0) {\n        primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);\n      }\n    }\n  });\n  return tDetails.loadingPromise;\n}\n/**\n * Defines whether we should proceed with triggering a given defer block.\n */\nfunction shouldTriggerDeferBlock(triggerType, lView) {\n  // prevents triggering regular triggers when on the server.\n  if (triggerType === 0 /* TriggerType.Regular */ && typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return false;\n  }\n  // prevents triggering in the case of a test run with manual defer block configuration.\n  const injector = lView[INJECTOR];\n  const config = injector.get(DEFER_BLOCK_CONFIG, null, {\n    optional: true\n  });\n  if (config?.behavior === DeferBlockBehavior.Manual) {\n    return false;\n  }\n  return true;\n}\n/**\n * Attempts to trigger loading of defer block dependencies.\n * If the block is already in a loading, completed or an error state -\n * no additional actions are taken.\n */\nfunction triggerDeferBlock(triggerType, lView, tNode) {\n  const tView = lView[TVIEW];\n  const lContainer = lView[tNode.index];\n  ngDevMode && assertLContainer(lContainer);\n  if (!shouldTriggerDeferBlock(triggerType, lView)) return;\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  // Defer block is triggered, cleanup all registered trigger functions.\n  invokeAllTriggerCleanupFns(lDetails);\n  switch (tDetails.loadingState) {\n    case DeferDependenciesLoadingState.NOT_STARTED:\n      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n      triggerResourceLoading(tDetails, lView, tNode);\n      // The `loadingState` might have changed to \"loading\".\n      if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {\n        renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n      }\n      break;\n    case DeferDependenciesLoadingState.IN_PROGRESS:\n      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n      renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n      break;\n    case DeferDependenciesLoadingState.COMPLETE:\n      ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n      break;\n    case DeferDependenciesLoadingState.FAILED:\n      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n      break;\n    default:\n      if (ngDevMode) {\n        throwError('Unknown defer block state');\n      }\n  }\n}\n/**\n * The core mechanism for incremental hydration. This triggers\n * hydration for all the blocks in the tree that need to be hydrated\n * and keeps track of all those blocks that were hydrated along the way.\n *\n * Note: the `replayQueuedEventsFn` is only provided when hydration is invoked\n * as a result of an event replay (via JsAction). When hydration is invoked from\n * an instruction set (e.g. `deferOnImmediate`) - there is no need to replay any\n * events.\n */\nasync function triggerHydrationFromBlockName(injector, blockName, replayQueuedEventsFn) {\n  const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n  const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n  // Make sure we don't hydrate/trigger the same thing multiple times\n  if (blocksBeingHydrated.has(blockName)) {\n    return;\n  }\n  // The parent promise is the possible case of a list of defer blocks already being queued\n  // If it is queued, it'll exist; otherwise it'll be null. The hydration queue will contain all\n  // elements that need to be hydrated, sans any that have promises already\n  const {\n    parentBlockPromise,\n    hydrationQueue\n  } = getParentBlockHydrationQueue(blockName, injector);\n  // The hydrating map in the registry prevents re-triggering hydration for a block that's already in\n  // the hydration queue. Here we generate promises for each of the blocks about to be hydrated\n  populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);\n  // Trigger resource loading and hydration for the blocks in the queue in the order of highest block\n  // to lowest block. Once a block has finished resource loading, after next render fires after hydration\n  // finishes. The new block will have its defer instruction called and will be in the registry.\n  // Due to timing related to potential nested control flow, this has to be scheduled after the next render.\n  // Indicate that we have some pending async work.\n  const pendingTasks = injector.get(PendingTasksInternal);\n  const taskId = pendingTasks.add();\n  // If the parent block was being hydrated, but the process has\n  // not yet complete, wait until parent block promise settles before\n  // going over dehydrated blocks from the queue.\n  if (parentBlockPromise !== null) {\n    await parentBlockPromise;\n  }\n  // Actually do the triggering and hydration of the queue of blocks\n  for (const dehydratedBlockId of hydrationQueue) {\n    await triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry);\n    await nextRender(injector);\n    // TODO(incremental-hydration): assert (in dev mode) that a defer block is present in the dehydrated registry\n    // at this point. If not - it means that the block has not been hydrated, for example due to different\n    // `@if` conditions on the client and the server. If we detect this case, we should also do the cleanup\n    // of all child block (promises, registry state, etc).\n    // TODO(incremental-hydration): call `rejectFn` when lDetails[DEFER_BLOCK_STATE] is `DeferBlockState.Error`.\n    blocksBeingHydrated.get(dehydratedBlockId).resolve();\n    // TODO(incremental-hydration): consider adding a wait for stability here\n  }\n  // Await hydration completion for the requested block.\n  await blocksBeingHydrated.get(blockName)?.promise;\n  // All async work is done, remove the taskId from the registry.\n  pendingTasks.remove(taskId);\n  // Replay any queued events, if any exist and the replay operation was requested.\n  if (replayQueuedEventsFn) {\n    replayQueuedEventsFn(hydrationQueue);\n  }\n  // Cleanup after hydration of all affected defer blocks.\n  cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(blockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));\n}\n/**\n * Generates a new promise for every defer block in the hydrating queue\n */\nfunction populateHydratingStateForQueue(registry, queue) {\n  for (let blockId of queue) {\n    registry.hydrating.set(blockId, Promise.withResolvers());\n  }\n}\n// Waits for the next render cycle to complete\nfunction nextRender(injector) {\n  return new Promise(resolveFn => afterNextRender(resolveFn, {\n    injector\n  }));\n}\nasync function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {\n  const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);\n  // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),\n  // there is a chance that a defer block may not be present at hydration time. For example,\n  // when a nested block was in an `@if` condition, which has changed.\n  if (deferBlock === null) {\n    // TODO(incremental-hydration): handle the cleanup for cases when\n    // defer block is no longer present during hydration (e.g. `@if` condition\n    // has changed during hydration/rendering).\n    return;\n  }\n  const {\n    tNode,\n    lView\n  } = deferBlock;\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  return new Promise(resolve => {\n    onDeferBlockCompletion(lDetails, resolve);\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  });\n}\n/**\n * Registers cleanup functions for a defer block when the block has finished\n * fetching and rendering\n */\nfunction onDeferBlockCompletion(lDetails, callback) {\n  if (!Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n    lDetails[ON_COMPLETE_FNS] = [];\n  }\n  lDetails[ON_COMPLETE_FNS].push(callback);\n}\n/**\n * Determines whether specific trigger types should be attached during an instruction firing\n * to ensure the proper triggers for a given type are used.\n */\nfunction shouldAttachTrigger(triggerType, lView, tNode) {\n  if (triggerType === 0 /* TriggerType.Regular */) {\n    return shouldAttachRegularTrigger(lView, tNode);\n  } else if (triggerType === 2 /* TriggerType.Hydrate */) {\n    return !shouldAttachRegularTrigger(lView, tNode);\n  }\n  // TriggerType.Prefetch is active only on the client\n  return !(typeof ngServerMode !== 'undefined' && ngServerMode);\n}\n/**\n * Defines whether a regular trigger logic (e.g. \"on viewport\") should be attached\n * to a defer block. This function defines a condition, which mutually excludes\n * `deferOn*` and `deferHydrateOn*` triggers, to make sure only one of the trigger\n * types is active for a block with the current state.\n */\nfunction shouldAttachRegularTrigger(lView, tNode) {\n  const injector = lView[INJECTOR];\n  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n  const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n  const hasHydrateTriggers = tDetails.flags !== null && (tDetails.flags & 1 /* TDeferDetailsFlags.HasHydrateTriggers */) === 1 /* TDeferDetailsFlags.HasHydrateTriggers */;\n  // On the server:\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // Regular triggers are activated on the server when:\n    //  - Either Incremental Hydration is *not* enabled\n    //  - Or Incremental Hydration is enabled, but a given block doesn't have \"hydrate\" triggers\n    return !incrementalHydrationEnabled || !hasHydrateTriggers;\n  }\n  // On the client:\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;\n  if (hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {\n    return false;\n  }\n  return true;\n}\n/**\n * Retrives a Defer Block's list of hydration triggers\n */\nfunction getHydrateTriggers(tView, tNode) {\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  return tDetails.hydrateTriggers ??= new Map();\n}\n/**\n * Loops through all defer block summaries and ensures all the blocks triggers are\n * properly initialized\n */\nfunction processAndInitTriggers(injector, blockData, nodes) {\n  const idleElements = [];\n  const timerElements = [];\n  const viewportElements = [];\n  const immediateElements = [];\n  for (let [blockId, blockSummary] of blockData) {\n    const commentNode = nodes.get(blockId);\n    if (commentNode !== undefined) {\n      const numRootNodes = blockSummary.data[NUM_ROOT_NODES];\n      let currentNode = commentNode;\n      for (let i = 0; i < numRootNodes; i++) {\n        currentNode = currentNode.previousSibling;\n        if (currentNode.nodeType !== Node.ELEMENT_NODE) {\n          continue;\n        }\n        const elementTrigger = {\n          el: currentNode,\n          blockName: blockId\n        };\n        // hydrate\n        if (blockSummary.hydrate.idle) {\n          idleElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.immediate) {\n          immediateElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.timer !== null) {\n          elementTrigger.delay = blockSummary.hydrate.timer;\n          timerElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.viewport) {\n          viewportElements.push(elementTrigger);\n        }\n      }\n    }\n  }\n  setIdleTriggers(injector, idleElements);\n  setImmediateTriggers(injector, immediateElements);\n  setViewportTriggers(injector, viewportElements);\n  setTimerTriggers(injector, timerElements);\n}\nfunction setIdleTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n    const cleanupFn = onIdle(onInvoke, injector);\n    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n  }\n}\nfunction setViewportTriggers(injector, elementTriggers) {\n  if (elementTriggers.length > 0) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    for (let elementTrigger of elementTriggers) {\n      const cleanupFn = onViewport(elementTrigger.el, () => triggerHydrationFromBlockName(injector, elementTrigger.blockName), injector);\n      registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n    }\n  }\n}\nfunction setTimerTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n    const timerFn = onTimer(elementTrigger.delay);\n    const cleanupFn = timerFn(onInvoke, injector);\n    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n  }\n}\nfunction setImmediateTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    // Note: we intentionally avoid awaiting each call and instead kick off\n    // th hydration process simultaneously for all defer blocks with this trigger;\n    triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n  }\n}\n\n/**\n * Creates runtime data structures for defer blocks.\n *\n * @param index Index of the `defer` instruction.\n * @param primaryTmplIndex Index of the template with the primary block content.\n * @param dependencyResolverFn Function that contains dependencies for this defer block.\n * @param loadingTmplIndex Index of the template with the loading block content.\n * @param placeholderTmplIndex Index of the template with the placeholder block content.\n * @param errorTmplIndex Index of the template with the error block content.\n * @param loadingConfigIndex Index in the constants array of the configuration of the loading.\n *     block.\n * @param placeholderConfigIndex Index in the constants array of the configuration of the\n *     placeholder block.\n * @param enableTimerScheduling Function that enables timer-related scheduling if `after`\n *     or `minimum` parameters are setup on the `@loading` or `@placeholder` blocks.\n * @param flags A set of flags to define a particular behavior (e.g. to indicate that\n *              hydrate triggers are present and regular triggers should be deactivated\n *              in certain scenarios).\n *\n * @codeGenApi\n */\nfunction ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = declareTemplate(lView, tView, index, null, 0, 0);\n  const injector = lView[INJECTOR];\n  if (tView.firstCreatePass) {\n    performanceMarkFeature('NgDefer');\n    const tDetails = {\n      primaryTmplIndex,\n      loadingTmplIndex: loadingTmplIndex ?? null,\n      placeholderTmplIndex: placeholderTmplIndex ?? null,\n      errorTmplIndex: errorTmplIndex ?? null,\n      placeholderBlockConfig: null,\n      loadingBlockConfig: null,\n      dependencyResolverFn: dependencyResolverFn ?? null,\n      loadingState: DeferDependenciesLoadingState.NOT_STARTED,\n      loadingPromise: null,\n      providers: null,\n      hydrateTriggers: null,\n      prefetchTriggers: null,\n      flags: flags ?? 0 /* TDeferDetailsFlags.Default */\n    };\n    enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);\n    setTDeferBlockDetails(tView, adjustedIndex, tDetails);\n  }\n  const lContainer = lView[adjustedIndex];\n  // If hydration is enabled, looks up dehydrated views in the DOM\n  // using hydration annotation info and stores those views on LContainer.\n  // In client-only mode, this function is a noop.\n  populateDehydratedViewsInLContainer(lContainer, tNode, lView);\n  let ssrBlockState = null;\n  let ssrUniqueId = null;\n  if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {\n    const info = lContainer[DEHYDRATED_VIEWS][0].data;\n    ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;\n    ssrBlockState = info[DEFER_BLOCK_STATE$1];\n  }\n  // Init instance-specific defer details and store it.\n  const lDetails = [null,\n  // NEXT_DEFER_BLOCK_STATE\n  DeferBlockInternalState.Initial,\n  // DEFER_BLOCK_STATE\n  null,\n  // STATE_IS_FROZEN_UNTIL\n  null,\n  // LOADING_AFTER_CLEANUP_FN\n  null,\n  // TRIGGER_CLEANUP_FNS\n  null,\n  // PREFETCH_TRIGGER_CLEANUP_FNS\n  ssrUniqueId,\n  // SSR_UNIQUE_ID\n  ssrBlockState,\n  // SSR_BLOCK_STATE\n  null,\n  // ON_COMPLETE_FNS\n  null // HYDRATE_TRIGGER_CLEANUP_FNS\n  ];\n  setLDeferBlockDetails(lView, adjustedIndex, lDetails);\n  let registry = null;\n  if (ssrUniqueId !== null) {\n    ngDevMode && assertIncrementalHydrationIsConfigured(injector);\n    // Store this defer block in the registry, to have an access to\n    // internal data structures from hydration runtime code.\n    registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    registry.add(ssrUniqueId, {\n      lView,\n      tNode,\n      lContainer\n    });\n  }\n  const onLViewDestroy = () => {\n    invokeAllTriggerCleanupFns(lDetails);\n    if (ssrUniqueId !== null) {\n      registry?.cleanup([ssrUniqueId]);\n    }\n  };\n  // When defer block is triggered - unsubscribe from LView destroy cleanup.\n  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));\n  storeLViewOnDestroy(lView, onLViewDestroy);\n}\n/**\n * Loads defer block dependencies when a trigger value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const value = Boolean(rawValue); // handle truthy or falsy values\n      const lDetails = getLDeferBlockDetails(lView, tNode);\n      const renderedState = lDetails[DEFER_BLOCK_STATE];\n      if (value === false && renderedState === DeferBlockInternalState.Initial) {\n        // If nothing is rendered yet, render a placeholder (if defined).\n        renderPlaceholder(lView, tNode);\n      } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {\n        triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode);\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Prefetches the deferred content when a value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const value = Boolean(rawValue); // handle truthy or falsy values\n      const tView = lView[TVIEW];\n      const tNode = getSelectedTNode();\n      const tDetails = getTDeferBlockDetails(tView, tNode);\n      if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n        // If loading has not been started yet, trigger it now.\n        triggerPrefetching(tDetails, lView, tNode);\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Hydrates the deferred content when a value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  // TODO(incremental-hydration): audit all defer instructions to reduce unnecessary work by\n  // moving function calls inside their relevant control flow blocks\n  const bindingIndex = nextBindingIndex();\n  const tView = getTView();\n  const hydrateTriggers = getHydrateTriggers(tView, tNode);\n  hydrateTriggers.set(6 /* DeferBlockTrigger.When */, null);\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n      // We are on the server and SSR for defer blocks is enabled.\n      triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n    } else {\n      const injector = lView[INJECTOR];\n      const prevConsumer = setActiveConsumer$1(null);\n      try {\n        const value = Boolean(rawValue); // handle truthy or falsy values\n        if (value === true) {\n          // The `when` condition has changed to `true`, trigger defer block loading\n          // if the block is either in initial (nothing is rendered) or a placeholder\n          // state.\n          const lDetails = getLDeferBlockDetails(lView, tNode);\n          const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n          ngDevMode && assertSsrIdDefined(ssrUniqueId);\n          triggerHydrationFromBlockName(injector, ssrUniqueId);\n        }\n      } finally {\n        setActiveConsumer$1(prevConsumer);\n      }\n    }\n  }\n}\n/**\n * Specifies that hydration never occurs.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateNever() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(7 /* DeferBlockTrigger.Never */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  scheduleDelayedTrigger(onIdle);\n}\n/**\n * Sets up logic to handle the `prefetch on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);\n}\n/**\n * Sets up logic to handle the `on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(0 /* DeferBlockTrigger.Idle */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    scheduleDelayedHydrating(onIdle, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on immediate` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  // Render placeholder block only if loading template is not present and we're on\n  // the client to avoid content flickering, since it would be immediately replaced\n  // by the loading block.\n  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n  if (tDetails.loadingTmplIndex === null) {\n    renderPlaceholder(lView, tNode);\n  }\n  triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode);\n}\n/**\n * Sets up logic to handle the `prefetch on immediate` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    triggerResourceLoading(tDetails, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on immediate` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(1 /* DeferBlockTrigger.Immediate */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    const injector = lView[INJECTOR];\n    const lDetails = getLDeferBlockDetails(lView, tNode);\n    const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n    ngDevMode && assertSsrIdDefined(ssrUniqueId);\n    triggerHydrationFromBlockName(injector, ssrUniqueId);\n  }\n}\n/**\n * Creates runtime data structures for the `on timer` deferred trigger.\n * @param delay Amount of time to wait before loading the content.\n * @codeGenApi\n */\nfunction ɵɵdeferOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  scheduleDelayedTrigger(onTimer(delay));\n}\n/**\n * Creates runtime data structures for the `prefetch on timer` deferred trigger.\n * @param delay Amount of time to wait before prefetching the content.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);\n}\n/**\n * Creates runtime data structures for the `on timer` hydrate trigger.\n * @param delay Amount of time to wait before loading the content.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, {\n    delay\n  });\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    scheduleDelayedHydrating(onTimer(delay), lView, tNode);\n  }\n}\n/**\n * Creates runtime data structures for the `on hover` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnHover(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on hover` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on hover` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnHover() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(4 /* DeferBlockTrigger.Hover */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on hover is handled by JSAction in\n  // event_replay.ts.\n}\n/**\n * Creates runtime data structures for the `on interaction` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on interaction` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on interaction` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnInteraction() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(3 /* DeferBlockTrigger.Interaction */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on interaction is handled by JSAction in\n  // event_replay.ts.\n}\n/**\n * Creates runtime data structures for the `on viewport` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewport, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on viewport` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewport, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on viewport` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnViewport() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(2 /* DeferBlockTrigger.Viewport */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on viewport happens in triggering.ts,\n  // since these instructions won't exist for dehydrated content.\n}\n\n/**\n * Updates the value of or removes a bound attribute on an Element.\n *\n * Used in the case of `[attr.title]=\"value\"`\n *\n * @param name name The name of the attribute.\n * @param value value The attribute is removed when value is `null` or `undefined`.\n *                  Otherwise the attribute value is set to the stringified value.\n * @param sanitizer An optional function used to sanitize the value.\n * @param namespace Optional namespace to use when setting the attribute.\n *\n * @codeGenApi\n */\nfunction ɵɵattribute(name, value, sanitizer, namespace) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);\n  }\n  return ɵɵattribute;\n}\n\n/**\n * Create interpolation bindings with a variable number of expressions.\n *\n * If there are 1 to 8 expressions `interpolation1()` to `interpolation8()` should be used instead.\n * Those are faster because there is no need to create an array of expressions and iterate over it.\n *\n * `values`:\n * - has static text at even indexes,\n * - has evaluated expressions at odd indexes.\n *\n * Returns the concatenated string when any of the arguments changes, `NO_CHANGE` otherwise.\n */\nfunction interpolationV(lView, values) {\n  ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');\n  ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');\n  let isBindingUpdated = false;\n  let bindingIndex = getBindingIndex();\n  for (let i = 1; i < values.length; i += 2) {\n    // Check if bindings (odd indexes) have changed\n    isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;\n  }\n  setBindingIndex(bindingIndex);\n  if (!isBindingUpdated) {\n    return NO_CHANGE;\n  }\n  // Build the updated content\n  let content = values[0];\n  for (let i = 1; i < values.length; i += 2) {\n    content += renderStringify(values[i]) + values[i + 1];\n  }\n  return content;\n}\n/**\n * Creates an interpolation binding with 1 expression.\n *\n * @param prefix static value used for concatenation only.\n * @param v0 value checked for change.\n * @param suffix static value used for concatenation only.\n */\nfunction interpolation1(lView, prefix, v0, suffix) {\n  const different = bindingUpdated(lView, nextBindingIndex(), v0);\n  return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 2 expressions.\n */\nfunction interpolation2(lView, prefix, v0, i0, v1, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated2(lView, bindingIndex, v0, v1);\n  incrementBindingIndex(2);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 3 expressions.\n */\nfunction interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);\n  incrementBindingIndex(3);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;\n}\n/**\n * Create an interpolation binding with 4 expressions.\n */\nfunction interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  incrementBindingIndex(4);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 5 expressions.\n */\nfunction interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated(lView, bindingIndex + 4, v4) || different;\n  incrementBindingIndex(5);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 6 expressions.\n */\nfunction interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;\n  incrementBindingIndex(6);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 7 expressions.\n */\nfunction interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;\n  incrementBindingIndex(7);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 8 expressions.\n */\nfunction interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;\n  incrementBindingIndex(8);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;\n}\n\n/**\n *\n * Update an interpolated attribute on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate1('title', 'prefix', v0, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix);\n  }\n  return ɵɵattributeInterpolate1;\n}\n/**\n *\n * Update an interpolated attribute on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix);\n  }\n  return ɵɵattributeInterpolate2;\n}\n/**\n *\n * Update an interpolated attribute on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate3(\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);\n  }\n  return ɵɵattributeInterpolate3;\n}\n/**\n *\n * Update an interpolated attribute on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate4(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);\n  }\n  return ɵɵattributeInterpolate4;\n}\n/**\n *\n * Update an interpolated attribute on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate5(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);\n  }\n  return ɵɵattributeInterpolate5;\n}\n/**\n *\n * Update an interpolated attribute on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate6(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);\n  }\n  return ɵɵattributeInterpolate6;\n}\n/**\n *\n * Update an interpolated attribute on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate7(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);\n  }\n  return ɵɵattributeInterpolate7;\n}\n/**\n *\n * Update an interpolated attribute on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate8(\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);\n  }\n  return ɵɵattributeInterpolate8;\n}\n/**\n * Update an interpolated attribute on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolateV(\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * @param attrName The name of the attribute to update.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolated = interpolationV(lView, values);\n  if (interpolated !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);\n    if (ngDevMode) {\n      const interpolationInBetween = [values[0]]; // prefix\n      for (let i = 2; i < values.length; i += 2) {\n        interpolationInBetween.push(values[i]);\n      }\n      storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);\n    }\n  }\n  return ɵɵattributeInterpolateV;\n}\nfunction toTStylingRange(prev, next) {\n  ngDevMode && assertNumberInRange(prev, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return prev << 17 /* StylingRange.PREV_SHIFT */ | next << 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction getTStylingRangePrev(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange >> 17 /* StylingRange.PREV_SHIFT */ & 32767 /* StylingRange.UNSIGNED_MASK */;\n}\nfunction getTStylingRangePrevDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 2 /* StylingRange.PREV_DUPLICATE */) == 2 /* StylingRange.PREV_DUPLICATE */;\n}\nfunction setTStylingRangePrev(tStylingRange, previous) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  ngDevMode && assertNumberInRange(previous, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return tStylingRange & ~4294836224 /* StylingRange.PREV_MASK */ | previous << 17 /* StylingRange.PREV_SHIFT */;\n}\nfunction setTStylingRangePrevDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange | 2 /* StylingRange.PREV_DUPLICATE */;\n}\nfunction getTStylingRangeNext(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 131068 /* StylingRange.NEXT_MASK */) >> 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction setTStylingRangeNext(tStylingRange, next) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return tStylingRange & ~131068 /* StylingRange.NEXT_MASK */ |\n  //\n  next << 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction getTStylingRangeNextDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 1 /* StylingRange.NEXT_DUPLICATE */) === 1 /* StylingRange.NEXT_DUPLICATE */;\n}\nfunction setTStylingRangeNextDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange | 1 /* StylingRange.NEXT_DUPLICATE */;\n}\nfunction getTStylingRangeTail(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  const next = getTStylingRangeNext(tStylingRange);\n  return next === 0 ? getTStylingRangePrev(tStylingRange) : next;\n}\n\n/**\n * NOTE: The word `styling` is used interchangeably as style or class styling.\n *\n * This file contains code to link styling instructions together so that they can be replayed in\n * priority order. The file exists because Ivy styling instruction execution order does not match\n * that of the priority order. The purpose of this code is to create a linked list so that the\n * instructions can be traversed in priority order when computing the styles.\n *\n * Assume we are dealing with the following code:\n * ```angular-ts\n * @Component({\n *   template: `\n *     <my-cmp [style]=\" {color: '#001'} \"\n *             [style.color]=\" #002 \"\n *             dir-style-color-1\n *             dir-style-color-2> `\n * })\n * class ExampleComponent {\n *   static ngComp = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#001'});\n *     ɵɵstyleProp('color', '#002');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `[dir-style-color-1]',\n * })\n * class Style1Directive {\n *   @HostBinding('style') style = {color: '#005'};\n *   @HostBinding('style.color') color = '#006';\n *\n *   static ngDir = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#005'});\n *     ɵɵstyleProp('color', '#006');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `[dir-style-color-2]',\n * })\n * class Style2Directive {\n *   @HostBinding('style') style = {color: '#007'};\n *   @HostBinding('style.color') color = '#008';\n *\n *   static ngDir = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#007'});\n *     ɵɵstyleProp('color', '#008');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `my-cmp',\n * })\n * class MyComponent {\n *   @HostBinding('style') style = {color: '#003'};\n *   @HostBinding('style.color') color = '#004';\n *\n *   static ngComp = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#003'});\n *     ɵɵstyleProp('color', '#004');\n *     ...\n *   }\n * }\n * ```\n *\n * The Order of instruction execution is:\n *\n * NOTE: the comment binding location is for illustrative purposes only.\n *\n * ```ts\n * // Template: (ExampleComponent)\n *     ɵɵstyleMap({color: '#001'});   // Binding index: 10\n *     ɵɵstyleProp('color', '#002');  // Binding index: 12\n * // MyComponent\n *     ɵɵstyleMap({color: '#003'});   // Binding index: 20\n *     ɵɵstyleProp('color', '#004');  // Binding index: 22\n * // Style1Directive\n *     ɵɵstyleMap({color: '#005'});   // Binding index: 24\n *     ɵɵstyleProp('color', '#006');  // Binding index: 26\n * // Style2Directive\n *     ɵɵstyleMap({color: '#007'});   // Binding index: 28\n *     ɵɵstyleProp('color', '#008');  // Binding index: 30\n * ```\n *\n * The correct priority order of concatenation is:\n *\n * ```ts\n * // MyComponent\n *     ɵɵstyleMap({color: '#003'});   // Binding index: 20\n *     ɵɵstyleProp('color', '#004');  // Binding index: 22\n * // Style1Directive\n *     ɵɵstyleMap({color: '#005'});   // Binding index: 24\n *     ɵɵstyleProp('color', '#006');  // Binding index: 26\n * // Style2Directive\n *     ɵɵstyleMap({color: '#007'});   // Binding index: 28\n *     ɵɵstyleProp('color', '#008');  // Binding index: 30\n * // Template: (ExampleComponent)\n *     ɵɵstyleMap({color: '#001'});   // Binding index: 10\n *     ɵɵstyleProp('color', '#002');  // Binding index: 12\n * ```\n *\n * What color should be rendered?\n *\n * Once the items are correctly sorted in the list, the answer is simply the last item in the\n * concatenation list which is `#002`.\n *\n * To do so we keep a linked list of all of the bindings which pertain to this element.\n * Notice that the bindings are inserted in the order of execution, but the `TView.data` allows\n * us to traverse them in the order of priority.\n *\n * |Idx|`TView.data`|`LView`          | Notes\n * |---|------------|-----------------|--------------\n * |...|            |                 |\n * |10 |`null`      |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`\n * |11 |`30 | 12`   | ...             |\n * |12 |`color`     |`'#002'`         | `ɵɵstyleProp('color', '#002')`\n * |13 |`10 | 0`    | ...             |\n * |...|            |                 |\n * |20 |`null`      |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`\n * |21 |`0 | 22`    | ...             |\n * |22 |`color`     |`'#004'`         | `ɵɵstyleProp('color', '#004')`\n * |23 |`20 | 24`   | ...             |\n * |24 |`null`      |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`\n * |25 |`22 | 26`   | ...             |\n * |26 |`color`     |`'#006'`         | `ɵɵstyleProp('color', '#006')`\n * |27 |`24 | 28`   | ...             |\n * |28 |`null`      |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`\n * |29 |`26 | 30`   | ...             |\n * |30 |`color`     |`'#008'`         | `ɵɵstyleProp('color', '#008')`\n * |31 |`28 | 10`   | ...             |\n *\n * The above data structure allows us to re-concatenate the styling no matter which data binding\n * changes.\n *\n * NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next\n * duplicate bit. The duplicate bit if true says there either is a binding with the same name or\n * there is a map (which may contain the name). This information is useful in knowing if other\n * styles with higher priority need to be searched for overwrites.\n *\n * NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in\n * `tnode_linked_list_spec.ts` for working example.\n */\nlet __unused_const_as_closure_does_not_like_standalone_comment_blocks__;\n/**\n * Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked\n * list of styles and compute the duplicate flag.\n *\n * Note: this function is executed during `firstUpdatePass` only to populate the `TView.data`.\n *\n * The function works by keeping track of `tStylingRange` which contains two pointers pointing to\n * the head/tail of the template portion of the styles.\n *  - if `isHost === false` (we are template) then insertion is at tail of `TStylingRange`\n *  - if `isHost === true` (we are host binding) then insertion is at head of `TStylingRange`\n *\n * @param tData The `TData` to insert into.\n * @param tNode `TNode` associated with the styling element.\n * @param tStylingKey See `TStylingKey`.\n * @param index location of where `tStyleValue` should be stored (and linked into list.)\n * @param isHostBinding `true` if the insertion is for a `hostBinding`. (insertion is in front of\n *               template.)\n * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.\n *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)\n */\nfunction insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {\n  ngDevMode && assertFirstUpdatePass(getTView());\n  let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;\n  let tmplHead = getTStylingRangePrev(tBindings);\n  let tmplTail = getTStylingRangeNext(tBindings);\n  tData[index] = tStylingKeyWithStatic;\n  let isKeyDuplicateOfStatic = false;\n  let tStylingKey;\n  if (Array.isArray(tStylingKeyWithStatic)) {\n    // We are case when the `TStylingKey` contains static fields as well.\n    const staticKeyValueArray = tStylingKeyWithStatic;\n    tStylingKey = staticKeyValueArray[1]; // unwrap.\n    // We need to check if our key is present in the static so that we can mark it as duplicate.\n    if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {\n      // tStylingKey is present in the statics, need to mark it as duplicate.\n      isKeyDuplicateOfStatic = true;\n    }\n  } else {\n    tStylingKey = tStylingKeyWithStatic;\n  }\n  if (isHostBinding) {\n    // We are inserting host bindings\n    // If we don't have template bindings then `tail` is 0.\n    const hasTemplateBindings = tmplTail !== 0;\n    // This is important to know because that means that the `head` can't point to the first\n    // template bindings (there are none.) Instead the head points to the tail of the template.\n    if (hasTemplateBindings) {\n      // template head's \"prev\" will point to last host binding or to 0 if no host bindings yet\n      const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);\n      tData[index + 1] = toTStylingRange(previousNode, tmplHead);\n      // if a host binding has already been registered, we need to update the next of that host\n      // binding to point to this one\n      if (previousNode !== 0) {\n        // We need to update the template-tail value to point to us.\n        tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);\n      }\n      // The \"previous\" of the template binding head should point to this host binding\n      tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);\n    } else {\n      tData[index + 1] = toTStylingRange(tmplHead, 0);\n      // if a host binding has already been registered, we need to update the next of that host\n      // binding to point to this one\n      if (tmplHead !== 0) {\n        // We need to update the template-tail value to point to us.\n        tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);\n      }\n      // if we don't have template, the head points to template-tail, and needs to be advanced.\n      tmplHead = index;\n    }\n  } else {\n    // We are inserting in template section.\n    // We need to set this binding's \"previous\" to the current template tail\n    tData[index + 1] = toTStylingRange(tmplTail, 0);\n    ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');\n    if (tmplHead === 0) {\n      tmplHead = index;\n    } else {\n      // We need to update the previous value \"next\" to point to this binding\n      tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);\n    }\n    tmplTail = index;\n  }\n  // Now we need to update / compute the duplicates.\n  // Starting with our location search towards head (least priority)\n  if (isKeyDuplicateOfStatic) {\n    tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);\n  }\n  markDuplicates(tData, tStylingKey, index, true);\n  markDuplicates(tData, tStylingKey, index, false);\n  markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);\n  tBindings = toTStylingRange(tmplHead, tmplTail);\n  if (isClassBinding) {\n    tNode.classBindings = tBindings;\n  } else {\n    tNode.styleBindings = tBindings;\n  }\n}\n/**\n * Look into the residual styling to see if the current `tStylingKey` is duplicate of residual.\n *\n * @param tNode `TNode` where the residual is stored.\n * @param tStylingKey `TStylingKey` to store.\n * @param tData `TData` associated with the current `LView`.\n * @param index location of where `tStyleValue` should be stored (and linked into list.)\n * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.\n *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)\n */\nfunction markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {\n  const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;\n  if (residual != null /* or undefined */ && typeof tStylingKey == 'string' && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {\n    // We have duplicate in the residual so mark ourselves as duplicate.\n    tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);\n  }\n}\n/**\n * Marks `TStyleValue`s as duplicates if another style binding in the list has the same\n * `TStyleValue`.\n *\n * NOTE: this function is intended to be called twice once with `isPrevDir` set to `true` and once\n * with it set to `false` to search both the previous as well as next items in the list.\n *\n * No duplicate case\n * ```\n *   [style.color]\n *   [style.width.px] <<- index\n *   [style.height.px]\n * ```\n *\n * In the above case adding `[style.width.px]` to the existing `[style.color]` produces no\n * duplicates because `width` is not found in any other part of the linked list.\n *\n * Duplicate case\n * ```\n *   [style.color]\n *   [style.width.em]\n *   [style.width.px] <<- index\n * ```\n * In the above case adding `[style.width.px]` will produce a duplicate with `[style.width.em]`\n * because `width` is found in the chain.\n *\n * Map case 1\n * ```\n *   [style.width.px]\n *   [style.color]\n *   [style]  <<- index\n * ```\n * In the above case adding `[style]` will produce a duplicate with any other bindings because\n * `[style]` is a Map and as such is fully dynamic and could produce `color` or `width`.\n *\n * Map case 2\n * ```\n *   [style]\n *   [style.width.px]\n *   [style.color]  <<- index\n * ```\n * In the above case adding `[style.color]` will produce a duplicate because there is already a\n * `[style]` binding which is a Map and as such is fully dynamic and could produce `color` or\n * `width`.\n *\n * NOTE: Once `[style]` (Map) is added into the system all things are mapped as duplicates.\n * NOTE: We use `style` as example, but same logic is applied to `class`es as well.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tStylingKey `TStylingKeyPrimitive` which contains the value to compare to other keys in\n *        the linked list.\n * @param index Starting location in the linked list to search from\n * @param isPrevDir Direction.\n *        - `true` for previous (lower priority);\n *        - `false` for next (higher priority).\n */\nfunction markDuplicates(tData, tStylingKey, index, isPrevDir) {\n  const tStylingAtIndex = tData[index + 1];\n  const isMap = tStylingKey === null;\n  let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);\n  let foundDuplicate = false;\n  // We keep iterating as long as we have a cursor\n  // AND either:\n  // - we found what we are looking for, OR\n  // - we are a map in which case we have to continue searching even after we find what we were\n  //   looking for since we are a wild card and everything needs to be flipped to duplicate.\n  while (cursor !== 0 && (foundDuplicate === false || isMap)) {\n    ngDevMode && assertIndexInRange(tData, cursor);\n    const tStylingValueAtCursor = tData[cursor];\n    const tStyleRangeAtCursor = tData[cursor + 1];\n    if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {\n      foundDuplicate = true;\n      tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);\n    }\n    cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);\n  }\n  if (foundDuplicate) {\n    // if we found a duplicate, than mark ourselves.\n    tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);\n  }\n}\n/**\n * Determines if two `TStylingKey`s are a match.\n *\n * When computing whether a binding contains a duplicate, we need to compare if the instruction\n * `TStylingKey` has a match.\n *\n * Here are examples of `TStylingKey`s which match given `tStylingKeyCursor` is:\n * - `color`\n *    - `color`    // Match another color\n *    - `null`     // That means that `tStylingKey` is a `classMap`/`styleMap` instruction\n *    - `['', 'color', 'other', true]` // wrapped `color` so match\n *    - `['', null, 'other', true]`       // wrapped `null` so match\n *    - `['', 'width', 'color', 'value']` // wrapped static value contains a match on `'color'`\n * - `null`       // `tStylingKeyCursor` always match as it is `classMap`/`styleMap` instruction\n *\n * @param tStylingKeyCursor\n * @param tStylingKey\n */\nfunction isStylingMatch(tStylingKeyCursor, tStylingKey) {\n  ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, \"Expected that 'tStylingKey' has been unwrapped\");\n  if (tStylingKeyCursor === null ||\n  // If the cursor is `null` it means that we have map at that\n  // location so we must assume that we have a match.\n  tStylingKey == null ||\n  // If `tStylingKey` is `null` then it is a map therefor assume that it\n  // contains a match.\n  (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey // If the keys match explicitly than we are a match.\n  ) {\n    return true;\n  } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {\n    // if we did not find a match, but `tStylingKeyCursor` is `KeyValueArray` that means cursor has\n    // statics and we need to check those as well.\n    return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0; // see if we are matching the key\n  }\n  return false;\n}\n\n// Global state of the parser. (This makes parser non-reentrant, but that is not an issue)\nconst parserState = {\n  textEnd: 0,\n  key: 0,\n  keyEnd: 0,\n  value: 0,\n  valueEnd: 0\n};\n/**\n * Retrieves the last parsed `key` of style.\n * @param text the text to substring the key from.\n */\nfunction getLastParsedKey(text) {\n  return text.substring(parserState.key, parserState.keyEnd);\n}\n/**\n * Retrieves the last parsed `value` of style.\n * @param text the text to substring the key from.\n */\nfunction getLastParsedValue(text) {\n  return text.substring(parserState.value, parserState.valueEnd);\n}\n/**\n * Initializes `className` string for parsing and parses the first token.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n *   const key = getLastParsedKey();\n *   ...\n * }\n * ```\n * @param text `className` to parse\n * @returns index where the next invocation of `parseClassNameNext` should resume.\n */\nfunction parseClassName(text) {\n  resetParserState(text);\n  return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\n/**\n * Parses next `className` token.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n *   const key = getLastParsedKey();\n *   ...\n * }\n * ```\n *\n * @param text `className` to parse\n * @param index where the parsing should resume.\n * @returns index where the next invocation of `parseClassNameNext` should resume.\n */\nfunction parseClassNameNext(text, index) {\n  const end = parserState.textEnd;\n  if (end === index) {\n    return -1;\n  }\n  index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);\n  return consumeWhitespace(text, index, end);\n}\n/**\n * Initializes `cssText` string for parsing and parses the first key/values.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {\n *   const key = getLastParsedKey();\n *   const value = getLastParsedValue();\n *   ...\n * }\n * ```\n * @param text `cssText` to parse\n * @returns index where the next invocation of `parseStyleNext` should resume.\n */\nfunction parseStyle(text) {\n  resetParserState(text);\n  return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\n/**\n * Parses the next `cssText` key/values.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {\n *   const key = getLastParsedKey();\n *   const value = getLastParsedValue();\n *   ...\n * }\n *\n * @param text `cssText` to parse\n * @param index where the parsing should resume.\n * @returns index where the next invocation of `parseStyleNext` should resume.\n */\nfunction parseStyleNext(text, startIndex) {\n  const end = parserState.textEnd;\n  let index = parserState.key = consumeWhitespace(text, startIndex, end);\n  if (end === index) {\n    // we reached an end so just quit\n    return -1;\n  }\n  index = parserState.keyEnd = consumeStyleKey(text, index, end);\n  index = consumeSeparator(text, index, end, 58 /* CharCode.COLON */);\n  index = parserState.value = consumeWhitespace(text, index, end);\n  index = parserState.valueEnd = consumeStyleValue(text, index, end);\n  return consumeSeparator(text, index, end, 59 /* CharCode.SEMI_COLON */);\n}\n/**\n * Reset the global state of the styling parser.\n * @param text The styling text to parse.\n */\nfunction resetParserState(text) {\n  parserState.key = 0;\n  parserState.keyEnd = 0;\n  parserState.value = 0;\n  parserState.valueEnd = 0;\n  parserState.textEnd = text.length;\n}\n/**\n * Returns index of next non-whitespace character.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index of next non-whitespace character (May be the same as `start` if no whitespace at\n *          that location.)\n */\nfunction consumeWhitespace(text, startIndex, endIndex) {\n  while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32 /* CharCode.SPACE */) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Returns index of last char in class token.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last char in class token.\n */\nfunction consumeClassToken(text, startIndex, endIndex) {\n  while (startIndex < endIndex && text.charCodeAt(startIndex) > 32 /* CharCode.SPACE */) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes all of the characters belonging to style key and token.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last style key character.\n */\nfunction consumeStyleKey(text, startIndex, endIndex) {\n  let ch;\n  while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 /* CharCode.DASH */ || ch === 95 /* CharCode.UNDERSCORE */ || (ch & -33 /* CharCode.UPPER_CASE */) >= 65 /* CharCode.A */ && (ch & -33 /* CharCode.UPPER_CASE */) <= 90 /* CharCode.Z */ || ch >= 48 /* CharCode.ZERO */ && ch <= 57 /* CharCode.NINE */)) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes all whitespace and the separator `:` after the style key.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after separator and surrounding whitespace.\n */\nfunction consumeSeparator(text, startIndex, endIndex, separator) {\n  startIndex = consumeWhitespace(text, startIndex, endIndex);\n  if (startIndex < endIndex) {\n    if (ngDevMode && text.charCodeAt(startIndex) !== separator) {\n      malformedStyleError(text, String.fromCharCode(separator), startIndex);\n    }\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes style value honoring `url()` and `\"\"` text.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last style value character.\n */\nfunction consumeStyleValue(text, startIndex, endIndex) {\n  let ch1 = -1; // 1st previous character\n  let ch2 = -1; // 2nd previous character\n  let ch3 = -1; // 3rd previous character\n  let i = startIndex;\n  let lastChIndex = i;\n  while (i < endIndex) {\n    const ch = text.charCodeAt(i++);\n    if (ch === 59 /* CharCode.SEMI_COLON */) {\n      return lastChIndex;\n    } else if (ch === 34 /* CharCode.DOUBLE_QUOTE */ || ch === 39 /* CharCode.SINGLE_QUOTE */) {\n      lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);\n    } else if (startIndex === i - 4 &&\n    // We have seen only 4 characters so far \"URL(\" (Ignore \"foo_URL()\")\n    ch3 === 85 /* CharCode.U */ && ch2 === 82 /* CharCode.R */ && ch1 === 76 /* CharCode.L */ && ch === 40 /* CharCode.OPEN_PAREN */) {\n      lastChIndex = i = consumeQuotedText(text, 41 /* CharCode.CLOSE_PAREN */, i, endIndex);\n    } else if (ch > 32 /* CharCode.SPACE */) {\n      // if we have a non-whitespace character then capture its location\n      lastChIndex = i;\n    }\n    ch3 = ch2;\n    ch2 = ch1;\n    ch1 = ch & -33 /* CharCode.UPPER_CASE */;\n  }\n  return lastChIndex;\n}\n/**\n * Consumes all of the quoted characters.\n *\n * @param text Text to scan\n * @param quoteCharCode CharCode of either `\"` or `'` quote or `)` for `url(...)`.\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after quoted characters.\n */\nfunction consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {\n  let ch1 = -1; // 1st previous character\n  let index = startIndex;\n  while (index < endIndex) {\n    const ch = text.charCodeAt(index++);\n    if (ch == quoteCharCode && ch1 !== 92 /* CharCode.BACK_SLASH */) {\n      return index;\n    }\n    if (ch == 92 /* CharCode.BACK_SLASH */ && ch1 === 92 /* CharCode.BACK_SLASH */) {\n      // two back slashes cancel each other out. For example `\"\\\\\"` should properly end the\n      // quotation. (It should not assume that the last `\"` is escaped.)\n      ch1 = 0;\n    } else {\n      ch1 = ch;\n    }\n  }\n  throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();\n}\nfunction malformedStyleError(text, expecting, index) {\n  ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');\n  throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' + text.substring(index, index + 1) + '<<]' + text.slice(index + 1) + `'. Expecting '${expecting}'.`);\n}\n\n/**\n * Update a property on a selected element.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled\n *\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵproperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵproperty;\n}\n/**\n * Given `<div style=\"...\" my-dir>` and `MyDir` with `@Input('style')` we need to write to\n * directive input.\n */\nfunction setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {\n  const inputs = tNode.inputs;\n  const property = isClassBased ? 'class' : 'style';\n  // We support both 'class' and `className` hence the fallback.\n  setInputsForProperty(tView, lView, inputs[property], property, value);\n}\n\n/**\n * Update a style binding on an element with the provided value.\n *\n * If the style value is falsy then it will be removed from the element\n * (or assigned a different value depending if there are any styles placed\n * on the element with `styleMap` or any static styles that are\n * present from when the element was created with `styling`).\n *\n * Note that the styling element is updated as part of `stylingApply`.\n *\n * @param prop A valid CSS property.\n * @param value New value to write (`null` or an empty string to remove).\n * @param suffix Optional suffix. Used with scalar values to add unit such as `px`.\n *\n * Note that this will apply the provided style value to the host element if this function is called\n * within a host binding function.\n *\n * @codeGenApi\n */\nfunction ɵɵstyleProp(prop, value, suffix) {\n  checkStylingProperty(prop, value, suffix, false);\n  return ɵɵstyleProp;\n}\n/**\n * Update a class binding on an element with the provided value.\n *\n * This instruction is meant to handle the `[class.foo]=\"exp\"` case and,\n * therefore, the class binding itself must already be allocated using\n * `styling` within the creation block.\n *\n * @param prop A valid CSS class (only one).\n * @param value A true/false value which will turn the class on or off.\n *\n * Note that this will apply the provided class value to the host element if this function\n * is called within a host binding function.\n *\n * @codeGenApi\n */\nfunction ɵɵclassProp(className, value) {\n  checkStylingProperty(className, value, null, true);\n  return ɵɵclassProp;\n}\n/**\n * Update style bindings using an object literal on an element.\n *\n * This instruction is meant to apply styling via the `[style]=\"exp\"` template bindings.\n * When styles are applied to the element they will then be updated with respect to\n * any styles/classes set via `styleProp`. If any styles are set to falsy\n * then they will be removed from the element.\n *\n * Note that the styling instruction will not be applied until `stylingApply` is called.\n *\n * @param styles A key/value style map of the styles that will be applied to the given element.\n *        Any missing styles (that have already been applied to the element beforehand) will be\n *        removed (unset) from the element's styling.\n *\n * Note that this will apply the provided styleMap value to the host element if this function\n * is called within a host binding.\n *\n * @codeGenApi\n */\nfunction ɵɵstyleMap(styles) {\n  checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);\n}\n/**\n * Parse text as style and add values to KeyValueArray.\n *\n * This code is pulled out to a separate function so that it can be tree shaken away if it is not\n * needed. It is only referenced from `ɵɵstyleMap`.\n *\n * @param keyValueArray KeyValueArray to add parsed values to.\n * @param text text to parse.\n */\nfunction styleStringParser(keyValueArray, text) {\n  for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {\n    styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));\n  }\n}\n/**\n * Update class bindings using an object literal or class-string on an element.\n *\n * This instruction is meant to apply styling via the `[class]=\"exp\"` template bindings.\n * When classes are applied to the element they will then be updated with\n * respect to any styles/classes set via `classProp`. If any\n * classes are set to falsy then they will be removed from the element.\n *\n * Note that the styling instruction will not be applied until `stylingApply` is called.\n * Note that this will the provided classMap value to the host element if this function is called\n * within a host binding.\n *\n * @param classes A key/value map or string of CSS classes that will be added to the\n *        given element. Any missing classes (that have already been applied to the element\n *        beforehand) will be removed (unset) from the element's list of CSS classes.\n *\n * @codeGenApi\n */\nfunction ɵɵclassMap(classes) {\n  checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);\n}\n/**\n * Parse text as class and add values to KeyValueArray.\n *\n * This code is pulled out to a separate function so that it can be tree shaken away if it is not\n * needed. It is only referenced from `ɵɵclassMap`.\n *\n * @param keyValueArray KeyValueArray to add parsed values to.\n * @param text text to parse.\n */\nfunction classStringParser(keyValueArray, text) {\n  for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n    keyValueArraySet(keyValueArray, getLastParsedKey(text), true);\n  }\n}\n/**\n * Common code between `ɵɵclassProp` and `ɵɵstyleProp`.\n *\n * @param prop property name.\n * @param value binding value.\n * @param suffix suffix for the property (e.g. `em` or `px`)\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction checkStylingProperty(prop, value, suffix, isClassBased) {\n  const lView = getLView();\n  const tView = getTView();\n  // Styling instructions use 2 slots per binding.\n  // 1. one for the value / TStylingKey\n  // 2. one for the intermittent-value / TStylingRange\n  const bindingIndex = incrementBindingIndex(2);\n  if (tView.firstUpdatePass) {\n    stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);\n  }\n  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n    const tNode = tView.data[getSelectedIndex()];\n    updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);\n  }\n}\n/**\n * Common code between `ɵɵclassMap` and `ɵɵstyleMap`.\n *\n * @param keyValueArraySet (See `keyValueArraySet` in \"util/array_utils\") Gets passed in as a\n *        function so that `style` can be processed. This is done for tree shaking purposes.\n * @param stringParser Parser used to parse `value` if `string`. (Passed in as `style` and `class`\n *        have different parsers.)\n * @param value bound value from application\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {\n  const tView = getTView();\n  const bindingIndex = incrementBindingIndex(2);\n  if (tView.firstUpdatePass) {\n    stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);\n  }\n  const lView = getLView();\n  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n    // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the\n    // if so as not to read unnecessarily.\n    const tNode = tView.data[getSelectedIndex()];\n    if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {\n      if (ngDevMode) {\n        // verify that if we are shadowing then `TData` is appropriately marked so that we skip\n        // processing this binding in styling resolution.\n        const tStylingKey = tView.data[bindingIndex];\n        assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, \"Styling linked list shadow input should be marked as 'false'\");\n      }\n      // VE does not concatenate the static portion like we are doing here.\n      // Instead VE just ignores the static completely if dynamic binding is present.\n      // Because of locality we have already set the static portion because we don't know if there\n      // is a dynamic portion until later. If we would ignore the static portion it would look like\n      // the binding has removed it. This would confuse `[ngStyle]`/`[ngClass]` to do the wrong\n      // thing as it would think that the static portion was removed. For this reason we\n      // concatenate it so that `[ngStyle]`/`[ngClass]`  can continue to work on changed.\n      let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;\n      ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(';'), true, \"Expecting static portion to end with ';'\");\n      if (staticPrefix !== null) {\n        // We want to make sure that falsy values of `value` become empty strings.\n        value = concatStringsWithSpace(staticPrefix, value ? value : '');\n      }\n      // Given `<div [style] my-dir>` such that `my-dir` has `@Input('style')`.\n      // This takes over the `[style]` binding. (Same for `[class]`)\n      setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);\n    } else {\n      updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);\n    }\n  }\n}\n/**\n * Determines when the binding is in `hostBindings` section\n *\n * @param tView Current `TView`\n * @param bindingIndex index of binding which we would like if it is in `hostBindings`\n */\nfunction isInHostBindings(tView, bindingIndex) {\n  // All host bindings are placed after the expando section.\n  return bindingIndex >= tView.expandoStartIndex;\n}\n/**\n * Collects the necessary information to insert the binding into a linked list of style bindings\n * using `insertTStylingBinding`.\n *\n * @param tView `TView` where the binding linked list will be stored.\n * @param tStylingKey Property/key of the binding.\n * @param bindingIndex Index of binding associated with the `prop`\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {\n  ngDevMode && assertFirstUpdatePass(tView);\n  const tData = tView.data;\n  if (tData[bindingIndex + 1] === null) {\n    // The above check is necessary because we don't clear first update pass until first successful\n    // (no exception) template execution. This prevents the styling instruction from double adding\n    // itself to the list.\n    // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the\n    // if so as not to read unnecessarily.\n    const tNode = tData[getSelectedIndex()];\n    ngDevMode && assertDefined(tNode, 'TNode expected');\n    const isHostBindings = isInHostBindings(tView, bindingIndex);\n    if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {\n      // `tStylingKey === null` implies that we are either `[style]` or `[class]` binding.\n      // If there is a directive which uses `@Input('style')` or `@Input('class')` than\n      // we need to neutralize this binding since that directive is shadowing it.\n      // We turn this into a noop by setting the key to `false`\n      tStylingKey = false;\n    }\n    tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);\n    insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);\n  }\n}\n/**\n * Adds static styling information to the binding if applicable.\n *\n * The linked list of styles not only stores the list and keys, but also stores static styling\n * information on some of the keys. This function determines if the key should contain the styling\n * information and computes it.\n *\n * See `TStylingStatic` for more details.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param stylingKey `TStylingKeyPrimitive` which may need to be wrapped into `TStylingKey`\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {\n  const hostDirectiveDef = getCurrentDirectiveDef(tData);\n  let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n  if (hostDirectiveDef === null) {\n    // We are in template node.\n    // If template node already had styling instruction then it has already collected the static\n    // styling and there is no need to collect them again. We know that we are the first styling\n    // instruction because the `TNode.*Bindings` points to 0 (nothing has been inserted yet).\n    const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;\n    if (isFirstStylingInstructionInTemplate) {\n      // It would be nice to be able to get the statics from `mergeAttrs`, however, at this point\n      // they are already merged and it would not be possible to figure which property belongs where\n      // in the priority.\n      stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);\n      stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);\n      // We know that if we have styling binding in template we can't have residual.\n      residual = null;\n    }\n  } else {\n    // We are in host binding node and there was no binding instruction in template node.\n    // This means that we need to compute the residual.\n    const directiveStylingLast = tNode.directiveStylingLast;\n    const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;\n    if (isFirstStylingInstructionInHostBinding) {\n      stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);\n      if (residual === null) {\n        // - If `null` than either:\n        //    - Template styling instruction already ran and it has consumed the static\n        //      styling into its `TStylingKey` and so there is no need to update residual. Instead\n        //      we need to update the `TStylingKey` associated with the first template node\n        //      instruction. OR\n        //    - Some other styling instruction ran and determined that there are no residuals\n        let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);\n        if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {\n          // Only recompute if `templateStylingKey` had static values. (If no static value found\n          // then there is nothing to do since this operation can only produce less static keys, not\n          // more.)\n          templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1] /* unwrap previous statics */, isClassBased);\n          templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);\n          setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);\n        }\n      } else {\n        // We only need to recompute residual if it is not `null`.\n        // - If existing residual (implies there was no template styling). This means that some of\n        //   the statics may have moved from the residual to the `stylingKey` and so we have to\n        //   recompute.\n        // - If `undefined` this is the first time we are running.\n        residual = collectResidual(tData, tNode, isClassBased);\n      }\n    }\n  }\n  if (residual !== undefined) {\n    isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;\n  }\n  return stylingKey;\n}\n/**\n * Retrieve the `TStylingKey` for the template styling instruction.\n *\n * This is needed since `hostBinding` styling instructions are inserted after the template\n * instruction. While the template instruction needs to update the residual in `TNode` the\n * `hostBinding` instructions need to update the `TStylingKey` of the template instruction because\n * the template instruction is downstream from the `hostBindings` instructions.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @return `TStylingKey` if found or `undefined` if not found.\n */\nfunction getTemplateHeadTStylingKey(tData, tNode, isClassBased) {\n  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n  if (getTStylingRangeNext(bindings) === 0) {\n    // There does not seem to be a styling instruction in the `template`.\n    return undefined;\n  }\n  return tData[getTStylingRangePrev(bindings)];\n}\n/**\n * Update the `TStylingKey` of the first template instruction in `TNode`.\n *\n * Logically `hostBindings` styling instructions are of lower priority than that of the template.\n * However, they execute after the template styling instructions. This means that they get inserted\n * in front of the template styling instructions.\n *\n * If we have a template styling instruction and a new `hostBindings` styling instruction is\n * executed it means that it may need to steal static fields from the template instruction. This\n * method allows us to update the first template instruction `TStylingKey` with a new value.\n *\n * Assume:\n * ```angular-ts\n * <div my-dir style=\"color: red\" [style.color]=\"tmplExp\"></div>\n *\n * @Directive({\n *   host: {\n *     'style': 'width: 100px',\n *     '[style.color]': 'dirExp',\n *   }\n * })\n * class MyDir {}\n * ```\n *\n * when `[style.color]=\"tmplExp\"` executes it creates this data structure.\n * ```ts\n *  ['', 'color', 'color', 'red', 'width', '100px'],\n * ```\n *\n * The reason for this is that the template instruction does not know if there are styling\n * instructions and must assume that there are none and must collect all of the static styling.\n * (both\n * `color' and 'width`)\n *\n * When `'[style.color]': 'dirExp',` executes we need to insert a new data into the linked list.\n * ```ts\n *  ['', 'color', 'width', '100px'],  // newly inserted\n *  ['', 'color', 'color', 'red', 'width', '100px'], // this is wrong\n * ```\n *\n * Notice that the template statics is now wrong as it incorrectly contains `width` so we need to\n * update it like so:\n * ```ts\n *  ['', 'color', 'width', '100px'],\n *  ['', 'color', 'color', 'red'],    // UPDATE\n * ```\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param tStylingKey New `TStylingKey` which is replacing the old one.\n */\nfunction setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {\n  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n  ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');\n  tData[getTStylingRangePrev(bindings)] = tStylingKey;\n}\n/**\n * Collect all static values after the current `TNode.directiveStylingLast` index.\n *\n * Collect the remaining styling information which has not yet been collected by an existing\n * styling instruction.\n *\n * @param tData `TData` where the `DirectiveDefs` are stored.\n * @param tNode `TNode` which contains the directive range.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectResidual(tData, tNode, isClassBased) {\n  let residual = undefined;\n  const directiveEnd = tNode.directiveEnd;\n  ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.');\n  // We add `1 + tNode.directiveStart` because we need to skip the current directive (as we are\n  // collecting things after the last `hostBindings` directive which had a styling instruction.)\n  for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {\n    const attrs = tData[i].hostAttrs;\n    residual = collectStylingFromTAttrs(residual, attrs, isClassBased);\n  }\n  return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);\n}\n/**\n * Collect the static styling information with lower priority than `hostDirectiveDef`.\n *\n * (This is opposite of residual styling.)\n *\n * @param hostDirectiveDef `DirectiveDef` for which we want to collect lower priority static\n *        styling. (Or `null` if template styling)\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param stylingKey Existing `TStylingKey` to update or wrap.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {\n  // We need to loop because there can be directives which have `hostAttrs` but don't have\n  // `hostBindings` so this loop catches up to the current directive..\n  let currentDirective = null;\n  const directiveEnd = tNode.directiveEnd;\n  let directiveStylingLast = tNode.directiveStylingLast;\n  if (directiveStylingLast === -1) {\n    directiveStylingLast = tNode.directiveStart;\n  } else {\n    directiveStylingLast++;\n  }\n  while (directiveStylingLast < directiveEnd) {\n    currentDirective = tData[directiveStylingLast];\n    ngDevMode && assertDefined(currentDirective, 'expected to be defined');\n    stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);\n    if (currentDirective === hostDirectiveDef) break;\n    directiveStylingLast++;\n  }\n  if (hostDirectiveDef !== null) {\n    // we only advance the styling cursor if we are collecting data from host bindings.\n    // Template executes before host bindings and so if we would update the index,\n    // host bindings would not get their statics.\n    tNode.directiveStylingLast = directiveStylingLast;\n  }\n  return stylingKey;\n}\n/**\n * Convert `TAttrs` into `TStylingStatic`.\n *\n * @param stylingKey existing `TStylingKey` to update or wrap.\n * @param attrs `TAttributes` to process.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {\n  const desiredMarker = isClassBased ? 1 /* AttributeMarker.Classes */ : 2 /* AttributeMarker.Styles */;\n  let currentMarker = -1 /* AttributeMarker.ImplicitAttributes */;\n  if (attrs !== null) {\n    for (let i = 0; i < attrs.length; i++) {\n      const item = attrs[i];\n      if (typeof item === 'number') {\n        currentMarker = item;\n      } else {\n        if (currentMarker === desiredMarker) {\n          if (!Array.isArray(stylingKey)) {\n            stylingKey = stylingKey === undefined ? [] : ['', stylingKey];\n          }\n          keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);\n        }\n      }\n    }\n  }\n  return stylingKey === undefined ? null : stylingKey;\n}\n/**\n * Convert user input to `KeyValueArray`.\n *\n * This function takes user input which could be `string`, Object literal, or iterable and converts\n * it into a consistent representation. The output of this is `KeyValueArray` (which is an array\n * where\n * even indexes contain keys and odd indexes contain values for those keys).\n *\n * The advantage of converting to `KeyValueArray` is that we can perform diff in an input\n * independent\n * way.\n * (ie we can compare `foo bar` to `['bar', 'baz'] and determine a set of changes which need to be\n * applied)\n *\n * The fact that `KeyValueArray` is sorted is very important because it allows us to compute the\n * difference in linear fashion without the need to allocate any additional data.\n *\n * For example if we kept this as a `Map` we would have to iterate over previous `Map` to determine\n * which values need to be deleted, over the new `Map` to determine additions, and we would have to\n * keep additional `Map` to keep track of duplicates or items which have not yet been visited.\n *\n * @param keyValueArraySet (See `keyValueArraySet` in \"util/array_utils\") Gets passed in as a\n *        function so that `style` can be processed. This is done\n *        for tree shaking purposes.\n * @param stringParser The parser is passed in so that it will be tree shakable. See\n *        `styleStringParser` and `classStringParser`\n * @param value The value to parse/convert to `KeyValueArray`\n */\nfunction toStylingKeyValueArray(keyValueArraySet, stringParser, value) {\n  if (value == null /*|| value === undefined */ || value === '') return EMPTY_ARRAY;\n  const styleKeyValueArray = [];\n  const unwrappedValue = unwrapSafeValue(value);\n  if (Array.isArray(unwrappedValue)) {\n    for (let i = 0; i < unwrappedValue.length; i++) {\n      keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);\n    }\n  } else if (typeof unwrappedValue === 'object') {\n    for (const key in unwrappedValue) {\n      if (unwrappedValue.hasOwnProperty(key)) {\n        keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);\n      }\n    }\n  } else if (typeof unwrappedValue === 'string') {\n    stringParser(styleKeyValueArray, unwrappedValue);\n  } else {\n    ngDevMode && throwError('Unsupported styling type ' + typeof unwrappedValue + ': ' + unwrappedValue);\n  }\n  return styleKeyValueArray;\n}\n/**\n * Set a `value` for a `key`.\n *\n * See: `keyValueArraySet` for details\n *\n * @param keyValueArray KeyValueArray to add to.\n * @param key Style key to add.\n * @param value The value to set.\n */\nfunction styleKeyValueArraySet(keyValueArray, key, value) {\n  keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));\n}\n/**\n * Class-binding-specific function for setting the `value` for a `key`.\n *\n * See: `keyValueArraySet` for details\n *\n * @param keyValueArray KeyValueArray to add to.\n * @param key Style key to add.\n * @param value The value to set.\n */\nfunction classKeyValueArraySet(keyValueArray, key, value) {\n  // We use `classList.add` to eventually add the CSS classes to the DOM node. Any value passed into\n  // `add` is stringified and added to the `class` attribute, e.g. even null, undefined or numbers\n  // will be added. Stringify the key here so that our internal data structure matches the value in\n  // the DOM. The only exceptions are empty strings and strings that contain spaces for which\n  // the browser throws an error. We ignore such values, because the error is somewhat cryptic.\n  const stringKey = String(key);\n  if (stringKey !== '' && !stringKey.includes(' ')) {\n    keyValueArraySet(keyValueArray, stringKey, value);\n  }\n}\n/**\n * Update map based styling.\n *\n * Map based styling could be anything which contains more than one binding. For example `string`,\n * or object literal. Dealing with all of these types would complicate the logic so\n * instead this function expects that the complex input is first converted into normalized\n * `KeyValueArray`. The advantage of normalization is that we get the values sorted, which makes it\n * very cheap to compute deltas between the previous and current value.\n *\n * @param tView Associated `TView.data` contains the linked list of binding priorities.\n * @param tNode `TNode` where the binding is located.\n * @param lView `LView` contains the values associated with other styling binding at this `TNode`.\n * @param renderer Renderer to use if any updates.\n * @param oldKeyValueArray Previous value represented as `KeyValueArray`\n * @param newKeyValueArray Current value represented as `KeyValueArray`\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param bindingIndex Binding index of the binding.\n */\nfunction updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {\n  if (oldKeyValueArray === NO_CHANGE) {\n    // On first execution the oldKeyValueArray is NO_CHANGE => treat it as empty KeyValueArray.\n    oldKeyValueArray = EMPTY_ARRAY;\n  }\n  let oldIndex = 0;\n  let newIndex = 0;\n  let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;\n  let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;\n  while (oldKey !== null || newKey !== null) {\n    ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');\n    ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');\n    const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;\n    const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;\n    let setKey = null;\n    let setValue = undefined;\n    if (oldKey === newKey) {\n      // UPDATE: Keys are equal => new value is overwriting old value.\n      oldIndex += 2;\n      newIndex += 2;\n      if (oldValue !== newValue) {\n        setKey = newKey;\n        setValue = newValue;\n      }\n    } else if (newKey === null || oldKey !== null && oldKey < newKey) {\n      // DELETE: oldKey key is missing or we did not find the oldKey in the newValue\n      // (because the keyValueArray is sorted and `newKey` is found later alphabetically).\n      // `\"background\" < \"color\"` so we need to delete `\"background\"` because it is not found in the\n      // new array.\n      oldIndex += 2;\n      setKey = oldKey;\n    } else {\n      // CREATE: newKey's is earlier alphabetically than oldKey's (or no oldKey) => we have new key.\n      // `\"color\" > \"background\"` so we need to add `color` because it is in new array but not in\n      // old array.\n      ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');\n      newIndex += 2;\n      setKey = newKey;\n      setValue = newValue;\n    }\n    if (setKey !== null) {\n      updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);\n    }\n    oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;\n    newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;\n  }\n}\n/**\n * Update a simple (property name) styling.\n *\n * This function takes `prop` and updates the DOM to that value. The function takes the binding\n * value as well as binding priority into consideration to determine which value should be written\n * to DOM. (For example it may be determined that there is a higher priority overwrite which blocks\n * the DOM write, or if the value goes to `undefined` a lower priority overwrite may be consulted.)\n *\n * @param tView Associated `TView.data` contains the linked list of binding priorities.\n * @param tNode `TNode` where the binding is located.\n * @param lView `LView` contains the values associated with other styling binding at this `TNode`.\n * @param renderer Renderer to use if any updates.\n * @param prop Either style property name or a class name.\n * @param value Either style value for `prop` or `true`/`false` if `prop` is class.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param bindingIndex Binding index of the binding.\n */\nfunction updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {\n  if (!(tNode.type & 3 /* TNodeType.AnyRNode */)) {\n    // It is possible to have styling on non-elements (such as ng-container).\n    // This is rare, but it does happen. In such a case, just ignore the binding.\n    return;\n  }\n  const tData = tView.data;\n  const tRange = tData[bindingIndex + 1];\n  const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : undefined;\n  if (!isStylingValuePresent(higherPriorityValue)) {\n    // We don't have a next duplicate, or we did not find a duplicate value.\n    if (!isStylingValuePresent(value)) {\n      // We should delete current value or restore to lower priority value.\n      if (getTStylingRangePrevDuplicate(tRange)) {\n        // We have a possible prev duplicate, let's retrieve it.\n        value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);\n      }\n    }\n    const rNode = getNativeByIndex(getSelectedIndex(), lView);\n    applyStyling(renderer, isClassBased, rNode, prop, value);\n  }\n}\n/**\n * Search for styling value with higher priority which is overwriting current value, or a\n * value of lower priority to which we should fall back if the value is `undefined`.\n *\n * When value is being applied at a location, related values need to be consulted.\n * - If there is a higher priority binding, we should be using that one instead.\n *   For example `<div  [style]=\"{color:exp1}\" [style.color]=\"exp2\">` change to `exp1`\n *   requires that we check `exp2` to see if it is set to value other than `undefined`.\n * - If there is a lower priority binding and we are changing to `undefined`\n *   For example `<div  [style]=\"{color:exp1}\" [style.color]=\"exp2\">` change to `exp2` to\n *   `undefined` requires that we check `exp1` (and static values) and use that as new value.\n *\n * NOTE: The styling stores two values.\n * 1. The raw value which came from the application is stored at `index + 0` location. (This value\n *    is used for dirty checking).\n * 2. The normalized value is stored at `index + 1`.\n *\n * @param tData `TData` used for traversing the priority.\n * @param tNode `TNode` to use for resolving static styling. Also controls search direction.\n *   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.\n *      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.\n *   - `null` search prev and go all the way to end. Return last value where\n *     `isStylingValuePresent(value)` is true.\n * @param lView `LView` used for retrieving the actual values.\n * @param prop Property which we are interested in.\n * @param index Starting index in the linked list of styling bindings where the search should start.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction findStylingValue(tData, tNode, lView, prop, index, isClassBased) {\n  // `TNode` to use for resolving static styling. Also controls search direction.\n  //   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.\n  //      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.\n  //   - `null` search prev and go all the way to end. Return last value where\n  //     `isStylingValuePresent(value)` is true.\n  const isPrevDirection = tNode === null;\n  let value = undefined;\n  while (index > 0) {\n    const rawKey = tData[index];\n    const containsStatics = Array.isArray(rawKey);\n    // Unwrap the key if we contain static values.\n    const key = containsStatics ? rawKey[1] : rawKey;\n    const isStylingMap = key === null;\n    let valueAtLViewIndex = lView[index + 1];\n    if (valueAtLViewIndex === NO_CHANGE) {\n      // In firstUpdatePass the styling instructions create a linked list of styling.\n      // On subsequent passes it is possible for a styling instruction to try to read a binding\n      // which\n      // has not yet executed. In that case we will find `NO_CHANGE` and we should assume that\n      // we have `undefined` (or empty array in case of styling-map instruction) instead. This\n      // allows the resolution to apply the value (which may later be overwritten when the\n      // binding actually executes.)\n      valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : undefined;\n    }\n    let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : undefined;\n    if (containsStatics && !isStylingValuePresent(currentValue)) {\n      currentValue = keyValueArrayGet(rawKey, prop);\n    }\n    if (isStylingValuePresent(currentValue)) {\n      value = currentValue;\n      if (isPrevDirection) {\n        return value;\n      }\n    }\n    const tRange = tData[index + 1];\n    index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);\n  }\n  if (tNode !== null) {\n    // in case where we are going in next direction AND we did not find anything, we need to\n    // consult residual styling\n    let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n    if (residual != null /** OR residual !=== undefined */) {\n      value = keyValueArrayGet(residual, prop);\n    }\n  }\n  return value;\n}\n/**\n * Determines if the binding value should be used (or if the value is 'undefined' and hence priority\n * resolution should be used.)\n *\n * @param value Binding style value.\n */\nfunction isStylingValuePresent(value) {\n  // Currently only `undefined` value is considered non-binding. That is `undefined` says I don't\n  // have an opinion as to what this binding should be and you should consult other bindings by\n  // priority to determine the valid value.\n  // This is extracted into a single function so that we have a single place to control this.\n  return value !== undefined;\n}\n/**\n * Normalizes and/or adds a suffix to the value.\n *\n * If value is `null`/`undefined` no suffix is added\n * @param value\n * @param suffix\n */\nfunction normalizeSuffix(value, suffix) {\n  if (value == null || value === '') {\n    // do nothing\n    // Do not add the suffix if the value is going to be empty.\n    // As it produce invalid CSS, which the browsers will automatically omit but Domino will not.\n    // Example: `\"left\": \"px;\"` instead of `\"left\": \"\"`.\n  } else if (typeof suffix === 'string') {\n    value = value + suffix;\n  } else if (typeof value === 'object') {\n    value = stringify(unwrapSafeValue(value));\n  }\n  return value;\n}\n/**\n * Tests if the `TNode` has input shadow.\n *\n * An input shadow is when a directive steals (shadows) the input by using `@Input('style')` or\n * `@Input('class')` as input.\n *\n * @param tNode `TNode` which we would like to see if it has shadow.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction hasStylingInputShadow(tNode, isClassBased) {\n  return (tNode.flags & (isClassBased ? 8 /* TNodeFlags.hasClassInput */ : 16 /* TNodeFlags.hasStyleInput */)) !== 0;\n}\n\n/**\n *\n * Update an interpolated class on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate1('prefix', v0, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate2('prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate3(\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate4(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate5(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate6(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate7(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate8(\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n * Update an interpolated class on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolateV(\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolateV(values) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Instruction that returns the component instance in which the current instruction is executing.\n * This is a constant-time version of `nextContent` for the case where we know that we need the\n * component instance specifically, rather than the context of a particular template.\n *\n * @codeGenApi\n */\nfunction ɵɵcomponentInstance() {\n  const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];\n  ngDevMode && assertDefined(instance, 'Expected component instance to be defined');\n  return instance;\n}\n\n/**\n * A type representing the live collection to be reconciled with any new (incoming) collection. This\n * is an adapter class that makes it possible to work with different internal data structures,\n * regardless of the actual values of the incoming collection.\n */\nclass LiveCollection {\n  destroy(item) {\n    // noop by default\n  }\n  updateValue(index, value) {\n    // noop by default\n  }\n  // operations below could be implemented on top of the operations defined so far, but having\n  // them explicitly allow clear expression of intent and potentially more performant\n  // implementations\n  swap(index1, index2) {\n    const startIdx = Math.min(index1, index2);\n    const endIdx = Math.max(index1, index2);\n    const endItem = this.detach(endIdx);\n    if (endIdx - startIdx > 1) {\n      const startItem = this.detach(startIdx);\n      this.attach(startIdx, endItem);\n      this.attach(endIdx, startItem);\n    } else {\n      this.attach(startIdx, endItem);\n    }\n  }\n  move(prevIndex, newIdx) {\n    this.attach(newIdx, this.detach(prevIndex));\n  }\n}\nfunction valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {\n  if (liveIdx === newIdx && Object.is(liveValue, newValue)) {\n    // matching and no value identity to update\n    return 1;\n  } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {\n    // matching but requires value identity update\n    return -1;\n  }\n  return 0;\n}\nfunction recordDuplicateKeys(keyToIdx, key, idx) {\n  const idxSoFar = keyToIdx.get(key);\n  if (idxSoFar !== undefined) {\n    idxSoFar.add(idx);\n  } else {\n    keyToIdx.set(key, new Set([idx]));\n  }\n}\n/**\n * The live collection reconciliation algorithm that perform various in-place operations, so it\n * reflects the content of the new (incoming) collection.\n *\n * The reconciliation algorithm has 2 code paths:\n * - \"fast\" path that don't require any memory allocation;\n * - \"slow\" path that requires additional memory allocation for intermediate data structures used to\n * collect additional information about the live collection.\n * It might happen that the algorithm switches between the two modes in question in a single\n * reconciliation path - generally it tries to stay on the \"fast\" path as much as possible.\n *\n * The overall complexity of the algorithm is O(n + m) for speed and O(n) for memory (where n is the\n * length of the live collection and m is the length of the incoming collection). Given the problem\n * at hand the complexity / performance constraints makes it impossible to perform the absolute\n * minimum of operation to reconcile the 2 collections. The algorithm makes different tradeoffs to\n * stay within reasonable performance bounds and may apply sub-optimal number of operations in\n * certain situations.\n *\n * @param liveCollection the current, live collection;\n * @param newCollection the new, incoming collection;\n * @param trackByFn key generation function that determines equality between items in the life and\n *     incoming collection;\n */\nfunction reconcile(liveCollection, newCollection, trackByFn) {\n  let detachedItems = undefined;\n  let liveKeysInTheFuture = undefined;\n  let liveStartIdx = 0;\n  let liveEndIdx = liveCollection.length - 1;\n  const duplicateKeys = ngDevMode ? new Map() : undefined;\n  if (Array.isArray(newCollection)) {\n    let newEndIdx = newCollection.length - 1;\n    while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {\n      // compare from the beginning\n      const liveStartValue = liveCollection.at(liveStartIdx);\n      const newStartValue = newCollection[liveStartIdx];\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);\n      }\n      const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);\n      if (isStartMatching !== 0) {\n        if (isStartMatching < 0) {\n          liveCollection.updateValue(liveStartIdx, newStartValue);\n        }\n        liveStartIdx++;\n        continue;\n      }\n      // compare from the end\n      // TODO(perf): do _all_ the matching from the end\n      const liveEndValue = liveCollection.at(liveEndIdx);\n      const newEndValue = newCollection[newEndIdx];\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);\n      }\n      const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);\n      if (isEndMatching !== 0) {\n        if (isEndMatching < 0) {\n          liveCollection.updateValue(liveEndIdx, newEndValue);\n        }\n        liveEndIdx--;\n        newEndIdx--;\n        continue;\n      }\n      // Detect swap and moves:\n      const liveStartKey = trackByFn(liveStartIdx, liveStartValue);\n      const liveEndKey = trackByFn(liveEndIdx, liveEndValue);\n      const newStartKey = trackByFn(liveStartIdx, newStartValue);\n      if (Object.is(newStartKey, liveEndKey)) {\n        const newEndKey = trackByFn(newEndIdx, newEndValue);\n        // detect swap on both ends;\n        if (Object.is(newEndKey, liveStartKey)) {\n          liveCollection.swap(liveStartIdx, liveEndIdx);\n          liveCollection.updateValue(liveEndIdx, newEndValue);\n          newEndIdx--;\n          liveEndIdx--;\n        } else {\n          // the new item is the same as the live item with the end pointer - this is a move forward\n          // to an earlier index;\n          liveCollection.move(liveEndIdx, liveStartIdx);\n        }\n        liveCollection.updateValue(liveStartIdx, newStartValue);\n        liveStartIdx++;\n        continue;\n      }\n      // Fallback to the slow path: we need to learn more about the content of the live and new\n      // collections.\n      detachedItems ??= new UniqueValueMultiKeyMap();\n      liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n      // Check if I'm inserting a previously detached item: if so, attach it here\n      if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {\n        liveCollection.updateValue(liveStartIdx, newStartValue);\n        liveStartIdx++;\n        liveEndIdx++;\n      } else if (!liveKeysInTheFuture.has(newStartKey)) {\n        // Check if we seen a new item that doesn't exist in the old collection and must be INSERTED\n        const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);\n        liveCollection.attach(liveStartIdx, newItem);\n        liveStartIdx++;\n        liveEndIdx++;\n      } else {\n        // We know that the new item exists later on in old collection but we don't know its index\n        // and as the consequence can't move it (don't know where to find it). Detach the old item,\n        // hoping that it unlocks the fast path again.\n        detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));\n        liveEndIdx--;\n      }\n    }\n    // Final cleanup steps:\n    // - more items in the new collection => insert\n    while (liveStartIdx <= newEndIdx) {\n      createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);\n      liveStartIdx++;\n    }\n  } else if (newCollection != null) {\n    // iterable - immediately fallback to the slow path\n    const newCollectionIterator = newCollection[Symbol.iterator]();\n    let newIterationResult = newCollectionIterator.next();\n    while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {\n      const liveValue = liveCollection.at(liveStartIdx);\n      const newValue = newIterationResult.value;\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);\n      }\n      const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);\n      if (isStartMatching !== 0) {\n        // found a match - move on, but update value\n        if (isStartMatching < 0) {\n          liveCollection.updateValue(liveStartIdx, newValue);\n        }\n        liveStartIdx++;\n        newIterationResult = newCollectionIterator.next();\n      } else {\n        detachedItems ??= new UniqueValueMultiKeyMap();\n        liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n        // Check if I'm inserting a previously detached item: if so, attach it here\n        const newKey = trackByFn(liveStartIdx, newValue);\n        if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {\n          liveCollection.updateValue(liveStartIdx, newValue);\n          liveStartIdx++;\n          liveEndIdx++;\n          newIterationResult = newCollectionIterator.next();\n        } else if (!liveKeysInTheFuture.has(newKey)) {\n          liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));\n          liveStartIdx++;\n          liveEndIdx++;\n          newIterationResult = newCollectionIterator.next();\n        } else {\n          // it is a move forward - detach the current item without advancing in collections\n          const liveKey = trackByFn(liveStartIdx, liveValue);\n          detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));\n          liveEndIdx--;\n        }\n      }\n    }\n    // this is a new item as we run out of the items in the old collection - create or attach a\n    // previously detached one\n    while (!newIterationResult.done) {\n      createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);\n      newIterationResult = newCollectionIterator.next();\n    }\n  }\n  // Cleanups common to the array and iterable:\n  // - more items in the live collection => delete starting from the end;\n  while (liveStartIdx <= liveEndIdx) {\n    liveCollection.destroy(liveCollection.detach(liveEndIdx--));\n  }\n  // - destroy items that were detached but never attached again.\n  detachedItems?.forEach(item => {\n    liveCollection.destroy(item);\n  });\n  // report duplicate keys (dev mode only)\n  if (ngDevMode) {\n    let duplicatedKeysMsg = [];\n    for (const [key, idxSet] of duplicateKeys) {\n      if (idxSet.size > 1) {\n        const idx = [...idxSet].sort((a, b) => a - b);\n        for (let i = 1; i < idx.length; i++) {\n          duplicatedKeysMsg.push(`key \"${stringifyForError(key)}\" at index \"${idx[i - 1]}\" and \"${idx[i]}\"`);\n        }\n      }\n    }\n    if (duplicatedKeysMsg.length > 0) {\n      const message = formatRuntimeError(-955 /* RuntimeErrorCode.LOOP_TRACK_DUPLICATE_KEYS */, 'The provided track expression resulted in duplicated keys for a given collection. ' + 'Adjust the tracking expression such that it uniquely identifies all the items in the collection. ' + 'Duplicated keys were: \\n' + duplicatedKeysMsg.join(', \\n') + '.');\n      // tslint:disable-next-line:no-console\n      console.warn(message);\n    }\n  }\n}\nfunction attachPreviouslyDetached(prevCollection, detachedItems, index, key) {\n  if (detachedItems !== undefined && detachedItems.has(key)) {\n    prevCollection.attach(index, detachedItems.get(key));\n    detachedItems.delete(key);\n    return true;\n  }\n  return false;\n}\nfunction createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {\n  if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {\n    const newItem = liveCollection.create(index, value);\n    liveCollection.attach(index, newItem);\n  } else {\n    liveCollection.updateValue(index, value);\n  }\n}\nfunction initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {\n  const keys = new Set();\n  for (let i = start; i <= end; i++) {\n    keys.add(trackByFn(i, liveCollection.at(i)));\n  }\n  return keys;\n}\n/**\n * A specific, partial implementation of the Map interface with the following characteristics:\n * - allows multiple values for a given key;\n * - maintain FIFO order for multiple values corresponding to a given key;\n * - assumes that all values are unique.\n *\n * The implementation aims at having the minimal overhead for cases where keys are _not_ duplicated\n * (the most common case in the list reconciliation algorithm). To achieve this, the first value for\n * a given key is stored in a regular map. Then, when more values are set for a given key, we\n * maintain a form of linked list in a separate map. To maintain this linked list we assume that all\n * values (in the entire collection) are unique.\n */\nclass UniqueValueMultiKeyMap {\n  // A map from a key to the first value corresponding to this key.\n  kvMap = new Map();\n  // A map that acts as a linked list of values - each value maps to the next value in this \"linked\n  // list\" (this only works if values are unique). Allocated lazily to avoid memory consumption when\n  // there are no duplicated values.\n  _vMap = undefined;\n  has(key) {\n    return this.kvMap.has(key);\n  }\n  delete(key) {\n    if (!this.has(key)) return false;\n    const value = this.kvMap.get(key);\n    if (this._vMap !== undefined && this._vMap.has(value)) {\n      this.kvMap.set(key, this._vMap.get(value));\n      this._vMap.delete(value);\n    } else {\n      this.kvMap.delete(key);\n    }\n    return true;\n  }\n  get(key) {\n    return this.kvMap.get(key);\n  }\n  set(key, value) {\n    if (this.kvMap.has(key)) {\n      let prevValue = this.kvMap.get(key);\n      // Note: we don't use `assertNotSame`, because the value needs to be stringified even if\n      // there is no error which can freeze the browser for large values (see #58509).\n      if (ngDevMode && prevValue === value) {\n        throw new Error(`Detected a duplicated value ${value} for the key ${key}`);\n      }\n      if (this._vMap === undefined) {\n        this._vMap = new Map();\n      }\n      const vMap = this._vMap;\n      while (vMap.has(prevValue)) {\n        prevValue = vMap.get(prevValue);\n      }\n      vMap.set(prevValue, value);\n    } else {\n      this.kvMap.set(key, value);\n    }\n  }\n  forEach(cb) {\n    for (let [key, value] of this.kvMap) {\n      cb(value, key);\n      if (this._vMap !== undefined) {\n        const vMap = this._vMap;\n        while (vMap.has(value)) {\n          value = vMap.get(value);\n          cb(value, key);\n        }\n      }\n    }\n  }\n}\n\n/**\n * The conditional instruction represents the basic building block on the runtime side to support\n * built-in \"if\" and \"switch\". On the high level this instruction is responsible for adding and\n * removing views selected by a conditional expression.\n *\n * @param matchingTemplateIndex Index of a template TNode representing a conditional view to be\n *     inserted; -1 represents a special case when there is no view to insert.\n * @param contextValue Value that should be exposed as the context of the conditional.\n * @codeGenApi\n */\nfunction ɵɵconditional(matchingTemplateIndex, contextValue) {\n  performanceMarkFeature('NgControlFlow');\n  const hostLView = getLView();\n  const bindingIndex = nextBindingIndex();\n  const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;\n  const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : undefined;\n  const viewInContainerIdx = 0;\n  if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // The index of the view to show changed - remove the previously displayed one\n      // (it is a noop if there are no active views in a container).\n      if (prevContainer !== undefined) {\n        removeLViewFromLContainer(prevContainer, viewInContainerIdx);\n      }\n      // Index -1 is a special case where none of the conditions evaluates to\n      // a truthy value and as the consequence we've got no view to show.\n      if (matchingTemplateIndex !== -1) {\n        const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;\n        const nextContainer = getLContainer(hostLView, nextLContainerIndex);\n        const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);\n        const dehydratedView = findMatchingDehydratedView(nextContainer, templateTNode.tView.ssrId);\n        const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {\n          dehydratedView\n        });\n        addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  } else if (prevContainer !== undefined) {\n    // We might keep displaying the same template but the actual value of the expression could have\n    // changed - re-bind in context.\n    const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);\n    if (lView !== undefined) {\n      lView[CONTEXT] = contextValue;\n    }\n  }\n}\nclass RepeaterContext {\n  lContainer;\n  $implicit;\n  $index;\n  constructor(lContainer, $implicit, $index) {\n    this.lContainer = lContainer;\n    this.$implicit = $implicit;\n    this.$index = $index;\n  }\n  get $count() {\n    return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n}\n/**\n * A built-in trackBy function used for situations where users specified collection index as a\n * tracking expression. Having this function body in the runtime avoids unnecessary code generation.\n *\n * @param index\n * @returns\n */\nfunction ɵɵrepeaterTrackByIndex(index) {\n  return index;\n}\n/**\n * A built-in trackBy function used for situations where users specified collection item reference\n * as a tracking expression. Having this function body in the runtime avoids unnecessary code\n * generation.\n *\n * @param index\n * @returns\n */\nfunction ɵɵrepeaterTrackByIdentity(_, value) {\n  return value;\n}\nclass RepeaterMetadata {\n  hasEmptyBlock;\n  trackByFn;\n  liveCollection;\n  constructor(hasEmptyBlock, trackByFn, liveCollection) {\n    this.hasEmptyBlock = hasEmptyBlock;\n    this.trackByFn = trackByFn;\n    this.liveCollection = liveCollection;\n  }\n}\n/**\n * The repeaterCreate instruction runs in the creation part of the template pass and initializes\n * internal data structures required by the update pass of the built-in repeater logic. Repeater\n * metadata are allocated in the data part of LView with the following layout:\n * - LView[HEADER_OFFSET + index] - metadata\n * - LView[HEADER_OFFSET + index + 1] - reference to a template function rendering an item\n * - LView[HEADER_OFFSET + index + 2] - optional reference to a template function rendering an empty\n * block\n *\n * @param index Index at which to store the metadata of the repeater.\n * @param templateFn Reference to the template of the main repeater block.\n * @param decls The number of nodes, local refs, and pipes for the main block.\n * @param vars The number of bindings for the main block.\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param trackByFn Reference to the tracking function.\n * @param trackByUsesComponentInstance Whether the tracking function has any references to the\n *  component instance. If it doesn't, we can avoid rebinding it.\n * @param emptyTemplateFn Reference to the template function of the empty block.\n * @param emptyDecls The number of nodes, local refs, and pipes for the empty block.\n * @param emptyVars The number of bindings for the empty block.\n * @param emptyTagName The name of the empty block container element, if applicable\n * @param emptyAttrsIndex Index of the empty block template attributes in the `consts` array.\n *\n * @codeGenApi\n */\nfunction ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {\n  performanceMarkFeature('NgControlFlow');\n  ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);\n  const lView = getLView();\n  const tView = getTView();\n  const hasEmptyBlock = emptyTemplateFn !== undefined;\n  const hostLView = getLView();\n  const boundTrackBy = trackByUsesComponentInstance ?\n  // We only want to bind when necessary, because it produces a\n  // new function. For pure functions it's not necessary.\n  trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT]) : trackByFn;\n  const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);\n  hostLView[HEADER_OFFSET + index] = metadata;\n  declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex));\n  if (hasEmptyBlock) {\n    ngDevMode && assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');\n    ngDevMode && assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');\n    declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex));\n  }\n}\nfunction isViewExpensiveToRecreate(lView) {\n  // assumption: anything more than a text node with a binding is considered \"expensive\"\n  return lView.length - HEADER_OFFSET > 2;\n}\nclass OperationsCounter {\n  created = 0;\n  destroyed = 0;\n  reset() {\n    this.created = 0;\n    this.destroyed = 0;\n  }\n  recordCreate() {\n    this.created++;\n  }\n  recordDestroy() {\n    this.destroyed++;\n  }\n  /**\n   * A method indicating if the entire collection was re-created as part of the reconciliation pass.\n   * Used to warn developers about the usage of a tracking function that might result in excessive\n   * amount of view creation / destroy operations.\n   *\n   * @returns boolean value indicating if a live collection was re-created\n   */\n  wasReCreated(collectionLen) {\n    return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;\n  }\n}\nclass LiveCollectionLContainerImpl extends LiveCollection {\n  lContainer;\n  hostLView;\n  templateTNode;\n  operationsCounter = ngDevMode ? new OperationsCounter() : undefined;\n  /**\n   Property indicating if indexes in the repeater context need to be updated following the live\n   collection changes. Index updates are necessary if and only if views are inserted / removed in\n   the middle of LContainer. Adds and removals at the end don't require index updates.\n  */\n  needsIndexUpdate = false;\n  constructor(lContainer, hostLView, templateTNode) {\n    super();\n    this.lContainer = lContainer;\n    this.hostLView = hostLView;\n    this.templateTNode = templateTNode;\n  }\n  get length() {\n    return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n  at(index) {\n    return this.getLView(index)[CONTEXT].$implicit;\n  }\n  attach(index, lView) {\n    const dehydratedView = lView[HYDRATION];\n    this.needsIndexUpdate ||= index !== this.length;\n    addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));\n  }\n  detach(index) {\n    this.needsIndexUpdate ||= index !== this.length - 1;\n    return detachExistingView(this.lContainer, index);\n  }\n  create(index, value) {\n    const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);\n    const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {\n      dehydratedView\n    });\n    this.operationsCounter?.recordCreate();\n    return embeddedLView;\n  }\n  destroy(lView) {\n    destroyLView(lView[TVIEW], lView);\n    this.operationsCounter?.recordDestroy();\n  }\n  updateValue(index, value) {\n    this.getLView(index)[CONTEXT].$implicit = value;\n  }\n  reset() {\n    this.needsIndexUpdate = false;\n    this.operationsCounter?.reset();\n  }\n  updateIndexes() {\n    if (this.needsIndexUpdate) {\n      for (let i = 0; i < this.length; i++) {\n        this.getLView(i)[CONTEXT].$index = i;\n      }\n    }\n  }\n  getLView(index) {\n    return getExistingLViewFromLContainer(this.lContainer, index);\n  }\n}\n/**\n * The repeater instruction does update-time diffing of a provided collection (against the\n * collection seen previously) and maps changes in the collection to views structure (by adding,\n * removing or moving views as needed).\n * @param collection - the collection instance to be checked for changes\n * @codeGenApi\n */\nfunction ɵɵrepeater(collection) {\n  const prevConsumer = setActiveConsumer$1(null);\n  const metadataSlotIdx = getSelectedIndex();\n  try {\n    const hostLView = getLView();\n    const hostTView = hostLView[TVIEW];\n    const metadata = hostLView[metadataSlotIdx];\n    const containerIndex = metadataSlotIdx + 1;\n    const lContainer = getLContainer(hostLView, containerIndex);\n    if (metadata.liveCollection === undefined) {\n      const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);\n      metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);\n    } else {\n      metadata.liveCollection.reset();\n    }\n    const liveCollection = metadata.liveCollection;\n    reconcile(liveCollection, collection, metadata.trackByFn);\n    // Warn developers about situations where the entire collection was re-created as part of the\n    // reconciliation pass. Note that this warning might be \"overreacting\" and report cases where\n    // the collection re-creation is the intended behavior. Still, the assumption is that most of\n    // the time it is undesired.\n    if (ngDevMode && metadata.trackByFn === ɵɵrepeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {\n      const message = formatRuntimeError(-956 /* RuntimeErrorCode.LOOP_TRACK_RECREATE */, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. ` + 'This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. ' + 'Please review the \"track expression\" and make sure that it uniquely identifies items in a collection.');\n      console.warn(message);\n    }\n    // moves in the container might caused context's index to get out of order, re-adjust if needed\n    liveCollection.updateIndexes();\n    // handle empty blocks\n    if (metadata.hasEmptyBlock) {\n      const bindingIndex = nextBindingIndex();\n      const isCollectionEmpty = liveCollection.length === 0;\n      if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {\n        const emptyTemplateIndex = metadataSlotIdx + 2;\n        const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);\n        if (isCollectionEmpty) {\n          const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);\n          const dehydratedView = findMatchingDehydratedView(lContainerForEmpty, emptyTemplateTNode.tView.ssrId);\n          const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, undefined, {\n            dehydratedView\n          });\n          addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));\n        } else {\n          removeLViewFromLContainer(lContainerForEmpty, 0);\n        }\n      }\n    }\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nfunction getLContainer(lView, index) {\n  const lContainer = lView[index];\n  ngDevMode && assertLContainer(lContainer);\n  return lContainer;\n}\nfunction detachExistingView(lContainer, index) {\n  const existingLView = detachView(lContainer, index);\n  ngDevMode && assertLView(existingLView);\n  return existingLView;\n}\nfunction getExistingLViewFromLContainer(lContainer, index) {\n  const existingLView = getLViewFromLContainer(lContainer, index);\n  ngDevMode && assertLView(existingLView);\n  return existingLView;\n}\nfunction getExistingTNode(tView, index) {\n  const tNode = getTNode(tView, index);\n  ngDevMode && assertTNode(tNode);\n  return tNode;\n}\nfunction elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  const attrs = getConstant(tViewConsts, attrsIndex);\n  const tNode = getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, name, attrs);\n  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));\n  if (tNode.attrs !== null) {\n    computeStaticStyling(tNode, tNode.attrs, false);\n  }\n  if (tNode.mergedAttrs !== null) {\n    computeStaticStyling(tNode, tNode.mergedAttrs, true);\n  }\n  if (tView.queries !== null) {\n    tView.queries.elementStart(tView, tNode);\n  }\n  return tNode;\n}\n/**\n * Create DOM element. The instruction must later be followed by `elementEnd()` call.\n *\n * @param index Index of the element in the LView array\n * @param name Name of the DOM Node\n * @param attrsIndex Index of the element's attributes in the `consts` array.\n * @param localRefsIndex Index of the element's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * Attributes and localRefs are passed as an array of strings where elements with an even index\n * hold an attribute name and elements with an odd index hold an attribute value, ex.:\n * ['id', 'warning5', 'class', 'alert']\n *\n * @codeGenApi\n */\nfunction ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = HEADER_OFFSET + index;\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'elements should be created before any bindings');\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  const renderer = lView[RENDERER];\n  const tNode = tView.firstCreatePass ? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n  const native = _locateOrCreateElementNode(tView, lView, tNode, renderer, name, index);\n  lView[adjustedIndex] = native;\n  const hasDirectives = isDirectiveHost(tNode);\n  if (ngDevMode && tView.firstCreatePass) {\n    validateElementIsKnown(native, lView, tNode.value, tView.schemas, hasDirectives);\n  }\n  setCurrentTNode(tNode, true);\n  setupStaticAttributes(renderer, native, tNode);\n  if (!isDetachedByI18n(tNode) && wasLastNodeCreated()) {\n    // In the i18n case, the translation may have removed this element, so only add it if it is not\n    // detached. See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.\n    appendChild(tView, lView, native, tNode);\n  }\n  // any immediate children of a component or template container must be pre-emptively\n  // monkey-patched with the component view data so that the element can be inspected\n  // later on using any element discovery utility methods (see `element_discovery.ts`)\n  if (getElementDepthCount() === 0) {\n    attachPatchData(native, lView);\n  }\n  increaseElementDepthCount();\n  if (hasDirectives) {\n    createDirectivesInstances(tView, lView, tNode);\n    executeContentQueries(tView, tNode, lView);\n  }\n  if (localRefsIndex !== null) {\n    saveResolvedLocalsInData(lView, tNode);\n  }\n  return ɵɵelementStart;\n}\n/**\n * Mark the end of the element.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementEnd() {\n  let currentTNode = getCurrentTNode();\n  ngDevMode && assertDefined(currentTNode, 'No parent node to close.');\n  if (isCurrentTNodeParent()) {\n    setCurrentTNodeAsNotParent();\n  } else {\n    ngDevMode && assertHasParent(getCurrentTNode());\n    currentTNode = currentTNode.parent;\n    setCurrentTNode(currentTNode, false);\n  }\n  const tNode = currentTNode;\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);\n  if (isSkipHydrationRootTNode(tNode)) {\n    leaveSkipHydrationBlock();\n  }\n  decreaseElementDepthCount();\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    registerPostOrderHooks(tView, currentTNode);\n    if (isContentQueryHost(currentTNode)) {\n      tView.queries.elementEnd(currentTNode);\n    }\n  }\n  if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {\n    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);\n  }\n  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {\n    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);\n  }\n  return ɵɵelementEnd;\n}\n/**\n * Creates an empty element using {@link elementStart} and {@link elementEnd}\n *\n * @param index Index of the element in the data array\n * @param name Name of the DOM Node\n * @param attrsIndex Index of the element's attributes in the `consts` array.\n * @param localRefsIndex Index of the element's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelement(index, name, attrsIndex, localRefsIndex) {\n  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);\n  ɵɵelementEnd();\n  return ɵɵelement;\n}\nlet _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) => {\n  lastNodeWasCreated(true);\n  return createElementNode(renderer, name, getNamespace$1());\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of element nodes.\n */\nfunction locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createElementNode(renderer, name, getNamespace$1());\n  }\n  // Hydration mode, looking up an existing element in DOM.\n  const native = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);\n  ngDevMode && markRNodeAsClaimedByHydration(native);\n  // This element might also be an anchor of a view container.\n  if (getSerializedContainerViews(hydrationInfo, index)) {\n    // Important note: this element acts as an anchor, but it's **not** a part\n    // of the embedded view, so we start the segment **after** this element, taking\n    // a reference to the next sibling. For example, the following template:\n    // `<div #vcrTarget>` is represented in the DOM as `<div></div>...<!--container-->`,\n    // so while processing a `<div>` instruction, point to the next sibling as a\n    // start of a segment.\n    ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);\n    setSegmentHead(hydrationInfo, index, native.nextSibling);\n  }\n  // Checks if the skip hydration attribute is present during hydration so we know to\n  // skip attempting to hydrate this block. We check both TNode and RElement for an\n  // attribute: the RElement case is needed for i18n cases, when we add it to host\n  // elements during the annotation phase (after all internal data structures are setup).\n  if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {\n    if (isComponentHost(tNode)) {\n      enterSkipHydrationBlock(tNode);\n      // Since this isn't hydratable, we need to empty the node\n      // so there's no duplicate content after render\n      clearElementContents(native);\n      ngDevMode && markRNodeAsSkippedByHydration(native);\n    } else if (ngDevMode) {\n      // If this is not a component host, throw an error.\n      // Hydration can be skipped on per-component basis only.\n      throw invalidSkipHydrationHost(native);\n    }\n  }\n  return native;\n}\nfunction enableLocateOrCreateElementNodeImpl() {\n  _locateOrCreateElementNode = locateOrCreateElementNodeImpl;\n}\nfunction elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  const attrs = getConstant(tViewConsts, attrsIndex);\n  const tNode = getOrCreateTNode(tView, index, 8 /* TNodeType.ElementContainer */, 'ng-container', attrs);\n  // While ng-container doesn't necessarily support styling, we use the style context to identify\n  // and execute directives on the ng-container.\n  if (attrs !== null) {\n    computeStaticStyling(tNode, attrs, true);\n  }\n  const localRefs = getConstant(tViewConsts, localRefsIndex);\n  resolveDirectives(tView, lView, tNode, localRefs);\n  if (tView.queries !== null) {\n    tView.queries.elementStart(tView, tNode);\n  }\n  return tNode;\n}\n/**\n * Creates a logical container for other nodes (<ng-container>) backed by a comment node in the DOM.\n * The instruction must later be followed by `elementContainerEnd()` call.\n *\n * @param index Index of the element in the LView array\n * @param attrsIndex Index of the container attributes in the `consts` array.\n * @param localRefsIndex Index of the container's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * Even if this instruction accepts a set of attributes no actual attribute values are propagated to\n * the DOM (as a comment node can't have attributes). Attributes are here only for directive\n * matching purposes and setting initial inputs of directives.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'element containers should be created before any bindings');\n  const tNode = tView.firstCreatePass ? elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n  setCurrentTNode(tNode, true);\n  const comment = _locateOrCreateElementContainerNode(tView, lView, tNode, index);\n  lView[adjustedIndex] = comment;\n  if (wasLastNodeCreated()) {\n    appendChild(tView, lView, comment, tNode);\n  }\n  attachPatchData(comment, lView);\n  if (isDirectiveHost(tNode)) {\n    createDirectivesInstances(tView, lView, tNode);\n    executeContentQueries(tView, tNode, lView);\n  }\n  if (localRefsIndex != null) {\n    saveResolvedLocalsInData(lView, tNode);\n  }\n  return ɵɵelementContainerStart;\n}\n/**\n * Mark the end of the <ng-container>.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainerEnd() {\n  let currentTNode = getCurrentTNode();\n  const tView = getTView();\n  if (isCurrentTNodeParent()) {\n    setCurrentTNodeAsNotParent();\n  } else {\n    ngDevMode && assertHasParent(currentTNode);\n    currentTNode = currentTNode.parent;\n    setCurrentTNode(currentTNode, false);\n  }\n  ngDevMode && assertTNodeType(currentTNode, 8 /* TNodeType.ElementContainer */);\n  if (tView.firstCreatePass) {\n    registerPostOrderHooks(tView, currentTNode);\n    if (isContentQueryHost(currentTNode)) {\n      tView.queries.elementEnd(currentTNode);\n    }\n  }\n  return ɵɵelementContainerEnd;\n}\n/**\n * Creates an empty logical container using {@link elementContainerStart}\n * and {@link elementContainerEnd}\n *\n * @param index Index of the element in the LView array\n * @param attrsIndex Index of the container attributes in the `consts` array.\n * @param localRefsIndex Index of the container's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainer(index, attrsIndex, localRefsIndex) {\n  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);\n  ɵɵelementContainerEnd();\n  return ɵɵelementContainer;\n}\nlet _locateOrCreateElementContainerNode = (tView, lView, tNode, index) => {\n  lastNodeWasCreated(true);\n  return createCommentNode(lView[RENDERER], ngDevMode ? 'ng-container' : '');\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of comment nodes that\n * represent <ng-container>'s anchor.\n */\nfunction locateOrCreateElementContainerNode(tView, lView, tNode, index) {\n  let comment;\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index) || isDetachedByI18n(tNode);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createCommentNode(lView[RENDERER], ngDevMode ? 'ng-container' : '');\n  }\n  // Hydration mode, looking up existing elements in DOM.\n  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n  const ngContainerSize = getNgContainerSize(hydrationInfo, index);\n  ngDevMode && assertNumber(ngContainerSize, 'Unexpected state: hydrating an <ng-container>, ' + 'but no hydration info is available.');\n  setSegmentHead(hydrationInfo, index, currentRNode);\n  comment = siblingAfter(ngContainerSize, currentRNode);\n  if (ngDevMode) {\n    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n    markRNodeAsClaimedByHydration(comment);\n  }\n  return comment;\n}\nfunction enableLocateOrCreateElementContainerNodeImpl() {\n  _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;\n}\n\n/**\n * Returns the current OpaqueViewState instance.\n *\n * Used in conjunction with the restoreView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @codeGenApi\n */\nfunction ɵɵgetCurrentView() {\n  return getLView();\n}\n\n/**\n * Update a property on a host element. Only applies to native node properties, not inputs.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵhostProperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵhostProperty;\n}\n/**\n * Updates a synthetic host binding (e.g. `[@foo]`) on a component or directive.\n *\n * This instruction is for compatibility purposes and is designed to ensure that a\n * synthetic host binding (e.g. `@HostBinding('@foo')`) properly gets rendered in\n * the component's renderer. Normally all host bindings are evaluated with the parent\n * component's renderer, but, in the case of animation @triggers, they need to be\n * evaluated with the sub component's renderer (because that's where the animation\n * triggers are defined).\n *\n * Do not use this instruction as a replacement for `elementProperty`. This instruction\n * only exists to ensure compatibility with the ViewEngine's host binding behavior.\n *\n * @param index The index of the element to update in the data array\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n *\n * @codeGenApi\n */\nfunction ɵɵsyntheticHostProperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    const currentDef = getCurrentDirectiveDef(tView.data);\n    const renderer = loadComponentRenderer(currentDef, tNode, lView);\n    elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵsyntheticHostProperty;\n}\n\n/**\n * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nif (typeof ngI18nClosureMode === 'undefined') {\n  // These property accesses can be ignored because ngI18nClosureMode will be set to false\n  // when optimizing code and the whole if statement will be dropped.\n  // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.\n  // NOTE: we need to have it in IIFE so that the tree-shaker is happy.\n  (function () {\n    // tslint:disable-next-line:no-toplevel-property-access\n    _global['ngI18nClosureMode'] =\n    // TODO(FW-1250): validate that this actually, you know, works.\n    // tslint:disable-next-line:no-toplevel-property-access\n    typeof goog !== 'undefined' && typeof goog.getMsg === 'function';\n  })();\n}\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\nfunction plural(val) {\n  const n = val,\n    i = Math.floor(Math.abs(val)),\n    v = val.toString().replace(/^[^.]*\\.?/, '').length;\n  if (i === 1 && v === 0) return 1;\n  return 5;\n}\nvar localeEn = [\"en\", [[\"a\", \"p\"], [\"AM\", \"PM\"], u], [[\"AM\", \"PM\"], u, u], [[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"], [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]], u, [[\"B\", \"A\"], [\"BC\", \"AD\"], [\"Before Christ\", \"Anno Domini\"]], 0, [6, 0], [\"M/d/yy\", \"MMM d, y\", \"MMMM d, y\", \"EEEE, MMMM d, y\"], [\"h:mm a\", \"h:mm:ss a\", \"h:mm:ss a z\", \"h:mm:ss a zzzz\"], [\"{1}, {0}\", u, \"{1} 'at' {0}\", u], [\".\", \",\", \";\", \"%\", \"+\", \"-\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0%\", \"¤#,##0.00\", \"#E0\"], \"USD\", \"$\", \"US Dollar\", {}, \"ltr\", plural];\n\n/**\n * This const is used to store the locale data registered with `registerLocaleData`\n */\nlet LOCALE_DATA = {};\n/**\n * Register locale data to be used internally by Angular. See the\n * [\"I18n guide\"](guide/i18n/format-data-locale) to know how to import additional locale\n * data.\n *\n * The signature `registerLocaleData(data: any, extraData?: any)` is deprecated since v5.1\n */\nfunction registerLocaleData(data, localeId, extraData) {\n  if (typeof localeId !== 'string') {\n    extraData = localeId;\n    localeId = data[LocaleDataIndex.LocaleId];\n  }\n  localeId = localeId.toLowerCase().replace(/_/g, '-');\n  LOCALE_DATA[localeId] = data;\n  if (extraData) {\n    LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;\n  }\n}\n/**\n * Finds the locale data for a given locale.\n *\n * @param locale The locale code.\n * @returns The locale data.\n * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)\n */\nfunction findLocaleData(locale) {\n  const normalizedLocale = normalizeLocale(locale);\n  let match = getLocaleData(normalizedLocale);\n  if (match) {\n    return match;\n  }\n  // let's try to find a parent locale\n  const parentLocale = normalizedLocale.split('-')[0];\n  match = getLocaleData(parentLocale);\n  if (match) {\n    return match;\n  }\n  if (parentLocale === 'en') {\n    return localeEn;\n  }\n  throw new RuntimeError(701 /* RuntimeErrorCode.MISSING_LOCALE_DATA */, ngDevMode && `Missing locale data for the locale \"${locale}\".`);\n}\n/**\n * Retrieves the default currency code for the given locale.\n *\n * The default is defined as the first currency which is still in use.\n *\n * @param locale The code of the locale whose currency code we want.\n * @returns The code of the default currency for the given locale.\n *\n */\nfunction getLocaleCurrencyCode(locale) {\n  const data = findLocaleData(locale);\n  return data[LocaleDataIndex.CurrencyCode] || null;\n}\n/**\n * Retrieves the plural function used by ICU expressions to determine the plural case to use\n * for a given locale.\n * @param locale A locale code for the locale format rules to use.\n * @returns The plural function for the locale.\n * @see {@link NgPlural}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n */\nfunction getLocalePluralCase(locale) {\n  const data = findLocaleData(locale);\n  return data[LocaleDataIndex.PluralCase];\n}\n/**\n * Helper function to get the given `normalizedLocale` from `LOCALE_DATA`\n * or from the global `ng.common.locale`.\n */\nfunction getLocaleData(normalizedLocale) {\n  if (!(normalizedLocale in LOCALE_DATA)) {\n    LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];\n  }\n  return LOCALE_DATA[normalizedLocale];\n}\n/**\n * Helper function to remove all the locale data from `LOCALE_DATA`.\n */\nfunction unregisterAllLocaleData() {\n  LOCALE_DATA = {};\n}\n/**\n * Index of each type of locale data from the locale data array\n */\nvar LocaleDataIndex;\n(function (LocaleDataIndex) {\n  LocaleDataIndex[LocaleDataIndex[\"LocaleId\"] = 0] = \"LocaleId\";\n  LocaleDataIndex[LocaleDataIndex[\"DayPeriodsFormat\"] = 1] = \"DayPeriodsFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DayPeriodsStandalone\"] = 2] = \"DayPeriodsStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"DaysFormat\"] = 3] = \"DaysFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DaysStandalone\"] = 4] = \"DaysStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"MonthsFormat\"] = 5] = \"MonthsFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"MonthsStandalone\"] = 6] = \"MonthsStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"Eras\"] = 7] = \"Eras\";\n  LocaleDataIndex[LocaleDataIndex[\"FirstDayOfWeek\"] = 8] = \"FirstDayOfWeek\";\n  LocaleDataIndex[LocaleDataIndex[\"WeekendRange\"] = 9] = \"WeekendRange\";\n  LocaleDataIndex[LocaleDataIndex[\"DateFormat\"] = 10] = \"DateFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"TimeFormat\"] = 11] = \"TimeFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DateTimeFormat\"] = 12] = \"DateTimeFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"NumberSymbols\"] = 13] = \"NumberSymbols\";\n  LocaleDataIndex[LocaleDataIndex[\"NumberFormats\"] = 14] = \"NumberFormats\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencyCode\"] = 15] = \"CurrencyCode\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencySymbol\"] = 16] = \"CurrencySymbol\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencyName\"] = 17] = \"CurrencyName\";\n  LocaleDataIndex[LocaleDataIndex[\"Currencies\"] = 18] = \"Currencies\";\n  LocaleDataIndex[LocaleDataIndex[\"Directionality\"] = 19] = \"Directionality\";\n  LocaleDataIndex[LocaleDataIndex[\"PluralCase\"] = 20] = \"PluralCase\";\n  LocaleDataIndex[LocaleDataIndex[\"ExtraData\"] = 21] = \"ExtraData\";\n})(LocaleDataIndex || (LocaleDataIndex = {}));\n/**\n * Returns the canonical form of a locale name - lowercase with `_` replaced with `-`.\n */\nfunction normalizeLocale(locale) {\n  return locale.toLowerCase().replace(/_/g, '-');\n}\nconst pluralMapping = ['zero', 'one', 'two', 'few', 'many'];\n/**\n * Returns the plural case based on the locale\n */\nfunction getPluralCase(value, locale) {\n  const plural = getLocalePluralCase(locale)(parseInt(value, 10));\n  const result = pluralMapping[plural];\n  return result !== undefined ? result : 'other';\n}\n/**\n * The locale id that the application is using by default (for translations and ICU expressions).\n */\nconst DEFAULT_LOCALE_ID = 'en-US';\n/**\n * USD currency code that the application uses by default for CurrencyPipe when no\n * DEFAULT_CURRENCY_CODE is provided.\n */\nconst USD_CURRENCY_CODE = 'USD';\n\n/**\n * Marks that the next string is an element name.\n *\n * See `I18nMutateOpCodes` documentation.\n */\nconst ELEMENT_MARKER = {\n  marker: 'element'\n};\n/**\n * Marks that the next string is comment text need for ICU.\n *\n * See `I18nMutateOpCodes` documentation.\n */\nconst ICU_MARKER = {\n  marker: 'ICU'\n};\n/**\n * See `I18nCreateOpCodes`\n */\nvar I18nCreateOpCode;\n(function (I18nCreateOpCode) {\n  /**\n   * Number of bits to shift index so that it can be combined with the `APPEND_EAGERLY` and\n   * `COMMENT`.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"SHIFT\"] = 2] = \"SHIFT\";\n  /**\n   * Should the node be appended to parent immediately after creation.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"APPEND_EAGERLY\"] = 1] = \"APPEND_EAGERLY\";\n  /**\n   * If set the node should be comment (rather than a text) node.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"COMMENT\"] = 2] = \"COMMENT\";\n})(I18nCreateOpCode || (I18nCreateOpCode = {}));\n\n/**\n * The locale id that the application is currently using (for translations and ICU expressions).\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n */\nlet LOCALE_ID$1 = DEFAULT_LOCALE_ID;\n/**\n * Sets the locale id that will be used for translations and ICU expressions.\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n *\n * @param localeId\n */\nfunction setLocaleId(localeId) {\n  ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);\n  if (typeof localeId === 'string') {\n    LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, '-');\n  }\n}\n/**\n * Gets the locale id that will be used for translations and ICU expressions.\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n */\nfunction getLocaleId() {\n  return LOCALE_ID$1;\n}\n\n/**\n * Keep track of which input bindings in `ɵɵi18nExp` have changed.\n *\n * This is used to efficiently update expressions in i18n only when the corresponding input has\n * changed.\n *\n * 1) Each bit represents which of the `ɵɵi18nExp` has changed.\n * 2) There are 32 bits allowed in JS.\n * 3) Bit 32 is special as it is shared for all changes past 32. (In other words if you have more\n * than 32 `ɵɵi18nExp` then all changes past 32nd `ɵɵi18nExp` will be mapped to same bit. This means\n * that we may end up changing more than we need to. But i18n expressions with 32 bindings is rare\n * so in practice it should not be an issue.)\n */\nlet changeMask = 0b0;\n/**\n * Keeps track of which bit needs to be updated in `changeMask`\n *\n * This value gets incremented on every call to `ɵɵi18nExp`\n */\nlet changeMaskCounter = 0;\n/**\n * Keep track of which input bindings in `ɵɵi18nExp` have changed.\n *\n * `setMaskBit` gets invoked by each call to `ɵɵi18nExp`.\n *\n * @param hasChange did `ɵɵi18nExp` detect a change.\n */\nfunction setMaskBit(hasChange) {\n  if (hasChange) {\n    changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);\n  }\n  changeMaskCounter++;\n}\nfunction applyI18n(tView, lView, index) {\n  if (changeMaskCounter > 0) {\n    ngDevMode && assertDefined(tView, `tView should be defined`);\n    const tI18n = tView.data[index];\n    // When `index` points to an `ɵɵi18nAttributes` then we have an array otherwise `TI18n`\n    const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;\n    const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;\n    applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);\n  }\n  // Reset changeMask & maskBit to default for the next update cycle\n  changeMask = 0b0;\n  changeMaskCounter = 0;\n}\nfunction createNodeWithoutHydration(lView, textOrName, nodeType) {\n  const renderer = lView[RENDERER];\n  switch (nodeType) {\n    case Node.COMMENT_NODE:\n      return createCommentNode(renderer, textOrName);\n    case Node.TEXT_NODE:\n      return createTextNode(renderer, textOrName);\n    case Node.ELEMENT_NODE:\n      return createElementNode(renderer, textOrName, null);\n  }\n}\nlet _locateOrCreateNode = (lView, index, textOrName, nodeType) => {\n  lastNodeWasCreated(true);\n  return createNodeWithoutHydration(lView, textOrName, nodeType);\n};\nfunction locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {\n  const hydrationInfo = lView[HYDRATION];\n  const noOffsetIndex = index - HEADER_OFFSET;\n  const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n  lastNodeWasCreated(isNodeCreationMode);\n  if (isNodeCreationMode) {\n    return createNodeWithoutHydration(lView, textOrName, nodeType);\n  }\n  const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n  // TODO: Improve error handling\n  //\n  // Other hydration paths use validateMatchingNode() in order to provide\n  // detailed information in development mode about the expected DOM.\n  // However, not every node in an i18n block has a TNode. Instead, we\n  // need to be able to use the AST to generate a similar message.\n  ngDevMode && assertDefined(native, 'expected native element');\n  ngDevMode && assertEqual(native.nodeType, nodeType, 'expected matching nodeType');\n  ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), 'expecting matching tagName');\n  ngDevMode && markRNodeAsClaimedByHydration(native);\n  return native;\n}\nfunction enableLocateOrCreateI18nNodeImpl() {\n  _locateOrCreateNode = locateOrCreateNodeImpl;\n}\n/**\n * Apply `I18nCreateOpCodes` op-codes as stored in `TI18n.create`.\n *\n * Creates text (and comment) nodes which are internationalized.\n *\n * @param lView Current lView\n * @param createOpCodes Set of op-codes to apply\n * @param parentRNode Parent node (so that direct children can be added eagerly) or `null` if it is\n *     a root node.\n * @param insertInFrontOf DOM node that should be used as an anchor.\n */\nfunction applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {\n  const renderer = lView[RENDERER];\n  for (let i = 0; i < createOpCodes.length; i++) {\n    const opCode = createOpCodes[i++];\n    const text = createOpCodes[i];\n    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n    const index = opCode >>> I18nCreateOpCode.SHIFT;\n    let rNode = lView[index];\n    let lastNodeWasCreated = false;\n    if (rNode === null) {\n      // We only create new DOM nodes if they don't already exist: If ICU switches case back to a\n      // case which was already instantiated, no need to create new DOM nodes.\n      rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);\n      lastNodeWasCreated = wasLastNodeCreated();\n    }\n    if (appendNow && parentRNode !== null && lastNodeWasCreated) {\n      nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);\n    }\n  }\n}\n/**\n * Apply `I18nMutateOpCodes` OpCodes.\n *\n * @param tView Current `TView`\n * @param mutableOpCodes Mutable OpCodes to process\n * @param lView Current `LView`\n * @param anchorRNode place where the i18n node should be inserted.\n */\nfunction applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {\n  ngDevMode && assertDomNode(anchorRNode);\n  const renderer = lView[RENDERER];\n  // `rootIdx` represents the node into which all inserts happen.\n  let rootIdx = null;\n  // `rootRNode` represents the real node into which we insert. This can be different from\n  // `lView[rootIdx]` if we have projection.\n  //  - null we don't have a parent (as can be the case in when we are inserting into a root of\n  //    LView which has no parent.)\n  //  - `RElement` The element representing the root after taking projection into account.\n  let rootRNode;\n  for (let i = 0; i < mutableOpCodes.length; i++) {\n    const opCode = mutableOpCodes[i];\n    if (typeof opCode == 'string') {\n      const textNodeIndex = mutableOpCodes[++i];\n      if (lView[textNodeIndex] === null) {\n        ngDevMode && ngDevMode.rendererCreateTextNode++;\n        ngDevMode && assertIndexInRange(lView, textNodeIndex);\n        lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);\n      }\n    } else if (typeof opCode == 'number') {\n      switch (opCode & 1 /* IcuCreateOpCode.MASK_INSTRUCTION */) {\n        case 0 /* IcuCreateOpCode.AppendChild */:\n          const parentIdx = getParentFromIcuCreateOpCode(opCode);\n          if (rootIdx === null) {\n            // The first operation should save the `rootIdx` because the first operation\n            // must insert into the root. (Only subsequent operations can insert into a dynamic\n            // parent)\n            rootIdx = parentIdx;\n            rootRNode = nativeParentNode(renderer, anchorRNode);\n          }\n          let insertInFrontOf;\n          let parentRNode;\n          if (parentIdx === rootIdx) {\n            insertInFrontOf = anchorRNode;\n            parentRNode = rootRNode;\n          } else {\n            insertInFrontOf = null;\n            parentRNode = unwrapRNode(lView[parentIdx]);\n          }\n          // FIXME(misko): Refactor with `processI18nText`\n          if (parentRNode !== null) {\n            // This can happen if the `LView` we are adding to is not attached to a parent `LView`.\n            // In such a case there is no \"root\" we can attach to. This is fine, as we still need to\n            // create the elements. When the `LView` gets later added to a parent these \"root\" nodes\n            // get picked up and added.\n            ngDevMode && assertDomNode(parentRNode);\n            const refIdx = getRefFromIcuCreateOpCode(opCode);\n            ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref');\n            // `unwrapRNode` is not needed here as all of these point to RNodes as part of the i18n\n            // which can't have components.\n            const child = lView[refIdx];\n            ngDevMode && assertDomNode(child);\n            nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);\n            const tIcu = getTIcu(tView, refIdx);\n            if (tIcu !== null && typeof tIcu === 'object') {\n              // If we just added a comment node which has ICU then that ICU may have already been\n              // rendered and therefore we need to re-add it here.\n              ngDevMode && assertTIcu(tIcu);\n              const caseIndex = getCurrentICUCaseIndex(tIcu, lView);\n              if (caseIndex !== null) {\n                applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);\n              }\n            }\n          }\n          break;\n        case 1 /* IcuCreateOpCode.Attr */:\n          const elementNodeIndex = opCode >>> 1 /* IcuCreateOpCode.SHIFT_REF */;\n          const attrName = mutableOpCodes[++i];\n          const attrValue = mutableOpCodes[++i];\n          // This code is used for ICU expressions only, since we don't support\n          // directives/components in ICUs, we don't need to worry about inputs here\n          setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);\n          break;\n        default:\n          if (ngDevMode) {\n            throw new RuntimeError(700 /* RuntimeErrorCode.INVALID_I18N_STRUCTURE */, `Unable to determine the type of mutate operation for \"${opCode}\"`);\n          }\n      }\n    } else {\n      switch (opCode) {\n        case ICU_MARKER:\n          const commentValue = mutableOpCodes[++i];\n          const commentNodeIndex = mutableOpCodes[++i];\n          if (lView[commentNodeIndex] === null) {\n            ngDevMode && assertEqual(typeof commentValue, 'string', `Expected \"${commentValue}\" to be a comment node value`);\n            ngDevMode && ngDevMode.rendererCreateComment++;\n            ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);\n            const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);\n            // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)\n            attachPatchData(commentRNode, lView);\n          }\n          break;\n        case ELEMENT_MARKER:\n          const tagName = mutableOpCodes[++i];\n          const elementNodeIndex = mutableOpCodes[++i];\n          if (lView[elementNodeIndex] === null) {\n            ngDevMode && assertEqual(typeof tagName, 'string', `Expected \"${tagName}\" to be an element node tag name`);\n            ngDevMode && ngDevMode.rendererCreateElement++;\n            ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);\n            const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);\n            // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)\n            attachPatchData(elementRNode, lView);\n          }\n          break;\n        default:\n          ngDevMode && throwError(`Unable to determine the type of mutate operation for \"${opCode}\"`);\n      }\n    }\n  }\n}\n/**\n * Apply `I18nUpdateOpCodes` OpCodes\n *\n * @param tView Current `TView`\n * @param lView Current `LView`\n * @param updateOpCodes OpCodes to process\n * @param bindingsStartIndex Location of the first `ɵɵi18nApply`\n * @param changeMask Each bit corresponds to a `ɵɵi18nExp` (Counting backwards from\n *     `bindingsStartIndex`)\n */\nfunction applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {\n  for (let i = 0; i < updateOpCodes.length; i++) {\n    // bit code to check if we should apply the next update\n    const checkBit = updateOpCodes[i];\n    // Number of opCodes to skip until next set of update codes\n    const skipCodes = updateOpCodes[++i];\n    if (checkBit & changeMask) {\n      // The value has been updated since last checked\n      let value = '';\n      for (let j = i + 1; j <= i + skipCodes; j++) {\n        const opCode = updateOpCodes[j];\n        if (typeof opCode == 'string') {\n          value += opCode;\n        } else if (typeof opCode == 'number') {\n          if (opCode < 0) {\n            // Negative opCode represent `i18nExp` values offset.\n            value += renderStringify(lView[bindingsStartIndex - opCode]);\n          } else {\n            const nodeIndex = opCode >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n            switch (opCode & 3 /* I18nUpdateOpCode.MASK_OPCODE */) {\n              case 1 /* I18nUpdateOpCode.Attr */:\n                const propName = updateOpCodes[++j];\n                const sanitizeFn = updateOpCodes[++j];\n                const tNodeOrTagName = tView.data[nodeIndex];\n                ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');\n                if (typeof tNodeOrTagName === 'string') {\n                  // IF we don't have a `TNode`, then we are an element in ICU (as ICU content does\n                  // not have TNode), in which case we know that there are no directives, and hence\n                  // we use attribute setting.\n                  setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);\n                } else {\n                  elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);\n                }\n                break;\n              case 0 /* I18nUpdateOpCode.Text */:\n                const rText = lView[nodeIndex];\n                rText !== null && updateTextNode(lView[RENDERER], rText, value);\n                break;\n              case 2 /* I18nUpdateOpCode.IcuSwitch */:\n                applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);\n                break;\n              case 3 /* I18nUpdateOpCode.IcuUpdate */:\n                applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);\n                break;\n            }\n          }\n        }\n      }\n    } else {\n      const opCode = updateOpCodes[i + 1];\n      if (opCode > 0 && (opCode & 3 /* I18nUpdateOpCode.MASK_OPCODE */) === 3 /* I18nUpdateOpCode.IcuUpdate */) {\n        // Special case for the `icuUpdateCase`. It could be that the mask did not match, but\n        // we still need to execute `icuUpdateCase` because the case has changed recently due to\n        // previous `icuSwitchCase` instruction. (`icuSwitchCase` and `icuUpdateCase` always come in\n        // pairs.)\n        const nodeIndex = opCode >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n        const tIcu = getTIcu(tView, nodeIndex);\n        const currentIndex = lView[tIcu.currentCaseLViewIndex];\n        if (currentIndex < 0) {\n          applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);\n        }\n      }\n    }\n    i += skipCodes;\n  }\n}\n/**\n * Apply OpCodes associated with updating an existing ICU.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param bindingsStartIndex Location of the first `ɵɵi18nApply`\n * @param lView Current `LView`\n */\nfunction applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {\n  ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);\n  let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];\n  if (activeCaseIndex !== null) {\n    let mask = changeMask;\n    if (activeCaseIndex < 0) {\n      // Clear the flag.\n      // Negative number means that the ICU was freshly created and we need to force the update.\n      activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;\n      // -1 is same as all bits on, which simulates creation since it marks all bits dirty\n      mask = -1;\n    }\n    applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);\n  }\n}\n/**\n * Apply OpCodes associated with switching a case on ICU.\n *\n * This involves tearing down existing case and than building up a new case.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param lView Current `LView`\n * @param value Value of the case to update to.\n */\nfunction applyIcuSwitchCase(tView, tIcu, lView, value) {\n  // Rebuild a new case for this ICU\n  const caseIndex = getCaseIndex(tIcu, value);\n  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n  if (activeCaseIndex !== caseIndex) {\n    applyIcuSwitchCaseRemove(tView, tIcu, lView);\n    lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;\n    if (caseIndex !== null) {\n      // Add the nodes for the new case\n      const anchorRNode = lView[tIcu.anchorIdx];\n      if (anchorRNode) {\n        ngDevMode && assertDomNode(anchorRNode);\n        applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);\n      }\n      claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);\n    }\n  }\n}\n/**\n * Apply OpCodes associated with tearing ICU case.\n *\n * This involves tearing down existing case and than building up a new case.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param lView Current `LView`\n */\nfunction applyIcuSwitchCaseRemove(tView, tIcu, lView) {\n  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n  if (activeCaseIndex !== null) {\n    const removeCodes = tIcu.remove[activeCaseIndex];\n    for (let i = 0; i < removeCodes.length; i++) {\n      const nodeOrIcuIndex = removeCodes[i];\n      if (nodeOrIcuIndex > 0) {\n        // Positive numbers are `RNode`s.\n        const rNode = getNativeByIndex(nodeOrIcuIndex, lView);\n        rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);\n      } else {\n        // Negative numbers are ICUs\n        applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);\n      }\n    }\n  }\n}\n/**\n * Returns the index of the current case of an ICU expression depending on the main binding value\n *\n * @param icuExpression\n * @param bindingValue The value of the main binding used by this ICU expression\n */\nfunction getCaseIndex(icuExpression, bindingValue) {\n  let index = icuExpression.cases.indexOf(bindingValue);\n  if (index === -1) {\n    switch (icuExpression.type) {\n      case 1 /* IcuType.plural */:\n        {\n          const resolvedCase = getPluralCase(bindingValue, getLocaleId());\n          index = icuExpression.cases.indexOf(resolvedCase);\n          if (index === -1 && resolvedCase !== 'other') {\n            index = icuExpression.cases.indexOf('other');\n          }\n          break;\n        }\n      case 0 /* IcuType.select */:\n        {\n          index = icuExpression.cases.indexOf('other');\n          break;\n        }\n    }\n  }\n  return index === -1 ? null : index;\n}\n\n/**\n * Converts `I18nCreateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nCreateOpCodes.debug` property if `ngDevMode` is enabled.\n * This function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nCreateOpCodes` if attached as a method.\n * @param opcodes `I18nCreateOpCodes` if invoked as a function.\n */\nfunction i18nCreateOpCodesToString(opcodes) {\n  const createOpCodes = opcodes || (Array.isArray(this) ? this : []);\n  let lines = [];\n  for (let i = 0; i < createOpCodes.length; i++) {\n    const opCode = createOpCodes[i++];\n    const text = createOpCodes[i];\n    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n    const index = opCode >>> I18nCreateOpCode.SHIFT;\n    lines.push(`lView[${index}] = document.${isComment ? 'createComment' : 'createText'}(${JSON.stringify(text)});`);\n    if (appendNow) {\n      lines.push(`parent.appendChild(lView[${index}]);`);\n    }\n  }\n  return lines;\n}\n/**\n * Converts `I18nUpdateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nUpdateOpCodes.debug` property if `ngDevMode` is enabled.\n * This function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nUpdateOpCodes` if attached as a method.\n * @param opcodes `I18nUpdateOpCodes` if invoked as a function.\n */\nfunction i18nUpdateOpCodesToString(opcodes) {\n  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n  let lines = [];\n  function consumeOpCode(value) {\n    const ref = value >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n    const opCode = value & 3 /* I18nUpdateOpCode.MASK_OPCODE */;\n    switch (opCode) {\n      case 0 /* I18nUpdateOpCode.Text */:\n        return `(lView[${ref}] as Text).textContent = $$$`;\n      case 1 /* I18nUpdateOpCode.Attr */:\n        const attrName = parser.consumeString();\n        const sanitizationFn = parser.consumeFunction();\n        const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';\n        return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;\n      case 2 /* I18nUpdateOpCode.IcuSwitch */:\n        return `icuSwitchCase(${ref}, $$$)`;\n      case 3 /* I18nUpdateOpCode.IcuUpdate */:\n        return `icuUpdateCase(${ref})`;\n    }\n    throw new Error('unexpected OpCode');\n  }\n  while (parser.hasMore()) {\n    let mask = parser.consumeNumber();\n    let size = parser.consumeNumber();\n    const end = parser.i + size;\n    const statements = [];\n    let statement = '';\n    while (parser.i < end) {\n      let value = parser.consumeNumberOrString();\n      if (typeof value === 'string') {\n        statement += value;\n      } else if (value < 0) {\n        // Negative numbers are ref indexes\n        // Here `i` refers to current binding index. It is to signify that the value is relative,\n        // rather than absolute.\n        statement += '${lView[i' + value + ']}';\n      } else {\n        // Positive numbers are operations.\n        const opCodeText = consumeOpCode(value);\n        statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');\n        statement = '';\n      }\n    }\n    lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);\n  }\n  return lines;\n}\n/**\n * Converts `I18nCreateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nCreateOpCodes.debug` if `ngDevMode` is enabled. This\n * function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nCreateOpCodes` if attached as a method.\n * @param opcodes `I18nCreateOpCodes` if invoked as a function.\n */\nfunction icuCreateOpCodesToString(opcodes) {\n  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n  let lines = [];\n  function consumeOpCode(opCode) {\n    const parent = getParentFromIcuCreateOpCode(opCode);\n    const ref = getRefFromIcuCreateOpCode(opCode);\n    switch (getInstructionFromIcuCreateOpCode(opCode)) {\n      case 0 /* IcuCreateOpCode.AppendChild */:\n        return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;\n      case 1 /* IcuCreateOpCode.Attr */:\n        return `(lView[${ref}] as Element).setAttribute(\"${parser.consumeString()}\", \"${parser.consumeString()}\")`;\n    }\n    throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));\n  }\n  let lastRef = -1;\n  while (parser.hasMore()) {\n    let value = parser.consumeNumberStringOrMarker();\n    if (value === ICU_MARKER) {\n      const text = parser.consumeString();\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createComment(\"${text}\")`);\n    } else if (value === ELEMENT_MARKER) {\n      const text = parser.consumeString();\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createElement(\"${text}\")`);\n    } else if (typeof value === 'string') {\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createTextNode(\"${value}\")`);\n    } else if (typeof value === 'number') {\n      const line = consumeOpCode(value);\n      line && lines.push(line);\n    } else {\n      throw new Error('Unexpected value');\n    }\n  }\n  return lines;\n}\n/**\n * Converts `I18nRemoveOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nRemoveOpCodes.debug` if `ngDevMode` is enabled. This\n * function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nRemoveOpCodes` if attached as a method.\n * @param opcodes `I18nRemoveOpCodes` if invoked as a function.\n */\nfunction i18nRemoveOpCodesToString(opcodes) {\n  const removeCodes = opcodes || (Array.isArray(this) ? this : []);\n  let lines = [];\n  for (let i = 0; i < removeCodes.length; i++) {\n    const nodeOrIcuIndex = removeCodes[i];\n    if (nodeOrIcuIndex > 0) {\n      // Positive numbers are `RNode`s.\n      lines.push(`remove(lView[${nodeOrIcuIndex}])`);\n    } else {\n      // Negative numbers are ICUs\n      lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);\n    }\n  }\n  return lines;\n}\nclass OpCodeParser {\n  i = 0;\n  codes;\n  constructor(codes) {\n    this.codes = codes;\n  }\n  hasMore() {\n    return this.i < this.codes.length;\n  }\n  consumeNumber() {\n    let value = this.codes[this.i++];\n    assertNumber(value, 'expecting number in OpCode');\n    return value;\n  }\n  consumeString() {\n    let value = this.codes[this.i++];\n    assertString(value, 'expecting string in OpCode');\n    return value;\n  }\n  consumeFunction() {\n    let value = this.codes[this.i++];\n    if (value === null || typeof value === 'function') {\n      return value;\n    }\n    throw new Error('expecting function in OpCode');\n  }\n  consumeNumberOrString() {\n    let value = this.codes[this.i++];\n    if (typeof value === 'string') {\n      return value;\n    }\n    assertNumber(value, 'expecting number or string in OpCode');\n    return value;\n  }\n  consumeNumberStringOrMarker() {\n    let value = this.codes[this.i++];\n    if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER || value == ELEMENT_MARKER) {\n      return value;\n    }\n    assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');\n    return value;\n  }\n}\nconst BINDING_REGEXP = /�(\\d+):?\\d*�/gi;\nconst ICU_REGEXP = /({\\s*�\\d+:?\\d*�\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi;\nconst NESTED_ICU = /�(\\d+)�/;\nconst ICU_BLOCK_REGEXP = /^\\s*(�\\d+:?\\d*�)\\s*,\\s*(select|plural)\\s*,/;\nconst MARKER = `�`;\nconst SUBTEMPLATE_REGEXP = /�\\/?\\*(\\d+:\\d+)�/gi;\nconst PH_REGEXP = /�(\\/?[#*]\\d+):?\\d*�/gi;\n/**\n * Angular uses the special entity &ngsp; as a placeholder for non-removable space.\n * It's replaced by the 0xE500 PUA (Private Use Areas) unicode character and later on replaced by a\n * space.\n * We are re-implementing the same idea since translations might contain this special character.\n */\nconst NGSP_UNICODE_REGEXP = /\\uE500/g;\nfunction replaceNgsp(value) {\n  return value.replace(NGSP_UNICODE_REGEXP, ' ');\n}\n/**\n * Patch a `debug` property getter on top of the existing object.\n *\n * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`\n *\n * @param obj Object to patch\n * @param debugGetter Getter returning a value to patch\n */\nfunction attachDebugGetter(obj, debugGetter) {\n  if (ngDevMode) {\n    Object.defineProperty(obj, 'debug', {\n      get: debugGetter,\n      enumerable: false\n    });\n  } else {\n    throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');\n  }\n}\n/**\n * Create dynamic nodes from i18n translation block.\n *\n * - Text nodes are created synchronously\n * - TNodes are linked into tree lazily\n *\n * @param tView Current `TView`\n * @parentTNodeIndex index to the parent TNode of this i18n block\n * @param lView Current `LView`\n * @param index Index of `ɵɵi18nStart` instruction.\n * @param message Message to translate.\n * @param subTemplateIndex Index into the sub template of message translation. (ie in case of\n *     `ngIf`) (-1 otherwise)\n */\nfunction i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {\n  const rootTNode = getCurrentParentTNode();\n  const createOpCodes = [];\n  const updateOpCodes = [];\n  const existingTNodeStack = [[]];\n  const astStack = [[]];\n  if (ngDevMode) {\n    attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  message = getTranslationForTemplate(message, subTemplateIndex);\n  const msgParts = replaceNgsp(message).split(PH_REGEXP);\n  for (let i = 0; i < msgParts.length; i++) {\n    let value = msgParts[i];\n    if ((i & 1) === 0) {\n      // Even indexes are text (including bindings & ICU expressions)\n      const parts = i18nParseTextIntoPartsAndICU(value);\n      for (let j = 0; j < parts.length; j++) {\n        let part = parts[j];\n        if ((j & 1) === 0) {\n          // `j` is odd therefore `part` is string\n          const text = part;\n          ngDevMode && assertString(text, 'Parsed ICU part should be string');\n          if (text !== '') {\n            i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);\n          }\n        } else {\n          // `j` is Even therefor `part` is an `ICUExpression`\n          const icuExpression = part;\n          // Verify that ICU expression has the right shape. Translations might contain invalid\n          // constructions (while original messages were correct), so ICU parsing at runtime may\n          // not succeed (thus `icuExpression` remains a string).\n          // Note: we intentionally retain the error here by not using `ngDevMode`, because\n          // the value can change based on the locale and users aren't guaranteed to hit\n          // an invalid string while they're developing.\n          if (typeof icuExpression !== 'object') {\n            throw new Error(`Unable to parse ICU expression in \"${message}\" message.`);\n          }\n          const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : '', true);\n          const icuNodeIndex = icuContainerTNode.index;\n          ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');\n          icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);\n        }\n      }\n    } else {\n      // Odd indexes are placeholders (elements and sub-templates)\n      // At this point value is something like: '/#1:2' (originally coming from '�/#1:2�')\n      const isClosing = value.charCodeAt(0) === 47 /* CharCode.SLASH */;\n      const type = value.charCodeAt(isClosing ? 1 : 0);\n      ngDevMode && assertOneOf(type, 42 /* CharCode.STAR */, 35 /* CharCode.HASH */);\n      const index = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));\n      if (isClosing) {\n        existingTNodeStack.shift();\n        astStack.shift();\n        setCurrentTNode(getCurrentParentTNode(), false);\n      } else {\n        const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index);\n        existingTNodeStack.unshift([]);\n        setCurrentTNode(tNode, true);\n        const placeholderNode = {\n          kind: 2 /* I18nNodeKind.PLACEHOLDER */,\n          index,\n          children: [],\n          type: type === 35 /* CharCode.HASH */ ? 0 /* I18nPlaceholderType.ELEMENT */ : 1 /* I18nPlaceholderType.SUBTEMPLATE */\n        };\n        astStack[0].push(placeholderNode);\n        astStack.unshift(placeholderNode.children);\n      }\n    }\n  }\n  tView.data[index] = {\n    create: createOpCodes,\n    update: updateOpCodes,\n    ast: astStack[0],\n    parentTNodeIndex\n  };\n}\n/**\n * Allocate space in i18n Range add create OpCode instruction to create a text or comment node.\n *\n * @param tView Current `TView` needed to allocate space in i18n range.\n * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will be\n *     added as part of the `i18nStart` instruction or as part of the `TNode.insertBeforeIndex`.\n * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.\n * @param lView Current `LView` needed to allocate space in i18n range.\n * @param createOpCodes Array storing `I18nCreateOpCodes` where new opCodes will be added.\n * @param text Text to be added when the `Text` or `Comment` node will be created.\n * @param isICU true if a `Comment` node for ICU (instead of `Text`) node should be created.\n */\nfunction createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {\n  const i18nNodeIdx = allocExpando(tView, lView, 1, null);\n  let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;\n  let parentTNode = getCurrentParentTNode();\n  if (rootTNode === parentTNode) {\n    // FIXME(misko): A null `parentTNode` should represent when we fall of the `LView` boundary.\n    // (there is no parent), but in some circumstances (because we are inconsistent about how we set\n    // `previousOrParentTNode`) it could point to `rootTNode` So this is a work around.\n    parentTNode = null;\n  }\n  if (parentTNode === null) {\n    // If we don't have a parent that means that we can eagerly add nodes.\n    // If we have a parent than these nodes can't be added now (as the parent has not been created\n    // yet) and instead the `parentTNode` is responsible for adding it. See\n    // `TNode.insertBeforeIndex`\n    opCode |= I18nCreateOpCode.APPEND_EAGERLY;\n  }\n  if (isICU) {\n    opCode |= I18nCreateOpCode.COMMENT;\n    ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);\n  }\n  createOpCodes.push(opCode, text === null ? '' : text);\n  // We store `{{?}}` so that when looking at debug `TNodeType.template` we can see where the\n  // bindings are.\n  const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 /* TNodeType.Icu */ : 1 /* TNodeType.Text */, text === null ? ngDevMode ? '{{?}}' : '' : text, null);\n  addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);\n  const tNodeIdx = tNode.index;\n  setCurrentTNode(tNode, false /* Text nodes are self closing */);\n  if (parentTNode !== null && rootTNode !== parentTNode) {\n    // We are a child of deeper node (rather than a direct child of `i18nStart` instruction.)\n    // We have to make sure to add ourselves to the parent.\n    setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);\n  }\n  return tNode;\n}\n/**\n * Processes text node in i18n block.\n *\n * Text nodes can have:\n * - Create instruction in `createOpCodes` for creating the text node.\n * - Allocate spec for text node in i18n range of `LView`\n * - If contains binding:\n *    - bindings => allocate space in i18n range of `LView` to store the binding value.\n *    - populate `updateOpCodes` with update instructions.\n *\n * @param tView Current `TView`\n * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will\n *     be added as part of the `i18nStart` instruction or as part of the\n *     `TNode.insertBeforeIndex`.\n * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.\n * @param createOpCodes Location where the creation OpCodes will be stored.\n * @param lView Current `LView`\n * @param text The translated text (which may contain binding)\n */\nfunction i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {\n  const hasBinding = text.match(BINDING_REGEXP);\n  const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);\n  const index = tNode.index;\n  if (hasBinding) {\n    generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);\n  }\n  ast.push({\n    kind: 0 /* I18nNodeKind.TEXT */,\n    index\n  });\n}\n/**\n * See `i18nAttributes` above.\n */\nfunction i18nAttributesFirstPass(tView, index, values) {\n  const previousElement = getCurrentTNode();\n  const previousElementIndex = previousElement.index;\n  const updateOpCodes = [];\n  if (ngDevMode) {\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  if (tView.firstCreatePass && tView.data[index] === null) {\n    for (let i = 0; i < values.length; i += 2) {\n      const attrName = values[i];\n      const message = values[i + 1];\n      if (message !== '') {\n        // Check if attribute value contains an ICU and throw an error if that's the case.\n        // ICUs in element attributes are not supported.\n        // Note: we intentionally retain the error here by not using `ngDevMode`, because\n        // the `value` can change based on the locale and users aren't guaranteed to hit\n        // an invalid string while they're developing.\n        if (ICU_REGEXP.test(message)) {\n          throw new Error(`ICU expressions are not supported in attributes. Message: \"${message}\".`);\n        }\n        // i18n attributes that hit this code path are guaranteed to have bindings, because\n        // the compiler treats static i18n attributes as regular attribute bindings.\n        // Since this may not be the first i18n attribute on this element we need to pass in how\n        // many previous bindings there have already been.\n        generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), null);\n      }\n    }\n    tView.data[index] = updateOpCodes;\n  }\n}\n/**\n * Generate the OpCodes to update the bindings of a string.\n *\n * @param updateOpCodes Place where the update opcodes will be stored.\n * @param str The string containing the bindings.\n * @param destinationNode Index of the destination node which will receive the binding.\n * @param attrName Name of the attribute, if the string belongs to an attribute.\n * @param sanitizeFn Sanitization function used to sanitize the string after update, if necessary.\n * @param bindingStart The lView index of the next expression that can be bound via an opCode.\n * @returns The mask value for these bindings\n */\nfunction generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {\n  ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');\n  const maskIndex = updateOpCodes.length; // Location of mask\n  const sizeIndex = maskIndex + 1; // location of size for skipping\n  updateOpCodes.push(null, null); // Alloc space for mask and size\n  const startIndex = maskIndex + 2; // location of first allocation.\n  if (ngDevMode) {\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  const textParts = str.split(BINDING_REGEXP);\n  let mask = 0;\n  for (let j = 0; j < textParts.length; j++) {\n    const textValue = textParts[j];\n    if (j & 1) {\n      // Odd indexes are bindings\n      const bindingIndex = bindingStart + parseInt(textValue, 10);\n      updateOpCodes.push(-1 - bindingIndex);\n      mask = mask | toMaskBit(bindingIndex);\n    } else if (textValue !== '') {\n      // Even indexes are text\n      updateOpCodes.push(textValue);\n    }\n  }\n  updateOpCodes.push(destinationNode << 2 /* I18nUpdateOpCode.SHIFT_REF */ | (attrName ? 1 /* I18nUpdateOpCode.Attr */ : 0 /* I18nUpdateOpCode.Text */));\n  if (attrName) {\n    updateOpCodes.push(attrName, sanitizeFn);\n  }\n  updateOpCodes[maskIndex] = mask;\n  updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;\n  return mask;\n}\n/**\n * Count the number of bindings in the given `opCodes`.\n *\n * It could be possible to speed this up, by passing the number of bindings found back from\n * `generateBindingUpdateOpCodes()` to `i18nAttributesFirstPass()` but this would then require more\n * complexity in the code and/or transient objects to be created.\n *\n * Since this function is only called once when the template is instantiated, is trivial in the\n * first instance (since `opCodes` will be an empty array), and it is not common for elements to\n * contain multiple i18n bound attributes, it seems like this is a reasonable compromise.\n */\nfunction countBindings(opCodes) {\n  let count = 0;\n  for (let i = 0; i < opCodes.length; i++) {\n    const opCode = opCodes[i];\n    // Bindings are negative numbers.\n    if (typeof opCode === 'number' && opCode < 0) {\n      count++;\n    }\n  }\n  return count;\n}\n/**\n * Convert binding index to mask bit.\n *\n * Each index represents a single bit on the bit-mask. Because bit-mask only has 32 bits, we make\n * the 32nd bit share all masks for all bindings higher than 32. Since it is extremely rare to\n * have more than 32 bindings this will be hit very rarely. The downside of hitting this corner\n * case is that we will execute binding code more often than necessary. (penalty of performance)\n */\nfunction toMaskBit(bindingIndex) {\n  return 1 << Math.min(bindingIndex, 31);\n}\n/**\n * Removes everything inside the sub-templates of a message.\n */\nfunction removeInnerTemplateTranslation(message) {\n  let match;\n  let res = '';\n  let index = 0;\n  let inTemplate = false;\n  let tagMatched;\n  while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {\n    if (!inTemplate) {\n      res += message.substring(index, match.index + match[0].length);\n      tagMatched = match[1];\n      inTemplate = true;\n    } else {\n      if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {\n        index = match.index;\n        inTemplate = false;\n      }\n    }\n  }\n  ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation \"${message}\"`);\n  res += message.slice(index);\n  return res;\n}\n/**\n * Extracts a part of a message and removes the rest.\n *\n * This method is used for extracting a part of the message associated with a template. A\n * translated message can span multiple templates.\n *\n * Example:\n * ```html\n * <div i18n>Translate <span *ngIf>me</span>!</div>\n * ```\n *\n * @param message The message to crop\n * @param subTemplateIndex Index of the sub-template to extract. If undefined it returns the\n * external template and removes all sub-templates.\n */\nfunction getTranslationForTemplate(message, subTemplateIndex) {\n  if (isRootTemplateMessage(subTemplateIndex)) {\n    // We want the root template message, ignore all sub-templates\n    return removeInnerTemplateTranslation(message);\n  } else {\n    // We want a specific sub-template\n    const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;\n    const end = message.search(new RegExp(`${MARKER}\\\\/\\\\*\\\\d+:${subTemplateIndex}${MARKER}`));\n    return removeInnerTemplateTranslation(message.substring(start, end));\n  }\n}\n/**\n * Generate the OpCodes for ICU expressions.\n *\n * @param icuExpression\n * @param index Index where the anchor is stored and an optional `TIcuContainerNode`\n *   - `lView[anchorIdx]` points to a `Comment` node representing the anchor for the ICU.\n *   - `tView.data[anchorIdx]` points to the `TIcuContainerNode` if ICU is root (`null` otherwise)\n */\nfunction icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {\n  ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');\n  let bindingMask = 0;\n  const tIcu = {\n    type: icuExpression.type,\n    currentCaseLViewIndex: allocExpando(tView, lView, 1, null),\n    anchorIdx,\n    cases: [],\n    create: [],\n    remove: [],\n    update: []\n  };\n  addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);\n  setTIcu(tView, anchorIdx, tIcu);\n  const values = icuExpression.values;\n  const cases = [];\n  for (let i = 0; i < values.length; i++) {\n    // Each value is an array of strings & other ICU expressions\n    const valueArr = values[i];\n    const nestedIcus = [];\n    for (let j = 0; j < valueArr.length; j++) {\n      const value = valueArr[j];\n      if (typeof value !== 'string') {\n        // It is an nested ICU expression\n        const icuIndex = nestedIcus.push(value) - 1;\n        // Replace nested ICU expression by a comment node\n        valueArr[j] = `<!--�${icuIndex}�-->`;\n      }\n    }\n    const caseAst = [];\n    cases.push(caseAst);\n    bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) | bindingMask;\n  }\n  if (bindingMask) {\n    addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);\n  }\n  ast.push({\n    kind: 3 /* I18nNodeKind.ICU */,\n    index: anchorIdx,\n    cases,\n    currentCaseLViewIndex: tIcu.currentCaseLViewIndex\n  });\n}\n/**\n * Parses text containing an ICU expression and produces a JSON object for it.\n * Original code from closure library, modified for Angular.\n *\n * @param pattern Text containing an ICU expression that needs to be parsed.\n *\n */\nfunction parseICUBlock(pattern) {\n  const cases = [];\n  const values = [];\n  let icuType = 1 /* IcuType.plural */;\n  let mainBinding = 0;\n  pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {\n    if (type === 'select') {\n      icuType = 0 /* IcuType.select */;\n    } else {\n      icuType = 1 /* IcuType.plural */;\n    }\n    mainBinding = parseInt(binding.slice(1), 10);\n    return '';\n  });\n  const parts = i18nParseTextIntoPartsAndICU(pattern);\n  // Looking for (key block)+ sequence. One of the keys has to be \"other\".\n  for (let pos = 0; pos < parts.length;) {\n    let key = parts[pos++].trim();\n    if (icuType === 1 /* IcuType.plural */) {\n      // Key can be \"=x\", we just want \"x\"\n      key = key.replace(/\\s*(?:=)?(\\w+)\\s*/, '$1');\n    }\n    if (key.length) {\n      cases.push(key);\n    }\n    const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);\n    if (cases.length > values.length) {\n      values.push(blocks);\n    }\n  }\n  // TODO(ocombe): support ICU expressions in attributes, see #21615\n  return {\n    type: icuType,\n    mainBinding: mainBinding,\n    cases,\n    values\n  };\n}\n/**\n * Breaks pattern into strings and top level {...} blocks.\n * Can be used to break a message into text and ICU expressions, or to break an ICU expression\n * into keys and cases. Original code from closure library, modified for Angular.\n *\n * @param pattern (sub)Pattern to be broken.\n * @returns An `Array<string|IcuExpression>` where:\n *   - odd positions: `string` => text between ICU expressions\n *   - even positions: `ICUExpression` => ICU expression parsed into `ICUExpression` record.\n */\nfunction i18nParseTextIntoPartsAndICU(pattern) {\n  if (!pattern) {\n    return [];\n  }\n  let prevPos = 0;\n  const braceStack = [];\n  const results = [];\n  const braces = /[{}]/g;\n  // lastIndex doesn't get set to 0 so we have to.\n  braces.lastIndex = 0;\n  let match;\n  while (match = braces.exec(pattern)) {\n    const pos = match.index;\n    if (match[0] == '}') {\n      braceStack.pop();\n      if (braceStack.length == 0) {\n        // End of the block.\n        const block = pattern.substring(prevPos, pos);\n        if (ICU_BLOCK_REGEXP.test(block)) {\n          results.push(parseICUBlock(block));\n        } else {\n          results.push(block);\n        }\n        prevPos = pos + 1;\n      }\n    } else {\n      if (braceStack.length == 0) {\n        const substring = pattern.substring(prevPos, pos);\n        results.push(substring);\n        prevPos = pos + 1;\n      }\n      braceStack.push('{');\n    }\n  }\n  const substring = pattern.substring(prevPos);\n  results.push(substring);\n  return results;\n}\n/**\n * Parses a node, its children and its siblings, and generates the mutate & update OpCodes.\n *\n */\nfunction parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {\n  const create = [];\n  const remove = [];\n  const update = [];\n  if (ngDevMode) {\n    attachDebugGetter(create, icuCreateOpCodesToString);\n    attachDebugGetter(remove, i18nRemoveOpCodesToString);\n    attachDebugGetter(update, i18nUpdateOpCodesToString);\n  }\n  tIcu.cases.push(caseName);\n  tIcu.create.push(create);\n  tIcu.remove.push(remove);\n  tIcu.update.push(update);\n  const inertBodyHelper = getInertBodyHelper(getDocument());\n  const inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);\n  ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');\n  const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;\n  if (inertRootNode) {\n    return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);\n  } else {\n    return 0;\n  }\n}\nfunction walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {\n  let bindingMask = 0;\n  let currentNode = parentNode.firstChild;\n  while (currentNode) {\n    const newIndex = allocExpando(tView, lView, 1, null);\n    switch (currentNode.nodeType) {\n      case Node.ELEMENT_NODE:\n        const element = currentNode;\n        const tagName = element.tagName.toLowerCase();\n        if (VALID_ELEMENTS.hasOwnProperty(tagName)) {\n          addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);\n          tView.data[newIndex] = tagName;\n          const elAttrs = element.attributes;\n          for (let i = 0; i < elAttrs.length; i++) {\n            const attr = elAttrs.item(i);\n            const lowerAttrName = attr.name.toLowerCase();\n            const hasBinding = !!attr.value.match(BINDING_REGEXP);\n            // we assume the input string is safe, unless it's using a binding\n            if (hasBinding) {\n              if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {\n                if (URI_ATTRS[lowerAttrName]) {\n                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, _sanitizeUrl);\n                } else {\n                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, null);\n                }\n              } else {\n                ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n              }\n            } else {\n              addCreateAttribute(create, newIndex, attr);\n            }\n          }\n          const elementNode = {\n            kind: 1 /* I18nNodeKind.ELEMENT */,\n            index: newIndex,\n            children: []\n          };\n          ast.push(elementNode);\n          // Parse the children of this node (if any)\n          bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;\n          addRemoveNode(remove, newIndex, depth);\n        }\n        break;\n      case Node.TEXT_NODE:\n        const value = currentNode.textContent || '';\n        const hasBinding = value.match(BINDING_REGEXP);\n        addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);\n        addRemoveNode(remove, newIndex, depth);\n        if (hasBinding) {\n          bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;\n        }\n        ast.push({\n          kind: 0 /* I18nNodeKind.TEXT */,\n          index: newIndex\n        });\n        break;\n      case Node.COMMENT_NODE:\n        // Check if the comment node is a placeholder for a nested ICU\n        const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');\n        if (isNestedIcu) {\n          const nestedIcuIndex = parseInt(isNestedIcu[1], 10);\n          const icuExpression = nestedIcus[nestedIcuIndex];\n          // Create the comment node that will anchor the ICU expression\n          addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : '', parentIdx, newIndex);\n          icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);\n          addRemoveNestedIcu(remove, newIndex, depth);\n        }\n        break;\n    }\n    currentNode = currentNode.nextSibling;\n  }\n  return bindingMask;\n}\nfunction addRemoveNode(remove, index, depth) {\n  if (depth === 0) {\n    remove.push(index);\n  }\n}\nfunction addRemoveNestedIcu(remove, index, depth) {\n  if (depth === 0) {\n    remove.push(~index); // remove ICU at `index`\n    remove.push(index); // remove ICU comment at `index`\n  }\n}\nfunction addUpdateIcuSwitch(update, icuExpression, index) {\n  update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2 /* I18nUpdateOpCode.SHIFT_REF */ | 2 /* I18nUpdateOpCode.IcuSwitch */);\n}\nfunction addUpdateIcuUpdate(update, bindingMask, index) {\n  update.push(bindingMask, 1, index << 2 /* I18nUpdateOpCode.SHIFT_REF */ | 3 /* I18nUpdateOpCode.IcuUpdate */);\n}\nfunction addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {\n  if (marker !== null) {\n    create.push(marker);\n  }\n  create.push(text, createAtIdx, icuCreateOpCode(0 /* IcuCreateOpCode.AppendChild */, appendToParentIdx, createAtIdx));\n}\nfunction addCreateAttribute(create, newIndex, attr) {\n  create.push(newIndex << 1 /* IcuCreateOpCode.SHIFT_REF */ | 1 /* IcuCreateOpCode.Attr */, attr.name, attr.value);\n}\n\n// i18nPostprocess consts\nconst ROOT_TEMPLATE_ID = 0;\nconst PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]/;\nconst PP_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]|(�\\/?\\*\\d+:\\d+�)/g;\nconst PP_ICU_VARS_REGEXP = /({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g;\nconst PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;\nconst PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\\d+)?)�/g;\nconst PP_CLOSE_TEMPLATE_REGEXP = /\\/\\*/;\nconst PP_TEMPLATE_ID_REGEXP = /\\d+\\:(\\d+)/;\n/**\n * Handles message string post-processing for internationalization.\n *\n * Handles message string post-processing by transforming it from intermediate\n * format (that might contain some markers that we need to replace) to the final\n * form, consumable by i18nStart instruction. Post processing steps include:\n *\n * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])\n * 2. Replace all ICU vars (like \"VAR_PLURAL\")\n * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)\n *    in case multiple ICUs have the same placeholder name\n *\n * @param message Raw translation string for post processing\n * @param replacements Set of replacements that should be applied\n *\n * @returns Transformed string that can be consumed by i18nStart instruction\n *\n * @codeGenApi\n */\nfunction i18nPostprocess(message, replacements = {}) {\n  /**\n   * Step 1: resolve all multi-value placeholders like [�#5�|�*1:1��#2:1�|�#4:1�]\n   *\n   * Note: due to the way we process nested templates (BFS), multi-value placeholders are typically\n   * grouped by templates, for example: [�#5�|�#6�|�#1:1�|�#3:2�] where �#5� and �#6� belong to root\n   * template, �#1:1� belong to nested template with index 1 and �#1:2� - nested template with index\n   * 3. However in real templates the order might be different: i.e. �#1:1� and/or �#3:2� may go in\n   * front of �#6�. The post processing step restores the right order by keeping track of the\n   * template id stack and looks for placeholders that belong to the currently active template.\n   */\n  let result = message;\n  if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {\n    const matches = {};\n    const templateIdsStack = [ROOT_TEMPLATE_ID];\n    result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {\n      const content = phs || tmpl;\n      const placeholders = matches[content] || [];\n      if (!placeholders.length) {\n        content.split('|').forEach(placeholder => {\n          const match = placeholder.match(PP_TEMPLATE_ID_REGEXP);\n          const templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;\n          const isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);\n          placeholders.push([templateId, isCloseTemplateTag, placeholder]);\n        });\n        matches[content] = placeholders;\n      }\n      if (!placeholders.length) {\n        throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);\n      }\n      const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];\n      let idx = 0;\n      // find placeholder index that matches current template id\n      for (let i = 0; i < placeholders.length; i++) {\n        if (placeholders[i][0] === currentTemplateId) {\n          idx = i;\n          break;\n        }\n      }\n      // update template id stack based on the current tag extracted\n      const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];\n      if (isCloseTemplateTag) {\n        templateIdsStack.pop();\n      } else if (currentTemplateId !== templateId) {\n        templateIdsStack.push(templateId);\n      }\n      // remove processed tag from the list\n      placeholders.splice(idx, 1);\n      return placeholder;\n    });\n  }\n  // return current result if no replacements specified\n  if (!Object.keys(replacements).length) {\n    return result;\n  }\n  /**\n   * Step 2: replace all ICU vars (like \"VAR_PLURAL\")\n   */\n  result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {\n    return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;\n  });\n  /**\n   * Step 3: replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n   */\n  result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {\n    return replacements.hasOwnProperty(key) ? replacements[key] : match;\n  });\n  /**\n   * Step 4: replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�) in case\n   * multiple ICUs have the same placeholder name\n   */\n  result = result.replace(PP_ICUS_REGEXP, (match, key) => {\n    if (replacements.hasOwnProperty(key)) {\n      const list = replacements[key];\n      if (!list.length) {\n        throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);\n      }\n      return list.shift();\n    }\n    return match;\n  });\n  return result;\n}\n\n/**\n * Marks a block of text as translatable.\n *\n * The instructions `i18nStart` and `i18nEnd` mark the translation block in the template.\n * The translation `message` is the value which is locale specific. The translation string may\n * contain placeholders which associate inner elements and sub-templates within the translation.\n *\n * The translation `message` placeholders are:\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\n *   `block` that matches the sub-template in which it was declared.\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\n *   and end of DOM element that were embedded in the original translation block. The placeholder\n *   `index` points to the element index in the template instructions set. An optional `block` that\n *   matches the sub-template in which it was declared.\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\n *   split up and translated separately in each angular template function. The `index` points to the\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\n *\n * @param index A unique index of the translation in the static block.\n * @param messageIndex An index of the translation message from the `def.consts` array.\n * @param subTemplateIndex Optional sub-template index in the `message`.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {\n  const tView = getTView();\n  const lView = getLView();\n  const adjustedIndex = HEADER_OFFSET + index;\n  ngDevMode && assertDefined(tView, `tView should be defined`);\n  const message = getConstant(tView.consts, messageIndex);\n  const parentTNode = getCurrentParentTNode();\n  if (tView.firstCreatePass) {\n    i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);\n  }\n  // Set a flag that this LView has i18n blocks.\n  // The flag is later used to determine whether this component should\n  // be hydrated (currently hydration is not supported for i18n blocks).\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    // Annotate host component's LView (not embedded view's LView),\n    // since hydration can be skipped on per-component basis only.\n    const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n    componentLView[FLAGS] |= 32 /* LViewFlags.HasI18n */;\n  } else {\n    lView[FLAGS] |= 32 /* LViewFlags.HasI18n */;\n  }\n  const tI18n = tView.data[adjustedIndex];\n  const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;\n  const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);\n  // If `parentTNode` is an `ElementContainer` than it has `<!--ng-container--->`.\n  // When we do inserts we have to make sure to insert in front of `<!--ng-container--->`.\n  const insertInFrontOf = parentTNode && parentTNode.type & 8 /* TNodeType.ElementContainer */ ? lView[parentTNode.index] : null;\n  prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);\n  applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);\n  setInI18nBlock(true);\n}\n/**\n * Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes\n * into the render tree, moves the placeholder nodes and removes the deleted nodes.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nEnd() {\n  setInI18nBlock(false);\n}\n/**\n *\n * Use this instruction to create a translation block that doesn't contain any placeholder.\n * It calls both {@link i18nStart} and {@link i18nEnd} in one instruction.\n *\n * The translation `message` is the value which is locale specific. The translation string may\n * contain placeholders which associate inner elements and sub-templates within the translation.\n *\n * The translation `message` placeholders are:\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\n *   `block` that matches the sub-template in which it was declared.\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\n *   and end of DOM element that were embedded in the original translation block. The placeholder\n *   `index` points to the element index in the template instructions set. An optional `block` that\n *   matches the sub-template in which it was declared.\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\n *   split up and translated separately in each angular template function. The `index` points to the\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\n *\n * @param index A unique index of the translation in the static block.\n * @param messageIndex An index of the translation message from the `def.consts` array.\n * @param subTemplateIndex Optional sub-template index in the `message`.\n *\n * @codeGenApi\n */\nfunction ɵɵi18n(index, messageIndex, subTemplateIndex) {\n  ɵɵi18nStart(index, messageIndex, subTemplateIndex);\n  ɵɵi18nEnd();\n}\n/**\n * Marks a list of attributes as translatable.\n *\n * @param index A unique index in the static block\n * @param values\n *\n * @codeGenApi\n */\nfunction ɵɵi18nAttributes(index, attrsIndex) {\n  const tView = getTView();\n  ngDevMode && assertDefined(tView, `tView should be defined`);\n  const attrs = getConstant(tView.consts, attrsIndex);\n  i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);\n}\n/**\n * Stores the values of the bindings during each update cycle in order to determine if we need to\n * update the translated nodes.\n *\n * @param value The binding's value\n * @returns This function returns itself so that it may be chained\n * (e.g. `i18nExp(ctx.name)(ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵi18nExp(value) {\n  const lView = getLView();\n  setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));\n  return ɵɵi18nExp;\n}\n/**\n * Updates a translation block or an i18n attribute when the bindings have changed.\n *\n * @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}\n * (i18n attribute) on which it should update the content.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nApply(index) {\n  applyI18n(getTView(), getLView(), index + HEADER_OFFSET);\n}\n/**\n * Handles message string post-processing for internationalization.\n *\n * Handles message string post-processing by transforming it from intermediate\n * format (that might contain some markers that we need to replace) to the final\n * form, consumable by i18nStart instruction. Post processing steps include:\n *\n * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])\n * 2. Replace all ICU vars (like \"VAR_PLURAL\")\n * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)\n *    in case multiple ICUs have the same placeholder name\n *\n * @param message Raw translation string for post processing\n * @param replacements Set of replacements that should be applied\n *\n * @returns Transformed string that can be consumed by i18nStart instruction\n *\n * @codeGenApi\n */\nfunction ɵɵi18nPostprocess(message, replacements = {}) {\n  return i18nPostprocess(message, replacements);\n}\n\n/**\n * Contains a reference to a function that disables event replay feature\n * for server-side rendered applications. This function is overridden with\n * an actual implementation when the event replay feature is enabled via\n * `withEventReplay()` call.\n */\nlet stashEventListener = (el, eventName, listenerFn) => {};\nfunction setStashFn(fn) {\n  stashEventListener = fn;\n}\n/**\n * Adds an event listener to the current node.\n *\n * If an output exists on one of the node's directives, it also subscribes to the output\n * and saves the subscription for later cleanup.\n *\n * @param eventName Name of the event\n * @param listenerFn The function to be called when event emits\n * @param useCapture Whether or not to use capture in event listener - this argument is a reminder\n *     from the Renderer3 infrastructure and should be removed from the instruction arguments\n * @param eventTargetResolver Function that returns global target information in case this listener\n * should be attached to a global object like window, document or body\n *\n * @codeGenApi\n */\nfunction ɵɵlistener(eventName, listenerFn, useCapture, eventTargetResolver) {\n  const lView = getLView();\n  const tView = getTView();\n  const tNode = getCurrentTNode();\n  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);\n  return ɵɵlistener;\n}\n/**\n * Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.\n *\n * This instruction is for compatibility purposes and is designed to ensure that a\n * synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered\n * in the component's renderer. Normally all host listeners are evaluated with the\n * parent component's renderer, but, in the case of animation @triggers, they need\n * to be evaluated with the sub component's renderer (because that's where the\n * animation triggers are defined).\n *\n * Do not use this instruction as a replacement for `listener`. This instruction\n * only exists to ensure compatibility with the ViewEngine's host binding behavior.\n *\n * @param eventName Name of the event\n * @param listenerFn The function to be called when event emits\n * @param useCapture Whether or not to use capture in event listener\n * @param eventTargetResolver Function that returns global target information in case this listener\n * should be attached to a global object like window, document or body\n *\n * @codeGenApi\n */\nfunction ɵɵsyntheticHostListener(eventName, listenerFn) {\n  const tNode = getCurrentTNode();\n  const lView = getLView();\n  const tView = getTView();\n  const currentDef = getCurrentDirectiveDef(tView.data);\n  const renderer = loadComponentRenderer(currentDef, tNode, lView);\n  listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);\n  return ɵɵsyntheticHostListener;\n}\n/**\n * A utility function that checks if a given element has already an event handler registered for an\n * event with a specified name. The TView.cleanup data structure is used to find out which events\n * are registered for a given element.\n */\nfunction findExistingListener(tView, lView, eventName, tNodeIdx) {\n  const tCleanup = tView.cleanup;\n  if (tCleanup != null) {\n    for (let i = 0; i < tCleanup.length - 1; i += 2) {\n      const cleanupEventName = tCleanup[i];\n      if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {\n        // We have found a matching event name on the same node but it might not have been\n        // registered yet, so we must explicitly verify entries in the LView cleanup data\n        // structures.\n        const lCleanup = lView[CLEANUP];\n        const listenerIdxInLCleanup = tCleanup[i + 2];\n        return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;\n      }\n      // TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or\n      // 2-element entries (for directive and queries destroy hooks). As such we can encounter\n      // blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements\n      // first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check\n      // documentation of TView.cleanup for more details of this data structure layout.\n      if (typeof cleanupEventName === 'string') {\n        i += 2;\n      }\n    }\n  }\n  return null;\n}\nfunction listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {\n  const isTNodeDirectiveHost = isDirectiveHost(tNode);\n  const firstCreatePass = tView.firstCreatePass;\n  const tCleanup = firstCreatePass && getOrCreateTViewCleanup(tView);\n  const context = lView[CONTEXT];\n  // When the ɵɵlistener instruction was generated and is executed we know that there is either a\n  // native listener or a directive output on this element. As such we we know that we will have to\n  // register a listener and store its cleanup function on LView.\n  const lCleanup = getOrCreateLViewCleanup(lView);\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n  let processOutputs = true;\n  // Adding a native event listener is applicable when:\n  // - The corresponding TNode represents a DOM element.\n  // - The event target has a resolver (usually resulting in a global object,\n  //   such as `window` or `document`).\n  if (tNode.type & 3 /* TNodeType.AnyRNode */ || eventTargetResolver) {\n    const native = getNativeByTNode(tNode, lView);\n    const target = eventTargetResolver ? eventTargetResolver(native) : native;\n    const lCleanupIndex = lCleanup.length;\n    const idxOrTargetGetter = eventTargetResolver ? _lView => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;\n    // In order to match current behavior, native DOM event listeners must be added for all\n    // events (including outputs).\n    // There might be cases where multiple directives on the same element try to register an event\n    // handler function for the same event. In this situation we want to avoid registration of\n    // several native listeners as each registration would be intercepted by NgZone and\n    // trigger change detection. This would mean that a single user action would result in several\n    // change detections being invoked. To avoid this situation we want to have only one call to\n    // native handler registration (for the same element and same type of event).\n    //\n    // In order to have just one native event handler in presence of multiple handler functions,\n    // we just register a first handler function as a native event listener and then chain\n    // (coalesce) other handler functions on top of the first native handler function.\n    let existingListener = null;\n    // Please note that the coalescing described here doesn't happen for events specifying an\n    // alternative target (ex. (document:click)) - this is to keep backward compatibility with the\n    // view engine.\n    // Also, we don't have to search for existing listeners is there are no directives\n    // matching on a given node as we can't register multiple event handlers for the same event in\n    // a template (this would mean having duplicate attributes).\n    if (!eventTargetResolver && isTNodeDirectiveHost) {\n      existingListener = findExistingListener(tView, lView, eventName, tNode.index);\n    }\n    if (existingListener !== null) {\n      // Attach a new listener to coalesced listeners list, maintaining the order in which\n      // listeners are registered. For performance reasons, we keep a reference to the last\n      // listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through\n      // the entire set each time we need to add a new listener.\n      const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;\n      lastListenerFn.__ngNextListenerFn__ = listenerFn;\n      existingListener.__ngLastListenerFn__ = listenerFn;\n      processOutputs = false;\n    } else {\n      listenerFn = wrapListener(tNode, lView, context, listenerFn);\n      stashEventListener(native, eventName, listenerFn);\n      const cleanupFn = renderer.listen(target, eventName, listenerFn);\n      ngDevMode && ngDevMode.rendererAddEventListener++;\n      lCleanup.push(listenerFn, cleanupFn);\n      tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);\n    }\n  } else {\n    // Even if there is no native listener to add, we still need to wrap the listener so that OnPush\n    // ancestors are marked dirty when an event occurs.\n    listenerFn = wrapListener(tNode, lView, context, listenerFn);\n  }\n  // subscribe to directive outputs\n  const outputs = tNode.outputs;\n  let props;\n  if (processOutputs && outputs !== null && (props = outputs[eventName])) {\n    const propsLength = props.length;\n    if (propsLength) {\n      for (let i = 0; i < propsLength; i += 2) {\n        const index = props[i];\n        ngDevMode && assertIndexInRange(lView, index);\n        const minifiedName = props[i + 1];\n        const directiveInstance = lView[index];\n        const output = directiveInstance[minifiedName];\n        if (ngDevMode && !isOutputSubscribable(output)) {\n          throw new Error(`@Output ${minifiedName} not initialized in '${directiveInstance.constructor.name}'.`);\n        }\n        const subscription = output.subscribe(listenerFn);\n        const idx = lCleanup.length;\n        lCleanup.push(listenerFn, subscription);\n        tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));\n      }\n    }\n  }\n}\nfunction executeListenerWithErrorHandling(lView, context, listenerFn, e) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);\n    // Only explicitly returning false from a listener should preventDefault\n    return listenerFn(e) !== false;\n  } catch (error) {\n    handleError(lView, error);\n    return false;\n  } finally {\n    profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n/**\n * Wraps an event listener with a function that marks ancestors dirty and prevents default behavior,\n * if applicable.\n *\n * @param tNode The TNode associated with this listener\n * @param lView The LView that contains this listener\n * @param listenerFn The listener function to call\n * @param wrapWithPreventDefault Whether or not to prevent default behavior\n * (the procedural renderer does this already, so in those cases, we should skip)\n */\nfunction wrapListener(tNode, lView, context, listenerFn) {\n  // Note: we are performing most of the work in the listener function itself\n  // to optimize listener registration.\n  return function wrapListenerIn_markDirtyAndPreventDefault(e) {\n    // Ivy uses `Function` as a special token that allows us to unwrap the function\n    // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`.\n    if (e === Function) {\n      return listenerFn;\n    }\n    // In order to be backwards compatible with View Engine, events on component host nodes\n    // must also mark the component view itself dirty (i.e. the view that it owns).\n    const startView = tNode.componentOffset > -1 ? getComponentLViewByIndex(tNode.index, lView) : lView;\n    markViewDirty(startView, 5 /* NotificationSource.Listener */);\n    let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);\n    // A just-invoked listener function might have coalesced listeners so we need to check for\n    // their presence and invoke as needed.\n    let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;\n    while (nextListenerFn) {\n      // We should prevent default if any of the listeners explicitly return false\n      result = executeListenerWithErrorHandling(lView, context, nextListenerFn, e) && result;\n      nextListenerFn = nextListenerFn.__ngNextListenerFn__;\n    }\n    return result;\n  };\n}\n/**\n * Whether the given value represents a subscribable output.\n *\n * For example, an `EventEmitter, a `Subject`, an `Observable` or an\n * `OutputEmitter`.\n */\nfunction isOutputSubscribable(value) {\n  return value != null && typeof value.subscribe === 'function';\n}\n\n/**\n * Retrieves a context at the level specified and saves it as the global, contextViewData.\n * Will get the next level up if level is not specified.\n *\n * This is used to save contexts of parent views so they can be bound in embedded views, or\n * in conjunction with reference() to bind a ref from a parent view.\n *\n * @param level The relative level of the view from which to grab context compared to contextVewData\n * @returns context\n *\n * @codeGenApi\n */\nfunction ɵɵnextContext(level = 1) {\n  return nextContextImpl(level);\n}\n\n/**\n * Checks a given node against matching projection slots and returns the\n * determined slot index. Returns \"null\" if no slot matched the given node.\n *\n * This function takes into account the parsed ngProjectAs selector from the\n * node's attributes. If present, it will check whether the ngProjectAs selector\n * matches any of the projection slot selectors.\n */\nfunction matchingProjectionSlotIndex(tNode, projectionSlots) {\n  let wildcardNgContentIndex = null;\n  const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);\n  for (let i = 0; i < projectionSlots.length; i++) {\n    const slotValue = projectionSlots[i];\n    // The last wildcard projection slot should match all nodes which aren't matching\n    // any selector. This is necessary to be backwards compatible with view engine.\n    if (slotValue === '*') {\n      wildcardNgContentIndex = i;\n      continue;\n    }\n    // If we ran into an `ngProjectAs` attribute, we should match its parsed selector\n    // to the list of selectors, otherwise we fall back to matching against the node.\n    if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(tNode, slotValue, /* isProjectionMode */true) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {\n      return i; // first matching selector \"captures\" a given node\n    }\n  }\n  return wildcardNgContentIndex;\n}\n/**\n * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.\n * It takes all the selectors from the entire component's template and decides where\n * each projected node belongs (it re-distributes nodes among \"buckets\" where each \"bucket\" is\n * backed by a selector).\n *\n * This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,\n * un-parsed form.\n *\n * The parsed form is needed for efficient matching of a node against a given CSS selector.\n * The un-parsed, textual form is needed for support of the ngProjectAs attribute.\n *\n * Having a CSS selector in 2 different formats is not ideal, but alternatives have even more\n * drawbacks:\n * - having only a textual form would require runtime parsing of CSS selectors;\n * - we can't have only a parsed as we can't re-construct textual form from it (as entered by a\n * template author).\n *\n * @param projectionSlots? A collection of projection slots. A projection slot can be based\n *        on a parsed CSS selectors or set to the wildcard selector (\"*\") in order to match\n *        all nodes which do not match any selector. If not specified, a single wildcard\n *        selector projection slot will be defined.\n *\n * @codeGenApi\n */\nfunction ɵɵprojectionDef(projectionSlots) {\n  const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];\n  if (!componentNode.projection) {\n    // If no explicit projection slots are defined, fall back to a single\n    // projection slot with the wildcard selector.\n    const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;\n    const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);\n    const tails = projectionHeads.slice();\n    let componentChild = componentNode.child;\n    while (componentChild !== null) {\n      // Do not project let declarations so they don't occupy a slot.\n      if (componentChild.type !== 128 /* TNodeType.LetDeclaration */) {\n        const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;\n        if (slotIndex !== null) {\n          if (tails[slotIndex]) {\n            tails[slotIndex].projectionNext = componentChild;\n          } else {\n            projectionHeads[slotIndex] = componentChild;\n          }\n          tails[slotIndex] = componentChild;\n        }\n      }\n      componentChild = componentChild.next;\n    }\n  }\n}\n/**\n * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call\n * to the projectionDef instruction.\n *\n * @param nodeIndex Index of the projection node.\n * @param selectorIndex Index of the slot selector.\n *  - 0 when the selector is `*` (or unspecified as this is the default value),\n *  - 1 based index of the selector from the {@link projectionDef}\n * @param attrs Static attributes set on the `ng-content` node.\n * @param fallbackTemplateFn Template function with fallback content.\n *   Will be rendered if the slot is empty at runtime.\n * @param fallbackDecls Number of declarations in the fallback template.\n * @param fallbackVars Number of variables in the fallback template.\n *\n * @codeGenApi\n */\nfunction ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {\n  const lView = getLView();\n  const tView = getTView();\n  const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;\n  // Fallback content needs to be declared no matter whether the slot is empty since different\n  // instances of the component may or may not insert it. Also it needs to be declare *before*\n  // the projection node in order to work correctly with hydration.\n  if (fallbackIndex !== null) {\n    declareTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);\n  }\n  const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16 /* TNodeType.Projection */, null, attrs || null);\n  // We can't use viewData[HOST_NODE] because projection nodes can be nested in embedded views.\n  if (tProjectionNode.projection === null) {\n    tProjectionNode.projection = selectorIndex;\n  }\n  // `<ng-content>` has no content. Even if there's fallback\n  // content, the fallback is shown next to it.\n  setCurrentTNodeAsNotParent();\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();\n  const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];\n  const isEmpty = componentHostNode.projection[tProjectionNode.projection] === null;\n  if (isEmpty && fallbackIndex !== null) {\n    insertFallbackContent(lView, tView, fallbackIndex);\n  } else if (isNodeCreationMode && (tProjectionNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {\n    // re-distribution of projectable nodes is stored on a component's view level\n    applyProjection(tView, lView, tProjectionNode);\n  }\n}\n/** Inserts the fallback content of a projection slot. Assumes there's no projected content. */\nfunction insertFallbackContent(lView, tView, fallbackIndex) {\n  const adjustedIndex = HEADER_OFFSET + fallbackIndex;\n  const fallbackTNode = tView.data[adjustedIndex];\n  const fallbackLContainer = lView[adjustedIndex];\n  ngDevMode && assertTNode(fallbackTNode);\n  ngDevMode && assertLContainer(fallbackLContainer);\n  const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);\n  const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, undefined, {\n    dehydratedView\n  });\n  addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));\n}\n\n/**\n *\n * Update an interpolated property on an element with a lone bound value\n *\n * Used when the value passed to a property has 1 interpolated value in it, an no additional text\n * surrounds that interpolated value:\n *\n * ```html\n * <div title=\"{{v0}}\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate('title', v0);\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate(propName, v0, sanitizer) {\n  ɵɵpropertyInterpolate1(propName, '', v0, '', sanitizer);\n  return ɵɵpropertyInterpolate;\n}\n/**\n *\n * Update an interpolated property on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate1('title', 'prefix', v0, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);\n  }\n  return ɵɵpropertyInterpolate1;\n}\n/**\n *\n * Update an interpolated property on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);\n  }\n  return ɵɵpropertyInterpolate2;\n}\n/**\n *\n * Update an interpolated property on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate3(\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);\n  }\n  return ɵɵpropertyInterpolate3;\n}\n/**\n *\n * Update an interpolated property on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate4(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);\n  }\n  return ɵɵpropertyInterpolate4;\n}\n/**\n *\n * Update an interpolated property on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate5(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);\n  }\n  return ɵɵpropertyInterpolate5;\n}\n/**\n *\n * Update an interpolated property on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate6(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);\n  }\n  return ɵɵpropertyInterpolate6;\n}\n/**\n *\n * Update an interpolated property on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate7(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);\n  }\n  return ɵɵpropertyInterpolate7;\n}\n/**\n *\n * Update an interpolated property on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate8(\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);\n  }\n  return ɵɵpropertyInterpolate8;\n}\n/**\n * Update an interpolated property on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolateV(\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update.\n * @param values The collection of values and the strings in between those values, beginning with a\n * string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolateV(propName, values, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    if (ngDevMode) {\n      const interpolationInBetween = [values[0]]; // prefix\n      for (let i = 2; i < values.length; i += 2) {\n        interpolationInBetween.push(values[i]);\n      }\n      storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);\n    }\n  }\n  return ɵɵpropertyInterpolateV;\n}\n\n/**\n * Registers a QueryList, associated with a content query, for later refresh (part of a view\n * refresh).\n *\n * @param directiveIndex Current directive index\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n * @returns QueryList<T>\n *\n * @codeGenApi\n */\nfunction ɵɵcontentQuery(directiveIndex, predicate, flags, read) {\n  createContentQuery(directiveIndex, predicate, flags, read);\n}\n/**\n * Creates a new view query by initializing internal data structures.\n *\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵviewQuery(predicate, flags, read) {\n  createViewQuery(predicate, flags, read);\n}\n/**\n * Refreshes a query by combining matches from all active views and removing matches from deleted\n * views.\n *\n * @returns `true` if a query got dirty during change detection or if this is a static query\n * resolving in creation mode, `false` otherwise.\n *\n * @codeGenApi\n */\nfunction ɵɵqueryRefresh(queryList) {\n  const lView = getLView();\n  const tView = getTView();\n  const queryIndex = getCurrentQueryIndex();\n  setCurrentQueryIndex(queryIndex + 1);\n  const tQuery = getTQuery(tView, queryIndex);\n  if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */)) {\n    if (tQuery.matches === null) {\n      queryList.reset([]);\n    } else {\n      const result = getQueryResults(lView, queryIndex);\n      queryList.reset(result, unwrapElementRef);\n      queryList.notifyOnChanges();\n    }\n    return true;\n  }\n  return false;\n}\n/**\n * Loads a QueryList corresponding to the current view or content query.\n *\n * @codeGenApi\n */\nfunction ɵɵloadQuery() {\n  return loadQueryInternal(getLView(), getCurrentQueryIndex());\n}\n\n/**\n * Creates a new content query and binds it to a signal created by an authoring function.\n *\n * @param directiveIndex Current directive index\n * @param target The target signal to which the query should be bound\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵcontentQuerySignal(directiveIndex, target, predicate, flags, read) {\n  bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));\n}\n/**\n * Creates a new view query by initializing internal data structures and binding a new query to the\n * target signal.\n *\n * @param target The target signal to assign the query results to.\n * @param predicate The type or label that should match a given query\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵviewQuerySignal(target, predicate, flags, read) {\n  bindQueryToSignal(target, createViewQuery(predicate, flags, read));\n}\n/**\n * Advances the current query index by a specified offset.\n *\n * Adjusting the current query index is necessary in cases where a given directive has a mix of\n * zone-based and signal-based queries. The signal-based queries don't require tracking of the\n * current index (those are refreshed on demand and not during change detection) so this instruction\n * is only necessary for backward-compatibility.\n *\n * @param index offset to apply to the current query index (defaults to 1)\n *\n * @codeGenApi\n */\nfunction ɵɵqueryAdvance(indexOffset = 1) {\n  setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);\n}\n\n/** Store a value in the `data` at a given `index`. */\nfunction store(tView, lView, index, value) {\n  // We don't store any static data for local variables, so the first time\n  // we see the template, we should store as null to avoid a sparse array\n  if (index >= tView.data.length) {\n    tView.data[index] = null;\n    tView.blueprint[index] = null;\n  }\n  lView[index] = value;\n}\n/**\n * Retrieves a local reference from the current contextViewData.\n *\n * If the reference to retrieve is in a parent view, this instruction is used in conjunction\n * with a nextContext() call, which walks up the tree and updates the contextViewData instance.\n *\n * @param index The index of the local ref in contextViewData.\n *\n * @codeGenApi\n */\nfunction ɵɵreference(index) {\n  const contextLView = getContextLView();\n  return load(contextLView, HEADER_OFFSET + index);\n}\n\n/**\n *\n * Update an interpolated style on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div style=\"key: {{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate1('key: ', v0, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate2('key: ', v0, '; key1: ', v1, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key2: {{v1}}; key2: {{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate3(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate4(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate5(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}};\n *             key5: {{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate6(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *             key6: {{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate7(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    '; key6: ', v6, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *             key6: {{v6}}; key7: {{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate8(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    '; key6: ', v6, '; key7: ', v7, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n * Update an interpolated style on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  class=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *         key6: {{v6}}; key7: {{v7}}; key8: {{v8}}; key9: {{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolateV(\n *    ['key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *     '; key6: ', v6, '; key7: ', v7, '; key8: ', v8, '; key9: ', v9, 'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '; key2: ', value1, '; key2: ', value2, ..., value99, 'suffix']`)\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolateV(values) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  ɵɵstyleMap(interpolatedValue);\n}\n\n/**\n *\n * Update an interpolated style property on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate1(0, 'prefix', v0, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate1;\n}\n/**\n *\n * Update an interpolated style property on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate2(0, 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate2;\n}\n/**\n *\n * Update an interpolated style property on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate3(0, 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate3;\n}\n/**\n *\n * Update an interpolated style property on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate4(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate4;\n}\n/**\n *\n * Update an interpolated style property on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate5(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate5;\n}\n/**\n *\n * Update an interpolated style property on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate6(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate6;\n}\n/**\n *\n * Update an interpolated style property on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate7(\n *    0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate7;\n}\n/**\n *\n * Update an interpolated style property on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate8(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6,\n * '-', v7, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate8;\n}\n/**\n * Update an interpolated style property on an element with 9 or more bound values surrounded by\n * text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\">\n * </div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolateV(\n *  0, ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`..\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolateV(prop, values, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolateV;\n}\n\n/**\n * Create static text node\n *\n * @param index Index of the node in the data array\n * @param value Static string value to write.\n *\n * @codeGenApi\n */\nfunction ɵɵtext(index, value = '') {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'text nodes should be created before any bindings');\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1 /* TNodeType.Text */, value, null) : tView.data[adjustedIndex];\n  const textNative = _locateOrCreateTextNode(tView, lView, tNode, value, index);\n  lView[adjustedIndex] = textNative;\n  if (wasLastNodeCreated()) {\n    appendChild(tView, lView, textNative, tNode);\n  }\n  // Text nodes are self closing.\n  setCurrentTNode(tNode, false);\n}\nlet _locateOrCreateTextNode = (tView, lView, tNode, value, index) => {\n  lastNodeWasCreated(true);\n  return createTextNode(lView[RENDERER], value);\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of text nodes.\n */\nfunction locateOrCreateTextNodeImpl(tView, lView, tNode, value, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createTextNode(lView[RENDERER], value);\n  }\n  // Hydration mode, looking up an existing element in DOM.\n  const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);\n  ngDevMode && markRNodeAsClaimedByHydration(textNative);\n  return textNative;\n}\nfunction enableLocateOrCreateTextNodeImpl() {\n  _locateOrCreateTextNode = locateOrCreateTextNodeImpl;\n}\n\n/**\n *\n * Update text content with a lone bound value\n *\n * Used when a text node has 1 interpolated value in it, an no additional text\n * surrounds that interpolated value:\n *\n * ```html\n * <div>{{v0}}</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate(v0);\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate(v0) {\n  ɵɵtextInterpolate1('', v0, '');\n  return ɵɵtextInterpolate;\n}\n/**\n *\n * Update text content with single bound value surrounded by other text.\n *\n * Used when a text node has 1 interpolated value in it:\n *\n * ```html\n * <div>prefix{{v0}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate1('prefix', v0, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation1(lView, prefix, v0, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate1;\n}\n/**\n *\n * Update text content with 2 bound values surrounded by other text.\n *\n * Used when a text node has 2 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate2('prefix', v0, '-', v1, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate2;\n}\n/**\n *\n * Update text content with 3 bound values surrounded by other text.\n *\n * Used when a text node has 3 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate3(\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate3;\n}\n/**\n *\n * Update text content with 4 bound values surrounded by other text.\n *\n * Used when a text node has 4 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate4(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see ɵɵtextInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate4;\n}\n/**\n *\n * Update text content with 5 bound values surrounded by other text.\n *\n * Used when a text node has 5 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate5(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate5;\n}\n/**\n *\n * Update text content with 6 bound values surrounded by other text.\n *\n * Used when a text node has 6 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate6(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change. @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate6;\n}\n/**\n *\n * Update text content with 7 bound values surrounded by other text.\n *\n * Used when a text node has 7 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate7(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate7;\n}\n/**\n *\n * Update text content with 8 bound values surrounded by other text.\n *\n * Used when a text node has 8 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate8(\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate8;\n}\n/**\n * Update text content with 9 or more bound values other surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolateV(\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n *\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵtextInterpolateV(values) {\n  const lView = getLView();\n  const interpolated = interpolationV(lView, values);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolateV;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Update a two-way bound property on a selected element.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * @param propName Name of property.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `twoWayProperty('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayProperty(propName, value, sanitizer) {\n  // TODO(crisbeto): perf impact of re-evaluating this on each change detection?\n  if (isWritableSignal(value)) {\n    value = value();\n  }\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵtwoWayProperty;\n}\n/**\n * Function used inside two-way listeners to conditionally set the value of the bound expression.\n *\n * @param target Field on which to set the value.\n * @param value Value to be set to the field.\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayBindingSet(target, value) {\n  const canWrite = isWritableSignal(target);\n  canWrite && target.set(value);\n  return canWrite;\n}\n/**\n * Adds an event listener that updates a two-way binding to the current node.\n *\n * @param eventName Name of the event.\n * @param listenerFn The function to be called when event emits.\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayListener(eventName, listenerFn) {\n  const lView = getLView();\n  const tView = getTView();\n  const tNode = getCurrentTNode();\n  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);\n  return ɵɵtwoWayListener;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/** Object that indicates the value of a `@let` declaration that hasn't been initialized yet. */\nconst UNINITIALIZED_LET = {};\n/**\n * Declares an `@let` at a specific data slot. Returns itself to allow chaining.\n *\n * @param index Index at which to declare the `@let`.\n *\n * @codeGenApi\n */\nfunction ɵɵdeclareLet(index) {\n  const tView = getTView();\n  const lView = getLView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = getOrCreateTNode(tView, adjustedIndex, 128 /* TNodeType.LetDeclaration */, null, null);\n  setCurrentTNode(tNode, false);\n  store(tView, lView, adjustedIndex, UNINITIALIZED_LET);\n  return ɵɵdeclareLet;\n}\n/**\n * Instruction that stores the value of a `@let` declaration on the current view.\n * Returns the value to allow usage inside variable initializers.\n *\n * @codeGenApi\n */\nfunction ɵɵstoreLet(value) {\n  performanceMarkFeature('NgLet');\n  const tView = getTView();\n  const lView = getLView();\n  const index = getSelectedIndex();\n  store(tView, lView, index, value);\n  return value;\n}\n/**\n * Retrieves the value of a `@let` declaration defined in a parent view.\n *\n * @param index Index of the declaration within the view.\n *\n * @codeGenApi\n */\nfunction ɵɵreadContextLet(index) {\n  const contextLView = getContextLView();\n  const value = load(contextLView, HEADER_OFFSET + index);\n  if (value === UNINITIALIZED_LET) {\n    throw new RuntimeError(314 /* RuntimeErrorCode.UNINITIALIZED_LET_ACCESS */, ngDevMode && 'Attempting to access a @let declaration whose value is not available yet');\n  }\n  return value;\n}\n\n/*\n * This file re-exports all symbols contained in this directory.\n *\n * Why is this file not `index.ts`?\n *\n * There seems to be an inconsistent path resolution of an `index.ts` file\n * when only the parent directory is referenced. This could be due to the\n * node module resolution configuration differing from rollup and/or typescript.\n *\n * With commit\n * https://github.com/angular/angular/commit/d5e3f2c64bd13ce83e7c70788b7fc514ca4a9918\n * the `instructions.ts` file was moved to `instructions/instructions.ts` and an\n * `index.ts` file was used to re-export everything. Having had file names that were\n * importing from `instructions' directly (not the from the sub file or the `index.ts`\n * file) caused strange CI issues. `index.ts` had to be renamed to `all.ts` for this\n * to work.\n *\n * Jira Issue = FW-1184\n */\n\n/**\n * Resolves the providers which are defined in the DirectiveDef.\n *\n * When inserting the tokens and the factories in their respective arrays, we can assume that\n * this method is called first for the component (if any), and then for other directives on the same\n * node.\n * As a consequence,the providers are always processed in that order:\n * 1) The view providers of the component\n * 2) The providers of the component\n * 3) The providers of the other directives\n * This matches the structure of the injectables arrays of a view (for each node).\n * So the tokens and the factories can be pushed at the end of the arrays, except\n * in one case for multi providers.\n *\n * @param def the directive definition\n * @param providers: Array of `providers`.\n * @param viewProviders: Array of `viewProviders`.\n */\nfunction providersResolver(def, providers, viewProviders) {\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    const isComponent = isComponentDef(def);\n    // The list of view providers is processed first, and the flags are updated\n    resolveProvider(viewProviders, tView.data, tView.blueprint, isComponent, true);\n    // Then, the list of providers is processed, and the flags are updated\n    resolveProvider(providers, tView.data, tView.blueprint, isComponent, false);\n  }\n}\n/**\n * Resolves a provider and publishes it to the DI system.\n */\nfunction resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {\n  provider = resolveForwardRef(provider);\n  if (Array.isArray(provider)) {\n    // Recursively call `resolveProvider`\n    // Recursion is OK in this case because this code will not be in hot-path once we implement\n    // cloning of the initial state.\n    for (let i = 0; i < provider.length; i++) {\n      resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);\n    }\n  } else {\n    const tView = getTView();\n    const lView = getLView();\n    const tNode = getCurrentTNode();\n    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);\n    const providerFactory = providerToFactory(provider);\n    if (ngDevMode) {\n      const injector = new NodeInjector(tNode, lView);\n      runInInjectorProfilerContext(injector, token, () => {\n        emitProviderConfiguredEvent(provider, isViewProvider);\n      });\n    }\n    const beginIndex = tNode.providerIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n    const endIndex = tNode.directiveStart;\n    const cptViewProvidersCount = tNode.providerIndexes >> 20 /* TNodeProviderIndexes.CptViewProvidersCountShift */;\n    if (isTypeProvider(provider) || !provider.multi) {\n      // Single provider case: the factory is created and pushed immediately\n      const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);\n      const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);\n      if (existingFactoryIndex === -1) {\n        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n        registerDestroyHooksIfSupported(tView, provider, tInjectables.length);\n        tInjectables.push(token);\n        tNode.directiveStart++;\n        tNode.directiveEnd++;\n        if (isViewProvider) {\n          tNode.providerIndexes += 1048576 /* TNodeProviderIndexes.CptViewProvidersCountShifter */;\n        }\n        lInjectablesBlueprint.push(factory);\n        lView.push(factory);\n      } else {\n        lInjectablesBlueprint[existingFactoryIndex] = factory;\n        lView[existingFactoryIndex] = factory;\n      }\n    } else {\n      // Multi provider case:\n      // We create a multi factory which is going to aggregate all the values.\n      // Since the output of such a factory depends on content or view injection,\n      // we create two of them, which are linked together.\n      //\n      // The first one (for view providers) is always in the first block of the injectables array,\n      // and the second one (for providers) is always in the second block.\n      // This is important because view providers have higher priority. When a multi token\n      // is being looked up, the view providers should be found first.\n      // Note that it is not possible to have a multi factory in the third block (directive block).\n      //\n      // The algorithm to process multi providers is as follows:\n      // 1) If the multi provider comes from the `viewProviders` of the component:\n      //   a) If the special view providers factory doesn't exist, it is created and pushed.\n      //   b) Else, the multi provider is added to the existing multi factory.\n      // 2) If the multi provider comes from the `providers` of the component or of another\n      // directive:\n      //   a) If the multi factory doesn't exist, it is created and provider pushed into it.\n      //      It is also linked to the multi factory for view providers, if it exists.\n      //   b) Else, the multi provider is added to the existing multi factory.\n      const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);\n      const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);\n      const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];\n      const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];\n      if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {\n        // Cases 1.a and 2.a\n        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n        const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory);\n        if (!isViewProvider && doesViewProvidersFactoryExist) {\n          lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;\n        }\n        registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);\n        tInjectables.push(token);\n        tNode.directiveStart++;\n        tNode.directiveEnd++;\n        if (isViewProvider) {\n          tNode.providerIndexes += 1048576 /* TNodeProviderIndexes.CptViewProvidersCountShifter */;\n        }\n        lInjectablesBlueprint.push(factory);\n        lView.push(factory);\n      } else {\n        // Cases 1.b and 2.b\n        const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);\n        registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);\n      }\n      if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {\n        lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;\n      }\n    }\n  }\n}\n/**\n * Registers the `ngOnDestroy` hook of a provider, if the provider supports destroy hooks.\n * @param tView `TView` in which to register the hook.\n * @param provider Provider whose hook should be registered.\n * @param contextIndex Index under which to find the context for the hook when it's being invoked.\n * @param indexInFactory Only required for `multi` providers. Index of the provider in the multi\n * provider factory.\n */\nfunction registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {\n  const providerIsTypeProvider = isTypeProvider(provider);\n  const providerIsClassProvider = isClassProvider(provider);\n  if (providerIsTypeProvider || providerIsClassProvider) {\n    // Resolve forward references as `useClass` can hold a forward reference.\n    const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;\n    const prototype = classToken.prototype;\n    const ngOnDestroy = prototype.ngOnDestroy;\n    if (ngOnDestroy) {\n      const hooks = tView.destroyHooks || (tView.destroyHooks = []);\n      if (!providerIsTypeProvider && provider.multi) {\n        ngDevMode && assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');\n        const existingCallbacksIndex = hooks.indexOf(contextIndex);\n        if (existingCallbacksIndex === -1) {\n          hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);\n        } else {\n          hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);\n        }\n      } else {\n        hooks.push(contextIndex, ngOnDestroy);\n      }\n    }\n  }\n}\n/**\n * Add a factory in a multi factory.\n * @returns Index at which the factory was inserted.\n */\nfunction multiFactoryAdd(multiFactory, factory, isComponentProvider) {\n  if (isComponentProvider) {\n    multiFactory.componentProviders++;\n  }\n  return multiFactory.multi.push(factory) - 1;\n}\n/**\n * Returns the index of item in the array, but only in the begin to end range.\n */\nfunction indexOf(item, arr, begin, end) {\n  for (let i = begin; i < end; i++) {\n    if (arr[i] === item) return i;\n  }\n  return -1;\n}\n/**\n * Use this with `multi` `providers`.\n */\nfunction multiProvidersFactoryResolver(_, tData, lData, tNode) {\n  return multiResolve(this.multi, []);\n}\n/**\n * Use this with `multi` `viewProviders`.\n *\n * This factory knows how to concatenate itself with the existing `multi` `providers`.\n */\nfunction multiViewProvidersFactoryResolver(_, tData, lView, tNode) {\n  const factories = this.multi;\n  let result;\n  if (this.providerFactory) {\n    const componentCount = this.providerFactory.componentProviders;\n    const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);\n    // Copy the section of the array which contains `multi` `providers` from the component\n    result = multiProviders.slice(0, componentCount);\n    // Insert the `viewProvider` instances.\n    multiResolve(factories, result);\n    // Copy the section of the array which contains `multi` `providers` from other directives\n    for (let i = componentCount; i < multiProviders.length; i++) {\n      result.push(multiProviders[i]);\n    }\n  } else {\n    result = [];\n    // Insert the `viewProvider` instances.\n    multiResolve(factories, result);\n  }\n  return result;\n}\n/**\n * Maps an array of factories into an array of values.\n */\nfunction multiResolve(factories, result) {\n  for (let i = 0; i < factories.length; i++) {\n    const factory = factories[i];\n    result.push(factory());\n  }\n  return result;\n}\n/**\n * Creates a multi factory.\n */\nfunction multiFactory(factoryFn, index, isViewProvider, isComponent, f) {\n  const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);\n  factory.multi = [];\n  factory.index = index;\n  factory.componentProviders = 0;\n  multiFactoryAdd(factory, f, isComponent && !isViewProvider);\n  return factory;\n}\n\n/**\n * This feature resolves the providers of a directive (or component),\n * and publish them into the DI system, making it visible to others for injection.\n *\n * For example:\n * ```ts\n * class ComponentWithProviders {\n *   constructor(private greeter: GreeterDE) {}\n *\n *   static ɵcmp = defineComponent({\n *     type: ComponentWithProviders,\n *     selectors: [['component-with-providers']],\n *    factory: () => new ComponentWithProviders(directiveInject(GreeterDE as any)),\n *    decls: 1,\n *    vars: 1,\n *    template: function(fs: RenderFlags, ctx: ComponentWithProviders) {\n *      if (fs & RenderFlags.Create) {\n *        ɵɵtext(0);\n *      }\n *      if (fs & RenderFlags.Update) {\n *        ɵɵtextInterpolate(ctx.greeter.greet());\n *      }\n *    },\n *    features: [ɵɵProvidersFeature([GreeterDE])]\n *  });\n * }\n * ```\n *\n * @param definition\n *\n * @codeGenApi\n */\nfunction ɵɵProvidersFeature(providers, viewProviders = []) {\n  return definition => {\n    definition.providersResolver = (def, processProvidersFn) => {\n      return providersResolver(def,\n      //\n      processProvidersFn ? processProvidersFn(providers) : providers,\n      //\n      viewProviders);\n    };\n  };\n}\n\n/**\n * A feature that adds support for external runtime styles for a component.\n * An external runtime style is a URL to a CSS stylesheet that contains the styles\n * for a given component. For browsers, this URL will be used in an appended `link` element\n * when the component is rendered. This feature is typically used for Hot Module Replacement\n * (HMR) of component stylesheets by leveraging preexisting global stylesheet HMR available\n * in most development servers.\n *\n * @codeGenApi\n */\nfunction ɵɵExternalStylesFeature(styleUrls) {\n  return definition => {\n    if (styleUrls.length < 1) {\n      return;\n    }\n    definition.getExternalStyles = encapsulationId => {\n      // Add encapsulation ID search parameter `ngcomp` to support external style encapsulation as well as the encapsulation mode\n      // for usage tracking.\n      const urls = styleUrls.map(value => value + '?ngcomp' + (encapsulationId ? '=' + encodeURIComponent(encapsulationId) : '') + '&e=' + definition.encapsulation);\n      return urls;\n    };\n  };\n}\n\n/**\n * Generated next to NgModules to monkey-patch directive and pipe references onto a component's\n * definition, when generating a direct reference in the component file would otherwise create an\n * import cycle.\n *\n * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.\n *\n * @codeGenApi\n */\nfunction ɵɵsetComponentScope(type, directives, pipes) {\n  const def = type.ɵcmp;\n  def.directiveDefs = extractDefListOrFactory(directives, /* pipeDef */false);\n  def.pipeDefs = extractDefListOrFactory(pipes, /* pipeDef */true);\n}\n/**\n * Adds the module metadata that is necessary to compute the module's transitive scope to an\n * existing module definition.\n *\n * Scope metadata of modules is not used in production builds, so calls to this function can be\n * marked pure to tree-shake it from the bundle, allowing for all referenced declarations\n * to become eligible for tree-shaking as well.\n *\n * @codeGenApi\n */\nfunction ɵɵsetNgModuleScope(type, scope) {\n  return noSideEffects(() => {\n    const ngModuleDef = getNgModuleDef(type, true);\n    ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);\n    ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);\n    ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);\n    if (scope.bootstrap) {\n      // This only happens in local compilation mode.\n      ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);\n    }\n    depsTracker.registerNgModule(type, scope);\n  });\n}\nfunction convertToTypeArray(values) {\n  if (typeof values === 'function') {\n    return values;\n  }\n  const flattenValues = flatten(values);\n  if (flattenValues.some(isForwardRef)) {\n    return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);\n  } else {\n    return flattenValues.map(maybeUnwrapModuleWithProviders);\n  }\n}\nfunction maybeUnwrapModuleWithProviders(value) {\n  return isModuleWithProviders(value) ? value.ngModule : value;\n}\n\n/**\n * Bindings for pure functions are stored after regular bindings.\n *\n * |-------decls------|---------vars---------|                 |----- hostVars (dir1) ------|\n * ------------------------------------------------------------------------------------------\n * | nodes/refs/pipes | bindings | fn slots  | injector | dir1 | host bindings | host slots |\n * ------------------------------------------------------------------------------------------\n *                    ^                      ^\n *      TView.bindingStartIndex      TView.expandoStartIndex\n *\n * Pure function instructions are given an offset from the binding root. Adding the offset to the\n * binding root gives the first index where the bindings are stored. In component views, the binding\n * root is the bindingStartIndex. In host bindings, the binding root is the expandoStartIndex +\n * any directive instances + any hostVars in directives evaluated before it.\n *\n * See VIEW_DATA.md for more information about host binding resolution.\n */\n/**\n * If the value hasn't been saved, calls the pure function to store and return the\n * value. If it has been saved, returns the saved value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns a value\n * @param thisArg Optional calling context of pureFn\n * @returns value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction0(slotOffset, pureFn, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) : getBinding(lView, bindingIndex);\n}\n/**\n * If the value of the provided exp has changed, calls the pure function to return\n * an updated value. Or if the value has not changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns an updated value\n * @param exp Updated expression value\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {\n  return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {\n  return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n  return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n  return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) : pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param exp7\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param exp7\n * @param exp8\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);\n}\n/**\n * pureFunction instruction that can support any number of bindings.\n *\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn A pure function that takes binding values and builds an object or array\n * containing those values.\n * @param exps An array of binding values\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {\n  return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);\n}\n/**\n * Results of a pure function invocation are stored in LView in a dedicated slot that is initialized\n * to NO_CHANGE. In rare situations a pure pipe might throw an exception on the very first\n * invocation and not produce any valid results. In this case LView would keep holding the NO_CHANGE\n * value. The NO_CHANGE is not something that we can use in expressions / bindings thus we convert\n * it to `undefined`.\n */\nfunction getPureFunctionReturnValue(lView, returnValueIndex) {\n  ngDevMode && assertIndexInRange(lView, returnValueIndex);\n  const lastReturnValue = lView[returnValueIndex];\n  return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;\n}\n/**\n * If the value of the provided exp has changed, calls the pure function to return\n * an updated value. Or if the value has not changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns an updated value\n * @param exp Updated expression value\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n */\nfunction pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);\n}\n/**\n * pureFunction instruction that can support any number of bindings.\n *\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn A pure function that takes binding values and builds an object or array\n * containing those values.\n * @param exps An array of binding values\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {\n  let bindingIndex = bindingRoot + slotOffset;\n  let different = false;\n  for (let i = 0; i < exps.length; i++) {\n    bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);\n  }\n  return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);\n}\n\n/**\n * Create a pipe.\n *\n * @param index Pipe index where the pipe will be stored.\n * @param pipeName The name of the pipe\n * @returns T the instance of the pipe.\n *\n * @codeGenApi\n */\nfunction ɵɵpipe(index, pipeName) {\n  const tView = getTView();\n  let pipeDef;\n  const adjustedIndex = index + HEADER_OFFSET;\n  if (tView.firstCreatePass) {\n    // The `getPipeDef` throws if a pipe with a given name is not found\n    // (so we use non-null assertion below).\n    pipeDef = getPipeDef(pipeName, tView.pipeRegistry);\n    tView.data[adjustedIndex] = pipeDef;\n    if (pipeDef.onDestroy) {\n      (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);\n    }\n  } else {\n    pipeDef = tView.data[adjustedIndex];\n  }\n  const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));\n  let previousInjectorProfilerContext;\n  if (ngDevMode) {\n    previousInjectorProfilerContext = setInjectorProfilerContext({\n      injector: new NodeInjector(getCurrentTNode(), getLView()),\n      token: pipeDef.type\n    });\n  }\n  const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);\n  try {\n    // DI for pipes is supposed to behave like directives when placed on a component\n    // host node, which means that we have to disable access to `viewProviders`.\n    const previousIncludeViewProviders = setIncludeViewProviders(false);\n    const pipeInstance = pipeFactory();\n    setIncludeViewProviders(previousIncludeViewProviders);\n    store(tView, getLView(), adjustedIndex, pipeInstance);\n    return pipeInstance;\n  } finally {\n    // we have to restore the injector implementation in finally, just in case the creation of the\n    // pipe throws an error.\n    setInjectImplementation(previousInjectImplementation);\n    ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);\n  }\n}\n/**\n * Searches the pipe registry for a pipe with the given name. If one is found,\n * returns the pipe. Otherwise, an error is thrown because the pipe cannot be resolved.\n *\n * @param name Name of pipe to resolve\n * @param registry Full list of available pipes\n * @returns Matching PipeDef\n */\nfunction getPipeDef(name, registry) {\n  if (registry) {\n    if (ngDevMode) {\n      const pipes = registry.filter(pipe => pipe.name === name);\n      // TODO: Throw an error in the next major\n      if (pipes.length > 1) {\n        console.warn(formatRuntimeError(313 /* RuntimeErrorCode.MULTIPLE_MATCHING_PIPES */, getMultipleMatchingPipesMessage(name)));\n      }\n    }\n    for (let i = registry.length - 1; i >= 0; i--) {\n      const pipeDef = registry[i];\n      if (name === pipeDef.name) {\n        return pipeDef;\n      }\n    }\n  }\n  if (ngDevMode) {\n    throw new RuntimeError(-302 /* RuntimeErrorCode.PIPE_NOT_FOUND */, getPipeNotFoundErrorMessage(name));\n  }\n  return;\n}\n/**\n * Generates a helpful error message for the user when multiple pipes match the name.\n *\n * @param name Name of the pipe\n * @returns The error message\n */\nfunction getMultipleMatchingPipesMessage(name) {\n  const lView = getLView();\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  const hostIsStandalone = isHostComponentStandalone(lView);\n  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n  const verifyMessage = `check ${hostIsStandalone ? \"'@Component.imports' of this component\" : 'the imports of this module'}`;\n  const errorMessage = `Multiple pipes match the name \\`${name}\\`${componentInfoMessage}. ${verifyMessage}`;\n  return errorMessage;\n}\n/**\n * Generates a helpful error message for the user when a pipe is not found.\n *\n * @param name Name of the missing pipe\n * @returns The error message\n */\nfunction getPipeNotFoundErrorMessage(name) {\n  const lView = getLView();\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  const hostIsStandalone = isHostComponentStandalone(lView);\n  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n  const verifyMessage = `Verify that it is ${hostIsStandalone ? \"included in the '@Component.imports' of this component\" : 'declared or imported in this module'}`;\n  const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;\n  return errorMessage;\n}\n/**\n * Invokes a pipe with 1 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param offset the binding offset\n * @param v1 1st argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind1(index, offset, v1) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);\n}\n/**\n * Invokes a pipe with 2 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind2(index, slotOffset, v1, v2) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);\n}\n/**\n * Invokes a pipe with 3 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n * @param v3 4rd argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);\n}\n/**\n * Invokes a pipe with 4 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n * @param v3 3rd argument to {@link PipeTransform#transform}.\n * @param v4 4th argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);\n}\n/**\n * Invokes a pipe with variable number of arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param values Array of arguments to pass to {@link PipeTransform#transform} method.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBindV(index, slotOffset, values) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);\n}\nfunction isPure(lView, index) {\n  return lView[TVIEW].data[index].pure;\n}\n\n/**\n * Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the\n * `<ng-template>` element.\n *\n * @codeGenApi\n */\nfunction ɵɵtemplateRefExtractor(tNode, lView) {\n  return createTemplateRef(tNode, lView);\n}\nfunction ɵɵgetComponentDepsFactory(type, rawImports) {\n  return () => {\n    try {\n      return depsTracker.getComponentDependencies(type, rawImports).dependencies;\n    } catch (e) {\n      console.error(`Computing dependencies in local compilation mode for the component \"${type.name}\" failed with the exception:`, e);\n      throw e;\n    }\n  };\n}\n\n/**\n * Sets the debug info for an Angular class.\n *\n * This runtime is guarded by ngDevMode flag.\n */\nfunction ɵsetClassDebugInfo(type, debugInfo) {\n  const def = getComponentDef(type);\n  if (def !== null) {\n    def.debugInfo = debugInfo;\n  }\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Replaces the metadata of a component type and re-renders all live instances of the component.\n * @param type Class whose metadata will be replaced.\n * @param applyMetadata Callback that will apply a new set of metadata on the `type` when invoked.\n * @param environment Syntehtic namespace imports that need to be passed along to the callback.\n * @param locals Local symbols from the source location that have to be exposed to the callback.\n * @codeGenApi\n */\nfunction ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {\n  ngDevMode && assertComponentDef(type);\n  const oldDef = getComponentDef(type);\n  // The reason `applyMetadata` is a callback that is invoked (almost) immediately is because\n  // the compiler usually produces more code than just the component definition, e.g. there\n  // can be functions for embedded views, the variables for the constant pool and `setClassMetadata`\n  // calls. The callback allows us to keep them isolate from the rest of the app and to invoke\n  // them at the right time.\n  applyMetadata.apply(null, [type, namespaces, ...locals]);\n  // If a `tView` hasn't been created yet, it means that this component hasn't been instantianted\n  // before. In this case there's nothing left for us to do aside from patching it in.\n  if (oldDef.tView) {\n    const trackedViews = getTrackedLViews().values();\n    for (const root of trackedViews) {\n      // Note: we have the additional check, because `IsRoot` can also indicate\n      // a component created through something like `createComponent`.\n      if (root[FLAGS] & 512 /* LViewFlags.IsRoot */ && root[PARENT] === null) {\n        recreateMatchingLViews(oldDef, root);\n      }\n    }\n  }\n}\n/**\n * Finds all LViews matching a specific component definition and recreates them.\n * @param def Component definition to search for.\n * @param rootLView View from which to start the search.\n */\nfunction recreateMatchingLViews(def, rootLView) {\n  ngDevMode && assertDefined(def.tView, 'Expected a component definition that has been instantiated at least once');\n  const tView = rootLView[TVIEW];\n  // Use `tView` to match the LView since `instanceof` can\n  // produce false positives when using inheritance.\n  if (tView === def.tView) {\n    ngDevMode && assertComponentDef(def.type);\n    recreateLView(getComponentDef(def.type), rootLView);\n    return;\n  }\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const current = rootLView[i];\n    if (isLContainer(current)) {\n      for (let i = CONTAINER_HEADER_OFFSET; i < current.length; i++) {\n        recreateMatchingLViews(def, current[i]);\n      }\n    } else if (isLView(current)) {\n      recreateMatchingLViews(def, current);\n    }\n  }\n}\n/**\n * Removes any cached renderers from the factory for the provided type.\n * This is currently used by the HMR logic to ensure Renderers are kept\n * synchronized with any definition metadata updates.\n * @param factory A RendererFactory2 instance.\n * @param def A ComponentDef instance.\n */\nfunction clearRendererCache(factory, def) {\n  // Cast to read a private field.\n  // NOTE: This must be kept synchronized with the renderer factory implementation in platform-browser.\n  factory.rendererByCompId?.delete(def.id);\n}\n/**\n * Recreates an LView in-place from a new component definition.\n * @param def Definition from which to recreate the view.\n * @param lView View to be recreated.\n */\nfunction recreateLView(def, lView) {\n  const instance = lView[CONTEXT];\n  const host = lView[HOST];\n  // In theory the parent can also be an LContainer, but it appears like that's\n  // only the case for embedded views which we won't be replacing here.\n  const parentLView = lView[PARENT];\n  ngDevMode && assertLView(parentLView);\n  const tNode = lView[T_HOST];\n  ngDevMode && assertTNodeType(tNode, 2 /* TNodeType.Element */);\n  // Recreate the TView since the template might've changed.\n  const newTView = getOrCreateComponentTView(def);\n  // Always force the creation of a new renderer to ensure state captured during construction\n  // stays consistent with the new component definition by clearing any old cached factories.\n  const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n  clearRendererCache(rendererFactory, def);\n  // Create a new LView from the new TView, but reusing the existing TNode and DOM node.\n  const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(def), host, tNode, null, rendererFactory.createRenderer(host, def), null, null, null);\n  // Detach the LView from its current place in the tree so we don't\n  // start traversing any siblings and modifying their structure.\n  replaceLViewInTree(parentLView, lView, newLView, tNode.index);\n  // Destroy the detached LView.\n  destroyLView(lView[TVIEW], lView);\n  // Remove the nodes associated with the destroyed LView. This removes the\n  // descendants, but not the host which we want to stay in place.\n  removeViewFromDOM(lView[TVIEW], lView);\n  // Reset the content projection state of the TNode before the first render.\n  // Note that this has to happen after the LView has been destroyed or we\n  // risk some projected nodes not being removed correctly.\n  resetProjectionState(tNode);\n  // Creation pass for the new view.\n  renderView(newTView, newLView, instance);\n  // Update pass for the new view.\n  refreshView(newTView, newLView, newTView.template, instance);\n}\n/**\n * Replaces one LView in the tree with another one.\n * @param parentLView Parent of the LView being replaced.\n * @param oldLView LView being replaced.\n * @param newLView Replacement LView to be inserted.\n * @param index Index at which the LView should be inserted.\n */\nfunction replaceLViewInTree(parentLView, oldLView, newLView, index) {\n  // Update the sibling whose `NEXT` pointer refers to the old view.\n  for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {\n    const current = parentLView[i];\n    if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {\n      current[NEXT] = newLView;\n      break;\n    }\n  }\n  // Set the new view as the head, if the old view was first.\n  if (parentLView[CHILD_HEAD] === oldLView) {\n    parentLView[CHILD_HEAD] = newLView;\n  }\n  // Set the new view as the tail, if the old view was last.\n  if (parentLView[CHILD_TAIL] === oldLView) {\n    parentLView[CHILD_TAIL] = newLView;\n  }\n  // Update the `NEXT` pointer to the same as the old view.\n  newLView[NEXT] = oldLView[NEXT];\n  // Clear out the `NEXT` of the old view.\n  oldLView[NEXT] = null;\n  // Insert the new LView at the correct index.\n  parentLView[index] = newLView;\n}\n/**\n * Child nodes mutate the `projection` state of their parent node as they're being projected.\n * This function resets the `project` back to its initial state.\n * @param tNode\n */\nfunction resetProjectionState(tNode) {\n  // The `projection` is mutated by child nodes as they're being projected. We need to\n  // reset it to the initial state so projection works after the template is swapped out.\n  if (tNode.projection !== null) {\n    for (const current of tNode.projection) {\n      if (isTNodeShape(current)) {\n        // Reset `projectionNext` since it can affect the traversal order during projection.\n        current.projectionNext = null;\n        current.flags &= ~2 /* TNodeFlags.isProjected */;\n      }\n    }\n    tNode.projection = null;\n  }\n}\n\n/**\n * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.\n *\n * This should be kept up to date with the public exports of @angular/core.\n */\nconst angularCoreEnv = (() => ({\n  'ɵɵattribute': ɵɵattribute,\n  'ɵɵattributeInterpolate1': ɵɵattributeInterpolate1,\n  'ɵɵattributeInterpolate2': ɵɵattributeInterpolate2,\n  'ɵɵattributeInterpolate3': ɵɵattributeInterpolate3,\n  'ɵɵattributeInterpolate4': ɵɵattributeInterpolate4,\n  'ɵɵattributeInterpolate5': ɵɵattributeInterpolate5,\n  'ɵɵattributeInterpolate6': ɵɵattributeInterpolate6,\n  'ɵɵattributeInterpolate7': ɵɵattributeInterpolate7,\n  'ɵɵattributeInterpolate8': ɵɵattributeInterpolate8,\n  'ɵɵattributeInterpolateV': ɵɵattributeInterpolateV,\n  'ɵɵdefineComponent': ɵɵdefineComponent,\n  'ɵɵdefineDirective': ɵɵdefineDirective,\n  'ɵɵdefineInjectable': ɵɵdefineInjectable,\n  'ɵɵdefineInjector': ɵɵdefineInjector,\n  'ɵɵdefineNgModule': ɵɵdefineNgModule,\n  'ɵɵdefinePipe': ɵɵdefinePipe,\n  'ɵɵdirectiveInject': ɵɵdirectiveInject,\n  'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,\n  'ɵɵinject': ɵɵinject,\n  'ɵɵinjectAttribute': ɵɵinjectAttribute,\n  'ɵɵinvalidFactory': ɵɵinvalidFactory,\n  'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,\n  'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,\n  'ɵɵresetView': ɵɵresetView,\n  'ɵɵHostDirectivesFeature': ɵɵHostDirectivesFeature,\n  'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,\n  'ɵɵProvidersFeature': ɵɵProvidersFeature,\n  'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,\n  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,\n  'ɵɵInputTransformsFeature': ɵɵInputTransformsFeature,\n  'ɵɵExternalStylesFeature': ɵɵExternalStylesFeature,\n  'ɵɵnextContext': ɵɵnextContext,\n  'ɵɵnamespaceHTML': ɵɵnamespaceHTML,\n  'ɵɵnamespaceMathML': ɵɵnamespaceMathML,\n  'ɵɵnamespaceSVG': ɵɵnamespaceSVG,\n  'ɵɵenableBindings': ɵɵenableBindings,\n  'ɵɵdisableBindings': ɵɵdisableBindings,\n  'ɵɵelementStart': ɵɵelementStart,\n  'ɵɵelementEnd': ɵɵelementEnd,\n  'ɵɵelement': ɵɵelement,\n  'ɵɵelementContainerStart': ɵɵelementContainerStart,\n  'ɵɵelementContainerEnd': ɵɵelementContainerEnd,\n  'ɵɵelementContainer': ɵɵelementContainer,\n  'ɵɵpureFunction0': ɵɵpureFunction0,\n  'ɵɵpureFunction1': ɵɵpureFunction1,\n  'ɵɵpureFunction2': ɵɵpureFunction2,\n  'ɵɵpureFunction3': ɵɵpureFunction3,\n  'ɵɵpureFunction4': ɵɵpureFunction4,\n  'ɵɵpureFunction5': ɵɵpureFunction5,\n  'ɵɵpureFunction6': ɵɵpureFunction6,\n  'ɵɵpureFunction7': ɵɵpureFunction7,\n  'ɵɵpureFunction8': ɵɵpureFunction8,\n  'ɵɵpureFunctionV': ɵɵpureFunctionV,\n  'ɵɵgetCurrentView': ɵɵgetCurrentView,\n  'ɵɵrestoreView': ɵɵrestoreView,\n  'ɵɵlistener': ɵɵlistener,\n  'ɵɵprojection': ɵɵprojection,\n  'ɵɵsyntheticHostProperty': ɵɵsyntheticHostProperty,\n  'ɵɵsyntheticHostListener': ɵɵsyntheticHostListener,\n  'ɵɵpipeBind1': ɵɵpipeBind1,\n  'ɵɵpipeBind2': ɵɵpipeBind2,\n  'ɵɵpipeBind3': ɵɵpipeBind3,\n  'ɵɵpipeBind4': ɵɵpipeBind4,\n  'ɵɵpipeBindV': ɵɵpipeBindV,\n  'ɵɵprojectionDef': ɵɵprojectionDef,\n  'ɵɵhostProperty': ɵɵhostProperty,\n  'ɵɵproperty': ɵɵproperty,\n  'ɵɵpropertyInterpolate': ɵɵpropertyInterpolate,\n  'ɵɵpropertyInterpolate1': ɵɵpropertyInterpolate1,\n  'ɵɵpropertyInterpolate2': ɵɵpropertyInterpolate2,\n  'ɵɵpropertyInterpolate3': ɵɵpropertyInterpolate3,\n  'ɵɵpropertyInterpolate4': ɵɵpropertyInterpolate4,\n  'ɵɵpropertyInterpolate5': ɵɵpropertyInterpolate5,\n  'ɵɵpropertyInterpolate6': ɵɵpropertyInterpolate6,\n  'ɵɵpropertyInterpolate7': ɵɵpropertyInterpolate7,\n  'ɵɵpropertyInterpolate8': ɵɵpropertyInterpolate8,\n  'ɵɵpropertyInterpolateV': ɵɵpropertyInterpolateV,\n  'ɵɵpipe': ɵɵpipe,\n  'ɵɵqueryRefresh': ɵɵqueryRefresh,\n  'ɵɵqueryAdvance': ɵɵqueryAdvance,\n  'ɵɵviewQuery': ɵɵviewQuery,\n  'ɵɵviewQuerySignal': ɵɵviewQuerySignal,\n  'ɵɵloadQuery': ɵɵloadQuery,\n  'ɵɵcontentQuery': ɵɵcontentQuery,\n  'ɵɵcontentQuerySignal': ɵɵcontentQuerySignal,\n  'ɵɵreference': ɵɵreference,\n  'ɵɵclassMap': ɵɵclassMap,\n  'ɵɵclassMapInterpolate1': ɵɵclassMapInterpolate1,\n  'ɵɵclassMapInterpolate2': ɵɵclassMapInterpolate2,\n  'ɵɵclassMapInterpolate3': ɵɵclassMapInterpolate3,\n  'ɵɵclassMapInterpolate4': ɵɵclassMapInterpolate4,\n  'ɵɵclassMapInterpolate5': ɵɵclassMapInterpolate5,\n  'ɵɵclassMapInterpolate6': ɵɵclassMapInterpolate6,\n  'ɵɵclassMapInterpolate7': ɵɵclassMapInterpolate7,\n  'ɵɵclassMapInterpolate8': ɵɵclassMapInterpolate8,\n  'ɵɵclassMapInterpolateV': ɵɵclassMapInterpolateV,\n  'ɵɵstyleMap': ɵɵstyleMap,\n  'ɵɵstyleMapInterpolate1': ɵɵstyleMapInterpolate1,\n  'ɵɵstyleMapInterpolate2': ɵɵstyleMapInterpolate2,\n  'ɵɵstyleMapInterpolate3': ɵɵstyleMapInterpolate3,\n  'ɵɵstyleMapInterpolate4': ɵɵstyleMapInterpolate4,\n  'ɵɵstyleMapInterpolate5': ɵɵstyleMapInterpolate5,\n  'ɵɵstyleMapInterpolate6': ɵɵstyleMapInterpolate6,\n  'ɵɵstyleMapInterpolate7': ɵɵstyleMapInterpolate7,\n  'ɵɵstyleMapInterpolate8': ɵɵstyleMapInterpolate8,\n  'ɵɵstyleMapInterpolateV': ɵɵstyleMapInterpolateV,\n  'ɵɵstyleProp': ɵɵstyleProp,\n  'ɵɵstylePropInterpolate1': ɵɵstylePropInterpolate1,\n  'ɵɵstylePropInterpolate2': ɵɵstylePropInterpolate2,\n  'ɵɵstylePropInterpolate3': ɵɵstylePropInterpolate3,\n  'ɵɵstylePropInterpolate4': ɵɵstylePropInterpolate4,\n  'ɵɵstylePropInterpolate5': ɵɵstylePropInterpolate5,\n  'ɵɵstylePropInterpolate6': ɵɵstylePropInterpolate6,\n  'ɵɵstylePropInterpolate7': ɵɵstylePropInterpolate7,\n  'ɵɵstylePropInterpolate8': ɵɵstylePropInterpolate8,\n  'ɵɵstylePropInterpolateV': ɵɵstylePropInterpolateV,\n  'ɵɵclassProp': ɵɵclassProp,\n  'ɵɵadvance': ɵɵadvance,\n  'ɵɵtemplate': ɵɵtemplate,\n  'ɵɵconditional': ɵɵconditional,\n  'ɵɵdefer': ɵɵdefer,\n  'ɵɵdeferWhen': ɵɵdeferWhen,\n  'ɵɵdeferOnIdle': ɵɵdeferOnIdle,\n  'ɵɵdeferOnImmediate': ɵɵdeferOnImmediate,\n  'ɵɵdeferOnTimer': ɵɵdeferOnTimer,\n  'ɵɵdeferOnHover': ɵɵdeferOnHover,\n  'ɵɵdeferOnInteraction': ɵɵdeferOnInteraction,\n  'ɵɵdeferOnViewport': ɵɵdeferOnViewport,\n  'ɵɵdeferPrefetchWhen': ɵɵdeferPrefetchWhen,\n  'ɵɵdeferPrefetchOnIdle': ɵɵdeferPrefetchOnIdle,\n  'ɵɵdeferPrefetchOnImmediate': ɵɵdeferPrefetchOnImmediate,\n  'ɵɵdeferPrefetchOnTimer': ɵɵdeferPrefetchOnTimer,\n  'ɵɵdeferPrefetchOnHover': ɵɵdeferPrefetchOnHover,\n  'ɵɵdeferPrefetchOnInteraction': ɵɵdeferPrefetchOnInteraction,\n  'ɵɵdeferPrefetchOnViewport': ɵɵdeferPrefetchOnViewport,\n  'ɵɵdeferHydrateWhen': ɵɵdeferHydrateWhen,\n  'ɵɵdeferHydrateNever': ɵɵdeferHydrateNever,\n  'ɵɵdeferHydrateOnIdle': ɵɵdeferHydrateOnIdle,\n  'ɵɵdeferHydrateOnImmediate': ɵɵdeferHydrateOnImmediate,\n  'ɵɵdeferHydrateOnTimer': ɵɵdeferHydrateOnTimer,\n  'ɵɵdeferHydrateOnHover': ɵɵdeferHydrateOnHover,\n  'ɵɵdeferHydrateOnInteraction': ɵɵdeferHydrateOnInteraction,\n  'ɵɵdeferHydrateOnViewport': ɵɵdeferHydrateOnViewport,\n  'ɵɵdeferEnableTimerScheduling': ɵɵdeferEnableTimerScheduling,\n  'ɵɵrepeater': ɵɵrepeater,\n  'ɵɵrepeaterCreate': ɵɵrepeaterCreate,\n  'ɵɵrepeaterTrackByIndex': ɵɵrepeaterTrackByIndex,\n  'ɵɵrepeaterTrackByIdentity': ɵɵrepeaterTrackByIdentity,\n  'ɵɵcomponentInstance': ɵɵcomponentInstance,\n  'ɵɵtext': ɵɵtext,\n  'ɵɵtextInterpolate': ɵɵtextInterpolate,\n  'ɵɵtextInterpolate1': ɵɵtextInterpolate1,\n  'ɵɵtextInterpolate2': ɵɵtextInterpolate2,\n  'ɵɵtextInterpolate3': ɵɵtextInterpolate3,\n  'ɵɵtextInterpolate4': ɵɵtextInterpolate4,\n  'ɵɵtextInterpolate5': ɵɵtextInterpolate5,\n  'ɵɵtextInterpolate6': ɵɵtextInterpolate6,\n  'ɵɵtextInterpolate7': ɵɵtextInterpolate7,\n  'ɵɵtextInterpolate8': ɵɵtextInterpolate8,\n  'ɵɵtextInterpolateV': ɵɵtextInterpolateV,\n  'ɵɵi18n': ɵɵi18n,\n  'ɵɵi18nAttributes': ɵɵi18nAttributes,\n  'ɵɵi18nExp': ɵɵi18nExp,\n  'ɵɵi18nStart': ɵɵi18nStart,\n  'ɵɵi18nEnd': ɵɵi18nEnd,\n  'ɵɵi18nApply': ɵɵi18nApply,\n  'ɵɵi18nPostprocess': ɵɵi18nPostprocess,\n  'ɵɵresolveWindow': ɵɵresolveWindow,\n  'ɵɵresolveDocument': ɵɵresolveDocument,\n  'ɵɵresolveBody': ɵɵresolveBody,\n  'ɵɵsetComponentScope': ɵɵsetComponentScope,\n  'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,\n  'ɵɵregisterNgModuleType': registerNgModuleType,\n  'ɵɵgetComponentDepsFactory': ɵɵgetComponentDepsFactory,\n  'ɵsetClassDebugInfo': ɵsetClassDebugInfo,\n  'ɵɵdeclareLet': ɵɵdeclareLet,\n  'ɵɵstoreLet': ɵɵstoreLet,\n  'ɵɵreadContextLet': ɵɵreadContextLet,\n  'ɵɵsanitizeHtml': ɵɵsanitizeHtml,\n  'ɵɵsanitizeStyle': ɵɵsanitizeStyle,\n  'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,\n  'ɵɵsanitizeScript': ɵɵsanitizeScript,\n  'ɵɵsanitizeUrl': ɵɵsanitizeUrl,\n  'ɵɵsanitizeUrlOrResourceUrl': ɵɵsanitizeUrlOrResourceUrl,\n  'ɵɵtrustConstantHtml': ɵɵtrustConstantHtml,\n  'ɵɵtrustConstantResourceUrl': ɵɵtrustConstantResourceUrl,\n  'ɵɵvalidateIframeAttribute': ɵɵvalidateIframeAttribute,\n  'forwardRef': forwardRef,\n  'resolveForwardRef': resolveForwardRef,\n  'ɵɵtwoWayProperty': ɵɵtwoWayProperty,\n  'ɵɵtwoWayBindingSet': ɵɵtwoWayBindingSet,\n  'ɵɵtwoWayListener': ɵɵtwoWayListener,\n  'ɵɵreplaceMetadata': ɵɵreplaceMetadata\n}))();\nlet jitOptions = null;\nfunction setJitOptions(options) {\n  if (jitOptions !== null) {\n    if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {\n      ngDevMode && console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');\n      return;\n    }\n    if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {\n      ngDevMode && console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');\n      return;\n    }\n  }\n  jitOptions = options;\n}\nfunction getJitOptions() {\n  return jitOptions;\n}\nfunction resetJitOptions() {\n  jitOptions = null;\n}\nfunction patchModuleCompilation() {\n  // Does nothing, but exists as a target for patching.\n}\nconst moduleQueue = [];\n/**\n * Enqueues moduleDef to be checked later to see if scope can be set on its\n * component declarations.\n */\nfunction enqueueModuleForDelayedScoping(moduleType, ngModule) {\n  moduleQueue.push({\n    moduleType,\n    ngModule\n  });\n}\nlet flushingModuleQueue = false;\n/**\n * Loops over queued module definitions, if a given module definition has all of its\n * declarations resolved, it dequeues that module definition and sets the scope on\n * its declarations.\n */\nfunction flushModuleScopingQueueAsMuchAsPossible() {\n  if (!flushingModuleQueue) {\n    flushingModuleQueue = true;\n    try {\n      for (let i = moduleQueue.length - 1; i >= 0; i--) {\n        const {\n          moduleType,\n          ngModule\n        } = moduleQueue[i];\n        if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {\n          // dequeue\n          moduleQueue.splice(i, 1);\n          setScopeOnDeclaredComponents(moduleType, ngModule);\n        }\n      }\n    } finally {\n      flushingModuleQueue = false;\n    }\n  }\n}\n/**\n * Returns truthy if a declaration has resolved. If the declaration happens to be\n * an array of declarations, it will recurse to check each declaration in that array\n * (which may also be arrays).\n */\nfunction isResolvedDeclaration(declaration) {\n  if (Array.isArray(declaration)) {\n    return declaration.every(isResolvedDeclaration);\n  }\n  return !!resolveForwardRef(declaration);\n}\n/**\n * Compiles a module in JIT mode.\n *\n * This function automatically gets called when a class has a `@NgModule` decorator.\n */\nfunction compileNgModule(moduleType, ngModule = {}) {\n  patchModuleCompilation();\n  compileNgModuleDefs(moduleType, ngModule);\n  if (ngModule.id !== undefined) {\n    registerNgModuleType(moduleType, ngModule.id);\n  }\n  // Because we don't know if all declarations have resolved yet at the moment the\n  // NgModule decorator is executing, we're enqueueing the setting of module scope\n  // on its declarations to be run at a later time when all declarations for the module,\n  // including forward refs, have resolved.\n  enqueueModuleForDelayedScoping(moduleType, ngModule);\n}\n/**\n * Compiles and adds the `ɵmod`, `ɵfac` and `ɵinj` properties to the module class.\n *\n * It's possible to compile a module via this API which will allow duplicate declarations in its\n * root.\n */\nfunction compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {\n  ngDevMode && assertDefined(moduleType, 'Required value moduleType');\n  ngDevMode && assertDefined(ngModule, 'Required value ngModule');\n  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n  let ngModuleDef = null;\n  Object.defineProperty(moduleType, NG_MOD_DEF, {\n    configurable: true,\n    get: () => {\n      if (ngModuleDef === null) {\n        if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {\n          // We need to assert this immediately, because allowing it to continue will cause it to\n          // go into an infinite loop before we've reached the point where we throw all the errors.\n          throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);\n        }\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {\n          type: moduleType,\n          bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),\n          declarations: declarations.map(resolveForwardRef),\n          imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n          exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n          schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,\n          id: ngModule.id || null\n        });\n        // Set `schemas` on ngModuleDef to an empty array in JIT mode to indicate that runtime\n        // should verify that there are no unknown elements in a template. In AOT mode, that check\n        // happens at compile time and `schemas` information is not present on Component and Module\n        // defs after compilation (so the check doesn't happen the second time at runtime).\n        if (!ngModuleDef.schemas) {\n          ngModuleDef.schemas = [];\n        }\n      }\n      return ngModuleDef;\n    }\n  });\n  let ngFactoryDef = null;\n  Object.defineProperty(moduleType, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/ɵfac.js`, {\n          name: moduleType.name,\n          type: moduleType,\n          deps: reflectDependencies(moduleType),\n          target: compiler.FactoryTarget.NgModule,\n          typeArgumentCount: 0\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n  let ngInjectorDef = null;\n  Object.defineProperty(moduleType, NG_INJ_DEF, {\n    get: () => {\n      if (ngInjectorDef === null) {\n        ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);\n        const meta = {\n          name: moduleType.name,\n          type: moduleType,\n          providers: ngModule.providers || EMPTY_ARRAY,\n          imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]\n        };\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);\n      }\n      return ngInjectorDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction generateStandaloneInDeclarationsError(type, location) {\n  const prefix = `Unexpected \"${stringifyForError(type)}\" found in the \"declarations\" array of the`;\n  const suffix = `\"${stringifyForError(type)}\" is marked as standalone and can't be declared ` + 'in any NgModule - did you intend to import it instead (by adding it to the \"imports\" array)?';\n  return `${prefix} ${location}, ${suffix}`;\n}\nfunction verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {\n  if (verifiedNgModule.get(moduleType)) return;\n  // skip verifications of standalone components, directives, and pipes\n  if (isStandalone(moduleType)) return;\n  verifiedNgModule.set(moduleType, true);\n  moduleType = resolveForwardRef(moduleType);\n  let ngModuleDef;\n  if (importingModule) {\n    ngModuleDef = getNgModuleDef(moduleType);\n    if (!ngModuleDef) {\n      throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n  } else {\n    ngModuleDef = getNgModuleDef(moduleType, true);\n  }\n  const errors = [];\n  const declarations = maybeUnwrapFn(ngModuleDef.declarations);\n  const imports = maybeUnwrapFn(ngModuleDef.imports);\n  flatten(imports).map(unwrapModuleWithProvidersImports).forEach(modOrStandaloneCmpt => {\n    verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);\n    verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);\n  });\n  const exports = maybeUnwrapFn(ngModuleDef.exports);\n  declarations.forEach(verifyDeclarationsHaveDefinitions);\n  declarations.forEach(verifyDirectivesHaveSelector);\n  declarations.forEach(declarationType => verifyNotStandalone(declarationType, moduleType));\n  const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];\n  exports.forEach(verifyExportsAreDeclaredOrReExported);\n  declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));\n  const ngModule = getAnnotation(moduleType, 'NgModule');\n  if (ngModule) {\n    ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(mod => {\n      verifySemanticsOfNgModuleImport(mod, moduleType);\n      verifySemanticsOfNgModuleDef(mod, false, moduleType);\n    });\n    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);\n    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);\n  }\n  // Throw Error if any errors were detected.\n  if (errors.length) {\n    throw new Error(errors.join('\\n'));\n  }\n  ////////////////////////////////////////////////////////////////////////////////////////////////\n  function verifyDeclarationsHaveDefinitions(type) {\n    type = resolveForwardRef(type);\n    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n    if (!def) {\n      errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);\n    }\n  }\n  function verifyDirectivesHaveSelector(type) {\n    type = resolveForwardRef(type);\n    const def = getDirectiveDef(type);\n    if (!getComponentDef(type) && def && def.selectors.length == 0) {\n      errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);\n    }\n  }\n  function verifyNotStandalone(type, moduleType) {\n    type = resolveForwardRef(type);\n    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n    if (def?.standalone) {\n      const location = `\"${stringifyForError(moduleType)}\" NgModule`;\n      errors.push(generateStandaloneInDeclarationsError(type, location));\n    }\n  }\n  function verifyExportsAreDeclaredOrReExported(type) {\n    type = resolveForwardRef(type);\n    const kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' || getPipeDef$1(type) && 'pipe';\n    if (kind) {\n      // only checked if we are declared as Component, Directive, or Pipe\n      // Modules don't need to be declared or imported.\n      if (combinedDeclarations.lastIndexOf(type) === -1) {\n        // We are exporting something which we don't explicitly declare or import.\n        errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);\n      }\n    }\n  }\n  function verifyDeclarationIsUnique(type, suppressErrors) {\n    type = resolveForwardRef(type);\n    const existingModule = ownerNgModule.get(type);\n    if (existingModule && existingModule !== moduleType) {\n      if (!suppressErrors) {\n        const modules = [existingModule, moduleType].map(stringifyForError).sort();\n        errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` + `Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` + `You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);\n      }\n    } else {\n      // Mark type as having owner.\n      ownerNgModule.set(type, moduleType);\n    }\n  }\n  function verifyComponentIsPartOfNgModule(type) {\n    type = resolveForwardRef(type);\n    const existingModule = ownerNgModule.get(type);\n    if (!existingModule && !isStandalone(type)) {\n      errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);\n    }\n  }\n  function verifyCorrectBootstrapType(type) {\n    type = resolveForwardRef(type);\n    if (!getComponentDef(type)) {\n      errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);\n    }\n    if (isStandalone(type)) {\n      // Note: this error should be the same as the\n      // `NGMODULE_BOOTSTRAP_IS_STANDALONE` one in AOT compiler.\n      errors.push(`The \\`${stringifyForError(type)}\\` class is a standalone component, which can ` + `not be used in the \\`@NgModule.bootstrap\\` array. Use the \\`bootstrapApplication\\` ` + `function for bootstrap instead.`);\n    }\n  }\n  function verifySemanticsOfNgModuleImport(type, importingModule) {\n    type = resolveForwardRef(type);\n    const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n    if (directiveDef !== null && !directiveDef.standalone) {\n      throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n    const pipeDef = getPipeDef$1(type);\n    if (pipeDef !== null && !pipeDef.standalone) {\n      throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n  }\n}\nfunction unwrapModuleWithProvidersImports(typeOrWithProviders) {\n  typeOrWithProviders = resolveForwardRef(typeOrWithProviders);\n  return typeOrWithProviders.ngModule || typeOrWithProviders;\n}\nfunction getAnnotation(type, name) {\n  let annotation = null;\n  collect(type.__annotations__);\n  collect(type.decorators);\n  return annotation;\n  function collect(annotations) {\n    if (annotations) {\n      annotations.forEach(readAnnotation);\n    }\n  }\n  function readAnnotation(decorator) {\n    if (!annotation) {\n      const proto = Object.getPrototypeOf(decorator);\n      if (proto.ngMetadataName == name) {\n        annotation = decorator;\n      } else if (decorator.type) {\n        const proto = Object.getPrototypeOf(decorator.type);\n        if (proto.ngMetadataName == name) {\n          annotation = decorator.args[0];\n        }\n      }\n    }\n  }\n}\n/**\n * Keep track of compiled components. This is needed because in tests we often want to compile the\n * same component with more than one NgModule. This would cause an error unless we reset which\n * NgModule the component belongs to. We keep the list of compiled components here so that the\n * TestBed can reset it later.\n */\nlet ownerNgModule = new WeakMap();\nlet verifiedNgModule = new WeakMap();\nfunction resetCompiledComponents() {\n  ownerNgModule = new WeakMap();\n  verifiedNgModule = new WeakMap();\n  moduleQueue.length = 0;\n  GENERATED_COMP_IDS.clear();\n}\n/**\n * Computes the combined declarations of explicit declarations, as well as declarations inherited by\n * traversing the exports of imported modules.\n * @param type\n */\nfunction computeCombinedExports(type) {\n  type = resolveForwardRef(type);\n  const ngModuleDef = getNgModuleDef(type);\n  // a standalone component, directive or pipe\n  if (ngModuleDef === null) {\n    return [type];\n  }\n  return flatten(maybeUnwrapFn(ngModuleDef.exports).map(type => {\n    const ngModuleDef = getNgModuleDef(type);\n    if (ngModuleDef) {\n      verifySemanticsOfNgModuleDef(type, false);\n      return computeCombinedExports(type);\n    } else {\n      return type;\n    }\n  }));\n}\n/**\n * Some declared components may be compiled asynchronously, and thus may not have their\n * ɵcmp set yet. If this is the case, then a reference to the module is written into\n * the `ngSelectorScope` property of the declared type.\n */\nfunction setScopeOnDeclaredComponents(moduleType, ngModule) {\n  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n  const transitiveScopes = transitiveScopesFor(moduleType);\n  declarations.forEach(declaration => {\n    declaration = resolveForwardRef(declaration);\n    if (declaration.hasOwnProperty(NG_COMP_DEF)) {\n      // A `ɵcmp` field exists - go ahead and patch the component directly.\n      const component = declaration;\n      const componentDef = getComponentDef(component);\n      patchComponentDefWithScope(componentDef, transitiveScopes);\n    } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {\n      // Set `ngSelectorScope` for future reference when the component compilation finishes.\n      declaration.ngSelectorScope = moduleType;\n    }\n  });\n}\n/**\n * Patch the definition of a component with directives and pipes from the compilation scope of\n * a given module.\n */\nfunction patchComponentDefWithScope(componentDef, transitiveScopes) {\n  componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map(dir => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter(def => !!def);\n  componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map(pipe => getPipeDef$1(pipe));\n  componentDef.schemas = transitiveScopes.schemas;\n  // Since we avoid Components/Directives/Pipes recompiling in case there are no overrides, we\n  // may face a problem where previously compiled defs available to a given Component/Directive\n  // are cached in TView and may become stale (in case any of these defs gets recompiled). In\n  // order to avoid this problem, we force fresh TView to be created.\n  componentDef.tView = null;\n}\n/**\n * Compute the pair of transitive scopes (compilation scope and exported scope) for a given type\n * (either a NgModule or a standalone component / directive / pipe).\n */\nfunction transitiveScopesFor(type) {\n  if (isNgModule(type)) {\n    if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      const scope = depsTracker.getNgModuleScope(type);\n      const def = getNgModuleDef(type, true);\n      return {\n        schemas: def.schemas || null,\n        ...scope\n      };\n    } else {\n      return transitiveScopesForNgModule(type);\n    }\n  } else if (isStandalone(type)) {\n    const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n    if (directiveDef !== null) {\n      return {\n        schemas: null,\n        compilation: {\n          directives: new Set(),\n          pipes: new Set()\n        },\n        exported: {\n          directives: new Set([type]),\n          pipes: new Set()\n        }\n      };\n    }\n    const pipeDef = getPipeDef$1(type);\n    if (pipeDef !== null) {\n      return {\n        schemas: null,\n        compilation: {\n          directives: new Set(),\n          pipes: new Set()\n        },\n        exported: {\n          directives: new Set(),\n          pipes: new Set([type])\n        }\n      };\n    }\n  }\n  // TODO: change the error message to be more user-facing and take standalone into account\n  throw new Error(`${type.name} does not have a module def (ɵmod property)`);\n}\n/**\n * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.\n *\n * This operation is memoized and the result is cached on the module's definition. This function can\n * be called on modules with components that have not fully compiled yet, but the result should not\n * be used until they have.\n *\n * @param moduleType module that transitive scope should be calculated for.\n */\nfunction transitiveScopesForNgModule(moduleType) {\n  const def = getNgModuleDef(moduleType, true);\n  if (def.transitiveCompileScopes !== null) {\n    return def.transitiveCompileScopes;\n  }\n  const scopes = {\n    schemas: def.schemas || null,\n    compilation: {\n      directives: new Set(),\n      pipes: new Set()\n    },\n    exported: {\n      directives: new Set(),\n      pipes: new Set()\n    }\n  };\n  maybeUnwrapFn(def.imports).forEach(imported => {\n    // When this module imports another, the imported module's exported directives and pipes are\n    // added to the compilation scope of this module.\n    const importedScope = transitiveScopesFor(imported);\n    importedScope.exported.directives.forEach(entry => scopes.compilation.directives.add(entry));\n    importedScope.exported.pipes.forEach(entry => scopes.compilation.pipes.add(entry));\n  });\n  maybeUnwrapFn(def.declarations).forEach(declared => {\n    const declaredWithDefs = declared;\n    if (getPipeDef$1(declaredWithDefs)) {\n      scopes.compilation.pipes.add(declared);\n    } else {\n      // Either declared has a ɵcmp or ɵdir, or it's a component which hasn't\n      // had its template compiled yet. In either case, it gets added to the compilation's\n      // directives.\n      scopes.compilation.directives.add(declared);\n    }\n  });\n  maybeUnwrapFn(def.exports).forEach(exported => {\n    const exportedType = exported;\n    // Either the type is a module, a pipe, or a component/directive (which may not have a\n    // ɵcmp as it might be compiled asynchronously).\n    if (isNgModule(exportedType)) {\n      // When this module exports another, the exported module's exported directives and pipes are\n      // added to both the compilation and exported scopes of this module.\n      const exportedScope = transitiveScopesFor(exportedType);\n      exportedScope.exported.directives.forEach(entry => {\n        scopes.compilation.directives.add(entry);\n        scopes.exported.directives.add(entry);\n      });\n      exportedScope.exported.pipes.forEach(entry => {\n        scopes.compilation.pipes.add(entry);\n        scopes.exported.pipes.add(entry);\n      });\n    } else if (getPipeDef$1(exportedType)) {\n      scopes.exported.pipes.add(exportedType);\n    } else {\n      scopes.exported.directives.add(exportedType);\n    }\n  });\n  def.transitiveCompileScopes = scopes;\n  return scopes;\n}\nfunction expandModuleWithProviders(value) {\n  if (isModuleWithProviders(value)) {\n    return value.ngModule;\n  }\n  return value;\n}\n\n/**\n * Keep track of the compilation depth to avoid reentrancy issues during JIT compilation. This\n * matters in the following scenario:\n *\n * Consider a component 'A' that extends component 'B', both declared in module 'M'. During\n * the compilation of 'A' the definition of 'B' is requested to capture the inheritance chain,\n * potentially triggering compilation of 'B'. If this nested compilation were to trigger\n * `flushModuleScopingQueueAsMuchAsPossible` it may happen that module 'M' is still pending in the\n * queue, resulting in 'A' and 'B' to be patched with the NgModule scope. As the compilation of\n * 'A' is still in progress, this would introduce a circular dependency on its compilation. To avoid\n * this issue, the module scope queue is only flushed for compilations at the depth 0, to ensure\n * all compilations have finished.\n */\nlet compilationDepth = 0;\n/**\n * Compile an Angular component according to its decorator metadata, and patch the resulting\n * component def (ɵcmp) onto the component type.\n *\n * Compilation may be asynchronous (due to the need to resolve URLs for the component template or\n * other resources, for example). In the event that compilation is not immediate, `compileComponent`\n * will enqueue resource resolution into a global queue and will fail to return the `ɵcmp`\n * until the global queue has been resolved with a call to `resolveComponentResources`.\n */\nfunction compileComponent(type, metadata) {\n  // Initialize ngDevMode. This must be the first statement in compileComponent.\n  // See the `initNgDevMode` docstring for more information.\n  (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n  let ngComponentDef = null;\n  // Metadata may have resources which need to be resolved.\n  maybeQueueResolutionOfComponentResources(type, metadata);\n  // Note that we're using the same function as `Directive`, because that's only subset of metadata\n  // that we need to create the ngFactoryDef. We're avoiding using the component metadata\n  // because we'd have to resolve the asynchronous templates.\n  addDirectiveFactoryDef(type, metadata);\n  Object.defineProperty(type, NG_COMP_DEF, {\n    get: () => {\n      if (ngComponentDef === null) {\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'component',\n          type: type\n        });\n        if (componentNeedsResolution(metadata)) {\n          const error = [`Component '${type.name}' is not resolved:`];\n          if (metadata.templateUrl) {\n            error.push(` - templateUrl: ${metadata.templateUrl}`);\n          }\n          if (metadata.styleUrls && metadata.styleUrls.length) {\n            error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);\n          }\n          if (metadata.styleUrl) {\n            error.push(` - styleUrl: ${metadata.styleUrl}`);\n          }\n          error.push(`Did you run and wait for 'resolveComponentResources()'?`);\n          throw new Error(error.join('\\n'));\n        }\n        // This const was called `jitOptions` previously but had to be renamed to `options` because\n        // of a bug with Terser that caused optimized JIT builds to throw a `ReferenceError`.\n        // This bug was investigated in https://github.com/angular/angular-cli/issues/17264.\n        // We should not rename it back until https://github.com/terser/terser/issues/615 is fixed.\n        const options = getJitOptions();\n        let preserveWhitespaces = metadata.preserveWhitespaces;\n        if (preserveWhitespaces === undefined) {\n          if (options !== null && options.preserveWhitespaces !== undefined) {\n            preserveWhitespaces = options.preserveWhitespaces;\n          } else {\n            preserveWhitespaces = false;\n          }\n        }\n        let encapsulation = metadata.encapsulation;\n        if (encapsulation === undefined) {\n          if (options !== null && options.defaultEncapsulation !== undefined) {\n            encapsulation = options.defaultEncapsulation;\n          } else {\n            encapsulation = ViewEncapsulation.Emulated;\n          }\n        }\n        const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;\n        const meta = {\n          ...directiveMetadata(type, metadata),\n          typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl),\n          template: metadata.template || '',\n          preserveWhitespaces,\n          styles: typeof metadata.styles === 'string' ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,\n          animations: metadata.animations,\n          // JIT components are always compiled against an empty set of `declarations`. Instead, the\n          // `directiveDefs` and `pipeDefs` are updated at a later point:\n          //  * for NgModule-based components, they're set when the NgModule which declares the\n          //    component resolves in the module scoping queue\n          //  * for standalone components, they're set just below, after `compileComponent`.\n          declarations: [],\n          changeDetection: metadata.changeDetection,\n          encapsulation,\n          interpolation: metadata.interpolation,\n          viewProviders: metadata.viewProviders || null\n        };\n        compilationDepth++;\n        try {\n          if (meta.usesInheritance) {\n            addDirectiveDefToUndecoratedParents(type);\n          }\n          ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);\n          if (meta.isStandalone) {\n            // Patch the component definition for standalone components with `directiveDefs` and\n            // `pipeDefs` functions which lazily compute the directives/pipes available in the\n            // standalone component. Also set `dependencies` to the lazily resolved list of imports.\n            const imports = flatten(metadata.imports || EMPTY_ARRAY);\n            const {\n              directiveDefs,\n              pipeDefs\n            } = getStandaloneDefFunctions(type, imports);\n            ngComponentDef.directiveDefs = directiveDefs;\n            ngComponentDef.pipeDefs = pipeDefs;\n            ngComponentDef.dependencies = () => imports.map(resolveForwardRef);\n          }\n        } finally {\n          // Ensure that the compilation depth is decremented even when the compilation failed.\n          compilationDepth--;\n        }\n        if (compilationDepth === 0) {\n          // When NgModule decorator executed, we enqueued the module definition such that\n          // it would only dequeue and add itself as module scope to all of its declarations,\n          // but only if  if all of its declarations had resolved. This call runs the check\n          // to see if any modules that are in the queue can be dequeued and add scope to\n          // their declarations.\n          flushModuleScopingQueueAsMuchAsPossible();\n        }\n        // If component compilation is async, then the @NgModule annotation which declares the\n        // component may execute and set an ngSelectorScope property on the component type. This\n        // allows the component to patch itself with directiveDefs from the module after it\n        // finishes compiling.\n        if (hasSelectorScope(type)) {\n          const scopes = transitiveScopesFor(type.ngSelectorScope);\n          patchComponentDefWithScope(ngComponentDef, scopes);\n        }\n        if (metadata.schemas) {\n          if (meta.isStandalone) {\n            ngComponentDef.schemas = metadata.schemas;\n          } else {\n            throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);\n          }\n        } else if (meta.isStandalone) {\n          ngComponentDef.schemas = [];\n        }\n      }\n      return ngComponentDef;\n    },\n    set: def => {\n      ngComponentDef = def;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\n/**\n * Build memoized `directiveDefs` and `pipeDefs` functions for the component definition of a\n * standalone component, which process `imports` and filter out directives and pipes. The use of\n * memoized functions here allows for the delayed resolution of any `forwardRef`s present in the\n * component's `imports`.\n */\nfunction getStandaloneDefFunctions(type, imports) {\n  let cachedDirectiveDefs = null;\n  let cachedPipeDefs = null;\n  const directiveDefs = () => {\n    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      if (cachedDirectiveDefs === null) {\n        // Standalone components are always able to self-reference, so include the component's own\n        // definition in its `directiveDefs`.\n        cachedDirectiveDefs = [getComponentDef(type)];\n        const seen = new Set([type]);\n        for (const rawDep of imports) {\n          ngDevMode && verifyStandaloneImport(rawDep, type);\n          const dep = resolveForwardRef(rawDep);\n          if (seen.has(dep)) {\n            continue;\n          }\n          seen.add(dep);\n          if (!!getNgModuleDef(dep)) {\n            const scope = transitiveScopesFor(dep);\n            for (const dir of scope.exported.directives) {\n              const def = getComponentDef(dir) || getDirectiveDef(dir);\n              if (def && !seen.has(dir)) {\n                seen.add(dir);\n                cachedDirectiveDefs.push(def);\n              }\n            }\n          } else {\n            const def = getComponentDef(dep) || getDirectiveDef(dep);\n            if (def) {\n              cachedDirectiveDefs.push(def);\n            }\n          }\n        }\n      }\n      return cachedDirectiveDefs;\n    } else {\n      if (ngDevMode) {\n        for (const rawDep of imports) {\n          verifyStandaloneImport(rawDep, type);\n        }\n      }\n      if (!isComponent(type)) {\n        return [];\n      }\n      const scope = depsTracker.getStandaloneComponentScope(type, imports);\n      return [...scope.compilation.directives].map(p => getComponentDef(p) || getDirectiveDef(p)).filter(d => d !== null);\n    }\n  };\n  const pipeDefs = () => {\n    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      if (cachedPipeDefs === null) {\n        cachedPipeDefs = [];\n        const seen = new Set();\n        for (const rawDep of imports) {\n          const dep = resolveForwardRef(rawDep);\n          if (seen.has(dep)) {\n            continue;\n          }\n          seen.add(dep);\n          if (!!getNgModuleDef(dep)) {\n            const scope = transitiveScopesFor(dep);\n            for (const pipe of scope.exported.pipes) {\n              const def = getPipeDef$1(pipe);\n              if (def && !seen.has(pipe)) {\n                seen.add(pipe);\n                cachedPipeDefs.push(def);\n              }\n            }\n          } else {\n            const def = getPipeDef$1(dep);\n            if (def) {\n              cachedPipeDefs.push(def);\n            }\n          }\n        }\n      }\n      return cachedPipeDefs;\n    } else {\n      if (ngDevMode) {\n        for (const rawDep of imports) {\n          verifyStandaloneImport(rawDep, type);\n        }\n      }\n      if (!isComponent(type)) {\n        return [];\n      }\n      const scope = depsTracker.getStandaloneComponentScope(type, imports);\n      return [...scope.compilation.pipes].map(p => getPipeDef$1(p)).filter(d => d !== null);\n    }\n  };\n  return {\n    directiveDefs,\n    pipeDefs\n  };\n}\nfunction hasSelectorScope(component) {\n  return component.ngSelectorScope !== undefined;\n}\n/**\n * Compile an Angular directive according to its decorator metadata, and patch the resulting\n * directive def onto the component type.\n *\n * In the event that compilation is not immediate, `compileDirective` will return a `Promise` which\n * will resolve when compilation completes and the directive becomes usable.\n */\nfunction compileDirective(type, directive) {\n  let ngDirectiveDef = null;\n  addDirectiveFactoryDef(type, directive || {});\n  Object.defineProperty(type, NG_DIR_DEF, {\n    get: () => {\n      if (ngDirectiveDef === null) {\n        // `directive` can be null in the case of abstract directives as a base class\n        // that use `@Directive()` with no selector. In that case, pass empty object to the\n        // `directiveMetadata` function instead of null.\n        const meta = getDirectiveMetadata(type, directive || {});\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'directive',\n          type\n        });\n        ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);\n      }\n      return ngDirectiveDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction getDirectiveMetadata(type, metadata) {\n  const name = type && type.name;\n  const sourceMapUrl = `ng:///${name}/ɵdir.js`;\n  const compiler = getCompilerFacade({\n    usage: 0 /* JitCompilerUsage.Decorator */,\n    kind: 'directive',\n    type\n  });\n  const facade = directiveMetadata(type, metadata);\n  facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);\n  if (facade.usesInheritance) {\n    addDirectiveDefToUndecoratedParents(type);\n  }\n  return {\n    metadata: facade,\n    sourceMapUrl\n  };\n}\nfunction addDirectiveFactoryDef(type, metadata) {\n  let ngFactoryDef = null;\n  Object.defineProperty(type, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const meta = getDirectiveMetadata(type, metadata);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'directive',\n          type\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, {\n          name: meta.metadata.name,\n          type: meta.metadata.type,\n          typeArgumentCount: 0,\n          deps: reflectDependencies(type),\n          target: compiler.FactoryTarget.Directive\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction extendsDirectlyFromObject(type) {\n  return Object.getPrototypeOf(type.prototype) === Object.prototype;\n}\n/**\n * Extract the `R3DirectiveMetadata` for a particular directive (either a `Directive` or a\n * `Component`).\n */\nfunction directiveMetadata(type, metadata) {\n  // Reflect inputs and outputs.\n  const reflect = getReflect();\n  const propMetadata = reflect.ownPropMetadata(type);\n  return {\n    name: type.name,\n    type: type,\n    selector: metadata.selector !== undefined ? metadata.selector : null,\n    host: metadata.host || EMPTY_OBJ,\n    propMetadata: propMetadata,\n    inputs: metadata.inputs || EMPTY_ARRAY,\n    outputs: metadata.outputs || EMPTY_ARRAY,\n    queries: extractQueriesMetadata(type, propMetadata, isContentQuery),\n    lifecycle: {\n      usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges')\n    },\n    typeSourceSpan: null,\n    usesInheritance: !extendsDirectlyFromObject(type),\n    exportAs: extractExportAs(metadata.exportAs),\n    providers: metadata.providers || null,\n    viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),\n    isStandalone: metadata.standalone === undefined ? true : !!metadata.standalone,\n    isSignal: !!metadata.signals,\n    hostDirectives: metadata.hostDirectives?.map(directive => typeof directive === 'function' ? {\n      directive\n    } : directive) || null\n  };\n}\n/**\n * Adds a directive definition to all parent classes of a type that don't have an Angular decorator.\n */\nfunction addDirectiveDefToUndecoratedParents(type) {\n  const objPrototype = Object.prototype;\n  let parent = Object.getPrototypeOf(type.prototype).constructor;\n  // Go up the prototype until we hit `Object`.\n  while (parent && parent !== objPrototype) {\n    // Since inheritance works if the class was annotated already, we only need to add\n    // the def if there are no annotations and the def hasn't been created already.\n    if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {\n      compileDirective(parent, null);\n    }\n    parent = Object.getPrototypeOf(parent);\n  }\n}\nfunction convertToR3QueryPredicate(selector) {\n  return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);\n}\nfunction convertToR3QueryMetadata(propertyName, ann) {\n  return {\n    propertyName: propertyName,\n    predicate: convertToR3QueryPredicate(ann.selector),\n    descendants: ann.descendants,\n    first: ann.first,\n    read: ann.read ? ann.read : null,\n    static: !!ann.static,\n    emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,\n    isSignal: !!ann.isSignal\n  };\n}\nfunction extractQueriesMetadata(type, propMetadata, isQueryAnn) {\n  const queriesMeta = [];\n  for (const field in propMetadata) {\n    if (propMetadata.hasOwnProperty(field)) {\n      const annotations = propMetadata[field];\n      annotations.forEach(ann => {\n        if (isQueryAnn(ann)) {\n          if (!ann.selector) {\n            throw new Error(`Can't construct a query for the property \"${field}\" of ` + `\"${stringifyForError(type)}\" since the query selector wasn't defined.`);\n          }\n          if (annotations.some(isInputAnnotation)) {\n            throw new Error(`Cannot combine @Input decorators with query decorators`);\n          }\n          queriesMeta.push(convertToR3QueryMetadata(field, ann));\n        }\n      });\n    }\n  }\n  return queriesMeta;\n}\nfunction extractExportAs(exportAs) {\n  return exportAs === undefined ? null : splitByComma(exportAs);\n}\nfunction isContentQuery(value) {\n  const name = value.ngMetadataName;\n  return name === 'ContentChild' || name === 'ContentChildren';\n}\nfunction isViewQuery(value) {\n  const name = value.ngMetadataName;\n  return name === 'ViewChild' || name === 'ViewChildren';\n}\nfunction isInputAnnotation(value) {\n  return value.ngMetadataName === 'Input';\n}\nfunction splitByComma(value) {\n  return value.split(',').map(piece => piece.trim());\n}\nconst LIFECYCLE_HOOKS = ['ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked', 'ngAfterContentInit', 'ngAfterContentChecked'];\nfunction shouldAddAbstractDirective(type) {\n  const reflect = getReflect();\n  if (LIFECYCLE_HOOKS.some(hookName => reflect.hasLifecycleHook(type, hookName))) {\n    return true;\n  }\n  const propMetadata = reflect.propMetadata(type);\n  for (const field in propMetadata) {\n    const annotations = propMetadata[field];\n    for (let i = 0; i < annotations.length; i++) {\n      const current = annotations[i];\n      const metadataName = current.ngMetadataName;\n      if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === 'Output' || metadataName === 'HostBinding' || metadataName === 'HostListener') {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction compilePipe(type, meta) {\n  let ngPipeDef = null;\n  let ngFactoryDef = null;\n  Object.defineProperty(type, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const metadata = getPipeMetadata(type, meta);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'pipe',\n          type: metadata.type\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, {\n          name: metadata.name,\n          type: metadata.type,\n          typeArgumentCount: 0,\n          deps: reflectDependencies(type),\n          target: compiler.FactoryTarget.Pipe\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n  Object.defineProperty(type, NG_PIPE_DEF, {\n    get: () => {\n      if (ngPipeDef === null) {\n        const metadata = getPipeMetadata(type, meta);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'pipe',\n          type: metadata.type\n        });\n        ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);\n      }\n      return ngPipeDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction getPipeMetadata(type, meta) {\n  return {\n    type: type,\n    name: type.name,\n    pipeName: meta.name,\n    pure: meta.pure !== undefined ? meta.pure : true,\n    isStandalone: meta.standalone === undefined ? true : !!meta.standalone\n  };\n}\n\n/**\n * Type of the Directive metadata.\n *\n * @publicApi\n */\nconst Directive = makeDecorator('Directive', (dir = {}) => dir, undefined, undefined, (type, meta) => compileDirective(type, meta));\n/**\n * Component decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Component = makeDecorator('Component', (c = {}) => ({\n  changeDetection: ChangeDetectionStrategy.Default,\n  ...c\n}), Directive, undefined, (type, meta) => compileComponent(type, meta));\n/**\n * @Annotation\n * @publicApi\n */\nconst Pipe = makeDecorator('Pipe', p => ({\n  pure: true,\n  ...p\n}), undefined, undefined, (type, meta) => compilePipe(type, meta));\n/**\n * @Annotation\n * @publicApi\n */\nconst Input = makePropDecorator('Input', arg => {\n  if (!arg) {\n    return {};\n  }\n  return typeof arg === 'string' ? {\n    alias: arg\n  } : arg;\n});\n/**\n * @Annotation\n * @publicApi\n */\nconst Output = makePropDecorator('Output', alias => ({\n  alias\n}));\n/**\n * @Annotation\n * @publicApi\n */\nconst HostBinding = makePropDecorator('HostBinding', hostPropertyName => ({\n  hostPropertyName\n}));\n/**\n * @Annotation\n * @publicApi\n */\nconst HostListener = makePropDecorator('HostListener', (eventName, args) => ({\n  eventName,\n  args\n}));\n\n/**\n * @Annotation\n */\nconst NgModule = makeDecorator('NgModule', ngModule => ngModule, undefined, undefined,\n/**\n * Decorator that marks the following class as an NgModule, and supplies\n * configuration metadata for it.\n *\n * * The `declarations` option configures the compiler\n * with information about what belongs to the NgModule.\n * * The `providers` options configures the NgModule's injector to provide\n * dependencies the NgModule members.\n * * The `imports` and `exports` options bring in members from other modules, and make\n * this module's members available to others.\n */\n(type, meta) => compileNgModule(type, meta));\n\n/**\n * This indirection is needed to free up Component, etc symbols in the public API\n * to be used by the decorator versions of these annotations.\n */\n\n/**\n * @description Represents the version of Angular\n *\n * @publicApi\n */\nclass Version {\n  full;\n  major;\n  minor;\n  patch;\n  constructor(full) {\n    this.full = full;\n    const parts = full.split('.');\n    this.major = parts[0];\n    this.minor = parts[1];\n    this.patch = parts.slice(2).join('.');\n  }\n}\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * Combination of NgModuleFactory and ComponentFactories.\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass ModuleWithComponentFactories {\n  ngModuleFactory;\n  componentFactories;\n  constructor(ngModuleFactory, componentFactories) {\n    this.ngModuleFactory = ngModuleFactory;\n    this.componentFactories = componentFactories;\n  }\n}\n/**\n * Low-level service for running the angular compiler during runtime\n * to create {@link ComponentFactory}s, which\n * can later be used to create and render a Component instance.\n *\n * Each `@NgModule` provides an own `Compiler` to its injector,\n * that will use the directives/pipes of the ng module for compilation\n * of components.\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass Compiler {\n  /**\n   * Compiles the given NgModule and all of its components. All templates of the components\n   * have to be inlined.\n   */\n  compileModuleSync(moduleType) {\n    return new NgModuleFactory(moduleType);\n  }\n  /**\n   * Compiles the given NgModule and all of its components\n   */\n  compileModuleAsync(moduleType) {\n    return Promise.resolve(this.compileModuleSync(moduleType));\n  }\n  /**\n   * Same as {@link Compiler#compileModuleSync compileModuleSync} but also creates ComponentFactories for all components.\n   */\n  compileModuleAndAllComponentsSync(moduleType) {\n    const ngModuleFactory = this.compileModuleSync(moduleType);\n    const moduleDef = getNgModuleDef(moduleType);\n    const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {\n      const componentDef = getComponentDef(declaration);\n      componentDef && factories.push(new ComponentFactory(componentDef));\n      return factories;\n    }, []);\n    return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n  }\n  /**\n   * Same as {@link Compiler#compileModuleAsync compileModuleAsync} but also creates ComponentFactories for all components.\n   */\n  compileModuleAndAllComponentsAsync(moduleType) {\n    return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));\n  }\n  /**\n   * Clears all caches.\n   */\n  clearCache() {}\n  /**\n   * Clears the cache for the given component/ngModule.\n   */\n  clearCacheFor(type) {}\n  /**\n   * Returns the id for a given NgModule, if one is defined and known to the compiler.\n   */\n  getModuleId(moduleType) {\n    return undefined;\n  }\n  static ɵfac = function Compiler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Compiler)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Compiler,\n    factory: Compiler.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Compiler, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Token to provide CompilerOptions in the platform injector.\n *\n * @publicApi\n */\nconst COMPILER_OPTIONS = new InjectionToken(ngDevMode ? 'compilerOptions' : '');\n/**\n * A factory for creating a Compiler\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass CompilerFactory {}\nfunction compileNgModuleFactory(injector, options, moduleType) {\n  ngDevMode && assertNgModuleType(moduleType);\n  const moduleFactory = new NgModuleFactory(moduleType);\n  // All of the logic below is irrelevant for AOT-compiled code.\n  if (typeof ngJitMode !== 'undefined' && !ngJitMode) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);\n  // Configure the compiler to use the provided options. This call may fail when multiple modules\n  // are bootstrapped with incompatible options, as a component can only be compiled according to\n  // a single set of options.\n  setJitOptions({\n    defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),\n    preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))\n  });\n  if (isComponentResourceResolutionQueueEmpty()) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);\n  // In case there are no compiler providers, we just return the module factory as\n  // there won't be any resource loader. This can happen with Ivy, because AOT compiled\n  // modules can be still passed through \"bootstrapModule\". In that case we shouldn't\n  // unnecessarily require the JIT compiler.\n  if (compilerProviders.length === 0) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compiler = getCompilerFacade({\n    usage: 0 /* JitCompilerUsage.Decorator */,\n    kind: 'NgModule',\n    type: moduleType\n  });\n  const compilerInjector = Injector.create({\n    providers: compilerProviders\n  });\n  const resourceLoader = compilerInjector.get(compiler.ResourceLoader);\n  // The resource loader can also return a string while the \"resolveComponentResources\"\n  // always expects a promise. Therefore we need to wrap the returned value in a promise.\n  return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);\n}\nfunction _lastDefined(args) {\n  for (let i = args.length - 1; i >= 0; i--) {\n    if (args[i] !== undefined) {\n      return args[i];\n    }\n  }\n  return undefined;\n}\nclass NgZoneChangeDetectionScheduler {\n  zone = inject(NgZone);\n  changeDetectionScheduler = inject(ChangeDetectionScheduler);\n  applicationRef = inject(ApplicationRef);\n  _onMicrotaskEmptySubscription;\n  initialize() {\n    if (this._onMicrotaskEmptySubscription) {\n      return;\n    }\n    this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({\n      next: () => {\n        // `onMicroTaskEmpty` can happen _during_ the zoneless scheduler change detection because\n        // zone.run(() => {}) will result in `checkStable` at the end of the `zone.run` closure\n        // and emit `onMicrotaskEmpty` synchronously if run coalsecing is false.\n        if (this.changeDetectionScheduler.runningTick) {\n          return;\n        }\n        this.zone.run(() => {\n          this.applicationRef.tick();\n        });\n      }\n    });\n  }\n  ngOnDestroy() {\n    this._onMicrotaskEmptySubscription?.unsubscribe();\n  }\n  static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: NgZoneChangeDetectionScheduler,\n    factory: NgZoneChangeDetectionScheduler.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Internal token used to verify that `provideZoneChangeDetection` is not used\n * with the bootstrapModule API.\n */\nconst PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', {\n  factory: () => false\n});\nfunction internalProvideZoneChangeDetection({\n  ngZoneFactory,\n  ignoreChangesOutsideZone,\n  scheduleInRootZone\n}) {\n  ngZoneFactory ??= () => new NgZone({\n    ...getNgZoneOptions(),\n    scheduleInRootZone\n  });\n  return [{\n    provide: NgZone,\n    useFactory: ngZoneFactory\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {\n        optional: true\n      });\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && ngZoneChangeDetectionScheduler === null) {\n        throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n      }\n      return () => ngZoneChangeDetectionScheduler.initialize();\n    }\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const service = inject(ZoneStablePendingTask);\n      return () => {\n        service.initialize();\n      };\n    }\n  },\n  // Always disable scheduler whenever explicitly disabled, even if another place called\n  // `provideZoneChangeDetection` without the 'ignore' option.\n  ignoreChangesOutsideZone === true ? {\n    provide: ZONELESS_SCHEDULER_DISABLED,\n    useValue: true\n  } : [], {\n    provide: SCHEDULE_IN_ROOT_ZONE,\n    useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT\n  }];\n}\n/**\n * Provides `NgZone`-based change detection for the application bootstrapped using\n * `bootstrapApplication`.\n *\n * `NgZone` is already provided in applications by default. This provider allows you to configure\n * options like `eventCoalescing` in the `NgZone`.\n * This provider is not available for `platformBrowser().bootstrapModule`, which uses\n * `BootstrapOptions` instead.\n *\n * @usageNotes\n * ```ts\n * bootstrapApplication(MyApp, {providers: [\n *   provideZoneChangeDetection({eventCoalescing: true}),\n * ]});\n * ```\n *\n * @publicApi\n * @see {@link bootstrapApplication}\n * @see {@link NgZoneOptions}\n */\nfunction provideZoneChangeDetection(options) {\n  const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;\n  const scheduleInRootZone = options?.scheduleInRootZone;\n  const zoneProviders = internalProvideZoneChangeDetection({\n    ngZoneFactory: () => {\n      const ngZoneOptions = getNgZoneOptions(options);\n      ngZoneOptions.scheduleInRootZone = scheduleInRootZone;\n      if (ngZoneOptions.shouldCoalesceEventChangeDetection) {\n        performanceMarkFeature('NgZone_CoalesceEvent');\n      }\n      return new NgZone(ngZoneOptions);\n    },\n    ignoreChangesOutsideZone,\n    scheduleInRootZone\n  });\n  return makeEnvironmentProviders([{\n    provide: PROVIDED_NG_ZONE,\n    useValue: true\n  }, {\n    provide: ZONELESS_ENABLED,\n    useValue: false\n  }, zoneProviders]);\n}\n// Transforms a set of `BootstrapOptions` (supported by the NgModule-based bootstrap APIs) ->\n// `NgZoneOptions` that are recognized by the NgZone constructor. Passing no options will result in\n// a set of default options returned.\nfunction getNgZoneOptions(options) {\n  return {\n    enableLongStackTrace: typeof ngDevMode === 'undefined' ? false : !!ngDevMode,\n    shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,\n    shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false\n  };\n}\nclass ZoneStablePendingTask {\n  subscription = new Subscription();\n  initialized = false;\n  zone = inject(NgZone);\n  pendingTasks = inject(PendingTasksInternal);\n  initialize() {\n    if (this.initialized) {\n      return;\n    }\n    this.initialized = true;\n    let task = null;\n    if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n      task = this.pendingTasks.add();\n    }\n    this.zone.runOutsideAngular(() => {\n      this.subscription.add(this.zone.onStable.subscribe(() => {\n        NgZone.assertNotInAngularZone();\n        // Check whether there are no pending macro/micro tasks in the next tick\n        // to allow for NgZone to update the state.\n        queueMicrotask(() => {\n          if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n            this.pendingTasks.remove(task);\n            task = null;\n          }\n        });\n      }));\n    });\n    this.subscription.add(this.zone.onUnstable.subscribe(() => {\n      NgZone.assertInAngularZone();\n      task ??= this.pendingTasks.add();\n    }));\n  }\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n  static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ZoneStablePendingTask)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ZoneStablePendingTask,\n    factory: ZoneStablePendingTask.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nconst CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;\nlet consecutiveMicrotaskNotifications = 0;\nlet stackFromLastFewNotifications = [];\nfunction trackMicrotaskNotificationForDebugging() {\n  consecutiveMicrotaskNotifications++;\n  if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {\n    const stack = new Error().stack;\n    if (stack) {\n      stackFromLastFewNotifications.push(stack);\n    }\n  }\n  if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {\n    throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, 'Angular could not stabilize because there were endless change notifications within the browser event loop. ' + 'The stack from the last several notifications: \\n' + stackFromLastFewNotifications.join('\\n'));\n  }\n}\nclass ChangeDetectionSchedulerImpl {\n  appRef = inject(ApplicationRef);\n  taskService = inject(PendingTasksInternal);\n  ngZone = inject(NgZone);\n  zonelessEnabled = inject(ZONELESS_ENABLED);\n  tracing = inject(TracingService, {\n    optional: true\n  });\n  disableScheduling = inject(ZONELESS_SCHEDULER_DISABLED, {\n    optional: true\n  }) ?? false;\n  zoneIsDefined = typeof Zone !== 'undefined' && !!Zone.root.run;\n  schedulerTickApplyArgs = [{\n    data: {\n      '__scheduler_tick__': true\n    }\n  }];\n  subscriptions = new Subscription();\n  angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;\n  scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {\n    optional: true\n  }) ?? false);\n  cancelScheduledCallback = null;\n  useMicrotaskScheduler = false;\n  runningTick = false;\n  pendingRenderTaskId = null;\n  constructor() {\n    this.subscriptions.add(this.appRef.afterTick.subscribe(() => {\n      // If the scheduler isn't running a tick but the application ticked, that means\n      // someone called ApplicationRef.tick manually. In this case, we should cancel\n      // any change detections that had been scheduled so we don't run an extra one.\n      if (!this.runningTick) {\n        this.cleanup();\n      }\n    }));\n    this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {\n      // If the zone becomes unstable when we're not running tick (this happens from the zone.run),\n      // we should cancel any scheduled change detection here because at this point we\n      // know that the zone will stabilize at some point and run change detection itself.\n      if (!this.runningTick) {\n        this.cleanup();\n      }\n    }));\n    // TODO(atscott): These conditions will need to change when zoneless is the default\n    // Instead, they should flip to checking if ZoneJS scheduling is provided\n    this.disableScheduling ||= !this.zonelessEnabled && (\n    // NoopNgZone without enabling zoneless means no scheduling whatsoever\n    this.ngZone instanceof NoopNgZone ||\n    // The same goes for the lack of Zone without enabling zoneless scheduling\n    !this.zoneIsDefined);\n  }\n  notify(source) {\n    if (!this.zonelessEnabled && source === 5 /* NotificationSource.Listener */) {\n      // When the notification comes from a listener, we skip the notification unless the\n      // application has enabled zoneless. Ideally, listeners wouldn't notify the scheduler at all\n      // automatically. We do not know that a developer made a change in the listener callback that\n      // requires an `ApplicationRef.tick` (synchronize templates / run render hooks). We do this\n      // only for an easier migration from OnPush components to zoneless. Because listeners are\n      // usually executed inside the Angular zone and listeners automatically call `markViewDirty`,\n      // developers never needed to manually use `ChangeDetectorRef.markForCheck` or some other API\n      // to make listener callbacks work correctly with `OnPush` components.\n      return;\n    }\n    let force = false;\n    switch (source) {\n      case 0 /* NotificationSource.MarkAncestorsForTraversal */:\n        {\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          break;\n        }\n      case 3 /* NotificationSource.DebugApplyChanges */:\n      case 2 /* NotificationSource.DeferBlockStateUpdate */:\n      case 4 /* NotificationSource.MarkForCheck */:\n      case 5 /* NotificationSource.Listener */:\n      case 1 /* NotificationSource.SetInput */:\n        {\n          this.appRef.dirtyFlags |= 4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;\n          break;\n        }\n      case 8 /* NotificationSource.DeferredRenderHook */:\n        {\n          // Render hooks are \"deferred\" when they're triggered from other render hooks. Using the\n          // deferred dirty flags ensures that adding new hooks doesn't automatically trigger a loop\n          // inside tick().\n          this.appRef.deferredDirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n          break;\n        }\n      case 6 /* NotificationSource.CustomElement */:\n        {\n          // We use `ViewTreeTraversal` to ensure we refresh the element even if this is triggered\n          // during CD. In practice this is a no-op since the elements code also calls via a\n          // `markForRefresh()` API which sends `NotificationSource.MarkAncestorsForTraversal` anyway.\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          force = true;\n          break;\n        }\n      case 13 /* NotificationSource.RootEffect */:\n        {\n          this.appRef.dirtyFlags |= 16 /* ApplicationRefDirtyFlags.RootEffects */;\n          // Root effects still force a CD, even if the scheduler is disabled. This ensures that\n          // effects always run, even when triggered from outside the zone when the scheduler is\n          // otherwise disabled.\n          force = true;\n          break;\n        }\n      case 14 /* NotificationSource.ViewEffect */:\n        {\n          // This is technically a no-op, since view effects will also send a\n          // `MarkAncestorsForTraversal` notification. Still, we set this for logical consistency.\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          // View effects still force a CD, even if the scheduler is disabled. This ensures that\n          // effects always run, even when triggered from outside the zone when the scheduler is\n          // otherwise disabled.\n          force = true;\n          break;\n        }\n      case 12 /* NotificationSource.PendingTaskRemoved */:\n        {\n          // Removing a pending task via the public API forces a scheduled tick, ensuring that\n          // stability is async and delayed until there was at least an opportunity to run\n          // application synchronization. This prevents some footguns when working with the\n          // public API for pending tasks where developers attempt to update application state\n          // immediately after removing the last task.\n          force = true;\n          break;\n        }\n      case 10 /* NotificationSource.ViewDetachedFromDOM */:\n      case 9 /* NotificationSource.ViewAttached */:\n      case 7 /* NotificationSource.RenderHook */:\n      case 11 /* NotificationSource.AsyncAnimationsLoaded */:\n      default:\n        {\n          // These notifications only schedule a tick but do not change whether we should refresh\n          // views. Instead, we only need to run render hooks unless another notification from the\n          // other set is also received before `tick` happens.\n          this.appRef.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n        }\n    }\n    // If not already defined, attempt to capture a tracing snapshot of this\n    // notification so that the resulting CD run can be attributed to the\n    // context which produced the notification.\n    this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;\n    if (!this.shouldScheduleTick(force)) {\n      return;\n    }\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (this.useMicrotaskScheduler) {\n        trackMicrotaskNotificationForDebugging();\n      } else {\n        consecutiveMicrotaskNotifications = 0;\n        stackFromLastFewNotifications.length = 0;\n      }\n    }\n    const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;\n    this.pendingRenderTaskId = this.taskService.add();\n    if (this.scheduleInRootZone) {\n      this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));\n    } else {\n      this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));\n    }\n  }\n  shouldScheduleTick(force) {\n    if (this.disableScheduling && !force || this.appRef.destroyed) {\n      return false;\n    }\n    // already scheduled or running\n    if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {\n      return false;\n    }\n    // If we're inside the zone don't bother with scheduler. Zone will stabilize\n    // eventually and run change detection.\n    if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Calls ApplicationRef._tick inside the `NgZone`.\n   *\n   * Calling `tick` directly runs change detection and cancels any change detection that had been\n   * scheduled previously.\n   *\n   * @param shouldRefreshViews Passed directly to `ApplicationRef._tick` and skips straight to\n   *     render hooks when `false`.\n   */\n  tick() {\n    // When ngZone.run below exits, onMicrotaskEmpty may emit if the zone is\n    // stable. We want to prevent double ticking so we track whether the tick is\n    // already running and skip it if so.\n    if (this.runningTick || this.appRef.destroyed) {\n      return;\n    }\n    // If we reach the tick and there is no work to be done in ApplicationRef.tick,\n    // skip it altogether and clean up. There may be no work if, for example, the only\n    // event that notified the scheduler was the removal of a pending task.\n    if (this.appRef.dirtyFlags === 0 /* ApplicationRefDirtyFlags.None */) {\n      this.cleanup();\n      return;\n    }\n    // The scheduler used to pass \"whether to check views\" as a boolean flag instead of setting\n    // fine-grained dirtiness flags, and global checking was always used on the first pass. This\n    // created an interesting edge case: if a notification made a view dirty and then ticked via the\n    // scheduler (and not the zone) a global check was still performed.\n    //\n    // Ideally, this would not be the case, and only zone-based ticks would do global passes.\n    // However this is a breaking change and requires fixes in g3. Until this cleanup can be done,\n    // we add the `ViewTreeGlobal` flag to request a global check if any views are dirty in a\n    // scheduled tick (unless zoneless is enabled, in which case global checks aren't really a\n    // thing).\n    //\n    // TODO(alxhub): clean up and remove this workaround as a breaking change.\n    if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {\n      this.appRef.dirtyFlags |= 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */;\n    }\n    const task = this.taskService.add();\n    try {\n      this.ngZone.run(() => {\n        this.runningTick = true;\n        this.appRef._tick();\n      }, undefined, this.schedulerTickApplyArgs);\n    } catch (e) {\n      this.taskService.remove(task);\n      throw e;\n    } finally {\n      this.cleanup();\n    }\n    // If we're notified of a change within 1 microtask of running change\n    // detection, run another round in the same event loop. This allows code\n    // which uses Promise.resolve (see NgModel) to avoid\n    // ExpressionChanged...Error to still be reflected in a single browser\n    // paint, even if that spans multiple rounds of change detection.\n    this.useMicrotaskScheduler = true;\n    scheduleCallbackWithMicrotask(() => {\n      this.useMicrotaskScheduler = false;\n      this.taskService.remove(task);\n    });\n  }\n  ngOnDestroy() {\n    this.subscriptions.unsubscribe();\n    this.cleanup();\n  }\n  cleanup() {\n    this.runningTick = false;\n    this.cancelScheduledCallback?.();\n    this.cancelScheduledCallback = null;\n    // If this is the last task, the service will synchronously emit a stable\n    // notification. If there is a subscriber that then acts in a way that\n    // tries to notify the scheduler again, we need to be able to respond to\n    // schedule a new change detection. Therefore, we should clear the task ID\n    // before removing it from the pending tasks (or the tasks service should\n    // not synchronously emit stable, similar to how Zone stableness only\n    // happens if it's still stable after a microtask).\n    if (this.pendingRenderTaskId !== null) {\n      const taskId = this.pendingRenderTaskId;\n      this.pendingRenderTaskId = null;\n      this.taskService.remove(taskId);\n    }\n  }\n  static ɵfac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ChangeDetectionSchedulerImpl)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ChangeDetectionSchedulerImpl,\n    factory: ChangeDetectionSchedulerImpl.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n/**\n * Provides change detection without ZoneJS for the application bootstrapped using\n * `bootstrapApplication`.\n *\n * This function allows you to configure the application to not use the state/state changes of\n * ZoneJS to schedule change detection in the application. This will work when ZoneJS is not present\n * on the page at all or if it exists because something else is using it (either another Angular\n * application which uses ZoneJS for scheduling or some other library that relies on ZoneJS).\n *\n * This can also be added to the `TestBed` providers to configure the test environment to more\n * closely match production behavior. This will help give higher confidence that components are\n * compatible with zoneless change detection.\n *\n * ZoneJS uses browser events to trigger change detection. When using this provider, Angular will\n * instead use Angular APIs to schedule change detection. These APIs include:\n *\n * - `ChangeDetectorRef.markForCheck`\n * - `ComponentRef.setInput`\n * - updating a signal that is read in a template\n * - when bound host or template listeners are triggered\n * - attaching a view that was marked dirty by one of the above\n * - removing a view\n * - registering a render hook (templates are only refreshed if render hooks do one of the above)\n *\n * @usageNotes\n * ```ts\n * bootstrapApplication(MyApp, {providers: [\n *   provideExperimentalZonelessChangeDetection(),\n * ]});\n * ```\n *\n * This API is experimental. Neither the shape, nor the underlying behavior is stable and can change\n * in patch versions. There are known feature gaps and API ergonomic considerations. We will iterate\n * on the exact API based on the feedback and our understanding of the problem and solution space.\n *\n * @publicApi\n * @experimental\n * @see [bootstrapApplication](/api/platform-browser/bootstrapApplication)\n */\nfunction provideExperimentalZonelessChangeDetection() {\n  performanceMarkFeature('NgZoneless');\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && typeof Zone !== 'undefined' && Zone) {\n    const message = formatRuntimeError(914 /* RuntimeErrorCode.UNEXPECTED_ZONEJS_PRESENT_IN_ZONELESS_MODE */, `The application is using zoneless change detection, but is still loading Zone.js. ` + `Consider removing Zone.js to get the full benefits of zoneless. ` + `In applications using the Angular CLI, Zone.js is typically included in the \"polyfills\" section of the angular.json file.`);\n    console.warn(message);\n  }\n  return makeEnvironmentProviders([{\n    provide: ChangeDetectionScheduler,\n    useExisting: ChangeDetectionSchedulerImpl\n  }, {\n    provide: NgZone,\n    useClass: NoopNgZone\n  }, {\n    provide: ZONELESS_ENABLED,\n    useValue: true\n  }, {\n    provide: SCHEDULE_IN_ROOT_ZONE,\n    useValue: false\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? [{\n    provide: PROVIDED_ZONELESS,\n    useValue: true\n  }] : []]);\n}\n\n/**\n * Work out the locale from the potential global properties.\n *\n * * Closure Compiler: use `goog.LOCALE`.\n * * Ivy enabled: use `$localize.locale`\n */\nfunction getGlobalLocale() {\n  if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode && typeof goog !== 'undefined' && goog.LOCALE !== 'en') {\n    // * The default `goog.LOCALE` value is `en`, while Angular used `en-US`.\n    // * In order to preserve backwards compatibility, we use Angular default value over\n    //   Closure Compiler's one.\n    return goog.LOCALE;\n  } else {\n    // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE\n    // COMPILE-TIME INLINER.\n    //\n    // * During compile time inlining of translations the expression will be replaced\n    //   with a string literal that is the current locale. Other forms of this expression are not\n    //   guaranteed to be replaced.\n    //\n    // * During runtime translation evaluation, the developer is required to set `$localize.locale`\n    //   if required, or just to provide their own `LOCALE_ID` provider.\n    return typeof $localize !== 'undefined' && $localize.locale || DEFAULT_LOCALE_ID;\n  }\n}\n/**\n * Provide this token to set the locale of your application.\n * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,\n * DecimalPipe and PercentPipe) and by ICU expressions.\n *\n * See the [i18n guide](guide/i18n/locale-id) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { LOCALE_ID } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: LOCALE_ID, useValue: 'en-US' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst LOCALE_ID = new InjectionToken(ngDevMode ? 'LocaleId' : '', {\n  providedIn: 'root',\n  factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale()\n});\n/**\n * Provide this token to set the default currency code your application uses for\n * CurrencyPipe when there is no currency code passed into it. This is only used by\n * CurrencyPipe and has no relation to locale currency. Defaults to USD if not configured.\n *\n * See the [i18n guide](guide/i18n/locale-id) for more information.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * **Deprecation notice:**\n *\n * The default currency code is currently always `USD` but this is deprecated from v9.\n *\n * **In v10 the default currency code will be taken from the current locale.**\n *\n * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in\n * your application `NgModule`:\n *\n * ```ts\n * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}\n * ```\n *\n * </div>\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: DEFAULT_CURRENCY_CODE, useValue: 'EUR' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst DEFAULT_CURRENCY_CODE = new InjectionToken(ngDevMode ? 'DefaultCurrencyCode' : '', {\n  providedIn: 'root',\n  factory: () => USD_CURRENCY_CODE\n});\n/**\n * Use this token at bootstrap to provide the content of your translation file (`xtb`,\n * `xlf` or `xlf2`) when you want to translate your application in another language.\n *\n * See the [i18n guide](guide/i18n/merge) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { TRANSLATIONS } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * // content of your translation file\n * const translations = '....';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: TRANSLATIONS, useValue: translations }]\n * });\n * ```\n *\n * @publicApi\n */\nconst TRANSLATIONS = new InjectionToken(ngDevMode ? 'Translations' : '');\n/**\n * Provide this token at bootstrap to set the format of your {@link TRANSLATIONS}: `xtb`,\n * `xlf` or `xlf2`.\n *\n * See the [i18n guide](guide/i18n/merge) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { TRANSLATIONS_FORMAT } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst TRANSLATIONS_FORMAT = new InjectionToken(ngDevMode ? 'TranslationsFormat' : '');\n/**\n * Use this enum at bootstrap as an option of `bootstrapModule` to define the strategy\n * that the compiler should use in case of missing translations:\n * - Error: throw if you have missing translations.\n * - Warning (default): show a warning in the console and/or shell.\n * - Ignore: do nothing.\n *\n * See the [i18n guide](guide/i18n/merge#report-missing-translations) for more information.\n *\n * @usageNotes\n * ### Example\n * ```ts\n * import { MissingTranslationStrategy } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   missingTranslation: MissingTranslationStrategy.Error\n * });\n * ```\n *\n * @publicApi\n */\nvar MissingTranslationStrategy;\n(function (MissingTranslationStrategy) {\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Error\"] = 0] = \"Error\";\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Warning\"] = 1] = \"Warning\";\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Ignore\"] = 2] = \"Ignore\";\n})(MissingTranslationStrategy || (MissingTranslationStrategy = {}));\n\n// A delay in milliseconds before the scan is run after onLoad, to avoid any\n// potential race conditions with other LCP-related functions. This delay\n// happens outside of the main JavaScript execution and will only effect the timing\n// on when the warning becomes visible in the console.\nconst SCAN_DELAY = 200;\nconst OVERSIZED_IMAGE_TOLERANCE = 1200;\nclass ImagePerformanceWarning {\n  // Map of full image URLs -> original `ngSrc` values.\n  window = null;\n  observer = null;\n  options = inject(IMAGE_CONFIG);\n  isBrowser = inject(PLATFORM_ID) === 'browser';\n  lcpImageUrl;\n  start() {\n    if (!this.isBrowser || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {\n      return;\n    }\n    this.observer = this.initPerformanceObserver();\n    const doc = getDocument();\n    const win = doc.defaultView;\n    if (typeof win !== 'undefined') {\n      this.window = win;\n      // Wait to avoid race conditions where LCP image triggers\n      // load event before it's recorded by the performance observer\n      const waitToScan = () => {\n        setTimeout(this.scanImages.bind(this), SCAN_DELAY);\n      };\n      const setup = () => {\n        // Consider the case when the application is created and destroyed multiple times.\n        // Typically, applications are created instantly once the page is loaded, and the\n        // `window.load` listener is always triggered. However, the `window.load` event will never\n        // be fired if the page is loaded, and the application is created later. Checking for\n        // `readyState` is the easiest way to determine whether the page has been loaded or not.\n        if (doc.readyState === 'complete') {\n          waitToScan();\n        } else {\n          this.window?.addEventListener('load', waitToScan, {\n            once: true\n          });\n        }\n      };\n      // Angular doesn't have to run change detection whenever any asynchronous tasks are invoked in\n      // the scope of this functionality.\n      if (typeof Zone !== 'undefined') {\n        Zone.root.run(() => setup());\n      } else {\n        setup();\n      }\n    }\n  }\n  ngOnDestroy() {\n    this.observer?.disconnect();\n  }\n  initPerformanceObserver() {\n    if (typeof PerformanceObserver === 'undefined') {\n      return null;\n    }\n    const observer = new PerformanceObserver(entryList => {\n      const entries = entryList.getEntries();\n      if (entries.length === 0) return;\n      // We use the latest entry produced by the `PerformanceObserver` as the best\n      // signal on which element is actually an LCP one. As an example, the first image to load on\n      // a page, by virtue of being the only thing on the page so far, is often a LCP candidate\n      // and gets reported by PerformanceObserver, but isn't necessarily the LCP element.\n      const lcpElement = entries[entries.length - 1];\n      // Cast to `any` due to missing `element` on the `LargestContentfulPaint` type of entry.\n      // See https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint\n      const imgSrc = lcpElement.element?.src ?? '';\n      // Exclude `data:` and `blob:` URLs, since they are fetched resources.\n      if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n      this.lcpImageUrl = imgSrc;\n    });\n    observer.observe({\n      type: 'largest-contentful-paint',\n      buffered: true\n    });\n    return observer;\n  }\n  scanImages() {\n    const images = getDocument().querySelectorAll('img');\n    let lcpElementFound,\n      lcpElementLoadedCorrectly = false;\n    images.forEach(image => {\n      if (!this.options?.disableImageSizeWarning) {\n        // Image elements using the NgOptimizedImage directive are excluded,\n        // as that directive has its own version of this check.\n        if (!image.getAttribute('ng-img') && this.isOversized(image)) {\n          logOversizedImageWarning(image.src);\n        }\n      }\n      if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {\n        if (image.src === this.lcpImageUrl) {\n          lcpElementFound = true;\n          if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {\n            // This variable is set to true and never goes back to false to account\n            // for the case where multiple images have the same src url, and some\n            // have lazy loading while others don't.\n            // Also ignore NgOptimizedImage because there's a different warning for that.\n            lcpElementLoadedCorrectly = true;\n          }\n        }\n      }\n    });\n    if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {\n      logLazyLCPWarning(this.lcpImageUrl);\n    }\n  }\n  isOversized(image) {\n    if (!this.window) {\n      return false;\n    }\n    // The `isOversized` check may not be applicable or may require adjustments\n    // for several types of image formats or scenarios. Currently, we specify only\n    // `svg`, but this may also include `gif` since their quality isn’t tied to\n    // dimensions in the same way as raster images.\n    const nonOversizedImageExtentions = [\n    // SVG images are vector-based, which means they can scale\n    // to any size without losing quality.\n    '.svg'];\n    // Convert it to lowercase because this may have uppercase\n    // extensions, such as `IMAGE.SVG`.\n    // We fallback to an empty string because `src` may be `undefined`\n    // if it is explicitly set to `null` by some third-party code\n    // (e.g., `image.src = null`).\n    const imageSource = (image.src || '').toLowerCase();\n    if (nonOversizedImageExtentions.some(extension => imageSource.endsWith(extension))) {\n      return false;\n    }\n    const computedStyle = this.window.getComputedStyle(image);\n    let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n    let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n    const boxSizing = computedStyle.getPropertyValue('box-sizing');\n    const objectFit = computedStyle.getPropertyValue('object-fit');\n    if (objectFit === `cover`) {\n      // Object fit cover may indicate a use case such as a sprite sheet where\n      // this warning does not apply.\n      return false;\n    }\n    if (boxSizing === 'border-box') {\n      // If the image `box-sizing` is set to `border-box`, we adjust the rendered\n      // dimensions by subtracting padding values.\n      const paddingTop = computedStyle.getPropertyValue('padding-top');\n      const paddingRight = computedStyle.getPropertyValue('padding-right');\n      const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n      const paddingLeft = computedStyle.getPropertyValue('padding-left');\n      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n    }\n    const intrinsicWidth = image.naturalWidth;\n    const intrinsicHeight = image.naturalHeight;\n    const recommendedWidth = this.window.devicePixelRatio * renderedWidth;\n    const recommendedHeight = this.window.devicePixelRatio * renderedHeight;\n    const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n    const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n    return oversizedWidth || oversizedHeight;\n  }\n  static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ImagePerformanceWarning)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ImagePerformanceWarning,\n    factory: ImagePerformanceWarning.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nfunction logLazyLCPWarning(src) {\n  console.warn(formatRuntimeError(-913 /* RuntimeErrorCode.IMAGE_PERFORMANCE_WARNING */, `An image with src ${src} is the Largest Contentful Paint (LCP) element ` + `but was given a \"loading\" value of \"lazy\", which can negatively impact ` + `application loading performance. This warning can be addressed by ` + `changing the loading value of the LCP image to \"eager\", or by using the ` + `NgOptimizedImage directive's prioritization utilities. For more ` + `information about addressing or disabling this warning, see ` + `https://angular.dev/errors/NG0913`));\n}\nfunction logOversizedImageWarning(src) {\n  console.warn(formatRuntimeError(-913 /* RuntimeErrorCode.IMAGE_PERFORMANCE_WARNING */, `An image with src ${src} has intrinsic file dimensions much larger than its ` + `rendered size. This can negatively impact application loading performance. ` + `For more information about addressing or disabling this warning, see ` + `https://angular.dev/errors/NG0913`));\n}\n\n/**\n * Internal token that allows to register extra callbacks that should be invoked during the\n * `PlatformRef.destroy` operation. This token is needed to avoid a direct reference to the\n * `PlatformRef` class (i.e. register the callback via `PlatformRef.onDestroy`), thus making the\n * entire class tree-shakeable.\n */\nconst PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? 'PlatformDestroyListeners' : '');\n\n/**\n * InjectionToken to control root component bootstrap behavior.\n *\n * This token is primarily used in Angular's server-side rendering (SSR) scenarios,\n * particularly by the `@angular/ssr` package, to manage whether the root component\n * should be bootstrapped during the application initialization process.\n *\n * ## Purpose:\n * During SSR route extraction, setting this token to `false` prevents Angular from\n * bootstrapping the root component. This avoids unnecessary component rendering,\n * enabling route extraction without requiring additional APIs or triggering\n * component logic.\n *\n * ## Behavior:\n * - **`false`**: Prevents the root component from being bootstrapped.\n * - **`true`** (default): Proceeds with the normal root component bootstrap process.\n *\n * This mechanism ensures SSR can efficiently separate route extraction logic\n * from component rendering.\n */\nconst ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');\nfunction isApplicationBootstrapConfig(config) {\n  return !config.moduleRef;\n}\nfunction bootstrap(config) {\n  const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;\n  const ngZone = envInjector.get(NgZone);\n  return ngZone.run(() => {\n    if (isApplicationBootstrapConfig(config)) {\n      config.r3Injector.resolveInjectorInitializers();\n    } else {\n      config.moduleRef.resolveInjectorInitializers();\n    }\n    const exceptionHandler = envInjector.get(ErrorHandler, null);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (exceptionHandler === null) {\n        const errorMessage = isApplicationBootstrapConfig(config) ? 'No `ErrorHandler` found in the Dependency Injection tree.' : 'No ErrorHandler. Is platform module (BrowserModule) included';\n        throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, errorMessage);\n      }\n      if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {\n        throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' + 'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');\n      }\n    }\n    let onErrorSubscription;\n    ngZone.runOutsideAngular(() => {\n      onErrorSubscription = ngZone.onError.subscribe({\n        next: error => {\n          exceptionHandler.handleError(error);\n        }\n      });\n    });\n    // If the whole platform is destroyed, invoke the `destroy` method\n    // for all bootstrapped applications as well.\n    if (isApplicationBootstrapConfig(config)) {\n      const destroyListener = () => envInjector.destroy();\n      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n      onPlatformDestroyListeners.add(destroyListener);\n      envInjector.onDestroy(() => {\n        onErrorSubscription.unsubscribe();\n        onPlatformDestroyListeners.delete(destroyListener);\n      });\n    } else {\n      const destroyListener = () => config.moduleRef.destroy();\n      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n      onPlatformDestroyListeners.add(destroyListener);\n      config.moduleRef.onDestroy(() => {\n        remove(config.allPlatformModules, config.moduleRef);\n        onErrorSubscription.unsubscribe();\n        onPlatformDestroyListeners.delete(destroyListener);\n      });\n    }\n    return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {\n      const initStatus = envInjector.get(ApplicationInitStatus);\n      initStatus.runInitializers();\n      return initStatus.donePromise.then(() => {\n        // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy\n        const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);\n        setLocaleId(localeId || DEFAULT_LOCALE_ID);\n        const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);\n        if (!enableRootComponentBoostrap) {\n          if (isApplicationBootstrapConfig(config)) {\n            return envInjector.get(ApplicationRef);\n          }\n          config.allPlatformModules.push(config.moduleRef);\n          return config.moduleRef;\n        }\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          const imagePerformanceService = envInjector.get(ImagePerformanceWarning);\n          imagePerformanceService.start();\n        }\n        if (isApplicationBootstrapConfig(config)) {\n          const appRef = envInjector.get(ApplicationRef);\n          if (config.rootComponent !== undefined) {\n            appRef.bootstrap(config.rootComponent);\n          }\n          return appRef;\n        } else {\n          moduleDoBootstrap(config.moduleRef, config.allPlatformModules);\n          return config.moduleRef;\n        }\n      });\n    });\n  });\n}\nfunction moduleDoBootstrap(moduleRef, allPlatformModules) {\n  const appRef = moduleRef.injector.get(ApplicationRef);\n  if (moduleRef._bootstrapComponents.length > 0) {\n    moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));\n  } else if (moduleRef.instance.ngDoBootstrap) {\n    moduleRef.instance.ngDoBootstrap(appRef);\n  } else {\n    throw new RuntimeError(-403 /* RuntimeErrorCode.BOOTSTRAP_COMPONENTS_NOT_FOUND */, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ` + `Please define one of these.`);\n  }\n  allPlatformModules.push(moduleRef);\n}\n\n/**\n * The Angular platform is the entry point for Angular on a web page.\n * Each page has exactly one platform. Services (such as reflection) which are common\n * to every Angular application running on the page are bound in its scope.\n * A page's platform is initialized implicitly when a platform is created using a platform\n * factory such as `PlatformBrowser`, or explicitly by calling the `createPlatform()` function.\n *\n * @publicApi\n */\nclass PlatformRef {\n  _injector;\n  _modules = [];\n  _destroyListeners = [];\n  _destroyed = false;\n  /** @internal */\n  constructor(_injector) {\n    this._injector = _injector;\n  }\n  /**\n   * Creates an instance of an `@NgModule` for the given platform.\n   *\n   * @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function\n   *     argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.\n   */\n  bootstrapModuleFactory(moduleFactory, options) {\n    const scheduleInRootZone = options?.scheduleInRootZone;\n    const ngZoneFactory = () => getNgZone(options?.ngZone, {\n      ...getNgZoneOptions({\n        eventCoalescing: options?.ngZoneEventCoalescing,\n        runCoalescing: options?.ngZoneRunCoalescing\n      }),\n      scheduleInRootZone\n    });\n    const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;\n    const allAppProviders = [internalProvideZoneChangeDetection({\n      ngZoneFactory,\n      ignoreChangesOutsideZone\n    }), {\n      provide: ChangeDetectionScheduler,\n      useExisting: ChangeDetectionSchedulerImpl\n    }];\n    const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);\n    return bootstrap({\n      moduleRef,\n      allPlatformModules: this._modules,\n      platformInjector: this.injector\n    });\n  }\n  /**\n   * Creates an instance of an `@NgModule` for a given platform.\n   *\n   * @usageNotes\n   * ### Simple Example\n   *\n   * ```ts\n   * @NgModule({\n   *   imports: [BrowserModule]\n   * })\n   * class MyModule {}\n   *\n   * let moduleRef = platformBrowser().bootstrapModule(MyModule);\n   * ```\n   *\n   */\n  bootstrapModule(moduleType, compilerOptions = []) {\n    const options = optionsReducer({}, compilerOptions);\n    return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));\n  }\n  /**\n   * Registers a listener to be called when the platform is destroyed.\n   */\n  onDestroy(callback) {\n    this._destroyListeners.push(callback);\n  }\n  /**\n   * Retrieves the platform {@link Injector}, which is the parent injector for\n   * every Angular application on the page and provides singleton providers.\n   */\n  get injector() {\n    return this._injector;\n  }\n  /**\n   * Destroys the current Angular platform and all Angular applications on the page.\n   * Destroys all modules and listeners registered with the platform.\n   */\n  destroy() {\n    if (this._destroyed) {\n      throw new RuntimeError(404 /* RuntimeErrorCode.PLATFORM_ALREADY_DESTROYED */, ngDevMode && 'The platform has already been destroyed!');\n    }\n    this._modules.slice().forEach(module => module.destroy());\n    this._destroyListeners.forEach(listener => listener());\n    const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);\n    if (destroyListeners) {\n      destroyListeners.forEach(listener => listener());\n      destroyListeners.clear();\n    }\n    this._destroyed = true;\n  }\n  /**\n   * Indicates whether this instance was destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformRef)(ɵɵinject(Injector));\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: PlatformRef,\n    factory: PlatformRef.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(PlatformRef, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], () => [{\n    type: Injector\n  }], null);\n})();\nlet _platformInjector = null;\n/**\n * Internal token to indicate whether having multiple bootstrapped platform should be allowed (only\n * one bootstrapped platform is allowed by default). This token helps to support SSR scenarios.\n */\nconst ALLOW_MULTIPLE_PLATFORMS = new InjectionToken(ngDevMode ? 'AllowMultipleToken' : '');\n/**\n * Creates a platform.\n * Platforms must be created on launch using this function.\n *\n * @publicApi\n */\nfunction createPlatform(injector) {\n  if (_platformInjector && !_platformInjector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n    throw new RuntimeError(400 /* RuntimeErrorCode.MULTIPLE_PLATFORMS */, ngDevMode && 'There can be only one platform. Destroy the previous one to create a new one.');\n  }\n  publishDefaultGlobalUtils();\n  publishSignalConfiguration();\n  _platformInjector = injector;\n  const platform = injector.get(PlatformRef);\n  runPlatformInitializers(injector);\n  return platform;\n}\n/**\n * Creates a factory for a platform. Can be used to provide or override `Providers` specific to\n * your application's runtime needs, such as `PLATFORM_INITIALIZER` and `PLATFORM_ID`.\n * @param parentPlatformFactory Another platform factory to modify. Allows you to compose factories\n * to build up configurations that might be required by different libraries or parts of the\n * application.\n * @param name Identifies the new platform factory.\n * @param providers A set of dependency providers for platforms created with the new factory.\n *\n * @publicApi\n */\nfunction createPlatformFactory(parentPlatformFactory, name, providers = []) {\n  const desc = `Platform: ${name}`;\n  const marker = new InjectionToken(desc);\n  return (extraProviders = []) => {\n    let platform = getPlatform();\n    if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n      const platformProviders = [...providers, ...extraProviders, {\n        provide: marker,\n        useValue: true\n      }];\n      if (parentPlatformFactory) {\n        parentPlatformFactory(platformProviders);\n      } else {\n        createPlatform(createPlatformInjector(platformProviders, desc));\n      }\n    }\n    return assertPlatform(marker);\n  };\n}\n/**\n * Helper function to create an instance of a platform injector (that maintains the 'platform'\n * scope).\n */\nfunction createPlatformInjector(providers = [], name) {\n  return Injector.create({\n    name,\n    providers: [{\n      provide: INJECTOR_SCOPE,\n      useValue: 'platform'\n    }, {\n      provide: PLATFORM_DESTROY_LISTENERS,\n      useValue: new Set([() => _platformInjector = null])\n    }, ...providers]\n  });\n}\n/**\n * Checks that there is currently a platform that contains the given token as a provider.\n *\n * @publicApi\n */\nfunction assertPlatform(requiredToken) {\n  const platform = getPlatform();\n  if (!platform) {\n    throw new RuntimeError(401 /* RuntimeErrorCode.PLATFORM_NOT_FOUND */, ngDevMode && 'No platform exists!');\n  }\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && !platform.injector.get(requiredToken, null)) {\n    throw new RuntimeError(400 /* RuntimeErrorCode.MULTIPLE_PLATFORMS */, 'A platform with a different configuration has been created. Please destroy it first.');\n  }\n  return platform;\n}\n/**\n * Returns the current platform.\n *\n * @publicApi\n */\nfunction getPlatform() {\n  return _platformInjector?.get(PlatformRef) ?? null;\n}\n/**\n * Destroys the current Angular platform and all Angular applications on the page.\n * Destroys all modules and listeners registered with the platform.\n *\n * @publicApi\n */\nfunction destroyPlatform() {\n  getPlatform()?.destroy();\n}\n/**\n * The goal of this function is to bootstrap a platform injector,\n * but avoid referencing `PlatformRef` class.\n * This function is needed for bootstrapping a Standalone Component.\n */\nfunction createOrReusePlatformInjector(providers = []) {\n  // If a platform injector already exists, it means that the platform\n  // is already bootstrapped and no additional actions are required.\n  if (_platformInjector) return _platformInjector;\n  publishDefaultGlobalUtils();\n  // Otherwise, setup a new platform injector and run platform initializers.\n  const injector = createPlatformInjector(providers);\n  _platformInjector = injector;\n  publishSignalConfiguration();\n  runPlatformInitializers(injector);\n  return injector;\n}\n/**\n * @description\n * This function is used to provide initialization functions that will be executed upon\n * initialization of the platform injector.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `PLATFORM_INITIALIZER` token which is now deprecated.\n *\n * @see {@link PLATFORM_INITIALIZER}\n *\n * @publicApi\n */\nfunction providePlatformInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: PLATFORM_INITIALIZER,\n    useValue: initializerFn,\n    multi: true\n  }]);\n}\nfunction runPlatformInitializers(injector) {\n  const inits = injector.get(PLATFORM_INITIALIZER, null);\n  runInInjectionContext(injector, () => {\n    inits?.forEach(init => init());\n  });\n}\n\n/**\n * Used to periodically verify no expressions have changed after they were checked.\n *\n * @param options Used to configure when the check will execute.\n *   - `interval` will periodically run exhaustive `checkNoChanges` on application views\n *   - `useNgZoneOnStable` will use ZoneJS to determine when change detection might have run\n *      in an application using ZoneJS to drive change detection. When the `NgZone.onStable` would\n *      have emitted, all views attached to the `ApplicationRef` are checked for changes.\n *   - 'exhaustive' means that all views attached to `ApplicationRef` and all the descendants of those views will be\n *     checked for changes (excluding those subtrees which are detached via `ChangeDetectorRef.detach()`).\n *     This is useful because the check that runs after regular change detection does not work for components using `ChangeDetectionStrategy.OnPush`.\n *     This check is will surface any existing errors hidden by `OnPush` components. By default, this check is exhaustive\n *     and will always check all views, regardless of their \"dirty\" state and `ChangeDetectionStrategy`.\n *\n * When the `useNgZoneOnStable` option is `true`, this function will provide its own `NgZone` implementation and needs\n * to come after any other `NgZone` provider, including `provideZoneChangeDetection()` and `provideExperimentalZonelessChangeDetection()`.\n *\n * @experimental\n * @publicApi\n */\nfunction provideExperimentalCheckNoChangesForDebug(options) {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (options.interval === undefined && !options.useNgZoneOnStable) {\n      throw new Error('Must provide one of `useNgZoneOnStable` or `interval`');\n    }\n    const checkNoChangesMode = options?.exhaustive === false ? CheckNoChangesMode.OnlyDirtyViews : CheckNoChangesMode.Exhaustive;\n    return makeEnvironmentProviders([options?.useNgZoneOnStable ? {\n      provide: NgZone,\n      useFactory: () => new DebugNgZoneForCheckNoChanges(checkNoChangesMode)\n    } : [], options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval, checkNoChangesMode) : [], {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue: () => {\n        if (options?.useNgZoneOnStable && !(inject(NgZone) instanceof DebugNgZoneForCheckNoChanges)) {\n          throw new Error('`provideExperimentalCheckNoChangesForDebug` with `useNgZoneOnStable` must be after any other provider for `NgZone`.');\n        }\n      }\n    }]);\n  } else {\n    return makeEnvironmentProviders([]);\n  }\n}\nclass DebugNgZoneForCheckNoChanges extends NgZone {\n  checkNoChangesMode;\n  applicationRef;\n  scheduler;\n  errorHandler;\n  injector = inject(EnvironmentInjector);\n  constructor(checkNoChangesMode) {\n    const zonelessEnabled = inject(ZONELESS_ENABLED);\n    // Use coalescing to ensure we aren't ever running this check synchronously\n    super({\n      shouldCoalesceEventChangeDetection: true,\n      shouldCoalesceRunChangeDetection: zonelessEnabled\n    });\n    this.checkNoChangesMode = checkNoChangesMode;\n    if (zonelessEnabled) {\n      // prevent emits to ensure code doesn't rely on these\n      this.onMicrotaskEmpty.emit = () => {};\n      this.onStable.emit = () => {\n        this.scheduler ||= this.injector.get(ChangeDetectionSchedulerImpl);\n        if (this.scheduler.pendingRenderTaskId || this.scheduler.runningTick) {\n          return;\n        }\n        this.checkApplicationViews();\n      };\n      this.onUnstable.emit = () => {};\n    } else {\n      this.runOutsideAngular(() => {\n        this.onStable.subscribe(() => {\n          this.checkApplicationViews();\n        });\n      });\n    }\n  }\n  checkApplicationViews() {\n    this.applicationRef ||= this.injector.get(ApplicationRef);\n    for (const view of this.applicationRef.allViews) {\n      try {\n        checkNoChangesInternal(view._lView, this.checkNoChangesMode, view.notifyErrorHandler);\n      } catch (e) {\n        this.errorHandler ||= this.injector.get(ErrorHandler);\n        this.errorHandler.handleError(e);\n      }\n    }\n  }\n}\nfunction exhaustiveCheckNoChangesInterval(interval, checkNoChangesMode) {\n  return {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const applicationRef = inject(ApplicationRef);\n      const errorHandler = inject(ErrorHandler);\n      const scheduler = inject(ChangeDetectionSchedulerImpl);\n      const ngZone = inject(NgZone);\n      return () => {\n        function scheduleCheckNoChanges() {\n          ngZone.runOutsideAngular(() => {\n            setTimeout(() => {\n              if (applicationRef.destroyed) {\n                return;\n              }\n              if (scheduler.pendingRenderTaskId || scheduler.runningTick) {\n                scheduleCheckNoChanges();\n                return;\n              }\n              for (const view of applicationRef.allViews) {\n                try {\n                  checkNoChangesInternal(view._lView, checkNoChangesMode, view.notifyErrorHandler);\n                } catch (e) {\n                  errorHandler.handleError(e);\n                }\n              }\n              scheduleCheckNoChanges();\n            }, interval);\n          });\n        }\n        scheduleCheckNoChanges();\n      };\n    }\n  };\n}\n\n/**\n * Returns whether Angular is in development mode.\n *\n * By default, this is true, unless `enableProdMode` is invoked prior to calling this method or the\n * application is built using the Angular CLI with the `optimization` option.\n * @see {@link cli/build ng build}\n *\n * @publicApi\n */\nfunction isDevMode() {\n  return typeof ngDevMode === 'undefined' || !!ngDevMode;\n}\n/**\n * Disable Angular's development mode, which turns off assertions and other\n * checks within the framework.\n *\n * One important assertion this disables verifies that a change detection pass\n * does not result in additional changes to any bindings (also known as\n * unidirectional data flow).\n *\n * Using this method is discouraged as the Angular CLI will set production mode when using the\n * `optimization` option.\n * @see {@link cli/build ng build}\n *\n * @publicApi\n */\nfunction enableProdMode() {\n  // The below check is there so when ngDevMode is set via terser\n  // `global['ngDevMode'] = false;` is also dropped.\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    _global['ngDevMode'] = false;\n  }\n}\n\n// Public API for render\n\n/**\n * Returns the NgModuleFactory with the given id (specified using [@NgModule.id\n * field](api/core/NgModule#id)), if it exists and has been loaded. Factories for NgModules that do\n * not specify an `id` cannot be retrieved. Throws if an NgModule cannot be found.\n * @publicApi\n * @deprecated Use `getNgModuleById` instead.\n */\nfunction getModuleFactory(id) {\n  const type = getRegisteredNgModuleType(id);\n  if (!type) throw noModuleError(id);\n  return new NgModuleFactory(type);\n}\n/**\n * Returns the NgModule class with the given id (specified using [@NgModule.id\n * field](api/core/NgModule#id)), if it exists and has been loaded. Classes for NgModules that do\n * not specify an `id` cannot be retrieved. Throws if an NgModule cannot be found.\n * @publicApi\n */\nfunction getNgModuleById(id) {\n  const type = getRegisteredNgModuleType(id);\n  if (!type) throw noModuleError(id);\n  return type;\n}\nfunction noModuleError(id) {\n  return new Error(`No module with ID ${id} loaded`);\n}\n\n/**\n * Base class that provides change detection functionality.\n * A change-detection tree collects all views that are to be checked for changes.\n * Use the methods to add and remove views from the tree, initiate change-detection,\n * and explicitly mark views as _dirty_, meaning that they have changed and need to be re-rendered.\n *\n * @see [Using change detection hooks](guide/components/lifecycle#using-change-detection-hooks)\n * @see [Defining custom change detection](guide/components/lifecycle#defining-custom-change-detection)\n *\n * @usageNotes\n *\n * The following examples demonstrate how to modify default change-detection behavior\n * to perform explicit detection when needed.\n *\n * ### Use `markForCheck()` with `CheckOnce` strategy\n *\n * The following example sets the `OnPush` change-detection strategy for a component\n * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check\n * after an interval.\n *\n * {@example core/ts/change_detect/change-detection.ts region='mark-for-check'}\n *\n * ### Detach change detector to limit how often check occurs\n *\n * The following example defines a component with a large list of read-only data\n * that is expected to change constantly, many times per second.\n * To improve performance, we want to check and update the list\n * less often than the changes actually occur. To do that, we detach\n * the component's change detector and perform an explicit local check every five seconds.\n *\n * {@example core/ts/change_detect/change-detection.ts region='detach'}\n *\n *\n * ### Reattaching a detached component\n *\n * The following example creates a component displaying live data.\n * The component detaches its change detector from the main change detector tree\n * when the `live` property is set to false, and reattaches it when the property\n * becomes true.\n *\n * {@example core/ts/change_detect/change-detection.ts region='reattach'}\n *\n * @publicApi\n */\nclass ChangeDetectorRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectChangeDetectorRef;\n}\n/** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */\nfunction injectChangeDetectorRef(flags) {\n  return createViewRef(getCurrentTNode(), getLView(), (flags & 16 /* InternalInjectFlags.ForPipe */) === 16 /* InternalInjectFlags.ForPipe */);\n}\n/**\n * Creates a ViewRef and stores it on the injector as ChangeDetectorRef (public alias).\n *\n * @param tNode The node that is requesting a ChangeDetectorRef\n * @param lView The view to which the node belongs\n * @param isPipe Whether the view is being injected into a pipe.\n * @returns The ChangeDetectorRef to use\n */\nfunction createViewRef(tNode, lView, isPipe) {\n  if (isComponentHost(tNode) && !isPipe) {\n    // The LView represents the location where the component is declared.\n    // Instead we want the LView for the component View and so we need to look it up.\n    const componentView = getComponentLViewByIndex(tNode.index, lView); // look down\n    return new ViewRef$1(componentView, componentView);\n  } else if (tNode.type & (3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {\n    // The LView represents the location where the injection is requested from.\n    // We need to locate the containing LView (in case where the `lView` is an embedded view)\n    const hostComponentView = lView[DECLARATION_COMPONENT_VIEW]; // look up\n    return new ViewRef$1(hostComponentView, lView);\n  }\n  return null;\n}\n\n/**\n * Represents an Angular view.\n *\n * @see [Change detection usage](/api/core/ChangeDetectorRef?tab=usage-notes)\n *\n * @publicApi\n */\nclass ViewRef extends ChangeDetectorRef {}\n/**\n * Represents an Angular view in a view container.\n * An embedded view can be referenced from a component\n * other than the hosting component whose template defines it, or it can be defined\n * independently by a `TemplateRef`.\n *\n * Properties of elements in a view can change, but the structure (number and order) of elements in\n * a view cannot. Change the structure of elements by inserting, moving, or\n * removing nested views in a view container.\n *\n * @see {@link ViewContainerRef}\n *\n * @usageNotes\n *\n * The following template breaks down into two separate `TemplateRef` instances,\n * an outer one and an inner one.\n *\n * ```html\n * Count: {{items.length}}\n * <ul>\n *   <li *ngFor=\"let  item of items\">{{item}}</li>\n * </ul>\n * ```\n *\n * This is the outer `TemplateRef`:\n *\n * ```html\n * Count: {{items.length}}\n * <ul>\n *   <ng-template ngFor let-item [ngForOf]=\"items\"></ng-template>\n * </ul>\n * ```\n *\n * This is the inner `TemplateRef`:\n *\n * ```html\n *   <li>{{item}}</li>\n * ```\n *\n * The outer and inner `TemplateRef` instances are assembled into views as follows:\n *\n * ```html\n * <!-- ViewRef: outer-0 -->\n * Count: 2\n * <ul>\n *   <ng-template view-container-ref></ng-template>\n *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->\n *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->\n * </ul>\n * <!-- /ViewRef: outer-0 -->\n * ```\n * @publicApi\n */\nclass EmbeddedViewRef extends ViewRef {}\n\n// Public API for compiler\n\n// This file exists for easily patching NgModuleFactoryLoader in g3\nvar ng_module_factory_loader_impl = {};\n\n/**\n * @publicApi\n */\nclass DebugEventListener {\n  name;\n  callback;\n  constructor(name, callback) {\n    this.name = name;\n    this.callback = callback;\n  }\n}\n/**\n * @publicApi\n */\nfunction asNativeElements(debugEls) {\n  return debugEls.map(el => el.nativeElement);\n}\n/**\n * @publicApi\n */\nclass DebugNode {\n  /**\n   * The underlying DOM node.\n   */\n  nativeNode;\n  constructor(nativeNode) {\n    this.nativeNode = nativeNode;\n  }\n  /**\n   * The `DebugElement` parent. Will be `null` if this is the root element.\n   */\n  get parent() {\n    const parent = this.nativeNode.parentNode;\n    return parent ? new DebugElement(parent) : null;\n  }\n  /**\n   * The host dependency injector. For example, the root element's component instance injector.\n   */\n  get injector() {\n    return getInjector(this.nativeNode);\n  }\n  /**\n   * The element's own component instance, if it has one.\n   */\n  get componentInstance() {\n    const nativeElement = this.nativeNode;\n    return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));\n  }\n  /**\n   * An object that provides parent context for this element. Often an ancestor component instance\n   * that governs this element.\n   *\n   * When an element is repeated within *ngFor, the context is an `NgForOf` whose `$implicit`\n   * property is the value of the row instance value. For example, the `hero` in `*ngFor=\"let hero\n   * of heroes\"`.\n   */\n  get context() {\n    return getComponent(this.nativeNode) || getContext(this.nativeNode);\n  }\n  /**\n   * The callbacks attached to the component's @Output properties and/or the element's event\n   * properties.\n   */\n  get listeners() {\n    return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');\n  }\n  /**\n   * Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local\n   * variable name.\n   */\n  get references() {\n    return getLocalRefs(this.nativeNode);\n  }\n  /**\n   * This component's injector lookup tokens. Includes the component itself plus the tokens that the\n   * component lists in its providers metadata.\n   */\n  get providerTokens() {\n    return getInjectionTokens(this.nativeNode);\n  }\n}\n/**\n * @publicApi\n *\n * @see [Component testing scenarios](guide/testing/components-scenarios)\n * @see [Basics of testing components](guide/testing/components-basics)\n * @see [Testing utility APIs](guide/testing/utility-apis)\n */\nclass DebugElement extends DebugNode {\n  constructor(nativeNode) {\n    ngDevMode && assertDomNode(nativeNode);\n    super(nativeNode);\n  }\n  /**\n   * The underlying DOM element at the root of the component.\n   */\n  get nativeElement() {\n    return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;\n  }\n  /**\n   * The element tag name, if it is an element.\n   */\n  get name() {\n    const context = getLContext(this.nativeNode);\n    const lView = context ? context.lView : null;\n    if (lView !== null) {\n      const tData = lView[TVIEW].data;\n      const tNode = tData[context.nodeIndex];\n      return tNode.value;\n    } else {\n      return this.nativeNode.nodeName;\n    }\n  }\n  /**\n   *  Gets a map of property names to property values for an element.\n   *\n   *  This map includes:\n   *  - Regular property bindings (e.g. `[id]=\"id\"`)\n   *  - Host property bindings (e.g. `host: { '[id]': \"id\" }`)\n   *  - Interpolated property bindings (e.g. `id=\"{{ value }}\")\n   *\n   *  It does not include:\n   *  - input property bindings (e.g. `[myCustomInput]=\"value\"`)\n   *  - attribute bindings (e.g. `[attr.role]=\"menu\"`)\n   */\n  get properties() {\n    const context = getLContext(this.nativeNode);\n    const lView = context ? context.lView : null;\n    if (lView === null) {\n      return {};\n    }\n    const tData = lView[TVIEW].data;\n    const tNode = tData[context.nodeIndex];\n    const properties = {};\n    // Collect properties from the DOM.\n    copyDomProperties(this.nativeElement, properties);\n    // Collect properties from the bindings. This is needed for animation renderer which has\n    // synthetic properties which don't get reflected into the DOM.\n    collectPropertyBindings(properties, tNode, lView, tData);\n    return properties;\n  }\n  /**\n   *  A map of attribute names to attribute values for an element.\n   */\n  // TODO: replace null by undefined in the return type\n  get attributes() {\n    const attributes = {};\n    const element = this.nativeElement;\n    if (!element) {\n      return attributes;\n    }\n    const context = getLContext(element);\n    const lView = context ? context.lView : null;\n    if (lView === null) {\n      return {};\n    }\n    const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;\n    const lowercaseTNodeAttrs = [];\n    // For debug nodes we take the element's attribute directly from the DOM since it allows us\n    // to account for ones that weren't set via bindings (e.g. ViewEngine keeps track of the ones\n    // that are set through `Renderer2`). The problem is that the browser will lowercase all names,\n    // however since we have the attributes already on the TNode, we can preserve the case by going\n    // through them once, adding them to the `attributes` map and putting their lower-cased name\n    // into an array. Afterwards when we're going through the native DOM attributes, we can check\n    // whether we haven't run into an attribute already through the TNode.\n    if (tNodeAttrs) {\n      let i = 0;\n      while (i < tNodeAttrs.length) {\n        const attrName = tNodeAttrs[i];\n        // Stop as soon as we hit a marker. We only care about the regular attributes. Everything\n        // else will be handled below when we read the final attributes off the DOM.\n        if (typeof attrName !== 'string') break;\n        const attrValue = tNodeAttrs[i + 1];\n        attributes[attrName] = attrValue;\n        lowercaseTNodeAttrs.push(attrName.toLowerCase());\n        i += 2;\n      }\n    }\n    for (const attr of element.attributes) {\n      // Make sure that we don't assign the same attribute both in its\n      // case-sensitive form and the lower-cased one from the browser.\n      if (!lowercaseTNodeAttrs.includes(attr.name)) {\n        attributes[attr.name] = attr.value;\n      }\n    }\n    return attributes;\n  }\n  /**\n   * The inline styles of the DOM element.\n   */\n  // TODO: replace null by undefined in the return type\n  get styles() {\n    const element = this.nativeElement;\n    return element?.style ?? {};\n  }\n  /**\n   * A map containing the class names on the element as keys.\n   *\n   * This map is derived from the `className` property of the DOM element.\n   *\n   * Note: The values of this object will always be `true`. The class key will not appear in the KV\n   * object if it does not exist on the element.\n   *\n   * @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)\n   */\n  get classes() {\n    const result = {};\n    const element = this.nativeElement;\n    // SVG elements return an `SVGAnimatedString` instead of a plain string for the `className`.\n    const className = element.className;\n    const classes = typeof className !== 'string' ? className.baseVal.split(' ') : className.split(' ');\n    classes.forEach(value => result[value] = true);\n    return result;\n  }\n  /**\n   * The `childNodes` of the DOM element as a `DebugNode` array.\n   *\n   * @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)\n   */\n  get childNodes() {\n    const childNodes = this.nativeNode.childNodes;\n    const children = [];\n    for (let i = 0; i < childNodes.length; i++) {\n      const element = childNodes[i];\n      children.push(getDebugNode(element));\n    }\n    return children;\n  }\n  /**\n   * The immediate `DebugElement` children. Walk the tree by descending through `children`.\n   */\n  get children() {\n    const nativeElement = this.nativeElement;\n    if (!nativeElement) return [];\n    const childNodes = nativeElement.children;\n    const children = [];\n    for (let i = 0; i < childNodes.length; i++) {\n      const element = childNodes[i];\n      children.push(getDebugNode(element));\n    }\n    return children;\n  }\n  /**\n   * @returns the first `DebugElement` that matches the predicate at any depth in the subtree.\n   */\n  query(predicate) {\n    const results = this.queryAll(predicate);\n    return results[0] || null;\n  }\n  /**\n   * @returns All `DebugElement` matches for the predicate at any depth in the subtree.\n   */\n  queryAll(predicate) {\n    const matches = [];\n    _queryAll(this, predicate, matches, true);\n    return matches;\n  }\n  /**\n   * @returns All `DebugNode` matches for the predicate at any depth in the subtree.\n   */\n  queryAllNodes(predicate) {\n    const matches = [];\n    _queryAll(this, predicate, matches, false);\n    return matches;\n  }\n  /**\n   * Triggers the event by its name if there is a corresponding listener in the element's\n   * `listeners` collection.\n   *\n   * If the event lacks a listener or there's some other problem, consider\n   * calling `nativeElement.dispatchEvent(eventObject)`.\n   *\n   * @param eventName The name of the event to trigger\n   * @param eventObj The _event object_ expected by the handler\n   *\n   * @see [Testing components scenarios](guide/testing/components-scenarios#trigger-event-handler)\n   */\n  triggerEventHandler(eventName, eventObj) {\n    const node = this.nativeNode;\n    const invokedListeners = [];\n    this.listeners.forEach(listener => {\n      if (listener.name === eventName) {\n        const callback = listener.callback;\n        callback.call(node, eventObj);\n        invokedListeners.push(callback);\n      }\n    });\n    // We need to check whether `eventListeners` exists, because it's something\n    // that Zone.js only adds to `EventTarget` in browser environments.\n    if (typeof node.eventListeners === 'function') {\n      // Note that in Ivy we wrap event listeners with a call to `event.preventDefault` in some\n      // cases. We use '__ngUnwrap__' as a special token that gives us access to the actual event\n      // listener.\n      node.eventListeners(eventName).forEach(listener => {\n        // In order to ensure that we can detect the special __ngUnwrap__ token described above, we\n        // use `toString` on the listener and see if it contains the token. We use this approach to\n        // ensure that it still worked with compiled code since it cannot remove or rename string\n        // literals. We also considered using a special function name (i.e. if(listener.name ===\n        // special)) but that was more cumbersome and we were also concerned the compiled code could\n        // strip the name, turning the condition in to (\"\" === \"\") and always returning true.\n        if (listener.toString().indexOf('__ngUnwrap__') !== -1) {\n          const unwrappedListener = listener('__ngUnwrap__');\n          return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);\n        }\n      });\n    }\n  }\n}\nfunction copyDomProperties(element, properties) {\n  if (element) {\n    // Skip own properties (as those are patched)\n    let obj = Object.getPrototypeOf(element);\n    const NodePrototype = Node.prototype;\n    while (obj !== null && obj !== NodePrototype) {\n      const descriptors = Object.getOwnPropertyDescriptors(obj);\n      for (let key in descriptors) {\n        if (!key.startsWith('__') && !key.startsWith('on')) {\n          // don't include properties starting with `__` and `on`.\n          // `__` are patched values which should not be included.\n          // `on` are listeners which also should not be included.\n          const value = element[key];\n          if (isPrimitiveValue(value)) {\n            properties[key] = value;\n          }\n        }\n      }\n      obj = Object.getPrototypeOf(obj);\n    }\n  }\n}\nfunction isPrimitiveValue(value) {\n  return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' || value === null;\n}\nfunction _queryAll(parentElement, predicate, matches, elementsOnly) {\n  const context = getLContext(parentElement.nativeNode);\n  const lView = context ? context.lView : null;\n  if (lView !== null) {\n    const parentTNode = lView[TVIEW].data[context.nodeIndex];\n    _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);\n  } else {\n    // If the context is null, then `parentElement` was either created with Renderer2 or native DOM\n    // APIs.\n    _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);\n  }\n}\n/**\n * Recursively match the current TNode against the predicate, and goes on with the next ones.\n *\n * @param tNode the current TNode\n * @param lView the LView of this TNode\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  const nativeNode = getNativeByTNodeOrNull(tNode, lView);\n  // For each type of TNode, specific logic is executed.\n  if (tNode.type & (3 /* TNodeType.AnyRNode */ | 8 /* TNodeType.ElementContainer */)) {\n    // Case 1: the TNode is an element\n    // The native node has to be checked.\n    _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n    if (isComponentHost(tNode)) {\n      // If the element is the host of a component, then all nodes in its view have to be processed.\n      // Note: the component's content (tNode.child) will be processed from the insertion points.\n      const componentView = getComponentLViewByIndex(tNode.index, lView);\n      if (componentView && componentView[TVIEW].firstChild) {\n        _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);\n      }\n    } else {\n      if (tNode.child) {\n        // Otherwise, its children have to be processed.\n        _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n      }\n      // We also have to query the DOM directly in order to catch elements inserted through\n      // Renderer2. Note that this is __not__ optimal, because we're walking similar trees multiple\n      // times. ViewEngine could do it more efficiently, because all the insertions go through\n      // Renderer2, however that's not the case in Ivy. This approach is being used because:\n      // 1. Matching the ViewEngine behavior would mean potentially introducing a dependency\n      //    from `Renderer2` to Ivy which could bring Ivy code into ViewEngine.\n      // 2. It allows us to capture nodes that were inserted directly via the DOM.\n      nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);\n    }\n    // In all cases, if a dynamic container exists for this node, each view inside it has to be\n    // processed.\n    const nodeOrContainer = lView[tNode.index];\n    if (isLContainer(nodeOrContainer)) {\n      _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    // Case 2: the TNode is a container\n    // The native node has to be checked.\n    const lContainer = lView[tNode.index];\n    _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);\n    // Each view inside the container has to be processed.\n    _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);\n  } else if (tNode.type & 16 /* TNodeType.Projection */) {\n    // Case 3: the TNode is a projection insertion point (i.e. a <ng-content>).\n    // The nodes projected at this location all need to be processed.\n    const componentView = lView[DECLARATION_COMPONENT_VIEW];\n    const componentHost = componentView[T_HOST];\n    const head = componentHost.projection[tNode.projection];\n    if (Array.isArray(head)) {\n      for (let nativeNode of head) {\n        _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n      }\n    } else if (head) {\n      const nextLView = componentView[PARENT];\n      const nextTNode = nextLView[TVIEW].data[head.index];\n      _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  } else if (tNode.child) {\n    // Case 4: the TNode is a view.\n    _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n  }\n  // We don't want to go to the next sibling of the root node.\n  if (rootNativeNode !== nativeNode) {\n    // To determine the next node to be processed, we need to use the next or the projectionNext\n    // link, depending on whether the current node has been projected.\n    const nextTNode = tNode.flags & 2 /* TNodeFlags.isProjected */ ? tNode.projectionNext : tNode.next;\n    if (nextTNode) {\n      _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  }\n}\n/**\n * Process all TNodes in a given container.\n *\n * @param lContainer the container to be processed\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const childView = lContainer[i];\n    const firstChild = childView[TVIEW].firstChild;\n    if (firstChild) {\n      _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  }\n}\n/**\n * Match the current native node against the predicate.\n *\n * @param nativeNode the current native node\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {\n  if (rootNativeNode !== nativeNode) {\n    const debugNode = getDebugNode(nativeNode);\n    if (!debugNode) {\n      return;\n    }\n    // Type of the \"predicate and \"matches\" array are set based on the value of\n    // the \"elementsOnly\" parameter. TypeScript is not able to properly infer these\n    // types with generics, so we manually cast the parameters accordingly.\n    if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n      matches.push(debugNode);\n    } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n      matches.push(debugNode);\n    }\n  }\n}\n/**\n * Match all the descendants of a DOM node against a predicate.\n *\n * @param nativeNode the current native node\n * @param predicate the predicate to match\n * @param matches the list where matches are stored\n * @param elementsOnly whether only elements should be searched\n */\nfunction _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {\n  const nodes = parentNode.childNodes;\n  const length = nodes.length;\n  for (let i = 0; i < length; i++) {\n    const node = nodes[i];\n    const debugNode = getDebugNode(node);\n    if (debugNode) {\n      if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n        matches.push(debugNode);\n      } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n        matches.push(debugNode);\n      }\n      _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);\n    }\n  }\n}\n/**\n * Iterates through the property bindings for a given node and generates\n * a map of property names to values. This map only contains property bindings\n * defined in templates, not in host bindings.\n */\nfunction collectPropertyBindings(properties, tNode, lView, tData) {\n  let bindingIndexes = tNode.propertyBindings;\n  if (bindingIndexes !== null) {\n    for (let i = 0; i < bindingIndexes.length; i++) {\n      const bindingIndex = bindingIndexes[i];\n      const propMetadata = tData[bindingIndex];\n      const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);\n      const propertyName = metadataParts[0];\n      if (metadataParts.length > 1) {\n        let value = metadataParts[1];\n        for (let j = 1; j < metadataParts.length - 1; j++) {\n          value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];\n        }\n        properties[propertyName] = value;\n      } else {\n        properties[propertyName] = lView[bindingIndex];\n      }\n    }\n  }\n}\n// Need to keep the nodes in a global Map so that multiple angular apps are supported.\nconst _nativeNodeToDebugNode = new Map();\nconst NG_DEBUG_PROPERTY = '__ng_debug__';\n/**\n * @publicApi\n */\nfunction getDebugNode(nativeNode) {\n  if (nativeNode instanceof Node) {\n    if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {\n      nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);\n    }\n    return nativeNode[NG_DEBUG_PROPERTY];\n  }\n  return null;\n}\nfunction getAllDebugNodes() {\n  return Array.from(_nativeNodeToDebugNode.values());\n}\nfunction indexDebugNode(node) {\n  _nativeNodeToDebugNode.set(node.nativeNode, node);\n}\nfunction removeDebugNodeFromIndex(node) {\n  _nativeNodeToDebugNode.delete(node.nativeNode);\n}\nclass DefaultIterableDifferFactory {\n  constructor() {}\n  supports(obj) {\n    return isListLikeIterable(obj);\n  }\n  create(trackByFn) {\n    return new DefaultIterableDiffer(trackByFn);\n  }\n}\nconst trackByIdentity = (index, item) => item;\n/**\n * @deprecated v4.0.0 - Should not be part of public API.\n * @publicApi\n */\nclass DefaultIterableDiffer {\n  length = 0;\n  // TODO: confirm the usage of `collection` as it's unused, readonly and on a non public API.\n  collection;\n  // Keeps track of the used records at any point in time (during & across `_check()` calls)\n  _linkedRecords = null;\n  // Keeps track of the removed records at any point in time during `_check()` calls.\n  _unlinkedRecords = null;\n  _previousItHead = null;\n  _itHead = null;\n  _itTail = null;\n  _additionsHead = null;\n  _additionsTail = null;\n  _movesHead = null;\n  _movesTail = null;\n  _removalsHead = null;\n  _removalsTail = null;\n  // Keeps track of records where custom track by is the same, but item identity has changed\n  _identityChangesHead = null;\n  _identityChangesTail = null;\n  _trackByFn;\n  constructor(trackByFn) {\n    this._trackByFn = trackByFn || trackByIdentity;\n  }\n  forEachItem(fn) {\n    let record;\n    for (record = this._itHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n  forEachOperation(fn) {\n    let nextIt = this._itHead;\n    let nextRemove = this._removalsHead;\n    let addRemoveOffset = 0;\n    let moveOffsets = null;\n    while (nextIt || nextRemove) {\n      // Figure out which is the next record to process\n      // Order: remove, add, move\n      const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;\n      const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n      const currentIndex = record.currentIndex;\n      // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary\n      if (record === nextRemove) {\n        addRemoveOffset--;\n        nextRemove = nextRemove._nextRemoved;\n      } else {\n        nextIt = nextIt._next;\n        if (record.previousIndex == null) {\n          addRemoveOffset++;\n        } else {\n          // INVARIANT:  currentIndex < previousIndex\n          if (!moveOffsets) moveOffsets = [];\n          const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n          const localCurrentIndex = currentIndex - addRemoveOffset;\n          if (localMovePreviousIndex != localCurrentIndex) {\n            for (let i = 0; i < localMovePreviousIndex; i++) {\n              const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;\n              const index = offset + i;\n              if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n                moveOffsets[i] = offset + 1;\n              }\n            }\n            const previousIndex = record.previousIndex;\n            moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n          }\n        }\n      }\n      if (adjPreviousIndex !== currentIndex) {\n        fn(record, adjPreviousIndex, currentIndex);\n      }\n    }\n  }\n  forEachPreviousItem(fn) {\n    let record;\n    for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n  forEachAddedItem(fn) {\n    let record;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n  forEachMovedItem(fn) {\n    let record;\n    for (record = this._movesHead; record !== null; record = record._nextMoved) {\n      fn(record);\n    }\n  }\n  forEachRemovedItem(fn) {\n    let record;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n  forEachIdentityChange(fn) {\n    let record;\n    for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n      fn(record);\n    }\n  }\n  diff(collection) {\n    if (collection == null) collection = [];\n    if (!isListLikeIterable(collection)) {\n      throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);\n    }\n    if (this.check(collection)) {\n      return this;\n    } else {\n      return null;\n    }\n  }\n  onDestroy() {}\n  check(collection) {\n    this._reset();\n    let record = this._itHead;\n    let mayBeDirty = false;\n    let index;\n    let item;\n    let itemTrackBy;\n    if (Array.isArray(collection)) {\n      this.length = collection.length;\n      for (let index = 0; index < this.length; index++) {\n        item = collection[index];\n        itemTrackBy = this._trackByFn(index, item);\n        if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n          record = this._mismatch(record, item, itemTrackBy, index);\n          mayBeDirty = true;\n        } else {\n          if (mayBeDirty) {\n            // TODO(misko): can we limit this to duplicates only?\n            record = this._verifyReinsertion(record, item, itemTrackBy, index);\n          }\n          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        }\n        record = record._next;\n      }\n    } else {\n      index = 0;\n      iterateListLike(collection, item => {\n        itemTrackBy = this._trackByFn(index, item);\n        if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n          record = this._mismatch(record, item, itemTrackBy, index);\n          mayBeDirty = true;\n        } else {\n          if (mayBeDirty) {\n            // TODO(misko): can we limit this to duplicates only?\n            record = this._verifyReinsertion(record, item, itemTrackBy, index);\n          }\n          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        }\n        record = record._next;\n        index++;\n      });\n      this.length = index;\n    }\n    this._truncate(record);\n    this.collection = collection;\n    return this.isDirty;\n  }\n  /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\n   * changes.\n   */\n  get isDirty() {\n    return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;\n  }\n  /**\n   * Reset the state of the change objects to show no changes. This means set previousKey to\n   * currentKey, and clear all of the queues (additions, moves, removals).\n   * Set the previousIndexes of moved and added items to their currentIndexes\n   * Reset the list of additions, moves and removals\n   *\n   * @internal\n   */\n  _reset() {\n    if (this.isDirty) {\n      let record;\n      for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        record.previousIndex = record.currentIndex;\n      }\n      this._additionsHead = this._additionsTail = null;\n      for (record = this._movesHead; record !== null; record = record._nextMoved) {\n        record.previousIndex = record.currentIndex;\n      }\n      this._movesHead = this._movesTail = null;\n      this._removalsHead = this._removalsTail = null;\n      this._identityChangesHead = this._identityChangesTail = null;\n      // TODO(vicb): when assert gets supported\n      // assert(!this.isDirty);\n    }\n  }\n  /**\n   * This is the core function which handles differences between collections.\n   *\n   * - `record` is the record which we saw at this position last time. If null then it is a new\n   *   item.\n   * - `item` is the current item in the collection\n   * - `index` is the position of the item in the collection\n   *\n   * @internal\n   */\n  _mismatch(record, item, itemTrackBy, index) {\n    // The previous record after which we will append the current one.\n    let previousRecord;\n    if (record === null) {\n      previousRecord = this._itTail;\n    } else {\n      previousRecord = record._prev;\n      // Remove the record from the collection since we know it does not match the item.\n      this._remove(record);\n    }\n    // See if we have evicted the item, which used to be at some anterior position of _itHead list.\n    record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n    if (record !== null) {\n      // It is an item which we have evicted earlier: reinsert it back into the list.\n      // But first we need to check if identity changed, so we can update in view if necessary.\n      if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n      this._reinsertAfter(record, previousRecord, index);\n    } else {\n      // Attempt to see if the item is at some posterior position of _itHead list.\n      record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n      if (record !== null) {\n        // We have the item in _itHead at/after `index` position. We need to move it forward in the\n        // collection.\n        // But first we need to check if identity changed, so we can update in view if necessary.\n        if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        this._moveAfter(record, previousRecord, index);\n      } else {\n        // It is a new item: add it.\n        record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);\n      }\n    }\n    return record;\n  }\n  /**\n   * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\n   *\n   * Use case: `[a, a]` => `[b, a, a]`\n   *\n   * If we did not have this check then the insertion of `b` would:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) leave `a` at index `1` as is. <-- this is wrong!\n   *   3) reinsert `a` at index 2. <-- this is wrong!\n   *\n   * The correct behavior is:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) reinsert `a` at index 1.\n   *   3) move `a` at from `1` to `2`.\n   *\n   *\n   * Double check that we have not evicted a duplicate item. We need to check if the item type may\n   * have already been removed:\n   * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\n   * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\n   * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\n   * at the end.\n   *\n   * @internal\n   */\n  _verifyReinsertion(record, item, itemTrackBy, index) {\n    let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n    if (reinsertRecord !== null) {\n      record = this._reinsertAfter(reinsertRecord, record._prev, index);\n    } else if (record.currentIndex != index) {\n      record.currentIndex = index;\n      this._addToMoves(record, index);\n    }\n    return record;\n  }\n  /**\n   * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection\n   *\n   * - `record` The first excess {@link IterableChangeRecord_}.\n   *\n   * @internal\n   */\n  _truncate(record) {\n    // Anything after that needs to be removed;\n    while (record !== null) {\n      const nextRecord = record._next;\n      this._addToRemovals(this._unlink(record));\n      record = nextRecord;\n    }\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.clear();\n    }\n    if (this._additionsTail !== null) {\n      this._additionsTail._nextAdded = null;\n    }\n    if (this._movesTail !== null) {\n      this._movesTail._nextMoved = null;\n    }\n    if (this._itTail !== null) {\n      this._itTail._next = null;\n    }\n    if (this._removalsTail !== null) {\n      this._removalsTail._nextRemoved = null;\n    }\n    if (this._identityChangesTail !== null) {\n      this._identityChangesTail._nextIdentityChange = null;\n    }\n  }\n  /** @internal */\n  _reinsertAfter(record, prevRecord, index) {\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.remove(record);\n    }\n    const prev = record._prevRemoved;\n    const next = record._nextRemoved;\n    if (prev === null) {\n      this._removalsHead = next;\n    } else {\n      prev._nextRemoved = next;\n    }\n    if (next === null) {\n      this._removalsTail = prev;\n    } else {\n      next._prevRemoved = prev;\n    }\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n  /** @internal */\n  _moveAfter(record, prevRecord, index) {\n    this._unlink(record);\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n  /** @internal */\n  _addAfter(record, prevRecord, index) {\n    this._insertAfter(record, prevRecord, index);\n    if (this._additionsTail === null) {\n      // TODO(vicb):\n      // assert(this._additionsHead === null);\n      this._additionsTail = this._additionsHead = record;\n    } else {\n      // TODO(vicb):\n      // assert(_additionsTail._nextAdded === null);\n      // assert(record._nextAdded === null);\n      this._additionsTail = this._additionsTail._nextAdded = record;\n    }\n    return record;\n  }\n  /** @internal */\n  _insertAfter(record, prevRecord, index) {\n    // TODO(vicb):\n    // assert(record != prevRecord);\n    // assert(record._next === null);\n    // assert(record._prev === null);\n    const next = prevRecord === null ? this._itHead : prevRecord._next;\n    // TODO(vicb):\n    // assert(next != record);\n    // assert(prevRecord != record);\n    record._next = next;\n    record._prev = prevRecord;\n    if (next === null) {\n      this._itTail = record;\n    } else {\n      next._prev = record;\n    }\n    if (prevRecord === null) {\n      this._itHead = record;\n    } else {\n      prevRecord._next = record;\n    }\n    if (this._linkedRecords === null) {\n      this._linkedRecords = new _DuplicateMap();\n    }\n    this._linkedRecords.put(record);\n    record.currentIndex = index;\n    return record;\n  }\n  /** @internal */\n  _remove(record) {\n    return this._addToRemovals(this._unlink(record));\n  }\n  /** @internal */\n  _unlink(record) {\n    if (this._linkedRecords !== null) {\n      this._linkedRecords.remove(record);\n    }\n    const prev = record._prev;\n    const next = record._next;\n    // TODO(vicb):\n    // assert((record._prev = null) === null);\n    // assert((record._next = null) === null);\n    if (prev === null) {\n      this._itHead = next;\n    } else {\n      prev._next = next;\n    }\n    if (next === null) {\n      this._itTail = prev;\n    } else {\n      next._prev = prev;\n    }\n    return record;\n  }\n  /** @internal */\n  _addToMoves(record, toIndex) {\n    // TODO(vicb):\n    // assert(record._nextMoved === null);\n    if (record.previousIndex === toIndex) {\n      return record;\n    }\n    if (this._movesTail === null) {\n      // TODO(vicb):\n      // assert(_movesHead === null);\n      this._movesTail = this._movesHead = record;\n    } else {\n      // TODO(vicb):\n      // assert(_movesTail._nextMoved === null);\n      this._movesTail = this._movesTail._nextMoved = record;\n    }\n    return record;\n  }\n  _addToRemovals(record) {\n    if (this._unlinkedRecords === null) {\n      this._unlinkedRecords = new _DuplicateMap();\n    }\n    this._unlinkedRecords.put(record);\n    record.currentIndex = null;\n    record._nextRemoved = null;\n    if (this._removalsTail === null) {\n      // TODO(vicb):\n      // assert(_removalsHead === null);\n      this._removalsTail = this._removalsHead = record;\n      record._prevRemoved = null;\n    } else {\n      // TODO(vicb):\n      // assert(_removalsTail._nextRemoved === null);\n      // assert(record._nextRemoved === null);\n      record._prevRemoved = this._removalsTail;\n      this._removalsTail = this._removalsTail._nextRemoved = record;\n    }\n    return record;\n  }\n  /** @internal */\n  _addIdentityChange(record, item) {\n    record.item = item;\n    if (this._identityChangesTail === null) {\n      this._identityChangesTail = this._identityChangesHead = record;\n    } else {\n      this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n    }\n    return record;\n  }\n}\nclass IterableChangeRecord_ {\n  item;\n  trackById;\n  currentIndex = null;\n  previousIndex = null;\n  /** @internal */\n  _nextPrevious = null;\n  /** @internal */\n  _prev = null;\n  /** @internal */\n  _next = null;\n  /** @internal */\n  _prevDup = null;\n  /** @internal */\n  _nextDup = null;\n  /** @internal */\n  _prevRemoved = null;\n  /** @internal */\n  _nextRemoved = null;\n  /** @internal */\n  _nextAdded = null;\n  /** @internal */\n  _nextMoved = null;\n  /** @internal */\n  _nextIdentityChange = null;\n  constructor(item, trackById) {\n    this.item = item;\n    this.trackById = trackById;\n  }\n}\n// A linked list of IterableChangeRecords with the same IterableChangeRecord_.item\nclass _DuplicateItemRecordList {\n  /** @internal */\n  _head = null;\n  /** @internal */\n  _tail = null;\n  /**\n   * Append the record to the list of duplicates.\n   *\n   * Note: by design all records in the list of duplicates hold the same value in record.item.\n   */\n  add(record) {\n    if (this._head === null) {\n      this._head = this._tail = record;\n      record._nextDup = null;\n      record._prevDup = null;\n    } else {\n      // TODO(vicb):\n      // assert(record.item ==  _head.item ||\n      //       record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);\n      this._tail._nextDup = record;\n      record._prevDup = this._tail;\n      record._nextDup = null;\n      this._tail = record;\n    }\n  }\n  // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and\n  // IterableChangeRecord_.currentIndex >= atOrAfterIndex\n  get(trackById, atOrAfterIndex) {\n    let record;\n    for (record = this._head; record !== null; record = record._nextDup) {\n      if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {\n        return record;\n      }\n    }\n    return null;\n  }\n  /**\n   * Remove one {@link IterableChangeRecord_} from the list of duplicates.\n   *\n   * Returns whether the list of duplicates is empty.\n   */\n  remove(record) {\n    // TODO(vicb):\n    // assert(() {\n    //  // verify that the record being removed is in the list.\n    //  for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {\n    //    if (identical(cursor, record)) return true;\n    //  }\n    //  return false;\n    //});\n    const prev = record._prevDup;\n    const next = record._nextDup;\n    if (prev === null) {\n      this._head = next;\n    } else {\n      prev._nextDup = next;\n    }\n    if (next === null) {\n      this._tail = prev;\n    } else {\n      next._prevDup = prev;\n    }\n    return this._head === null;\n  }\n}\nclass _DuplicateMap {\n  map = new Map();\n  put(record) {\n    const key = record.trackById;\n    let duplicates = this.map.get(key);\n    if (!duplicates) {\n      duplicates = new _DuplicateItemRecordList();\n      this.map.set(key, duplicates);\n    }\n    duplicates.add(record);\n  }\n  /**\n   * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we\n   * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.\n   *\n   * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\n   * have any more `a`s needs to return the second `a`.\n   */\n  get(trackById, atOrAfterIndex) {\n    const key = trackById;\n    const recordList = this.map.get(key);\n    return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n  }\n  /**\n   * Removes a {@link IterableChangeRecord_} from the list of duplicates.\n   *\n   * The list of duplicates also is removed from the map if it gets empty.\n   */\n  remove(record) {\n    const key = record.trackById;\n    const recordList = this.map.get(key);\n    // Remove the list of duplicates when it gets empty\n    if (recordList.remove(record)) {\n      this.map.delete(key);\n    }\n    return record;\n  }\n  get isEmpty() {\n    return this.map.size === 0;\n  }\n  clear() {\n    this.map.clear();\n  }\n}\nfunction getPreviousIndex(item, addRemoveOffset, moveOffsets) {\n  const previousIndex = item.previousIndex;\n  if (previousIndex === null) return previousIndex;\n  let moveOffset = 0;\n  if (moveOffsets && previousIndex < moveOffsets.length) {\n    moveOffset = moveOffsets[previousIndex];\n  }\n  return previousIndex + addRemoveOffset + moveOffset;\n}\nclass DefaultKeyValueDifferFactory {\n  constructor() {}\n  supports(obj) {\n    return obj instanceof Map || isJsObject(obj);\n  }\n  create() {\n    return new DefaultKeyValueDiffer();\n  }\n}\nclass DefaultKeyValueDiffer {\n  _records = new Map();\n  _mapHead = null;\n  // _appendAfter is used in the check loop\n  _appendAfter = null;\n  _previousMapHead = null;\n  _changesHead = null;\n  _changesTail = null;\n  _additionsHead = null;\n  _additionsTail = null;\n  _removalsHead = null;\n  _removalsTail = null;\n  get isDirty() {\n    return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;\n  }\n  forEachItem(fn) {\n    let record;\n    for (record = this._mapHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n  forEachPreviousItem(fn) {\n    let record;\n    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n  forEachChangedItem(fn) {\n    let record;\n    for (record = this._changesHead; record !== null; record = record._nextChanged) {\n      fn(record);\n    }\n  }\n  forEachAddedItem(fn) {\n    let record;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n  forEachRemovedItem(fn) {\n    let record;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n  diff(map) {\n    if (!map) {\n      map = new Map();\n    } else if (!(map instanceof Map || isJsObject(map))) {\n      throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && `Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);\n    }\n    return this.check(map) ? this : null;\n  }\n  onDestroy() {}\n  /**\n   * Check the current state of the map vs the previous.\n   * The algorithm is optimised for when the keys do no change.\n   */\n  check(map) {\n    this._reset();\n    let insertBefore = this._mapHead;\n    this._appendAfter = null;\n    this._forEach(map, (value, key) => {\n      if (insertBefore && insertBefore.key === key) {\n        this._maybeAddToChanges(insertBefore, value);\n        this._appendAfter = insertBefore;\n        insertBefore = insertBefore._next;\n      } else {\n        const record = this._getOrCreateRecordForKey(key, value);\n        insertBefore = this._insertBeforeOrAppend(insertBefore, record);\n      }\n    });\n    // Items remaining at the end of the list have been deleted\n    if (insertBefore) {\n      if (insertBefore._prev) {\n        insertBefore._prev._next = null;\n      }\n      this._removalsHead = insertBefore;\n      for (let record = insertBefore; record !== null; record = record._nextRemoved) {\n        if (record === this._mapHead) {\n          this._mapHead = null;\n        }\n        this._records.delete(record.key);\n        record._nextRemoved = record._next;\n        record.previousValue = record.currentValue;\n        record.currentValue = null;\n        record._prev = null;\n        record._next = null;\n      }\n    }\n    // Make sure tails have no next records from previous runs\n    if (this._changesTail) this._changesTail._nextChanged = null;\n    if (this._additionsTail) this._additionsTail._nextAdded = null;\n    return this.isDirty;\n  }\n  /**\n   * Inserts a record before `before` or append at the end of the list when `before` is null.\n   *\n   * Notes:\n   * - This method appends at `this._appendAfter`,\n   * - This method updates `this._appendAfter`,\n   * - The return value is the new value for the insertion pointer.\n   */\n  _insertBeforeOrAppend(before, record) {\n    if (before) {\n      const prev = before._prev;\n      record._next = before;\n      record._prev = prev;\n      before._prev = record;\n      if (prev) {\n        prev._next = record;\n      }\n      if (before === this._mapHead) {\n        this._mapHead = record;\n      }\n      this._appendAfter = before;\n      return before;\n    }\n    if (this._appendAfter) {\n      this._appendAfter._next = record;\n      record._prev = this._appendAfter;\n    } else {\n      this._mapHead = record;\n    }\n    this._appendAfter = record;\n    return null;\n  }\n  _getOrCreateRecordForKey(key, value) {\n    if (this._records.has(key)) {\n      const record = this._records.get(key);\n      this._maybeAddToChanges(record, value);\n      const prev = record._prev;\n      const next = record._next;\n      if (prev) {\n        prev._next = next;\n      }\n      if (next) {\n        next._prev = prev;\n      }\n      record._next = null;\n      record._prev = null;\n      return record;\n    }\n    const record = new KeyValueChangeRecord_(key);\n    this._records.set(key, record);\n    record.currentValue = value;\n    this._addToAdditions(record);\n    return record;\n  }\n  /** @internal */\n  _reset() {\n    if (this.isDirty) {\n      let record;\n      // let `_previousMapHead` contain the state of the map before the changes\n      this._previousMapHead = this._mapHead;\n      for (record = this._previousMapHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n      // Update `record.previousValue` with the value of the item before the changes\n      // We need to update all changed items (that's those which have been added and changed)\n      for (record = this._changesHead; record !== null; record = record._nextChanged) {\n        record.previousValue = record.currentValue;\n      }\n      for (record = this._additionsHead; record != null; record = record._nextAdded) {\n        record.previousValue = record.currentValue;\n      }\n      this._changesHead = this._changesTail = null;\n      this._additionsHead = this._additionsTail = null;\n      this._removalsHead = null;\n    }\n  }\n  // Add the record or a given key to the list of changes only when the value has actually changed\n  _maybeAddToChanges(record, newValue) {\n    if (!Object.is(newValue, record.currentValue)) {\n      record.previousValue = record.currentValue;\n      record.currentValue = newValue;\n      this._addToChanges(record);\n    }\n  }\n  _addToAdditions(record) {\n    if (this._additionsHead === null) {\n      this._additionsHead = this._additionsTail = record;\n    } else {\n      this._additionsTail._nextAdded = record;\n      this._additionsTail = record;\n    }\n  }\n  _addToChanges(record) {\n    if (this._changesHead === null) {\n      this._changesHead = this._changesTail = record;\n    } else {\n      this._changesTail._nextChanged = record;\n      this._changesTail = record;\n    }\n  }\n  /** @internal */\n  _forEach(obj, fn) {\n    if (obj instanceof Map) {\n      obj.forEach(fn);\n    } else {\n      Object.keys(obj).forEach(k => fn(obj[k], k));\n    }\n  }\n}\nclass KeyValueChangeRecord_ {\n  key;\n  previousValue = null;\n  currentValue = null;\n  /** @internal */\n  _nextPrevious = null;\n  /** @internal */\n  _next = null;\n  /** @internal */\n  _prev = null;\n  /** @internal */\n  _nextAdded = null;\n  /** @internal */\n  _nextRemoved = null;\n  /** @internal */\n  _nextChanged = null;\n  constructor(key) {\n    this.key = key;\n  }\n}\nfunction defaultIterableDiffersFactory() {\n  return new IterableDiffers([new DefaultIterableDifferFactory()]);\n}\n/**\n * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\n *\n * @publicApi\n */\nclass IterableDiffers {\n  factories;\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: IterableDiffers,\n    providedIn: 'root',\n    factory: defaultIterableDiffersFactory\n  });\n  constructor(factories) {\n    this.factories = factories;\n  }\n  static create(factories, parent) {\n    if (parent != null) {\n      const copied = parent.factories.slice();\n      factories = factories.concat(copied);\n    }\n    return new IterableDiffers(factories);\n  }\n  /**\n   * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the\n   * inherited {@link IterableDiffers} instance with the provided factories and return a new\n   * {@link IterableDiffers} instance.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example shows how to extend an existing list of factories,\n   * which will only be applied to the injector for this component and its children.\n   * This step is all that's required to make a new {@link IterableDiffer} available.\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     IterableDiffers.extend([new ImmutableListDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories) {\n    return {\n      provide: IterableDiffers,\n      useFactory: parent => {\n        // if parent is null, it means that we are in the root injector and we have just overridden\n        // the default injection mechanism for IterableDiffers, in such a case just assume\n        // `defaultIterableDiffersFactory`.\n        return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[IterableDiffers, new SkipSelf(), new Optional()]]\n    };\n  }\n  find(iterable) {\n    const factory = this.factories.find(f => f.supports(iterable));\n    if (factory != null) {\n      return factory;\n    } else {\n      throw new RuntimeError(901 /* RuntimeErrorCode.NO_SUPPORTING_DIFFER_FACTORY */, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);\n    }\n  }\n}\nfunction getTypeNameForDebugging(type) {\n  return type['name'] || typeof type;\n}\nfunction defaultKeyValueDiffersFactory() {\n  return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);\n}\n/**\n * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\n *\n * @publicApi\n */\nclass KeyValueDiffers {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: KeyValueDiffers,\n    providedIn: 'root',\n    factory: defaultKeyValueDiffersFactory\n  });\n  factories;\n  constructor(factories) {\n    this.factories = factories;\n  }\n  static create(factories, parent) {\n    if (parent) {\n      const copied = parent.factories.slice();\n      factories = factories.concat(copied);\n    }\n    return new KeyValueDiffers(factories);\n  }\n  /**\n   * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the\n   * inherited {@link KeyValueDiffers} instance with the provided factories and return a new\n   * {@link KeyValueDiffers} instance.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example shows how to extend an existing list of factories,\n   * which will only be applied to the injector for this component and its children.\n   * This step is all that's required to make a new {@link KeyValueDiffer} available.\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     KeyValueDiffers.extend([new ImmutableMapDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories) {\n    return {\n      provide: KeyValueDiffers,\n      useFactory: parent => {\n        // if parent is null, it means that we are in the root injector and we have just overridden\n        // the default injection mechanism for KeyValueDiffers, in such a case just assume\n        // `defaultKeyValueDiffersFactory`.\n        return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[KeyValueDiffers, new SkipSelf(), new Optional()]]\n    };\n  }\n  find(kv) {\n    const factory = this.factories.find(f => f.supports(kv));\n    if (factory) {\n      return factory;\n    }\n    throw new RuntimeError(901 /* RuntimeErrorCode.NO_SUPPORTING_DIFFER_FACTORY */, ngDevMode && `Cannot find a differ supporting object '${kv}'`);\n  }\n}\n\n/**\n * Structural diffing for `Object`s and `Map`s.\n */\nconst keyValDiff = [new DefaultKeyValueDifferFactory()];\n/**\n * Structural diffing for `Iterable` types such as `Array`s.\n */\nconst iterableDiff = [new DefaultIterableDifferFactory()];\nconst defaultIterableDiffers = new IterableDiffers(iterableDiff);\nconst defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);\n\n/**\n * @module\n * @description\n * Change detection enables data binding in Angular.\n */\n\n/**\n * This platform has to be included in any other platform\n *\n * @publicApi\n */\nconst platformCore = createPlatformFactory(null, 'core', []);\n\n/**\n * Re-exported by `BrowserModule`, which is included automatically in the root\n * `AppModule` when you create a new app with the CLI `new` command. Eagerly injects\n * `ApplicationRef` to instantiate it.\n *\n * @publicApi\n */\nclass ApplicationModule {\n  // Inject ApplicationRef to make it eager...\n  constructor(appRef) {}\n  static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationModule)(ɵɵinject(ApplicationRef));\n  };\n  static ɵmod = /*@__PURE__*/ɵɵdefineNgModule({\n    type: ApplicationModule\n  });\n  static ɵinj = /*@__PURE__*/ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationModule, [{\n    type: NgModule\n  }], () => [{\n    type: ApplicationRef\n  }], null);\n})();\n\n/**\n * The default equality function used for `signal` and `computed`, which uses referential equality.\n */\nfunction defaultEquals(a, b) {\n  return Object.is(a, b);\n}\n\n/**\n * The currently active consumer `ReactiveNode`, if running code in a reactive context.\n *\n * Change this via `setActiveConsumer`.\n */\nlet activeConsumer = null;\nlet inNotificationPhase = false;\n/**\n * Global epoch counter. Incremented whenever a source signal is set.\n */\nlet epoch = 1;\n/**\n * Symbol used to tell `Signal`s apart from other functions.\n *\n * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.\n */\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n  const prev = activeConsumer;\n  activeConsumer = consumer;\n  return prev;\n}\nfunction getActiveConsumer() {\n  return activeConsumer;\n}\nfunction isInNotificationPhase() {\n  return inNotificationPhase;\n}\nfunction isReactive(value) {\n  return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n  version: 0,\n  lastCleanEpoch: 0,\n  dirty: false,\n  producerNode: undefined,\n  producerLastReadVersion: undefined,\n  producerIndexOfThis: undefined,\n  nextProducerIndex: 0,\n  liveConsumerNode: undefined,\n  liveConsumerIndexOfThis: undefined,\n  consumerAllowSignalWrites: false,\n  consumerIsAlwaysLive: false,\n  producerMustRecompute: () => false,\n  producerRecomputeValue: () => {},\n  consumerMarkedDirty: () => {},\n  consumerOnSignalRead: () => {}\n};\n/**\n * Called by implementations when a producer's signal is read.\n */\nfunction producerAccessed(node) {\n  if (inNotificationPhase) {\n    throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n  }\n  if (activeConsumer === null) {\n    // Accessed outside of a reactive context, so nothing to record.\n    return;\n  }\n  activeConsumer.consumerOnSignalRead(node);\n  // This producer is the `idx`th dependency of `activeConsumer`.\n  const idx = activeConsumer.nextProducerIndex++;\n  assertConsumerNode(activeConsumer);\n  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {\n    // There's been a change in producers since the last execution of `activeConsumer`.\n    // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and\n    // replaced with `this`.\n    //\n    // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in\n    // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need\n    // to remove it from the stale producer's `liveConsumer`s.\n    if (consumerIsLive(activeConsumer)) {\n      const staleProducer = activeConsumer.producerNode[idx];\n      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);\n      // At this point, the only record of `staleProducer` is the reference at\n      // `activeConsumer.producerNode[idx]` which will be overwritten below.\n    }\n  }\n  if (activeConsumer.producerNode[idx] !== node) {\n    // We're a new dependency of the consumer (at `idx`).\n    activeConsumer.producerNode[idx] = node;\n    // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a\n    // placeholder value.\n    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;\n  }\n  activeConsumer.producerLastReadVersion[idx] = node.version;\n}\n/**\n * Increment the global epoch counter.\n *\n * Called by source producers (that is, not computeds) whenever their values change.\n */\nfunction producerIncrementEpoch() {\n  epoch++;\n}\n/**\n * Ensure this producer's `version` is up-to-date.\n */\nfunction producerUpdateValueVersion(node) {\n  if (consumerIsLive(node) && !node.dirty) {\n    // A live consumer will be marked dirty by producers, so a clean state means that its version\n    // is guaranteed to be up-to-date.\n    return;\n  }\n  if (!node.dirty && node.lastCleanEpoch === epoch) {\n    // Even non-live consumers can skip polling if they previously found themselves to be clean at\n    // the current epoch, since their dependencies could not possibly have changed (such a change\n    // would've increased the epoch).\n    return;\n  }\n  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n    // None of our producers report a change since the last time they were read, so no\n    // recomputation of our value is necessary, and we can consider ourselves clean.\n    producerMarkClean(node);\n    return;\n  }\n  node.producerRecomputeValue(node);\n  // After recomputing the value, we're no longer dirty.\n  producerMarkClean(node);\n}\n/**\n * Propagate a dirty notification to live consumers of this producer.\n */\nfunction producerNotifyConsumers(node) {\n  if (node.liveConsumerNode === undefined) {\n    return;\n  }\n  // Prevent signal reads when we're updating the graph\n  const prev = inNotificationPhase;\n  inNotificationPhase = true;\n  try {\n    for (const consumer of node.liveConsumerNode) {\n      if (!consumer.dirty) {\n        consumerMarkDirty(consumer);\n      }\n    }\n  } finally {\n    inNotificationPhase = prev;\n  }\n}\n/**\n * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,\n * based on the current consumer context.\n */\nfunction producerUpdatesAllowed() {\n  return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n  node.dirty = true;\n  producerNotifyConsumers(node);\n  node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n  node.dirty = false;\n  node.lastCleanEpoch = epoch;\n}\n/**\n * Prepare this consumer to run a computation in its reactive context.\n *\n * Must be called by subclasses which represent reactive computations, before those computations\n * begin.\n */\nfunction consumerBeforeComputation(node) {\n  node && (node.nextProducerIndex = 0);\n  return setActiveConsumer(node);\n}\n/**\n * Finalize this consumer's state after a reactive computation has run.\n *\n * Must be called by subclasses which represent reactive computations, after those computations\n * have finished.\n */\nfunction consumerAfterComputation(node, prevConsumer) {\n  setActiveConsumer(prevConsumer);\n  if (!node || node.producerNode === undefined || node.producerIndexOfThis === undefined || node.producerLastReadVersion === undefined) {\n    return;\n  }\n  if (consumerIsLive(node)) {\n    // For live consumers, we need to remove the producer -> consumer edge for any stale producers\n    // which weren't dependencies after the recomputation.\n    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate the producer tracking arrays.\n  // Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but\n  // benchmarking has shown that individual pop operations are faster.\n  while (node.producerNode.length > node.nextProducerIndex) {\n    node.producerNode.pop();\n    node.producerLastReadVersion.pop();\n    node.producerIndexOfThis.pop();\n  }\n}\n/**\n * Determine whether this consumer has any dependencies which have changed since the last time\n * they were read.\n */\nfunction consumerPollProducersForChange(node) {\n  assertConsumerNode(node);\n  // Poll producers for change.\n  for (let i = 0; i < node.producerNode.length; i++) {\n    const producer = node.producerNode[i];\n    const seenVersion = node.producerLastReadVersion[i];\n    // First check the versions. A mismatch means that the producer's value is known to have\n    // changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n    // The producer's version is the same as the last time we read it, but it might itself be\n    // stale. Force the producer to recompute its version (calculating a new value if necessary).\n    producerUpdateValueVersion(producer);\n    // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the\n    // versions still match then it has not changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Disconnect this consumer from the graph.\n */\nfunction consumerDestroy(node) {\n  assertConsumerNode(node);\n  if (consumerIsLive(node)) {\n    // Drop all connections from the graph to this node.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate all the arrays to drop all connection from this node to the graph.\n  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;\n  if (node.liveConsumerNode) {\n    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;\n  }\n}\n/**\n * Add `consumer` as a live consumer of this node.\n *\n * Note that this operation is potentially transitive. If this node becomes live, then it becomes\n * a live consumer of all of its current producers.\n */\nfunction producerAddLiveConsumer(node, consumer, indexOfThis) {\n  assertProducerNode(node);\n  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {\n    // When going from 0 to 1 live consumers, we become a live consumer to our producers.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);\n    }\n  }\n  node.liveConsumerIndexOfThis.push(indexOfThis);\n  return node.liveConsumerNode.push(consumer) - 1;\n}\n/**\n * Remove the live consumer at `idx`.\n */\nfunction producerRemoveLiveConsumerAtIndex(node, idx) {\n  assertProducerNode(node);\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {\n    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);\n  }\n  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {\n    // When removing the last live consumer, we will no longer be live. We need to remove\n    // ourselves from our producers' tracking (which may cause consumer-producers to lose\n    // liveness as well).\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single\n  // live consumer, this is a no-op.\n  const lastIdx = node.liveConsumerNode.length - 1;\n  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];\n  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];\n  // Truncate the array.\n  node.liveConsumerNode.length--;\n  node.liveConsumerIndexOfThis.length--;\n  // If the index is still valid, then we need to fix the index pointer from the producer to this\n  // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).\n  if (idx < node.liveConsumerNode.length) {\n    const idxProducer = node.liveConsumerIndexOfThis[idx];\n    const consumer = node.liveConsumerNode[idx];\n    assertConsumerNode(consumer);\n    consumer.producerIndexOfThis[idxProducer] = idx;\n  }\n}\nfunction consumerIsLive(node) {\n  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;\n}\nfunction assertConsumerNode(node) {\n  node.producerNode ??= [];\n  node.producerIndexOfThis ??= [];\n  node.producerLastReadVersion ??= [];\n}\nfunction assertProducerNode(node) {\n  node.liveConsumerNode ??= [];\n  node.liveConsumerIndexOfThis ??= [];\n}\nfunction isConsumerNode(node) {\n  return node.producerNode !== undefined;\n}\n\n/**\n * Create a computed signal which derives a reactive value from an expression.\n */\nfunction createComputed(computation) {\n  const node = Object.create(COMPUTED_NODE);\n  node.computation = computation;\n  const computed = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion(node);\n    // Record that someone looked at this signal.\n    producerAccessed(node);\n    if (node.value === ERRORED$1) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  computed[SIGNAL] = node;\n  return computed;\n}\n/**\n * A dedicated symbol used before a computed value has been calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET$1 = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING$1 = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED$1 = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    value: UNSET$1,\n    dirty: true,\n    error: null,\n    equal: defaultEquals,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET$1 || node.value === COMPUTING$1;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING$1) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING$1;\n      const prevConsumer = consumerBeforeComputation(node);\n      let newValue;\n      try {\n        newValue = node.computation();\n      } catch (err) {\n        newValue = ERRORED$1;\n        node.error = err;\n      } finally {\n        consumerAfterComputation(node, prevConsumer);\n      }\n      if (oldValue !== UNSET$1 && oldValue !== ERRORED$1 && newValue !== ERRORED$1 && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\nfunction defaultThrowError() {\n  throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError() {\n  throwInvalidWriteToSignalErrorFn();\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n  throwInvalidWriteToSignalErrorFn = fn;\n}\n\n/**\n * If set, called after `WritableSignal`s are updated.\n *\n * This hook can be used to achieve various effects, such as running effects synchronously as part\n * of setting a signal.\n */\nlet postSignalSetFn = null;\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction createSignal(initialValue) {\n  const node = Object.create(SIGNAL_NODE);\n  node.value = initialValue;\n  const getter = () => {\n    producerAccessed(node);\n    return node.value;\n  };\n  getter[SIGNAL] = node;\n  return getter;\n}\nfunction setPostSignalSetFn(fn) {\n  const prev = postSignalSetFn;\n  postSignalSetFn = fn;\n  return prev;\n}\nfunction signalGetFn() {\n  producerAccessed(this);\n  return this.value;\n}\nfunction signalSetFn(node, newValue) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  if (!node.equal(node.value, newValue)) {\n    node.value = newValue;\n    signalValueChanged(node);\n  }\n}\nfunction signalUpdateFn(node, updater) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn() {\n  postSignalSetFn?.();\n}\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    equal: defaultEquals,\n    value: undefined\n  };\n})();\nfunction signalValueChanged(node) {\n  node.version++;\n  producerIncrementEpoch();\n  producerNotifyConsumers(node);\n  postSignalSetFn?.();\n}\nfunction createWatch(fn, schedule, allowSignalWrites) {\n  const node = Object.create(WATCH_NODE);\n  if (allowSignalWrites) {\n    node.consumerAllowSignalWrites = true;\n  }\n  node.fn = fn;\n  node.schedule = schedule;\n  const registerOnCleanup = cleanupFn => {\n    node.cleanupFn = cleanupFn;\n  };\n  function isWatchNodeDestroyed(node) {\n    return node.fn === null && node.schedule === null;\n  }\n  function destroyWatchNode(node) {\n    if (!isWatchNodeDestroyed(node)) {\n      consumerDestroy(node); // disconnect watcher from the reactive graph\n      node.cleanupFn();\n      // nullify references to the integration functions to mark node as destroyed\n      node.fn = null;\n      node.schedule = null;\n      node.cleanupFn = NOOP_CLEANUP_FN;\n    }\n  }\n  const run = () => {\n    if (node.fn === null) {\n      // trying to run a destroyed watch is noop\n      return;\n    }\n    if (isInNotificationPhase()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    node.dirty = false;\n    if (node.hasRun && !consumerPollProducersForChange(node)) {\n      return;\n    }\n    node.hasRun = true;\n    const prevConsumer = consumerBeforeComputation(node);\n    try {\n      node.cleanupFn();\n      node.cleanupFn = NOOP_CLEANUP_FN;\n      node.fn(registerOnCleanup);\n    } finally {\n      consumerAfterComputation(node, prevConsumer);\n    }\n  };\n  node.ref = {\n    notify: () => consumerMarkDirty(node),\n    run,\n    cleanup: () => node.cleanupFn(),\n    destroy: () => destroyWatchNode(node),\n    [SIGNAL]: node\n  };\n  return node.ref;\n}\nconst NOOP_CLEANUP_FN = () => {};\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst WATCH_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    consumerIsAlwaysLive: true,\n    consumerAllowSignalWrites: false,\n    consumerMarkedDirty: node => {\n      if (node.schedule !== null) {\n        node.schedule(node.ref);\n      }\n    },\n    hasRun: false,\n    cleanupFn: NOOP_CLEANUP_FN\n  };\n})();\nfunction setAlternateWeakRefImpl(impl) {\n  // TODO: remove this function\n}\n\n/**\n * Internal create application API that implements the core application creation logic and optional\n * bootstrap logic.\n *\n * Platforms (such as `platform-browser`) may require different set of application and platform\n * providers for an application to function correctly. As a result, platforms may use this function\n * internally and supply the necessary providers during the bootstrap, while exposing\n * platform-specific APIs as a part of their public API.\n *\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n */\nfunction internalCreateApplication(config) {\n  try {\n    const {\n      rootComponent,\n      appProviders,\n      platformProviders\n    } = config;\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {\n      assertStandaloneComponentType(rootComponent);\n    }\n    const platformInjector = createOrReusePlatformInjector(platformProviders);\n    // Create root application injector based on a set of providers configured at the platform\n    // bootstrap level as well as providers passed to the bootstrap call by a user.\n    const allAppProviders = [internalProvideZoneChangeDetection({}), {\n      provide: ChangeDetectionScheduler,\n      useExisting: ChangeDetectionSchedulerImpl\n    }, ...(appProviders || [])];\n    const adapter = new EnvironmentNgModuleRefAdapter({\n      providers: allAppProviders,\n      parent: platformInjector,\n      debugName: typeof ngDevMode === 'undefined' || ngDevMode ? 'Environment Injector' : '',\n      // We skip environment initializers because we need to run them inside the NgZone, which\n      // happens after we get the NgZone instance from the Injector.\n      runEnvironmentInitializers: false\n    });\n    return bootstrap({\n      r3Injector: adapter.injector,\n      platformInjector,\n      rootComponent\n    });\n  } catch (e) {\n    return Promise.reject(e);\n  }\n}\n\n/**\n * Retrieves all defer blocks in a given LView.\n *\n * @param lView lView with defer blocks\n * @param deferBlocks defer block aggregator array\n */\nfunction getDeferBlocks(lView, deferBlocks) {\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (isLContainer(lView[i])) {\n      const lContainer = lView[i];\n      // An LContainer may represent an instance of a defer block, in which case\n      // we store it as a result. Otherwise, keep iterating over LContainer views and\n      // look for defer blocks.\n      const isLast = i === tView.bindingStartIndex - 1;\n      if (!isLast) {\n        const tNode = tView.data[i];\n        const tDetails = getTDeferBlockDetails(tView, tNode);\n        if (isTDeferBlockDetails(tDetails)) {\n          deferBlocks.push({\n            lContainer,\n            lView,\n            tNode,\n            tDetails\n          });\n          // This LContainer represents a defer block, so we exit\n          // this iteration and don't inspect views in this LContainer.\n          continue;\n        }\n      }\n      for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n        getDeferBlocks(lContainer[i], deferBlocks);\n      }\n    } else if (isLView(lView[i])) {\n      // This is a component, enter the `getDeferBlocks` recursively.\n      getDeferBlocks(lView[i], deferBlocks);\n    }\n  }\n}\n\n/** Apps in which we've enabled event replay.\n *  This is to prevent initializing event replay more than once per app.\n */\nconst appsWithEventReplay = new WeakSet();\n/**\n * The key that represents all replayable elements that are not in defer blocks.\n */\nconst EAGER_CONTENT_LISTENERS_KEY = '';\n/**\n * A list of block events that need to be replayed\n */\nlet blockEventQueue = [];\n/**\n * Determines whether Event Replay feature should be activated on the client.\n */\nfunction shouldEnableEventReplay(injector) {\n  return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n}\n/**\n * Returns a set of providers required to setup support for event replay.\n * Requires hydration to be enabled separately.\n */\nfunction withEventReplay() {\n  const providers = [{\n    provide: IS_EVENT_REPLAY_ENABLED,\n    useFactory: () => {\n      let isEnabled = true;\n      if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n        // Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature\n        // is enabled, but there are no events configured in this application, in which case\n        // we don't activate this feature, since there are no events to replay.\n        const appId = inject(APP_ID);\n        isEnabled = !!window._ejsas?.[appId];\n      }\n      if (isEnabled) {\n        performanceMarkFeature('NgEventReplay');\n      }\n      return isEnabled;\n    }\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: ENVIRONMENT_INITIALIZER,\n      useValue: () => {\n        const injector = inject(Injector);\n        const appRef = injector.get(ApplicationRef);\n        // We have to check for the appRef here due to the possibility of multiple apps\n        // being present on the same page. We only want to enable event replay for the\n        // apps that actually want it.\n        if (!appsWithEventReplay.has(appRef)) {\n          const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n          if (shouldEnableEventReplay(injector)) {\n            setStashFn((rEl, eventName, listenerFn) => {\n              sharedStashFunction(rEl, eventName, listenerFn);\n              sharedMapFunction(rEl, jsActionMap);\n            });\n          }\n        }\n      },\n      multi: true\n    }, {\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        const injector = inject(Injector);\n        const appRef = inject(ApplicationRef);\n        return () => {\n          // We have to check for the appRef here due to the possibility of multiple apps\n          // being present on the same page. We only want to enable event replay for the\n          // apps that actually want it.\n          if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {\n            return;\n          }\n          appsWithEventReplay.add(appRef);\n          appRef.onDestroy(() => appsWithEventReplay.delete(appRef));\n          // Kick off event replay logic once hydration for the initial part\n          // of the application is completed. This timing is similar to the unclaimed\n          // dehydrated views cleanup timing.\n          appRef.whenStable().then(() => {\n            const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);\n            initEventReplay(eventContractDetails, injector);\n            const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n            jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);\n            jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);\n            const eventContract = eventContractDetails.instance;\n            // This removes event listeners registered through the container manager,\n            // as listeners registered on `document.body` might never be removed if we\n            // don't clean up the contract.\n            if (isIncrementalHydrationEnabled(injector)) {\n              // When incremental hydration is enabled, we cannot clean up the event\n              // contract immediately because we're unaware if there are any deferred\n              // blocks to hydrate. We can only schedule a contract cleanup when the\n              // app is destroyed.\n              appRef.onDestroy(() => eventContract.cleanUp());\n            } else {\n              eventContract.cleanUp();\n            }\n          });\n        };\n      },\n      multi: true\n    });\n  }\n  return providers;\n}\nconst initEventReplay = (eventDelegation, injector) => {\n  const appId = injector.get(APP_ID);\n  // This is set in packages/platform-server/src/utils.ts\n  const earlyJsactionData = window._ejsas[appId];\n  const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));\n  for (const et of earlyJsactionData.et) {\n    eventContract.addEvent(et);\n  }\n  for (const et of earlyJsactionData.etc) {\n    eventContract.addEvent(et);\n  }\n  const eventInfos = getAppScopedQueuedEventInfos(appId);\n  eventContract.replayEarlyEventInfos(eventInfos);\n  clearAppScopedEarlyEventContract(appId);\n  const dispatcher = new EventDispatcher(event => {\n    invokeRegisteredReplayListeners(injector, event, event.currentTarget);\n  });\n  registerDispatcher(eventContract, dispatcher);\n};\n/**\n * Extracts information about all DOM events (added in a template) registered on elements in a give\n * LView. Maps collected events to a corresponding DOM element (an element is used as a key).\n */\nfunction collectDomEventsInfo(tView, lView, eventTypesToReplay) {\n  const domEventsInfo = new Map();\n  const lCleanup = lView[CLEANUP];\n  const tCleanup = tView.cleanup;\n  if (!tCleanup || !lCleanup) {\n    return domEventsInfo;\n  }\n  for (let i = 0; i < tCleanup.length;) {\n    const firstParam = tCleanup[i++];\n    const secondParam = tCleanup[i++];\n    if (typeof firstParam !== 'string') {\n      continue;\n    }\n    const eventType = firstParam;\n    if (!isEarlyEventType(eventType)) {\n      continue;\n    }\n    if (isCaptureEventType(eventType)) {\n      eventTypesToReplay.capture.add(eventType);\n    } else {\n      eventTypesToReplay.regular.add(eventType);\n    }\n    const listenerElement = unwrapRNode(lView[secondParam]);\n    i++; // move the cursor to the next position (location of the listener idx)\n    const useCaptureOrIndx = tCleanup[i++];\n    // if useCaptureOrIndx is boolean then report it as is.\n    // if useCaptureOrIndx is positive number then it in unsubscribe method\n    // if useCaptureOrIndx is negative number then it is a Subscription\n    const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;\n    if (!isDomEvent) {\n      continue;\n    }\n    if (!domEventsInfo.has(listenerElement)) {\n      domEventsInfo.set(listenerElement, [eventType]);\n    } else {\n      domEventsInfo.get(listenerElement).push(eventType);\n    }\n  }\n  return domEventsInfo;\n}\nfunction invokeRegisteredReplayListeners(injector, event, currentTarget) {\n  const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? '';\n  if (/d\\d+/.test(blockName)) {\n    hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);\n  } else if (event.eventPhase === EventPhase.REPLAY) {\n    invokeListeners(event, currentTarget);\n  }\n}\nfunction hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {\n  blockEventQueue.push({\n    event,\n    currentTarget\n  });\n  triggerHydrationFromBlockName(injector, blockName, replayQueuedBlockEvents);\n}\nfunction replayQueuedBlockEvents(hydratedBlocks) {\n  // clone the queue\n  const queue = [...blockEventQueue];\n  const hydrated = new Set(hydratedBlocks);\n  // empty it\n  blockEventQueue = [];\n  for (let {\n    event,\n    currentTarget\n  } of queue) {\n    const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n    if (hydrated.has(blockName)) {\n      invokeListeners(event, currentTarget);\n    } else {\n      // requeue events that weren't yet hydrated\n      blockEventQueue.push({\n        event,\n        currentTarget\n      });\n    }\n  }\n}\n\n/**\n * A collection that tracks all serialized views (`ngh` DOM annotations)\n * to avoid duplication. An attempt to add a duplicate view results in the\n * collection returning the index of the previously collected serialized view.\n * This reduces the number of annotations needed for a given page.\n */\nclass SerializedViewCollection {\n  views = [];\n  indexByContent = new Map();\n  add(serializedView) {\n    const viewAsString = JSON.stringify(serializedView);\n    if (!this.indexByContent.has(viewAsString)) {\n      const index = this.views.length;\n      this.views.push(serializedView);\n      this.indexByContent.set(viewAsString, index);\n      return index;\n    }\n    return this.indexByContent.get(viewAsString);\n  }\n  getAll() {\n    return this.views;\n  }\n}\n/**\n * Global counter that is used to generate a unique id for TViews\n * during the serialization process.\n */\nlet tViewSsrId = 0;\n/**\n * Generates a unique id for a given TView and returns this id.\n * The id is also stored on this instance of a TView and reused in\n * subsequent calls.\n *\n * This id is needed to uniquely identify and pick up dehydrated views\n * at runtime.\n */\nfunction getSsrId(tView) {\n  if (!tView.ssrId) {\n    tView.ssrId = `t${tViewSsrId++}`;\n  }\n  return tView.ssrId;\n}\n/**\n * Computes the number of root nodes in a given view\n * (or child nodes in a given container if a tNode is provided).\n */\nfunction calcNumRootNodes(tView, lView, tNode) {\n  const rootNodes = [];\n  collectNativeNodes(tView, lView, tNode, rootNodes);\n  return rootNodes.length;\n}\n/**\n * Computes the number of root nodes in all views in a given LContainer.\n */\nfunction calcNumRootNodesInLContainer(lContainer) {\n  const rootNodes = [];\n  collectNativeNodesInLContainer(lContainer, rootNodes);\n  return rootNodes.length;\n}\n/**\n * Annotates root level component's LView for hydration,\n * see `annotateHostElementForHydration` for additional information.\n */\nfunction annotateComponentLViewForHydration(lView, context, injector) {\n  const hostElement = lView[HOST];\n  // Root elements might also be annotated with the `ngSkipHydration` attribute,\n  // check if it's present before starting the serialization process.\n  if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n    return annotateHostElementForHydration(hostElement, lView, null, context);\n  }\n  return null;\n}\n/**\n * Annotates root level LContainer for hydration. This happens when a root component\n * injects ViewContainerRef, thus making the component an anchor for a view container.\n * This function serializes the component itself as well as all views from the view\n * container.\n */\nfunction annotateLContainerForHydration(lContainer, context, injector) {\n  const componentLView = unwrapLView(lContainer[HOST]);\n  // Serialize the root component itself.\n  const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context, injector);\n  if (componentLViewNghIndex === null) {\n    // Component was not serialized (for example, if hydration was skipped by adding\n    // the `ngSkipHydration` attribute or this component uses i18n blocks in the template,\n    // but `withI18nSupport()` was not added), avoid annotating host element with the `ngh`\n    // attribute.\n    return;\n  }\n  const hostElement = unwrapRNode(componentLView[HOST]);\n  // Serialize all views within this view container.\n  const rootLView = lContainer[PARENT];\n  const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context);\n  const renderer = componentLView[RENDERER];\n  // For cases when a root component also acts as an anchor node for a ViewContainerRef\n  // (for example, when ViewContainerRef is injected in a root component), there is a need\n  // to serialize information about the component itself, as well as an LContainer that\n  // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:\n  // (1) hydration info for the root component itself and (2) hydration info for the\n  // ViewContainerRef instance (an LContainer). Each piece of information is included into\n  // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.\n  // Since we only have 1 root element, we encode both bits of info into a single string:\n  // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view\n  // and 25 is the `ngh` for a root view which holds LContainer).\n  const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;\n  renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);\n}\n/**\n * Annotates all components bootstrapped in a given ApplicationRef\n * with info needed for hydration.\n *\n * @param appRef An instance of an ApplicationRef.\n * @param doc A reference to the current Document instance.\n * @return event types that need to be replayed\n */\nfunction annotateForHydration(appRef, doc) {\n  const injector = appRef.injector;\n  const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);\n  const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);\n  const serializedViewCollection = new SerializedViewCollection();\n  const corruptedTextNodes = new Map();\n  const viewRefs = appRef._views;\n  const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n  const eventTypesToReplay = {\n    regular: new Set(),\n    capture: new Set()\n  };\n  const deferBlocks = new Map();\n  const appId = appRef.injector.get(APP_ID);\n  for (const viewRef of viewRefs) {\n    const lNode = getLNodeForHydration(viewRef);\n    // An `lView` might be `null` if a `ViewRef` represents\n    // an embedded view (not a component view).\n    if (lNode !== null) {\n      const context = {\n        serializedViewCollection,\n        corruptedTextNodes,\n        isI18nHydrationEnabled: isI18nHydrationEnabledVal,\n        isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,\n        i18nChildren: new Map(),\n        eventTypesToReplay,\n        shouldReplayEvents,\n        appId,\n        deferBlocks\n      };\n      if (isLContainer(lNode)) {\n        annotateLContainerForHydration(lNode, context, injector);\n      } else {\n        annotateComponentLViewForHydration(lNode, context, injector);\n      }\n      insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);\n    }\n  }\n  // Note: we *always* include hydration info key and a corresponding value\n  // into the TransferState, even if the list of serialized views is empty.\n  // This is needed as a signal to the client that the server part of the\n  // hydration logic was setup and enabled correctly. Otherwise, if a client\n  // hydration doesn't find a key in the transfer state - an error is produced.\n  const serializedViews = serializedViewCollection.getAll();\n  const transferState = injector.get(TransferState);\n  transferState.set(NGH_DATA_KEY, serializedViews);\n  if (deferBlocks.size > 0) {\n    const blocks = {};\n    for (const [id, info] of deferBlocks.entries()) {\n      blocks[id] = info;\n    }\n    transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);\n  }\n  return eventTypesToReplay;\n}\n/**\n * Serializes the lContainer data into a list of SerializedView objects,\n * that represent views within this lContainer.\n *\n * @param lContainer the lContainer we are serializing\n * @param tNode the TNode that contains info about this LContainer\n * @param lView that hosts this LContainer\n * @param parentDeferBlockId the defer block id of the parent if it exists\n * @param context the hydration context\n * @returns an array of the `SerializedView` objects\n */\nfunction serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context) {\n  const views = [];\n  let lastViewAsString = '';\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    let childLView = lContainer[i];\n    let template;\n    let numRootNodes;\n    let serializedView;\n    if (isRootView(childLView)) {\n      // If this is a root view, get an LView for the underlying component,\n      // because it contains information about the view to serialize.\n      childLView = childLView[HEADER_OFFSET];\n      // If we have an LContainer at this position, this indicates that the\n      // host element was used as a ViewContainerRef anchor (e.g. a `ViewContainerRef`\n      // was injected within the component class). This case requires special handling.\n      if (isLContainer(childLView)) {\n        // Calculate the number of root nodes in all views in a given container\n        // and increment by one to account for an anchor node itself, i.e. in this\n        // scenario we'll have a layout that would look like this:\n        // `<app-root /><#VIEW1><#VIEW2>...<!--container-->`\n        // The `+1` is to capture the `<app-root />` element.\n        numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;\n        annotateLContainerForHydration(childLView, context, lView[INJECTOR]);\n        const componentLView = unwrapLView(childLView[HOST]);\n        serializedView = {\n          [TEMPLATE_ID]: componentLView[TVIEW].ssrId,\n          [NUM_ROOT_NODES]: numRootNodes\n        };\n      }\n    }\n    if (!serializedView) {\n      const childTView = childLView[TVIEW];\n      if (childTView.type === 1 /* TViewType.Component */) {\n        template = childTView.ssrId;\n        // This is a component view, thus it has only 1 root node: the component\n        // host node itself (other nodes would be inside that host node).\n        numRootNodes = 1;\n      } else {\n        template = getSsrId(childTView);\n        numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);\n      }\n      serializedView = {\n        [TEMPLATE_ID]: template,\n        [NUM_ROOT_NODES]: numRootNodes\n      };\n      let isHydrateNeverBlock = false;\n      // If this is a defer block, serialize extra info.\n      if (isDeferBlock(lView[TVIEW], tNode)) {\n        const lDetails = getLDeferBlockDetails(lView, tNode);\n        const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n        if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {\n          const deferBlockId = `d${context.deferBlocks.size}`;\n          if (tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {\n            isHydrateNeverBlock = true;\n          }\n          let rootNodes = [];\n          collectNativeNodesInLContainer(lContainer, rootNodes);\n          // Add defer block into info context.deferBlocks\n          const deferBlockInfo = {\n            [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,\n            [NUM_ROOT_NODES]: rootNodes.length,\n            [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE]\n          };\n          const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);\n          if (serializedTriggers.length > 0) {\n            deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;\n          }\n          context.deferBlocks.set(deferBlockId, deferBlockInfo);\n          const node = unwrapRNode(lContainer);\n          if (node !== undefined) {\n            if (node.nodeType === Node.COMMENT_NODE) {\n              annotateDeferBlockAnchorForHydration(node, deferBlockId);\n            }\n          } else {\n            ngDevMode && validateNodeExists(node, childLView, tNode);\n            ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);\n            annotateDeferBlockAnchorForHydration(node, deferBlockId);\n          }\n          if (!isHydrateNeverBlock) {\n            // Add JSAction attributes for root nodes that use some hydration triggers\n            annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context);\n          }\n          // Use current block id as parent for nested routes.\n          parentDeferBlockId = deferBlockId;\n          // Serialize extra info into the view object.\n          // TODO(incremental-hydration): this should be serialized and included at a different level\n          // (not at the view level).\n          serializedView[DEFER_BLOCK_ID] = deferBlockId;\n        }\n        // DEFER_BLOCK_STATE is used for reconciliation in hydration, both regular and incremental.\n        // We need to know which template is rendered when hydrating. So we serialize this state\n        // regardless of hydration type.\n        serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];\n      }\n      if (!isHydrateNeverBlock) {\n        Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));\n      }\n    }\n    // Check if the previous view has the same shape (for example, it was\n    // produced by the *ngFor), in which case bump the counter on the previous\n    // view instead of including the same information again.\n    const currentViewAsString = JSON.stringify(serializedView);\n    if (views.length > 0 && currentViewAsString === lastViewAsString) {\n      const previousView = views[views.length - 1];\n      previousView[MULTIPLIER] ??= 1;\n      previousView[MULTIPLIER]++;\n    } else {\n      // Record this view as most recently added.\n      lastViewAsString = currentViewAsString;\n      views.push(serializedView);\n    }\n  }\n  return views;\n}\nfunction serializeHydrateTriggers(triggerMap) {\n  const serializableDeferBlockTrigger = new Set([0 /* DeferBlockTrigger.Idle */, 1 /* DeferBlockTrigger.Immediate */, 2 /* DeferBlockTrigger.Viewport */, 5 /* DeferBlockTrigger.Timer */]);\n  let triggers = [];\n  for (let [trigger, details] of triggerMap) {\n    if (serializableDeferBlockTrigger.has(trigger)) {\n      if (details === null) {\n        triggers.push(trigger);\n      } else {\n        triggers.push({\n          trigger,\n          delay: details.delay\n        });\n      }\n    }\n  }\n  return triggers;\n}\n/**\n * Helper function to produce a node path (which navigation steps runtime logic\n * needs to take to locate a node) and stores it in the `NODES` section of the\n * current serialized view.\n */\nfunction appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {\n  const noOffsetIndex = tNode.index - HEADER_OFFSET;\n  ngh[NODES] ??= {};\n  // Ensure we don't calculate the path multiple times.\n  ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);\n}\n/**\n * Helper function to append information about a disconnected node.\n * This info is needed at runtime to avoid DOM lookups for this element\n * and instead, the element would be created from scratch.\n */\nfunction appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {\n  const noOffsetIndex = typeof tNodeOrNoOffsetIndex === 'number' ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;\n  ngh[DISCONNECTED_NODES] ??= [];\n  if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {\n    ngh[DISCONNECTED_NODES].push(noOffsetIndex);\n  }\n}\n/**\n * Serializes the lView data into a SerializedView object that will later be added\n * to the TransferState storage and referenced using the `ngh` attribute on a host\n * element.\n *\n * @param lView the lView we are serializing\n * @param context the hydration context\n * @returns the `SerializedView` object containing the data to be added to the host node\n */\nfunction serializeLView(lView, parentDeferBlockId = null, context) {\n  const ngh = {};\n  const tView = lView[TVIEW];\n  const i18nChildren = getOrComputeI18nChildren(tView, context);\n  const nativeElementsToEventTypes = context.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context.eventTypesToReplay) : null;\n  // Iterate over DOM element references in an LView.\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const tNode = tView.data[i];\n    const noOffsetIndex = i - HEADER_OFFSET;\n    // Attempt to serialize any i18n data for the given slot. We do this first, as i18n\n    // has its own process for serialization.\n    const i18nData = trySerializeI18nBlock(lView, i, context);\n    if (i18nData) {\n      ngh[I18N_DATA] ??= {};\n      ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;\n      for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {\n        appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);\n      }\n      for (const nodeNoOffsetIndex of i18nData.disjointNodes) {\n        const tNode = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];\n        ngDevMode && assertTNode(tNode);\n        appendSerializedNodePath(ngh, tNode, lView, i18nChildren);\n      }\n      continue;\n    }\n    // Skip processing of a given slot in the following cases:\n    // - Local refs (e.g. <div #localRef>) take up an extra slot in LViews\n    //   to store the same element. In this case, there is no information in\n    //   a corresponding slot in TNode data structure.\n    // - When a slot contains something other than a TNode. For example, there\n    //   might be some metadata information about a defer block or a control flow block.\n    if (!isTNodeShape(tNode)) {\n      continue;\n    }\n    // Skip any nodes that are in an i18n block but are considered detached (i.e. not\n    // present in the template). These nodes are disconnected from the DOM tree, and\n    // so we don't want to serialize any information about them.\n    if (isDetachedByI18n(tNode)) {\n      continue;\n    }\n    // Check if a native node that represents a given TNode is disconnected from the DOM tree.\n    // Such nodes must be excluded from the hydration (since the hydration won't be able to\n    // find them), so the TNode ids are collected and used at runtime to skip the hydration.\n    //\n    // This situation may happen during the content projection, when some nodes don't make it\n    // into one of the content projection slots (for example, when there is no default\n    // <ng-content /> slot in projector component's template).\n    if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {\n      appendDisconnectedNodeIndex(ngh, tNode);\n      continue;\n    }\n    if (Array.isArray(tNode.projection)) {\n      for (const projectionHeadTNode of tNode.projection) {\n        // We may have `null`s in slots with no projected content.\n        if (!projectionHeadTNode) continue;\n        if (!Array.isArray(projectionHeadTNode)) {\n          // If we process re-projected content (i.e. `<ng-content>`\n          // appears at projection location), skip annotations for this content\n          // since all DOM nodes in this projection were handled while processing\n          // a parent lView, which contains those nodes.\n          if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {\n            if (isDisconnectedNode(projectionHeadTNode, lView)) {\n              // Check whether this node is connected, since we may have a TNode\n              // in the data structure as a projection segment head, but the\n              // content projection slot might be disabled (e.g.\n              // <ng-content *ngIf=\"false\" />).\n              appendDisconnectedNodeIndex(ngh, projectionHeadTNode);\n            } else {\n              appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);\n            }\n          }\n        } else {\n          // If a value is an array, it means that we are processing a projection\n          // where projectable nodes were passed in as DOM nodes (for example, when\n          // calling `ViewContainerRef.createComponent(CmpA, {projectableNodes: [...]})`).\n          //\n          // In this scenario, nodes can come from anywhere (either created manually,\n          // accessed via `document.querySelector`, etc) and may be in any state\n          // (attached or detached from the DOM tree). As a result, we can not reliably\n          // restore the state for such cases during hydration.\n          throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));\n        }\n      }\n    }\n    conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);\n    if (isLContainer(lView[i])) {\n      // Serialize information about a template.\n      const embeddedTView = tNode.tView;\n      if (embeddedTView !== null) {\n        ngh[TEMPLATES] ??= {};\n        ngh[TEMPLATES][noOffsetIndex] = getSsrId(embeddedTView);\n      }\n      // Serialize views within this LContainer.\n      const hostNode = lView[i][HOST]; // host node of this container\n      // LView[i][HOST] can be of 2 different types:\n      // - either a DOM node\n      // - or an array that represents an LView of a component\n      if (Array.isArray(hostNode)) {\n        // This is a component, serialize info about it.\n        const targetNode = unwrapRNode(hostNode);\n        if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n          annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context);\n        }\n      }\n      ngh[CONTAINERS] ??= {};\n      ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context);\n    } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {\n      // This is a component, annotate the host node with an `ngh` attribute.\n      // Note: Let declarations that return an array are also storing an array in the LView,\n      // we need to exclude them.\n      const targetNode = unwrapRNode(lView[i][HOST]);\n      if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n        annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context);\n      }\n    } else {\n      // <ng-container> case\n      if (tNode.type & 8 /* TNodeType.ElementContainer */) {\n        // An <ng-container> is represented by the number of\n        // top-level nodes. This information is needed to skip over\n        // those nodes to reach a corresponding anchor node (comment node).\n        ngh[ELEMENT_CONTAINERS] ??= {};\n        ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);\n      } else if (tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {\n        // Current TNode represents an `<ng-content>` slot or `@let` declaration,\n        // thus it has no DOM elements associated with it, so the **next sibling**\n        // node would not be able to find an anchor. In this case, use full path instead.\n        let nextTNode = tNode.next;\n        // Skip over all `<ng-content>` slots and `@let` declarations in a row.\n        while (nextTNode !== null && nextTNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {\n          nextTNode = nextTNode.next;\n        }\n        if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {\n          // Handle a tNode after the `<ng-content>` slot.\n          appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);\n        }\n      } else if (tNode.type & 1 /* TNodeType.Text */) {\n        const rNode = unwrapRNode(lView[i]);\n        processTextNodeBeforeSerialization(context, rNode);\n      }\n    }\n    // Attach `jsaction` attribute to elements that have registered listeners,\n    // thus potentially having a need to do an event replay.\n    if (nativeElementsToEventTypes && tNode.type & 2 /* TNodeType.Element */) {\n      const nativeElement = unwrapRNode(lView[i]);\n      if (nativeElementsToEventTypes.has(nativeElement)) {\n        setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);\n      }\n    }\n  }\n  return ngh;\n}\n/**\n * Serializes node location in cases when it's needed, specifically:\n *\n *  1. If `tNode.projectionNext` is different from `tNode.next` - it means that\n *     the next `tNode` after projection is different from the one in the original\n *     template. Since hydration relies on `tNode.next`, this serialized info\n *     is required to help runtime code find the node at the correct location.\n *  2. In certain content projection-based use-cases, it's possible that only\n *     a content of a projected element is rendered. In this case, content nodes\n *     require an extra annotation, since runtime logic can't rely on parent-child\n *     connection to identify the location of a node.\n */\nfunction conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {\n  if (isProjectionTNode(tNode)) {\n    // Do not annotate projection nodes (<ng-content />), since\n    // they don't have a corresponding DOM node representing them.\n    return;\n  }\n  // Handle case #1 described above.\n  if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {\n    appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);\n  }\n  // Handle case #2 described above.\n  // Note: we only do that for the first node (i.e. when `tNode.prev === null`),\n  // the rest of the nodes would rely on the current node location, so no extra\n  // annotation is needed.\n  if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {\n    appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);\n  }\n}\n/**\n * Determines whether a component instance that is represented\n * by a given LView uses `ViewEncapsulation.ShadowDom`.\n */\nfunction componentUsesShadowDomEncapsulation(lView) {\n  const instance = lView[CONTEXT];\n  return instance?.constructor ? getComponentDef(instance.constructor)?.encapsulation === ViewEncapsulation.ShadowDom : false;\n}\n/**\n * Annotates component host element for hydration:\n * - by either adding the `ngh` attribute and collecting hydration-related info\n *   for the serialization and transferring to the client\n * - or by adding the `ngSkipHydration` attribute in case Angular detects that\n *   component contents is not compatible with hydration.\n *\n * @param element The Host element to be annotated\n * @param lView The associated LView\n * @param context The hydration context\n * @returns An index of serialized view from the transfer state object\n *          or `null` when a given component can not be serialized.\n */\nfunction annotateHostElementForHydration(element, lView, parentDeferBlockId, context) {\n  const renderer = lView[RENDERER];\n  if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {\n    // Attach the skip hydration attribute if this component:\n    // - either has i18n blocks, since hydrating such blocks is not yet supported\n    // - or uses ShadowDom view encapsulation, since Domino doesn't support\n    //   shadow DOM, so we can not guarantee that client and server representations\n    //   would exactly match\n    renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');\n    return null;\n  } else {\n    const ngh = serializeLView(lView, parentDeferBlockId, context);\n    const index = context.serializedViewCollection.add(ngh);\n    renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());\n    return index;\n  }\n}\n/**\n * Annotates defer block comment node for hydration:\n *\n * @param comment The Host element to be annotated\n * @param deferBlockId the id of the target defer block\n */\nfunction annotateDeferBlockAnchorForHydration(comment, deferBlockId) {\n  comment.textContent = `ngh=${deferBlockId}`;\n}\n/**\n * Physically inserts the comment nodes to ensure empty text nodes and adjacent\n * text node separators are preserved after server serialization of the DOM.\n * These get swapped back for empty text nodes or separators once hydration happens\n * on the client.\n *\n * @param corruptedTextNodes The Map of text nodes to be replaced with comments\n * @param doc The document\n */\nfunction insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {\n  for (const [textNode, marker] of corruptedTextNodes) {\n    textNode.after(doc.createComment(marker));\n  }\n}\n/**\n * Detects whether a given TNode represents a node that\n * is being content projected.\n */\nfunction isContentProjectedNode(tNode) {\n  let currentTNode = tNode;\n  while (currentTNode != null) {\n    // If we come across a component host node in parent nodes -\n    // this TNode is in the content projection section.\n    if (isComponentHost(currentTNode)) {\n      return true;\n    }\n    currentTNode = currentTNode.parent;\n  }\n  return false;\n}\n/**\n * Incremental hydration requires that any defer block root node\n * with interaction or hover triggers have all of their root nodes\n * trigger hydration with those events. So we need to make sure all\n * the root nodes of that block have the proper jsaction attribute\n * to ensure hydration is triggered, since the content is dehydrated\n */\nfunction annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context) {\n  const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);\n  for (let et of actionList) {\n    context.eventTypesToReplay.regular.add(et);\n  }\n  if (actionList.length > 0) {\n    const elementNodes = rootNodes.filter(rn => rn.nodeType === Node.ELEMENT_NODE);\n    for (let rNode of elementNodes) {\n      setJSActionAttributes(rNode, actionList, parentDeferBlockId);\n    }\n  }\n}\n\n/**\n * Indicates whether the hydration-related code was added,\n * prevents adding it multiple times.\n */\nlet isHydrationSupportEnabled = false;\n/**\n * Indicates whether the i18n-related code was added,\n * prevents adding it multiple times.\n *\n * Note: This merely controls whether the code is loaded,\n * while `setIsI18nHydrationSupportEnabled` determines\n * whether i18n blocks are serialized or hydrated.\n */\nlet isI18nHydrationRuntimeSupportEnabled = false;\n/**\n * Indicates whether the incremental hydration code was added,\n * prevents adding it multiple times.\n */\nlet isIncrementalHydrationRuntimeSupportEnabled = false;\n/**\n * Defines a period of time that Angular waits for the `ApplicationRef.isStable` to emit `true`.\n * If there was no event with the `true` value during this time, Angular reports a warning.\n */\nconst APPLICATION_IS_STABLE_TIMEOUT = 10_000;\n/**\n * Brings the necessary hydration code in tree-shakable manner.\n * The code is only present when the `provideClientHydration` is\n * invoked. Otherwise, this code is tree-shaken away during the\n * build optimization step.\n *\n * This technique allows us to swap implementations of methods so\n * tree shaking works appropriately when hydration is disabled or\n * enabled. It brings in the appropriate version of the method that\n * supports hydration only when enabled.\n */\nfunction enableHydrationRuntimeSupport() {\n  if (!isHydrationSupportEnabled) {\n    isHydrationSupportEnabled = true;\n    enableRetrieveHydrationInfoImpl();\n    enableLocateOrCreateElementNodeImpl();\n    enableLocateOrCreateTextNodeImpl();\n    enableLocateOrCreateElementContainerNodeImpl();\n    enableLocateOrCreateContainerAnchorImpl();\n    enableLocateOrCreateContainerRefImpl();\n    enableFindMatchingDehydratedViewImpl();\n    enableApplyRootElementTransformImpl();\n  }\n}\n/**\n * Brings the necessary i18n hydration code in tree-shakable manner.\n * Similar to `enableHydrationRuntimeSupport`, the code is only\n * present when `withI18nSupport` is invoked.\n */\nfunction enableI18nHydrationRuntimeSupport() {\n  if (!isI18nHydrationRuntimeSupportEnabled) {\n    isI18nHydrationRuntimeSupportEnabled = true;\n    enableLocateOrCreateI18nNodeImpl();\n    enablePrepareI18nBlockForHydrationImpl();\n    enableClaimDehydratedIcuCaseImpl();\n  }\n}\n/**\n * Brings the necessary incremental hydration code in tree-shakable manner.\n * Similar to `enableHydrationRuntimeSupport`, the code is only\n * present when `enableIncrementalHydrationRuntimeSupport` is invoked.\n */\nfunction enableIncrementalHydrationRuntimeSupport() {\n  if (!isIncrementalHydrationRuntimeSupportEnabled) {\n    isIncrementalHydrationRuntimeSupportEnabled = true;\n    enableRetrieveDeferBlockDataImpl();\n  }\n}\n/**\n * Outputs a message with hydration stats into a console.\n */\nfunction printHydrationStats(injector) {\n  const console = injector.get(Console);\n  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` + `and ${ngDevMode.hydratedNodes} node(s), ` + `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : '') + `Learn more at https://angular.dev/guide/hydration.`;\n  // tslint:disable-next-line:no-console\n  console.log(message);\n}\n/**\n * Returns a Promise that is resolved when an application becomes stable.\n */\nfunction whenStableWithTimeout(appRef, injector) {\n  const whenStablePromise = appRef.whenStable();\n  if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n    const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;\n    const console = injector.get(Console);\n    const ngZone = injector.get(NgZone);\n    // The following call should not and does not prevent the app to become stable\n    // We cannot use RxJS timer here because the app would remain unstable.\n    // This also avoids an extra change detection cycle.\n    const timeoutId = ngZone.runOutsideAngular(() => {\n      return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);\n    });\n    whenStablePromise.finally(() => clearTimeout(timeoutId));\n  }\n  return whenStablePromise;\n}\n/**\n * Defines a name of an attribute that is added to the <body> tag\n * in the `index.html` file in case a given route was configured\n * with `RenderMode.Client`. 'cm' is an abbreviation for \"Client Mode\".\n */\nconst CLIENT_RENDER_MODE_FLAG = 'ngcm';\n/**\n * Checks whether the `RenderMode.Client` was defined for the current route.\n */\nfunction isClientRenderModeEnabled() {\n  const doc = getDocument();\n  return (typeof ngServerMode === 'undefined' || !ngServerMode) && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);\n}\n/**\n * Returns a set of providers required to setup hydration support\n * for an application that is server side rendered. This function is\n * included into the `provideClientHydration` public API function from\n * the `platform-browser` package.\n *\n * The function sets up an internal flag that would be recognized during\n * the server side rendering time as well, so there is no need to\n * configure or change anything in NgUniversal to enable the feature.\n */\nfunction withDomHydration() {\n  const providers = [{\n    provide: IS_HYDRATION_DOM_REUSE_ENABLED,\n    useFactory: () => {\n      let isEnabled = true;\n      if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n        // On the client, verify that the server response contains\n        // hydration annotations. Otherwise, keep hydration disabled.\n        const transferState = inject(TransferState, {\n          optional: true\n        });\n        isEnabled = !!transferState?.get(NGH_DATA_KEY, null);\n      }\n      if (isEnabled) {\n        performanceMarkFeature('NgHydration');\n      }\n      return isEnabled;\n    }\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      // i18n support is enabled by calling withI18nSupport(), but there's\n      // no way to turn it off (e.g. for tests), so we turn it off by default.\n      setIsI18nHydrationSupportEnabled(false);\n      if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n        // Since this function is used across both server and client,\n        // make sure that the runtime code is only added when invoked\n        // on the client (see the `enableHydrationRuntimeSupport` function\n        // call below).\n        return;\n      }\n      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n        verifySsrContentsIntegrity();\n        enableHydrationRuntimeSupport();\n      } else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled()) {\n        const console = inject(Console);\n        const message = formatRuntimeError(-505 /* RuntimeErrorCode.MISSING_HYDRATION_ANNOTATIONS */, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');\n        // tslint:disable-next-line:no-console\n        console.warn(message);\n      }\n    },\n    multi: true\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: PRESERVE_HOST_CONTENT,\n      useFactory: () => {\n        // Preserve host element content only in a browser\n        // environment and when hydration is configured properly.\n        // On a server, an application is rendered from scratch,\n        // so the host content needs to be empty.\n        return inject(IS_HYDRATION_DOM_REUSE_ENABLED);\n      }\n    }, {\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n          const appRef = inject(ApplicationRef);\n          const injector = inject(Injector);\n          return () => {\n            // Wait until an app becomes stable and cleanup all views that\n            // were not claimed during the application bootstrap process.\n            // The timing is similar to when we start the serialization process\n            // on the server.\n            //\n            // Note: the cleanup task *MUST* be scheduled within the Angular zone in Zone apps\n            // to ensure that change detection is properly run afterward.\n            whenStableWithTimeout(appRef, injector).then(() => {\n              cleanupDehydratedViews(appRef);\n              if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n                countBlocksSkippedByHydration(injector);\n                printHydrationStats(injector);\n              }\n            });\n          };\n        }\n        return () => {}; // noop\n      },\n      multi: true\n    });\n  }\n  return makeEnvironmentProviders(providers);\n}\n/**\n * Returns a set of providers required to setup support for i18n hydration.\n * Requires hydration to be enabled separately.\n */\nfunction withI18nSupport() {\n  return [{\n    provide: IS_I18N_HYDRATION_ENABLED,\n    useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n        enableI18nHydrationRuntimeSupport();\n        setIsI18nHydrationSupportEnabled(true);\n        performanceMarkFeature('NgI18nHydration');\n      }\n    },\n    multi: true\n  }];\n}\n/**\n * Returns a set of providers required to setup support for incremental hydration.\n * Requires hydration to be enabled separately.\n * Enabling incremental hydration also enables event replay for the entire app.\n *\n * @developerPreview\n */\nfunction withIncrementalHydration() {\n  const providers = [withEventReplay(), {\n    provide: IS_INCREMENTAL_HYDRATION_ENABLED,\n    useValue: true\n  }, {\n    provide: DEHYDRATED_BLOCK_REGISTRY,\n    useClass: DehydratedBlockRegistry\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      enableIncrementalHydrationRuntimeSupport();\n      performanceMarkFeature('NgIncrementalHydration');\n    },\n    multi: true\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        const injector = inject(Injector);\n        const doc = getDocument();\n        return () => {\n          const deferBlockData = processBlockData(injector);\n          const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);\n          processAndInitTriggers(injector, deferBlockData, commentsByBlockId);\n          appendDeferBlocksToJSActionMap(doc, injector);\n        };\n      },\n      multi: true\n    });\n  }\n  return providers;\n}\n/**\n *\n * @param time The time in ms until the stable timedout warning message is logged\n */\nfunction logWarningOnStableTimedout(time, console) {\n  const message = `Angular hydration expected the ApplicationRef.isStable() to emit \\`true\\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;\n  console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));\n}\n/**\n * Verifies whether the DOM contains a special marker added during SSR time to make sure\n * there is no SSR'ed contents transformations happen after SSR is completed. Typically that\n * happens either by CDN or during the build process as an optimization to remove comment nodes.\n * Hydration process requires comment nodes produced by Angular to locate correct DOM segments.\n * When this special marker is *not* present - throw an error and do not proceed with hydration,\n * since it will not be able to function correctly.\n *\n * Note: this function is invoked only on the client, so it's safe to use DOM APIs.\n */\nfunction verifySsrContentsIntegrity() {\n  const doc = getDocument();\n  let hydrationMarker;\n  for (const node of doc.body.childNodes) {\n    if (node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {\n      hydrationMarker = node;\n      break;\n    }\n  }\n  if (!hydrationMarker) {\n    throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' && ngDevMode && 'Angular hydration logic detected that HTML content of this page was modified after it ' + 'was produced during server side rendering. Make sure that there are no optimizations ' + 'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' + 'relies on HTML produced by the server, including whitespaces and comment nodes.');\n  }\n}\n\n/**\n * Transforms a value (typically a string) to a boolean.\n * Intended to be used as a transform function of an input.\n *\n *  @usageNotes\n *  ```ts\n *  @Input({ transform: booleanAttribute }) status!: boolean;\n *  ```\n * @param value Value to be transformed.\n *\n * @publicApi\n */\nfunction booleanAttribute(value) {\n  return typeof value === 'boolean' ? value : value != null && value !== 'false';\n}\n/**\n * Transforms a value (typically a string) to a number.\n * Intended to be used as a transform function of an input.\n * @param value Value to be transformed.\n * @param fallbackValue Value to use if the provided value can't be parsed as a number.\n *\n *  @usageNotes\n *  ```ts\n *  @Input({ transform: numberAttribute }) id!: number;\n *  ```\n *\n * @publicApi\n */\nfunction numberAttribute(value, fallbackValue = NaN) {\n  // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n  // and other non-number values as NaN, where Number just uses 0) but it considers the string\n  // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n  const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));\n  return isNumberValue ? Number(value) : fallbackValue;\n}\nconst PERFORMANCE_MARK_PREFIX = '🅰️';\nlet enablePerfLogging = false;\n/**\n * Function that will start measuring against the performance API\n * Should be used in pair with stopMeasuring\n */\nfunction startMeasuring(label) {\n  if (!enablePerfLogging) {\n    return;\n  }\n  const {\n    startLabel\n  } = labels(label);\n  /* tslint:disable:ban */\n  performance.mark(startLabel);\n  /* tslint:enable:ban */\n}\n/**\n * Function that will stop measuring against the performance API\n * Should be used in pair with stopMeasuring\n */\nfunction stopMeasuring(label) {\n  if (!enablePerfLogging) {\n    return;\n  }\n  const {\n    startLabel,\n    labelName,\n    endLabel\n  } = labels(label);\n  /* tslint:disable:ban */\n  performance.mark(endLabel);\n  performance.measure(labelName, startLabel, endLabel);\n  performance.clearMarks(startLabel);\n  performance.clearMarks(endLabel);\n  /* tslint:enable:ban */\n}\nfunction labels(label) {\n  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n  return {\n    labelName,\n    startLabel: `start:${labelName}`,\n    endLabel: `end:${labelName}`\n  };\n}\nlet warningLogged = false;\n/**\n * This enables an internal performance profiler\n *\n * It should not be imported in application code\n */\nfunction enableProfiling() {\n  if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {\n    warningLogged = true;\n    console.warn('Performance API is not supported on this platform');\n    return;\n  }\n  enablePerfLogging = true;\n}\nfunction disableProfiling() {\n  enablePerfLogging = false;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Gets the class name of the closest component to a node.\n * Warning! this function will return minified names if the name of the component is minified. The\n * consumer of the function is responsible for resolving the minified name to its original name.\n * @param node Node from which to start the search.\n */\nfunction getClosestComponentName(node) {\n  let currentNode = node;\n  while (currentNode) {\n    const lView = readPatchedLView(currentNode);\n    if (lView !== null) {\n      for (let i = HEADER_OFFSET; i < lView.length; i++) {\n        const current = lView[i];\n        if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {\n          continue;\n        }\n        const tView = lView[TVIEW];\n        const tNode = getTNode(tView, i);\n        if (isComponentHost(tNode)) {\n          const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n          const name = def.debugInfo?.className || def.type.name;\n          // Note: the name may be an empty string if the class name is\n          // dropped due to minification. In such cases keep going up the tree.\n          if (name) {\n            return name;\n          } else {\n            break;\n          }\n        }\n      }\n    }\n    currentNode = currentNode.parentNode;\n  }\n  return null;\n}\n\n/**\n * Compiles a partial directive declaration object into a full directive definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareDirective(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'directive',\n    type: decl.type\n  });\n  return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\n/**\n * Evaluates the class metadata declaration.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareClassMetadata(decl) {\n  setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);\n}\n/**\n * Evaluates the class metadata of a component that contains deferred blocks.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareClassMetadataAsync(decl) {\n  setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {\n    const meta = decl.resolveMetadata(...types);\n    setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);\n  });\n}\n/**\n * Compiles a partial component declaration object into a full component definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareComponent(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'component',\n    type: decl.type\n  });\n  return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);\n}\n/**\n * Compiles a partial pipe declaration object into a full pipe definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareFactory(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: getFactoryKind(decl.target),\n    type: decl.type\n  });\n  return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\nfunction getFactoryKind(target) {\n  switch (target) {\n    case FactoryTarget.Directive:\n      return 'directive';\n    case FactoryTarget.Component:\n      return 'component';\n    case FactoryTarget.Injectable:\n      return 'injectable';\n    case FactoryTarget.Pipe:\n      return 'pipe';\n    case FactoryTarget.NgModule:\n      return 'NgModule';\n  }\n}\n/**\n * Compiles a partial injectable declaration object into a full injectable definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareInjectable(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'injectable',\n    type: decl.type\n  });\n  return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);\n}\n/**\n * Compiles a partial injector declaration object into a full injector definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareInjector(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'NgModule',\n    type: decl.type\n  });\n  return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);\n}\n/**\n * Compiles a partial NgModule declaration object into a full NgModule definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareNgModule(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'NgModule',\n    type: decl.type\n  });\n  return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);\n}\n/**\n * Compiles a partial pipe declaration object into a full pipe definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclarePipe(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'pipe',\n    type: decl.type\n  });\n  return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);\n}\n\n// we reexport these symbols just so that they are retained during the dead code elimination\n\n/**\n * Create a computed `Signal` which derives a reactive value from an expression.\n */\nfunction computed(computation, options) {\n  performanceMarkFeature('NgSignals');\n  const getter = createComputed$1(computation);\n  if (options?.equal) {\n    getter[SIGNAL$1].equal = options.equal;\n  }\n  if (ngDevMode) {\n    getter.toString = () => `[Computed: ${getter()}]`;\n    getter[SIGNAL$1].debugName = options?.debugName;\n  }\n  return getter;\n}\nconst identityFn = v => v;\n/**\n * Create a linked signal which represents state that is (re)set from a linked reactive expression.\n */\nfunction createLinkedSignal(node) {\n  const linkedSignalGetter = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion$1(node);\n    // Record that someone looked at this signal.\n    producerAccessed$1(node);\n    if (node.value === ERRORED) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  const getter = linkedSignalGetter;\n  getter[SIGNAL$1] = node;\n  if (ngDevMode) {\n    getter.toString = () => `[LinkedSignal: ${getter()}]`;\n  }\n  getter.set = newValue => {\n    producerUpdateValueVersion$1(node);\n    signalSetFn$1(node, newValue);\n    producerMarkClean$1(node);\n  };\n  getter.update = updateFn => {\n    producerUpdateValueVersion$1(node);\n    signalUpdateFn$1(node, updateFn);\n    producerMarkClean$1(node);\n  };\n  getter.asReadonly = signalAsReadonlyFn.bind(getter);\n  return getter;\n}\nfunction linkedSignal(optionsOrComputation, options) {\n  performanceMarkFeature('NgSignals');\n  const isShorthand = typeof optionsOrComputation === 'function';\n  const node = Object.create(LINKED_SIGNAL_NODE);\n  node.source = isShorthand ? optionsOrComputation : optionsOrComputation.source;\n  if (!isShorthand) {\n    node.computation = optionsOrComputation.computation;\n  }\n  const equal = isShorthand ? options?.equal : optionsOrComputation.equal;\n  if (equal) {\n    node.equal = equal;\n  }\n  return createLinkedSignal(node);\n}\n/**\n * A dedicated symbol used before a state value has been set / calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a linked signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a linked signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again or the state is set.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst LINKED_SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE$1,\n    value: UNSET,\n    dirty: true,\n    error: null,\n    equal: defaultEquals$1,\n    computation: identityFn,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET || node.value === COMPUTING;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING;\n      const prevConsumer = consumerBeforeComputation$1(node);\n      let newValue;\n      try {\n        const newSourceValue = node.source();\n        const prev = oldValue === UNSET || oldValue === ERRORED ? undefined : {\n          source: node.sourceValue,\n          value: oldValue\n        };\n        newValue = node.computation(newSourceValue, prev);\n        node.sourceValue = newSourceValue;\n      } catch (err) {\n        newValue = ERRORED;\n        node.error = err;\n      } finally {\n        consumerAfterComputation$1(node, prevConsumer);\n      }\n      if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\n\n/**\n * Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function\n * can, optionally, return a value.\n */\nfunction untracked(nonReactiveReadsFn) {\n  const prevConsumer = setActiveConsumer$1(null);\n  // We are not trying to catch any particular errors here, just making sure that the consumers\n  // stack is restored in case of errors.\n  try {\n    return nonReactiveReadsFn();\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nclass ViewContext {\n  view;\n  node;\n  constructor(view, node) {\n    this.view = view;\n    this.node = node;\n  }\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectViewContext;\n}\nfunction injectViewContext() {\n  return new ViewContext(getLView(), getCurrentTNode());\n}\n\n/**\n * Controls whether effects use the legacy `microtaskEffect` by default.\n */\nconst USE_MICROTASK_EFFECT_BY_DEFAULT = false;\nclass MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {\n  pendingTasks = inject(PendingTasksInternal);\n  taskId = null;\n  schedule(effect) {\n    // Check whether there are any pending effects _before_ queueing in the base class.\n    super.schedule(effect);\n    if (this.taskId === null) {\n      this.taskId = this.pendingTasks.add();\n      queueMicrotask(() => this.flush());\n    }\n  }\n  flush() {\n    try {\n      super.flush();\n    } finally {\n      if (this.taskId !== null) {\n        this.pendingTasks.remove(this.taskId);\n        this.taskId = null;\n      }\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: MicrotaskEffectScheduler,\n    providedIn: 'root',\n    factory: () => new MicrotaskEffectScheduler()\n  });\n}\n/**\n * Core reactive node for an Angular effect.\n *\n * `EffectHandle` combines the reactive graph's `Watch` base node for effects with the framework's\n * scheduling abstraction (`MicrotaskEffectScheduler`) as well as automatic cleanup via `DestroyRef`\n * if available/requested.\n */\nclass EffectHandle {\n  scheduler;\n  effectFn;\n  zone;\n  injector;\n  unregisterOnDestroy;\n  watcher;\n  constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {\n    this.scheduler = scheduler;\n    this.effectFn = effectFn;\n    this.zone = zone;\n    this.injector = injector;\n    this.watcher = createWatch$1(onCleanup => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);\n    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n  }\n  runEffect(onCleanup) {\n    try {\n      this.effectFn(onCleanup);\n    } catch (err) {\n      // Inject the `ErrorHandler` here in order to avoid circular DI error\n      // if the effect is used inside of a custom `ErrorHandler`.\n      const errorHandler = this.injector.get(ErrorHandler, null, {\n        optional: true\n      });\n      errorHandler?.handleError(err);\n    }\n  }\n  run() {\n    this.watcher.run();\n  }\n  schedule() {\n    this.scheduler.schedule(this);\n  }\n  destroy() {\n    this.watcher.destroy();\n    this.unregisterOnDestroy?.();\n    // Note: if the effect is currently scheduled, it's not un-scheduled, and so the scheduler will\n    // retain a reference to it. Attempting to execute it will be a no-op.\n  }\n}\n// Just used for the name for the debug error below.\nfunction effect$1() {}\n/**\n * Create a global `Effect` for the given reactive function.\n */\nfunction microtaskEffect(effectFn, options) {\n  performanceMarkFeature('NgSignals');\n  ngDevMode && assertNotInReactiveContext(effect$1, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n  !options?.injector && assertInInjectionContext(effect$1);\n  const injector = options?.injector ?? inject(Injector);\n  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === 'undefined' ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);\n  // Effects need to be marked dirty manually to trigger their initial run. The timing of this\n  // marking matters, because the effects may read signals that track component inputs, which are\n  // only available after those components have had their first update pass.\n  //\n  // We inject `ChangeDetectorRef` optionally, to determine whether this effect is being created in\n  // the context of a component or not. If it is, then we check whether the component has already\n  // run its update pass, and defer the effect's initial scheduling until the update pass if it\n  // hasn't already run.\n  const cdr = injector.get(ChangeDetectorRef, null, {\n    optional: true\n  });\n  if (!cdr || !(cdr._lView[FLAGS] & 8 /* LViewFlags.FirstLViewPass */)) {\n    // This effect is either not running in a view injector, or the view has already\n    // undergone its first change detection pass, which is necessary for any required inputs to be\n    // set.\n    handle.watcher.notify();\n  } else {\n    // Delay the initialization of the effect until the view is fully initialized.\n    (cdr._lView[EFFECTS_TO_SCHEDULE] ??= []).push(handle.watcher.notify);\n  }\n  return handle;\n}\nlet useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;\n/**\n * Toggle the flag on whether to use microtask effects (for testing).\n */\nfunction setUseMicrotaskEffectsByDefault(value) {\n  const prev = useMicrotaskEffectsByDefault;\n  useMicrotaskEffectsByDefault = value;\n  return prev;\n}\nclass EffectRefImpl {\n  [SIGNAL$1];\n  constructor(node) {\n    this[SIGNAL$1] = node;\n  }\n  destroy() {\n    this[SIGNAL$1].destroy();\n  }\n}\n/**\n * Registers an \"effect\" that will be scheduled & executed whenever the signals that it reads\n * changes.\n *\n * Angular has two different kinds of effect: component effects and root effects. Component effects\n * are created when `effect()` is called from a component, directive, or within a service of a\n * component/directive. Root effects are created when `effect()` is called from outside the\n * component tree, such as in a root service, or when the `forceRoot` option is provided.\n *\n * The two effect types differ in their timing. Component effects run as a component lifecycle\n * event during Angular's synchronization (change detection) process, and can safely read input\n * signals or create/destroy views that depend on component state. Root effects run as microtasks\n * and have no connection to the component tree or change detection.\n *\n * `effect()` must be run in injection context, unless the `injector` option is manually specified.\n *\n * @developerPreview\n */\nfunction effect(effectFn, options) {\n  if (useMicrotaskEffectsByDefault) {\n    if (ngDevMode && options?.forceRoot) {\n      throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);\n    }\n    return microtaskEffect(effectFn, options);\n  }\n  performanceMarkFeature('NgSignals');\n  ngDevMode && assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n  !options?.injector && assertInInjectionContext(effect);\n  if (ngDevMode && options?.allowSignalWrites !== undefined) {\n    console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);\n  }\n  const injector = options?.injector ?? inject(Injector);\n  let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  let node;\n  const viewContext = injector.get(ViewContext, null, {\n    optional: true\n  });\n  const notifier = injector.get(ChangeDetectionScheduler);\n  if (viewContext !== null && !options?.forceRoot) {\n    // This effect was created in the context of a view, and will be associated with the view.\n    node = createViewEffect(viewContext.view, notifier, effectFn);\n    if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {\n      // The effect is being created in the same view as the `DestroyRef` references, so it will be\n      // automatically destroyed without the need for an explicit `DestroyRef` registration.\n      destroyRef = null;\n    }\n  } else {\n    // This effect was created outside the context of a view, and will be scheduled independently.\n    node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);\n  }\n  node.injector = injector;\n  if (destroyRef !== null) {\n    // If we need to register for cleanup, do that here.\n    node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());\n  }\n  if (ngDevMode) {\n    node.debugName = options?.debugName ?? '';\n  }\n  return new EffectRefImpl(node);\n}\n/**\n * Not public API, which guarantees `EffectScheduler` only ever comes from the application root\n * injector.\n */\nconst APP_EFFECT_SCHEDULER = /* @__PURE__ */new InjectionToken('', {\n  providedIn: 'root',\n  factory: () => inject(EffectScheduler)\n});\nconst BASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerAllowSignalWrites: true,\n  dirty: true,\n  hasRun: false,\n  cleanupFns: undefined,\n  zone: null,\n  onDestroyFn: noop,\n  run() {\n    this.dirty = false;\n    if (ngDevMode && isInNotificationPhase$1()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    if (this.hasRun && !consumerPollProducersForChange$1(this)) {\n      return;\n    }\n    this.hasRun = true;\n    const registerCleanupFn = cleanupFn => (this.cleanupFns ??= []).push(cleanupFn);\n    const prevNode = consumerBeforeComputation$1(this);\n    // We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will\n    // cause CD to reach the component in question.\n    const prevRefreshingViews = setIsRefreshingViews(false);\n    try {\n      this.maybeCleanup();\n      this.fn(registerCleanupFn);\n    } finally {\n      setIsRefreshingViews(prevRefreshingViews);\n      consumerAfterComputation$1(this, prevNode);\n    }\n  },\n  maybeCleanup() {\n    if (!this.cleanupFns?.length) {\n      return;\n    }\n    try {\n      // Attempt to run the cleanup functions. Regardless of failure or success, we consider\n      // cleanup \"completed\" and clear the list for the next run of the effect. Note that an error\n      // from the cleanup function will still crash the current run of the effect.\n      while (this.cleanupFns.length) {\n        this.cleanupFns.pop()();\n      }\n    } finally {\n      this.cleanupFns = [];\n    }\n  }\n}))();\nconst ROOT_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...BASE_EFFECT_NODE,\n  consumerMarkedDirty() {\n    this.scheduler.schedule(this);\n    this.notifier.notify(13 /* NotificationSource.RootEffect */);\n  },\n  destroy() {\n    consumerDestroy$1(this);\n    this.onDestroyFn();\n    this.maybeCleanup();\n  }\n}))();\nconst VIEW_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...BASE_EFFECT_NODE,\n  consumerMarkedDirty() {\n    this.view[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;\n    markAncestorsForTraversal(this.view);\n    this.notifier.notify(14 /* NotificationSource.ViewEffect */);\n  },\n  destroy() {\n    consumerDestroy$1(this);\n    this.onDestroyFn();\n    this.maybeCleanup();\n    this.view[EFFECTS]?.delete(this);\n  }\n}))();\nfunction createViewEffect(view, notifier, fn) {\n  const node = Object.create(VIEW_EFFECT_NODE);\n  node.view = view;\n  node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n  node.notifier = notifier;\n  node.fn = fn;\n  view[EFFECTS] ??= new Set();\n  view[EFFECTS].add(node);\n  node.consumerMarkedDirty(node);\n  return node;\n}\nfunction createRootEffect(fn, scheduler, notifier) {\n  const node = Object.create(ROOT_EFFECT_NODE);\n  node.fn = fn;\n  node.scheduler = scheduler;\n  node.notifier = notifier;\n  node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n  node.scheduler.schedule(node);\n  node.notifier.notify(13 /* NotificationSource.RootEffect */);\n  return node;\n}\nconst NOT_SET = Symbol('NOT_SET');\nconst EMPTY_CLEANUP_SET = new Set();\nconst AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...SIGNAL_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerAllowSignalWrites: true,\n  value: NOT_SET,\n  cleanup: null,\n  /** Called when the effect becomes dirty */\n  consumerMarkedDirty() {\n    if (this.sequence.impl.executing) {\n      // If hooks are in the middle of executing, then it matters whether this node has yet been\n      // executed within its sequence. If not, then we don't want to notify the scheduler since\n      // this node will be reached naturally.\n      if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {\n        return;\n      }\n      // If during the execution of a later phase an earlier phase became dirty, then we should not\n      // run any further phases until the earlier one reruns.\n      this.sequence.erroredOrDestroyed = true;\n    }\n    // Either hooks are not running, or we're marking a node dirty that has already run within its\n    // sequence.\n    this.sequence.scheduler.notify(7 /* NotificationSource.RenderHook */);\n  },\n  phaseFn(previousValue) {\n    this.sequence.lastPhase = this.phase;\n    if (!this.dirty) {\n      return this.signal;\n    }\n    this.dirty = false;\n    if (this.value !== NOT_SET && !consumerPollProducersForChange$1(this)) {\n      // None of our producers report a change since the last time they were read, so no\n      // recomputation of our value is necessary.\n      return this.signal;\n    }\n    // Run any needed cleanup functions.\n    try {\n      for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {\n        cleanupFn();\n      }\n    } finally {\n      // Even if a cleanup function errors, ensure it's cleared.\n      this.cleanup?.clear();\n    }\n    // Prepare to call the user's effect callback. If there was a previous phase, then it gave us\n    // its value as a `Signal`, otherwise `previousValue` will be `undefined`.\n    const args = [];\n    if (previousValue !== undefined) {\n      args.push(previousValue);\n    }\n    args.push(this.registerCleanupFn);\n    // Call the user's callback in our reactive context.\n    const prevConsumer = consumerBeforeComputation$1(this);\n    let newValue;\n    try {\n      newValue = this.userFn.apply(null, args);\n    } finally {\n      consumerAfterComputation$1(this, prevConsumer);\n    }\n    if (this.value === NOT_SET || !this.equal(this.value, newValue)) {\n      this.value = newValue;\n      this.version++;\n    }\n    return this.signal;\n  }\n}))();\n/**\n * An `AfterRenderSequence` that manages an `afterRenderEffect`'s phase effects.\n */\nclass AfterRenderEffectSequence extends AfterRenderSequence {\n  scheduler;\n  /**\n   * While this sequence is executing, this tracks the last phase which was called by the\n   * `afterRender` machinery.\n   *\n   * When a phase effect is marked dirty, this is used to determine whether it's already run or not.\n   */\n  lastPhase = null;\n  /**\n   * The reactive nodes for each phase, if a phase effect is defined for that phase.\n   *\n   * These are initialized to `undefined` but set in the constructor.\n   */\n  nodes = [undefined, undefined, undefined, undefined];\n  constructor(impl, effectHooks, scheduler, destroyRef, snapshot = null) {\n    // Note that we also initialize the underlying `AfterRenderSequence` hooks to `undefined` and\n    // populate them as we create reactive nodes below.\n    super(impl, [undefined, undefined, undefined, undefined], false, destroyRef, snapshot);\n    this.scheduler = scheduler;\n    // Setup a reactive node for each phase.\n    for (const phase of AFTER_RENDER_PHASES) {\n      const effectHook = effectHooks[phase];\n      if (effectHook === undefined) {\n        continue;\n      }\n      const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);\n      node.sequence = this;\n      node.phase = phase;\n      node.userFn = effectHook;\n      node.dirty = true;\n      node.signal = () => {\n        producerAccessed$1(node);\n        return node.value;\n      };\n      node.signal[SIGNAL$1] = node;\n      node.registerCleanupFn = fn => (node.cleanup ??= new Set()).add(fn);\n      this.nodes[phase] = node;\n      // Install the upstream hook which runs the `phaseFn` for this phase.\n      this.hooks[phase] = value => node.phaseFn(value);\n    }\n  }\n  afterRun() {\n    super.afterRun();\n    // We're done running this sequence, so reset `lastPhase`.\n    this.lastPhase = null;\n  }\n  destroy() {\n    super.destroy();\n    // Run the cleanup functions for each node.\n    for (const node of this.nodes) {\n      for (const fn of node?.cleanup ?? EMPTY_CLEANUP_SET) {\n        fn();\n      }\n    }\n  }\n}\n/**\n * @experimental\n */\nfunction afterRenderEffect(callbackOrSpec, options) {\n  ngDevMode && assertNotInReactiveContext(afterRenderEffect, 'Call `afterRenderEffect` outside of a reactive context. For example, create the render ' + 'effect inside the component constructor`.');\n  !options?.injector && assertInInjectionContext(afterRenderEffect);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  const injector = options?.injector ?? inject(Injector);\n  const scheduler = injector.get(ChangeDetectionScheduler);\n  const manager = injector.get(AfterRenderManager);\n  const tracing = injector.get(TracingService, null, {\n    optional: true\n  });\n  manager.impl ??= injector.get(AfterRenderImpl);\n  let spec = callbackOrSpec;\n  if (typeof spec === 'function') {\n    spec = {\n      mixedReadWrite: callbackOrSpec\n    };\n  }\n  const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], scheduler, injector.get(DestroyRef), tracing?.snapshot(null));\n  manager.impl.register(sequence);\n  return sequence;\n}\n\n// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are\n\n/**\n * Status of a `Resource`.\n *\n * @experimental\n */\nvar ResourceStatus;\n(function (ResourceStatus) {\n  /**\n   * The resource has no valid request and will not perform any loading.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Idle\"] = 0] = \"Idle\";\n  /**\n   * Loading failed with an error.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Error\"] = 1] = \"Error\";\n  /**\n   * The resource is currently loading a new value as a result of a change in its `request`.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Loading\"] = 2] = \"Loading\";\n  /**\n   * The resource is currently reloading a fresh value for the same request.\n   *\n   * `value()` will continue to return the previously fetched value during the reloading operation.\n   */\n  ResourceStatus[ResourceStatus[\"Reloading\"] = 3] = \"Reloading\";\n  /**\n   * Loading has completed and the resource has the value returned from the loader.\n   */\n  ResourceStatus[ResourceStatus[\"Resolved\"] = 4] = \"Resolved\";\n  /**\n   * The resource's value was set locally via `.set()` or `.update()`.\n   */\n  ResourceStatus[ResourceStatus[\"Local\"] = 5] = \"Local\";\n})(ResourceStatus || (ResourceStatus = {}));\n\n/**\n * Constructs a `Resource` that projects a reactive request to an asynchronous operation defined by\n * a loader function, which exposes the result of the loading operation via signals.\n *\n * Note that `resource` is intended for _read_ operations, not operations which perform mutations.\n * `resource` will cancel in-progress loads via the `AbortSignal` when destroyed or when a new\n * request object becomes available, which could prematurely abort mutations.\n *\n * @experimental\n */\nfunction resource(options) {\n  options?.injector || assertInInjectionContext(resource);\n  const request = options.request ?? (() => null);\n  return new WritableResourceImpl(request, options.loader, options.equal, options.injector);\n}\n/**\n * Base class for `WritableResource` which handles the state operations and is unopinionated on the\n * actual async operation.\n *\n * Mainly factored out for better readability.\n */\nclass BaseWritableResource {\n  value;\n  status = signal(ResourceStatus.Idle);\n  error = signal(undefined);\n  rawSetValue;\n  constructor(equal) {\n    this.value = signal(undefined, {\n      equal: equal ? wrapEqualityFn(equal) : undefined\n    });\n    this.rawSetValue = this.value.set;\n    this.value.set = value => this.set(value);\n    this.value.update = fn => this.set(fn(untracked(this.value)));\n  }\n  set(value) {\n    // Set the value signal and check whether its `version` changes. This will tell us\n    // if the value signal actually updated or not.\n    const prevVersion = this.value[SIGNAL$1].version;\n    this.rawSetValue(value);\n    if (this.value[SIGNAL$1].version === prevVersion) {\n      // The value must've been equal to the previous, so no need to change states.\n      return;\n    }\n    // We're departing from whatever state the resource was in previously, and entering\n    // Local state.\n    this.onLocalValue();\n    this.status.set(ResourceStatus.Local);\n    this.error.set(undefined);\n  }\n  update(updater) {\n    this.value.update(updater);\n  }\n  isLoading = computed(() => this.status() === ResourceStatus.Loading || this.status() === ResourceStatus.Reloading);\n  hasValue() {\n    return this.status() === ResourceStatus.Resolved || this.status() === ResourceStatus.Local || this.status() === ResourceStatus.Reloading;\n  }\n  asReadonly() {\n    return this;\n  }\n  /**\n   * Put the resource in a state with a given value.\n   */\n  setValueState(status, value = undefined) {\n    this.status.set(status);\n    this.rawSetValue(value);\n    this.error.set(undefined);\n  }\n  /**\n   * Put the resource into the error state.\n   */\n  setErrorState(err) {\n    this.value.set(undefined);\n    // The previous line will set the status to `Local`, so we need to update it.\n    this.status.set(ResourceStatus.Error);\n    this.error.set(err);\n  }\n}\nclass WritableResourceImpl extends BaseWritableResource {\n  loaderFn;\n  request;\n  pendingTasks;\n  effectRef;\n  pendingController;\n  resolvePendingTask = undefined;\n  constructor(requestFn, loaderFn, equal, injector) {\n    super(equal);\n    this.loaderFn = loaderFn;\n    injector = injector ?? inject(Injector);\n    this.pendingTasks = injector.get(PendingTasks);\n    this.request = computed(() => ({\n      // The current request as defined for this resource.\n      request: requestFn(),\n      // A counter signal which increments from 0, re-initialized for each request (similar to the\n      // `linkedSignal` pattern). A value other than 0 indicates a refresh operation.\n      reload: signal(0)\n    }));\n    // The actual data-fetching effect.\n    this.effectRef = effect(this.loadEffect.bind(this), {\n      injector,\n      manualCleanup: true\n    });\n    // Cancel any pending request when the resource itself is destroyed.\n    injector.get(DestroyRef).onDestroy(() => this.destroy());\n  }\n  reload() {\n    // We don't want to restart in-progress loads.\n    const status = untracked(this.status);\n    if (status === ResourceStatus.Idle || status === ResourceStatus.Loading || status === ResourceStatus.Reloading) {\n      return false;\n    }\n    untracked(this.request).reload.update(v => v + 1);\n    return true;\n  }\n  destroy() {\n    this.effectRef.destroy();\n    this.abortInProgressLoad();\n    this.setValueState(ResourceStatus.Idle);\n  }\n  async loadEffect() {\n    // Capture the status before any state transitions.\n    const previousStatus = untracked(this.status);\n    // Cancel any previous loading attempts.\n    this.abortInProgressLoad();\n    const request = this.request();\n    if (request.request === undefined) {\n      // An undefined request means there's nothing to load.\n      this.setValueState(ResourceStatus.Idle);\n      return;\n    }\n    // Subscribing here allows us to refresh the load later by updating the refresh signal. At the\n    // same time, we update the status according to whether we're reloading or loading.\n    if (request.reload() === 0) {\n      this.setValueState(ResourceStatus.Loading); // value becomes undefined\n    } else {\n      this.status.set(ResourceStatus.Reloading); // value persists\n    }\n    // Capturing _this_ load's pending task in a local variable is important here. We may attempt to\n    // resolve it twice:\n    //\n    //  1. when the loading function promise resolves/rejects\n    //  2. when cancelling the loading operation\n    //\n    // After the loading operation is cancelled, `this.resolvePendingTask` no longer represents this\n    // particular task, but this `await` may eventually resolve/reject. Thus, when we cancel in\n    // response to (1) below, we need to cancel the locally saved task.\n    const resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();\n    const {\n      signal: abortSignal\n    } = this.pendingController = new AbortController();\n    try {\n      // The actual loading is run through `untracked` - only the request side of `resource` is\n      // reactive. This avoids any confusion with signals tracking or not tracking depending on\n      // which side of the `await` they are.\n      const result = await untracked(() => this.loaderFn({\n        abortSignal,\n        request: request.request,\n        previous: {\n          status: previousStatus\n        }\n      }));\n      if (abortSignal.aborted) {\n        // This load operation was cancelled.\n        return;\n      }\n      // Success :)\n      this.setValueState(ResourceStatus.Resolved, result);\n    } catch (err) {\n      if (abortSignal.aborted) {\n        // This load operation was cancelled.\n        return;\n      }\n      // Fail :(\n      this.setErrorState(err);\n    } finally {\n      // Resolve the pending task now that loading is done.\n      resolvePendingTask();\n    }\n  }\n  abortInProgressLoad() {\n    this.pendingController?.abort();\n    this.pendingController = undefined;\n    // Once the load is aborted, we no longer want to block stability on its resolution.\n    this.resolvePendingTask?.();\n    this.resolvePendingTask = undefined;\n  }\n  onLocalValue() {\n    this.abortInProgressLoad();\n  }\n}\n/**\n * Wraps an equality function to handle either value being `undefined`.\n */\nfunction wrapEqualityFn(equal) {\n  return (a, b) => a === undefined || b === undefined ? a === b : equal(a, b);\n}\n\n/**\n * Creates a `ComponentRef` instance based on provided component type and a set of options.\n *\n * @usageNotes\n *\n * The example below demonstrates how the `createComponent` function can be used\n * to create an instance of a ComponentRef dynamically and attach it to an ApplicationRef,\n * so that it gets included into change detection cycles.\n *\n * Note: the example uses standalone components, but the function can also be used for\n * non-standalone components (declared in an NgModule) as well.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   template: `Hello {{ name }}!`\n * })\n * class HelloComponent {\n *   name = 'Angular';\n * }\n *\n * @Component({\n *   standalone: true,\n *   template: `<div id=\"hello-component-host\"></div>`\n * })\n * class RootComponent {}\n *\n * // Bootstrap an application.\n * const applicationRef = await bootstrapApplication(RootComponent);\n *\n * // Locate a DOM node that would be used as a host.\n * const hostElement = document.getElementById('hello-component-host');\n *\n * // Get an `EnvironmentInjector` instance from the `ApplicationRef`.\n * const environmentInjector = applicationRef.injector;\n *\n * // We can now create a `ComponentRef` instance.\n * const componentRef = createComponent(HelloComponent, {hostElement, environmentInjector});\n *\n * // Last step is to register the newly created ref using the `ApplicationRef` instance\n * // to include the component view into change detection cycles.\n * applicationRef.attachView(componentRef.hostView);\n * componentRef.changeDetectorRef.detectChanges();\n * ```\n *\n * @param component Component class reference.\n * @param options Set of options to use:\n *  * `environmentInjector`: An `EnvironmentInjector` instance to be used for the component.\n *  * `hostElement` (optional): A DOM node that should act as a host node for the component. If not\n * provided, Angular creates one based on the tag name used in the component selector (and falls\n * back to using `div` if selector doesn't have tag name info).\n *  * `elementInjector` (optional): An `ElementInjector` instance, see additional info about it\n * [here](guide/di/hierarchical-dependency-injection#elementinjector).\n *  * `projectableNodes` (optional): A list of DOM nodes that should be projected through\n * [`<ng-content>`](api/core/ng-content) of the new component instance, e.g.,\n * `[[element1, element2]]`: projects `element1` and `element2` into the same `<ng-content>`.\n * `[[element1, element2], [element3]]`: projects `element1` and `element2` into one `<ng-content>`,\n * and `element3` into a separate `<ng-content>`.\n * @returns ComponentRef instance that represents a given Component.\n *\n * @publicApi\n */\nfunction createComponent(component, options) {\n  ngDevMode && assertComponentDef(component);\n  const componentDef = getComponentDef(component);\n  const elementInjector = options.elementInjector || getNullInjector();\n  const factory = new ComponentFactory(componentDef);\n  return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector);\n}\n/**\n * Creates an object that allows to retrieve component metadata.\n *\n * @usageNotes\n *\n * The example below demonstrates how to use the function and how the fields\n * of the returned object map to the component metadata.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   selector: 'foo-component',\n *   template: `\n *     <ng-content></ng-content>\n *     <ng-content select=\"content-selector-a\"></ng-content>\n *   `,\n * })\n * class FooComponent {\n *   @Input('inputName') inputPropName: string;\n *   @Output('outputName') outputPropName = new EventEmitter<void>();\n * }\n *\n * const mirror = reflectComponentType(FooComponent);\n * expect(mirror.type).toBe(FooComponent);\n * expect(mirror.selector).toBe('foo-component');\n * expect(mirror.isStandalone).toBe(true);\n * expect(mirror.inputs).toEqual([{propName: 'inputName', templateName: 'inputPropName'}]);\n * expect(mirror.outputs).toEqual([{propName: 'outputName', templateName: 'outputPropName'}]);\n * expect(mirror.ngContentSelectors).toEqual([\n *   '*',                 // first `<ng-content>` in a template, the selector defaults to `*`\n *   'content-selector-a' // second `<ng-content>` in a template\n * ]);\n * ```\n *\n * @param component Component class reference.\n * @returns An object that allows to retrieve component metadata.\n *\n * @publicApi\n */\nfunction reflectComponentType(component) {\n  const componentDef = getComponentDef(component);\n  if (!componentDef) return null;\n  const factory = new ComponentFactory(componentDef);\n  return {\n    get selector() {\n      return factory.selector;\n    },\n    get type() {\n      return factory.componentType;\n    },\n    get inputs() {\n      return factory.inputs;\n    },\n    get outputs() {\n      return factory.outputs;\n    },\n    get ngContentSelectors() {\n      return factory.ngContentSelectors;\n    },\n    get isStandalone() {\n      return componentDef.standalone;\n    },\n    get isSignal() {\n      return componentDef.signals;\n    }\n  };\n}\n\n/**\n * Merge multiple application configurations from left to right.\n *\n * @param configs Two or more configurations to be merged.\n * @returns A merged [ApplicationConfig](api/core/ApplicationConfig).\n *\n * @publicApi\n */\nfunction mergeApplicationConfig(...configs) {\n  return configs.reduce((prev, curr) => {\n    return Object.assign(prev, curr, {\n      providers: [...prev.providers, ...curr.providers]\n    });\n  }, {\n    providers: []\n  });\n}\n\n/**\n * Injection token representing the current HTTP request object.\n *\n * Use this token to access the current request when handling server-side\n * rendering (SSR).\n *\n * @remarks\n * This token may be `null` in the following scenarios:\n *\n * * During the build processes.\n * * When the application is rendered in the browser (client-side rendering).\n * * When performing static site generation (SSG).\n * * During route extraction in development (at the time of the request).\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request | `Request` on MDN}\n *\n * @developerPreview\n */\nconst REQUEST = new InjectionToken('REQUEST', {\n  providedIn: 'platform',\n  factory: () => null\n});\n/**\n * Injection token for response initialization options.\n *\n * Use this token to provide response options for configuring or initializing\n * HTTP responses in server-side rendering or API endpoints.\n *\n * @remarks\n * This token may be `null` in the following scenarios:\n *\n * * During the build processes.\n * * When the application is rendered in the browser (client-side rendering).\n * * When performing static site generation (SSG).\n * * During route extraction in development (at the time of the request).\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response | `ResponseInit` on MDN}\n *\n * @developerPreview\n */\nconst RESPONSE_INIT = new InjectionToken('RESPONSE_INIT', {\n  providedIn: 'platform',\n  factory: () => null\n});\n/**\n * Injection token for additional request context.\n *\n * Use this token to pass custom metadata or context related to the current request in server-side rendering.\n *\n * @remarks\n * This token is only available during server-side rendering and will be `null` in other contexts.\n *\n * @developerPreview\n */\nconst REQUEST_CONTEXT = new InjectionToken('REQUEST_CONTEXT', {\n  providedIn: 'platform',\n  factory: () => null\n});\n\n/**\n * @module\n * @description\n * Entry point from which you should import all public core APIs.\n */\nif (typeof ngDevMode !== 'undefined' && ngDevMode) {\n  // This helper is to give a reasonable error message to people upgrading to v9 that have not yet\n  // installed `@angular/localize` in their app.\n  // tslint:disable-next-line: no-toplevel-property-access\n  _global.$localize ??= function () {\n    throw new Error('It looks like your application or one of its dependencies is using i18n.\\n' + 'Angular 9 introduced a global `$localize()` function that needs to be loaded.\\n' + 'Please run `ng add @angular/localize` from the Angular CLI.\\n' + \"(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\\n\" + 'For server-side rendering applications add the import to your `main.server.ts` file.)');\n  };\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/* This file is not used to build this module. It is only used during editing\n * by the TypeScript language service and during build for verification. `ngc`\n * replaces this file with production index.ts when it rewrites private symbol\n * names.\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };\n"],
-  "mappings": "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",
-  "names": ["computed", "node", "d", "b", "from", "v", "Subscription", "empty", "timeout", "Subscriber", "ConsumerObserver", "SafeSubscriber", "input", "Observable", "observable", "OperatorSubscriber", "err", "ConnectableObservable", "timestamp", "timestamp", "Subject", "observable", "AnonymousSubject", "BehaviorSubject", "ReplaySubject", "last", "AsyncSubject", "Action", "delay", "timeout", "AsyncAction", "delay", "AsapAction", "delay", "Scheduler", "delay", "AsyncScheduler", "AsapScheduler", "QueueAction", "delay", "QueueScheduler", "AnimationFrameAction", "delay", "AnimationFrameScheduler", "VirtualTimeScheduler", "VirtualAction", "delay", "input", "input", "input", "input", "delay", "repeat", "delay", "delay", "input", "input", "input", "input", "iterator", "input", "iterator", "input", "input", "input", "NotificationKind", "Notification", "isArray", "i", "expand", "buffer", "isArray", "count", "count", "buffer", "last", "_a", "timestamp", "resolved", "timestamp", "timestamp", "resolved", "Restriction", "eventType", "name", "throwError", "throwError", "context", "injectorProfiler", "InjectFlags", "input", "count", "FactoryTarget", "R3TemplateDependencyKind", "ViewEncapsulation", "paramTypes", "paramAnnotations", "LContainerFlags", "throwError", "throwError", "store", "profiler", "CheckNoChangesMode", "throwError", "count", "isInI18nBlock", "max", "location", "Attribute", "noop", "ChangeDetectionStrategy", "context", "context", "document", "NodeNavigationStep", "TracingAction", "AfterRenderPhase", "DeferDependenciesLoadingState", "DeferBlockState", "DeferBlockInternalState", "DeferBlockBehavior", "throwError", "isRootView", "node", "HydrationStatus", "context", "ViewEncapsulation", "merge", "SecurityContext", "input", "schemas", "throwError", "context", "first", "InputFlags", "RendererStyleFlags2", "isComponent", "effect", "getInsertInFrontOfRNodeWithI18n", "processI18nInsertBefore", "isInlineTemplate", "TemplateRef", "_", "count", "repeat", "skip", "from", "map", "isArray", "input", "location", "ViewContainerRef", "context", "throwError", "i", "queue", "config", "resolved", "iterator", "callback", "delay", "timeout", "parentEnvInjector", "context", "throwError", "instance", "isStandaloneComponent", "timeout", "cb", "using", "isPromise", "queue", "config", "tNode", "delay", "throwError", "keyValueArraySet", "LocaleDataIndex", "plural", "I18nCreateOpCode", "lastNodeWasCreated", "changeMask", "value", "index", "count", "substring", "remove", "inertBodyHelper", "hasBinding", "placeholder", "templateId", "isCloseTemplateTag", "context", "output", "isEmpty", "isComponent", "multiFactory", "pipe", "i", "location", "moduleType", "modules", "importingModule", "proto", "type", "ngModuleDef", "MissingTranslationStrategy", "config", "interval", "isPipe", "context", "nativeNode", "index", "item", "map", "record", "defaultEquals", "activeConsumer", "SIGNAL", "setActiveConsumer", "activeConsumer", "REACTIVE_NODE", "consumerBeforeComputation", "setActiveConsumer", "consumerAfterComputation", "consumerIsLive", "producerRemoveLiveConsumerAtIndex", "producerRemoveLiveConsumerAtIndex", "assertProducerNode", "isConsumerNode", "assertConsumerNode", "consumerIsLive", "COMPUTED_NODE", "REACTIVE_NODE", "defaultEquals", "consumerBeforeComputation", "consumerAfterComputation", "SIGNAL_NODE", "REACTIVE_NODE", "defaultEquals", "NOOP_CLEANUP_FN", "WATCH_NODE", "REACTIVE_NODE", "config", "i", "queue", "context", "tNode", "console", "ERRORED", "UNSET", "COMPUTING", "effect", "noop", "ResourceStatus"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps/package.json
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps/package.json	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,3 +1,0 @@
-{
-  "type": "module"
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_core.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_core.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,997 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  ALLOW_MULTIPLE_PLATFORMS,
-  ANIMATION_MODULE_TYPE,
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  APP_INITIALIZER,
-  AfterRenderManager,
-  AfterRenderPhase,
-  ApplicationInitStatus,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  COMPILER_OPTIONS,
-  CONTAINER_HEADER_OFFSET,
-  CSP_NONCE,
-  CUSTOM_ELEMENTS_SCHEMA,
-  ChangeDetectionScheduler,
-  ChangeDetectionSchedulerImpl,
-  ChangeDetectionStrategy,
-  ChangeDetectorRef,
-  Compiler,
-  CompilerFactory,
-  Component,
-  ComponentFactory,
-  ComponentFactory$1,
-  ComponentFactoryResolver$1,
-  ComponentRef,
-  ComponentRef$1,
-  Console,
-  ContentChild,
-  ContentChildren,
-  DEFAULT_CURRENCY_CODE,
-  DEFAULT_LOCALE_ID,
-  DEFER_BLOCK_CONFIG,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DebugElement,
-  DebugEventListener,
-  DebugNode,
-  DefaultIterableDiffer,
-  DeferBlockBehavior,
-  DeferBlockState,
-  DestroyRef,
-  Directive,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  ENVIRONMENT_INITIALIZER,
-  EffectScheduler,
-  ElementRef,
-  EmbeddedViewRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  EventEmitter,
-  FactoryTarget,
-  HOST_TAG_NAME,
-  Host,
-  HostAttributeToken,
-  HostBinding,
-  HostListener,
-  IMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS,
-  INJECTOR$1,
-  INJECTOR_SCOPE,
-  INTERNAL_APPLICATION_ERROR_HANDLER,
-  IS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  JSACTION_EVENT_CONTRACT,
-  KeyValueDiffers,
-  LContext,
-  LOCALE_ID,
-  LifecycleHooksFeature,
-  LocaleDataIndex,
-  MicrotaskEffectScheduler,
-  MissingTranslationStrategy,
-  ModuleWithComponentFactories,
-  NG_COMP_DEF,
-  NG_DIR_DEF,
-  NG_ELEMENT_ID,
-  NG_INJ_DEF,
-  NG_MOD_DEF,
-  NG_PIPE_DEF,
-  NG_PROV_DEF,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  NO_CHANGE,
-  NO_ERRORS_SCHEMA,
-  NgModule,
-  NgModuleFactory,
-  NgModuleFactory$1,
-  NgModuleRef,
-  NgModuleRef$1,
-  NgProbeToken,
-  NgZone,
-  NoopNgZone,
-  Optional,
-  Output,
-  OutputEmitterRef,
-  PACKAGE_ROOT_URL,
-  PERFORMANCE_MARK_PREFIX,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PROVIDED_NG_ZONE,
-  PendingTasks,
-  PendingTasksInternal,
-  Pipe,
-  PlatformRef,
-  Query,
-  QueryList,
-  REQUEST,
-  REQUEST_CONTEXT,
-  RESPONSE_INIT,
-  ReflectionCapabilities,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  ResourceStatus,
-  RuntimeError,
-  SIGNAL,
-  SSR_CONTENT_INTEGRITY_MARKER,
-  Sanitizer,
-  SecurityContext,
-  Self,
-  SimpleChange,
-  SkipSelf,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TracingAction,
-  TracingService,
-  TransferState,
-  Type,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  VERSION,
-  Version,
-  ViewChild,
-  ViewChildren,
-  ViewContainerRef,
-  ViewEncapsulation,
-  ViewRef,
-  ViewRef$1,
-  XSS_SECURITY_URL,
-  ZONELESS_ENABLED,
-  _global,
-  _sanitizeHtml,
-  _sanitizeUrl,
-  afterNextRender,
-  afterRender,
-  afterRenderEffect,
-  allowSanitizationBypassAndThrow,
-  annotateForHydration,
-  asNativeElements,
-  assertInInjectionContext,
-  assertNotInReactiveContext,
-  assertPlatform,
-  booleanAttribute,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl,
-  clearResolutionOfComponentResourcesQueue,
-  compileComponent,
-  compileDirective,
-  compileNgModule,
-  compileNgModuleDefs,
-  compileNgModuleFactory,
-  compilePipe,
-  computed,
-  contentChild,
-  contentChildren,
-  convertToBitFlags,
-  createComponent,
-  createEnvironmentInjector,
-  createInjector,
-  createNgModule,
-  createNgModuleRef,
-  createPlatform,
-  createPlatformFactory,
-  defaultIterableDiffers,
-  defaultKeyValueDiffers,
-  defineInjectable,
-  depsTracker,
-  destroyPlatform,
-  detectChangesInViewIfRequired,
-  devModeEqual,
-  disableProfiling,
-  effect,
-  enableProdMode,
-  enableProfiling,
-  findLocaleData,
-  flushModuleScopingQueueAsMuchAsPossible,
-  formatRuntimeError,
-  forwardRef,
-  generateStandaloneInDeclarationsError,
-  getAsyncClassMetadataFn,
-  getClosestComponentName,
-  getDebugNode,
-  getDeferBlocks,
-  getDirectives,
-  getHostElement,
-  getInjectableDef,
-  getLContext,
-  getLocaleCurrencyCode,
-  getLocalePluralCase,
-  getModuleFactory,
-  getNgModuleById,
-  getOutputDestroyRef,
-  getPlatform,
-  getSanitizationBypassType,
-  importProvidersFrom,
-  inject,
-  injectChangeDetectorRef,
-  input,
-  internalCreateApplication,
-  internalProvideZoneChangeDetection,
-  isBoundToModule,
-  isComponentDefPendingResolution,
-  isDevMode,
-  isEnvironmentProviders,
-  isInjectable,
-  isNgModule,
-  isPromise,
-  isSignal,
-  isStandalone,
-  isSubscribable,
-  linkedSignal,
-  makeEnvironmentProviders,
-  makeStateKey,
-  mergeApplicationConfig,
-  microtaskEffect,
-  model,
-  noSideEffects,
-  numberAttribute,
-  output,
-  patchComponentDefWithScope,
-  performanceMarkFeature,
-  platformCore,
-  provideAppInitializer,
-  provideEnvironmentInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  provideExperimentalZonelessChangeDetection,
-  providePlatformInitializer,
-  provideZoneChangeDetection,
-  publishExternalGlobalUtil,
-  readHydrationInfo,
-  reflectComponentType,
-  registerLocaleData,
-  registerNgModuleType,
-  renderDeferBlockState,
-  resetCompiledComponents,
-  resetJitOptions,
-  resolveComponentResources,
-  resolveForwardRef,
-  resource,
-  restoreComponentResolutionQueue,
-  runInInjectionContext,
-  setAllowDuplicateNgModuleIdsForTest,
-  setAlternateWeakRefImpl,
-  setClassMetadata,
-  setClassMetadataAsync,
-  setCurrentInjector,
-  setDocument,
-  setInjectorProfilerContext,
-  setLocaleId,
-  setTestabilityGetter,
-  signal,
-  startMeasuring,
-  stopMeasuring,
-  store,
-  stringify,
-  transitiveScopesFor,
-  triggerResourceLoading,
-  truncateMiddle,
-  unregisterAllLocaleData,
-  untracked,
-  unwrapSafeValue,
-  viewChild,
-  viewChildren,
-  withDomHydration,
-  withEventReplay,
-  withI18nSupport,
-  withIncrementalHydration,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  ɵgetUnknownElementStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  ɵsetClassDebugInfo,
-  ɵsetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  ɵunwrapWritableSignal,
-  ɵɵCopyDefinitionFeature,
-  ɵɵExternalStylesFeature,
-  ɵɵHostDirectivesFeature,
-  ɵɵInheritDefinitionFeature,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵProvidersFeature,
-  ɵɵadvance,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵclassProp,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵcontentQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵdeclareLet,
-  ɵɵdefer,
-  ɵɵdeferEnableTimerScheduling,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferOnHover,
-  ɵɵdeferOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferOnTimer,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferWhen,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵdisableBindings,
-  ɵɵelement,
-  ɵɵelementContainer,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainerStart,
-  ɵɵelementEnd,
-  ɵɵelementStart,
-  ɵɵenableBindings,
-  ɵɵgetComponentDepsFactory,
-  ɵɵgetCurrentView,
-  ɵɵgetInheritedFactory,
-  ɵɵhostProperty,
-  ɵɵi18n,
-  ɵɵi18nApply,
-  ɵɵi18nAttributes,
-  ɵɵi18nEnd,
-  ɵɵi18nExp,
-  ɵɵi18nPostprocess,
-  ɵɵi18nStart,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵinvalidFactoryDep,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵnamespaceHTML,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceSVG,
-  ɵɵnextContext,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵprojection,
-  ɵɵprojectionDef,
-  ɵɵproperty,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵqueryAdvance,
-  ɵɵqueryRefresh,
-  ɵɵreadContextLet,
-  ɵɵreference,
-  ɵɵrepeater,
-  ɵɵrepeaterCreate,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵreplaceMetadata,
-  ɵɵresetView,
-  ɵɵresolveBody,
-  ɵɵresolveDocument,
-  ɵɵresolveWindow,
-  ɵɵrestoreView,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵstoreLet,
-  ɵɵstyleMap,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstyleProp,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵsyntheticHostListener,
-  ɵɵsyntheticHostProperty,
-  ɵɵtemplate,
-  ɵɵtemplateRefExtractor,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵtwoWayProperty,
-  ɵɵvalidateIframeAttribute,
-  ɵɵviewQuery,
-  ɵɵviewQuerySignal
-} from "./chunk-PEAVEDUD.js";
-import "./chunk-YHCV7DAQ.js";
-export {
-  ANIMATION_MODULE_TYPE,
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  APP_INITIALIZER,
-  AfterRenderPhase,
-  ApplicationInitStatus,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  COMPILER_OPTIONS,
-  CSP_NONCE,
-  CUSTOM_ELEMENTS_SCHEMA,
-  ChangeDetectionStrategy,
-  ChangeDetectorRef,
-  Compiler,
-  CompilerFactory,
-  Component,
-  ComponentFactory$1 as ComponentFactory,
-  ComponentFactoryResolver$1 as ComponentFactoryResolver,
-  ComponentRef$1 as ComponentRef,
-  ContentChild,
-  ContentChildren,
-  DEFAULT_CURRENCY_CODE,
-  DebugElement,
-  DebugEventListener,
-  DebugNode,
-  DefaultIterableDiffer,
-  DestroyRef,
-  Directive,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EmbeddedViewRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  EventEmitter,
-  HOST_TAG_NAME,
-  Host,
-  HostAttributeToken,
-  HostBinding,
-  HostListener,
-  INJECTOR$1 as INJECTOR,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  KeyValueDiffers,
-  LOCALE_ID,
-  MissingTranslationStrategy,
-  ModuleWithComponentFactories,
-  NO_ERRORS_SCHEMA,
-  NgModule,
-  NgModuleFactory$1 as NgModuleFactory,
-  NgModuleRef$1 as NgModuleRef,
-  NgProbeToken,
-  NgZone,
-  Optional,
-  Output,
-  OutputEmitterRef,
-  PACKAGE_ROOT_URL,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PendingTasks,
-  Pipe,
-  PlatformRef,
-  Query,
-  QueryList,
-  REQUEST,
-  REQUEST_CONTEXT,
-  RESPONSE_INIT,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  ResourceStatus,
-  Sanitizer,
-  SecurityContext,
-  Self,
-  SimpleChange,
-  SkipSelf,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TransferState,
-  Type,
-  VERSION,
-  Version,
-  ViewChild,
-  ViewChildren,
-  ViewContainerRef,
-  ViewEncapsulation,
-  ViewRef,
-  afterNextRender,
-  afterRender,
-  afterRenderEffect,
-  asNativeElements,
-  assertInInjectionContext,
-  assertNotInReactiveContext,
-  assertPlatform,
-  booleanAttribute,
-  computed,
-  contentChild,
-  contentChildren,
-  createComponent,
-  createEnvironmentInjector,
-  createNgModule,
-  createNgModuleRef,
-  createPlatform,
-  createPlatformFactory,
-  defineInjectable,
-  destroyPlatform,
-  effect,
-  enableProdMode,
-  forwardRef,
-  getDebugNode,
-  getModuleFactory,
-  getNgModuleById,
-  getPlatform,
-  importProvidersFrom,
-  inject,
-  input,
-  isDevMode,
-  isSignal,
-  isStandalone,
-  linkedSignal,
-  makeEnvironmentProviders,
-  makeStateKey,
-  mergeApplicationConfig,
-  model,
-  numberAttribute,
-  output,
-  platformCore,
-  provideAppInitializer,
-  provideEnvironmentInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  provideExperimentalZonelessChangeDetection,
-  providePlatformInitializer,
-  provideZoneChangeDetection,
-  reflectComponentType,
-  resolveForwardRef,
-  resource,
-  runInInjectionContext,
-  setTestabilityGetter,
-  signal,
-  untracked,
-  viewChild,
-  viewChildren,
-  ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS,
-  AfterRenderManager as ɵAfterRenderManager,
-  CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET,
-  ChangeDetectionScheduler as ɵChangeDetectionScheduler,
-  ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl,
-  ComponentFactory$1 as ɵComponentFactory,
-  Console as ɵConsole,
-  DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID,
-  DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DeferBlockBehavior as ɵDeferBlockBehavior,
-  DeferBlockState as ɵDeferBlockState,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  EffectScheduler as ɵEffectScheduler,
-  IMAGE_CONFIG as ɵIMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS,
-  INJECTOR_SCOPE as ɵINJECTOR_SCOPE,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER,
-  IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED,
-  JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT,
-  LContext as ɵLContext,
-  LifecycleHooksFeature as ɵLifecycleHooksFeature,
-  LocaleDataIndex as ɵLocaleDataIndex,
-  MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler,
-  NG_COMP_DEF as ɵNG_COMP_DEF,
-  NG_DIR_DEF as ɵNG_DIR_DEF,
-  NG_ELEMENT_ID as ɵNG_ELEMENT_ID,
-  NG_INJ_DEF as ɵNG_INJ_DEF,
-  NG_MOD_DEF as ɵNG_MOD_DEF,
-  NG_PIPE_DEF as ɵNG_PIPE_DEF,
-  NG_PROV_DEF as ɵNG_PROV_DEF,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  NO_CHANGE as ɵNO_CHANGE,
-  NgModuleFactory as ɵNgModuleFactory,
-  NoopNgZone as ɵNoopNgZone,
-  PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX,
-  PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE,
-  PendingTasksInternal as ɵPendingTasksInternal,
-  ReflectionCapabilities as ɵReflectionCapabilities,
-  ComponentFactory as ɵRender3ComponentFactory,
-  ComponentRef as ɵRender3ComponentRef,
-  NgModuleRef as ɵRender3NgModuleRef,
-  RuntimeError as ɵRuntimeError,
-  SIGNAL as ɵSIGNAL,
-  SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER,
-  TESTABILITY as ɵTESTABILITY,
-  TESTABILITY_GETTER as ɵTESTABILITY_GETTER,
-  TracingAction as ɵTracingAction,
-  TracingService as ɵTracingService,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  ViewRef$1 as ɵViewRef,
-  XSS_SECURITY_URL as ɵXSS_SECURITY_URL,
-  ZONELESS_ENABLED as ɵZONELESS_ENABLED,
-  _sanitizeHtml as ɵ_sanitizeHtml,
-  _sanitizeUrl as ɵ_sanitizeUrl,
-  allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow,
-  annotateForHydration as ɵannotateForHydration,
-  bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl,
-  clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue,
-  compileComponent as ɵcompileComponent,
-  compileDirective as ɵcompileDirective,
-  compileNgModule as ɵcompileNgModule,
-  compileNgModuleDefs as ɵcompileNgModuleDefs,
-  compileNgModuleFactory as ɵcompileNgModuleFactory,
-  compilePipe as ɵcompilePipe,
-  convertToBitFlags as ɵconvertToBitFlags,
-  createInjector as ɵcreateInjector,
-  defaultIterableDiffers as ɵdefaultIterableDiffers,
-  defaultKeyValueDiffers as ɵdefaultKeyValueDiffers,
-  depsTracker as ɵdepsTracker,
-  detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired,
-  devModeEqual as ɵdevModeEqual,
-  disableProfiling as ɵdisableProfiling,
-  enableProfiling as ɵenableProfiling,
-  findLocaleData as ɵfindLocaleData,
-  flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible,
-  formatRuntimeError as ɵformatRuntimeError,
-  generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError,
-  getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn,
-  getClosestComponentName as ɵgetClosestComponentName,
-  getDebugNode as ɵgetDebugNode,
-  getDeferBlocks as ɵgetDeferBlocks,
-  getDirectives as ɵgetDirectives,
-  getHostElement as ɵgetHostElement,
-  getInjectableDef as ɵgetInjectableDef,
-  getLContext as ɵgetLContext,
-  getLocaleCurrencyCode as ɵgetLocaleCurrencyCode,
-  getLocalePluralCase as ɵgetLocalePluralCase,
-  getOutputDestroyRef as ɵgetOutputDestroyRef,
-  getSanitizationBypassType as ɵgetSanitizationBypassType,
-  ɵgetUnknownElementStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  _global as ɵglobal,
-  injectChangeDetectorRef as ɵinjectChangeDetectorRef,
-  internalCreateApplication as ɵinternalCreateApplication,
-  internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection,
-  isBoundToModule as ɵisBoundToModule,
-  isComponentDefPendingResolution as ɵisComponentDefPendingResolution,
-  isEnvironmentProviders as ɵisEnvironmentProviders,
-  isInjectable as ɵisInjectable,
-  isNgModule as ɵisNgModule,
-  isPromise as ɵisPromise,
-  isSubscribable as ɵisSubscribable,
-  microtaskEffect as ɵmicrotaskEffect,
-  noSideEffects as ɵnoSideEffects,
-  patchComponentDefWithScope as ɵpatchComponentDefWithScope,
-  performanceMarkFeature as ɵperformanceMarkFeature,
-  publishExternalGlobalUtil as ɵpublishExternalGlobalUtil,
-  readHydrationInfo as ɵreadHydrationInfo,
-  registerLocaleData as ɵregisterLocaleData,
-  renderDeferBlockState as ɵrenderDeferBlockState,
-  resetCompiledComponents as ɵresetCompiledComponents,
-  resetJitOptions as ɵresetJitOptions,
-  resolveComponentResources as ɵresolveComponentResources,
-  restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue,
-  setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest,
-  setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl,
-  ɵsetClassDebugInfo,
-  setClassMetadata as ɵsetClassMetadata,
-  setClassMetadataAsync as ɵsetClassMetadataAsync,
-  setCurrentInjector as ɵsetCurrentInjector,
-  setDocument as ɵsetDocument,
-  setInjectorProfilerContext as ɵsetInjectorProfilerContext,
-  setLocaleId as ɵsetLocaleId,
-  ɵsetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  startMeasuring as ɵstartMeasuring,
-  stopMeasuring as ɵstopMeasuring,
-  store as ɵstore,
-  stringify as ɵstringify,
-  transitiveScopesFor as ɵtransitiveScopesFor,
-  triggerResourceLoading as ɵtriggerResourceLoading,
-  truncateMiddle as ɵtruncateMiddle,
-  unregisterAllLocaleData as ɵunregisterLocaleData,
-  unwrapSafeValue as ɵunwrapSafeValue,
-  ɵunwrapWritableSignal,
-  withDomHydration as ɵwithDomHydration,
-  withEventReplay as ɵwithEventReplay,
-  withI18nSupport as ɵwithI18nSupport,
-  withIncrementalHydration as ɵwithIncrementalHydration,
-  ɵɵCopyDefinitionFeature,
-  ɵɵExternalStylesFeature,
-  FactoryTarget as ɵɵFactoryTarget,
-  ɵɵHostDirectivesFeature,
-  ɵɵInheritDefinitionFeature,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵProvidersFeature,
-  ɵɵadvance,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵclassProp,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵcontentQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵdeclareLet,
-  ɵɵdefer,
-  ɵɵdeferEnableTimerScheduling,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferOnHover,
-  ɵɵdeferOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferOnTimer,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferWhen,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵdisableBindings,
-  ɵɵelement,
-  ɵɵelementContainer,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainerStart,
-  ɵɵelementEnd,
-  ɵɵelementStart,
-  ɵɵenableBindings,
-  ɵɵgetComponentDepsFactory,
-  ɵɵgetCurrentView,
-  ɵɵgetInheritedFactory,
-  ɵɵhostProperty,
-  ɵɵi18n,
-  ɵɵi18nApply,
-  ɵɵi18nAttributes,
-  ɵɵi18nEnd,
-  ɵɵi18nExp,
-  ɵɵi18nPostprocess,
-  ɵɵi18nStart,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵinvalidFactoryDep,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵnamespaceHTML,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceSVG,
-  ɵɵnextContext,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵprojection,
-  ɵɵprojectionDef,
-  ɵɵproperty,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵqueryAdvance,
-  ɵɵqueryRefresh,
-  ɵɵreadContextLet,
-  ɵɵreference,
-  registerNgModuleType as ɵɵregisterNgModuleType,
-  ɵɵrepeater,
-  ɵɵrepeaterCreate,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵreplaceMetadata,
-  ɵɵresetView,
-  ɵɵresolveBody,
-  ɵɵresolveDocument,
-  ɵɵresolveWindow,
-  ɵɵrestoreView,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵstoreLet,
-  ɵɵstyleMap,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstyleProp,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵsyntheticHostListener,
-  ɵɵsyntheticHostProperty,
-  ɵɵtemplate,
-  ɵɵtemplateRefExtractor,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵtwoWayProperty,
-  ɵɵvalidateIframeAttribute,
-  ɵɵviewQuery,
-  ɵɵviewQuerySignal
-};
-//# sourceMappingURL=@angular_core.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_core.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_core.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-browser.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-browser.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,84 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  BrowserDomAdapter,
-  BrowserGetTestability,
-  BrowserModule,
-  By,
-  DomEventsPlugin,
-  DomRendererFactory2,
-  DomSanitizer,
-  DomSanitizerImpl,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerGesturesPlugin,
-  HammerModule,
-  HydrationFeatureKind,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  KeyEventsPlugin,
-  Meta,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  SharedStylesHost,
-  Title,
-  VERSION,
-  bootstrapApplication,
-  createApplication,
-  disableDebugTools,
-  enableDebugTools,
-  getDOM,
-  initDomAdapter,
-  platformBrowser,
-  provideClientHydration,
-  provideProtractorTestingSupport,
-  withEventReplay,
-  withHttpTransferCacheOptions,
-  withI18nSupport,
-  withIncrementalHydration,
-  withNoHttpTransferCache
-} from "./chunk-ZI5JGHU3.js";
-import "./chunk-PEAVEDUD.js";
-import "./chunk-YHCV7DAQ.js";
-export {
-  BrowserModule,
-  By,
-  DomSanitizer,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerModule,
-  HydrationFeatureKind,
-  Meta,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  Title,
-  VERSION,
-  bootstrapApplication,
-  createApplication,
-  disableDebugTools,
-  enableDebugTools,
-  platformBrowser,
-  provideClientHydration,
-  provideProtractorTestingSupport,
-  withEventReplay,
-  withHttpTransferCacheOptions,
-  withI18nSupport,
-  withIncrementalHydration,
-  withNoHttpTransferCache,
-  BrowserDomAdapter as ɵBrowserDomAdapter,
-  BrowserGetTestability as ɵBrowserGetTestability,
-  DomEventsPlugin as ɵDomEventsPlugin,
-  DomRendererFactory2 as ɵDomRendererFactory2,
-  DomSanitizerImpl as ɵDomSanitizerImpl,
-  HammerGesturesPlugin as ɵHammerGesturesPlugin,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  KeyEventsPlugin as ɵKeyEventsPlugin,
-  SharedStylesHost as ɵSharedStylesHost,
-  getDOM as ɵgetDOM,
-  initDomAdapter as ɵinitDomAdapter
-};
-//# sourceMappingURL=@angular_platform-browser.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-browser.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-browser.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-server.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-server.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,35 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  BEFORE_APP_SERIALIZED,
-  ENABLE_DOM_EMULATION,
-  INITIAL_CONFIG,
-  INTERNAL_SERVER_PLATFORM_PROVIDERS,
-  PlatformState,
-  SERVER_CONTEXT,
-  SERVER_RENDER_PROVIDERS,
-  ServerModule,
-  VERSION,
-  platformServer,
-  provideServerRendering,
-  renderApplication,
-  renderModule
-} from "./chunk-QSAO6LAI.js";
-import "./chunk-ZI5JGHU3.js";
-import "./chunk-PEAVEDUD.js";
-import "./chunk-YHCV7DAQ.js";
-export {
-  BEFORE_APP_SERIALIZED,
-  INITIAL_CONFIG,
-  PlatformState,
-  ServerModule,
-  VERSION,
-  platformServer,
-  provideServerRendering,
-  renderApplication,
-  renderModule,
-  ENABLE_DOM_EMULATION as ɵENABLE_DOM_EMULATION,
-  INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS,
-  SERVER_CONTEXT as ɵSERVER_CONTEXT,
-  SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS
-};
-//# sourceMappingURL=@angular_platform-server.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-server.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_platform-server.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_router.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_router.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,164 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  ActivatedRoute,
-  ActivatedRouteSnapshot,
-  ActivationEnd,
-  ActivationStart,
-  BaseRouteReuseStrategy,
-  ChildActivationEnd,
-  ChildActivationStart,
-  ChildrenOutletContexts,
-  DefaultTitleStrategy,
-  DefaultUrlSerializer,
-  EventType,
-  GuardsCheckEnd,
-  GuardsCheckStart,
-  NavigationCancel,
-  NavigationCancellationCode,
-  NavigationEnd,
-  NavigationError,
-  NavigationSkipped,
-  NavigationSkippedCode,
-  NavigationStart,
-  NoPreloading,
-  OutletContext,
-  PRIMARY_OUTLET,
-  PreloadAllModules,
-  PreloadingStrategy,
-  ROUTER_CONFIGURATION,
-  ROUTER_INITIALIZER,
-  ROUTER_OUTLET_DATA,
-  ROUTER_PROVIDERS,
-  ROUTES,
-  RedirectCommand,
-  ResolveEnd,
-  ResolveStart,
-  RouteConfigLoadEnd,
-  RouteConfigLoadStart,
-  RouteReuseStrategy,
-  Router,
-  RouterEvent,
-  RouterLink,
-  RouterLinkActive,
-  RouterModule,
-  RouterOutlet,
-  RouterPreloader,
-  RouterState,
-  RouterStateSnapshot,
-  RoutesRecognized,
-  Scroll,
-  TitleStrategy,
-  UrlHandlingStrategy,
-  UrlSegment,
-  UrlSegmentGroup,
-  UrlSerializer,
-  UrlTree,
-  VERSION,
-  afterNextNavigation,
-  convertToParamMap,
-  createUrlTreeFromSnapshot,
-  defaultUrlMatcher,
-  loadChildren,
-  mapToCanActivate,
-  mapToCanActivateChild,
-  mapToCanDeactivate,
-  mapToCanMatch,
-  mapToResolve,
-  provideRouter,
-  provideRoutes,
-  withComponentInputBinding,
-  withDebugTracing,
-  withDisabledInitialNavigation,
-  withEnabledBlockingInitialNavigation,
-  withHashLocation,
-  withInMemoryScrolling,
-  withNavigationErrorHandler,
-  withPreloading,
-  withRouterConfig,
-  withViewTransitions,
-  ɵEmptyOutletComponent
-} from "./chunk-NLOHPSEA.js";
-import "./chunk-ZI5JGHU3.js";
-import "./chunk-PEAVEDUD.js";
-import "./chunk-YHCV7DAQ.js";
-export {
-  ActivatedRoute,
-  ActivatedRouteSnapshot,
-  ActivationEnd,
-  ActivationStart,
-  BaseRouteReuseStrategy,
-  ChildActivationEnd,
-  ChildActivationStart,
-  ChildrenOutletContexts,
-  DefaultTitleStrategy,
-  DefaultUrlSerializer,
-  EventType,
-  GuardsCheckEnd,
-  GuardsCheckStart,
-  NavigationCancel,
-  NavigationCancellationCode,
-  NavigationEnd,
-  NavigationError,
-  NavigationSkipped,
-  NavigationSkippedCode,
-  NavigationStart,
-  NoPreloading,
-  OutletContext,
-  PRIMARY_OUTLET,
-  PreloadAllModules,
-  PreloadingStrategy,
-  ROUTER_CONFIGURATION,
-  ROUTER_INITIALIZER,
-  ROUTER_OUTLET_DATA,
-  ROUTES,
-  RedirectCommand,
-  ResolveEnd,
-  ResolveStart,
-  RouteConfigLoadEnd,
-  RouteConfigLoadStart,
-  RouteReuseStrategy,
-  Router,
-  RouterEvent,
-  RouterLink,
-  RouterLinkActive,
-  RouterLink as RouterLinkWithHref,
-  RouterModule,
-  RouterOutlet,
-  RouterPreloader,
-  RouterState,
-  RouterStateSnapshot,
-  RoutesRecognized,
-  Scroll,
-  TitleStrategy,
-  UrlHandlingStrategy,
-  UrlSegment,
-  UrlSegmentGroup,
-  UrlSerializer,
-  UrlTree,
-  VERSION,
-  convertToParamMap,
-  createUrlTreeFromSnapshot,
-  defaultUrlMatcher,
-  mapToCanActivate,
-  mapToCanActivateChild,
-  mapToCanDeactivate,
-  mapToCanMatch,
-  mapToResolve,
-  provideRouter,
-  provideRoutes,
-  withComponentInputBinding,
-  withDebugTracing,
-  withDisabledInitialNavigation,
-  withEnabledBlockingInitialNavigation,
-  withHashLocation,
-  withInMemoryScrolling,
-  withNavigationErrorHandler,
-  withPreloading,
-  withRouterConfig,
-  withViewTransitions,
-  ɵEmptyOutletComponent,
-  ROUTER_PROVIDERS as ɵROUTER_PROVIDERS,
-  afterNextNavigation as ɵafterNextNavigation,
-  loadChildren as ɵloadChildren
-};
-//# sourceMappingURL=@angular_router.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_router.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_router.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,35 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  AngularAppEngine,
-  InlineCriticalCssProcessor,
-  PrerenderFallback,
-  RenderMode,
-  createRequestHandler,
-  destroyAngularServerApp,
-  extractRoutesAndCreateRouteTree,
-  getOrCreateAngularServerApp,
-  getRoutesFromAngularRouterConfig,
-  provideServerRoutesConfig,
-  setAngularAppEngineManifest,
-  setAngularAppManifest
-} from "./chunk-AR6IXM4V.js";
-import "./chunk-NLOHPSEA.js";
-import "./chunk-QSAO6LAI.js";
-import "./chunk-ZI5JGHU3.js";
-import "./chunk-PEAVEDUD.js";
-import "./chunk-YHCV7DAQ.js";
-export {
-  AngularAppEngine,
-  PrerenderFallback,
-  RenderMode,
-  createRequestHandler,
-  provideServerRoutesConfig,
-  InlineCriticalCssProcessor as ɵInlineCriticalCssProcessor,
-  destroyAngularServerApp as ɵdestroyAngularServerApp,
-  extractRoutesAndCreateRouteTree as ɵextractRoutesAndCreateRouteTree,
-  getOrCreateAngularServerApp as ɵgetOrCreateAngularServerApp,
-  getRoutesFromAngularRouterConfig as ɵgetRoutesFromAngularRouterConfig,
-  setAngularAppEngineManifest as ɵsetAngularAppEngineManifest,
-  setAngularAppManifest as ɵsetAngularAppManifest
-};
-//# sourceMappingURL=@angular_ssr.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr_node.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr_node.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,342 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  AngularAppEngine,
-  InlineCriticalCssProcessor
-} from "./chunk-AR6IXM4V.js";
-import "./chunk-NLOHPSEA.js";
-import {
-  SERVER_CONTEXT,
-  renderApplication,
-  renderModule
-} from "./chunk-QSAO6LAI.js";
-import "./chunk-ZI5JGHU3.js";
-import "./chunk-PEAVEDUD.js";
-import {
-  __async,
-  __spreadValues
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/@angular/ssr/fesm2022/node.mjs
-import * as fs from "fs";
-import { dirname, join, normalize, resolve } from "path";
-import { URL as URL$1, fileURLToPath } from "url";
-import { readFile } from "fs/promises";
-import { argv } from "process";
-var CommonEngineInlineCriticalCssProcessor = class {
-  resourceCache = /* @__PURE__ */ new Map();
-  process(html, outputPath) {
-    return __async(this, null, function* () {
-      const beasties = new InlineCriticalCssProcessor((path) => __async(this, null, function* () {
-        let resourceContent = this.resourceCache.get(path);
-        if (resourceContent === void 0) {
-          resourceContent = yield readFile(path, "utf-8");
-          this.resourceCache.set(path, resourceContent);
-        }
-        return resourceContent;
-      }), outputPath);
-      return beasties.process(html);
-    });
-  }
-};
-var PERFORMANCE_MARK_PREFIX = "🅰️";
-function printPerformanceLogs() {
-  let maxWordLength = 0;
-  const benchmarks = [];
-  for (const {
-    name,
-    duration
-  } of performance.getEntriesByType("measure")) {
-    if (!name.startsWith(PERFORMANCE_MARK_PREFIX)) {
-      continue;
-    }
-    const step = name.slice(PERFORMANCE_MARK_PREFIX.length + 1) + ":";
-    if (step.length > maxWordLength) {
-      maxWordLength = step.length;
-    }
-    benchmarks.push([step, `${duration.toFixed(1)}ms`]);
-    performance.clearMeasures(name);
-  }
-  console.log("********** Performance results **********");
-  for (const [step, value] of benchmarks) {
-    const spaces = maxWordLength - step.length + 5;
-    console.log(step + " ".repeat(spaces) + value);
-  }
-  console.log("*****************************************");
-}
-function runMethodAndMeasurePerf(label, asyncMethod) {
-  return __async(this, null, function* () {
-    const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;
-    const startLabel = `start:${labelName}`;
-    const endLabel = `end:${labelName}`;
-    try {
-      performance.mark(startLabel);
-      return yield asyncMethod();
-    } finally {
-      performance.mark(endLabel);
-      performance.measure(labelName, startLabel, endLabel);
-      performance.clearMarks(startLabel);
-      performance.clearMarks(endLabel);
-    }
-  });
-}
-function noopRunMethodAndMeasurePerf(label, asyncMethod) {
-  return asyncMethod();
-}
-var SSG_MARKER_REGEXP = /ng-server-context=["']\w*\|?ssg\|?\w*["']/;
-var CommonEngine = class {
-  options;
-  templateCache = /* @__PURE__ */ new Map();
-  inlineCriticalCssProcessor = new CommonEngineInlineCriticalCssProcessor();
-  pageIsSSG = /* @__PURE__ */ new Map();
-  constructor(options) {
-    this.options = options;
-  }
-  /**
-   * Render an HTML document for a specific URL with specified
-   * render options
-   */
-  render(opts) {
-    return __async(this, null, function* () {
-      const enablePerformanceProfiler = this.options?.enablePerformanceProfiler;
-      const runMethod = enablePerformanceProfiler ? runMethodAndMeasurePerf : noopRunMethodAndMeasurePerf;
-      let html = yield runMethod("Retrieve SSG Page", () => this.retrieveSSGPage(opts));
-      if (html === void 0) {
-        html = yield runMethod("Render Page", () => this.renderApplication(opts));
-        if (opts.inlineCriticalCss !== false) {
-          const content = yield runMethod("Inline Critical CSS", () => (
-            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-            this.inlineCriticalCss(html, opts)
-          ));
-          html = content;
-        }
-      }
-      if (enablePerformanceProfiler) {
-        printPerformanceLogs();
-      }
-      return html;
-    });
-  }
-  inlineCriticalCss(html, opts) {
-    const outputPath = opts.publicPath ?? (opts.documentFilePath ? dirname(opts.documentFilePath) : "");
-    return this.inlineCriticalCssProcessor.process(html, outputPath);
-  }
-  retrieveSSGPage(opts) {
-    return __async(this, null, function* () {
-      const {
-        publicPath,
-        documentFilePath,
-        url
-      } = opts;
-      if (!publicPath || !documentFilePath || url === void 0) {
-        return void 0;
-      }
-      const {
-        pathname
-      } = new URL$1(url, "resolve://");
-      const pagePath = join(publicPath, pathname, "index.html");
-      if (this.pageIsSSG.get(pagePath)) {
-        return fs.promises.readFile(pagePath, "utf-8");
-      }
-      if (!pagePath.startsWith(normalize(publicPath))) {
-        return void 0;
-      }
-      if (pagePath === resolve(documentFilePath) || !(yield exists(pagePath))) {
-        this.pageIsSSG.set(pagePath, false);
-        return void 0;
-      }
-      const content = yield fs.promises.readFile(pagePath, "utf-8");
-      const isSSG = SSG_MARKER_REGEXP.test(content);
-      this.pageIsSSG.set(pagePath, isSSG);
-      return isSSG ? content : void 0;
-    });
-  }
-  renderApplication(opts) {
-    return __async(this, null, function* () {
-      const moduleOrFactory = this.options?.bootstrap ?? opts.bootstrap;
-      if (!moduleOrFactory) {
-        throw new Error("A module or bootstrap option must be provided.");
-      }
-      const extraProviders = [{
-        provide: SERVER_CONTEXT,
-        useValue: "ssr"
-      }, ...opts.providers ?? [], ...this.options?.providers ?? []];
-      let document = opts.document;
-      if (!document && opts.documentFilePath) {
-        document = yield this.getDocument(opts.documentFilePath);
-      }
-      const commonRenderingOptions = {
-        url: opts.url,
-        document
-      };
-      return isBootstrapFn(moduleOrFactory) ? renderApplication(moduleOrFactory, __spreadValues({
-        platformProviders: extraProviders
-      }, commonRenderingOptions)) : renderModule(moduleOrFactory, __spreadValues({
-        extraProviders
-      }, commonRenderingOptions));
-    });
-  }
-  /** Retrieve the document from the cache or the filesystem */
-  getDocument(filePath) {
-    return __async(this, null, function* () {
-      let doc = this.templateCache.get(filePath);
-      if (!doc) {
-        doc = yield fs.promises.readFile(filePath, "utf-8");
-        this.templateCache.set(filePath, doc);
-      }
-      return doc;
-    });
-  }
-};
-function exists(path) {
-  return __async(this, null, function* () {
-    try {
-      yield fs.promises.access(path, fs.constants.F_OK);
-      return true;
-    } catch {
-      return false;
-    }
-  });
-}
-function isBootstrapFn(value) {
-  return typeof value === "function" && !("ɵmod" in value);
-}
-var HTTP2_PSEUDO_HEADERS = /* @__PURE__ */ new Set([":method", ":scheme", ":authority", ":path", ":status"]);
-function createWebRequestFromNodeRequest(nodeRequest) {
-  const {
-    headers,
-    method = "GET"
-  } = nodeRequest;
-  const withBody = method !== "GET" && method !== "HEAD";
-  return new Request(createRequestUrl(nodeRequest), {
-    method,
-    headers: createRequestHeaders(headers),
-    body: withBody ? nodeRequest : void 0,
-    duplex: withBody ? "half" : void 0
-  });
-}
-function createRequestHeaders(nodeHeaders) {
-  const headers = new Headers();
-  for (const [name, value] of Object.entries(nodeHeaders)) {
-    if (HTTP2_PSEUDO_HEADERS.has(name)) {
-      continue;
-    }
-    if (typeof value === "string") {
-      headers.append(name, value);
-    } else if (Array.isArray(value)) {
-      for (const item of value) {
-        headers.append(name, item);
-      }
-    }
-  }
-  return headers;
-}
-function createRequestUrl(nodeRequest) {
-  const {
-    headers,
-    socket,
-    url = "",
-    originalUrl
-  } = nodeRequest;
-  const protocol = getFirstHeaderValue(headers["x-forwarded-proto"]) ?? ("encrypted" in socket && socket.encrypted ? "https" : "http");
-  const hostname = getFirstHeaderValue(headers["x-forwarded-host"]) ?? headers.host ?? headers[":authority"];
-  if (Array.isArray(hostname)) {
-    throw new Error("host value cannot be an array.");
-  }
-  let hostnameWithPort = hostname;
-  if (!hostname?.includes(":")) {
-    const port = getFirstHeaderValue(headers["x-forwarded-port"]);
-    if (port) {
-      hostnameWithPort += `:${port}`;
-    }
-  }
-  return new URL(originalUrl ?? url, `${protocol}://${hostnameWithPort}`);
-}
-function getFirstHeaderValue(value) {
-  return value?.toString().split(",", 1)[0]?.trim();
-}
-var AngularNodeAppEngine = class {
-  angularAppEngine = new AngularAppEngine();
-  /**
-   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,
-   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.
-   *
-   * This method adapts Node.js's `IncomingMessage` or `Http2ServerRequest`
-   * to a format compatible with the `AngularAppEngine` and delegates the handling logic to it.
-   *
-   * @param request - The incoming HTTP request (`IncomingMessage` or `Http2ServerRequest`).
-   * @param requestContext - Optional context for rendering, such as metadata associated with the request.
-   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.
-   *
-   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route
-   * corresponding to `https://www.example.com/page`.
-   */
-  handle(request, requestContext) {
-    return __async(this, null, function* () {
-      const webRequest = createWebRequestFromNodeRequest(request);
-      return this.angularAppEngine.handle(webRequest, requestContext);
-    });
-  }
-};
-function createNodeRequestHandler(handler) {
-  handler["__ng_node_request_handler__"] = true;
-  return handler;
-}
-function writeResponseToNodeResponse(source, destination) {
-  return __async(this, null, function* () {
-    const {
-      status,
-      headers,
-      body
-    } = source;
-    destination.statusCode = status;
-    let cookieHeaderSet = false;
-    for (const [name, value] of headers.entries()) {
-      if (name === "set-cookie") {
-        if (cookieHeaderSet) {
-          continue;
-        }
-        destination.setHeader(name, headers.getSetCookie());
-        cookieHeaderSet = true;
-      } else {
-        destination.setHeader(name, value);
-      }
-    }
-    if (!body) {
-      destination.end();
-      return;
-    }
-    try {
-      const reader = body.getReader();
-      destination.on("close", () => {
-        reader.cancel().catch((error) => {
-          console.error(`An error occurred while writing the response body for: ${destination.req.url}.`, error);
-        });
-      });
-      while (true) {
-        const {
-          done,
-          value
-        } = yield reader.read();
-        if (done) {
-          destination.end();
-          break;
-        }
-        destination.write(value);
-      }
-    } catch {
-      destination.end("Internal server error.");
-    }
-  });
-}
-function isMainModule(url) {
-  return url.startsWith("file:") && argv[1] === fileURLToPath(url);
-}
-export {
-  AngularNodeAppEngine,
-  CommonEngine,
-  createNodeRequestHandler,
-  createWebRequestFromNodeRequest,
-  isMainModule,
-  writeResponseToNodeResponse
-};
-//# sourceMappingURL=@angular_ssr_node.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr_node.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/@angular_ssr_node.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/ssr/fesm2022/node.mjs"],
-  "sourcesContent": ["import { ɵSERVER_CONTEXT as _SERVER_CONTEXT, renderApplication, renderModule } from '@angular/platform-server';\nimport * as fs from 'node:fs';\nimport { dirname, join, normalize, resolve } from 'node:path';\nimport { URL as URL$1, fileURLToPath } from 'node:url';\nimport { ɵInlineCriticalCssProcessor as _InlineCriticalCssProcessor, AngularAppEngine } from '@angular/ssr';\nimport { readFile } from 'node:fs/promises';\nimport { argv } from 'node:process';\nclass CommonEngineInlineCriticalCssProcessor {\n  resourceCache = new Map();\n  async process(html, outputPath) {\n    const beasties = new _InlineCriticalCssProcessor(async path => {\n      let resourceContent = this.resourceCache.get(path);\n      if (resourceContent === undefined) {\n        resourceContent = await readFile(path, 'utf-8');\n        this.resourceCache.set(path, resourceContent);\n      }\n      return resourceContent;\n    }, outputPath);\n    return beasties.process(html);\n  }\n}\nconst PERFORMANCE_MARK_PREFIX = '🅰️';\nfunction printPerformanceLogs() {\n  let maxWordLength = 0;\n  const benchmarks = [];\n  for (const {\n    name,\n    duration\n  } of performance.getEntriesByType('measure')) {\n    if (!name.startsWith(PERFORMANCE_MARK_PREFIX)) {\n      continue;\n    }\n    // `🅰️:Retrieve SSG Page` -> `Retrieve SSG Page:`\n    const step = name.slice(PERFORMANCE_MARK_PREFIX.length + 1) + ':';\n    if (step.length > maxWordLength) {\n      maxWordLength = step.length;\n    }\n    benchmarks.push([step, `${duration.toFixed(1)}ms`]);\n    performance.clearMeasures(name);\n  }\n  /* eslint-disable no-console */\n  console.log('********** Performance results **********');\n  for (const [step, value] of benchmarks) {\n    const spaces = maxWordLength - step.length + 5;\n    console.log(step + ' '.repeat(spaces) + value);\n  }\n  console.log('*****************************************');\n  /* eslint-enable no-console */\n}\nasync function runMethodAndMeasurePerf(label, asyncMethod) {\n  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n  const startLabel = `start:${labelName}`;\n  const endLabel = `end:${labelName}`;\n  try {\n    performance.mark(startLabel);\n    return await asyncMethod();\n  } finally {\n    performance.mark(endLabel);\n    performance.measure(labelName, startLabel, endLabel);\n    performance.clearMarks(startLabel);\n    performance.clearMarks(endLabel);\n  }\n}\nfunction noopRunMethodAndMeasurePerf(label, asyncMethod) {\n  return asyncMethod();\n}\nconst SSG_MARKER_REGEXP = /ng-server-context=[\"']\\w*\\|?ssg\\|?\\w*[\"']/;\n/**\n * A common engine to use to server render an application.\n */\nclass CommonEngine {\n  options;\n  templateCache = new Map();\n  inlineCriticalCssProcessor = new CommonEngineInlineCriticalCssProcessor();\n  pageIsSSG = new Map();\n  constructor(options) {\n    this.options = options;\n  }\n  /**\n   * Render an HTML document for a specific URL with specified\n   * render options\n   */\n  async render(opts) {\n    const enablePerformanceProfiler = this.options?.enablePerformanceProfiler;\n    const runMethod = enablePerformanceProfiler ? runMethodAndMeasurePerf : noopRunMethodAndMeasurePerf;\n    let html = await runMethod('Retrieve SSG Page', () => this.retrieveSSGPage(opts));\n    if (html === undefined) {\n      html = await runMethod('Render Page', () => this.renderApplication(opts));\n      if (opts.inlineCriticalCss !== false) {\n        const content = await runMethod('Inline Critical CSS', () =>\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        this.inlineCriticalCss(html, opts));\n        html = content;\n      }\n    }\n    if (enablePerformanceProfiler) {\n      printPerformanceLogs();\n    }\n    return html;\n  }\n  inlineCriticalCss(html, opts) {\n    const outputPath = opts.publicPath ?? (opts.documentFilePath ? dirname(opts.documentFilePath) : '');\n    return this.inlineCriticalCssProcessor.process(html, outputPath);\n  }\n  async retrieveSSGPage(opts) {\n    const {\n      publicPath,\n      documentFilePath,\n      url\n    } = opts;\n    if (!publicPath || !documentFilePath || url === undefined) {\n      return undefined;\n    }\n    const {\n      pathname\n    } = new URL$1(url, 'resolve://');\n    // Do not use `resolve` here as otherwise it can lead to path traversal vulnerability.\n    // See: https://portswigger.net/web-security/file-path-traversal\n    const pagePath = join(publicPath, pathname, 'index.html');\n    if (this.pageIsSSG.get(pagePath)) {\n      // Serve pre-rendered page.\n      return fs.promises.readFile(pagePath, 'utf-8');\n    }\n    if (!pagePath.startsWith(normalize(publicPath))) {\n      // Potential path traversal detected.\n      return undefined;\n    }\n    if (pagePath === resolve(documentFilePath) || !(await exists(pagePath))) {\n      // View matches with prerender path or file does not exist.\n      this.pageIsSSG.set(pagePath, false);\n      return undefined;\n    }\n    // Static file exists.\n    const content = await fs.promises.readFile(pagePath, 'utf-8');\n    const isSSG = SSG_MARKER_REGEXP.test(content);\n    this.pageIsSSG.set(pagePath, isSSG);\n    return isSSG ? content : undefined;\n  }\n  async renderApplication(opts) {\n    const moduleOrFactory = this.options?.bootstrap ?? opts.bootstrap;\n    if (!moduleOrFactory) {\n      throw new Error('A module or bootstrap option must be provided.');\n    }\n    const extraProviders = [{\n      provide: _SERVER_CONTEXT,\n      useValue: 'ssr'\n    }, ...(opts.providers ?? []), ...(this.options?.providers ?? [])];\n    let document = opts.document;\n    if (!document && opts.documentFilePath) {\n      document = await this.getDocument(opts.documentFilePath);\n    }\n    const commonRenderingOptions = {\n      url: opts.url,\n      document\n    };\n    return isBootstrapFn(moduleOrFactory) ? renderApplication(moduleOrFactory, {\n      platformProviders: extraProviders,\n      ...commonRenderingOptions\n    }) : renderModule(moduleOrFactory, {\n      extraProviders,\n      ...commonRenderingOptions\n    });\n  }\n  /** Retrieve the document from the cache or the filesystem */\n  async getDocument(filePath) {\n    let doc = this.templateCache.get(filePath);\n    if (!doc) {\n      doc = await fs.promises.readFile(filePath, 'utf-8');\n      this.templateCache.set(filePath, doc);\n    }\n    return doc;\n  }\n}\nasync function exists(path) {\n  try {\n    await fs.promises.access(path, fs.constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction isBootstrapFn(value) {\n  // We can differentiate between a module and a bootstrap function by reading compiler-generated `ɵmod` static property:\n  return typeof value === 'function' && !('ɵmod' in value);\n}\n\n/**\n * A set containing all the pseudo-headers defined in the HTTP/2 specification.\n *\n * This set can be used to filter out pseudo-headers from a list of headers,\n * as they are not allowed to be set directly using the `Node.js` Undici API or\n * the web `Headers` API.\n */\nconst HTTP2_PSEUDO_HEADERS = new Set([':method', ':scheme', ':authority', ':path', ':status']);\n/**\n * Converts a Node.js `IncomingMessage` or `Http2ServerRequest` into a\n * Web Standard `Request` object.\n *\n * This function adapts the Node.js request objects to a format that can\n * be used by web platform APIs.\n *\n * @param nodeRequest - The Node.js request object (`IncomingMessage` or `Http2ServerRequest`) to convert.\n * @returns A Web Standard `Request` object.\n * @developerPreview\n */\nfunction createWebRequestFromNodeRequest(nodeRequest) {\n  const {\n    headers,\n    method = 'GET'\n  } = nodeRequest;\n  const withBody = method !== 'GET' && method !== 'HEAD';\n  return new Request(createRequestUrl(nodeRequest), {\n    method,\n    headers: createRequestHeaders(headers),\n    body: withBody ? nodeRequest : undefined,\n    duplex: withBody ? 'half' : undefined\n  });\n}\n/**\n * Creates a `Headers` object from Node.js `IncomingHttpHeaders`.\n *\n * @param nodeHeaders - The Node.js `IncomingHttpHeaders` object to convert.\n * @returns A `Headers` object containing the converted headers.\n */\nfunction createRequestHeaders(nodeHeaders) {\n  const headers = new Headers();\n  for (const [name, value] of Object.entries(nodeHeaders)) {\n    if (HTTP2_PSEUDO_HEADERS.has(name)) {\n      continue;\n    }\n    if (typeof value === 'string') {\n      headers.append(name, value);\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(name, item);\n      }\n    }\n  }\n  return headers;\n}\n/**\n * Creates a `URL` object from a Node.js `IncomingMessage`, taking into account the protocol, host, and port.\n *\n * @param nodeRequest - The Node.js `IncomingMessage` or `Http2ServerRequest` object to extract URL information from.\n * @returns A `URL` object representing the request URL.\n */\nfunction createRequestUrl(nodeRequest) {\n  const {\n    headers,\n    socket,\n    url = '',\n    originalUrl\n  } = nodeRequest;\n  const protocol = getFirstHeaderValue(headers['x-forwarded-proto']) ?? ('encrypted' in socket && socket.encrypted ? 'https' : 'http');\n  const hostname = getFirstHeaderValue(headers['x-forwarded-host']) ?? headers.host ?? headers[':authority'];\n  if (Array.isArray(hostname)) {\n    throw new Error('host value cannot be an array.');\n  }\n  let hostnameWithPort = hostname;\n  if (!hostname?.includes(':')) {\n    const port = getFirstHeaderValue(headers['x-forwarded-port']);\n    if (port) {\n      hostnameWithPort += `:${port}`;\n    }\n  }\n  return new URL(originalUrl ?? url, `${protocol}://${hostnameWithPort}`);\n}\n/**\n * Extracts the first value from a multi-value header string.\n *\n * @param value - A string or an array of strings representing the header values.\n *                           If it's a string, values are expected to be comma-separated.\n * @returns The first trimmed value from the multi-value header, or `undefined` if the input is invalid or empty.\n *\n * @example\n * ```typescript\n * getFirstHeaderValue(\"value1, value2, value3\"); // \"value1\"\n * getFirstHeaderValue([\"value1\", \"value2\"]); // \"value1\"\n * getFirstHeaderValue(undefined); // undefined\n * ```\n */\nfunction getFirstHeaderValue(value) {\n  return value?.toString().split(',', 1)[0]?.trim();\n}\n\n/**\n * Angular server application engine.\n * Manages Angular server applications (including localized ones), handles rendering requests,\n * and optionally transforms index HTML before rendering.\n *\n * @remarks This class should be instantiated once and used as a singleton across the server-side\n * application to ensure consistent handling of rendering requests and resource management.\n *\n * @developerPreview\n */\nclass AngularNodeAppEngine {\n  angularAppEngine = new AngularAppEngine();\n  /**\n   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n   *\n   * This method adapts Node.js's `IncomingMessage` or `Http2ServerRequest`\n   * to a format compatible with the `AngularAppEngine` and delegates the handling logic to it.\n   *\n   * @param request - The incoming HTTP request (`IncomingMessage` or `Http2ServerRequest`).\n   * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n   *\n   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n   * corresponding to `https://www.example.com/page`.\n   */\n  async handle(request, requestContext) {\n    const webRequest = createWebRequestFromNodeRequest(request);\n    return this.angularAppEngine.handle(webRequest, requestContext);\n  }\n}\n\n/**\n * Attaches metadata to the handler function to mark it as a special handler for Node.js environments.\n *\n * @typeParam T - The type of the handler function.\n * @param handler - The handler function to be defined and annotated.\n * @returns The same handler function passed as an argument, with metadata attached.\n *\n * @example\n * Usage in an Express application:\n * ```ts\n * const app = express();\n * export default createNodeRequestHandler(app);\n * ```\n *\n * @example\n * Usage in a Hono application:\n * ```ts\n * const app = new Hono();\n * export default createNodeRequestHandler(async (req, res, next) => {\n *   try {\n *     const webRes = await app.fetch(createWebRequestFromNodeRequest(req));\n *     if (webRes) {\n *       await writeResponseToNodeResponse(webRes, res);\n *     } else {\n *       next();\n *     }\n *   } catch (error) {\n *     next(error);\n *   }\n * }));\n * ```\n *\n * @example\n * Usage in a Fastify application:\n * ```ts\n * const app = Fastify();\n * export default createNodeRequestHandler(async (req, res) => {\n *   await app.ready();\n *   app.server.emit('request', req, res);\n *   res.send('Hello from Fastify with Node Next Handler!');\n * }));\n * ```\n * @developerPreview\n */\nfunction createNodeRequestHandler(handler) {\n  handler['__ng_node_request_handler__'] = true;\n  return handler;\n}\n\n/**\n * Streams a web-standard `Response` into a Node.js `ServerResponse`\n * or `Http2ServerResponse`.\n *\n * This function adapts the web `Response` object to write its content\n * to a Node.js response object, handling both HTTP/1.1 and HTTP/2.\n *\n * @param source - The web-standard `Response` object to stream from.\n * @param destination - The Node.js response object (`ServerResponse` or `Http2ServerResponse`) to stream into.\n * @returns A promise that resolves once the streaming operation is complete.\n * @developerPreview\n */\nasync function writeResponseToNodeResponse(source, destination) {\n  const {\n    status,\n    headers,\n    body\n  } = source;\n  destination.statusCode = status;\n  let cookieHeaderSet = false;\n  for (const [name, value] of headers.entries()) {\n    if (name === 'set-cookie') {\n      if (cookieHeaderSet) {\n        continue;\n      }\n      // Sets the 'set-cookie' header only once to ensure it is correctly applied.\n      // Concatenating 'set-cookie' values can lead to incorrect behavior, so we use a single value from `headers.getSetCookie()`.\n      destination.setHeader(name, headers.getSetCookie());\n      cookieHeaderSet = true;\n    } else {\n      destination.setHeader(name, value);\n    }\n  }\n  if (!body) {\n    destination.end();\n    return;\n  }\n  try {\n    const reader = body.getReader();\n    destination.on('close', () => {\n      reader.cancel().catch(error => {\n        // eslint-disable-next-line no-console\n        console.error(`An error occurred while writing the response body for: ${destination.req.url}.`, error);\n      });\n    });\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      const {\n        done,\n        value\n      } = await reader.read();\n      if (done) {\n        destination.end();\n        break;\n      }\n      destination.write(value);\n    }\n  } catch {\n    destination.end('Internal server error.');\n  }\n}\n\n/**\n * Determines whether the provided URL represents the main entry point module.\n *\n * This function checks if the provided URL corresponds to the main ESM module being executed directly.\n * It's useful for conditionally executing code that should only run when a module is the entry point,\n * such as starting a server or initializing an application.\n *\n * It performs two key checks:\n * 1. Verifies if the URL starts with 'file:', ensuring it is a local file.\n * 2. Compares the URL's resolved file path with the first command-line argument (`process.argv[1]`),\n *    which points to the file being executed.\n *\n * @param url The URL of the module to check. This should typically be `import.meta.url`.\n * @returns `true` if the provided URL represents the main entry point, otherwise `false`.\n * @developerPreview\n */\nfunction isMainModule(url) {\n  return url.startsWith('file:') && argv[1] === fileURLToPath(url);\n}\nexport { AngularNodeAppEngine, CommonEngine, createNodeRequestHandler, createWebRequestFromNodeRequest, isMainModule, writeResponseToNodeResponse };\n"],
-  "mappings": "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",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/_metadata.json
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/_metadata.json	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,73 +1,0 @@
-{
-  "hash": "34afa87e",
-  "configHash": "c2b6d9be",
-  "lockfileHash": "b10492bf",
-  "browserHash": "db62f080",
-  "optimized": {
-    "@angular/core": {
-      "src": "../../../../../../node_modules/@angular/core/fesm2022/core.mjs",
-      "file": "@angular_core.js",
-      "fileHash": "11287951",
-      "needsInterop": false
-    },
-    "@angular/platform-browser": {
-      "src": "../../../../../../node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs",
-      "file": "@angular_platform-browser.js",
-      "fileHash": "e9ce73f9",
-      "needsInterop": false
-    },
-    "@angular/platform-server": {
-      "src": "../../../../../../node_modules/@angular/platform-server/fesm2022/platform-server.mjs",
-      "file": "@angular_platform-server.js",
-      "fileHash": "5b08203c",
-      "needsInterop": false
-    },
-    "@angular/router": {
-      "src": "../../../../../../node_modules/@angular/router/fesm2022/router.mjs",
-      "file": "@angular_router.js",
-      "fileHash": "b6067aac",
-      "needsInterop": false
-    },
-    "@angular/ssr": {
-      "src": "../../../../../../node_modules/@angular/ssr/fesm2022/ssr.mjs",
-      "file": "@angular_ssr.js",
-      "fileHash": "ba577134",
-      "needsInterop": false
-    },
-    "@angular/ssr/node": {
-      "src": "../../../../../../node_modules/@angular/ssr/fesm2022/node.mjs",
-      "file": "@angular_ssr_node.js",
-      "fileHash": "cde5463c",
-      "needsInterop": false
-    },
-    "express": {
-      "src": "../../../../../../node_modules/express/index.js",
-      "file": "express.js",
-      "fileHash": "ffb46130",
-      "needsInterop": true
-    }
-  },
-  "chunks": {
-    "chunk-AR6IXM4V": {
-      "file": "chunk-AR6IXM4V.js"
-    },
-    "chunk-NLOHPSEA": {
-      "file": "chunk-NLOHPSEA.js"
-    },
-    "chunk-QSAO6LAI": {
-      "file": "chunk-QSAO6LAI.js"
-    },
-    "chunk-ZI5JGHU3": {
-      "file": "chunk-ZI5JGHU3.js"
-    },
-    "chunk-PEAVEDUD": {
-      "file": "chunk-PEAVEDUD.js"
-    },
-    "xhr2-TXIMV6CV": {
-      "file": "xhr2-TXIMV6CV.js"
-    },
-    "chunk-YHCV7DAQ": {
-      "file": "chunk-YHCV7DAQ.js"
-    }
-  }
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-AR6IXM4V.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-AR6IXM4V.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,11292 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  Router,
-  loadChildren
-} from "./chunk-NLOHPSEA.js";
-import {
-  INITIAL_CONFIG,
-  SERVER_CONTEXT,
-  platformServer,
-  renderApplication,
-  renderModule
-} from "./chunk-QSAO6LAI.js";
-import {
-  APP_BASE_HREF,
-  PlatformLocation
-} from "./chunk-ZI5JGHU3.js";
-import {
-  APP_INITIALIZER,
-  ApplicationRef,
-  Compiler,
-  Console,
-  InjectionToken,
-  LOCALE_ID,
-  REQUEST,
-  REQUEST_CONTEXT,
-  RESPONSE_INIT,
-  inject,
-  makeEnvironmentProviders,
-  resetCompiledComponents,
-  runInInjectionContext
-} from "./chunk-PEAVEDUD.js";
-import {
-  __async,
-  __asyncGenerator,
-  __await,
-  __forAwait,
-  __objRest,
-  __spreadProps,
-  __spreadValues,
-  __superGet,
-  __yieldStar
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/@angular/ssr/third_party/beasties/index.js
-function createNotImplementedError(name) {
-  throw new Error(`[unenv] ${name} is not implemented yet!`);
-}
-function notImplemented(name) {
-  const fn = () => {
-    throw createNotImplementedError(name);
-  };
-  return Object.assign(fn, {
-    __unenv__: true
-  });
-}
-var access = notImplemented("fs.access");
-var copyFile = notImplemented("fs.copyFile");
-var cp = notImplemented("fs.cp");
-var open = notImplemented("fs.open");
-var opendir = notImplemented("fs.opendir");
-var rename = notImplemented("fs.rename");
-var truncate = notImplemented("fs.truncate");
-var rm = notImplemented("fs.rm");
-var rmdir = notImplemented("fs.rmdir");
-var mkdir = notImplemented("fs.mkdir");
-var readdir = notImplemented("fs.readdir");
-var readlink = notImplemented("fs.readlink");
-var symlink = notImplemented("fs.symlink");
-var lstat = notImplemented("fs.lstat");
-var stat = notImplemented("fs.stat");
-var link = notImplemented("fs.link");
-var unlink = notImplemented("fs.unlink");
-var chmod = notImplemented("fs.chmod");
-var lchmod = notImplemented("fs.lchmod");
-var lchown = notImplemented("fs.lchown");
-var chown = notImplemented("fs.chown");
-var utimes = notImplemented("fs.utimes");
-var lutimes = notImplemented("fs.lutimes");
-var realpath = notImplemented("fs.realpath");
-var mkdtemp = notImplemented("fs.mkdtemp");
-var writeFile = notImplemented("fs.writeFile");
-var appendFile = notImplemented("fs.appendFile");
-var readFile$1 = notImplemented("fs.readFile");
-notImplemented("fs.watch");
-var statfs = notImplemented("fs.statfs");
-function notImplementedAsync(name) {
-  const fn = notImplemented(name);
-  fn.__promisify__ = () => notImplemented(name + ".__promisify__");
-  fn.native = fn;
-  return fn;
-}
-function callbackify(fn) {
-  const fnc = function(...args) {
-    const cb = args.pop();
-    fn().catch((error) => cb(error)).then((val) => cb(void 0, val));
-  };
-  fnc.__promisify__ = fn;
-  fnc.native = fnc;
-  return fnc;
-}
-callbackify(access);
-callbackify(appendFile);
-callbackify(chown);
-callbackify(chmod);
-callbackify(copyFile);
-callbackify(cp);
-callbackify(lchown);
-callbackify(lchmod);
-callbackify(link);
-callbackify(lstat);
-callbackify(lutimes);
-callbackify(mkdir);
-callbackify(mkdtemp);
-callbackify(realpath);
-callbackify(open);
-callbackify(opendir);
-callbackify(readdir);
-var readFile = callbackify(readFile$1);
-callbackify(readlink);
-callbackify(rename);
-callbackify(rm);
-callbackify(rmdir);
-callbackify(stat);
-callbackify(symlink);
-callbackify(truncate);
-callbackify(unlink);
-callbackify(utimes);
-callbackify(writeFile);
-callbackify(statfs);
-notImplementedAsync("fs.close");
-notImplementedAsync("fs.createReadStream");
-notImplementedAsync("fs.createWriteStream");
-notImplementedAsync("fs.exists");
-notImplementedAsync("fs.fchown");
-notImplementedAsync("fs.fchmod");
-notImplementedAsync("fs.fdatasync");
-notImplementedAsync("fs.fstat");
-notImplementedAsync("fs.fsync");
-notImplementedAsync("fs.ftruncate");
-notImplementedAsync("fs.futimes");
-notImplementedAsync("fs.lstatSync");
-notImplementedAsync("fs.read");
-notImplementedAsync("fs.readv");
-notImplementedAsync("fs.realpathSync");
-notImplementedAsync("fs.statSync");
-notImplementedAsync("fs.unwatchFile");
-notImplementedAsync("fs.watch");
-notImplementedAsync("fs.watchFile");
-notImplementedAsync("fs.write");
-notImplementedAsync("fs.writev");
-notImplementedAsync("fs._toUnixTimestamp");
-notImplementedAsync("fs.openAsBlob");
-notImplemented("fs.appendFileSync");
-notImplemented("fs.accessSync");
-notImplemented("fs.chownSync");
-notImplemented("fs.chmodSync");
-notImplemented("fs.closeSync");
-notImplemented("fs.copyFileSync");
-notImplemented("fs.cpSync");
-notImplemented("fs.fchownSync");
-notImplemented("fs.fchmodSync");
-notImplemented("fs.fdatasyncSync");
-notImplemented("fs.fstatSync");
-notImplemented("fs.fsyncSync");
-notImplemented("fs.ftruncateSync");
-notImplemented("fs.futimesSync");
-notImplemented("fs.lchownSync");
-notImplemented("fs.lchmodSync");
-notImplemented("fs.linkSync");
-notImplemented("fs.lutimesSync");
-notImplemented("fs.mkdirSync");
-notImplemented("fs.mkdtempSync");
-notImplemented("fs.openSync");
-notImplemented("fs.opendirSync");
-notImplemented("fs.readdirSync");
-notImplemented("fs.readSync");
-notImplemented("fs.readvSync");
-notImplemented("fs.readFileSync");
-notImplemented("fs.readlinkSync");
-notImplemented("fs.renameSync");
-notImplemented("fs.rmSync");
-notImplemented("fs.rmdirSync");
-notImplemented("fs.symlinkSync");
-notImplemented("fs.truncateSync");
-notImplemented("fs.unlinkSync");
-notImplemented("fs.utimesSync");
-notImplemented("fs.writeFileSync");
-notImplemented("fs.writeSync");
-notImplemented("fs.writevSync");
-notImplemented("fs.statfsSync");
-var _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
-function normalizeWindowsPath(input2 = "") {
-  if (!input2) {
-    return input2;
-  }
-  return input2.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
-}
-var _UNC_REGEX = /^[/\\]{2}/;
-var _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
-var _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
-var _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/;
-var sep = "/";
-var delimiter = ":";
-var normalize = function(path2) {
-  if (path2.length === 0) {
-    return ".";
-  }
-  path2 = normalizeWindowsPath(path2);
-  const isUNCPath = path2.match(_UNC_REGEX);
-  const isPathAbsolute = isAbsolute(path2);
-  const trailingSeparator = path2[path2.length - 1] === "/";
-  path2 = normalizeString(path2, !isPathAbsolute);
-  if (path2.length === 0) {
-    if (isPathAbsolute) {
-      return "/";
-    }
-    return trailingSeparator ? "./" : ".";
-  }
-  if (trailingSeparator) {
-    path2 += "/";
-  }
-  if (_DRIVE_LETTER_RE.test(path2)) {
-    path2 += "/";
-  }
-  if (isUNCPath) {
-    if (!isPathAbsolute) {
-      return `//./${path2}`;
-    }
-    return `//${path2}`;
-  }
-  return isPathAbsolute && !isAbsolute(path2) ? `/${path2}` : path2;
-};
-var join = function(...arguments_) {
-  if (arguments_.length === 0) {
-    return ".";
-  }
-  let joined;
-  for (const argument of arguments_) {
-    if (argument && argument.length > 0) {
-      if (joined === void 0) {
-        joined = argument;
-      } else {
-        joined += `/${argument}`;
-      }
-    }
-  }
-  if (joined === void 0) {
-    return ".";
-  }
-  return normalize(joined.replace(/\/\/+/g, "/"));
-};
-function cwd() {
-  if (typeof process !== "undefined" && typeof process.cwd === "function") {
-    return process.cwd().replace(/\\/g, "/");
-  }
-  return "/";
-}
-var resolve = function(...arguments_) {
-  arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
-  let resolvedPath = "";
-  let resolvedAbsolute = false;
-  for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
-    const path2 = index >= 0 ? arguments_[index] : cwd();
-    if (!path2 || path2.length === 0) {
-      continue;
-    }
-    resolvedPath = `${path2}/${resolvedPath}`;
-    resolvedAbsolute = isAbsolute(path2);
-  }
-  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
-  if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
-    return `/${resolvedPath}`;
-  }
-  return resolvedPath.length > 0 ? resolvedPath : ".";
-};
-function normalizeString(path2, allowAboveRoot) {
-  let res = "";
-  let lastSegmentLength = 0;
-  let lastSlash = -1;
-  let dots = 0;
-  let char = null;
-  for (let index = 0; index <= path2.length; ++index) {
-    if (index < path2.length) {
-      char = path2[index];
-    } else if (char === "/") {
-      break;
-    } else {
-      char = "/";
-    }
-    if (char === "/") {
-      if (lastSlash === index - 1 || dots === 1) ;
-      else if (dots === 2) {
-        if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
-          if (res.length > 2) {
-            const lastSlashIndex = res.lastIndexOf("/");
-            if (lastSlashIndex === -1) {
-              res = "";
-              lastSegmentLength = 0;
-            } else {
-              res = res.slice(0, lastSlashIndex);
-              lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
-            }
-            lastSlash = index;
-            dots = 0;
-            continue;
-          } else if (res.length > 0) {
-            res = "";
-            lastSegmentLength = 0;
-            lastSlash = index;
-            dots = 0;
-            continue;
-          }
-        }
-        if (allowAboveRoot) {
-          res += res.length > 0 ? "/.." : "..";
-          lastSegmentLength = 2;
-        }
-      } else {
-        if (res.length > 0) {
-          res += `/${path2.slice(lastSlash + 1, index)}`;
-        } else {
-          res = path2.slice(lastSlash + 1, index);
-        }
-        lastSegmentLength = index - lastSlash - 1;
-      }
-      lastSlash = index;
-      dots = 0;
-    } else if (char === "." && dots !== -1) {
-      ++dots;
-    } else {
-      dots = -1;
-    }
-  }
-  return res;
-}
-var isAbsolute = function(p) {
-  return _IS_ABSOLUTE_RE.test(p);
-};
-var toNamespacedPath = function(p) {
-  return normalizeWindowsPath(p);
-};
-var _EXTNAME_RE = /.(\.[^./]+)$/;
-var extname = function(p) {
-  const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
-  return match && match[1] || "";
-};
-var relative = function(from, to) {
-  const _from = resolve(from).replace(_ROOT_FOLDER_RE, "$1").split("/");
-  const _to = resolve(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
-  if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0]) {
-    return _to.join("/");
-  }
-  const _fromCopy = [..._from];
-  for (const segment of _fromCopy) {
-    if (_to[0] !== segment) {
-      break;
-    }
-    _from.shift();
-    _to.shift();
-  }
-  return [..._from.map(() => ".."), ..._to].join("/");
-};
-var dirname = function(p) {
-  const segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
-  if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {
-    segments[0] += "/";
-  }
-  return segments.join("/") || (isAbsolute(p) ? "/" : ".");
-};
-var format = function(p) {
-  const segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);
-  return normalizeWindowsPath(p.root ? resolve(...segments) : segments.join("/"));
-};
-var basename = function(p, extension) {
-  const lastSegment = normalizeWindowsPath(p).split("/").pop();
-  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
-};
-var parse$3 = function(p) {
-  const root2 = normalizeWindowsPath(p).split("/").shift() || "/";
-  const base = basename(p);
-  const extension = extname(base);
-  return {
-    root: root2,
-    dir: dirname(p),
-    base,
-    ext: extension,
-    name: base.slice(0, base.length - extension.length)
-  };
-};
-var path = {
-  __proto__: null,
-  basename,
-  delimiter,
-  dirname,
-  extname,
-  format,
-  isAbsolute,
-  join,
-  normalize,
-  normalizeString,
-  parse: parse$3,
-  relative,
-  resolve,
-  sep,
-  toNamespacedPath
-};
-var _path = Object.freeze({
-  __proto__: null,
-  basename,
-  default: path,
-  delimiter,
-  dirname,
-  extname,
-  format,
-  isAbsolute,
-  join,
-  normalize,
-  normalizeString,
-  parse: parse$3,
-  relative,
-  resolve,
-  sep,
-  toNamespacedPath
-});
-var _pathModule = __spreadProps(__spreadValues({}, _path), {
-  platform: "posix",
-  posix: void 0,
-  win32: void 0
-});
-_pathModule.posix = _pathModule;
-_pathModule.win32 = _pathModule;
-function getDefaultExportFromCjs(x) {
-  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
-}
-function getAugmentedNamespace(n) {
-  if (n.__esModule) return n;
-  var f = n.default;
-  if (typeof f == "function") {
-    var a = function a2() {
-      if (this instanceof a2) {
-        return Reflect.construct(f, arguments, this.constructor);
-      }
-      return f.apply(this, arguments);
-    };
-    a.prototype = f.prototype;
-  } else a = {};
-  Object.defineProperty(a, "__esModule", {
-    value: true
-  });
-  Object.keys(n).forEach(function(k) {
-    var d = Object.getOwnPropertyDescriptor(n, k);
-    Object.defineProperty(a, k, d.get ? d : {
-      enumerable: true,
-      get: function() {
-        return n[k];
-      }
-    });
-  });
-  return a;
-}
-var picocolors_browser = {
-  exports: {}
-};
-var hasRequiredPicocolors_browser;
-function requirePicocolors_browser() {
-  if (hasRequiredPicocolors_browser) return picocolors_browser.exports;
-  hasRequiredPicocolors_browser = 1;
-  var x = String;
-  var create = function() {
-    return {
-      isColorSupported: false,
-      reset: x,
-      bold: x,
-      dim: x,
-      italic: x,
-      underline: x,
-      inverse: x,
-      hidden: x,
-      strikethrough: x,
-      black: x,
-      red: x,
-      green: x,
-      yellow: x,
-      blue: x,
-      magenta: x,
-      cyan: x,
-      white: x,
-      gray: x,
-      bgBlack: x,
-      bgRed: x,
-      bgGreen: x,
-      bgYellow: x,
-      bgBlue: x,
-      bgMagenta: x,
-      bgCyan: x,
-      bgWhite: x,
-      blackBright: x,
-      redBright: x,
-      greenBright: x,
-      yellowBright: x,
-      blueBright: x,
-      magentaBright: x,
-      cyanBright: x,
-      whiteBright: x,
-      bgBlackBright: x,
-      bgRedBright: x,
-      bgGreenBright: x,
-      bgYellowBright: x,
-      bgBlueBright: x,
-      bgMagentaBright: x,
-      bgCyanBright: x,
-      bgWhiteBright: x
-    };
-  };
-  picocolors_browser.exports = create();
-  picocolors_browser.exports.createColors = create;
-  return picocolors_browser.exports;
-}
-var _nodeResolve_empty = {};
-var _nodeResolve_empty$1 = Object.freeze({
-  __proto__: null,
-  default: _nodeResolve_empty
-});
-var require$$2 = getAugmentedNamespace(_nodeResolve_empty$1);
-var cssSyntaxError;
-var hasRequiredCssSyntaxError;
-function requireCssSyntaxError() {
-  if (hasRequiredCssSyntaxError) return cssSyntaxError;
-  hasRequiredCssSyntaxError = 1;
-  let pico = requirePicocolors_browser();
-  let terminalHighlight = require$$2;
-  class CssSyntaxError extends Error {
-    constructor(message, line, column, source, file, plugin) {
-      super(message);
-      this.name = "CssSyntaxError";
-      this.reason = message;
-      if (file) {
-        this.file = file;
-      }
-      if (source) {
-        this.source = source;
-      }
-      if (plugin) {
-        this.plugin = plugin;
-      }
-      if (typeof line !== "undefined" && typeof column !== "undefined") {
-        if (typeof line === "number") {
-          this.line = line;
-          this.column = column;
-        } else {
-          this.line = line.line;
-          this.column = line.column;
-          this.endLine = column.line;
-          this.endColumn = column.column;
-        }
-      }
-      this.setMessage();
-      if (Error.captureStackTrace) {
-        Error.captureStackTrace(this, CssSyntaxError);
-      }
-    }
-    setMessage() {
-      this.message = this.plugin ? this.plugin + ": " : "";
-      this.message += this.file ? this.file : "<css input>";
-      if (typeof this.line !== "undefined") {
-        this.message += ":" + this.line + ":" + this.column;
-      }
-      this.message += ": " + this.reason;
-    }
-    showSourceCode(color) {
-      if (!this.source) return "";
-      let css = this.source;
-      if (color == null) color = pico.isColorSupported;
-      let aside = (text) => text;
-      let mark = (text) => text;
-      let highlight = (text) => text;
-      if (color) {
-        let {
-          bold,
-          gray,
-          red
-        } = pico.createColors(true);
-        mark = (text) => bold(red(text));
-        aside = (text) => gray(text);
-        if (terminalHighlight) {
-          highlight = (text) => terminalHighlight(text);
-        }
-      }
-      let lines = css.split(/\r?\n/);
-      let start = Math.max(this.line - 3, 0);
-      let end = Math.min(this.line + 2, lines.length);
-      let maxWidth = String(end).length;
-      return lines.slice(start, end).map((line, index) => {
-        let number = start + 1 + index;
-        let gutter = " " + (" " + number).slice(-maxWidth) + " | ";
-        if (number === this.line) {
-          if (line.length > 160) {
-            let padding = 20;
-            let subLineStart = Math.max(0, this.column - padding);
-            let subLineEnd = Math.max(this.column + padding, this.endColumn + padding);
-            let subLine = line.slice(subLineStart, subLineEnd);
-            let spacing2 = aside(gutter.replace(/\d/g, " ")) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\t]/g, " ");
-            return mark(">") + aside(gutter) + highlight(subLine) + "\n " + spacing2 + mark("^");
-          }
-          let spacing = aside(gutter.replace(/\d/g, " ")) + line.slice(0, this.column - 1).replace(/[^\t]/g, " ");
-          return mark(">") + aside(gutter) + highlight(line) + "\n " + spacing + mark("^");
-        }
-        return " " + aside(gutter) + highlight(line);
-      }).join("\n");
-    }
-    toString() {
-      let code = this.showSourceCode();
-      if (code) {
-        code = "\n\n" + code + "\n";
-      }
-      return this.name + ": " + this.message + code;
-    }
-  }
-  cssSyntaxError = CssSyntaxError;
-  CssSyntaxError.default = CssSyntaxError;
-  return cssSyntaxError;
-}
-var stringifier;
-var hasRequiredStringifier;
-function requireStringifier() {
-  if (hasRequiredStringifier) return stringifier;
-  hasRequiredStringifier = 1;
-  const DEFAULT_RAW = {
-    after: "\n",
-    beforeClose: "\n",
-    beforeComment: "\n",
-    beforeDecl: "\n",
-    beforeOpen: " ",
-    beforeRule: "\n",
-    colon: ": ",
-    commentLeft: " ",
-    commentRight: " ",
-    emptyBody: "",
-    indent: "    ",
-    semicolon: false
-  };
-  function capitalize(str) {
-    return str[0].toUpperCase() + str.slice(1);
-  }
-  class Stringifier {
-    constructor(builder) {
-      this.builder = builder;
-    }
-    atrule(node2, semicolon) {
-      let name = "@" + node2.name;
-      let params = node2.params ? this.rawValue(node2, "params") : "";
-      if (typeof node2.raws.afterName !== "undefined") {
-        name += node2.raws.afterName;
-      } else if (params) {
-        name += " ";
-      }
-      if (node2.nodes) {
-        this.block(node2, name + params);
-      } else {
-        let end = (node2.raws.between || "") + (semicolon ? ";" : "");
-        this.builder(name + params + end, node2);
-      }
-    }
-    beforeAfter(node2, detect) {
-      let value;
-      if (node2.type === "decl") {
-        value = this.raw(node2, null, "beforeDecl");
-      } else if (node2.type === "comment") {
-        value = this.raw(node2, null, "beforeComment");
-      } else if (detect === "before") {
-        value = this.raw(node2, null, "beforeRule");
-      } else {
-        value = this.raw(node2, null, "beforeClose");
-      }
-      let buf = node2.parent;
-      let depth = 0;
-      while (buf && buf.type !== "root") {
-        depth += 1;
-        buf = buf.parent;
-      }
-      if (value.includes("\n")) {
-        let indent = this.raw(node2, null, "indent");
-        if (indent.length) {
-          for (let step = 0; step < depth; step++) value += indent;
-        }
-      }
-      return value;
-    }
-    block(node2, start) {
-      let between = this.raw(node2, "between", "beforeOpen");
-      this.builder(start + between + "{", node2, "start");
-      let after;
-      if (node2.nodes && node2.nodes.length) {
-        this.body(node2);
-        after = this.raw(node2, "after");
-      } else {
-        after = this.raw(node2, "after", "emptyBody");
-      }
-      if (after) this.builder(after);
-      this.builder("}", node2, "end");
-    }
-    body(node2) {
-      let last = node2.nodes.length - 1;
-      while (last > 0) {
-        if (node2.nodes[last].type !== "comment") break;
-        last -= 1;
-      }
-      let semicolon = this.raw(node2, "semicolon");
-      for (let i = 0; i < node2.nodes.length; i++) {
-        let child = node2.nodes[i];
-        let before = this.raw(child, "before");
-        if (before) this.builder(before);
-        this.stringify(child, last !== i || semicolon);
-      }
-    }
-    comment(node2) {
-      let left = this.raw(node2, "left", "commentLeft");
-      let right = this.raw(node2, "right", "commentRight");
-      this.builder("/*" + left + node2.text + right + "*/", node2);
-    }
-    decl(node2, semicolon) {
-      let between = this.raw(node2, "between", "colon");
-      let string = node2.prop + between + this.rawValue(node2, "value");
-      if (node2.important) {
-        string += node2.raws.important || " !important";
-      }
-      if (semicolon) string += ";";
-      this.builder(string, node2);
-    }
-    document(node2) {
-      this.body(node2);
-    }
-    raw(node2, own, detect) {
-      let value;
-      if (!detect) detect = own;
-      if (own) {
-        value = node2.raws[own];
-        if (typeof value !== "undefined") return value;
-      }
-      let parent = node2.parent;
-      if (detect === "before") {
-        if (!parent || parent.type === "root" && parent.first === node2) {
-          return "";
-        }
-        if (parent && parent.type === "document") {
-          return "";
-        }
-      }
-      if (!parent) return DEFAULT_RAW[detect];
-      let root2 = node2.root();
-      if (!root2.rawCache) root2.rawCache = {};
-      if (typeof root2.rawCache[detect] !== "undefined") {
-        return root2.rawCache[detect];
-      }
-      if (detect === "before" || detect === "after") {
-        return this.beforeAfter(node2, detect);
-      } else {
-        let method = "raw" + capitalize(detect);
-        if (this[method]) {
-          value = this[method](root2, node2);
-        } else {
-          root2.walk((i) => {
-            value = i.raws[own];
-            if (typeof value !== "undefined") return false;
-          });
-        }
-      }
-      if (typeof value === "undefined") value = DEFAULT_RAW[detect];
-      root2.rawCache[detect] = value;
-      return value;
-    }
-    rawBeforeClose(root2) {
-      let value;
-      root2.walk((i) => {
-        if (i.nodes && i.nodes.length > 0) {
-          if (typeof i.raws.after !== "undefined") {
-            value = i.raws.after;
-            if (value.includes("\n")) {
-              value = value.replace(/[^\n]+$/, "");
-            }
-            return false;
-          }
-        }
-      });
-      if (value) value = value.replace(/\S/g, "");
-      return value;
-    }
-    rawBeforeComment(root2, node2) {
-      let value;
-      root2.walkComments((i) => {
-        if (typeof i.raws.before !== "undefined") {
-          value = i.raws.before;
-          if (value.includes("\n")) {
-            value = value.replace(/[^\n]+$/, "");
-          }
-          return false;
-        }
-      });
-      if (typeof value === "undefined") {
-        value = this.raw(node2, null, "beforeDecl");
-      } else if (value) {
-        value = value.replace(/\S/g, "");
-      }
-      return value;
-    }
-    rawBeforeDecl(root2, node2) {
-      let value;
-      root2.walkDecls((i) => {
-        if (typeof i.raws.before !== "undefined") {
-          value = i.raws.before;
-          if (value.includes("\n")) {
-            value = value.replace(/[^\n]+$/, "");
-          }
-          return false;
-        }
-      });
-      if (typeof value === "undefined") {
-        value = this.raw(node2, null, "beforeRule");
-      } else if (value) {
-        value = value.replace(/\S/g, "");
-      }
-      return value;
-    }
-    rawBeforeOpen(root2) {
-      let value;
-      root2.walk((i) => {
-        if (i.type !== "decl") {
-          value = i.raws.between;
-          if (typeof value !== "undefined") return false;
-        }
-      });
-      return value;
-    }
-    rawBeforeRule(root2) {
-      let value;
-      root2.walk((i) => {
-        if (i.nodes && (i.parent !== root2 || root2.first !== i)) {
-          if (typeof i.raws.before !== "undefined") {
-            value = i.raws.before;
-            if (value.includes("\n")) {
-              value = value.replace(/[^\n]+$/, "");
-            }
-            return false;
-          }
-        }
-      });
-      if (value) value = value.replace(/\S/g, "");
-      return value;
-    }
-    rawColon(root2) {
-      let value;
-      root2.walkDecls((i) => {
-        if (typeof i.raws.between !== "undefined") {
-          value = i.raws.between.replace(/[^\s:]/g, "");
-          return false;
-        }
-      });
-      return value;
-    }
-    rawEmptyBody(root2) {
-      let value;
-      root2.walk((i) => {
-        if (i.nodes && i.nodes.length === 0) {
-          value = i.raws.after;
-          if (typeof value !== "undefined") return false;
-        }
-      });
-      return value;
-    }
-    rawIndent(root2) {
-      if (root2.raws.indent) return root2.raws.indent;
-      let value;
-      root2.walk((i) => {
-        let p = i.parent;
-        if (p && p !== root2 && p.parent && p.parent === root2) {
-          if (typeof i.raws.before !== "undefined") {
-            let parts = i.raws.before.split("\n");
-            value = parts[parts.length - 1];
-            value = value.replace(/\S/g, "");
-            return false;
-          }
-        }
-      });
-      return value;
-    }
-    rawSemicolon(root2) {
-      let value;
-      root2.walk((i) => {
-        if (i.nodes && i.nodes.length && i.last.type === "decl") {
-          value = i.raws.semicolon;
-          if (typeof value !== "undefined") return false;
-        }
-      });
-      return value;
-    }
-    rawValue(node2, prop) {
-      let value = node2[prop];
-      let raw = node2.raws[prop];
-      if (raw && raw.value === value) {
-        return raw.raw;
-      }
-      return value;
-    }
-    root(node2) {
-      this.body(node2);
-      if (node2.raws.after) this.builder(node2.raws.after);
-    }
-    rule(node2) {
-      this.block(node2, this.rawValue(node2, "selector"));
-      if (node2.raws.ownSemicolon) {
-        this.builder(node2.raws.ownSemicolon, node2, "end");
-      }
-    }
-    stringify(node2, semicolon) {
-      if (!this[node2.type]) {
-        throw new Error("Unknown AST node type " + node2.type + ". Maybe you need to change PostCSS stringifier.");
-      }
-      this[node2.type](node2, semicolon);
-    }
-  }
-  stringifier = Stringifier;
-  Stringifier.default = Stringifier;
-  return stringifier;
-}
-var stringify_1;
-var hasRequiredStringify;
-function requireStringify() {
-  if (hasRequiredStringify) return stringify_1;
-  hasRequiredStringify = 1;
-  let Stringifier = requireStringifier();
-  function stringify2(node2, builder) {
-    let str = new Stringifier(builder);
-    str.stringify(node2);
-  }
-  stringify_1 = stringify2;
-  stringify2.default = stringify2;
-  return stringify_1;
-}
-var symbols = {};
-var hasRequiredSymbols;
-function requireSymbols() {
-  if (hasRequiredSymbols) return symbols;
-  hasRequiredSymbols = 1;
-  symbols.isClean = Symbol("isClean");
-  symbols.my = Symbol("my");
-  return symbols;
-}
-var node;
-var hasRequiredNode$1;
-function requireNode$1() {
-  if (hasRequiredNode$1) return node;
-  hasRequiredNode$1 = 1;
-  let CssSyntaxError = requireCssSyntaxError();
-  let Stringifier = requireStringifier();
-  let stringify2 = requireStringify();
-  let {
-    isClean,
-    my
-  } = requireSymbols();
-  function cloneNode2(obj, parent) {
-    let cloned = new obj.constructor();
-    for (let i in obj) {
-      if (!Object.prototype.hasOwnProperty.call(obj, i)) {
-        continue;
-      }
-      if (i === "proxyCache") continue;
-      let value = obj[i];
-      let type = typeof value;
-      if (i === "parent" && type === "object") {
-        if (parent) cloned[i] = parent;
-      } else if (i === "source") {
-        cloned[i] = value;
-      } else if (Array.isArray(value)) {
-        cloned[i] = value.map((j) => cloneNode2(j, cloned));
-      } else {
-        if (type === "object" && value !== null) value = cloneNode2(value);
-        cloned[i] = value;
-      }
-    }
-    return cloned;
-  }
-  function sourceOffset(inputCSS, position) {
-    if (position && typeof position.offset !== "undefined") {
-      return position.offset;
-    }
-    let column = 1;
-    let line = 1;
-    let offset = 0;
-    for (let i = 0; i < inputCSS.length; i++) {
-      if (line === position.line && column === position.column) {
-        offset = i;
-        break;
-      }
-      if (inputCSS[i] === "\n") {
-        column = 1;
-        line += 1;
-      } else {
-        column += 1;
-      }
-    }
-    return offset;
-  }
-  class Node2 {
-    constructor(defaults = {}) {
-      this.raws = {};
-      this[isClean] = false;
-      this[my] = true;
-      for (let name in defaults) {
-        if (name === "nodes") {
-          this.nodes = [];
-          for (let node2 of defaults[name]) {
-            if (typeof node2.clone === "function") {
-              this.append(node2.clone());
-            } else {
-              this.append(node2);
-            }
-          }
-        } else {
-          this[name] = defaults[name];
-        }
-      }
-    }
-    addToError(error) {
-      error.postcssNode = this;
-      if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
-        let s = this.source;
-        error.stack = error.stack.replace(/\n\s{4}at /, `$&${s.input.from}:${s.start.line}:${s.start.column}$&`);
-      }
-      return error;
-    }
-    after(add) {
-      this.parent.insertAfter(this, add);
-      return this;
-    }
-    assign(overrides = {}) {
-      for (let name in overrides) {
-        this[name] = overrides[name];
-      }
-      return this;
-    }
-    before(add) {
-      this.parent.insertBefore(this, add);
-      return this;
-    }
-    cleanRaws(keepBetween) {
-      delete this.raws.before;
-      delete this.raws.after;
-      if (!keepBetween) delete this.raws.between;
-    }
-    clone(overrides = {}) {
-      let cloned = cloneNode2(this);
-      for (let name in overrides) {
-        cloned[name] = overrides[name];
-      }
-      return cloned;
-    }
-    cloneAfter(overrides = {}) {
-      let cloned = this.clone(overrides);
-      this.parent.insertAfter(this, cloned);
-      return cloned;
-    }
-    cloneBefore(overrides = {}) {
-      let cloned = this.clone(overrides);
-      this.parent.insertBefore(this, cloned);
-      return cloned;
-    }
-    error(message, opts = {}) {
-      if (this.source) {
-        let {
-          end,
-          start
-        } = this.rangeBy(opts);
-        return this.source.input.error(message, {
-          column: start.column,
-          line: start.line
-        }, {
-          column: end.column,
-          line: end.line
-        }, opts);
-      }
-      return new CssSyntaxError(message);
-    }
-    getProxyProcessor() {
-      return {
-        get(node2, prop) {
-          if (prop === "proxyOf") {
-            return node2;
-          } else if (prop === "root") {
-            return () => node2.root().toProxy();
-          } else {
-            return node2[prop];
-          }
-        },
-        set(node2, prop, value) {
-          if (node2[prop] === value) return true;
-          node2[prop] = value;
-          if (prop === "prop" || prop === "value" || prop === "name" || prop === "params" || prop === "important" || /* c8 ignore next */
-          prop === "text") {
-            node2.markDirty();
-          }
-          return true;
-        }
-      };
-    }
-    /* c8 ignore next 3 */
-    markClean() {
-      this[isClean] = true;
-    }
-    markDirty() {
-      if (this[isClean]) {
-        this[isClean] = false;
-        let next = this;
-        while (next = next.parent) {
-          next[isClean] = false;
-        }
-      }
-    }
-    next() {
-      if (!this.parent) return void 0;
-      let index = this.parent.index(this);
-      return this.parent.nodes[index + 1];
-    }
-    positionBy(opts) {
-      let pos = this.source.start;
-      if (opts.index) {
-        pos = this.positionInside(opts.index);
-      } else if (opts.word) {
-        let stringRepresentation = this.source.input.css.slice(sourceOffset(this.source.input.css, this.source.start), sourceOffset(this.source.input.css, this.source.end));
-        let index = stringRepresentation.indexOf(opts.word);
-        if (index !== -1) pos = this.positionInside(index);
-      }
-      return pos;
-    }
-    positionInside(index) {
-      let column = this.source.start.column;
-      let line = this.source.start.line;
-      let offset = sourceOffset(this.source.input.css, this.source.start);
-      let end = offset + index;
-      for (let i = offset; i < end; i++) {
-        if (this.source.input.css[i] === "\n") {
-          column = 1;
-          line += 1;
-        } else {
-          column += 1;
-        }
-      }
-      return {
-        column,
-        line
-      };
-    }
-    prev() {
-      if (!this.parent) return void 0;
-      let index = this.parent.index(this);
-      return this.parent.nodes[index - 1];
-    }
-    rangeBy(opts) {
-      let start = {
-        column: this.source.start.column,
-        line: this.source.start.line
-      };
-      let end = this.source.end ? {
-        column: this.source.end.column + 1,
-        line: this.source.end.line
-      } : {
-        column: start.column + 1,
-        line: start.line
-      };
-      if (opts.word) {
-        let stringRepresentation = this.source.input.css.slice(sourceOffset(this.source.input.css, this.source.start), sourceOffset(this.source.input.css, this.source.end));
-        let index = stringRepresentation.indexOf(opts.word);
-        if (index !== -1) {
-          start = this.positionInside(index);
-          end = this.positionInside(index + opts.word.length);
-        }
-      } else {
-        if (opts.start) {
-          start = {
-            column: opts.start.column,
-            line: opts.start.line
-          };
-        } else if (opts.index) {
-          start = this.positionInside(opts.index);
-        }
-        if (opts.end) {
-          end = {
-            column: opts.end.column,
-            line: opts.end.line
-          };
-        } else if (typeof opts.endIndex === "number") {
-          end = this.positionInside(opts.endIndex);
-        } else if (opts.index) {
-          end = this.positionInside(opts.index + 1);
-        }
-      }
-      if (end.line < start.line || end.line === start.line && end.column <= start.column) {
-        end = {
-          column: start.column + 1,
-          line: start.line
-        };
-      }
-      return {
-        end,
-        start
-      };
-    }
-    raw(prop, defaultType) {
-      let str = new Stringifier();
-      return str.raw(this, prop, defaultType);
-    }
-    remove() {
-      if (this.parent) {
-        this.parent.removeChild(this);
-      }
-      this.parent = void 0;
-      return this;
-    }
-    replaceWith(...nodes) {
-      if (this.parent) {
-        let bookmark = this;
-        let foundSelf = false;
-        for (let node2 of nodes) {
-          if (node2 === this) {
-            foundSelf = true;
-          } else if (foundSelf) {
-            this.parent.insertAfter(bookmark, node2);
-            bookmark = node2;
-          } else {
-            this.parent.insertBefore(bookmark, node2);
-          }
-        }
-        if (!foundSelf) {
-          this.remove();
-        }
-      }
-      return this;
-    }
-    root() {
-      let result2 = this;
-      while (result2.parent && result2.parent.type !== "document") {
-        result2 = result2.parent;
-      }
-      return result2;
-    }
-    toJSON(_, inputs) {
-      let fixed = {};
-      let emitInputs = inputs == null;
-      inputs = inputs || /* @__PURE__ */ new Map();
-      let inputsNextIndex = 0;
-      for (let name in this) {
-        if (!Object.prototype.hasOwnProperty.call(this, name)) {
-          continue;
-        }
-        if (name === "parent" || name === "proxyCache") continue;
-        let value = this[name];
-        if (Array.isArray(value)) {
-          fixed[name] = value.map((i) => {
-            if (typeof i === "object" && i.toJSON) {
-              return i.toJSON(null, inputs);
-            } else {
-              return i;
-            }
-          });
-        } else if (typeof value === "object" && value.toJSON) {
-          fixed[name] = value.toJSON(null, inputs);
-        } else if (name === "source") {
-          let inputId = inputs.get(value.input);
-          if (inputId == null) {
-            inputId = inputsNextIndex;
-            inputs.set(value.input, inputsNextIndex);
-            inputsNextIndex++;
-          }
-          fixed[name] = {
-            end: value.end,
-            inputId,
-            start: value.start
-          };
-        } else {
-          fixed[name] = value;
-        }
-      }
-      if (emitInputs) {
-        fixed.inputs = [...inputs.keys()].map((input2) => input2.toJSON());
-      }
-      return fixed;
-    }
-    toProxy() {
-      if (!this.proxyCache) {
-        this.proxyCache = new Proxy(this, this.getProxyProcessor());
-      }
-      return this.proxyCache;
-    }
-    toString(stringifier2 = stringify2) {
-      if (stringifier2.stringify) stringifier2 = stringifier2.stringify;
-      let result2 = "";
-      stringifier2(this, (i) => {
-        result2 += i;
-      });
-      return result2;
-    }
-    warn(result2, text, opts) {
-      let data = {
-        node: this
-      };
-      for (let i in opts) data[i] = opts[i];
-      return result2.warn(text, data);
-    }
-    get proxyOf() {
-      return this;
-    }
-  }
-  node = Node2;
-  Node2.default = Node2;
-  return node;
-}
-var comment;
-var hasRequiredComment;
-function requireComment() {
-  if (hasRequiredComment) return comment;
-  hasRequiredComment = 1;
-  let Node2 = requireNode$1();
-  class Comment2 extends Node2 {
-    constructor(defaults) {
-      super(defaults);
-      this.type = "comment";
-    }
-  }
-  comment = Comment2;
-  Comment2.default = Comment2;
-  return comment;
-}
-var declaration;
-var hasRequiredDeclaration;
-function requireDeclaration() {
-  if (hasRequiredDeclaration) return declaration;
-  hasRequiredDeclaration = 1;
-  let Node2 = requireNode$1();
-  class Declaration extends Node2 {
-    constructor(defaults) {
-      if (defaults && typeof defaults.value !== "undefined" && typeof defaults.value !== "string") {
-        defaults = __spreadProps(__spreadValues({}, defaults), {
-          value: String(defaults.value)
-        });
-      }
-      super(defaults);
-      this.type = "decl";
-    }
-    get variable() {
-      return this.prop.startsWith("--") || this.prop[0] === "$";
-    }
-  }
-  declaration = Declaration;
-  Declaration.default = Declaration;
-  return declaration;
-}
-var container;
-var hasRequiredContainer$1;
-function requireContainer$1() {
-  if (hasRequiredContainer$1) return container;
-  hasRequiredContainer$1 = 1;
-  let Comment2 = requireComment();
-  let Declaration = requireDeclaration();
-  let Node2 = requireNode$1();
-  let {
-    isClean,
-    my
-  } = requireSymbols();
-  let AtRule, parse2, Root2, Rule;
-  function cleanSource(nodes) {
-    return nodes.map((i) => {
-      if (i.nodes) i.nodes = cleanSource(i.nodes);
-      delete i.source;
-      return i;
-    });
-  }
-  function markTreeDirty(node2) {
-    node2[isClean] = false;
-    if (node2.proxyOf.nodes) {
-      for (let i of node2.proxyOf.nodes) {
-        markTreeDirty(i);
-      }
-    }
-  }
-  class Container2 extends Node2 {
-    append(...children) {
-      for (let child of children) {
-        let nodes = this.normalize(child, this.last);
-        for (let node2 of nodes) this.proxyOf.nodes.push(node2);
-      }
-      this.markDirty();
-      return this;
-    }
-    cleanRaws(keepBetween) {
-      super.cleanRaws(keepBetween);
-      if (this.nodes) {
-        for (let node2 of this.nodes) node2.cleanRaws(keepBetween);
-      }
-    }
-    each(callback) {
-      if (!this.proxyOf.nodes) return void 0;
-      let iterator = this.getIterator();
-      let index, result2;
-      while (this.indexes[iterator] < this.proxyOf.nodes.length) {
-        index = this.indexes[iterator];
-        result2 = callback(this.proxyOf.nodes[index], index);
-        if (result2 === false) break;
-        this.indexes[iterator] += 1;
-      }
-      delete this.indexes[iterator];
-      return result2;
-    }
-    every(condition) {
-      return this.nodes.every(condition);
-    }
-    getIterator() {
-      if (!this.lastEach) this.lastEach = 0;
-      if (!this.indexes) this.indexes = {};
-      this.lastEach += 1;
-      let iterator = this.lastEach;
-      this.indexes[iterator] = 0;
-      return iterator;
-    }
-    getProxyProcessor() {
-      return {
-        get(node2, prop) {
-          if (prop === "proxyOf") {
-            return node2;
-          } else if (!node2[prop]) {
-            return node2[prop];
-          } else if (prop === "each" || typeof prop === "string" && prop.startsWith("walk")) {
-            return (...args) => {
-              return node2[prop](...args.map((i) => {
-                if (typeof i === "function") {
-                  return (child, index) => i(child.toProxy(), index);
-                } else {
-                  return i;
-                }
-              }));
-            };
-          } else if (prop === "every" || prop === "some") {
-            return (cb) => {
-              return node2[prop]((child, ...other) => cb(child.toProxy(), ...other));
-            };
-          } else if (prop === "root") {
-            return () => node2.root().toProxy();
-          } else if (prop === "nodes") {
-            return node2.nodes.map((i) => i.toProxy());
-          } else if (prop === "first" || prop === "last") {
-            return node2[prop].toProxy();
-          } else {
-            return node2[prop];
-          }
-        },
-        set(node2, prop, value) {
-          if (node2[prop] === value) return true;
-          node2[prop] = value;
-          if (prop === "name" || prop === "params" || prop === "selector") {
-            node2.markDirty();
-          }
-          return true;
-        }
-      };
-    }
-    index(child) {
-      if (typeof child === "number") return child;
-      if (child.proxyOf) child = child.proxyOf;
-      return this.proxyOf.nodes.indexOf(child);
-    }
-    insertAfter(exist, add) {
-      let existIndex = this.index(exist);
-      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();
-      existIndex = this.index(exist);
-      for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node2);
-      let index;
-      for (let id in this.indexes) {
-        index = this.indexes[id];
-        if (existIndex < index) {
-          this.indexes[id] = index + nodes.length;
-        }
-      }
-      this.markDirty();
-      return this;
-    }
-    insertBefore(exist, add) {
-      let existIndex = this.index(exist);
-      let type = existIndex === 0 ? "prepend" : false;
-      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();
-      existIndex = this.index(exist);
-      for (let node2 of nodes) this.proxyOf.nodes.splice(existIndex, 0, node2);
-      let index;
-      for (let id in this.indexes) {
-        index = this.indexes[id];
-        if (existIndex <= index) {
-          this.indexes[id] = index + nodes.length;
-        }
-      }
-      this.markDirty();
-      return this;
-    }
-    normalize(nodes, sample) {
-      if (typeof nodes === "string") {
-        nodes = cleanSource(parse2(nodes).nodes);
-      } else if (typeof nodes === "undefined") {
-        nodes = [];
-      } else if (Array.isArray(nodes)) {
-        nodes = nodes.slice(0);
-        for (let i of nodes) {
-          if (i.parent) i.parent.removeChild(i, "ignore");
-        }
-      } else if (nodes.type === "root" && this.type !== "document") {
-        nodes = nodes.nodes.slice(0);
-        for (let i of nodes) {
-          if (i.parent) i.parent.removeChild(i, "ignore");
-        }
-      } else if (nodes.type) {
-        nodes = [nodes];
-      } else if (nodes.prop) {
-        if (typeof nodes.value === "undefined") {
-          throw new Error("Value field is missed in node creation");
-        } else if (typeof nodes.value !== "string") {
-          nodes.value = String(nodes.value);
-        }
-        nodes = [new Declaration(nodes)];
-      } else if (nodes.selector || nodes.selectors) {
-        nodes = [new Rule(nodes)];
-      } else if (nodes.name) {
-        nodes = [new AtRule(nodes)];
-      } else if (nodes.text) {
-        nodes = [new Comment2(nodes)];
-      } else {
-        throw new Error("Unknown node type in node creation");
-      }
-      let processed = nodes.map((i) => {
-        if (!i[my]) Container2.rebuild(i);
-        i = i.proxyOf;
-        if (i.parent) i.parent.removeChild(i);
-        if (i[isClean]) markTreeDirty(i);
-        if (!i.raws) i.raws = {};
-        if (typeof i.raws.before === "undefined") {
-          if (sample && typeof sample.raws.before !== "undefined") {
-            i.raws.before = sample.raws.before.replace(/\S/g, "");
-          }
-        }
-        i.parent = this.proxyOf;
-        return i;
-      });
-      return processed;
-    }
-    prepend(...children) {
-      children = children.reverse();
-      for (let child of children) {
-        let nodes = this.normalize(child, this.first, "prepend").reverse();
-        for (let node2 of nodes) this.proxyOf.nodes.unshift(node2);
-        for (let id in this.indexes) {
-          this.indexes[id] = this.indexes[id] + nodes.length;
-        }
-      }
-      this.markDirty();
-      return this;
-    }
-    push(child) {
-      child.parent = this;
-      this.proxyOf.nodes.push(child);
-      return this;
-    }
-    removeAll() {
-      for (let node2 of this.proxyOf.nodes) node2.parent = void 0;
-      this.proxyOf.nodes = [];
-      this.markDirty();
-      return this;
-    }
-    removeChild(child) {
-      child = this.index(child);
-      this.proxyOf.nodes[child].parent = void 0;
-      this.proxyOf.nodes.splice(child, 1);
-      let index;
-      for (let id in this.indexes) {
-        index = this.indexes[id];
-        if (index >= child) {
-          this.indexes[id] = index - 1;
-        }
-      }
-      this.markDirty();
-      return this;
-    }
-    replaceValues(pattern, opts, callback) {
-      if (!callback) {
-        callback = opts;
-        opts = {};
-      }
-      this.walkDecls((decl) => {
-        if (opts.props && !opts.props.includes(decl.prop)) return;
-        if (opts.fast && !decl.value.includes(opts.fast)) return;
-        decl.value = decl.value.replace(pattern, callback);
-      });
-      this.markDirty();
-      return this;
-    }
-    some(condition) {
-      return this.nodes.some(condition);
-    }
-    walk(callback) {
-      return this.each((child, i) => {
-        let result2;
-        try {
-          result2 = callback(child, i);
-        } catch (e) {
-          throw child.addToError(e);
-        }
-        if (result2 !== false && child.walk) {
-          result2 = child.walk(callback);
-        }
-        return result2;
-      });
-    }
-    walkAtRules(name, callback) {
-      if (!callback) {
-        callback = name;
-        return this.walk((child, i) => {
-          if (child.type === "atrule") {
-            return callback(child, i);
-          }
-        });
-      }
-      if (name instanceof RegExp) {
-        return this.walk((child, i) => {
-          if (child.type === "atrule" && name.test(child.name)) {
-            return callback(child, i);
-          }
-        });
-      }
-      return this.walk((child, i) => {
-        if (child.type === "atrule" && child.name === name) {
-          return callback(child, i);
-        }
-      });
-    }
-    walkComments(callback) {
-      return this.walk((child, i) => {
-        if (child.type === "comment") {
-          return callback(child, i);
-        }
-      });
-    }
-    walkDecls(prop, callback) {
-      if (!callback) {
-        callback = prop;
-        return this.walk((child, i) => {
-          if (child.type === "decl") {
-            return callback(child, i);
-          }
-        });
-      }
-      if (prop instanceof RegExp) {
-        return this.walk((child, i) => {
-          if (child.type === "decl" && prop.test(child.prop)) {
-            return callback(child, i);
-          }
-        });
-      }
-      return this.walk((child, i) => {
-        if (child.type === "decl" && child.prop === prop) {
-          return callback(child, i);
-        }
-      });
-    }
-    walkRules(selector, callback) {
-      if (!callback) {
-        callback = selector;
-        return this.walk((child, i) => {
-          if (child.type === "rule") {
-            return callback(child, i);
-          }
-        });
-      }
-      if (selector instanceof RegExp) {
-        return this.walk((child, i) => {
-          if (child.type === "rule" && selector.test(child.selector)) {
-            return callback(child, i);
-          }
-        });
-      }
-      return this.walk((child, i) => {
-        if (child.type === "rule" && child.selector === selector) {
-          return callback(child, i);
-        }
-      });
-    }
-    get first() {
-      if (!this.proxyOf.nodes) return void 0;
-      return this.proxyOf.nodes[0];
-    }
-    get last() {
-      if (!this.proxyOf.nodes) return void 0;
-      return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];
-    }
-  }
-  Container2.registerParse = (dependant) => {
-    parse2 = dependant;
-  };
-  Container2.registerRule = (dependant) => {
-    Rule = dependant;
-  };
-  Container2.registerAtRule = (dependant) => {
-    AtRule = dependant;
-  };
-  Container2.registerRoot = (dependant) => {
-    Root2 = dependant;
-  };
-  container = Container2;
-  Container2.default = Container2;
-  Container2.rebuild = (node2) => {
-    if (node2.type === "atrule") {
-      Object.setPrototypeOf(node2, AtRule.prototype);
-    } else if (node2.type === "rule") {
-      Object.setPrototypeOf(node2, Rule.prototype);
-    } else if (node2.type === "decl") {
-      Object.setPrototypeOf(node2, Declaration.prototype);
-    } else if (node2.type === "comment") {
-      Object.setPrototypeOf(node2, Comment2.prototype);
-    } else if (node2.type === "root") {
-      Object.setPrototypeOf(node2, Root2.prototype);
-    }
-    node2[my] = true;
-    if (node2.nodes) {
-      node2.nodes.forEach((child) => {
-        Container2.rebuild(child);
-      });
-    }
-  };
-  return container;
-}
-var atRule;
-var hasRequiredAtRule;
-function requireAtRule() {
-  if (hasRequiredAtRule) return atRule;
-  hasRequiredAtRule = 1;
-  let Container2 = requireContainer$1();
-  class AtRule extends Container2 {
-    constructor(defaults) {
-      super(defaults);
-      this.type = "atrule";
-    }
-    append(...children) {
-      if (!this.proxyOf.nodes) this.nodes = [];
-      return super.append(...children);
-    }
-    prepend(...children) {
-      if (!this.proxyOf.nodes) this.nodes = [];
-      return super.prepend(...children);
-    }
-  }
-  atRule = AtRule;
-  AtRule.default = AtRule;
-  Container2.registerAtRule(AtRule);
-  return atRule;
-}
-var document;
-var hasRequiredDocument;
-function requireDocument() {
-  if (hasRequiredDocument) return document;
-  hasRequiredDocument = 1;
-  let Container2 = requireContainer$1();
-  let LazyResult, Processor;
-  class Document2 extends Container2 {
-    constructor(defaults) {
-      super(__spreadValues({
-        type: "document"
-      }, defaults));
-      if (!this.nodes) {
-        this.nodes = [];
-      }
-    }
-    toResult(opts = {}) {
-      let lazy = new LazyResult(new Processor(), this, opts);
-      return lazy.stringify();
-    }
-  }
-  Document2.registerLazyResult = (dependant) => {
-    LazyResult = dependant;
-  };
-  Document2.registerProcessor = (dependant) => {
-    Processor = dependant;
-  };
-  document = Document2;
-  Document2.default = Document2;
-  return document;
-}
-var nonSecure;
-var hasRequiredNonSecure;
-function requireNonSecure() {
-  if (hasRequiredNonSecure) return nonSecure;
-  hasRequiredNonSecure = 1;
-  let urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
-  let customAlphabet = (alphabet, defaultSize = 21) => {
-    return (size = defaultSize) => {
-      let id = "";
-      let i = size;
-      while (i--) {
-        id += alphabet[Math.random() * alphabet.length | 0];
-      }
-      return id;
-    };
-  };
-  let nanoid = (size = 21) => {
-    let id = "";
-    let i = size;
-    while (i--) {
-      id += urlAlphabet[Math.random() * 64 | 0];
-    }
-    return id;
-  };
-  nonSecure = {
-    nanoid,
-    customAlphabet
-  };
-  return nonSecure;
-}
-var previousMap;
-var hasRequiredPreviousMap;
-function requirePreviousMap() {
-  if (hasRequiredPreviousMap) return previousMap;
-  hasRequiredPreviousMap = 1;
-  let {
-    existsSync,
-    readFileSync
-  } = require$$2;
-  let {
-    dirname: dirname2,
-    join: join2
-  } = require$$2;
-  let {
-    SourceMapConsumer,
-    SourceMapGenerator
-  } = require$$2;
-  function fromBase64(str) {
-    if (Buffer) {
-      return Buffer.from(str, "base64").toString();
-    } else {
-      return window.atob(str);
-    }
-  }
-  class PreviousMap {
-    constructor(css, opts) {
-      if (opts.map === false) return;
-      this.loadAnnotation(css);
-      this.inline = this.startWith(this.annotation, "data:");
-      let prev = opts.map ? opts.map.prev : void 0;
-      let text = this.loadMap(opts.from, prev);
-      if (!this.mapFile && opts.from) {
-        this.mapFile = opts.from;
-      }
-      if (this.mapFile) this.root = dirname2(this.mapFile);
-      if (text) this.text = text;
-    }
-    consumer() {
-      if (!this.consumerCache) {
-        this.consumerCache = new SourceMapConsumer(this.text);
-      }
-      return this.consumerCache;
-    }
-    decodeInline(text) {
-      let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
-      let baseUri = /^data:application\/json;base64,/;
-      let charsetUri = /^data:application\/json;charset=utf-?8,/;
-      let uri = /^data:application\/json,/;
-      let uriMatch = text.match(charsetUri) || text.match(uri);
-      if (uriMatch) {
-        return decodeURIComponent(text.substr(uriMatch[0].length));
-      }
-      let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri);
-      if (baseUriMatch) {
-        return fromBase64(text.substr(baseUriMatch[0].length));
-      }
-      let encoding = text.match(/data:application\/json;([^,]+),/)[1];
-      throw new Error("Unsupported source map encoding " + encoding);
-    }
-    getAnnotationURL(sourceMapString) {
-      return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, "").trim();
-    }
-    isMap(map) {
-      if (typeof map !== "object") return false;
-      return typeof map.mappings === "string" || typeof map._mappings === "string" || Array.isArray(map.sections);
-    }
-    loadAnnotation(css) {
-      let comments = css.match(/\/\*\s*# sourceMappingURL=/g);
-      if (!comments) return;
-      let start = css.lastIndexOf(comments.pop());
-      let end = css.indexOf("*/", start);
-      if (start > -1 && end > -1) {
-        this.annotation = this.getAnnotationURL(css.substring(start, end));
-      }
-    }
-    loadFile(path2) {
-      this.root = dirname2(path2);
-      if (existsSync(path2)) {
-        this.mapFile = path2;
-        return readFileSync(path2, "utf-8").toString().trim();
-      }
-    }
-    loadMap(file, prev) {
-      if (prev === false) return false;
-      if (prev) {
-        if (typeof prev === "string") {
-          return prev;
-        } else if (typeof prev === "function") {
-          let prevPath = prev(file);
-          if (prevPath) {
-            let map = this.loadFile(prevPath);
-            if (!map) {
-              throw new Error("Unable to load previous source map: " + prevPath.toString());
-            }
-            return map;
-          }
-        } else if (prev instanceof SourceMapConsumer) {
-          return SourceMapGenerator.fromSourceMap(prev).toString();
-        } else if (prev instanceof SourceMapGenerator) {
-          return prev.toString();
-        } else if (this.isMap(prev)) {
-          return JSON.stringify(prev);
-        } else {
-          throw new Error("Unsupported previous source map format: " + prev.toString());
-        }
-      } else if (this.inline) {
-        return this.decodeInline(this.annotation);
-      } else if (this.annotation) {
-        let map = this.annotation;
-        if (file) map = join2(dirname2(file), map);
-        return this.loadFile(map);
-      }
-    }
-    startWith(string, start) {
-      if (!string) return false;
-      return string.substr(0, start.length) === start;
-    }
-    withContent() {
-      return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
-    }
-  }
-  previousMap = PreviousMap;
-  PreviousMap.default = PreviousMap;
-  return previousMap;
-}
-var input;
-var hasRequiredInput;
-function requireInput() {
-  if (hasRequiredInput) return input;
-  hasRequiredInput = 1;
-  let {
-    nanoid
-  } = requireNonSecure();
-  let {
-    isAbsolute: isAbsolute2,
-    resolve: resolve2
-  } = require$$2;
-  let {
-    SourceMapConsumer,
-    SourceMapGenerator
-  } = require$$2;
-  let {
-    fileURLToPath,
-    pathToFileURL
-  } = require$$2;
-  let CssSyntaxError = requireCssSyntaxError();
-  let PreviousMap = requirePreviousMap();
-  let terminalHighlight = require$$2;
-  let fromOffsetCache = Symbol("fromOffsetCache");
-  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
-  let pathAvailable = Boolean(resolve2 && isAbsolute2);
-  class Input {
-    constructor(css, opts = {}) {
-      if (css === null || typeof css === "undefined" || typeof css === "object" && !css.toString) {
-        throw new Error(`PostCSS received ${css} instead of CSS string`);
-      }
-      this.css = css.toString();
-      if (this.css[0] === "\uFEFF" || this.css[0] === "￾") {
-        this.hasBOM = true;
-        this.css = this.css.slice(1);
-      } else {
-        this.hasBOM = false;
-      }
-      if (opts.from) {
-        if (!pathAvailable || /^\w+:\/\//.test(opts.from) || isAbsolute2(opts.from)) {
-          this.file = opts.from;
-        } else {
-          this.file = resolve2(opts.from);
-        }
-      }
-      if (pathAvailable && sourceMapAvailable) {
-        let map = new PreviousMap(this.css, opts);
-        if (map.text) {
-          this.map = map;
-          let file = map.consumer().file;
-          if (!this.file && file) this.file = this.mapResolve(file);
-        }
-      }
-      if (!this.file) {
-        this.id = "<input css " + nanoid(6) + ">";
-      }
-      if (this.map) this.map.file = this.from;
-    }
-    error(message, line, column, opts = {}) {
-      let endColumn, endLine, result2;
-      if (line && typeof line === "object") {
-        let start = line;
-        let end = column;
-        if (typeof start.offset === "number") {
-          let pos = this.fromOffset(start.offset);
-          line = pos.line;
-          column = pos.col;
-        } else {
-          line = start.line;
-          column = start.column;
-        }
-        if (typeof end.offset === "number") {
-          let pos = this.fromOffset(end.offset);
-          endLine = pos.line;
-          endColumn = pos.col;
-        } else {
-          endLine = end.line;
-          endColumn = end.column;
-        }
-      } else if (!column) {
-        let pos = this.fromOffset(line);
-        line = pos.line;
-        column = pos.col;
-      }
-      let origin = this.origin(line, column, endLine, endColumn);
-      if (origin) {
-        result2 = new CssSyntaxError(message, origin.endLine === void 0 ? origin.line : {
-          column: origin.column,
-          line: origin.line
-        }, origin.endLine === void 0 ? origin.column : {
-          column: origin.endColumn,
-          line: origin.endLine
-        }, origin.source, origin.file, opts.plugin);
-      } else {
-        result2 = new CssSyntaxError(message, endLine === void 0 ? line : {
-          column,
-          line
-        }, endLine === void 0 ? column : {
-          column: endColumn,
-          line: endLine
-        }, this.css, this.file, opts.plugin);
-      }
-      result2.input = {
-        column,
-        endColumn,
-        endLine,
-        line,
-        source: this.css
-      };
-      if (this.file) {
-        if (pathToFileURL) {
-          result2.input.url = pathToFileURL(this.file).toString();
-        }
-        result2.input.file = this.file;
-      }
-      return result2;
-    }
-    fromOffset(offset) {
-      let lastLine, lineToIndex;
-      if (!this[fromOffsetCache]) {
-        let lines = this.css.split("\n");
-        lineToIndex = new Array(lines.length);
-        let prevIndex = 0;
-        for (let i = 0, l = lines.length; i < l; i++) {
-          lineToIndex[i] = prevIndex;
-          prevIndex += lines[i].length + 1;
-        }
-        this[fromOffsetCache] = lineToIndex;
-      } else {
-        lineToIndex = this[fromOffsetCache];
-      }
-      lastLine = lineToIndex[lineToIndex.length - 1];
-      let min = 0;
-      if (offset >= lastLine) {
-        min = lineToIndex.length - 1;
-      } else {
-        let max = lineToIndex.length - 2;
-        let mid;
-        while (min < max) {
-          mid = min + (max - min >> 1);
-          if (offset < lineToIndex[mid]) {
-            max = mid - 1;
-          } else if (offset >= lineToIndex[mid + 1]) {
-            min = mid + 1;
-          } else {
-            min = mid;
-            break;
-          }
-        }
-      }
-      return {
-        col: offset - lineToIndex[min] + 1,
-        line: min + 1
-      };
-    }
-    mapResolve(file) {
-      if (/^\w+:\/\//.test(file)) {
-        return file;
-      }
-      return resolve2(this.map.consumer().sourceRoot || this.map.root || ".", file);
-    }
-    origin(line, column, endLine, endColumn) {
-      if (!this.map) return false;
-      let consumer = this.map.consumer();
-      let from = consumer.originalPositionFor({
-        column,
-        line
-      });
-      if (!from.source) return false;
-      let to;
-      if (typeof endLine === "number") {
-        to = consumer.originalPositionFor({
-          column: endColumn,
-          line: endLine
-        });
-      }
-      let fromUrl;
-      if (isAbsolute2(from.source)) {
-        fromUrl = pathToFileURL(from.source);
-      } else {
-        fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile));
-      }
-      let result2 = {
-        column: from.column,
-        endColumn: to && to.column,
-        endLine: to && to.line,
-        line: from.line,
-        url: fromUrl.toString()
-      };
-      if (fromUrl.protocol === "file:") {
-        if (fileURLToPath) {
-          result2.file = fileURLToPath(fromUrl);
-        } else {
-          throw new Error(`file: protocol is not available in this PostCSS build`);
-        }
-      }
-      let source = consumer.sourceContentFor(from.source);
-      if (source) result2.source = source;
-      return result2;
-    }
-    toJSON() {
-      let json = {};
-      for (let name of ["hasBOM", "css", "file", "id"]) {
-        if (this[name] != null) {
-          json[name] = this[name];
-        }
-      }
-      if (this.map) {
-        json.map = __spreadValues({}, this.map);
-        if (json.map.consumerCache) {
-          json.map.consumerCache = void 0;
-        }
-      }
-      return json;
-    }
-    get from() {
-      return this.file || this.id;
-    }
-  }
-  input = Input;
-  Input.default = Input;
-  if (terminalHighlight && terminalHighlight.registerInput) {
-    terminalHighlight.registerInput(Input);
-  }
-  return input;
-}
-var root;
-var hasRequiredRoot;
-function requireRoot() {
-  if (hasRequiredRoot) return root;
-  hasRequiredRoot = 1;
-  let Container2 = requireContainer$1();
-  let LazyResult, Processor;
-  class Root2 extends Container2 {
-    constructor(defaults) {
-      super(defaults);
-      this.type = "root";
-      if (!this.nodes) this.nodes = [];
-    }
-    normalize(child, sample, type) {
-      let nodes = super.normalize(child);
-      if (sample) {
-        if (type === "prepend") {
-          if (this.nodes.length > 1) {
-            sample.raws.before = this.nodes[1].raws.before;
-          } else {
-            delete sample.raws.before;
-          }
-        } else if (this.first !== sample) {
-          for (let node2 of nodes) {
-            node2.raws.before = sample.raws.before;
-          }
-        }
-      }
-      return nodes;
-    }
-    removeChild(child, ignore) {
-      let index = this.index(child);
-      if (!ignore && index === 0 && this.nodes.length > 1) {
-        this.nodes[1].raws.before = this.nodes[index].raws.before;
-      }
-      return super.removeChild(child);
-    }
-    toResult(opts = {}) {
-      let lazy = new LazyResult(new Processor(), this, opts);
-      return lazy.stringify();
-    }
-  }
-  Root2.registerLazyResult = (dependant) => {
-    LazyResult = dependant;
-  };
-  Root2.registerProcessor = (dependant) => {
-    Processor = dependant;
-  };
-  root = Root2;
-  Root2.default = Root2;
-  Container2.registerRoot(Root2);
-  return root;
-}
-var list_1;
-var hasRequiredList;
-function requireList() {
-  if (hasRequiredList) return list_1;
-  hasRequiredList = 1;
-  let list = {
-    comma(string) {
-      return list.split(string, [","], true);
-    },
-    space(string) {
-      let spaces = [" ", "\n", "	"];
-      return list.split(string, spaces);
-    },
-    split(string, separators, last) {
-      let array = [];
-      let current = "";
-      let split = false;
-      let func = 0;
-      let inQuote = false;
-      let prevQuote = "";
-      let escape = false;
-      for (let letter of string) {
-        if (escape) {
-          escape = false;
-        } else if (letter === "\\") {
-          escape = true;
-        } else if (inQuote) {
-          if (letter === prevQuote) {
-            inQuote = false;
-          }
-        } else if (letter === '"' || letter === "'") {
-          inQuote = true;
-          prevQuote = letter;
-        } else if (letter === "(") {
-          func += 1;
-        } else if (letter === ")") {
-          if (func > 0) func -= 1;
-        } else if (func === 0) {
-          if (separators.includes(letter)) split = true;
-        }
-        if (split) {
-          if (current !== "") array.push(current.trim());
-          current = "";
-          split = false;
-        } else {
-          current += letter;
-        }
-      }
-      if (last || current !== "") array.push(current.trim());
-      return array;
-    }
-  };
-  list_1 = list;
-  list.default = list;
-  return list_1;
-}
-var rule;
-var hasRequiredRule;
-function requireRule() {
-  if (hasRequiredRule) return rule;
-  hasRequiredRule = 1;
-  let Container2 = requireContainer$1();
-  let list = requireList();
-  class Rule extends Container2 {
-    constructor(defaults) {
-      super(defaults);
-      this.type = "rule";
-      if (!this.nodes) this.nodes = [];
-    }
-    get selectors() {
-      return list.comma(this.selector);
-    }
-    set selectors(values) {
-      let match = this.selector ? this.selector.match(/,\s*/) : null;
-      let sep2 = match ? match[0] : "," + this.raw("between", "beforeOpen");
-      this.selector = values.join(sep2);
-    }
-  }
-  rule = Rule;
-  Rule.default = Rule;
-  Container2.registerRule(Rule);
-  return rule;
-}
-var fromJSON_1;
-var hasRequiredFromJSON;
-function requireFromJSON() {
-  if (hasRequiredFromJSON) return fromJSON_1;
-  hasRequiredFromJSON = 1;
-  let AtRule = requireAtRule();
-  let Comment2 = requireComment();
-  let Declaration = requireDeclaration();
-  let Input = requireInput();
-  let PreviousMap = requirePreviousMap();
-  let Root2 = requireRoot();
-  let Rule = requireRule();
-  function fromJSON(json, inputs) {
-    if (Array.isArray(json)) return json.map((n) => fromJSON(n));
-    let _a2 = json, {
-      inputs: ownInputs
-    } = _a2, defaults = __objRest(_a2, [
-      "inputs"
-    ]);
-    if (ownInputs) {
-      inputs = [];
-      for (let input2 of ownInputs) {
-        let inputHydrated = __spreadProps(__spreadValues({}, input2), {
-          __proto__: Input.prototype
-        });
-        if (inputHydrated.map) {
-          inputHydrated.map = __spreadProps(__spreadValues({}, inputHydrated.map), {
-            __proto__: PreviousMap.prototype
-          });
-        }
-        inputs.push(inputHydrated);
-      }
-    }
-    if (defaults.nodes) {
-      defaults.nodes = json.nodes.map((n) => fromJSON(n, inputs));
-    }
-    if (defaults.source) {
-      let _b = defaults.source, {
-        inputId
-      } = _b, source = __objRest(_b, [
-        "inputId"
-      ]);
-      defaults.source = source;
-      if (inputId != null) {
-        defaults.source.input = inputs[inputId];
-      }
-    }
-    if (defaults.type === "root") {
-      return new Root2(defaults);
-    } else if (defaults.type === "decl") {
-      return new Declaration(defaults);
-    } else if (defaults.type === "rule") {
-      return new Rule(defaults);
-    } else if (defaults.type === "comment") {
-      return new Comment2(defaults);
-    } else if (defaults.type === "atrule") {
-      return new AtRule(defaults);
-    } else {
-      throw new Error("Unknown node type: " + json.type);
-    }
-  }
-  fromJSON_1 = fromJSON;
-  fromJSON.default = fromJSON;
-  return fromJSON_1;
-}
-var mapGenerator;
-var hasRequiredMapGenerator;
-function requireMapGenerator() {
-  if (hasRequiredMapGenerator) return mapGenerator;
-  hasRequiredMapGenerator = 1;
-  let {
-    dirname: dirname2,
-    relative: relative2,
-    resolve: resolve2,
-    sep: sep2
-  } = require$$2;
-  let {
-    SourceMapConsumer,
-    SourceMapGenerator
-  } = require$$2;
-  let {
-    pathToFileURL
-  } = require$$2;
-  let Input = requireInput();
-  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
-  let pathAvailable = Boolean(dirname2 && resolve2 && relative2 && sep2);
-  class MapGenerator {
-    constructor(stringify2, root2, opts, cssString) {
-      this.stringify = stringify2;
-      this.mapOpts = opts.map || {};
-      this.root = root2;
-      this.opts = opts;
-      this.css = cssString;
-      this.originalCSS = cssString;
-      this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;
-      this.memoizedFileURLs = /* @__PURE__ */ new Map();
-      this.memoizedPaths = /* @__PURE__ */ new Map();
-      this.memoizedURLs = /* @__PURE__ */ new Map();
-    }
-    addAnnotation() {
-      let content;
-      if (this.isInline()) {
-        content = "data:application/json;base64," + this.toBase64(this.map.toString());
-      } else if (typeof this.mapOpts.annotation === "string") {
-        content = this.mapOpts.annotation;
-      } else if (typeof this.mapOpts.annotation === "function") {
-        content = this.mapOpts.annotation(this.opts.to, this.root);
-      } else {
-        content = this.outputFile() + ".map";
-      }
-      let eol = "\n";
-      if (this.css.includes("\r\n")) eol = "\r\n";
-      this.css += eol + "/*# sourceMappingURL=" + content + " */";
-    }
-    applyPrevMaps() {
-      for (let prev of this.previous()) {
-        let from = this.toUrl(this.path(prev.file));
-        let root2 = prev.root || dirname2(prev.file);
-        let map;
-        if (this.mapOpts.sourcesContent === false) {
-          map = new SourceMapConsumer(prev.text);
-          if (map.sourcesContent) {
-            map.sourcesContent = null;
-          }
-        } else {
-          map = prev.consumer();
-        }
-        this.map.applySourceMap(map, from, this.toUrl(this.path(root2)));
-      }
-    }
-    clearAnnotation() {
-      if (this.mapOpts.annotation === false) return;
-      if (this.root) {
-        let node2;
-        for (let i = this.root.nodes.length - 1; i >= 0; i--) {
-          node2 = this.root.nodes[i];
-          if (node2.type !== "comment") continue;
-          if (node2.text.startsWith("# sourceMappingURL=")) {
-            this.root.removeChild(i);
-          }
-        }
-      } else if (this.css) {
-        this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, "");
-      }
-    }
-    generate() {
-      this.clearAnnotation();
-      if (pathAvailable && sourceMapAvailable && this.isMap()) {
-        return this.generateMap();
-      } else {
-        let result2 = "";
-        this.stringify(this.root, (i) => {
-          result2 += i;
-        });
-        return [result2];
-      }
-    }
-    generateMap() {
-      if (this.root) {
-        this.generateString();
-      } else if (this.previous().length === 1) {
-        let prev = this.previous()[0].consumer();
-        prev.file = this.outputFile();
-        this.map = SourceMapGenerator.fromSourceMap(prev, {
-          ignoreInvalidMapping: true
-        });
-      } else {
-        this.map = new SourceMapGenerator({
-          file: this.outputFile(),
-          ignoreInvalidMapping: true
-        });
-        this.map.addMapping({
-          generated: {
-            column: 0,
-            line: 1
-          },
-          original: {
-            column: 0,
-            line: 1
-          },
-          source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>"
-        });
-      }
-      if (this.isSourcesContent()) this.setSourcesContent();
-      if (this.root && this.previous().length > 0) this.applyPrevMaps();
-      if (this.isAnnotation()) this.addAnnotation();
-      if (this.isInline()) {
-        return [this.css];
-      } else {
-        return [this.css, this.map];
-      }
-    }
-    generateString() {
-      this.css = "";
-      this.map = new SourceMapGenerator({
-        file: this.outputFile(),
-        ignoreInvalidMapping: true
-      });
-      let line = 1;
-      let column = 1;
-      let noSource = "<no source>";
-      let mapping = {
-        generated: {
-          column: 0,
-          line: 0
-        },
-        original: {
-          column: 0,
-          line: 0
-        },
-        source: ""
-      };
-      let last, lines;
-      this.stringify(this.root, (str, node2, type) => {
-        this.css += str;
-        if (node2 && type !== "end") {
-          mapping.generated.line = line;
-          mapping.generated.column = column - 1;
-          if (node2.source && node2.source.start) {
-            mapping.source = this.sourcePath(node2);
-            mapping.original.line = node2.source.start.line;
-            mapping.original.column = node2.source.start.column - 1;
-            this.map.addMapping(mapping);
-          } else {
-            mapping.source = noSource;
-            mapping.original.line = 1;
-            mapping.original.column = 0;
-            this.map.addMapping(mapping);
-          }
-        }
-        lines = str.match(/\n/g);
-        if (lines) {
-          line += lines.length;
-          last = str.lastIndexOf("\n");
-          column = str.length - last;
-        } else {
-          column += str.length;
-        }
-        if (node2 && type !== "start") {
-          let p = node2.parent || {
-            raws: {}
-          };
-          let childless = node2.type === "decl" || node2.type === "atrule" && !node2.nodes;
-          if (!childless || node2 !== p.last || p.raws.semicolon) {
-            if (node2.source && node2.source.end) {
-              mapping.source = this.sourcePath(node2);
-              mapping.original.line = node2.source.end.line;
-              mapping.original.column = node2.source.end.column - 1;
-              mapping.generated.line = line;
-              mapping.generated.column = column - 2;
-              this.map.addMapping(mapping);
-            } else {
-              mapping.source = noSource;
-              mapping.original.line = 1;
-              mapping.original.column = 0;
-              mapping.generated.line = line;
-              mapping.generated.column = column - 1;
-              this.map.addMapping(mapping);
-            }
-          }
-        }
-      });
-    }
-    isAnnotation() {
-      if (this.isInline()) {
-        return true;
-      }
-      if (typeof this.mapOpts.annotation !== "undefined") {
-        return this.mapOpts.annotation;
-      }
-      if (this.previous().length) {
-        return this.previous().some((i) => i.annotation);
-      }
-      return true;
-    }
-    isInline() {
-      if (typeof this.mapOpts.inline !== "undefined") {
-        return this.mapOpts.inline;
-      }
-      let annotation = this.mapOpts.annotation;
-      if (typeof annotation !== "undefined" && annotation !== true) {
-        return false;
-      }
-      if (this.previous().length) {
-        return this.previous().some((i) => i.inline);
-      }
-      return true;
-    }
-    isMap() {
-      if (typeof this.opts.map !== "undefined") {
-        return !!this.opts.map;
-      }
-      return this.previous().length > 0;
-    }
-    isSourcesContent() {
-      if (typeof this.mapOpts.sourcesContent !== "undefined") {
-        return this.mapOpts.sourcesContent;
-      }
-      if (this.previous().length) {
-        return this.previous().some((i) => i.withContent());
-      }
-      return true;
-    }
-    outputFile() {
-      if (this.opts.to) {
-        return this.path(this.opts.to);
-      } else if (this.opts.from) {
-        return this.path(this.opts.from);
-      } else {
-        return "to.css";
-      }
-    }
-    path(file) {
-      if (this.mapOpts.absolute) return file;
-      if (file.charCodeAt(0) === 60) return file;
-      if (/^\w+:\/\//.test(file)) return file;
-      let cached = this.memoizedPaths.get(file);
-      if (cached) return cached;
-      let from = this.opts.to ? dirname2(this.opts.to) : ".";
-      if (typeof this.mapOpts.annotation === "string") {
-        from = dirname2(resolve2(from, this.mapOpts.annotation));
-      }
-      let path2 = relative2(from, file);
-      this.memoizedPaths.set(file, path2);
-      return path2;
-    }
-    previous() {
-      if (!this.previousMaps) {
-        this.previousMaps = [];
-        if (this.root) {
-          this.root.walk((node2) => {
-            if (node2.source && node2.source.input.map) {
-              let map = node2.source.input.map;
-              if (!this.previousMaps.includes(map)) {
-                this.previousMaps.push(map);
-              }
-            }
-          });
-        } else {
-          let input2 = new Input(this.originalCSS, this.opts);
-          if (input2.map) this.previousMaps.push(input2.map);
-        }
-      }
-      return this.previousMaps;
-    }
-    setSourcesContent() {
-      let already = {};
-      if (this.root) {
-        this.root.walk((node2) => {
-          if (node2.source) {
-            let from = node2.source.input.from;
-            if (from && !already[from]) {
-              already[from] = true;
-              let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));
-              this.map.setSourceContent(fromUrl, node2.source.input.css);
-            }
-          }
-        });
-      } else if (this.css) {
-        let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>";
-        this.map.setSourceContent(from, this.css);
-      }
-    }
-    sourcePath(node2) {
-      if (this.mapOpts.from) {
-        return this.toUrl(this.mapOpts.from);
-      } else if (this.usesFileUrls) {
-        return this.toFileUrl(node2.source.input.from);
-      } else {
-        return this.toUrl(this.path(node2.source.input.from));
-      }
-    }
-    toBase64(str) {
-      if (Buffer) {
-        return Buffer.from(str).toString("base64");
-      } else {
-        return window.btoa(unescape(encodeURIComponent(str)));
-      }
-    }
-    toFileUrl(path2) {
-      let cached = this.memoizedFileURLs.get(path2);
-      if (cached) return cached;
-      if (pathToFileURL) {
-        let fileURL = pathToFileURL(path2).toString();
-        this.memoizedFileURLs.set(path2, fileURL);
-        return fileURL;
-      } else {
-        throw new Error("`map.absolute` option is not available in this PostCSS build");
-      }
-    }
-    toUrl(path2) {
-      let cached = this.memoizedURLs.get(path2);
-      if (cached) return cached;
-      if (sep2 === "\\") {
-        path2 = path2.replace(/\\/g, "/");
-      }
-      let url = encodeURI(path2).replace(/[#?]/g, encodeURIComponent);
-      this.memoizedURLs.set(path2, url);
-      return url;
-    }
-  }
-  mapGenerator = MapGenerator;
-  return mapGenerator;
-}
-var tokenize;
-var hasRequiredTokenize;
-function requireTokenize() {
-  if (hasRequiredTokenize) return tokenize;
-  hasRequiredTokenize = 1;
-  const SINGLE_QUOTE = "'".charCodeAt(0);
-  const DOUBLE_QUOTE = '"'.charCodeAt(0);
-  const BACKSLASH = "\\".charCodeAt(0);
-  const SLASH = "/".charCodeAt(0);
-  const NEWLINE = "\n".charCodeAt(0);
-  const SPACE = " ".charCodeAt(0);
-  const FEED = "\f".charCodeAt(0);
-  const TAB = "	".charCodeAt(0);
-  const CR = "\r".charCodeAt(0);
-  const OPEN_SQUARE = "[".charCodeAt(0);
-  const CLOSE_SQUARE = "]".charCodeAt(0);
-  const OPEN_PARENTHESES = "(".charCodeAt(0);
-  const CLOSE_PARENTHESES = ")".charCodeAt(0);
-  const OPEN_CURLY = "{".charCodeAt(0);
-  const CLOSE_CURLY = "}".charCodeAt(0);
-  const SEMICOLON = ";".charCodeAt(0);
-  const ASTERISK = "*".charCodeAt(0);
-  const COLON = ":".charCodeAt(0);
-  const AT = "@".charCodeAt(0);
-  const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g;
-  const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g;
-  const RE_BAD_BRACKET = /.[\r\n"'(/\\]/;
-  const RE_HEX_ESCAPE = /[\da-f]/i;
-  tokenize = function tokenizer(input2, options = {}) {
-    let css = input2.css.valueOf();
-    let ignore = options.ignoreErrors;
-    let code, content, escape, next, quote;
-    let currentToken, escaped, escapePos, n, prev;
-    let length = css.length;
-    let pos = 0;
-    let buffer = [];
-    let returned = [];
-    function position() {
-      return pos;
-    }
-    function unclosed(what) {
-      throw input2.error("Unclosed " + what, pos);
-    }
-    function endOfFile() {
-      return returned.length === 0 && pos >= length;
-    }
-    function nextToken(opts) {
-      if (returned.length) return returned.pop();
-      if (pos >= length) return;
-      let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;
-      code = css.charCodeAt(pos);
-      switch (code) {
-        case NEWLINE:
-        case SPACE:
-        case TAB:
-        case CR:
-        case FEED: {
-          next = pos;
-          do {
-            next += 1;
-            code = css.charCodeAt(next);
-          } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
-          currentToken = ["space", css.slice(pos, next)];
-          pos = next - 1;
-          break;
-        }
-        case OPEN_SQUARE:
-        case CLOSE_SQUARE:
-        case OPEN_CURLY:
-        case CLOSE_CURLY:
-        case COLON:
-        case SEMICOLON:
-        case CLOSE_PARENTHESES: {
-          let controlChar = String.fromCharCode(code);
-          currentToken = [controlChar, controlChar, pos];
-          break;
-        }
-        case OPEN_PARENTHESES: {
-          prev = buffer.length ? buffer.pop()[1] : "";
-          n = css.charCodeAt(pos + 1);
-          if (prev === "url" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
-            next = pos;
-            do {
-              escaped = false;
-              next = css.indexOf(")", next + 1);
-              if (next === -1) {
-                if (ignore || ignoreUnclosed) {
-                  next = pos;
-                  break;
-                } else {
-                  unclosed("bracket");
-                }
-              }
-              escapePos = next;
-              while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
-                escapePos -= 1;
-                escaped = !escaped;
-              }
-            } while (escaped);
-            currentToken = ["brackets", css.slice(pos, next + 1), pos, next];
-            pos = next;
-          } else {
-            next = css.indexOf(")", pos + 1);
-            content = css.slice(pos, next + 1);
-            if (next === -1 || RE_BAD_BRACKET.test(content)) {
-              currentToken = ["(", "(", pos];
-            } else {
-              currentToken = ["brackets", content, pos, next];
-              pos = next;
-            }
-          }
-          break;
-        }
-        case SINGLE_QUOTE:
-        case DOUBLE_QUOTE: {
-          quote = code === SINGLE_QUOTE ? "'" : '"';
-          next = pos;
-          do {
-            escaped = false;
-            next = css.indexOf(quote, next + 1);
-            if (next === -1) {
-              if (ignore || ignoreUnclosed) {
-                next = pos + 1;
-                break;
-              } else {
-                unclosed("string");
-              }
-            }
-            escapePos = next;
-            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
-              escapePos -= 1;
-              escaped = !escaped;
-            }
-          } while (escaped);
-          currentToken = ["string", css.slice(pos, next + 1), pos, next];
-          pos = next;
-          break;
-        }
-        case AT: {
-          RE_AT_END.lastIndex = pos + 1;
-          RE_AT_END.test(css);
-          if (RE_AT_END.lastIndex === 0) {
-            next = css.length - 1;
-          } else {
-            next = RE_AT_END.lastIndex - 2;
-          }
-          currentToken = ["at-word", css.slice(pos, next + 1), pos, next];
-          pos = next;
-          break;
-        }
-        case BACKSLASH: {
-          next = pos;
-          escape = true;
-          while (css.charCodeAt(next + 1) === BACKSLASH) {
-            next += 1;
-            escape = !escape;
-          }
-          code = css.charCodeAt(next + 1);
-          if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
-            next += 1;
-            if (RE_HEX_ESCAPE.test(css.charAt(next))) {
-              while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
-                next += 1;
-              }
-              if (css.charCodeAt(next + 1) === SPACE) {
-                next += 1;
-              }
-            }
-          }
-          currentToken = ["word", css.slice(pos, next + 1), pos, next];
-          pos = next;
-          break;
-        }
-        default: {
-          if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
-            next = css.indexOf("*/", pos + 2) + 1;
-            if (next === 0) {
-              if (ignore || ignoreUnclosed) {
-                next = css.length;
-              } else {
-                unclosed("comment");
-              }
-            }
-            currentToken = ["comment", css.slice(pos, next + 1), pos, next];
-            pos = next;
-          } else {
-            RE_WORD_END.lastIndex = pos + 1;
-            RE_WORD_END.test(css);
-            if (RE_WORD_END.lastIndex === 0) {
-              next = css.length - 1;
-            } else {
-              next = RE_WORD_END.lastIndex - 2;
-            }
-            currentToken = ["word", css.slice(pos, next + 1), pos, next];
-            buffer.push(currentToken);
-            pos = next;
-          }
-          break;
-        }
-      }
-      pos++;
-      return currentToken;
-    }
-    function back(token) {
-      returned.push(token);
-    }
-    return {
-      back,
-      endOfFile,
-      nextToken,
-      position
-    };
-  };
-  return tokenize;
-}
-var parser;
-var hasRequiredParser;
-function requireParser() {
-  if (hasRequiredParser) return parser;
-  hasRequiredParser = 1;
-  let AtRule = requireAtRule();
-  let Comment2 = requireComment();
-  let Declaration = requireDeclaration();
-  let Root2 = requireRoot();
-  let Rule = requireRule();
-  let tokenizer = requireTokenize();
-  const SAFE_COMMENT_NEIGHBOR = {
-    empty: true,
-    space: true
-  };
-  function findLastWithPosition(tokens) {
-    for (let i = tokens.length - 1; i >= 0; i--) {
-      let token = tokens[i];
-      let pos = token[3] || token[2];
-      if (pos) return pos;
-    }
-  }
-  class Parser2 {
-    constructor(input2) {
-      this.input = input2;
-      this.root = new Root2();
-      this.current = this.root;
-      this.spaces = "";
-      this.semicolon = false;
-      this.createTokenizer();
-      this.root.source = {
-        input: input2,
-        start: {
-          column: 1,
-          line: 1,
-          offset: 0
-        }
-      };
-    }
-    atrule(token) {
-      let node2 = new AtRule();
-      node2.name = token[1].slice(1);
-      if (node2.name === "") {
-        this.unnamedAtrule(node2, token);
-      }
-      this.init(node2, token[2]);
-      let type;
-      let prev;
-      let shift;
-      let last = false;
-      let open2 = false;
-      let params = [];
-      let brackets = [];
-      while (!this.tokenizer.endOfFile()) {
-        token = this.tokenizer.nextToken();
-        type = token[0];
-        if (type === "(" || type === "[") {
-          brackets.push(type === "(" ? ")" : "]");
-        } else if (type === "{" && brackets.length > 0) {
-          brackets.push("}");
-        } else if (type === brackets[brackets.length - 1]) {
-          brackets.pop();
-        }
-        if (brackets.length === 0) {
-          if (type === ";") {
-            node2.source.end = this.getPosition(token[2]);
-            node2.source.end.offset++;
-            this.semicolon = true;
-            break;
-          } else if (type === "{") {
-            open2 = true;
-            break;
-          } else if (type === "}") {
-            if (params.length > 0) {
-              shift = params.length - 1;
-              prev = params[shift];
-              while (prev && prev[0] === "space") {
-                prev = params[--shift];
-              }
-              if (prev) {
-                node2.source.end = this.getPosition(prev[3] || prev[2]);
-                node2.source.end.offset++;
-              }
-            }
-            this.end(token);
-            break;
-          } else {
-            params.push(token);
-          }
-        } else {
-          params.push(token);
-        }
-        if (this.tokenizer.endOfFile()) {
-          last = true;
-          break;
-        }
-      }
-      node2.raws.between = this.spacesAndCommentsFromEnd(params);
-      if (params.length) {
-        node2.raws.afterName = this.spacesAndCommentsFromStart(params);
-        this.raw(node2, "params", params);
-        if (last) {
-          token = params[params.length - 1];
-          node2.source.end = this.getPosition(token[3] || token[2]);
-          node2.source.end.offset++;
-          this.spaces = node2.raws.between;
-          node2.raws.between = "";
-        }
-      } else {
-        node2.raws.afterName = "";
-        node2.params = "";
-      }
-      if (open2) {
-        node2.nodes = [];
-        this.current = node2;
-      }
-    }
-    checkMissedSemicolon(tokens) {
-      let colon = this.colon(tokens);
-      if (colon === false) return;
-      let founded = 0;
-      let token;
-      for (let j = colon - 1; j >= 0; j--) {
-        token = tokens[j];
-        if (token[0] !== "space") {
-          founded += 1;
-          if (founded === 2) break;
-        }
-      }
-      throw this.input.error("Missed semicolon", token[0] === "word" ? token[3] + 1 : token[2]);
-    }
-    colon(tokens) {
-      let brackets = 0;
-      let prev, token, type;
-      for (let [i, element] of tokens.entries()) {
-        token = element;
-        type = token[0];
-        if (type === "(") {
-          brackets += 1;
-        }
-        if (type === ")") {
-          brackets -= 1;
-        }
-        if (brackets === 0 && type === ":") {
-          if (!prev) {
-            this.doubleColon(token);
-          } else if (prev[0] === "word" && prev[1] === "progid") {
-            continue;
-          } else {
-            return i;
-          }
-        }
-        prev = token;
-      }
-      return false;
-    }
-    comment(token) {
-      let node2 = new Comment2();
-      this.init(node2, token[2]);
-      node2.source.end = this.getPosition(token[3] || token[2]);
-      node2.source.end.offset++;
-      let text = token[1].slice(2, -2);
-      if (/^\s*$/.test(text)) {
-        node2.text = "";
-        node2.raws.left = text;
-        node2.raws.right = "";
-      } else {
-        let match = text.match(/^(\s*)([^]*\S)(\s*)$/);
-        node2.text = match[2];
-        node2.raws.left = match[1];
-        node2.raws.right = match[3];
-      }
-    }
-    createTokenizer() {
-      this.tokenizer = tokenizer(this.input);
-    }
-    decl(tokens, customProperty) {
-      let node2 = new Declaration();
-      this.init(node2, tokens[0][2]);
-      let last = tokens[tokens.length - 1];
-      if (last[0] === ";") {
-        this.semicolon = true;
-        tokens.pop();
-      }
-      node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));
-      node2.source.end.offset++;
-      while (tokens[0][0] !== "word") {
-        if (tokens.length === 1) this.unknownWord(tokens);
-        node2.raws.before += tokens.shift()[1];
-      }
-      node2.source.start = this.getPosition(tokens[0][2]);
-      node2.prop = "";
-      while (tokens.length) {
-        let type = tokens[0][0];
-        if (type === ":" || type === "space" || type === "comment") {
-          break;
-        }
-        node2.prop += tokens.shift()[1];
-      }
-      node2.raws.between = "";
-      let token;
-      while (tokens.length) {
-        token = tokens.shift();
-        if (token[0] === ":") {
-          node2.raws.between += token[1];
-          break;
-        } else {
-          if (token[0] === "word" && /\w/.test(token[1])) {
-            this.unknownWord([token]);
-          }
-          node2.raws.between += token[1];
-        }
-      }
-      if (node2.prop[0] === "_" || node2.prop[0] === "*") {
-        node2.raws.before += node2.prop[0];
-        node2.prop = node2.prop.slice(1);
-      }
-      let firstSpaces = [];
-      let next;
-      while (tokens.length) {
-        next = tokens[0][0];
-        if (next !== "space" && next !== "comment") break;
-        firstSpaces.push(tokens.shift());
-      }
-      this.precheckMissedSemicolon(tokens);
-      for (let i = tokens.length - 1; i >= 0; i--) {
-        token = tokens[i];
-        if (token[1].toLowerCase() === "!important") {
-          node2.important = true;
-          let string = this.stringFrom(tokens, i);
-          string = this.spacesFromEnd(tokens) + string;
-          if (string !== " !important") node2.raws.important = string;
-          break;
-        } else if (token[1].toLowerCase() === "important") {
-          let cache = tokens.slice(0);
-          let str = "";
-          for (let j = i; j > 0; j--) {
-            let type = cache[j][0];
-            if (str.trim().startsWith("!") && type !== "space") {
-              break;
-            }
-            str = cache.pop()[1] + str;
-          }
-          if (str.trim().startsWith("!")) {
-            node2.important = true;
-            node2.raws.important = str;
-            tokens = cache;
-          }
-        }
-        if (token[0] !== "space" && token[0] !== "comment") {
-          break;
-        }
-      }
-      let hasWord = tokens.some((i) => i[0] !== "space" && i[0] !== "comment");
-      if (hasWord) {
-        node2.raws.between += firstSpaces.map((i) => i[1]).join("");
-        firstSpaces = [];
-      }
-      this.raw(node2, "value", firstSpaces.concat(tokens), customProperty);
-      if (node2.value.includes(":") && !customProperty) {
-        this.checkMissedSemicolon(tokens);
-      }
-    }
-    doubleColon(token) {
-      throw this.input.error("Double colon", {
-        offset: token[2]
-      }, {
-        offset: token[2] + token[1].length
-      });
-    }
-    emptyRule(token) {
-      let node2 = new Rule();
-      this.init(node2, token[2]);
-      node2.selector = "";
-      node2.raws.between = "";
-      this.current = node2;
-    }
-    end(token) {
-      if (this.current.nodes && this.current.nodes.length) {
-        this.current.raws.semicolon = this.semicolon;
-      }
-      this.semicolon = false;
-      this.current.raws.after = (this.current.raws.after || "") + this.spaces;
-      this.spaces = "";
-      if (this.current.parent) {
-        this.current.source.end = this.getPosition(token[2]);
-        this.current.source.end.offset++;
-        this.current = this.current.parent;
-      } else {
-        this.unexpectedClose(token);
-      }
-    }
-    endFile() {
-      if (this.current.parent) this.unclosedBlock();
-      if (this.current.nodes && this.current.nodes.length) {
-        this.current.raws.semicolon = this.semicolon;
-      }
-      this.current.raws.after = (this.current.raws.after || "") + this.spaces;
-      this.root.source.end = this.getPosition(this.tokenizer.position());
-    }
-    freeSemicolon(token) {
-      this.spaces += token[1];
-      if (this.current.nodes) {
-        let prev = this.current.nodes[this.current.nodes.length - 1];
-        if (prev && prev.type === "rule" && !prev.raws.ownSemicolon) {
-          prev.raws.ownSemicolon = this.spaces;
-          this.spaces = "";
-        }
-      }
-    }
-    // Helpers
-    getPosition(offset) {
-      let pos = this.input.fromOffset(offset);
-      return {
-        column: pos.col,
-        line: pos.line,
-        offset
-      };
-    }
-    init(node2, offset) {
-      this.current.push(node2);
-      node2.source = {
-        input: this.input,
-        start: this.getPosition(offset)
-      };
-      node2.raws.before = this.spaces;
-      this.spaces = "";
-      if (node2.type !== "comment") this.semicolon = false;
-    }
-    other(start) {
-      let end = false;
-      let type = null;
-      let colon = false;
-      let bracket = null;
-      let brackets = [];
-      let customProperty = start[1].startsWith("--");
-      let tokens = [];
-      let token = start;
-      while (token) {
-        type = token[0];
-        tokens.push(token);
-        if (type === "(" || type === "[") {
-          if (!bracket) bracket = token;
-          brackets.push(type === "(" ? ")" : "]");
-        } else if (customProperty && colon && type === "{") {
-          if (!bracket) bracket = token;
-          brackets.push("}");
-        } else if (brackets.length === 0) {
-          if (type === ";") {
-            if (colon) {
-              this.decl(tokens, customProperty);
-              return;
-            } else {
-              break;
-            }
-          } else if (type === "{") {
-            this.rule(tokens);
-            return;
-          } else if (type === "}") {
-            this.tokenizer.back(tokens.pop());
-            end = true;
-            break;
-          } else if (type === ":") {
-            colon = true;
-          }
-        } else if (type === brackets[brackets.length - 1]) {
-          brackets.pop();
-          if (brackets.length === 0) bracket = null;
-        }
-        token = this.tokenizer.nextToken();
-      }
-      if (this.tokenizer.endOfFile()) end = true;
-      if (brackets.length > 0) this.unclosedBracket(bracket);
-      if (end && colon) {
-        if (!customProperty) {
-          while (tokens.length) {
-            token = tokens[tokens.length - 1][0];
-            if (token !== "space" && token !== "comment") break;
-            this.tokenizer.back(tokens.pop());
-          }
-        }
-        this.decl(tokens, customProperty);
-      } else {
-        this.unknownWord(tokens);
-      }
-    }
-    parse() {
-      let token;
-      while (!this.tokenizer.endOfFile()) {
-        token = this.tokenizer.nextToken();
-        switch (token[0]) {
-          case "space":
-            this.spaces += token[1];
-            break;
-          case ";":
-            this.freeSemicolon(token);
-            break;
-          case "}":
-            this.end(token);
-            break;
-          case "comment":
-            this.comment(token);
-            break;
-          case "at-word":
-            this.atrule(token);
-            break;
-          case "{":
-            this.emptyRule(token);
-            break;
-          default:
-            this.other(token);
-            break;
-        }
-      }
-      this.endFile();
-    }
-    precheckMissedSemicolon() {
-    }
-    raw(node2, prop, tokens, customProperty) {
-      let token, type;
-      let length = tokens.length;
-      let value = "";
-      let clean = true;
-      let next, prev;
-      for (let i = 0; i < length; i += 1) {
-        token = tokens[i];
-        type = token[0];
-        if (type === "space" && i === length - 1 && !customProperty) {
-          clean = false;
-        } else if (type === "comment") {
-          prev = tokens[i - 1] ? tokens[i - 1][0] : "empty";
-          next = tokens[i + 1] ? tokens[i + 1][0] : "empty";
-          if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
-            if (value.slice(-1) === ",") {
-              clean = false;
-            } else {
-              value += token[1];
-            }
-          } else {
-            clean = false;
-          }
-        } else {
-          value += token[1];
-        }
-      }
-      if (!clean) {
-        let raw = tokens.reduce((all, i) => all + i[1], "");
-        node2.raws[prop] = {
-          raw,
-          value
-        };
-      }
-      node2[prop] = value;
-    }
-    rule(tokens) {
-      tokens.pop();
-      let node2 = new Rule();
-      this.init(node2, tokens[0][2]);
-      node2.raws.between = this.spacesAndCommentsFromEnd(tokens);
-      this.raw(node2, "selector", tokens);
-      this.current = node2;
-    }
-    spacesAndCommentsFromEnd(tokens) {
-      let lastTokenType;
-      let spaces = "";
-      while (tokens.length) {
-        lastTokenType = tokens[tokens.length - 1][0];
-        if (lastTokenType !== "space" && lastTokenType !== "comment") break;
-        spaces = tokens.pop()[1] + spaces;
-      }
-      return spaces;
-    }
-    // Errors
-    spacesAndCommentsFromStart(tokens) {
-      let next;
-      let spaces = "";
-      while (tokens.length) {
-        next = tokens[0][0];
-        if (next !== "space" && next !== "comment") break;
-        spaces += tokens.shift()[1];
-      }
-      return spaces;
-    }
-    spacesFromEnd(tokens) {
-      let lastTokenType;
-      let spaces = "";
-      while (tokens.length) {
-        lastTokenType = tokens[tokens.length - 1][0];
-        if (lastTokenType !== "space") break;
-        spaces = tokens.pop()[1] + spaces;
-      }
-      return spaces;
-    }
-    stringFrom(tokens, from) {
-      let result2 = "";
-      for (let i = from; i < tokens.length; i++) {
-        result2 += tokens[i][1];
-      }
-      tokens.splice(from, tokens.length - from);
-      return result2;
-    }
-    unclosedBlock() {
-      let pos = this.current.source.start;
-      throw this.input.error("Unclosed block", pos.line, pos.column);
-    }
-    unclosedBracket(bracket) {
-      throw this.input.error("Unclosed bracket", {
-        offset: bracket[2]
-      }, {
-        offset: bracket[2] + 1
-      });
-    }
-    unexpectedClose(token) {
-      throw this.input.error("Unexpected }", {
-        offset: token[2]
-      }, {
-        offset: token[2] + 1
-      });
-    }
-    unknownWord(tokens) {
-      throw this.input.error("Unknown word", {
-        offset: tokens[0][2]
-      }, {
-        offset: tokens[0][2] + tokens[0][1].length
-      });
-    }
-    unnamedAtrule(node2, token) {
-      throw this.input.error("At-rule without name", {
-        offset: token[2]
-      }, {
-        offset: token[2] + token[1].length
-      });
-    }
-  }
-  parser = Parser2;
-  return parser;
-}
-var parse_1;
-var hasRequiredParse;
-function requireParse() {
-  if (hasRequiredParse) return parse_1;
-  hasRequiredParse = 1;
-  let Container2 = requireContainer$1();
-  let Input = requireInput();
-  let Parser2 = requireParser();
-  function parse2(css, opts) {
-    let input2 = new Input(css, opts);
-    let parser2 = new Parser2(input2);
-    try {
-      parser2.parse();
-    } catch (e) {
-      if (process.env.NODE_ENV !== "production") {
-        if (e.name === "CssSyntaxError" && opts && opts.from) {
-          if (/\.scss$/i.test(opts.from)) {
-            e.message += "\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser";
-          } else if (/\.sass/i.test(opts.from)) {
-            e.message += "\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser";
-          } else if (/\.less$/i.test(opts.from)) {
-            e.message += "\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser";
-          }
-        }
-      }
-      throw e;
-    }
-    return parser2.root;
-  }
-  parse_1 = parse2;
-  parse2.default = parse2;
-  Container2.registerParse(parse2);
-  return parse_1;
-}
-var warning;
-var hasRequiredWarning;
-function requireWarning() {
-  if (hasRequiredWarning) return warning;
-  hasRequiredWarning = 1;
-  class Warning {
-    constructor(text, opts = {}) {
-      this.type = "warning";
-      this.text = text;
-      if (opts.node && opts.node.source) {
-        let range = opts.node.rangeBy(opts);
-        this.line = range.start.line;
-        this.column = range.start.column;
-        this.endLine = range.end.line;
-        this.endColumn = range.end.column;
-      }
-      for (let opt in opts) this[opt] = opts[opt];
-    }
-    toString() {
-      if (this.node) {
-        return this.node.error(this.text, {
-          index: this.index,
-          plugin: this.plugin,
-          word: this.word
-        }).message;
-      }
-      if (this.plugin) {
-        return this.plugin + ": " + this.text;
-      }
-      return this.text;
-    }
-  }
-  warning = Warning;
-  Warning.default = Warning;
-  return warning;
-}
-var result;
-var hasRequiredResult;
-function requireResult() {
-  if (hasRequiredResult) return result;
-  hasRequiredResult = 1;
-  let Warning = requireWarning();
-  class Result {
-    constructor(processor2, root2, opts) {
-      this.processor = processor2;
-      this.messages = [];
-      this.root = root2;
-      this.opts = opts;
-      this.css = void 0;
-      this.map = void 0;
-    }
-    toString() {
-      return this.css;
-    }
-    warn(text, opts = {}) {
-      if (!opts.plugin) {
-        if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
-          opts.plugin = this.lastPlugin.postcssPlugin;
-        }
-      }
-      let warning2 = new Warning(text, opts);
-      this.messages.push(warning2);
-      return warning2;
-    }
-    warnings() {
-      return this.messages.filter((i) => i.type === "warning");
-    }
-    get content() {
-      return this.css;
-    }
-  }
-  result = Result;
-  Result.default = Result;
-  return result;
-}
-var warnOnce;
-var hasRequiredWarnOnce;
-function requireWarnOnce() {
-  if (hasRequiredWarnOnce) return warnOnce;
-  hasRequiredWarnOnce = 1;
-  let printed = {};
-  warnOnce = function warnOnce2(message) {
-    if (printed[message]) return;
-    printed[message] = true;
-    if (typeof console !== "undefined" && console.warn) {
-      console.warn(message);
-    }
-  };
-  return warnOnce;
-}
-var lazyResult;
-var hasRequiredLazyResult;
-function requireLazyResult() {
-  if (hasRequiredLazyResult) return lazyResult;
-  hasRequiredLazyResult = 1;
-  let Container2 = requireContainer$1();
-  let Document2 = requireDocument();
-  let MapGenerator = requireMapGenerator();
-  let parse2 = requireParse();
-  let Result = requireResult();
-  let Root2 = requireRoot();
-  let stringify2 = requireStringify();
-  let {
-    isClean,
-    my
-  } = requireSymbols();
-  let warnOnce2 = requireWarnOnce();
-  const TYPE_TO_CLASS_NAME = {
-    atrule: "AtRule",
-    comment: "Comment",
-    decl: "Declaration",
-    document: "Document",
-    root: "Root",
-    rule: "Rule"
-  };
-  const PLUGIN_PROPS = {
-    AtRule: true,
-    AtRuleExit: true,
-    Comment: true,
-    CommentExit: true,
-    Declaration: true,
-    DeclarationExit: true,
-    Document: true,
-    DocumentExit: true,
-    Once: true,
-    OnceExit: true,
-    postcssPlugin: true,
-    prepare: true,
-    Root: true,
-    RootExit: true,
-    Rule: true,
-    RuleExit: true
-  };
-  const NOT_VISITORS = {
-    Once: true,
-    postcssPlugin: true,
-    prepare: true
-  };
-  const CHILDREN = 0;
-  function isPromise(obj) {
-    return typeof obj === "object" && typeof obj.then === "function";
-  }
-  function getEvents(node2) {
-    let key = false;
-    let type = TYPE_TO_CLASS_NAME[node2.type];
-    if (node2.type === "decl") {
-      key = node2.prop.toLowerCase();
-    } else if (node2.type === "atrule") {
-      key = node2.name.toLowerCase();
-    }
-    if (key && node2.append) {
-      return [type, type + "-" + key, CHILDREN, type + "Exit", type + "Exit-" + key];
-    } else if (key) {
-      return [type, type + "-" + key, type + "Exit", type + "Exit-" + key];
-    } else if (node2.append) {
-      return [type, CHILDREN, type + "Exit"];
-    } else {
-      return [type, type + "Exit"];
-    }
-  }
-  function toStack(node2) {
-    let events;
-    if (node2.type === "document") {
-      events = ["Document", CHILDREN, "DocumentExit"];
-    } else if (node2.type === "root") {
-      events = ["Root", CHILDREN, "RootExit"];
-    } else {
-      events = getEvents(node2);
-    }
-    return {
-      eventIndex: 0,
-      events,
-      iterator: 0,
-      node: node2,
-      visitorIndex: 0,
-      visitors: []
-    };
-  }
-  function cleanMarks(node2) {
-    node2[isClean] = false;
-    if (node2.nodes) node2.nodes.forEach((i) => cleanMarks(i));
-    return node2;
-  }
-  let postcss2 = {};
-  class LazyResult {
-    constructor(processor2, css, opts) {
-      this.stringified = false;
-      this.processed = false;
-      let root2;
-      if (typeof css === "object" && css !== null && (css.type === "root" || css.type === "document")) {
-        root2 = cleanMarks(css);
-      } else if (css instanceof LazyResult || css instanceof Result) {
-        root2 = cleanMarks(css.root);
-        if (css.map) {
-          if (typeof opts.map === "undefined") opts.map = {};
-          if (!opts.map.inline) opts.map.inline = false;
-          opts.map.prev = css.map;
-        }
-      } else {
-        let parser2 = parse2;
-        if (opts.syntax) parser2 = opts.syntax.parse;
-        if (opts.parser) parser2 = opts.parser;
-        if (parser2.parse) parser2 = parser2.parse;
-        try {
-          root2 = parser2(css, opts);
-        } catch (error) {
-          this.processed = true;
-          this.error = error;
-        }
-        if (root2 && !root2[my]) {
-          Container2.rebuild(root2);
-        }
-      }
-      this.result = new Result(processor2, root2, opts);
-      this.helpers = __spreadProps(__spreadValues({}, postcss2), {
-        postcss: postcss2,
-        result: this.result
-      });
-      this.plugins = this.processor.plugins.map((plugin) => {
-        if (typeof plugin === "object" && plugin.prepare) {
-          return __spreadValues(__spreadValues({}, plugin), plugin.prepare(this.result));
-        } else {
-          return plugin;
-        }
-      });
-    }
-    async() {
-      if (this.error) return Promise.reject(this.error);
-      if (this.processed) return Promise.resolve(this.result);
-      if (!this.processing) {
-        this.processing = this.runAsync();
-      }
-      return this.processing;
-    }
-    catch(onRejected) {
-      return this.async().catch(onRejected);
-    }
-    finally(onFinally) {
-      return this.async().then(onFinally, onFinally);
-    }
-    getAsyncError() {
-      throw new Error("Use process(css).then(cb) to work with async plugins");
-    }
-    handleError(error, node2) {
-      let plugin = this.result.lastPlugin;
-      try {
-        if (node2) node2.addToError(error);
-        this.error = error;
-        if (error.name === "CssSyntaxError" && !error.plugin) {
-          error.plugin = plugin.postcssPlugin;
-          error.setMessage();
-        } else if (plugin.postcssVersion) {
-          if (process.env.NODE_ENV !== "production") {
-            let pluginName = plugin.postcssPlugin;
-            let pluginVer = plugin.postcssVersion;
-            let runtimeVer = this.result.processor.version;
-            let a = pluginVer.split(".");
-            let b = runtimeVer.split(".");
-            if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
-              console.error("Unknown error from PostCSS plugin. Your current PostCSS version is " + runtimeVer + ", but " + pluginName + " uses " + pluginVer + ". Perhaps this is the source of the error below.");
-            }
-          }
-        }
-      } catch (err) {
-        if (console && console.error) console.error(err);
-      }
-      return error;
-    }
-    prepareVisitors() {
-      this.listeners = {};
-      let add = (plugin, type, cb) => {
-        if (!this.listeners[type]) this.listeners[type] = [];
-        this.listeners[type].push([plugin, cb]);
-      };
-      for (let plugin of this.plugins) {
-        if (typeof plugin === "object") {
-          for (let event in plugin) {
-            if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
-              throw new Error(`Unknown event ${event} in ${plugin.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);
-            }
-            if (!NOT_VISITORS[event]) {
-              if (typeof plugin[event] === "object") {
-                for (let filter2 in plugin[event]) {
-                  if (filter2 === "*") {
-                    add(plugin, event, plugin[event][filter2]);
-                  } else {
-                    add(plugin, event + "-" + filter2.toLowerCase(), plugin[event][filter2]);
-                  }
-                }
-              } else if (typeof plugin[event] === "function") {
-                add(plugin, event, plugin[event]);
-              }
-            }
-          }
-        }
-      }
-      this.hasListener = Object.keys(this.listeners).length > 0;
-    }
-    runAsync() {
-      return __async(this, null, function* () {
-        this.plugin = 0;
-        for (let i = 0; i < this.plugins.length; i++) {
-          let plugin = this.plugins[i];
-          let promise = this.runOnRoot(plugin);
-          if (isPromise(promise)) {
-            try {
-              yield promise;
-            } catch (error) {
-              throw this.handleError(error);
-            }
-          }
-        }
-        this.prepareVisitors();
-        if (this.hasListener) {
-          let root2 = this.result.root;
-          while (!root2[isClean]) {
-            root2[isClean] = true;
-            let stack = [toStack(root2)];
-            while (stack.length > 0) {
-              let promise = this.visitTick(stack);
-              if (isPromise(promise)) {
-                try {
-                  yield promise;
-                } catch (e) {
-                  let node2 = stack[stack.length - 1].node;
-                  throw this.handleError(e, node2);
-                }
-              }
-            }
-          }
-          if (this.listeners.OnceExit) {
-            for (let [plugin, visitor] of this.listeners.OnceExit) {
-              this.result.lastPlugin = plugin;
-              try {
-                if (root2.type === "document") {
-                  let roots = root2.nodes.map((subRoot) => visitor(subRoot, this.helpers));
-                  yield Promise.all(roots);
-                } else {
-                  yield visitor(root2, this.helpers);
-                }
-              } catch (e) {
-                throw this.handleError(e);
-              }
-            }
-          }
-        }
-        this.processed = true;
-        return this.stringify();
-      });
-    }
-    runOnRoot(plugin) {
-      this.result.lastPlugin = plugin;
-      try {
-        if (typeof plugin === "object" && plugin.Once) {
-          if (this.result.root.type === "document") {
-            let roots = this.result.root.nodes.map((root2) => plugin.Once(root2, this.helpers));
-            if (isPromise(roots[0])) {
-              return Promise.all(roots);
-            }
-            return roots;
-          }
-          return plugin.Once(this.result.root, this.helpers);
-        } else if (typeof plugin === "function") {
-          return plugin(this.result.root, this.result);
-        }
-      } catch (error) {
-        throw this.handleError(error);
-      }
-    }
-    stringify() {
-      if (this.error) throw this.error;
-      if (this.stringified) return this.result;
-      this.stringified = true;
-      this.sync();
-      let opts = this.result.opts;
-      let str = stringify2;
-      if (opts.syntax) str = opts.syntax.stringify;
-      if (opts.stringifier) str = opts.stringifier;
-      if (str.stringify) str = str.stringify;
-      let map = new MapGenerator(str, this.result.root, this.result.opts);
-      let data = map.generate();
-      this.result.css = data[0];
-      this.result.map = data[1];
-      return this.result;
-    }
-    sync() {
-      if (this.error) throw this.error;
-      if (this.processed) return this.result;
-      this.processed = true;
-      if (this.processing) {
-        throw this.getAsyncError();
-      }
-      for (let plugin of this.plugins) {
-        let promise = this.runOnRoot(plugin);
-        if (isPromise(promise)) {
-          throw this.getAsyncError();
-        }
-      }
-      this.prepareVisitors();
-      if (this.hasListener) {
-        let root2 = this.result.root;
-        while (!root2[isClean]) {
-          root2[isClean] = true;
-          this.walkSync(root2);
-        }
-        if (this.listeners.OnceExit) {
-          if (root2.type === "document") {
-            for (let subRoot of root2.nodes) {
-              this.visitSync(this.listeners.OnceExit, subRoot);
-            }
-          } else {
-            this.visitSync(this.listeners.OnceExit, root2);
-          }
-        }
-      }
-      return this.result;
-    }
-    then(onFulfilled, onRejected) {
-      if (process.env.NODE_ENV !== "production") {
-        if (!("from" in this.opts)) {
-          warnOnce2("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");
-        }
-      }
-      return this.async().then(onFulfilled, onRejected);
-    }
-    toString() {
-      return this.css;
-    }
-    visitSync(visitors, node2) {
-      for (let [plugin, visitor] of visitors) {
-        this.result.lastPlugin = plugin;
-        let promise;
-        try {
-          promise = visitor(node2, this.helpers);
-        } catch (e) {
-          throw this.handleError(e, node2.proxyOf);
-        }
-        if (node2.type !== "root" && node2.type !== "document" && !node2.parent) {
-          return true;
-        }
-        if (isPromise(promise)) {
-          throw this.getAsyncError();
-        }
-      }
-    }
-    visitTick(stack) {
-      let visit = stack[stack.length - 1];
-      let {
-        node: node2,
-        visitors
-      } = visit;
-      if (node2.type !== "root" && node2.type !== "document" && !node2.parent) {
-        stack.pop();
-        return;
-      }
-      if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
-        let [plugin, visitor] = visitors[visit.visitorIndex];
-        visit.visitorIndex += 1;
-        if (visit.visitorIndex === visitors.length) {
-          visit.visitors = [];
-          visit.visitorIndex = 0;
-        }
-        this.result.lastPlugin = plugin;
-        try {
-          return visitor(node2.toProxy(), this.helpers);
-        } catch (e) {
-          throw this.handleError(e, node2);
-        }
-      }
-      if (visit.iterator !== 0) {
-        let iterator = visit.iterator;
-        let child;
-        while (child = node2.nodes[node2.indexes[iterator]]) {
-          node2.indexes[iterator] += 1;
-          if (!child[isClean]) {
-            child[isClean] = true;
-            stack.push(toStack(child));
-            return;
-          }
-        }
-        visit.iterator = 0;
-        delete node2.indexes[iterator];
-      }
-      let events = visit.events;
-      while (visit.eventIndex < events.length) {
-        let event = events[visit.eventIndex];
-        visit.eventIndex += 1;
-        if (event === CHILDREN) {
-          if (node2.nodes && node2.nodes.length) {
-            node2[isClean] = true;
-            visit.iterator = node2.getIterator();
-          }
-          return;
-        } else if (this.listeners[event]) {
-          visit.visitors = this.listeners[event];
-          return;
-        }
-      }
-      stack.pop();
-    }
-    walkSync(node2) {
-      node2[isClean] = true;
-      let events = getEvents(node2);
-      for (let event of events) {
-        if (event === CHILDREN) {
-          if (node2.nodes) {
-            node2.each((child) => {
-              if (!child[isClean]) this.walkSync(child);
-            });
-          }
-        } else {
-          let visitors = this.listeners[event];
-          if (visitors) {
-            if (this.visitSync(visitors, node2.toProxy())) return;
-          }
-        }
-      }
-    }
-    warnings() {
-      return this.sync().warnings();
-    }
-    get content() {
-      return this.stringify().content;
-    }
-    get css() {
-      return this.stringify().css;
-    }
-    get map() {
-      return this.stringify().map;
-    }
-    get messages() {
-      return this.sync().messages;
-    }
-    get opts() {
-      return this.result.opts;
-    }
-    get processor() {
-      return this.result.processor;
-    }
-    get root() {
-      return this.sync().root;
-    }
-    get [Symbol.toStringTag]() {
-      return "LazyResult";
-    }
-  }
-  LazyResult.registerPostcss = (dependant) => {
-    postcss2 = dependant;
-  };
-  lazyResult = LazyResult;
-  LazyResult.default = LazyResult;
-  Root2.registerLazyResult(LazyResult);
-  Document2.registerLazyResult(LazyResult);
-  return lazyResult;
-}
-var noWorkResult;
-var hasRequiredNoWorkResult;
-function requireNoWorkResult() {
-  if (hasRequiredNoWorkResult) return noWorkResult;
-  hasRequiredNoWorkResult = 1;
-  let MapGenerator = requireMapGenerator();
-  let parse2 = requireParse();
-  const Result = requireResult();
-  let stringify2 = requireStringify();
-  let warnOnce2 = requireWarnOnce();
-  class NoWorkResult {
-    constructor(processor2, css, opts) {
-      css = css.toString();
-      this.stringified = false;
-      this._processor = processor2;
-      this._css = css;
-      this._opts = opts;
-      this._map = void 0;
-      let root2;
-      let str = stringify2;
-      this.result = new Result(this._processor, root2, this._opts);
-      this.result.css = css;
-      let self = this;
-      Object.defineProperty(this.result, "root", {
-        get() {
-          return self.root;
-        }
-      });
-      let map = new MapGenerator(str, root2, this._opts, css);
-      if (map.isMap()) {
-        let [generatedCSS, generatedMap] = map.generate();
-        if (generatedCSS) {
-          this.result.css = generatedCSS;
-        }
-        if (generatedMap) {
-          this.result.map = generatedMap;
-        }
-      } else {
-        map.clearAnnotation();
-        this.result.css = map.css;
-      }
-    }
-    async() {
-      if (this.error) return Promise.reject(this.error);
-      return Promise.resolve(this.result);
-    }
-    catch(onRejected) {
-      return this.async().catch(onRejected);
-    }
-    finally(onFinally) {
-      return this.async().then(onFinally, onFinally);
-    }
-    sync() {
-      if (this.error) throw this.error;
-      return this.result;
-    }
-    then(onFulfilled, onRejected) {
-      if (process.env.NODE_ENV !== "production") {
-        if (!("from" in this._opts)) {
-          warnOnce2("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");
-        }
-      }
-      return this.async().then(onFulfilled, onRejected);
-    }
-    toString() {
-      return this._css;
-    }
-    warnings() {
-      return [];
-    }
-    get content() {
-      return this.result.css;
-    }
-    get css() {
-      return this.result.css;
-    }
-    get map() {
-      return this.result.map;
-    }
-    get messages() {
-      return [];
-    }
-    get opts() {
-      return this.result.opts;
-    }
-    get processor() {
-      return this.result.processor;
-    }
-    get root() {
-      if (this._root) {
-        return this._root;
-      }
-      let root2;
-      let parser2 = parse2;
-      try {
-        root2 = parser2(this._css, this._opts);
-      } catch (error) {
-        this.error = error;
-      }
-      if (this.error) {
-        throw this.error;
-      } else {
-        this._root = root2;
-        return root2;
-      }
-    }
-    get [Symbol.toStringTag]() {
-      return "NoWorkResult";
-    }
-  }
-  noWorkResult = NoWorkResult;
-  NoWorkResult.default = NoWorkResult;
-  return noWorkResult;
-}
-var processor;
-var hasRequiredProcessor;
-function requireProcessor() {
-  if (hasRequiredProcessor) return processor;
-  hasRequiredProcessor = 1;
-  let Document2 = requireDocument();
-  let LazyResult = requireLazyResult();
-  let NoWorkResult = requireNoWorkResult();
-  let Root2 = requireRoot();
-  class Processor {
-    constructor(plugins = []) {
-      this.version = "8.4.49";
-      this.plugins = this.normalize(plugins);
-    }
-    normalize(plugins) {
-      let normalized = [];
-      for (let i of plugins) {
-        if (i.postcss === true) {
-          i = i();
-        } else if (i.postcss) {
-          i = i.postcss;
-        }
-        if (typeof i === "object" && Array.isArray(i.plugins)) {
-          normalized = normalized.concat(i.plugins);
-        } else if (typeof i === "object" && i.postcssPlugin) {
-          normalized.push(i);
-        } else if (typeof i === "function") {
-          normalized.push(i);
-        } else if (typeof i === "object" && (i.parse || i.stringify)) {
-          if (process.env.NODE_ENV !== "production") {
-            throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.");
-          }
-        } else {
-          throw new Error(i + " is not a PostCSS plugin");
-        }
-      }
-      return normalized;
-    }
-    process(css, opts = {}) {
-      if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {
-        return new NoWorkResult(this, css, opts);
-      } else {
-        return new LazyResult(this, css, opts);
-      }
-    }
-    use(plugin) {
-      this.plugins = this.plugins.concat(this.normalize([plugin]));
-      return this;
-    }
-  }
-  processor = Processor;
-  Processor.default = Processor;
-  Root2.registerProcessor(Processor);
-  Document2.registerProcessor(Processor);
-  return processor;
-}
-var postcss_1;
-var hasRequiredPostcss;
-function requirePostcss() {
-  if (hasRequiredPostcss) return postcss_1;
-  hasRequiredPostcss = 1;
-  let AtRule = requireAtRule();
-  let Comment2 = requireComment();
-  let Container2 = requireContainer$1();
-  let CssSyntaxError = requireCssSyntaxError();
-  let Declaration = requireDeclaration();
-  let Document2 = requireDocument();
-  let fromJSON = requireFromJSON();
-  let Input = requireInput();
-  let LazyResult = requireLazyResult();
-  let list = requireList();
-  let Node2 = requireNode$1();
-  let parse2 = requireParse();
-  let Processor = requireProcessor();
-  let Result = requireResult();
-  let Root2 = requireRoot();
-  let Rule = requireRule();
-  let stringify2 = requireStringify();
-  let Warning = requireWarning();
-  function postcss2(...plugins) {
-    if (plugins.length === 1 && Array.isArray(plugins[0])) {
-      plugins = plugins[0];
-    }
-    return new Processor(plugins);
-  }
-  postcss2.plugin = function plugin(name, initializer) {
-    let warningPrinted = false;
-    function creator(...args) {
-      if (console && console.warn && !warningPrinted) {
-        warningPrinted = true;
-        console.warn(name + ": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration");
-        if (process.env.LANG && process.env.LANG.startsWith("cn")) {
-          console.warn(name + ": 里面 postcss.plugin 被弃用. 迁移指南:\nhttps://www.w3ctech.com/topic/2226");
-        }
-      }
-      let transformer = initializer(...args);
-      transformer.postcssPlugin = name;
-      transformer.postcssVersion = new Processor().version;
-      return transformer;
-    }
-    let cache;
-    Object.defineProperty(creator, "postcss", {
-      get() {
-        if (!cache) cache = creator();
-        return cache;
-      }
-    });
-    creator.process = function(css, processOpts, pluginOpts) {
-      return postcss2([creator(pluginOpts)]).process(css, processOpts);
-    };
-    return creator;
-  };
-  postcss2.stringify = stringify2;
-  postcss2.parse = parse2;
-  postcss2.fromJSON = fromJSON;
-  postcss2.list = list;
-  postcss2.comment = (defaults) => new Comment2(defaults);
-  postcss2.atRule = (defaults) => new AtRule(defaults);
-  postcss2.decl = (defaults) => new Declaration(defaults);
-  postcss2.rule = (defaults) => new Rule(defaults);
-  postcss2.root = (defaults) => new Root2(defaults);
-  postcss2.document = (defaults) => new Document2(defaults);
-  postcss2.CssSyntaxError = CssSyntaxError;
-  postcss2.Declaration = Declaration;
-  postcss2.Container = Container2;
-  postcss2.Processor = Processor;
-  postcss2.Document = Document2;
-  postcss2.Comment = Comment2;
-  postcss2.Warning = Warning;
-  postcss2.AtRule = AtRule;
-  postcss2.Result = Result;
-  postcss2.Input = Input;
-  postcss2.Rule = Rule;
-  postcss2.Root = Root2;
-  postcss2.Node = Node2;
-  LazyResult.registerPostcss(postcss2);
-  postcss_1 = postcss2;
-  postcss2.default = postcss2;
-  return postcss_1;
-}
-var postcssExports = requirePostcss();
-var postcss = getDefaultExportFromCjs(postcssExports);
-var stringify = postcss.stringify;
-postcss.fromJSON;
-postcss.plugin;
-var parse$2 = postcss.parse;
-postcss.list;
-postcss.document;
-postcss.comment;
-postcss.atRule;
-postcss.rule;
-postcss.decl;
-postcss.root;
-postcss.CssSyntaxError;
-postcss.Declaration;
-postcss.Container;
-postcss.Processor;
-postcss.Document;
-postcss.Comment;
-postcss.Warning;
-postcss.AtRule;
-postcss.Result;
-postcss.Input;
-postcss.Rule;
-postcss.Root;
-postcss.Node;
-var dist = {};
-var Container = {};
-var Node$1 = {};
-var hasRequiredNode;
-function requireNode() {
-  if (hasRequiredNode) return Node$1;
-  hasRequiredNode = 1;
-  Object.defineProperty(Node$1, "__esModule", {
-    value: true
-  });
-  function Node2(opts) {
-    this.after = opts.after;
-    this.before = opts.before;
-    this.type = opts.type;
-    this.value = opts.value;
-    this.sourceIndex = opts.sourceIndex;
-  }
-  Node$1.default = Node2;
-  return Node$1;
-}
-var hasRequiredContainer;
-function requireContainer() {
-  if (hasRequiredContainer) return Container;
-  hasRequiredContainer = 1;
-  Object.defineProperty(Container, "__esModule", {
-    value: true
-  });
-  var _Node = requireNode();
-  var _Node2 = _interopRequireDefault(_Node);
-  function _interopRequireDefault(obj) {
-    return obj && obj.__esModule ? obj : {
-      default: obj
-    };
-  }
-  function Container$1(opts) {
-    var _this = this;
-    this.constructor(opts);
-    this.nodes = opts.nodes;
-    if (this.after === void 0) {
-      this.after = this.nodes.length > 0 ? this.nodes[this.nodes.length - 1].after : "";
-    }
-    if (this.before === void 0) {
-      this.before = this.nodes.length > 0 ? this.nodes[0].before : "";
-    }
-    if (this.sourceIndex === void 0) {
-      this.sourceIndex = this.before.length;
-    }
-    this.nodes.forEach(function(node2) {
-      node2.parent = _this;
-    });
-  }
-  Container$1.prototype = Object.create(_Node2.default.prototype);
-  Container$1.constructor = _Node2.default;
-  Container$1.prototype.walk = function walk(filter2, cb) {
-    var hasFilter = typeof filter2 === "string" || filter2 instanceof RegExp;
-    var callback = hasFilter ? cb : filter2;
-    var filterReg = typeof filter2 === "string" ? new RegExp(filter2) : filter2;
-    for (var i = 0; i < this.nodes.length; i++) {
-      var node2 = this.nodes[i];
-      var filtered = hasFilter ? filterReg.test(node2.type) : true;
-      if (filtered && callback && callback(node2, i, this.nodes) === false) {
-        return false;
-      }
-      if (node2.nodes && node2.walk(filter2, cb) === false) {
-        return false;
-      }
-    }
-    return true;
-  };
-  Container$1.prototype.each = function each() {
-    var cb = arguments.length <= 0 || arguments[0] === void 0 ? function() {
-    } : arguments[0];
-    for (var i = 0; i < this.nodes.length; i++) {
-      var node2 = this.nodes[i];
-      if (cb(node2, i, this.nodes) === false) {
-        return false;
-      }
-    }
-    return true;
-  };
-  Container.default = Container$1;
-  return Container;
-}
-var parsers = {};
-var hasRequiredParsers;
-function requireParsers() {
-  if (hasRequiredParsers) return parsers;
-  hasRequiredParsers = 1;
-  Object.defineProperty(parsers, "__esModule", {
-    value: true
-  });
-  parsers.parseMediaFeature = parseMediaFeature;
-  parsers.parseMediaQuery = parseMediaQuery;
-  parsers.parseMediaList = parseMediaList;
-  var _Node = requireNode();
-  var _Node2 = _interopRequireDefault(_Node);
-  var _Container = requireContainer();
-  var _Container2 = _interopRequireDefault(_Container);
-  function _interopRequireDefault(obj) {
-    return obj && obj.__esModule ? obj : {
-      default: obj
-    };
-  }
-  function parseMediaFeature(string) {
-    var index = arguments.length <= 1 || arguments[1] === void 0 ? 0 : arguments[1];
-    var modesEntered = [{
-      mode: "normal",
-      character: null
-    }];
-    var result2 = [];
-    var lastModeIndex = 0;
-    var mediaFeature = "";
-    var colon = null;
-    var mediaFeatureValue = null;
-    var indexLocal = index;
-    var stringNormalized = string;
-    if (string[0] === "(" && string[string.length - 1] === ")") {
-      stringNormalized = string.substring(1, string.length - 1);
-      indexLocal++;
-    }
-    for (var i = 0; i < stringNormalized.length; i++) {
-      var character = stringNormalized[i];
-      if (character === "'" || character === '"') {
-        if (modesEntered[lastModeIndex].isCalculationEnabled === true) {
-          modesEntered.push({
-            mode: "string",
-            isCalculationEnabled: false,
-            character
-          });
-          lastModeIndex++;
-        } else if (modesEntered[lastModeIndex].mode === "string" && modesEntered[lastModeIndex].character === character && stringNormalized[i - 1] !== "\\") {
-          modesEntered.pop();
-          lastModeIndex--;
-        }
-      }
-      if (character === "{") {
-        modesEntered.push({
-          mode: "interpolation",
-          isCalculationEnabled: true
-        });
-        lastModeIndex++;
-      } else if (character === "}") {
-        modesEntered.pop();
-        lastModeIndex--;
-      }
-      if (modesEntered[lastModeIndex].mode === "normal" && character === ":") {
-        var mediaFeatureValueStr = stringNormalized.substring(i + 1);
-        mediaFeatureValue = {
-          type: "value",
-          before: /^(\s*)/.exec(mediaFeatureValueStr)[1],
-          after: /(\s*)$/.exec(mediaFeatureValueStr)[1],
-          value: mediaFeatureValueStr.trim()
-        };
-        mediaFeatureValue.sourceIndex = mediaFeatureValue.before.length + i + 1 + indexLocal;
-        colon = {
-          type: "colon",
-          sourceIndex: i + indexLocal,
-          after: mediaFeatureValue.before,
-          value: ":"
-        };
-        break;
-      }
-      mediaFeature += character;
-    }
-    mediaFeature = {
-      type: "media-feature",
-      before: /^(\s*)/.exec(mediaFeature)[1],
-      after: /(\s*)$/.exec(mediaFeature)[1],
-      value: mediaFeature.trim()
-    };
-    mediaFeature.sourceIndex = mediaFeature.before.length + indexLocal;
-    result2.push(mediaFeature);
-    if (colon !== null) {
-      colon.before = mediaFeature.after;
-      result2.push(colon);
-    }
-    if (mediaFeatureValue !== null) {
-      result2.push(mediaFeatureValue);
-    }
-    return result2;
-  }
-  function parseMediaQuery(string) {
-    var index = arguments.length <= 1 || arguments[1] === void 0 ? 0 : arguments[1];
-    var result2 = [];
-    var localLevel = 0;
-    var insideSomeValue = false;
-    var node2 = void 0;
-    function resetNode() {
-      return {
-        before: "",
-        after: "",
-        value: ""
-      };
-    }
-    node2 = resetNode();
-    for (var i = 0; i < string.length; i++) {
-      var character = string[i];
-      if (!insideSomeValue) {
-        if (character.search(/\s/) !== -1) {
-          node2.before += character;
-        } else {
-          if (character === "(") {
-            node2.type = "media-feature-expression";
-            localLevel++;
-          }
-          node2.value = character;
-          node2.sourceIndex = index + i;
-          insideSomeValue = true;
-        }
-      } else {
-        node2.value += character;
-        if (character === "{" || character === "(") {
-          localLevel++;
-        }
-        if (character === ")" || character === "}") {
-          localLevel--;
-        }
-      }
-      if (insideSomeValue && localLevel === 0 && (character === ")" || i === string.length - 1 || string[i + 1].search(/\s/) !== -1)) {
-        if (["not", "only", "and"].indexOf(node2.value) !== -1) {
-          node2.type = "keyword";
-        }
-        if (node2.type === "media-feature-expression") {
-          node2.nodes = parseMediaFeature(node2.value, node2.sourceIndex);
-        }
-        result2.push(Array.isArray(node2.nodes) ? new _Container2.default(node2) : new _Node2.default(node2));
-        node2 = resetNode();
-        insideSomeValue = false;
-      }
-    }
-    for (var _i = 0; _i < result2.length; _i++) {
-      node2 = result2[_i];
-      if (_i > 0) {
-        result2[_i - 1].after = node2.before;
-      }
-      if (node2.type === void 0) {
-        if (_i > 0) {
-          if (result2[_i - 1].type === "media-feature-expression") {
-            node2.type = "keyword";
-            continue;
-          }
-          if (result2[_i - 1].value === "not" || result2[_i - 1].value === "only") {
-            node2.type = "media-type";
-            continue;
-          }
-          if (result2[_i - 1].value === "and") {
-            node2.type = "media-feature-expression";
-            continue;
-          }
-          if (result2[_i - 1].type === "media-type") {
-            if (!result2[_i + 1]) {
-              node2.type = "media-feature-expression";
-            } else {
-              node2.type = result2[_i + 1].type === "media-feature-expression" ? "keyword" : "media-feature-expression";
-            }
-          }
-        }
-        if (_i === 0) {
-          if (!result2[_i + 1]) {
-            node2.type = "media-type";
-            continue;
-          }
-          if (result2[_i + 1] && (result2[_i + 1].type === "media-feature-expression" || result2[_i + 1].type === "keyword")) {
-            node2.type = "media-type";
-            continue;
-          }
-          if (result2[_i + 2]) {
-            if (result2[_i + 2].type === "media-feature-expression") {
-              node2.type = "media-type";
-              result2[_i + 1].type = "keyword";
-              continue;
-            }
-            if (result2[_i + 2].type === "keyword") {
-              node2.type = "keyword";
-              result2[_i + 1].type = "media-type";
-              continue;
-            }
-          }
-          if (result2[_i + 3]) {
-            if (result2[_i + 3].type === "media-feature-expression") {
-              node2.type = "keyword";
-              result2[_i + 1].type = "media-type";
-              result2[_i + 2].type = "keyword";
-              continue;
-            }
-          }
-        }
-      }
-    }
-    return result2;
-  }
-  function parseMediaList(string) {
-    var result2 = [];
-    var interimIndex = 0;
-    var levelLocal = 0;
-    var doesHaveUrl = /^(\s*)url\s*\(/.exec(string);
-    if (doesHaveUrl !== null) {
-      var i = doesHaveUrl[0].length;
-      var parenthesesLv = 1;
-      while (parenthesesLv > 0) {
-        var character = string[i];
-        if (character === "(") {
-          parenthesesLv++;
-        }
-        if (character === ")") {
-          parenthesesLv--;
-        }
-        i++;
-      }
-      result2.unshift(new _Node2.default({
-        type: "url",
-        value: string.substring(0, i).trim(),
-        sourceIndex: doesHaveUrl[1].length,
-        before: doesHaveUrl[1],
-        after: /^(\s*)/.exec(string.substring(i))[1]
-      }));
-      interimIndex = i;
-    }
-    for (var _i2 = interimIndex; _i2 < string.length; _i2++) {
-      var _character = string[_i2];
-      if (_character === "(") {
-        levelLocal++;
-      }
-      if (_character === ")") {
-        levelLocal--;
-      }
-      if (levelLocal === 0 && _character === ",") {
-        var _mediaQueryString = string.substring(interimIndex, _i2);
-        var _spaceBefore = /^(\s*)/.exec(_mediaQueryString)[1];
-        result2.push(new _Container2.default({
-          type: "media-query",
-          value: _mediaQueryString.trim(),
-          sourceIndex: interimIndex + _spaceBefore.length,
-          nodes: parseMediaQuery(_mediaQueryString, interimIndex),
-          before: _spaceBefore,
-          after: /(\s*)$/.exec(_mediaQueryString)[1]
-        }));
-        interimIndex = _i2 + 1;
-      }
-    }
-    var mediaQueryString = string.substring(interimIndex);
-    var spaceBefore = /^(\s*)/.exec(mediaQueryString)[1];
-    result2.push(new _Container2.default({
-      type: "media-query",
-      value: mediaQueryString.trim(),
-      sourceIndex: interimIndex + spaceBefore.length,
-      nodes: parseMediaQuery(mediaQueryString, interimIndex),
-      before: spaceBefore,
-      after: /(\s*)$/.exec(mediaQueryString)[1]
-    }));
-    return result2;
-  }
-  return parsers;
-}
-var hasRequiredDist;
-function requireDist() {
-  if (hasRequiredDist) return dist;
-  hasRequiredDist = 1;
-  Object.defineProperty(dist, "__esModule", {
-    value: true
-  });
-  dist.default = parseMedia;
-  var _Container = requireContainer();
-  var _Container2 = _interopRequireDefault(_Container);
-  var _parsers = requireParsers();
-  function _interopRequireDefault(obj) {
-    return obj && obj.__esModule ? obj : {
-      default: obj
-    };
-  }
-  function parseMedia(value) {
-    return new _Container2.default({
-      nodes: (0, _parsers.parseMediaList)(value),
-      type: "media-query-list",
-      value: value.trim()
-    });
-  }
-  return dist;
-}
-var distExports = requireDist();
-var mediaParser = getDefaultExportFromCjs(distExports);
-var ElementType;
-(function(ElementType2) {
-  ElementType2["Root"] = "root";
-  ElementType2["Text"] = "text";
-  ElementType2["Directive"] = "directive";
-  ElementType2["Comment"] = "comment";
-  ElementType2["Script"] = "script";
-  ElementType2["Style"] = "style";
-  ElementType2["Tag"] = "tag";
-  ElementType2["CDATA"] = "cdata";
-  ElementType2["Doctype"] = "doctype";
-})(ElementType || (ElementType = {}));
-function isTag$1(elem) {
-  return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
-}
-var Root = ElementType.Root;
-var Text$1 = ElementType.Text;
-var Directive = ElementType.Directive;
-var Comment$1 = ElementType.Comment;
-var Script = ElementType.Script;
-var Style = ElementType.Style;
-var Tag = ElementType.Tag;
-var CDATA$1 = ElementType.CDATA;
-var Doctype = ElementType.Doctype;
-var Node = class {
-  constructor() {
-    this.parent = null;
-    this.prev = null;
-    this.next = null;
-    this.startIndex = null;
-    this.endIndex = null;
-  }
-  // Read-write aliases for properties
-  /**
-   * Same as {@link parent}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get parentNode() {
-    return this.parent;
-  }
-  set parentNode(parent) {
-    this.parent = parent;
-  }
-  /**
-   * Same as {@link prev}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get previousSibling() {
-    return this.prev;
-  }
-  set previousSibling(prev) {
-    this.prev = prev;
-  }
-  /**
-   * Same as {@link next}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get nextSibling() {
-    return this.next;
-  }
-  set nextSibling(next) {
-    this.next = next;
-  }
-  /**
-   * Clone this node, and optionally its children.
-   *
-   * @param recursive Clone child nodes as well.
-   * @returns A clone of the node.
-   */
-  cloneNode(recursive = false) {
-    return cloneNode(this, recursive);
-  }
-};
-var DataNode = class extends Node {
-  /**
-   * @param data The content of the data node
-   */
-  constructor(data) {
-    super();
-    this.data = data;
-  }
-  /**
-   * Same as {@link data}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get nodeValue() {
-    return this.data;
-  }
-  set nodeValue(data) {
-    this.data = data;
-  }
-};
-var Text = class extends DataNode {
-  constructor() {
-    super(...arguments);
-    this.type = ElementType.Text;
-  }
-  get nodeType() {
-    return 3;
-  }
-};
-var Comment = class extends DataNode {
-  constructor() {
-    super(...arguments);
-    this.type = ElementType.Comment;
-  }
-  get nodeType() {
-    return 8;
-  }
-};
-var ProcessingInstruction = class extends DataNode {
-  constructor(name, data) {
-    super(data);
-    this.name = name;
-    this.type = ElementType.Directive;
-  }
-  get nodeType() {
-    return 1;
-  }
-};
-var NodeWithChildren = class extends Node {
-  /**
-   * @param children Children of the node. Only certain node types can have children.
-   */
-  constructor(children) {
-    super();
-    this.children = children;
-  }
-  // Aliases
-  /** First child of the node. */
-  get firstChild() {
-    var _a2;
-    return (_a2 = this.children[0]) !== null && _a2 !== void 0 ? _a2 : null;
-  }
-  /** Last child of the node. */
-  get lastChild() {
-    return this.children.length > 0 ? this.children[this.children.length - 1] : null;
-  }
-  /**
-   * Same as {@link children}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get childNodes() {
-    return this.children;
-  }
-  set childNodes(children) {
-    this.children = children;
-  }
-};
-var CDATA = class extends NodeWithChildren {
-  constructor() {
-    super(...arguments);
-    this.type = ElementType.CDATA;
-  }
-  get nodeType() {
-    return 4;
-  }
-};
-var Document = class extends NodeWithChildren {
-  constructor() {
-    super(...arguments);
-    this.type = ElementType.Root;
-  }
-  get nodeType() {
-    return 9;
-  }
-};
-var Element = class extends NodeWithChildren {
-  /**
-   * @param name Name of the tag, eg. `div`, `span`.
-   * @param attribs Object mapping attribute names to attribute values.
-   * @param children Children of the node.
-   */
-  constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
-    super(children);
-    this.name = name;
-    this.attribs = attribs;
-    this.type = type;
-  }
-  get nodeType() {
-    return 1;
-  }
-  // DOM Level 1 aliases
-  /**
-   * Same as {@link name}.
-   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
-   */
-  get tagName() {
-    return this.name;
-  }
-  set tagName(name) {
-    this.name = name;
-  }
-  get attributes() {
-    return Object.keys(this.attribs).map((name) => {
-      var _a2, _b;
-      return {
-        name,
-        value: this.attribs[name],
-        namespace: (_a2 = this["x-attribsNamespace"]) === null || _a2 === void 0 ? void 0 : _a2[name],
-        prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
-      };
-    });
-  }
-};
-function isTag(node2) {
-  return isTag$1(node2);
-}
-function isCDATA(node2) {
-  return node2.type === ElementType.CDATA;
-}
-function isText(node2) {
-  return node2.type === ElementType.Text;
-}
-function isComment(node2) {
-  return node2.type === ElementType.Comment;
-}
-function isDirective(node2) {
-  return node2.type === ElementType.Directive;
-}
-function isDocument(node2) {
-  return node2.type === ElementType.Root;
-}
-function hasChildren(node2) {
-  return Object.prototype.hasOwnProperty.call(node2, "children");
-}
-function cloneNode(node2, recursive = false) {
-  let result2;
-  if (isText(node2)) {
-    result2 = new Text(node2.data);
-  } else if (isComment(node2)) {
-    result2 = new Comment(node2.data);
-  } else if (isTag(node2)) {
-    const children = recursive ? cloneChildren(node2.children) : [];
-    const clone = new Element(node2.name, __spreadValues({}, node2.attribs), children);
-    children.forEach((child) => child.parent = clone);
-    if (node2.namespace != null) {
-      clone.namespace = node2.namespace;
-    }
-    if (node2["x-attribsNamespace"]) {
-      clone["x-attribsNamespace"] = __spreadValues({}, node2["x-attribsNamespace"]);
-    }
-    if (node2["x-attribsPrefix"]) {
-      clone["x-attribsPrefix"] = __spreadValues({}, node2["x-attribsPrefix"]);
-    }
-    result2 = clone;
-  } else if (isCDATA(node2)) {
-    const children = recursive ? cloneChildren(node2.children) : [];
-    const clone = new CDATA(children);
-    children.forEach((child) => child.parent = clone);
-    result2 = clone;
-  } else if (isDocument(node2)) {
-    const children = recursive ? cloneChildren(node2.children) : [];
-    const clone = new Document(children);
-    children.forEach((child) => child.parent = clone);
-    if (node2["x-mode"]) {
-      clone["x-mode"] = node2["x-mode"];
-    }
-    result2 = clone;
-  } else if (isDirective(node2)) {
-    const instruction = new ProcessingInstruction(node2.name, node2.data);
-    if (node2["x-name"] != null) {
-      instruction["x-name"] = node2["x-name"];
-      instruction["x-publicId"] = node2["x-publicId"];
-      instruction["x-systemId"] = node2["x-systemId"];
-    }
-    result2 = instruction;
-  } else {
-    throw new Error(`Not implemented yet: ${node2.type}`);
-  }
-  result2.startIndex = node2.startIndex;
-  result2.endIndex = node2.endIndex;
-  if (node2.sourceCodeLocation != null) {
-    result2.sourceCodeLocation = node2.sourceCodeLocation;
-  }
-  return result2;
-}
-function cloneChildren(childs) {
-  const children = childs.map((child) => cloneNode(child, true));
-  for (let i = 1; i < children.length; i++) {
-    children[i].prev = children[i - 1];
-    children[i - 1].next = children[i];
-  }
-  return children;
-}
-var defaultOpts = {
-  withStartIndices: false,
-  withEndIndices: false,
-  xmlMode: false
-};
-var DomHandler = class {
-  /**
-   * @param callback Called once parsing has completed.
-   * @param options Settings for the handler.
-   * @param elementCB Callback whenever a tag is closed.
-   */
-  constructor(callback, options, elementCB) {
-    this.dom = [];
-    this.root = new Document(this.dom);
-    this.done = false;
-    this.tagStack = [this.root];
-    this.lastNode = null;
-    this.parser = null;
-    if (typeof options === "function") {
-      elementCB = options;
-      options = defaultOpts;
-    }
-    if (typeof callback === "object") {
-      options = callback;
-      callback = void 0;
-    }
-    this.callback = callback !== null && callback !== void 0 ? callback : null;
-    this.options = options !== null && options !== void 0 ? options : defaultOpts;
-    this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
-  }
-  onparserinit(parser2) {
-    this.parser = parser2;
-  }
-  // Resets the handler back to starting state
-  onreset() {
-    this.dom = [];
-    this.root = new Document(this.dom);
-    this.done = false;
-    this.tagStack = [this.root];
-    this.lastNode = null;
-    this.parser = null;
-  }
-  // Signals the handler that parsing is done
-  onend() {
-    if (this.done) return;
-    this.done = true;
-    this.parser = null;
-    this.handleCallback(null);
-  }
-  onerror(error) {
-    this.handleCallback(error);
-  }
-  onclosetag() {
-    this.lastNode = null;
-    const elem = this.tagStack.pop();
-    if (this.options.withEndIndices) {
-      elem.endIndex = this.parser.endIndex;
-    }
-    if (this.elementCB) this.elementCB(elem);
-  }
-  onopentag(name, attribs) {
-    const type = this.options.xmlMode ? ElementType.Tag : void 0;
-    const element = new Element(name, attribs, void 0, type);
-    this.addNode(element);
-    this.tagStack.push(element);
-  }
-  ontext(data) {
-    const {
-      lastNode
-    } = this;
-    if (lastNode && lastNode.type === ElementType.Text) {
-      lastNode.data += data;
-      if (this.options.withEndIndices) {
-        lastNode.endIndex = this.parser.endIndex;
-      }
-    } else {
-      const node2 = new Text(data);
-      this.addNode(node2);
-      this.lastNode = node2;
-    }
-  }
-  oncomment(data) {
-    if (this.lastNode && this.lastNode.type === ElementType.Comment) {
-      this.lastNode.data += data;
-      return;
-    }
-    const node2 = new Comment(data);
-    this.addNode(node2);
-    this.lastNode = node2;
-  }
-  oncommentend() {
-    this.lastNode = null;
-  }
-  oncdatastart() {
-    const text = new Text("");
-    const node2 = new CDATA([text]);
-    this.addNode(node2);
-    text.parent = node2;
-    this.lastNode = text;
-  }
-  oncdataend() {
-    this.lastNode = null;
-  }
-  onprocessinginstruction(name, data) {
-    const node2 = new ProcessingInstruction(name, data);
-    this.addNode(node2);
-  }
-  handleCallback(error) {
-    if (typeof this.callback === "function") {
-      this.callback(error, this.dom);
-    } else if (error) {
-      throw error;
-    }
-  }
-  addNode(node2) {
-    const parent = this.tagStack[this.tagStack.length - 1];
-    const previousSibling = parent.children[parent.children.length - 1];
-    if (this.options.withStartIndices) {
-      node2.startIndex = this.parser.startIndex;
-    }
-    if (this.options.withEndIndices) {
-      node2.endIndex = this.parser.endIndex;
-    }
-    parent.children.push(node2);
-    if (previousSibling) {
-      node2.prev = previousSibling;
-      previousSibling.next = node2;
-    }
-    node2.parent = parent;
-    this.lastNode = null;
-  }
-};
-var htmlDecodeTree = new Uint16Array(
-  // prettier-ignore
-  'ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTǇǋǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉ǲኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻ǲᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤĳạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ﬃɩᾹ\0\0᾽g;耀ﬀig;耀ﬄ;쀀𝔣lig;耀ﬁlig;쀀fjƀaltῙ῜ῡt;晭ig;耀ﬂns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒α‚‰‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସǳ⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗǈⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼ǲ㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((c) => c.charCodeAt(0))
-);
-var xmlDecodeTree = new Uint16Array(
-  // prettier-ignore
-  "Ȁaglq	\x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((c) => c.charCodeAt(0))
-);
-var _a;
-var decodeMap = /* @__PURE__ */ new Map([
-  [0, 65533],
-  // C1 Unicode control character reference replacements
-  [128, 8364],
-  [130, 8218],
-  [131, 402],
-  [132, 8222],
-  [133, 8230],
-  [134, 8224],
-  [135, 8225],
-  [136, 710],
-  [137, 8240],
-  [138, 352],
-  [139, 8249],
-  [140, 338],
-  [142, 381],
-  [145, 8216],
-  [146, 8217],
-  [147, 8220],
-  [148, 8221],
-  [149, 8226],
-  [150, 8211],
-  [151, 8212],
-  [152, 732],
-  [153, 8482],
-  [154, 353],
-  [155, 8250],
-  [156, 339],
-  [158, 382],
-  [159, 376]
-]);
-var fromCodePoint = (
-  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
-  (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
-    let output = "";
-    if (codePoint > 65535) {
-      codePoint -= 65536;
-      output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
-      codePoint = 56320 | codePoint & 1023;
-    }
-    output += String.fromCharCode(codePoint);
-    return output;
-  }
-);
-function replaceCodePoint(codePoint) {
-  var _a2;
-  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
-    return 65533;
-  }
-  return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
-}
-var CharCodes$1;
-(function(CharCodes2) {
-  CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
-  CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
-  CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
-  CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
-  CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
-  CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
-  CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
-  CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
-  CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
-  CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
-  CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
-  CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
-})(CharCodes$1 || (CharCodes$1 = {}));
-var TO_LOWER_BIT = 32;
-var BinTrieFlags;
-(function(BinTrieFlags2) {
-  BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
-  BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
-  BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
-})(BinTrieFlags || (BinTrieFlags = {}));
-function isNumber(code) {
-  return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;
-}
-function isHexadecimalCharacter(code) {
-  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_F || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_F;
-}
-function isAsciiAlphaNumeric(code) {
-  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_Z || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_Z || isNumber(code);
-}
-function isEntityInAttributeInvalidEnd(code) {
-  return code === CharCodes$1.EQUALS || isAsciiAlphaNumeric(code);
-}
-var EntityDecoderState;
-(function(EntityDecoderState2) {
-  EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
-  EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
-  EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
-  EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
-  EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
-})(EntityDecoderState || (EntityDecoderState = {}));
-var DecodingMode;
-(function(DecodingMode2) {
-  DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
-  DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
-  DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
-})(DecodingMode || (DecodingMode = {}));
-var EntityDecoder = class {
-  constructor(decodeTree, emitCodePoint, errors) {
-    this.decodeTree = decodeTree;
-    this.emitCodePoint = emitCodePoint;
-    this.errors = errors;
-    this.state = EntityDecoderState.EntityStart;
-    this.consumed = 1;
-    this.result = 0;
-    this.treeIndex = 0;
-    this.excess = 1;
-    this.decodeMode = DecodingMode.Strict;
-  }
-  /** Resets the instance to make it reusable. */
-  startEntity(decodeMode) {
-    this.decodeMode = decodeMode;
-    this.state = EntityDecoderState.EntityStart;
-    this.result = 0;
-    this.treeIndex = 0;
-    this.excess = 1;
-    this.consumed = 1;
-  }
-  /**
-   * Write an entity to the decoder. This can be called multiple times with partial entities.
-   * If the entity is incomplete, the decoder will return -1.
-   *
-   * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
-   * entity is incomplete, and resume when the next string is written.
-   *
-   * @param string The string containing the entity (or a continuation of the entity).
-   * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
-   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
-   */
-  write(str, offset) {
-    switch (this.state) {
-      case EntityDecoderState.EntityStart: {
-        if (str.charCodeAt(offset) === CharCodes$1.NUM) {
-          this.state = EntityDecoderState.NumericStart;
-          this.consumed += 1;
-          return this.stateNumericStart(str, offset + 1);
-        }
-        this.state = EntityDecoderState.NamedEntity;
-        return this.stateNamedEntity(str, offset);
-      }
-      case EntityDecoderState.NumericStart: {
-        return this.stateNumericStart(str, offset);
-      }
-      case EntityDecoderState.NumericDecimal: {
-        return this.stateNumericDecimal(str, offset);
-      }
-      case EntityDecoderState.NumericHex: {
-        return this.stateNumericHex(str, offset);
-      }
-      case EntityDecoderState.NamedEntity: {
-        return this.stateNamedEntity(str, offset);
-      }
-    }
-  }
-  /**
-   * Switches between the numeric decimal and hexadecimal states.
-   *
-   * Equivalent to the `Numeric character reference state` in the HTML spec.
-   *
-   * @param str The string containing the entity (or a continuation of the entity).
-   * @param offset The current offset.
-   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
-   */
-  stateNumericStart(str, offset) {
-    if (offset >= str.length) {
-      return -1;
-    }
-    if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes$1.LOWER_X) {
-      this.state = EntityDecoderState.NumericHex;
-      this.consumed += 1;
-      return this.stateNumericHex(str, offset + 1);
-    }
-    this.state = EntityDecoderState.NumericDecimal;
-    return this.stateNumericDecimal(str, offset);
-  }
-  addToNumericResult(str, start, end, base) {
-    if (start !== end) {
-      const digitCount = end - start;
-      this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
-      this.consumed += digitCount;
-    }
-  }
-  /**
-   * Parses a hexadecimal numeric entity.
-   *
-   * Equivalent to the `Hexademical character reference state` in the HTML spec.
-   *
-   * @param str The string containing the entity (or a continuation of the entity).
-   * @param offset The current offset.
-   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
-   */
-  stateNumericHex(str, offset) {
-    const startIdx = offset;
-    while (offset < str.length) {
-      const char = str.charCodeAt(offset);
-      if (isNumber(char) || isHexadecimalCharacter(char)) {
-        offset += 1;
-      } else {
-        this.addToNumericResult(str, startIdx, offset, 16);
-        return this.emitNumericEntity(char, 3);
-      }
-    }
-    this.addToNumericResult(str, startIdx, offset, 16);
-    return -1;
-  }
-  /**
-   * Parses a decimal numeric entity.
-   *
-   * Equivalent to the `Decimal character reference state` in the HTML spec.
-   *
-   * @param str The string containing the entity (or a continuation of the entity).
-   * @param offset The current offset.
-   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
-   */
-  stateNumericDecimal(str, offset) {
-    const startIdx = offset;
-    while (offset < str.length) {
-      const char = str.charCodeAt(offset);
-      if (isNumber(char)) {
-        offset += 1;
-      } else {
-        this.addToNumericResult(str, startIdx, offset, 10);
-        return this.emitNumericEntity(char, 2);
-      }
-    }
-    this.addToNumericResult(str, startIdx, offset, 10);
-    return -1;
-  }
-  /**
-   * Validate and emit a numeric entity.
-   *
-   * Implements the logic from the `Hexademical character reference start
-   * state` and `Numeric character reference end state` in the HTML spec.
-   *
-   * @param lastCp The last code point of the entity. Used to see if the
-   *               entity was terminated with a semicolon.
-   * @param expectedLength The minimum number of characters that should be
-   *                       consumed. Used to validate that at least one digit
-   *                       was consumed.
-   * @returns The number of characters that were consumed.
-   */
-  emitNumericEntity(lastCp, expectedLength) {
-    var _a2;
-    if (this.consumed <= expectedLength) {
-      (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
-      return 0;
-    }
-    if (lastCp === CharCodes$1.SEMI) {
-      this.consumed += 1;
-    } else if (this.decodeMode === DecodingMode.Strict) {
-      return 0;
-    }
-    this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
-    if (this.errors) {
-      if (lastCp !== CharCodes$1.SEMI) {
-        this.errors.missingSemicolonAfterCharacterReference();
-      }
-      this.errors.validateNumericCharacterReference(this.result);
-    }
-    return this.consumed;
-  }
-  /**
-   * Parses a named entity.
-   *
-   * Equivalent to the `Named character reference state` in the HTML spec.
-   *
-   * @param str The string containing the entity (or a continuation of the entity).
-   * @param offset The current offset.
-   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
-   */
-  stateNamedEntity(str, offset) {
-    const {
-      decodeTree
-    } = this;
-    let current = decodeTree[this.treeIndex];
-    let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
-    for (; offset < str.length; offset++, this.excess++) {
-      const char = str.charCodeAt(offset);
-      this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
-      if (this.treeIndex < 0) {
-        return this.result === 0 || // If we are parsing an attribute
-        this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
-        (valueLength === 0 || // And there should be no invalid characters.
-        isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
-      }
-      current = decodeTree[this.treeIndex];
-      valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
-      if (valueLength !== 0) {
-        if (char === CharCodes$1.SEMI) {
-          return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
-        }
-        if (this.decodeMode !== DecodingMode.Strict) {
-          this.result = this.treeIndex;
-          this.consumed += this.excess;
-          this.excess = 0;
-        }
-      }
-    }
-    return -1;
-  }
-  /**
-   * Emit a named entity that was not terminated with a semicolon.
-   *
-   * @returns The number of characters consumed.
-   */
-  emitNotTerminatedNamedEntity() {
-    var _a2;
-    const {
-      result: result2,
-      decodeTree
-    } = this;
-    const valueLength = (decodeTree[result2] & BinTrieFlags.VALUE_LENGTH) >> 14;
-    this.emitNamedEntityData(result2, valueLength, this.consumed);
-    (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
-    return this.consumed;
-  }
-  /**
-   * Emit a named entity.
-   *
-   * @param result The index of the entity in the decode tree.
-   * @param valueLength The number of bytes in the entity.
-   * @param consumed The number of characters consumed.
-   *
-   * @returns The number of characters consumed.
-   */
-  emitNamedEntityData(result2, valueLength, consumed) {
-    const {
-      decodeTree
-    } = this;
-    this.emitCodePoint(valueLength === 1 ? decodeTree[result2] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result2 + 1], consumed);
-    if (valueLength === 3) {
-      this.emitCodePoint(decodeTree[result2 + 2], consumed);
-    }
-    return consumed;
-  }
-  /**
-   * Signal to the parser that the end of the input was reached.
-   *
-   * Remaining data will be emitted and relevant errors will be produced.
-   *
-   * @returns The number of characters consumed.
-   */
-  end() {
-    var _a2;
-    switch (this.state) {
-      case EntityDecoderState.NamedEntity: {
-        return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
-      }
-      case EntityDecoderState.NumericDecimal: {
-        return this.emitNumericEntity(0, 2);
-      }
-      case EntityDecoderState.NumericHex: {
-        return this.emitNumericEntity(0, 3);
-      }
-      case EntityDecoderState.NumericStart: {
-        (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
-        return 0;
-      }
-      case EntityDecoderState.EntityStart: {
-        return 0;
-      }
-    }
-  }
-};
-function getDecoder(decodeTree) {
-  let ret = "";
-  const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str));
-  return function decodeWithTrie(str, decodeMode) {
-    let lastIndex = 0;
-    let offset = 0;
-    while ((offset = str.indexOf("&", offset)) >= 0) {
-      ret += str.slice(lastIndex, offset);
-      decoder.startEntity(decodeMode);
-      const len = decoder.write(
-        str,
-        // Skip the "&"
-        offset + 1
-      );
-      if (len < 0) {
-        lastIndex = offset + decoder.end();
-        break;
-      }
-      lastIndex = offset + len;
-      offset = len === 0 ? lastIndex + 1 : lastIndex;
-    }
-    const result2 = ret + str.slice(lastIndex);
-    ret = "";
-    return result2;
-  };
-}
-function determineBranch(decodeTree, current, nodeIdx, char) {
-  const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
-  const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
-  if (branchCount === 0) {
-    return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
-  }
-  if (jumpOffset) {
-    const value = char - jumpOffset;
-    return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
-  }
-  let lo = nodeIdx;
-  let hi = lo + branchCount - 1;
-  while (lo <= hi) {
-    const mid = lo + hi >>> 1;
-    const midVal = decodeTree[mid];
-    if (midVal < char) {
-      lo = mid + 1;
-    } else if (midVal > char) {
-      hi = mid - 1;
-    } else {
-      return decodeTree[mid + branchCount];
-    }
-  }
-  return -1;
-}
-getDecoder(htmlDecodeTree);
-getDecoder(xmlDecodeTree);
-function restoreDiff(arr) {
-  for (let i = 1; i < arr.length; i++) {
-    arr[i][0] += arr[i - 1][0] + 1;
-  }
-  return arr;
-}
-new Map(restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, {
-  v: "&lt;",
-  n: 8402,
-  o: "&nvlt;"
-}], [0, {
-  v: "&equals;",
-  n: 8421,
-  o: "&bne;"
-}], [0, {
-  v: "&gt;",
-  n: 8402,
-  o: "&nvgt;"
-}], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, {
-  n: 106,
-  o: "&fjlig;"
-}], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, {
-  v: "&MediumSpace;",
-  n: 8202,
-  o: "&ThickSpace;"
-}], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, {
-  v: "&rarrw;",
-  n: 824,
-  o: "&nrarrw;"
-}], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, {
-  v: "&part;",
-  n: 824,
-  o: "&npart;"
-}], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, {
-  v: "&ang;",
-  n: 8402,
-  o: "&nang;"
-}], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, {
-  v: "&cap;",
-  n: 65024,
-  o: "&caps;"
-}], [0, {
-  v: "&cup;",
-  n: 65024,
-  o: "&cups;"
-}], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, {
-  v: "&sim;",
-  n: 8402,
-  o: "&nvsim;"
-}], [0, {
-  v: "&backsim;",
-  n: 817,
-  o: "&race;"
-}], [0, {
-  v: "&ac;",
-  n: 819,
-  o: "&acE;"
-}], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, {
-  v: "&eqsim;",
-  n: 824,
-  o: "&nesim;"
-}], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, {
-  v: "&apid;",
-  n: 824,
-  o: "&napid;"
-}], [0, "&backcong;"], [0, {
-  v: "&asympeq;",
-  n: 8402,
-  o: "&nvap;"
-}], [0, {
-  v: "&bump;",
-  n: 824,
-  o: "&nbump;"
-}], [0, {
-  v: "&bumpe;",
-  n: 824,
-  o: "&nbumpe;"
-}], [0, {
-  v: "&doteq;",
-  n: 824,
-  o: "&nedot;"
-}], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, {
-  v: "&Congruent;",
-  n: 8421,
-  o: "&bnequiv;"
-}], [0, "&nequiv;"], [1, {
-  v: "&le;",
-  n: 8402,
-  o: "&nvle;"
-}], [0, {
-  v: "&ge;",
-  n: 8402,
-  o: "&nvge;"
-}], [0, {
-  v: "&lE;",
-  n: 824,
-  o: "&nlE;"
-}], [0, {
-  v: "&gE;",
-  n: 824,
-  o: "&ngE;"
-}], [0, {
-  v: "&lnE;",
-  n: 65024,
-  o: "&lvertneqq;"
-}], [0, {
-  v: "&gnE;",
-  n: 65024,
-  o: "&gvertneqq;"
-}], [0, {
-  v: "&ll;",
-  n: new Map(restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]]))
-}], [0, {
-  v: "&gg;",
-  n: new Map(restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]]))
-}], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, {
-  v: "&scsim;",
-  n: 824,
-  o: "&NotSucceedsTilde;"
-}], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, {
-  v: "&sub;",
-  n: 8402,
-  o: "&NotSubset;"
-}], [0, {
-  v: "&sup;",
-  n: 8402,
-  o: "&NotSuperset;"
-}], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, {
-  v: "&subne;",
-  n: 65024,
-  o: "&varsubsetneq;"
-}], [0, {
-  v: "&supne;",
-  n: 65024,
-  o: "&varsupsetneq;"
-}], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, {
-  v: "&sqsub;",
-  n: 824,
-  o: "&NotSquareSubset;"
-}], [0, {
-  v: "&sqsup;",
-  n: 824,
-  o: "&NotSquareSuperset;"
-}], [0, "&sqsube;"], [0, "&sqsupe;"], [0, {
-  v: "&sqcap;",
-  n: 65024,
-  o: "&sqcaps;"
-}], [0, {
-  v: "&sqcup;",
-  n: 65024,
-  o: "&sqcups;"
-}], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, {
-  v: "&LeftTriangleEqual;",
-  n: 8402,
-  o: "&nvltrie;"
-}], [0, {
-  v: "&RightTriangleEqual;",
-  n: 8402,
-  o: "&nvrtrie;"
-}], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, {
-  v: "&Ll;",
-  n: 824,
-  o: "&nLl;"
-}], [0, {
-  v: "&Gg;",
-  n: 824,
-  o: "&nGg;"
-}], [0, {
-  v: "&leg;",
-  n: 65024,
-  o: "&lesg;"
-}], [0, {
-  v: "&gel;",
-  n: 65024,
-  o: "&gesl;"
-}], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, {
-  v: "&isindot;",
-  n: 824,
-  o: "&notindot;"
-}], [0, "&notinvc;"], [0, "&notinvb;"], [1, {
-  v: "&isinE;",
-  n: 824,
-  o: "&notinE;"
-}], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, {
-  v: "&rarrc;",
-  n: 824,
-  o: "&nrarrc;"
-}], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, {
-  v: "&LeftTriangleBar;",
-  n: 824,
-  o: "&NotLeftTriangleBar;"
-}], [0, {
-  v: "&RightTriangleBar;",
-  n: 824,
-  o: "&NotRightTriangleBar;"
-}], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, {
-  v: "&congdot;",
-  n: 824,
-  o: "&ncongdot;"
-}], [0, "&easter;"], [0, "&apacir;"], [0, {
-  v: "&apE;",
-  n: 824,
-  o: "&napE;"
-}], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, {
-  v: "&leqslant;",
-  n: 824,
-  o: "&nleqslant;"
-}], [0, {
-  v: "&geqslant;",
-  n: 824,
-  o: "&ngeqslant;"
-}], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, {
-  v: "&LessLess;",
-  n: 824,
-  o: "&NotNestedLessLess;"
-}], [0, {
-  v: "&GreaterGreater;",
-  n: 824,
-  o: "&NotNestedGreaterGreater;"
-}], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, {
-  v: "&smte;",
-  n: 65024,
-  o: "&smtes;"
-}], [0, {
-  v: "&late;",
-  n: 65024,
-  o: "&lates;"
-}], [0, "&bumpE;"], [0, {
-  v: "&PrecedesEqual;",
-  n: 824,
-  o: "&NotPrecedesEqual;"
-}], [0, {
-  v: "&sce;",
-  n: 824,
-  o: "&NotSucceedsEqual;"
-}], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, {
-  v: "&subE;",
-  n: 824,
-  o: "&nsubE;"
-}], [0, {
-  v: "&supE;",
-  n: 824,
-  o: "&nsupE;"
-}], [0, "&subsim;"], [0, "&supsim;"], [2, {
-  v: "&subnE;",
-  n: 65024,
-  o: "&varsubsetneqq;"
-}], [0, {
-  v: "&supnE;",
-  n: 65024,
-  o: "&varsupsetneqq;"
-}], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, {
-  v: "&parsl;",
-  n: 8421,
-  o: "&nparsl;"
-}], [44343, {
-  n: new Map(restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]]))
-}], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
-var xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
-var xmlCodeMap = /* @__PURE__ */ new Map([[34, "&quot;"], [38, "&amp;"], [39, "&apos;"], [60, "&lt;"], [62, "&gt;"]]);
-var getCodePoint = (
-  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
-  String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
-    // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-    (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
-  )
-);
-function encodeXML(str) {
-  let ret = "";
-  let lastIdx = 0;
-  let match;
-  while ((match = xmlReplacer.exec(str)) !== null) {
-    const i = match.index;
-    const char = str.charCodeAt(i);
-    const next = xmlCodeMap.get(char);
-    if (next !== void 0) {
-      ret += str.substring(lastIdx, i) + next;
-      lastIdx = i + 1;
-    } else {
-      ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
-      lastIdx = xmlReplacer.lastIndex += Number((char & 64512) === 55296);
-    }
-  }
-  return ret + str.substr(lastIdx);
-}
-function getEscaper(regex, map) {
-  return function escape(data) {
-    let match;
-    let lastIdx = 0;
-    let result2 = "";
-    while (match = regex.exec(data)) {
-      if (lastIdx !== match.index) {
-        result2 += data.substring(lastIdx, match.index);
-      }
-      result2 += map.get(match[0].charCodeAt(0));
-      lastIdx = match.index + 1;
-    }
-    return result2 + data.substring(lastIdx);
-  };
-}
-var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([[34, "&quot;"], [38, "&amp;"], [160, "&nbsp;"]]));
-var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([[38, "&amp;"], [60, "&lt;"], [62, "&gt;"], [160, "&nbsp;"]]));
-var EntityLevel;
-(function(EntityLevel2) {
-  EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
-  EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
-})(EntityLevel || (EntityLevel = {}));
-var EncodingMode;
-(function(EncodingMode2) {
-  EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
-  EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
-  EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
-  EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
-  EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
-})(EncodingMode || (EncodingMode = {}));
-var elementNames = new Map(["altGlyph", "altGlyphDef", "altGlyphItem", "animateColor", "animateMotion", "animateTransform", "clipPath", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "foreignObject", "glyphRef", "linearGradient", "radialGradient", "textPath"].map((val) => [val.toLowerCase(), val]));
-var attributeNames = new Map(["definitionURL", "attributeName", "attributeType", "baseFrequency", "baseProfile", "calcMode", "clipPathUnits", "diffuseConstant", "edgeMode", "filterUnits", "glyphRef", "gradientTransform", "gradientUnits", "kernelMatrix", "kernelUnitLength", "keyPoints", "keySplines", "keyTimes", "lengthAdjust", "limitingConeAngle", "markerHeight", "markerUnits", "markerWidth", "maskContentUnits", "maskUnits", "numOctaves", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "refX", "refY", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "specularConstant", "specularExponent", "spreadMethod", "startOffset", "stdDeviation", "stitchTiles", "surfaceScale", "systemLanguage", "tableValues", "targetX", "targetY", "textLength", "viewBox", "viewTarget", "xChannelSelector", "yChannelSelector", "zoomAndPan"].map((val) => [val.toLowerCase(), val]));
-var unencodedElements = /* @__PURE__ */ new Set(["style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript"]);
-function replaceQuotes(value) {
-  return value.replace(/"/g, "&quot;");
-}
-function formatAttributes(attributes2, opts) {
-  var _a2;
-  if (!attributes2) return;
-  const encode = ((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML : escapeAttribute;
-  return Object.keys(attributes2).map((key) => {
-    var _a3, _b;
-    const value = (_a3 = attributes2[key]) !== null && _a3 !== void 0 ? _a3 : "";
-    if (opts.xmlMode === "foreign") {
-      key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;
-    }
-    if (!opts.emptyAttrs && !opts.xmlMode && value === "") {
-      return key;
-    }
-    return `${key}="${encode(value)}"`;
-  }).join(" ");
-}
-var singleTag = /* @__PURE__ */ new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]);
-function render(node2, options = {}) {
-  const nodes = "length" in node2 ? node2 : [node2];
-  let output = "";
-  for (let i = 0; i < nodes.length; i++) {
-    output += renderNode(nodes[i], options);
-  }
-  return output;
-}
-function renderNode(node2, options) {
-  switch (node2.type) {
-    case Root:
-      return render(node2.children, options);
-    case Doctype:
-    case Directive:
-      return renderDirective(node2);
-    case Comment$1:
-      return renderComment(node2);
-    case CDATA$1:
-      return renderCdata(node2);
-    case Script:
-    case Style:
-    case Tag:
-      return renderTag(node2, options);
-    case Text$1:
-      return renderText(node2, options);
-  }
-}
-var foreignModeIntegrationPoints = /* @__PURE__ */ new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title"]);
-var foreignElements = /* @__PURE__ */ new Set(["svg", "math"]);
-function renderTag(elem, opts) {
-  var _a2;
-  if (opts.xmlMode === "foreign") {
-    elem.name = (_a2 = elementNames.get(elem.name)) !== null && _a2 !== void 0 ? _a2 : elem.name;
-    if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {
-      opts = __spreadProps(__spreadValues({}, opts), {
-        xmlMode: false
-      });
-    }
-  }
-  if (!opts.xmlMode && foreignElements.has(elem.name)) {
-    opts = __spreadProps(__spreadValues({}, opts), {
-      xmlMode: "foreign"
-    });
-  }
-  let tag = `<${elem.name}`;
-  const attribs = formatAttributes(elem.attribs, opts);
-  if (attribs) {
-    tag += ` ${attribs}`;
-  }
-  if (elem.children.length === 0 && (opts.xmlMode ? (
-    // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags
-    opts.selfClosingTags !== false
-  ) : (
-    // User explicitly asked for self-closing tags, even in HTML mode
-    opts.selfClosingTags && singleTag.has(elem.name)
-  ))) {
-    if (!opts.xmlMode) tag += " ";
-    tag += "/>";
-  } else {
-    tag += ">";
-    if (elem.children.length > 0) {
-      tag += render(elem.children, opts);
-    }
-    if (opts.xmlMode || !singleTag.has(elem.name)) {
-      tag += `</${elem.name}>`;
-    }
-  }
-  return tag;
-}
-function renderDirective(elem) {
-  return `<${elem.data}>`;
-}
-function renderText(elem, opts) {
-  var _a2;
-  let data = elem.data || "";
-  if (((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {
-    data = opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML(data) : escapeText(data);
-  }
-  return data;
-}
-function renderCdata(elem) {
-  return `<![CDATA[${elem.children[0].data}]]>`;
-}
-function renderComment(elem) {
-  return `<!--${elem.data}-->`;
-}
-function getOuterHTML(node2, options) {
-  return render(node2, options);
-}
-function getInnerHTML(node2, options) {
-  return hasChildren(node2) ? node2.children.map((node3) => getOuterHTML(node3, options)).join("") : "";
-}
-function getText(node2) {
-  if (Array.isArray(node2)) return node2.map(getText).join("");
-  if (isTag(node2)) return node2.name === "br" ? "\n" : getText(node2.children);
-  if (isCDATA(node2)) return getText(node2.children);
-  if (isText(node2)) return node2.data;
-  return "";
-}
-function textContent(node2) {
-  if (Array.isArray(node2)) return node2.map(textContent).join("");
-  if (hasChildren(node2) && !isComment(node2)) {
-    return textContent(node2.children);
-  }
-  if (isText(node2)) return node2.data;
-  return "";
-}
-function innerText(node2) {
-  if (Array.isArray(node2)) return node2.map(innerText).join("");
-  if (hasChildren(node2) && (node2.type === ElementType.Tag || isCDATA(node2))) {
-    return innerText(node2.children);
-  }
-  if (isText(node2)) return node2.data;
-  return "";
-}
-function getChildren(elem) {
-  return hasChildren(elem) ? elem.children : [];
-}
-function getParent(elem) {
-  return elem.parent || null;
-}
-function getSiblings(elem) {
-  const parent = getParent(elem);
-  if (parent != null) return getChildren(parent);
-  const siblings = [elem];
-  let {
-    prev,
-    next
-  } = elem;
-  while (prev != null) {
-    siblings.unshift(prev);
-    ({
-      prev
-    } = prev);
-  }
-  while (next != null) {
-    siblings.push(next);
-    ({
-      next
-    } = next);
-  }
-  return siblings;
-}
-function getAttributeValue(elem, name) {
-  var _a2;
-  return (_a2 = elem.attribs) === null || _a2 === void 0 ? void 0 : _a2[name];
-}
-function hasAttrib(elem, name) {
-  return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;
-}
-function getName(elem) {
-  return elem.name;
-}
-function nextElementSibling(elem) {
-  let {
-    next
-  } = elem;
-  while (next !== null && !isTag(next)) ({
-    next
-  } = next);
-  return next;
-}
-function prevElementSibling(elem) {
-  let {
-    prev
-  } = elem;
-  while (prev !== null && !isTag(prev)) ({
-    prev
-  } = prev);
-  return prev;
-}
-function removeElement(elem) {
-  if (elem.prev) elem.prev.next = elem.next;
-  if (elem.next) elem.next.prev = elem.prev;
-  if (elem.parent) {
-    const childs = elem.parent.children;
-    const childsIndex = childs.lastIndexOf(elem);
-    if (childsIndex >= 0) {
-      childs.splice(childsIndex, 1);
-    }
-  }
-  elem.next = null;
-  elem.prev = null;
-  elem.parent = null;
-}
-function replaceElement(elem, replacement) {
-  const prev = replacement.prev = elem.prev;
-  if (prev) {
-    prev.next = replacement;
-  }
-  const next = replacement.next = elem.next;
-  if (next) {
-    next.prev = replacement;
-  }
-  const parent = replacement.parent = elem.parent;
-  if (parent) {
-    const childs = parent.children;
-    childs[childs.lastIndexOf(elem)] = replacement;
-    elem.parent = null;
-  }
-}
-function appendChild(parent, child) {
-  removeElement(child);
-  child.next = null;
-  child.parent = parent;
-  if (parent.children.push(child) > 1) {
-    const sibling = parent.children[parent.children.length - 2];
-    sibling.next = child;
-    child.prev = sibling;
-  } else {
-    child.prev = null;
-  }
-}
-function append(elem, next) {
-  removeElement(next);
-  const {
-    parent
-  } = elem;
-  const currNext = elem.next;
-  next.next = currNext;
-  next.prev = elem;
-  elem.next = next;
-  next.parent = parent;
-  if (currNext) {
-    currNext.prev = next;
-    if (parent) {
-      const childs = parent.children;
-      childs.splice(childs.lastIndexOf(currNext), 0, next);
-    }
-  } else if (parent) {
-    parent.children.push(next);
-  }
-}
-function prependChild(parent, child) {
-  removeElement(child);
-  child.parent = parent;
-  child.prev = null;
-  if (parent.children.unshift(child) !== 1) {
-    const sibling = parent.children[1];
-    sibling.prev = child;
-    child.next = sibling;
-  } else {
-    child.next = null;
-  }
-}
-function prepend(elem, prev) {
-  removeElement(prev);
-  const {
-    parent
-  } = elem;
-  if (parent) {
-    const childs = parent.children;
-    childs.splice(childs.indexOf(elem), 0, prev);
-  }
-  if (elem.prev) {
-    elem.prev.next = prev;
-  }
-  prev.parent = parent;
-  prev.prev = elem.prev;
-  prev.next = elem;
-  elem.prev = prev;
-}
-function filter(test, node2, recurse = true, limit = Infinity) {
-  return find(test, Array.isArray(node2) ? node2 : [node2], recurse, limit);
-}
-function find(test, nodes, recurse, limit) {
-  const result2 = [];
-  const nodeStack = [nodes];
-  const indexStack = [0];
-  for (; ; ) {
-    if (indexStack[0] >= nodeStack[0].length) {
-      if (indexStack.length === 1) {
-        return result2;
-      }
-      nodeStack.shift();
-      indexStack.shift();
-      continue;
-    }
-    const elem = nodeStack[0][indexStack[0]++];
-    if (test(elem)) {
-      result2.push(elem);
-      if (--limit <= 0) return result2;
-    }
-    if (recurse && hasChildren(elem) && elem.children.length > 0) {
-      indexStack.unshift(0);
-      nodeStack.unshift(elem.children);
-    }
-  }
-}
-function findOneChild(test, nodes) {
-  return nodes.find(test);
-}
-function findOne(test, nodes, recurse = true) {
-  let elem = null;
-  for (let i = 0; i < nodes.length && !elem; i++) {
-    const node2 = nodes[i];
-    if (!isTag(node2)) {
-      continue;
-    } else if (test(node2)) {
-      elem = node2;
-    } else if (recurse && node2.children.length > 0) {
-      elem = findOne(test, node2.children, true);
-    }
-  }
-  return elem;
-}
-function existsOne(test, nodes) {
-  return nodes.some((checked) => isTag(checked) && (test(checked) || existsOne(test, checked.children)));
-}
-function findAll(test, nodes) {
-  const result2 = [];
-  const nodeStack = [nodes];
-  const indexStack = [0];
-  for (; ; ) {
-    if (indexStack[0] >= nodeStack[0].length) {
-      if (nodeStack.length === 1) {
-        return result2;
-      }
-      nodeStack.shift();
-      indexStack.shift();
-      continue;
-    }
-    const elem = nodeStack[0][indexStack[0]++];
-    if (!isTag(elem)) continue;
-    if (test(elem)) result2.push(elem);
-    if (elem.children.length > 0) {
-      indexStack.unshift(0);
-      nodeStack.unshift(elem.children);
-    }
-  }
-}
-var Checks = {
-  tag_name(name) {
-    if (typeof name === "function") {
-      return (elem) => isTag(elem) && name(elem.name);
-    } else if (name === "*") {
-      return isTag;
-    }
-    return (elem) => isTag(elem) && elem.name === name;
-  },
-  tag_type(type) {
-    if (typeof type === "function") {
-      return (elem) => type(elem.type);
-    }
-    return (elem) => elem.type === type;
-  },
-  tag_contains(data) {
-    if (typeof data === "function") {
-      return (elem) => isText(elem) && data(elem.data);
-    }
-    return (elem) => isText(elem) && elem.data === data;
-  }
-};
-function getAttribCheck(attrib, value) {
-  if (typeof value === "function") {
-    return (elem) => isTag(elem) && value(elem.attribs[attrib]);
-  }
-  return (elem) => isTag(elem) && elem.attribs[attrib] === value;
-}
-function combineFuncs(a, b) {
-  return (elem) => a(elem) || b(elem);
-}
-function compileTest(options) {
-  const funcs = Object.keys(options).map((key) => {
-    const value = options[key];
-    return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);
-  });
-  return funcs.length === 0 ? null : funcs.reduce(combineFuncs);
-}
-function testElement(options, node2) {
-  const test = compileTest(options);
-  return test ? test(node2) : true;
-}
-function getElements(options, nodes, recurse, limit = Infinity) {
-  const test = compileTest(options);
-  return test ? filter(test, nodes, recurse, limit) : [];
-}
-function getElementById(id, nodes, recurse = true) {
-  if (!Array.isArray(nodes)) nodes = [nodes];
-  return findOne(getAttribCheck("id", id), nodes, recurse);
-}
-function getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {
-  return filter(Checks["tag_name"](tagName), nodes, recurse, limit);
-}
-function getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {
-  return filter(Checks["tag_type"](type), nodes, recurse, limit);
-}
-function removeSubsets(nodes) {
-  let idx = nodes.length;
-  while (--idx >= 0) {
-    const node2 = nodes[idx];
-    if (idx > 0 && nodes.lastIndexOf(node2, idx - 1) >= 0) {
-      nodes.splice(idx, 1);
-      continue;
-    }
-    for (let ancestor = node2.parent; ancestor; ancestor = ancestor.parent) {
-      if (nodes.includes(ancestor)) {
-        nodes.splice(idx, 1);
-        break;
-      }
-    }
-  }
-  return nodes;
-}
-var DocumentPosition;
-(function(DocumentPosition2) {
-  DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
-  DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
-  DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
-  DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
-  DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
-})(DocumentPosition || (DocumentPosition = {}));
-function compareDocumentPosition(nodeA, nodeB) {
-  const aParents = [];
-  const bParents = [];
-  if (nodeA === nodeB) {
-    return 0;
-  }
-  let current = hasChildren(nodeA) ? nodeA : nodeA.parent;
-  while (current) {
-    aParents.unshift(current);
-    current = current.parent;
-  }
-  current = hasChildren(nodeB) ? nodeB : nodeB.parent;
-  while (current) {
-    bParents.unshift(current);
-    current = current.parent;
-  }
-  const maxIdx = Math.min(aParents.length, bParents.length);
-  let idx = 0;
-  while (idx < maxIdx && aParents[idx] === bParents[idx]) {
-    idx++;
-  }
-  if (idx === 0) {
-    return DocumentPosition.DISCONNECTED;
-  }
-  const sharedParent = aParents[idx - 1];
-  const siblings = sharedParent.children;
-  const aSibling = aParents[idx];
-  const bSibling = bParents[idx];
-  if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {
-    if (sharedParent === nodeB) {
-      return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;
-    }
-    return DocumentPosition.FOLLOWING;
-  }
-  if (sharedParent === nodeA) {
-    return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;
-  }
-  return DocumentPosition.PRECEDING;
-}
-function uniqueSort(nodes) {
-  nodes = nodes.filter((node2, i, arr) => !arr.includes(node2, i + 1));
-  nodes.sort((a, b) => {
-    const relative2 = compareDocumentPosition(a, b);
-    if (relative2 & DocumentPosition.PRECEDING) {
-      return -1;
-    } else if (relative2 & DocumentPosition.FOLLOWING) {
-      return 1;
-    }
-    return 0;
-  });
-  return nodes;
-}
-function getFeed(doc) {
-  const feedRoot = getOneElement(isValidFeed, doc);
-  return !feedRoot ? null : feedRoot.name === "feed" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);
-}
-function getAtomFeed(feedRoot) {
-  var _a2;
-  const childs = feedRoot.children;
-  const feed = {
-    type: "atom",
-    items: getElementsByTagName("entry", childs).map((item) => {
-      var _a3;
-      const {
-        children
-      } = item;
-      const entry = {
-        media: getMediaElements(children)
-      };
-      addConditionally(entry, "id", "id", children);
-      addConditionally(entry, "title", "title", children);
-      const href2 = (_a3 = getOneElement("link", children)) === null || _a3 === void 0 ? void 0 : _a3.attribs["href"];
-      if (href2) {
-        entry.link = href2;
-      }
-      const description = fetch("summary", children) || fetch("content", children);
-      if (description) {
-        entry.description = description;
-      }
-      const pubDate = fetch("updated", children);
-      if (pubDate) {
-        entry.pubDate = new Date(pubDate);
-      }
-      return entry;
-    })
-  };
-  addConditionally(feed, "id", "id", childs);
-  addConditionally(feed, "title", "title", childs);
-  const href = (_a2 = getOneElement("link", childs)) === null || _a2 === void 0 ? void 0 : _a2.attribs["href"];
-  if (href) {
-    feed.link = href;
-  }
-  addConditionally(feed, "description", "subtitle", childs);
-  const updated = fetch("updated", childs);
-  if (updated) {
-    feed.updated = new Date(updated);
-  }
-  addConditionally(feed, "author", "email", childs, true);
-  return feed;
-}
-function getRssFeed(feedRoot) {
-  var _a2, _b;
-  const childs = (_b = (_a2 = getOneElement("channel", feedRoot.children)) === null || _a2 === void 0 ? void 0 : _a2.children) !== null && _b !== void 0 ? _b : [];
-  const feed = {
-    type: feedRoot.name.substr(0, 3),
-    id: "",
-    items: getElementsByTagName("item", feedRoot.children).map((item) => {
-      const {
-        children
-      } = item;
-      const entry = {
-        media: getMediaElements(children)
-      };
-      addConditionally(entry, "id", "guid", children);
-      addConditionally(entry, "title", "title", children);
-      addConditionally(entry, "link", "link", children);
-      addConditionally(entry, "description", "description", children);
-      const pubDate = fetch("pubDate", children) || fetch("dc:date", children);
-      if (pubDate) entry.pubDate = new Date(pubDate);
-      return entry;
-    })
-  };
-  addConditionally(feed, "title", "title", childs);
-  addConditionally(feed, "link", "link", childs);
-  addConditionally(feed, "description", "description", childs);
-  const updated = fetch("lastBuildDate", childs);
-  if (updated) {
-    feed.updated = new Date(updated);
-  }
-  addConditionally(feed, "author", "managingEditor", childs, true);
-  return feed;
-}
-var MEDIA_KEYS_STRING = ["url", "type", "lang"];
-var MEDIA_KEYS_INT = ["fileSize", "bitrate", "framerate", "samplingrate", "channels", "duration", "height", "width"];
-function getMediaElements(where) {
-  return getElementsByTagName("media:content", where).map((elem) => {
-    const {
-      attribs
-    } = elem;
-    const media = {
-      medium: attribs["medium"],
-      isDefault: !!attribs["isDefault"]
-    };
-    for (const attrib of MEDIA_KEYS_STRING) {
-      if (attribs[attrib]) {
-        media[attrib] = attribs[attrib];
-      }
-    }
-    for (const attrib of MEDIA_KEYS_INT) {
-      if (attribs[attrib]) {
-        media[attrib] = parseInt(attribs[attrib], 10);
-      }
-    }
-    if (attribs["expression"]) {
-      media.expression = attribs["expression"];
-    }
-    return media;
-  });
-}
-function getOneElement(tagName, node2) {
-  return getElementsByTagName(tagName, node2, true, 1)[0];
-}
-function fetch(tagName, where, recurse = false) {
-  return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();
-}
-function addConditionally(obj, prop, tagName, where, recurse = false) {
-  const val = fetch(tagName, where, recurse);
-  if (val) obj[prop] = val;
-}
-function isValidFeed(value) {
-  return value === "rss" || value === "feed" || value === "rdf:RDF";
-}
-var DomUtils = Object.freeze({
-  __proto__: null,
-  get DocumentPosition() {
-    return DocumentPosition;
-  },
-  append,
-  appendChild,
-  compareDocumentPosition,
-  existsOne,
-  filter,
-  find,
-  findAll,
-  findOne,
-  findOneChild,
-  getAttributeValue,
-  getChildren,
-  getElementById,
-  getElements,
-  getElementsByTagName,
-  getElementsByTagType,
-  getFeed,
-  getInnerHTML,
-  getName,
-  getOuterHTML,
-  getParent,
-  getSiblings,
-  getText,
-  hasAttrib,
-  hasChildren,
-  innerText,
-  isCDATA,
-  isComment,
-  isDocument,
-  isTag,
-  isText,
-  nextElementSibling,
-  prepend,
-  prependChild,
-  prevElementSibling,
-  removeElement,
-  removeSubsets,
-  replaceElement,
-  testElement,
-  textContent,
-  uniqueSort
-});
-var boolbase$1;
-var hasRequiredBoolbase;
-function requireBoolbase() {
-  if (hasRequiredBoolbase) return boolbase$1;
-  hasRequiredBoolbase = 1;
-  boolbase$1 = {
-    trueFunc: function trueFunc() {
-      return true;
-    },
-    falseFunc: function falseFunc() {
-      return false;
-    }
-  };
-  return boolbase$1;
-}
-var boolbaseExports = requireBoolbase();
-var boolbase = getDefaultExportFromCjs(boolbaseExports);
-var SelectorType;
-(function(SelectorType2) {
-  SelectorType2["Attribute"] = "attribute";
-  SelectorType2["Pseudo"] = "pseudo";
-  SelectorType2["PseudoElement"] = "pseudo-element";
-  SelectorType2["Tag"] = "tag";
-  SelectorType2["Universal"] = "universal";
-  SelectorType2["Adjacent"] = "adjacent";
-  SelectorType2["Child"] = "child";
-  SelectorType2["Descendant"] = "descendant";
-  SelectorType2["Parent"] = "parent";
-  SelectorType2["Sibling"] = "sibling";
-  SelectorType2["ColumnCombinator"] = "column-combinator";
-})(SelectorType || (SelectorType = {}));
-var AttributeAction;
-(function(AttributeAction2) {
-  AttributeAction2["Any"] = "any";
-  AttributeAction2["Element"] = "element";
-  AttributeAction2["End"] = "end";
-  AttributeAction2["Equals"] = "equals";
-  AttributeAction2["Exists"] = "exists";
-  AttributeAction2["Hyphen"] = "hyphen";
-  AttributeAction2["Not"] = "not";
-  AttributeAction2["Start"] = "start";
-})(AttributeAction || (AttributeAction = {}));
-var reName = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/;
-var reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi;
-var actionTypes = /* @__PURE__ */ new Map([[126, AttributeAction.Element], [94, AttributeAction.Start], [36, AttributeAction.End], [42, AttributeAction.Any], [33, AttributeAction.Not], [124, AttributeAction.Hyphen]]);
-var unpackPseudos = /* @__PURE__ */ new Set(["has", "not", "matches", "is", "where", "host", "host-context"]);
-function isTraversal$1(selector) {
-  switch (selector.type) {
-    case SelectorType.Adjacent:
-    case SelectorType.Child:
-    case SelectorType.Descendant:
-    case SelectorType.Parent:
-    case SelectorType.Sibling:
-    case SelectorType.ColumnCombinator:
-      return true;
-    default:
-      return false;
-  }
-}
-var stripQuotesFromPseudos = /* @__PURE__ */ new Set(["contains", "icontains"]);
-function funescape(_, escaped, escapedWhitespace) {
-  const high = parseInt(escaped, 16) - 65536;
-  return high !== high || escapedWhitespace ? escaped : high < 0 ? (
-    // BMP codepoint
-    String.fromCharCode(high + 65536)
-  ) : (
-    // Supplemental Plane codepoint (surrogate pair)
-    String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320)
-  );
-}
-function unescapeCSS(str) {
-  return str.replace(reEscape, funescape);
-}
-function isQuote(c) {
-  return c === 39 || c === 34;
-}
-function isWhitespace$1(c) {
-  return c === 32 || c === 9 || c === 10 || c === 12 || c === 13;
-}
-function parse$1(selector) {
-  const subselects2 = [];
-  const endIndex = parseSelector(subselects2, `${selector}`, 0);
-  if (endIndex < selector.length) {
-    throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`);
-  }
-  return subselects2;
-}
-function parseSelector(subselects2, selector, selectorIndex) {
-  let tokens = [];
-  function getName2(offset) {
-    const match = selector.slice(selectorIndex + offset).match(reName);
-    if (!match) {
-      throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`);
-    }
-    const [name] = match;
-    selectorIndex += offset + name.length;
-    return unescapeCSS(name);
-  }
-  function stripWhitespace(offset) {
-    selectorIndex += offset;
-    while (selectorIndex < selector.length && isWhitespace$1(selector.charCodeAt(selectorIndex))) {
-      selectorIndex++;
-    }
-  }
-  function readValueWithParenthesis() {
-    selectorIndex += 1;
-    const start = selectorIndex;
-    let counter = 1;
-    for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) {
-      if (selector.charCodeAt(selectorIndex) === 40 && !isEscaped(selectorIndex)) {
-        counter++;
-      } else if (selector.charCodeAt(selectorIndex) === 41 && !isEscaped(selectorIndex)) {
-        counter--;
-      }
-    }
-    if (counter) {
-      throw new Error("Parenthesis not matched");
-    }
-    return unescapeCSS(selector.slice(start, selectorIndex - 1));
-  }
-  function isEscaped(pos) {
-    let slashCount = 0;
-    while (selector.charCodeAt(--pos) === 92) slashCount++;
-    return (slashCount & 1) === 1;
-  }
-  function ensureNotTraversal() {
-    if (tokens.length > 0 && isTraversal$1(tokens[tokens.length - 1])) {
-      throw new Error("Did not expect successive traversals.");
-    }
-  }
-  function addTraversal(type) {
-    if (tokens.length > 0 && tokens[tokens.length - 1].type === SelectorType.Descendant) {
-      tokens[tokens.length - 1].type = type;
-      return;
-    }
-    ensureNotTraversal();
-    tokens.push({
-      type
-    });
-  }
-  function addSpecialAttribute(name, action) {
-    tokens.push({
-      type: SelectorType.Attribute,
-      name,
-      action,
-      value: getName2(1),
-      namespace: null,
-      ignoreCase: "quirks"
-    });
-  }
-  function finalizeSubselector() {
-    if (tokens.length && tokens[tokens.length - 1].type === SelectorType.Descendant) {
-      tokens.pop();
-    }
-    if (tokens.length === 0) {
-      throw new Error("Empty sub-selector");
-    }
-    subselects2.push(tokens);
-  }
-  stripWhitespace(0);
-  if (selector.length === selectorIndex) {
-    return selectorIndex;
-  }
-  loop: while (selectorIndex < selector.length) {
-    const firstChar = selector.charCodeAt(selectorIndex);
-    switch (firstChar) {
-      case 32:
-      case 9:
-      case 10:
-      case 12:
-      case 13: {
-        if (tokens.length === 0 || tokens[0].type !== SelectorType.Descendant) {
-          ensureNotTraversal();
-          tokens.push({
-            type: SelectorType.Descendant
-          });
-        }
-        stripWhitespace(1);
-        break;
-      }
-      case 62: {
-        addTraversal(SelectorType.Child);
-        stripWhitespace(1);
-        break;
-      }
-      case 60: {
-        addTraversal(SelectorType.Parent);
-        stripWhitespace(1);
-        break;
-      }
-      case 126: {
-        addTraversal(SelectorType.Sibling);
-        stripWhitespace(1);
-        break;
-      }
-      case 43: {
-        addTraversal(SelectorType.Adjacent);
-        stripWhitespace(1);
-        break;
-      }
-      case 46: {
-        addSpecialAttribute("class", AttributeAction.Element);
-        break;
-      }
-      case 35: {
-        addSpecialAttribute("id", AttributeAction.Equals);
-        break;
-      }
-      case 91: {
-        stripWhitespace(1);
-        let name;
-        let namespace = null;
-        if (selector.charCodeAt(selectorIndex) === 124) {
-          name = getName2(1);
-        } else if (selector.startsWith("*|", selectorIndex)) {
-          namespace = "*";
-          name = getName2(2);
-        } else {
-          name = getName2(0);
-          if (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 61) {
-            namespace = name;
-            name = getName2(1);
-          }
-        }
-        stripWhitespace(0);
-        let action = AttributeAction.Exists;
-        const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));
-        if (possibleAction) {
-          action = possibleAction;
-          if (selector.charCodeAt(selectorIndex + 1) !== 61) {
-            throw new Error("Expected `=`");
-          }
-          stripWhitespace(2);
-        } else if (selector.charCodeAt(selectorIndex) === 61) {
-          action = AttributeAction.Equals;
-          stripWhitespace(1);
-        }
-        let value = "";
-        let ignoreCase = null;
-        if (action !== "exists") {
-          if (isQuote(selector.charCodeAt(selectorIndex))) {
-            const quote = selector.charCodeAt(selectorIndex);
-            let sectionEnd = selectorIndex + 1;
-            while (sectionEnd < selector.length && (selector.charCodeAt(sectionEnd) !== quote || isEscaped(sectionEnd))) {
-              sectionEnd += 1;
-            }
-            if (selector.charCodeAt(sectionEnd) !== quote) {
-              throw new Error("Attribute value didn't end");
-            }
-            value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));
-            selectorIndex = sectionEnd + 1;
-          } else {
-            const valueStart = selectorIndex;
-            while (selectorIndex < selector.length && (!isWhitespace$1(selector.charCodeAt(selectorIndex)) && selector.charCodeAt(selectorIndex) !== 93 || isEscaped(selectorIndex))) {
-              selectorIndex += 1;
-            }
-            value = unescapeCSS(selector.slice(valueStart, selectorIndex));
-          }
-          stripWhitespace(0);
-          const forceIgnore = selector.charCodeAt(selectorIndex) | 32;
-          if (forceIgnore === 115) {
-            ignoreCase = false;
-            stripWhitespace(1);
-          } else if (forceIgnore === 105) {
-            ignoreCase = true;
-            stripWhitespace(1);
-          }
-        }
-        if (selector.charCodeAt(selectorIndex) !== 93) {
-          throw new Error("Attribute selector didn't terminate");
-        }
-        selectorIndex += 1;
-        const attributeSelector = {
-          type: SelectorType.Attribute,
-          name,
-          action,
-          value,
-          namespace,
-          ignoreCase
-        };
-        tokens.push(attributeSelector);
-        break;
-      }
-      case 58: {
-        if (selector.charCodeAt(selectorIndex + 1) === 58) {
-          tokens.push({
-            type: SelectorType.PseudoElement,
-            name: getName2(2).toLowerCase(),
-            data: selector.charCodeAt(selectorIndex) === 40 ? readValueWithParenthesis() : null
-          });
-          continue;
-        }
-        const name = getName2(1).toLowerCase();
-        let data = null;
-        if (selector.charCodeAt(selectorIndex) === 40) {
-          if (unpackPseudos.has(name)) {
-            if (isQuote(selector.charCodeAt(selectorIndex + 1))) {
-              throw new Error(`Pseudo-selector ${name} cannot be quoted`);
-            }
-            data = [];
-            selectorIndex = parseSelector(data, selector, selectorIndex + 1);
-            if (selector.charCodeAt(selectorIndex) !== 41) {
-              throw new Error(`Missing closing parenthesis in :${name} (${selector})`);
-            }
-            selectorIndex += 1;
-          } else {
-            data = readValueWithParenthesis();
-            if (stripQuotesFromPseudos.has(name)) {
-              const quot = data.charCodeAt(0);
-              if (quot === data.charCodeAt(data.length - 1) && isQuote(quot)) {
-                data = data.slice(1, -1);
-              }
-            }
-            data = unescapeCSS(data);
-          }
-        }
-        tokens.push({
-          type: SelectorType.Pseudo,
-          name,
-          data
-        });
-        break;
-      }
-      case 44: {
-        finalizeSubselector();
-        tokens = [];
-        stripWhitespace(1);
-        break;
-      }
-      default: {
-        if (selector.startsWith("/*", selectorIndex)) {
-          const endIndex = selector.indexOf("*/", selectorIndex + 2);
-          if (endIndex < 0) {
-            throw new Error("Comment was not terminated");
-          }
-          selectorIndex = endIndex + 2;
-          if (tokens.length === 0) {
-            stripWhitespace(0);
-          }
-          break;
-        }
-        let namespace = null;
-        let name;
-        if (firstChar === 42) {
-          selectorIndex += 1;
-          name = "*";
-        } else if (firstChar === 124) {
-          name = "";
-          if (selector.charCodeAt(selectorIndex + 1) === 124) {
-            addTraversal(SelectorType.ColumnCombinator);
-            stripWhitespace(2);
-            break;
-          }
-        } else if (reName.test(selector.slice(selectorIndex))) {
-          name = getName2(0);
-        } else {
-          break loop;
-        }
-        if (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 124) {
-          namespace = name;
-          if (selector.charCodeAt(selectorIndex + 1) === 42) {
-            name = "*";
-            selectorIndex += 2;
-          } else {
-            name = getName2(1);
-          }
-        }
-        tokens.push(name === "*" ? {
-          type: SelectorType.Universal,
-          namespace
-        } : {
-          type: SelectorType.Tag,
-          name,
-          namespace
-        });
-      }
-    }
-  }
-  finalizeSubselector();
-  return selectorIndex;
-}
-var attribValChars = ["\\", '"'];
-var pseudoValChars = [...attribValChars, "(", ")"];
-new Set(attribValChars.map((c) => c.charCodeAt(0)));
-new Set(pseudoValChars.map((c) => c.charCodeAt(0)));
-new Set([...pseudoValChars, "~", "^", "$", "*", "+", "!", "|", ":", "[", "]", " ", "."].map((c) => c.charCodeAt(0)));
-var procedure = /* @__PURE__ */ new Map([[SelectorType.Universal, 50], [SelectorType.Tag, 30], [SelectorType.Attribute, 1], [SelectorType.Pseudo, 0]]);
-function isTraversal(token) {
-  return !procedure.has(token.type);
-}
-var attributes = /* @__PURE__ */ new Map([[AttributeAction.Exists, 10], [AttributeAction.Equals, 8], [AttributeAction.Not, 7], [AttributeAction.Start, 6], [AttributeAction.End, 6], [AttributeAction.Any, 5]]);
-function sortByProcedure(arr) {
-  const procs = arr.map(getProcedure);
-  for (let i = 1; i < arr.length; i++) {
-    const procNew = procs[i];
-    if (procNew < 0) continue;
-    for (let j = i - 1; j >= 0 && procNew < procs[j]; j--) {
-      const token = arr[j + 1];
-      arr[j + 1] = arr[j];
-      arr[j] = token;
-      procs[j + 1] = procs[j];
-      procs[j] = procNew;
-    }
-  }
-}
-function getProcedure(token) {
-  var _a2, _b;
-  let proc = (_a2 = procedure.get(token.type)) !== null && _a2 !== void 0 ? _a2 : -1;
-  if (token.type === SelectorType.Attribute) {
-    proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4;
-    if (token.action === AttributeAction.Equals && token.name === "id") {
-      proc = 9;
-    }
-    if (token.ignoreCase) {
-      proc >>= 1;
-    }
-  } else if (token.type === SelectorType.Pseudo) {
-    if (!token.data) {
-      proc = 3;
-    } else if (token.name === "has" || token.name === "contains") {
-      proc = 0;
-    } else if (Array.isArray(token.data)) {
-      proc = Math.min(...token.data.map((d) => Math.min(...d.map(getProcedure))));
-      if (proc < 0) {
-        proc = 0;
-      }
-    } else {
-      proc = 2;
-    }
-  }
-  return proc;
-}
-var reChars = /[-[\]{}()*+?.,\\^$|#\s]/g;
-function escapeRegex(value) {
-  return value.replace(reChars, "\\$&");
-}
-var caseInsensitiveAttributes = /* @__PURE__ */ new Set(["accept", "accept-charset", "align", "alink", "axis", "bgcolor", "charset", "checked", "clear", "codetype", "color", "compact", "declare", "defer", "dir", "direction", "disabled", "enctype", "face", "frame", "hreflang", "http-equiv", "lang", "language", "link", "media", "method", "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly", "rel", "rev", "rules", "scope", "scrolling", "selected", "shape", "target", "text", "type", "valign", "valuetype", "vlink"]);
-function shouldIgnoreCase(selector, options) {
-  return typeof selector.ignoreCase === "boolean" ? selector.ignoreCase : selector.ignoreCase === "quirks" ? !!options.quirksMode : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);
-}
-var attributeRules = {
-  equals(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name
-    } = data;
-    let {
-      value
-    } = data;
-    if (shouldIgnoreCase(data, options)) {
-      value = value.toLowerCase();
-      return (elem) => {
-        const attr = adapter.getAttributeValue(elem, name);
-        return attr != null && attr.length === value.length && attr.toLowerCase() === value && next(elem);
-      };
-    }
-    return (elem) => adapter.getAttributeValue(elem, name) === value && next(elem);
-  },
-  hyphen(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name
-    } = data;
-    let {
-      value
-    } = data;
-    const len = value.length;
-    if (shouldIgnoreCase(data, options)) {
-      value = value.toLowerCase();
-      return function hyphenIC(elem) {
-        const attr = adapter.getAttributeValue(elem, name);
-        return attr != null && (attr.length === len || attr.charAt(len) === "-") && attr.substr(0, len).toLowerCase() === value && next(elem);
-      };
-    }
-    return function hyphen(elem) {
-      const attr = adapter.getAttributeValue(elem, name);
-      return attr != null && (attr.length === len || attr.charAt(len) === "-") && attr.substr(0, len) === value && next(elem);
-    };
-  },
-  element(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name,
-      value
-    } = data;
-    if (/\s/.test(value)) {
-      return boolbase.falseFunc;
-    }
-    const regex = new RegExp(`(?:^|\\s)${escapeRegex(value)}(?:$|\\s)`, shouldIgnoreCase(data, options) ? "i" : "");
-    return function element(elem) {
-      const attr = adapter.getAttributeValue(elem, name);
-      return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);
-    };
-  },
-  exists(next, {
-    name
-  }, {
-    adapter
-  }) {
-    return (elem) => adapter.hasAttrib(elem, name) && next(elem);
-  },
-  start(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name
-    } = data;
-    let {
-      value
-    } = data;
-    const len = value.length;
-    if (len === 0) {
-      return boolbase.falseFunc;
-    }
-    if (shouldIgnoreCase(data, options)) {
-      value = value.toLowerCase();
-      return (elem) => {
-        const attr = adapter.getAttributeValue(elem, name);
-        return attr != null && attr.length >= len && attr.substr(0, len).toLowerCase() === value && next(elem);
-      };
-    }
-    return (elem) => {
-      var _a2;
-      return !!((_a2 = adapter.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.startsWith(value)) && next(elem);
-    };
-  },
-  end(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name
-    } = data;
-    let {
-      value
-    } = data;
-    const len = -value.length;
-    if (len === 0) {
-      return boolbase.falseFunc;
-    }
-    if (shouldIgnoreCase(data, options)) {
-      value = value.toLowerCase();
-      return (elem) => {
-        var _a2;
-        return ((_a2 = adapter.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.substr(len).toLowerCase()) === value && next(elem);
-      };
-    }
-    return (elem) => {
-      var _a2;
-      return !!((_a2 = adapter.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.endsWith(value)) && next(elem);
-    };
-  },
-  any(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name,
-      value
-    } = data;
-    if (value === "") {
-      return boolbase.falseFunc;
-    }
-    if (shouldIgnoreCase(data, options)) {
-      const regex = new RegExp(escapeRegex(value), "i");
-      return function anyIC(elem) {
-        const attr = adapter.getAttributeValue(elem, name);
-        return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);
-      };
-    }
-    return (elem) => {
-      var _a2;
-      return !!((_a2 = adapter.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.includes(value)) && next(elem);
-    };
-  },
-  not(next, data, options) {
-    const {
-      adapter
-    } = options;
-    const {
-      name
-    } = data;
-    let {
-      value
-    } = data;
-    if (value === "") {
-      return (elem) => !!adapter.getAttributeValue(elem, name) && next(elem);
-    } else if (shouldIgnoreCase(data, options)) {
-      value = value.toLowerCase();
-      return (elem) => {
-        const attr = adapter.getAttributeValue(elem, name);
-        return (attr == null || attr.length !== value.length || attr.toLowerCase() !== value) && next(elem);
-      };
-    }
-    return (elem) => adapter.getAttributeValue(elem, name) !== value && next(elem);
-  }
-};
-var whitespace = /* @__PURE__ */ new Set([9, 10, 12, 13, 32]);
-var ZERO = "0".charCodeAt(0);
-var NINE = "9".charCodeAt(0);
-function parse(formula) {
-  formula = formula.trim().toLowerCase();
-  if (formula === "even") {
-    return [2, 0];
-  } else if (formula === "odd") {
-    return [2, 1];
-  }
-  let idx = 0;
-  let a = 0;
-  let sign = readSign();
-  let number = readNumber();
-  if (idx < formula.length && formula.charAt(idx) === "n") {
-    idx++;
-    a = sign * (number !== null && number !== void 0 ? number : 1);
-    skipWhitespace();
-    if (idx < formula.length) {
-      sign = readSign();
-      skipWhitespace();
-      number = readNumber();
-    } else {
-      sign = number = 0;
-    }
-  }
-  if (number === null || idx < formula.length) {
-    throw new Error(`n-th rule couldn't be parsed ('${formula}')`);
-  }
-  return [a, sign * number];
-  function readSign() {
-    if (formula.charAt(idx) === "-") {
-      idx++;
-      return -1;
-    }
-    if (formula.charAt(idx) === "+") {
-      idx++;
-    }
-    return 1;
-  }
-  function readNumber() {
-    const start = idx;
-    let value = 0;
-    while (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {
-      value = value * 10 + (formula.charCodeAt(idx) - ZERO);
-      idx++;
-    }
-    return idx === start ? null : value;
-  }
-  function skipWhitespace() {
-    while (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) {
-      idx++;
-    }
-  }
-}
-function compile(parsed) {
-  const a = parsed[0];
-  const b = parsed[1] - 1;
-  if (b < 0 && a <= 0) return boolbase.falseFunc;
-  if (a === -1) return (index) => index <= b;
-  if (a === 0) return (index) => index === b;
-  if (a === 1) return b < 0 ? boolbase.trueFunc : (index) => index >= b;
-  const absA = Math.abs(a);
-  const bMod = (b % absA + absA) % absA;
-  return a > 1 ? (index) => index >= b && index % absA === bMod : (index) => index <= b && index % absA === bMod;
-}
-function nthCheck(formula) {
-  return compile(parse(formula));
-}
-function getChildFunc(next, adapter) {
-  return (elem) => {
-    const parent = adapter.getParent(elem);
-    return parent != null && adapter.isTag(parent) && next(elem);
-  };
-}
-var filters = {
-  contains(next, text, {
-    adapter
-  }) {
-    return function contains(elem) {
-      return next(elem) && adapter.getText(elem).includes(text);
-    };
-  },
-  icontains(next, text, {
-    adapter
-  }) {
-    const itext = text.toLowerCase();
-    return function icontains(elem) {
-      return next(elem) && adapter.getText(elem).toLowerCase().includes(itext);
-    };
-  },
-  // Location specific methods
-  "nth-child"(next, rule2, {
-    adapter,
-    equals
-  }) {
-    const func = nthCheck(rule2);
-    if (func === boolbase.falseFunc) return boolbase.falseFunc;
-    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);
-    return function nthChild(elem) {
-      const siblings = adapter.getSiblings(elem);
-      let pos = 0;
-      for (let i = 0; i < siblings.length; i++) {
-        if (equals(elem, siblings[i])) break;
-        if (adapter.isTag(siblings[i])) {
-          pos++;
-        }
-      }
-      return func(pos) && next(elem);
-    };
-  },
-  "nth-last-child"(next, rule2, {
-    adapter,
-    equals
-  }) {
-    const func = nthCheck(rule2);
-    if (func === boolbase.falseFunc) return boolbase.falseFunc;
-    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);
-    return function nthLastChild(elem) {
-      const siblings = adapter.getSiblings(elem);
-      let pos = 0;
-      for (let i = siblings.length - 1; i >= 0; i--) {
-        if (equals(elem, siblings[i])) break;
-        if (adapter.isTag(siblings[i])) {
-          pos++;
-        }
-      }
-      return func(pos) && next(elem);
-    };
-  },
-  "nth-of-type"(next, rule2, {
-    adapter,
-    equals
-  }) {
-    const func = nthCheck(rule2);
-    if (func === boolbase.falseFunc) return boolbase.falseFunc;
-    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);
-    return function nthOfType(elem) {
-      const siblings = adapter.getSiblings(elem);
-      let pos = 0;
-      for (let i = 0; i < siblings.length; i++) {
-        const currentSibling = siblings[i];
-        if (equals(elem, currentSibling)) break;
-        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {
-          pos++;
-        }
-      }
-      return func(pos) && next(elem);
-    };
-  },
-  "nth-last-of-type"(next, rule2, {
-    adapter,
-    equals
-  }) {
-    const func = nthCheck(rule2);
-    if (func === boolbase.falseFunc) return boolbase.falseFunc;
-    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);
-    return function nthLastOfType(elem) {
-      const siblings = adapter.getSiblings(elem);
-      let pos = 0;
-      for (let i = siblings.length - 1; i >= 0; i--) {
-        const currentSibling = siblings[i];
-        if (equals(elem, currentSibling)) break;
-        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {
-          pos++;
-        }
-      }
-      return func(pos) && next(elem);
-    };
-  },
-  // TODO determine the actual root element
-  root(next, _rule, {
-    adapter
-  }) {
-    return (elem) => {
-      const parent = adapter.getParent(elem);
-      return (parent == null || !adapter.isTag(parent)) && next(elem);
-    };
-  },
-  scope(next, rule2, options, context) {
-    const {
-      equals
-    } = options;
-    if (!context || context.length === 0) {
-      return filters["root"](next, rule2, options);
-    }
-    if (context.length === 1) {
-      return (elem) => equals(context[0], elem) && next(elem);
-    }
-    return (elem) => context.includes(elem) && next(elem);
-  },
-  hover: dynamicStatePseudo("isHovered"),
-  visited: dynamicStatePseudo("isVisited"),
-  active: dynamicStatePseudo("isActive")
-};
-function dynamicStatePseudo(name) {
-  return function dynamicPseudo(next, _rule, {
-    adapter
-  }) {
-    const func = adapter[name];
-    if (typeof func !== "function") {
-      return boolbase.falseFunc;
-    }
-    return function active(elem) {
-      return func(elem) && next(elem);
-    };
-  };
-}
-var pseudos = {
-  empty(elem, {
-    adapter
-  }) {
-    return !adapter.getChildren(elem).some((elem2) => (
-      // FIXME: `getText` call is potentially expensive.
-      adapter.isTag(elem2) || adapter.getText(elem2) !== ""
-    ));
-  },
-  "first-child"(elem, {
-    adapter,
-    equals
-  }) {
-    if (adapter.prevElementSibling) {
-      return adapter.prevElementSibling(elem) == null;
-    }
-    const firstChild = adapter.getSiblings(elem).find((elem2) => adapter.isTag(elem2));
-    return firstChild != null && equals(elem, firstChild);
-  },
-  "last-child"(elem, {
-    adapter,
-    equals
-  }) {
-    const siblings = adapter.getSiblings(elem);
-    for (let i = siblings.length - 1; i >= 0; i--) {
-      if (equals(elem, siblings[i])) return true;
-      if (adapter.isTag(siblings[i])) break;
-    }
-    return false;
-  },
-  "first-of-type"(elem, {
-    adapter,
-    equals
-  }) {
-    const siblings = adapter.getSiblings(elem);
-    const elemName = adapter.getName(elem);
-    for (let i = 0; i < siblings.length; i++) {
-      const currentSibling = siblings[i];
-      if (equals(elem, currentSibling)) return true;
-      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {
-        break;
-      }
-    }
-    return false;
-  },
-  "last-of-type"(elem, {
-    adapter,
-    equals
-  }) {
-    const siblings = adapter.getSiblings(elem);
-    const elemName = adapter.getName(elem);
-    for (let i = siblings.length - 1; i >= 0; i--) {
-      const currentSibling = siblings[i];
-      if (equals(elem, currentSibling)) return true;
-      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {
-        break;
-      }
-    }
-    return false;
-  },
-  "only-of-type"(elem, {
-    adapter,
-    equals
-  }) {
-    const elemName = adapter.getName(elem);
-    return adapter.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter.isTag(sibling) || adapter.getName(sibling) !== elemName);
-  },
-  "only-child"(elem, {
-    adapter,
-    equals
-  }) {
-    return adapter.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter.isTag(sibling));
-  }
-};
-function verifyPseudoArgs(func, name, subselect, argIndex) {
-  if (subselect === null) {
-    if (func.length > argIndex) {
-      throw new Error(`Pseudo-class :${name} requires an argument`);
-    }
-  } else if (func.length === argIndex) {
-    throw new Error(`Pseudo-class :${name} doesn't have any arguments`);
-  }
-}
-var aliases = {
-  // Links
-  "any-link": ":is(a, area, link)[href]",
-  link: ":any-link:not(:visited)",
-  // Forms
-  // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements
-  disabled: `:is(
-        :is(button, input, select, textarea, optgroup, option)[disabled],
-        optgroup[disabled] > option,
-        fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)
-    )`,
-  enabled: ":not(:disabled)",
-  checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",
-  required: ":is(input, select, textarea)[required]",
-  optional: ":is(input, select, textarea):not([required])",
-  // JQuery extensions
-  // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness
-  selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",
-  checkbox: "[type=checkbox]",
-  file: "[type=file]",
-  password: "[type=password]",
-  radio: "[type=radio]",
-  reset: "[type=reset]",
-  image: "[type=image]",
-  submit: "[type=submit]",
-  parent: ":not(:empty)",
-  header: ":is(h1, h2, h3, h4, h5, h6)",
-  button: ":is(button, input[type=button])",
-  input: ":is(input, textarea, select, button)",
-  text: "input:is(:not([type!='']), [type=text])"
-};
-var PLACEHOLDER_ELEMENT = {};
-function ensureIsTag(next, adapter) {
-  if (next === boolbase.falseFunc) return boolbase.falseFunc;
-  return (elem) => adapter.isTag(elem) && next(elem);
-}
-function getNextSiblings(elem, adapter) {
-  const siblings = adapter.getSiblings(elem);
-  if (siblings.length <= 1) return [];
-  const elemIndex = siblings.indexOf(elem);
-  if (elemIndex < 0 || elemIndex === siblings.length - 1) return [];
-  return siblings.slice(elemIndex + 1).filter(adapter.isTag);
-}
-function copyOptions(options) {
-  return {
-    xmlMode: !!options.xmlMode,
-    lowerCaseAttributeNames: !!options.lowerCaseAttributeNames,
-    lowerCaseTags: !!options.lowerCaseTags,
-    quirksMode: !!options.quirksMode,
-    cacheResults: !!options.cacheResults,
-    pseudos: options.pseudos,
-    adapter: options.adapter,
-    equals: options.equals
-  };
-}
-var is = (next, token, options, context, compileToken2) => {
-  const func = compileToken2(token, copyOptions(options), context);
-  return func === boolbase.trueFunc ? next : func === boolbase.falseFunc ? boolbase.falseFunc : (elem) => func(elem) && next(elem);
-};
-var subselects = {
-  is,
-  /**
-   * `:matches` and `:where` are aliases for `:is`.
-   */
-  matches: is,
-  where: is,
-  not(next, token, options, context, compileToken2) {
-    const func = compileToken2(token, copyOptions(options), context);
-    return func === boolbase.falseFunc ? next : func === boolbase.trueFunc ? boolbase.falseFunc : (elem) => !func(elem) && next(elem);
-  },
-  has(next, subselect, options, _context, compileToken2) {
-    const {
-      adapter
-    } = options;
-    const opts = copyOptions(options);
-    opts.relativeSelector = true;
-    const context = subselect.some((s) => s.some(isTraversal)) ? (
-      // Used as a placeholder. Will be replaced with the actual element.
-      [PLACEHOLDER_ELEMENT]
-    ) : void 0;
-    const compiled = compileToken2(subselect, opts, context);
-    if (compiled === boolbase.falseFunc) return boolbase.falseFunc;
-    const hasElement = ensureIsTag(compiled, adapter);
-    if (context && compiled !== boolbase.trueFunc) {
-      const {
-        shouldTestNextSiblings = false
-      } = compiled;
-      return (elem) => {
-        if (!next(elem)) return false;
-        context[0] = elem;
-        const childs = adapter.getChildren(elem);
-        const nextElements = shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter)] : childs;
-        return adapter.existsOne(hasElement, nextElements);
-      };
-    }
-    return (elem) => next(elem) && adapter.existsOne(hasElement, adapter.getChildren(elem));
-  }
-};
-function compilePseudoSelector(next, selector, options, context, compileToken2) {
-  var _a2;
-  const {
-    name,
-    data
-  } = selector;
-  if (Array.isArray(data)) {
-    if (!(name in subselects)) {
-      throw new Error(`Unknown pseudo-class :${name}(${data})`);
-    }
-    return subselects[name](next, data, options, context, compileToken2);
-  }
-  const userPseudo = (_a2 = options.pseudos) === null || _a2 === void 0 ? void 0 : _a2[name];
-  const stringPseudo = typeof userPseudo === "string" ? userPseudo : aliases[name];
-  if (typeof stringPseudo === "string") {
-    if (data != null) {
-      throw new Error(`Pseudo ${name} doesn't have any arguments`);
-    }
-    const alias = parse$1(stringPseudo);
-    return subselects["is"](next, alias, options, context, compileToken2);
-  }
-  if (typeof userPseudo === "function") {
-    verifyPseudoArgs(userPseudo, name, data, 1);
-    return (elem) => userPseudo(elem, data) && next(elem);
-  }
-  if (name in filters) {
-    return filters[name](next, data, options, context);
-  }
-  if (name in pseudos) {
-    const pseudo = pseudos[name];
-    verifyPseudoArgs(pseudo, name, data, 2);
-    return (elem) => pseudo(elem, options, data) && next(elem);
-  }
-  throw new Error(`Unknown pseudo-class :${name}`);
-}
-function getElementParent(node2, adapter) {
-  const parent = adapter.getParent(node2);
-  if (parent && adapter.isTag(parent)) {
-    return parent;
-  }
-  return null;
-}
-function compileGeneralSelector(next, selector, options, context, compileToken2) {
-  const {
-    adapter,
-    equals
-  } = options;
-  switch (selector.type) {
-    case SelectorType.PseudoElement: {
-      throw new Error("Pseudo-elements are not supported by css-select");
-    }
-    case SelectorType.ColumnCombinator: {
-      throw new Error("Column combinators are not yet supported by css-select");
-    }
-    case SelectorType.Attribute: {
-      if (selector.namespace != null) {
-        throw new Error("Namespaced attributes are not yet supported by css-select");
-      }
-      if (!options.xmlMode || options.lowerCaseAttributeNames) {
-        selector.name = selector.name.toLowerCase();
-      }
-      return attributeRules[selector.action](next, selector, options);
-    }
-    case SelectorType.Pseudo: {
-      return compilePseudoSelector(next, selector, options, context, compileToken2);
-    }
-    case SelectorType.Tag: {
-      if (selector.namespace != null) {
-        throw new Error("Namespaced tag names are not yet supported by css-select");
-      }
-      let {
-        name
-      } = selector;
-      if (!options.xmlMode || options.lowerCaseTags) {
-        name = name.toLowerCase();
-      }
-      return function tag(elem) {
-        return adapter.getName(elem) === name && next(elem);
-      };
-    }
-    case SelectorType.Descendant: {
-      if (options.cacheResults === false || typeof WeakSet === "undefined") {
-        return function descendant(elem) {
-          let current = elem;
-          while (current = getElementParent(current, adapter)) {
-            if (next(current)) {
-              return true;
-            }
-          }
-          return false;
-        };
-      }
-      const isFalseCache = /* @__PURE__ */ new WeakSet();
-      return function cachedDescendant(elem) {
-        let current = elem;
-        while (current = getElementParent(current, adapter)) {
-          if (!isFalseCache.has(current)) {
-            if (adapter.isTag(current) && next(current)) {
-              return true;
-            }
-            isFalseCache.add(current);
-          }
-        }
-        return false;
-      };
-    }
-    case "_flexibleDescendant": {
-      return function flexibleDescendant(elem) {
-        let current = elem;
-        do {
-          if (next(current)) return true;
-        } while (current = getElementParent(current, adapter));
-        return false;
-      };
-    }
-    case SelectorType.Parent: {
-      return function parent(elem) {
-        return adapter.getChildren(elem).some((elem2) => adapter.isTag(elem2) && next(elem2));
-      };
-    }
-    case SelectorType.Child: {
-      return function child(elem) {
-        const parent = adapter.getParent(elem);
-        return parent != null && adapter.isTag(parent) && next(parent);
-      };
-    }
-    case SelectorType.Sibling: {
-      return function sibling(elem) {
-        const siblings = adapter.getSiblings(elem);
-        for (let i = 0; i < siblings.length; i++) {
-          const currentSibling = siblings[i];
-          if (equals(elem, currentSibling)) break;
-          if (adapter.isTag(currentSibling) && next(currentSibling)) {
-            return true;
-          }
-        }
-        return false;
-      };
-    }
-    case SelectorType.Adjacent: {
-      if (adapter.prevElementSibling) {
-        return function adjacent(elem) {
-          const previous = adapter.prevElementSibling(elem);
-          return previous != null && next(previous);
-        };
-      }
-      return function adjacent(elem) {
-        const siblings = adapter.getSiblings(elem);
-        let lastElement;
-        for (let i = 0; i < siblings.length; i++) {
-          const currentSibling = siblings[i];
-          if (equals(elem, currentSibling)) break;
-          if (adapter.isTag(currentSibling)) {
-            lastElement = currentSibling;
-          }
-        }
-        return !!lastElement && next(lastElement);
-      };
-    }
-    case SelectorType.Universal: {
-      if (selector.namespace != null && selector.namespace !== "*") {
-        throw new Error("Namespaced universal selectors are not yet supported by css-select");
-      }
-      return next;
-    }
-  }
-}
-function compileUnsafe(selector, options, context) {
-  const token = typeof selector === "string" ? parse$1(selector) : selector;
-  return compileToken(token, options, context);
-}
-function includesScopePseudo(t) {
-  return t.type === SelectorType.Pseudo && (t.name === "scope" || Array.isArray(t.data) && t.data.some((data) => data.some(includesScopePseudo)));
-}
-var DESCENDANT_TOKEN = {
-  type: SelectorType.Descendant
-};
-var FLEXIBLE_DESCENDANT_TOKEN = {
-  type: "_flexibleDescendant"
-};
-var SCOPE_TOKEN = {
-  type: SelectorType.Pseudo,
-  name: "scope",
-  data: null
-};
-function absolutize(token, {
-  adapter
-}, context) {
-  const hasContext = !!(context === null || context === void 0 ? void 0 : context.every((e) => {
-    const parent = adapter.isTag(e) && adapter.getParent(e);
-    return e === PLACEHOLDER_ELEMENT || parent && adapter.isTag(parent);
-  }));
-  for (const t of token) {
-    if (t.length > 0 && isTraversal(t[0]) && t[0].type !== SelectorType.Descendant) ;
-    else if (hasContext && !t.some(includesScopePseudo)) {
-      t.unshift(DESCENDANT_TOKEN);
-    } else {
-      continue;
-    }
-    t.unshift(SCOPE_TOKEN);
-  }
-}
-function compileToken(token, options, context) {
-  var _a2;
-  token.forEach(sortByProcedure);
-  context = (_a2 = options.context) !== null && _a2 !== void 0 ? _a2 : context;
-  const isArrayContext = Array.isArray(context);
-  const finalContext = context && (Array.isArray(context) ? context : [context]);
-  if (options.relativeSelector !== false) {
-    absolutize(token, options, finalContext);
-  } else if (token.some((t) => t.length > 0 && isTraversal(t[0]))) {
-    throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");
-  }
-  let shouldTestNextSiblings = false;
-  const query = token.map((rules) => {
-    if (rules.length >= 2) {
-      const [first, second] = rules;
-      if (first.type !== SelectorType.Pseudo || first.name !== "scope") ;
-      else if (isArrayContext && second.type === SelectorType.Descendant) {
-        rules[1] = FLEXIBLE_DESCENDANT_TOKEN;
-      } else if (second.type === SelectorType.Adjacent || second.type === SelectorType.Sibling) {
-        shouldTestNextSiblings = true;
-      }
-    }
-    return compileRules(rules, options, finalContext);
-  }).reduce(reduceRules, boolbase.falseFunc);
-  query.shouldTestNextSiblings = shouldTestNextSiblings;
-  return query;
-}
-function compileRules(rules, options, context) {
-  var _a2;
-  return rules.reduce((previous, rule2) => previous === boolbase.falseFunc ? boolbase.falseFunc : compileGeneralSelector(previous, rule2, options, context, compileToken), (_a2 = options.rootFunc) !== null && _a2 !== void 0 ? _a2 : boolbase.trueFunc);
-}
-function reduceRules(a, b) {
-  if (b === boolbase.falseFunc || a === boolbase.trueFunc) {
-    return a;
-  }
-  if (a === boolbase.falseFunc || b === boolbase.trueFunc) {
-    return b;
-  }
-  return function combine(elem) {
-    return a(elem) || b(elem);
-  };
-}
-var defaultEquals = (a, b) => a === b;
-var defaultOptions = {
-  adapter: DomUtils,
-  equals: defaultEquals
-};
-function convertOptionFormats(options) {
-  var _a2, _b, _c, _d;
-  const opts = options !== null && options !== void 0 ? options : defaultOptions;
-  (_a2 = opts.adapter) !== null && _a2 !== void 0 ? _a2 : opts.adapter = DomUtils;
-  (_b = opts.equals) !== null && _b !== void 0 ? _b : opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals;
-  return opts;
-}
-function getSelectorFunc(searchFunc) {
-  return function select(query, elements, options) {
-    const opts = convertOptionFormats(options);
-    if (typeof query !== "function") {
-      query = compileUnsafe(query, opts, elements);
-    }
-    const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);
-    return searchFunc(query, filteredElements, opts);
-  };
-}
-function prepareContext(elems, adapter, shouldTestNextSiblings = false) {
-  if (shouldTestNextSiblings) {
-    elems = appendNextSiblings(elems, adapter);
-  }
-  return Array.isArray(elems) ? adapter.removeSubsets(elems) : adapter.getChildren(elems);
-}
-function appendNextSiblings(elem, adapter) {
-  const elems = Array.isArray(elem) ? elem.slice(0) : [elem];
-  const elemsLength = elems.length;
-  for (let i = 0; i < elemsLength; i++) {
-    const nextSiblings = getNextSiblings(elems[i], adapter);
-    elems.push(...nextSiblings);
-  }
-  return elems;
-}
-var selectAll = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 ? [] : options.adapter.findAll(query, elems));
-var selectOne = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 ? null : options.adapter.findOne(query, elems));
-var CharCodes;
-(function(CharCodes2) {
-  CharCodes2[CharCodes2["Tab"] = 9] = "Tab";
-  CharCodes2[CharCodes2["NewLine"] = 10] = "NewLine";
-  CharCodes2[CharCodes2["FormFeed"] = 12] = "FormFeed";
-  CharCodes2[CharCodes2["CarriageReturn"] = 13] = "CarriageReturn";
-  CharCodes2[CharCodes2["Space"] = 32] = "Space";
-  CharCodes2[CharCodes2["ExclamationMark"] = 33] = "ExclamationMark";
-  CharCodes2[CharCodes2["Number"] = 35] = "Number";
-  CharCodes2[CharCodes2["Amp"] = 38] = "Amp";
-  CharCodes2[CharCodes2["SingleQuote"] = 39] = "SingleQuote";
-  CharCodes2[CharCodes2["DoubleQuote"] = 34] = "DoubleQuote";
-  CharCodes2[CharCodes2["Dash"] = 45] = "Dash";
-  CharCodes2[CharCodes2["Slash"] = 47] = "Slash";
-  CharCodes2[CharCodes2["Zero"] = 48] = "Zero";
-  CharCodes2[CharCodes2["Nine"] = 57] = "Nine";
-  CharCodes2[CharCodes2["Semi"] = 59] = "Semi";
-  CharCodes2[CharCodes2["Lt"] = 60] = "Lt";
-  CharCodes2[CharCodes2["Eq"] = 61] = "Eq";
-  CharCodes2[CharCodes2["Gt"] = 62] = "Gt";
-  CharCodes2[CharCodes2["Questionmark"] = 63] = "Questionmark";
-  CharCodes2[CharCodes2["UpperA"] = 65] = "UpperA";
-  CharCodes2[CharCodes2["LowerA"] = 97] = "LowerA";
-  CharCodes2[CharCodes2["UpperF"] = 70] = "UpperF";
-  CharCodes2[CharCodes2["LowerF"] = 102] = "LowerF";
-  CharCodes2[CharCodes2["UpperZ"] = 90] = "UpperZ";
-  CharCodes2[CharCodes2["LowerZ"] = 122] = "LowerZ";
-  CharCodes2[CharCodes2["LowerX"] = 120] = "LowerX";
-  CharCodes2[CharCodes2["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
-})(CharCodes || (CharCodes = {}));
-var State;
-(function(State2) {
-  State2[State2["Text"] = 1] = "Text";
-  State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
-  State2[State2["InTagName"] = 3] = "InTagName";
-  State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
-  State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
-  State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
-  State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
-  State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
-  State2[State2["InAttributeName"] = 9] = "InAttributeName";
-  State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
-  State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
-  State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
-  State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
-  State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
-  State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
-  State2[State2["InDeclaration"] = 16] = "InDeclaration";
-  State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
-  State2[State2["BeforeComment"] = 18] = "BeforeComment";
-  State2[State2["CDATASequence"] = 19] = "CDATASequence";
-  State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
-  State2[State2["InCommentLike"] = 21] = "InCommentLike";
-  State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
-  State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
-  State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
-  State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
-  State2[State2["InEntity"] = 26] = "InEntity";
-})(State || (State = {}));
-function isWhitespace(c) {
-  return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
-}
-function isEndOfTagSection(c) {
-  return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
-}
-function isASCIIAlpha(c) {
-  return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
-}
-var QuoteType;
-(function(QuoteType2) {
-  QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
-  QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
-  QuoteType2[QuoteType2["Single"] = 2] = "Single";
-  QuoteType2[QuoteType2["Double"] = 3] = "Double";
-})(QuoteType || (QuoteType = {}));
-var Sequences = {
-  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
-  // CDATA[
-  CdataEnd: new Uint8Array([93, 93, 62]),
-  // ]]>
-  CommentEnd: new Uint8Array([45, 45, 62]),
-  // `-->`
-  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
-  // `</script`
-  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
-  // `</style`
-  TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
-  // `</title`
-  TextareaEnd: new Uint8Array([60, 47, 116, 101, 120, 116, 97, 114, 101, 97])
-  // `</textarea`
-};
-var Tokenizer = class {
-  constructor({
-    xmlMode = false,
-    decodeEntities = true
-  }, cbs) {
-    this.cbs = cbs;
-    this.state = State.Text;
-    this.buffer = "";
-    this.sectionStart = 0;
-    this.index = 0;
-    this.entityStart = 0;
-    this.baseState = State.Text;
-    this.isSpecial = false;
-    this.running = true;
-    this.offset = 0;
-    this.currentSequence = void 0;
-    this.sequenceIndex = 0;
-    this.xmlMode = xmlMode;
-    this.decodeEntities = decodeEntities;
-    this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp2, consumed) => this.emitCodePoint(cp2, consumed));
-  }
-  reset() {
-    this.state = State.Text;
-    this.buffer = "";
-    this.sectionStart = 0;
-    this.index = 0;
-    this.baseState = State.Text;
-    this.currentSequence = void 0;
-    this.running = true;
-    this.offset = 0;
-  }
-  write(chunk) {
-    this.offset += this.buffer.length;
-    this.buffer = chunk;
-    this.parse();
-  }
-  end() {
-    if (this.running) this.finish();
-  }
-  pause() {
-    this.running = false;
-  }
-  resume() {
-    this.running = true;
-    if (this.index < this.buffer.length + this.offset) {
-      this.parse();
-    }
-  }
-  stateText(c) {
-    if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) {
-      if (this.index > this.sectionStart) {
-        this.cbs.ontext(this.sectionStart, this.index);
-      }
-      this.state = State.BeforeTagName;
-      this.sectionStart = this.index;
-    } else if (this.decodeEntities && c === CharCodes.Amp) {
-      this.startEntity();
-    }
-  }
-  stateSpecialStartSequence(c) {
-    const isEnd = this.sequenceIndex === this.currentSequence.length;
-    const isMatch = isEnd ? (
-      // If we are at the end of the sequence, make sure the tag name has ended
-      isEndOfTagSection(c)
-    ) : (
-      // Otherwise, do a case-insensitive comparison
-      (c | 32) === this.currentSequence[this.sequenceIndex]
-    );
-    if (!isMatch) {
-      this.isSpecial = false;
-    } else if (!isEnd) {
-      this.sequenceIndex++;
-      return;
-    }
-    this.sequenceIndex = 0;
-    this.state = State.InTagName;
-    this.stateInTagName(c);
-  }
-  /** Look for an end tag. For <title> tags, also decode entities. */
-  stateInSpecialTag(c) {
-    if (this.sequenceIndex === this.currentSequence.length) {
-      if (c === CharCodes.Gt || isWhitespace(c)) {
-        const endOfText = this.index - this.currentSequence.length;
-        if (this.sectionStart < endOfText) {
-          const actualIndex = this.index;
-          this.index = endOfText;
-          this.cbs.ontext(this.sectionStart, endOfText);
-          this.index = actualIndex;
-        }
-        this.isSpecial = false;
-        this.sectionStart = endOfText + 2;
-        this.stateInClosingTagName(c);
-        return;
-      }
-      this.sequenceIndex = 0;
-    }
-    if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
-      this.sequenceIndex += 1;
-    } else if (this.sequenceIndex === 0) {
-      if (this.currentSequence === Sequences.TitleEnd) {
-        if (this.decodeEntities && c === CharCodes.Amp) {
-          this.startEntity();
-        }
-      } else if (this.fastForwardTo(CharCodes.Lt)) {
-        this.sequenceIndex = 1;
-      }
-    } else {
-      this.sequenceIndex = Number(c === CharCodes.Lt);
-    }
-  }
-  stateCDATASequence(c) {
-    if (c === Sequences.Cdata[this.sequenceIndex]) {
-      if (++this.sequenceIndex === Sequences.Cdata.length) {
-        this.state = State.InCommentLike;
-        this.currentSequence = Sequences.CdataEnd;
-        this.sequenceIndex = 0;
-        this.sectionStart = this.index + 1;
-      }
-    } else {
-      this.sequenceIndex = 0;
-      this.state = State.InDeclaration;
-      this.stateInDeclaration(c);
-    }
-  }
-  /**
-   * When we wait for one specific character, we can speed things up
-   * by skipping through the buffer until we find it.
-   *
-   * @returns Whether the character was found.
-   */
-  fastForwardTo(c) {
-    while (++this.index < this.buffer.length + this.offset) {
-      if (this.buffer.charCodeAt(this.index - this.offset) === c) {
-        return true;
-      }
-    }
-    this.index = this.buffer.length + this.offset - 1;
-    return false;
-  }
-  /**
-   * Comments and CDATA end with `-->` and `]]>`.
-   *
-   * Their common qualities are:
-   * - Their end sequences have a distinct character they start with.
-   * - That character is then repeated, so we have to check multiple repeats.
-   * - All characters but the start character of the sequence can be skipped.
-   */
-  stateInCommentLike(c) {
-    if (c === this.currentSequence[this.sequenceIndex]) {
-      if (++this.sequenceIndex === this.currentSequence.length) {
-        if (this.currentSequence === Sequences.CdataEnd) {
-          this.cbs.oncdata(this.sectionStart, this.index, 2);
-        } else {
-          this.cbs.oncomment(this.sectionStart, this.index, 2);
-        }
-        this.sequenceIndex = 0;
-        this.sectionStart = this.index + 1;
-        this.state = State.Text;
-      }
-    } else if (this.sequenceIndex === 0) {
-      if (this.fastForwardTo(this.currentSequence[0])) {
-        this.sequenceIndex = 1;
-      }
-    } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
-      this.sequenceIndex = 0;
-    }
-  }
-  /**
-   * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
-   *
-   * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
-   * We allow anything that wouldn't end the tag.
-   */
-  isTagStartChar(c) {
-    return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
-  }
-  startSpecial(sequence, offset) {
-    this.isSpecial = true;
-    this.currentSequence = sequence;
-    this.sequenceIndex = offset;
-    this.state = State.SpecialStartSequence;
-  }
-  stateBeforeTagName(c) {
-    if (c === CharCodes.ExclamationMark) {
-      this.state = State.BeforeDeclaration;
-      this.sectionStart = this.index + 1;
-    } else if (c === CharCodes.Questionmark) {
-      this.state = State.InProcessingInstruction;
-      this.sectionStart = this.index + 1;
-    } else if (this.isTagStartChar(c)) {
-      const lower = c | 32;
-      this.sectionStart = this.index;
-      if (this.xmlMode) {
-        this.state = State.InTagName;
-      } else if (lower === Sequences.ScriptEnd[2]) {
-        this.state = State.BeforeSpecialS;
-      } else if (lower === Sequences.TitleEnd[2]) {
-        this.state = State.BeforeSpecialT;
-      } else {
-        this.state = State.InTagName;
-      }
-    } else if (c === CharCodes.Slash) {
-      this.state = State.BeforeClosingTagName;
-    } else {
-      this.state = State.Text;
-      this.stateText(c);
-    }
-  }
-  stateInTagName(c) {
-    if (isEndOfTagSection(c)) {
-      this.cbs.onopentagname(this.sectionStart, this.index);
-      this.sectionStart = -1;
-      this.state = State.BeforeAttributeName;
-      this.stateBeforeAttributeName(c);
-    }
-  }
-  stateBeforeClosingTagName(c) {
-    if (isWhitespace(c)) ;
-    else if (c === CharCodes.Gt) {
-      this.state = State.Text;
-    } else {
-      this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
-      this.sectionStart = this.index;
-    }
-  }
-  stateInClosingTagName(c) {
-    if (c === CharCodes.Gt || isWhitespace(c)) {
-      this.cbs.onclosetag(this.sectionStart, this.index);
-      this.sectionStart = -1;
-      this.state = State.AfterClosingTagName;
-      this.stateAfterClosingTagName(c);
-    }
-  }
-  stateAfterClosingTagName(c) {
-    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
-      this.state = State.Text;
-      this.sectionStart = this.index + 1;
-    }
-  }
-  stateBeforeAttributeName(c) {
-    if (c === CharCodes.Gt) {
-      this.cbs.onopentagend(this.index);
-      if (this.isSpecial) {
-        this.state = State.InSpecialTag;
-        this.sequenceIndex = 0;
-      } else {
-        this.state = State.Text;
-      }
-      this.sectionStart = this.index + 1;
-    } else if (c === CharCodes.Slash) {
-      this.state = State.InSelfClosingTag;
-    } else if (!isWhitespace(c)) {
-      this.state = State.InAttributeName;
-      this.sectionStart = this.index;
-    }
-  }
-  stateInSelfClosingTag(c) {
-    if (c === CharCodes.Gt) {
-      this.cbs.onselfclosingtag(this.index);
-      this.state = State.Text;
-      this.sectionStart = this.index + 1;
-      this.isSpecial = false;
-    } else if (!isWhitespace(c)) {
-      this.state = State.BeforeAttributeName;
-      this.stateBeforeAttributeName(c);
-    }
-  }
-  stateInAttributeName(c) {
-    if (c === CharCodes.Eq || isEndOfTagSection(c)) {
-      this.cbs.onattribname(this.sectionStart, this.index);
-      this.sectionStart = this.index;
-      this.state = State.AfterAttributeName;
-      this.stateAfterAttributeName(c);
-    }
-  }
-  stateAfterAttributeName(c) {
-    if (c === CharCodes.Eq) {
-      this.state = State.BeforeAttributeValue;
-    } else if (c === CharCodes.Slash || c === CharCodes.Gt) {
-      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
-      this.sectionStart = -1;
-      this.state = State.BeforeAttributeName;
-      this.stateBeforeAttributeName(c);
-    } else if (!isWhitespace(c)) {
-      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
-      this.state = State.InAttributeName;
-      this.sectionStart = this.index;
-    }
-  }
-  stateBeforeAttributeValue(c) {
-    if (c === CharCodes.DoubleQuote) {
-      this.state = State.InAttributeValueDq;
-      this.sectionStart = this.index + 1;
-    } else if (c === CharCodes.SingleQuote) {
-      this.state = State.InAttributeValueSq;
-      this.sectionStart = this.index + 1;
-    } else if (!isWhitespace(c)) {
-      this.sectionStart = this.index;
-      this.state = State.InAttributeValueNq;
-      this.stateInAttributeValueNoQuotes(c);
-    }
-  }
-  handleInAttributeValue(c, quote) {
-    if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
-      this.cbs.onattribdata(this.sectionStart, this.index);
-      this.sectionStart = -1;
-      this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
-      this.state = State.BeforeAttributeName;
-    } else if (this.decodeEntities && c === CharCodes.Amp) {
-      this.startEntity();
-    }
-  }
-  stateInAttributeValueDoubleQuotes(c) {
-    this.handleInAttributeValue(c, CharCodes.DoubleQuote);
-  }
-  stateInAttributeValueSingleQuotes(c) {
-    this.handleInAttributeValue(c, CharCodes.SingleQuote);
-  }
-  stateInAttributeValueNoQuotes(c) {
-    if (isWhitespace(c) || c === CharCodes.Gt) {
-      this.cbs.onattribdata(this.sectionStart, this.index);
-      this.sectionStart = -1;
-      this.cbs.onattribend(QuoteType.Unquoted, this.index);
-      this.state = State.BeforeAttributeName;
-      this.stateBeforeAttributeName(c);
-    } else if (this.decodeEntities && c === CharCodes.Amp) {
-      this.startEntity();
-    }
-  }
-  stateBeforeDeclaration(c) {
-    if (c === CharCodes.OpeningSquareBracket) {
-      this.state = State.CDATASequence;
-      this.sequenceIndex = 0;
-    } else {
-      this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
-    }
-  }
-  stateInDeclaration(c) {
-    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
-      this.cbs.ondeclaration(this.sectionStart, this.index);
-      this.state = State.Text;
-      this.sectionStart = this.index + 1;
-    }
-  }
-  stateInProcessingInstruction(c) {
-    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
-      this.cbs.onprocessinginstruction(this.sectionStart, this.index);
-      this.state = State.Text;
-      this.sectionStart = this.index + 1;
-    }
-  }
-  stateBeforeComment(c) {
-    if (c === CharCodes.Dash) {
-      this.state = State.InCommentLike;
-      this.currentSequence = Sequences.CommentEnd;
-      this.sequenceIndex = 2;
-      this.sectionStart = this.index + 1;
-    } else {
-      this.state = State.InDeclaration;
-    }
-  }
-  stateInSpecialComment(c) {
-    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
-      this.cbs.oncomment(this.sectionStart, this.index, 0);
-      this.state = State.Text;
-      this.sectionStart = this.index + 1;
-    }
-  }
-  stateBeforeSpecialS(c) {
-    const lower = c | 32;
-    if (lower === Sequences.ScriptEnd[3]) {
-      this.startSpecial(Sequences.ScriptEnd, 4);
-    } else if (lower === Sequences.StyleEnd[3]) {
-      this.startSpecial(Sequences.StyleEnd, 4);
-    } else {
-      this.state = State.InTagName;
-      this.stateInTagName(c);
-    }
-  }
-  stateBeforeSpecialT(c) {
-    const lower = c | 32;
-    if (lower === Sequences.TitleEnd[3]) {
-      this.startSpecial(Sequences.TitleEnd, 4);
-    } else if (lower === Sequences.TextareaEnd[3]) {
-      this.startSpecial(Sequences.TextareaEnd, 4);
-    } else {
-      this.state = State.InTagName;
-      this.stateInTagName(c);
-    }
-  }
-  startEntity() {
-    this.baseState = this.state;
-    this.state = State.InEntity;
-    this.entityStart = this.index;
-    this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
-  }
-  stateInEntity() {
-    const length = this.entityDecoder.write(this.buffer, this.index - this.offset);
-    if (length >= 0) {
-      this.state = this.baseState;
-      if (length === 0) {
-        this.index = this.entityStart;
-      }
-    } else {
-      this.index = this.offset + this.buffer.length - 1;
-    }
-  }
-  /**
-   * Remove data that has already been consumed from the buffer.
-   */
-  cleanup() {
-    if (this.running && this.sectionStart !== this.index) {
-      if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
-        this.cbs.ontext(this.sectionStart, this.index);
-        this.sectionStart = this.index;
-      } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
-        this.cbs.onattribdata(this.sectionStart, this.index);
-        this.sectionStart = this.index;
-      }
-    }
-  }
-  shouldContinue() {
-    return this.index < this.buffer.length + this.offset && this.running;
-  }
-  /**
-   * Iterates through the buffer, calling the function corresponding to the current state.
-   *
-   * States that are more likely to be hit are higher up, as a performance improvement.
-   */
-  parse() {
-    while (this.shouldContinue()) {
-      const c = this.buffer.charCodeAt(this.index - this.offset);
-      switch (this.state) {
-        case State.Text: {
-          this.stateText(c);
-          break;
-        }
-        case State.SpecialStartSequence: {
-          this.stateSpecialStartSequence(c);
-          break;
-        }
-        case State.InSpecialTag: {
-          this.stateInSpecialTag(c);
-          break;
-        }
-        case State.CDATASequence: {
-          this.stateCDATASequence(c);
-          break;
-        }
-        case State.InAttributeValueDq: {
-          this.stateInAttributeValueDoubleQuotes(c);
-          break;
-        }
-        case State.InAttributeName: {
-          this.stateInAttributeName(c);
-          break;
-        }
-        case State.InCommentLike: {
-          this.stateInCommentLike(c);
-          break;
-        }
-        case State.InSpecialComment: {
-          this.stateInSpecialComment(c);
-          break;
-        }
-        case State.BeforeAttributeName: {
-          this.stateBeforeAttributeName(c);
-          break;
-        }
-        case State.InTagName: {
-          this.stateInTagName(c);
-          break;
-        }
-        case State.InClosingTagName: {
-          this.stateInClosingTagName(c);
-          break;
-        }
-        case State.BeforeTagName: {
-          this.stateBeforeTagName(c);
-          break;
-        }
-        case State.AfterAttributeName: {
-          this.stateAfterAttributeName(c);
-          break;
-        }
-        case State.InAttributeValueSq: {
-          this.stateInAttributeValueSingleQuotes(c);
-          break;
-        }
-        case State.BeforeAttributeValue: {
-          this.stateBeforeAttributeValue(c);
-          break;
-        }
-        case State.BeforeClosingTagName: {
-          this.stateBeforeClosingTagName(c);
-          break;
-        }
-        case State.AfterClosingTagName: {
-          this.stateAfterClosingTagName(c);
-          break;
-        }
-        case State.BeforeSpecialS: {
-          this.stateBeforeSpecialS(c);
-          break;
-        }
-        case State.BeforeSpecialT: {
-          this.stateBeforeSpecialT(c);
-          break;
-        }
-        case State.InAttributeValueNq: {
-          this.stateInAttributeValueNoQuotes(c);
-          break;
-        }
-        case State.InSelfClosingTag: {
-          this.stateInSelfClosingTag(c);
-          break;
-        }
-        case State.InDeclaration: {
-          this.stateInDeclaration(c);
-          break;
-        }
-        case State.BeforeDeclaration: {
-          this.stateBeforeDeclaration(c);
-          break;
-        }
-        case State.BeforeComment: {
-          this.stateBeforeComment(c);
-          break;
-        }
-        case State.InProcessingInstruction: {
-          this.stateInProcessingInstruction(c);
-          break;
-        }
-        case State.InEntity: {
-          this.stateInEntity();
-          break;
-        }
-      }
-      this.index++;
-    }
-    this.cleanup();
-  }
-  finish() {
-    if (this.state === State.InEntity) {
-      this.entityDecoder.end();
-      this.state = this.baseState;
-    }
-    this.handleTrailingData();
-    this.cbs.onend();
-  }
-  /** Handle any trailing data. */
-  handleTrailingData() {
-    const endIndex = this.buffer.length + this.offset;
-    if (this.sectionStart >= endIndex) {
-      return;
-    }
-    if (this.state === State.InCommentLike) {
-      if (this.currentSequence === Sequences.CdataEnd) {
-        this.cbs.oncdata(this.sectionStart, endIndex, 0);
-      } else {
-        this.cbs.oncomment(this.sectionStart, endIndex, 0);
-      }
-    } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) ;
-    else {
-      this.cbs.ontext(this.sectionStart, endIndex);
-    }
-  }
-  emitCodePoint(cp2, consumed) {
-    if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
-      if (this.sectionStart < this.entityStart) {
-        this.cbs.onattribdata(this.sectionStart, this.entityStart);
-      }
-      this.sectionStart = this.entityStart + consumed;
-      this.index = this.sectionStart - 1;
-      this.cbs.onattribentity(cp2);
-    } else {
-      if (this.sectionStart < this.entityStart) {
-        this.cbs.ontext(this.sectionStart, this.entityStart);
-      }
-      this.sectionStart = this.entityStart + consumed;
-      this.index = this.sectionStart - 1;
-      this.cbs.ontextentity(cp2, this.sectionStart);
-    }
-  }
-};
-var formTags = /* @__PURE__ */ new Set(["input", "option", "optgroup", "select", "button", "datalist", "textarea"]);
-var pTag = /* @__PURE__ */ new Set(["p"]);
-var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
-var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
-var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
-var openImpliesClose = /* @__PURE__ */ new Map([["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])], ["th", /* @__PURE__ */ new Set(["th"])], ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])], ["body", /* @__PURE__ */ new Set(["head", "link", "script"])], ["li", /* @__PURE__ */ new Set(["li"])], ["p", pTag], ["h1", pTag], ["h2", pTag], ["h3", pTag], ["h4", pTag], ["h5", pTag], ["h6", pTag], ["select", formTags], ["input", formTags], ["output", formTags], ["button", formTags], ["datalist", formTags], ["textarea", formTags], ["option", /* @__PURE__ */ new Set(["option"])], ["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])], ["dd", ddtTags], ["dt", ddtTags], ["address", pTag], ["article", pTag], ["aside", pTag], ["blockquote", pTag], ["details", pTag], ["div", pTag], ["dl", pTag], ["fieldset", pTag], ["figcaption", pTag], ["figure", pTag], ["footer", pTag], ["form", pTag], ["header", pTag], ["hr", pTag], ["main", pTag], ["nav", pTag], ["ol", pTag], ["pre", pTag], ["section", pTag], ["table", pTag], ["ul", pTag], ["rt", rtpTags], ["rp", rtpTags], ["tbody", tableSectionTags], ["tfoot", tableSectionTags]]);
-var voidElements = /* @__PURE__ */ new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]);
-var foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
-var htmlIntegrationElements = /* @__PURE__ */ new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignobject", "desc", "title"]);
-var reNameEnd = /\s|\//;
-var Parser = class {
-  constructor(cbs, options = {}) {
-    var _a2, _b, _c, _d, _e, _f;
-    this.options = options;
-    this.startIndex = 0;
-    this.endIndex = 0;
-    this.openTagStart = 0;
-    this.tagname = "";
-    this.attribname = "";
-    this.attribvalue = "";
-    this.attribs = null;
-    this.stack = [];
-    this.buffers = [];
-    this.bufferOffset = 0;
-    this.writeIndex = 0;
-    this.ended = false;
-    this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
-    this.htmlMode = !this.options.xmlMode;
-    this.lowerCaseTagNames = (_a2 = options.lowerCaseTags) !== null && _a2 !== void 0 ? _a2 : this.htmlMode;
-    this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
-    this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
-    this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
-    this.foreignContext = [!this.htmlMode];
-    (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
-  }
-  // Tokenizer event handlers
-  /** @internal */
-  ontext(start, endIndex) {
-    var _a2, _b;
-    const data = this.getSlice(start, endIndex);
-    this.endIndex = endIndex - 1;
-    (_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, data);
-    this.startIndex = endIndex;
-  }
-  /** @internal */
-  ontextentity(cp2, endIndex) {
-    var _a2, _b;
-    this.endIndex = endIndex - 1;
-    (_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, fromCodePoint(cp2));
-    this.startIndex = endIndex;
-  }
-  /**
-   * Checks if the current tag is a void element. Override this if you want
-   * to specify your own additional void elements.
-   */
-  isVoidElement(name) {
-    return this.htmlMode && voidElements.has(name);
-  }
-  /** @internal */
-  onopentagname(start, endIndex) {
-    this.endIndex = endIndex;
-    let name = this.getSlice(start, endIndex);
-    if (this.lowerCaseTagNames) {
-      name = name.toLowerCase();
-    }
-    this.emitOpenTag(name);
-  }
-  emitOpenTag(name) {
-    var _a2, _b, _c, _d;
-    this.openTagStart = this.startIndex;
-    this.tagname = name;
-    const impliesClose = this.htmlMode && openImpliesClose.get(name);
-    if (impliesClose) {
-      while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
-        const element = this.stack.shift();
-        (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, true);
-      }
-    }
-    if (!this.isVoidElement(name)) {
-      this.stack.unshift(name);
-      if (this.htmlMode) {
-        if (foreignContextElements.has(name)) {
-          this.foreignContext.unshift(true);
-        } else if (htmlIntegrationElements.has(name)) {
-          this.foreignContext.unshift(false);
-        }
-      }
-    }
-    (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
-    if (this.cbs.onopentag) this.attribs = {};
-  }
-  endOpenTag(isImplied) {
-    var _a2, _b;
-    this.startIndex = this.openTagStart;
-    if (this.attribs) {
-      (_b = (_a2 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a2, this.tagname, this.attribs, isImplied);
-      this.attribs = null;
-    }
-    if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
-      this.cbs.onclosetag(this.tagname, true);
-    }
-    this.tagname = "";
-  }
-  /** @internal */
-  onopentagend(endIndex) {
-    this.endIndex = endIndex;
-    this.endOpenTag(false);
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  onclosetag(start, endIndex) {
-    var _a2, _b, _c, _d, _e, _f, _g, _h;
-    this.endIndex = endIndex;
-    let name = this.getSlice(start, endIndex);
-    if (this.lowerCaseTagNames) {
-      name = name.toLowerCase();
-    }
-    if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
-      this.foreignContext.shift();
-    }
-    if (!this.isVoidElement(name)) {
-      const pos = this.stack.indexOf(name);
-      if (pos !== -1) {
-        for (let index = 0; index <= pos; index++) {
-          const element = this.stack.shift();
-          (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, index !== pos);
-        }
-      } else if (this.htmlMode && name === "p") {
-        this.emitOpenTag("p");
-        this.closeCurrentTag(true);
-      }
-    } else if (this.htmlMode && name === "br") {
-      (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
-      (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
-      (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
-    }
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  onselfclosingtag(endIndex) {
-    this.endIndex = endIndex;
-    if (this.recognizeSelfClosing || this.foreignContext[0]) {
-      this.closeCurrentTag(false);
-      this.startIndex = endIndex + 1;
-    } else {
-      this.onopentagend(endIndex);
-    }
-  }
-  closeCurrentTag(isOpenImplied) {
-    var _a2, _b;
-    const name = this.tagname;
-    this.endOpenTag(isOpenImplied);
-    if (this.stack[0] === name) {
-      (_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, name, !isOpenImplied);
-      this.stack.shift();
-    }
-  }
-  /** @internal */
-  onattribname(start, endIndex) {
-    this.startIndex = start;
-    const name = this.getSlice(start, endIndex);
-    this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
-  }
-  /** @internal */
-  onattribdata(start, endIndex) {
-    this.attribvalue += this.getSlice(start, endIndex);
-  }
-  /** @internal */
-  onattribentity(cp2) {
-    this.attribvalue += fromCodePoint(cp2);
-  }
-  /** @internal */
-  onattribend(quote, endIndex) {
-    var _a2, _b;
-    this.endIndex = endIndex;
-    (_b = (_a2 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a2, this.attribname, this.attribvalue, quote === QuoteType.Double ? '"' : quote === QuoteType.Single ? "'" : quote === QuoteType.NoValue ? void 0 : null);
-    if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
-      this.attribs[this.attribname] = this.attribvalue;
-    }
-    this.attribvalue = "";
-  }
-  getInstructionName(value) {
-    const index = value.search(reNameEnd);
-    let name = index < 0 ? value : value.substr(0, index);
-    if (this.lowerCaseTagNames) {
-      name = name.toLowerCase();
-    }
-    return name;
-  }
-  /** @internal */
-  ondeclaration(start, endIndex) {
-    this.endIndex = endIndex;
-    const value = this.getSlice(start, endIndex);
-    if (this.cbs.onprocessinginstruction) {
-      const name = this.getInstructionName(value);
-      this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
-    }
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  onprocessinginstruction(start, endIndex) {
-    this.endIndex = endIndex;
-    const value = this.getSlice(start, endIndex);
-    if (this.cbs.onprocessinginstruction) {
-      const name = this.getInstructionName(value);
-      this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
-    }
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  oncomment(start, endIndex, offset) {
-    var _a2, _b, _c, _d;
-    this.endIndex = endIndex;
-    (_b = (_a2 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a2, this.getSlice(start, endIndex - offset));
-    (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  oncdata(start, endIndex, offset) {
-    var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k;
-    this.endIndex = endIndex;
-    const value = this.getSlice(start, endIndex - offset);
-    if (!this.htmlMode || this.options.recognizeCDATA) {
-      (_b = (_a2 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a2);
-      (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
-      (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
-    } else {
-      (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
-      (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
-    }
-    this.startIndex = endIndex + 1;
-  }
-  /** @internal */
-  onend() {
-    var _a2, _b;
-    if (this.cbs.onclosetag) {
-      this.endIndex = this.startIndex;
-      for (let index = 0; index < this.stack.length; index++) {
-        this.cbs.onclosetag(this.stack[index], true);
-      }
-    }
-    (_b = (_a2 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a2);
-  }
-  /**
-   * Resets the parser to a blank state, ready to parse a new HTML document
-   */
-  reset() {
-    var _a2, _b, _c, _d;
-    (_b = (_a2 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a2);
-    this.tokenizer.reset();
-    this.tagname = "";
-    this.attribname = "";
-    this.attribs = null;
-    this.stack.length = 0;
-    this.startIndex = 0;
-    this.endIndex = 0;
-    (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
-    this.buffers.length = 0;
-    this.foreignContext.length = 0;
-    this.foreignContext.unshift(!this.htmlMode);
-    this.bufferOffset = 0;
-    this.writeIndex = 0;
-    this.ended = false;
-  }
-  /**
-   * Resets the parser, then parses a complete document and
-   * pushes it to the handler.
-   *
-   * @param data Document to parse.
-   */
-  parseComplete(data) {
-    this.reset();
-    this.end(data);
-  }
-  getSlice(start, end) {
-    while (start - this.bufferOffset >= this.buffers[0].length) {
-      this.shiftBuffer();
-    }
-    let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
-    while (end - this.bufferOffset > this.buffers[0].length) {
-      this.shiftBuffer();
-      slice += this.buffers[0].slice(0, end - this.bufferOffset);
-    }
-    return slice;
-  }
-  shiftBuffer() {
-    this.bufferOffset += this.buffers[0].length;
-    this.writeIndex--;
-    this.buffers.shift();
-  }
-  /**
-   * Parses a chunk of data and calls the corresponding callbacks.
-   *
-   * @param chunk Chunk to parse.
-   */
-  write(chunk) {
-    var _a2, _b;
-    if (this.ended) {
-      (_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".write() after done!"));
-      return;
-    }
-    this.buffers.push(chunk);
-    if (this.tokenizer.running) {
-      this.tokenizer.write(chunk);
-      this.writeIndex++;
-    }
-  }
-  /**
-   * Parses the end of the buffer and clears the stack, calls onend.
-   *
-   * @param chunk Optional final chunk to parse.
-   */
-  end(chunk) {
-    var _a2, _b;
-    if (this.ended) {
-      (_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".end() after done!"));
-      return;
-    }
-    if (chunk) this.write(chunk);
-    this.ended = true;
-    this.tokenizer.end();
-  }
-  /**
-   * Pauses parsing. The parser won't emit events until `resume` is called.
-   */
-  pause() {
-    this.tokenizer.pause();
-  }
-  /**
-   * Resumes parsing after `pause` was called.
-   */
-  resume() {
-    this.tokenizer.resume();
-    while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
-      this.tokenizer.write(this.buffers[this.writeIndex++]);
-    }
-    if (this.ended) this.tokenizer.end();
-  }
-  /**
-   * Alias of `write`, for backwards compatibility.
-   *
-   * @param chunk Chunk to parse.
-   * @deprecated
-   */
-  parseChunk(chunk) {
-    this.write(chunk);
-  }
-  /**
-   * Alias of `end`, for backwards compatibility.
-   *
-   * @param chunk Optional final chunk to parse.
-   * @deprecated
-   */
-  done(chunk) {
-    this.end(chunk);
-  }
-};
-function parseDocument(data, options) {
-  const handler = new DomHandler(void 0, options);
-  new Parser(handler, options).end(data);
-  return handler.root;
-}
-var picocolors_browserExports = requirePicocolors_browser();
-var pc = getDefaultExportFromCjs(picocolors_browserExports);
-function parseStylesheet(stylesheet) {
-  return parse$2(stylesheet);
-}
-function serializeStylesheet(ast, options) {
-  let cssStr = "";
-  stringify(ast, (result2, node2, type) => {
-    if (node2?.type === "decl" && node2.value.includes("</style>")) {
-      return;
-    }
-    if (!options.compress) {
-      cssStr += result2;
-      return;
-    }
-    if (node2?.type === "comment") return;
-    if (node2?.type === "decl") {
-      const prefix = node2.prop + node2.raws.between;
-      cssStr += result2.replace(prefix, prefix.trim());
-      return;
-    }
-    if (type === "start") {
-      if (node2?.type === "rule" && node2.selectors) {
-        cssStr += `${node2.selectors.join(",")}{`;
-      } else {
-        cssStr += result2.replace(/\s\{$/, "{");
-      }
-      return;
-    }
-    if (type === "end" && result2 === "}" && node2?.raws?.semicolon) {
-      cssStr = cssStr.slice(0, -1);
-    }
-    cssStr += result2.trim();
-  });
-  return cssStr;
-}
-function markOnly(predicate) {
-  return (rule2) => {
-    const sel = "selectors" in rule2 ? rule2.selectors : void 0;
-    if (predicate(rule2) === false) {
-      rule2.$$remove = true;
-    }
-    if ("selectors" in rule2) {
-      rule2.$$markedSelectors = rule2.selectors;
-      rule2.selectors = sel;
-    }
-    if (rule2._other) {
-      rule2._other.$$markedSelectors = rule2._other.selectors;
-    }
-  };
-}
-function applyMarkedSelectors(rule2) {
-  if (rule2.$$markedSelectors) {
-    rule2.selectors = rule2.$$markedSelectors;
-  }
-  if (rule2._other) {
-    applyMarkedSelectors(rule2._other);
-  }
-}
-function walkStyleRules(node2, iterator) {
-  if (!("nodes" in node2)) {
-    return;
-  }
-  node2.nodes = node2.nodes?.filter((rule2) => {
-    if (hasNestedRules(rule2)) {
-      walkStyleRules(rule2, iterator);
-    }
-    rule2._other = void 0;
-    rule2.filterSelectors = filterSelectors;
-    return iterator(rule2) !== false;
-  });
-}
-function walkStyleRulesWithReverseMirror(node2, node22, iterator) {
-  if (!node22) return walkStyleRules(node2, iterator);
-  [node2.nodes, node22.nodes] = splitFilter(node2.nodes, node22.nodes, (rule2, index, _rules, rules2) => {
-    const rule22 = rules2?.[index];
-    if (hasNestedRules(rule2)) {
-      walkStyleRulesWithReverseMirror(rule2, rule22, iterator);
-    }
-    rule2._other = rule22;
-    rule2.filterSelectors = filterSelectors;
-    return iterator(rule2) !== false;
-  });
-}
-function hasNestedRules(rule2) {
-  return "nodes" in rule2 && !!rule2.nodes?.length && (!("name" in rule2) || rule2.name !== "keyframes" && rule2.name !== "-webkit-keyframes") && rule2.nodes.some((n) => n.type === "rule" || n.type === "atrule");
-}
-function splitFilter(a, b, predicate) {
-  const aOut = [];
-  const bOut = [];
-  for (let index = 0; index < a.length; index++) {
-    const item = a[index];
-    if (predicate(item, index, a, b)) {
-      aOut.push(item);
-    } else {
-      bOut.push(item);
-    }
-  }
-  return [aOut, bOut];
-}
-function filterSelectors(predicate) {
-  if (this._other) {
-    const [a, b] = splitFilter(this.selectors, this._other.selectors, predicate);
-    this.selectors = a;
-    this._other.selectors = b;
-  } else {
-    this.selectors = this.selectors.filter(predicate);
-  }
-}
-var MEDIA_TYPES = /* @__PURE__ */ new Set(["all", "print", "screen", "speech"]);
-var MEDIA_KEYWORDS = /* @__PURE__ */ new Set(["and", "not", ","]);
-var MEDIA_FEATURES = new Set(["width", "aspect-ratio", "color", "color-index", "grid", "height", "monochrome", "orientation", "resolution", "scan"].flatMap((feature) => [feature, `min-${feature}`, `max-${feature}`]));
-function validateMediaType(node2) {
-  const {
-    type: nodeType,
-    value: nodeValue
-  } = node2;
-  if (nodeType === "media-type") {
-    return MEDIA_TYPES.has(nodeValue);
-  } else if (nodeType === "keyword") {
-    return MEDIA_KEYWORDS.has(nodeValue);
-  } else if (nodeType === "media-feature") {
-    return MEDIA_FEATURES.has(nodeValue);
-  }
-}
-function validateMediaQuery(query) {
-  const mediaParserFn = "default" in mediaParser ? mediaParser.default : mediaParser;
-  const mediaTree = mediaParserFn(query);
-  const nodeTypes = /* @__PURE__ */ new Set(["media-type", "keyword", "media-feature"]);
-  const stack = [mediaTree];
-  while (stack.length > 0) {
-    const node2 = stack.pop();
-    if (nodeTypes.has(node2.type) && !validateMediaType(node2)) {
-      return false;
-    }
-    if (node2.nodes) {
-      stack.push(...node2.nodes);
-    }
-  }
-  return true;
-}
-var classCache = null;
-var idCache = null;
-function buildCache(container2) {
-  classCache = /* @__PURE__ */ new Set();
-  idCache = /* @__PURE__ */ new Set();
-  const queue = [container2];
-  while (queue.length) {
-    const node2 = queue.shift();
-    if (node2.hasAttribute?.("class")) {
-      const classList = node2.getAttribute("class").trim().split(" ");
-      classList.forEach((cls) => {
-        classCache.add(cls);
-      });
-    }
-    if (node2.hasAttribute?.("id")) {
-      const id = node2.getAttribute("id").trim();
-      idCache.add(id);
-    }
-    if ("children" in node2) {
-      queue.push(...node2.children.filter((child) => child.type === "tag"));
-    }
-  }
-}
-function createDocument(html) {
-  const document2 = parseDocument(html, {
-    decodeEntities: false
-  });
-  extendDocument(document2);
-  extendElement(Element.prototype);
-  let beastiesContainer = document2.querySelector("[data-beasties-container]");
-  if (!beastiesContainer) {
-    document2.documentElement?.setAttribute("data-beasties-container", "");
-    beastiesContainer = document2.documentElement || document2;
-  }
-  document2.beastiesContainer = beastiesContainer;
-  buildCache(beastiesContainer);
-  return document2;
-}
-function serializeDocument(document2) {
-  return render(document2, {
-    decodeEntities: false
-  });
-}
-var extended = false;
-function extendElement(element) {
-  if (extended) {
-    return;
-  }
-  extended = true;
-  Object.defineProperties(element, {
-    nodeName: {
-      get() {
-        return this.tagName.toUpperCase();
-      }
-    },
-    id: {
-      get() {
-        return this.getAttribute("id");
-      },
-      set(value) {
-        this.setAttribue("id", value);
-      }
-    },
-    className: {
-      get() {
-        return this.getAttribute("class");
-      },
-      set(value) {
-        this.setAttribute("class", value);
-      }
-    },
-    insertBefore: {
-      value(child, referenceNode) {
-        if (!referenceNode) return this.appendChild(child);
-        prepend(referenceNode, child);
-        return child;
-      }
-    },
-    appendChild: {
-      value(child) {
-        appendChild(this, child);
-        return child;
-      }
-    },
-    removeChild: {
-      value(child) {
-        removeElement(child);
-      }
-    },
-    remove: {
-      value() {
-        removeElement(this);
-      }
-    },
-    textContent: {
-      get() {
-        return getText(this);
-      },
-      set(text) {
-        this.children = [];
-        appendChild(this, new Text(text));
-      }
-    },
-    setAttribute: {
-      value(name, value) {
-        if (this.attribs == null) this.attribs = {};
-        if (value == null) value = "";
-        this.attribs[name] = value;
-      }
-    },
-    removeAttribute: {
-      value(name) {
-        if (this.attribs != null) {
-          delete this.attribs[name];
-        }
-      }
-    },
-    getAttribute: {
-      value(name) {
-        return this.attribs != null && this.attribs[name];
-      }
-    },
-    hasAttribute: {
-      value(name) {
-        return this.attribs != null && this.attribs[name] != null;
-      }
-    },
-    getAttributeNode: {
-      value(name) {
-        const value = this.getAttribute(name);
-        if (value != null) return {
-          specified: true,
-          value
-        };
-      }
-    },
-    exists: {
-      value(sel) {
-        return cachedQuerySelector(sel, this);
-      }
-    },
-    querySelector: {
-      value(sel) {
-        return selectOne(sel, this);
-      }
-    },
-    querySelectorAll: {
-      value(sel) {
-        return selectAll(sel, this);
-      }
-    }
-  });
-}
-function extendDocument(document2) {
-  Object.defineProperties(document2, {
-    // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.
-    // TODO: verify if these are needed for css-select
-    nodeType: {
-      get() {
-        return 9;
-      }
-    },
-    contentType: {
-      get() {
-        return "text/html";
-      }
-    },
-    nodeName: {
-      get() {
-        return "#document";
-      }
-    },
-    documentElement: {
-      get() {
-        return this.children.find((child) => "tagName" in child && String(child.tagName).toLowerCase() === "html");
-      }
-    },
-    head: {
-      get() {
-        return this.querySelector("head");
-      }
-    },
-    body: {
-      get() {
-        return this.querySelector("body");
-      }
-    },
-    createElement: {
-      value(name) {
-        return new Element(name, {});
-      }
-    },
-    createTextNode: {
-      value(text) {
-        return new Text(text);
-      }
-    },
-    exists: {
-      value(sel) {
-        return cachedQuerySelector(sel, this);
-      }
-    },
-    querySelector: {
-      value(sel) {
-        return selectOne(sel, this);
-      }
-    },
-    querySelectorAll: {
-      value(sel) {
-        if (sel === ":root") {
-          return this;
-        }
-        return selectAll(sel, this);
-      }
-    }
-  });
-}
-function cachedQuerySelector(sel, node2) {
-  const selectorTokens = parse$1(sel);
-  for (const tokens of selectorTokens) {
-    if (tokens.length === 1) {
-      const token = tokens[0];
-      if (token.type === "attribute" && token.name === "class") {
-        return classCache.has(token.value);
-      }
-      if (token.type === "attribute" && token.name === "id") {
-        return idCache.has(token.value);
-      }
-    }
-  }
-  return !!selectOne(sel, node2);
-}
-var LOG_LEVELS = ["trace", "debug", "info", "warn", "error", "silent"];
-var defaultLogger = {
-  trace(msg) {
-    console.trace(msg);
-  },
-  debug(msg) {
-    console.debug(msg);
-  },
-  warn(msg) {
-    console.warn(pc.yellow(msg));
-  },
-  error(msg) {
-    console.error(pc.bold(pc.red(msg)));
-  },
-  info(msg) {
-    console.info(pc.bold(pc.blue(msg)));
-  },
-  silent() {
-  }
-};
-function createLogger(logLevel) {
-  const logLevelIdx = LOG_LEVELS.indexOf(logLevel);
-  return LOG_LEVELS.reduce((logger, type, index) => {
-    if (index >= logLevelIdx) {
-      logger[type] = defaultLogger[type];
-    } else {
-      logger[type] = defaultLogger.silent;
-    }
-    return logger;
-  }, {});
-}
-function isSubpath(basePath, currentPath) {
-  return !_pathModule.relative(basePath, currentPath).startsWith("..");
-}
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
-  enumerable: true,
-  configurable: true,
-  writable: true,
-  value
-}) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-var Beasties = class {
-  constructor(options = {}) {
-    __publicField(this, "options");
-    __publicField(this, "logger");
-    __publicField(this, "fs");
-    this.options = Object.assign({
-      logLevel: "info",
-      path: "",
-      publicPath: "",
-      reduceInlineStyles: true,
-      pruneSource: false,
-      additionalStylesheets: [],
-      allowRules: []
-    }, options);
-    this.logger = this.options.logger || createLogger(this.options.logLevel);
-  }
-  /**
-   * Read the contents of a file from the specified filesystem or disk
-   */
-  readFile(filename) {
-    const fs = this.fs;
-    return new Promise((resolve2, reject) => {
-      const callback = (err, data) => {
-        if (err) reject(err);
-        else resolve2(data.toString());
-      };
-      if (fs && fs.readFile) {
-        fs.readFile(filename, callback);
-      } else {
-        readFile(filename, "utf-8", callback);
-      }
-    });
-  }
-  /**
-   * Apply critical CSS processing to the html
-   */
-  process(html) {
-    return __async(this, null, function* () {
-      const start = Date.now();
-      const document2 = createDocument(html);
-      if (this.options.additionalStylesheets.length > 0) {
-        this.embedAdditionalStylesheet(document2);
-      }
-      if (this.options.external !== false) {
-        const externalSheets = [].slice.call(document2.querySelectorAll('link[rel="stylesheet"]'));
-        yield Promise.all(externalSheets.map((link2) => this.embedLinkedStylesheet(link2, document2)));
-      }
-      const styles = this.getAffectedStyleTags(document2);
-      yield Promise.all(styles.map((style) => this.processStyle(style, document2)));
-      if (this.options.mergeStylesheets !== false && styles.length !== 0) {
-        yield this.mergeStylesheets(document2);
-      }
-      const output = serializeDocument(document2);
-      const end = Date.now();
-      this.logger.info?.(`Time ${end - start}ms`);
-      return output;
-    });
-  }
-  /**
-   * Get the style tags that need processing
-   */
-  getAffectedStyleTags(document2) {
-    const styles = [...document2.querySelectorAll("style")];
-    if (this.options.reduceInlineStyles === false) {
-      return styles.filter((style) => style.$$external);
-    }
-    return styles;
-  }
-  mergeStylesheets(document2) {
-    return __async(this, null, function* () {
-      const styles = this.getAffectedStyleTags(document2);
-      if (styles.length === 0) {
-        this.logger.warn?.("Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge");
-        return;
-      }
-      const first = styles[0];
-      let sheet = first.textContent;
-      for (let i = 1; i < styles.length; i++) {
-        const node2 = styles[i];
-        sheet += node2.textContent;
-        node2.remove();
-      }
-      first.textContent = sheet;
-    });
-  }
-  /**
-   * Given href, find the corresponding CSS asset
-   */
-  getCssAsset(href, _style) {
-    return __async(this, null, function* () {
-      const outputPath = this.options.path;
-      const publicPath = this.options.publicPath;
-      let normalizedPath = href.replace(/^\//, "");
-      const pathPrefix = `${(publicPath || "").replace(/(^\/|\/$)/g, "")}/`;
-      if (normalizedPath.startsWith(pathPrefix)) {
-        normalizedPath = normalizedPath.substring(pathPrefix.length).replace(/^\//, "");
-      }
-      if (/^https?:\/\//.test(normalizedPath) || href.startsWith("//")) {
-        return void 0;
-      }
-      const filename = _pathModule.resolve(outputPath, normalizedPath);
-      if (!isSubpath(outputPath, filename)) {
-        return void 0;
-      }
-      let sheet;
-      try {
-        sheet = yield this.readFile(filename);
-      } catch {
-        this.logger.warn?.(`Unable to locate stylesheet: ${filename}`);
-      }
-      return sheet;
-    });
-  }
-  checkInlineThreshold(link2, style, sheet) {
-    if (this.options.inlineThreshold && sheet.length < this.options.inlineThreshold) {
-      const href = style.$$name;
-      style.$$reduce = false;
-      this.logger.info?.(`\x1B[32mInlined all of ${href} (${sheet.length} was below the threshold of ${this.options.inlineThreshold})\x1B[39m`);
-      link2.remove();
-      return true;
-    }
-    return false;
-  }
-  /**
-   * Inline the stylesheets from options.additionalStylesheets (assuming it passes `options.filter`)
-   */
-  embedAdditionalStylesheet(document2) {
-    return __async(this, null, function* () {
-      const styleSheetsIncluded = [];
-      const sources = yield Promise.all(this.options.additionalStylesheets.map((cssFile) => {
-        if (styleSheetsIncluded.includes(cssFile)) {
-          return [];
-        }
-        styleSheetsIncluded.push(cssFile);
-        const style = document2.createElement("style");
-        style.$$external = true;
-        return this.getCssAsset(cssFile, style).then((sheet) => [sheet, style]);
-      }));
-      for (const [sheet, style] of sources) {
-        if (sheet) {
-          style.textContent = sheet;
-          document2.head.appendChild(style);
-        }
-      }
-    });
-  }
-  /**
-   * Inline the target stylesheet referred to by a <link rel="stylesheet"> (assuming it passes `options.filter`)
-   */
-  embedLinkedStylesheet(link2, document2) {
-    return __async(this, null, function* () {
-      const href = link2.getAttribute("href");
-      let media = link2.getAttribute("media");
-      if (media && !validateMediaQuery(media)) {
-        media = void 0;
-      }
-      const preloadMode = this.options.preload;
-      if (!href?.endsWith(".css")) {
-        return void 0;
-      }
-      const style = document2.createElement("style");
-      style.$$external = true;
-      const sheet = yield this.getCssAsset(href, style);
-      if (!sheet) {
-        return;
-      }
-      style.textContent = sheet;
-      style.$$name = href;
-      style.$$links = [link2];
-      link2.parentNode?.insertBefore(style, link2);
-      if (this.checkInlineThreshold(link2, style, sheet)) {
-        return;
-      }
-      let cssLoaderPreamble = "function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}";
-      const lazy = preloadMode === "js-lazy";
-      if (lazy) {
-        cssLoaderPreamble = cssLoaderPreamble.replace("l.href", "l.media='print';l.onload=function(){l.media=m};l.href");
-      }
-      if (preloadMode === false) return;
-      let noscriptFallback = false;
-      let updateLinkToPreload = false;
-      const noscriptLink = link2.cloneNode(false);
-      if (preloadMode === "body") {
-        document2.body.appendChild(link2);
-      } else {
-        if (preloadMode === "js" || preloadMode === "js-lazy") {
-          const script = document2.createElement("script");
-          script.setAttribute("data-href", href);
-          script.setAttribute("data-media", media || "all");
-          const js = `${cssLoaderPreamble}$loadcss(document.currentScript.dataset.href,document.currentScript.dataset.media)`;
-          script.textContent = js;
-          link2.parentNode.insertBefore(script, link2.nextSibling);
-          style.$$links.push(script);
-          cssLoaderPreamble = "";
-          noscriptFallback = true;
-          updateLinkToPreload = true;
-        } else if (preloadMode === "media") {
-          link2.setAttribute("media", "print");
-          link2.setAttribute("onload", `this.media='${media || "all"}'`);
-          noscriptFallback = true;
-        } else if (preloadMode === "swap-high") {
-          link2.setAttribute("rel", "alternate stylesheet preload");
-          link2.setAttribute("title", "styles");
-          link2.setAttribute("onload", `this.title='';this.rel='stylesheet'`);
-          noscriptFallback = true;
-        } else if (preloadMode === "swap") {
-          link2.setAttribute("onload", "this.rel='stylesheet'");
-          noscriptFallback = true;
-        } else {
-          const bodyLink = link2.cloneNode(false);
-          bodyLink.removeAttribute("id");
-          document2.body.appendChild(bodyLink);
-          updateLinkToPreload = true;
-        }
-      }
-      if (this.options.noscriptFallback !== false && noscriptFallback && !href.includes("</noscript>")) {
-        const noscript = document2.createElement("noscript");
-        noscriptLink.removeAttribute("id");
-        noscript.appendChild(noscriptLink);
-        link2.parentNode.insertBefore(noscript, link2.nextSibling);
-        style.$$links.push(noscript);
-      }
-      if (updateLinkToPreload) {
-        link2.setAttribute("rel", "preload");
-        link2.setAttribute("as", "style");
-      }
-    });
-  }
-  /**
-   * Prune the source CSS files
-   */
-  pruneSource(style, before, sheetInverse) {
-    const minSize = this.options.minimumExternalSize;
-    const name = style.$$name;
-    if (minSize && sheetInverse.length < minSize) {
-      this.logger.info?.(`\x1B[32mInlined all of ${name} (non-critical external stylesheet would have been ${sheetInverse.length}b, which was below the threshold of ${minSize})\x1B[39m`);
-      style.textContent = before;
-      if (style.$$links) {
-        for (const link2 of style.$$links) {
-          const parent = link2.parentNode;
-          if (parent) parent.removeChild(link2);
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-  /**
-   * Parse the stylesheet within a <style> element, then reduce it to contain only rules used by the document.
-   */
-  processStyle(style, document2) {
-    return __async(this, null, function* () {
-      if (style.$$reduce === false) return;
-      const name = style.$$name ? style.$$name.replace(/^\//, "") : "inline CSS";
-      const options = this.options;
-      const beastiesContainer = document2.beastiesContainer;
-      let keyframesMode = options.keyframes ?? "critical";
-      if (keyframesMode === true) keyframesMode = "all";
-      if (keyframesMode === false) keyframesMode = "none";
-      let sheet = style.textContent;
-      const before = sheet;
-      if (!sheet) return;
-      const ast = parseStylesheet(sheet);
-      const astInverse = options.pruneSource ? parseStylesheet(sheet) : null;
-      let criticalFonts = "";
-      const failedSelectors = [];
-      const criticalKeyframeNames = /* @__PURE__ */ new Set();
-      let includeNext = false;
-      let includeAll = false;
-      let excludeNext = false;
-      let excludeAll = false;
-      const shouldPreloadFonts = options.fonts === true || options.preloadFonts === true;
-      const shouldInlineFonts = options.fonts !== false && options.inlineFonts === true;
-      walkStyleRules(ast, markOnly((rule2) => {
-        if (rule2.type === "comment") {
-          const beastiesComment = rule2.text.match(/^(?<!! )beasties:(.*)/);
-          const command = beastiesComment && beastiesComment[1];
-          if (command) {
-            switch (command) {
-              case "include":
-                includeNext = true;
-                break;
-              case "exclude":
-                excludeNext = true;
-                break;
-              case "include start":
-                includeAll = true;
-                break;
-              case "include end":
-                includeAll = false;
-                break;
-              case "exclude start":
-                excludeAll = true;
-                break;
-              case "exclude end":
-                excludeAll = false;
-                break;
-            }
-          }
-        }
-        if (rule2.type === "rule") {
-          if (includeNext) {
-            includeNext = false;
-            return true;
-          }
-          if (excludeNext) {
-            excludeNext = false;
-            return false;
-          }
-          if (includeAll) {
-            return true;
-          }
-          if (excludeAll) {
-            return false;
-          }
-          rule2.filterSelectors?.((sel) => {
-            const isAllowedRule = options.allowRules.some((exp) => {
-              if (exp instanceof RegExp) {
-                return exp.test(sel);
-              }
-              return exp === sel;
-            });
-            if (isAllowedRule) return true;
-            if (sel === ":root" || sel === "html" || sel === "body" || /^::?(?:before|after)$/.test(sel)) {
-              return true;
-            }
-            sel = sel.replace(/(?<!\\)::?[a-z-]+(?![a-z-(])/gi, "").replace(/::?not\(\s*\)/g, "").replace(/\(\s*,/g, "(").replace(/,\s*\)/g, ")").trim();
-            if (!sel) return false;
-            try {
-              return beastiesContainer.exists(sel);
-            } catch (e) {
-              failedSelectors.push(`${sel} -> ${e.message || e.toString()}`);
-              return false;
-            }
-          });
-          if (!rule2.selector) {
-            return false;
-          }
-          if (rule2.nodes) {
-            for (const decl of rule2.nodes) {
-              if (!("prop" in decl)) {
-                continue;
-              }
-              if (shouldInlineFonts && /\bfont(?:-family)?\b/i.test(decl.prop)) {
-                criticalFonts += ` ${decl.value}`;
-              }
-              if (decl.prop === "animation" || decl.prop === "animation-name") {
-                for (const name2 of decl.value.split(/\s+/)) {
-                  const nameTrimmed = name2.trim();
-                  if (nameTrimmed) criticalKeyframeNames.add(nameTrimmed);
-                }
-              }
-            }
-          }
-        }
-        if (rule2.type === "atrule" && rule2.name === "font-face") return;
-        const rules = "nodes" in rule2 ? rule2.nodes?.filter((rule22) => !rule22.$$remove) : void 0;
-        return !rules || rules.length !== 0;
-      }));
-      if (failedSelectors.length !== 0) {
-        this.logger.warn?.(`${failedSelectors.length} rules skipped due to selector errors:
-  ${failedSelectors.join("\n  ")}`);
-      }
-      const preloadedFonts = /* @__PURE__ */ new Set();
-      walkStyleRulesWithReverseMirror(ast, astInverse, (rule2) => {
-        if (rule2.$$remove === true) return false;
-        if ("selectors" in rule2) {
-          applyMarkedSelectors(rule2);
-        }
-        if (rule2.type === "atrule" && rule2.name === "keyframes") {
-          if (keyframesMode === "none") return false;
-          if (keyframesMode === "all") return true;
-          return criticalKeyframeNames.has(rule2.params);
-        }
-        if (rule2.type === "atrule" && rule2.name === "font-face") {
-          let family, src;
-          if (rule2.nodes) {
-            for (const decl of rule2.nodes) {
-              if (!("prop" in decl)) {
-                continue;
-              }
-              if (decl.prop === "src") {
-                src = (decl.value.match(/url\s*\(\s*(['"]?)(.+?)\1\s*\)/) || [])[2];
-              } else if (decl.prop === "font-family") {
-                family = decl.value;
-              }
-            }
-            if (src && shouldPreloadFonts && !preloadedFonts.has(src)) {
-              preloadedFonts.add(src);
-              const preload = document2.createElement("link");
-              preload.setAttribute("rel", "preload");
-              preload.setAttribute("as", "font");
-              preload.setAttribute("crossorigin", "anonymous");
-              preload.setAttribute("href", src.trim());
-              document2.head.appendChild(preload);
-            }
-          }
-          if (!shouldInlineFonts || !family || !src || !criticalFonts.includes(family)) {
-            return false;
-          }
-        }
-      });
-      sheet = serializeStylesheet(ast, {
-        compress: this.options.compress !== false
-      });
-      if (sheet.trim().length === 0) {
-        if (style.parentNode) {
-          style.remove();
-        }
-        return;
-      }
-      let afterText = "";
-      let styleInlinedCompletely = false;
-      if (options.pruneSource) {
-        const sheetInverse = serializeStylesheet(astInverse, {
-          compress: this.options.compress !== false
-        });
-        styleInlinedCompletely = this.pruneSource(style, before, sheetInverse);
-        if (styleInlinedCompletely) {
-          const percent2 = sheetInverse.length / before.length * 100;
-          afterText = `, reducing non-inlined size ${percent2 | 0}% to ${formatSize(sheetInverse.length)}`;
-        }
-      }
-      if (!styleInlinedCompletely) {
-        style.textContent = sheet;
-      }
-      const percent = sheet.length / before.length * 100 | 0;
-      this.logger.info?.(`\x1B[32mInlined ${formatSize(sheet.length)} (${percent}% of original ${formatSize(before.length)}) of ${name}${afterText}.\x1B[39m`);
-    });
-  }
-};
-function formatSize(size) {
-  if (size <= 0) {
-    return "0 bytes";
-  }
-  const abbreviations = ["bytes", "kB", "MB", "GB"];
-  const index = Math.floor(Math.log(size) / Math.log(1024));
-  const roundedSize = size / 1024 ** index;
-  const fractionDigits = index === 0 ? 0 : 2;
-  return `${roundedSize.toFixed(fractionDigits)} ${abbreviations[index]}`;
-}
-
-// node_modules/@angular/ssr/fesm2022/ssr.mjs
-var ServerAssets = class {
-  manifest;
-  /**
-   * Creates an instance of ServerAsset.
-   *
-   * @param manifest - The manifest containing the server assets.
-   */
-  constructor(manifest) {
-    this.manifest = manifest;
-  }
-  /**
-   * Retrieves the content of a server-side asset using its path.
-   *
-   * @param path - The path to the server asset within the manifest.
-   * @returns The server asset associated with the provided path, as a `ServerAsset` object.
-   * @throws Error - Throws an error if the asset does not exist.
-   */
-  getServerAsset(path2) {
-    const asset = this.manifest.assets[path2];
-    if (!asset) {
-      throw new Error(`Server asset '${path2}' does not exist.`);
-    }
-    return asset;
-  }
-  /**
-   * Checks if a specific server-side asset exists.
-   *
-   * @param path - The path to the server asset.
-   * @returns A boolean indicating whether the asset exists.
-   */
-  hasServerAsset(path2) {
-    return !!this.manifest.assets[path2];
-  }
-  /**
-   * Retrieves the asset for 'index.server.html'.
-   *
-   * @returns The `ServerAsset` object for 'index.server.html'.
-   * @throws Error - Throws an error if 'index.server.html' does not exist.
-   */
-  getIndexServerHtml() {
-    return this.getServerAsset("index.server.html");
-  }
-};
-var IGNORED_LOGS = /* @__PURE__ */ new Set(["Angular is running in development mode."]);
-var Console2 = class extends Console {
-  /**
-   * Logs a message to the console if it is not in the set of ignored messages.
-   *
-   * @param message - The message to log to the console.
-   *
-   * This method overrides the `log` method of the `ɵConsole` class. It checks if the
-   * message is in the `IGNORED_LOGS` set. If it is not, it delegates the logging to
-   * the parent class's `log` method. Otherwise, the message is suppressed.
-   */
-  log(message) {
-    if (!IGNORED_LOGS.has(message)) {
-      super.log(message);
-    }
-  }
-};
-var angularAppManifest;
-function setAngularAppManifest(manifest) {
-  angularAppManifest = manifest;
-}
-function getAngularAppManifest() {
-  if (!angularAppManifest) {
-    throw new Error(`Angular app manifest is not set. Please ensure you are using the '@angular/build:application' builder to build your server application.`);
-  }
-  return angularAppManifest;
-}
-var angularAppEngineManifest;
-function setAngularAppEngineManifest(manifest) {
-  angularAppEngineManifest = manifest;
-}
-function getAngularAppEngineManifest() {
-  if (!angularAppEngineManifest) {
-    throw new Error(`Angular app engine manifest is not set. Please ensure you are using the '@angular/build:application' builder to build your server application.`);
-  }
-  return angularAppEngineManifest;
-}
-function stripTrailingSlash(url) {
-  return url.length > 1 && url[url.length - 1] === "/" ? url.slice(0, -1) : url;
-}
-function stripLeadingSlash(url) {
-  return url.length > 1 && url[0] === "/" ? url.slice(1) : url;
-}
-function addLeadingSlash(url) {
-  return url[0] === "/" ? url : `/${url}`;
-}
-function addTrailingSlash(url) {
-  return url[url.length - 1] === "/" ? url : `${url}/`;
-}
-function joinUrlParts(...parts) {
-  const normalizeParts = [];
-  for (const part of parts) {
-    if (part === "") {
-      continue;
-    }
-    let normalizedPart = part;
-    if (part[0] === "/") {
-      normalizedPart = normalizedPart.slice(1);
-    }
-    if (part[part.length - 1] === "/") {
-      normalizedPart = normalizedPart.slice(0, -1);
-    }
-    if (normalizedPart !== "") {
-      normalizeParts.push(normalizedPart);
-    }
-  }
-  return addLeadingSlash(normalizeParts.join("/"));
-}
-function stripIndexHtmlFromURL(url) {
-  if (url.pathname.endsWith("/index.html")) {
-    const modifiedURL = new URL(url);
-    modifiedURL.pathname = modifiedURL.pathname.slice(
-      0,
-      /** '/index.html'.length */
-      -11
-    );
-    return modifiedURL;
-  }
-  return url;
-}
-function buildPathWithParams(toPath, fromPath) {
-  if (toPath[0] !== "/") {
-    throw new Error(`Invalid toPath: The string must start with a '/'. Received: '${toPath}'`);
-  }
-  if (fromPath[0] !== "/") {
-    throw new Error(`Invalid fromPath: The string must start with a '/'. Received: '${fromPath}'`);
-  }
-  if (!toPath.includes("/*")) {
-    return toPath;
-  }
-  const fromPathParts = fromPath.split("/");
-  const toPathParts = toPath.split("/");
-  const resolvedParts = toPathParts.map((part, index) => toPathParts[index] === "*" ? fromPathParts[index] : part);
-  return joinUrlParts(...resolvedParts);
-}
-function renderAngular(html, bootstrap, url, platformProviders, serverContext) {
-  const providers = [{
-    provide: SERVER_CONTEXT,
-    useValue: serverContext
-  }, {
-    // An Angular Console Provider that does not print a set of predefined logs.
-    provide: Console,
-    // Using `useClass` would necessitate decorating `Console` with `@Injectable`,
-    // which would require switching from `ts_library` to `ng_module`. This change
-    // would also necessitate various patches of `@angular/bazel` to support ESM.
-    useFactory: () => new Console2()
-  }, ...platformProviders];
-  const urlToRender = stripIndexHtmlFromURL(url).toString();
-  return isNgModule(bootstrap) ? renderModule(bootstrap, {
-    url: urlToRender,
-    document: html,
-    extraProviders: providers
-  }) : renderApplication(bootstrap, {
-    url: urlToRender,
-    document: html,
-    platformProviders: providers
-  });
-}
-function isNgModule(value) {
-  return "ɵmod" in value;
-}
-function promiseWithAbort(promise, signal, errorMessagePrefix) {
-  return new Promise((resolve2, reject) => {
-    const abortHandler = () => {
-      reject(new DOMException(`${errorMessagePrefix} was aborted.
-${signal.reason}`, "AbortError"));
-    };
-    if (signal.aborted) {
-      abortHandler();
-      return;
-    }
-    signal.addEventListener("abort", abortHandler, {
-      once: true
-    });
-    promise.then(resolve2).catch(reject).finally(() => {
-      signal.removeEventListener("abort", abortHandler);
-    });
-  });
-}
-var RenderMode;
-(function(RenderMode2) {
-  RenderMode2[RenderMode2["Server"] = 0] = "Server";
-  RenderMode2[RenderMode2["Client"] = 1] = "Client";
-  RenderMode2[RenderMode2["Prerender"] = 2] = "Prerender";
-})(RenderMode || (RenderMode = {}));
-var PrerenderFallback;
-(function(PrerenderFallback2) {
-  PrerenderFallback2[PrerenderFallback2["Server"] = 0] = "Server";
-  PrerenderFallback2[PrerenderFallback2["Client"] = 1] = "Client";
-  PrerenderFallback2[PrerenderFallback2["None"] = 2] = "None";
-})(PrerenderFallback || (PrerenderFallback = {}));
-var SERVER_ROUTES_CONFIG = new InjectionToken("SERVER_ROUTES_CONFIG");
-function provideServerRoutesConfig(routes, options) {
-  if (false) {
-    throw new Error(`The 'provideServerRoutesConfig' function should not be invoked within the browser portion of the application.`);
-  }
-  return makeEnvironmentProviders([{
-    provide: SERVER_ROUTES_CONFIG,
-    useValue: __spreadValues({
-      routes
-    }, options)
-  }]);
-}
-var RouteTree = class _RouteTree {
-  /**
-   * The root node of the route tree.
-   * All routes are stored and accessed relative to this root node.
-   */
-  root = this.createEmptyRouteTreeNode("");
-  /**
-   * A counter that tracks the order of route insertion.
-   * This ensures that routes are matched in the order they were defined,
-   * with earlier routes taking precedence.
-   */
-  insertionIndexCounter = 0;
-  /**
-   * Inserts a new route into the route tree.
-   * The route is broken down into segments, and each segment is added to the tree.
-   * Parameterized segments (e.g., :id) are normalized to wildcards (*) for matching purposes.
-   *
-   * @param route - The route path to insert into the tree.
-   * @param metadata - Metadata associated with the route, excluding the route path itself.
-   */
-  insert(route, metadata) {
-    let node2 = this.root;
-    const segments = this.getPathSegments(route);
-    const normalizedSegments = [];
-    for (const segment of segments) {
-      const normalizedSegment = segment[0] === ":" ? "*" : segment;
-      let childNode = node2.children.get(normalizedSegment);
-      if (!childNode) {
-        childNode = this.createEmptyRouteTreeNode(normalizedSegment);
-        node2.children.set(normalizedSegment, childNode);
-      }
-      node2 = childNode;
-      normalizedSegments.push(normalizedSegment);
-    }
-    node2.metadata = __spreadProps(__spreadValues({}, metadata), {
-      route: normalizedSegments.join("/")
-    });
-    node2.insertionIndex = this.insertionIndexCounter++;
-  }
-  /**
-   * Matches a given route against the route tree and returns the best matching route's metadata.
-   * The best match is determined by the lowest insertion index, meaning the earliest defined route
-   * takes precedence.
-   *
-   * @param route - The route path to match against the route tree.
-   * @returns The metadata of the best matching route or `undefined` if no match is found.
-   */
-  match(route) {
-    const segments = this.getPathSegments(route);
-    return this.traverseBySegments(segments)?.metadata;
-  }
-  /**
-   * Converts the route tree into a serialized format representation.
-   * This method converts the route tree into an array of metadata objects that describe the structure of the tree.
-   * The array represents the routes in a nested manner where each entry includes the route and its associated metadata.
-   *
-   * @returns An array of `RouteTreeNodeMetadata` objects representing the route tree structure.
-   *          Each object includes the `route` and associated metadata of a route.
-   */
-  toObject() {
-    return Array.from(this.traverse());
-  }
-  /**
-   * Constructs a `RouteTree` from an object representation.
-   * This method is used to recreate a `RouteTree` instance from an array of metadata objects.
-   * The array should be in the format produced by `toObject`, allowing for the reconstruction of the route tree
-   * with the same routes and metadata.
-   *
-   * @param value - An array of `RouteTreeNodeMetadata` objects that represent the serialized format of the route tree.
-   *                Each object should include a `route` and its associated metadata.
-   * @returns A new `RouteTree` instance constructed from the provided metadata objects.
-   */
-  static fromObject(value) {
-    const tree = new _RouteTree();
-    for (const _a2 of value) {
-      const _b = _a2, {
-        route
-      } = _b, metadata = __objRest(_b, [
-        "route"
-      ]);
-      tree.insert(route, metadata);
-    }
-    return tree;
-  }
-  /**
-   * A generator function that recursively traverses the route tree and yields the metadata of each node.
-   * This allows for easy and efficient iteration over all nodes in the tree.
-   *
-   * @param node - The current node to start the traversal from. Defaults to the root node of the tree.
-   */
-  *traverse(node2 = this.root) {
-    if (node2.metadata) {
-      yield node2.metadata;
-    }
-    for (const childNode of node2.children.values()) {
-      yield* __yieldStar(this.traverse(childNode));
-    }
-  }
-  /**
-   * Extracts the path segments from a given route string.
-   *
-   * @param route - The route string from which to extract segments.
-   * @returns An array of path segments.
-   */
-  getPathSegments(route) {
-    return stripTrailingSlash(route).split("/");
-  }
-  /**
-   * Recursively traverses the route tree from a given node, attempting to match the remaining route segments.
-   * If the node is a leaf node (no more segments to match) and contains metadata, the node is yielded.
-   *
-   * This function prioritizes exact segment matches first, followed by wildcard matches (`*`),
-   * and finally deep wildcard matches (`**`) that consume all segments.
-   *
-   * @param remainingSegments - The remaining segments of the route path to match.
-   * @param node - The current node in the route tree to start traversal from.
-   *
-   * @returns The node that best matches the remaining segments or `undefined` if no match is found.
-   */
-  traverseBySegments(remainingSegments, node2 = this.root) {
-    const {
-      metadata,
-      children
-    } = node2;
-    if (!remainingSegments?.length) {
-      if (metadata) {
-        return node2;
-      }
-      return;
-    }
-    if (!children.size) {
-      return;
-    }
-    const [segment, ...restSegments] = remainingSegments;
-    let currentBestMatchNode;
-    const exactMatchNode = node2.children.get(segment);
-    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, this.traverseBySegments(restSegments, exactMatchNode));
-    const wildcardNode = node2.children.get("*");
-    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, this.traverseBySegments(restSegments, wildcardNode));
-    const deepWildcardNode = node2.children.get("**");
-    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, deepWildcardNode);
-    return currentBestMatchNode;
-  }
-  /**
-   * Compares two nodes and returns the node with higher priority based on insertion index.
-   * A node with a lower insertion index is prioritized as it was defined earlier.
-   *
-   * @param currentBestMatchNode - The current best match node.
-   * @param candidateNode - The node being evaluated for higher priority based on insertion index.
-   * @returns The node with higher priority (i.e., lower insertion index). If one of the nodes is `undefined`, the other node is returned.
-   */
-  getHigherPriorityNode(currentBestMatchNode, candidateNode) {
-    if (!candidateNode) {
-      return currentBestMatchNode;
-    }
-    if (!currentBestMatchNode) {
-      return candidateNode;
-    }
-    return candidateNode.insertionIndex < currentBestMatchNode.insertionIndex ? candidateNode : currentBestMatchNode;
-  }
-  /**
-   * Creates an empty route tree node with the specified segment.
-   * This helper function is used during the tree construction.
-   *
-   * @param segment - The route segment that this node represents.
-   * @returns A new, empty route tree node.
-   */
-  createEmptyRouteTreeNode(segment) {
-    return {
-      segment,
-      insertionIndex: -1,
-      children: /* @__PURE__ */ new Map()
-    };
-  }
-};
-var URL_PARAMETER_REGEXP = /(?<!\\):([^/]+)/g;
-var VALID_REDIRECT_RESPONSE_CODES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
-function traverseRoutesConfig(options) {
-  return __asyncGenerator(this, null, function* () {
-    const {
-      routes,
-      compiler,
-      parentInjector,
-      parentRoute,
-      serverConfigRouteTree,
-      invokeGetPrerenderParams,
-      includePrerenderFallbackRoutes
-    } = options;
-    for (const route of routes) {
-      try {
-        const {
-          path: path2 = "",
-          redirectTo,
-          loadChildren: loadChildren2,
-          children
-        } = route;
-        const currentRoutePath = joinUrlParts(parentRoute, path2);
-        let matchedMetaData;
-        if (serverConfigRouteTree) {
-          matchedMetaData = serverConfigRouteTree.match(currentRoutePath);
-          if (!matchedMetaData) {
-            yield {
-              error: `The '${stripLeadingSlash(currentRoutePath)}' route does not match any route defined in the server routing configuration. Please ensure this route is added to the server routing configuration.`
-            };
-            continue;
-          }
-          matchedMetaData.presentInClientRouter = true;
-        }
-        const metadata = __spreadProps(__spreadValues({
-          renderMode: RenderMode.Prerender
-        }, matchedMetaData), {
-          // Match Angular router behavior
-          // ['one', 'two', ''] -> 'one/two/'
-          // ['one', 'two', 'three'] -> 'one/two/three'
-          route: path2 === "" ? addTrailingSlash(currentRoutePath) : currentRoutePath
-        });
-        delete metadata.presentInClientRouter;
-        if (metadata.renderMode === RenderMode.Prerender) {
-          yield* __yieldStar(handleSSGRoute(typeof redirectTo === "string" ? redirectTo : void 0, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes));
-        } else if (typeof redirectTo === "string") {
-          if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) {
-            yield {
-              error: `The '${metadata.status}' status code is not a valid redirect response code. Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(", ")}.`
-            };
-            continue;
-          }
-          yield __spreadProps(__spreadValues({}, metadata), {
-            redirectTo: resolveRedirectTo(metadata.route, redirectTo)
-          });
-        } else {
-          yield metadata;
-        }
-        if (children?.length) {
-          yield* __yieldStar(traverseRoutesConfig(__spreadProps(__spreadValues({}, options), {
-            routes: children,
-            parentRoute: currentRoutePath
-          })));
-        }
-        if (loadChildren2) {
-          const loadedChildRoutes = yield new __await(loadChildren(route, compiler, parentInjector).toPromise());
-          if (loadedChildRoutes) {
-            const {
-              routes: childRoutes,
-              injector = parentInjector
-            } = loadedChildRoutes;
-            yield* __yieldStar(traverseRoutesConfig(__spreadProps(__spreadValues({}, options), {
-              routes: childRoutes,
-              parentInjector: injector,
-              parentRoute: currentRoutePath
-            })));
-          }
-        }
-      } catch (error) {
-        yield {
-          error: `Error processing route '${stripLeadingSlash(route.path ?? "")}': ${error.message}`
-        };
-      }
-    }
-  });
-}
-function handleSSGRoute(redirectTo, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes) {
-  return __asyncGenerator(this, null, function* () {
-    if (metadata.renderMode !== RenderMode.Prerender) {
-      throw new Error(`'handleSSGRoute' was called for a route which rendering mode is not prerender.`);
-    }
-    const _a2 = metadata, {
-      route: currentRoutePath,
-      fallback
-    } = _a2, meta = __objRest(_a2, [
-      "route",
-      "fallback"
-    ]);
-    const getPrerenderParams = "getPrerenderParams" in meta ? meta.getPrerenderParams : void 0;
-    if ("getPrerenderParams" in meta) {
-      delete meta["getPrerenderParams"];
-    }
-    if (redirectTo !== void 0) {
-      meta.redirectTo = resolveRedirectTo(currentRoutePath, redirectTo);
-    }
-    if (!URL_PARAMETER_REGEXP.test(currentRoutePath)) {
-      yield __spreadProps(__spreadValues({}, meta), {
-        route: currentRoutePath
-      });
-      return;
-    }
-    if (invokeGetPrerenderParams) {
-      if (!getPrerenderParams) {
-        yield {
-          error: `The '${stripLeadingSlash(currentRoutePath)}' route uses prerendering and includes parameters, but 'getPrerenderParams' is missing. Please define 'getPrerenderParams' function for this route in your server routing configuration or specify a different 'renderMode'.`
-        };
-        return;
-      }
-      const parameters = yield new __await(runInInjectionContext(parentInjector, () => getPrerenderParams()));
-      try {
-        for (const params of parameters) {
-          const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, (match) => {
-            const parameterName = match.slice(1);
-            const value = params[parameterName];
-            if (typeof value !== "string") {
-              throw new Error(`The 'getPrerenderParams' function defined for the '${stripLeadingSlash(currentRoutePath)}' route returned a non-string value for parameter '${parameterName}'. Please make sure the 'getPrerenderParams' function returns values for all parameters specified in this route.`);
-            }
-            return value;
-          });
-          yield __spreadProps(__spreadValues({}, meta), {
-            route: routeWithResolvedParams,
-            redirectTo: redirectTo === void 0 ? void 0 : resolveRedirectTo(routeWithResolvedParams, redirectTo)
-          });
-        }
-      } catch (error) {
-        yield {
-          error: `${error.message}`
-        };
-        return;
-      }
-    }
-    if (includePrerenderFallbackRoutes && (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams)) {
-      yield __spreadProps(__spreadValues({}, meta), {
-        route: currentRoutePath,
-        renderMode: fallback === PrerenderFallback.Client ? RenderMode.Client : RenderMode.Server
-      });
-    }
-  });
-}
-function resolveRedirectTo(routePath, redirectTo) {
-  if (redirectTo[0] === "/") {
-    return redirectTo;
-  }
-  const segments = routePath.replace(URL_PARAMETER_REGEXP, "*").split("/");
-  segments.pop();
-  return joinUrlParts(...segments, redirectTo);
-}
-function buildServerConfigRouteTree({
-  routes,
-  appShellRoute
-}) {
-  const serverRoutes = [...routes];
-  if (appShellRoute !== void 0) {
-    serverRoutes.unshift({
-      path: appShellRoute,
-      renderMode: RenderMode.Prerender
-    });
-  }
-  const serverConfigRouteTree = new RouteTree();
-  const errors = [];
-  for (const _a2 of serverRoutes) {
-    const _b = _a2, {
-      path: path2
-    } = _b, metadata = __objRest(_b, [
-      "path"
-    ]);
-    if (path2[0] === "/") {
-      errors.push(`Invalid '${path2}' route configuration: the path cannot start with a slash.`);
-      continue;
-    }
-    serverConfigRouteTree.insert(path2, metadata);
-  }
-  return {
-    serverConfigRouteTree,
-    errors
-  };
-}
-function getRoutesFromAngularRouterConfig(bootstrap, document2, url, invokeGetPrerenderParams = false, includePrerenderFallbackRoutes = true) {
-  return __async(this, null, function* () {
-    const {
-      protocol,
-      host
-    } = url;
-    const platformRef = platformServer([{
-      provide: INITIAL_CONFIG,
-      useValue: {
-        document: document2,
-        url: `${protocol}//${host}/`
-      }
-    }, {
-      // An Angular Console Provider that does not print a set of predefined logs.
-      provide: Console,
-      // Using `useClass` would necessitate decorating `Console` with `@Injectable`,
-      // which would require switching from `ts_library` to `ng_module`. This change
-      // would also necessitate various patches of `@angular/bazel` to support ESM.
-      useFactory: () => new Console2()
-    }, {
-      // We cannot replace `ApplicationRef` with a different provider here due to the dependency injection (DI) hierarchy.
-      // This code is running at the platform level, where `ApplicationRef` is provided in the root injector.
-      // As a result, any attempt to replace it will cause the root provider to override the platform provider.
-      // TODO(alanagius): investigate exporting the app config directly which would help with: https://github.com/angular/angular/issues/59144
-      provide: APP_INITIALIZER,
-      multi: true,
-      useFactory: () => () => {
-        const appRef = inject(ApplicationRef);
-        appRef.bootstrap = () => void 0;
-      }
-    }]);
-    try {
-      let applicationRef;
-      if (isNgModule(bootstrap)) {
-        const moduleRef = yield platformRef.bootstrapModule(bootstrap);
-        applicationRef = moduleRef.injector.get(ApplicationRef);
-      } else {
-        applicationRef = yield bootstrap();
-      }
-      yield applicationRef.whenStable();
-      const injector = applicationRef.injector;
-      const router = injector.get(Router);
-      const routesResults = [];
-      const errors = [];
-      let baseHref = injector.get(APP_BASE_HREF, null, {
-        optional: true
-      }) ?? injector.get(PlatformLocation).getBaseHrefFromDOM();
-      if (baseHref.startsWith("./")) {
-        baseHref = baseHref.slice(2);
-      }
-      const compiler = injector.get(Compiler);
-      const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, {
-        optional: true
-      });
-      let serverConfigRouteTree;
-      if (serverRoutesConfig) {
-        const result2 = buildServerConfigRouteTree(serverRoutesConfig);
-        serverConfigRouteTree = result2.serverConfigRouteTree;
-        errors.push(...result2.errors);
-      }
-      if (errors.length) {
-        return {
-          baseHref,
-          routes: routesResults,
-          errors
-        };
-      }
-      if (router.config.length) {
-        const traverseRoutes = traverseRoutesConfig({
-          routes: router.config,
-          compiler,
-          parentInjector: injector,
-          parentRoute: "",
-          serverConfigRouteTree,
-          invokeGetPrerenderParams,
-          includePrerenderFallbackRoutes
-        });
-        try {
-          for (var iter = __forAwait(traverseRoutes), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
-            const result2 = temp.value;
-            if ("error" in result2) {
-              errors.push(result2.error);
-            } else {
-              routesResults.push(result2);
-            }
-          }
-        } catch (temp) {
-          error = [temp];
-        } finally {
-          try {
-            more && (temp = iter.return) && (yield temp.call(iter));
-          } finally {
-            if (error)
-              throw error[0];
-          }
-        }
-        if (serverConfigRouteTree) {
-          for (const {
-            route,
-            presentInClientRouter
-          } of serverConfigRouteTree.traverse()) {
-            if (presentInClientRouter || route === "**") {
-              continue;
-            }
-            errors.push(`The '${route}' server route does not match any routes defined in the Angular routing configuration (typically provided as a part of the 'provideRouter' call). Please make sure that the mentioned server route is present in the Angular routing configuration.`);
-          }
-        }
-      } else {
-        const rootRouteMetadata = serverConfigRouteTree?.match("") ?? {
-          route: "",
-          renderMode: RenderMode.Prerender
-        };
-        routesResults.push(__spreadProps(__spreadValues({}, rootRouteMetadata), {
-          // Matched route might be `/*` or `/**`, which would make Angular serve all routes rather than just `/`.
-          // So we limit to just `/` for the empty app router case.
-          route: ""
-        }));
-      }
-      return {
-        baseHref,
-        routes: routesResults,
-        errors,
-        appShellRoute: serverRoutesConfig?.appShellRoute
-      };
-    } finally {
-      platformRef.destroy();
-    }
-  });
-}
-function extractRoutesAndCreateRouteTree(options) {
-  const {
-    url,
-    manifest = getAngularAppManifest(),
-    invokeGetPrerenderParams = false,
-    includePrerenderFallbackRoutes = true,
-    signal
-  } = options;
-  function extract() {
-    return __async(this, null, function* () {
-      const routeTree = new RouteTree();
-      const document2 = yield new ServerAssets(manifest).getIndexServerHtml().text();
-      const bootstrap = yield manifest.bootstrap();
-      const {
-        baseHref,
-        appShellRoute,
-        routes,
-        errors
-      } = yield getRoutesFromAngularRouterConfig(bootstrap, document2, url, invokeGetPrerenderParams, includePrerenderFallbackRoutes);
-      for (const _a2 of routes) {
-        const _b = _a2, {
-          route
-        } = _b, metadata = __objRest(_b, [
-          "route"
-        ]);
-        if (metadata.redirectTo !== void 0) {
-          metadata.redirectTo = joinUrlParts(baseHref, metadata.redirectTo);
-        }
-        for (const [key, value] of Object.entries(metadata)) {
-          if (value === void 0) {
-            delete metadata[key];
-          }
-        }
-        const fullRoute = joinUrlParts(baseHref, route);
-        routeTree.insert(fullRoute, metadata);
-      }
-      return {
-        appShellRoute,
-        routeTree,
-        errors
-      };
-    });
-  }
-  return signal ? promiseWithAbort(extract(), signal, "Routes extraction") : extract();
-}
-var Hooks = class {
-  /**
-   * A map of hook names to arrays of hook functions.
-   * Each hook name can have multiple associated functions, which are executed in sequence.
-   */
-  store = /* @__PURE__ */ new Map();
-  /**
-   * Executes all hooks associated with the specified name, passing the given argument to each hook function.
-   * The hooks are invoked sequentially, and the argument may be modified by each hook.
-   *
-   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.
-   * @param name - The name of the hook whose functions will be executed.
-   * @param context - The input value to be passed to each hook function. The value is mutated by each hook function.
-   * @returns A promise that resolves once all hook functions have been executed.
-   *
-   * @example
-   * ```typescript
-   * const hooks = new Hooks();
-   * hooks.on('html:transform:pre', async (ctx) => {
-   *   ctx.html = ctx.html.replace(/foo/g, 'bar');
-   *   return ctx.html;
-   * });
-   * const result = await hooks.run('html:transform:pre', { html: '<div>foo</div>' });
-   * console.log(result); // '<div>bar</div>'
-   * ```
-   * @internal
-   */
-  run(name, context) {
-    return __async(this, null, function* () {
-      const hooks = this.store.get(name);
-      switch (name) {
-        case "html:transform:pre": {
-          if (!hooks) {
-            return context.html;
-          }
-          const ctx = __spreadValues({}, context);
-          for (const hook of hooks) {
-            ctx.html = yield hook(ctx);
-          }
-          return ctx.html;
-        }
-        default:
-          throw new Error(`Running hook "${name}" is not supported.`);
-      }
-    });
-  }
-  /**
-   * Registers a new hook function under the specified hook name.
-   * This function should be a function that takes an argument of type `T` and returns a `string` or `Promise<string>`.
-   *
-   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.
-   * @param name - The name of the hook under which the function will be registered.
-   * @param handler - A function to be executed when the hook is triggered. The handler will be called with an argument
-   *                  that may be modified by the hook functions.
-   *
-   * @remarks
-   * - If there are existing handlers registered under the given hook name, the new handler will be added to the list.
-   * - If no handlers are registered under the given hook name, a new list will be created with the handler as its first element.
-   *
-   * @example
-   * ```typescript
-   * hooks.on('html:transform:pre', async (ctx) => {
-   *   return ctx.html.replace(/foo/g, 'bar');
-   * });
-   * ```
-   */
-  on(name, handler) {
-    const hooks = this.store.get(name);
-    if (hooks) {
-      hooks.push(handler);
-    } else {
-      this.store.set(name, [handler]);
-    }
-  }
-  /**
-   * Checks if there are any hooks registered under the specified name.
-   *
-   * @param name - The name of the hook to check.
-   * @returns `true` if there are hooks registered under the specified name, otherwise `false`.
-   */
-  has(name) {
-    return !!this.store.get(name)?.length;
-  }
-};
-var ServerRouter = class _ServerRouter {
-  routeTree;
-  /**
-   * Creates an instance of the `ServerRouter`.
-   *
-   * @param routeTree - An instance of `RouteTree` that holds the routing information.
-   * The `RouteTree` is used to match request URLs to the appropriate route metadata.
-   */
-  constructor(routeTree) {
-    this.routeTree = routeTree;
-  }
-  /**
-   * Static property to track the ongoing build promise.
-   */
-  static #extractionPromise;
-  /**
-   * Creates or retrieves a `ServerRouter` instance based on the provided manifest and URL.
-   *
-   * If the manifest contains pre-built routes, a new `ServerRouter` is immediately created.
-   * Otherwise, it builds the router by extracting routes from the Angular configuration
-   * asynchronously. This method ensures that concurrent builds are prevented by re-using
-   * the same promise.
-   *
-   * @param manifest - An instance of `AngularAppManifest` that contains the route information.
-   * @param url - The URL for server-side rendering. The URL is needed to configure `ServerPlatformLocation`.
-   * This is necessary to ensure that API requests for relative paths succeed, which is crucial for correct route extraction.
-   * [Reference](https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51)
-   * @returns A promise resolving to a `ServerRouter` instance.
-   */
-  static from(manifest, url) {
-    if (manifest.routes) {
-      const routeTree = RouteTree.fromObject(manifest.routes);
-      return Promise.resolve(new _ServerRouter(routeTree));
-    }
-    _ServerRouter.#extractionPromise ??= extractRoutesAndCreateRouteTree({
-      url,
-      manifest
-    }).then(({
-      routeTree,
-      errors
-    }) => {
-      if (errors.length > 0) {
-        throw new Error("Error(s) occurred while extracting routes:\n" + errors.map((error) => `- ${error}`).join("\n"));
-      }
-      return new _ServerRouter(routeTree);
-    }).finally(() => {
-      _ServerRouter.#extractionPromise = void 0;
-    });
-    return _ServerRouter.#extractionPromise;
-  }
-  /**
-   * Matches a request URL against the route tree to retrieve route metadata.
-   *
-   * This method strips 'index.html' from the URL if it is present and then attempts
-   * to find a match in the route tree. If a match is found, it returns the associated
-   * route metadata; otherwise, it returns `undefined`.
-   *
-   * @param url - The URL to be matched against the route tree.
-   * @returns The metadata for the matched route or `undefined` if no match is found.
-   */
-  match(url) {
-    const {
-      pathname
-    } = stripIndexHtmlFromURL(url);
-    return this.routeTree.match(decodeURIComponent(pathname));
-  }
-};
-function sha256(data) {
-  return __async(this, null, function* () {
-    const encodedData = new TextEncoder().encode(data);
-    const hashBuffer = yield crypto.subtle.digest("SHA-256", encodedData);
-    const hashParts = [];
-    for (const h of new Uint8Array(hashBuffer)) {
-      hashParts.push(h.toString(16).padStart(2, "0"));
-    }
-    return hashParts.join("");
-  });
-}
-var MEDIA_SET_HANDLER_PATTERN = /^this\.media=["'](.*)["'];?$/;
-var CSP_MEDIA_ATTR = "ngCspMedia";
-var LINK_LOAD_SCRIPT_CONTENT = (() => `(() => {
-  const CSP_MEDIA_ATTR = '${CSP_MEDIA_ATTR}';
-  const documentElement = document.documentElement;
-
-  // Listener for load events on link tags.
-  const listener = (e) => {
-    const target = e.target;
-    if (
-      !target ||
-      target.tagName !== 'LINK' ||
-      !target.hasAttribute(CSP_MEDIA_ATTR)
-    ) {
-      return;
-    }
-
-    target.media = target.getAttribute(CSP_MEDIA_ATTR);
-    target.removeAttribute(CSP_MEDIA_ATTR);
-
-    if (!document.head.querySelector(\`link[\${CSP_MEDIA_ATTR}]\`)) {
-      documentElement.removeEventListener('load', listener);
-    }
-  };
-
-  documentElement.addEventListener('load', listener, true);
-})();`)();
-var BeastiesBase = class extends Beasties {
-};
-var InlineCriticalCssProcessor = class _InlineCriticalCssProcessor extends BeastiesBase {
-  readFile;
-  outputPath;
-  addedCspScriptsDocuments = /* @__PURE__ */ new WeakSet();
-  documentNonces = /* @__PURE__ */ new WeakMap();
-  constructor(readFile2, outputPath) {
-    super({
-      logger: {
-        // eslint-disable-next-line no-console
-        warn: (s) => console.warn(s),
-        // eslint-disable-next-line no-console
-        error: (s) => console.error(s),
-        info: () => {
-        }
-      },
-      logLevel: "warn",
-      path: outputPath,
-      publicPath: void 0,
-      compress: false,
-      pruneSource: false,
-      reduceInlineStyles: false,
-      mergeStylesheets: false,
-      // Note: if `preload` changes to anything other than `media`, the logic in
-      // `embedLinkedStylesheet` will have to be updated.
-      preload: "media",
-      noscriptFallback: true,
-      inlineFonts: true
-    });
-    this.readFile = readFile2;
-    this.outputPath = outputPath;
-  }
-  /**
-   * Override of the Beasties `embedLinkedStylesheet` method
-   * that makes it work with Angular's CSP APIs.
-   */
-  embedLinkedStylesheet(link2, document2) {
-    return __async(this, null, function* () {
-      if (link2.getAttribute("media") === "print" && link2.next?.name === "noscript") {
-        const media = link2.getAttribute("onload")?.match(MEDIA_SET_HANDLER_PATTERN);
-        if (media) {
-          link2.removeAttribute("onload");
-          link2.setAttribute("media", media[1]);
-          link2?.next?.remove();
-        }
-      }
-      const returnValue = yield __superGet(_InlineCriticalCssProcessor.prototype, this, "embedLinkedStylesheet").call(this, link2, document2);
-      const cspNonce = this.findCspNonce(document2);
-      if (cspNonce) {
-        const beastiesMedia = link2.getAttribute("onload")?.match(MEDIA_SET_HANDLER_PATTERN);
-        if (beastiesMedia) {
-          link2.removeAttribute("onload");
-          link2.setAttribute(CSP_MEDIA_ATTR, beastiesMedia[1]);
-          this.conditionallyInsertCspLoadingScript(document2, cspNonce, link2);
-        }
-        document2.head.children.forEach((child) => {
-          if (child.tagName === "style" && !child.hasAttribute("nonce")) {
-            child.setAttribute("nonce", cspNonce);
-          }
-        });
-      }
-      return returnValue;
-    });
-  }
-  /**
-   * Finds the CSP nonce for a specific document.
-   */
-  findCspNonce(document2) {
-    if (this.documentNonces.has(document2)) {
-      return this.documentNonces.get(document2);
-    }
-    const nonceElement = document2.querySelector("[ngCspNonce], [ngcspnonce]");
-    const cspNonce = nonceElement?.getAttribute("ngCspNonce") || nonceElement?.getAttribute("ngcspnonce") || null;
-    this.documentNonces.set(document2, cspNonce);
-    return cspNonce;
-  }
-  /**
-   * Inserts the `script` tag that swaps the critical CSS at runtime,
-   * if one hasn't been inserted into the document already.
-   */
-  conditionallyInsertCspLoadingScript(document2, nonce, link2) {
-    if (this.addedCspScriptsDocuments.has(document2)) {
-      return;
-    }
-    if (document2.head.textContent.includes(LINK_LOAD_SCRIPT_CONTENT)) {
-      this.addedCspScriptsDocuments.add(document2);
-      return;
-    }
-    const script = document2.createElement("script");
-    script.setAttribute("nonce", nonce);
-    script.textContent = LINK_LOAD_SCRIPT_CONTENT;
-    document2.head.insertBefore(script, link2);
-    this.addedCspScriptsDocuments.add(document2);
-  }
-};
-var LRUCache = class {
-  /**
-   * The maximum number of items the cache can hold.
-   */
-  capacity;
-  /**
-   * Internal storage for the cache, mapping keys to their associated nodes in the linked list.
-   */
-  cache = /* @__PURE__ */ new Map();
-  /**
-   * Head of the doubly linked list, representing the most recently used item.
-   */
-  head;
-  /**
-   * Tail of the doubly linked list, representing the least recently used item.
-   */
-  tail;
-  /**
-   * Creates a new LRUCache instance.
-   * @param capacity The maximum number of items the cache can hold.
-   */
-  constructor(capacity) {
-    this.capacity = capacity;
-  }
-  /**
-   * Gets the value associated with the given key.
-   * @param key The key to retrieve the value for.
-   * @returns The value associated with the key, or undefined if the key is not found.
-   */
-  get(key) {
-    const node2 = this.cache.get(key);
-    if (node2) {
-      this.moveToHead(node2);
-      return node2.value;
-    }
-    return void 0;
-  }
-  /**
-   * Puts a key-value pair into the cache.
-   * If the key already exists, the value is updated.
-   * If the cache is full, the least recently used item is evicted.
-   * @param key The key to insert or update.
-   * @param value The value to associate with the key.
-   */
-  put(key, value) {
-    const cachedNode = this.cache.get(key);
-    if (cachedNode) {
-      cachedNode.value = value;
-      this.moveToHead(cachedNode);
-      return;
-    }
-    const newNode = {
-      key,
-      value,
-      prev: void 0,
-      next: void 0
-    };
-    this.cache.set(key, newNode);
-    this.addToHead(newNode);
-    if (this.cache.size > this.capacity) {
-      const tail = this.removeTail();
-      if (tail) {
-        this.cache.delete(tail.key);
-      }
-    }
-  }
-  /**
-   * Adds a node to the head of the linked list.
-   * @param node The node to add.
-   */
-  addToHead(node2) {
-    node2.next = this.head;
-    node2.prev = void 0;
-    if (this.head) {
-      this.head.prev = node2;
-    }
-    this.head = node2;
-    if (!this.tail) {
-      this.tail = node2;
-    }
-  }
-  /**
-   * Removes a node from the linked list.
-   * @param node The node to remove.
-   */
-  removeNode(node2) {
-    if (node2.prev) {
-      node2.prev.next = node2.next;
-    } else {
-      this.head = node2.next;
-    }
-    if (node2.next) {
-      node2.next.prev = node2.prev;
-    } else {
-      this.tail = node2.prev;
-    }
-  }
-  /**
-   * Moves a node to the head of the linked list.
-   * @param node The node to move.
-   */
-  moveToHead(node2) {
-    this.removeNode(node2);
-    this.addToHead(node2);
-  }
-  /**
-   * Removes the tail node from the linked list.
-   * @returns The removed tail node, or undefined if the list is empty.
-   */
-  removeTail() {
-    const node2 = this.tail;
-    if (node2) {
-      this.removeNode(node2);
-    }
-    return node2;
-  }
-};
-var MAX_INLINE_CSS_CACHE_ENTRIES = 50;
-var SERVER_CONTEXT_VALUE = {
-  [RenderMode.Prerender]: "ssg",
-  [RenderMode.Server]: "ssr",
-  [RenderMode.Client]: ""
-};
-var AngularServerApp = class {
-  options;
-  /**
-   * Whether prerendered routes should be rendered on demand or served directly.
-   *
-   * @see {@link AngularServerAppOptions.allowStaticRouteRender} for more details.
-   */
-  allowStaticRouteRender;
-  /**
-   * Hooks for extending or modifying server behavior.
-   *
-   * @see {@link AngularServerAppOptions.hooks} for more details.
-   */
-  hooks;
-  /**
-   * Constructs an instance of `AngularServerApp`.
-   *
-   * @param options Optional configuration options for the server application.
-   */
-  constructor(options = {}) {
-    this.options = options;
-    this.allowStaticRouteRender = this.options.allowStaticRouteRender ?? false;
-    this.hooks = options.hooks ?? new Hooks();
-  }
-  /**
-   * The manifest associated with this server application.
-   */
-  manifest = getAngularAppManifest();
-  /**
-   * An instance of ServerAsset that handles server-side asset.
-   */
-  assets = new ServerAssets(this.manifest);
-  /**
-   * The router instance used for route matching and handling.
-   */
-  router;
-  /**
-   * The `inlineCriticalCssProcessor` is responsible for handling critical CSS inlining.
-   */
-  inlineCriticalCssProcessor;
-  /**
-   * The bootstrap mechanism for the server application.
-   */
-  boostrap;
-  /**
-   * Cache for storing critical CSS for pages.
-   * Stores a maximum of MAX_INLINE_CSS_CACHE_ENTRIES entries.
-   *
-   * Uses an LRU (Least Recently Used) eviction policy, meaning that when the cache is full,
-   * the least recently accessed page's critical CSS will be removed to make space for new entries.
-   */
-  criticalCssLRUCache = new LRUCache(MAX_INLINE_CSS_CACHE_ENTRIES);
-  /**
-   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,
-   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.
-   *
-   * @param request - The HTTP request to handle.
-   * @param requestContext - Optional context for rendering, such as metadata associated with the request.
-   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.
-   *
-   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route
-   * corresponding to `https://www.example.com/page`.
-   */
-  handle(request, requestContext) {
-    return __async(this, null, function* () {
-      const url = new URL(request.url);
-      this.router ??= yield ServerRouter.from(this.manifest, url);
-      const matchedRoute = this.router.match(url);
-      if (!matchedRoute) {
-        return null;
-      }
-      const {
-        redirectTo,
-        status,
-        renderMode
-      } = matchedRoute;
-      if (redirectTo !== void 0) {
-        return new Response(null, {
-          // Note: The status code is validated during route extraction.
-          // 302 Found is used by default for redirections
-          // See: https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static#status
-          status: status ?? 302,
-          headers: {
-            "Location": buildPathWithParams(redirectTo, url.pathname)
-          }
-        });
-      }
-      if (renderMode === RenderMode.Prerender) {
-        const response = yield this.handleServe(request, matchedRoute);
-        if (response) {
-          return response;
-        }
-      }
-      return promiseWithAbort(this.handleRendering(request, matchedRoute, requestContext), request.signal, `Request for: ${request.url}`);
-    });
-  }
-  /**
-   * Handles serving a prerendered static asset if available for the matched route.
-   *
-   * This method only supports `GET` and `HEAD` requests.
-   *
-   * @param request - The incoming HTTP request for serving a static page.
-   * @param matchedRoute - The metadata of the matched route for rendering.
-   * If not provided, the method attempts to find a matching route based on the request URL.
-   * @returns A promise that resolves to a `Response` object if the prerendered page is found, or `null`.
-   */
-  handleServe(request, matchedRoute) {
-    return __async(this, null, function* () {
-      const {
-        headers,
-        renderMode
-      } = matchedRoute;
-      if (renderMode !== RenderMode.Prerender) {
-        return null;
-      }
-      const {
-        method
-      } = request;
-      if (method !== "GET" && method !== "HEAD") {
-        return null;
-      }
-      const assetPath = this.buildServerAssetPathFromRequest(request);
-      const {
-        manifest: {
-          locale
-        },
-        assets
-      } = this;
-      if (!assets.hasServerAsset(assetPath)) {
-        return null;
-      }
-      const {
-        text,
-        hash,
-        size
-      } = assets.getServerAsset(assetPath);
-      const etag = `"${hash}"`;
-      return request.headers.get("if-none-match") === etag ? new Response(void 0, {
-        status: 304,
-        statusText: "Not Modified"
-      }) : new Response(yield text(), {
-        headers: __spreadValues(__spreadValues({
-          "Content-Length": size.toString(),
-          "ETag": etag,
-          "Content-Type": "text/html;charset=UTF-8"
-        }, locale !== void 0 ? {
-          "Content-Language": locale
-        } : {}), headers)
-      });
-    });
-  }
-  /**
-   * Handles the server-side rendering process for the given HTTP request.
-   * This method matches the request URL to a route and performs rendering if a matching route is found.
-   *
-   * @param request - The incoming HTTP request to be processed.
-   * @param matchedRoute - The metadata of the matched route for rendering.
-   * If not provided, the method attempts to find a matching route based on the request URL.
-   * @param requestContext - Optional additional context for rendering, such as request metadata.
-   *
-   * @returns A promise that resolves to the rendered response, or null if no matching route is found.
-   */
-  handleRendering(request, matchedRoute, requestContext) {
-    return __async(this, null, function* () {
-      const {
-        renderMode,
-        headers,
-        status
-      } = matchedRoute;
-      if (!this.allowStaticRouteRender && renderMode === RenderMode.Prerender) {
-        return null;
-      }
-      const url = new URL(request.url);
-      const platformProviders = [];
-      const {
-        manifest: {
-          bootstrap,
-          inlineCriticalCss,
-          locale
-        },
-        assets
-      } = this;
-      const responseInit = {
-        status,
-        headers: new Headers(__spreadValues(__spreadValues({
-          "Content-Type": "text/html;charset=UTF-8"
-        }, locale !== void 0 ? {
-          "Content-Language": locale
-        } : {}), headers))
-      };
-      if (renderMode === RenderMode.Server) {
-        platformProviders.push({
-          provide: REQUEST,
-          useValue: request
-        }, {
-          provide: REQUEST_CONTEXT,
-          useValue: requestContext
-        }, {
-          provide: RESPONSE_INIT,
-          useValue: responseInit
-        });
-      } else if (renderMode === RenderMode.Client) {
-        let html2 = yield assets.getServerAsset("index.csr.html").text();
-        html2 = yield this.runTransformsOnHtml(html2, url);
-        return new Response(html2, responseInit);
-      }
-      if (locale !== void 0) {
-        platformProviders.push({
-          provide: LOCALE_ID,
-          useValue: locale
-        });
-      }
-      this.boostrap ??= yield bootstrap();
-      let html = yield assets.getIndexServerHtml().text();
-      html = yield this.runTransformsOnHtml(html, url);
-      html = yield renderAngular(html, this.boostrap, url, platformProviders, SERVER_CONTEXT_VALUE[renderMode]);
-      if (inlineCriticalCss) {
-        this.inlineCriticalCssProcessor ??= new InlineCriticalCssProcessor((path2) => {
-          const fileName = path2.split("/").pop() ?? path2;
-          return this.assets.getServerAsset(fileName).text();
-        });
-        if (renderMode === RenderMode.Server && typeof crypto === "undefined") {
-          console.error(`The global 'crypto' module is unavailable. If you are running on Node.js, please ensure you are using version 20 or later, which includes built-in support for the Web Crypto module.`);
-        }
-        if (renderMode === RenderMode.Server && typeof crypto !== "undefined") {
-          const cacheKey = yield sha256(html);
-          let htmlWithCriticalCss = this.criticalCssLRUCache.get(cacheKey);
-          if (htmlWithCriticalCss === void 0) {
-            htmlWithCriticalCss = yield this.inlineCriticalCssProcessor.process(html);
-            this.criticalCssLRUCache.put(cacheKey, htmlWithCriticalCss);
-          }
-          html = htmlWithCriticalCss;
-        } else {
-          html = yield this.inlineCriticalCssProcessor.process(html);
-        }
-      }
-      return new Response(html, responseInit);
-    });
-  }
-  /**
-   * Constructs the asset path on the server based on the provided HTTP request.
-   *
-   * This method processes the incoming request URL to derive a path corresponding
-   * to the requested asset. It ensures the path points to the correct file (e.g.,
-   * `index.html`) and removes any base href if it is not part of the asset path.
-   *
-   * @param request - The incoming HTTP request object.
-   * @returns The server-relative asset path derived from the request.
-   */
-  buildServerAssetPathFromRequest(request) {
-    let {
-      pathname: assetPath
-    } = new URL(request.url);
-    if (!assetPath.endsWith("/index.html")) {
-      assetPath = joinUrlParts(assetPath, "index.html");
-    }
-    const {
-      baseHref
-    } = this.manifest;
-    if (baseHref.length > 1 && assetPath.startsWith(baseHref)) {
-      assetPath = assetPath.slice(baseHref.length);
-    }
-    return stripLeadingSlash(assetPath);
-  }
-  /**
-   * Runs the registered transform hooks on the given HTML content.
-   *
-   * @param html - The raw HTML content to be transformed.
-   * @param url - The URL associated with the HTML content, used for context during transformations.
-   * @returns A promise that resolves to the transformed HTML string.
-   */
-  runTransformsOnHtml(html, url) {
-    return __async(this, null, function* () {
-      if (this.hooks.has("html:transform:pre")) {
-        html = yield this.hooks.run("html:transform:pre", {
-          html,
-          url
-        });
-      }
-      return html;
-    });
-  }
-};
-var angularServerApp;
-function getOrCreateAngularServerApp(options) {
-  return angularServerApp ??= new AngularServerApp(options);
-}
-function destroyAngularServerApp() {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    resetCompiledComponents();
-  }
-  angularServerApp = void 0;
-}
-function getPotentialLocaleIdFromUrl(url, basePath) {
-  const {
-    pathname
-  } = url;
-  let start = basePath.length;
-  if (pathname[start] === "/") {
-    start++;
-  }
-  let end = pathname.indexOf("/", start);
-  if (end === -1) {
-    end = pathname.length;
-  }
-  return pathname.slice(start, end);
-}
-var AngularAppEngine = class _AngularAppEngine {
-  /**
-   * A flag to enable or disable the rendering of prerendered routes.
-   *
-   * Typically used during development to avoid prerendering all routes ahead of time,
-   * allowing them to be rendered on the fly as requested.
-   *
-   * @private
-   */
-  static ɵallowStaticRouteRender = false;
-  /**
-   * Hooks for extending or modifying the behavior of the server application.
-   * These hooks are used by the Angular CLI when running the development server and
-   * provide extensibility points for the application lifecycle.
-   *
-   * @private
-   */
-  static ɵhooks = new Hooks();
-  /**
-   * The manifest for the server application.
-   */
-  manifest = getAngularAppEngineManifest();
-  /**
-   * The number of entry points available in the server application's manifest.
-   */
-  entryPointsCount = Object.keys(this.manifest.entryPoints).length;
-  /**
-   * A cache that holds entry points, keyed by their potential locale string.
-   */
-  entryPointsCache = /* @__PURE__ */ new Map();
-  /**
-   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,
-   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.
-   *
-   * @param request - The HTTP request to handle.
-   * @param requestContext - Optional context for rendering, such as metadata associated with the request.
-   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.
-   *
-   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route
-   * corresponding to `https://www.example.com/page`.
-   */
-  handle(request, requestContext) {
-    return __async(this, null, function* () {
-      const serverApp = yield this.getAngularServerAppForRequest(request);
-      return serverApp ? serverApp.handle(request, requestContext) : null;
-    });
-  }
-  /**
-   * Retrieves the Angular server application instance for a given request.
-   *
-   * This method checks if the request URL corresponds to an Angular application entry point.
-   * If so, it initializes or retrieves an instance of the Angular server application for that entry point.
-   * Requests that resemble file requests (except for `/index.html`) are skipped.
-   *
-   * @param request - The incoming HTTP request object.
-   * @returns A promise that resolves to an `AngularServerApp` instance if a valid entry point is found,
-   * or `null` if no entry point matches the request URL.
-   */
-  getAngularServerAppForRequest(request) {
-    return __async(this, null, function* () {
-      const url = new URL(request.url);
-      const entryPoint = yield this.getEntryPointExportsForUrl(url);
-      if (!entryPoint) {
-        return null;
-      }
-      const ɵgetOrCreateAngularServerApp = entryPoint.ɵgetOrCreateAngularServerApp;
-      const serverApp = ɵgetOrCreateAngularServerApp({
-        allowStaticRouteRender: _AngularAppEngine.ɵallowStaticRouteRender,
-        hooks: _AngularAppEngine.ɵhooks
-      });
-      return serverApp;
-    });
-  }
-  /**
-   * Retrieves the exports for a specific entry point, caching the result.
-   *
-   * @param potentialLocale - The locale string used to find the corresponding entry point.
-   * @returns A promise that resolves to the entry point exports or `undefined` if not found.
-   */
-  getEntryPointExports(potentialLocale) {
-    const cachedEntryPoint = this.entryPointsCache.get(potentialLocale);
-    if (cachedEntryPoint) {
-      return cachedEntryPoint;
-    }
-    const {
-      entryPoints
-    } = this.manifest;
-    const entryPoint = entryPoints[potentialLocale];
-    if (!entryPoint) {
-      return void 0;
-    }
-    const entryPointExports = entryPoint();
-    this.entryPointsCache.set(potentialLocale, entryPointExports);
-    return entryPointExports;
-  }
-  /**
-   * Retrieves the entry point for a given URL by determining the locale and mapping it to
-   * the appropriate application bundle.
-   *
-   * This method determines the appropriate entry point and locale for rendering the application by examining the URL.
-   * If there is only one entry point available, it is returned regardless of the URL.
-   * Otherwise, the method extracts a potential locale identifier from the URL and looks up the corresponding entry point.
-   *
-   * @param url - The URL of the request.
-   * @returns A promise that resolves to the entry point exports or `undefined` if not found.
-   */
-  getEntryPointExportsForUrl(url) {
-    const {
-      basePath
-    } = this.manifest;
-    if (this.entryPointsCount === 1) {
-      return this.getEntryPointExports("");
-    }
-    const potentialLocale = getPotentialLocaleIdFromUrl(url, basePath);
-    return this.getEntryPointExports(potentialLocale);
-  }
-};
-function createRequestHandler(handler) {
-  handler["__ng_request_handler__"] = true;
-  return handler;
-}
-
-export {
-  setAngularAppManifest,
-  setAngularAppEngineManifest,
-  RenderMode,
-  PrerenderFallback,
-  provideServerRoutesConfig,
-  getRoutesFromAngularRouterConfig,
-  extractRoutesAndCreateRouteTree,
-  InlineCriticalCssProcessor,
-  getOrCreateAngularServerApp,
-  destroyAngularServerApp,
-  AngularAppEngine,
-  createRequestHandler
-};
-//# sourceMappingURL=chunk-AR6IXM4V.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-AR6IXM4V.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-AR6IXM4V.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/ssr/third_party/beasties/index.js", "../../../../../../node_modules/@angular/ssr/fesm2022/ssr.mjs"],
-  "sourcesContent": ["function createNotImplementedError(name) {\n  throw new Error(`[unenv] ${name} is not implemented yet!`);\n}\nfunction notImplemented(name) {\n  const fn = () => {\n    throw createNotImplementedError(name);\n  };\n  return Object.assign(fn, {\n    __unenv__: true\n  });\n}\nconst access = notImplemented(\"fs.access\");\nconst copyFile = notImplemented(\"fs.copyFile\");\nconst cp = notImplemented(\"fs.cp\");\nconst open = notImplemented(\"fs.open\");\nconst opendir = notImplemented(\"fs.opendir\");\nconst rename = notImplemented(\"fs.rename\");\nconst truncate = notImplemented(\"fs.truncate\");\nconst rm = notImplemented(\"fs.rm\");\nconst rmdir = notImplemented(\"fs.rmdir\");\nconst mkdir = notImplemented(\"fs.mkdir\");\nconst readdir = notImplemented(\"fs.readdir\");\nconst readlink = notImplemented(\"fs.readlink\");\nconst symlink = notImplemented(\"fs.symlink\");\nconst lstat = notImplemented(\"fs.lstat\");\nconst stat = notImplemented(\"fs.stat\");\nconst link = notImplemented(\"fs.link\");\nconst unlink = notImplemented(\"fs.unlink\");\nconst chmod = notImplemented(\"fs.chmod\");\nconst lchmod = notImplemented(\"fs.lchmod\");\nconst lchown = notImplemented(\"fs.lchown\");\nconst chown = notImplemented(\"fs.chown\");\nconst utimes = notImplemented(\"fs.utimes\");\nconst lutimes = notImplemented(\"fs.lutimes\");\nconst realpath = notImplemented(\"fs.realpath\");\nconst mkdtemp = notImplemented(\"fs.mkdtemp\");\nconst writeFile = notImplemented(\"fs.writeFile\");\nconst appendFile = notImplemented(\"fs.appendFile\");\nconst readFile$1 = notImplemented(\"fs.readFile\");\nnotImplemented(\"fs.watch\");\nconst statfs = notImplemented(\"fs.statfs\");\nfunction notImplementedAsync(name) {\n  const fn = notImplemented(name);\n  fn.__promisify__ = () => notImplemented(name + \".__promisify__\");\n  fn.native = fn;\n  return fn;\n}\nfunction callbackify(fn) {\n  const fnc = function (...args) {\n    const cb = args.pop();\n    fn().catch(error => cb(error)).then(val => cb(void 0, val));\n  };\n  fnc.__promisify__ = fn;\n  fnc.native = fnc;\n  return fnc;\n}\ncallbackify(access);\ncallbackify(appendFile);\ncallbackify(chown);\ncallbackify(chmod);\ncallbackify(copyFile);\ncallbackify(cp);\ncallbackify(lchown);\ncallbackify(lchmod);\ncallbackify(link);\ncallbackify(lstat);\ncallbackify(lutimes);\ncallbackify(mkdir);\ncallbackify(mkdtemp);\ncallbackify(realpath);\ncallbackify(open);\ncallbackify(opendir);\ncallbackify(readdir);\nconst readFile = callbackify(readFile$1);\ncallbackify(readlink);\ncallbackify(rename);\ncallbackify(rm);\ncallbackify(rmdir);\ncallbackify(stat);\ncallbackify(symlink);\ncallbackify(truncate);\ncallbackify(unlink);\ncallbackify(utimes);\ncallbackify(writeFile);\ncallbackify(statfs);\nnotImplementedAsync(\"fs.close\");\nnotImplementedAsync(\"fs.createReadStream\");\nnotImplementedAsync(\"fs.createWriteStream\");\nnotImplementedAsync(\"fs.exists\");\nnotImplementedAsync(\"fs.fchown\");\nnotImplementedAsync(\"fs.fchmod\");\nnotImplementedAsync(\"fs.fdatasync\");\nnotImplementedAsync(\"fs.fstat\");\nnotImplementedAsync(\"fs.fsync\");\nnotImplementedAsync(\"fs.ftruncate\");\nnotImplementedAsync(\"fs.futimes\");\nnotImplementedAsync(\"fs.lstatSync\");\nnotImplementedAsync(\"fs.read\");\nnotImplementedAsync(\"fs.readv\");\nnotImplementedAsync(\"fs.realpathSync\");\nnotImplementedAsync(\"fs.statSync\");\nnotImplementedAsync(\"fs.unwatchFile\");\nnotImplementedAsync(\"fs.watch\");\nnotImplementedAsync(\"fs.watchFile\");\nnotImplementedAsync(\"fs.write\");\nnotImplementedAsync(\"fs.writev\");\nnotImplementedAsync(\"fs._toUnixTimestamp\");\nnotImplementedAsync(\"fs.openAsBlob\");\nnotImplemented(\"fs.appendFileSync\");\nnotImplemented(\"fs.accessSync\");\nnotImplemented(\"fs.chownSync\");\nnotImplemented(\"fs.chmodSync\");\nnotImplemented(\"fs.closeSync\");\nnotImplemented(\"fs.copyFileSync\");\nnotImplemented(\"fs.cpSync\");\nnotImplemented(\"fs.fchownSync\");\nnotImplemented(\"fs.fchmodSync\");\nnotImplemented(\"fs.fdatasyncSync\");\nnotImplemented(\"fs.fstatSync\");\nnotImplemented(\"fs.fsyncSync\");\nnotImplemented(\"fs.ftruncateSync\");\nnotImplemented(\"fs.futimesSync\");\nnotImplemented(\"fs.lchownSync\");\nnotImplemented(\"fs.lchmodSync\");\nnotImplemented(\"fs.linkSync\");\nnotImplemented(\"fs.lutimesSync\");\nnotImplemented(\"fs.mkdirSync\");\nnotImplemented(\"fs.mkdtempSync\");\nnotImplemented(\"fs.openSync\");\nnotImplemented(\"fs.opendirSync\");\nnotImplemented(\"fs.readdirSync\");\nnotImplemented(\"fs.readSync\");\nnotImplemented(\"fs.readvSync\");\nnotImplemented(\"fs.readFileSync\");\nnotImplemented(\"fs.readlinkSync\");\nnotImplemented(\"fs.renameSync\");\nnotImplemented(\"fs.rmSync\");\nnotImplemented(\"fs.rmdirSync\");\nnotImplemented(\"fs.symlinkSync\");\nnotImplemented(\"fs.truncateSync\");\nnotImplemented(\"fs.unlinkSync\");\nnotImplemented(\"fs.utimesSync\");\nnotImplemented(\"fs.writeFileSync\");\nnotImplemented(\"fs.writeSync\");\nnotImplemented(\"fs.writevSync\");\nnotImplemented(\"fs.statfsSync\");\nconst _DRIVE_LETTER_START_RE = /^[A-Za-z]:\\//;\nfunction normalizeWindowsPath(input = \"\") {\n  if (!input) {\n    return input;\n  }\n  return input.replace(/\\\\/g, \"/\").replace(_DRIVE_LETTER_START_RE, r => r.toUpperCase());\n}\nconst _UNC_REGEX = /^[/\\\\]{2}/;\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/;\nconst _DRIVE_LETTER_RE = /^[A-Za-z]:$/;\nconst _ROOT_FOLDER_RE = /^\\/([A-Za-z]:)?$/;\nconst sep = \"/\";\nconst delimiter = \":\";\nconst normalize = function (path) {\n  if (path.length === 0) {\n    return \".\";\n  }\n  path = normalizeWindowsPath(path);\n  const isUNCPath = path.match(_UNC_REGEX);\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSeparator = path[path.length - 1] === \"/\";\n  path = normalizeString(path, !isPathAbsolute);\n  if (path.length === 0) {\n    if (isPathAbsolute) {\n      return \"/\";\n    }\n    return trailingSeparator ? \"./\" : \".\";\n  }\n  if (trailingSeparator) {\n    path += \"/\";\n  }\n  if (_DRIVE_LETTER_RE.test(path)) {\n    path += \"/\";\n  }\n  if (isUNCPath) {\n    if (!isPathAbsolute) {\n      return `//./${path}`;\n    }\n    return `//${path}`;\n  }\n  return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;\n};\nconst join = function (...arguments_) {\n  if (arguments_.length === 0) {\n    return \".\";\n  }\n  let joined;\n  for (const argument of arguments_) {\n    if (argument && argument.length > 0) {\n      if (joined === void 0) {\n        joined = argument;\n      } else {\n        joined += `/${argument}`;\n      }\n    }\n  }\n  if (joined === void 0) {\n    return \".\";\n  }\n  return normalize(joined.replace(/\\/\\/+/g, \"/\"));\n};\nfunction cwd() {\n  if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n    return process.cwd().replace(/\\\\/g, \"/\");\n  }\n  return \"/\";\n}\nconst resolve = function (...arguments_) {\n  arguments_ = arguments_.map(argument => normalizeWindowsPath(argument));\n  let resolvedPath = \"\";\n  let resolvedAbsolute = false;\n  for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n    const path = index >= 0 ? arguments_[index] : cwd();\n    if (!path || path.length === 0) {\n      continue;\n    }\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = isAbsolute(path);\n  }\n  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n  if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n    return `/${resolvedPath}`;\n  }\n  return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n  let res = \"\";\n  let lastSegmentLength = 0;\n  let lastSlash = -1;\n  let dots = 0;\n  let char = null;\n  for (let index = 0; index <= path.length; ++index) {\n    if (index < path.length) {\n      char = path[index];\n    } else if (char === \"/\") {\n      break;\n    } else {\n      char = \"/\";\n    }\n    if (char === \"/\") {\n      if (lastSlash === index - 1 || dots === 1) ;else if (dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n          if (res.length > 2) {\n            const lastSlashIndex = res.lastIndexOf(\"/\");\n            if (lastSlashIndex === -1) {\n              res = \"\";\n              lastSegmentLength = 0;\n            } else {\n              res = res.slice(0, lastSlashIndex);\n              lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n            }\n            lastSlash = index;\n            dots = 0;\n            continue;\n          } else if (res.length > 0) {\n            res = \"\";\n            lastSegmentLength = 0;\n            lastSlash = index;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          res += res.length > 0 ? \"/..\" : \"..\";\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0) {\n          res += `/${path.slice(lastSlash + 1, index)}`;\n        } else {\n          res = path.slice(lastSlash + 1, index);\n        }\n        lastSegmentLength = index - lastSlash - 1;\n      }\n      lastSlash = index;\n      dots = 0;\n    } else if (char === \".\" && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\nconst isAbsolute = function (p) {\n  return _IS_ABSOLUTE_RE.test(p);\n};\nconst toNamespacedPath = function (p) {\n  return normalizeWindowsPath(p);\n};\nconst _EXTNAME_RE = /.(\\.[^./]+)$/;\nconst extname = function (p) {\n  const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));\n  return match && match[1] || \"\";\n};\nconst relative = function (from, to) {\n  const _from = resolve(from).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  const _to = resolve(to).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  if (_to[0][1] === \":\" && _from[0][1] === \":\" && _from[0] !== _to[0]) {\n    return _to.join(\"/\");\n  }\n  const _fromCopy = [..._from];\n  for (const segment of _fromCopy) {\n    if (_to[0] !== segment) {\n      break;\n    }\n    _from.shift();\n    _to.shift();\n  }\n  return [..._from.map(() => \"..\"), ..._to].join(\"/\");\n};\nconst dirname = function (p) {\n  const segments = normalizeWindowsPath(p).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n  if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {\n    segments[0] += \"/\";\n  }\n  return segments.join(\"/\") || (isAbsolute(p) ? \"/\" : \".\");\n};\nconst format = function (p) {\n  const segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);\n  return normalizeWindowsPath(p.root ? resolve(...segments) : segments.join(\"/\"));\n};\nconst basename = function (p, extension) {\n  const lastSegment = normalizeWindowsPath(p).split(\"/\").pop();\n  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;\n};\nconst parse$3 = function (p) {\n  const root = normalizeWindowsPath(p).split(\"/\").shift() || \"/\";\n  const base = basename(p);\n  const extension = extname(base);\n  return {\n    root,\n    dir: dirname(p),\n    base,\n    ext: extension,\n    name: base.slice(0, base.length - extension.length)\n  };\n};\nconst path = {\n  __proto__: null,\n  basename: basename,\n  delimiter: delimiter,\n  dirname: dirname,\n  extname: extname,\n  format: format,\n  isAbsolute: isAbsolute,\n  join: join,\n  normalize: normalize,\n  normalizeString: normalizeString,\n  parse: parse$3,\n  relative: relative,\n  resolve: resolve,\n  sep: sep,\n  toNamespacedPath: toNamespacedPath\n};\nvar _path = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  basename: basename,\n  default: path,\n  delimiter: delimiter,\n  dirname: dirname,\n  extname: extname,\n  format: format,\n  isAbsolute: isAbsolute,\n  join: join,\n  normalize: normalize,\n  normalizeString: normalizeString,\n  parse: parse$3,\n  relative: relative,\n  resolve: resolve,\n  sep: sep,\n  toNamespacedPath: toNamespacedPath\n});\nconst _pathModule = {\n  ..._path,\n  platform: \"posix\",\n  posix: void 0,\n  win32: void 0\n};\n_pathModule.posix = _pathModule;\n_pathModule.win32 = _pathModule;\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nfunction getAugmentedNamespace(n) {\n  if (n.__esModule) return n;\n  var f = n.default;\n  if (typeof f == \"function\") {\n    var a = function a() {\n      if (this instanceof a) {\n        return Reflect.construct(f, arguments, this.constructor);\n      }\n      return f.apply(this, arguments);\n    };\n    a.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, '__esModule', {\n    value: true\n  });\n  Object.keys(n).forEach(function (k) {\n    var d = Object.getOwnPropertyDescriptor(n, k);\n    Object.defineProperty(a, k, d.get ? d : {\n      enumerable: true,\n      get: function () {\n        return n[k];\n      }\n    });\n  });\n  return a;\n}\nvar picocolors_browser = {\n  exports: {}\n};\nvar hasRequiredPicocolors_browser;\nfunction requirePicocolors_browser() {\n  if (hasRequiredPicocolors_browser) return picocolors_browser.exports;\n  hasRequiredPicocolors_browser = 1;\n  var x = String;\n  var create = function () {\n    return {\n      isColorSupported: false,\n      reset: x,\n      bold: x,\n      dim: x,\n      italic: x,\n      underline: x,\n      inverse: x,\n      hidden: x,\n      strikethrough: x,\n      black: x,\n      red: x,\n      green: x,\n      yellow: x,\n      blue: x,\n      magenta: x,\n      cyan: x,\n      white: x,\n      gray: x,\n      bgBlack: x,\n      bgRed: x,\n      bgGreen: x,\n      bgYellow: x,\n      bgBlue: x,\n      bgMagenta: x,\n      bgCyan: x,\n      bgWhite: x,\n      blackBright: x,\n      redBright: x,\n      greenBright: x,\n      yellowBright: x,\n      blueBright: x,\n      magentaBright: x,\n      cyanBright: x,\n      whiteBright: x,\n      bgBlackBright: x,\n      bgRedBright: x,\n      bgGreenBright: x,\n      bgYellowBright: x,\n      bgBlueBright: x,\n      bgMagentaBright: x,\n      bgCyanBright: x,\n      bgWhiteBright: x\n    };\n  };\n  picocolors_browser.exports = create();\n  picocolors_browser.exports.createColors = create;\n  return picocolors_browser.exports;\n}\nvar _nodeResolve_empty = {};\nvar _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  default: _nodeResolve_empty\n});\nvar require$$2 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);\nvar cssSyntaxError;\nvar hasRequiredCssSyntaxError;\nfunction requireCssSyntaxError() {\n  if (hasRequiredCssSyntaxError) return cssSyntaxError;\n  hasRequiredCssSyntaxError = 1;\n  let pico = requirePicocolors_browser();\n  let terminalHighlight = require$$2;\n  class CssSyntaxError extends Error {\n    constructor(message, line, column, source, file, plugin) {\n      super(message);\n      this.name = 'CssSyntaxError';\n      this.reason = message;\n      if (file) {\n        this.file = file;\n      }\n      if (source) {\n        this.source = source;\n      }\n      if (plugin) {\n        this.plugin = plugin;\n      }\n      if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n        if (typeof line === 'number') {\n          this.line = line;\n          this.column = column;\n        } else {\n          this.line = line.line;\n          this.column = line.column;\n          this.endLine = column.line;\n          this.endColumn = column.column;\n        }\n      }\n      this.setMessage();\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, CssSyntaxError);\n      }\n    }\n    setMessage() {\n      this.message = this.plugin ? this.plugin + ': ' : '';\n      this.message += this.file ? this.file : '<css input>';\n      if (typeof this.line !== 'undefined') {\n        this.message += ':' + this.line + ':' + this.column;\n      }\n      this.message += ': ' + this.reason;\n    }\n    showSourceCode(color) {\n      if (!this.source) return '';\n      let css = this.source;\n      if (color == null) color = pico.isColorSupported;\n      let aside = text => text;\n      let mark = text => text;\n      let highlight = text => text;\n      if (color) {\n        let {\n          bold,\n          gray,\n          red\n        } = pico.createColors(true);\n        mark = text => bold(red(text));\n        aside = text => gray(text);\n        if (terminalHighlight) {\n          highlight = text => terminalHighlight(text);\n        }\n      }\n      let lines = css.split(/\\r?\\n/);\n      let start = Math.max(this.line - 3, 0);\n      let end = Math.min(this.line + 2, lines.length);\n      let maxWidth = String(end).length;\n      return lines.slice(start, end).map((line, index) => {\n        let number = start + 1 + index;\n        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';\n        if (number === this.line) {\n          if (line.length > 160) {\n            let padding = 20;\n            let subLineStart = Math.max(0, this.column - padding);\n            let subLineEnd = Math.max(this.column + padding, this.endColumn + padding);\n            let subLine = line.slice(subLineStart, subLineEnd);\n            let spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\\t]/g, ' ');\n            return mark('>') + aside(gutter) + highlight(subLine) + '\\n ' + spacing + mark('^');\n          }\n          let spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ');\n          return mark('>') + aside(gutter) + highlight(line) + '\\n ' + spacing + mark('^');\n        }\n        return ' ' + aside(gutter) + highlight(line);\n      }).join('\\n');\n    }\n    toString() {\n      let code = this.showSourceCode();\n      if (code) {\n        code = '\\n\\n' + code + '\\n';\n      }\n      return this.name + ': ' + this.message + code;\n    }\n  }\n  cssSyntaxError = CssSyntaxError;\n  CssSyntaxError.default = CssSyntaxError;\n  return cssSyntaxError;\n}\nvar stringifier;\nvar hasRequiredStringifier;\nfunction requireStringifier() {\n  if (hasRequiredStringifier) return stringifier;\n  hasRequiredStringifier = 1;\n  const DEFAULT_RAW = {\n    after: '\\n',\n    beforeClose: '\\n',\n    beforeComment: '\\n',\n    beforeDecl: '\\n',\n    beforeOpen: ' ',\n    beforeRule: '\\n',\n    colon: ': ',\n    commentLeft: ' ',\n    commentRight: ' ',\n    emptyBody: '',\n    indent: '    ',\n    semicolon: false\n  };\n  function capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n  }\n  class Stringifier {\n    constructor(builder) {\n      this.builder = builder;\n    }\n    atrule(node, semicolon) {\n      let name = '@' + node.name;\n      let params = node.params ? this.rawValue(node, 'params') : '';\n      if (typeof node.raws.afterName !== 'undefined') {\n        name += node.raws.afterName;\n      } else if (params) {\n        name += ' ';\n      }\n      if (node.nodes) {\n        this.block(node, name + params);\n      } else {\n        let end = (node.raws.between || '') + (semicolon ? ';' : '');\n        this.builder(name + params + end, node);\n      }\n    }\n    beforeAfter(node, detect) {\n      let value;\n      if (node.type === 'decl') {\n        value = this.raw(node, null, 'beforeDecl');\n      } else if (node.type === 'comment') {\n        value = this.raw(node, null, 'beforeComment');\n      } else if (detect === 'before') {\n        value = this.raw(node, null, 'beforeRule');\n      } else {\n        value = this.raw(node, null, 'beforeClose');\n      }\n      let buf = node.parent;\n      let depth = 0;\n      while (buf && buf.type !== 'root') {\n        depth += 1;\n        buf = buf.parent;\n      }\n      if (value.includes('\\n')) {\n        let indent = this.raw(node, null, 'indent');\n        if (indent.length) {\n          for (let step = 0; step < depth; step++) value += indent;\n        }\n      }\n      return value;\n    }\n    block(node, start) {\n      let between = this.raw(node, 'between', 'beforeOpen');\n      this.builder(start + between + '{', node, 'start');\n      let after;\n      if (node.nodes && node.nodes.length) {\n        this.body(node);\n        after = this.raw(node, 'after');\n      } else {\n        after = this.raw(node, 'after', 'emptyBody');\n      }\n      if (after) this.builder(after);\n      this.builder('}', node, 'end');\n    }\n    body(node) {\n      let last = node.nodes.length - 1;\n      while (last > 0) {\n        if (node.nodes[last].type !== 'comment') break;\n        last -= 1;\n      }\n      let semicolon = this.raw(node, 'semicolon');\n      for (let i = 0; i < node.nodes.length; i++) {\n        let child = node.nodes[i];\n        let before = this.raw(child, 'before');\n        if (before) this.builder(before);\n        this.stringify(child, last !== i || semicolon);\n      }\n    }\n    comment(node) {\n      let left = this.raw(node, 'left', 'commentLeft');\n      let right = this.raw(node, 'right', 'commentRight');\n      this.builder('/*' + left + node.text + right + '*/', node);\n    }\n    decl(node, semicolon) {\n      let between = this.raw(node, 'between', 'colon');\n      let string = node.prop + between + this.rawValue(node, 'value');\n      if (node.important) {\n        string += node.raws.important || ' !important';\n      }\n      if (semicolon) string += ';';\n      this.builder(string, node);\n    }\n    document(node) {\n      this.body(node);\n    }\n    raw(node, own, detect) {\n      let value;\n      if (!detect) detect = own;\n\n      // Already had\n      if (own) {\n        value = node.raws[own];\n        if (typeof value !== 'undefined') return value;\n      }\n      let parent = node.parent;\n      if (detect === 'before') {\n        // Hack for first rule in CSS\n        if (!parent || parent.type === 'root' && parent.first === node) {\n          return '';\n        }\n\n        // `root` nodes in `document` should use only their own raws\n        if (parent && parent.type === 'document') {\n          return '';\n        }\n      }\n\n      // Floating child without parent\n      if (!parent) return DEFAULT_RAW[detect];\n\n      // Detect style by other nodes\n      let root = node.root();\n      if (!root.rawCache) root.rawCache = {};\n      if (typeof root.rawCache[detect] !== 'undefined') {\n        return root.rawCache[detect];\n      }\n      if (detect === 'before' || detect === 'after') {\n        return this.beforeAfter(node, detect);\n      } else {\n        let method = 'raw' + capitalize(detect);\n        if (this[method]) {\n          value = this[method](root, node);\n        } else {\n          root.walk(i => {\n            value = i.raws[own];\n            if (typeof value !== 'undefined') return false;\n          });\n        }\n      }\n      if (typeof value === 'undefined') value = DEFAULT_RAW[detect];\n      root.rawCache[detect] = value;\n      return value;\n    }\n    rawBeforeClose(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length > 0) {\n          if (typeof i.raws.after !== 'undefined') {\n            value = i.raws.after;\n            if (value.includes('\\n')) {\n              value = value.replace(/[^\\n]+$/, '');\n            }\n            return false;\n          }\n        }\n      });\n      if (value) value = value.replace(/\\S/g, '');\n      return value;\n    }\n    rawBeforeComment(root, node) {\n      let value;\n      root.walkComments(i => {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false;\n        }\n      });\n      if (typeof value === 'undefined') {\n        value = this.raw(node, null, 'beforeDecl');\n      } else if (value) {\n        value = value.replace(/\\S/g, '');\n      }\n      return value;\n    }\n    rawBeforeDecl(root, node) {\n      let value;\n      root.walkDecls(i => {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false;\n        }\n      });\n      if (typeof value === 'undefined') {\n        value = this.raw(node, null, 'beforeRule');\n      } else if (value) {\n        value = value.replace(/\\S/g, '');\n      }\n      return value;\n    }\n    rawBeforeOpen(root) {\n      let value;\n      root.walk(i => {\n        if (i.type !== 'decl') {\n          value = i.raws.between;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawBeforeRule(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && (i.parent !== root || root.first !== i)) {\n          if (typeof i.raws.before !== 'undefined') {\n            value = i.raws.before;\n            if (value.includes('\\n')) {\n              value = value.replace(/[^\\n]+$/, '');\n            }\n            return false;\n          }\n        }\n      });\n      if (value) value = value.replace(/\\S/g, '');\n      return value;\n    }\n    rawColon(root) {\n      let value;\n      root.walkDecls(i => {\n        if (typeof i.raws.between !== 'undefined') {\n          value = i.raws.between.replace(/[^\\s:]/g, '');\n          return false;\n        }\n      });\n      return value;\n    }\n    rawEmptyBody(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length === 0) {\n          value = i.raws.after;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawIndent(root) {\n      if (root.raws.indent) return root.raws.indent;\n      let value;\n      root.walk(i => {\n        let p = i.parent;\n        if (p && p !== root && p.parent && p.parent === root) {\n          if (typeof i.raws.before !== 'undefined') {\n            let parts = i.raws.before.split('\\n');\n            value = parts[parts.length - 1];\n            value = value.replace(/\\S/g, '');\n            return false;\n          }\n        }\n      });\n      return value;\n    }\n    rawSemicolon(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n          value = i.raws.semicolon;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawValue(node, prop) {\n      let value = node[prop];\n      let raw = node.raws[prop];\n      if (raw && raw.value === value) {\n        return raw.raw;\n      }\n      return value;\n    }\n    root(node) {\n      this.body(node);\n      if (node.raws.after) this.builder(node.raws.after);\n    }\n    rule(node) {\n      this.block(node, this.rawValue(node, 'selector'));\n      if (node.raws.ownSemicolon) {\n        this.builder(node.raws.ownSemicolon, node, 'end');\n      }\n    }\n    stringify(node, semicolon) {\n      /* c8 ignore start */\n      if (!this[node.type]) {\n        throw new Error('Unknown AST node type ' + node.type + '. ' + 'Maybe you need to change PostCSS stringifier.');\n      }\n      /* c8 ignore stop */\n      this[node.type](node, semicolon);\n    }\n  }\n  stringifier = Stringifier;\n  Stringifier.default = Stringifier;\n  return stringifier;\n}\nvar stringify_1;\nvar hasRequiredStringify;\nfunction requireStringify() {\n  if (hasRequiredStringify) return stringify_1;\n  hasRequiredStringify = 1;\n  let Stringifier = requireStringifier();\n  function stringify(node, builder) {\n    let str = new Stringifier(builder);\n    str.stringify(node);\n  }\n  stringify_1 = stringify;\n  stringify.default = stringify;\n  return stringify_1;\n}\nvar symbols = {};\nvar hasRequiredSymbols;\nfunction requireSymbols() {\n  if (hasRequiredSymbols) return symbols;\n  hasRequiredSymbols = 1;\n  symbols.isClean = Symbol('isClean');\n  symbols.my = Symbol('my');\n  return symbols;\n}\nvar node;\nvar hasRequiredNode$1;\nfunction requireNode$1() {\n  if (hasRequiredNode$1) return node;\n  hasRequiredNode$1 = 1;\n  let CssSyntaxError = requireCssSyntaxError();\n  let Stringifier = requireStringifier();\n  let stringify = requireStringify();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  function cloneNode(obj, parent) {\n    let cloned = new obj.constructor();\n    for (let i in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n        /* c8 ignore next 2 */\n        continue;\n      }\n      if (i === 'proxyCache') continue;\n      let value = obj[i];\n      let type = typeof value;\n      if (i === 'parent' && type === 'object') {\n        if (parent) cloned[i] = parent;\n      } else if (i === 'source') {\n        cloned[i] = value;\n      } else if (Array.isArray(value)) {\n        cloned[i] = value.map(j => cloneNode(j, cloned));\n      } else {\n        if (type === 'object' && value !== null) value = cloneNode(value);\n        cloned[i] = value;\n      }\n    }\n    return cloned;\n  }\n  function sourceOffset(inputCSS, position) {\n    // Not all custom syntaxes support `offset` in `source.start` and `source.end`\n    if (position && typeof position.offset !== 'undefined') {\n      return position.offset;\n    }\n    let column = 1;\n    let line = 1;\n    let offset = 0;\n    for (let i = 0; i < inputCSS.length; i++) {\n      if (line === position.line && column === position.column) {\n        offset = i;\n        break;\n      }\n      if (inputCSS[i] === '\\n') {\n        column = 1;\n        line += 1;\n      } else {\n        column += 1;\n      }\n    }\n    return offset;\n  }\n  class Node {\n    constructor(defaults = {}) {\n      this.raws = {};\n      this[isClean] = false;\n      this[my] = true;\n      for (let name in defaults) {\n        if (name === 'nodes') {\n          this.nodes = [];\n          for (let node of defaults[name]) {\n            if (typeof node.clone === 'function') {\n              this.append(node.clone());\n            } else {\n              this.append(node);\n            }\n          }\n        } else {\n          this[name] = defaults[name];\n        }\n      }\n    }\n    addToError(error) {\n      error.postcssNode = this;\n      if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n        let s = this.source;\n        error.stack = error.stack.replace(/\\n\\s{4}at /, `$&${s.input.from}:${s.start.line}:${s.start.column}$&`);\n      }\n      return error;\n    }\n    after(add) {\n      this.parent.insertAfter(this, add);\n      return this;\n    }\n    assign(overrides = {}) {\n      for (let name in overrides) {\n        this[name] = overrides[name];\n      }\n      return this;\n    }\n    before(add) {\n      this.parent.insertBefore(this, add);\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      delete this.raws.before;\n      delete this.raws.after;\n      if (!keepBetween) delete this.raws.between;\n    }\n    clone(overrides = {}) {\n      let cloned = cloneNode(this);\n      for (let name in overrides) {\n        cloned[name] = overrides[name];\n      }\n      return cloned;\n    }\n    cloneAfter(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertAfter(this, cloned);\n      return cloned;\n    }\n    cloneBefore(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertBefore(this, cloned);\n      return cloned;\n    }\n    error(message, opts = {}) {\n      if (this.source) {\n        let {\n          end,\n          start\n        } = this.rangeBy(opts);\n        return this.source.input.error(message, {\n          column: start.column,\n          line: start.line\n        }, {\n          column: end.column,\n          line: end.line\n        }, opts);\n      }\n      return new CssSyntaxError(message);\n    }\n    getProxyProcessor() {\n      return {\n        get(node, prop) {\n          if (prop === 'proxyOf') {\n            return node;\n          } else if (prop === 'root') {\n            return () => node.root().toProxy();\n          } else {\n            return node[prop];\n          }\n        },\n        set(node, prop, value) {\n          if (node[prop] === value) return true;\n          node[prop] = value;\n          if (prop === 'prop' || prop === 'value' || prop === 'name' || prop === 'params' || prop === 'important' || /* c8 ignore next */\n          prop === 'text') {\n            node.markDirty();\n          }\n          return true;\n        }\n      };\n    }\n\n    /* c8 ignore next 3 */\n    markClean() {\n      this[isClean] = true;\n    }\n    markDirty() {\n      if (this[isClean]) {\n        this[isClean] = false;\n        let next = this;\n        while (next = next.parent) {\n          next[isClean] = false;\n        }\n      }\n    }\n    next() {\n      if (!this.parent) return undefined;\n      let index = this.parent.index(this);\n      return this.parent.nodes[index + 1];\n    }\n    positionBy(opts) {\n      let pos = this.source.start;\n      if (opts.index) {\n        pos = this.positionInside(opts.index);\n      } else if (opts.word) {\n        let stringRepresentation = this.source.input.css.slice(sourceOffset(this.source.input.css, this.source.start), sourceOffset(this.source.input.css, this.source.end));\n        let index = stringRepresentation.indexOf(opts.word);\n        if (index !== -1) pos = this.positionInside(index);\n      }\n      return pos;\n    }\n    positionInside(index) {\n      let column = this.source.start.column;\n      let line = this.source.start.line;\n      let offset = sourceOffset(this.source.input.css, this.source.start);\n      let end = offset + index;\n      for (let i = offset; i < end; i++) {\n        if (this.source.input.css[i] === '\\n') {\n          column = 1;\n          line += 1;\n        } else {\n          column += 1;\n        }\n      }\n      return {\n        column,\n        line\n      };\n    }\n    prev() {\n      if (!this.parent) return undefined;\n      let index = this.parent.index(this);\n      return this.parent.nodes[index - 1];\n    }\n    rangeBy(opts) {\n      let start = {\n        column: this.source.start.column,\n        line: this.source.start.line\n      };\n      let end = this.source.end ? {\n        column: this.source.end.column + 1,\n        line: this.source.end.line\n      } : {\n        column: start.column + 1,\n        line: start.line\n      };\n      if (opts.word) {\n        let stringRepresentation = this.source.input.css.slice(sourceOffset(this.source.input.css, this.source.start), sourceOffset(this.source.input.css, this.source.end));\n        let index = stringRepresentation.indexOf(opts.word);\n        if (index !== -1) {\n          start = this.positionInside(index);\n          end = this.positionInside(index + opts.word.length);\n        }\n      } else {\n        if (opts.start) {\n          start = {\n            column: opts.start.column,\n            line: opts.start.line\n          };\n        } else if (opts.index) {\n          start = this.positionInside(opts.index);\n        }\n        if (opts.end) {\n          end = {\n            column: opts.end.column,\n            line: opts.end.line\n          };\n        } else if (typeof opts.endIndex === 'number') {\n          end = this.positionInside(opts.endIndex);\n        } else if (opts.index) {\n          end = this.positionInside(opts.index + 1);\n        }\n      }\n      if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n        end = {\n          column: start.column + 1,\n          line: start.line\n        };\n      }\n      return {\n        end,\n        start\n      };\n    }\n    raw(prop, defaultType) {\n      let str = new Stringifier();\n      return str.raw(this, prop, defaultType);\n    }\n    remove() {\n      if (this.parent) {\n        this.parent.removeChild(this);\n      }\n      this.parent = undefined;\n      return this;\n    }\n    replaceWith(...nodes) {\n      if (this.parent) {\n        let bookmark = this;\n        let foundSelf = false;\n        for (let node of nodes) {\n          if (node === this) {\n            foundSelf = true;\n          } else if (foundSelf) {\n            this.parent.insertAfter(bookmark, node);\n            bookmark = node;\n          } else {\n            this.parent.insertBefore(bookmark, node);\n          }\n        }\n        if (!foundSelf) {\n          this.remove();\n        }\n      }\n      return this;\n    }\n    root() {\n      let result = this;\n      while (result.parent && result.parent.type !== 'document') {\n        result = result.parent;\n      }\n      return result;\n    }\n    toJSON(_, inputs) {\n      let fixed = {};\n      let emitInputs = inputs == null;\n      inputs = inputs || new Map();\n      let inputsNextIndex = 0;\n      for (let name in this) {\n        if (!Object.prototype.hasOwnProperty.call(this, name)) {\n          /* c8 ignore next 2 */\n          continue;\n        }\n        if (name === 'parent' || name === 'proxyCache') continue;\n        let value = this[name];\n        if (Array.isArray(value)) {\n          fixed[name] = value.map(i => {\n            if (typeof i === 'object' && i.toJSON) {\n              return i.toJSON(null, inputs);\n            } else {\n              return i;\n            }\n          });\n        } else if (typeof value === 'object' && value.toJSON) {\n          fixed[name] = value.toJSON(null, inputs);\n        } else if (name === 'source') {\n          let inputId = inputs.get(value.input);\n          if (inputId == null) {\n            inputId = inputsNextIndex;\n            inputs.set(value.input, inputsNextIndex);\n            inputsNextIndex++;\n          }\n          fixed[name] = {\n            end: value.end,\n            inputId,\n            start: value.start\n          };\n        } else {\n          fixed[name] = value;\n        }\n      }\n      if (emitInputs) {\n        fixed.inputs = [...inputs.keys()].map(input => input.toJSON());\n      }\n      return fixed;\n    }\n    toProxy() {\n      if (!this.proxyCache) {\n        this.proxyCache = new Proxy(this, this.getProxyProcessor());\n      }\n      return this.proxyCache;\n    }\n    toString(stringifier = stringify) {\n      if (stringifier.stringify) stringifier = stringifier.stringify;\n      let result = '';\n      stringifier(this, i => {\n        result += i;\n      });\n      return result;\n    }\n    warn(result, text, opts) {\n      let data = {\n        node: this\n      };\n      for (let i in opts) data[i] = opts[i];\n      return result.warn(text, data);\n    }\n    get proxyOf() {\n      return this;\n    }\n  }\n  node = Node;\n  Node.default = Node;\n  return node;\n}\nvar comment;\nvar hasRequiredComment;\nfunction requireComment() {\n  if (hasRequiredComment) return comment;\n  hasRequiredComment = 1;\n  let Node = requireNode$1();\n  class Comment extends Node {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'comment';\n    }\n  }\n  comment = Comment;\n  Comment.default = Comment;\n  return comment;\n}\nvar declaration;\nvar hasRequiredDeclaration;\nfunction requireDeclaration() {\n  if (hasRequiredDeclaration) return declaration;\n  hasRequiredDeclaration = 1;\n  let Node = requireNode$1();\n  class Declaration extends Node {\n    constructor(defaults) {\n      if (defaults && typeof defaults.value !== 'undefined' && typeof defaults.value !== 'string') {\n        defaults = {\n          ...defaults,\n          value: String(defaults.value)\n        };\n      }\n      super(defaults);\n      this.type = 'decl';\n    }\n    get variable() {\n      return this.prop.startsWith('--') || this.prop[0] === '$';\n    }\n  }\n  declaration = Declaration;\n  Declaration.default = Declaration;\n  return declaration;\n}\nvar container;\nvar hasRequiredContainer$1;\nfunction requireContainer$1() {\n  if (hasRequiredContainer$1) return container;\n  hasRequiredContainer$1 = 1;\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Node = requireNode$1();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  let AtRule, parse, Root, Rule;\n  function cleanSource(nodes) {\n    return nodes.map(i => {\n      if (i.nodes) i.nodes = cleanSource(i.nodes);\n      delete i.source;\n      return i;\n    });\n  }\n  function markTreeDirty(node) {\n    node[isClean] = false;\n    if (node.proxyOf.nodes) {\n      for (let i of node.proxyOf.nodes) {\n        markTreeDirty(i);\n      }\n    }\n  }\n  class Container extends Node {\n    append(...children) {\n      for (let child of children) {\n        let nodes = this.normalize(child, this.last);\n        for (let node of nodes) this.proxyOf.nodes.push(node);\n      }\n      this.markDirty();\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      super.cleanRaws(keepBetween);\n      if (this.nodes) {\n        for (let node of this.nodes) node.cleanRaws(keepBetween);\n      }\n    }\n    each(callback) {\n      if (!this.proxyOf.nodes) return undefined;\n      let iterator = this.getIterator();\n      let index, result;\n      while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n        index = this.indexes[iterator];\n        result = callback(this.proxyOf.nodes[index], index);\n        if (result === false) break;\n        this.indexes[iterator] += 1;\n      }\n      delete this.indexes[iterator];\n      return result;\n    }\n    every(condition) {\n      return this.nodes.every(condition);\n    }\n    getIterator() {\n      if (!this.lastEach) this.lastEach = 0;\n      if (!this.indexes) this.indexes = {};\n      this.lastEach += 1;\n      let iterator = this.lastEach;\n      this.indexes[iterator] = 0;\n      return iterator;\n    }\n    getProxyProcessor() {\n      return {\n        get(node, prop) {\n          if (prop === 'proxyOf') {\n            return node;\n          } else if (!node[prop]) {\n            return node[prop];\n          } else if (prop === 'each' || typeof prop === 'string' && prop.startsWith('walk')) {\n            return (...args) => {\n              return node[prop](...args.map(i => {\n                if (typeof i === 'function') {\n                  return (child, index) => i(child.toProxy(), index);\n                } else {\n                  return i;\n                }\n              }));\n            };\n          } else if (prop === 'every' || prop === 'some') {\n            return cb => {\n              return node[prop]((child, ...other) => cb(child.toProxy(), ...other));\n            };\n          } else if (prop === 'root') {\n            return () => node.root().toProxy();\n          } else if (prop === 'nodes') {\n            return node.nodes.map(i => i.toProxy());\n          } else if (prop === 'first' || prop === 'last') {\n            return node[prop].toProxy();\n          } else {\n            return node[prop];\n          }\n        },\n        set(node, prop, value) {\n          if (node[prop] === value) return true;\n          node[prop] = value;\n          if (prop === 'name' || prop === 'params' || prop === 'selector') {\n            node.markDirty();\n          }\n          return true;\n        }\n      };\n    }\n    index(child) {\n      if (typeof child === 'number') return child;\n      if (child.proxyOf) child = child.proxyOf;\n      return this.proxyOf.nodes.indexOf(child);\n    }\n    insertAfter(exist, add) {\n      let existIndex = this.index(exist);\n      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n      existIndex = this.index(exist);\n      for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node);\n      let index;\n      for (let id in this.indexes) {\n        index = this.indexes[id];\n        if (existIndex < index) {\n          this.indexes[id] = index + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    insertBefore(exist, add) {\n      let existIndex = this.index(exist);\n      let type = existIndex === 0 ? 'prepend' : false;\n      let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n      existIndex = this.index(exist);\n      for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node);\n      let index;\n      for (let id in this.indexes) {\n        index = this.indexes[id];\n        if (existIndex <= index) {\n          this.indexes[id] = index + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    normalize(nodes, sample) {\n      if (typeof nodes === 'string') {\n        nodes = cleanSource(parse(nodes).nodes);\n      } else if (typeof nodes === 'undefined') {\n        nodes = [];\n      } else if (Array.isArray(nodes)) {\n        nodes = nodes.slice(0);\n        for (let i of nodes) {\n          if (i.parent) i.parent.removeChild(i, 'ignore');\n        }\n      } else if (nodes.type === 'root' && this.type !== 'document') {\n        nodes = nodes.nodes.slice(0);\n        for (let i of nodes) {\n          if (i.parent) i.parent.removeChild(i, 'ignore');\n        }\n      } else if (nodes.type) {\n        nodes = [nodes];\n      } else if (nodes.prop) {\n        if (typeof nodes.value === 'undefined') {\n          throw new Error('Value field is missed in node creation');\n        } else if (typeof nodes.value !== 'string') {\n          nodes.value = String(nodes.value);\n        }\n        nodes = [new Declaration(nodes)];\n      } else if (nodes.selector || nodes.selectors) {\n        nodes = [new Rule(nodes)];\n      } else if (nodes.name) {\n        nodes = [new AtRule(nodes)];\n      } else if (nodes.text) {\n        nodes = [new Comment(nodes)];\n      } else {\n        throw new Error('Unknown node type in node creation');\n      }\n      let processed = nodes.map(i => {\n        /* c8 ignore next */\n        if (!i[my]) Container.rebuild(i);\n        i = i.proxyOf;\n        if (i.parent) i.parent.removeChild(i);\n        if (i[isClean]) markTreeDirty(i);\n        if (!i.raws) i.raws = {};\n        if (typeof i.raws.before === 'undefined') {\n          if (sample && typeof sample.raws.before !== 'undefined') {\n            i.raws.before = sample.raws.before.replace(/\\S/g, '');\n          }\n        }\n        i.parent = this.proxyOf;\n        return i;\n      });\n      return processed;\n    }\n    prepend(...children) {\n      children = children.reverse();\n      for (let child of children) {\n        let nodes = this.normalize(child, this.first, 'prepend').reverse();\n        for (let node of nodes) this.proxyOf.nodes.unshift(node);\n        for (let id in this.indexes) {\n          this.indexes[id] = this.indexes[id] + nodes.length;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    push(child) {\n      child.parent = this;\n      this.proxyOf.nodes.push(child);\n      return this;\n    }\n    removeAll() {\n      for (let node of this.proxyOf.nodes) node.parent = undefined;\n      this.proxyOf.nodes = [];\n      this.markDirty();\n      return this;\n    }\n    removeChild(child) {\n      child = this.index(child);\n      this.proxyOf.nodes[child].parent = undefined;\n      this.proxyOf.nodes.splice(child, 1);\n      let index;\n      for (let id in this.indexes) {\n        index = this.indexes[id];\n        if (index >= child) {\n          this.indexes[id] = index - 1;\n        }\n      }\n      this.markDirty();\n      return this;\n    }\n    replaceValues(pattern, opts, callback) {\n      if (!callback) {\n        callback = opts;\n        opts = {};\n      }\n      this.walkDecls(decl => {\n        if (opts.props && !opts.props.includes(decl.prop)) return;\n        if (opts.fast && !decl.value.includes(opts.fast)) return;\n        decl.value = decl.value.replace(pattern, callback);\n      });\n      this.markDirty();\n      return this;\n    }\n    some(condition) {\n      return this.nodes.some(condition);\n    }\n    walk(callback) {\n      return this.each((child, i) => {\n        let result;\n        try {\n          result = callback(child, i);\n        } catch (e) {\n          throw child.addToError(e);\n        }\n        if (result !== false && child.walk) {\n          result = child.walk(callback);\n        }\n        return result;\n      });\n    }\n    walkAtRules(name, callback) {\n      if (!callback) {\n        callback = name;\n        return this.walk((child, i) => {\n          if (child.type === 'atrule') {\n            return callback(child, i);\n          }\n        });\n      }\n      if (name instanceof RegExp) {\n        return this.walk((child, i) => {\n          if (child.type === 'atrule' && name.test(child.name)) {\n            return callback(child, i);\n          }\n        });\n      }\n      return this.walk((child, i) => {\n        if (child.type === 'atrule' && child.name === name) {\n          return callback(child, i);\n        }\n      });\n    }\n    walkComments(callback) {\n      return this.walk((child, i) => {\n        if (child.type === 'comment') {\n          return callback(child, i);\n        }\n      });\n    }\n    walkDecls(prop, callback) {\n      if (!callback) {\n        callback = prop;\n        return this.walk((child, i) => {\n          if (child.type === 'decl') {\n            return callback(child, i);\n          }\n        });\n      }\n      if (prop instanceof RegExp) {\n        return this.walk((child, i) => {\n          if (child.type === 'decl' && prop.test(child.prop)) {\n            return callback(child, i);\n          }\n        });\n      }\n      return this.walk((child, i) => {\n        if (child.type === 'decl' && child.prop === prop) {\n          return callback(child, i);\n        }\n      });\n    }\n    walkRules(selector, callback) {\n      if (!callback) {\n        callback = selector;\n        return this.walk((child, i) => {\n          if (child.type === 'rule') {\n            return callback(child, i);\n          }\n        });\n      }\n      if (selector instanceof RegExp) {\n        return this.walk((child, i) => {\n          if (child.type === 'rule' && selector.test(child.selector)) {\n            return callback(child, i);\n          }\n        });\n      }\n      return this.walk((child, i) => {\n        if (child.type === 'rule' && child.selector === selector) {\n          return callback(child, i);\n        }\n      });\n    }\n    get first() {\n      if (!this.proxyOf.nodes) return undefined;\n      return this.proxyOf.nodes[0];\n    }\n    get last() {\n      if (!this.proxyOf.nodes) return undefined;\n      return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n    }\n  }\n  Container.registerParse = dependant => {\n    parse = dependant;\n  };\n  Container.registerRule = dependant => {\n    Rule = dependant;\n  };\n  Container.registerAtRule = dependant => {\n    AtRule = dependant;\n  };\n  Container.registerRoot = dependant => {\n    Root = dependant;\n  };\n  container = Container;\n  Container.default = Container;\n\n  /* c8 ignore start */\n  Container.rebuild = node => {\n    if (node.type === 'atrule') {\n      Object.setPrototypeOf(node, AtRule.prototype);\n    } else if (node.type === 'rule') {\n      Object.setPrototypeOf(node, Rule.prototype);\n    } else if (node.type === 'decl') {\n      Object.setPrototypeOf(node, Declaration.prototype);\n    } else if (node.type === 'comment') {\n      Object.setPrototypeOf(node, Comment.prototype);\n    } else if (node.type === 'root') {\n      Object.setPrototypeOf(node, Root.prototype);\n    }\n    node[my] = true;\n    if (node.nodes) {\n      node.nodes.forEach(child => {\n        Container.rebuild(child);\n      });\n    }\n  };\n  /* c8 ignore stop */\n  return container;\n}\nvar atRule;\nvar hasRequiredAtRule;\nfunction requireAtRule() {\n  if (hasRequiredAtRule) return atRule;\n  hasRequiredAtRule = 1;\n  let Container = requireContainer$1();\n  class AtRule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'atrule';\n    }\n    append(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.append(...children);\n    }\n    prepend(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.prepend(...children);\n    }\n  }\n  atRule = AtRule;\n  AtRule.default = AtRule;\n  Container.registerAtRule(AtRule);\n  return atRule;\n}\nvar document;\nvar hasRequiredDocument;\nfunction requireDocument() {\n  if (hasRequiredDocument) return document;\n  hasRequiredDocument = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  class Document extends Container {\n    constructor(defaults) {\n      // type needs to be passed to super, otherwise child roots won't be normalized correctly\n      super({\n        type: 'document',\n        ...defaults\n      });\n      if (!this.nodes) {\n        this.nodes = [];\n      }\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Document.registerLazyResult = dependant => {\n    LazyResult = dependant;\n  };\n  Document.registerProcessor = dependant => {\n    Processor = dependant;\n  };\n  document = Document;\n  Document.default = Document;\n  return document;\n}\nvar nonSecure;\nvar hasRequiredNonSecure;\nfunction requireNonSecure() {\n  if (hasRequiredNonSecure) return nonSecure;\n  hasRequiredNonSecure = 1;\n  let urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n  let customAlphabet = (alphabet, defaultSize = 21) => {\n    return (size = defaultSize) => {\n      let id = '';\n      let i = size;\n      while (i--) {\n        id += alphabet[Math.random() * alphabet.length | 0];\n      }\n      return id;\n    };\n  };\n  let nanoid = (size = 21) => {\n    let id = '';\n    let i = size;\n    while (i--) {\n      id += urlAlphabet[Math.random() * 64 | 0];\n    }\n    return id;\n  };\n  nonSecure = {\n    nanoid,\n    customAlphabet\n  };\n  return nonSecure;\n}\nvar previousMap;\nvar hasRequiredPreviousMap;\nfunction requirePreviousMap() {\n  if (hasRequiredPreviousMap) return previousMap;\n  hasRequiredPreviousMap = 1;\n  let {\n    existsSync,\n    readFileSync\n  } = require$$2;\n  let {\n    dirname,\n    join\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  function fromBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str, 'base64').toString();\n    } else {\n      /* c8 ignore next 2 */\n      return window.atob(str);\n    }\n  }\n  class PreviousMap {\n    constructor(css, opts) {\n      if (opts.map === false) return;\n      this.loadAnnotation(css);\n      this.inline = this.startWith(this.annotation, 'data:');\n      let prev = opts.map ? opts.map.prev : undefined;\n      let text = this.loadMap(opts.from, prev);\n      if (!this.mapFile && opts.from) {\n        this.mapFile = opts.from;\n      }\n      if (this.mapFile) this.root = dirname(this.mapFile);\n      if (text) this.text = text;\n    }\n    consumer() {\n      if (!this.consumerCache) {\n        this.consumerCache = new SourceMapConsumer(this.text);\n      }\n      return this.consumerCache;\n    }\n    decodeInline(text) {\n      let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n      let baseUri = /^data:application\\/json;base64,/;\n      let charsetUri = /^data:application\\/json;charset=utf-?8,/;\n      let uri = /^data:application\\/json,/;\n      let uriMatch = text.match(charsetUri) || text.match(uri);\n      if (uriMatch) {\n        return decodeURIComponent(text.substr(uriMatch[0].length));\n      }\n      let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri);\n      if (baseUriMatch) {\n        return fromBase64(text.substr(baseUriMatch[0].length));\n      }\n      let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n      throw new Error('Unsupported source map encoding ' + encoding);\n    }\n    getAnnotationURL(sourceMapString) {\n      return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim();\n    }\n    isMap(map) {\n      if (typeof map !== 'object') return false;\n      return typeof map.mappings === 'string' || typeof map._mappings === 'string' || Array.isArray(map.sections);\n    }\n    loadAnnotation(css) {\n      let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/g);\n      if (!comments) return;\n\n      // sourceMappingURLs from comments, strings, etc.\n      let start = css.lastIndexOf(comments.pop());\n      let end = css.indexOf('*/', start);\n      if (start > -1 && end > -1) {\n        // Locate the last sourceMappingURL to avoid pickin\n        this.annotation = this.getAnnotationURL(css.substring(start, end));\n      }\n    }\n    loadFile(path) {\n      this.root = dirname(path);\n      if (existsSync(path)) {\n        this.mapFile = path;\n        return readFileSync(path, 'utf-8').toString().trim();\n      }\n    }\n    loadMap(file, prev) {\n      if (prev === false) return false;\n      if (prev) {\n        if (typeof prev === 'string') {\n          return prev;\n        } else if (typeof prev === 'function') {\n          let prevPath = prev(file);\n          if (prevPath) {\n            let map = this.loadFile(prevPath);\n            if (!map) {\n              throw new Error('Unable to load previous source map: ' + prevPath.toString());\n            }\n            return map;\n          }\n        } else if (prev instanceof SourceMapConsumer) {\n          return SourceMapGenerator.fromSourceMap(prev).toString();\n        } else if (prev instanceof SourceMapGenerator) {\n          return prev.toString();\n        } else if (this.isMap(prev)) {\n          return JSON.stringify(prev);\n        } else {\n          throw new Error('Unsupported previous source map format: ' + prev.toString());\n        }\n      } else if (this.inline) {\n        return this.decodeInline(this.annotation);\n      } else if (this.annotation) {\n        let map = this.annotation;\n        if (file) map = join(dirname(file), map);\n        return this.loadFile(map);\n      }\n    }\n    startWith(string, start) {\n      if (!string) return false;\n      return string.substr(0, start.length) === start;\n    }\n    withContent() {\n      return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    }\n  }\n  previousMap = PreviousMap;\n  PreviousMap.default = PreviousMap;\n  return previousMap;\n}\nvar input;\nvar hasRequiredInput;\nfunction requireInput() {\n  if (hasRequiredInput) return input;\n  hasRequiredInput = 1;\n  let {\n    nanoid\n  } = /*@__PURE__*/requireNonSecure();\n  let {\n    isAbsolute,\n    resolve\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  let {\n    fileURLToPath,\n    pathToFileURL\n  } = require$$2;\n  let CssSyntaxError = requireCssSyntaxError();\n  let PreviousMap = requirePreviousMap();\n  let terminalHighlight = require$$2;\n  let fromOffsetCache = Symbol('fromOffsetCache');\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(resolve && isAbsolute);\n  class Input {\n    constructor(css, opts = {}) {\n      if (css === null || typeof css === 'undefined' || typeof css === 'object' && !css.toString) {\n        throw new Error(`PostCSS received ${css} instead of CSS string`);\n      }\n      this.css = css.toString();\n      if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n        this.hasBOM = true;\n        this.css = this.css.slice(1);\n      } else {\n        this.hasBOM = false;\n      }\n      if (opts.from) {\n        if (!pathAvailable || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n          this.file = opts.from;\n        } else {\n          this.file = resolve(opts.from);\n        }\n      }\n      if (pathAvailable && sourceMapAvailable) {\n        let map = new PreviousMap(this.css, opts);\n        if (map.text) {\n          this.map = map;\n          let file = map.consumer().file;\n          if (!this.file && file) this.file = this.mapResolve(file);\n        }\n      }\n      if (!this.file) {\n        this.id = '<input css ' + nanoid(6) + '>';\n      }\n      if (this.map) this.map.file = this.from;\n    }\n    error(message, line, column, opts = {}) {\n      let endColumn, endLine, result;\n      if (line && typeof line === 'object') {\n        let start = line;\n        let end = column;\n        if (typeof start.offset === 'number') {\n          let pos = this.fromOffset(start.offset);\n          line = pos.line;\n          column = pos.col;\n        } else {\n          line = start.line;\n          column = start.column;\n        }\n        if (typeof end.offset === 'number') {\n          let pos = this.fromOffset(end.offset);\n          endLine = pos.line;\n          endColumn = pos.col;\n        } else {\n          endLine = end.line;\n          endColumn = end.column;\n        }\n      } else if (!column) {\n        let pos = this.fromOffset(line);\n        line = pos.line;\n        column = pos.col;\n      }\n      let origin = this.origin(line, column, endLine, endColumn);\n      if (origin) {\n        result = new CssSyntaxError(message, origin.endLine === undefined ? origin.line : {\n          column: origin.column,\n          line: origin.line\n        }, origin.endLine === undefined ? origin.column : {\n          column: origin.endColumn,\n          line: origin.endLine\n        }, origin.source, origin.file, opts.plugin);\n      } else {\n        result = new CssSyntaxError(message, endLine === undefined ? line : {\n          column,\n          line\n        }, endLine === undefined ? column : {\n          column: endColumn,\n          line: endLine\n        }, this.css, this.file, opts.plugin);\n      }\n      result.input = {\n        column,\n        endColumn,\n        endLine,\n        line,\n        source: this.css\n      };\n      if (this.file) {\n        if (pathToFileURL) {\n          result.input.url = pathToFileURL(this.file).toString();\n        }\n        result.input.file = this.file;\n      }\n      return result;\n    }\n    fromOffset(offset) {\n      let lastLine, lineToIndex;\n      if (!this[fromOffsetCache]) {\n        let lines = this.css.split('\\n');\n        lineToIndex = new Array(lines.length);\n        let prevIndex = 0;\n        for (let i = 0, l = lines.length; i < l; i++) {\n          lineToIndex[i] = prevIndex;\n          prevIndex += lines[i].length + 1;\n        }\n        this[fromOffsetCache] = lineToIndex;\n      } else {\n        lineToIndex = this[fromOffsetCache];\n      }\n      lastLine = lineToIndex[lineToIndex.length - 1];\n      let min = 0;\n      if (offset >= lastLine) {\n        min = lineToIndex.length - 1;\n      } else {\n        let max = lineToIndex.length - 2;\n        let mid;\n        while (min < max) {\n          mid = min + (max - min >> 1);\n          if (offset < lineToIndex[mid]) {\n            max = mid - 1;\n          } else if (offset >= lineToIndex[mid + 1]) {\n            min = mid + 1;\n          } else {\n            min = mid;\n            break;\n          }\n        }\n      }\n      return {\n        col: offset - lineToIndex[min] + 1,\n        line: min + 1\n      };\n    }\n    mapResolve(file) {\n      if (/^\\w+:\\/\\//.test(file)) {\n        return file;\n      }\n      return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file);\n    }\n    origin(line, column, endLine, endColumn) {\n      if (!this.map) return false;\n      let consumer = this.map.consumer();\n      let from = consumer.originalPositionFor({\n        column,\n        line\n      });\n      if (!from.source) return false;\n      let to;\n      if (typeof endLine === 'number') {\n        to = consumer.originalPositionFor({\n          column: endColumn,\n          line: endLine\n        });\n      }\n      let fromUrl;\n      if (isAbsolute(from.source)) {\n        fromUrl = pathToFileURL(from.source);\n      } else {\n        fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile));\n      }\n      let result = {\n        column: from.column,\n        endColumn: to && to.column,\n        endLine: to && to.line,\n        line: from.line,\n        url: fromUrl.toString()\n      };\n      if (fromUrl.protocol === 'file:') {\n        if (fileURLToPath) {\n          result.file = fileURLToPath(fromUrl);\n        } else {\n          /* c8 ignore next 2 */\n          throw new Error(`file: protocol is not available in this PostCSS build`);\n        }\n      }\n      let source = consumer.sourceContentFor(from.source);\n      if (source) result.source = source;\n      return result;\n    }\n    toJSON() {\n      let json = {};\n      for (let name of ['hasBOM', 'css', 'file', 'id']) {\n        if (this[name] != null) {\n          json[name] = this[name];\n        }\n      }\n      if (this.map) {\n        json.map = {\n          ...this.map\n        };\n        if (json.map.consumerCache) {\n          json.map.consumerCache = undefined;\n        }\n      }\n      return json;\n    }\n    get from() {\n      return this.file || this.id;\n    }\n  }\n  input = Input;\n  Input.default = Input;\n  if (terminalHighlight && terminalHighlight.registerInput) {\n    terminalHighlight.registerInput(Input);\n  }\n  return input;\n}\nvar root;\nvar hasRequiredRoot;\nfunction requireRoot() {\n  if (hasRequiredRoot) return root;\n  hasRequiredRoot = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  class Root extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'root';\n      if (!this.nodes) this.nodes = [];\n    }\n    normalize(child, sample, type) {\n      let nodes = super.normalize(child);\n      if (sample) {\n        if (type === 'prepend') {\n          if (this.nodes.length > 1) {\n            sample.raws.before = this.nodes[1].raws.before;\n          } else {\n            delete sample.raws.before;\n          }\n        } else if (this.first !== sample) {\n          for (let node of nodes) {\n            node.raws.before = sample.raws.before;\n          }\n        }\n      }\n      return nodes;\n    }\n    removeChild(child, ignore) {\n      let index = this.index(child);\n      if (!ignore && index === 0 && this.nodes.length > 1) {\n        this.nodes[1].raws.before = this.nodes[index].raws.before;\n      }\n      return super.removeChild(child);\n    }\n    toResult(opts = {}) {\n      let lazy = new LazyResult(new Processor(), this, opts);\n      return lazy.stringify();\n    }\n  }\n  Root.registerLazyResult = dependant => {\n    LazyResult = dependant;\n  };\n  Root.registerProcessor = dependant => {\n    Processor = dependant;\n  };\n  root = Root;\n  Root.default = Root;\n  Container.registerRoot(Root);\n  return root;\n}\nvar list_1;\nvar hasRequiredList;\nfunction requireList() {\n  if (hasRequiredList) return list_1;\n  hasRequiredList = 1;\n  let list = {\n    comma(string) {\n      return list.split(string, [','], true);\n    },\n    space(string) {\n      let spaces = [' ', '\\n', '\\t'];\n      return list.split(string, spaces);\n    },\n    split(string, separators, last) {\n      let array = [];\n      let current = '';\n      let split = false;\n      let func = 0;\n      let inQuote = false;\n      let prevQuote = '';\n      let escape = false;\n      for (let letter of string) {\n        if (escape) {\n          escape = false;\n        } else if (letter === '\\\\') {\n          escape = true;\n        } else if (inQuote) {\n          if (letter === prevQuote) {\n            inQuote = false;\n          }\n        } else if (letter === '\"' || letter === \"'\") {\n          inQuote = true;\n          prevQuote = letter;\n        } else if (letter === '(') {\n          func += 1;\n        } else if (letter === ')') {\n          if (func > 0) func -= 1;\n        } else if (func === 0) {\n          if (separators.includes(letter)) split = true;\n        }\n        if (split) {\n          if (current !== '') array.push(current.trim());\n          current = '';\n          split = false;\n        } else {\n          current += letter;\n        }\n      }\n      if (last || current !== '') array.push(current.trim());\n      return array;\n    }\n  };\n  list_1 = list;\n  list.default = list;\n  return list_1;\n}\nvar rule;\nvar hasRequiredRule;\nfunction requireRule() {\n  if (hasRequiredRule) return rule;\n  hasRequiredRule = 1;\n  let Container = requireContainer$1();\n  let list = requireList();\n  class Rule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'rule';\n      if (!this.nodes) this.nodes = [];\n    }\n    get selectors() {\n      return list.comma(this.selector);\n    }\n    set selectors(values) {\n      let match = this.selector ? this.selector.match(/,\\s*/) : null;\n      let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');\n      this.selector = values.join(sep);\n    }\n  }\n  rule = Rule;\n  Rule.default = Rule;\n  Container.registerRule(Rule);\n  return rule;\n}\nvar fromJSON_1;\nvar hasRequiredFromJSON;\nfunction requireFromJSON() {\n  if (hasRequiredFromJSON) return fromJSON_1;\n  hasRequiredFromJSON = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Input = requireInput();\n  let PreviousMap = requirePreviousMap();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  function fromJSON(json, inputs) {\n    if (Array.isArray(json)) return json.map(n => fromJSON(n));\n    let {\n      inputs: ownInputs,\n      ...defaults\n    } = json;\n    if (ownInputs) {\n      inputs = [];\n      for (let input of ownInputs) {\n        let inputHydrated = {\n          ...input,\n          __proto__: Input.prototype\n        };\n        if (inputHydrated.map) {\n          inputHydrated.map = {\n            ...inputHydrated.map,\n            __proto__: PreviousMap.prototype\n          };\n        }\n        inputs.push(inputHydrated);\n      }\n    }\n    if (defaults.nodes) {\n      defaults.nodes = json.nodes.map(n => fromJSON(n, inputs));\n    }\n    if (defaults.source) {\n      let {\n        inputId,\n        ...source\n      } = defaults.source;\n      defaults.source = source;\n      if (inputId != null) {\n        defaults.source.input = inputs[inputId];\n      }\n    }\n    if (defaults.type === 'root') {\n      return new Root(defaults);\n    } else if (defaults.type === 'decl') {\n      return new Declaration(defaults);\n    } else if (defaults.type === 'rule') {\n      return new Rule(defaults);\n    } else if (defaults.type === 'comment') {\n      return new Comment(defaults);\n    } else if (defaults.type === 'atrule') {\n      return new AtRule(defaults);\n    } else {\n      throw new Error('Unknown node type: ' + json.type);\n    }\n  }\n  fromJSON_1 = fromJSON;\n  fromJSON.default = fromJSON;\n  return fromJSON_1;\n}\nvar mapGenerator;\nvar hasRequiredMapGenerator;\nfunction requireMapGenerator() {\n  if (hasRequiredMapGenerator) return mapGenerator;\n  hasRequiredMapGenerator = 1;\n  let {\n    dirname,\n    relative,\n    resolve,\n    sep\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  let {\n    pathToFileURL\n  } = require$$2;\n  let Input = requireInput();\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(dirname && resolve && relative && sep);\n  class MapGenerator {\n    constructor(stringify, root, opts, cssString) {\n      this.stringify = stringify;\n      this.mapOpts = opts.map || {};\n      this.root = root;\n      this.opts = opts;\n      this.css = cssString;\n      this.originalCSS = cssString;\n      this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n      this.memoizedFileURLs = new Map();\n      this.memoizedPaths = new Map();\n      this.memoizedURLs = new Map();\n    }\n    addAnnotation() {\n      let content;\n      if (this.isInline()) {\n        content = 'data:application/json;base64,' + this.toBase64(this.map.toString());\n      } else if (typeof this.mapOpts.annotation === 'string') {\n        content = this.mapOpts.annotation;\n      } else if (typeof this.mapOpts.annotation === 'function') {\n        content = this.mapOpts.annotation(this.opts.to, this.root);\n      } else {\n        content = this.outputFile() + '.map';\n      }\n      let eol = '\\n';\n      if (this.css.includes('\\r\\n')) eol = '\\r\\n';\n      this.css += eol + '/*# sourceMappingURL=' + content + ' */';\n    }\n    applyPrevMaps() {\n      for (let prev of this.previous()) {\n        let from = this.toUrl(this.path(prev.file));\n        let root = prev.root || dirname(prev.file);\n        let map;\n        if (this.mapOpts.sourcesContent === false) {\n          map = new SourceMapConsumer(prev.text);\n          if (map.sourcesContent) {\n            map.sourcesContent = null;\n          }\n        } else {\n          map = prev.consumer();\n        }\n        this.map.applySourceMap(map, from, this.toUrl(this.path(root)));\n      }\n    }\n    clearAnnotation() {\n      if (this.mapOpts.annotation === false) return;\n      if (this.root) {\n        let node;\n        for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n          node = this.root.nodes[i];\n          if (node.type !== 'comment') continue;\n          if (node.text.startsWith('# sourceMappingURL=')) {\n            this.root.removeChild(i);\n          }\n        }\n      } else if (this.css) {\n        this.css = this.css.replace(/\\n*\\/\\*#[\\S\\s]*?\\*\\/$/gm, '');\n      }\n    }\n    generate() {\n      this.clearAnnotation();\n      if (pathAvailable && sourceMapAvailable && this.isMap()) {\n        return this.generateMap();\n      } else {\n        let result = '';\n        this.stringify(this.root, i => {\n          result += i;\n        });\n        return [result];\n      }\n    }\n    generateMap() {\n      if (this.root) {\n        this.generateString();\n      } else if (this.previous().length === 1) {\n        let prev = this.previous()[0].consumer();\n        prev.file = this.outputFile();\n        this.map = SourceMapGenerator.fromSourceMap(prev, {\n          ignoreInvalidMapping: true\n        });\n      } else {\n        this.map = new SourceMapGenerator({\n          file: this.outputFile(),\n          ignoreInvalidMapping: true\n        });\n        this.map.addMapping({\n          generated: {\n            column: 0,\n            line: 1\n          },\n          original: {\n            column: 0,\n            line: 1\n          },\n          source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : '<no source>'\n        });\n      }\n      if (this.isSourcesContent()) this.setSourcesContent();\n      if (this.root && this.previous().length > 0) this.applyPrevMaps();\n      if (this.isAnnotation()) this.addAnnotation();\n      if (this.isInline()) {\n        return [this.css];\n      } else {\n        return [this.css, this.map];\n      }\n    }\n    generateString() {\n      this.css = '';\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      });\n      let line = 1;\n      let column = 1;\n      let noSource = '<no source>';\n      let mapping = {\n        generated: {\n          column: 0,\n          line: 0\n        },\n        original: {\n          column: 0,\n          line: 0\n        },\n        source: ''\n      };\n      let last, lines;\n      this.stringify(this.root, (str, node, type) => {\n        this.css += str;\n        if (node && type !== 'end') {\n          mapping.generated.line = line;\n          mapping.generated.column = column - 1;\n          if (node.source && node.source.start) {\n            mapping.source = this.sourcePath(node);\n            mapping.original.line = node.source.start.line;\n            mapping.original.column = node.source.start.column - 1;\n            this.map.addMapping(mapping);\n          } else {\n            mapping.source = noSource;\n            mapping.original.line = 1;\n            mapping.original.column = 0;\n            this.map.addMapping(mapping);\n          }\n        }\n        lines = str.match(/\\n/g);\n        if (lines) {\n          line += lines.length;\n          last = str.lastIndexOf('\\n');\n          column = str.length - last;\n        } else {\n          column += str.length;\n        }\n        if (node && type !== 'start') {\n          let p = node.parent || {\n            raws: {}\n          };\n          let childless = node.type === 'decl' || node.type === 'atrule' && !node.nodes;\n          if (!childless || node !== p.last || p.raws.semicolon) {\n            if (node.source && node.source.end) {\n              mapping.source = this.sourcePath(node);\n              mapping.original.line = node.source.end.line;\n              mapping.original.column = node.source.end.column - 1;\n              mapping.generated.line = line;\n              mapping.generated.column = column - 2;\n              this.map.addMapping(mapping);\n            } else {\n              mapping.source = noSource;\n              mapping.original.line = 1;\n              mapping.original.column = 0;\n              mapping.generated.line = line;\n              mapping.generated.column = column - 1;\n              this.map.addMapping(mapping);\n            }\n          }\n        }\n      });\n    }\n    isAnnotation() {\n      if (this.isInline()) {\n        return true;\n      }\n      if (typeof this.mapOpts.annotation !== 'undefined') {\n        return this.mapOpts.annotation;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.annotation);\n      }\n      return true;\n    }\n    isInline() {\n      if (typeof this.mapOpts.inline !== 'undefined') {\n        return this.mapOpts.inline;\n      }\n      let annotation = this.mapOpts.annotation;\n      if (typeof annotation !== 'undefined' && annotation !== true) {\n        return false;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.inline);\n      }\n      return true;\n    }\n    isMap() {\n      if (typeof this.opts.map !== 'undefined') {\n        return !!this.opts.map;\n      }\n      return this.previous().length > 0;\n    }\n    isSourcesContent() {\n      if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n        return this.mapOpts.sourcesContent;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.withContent());\n      }\n      return true;\n    }\n    outputFile() {\n      if (this.opts.to) {\n        return this.path(this.opts.to);\n      } else if (this.opts.from) {\n        return this.path(this.opts.from);\n      } else {\n        return 'to.css';\n      }\n    }\n    path(file) {\n      if (this.mapOpts.absolute) return file;\n      if (file.charCodeAt(0) === 60 /* `<` */) return file;\n      if (/^\\w+:\\/\\//.test(file)) return file;\n      let cached = this.memoizedPaths.get(file);\n      if (cached) return cached;\n      let from = this.opts.to ? dirname(this.opts.to) : '.';\n      if (typeof this.mapOpts.annotation === 'string') {\n        from = dirname(resolve(from, this.mapOpts.annotation));\n      }\n      let path = relative(from, file);\n      this.memoizedPaths.set(file, path);\n      return path;\n    }\n    previous() {\n      if (!this.previousMaps) {\n        this.previousMaps = [];\n        if (this.root) {\n          this.root.walk(node => {\n            if (node.source && node.source.input.map) {\n              let map = node.source.input.map;\n              if (!this.previousMaps.includes(map)) {\n                this.previousMaps.push(map);\n              }\n            }\n          });\n        } else {\n          let input = new Input(this.originalCSS, this.opts);\n          if (input.map) this.previousMaps.push(input.map);\n        }\n      }\n      return this.previousMaps;\n    }\n    setSourcesContent() {\n      let already = {};\n      if (this.root) {\n        this.root.walk(node => {\n          if (node.source) {\n            let from = node.source.input.from;\n            if (from && !already[from]) {\n              already[from] = true;\n              let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n              this.map.setSourceContent(fromUrl, node.source.input.css);\n            }\n          }\n        });\n      } else if (this.css) {\n        let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : '<no source>';\n        this.map.setSourceContent(from, this.css);\n      }\n    }\n    sourcePath(node) {\n      if (this.mapOpts.from) {\n        return this.toUrl(this.mapOpts.from);\n      } else if (this.usesFileUrls) {\n        return this.toFileUrl(node.source.input.from);\n      } else {\n        return this.toUrl(this.path(node.source.input.from));\n      }\n    }\n    toBase64(str) {\n      if (Buffer) {\n        return Buffer.from(str).toString('base64');\n      } else {\n        return window.btoa(unescape(encodeURIComponent(str)));\n      }\n    }\n    toFileUrl(path) {\n      let cached = this.memoizedFileURLs.get(path);\n      if (cached) return cached;\n      if (pathToFileURL) {\n        let fileURL = pathToFileURL(path).toString();\n        this.memoizedFileURLs.set(path, fileURL);\n        return fileURL;\n      } else {\n        throw new Error('`map.absolute` option is not available in this PostCSS build');\n      }\n    }\n    toUrl(path) {\n      let cached = this.memoizedURLs.get(path);\n      if (cached) return cached;\n      if (sep === '\\\\') {\n        path = path.replace(/\\\\/g, '/');\n      }\n      let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n      this.memoizedURLs.set(path, url);\n      return url;\n    }\n  }\n  mapGenerator = MapGenerator;\n  return mapGenerator;\n}\nvar tokenize;\nvar hasRequiredTokenize;\nfunction requireTokenize() {\n  if (hasRequiredTokenize) return tokenize;\n  hasRequiredTokenize = 1;\n  const SINGLE_QUOTE = \"'\".charCodeAt(0);\n  const DOUBLE_QUOTE = '\"'.charCodeAt(0);\n  const BACKSLASH = '\\\\'.charCodeAt(0);\n  const SLASH = '/'.charCodeAt(0);\n  const NEWLINE = '\\n'.charCodeAt(0);\n  const SPACE = ' '.charCodeAt(0);\n  const FEED = '\\f'.charCodeAt(0);\n  const TAB = '\\t'.charCodeAt(0);\n  const CR = '\\r'.charCodeAt(0);\n  const OPEN_SQUARE = '['.charCodeAt(0);\n  const CLOSE_SQUARE = ']'.charCodeAt(0);\n  const OPEN_PARENTHESES = '('.charCodeAt(0);\n  const CLOSE_PARENTHESES = ')'.charCodeAt(0);\n  const OPEN_CURLY = '{'.charCodeAt(0);\n  const CLOSE_CURLY = '}'.charCodeAt(0);\n  const SEMICOLON = ';'.charCodeAt(0);\n  const ASTERISK = '*'.charCodeAt(0);\n  const COLON = ':'.charCodeAt(0);\n  const AT = '@'.charCodeAt(0);\n  const RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\n  const RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\n  const RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\n  const RE_HEX_ESCAPE = /[\\da-f]/i;\n  tokenize = function tokenizer(input, options = {}) {\n    let css = input.css.valueOf();\n    let ignore = options.ignoreErrors;\n    let code, content, escape, next, quote;\n    let currentToken, escaped, escapePos, n, prev;\n    let length = css.length;\n    let pos = 0;\n    let buffer = [];\n    let returned = [];\n    function position() {\n      return pos;\n    }\n    function unclosed(what) {\n      throw input.error('Unclosed ' + what, pos);\n    }\n    function endOfFile() {\n      return returned.length === 0 && pos >= length;\n    }\n    function nextToken(opts) {\n      if (returned.length) return returned.pop();\n      if (pos >= length) return;\n      let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n      code = css.charCodeAt(pos);\n      switch (code) {\n        case NEWLINE:\n        case SPACE:\n        case TAB:\n        case CR:\n        case FEED:\n          {\n            next = pos;\n            do {\n              next += 1;\n              code = css.charCodeAt(next);\n            } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n            currentToken = ['space', css.slice(pos, next)];\n            pos = next - 1;\n            break;\n          }\n        case OPEN_SQUARE:\n        case CLOSE_SQUARE:\n        case OPEN_CURLY:\n        case CLOSE_CURLY:\n        case COLON:\n        case SEMICOLON:\n        case CLOSE_PARENTHESES:\n          {\n            let controlChar = String.fromCharCode(code);\n            currentToken = [controlChar, controlChar, pos];\n            break;\n          }\n        case OPEN_PARENTHESES:\n          {\n            prev = buffer.length ? buffer.pop()[1] : '';\n            n = css.charCodeAt(pos + 1);\n            if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n              next = pos;\n              do {\n                escaped = false;\n                next = css.indexOf(')', next + 1);\n                if (next === -1) {\n                  if (ignore || ignoreUnclosed) {\n                    next = pos;\n                    break;\n                  } else {\n                    unclosed('bracket');\n                  }\n                }\n                escapePos = next;\n                while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                  escapePos -= 1;\n                  escaped = !escaped;\n                }\n              } while (escaped);\n              currentToken = ['brackets', css.slice(pos, next + 1), pos, next];\n              pos = next;\n            } else {\n              next = css.indexOf(')', pos + 1);\n              content = css.slice(pos, next + 1);\n              if (next === -1 || RE_BAD_BRACKET.test(content)) {\n                currentToken = ['(', '(', pos];\n              } else {\n                currentToken = ['brackets', content, pos, next];\n                pos = next;\n              }\n            }\n            break;\n          }\n        case SINGLE_QUOTE:\n        case DOUBLE_QUOTE:\n          {\n            quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n            next = pos;\n            do {\n              escaped = false;\n              next = css.indexOf(quote, next + 1);\n              if (next === -1) {\n                if (ignore || ignoreUnclosed) {\n                  next = pos + 1;\n                  break;\n                } else {\n                  unclosed('string');\n                }\n              }\n              escapePos = next;\n              while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                escapePos -= 1;\n                escaped = !escaped;\n              }\n            } while (escaped);\n            currentToken = ['string', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        case AT:\n          {\n            RE_AT_END.lastIndex = pos + 1;\n            RE_AT_END.test(css);\n            if (RE_AT_END.lastIndex === 0) {\n              next = css.length - 1;\n            } else {\n              next = RE_AT_END.lastIndex - 2;\n            }\n            currentToken = ['at-word', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        case BACKSLASH:\n          {\n            next = pos;\n            escape = true;\n            while (css.charCodeAt(next + 1) === BACKSLASH) {\n              next += 1;\n              escape = !escape;\n            }\n            code = css.charCodeAt(next + 1);\n            if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n              next += 1;\n              if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n                while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n                  next += 1;\n                }\n                if (css.charCodeAt(next + 1) === SPACE) {\n                  next += 1;\n                }\n              }\n            }\n            currentToken = ['word', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        default:\n          {\n            if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n              next = css.indexOf('*/', pos + 2) + 1;\n              if (next === 0) {\n                if (ignore || ignoreUnclosed) {\n                  next = css.length;\n                } else {\n                  unclosed('comment');\n                }\n              }\n              currentToken = ['comment', css.slice(pos, next + 1), pos, next];\n              pos = next;\n            } else {\n              RE_WORD_END.lastIndex = pos + 1;\n              RE_WORD_END.test(css);\n              if (RE_WORD_END.lastIndex === 0) {\n                next = css.length - 1;\n              } else {\n                next = RE_WORD_END.lastIndex - 2;\n              }\n              currentToken = ['word', css.slice(pos, next + 1), pos, next];\n              buffer.push(currentToken);\n              pos = next;\n            }\n            break;\n          }\n      }\n      pos++;\n      return currentToken;\n    }\n    function back(token) {\n      returned.push(token);\n    }\n    return {\n      back,\n      endOfFile,\n      nextToken,\n      position\n    };\n  };\n  return tokenize;\n}\nvar parser;\nvar hasRequiredParser;\nfunction requireParser() {\n  if (hasRequiredParser) return parser;\n  hasRequiredParser = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  let tokenizer = requireTokenize();\n  const SAFE_COMMENT_NEIGHBOR = {\n    empty: true,\n    space: true\n  };\n  function findLastWithPosition(tokens) {\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      let token = tokens[i];\n      let pos = token[3] || token[2];\n      if (pos) return pos;\n    }\n  }\n  class Parser {\n    constructor(input) {\n      this.input = input;\n      this.root = new Root();\n      this.current = this.root;\n      this.spaces = '';\n      this.semicolon = false;\n      this.createTokenizer();\n      this.root.source = {\n        input,\n        start: {\n          column: 1,\n          line: 1,\n          offset: 0\n        }\n      };\n    }\n    atrule(token) {\n      let node = new AtRule();\n      node.name = token[1].slice(1);\n      if (node.name === '') {\n        this.unnamedAtrule(node, token);\n      }\n      this.init(node, token[2]);\n      let type;\n      let prev;\n      let shift;\n      let last = false;\n      let open = false;\n      let params = [];\n      let brackets = [];\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        type = token[0];\n        if (type === '(' || type === '[') {\n          brackets.push(type === '(' ? ')' : ']');\n        } else if (type === '{' && brackets.length > 0) {\n          brackets.push('}');\n        } else if (type === brackets[brackets.length - 1]) {\n          brackets.pop();\n        }\n        if (brackets.length === 0) {\n          if (type === ';') {\n            node.source.end = this.getPosition(token[2]);\n            node.source.end.offset++;\n            this.semicolon = true;\n            break;\n          } else if (type === '{') {\n            open = true;\n            break;\n          } else if (type === '}') {\n            if (params.length > 0) {\n              shift = params.length - 1;\n              prev = params[shift];\n              while (prev && prev[0] === 'space') {\n                prev = params[--shift];\n              }\n              if (prev) {\n                node.source.end = this.getPosition(prev[3] || prev[2]);\n                node.source.end.offset++;\n              }\n            }\n            this.end(token);\n            break;\n          } else {\n            params.push(token);\n          }\n        } else {\n          params.push(token);\n        }\n        if (this.tokenizer.endOfFile()) {\n          last = true;\n          break;\n        }\n      }\n      node.raws.between = this.spacesAndCommentsFromEnd(params);\n      if (params.length) {\n        node.raws.afterName = this.spacesAndCommentsFromStart(params);\n        this.raw(node, 'params', params);\n        if (last) {\n          token = params[params.length - 1];\n          node.source.end = this.getPosition(token[3] || token[2]);\n          node.source.end.offset++;\n          this.spaces = node.raws.between;\n          node.raws.between = '';\n        }\n      } else {\n        node.raws.afterName = '';\n        node.params = '';\n      }\n      if (open) {\n        node.nodes = [];\n        this.current = node;\n      }\n    }\n    checkMissedSemicolon(tokens) {\n      let colon = this.colon(tokens);\n      if (colon === false) return;\n      let founded = 0;\n      let token;\n      for (let j = colon - 1; j >= 0; j--) {\n        token = tokens[j];\n        if (token[0] !== 'space') {\n          founded += 1;\n          if (founded === 2) break;\n        }\n      }\n      // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n      // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n      // And because we need it after that one we do +1 to get the next one.\n      throw this.input.error('Missed semicolon', token[0] === 'word' ? token[3] + 1 : token[2]);\n    }\n    colon(tokens) {\n      let brackets = 0;\n      let prev, token, type;\n      for (let [i, element] of tokens.entries()) {\n        token = element;\n        type = token[0];\n        if (type === '(') {\n          brackets += 1;\n        }\n        if (type === ')') {\n          brackets -= 1;\n        }\n        if (brackets === 0 && type === ':') {\n          if (!prev) {\n            this.doubleColon(token);\n          } else if (prev[0] === 'word' && prev[1] === 'progid') {\n            continue;\n          } else {\n            return i;\n          }\n        }\n        prev = token;\n      }\n      return false;\n    }\n    comment(token) {\n      let node = new Comment();\n      this.init(node, token[2]);\n      node.source.end = this.getPosition(token[3] || token[2]);\n      node.source.end.offset++;\n      let text = token[1].slice(2, -2);\n      if (/^\\s*$/.test(text)) {\n        node.text = '';\n        node.raws.left = text;\n        node.raws.right = '';\n      } else {\n        let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n        node.text = match[2];\n        node.raws.left = match[1];\n        node.raws.right = match[3];\n      }\n    }\n    createTokenizer() {\n      this.tokenizer = tokenizer(this.input);\n    }\n    decl(tokens, customProperty) {\n      let node = new Declaration();\n      this.init(node, tokens[0][2]);\n      let last = tokens[tokens.length - 1];\n      if (last[0] === ';') {\n        this.semicolon = true;\n        tokens.pop();\n      }\n      node.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n      node.source.end.offset++;\n      while (tokens[0][0] !== 'word') {\n        if (tokens.length === 1) this.unknownWord(tokens);\n        node.raws.before += tokens.shift()[1];\n      }\n      node.source.start = this.getPosition(tokens[0][2]);\n      node.prop = '';\n      while (tokens.length) {\n        let type = tokens[0][0];\n        if (type === ':' || type === 'space' || type === 'comment') {\n          break;\n        }\n        node.prop += tokens.shift()[1];\n      }\n      node.raws.between = '';\n      let token;\n      while (tokens.length) {\n        token = tokens.shift();\n        if (token[0] === ':') {\n          node.raws.between += token[1];\n          break;\n        } else {\n          if (token[0] === 'word' && /\\w/.test(token[1])) {\n            this.unknownWord([token]);\n          }\n          node.raws.between += token[1];\n        }\n      }\n      if (node.prop[0] === '_' || node.prop[0] === '*') {\n        node.raws.before += node.prop[0];\n        node.prop = node.prop.slice(1);\n      }\n      let firstSpaces = [];\n      let next;\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== 'space' && next !== 'comment') break;\n        firstSpaces.push(tokens.shift());\n      }\n      this.precheckMissedSemicolon(tokens);\n      for (let i = tokens.length - 1; i >= 0; i--) {\n        token = tokens[i];\n        if (token[1].toLowerCase() === '!important') {\n          node.important = true;\n          let string = this.stringFrom(tokens, i);\n          string = this.spacesFromEnd(tokens) + string;\n          if (string !== ' !important') node.raws.important = string;\n          break;\n        } else if (token[1].toLowerCase() === 'important') {\n          let cache = tokens.slice(0);\n          let str = '';\n          for (let j = i; j > 0; j--) {\n            let type = cache[j][0];\n            if (str.trim().startsWith('!') && type !== 'space') {\n              break;\n            }\n            str = cache.pop()[1] + str;\n          }\n          if (str.trim().startsWith('!')) {\n            node.important = true;\n            node.raws.important = str;\n            tokens = cache;\n          }\n        }\n        if (token[0] !== 'space' && token[0] !== 'comment') {\n          break;\n        }\n      }\n      let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment');\n      if (hasWord) {\n        node.raws.between += firstSpaces.map(i => i[1]).join('');\n        firstSpaces = [];\n      }\n      this.raw(node, 'value', firstSpaces.concat(tokens), customProperty);\n      if (node.value.includes(':') && !customProperty) {\n        this.checkMissedSemicolon(tokens);\n      }\n    }\n    doubleColon(token) {\n      throw this.input.error('Double colon', {\n        offset: token[2]\n      }, {\n        offset: token[2] + token[1].length\n      });\n    }\n    emptyRule(token) {\n      let node = new Rule();\n      this.init(node, token[2]);\n      node.selector = '';\n      node.raws.between = '';\n      this.current = node;\n    }\n    end(token) {\n      if (this.current.nodes && this.current.nodes.length) {\n        this.current.raws.semicolon = this.semicolon;\n      }\n      this.semicolon = false;\n      this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n      this.spaces = '';\n      if (this.current.parent) {\n        this.current.source.end = this.getPosition(token[2]);\n        this.current.source.end.offset++;\n        this.current = this.current.parent;\n      } else {\n        this.unexpectedClose(token);\n      }\n    }\n    endFile() {\n      if (this.current.parent) this.unclosedBlock();\n      if (this.current.nodes && this.current.nodes.length) {\n        this.current.raws.semicolon = this.semicolon;\n      }\n      this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n      this.root.source.end = this.getPosition(this.tokenizer.position());\n    }\n    freeSemicolon(token) {\n      this.spaces += token[1];\n      if (this.current.nodes) {\n        let prev = this.current.nodes[this.current.nodes.length - 1];\n        if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n          prev.raws.ownSemicolon = this.spaces;\n          this.spaces = '';\n        }\n      }\n    }\n\n    // Helpers\n\n    getPosition(offset) {\n      let pos = this.input.fromOffset(offset);\n      return {\n        column: pos.col,\n        line: pos.line,\n        offset\n      };\n    }\n    init(node, offset) {\n      this.current.push(node);\n      node.source = {\n        input: this.input,\n        start: this.getPosition(offset)\n      };\n      node.raws.before = this.spaces;\n      this.spaces = '';\n      if (node.type !== 'comment') this.semicolon = false;\n    }\n    other(start) {\n      let end = false;\n      let type = null;\n      let colon = false;\n      let bracket = null;\n      let brackets = [];\n      let customProperty = start[1].startsWith('--');\n      let tokens = [];\n      let token = start;\n      while (token) {\n        type = token[0];\n        tokens.push(token);\n        if (type === '(' || type === '[') {\n          if (!bracket) bracket = token;\n          brackets.push(type === '(' ? ')' : ']');\n        } else if (customProperty && colon && type === '{') {\n          if (!bracket) bracket = token;\n          brackets.push('}');\n        } else if (brackets.length === 0) {\n          if (type === ';') {\n            if (colon) {\n              this.decl(tokens, customProperty);\n              return;\n            } else {\n              break;\n            }\n          } else if (type === '{') {\n            this.rule(tokens);\n            return;\n          } else if (type === '}') {\n            this.tokenizer.back(tokens.pop());\n            end = true;\n            break;\n          } else if (type === ':') {\n            colon = true;\n          }\n        } else if (type === brackets[brackets.length - 1]) {\n          brackets.pop();\n          if (brackets.length === 0) bracket = null;\n        }\n        token = this.tokenizer.nextToken();\n      }\n      if (this.tokenizer.endOfFile()) end = true;\n      if (brackets.length > 0) this.unclosedBracket(bracket);\n      if (end && colon) {\n        if (!customProperty) {\n          while (tokens.length) {\n            token = tokens[tokens.length - 1][0];\n            if (token !== 'space' && token !== 'comment') break;\n            this.tokenizer.back(tokens.pop());\n          }\n        }\n        this.decl(tokens, customProperty);\n      } else {\n        this.unknownWord(tokens);\n      }\n    }\n    parse() {\n      let token;\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        switch (token[0]) {\n          case 'space':\n            this.spaces += token[1];\n            break;\n          case ';':\n            this.freeSemicolon(token);\n            break;\n          case '}':\n            this.end(token);\n            break;\n          case 'comment':\n            this.comment(token);\n            break;\n          case 'at-word':\n            this.atrule(token);\n            break;\n          case '{':\n            this.emptyRule(token);\n            break;\n          default:\n            this.other(token);\n            break;\n        }\n      }\n      this.endFile();\n    }\n    precheckMissedSemicolon(/* tokens */\n    ) {\n      // Hook for Safe Parser\n    }\n    raw(node, prop, tokens, customProperty) {\n      let token, type;\n      let length = tokens.length;\n      let value = '';\n      let clean = true;\n      let next, prev;\n      for (let i = 0; i < length; i += 1) {\n        token = tokens[i];\n        type = token[0];\n        if (type === 'space' && i === length - 1 && !customProperty) {\n          clean = false;\n        } else if (type === 'comment') {\n          prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty';\n          next = tokens[i + 1] ? tokens[i + 1][0] : 'empty';\n          if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n            if (value.slice(-1) === ',') {\n              clean = false;\n            } else {\n              value += token[1];\n            }\n          } else {\n            clean = false;\n          }\n        } else {\n          value += token[1];\n        }\n      }\n      if (!clean) {\n        let raw = tokens.reduce((all, i) => all + i[1], '');\n        node.raws[prop] = {\n          raw,\n          value\n        };\n      }\n      node[prop] = value;\n    }\n    rule(tokens) {\n      tokens.pop();\n      let node = new Rule();\n      this.init(node, tokens[0][2]);\n      node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n      this.raw(node, 'selector', tokens);\n      this.current = node;\n    }\n    spacesAndCommentsFromEnd(tokens) {\n      let lastTokenType;\n      let spaces = '';\n      while (tokens.length) {\n        lastTokenType = tokens[tokens.length - 1][0];\n        if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;\n        spaces = tokens.pop()[1] + spaces;\n      }\n      return spaces;\n    }\n\n    // Errors\n\n    spacesAndCommentsFromStart(tokens) {\n      let next;\n      let spaces = '';\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== 'space' && next !== 'comment') break;\n        spaces += tokens.shift()[1];\n      }\n      return spaces;\n    }\n    spacesFromEnd(tokens) {\n      let lastTokenType;\n      let spaces = '';\n      while (tokens.length) {\n        lastTokenType = tokens[tokens.length - 1][0];\n        if (lastTokenType !== 'space') break;\n        spaces = tokens.pop()[1] + spaces;\n      }\n      return spaces;\n    }\n    stringFrom(tokens, from) {\n      let result = '';\n      for (let i = from; i < tokens.length; i++) {\n        result += tokens[i][1];\n      }\n      tokens.splice(from, tokens.length - from);\n      return result;\n    }\n    unclosedBlock() {\n      let pos = this.current.source.start;\n      throw this.input.error('Unclosed block', pos.line, pos.column);\n    }\n    unclosedBracket(bracket) {\n      throw this.input.error('Unclosed bracket', {\n        offset: bracket[2]\n      }, {\n        offset: bracket[2] + 1\n      });\n    }\n    unexpectedClose(token) {\n      throw this.input.error('Unexpected }', {\n        offset: token[2]\n      }, {\n        offset: token[2] + 1\n      });\n    }\n    unknownWord(tokens) {\n      throw this.input.error('Unknown word', {\n        offset: tokens[0][2]\n      }, {\n        offset: tokens[0][2] + tokens[0][1].length\n      });\n    }\n    unnamedAtrule(node, token) {\n      throw this.input.error('At-rule without name', {\n        offset: token[2]\n      }, {\n        offset: token[2] + token[1].length\n      });\n    }\n  }\n  parser = Parser;\n  return parser;\n}\nvar parse_1;\nvar hasRequiredParse;\nfunction requireParse() {\n  if (hasRequiredParse) return parse_1;\n  hasRequiredParse = 1;\n  let Container = requireContainer$1();\n  let Input = requireInput();\n  let Parser = requireParser();\n  function parse(css, opts) {\n    let input = new Input(css, opts);\n    let parser = new Parser(input);\n    try {\n      parser.parse();\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (e.name === 'CssSyntaxError' && opts && opts.from) {\n          if (/\\.scss$/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';\n          } else if (/\\.sass/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser';\n          } else if (/\\.less$/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';\n          }\n        }\n      }\n      throw e;\n    }\n    return parser.root;\n  }\n  parse_1 = parse;\n  parse.default = parse;\n  Container.registerParse(parse);\n  return parse_1;\n}\nvar warning;\nvar hasRequiredWarning;\nfunction requireWarning() {\n  if (hasRequiredWarning) return warning;\n  hasRequiredWarning = 1;\n  class Warning {\n    constructor(text, opts = {}) {\n      this.type = 'warning';\n      this.text = text;\n      if (opts.node && opts.node.source) {\n        let range = opts.node.rangeBy(opts);\n        this.line = range.start.line;\n        this.column = range.start.column;\n        this.endLine = range.end.line;\n        this.endColumn = range.end.column;\n      }\n      for (let opt in opts) this[opt] = opts[opt];\n    }\n    toString() {\n      if (this.node) {\n        return this.node.error(this.text, {\n          index: this.index,\n          plugin: this.plugin,\n          word: this.word\n        }).message;\n      }\n      if (this.plugin) {\n        return this.plugin + ': ' + this.text;\n      }\n      return this.text;\n    }\n  }\n  warning = Warning;\n  Warning.default = Warning;\n  return warning;\n}\nvar result;\nvar hasRequiredResult;\nfunction requireResult() {\n  if (hasRequiredResult) return result;\n  hasRequiredResult = 1;\n  let Warning = requireWarning();\n  class Result {\n    constructor(processor, root, opts) {\n      this.processor = processor;\n      this.messages = [];\n      this.root = root;\n      this.opts = opts;\n      this.css = undefined;\n      this.map = undefined;\n    }\n    toString() {\n      return this.css;\n    }\n    warn(text, opts = {}) {\n      if (!opts.plugin) {\n        if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n          opts.plugin = this.lastPlugin.postcssPlugin;\n        }\n      }\n      let warning = new Warning(text, opts);\n      this.messages.push(warning);\n      return warning;\n    }\n    warnings() {\n      return this.messages.filter(i => i.type === 'warning');\n    }\n    get content() {\n      return this.css;\n    }\n  }\n  result = Result;\n  Result.default = Result;\n  return result;\n}\n\n/* eslint-disable no-console */\n\nvar warnOnce;\nvar hasRequiredWarnOnce;\nfunction requireWarnOnce() {\n  if (hasRequiredWarnOnce) return warnOnce;\n  hasRequiredWarnOnce = 1;\n  let printed = {};\n  warnOnce = function warnOnce(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n    if (typeof console !== 'undefined' && console.warn) {\n      console.warn(message);\n    }\n  };\n  return warnOnce;\n}\nvar lazyResult;\nvar hasRequiredLazyResult;\nfunction requireLazyResult() {\n  if (hasRequiredLazyResult) return lazyResult;\n  hasRequiredLazyResult = 1;\n  let Container = requireContainer$1();\n  let Document = requireDocument();\n  let MapGenerator = requireMapGenerator();\n  let parse = requireParse();\n  let Result = requireResult();\n  let Root = requireRoot();\n  let stringify = requireStringify();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  let warnOnce = requireWarnOnce();\n  const TYPE_TO_CLASS_NAME = {\n    atrule: 'AtRule',\n    comment: 'Comment',\n    decl: 'Declaration',\n    document: 'Document',\n    root: 'Root',\n    rule: 'Rule'\n  };\n  const PLUGIN_PROPS = {\n    AtRule: true,\n    AtRuleExit: true,\n    Comment: true,\n    CommentExit: true,\n    Declaration: true,\n    DeclarationExit: true,\n    Document: true,\n    DocumentExit: true,\n    Once: true,\n    OnceExit: true,\n    postcssPlugin: true,\n    prepare: true,\n    Root: true,\n    RootExit: true,\n    Rule: true,\n    RuleExit: true\n  };\n  const NOT_VISITORS = {\n    Once: true,\n    postcssPlugin: true,\n    prepare: true\n  };\n  const CHILDREN = 0;\n  function isPromise(obj) {\n    return typeof obj === 'object' && typeof obj.then === 'function';\n  }\n  function getEvents(node) {\n    let key = false;\n    let type = TYPE_TO_CLASS_NAME[node.type];\n    if (node.type === 'decl') {\n      key = node.prop.toLowerCase();\n    } else if (node.type === 'atrule') {\n      key = node.name.toLowerCase();\n    }\n    if (key && node.append) {\n      return [type, type + '-' + key, CHILDREN, type + 'Exit', type + 'Exit-' + key];\n    } else if (key) {\n      return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key];\n    } else if (node.append) {\n      return [type, CHILDREN, type + 'Exit'];\n    } else {\n      return [type, type + 'Exit'];\n    }\n  }\n  function toStack(node) {\n    let events;\n    if (node.type === 'document') {\n      events = ['Document', CHILDREN, 'DocumentExit'];\n    } else if (node.type === 'root') {\n      events = ['Root', CHILDREN, 'RootExit'];\n    } else {\n      events = getEvents(node);\n    }\n    return {\n      eventIndex: 0,\n      events,\n      iterator: 0,\n      node,\n      visitorIndex: 0,\n      visitors: []\n    };\n  }\n  function cleanMarks(node) {\n    node[isClean] = false;\n    if (node.nodes) node.nodes.forEach(i => cleanMarks(i));\n    return node;\n  }\n  let postcss = {};\n  class LazyResult {\n    constructor(processor, css, opts) {\n      this.stringified = false;\n      this.processed = false;\n      let root;\n      if (typeof css === 'object' && css !== null && (css.type === 'root' || css.type === 'document')) {\n        root = cleanMarks(css);\n      } else if (css instanceof LazyResult || css instanceof Result) {\n        root = cleanMarks(css.root);\n        if (css.map) {\n          if (typeof opts.map === 'undefined') opts.map = {};\n          if (!opts.map.inline) opts.map.inline = false;\n          opts.map.prev = css.map;\n        }\n      } else {\n        let parser = parse;\n        if (opts.syntax) parser = opts.syntax.parse;\n        if (opts.parser) parser = opts.parser;\n        if (parser.parse) parser = parser.parse;\n        try {\n          root = parser(css, opts);\n        } catch (error) {\n          this.processed = true;\n          this.error = error;\n        }\n        if (root && !root[my]) {\n          /* c8 ignore next 2 */\n          Container.rebuild(root);\n        }\n      }\n      this.result = new Result(processor, root, opts);\n      this.helpers = {\n        ...postcss,\n        postcss,\n        result: this.result\n      };\n      this.plugins = this.processor.plugins.map(plugin => {\n        if (typeof plugin === 'object' && plugin.prepare) {\n          return {\n            ...plugin,\n            ...plugin.prepare(this.result)\n          };\n        } else {\n          return plugin;\n        }\n      });\n    }\n    async() {\n      if (this.error) return Promise.reject(this.error);\n      if (this.processed) return Promise.resolve(this.result);\n      if (!this.processing) {\n        this.processing = this.runAsync();\n      }\n      return this.processing;\n    }\n    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    getAsyncError() {\n      throw new Error('Use process(css).then(cb) to work with async plugins');\n    }\n    handleError(error, node) {\n      let plugin = this.result.lastPlugin;\n      try {\n        if (node) node.addToError(error);\n        this.error = error;\n        if (error.name === 'CssSyntaxError' && !error.plugin) {\n          error.plugin = plugin.postcssPlugin;\n          error.setMessage();\n        } else if (plugin.postcssVersion) {\n          if (process.env.NODE_ENV !== 'production') {\n            let pluginName = plugin.postcssPlugin;\n            let pluginVer = plugin.postcssVersion;\n            let runtimeVer = this.result.processor.version;\n            let a = pluginVer.split('.');\n            let b = runtimeVer.split('.');\n            if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n              // eslint-disable-next-line no-console\n              console.error('Unknown error from PostCSS plugin. Your current PostCSS ' + 'version is ' + runtimeVer + ', but ' + pluginName + ' uses ' + pluginVer + '. Perhaps this is the source of the error below.');\n            }\n          }\n        }\n      } catch (err) {\n        /* c8 ignore next 3 */\n        // eslint-disable-next-line no-console\n        if (console && console.error) console.error(err);\n      }\n      return error;\n    }\n    prepareVisitors() {\n      this.listeners = {};\n      let add = (plugin, type, cb) => {\n        if (!this.listeners[type]) this.listeners[type] = [];\n        this.listeners[type].push([plugin, cb]);\n      };\n      for (let plugin of this.plugins) {\n        if (typeof plugin === 'object') {\n          for (let event in plugin) {\n            if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n              throw new Error(`Unknown event ${event} in ${plugin.postcssPlugin}. ` + `Try to update PostCSS (${this.processor.version} now).`);\n            }\n            if (!NOT_VISITORS[event]) {\n              if (typeof plugin[event] === 'object') {\n                for (let filter in plugin[event]) {\n                  if (filter === '*') {\n                    add(plugin, event, plugin[event][filter]);\n                  } else {\n                    add(plugin, event + '-' + filter.toLowerCase(), plugin[event][filter]);\n                  }\n                }\n              } else if (typeof plugin[event] === 'function') {\n                add(plugin, event, plugin[event]);\n              }\n            }\n          }\n        }\n      }\n      this.hasListener = Object.keys(this.listeners).length > 0;\n    }\n    async runAsync() {\n      this.plugin = 0;\n      for (let i = 0; i < this.plugins.length; i++) {\n        let plugin = this.plugins[i];\n        let promise = this.runOnRoot(plugin);\n        if (isPromise(promise)) {\n          try {\n            await promise;\n          } catch (error) {\n            throw this.handleError(error);\n          }\n        }\n      }\n      this.prepareVisitors();\n      if (this.hasListener) {\n        let root = this.result.root;\n        while (!root[isClean]) {\n          root[isClean] = true;\n          let stack = [toStack(root)];\n          while (stack.length > 0) {\n            let promise = this.visitTick(stack);\n            if (isPromise(promise)) {\n              try {\n                await promise;\n              } catch (e) {\n                let node = stack[stack.length - 1].node;\n                throw this.handleError(e, node);\n              }\n            }\n          }\n        }\n        if (this.listeners.OnceExit) {\n          for (let [plugin, visitor] of this.listeners.OnceExit) {\n            this.result.lastPlugin = plugin;\n            try {\n              if (root.type === 'document') {\n                let roots = root.nodes.map(subRoot => visitor(subRoot, this.helpers));\n                await Promise.all(roots);\n              } else {\n                await visitor(root, this.helpers);\n              }\n            } catch (e) {\n              throw this.handleError(e);\n            }\n          }\n        }\n      }\n      this.processed = true;\n      return this.stringify();\n    }\n    runOnRoot(plugin) {\n      this.result.lastPlugin = plugin;\n      try {\n        if (typeof plugin === 'object' && plugin.Once) {\n          if (this.result.root.type === 'document') {\n            let roots = this.result.root.nodes.map(root => plugin.Once(root, this.helpers));\n            if (isPromise(roots[0])) {\n              return Promise.all(roots);\n            }\n            return roots;\n          }\n          return plugin.Once(this.result.root, this.helpers);\n        } else if (typeof plugin === 'function') {\n          return plugin(this.result.root, this.result);\n        }\n      } catch (error) {\n        throw this.handleError(error);\n      }\n    }\n    stringify() {\n      if (this.error) throw this.error;\n      if (this.stringified) return this.result;\n      this.stringified = true;\n      this.sync();\n      let opts = this.result.opts;\n      let str = stringify;\n      if (opts.syntax) str = opts.syntax.stringify;\n      if (opts.stringifier) str = opts.stringifier;\n      if (str.stringify) str = str.stringify;\n      let map = new MapGenerator(str, this.result.root, this.result.opts);\n      let data = map.generate();\n      this.result.css = data[0];\n      this.result.map = data[1];\n      return this.result;\n    }\n    sync() {\n      if (this.error) throw this.error;\n      if (this.processed) return this.result;\n      this.processed = true;\n      if (this.processing) {\n        throw this.getAsyncError();\n      }\n      for (let plugin of this.plugins) {\n        let promise = this.runOnRoot(plugin);\n        if (isPromise(promise)) {\n          throw this.getAsyncError();\n        }\n      }\n      this.prepareVisitors();\n      if (this.hasListener) {\n        let root = this.result.root;\n        while (!root[isClean]) {\n          root[isClean] = true;\n          this.walkSync(root);\n        }\n        if (this.listeners.OnceExit) {\n          if (root.type === 'document') {\n            for (let subRoot of root.nodes) {\n              this.visitSync(this.listeners.OnceExit, subRoot);\n            }\n          } else {\n            this.visitSync(this.listeners.OnceExit, root);\n          }\n        }\n      }\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!('from' in this.opts)) {\n          warnOnce('Without `from` option PostCSS could generate wrong source map ' + 'and will not find Browserslist config. Set it to CSS file path ' + 'or to `undefined` to prevent this warning.');\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this.css;\n    }\n    visitSync(visitors, node) {\n      for (let [plugin, visitor] of visitors) {\n        this.result.lastPlugin = plugin;\n        let promise;\n        try {\n          promise = visitor(node, this.helpers);\n        } catch (e) {\n          throw this.handleError(e, node.proxyOf);\n        }\n        if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n          return true;\n        }\n        if (isPromise(promise)) {\n          throw this.getAsyncError();\n        }\n      }\n    }\n    visitTick(stack) {\n      let visit = stack[stack.length - 1];\n      let {\n        node,\n        visitors\n      } = visit;\n      if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n        stack.pop();\n        return;\n      }\n      if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n        let [plugin, visitor] = visitors[visit.visitorIndex];\n        visit.visitorIndex += 1;\n        if (visit.visitorIndex === visitors.length) {\n          visit.visitors = [];\n          visit.visitorIndex = 0;\n        }\n        this.result.lastPlugin = plugin;\n        try {\n          return visitor(node.toProxy(), this.helpers);\n        } catch (e) {\n          throw this.handleError(e, node);\n        }\n      }\n      if (visit.iterator !== 0) {\n        let iterator = visit.iterator;\n        let child;\n        while (child = node.nodes[node.indexes[iterator]]) {\n          node.indexes[iterator] += 1;\n          if (!child[isClean]) {\n            child[isClean] = true;\n            stack.push(toStack(child));\n            return;\n          }\n        }\n        visit.iterator = 0;\n        delete node.indexes[iterator];\n      }\n      let events = visit.events;\n      while (visit.eventIndex < events.length) {\n        let event = events[visit.eventIndex];\n        visit.eventIndex += 1;\n        if (event === CHILDREN) {\n          if (node.nodes && node.nodes.length) {\n            node[isClean] = true;\n            visit.iterator = node.getIterator();\n          }\n          return;\n        } else if (this.listeners[event]) {\n          visit.visitors = this.listeners[event];\n          return;\n        }\n      }\n      stack.pop();\n    }\n    walkSync(node) {\n      node[isClean] = true;\n      let events = getEvents(node);\n      for (let event of events) {\n        if (event === CHILDREN) {\n          if (node.nodes) {\n            node.each(child => {\n              if (!child[isClean]) this.walkSync(child);\n            });\n          }\n        } else {\n          let visitors = this.listeners[event];\n          if (visitors) {\n            if (this.visitSync(visitors, node.toProxy())) return;\n          }\n        }\n      }\n    }\n    warnings() {\n      return this.sync().warnings();\n    }\n    get content() {\n      return this.stringify().content;\n    }\n    get css() {\n      return this.stringify().css;\n    }\n    get map() {\n      return this.stringify().map;\n    }\n    get messages() {\n      return this.sync().messages;\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      return this.sync().root;\n    }\n    get [Symbol.toStringTag]() {\n      return 'LazyResult';\n    }\n  }\n  LazyResult.registerPostcss = dependant => {\n    postcss = dependant;\n  };\n  lazyResult = LazyResult;\n  LazyResult.default = LazyResult;\n  Root.registerLazyResult(LazyResult);\n  Document.registerLazyResult(LazyResult);\n  return lazyResult;\n}\nvar noWorkResult;\nvar hasRequiredNoWorkResult;\nfunction requireNoWorkResult() {\n  if (hasRequiredNoWorkResult) return noWorkResult;\n  hasRequiredNoWorkResult = 1;\n  let MapGenerator = requireMapGenerator();\n  let parse = requireParse();\n  const Result = requireResult();\n  let stringify = requireStringify();\n  let warnOnce = requireWarnOnce();\n  class NoWorkResult {\n    constructor(processor, css, opts) {\n      css = css.toString();\n      this.stringified = false;\n      this._processor = processor;\n      this._css = css;\n      this._opts = opts;\n      this._map = undefined;\n      let root;\n      let str = stringify;\n      this.result = new Result(this._processor, root, this._opts);\n      this.result.css = css;\n      let self = this;\n      Object.defineProperty(this.result, 'root', {\n        get() {\n          return self.root;\n        }\n      });\n      let map = new MapGenerator(str, root, this._opts, css);\n      if (map.isMap()) {\n        let [generatedCSS, generatedMap] = map.generate();\n        if (generatedCSS) {\n          this.result.css = generatedCSS;\n        }\n        if (generatedMap) {\n          this.result.map = generatedMap;\n        }\n      } else {\n        map.clearAnnotation();\n        this.result.css = map.css;\n      }\n    }\n    async() {\n      if (this.error) return Promise.reject(this.error);\n      return Promise.resolve(this.result);\n    }\n    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    sync() {\n      if (this.error) throw this.error;\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!('from' in this._opts)) {\n          warnOnce('Without `from` option PostCSS could generate wrong source map ' + 'and will not find Browserslist config. Set it to CSS file path ' + 'or to `undefined` to prevent this warning.');\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this._css;\n    }\n    warnings() {\n      return [];\n    }\n    get content() {\n      return this.result.css;\n    }\n    get css() {\n      return this.result.css;\n    }\n    get map() {\n      return this.result.map;\n    }\n    get messages() {\n      return [];\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      if (this._root) {\n        return this._root;\n      }\n      let root;\n      let parser = parse;\n      try {\n        root = parser(this._css, this._opts);\n      } catch (error) {\n        this.error = error;\n      }\n      if (this.error) {\n        throw this.error;\n      } else {\n        this._root = root;\n        return root;\n      }\n    }\n    get [Symbol.toStringTag]() {\n      return 'NoWorkResult';\n    }\n  }\n  noWorkResult = NoWorkResult;\n  NoWorkResult.default = NoWorkResult;\n  return noWorkResult;\n}\nvar processor;\nvar hasRequiredProcessor;\nfunction requireProcessor() {\n  if (hasRequiredProcessor) return processor;\n  hasRequiredProcessor = 1;\n  let Document = requireDocument();\n  let LazyResult = requireLazyResult();\n  let NoWorkResult = requireNoWorkResult();\n  let Root = requireRoot();\n  class Processor {\n    constructor(plugins = []) {\n      this.version = '8.4.49';\n      this.plugins = this.normalize(plugins);\n    }\n    normalize(plugins) {\n      let normalized = [];\n      for (let i of plugins) {\n        if (i.postcss === true) {\n          i = i();\n        } else if (i.postcss) {\n          i = i.postcss;\n        }\n        if (typeof i === 'object' && Array.isArray(i.plugins)) {\n          normalized = normalized.concat(i.plugins);\n        } else if (typeof i === 'object' && i.postcssPlugin) {\n          normalized.push(i);\n        } else if (typeof i === 'function') {\n          normalized.push(i);\n        } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n          if (process.env.NODE_ENV !== 'production') {\n            throw new Error('PostCSS syntaxes cannot be used as plugins. Instead, please use ' + 'one of the syntax/parser/stringifier options as outlined ' + 'in your PostCSS runner documentation.');\n          }\n        } else {\n          throw new Error(i + ' is not a PostCSS plugin');\n        }\n      }\n      return normalized;\n    }\n    process(css, opts = {}) {\n      if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n        return new NoWorkResult(this, css, opts);\n      } else {\n        return new LazyResult(this, css, opts);\n      }\n    }\n    use(plugin) {\n      this.plugins = this.plugins.concat(this.normalize([plugin]));\n      return this;\n    }\n  }\n  processor = Processor;\n  Processor.default = Processor;\n  Root.registerProcessor(Processor);\n  Document.registerProcessor(Processor);\n  return processor;\n}\nvar postcss_1;\nvar hasRequiredPostcss;\nfunction requirePostcss() {\n  if (hasRequiredPostcss) return postcss_1;\n  hasRequiredPostcss = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Container = requireContainer$1();\n  let CssSyntaxError = requireCssSyntaxError();\n  let Declaration = requireDeclaration();\n  let Document = requireDocument();\n  let fromJSON = requireFromJSON();\n  let Input = requireInput();\n  let LazyResult = requireLazyResult();\n  let list = requireList();\n  let Node = requireNode$1();\n  let parse = requireParse();\n  let Processor = requireProcessor();\n  let Result = requireResult();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  let stringify = requireStringify();\n  let Warning = requireWarning();\n  function postcss(...plugins) {\n    if (plugins.length === 1 && Array.isArray(plugins[0])) {\n      plugins = plugins[0];\n    }\n    return new Processor(plugins);\n  }\n  postcss.plugin = function plugin(name, initializer) {\n    let warningPrinted = false;\n    function creator(...args) {\n      // eslint-disable-next-line no-console\n      if (console && console.warn && !warningPrinted) {\n        warningPrinted = true;\n        // eslint-disable-next-line no-console\n        console.warn(name + ': postcss.plugin was deprecated. Migration guide:\\n' + 'https://evilmartians.com/chronicles/postcss-8-plugin-migration');\n        if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n          /* c8 ignore next 7 */\n          // eslint-disable-next-line no-console\n          console.warn(name + ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' + 'https://www.w3ctech.com/topic/2226');\n        }\n      }\n      let transformer = initializer(...args);\n      transformer.postcssPlugin = name;\n      transformer.postcssVersion = new Processor().version;\n      return transformer;\n    }\n    let cache;\n    Object.defineProperty(creator, 'postcss', {\n      get() {\n        if (!cache) cache = creator();\n        return cache;\n      }\n    });\n    creator.process = function (css, processOpts, pluginOpts) {\n      return postcss([creator(pluginOpts)]).process(css, processOpts);\n    };\n    return creator;\n  };\n  postcss.stringify = stringify;\n  postcss.parse = parse;\n  postcss.fromJSON = fromJSON;\n  postcss.list = list;\n  postcss.comment = defaults => new Comment(defaults);\n  postcss.atRule = defaults => new AtRule(defaults);\n  postcss.decl = defaults => new Declaration(defaults);\n  postcss.rule = defaults => new Rule(defaults);\n  postcss.root = defaults => new Root(defaults);\n  postcss.document = defaults => new Document(defaults);\n  postcss.CssSyntaxError = CssSyntaxError;\n  postcss.Declaration = Declaration;\n  postcss.Container = Container;\n  postcss.Processor = Processor;\n  postcss.Document = Document;\n  postcss.Comment = Comment;\n  postcss.Warning = Warning;\n  postcss.AtRule = AtRule;\n  postcss.Result = Result;\n  postcss.Input = Input;\n  postcss.Rule = Rule;\n  postcss.Root = Root;\n  postcss.Node = Node;\n  LazyResult.registerPostcss(postcss);\n  postcss_1 = postcss;\n  postcss.default = postcss;\n  return postcss_1;\n}\nvar postcssExports = requirePostcss();\nvar postcss = /*@__PURE__*/getDefaultExportFromCjs(postcssExports);\nconst stringify = postcss.stringify;\npostcss.fromJSON;\npostcss.plugin;\nconst parse$2 = postcss.parse;\npostcss.list;\npostcss.document;\npostcss.comment;\npostcss.atRule;\npostcss.rule;\npostcss.decl;\npostcss.root;\npostcss.CssSyntaxError;\npostcss.Declaration;\npostcss.Container;\npostcss.Processor;\npostcss.Document;\npostcss.Comment;\npostcss.Warning;\npostcss.AtRule;\npostcss.Result;\npostcss.Input;\npostcss.Rule;\npostcss.Root;\npostcss.Node;\nvar dist = {};\nvar Container = {};\nvar Node$1 = {};\nvar hasRequiredNode;\nfunction requireNode() {\n  if (hasRequiredNode) return Node$1;\n  hasRequiredNode = 1;\n  Object.defineProperty(Node$1, \"__esModule\", {\n    value: true\n  });\n  /**\r\n   * A very generic node. Pretty much any element of a media query\r\n   */\n\n  function Node(opts) {\n    this.after = opts.after;\n    this.before = opts.before;\n    this.type = opts.type;\n    this.value = opts.value;\n    this.sourceIndex = opts.sourceIndex;\n  }\n  Node$1.default = Node;\n  return Node$1;\n}\nvar hasRequiredContainer;\nfunction requireContainer() {\n  if (hasRequiredContainer) return Container;\n  hasRequiredContainer = 1;\n  Object.defineProperty(Container, \"__esModule\", {\n    value: true\n  });\n  var _Node = requireNode();\n  var _Node2 = _interopRequireDefault(_Node);\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n  function Container$1(opts) {\n    var _this = this;\n    this.constructor(opts);\n    this.nodes = opts.nodes;\n    if (this.after === undefined) {\n      this.after = this.nodes.length > 0 ? this.nodes[this.nodes.length - 1].after : '';\n    }\n    if (this.before === undefined) {\n      this.before = this.nodes.length > 0 ? this.nodes[0].before : '';\n    }\n    if (this.sourceIndex === undefined) {\n      this.sourceIndex = this.before.length;\n    }\n    this.nodes.forEach(function (node) {\n      node.parent = _this; // eslint-disable-line no-param-reassign\n    });\n  } /**\r\n     * A node that contains other nodes and support traversing over them\r\n     */\n\n  Container$1.prototype = Object.create(_Node2.default.prototype);\n  Container$1.constructor = _Node2.default;\n\n  /**\r\n   * Iterate over descendant nodes of the node\r\n   *\r\n   * @param {RegExp|string} filter - Optional. Only nodes with node.type that\r\n   *    satisfies the filter will be traversed over\r\n   * @param {function} cb - callback to call on each node. Takes theese params:\r\n   *    node - the node being processed, i - it's index, nodes - the array\r\n   *    of all nodes\r\n   *    If false is returned, the iteration breaks\r\n   *\r\n   * @return (boolean) false, if the iteration was broken\r\n   */\n  Container$1.prototype.walk = function walk(filter, cb) {\n    var hasFilter = typeof filter === 'string' || filter instanceof RegExp;\n    var callback = hasFilter ? cb : filter;\n    var filterReg = typeof filter === 'string' ? new RegExp(filter) : filter;\n    for (var i = 0; i < this.nodes.length; i++) {\n      var node = this.nodes[i];\n      var filtered = hasFilter ? filterReg.test(node.type) : true;\n      if (filtered && callback && callback(node, i, this.nodes) === false) {\n        return false;\n      }\n      if (node.nodes && node.walk(filter, cb) === false) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  /**\r\n   * Iterate over immediate children of the node\r\n   *\r\n   * @param {function} cb - callback to call on each node. Takes theese params:\r\n   *    node - the node being processed, i - it's index, nodes - the array\r\n   *    of all nodes\r\n   *    If false is returned, the iteration breaks\r\n   *\r\n   * @return (boolean) false, if the iteration was broken\r\n   */\n  Container$1.prototype.each = function each() {\n    var cb = arguments.length <= 0 || arguments[0] === undefined ? function () {} : arguments[0];\n    for (var i = 0; i < this.nodes.length; i++) {\n      var node = this.nodes[i];\n      if (cb(node, i, this.nodes) === false) {\n        return false;\n      }\n    }\n    return true;\n  };\n  Container.default = Container$1;\n  return Container;\n}\nvar parsers = {};\nvar hasRequiredParsers;\nfunction requireParsers() {\n  if (hasRequiredParsers) return parsers;\n  hasRequiredParsers = 1;\n  Object.defineProperty(parsers, \"__esModule\", {\n    value: true\n  });\n  parsers.parseMediaFeature = parseMediaFeature;\n  parsers.parseMediaQuery = parseMediaQuery;\n  parsers.parseMediaList = parseMediaList;\n  var _Node = requireNode();\n  var _Node2 = _interopRequireDefault(_Node);\n  var _Container = requireContainer();\n  var _Container2 = _interopRequireDefault(_Container);\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  /**\r\n   * Parses a media feature expression, e.g. `max-width: 10px`, `(color)`\r\n   *\r\n   * @param {string} string - the source expression string, can be inside parens\r\n   * @param {Number} index - the index of `string` in the overall input\r\n   *\r\n   * @return {Array} an array of Nodes, the first element being a media feature,\r\n   *    the secont - its value (may be missing)\r\n   */\n\n  function parseMediaFeature(string) {\n    var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    var modesEntered = [{\n      mode: 'normal',\n      character: null\n    }];\n    var result = [];\n    var lastModeIndex = 0;\n    var mediaFeature = '';\n    var colon = null;\n    var mediaFeatureValue = null;\n    var indexLocal = index;\n    var stringNormalized = string;\n    // Strip trailing parens (if any), and correct the starting index\n    if (string[0] === '(' && string[string.length - 1] === ')') {\n      stringNormalized = string.substring(1, string.length - 1);\n      indexLocal++;\n    }\n    for (var i = 0; i < stringNormalized.length; i++) {\n      var character = stringNormalized[i];\n\n      // If entering/exiting a string\n      if (character === '\\'' || character === '\"') {\n        if (modesEntered[lastModeIndex].isCalculationEnabled === true) {\n          modesEntered.push({\n            mode: 'string',\n            isCalculationEnabled: false,\n            character: character\n          });\n          lastModeIndex++;\n        } else if (modesEntered[lastModeIndex].mode === 'string' && modesEntered[lastModeIndex].character === character && stringNormalized[i - 1] !== '\\\\') {\n          modesEntered.pop();\n          lastModeIndex--;\n        }\n      }\n\n      // If entering/exiting interpolation\n      if (character === '{') {\n        modesEntered.push({\n          mode: 'interpolation',\n          isCalculationEnabled: true\n        });\n        lastModeIndex++;\n      } else if (character === '}') {\n        modesEntered.pop();\n        lastModeIndex--;\n      }\n\n      // If a : is met outside of a string, function call or interpolation, than\n      // this : separates a media feature and a value\n      if (modesEntered[lastModeIndex].mode === 'normal' && character === ':') {\n        var mediaFeatureValueStr = stringNormalized.substring(i + 1);\n        mediaFeatureValue = {\n          type: 'value',\n          before: /^(\\s*)/.exec(mediaFeatureValueStr)[1],\n          after: /(\\s*)$/.exec(mediaFeatureValueStr)[1],\n          value: mediaFeatureValueStr.trim()\n        };\n        // +1 for the colon\n        mediaFeatureValue.sourceIndex = mediaFeatureValue.before.length + i + 1 + indexLocal;\n        colon = {\n          type: 'colon',\n          sourceIndex: i + indexLocal,\n          after: mediaFeatureValue.before,\n          value: ':'\n        };\n        break;\n      }\n      mediaFeature += character;\n    }\n\n    // Forming a media feature node\n    mediaFeature = {\n      type: 'media-feature',\n      before: /^(\\s*)/.exec(mediaFeature)[1],\n      after: /(\\s*)$/.exec(mediaFeature)[1],\n      value: mediaFeature.trim()\n    };\n    mediaFeature.sourceIndex = mediaFeature.before.length + indexLocal;\n    result.push(mediaFeature);\n    if (colon !== null) {\n      colon.before = mediaFeature.after;\n      result.push(colon);\n    }\n    if (mediaFeatureValue !== null) {\n      result.push(mediaFeatureValue);\n    }\n    return result;\n  }\n\n  /**\r\n   * Parses a media query, e.g. `screen and (color)`, `only tv`\r\n   *\r\n   * @param {string} string - the source media query string\r\n   * @param {Number} index - the index of `string` in the overall input\r\n   *\r\n   * @return {Array} an array of Nodes and Containers\r\n   */\n\n  function parseMediaQuery(string) {\n    var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    var result = [];\n\n    // How many timies the parser entered parens/curly braces\n    var localLevel = 0;\n    // Has any keyword, media type, media feature expression or interpolation\n    // ('element' hereafter) started\n    var insideSomeValue = false;\n    var node = void 0;\n    function resetNode() {\n      return {\n        before: '',\n        after: '',\n        value: ''\n      };\n    }\n    node = resetNode();\n    for (var i = 0; i < string.length; i++) {\n      var character = string[i];\n      // If not yet entered any element\n      if (!insideSomeValue) {\n        if (character.search(/\\s/) !== -1) {\n          // A whitespace\n          // Don't form 'after' yet; will do it later\n          node.before += character;\n        } else {\n          // Not a whitespace - entering an element\n          // Expression start\n          if (character === '(') {\n            node.type = 'media-feature-expression';\n            localLevel++;\n          }\n          node.value = character;\n          node.sourceIndex = index + i;\n          insideSomeValue = true;\n        }\n      } else {\n        // Already in the middle of some alement\n        node.value += character;\n\n        // Here parens just increase localLevel and don't trigger a start of\n        // a media feature expression (since they can't be nested)\n        // Interpolation start\n        if (character === '{' || character === '(') {\n          localLevel++;\n        }\n        // Interpolation/function call/media feature expression end\n        if (character === ')' || character === '}') {\n          localLevel--;\n        }\n      }\n\n      // If exited all parens/curlies and the next symbol\n      if (insideSomeValue && localLevel === 0 && (character === ')' || i === string.length - 1 || string[i + 1].search(/\\s/) !== -1)) {\n        if (['not', 'only', 'and'].indexOf(node.value) !== -1) {\n          node.type = 'keyword';\n        }\n        // if it's an expression, parse its contents\n        if (node.type === 'media-feature-expression') {\n          node.nodes = parseMediaFeature(node.value, node.sourceIndex);\n        }\n        result.push(Array.isArray(node.nodes) ? new _Container2.default(node) : new _Node2.default(node));\n        node = resetNode();\n        insideSomeValue = false;\n      }\n    }\n\n    // Now process the result array - to specify undefined types of the nodes\n    // and specify the `after` prop\n    for (var _i = 0; _i < result.length; _i++) {\n      node = result[_i];\n      if (_i > 0) {\n        result[_i - 1].after = node.before;\n      }\n\n      // Node types. Might not be set because contains interpolation/function\n      // calls or fully consists of them\n      if (node.type === undefined) {\n        if (_i > 0) {\n          // only `and` can follow an expression\n          if (result[_i - 1].type === 'media-feature-expression') {\n            node.type = 'keyword';\n            continue;\n          }\n          // Anything after 'only|not' is a media type\n          if (result[_i - 1].value === 'not' || result[_i - 1].value === 'only') {\n            node.type = 'media-type';\n            continue;\n          }\n          // Anything after 'and' is an expression\n          if (result[_i - 1].value === 'and') {\n            node.type = 'media-feature-expression';\n            continue;\n          }\n          if (result[_i - 1].type === 'media-type') {\n            // if it is the last element - it might be an expression\n            // or 'and' depending on what is after it\n            if (!result[_i + 1]) {\n              node.type = 'media-feature-expression';\n            } else {\n              node.type = result[_i + 1].type === 'media-feature-expression' ? 'keyword' : 'media-feature-expression';\n            }\n          }\n        }\n        if (_i === 0) {\n          // `screen`, `fn( ... )`, `#{ ... }`. Not an expression, since then\n          // its type would have been set by now\n          if (!result[_i + 1]) {\n            node.type = 'media-type';\n            continue;\n          }\n\n          // `screen and` or `#{...} (max-width: 10px)`\n          if (result[_i + 1] && (result[_i + 1].type === 'media-feature-expression' || result[_i + 1].type === 'keyword')) {\n            node.type = 'media-type';\n            continue;\n          }\n          if (result[_i + 2]) {\n            // `screen and (color) ...`\n            if (result[_i + 2].type === 'media-feature-expression') {\n              node.type = 'media-type';\n              result[_i + 1].type = 'keyword';\n              continue;\n            }\n            // `only screen and ...`\n            if (result[_i + 2].type === 'keyword') {\n              node.type = 'keyword';\n              result[_i + 1].type = 'media-type';\n              continue;\n            }\n          }\n          if (result[_i + 3]) {\n            // `screen and (color) ...`\n            if (result[_i + 3].type === 'media-feature-expression') {\n              node.type = 'keyword';\n              result[_i + 1].type = 'media-type';\n              result[_i + 2].type = 'keyword';\n              continue;\n            }\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  /**\r\n   * Parses a media query list. Takes a possible `url()` at the start into\r\n   * account, and divides the list into media queries that are parsed separately\r\n   *\r\n   * @param {string} string - the source media query list string\r\n   *\r\n   * @return {Array} an array of Nodes/Containers\r\n   */\n\n  function parseMediaList(string) {\n    var result = [];\n    var interimIndex = 0;\n    var levelLocal = 0;\n\n    // Check for a `url(...)` part (if it is contents of an @import rule)\n    var doesHaveUrl = /^(\\s*)url\\s*\\(/.exec(string);\n    if (doesHaveUrl !== null) {\n      var i = doesHaveUrl[0].length;\n      var parenthesesLv = 1;\n      while (parenthesesLv > 0) {\n        var character = string[i];\n        if (character === '(') {\n          parenthesesLv++;\n        }\n        if (character === ')') {\n          parenthesesLv--;\n        }\n        i++;\n      }\n      result.unshift(new _Node2.default({\n        type: 'url',\n        value: string.substring(0, i).trim(),\n        sourceIndex: doesHaveUrl[1].length,\n        before: doesHaveUrl[1],\n        after: /^(\\s*)/.exec(string.substring(i))[1]\n      }));\n      interimIndex = i;\n    }\n\n    // Start processing the media query list\n    for (var _i2 = interimIndex; _i2 < string.length; _i2++) {\n      var _character = string[_i2];\n\n      // Dividing the media query list into comma-separated media queries\n      // Only count commas that are outside of any parens\n      // (i.e., not part of function call params list, etc.)\n      if (_character === '(') {\n        levelLocal++;\n      }\n      if (_character === ')') {\n        levelLocal--;\n      }\n      if (levelLocal === 0 && _character === ',') {\n        var _mediaQueryString = string.substring(interimIndex, _i2);\n        var _spaceBefore = /^(\\s*)/.exec(_mediaQueryString)[1];\n        result.push(new _Container2.default({\n          type: 'media-query',\n          value: _mediaQueryString.trim(),\n          sourceIndex: interimIndex + _spaceBefore.length,\n          nodes: parseMediaQuery(_mediaQueryString, interimIndex),\n          before: _spaceBefore,\n          after: /(\\s*)$/.exec(_mediaQueryString)[1]\n        }));\n        interimIndex = _i2 + 1;\n      }\n    }\n    var mediaQueryString = string.substring(interimIndex);\n    var spaceBefore = /^(\\s*)/.exec(mediaQueryString)[1];\n    result.push(new _Container2.default({\n      type: 'media-query',\n      value: mediaQueryString.trim(),\n      sourceIndex: interimIndex + spaceBefore.length,\n      nodes: parseMediaQuery(mediaQueryString, interimIndex),\n      before: spaceBefore,\n      after: /(\\s*)$/.exec(mediaQueryString)[1]\n    }));\n    return result;\n  }\n  return parsers;\n}\nvar hasRequiredDist;\nfunction requireDist() {\n  if (hasRequiredDist) return dist;\n  hasRequiredDist = 1;\n  Object.defineProperty(dist, \"__esModule\", {\n    value: true\n  });\n  dist.default = parseMedia;\n  var _Container = requireContainer();\n  var _Container2 = _interopRequireDefault(_Container);\n  var _parsers = requireParsers();\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  /**\r\n   * Parses a media query list into an array of nodes. A typical node signature:\r\n   *  {string} node.type -- one of: 'media-query', 'media-type', 'keyword',\r\n   *    'media-feature-expression', 'media-feature', 'colon', 'value'\r\n   *  {string} node.value -- the contents of a particular element, trimmed\r\n   *    e.g.: `screen`, `max-width`, `1024px`\r\n   *  {string} node.after -- whitespaces that follow the element\r\n   *  {string} node.before -- whitespaces that precede the element\r\n   *  {string} node.sourceIndex -- the index of the element in a source media\r\n   *    query list, 0-based\r\n   *  {object} node.parent -- a link to the parent node (a container)\r\n   *\r\n   * Some nodes (media queries, media feature expressions) contain other nodes.\r\n   * They additionally have:\r\n   *  {array} node.nodes -- an array of nodes of the type described here\r\n   *  {funciton} node.each -- traverses direct children of the node, calling\r\n   *    a callback for each one\r\n   *  {funciton} node.walk -- traverses ALL descendants of the node, calling\r\n   *    a callback for each one\r\n   */\n\n  function parseMedia(value) {\n    return new _Container2.default({\n      nodes: (0, _parsers.parseMediaList)(value),\n      type: 'media-query-list',\n      value: value.trim()\n    });\n  }\n  return dist;\n}\nvar distExports = requireDist();\nvar mediaParser = /*@__PURE__*/getDefaultExportFromCjs(distExports);\n\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n  /** Type for the root element of a document */\n  ElementType[\"Root\"] = \"root\";\n  /** Type for Text */\n  ElementType[\"Text\"] = \"text\";\n  /** Type for <? ... ?> */\n  ElementType[\"Directive\"] = \"directive\";\n  /** Type for <!-- ... --> */\n  ElementType[\"Comment\"] = \"comment\";\n  /** Type for <script> tags */\n  ElementType[\"Script\"] = \"script\";\n  /** Type for <style> tags */\n  ElementType[\"Style\"] = \"style\";\n  /** Type for Any tag */\n  ElementType[\"Tag\"] = \"tag\";\n  /** Type for <![CDATA[ ... ]]> */\n  ElementType[\"CDATA\"] = \"cdata\";\n  /** Type for <!doctype ...> */\n  ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag$1(elem) {\n  return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nconst Root = ElementType.Root;\n/** Type for Text */\nconst Text$1 = ElementType.Text;\n/** Type for <? ... ?> */\nconst Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nconst Comment$1 = ElementType.Comment;\n/** Type for <script> tags */\nconst Script = ElementType.Script;\n/** Type for <style> tags */\nconst Style = ElementType.Style;\n/** Type for Any tag */\nconst Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nconst CDATA$1 = ElementType.CDATA;\n/** Type for <!doctype ...> */\nconst Doctype = ElementType.Doctype;\n\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nclass Node {\n  constructor() {\n    /** Parent of the node */\n    this.parent = null;\n    /** Previous sibling */\n    this.prev = null;\n    /** Next sibling */\n    this.next = null;\n    /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n    this.startIndex = null;\n    /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n    this.endIndex = null;\n  }\n  // Read-write aliases for properties\n  /**\n   * Same as {@link parent}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get parentNode() {\n    return this.parent;\n  }\n  set parentNode(parent) {\n    this.parent = parent;\n  }\n  /**\n   * Same as {@link prev}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get previousSibling() {\n    return this.prev;\n  }\n  set previousSibling(prev) {\n    this.prev = prev;\n  }\n  /**\n   * Same as {@link next}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get nextSibling() {\n    return this.next;\n  }\n  set nextSibling(next) {\n    this.next = next;\n  }\n  /**\n   * Clone this node, and optionally its children.\n   *\n   * @param recursive Clone child nodes as well.\n   * @returns A clone of the node.\n   */\n  cloneNode(recursive = false) {\n    return cloneNode(this, recursive);\n  }\n}\n/**\n * A node that contains some data.\n */\nclass DataNode extends Node {\n  /**\n   * @param data The content of the data node\n   */\n  constructor(data) {\n    super();\n    this.data = data;\n  }\n  /**\n   * Same as {@link data}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get nodeValue() {\n    return this.data;\n  }\n  set nodeValue(data) {\n    this.data = data;\n  }\n}\n/**\n * Text within the document.\n */\nclass Text extends DataNode {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Text;\n  }\n  get nodeType() {\n    return 3;\n  }\n}\n/**\n * Comments within the document.\n */\nclass Comment extends DataNode {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Comment;\n  }\n  get nodeType() {\n    return 8;\n  }\n}\n/**\n * Processing instructions, including doc types.\n */\nclass ProcessingInstruction extends DataNode {\n  constructor(name, data) {\n    super(data);\n    this.name = name;\n    this.type = ElementType.Directive;\n  }\n  get nodeType() {\n    return 1;\n  }\n}\n/**\n * A `Node` that can have children.\n */\nclass NodeWithChildren extends Node {\n  /**\n   * @param children Children of the node. Only certain node types can have children.\n   */\n  constructor(children) {\n    super();\n    this.children = children;\n  }\n  // Aliases\n  /** First child of the node. */\n  get firstChild() {\n    var _a;\n    return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n  }\n  /** Last child of the node. */\n  get lastChild() {\n    return this.children.length > 0 ? this.children[this.children.length - 1] : null;\n  }\n  /**\n   * Same as {@link children}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get childNodes() {\n    return this.children;\n  }\n  set childNodes(children) {\n    this.children = children;\n  }\n}\nclass CDATA extends NodeWithChildren {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.CDATA;\n  }\n  get nodeType() {\n    return 4;\n  }\n}\n/**\n * The root node of the document.\n */\nclass Document extends NodeWithChildren {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Root;\n  }\n  get nodeType() {\n    return 9;\n  }\n}\n/**\n * An element within the DOM.\n */\nclass Element extends NodeWithChildren {\n  /**\n   * @param name Name of the tag, eg. `div`, `span`.\n   * @param attribs Object mapping attribute names to attribute values.\n   * @param children Children of the node.\n   */\n  constructor(name, attribs, children = [], type = name === \"script\" ? ElementType.Script : name === \"style\" ? ElementType.Style : ElementType.Tag) {\n    super(children);\n    this.name = name;\n    this.attribs = attribs;\n    this.type = type;\n  }\n  get nodeType() {\n    return 1;\n  }\n  // DOM Level 1 aliases\n  /**\n   * Same as {@link name}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get tagName() {\n    return this.name;\n  }\n  set tagName(name) {\n    this.name = name;\n  }\n  get attributes() {\n    return Object.keys(this.attribs).map(name => {\n      var _a, _b;\n      return {\n        name,\n        value: this.attribs[name],\n        namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n        prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name]\n      };\n    });\n  }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n  return isTag$1(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n  return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n  return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n  return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n  return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n  return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n  return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive = false) {\n  let result;\n  if (isText(node)) {\n    result = new Text(node.data);\n  } else if (isComment(node)) {\n    result = new Comment(node.data);\n  } else if (isTag(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new Element(node.name, {\n      ...node.attribs\n    }, children);\n    children.forEach(child => child.parent = clone);\n    if (node.namespace != null) {\n      clone.namespace = node.namespace;\n    }\n    if (node[\"x-attribsNamespace\"]) {\n      clone[\"x-attribsNamespace\"] = {\n        ...node[\"x-attribsNamespace\"]\n      };\n    }\n    if (node[\"x-attribsPrefix\"]) {\n      clone[\"x-attribsPrefix\"] = {\n        ...node[\"x-attribsPrefix\"]\n      };\n    }\n    result = clone;\n  } else if (isCDATA(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new CDATA(children);\n    children.forEach(child => child.parent = clone);\n    result = clone;\n  } else if (isDocument(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new Document(children);\n    children.forEach(child => child.parent = clone);\n    if (node[\"x-mode\"]) {\n      clone[\"x-mode\"] = node[\"x-mode\"];\n    }\n    result = clone;\n  } else if (isDirective(node)) {\n    const instruction = new ProcessingInstruction(node.name, node.data);\n    if (node[\"x-name\"] != null) {\n      instruction[\"x-name\"] = node[\"x-name\"];\n      instruction[\"x-publicId\"] = node[\"x-publicId\"];\n      instruction[\"x-systemId\"] = node[\"x-systemId\"];\n    }\n    result = instruction;\n  } else {\n    throw new Error(`Not implemented yet: ${node.type}`);\n  }\n  result.startIndex = node.startIndex;\n  result.endIndex = node.endIndex;\n  if (node.sourceCodeLocation != null) {\n    result.sourceCodeLocation = node.sourceCodeLocation;\n  }\n  return result;\n}\nfunction cloneChildren(childs) {\n  const children = childs.map(child => cloneNode(child, true));\n  for (let i = 1; i < children.length; i++) {\n    children[i].prev = children[i - 1];\n    children[i - 1].next = children[i];\n  }\n  return children;\n}\n\n// Default options\nconst defaultOpts = {\n  withStartIndices: false,\n  withEndIndices: false,\n  xmlMode: false\n};\nclass DomHandler {\n  /**\n   * @param callback Called once parsing has completed.\n   * @param options Settings for the handler.\n   * @param elementCB Callback whenever a tag is closed.\n   */\n  constructor(callback, options, elementCB) {\n    /** The elements of the DOM */\n    this.dom = [];\n    /** The root element for the DOM */\n    this.root = new Document(this.dom);\n    /** Indicated whether parsing has been completed. */\n    this.done = false;\n    /** Stack of open tags. */\n    this.tagStack = [this.root];\n    /** A data node that is still being written to. */\n    this.lastNode = null;\n    /** Reference to the parser instance. Used for location information. */\n    this.parser = null;\n    // Make it possible to skip arguments, for backwards-compatibility\n    if (typeof options === \"function\") {\n      elementCB = options;\n      options = defaultOpts;\n    }\n    if (typeof callback === \"object\") {\n      options = callback;\n      callback = undefined;\n    }\n    this.callback = callback !== null && callback !== void 0 ? callback : null;\n    this.options = options !== null && options !== void 0 ? options : defaultOpts;\n    this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n  }\n  onparserinit(parser) {\n    this.parser = parser;\n  }\n  // Resets the handler back to starting state\n  onreset() {\n    this.dom = [];\n    this.root = new Document(this.dom);\n    this.done = false;\n    this.tagStack = [this.root];\n    this.lastNode = null;\n    this.parser = null;\n  }\n  // Signals the handler that parsing is done\n  onend() {\n    if (this.done) return;\n    this.done = true;\n    this.parser = null;\n    this.handleCallback(null);\n  }\n  onerror(error) {\n    this.handleCallback(error);\n  }\n  onclosetag() {\n    this.lastNode = null;\n    const elem = this.tagStack.pop();\n    if (this.options.withEndIndices) {\n      elem.endIndex = this.parser.endIndex;\n    }\n    if (this.elementCB) this.elementCB(elem);\n  }\n  onopentag(name, attribs) {\n    const type = this.options.xmlMode ? ElementType.Tag : undefined;\n    const element = new Element(name, attribs, undefined, type);\n    this.addNode(element);\n    this.tagStack.push(element);\n  }\n  ontext(data) {\n    const {\n      lastNode\n    } = this;\n    if (lastNode && lastNode.type === ElementType.Text) {\n      lastNode.data += data;\n      if (this.options.withEndIndices) {\n        lastNode.endIndex = this.parser.endIndex;\n      }\n    } else {\n      const node = new Text(data);\n      this.addNode(node);\n      this.lastNode = node;\n    }\n  }\n  oncomment(data) {\n    if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n      this.lastNode.data += data;\n      return;\n    }\n    const node = new Comment(data);\n    this.addNode(node);\n    this.lastNode = node;\n  }\n  oncommentend() {\n    this.lastNode = null;\n  }\n  oncdatastart() {\n    const text = new Text(\"\");\n    const node = new CDATA([text]);\n    this.addNode(node);\n    text.parent = node;\n    this.lastNode = text;\n  }\n  oncdataend() {\n    this.lastNode = null;\n  }\n  onprocessinginstruction(name, data) {\n    const node = new ProcessingInstruction(name, data);\n    this.addNode(node);\n  }\n  handleCallback(error) {\n    if (typeof this.callback === \"function\") {\n      this.callback(error, this.dom);\n    } else if (error) {\n      throw error;\n    }\n  }\n  addNode(node) {\n    const parent = this.tagStack[this.tagStack.length - 1];\n    const previousSibling = parent.children[parent.children.length - 1];\n    if (this.options.withStartIndices) {\n      node.startIndex = this.parser.startIndex;\n    }\n    if (this.options.withEndIndices) {\n      node.endIndex = this.parser.endIndex;\n    }\n    parent.children.push(node);\n    if (previousSibling) {\n      node.prev = previousSibling;\n      previousSibling.next = node;\n    }\n    node.parent = parent;\n    this.lastNode = null;\n  }\n}\n\n// Generated using scripts/write-decode-map.ts\nvar htmlDecodeTree = new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\".split(\"\").map(c => c.charCodeAt(0)));\n\n// Generated using scripts/write-decode-map.ts\nvar xmlDecodeTree = new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\".split(\"\").map(c => c.charCodeAt(0)));\n\n// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([[0, 65533],\n// C1 Unicode control character reference replacements\n[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nconst fromCodePoint =\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n  let output = \"\";\n  if (codePoint > 0xffff) {\n    codePoint -= 0x10000;\n    output += String.fromCharCode(codePoint >>> 10 & 0x3ff | 0xd800);\n    codePoint = 0xdc00 | codePoint & 0x3ff;\n  }\n  output += String.fromCharCode(codePoint);\n  return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nfunction replaceCodePoint(codePoint) {\n  var _a;\n  if (codePoint >= 0xd800 && codePoint <= 0xdfff || codePoint > 0x10ffff) {\n    return 0xfffd;\n  }\n  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\nvar CharCodes$1;\n(function (CharCodes) {\n  CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n  CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n  CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n  CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n  CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n  CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n  CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n  CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n  CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n  CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n  CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n  CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes$1 || (CharCodes$1 = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nvar BinTrieFlags;\n(function (BinTrieFlags) {\n  BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n  BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n  BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n  return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_F || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_F;\n}\nfunction isAsciiAlphaNumeric(code) {\n  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_Z || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_Z || isNumber(code);\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n  return code === CharCodes$1.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n  EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n  EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n  EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n  EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n  EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nvar DecodingMode;\n(function (DecodingMode) {\n  /** Entities in text nodes that can end with any character. */\n  DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n  /** Only allow entities terminated with a semicolon. */\n  DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n  /** Entities in attributes have limitations on ending characters. */\n  DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nclass EntityDecoder {\n  constructor(/** The tree used to decode entities. */\n  decodeTree,\n  /**\n   * The function that is called when a codepoint is decoded.\n   *\n   * For multi-byte named entities, this will be called multiple times,\n   * with the second codepoint, and the same `consumed` value.\n   *\n   * @param codepoint The decoded codepoint.\n   * @param consumed The number of bytes consumed by the decoder.\n   */\n  emitCodePoint, /** An object that is used to produce errors. */\n  errors) {\n    this.decodeTree = decodeTree;\n    this.emitCodePoint = emitCodePoint;\n    this.errors = errors;\n    /** The current state of the decoder. */\n    this.state = EntityDecoderState.EntityStart;\n    /** Characters that were consumed while parsing an entity. */\n    this.consumed = 1;\n    /**\n     * The result of the entity.\n     *\n     * Either the result index of a numeric entity, or the codepoint of a\n     * numeric entity.\n     */\n    this.result = 0;\n    /** The current index in the decode tree. */\n    this.treeIndex = 0;\n    /** The number of characters that were consumed in excess. */\n    this.excess = 1;\n    /** The mode in which the decoder is operating. */\n    this.decodeMode = DecodingMode.Strict;\n  }\n  /** Resets the instance to make it reusable. */\n  startEntity(decodeMode) {\n    this.decodeMode = decodeMode;\n    this.state = EntityDecoderState.EntityStart;\n    this.result = 0;\n    this.treeIndex = 0;\n    this.excess = 1;\n    this.consumed = 1;\n  }\n  /**\n   * Write an entity to the decoder. This can be called multiple times with partial entities.\n   * If the entity is incomplete, the decoder will return -1.\n   *\n   * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n   * entity is incomplete, and resume when the next string is written.\n   *\n   * @param string The string containing the entity (or a continuation of the entity).\n   * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  write(str, offset) {\n    switch (this.state) {\n      case EntityDecoderState.EntityStart:\n        {\n          if (str.charCodeAt(offset) === CharCodes$1.NUM) {\n            this.state = EntityDecoderState.NumericStart;\n            this.consumed += 1;\n            return this.stateNumericStart(str, offset + 1);\n          }\n          this.state = EntityDecoderState.NamedEntity;\n          return this.stateNamedEntity(str, offset);\n        }\n      case EntityDecoderState.NumericStart:\n        {\n          return this.stateNumericStart(str, offset);\n        }\n      case EntityDecoderState.NumericDecimal:\n        {\n          return this.stateNumericDecimal(str, offset);\n        }\n      case EntityDecoderState.NumericHex:\n        {\n          return this.stateNumericHex(str, offset);\n        }\n      case EntityDecoderState.NamedEntity:\n        {\n          return this.stateNamedEntity(str, offset);\n        }\n    }\n  }\n  /**\n   * Switches between the numeric decimal and hexadecimal states.\n   *\n   * Equivalent to the `Numeric character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericStart(str, offset) {\n    if (offset >= str.length) {\n      return -1;\n    }\n    if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes$1.LOWER_X) {\n      this.state = EntityDecoderState.NumericHex;\n      this.consumed += 1;\n      return this.stateNumericHex(str, offset + 1);\n    }\n    this.state = EntityDecoderState.NumericDecimal;\n    return this.stateNumericDecimal(str, offset);\n  }\n  addToNumericResult(str, start, end, base) {\n    if (start !== end) {\n      const digitCount = end - start;\n      this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);\n      this.consumed += digitCount;\n    }\n  }\n  /**\n   * Parses a hexadecimal numeric entity.\n   *\n   * Equivalent to the `Hexademical character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericHex(str, offset) {\n    const startIdx = offset;\n    while (offset < str.length) {\n      const char = str.charCodeAt(offset);\n      if (isNumber(char) || isHexadecimalCharacter(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return this.emitNumericEntity(char, 3);\n      }\n    }\n    this.addToNumericResult(str, startIdx, offset, 16);\n    return -1;\n  }\n  /**\n   * Parses a decimal numeric entity.\n   *\n   * Equivalent to the `Decimal character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericDecimal(str, offset) {\n    const startIdx = offset;\n    while (offset < str.length) {\n      const char = str.charCodeAt(offset);\n      if (isNumber(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return this.emitNumericEntity(char, 2);\n      }\n    }\n    this.addToNumericResult(str, startIdx, offset, 10);\n    return -1;\n  }\n  /**\n   * Validate and emit a numeric entity.\n   *\n   * Implements the logic from the `Hexademical character reference start\n   * state` and `Numeric character reference end state` in the HTML spec.\n   *\n   * @param lastCp The last code point of the entity. Used to see if the\n   *               entity was terminated with a semicolon.\n   * @param expectedLength The minimum number of characters that should be\n   *                       consumed. Used to validate that at least one digit\n   *                       was consumed.\n   * @returns The number of characters that were consumed.\n   */\n  emitNumericEntity(lastCp, expectedLength) {\n    var _a;\n    // Ensure we consumed at least one digit.\n    if (this.consumed <= expectedLength) {\n      (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n      return 0;\n    }\n    // Figure out if this is a legit end of the entity\n    if (lastCp === CharCodes$1.SEMI) {\n      this.consumed += 1;\n    } else if (this.decodeMode === DecodingMode.Strict) {\n      return 0;\n    }\n    this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n    if (this.errors) {\n      if (lastCp !== CharCodes$1.SEMI) {\n        this.errors.missingSemicolonAfterCharacterReference();\n      }\n      this.errors.validateNumericCharacterReference(this.result);\n    }\n    return this.consumed;\n  }\n  /**\n   * Parses a named entity.\n   *\n   * Equivalent to the `Named character reference state` in the HTML spec.\n   *\n   * @param str The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNamedEntity(str, offset) {\n    const {\n      decodeTree\n    } = this;\n    let current = decodeTree[this.treeIndex];\n    // The mask is the number of bytes of the value, including the current byte.\n    let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n    for (; offset < str.length; offset++, this.excess++) {\n      const char = str.charCodeAt(offset);\n      this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n      if (this.treeIndex < 0) {\n        return this.result === 0 ||\n        // If we are parsing an attribute\n        this.decodeMode === DecodingMode.Attribute && (\n        // We shouldn't have consumed any characters after the entity,\n        valueLength === 0 ||\n        // And there should be no invalid characters.\n        isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();\n      }\n      current = decodeTree[this.treeIndex];\n      valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n      // If the branch is a value, store it and continue\n      if (valueLength !== 0) {\n        // If the entity is terminated by a semicolon, we are done.\n        if (char === CharCodes$1.SEMI) {\n          return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n        }\n        // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n        if (this.decodeMode !== DecodingMode.Strict) {\n          this.result = this.treeIndex;\n          this.consumed += this.excess;\n          this.excess = 0;\n        }\n      }\n    }\n    return -1;\n  }\n  /**\n   * Emit a named entity that was not terminated with a semicolon.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNotTerminatedNamedEntity() {\n    var _a;\n    const {\n      result,\n      decodeTree\n    } = this;\n    const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n    this.emitNamedEntityData(result, valueLength, this.consumed);\n    (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n    return this.consumed;\n  }\n  /**\n   * Emit a named entity.\n   *\n   * @param result The index of the entity in the decode tree.\n   * @param valueLength The number of bytes in the entity.\n   * @param consumed The number of characters consumed.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNamedEntityData(result, valueLength, consumed) {\n    const {\n      decodeTree\n    } = this;\n    this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);\n    if (valueLength === 3) {\n      // For multi-byte values, we need to emit the second byte.\n      this.emitCodePoint(decodeTree[result + 2], consumed);\n    }\n    return consumed;\n  }\n  /**\n   * Signal to the parser that the end of the input was reached.\n   *\n   * Remaining data will be emitted and relevant errors will be produced.\n   *\n   * @returns The number of characters consumed.\n   */\n  end() {\n    var _a;\n    switch (this.state) {\n      case EntityDecoderState.NamedEntity:\n        {\n          // Emit a named entity if we have one.\n          return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;\n        }\n      // Otherwise, emit a numeric entity if we have one.\n      case EntityDecoderState.NumericDecimal:\n        {\n          return this.emitNumericEntity(0, 2);\n        }\n      case EntityDecoderState.NumericHex:\n        {\n          return this.emitNumericEntity(0, 3);\n        }\n      case EntityDecoderState.NumericStart:\n        {\n          (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n          return 0;\n        }\n      case EntityDecoderState.EntityStart:\n        {\n          // Return 0 if we have no entity.\n          return 0;\n        }\n    }\n  }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n  let ret = \"\";\n  const decoder = new EntityDecoder(decodeTree, str => ret += fromCodePoint(str));\n  return function decodeWithTrie(str, decodeMode) {\n    let lastIndex = 0;\n    let offset = 0;\n    while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n      ret += str.slice(lastIndex, offset);\n      decoder.startEntity(decodeMode);\n      const len = decoder.write(str,\n      // Skip the \"&\"\n      offset + 1);\n      if (len < 0) {\n        lastIndex = offset + decoder.end();\n        break;\n      }\n      lastIndex = offset + len;\n      // If `len` is 0, skip the current `&` and continue.\n      offset = len === 0 ? lastIndex + 1 : lastIndex;\n    }\n    const result = ret + str.slice(lastIndex);\n    // Make sure we don't keep a reference to the final string.\n    ret = \"\";\n    return result;\n  };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nfunction determineBranch(decodeTree, current, nodeIdx, char) {\n  const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n  const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n  // Case 1: Single branch encoded in jump offset\n  if (branchCount === 0) {\n    return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n  }\n  // Case 2: Multiple branches encoded in jump table\n  if (jumpOffset) {\n    const value = char - jumpOffset;\n    return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;\n  }\n  // Case 3: Multiple branches encoded in dictionary\n  // Binary search for the character.\n  let lo = nodeIdx;\n  let hi = lo + branchCount - 1;\n  while (lo <= hi) {\n    const mid = lo + hi >>> 1;\n    const midVal = decodeTree[mid];\n    if (midVal < char) {\n      lo = mid + 1;\n    } else if (midVal > char) {\n      hi = mid - 1;\n    } else {\n      return decodeTree[mid + branchCount];\n    }\n  }\n  return -1;\n}\ngetDecoder(htmlDecodeTree);\ngetDecoder(xmlDecodeTree);\n\n// Generated using scripts/write-encode-map.ts\nfunction restoreDiff(arr) {\n  for (let i = 1; i < arr.length; i++) {\n    arr[i][0] += arr[i - 1][0] + 1;\n  }\n  return arr;\n}\n// prettier-ignore\nnew Map(/* #__PURE__ */restoreDiff([[9, \"&Tab;\"], [0, \"&NewLine;\"], [22, \"&excl;\"], [0, \"&quot;\"], [0, \"&num;\"], [0, \"&dollar;\"], [0, \"&percnt;\"], [0, \"&amp;\"], [0, \"&apos;\"], [0, \"&lpar;\"], [0, \"&rpar;\"], [0, \"&ast;\"], [0, \"&plus;\"], [0, \"&comma;\"], [1, \"&period;\"], [0, \"&sol;\"], [10, \"&colon;\"], [0, \"&semi;\"], [0, {\n  v: \"&lt;\",\n  n: 8402,\n  o: \"&nvlt;\"\n}], [0, {\n  v: \"&equals;\",\n  n: 8421,\n  o: \"&bne;\"\n}], [0, {\n  v: \"&gt;\",\n  n: 8402,\n  o: \"&nvgt;\"\n}], [0, \"&quest;\"], [0, \"&commat;\"], [26, \"&lbrack;\"], [0, \"&bsol;\"], [0, \"&rbrack;\"], [0, \"&Hat;\"], [0, \"&lowbar;\"], [0, \"&DiacriticalGrave;\"], [5, {\n  n: 106,\n  o: \"&fjlig;\"\n}], [20, \"&lbrace;\"], [0, \"&verbar;\"], [0, \"&rbrace;\"], [34, \"&nbsp;\"], [0, \"&iexcl;\"], [0, \"&cent;\"], [0, \"&pound;\"], [0, \"&curren;\"], [0, \"&yen;\"], [0, \"&brvbar;\"], [0, \"&sect;\"], [0, \"&die;\"], [0, \"&copy;\"], [0, \"&ordf;\"], [0, \"&laquo;\"], [0, \"&not;\"], [0, \"&shy;\"], [0, \"&circledR;\"], [0, \"&macr;\"], [0, \"&deg;\"], [0, \"&PlusMinus;\"], [0, \"&sup2;\"], [0, \"&sup3;\"], [0, \"&acute;\"], [0, \"&micro;\"], [0, \"&para;\"], [0, \"&centerdot;\"], [0, \"&cedil;\"], [0, \"&sup1;\"], [0, \"&ordm;\"], [0, \"&raquo;\"], [0, \"&frac14;\"], [0, \"&frac12;\"], [0, \"&frac34;\"], [0, \"&iquest;\"], [0, \"&Agrave;\"], [0, \"&Aacute;\"], [0, \"&Acirc;\"], [0, \"&Atilde;\"], [0, \"&Auml;\"], [0, \"&angst;\"], [0, \"&AElig;\"], [0, \"&Ccedil;\"], [0, \"&Egrave;\"], [0, \"&Eacute;\"], [0, \"&Ecirc;\"], [0, \"&Euml;\"], [0, \"&Igrave;\"], [0, \"&Iacute;\"], [0, \"&Icirc;\"], [0, \"&Iuml;\"], [0, \"&ETH;\"], [0, \"&Ntilde;\"], [0, \"&Ograve;\"], [0, \"&Oacute;\"], [0, \"&Ocirc;\"], [0, \"&Otilde;\"], [0, \"&Ouml;\"], [0, \"&times;\"], [0, \"&Oslash;\"], [0, \"&Ugrave;\"], [0, \"&Uacute;\"], [0, \"&Ucirc;\"], [0, \"&Uuml;\"], [0, \"&Yacute;\"], [0, \"&THORN;\"], [0, \"&szlig;\"], [0, \"&agrave;\"], [0, \"&aacute;\"], [0, \"&acirc;\"], [0, \"&atilde;\"], [0, \"&auml;\"], [0, \"&aring;\"], [0, \"&aelig;\"], [0, \"&ccedil;\"], [0, \"&egrave;\"], [0, \"&eacute;\"], [0, \"&ecirc;\"], [0, \"&euml;\"], [0, \"&igrave;\"], [0, \"&iacute;\"], [0, \"&icirc;\"], [0, \"&iuml;\"], [0, \"&eth;\"], [0, \"&ntilde;\"], [0, \"&ograve;\"], [0, \"&oacute;\"], [0, \"&ocirc;\"], [0, \"&otilde;\"], [0, \"&ouml;\"], [0, \"&div;\"], [0, \"&oslash;\"], [0, \"&ugrave;\"], [0, \"&uacute;\"], [0, \"&ucirc;\"], [0, \"&uuml;\"], [0, \"&yacute;\"], [0, \"&thorn;\"], [0, \"&yuml;\"], [0, \"&Amacr;\"], [0, \"&amacr;\"], [0, \"&Abreve;\"], [0, \"&abreve;\"], [0, \"&Aogon;\"], [0, \"&aogon;\"], [0, \"&Cacute;\"], [0, \"&cacute;\"], [0, \"&Ccirc;\"], [0, \"&ccirc;\"], [0, \"&Cdot;\"], [0, \"&cdot;\"], [0, \"&Ccaron;\"], [0, \"&ccaron;\"], [0, \"&Dcaron;\"], [0, \"&dcaron;\"], [0, \"&Dstrok;\"], [0, \"&dstrok;\"], [0, \"&Emacr;\"], [0, \"&emacr;\"], [2, \"&Edot;\"], [0, \"&edot;\"], [0, \"&Eogon;\"], [0, \"&eogon;\"], [0, \"&Ecaron;\"], [0, \"&ecaron;\"], [0, \"&Gcirc;\"], [0, \"&gcirc;\"], [0, \"&Gbreve;\"], [0, \"&gbreve;\"], [0, \"&Gdot;\"], [0, \"&gdot;\"], [0, \"&Gcedil;\"], [1, \"&Hcirc;\"], [0, \"&hcirc;\"], [0, \"&Hstrok;\"], [0, \"&hstrok;\"], [0, \"&Itilde;\"], [0, \"&itilde;\"], [0, \"&Imacr;\"], [0, \"&imacr;\"], [2, \"&Iogon;\"], [0, \"&iogon;\"], [0, \"&Idot;\"], [0, \"&imath;\"], [0, \"&IJlig;\"], [0, \"&ijlig;\"], [0, \"&Jcirc;\"], [0, \"&jcirc;\"], [0, \"&Kcedil;\"], [0, \"&kcedil;\"], [0, \"&kgreen;\"], [0, \"&Lacute;\"], [0, \"&lacute;\"], [0, \"&Lcedil;\"], [0, \"&lcedil;\"], [0, \"&Lcaron;\"], [0, \"&lcaron;\"], [0, \"&Lmidot;\"], [0, \"&lmidot;\"], [0, \"&Lstrok;\"], [0, \"&lstrok;\"], [0, \"&Nacute;\"], [0, \"&nacute;\"], [0, \"&Ncedil;\"], [0, \"&ncedil;\"], [0, \"&Ncaron;\"], [0, \"&ncaron;\"], [0, \"&napos;\"], [0, \"&ENG;\"], [0, \"&eng;\"], [0, \"&Omacr;\"], [0, \"&omacr;\"], [2, \"&Odblac;\"], [0, \"&odblac;\"], [0, \"&OElig;\"], [0, \"&oelig;\"], [0, \"&Racute;\"], [0, \"&racute;\"], [0, \"&Rcedil;\"], [0, \"&rcedil;\"], [0, \"&Rcaron;\"], [0, \"&rcaron;\"], [0, \"&Sacute;\"], [0, \"&sacute;\"], [0, \"&Scirc;\"], [0, \"&scirc;\"], [0, \"&Scedil;\"], [0, \"&scedil;\"], [0, \"&Scaron;\"], [0, \"&scaron;\"], [0, \"&Tcedil;\"], [0, \"&tcedil;\"], [0, \"&Tcaron;\"], [0, \"&tcaron;\"], [0, \"&Tstrok;\"], [0, \"&tstrok;\"], [0, \"&Utilde;\"], [0, \"&utilde;\"], [0, \"&Umacr;\"], [0, \"&umacr;\"], [0, \"&Ubreve;\"], [0, \"&ubreve;\"], [0, \"&Uring;\"], [0, \"&uring;\"], [0, \"&Udblac;\"], [0, \"&udblac;\"], [0, \"&Uogon;\"], [0, \"&uogon;\"], [0, \"&Wcirc;\"], [0, \"&wcirc;\"], [0, \"&Ycirc;\"], [0, \"&ycirc;\"], [0, \"&Yuml;\"], [0, \"&Zacute;\"], [0, \"&zacute;\"], [0, \"&Zdot;\"], [0, \"&zdot;\"], [0, \"&Zcaron;\"], [0, \"&zcaron;\"], [19, \"&fnof;\"], [34, \"&imped;\"], [63, \"&gacute;\"], [65, \"&jmath;\"], [142, \"&circ;\"], [0, \"&caron;\"], [16, \"&breve;\"], [0, \"&DiacriticalDot;\"], [0, \"&ring;\"], [0, \"&ogon;\"], [0, \"&DiacriticalTilde;\"], [0, \"&dblac;\"], [51, \"&DownBreve;\"], [127, \"&Alpha;\"], [0, \"&Beta;\"], [0, \"&Gamma;\"], [0, \"&Delta;\"], [0, \"&Epsilon;\"], [0, \"&Zeta;\"], [0, \"&Eta;\"], [0, \"&Theta;\"], [0, \"&Iota;\"], [0, \"&Kappa;\"], [0, \"&Lambda;\"], [0, \"&Mu;\"], [0, \"&Nu;\"], [0, \"&Xi;\"], [0, \"&Omicron;\"], [0, \"&Pi;\"], [0, \"&Rho;\"], [1, \"&Sigma;\"], [0, \"&Tau;\"], [0, \"&Upsilon;\"], [0, \"&Phi;\"], [0, \"&Chi;\"], [0, \"&Psi;\"], [0, \"&ohm;\"], [7, \"&alpha;\"], [0, \"&beta;\"], [0, \"&gamma;\"], [0, \"&delta;\"], [0, \"&epsi;\"], [0, \"&zeta;\"], [0, \"&eta;\"], [0, \"&theta;\"], [0, \"&iota;\"], [0, \"&kappa;\"], [0, \"&lambda;\"], [0, \"&mu;\"], [0, \"&nu;\"], [0, \"&xi;\"], [0, \"&omicron;\"], [0, \"&pi;\"], [0, \"&rho;\"], [0, \"&sigmaf;\"], [0, \"&sigma;\"], [0, \"&tau;\"], [0, \"&upsi;\"], [0, \"&phi;\"], [0, \"&chi;\"], [0, \"&psi;\"], [0, \"&omega;\"], [7, \"&thetasym;\"], [0, \"&Upsi;\"], [2, \"&phiv;\"], [0, \"&piv;\"], [5, \"&Gammad;\"], [0, \"&digamma;\"], [18, \"&kappav;\"], [0, \"&rhov;\"], [3, \"&epsiv;\"], [0, \"&backepsilon;\"], [10, \"&IOcy;\"], [0, \"&DJcy;\"], [0, \"&GJcy;\"], [0, \"&Jukcy;\"], [0, \"&DScy;\"], [0, \"&Iukcy;\"], [0, \"&YIcy;\"], [0, \"&Jsercy;\"], [0, \"&LJcy;\"], [0, \"&NJcy;\"], [0, \"&TSHcy;\"], [0, \"&KJcy;\"], [1, \"&Ubrcy;\"], [0, \"&DZcy;\"], [0, \"&Acy;\"], [0, \"&Bcy;\"], [0, \"&Vcy;\"], [0, \"&Gcy;\"], [0, \"&Dcy;\"], [0, \"&IEcy;\"], [0, \"&ZHcy;\"], [0, \"&Zcy;\"], [0, \"&Icy;\"], [0, \"&Jcy;\"], [0, \"&Kcy;\"], [0, \"&Lcy;\"], [0, \"&Mcy;\"], [0, \"&Ncy;\"], [0, \"&Ocy;\"], [0, \"&Pcy;\"], [0, \"&Rcy;\"], [0, \"&Scy;\"], [0, \"&Tcy;\"], [0, \"&Ucy;\"], [0, \"&Fcy;\"], [0, \"&KHcy;\"], [0, \"&TScy;\"], [0, \"&CHcy;\"], [0, \"&SHcy;\"], [0, \"&SHCHcy;\"], [0, \"&HARDcy;\"], [0, \"&Ycy;\"], [0, \"&SOFTcy;\"], [0, \"&Ecy;\"], [0, \"&YUcy;\"], [0, \"&YAcy;\"], [0, \"&acy;\"], [0, \"&bcy;\"], [0, \"&vcy;\"], [0, \"&gcy;\"], [0, \"&dcy;\"], [0, \"&iecy;\"], [0, \"&zhcy;\"], [0, \"&zcy;\"], [0, \"&icy;\"], [0, \"&jcy;\"], [0, \"&kcy;\"], [0, \"&lcy;\"], [0, \"&mcy;\"], [0, \"&ncy;\"], [0, \"&ocy;\"], [0, \"&pcy;\"], [0, \"&rcy;\"], [0, \"&scy;\"], [0, \"&tcy;\"], [0, \"&ucy;\"], [0, \"&fcy;\"], [0, \"&khcy;\"], [0, \"&tscy;\"], [0, \"&chcy;\"], [0, \"&shcy;\"], [0, \"&shchcy;\"], [0, \"&hardcy;\"], [0, \"&ycy;\"], [0, \"&softcy;\"], [0, \"&ecy;\"], [0, \"&yucy;\"], [0, \"&yacy;\"], [1, \"&iocy;\"], [0, \"&djcy;\"], [0, \"&gjcy;\"], [0, \"&jukcy;\"], [0, \"&dscy;\"], [0, \"&iukcy;\"], [0, \"&yicy;\"], [0, \"&jsercy;\"], [0, \"&ljcy;\"], [0, \"&njcy;\"], [0, \"&tshcy;\"], [0, \"&kjcy;\"], [1, \"&ubrcy;\"], [0, \"&dzcy;\"], [7074, \"&ensp;\"], [0, \"&emsp;\"], [0, \"&emsp13;\"], [0, \"&emsp14;\"], [1, \"&numsp;\"], [0, \"&puncsp;\"], [0, \"&ThinSpace;\"], [0, \"&hairsp;\"], [0, \"&NegativeMediumSpace;\"], [0, \"&zwnj;\"], [0, \"&zwj;\"], [0, \"&lrm;\"], [0, \"&rlm;\"], [0, \"&dash;\"], [2, \"&ndash;\"], [0, \"&mdash;\"], [0, \"&horbar;\"], [0, \"&Verbar;\"], [1, \"&lsquo;\"], [0, \"&CloseCurlyQuote;\"], [0, \"&lsquor;\"], [1, \"&ldquo;\"], [0, \"&CloseCurlyDoubleQuote;\"], [0, \"&bdquo;\"], [1, \"&dagger;\"], [0, \"&Dagger;\"], [0, \"&bull;\"], [2, \"&nldr;\"], [0, \"&hellip;\"], [9, \"&permil;\"], [0, \"&pertenk;\"], [0, \"&prime;\"], [0, \"&Prime;\"], [0, \"&tprime;\"], [0, \"&backprime;\"], [3, \"&lsaquo;\"], [0, \"&rsaquo;\"], [3, \"&oline;\"], [2, \"&caret;\"], [1, \"&hybull;\"], [0, \"&frasl;\"], [10, \"&bsemi;\"], [7, \"&qprime;\"], [7, {\n  v: \"&MediumSpace;\",\n  n: 8202,\n  o: \"&ThickSpace;\"\n}], [0, \"&NoBreak;\"], [0, \"&af;\"], [0, \"&InvisibleTimes;\"], [0, \"&ic;\"], [72, \"&euro;\"], [46, \"&tdot;\"], [0, \"&DotDot;\"], [37, \"&complexes;\"], [2, \"&incare;\"], [4, \"&gscr;\"], [0, \"&hamilt;\"], [0, \"&Hfr;\"], [0, \"&Hopf;\"], [0, \"&planckh;\"], [0, \"&hbar;\"], [0, \"&imagline;\"], [0, \"&Ifr;\"], [0, \"&lagran;\"], [0, \"&ell;\"], [1, \"&naturals;\"], [0, \"&numero;\"], [0, \"&copysr;\"], [0, \"&weierp;\"], [0, \"&Popf;\"], [0, \"&Qopf;\"], [0, \"&realine;\"], [0, \"&real;\"], [0, \"&reals;\"], [0, \"&rx;\"], [3, \"&trade;\"], [1, \"&integers;\"], [2, \"&mho;\"], [0, \"&zeetrf;\"], [0, \"&iiota;\"], [2, \"&bernou;\"], [0, \"&Cayleys;\"], [1, \"&escr;\"], [0, \"&Escr;\"], [0, \"&Fouriertrf;\"], [1, \"&Mellintrf;\"], [0, \"&order;\"], [0, \"&alefsym;\"], [0, \"&beth;\"], [0, \"&gimel;\"], [0, \"&daleth;\"], [12, \"&CapitalDifferentialD;\"], [0, \"&dd;\"], [0, \"&ee;\"], [0, \"&ii;\"], [10, \"&frac13;\"], [0, \"&frac23;\"], [0, \"&frac15;\"], [0, \"&frac25;\"], [0, \"&frac35;\"], [0, \"&frac45;\"], [0, \"&frac16;\"], [0, \"&frac56;\"], [0, \"&frac18;\"], [0, \"&frac38;\"], [0, \"&frac58;\"], [0, \"&frac78;\"], [49, \"&larr;\"], [0, \"&ShortUpArrow;\"], [0, \"&rarr;\"], [0, \"&darr;\"], [0, \"&harr;\"], [0, \"&updownarrow;\"], [0, \"&nwarr;\"], [0, \"&nearr;\"], [0, \"&LowerRightArrow;\"], [0, \"&LowerLeftArrow;\"], [0, \"&nlarr;\"], [0, \"&nrarr;\"], [1, {\n  v: \"&rarrw;\",\n  n: 824,\n  o: \"&nrarrw;\"\n}], [0, \"&Larr;\"], [0, \"&Uarr;\"], [0, \"&Rarr;\"], [0, \"&Darr;\"], [0, \"&larrtl;\"], [0, \"&rarrtl;\"], [0, \"&LeftTeeArrow;\"], [0, \"&mapstoup;\"], [0, \"&map;\"], [0, \"&DownTeeArrow;\"], [1, \"&hookleftarrow;\"], [0, \"&hookrightarrow;\"], [0, \"&larrlp;\"], [0, \"&looparrowright;\"], [0, \"&harrw;\"], [0, \"&nharr;\"], [1, \"&lsh;\"], [0, \"&rsh;\"], [0, \"&ldsh;\"], [0, \"&rdsh;\"], [1, \"&crarr;\"], [0, \"&cularr;\"], [0, \"&curarr;\"], [2, \"&circlearrowleft;\"], [0, \"&circlearrowright;\"], [0, \"&leftharpoonup;\"], [0, \"&DownLeftVector;\"], [0, \"&RightUpVector;\"], [0, \"&LeftUpVector;\"], [0, \"&rharu;\"], [0, \"&DownRightVector;\"], [0, \"&dharr;\"], [0, \"&dharl;\"], [0, \"&RightArrowLeftArrow;\"], [0, \"&udarr;\"], [0, \"&LeftArrowRightArrow;\"], [0, \"&leftleftarrows;\"], [0, \"&upuparrows;\"], [0, \"&rightrightarrows;\"], [0, \"&ddarr;\"], [0, \"&leftrightharpoons;\"], [0, \"&Equilibrium;\"], [0, \"&nlArr;\"], [0, \"&nhArr;\"], [0, \"&nrArr;\"], [0, \"&DoubleLeftArrow;\"], [0, \"&DoubleUpArrow;\"], [0, \"&DoubleRightArrow;\"], [0, \"&dArr;\"], [0, \"&DoubleLeftRightArrow;\"], [0, \"&DoubleUpDownArrow;\"], [0, \"&nwArr;\"], [0, \"&neArr;\"], [0, \"&seArr;\"], [0, \"&swArr;\"], [0, \"&lAarr;\"], [0, \"&rAarr;\"], [1, \"&zigrarr;\"], [6, \"&larrb;\"], [0, \"&rarrb;\"], [15, \"&DownArrowUpArrow;\"], [7, \"&loarr;\"], [0, \"&roarr;\"], [0, \"&hoarr;\"], [0, \"&forall;\"], [0, \"&comp;\"], [0, {\n  v: \"&part;\",\n  n: 824,\n  o: \"&npart;\"\n}], [0, \"&exist;\"], [0, \"&nexist;\"], [0, \"&empty;\"], [1, \"&Del;\"], [0, \"&Element;\"], [0, \"&NotElement;\"], [1, \"&ni;\"], [0, \"&notni;\"], [2, \"&prod;\"], [0, \"&coprod;\"], [0, \"&sum;\"], [0, \"&minus;\"], [0, \"&MinusPlus;\"], [0, \"&dotplus;\"], [1, \"&Backslash;\"], [0, \"&lowast;\"], [0, \"&compfn;\"], [1, \"&radic;\"], [2, \"&prop;\"], [0, \"&infin;\"], [0, \"&angrt;\"], [0, {\n  v: \"&ang;\",\n  n: 8402,\n  o: \"&nang;\"\n}], [0, \"&angmsd;\"], [0, \"&angsph;\"], [0, \"&mid;\"], [0, \"&nmid;\"], [0, \"&DoubleVerticalBar;\"], [0, \"&NotDoubleVerticalBar;\"], [0, \"&and;\"], [0, \"&or;\"], [0, {\n  v: \"&cap;\",\n  n: 65024,\n  o: \"&caps;\"\n}], [0, {\n  v: \"&cup;\",\n  n: 65024,\n  o: \"&cups;\"\n}], [0, \"&int;\"], [0, \"&Int;\"], [0, \"&iiint;\"], [0, \"&conint;\"], [0, \"&Conint;\"], [0, \"&Cconint;\"], [0, \"&cwint;\"], [0, \"&ClockwiseContourIntegral;\"], [0, \"&awconint;\"], [0, \"&there4;\"], [0, \"&becaus;\"], [0, \"&ratio;\"], [0, \"&Colon;\"], [0, \"&dotminus;\"], [1, \"&mDDot;\"], [0, \"&homtht;\"], [0, {\n  v: \"&sim;\",\n  n: 8402,\n  o: \"&nvsim;\"\n}], [0, {\n  v: \"&backsim;\",\n  n: 817,\n  o: \"&race;\"\n}], [0, {\n  v: \"&ac;\",\n  n: 819,\n  o: \"&acE;\"\n}], [0, \"&acd;\"], [0, \"&VerticalTilde;\"], [0, \"&NotTilde;\"], [0, {\n  v: \"&eqsim;\",\n  n: 824,\n  o: \"&nesim;\"\n}], [0, \"&sime;\"], [0, \"&NotTildeEqual;\"], [0, \"&cong;\"], [0, \"&simne;\"], [0, \"&ncong;\"], [0, \"&ap;\"], [0, \"&nap;\"], [0, \"&ape;\"], [0, {\n  v: \"&apid;\",\n  n: 824,\n  o: \"&napid;\"\n}], [0, \"&backcong;\"], [0, {\n  v: \"&asympeq;\",\n  n: 8402,\n  o: \"&nvap;\"\n}], [0, {\n  v: \"&bump;\",\n  n: 824,\n  o: \"&nbump;\"\n}], [0, {\n  v: \"&bumpe;\",\n  n: 824,\n  o: \"&nbumpe;\"\n}], [0, {\n  v: \"&doteq;\",\n  n: 824,\n  o: \"&nedot;\"\n}], [0, \"&doteqdot;\"], [0, \"&efDot;\"], [0, \"&erDot;\"], [0, \"&Assign;\"], [0, \"&ecolon;\"], [0, \"&ecir;\"], [0, \"&circeq;\"], [1, \"&wedgeq;\"], [0, \"&veeeq;\"], [1, \"&triangleq;\"], [2, \"&equest;\"], [0, \"&ne;\"], [0, {\n  v: \"&Congruent;\",\n  n: 8421,\n  o: \"&bnequiv;\"\n}], [0, \"&nequiv;\"], [1, {\n  v: \"&le;\",\n  n: 8402,\n  o: \"&nvle;\"\n}], [0, {\n  v: \"&ge;\",\n  n: 8402,\n  o: \"&nvge;\"\n}], [0, {\n  v: \"&lE;\",\n  n: 824,\n  o: \"&nlE;\"\n}], [0, {\n  v: \"&gE;\",\n  n: 824,\n  o: \"&ngE;\"\n}], [0, {\n  v: \"&lnE;\",\n  n: 65024,\n  o: \"&lvertneqq;\"\n}], [0, {\n  v: \"&gnE;\",\n  n: 65024,\n  o: \"&gvertneqq;\"\n}], [0, {\n  v: \"&ll;\",\n  n: new Map(/* #__PURE__ */restoreDiff([[824, \"&nLtv;\"], [7577, \"&nLt;\"]]))\n}], [0, {\n  v: \"&gg;\",\n  n: new Map(/* #__PURE__ */restoreDiff([[824, \"&nGtv;\"], [7577, \"&nGt;\"]]))\n}], [0, \"&between;\"], [0, \"&NotCupCap;\"], [0, \"&nless;\"], [0, \"&ngt;\"], [0, \"&nle;\"], [0, \"&nge;\"], [0, \"&lesssim;\"], [0, \"&GreaterTilde;\"], [0, \"&nlsim;\"], [0, \"&ngsim;\"], [0, \"&LessGreater;\"], [0, \"&gl;\"], [0, \"&NotLessGreater;\"], [0, \"&NotGreaterLess;\"], [0, \"&pr;\"], [0, \"&sc;\"], [0, \"&prcue;\"], [0, \"&sccue;\"], [0, \"&PrecedesTilde;\"], [0, {\n  v: \"&scsim;\",\n  n: 824,\n  o: \"&NotSucceedsTilde;\"\n}], [0, \"&NotPrecedes;\"], [0, \"&NotSucceeds;\"], [0, {\n  v: \"&sub;\",\n  n: 8402,\n  o: \"&NotSubset;\"\n}], [0, {\n  v: \"&sup;\",\n  n: 8402,\n  o: \"&NotSuperset;\"\n}], [0, \"&nsub;\"], [0, \"&nsup;\"], [0, \"&sube;\"], [0, \"&supe;\"], [0, \"&NotSubsetEqual;\"], [0, \"&NotSupersetEqual;\"], [0, {\n  v: \"&subne;\",\n  n: 65024,\n  o: \"&varsubsetneq;\"\n}], [0, {\n  v: \"&supne;\",\n  n: 65024,\n  o: \"&varsupsetneq;\"\n}], [1, \"&cupdot;\"], [0, \"&UnionPlus;\"], [0, {\n  v: \"&sqsub;\",\n  n: 824,\n  o: \"&NotSquareSubset;\"\n}], [0, {\n  v: \"&sqsup;\",\n  n: 824,\n  o: \"&NotSquareSuperset;\"\n}], [0, \"&sqsube;\"], [0, \"&sqsupe;\"], [0, {\n  v: \"&sqcap;\",\n  n: 65024,\n  o: \"&sqcaps;\"\n}], [0, {\n  v: \"&sqcup;\",\n  n: 65024,\n  o: \"&sqcups;\"\n}], [0, \"&CirclePlus;\"], [0, \"&CircleMinus;\"], [0, \"&CircleTimes;\"], [0, \"&osol;\"], [0, \"&CircleDot;\"], [0, \"&circledcirc;\"], [0, \"&circledast;\"], [1, \"&circleddash;\"], [0, \"&boxplus;\"], [0, \"&boxminus;\"], [0, \"&boxtimes;\"], [0, \"&dotsquare;\"], [0, \"&RightTee;\"], [0, \"&dashv;\"], [0, \"&DownTee;\"], [0, \"&bot;\"], [1, \"&models;\"], [0, \"&DoubleRightTee;\"], [0, \"&Vdash;\"], [0, \"&Vvdash;\"], [0, \"&VDash;\"], [0, \"&nvdash;\"], [0, \"&nvDash;\"], [0, \"&nVdash;\"], [0, \"&nVDash;\"], [0, \"&prurel;\"], [1, \"&LeftTriangle;\"], [0, \"&RightTriangle;\"], [0, {\n  v: \"&LeftTriangleEqual;\",\n  n: 8402,\n  o: \"&nvltrie;\"\n}], [0, {\n  v: \"&RightTriangleEqual;\",\n  n: 8402,\n  o: \"&nvrtrie;\"\n}], [0, \"&origof;\"], [0, \"&imof;\"], [0, \"&multimap;\"], [0, \"&hercon;\"], [0, \"&intcal;\"], [0, \"&veebar;\"], [1, \"&barvee;\"], [0, \"&angrtvb;\"], [0, \"&lrtri;\"], [0, \"&bigwedge;\"], [0, \"&bigvee;\"], [0, \"&bigcap;\"], [0, \"&bigcup;\"], [0, \"&diam;\"], [0, \"&sdot;\"], [0, \"&sstarf;\"], [0, \"&divideontimes;\"], [0, \"&bowtie;\"], [0, \"&ltimes;\"], [0, \"&rtimes;\"], [0, \"&leftthreetimes;\"], [0, \"&rightthreetimes;\"], [0, \"&backsimeq;\"], [0, \"&curlyvee;\"], [0, \"&curlywedge;\"], [0, \"&Sub;\"], [0, \"&Sup;\"], [0, \"&Cap;\"], [0, \"&Cup;\"], [0, \"&fork;\"], [0, \"&epar;\"], [0, \"&lessdot;\"], [0, \"&gtdot;\"], [0, {\n  v: \"&Ll;\",\n  n: 824,\n  o: \"&nLl;\"\n}], [0, {\n  v: \"&Gg;\",\n  n: 824,\n  o: \"&nGg;\"\n}], [0, {\n  v: \"&leg;\",\n  n: 65024,\n  o: \"&lesg;\"\n}], [0, {\n  v: \"&gel;\",\n  n: 65024,\n  o: \"&gesl;\"\n}], [2, \"&cuepr;\"], [0, \"&cuesc;\"], [0, \"&NotPrecedesSlantEqual;\"], [0, \"&NotSucceedsSlantEqual;\"], [0, \"&NotSquareSubsetEqual;\"], [0, \"&NotSquareSupersetEqual;\"], [2, \"&lnsim;\"], [0, \"&gnsim;\"], [0, \"&precnsim;\"], [0, \"&scnsim;\"], [0, \"&nltri;\"], [0, \"&NotRightTriangle;\"], [0, \"&nltrie;\"], [0, \"&NotRightTriangleEqual;\"], [0, \"&vellip;\"], [0, \"&ctdot;\"], [0, \"&utdot;\"], [0, \"&dtdot;\"], [0, \"&disin;\"], [0, \"&isinsv;\"], [0, \"&isins;\"], [0, {\n  v: \"&isindot;\",\n  n: 824,\n  o: \"&notindot;\"\n}], [0, \"&notinvc;\"], [0, \"&notinvb;\"], [1, {\n  v: \"&isinE;\",\n  n: 824,\n  o: \"&notinE;\"\n}], [0, \"&nisd;\"], [0, \"&xnis;\"], [0, \"&nis;\"], [0, \"&notnivc;\"], [0, \"&notnivb;\"], [6, \"&barwed;\"], [0, \"&Barwed;\"], [1, \"&lceil;\"], [0, \"&rceil;\"], [0, \"&LeftFloor;\"], [0, \"&rfloor;\"], [0, \"&drcrop;\"], [0, \"&dlcrop;\"], [0, \"&urcrop;\"], [0, \"&ulcrop;\"], [0, \"&bnot;\"], [1, \"&profline;\"], [0, \"&profsurf;\"], [1, \"&telrec;\"], [0, \"&target;\"], [5, \"&ulcorn;\"], [0, \"&urcorn;\"], [0, \"&dlcorn;\"], [0, \"&drcorn;\"], [2, \"&frown;\"], [0, \"&smile;\"], [9, \"&cylcty;\"], [0, \"&profalar;\"], [7, \"&topbot;\"], [6, \"&ovbar;\"], [1, \"&solbar;\"], [60, \"&angzarr;\"], [51, \"&lmoustache;\"], [0, \"&rmoustache;\"], [2, \"&OverBracket;\"], [0, \"&bbrk;\"], [0, \"&bbrktbrk;\"], [37, \"&OverParenthesis;\"], [0, \"&UnderParenthesis;\"], [0, \"&OverBrace;\"], [0, \"&UnderBrace;\"], [2, \"&trpezium;\"], [4, \"&elinters;\"], [59, \"&blank;\"], [164, \"&circledS;\"], [55, \"&boxh;\"], [1, \"&boxv;\"], [9, \"&boxdr;\"], [3, \"&boxdl;\"], [3, \"&boxur;\"], [3, \"&boxul;\"], [3, \"&boxvr;\"], [7, \"&boxvl;\"], [7, \"&boxhd;\"], [7, \"&boxhu;\"], [7, \"&boxvh;\"], [19, \"&boxH;\"], [0, \"&boxV;\"], [0, \"&boxdR;\"], [0, \"&boxDr;\"], [0, \"&boxDR;\"], [0, \"&boxdL;\"], [0, \"&boxDl;\"], [0, \"&boxDL;\"], [0, \"&boxuR;\"], [0, \"&boxUr;\"], [0, \"&boxUR;\"], [0, \"&boxuL;\"], [0, \"&boxUl;\"], [0, \"&boxUL;\"], [0, \"&boxvR;\"], [0, \"&boxVr;\"], [0, \"&boxVR;\"], [0, \"&boxvL;\"], [0, \"&boxVl;\"], [0, \"&boxVL;\"], [0, \"&boxHd;\"], [0, \"&boxhD;\"], [0, \"&boxHD;\"], [0, \"&boxHu;\"], [0, \"&boxhU;\"], [0, \"&boxHU;\"], [0, \"&boxvH;\"], [0, \"&boxVh;\"], [0, \"&boxVH;\"], [19, \"&uhblk;\"], [3, \"&lhblk;\"], [3, \"&block;\"], [8, \"&blk14;\"], [0, \"&blk12;\"], [0, \"&blk34;\"], [13, \"&square;\"], [8, \"&blacksquare;\"], [0, \"&EmptyVerySmallSquare;\"], [1, \"&rect;\"], [0, \"&marker;\"], [2, \"&fltns;\"], [1, \"&bigtriangleup;\"], [0, \"&blacktriangle;\"], [0, \"&triangle;\"], [2, \"&blacktriangleright;\"], [0, \"&rtri;\"], [3, \"&bigtriangledown;\"], [0, \"&blacktriangledown;\"], [0, \"&dtri;\"], [2, \"&blacktriangleleft;\"], [0, \"&ltri;\"], [6, \"&loz;\"], [0, \"&cir;\"], [32, \"&tridot;\"], [2, \"&bigcirc;\"], [8, \"&ultri;\"], [0, \"&urtri;\"], [0, \"&lltri;\"], [0, \"&EmptySmallSquare;\"], [0, \"&FilledSmallSquare;\"], [8, \"&bigstar;\"], [0, \"&star;\"], [7, \"&phone;\"], [49, \"&female;\"], [1, \"&male;\"], [29, \"&spades;\"], [2, \"&clubs;\"], [1, \"&hearts;\"], [0, \"&diamondsuit;\"], [3, \"&sung;\"], [2, \"&flat;\"], [0, \"&natural;\"], [0, \"&sharp;\"], [163, \"&check;\"], [3, \"&cross;\"], [8, \"&malt;\"], [21, \"&sext;\"], [33, \"&VerticalSeparator;\"], [25, \"&lbbrk;\"], [0, \"&rbbrk;\"], [84, \"&bsolhsub;\"], [0, \"&suphsol;\"], [28, \"&LeftDoubleBracket;\"], [0, \"&RightDoubleBracket;\"], [0, \"&lang;\"], [0, \"&rang;\"], [0, \"&Lang;\"], [0, \"&Rang;\"], [0, \"&loang;\"], [0, \"&roang;\"], [7, \"&longleftarrow;\"], [0, \"&longrightarrow;\"], [0, \"&longleftrightarrow;\"], [0, \"&DoubleLongLeftArrow;\"], [0, \"&DoubleLongRightArrow;\"], [0, \"&DoubleLongLeftRightArrow;\"], [1, \"&longmapsto;\"], [2, \"&dzigrarr;\"], [258, \"&nvlArr;\"], [0, \"&nvrArr;\"], [0, \"&nvHarr;\"], [0, \"&Map;\"], [6, \"&lbarr;\"], [0, \"&bkarow;\"], [0, \"&lBarr;\"], [0, \"&dbkarow;\"], [0, \"&drbkarow;\"], [0, \"&DDotrahd;\"], [0, \"&UpArrowBar;\"], [0, \"&DownArrowBar;\"], [2, \"&Rarrtl;\"], [2, \"&latail;\"], [0, \"&ratail;\"], [0, \"&lAtail;\"], [0, \"&rAtail;\"], [0, \"&larrfs;\"], [0, \"&rarrfs;\"], [0, \"&larrbfs;\"], [0, \"&rarrbfs;\"], [2, \"&nwarhk;\"], [0, \"&nearhk;\"], [0, \"&hksearow;\"], [0, \"&hkswarow;\"], [0, \"&nwnear;\"], [0, \"&nesear;\"], [0, \"&seswar;\"], [0, \"&swnwar;\"], [8, {\n  v: \"&rarrc;\",\n  n: 824,\n  o: \"&nrarrc;\"\n}], [1, \"&cudarrr;\"], [0, \"&ldca;\"], [0, \"&rdca;\"], [0, \"&cudarrl;\"], [0, \"&larrpl;\"], [2, \"&curarrm;\"], [0, \"&cularrp;\"], [7, \"&rarrpl;\"], [2, \"&harrcir;\"], [0, \"&Uarrocir;\"], [0, \"&lurdshar;\"], [0, \"&ldrushar;\"], [2, \"&LeftRightVector;\"], [0, \"&RightUpDownVector;\"], [0, \"&DownLeftRightVector;\"], [0, \"&LeftUpDownVector;\"], [0, \"&LeftVectorBar;\"], [0, \"&RightVectorBar;\"], [0, \"&RightUpVectorBar;\"], [0, \"&RightDownVectorBar;\"], [0, \"&DownLeftVectorBar;\"], [0, \"&DownRightVectorBar;\"], [0, \"&LeftUpVectorBar;\"], [0, \"&LeftDownVectorBar;\"], [0, \"&LeftTeeVector;\"], [0, \"&RightTeeVector;\"], [0, \"&RightUpTeeVector;\"], [0, \"&RightDownTeeVector;\"], [0, \"&DownLeftTeeVector;\"], [0, \"&DownRightTeeVector;\"], [0, \"&LeftUpTeeVector;\"], [0, \"&LeftDownTeeVector;\"], [0, \"&lHar;\"], [0, \"&uHar;\"], [0, \"&rHar;\"], [0, \"&dHar;\"], [0, \"&luruhar;\"], [0, \"&ldrdhar;\"], [0, \"&ruluhar;\"], [0, \"&rdldhar;\"], [0, \"&lharul;\"], [0, \"&llhard;\"], [0, \"&rharul;\"], [0, \"&lrhard;\"], [0, \"&udhar;\"], [0, \"&duhar;\"], [0, \"&RoundImplies;\"], [0, \"&erarr;\"], [0, \"&simrarr;\"], [0, \"&larrsim;\"], [0, \"&rarrsim;\"], [0, \"&rarrap;\"], [0, \"&ltlarr;\"], [1, \"&gtrarr;\"], [0, \"&subrarr;\"], [1, \"&suplarr;\"], [0, \"&lfisht;\"], [0, \"&rfisht;\"], [0, \"&ufisht;\"], [0, \"&dfisht;\"], [5, \"&lopar;\"], [0, \"&ropar;\"], [4, \"&lbrke;\"], [0, \"&rbrke;\"], [0, \"&lbrkslu;\"], [0, \"&rbrksld;\"], [0, \"&lbrksld;\"], [0, \"&rbrkslu;\"], [0, \"&langd;\"], [0, \"&rangd;\"], [0, \"&lparlt;\"], [0, \"&rpargt;\"], [0, \"&gtlPar;\"], [0, \"&ltrPar;\"], [3, \"&vzigzag;\"], [1, \"&vangrt;\"], [0, \"&angrtvbd;\"], [6, \"&ange;\"], [0, \"&range;\"], [0, \"&dwangle;\"], [0, \"&uwangle;\"], [0, \"&angmsdaa;\"], [0, \"&angmsdab;\"], [0, \"&angmsdac;\"], [0, \"&angmsdad;\"], [0, \"&angmsdae;\"], [0, \"&angmsdaf;\"], [0, \"&angmsdag;\"], [0, \"&angmsdah;\"], [0, \"&bemptyv;\"], [0, \"&demptyv;\"], [0, \"&cemptyv;\"], [0, \"&raemptyv;\"], [0, \"&laemptyv;\"], [0, \"&ohbar;\"], [0, \"&omid;\"], [0, \"&opar;\"], [1, \"&operp;\"], [1, \"&olcross;\"], [0, \"&odsold;\"], [1, \"&olcir;\"], [0, \"&ofcir;\"], [0, \"&olt;\"], [0, \"&ogt;\"], [0, \"&cirscir;\"], [0, \"&cirE;\"], [0, \"&solb;\"], [0, \"&bsolb;\"], [3, \"&boxbox;\"], [3, \"&trisb;\"], [0, \"&rtriltri;\"], [0, {\n  v: \"&LeftTriangleBar;\",\n  n: 824,\n  o: \"&NotLeftTriangleBar;\"\n}], [0, {\n  v: \"&RightTriangleBar;\",\n  n: 824,\n  o: \"&NotRightTriangleBar;\"\n}], [11, \"&iinfin;\"], [0, \"&infintie;\"], [0, \"&nvinfin;\"], [4, \"&eparsl;\"], [0, \"&smeparsl;\"], [0, \"&eqvparsl;\"], [5, \"&blacklozenge;\"], [8, \"&RuleDelayed;\"], [1, \"&dsol;\"], [9, \"&bigodot;\"], [0, \"&bigoplus;\"], [0, \"&bigotimes;\"], [1, \"&biguplus;\"], [1, \"&bigsqcup;\"], [5, \"&iiiint;\"], [0, \"&fpartint;\"], [2, \"&cirfnint;\"], [0, \"&awint;\"], [0, \"&rppolint;\"], [0, \"&scpolint;\"], [0, \"&npolint;\"], [0, \"&pointint;\"], [0, \"&quatint;\"], [0, \"&intlarhk;\"], [10, \"&pluscir;\"], [0, \"&plusacir;\"], [0, \"&simplus;\"], [0, \"&plusdu;\"], [0, \"&plussim;\"], [0, \"&plustwo;\"], [1, \"&mcomma;\"], [0, \"&minusdu;\"], [2, \"&loplus;\"], [0, \"&roplus;\"], [0, \"&Cross;\"], [0, \"&timesd;\"], [0, \"&timesbar;\"], [1, \"&smashp;\"], [0, \"&lotimes;\"], [0, \"&rotimes;\"], [0, \"&otimesas;\"], [0, \"&Otimes;\"], [0, \"&odiv;\"], [0, \"&triplus;\"], [0, \"&triminus;\"], [0, \"&tritime;\"], [0, \"&intprod;\"], [2, \"&amalg;\"], [0, \"&capdot;\"], [1, \"&ncup;\"], [0, \"&ncap;\"], [0, \"&capand;\"], [0, \"&cupor;\"], [0, \"&cupcap;\"], [0, \"&capcup;\"], [0, \"&cupbrcap;\"], [0, \"&capbrcup;\"], [0, \"&cupcup;\"], [0, \"&capcap;\"], [0, \"&ccups;\"], [0, \"&ccaps;\"], [2, \"&ccupssm;\"], [2, \"&And;\"], [0, \"&Or;\"], [0, \"&andand;\"], [0, \"&oror;\"], [0, \"&orslope;\"], [0, \"&andslope;\"], [1, \"&andv;\"], [0, \"&orv;\"], [0, \"&andd;\"], [0, \"&ord;\"], [1, \"&wedbar;\"], [6, \"&sdote;\"], [3, \"&simdot;\"], [2, {\n  v: \"&congdot;\",\n  n: 824,\n  o: \"&ncongdot;\"\n}], [0, \"&easter;\"], [0, \"&apacir;\"], [0, {\n  v: \"&apE;\",\n  n: 824,\n  o: \"&napE;\"\n}], [0, \"&eplus;\"], [0, \"&pluse;\"], [0, \"&Esim;\"], [0, \"&Colone;\"], [0, \"&Equal;\"], [1, \"&ddotseq;\"], [0, \"&equivDD;\"], [0, \"&ltcir;\"], [0, \"&gtcir;\"], [0, \"&ltquest;\"], [0, \"&gtquest;\"], [0, {\n  v: \"&leqslant;\",\n  n: 824,\n  o: \"&nleqslant;\"\n}], [0, {\n  v: \"&geqslant;\",\n  n: 824,\n  o: \"&ngeqslant;\"\n}], [0, \"&lesdot;\"], [0, \"&gesdot;\"], [0, \"&lesdoto;\"], [0, \"&gesdoto;\"], [0, \"&lesdotor;\"], [0, \"&gesdotol;\"], [0, \"&lap;\"], [0, \"&gap;\"], [0, \"&lne;\"], [0, \"&gne;\"], [0, \"&lnap;\"], [0, \"&gnap;\"], [0, \"&lEg;\"], [0, \"&gEl;\"], [0, \"&lsime;\"], [0, \"&gsime;\"], [0, \"&lsimg;\"], [0, \"&gsiml;\"], [0, \"&lgE;\"], [0, \"&glE;\"], [0, \"&lesges;\"], [0, \"&gesles;\"], [0, \"&els;\"], [0, \"&egs;\"], [0, \"&elsdot;\"], [0, \"&egsdot;\"], [0, \"&el;\"], [0, \"&eg;\"], [2, \"&siml;\"], [0, \"&simg;\"], [0, \"&simlE;\"], [0, \"&simgE;\"], [0, {\n  v: \"&LessLess;\",\n  n: 824,\n  o: \"&NotNestedLessLess;\"\n}], [0, {\n  v: \"&GreaterGreater;\",\n  n: 824,\n  o: \"&NotNestedGreaterGreater;\"\n}], [1, \"&glj;\"], [0, \"&gla;\"], [0, \"&ltcc;\"], [0, \"&gtcc;\"], [0, \"&lescc;\"], [0, \"&gescc;\"], [0, \"&smt;\"], [0, \"&lat;\"], [0, {\n  v: \"&smte;\",\n  n: 65024,\n  o: \"&smtes;\"\n}], [0, {\n  v: \"&late;\",\n  n: 65024,\n  o: \"&lates;\"\n}], [0, \"&bumpE;\"], [0, {\n  v: \"&PrecedesEqual;\",\n  n: 824,\n  o: \"&NotPrecedesEqual;\"\n}], [0, {\n  v: \"&sce;\",\n  n: 824,\n  o: \"&NotSucceedsEqual;\"\n}], [2, \"&prE;\"], [0, \"&scE;\"], [0, \"&precneqq;\"], [0, \"&scnE;\"], [0, \"&prap;\"], [0, \"&scap;\"], [0, \"&precnapprox;\"], [0, \"&scnap;\"], [0, \"&Pr;\"], [0, \"&Sc;\"], [0, \"&subdot;\"], [0, \"&supdot;\"], [0, \"&subplus;\"], [0, \"&supplus;\"], [0, \"&submult;\"], [0, \"&supmult;\"], [0, \"&subedot;\"], [0, \"&supedot;\"], [0, {\n  v: \"&subE;\",\n  n: 824,\n  o: \"&nsubE;\"\n}], [0, {\n  v: \"&supE;\",\n  n: 824,\n  o: \"&nsupE;\"\n}], [0, \"&subsim;\"], [0, \"&supsim;\"], [2, {\n  v: \"&subnE;\",\n  n: 65024,\n  o: \"&varsubsetneqq;\"\n}], [0, {\n  v: \"&supnE;\",\n  n: 65024,\n  o: \"&varsupsetneqq;\"\n}], [2, \"&csub;\"], [0, \"&csup;\"], [0, \"&csube;\"], [0, \"&csupe;\"], [0, \"&subsup;\"], [0, \"&supsub;\"], [0, \"&subsub;\"], [0, \"&supsup;\"], [0, \"&suphsub;\"], [0, \"&supdsub;\"], [0, \"&forkv;\"], [0, \"&topfork;\"], [0, \"&mlcp;\"], [8, \"&Dashv;\"], [1, \"&Vdashl;\"], [0, \"&Barv;\"], [0, \"&vBar;\"], [0, \"&vBarv;\"], [1, \"&Vbar;\"], [0, \"&Not;\"], [0, \"&bNot;\"], [0, \"&rnmid;\"], [0, \"&cirmid;\"], [0, \"&midcir;\"], [0, \"&topcir;\"], [0, \"&nhpar;\"], [0, \"&parsim;\"], [9, {\n  v: \"&parsl;\",\n  n: 8421,\n  o: \"&nparsl;\"\n}], [44343, {\n  n: new Map(/* #__PURE__ */restoreDiff([[56476, \"&Ascr;\"], [1, \"&Cscr;\"], [0, \"&Dscr;\"], [2, \"&Gscr;\"], [2, \"&Jscr;\"], [0, \"&Kscr;\"], [2, \"&Nscr;\"], [0, \"&Oscr;\"], [0, \"&Pscr;\"], [0, \"&Qscr;\"], [1, \"&Sscr;\"], [0, \"&Tscr;\"], [0, \"&Uscr;\"], [0, \"&Vscr;\"], [0, \"&Wscr;\"], [0, \"&Xscr;\"], [0, \"&Yscr;\"], [0, \"&Zscr;\"], [0, \"&ascr;\"], [0, \"&bscr;\"], [0, \"&cscr;\"], [0, \"&dscr;\"], [1, \"&fscr;\"], [1, \"&hscr;\"], [0, \"&iscr;\"], [0, \"&jscr;\"], [0, \"&kscr;\"], [0, \"&lscr;\"], [0, \"&mscr;\"], [0, \"&nscr;\"], [1, \"&pscr;\"], [0, \"&qscr;\"], [0, \"&rscr;\"], [0, \"&sscr;\"], [0, \"&tscr;\"], [0, \"&uscr;\"], [0, \"&vscr;\"], [0, \"&wscr;\"], [0, \"&xscr;\"], [0, \"&yscr;\"], [0, \"&zscr;\"], [52, \"&Afr;\"], [0, \"&Bfr;\"], [1, \"&Dfr;\"], [0, \"&Efr;\"], [0, \"&Ffr;\"], [0, \"&Gfr;\"], [2, \"&Jfr;\"], [0, \"&Kfr;\"], [0, \"&Lfr;\"], [0, \"&Mfr;\"], [0, \"&Nfr;\"], [0, \"&Ofr;\"], [0, \"&Pfr;\"], [0, \"&Qfr;\"], [1, \"&Sfr;\"], [0, \"&Tfr;\"], [0, \"&Ufr;\"], [0, \"&Vfr;\"], [0, \"&Wfr;\"], [0, \"&Xfr;\"], [0, \"&Yfr;\"], [1, \"&afr;\"], [0, \"&bfr;\"], [0, \"&cfr;\"], [0, \"&dfr;\"], [0, \"&efr;\"], [0, \"&ffr;\"], [0, \"&gfr;\"], [0, \"&hfr;\"], [0, \"&ifr;\"], [0, \"&jfr;\"], [0, \"&kfr;\"], [0, \"&lfr;\"], [0, \"&mfr;\"], [0, \"&nfr;\"], [0, \"&ofr;\"], [0, \"&pfr;\"], [0, \"&qfr;\"], [0, \"&rfr;\"], [0, \"&sfr;\"], [0, \"&tfr;\"], [0, \"&ufr;\"], [0, \"&vfr;\"], [0, \"&wfr;\"], [0, \"&xfr;\"], [0, \"&yfr;\"], [0, \"&zfr;\"], [0, \"&Aopf;\"], [0, \"&Bopf;\"], [1, \"&Dopf;\"], [0, \"&Eopf;\"], [0, \"&Fopf;\"], [0, \"&Gopf;\"], [1, \"&Iopf;\"], [0, \"&Jopf;\"], [0, \"&Kopf;\"], [0, \"&Lopf;\"], [0, \"&Mopf;\"], [1, \"&Oopf;\"], [3, \"&Sopf;\"], [0, \"&Topf;\"], [0, \"&Uopf;\"], [0, \"&Vopf;\"], [0, \"&Wopf;\"], [0, \"&Xopf;\"], [0, \"&Yopf;\"], [1, \"&aopf;\"], [0, \"&bopf;\"], [0, \"&copf;\"], [0, \"&dopf;\"], [0, \"&eopf;\"], [0, \"&fopf;\"], [0, \"&gopf;\"], [0, \"&hopf;\"], [0, \"&iopf;\"], [0, \"&jopf;\"], [0, \"&kopf;\"], [0, \"&lopf;\"], [0, \"&mopf;\"], [0, \"&nopf;\"], [0, \"&oopf;\"], [0, \"&popf;\"], [0, \"&qopf;\"], [0, \"&ropf;\"], [0, \"&sopf;\"], [0, \"&topf;\"], [0, \"&uopf;\"], [0, \"&vopf;\"], [0, \"&wopf;\"], [0, \"&xopf;\"], [0, \"&yopf;\"], [0, \"&zopf;\"]]))\n}], [8906, \"&fflig;\"], [0, \"&filig;\"], [0, \"&fllig;\"], [0, \"&ffilig;\"], [0, \"&ffllig;\"]]));\nconst xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([[34, \"&quot;\"], [38, \"&amp;\"], [39, \"&apos;\"], [60, \"&lt;\"], [62, \"&gt;\"]]);\n// For compatibility with node < 4, we wrap `codePointAt`\nconst getCodePoint =\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) :\n// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n(c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800 ? (c.charCodeAt(index) - 0xd800) * 0x400 + c.charCodeAt(index + 1) - 0xdc00 + 0x10000 : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nfunction encodeXML(str) {\n  let ret = \"\";\n  let lastIdx = 0;\n  let match;\n  while ((match = xmlReplacer.exec(str)) !== null) {\n    const i = match.index;\n    const char = str.charCodeAt(i);\n    const next = xmlCodeMap.get(char);\n    if (next !== undefined) {\n      ret += str.substring(lastIdx, i) + next;\n      lastIdx = i + 1;\n    } else {\n      ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n      // Increase by 1 if we have a surrogate pair\n      lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n    }\n  }\n  return ret + str.substr(lastIdx);\n}\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n  return function escape(data) {\n    let match;\n    let lastIdx = 0;\n    let result = \"\";\n    while (match = regex.exec(data)) {\n      if (lastIdx !== match.index) {\n        result += data.substring(lastIdx, match.index);\n      }\n      // We know that this character will be in the map.\n      result += map.get(match[0].charCodeAt(0));\n      // Every match will be of length 1\n      lastIdx = match.index + 1;\n    }\n    return result + data.substring(lastIdx);\n  };\n}\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nconst escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([[34, \"&quot;\"], [38, \"&amp;\"], [160, \"&nbsp;\"]]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nconst escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([[38, \"&amp;\"], [60, \"&lt;\"], [62, \"&gt;\"], [160, \"&nbsp;\"]]));\n\n/** The level of entities to support. */\nvar EntityLevel;\n(function (EntityLevel) {\n  /** Support only XML entities. */\n  EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n  /** Support HTML entities, which are a superset of XML entities. */\n  EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel || (EntityLevel = {}));\nvar EncodingMode;\n(function (EncodingMode) {\n  /**\n   * The output is UTF-8 encoded. Only characters that need escaping within\n   * XML will be escaped.\n   */\n  EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n  /**\n   * The output consists only of ASCII characters. Characters that need\n   * escaping within HTML, and characters that aren't ASCII characters will\n   * be escaped.\n   */\n  EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n  /**\n   * Encode all characters that have an equivalent entity, as well as all\n   * characters that are not ASCII characters.\n   */\n  EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n  /**\n   * Encode all characters that have to be escaped in HTML attributes,\n   * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n   */\n  EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n  /**\n   * Encode all characters that have to be escaped in HTML text,\n   * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n   */\n  EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode || (EncodingMode = {}));\nconst elementNames = new Map([\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"clipPath\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"foreignObject\", \"glyphRef\", \"linearGradient\", \"radialGradient\", \"textPath\"].map(val => [val.toLowerCase(), val]));\nconst attributeNames = new Map([\"definitionURL\", \"attributeName\", \"attributeType\", \"baseFrequency\", \"baseProfile\", \"calcMode\", \"clipPathUnits\", \"diffuseConstant\", \"edgeMode\", \"filterUnits\", \"glyphRef\", \"gradientTransform\", \"gradientUnits\", \"kernelMatrix\", \"kernelUnitLength\", \"keyPoints\", \"keySplines\", \"keyTimes\", \"lengthAdjust\", \"limitingConeAngle\", \"markerHeight\", \"markerUnits\", \"markerWidth\", \"maskContentUnits\", \"maskUnits\", \"numOctaves\", \"pathLength\", \"patternContentUnits\", \"patternTransform\", \"patternUnits\", \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\", \"preserveAlpha\", \"preserveAspectRatio\", \"primitiveUnits\", \"refX\", \"refY\", \"repeatCount\", \"repeatDur\", \"requiredExtensions\", \"requiredFeatures\", \"specularConstant\", \"specularExponent\", \"spreadMethod\", \"startOffset\", \"stdDeviation\", \"stitchTiles\", \"surfaceScale\", \"systemLanguage\", \"tableValues\", \"targetX\", \"targetY\", \"textLength\", \"viewBox\", \"viewTarget\", \"xChannelSelector\", \"yChannelSelector\", \"zoomAndPan\"].map(val => [val.toLowerCase(), val]));\n\n/*\n * Module dependencies\n */\nconst unencodedElements = new Set([\"style\", \"script\", \"xmp\", \"iframe\", \"noembed\", \"noframes\", \"plaintext\", \"noscript\"]);\nfunction replaceQuotes(value) {\n  return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n  var _a;\n  if (!attributes) return;\n  const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML : escapeAttribute;\n  return Object.keys(attributes).map(key => {\n    var _a, _b;\n    const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n    if (opts.xmlMode === \"foreign\") {\n      /* Fix up mixed-case attribute names */\n      key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n    }\n    if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n      return key;\n    }\n    return `${key}=\"${encode(value)}\"`;\n  }).join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\"area\", \"base\", \"basefont\", \"br\", \"col\", \"command\", \"embed\", \"frame\", \"hr\", \"img\", \"input\", \"isindex\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options = {}) {\n  const nodes = \"length\" in node ? node : [node];\n  let output = \"\";\n  for (let i = 0; i < nodes.length; i++) {\n    output += renderNode(nodes[i], options);\n  }\n  return output;\n}\nfunction renderNode(node, options) {\n  switch (node.type) {\n    case Root:\n      return render(node.children, options);\n    // @ts-expect-error We don't use `Doctype` yet\n    case Doctype:\n    case Directive:\n      return renderDirective(node);\n    case Comment$1:\n      return renderComment(node);\n    case CDATA$1:\n      return renderCdata(node);\n    case Script:\n    case Style:\n    case Tag:\n      return renderTag(node, options);\n    case Text$1:\n      return renderText(node, options);\n  }\n}\nconst foreignModeIntegrationPoints = new Set([\"mi\", \"mo\", \"mn\", \"ms\", \"mtext\", \"annotation-xml\", \"foreignObject\", \"desc\", \"title\"]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n  var _a;\n  // Handle SVG / MathML in HTML\n  if (opts.xmlMode === \"foreign\") {\n    /* Fix up mixed-case element names */\n    elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n    /* Exit foreign mode at integration points */\n    if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {\n      opts = {\n        ...opts,\n        xmlMode: false\n      };\n    }\n  }\n  if (!opts.xmlMode && foreignElements.has(elem.name)) {\n    opts = {\n      ...opts,\n      xmlMode: \"foreign\"\n    };\n  }\n  let tag = `<${elem.name}`;\n  const attribs = formatAttributes(elem.attribs, opts);\n  if (attribs) {\n    tag += ` ${attribs}`;\n  }\n  if (elem.children.length === 0 && (opts.xmlMode ?\n  // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n  opts.selfClosingTags !== false :\n  // User explicitly asked for self-closing tags, even in HTML mode\n  opts.selfClosingTags && singleTag.has(elem.name))) {\n    if (!opts.xmlMode) tag += \" \";\n    tag += \"/>\";\n  } else {\n    tag += \">\";\n    if (elem.children.length > 0) {\n      tag += render(elem.children, opts);\n    }\n    if (opts.xmlMode || !singleTag.has(elem.name)) {\n      tag += `</${elem.name}>`;\n    }\n  }\n  return tag;\n}\nfunction renderDirective(elem) {\n  return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n  var _a;\n  let data = elem.data || \"\";\n  // If entities weren't decoded, no need to encode them back\n  if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {\n    data = opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML(data) : escapeText(data);\n  }\n  return data;\n}\nfunction renderCdata(elem) {\n  return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n  return `<!--${elem.data}-->`;\n}\n\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nfunction getOuterHTML(node, options) {\n  return render(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nfunction getInnerHTML(node, options) {\n  return hasChildren(node) ? node.children.map(node => getOuterHTML(node, options)).join(\"\") : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nfunction getText(node) {\n  if (Array.isArray(node)) return node.map(getText).join(\"\");\n  if (isTag(node)) return node.name === \"br\" ? \"\\n\" : getText(node.children);\n  if (isCDATA(node)) return getText(node.children);\n  if (isText(node)) return node.data;\n  return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nfunction textContent(node) {\n  if (Array.isArray(node)) return node.map(textContent).join(\"\");\n  if (hasChildren(node) && !isComment(node)) {\n    return textContent(node.children);\n  }\n  if (isText(node)) return node.data;\n  return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nfunction innerText(node) {\n  if (Array.isArray(node)) return node.map(innerText).join(\"\");\n  if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n    return innerText(node.children);\n  }\n  if (isText(node)) return node.data;\n  return \"\";\n}\n\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param elem Node to get the children of.\n * @returns `elem`'s children, or an empty array.\n */\nfunction getChildren(elem) {\n  return hasChildren(elem) ? elem.children : [];\n}\n/**\n * Get a node's parent.\n *\n * @category Traversal\n * @param elem Node to get the parent of.\n * @returns `elem`'s parent node, or `null` if `elem` is a root node.\n */\nfunction getParent(elem) {\n  return elem.parent || null;\n}\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param elem Element to get the siblings of.\n * @returns `elem`'s siblings, including `elem`.\n */\nfunction getSiblings(elem) {\n  const parent = getParent(elem);\n  if (parent != null) return getChildren(parent);\n  const siblings = [elem];\n  let {\n    prev,\n    next\n  } = elem;\n  while (prev != null) {\n    siblings.unshift(prev);\n    ({\n      prev\n    } = prev);\n  }\n  while (next != null) {\n    siblings.push(next);\n    ({\n      next\n    } = next);\n  }\n  return siblings;\n}\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nfunction getAttributeValue(elem, name) {\n  var _a;\n  return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `elem` has the attribute `name`.\n */\nfunction hasAttrib(elem, name) {\n  return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;\n}\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param elem The element to get the name for.\n * @returns The tag name of `elem`.\n */\nfunction getName(elem) {\n  return elem.name;\n}\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the next sibling of.\n * @returns `elem`'s next sibling that is a tag, or `null` if there is no next\n * sibling.\n */\nfunction nextElementSibling(elem) {\n  let {\n    next\n  } = elem;\n  while (next !== null && !isTag(next)) ({\n    next\n  } = next);\n  return next;\n}\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the previous sibling of.\n * @returns `elem`'s previous sibling that is a tag, or `null` if there is no\n * previous sibling.\n */\nfunction prevElementSibling(elem) {\n  let {\n    prev\n  } = elem;\n  while (prev !== null && !isTag(prev)) ({\n    prev\n  } = prev);\n  return prev;\n}\n\n/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param elem The element to be removed\n */\nfunction removeElement(elem) {\n  if (elem.prev) elem.prev.next = elem.next;\n  if (elem.next) elem.next.prev = elem.prev;\n  if (elem.parent) {\n    const childs = elem.parent.children;\n    const childsIndex = childs.lastIndexOf(elem);\n    if (childsIndex >= 0) {\n      childs.splice(childsIndex, 1);\n    }\n  }\n  elem.next = null;\n  elem.prev = null;\n  elem.parent = null;\n}\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param elem The element to be replaced\n * @param replacement The element to be added\n */\nfunction replaceElement(elem, replacement) {\n  const prev = replacement.prev = elem.prev;\n  if (prev) {\n    prev.next = replacement;\n  }\n  const next = replacement.next = elem.next;\n  if (next) {\n    next.prev = replacement;\n  }\n  const parent = replacement.parent = elem.parent;\n  if (parent) {\n    const childs = parent.children;\n    childs[childs.lastIndexOf(elem)] = replacement;\n    elem.parent = null;\n  }\n}\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param parent The element to append to.\n * @param child The element to be added as a child.\n */\nfunction appendChild(parent, child) {\n  removeElement(child);\n  child.next = null;\n  child.parent = parent;\n  if (parent.children.push(child) > 1) {\n    const sibling = parent.children[parent.children.length - 2];\n    sibling.next = child;\n    child.prev = sibling;\n  } else {\n    child.prev = null;\n  }\n}\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param elem The element to append after.\n * @param next The element be added.\n */\nfunction append(elem, next) {\n  removeElement(next);\n  const {\n    parent\n  } = elem;\n  const currNext = elem.next;\n  next.next = currNext;\n  next.prev = elem;\n  elem.next = next;\n  next.parent = parent;\n  if (currNext) {\n    currNext.prev = next;\n    if (parent) {\n      const childs = parent.children;\n      childs.splice(childs.lastIndexOf(currNext), 0, next);\n    }\n  } else if (parent) {\n    parent.children.push(next);\n  }\n}\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param parent The element to prepend before.\n * @param child The element to be added as a child.\n */\nfunction prependChild(parent, child) {\n  removeElement(child);\n  child.parent = parent;\n  child.prev = null;\n  if (parent.children.unshift(child) !== 1) {\n    const sibling = parent.children[1];\n    sibling.prev = child;\n    child.next = sibling;\n  } else {\n    child.next = null;\n  }\n}\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param prev The element be added.\n */\nfunction prepend(elem, prev) {\n  removeElement(prev);\n  const {\n    parent\n  } = elem;\n  if (parent) {\n    const childs = parent.children;\n    childs.splice(childs.indexOf(elem), 0, prev);\n  }\n  if (elem.prev) {\n    elem.prev.next = prev;\n  }\n  prev.parent = parent;\n  prev.prev = elem.prev;\n  prev.next = elem;\n  elem.prev = prev;\n}\n\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction filter(test, node, recurse = true, limit = Infinity) {\n  return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction find(test, nodes, recurse, limit) {\n  const result = [];\n  /** Stack of the arrays we are looking at. */\n  const nodeStack = [nodes];\n  /** Stack of the indices within the arrays. */\n  const indexStack = [0];\n  for (;;) {\n    // First, check if the current array has any more elements to look at.\n    if (indexStack[0] >= nodeStack[0].length) {\n      // If we have no more arrays to look at, we are done.\n      if (indexStack.length === 1) {\n        return result;\n      }\n      // Otherwise, remove the current array from the stack.\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (test(elem)) {\n      result.push(elem);\n      if (--limit <= 0) return result;\n    }\n    if (recurse && hasChildren(elem) && elem.children.length > 0) {\n      /*\n       * Add the children to the stack. We are depth-first, so this is\n       * the next array we look at.\n       */\n      indexStack.unshift(0);\n      nodeStack.unshift(elem.children);\n    }\n  }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nfunction findOneChild(test, nodes) {\n  return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nfunction findOne(test, nodes, recurse = true) {\n  let elem = null;\n  for (let i = 0; i < nodes.length && !elem; i++) {\n    const node = nodes[i];\n    if (!isTag(node)) {\n      continue;\n    } else if (test(node)) {\n      elem = node;\n    } else if (recurse && node.children.length > 0) {\n      elem = findOne(test, node.children, true);\n    }\n  }\n  return elem;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nfunction existsOne(test, nodes) {\n  return nodes.some(checked => isTag(checked) && (test(checked) || existsOne(test, checked.children)));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nfunction findAll(test, nodes) {\n  const result = [];\n  const nodeStack = [nodes];\n  const indexStack = [0];\n  for (;;) {\n    if (indexStack[0] >= nodeStack[0].length) {\n      if (nodeStack.length === 1) {\n        return result;\n      }\n      // Otherwise, remove the current array from the stack.\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (!isTag(elem)) continue;\n    if (test(elem)) result.push(elem);\n    if (elem.children.length > 0) {\n      indexStack.unshift(0);\n      nodeStack.unshift(elem.children);\n    }\n  }\n}\n\n/**\n * A map of functions to check nodes against.\n */\nconst Checks = {\n  tag_name(name) {\n    if (typeof name === \"function\") {\n      return elem => isTag(elem) && name(elem.name);\n    } else if (name === \"*\") {\n      return isTag;\n    }\n    return elem => isTag(elem) && elem.name === name;\n  },\n  tag_type(type) {\n    if (typeof type === \"function\") {\n      return elem => type(elem.type);\n    }\n    return elem => elem.type === type;\n  },\n  tag_contains(data) {\n    if (typeof data === \"function\") {\n      return elem => isText(elem) && data(elem.data);\n    }\n    return elem => isText(elem) && elem.data === data;\n  }\n};\n/**\n * Returns a function to check whether a node has an attribute with a particular\n * value.\n *\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n *   particular value.\n */\nfunction getAttribCheck(attrib, value) {\n  if (typeof value === \"function\") {\n    return elem => isTag(elem) && value(elem.attribs[attrib]);\n  }\n  return elem => isTag(elem) && elem.attribs[attrib] === value;\n}\n/**\n * Returns a function that returns `true` if either of the input functions\n * returns `true` for a node.\n *\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n *   functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n  return elem => a(elem) || b(elem);\n}\n/**\n * Returns a function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n *\n * @param options An object describing nodes to look for.\n * @returns A function that executes all checks in `options` and returns `true`\n *   if any of them match a node.\n */\nfunction compileTest(options) {\n  const funcs = Object.keys(options).map(key => {\n    const value = options[key];\n    return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);\n  });\n  return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * Checks whether a node matches the description in `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nfunction testElement(options, node) {\n  const test = compileTest(options);\n  return test ? test(node) : true;\n}\n/**\n * Returns all nodes that match `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nfunction getElements(options, nodes, recurse, limit = Infinity) {\n  const test = compileTest(options);\n  return test ? filter(test, nodes, recurse, limit) : [];\n}\n/**\n * Returns the node with the supplied ID.\n *\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nfunction getElementById(id, nodes, recurse = true) {\n  if (!Array.isArray(nodes)) nodes = [nodes];\n  return findOne(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n * Returns all nodes with the supplied `tagName`.\n *\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nfunction getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {\n  return filter(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `type`.\n *\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nfunction getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {\n  return filter(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nfunction removeSubsets(nodes) {\n  let idx = nodes.length;\n  /*\n   * Check if each node (or one of its ancestors) is already contained in the\n   * array.\n   */\n  while (--idx >= 0) {\n    const node = nodes[idx];\n    /*\n     * Remove the node if it is not unique.\n     * We are going through the array from the end, so we only\n     * have to check nodes that preceed the node under consideration in the array.\n     */\n    if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n      nodes.splice(idx, 1);\n      continue;\n    }\n    for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n      if (nodes.includes(ancestor)) {\n        nodes.splice(idx, 1);\n        break;\n      }\n    }\n  }\n  return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nvar DocumentPosition;\n(function (DocumentPosition) {\n  DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n  DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n  DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n  DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n  DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nfunction compareDocumentPosition(nodeA, nodeB) {\n  const aParents = [];\n  const bParents = [];\n  if (nodeA === nodeB) {\n    return 0;\n  }\n  let current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n  while (current) {\n    aParents.unshift(current);\n    current = current.parent;\n  }\n  current = hasChildren(nodeB) ? nodeB : nodeB.parent;\n  while (current) {\n    bParents.unshift(current);\n    current = current.parent;\n  }\n  const maxIdx = Math.min(aParents.length, bParents.length);\n  let idx = 0;\n  while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n    idx++;\n  }\n  if (idx === 0) {\n    return DocumentPosition.DISCONNECTED;\n  }\n  const sharedParent = aParents[idx - 1];\n  const siblings = sharedParent.children;\n  const aSibling = aParents[idx];\n  const bSibling = bParents[idx];\n  if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n    if (sharedParent === nodeB) {\n      return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n    }\n    return DocumentPosition.FOLLOWING;\n  }\n  if (sharedParent === nodeA) {\n    return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n  }\n  return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nfunction uniqueSort(nodes) {\n  nodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));\n  nodes.sort((a, b) => {\n    const relative = compareDocumentPosition(a, b);\n    if (relative & DocumentPosition.PRECEDING) {\n      return -1;\n    } else if (relative & DocumentPosition.FOLLOWING) {\n      return 1;\n    }\n    return 0;\n  });\n  return nodes;\n}\n\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param doc - The DOM to to extract the feed from.\n * @returns The feed.\n */\nfunction getFeed(doc) {\n  const feedRoot = getOneElement(isValidFeed, doc);\n  return !feedRoot ? null : feedRoot.name === \"feed\" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);\n}\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n  var _a;\n  const childs = feedRoot.children;\n  const feed = {\n    type: \"atom\",\n    items: getElementsByTagName(\"entry\", childs).map(item => {\n      var _a;\n      const {\n        children\n      } = item;\n      const entry = {\n        media: getMediaElements(children)\n      };\n      addConditionally(entry, \"id\", \"id\", children);\n      addConditionally(entry, \"title\", \"title\", children);\n      const href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n      if (href) {\n        entry.link = href;\n      }\n      const description = fetch(\"summary\", children) || fetch(\"content\", children);\n      if (description) {\n        entry.description = description;\n      }\n      const pubDate = fetch(\"updated\", children);\n      if (pubDate) {\n        entry.pubDate = new Date(pubDate);\n      }\n      return entry;\n    })\n  };\n  addConditionally(feed, \"id\", \"id\", childs);\n  addConditionally(feed, \"title\", \"title\", childs);\n  const href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n  if (href) {\n    feed.link = href;\n  }\n  addConditionally(feed, \"description\", \"subtitle\", childs);\n  const updated = fetch(\"updated\", childs);\n  if (updated) {\n    feed.updated = new Date(updated);\n  }\n  addConditionally(feed, \"author\", \"email\", childs, true);\n  return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n  var _a, _b;\n  const childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n  const feed = {\n    type: feedRoot.name.substr(0, 3),\n    id: \"\",\n    items: getElementsByTagName(\"item\", feedRoot.children).map(item => {\n      const {\n        children\n      } = item;\n      const entry = {\n        media: getMediaElements(children)\n      };\n      addConditionally(entry, \"id\", \"guid\", children);\n      addConditionally(entry, \"title\", \"title\", children);\n      addConditionally(entry, \"link\", \"link\", children);\n      addConditionally(entry, \"description\", \"description\", children);\n      const pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n      if (pubDate) entry.pubDate = new Date(pubDate);\n      return entry;\n    })\n  };\n  addConditionally(feed, \"title\", \"title\", childs);\n  addConditionally(feed, \"link\", \"link\", childs);\n  addConditionally(feed, \"description\", \"description\", childs);\n  const updated = fetch(\"lastBuildDate\", childs);\n  if (updated) {\n    feed.updated = new Date(updated);\n  }\n  addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n  return feed;\n}\nconst MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nconst MEDIA_KEYS_INT = [\"fileSize\", \"bitrate\", \"framerate\", \"samplingrate\", \"channels\", \"duration\", \"height\", \"width\"];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n  return getElementsByTagName(\"media:content\", where).map(elem => {\n    const {\n      attribs\n    } = elem;\n    const media = {\n      medium: attribs[\"medium\"],\n      isDefault: !!attribs[\"isDefault\"]\n    };\n    for (const attrib of MEDIA_KEYS_STRING) {\n      if (attribs[attrib]) {\n        media[attrib] = attribs[attrib];\n      }\n    }\n    for (const attrib of MEDIA_KEYS_INT) {\n      if (attribs[attrib]) {\n        media[attrib] = parseInt(attribs[attrib], 10);\n      }\n    }\n    if (attribs[\"expression\"]) {\n      media.expression = attribs[\"expression\"];\n    }\n    return media;\n  });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n  return getElementsByTagName(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse = false) {\n  return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param obj Object to be extended\n * @param prop Property name\n * @param tagName Tag name that contains the conditionally added property\n * @param where Element to search for the property\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(obj, prop, tagName, where, recurse = false) {\n  const val = fetch(tagName, where, recurse);\n  if (val) obj[prop] = val;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n  return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\nvar DomUtils = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  get DocumentPosition() {\n    return DocumentPosition;\n  },\n  append: append,\n  appendChild: appendChild,\n  compareDocumentPosition: compareDocumentPosition,\n  existsOne: existsOne,\n  filter: filter,\n  find: find,\n  findAll: findAll,\n  findOne: findOne,\n  findOneChild: findOneChild,\n  getAttributeValue: getAttributeValue,\n  getChildren: getChildren,\n  getElementById: getElementById,\n  getElements: getElements,\n  getElementsByTagName: getElementsByTagName,\n  getElementsByTagType: getElementsByTagType,\n  getFeed: getFeed,\n  getInnerHTML: getInnerHTML,\n  getName: getName,\n  getOuterHTML: getOuterHTML,\n  getParent: getParent,\n  getSiblings: getSiblings,\n  getText: getText,\n  hasAttrib: hasAttrib,\n  hasChildren: hasChildren,\n  innerText: innerText,\n  isCDATA: isCDATA,\n  isComment: isComment,\n  isDocument: isDocument,\n  isTag: isTag,\n  isText: isText,\n  nextElementSibling: nextElementSibling,\n  prepend: prepend,\n  prependChild: prependChild,\n  prevElementSibling: prevElementSibling,\n  removeElement: removeElement,\n  removeSubsets: removeSubsets,\n  replaceElement: replaceElement,\n  testElement: testElement,\n  textContent: textContent,\n  uniqueSort: uniqueSort\n});\nvar boolbase$1;\nvar hasRequiredBoolbase;\nfunction requireBoolbase() {\n  if (hasRequiredBoolbase) return boolbase$1;\n  hasRequiredBoolbase = 1;\n  boolbase$1 = {\n    trueFunc: function trueFunc() {\n      return true;\n    },\n    falseFunc: function falseFunc() {\n      return false;\n    }\n  };\n  return boolbase$1;\n}\nvar boolbaseExports = requireBoolbase();\nvar boolbase = /*@__PURE__*/getDefaultExportFromCjs(boolbaseExports);\nvar SelectorType;\n(function (SelectorType) {\n  SelectorType[\"Attribute\"] = \"attribute\";\n  SelectorType[\"Pseudo\"] = \"pseudo\";\n  SelectorType[\"PseudoElement\"] = \"pseudo-element\";\n  SelectorType[\"Tag\"] = \"tag\";\n  SelectorType[\"Universal\"] = \"universal\";\n  // Traversals\n  SelectorType[\"Adjacent\"] = \"adjacent\";\n  SelectorType[\"Child\"] = \"child\";\n  SelectorType[\"Descendant\"] = \"descendant\";\n  SelectorType[\"Parent\"] = \"parent\";\n  SelectorType[\"Sibling\"] = \"sibling\";\n  SelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n})(SelectorType || (SelectorType = {}));\nvar AttributeAction;\n(function (AttributeAction) {\n  AttributeAction[\"Any\"] = \"any\";\n  AttributeAction[\"Element\"] = \"element\";\n  AttributeAction[\"End\"] = \"end\";\n  AttributeAction[\"Equals\"] = \"equals\";\n  AttributeAction[\"Exists\"] = \"exists\";\n  AttributeAction[\"Hyphen\"] = \"hyphen\";\n  AttributeAction[\"Not\"] = \"not\";\n  AttributeAction[\"Start\"] = \"start\";\n})(AttributeAction || (AttributeAction = {}));\nconst reName = /^[^\\\\#]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\-\\u00b0-\\uFFFF])+/;\nconst reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\nconst actionTypes = new Map([[126 /* Tilde */, AttributeAction.Element], [94 /* Circumflex */, AttributeAction.Start], [36 /* Dollar */, AttributeAction.End], [42 /* Asterisk */, AttributeAction.Any], [33 /* ExclamationMark */, AttributeAction.Not], [124 /* Pipe */, AttributeAction.Hyphen]]);\n// Pseudos, whose data property is parsed as well.\nconst unpackPseudos = new Set([\"has\", \"not\", \"matches\", \"is\", \"where\", \"host\", \"host-context\"]);\n/**\n * Checks whether a specific selector is a traversal.\n * This is useful eg. in swapping the order of elements that\n * are not traversals.\n *\n * @param selector Selector to check.\n */\nfunction isTraversal$1(selector) {\n  switch (selector.type) {\n    case SelectorType.Adjacent:\n    case SelectorType.Child:\n    case SelectorType.Descendant:\n    case SelectorType.Parent:\n    case SelectorType.Sibling:\n    case SelectorType.ColumnCombinator:\n      return true;\n    default:\n      return false;\n  }\n}\nconst stripQuotesFromPseudos = new Set([\"contains\", \"icontains\"]);\n// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152\nfunction funescape(_, escaped, escapedWhitespace) {\n  const high = parseInt(escaped, 16) - 0x10000;\n  // NaN means non-codepoint\n  return high !== high || escapedWhitespace ? escaped : high < 0 ?\n  // BMP codepoint\n  String.fromCharCode(high + 0x10000) :\n  // Supplemental Plane codepoint (surrogate pair)\n  String.fromCharCode(high >> 10 | 0xd800, high & 0x3ff | 0xdc00);\n}\nfunction unescapeCSS(str) {\n  return str.replace(reEscape, funescape);\n}\nfunction isQuote(c) {\n  return c === 39 /* SingleQuote */ || c === 34 /* DoubleQuote */;\n}\nfunction isWhitespace$1(c) {\n  return c === 32 /* Space */ || c === 9 /* Tab */ || c === 10 /* NewLine */ || c === 12 /* FormFeed */ || c === 13 /* CarriageReturn */;\n}\n/**\n * Parses `selector`, optionally with the passed `options`.\n *\n * @param selector Selector to parse.\n * @param options Options for parsing.\n * @returns Returns a two-dimensional array.\n * The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n * the second contains the relevant tokens for that selector.\n */\nfunction parse$1(selector) {\n  const subselects = [];\n  const endIndex = parseSelector(subselects, `${selector}`, 0);\n  if (endIndex < selector.length) {\n    throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`);\n  }\n  return subselects;\n}\nfunction parseSelector(subselects, selector, selectorIndex) {\n  let tokens = [];\n  function getName(offset) {\n    const match = selector.slice(selectorIndex + offset).match(reName);\n    if (!match) {\n      throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`);\n    }\n    const [name] = match;\n    selectorIndex += offset + name.length;\n    return unescapeCSS(name);\n  }\n  function stripWhitespace(offset) {\n    selectorIndex += offset;\n    while (selectorIndex < selector.length && isWhitespace$1(selector.charCodeAt(selectorIndex))) {\n      selectorIndex++;\n    }\n  }\n  function readValueWithParenthesis() {\n    selectorIndex += 1;\n    const start = selectorIndex;\n    let counter = 1;\n    for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) {\n      if (selector.charCodeAt(selectorIndex) === 40 /* LeftParenthesis */ && !isEscaped(selectorIndex)) {\n        counter++;\n      } else if (selector.charCodeAt(selectorIndex) === 41 /* RightParenthesis */ && !isEscaped(selectorIndex)) {\n        counter--;\n      }\n    }\n    if (counter) {\n      throw new Error(\"Parenthesis not matched\");\n    }\n    return unescapeCSS(selector.slice(start, selectorIndex - 1));\n  }\n  function isEscaped(pos) {\n    let slashCount = 0;\n    while (selector.charCodeAt(--pos) === 92 /* BackSlash */) slashCount++;\n    return (slashCount & 1) === 1;\n  }\n  function ensureNotTraversal() {\n    if (tokens.length > 0 && isTraversal$1(tokens[tokens.length - 1])) {\n      throw new Error(\"Did not expect successive traversals.\");\n    }\n  }\n  function addTraversal(type) {\n    if (tokens.length > 0 && tokens[tokens.length - 1].type === SelectorType.Descendant) {\n      tokens[tokens.length - 1].type = type;\n      return;\n    }\n    ensureNotTraversal();\n    tokens.push({\n      type\n    });\n  }\n  function addSpecialAttribute(name, action) {\n    tokens.push({\n      type: SelectorType.Attribute,\n      name,\n      action,\n      value: getName(1),\n      namespace: null,\n      ignoreCase: \"quirks\"\n    });\n  }\n  /**\n   * We have finished parsing the current part of the selector.\n   *\n   * Remove descendant tokens at the end if they exist,\n   * and return the last index, so that parsing can be\n   * picked up from here.\n   */\n  function finalizeSubselector() {\n    if (tokens.length && tokens[tokens.length - 1].type === SelectorType.Descendant) {\n      tokens.pop();\n    }\n    if (tokens.length === 0) {\n      throw new Error(\"Empty sub-selector\");\n    }\n    subselects.push(tokens);\n  }\n  stripWhitespace(0);\n  if (selector.length === selectorIndex) {\n    return selectorIndex;\n  }\n  loop: while (selectorIndex < selector.length) {\n    const firstChar = selector.charCodeAt(selectorIndex);\n    switch (firstChar) {\n      // Whitespace\n      case 32 /* Space */:\n      case 9 /* Tab */:\n      case 10 /* NewLine */:\n      case 12 /* FormFeed */:\n      case 13 /* CarriageReturn */:\n        {\n          if (tokens.length === 0 || tokens[0].type !== SelectorType.Descendant) {\n            ensureNotTraversal();\n            tokens.push({\n              type: SelectorType.Descendant\n            });\n          }\n          stripWhitespace(1);\n          break;\n        }\n      // Traversals\n      case 62 /* GreaterThan */:\n        {\n          addTraversal(SelectorType.Child);\n          stripWhitespace(1);\n          break;\n        }\n      case 60 /* LessThan */:\n        {\n          addTraversal(SelectorType.Parent);\n          stripWhitespace(1);\n          break;\n        }\n      case 126 /* Tilde */:\n        {\n          addTraversal(SelectorType.Sibling);\n          stripWhitespace(1);\n          break;\n        }\n      case 43 /* Plus */:\n        {\n          addTraversal(SelectorType.Adjacent);\n          stripWhitespace(1);\n          break;\n        }\n      // Special attribute selectors: .class, #id\n      case 46 /* Period */:\n        {\n          addSpecialAttribute(\"class\", AttributeAction.Element);\n          break;\n        }\n      case 35 /* Hash */:\n        {\n          addSpecialAttribute(\"id\", AttributeAction.Equals);\n          break;\n        }\n      case 91 /* LeftSquareBracket */:\n        {\n          stripWhitespace(1);\n          // Determine attribute name and namespace\n          let name;\n          let namespace = null;\n          if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */) {\n            // Equivalent to no namespace\n            name = getName(1);\n          } else if (selector.startsWith(\"*|\", selectorIndex)) {\n            namespace = \"*\";\n            name = getName(2);\n          } else {\n            name = getName(0);\n            if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && selector.charCodeAt(selectorIndex + 1) !== 61 /* Equal */) {\n              namespace = name;\n              name = getName(1);\n            }\n          }\n          stripWhitespace(0);\n          // Determine comparison operation\n          let action = AttributeAction.Exists;\n          const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n          if (possibleAction) {\n            action = possibleAction;\n            if (selector.charCodeAt(selectorIndex + 1) !== 61 /* Equal */) {\n              throw new Error(\"Expected `=`\");\n            }\n            stripWhitespace(2);\n          } else if (selector.charCodeAt(selectorIndex) === 61 /* Equal */) {\n            action = AttributeAction.Equals;\n            stripWhitespace(1);\n          }\n          // Determine value\n          let value = \"\";\n          let ignoreCase = null;\n          if (action !== \"exists\") {\n            if (isQuote(selector.charCodeAt(selectorIndex))) {\n              const quote = selector.charCodeAt(selectorIndex);\n              let sectionEnd = selectorIndex + 1;\n              while (sectionEnd < selector.length && (selector.charCodeAt(sectionEnd) !== quote || isEscaped(sectionEnd))) {\n                sectionEnd += 1;\n              }\n              if (selector.charCodeAt(sectionEnd) !== quote) {\n                throw new Error(\"Attribute value didn't end\");\n              }\n              value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));\n              selectorIndex = sectionEnd + 1;\n            } else {\n              const valueStart = selectorIndex;\n              while (selectorIndex < selector.length && (!isWhitespace$1(selector.charCodeAt(selectorIndex)) && selector.charCodeAt(selectorIndex) !== 93 /* RightSquareBracket */ || isEscaped(selectorIndex))) {\n                selectorIndex += 1;\n              }\n              value = unescapeCSS(selector.slice(valueStart, selectorIndex));\n            }\n            stripWhitespace(0);\n            // See if we have a force ignore flag\n            const forceIgnore = selector.charCodeAt(selectorIndex) | 0x20;\n            // If the forceIgnore flag is set (either `i` or `s`), use that value\n            if (forceIgnore === 115 /* LowerS */) {\n              ignoreCase = false;\n              stripWhitespace(1);\n            } else if (forceIgnore === 105 /* LowerI */) {\n              ignoreCase = true;\n              stripWhitespace(1);\n            }\n          }\n          if (selector.charCodeAt(selectorIndex) !== 93 /* RightSquareBracket */) {\n            throw new Error(\"Attribute selector didn't terminate\");\n          }\n          selectorIndex += 1;\n          const attributeSelector = {\n            type: SelectorType.Attribute,\n            name,\n            action,\n            value,\n            namespace,\n            ignoreCase\n          };\n          tokens.push(attributeSelector);\n          break;\n        }\n      case 58 /* Colon */:\n        {\n          if (selector.charCodeAt(selectorIndex + 1) === 58 /* Colon */) {\n            tokens.push({\n              type: SelectorType.PseudoElement,\n              name: getName(2).toLowerCase(),\n              data: selector.charCodeAt(selectorIndex) === 40 /* LeftParenthesis */ ? readValueWithParenthesis() : null\n            });\n            continue;\n          }\n          const name = getName(1).toLowerCase();\n          let data = null;\n          if (selector.charCodeAt(selectorIndex) === 40 /* LeftParenthesis */) {\n            if (unpackPseudos.has(name)) {\n              if (isQuote(selector.charCodeAt(selectorIndex + 1))) {\n                throw new Error(`Pseudo-selector ${name} cannot be quoted`);\n              }\n              data = [];\n              selectorIndex = parseSelector(data, selector, selectorIndex + 1);\n              if (selector.charCodeAt(selectorIndex) !== 41 /* RightParenthesis */) {\n                throw new Error(`Missing closing parenthesis in :${name} (${selector})`);\n              }\n              selectorIndex += 1;\n            } else {\n              data = readValueWithParenthesis();\n              if (stripQuotesFromPseudos.has(name)) {\n                const quot = data.charCodeAt(0);\n                if (quot === data.charCodeAt(data.length - 1) && isQuote(quot)) {\n                  data = data.slice(1, -1);\n                }\n              }\n              data = unescapeCSS(data);\n            }\n          }\n          tokens.push({\n            type: SelectorType.Pseudo,\n            name,\n            data\n          });\n          break;\n        }\n      case 44 /* Comma */:\n        {\n          finalizeSubselector();\n          tokens = [];\n          stripWhitespace(1);\n          break;\n        }\n      default:\n        {\n          if (selector.startsWith(\"/*\", selectorIndex)) {\n            const endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n            if (endIndex < 0) {\n              throw new Error(\"Comment was not terminated\");\n            }\n            selectorIndex = endIndex + 2;\n            // Remove leading whitespace\n            if (tokens.length === 0) {\n              stripWhitespace(0);\n            }\n            break;\n          }\n          let namespace = null;\n          let name;\n          if (firstChar === 42 /* Asterisk */) {\n            selectorIndex += 1;\n            name = \"*\";\n          } else if (firstChar === 124 /* Pipe */) {\n            name = \"\";\n            if (selector.charCodeAt(selectorIndex + 1) === 124 /* Pipe */) {\n              addTraversal(SelectorType.ColumnCombinator);\n              stripWhitespace(2);\n              break;\n            }\n          } else if (reName.test(selector.slice(selectorIndex))) {\n            name = getName(0);\n          } else {\n            break loop;\n          }\n          if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && selector.charCodeAt(selectorIndex + 1) !== 124 /* Pipe */) {\n            namespace = name;\n            if (selector.charCodeAt(selectorIndex + 1) === 42 /* Asterisk */) {\n              name = \"*\";\n              selectorIndex += 2;\n            } else {\n              name = getName(1);\n            }\n          }\n          tokens.push(name === \"*\" ? {\n            type: SelectorType.Universal,\n            namespace\n          } : {\n            type: SelectorType.Tag,\n            name,\n            namespace\n          });\n        }\n    }\n  }\n  finalizeSubselector();\n  return selectorIndex;\n}\nconst attribValChars = [\"\\\\\", '\"'];\nconst pseudoValChars = [...attribValChars, \"(\", \")\"];\nnew Set(attribValChars.map(c => c.charCodeAt(0)));\nnew Set(pseudoValChars.map(c => c.charCodeAt(0)));\nnew Set([...pseudoValChars, \"~\", \"^\", \"$\", \"*\", \"+\", \"!\", \"|\", \":\", \"[\", \"]\", \" \", \".\"].map(c => c.charCodeAt(0)));\nconst procedure = new Map([[SelectorType.Universal, 50], [SelectorType.Tag, 30], [SelectorType.Attribute, 1], [SelectorType.Pseudo, 0]]);\nfunction isTraversal(token) {\n  return !procedure.has(token.type);\n}\nconst attributes = new Map([[AttributeAction.Exists, 10], [AttributeAction.Equals, 8], [AttributeAction.Not, 7], [AttributeAction.Start, 6], [AttributeAction.End, 6], [AttributeAction.Any, 5]]);\n/**\n * Sort the parts of the passed selector,\n * as there is potential for optimization\n * (some types of selectors are faster than others)\n *\n * @param arr Selector to sort\n */\nfunction sortByProcedure(arr) {\n  const procs = arr.map(getProcedure);\n  for (let i = 1; i < arr.length; i++) {\n    const procNew = procs[i];\n    if (procNew < 0) continue;\n    for (let j = i - 1; j >= 0 && procNew < procs[j]; j--) {\n      const token = arr[j + 1];\n      arr[j + 1] = arr[j];\n      arr[j] = token;\n      procs[j + 1] = procs[j];\n      procs[j] = procNew;\n    }\n  }\n}\nfunction getProcedure(token) {\n  var _a, _b;\n  let proc = (_a = procedure.get(token.type)) !== null && _a !== void 0 ? _a : -1;\n  if (token.type === SelectorType.Attribute) {\n    proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4;\n    if (token.action === AttributeAction.Equals && token.name === \"id\") {\n      // Prefer ID selectors (eg. #ID)\n      proc = 9;\n    }\n    if (token.ignoreCase) {\n      /*\n       * IgnoreCase adds some overhead, prefer \"normal\" token\n       * this is a binary operation, to ensure it's still an int\n       */\n      proc >>= 1;\n    }\n  } else if (token.type === SelectorType.Pseudo) {\n    if (!token.data) {\n      proc = 3;\n    } else if (token.name === \"has\" || token.name === \"contains\") {\n      proc = 0; // Expensive in any case\n    } else if (Array.isArray(token.data)) {\n      // Eg. :matches, :not\n      proc = Math.min(...token.data.map(d => Math.min(...d.map(getProcedure))));\n      // If we have traversals, try to avoid executing this selector\n      if (proc < 0) {\n        proc = 0;\n      }\n    } else {\n      proc = 2;\n    }\n  }\n  return proc;\n}\n\n/**\n * All reserved characters in a regex, used for escaping.\n *\n * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license\n * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794\n */\nconst reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\nfunction escapeRegex(value) {\n  return value.replace(reChars, \"\\\\$&\");\n}\n/**\n * Attributes that are case-insensitive in HTML.\n *\n * @private\n * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors\n */\nconst caseInsensitiveAttributes = new Set([\"accept\", \"accept-charset\", \"align\", \"alink\", \"axis\", \"bgcolor\", \"charset\", \"checked\", \"clear\", \"codetype\", \"color\", \"compact\", \"declare\", \"defer\", \"dir\", \"direction\", \"disabled\", \"enctype\", \"face\", \"frame\", \"hreflang\", \"http-equiv\", \"lang\", \"language\", \"link\", \"media\", \"method\", \"multiple\", \"nohref\", \"noresize\", \"noshade\", \"nowrap\", \"readonly\", \"rel\", \"rev\", \"rules\", \"scope\", \"scrolling\", \"selected\", \"shape\", \"target\", \"text\", \"type\", \"valign\", \"valuetype\", \"vlink\"]);\nfunction shouldIgnoreCase(selector, options) {\n  return typeof selector.ignoreCase === \"boolean\" ? selector.ignoreCase : selector.ignoreCase === \"quirks\" ? !!options.quirksMode : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);\n}\n/**\n * Attribute selectors\n */\nconst attributeRules = {\n  equals(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length === value.length && attr.toLowerCase() === value && next(elem);\n      };\n    }\n    return elem => adapter.getAttributeValue(elem, name) === value && next(elem);\n  },\n  hyphen(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = value.length;\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return function hyphenIC(elem) {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len).toLowerCase() === value && next(elem);\n      };\n    }\n    return function hyphen(elem) {\n      const attr = adapter.getAttributeValue(elem, name);\n      return attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len) === value && next(elem);\n    };\n  },\n  element(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name,\n      value\n    } = data;\n    if (/\\s/.test(value)) {\n      return boolbase.falseFunc;\n    }\n    const regex = new RegExp(`(?:^|\\\\s)${escapeRegex(value)}(?:$|\\\\s)`, shouldIgnoreCase(data, options) ? \"i\" : \"\");\n    return function element(elem) {\n      const attr = adapter.getAttributeValue(elem, name);\n      return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n    };\n  },\n  exists(next, {\n    name\n  }, {\n    adapter\n  }) {\n    return elem => adapter.hasAttrib(elem, name) && next(elem);\n  },\n  start(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = value.length;\n    if (len === 0) {\n      return boolbase.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length >= len && attr.substr(0, len).toLowerCase() === value && next(elem);\n      };\n    }\n    return elem => {\n      var _a;\n      return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) && next(elem);\n    };\n  },\n  end(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = -value.length;\n    if (len === 0) {\n      return boolbase.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        var _a;\n        return ((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem);\n      };\n    }\n    return elem => {\n      var _a;\n      return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) && next(elem);\n    };\n  },\n  any(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name,\n      value\n    } = data;\n    if (value === \"\") {\n      return boolbase.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      const regex = new RegExp(escapeRegex(value), \"i\");\n      return function anyIC(elem) {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n      };\n    }\n    return elem => {\n      var _a;\n      return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) && next(elem);\n    };\n  },\n  not(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    if (value === \"\") {\n      return elem => !!adapter.getAttributeValue(elem, name) && next(elem);\n    } else if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return (attr == null || attr.length !== value.length || attr.toLowerCase() !== value) && next(elem);\n      };\n    }\n    return elem => adapter.getAttributeValue(elem, name) !== value && next(elem);\n  }\n};\n\n// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\n// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is \" \\t\\r\\n\\f\"\nconst whitespace = new Set([9, 10, 12, 13, 32]);\nconst ZERO = \"0\".charCodeAt(0);\nconst NINE = \"9\".charCodeAt(0);\n/**\n * Parses an expression.\n *\n * @throws An `Error` if parsing fails.\n * @returns An array containing the integer step size and the integer offset of the nth rule.\n * @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n */\nfunction parse(formula) {\n  formula = formula.trim().toLowerCase();\n  if (formula === \"even\") {\n    return [2, 0];\n  } else if (formula === \"odd\") {\n    return [2, 1];\n  }\n  // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\n  let idx = 0;\n  let a = 0;\n  let sign = readSign();\n  let number = readNumber();\n  if (idx < formula.length && formula.charAt(idx) === \"n\") {\n    idx++;\n    a = sign * (number !== null && number !== void 0 ? number : 1);\n    skipWhitespace();\n    if (idx < formula.length) {\n      sign = readSign();\n      skipWhitespace();\n      number = readNumber();\n    } else {\n      sign = number = 0;\n    }\n  }\n  // Throw if there is anything else\n  if (number === null || idx < formula.length) {\n    throw new Error(`n-th rule couldn't be parsed ('${formula}')`);\n  }\n  return [a, sign * number];\n  function readSign() {\n    if (formula.charAt(idx) === \"-\") {\n      idx++;\n      return -1;\n    }\n    if (formula.charAt(idx) === \"+\") {\n      idx++;\n    }\n    return 1;\n  }\n  function readNumber() {\n    const start = idx;\n    let value = 0;\n    while (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {\n      value = value * 10 + (formula.charCodeAt(idx) - ZERO);\n      idx++;\n    }\n    // Return `null` if we didn't read anything.\n    return idx === start ? null : value;\n  }\n  function skipWhitespace() {\n    while (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) {\n      idx++;\n    }\n  }\n}\n\n/**\n * Returns a function that checks if an elements index matches the given rule\n * highly optimized to return the fastest solution.\n *\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A highly optimized function that returns whether an index matches the nth-check.\n * @example\n *\n * ```js\n * const check = nthCheck.compile([2, 3]);\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n * ```\n */\nfunction compile(parsed) {\n  const a = parsed[0];\n  // Subtract 1 from `b`, to convert from one- to zero-indexed.\n  const b = parsed[1] - 1;\n  /*\n   * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`.\n   * Besides, the specification states that no elements are\n   * matched when `a` and `b` are 0.\n   *\n   * `b < 0` here as we subtracted 1 from `b` above.\n   */\n  if (b < 0 && a <= 0) return boolbase.falseFunc;\n  // When `a` is in the range -1..1, it matches any element (so only `b` is checked).\n  if (a === -1) return index => index <= b;\n  if (a === 0) return index => index === b;\n  // When `b <= 0` and `a === 1`, they match any element.\n  if (a === 1) return b < 0 ? boolbase.trueFunc : index => index >= b;\n  /*\n   * Otherwise, modulo can be used to check if there is a match.\n   *\n   * Modulo doesn't care about the sign, so let's use `a`s absolute value.\n   */\n  const absA = Math.abs(a);\n  // Get `b mod a`, + a if this is negative.\n  const bMod = (b % absA + absA) % absA;\n  return a > 1 ? index => index >= b && index % absA === bMod : index => index <= b && index % absA === bMod;\n}\n\n/**\n * Parses and compiles a formula to a highly optimized function.\n * Combination of {@link parse} and {@link compile}.\n *\n * If the formula doesn't match any elements,\n * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`.\n * Otherwise, a function accepting an _index_ is returned, which returns\n * whether or not the passed _index_ matches the formula.\n *\n * Note: The nth-rule starts counting at `1`, the returned function at `0`.\n *\n * @param formula The formula to compile.\n * @example\n * const check = nthCheck(\"2n+3\");\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n */\nfunction nthCheck(formula) {\n  return compile(parse(formula));\n}\nfunction getChildFunc(next, adapter) {\n  return elem => {\n    const parent = adapter.getParent(elem);\n    return parent != null && adapter.isTag(parent) && next(elem);\n  };\n}\nconst filters = {\n  contains(next, text, {\n    adapter\n  }) {\n    return function contains(elem) {\n      return next(elem) && adapter.getText(elem).includes(text);\n    };\n  },\n  icontains(next, text, {\n    adapter\n  }) {\n    const itext = text.toLowerCase();\n    return function icontains(elem) {\n      return next(elem) && adapter.getText(elem).toLowerCase().includes(itext);\n    };\n  },\n  // Location specific methods\n  \"nth-child\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbase.falseFunc) return boolbase.falseFunc;\n    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);\n    return function nthChild(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = 0; i < siblings.length; i++) {\n        if (equals(elem, siblings[i])) break;\n        if (adapter.isTag(siblings[i])) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-last-child\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbase.falseFunc) return boolbase.falseFunc;\n    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);\n    return function nthLastChild(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = siblings.length - 1; i >= 0; i--) {\n        if (equals(elem, siblings[i])) break;\n        if (adapter.isTag(siblings[i])) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-of-type\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbase.falseFunc) return boolbase.falseFunc;\n    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);\n    return function nthOfType(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = 0; i < siblings.length; i++) {\n        const currentSibling = siblings[i];\n        if (equals(elem, currentSibling)) break;\n        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-last-of-type\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbase.falseFunc) return boolbase.falseFunc;\n    if (func === boolbase.trueFunc) return getChildFunc(next, adapter);\n    return function nthLastOfType(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = siblings.length - 1; i >= 0; i--) {\n        const currentSibling = siblings[i];\n        if (equals(elem, currentSibling)) break;\n        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  // TODO determine the actual root element\n  root(next, _rule, {\n    adapter\n  }) {\n    return elem => {\n      const parent = adapter.getParent(elem);\n      return (parent == null || !adapter.isTag(parent)) && next(elem);\n    };\n  },\n  scope(next, rule, options, context) {\n    const {\n      equals\n    } = options;\n    if (!context || context.length === 0) {\n      // Equivalent to :root\n      return filters[\"root\"](next, rule, options);\n    }\n    if (context.length === 1) {\n      // NOTE: can't be unpacked, as :has uses this for side-effects\n      return elem => equals(context[0], elem) && next(elem);\n    }\n    return elem => context.includes(elem) && next(elem);\n  },\n  hover: dynamicStatePseudo(\"isHovered\"),\n  visited: dynamicStatePseudo(\"isVisited\"),\n  active: dynamicStatePseudo(\"isActive\")\n};\n/**\n * Dynamic state pseudos. These depend on optional Adapter methods.\n *\n * @param name The name of the adapter method to call.\n * @returns Pseudo for the `filters` object.\n */\nfunction dynamicStatePseudo(name) {\n  return function dynamicPseudo(next, _rule, {\n    adapter\n  }) {\n    const func = adapter[name];\n    if (typeof func !== \"function\") {\n      return boolbase.falseFunc;\n    }\n    return function active(elem) {\n      return func(elem) && next(elem);\n    };\n  };\n}\n\n// While filters are precompiled, pseudos get called when they are needed\nconst pseudos = {\n  empty(elem, {\n    adapter\n  }) {\n    return !adapter.getChildren(elem).some(elem =>\n    // FIXME: `getText` call is potentially expensive.\n    adapter.isTag(elem) || adapter.getText(elem) !== \"\");\n  },\n  \"first-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    if (adapter.prevElementSibling) {\n      return adapter.prevElementSibling(elem) == null;\n    }\n    const firstChild = adapter.getSiblings(elem).find(elem => adapter.isTag(elem));\n    return firstChild != null && equals(elem, firstChild);\n  },\n  \"last-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    for (let i = siblings.length - 1; i >= 0; i--) {\n      if (equals(elem, siblings[i])) return true;\n      if (adapter.isTag(siblings[i])) break;\n    }\n    return false;\n  },\n  \"first-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    const elemName = adapter.getName(elem);\n    for (let i = 0; i < siblings.length; i++) {\n      const currentSibling = siblings[i];\n      if (equals(elem, currentSibling)) return true;\n      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {\n        break;\n      }\n    }\n    return false;\n  },\n  \"last-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    const elemName = adapter.getName(elem);\n    for (let i = siblings.length - 1; i >= 0; i--) {\n      const currentSibling = siblings[i];\n      if (equals(elem, currentSibling)) return true;\n      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {\n        break;\n      }\n    }\n    return false;\n  },\n  \"only-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const elemName = adapter.getName(elem);\n    return adapter.getSiblings(elem).every(sibling => equals(elem, sibling) || !adapter.isTag(sibling) || adapter.getName(sibling) !== elemName);\n  },\n  \"only-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    return adapter.getSiblings(elem).every(sibling => equals(elem, sibling) || !adapter.isTag(sibling));\n  }\n};\nfunction verifyPseudoArgs(func, name, subselect, argIndex) {\n  if (subselect === null) {\n    if (func.length > argIndex) {\n      throw new Error(`Pseudo-class :${name} requires an argument`);\n    }\n  } else if (func.length === argIndex) {\n    throw new Error(`Pseudo-class :${name} doesn't have any arguments`);\n  }\n}\n\n/**\n * Aliases are pseudos that are expressed as selectors.\n */\nconst aliases = {\n  // Links\n  \"any-link\": \":is(a, area, link)[href]\",\n  link: \":any-link:not(:visited)\",\n  // Forms\n  // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements\n  disabled: `:is(\n        :is(button, input, select, textarea, optgroup, option)[disabled],\n        optgroup[disabled] > option,\n        fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n    )`,\n  enabled: \":not(:disabled)\",\n  checked: \":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)\",\n  required: \":is(input, select, textarea)[required]\",\n  optional: \":is(input, select, textarea):not([required])\",\n  // JQuery extensions\n  // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness\n  selected: \"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)\",\n  checkbox: \"[type=checkbox]\",\n  file: \"[type=file]\",\n  password: \"[type=password]\",\n  radio: \"[type=radio]\",\n  reset: \"[type=reset]\",\n  image: \"[type=image]\",\n  submit: \"[type=submit]\",\n  parent: \":not(:empty)\",\n  header: \":is(h1, h2, h3, h4, h5, h6)\",\n  button: \":is(button, input[type=button])\",\n  input: \":is(input, textarea, select, button)\",\n  text: \"input:is(:not([type!='']), [type=text])\"\n};\n\n/** Used as a placeholder for :has. Will be replaced with the actual element. */\nconst PLACEHOLDER_ELEMENT = {};\nfunction ensureIsTag(next, adapter) {\n  if (next === boolbase.falseFunc) return boolbase.falseFunc;\n  return elem => adapter.isTag(elem) && next(elem);\n}\nfunction getNextSiblings(elem, adapter) {\n  const siblings = adapter.getSiblings(elem);\n  if (siblings.length <= 1) return [];\n  const elemIndex = siblings.indexOf(elem);\n  if (elemIndex < 0 || elemIndex === siblings.length - 1) return [];\n  return siblings.slice(elemIndex + 1).filter(adapter.isTag);\n}\nfunction copyOptions(options) {\n  // Not copied: context, rootFunc\n  return {\n    xmlMode: !!options.xmlMode,\n    lowerCaseAttributeNames: !!options.lowerCaseAttributeNames,\n    lowerCaseTags: !!options.lowerCaseTags,\n    quirksMode: !!options.quirksMode,\n    cacheResults: !!options.cacheResults,\n    pseudos: options.pseudos,\n    adapter: options.adapter,\n    equals: options.equals\n  };\n}\nconst is = (next, token, options, context, compileToken) => {\n  const func = compileToken(token, copyOptions(options), context);\n  return func === boolbase.trueFunc ? next : func === boolbase.falseFunc ? boolbase.falseFunc : elem => func(elem) && next(elem);\n};\n/*\n * :not, :has, :is, :matches and :where have to compile selectors\n * doing this in src/pseudos.ts would lead to circular dependencies,\n * so we add them here\n */\nconst subselects = {\n  is,\n  /**\n   * `:matches` and `:where` are aliases for `:is`.\n   */\n  matches: is,\n  where: is,\n  not(next, token, options, context, compileToken) {\n    const func = compileToken(token, copyOptions(options), context);\n    return func === boolbase.falseFunc ? next : func === boolbase.trueFunc ? boolbase.falseFunc : elem => !func(elem) && next(elem);\n  },\n  has(next, subselect, options, _context, compileToken) {\n    const {\n      adapter\n    } = options;\n    const opts = copyOptions(options);\n    opts.relativeSelector = true;\n    const context = subselect.some(s => s.some(isTraversal)) ?\n    // Used as a placeholder. Will be replaced with the actual element.\n    [PLACEHOLDER_ELEMENT] : undefined;\n    const compiled = compileToken(subselect, opts, context);\n    if (compiled === boolbase.falseFunc) return boolbase.falseFunc;\n    const hasElement = ensureIsTag(compiled, adapter);\n    // If `compiled` is `trueFunc`, we can skip this.\n    if (context && compiled !== boolbase.trueFunc) {\n      /*\n       * `shouldTestNextSiblings` will only be true if the query starts with\n       * a traversal (sibling or adjacent). That means we will always have a context.\n       */\n      const {\n        shouldTestNextSiblings = false\n      } = compiled;\n      return elem => {\n        if (!next(elem)) return false;\n        context[0] = elem;\n        const childs = adapter.getChildren(elem);\n        const nextElements = shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter)] : childs;\n        return adapter.existsOne(hasElement, nextElements);\n      };\n    }\n    return elem => next(elem) && adapter.existsOne(hasElement, adapter.getChildren(elem));\n  }\n};\nfunction compilePseudoSelector(next, selector, options, context, compileToken) {\n  var _a;\n  const {\n    name,\n    data\n  } = selector;\n  if (Array.isArray(data)) {\n    if (!(name in subselects)) {\n      throw new Error(`Unknown pseudo-class :${name}(${data})`);\n    }\n    return subselects[name](next, data, options, context, compileToken);\n  }\n  const userPseudo = (_a = options.pseudos) === null || _a === void 0 ? void 0 : _a[name];\n  const stringPseudo = typeof userPseudo === \"string\" ? userPseudo : aliases[name];\n  if (typeof stringPseudo === \"string\") {\n    if (data != null) {\n      throw new Error(`Pseudo ${name} doesn't have any arguments`);\n    }\n    // The alias has to be parsed here, to make sure options are respected.\n    const alias = parse$1(stringPseudo);\n    return subselects[\"is\"](next, alias, options, context, compileToken);\n  }\n  if (typeof userPseudo === \"function\") {\n    verifyPseudoArgs(userPseudo, name, data, 1);\n    return elem => userPseudo(elem, data) && next(elem);\n  }\n  if (name in filters) {\n    return filters[name](next, data, options, context);\n  }\n  if (name in pseudos) {\n    const pseudo = pseudos[name];\n    verifyPseudoArgs(pseudo, name, data, 2);\n    return elem => pseudo(elem, options, data) && next(elem);\n  }\n  throw new Error(`Unknown pseudo-class :${name}`);\n}\nfunction getElementParent(node, adapter) {\n  const parent = adapter.getParent(node);\n  if (parent && adapter.isTag(parent)) {\n    return parent;\n  }\n  return null;\n}\n/*\n * All available rules\n */\nfunction compileGeneralSelector(next, selector, options, context, compileToken) {\n  const {\n    adapter,\n    equals\n  } = options;\n  switch (selector.type) {\n    case SelectorType.PseudoElement:\n      {\n        throw new Error(\"Pseudo-elements are not supported by css-select\");\n      }\n    case SelectorType.ColumnCombinator:\n      {\n        throw new Error(\"Column combinators are not yet supported by css-select\");\n      }\n    case SelectorType.Attribute:\n      {\n        if (selector.namespace != null) {\n          throw new Error(\"Namespaced attributes are not yet supported by css-select\");\n        }\n        if (!options.xmlMode || options.lowerCaseAttributeNames) {\n          selector.name = selector.name.toLowerCase();\n        }\n        return attributeRules[selector.action](next, selector, options);\n      }\n    case SelectorType.Pseudo:\n      {\n        return compilePseudoSelector(next, selector, options, context, compileToken);\n      }\n    // Tags\n    case SelectorType.Tag:\n      {\n        if (selector.namespace != null) {\n          throw new Error(\"Namespaced tag names are not yet supported by css-select\");\n        }\n        let {\n          name\n        } = selector;\n        if (!options.xmlMode || options.lowerCaseTags) {\n          name = name.toLowerCase();\n        }\n        return function tag(elem) {\n          return adapter.getName(elem) === name && next(elem);\n        };\n      }\n    // Traversal\n    case SelectorType.Descendant:\n      {\n        if (options.cacheResults === false || typeof WeakSet === \"undefined\") {\n          return function descendant(elem) {\n            let current = elem;\n            while (current = getElementParent(current, adapter)) {\n              if (next(current)) {\n                return true;\n              }\n            }\n            return false;\n          };\n        }\n        // @ts-expect-error `ElementNode` is not extending object\n        const isFalseCache = new WeakSet();\n        return function cachedDescendant(elem) {\n          let current = elem;\n          while (current = getElementParent(current, adapter)) {\n            if (!isFalseCache.has(current)) {\n              if (adapter.isTag(current) && next(current)) {\n                return true;\n              }\n              isFalseCache.add(current);\n            }\n          }\n          return false;\n        };\n      }\n    case \"_flexibleDescendant\":\n      {\n        // Include element itself, only used while querying an array\n        return function flexibleDescendant(elem) {\n          let current = elem;\n          do {\n            if (next(current)) return true;\n          } while (current = getElementParent(current, adapter));\n          return false;\n        };\n      }\n    case SelectorType.Parent:\n      {\n        return function parent(elem) {\n          return adapter.getChildren(elem).some(elem => adapter.isTag(elem) && next(elem));\n        };\n      }\n    case SelectorType.Child:\n      {\n        return function child(elem) {\n          const parent = adapter.getParent(elem);\n          return parent != null && adapter.isTag(parent) && next(parent);\n        };\n      }\n    case SelectorType.Sibling:\n      {\n        return function sibling(elem) {\n          const siblings = adapter.getSiblings(elem);\n          for (let i = 0; i < siblings.length; i++) {\n            const currentSibling = siblings[i];\n            if (equals(elem, currentSibling)) break;\n            if (adapter.isTag(currentSibling) && next(currentSibling)) {\n              return true;\n            }\n          }\n          return false;\n        };\n      }\n    case SelectorType.Adjacent:\n      {\n        if (adapter.prevElementSibling) {\n          return function adjacent(elem) {\n            const previous = adapter.prevElementSibling(elem);\n            return previous != null && next(previous);\n          };\n        }\n        return function adjacent(elem) {\n          const siblings = adapter.getSiblings(elem);\n          let lastElement;\n          for (let i = 0; i < siblings.length; i++) {\n            const currentSibling = siblings[i];\n            if (equals(elem, currentSibling)) break;\n            if (adapter.isTag(currentSibling)) {\n              lastElement = currentSibling;\n            }\n          }\n          return !!lastElement && next(lastElement);\n        };\n      }\n    case SelectorType.Universal:\n      {\n        if (selector.namespace != null && selector.namespace !== \"*\") {\n          throw new Error(\"Namespaced universal selectors are not yet supported by css-select\");\n        }\n        return next;\n      }\n  }\n}\nfunction compileUnsafe(selector, options, context) {\n  const token = typeof selector === \"string\" ? parse$1(selector) : selector;\n  return compileToken(token, options, context);\n}\nfunction includesScopePseudo(t) {\n  return t.type === SelectorType.Pseudo && (t.name === \"scope\" || Array.isArray(t.data) && t.data.some(data => data.some(includesScopePseudo)));\n}\nconst DESCENDANT_TOKEN = {\n  type: SelectorType.Descendant\n};\nconst FLEXIBLE_DESCENDANT_TOKEN = {\n  type: \"_flexibleDescendant\"\n};\nconst SCOPE_TOKEN = {\n  type: SelectorType.Pseudo,\n  name: \"scope\",\n  data: null\n};\n/*\n * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector\n * http://www.w3.org/TR/selectors4/#absolutizing\n */\nfunction absolutize(token, {\n  adapter\n}, context) {\n  // TODO Use better check if the context is a document\n  const hasContext = !!(context === null || context === void 0 ? void 0 : context.every(e => {\n    const parent = adapter.isTag(e) && adapter.getParent(e);\n    return e === PLACEHOLDER_ELEMENT || parent && adapter.isTag(parent);\n  }));\n  for (const t of token) {\n    if (t.length > 0 && isTraversal(t[0]) && t[0].type !== SelectorType.Descendant) ;else if (hasContext && !t.some(includesScopePseudo)) {\n      t.unshift(DESCENDANT_TOKEN);\n    } else {\n      continue;\n    }\n    t.unshift(SCOPE_TOKEN);\n  }\n}\nfunction compileToken(token, options, context) {\n  var _a;\n  token.forEach(sortByProcedure);\n  context = (_a = options.context) !== null && _a !== void 0 ? _a : context;\n  const isArrayContext = Array.isArray(context);\n  const finalContext = context && (Array.isArray(context) ? context : [context]);\n  // Check if the selector is relative\n  if (options.relativeSelector !== false) {\n    absolutize(token, options, finalContext);\n  } else if (token.some(t => t.length > 0 && isTraversal(t[0]))) {\n    throw new Error(\"Relative selectors are not allowed when the `relativeSelector` option is disabled\");\n  }\n  let shouldTestNextSiblings = false;\n  const query = token.map(rules => {\n    if (rules.length >= 2) {\n      const [first, second] = rules;\n      if (first.type !== SelectorType.Pseudo || first.name !== \"scope\") ;else if (isArrayContext && second.type === SelectorType.Descendant) {\n        rules[1] = FLEXIBLE_DESCENDANT_TOKEN;\n      } else if (second.type === SelectorType.Adjacent || second.type === SelectorType.Sibling) {\n        shouldTestNextSiblings = true;\n      }\n    }\n    return compileRules(rules, options, finalContext);\n  }).reduce(reduceRules, boolbase.falseFunc);\n  query.shouldTestNextSiblings = shouldTestNextSiblings;\n  return query;\n}\nfunction compileRules(rules, options, context) {\n  var _a;\n  return rules.reduce((previous, rule) => previous === boolbase.falseFunc ? boolbase.falseFunc : compileGeneralSelector(previous, rule, options, context, compileToken), (_a = options.rootFunc) !== null && _a !== void 0 ? _a : boolbase.trueFunc);\n}\nfunction reduceRules(a, b) {\n  if (b === boolbase.falseFunc || a === boolbase.trueFunc) {\n    return a;\n  }\n  if (a === boolbase.falseFunc || b === boolbase.trueFunc) {\n    return b;\n  }\n  return function combine(elem) {\n    return a(elem) || b(elem);\n  };\n}\nconst defaultEquals = (a, b) => a === b;\nconst defaultOptions = {\n  adapter: DomUtils,\n  equals: defaultEquals\n};\nfunction convertOptionFormats(options) {\n  var _a, _b, _c, _d;\n  /*\n   * We force one format of options to the other one.\n   */\n  // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`.\n  const opts = options !== null && options !== void 0 ? options : defaultOptions;\n  // @ts-expect-error Same as above.\n  (_a = opts.adapter) !== null && _a !== void 0 ? _a : opts.adapter = DomUtils;\n  // @ts-expect-error `equals` does not exist on `Options`\n  (_b = opts.equals) !== null && _b !== void 0 ? _b : opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals;\n  return opts;\n}\nfunction getSelectorFunc(searchFunc) {\n  return function select(query, elements, options) {\n    const opts = convertOptionFormats(options);\n    if (typeof query !== \"function\") {\n      query = compileUnsafe(query, opts, elements);\n    }\n    const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);\n    return searchFunc(query, filteredElements, opts);\n  };\n}\nfunction prepareContext(elems, adapter, shouldTestNextSiblings = false) {\n  /*\n   * Add siblings if the query requires them.\n   * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692\n   */\n  if (shouldTestNextSiblings) {\n    elems = appendNextSiblings(elems, adapter);\n  }\n  return Array.isArray(elems) ? adapter.removeSubsets(elems) : adapter.getChildren(elems);\n}\nfunction appendNextSiblings(elem, adapter) {\n  // Order matters because jQuery seems to check the children before the siblings\n  const elems = Array.isArray(elem) ? elem.slice(0) : [elem];\n  const elemsLength = elems.length;\n  for (let i = 0; i < elemsLength; i++) {\n    const nextSiblings = getNextSiblings(elems[i], adapter);\n    elems.push(...nextSiblings);\n  }\n  return elems;\n}\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried..\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns All matching elements.\n *\n */\nconst selectAll = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 ? [] : options.adapter.findAll(query, elems));\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried..\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns the first match, or null if there was no match.\n */\nconst selectOne = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 ? null : options.adapter.findOne(query, elems));\nvar CharCodes;\n(function (CharCodes) {\n  CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n  CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n  CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n  CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n  CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n  CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n  CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n  CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n  CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n  CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n  CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n  CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n  CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n  CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n  CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n  CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n  CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n  CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n  CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n  CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n  CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n  CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n  CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n  CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n  CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n  CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n  CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n  State[State[\"Text\"] = 1] = \"Text\";\n  State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n  State[State[\"InTagName\"] = 3] = \"InTagName\";\n  State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n  State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n  State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n  State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n  // Attributes\n  State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n  State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n  State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n  State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n  State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n  State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n  State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n  // Declarations\n  State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n  State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n  // Processing instructions\n  State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n  // Comments & CDATA\n  State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n  State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n  State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n  State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n  // Special tags\n  State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n  State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n  State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n  State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n  State[State[\"InEntity\"] = 26] = \"InEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n  return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;\n}\nfunction isEndOfTagSection(c) {\n  return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n  return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;\n}\nvar QuoteType;\n(function (QuoteType) {\n  QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n  QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n  QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n  QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType || (QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n  Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]),\n  // CDATA[\n  CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]),\n  // ]]>\n  CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]),\n  // `-->`\n  ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]),\n  // `</script`\n  StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]),\n  // `</style`\n  TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]),\n  // `</title`\n  TextareaEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61]) // `</textarea`\n};\nclass Tokenizer {\n  constructor({\n    xmlMode = false,\n    decodeEntities = true\n  }, cbs) {\n    this.cbs = cbs;\n    /** The current state the tokenizer is in. */\n    this.state = State.Text;\n    /** The read buffer. */\n    this.buffer = \"\";\n    /** The beginning of the section that is currently being read. */\n    this.sectionStart = 0;\n    /** The index within the buffer that we are currently looking at. */\n    this.index = 0;\n    /** The start of the last entity. */\n    this.entityStart = 0;\n    /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n    this.baseState = State.Text;\n    /** For special parsing behavior inside of script and style tags. */\n    this.isSpecial = false;\n    /** Indicates whether the tokenizer has been paused. */\n    this.running = true;\n    /** The offset of the current buffer. */\n    this.offset = 0;\n    this.currentSequence = undefined;\n    this.sequenceIndex = 0;\n    this.xmlMode = xmlMode;\n    this.decodeEntities = decodeEntities;\n    this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n  }\n  reset() {\n    this.state = State.Text;\n    this.buffer = \"\";\n    this.sectionStart = 0;\n    this.index = 0;\n    this.baseState = State.Text;\n    this.currentSequence = undefined;\n    this.running = true;\n    this.offset = 0;\n  }\n  write(chunk) {\n    this.offset += this.buffer.length;\n    this.buffer = chunk;\n    this.parse();\n  }\n  end() {\n    if (this.running) this.finish();\n  }\n  pause() {\n    this.running = false;\n  }\n  resume() {\n    this.running = true;\n    if (this.index < this.buffer.length + this.offset) {\n      this.parse();\n    }\n  }\n  stateText(c) {\n    if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) {\n      if (this.index > this.sectionStart) {\n        this.cbs.ontext(this.sectionStart, this.index);\n      }\n      this.state = State.BeforeTagName;\n      this.sectionStart = this.index;\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateSpecialStartSequence(c) {\n    const isEnd = this.sequenceIndex === this.currentSequence.length;\n    const isMatch = isEnd ?\n    // If we are at the end of the sequence, make sure the tag name has ended\n    isEndOfTagSection(c) :\n    // Otherwise, do a case-insensitive comparison\n    (c | 0x20) === this.currentSequence[this.sequenceIndex];\n    if (!isMatch) {\n      this.isSpecial = false;\n    } else if (!isEnd) {\n      this.sequenceIndex++;\n      return;\n    }\n    this.sequenceIndex = 0;\n    this.state = State.InTagName;\n    this.stateInTagName(c);\n  }\n  /** Look for an end tag. For <title> tags, also decode entities. */\n  stateInSpecialTag(c) {\n    if (this.sequenceIndex === this.currentSequence.length) {\n      if (c === CharCodes.Gt || isWhitespace(c)) {\n        const endOfText = this.index - this.currentSequence.length;\n        if (this.sectionStart < endOfText) {\n          // Spoof the index so that reported locations match up.\n          const actualIndex = this.index;\n          this.index = endOfText;\n          this.cbs.ontext(this.sectionStart, endOfText);\n          this.index = actualIndex;\n        }\n        this.isSpecial = false;\n        this.sectionStart = endOfText + 2; // Skip over the `</`\n        this.stateInClosingTagName(c);\n        return; // We are done; skip the rest of the function.\n      }\n      this.sequenceIndex = 0;\n    }\n    if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n      this.sequenceIndex += 1;\n    } else if (this.sequenceIndex === 0) {\n      if (this.currentSequence === Sequences.TitleEnd) {\n        // We have to parse entities in <title> tags.\n        if (this.decodeEntities && c === CharCodes.Amp) {\n          this.startEntity();\n        }\n      } else if (this.fastForwardTo(CharCodes.Lt)) {\n        // Outside of <title> tags, we can fast-forward.\n        this.sequenceIndex = 1;\n      }\n    } else {\n      // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n      this.sequenceIndex = Number(c === CharCodes.Lt);\n    }\n  }\n  stateCDATASequence(c) {\n    if (c === Sequences.Cdata[this.sequenceIndex]) {\n      if (++this.sequenceIndex === Sequences.Cdata.length) {\n        this.state = State.InCommentLike;\n        this.currentSequence = Sequences.CdataEnd;\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n      }\n    } else {\n      this.sequenceIndex = 0;\n      this.state = State.InDeclaration;\n      this.stateInDeclaration(c); // Reconsume the character\n    }\n  }\n  /**\n   * When we wait for one specific character, we can speed things up\n   * by skipping through the buffer until we find it.\n   *\n   * @returns Whether the character was found.\n   */\n  fastForwardTo(c) {\n    while (++this.index < this.buffer.length + this.offset) {\n      if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n        return true;\n      }\n    }\n    /*\n     * We increment the index at the end of the `parse` loop,\n     * so set it to `buffer.length - 1` here.\n     *\n     * TODO: Refactor `parse` to increment index before calling states.\n     */\n    this.index = this.buffer.length + this.offset - 1;\n    return false;\n  }\n  /**\n   * Comments and CDATA end with `-->` and `]]>`.\n   *\n   * Their common qualities are:\n   * - Their end sequences have a distinct character they start with.\n   * - That character is then repeated, so we have to check multiple repeats.\n   * - All characters but the start character of the sequence can be skipped.\n   */\n  stateInCommentLike(c) {\n    if (c === this.currentSequence[this.sequenceIndex]) {\n      if (++this.sequenceIndex === this.currentSequence.length) {\n        if (this.currentSequence === Sequences.CdataEnd) {\n          this.cbs.oncdata(this.sectionStart, this.index, 2);\n        } else {\n          this.cbs.oncomment(this.sectionStart, this.index, 2);\n        }\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n        this.state = State.Text;\n      }\n    } else if (this.sequenceIndex === 0) {\n      // Fast-forward to the first character of the sequence\n      if (this.fastForwardTo(this.currentSequence[0])) {\n        this.sequenceIndex = 1;\n      }\n    } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n      // Allow long sequences, eg. --->, ]]]>\n      this.sequenceIndex = 0;\n    }\n  }\n  /**\n   * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n   *\n   * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n   * We allow anything that wouldn't end the tag.\n   */\n  isTagStartChar(c) {\n    return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n  }\n  startSpecial(sequence, offset) {\n    this.isSpecial = true;\n    this.currentSequence = sequence;\n    this.sequenceIndex = offset;\n    this.state = State.SpecialStartSequence;\n  }\n  stateBeforeTagName(c) {\n    if (c === CharCodes.ExclamationMark) {\n      this.state = State.BeforeDeclaration;\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.Questionmark) {\n      this.state = State.InProcessingInstruction;\n      this.sectionStart = this.index + 1;\n    } else if (this.isTagStartChar(c)) {\n      const lower = c | 0x20;\n      this.sectionStart = this.index;\n      if (this.xmlMode) {\n        this.state = State.InTagName;\n      } else if (lower === Sequences.ScriptEnd[2]) {\n        this.state = State.BeforeSpecialS;\n      } else if (lower === Sequences.TitleEnd[2]) {\n        this.state = State.BeforeSpecialT;\n      } else {\n        this.state = State.InTagName;\n      }\n    } else if (c === CharCodes.Slash) {\n      this.state = State.BeforeClosingTagName;\n    } else {\n      this.state = State.Text;\n      this.stateText(c);\n    }\n  }\n  stateInTagName(c) {\n    if (isEndOfTagSection(c)) {\n      this.cbs.onopentagname(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    }\n  }\n  stateBeforeClosingTagName(c) {\n    if (isWhitespace(c)) ;else if (c === CharCodes.Gt) {\n      this.state = State.Text;\n    } else {\n      this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInClosingTagName(c) {\n    if (c === CharCodes.Gt || isWhitespace(c)) {\n      this.cbs.onclosetag(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = State.AfterClosingTagName;\n      this.stateAfterClosingTagName(c);\n    }\n  }\n  stateAfterClosingTagName(c) {\n    // Skip everything until \">\"\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeAttributeName(c) {\n    if (c === CharCodes.Gt) {\n      this.cbs.onopentagend(this.index);\n      if (this.isSpecial) {\n        this.state = State.InSpecialTag;\n        this.sequenceIndex = 0;\n      } else {\n        this.state = State.Text;\n      }\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.Slash) {\n      this.state = State.InSelfClosingTag;\n    } else if (!isWhitespace(c)) {\n      this.state = State.InAttributeName;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInSelfClosingTag(c) {\n    if (c === CharCodes.Gt) {\n      this.cbs.onselfclosingtag(this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n      this.isSpecial = false; // Reset special state, in case of self-closing special tags\n    } else if (!isWhitespace(c)) {\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    }\n  }\n  stateInAttributeName(c) {\n    if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n      this.cbs.onattribname(this.sectionStart, this.index);\n      this.sectionStart = this.index;\n      this.state = State.AfterAttributeName;\n      this.stateAfterAttributeName(c);\n    }\n  }\n  stateAfterAttributeName(c) {\n    if (c === CharCodes.Eq) {\n      this.state = State.BeforeAttributeValue;\n    } else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n      this.sectionStart = -1;\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    } else if (!isWhitespace(c)) {\n      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n      this.state = State.InAttributeName;\n      this.sectionStart = this.index;\n    }\n  }\n  stateBeforeAttributeValue(c) {\n    if (c === CharCodes.DoubleQuote) {\n      this.state = State.InAttributeValueDq;\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.SingleQuote) {\n      this.state = State.InAttributeValueSq;\n      this.sectionStart = this.index + 1;\n    } else if (!isWhitespace(c)) {\n      this.sectionStart = this.index;\n      this.state = State.InAttributeValueNq;\n      this.stateInAttributeValueNoQuotes(c); // Reconsume token\n    }\n  }\n  handleInAttributeValue(c, quote) {\n    if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);\n      this.state = State.BeforeAttributeName;\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateInAttributeValueDoubleQuotes(c) {\n    this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n  }\n  stateInAttributeValueSingleQuotes(c) {\n    this.handleInAttributeValue(c, CharCodes.SingleQuote);\n  }\n  stateInAttributeValueNoQuotes(c) {\n    if (isWhitespace(c) || c === CharCodes.Gt) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(QuoteType.Unquoted, this.index);\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateBeforeDeclaration(c) {\n    if (c === CharCodes.OpeningSquareBracket) {\n      this.state = State.CDATASequence;\n      this.sequenceIndex = 0;\n    } else {\n      this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;\n    }\n  }\n  stateInDeclaration(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.ondeclaration(this.sectionStart, this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInProcessingInstruction(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeComment(c) {\n    if (c === CharCodes.Dash) {\n      this.state = State.InCommentLike;\n      this.currentSequence = Sequences.CommentEnd;\n      // Allow short comments (eg. <!-->)\n      this.sequenceIndex = 2;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = State.InDeclaration;\n    }\n  }\n  stateInSpecialComment(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.oncomment(this.sectionStart, this.index, 0);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeSpecialS(c) {\n    const lower = c | 0x20;\n    if (lower === Sequences.ScriptEnd[3]) {\n      this.startSpecial(Sequences.ScriptEnd, 4);\n    } else if (lower === Sequences.StyleEnd[3]) {\n      this.startSpecial(Sequences.StyleEnd, 4);\n    } else {\n      this.state = State.InTagName;\n      this.stateInTagName(c); // Consume the token again\n    }\n  }\n  stateBeforeSpecialT(c) {\n    const lower = c | 0x20;\n    if (lower === Sequences.TitleEnd[3]) {\n      this.startSpecial(Sequences.TitleEnd, 4);\n    } else if (lower === Sequences.TextareaEnd[3]) {\n      this.startSpecial(Sequences.TextareaEnd, 4);\n    } else {\n      this.state = State.InTagName;\n      this.stateInTagName(c); // Consume the token again\n    }\n  }\n  startEntity() {\n    this.baseState = this.state;\n    this.state = State.InEntity;\n    this.entityStart = this.index;\n    this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);\n  }\n  stateInEntity() {\n    const length = this.entityDecoder.write(this.buffer, this.index - this.offset);\n    // If `length` is positive, we are done with the entity.\n    if (length >= 0) {\n      this.state = this.baseState;\n      if (length === 0) {\n        this.index = this.entityStart;\n      }\n    } else {\n      // Mark buffer as consumed.\n      this.index = this.offset + this.buffer.length - 1;\n    }\n  }\n  /**\n   * Remove data that has already been consumed from the buffer.\n   */\n  cleanup() {\n    // If we are inside of text or attributes, emit what we already have.\n    if (this.running && this.sectionStart !== this.index) {\n      if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {\n        this.cbs.ontext(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {\n        this.cbs.onattribdata(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      }\n    }\n  }\n  shouldContinue() {\n    return this.index < this.buffer.length + this.offset && this.running;\n  }\n  /**\n   * Iterates through the buffer, calling the function corresponding to the current state.\n   *\n   * States that are more likely to be hit are higher up, as a performance improvement.\n   */\n  parse() {\n    while (this.shouldContinue()) {\n      const c = this.buffer.charCodeAt(this.index - this.offset);\n      switch (this.state) {\n        case State.Text:\n          {\n            this.stateText(c);\n            break;\n          }\n        case State.SpecialStartSequence:\n          {\n            this.stateSpecialStartSequence(c);\n            break;\n          }\n        case State.InSpecialTag:\n          {\n            this.stateInSpecialTag(c);\n            break;\n          }\n        case State.CDATASequence:\n          {\n            this.stateCDATASequence(c);\n            break;\n          }\n        case State.InAttributeValueDq:\n          {\n            this.stateInAttributeValueDoubleQuotes(c);\n            break;\n          }\n        case State.InAttributeName:\n          {\n            this.stateInAttributeName(c);\n            break;\n          }\n        case State.InCommentLike:\n          {\n            this.stateInCommentLike(c);\n            break;\n          }\n        case State.InSpecialComment:\n          {\n            this.stateInSpecialComment(c);\n            break;\n          }\n        case State.BeforeAttributeName:\n          {\n            this.stateBeforeAttributeName(c);\n            break;\n          }\n        case State.InTagName:\n          {\n            this.stateInTagName(c);\n            break;\n          }\n        case State.InClosingTagName:\n          {\n            this.stateInClosingTagName(c);\n            break;\n          }\n        case State.BeforeTagName:\n          {\n            this.stateBeforeTagName(c);\n            break;\n          }\n        case State.AfterAttributeName:\n          {\n            this.stateAfterAttributeName(c);\n            break;\n          }\n        case State.InAttributeValueSq:\n          {\n            this.stateInAttributeValueSingleQuotes(c);\n            break;\n          }\n        case State.BeforeAttributeValue:\n          {\n            this.stateBeforeAttributeValue(c);\n            break;\n          }\n        case State.BeforeClosingTagName:\n          {\n            this.stateBeforeClosingTagName(c);\n            break;\n          }\n        case State.AfterClosingTagName:\n          {\n            this.stateAfterClosingTagName(c);\n            break;\n          }\n        case State.BeforeSpecialS:\n          {\n            this.stateBeforeSpecialS(c);\n            break;\n          }\n        case State.BeforeSpecialT:\n          {\n            this.stateBeforeSpecialT(c);\n            break;\n          }\n        case State.InAttributeValueNq:\n          {\n            this.stateInAttributeValueNoQuotes(c);\n            break;\n          }\n        case State.InSelfClosingTag:\n          {\n            this.stateInSelfClosingTag(c);\n            break;\n          }\n        case State.InDeclaration:\n          {\n            this.stateInDeclaration(c);\n            break;\n          }\n        case State.BeforeDeclaration:\n          {\n            this.stateBeforeDeclaration(c);\n            break;\n          }\n        case State.BeforeComment:\n          {\n            this.stateBeforeComment(c);\n            break;\n          }\n        case State.InProcessingInstruction:\n          {\n            this.stateInProcessingInstruction(c);\n            break;\n          }\n        case State.InEntity:\n          {\n            this.stateInEntity();\n            break;\n          }\n      }\n      this.index++;\n    }\n    this.cleanup();\n  }\n  finish() {\n    if (this.state === State.InEntity) {\n      this.entityDecoder.end();\n      this.state = this.baseState;\n    }\n    this.handleTrailingData();\n    this.cbs.onend();\n  }\n  /** Handle any trailing data. */\n  handleTrailingData() {\n    const endIndex = this.buffer.length + this.offset;\n    // If there is no remaining data, we are done.\n    if (this.sectionStart >= endIndex) {\n      return;\n    }\n    if (this.state === State.InCommentLike) {\n      if (this.currentSequence === Sequences.CdataEnd) {\n        this.cbs.oncdata(this.sectionStart, endIndex, 0);\n      } else {\n        this.cbs.oncomment(this.sectionStart, endIndex, 0);\n      }\n    } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) ;else {\n      this.cbs.ontext(this.sectionStart, endIndex);\n    }\n  }\n  emitCodePoint(cp, consumed) {\n    if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {\n      if (this.sectionStart < this.entityStart) {\n        this.cbs.onattribdata(this.sectionStart, this.entityStart);\n      }\n      this.sectionStart = this.entityStart + consumed;\n      this.index = this.sectionStart - 1;\n      this.cbs.onattribentity(cp);\n    } else {\n      if (this.sectionStart < this.entityStart) {\n        this.cbs.ontext(this.sectionStart, this.entityStart);\n      }\n      this.sectionStart = this.entityStart + consumed;\n      this.index = this.sectionStart - 1;\n      this.cbs.ontextentity(cp, this.sectionStart);\n    }\n  }\n}\nconst formTags = new Set([\"input\", \"option\", \"optgroup\", \"select\", \"button\", \"datalist\", \"textarea\"]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = new Map([[\"tr\", new Set([\"tr\", \"th\", \"td\"])], [\"th\", new Set([\"th\"])], [\"td\", new Set([\"thead\", \"th\", \"td\"])], [\"body\", new Set([\"head\", \"link\", \"script\"])], [\"li\", new Set([\"li\"])], [\"p\", pTag], [\"h1\", pTag], [\"h2\", pTag], [\"h3\", pTag], [\"h4\", pTag], [\"h5\", pTag], [\"h6\", pTag], [\"select\", formTags], [\"input\", formTags], [\"output\", formTags], [\"button\", formTags], [\"datalist\", formTags], [\"textarea\", formTags], [\"option\", new Set([\"option\"])], [\"optgroup\", new Set([\"optgroup\", \"option\"])], [\"dd\", ddtTags], [\"dt\", ddtTags], [\"address\", pTag], [\"article\", pTag], [\"aside\", pTag], [\"blockquote\", pTag], [\"details\", pTag], [\"div\", pTag], [\"dl\", pTag], [\"fieldset\", pTag], [\"figcaption\", pTag], [\"figure\", pTag], [\"footer\", pTag], [\"form\", pTag], [\"header\", pTag], [\"hr\", pTag], [\"main\", pTag], [\"nav\", pTag], [\"ol\", pTag], [\"pre\", pTag], [\"section\", pTag], [\"table\", pTag], [\"ul\", pTag], [\"rt\", rtpTags], [\"rp\", rtpTags], [\"tbody\", tableSectionTags], [\"tfoot\", tableSectionTags]]);\nconst voidElements = new Set([\"area\", \"base\", \"basefont\", \"br\", \"col\", \"command\", \"embed\", \"frame\", \"hr\", \"img\", \"input\", \"isindex\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = new Set([\"mi\", \"mo\", \"mn\", \"ms\", \"mtext\", \"annotation-xml\", \"foreignobject\", \"desc\", \"title\"]);\nconst reNameEnd = /\\s|\\//;\nclass Parser {\n  constructor(cbs, options = {}) {\n    var _a, _b, _c, _d, _e, _f;\n    this.options = options;\n    /** The start index of the last event. */\n    this.startIndex = 0;\n    /** The end index of the last event. */\n    this.endIndex = 0;\n    /**\n     * Store the start index of the current open tag,\n     * so we can update the start index for attributes.\n     */\n    this.openTagStart = 0;\n    this.tagname = \"\";\n    this.attribname = \"\";\n    this.attribvalue = \"\";\n    this.attribs = null;\n    this.stack = [];\n    this.buffers = [];\n    this.bufferOffset = 0;\n    /** The index of the last written buffer. Used when resuming after a `pause()`. */\n    this.writeIndex = 0;\n    /** Indicates whether the parser has finished running / `.end` has been called. */\n    this.ended = false;\n    this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n    this.htmlMode = !this.options.xmlMode;\n    this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n    this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n    this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n    this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n    this.foreignContext = [!this.htmlMode];\n    (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n  }\n  // Tokenizer event handlers\n  /** @internal */\n  ontext(start, endIndex) {\n    var _a, _b;\n    const data = this.getSlice(start, endIndex);\n    this.endIndex = endIndex - 1;\n    (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n    this.startIndex = endIndex;\n  }\n  /** @internal */\n  ontextentity(cp, endIndex) {\n    var _a, _b;\n    this.endIndex = endIndex - 1;\n    (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n    this.startIndex = endIndex;\n  }\n  /**\n   * Checks if the current tag is a void element. Override this if you want\n   * to specify your own additional void elements.\n   */\n  isVoidElement(name) {\n    return this.htmlMode && voidElements.has(name);\n  }\n  /** @internal */\n  onopentagname(start, endIndex) {\n    this.endIndex = endIndex;\n    let name = this.getSlice(start, endIndex);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    this.emitOpenTag(name);\n  }\n  emitOpenTag(name) {\n    var _a, _b, _c, _d;\n    this.openTagStart = this.startIndex;\n    this.tagname = name;\n    const impliesClose = this.htmlMode && openImpliesClose.get(name);\n    if (impliesClose) {\n      while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n        const element = this.stack.shift();\n        (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n      }\n    }\n    if (!this.isVoidElement(name)) {\n      this.stack.unshift(name);\n      if (this.htmlMode) {\n        if (foreignContextElements.has(name)) {\n          this.foreignContext.unshift(true);\n        } else if (htmlIntegrationElements.has(name)) {\n          this.foreignContext.unshift(false);\n        }\n      }\n    }\n    (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n    if (this.cbs.onopentag) this.attribs = {};\n  }\n  endOpenTag(isImplied) {\n    var _a, _b;\n    this.startIndex = this.openTagStart;\n    if (this.attribs) {\n      (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n      this.attribs = null;\n    }\n    if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n      this.cbs.onclosetag(this.tagname, true);\n    }\n    this.tagname = \"\";\n  }\n  /** @internal */\n  onopentagend(endIndex) {\n    this.endIndex = endIndex;\n    this.endOpenTag(false);\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onclosetag(start, endIndex) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    this.endIndex = endIndex;\n    let name = this.getSlice(start, endIndex);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {\n      this.foreignContext.shift();\n    }\n    if (!this.isVoidElement(name)) {\n      const pos = this.stack.indexOf(name);\n      if (pos !== -1) {\n        for (let index = 0; index <= pos; index++) {\n          const element = this.stack.shift();\n          // We know the stack has sufficient elements.\n          (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n        }\n      } else if (this.htmlMode && name === \"p\") {\n        // Implicit open before close\n        this.emitOpenTag(\"p\");\n        this.closeCurrentTag(true);\n      }\n    } else if (this.htmlMode && name === \"br\") {\n      // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n      (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n      (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n      (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onselfclosingtag(endIndex) {\n    this.endIndex = endIndex;\n    if (this.recognizeSelfClosing || this.foreignContext[0]) {\n      this.closeCurrentTag(false);\n      // Set `startIndex` for next node\n      this.startIndex = endIndex + 1;\n    } else {\n      // Ignore the fact that the tag is self-closing.\n      this.onopentagend(endIndex);\n    }\n  }\n  closeCurrentTag(isOpenImplied) {\n    var _a, _b;\n    const name = this.tagname;\n    this.endOpenTag(isOpenImplied);\n    // Self-closing tags will be on the top of the stack\n    if (this.stack[0] === name) {\n      // If the opening tag isn't implied, the closing tag has to be implied.\n      (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n      this.stack.shift();\n    }\n  }\n  /** @internal */\n  onattribname(start, endIndex) {\n    this.startIndex = start;\n    const name = this.getSlice(start, endIndex);\n    this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;\n  }\n  /** @internal */\n  onattribdata(start, endIndex) {\n    this.attribvalue += this.getSlice(start, endIndex);\n  }\n  /** @internal */\n  onattribentity(cp) {\n    this.attribvalue += fromCodePoint(cp);\n  }\n  /** @internal */\n  onattribend(quote, endIndex) {\n    var _a, _b;\n    this.endIndex = endIndex;\n    (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double ? '\"' : quote === QuoteType.Single ? \"'\" : quote === QuoteType.NoValue ? undefined : null);\n    if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n      this.attribs[this.attribname] = this.attribvalue;\n    }\n    this.attribvalue = \"\";\n  }\n  getInstructionName(value) {\n    const index = value.search(reNameEnd);\n    let name = index < 0 ? value : value.substr(0, index);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    return name;\n  }\n  /** @internal */\n  ondeclaration(start, endIndex) {\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex);\n    if (this.cbs.onprocessinginstruction) {\n      const name = this.getInstructionName(value);\n      this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onprocessinginstruction(start, endIndex) {\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex);\n    if (this.cbs.onprocessinginstruction) {\n      const name = this.getInstructionName(value);\n      this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  oncomment(start, endIndex, offset) {\n    var _a, _b, _c, _d;\n    this.endIndex = endIndex;\n    (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n    (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  oncdata(start, endIndex, offset) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex - offset);\n    if (!this.htmlMode || this.options.recognizeCDATA) {\n      (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n      (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n      (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n    } else {\n      (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n      (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onend() {\n    var _a, _b;\n    if (this.cbs.onclosetag) {\n      // Set the end index for all remaining tags\n      this.endIndex = this.startIndex;\n      for (let index = 0; index < this.stack.length; index++) {\n        this.cbs.onclosetag(this.stack[index], true);\n      }\n    }\n    (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n  }\n  /**\n   * Resets the parser to a blank state, ready to parse a new HTML document\n   */\n  reset() {\n    var _a, _b, _c, _d;\n    (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n    this.tokenizer.reset();\n    this.tagname = \"\";\n    this.attribname = \"\";\n    this.attribs = null;\n    this.stack.length = 0;\n    this.startIndex = 0;\n    this.endIndex = 0;\n    (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n    this.buffers.length = 0;\n    this.foreignContext.length = 0;\n    this.foreignContext.unshift(!this.htmlMode);\n    this.bufferOffset = 0;\n    this.writeIndex = 0;\n    this.ended = false;\n  }\n  /**\n   * Resets the parser, then parses a complete document and\n   * pushes it to the handler.\n   *\n   * @param data Document to parse.\n   */\n  parseComplete(data) {\n    this.reset();\n    this.end(data);\n  }\n  getSlice(start, end) {\n    while (start - this.bufferOffset >= this.buffers[0].length) {\n      this.shiftBuffer();\n    }\n    let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n    while (end - this.bufferOffset > this.buffers[0].length) {\n      this.shiftBuffer();\n      slice += this.buffers[0].slice(0, end - this.bufferOffset);\n    }\n    return slice;\n  }\n  shiftBuffer() {\n    this.bufferOffset += this.buffers[0].length;\n    this.writeIndex--;\n    this.buffers.shift();\n  }\n  /**\n   * Parses a chunk of data and calls the corresponding callbacks.\n   *\n   * @param chunk Chunk to parse.\n   */\n  write(chunk) {\n    var _a, _b;\n    if (this.ended) {\n      (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n      return;\n    }\n    this.buffers.push(chunk);\n    if (this.tokenizer.running) {\n      this.tokenizer.write(chunk);\n      this.writeIndex++;\n    }\n  }\n  /**\n   * Parses the end of the buffer and clears the stack, calls onend.\n   *\n   * @param chunk Optional final chunk to parse.\n   */\n  end(chunk) {\n    var _a, _b;\n    if (this.ended) {\n      (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n      return;\n    }\n    if (chunk) this.write(chunk);\n    this.ended = true;\n    this.tokenizer.end();\n  }\n  /**\n   * Pauses parsing. The parser won't emit events until `resume` is called.\n   */\n  pause() {\n    this.tokenizer.pause();\n  }\n  /**\n   * Resumes parsing after `pause` was called.\n   */\n  resume() {\n    this.tokenizer.resume();\n    while (this.tokenizer.running && this.writeIndex < this.buffers.length) {\n      this.tokenizer.write(this.buffers[this.writeIndex++]);\n    }\n    if (this.ended) this.tokenizer.end();\n  }\n  /**\n   * Alias of `write`, for backwards compatibility.\n   *\n   * @param chunk Chunk to parse.\n   * @deprecated\n   */\n  parseChunk(chunk) {\n    this.write(chunk);\n  }\n  /**\n   * Alias of `end`, for backwards compatibility.\n   *\n   * @param chunk Optional final chunk to parse.\n   * @deprecated\n   */\n  done(chunk) {\n    this.end(chunk);\n  }\n}\n\n// Helper methods\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n */\nfunction parseDocument(data, options) {\n  const handler = new DomHandler(undefined, options);\n  new Parser(handler, options).end(data);\n  return handler.root;\n}\nvar picocolors_browserExports = requirePicocolors_browser();\nvar pc = /*@__PURE__*/getDefaultExportFromCjs(picocolors_browserExports);\nfunction parseStylesheet(stylesheet) {\n  return parse$2(stylesheet);\n}\nfunction serializeStylesheet(ast, options) {\n  let cssStr = \"\";\n  stringify(ast, (result, node, type) => {\n    if (node?.type === \"decl\" && node.value.includes(\"</style>\")) {\n      return;\n    }\n    if (!options.compress) {\n      cssStr += result;\n      return;\n    }\n    if (node?.type === \"comment\") return;\n    if (node?.type === \"decl\") {\n      const prefix = node.prop + node.raws.between;\n      cssStr += result.replace(prefix, prefix.trim());\n      return;\n    }\n    if (type === \"start\") {\n      if (node?.type === \"rule\" && node.selectors) {\n        cssStr += `${node.selectors.join(\",\")}{`;\n      } else {\n        cssStr += result.replace(/\\s\\{$/, \"{\");\n      }\n      return;\n    }\n    if (type === \"end\" && result === \"}\" && node?.raws?.semicolon) {\n      cssStr = cssStr.slice(0, -1);\n    }\n    cssStr += result.trim();\n  });\n  return cssStr;\n}\nfunction markOnly(predicate) {\n  return rule => {\n    const sel = \"selectors\" in rule ? rule.selectors : void 0;\n    if (predicate(rule) === false) {\n      rule.$$remove = true;\n    }\n    if (\"selectors\" in rule) {\n      rule.$$markedSelectors = rule.selectors;\n      rule.selectors = sel;\n    }\n    if (rule._other) {\n      rule._other.$$markedSelectors = rule._other.selectors;\n    }\n  };\n}\nfunction applyMarkedSelectors(rule) {\n  if (rule.$$markedSelectors) {\n    rule.selectors = rule.$$markedSelectors;\n  }\n  if (rule._other) {\n    applyMarkedSelectors(rule._other);\n  }\n}\nfunction walkStyleRules(node, iterator) {\n  if (!(\"nodes\" in node)) {\n    return;\n  }\n  node.nodes = node.nodes?.filter(rule => {\n    if (hasNestedRules(rule)) {\n      walkStyleRules(rule, iterator);\n    }\n    rule._other = void 0;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\nfunction walkStyleRulesWithReverseMirror(node, node2, iterator) {\n  if (!node2) return walkStyleRules(node, iterator);\n  [node.nodes, node2.nodes] = splitFilter(node.nodes, node2.nodes, (rule, index, _rules, rules2) => {\n    const rule2 = rules2?.[index];\n    if (hasNestedRules(rule)) {\n      walkStyleRulesWithReverseMirror(rule, rule2, iterator);\n    }\n    rule._other = rule2;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\nfunction hasNestedRules(rule) {\n  return \"nodes\" in rule && !!rule.nodes?.length && (!(\"name\" in rule) || rule.name !== \"keyframes\" && rule.name !== \"-webkit-keyframes\") && rule.nodes.some(n => n.type === \"rule\" || n.type === \"atrule\");\n}\nfunction splitFilter(a, b, predicate) {\n  const aOut = [];\n  const bOut = [];\n  for (let index = 0; index < a.length; index++) {\n    const item = a[index];\n    if (predicate(item, index, a, b)) {\n      aOut.push(item);\n    } else {\n      bOut.push(item);\n    }\n  }\n  return [aOut, bOut];\n}\nfunction filterSelectors(predicate) {\n  if (this._other) {\n    const [a, b] = splitFilter(this.selectors, this._other.selectors, predicate);\n    this.selectors = a;\n    this._other.selectors = b;\n  } else {\n    this.selectors = this.selectors.filter(predicate);\n  }\n}\nconst MEDIA_TYPES = /* @__PURE__ */new Set([\"all\", \"print\", \"screen\", \"speech\"]);\nconst MEDIA_KEYWORDS = /* @__PURE__ */new Set([\"and\", \"not\", \",\"]);\nconst MEDIA_FEATURES = new Set([\"width\", \"aspect-ratio\", \"color\", \"color-index\", \"grid\", \"height\", \"monochrome\", \"orientation\", \"resolution\", \"scan\"].flatMap(feature => [feature, `min-${feature}`, `max-${feature}`]));\nfunction validateMediaType(node) {\n  const {\n    type: nodeType,\n    value: nodeValue\n  } = node;\n  if (nodeType === \"media-type\") {\n    return MEDIA_TYPES.has(nodeValue);\n  } else if (nodeType === \"keyword\") {\n    return MEDIA_KEYWORDS.has(nodeValue);\n  } else if (nodeType === \"media-feature\") {\n    return MEDIA_FEATURES.has(nodeValue);\n  }\n}\nfunction validateMediaQuery(query) {\n  const mediaParserFn = \"default\" in mediaParser ? mediaParser.default : mediaParser;\n  const mediaTree = mediaParserFn(query);\n  const nodeTypes = /* @__PURE__ */new Set([\"media-type\", \"keyword\", \"media-feature\"]);\n  const stack = [mediaTree];\n  while (stack.length > 0) {\n    const node = stack.pop();\n    if (nodeTypes.has(node.type) && !validateMediaType(node)) {\n      return false;\n    }\n    if (node.nodes) {\n      stack.push(...node.nodes);\n    }\n  }\n  return true;\n}\nlet classCache = null;\nlet idCache = null;\nfunction buildCache(container) {\n  classCache = /* @__PURE__ */new Set();\n  idCache = /* @__PURE__ */new Set();\n  const queue = [container];\n  while (queue.length) {\n    const node = queue.shift();\n    if (node.hasAttribute?.(\"class\")) {\n      const classList = node.getAttribute(\"class\").trim().split(\" \");\n      classList.forEach(cls => {\n        classCache.add(cls);\n      });\n    }\n    if (node.hasAttribute?.(\"id\")) {\n      const id = node.getAttribute(\"id\").trim();\n      idCache.add(id);\n    }\n    if (\"children\" in node) {\n      queue.push(...node.children.filter(child => child.type === \"tag\"));\n    }\n  }\n}\nfunction createDocument(html) {\n  const document = parseDocument(html, {\n    decodeEntities: false\n  });\n  extendDocument(document);\n  extendElement(Element.prototype);\n  let beastiesContainer = document.querySelector(\"[data-beasties-container]\");\n  if (!beastiesContainer) {\n    document.documentElement?.setAttribute(\"data-beasties-container\", \"\");\n    beastiesContainer = document.documentElement || document;\n  }\n  document.beastiesContainer = beastiesContainer;\n  buildCache(beastiesContainer);\n  return document;\n}\nfunction serializeDocument(document) {\n  return render(document, {\n    decodeEntities: false\n  });\n}\nlet extended = false;\nfunction extendElement(element) {\n  if (extended) {\n    return;\n  }\n  extended = true;\n  Object.defineProperties(element, {\n    nodeName: {\n      get() {\n        return this.tagName.toUpperCase();\n      }\n    },\n    id: {\n      get() {\n        return this.getAttribute(\"id\");\n      },\n      set(value) {\n        this.setAttribue(\"id\", value);\n      }\n    },\n    className: {\n      get() {\n        return this.getAttribute(\"class\");\n      },\n      set(value) {\n        this.setAttribute(\"class\", value);\n      }\n    },\n    insertBefore: {\n      value(child, referenceNode) {\n        if (!referenceNode) return this.appendChild(child);\n        prepend(referenceNode, child);\n        return child;\n      }\n    },\n    appendChild: {\n      value(child) {\n        appendChild(this, child);\n        return child;\n      }\n    },\n    removeChild: {\n      value(child) {\n        removeElement(child);\n      }\n    },\n    remove: {\n      value() {\n        removeElement(this);\n      }\n    },\n    textContent: {\n      get() {\n        return getText(this);\n      },\n      set(text) {\n        this.children = [];\n        appendChild(this, new Text(text));\n      }\n    },\n    setAttribute: {\n      value(name, value) {\n        if (this.attribs == null) this.attribs = {};\n        if (value == null) value = \"\";\n        this.attribs[name] = value;\n      }\n    },\n    removeAttribute: {\n      value(name) {\n        if (this.attribs != null) {\n          delete this.attribs[name];\n        }\n      }\n    },\n    getAttribute: {\n      value(name) {\n        return this.attribs != null && this.attribs[name];\n      }\n    },\n    hasAttribute: {\n      value(name) {\n        return this.attribs != null && this.attribs[name] != null;\n      }\n    },\n    getAttributeNode: {\n      value(name) {\n        const value = this.getAttribute(name);\n        if (value != null) return {\n          specified: true,\n          value\n        };\n      }\n    },\n    exists: {\n      value(sel) {\n        return cachedQuerySelector(sel, this);\n      }\n    },\n    querySelector: {\n      value(sel) {\n        return selectOne(sel, this);\n      }\n    },\n    querySelectorAll: {\n      value(sel) {\n        return selectAll(sel, this);\n      }\n    }\n  });\n}\nfunction extendDocument(document) {\n  Object.defineProperties(document, {\n    // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.\n    // TODO: verify if these are needed for css-select\n    nodeType: {\n      get() {\n        return 9;\n      }\n    },\n    contentType: {\n      get() {\n        return \"text/html\";\n      }\n    },\n    nodeName: {\n      get() {\n        return \"#document\";\n      }\n    },\n    documentElement: {\n      get() {\n        return this.children.find(child => \"tagName\" in child && String(child.tagName).toLowerCase() === \"html\");\n      }\n    },\n    head: {\n      get() {\n        return this.querySelector(\"head\");\n      }\n    },\n    body: {\n      get() {\n        return this.querySelector(\"body\");\n      }\n    },\n    createElement: {\n      value(name) {\n        return new Element(name, {});\n      }\n    },\n    createTextNode: {\n      value(text) {\n        return new Text(text);\n      }\n    },\n    exists: {\n      value(sel) {\n        return cachedQuerySelector(sel, this);\n      }\n    },\n    querySelector: {\n      value(sel) {\n        return selectOne(sel, this);\n      }\n    },\n    querySelectorAll: {\n      value(sel) {\n        if (sel === \":root\") {\n          return this;\n        }\n        return selectAll(sel, this);\n      }\n    }\n  });\n}\nfunction cachedQuerySelector(sel, node) {\n  const selectorTokens = parse$1(sel);\n  for (const tokens of selectorTokens) {\n    if (tokens.length === 1) {\n      const token = tokens[0];\n      if (token.type === \"attribute\" && token.name === \"class\") {\n        return classCache.has(token.value);\n      }\n      if (token.type === \"attribute\" && token.name === \"id\") {\n        return idCache.has(token.value);\n      }\n    }\n  }\n  return !!selectOne(sel, node);\n}\nconst LOG_LEVELS = [\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"silent\"];\nconst defaultLogger = {\n  trace(msg) {\n    console.trace(msg);\n  },\n  debug(msg) {\n    console.debug(msg);\n  },\n  warn(msg) {\n    console.warn(pc.yellow(msg));\n  },\n  error(msg) {\n    console.error(pc.bold(pc.red(msg)));\n  },\n  info(msg) {\n    console.info(pc.bold(pc.blue(msg)));\n  },\n  silent() {}\n};\nfunction createLogger(logLevel) {\n  const logLevelIdx = LOG_LEVELS.indexOf(logLevel);\n  return LOG_LEVELS.reduce((logger, type, index) => {\n    if (index >= logLevelIdx) {\n      logger[type] = defaultLogger[type];\n    } else {\n      logger[type] = defaultLogger.silent;\n    }\n    return logger;\n  }, {});\n}\nfunction isSubpath(basePath, currentPath) {\n  return !_pathModule.relative(basePath, currentPath).startsWith(\"..\");\n}\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {\n  enumerable: true,\n  configurable: true,\n  writable: true,\n  value\n}) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Beasties {\n  constructor(options = {}) {\n    __publicField(this, \"options\");\n    __publicField(this, \"logger\");\n    __publicField(this, \"fs\");\n    this.options = Object.assign({\n      logLevel: \"info\",\n      path: \"\",\n      publicPath: \"\",\n      reduceInlineStyles: true,\n      pruneSource: false,\n      additionalStylesheets: [],\n      allowRules: []\n    }, options);\n    this.logger = this.options.logger || createLogger(this.options.logLevel);\n  }\n  /**\n   * Read the contents of a file from the specified filesystem or disk\n   */\n  readFile(filename) {\n    const fs = this.fs;\n    return new Promise((resolve, reject) => {\n      const callback = (err, data) => {\n        if (err) reject(err);else resolve(data.toString());\n      };\n      if (fs && fs.readFile) {\n        fs.readFile(filename, callback);\n      } else {\n        readFile(filename, \"utf-8\", callback);\n      }\n    });\n  }\n  /**\n   * Apply critical CSS processing to the html\n   */\n  async process(html) {\n    const start = Date.now();\n    const document = createDocument(html);\n    if (this.options.additionalStylesheets.length > 0) {\n      this.embedAdditionalStylesheet(document);\n    }\n    if (this.options.external !== false) {\n      const externalSheets = [].slice.call(document.querySelectorAll('link[rel=\"stylesheet\"]'));\n      await Promise.all(externalSheets.map(link => this.embedLinkedStylesheet(link, document)));\n    }\n    const styles = this.getAffectedStyleTags(document);\n    await Promise.all(styles.map(style => this.processStyle(style, document)));\n    if (this.options.mergeStylesheets !== false && styles.length !== 0) {\n      await this.mergeStylesheets(document);\n    }\n    const output = serializeDocument(document);\n    const end = Date.now();\n    this.logger.info?.(`Time ${end - start}ms`);\n    return output;\n  }\n  /**\n   * Get the style tags that need processing\n   */\n  getAffectedStyleTags(document) {\n    const styles = [...document.querySelectorAll(\"style\")];\n    if (this.options.reduceInlineStyles === false) {\n      return styles.filter(style => style.$$external);\n    }\n    return styles;\n  }\n  async mergeStylesheets(document) {\n    const styles = this.getAffectedStyleTags(document);\n    if (styles.length === 0) {\n      this.logger.warn?.(\"Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge\");\n      return;\n    }\n    const first = styles[0];\n    let sheet = first.textContent;\n    for (let i = 1; i < styles.length; i++) {\n      const node = styles[i];\n      sheet += node.textContent;\n      node.remove();\n    }\n    first.textContent = sheet;\n  }\n  /**\n   * Given href, find the corresponding CSS asset\n   */\n  async getCssAsset(href, _style) {\n    const outputPath = this.options.path;\n    const publicPath = this.options.publicPath;\n    let normalizedPath = href.replace(/^\\//, \"\");\n    const pathPrefix = `${(publicPath || \"\").replace(/(^\\/|\\/$)/g, \"\")}/`;\n    if (normalizedPath.startsWith(pathPrefix)) {\n      normalizedPath = normalizedPath.substring(pathPrefix.length).replace(/^\\//, \"\");\n    }\n    if (/^https?:\\/\\//.test(normalizedPath) || href.startsWith(\"//\")) {\n      return void 0;\n    }\n    const filename = _pathModule.resolve(outputPath, normalizedPath);\n    if (!isSubpath(outputPath, filename)) {\n      return void 0;\n    }\n    let sheet;\n    try {\n      sheet = await this.readFile(filename);\n    } catch {\n      this.logger.warn?.(`Unable to locate stylesheet: ${filename}`);\n    }\n    return sheet;\n  }\n  checkInlineThreshold(link, style, sheet) {\n    if (this.options.inlineThreshold && sheet.length < this.options.inlineThreshold) {\n      const href = style.$$name;\n      style.$$reduce = false;\n      this.logger.info?.(`\\x1B[32mInlined all of ${href} (${sheet.length} was below the threshold of ${this.options.inlineThreshold})\\x1B[39m`);\n      link.remove();\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Inline the stylesheets from options.additionalStylesheets (assuming it passes `options.filter`)\n   */\n  async embedAdditionalStylesheet(document) {\n    const styleSheetsIncluded = [];\n    const sources = await Promise.all(this.options.additionalStylesheets.map(cssFile => {\n      if (styleSheetsIncluded.includes(cssFile)) {\n        return [];\n      }\n      styleSheetsIncluded.push(cssFile);\n      const style = document.createElement(\"style\");\n      style.$$external = true;\n      return this.getCssAsset(cssFile, style).then(sheet => [sheet, style]);\n    }));\n    for (const [sheet, style] of sources) {\n      if (sheet) {\n        style.textContent = sheet;\n        document.head.appendChild(style);\n      }\n    }\n  }\n  /**\n   * Inline the target stylesheet referred to by a <link rel=\"stylesheet\"> (assuming it passes `options.filter`)\n   */\n  async embedLinkedStylesheet(link, document) {\n    const href = link.getAttribute(\"href\");\n    let media = link.getAttribute(\"media\");\n    if (media && !validateMediaQuery(media)) {\n      media = void 0;\n    }\n    const preloadMode = this.options.preload;\n    if (!href?.endsWith(\".css\")) {\n      return void 0;\n    }\n    const style = document.createElement(\"style\");\n    style.$$external = true;\n    const sheet = await this.getCssAsset(href, style);\n    if (!sheet) {\n      return;\n    }\n    style.textContent = sheet;\n    style.$$name = href;\n    style.$$links = [link];\n    link.parentNode?.insertBefore(style, link);\n    if (this.checkInlineThreshold(link, style, sheet)) {\n      return;\n    }\n    let cssLoaderPreamble = \"function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}\";\n    const lazy = preloadMode === \"js-lazy\";\n    if (lazy) {\n      cssLoaderPreamble = cssLoaderPreamble.replace(\"l.href\", \"l.media='print';l.onload=function(){l.media=m};l.href\");\n    }\n    if (preloadMode === false) return;\n    let noscriptFallback = false;\n    let updateLinkToPreload = false;\n    const noscriptLink = link.cloneNode(false);\n    if (preloadMode === \"body\") {\n      document.body.appendChild(link);\n    } else {\n      if (preloadMode === \"js\" || preloadMode === \"js-lazy\") {\n        const script = document.createElement(\"script\");\n        script.setAttribute(\"data-href\", href);\n        script.setAttribute(\"data-media\", media || \"all\");\n        const js = `${cssLoaderPreamble}$loadcss(document.currentScript.dataset.href,document.currentScript.dataset.media)`;\n        script.textContent = js;\n        link.parentNode.insertBefore(script, link.nextSibling);\n        style.$$links.push(script);\n        cssLoaderPreamble = \"\";\n        noscriptFallback = true;\n        updateLinkToPreload = true;\n      } else if (preloadMode === \"media\") {\n        link.setAttribute(\"media\", \"print\");\n        link.setAttribute(\"onload\", `this.media='${media || \"all\"}'`);\n        noscriptFallback = true;\n      } else if (preloadMode === \"swap-high\") {\n        link.setAttribute(\"rel\", \"alternate stylesheet preload\");\n        link.setAttribute(\"title\", \"styles\");\n        link.setAttribute(\"onload\", `this.title='';this.rel='stylesheet'`);\n        noscriptFallback = true;\n      } else if (preloadMode === \"swap\") {\n        link.setAttribute(\"onload\", \"this.rel='stylesheet'\");\n        noscriptFallback = true;\n      } else {\n        const bodyLink = link.cloneNode(false);\n        bodyLink.removeAttribute(\"id\");\n        document.body.appendChild(bodyLink);\n        updateLinkToPreload = true;\n      }\n    }\n    if (this.options.noscriptFallback !== false && noscriptFallback && !href.includes(\"</noscript>\")) {\n      const noscript = document.createElement(\"noscript\");\n      noscriptLink.removeAttribute(\"id\");\n      noscript.appendChild(noscriptLink);\n      link.parentNode.insertBefore(noscript, link.nextSibling);\n      style.$$links.push(noscript);\n    }\n    if (updateLinkToPreload) {\n      link.setAttribute(\"rel\", \"preload\");\n      link.setAttribute(\"as\", \"style\");\n    }\n  }\n  /**\n   * Prune the source CSS files\n   */\n  pruneSource(style, before, sheetInverse) {\n    const minSize = this.options.minimumExternalSize;\n    const name = style.$$name;\n    if (minSize && sheetInverse.length < minSize) {\n      this.logger.info?.(`\\x1B[32mInlined all of ${name} (non-critical external stylesheet would have been ${sheetInverse.length}b, which was below the threshold of ${minSize})\\x1B[39m`);\n      style.textContent = before;\n      if (style.$$links) {\n        for (const link of style.$$links) {\n          const parent = link.parentNode;\n          if (parent) parent.removeChild(link);\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Parse the stylesheet within a <style> element, then reduce it to contain only rules used by the document.\n   */\n  async processStyle(style, document) {\n    if (style.$$reduce === false) return;\n    const name = style.$$name ? style.$$name.replace(/^\\//, \"\") : \"inline CSS\";\n    const options = this.options;\n    const beastiesContainer = document.beastiesContainer;\n    let keyframesMode = options.keyframes ?? \"critical\";\n    if (keyframesMode === true) keyframesMode = \"all\";\n    if (keyframesMode === false) keyframesMode = \"none\";\n    let sheet = style.textContent;\n    const before = sheet;\n    if (!sheet) return;\n    const ast = parseStylesheet(sheet);\n    const astInverse = options.pruneSource ? parseStylesheet(sheet) : null;\n    let criticalFonts = \"\";\n    const failedSelectors = [];\n    const criticalKeyframeNames = /* @__PURE__ */new Set();\n    let includeNext = false;\n    let includeAll = false;\n    let excludeNext = false;\n    let excludeAll = false;\n    const shouldPreloadFonts = options.fonts === true || options.preloadFonts === true;\n    const shouldInlineFonts = options.fonts !== false && options.inlineFonts === true;\n    walkStyleRules(ast, markOnly(rule => {\n      if (rule.type === \"comment\") {\n        const beastiesComment = rule.text.match(/^(?<!! )beasties:(.*)/);\n        const command = beastiesComment && beastiesComment[1];\n        if (command) {\n          switch (command) {\n            case \"include\":\n              includeNext = true;\n              break;\n            case \"exclude\":\n              excludeNext = true;\n              break;\n            case \"include start\":\n              includeAll = true;\n              break;\n            case \"include end\":\n              includeAll = false;\n              break;\n            case \"exclude start\":\n              excludeAll = true;\n              break;\n            case \"exclude end\":\n              excludeAll = false;\n              break;\n          }\n        }\n      }\n      if (rule.type === \"rule\") {\n        if (includeNext) {\n          includeNext = false;\n          return true;\n        }\n        if (excludeNext) {\n          excludeNext = false;\n          return false;\n        }\n        if (includeAll) {\n          return true;\n        }\n        if (excludeAll) {\n          return false;\n        }\n        rule.filterSelectors?.(sel => {\n          const isAllowedRule = options.allowRules.some(exp => {\n            if (exp instanceof RegExp) {\n              return exp.test(sel);\n            }\n            return exp === sel;\n          });\n          if (isAllowedRule) return true;\n          if (sel === \":root\" || sel === \"html\" || sel === \"body\" || /^::?(?:before|after)$/.test(sel)) {\n            return true;\n          }\n          sel = sel.replace(/(?<!\\\\)::?[a-z-]+(?![a-z-(])/gi, \"\").replace(/::?not\\(\\s*\\)/g, \"\").replace(/\\(\\s*,/g, \"(\").replace(/,\\s*\\)/g, \")\").trim();\n          if (!sel) return false;\n          try {\n            return beastiesContainer.exists(sel);\n          } catch (e) {\n            failedSelectors.push(`${sel} -> ${e.message || e.toString()}`);\n            return false;\n          }\n        });\n        if (!rule.selector) {\n          return false;\n        }\n        if (rule.nodes) {\n          for (const decl of rule.nodes) {\n            if (!(\"prop\" in decl)) {\n              continue;\n            }\n            if (shouldInlineFonts && /\\bfont(?:-family)?\\b/i.test(decl.prop)) {\n              criticalFonts += ` ${decl.value}`;\n            }\n            if (decl.prop === \"animation\" || decl.prop === \"animation-name\") {\n              for (const name2 of decl.value.split(/\\s+/)) {\n                const nameTrimmed = name2.trim();\n                if (nameTrimmed) criticalKeyframeNames.add(nameTrimmed);\n              }\n            }\n          }\n        }\n      }\n      if (rule.type === \"atrule\" && rule.name === \"font-face\") return;\n      const rules = \"nodes\" in rule ? rule.nodes?.filter(rule2 => !rule2.$$remove) : void 0;\n      return !rules || rules.length !== 0;\n    }));\n    if (failedSelectors.length !== 0) {\n      this.logger.warn?.(`${failedSelectors.length} rules skipped due to selector errors:\n  ${failedSelectors.join(\"\\n  \")}`);\n    }\n    const preloadedFonts = /* @__PURE__ */new Set();\n    walkStyleRulesWithReverseMirror(ast, astInverse, rule => {\n      if (rule.$$remove === true) return false;\n      if (\"selectors\" in rule) {\n        applyMarkedSelectors(rule);\n      }\n      if (rule.type === \"atrule\" && rule.name === \"keyframes\") {\n        if (keyframesMode === \"none\") return false;\n        if (keyframesMode === \"all\") return true;\n        return criticalKeyframeNames.has(rule.params);\n      }\n      if (rule.type === \"atrule\" && rule.name === \"font-face\") {\n        let family, src;\n        if (rule.nodes) {\n          for (const decl of rule.nodes) {\n            if (!(\"prop\" in decl)) {\n              continue;\n            }\n            if (decl.prop === \"src\") {\n              src = (decl.value.match(/url\\s*\\(\\s*(['\"]?)(.+?)\\1\\s*\\)/) || [])[2];\n            } else if (decl.prop === \"font-family\") {\n              family = decl.value;\n            }\n          }\n          if (src && shouldPreloadFonts && !preloadedFonts.has(src)) {\n            preloadedFonts.add(src);\n            const preload = document.createElement(\"link\");\n            preload.setAttribute(\"rel\", \"preload\");\n            preload.setAttribute(\"as\", \"font\");\n            preload.setAttribute(\"crossorigin\", \"anonymous\");\n            preload.setAttribute(\"href\", src.trim());\n            document.head.appendChild(preload);\n          }\n        }\n        if (!shouldInlineFonts || !family || !src || !criticalFonts.includes(family)) {\n          return false;\n        }\n      }\n    });\n    sheet = serializeStylesheet(ast, {\n      compress: this.options.compress !== false\n    });\n    if (sheet.trim().length === 0) {\n      if (style.parentNode) {\n        style.remove();\n      }\n      return;\n    }\n    let afterText = \"\";\n    let styleInlinedCompletely = false;\n    if (options.pruneSource) {\n      const sheetInverse = serializeStylesheet(astInverse, {\n        compress: this.options.compress !== false\n      });\n      styleInlinedCompletely = this.pruneSource(style, before, sheetInverse);\n      if (styleInlinedCompletely) {\n        const percent2 = sheetInverse.length / before.length * 100;\n        afterText = `, reducing non-inlined size ${percent2 | 0}% to ${formatSize(sheetInverse.length)}`;\n      }\n    }\n    if (!styleInlinedCompletely) {\n      style.textContent = sheet;\n    }\n    const percent = sheet.length / before.length * 100 | 0;\n    this.logger.info?.(`\\x1B[32mInlined ${formatSize(sheet.length)} (${percent}% of original ${formatSize(before.length)}) of ${name}${afterText}.\\x1B[39m`);\n  }\n}\nfunction formatSize(size) {\n  if (size <= 0) {\n    return \"0 bytes\";\n  }\n  const abbreviations = [\"bytes\", \"kB\", \"MB\", \"GB\"];\n  const index = Math.floor(Math.log(size) / Math.log(1024));\n  const roundedSize = size / 1024 ** index;\n  const fractionDigits = index === 0 ? 0 : 2;\n  return `${roundedSize.toFixed(fractionDigits)} ${abbreviations[index]}`;\n}\nexport { Beasties as default };\n", "import { APP_BASE_HREF, PlatformLocation } from '@angular/common';\nimport { ɵConsole as _Console, InjectionToken, makeEnvironmentProviders, runInInjectionContext, APP_INITIALIZER, inject, ApplicationRef, Compiler, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, LOCALE_ID, ɵresetCompiledComponents as _resetCompiledComponents } from '@angular/core';\nimport { ɵSERVER_CONTEXT as _SERVER_CONTEXT, renderModule, renderApplication, platformServer, INITIAL_CONFIG } from '@angular/platform-server';\nimport { ɵloadChildren as _loadChildren, Router } from '@angular/router';\nimport Beasties from '../third_party/beasties/index.js';\n\n/**\n * Manages server-side assets.\n */\nclass ServerAssets {\n  manifest;\n  /**\n   * Creates an instance of ServerAsset.\n   *\n   * @param manifest - The manifest containing the server assets.\n   */\n  constructor(manifest) {\n    this.manifest = manifest;\n  }\n  /**\n   * Retrieves the content of a server-side asset using its path.\n   *\n   * @param path - The path to the server asset within the manifest.\n   * @returns The server asset associated with the provided path, as a `ServerAsset` object.\n   * @throws Error - Throws an error if the asset does not exist.\n   */\n  getServerAsset(path) {\n    const asset = this.manifest.assets[path];\n    if (!asset) {\n      throw new Error(`Server asset '${path}' does not exist.`);\n    }\n    return asset;\n  }\n  /**\n   * Checks if a specific server-side asset exists.\n   *\n   * @param path - The path to the server asset.\n   * @returns A boolean indicating whether the asset exists.\n   */\n  hasServerAsset(path) {\n    return !!this.manifest.assets[path];\n  }\n  /**\n   * Retrieves the asset for 'index.server.html'.\n   *\n   * @returns The `ServerAsset` object for 'index.server.html'.\n   * @throws Error - Throws an error if 'index.server.html' does not exist.\n   */\n  getIndexServerHtml() {\n    return this.getServerAsset('index.server.html');\n  }\n}\n\n/**\n * A set of log messages that should be ignored and not printed to the console.\n */\nconst IGNORED_LOGS = new Set(['Angular is running in development mode.']);\n/**\n * Custom implementation of the Angular Console service that filters out specific log messages.\n *\n * This class extends the internal Angular `ɵConsole` class to provide customized logging behavior.\n * It overrides the `log` method to suppress logs that match certain predefined messages.\n */\nclass Console extends _Console {\n  /**\n   * Logs a message to the console if it is not in the set of ignored messages.\n   *\n   * @param message - The message to log to the console.\n   *\n   * This method overrides the `log` method of the `ɵConsole` class. It checks if the\n   * message is in the `IGNORED_LOGS` set. If it is not, it delegates the logging to\n   * the parent class's `log` method. Otherwise, the message is suppressed.\n   */\n  log(message) {\n    if (!IGNORED_LOGS.has(message)) {\n      super.log(message);\n    }\n  }\n}\n\n/**\n * The Angular app manifest object.\n * This is used internally to store the current Angular app manifest.\n */\nlet angularAppManifest;\n/**\n * Sets the Angular app manifest.\n *\n * @param manifest - The manifest object to set for the Angular application.\n */\nfunction setAngularAppManifest(manifest) {\n  angularAppManifest = manifest;\n}\n/**\n * Gets the Angular app manifest.\n *\n * @returns The Angular app manifest.\n * @throws Will throw an error if the Angular app manifest is not set.\n */\nfunction getAngularAppManifest() {\n  if (!angularAppManifest) {\n    throw new Error('Angular app manifest is not set. ' + `Please ensure you are using the '@angular/build:application' builder to build your server application.`);\n  }\n  return angularAppManifest;\n}\n/**\n * The Angular app engine manifest object.\n * This is used internally to store the current Angular app engine manifest.\n */\nlet angularAppEngineManifest;\n/**\n * Sets the Angular app engine manifest.\n *\n * @param manifest - The engine manifest object to set.\n */\nfunction setAngularAppEngineManifest(manifest) {\n  angularAppEngineManifest = manifest;\n}\n/**\n * Gets the Angular app engine manifest.\n *\n * @returns The Angular app engine manifest.\n * @throws Will throw an error if the Angular app engine manifest is not set.\n */\nfunction getAngularAppEngineManifest() {\n  if (!angularAppEngineManifest) {\n    throw new Error('Angular app engine manifest is not set. ' + `Please ensure you are using the '@angular/build:application' builder to build your server application.`);\n  }\n  return angularAppEngineManifest;\n}\n\n/**\n * Removes the trailing slash from a URL if it exists.\n *\n * @param url - The URL string from which to remove the trailing slash.\n * @returns The URL string without a trailing slash.\n *\n * @example\n * ```js\n * stripTrailingSlash('path/'); // 'path'\n * stripTrailingSlash('/path');  // '/path'\n * stripTrailingSlash('/'); // '/'\n * stripTrailingSlash(''); // ''\n * ```\n */\nfunction stripTrailingSlash(url) {\n  // Check if the last character of the URL is a slash\n  return url.length > 1 && url[url.length - 1] === '/' ? url.slice(0, -1) : url;\n}\n/**\n * Removes the leading slash from a URL if it exists.\n *\n * @param url - The URL string from which to remove the leading slash.\n * @returns The URL string without a leading slash.\n *\n * @example\n * ```js\n * stripLeadingSlash('/path'); // 'path'\n * stripLeadingSlash('/path/');  // 'path/'\n * stripLeadingSlash('/'); // '/'\n * stripLeadingSlash(''); // ''\n * ```\n */\nfunction stripLeadingSlash(url) {\n  // Check if the first character of the URL is a slash\n  return url.length > 1 && url[0] === '/' ? url.slice(1) : url;\n}\n/**\n * Adds a leading slash to a URL if it does not already have one.\n *\n * @param url - The URL string to which the leading slash will be added.\n * @returns The URL string with a leading slash.\n *\n * @example\n * ```js\n * addLeadingSlash('path'); // '/path'\n * addLeadingSlash('/path'); // '/path'\n * ```\n */\nfunction addLeadingSlash(url) {\n  // Check if the URL already starts with a slash\n  return url[0] === '/' ? url : `/${url}`;\n}\n/**\n * Adds a trailing slash to a URL if it does not already have one.\n *\n * @param url - The URL string to which the trailing slash will be added.\n * @returns The URL string with a trailing slash.\n *\n * @example\n * ```js\n * addTrailingSlash('path'); // 'path/'\n * addTrailingSlash('path/'); // 'path/'\n * ```\n */\nfunction addTrailingSlash(url) {\n  // Check if the URL already end with a slash\n  return url[url.length - 1] === '/' ? url : `${url}/`;\n}\n/**\n * Joins URL parts into a single URL string.\n *\n * This function takes multiple URL segments, normalizes them by removing leading\n * and trailing slashes where appropriate, and then joins them into a single URL.\n *\n * @param parts - The parts of the URL to join. Each part can be a string with or without slashes.\n * @returns The joined URL string, with normalized slashes.\n *\n * @example\n * ```js\n * joinUrlParts('path/', '/to/resource'); // '/path/to/resource'\n * joinUrlParts('/path/', 'to/resource'); // '/path/to/resource'\n * joinUrlParts('', ''); // '/'\n * ```\n */\nfunction joinUrlParts(...parts) {\n  const normalizeParts = [];\n  for (const part of parts) {\n    if (part === '') {\n      // Skip any empty parts\n      continue;\n    }\n    let normalizedPart = part;\n    if (part[0] === '/') {\n      normalizedPart = normalizedPart.slice(1);\n    }\n    if (part[part.length - 1] === '/') {\n      normalizedPart = normalizedPart.slice(0, -1);\n    }\n    if (normalizedPart !== '') {\n      normalizeParts.push(normalizedPart);\n    }\n  }\n  return addLeadingSlash(normalizeParts.join('/'));\n}\n/**\n * Strips `/index.html` from the end of a URL's path, if present.\n *\n * This function is used to convert URLs pointing to an `index.html` file into their directory\n * equivalents. For example, it transforms a URL like `http://www.example.com/page/index.html`\n * into `http://www.example.com/page`.\n *\n * @param url - The URL object to process.\n * @returns A new URL object with `/index.html` removed from the path, if it was present.\n *\n * @example\n * ```typescript\n * const originalUrl = new URL('http://www.example.com/page/index.html');\n * const cleanedUrl = stripIndexHtmlFromURL(originalUrl);\n * console.log(cleanedUrl.href); // Output: 'http://www.example.com/page'\n * ```\n */\nfunction stripIndexHtmlFromURL(url) {\n  if (url.pathname.endsWith('/index.html')) {\n    const modifiedURL = new URL(url);\n    // Remove '/index.html' from the pathname\n    modifiedURL.pathname = modifiedURL.pathname.slice(0, /** '/index.html'.length */-11);\n    return modifiedURL;\n  }\n  return url;\n}\n/**\n * Resolves `*` placeholders in a path template by mapping them to corresponding segments\n * from a base path. This is useful for constructing paths dynamically based on a given base path.\n *\n * The function processes the `toPath` string, replacing each `*` placeholder with\n * the corresponding segment from the `fromPath`. If the `toPath` contains no placeholders,\n * it is returned as-is. Invalid `toPath` formats (not starting with `/`) will throw an error.\n *\n * @param toPath - A path template string that may contain `*` placeholders. Each `*` is replaced\n * by the corresponding segment from the `fromPath`. Static paths (e.g., `/static/path`) are returned\n * directly without placeholder replacement.\n * @param fromPath - A base path string, split into segments, that provides values for\n * replacing `*` placeholders in the `toPath`.\n * @returns A resolved path string with `*` placeholders replaced by segments from the `fromPath`,\n * or the `toPath` returned unchanged if it contains no placeholders.\n *\n * @throws If the `toPath` does not start with a `/`, indicating an invalid path format.\n *\n * @example\n * ```typescript\n * // Example with placeholders resolved\n * const resolvedPath = buildPathWithParams('/*\\/details', '/123/abc');\n * console.log(resolvedPath); // Outputs: '/123/details'\n *\n * // Example with a static path\n * const staticPath = buildPathWithParams('/static/path', '/base/unused');\n * console.log(staticPath); // Outputs: '/static/path'\n * ```\n */\nfunction buildPathWithParams(toPath, fromPath) {\n  if (toPath[0] !== '/') {\n    throw new Error(`Invalid toPath: The string must start with a '/'. Received: '${toPath}'`);\n  }\n  if (fromPath[0] !== '/') {\n    throw new Error(`Invalid fromPath: The string must start with a '/'. Received: '${fromPath}'`);\n  }\n  if (!toPath.includes('/*')) {\n    return toPath;\n  }\n  const fromPathParts = fromPath.split('/');\n  const toPathParts = toPath.split('/');\n  const resolvedParts = toPathParts.map((part, index) => toPathParts[index] === '*' ? fromPathParts[index] : part);\n  return joinUrlParts(...resolvedParts);\n}\n\n/**\n * Renders an Angular application or module to an HTML string.\n *\n * This function determines whether the provided `bootstrap` value is an Angular module\n * or a bootstrap function and calls the appropriate rendering method (`renderModule` or\n * `renderApplication`) based on that determination.\n *\n * @param html - The HTML string to be used as the initial document content.\n * @param bootstrap - Either an Angular module type or a function that returns a promise\n *                    resolving to an `ApplicationRef`.\n * @param url - The URL of the application. This is used for server-side rendering to\n *              correctly handle route-based rendering.\n * @param platformProviders - An array of platform providers to be used during the\n *                             rendering process.\n * @param serverContext - A string representing the server context, used to provide additional\n *                        context or metadata during server-side rendering.\n * @returns A promise that resolves to a string containing the rendered HTML.\n */\nfunction renderAngular(html, bootstrap, url, platformProviders, serverContext) {\n  const providers = [{\n    provide: _SERVER_CONTEXT,\n    useValue: serverContext\n  }, {\n    // An Angular Console Provider that does not print a set of predefined logs.\n    provide: _Console,\n    // Using `useClass` would necessitate decorating `Console` with `@Injectable`,\n    // which would require switching from `ts_library` to `ng_module`. This change\n    // would also necessitate various patches of `@angular/bazel` to support ESM.\n    useFactory: () => new Console()\n  }, ...platformProviders];\n  // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.\n  const urlToRender = stripIndexHtmlFromURL(url).toString();\n  return isNgModule(bootstrap) ? renderModule(bootstrap, {\n    url: urlToRender,\n    document: html,\n    extraProviders: providers\n  }) : renderApplication(bootstrap, {\n    url: urlToRender,\n    document: html,\n    platformProviders: providers\n  });\n}\n/**\n * Type guard to determine if a given value is an Angular module.\n * Angular modules are identified by the presence of the `ɵmod` static property.\n * This function helps distinguish between Angular modules and bootstrap functions.\n *\n * @param value - The value to be checked.\n * @returns True if the value is an Angular module (i.e., it has the `ɵmod` property), false otherwise.\n */\nfunction isNgModule(value) {\n  return 'ɵmod' in value;\n}\n\n/**\n * Creates a promise that resolves with the result of the provided `promise` or rejects with an\n * `AbortError` if the `AbortSignal` is triggered before the promise resolves.\n *\n * @param promise - The promise to monitor for completion.\n * @param signal - An `AbortSignal` used to monitor for an abort event. If the signal is aborted,\n *                 the returned promise will reject.\n * @param errorMessagePrefix - A custom message prefix to include in the error message when the operation is aborted.\n * @returns A promise that either resolves with the value of the provided `promise` or rejects with\n *          an `AbortError` if the `AbortSignal` is triggered.\n *\n * @throws {AbortError} If the `AbortSignal` is triggered before the `promise` resolves.\n */\nfunction promiseWithAbort(promise, signal, errorMessagePrefix) {\n  return new Promise((resolve, reject) => {\n    const abortHandler = () => {\n      reject(new DOMException(`${errorMessagePrefix} was aborted.\\n${signal.reason}`, 'AbortError'));\n    };\n    // Check for abort signal\n    if (signal.aborted) {\n      abortHandler();\n      return;\n    }\n    signal.addEventListener('abort', abortHandler, {\n      once: true\n    });\n    promise.then(resolve).catch(reject).finally(() => {\n      signal.removeEventListener('abort', abortHandler);\n    });\n  });\n}\n\n/**\n * Different rendering modes for server routes.\n * @see {@link provideServerRoutesConfig}\n * @see {@link ServerRoute}\n * @developerPreview\n */\nvar RenderMode;\n(function (RenderMode) {\n  /** Server-Side Rendering (SSR) mode, where content is rendered on the server for each request. */\n  RenderMode[RenderMode[\"Server\"] = 0] = \"Server\";\n  /** Client-Side Rendering (CSR) mode, where content is rendered on the client side in the browser. */\n  RenderMode[RenderMode[\"Client\"] = 1] = \"Client\";\n  /** Static Site Generation (SSG) mode, where content is pre-rendered at build time and served as static files. */\n  RenderMode[RenderMode[\"Prerender\"] = 2] = \"Prerender\";\n})(RenderMode || (RenderMode = {}));\n/**\n * Defines the fallback strategies for Static Site Generation (SSG) routes when a pre-rendered path is not available.\n * This is particularly relevant for routes with parameterized URLs where some paths might not be pre-rendered at build time.\n * @see {@link ServerRoutePrerenderWithParams}\n * @developerPreview\n */\nvar PrerenderFallback;\n(function (PrerenderFallback) {\n  /**\n   * Fallback to Server-Side Rendering (SSR) if the pre-rendered path is not available.\n   * This strategy dynamically generates the page on the server at request time.\n   */\n  PrerenderFallback[PrerenderFallback[\"Server\"] = 0] = \"Server\";\n  /**\n   * Fallback to Client-Side Rendering (CSR) if the pre-rendered path is not available.\n   * This strategy allows the page to be rendered on the client side.\n   */\n  PrerenderFallback[PrerenderFallback[\"Client\"] = 1] = \"Client\";\n  /**\n   * No fallback; if the path is not pre-rendered, the server will not handle the request.\n   * This means the application will not provide any response for paths that are not pre-rendered.\n   */\n  PrerenderFallback[PrerenderFallback[\"None\"] = 2] = \"None\";\n})(PrerenderFallback || (PrerenderFallback = {}));\n/**\n * Token for providing the server routes configuration.\n * @internal\n */\nconst SERVER_ROUTES_CONFIG = new InjectionToken('SERVER_ROUTES_CONFIG');\n/**\n/**\n * Sets up the necessary providers for configuring server routes.\n * This function accepts an array of server routes and optional configuration\n * options, returning an `EnvironmentProviders` object that encapsulates\n * the server routes and configuration settings.\n *\n * @param routes - An array of server routes to be provided.\n * @param options - (Optional) An object containing additional configuration options for server routes.\n * @returns An `EnvironmentProviders` instance with the server routes configuration.\n *\n * @see {@link ServerRoute}\n * @see {@link ServerRoutesConfigOptions}\n * @developerPreview\n */\nfunction provideServerRoutesConfig(routes, options) {\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    throw new Error(`The 'provideServerRoutesConfig' function should not be invoked within the browser portion of the application.`);\n  }\n  return makeEnvironmentProviders([{\n    provide: SERVER_ROUTES_CONFIG,\n    useValue: {\n      routes,\n      ...options\n    }\n  }]);\n}\n\n/**\n * A route tree implementation that supports efficient route matching, including support for wildcard routes.\n * This structure is useful for organizing and retrieving routes in a hierarchical manner,\n * enabling complex routing scenarios with nested paths.\n *\n * @typeParam AdditionalMetadata - Type of additional metadata that can be associated with route nodes.\n */\nclass RouteTree {\n  /**\n   * The root node of the route tree.\n   * All routes are stored and accessed relative to this root node.\n   */\n  root = this.createEmptyRouteTreeNode('');\n  /**\n   * A counter that tracks the order of route insertion.\n   * This ensures that routes are matched in the order they were defined,\n   * with earlier routes taking precedence.\n   */\n  insertionIndexCounter = 0;\n  /**\n   * Inserts a new route into the route tree.\n   * The route is broken down into segments, and each segment is added to the tree.\n   * Parameterized segments (e.g., :id) are normalized to wildcards (*) for matching purposes.\n   *\n   * @param route - The route path to insert into the tree.\n   * @param metadata - Metadata associated with the route, excluding the route path itself.\n   */\n  insert(route, metadata) {\n    let node = this.root;\n    const segments = this.getPathSegments(route);\n    const normalizedSegments = [];\n    for (const segment of segments) {\n      // Replace parameterized segments (e.g., :id) with a wildcard (*) for matching\n      const normalizedSegment = segment[0] === ':' ? '*' : segment;\n      let childNode = node.children.get(normalizedSegment);\n      if (!childNode) {\n        childNode = this.createEmptyRouteTreeNode(normalizedSegment);\n        node.children.set(normalizedSegment, childNode);\n      }\n      node = childNode;\n      normalizedSegments.push(normalizedSegment);\n    }\n    // At the leaf node, store the full route and its associated metadata\n    node.metadata = {\n      ...metadata,\n      route: normalizedSegments.join('/')\n    };\n    node.insertionIndex = this.insertionIndexCounter++;\n  }\n  /**\n   * Matches a given route against the route tree and returns the best matching route's metadata.\n   * The best match is determined by the lowest insertion index, meaning the earliest defined route\n   * takes precedence.\n   *\n   * @param route - The route path to match against the route tree.\n   * @returns The metadata of the best matching route or `undefined` if no match is found.\n   */\n  match(route) {\n    const segments = this.getPathSegments(route);\n    return this.traverseBySegments(segments)?.metadata;\n  }\n  /**\n   * Converts the route tree into a serialized format representation.\n   * This method converts the route tree into an array of metadata objects that describe the structure of the tree.\n   * The array represents the routes in a nested manner where each entry includes the route and its associated metadata.\n   *\n   * @returns An array of `RouteTreeNodeMetadata` objects representing the route tree structure.\n   *          Each object includes the `route` and associated metadata of a route.\n   */\n  toObject() {\n    return Array.from(this.traverse());\n  }\n  /**\n   * Constructs a `RouteTree` from an object representation.\n   * This method is used to recreate a `RouteTree` instance from an array of metadata objects.\n   * The array should be in the format produced by `toObject`, allowing for the reconstruction of the route tree\n   * with the same routes and metadata.\n   *\n   * @param value - An array of `RouteTreeNodeMetadata` objects that represent the serialized format of the route tree.\n   *                Each object should include a `route` and its associated metadata.\n   * @returns A new `RouteTree` instance constructed from the provided metadata objects.\n   */\n  static fromObject(value) {\n    const tree = new RouteTree();\n    for (const {\n      route,\n      ...metadata\n    } of value) {\n      tree.insert(route, metadata);\n    }\n    return tree;\n  }\n  /**\n   * A generator function that recursively traverses the route tree and yields the metadata of each node.\n   * This allows for easy and efficient iteration over all nodes in the tree.\n   *\n   * @param node - The current node to start the traversal from. Defaults to the root node of the tree.\n   */\n  *traverse(node = this.root) {\n    if (node.metadata) {\n      yield node.metadata;\n    }\n    for (const childNode of node.children.values()) {\n      yield* this.traverse(childNode);\n    }\n  }\n  /**\n   * Extracts the path segments from a given route string.\n   *\n   * @param route - The route string from which to extract segments.\n   * @returns An array of path segments.\n   */\n  getPathSegments(route) {\n    return stripTrailingSlash(route).split('/');\n  }\n  /**\n   * Recursively traverses the route tree from a given node, attempting to match the remaining route segments.\n   * If the node is a leaf node (no more segments to match) and contains metadata, the node is yielded.\n   *\n   * This function prioritizes exact segment matches first, followed by wildcard matches (`*`),\n   * and finally deep wildcard matches (`**`) that consume all segments.\n   *\n   * @param remainingSegments - The remaining segments of the route path to match.\n   * @param node - The current node in the route tree to start traversal from.\n   *\n   * @returns The node that best matches the remaining segments or `undefined` if no match is found.\n   */\n  traverseBySegments(remainingSegments, node = this.root) {\n    const {\n      metadata,\n      children\n    } = node;\n    // If there are no remaining segments and the node has metadata, return this node\n    if (!remainingSegments?.length) {\n      if (metadata) {\n        return node;\n      }\n      return;\n    }\n    // If the node has no children, end the traversal\n    if (!children.size) {\n      return;\n    }\n    const [segment, ...restSegments] = remainingSegments;\n    let currentBestMatchNode;\n    // 1. Exact segment match\n    const exactMatchNode = node.children.get(segment);\n    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, this.traverseBySegments(restSegments, exactMatchNode));\n    // 2. Wildcard segment match (`*`)\n    const wildcardNode = node.children.get('*');\n    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, this.traverseBySegments(restSegments, wildcardNode));\n    // 3. Deep wildcard segment match (`**`)\n    const deepWildcardNode = node.children.get('**');\n    currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, deepWildcardNode);\n    return currentBestMatchNode;\n  }\n  /**\n   * Compares two nodes and returns the node with higher priority based on insertion index.\n   * A node with a lower insertion index is prioritized as it was defined earlier.\n   *\n   * @param currentBestMatchNode - The current best match node.\n   * @param candidateNode - The node being evaluated for higher priority based on insertion index.\n   * @returns The node with higher priority (i.e., lower insertion index). If one of the nodes is `undefined`, the other node is returned.\n   */\n  getHigherPriorityNode(currentBestMatchNode, candidateNode) {\n    if (!candidateNode) {\n      return currentBestMatchNode;\n    }\n    if (!currentBestMatchNode) {\n      return candidateNode;\n    }\n    return candidateNode.insertionIndex < currentBestMatchNode.insertionIndex ? candidateNode : currentBestMatchNode;\n  }\n  /**\n   * Creates an empty route tree node with the specified segment.\n   * This helper function is used during the tree construction.\n   *\n   * @param segment - The route segment that this node represents.\n   * @returns A new, empty route tree node.\n   */\n  createEmptyRouteTreeNode(segment) {\n    return {\n      segment,\n      insertionIndex: -1,\n      children: new Map()\n    };\n  }\n}\n\n/**\n * Regular expression to match segments preceded by a colon in a string.\n */\nconst URL_PARAMETER_REGEXP = /(?<!\\\\):([^/]+)/g;\n/**\n * An set of HTTP status codes that are considered valid for redirect responses.\n */\nconst VALID_REDIRECT_RESPONSE_CODES = new Set([301, 302, 303, 307, 308]);\n/**\n * Traverses an array of route configurations to generate route tree node metadata.\n *\n * This function processes each route and its children, handling redirects, SSG (Static Site Generation) settings,\n * and lazy-loaded routes. It yields route metadata for each route and its potential variants.\n *\n * @param options - The configuration options for traversing routes.\n * @returns An async iterable iterator yielding either route tree node metadata or an error object with an error message.\n */\nasync function* traverseRoutesConfig(options) {\n  const {\n    routes,\n    compiler,\n    parentInjector,\n    parentRoute,\n    serverConfigRouteTree,\n    invokeGetPrerenderParams,\n    includePrerenderFallbackRoutes\n  } = options;\n  for (const route of routes) {\n    try {\n      const {\n        path = '',\n        redirectTo,\n        loadChildren,\n        children\n      } = route;\n      const currentRoutePath = joinUrlParts(parentRoute, path);\n      // Get route metadata from the server config route tree, if available\n      let matchedMetaData;\n      if (serverConfigRouteTree) {\n        matchedMetaData = serverConfigRouteTree.match(currentRoutePath);\n        if (!matchedMetaData) {\n          yield {\n            error: `The '${stripLeadingSlash(currentRoutePath)}' route does not match any route defined in the server routing configuration. ` + 'Please ensure this route is added to the server routing configuration.'\n          };\n          continue;\n        }\n        matchedMetaData.presentInClientRouter = true;\n      }\n      const metadata = {\n        renderMode: RenderMode.Prerender,\n        ...matchedMetaData,\n        // Match Angular router behavior\n        // ['one', 'two', ''] -> 'one/two/'\n        // ['one', 'two', 'three'] -> 'one/two/three'\n        route: path === '' ? addTrailingSlash(currentRoutePath) : currentRoutePath\n      };\n      delete metadata.presentInClientRouter;\n      if (metadata.renderMode === RenderMode.Prerender) {\n        // Handle SSG routes\n        yield* handleSSGRoute(typeof redirectTo === 'string' ? redirectTo : undefined, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes);\n      } else if (typeof redirectTo === 'string') {\n        // Handle redirects\n        if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) {\n          yield {\n            error: `The '${metadata.status}' status code is not a valid redirect response code. ` + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`\n          };\n          continue;\n        }\n        yield {\n          ...metadata,\n          redirectTo: resolveRedirectTo(metadata.route, redirectTo)\n        };\n      } else {\n        yield metadata;\n      }\n      // Recursively process child routes\n      if (children?.length) {\n        yield* traverseRoutesConfig({\n          ...options,\n          routes: children,\n          parentRoute: currentRoutePath\n        });\n      }\n      // Load and process lazy-loaded child routes\n      if (loadChildren) {\n        const loadedChildRoutes = await _loadChildren(route, compiler, parentInjector).toPromise();\n        if (loadedChildRoutes) {\n          const {\n            routes: childRoutes,\n            injector = parentInjector\n          } = loadedChildRoutes;\n          yield* traverseRoutesConfig({\n            ...options,\n            routes: childRoutes,\n            parentInjector: injector,\n            parentRoute: currentRoutePath\n          });\n        }\n      }\n    } catch (error) {\n      yield {\n        error: `Error processing route '${stripLeadingSlash(route.path ?? '')}': ${error.message}`\n      };\n    }\n  }\n}\n/**\n * Handles SSG (Static Site Generation) routes by invoking `getPrerenderParams` and yielding\n * all parameterized paths, returning any errors encountered.\n *\n * @param redirectTo - Optional path to redirect to, if specified.\n * @param metadata - The metadata associated with the route tree node.\n * @param parentInjector - The dependency injection container for the parent route.\n * @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function.\n * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result.\n * @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors.\n */\nasync function* handleSSGRoute(redirectTo, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes) {\n  if (metadata.renderMode !== RenderMode.Prerender) {\n    throw new Error(`'handleSSGRoute' was called for a route which rendering mode is not prerender.`);\n  }\n  const {\n    route: currentRoutePath,\n    fallback,\n    ...meta\n  } = metadata;\n  const getPrerenderParams = 'getPrerenderParams' in meta ? meta.getPrerenderParams : undefined;\n  if ('getPrerenderParams' in meta) {\n    delete meta['getPrerenderParams'];\n  }\n  if (redirectTo !== undefined) {\n    meta.redirectTo = resolveRedirectTo(currentRoutePath, redirectTo);\n  }\n  if (!URL_PARAMETER_REGEXP.test(currentRoutePath)) {\n    // Route has no parameters\n    yield {\n      ...meta,\n      route: currentRoutePath\n    };\n    return;\n  }\n  if (invokeGetPrerenderParams) {\n    if (!getPrerenderParams) {\n      yield {\n        error: `The '${stripLeadingSlash(currentRoutePath)}' route uses prerendering and includes parameters, but 'getPrerenderParams' ` + `is missing. Please define 'getPrerenderParams' function for this route in your server routing configuration ` + `or specify a different 'renderMode'.`\n      };\n      return;\n    }\n    const parameters = await runInInjectionContext(parentInjector, () => getPrerenderParams());\n    try {\n      for (const params of parameters) {\n        const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, match => {\n          const parameterName = match.slice(1);\n          const value = params[parameterName];\n          if (typeof value !== 'string') {\n            throw new Error(`The 'getPrerenderParams' function defined for the '${stripLeadingSlash(currentRoutePath)}' route ` + `returned a non-string value for parameter '${parameterName}'. ` + `Please make sure the 'getPrerenderParams' function returns values for all parameters ` + 'specified in this route.');\n          }\n          return value;\n        });\n        yield {\n          ...meta,\n          route: routeWithResolvedParams,\n          redirectTo: redirectTo === undefined ? undefined : resolveRedirectTo(routeWithResolvedParams, redirectTo)\n        };\n      }\n    } catch (error) {\n      yield {\n        error: `${error.message}`\n      };\n      return;\n    }\n  }\n  // Handle fallback render modes\n  if (includePrerenderFallbackRoutes && (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams)) {\n    yield {\n      ...meta,\n      route: currentRoutePath,\n      renderMode: fallback === PrerenderFallback.Client ? RenderMode.Client : RenderMode.Server\n    };\n  }\n}\n/**\n * Resolves the `redirectTo` property for a given route.\n *\n * This function processes the `redirectTo` property to ensure that it correctly\n * resolves relative to the current route path. If `redirectTo` is an absolute path,\n * it is returned as is. If it is a relative path, it is resolved based on the current route path.\n *\n * @param routePath - The current route path.\n * @param redirectTo - The target path for redirection.\n * @returns The resolved redirect path as a string.\n */\nfunction resolveRedirectTo(routePath, redirectTo) {\n  if (redirectTo[0] === '/') {\n    // If the redirectTo path is absolute, return it as is.\n    return redirectTo;\n  }\n  // Resolve relative redirectTo based on the current route path.\n  const segments = routePath.replace(URL_PARAMETER_REGEXP, '*').split('/');\n  segments.pop(); // Remove the last segment to make it relative.\n  return joinUrlParts(...segments, redirectTo);\n}\n/**\n * Builds a server configuration route tree from the given server routes configuration.\n *\n * @param serverRoutesConfig - The server routes to be used for configuration.\n\n * @returns An object containing:\n * - `serverConfigRouteTree`: A populated `RouteTree` instance, which organizes the server routes\n *   along with their additional metadata.\n * - `errors`: An array of strings that list any errors encountered during the route tree construction\n *   process, such as invalid paths.\n */\nfunction buildServerConfigRouteTree({\n  routes,\n  appShellRoute\n}) {\n  const serverRoutes = [...routes];\n  if (appShellRoute !== undefined) {\n    serverRoutes.unshift({\n      path: appShellRoute,\n      renderMode: RenderMode.Prerender\n    });\n  }\n  const serverConfigRouteTree = new RouteTree();\n  const errors = [];\n  for (const {\n    path,\n    ...metadata\n  } of serverRoutes) {\n    if (path[0] === '/') {\n      errors.push(`Invalid '${path}' route configuration: the path cannot start with a slash.`);\n      continue;\n    }\n    serverConfigRouteTree.insert(path, metadata);\n  }\n  return {\n    serverConfigRouteTree,\n    errors\n  };\n}\n/**\n * Retrieves routes from the given Angular application.\n *\n * This function initializes an Angular platform, bootstraps the application or module,\n * and retrieves routes from the Angular router configuration. It handles both module-based\n * and function-based bootstrapping. It yields the resulting routes as `RouteTreeNodeMetadata` objects or errors.\n *\n * @param bootstrap - A function that returns a promise resolving to an `ApplicationRef` or an Angular module to bootstrap.\n * @param document - The initial HTML document used for server-side rendering.\n * This document is necessary to render the application on the server.\n * @param url - The URL for server-side rendering. The URL is used to configure `ServerPlatformLocation`. This configuration is crucial\n * for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction.\n * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes\n * to handle prerendering paths. Defaults to `false`.\n * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`.\n *\n * @returns A promise that resolves to an object of type `AngularRouterConfigResult` or errors.\n */\nasync function getRoutesFromAngularRouterConfig(bootstrap, document, url, invokeGetPrerenderParams = false, includePrerenderFallbackRoutes = true) {\n  const {\n    protocol,\n    host\n  } = url;\n  // Create and initialize the Angular platform for server-side rendering.\n  const platformRef = platformServer([{\n    provide: INITIAL_CONFIG,\n    useValue: {\n      document,\n      url: `${protocol}//${host}/`\n    }\n  }, {\n    // An Angular Console Provider that does not print a set of predefined logs.\n    provide: _Console,\n    // Using `useClass` would necessitate decorating `Console` with `@Injectable`,\n    // which would require switching from `ts_library` to `ng_module`. This change\n    // would also necessitate various patches of `@angular/bazel` to support ESM.\n    useFactory: () => new Console()\n  }, {\n    // We cannot replace `ApplicationRef` with a different provider here due to the dependency injection (DI) hierarchy.\n    // This code is running at the platform level, where `ApplicationRef` is provided in the root injector.\n    // As a result, any attempt to replace it will cause the root provider to override the platform provider.\n    // TODO(alanagius): investigate exporting the app config directly which would help with: https://github.com/angular/angular/issues/59144\n    provide: APP_INITIALIZER,\n    multi: true,\n    useFactory: () => () => {\n      const appRef = inject(ApplicationRef);\n      appRef.bootstrap = () => undefined;\n    }\n  }]);\n  try {\n    let applicationRef;\n    if (isNgModule(bootstrap)) {\n      const moduleRef = await platformRef.bootstrapModule(bootstrap);\n      applicationRef = moduleRef.injector.get(ApplicationRef);\n    } else {\n      applicationRef = await bootstrap();\n    }\n    // Wait until the application is stable.\n    await applicationRef.whenStable();\n    const injector = applicationRef.injector;\n    const router = injector.get(Router);\n    const routesResults = [];\n    const errors = [];\n    let baseHref = injector.get(APP_BASE_HREF, null, {\n      optional: true\n    }) ?? injector.get(PlatformLocation).getBaseHrefFromDOM();\n    if (baseHref.startsWith('./')) {\n      baseHref = baseHref.slice(2);\n    }\n    const compiler = injector.get(Compiler);\n    const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, {\n      optional: true\n    });\n    let serverConfigRouteTree;\n    if (serverRoutesConfig) {\n      const result = buildServerConfigRouteTree(serverRoutesConfig);\n      serverConfigRouteTree = result.serverConfigRouteTree;\n      errors.push(...result.errors);\n    }\n    if (errors.length) {\n      return {\n        baseHref,\n        routes: routesResults,\n        errors\n      };\n    }\n    if (router.config.length) {\n      // Retrieve all routes from the Angular router configuration.\n      const traverseRoutes = traverseRoutesConfig({\n        routes: router.config,\n        compiler,\n        parentInjector: injector,\n        parentRoute: '',\n        serverConfigRouteTree,\n        invokeGetPrerenderParams,\n        includePrerenderFallbackRoutes\n      });\n      for await (const result of traverseRoutes) {\n        if ('error' in result) {\n          errors.push(result.error);\n        } else {\n          routesResults.push(result);\n        }\n      }\n      if (serverConfigRouteTree) {\n        for (const {\n          route,\n          presentInClientRouter\n        } of serverConfigRouteTree.traverse()) {\n          if (presentInClientRouter || route === '**') {\n            // Skip if matched or it's the catch-all route.\n            continue;\n          }\n          errors.push(`The '${route}' server route does not match any routes defined in the Angular ` + `routing configuration (typically provided as a part of the 'provideRouter' call). ` + 'Please make sure that the mentioned server route is present in the Angular routing configuration.');\n        }\n      }\n    } else {\n      const rootRouteMetadata = serverConfigRouteTree?.match('') ?? {\n        route: '',\n        renderMode: RenderMode.Prerender\n      };\n      routesResults.push({\n        ...rootRouteMetadata,\n        // Matched route might be `/*` or `/**`, which would make Angular serve all routes rather than just `/`.\n        // So we limit to just `/` for the empty app router case.\n        route: ''\n      });\n    }\n    return {\n      baseHref,\n      routes: routesResults,\n      errors,\n      appShellRoute: serverRoutesConfig?.appShellRoute\n    };\n  } finally {\n    platformRef.destroy();\n  }\n}\n/**\n * Asynchronously extracts routes from the Angular application configuration\n * and creates a `RouteTree` to manage server-side routing.\n *\n * @param options - An object containing the following options:\n *  - `url`: The URL for server-side rendering. The URL is used to configure `ServerPlatformLocation`. This configuration is crucial\n *     for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction.\n *     See:\n *      - https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51\n *      - https://github.com/angular/angular/blob/6882cc7d9eed26d3caeedca027452367ba25f2b9/packages/platform-server/src/http.ts#L44\n *  - `manifest`: An optional `AngularAppManifest` that contains the application's routing and configuration details.\n *     If not provided, the default manifest is retrieved using `getAngularAppManifest()`.\n *  - `invokeGetPrerenderParams`: A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes\n *     to handle prerendering paths. Defaults to `false`.\n *  - `includePrerenderFallbackRoutes`: A flag indicating whether to include fallback routes in the result. Defaults to `true`.\n *  - `signal`: An optional `AbortSignal` that can be used to abort the operation.\n *\n * @returns A promise that resolves to an object containing:\n *  - `routeTree`: A populated `RouteTree` containing all extracted routes from the Angular application.\n *  - `appShellRoute`: The specified route for the app-shell, if configured.\n *  - `errors`: An array of strings representing any errors encountered during the route extraction process.\n */\nfunction extractRoutesAndCreateRouteTree(options) {\n  const {\n    url,\n    manifest = getAngularAppManifest(),\n    invokeGetPrerenderParams = false,\n    includePrerenderFallbackRoutes = true,\n    signal\n  } = options;\n  async function extract() {\n    const routeTree = new RouteTree();\n    const document = await new ServerAssets(manifest).getIndexServerHtml().text();\n    const bootstrap = await manifest.bootstrap();\n    const {\n      baseHref,\n      appShellRoute,\n      routes,\n      errors\n    } = await getRoutesFromAngularRouterConfig(bootstrap, document, url, invokeGetPrerenderParams, includePrerenderFallbackRoutes);\n    for (const {\n      route,\n      ...metadata\n    } of routes) {\n      if (metadata.redirectTo !== undefined) {\n        metadata.redirectTo = joinUrlParts(baseHref, metadata.redirectTo);\n      }\n      // Remove undefined fields\n      // Helps avoid unnecessary test updates\n      for (const [key, value] of Object.entries(metadata)) {\n        if (value === undefined) {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          delete metadata[key];\n        }\n      }\n      const fullRoute = joinUrlParts(baseHref, route);\n      routeTree.insert(fullRoute, metadata);\n    }\n    return {\n      appShellRoute,\n      routeTree,\n      errors\n    };\n  }\n  return signal ? promiseWithAbort(extract(), signal, 'Routes extraction') : extract();\n}\n\n/**\n * Manages a collection of hooks and provides methods to register and execute them.\n * Hooks are functions that can be invoked with specific arguments to allow modifications or enhancements.\n */\nclass Hooks {\n  /**\n   * A map of hook names to arrays of hook functions.\n   * Each hook name can have multiple associated functions, which are executed in sequence.\n   */\n  store = new Map();\n  /**\n   * Executes all hooks associated with the specified name, passing the given argument to each hook function.\n   * The hooks are invoked sequentially, and the argument may be modified by each hook.\n   *\n   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.\n   * @param name - The name of the hook whose functions will be executed.\n   * @param context - The input value to be passed to each hook function. The value is mutated by each hook function.\n   * @returns A promise that resolves once all hook functions have been executed.\n   *\n   * @example\n   * ```typescript\n   * const hooks = new Hooks();\n   * hooks.on('html:transform:pre', async (ctx) => {\n   *   ctx.html = ctx.html.replace(/foo/g, 'bar');\n   *   return ctx.html;\n   * });\n   * const result = await hooks.run('html:transform:pre', { html: '<div>foo</div>' });\n   * console.log(result); // '<div>bar</div>'\n   * ```\n   * @internal\n   */\n  async run(name, context) {\n    const hooks = this.store.get(name);\n    switch (name) {\n      case 'html:transform:pre':\n        {\n          if (!hooks) {\n            return context.html;\n          }\n          const ctx = {\n            ...context\n          };\n          for (const hook of hooks) {\n            ctx.html = await hook(ctx);\n          }\n          return ctx.html;\n        }\n      default:\n        throw new Error(`Running hook \"${name}\" is not supported.`);\n    }\n  }\n  /**\n   * Registers a new hook function under the specified hook name.\n   * This function should be a function that takes an argument of type `T` and returns a `string` or `Promise<string>`.\n   *\n   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.\n   * @param name - The name of the hook under which the function will be registered.\n   * @param handler - A function to be executed when the hook is triggered. The handler will be called with an argument\n   *                  that may be modified by the hook functions.\n   *\n   * @remarks\n   * - If there are existing handlers registered under the given hook name, the new handler will be added to the list.\n   * - If no handlers are registered under the given hook name, a new list will be created with the handler as its first element.\n   *\n   * @example\n   * ```typescript\n   * hooks.on('html:transform:pre', async (ctx) => {\n   *   return ctx.html.replace(/foo/g, 'bar');\n   * });\n   * ```\n   */\n  on(name, handler) {\n    const hooks = this.store.get(name);\n    if (hooks) {\n      hooks.push(handler);\n    } else {\n      this.store.set(name, [handler]);\n    }\n  }\n  /**\n   * Checks if there are any hooks registered under the specified name.\n   *\n   * @param name - The name of the hook to check.\n   * @returns `true` if there are hooks registered under the specified name, otherwise `false`.\n   */\n  has(name) {\n    return !!this.store.get(name)?.length;\n  }\n}\n\n/**\n * Manages the application's server routing logic by building and maintaining a route tree.\n *\n * This class is responsible for constructing the route tree from the Angular application\n * configuration and using it to match incoming requests to the appropriate routes.\n */\nclass ServerRouter {\n  routeTree;\n  /**\n   * Creates an instance of the `ServerRouter`.\n   *\n   * @param routeTree - An instance of `RouteTree` that holds the routing information.\n   * The `RouteTree` is used to match request URLs to the appropriate route metadata.\n   */\n  constructor(routeTree) {\n    this.routeTree = routeTree;\n  }\n  /**\n   * Static property to track the ongoing build promise.\n   */\n  static #extractionPromise;\n  /**\n   * Creates or retrieves a `ServerRouter` instance based on the provided manifest and URL.\n   *\n   * If the manifest contains pre-built routes, a new `ServerRouter` is immediately created.\n   * Otherwise, it builds the router by extracting routes from the Angular configuration\n   * asynchronously. This method ensures that concurrent builds are prevented by re-using\n   * the same promise.\n   *\n   * @param manifest - An instance of `AngularAppManifest` that contains the route information.\n   * @param url - The URL for server-side rendering. The URL is needed to configure `ServerPlatformLocation`.\n   * This is necessary to ensure that API requests for relative paths succeed, which is crucial for correct route extraction.\n   * [Reference](https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51)\n   * @returns A promise resolving to a `ServerRouter` instance.\n   */\n  static from(manifest, url) {\n    if (manifest.routes) {\n      const routeTree = RouteTree.fromObject(manifest.routes);\n      return Promise.resolve(new ServerRouter(routeTree));\n    }\n    // Create and store a new promise for the build process.\n    // This prevents concurrent builds by re-using the same promise.\n    ServerRouter.#extractionPromise ??= extractRoutesAndCreateRouteTree({\n      url,\n      manifest\n    }).then(({\n      routeTree,\n      errors\n    }) => {\n      if (errors.length > 0) {\n        throw new Error('Error(s) occurred while extracting routes:\\n' + errors.map(error => `- ${error}`).join('\\n'));\n      }\n      return new ServerRouter(routeTree);\n    }).finally(() => {\n      ServerRouter.#extractionPromise = undefined;\n    });\n    return ServerRouter.#extractionPromise;\n  }\n  /**\n   * Matches a request URL against the route tree to retrieve route metadata.\n   *\n   * This method strips 'index.html' from the URL if it is present and then attempts\n   * to find a match in the route tree. If a match is found, it returns the associated\n   * route metadata; otherwise, it returns `undefined`.\n   *\n   * @param url - The URL to be matched against the route tree.\n   * @returns The metadata for the matched route or `undefined` if no match is found.\n   */\n  match(url) {\n    // Strip 'index.html' from URL if present.\n    // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.\n    const {\n      pathname\n    } = stripIndexHtmlFromURL(url);\n    return this.routeTree.match(decodeURIComponent(pathname));\n  }\n}\n\n/**\n * Generates a SHA-256 hash of the provided string.\n *\n * @param data - The input string to be hashed.\n * @returns A promise that resolves to the SHA-256 hash of the input,\n * represented as a hexadecimal string.\n */\nasync function sha256(data) {\n  const encodedData = new TextEncoder().encode(data);\n  const hashBuffer = await crypto.subtle.digest('SHA-256', encodedData);\n  const hashParts = [];\n  for (const h of new Uint8Array(hashBuffer)) {\n    hashParts.push(h.toString(16).padStart(2, '0'));\n  }\n  return hashParts.join('');\n}\n\n/**\n * Pattern used to extract the media query set by Beasties in an `onload` handler.\n */\nconst MEDIA_SET_HANDLER_PATTERN = /^this\\.media=[\"'](.*)[\"'];?$/;\n/**\n * Name of the attribute used to save the Beasties media query so it can be re-assigned on load.\n */\nconst CSP_MEDIA_ATTR = 'ngCspMedia';\n/**\n * Script that dynamically updates the `media` attribute of `<link>` tags based on a custom attribute (`CSP_MEDIA_ATTR`).\n *\n * NOTE:\n * We do not use `document.querySelectorAll('link').forEach((s) => s.addEventListener('load', ...)`\n * because load events are not always triggered reliably on Chrome.\n * See: https://github.com/angular/angular-cli/issues/26932 and https://crbug.com/1521256\n *\n * The script:\n * - Ensures the event target is a `<link>` tag with the `CSP_MEDIA_ATTR` attribute.\n * - Updates the `media` attribute with the value of `CSP_MEDIA_ATTR` and then removes the attribute.\n * - Removes the event listener when all relevant `<link>` tags have been processed.\n * - Uses event capturing (the `true` parameter) since load events do not bubble up the DOM.\n */\nconst LINK_LOAD_SCRIPT_CONTENT = /* @__PURE__ */(() => `(() => {\n  const CSP_MEDIA_ATTR = '${CSP_MEDIA_ATTR}';\n  const documentElement = document.documentElement;\n\n  // Listener for load events on link tags.\n  const listener = (e) => {\n    const target = e.target;\n    if (\n      !target ||\n      target.tagName !== 'LINK' ||\n      !target.hasAttribute(CSP_MEDIA_ATTR)\n    ) {\n      return;\n    }\n\n    target.media = target.getAttribute(CSP_MEDIA_ATTR);\n    target.removeAttribute(CSP_MEDIA_ATTR);\n\n    if (!document.head.querySelector(\\`link[\\${CSP_MEDIA_ATTR}]\\`)) {\n      documentElement.removeEventListener('load', listener);\n    }\n  };\n\n  documentElement.addEventListener('load', listener, true);\n})();`)();\nclass BeastiesBase extends Beasties {}\n/* eslint-enable @typescript-eslint/no-unsafe-declaration-merging */\nclass InlineCriticalCssProcessor extends BeastiesBase {\n  readFile;\n  outputPath;\n  addedCspScriptsDocuments = new WeakSet();\n  documentNonces = new WeakMap();\n  constructor(readFile, outputPath) {\n    super({\n      logger: {\n        // eslint-disable-next-line no-console\n        warn: s => console.warn(s),\n        // eslint-disable-next-line no-console\n        error: s => console.error(s),\n        info: () => {}\n      },\n      logLevel: 'warn',\n      path: outputPath,\n      publicPath: undefined,\n      compress: false,\n      pruneSource: false,\n      reduceInlineStyles: false,\n      mergeStylesheets: false,\n      // Note: if `preload` changes to anything other than `media`, the logic in\n      // `embedLinkedStylesheet` will have to be updated.\n      preload: 'media',\n      noscriptFallback: true,\n      inlineFonts: true\n    });\n    this.readFile = readFile;\n    this.outputPath = outputPath;\n  }\n  /**\n   * Override of the Beasties `embedLinkedStylesheet` method\n   * that makes it work with Angular's CSP APIs.\n   */\n  async embedLinkedStylesheet(link, document) {\n    if (link.getAttribute('media') === 'print' && link.next?.name === 'noscript') {\n      // Workaround for https://github.com/GoogleChromeLabs/critters/issues/64\n      // NB: this is only needed for the webpack based builders.\n      const media = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);\n      if (media) {\n        link.removeAttribute('onload');\n        link.setAttribute('media', media[1]);\n        link?.next?.remove();\n      }\n    }\n    const returnValue = await super.embedLinkedStylesheet(link, document);\n    const cspNonce = this.findCspNonce(document);\n    if (cspNonce) {\n      const beastiesMedia = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);\n      if (beastiesMedia) {\n        // If there's a Beasties-generated `onload` handler and the file has an Angular CSP nonce,\n        // we have to remove the handler, because it's incompatible with CSP. We save the value\n        // in a different attribute and we generate a script tag with the nonce that uses\n        // `addEventListener` to apply the media query instead.\n        link.removeAttribute('onload');\n        link.setAttribute(CSP_MEDIA_ATTR, beastiesMedia[1]);\n        this.conditionallyInsertCspLoadingScript(document, cspNonce, link);\n      }\n      // Ideally we would hook in at the time Beasties inserts the `style` tags, but there isn't\n      // a way of doing that at the moment so we fall back to doing it any time a `link` tag is\n      // inserted. We mitigate it by only iterating the direct children of the `<head>` which\n      // should be pretty shallow.\n      document.head.children.forEach(child => {\n        if (child.tagName === 'style' && !child.hasAttribute('nonce')) {\n          child.setAttribute('nonce', cspNonce);\n        }\n      });\n    }\n    return returnValue;\n  }\n  /**\n   * Finds the CSP nonce for a specific document.\n   */\n  findCspNonce(document) {\n    if (this.documentNonces.has(document)) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return this.documentNonces.get(document);\n    }\n    // HTML attribute are case-insensitive, but the parser used by Beasties is case-sensitive.\n    const nonceElement = document.querySelector('[ngCspNonce], [ngcspnonce]');\n    const cspNonce = nonceElement?.getAttribute('ngCspNonce') || nonceElement?.getAttribute('ngcspnonce') || null;\n    this.documentNonces.set(document, cspNonce);\n    return cspNonce;\n  }\n  /**\n   * Inserts the `script` tag that swaps the critical CSS at runtime,\n   * if one hasn't been inserted into the document already.\n   */\n  conditionallyInsertCspLoadingScript(document, nonce, link) {\n    if (this.addedCspScriptsDocuments.has(document)) {\n      return;\n    }\n    if (document.head.textContent.includes(LINK_LOAD_SCRIPT_CONTENT)) {\n      // Script was already added during the build.\n      this.addedCspScriptsDocuments.add(document);\n      return;\n    }\n    const script = document.createElement('script');\n    script.setAttribute('nonce', nonce);\n    script.textContent = LINK_LOAD_SCRIPT_CONTENT;\n    // Prepend the script to the head since it needs to\n    // run as early as possible, before the `link` tags.\n    document.head.insertBefore(script, link);\n    this.addedCspScriptsDocuments.add(document);\n  }\n}\n\n/**\n * A Least Recently Used (LRU) cache implementation.\n *\n * This cache stores a fixed number of key-value pairs, and when the cache exceeds its capacity,\n * the least recently accessed items are evicted.\n *\n * @template Key - The type of the cache keys.\n * @template Value - The type of the cache values.\n */\nclass LRUCache {\n  /**\n   * The maximum number of items the cache can hold.\n   */\n  capacity;\n  /**\n   * Internal storage for the cache, mapping keys to their associated nodes in the linked list.\n   */\n  cache = new Map();\n  /**\n   * Head of the doubly linked list, representing the most recently used item.\n   */\n  head;\n  /**\n   * Tail of the doubly linked list, representing the least recently used item.\n   */\n  tail;\n  /**\n   * Creates a new LRUCache instance.\n   * @param capacity The maximum number of items the cache can hold.\n   */\n  constructor(capacity) {\n    this.capacity = capacity;\n  }\n  /**\n   * Gets the value associated with the given key.\n   * @param key The key to retrieve the value for.\n   * @returns The value associated with the key, or undefined if the key is not found.\n   */\n  get(key) {\n    const node = this.cache.get(key);\n    if (node) {\n      this.moveToHead(node);\n      return node.value;\n    }\n    return undefined;\n  }\n  /**\n   * Puts a key-value pair into the cache.\n   * If the key already exists, the value is updated.\n   * If the cache is full, the least recently used item is evicted.\n   * @param key The key to insert or update.\n   * @param value The value to associate with the key.\n   */\n  put(key, value) {\n    const cachedNode = this.cache.get(key);\n    if (cachedNode) {\n      // Update existing node\n      cachedNode.value = value;\n      this.moveToHead(cachedNode);\n      return;\n    }\n    // Create a new node\n    const newNode = {\n      key,\n      value,\n      prev: undefined,\n      next: undefined\n    };\n    this.cache.set(key, newNode);\n    this.addToHead(newNode);\n    if (this.cache.size > this.capacity) {\n      // Evict the LRU item\n      const tail = this.removeTail();\n      if (tail) {\n        this.cache.delete(tail.key);\n      }\n    }\n  }\n  /**\n   * Adds a node to the head of the linked list.\n   * @param node The node to add.\n   */\n  addToHead(node) {\n    node.next = this.head;\n    node.prev = undefined;\n    if (this.head) {\n      this.head.prev = node;\n    }\n    this.head = node;\n    if (!this.tail) {\n      this.tail = node;\n    }\n  }\n  /**\n   * Removes a node from the linked list.\n   * @param node The node to remove.\n   */\n  removeNode(node) {\n    if (node.prev) {\n      node.prev.next = node.next;\n    } else {\n      this.head = node.next;\n    }\n    if (node.next) {\n      node.next.prev = node.prev;\n    } else {\n      this.tail = node.prev;\n    }\n  }\n  /**\n   * Moves a node to the head of the linked list.\n   * @param node The node to move.\n   */\n  moveToHead(node) {\n    this.removeNode(node);\n    this.addToHead(node);\n  }\n  /**\n   * Removes the tail node from the linked list.\n   * @returns The removed tail node, or undefined if the list is empty.\n   */\n  removeTail() {\n    const node = this.tail;\n    if (node) {\n      this.removeNode(node);\n    }\n    return node;\n  }\n}\n\n/**\n * Maximum number of critical CSS entries the cache can store.\n * This value determines the capacity of the LRU (Least Recently Used) cache, which stores critical CSS for pages.\n */\nconst MAX_INLINE_CSS_CACHE_ENTRIES = 50;\n/**\n * A mapping of `RenderMode` enum values to corresponding string representations.\n *\n * This record is used to map each `RenderMode` to a specific string value that represents\n * the server context. The string values are used internally to differentiate\n * between various rendering strategies when processing routes.\n *\n * - `RenderMode.Prerender` maps to `'ssg'` (Static Site Generation).\n * - `RenderMode.Server` maps to `'ssr'` (Server-Side Rendering).\n * - `RenderMode.Client` maps to an empty string `''` (Client-Side Rendering, no server context needed).\n */\nconst SERVER_CONTEXT_VALUE = {\n  [RenderMode.Prerender]: 'ssg',\n  [RenderMode.Server]: 'ssr',\n  [RenderMode.Client]: ''\n};\n/**\n * Represents a locale-specific Angular server application managed by the server application engine.\n *\n * The `AngularServerApp` class handles server-side rendering and asset management for a specific locale.\n */\nclass AngularServerApp {\n  options;\n  /**\n   * Whether prerendered routes should be rendered on demand or served directly.\n   *\n   * @see {@link AngularServerAppOptions.allowStaticRouteRender} for more details.\n   */\n  allowStaticRouteRender;\n  /**\n   * Hooks for extending or modifying server behavior.\n   *\n   * @see {@link AngularServerAppOptions.hooks} for more details.\n   */\n  hooks;\n  /**\n   * Constructs an instance of `AngularServerApp`.\n   *\n   * @param options Optional configuration options for the server application.\n   */\n  constructor(options = {}) {\n    this.options = options;\n    this.allowStaticRouteRender = this.options.allowStaticRouteRender ?? false;\n    this.hooks = options.hooks ?? new Hooks();\n  }\n  /**\n   * The manifest associated with this server application.\n   */\n  manifest = getAngularAppManifest();\n  /**\n   * An instance of ServerAsset that handles server-side asset.\n   */\n  assets = new ServerAssets(this.manifest);\n  /**\n   * The router instance used for route matching and handling.\n   */\n  router;\n  /**\n   * The `inlineCriticalCssProcessor` is responsible for handling critical CSS inlining.\n   */\n  inlineCriticalCssProcessor;\n  /**\n   * The bootstrap mechanism for the server application.\n   */\n  boostrap;\n  /**\n   * Cache for storing critical CSS for pages.\n   * Stores a maximum of MAX_INLINE_CSS_CACHE_ENTRIES entries.\n   *\n   * Uses an LRU (Least Recently Used) eviction policy, meaning that when the cache is full,\n   * the least recently accessed page's critical CSS will be removed to make space for new entries.\n   */\n  criticalCssLRUCache = new LRUCache(MAX_INLINE_CSS_CACHE_ENTRIES);\n  /**\n   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n   *\n   * @param request - The HTTP request to handle.\n   * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n   *\n   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n   * corresponding to `https://www.example.com/page`.\n   */\n  async handle(request, requestContext) {\n    const url = new URL(request.url);\n    this.router ??= await ServerRouter.from(this.manifest, url);\n    const matchedRoute = this.router.match(url);\n    if (!matchedRoute) {\n      // Not a known Angular route.\n      return null;\n    }\n    const {\n      redirectTo,\n      status,\n      renderMode\n    } = matchedRoute;\n    if (redirectTo !== undefined) {\n      return new Response(null, {\n        // Note: The status code is validated during route extraction.\n        // 302 Found is used by default for redirections\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static#status\n        status: status ?? 302,\n        headers: {\n          'Location': buildPathWithParams(redirectTo, url.pathname)\n        }\n      });\n    }\n    if (renderMode === RenderMode.Prerender) {\n      const response = await this.handleServe(request, matchedRoute);\n      if (response) {\n        return response;\n      }\n    }\n    return promiseWithAbort(this.handleRendering(request, matchedRoute, requestContext), request.signal, `Request for: ${request.url}`);\n  }\n  /**\n   * Handles serving a prerendered static asset if available for the matched route.\n   *\n   * This method only supports `GET` and `HEAD` requests.\n   *\n   * @param request - The incoming HTTP request for serving a static page.\n   * @param matchedRoute - The metadata of the matched route for rendering.\n   * If not provided, the method attempts to find a matching route based on the request URL.\n   * @returns A promise that resolves to a `Response` object if the prerendered page is found, or `null`.\n   */\n  async handleServe(request, matchedRoute) {\n    const {\n      headers,\n      renderMode\n    } = matchedRoute;\n    if (renderMode !== RenderMode.Prerender) {\n      return null;\n    }\n    const {\n      method\n    } = request;\n    if (method !== 'GET' && method !== 'HEAD') {\n      return null;\n    }\n    const assetPath = this.buildServerAssetPathFromRequest(request);\n    const {\n      manifest: {\n        locale\n      },\n      assets\n    } = this;\n    if (!assets.hasServerAsset(assetPath)) {\n      return null;\n    }\n    const {\n      text,\n      hash,\n      size\n    } = assets.getServerAsset(assetPath);\n    const etag = `\"${hash}\"`;\n    return request.headers.get('if-none-match') === etag ? new Response(undefined, {\n      status: 304,\n      statusText: 'Not Modified'\n    }) : new Response(await text(), {\n      headers: {\n        'Content-Length': size.toString(),\n        'ETag': etag,\n        'Content-Type': 'text/html;charset=UTF-8',\n        ...(locale !== undefined ? {\n          'Content-Language': locale\n        } : {}),\n        ...headers\n      }\n    });\n  }\n  /**\n   * Handles the server-side rendering process for the given HTTP request.\n   * This method matches the request URL to a route and performs rendering if a matching route is found.\n   *\n   * @param request - The incoming HTTP request to be processed.\n   * @param matchedRoute - The metadata of the matched route for rendering.\n   * If not provided, the method attempts to find a matching route based on the request URL.\n   * @param requestContext - Optional additional context for rendering, such as request metadata.\n   *\n   * @returns A promise that resolves to the rendered response, or null if no matching route is found.\n   */\n  async handleRendering(request, matchedRoute, requestContext) {\n    const {\n      renderMode,\n      headers,\n      status\n    } = matchedRoute;\n    if (!this.allowStaticRouteRender && renderMode === RenderMode.Prerender) {\n      return null;\n    }\n    const url = new URL(request.url);\n    const platformProviders = [];\n    const {\n      manifest: {\n        bootstrap,\n        inlineCriticalCss,\n        locale\n      },\n      assets\n    } = this;\n    // Initialize the response with status and headers if available.\n    const responseInit = {\n      status,\n      headers: new Headers({\n        'Content-Type': 'text/html;charset=UTF-8',\n        ...(locale !== undefined ? {\n          'Content-Language': locale\n        } : {}),\n        ...headers\n      })\n    };\n    if (renderMode === RenderMode.Server) {\n      // Configure platform providers for request and response only for SSR.\n      platformProviders.push({\n        provide: REQUEST,\n        useValue: request\n      }, {\n        provide: REQUEST_CONTEXT,\n        useValue: requestContext\n      }, {\n        provide: RESPONSE_INIT,\n        useValue: responseInit\n      });\n    } else if (renderMode === RenderMode.Client) {\n      // Serve the client-side rendered version if the route is configured for CSR.\n      let html = await assets.getServerAsset('index.csr.html').text();\n      html = await this.runTransformsOnHtml(html, url);\n      return new Response(html, responseInit);\n    }\n    if (locale !== undefined) {\n      platformProviders.push({\n        provide: LOCALE_ID,\n        useValue: locale\n      });\n    }\n    this.boostrap ??= await bootstrap();\n    let html = await assets.getIndexServerHtml().text();\n    html = await this.runTransformsOnHtml(html, url);\n    html = await renderAngular(html, this.boostrap, url, platformProviders, SERVER_CONTEXT_VALUE[renderMode]);\n    if (inlineCriticalCss) {\n      // Optionally inline critical CSS.\n      this.inlineCriticalCssProcessor ??= new InlineCriticalCssProcessor(path => {\n        const fileName = path.split('/').pop() ?? path;\n        return this.assets.getServerAsset(fileName).text();\n      });\n      // TODO(alanagius): remove once Node.js version 18 is no longer supported.\n      if (renderMode === RenderMode.Server && typeof crypto === 'undefined') {\n        // eslint-disable-next-line no-console\n        console.error(`The global 'crypto' module is unavailable. ` + `If you are running on Node.js, please ensure you are using version 20 or later, ` + `which includes built-in support for the Web Crypto module.`);\n      }\n      if (renderMode === RenderMode.Server && typeof crypto !== 'undefined') {\n        // Only cache if we are running in SSR Mode.\n        const cacheKey = await sha256(html);\n        let htmlWithCriticalCss = this.criticalCssLRUCache.get(cacheKey);\n        if (htmlWithCriticalCss === undefined) {\n          htmlWithCriticalCss = await this.inlineCriticalCssProcessor.process(html);\n          this.criticalCssLRUCache.put(cacheKey, htmlWithCriticalCss);\n        }\n        html = htmlWithCriticalCss;\n      } else {\n        html = await this.inlineCriticalCssProcessor.process(html);\n      }\n    }\n    return new Response(html, responseInit);\n  }\n  /**\n   * Constructs the asset path on the server based on the provided HTTP request.\n   *\n   * This method processes the incoming request URL to derive a path corresponding\n   * to the requested asset. It ensures the path points to the correct file (e.g.,\n   * `index.html`) and removes any base href if it is not part of the asset path.\n   *\n   * @param request - The incoming HTTP request object.\n   * @returns The server-relative asset path derived from the request.\n   */\n  buildServerAssetPathFromRequest(request) {\n    let {\n      pathname: assetPath\n    } = new URL(request.url);\n    if (!assetPath.endsWith('/index.html')) {\n      // Append \"index.html\" to build the default asset path.\n      assetPath = joinUrlParts(assetPath, 'index.html');\n    }\n    const {\n      baseHref\n    } = this.manifest;\n    // Check if the asset path starts with the base href and the base href is not (`/` or ``).\n    if (baseHref.length > 1 && assetPath.startsWith(baseHref)) {\n      // Remove the base href from the start of the asset path to align with server-asset expectations.\n      assetPath = assetPath.slice(baseHref.length);\n    }\n    return stripLeadingSlash(assetPath);\n  }\n  /**\n   * Runs the registered transform hooks on the given HTML content.\n   *\n   * @param html - The raw HTML content to be transformed.\n   * @param url - The URL associated with the HTML content, used for context during transformations.\n   * @returns A promise that resolves to the transformed HTML string.\n   */\n  async runTransformsOnHtml(html, url) {\n    if (this.hooks.has('html:transform:pre')) {\n      html = await this.hooks.run('html:transform:pre', {\n        html,\n        url\n      });\n    }\n    return html;\n  }\n}\nlet angularServerApp;\n/**\n * Retrieves or creates an instance of `AngularServerApp`.\n * - If an instance of `AngularServerApp` already exists, it will return the existing one.\n * - If no instance exists, it will create a new one with the provided options.\n *\n * @param options Optional configuration options for the server application.\n *\n * @returns The existing or newly created instance of `AngularServerApp`.\n */\nfunction getOrCreateAngularServerApp(options) {\n  return angularServerApp ??= new AngularServerApp(options);\n}\n/**\n * Destroys the existing `AngularServerApp` instance, releasing associated resources and resetting the\n * reference to `undefined`.\n *\n * This function is primarily used to enable the recreation of the `AngularServerApp` instance,\n * typically when server configuration or application state needs to be refreshed.\n */\nfunction destroyAngularServerApp() {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // Need to clean up GENERATED_COMP_IDS map in `@angular/core`.\n    // Otherwise an incorrect component ID generation collision detected warning will be displayed in development.\n    // See: https://github.com/angular/angular-cli/issues/25924\n    _resetCompiledComponents();\n  }\n  angularServerApp = undefined;\n}\n\n// ɵgetRoutesFromAngularRouterConfig is only used by the Webpack based server builder.\n\n/**\n * Extracts a potential locale ID from a given URL based on the specified base path.\n *\n * This function parses the URL to locate a potential locale identifier that immediately\n * follows the base path segment in the URL's pathname. If the URL does not contain a valid\n * locale ID, an empty string is returned.\n *\n * @param url - The full URL from which to extract the locale ID.\n * @param basePath - The base path used as the reference point for extracting the locale ID.\n * @returns The extracted locale ID if present, or an empty string if no valid locale ID is found.\n *\n * @example\n * ```js\n * const url = new URL('https://example.com/base/en/page');\n * const basePath = '/base';\n * const localeId = getPotentialLocaleIdFromUrl(url, basePath);\n * console.log(localeId); // Output: 'en'\n * ```\n */\nfunction getPotentialLocaleIdFromUrl(url, basePath) {\n  const {\n    pathname\n  } = url;\n  // Move forward of the base path section.\n  let start = basePath.length;\n  if (pathname[start] === '/') {\n    start++;\n  }\n  // Find the next forward slash.\n  let end = pathname.indexOf('/', start);\n  if (end === -1) {\n    end = pathname.length;\n  }\n  // Extract the potential locale id.\n  return pathname.slice(start, end);\n}\n\n/**\n * Angular server application engine.\n * Manages Angular server applications (including localized ones), handles rendering requests,\n * and optionally transforms index HTML before rendering.\n *\n * @remarks This class should be instantiated once and used as a singleton across the server-side\n * application to ensure consistent handling of rendering requests and resource management.\n *\n * @developerPreview\n */\nclass AngularAppEngine {\n  /**\n   * A flag to enable or disable the rendering of prerendered routes.\n   *\n   * Typically used during development to avoid prerendering all routes ahead of time,\n   * allowing them to be rendered on the fly as requested.\n   *\n   * @private\n   */\n  static ɵallowStaticRouteRender = false;\n  /**\n   * Hooks for extending or modifying the behavior of the server application.\n   * These hooks are used by the Angular CLI when running the development server and\n   * provide extensibility points for the application lifecycle.\n   *\n   * @private\n   */\n  static ɵhooks = /* #__PURE__*/new Hooks();\n  /**\n   * The manifest for the server application.\n   */\n  manifest = getAngularAppEngineManifest();\n  /**\n   * The number of entry points available in the server application's manifest.\n   */\n  entryPointsCount = Object.keys(this.manifest.entryPoints).length;\n  /**\n   * A cache that holds entry points, keyed by their potential locale string.\n   */\n  entryPointsCache = new Map();\n  /**\n   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n   *\n   * @param request - The HTTP request to handle.\n   * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n   *\n   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n   * corresponding to `https://www.example.com/page`.\n   */\n  async handle(request, requestContext) {\n    const serverApp = await this.getAngularServerAppForRequest(request);\n    return serverApp ? serverApp.handle(request, requestContext) : null;\n  }\n  /**\n   * Retrieves the Angular server application instance for a given request.\n   *\n   * This method checks if the request URL corresponds to an Angular application entry point.\n   * If so, it initializes or retrieves an instance of the Angular server application for that entry point.\n   * Requests that resemble file requests (except for `/index.html`) are skipped.\n   *\n   * @param request - The incoming HTTP request object.\n   * @returns A promise that resolves to an `AngularServerApp` instance if a valid entry point is found,\n   * or `null` if no entry point matches the request URL.\n   */\n  async getAngularServerAppForRequest(request) {\n    // Skip if the request looks like a file but not `/index.html`.\n    const url = new URL(request.url);\n    const entryPoint = await this.getEntryPointExportsForUrl(url);\n    if (!entryPoint) {\n      return null;\n    }\n    // Note: Using `instanceof` is not feasible here because `AngularServerApp` will\n    // be located in separate bundles, making `instanceof` checks unreliable.\n    const ɵgetOrCreateAngularServerApp = entryPoint.ɵgetOrCreateAngularServerApp;\n    const serverApp = ɵgetOrCreateAngularServerApp({\n      allowStaticRouteRender: AngularAppEngine.ɵallowStaticRouteRender,\n      hooks: AngularAppEngine.ɵhooks\n    });\n    return serverApp;\n  }\n  /**\n   * Retrieves the exports for a specific entry point, caching the result.\n   *\n   * @param potentialLocale - The locale string used to find the corresponding entry point.\n   * @returns A promise that resolves to the entry point exports or `undefined` if not found.\n   */\n  getEntryPointExports(potentialLocale) {\n    const cachedEntryPoint = this.entryPointsCache.get(potentialLocale);\n    if (cachedEntryPoint) {\n      return cachedEntryPoint;\n    }\n    const {\n      entryPoints\n    } = this.manifest;\n    const entryPoint = entryPoints[potentialLocale];\n    if (!entryPoint) {\n      return undefined;\n    }\n    const entryPointExports = entryPoint();\n    this.entryPointsCache.set(potentialLocale, entryPointExports);\n    return entryPointExports;\n  }\n  /**\n   * Retrieves the entry point for a given URL by determining the locale and mapping it to\n   * the appropriate application bundle.\n   *\n   * This method determines the appropriate entry point and locale for rendering the application by examining the URL.\n   * If there is only one entry point available, it is returned regardless of the URL.\n   * Otherwise, the method extracts a potential locale identifier from the URL and looks up the corresponding entry point.\n   *\n   * @param url - The URL of the request.\n   * @returns A promise that resolves to the entry point exports or `undefined` if not found.\n   */\n  getEntryPointExportsForUrl(url) {\n    const {\n      basePath\n    } = this.manifest;\n    if (this.entryPointsCount === 1) {\n      return this.getEntryPointExports('');\n    }\n    const potentialLocale = getPotentialLocaleIdFromUrl(url, basePath);\n    return this.getEntryPointExports(potentialLocale);\n  }\n}\n\n/**\n * Annotates a request handler function with metadata, marking it as a special\n * handler.\n *\n * @param handler - The request handler function to be annotated.\n * @returns The same handler function passed in, with metadata attached.\n *\n * @example\n * Example usage in a Hono application:\n * ```ts\n * const app = new Hono();\n * export default createRequestHandler(app.fetch);\n * ```\n *\n * @example\n * Example usage in a H3 application:\n * ```ts\n * const app = createApp();\n * const handler = toWebHandler(app);\n * export default createRequestHandler(handler);\n * ```\n * @developerPreview\n */\nfunction createRequestHandler(handler) {\n  handler['__ng_request_handler__'] = true;\n  return handler;\n}\nexport { AngularAppEngine, PrerenderFallback, RenderMode, createRequestHandler, provideServerRoutesConfig, InlineCriticalCssProcessor as ɵInlineCriticalCssProcessor, destroyAngularServerApp as ɵdestroyAngularServerApp, extractRoutesAndCreateRouteTree as ɵextractRoutesAndCreateRouteTree, getOrCreateAngularServerApp as ɵgetOrCreateAngularServerApp, getRoutesFromAngularRouterConfig as ɵgetRoutesFromAngularRouterConfig, setAngularAppEngineManifest as ɵsetAngularAppEngineManifest, setAngularAppManifest as ɵsetAngularAppManifest };\n"],
-  "mappings": "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AG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GA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O,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAA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QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,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",
-  "names": ["input", "path", "root", "a", "spacing", "node", "stringify", "cloneNode", "Node", "result", "stringifier", "Comment", "parse", "Root", "Container", "Document", "dirname", "join", "isAbsolute", "resolve", "sep", "_a", "relative", "Parser", "open", "parser", "processor", "warning", "warnOnce", "postcss", "filter", "ElementType", "CharCodes", "BinTrieFlags", "EntityDecoderState", "DecodingMode", "EntityLevel", "EncodingMode", "attributes", "DocumentPosition", "href", "SelectorType", "AttributeAction", "subselects", "getName", "rule", "elem", "compileToken", "State", "QuoteType", "cp", "node2", "rule2", "container", "document", "link", "path", "Console", "resolve", "RenderMode", "PrerenderFallback", "node", "_a", "loadChildren", "document", "result", "readFile", "link", "html"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-NLOHPSEA.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-NLOHPSEA.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,5939 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  DOCUMENT,
-  HashLocationStrategy,
-  LOCATION_INITIALIZED,
-  Location,
-  LocationStrategy,
-  PathLocationStrategy,
-  Title,
-  ViewportScroller
-} from "./chunk-ZI5JGHU3.js";
-import {
-  APP_BOOTSTRAP_LISTENER,
-  APP_INITIALIZER,
-  ApplicationRef,
-  Attribute,
-  ChangeDetectorRef,
-  Compiler,
-  Component,
-  Console,
-  ContentChildren,
-  Directive,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EnvironmentInjector,
-  EventEmitter,
-  HostBinding,
-  HostListener,
-  Inject,
-  InjectFlags,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  NgModule,
-  NgModuleFactory$1,
-  NgZone,
-  Optional,
-  Output,
-  PendingTasksInternal,
-  Renderer2,
-  RuntimeError,
-  SkipSelf,
-  Version,
-  ViewContainerRef,
-  afterNextRender,
-  booleanAttribute,
-  createEnvironmentInjector,
-  inject,
-  input,
-  isInjectable,
-  isNgModule,
-  isPromise,
-  isStandalone,
-  makeEnvironmentProviders,
-  publishExternalGlobalUtil,
-  reflectComponentType,
-  require_cjs,
-  require_operators,
-  runInInjectionContext,
-  setClassMetadata,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵattribute,
-  ɵɵcontentQuery,
-  ɵɵdefineComponent,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdirectiveInject,
-  ɵɵelement,
-  ɵɵgetInheritedFactory,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵinvalidFactory,
-  ɵɵlistener,
-  ɵɵloadQuery,
-  ɵɵqueryRefresh,
-  ɵɵsanitizeUrlOrResourceUrl
-} from "./chunk-PEAVEDUD.js";
-import {
-  __spreadProps,
-  __spreadValues,
-  __toESM
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/@angular/router/fesm2022/router.mjs
-var import_rxjs = __toESM(require_cjs(), 1);
-var import_operators = __toESM(require_operators(), 1);
-var PRIMARY_OUTLET = "primary";
-var RouteTitleKey = Symbol("RouteTitle");
-var ParamsAsMap = class {
-  params;
-  constructor(params) {
-    this.params = params || {};
-  }
-  has(name) {
-    return Object.prototype.hasOwnProperty.call(this.params, name);
-  }
-  get(name) {
-    if (this.has(name)) {
-      const v = this.params[name];
-      return Array.isArray(v) ? v[0] : v;
-    }
-    return null;
-  }
-  getAll(name) {
-    if (this.has(name)) {
-      const v = this.params[name];
-      return Array.isArray(v) ? v : [v];
-    }
-    return [];
-  }
-  get keys() {
-    return Object.keys(this.params);
-  }
-};
-function convertToParamMap(params) {
-  return new ParamsAsMap(params);
-}
-function defaultUrlMatcher(segments, segmentGroup, route) {
-  const parts = route.path.split("/");
-  if (parts.length > segments.length) {
-    return null;
-  }
-  if (route.pathMatch === "full" && (segmentGroup.hasChildren() || parts.length < segments.length)) {
-    return null;
-  }
-  const posParams = {};
-  for (let index = 0; index < parts.length; index++) {
-    const part = parts[index];
-    const segment = segments[index];
-    const isParameter = part[0] === ":";
-    if (isParameter) {
-      posParams[part.substring(1)] = segment;
-    } else if (part !== segment.path) {
-      return null;
-    }
-  }
-  return {
-    consumed: segments.slice(0, parts.length),
-    posParams
-  };
-}
-function shallowEqualArrays(a, b) {
-  if (a.length !== b.length) return false;
-  for (let i = 0; i < a.length; ++i) {
-    if (!shallowEqual(a[i], b[i])) return false;
-  }
-  return true;
-}
-function shallowEqual(a, b) {
-  const k1 = a ? getDataKeys(a) : void 0;
-  const k2 = b ? getDataKeys(b) : void 0;
-  if (!k1 || !k2 || k1.length != k2.length) {
-    return false;
-  }
-  let key;
-  for (let i = 0; i < k1.length; i++) {
-    key = k1[i];
-    if (!equalArraysOrString(a[key], b[key])) {
-      return false;
-    }
-  }
-  return true;
-}
-function getDataKeys(obj) {
-  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];
-}
-function equalArraysOrString(a, b) {
-  if (Array.isArray(a) && Array.isArray(b)) {
-    if (a.length !== b.length) return false;
-    const aSorted = [...a].sort();
-    const bSorted = [...b].sort();
-    return aSorted.every((val, index) => bSorted[index] === val);
-  } else {
-    return a === b;
-  }
-}
-function last(a) {
-  return a.length > 0 ? a[a.length - 1] : null;
-}
-function wrapIntoObservable(value) {
-  if ((0, import_rxjs.isObservable)(value)) {
-    return value;
-  }
-  if (isPromise(value)) {
-    return (0, import_rxjs.from)(Promise.resolve(value));
-  }
-  return (0, import_rxjs.of)(value);
-}
-var pathCompareMap = {
-  "exact": equalSegmentGroups,
-  "subset": containsSegmentGroup
-};
-var paramCompareMap = {
-  "exact": equalParams,
-  "subset": containsParams,
-  "ignored": () => true
-};
-function containsTree(container, containee, options) {
-  return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === "exact" && container.fragment !== containee.fragment);
-}
-function equalParams(container, containee) {
-  return shallowEqual(container, containee);
-}
-function equalSegmentGroups(container, containee, matrixParams) {
-  if (!equalPath(container.segments, containee.segments)) return false;
-  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {
-    return false;
-  }
-  if (container.numberOfChildren !== containee.numberOfChildren) return false;
-  for (const c in containee.children) {
-    if (!container.children[c]) return false;
-    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;
-  }
-  return true;
-}
-function containsParams(container, containee) {
-  return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every((key) => equalArraysOrString(container[key], containee[key]));
-}
-function containsSegmentGroup(container, containee, matrixParams) {
-  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);
-}
-function containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {
-  if (container.segments.length > containeePaths.length) {
-    const current = container.segments.slice(0, containeePaths.length);
-    if (!equalPath(current, containeePaths)) return false;
-    if (containee.hasChildren()) return false;
-    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;
-    return true;
-  } else if (container.segments.length === containeePaths.length) {
-    if (!equalPath(container.segments, containeePaths)) return false;
-    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;
-    for (const c in containee.children) {
-      if (!container.children[c]) return false;
-      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {
-        return false;
-      }
-    }
-    return true;
-  } else {
-    const current = containeePaths.slice(0, container.segments.length);
-    const next = containeePaths.slice(container.segments.length);
-    if (!equalPath(container.segments, current)) return false;
-    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;
-    if (!container.children[PRIMARY_OUTLET]) return false;
-    return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);
-  }
-}
-function matrixParamsMatch(containerPaths, containeePaths, options) {
-  return containeePaths.every((containeeSegment, i) => {
-    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);
-  });
-}
-var UrlTree = class {
-  root;
-  queryParams;
-  fragment;
-  /** @internal */
-  _queryParamMap;
-  constructor(root = new UrlSegmentGroup([], {}), queryParams = {}, fragment = null) {
-    this.root = root;
-    this.queryParams = queryParams;
-    this.fragment = fragment;
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (root.segments.length > 0) {
-        throw new RuntimeError(4015, "The root `UrlSegmentGroup` should not contain `segments`. Instead, these segments belong in the `children` so they can be associated with a named outlet.");
-      }
-    }
-  }
-  get queryParamMap() {
-    this._queryParamMap ??= convertToParamMap(this.queryParams);
-    return this._queryParamMap;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return DEFAULT_SERIALIZER.serialize(this);
-  }
-};
-var UrlSegmentGroup = class {
-  segments;
-  children;
-  /** The parent node in the url tree */
-  parent = null;
-  constructor(segments, children) {
-    this.segments = segments;
-    this.children = children;
-    Object.values(children).forEach((v) => v.parent = this);
-  }
-  /** Whether the segment has child segments */
-  hasChildren() {
-    return this.numberOfChildren > 0;
-  }
-  /** Number of child segments */
-  get numberOfChildren() {
-    return Object.keys(this.children).length;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return serializePaths(this);
-  }
-};
-var UrlSegment = class {
-  path;
-  parameters;
-  /** @internal */
-  _parameterMap;
-  constructor(path, parameters) {
-    this.path = path;
-    this.parameters = parameters;
-  }
-  get parameterMap() {
-    this._parameterMap ??= convertToParamMap(this.parameters);
-    return this._parameterMap;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return serializePath(this);
-  }
-};
-function equalSegments(as, bs) {
-  return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));
-}
-function equalPath(as, bs) {
-  if (as.length !== bs.length) return false;
-  return as.every((a, i) => a.path === bs[i].path);
-}
-function mapChildrenIntoArray(segment, fn) {
-  let res = [];
-  Object.entries(segment.children).forEach(([childOutlet, child]) => {
-    if (childOutlet === PRIMARY_OUTLET) {
-      res = res.concat(fn(child, childOutlet));
-    }
-  });
-  Object.entries(segment.children).forEach(([childOutlet, child]) => {
-    if (childOutlet !== PRIMARY_OUTLET) {
-      res = res.concat(fn(child, childOutlet));
-    }
-  });
-  return res;
-}
-var UrlSerializer = class _UrlSerializer {
-  static ɵfac = function UrlSerializer_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UrlSerializer)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _UrlSerializer,
-    factory: () => (() => new DefaultUrlSerializer())(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UrlSerializer, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => new DefaultUrlSerializer()
-    }]
-  }], null, null);
-})();
-var DefaultUrlSerializer = class {
-  /** Parses a url into a `UrlTree` */
-  parse(url) {
-    const p = new UrlParser(url);
-    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());
-  }
-  /** Converts a `UrlTree` into a url */
-  serialize(tree2) {
-    const segment = `/${serializeSegment(tree2.root, true)}`;
-    const query = serializeQueryParams(tree2.queryParams);
-    const fragment = typeof tree2.fragment === `string` ? `#${encodeUriFragment(tree2.fragment)}` : "";
-    return `${segment}${query}${fragment}`;
-  }
-};
-var DEFAULT_SERIALIZER = new DefaultUrlSerializer();
-function serializePaths(segment) {
-  return segment.segments.map((p) => serializePath(p)).join("/");
-}
-function serializeSegment(segment, root) {
-  if (!segment.hasChildren()) {
-    return serializePaths(segment);
-  }
-  if (root) {
-    const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : "";
-    const children = [];
-    Object.entries(segment.children).forEach(([k, v]) => {
-      if (k !== PRIMARY_OUTLET) {
-        children.push(`${k}:${serializeSegment(v, false)}`);
-      }
-    });
-    return children.length > 0 ? `${primary}(${children.join("//")})` : primary;
-  } else {
-    const children = mapChildrenIntoArray(segment, (v, k) => {
-      if (k === PRIMARY_OUTLET) {
-        return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];
-      }
-      return [`${k}:${serializeSegment(v, false)}`];
-    });
-    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {
-      return `${serializePaths(segment)}/${children[0]}`;
-    }
-    return `${serializePaths(segment)}/(${children.join("//")})`;
-  }
-}
-function encodeUriString(s) {
-  return encodeURIComponent(s).replace(/%40/g, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",");
-}
-function encodeUriQuery(s) {
-  return encodeUriString(s).replace(/%3B/gi, ";");
-}
-function encodeUriFragment(s) {
-  return encodeURI(s);
-}
-function encodeUriSegment(s) {
-  return encodeUriString(s).replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/%26/gi, "&");
-}
-function decode(s) {
-  return decodeURIComponent(s);
-}
-function decodeQuery(s) {
-  return decode(s.replace(/\+/g, "%20"));
-}
-function serializePath(path) {
-  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;
-}
-function serializeMatrixParams(params) {
-  return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join("");
-}
-function serializeQueryParams(params) {
-  const strParams = Object.entries(params).map(([name, value]) => {
-    return Array.isArray(value) ? value.map((v) => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join("&") : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;
-  }).filter((s) => s);
-  return strParams.length ? `?${strParams.join("&")}` : "";
-}
-var SEGMENT_RE = /^[^\/()?;#]+/;
-function matchSegments(str) {
-  const match2 = str.match(SEGMENT_RE);
-  return match2 ? match2[0] : "";
-}
-var MATRIX_PARAM_SEGMENT_RE = /^[^\/()?;=#]+/;
-function matchMatrixKeySegments(str) {
-  const match2 = str.match(MATRIX_PARAM_SEGMENT_RE);
-  return match2 ? match2[0] : "";
-}
-var QUERY_PARAM_RE = /^[^=?&#]+/;
-function matchQueryParams(str) {
-  const match2 = str.match(QUERY_PARAM_RE);
-  return match2 ? match2[0] : "";
-}
-var QUERY_PARAM_VALUE_RE = /^[^&#]+/;
-function matchUrlQueryParamValue(str) {
-  const match2 = str.match(QUERY_PARAM_VALUE_RE);
-  return match2 ? match2[0] : "";
-}
-var UrlParser = class {
-  url;
-  remaining;
-  constructor(url) {
-    this.url = url;
-    this.remaining = url;
-  }
-  parseRootSegment() {
-    this.consumeOptional("/");
-    if (this.remaining === "" || this.peekStartsWith("?") || this.peekStartsWith("#")) {
-      return new UrlSegmentGroup([], {});
-    }
-    return new UrlSegmentGroup([], this.parseChildren());
-  }
-  parseQueryParams() {
-    const params = {};
-    if (this.consumeOptional("?")) {
-      do {
-        this.parseQueryParam(params);
-      } while (this.consumeOptional("&"));
-    }
-    return params;
-  }
-  parseFragment() {
-    return this.consumeOptional("#") ? decodeURIComponent(this.remaining) : null;
-  }
-  parseChildren() {
-    if (this.remaining === "") {
-      return {};
-    }
-    this.consumeOptional("/");
-    const segments = [];
-    if (!this.peekStartsWith("(")) {
-      segments.push(this.parseSegment());
-    }
-    while (this.peekStartsWith("/") && !this.peekStartsWith("//") && !this.peekStartsWith("/(")) {
-      this.capture("/");
-      segments.push(this.parseSegment());
-    }
-    let children = {};
-    if (this.peekStartsWith("/(")) {
-      this.capture("/");
-      children = this.parseParens(true);
-    }
-    let res = {};
-    if (this.peekStartsWith("(")) {
-      res = this.parseParens(false);
-    }
-    if (segments.length > 0 || Object.keys(children).length > 0) {
-      res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);
-    }
-    return res;
-  }
-  // parse a segment with its matrix parameters
-  // ie `name;k1=v1;k2`
-  parseSegment() {
-    const path = matchSegments(this.remaining);
-    if (path === "" && this.peekStartsWith(";")) {
-      throw new RuntimeError(4009, (typeof ngDevMode === "undefined" || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
-    }
-    this.capture(path);
-    return new UrlSegment(decode(path), this.parseMatrixParams());
-  }
-  parseMatrixParams() {
-    const params = {};
-    while (this.consumeOptional(";")) {
-      this.parseParam(params);
-    }
-    return params;
-  }
-  parseParam(params) {
-    const key = matchMatrixKeySegments(this.remaining);
-    if (!key) {
-      return;
-    }
-    this.capture(key);
-    let value = "";
-    if (this.consumeOptional("=")) {
-      const valueMatch = matchSegments(this.remaining);
-      if (valueMatch) {
-        value = valueMatch;
-        this.capture(value);
-      }
-    }
-    params[decode(key)] = decode(value);
-  }
-  // Parse a single query parameter `name[=value]`
-  parseQueryParam(params) {
-    const key = matchQueryParams(this.remaining);
-    if (!key) {
-      return;
-    }
-    this.capture(key);
-    let value = "";
-    if (this.consumeOptional("=")) {
-      const valueMatch = matchUrlQueryParamValue(this.remaining);
-      if (valueMatch) {
-        value = valueMatch;
-        this.capture(value);
-      }
-    }
-    const decodedKey = decodeQuery(key);
-    const decodedVal = decodeQuery(value);
-    if (params.hasOwnProperty(decodedKey)) {
-      let currentVal = params[decodedKey];
-      if (!Array.isArray(currentVal)) {
-        currentVal = [currentVal];
-        params[decodedKey] = currentVal;
-      }
-      currentVal.push(decodedVal);
-    } else {
-      params[decodedKey] = decodedVal;
-    }
-  }
-  // parse `(a/b//outlet_name:c/d)`
-  parseParens(allowPrimary) {
-    const segments = {};
-    this.capture("(");
-    while (!this.consumeOptional(")") && this.remaining.length > 0) {
-      const path = matchSegments(this.remaining);
-      const next = this.remaining[path.length];
-      if (next !== "/" && next !== ")" && next !== ";") {
-        throw new RuntimeError(4010, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot parse url '${this.url}'`);
-      }
-      let outletName = void 0;
-      if (path.indexOf(":") > -1) {
-        outletName = path.slice(0, path.indexOf(":"));
-        this.capture(outletName);
-        this.capture(":");
-      } else if (allowPrimary) {
-        outletName = PRIMARY_OUTLET;
-      }
-      const children = this.parseChildren();
-      segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);
-      this.consumeOptional("//");
-    }
-    return segments;
-  }
-  peekStartsWith(str) {
-    return this.remaining.startsWith(str);
-  }
-  // Consumes the prefix when it is present and returns whether it has been consumed
-  consumeOptional(str) {
-    if (this.peekStartsWith(str)) {
-      this.remaining = this.remaining.substring(str.length);
-      return true;
-    }
-    return false;
-  }
-  capture(str) {
-    if (!this.consumeOptional(str)) {
-      throw new RuntimeError(4011, (typeof ngDevMode === "undefined" || ngDevMode) && `Expected "${str}".`);
-    }
-  }
-};
-function createRoot(rootCandidate) {
-  return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {
-    [PRIMARY_OUTLET]: rootCandidate
-  }) : rootCandidate;
-}
-function squashSegmentGroup(segmentGroup) {
-  const newChildren = {};
-  for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {
-    const childCandidate = squashSegmentGroup(child);
-    if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {
-      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {
-        newChildren[grandChildOutlet] = grandChild;
-      }
-    } else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {
-      newChildren[childOutlet] = childCandidate;
-    }
-  }
-  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);
-  return mergeTrivialChildren(s);
-}
-function mergeTrivialChildren(s) {
-  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {
-    const c = s.children[PRIMARY_OUTLET];
-    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);
-  }
-  return s;
-}
-function isUrlTree(v) {
-  return v instanceof UrlTree;
-}
-function createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null) {
-  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);
-  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);
-}
-function createSegmentGroupFromRoute(route) {
-  let targetGroup;
-  function createSegmentGroupFromRouteRecursive(currentRoute) {
-    const childOutlets = {};
-    for (const childSnapshot of currentRoute.children) {
-      const root = createSegmentGroupFromRouteRecursive(childSnapshot);
-      childOutlets[childSnapshot.outlet] = root;
-    }
-    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);
-    if (currentRoute === route) {
-      targetGroup = segmentGroup;
-    }
-    return segmentGroup;
-  }
-  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);
-  const rootSegmentGroup = createRoot(rootCandidate);
-  return targetGroup ?? rootSegmentGroup;
-}
-function createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment) {
-  let root = relativeTo;
-  while (root.parent) {
-    root = root.parent;
-  }
-  if (commands.length === 0) {
-    return tree(root, root, root, queryParams, fragment);
-  }
-  const nav = computeNavigation(commands);
-  if (nav.toRoot()) {
-    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);
-  }
-  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);
-  const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);
-  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);
-}
-function isMatrixParams(command) {
-  return typeof command === "object" && command != null && !command.outlets && !command.segmentPath;
-}
-function isCommandWithOutlets(command) {
-  return typeof command === "object" && command != null && command.outlets;
-}
-function tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment) {
-  let qp = {};
-  if (queryParams) {
-    Object.entries(queryParams).forEach(([name, value]) => {
-      qp[name] = Array.isArray(value) ? value.map((v) => `${v}`) : `${value}`;
-    });
-  }
-  let rootCandidate;
-  if (oldRoot === oldSegmentGroup) {
-    rootCandidate = newSegmentGroup;
-  } else {
-    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);
-  }
-  const newRoot = createRoot(squashSegmentGroup(rootCandidate));
-  return new UrlTree(newRoot, qp, fragment);
-}
-function replaceSegment(current, oldSegment, newSegment) {
-  const children = {};
-  Object.entries(current.children).forEach(([outletName, c]) => {
-    if (c === oldSegment) {
-      children[outletName] = newSegment;
-    } else {
-      children[outletName] = replaceSegment(c, oldSegment, newSegment);
-    }
-  });
-  return new UrlSegmentGroup(current.segments, children);
-}
-var Navigation = class {
-  isAbsolute;
-  numberOfDoubleDots;
-  commands;
-  constructor(isAbsolute, numberOfDoubleDots, commands) {
-    this.isAbsolute = isAbsolute;
-    this.numberOfDoubleDots = numberOfDoubleDots;
-    this.commands = commands;
-    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
-      throw new RuntimeError(4003, (typeof ngDevMode === "undefined" || ngDevMode) && "Root segment cannot have matrix parameters");
-    }
-    const cmdWithOutlet = commands.find(isCommandWithOutlets);
-    if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
-      throw new RuntimeError(4004, (typeof ngDevMode === "undefined" || ngDevMode) && "{outlets:{}} has to be the last command");
-    }
-  }
-  toRoot() {
-    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == "/";
-  }
-};
-function computeNavigation(commands) {
-  if (typeof commands[0] === "string" && commands.length === 1 && commands[0] === "/") {
-    return new Navigation(true, 0, commands);
-  }
-  let numberOfDoubleDots = 0;
-  let isAbsolute = false;
-  const res = commands.reduce((res2, cmd, cmdIdx) => {
-    if (typeof cmd === "object" && cmd != null) {
-      if (cmd.outlets) {
-        const outlets = {};
-        Object.entries(cmd.outlets).forEach(([name, commands2]) => {
-          outlets[name] = typeof commands2 === "string" ? commands2.split("/") : commands2;
-        });
-        return [...res2, {
-          outlets
-        }];
-      }
-      if (cmd.segmentPath) {
-        return [...res2, cmd.segmentPath];
-      }
-    }
-    if (!(typeof cmd === "string")) {
-      return [...res2, cmd];
-    }
-    if (cmdIdx === 0) {
-      cmd.split("/").forEach((urlPart, partIndex) => {
-        if (partIndex == 0 && urlPart === ".") {
-        } else if (partIndex == 0 && urlPart === "") {
-          isAbsolute = true;
-        } else if (urlPart === "..") {
-          numberOfDoubleDots++;
-        } else if (urlPart != "") {
-          res2.push(urlPart);
-        }
-      });
-      return res2;
-    }
-    return [...res2, cmd];
-  }, []);
-  return new Navigation(isAbsolute, numberOfDoubleDots, res);
-}
-var Position = class {
-  segmentGroup;
-  processChildren;
-  index;
-  constructor(segmentGroup, processChildren, index) {
-    this.segmentGroup = segmentGroup;
-    this.processChildren = processChildren;
-    this.index = index;
-  }
-};
-function findStartingPositionForTargetGroup(nav, root, target) {
-  if (nav.isAbsolute) {
-    return new Position(root, true, 0);
-  }
-  if (!target) {
-    return new Position(root, false, NaN);
-  }
-  if (target.parent === null) {
-    return new Position(target, true, 0);
-  }
-  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
-  const index = target.segments.length - 1 + modifier;
-  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);
-}
-function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
-  let g = group;
-  let ci = index;
-  let dd = numberOfDoubleDots;
-  while (dd > ci) {
-    dd -= ci;
-    g = g.parent;
-    if (!g) {
-      throw new RuntimeError(4005, (typeof ngDevMode === "undefined" || ngDevMode) && "Invalid number of '../'");
-    }
-    ci = g.segments.length;
-  }
-  return new Position(g, false, ci - dd);
-}
-function getOutlets(commands) {
-  if (isCommandWithOutlets(commands[0])) {
-    return commands[0].outlets;
-  }
-  return {
-    [PRIMARY_OUTLET]: commands
-  };
-}
-function updateSegmentGroup(segmentGroup, startIndex, commands) {
-  segmentGroup ??= new UrlSegmentGroup([], {});
-  if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
-    return updateSegmentGroupChildren(segmentGroup, startIndex, commands);
-  }
-  const m = prefixedWith(segmentGroup, startIndex, commands);
-  const slicedCommands = commands.slice(m.commandIndex);
-  if (m.match && m.pathIndex < segmentGroup.segments.length) {
-    const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});
-    g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);
-    return updateSegmentGroupChildren(g, 0, slicedCommands);
-  } else if (m.match && slicedCommands.length === 0) {
-    return new UrlSegmentGroup(segmentGroup.segments, {});
-  } else if (m.match && !segmentGroup.hasChildren()) {
-    return createNewSegmentGroup(segmentGroup, startIndex, commands);
-  } else if (m.match) {
-    return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);
-  } else {
-    return createNewSegmentGroup(segmentGroup, startIndex, commands);
-  }
-}
-function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
-  if (commands.length === 0) {
-    return new UrlSegmentGroup(segmentGroup.segments, {});
-  } else {
-    const outlets = getOutlets(commands);
-    const children = {};
-    if (Object.keys(outlets).some((o) => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {
-      const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);
-      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);
-    }
-    Object.entries(outlets).forEach(([outlet, commands2]) => {
-      if (typeof commands2 === "string") {
-        commands2 = [commands2];
-      }
-      if (commands2 !== null) {
-        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands2);
-      }
-    });
-    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {
-      if (outlets[childOutlet] === void 0) {
-        children[childOutlet] = child;
-      }
-    });
-    return new UrlSegmentGroup(segmentGroup.segments, children);
-  }
-}
-function prefixedWith(segmentGroup, startIndex, commands) {
-  let currentCommandIndex = 0;
-  let currentPathIndex = startIndex;
-  const noMatch2 = {
-    match: false,
-    pathIndex: 0,
-    commandIndex: 0
-  };
-  while (currentPathIndex < segmentGroup.segments.length) {
-    if (currentCommandIndex >= commands.length) return noMatch2;
-    const path = segmentGroup.segments[currentPathIndex];
-    const command = commands[currentCommandIndex];
-    if (isCommandWithOutlets(command)) {
-      break;
-    }
-    const curr = `${command}`;
-    const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;
-    if (currentPathIndex > 0 && curr === void 0) break;
-    if (curr && next && typeof next === "object" && next.outlets === void 0) {
-      if (!compare(curr, next, path)) return noMatch2;
-      currentCommandIndex += 2;
-    } else {
-      if (!compare(curr, {}, path)) return noMatch2;
-      currentCommandIndex++;
-    }
-    currentPathIndex++;
-  }
-  return {
-    match: true,
-    pathIndex: currentPathIndex,
-    commandIndex: currentCommandIndex
-  };
-}
-function createNewSegmentGroup(segmentGroup, startIndex, commands) {
-  const paths = segmentGroup.segments.slice(0, startIndex);
-  let i = 0;
-  while (i < commands.length) {
-    const command = commands[i];
-    if (isCommandWithOutlets(command)) {
-      const children = createNewSegmentChildren(command.outlets);
-      return new UrlSegmentGroup(paths, children);
-    }
-    if (i === 0 && isMatrixParams(commands[0])) {
-      const p = segmentGroup.segments[startIndex];
-      paths.push(new UrlSegment(p.path, stringify(commands[0])));
-      i++;
-      continue;
-    }
-    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;
-    const next = i < commands.length - 1 ? commands[i + 1] : null;
-    if (curr && next && isMatrixParams(next)) {
-      paths.push(new UrlSegment(curr, stringify(next)));
-      i += 2;
-    } else {
-      paths.push(new UrlSegment(curr, {}));
-      i++;
-    }
-  }
-  return new UrlSegmentGroup(paths, {});
-}
-function createNewSegmentChildren(outlets) {
-  const children = {};
-  Object.entries(outlets).forEach(([outlet, commands]) => {
-    if (typeof commands === "string") {
-      commands = [commands];
-    }
-    if (commands !== null) {
-      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);
-    }
-  });
-  return children;
-}
-function stringify(params) {
-  const res = {};
-  Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);
-  return res;
-}
-function compare(path, params, segment) {
-  return path == segment.path && shallowEqual(params, segment.parameters);
-}
-var IMPERATIVE_NAVIGATION = "imperative";
-var EventType;
-(function(EventType2) {
-  EventType2[EventType2["NavigationStart"] = 0] = "NavigationStart";
-  EventType2[EventType2["NavigationEnd"] = 1] = "NavigationEnd";
-  EventType2[EventType2["NavigationCancel"] = 2] = "NavigationCancel";
-  EventType2[EventType2["NavigationError"] = 3] = "NavigationError";
-  EventType2[EventType2["RoutesRecognized"] = 4] = "RoutesRecognized";
-  EventType2[EventType2["ResolveStart"] = 5] = "ResolveStart";
-  EventType2[EventType2["ResolveEnd"] = 6] = "ResolveEnd";
-  EventType2[EventType2["GuardsCheckStart"] = 7] = "GuardsCheckStart";
-  EventType2[EventType2["GuardsCheckEnd"] = 8] = "GuardsCheckEnd";
-  EventType2[EventType2["RouteConfigLoadStart"] = 9] = "RouteConfigLoadStart";
-  EventType2[EventType2["RouteConfigLoadEnd"] = 10] = "RouteConfigLoadEnd";
-  EventType2[EventType2["ChildActivationStart"] = 11] = "ChildActivationStart";
-  EventType2[EventType2["ChildActivationEnd"] = 12] = "ChildActivationEnd";
-  EventType2[EventType2["ActivationStart"] = 13] = "ActivationStart";
-  EventType2[EventType2["ActivationEnd"] = 14] = "ActivationEnd";
-  EventType2[EventType2["Scroll"] = 15] = "Scroll";
-  EventType2[EventType2["NavigationSkipped"] = 16] = "NavigationSkipped";
-})(EventType || (EventType = {}));
-var RouterEvent = class {
-  id;
-  url;
-  constructor(id, url) {
-    this.id = id;
-    this.url = url;
-  }
-};
-var NavigationStart = class extends RouterEvent {
-  type = EventType.NavigationStart;
-  /**
-   * Identifies the call or event that triggered the navigation.
-   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.
-   *
-   * @see {@link NavigationEnd}
-   * @see {@link NavigationCancel}
-   * @see {@link NavigationError}
-   */
-  navigationTrigger;
-  /**
-   * The navigation state that was previously supplied to the `pushState` call,
-   * when the navigation is triggered by a `popstate` event. Otherwise null.
-   *
-   * The state object is defined by `NavigationExtras`, and contains any
-   * developer-defined state value, as well as a unique ID that
-   * the router assigns to every router transition/navigation.
-   *
-   * From the perspective of the router, the router never "goes back".
-   * When the user clicks on the back button in the browser,
-   * a new navigation ID is created.
-   *
-   * Use the ID in this previous-state object to differentiate between a newly created
-   * state and one returned to by a `popstate` event, so that you can restore some
-   * remembered state, such as scroll position.
-   *
-   */
-  restoredState;
-  constructor(id, url, navigationTrigger = "imperative", restoredState = null) {
-    super(id, url);
-    this.navigationTrigger = navigationTrigger;
-    this.restoredState = restoredState;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;
-  }
-};
-var NavigationEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  type = EventType.NavigationEnd;
-  constructor(id, url, urlAfterRedirects) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;
-  }
-};
-var NavigationCancellationCode;
-(function(NavigationCancellationCode2) {
-  NavigationCancellationCode2[NavigationCancellationCode2["Redirect"] = 0] = "Redirect";
-  NavigationCancellationCode2[NavigationCancellationCode2["SupersededByNewNavigation"] = 1] = "SupersededByNewNavigation";
-  NavigationCancellationCode2[NavigationCancellationCode2["NoDataFromResolver"] = 2] = "NoDataFromResolver";
-  NavigationCancellationCode2[NavigationCancellationCode2["GuardRejected"] = 3] = "GuardRejected";
-})(NavigationCancellationCode || (NavigationCancellationCode = {}));
-var NavigationSkippedCode;
-(function(NavigationSkippedCode2) {
-  NavigationSkippedCode2[NavigationSkippedCode2["IgnoredSameUrlNavigation"] = 0] = "IgnoredSameUrlNavigation";
-  NavigationSkippedCode2[NavigationSkippedCode2["IgnoredByUrlHandlingStrategy"] = 1] = "IgnoredByUrlHandlingStrategy";
-})(NavigationSkippedCode || (NavigationSkippedCode = {}));
-var NavigationCancel = class extends RouterEvent {
-  reason;
-  code;
-  type = EventType.NavigationCancel;
-  constructor(id, url, reason, code) {
-    super(id, url);
-    this.reason = reason;
-    this.code = code;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;
-  }
-};
-var NavigationSkipped = class extends RouterEvent {
-  reason;
-  code;
-  type = EventType.NavigationSkipped;
-  constructor(id, url, reason, code) {
-    super(id, url);
-    this.reason = reason;
-    this.code = code;
-  }
-};
-var NavigationError = class extends RouterEvent {
-  error;
-  target;
-  type = EventType.NavigationError;
-  constructor(id, url, error, target) {
-    super(id, url);
-    this.error = error;
-    this.target = target;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;
-  }
-};
-var RoutesRecognized = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.RoutesRecognized;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  /** @docsNotRequired */
-  toString() {
-    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var GuardsCheckStart = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.GuardsCheckStart;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var GuardsCheckEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  shouldActivate;
-  type = EventType.GuardsCheckEnd;
-  constructor(id, url, urlAfterRedirects, state, shouldActivate) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-    this.shouldActivate = shouldActivate;
-  }
-  toString() {
-    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;
-  }
-};
-var ResolveStart = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.ResolveStart;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var ResolveEnd = class extends RouterEvent {
-  urlAfterRedirects;
-  state;
-  type = EventType.ResolveEnd;
-  constructor(id, url, urlAfterRedirects, state) {
-    super(id, url);
-    this.urlAfterRedirects = urlAfterRedirects;
-    this.state = state;
-  }
-  toString() {
-    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;
-  }
-};
-var RouteConfigLoadStart = class {
-  route;
-  type = EventType.RouteConfigLoadStart;
-  constructor(route) {
-    this.route = route;
-  }
-  toString() {
-    return `RouteConfigLoadStart(path: ${this.route.path})`;
-  }
-};
-var RouteConfigLoadEnd = class {
-  route;
-  type = EventType.RouteConfigLoadEnd;
-  constructor(route) {
-    this.route = route;
-  }
-  toString() {
-    return `RouteConfigLoadEnd(path: ${this.route.path})`;
-  }
-};
-var ChildActivationStart = class {
-  snapshot;
-  type = EventType.ChildActivationStart;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ChildActivationStart(path: '${path}')`;
-  }
-};
-var ChildActivationEnd = class {
-  snapshot;
-  type = EventType.ChildActivationEnd;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ChildActivationEnd(path: '${path}')`;
-  }
-};
-var ActivationStart = class {
-  snapshot;
-  type = EventType.ActivationStart;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ActivationStart(path: '${path}')`;
-  }
-};
-var ActivationEnd = class {
-  snapshot;
-  type = EventType.ActivationEnd;
-  constructor(snapshot) {
-    this.snapshot = snapshot;
-  }
-  toString() {
-    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || "";
-    return `ActivationEnd(path: '${path}')`;
-  }
-};
-var Scroll = class {
-  routerEvent;
-  position;
-  anchor;
-  type = EventType.Scroll;
-  constructor(routerEvent, position, anchor) {
-    this.routerEvent = routerEvent;
-    this.position = position;
-    this.anchor = anchor;
-  }
-  toString() {
-    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;
-    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;
-  }
-};
-var BeforeActivateRoutes = class {
-};
-var RedirectRequest = class {
-  url;
-  navigationBehaviorOptions;
-  constructor(url, navigationBehaviorOptions) {
-    this.url = url;
-    this.navigationBehaviorOptions = navigationBehaviorOptions;
-  }
-};
-function stringifyEvent(routerEvent) {
-  switch (routerEvent.type) {
-    case EventType.ActivationEnd:
-      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ActivationStart:
-      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ChildActivationEnd:
-      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.ChildActivationStart:
-      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ""}')`;
-    case EventType.GuardsCheckEnd:
-      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;
-    case EventType.GuardsCheckStart:
-      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.NavigationCancel:
-      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.NavigationSkipped:
-      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.NavigationEnd:
-      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;
-    case EventType.NavigationError:
-      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;
-    case EventType.NavigationStart:
-      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;
-    case EventType.ResolveEnd:
-      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.ResolveStart:
-      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.RouteConfigLoadEnd:
-      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;
-    case EventType.RouteConfigLoadStart:
-      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;
-    case EventType.RoutesRecognized:
-      return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;
-    case EventType.Scroll:
-      const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;
-      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;
-  }
-}
-function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
-  if (route.providers && !route._injector) {
-    route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
-  }
-  return route._injector ?? currentInjector;
-}
-function validateConfig(config, parentPath = "", requireStandaloneComponents = false) {
-  for (let i = 0; i < config.length; i++) {
-    const route = config[i];
-    const fullPath = getFullPath(parentPath, route);
-    validateNode(route, fullPath, requireStandaloneComponents);
-  }
-}
-function assertStandalone(fullPath, component) {
-  if (component && isNgModule(component)) {
-    throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, but it must be used with standalone components. Use 'loadChildren' instead.`);
-  } else if (component && !isStandalone(component)) {
-    throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
-  }
-}
-function validateNode(route, fullPath, requireStandaloneComponents) {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (!route) {
-      throw new RuntimeError(4014, `
-      Invalid configuration of route '${fullPath}': Encountered undefined route.
-      The reason might be an extra comma.
-
-      Example:
-      const routes: Routes = [
-        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
-        { path: 'dashboard',  component: DashboardComponent },, << two commas
-        { path: 'detail/:id', component: HeroDetailComponent }
-      ];
-    `);
-    }
-    if (Array.isArray(route)) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
-    }
-    if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
-    }
-    if (route.redirectTo && route.children) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
-    }
-    if (route.redirectTo && route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
-    }
-    if (route.children && route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
-    }
-    if (route.redirectTo && (route.component || route.loadComponent)) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
-    }
-    if (route.component && route.loadComponent) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
-    }
-    if (route.redirectTo && route.canActivate) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation so canActivate will never be executed.`);
-    }
-    if (route.path && route.matcher) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
-    }
-    if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
-    }
-    if (route.path === void 0 && route.matcher === void 0) {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
-    }
-    if (typeof route.path === "string" && route.path.charAt(0) === "/") {
-      throw new RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
-    }
-    if (route.path === "" && route.redirectTo !== void 0 && route.pathMatch === void 0) {
-      const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
-      throw new RuntimeError(4014, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
-    }
-    if (requireStandaloneComponents) {
-      assertStandalone(fullPath, route.component);
-    }
-  }
-  if (route.children) {
-    validateConfig(route.children, fullPath, requireStandaloneComponents);
-  }
-}
-function getFullPath(parentPath, currentRoute) {
-  if (!currentRoute) {
-    return parentPath;
-  }
-  if (!parentPath && !currentRoute.path) {
-    return "";
-  } else if (parentPath && !currentRoute.path) {
-    return `${parentPath}/`;
-  } else if (!parentPath && currentRoute.path) {
-    return currentRoute.path;
-  } else {
-    return `${parentPath}/${currentRoute.path}`;
-  }
-}
-function getOutlet(route) {
-  return route.outlet || PRIMARY_OUTLET;
-}
-function sortByMatchingOutlets(routes, outletName) {
-  const sortedConfig = routes.filter((r) => getOutlet(r) === outletName);
-  sortedConfig.push(...routes.filter((r) => getOutlet(r) !== outletName));
-  return sortedConfig;
-}
-function getClosestRouteInjector(snapshot) {
-  if (!snapshot) return null;
-  if (snapshot.routeConfig?._injector) {
-    return snapshot.routeConfig._injector;
-  }
-  for (let s = snapshot.parent; s; s = s.parent) {
-    const route = s.routeConfig;
-    if (route?._loadedInjector) return route._loadedInjector;
-    if (route?._injector) return route._injector;
-  }
-  return null;
-}
-var OutletContext = class {
-  rootInjector;
-  outlet = null;
-  route = null;
-  children;
-  attachRef = null;
-  get injector() {
-    return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;
-  }
-  constructor(rootInjector) {
-    this.rootInjector = rootInjector;
-    this.children = new ChildrenOutletContexts(this.rootInjector);
-  }
-};
-var ChildrenOutletContexts = class _ChildrenOutletContexts {
-  rootInjector;
-  // contexts for child outlets, by name.
-  contexts = /* @__PURE__ */ new Map();
-  /** @nodoc */
-  constructor(rootInjector) {
-    this.rootInjector = rootInjector;
-  }
-  /** Called when a `RouterOutlet` directive is instantiated */
-  onChildOutletCreated(childName, outlet) {
-    const context = this.getOrCreateContext(childName);
-    context.outlet = outlet;
-    this.contexts.set(childName, context);
-  }
-  /**
-   * Called when a `RouterOutlet` directive is destroyed.
-   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
-   * re-created later.
-   */
-  onChildOutletDestroyed(childName) {
-    const context = this.getContext(childName);
-    if (context) {
-      context.outlet = null;
-      context.attachRef = null;
-    }
-  }
-  /**
-   * Called when the corresponding route is deactivated during navigation.
-   * Because the component get destroyed, all children outlet are destroyed.
-   */
-  onOutletDeactivated() {
-    const contexts = this.contexts;
-    this.contexts = /* @__PURE__ */ new Map();
-    return contexts;
-  }
-  onOutletReAttached(contexts) {
-    this.contexts = contexts;
-  }
-  getOrCreateContext(childName) {
-    let context = this.getContext(childName);
-    if (!context) {
-      context = new OutletContext(this.rootInjector);
-      this.contexts.set(childName, context);
-    }
-    return context;
-  }
-  getContext(childName) {
-    return this.contexts.get(childName) || null;
-  }
-  static ɵfac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ChildrenOutletContexts)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ChildrenOutletContexts,
-    factory: _ChildrenOutletContexts.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ChildrenOutletContexts, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var Tree = class {
-  /** @internal */
-  _root;
-  constructor(root) {
-    this._root = root;
-  }
-  get root() {
-    return this._root.value;
-  }
-  /**
-   * @internal
-   */
-  parent(t) {
-    const p = this.pathFromRoot(t);
-    return p.length > 1 ? p[p.length - 2] : null;
-  }
-  /**
-   * @internal
-   */
-  children(t) {
-    const n = findNode(t, this._root);
-    return n ? n.children.map((t2) => t2.value) : [];
-  }
-  /**
-   * @internal
-   */
-  firstChild(t) {
-    const n = findNode(t, this._root);
-    return n && n.children.length > 0 ? n.children[0].value : null;
-  }
-  /**
-   * @internal
-   */
-  siblings(t) {
-    const p = findPath(t, this._root);
-    if (p.length < 2) return [];
-    const c = p[p.length - 2].children.map((c2) => c2.value);
-    return c.filter((cc) => cc !== t);
-  }
-  /**
-   * @internal
-   */
-  pathFromRoot(t) {
-    return findPath(t, this._root).map((s) => s.value);
-  }
-};
-function findNode(value, node) {
-  if (value === node.value) return node;
-  for (const child of node.children) {
-    const node2 = findNode(value, child);
-    if (node2) return node2;
-  }
-  return null;
-}
-function findPath(value, node) {
-  if (value === node.value) return [node];
-  for (const child of node.children) {
-    const path = findPath(value, child);
-    if (path.length) {
-      path.unshift(node);
-      return path;
-    }
-  }
-  return [];
-}
-var TreeNode = class {
-  value;
-  children;
-  constructor(value, children) {
-    this.value = value;
-    this.children = children;
-  }
-  toString() {
-    return `TreeNode(${this.value})`;
-  }
-};
-function nodeChildrenAsMap(node) {
-  const map2 = {};
-  if (node) {
-    node.children.forEach((child) => map2[child.value.outlet] = child);
-  }
-  return map2;
-}
-var RouterState = class extends Tree {
-  snapshot;
-  /** @internal */
-  constructor(root, snapshot) {
-    super(root);
-    this.snapshot = snapshot;
-    setRouterState(this, root);
-  }
-  toString() {
-    return this.snapshot.toString();
-  }
-};
-function createEmptyState(rootComponent) {
-  const snapshot = createEmptyStateSnapshot(rootComponent);
-  const emptyUrl = new import_rxjs.BehaviorSubject([new UrlSegment("", {})]);
-  const emptyParams = new import_rxjs.BehaviorSubject({});
-  const emptyData = new import_rxjs.BehaviorSubject({});
-  const emptyQueryParams = new import_rxjs.BehaviorSubject({});
-  const fragment = new import_rxjs.BehaviorSubject("");
-  const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);
-  activated.snapshot = snapshot.root;
-  return new RouterState(new TreeNode(activated, []), snapshot);
-}
-function createEmptyStateSnapshot(rootComponent) {
-  const emptyParams = {};
-  const emptyData = {};
-  const emptyQueryParams = {};
-  const fragment = "";
-  const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});
-  return new RouterStateSnapshot("", new TreeNode(activated, []));
-}
-var ActivatedRoute = class {
-  urlSubject;
-  paramsSubject;
-  queryParamsSubject;
-  fragmentSubject;
-  dataSubject;
-  outlet;
-  component;
-  /** The current snapshot of this route */
-  snapshot;
-  /** @internal */
-  _futureSnapshot;
-  /** @internal */
-  _routerState;
-  /** @internal */
-  _paramMap;
-  /** @internal */
-  _queryParamMap;
-  /** An Observable of the resolved route title */
-  title;
-  /** An observable of the URL segments matched by this route. */
-  url;
-  /** An observable of the matrix parameters scoped to this route. */
-  params;
-  /** An observable of the query parameters shared by all the routes. */
-  queryParams;
-  /** An observable of the URL fragment shared by all the routes. */
-  fragment;
-  /** An observable of the static and resolved data of this route. */
-  data;
-  /** @internal */
-  constructor(urlSubject, paramsSubject, queryParamsSubject, fragmentSubject, dataSubject, outlet, component, futureSnapshot) {
-    this.urlSubject = urlSubject;
-    this.paramsSubject = paramsSubject;
-    this.queryParamsSubject = queryParamsSubject;
-    this.fragmentSubject = fragmentSubject;
-    this.dataSubject = dataSubject;
-    this.outlet = outlet;
-    this.component = component;
-    this._futureSnapshot = futureSnapshot;
-    this.title = this.dataSubject?.pipe((0, import_operators.map)((d) => d[RouteTitleKey])) ?? (0, import_rxjs.of)(void 0);
-    this.url = urlSubject;
-    this.params = paramsSubject;
-    this.queryParams = queryParamsSubject;
-    this.fragment = fragmentSubject;
-    this.data = dataSubject;
-  }
-  /** The configuration used to match this route. */
-  get routeConfig() {
-    return this._futureSnapshot.routeConfig;
-  }
-  /** The root of the router state. */
-  get root() {
-    return this._routerState.root;
-  }
-  /** The parent of this route in the router state tree. */
-  get parent() {
-    return this._routerState.parent(this);
-  }
-  /** The first child of this route in the router state tree. */
-  get firstChild() {
-    return this._routerState.firstChild(this);
-  }
-  /** The children of this route in the router state tree. */
-  get children() {
-    return this._routerState.children(this);
-  }
-  /** The path from the root of the router state tree to this route. */
-  get pathFromRoot() {
-    return this._routerState.pathFromRoot(this);
-  }
-  /**
-   * An Observable that contains a map of the required and optional parameters
-   * specific to the route.
-   * The map supports retrieving single and multiple values from the same parameter.
-   */
-  get paramMap() {
-    this._paramMap ??= this.params.pipe((0, import_operators.map)((p) => convertToParamMap(p)));
-    return this._paramMap;
-  }
-  /**
-   * An Observable that contains a map of the query parameters available to all routes.
-   * The map supports retrieving single and multiple values from the query parameter.
-   */
-  get queryParamMap() {
-    this._queryParamMap ??= this.queryParams.pipe((0, import_operators.map)((p) => convertToParamMap(p)));
-    return this._queryParamMap;
-  }
-  toString() {
-    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;
-  }
-};
-function getInherited(route, parent, paramsInheritanceStrategy = "emptyOnly") {
-  let inherited;
-  const {
-    routeConfig
-  } = route;
-  if (parent !== null && (paramsInheritanceStrategy === "always" || // inherit parent data if route is empty path
-  routeConfig?.path === "" || // inherit parent data if parent was componentless
-  !parent.component && !parent.routeConfig?.loadComponent)) {
-    inherited = {
-      params: __spreadValues(__spreadValues({}, parent.params), route.params),
-      data: __spreadValues(__spreadValues({}, parent.data), route.data),
-      resolve: __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, route.data), parent.data), routeConfig?.data), route._resolvedData)
-    };
-  } else {
-    inherited = {
-      params: __spreadValues({}, route.params),
-      data: __spreadValues({}, route.data),
-      resolve: __spreadValues(__spreadValues({}, route.data), route._resolvedData ?? {})
-    };
-  }
-  if (routeConfig && hasStaticTitle(routeConfig)) {
-    inherited.resolve[RouteTitleKey] = routeConfig.title;
-  }
-  return inherited;
-}
-var ActivatedRouteSnapshot = class {
-  url;
-  params;
-  queryParams;
-  fragment;
-  data;
-  outlet;
-  component;
-  /** The configuration used to match this route **/
-  routeConfig;
-  /** @internal */
-  _resolve;
-  /** @internal */
-  _resolvedData;
-  /** @internal */
-  _routerState;
-  /** @internal */
-  _paramMap;
-  /** @internal */
-  _queryParamMap;
-  /** The resolved route title */
-  get title() {
-    return this.data?.[RouteTitleKey];
-  }
-  /** @internal */
-  constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve) {
-    this.url = url;
-    this.params = params;
-    this.queryParams = queryParams;
-    this.fragment = fragment;
-    this.data = data;
-    this.outlet = outlet;
-    this.component = component;
-    this.routeConfig = routeConfig;
-    this._resolve = resolve;
-  }
-  /** The root of the router state */
-  get root() {
-    return this._routerState.root;
-  }
-  /** The parent of this route in the router state tree */
-  get parent() {
-    return this._routerState.parent(this);
-  }
-  /** The first child of this route in the router state tree */
-  get firstChild() {
-    return this._routerState.firstChild(this);
-  }
-  /** The children of this route in the router state tree */
-  get children() {
-    return this._routerState.children(this);
-  }
-  /** The path from the root of the router state tree to this route */
-  get pathFromRoot() {
-    return this._routerState.pathFromRoot(this);
-  }
-  get paramMap() {
-    this._paramMap ??= convertToParamMap(this.params);
-    return this._paramMap;
-  }
-  get queryParamMap() {
-    this._queryParamMap ??= convertToParamMap(this.queryParams);
-    return this._queryParamMap;
-  }
-  toString() {
-    const url = this.url.map((segment) => segment.toString()).join("/");
-    const matched = this.routeConfig ? this.routeConfig.path : "";
-    return `Route(url:'${url}', path:'${matched}')`;
-  }
-};
-var RouterStateSnapshot = class extends Tree {
-  url;
-  /** @internal */
-  constructor(url, root) {
-    super(root);
-    this.url = url;
-    setRouterState(this, root);
-  }
-  toString() {
-    return serializeNode(this._root);
-  }
-};
-function setRouterState(state, node) {
-  node.value._routerState = state;
-  node.children.forEach((c) => setRouterState(state, c));
-}
-function serializeNode(node) {
-  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(", ")} } ` : "";
-  return `${node.value}${c}`;
-}
-function advanceActivatedRoute(route) {
-  if (route.snapshot) {
-    const currentSnapshot = route.snapshot;
-    const nextSnapshot = route._futureSnapshot;
-    route.snapshot = nextSnapshot;
-    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {
-      route.queryParamsSubject.next(nextSnapshot.queryParams);
-    }
-    if (currentSnapshot.fragment !== nextSnapshot.fragment) {
-      route.fragmentSubject.next(nextSnapshot.fragment);
-    }
-    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {
-      route.paramsSubject.next(nextSnapshot.params);
-    }
-    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {
-      route.urlSubject.next(nextSnapshot.url);
-    }
-    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {
-      route.dataSubject.next(nextSnapshot.data);
-    }
-  } else {
-    route.snapshot = route._futureSnapshot;
-    route.dataSubject.next(route._futureSnapshot.data);
-  }
-}
-function equalParamsAndUrlSegments(a, b) {
-  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);
-  const parentsMismatch = !a.parent !== !b.parent;
-  return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));
-}
-function hasStaticTitle(config) {
-  return typeof config.title === "string" || config.title === null;
-}
-var ROUTER_OUTLET_DATA = new InjectionToken(ngDevMode ? "RouterOutlet data" : "");
-var RouterOutlet = class _RouterOutlet {
-  activated = null;
-  /** @internal */
-  get activatedComponentRef() {
-    return this.activated;
-  }
-  _activatedRoute = null;
-  /**
-   * The name of the outlet
-   *
-   */
-  name = PRIMARY_OUTLET;
-  activateEvents = new EventEmitter();
-  deactivateEvents = new EventEmitter();
-  /**
-   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a
-   * previously detached subtree.
-   **/
-  attachEvents = new EventEmitter();
-  /**
-   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the
-   * subtree.
-   */
-  detachEvents = new EventEmitter();
-  /**
-   * Data that will be provided to the child injector through the `ROUTER_OUTLET_DATA` token.
-   *
-   * When unset, the value of the token is `undefined` by default.
-   */
-  routerOutletData = input(void 0);
-  parentContexts = inject(ChildrenOutletContexts);
-  location = inject(ViewContainerRef);
-  changeDetector = inject(ChangeDetectorRef);
-  inputBinder = inject(INPUT_BINDER, {
-    optional: true
-  });
-  /** @nodoc */
-  supportsBindingToComponentInputs = true;
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (changes["name"]) {
-      const {
-        firstChange,
-        previousValue
-      } = changes["name"];
-      if (firstChange) {
-        return;
-      }
-      if (this.isTrackedInParentContexts(previousValue)) {
-        this.deactivate();
-        this.parentContexts.onChildOutletDestroyed(previousValue);
-      }
-      this.initializeOutletWithName();
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (this.isTrackedInParentContexts(this.name)) {
-      this.parentContexts.onChildOutletDestroyed(this.name);
-    }
-    this.inputBinder?.unsubscribeFromRouteData(this);
-  }
-  isTrackedInParentContexts(outletName) {
-    return this.parentContexts.getContext(outletName)?.outlet === this;
-  }
-  /** @nodoc */
-  ngOnInit() {
-    this.initializeOutletWithName();
-  }
-  initializeOutletWithName() {
-    this.parentContexts.onChildOutletCreated(this.name, this);
-    if (this.activated) {
-      return;
-    }
-    const context = this.parentContexts.getContext(this.name);
-    if (context?.route) {
-      if (context.attachRef) {
-        this.attach(context.attachRef, context.route);
-      } else {
-        this.activateWith(context.route, context.injector);
-      }
-    }
-  }
-  get isActivated() {
-    return !!this.activated;
-  }
-  /**
-   * @returns The currently activated component instance.
-   * @throws An error if the outlet is not activated.
-   */
-  get component() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    return this.activated.instance;
-  }
-  get activatedRoute() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    return this._activatedRoute;
-  }
-  get activatedRouteData() {
-    if (this._activatedRoute) {
-      return this._activatedRoute.snapshot.data;
-    }
-    return {};
-  }
-  /**
-   * Called when the `RouteReuseStrategy` instructs to detach the subtree
-   */
-  detach() {
-    if (!this.activated) throw new RuntimeError(4012, (typeof ngDevMode === "undefined" || ngDevMode) && "Outlet is not activated");
-    this.location.detach();
-    const cmp = this.activated;
-    this.activated = null;
-    this._activatedRoute = null;
-    this.detachEvents.emit(cmp.instance);
-    return cmp;
-  }
-  /**
-   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
-   */
-  attach(ref, activatedRoute) {
-    this.activated = ref;
-    this._activatedRoute = activatedRoute;
-    this.location.insert(ref.hostView);
-    this.inputBinder?.bindActivatedRouteToOutletComponent(this);
-    this.attachEvents.emit(ref.instance);
-  }
-  deactivate() {
-    if (this.activated) {
-      const c = this.component;
-      this.activated.destroy();
-      this.activated = null;
-      this._activatedRoute = null;
-      this.deactivateEvents.emit(c);
-    }
-  }
-  activateWith(activatedRoute, environmentInjector) {
-    if (this.isActivated) {
-      throw new RuntimeError(4013, (typeof ngDevMode === "undefined" || ngDevMode) && "Cannot activate an already activated outlet");
-    }
-    this._activatedRoute = activatedRoute;
-    const location = this.location;
-    const snapshot = activatedRoute.snapshot;
-    const component = snapshot.component;
-    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;
-    const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);
-    this.activated = location.createComponent(component, {
-      index: location.length,
-      injector,
-      environmentInjector
-    });
-    this.changeDetector.markForCheck();
-    this.inputBinder?.bindActivatedRouteToOutletComponent(this);
-    this.activateEvents.emit(this.activated.instance);
-  }
-  static ɵfac = function RouterOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterOutlet)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterOutlet,
-    selectors: [["router-outlet"]],
-    inputs: {
-      name: "name",
-      routerOutletData: [1, "routerOutletData"]
-    },
-    outputs: {
-      activateEvents: "activate",
-      deactivateEvents: "deactivate",
-      attachEvents: "attach",
-      detachEvents: "detach"
-    },
-    exportAs: ["outlet"],
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "router-outlet",
-      exportAs: "outlet"
-    }]
-  }], null, {
-    name: [{
-      type: Input
-    }],
-    activateEvents: [{
-      type: Output,
-      args: ["activate"]
-    }],
-    deactivateEvents: [{
-      type: Output,
-      args: ["deactivate"]
-    }],
-    attachEvents: [{
-      type: Output,
-      args: ["attach"]
-    }],
-    detachEvents: [{
-      type: Output,
-      args: ["detach"]
-    }]
-  });
-})();
-var OutletInjector = class _OutletInjector {
-  route;
-  childContexts;
-  parent;
-  outletData;
-  /**
-   * This injector has a special handing for the `ActivatedRoute` and
-   * `ChildrenOutletContexts` tokens: it returns corresponding values for those
-   * tokens dynamically. This behavior is different from the regular injector logic,
-   * when we initialize and store a value, which is later returned for all inject
-   * requests.
-   *
-   * In some cases (e.g. when using `@defer`), this dynamic behavior requires special
-   * handling. This function allows to identify an instance of the `OutletInjector` and
-   * create an instance of it without referring to the class itself (so this logic can
-   * be invoked from the `core` package). This helps to retain dynamic behavior for the
-   * mentioned tokens.
-   *
-   * Note: it's a temporary solution and we should explore how to support this case better.
-   */
-  __ngOutletInjector(parentInjector) {
-    return new _OutletInjector(this.route, this.childContexts, parentInjector, this.outletData);
-  }
-  constructor(route, childContexts, parent, outletData) {
-    this.route = route;
-    this.childContexts = childContexts;
-    this.parent = parent;
-    this.outletData = outletData;
-  }
-  get(token, notFoundValue) {
-    if (token === ActivatedRoute) {
-      return this.route;
-    }
-    if (token === ChildrenOutletContexts) {
-      return this.childContexts;
-    }
-    if (token === ROUTER_OUTLET_DATA) {
-      return this.outletData;
-    }
-    return this.parent.get(token, notFoundValue);
-  }
-};
-var INPUT_BINDER = new InjectionToken("");
-var RoutedComponentInputBinder = class _RoutedComponentInputBinder {
-  outletDataSubscriptions = /* @__PURE__ */ new Map();
-  bindActivatedRouteToOutletComponent(outlet) {
-    this.unsubscribeFromRouteData(outlet);
-    this.subscribeToRouteData(outlet);
-  }
-  unsubscribeFromRouteData(outlet) {
-    this.outletDataSubscriptions.get(outlet)?.unsubscribe();
-    this.outletDataSubscriptions.delete(outlet);
-  }
-  subscribeToRouteData(outlet) {
-    const {
-      activatedRoute
-    } = outlet;
-    const dataSubscription = (0, import_rxjs.combineLatest)([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe((0, import_operators.switchMap)(([queryParams, params, data], index) => {
-      data = __spreadValues(__spreadValues(__spreadValues({}, queryParams), params), data);
-      if (index === 0) {
-        return (0, import_rxjs.of)(data);
-      }
-      return Promise.resolve(data);
-    })).subscribe((data) => {
-      if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {
-        this.unsubscribeFromRouteData(outlet);
-        return;
-      }
-      const mirror = reflectComponentType(activatedRoute.component);
-      if (!mirror) {
-        this.unsubscribeFromRouteData(outlet);
-        return;
-      }
-      for (const {
-        templateName
-      } of mirror.inputs) {
-        outlet.activatedComponentRef.setInput(templateName, data[templateName]);
-      }
-    });
-    this.outletDataSubscriptions.set(outlet, dataSubscription);
-  }
-  static ɵfac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RoutedComponentInputBinder)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RoutedComponentInputBinder,
-    factory: _RoutedComponentInputBinder.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RoutedComponentInputBinder, [{
-    type: Injectable
-  }], null, null);
-})();
-function createRouterState(routeReuseStrategy, curr, prevState) {
-  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : void 0);
-  return new RouterState(root, curr);
-}
-function createNode(routeReuseStrategy, curr, prevState) {
-  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
-    const value = prevState.value;
-    value._futureSnapshot = curr.value;
-    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
-    return new TreeNode(value, children);
-  } else {
-    if (routeReuseStrategy.shouldAttach(curr.value)) {
-      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);
-      if (detachedRouteHandle !== null) {
-        const tree2 = detachedRouteHandle.route;
-        tree2.value._futureSnapshot = curr.value;
-        tree2.children = curr.children.map((c) => createNode(routeReuseStrategy, c));
-        return tree2;
-      }
-    }
-    const value = createActivatedRoute(curr.value);
-    const children = curr.children.map((c) => createNode(routeReuseStrategy, c));
-    return new TreeNode(value, children);
-  }
-}
-function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
-  return curr.children.map((child) => {
-    for (const p of prevState.children) {
-      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
-        return createNode(routeReuseStrategy, child, p);
-      }
-    }
-    return createNode(routeReuseStrategy, child);
-  });
-}
-function createActivatedRoute(c) {
-  return new ActivatedRoute(new import_rxjs.BehaviorSubject(c.url), new import_rxjs.BehaviorSubject(c.params), new import_rxjs.BehaviorSubject(c.queryParams), new import_rxjs.BehaviorSubject(c.fragment), new import_rxjs.BehaviorSubject(c.data), c.outlet, c.component, c);
-}
-var RedirectCommand = class {
-  redirectTo;
-  navigationBehaviorOptions;
-  constructor(redirectTo, navigationBehaviorOptions) {
-    this.redirectTo = redirectTo;
-    this.navigationBehaviorOptions = navigationBehaviorOptions;
-  }
-};
-var NAVIGATION_CANCELING_ERROR = "ngNavigationCancelingError";
-function redirectingNavigationError(urlSerializer, redirect) {
-  const {
-    redirectTo,
-    navigationBehaviorOptions
-  } = isUrlTree(redirect) ? {
-    redirectTo: redirect,
-    navigationBehaviorOptions: void 0
-  } : redirect;
-  const error = navigationCancelingError(ngDevMode && `Redirecting to "${urlSerializer.serialize(redirectTo)}"`, NavigationCancellationCode.Redirect);
-  error.url = redirectTo;
-  error.navigationBehaviorOptions = navigationBehaviorOptions;
-  return error;
-}
-function navigationCancelingError(message, code) {
-  const error = new Error(`NavigationCancelingError: ${message || ""}`);
-  error[NAVIGATION_CANCELING_ERROR] = true;
-  error.cancellationCode = code;
-  return error;
-}
-function isRedirectingNavigationCancelingError(error) {
-  return isNavigationCancelingError(error) && isUrlTree(error.url);
-}
-function isNavigationCancelingError(error) {
-  return !!error && error[NAVIGATION_CANCELING_ERROR];
-}
-var warnedAboutUnsupportedInputBinding = false;
-var activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => (0, import_operators.map)((t) => {
-  new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled).activate(rootContexts);
-  return t;
-});
-var ActivateRoutes = class {
-  routeReuseStrategy;
-  futureState;
-  currState;
-  forwardEvent;
-  inputBindingEnabled;
-  constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {
-    this.routeReuseStrategy = routeReuseStrategy;
-    this.futureState = futureState;
-    this.currState = currState;
-    this.forwardEvent = forwardEvent;
-    this.inputBindingEnabled = inputBindingEnabled;
-  }
-  activate(parentContexts) {
-    const futureRoot = this.futureState._root;
-    const currRoot = this.currState ? this.currState._root : null;
-    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);
-    advanceActivatedRoute(this.futureState.root);
-    this.activateChildRoutes(futureRoot, currRoot, parentContexts);
-  }
-  // De-activate the child route that are not re-used for the future state
-  deactivateChildRoutes(futureNode, currNode, contexts) {
-    const children = nodeChildrenAsMap(currNode);
-    futureNode.children.forEach((futureChild) => {
-      const childOutletName = futureChild.value.outlet;
-      this.deactivateRoutes(futureChild, children[childOutletName], contexts);
-      delete children[childOutletName];
-    });
-    Object.values(children).forEach((v) => {
-      this.deactivateRouteAndItsChildren(v, contexts);
-    });
-  }
-  deactivateRoutes(futureNode, currNode, parentContext) {
-    const future = futureNode.value;
-    const curr = currNode ? currNode.value : null;
-    if (future === curr) {
-      if (future.component) {
-        const context = parentContext.getContext(future.outlet);
-        if (context) {
-          this.deactivateChildRoutes(futureNode, currNode, context.children);
-        }
-      } else {
-        this.deactivateChildRoutes(futureNode, currNode, parentContext);
-      }
-    } else {
-      if (curr) {
-        this.deactivateRouteAndItsChildren(currNode, parentContext);
-      }
-    }
-  }
-  deactivateRouteAndItsChildren(route, parentContexts) {
-    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {
-      this.detachAndStoreRouteSubtree(route, parentContexts);
-    } else {
-      this.deactivateRouteAndOutlet(route, parentContexts);
-    }
-  }
-  detachAndStoreRouteSubtree(route, parentContexts) {
-    const context = parentContexts.getContext(route.value.outlet);
-    const contexts = context && route.value.component ? context.children : parentContexts;
-    const children = nodeChildrenAsMap(route);
-    for (const treeNode of Object.values(children)) {
-      this.deactivateRouteAndItsChildren(treeNode, contexts);
-    }
-    if (context && context.outlet) {
-      const componentRef = context.outlet.detach();
-      const contexts2 = context.children.onOutletDeactivated();
-      this.routeReuseStrategy.store(route.value.snapshot, {
-        componentRef,
-        route,
-        contexts: contexts2
-      });
-    }
-  }
-  deactivateRouteAndOutlet(route, parentContexts) {
-    const context = parentContexts.getContext(route.value.outlet);
-    const contexts = context && route.value.component ? context.children : parentContexts;
-    const children = nodeChildrenAsMap(route);
-    for (const treeNode of Object.values(children)) {
-      this.deactivateRouteAndItsChildren(treeNode, contexts);
-    }
-    if (context) {
-      if (context.outlet) {
-        context.outlet.deactivate();
-        context.children.onOutletDeactivated();
-      }
-      context.attachRef = null;
-      context.route = null;
-    }
-  }
-  activateChildRoutes(futureNode, currNode, contexts) {
-    const children = nodeChildrenAsMap(currNode);
-    futureNode.children.forEach((c) => {
-      this.activateRoutes(c, children[c.value.outlet], contexts);
-      this.forwardEvent(new ActivationEnd(c.value.snapshot));
-    });
-    if (futureNode.children.length) {
-      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));
-    }
-  }
-  activateRoutes(futureNode, currNode, parentContexts) {
-    const future = futureNode.value;
-    const curr = currNode ? currNode.value : null;
-    advanceActivatedRoute(future);
-    if (future === curr) {
-      if (future.component) {
-        const context = parentContexts.getOrCreateContext(future.outlet);
-        this.activateChildRoutes(futureNode, currNode, context.children);
-      } else {
-        this.activateChildRoutes(futureNode, currNode, parentContexts);
-      }
-    } else {
-      if (future.component) {
-        const context = parentContexts.getOrCreateContext(future.outlet);
-        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {
-          const stored = this.routeReuseStrategy.retrieve(future.snapshot);
-          this.routeReuseStrategy.store(future.snapshot, null);
-          context.children.onOutletReAttached(stored.contexts);
-          context.attachRef = stored.componentRef;
-          context.route = stored.route.value;
-          if (context.outlet) {
-            context.outlet.attach(stored.componentRef, stored.route.value);
-          }
-          advanceActivatedRoute(stored.route.value);
-          this.activateChildRoutes(futureNode, null, context.children);
-        } else {
-          context.attachRef = null;
-          context.route = future;
-          if (context.outlet) {
-            context.outlet.activateWith(future, context.injector);
-          }
-          this.activateChildRoutes(futureNode, null, context.children);
-        }
-      } else {
-        this.activateChildRoutes(futureNode, null, parentContexts);
-      }
-    }
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      const context = parentContexts.getOrCreateContext(future.outlet);
-      const outlet = context.outlet;
-      if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {
-        console.warn(`'withComponentInputBinding' feature is enabled but this application is using an outlet that may not support binding to component inputs.`);
-        warnedAboutUnsupportedInputBinding = true;
-      }
-    }
-  }
-};
-var CanActivate = class {
-  path;
-  route;
-  constructor(path) {
-    this.path = path;
-    this.route = this.path[this.path.length - 1];
-  }
-};
-var CanDeactivate = class {
-  component;
-  route;
-  constructor(component, route) {
-    this.component = component;
-    this.route = route;
-  }
-};
-function getAllRouteGuards(future, curr, parentContexts) {
-  const futureRoot = future._root;
-  const currRoot = curr ? curr._root : null;
-  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);
-}
-function getCanActivateChild(p) {
-  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;
-  if (!canActivateChild || canActivateChild.length === 0) return null;
-  return {
-    node: p,
-    guards: canActivateChild
-  };
-}
-function getTokenOrFunctionIdentity(tokenOrFunction, injector) {
-  const NOT_FOUND = Symbol();
-  const result = injector.get(tokenOrFunction, NOT_FOUND);
-  if (result === NOT_FOUND) {
-    if (typeof tokenOrFunction === "function" && !isInjectable(tokenOrFunction)) {
-      return tokenOrFunction;
-    } else {
-      return injector.get(tokenOrFunction);
-    }
-  }
-  return result;
-}
-function getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {
-  canDeactivateChecks: [],
-  canActivateChecks: []
-}) {
-  const prevChildren = nodeChildrenAsMap(currNode);
-  futureNode.children.forEach((c) => {
-    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);
-    delete prevChildren[c.value.outlet];
-  });
-  Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));
-  return checks;
-}
-function getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {
-  canDeactivateChecks: [],
-  canActivateChecks: []
-}) {
-  const future = futureNode.value;
-  const curr = currNode ? currNode.value : null;
-  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;
-  if (curr && future.routeConfig === curr.routeConfig) {
-    const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);
-    if (shouldRun) {
-      checks.canActivateChecks.push(new CanActivate(futurePath));
-    } else {
-      future.data = curr.data;
-      future._resolvedData = curr._resolvedData;
-    }
-    if (future.component) {
-      getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);
-    } else {
-      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);
-    }
-    if (shouldRun && context && context.outlet && context.outlet.isActivated) {
-      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));
-    }
-  } else {
-    if (curr) {
-      deactivateRouteAndItsChildren(currNode, context, checks);
-    }
-    checks.canActivateChecks.push(new CanActivate(futurePath));
-    if (future.component) {
-      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);
-    } else {
-      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);
-    }
-  }
-  return checks;
-}
-function shouldRunGuardsAndResolvers(curr, future, mode) {
-  if (typeof mode === "function") {
-    return mode(curr, future);
-  }
-  switch (mode) {
-    case "pathParamsChange":
-      return !equalPath(curr.url, future.url);
-    case "pathParamsOrQueryParamsChange":
-      return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);
-    case "always":
-      return true;
-    case "paramsOrQueryParamsChange":
-      return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);
-    case "paramsChange":
-    default:
-      return !equalParamsAndUrlSegments(curr, future);
-  }
-}
-function deactivateRouteAndItsChildren(route, context, checks) {
-  const children = nodeChildrenAsMap(route);
-  const r = route.value;
-  Object.entries(children).forEach(([childName, node]) => {
-    if (!r.component) {
-      deactivateRouteAndItsChildren(node, context, checks);
-    } else if (context) {
-      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);
-    } else {
-      deactivateRouteAndItsChildren(node, null, checks);
-    }
-  });
-  if (!r.component) {
-    checks.canDeactivateChecks.push(new CanDeactivate(null, r));
-  } else if (context && context.outlet && context.outlet.isActivated) {
-    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));
-  } else {
-    checks.canDeactivateChecks.push(new CanDeactivate(null, r));
-  }
-}
-function isFunction(v) {
-  return typeof v === "function";
-}
-function isBoolean(v) {
-  return typeof v === "boolean";
-}
-function isCanLoad(guard) {
-  return guard && isFunction(guard.canLoad);
-}
-function isCanActivate(guard) {
-  return guard && isFunction(guard.canActivate);
-}
-function isCanActivateChild(guard) {
-  return guard && isFunction(guard.canActivateChild);
-}
-function isCanDeactivate(guard) {
-  return guard && isFunction(guard.canDeactivate);
-}
-function isCanMatch(guard) {
-  return guard && isFunction(guard.canMatch);
-}
-function isEmptyError(e) {
-  return e instanceof import_rxjs.EmptyError || e?.name === "EmptyError";
-}
-var INITIAL_VALUE = Symbol("INITIAL_VALUE");
-function prioritizedGuardValue() {
-  return (0, import_operators.switchMap)((obs) => {
-    return (0, import_rxjs.combineLatest)(obs.map((o) => o.pipe((0, import_operators.take)(1), (0, import_operators.startWith)(INITIAL_VALUE)))).pipe((0, import_operators.map)((results) => {
-      for (const result of results) {
-        if (result === true) {
-          continue;
-        } else if (result === INITIAL_VALUE) {
-          return INITIAL_VALUE;
-        } else if (result === false || isRedirect(result)) {
-          return result;
-        }
-      }
-      return true;
-    }), (0, import_operators.filter)((item) => item !== INITIAL_VALUE), (0, import_operators.take)(1));
-  });
-}
-function isRedirect(val) {
-  return isUrlTree(val) || val instanceof RedirectCommand;
-}
-function checkGuards(injector, forwardEvent) {
-  return (0, import_operators.mergeMap)((t) => {
-    const {
-      targetSnapshot,
-      currentSnapshot,
-      guards: {
-        canActivateChecks,
-        canDeactivateChecks
-      }
-    } = t;
-    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {
-      return (0, import_rxjs.of)(__spreadProps(__spreadValues({}, t), {
-        guardsResult: true
-      }));
-    }
-    return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, injector).pipe((0, import_operators.mergeMap)((canDeactivate) => {
-      return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, injector, forwardEvent) : (0, import_rxjs.of)(canDeactivate);
-    }), (0, import_operators.map)((guardsResult) => __spreadProps(__spreadValues({}, t), {
-      guardsResult
-    })));
-  });
-}
-function runCanDeactivateChecks(checks, futureRSS, currRSS, injector) {
-  return (0, import_rxjs.from)(checks).pipe((0, import_operators.mergeMap)((check) => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)), (0, import_operators.first)((result) => {
-    return result !== true;
-  }, true));
-}
-function runCanActivateChecks(futureSnapshot, checks, injector, forwardEvent) {
-  return (0, import_rxjs.from)(checks).pipe((0, import_operators.concatMap)((check) => {
-    return (0, import_rxjs.concat)(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path, injector), runCanActivate(futureSnapshot, check.route, injector));
-  }), (0, import_operators.first)((result) => {
-    return result !== true;
-  }, true));
-}
-function fireActivationStart(snapshot, forwardEvent) {
-  if (snapshot !== null && forwardEvent) {
-    forwardEvent(new ActivationStart(snapshot));
-  }
-  return (0, import_rxjs.of)(true);
-}
-function fireChildActivationStart(snapshot, forwardEvent) {
-  if (snapshot !== null && forwardEvent) {
-    forwardEvent(new ChildActivationStart(snapshot));
-  }
-  return (0, import_rxjs.of)(true);
-}
-function runCanActivate(futureRSS, futureARS, injector) {
-  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;
-  if (!canActivate || canActivate.length === 0) return (0, import_rxjs.of)(true);
-  const canActivateObservables = canActivate.map((canActivate2) => {
-    return (0, import_rxjs.defer)(() => {
-      const closestInjector = getClosestRouteInjector(futureARS) ?? injector;
-      const guard = getTokenOrFunctionIdentity(canActivate2, closestInjector);
-      const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
-      return wrapIntoObservable(guardVal).pipe((0, import_operators.first)());
-    });
-  });
-  return (0, import_rxjs.of)(canActivateObservables).pipe(prioritizedGuardValue());
-}
-function runCanActivateChild(futureRSS, path, injector) {
-  const futureARS = path[path.length - 1];
-  const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map((p) => getCanActivateChild(p)).filter((_) => _ !== null);
-  const canActivateChildGuardsMapped = canActivateChildGuards.map((d) => {
-    return (0, import_rxjs.defer)(() => {
-      const guardsMapped = d.guards.map((canActivateChild) => {
-        const closestInjector = getClosestRouteInjector(d.node) ?? injector;
-        const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);
-        const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
-        return wrapIntoObservable(guardVal).pipe((0, import_operators.first)());
-      });
-      return (0, import_rxjs.of)(guardsMapped).pipe(prioritizedGuardValue());
-    });
-  });
-  return (0, import_rxjs.of)(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());
-}
-function runCanDeactivate(component, currARS, currRSS, futureRSS, injector) {
-  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;
-  if (!canDeactivate || canDeactivate.length === 0) return (0, import_rxjs.of)(true);
-  const canDeactivateObservables = canDeactivate.map((c) => {
-    const closestInjector = getClosestRouteInjector(currARS) ?? injector;
-    const guard = getTokenOrFunctionIdentity(c, closestInjector);
-    const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));
-    return wrapIntoObservable(guardVal).pipe((0, import_operators.first)());
-  });
-  return (0, import_rxjs.of)(canDeactivateObservables).pipe(prioritizedGuardValue());
-}
-function runCanLoadGuards(injector, route, segments, urlSerializer) {
-  const canLoad = route.canLoad;
-  if (canLoad === void 0 || canLoad.length === 0) {
-    return (0, import_rxjs.of)(true);
-  }
-  const canLoadObservables = canLoad.map((injectionToken) => {
-    const guard = getTokenOrFunctionIdentity(injectionToken, injector);
-    const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));
-    return wrapIntoObservable(guardVal);
-  });
-  return (0, import_rxjs.of)(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));
-}
-function redirectIfUrlTree(urlSerializer) {
-  return (0, import_rxjs.pipe)((0, import_operators.tap)((result) => {
-    if (typeof result === "boolean") return;
-    throw redirectingNavigationError(urlSerializer, result);
-  }), (0, import_operators.map)((result) => result === true));
-}
-function runCanMatchGuards(injector, route, segments, urlSerializer) {
-  const canMatch = route.canMatch;
-  if (!canMatch || canMatch.length === 0) return (0, import_rxjs.of)(true);
-  const canMatchObservables = canMatch.map((injectionToken) => {
-    const guard = getTokenOrFunctionIdentity(injectionToken, injector);
-    const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments) : runInInjectionContext(injector, () => guard(route, segments));
-    return wrapIntoObservable(guardVal);
-  });
-  return (0, import_rxjs.of)(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));
-}
-var NoMatch = class {
-  segmentGroup;
-  constructor(segmentGroup) {
-    this.segmentGroup = segmentGroup || null;
-  }
-};
-var AbsoluteRedirect = class extends Error {
-  urlTree;
-  constructor(urlTree) {
-    super();
-    this.urlTree = urlTree;
-  }
-};
-function noMatch$1(segmentGroup) {
-  return (0, import_rxjs.throwError)(new NoMatch(segmentGroup));
-}
-function namedOutletsRedirect(redirectTo) {
-  return (0, import_rxjs.throwError)(new RuntimeError(4e3, (typeof ngDevMode === "undefined" || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));
-}
-function canLoadFails(route) {
-  return (0, import_rxjs.throwError)(navigationCancelingError((typeof ngDevMode === "undefined" || ngDevMode) && `Cannot load children because the guard of the route "path: '${route.path}'" returned false`, NavigationCancellationCode.GuardRejected));
-}
-var ApplyRedirects = class {
-  urlSerializer;
-  urlTree;
-  constructor(urlSerializer, urlTree) {
-    this.urlSerializer = urlSerializer;
-    this.urlTree = urlTree;
-  }
-  lineralizeSegments(route, urlTree) {
-    let res = [];
-    let c = urlTree.root;
-    while (true) {
-      res = res.concat(c.segments);
-      if (c.numberOfChildren === 0) {
-        return (0, import_rxjs.of)(res);
-      }
-      if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {
-        return namedOutletsRedirect(`${route.redirectTo}`);
-      }
-      c = c.children[PRIMARY_OUTLET];
-    }
-  }
-  applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {
-    if (typeof redirectTo !== "string") {
-      const redirectToFn = redirectTo;
-      const {
-        queryParams,
-        fragment,
-        routeConfig,
-        url,
-        outlet,
-        params,
-        data,
-        title
-      } = currentSnapshot;
-      const newRedirect = runInInjectionContext(injector, () => redirectToFn({
-        params,
-        data,
-        queryParams,
-        fragment,
-        routeConfig,
-        url,
-        outlet,
-        title
-      }));
-      if (newRedirect instanceof UrlTree) {
-        throw new AbsoluteRedirect(newRedirect);
-      }
-      redirectTo = newRedirect;
-    }
-    const newTree = this.applyRedirectCreateUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);
-    if (redirectTo[0] === "/") {
-      throw new AbsoluteRedirect(newTree);
-    }
-    return newTree;
-  }
-  applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {
-    const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);
-    return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);
-  }
-  createQueryParams(redirectToParams, actualParams) {
-    const res = {};
-    Object.entries(redirectToParams).forEach(([k, v]) => {
-      const copySourceValue = typeof v === "string" && v[0] === ":";
-      if (copySourceValue) {
-        const sourceName = v.substring(1);
-        res[k] = actualParams[sourceName];
-      } else {
-        res[k] = v;
-      }
-    });
-    return res;
-  }
-  createSegmentGroup(redirectTo, group, segments, posParams) {
-    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);
-    let children = {};
-    Object.entries(group.children).forEach(([name, child]) => {
-      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);
-    });
-    return new UrlSegmentGroup(updatedSegments, children);
-  }
-  createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {
-    return redirectToSegments.map((s) => s.path[0] === ":" ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));
-  }
-  findPosParam(redirectTo, redirectToUrlSegment, posParams) {
-    const pos = posParams[redirectToUrlSegment.path.substring(1)];
-    if (!pos) throw new RuntimeError(4001, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);
-    return pos;
-  }
-  findOrReturn(redirectToUrlSegment, actualSegments) {
-    let idx = 0;
-    for (const s of actualSegments) {
-      if (s.path === redirectToUrlSegment.path) {
-        actualSegments.splice(idx);
-        return s;
-      }
-      idx++;
-    }
-    return redirectToUrlSegment;
-  }
-};
-var noMatch = {
-  matched: false,
-  consumedSegments: [],
-  remainingSegments: [],
-  parameters: {},
-  positionalParamSegments: {}
-};
-function matchWithChecks(segmentGroup, route, segments, injector, urlSerializer) {
-  const result = match(segmentGroup, route, segments);
-  if (!result.matched) {
-    return (0, import_rxjs.of)(result);
-  }
-  injector = getOrCreateRouteInjectorIfNeeded(route, injector);
-  return runCanMatchGuards(injector, route, segments, urlSerializer).pipe((0, import_operators.map)((v) => v === true ? result : __spreadValues({}, noMatch)));
-}
-function match(segmentGroup, route, segments) {
-  if (route.path === "**") {
-    return createWildcardMatchResult(segments);
-  }
-  if (route.path === "") {
-    if (route.pathMatch === "full" && (segmentGroup.hasChildren() || segments.length > 0)) {
-      return __spreadValues({}, noMatch);
-    }
-    return {
-      matched: true,
-      consumedSegments: [],
-      remainingSegments: segments,
-      parameters: {},
-      positionalParamSegments: {}
-    };
-  }
-  const matcher = route.matcher || defaultUrlMatcher;
-  const res = matcher(segments, segmentGroup, route);
-  if (!res) return __spreadValues({}, noMatch);
-  const posParams = {};
-  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {
-    posParams[k] = v.path;
-  });
-  const parameters = res.consumed.length > 0 ? __spreadValues(__spreadValues({}, posParams), res.consumed[res.consumed.length - 1].parameters) : posParams;
-  return {
-    matched: true,
-    consumedSegments: res.consumed,
-    remainingSegments: segments.slice(res.consumed.length),
-    // TODO(atscott): investigate combining parameters and positionalParamSegments
-    parameters,
-    positionalParamSegments: res.posParams ?? {}
-  };
-}
-function createWildcardMatchResult(segments) {
-  return {
-    matched: true,
-    parameters: segments.length > 0 ? last(segments).parameters : {},
-    consumedSegments: segments,
-    remainingSegments: [],
-    positionalParamSegments: {}
-  };
-}
-function split(segmentGroup, consumedSegments, slicedSegments, config) {
-  if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
-    const s2 = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
-    return {
-      segmentGroup: s2,
-      slicedSegments: []
-    };
-  }
-  if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
-    const s2 = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));
-    return {
-      segmentGroup: s2,
-      slicedSegments
-    };
-  }
-  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
-  return {
-    segmentGroup: s,
-    slicedSegments
-  };
-}
-function addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {
-  const res = {};
-  for (const r of routes) {
-    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
-      const s = new UrlSegmentGroup([], {});
-      res[getOutlet(r)] = s;
-    }
-  }
-  return __spreadValues(__spreadValues({}, children), res);
-}
-function createChildrenForEmptyPaths(routes, primarySegment) {
-  const res = {};
-  res[PRIMARY_OUTLET] = primarySegment;
-  for (const r of routes) {
-    if (r.path === "" && getOutlet(r) !== PRIMARY_OUTLET) {
-      const s = new UrlSegmentGroup([], {});
-      res[getOutlet(r)] = s;
-    }
-  }
-  return res;
-}
-function containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {
-  return routes.some((r) => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);
-}
-function containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {
-  return routes.some((r) => emptyPathMatch(segmentGroup, slicedSegments, r));
-}
-function emptyPathMatch(segmentGroup, slicedSegments, r) {
-  if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === "full") {
-    return false;
-  }
-  return r.path === "";
-}
-function noLeftoversInUrl(segmentGroup, segments, outlet) {
-  return segments.length === 0 && !segmentGroup.children[outlet];
-}
-var NoLeftoversInUrl = class {
-};
-function recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = "emptyOnly") {
-  return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer).recognize();
-}
-var MAX_ALLOWED_REDIRECTS = 31;
-var Recognizer = class {
-  injector;
-  configLoader;
-  rootComponentType;
-  config;
-  urlTree;
-  paramsInheritanceStrategy;
-  urlSerializer;
-  applyRedirects;
-  absoluteRedirectCount = 0;
-  allowRedirects = true;
-  constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer) {
-    this.injector = injector;
-    this.configLoader = configLoader;
-    this.rootComponentType = rootComponentType;
-    this.config = config;
-    this.urlTree = urlTree;
-    this.paramsInheritanceStrategy = paramsInheritanceStrategy;
-    this.urlSerializer = urlSerializer;
-    this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);
-  }
-  noMatchError(e) {
-    return new RuntimeError(4002, typeof ngDevMode === "undefined" || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);
-  }
-  recognize() {
-    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;
-    return this.match(rootSegmentGroup).pipe((0, import_operators.map)(({
-      children,
-      rootSnapshot
-    }) => {
-      const rootNode = new TreeNode(rootSnapshot, children);
-      const routeState = new RouterStateSnapshot("", rootNode);
-      const tree2 = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);
-      tree2.queryParams = this.urlTree.queryParams;
-      routeState.url = this.urlSerializer.serialize(tree2);
-      return {
-        state: routeState,
-        tree: tree2
-      };
-    }));
-  }
-  match(rootSegmentGroup) {
-    const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});
-    return this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot).pipe((0, import_operators.map)((children) => {
-      return {
-        children,
-        rootSnapshot
-      };
-    }), (0, import_operators.catchError)((e) => {
-      if (e instanceof AbsoluteRedirect) {
-        this.urlTree = e.urlTree;
-        return this.match(e.urlTree.root);
-      }
-      if (e instanceof NoMatch) {
-        throw this.noMatchError(e);
-      }
-      throw e;
-    }));
-  }
-  processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {
-    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
-      return this.processChildren(injector, config, segmentGroup, parentRoute);
-    }
-    return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute).pipe((0, import_operators.map)((child) => child instanceof TreeNode ? [child] : []));
-  }
-  /**
-   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if
-   * we cannot find a match for _any_ of the children.
-   *
-   * @param config - The `Routes` to match against
-   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the
-   *     config.
-   */
-  processChildren(injector, config, segmentGroup, parentRoute) {
-    const childOutlets = [];
-    for (const child of Object.keys(segmentGroup.children)) {
-      if (child === "primary") {
-        childOutlets.unshift(child);
-      } else {
-        childOutlets.push(child);
-      }
-    }
-    return (0, import_rxjs.from)(childOutlets).pipe((0, import_operators.concatMap)((childOutlet) => {
-      const child = segmentGroup.children[childOutlet];
-      const sortedConfig = sortByMatchingOutlets(config, childOutlet);
-      return this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);
-    }), (0, import_operators.scan)((children, outletChildren) => {
-      children.push(...outletChildren);
-      return children;
-    }), (0, import_operators.defaultIfEmpty)(null), (0, import_operators.last)(), (0, import_operators.mergeMap)((children) => {
-      if (children === null) return noMatch$1(segmentGroup);
-      const mergedChildren = mergeEmptyPathMatches(children);
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        checkOutletNameUniqueness(mergedChildren);
-      }
-      sortActivatedRouteSnapshots(mergedChildren);
-      return (0, import_rxjs.of)(mergedChildren);
-    }));
-  }
-  processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {
-    return (0, import_rxjs.from)(routes).pipe((0, import_operators.concatMap)((r) => {
-      return this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute).pipe((0, import_operators.catchError)((e) => {
-        if (e instanceof NoMatch) {
-          return (0, import_rxjs.of)(null);
-        }
-        throw e;
-      }));
-    }), (0, import_operators.first)((x) => !!x), (0, import_operators.catchError)((e) => {
-      if (isEmptyError(e)) {
-        if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
-          return (0, import_rxjs.of)(new NoLeftoversInUrl());
-        }
-        return noMatch$1(segmentGroup);
-      }
-      throw e;
-    }));
-  }
-  processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {
-    if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {
-      return noMatch$1(rawSegment);
-    }
-    if (route.redirectTo === void 0) {
-      return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);
-    }
-    if (this.allowRedirects && allowRedirects) {
-      return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);
-    }
-    return noMatch$1(rawSegment);
-  }
-  expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {
-    const {
-      matched,
-      parameters,
-      consumedSegments,
-      positionalParamSegments,
-      remainingSegments
-    } = match(segmentGroup, route, segments);
-    if (!matched) return noMatch$1(segmentGroup);
-    if (typeof route.redirectTo === "string" && route.redirectTo[0] === "/") {
-      this.absoluteRedirectCount++;
-      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {
-        if (ngDevMode) {
-          throw new RuntimeError(4016, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.
-This is currently a dev mode only error but will become a call stack size exceeded error in production in a future major version.`);
-        }
-        this.allowRedirects = false;
-      }
-    }
-    const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
-    const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);
-    currentSnapshot.params = Object.freeze(inherited.params);
-    currentSnapshot.data = Object.freeze(inherited.data);
-    const newTree = this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, currentSnapshot, injector);
-    return this.applyRedirects.lineralizeSegments(route, newTree).pipe((0, import_operators.mergeMap)((newSegments) => {
-      return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);
-    }));
-  }
-  matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {
-    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);
-    if (route.path === "**") {
-      rawSegment.children = {};
-    }
-    return matchResult.pipe((0, import_operators.switchMap)((result) => {
-      if (!result.matched) {
-        return noMatch$1(rawSegment);
-      }
-      injector = route._injector ?? injector;
-      return this.getChildConfig(injector, route, segments).pipe((0, import_operators.switchMap)(({
-        routes: childConfig
-      }) => {
-        const childInjector = route._loadedInjector ?? injector;
-        const {
-          parameters,
-          consumedSegments,
-          remainingSegments
-        } = result;
-        const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze(__spreadValues({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
-        const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
-        snapshot.params = Object.freeze(inherited.params);
-        snapshot.data = Object.freeze(inherited.data);
-        const {
-          segmentGroup,
-          slicedSegments
-        } = split(rawSegment, consumedSegments, remainingSegments, childConfig);
-        if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
-          return this.processChildren(childInjector, childConfig, segmentGroup, snapshot).pipe((0, import_operators.map)((children) => {
-            return new TreeNode(snapshot, children);
-          }));
-        }
-        if (childConfig.length === 0 && slicedSegments.length === 0) {
-          return (0, import_rxjs.of)(new TreeNode(snapshot, []));
-        }
-        const matchedOnOutlet = getOutlet(route) === outlet;
-        return this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot).pipe((0, import_operators.map)((child) => {
-          return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);
-        }));
-      }));
-    }));
-  }
-  getChildConfig(injector, route, segments) {
-    if (route.children) {
-      return (0, import_rxjs.of)({
-        routes: route.children,
-        injector
-      });
-    }
-    if (route.loadChildren) {
-      if (route._loadedRoutes !== void 0) {
-        return (0, import_rxjs.of)({
-          routes: route._loadedRoutes,
-          injector: route._loadedInjector
-        });
-      }
-      return runCanLoadGuards(injector, route, segments, this.urlSerializer).pipe((0, import_operators.mergeMap)((shouldLoadResult) => {
-        if (shouldLoadResult) {
-          return this.configLoader.loadChildren(injector, route).pipe((0, import_operators.tap)((cfg) => {
-            route._loadedRoutes = cfg.routes;
-            route._loadedInjector = cfg.injector;
-          }));
-        }
-        return canLoadFails(route);
-      }));
-    }
-    return (0, import_rxjs.of)({
-      routes: [],
-      injector
-    });
-  }
-};
-function sortActivatedRouteSnapshots(nodes) {
-  nodes.sort((a, b) => {
-    if (a.value.outlet === PRIMARY_OUTLET) return -1;
-    if (b.value.outlet === PRIMARY_OUTLET) return 1;
-    return a.value.outlet.localeCompare(b.value.outlet);
-  });
-}
-function hasEmptyPathConfig(node) {
-  const config = node.value.routeConfig;
-  return config && config.path === "";
-}
-function mergeEmptyPathMatches(nodes) {
-  const result = [];
-  const mergedNodes = /* @__PURE__ */ new Set();
-  for (const node of nodes) {
-    if (!hasEmptyPathConfig(node)) {
-      result.push(node);
-      continue;
-    }
-    const duplicateEmptyPathNode = result.find((resultNode) => node.value.routeConfig === resultNode.value.routeConfig);
-    if (duplicateEmptyPathNode !== void 0) {
-      duplicateEmptyPathNode.children.push(...node.children);
-      mergedNodes.add(duplicateEmptyPathNode);
-    } else {
-      result.push(node);
-    }
-  }
-  for (const mergedNode of mergedNodes) {
-    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);
-    result.push(new TreeNode(mergedNode.value, mergedChildren));
-  }
-  return result.filter((n) => !mergedNodes.has(n));
-}
-function checkOutletNameUniqueness(nodes) {
-  const names = {};
-  nodes.forEach((n) => {
-    const routeWithSameOutletName = names[n.value.outlet];
-    if (routeWithSameOutletName) {
-      const p = routeWithSameOutletName.url.map((s) => s.toString()).join("/");
-      const c = n.value.url.map((s) => s.toString()).join("/");
-      throw new RuntimeError(4006, (typeof ngDevMode === "undefined" || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
-    }
-    names[n.value.outlet] = n.value;
-  });
-}
-function getData(route) {
-  return route.data || {};
-}
-function getResolve(route) {
-  return route.resolve || {};
-}
-function recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy) {
-  return (0, import_operators.mergeMap)((t) => recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy).pipe((0, import_operators.map)(({
-    state: targetSnapshot,
-    tree: urlAfterRedirects
-  }) => {
-    return __spreadProps(__spreadValues({}, t), {
-      targetSnapshot,
-      urlAfterRedirects
-    });
-  })));
-}
-function resolveData(paramsInheritanceStrategy, injector) {
-  return (0, import_operators.mergeMap)((t) => {
-    const {
-      targetSnapshot,
-      guards: {
-        canActivateChecks
-      }
-    } = t;
-    if (!canActivateChecks.length) {
-      return (0, import_rxjs.of)(t);
-    }
-    const routesWithResolversToRun = new Set(canActivateChecks.map((check) => check.route));
-    const routesNeedingDataUpdates = /* @__PURE__ */ new Set();
-    for (const route of routesWithResolversToRun) {
-      if (routesNeedingDataUpdates.has(route)) {
-        continue;
-      }
-      for (const newRoute of flattenRouteTree(route)) {
-        routesNeedingDataUpdates.add(newRoute);
-      }
-    }
-    let routesProcessed = 0;
-    return (0, import_rxjs.from)(routesNeedingDataUpdates).pipe((0, import_operators.concatMap)((route) => {
-      if (routesWithResolversToRun.has(route)) {
-        return runResolve(route, targetSnapshot, paramsInheritanceStrategy, injector);
-      } else {
-        route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;
-        return (0, import_rxjs.of)(void 0);
-      }
-    }), (0, import_operators.tap)(() => routesProcessed++), (0, import_operators.takeLast)(1), (0, import_operators.mergeMap)((_) => routesProcessed === routesNeedingDataUpdates.size ? (0, import_rxjs.of)(t) : import_rxjs.EMPTY));
-  });
-}
-function flattenRouteTree(route) {
-  const descendants = route.children.map((child) => flattenRouteTree(child)).flat();
-  return [route, ...descendants];
-}
-function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {
-  const config = futureARS.routeConfig;
-  const resolve = futureARS._resolve;
-  if (config?.title !== void 0 && !hasStaticTitle(config)) {
-    resolve[RouteTitleKey] = config.title;
-  }
-  return resolveNode(resolve, futureARS, futureRSS, injector).pipe((0, import_operators.map)((resolvedData) => {
-    futureARS._resolvedData = resolvedData;
-    futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;
-    return null;
-  }));
-}
-function resolveNode(resolve, futureARS, futureRSS, injector) {
-  const keys = getDataKeys(resolve);
-  if (keys.length === 0) {
-    return (0, import_rxjs.of)({});
-  }
-  const data = {};
-  return (0, import_rxjs.from)(keys).pipe((0, import_operators.mergeMap)((key) => getResolver(resolve[key], futureARS, futureRSS, injector).pipe((0, import_operators.first)(), (0, import_operators.tap)((value) => {
-    if (value instanceof RedirectCommand) {
-      throw redirectingNavigationError(new DefaultUrlSerializer(), value);
-    }
-    data[key] = value;
-  }))), (0, import_operators.takeLast)(1), (0, import_operators.mapTo)(data), (0, import_operators.catchError)((e) => isEmptyError(e) ? import_rxjs.EMPTY : (0, import_rxjs.throwError)(e)));
-}
-function getResolver(injectionToken, futureARS, futureRSS, injector) {
-  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;
-  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);
-  const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));
-  return wrapIntoObservable(resolverValue);
-}
-function switchTap(next) {
-  return (0, import_operators.switchMap)((v) => {
-    const nextResult = next(v);
-    if (nextResult) {
-      return (0, import_rxjs.from)(nextResult).pipe((0, import_operators.map)(() => v));
-    }
-    return (0, import_rxjs.of)(v);
-  });
-}
-var TitleStrategy = class _TitleStrategy {
-  /**
-   * @returns The `title` of the deepest primary route.
-   */
-  buildTitle(snapshot) {
-    let pageTitle;
-    let route = snapshot.root;
-    while (route !== void 0) {
-      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;
-      route = route.children.find((child) => child.outlet === PRIMARY_OUTLET);
-    }
-    return pageTitle;
-  }
-  /**
-   * Given an `ActivatedRouteSnapshot`, returns the final value of the
-   * `Route.title` property, which can either be a static string or a resolved value.
-   */
-  getResolvedTitleForRoute(snapshot) {
-    return snapshot.data[RouteTitleKey];
-  }
-  static ɵfac = function TitleStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TitleStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _TitleStrategy,
-    factory: () => (() => inject(DefaultTitleStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TitleStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultTitleStrategy)
-    }]
-  }], null, null);
-})();
-var DefaultTitleStrategy = class _DefaultTitleStrategy extends TitleStrategy {
-  title;
-  constructor(title) {
-    super();
-    this.title = title;
-  }
-  /**
-   * Sets the title of the browser to the given value.
-   *
-   * @param title The `pageTitle` from the deepest primary route.
-   */
-  updateTitle(snapshot) {
-    const title = this.buildTitle(snapshot);
-    if (title !== void 0) {
-      this.title.setTitle(title);
-    }
-  }
-  static ɵfac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DefaultTitleStrategy)(ɵɵinject(Title));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultTitleStrategy,
-    factory: _DefaultTitleStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultTitleStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: Title
-  }], null);
-})();
-var ROUTER_CONFIGURATION = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router config" : "", {
-  providedIn: "root",
-  factory: () => ({})
-});
-var ɵEmptyOutletComponent = class _ɵEmptyOutletComponent {
-  static ɵfac = function ɵEmptyOutletComponent_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ɵEmptyOutletComponent)();
-  };
-  static ɵcmp = ɵɵdefineComponent({
-    type: _ɵEmptyOutletComponent,
-    selectors: [["ng-component"]],
-    decls: 1,
-    vars: 0,
-    template: function _EmptyOutletComponent_Template(rf, ctx) {
-      if (rf & 1) {
-        ɵɵelement(0, "router-outlet");
-      }
-    },
-    dependencies: [RouterOutlet],
-    encapsulation: 2
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵEmptyOutletComponent, [{
-    type: Component,
-    args: [{
-      template: `<router-outlet></router-outlet>`,
-      imports: [RouterOutlet]
-    }]
-  }], null, null);
-})();
-function standardizeConfig(r) {
-  const children = r.children && r.children.map(standardizeConfig);
-  const c = children ? __spreadProps(__spreadValues({}, r), {
-    children
-  }) : __spreadValues({}, r);
-  if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {
-    c.component = ɵEmptyOutletComponent;
-  }
-  return c;
-}
-var ROUTES = new InjectionToken(ngDevMode ? "ROUTES" : "");
-var RouterConfigLoader = class _RouterConfigLoader {
-  componentLoaders = /* @__PURE__ */ new WeakMap();
-  childrenLoaders = /* @__PURE__ */ new WeakMap();
-  onLoadStartListener;
-  onLoadEndListener;
-  compiler = inject(Compiler);
-  loadComponent(route) {
-    if (this.componentLoaders.get(route)) {
-      return this.componentLoaders.get(route);
-    } else if (route._loadedComponent) {
-      return (0, import_rxjs.of)(route._loadedComponent);
-    }
-    if (this.onLoadStartListener) {
-      this.onLoadStartListener(route);
-    }
-    const loadRunner = wrapIntoObservable(route.loadComponent()).pipe((0, import_operators.map)(maybeUnwrapDefaultExport), (0, import_operators.tap)((component) => {
-      if (this.onLoadEndListener) {
-        this.onLoadEndListener(route);
-      }
-      (typeof ngDevMode === "undefined" || ngDevMode) && assertStandalone(route.path ?? "", component);
-      route._loadedComponent = component;
-    }), (0, import_operators.finalize)(() => {
-      this.componentLoaders.delete(route);
-    }));
-    const loader = new import_rxjs.ConnectableObservable(loadRunner, () => new import_rxjs.Subject()).pipe((0, import_operators.refCount)());
-    this.componentLoaders.set(route, loader);
-    return loader;
-  }
-  loadChildren(parentInjector, route) {
-    if (this.childrenLoaders.get(route)) {
-      return this.childrenLoaders.get(route);
-    } else if (route._loadedRoutes) {
-      return (0, import_rxjs.of)({
-        routes: route._loadedRoutes,
-        injector: route._loadedInjector
-      });
-    }
-    if (this.onLoadStartListener) {
-      this.onLoadStartListener(route);
-    }
-    const moduleFactoryOrRoutes$ = loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);
-    const loadRunner = moduleFactoryOrRoutes$.pipe((0, import_operators.finalize)(() => {
-      this.childrenLoaders.delete(route);
-    }));
-    const loader = new import_rxjs.ConnectableObservable(loadRunner, () => new import_rxjs.Subject()).pipe((0, import_operators.refCount)());
-    this.childrenLoaders.set(route, loader);
-    return loader;
-  }
-  static ɵfac = function RouterConfigLoader_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterConfigLoader)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterConfigLoader,
-    factory: _RouterConfigLoader.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterConfigLoader, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-function loadChildren(route, compiler, parentInjector, onLoadEndListener) {
-  return wrapIntoObservable(route.loadChildren()).pipe((0, import_operators.map)(maybeUnwrapDefaultExport), (0, import_operators.mergeMap)((t) => {
-    if (t instanceof NgModuleFactory$1 || Array.isArray(t)) {
-      return (0, import_rxjs.of)(t);
-    } else {
-      return (0, import_rxjs.from)(compiler.compileModuleAsync(t));
-    }
-  }), (0, import_operators.map)((factoryOrRoutes) => {
-    if (onLoadEndListener) {
-      onLoadEndListener(route);
-    }
-    let injector;
-    let rawRoutes;
-    let requireStandaloneComponents = false;
-    if (Array.isArray(factoryOrRoutes)) {
-      rawRoutes = factoryOrRoutes;
-      requireStandaloneComponents = true;
-    } else {
-      injector = factoryOrRoutes.create(parentInjector).injector;
-      rawRoutes = injector.get(ROUTES, [], {
-        optional: true,
-        self: true
-      }).flat();
-    }
-    const routes = rawRoutes.map(standardizeConfig);
-    (typeof ngDevMode === "undefined" || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);
-    return {
-      routes,
-      injector
-    };
-  }));
-}
-function isWrappedDefaultExport(value) {
-  return value && typeof value === "object" && "default" in value;
-}
-function maybeUnwrapDefaultExport(input2) {
-  return isWrappedDefaultExport(input2) ? input2["default"] : input2;
-}
-var UrlHandlingStrategy = class _UrlHandlingStrategy {
-  static ɵfac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UrlHandlingStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _UrlHandlingStrategy,
-    factory: () => (() => inject(DefaultUrlHandlingStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UrlHandlingStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultUrlHandlingStrategy)
-    }]
-  }], null, null);
-})();
-var DefaultUrlHandlingStrategy = class _DefaultUrlHandlingStrategy {
-  shouldProcessUrl(url) {
-    return true;
-  }
-  extract(url) {
-    return url;
-  }
-  merge(newUrlPart, wholeUrl) {
-    return newUrlPart;
-  }
-  static ɵfac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DefaultUrlHandlingStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultUrlHandlingStrategy,
-    factory: _DefaultUrlHandlingStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultUrlHandlingStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var CREATE_VIEW_TRANSITION = new InjectionToken(ngDevMode ? "view transition helper" : "");
-var VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? "view transition options" : "");
-function createViewTransition(injector, from2, to) {
-  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);
-  const document = injector.get(DOCUMENT);
-  return injector.get(NgZone).runOutsideAngular(() => {
-    if (!document.startViewTransition || transitionOptions.skipNextTransition) {
-      transitionOptions.skipNextTransition = false;
-      return new Promise((resolve) => setTimeout(resolve));
-    }
-    let resolveViewTransitionStarted;
-    const viewTransitionStarted = new Promise((resolve) => {
-      resolveViewTransitionStarted = resolve;
-    });
-    const transition = document.startViewTransition(() => {
-      resolveViewTransitionStarted();
-      return createRenderPromise(injector);
-    });
-    const {
-      onViewTransitionCreated
-    } = transitionOptions;
-    if (onViewTransitionCreated) {
-      runInInjectionContext(injector, () => onViewTransitionCreated({
-        transition,
-        from: from2,
-        to
-      }));
-    }
-    return viewTransitionStarted;
-  });
-}
-function createRenderPromise(injector) {
-  return new Promise((resolve) => {
-    afterNextRender({
-      read: () => setTimeout(resolve)
-    }, {
-      injector
-    });
-  });
-}
-var NAVIGATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "navigation error handler" : "");
-var NavigationTransitions = class _NavigationTransitions {
-  currentNavigation = null;
-  currentTransition = null;
-  lastSuccessfulNavigation = null;
-  /**
-   * These events are used to communicate back to the Router about the state of the transition. The
-   * Router wants to respond to these events in various ways. Because the `NavigationTransition`
-   * class is not public, this event subject is not publicly exposed.
-   */
-  events = new import_rxjs.Subject();
-  /**
-   * Used to abort the current transition with an error.
-   */
-  transitionAbortSubject = new import_rxjs.Subject();
-  configLoader = inject(RouterConfigLoader);
-  environmentInjector = inject(EnvironmentInjector);
-  urlSerializer = inject(UrlSerializer);
-  rootContexts = inject(ChildrenOutletContexts);
-  location = inject(Location);
-  inputBindingEnabled = inject(INPUT_BINDER, {
-    optional: true
-  }) !== null;
-  titleStrategy = inject(TitleStrategy);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || "emptyOnly";
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  createViewTransition = inject(CREATE_VIEW_TRANSITION, {
-    optional: true
-  });
-  navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {
-    optional: true
-  });
-  navigationId = 0;
-  get hasRequestedNavigation() {
-    return this.navigationId !== 0;
-  }
-  transitions;
-  /**
-   * Hook that enables you to pause navigation after the preactivation phase.
-   * Used by `RouterModule`.
-   *
-   * @internal
-   */
-  afterPreactivation = () => (0, import_rxjs.of)(void 0);
-  /** @internal */
-  rootComponentType = null;
-  constructor() {
-    const onLoadStart = (r) => this.events.next(new RouteConfigLoadStart(r));
-    const onLoadEnd = (r) => this.events.next(new RouteConfigLoadEnd(r));
-    this.configLoader.onLoadEndListener = onLoadEnd;
-    this.configLoader.onLoadStartListener = onLoadStart;
-  }
-  complete() {
-    this.transitions?.complete();
-  }
-  handleNavigationRequest(request) {
-    const id = ++this.navigationId;
-    this.transitions?.next(__spreadProps(__spreadValues(__spreadValues({}, this.transitions.value), request), {
-      id
-    }));
-  }
-  setupNavigations(router, initialUrlTree, initialRouterState) {
-    this.transitions = new import_rxjs.BehaviorSubject({
-      id: 0,
-      currentUrlTree: initialUrlTree,
-      currentRawUrl: initialUrlTree,
-      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),
-      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),
-      rawUrl: initialUrlTree,
-      extras: {},
-      resolve: () => {
-      },
-      reject: () => {
-      },
-      promise: Promise.resolve(true),
-      source: IMPERATIVE_NAVIGATION,
-      restoredState: null,
-      currentSnapshot: initialRouterState.snapshot,
-      targetSnapshot: null,
-      currentRouterState: initialRouterState,
-      targetRouterState: null,
-      guards: {
-        canActivateChecks: [],
-        canDeactivateChecks: []
-      },
-      guardsResult: null
-    });
-    return this.transitions.pipe(
-      (0, import_operators.filter)((t) => t.id !== 0),
-      // Extract URL
-      (0, import_operators.map)((t) => __spreadProps(__spreadValues({}, t), {
-        extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)
-      })),
-      // Using switchMap so we cancel executing navigations when a new one comes in
-      (0, import_operators.switchMap)((overallTransitionState) => {
-        let completed = false;
-        let errored = false;
-        return (0, import_rxjs.of)(overallTransitionState).pipe(
-          (0, import_operators.switchMap)((t) => {
-            if (this.navigationId > overallTransitionState.id) {
-              const cancellationReason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : "";
-              this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);
-              return import_rxjs.EMPTY;
-            }
-            this.currentTransition = overallTransitionState;
-            this.currentNavigation = {
-              id: t.id,
-              initialUrl: t.rawUrl,
-              extractedUrl: t.extractedUrl,
-              targetBrowserUrl: typeof t.extras.browserUrl === "string" ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,
-              trigger: t.source,
-              extras: t.extras,
-              previousNavigation: !this.lastSuccessfulNavigation ? null : __spreadProps(__spreadValues({}, this.lastSuccessfulNavigation), {
-                previousNavigation: null
-              })
-            };
-            const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();
-            const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;
-            if (!urlTransition && onSameUrlNavigation !== "reload") {
-              const reason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : "";
-              this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));
-              t.resolve(false);
-              return import_rxjs.EMPTY;
-            }
-            if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {
-              return (0, import_rxjs.of)(t).pipe(
-                // Fire NavigationStart event
-                (0, import_operators.switchMap)((t2) => {
-                  const transition = this.transitions?.getValue();
-                  this.events.next(new NavigationStart(t2.id, this.urlSerializer.serialize(t2.extractedUrl), t2.source, t2.restoredState));
-                  if (transition !== this.transitions?.getValue()) {
-                    return import_rxjs.EMPTY;
-                  }
-                  return Promise.resolve(t2);
-                }),
-                // Recognize
-                recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy),
-                // Update URL if in `eager` update mode
-                (0, import_operators.tap)((t2) => {
-                  overallTransitionState.targetSnapshot = t2.targetSnapshot;
-                  overallTransitionState.urlAfterRedirects = t2.urlAfterRedirects;
-                  this.currentNavigation = __spreadProps(__spreadValues({}, this.currentNavigation), {
-                    finalUrl: t2.urlAfterRedirects
-                  });
-                  const routesRecognized = new RoutesRecognized(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                  this.events.next(routesRecognized);
-                })
-              );
-            } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {
-              const {
-                id,
-                extractedUrl,
-                source,
-                restoredState,
-                extras
-              } = t;
-              const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);
-              this.events.next(navStart);
-              const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;
-              this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-                targetSnapshot,
-                urlAfterRedirects: extractedUrl,
-                extras: __spreadProps(__spreadValues({}, extras), {
-                  skipLocationChange: false,
-                  replaceUrl: false
-                })
-              });
-              this.currentNavigation.finalUrl = extractedUrl;
-              return (0, import_rxjs.of)(overallTransitionState);
-            } else {
-              const reason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : "";
-              this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));
-              t.resolve(false);
-              return import_rxjs.EMPTY;
-            }
-          }),
-          // --- GUARDS ---
-          (0, import_operators.tap)((t) => {
-            const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
-            this.events.next(guardsStart);
-          }),
-          (0, import_operators.map)((t) => {
-            this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-              guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)
-            });
-            return overallTransitionState;
-          }),
-          checkGuards(this.environmentInjector, (evt) => this.events.next(evt)),
-          (0, import_operators.tap)((t) => {
-            overallTransitionState.guardsResult = t.guardsResult;
-            if (t.guardsResult && typeof t.guardsResult !== "boolean") {
-              throw redirectingNavigationError(this.urlSerializer, t.guardsResult);
-            }
-            const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);
-            this.events.next(guardsEnd);
-          }),
-          (0, import_operators.filter)((t) => {
-            if (!t.guardsResult) {
-              this.cancelNavigationTransition(t, "", NavigationCancellationCode.GuardRejected);
-              return false;
-            }
-            return true;
-          }),
-          // --- RESOLVE ---
-          switchTap((t) => {
-            if (t.guards.canActivateChecks.length) {
-              return (0, import_rxjs.of)(t).pipe((0, import_operators.tap)((t2) => {
-                const resolveStart = new ResolveStart(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                this.events.next(resolveStart);
-              }), (0, import_operators.switchMap)((t2) => {
-                let dataResolved = false;
-                return (0, import_rxjs.of)(t2).pipe(resolveData(this.paramsInheritanceStrategy, this.environmentInjector), (0, import_operators.tap)({
-                  next: () => dataResolved = true,
-                  complete: () => {
-                    if (!dataResolved) {
-                      this.cancelNavigationTransition(t2, typeof ngDevMode === "undefined" || ngDevMode ? `At least one route resolver didn't emit any value.` : "", NavigationCancellationCode.NoDataFromResolver);
-                    }
-                  }
-                }));
-              }), (0, import_operators.tap)((t2) => {
-                const resolveEnd = new ResolveEnd(t2.id, this.urlSerializer.serialize(t2.extractedUrl), this.urlSerializer.serialize(t2.urlAfterRedirects), t2.targetSnapshot);
-                this.events.next(resolveEnd);
-              }));
-            }
-            return void 0;
-          }),
-          // --- LOAD COMPONENTS ---
-          switchTap((t) => {
-            const loadComponents = (route) => {
-              const loaders = [];
-              if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) {
-                loaders.push(this.configLoader.loadComponent(route.routeConfig).pipe((0, import_operators.tap)((loadedComponent) => {
-                  route.component = loadedComponent;
-                }), (0, import_operators.map)(() => void 0)));
-              }
-              for (const child of route.children) {
-                loaders.push(...loadComponents(child));
-              }
-              return loaders;
-            };
-            return (0, import_rxjs.combineLatest)(loadComponents(t.targetSnapshot.root)).pipe((0, import_operators.defaultIfEmpty)(null), (0, import_operators.take)(1));
-          }),
-          switchTap(() => this.afterPreactivation()),
-          (0, import_operators.switchMap)(() => {
-            const {
-              currentSnapshot,
-              targetSnapshot
-            } = overallTransitionState;
-            const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);
-            return viewTransitionStarted ? (0, import_rxjs.from)(viewTransitionStarted).pipe((0, import_operators.map)(() => overallTransitionState)) : (0, import_rxjs.of)(overallTransitionState);
-          }),
-          (0, import_operators.map)((t) => {
-            const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);
-            this.currentTransition = overallTransitionState = __spreadProps(__spreadValues({}, t), {
-              targetRouterState
-            });
-            this.currentNavigation.targetRouterState = targetRouterState;
-            return overallTransitionState;
-          }),
-          (0, import_operators.tap)(() => {
-            this.events.next(new BeforeActivateRoutes());
-          }),
-          activateRoutes(this.rootContexts, router.routeReuseStrategy, (evt) => this.events.next(evt), this.inputBindingEnabled),
-          // Ensure that if some observable used to drive the transition doesn't
-          // complete, the navigation still finalizes This should never happen, but
-          // this is done as a safety measure to avoid surfacing this error (#49567).
-          (0, import_operators.take)(1),
-          (0, import_operators.tap)({
-            next: (t) => {
-              completed = true;
-              this.lastSuccessfulNavigation = this.currentNavigation;
-              this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));
-              this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);
-              t.resolve(true);
-            },
-            complete: () => {
-              completed = true;
-            }
-          }),
-          // There used to be a lot more logic happening directly within the
-          // transition Observable. Some of this logic has been refactored out to
-          // other places but there may still be errors that happen there. This gives
-          // us a way to cancel the transition from the outside. This may also be
-          // required in the future to support something like the abort signal of the
-          // Navigation API where the navigation gets aborted from outside the
-          // transition.
-          (0, import_operators.takeUntil)(this.transitionAbortSubject.pipe((0, import_operators.tap)((err) => {
-            throw err;
-          }))),
-          (0, import_operators.finalize)(() => {
-            if (!completed && !errored) {
-              const cancelationReason = typeof ngDevMode === "undefined" || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : "";
-              this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);
-            }
-            if (this.currentTransition?.id === overallTransitionState.id) {
-              this.currentNavigation = null;
-              this.currentTransition = null;
-            }
-          }),
-          (0, import_operators.catchError)((e) => {
-            errored = true;
-            if (isNavigationCancelingError(e)) {
-              this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));
-              if (!isRedirectingNavigationCancelingError(e)) {
-                overallTransitionState.resolve(false);
-              } else {
-                this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));
-              }
-            } else {
-              const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? void 0);
-              try {
-                const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));
-                if (navigationErrorHandlerResult instanceof RedirectCommand) {
-                  const {
-                    message,
-                    cancellationCode
-                  } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);
-                  this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));
-                  this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));
-                } else {
-                  this.events.next(navigationError);
-                  throw e;
-                }
-              } catch (ee) {
-                if (this.options.resolveNavigationPromiseOnError) {
-                  overallTransitionState.resolve(false);
-                } else {
-                  overallTransitionState.reject(ee);
-                }
-              }
-            }
-            return import_rxjs.EMPTY;
-          })
-        );
-      })
-    );
-  }
-  cancelNavigationTransition(t, reason, code) {
-    const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);
-    this.events.next(navCancel);
-    t.resolve(false);
-  }
-  /**
-   * @returns Whether we're navigating to somewhere that is not what the Router is
-   * currently set to.
-   */
-  isUpdatingInternalState() {
-    return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();
-  }
-  /**
-   * @returns Whether we're updating the browser URL to something new (navigation is going
-   * to somewhere not displayed in the URL bar and we will update the URL
-   * bar if navigation succeeds).
-   */
-  isUpdatedBrowserUrl() {
-    const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));
-    const targetBrowserUrl = this.currentNavigation?.targetBrowserUrl ?? this.currentNavigation?.extractedUrl;
-    return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !this.currentNavigation?.extras.skipLocationChange;
-  }
-  static ɵfac = function NavigationTransitions_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NavigationTransitions)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NavigationTransitions,
-    factory: _NavigationTransitions.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NavigationTransitions, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function isBrowserTriggeredNavigation(source) {
-  return source !== IMPERATIVE_NAVIGATION;
-}
-var RouteReuseStrategy = class _RouteReuseStrategy {
-  static ɵfac = function RouteReuseStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouteReuseStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouteReuseStrategy,
-    factory: () => (() => inject(DefaultRouteReuseStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouteReuseStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(DefaultRouteReuseStrategy)
-    }]
-  }], null, null);
-})();
-var BaseRouteReuseStrategy = class {
-  /**
-   * Whether the given route should detach for later reuse.
-   * Always returns false for `BaseRouteReuseStrategy`.
-   * */
-  shouldDetach(route) {
-    return false;
-  }
-  /**
-   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.
-   */
-  store(route, detachedTree) {
-  }
-  /** Returns `false`, meaning the route (and its subtree) is never reattached */
-  shouldAttach(route) {
-    return false;
-  }
-  /** Returns `null` because this strategy does not store routes for later re-use. */
-  retrieve(route) {
-    return null;
-  }
-  /**
-   * Determines if a route should be reused.
-   * This strategy returns `true` when the future route config and current route config are
-   * identical.
-   */
-  shouldReuseRoute(future, curr) {
-    return future.routeConfig === curr.routeConfig;
-  }
-};
-var DefaultRouteReuseStrategy = class _DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
-  static ɵfac = /* @__PURE__ */ (() => {
-    let ɵDefaultRouteReuseStrategy_BaseFactory;
-    return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {
-      return (ɵDefaultRouteReuseStrategy_BaseFactory || (ɵDefaultRouteReuseStrategy_BaseFactory = ɵɵgetInheritedFactory(_DefaultRouteReuseStrategy)))(__ngFactoryType__ || _DefaultRouteReuseStrategy);
-    };
-  })();
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DefaultRouteReuseStrategy,
-    factory: _DefaultRouteReuseStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultRouteReuseStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var StateManager = class _StateManager {
-  static ɵfac = function StateManager_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _StateManager)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _StateManager,
-    factory: () => (() => inject(HistoryStateManager))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(StateManager, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(HistoryStateManager)
-    }]
-  }], null, null);
-})();
-var HistoryStateManager = class _HistoryStateManager extends StateManager {
-  location = inject(Location);
-  urlSerializer = inject(UrlSerializer);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  canceledNavigationResolution = this.options.canceledNavigationResolution || "replace";
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  urlUpdateStrategy = this.options.urlUpdateStrategy || "deferred";
-  currentUrlTree = new UrlTree();
-  getCurrentUrlTree() {
-    return this.currentUrlTree;
-  }
-  rawUrlTree = this.currentUrlTree;
-  getRawUrlTree() {
-    return this.rawUrlTree;
-  }
-  /**
-   * The id of the currently active page in the router.
-   * Updated to the transition's target id on a successful navigation.
-   *
-   * This is used to track what page the router last activated. When an attempted navigation fails,
-   * the router can then use this to compute how to restore the state back to the previously active
-   * page.
-   */
-  currentPageId = 0;
-  lastSuccessfulId = -1;
-  restoredState() {
-    return this.location.getState();
-  }
-  /**
-   * The ɵrouterPageId of whatever page is currently active in the browser history. This is
-   * important for computing the target page id for new navigations because we need to ensure each
-   * page id in the browser history is 1 more than the previous entry.
-   */
-  get browserPageId() {
-    if (this.canceledNavigationResolution !== "computed") {
-      return this.currentPageId;
-    }
-    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;
-  }
-  routerState = createEmptyState(null);
-  getRouterState() {
-    return this.routerState;
-  }
-  stateMemento = this.createStateMemento();
-  createStateMemento() {
-    return {
-      rawUrlTree: this.rawUrlTree,
-      currentUrlTree: this.currentUrlTree,
-      routerState: this.routerState
-    };
-  }
-  registerNonRouterCurrentEntryChangeListener(listener) {
-    return this.location.subscribe((event) => {
-      if (event["type"] === "popstate") {
-        listener(event["url"], event.state);
-      }
-    });
-  }
-  handleRouterEvent(e, currentTransition) {
-    if (e instanceof NavigationStart) {
-      this.stateMemento = this.createStateMemento();
-    } else if (e instanceof NavigationSkipped) {
-      this.rawUrlTree = currentTransition.initialUrl;
-    } else if (e instanceof RoutesRecognized) {
-      if (this.urlUpdateStrategy === "eager") {
-        if (!currentTransition.extras.skipLocationChange) {
-          const rawUrl = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);
-          this.setBrowserUrl(currentTransition.targetBrowserUrl ?? rawUrl, currentTransition);
-        }
-      }
-    } else if (e instanceof BeforeActivateRoutes) {
-      this.currentUrlTree = currentTransition.finalUrl;
-      this.rawUrlTree = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);
-      this.routerState = currentTransition.targetRouterState;
-      if (this.urlUpdateStrategy === "deferred" && !currentTransition.extras.skipLocationChange) {
-        this.setBrowserUrl(currentTransition.targetBrowserUrl ?? this.rawUrlTree, currentTransition);
-      }
-    } else if (e instanceof NavigationCancel && (e.code === NavigationCancellationCode.GuardRejected || e.code === NavigationCancellationCode.NoDataFromResolver)) {
-      this.restoreHistory(currentTransition);
-    } else if (e instanceof NavigationError) {
-      this.restoreHistory(currentTransition, true);
-    } else if (e instanceof NavigationEnd) {
-      this.lastSuccessfulId = e.id;
-      this.currentPageId = this.browserPageId;
-    }
-  }
-  setBrowserUrl(url, transition) {
-    const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;
-    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {
-      const currentBrowserPageId = this.browserPageId;
-      const state = __spreadValues(__spreadValues({}, transition.extras.state), this.generateNgRouterState(transition.id, currentBrowserPageId));
-      this.location.replaceState(path, "", state);
-    } else {
-      const state = __spreadValues(__spreadValues({}, transition.extras.state), this.generateNgRouterState(transition.id, this.browserPageId + 1));
-      this.location.go(path, "", state);
-    }
-  }
-  /**
-   * Performs the necessary rollback action to restore the browser URL to the
-   * state before the transition.
-   */
-  restoreHistory(navigation, restoringFromCaughtError = false) {
-    if (this.canceledNavigationResolution === "computed") {
-      const currentBrowserPageId = this.browserPageId;
-      const targetPagePosition = this.currentPageId - currentBrowserPageId;
-      if (targetPagePosition !== 0) {
-        this.location.historyGo(targetPagePosition);
-      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {
-        this.resetState(navigation);
-        this.resetUrlToCurrentUrlTree();
-      } else {
-      }
-    } else if (this.canceledNavigationResolution === "replace") {
-      if (restoringFromCaughtError) {
-        this.resetState(navigation);
-      }
-      this.resetUrlToCurrentUrlTree();
-    }
-  }
-  resetState(navigation) {
-    this.routerState = this.stateMemento.routerState;
-    this.currentUrlTree = this.stateMemento.currentUrlTree;
-    this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);
-  }
-  resetUrlToCurrentUrlTree() {
-    this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), "", this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));
-  }
-  generateNgRouterState(navigationId, routerPageId) {
-    if (this.canceledNavigationResolution === "computed") {
-      return {
-        navigationId,
-        ɵrouterPageId: routerPageId
-      };
-    }
-    return {
-      navigationId
-    };
-  }
-  static ɵfac = /* @__PURE__ */ (() => {
-    let ɵHistoryStateManager_BaseFactory;
-    return function HistoryStateManager_Factory(__ngFactoryType__) {
-      return (ɵHistoryStateManager_BaseFactory || (ɵHistoryStateManager_BaseFactory = ɵɵgetInheritedFactory(_HistoryStateManager)))(__ngFactoryType__ || _HistoryStateManager);
-    };
-  })();
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HistoryStateManager,
-    factory: _HistoryStateManager.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HistoryStateManager, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var NavigationResult;
-(function(NavigationResult2) {
-  NavigationResult2[NavigationResult2["COMPLETE"] = 0] = "COMPLETE";
-  NavigationResult2[NavigationResult2["FAILED"] = 1] = "FAILED";
-  NavigationResult2[NavigationResult2["REDIRECTING"] = 2] = "REDIRECTING";
-})(NavigationResult || (NavigationResult = {}));
-function afterNextNavigation(router, action) {
-  router.events.pipe((0, import_operators.filter)((e) => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), (0, import_operators.map)((e) => {
-    if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {
-      return NavigationResult.COMPLETE;
-    }
-    const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;
-    return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;
-  }), (0, import_operators.filter)((result) => result !== NavigationResult.REDIRECTING), (0, import_operators.take)(1)).subscribe(() => {
-    action();
-  });
-}
-var exactMatchOptions = {
-  paths: "exact",
-  fragment: "ignored",
-  matrixParams: "ignored",
-  queryParams: "exact"
-};
-var subsetMatchOptions = {
-  paths: "subset",
-  fragment: "ignored",
-  matrixParams: "ignored",
-  queryParams: "subset"
-};
-var Router = class _Router {
-  get currentUrlTree() {
-    return this.stateManager.getCurrentUrlTree();
-  }
-  get rawUrlTree() {
-    return this.stateManager.getRawUrlTree();
-  }
-  disposed = false;
-  nonRouterCurrentEntryChangeSubscription;
-  console = inject(Console);
-  stateManager = inject(StateManager);
-  options = inject(ROUTER_CONFIGURATION, {
-    optional: true
-  }) || {};
-  pendingTasks = inject(PendingTasksInternal);
-  urlUpdateStrategy = this.options.urlUpdateStrategy || "deferred";
-  navigationTransitions = inject(NavigationTransitions);
-  urlSerializer = inject(UrlSerializer);
-  location = inject(Location);
-  urlHandlingStrategy = inject(UrlHandlingStrategy);
-  /**
-   * The private `Subject` type for the public events exposed in the getter. This is used internally
-   * to push events to. The separate field allows us to expose separate types in the public API
-   * (i.e., an Observable rather than the Subject).
-   */
-  _events = new import_rxjs.Subject();
-  /**
-   * An event stream for routing events.
-   */
-  get events() {
-    return this._events;
-  }
-  /**
-   * The current state of routing in this NgModule.
-   */
-  get routerState() {
-    return this.stateManager.getRouterState();
-  }
-  /**
-   * True if at least one navigation event has occurred,
-   * false otherwise.
-   */
-  navigated = false;
-  /**
-   * A strategy for re-using routes.
-   *
-   * @deprecated Configure using `providers` instead:
-   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.
-   */
-  routeReuseStrategy = inject(RouteReuseStrategy);
-  /**
-   * How to handle a navigation request to the current URL.
-   *
-   *
-   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.
-   * @see {@link withRouterConfig}
-   * @see {@link provideRouter}
-   * @see {@link RouterModule}
-   */
-  onSameUrlNavigation = this.options.onSameUrlNavigation || "ignore";
-  config = inject(ROUTES, {
-    optional: true
-  })?.flat() ?? [];
-  /**
-   * Indicates whether the application has opted in to binding Router data to component inputs.
-   *
-   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or
-   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.
-   */
-  componentInputBindingEnabled = !!inject(INPUT_BINDER, {
-    optional: true
-  });
-  constructor() {
-    this.resetConfig(this.config);
-    this.navigationTransitions.setupNavigations(this, this.currentUrlTree, this.routerState).subscribe({
-      error: (e) => {
-        this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);
-      }
-    });
-    this.subscribeToNavigationEvents();
-  }
-  eventsSubscription = new import_rxjs.Subscription();
-  subscribeToNavigationEvents() {
-    const subscription = this.navigationTransitions.events.subscribe((e) => {
-      try {
-        const currentTransition = this.navigationTransitions.currentTransition;
-        const currentNavigation = this.navigationTransitions.currentNavigation;
-        if (currentTransition !== null && currentNavigation !== null) {
-          this.stateManager.handleRouterEvent(e, currentNavigation);
-          if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {
-            this.navigated = true;
-          } else if (e instanceof NavigationEnd) {
-            this.navigated = true;
-          } else if (e instanceof RedirectRequest) {
-            const opts = e.navigationBehaviorOptions;
-            const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);
-            const extras = __spreadValues({
-              browserUrl: currentTransition.extras.browserUrl,
-              info: currentTransition.extras.info,
-              skipLocationChange: currentTransition.extras.skipLocationChange,
-              // The URL is already updated at this point if we have 'eager' URL
-              // updates or if the navigation was triggered by the browser (back
-              // button, URL bar, etc). We want to replace that item in history
-              // if the navigation is rejected.
-              replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === "eager" || isBrowserTriggeredNavigation(currentTransition.source)
-            }, opts);
-            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {
-              resolve: currentTransition.resolve,
-              reject: currentTransition.reject,
-              promise: currentTransition.promise
-            });
-          }
-        }
-        if (isPublicRouterEvent(e)) {
-          this._events.next(e);
-        }
-      } catch (e2) {
-        this.navigationTransitions.transitionAbortSubject.next(e2);
-      }
-    });
-    this.eventsSubscription.add(subscription);
-  }
-  /** @internal */
-  resetRootComponentType(rootComponentType) {
-    this.routerState.root.component = rootComponentType;
-    this.navigationTransitions.rootComponentType = rootComponentType;
-  }
-  /**
-   * Sets up the location change listener and performs the initial navigation.
-   */
-  initialNavigation() {
-    this.setUpLocationChangeListener();
-    if (!this.navigationTransitions.hasRequestedNavigation) {
-      this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());
-    }
-  }
-  /**
-   * Sets up the location change listener. This listener detects navigations triggered from outside
-   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router
-   * navigation so that the correct events, guards, etc. are triggered.
-   */
-  setUpLocationChangeListener() {
-    this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {
-      setTimeout(() => {
-        this.navigateToSyncWithBrowser(url, "popstate", state);
-      }, 0);
-    });
-  }
-  /**
-   * Schedules a router navigation to synchronize Router state with the browser state.
-   *
-   * This is done as a response to a popstate event and the initial navigation. These
-   * two scenarios represent times when the browser URL/state has been updated and
-   * the Router needs to respond to ensure its internal state matches.
-   */
-  navigateToSyncWithBrowser(url, source, state) {
-    const extras = {
-      replaceUrl: true
-    };
-    const restoredState = state?.navigationId ? state : null;
-    if (state) {
-      const stateCopy = __spreadValues({}, state);
-      delete stateCopy.navigationId;
-      delete stateCopy.ɵrouterPageId;
-      if (Object.keys(stateCopy).length !== 0) {
-        extras.state = stateCopy;
-      }
-    }
-    const urlTree = this.parseUrl(url);
-    this.scheduleNavigation(urlTree, source, restoredState, extras);
-  }
-  /** The current URL. */
-  get url() {
-    return this.serializeUrl(this.currentUrlTree);
-  }
-  /**
-   * Returns the current `Navigation` object when the router is navigating,
-   * and `null` when idle.
-   */
-  getCurrentNavigation() {
-    return this.navigationTransitions.currentNavigation;
-  }
-  /**
-   * The `Navigation` object of the most recent navigation to succeed and `null` if there
-   *     has not been a successful navigation yet.
-   */
-  get lastSuccessfulNavigation() {
-    return this.navigationTransitions.lastSuccessfulNavigation;
-  }
-  /**
-   * Resets the route configuration used for navigation and generating links.
-   *
-   * @param config The route array for the new configuration.
-   *
-   * @usageNotes
-   *
-   * ```
-   * router.resetConfig([
-   *  { path: 'team/:id', component: TeamCmp, children: [
-   *    { path: 'simple', component: SimpleCmp },
-   *    { path: 'user/:name', component: UserCmp }
-   *  ]}
-   * ]);
-   * ```
-   */
-  resetConfig(config) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && validateConfig(config);
-    this.config = config.map(standardizeConfig);
-    this.navigated = false;
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.dispose();
-  }
-  /** Disposes of the router. */
-  dispose() {
-    this.navigationTransitions.complete();
-    if (this.nonRouterCurrentEntryChangeSubscription) {
-      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();
-      this.nonRouterCurrentEntryChangeSubscription = void 0;
-    }
-    this.disposed = true;
-    this.eventsSubscription.unsubscribe();
-  }
-  /**
-   * Appends URL segments to the current URL tree to create a new URL tree.
-   *
-   * @param commands An array of URL fragments with which to construct the new URL tree.
-   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
-   * segments, followed by the parameters for each segment.
-   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`
-   * property of the options object, if supplied.
-   * @param navigationExtras Options that control the navigation strategy.
-   * @returns The new URL tree.
-   *
-   * @usageNotes
-   *
-   * ```
-   * // create /team/33/user/11
-   * router.createUrlTree(['/team', 33, 'user', 11]);
-   *
-   * // create /team/33;expand=true/user/11
-   * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);
-   *
-   * // you can collapse static segments like this (this works only with the first passed-in value):
-   * router.createUrlTree(['/team/33/user', userId]);
-   *
-   * // If the first segment can contain slashes, and you do not want the router to split it,
-   * // you can do the following:
-   * router.createUrlTree([{segmentPath: '/one/two'}]);
-   *
-   * // create /team/33/(user/11//right:chat)
-   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);
-   *
-   * // remove the right secondary node
-   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);
-   *
-   * // assuming the current url is `/team/33/user/11` and the route points to `user/11`
-   *
-   * // navigate to /team/33/user/11/details
-   * router.createUrlTree(['details'], {relativeTo: route});
-   *
-   * // navigate to /team/33/user/22
-   * router.createUrlTree(['../22'], {relativeTo: route});
-   *
-   * // navigate to /team/44/user/22
-   * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});
-   *
-   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the
-   * tree should be created relative to the root.
-   * ```
-   */
-  createUrlTree(commands, navigationExtras = {}) {
-    const {
-      relativeTo,
-      queryParams,
-      fragment,
-      queryParamsHandling,
-      preserveFragment
-    } = navigationExtras;
-    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;
-    let q = null;
-    switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {
-      case "merge":
-        q = __spreadValues(__spreadValues({}, this.currentUrlTree.queryParams), queryParams);
-        break;
-      case "preserve":
-        q = this.currentUrlTree.queryParams;
-        break;
-      default:
-        q = queryParams || null;
-    }
-    if (q !== null) {
-      q = this.removeEmptyProps(q);
-    }
-    let relativeToUrlSegmentGroup;
-    try {
-      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;
-      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
-    } catch (e) {
-      if (typeof commands[0] !== "string" || commands[0][0] !== "/") {
-        commands = [];
-      }
-      relativeToUrlSegmentGroup = this.currentUrlTree.root;
-    }
-    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);
-  }
-  /**
-   * Navigates to a view using an absolute route path.
-   *
-   * @param url An absolute path for a defined route. The function does not apply any delta to the
-   *     current URL.
-   * @param extras An object containing properties that modify the navigation strategy.
-   *
-   * @returns A Promise that resolves to 'true' when navigation succeeds,
-   * to 'false' when navigation fails, or is rejected on error.
-   *
-   * @usageNotes
-   *
-   * The following calls request navigation to an absolute path.
-   *
-   * ```
-   * router.navigateByUrl("/team/33/user/11");
-   *
-   * // Navigate without updating the URL
-   * router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
-   * ```
-   *
-   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)
-   *
-   */
-  navigateByUrl(url, extras = {
-    skipLocationChange: false
-  }) {
-    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);
-    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);
-    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);
-  }
-  /**
-   * Navigate based on the provided array of commands and a starting point.
-   * If no starting route is provided, the navigation is absolute.
-   *
-   * @param commands An array of URL fragments with which to construct the target URL.
-   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
-   * segments, followed by the parameters for each segment.
-   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property
-   * of the options object, if supplied.
-   * @param extras An options object that determines how the URL should be constructed or
-   *     interpreted.
-   *
-   * @returns A Promise that resolves to `true` when navigation succeeds, or `false` when navigation
-   *     fails. The Promise is rejected when an error occurs if `resolveNavigationPromiseOnError` is
-   * not `true`.
-   *
-   * @usageNotes
-   *
-   * The following calls request navigation to a dynamic route path relative to the current URL.
-   *
-   * ```
-   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});
-   *
-   * // Navigate without updating the URL, overriding the default behavior
-   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});
-   * ```
-   *
-   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)
-   *
-   */
-  navigate(commands, extras = {
-    skipLocationChange: false
-  }) {
-    validateCommands(commands);
-    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);
-  }
-  /** Serializes a `UrlTree` into a string */
-  serializeUrl(url) {
-    return this.urlSerializer.serialize(url);
-  }
-  /** Parses a string into a `UrlTree` */
-  parseUrl(url) {
-    try {
-      return this.urlSerializer.parse(url);
-    } catch {
-      return this.urlSerializer.parse("/");
-    }
-  }
-  isActive(url, matchOptions) {
-    let options;
-    if (matchOptions === true) {
-      options = __spreadValues({}, exactMatchOptions);
-    } else if (matchOptions === false) {
-      options = __spreadValues({}, subsetMatchOptions);
-    } else {
-      options = matchOptions;
-    }
-    if (isUrlTree(url)) {
-      return containsTree(this.currentUrlTree, url, options);
-    }
-    const urlTree = this.parseUrl(url);
-    return containsTree(this.currentUrlTree, urlTree, options);
-  }
-  removeEmptyProps(params) {
-    return Object.entries(params).reduce((result, [key, value]) => {
-      if (value !== null && value !== void 0) {
-        result[key] = value;
-      }
-      return result;
-    }, {});
-  }
-  scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {
-    if (this.disposed) {
-      return Promise.resolve(false);
-    }
-    let resolve;
-    let reject;
-    let promise;
-    if (priorPromise) {
-      resolve = priorPromise.resolve;
-      reject = priorPromise.reject;
-      promise = priorPromise.promise;
-    } else {
-      promise = new Promise((res, rej) => {
-        resolve = res;
-        reject = rej;
-      });
-    }
-    const taskId = this.pendingTasks.add();
-    afterNextNavigation(this, () => {
-      queueMicrotask(() => this.pendingTasks.remove(taskId));
-    });
-    this.navigationTransitions.handleNavigationRequest({
-      source,
-      restoredState,
-      currentUrlTree: this.currentUrlTree,
-      currentRawUrl: this.currentUrlTree,
-      rawUrl,
-      extras,
-      resolve,
-      reject,
-      promise,
-      currentSnapshot: this.routerState.snapshot,
-      currentRouterState: this.routerState
-    });
-    return promise.catch((e) => {
-      return Promise.reject(e);
-    });
-  }
-  static ɵfac = function Router_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Router)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Router,
-    factory: _Router.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Router, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function validateCommands(commands) {
-  for (let i = 0; i < commands.length; i++) {
-    const cmd = commands[i];
-    if (cmd == null) {
-      throw new RuntimeError(4008, (typeof ngDevMode === "undefined" || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);
-    }
-  }
-}
-function isPublicRouterEvent(e) {
-  return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);
-}
-var RouterLink = class _RouterLink {
-  router;
-  route;
-  tabIndexAttribute;
-  renderer;
-  el;
-  locationStrategy;
-  /**
-   * Represents an `href` attribute value applied to a host element,
-   * when a host element is `<a>`. For other tags, the value is `null`.
-   */
-  href = null;
-  /**
-   * Represents the `target` attribute on a host element.
-   * This is only used when the host element is an `<a>` tag.
-   */
-  target;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#queryParams}
-   * @see {@link Router#createUrlTree}
-   */
-  queryParams;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#fragment}
-   * @see {@link Router#createUrlTree}
-   */
-  fragment;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#queryParamsHandling}
-   * @see {@link Router#createUrlTree}
-   */
-  queryParamsHandling;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#state}
-   * @see {@link Router#navigateByUrl}
-   */
-  state;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#info}
-   * @see {@link Router#navigateByUrl}
-   */
-  info;
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * Specify a value here when you do not want to use the default value
-   * for `routerLink`, which is the current activated route.
-   * Note that a value of `undefined` here will use the `routerLink` default.
-   * @see {@link UrlCreationOptions#relativeTo}
-   * @see {@link Router#createUrlTree}
-   */
-  relativeTo;
-  /** Whether a host element is an `<a>` tag. */
-  isAnchorElement;
-  subscription;
-  /** @internal */
-  onChanges = new import_rxjs.Subject();
-  constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {
-    this.router = router;
-    this.route = route;
-    this.tabIndexAttribute = tabIndexAttribute;
-    this.renderer = renderer;
-    this.el = el;
-    this.locationStrategy = locationStrategy;
-    const tagName = el.nativeElement.tagName?.toLowerCase();
-    this.isAnchorElement = tagName === "a" || tagName === "area";
-    if (this.isAnchorElement) {
-      this.subscription = router.events.subscribe((s) => {
-        if (s instanceof NavigationEnd) {
-          this.updateHref();
-        }
-      });
-    } else {
-      this.setTabIndexIfNotOnNativeEl("0");
-    }
-  }
-  /**
-   * Passed to {@link Router#createUrlTree} as part of the
-   * `UrlCreationOptions`.
-   * @see {@link UrlCreationOptions#preserveFragment}
-   * @see {@link Router#createUrlTree}
-   */
-  preserveFragment = false;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#skipLocationChange}
-   * @see {@link Router#navigateByUrl}
-   */
-  skipLocationChange = false;
-  /**
-   * Passed to {@link Router#navigateByUrl} as part of the
-   * `NavigationBehaviorOptions`.
-   * @see {@link NavigationBehaviorOptions#replaceUrl}
-   * @see {@link Router#navigateByUrl}
-   */
-  replaceUrl = false;
-  /**
-   * Modifies the tab index if there was not a tabindex attribute on the element during
-   * instantiation.
-   */
-  setTabIndexIfNotOnNativeEl(newTabIndex) {
-    if (this.tabIndexAttribute != null || this.isAnchorElement) {
-      return;
-    }
-    this.applyAttributeValue("tabindex", newTabIndex);
-  }
-  /** @nodoc */
-  // TODO(atscott): Remove changes parameter in major version as a breaking change.
-  ngOnChanges(changes) {
-    if (ngDevMode && isUrlTree(this.routerLinkInput) && (this.fragment !== void 0 || this.queryParams || this.queryParamsHandling || this.preserveFragment || this.relativeTo)) {
-      throw new RuntimeError(4016, "Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.");
-    }
-    if (this.isAnchorElement) {
-      this.updateHref();
-    }
-    this.onChanges.next(this);
-  }
-  routerLinkInput = null;
-  /**
-   * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.
-   *   - **array**: commands to pass to {@link Router#createUrlTree}.
-   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
-   *   - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands
-   *     and other inputs that correspond to properties of `UrlCreationOptions`.
-   *   - **null|undefined**: effectively disables the `routerLink`
-   * @see {@link Router#createUrlTree}
-   */
-  set routerLink(commandsOrUrlTree) {
-    if (commandsOrUrlTree == null) {
-      this.routerLinkInput = null;
-      this.setTabIndexIfNotOnNativeEl(null);
-    } else {
-      if (isUrlTree(commandsOrUrlTree)) {
-        this.routerLinkInput = commandsOrUrlTree;
-      } else {
-        this.routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];
-      }
-      this.setTabIndexIfNotOnNativeEl("0");
-    }
-  }
-  /** @nodoc */
-  onClick(button, ctrlKey, shiftKey, altKey, metaKey) {
-    const urlTree = this.urlTree;
-    if (urlTree === null) {
-      return true;
-    }
-    if (this.isAnchorElement) {
-      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {
-        return true;
-      }
-      if (typeof this.target === "string" && this.target != "_self") {
-        return true;
-      }
-    }
-    const extras = {
-      skipLocationChange: this.skipLocationChange,
-      replaceUrl: this.replaceUrl,
-      state: this.state,
-      info: this.info
-    };
-    this.router.navigateByUrl(urlTree, extras);
-    return !this.isAnchorElement;
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.subscription?.unsubscribe();
-  }
-  updateHref() {
-    const urlTree = this.urlTree;
-    this.href = urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) : null;
-    const sanitizedValue = this.href === null ? null : (
-      // This class represents a directive that can be added to both `<a>` elements,
-      // as well as other elements. As a result, we can't define security context at
-      // compile time. So the security context is deferred to runtime.
-      // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function
-      // based on the tag and property names. The logic mimics the one from
-      // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.
-      //
-      // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`
-      // instead of applying a value via a renderer, after a final merge of the
-      // `RouterLinkWithHref` directive.
-      ɵɵsanitizeUrlOrResourceUrl(this.href, this.el.nativeElement.tagName.toLowerCase(), "href")
-    );
-    this.applyAttributeValue("href", sanitizedValue);
-  }
-  applyAttributeValue(attrName, attrValue) {
-    const renderer = this.renderer;
-    const nativeElement = this.el.nativeElement;
-    if (attrValue !== null) {
-      renderer.setAttribute(nativeElement, attrName, attrValue);
-    } else {
-      renderer.removeAttribute(nativeElement, attrName);
-    }
-  }
-  get urlTree() {
-    if (this.routerLinkInput === null) {
-      return null;
-    } else if (isUrlTree(this.routerLinkInput)) {
-      return this.routerLinkInput;
-    }
-    return this.router.createUrlTree(this.routerLinkInput, {
-      // If the `relativeTo` input is not defined, we want to use `this.route` by default.
-      // Otherwise, we should use the value provided by the user in the input.
-      relativeTo: this.relativeTo !== void 0 ? this.relativeTo : this.route,
-      queryParams: this.queryParams,
-      fragment: this.fragment,
-      queryParamsHandling: this.queryParamsHandling,
-      preserveFragment: this.preserveFragment
-    });
-  }
-  static ɵfac = function RouterLink_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterLink)(ɵɵdirectiveInject(Router), ɵɵdirectiveInject(ActivatedRoute), ɵɵinjectAttribute("tabindex"), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(LocationStrategy));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterLink,
-    selectors: [["", "routerLink", ""]],
-    hostVars: 1,
-    hostBindings: function RouterLink_HostBindings(rf, ctx) {
-      if (rf & 1) {
-        ɵɵlistener("click", function RouterLink_click_HostBindingHandler($event) {
-          return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);
-        });
-      }
-      if (rf & 2) {
-        ɵɵattribute("target", ctx.target);
-      }
-    },
-    inputs: {
-      target: "target",
-      queryParams: "queryParams",
-      fragment: "fragment",
-      queryParamsHandling: "queryParamsHandling",
-      state: "state",
-      info: "info",
-      relativeTo: "relativeTo",
-      preserveFragment: [2, "preserveFragment", "preserveFragment", booleanAttribute],
-      skipLocationChange: [2, "skipLocationChange", "skipLocationChange", booleanAttribute],
-      replaceUrl: [2, "replaceUrl", "replaceUrl", booleanAttribute],
-      routerLink: "routerLink"
-    },
-    features: [ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterLink, [{
-    type: Directive,
-    args: [{
-      selector: "[routerLink]"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: ActivatedRoute
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Attribute,
-      args: ["tabindex"]
-    }]
-  }, {
-    type: Renderer2
-  }, {
-    type: ElementRef
-  }, {
-    type: LocationStrategy
-  }], {
-    target: [{
-      type: HostBinding,
-      args: ["attr.target"]
-    }, {
-      type: Input
-    }],
-    queryParams: [{
-      type: Input
-    }],
-    fragment: [{
-      type: Input
-    }],
-    queryParamsHandling: [{
-      type: Input
-    }],
-    state: [{
-      type: Input
-    }],
-    info: [{
-      type: Input
-    }],
-    relativeTo: [{
-      type: Input
-    }],
-    preserveFragment: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    skipLocationChange: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    replaceUrl: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    routerLink: [{
-      type: Input
-    }],
-    onClick: [{
-      type: HostListener,
-      args: ["click", ["$event.button", "$event.ctrlKey", "$event.shiftKey", "$event.altKey", "$event.metaKey"]]
-    }]
-  });
-})();
-var RouterLinkActive = class _RouterLinkActive {
-  router;
-  element;
-  renderer;
-  cdr;
-  link;
-  links;
-  classes = [];
-  routerEventsSubscription;
-  linkInputChangesSubscription;
-  _isActive = false;
-  get isActive() {
-    return this._isActive;
-  }
-  /**
-   * Options to configure how to determine if the router link is active.
-   *
-   * These options are passed to the `Router.isActive()` function.
-   *
-   * @see {@link Router#isActive}
-   */
-  routerLinkActiveOptions = {
-    exact: false
-  };
-  /**
-   * Aria-current attribute to apply when the router link is active.
-   *
-   * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.
-   *
-   * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}
-   */
-  ariaCurrentWhenActive;
-  /**
-   *
-   * You can use the output `isActiveChange` to get notified each time the link becomes
-   * active or inactive.
-   *
-   * Emits:
-   * true  -> Route is active
-   * false -> Route is inactive
-   *
-   * ```
-   * <a
-   *  routerLink="/user/bob"
-   *  routerLinkActive="active-link"
-   *  (isActiveChange)="this.onRouterLinkActive($event)">Bob</a>
-   * ```
-   */
-  isActiveChange = new EventEmitter();
-  constructor(router, element, renderer, cdr, link) {
-    this.router = router;
-    this.element = element;
-    this.renderer = renderer;
-    this.cdr = cdr;
-    this.link = link;
-    this.routerEventsSubscription = router.events.subscribe((s) => {
-      if (s instanceof NavigationEnd) {
-        this.update();
-      }
-    });
-  }
-  /** @nodoc */
-  ngAfterContentInit() {
-    (0, import_rxjs.of)(this.links.changes, (0, import_rxjs.of)(null)).pipe((0, import_operators.mergeAll)()).subscribe((_) => {
-      this.update();
-      this.subscribeToEachLinkOnChanges();
-    });
-  }
-  subscribeToEachLinkOnChanges() {
-    this.linkInputChangesSubscription?.unsubscribe();
-    const allLinkChanges = [...this.links.toArray(), this.link].filter((link) => !!link).map((link) => link.onChanges);
-    this.linkInputChangesSubscription = (0, import_rxjs.from)(allLinkChanges).pipe((0, import_operators.mergeAll)()).subscribe((link) => {
-      if (this._isActive !== this.isLinkActive(this.router)(link)) {
-        this.update();
-      }
-    });
-  }
-  set routerLinkActive(data) {
-    const classes = Array.isArray(data) ? data : data.split(" ");
-    this.classes = classes.filter((c) => !!c);
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    this.update();
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.routerEventsSubscription.unsubscribe();
-    this.linkInputChangesSubscription?.unsubscribe();
-  }
-  update() {
-    if (!this.links || !this.router.navigated) return;
-    queueMicrotask(() => {
-      const hasActiveLinks = this.hasActiveLinks();
-      this.classes.forEach((c) => {
-        if (hasActiveLinks) {
-          this.renderer.addClass(this.element.nativeElement, c);
-        } else {
-          this.renderer.removeClass(this.element.nativeElement, c);
-        }
-      });
-      if (hasActiveLinks && this.ariaCurrentWhenActive !== void 0) {
-        this.renderer.setAttribute(this.element.nativeElement, "aria-current", this.ariaCurrentWhenActive.toString());
-      } else {
-        this.renderer.removeAttribute(this.element.nativeElement, "aria-current");
-      }
-      if (this._isActive !== hasActiveLinks) {
-        this._isActive = hasActiveLinks;
-        this.cdr.markForCheck();
-        this.isActiveChange.emit(hasActiveLinks);
-      }
-    });
-  }
-  isLinkActive(router) {
-    const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions : (
-      // While the types should disallow `undefined` here, it's possible without strict inputs
-      this.routerLinkActiveOptions.exact || false
-    );
-    return (link) => {
-      const urlTree = link.urlTree;
-      return urlTree ? router.isActive(urlTree, options) : false;
-    };
-  }
-  hasActiveLinks() {
-    const isActiveCheckFn = this.isLinkActive(this.router);
-    return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
-  }
-  static ɵfac = function RouterLinkActive_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterLinkActive)(ɵɵdirectiveInject(Router), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ChangeDetectorRef), ɵɵdirectiveInject(RouterLink, 8));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _RouterLinkActive,
-    selectors: [["", "routerLinkActive", ""]],
-    contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {
-      if (rf & 1) {
-        ɵɵcontentQuery(dirIndex, RouterLink, 5);
-      }
-      if (rf & 2) {
-        let _t;
-        ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.links = _t);
-      }
-    },
-    inputs: {
-      routerLinkActiveOptions: "routerLinkActiveOptions",
-      ariaCurrentWhenActive: "ariaCurrentWhenActive",
-      routerLinkActive: "routerLinkActive"
-    },
-    outputs: {
-      isActiveChange: "isActiveChange"
-    },
-    exportAs: ["routerLinkActive"],
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterLinkActive, [{
-    type: Directive,
-    args: [{
-      selector: "[routerLinkActive]",
-      exportAs: "routerLinkActive"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: ElementRef
-  }, {
-    type: Renderer2
-  }, {
-    type: ChangeDetectorRef
-  }, {
-    type: RouterLink,
-    decorators: [{
-      type: Optional
-    }]
-  }], {
-    links: [{
-      type: ContentChildren,
-      args: [RouterLink, {
-        descendants: true
-      }]
-    }],
-    routerLinkActiveOptions: [{
-      type: Input
-    }],
-    ariaCurrentWhenActive: [{
-      type: Input
-    }],
-    isActiveChange: [{
-      type: Output
-    }],
-    routerLinkActive: [{
-      type: Input
-    }]
-  });
-})();
-function isActiveMatchOptions(options) {
-  return !!options.paths;
-}
-var PreloadingStrategy = class {
-};
-var PreloadAllModules = class _PreloadAllModules {
-  preload(route, fn) {
-    return fn().pipe((0, import_operators.catchError)(() => (0, import_rxjs.of)(null)));
-  }
-  static ɵfac = function PreloadAllModules_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreloadAllModules)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreloadAllModules,
-    factory: _PreloadAllModules.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreloadAllModules, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var NoPreloading = class _NoPreloading {
-  preload(route, fn) {
-    return (0, import_rxjs.of)(null);
-  }
-  static ɵfac = function NoPreloading_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NoPreloading)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NoPreloading,
-    factory: _NoPreloading.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NoPreloading, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var RouterPreloader = class _RouterPreloader {
-  router;
-  injector;
-  preloadingStrategy;
-  loader;
-  subscription;
-  constructor(router, compiler, injector, preloadingStrategy, loader) {
-    this.router = router;
-    this.injector = injector;
-    this.preloadingStrategy = preloadingStrategy;
-    this.loader = loader;
-  }
-  setUpPreloading() {
-    this.subscription = this.router.events.pipe((0, import_operators.filter)((e) => e instanceof NavigationEnd), (0, import_operators.concatMap)(() => this.preload())).subscribe(() => {
-    });
-  }
-  preload() {
-    return this.processRoutes(this.injector, this.router.config);
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (this.subscription) {
-      this.subscription.unsubscribe();
-    }
-  }
-  processRoutes(injector, routes) {
-    const res = [];
-    for (const route of routes) {
-      if (route.providers && !route._injector) {
-        route._injector = createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);
-      }
-      const injectorForCurrentRoute = route._injector ?? injector;
-      const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;
-      if (route.loadChildren && !route._loadedRoutes && route.canLoad === void 0 || route.loadComponent && !route._loadedComponent) {
-        res.push(this.preloadConfig(injectorForCurrentRoute, route));
-      }
-      if (route.children || route._loadedRoutes) {
-        res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));
-      }
-    }
-    return (0, import_rxjs.from)(res).pipe((0, import_operators.mergeAll)());
-  }
-  preloadConfig(injector, route) {
-    return this.preloadingStrategy.preload(route, () => {
-      let loadedChildren$;
-      if (route.loadChildren && route.canLoad === void 0) {
-        loadedChildren$ = this.loader.loadChildren(injector, route);
-      } else {
-        loadedChildren$ = (0, import_rxjs.of)(null);
-      }
-      const recursiveLoadChildren$ = loadedChildren$.pipe((0, import_operators.mergeMap)((config) => {
-        if (config === null) {
-          return (0, import_rxjs.of)(void 0);
-        }
-        route._loadedRoutes = config.routes;
-        route._loadedInjector = config.injector;
-        return this.processRoutes(config.injector ?? injector, config.routes);
-      }));
-      if (route.loadComponent && !route._loadedComponent) {
-        const loadComponent$ = this.loader.loadComponent(route);
-        return (0, import_rxjs.from)([recursiveLoadChildren$, loadComponent$]).pipe((0, import_operators.mergeAll)());
-      } else {
-        return recursiveLoadChildren$;
-      }
-    });
-  }
-  static ɵfac = function RouterPreloader_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterPreloader)(ɵɵinject(Router), ɵɵinject(Compiler), ɵɵinject(EnvironmentInjector), ɵɵinject(PreloadingStrategy), ɵɵinject(RouterConfigLoader));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterPreloader,
-    factory: _RouterPreloader.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterPreloader, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: Router
-  }, {
-    type: Compiler
-  }, {
-    type: EnvironmentInjector
-  }, {
-    type: PreloadingStrategy
-  }, {
-    type: RouterConfigLoader
-  }], null);
-})();
-var ROUTER_SCROLLER = new InjectionToken("");
-var RouterScroller = class _RouterScroller {
-  urlSerializer;
-  transitions;
-  viewportScroller;
-  zone;
-  options;
-  routerEventsSubscription;
-  scrollEventsSubscription;
-  lastId = 0;
-  lastSource = "imperative";
-  restoredId = 0;
-  store = {};
-  /** @nodoc */
-  constructor(urlSerializer, transitions, viewportScroller, zone, options = {}) {
-    this.urlSerializer = urlSerializer;
-    this.transitions = transitions;
-    this.viewportScroller = viewportScroller;
-    this.zone = zone;
-    this.options = options;
-    options.scrollPositionRestoration ||= "disabled";
-    options.anchorScrolling ||= "disabled";
-  }
-  init() {
-    if (this.options.scrollPositionRestoration !== "disabled") {
-      this.viewportScroller.setHistoryScrollRestoration("manual");
-    }
-    this.routerEventsSubscription = this.createScrollEvents();
-    this.scrollEventsSubscription = this.consumeScrollEvents();
-  }
-  createScrollEvents() {
-    return this.transitions.events.subscribe((e) => {
-      if (e instanceof NavigationStart) {
-        this.store[this.lastId] = this.viewportScroller.getScrollPosition();
-        this.lastSource = e.navigationTrigger;
-        this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;
-      } else if (e instanceof NavigationEnd) {
-        this.lastId = e.id;
-        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);
-      } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {
-        this.lastSource = void 0;
-        this.restoredId = 0;
-        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);
-      }
-    });
-  }
-  consumeScrollEvents() {
-    return this.transitions.events.subscribe((e) => {
-      if (!(e instanceof Scroll)) return;
-      if (e.position) {
-        if (this.options.scrollPositionRestoration === "top") {
-          this.viewportScroller.scrollToPosition([0, 0]);
-        } else if (this.options.scrollPositionRestoration === "enabled") {
-          this.viewportScroller.scrollToPosition(e.position);
-        }
-      } else {
-        if (e.anchor && this.options.anchorScrolling === "enabled") {
-          this.viewportScroller.scrollToAnchor(e.anchor);
-        } else if (this.options.scrollPositionRestoration !== "disabled") {
-          this.viewportScroller.scrollToPosition([0, 0]);
-        }
-      }
-    });
-  }
-  scheduleScrollEvent(routerEvent, anchor) {
-    this.zone.runOutsideAngular(() => {
-      setTimeout(() => {
-        this.zone.run(() => {
-          this.transitions.events.next(new Scroll(routerEvent, this.lastSource === "popstate" ? this.store[this.restoredId] : null, anchor));
-        });
-      }, 0);
-    });
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this.routerEventsSubscription?.unsubscribe();
-    this.scrollEventsSubscription?.unsubscribe();
-  }
-  static ɵfac = function RouterScroller_Factory(__ngFactoryType__) {
-    ɵɵinvalidFactory();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _RouterScroller,
-    factory: _RouterScroller.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterScroller, [{
-    type: Injectable
-  }], () => [{
-    type: UrlSerializer
-  }, {
-    type: NavigationTransitions
-  }, {
-    type: ViewportScroller
-  }, {
-    type: NgZone
-  }, {
-    type: void 0
-  }], null);
-})();
-function provideRouter(routes, ...features) {
-  return makeEnvironmentProviders([{
-    provide: ROUTES,
-    multi: true,
-    useValue: routes
-  }, typeof ngDevMode === "undefined" || ngDevMode ? {
-    provide: ROUTER_IS_PROVIDED,
-    useValue: true
-  } : [], {
-    provide: ActivatedRoute,
-    useFactory: rootRoute,
-    deps: [Router]
-  }, {
-    provide: APP_BOOTSTRAP_LISTENER,
-    multi: true,
-    useFactory: getBootstrapListener
-  }, features.map((feature) => feature.ɵproviders)]);
-}
-function rootRoute(router) {
-  return router.routerState.root;
-}
-function routerFeature(kind, providers) {
-  return {
-    ɵkind: kind,
-    ɵproviders: providers
-  };
-}
-var ROUTER_IS_PROVIDED = new InjectionToken("", {
-  providedIn: "root",
-  factory: () => false
-});
-var routerIsProvidedDevModeCheck = {
-  provide: ENVIRONMENT_INITIALIZER,
-  multi: true,
-  useFactory() {
-    return () => {
-      if (!inject(ROUTER_IS_PROVIDED)) {
-        console.warn("`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. This is likely a mistake.");
-      }
-    };
-  }
-};
-function provideRoutes(routes) {
-  return [{
-    provide: ROUTES,
-    multi: true,
-    useValue: routes
-  }, typeof ngDevMode === "undefined" || ngDevMode ? routerIsProvidedDevModeCheck : []];
-}
-function withInMemoryScrolling(options = {}) {
-  const providers = [{
-    provide: ROUTER_SCROLLER,
-    useFactory: () => {
-      const viewportScroller = inject(ViewportScroller);
-      const zone = inject(NgZone);
-      const transitions = inject(NavigationTransitions);
-      const urlSerializer = inject(UrlSerializer);
-      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);
-    }
-  }];
-  return routerFeature(4, providers);
-}
-function getBootstrapListener() {
-  const injector = inject(Injector);
-  return (bootstrappedComponentRef) => {
-    const ref = injector.get(ApplicationRef);
-    if (bootstrappedComponentRef !== ref.components[0]) {
-      return;
-    }
-    const router = injector.get(Router);
-    const bootstrapDone = injector.get(BOOTSTRAP_DONE);
-    if (injector.get(INITIAL_NAVIGATION) === 1) {
-      router.initialNavigation();
-    }
-    injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();
-    injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();
-    router.resetRootComponentType(ref.componentTypes[0]);
-    if (!bootstrapDone.closed) {
-      bootstrapDone.next();
-      bootstrapDone.complete();
-      bootstrapDone.unsubscribe();
-    }
-  };
-}
-var BOOTSTRAP_DONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "bootstrap done indicator" : "", {
-  factory: () => {
-    return new import_rxjs.Subject();
-  }
-});
-var INITIAL_NAVIGATION = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "initial navigation" : "", {
-  providedIn: "root",
-  factory: () => 1
-  /* InitialNavigation.EnabledNonBlocking */
-});
-function withEnabledBlockingInitialNavigation() {
-  const providers = [{
-    provide: INITIAL_NAVIGATION,
-    useValue: 0
-    /* InitialNavigation.EnabledBlocking */
-  }, {
-    provide: APP_INITIALIZER,
-    multi: true,
-    deps: [Injector],
-    useFactory: (injector) => {
-      const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());
-      return () => {
-        return locationInitialized.then(() => {
-          return new Promise((resolve) => {
-            const router = injector.get(Router);
-            const bootstrapDone = injector.get(BOOTSTRAP_DONE);
-            afterNextNavigation(router, () => {
-              resolve(true);
-            });
-            injector.get(NavigationTransitions).afterPreactivation = () => {
-              resolve(true);
-              return bootstrapDone.closed ? (0, import_rxjs.of)(void 0) : bootstrapDone;
-            };
-            router.initialNavigation();
-          });
-        });
-      };
-    }
-  }];
-  return routerFeature(2, providers);
-}
-function withDisabledInitialNavigation() {
-  const providers = [{
-    provide: APP_INITIALIZER,
-    multi: true,
-    useFactory: () => {
-      const router = inject(Router);
-      return () => {
-        router.setUpLocationChangeListener();
-      };
-    }
-  }, {
-    provide: INITIAL_NAVIGATION,
-    useValue: 2
-    /* InitialNavigation.Disabled */
-  }];
-  return routerFeature(3, providers);
-}
-function withDebugTracing() {
-  let providers = [];
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    providers = [{
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const router = inject(Router);
-        return () => router.events.subscribe((e) => {
-          console.group?.(`Router Event: ${e.constructor.name}`);
-          console.log(stringifyEvent(e));
-          console.log(e);
-          console.groupEnd?.();
-        });
-      }
-    }];
-  } else {
-    providers = [];
-  }
-  return routerFeature(1, providers);
-}
-var ROUTER_PRELOADER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router preloader" : "");
-function withPreloading(preloadingStrategy) {
-  const providers = [{
-    provide: ROUTER_PRELOADER,
-    useExisting: RouterPreloader
-  }, {
-    provide: PreloadingStrategy,
-    useExisting: preloadingStrategy
-  }];
-  return routerFeature(0, providers);
-}
-function withRouterConfig(options) {
-  const providers = [{
-    provide: ROUTER_CONFIGURATION,
-    useValue: options
-  }];
-  return routerFeature(5, providers);
-}
-function withHashLocation() {
-  const providers = [{
-    provide: LocationStrategy,
-    useClass: HashLocationStrategy
-  }];
-  return routerFeature(6, providers);
-}
-function withNavigationErrorHandler(handler) {
-  const providers = [{
-    provide: NAVIGATION_ERROR_HANDLER,
-    useValue: handler
-  }];
-  return routerFeature(7, providers);
-}
-function withComponentInputBinding() {
-  const providers = [RoutedComponentInputBinder, {
-    provide: INPUT_BINDER,
-    useExisting: RoutedComponentInputBinder
-  }];
-  return routerFeature(8, providers);
-}
-function withViewTransitions(options) {
-  const providers = [{
-    provide: CREATE_VIEW_TRANSITION,
-    useValue: createViewTransition
-  }, {
-    provide: VIEW_TRANSITION_OPTIONS,
-    useValue: __spreadValues({
-      skipNextTransition: !!options?.skipInitialTransition
-    }, options)
-  }];
-  return routerFeature(9, providers);
-}
-var ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent];
-var ROUTER_FORROOT_GUARD = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "router duplicate forRoot guard" : "ROUTER_FORROOT_GUARD");
-var ROUTER_PROVIDERS = [
-  Location,
-  {
-    provide: UrlSerializer,
-    useClass: DefaultUrlSerializer
-  },
-  Router,
-  ChildrenOutletContexts,
-  {
-    provide: ActivatedRoute,
-    useFactory: rootRoute,
-    deps: [Router]
-  },
-  RouterConfigLoader,
-  // Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can
-  // be removed when `provideRoutes` is removed.
-  typeof ngDevMode === "undefined" || ngDevMode ? {
-    provide: ROUTER_IS_PROVIDED,
-    useValue: true
-  } : []
-];
-var RouterModule = class _RouterModule {
-  constructor(guard) {
-  }
-  /**
-   * Creates and configures a module with all the router providers and directives.
-   * Optionally sets up an application listener to perform an initial navigation.
-   *
-   * When registering the NgModule at the root, import as follows:
-   *
-   * ```
-   * @NgModule({
-   *   imports: [RouterModule.forRoot(ROUTES)]
-   * })
-   * class MyNgModule {}
-   * ```
-   *
-   * @param routes An array of `Route` objects that define the navigation paths for the application.
-   * @param config An `ExtraOptions` configuration object that controls how navigation is performed.
-   * @return The new `NgModule`.
-   *
-   */
-  static forRoot(routes, config) {
-    return {
-      ngModule: _RouterModule,
-      providers: [ROUTER_PROVIDERS, typeof ngDevMode === "undefined" || ngDevMode ? config?.enableTracing ? withDebugTracing().ɵproviders : [] : [], {
-        provide: ROUTES,
-        multi: true,
-        useValue: routes
-      }, {
-        provide: ROUTER_FORROOT_GUARD,
-        useFactory: provideForRootGuard,
-        deps: [[Router, new Optional(), new SkipSelf()]]
-      }, config?.errorHandler ? {
-        provide: NAVIGATION_ERROR_HANDLER,
-        useValue: config.errorHandler
-      } : [], {
-        provide: ROUTER_CONFIGURATION,
-        useValue: config ? config : {}
-      }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [], config?.enableViewTransitions ? withViewTransitions().ɵproviders : [], provideRouterInitializer()]
-    };
-  }
-  /**
-   * Creates a module with all the router directives and a provider registering routes,
-   * without creating a new Router service.
-   * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:
-   *
-   * ```
-   * @NgModule({
-   *   imports: [RouterModule.forChild(ROUTES)]
-   * })
-   * class MyNgModule {}
-   * ```
-   *
-   * @param routes An array of `Route` objects that define the navigation paths for the submodule.
-   * @return The new NgModule.
-   *
-   */
-  static forChild(routes) {
-    return {
-      ngModule: _RouterModule,
-      providers: [{
-        provide: ROUTES,
-        multi: true,
-        useValue: routes
-      }]
-    };
-  }
-  static ɵfac = function RouterModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _RouterModule)(ɵɵinject(ROUTER_FORROOT_GUARD, 8));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _RouterModule,
-    imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent],
-    exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent]
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RouterModule, [{
-    type: NgModule,
-    args: [{
-      imports: ROUTER_DIRECTIVES,
-      exports: ROUTER_DIRECTIVES
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [ROUTER_FORROOT_GUARD]
-    }]
-  }], null);
-})();
-function provideRouterScroller() {
-  return {
-    provide: ROUTER_SCROLLER,
-    useFactory: () => {
-      const viewportScroller = inject(ViewportScroller);
-      const zone = inject(NgZone);
-      const config = inject(ROUTER_CONFIGURATION);
-      const transitions = inject(NavigationTransitions);
-      const urlSerializer = inject(UrlSerializer);
-      if (config.scrollOffset) {
-        viewportScroller.setOffset(config.scrollOffset);
-      }
-      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);
-    }
-  };
-}
-function provideHashLocationStrategy() {
-  return {
-    provide: LocationStrategy,
-    useClass: HashLocationStrategy
-  };
-}
-function providePathLocationStrategy() {
-  return {
-    provide: LocationStrategy,
-    useClass: PathLocationStrategy
-  };
-}
-function provideForRootGuard(router) {
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && router) {
-    throw new RuntimeError(4007, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector. Lazy loaded modules should use RouterModule.forChild() instead.`);
-  }
-  return "guarded";
-}
-function provideInitialNavigation(config) {
-  return [config.initialNavigation === "disabled" ? withDisabledInitialNavigation().ɵproviders : [], config.initialNavigation === "enabledBlocking" ? withEnabledBlockingInitialNavigation().ɵproviders : []];
-}
-var ROUTER_INITIALIZER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Router Initializer" : "");
-function provideRouterInitializer() {
-  return [
-    // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just
-    // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.
-    {
-      provide: ROUTER_INITIALIZER,
-      useFactory: getBootstrapListener
-    },
-    {
-      provide: APP_BOOTSTRAP_LISTENER,
-      multi: true,
-      useExisting: ROUTER_INITIALIZER
-    }
-  ];
-}
-function mapToCanMatch(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canMatch(...params));
-}
-function mapToCanActivate(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canActivate(...params));
-}
-function mapToCanActivateChild(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canActivateChild(...params));
-}
-function mapToCanDeactivate(providers) {
-  return providers.map((provider) => (...params) => inject(provider).canDeactivate(...params));
-}
-function mapToResolve(provider) {
-  return (...params) => inject(provider).resolve(...params);
-}
-var VERSION = new Version("19.0.5");
-function getLoadedRoutes(route) {
-  return route._loadedRoutes;
-}
-publishExternalGlobalUtil("ɵgetLoadedRoutes", getLoadedRoutes);
-
-export {
-  PRIMARY_OUTLET,
-  convertToParamMap,
-  defaultUrlMatcher,
-  UrlTree,
-  UrlSegmentGroup,
-  UrlSegment,
-  UrlSerializer,
-  DefaultUrlSerializer,
-  createUrlTreeFromSnapshot,
-  EventType,
-  RouterEvent,
-  NavigationStart,
-  NavigationEnd,
-  NavigationCancellationCode,
-  NavigationSkippedCode,
-  NavigationCancel,
-  NavigationSkipped,
-  NavigationError,
-  RoutesRecognized,
-  GuardsCheckStart,
-  GuardsCheckEnd,
-  ResolveStart,
-  ResolveEnd,
-  RouteConfigLoadStart,
-  RouteConfigLoadEnd,
-  ChildActivationStart,
-  ChildActivationEnd,
-  ActivationStart,
-  ActivationEnd,
-  Scroll,
-  OutletContext,
-  ChildrenOutletContexts,
-  RouterState,
-  ActivatedRoute,
-  ActivatedRouteSnapshot,
-  RouterStateSnapshot,
-  ROUTER_OUTLET_DATA,
-  RouterOutlet,
-  RedirectCommand,
-  TitleStrategy,
-  DefaultTitleStrategy,
-  ROUTER_CONFIGURATION,
-  ɵEmptyOutletComponent,
-  ROUTES,
-  loadChildren,
-  UrlHandlingStrategy,
-  RouteReuseStrategy,
-  BaseRouteReuseStrategy,
-  afterNextNavigation,
-  Router,
-  RouterLink,
-  RouterLinkActive,
-  PreloadingStrategy,
-  PreloadAllModules,
-  NoPreloading,
-  RouterPreloader,
-  provideRouter,
-  provideRoutes,
-  withInMemoryScrolling,
-  withEnabledBlockingInitialNavigation,
-  withDisabledInitialNavigation,
-  withDebugTracing,
-  withPreloading,
-  withRouterConfig,
-  withHashLocation,
-  withNavigationErrorHandler,
-  withComponentInputBinding,
-  withViewTransitions,
-  ROUTER_PROVIDERS,
-  RouterModule,
-  ROUTER_INITIALIZER,
-  mapToCanMatch,
-  mapToCanActivate,
-  mapToCanActivateChild,
-  mapToCanDeactivate,
-  mapToResolve,
-  VERSION
-};
-/*! Bundled license information:
-
-@angular/router/fesm2022/router.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-*/
-//# sourceMappingURL=chunk-NLOHPSEA.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-NLOHPSEA.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-NLOHPSEA.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/router/fesm2022/router.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { ɵisPromise, ɵRuntimeError, Injectable, createEnvironmentInjector, ɵisNgModule, isStandalone, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, ɵisInjectable, runInInjectionContext, Component, Compiler, NgModuleFactory, NgZone, afterNextRender, EnvironmentInjector, ɵConsole, ɵPendingTasksInternal, ɵɵsanitizeUrlOrResourceUrl, booleanAttribute, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, InjectFlags, APP_INITIALIZER, SkipSelf, NgModule, Inject, Version, ɵpublishExternalGlobalUtil } from '@angular/core';\nimport { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, concat, defer, pipe, throwError, EMPTY, ConnectableObservable, Subject, Subscription } from 'rxjs';\nimport * as i3 from '@angular/common';\nimport { DOCUMENT, Location, ViewportScroller, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { map, switchMap, take, startWith, filter, mergeMap, first, concatMap, tap, catchError, scan, defaultIfEmpty, last as last$1, takeLast, mapTo, finalize, refCount, takeUntil, mergeAll } from 'rxjs/operators';\nimport * as i1 from '@angular/platform-browser';\n\n/**\n * The primary routing outlet.\n *\n * @publicApi\n */\nconst PRIMARY_OUTLET = 'primary';\n/**\n * A private symbol used to store the value of `Route.title` inside the `Route.data` if it is a\n * static string or `Route.resolve` if anything else. This allows us to reuse the existing route\n * data/resolvers to support the title feature without new instrumentation in the `Router` pipeline.\n */\nconst RouteTitleKey = /* @__PURE__ */Symbol('RouteTitle');\nclass ParamsAsMap {\n  params;\n  constructor(params) {\n    this.params = params || {};\n  }\n  has(name) {\n    return Object.prototype.hasOwnProperty.call(this.params, name);\n  }\n  get(name) {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v[0] : v;\n    }\n    return null;\n  }\n  getAll(name) {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v : [v];\n    }\n    return [];\n  }\n  get keys() {\n    return Object.keys(this.params);\n  }\n}\n/**\n * Converts a `Params` instance to a `ParamMap`.\n * @param params The instance to convert.\n * @returns The new map instance.\n *\n * @publicApi\n */\nfunction convertToParamMap(params) {\n  return new ParamsAsMap(params);\n}\n/**\n * Matches the route configuration (`route`) against the actual URL (`segments`).\n *\n * When no matcher is defined on a `Route`, this is the matcher used by the Router by default.\n *\n * @param segments The remaining unmatched segments in the current navigation\n * @param segmentGroup The current segment group being matched\n * @param route The `Route` to match against.\n *\n * @see {@link UrlMatchResult}\n * @see {@link Route}\n *\n * @returns The resulting match information or `null` if the `route` should not match.\n * @publicApi\n */\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n  const parts = route.path.split('/');\n  if (parts.length > segments.length) {\n    // The actual URL is shorter than the config, no match\n    return null;\n  }\n  if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {\n    // The config is longer than the actual URL but we are looking for a full match, return null\n    return null;\n  }\n  const posParams = {};\n  // Check each config part against the actual URL\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index];\n    const segment = segments[index];\n    const isParameter = part[0] === ':';\n    if (isParameter) {\n      posParams[part.substring(1)] = segment;\n    } else if (part !== segment.path) {\n      // The actual URL part does not match the config, no match\n      return null;\n    }\n  }\n  return {\n    consumed: segments.slice(0, parts.length),\n    posParams\n  };\n}\nfunction shallowEqualArrays(a, b) {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; ++i) {\n    if (!shallowEqual(a[i], b[i])) return false;\n  }\n  return true;\n}\nfunction shallowEqual(a, b) {\n  // While `undefined` should never be possible, it would sometimes be the case in IE 11\n  // and pre-chromium Edge. The check below accounts for this edge case.\n  const k1 = a ? getDataKeys(a) : undefined;\n  const k2 = b ? getDataKeys(b) : undefined;\n  if (!k1 || !k2 || k1.length != k2.length) {\n    return false;\n  }\n  let key;\n  for (let i = 0; i < k1.length; i++) {\n    key = k1[i];\n    if (!equalArraysOrString(a[key], b[key])) {\n      return false;\n    }\n  }\n  return true;\n}\n/**\n * Gets the keys of an object, including `symbol` keys.\n */\nfunction getDataKeys(obj) {\n  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\n/**\n * Test equality for arrays of strings or a string.\n */\nfunction equalArraysOrString(a, b) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    const aSorted = [...a].sort();\n    const bSorted = [...b].sort();\n    return aSorted.every((val, index) => bSorted[index] === val);\n  } else {\n    return a === b;\n  }\n}\n/**\n * Return the last element of an array.\n */\nfunction last(a) {\n  return a.length > 0 ? a[a.length - 1] : null;\n}\nfunction wrapIntoObservable(value) {\n  if (isObservable(value)) {\n    return value;\n  }\n  if (ɵisPromise(value)) {\n    // Use `Promise.resolve()` to wrap promise-like instances.\n    // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n    // change detection.\n    return from(Promise.resolve(value));\n  }\n  return of(value);\n}\nconst pathCompareMap = {\n  'exact': equalSegmentGroups,\n  'subset': containsSegmentGroup\n};\nconst paramCompareMap = {\n  'exact': equalParams,\n  'subset': containsParams,\n  'ignored': () => true\n};\nfunction containsTree(container, containee, options) {\n  return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) && paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) && !(options.fragment === 'exact' && container.fragment !== containee.fragment);\n}\nfunction equalParams(container, containee) {\n  // TODO: This does not handle array params correctly.\n  return shallowEqual(container, containee);\n}\nfunction equalSegmentGroups(container, containee, matrixParams) {\n  if (!equalPath(container.segments, containee.segments)) return false;\n  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n    return false;\n  }\n  if (container.numberOfChildren !== containee.numberOfChildren) return false;\n  for (const c in containee.children) {\n    if (!container.children[c]) return false;\n    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams)) return false;\n  }\n  return true;\n}\nfunction containsParams(container, containee) {\n  return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\nfunction containsSegmentGroup(container, containee, matrixParams) {\n  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\nfunction containsSegmentGroupHelper(container, containee, containeePaths, matrixParams) {\n  if (container.segments.length > containeePaths.length) {\n    const current = container.segments.slice(0, containeePaths.length);\n    if (!equalPath(current, containeePaths)) return false;\n    if (containee.hasChildren()) return false;\n    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n    return true;\n  } else if (container.segments.length === containeePaths.length) {\n    if (!equalPath(container.segments, containeePaths)) return false;\n    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n    for (const c in containee.children) {\n      if (!container.children[c]) return false;\n      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n        return false;\n      }\n    }\n    return true;\n  } else {\n    const current = containeePaths.slice(0, container.segments.length);\n    const next = containeePaths.slice(container.segments.length);\n    if (!equalPath(container.segments, current)) return false;\n    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n    if (!container.children[PRIMARY_OUTLET]) return false;\n    return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next, matrixParams);\n  }\n}\nfunction matrixParamsMatch(containerPaths, containeePaths, options) {\n  return containeePaths.every((containeeSegment, i) => {\n    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n  });\n}\n/**\n * @description\n *\n * Represents the parsed URL.\n *\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree =\n *       router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n *     const f = tree.fragment; // return 'fragment'\n *     const q = tree.queryParams; // returns {debug: 'true'}\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n *     g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n *     g.children['support'].segments; // return 1 segment 'help'\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass UrlTree {\n  root;\n  queryParams;\n  fragment;\n  /** @internal */\n  _queryParamMap;\n  constructor(/** The root segment group of the URL tree */\n  root = new UrlSegmentGroup([], {}), /** The query params of the URL */\n  queryParams = {}, /** The fragment of the URL */\n  fragment = null) {\n    this.root = root;\n    this.queryParams = queryParams;\n    this.fragment = fragment;\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (root.segments.length > 0) {\n        throw new ɵRuntimeError(4015 /* RuntimeErrorCode.INVALID_ROOT_URL_SEGMENT */, 'The root `UrlSegmentGroup` should not contain `segments`. ' + 'Instead, these segments belong in the `children` so they can be associated with a named outlet.');\n      }\n    }\n  }\n  get queryParamMap() {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return DEFAULT_SERIALIZER.serialize(this);\n  }\n}\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n * @publicApi\n */\nclass UrlSegmentGroup {\n  segments;\n  children;\n  /** The parent node in the url tree */\n  parent = null;\n  constructor(/** The URL segments of this group. See `UrlSegment` for more information */\n  segments, /** The list of children of this group */\n  children) {\n    this.segments = segments;\n    this.children = children;\n    Object.values(children).forEach(v => v.parent = this);\n  }\n  /** Whether the segment has child segments */\n  hasChildren() {\n    return this.numberOfChildren > 0;\n  }\n  /** Number of child segments */\n  get numberOfChildren() {\n    return Object.keys(this.children).length;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return serializePaths(this);\n  }\n}\n/**\n * @description\n *\n * Represents a single URL segment.\n *\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree = router.parseUrl('/team;id=33');\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments;\n *     s[0].path; // returns 'team'\n *     s[0].parameters; // returns {id: 33}\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass UrlSegment {\n  path;\n  parameters;\n  /** @internal */\n  _parameterMap;\n  constructor(/** The path part of a URL segment */\n  path, /** The matrix parameters associated with a segment */\n  parameters) {\n    this.path = path;\n    this.parameters = parameters;\n  }\n  get parameterMap() {\n    this._parameterMap ??= convertToParamMap(this.parameters);\n    return this._parameterMap;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return serializePath(this);\n  }\n}\nfunction equalSegments(as, bs) {\n  return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\nfunction equalPath(as, bs) {\n  if (as.length !== bs.length) return false;\n  return as.every((a, i) => a.path === bs[i].path);\n}\nfunction mapChildrenIntoArray(segment, fn) {\n  let res = [];\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet === PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet !== PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  return res;\n}\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n * @publicApi\n */\nclass UrlSerializer {\n  static ɵfac = function UrlSerializer_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UrlSerializer)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: UrlSerializer,\n    factory: () => (() => new DefaultUrlSerializer())(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UrlSerializer, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => new DefaultUrlSerializer()\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\n *\n * Example URLs:\n *\n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n *\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n *\n * @publicApi\n */\nclass DefaultUrlSerializer {\n  /** Parses a url into a `UrlTree` */\n  parse(url) {\n    const p = new UrlParser(url);\n    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n  }\n  /** Converts a `UrlTree` into a url */\n  serialize(tree) {\n    const segment = `/${serializeSegment(tree.root, true)}`;\n    const query = serializeQueryParams(tree.queryParams);\n    const fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n    return `${segment}${query}${fragment}`;\n  }\n}\nconst DEFAULT_SERIALIZER = new DefaultUrlSerializer();\nfunction serializePaths(segment) {\n  return segment.segments.map(p => serializePath(p)).join('/');\n}\nfunction serializeSegment(segment, root) {\n  if (!segment.hasChildren()) {\n    return serializePaths(segment);\n  }\n  if (root) {\n    const primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : '';\n    const children = [];\n    Object.entries(segment.children).forEach(([k, v]) => {\n      if (k !== PRIMARY_OUTLET) {\n        children.push(`${k}:${serializeSegment(v, false)}`);\n      }\n    });\n    return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n  } else {\n    const children = mapChildrenIntoArray(segment, (v, k) => {\n      if (k === PRIMARY_OUTLET) {\n        return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n      }\n      return [`${k}:${serializeSegment(v, false)}`];\n    });\n    // use no parenthesis if the only child is a primary outlet route\n    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n      return `${serializePaths(segment)}/${children[0]}`;\n    }\n    return `${serializePaths(segment)}/(${children.join('//')})`;\n  }\n}\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s) {\n  return encodeURIComponent(s).replace(/%40/g, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',');\n}\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriQuery(s) {\n  return encodeUriString(s).replace(/%3B/gi, ';');\n}\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriFragment(s) {\n  return encodeURI(s);\n}\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nfunction encodeUriSegment(s) {\n  return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\nfunction decode(s) {\n  return decodeURIComponent(s);\n}\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nfunction decodeQuery(s) {\n  return decode(s.replace(/\\+/g, '%20'));\n}\nfunction serializePath(path) {\n  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\nfunction serializeMatrixParams(params) {\n  return Object.entries(params).map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`).join('');\n}\nfunction serializeQueryParams(params) {\n  const strParams = Object.entries(params).map(([name, value]) => {\n    return Array.isArray(value) ? value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n  }).filter(s => s);\n  return strParams.length ? `?${strParams.join('&')}` : '';\n}\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str) {\n  const match = str.match(SEGMENT_RE);\n  return match ? match[0] : '';\n}\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str) {\n  const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n  return match ? match[0] : '';\n}\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str) {\n  const match = str.match(QUERY_PARAM_RE);\n  return match ? match[0] : '';\n}\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str) {\n  const match = str.match(QUERY_PARAM_VALUE_RE);\n  return match ? match[0] : '';\n}\nclass UrlParser {\n  url;\n  remaining;\n  constructor(url) {\n    this.url = url;\n    this.remaining = url;\n  }\n  parseRootSegment() {\n    this.consumeOptional('/');\n    if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n      return new UrlSegmentGroup([], {});\n    }\n    // The root segment group never has segments\n    return new UrlSegmentGroup([], this.parseChildren());\n  }\n  parseQueryParams() {\n    const params = {};\n    if (this.consumeOptional('?')) {\n      do {\n        this.parseQueryParam(params);\n      } while (this.consumeOptional('&'));\n    }\n    return params;\n  }\n  parseFragment() {\n    return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n  }\n  parseChildren() {\n    if (this.remaining === '') {\n      return {};\n    }\n    this.consumeOptional('/');\n    const segments = [];\n    if (!this.peekStartsWith('(')) {\n      segments.push(this.parseSegment());\n    }\n    while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n      this.capture('/');\n      segments.push(this.parseSegment());\n    }\n    let children = {};\n    if (this.peekStartsWith('/(')) {\n      this.capture('/');\n      children = this.parseParens(true);\n    }\n    let res = {};\n    if (this.peekStartsWith('(')) {\n      res = this.parseParens(false);\n    }\n    if (segments.length > 0 || Object.keys(children).length > 0) {\n      res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n    }\n    return res;\n  }\n  // parse a segment with its matrix parameters\n  // ie `name;k1=v1;k2`\n  parseSegment() {\n    const path = matchSegments(this.remaining);\n    if (path === '' && this.peekStartsWith(';')) {\n      throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Empty path url segment cannot have parameters: '${this.remaining}'.`);\n    }\n    this.capture(path);\n    return new UrlSegment(decode(path), this.parseMatrixParams());\n  }\n  parseMatrixParams() {\n    const params = {};\n    while (this.consumeOptional(';')) {\n      this.parseParam(params);\n    }\n    return params;\n  }\n  parseParam(params) {\n    const key = matchMatrixKeySegments(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchSegments(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n    params[decode(key)] = decode(value);\n  }\n  // Parse a single query parameter `name[=value]`\n  parseQueryParam(params) {\n    const key = matchQueryParams(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchUrlQueryParamValue(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n    const decodedKey = decodeQuery(key);\n    const decodedVal = decodeQuery(value);\n    if (params.hasOwnProperty(decodedKey)) {\n      // Append to existing values\n      let currentVal = params[decodedKey];\n      if (!Array.isArray(currentVal)) {\n        currentVal = [currentVal];\n        params[decodedKey] = currentVal;\n      }\n      currentVal.push(decodedVal);\n    } else {\n      // Create a new value\n      params[decodedKey] = decodedVal;\n    }\n  }\n  // parse `(a/b//outlet_name:c/d)`\n  parseParens(allowPrimary) {\n    const segments = {};\n    this.capture('(');\n    while (!this.consumeOptional(')') && this.remaining.length > 0) {\n      const path = matchSegments(this.remaining);\n      const next = this.remaining[path.length];\n      // if is is not one of these characters, then the segment was unescaped\n      // or the group was not closed\n      if (next !== '/' && next !== ')' && next !== ';') {\n        throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`);\n      }\n      let outletName = undefined;\n      if (path.indexOf(':') > -1) {\n        outletName = path.slice(0, path.indexOf(':'));\n        this.capture(outletName);\n        this.capture(':');\n      } else if (allowPrimary) {\n        outletName = PRIMARY_OUTLET;\n      }\n      const children = this.parseChildren();\n      segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);\n      this.consumeOptional('//');\n    }\n    return segments;\n  }\n  peekStartsWith(str) {\n    return this.remaining.startsWith(str);\n  }\n  // Consumes the prefix when it is present and returns whether it has been consumed\n  consumeOptional(str) {\n    if (this.peekStartsWith(str)) {\n      this.remaining = this.remaining.substring(str.length);\n      return true;\n    }\n    return false;\n  }\n  capture(str) {\n    if (!this.consumeOptional(str)) {\n      throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`);\n    }\n  }\n}\nfunction createRoot(rootCandidate) {\n  return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {\n    [PRIMARY_OUTLET]: rootCandidate\n  }) : rootCandidate;\n}\n/**\n * Recursively\n * - merges primary segment children into their parents\n * - drops empty children (those which have no segments and no children themselves). This latter\n * prevents serializing a group into something like `/a(aux:)`, where `aux` is an empty child\n * segment.\n * - merges named outlets without a primary segment sibling into the children. This prevents\n * serializing a URL like `//(a:a)(b:b) instead of `/(a:a//b:b)` when the aux b route lives on the\n * root but the `a` route lives under an empty path primary route.\n */\nfunction squashSegmentGroup(segmentGroup) {\n  const newChildren = {};\n  for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {\n    const childCandidate = squashSegmentGroup(child);\n    // moves named children in an empty path primary child into this group\n    if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 && childCandidate.hasChildren()) {\n      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n        newChildren[grandChildOutlet] = grandChild;\n      }\n    } // don't add empty children\n    else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n      newChildren[childOutlet] = childCandidate;\n    }\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n  return mergeTrivialChildren(s);\n}\n/**\n * When possible, merges the primary outlet child into the parent `UrlSegmentGroup`.\n *\n * When a segment group has only one child which is a primary outlet, merges that child into the\n * parent. That is, the child segment group's segments are merged into the `s` and the child's\n * children become the children of `s`. Think of this like a 'squash', merging the child segment\n * group into the parent.\n */\nfunction mergeTrivialChildren(s) {\n  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n    const c = s.children[PRIMARY_OUTLET];\n    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n  }\n  return s;\n}\nfunction isUrlTree(v) {\n  return v instanceof UrlTree;\n}\n\n/**\n * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.\n *\n * @publicApi\n *\n *\n * @param relativeTo The `ActivatedRouteSnapshot` to apply the commands to\n * @param commands An array of URL fragments with which to construct the new URL tree.\n * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n * segments, followed by the parameters for each segment.\n * The fragments are applied to the one provided in the `relativeTo` parameter.\n * @param queryParams The query parameters for the `UrlTree`. `null` if the `UrlTree` does not have\n *     any query parameters.\n * @param fragment The fragment for the `UrlTree`. `null` if the `UrlTree` does not have a fragment.\n *\n * @usageNotes\n *\n * ```ts\n * // create /team/33/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * createUrlTreeFromSnapshot(snapshot, ['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it,\n * // you can do the following:\n * createUrlTreeFromSnapshot(snapshot, [{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right:\n * 'chat'}}], null, null);\n *\n * // remove the right secondary node\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // For the examples below, assume the current URL is for the `/team/33/user/11` and the\n * `ActivatedRouteSnapshot` points to `user/11`:\n *\n * // navigate to /team/33/user/11/details\n * createUrlTreeFromSnapshot(snapshot, ['details']);\n *\n * // navigate to /team/33/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../22']);\n *\n * // navigate to /team/44/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../../team/44/user/22']);\n * ```\n */\nfunction createUrlTreeFromSnapshot(relativeTo, commands, queryParams = null, fragment = null) {\n  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);\n}\nfunction createSegmentGroupFromRoute(route) {\n  let targetGroup;\n  function createSegmentGroupFromRouteRecursive(currentRoute) {\n    const childOutlets = {};\n    for (const childSnapshot of currentRoute.children) {\n      const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n      childOutlets[childSnapshot.outlet] = root;\n    }\n    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n    if (currentRoute === route) {\n      targetGroup = segmentGroup;\n    }\n    return segmentGroup;\n  }\n  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n  const rootSegmentGroup = createRoot(rootCandidate);\n  return targetGroup ?? rootSegmentGroup;\n}\nfunction createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragment) {\n  let root = relativeTo;\n  while (root.parent) {\n    root = root.parent;\n  }\n  // There are no commands so the `UrlTree` goes to the same path as the one created from the\n  // `UrlSegmentGroup`. All we need to do is update the `queryParams` and `fragment` without\n  // applying any other logic.\n  if (commands.length === 0) {\n    return tree(root, root, root, queryParams, fragment);\n  }\n  const nav = computeNavigation(commands);\n  if (nav.toRoot()) {\n    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);\n  }\n  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n  const newSegmentGroup = position.processChildren ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);\n}\nfunction isMatrixParams(command) {\n  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n/**\n * Determines if a given command has an `outlets` map. When we encounter a command\n * with an outlets k/v map, we need to apply each outlet individually to the existing segment.\n */\nfunction isCommandWithOutlets(command) {\n  return typeof command === 'object' && command != null && command.outlets;\n}\nfunction tree(oldRoot, oldSegmentGroup, newSegmentGroup, queryParams, fragment) {\n  let qp = {};\n  if (queryParams) {\n    Object.entries(queryParams).forEach(([name, value]) => {\n      qp[name] = Array.isArray(value) ? value.map(v => `${v}`) : `${value}`;\n    });\n  }\n  let rootCandidate;\n  if (oldRoot === oldSegmentGroup) {\n    rootCandidate = newSegmentGroup;\n  } else {\n    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n  }\n  const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n  return new UrlTree(newRoot, qp, fragment);\n}\n/**\n * Replaces the `oldSegment` which is located in some child of the `current` with the `newSegment`.\n * This also has the effect of creating new `UrlSegmentGroup` copies to update references. This\n * shouldn't be necessary but the fallback logic for an invalid ActivatedRoute in the creation uses\n * the Router's current url tree. If we don't create new segment groups, we end up modifying that\n * value.\n */\nfunction replaceSegment(current, oldSegment, newSegment) {\n  const children = {};\n  Object.entries(current.children).forEach(([outletName, c]) => {\n    if (c === oldSegment) {\n      children[outletName] = newSegment;\n    } else {\n      children[outletName] = replaceSegment(c, oldSegment, newSegment);\n    }\n  });\n  return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n  isAbsolute;\n  numberOfDoubleDots;\n  commands;\n  constructor(isAbsolute, numberOfDoubleDots, commands) {\n    this.isAbsolute = isAbsolute;\n    this.numberOfDoubleDots = numberOfDoubleDots;\n    this.commands = commands;\n    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n      throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Root segment cannot have matrix parameters');\n    }\n    const cmdWithOutlet = commands.find(isCommandWithOutlets);\n    if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n      throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, (typeof ngDevMode === 'undefined' || ngDevMode) && '{outlets:{}} has to be the last command');\n    }\n  }\n  toRoot() {\n    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n  }\n}\n/** Transforms commands to a normalized `Navigation` */\nfunction computeNavigation(commands) {\n  if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {\n    return new Navigation(true, 0, commands);\n  }\n  let numberOfDoubleDots = 0;\n  let isAbsolute = false;\n  const res = commands.reduce((res, cmd, cmdIdx) => {\n    if (typeof cmd === 'object' && cmd != null) {\n      if (cmd.outlets) {\n        const outlets = {};\n        Object.entries(cmd.outlets).forEach(([name, commands]) => {\n          outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n        });\n        return [...res, {\n          outlets\n        }];\n      }\n      if (cmd.segmentPath) {\n        return [...res, cmd.segmentPath];\n      }\n    }\n    if (!(typeof cmd === 'string')) {\n      return [...res, cmd];\n    }\n    if (cmdIdx === 0) {\n      cmd.split('/').forEach((urlPart, partIndex) => {\n        if (partIndex == 0 && urlPart === '.') {\n          // skip './a'\n        } else if (partIndex == 0 && urlPart === '') {\n          //  '/a'\n          isAbsolute = true;\n        } else if (urlPart === '..') {\n          //  '../a'\n          numberOfDoubleDots++;\n        } else if (urlPart != '') {\n          res.push(urlPart);\n        }\n      });\n      return res;\n    }\n    return [...res, cmd];\n  }, []);\n  return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nclass Position {\n  segmentGroup;\n  processChildren;\n  index;\n  constructor(segmentGroup, processChildren, index) {\n    this.segmentGroup = segmentGroup;\n    this.processChildren = processChildren;\n    this.index = index;\n  }\n}\nfunction findStartingPositionForTargetGroup(nav, root, target) {\n  if (nav.isAbsolute) {\n    return new Position(root, true, 0);\n  }\n  if (!target) {\n    // `NaN` is used only to maintain backwards compatibility with incorrectly mocked\n    // `ActivatedRouteSnapshot` in tests. In prior versions of this code, the position here was\n    // determined based on an internal property that was rarely mocked, resulting in `NaN`. In\n    // reality, this code path should _never_ be touched since `target` is not allowed to be falsey.\n    return new Position(root, false, NaN);\n  }\n  if (target.parent === null) {\n    return new Position(target, true, 0);\n  }\n  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n  const index = target.segments.length - 1 + modifier;\n  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n  let g = group;\n  let ci = index;\n  let dd = numberOfDoubleDots;\n  while (dd > ci) {\n    dd -= ci;\n    g = g.parent;\n    if (!g) {\n      throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, (typeof ngDevMode === 'undefined' || ngDevMode) && \"Invalid number of '../'\");\n    }\n    ci = g.segments.length;\n  }\n  return new Position(g, false, ci - dd);\n}\nfunction getOutlets(commands) {\n  if (isCommandWithOutlets(commands[0])) {\n    return commands[0].outlets;\n  }\n  return {\n    [PRIMARY_OUTLET]: commands\n  };\n}\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n  segmentGroup ??= new UrlSegmentGroup([], {});\n  if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n    return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n  }\n  const m = prefixedWith(segmentGroup, startIndex, commands);\n  const slicedCommands = commands.slice(m.commandIndex);\n  if (m.match && m.pathIndex < segmentGroup.segments.length) {\n    const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n    g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n    return updateSegmentGroupChildren(g, 0, slicedCommands);\n  } else if (m.match && slicedCommands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else if (m.match && !segmentGroup.hasChildren()) {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  } else if (m.match) {\n    return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n  } else {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  }\n}\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n  if (commands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else {\n    const outlets = getOutlets(commands);\n    const children = {};\n    // If the set of commands applies to anything other than the primary outlet and the child\n    // segment is an empty path primary segment on its own, we want to apply the commands to the\n    // empty child path rather than here. The outcome is that the empty primary child is effectively\n    // removed from the final output UrlTree. Imagine the following config:\n    //\n    // {path: '', children: [{path: '**', outlet: 'popup'}]}.\n    //\n    // Navigation to /(popup:a) will activate the child outlet correctly Given a follow-up\n    // navigation with commands\n    // ['/', {outlets: {'popup': 'b'}}], we _would not_ want to apply the outlet commands to the\n    // root segment because that would result in\n    // //(popup:a)(popup:b) since the outlet command got applied one level above where it appears in\n    // the `ActivatedRoute` rather than updating the existing one.\n    //\n    // Because empty paths do not appear in the URL segments and the fact that the segments used in\n    // the output `UrlTree` are squashed to eliminate these empty paths where possible\n    // https://github.com/angular/angular/blob/13f10de40e25c6900ca55bd83b36bd533dacfa9e/packages/router/src/url_tree.ts#L755\n    // it can be hard to determine what is the right thing to do when applying commands to a\n    // `UrlSegmentGroup` that is created from an \"unsquashed\"/expanded `ActivatedRoute` tree.\n    // This code effectively \"squashes\" empty path primary routes when they have no siblings on\n    // the same level of the tree.\n    if (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) && segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 && segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n      const childrenOfEmptyChild = updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\n      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n    }\n    Object.entries(outlets).forEach(([outlet, commands]) => {\n      if (typeof commands === 'string') {\n        commands = [commands];\n      }\n      if (commands !== null) {\n        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n      }\n    });\n    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n      if (outlets[childOutlet] === undefined) {\n        children[childOutlet] = child;\n      }\n    });\n    return new UrlSegmentGroup(segmentGroup.segments, children);\n  }\n}\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n  let currentCommandIndex = 0;\n  let currentPathIndex = startIndex;\n  const noMatch = {\n    match: false,\n    pathIndex: 0,\n    commandIndex: 0\n  };\n  while (currentPathIndex < segmentGroup.segments.length) {\n    if (currentCommandIndex >= commands.length) return noMatch;\n    const path = segmentGroup.segments[currentPathIndex];\n    const command = commands[currentCommandIndex];\n    // Do not try to consume command as part of the prefixing if it has outlets because it can\n    // contain outlets other than the one being processed. Consuming the outlets command would\n    // result in other outlets being ignored.\n    if (isCommandWithOutlets(command)) {\n      break;\n    }\n    const curr = `${command}`;\n    const next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n    if (currentPathIndex > 0 && curr === undefined) break;\n    if (curr && next && typeof next === 'object' && next.outlets === undefined) {\n      if (!compare(curr, next, path)) return noMatch;\n      currentCommandIndex += 2;\n    } else {\n      if (!compare(curr, {}, path)) return noMatch;\n      currentCommandIndex++;\n    }\n    currentPathIndex++;\n  }\n  return {\n    match: true,\n    pathIndex: currentPathIndex,\n    commandIndex: currentCommandIndex\n  };\n}\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n  const paths = segmentGroup.segments.slice(0, startIndex);\n  let i = 0;\n  while (i < commands.length) {\n    const command = commands[i];\n    if (isCommandWithOutlets(command)) {\n      const children = createNewSegmentChildren(command.outlets);\n      return new UrlSegmentGroup(paths, children);\n    }\n    // if we start with an object literal, we need to reuse the path part from the segment\n    if (i === 0 && isMatrixParams(commands[0])) {\n      const p = segmentGroup.segments[startIndex];\n      paths.push(new UrlSegment(p.path, stringify(commands[0])));\n      i++;\n      continue;\n    }\n    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n    const next = i < commands.length - 1 ? commands[i + 1] : null;\n    if (curr && next && isMatrixParams(next)) {\n      paths.push(new UrlSegment(curr, stringify(next)));\n      i += 2;\n    } else {\n      paths.push(new UrlSegment(curr, {}));\n      i++;\n    }\n  }\n  return new UrlSegmentGroup(paths, {});\n}\nfunction createNewSegmentChildren(outlets) {\n  const children = {};\n  Object.entries(outlets).forEach(([outlet, commands]) => {\n    if (typeof commands === 'string') {\n      commands = [commands];\n    }\n    if (commands !== null) {\n      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n    }\n  });\n  return children;\n}\nfunction stringify(params) {\n  const res = {};\n  Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);\n  return res;\n}\nfunction compare(path, params, segment) {\n  return path == segment.path && shallowEqual(params, segment.parameters);\n}\nconst IMPERATIVE_NAVIGATION = 'imperative';\n/**\n * Identifies the type of a router event.\n *\n * @publicApi\n */\nvar EventType;\n(function (EventType) {\n  EventType[EventType[\"NavigationStart\"] = 0] = \"NavigationStart\";\n  EventType[EventType[\"NavigationEnd\"] = 1] = \"NavigationEnd\";\n  EventType[EventType[\"NavigationCancel\"] = 2] = \"NavigationCancel\";\n  EventType[EventType[\"NavigationError\"] = 3] = \"NavigationError\";\n  EventType[EventType[\"RoutesRecognized\"] = 4] = \"RoutesRecognized\";\n  EventType[EventType[\"ResolveStart\"] = 5] = \"ResolveStart\";\n  EventType[EventType[\"ResolveEnd\"] = 6] = \"ResolveEnd\";\n  EventType[EventType[\"GuardsCheckStart\"] = 7] = \"GuardsCheckStart\";\n  EventType[EventType[\"GuardsCheckEnd\"] = 8] = \"GuardsCheckEnd\";\n  EventType[EventType[\"RouteConfigLoadStart\"] = 9] = \"RouteConfigLoadStart\";\n  EventType[EventType[\"RouteConfigLoadEnd\"] = 10] = \"RouteConfigLoadEnd\";\n  EventType[EventType[\"ChildActivationStart\"] = 11] = \"ChildActivationStart\";\n  EventType[EventType[\"ChildActivationEnd\"] = 12] = \"ChildActivationEnd\";\n  EventType[EventType[\"ActivationStart\"] = 13] = \"ActivationStart\";\n  EventType[EventType[\"ActivationEnd\"] = 14] = \"ActivationEnd\";\n  EventType[EventType[\"Scroll\"] = 15] = \"Scroll\";\n  EventType[EventType[\"NavigationSkipped\"] = 16] = \"NavigationSkipped\";\n})(EventType || (EventType = {}));\n/**\n * Base for events the router goes through, as opposed to events tied to a specific\n * route. Fired one time for any given navigation.\n *\n * The following code shows how a class subscribes to router events.\n *\n * ```ts\n * import {Event, RouterEvent, Router} from '@angular/router';\n *\n * class MyService {\n *   constructor(public router: Router) {\n *     router.events.pipe(\n *        filter((e: Event | RouterEvent): e is RouterEvent => e instanceof RouterEvent)\n *     ).subscribe((e: RouterEvent) => {\n *       // Do something\n *     });\n *   }\n * }\n * ```\n *\n * @see {@link Event}\n * @see [Router events summary](guide/routing/router-reference#router-events)\n * @publicApi\n */\nclass RouterEvent {\n  id;\n  url;\n  constructor(/** A unique ID that the router assigns to every router navigation. */\n  id, /** The URL that is the destination for this navigation. */\n  url) {\n    this.id = id;\n    this.url = url;\n  }\n}\n/**\n * An event triggered when a navigation starts.\n *\n * @publicApi\n */\nclass NavigationStart extends RouterEvent {\n  type = EventType.NavigationStart;\n  /**\n   * Identifies the call or event that triggered the navigation.\n   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.\n   *\n   * @see {@link NavigationEnd}\n   * @see {@link NavigationCancel}\n   * @see {@link NavigationError}\n   */\n  navigationTrigger;\n  /**\n   * The navigation state that was previously supplied to the `pushState` call,\n   * when the navigation is triggered by a `popstate` event. Otherwise null.\n   *\n   * The state object is defined by `NavigationExtras`, and contains any\n   * developer-defined state value, as well as a unique ID that\n   * the router assigns to every router transition/navigation.\n   *\n   * From the perspective of the router, the router never \"goes back\".\n   * When the user clicks on the back button in the browser,\n   * a new navigation ID is created.\n   *\n   * Use the ID in this previous-state object to differentiate between a newly created\n   * state and one returned to by a `popstate` event, so that you can restore some\n   * remembered state, such as scroll position.\n   *\n   */\n  restoredState;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  navigationTrigger = 'imperative', /** @docsNotRequired */\n  restoredState = null) {\n    super(id, url);\n    this.navigationTrigger = navigationTrigger;\n    this.restoredState = restoredState;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n/**\n * An event triggered when a navigation ends successfully.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationCancel}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nclass NavigationEnd extends RouterEvent {\n  urlAfterRedirects;\n  type = EventType.NavigationEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n  }\n}\n/**\n * A code for the `NavigationCancel` event of the `Router` to indicate the\n * reason a navigation failed.\n *\n * @publicApi\n */\nvar NavigationCancellationCode;\n(function (NavigationCancellationCode) {\n  /**\n   * A navigation failed because a guard returned a `UrlTree` to redirect.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"Redirect\"] = 0] = \"Redirect\";\n  /**\n   * A navigation failed because a more recent navigation started.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"SupersededByNewNavigation\"] = 1] = \"SupersededByNewNavigation\";\n  /**\n   * A navigation failed because one of the resolvers completed without emitting a value.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"NoDataFromResolver\"] = 2] = \"NoDataFromResolver\";\n  /**\n   * A navigation failed because a guard returned `false`.\n   */\n  NavigationCancellationCode[NavigationCancellationCode[\"GuardRejected\"] = 3] = \"GuardRejected\";\n})(NavigationCancellationCode || (NavigationCancellationCode = {}));\n/**\n * A code for the `NavigationSkipped` event of the `Router` to indicate the\n * reason a navigation was skipped.\n *\n * @publicApi\n */\nvar NavigationSkippedCode;\n(function (NavigationSkippedCode) {\n  /**\n   * A navigation was skipped because the navigation URL was the same as the current Router URL.\n   */\n  NavigationSkippedCode[NavigationSkippedCode[\"IgnoredSameUrlNavigation\"] = 0] = \"IgnoredSameUrlNavigation\";\n  /**\n   * A navigation was skipped because the configured `UrlHandlingStrategy` return `false` for both\n   * the current Router URL and the target of the navigation.\n   *\n   * @see {@link UrlHandlingStrategy}\n   */\n  NavigationSkippedCode[NavigationSkippedCode[\"IgnoredByUrlHandlingStrategy\"] = 1] = \"IgnoredByUrlHandlingStrategy\";\n})(NavigationSkippedCode || (NavigationSkippedCode = {}));\n/**\n * An event triggered when a navigation is canceled, directly or indirectly.\n * This can happen for several reasons including when a route guard\n * returns `false` or initiates a redirect by returning a `UrlTree`.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nclass NavigationCancel extends RouterEvent {\n  reason;\n  code;\n  type = EventType.NavigationCancel;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url,\n  /**\n   * A description of why the navigation was cancelled. For debug purposes only. Use `code`\n   * instead for a stable cancellation reason that can be used in production.\n   */\n  reason,\n  /**\n   * A code to indicate why the navigation was canceled. This cancellation code is stable for\n   * the reason and can be relied on whereas the `reason` string could change and should not be\n   * used in production.\n   */\n  code) {\n    super(id, url);\n    this.reason = reason;\n    this.code = code;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n/**\n * An event triggered when a navigation is skipped.\n * This can happen for a couple reasons including onSameUrlHandling\n * is set to `ignore` and the navigation URL is not different than the\n * current state.\n *\n * @publicApi\n */\nclass NavigationSkipped extends RouterEvent {\n  reason;\n  code;\n  type = EventType.NavigationSkipped;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url,\n  /**\n   * A description of why the navigation was skipped. For debug purposes only. Use `code`\n   * instead for a stable skipped reason that can be used in production.\n   */\n  reason,\n  /**\n   * A code to indicate why the navigation was skipped. This code is stable for\n   * the reason and can be relied on whereas the `reason` string could change and should not be\n   * used in production.\n   */\n  code) {\n    super(id, url);\n    this.reason = reason;\n    this.code = code;\n  }\n}\n/**\n * An event triggered when a navigation fails due to an unexpected error.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationCancel}\n *\n * @publicApi\n */\nclass NavigationError extends RouterEvent {\n  error;\n  target;\n  type = EventType.NavigationError;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  error,\n  /**\n   * The target of the navigation when the error occurred.\n   *\n   * Note that this can be `undefined` because an error could have occurred before the\n   * `RouterStateSnapshot` was created for the navigation.\n   */\n  target) {\n    super(id, url);\n    this.error = error;\n    this.target = target;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n  }\n}\n/**\n * An event triggered when routes are recognized.\n *\n * @publicApi\n */\nclass RoutesRecognized extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.RoutesRecognized;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  /** @docsNotRequired */\n  toString() {\n    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the start of the Guard phase of routing.\n *\n * @see {@link GuardsCheckEnd}\n *\n * @publicApi\n */\nclass GuardsCheckStart extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.GuardsCheckStart;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the end of the Guard phase of routing.\n *\n * @see {@link GuardsCheckStart}\n *\n * @publicApi\n */\nclass GuardsCheckEnd extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  shouldActivate;\n  type = EventType.GuardsCheckEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state, /** @docsNotRequired */\n  shouldActivate) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n    this.shouldActivate = shouldActivate;\n  }\n  toString() {\n    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n  }\n}\n/**\n * An event triggered at the start of the Resolve phase of routing.\n *\n * Runs in the \"resolve\" phase whether or not there is anything to resolve.\n * In future, may change to only run when there are things to be resolved.\n *\n * @see {@link ResolveEnd}\n *\n * @publicApi\n */\nclass ResolveStart extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.ResolveStart;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered at the end of the Resolve phase of routing.\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ResolveEnd extends RouterEvent {\n  urlAfterRedirects;\n  state;\n  type = EventType.ResolveEnd;\n  constructor(/** @docsNotRequired */\n  id, /** @docsNotRequired */\n  url, /** @docsNotRequired */\n  urlAfterRedirects, /** @docsNotRequired */\n  state) {\n    super(id, url);\n    this.urlAfterRedirects = urlAfterRedirects;\n    this.state = state;\n  }\n  toString() {\n    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n/**\n * An event triggered before lazy loading a route configuration.\n *\n * @see {@link RouteConfigLoadEnd}\n *\n * @publicApi\n */\nclass RouteConfigLoadStart {\n  route;\n  type = EventType.RouteConfigLoadStart;\n  constructor(/** @docsNotRequired */\n  route) {\n    this.route = route;\n  }\n  toString() {\n    return `RouteConfigLoadStart(path: ${this.route.path})`;\n  }\n}\n/**\n * An event triggered when a route has been lazy loaded.\n *\n * @see {@link RouteConfigLoadStart}\n *\n * @publicApi\n */\nclass RouteConfigLoadEnd {\n  route;\n  type = EventType.RouteConfigLoadEnd;\n  constructor(/** @docsNotRequired */\n  route) {\n    this.route = route;\n  }\n  toString() {\n    return `RouteConfigLoadEnd(path: ${this.route.path})`;\n  }\n}\n/**\n * An event triggered at the start of the child-activation\n * part of the Resolve phase of routing.\n * @see {@link ChildActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ChildActivationStart {\n  snapshot;\n  type = EventType.ChildActivationStart;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationStart(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the end of the child-activation part\n * of the Resolve phase of routing.\n * @see {@link ChildActivationStart}\n * @see {@link ResolveStart}\n * @publicApi\n */\nclass ChildActivationEnd {\n  snapshot;\n  type = EventType.ChildActivationEnd;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationEnd(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the start of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ActivationStart {\n  snapshot;\n  type = EventType.ActivationStart;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationStart(path: '${path}')`;\n  }\n}\n/**\n * An event triggered at the end of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationStart}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nclass ActivationEnd {\n  snapshot;\n  type = EventType.ActivationEnd;\n  constructor(/** @docsNotRequired */\n  snapshot) {\n    this.snapshot = snapshot;\n  }\n  toString() {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationEnd(path: '${path}')`;\n  }\n}\n/**\n * An event triggered by scrolling.\n *\n * @publicApi\n */\nclass Scroll {\n  routerEvent;\n  position;\n  anchor;\n  type = EventType.Scroll;\n  constructor(/** @docsNotRequired */\n  routerEvent, /** @docsNotRequired */\n  position, /** @docsNotRequired */\n  anchor) {\n    this.routerEvent = routerEvent;\n    this.position = position;\n    this.anchor = anchor;\n  }\n  toString() {\n    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n  }\n}\nclass BeforeActivateRoutes {}\nclass RedirectRequest {\n  url;\n  navigationBehaviorOptions;\n  constructor(url, navigationBehaviorOptions) {\n    this.url = url;\n    this.navigationBehaviorOptions = navigationBehaviorOptions;\n  }\n}\nfunction stringifyEvent(routerEvent) {\n  switch (routerEvent.type) {\n    case EventType.ActivationEnd:\n      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ActivationStart:\n      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationEnd:\n      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationStart:\n      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.GuardsCheckEnd:\n      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n    case EventType.GuardsCheckStart:\n      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.NavigationCancel:\n      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationSkipped:\n      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationEnd:\n      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;\n    case EventType.NavigationError:\n      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;\n    case EventType.NavigationStart:\n      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.ResolveEnd:\n      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.ResolveStart:\n      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.RouteConfigLoadEnd:\n      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n    case EventType.RouteConfigLoadStart:\n      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n    case EventType.RoutesRecognized:\n      return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.Scroll:\n      const pos = routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;\n      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n  }\n}\n\n/**\n * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist\n * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the\n * `currentInjector`.\n *\n * @param route The route that might have providers\n * @param currentInjector The parent injector of the `Route`\n */\nfunction getOrCreateRouteInjectorIfNeeded(route, currentInjector) {\n  if (route.providers && !route._injector) {\n    route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\n  }\n  return route._injector ?? currentInjector;\n}\nfunction getLoadedRoutes$1(route) {\n  return route._loadedRoutes;\n}\nfunction getLoadedInjector(route) {\n  return route._loadedInjector;\n}\nfunction getLoadedComponent(route) {\n  return route._loadedComponent;\n}\nfunction getProvidersInjector(route) {\n  return route._injector;\n}\nfunction validateConfig(config, parentPath = '', requireStandaloneComponents = false) {\n  // forEach doesn't iterate undefined values\n  for (let i = 0; i < config.length; i++) {\n    const route = config[i];\n    const fullPath = getFullPath(parentPath, route);\n    validateNode(route, fullPath, requireStandaloneComponents);\n  }\n}\nfunction assertStandalone(fullPath, component) {\n  if (component && ɵisNgModule(component)) {\n    throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);\n  } else if (component && !isStandalone(component)) {\n    throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);\n  }\n}\nfunction validateNode(route, fullPath, requireStandaloneComponents) {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (!route) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `\n      Invalid configuration of route '${fullPath}': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    `);\n    }\n    if (Array.isArray(route)) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': Array cannot be specified`);\n    }\n    if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n    }\n    if (route.redirectTo && route.children) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n    }\n    if (route.redirectTo && route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n    }\n    if (route.children && route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n    }\n    if (route.redirectTo && (route.component || route.loadComponent)) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);\n    }\n    if (route.component && route.loadComponent) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);\n    }\n    if (route.redirectTo && route.canActivate) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` + `so canActivate will never be executed.`);\n    }\n    if (route.path && route.matcher) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n    }\n    if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\n    }\n    if (route.path === void 0 && route.matcher === void 0) {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);\n    }\n    if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);\n    }\n    if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n      const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n      throw new ɵRuntimeError(4014 /* RuntimeErrorCode.INVALID_ROUTE_CONFIG */, `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n    }\n    if (requireStandaloneComponents) {\n      assertStandalone(fullPath, route.component);\n    }\n  }\n  if (route.children) {\n    validateConfig(route.children, fullPath, requireStandaloneComponents);\n  }\n}\nfunction getFullPath(parentPath, currentRoute) {\n  if (!currentRoute) {\n    return parentPath;\n  }\n  if (!parentPath && !currentRoute.path) {\n    return '';\n  } else if (parentPath && !currentRoute.path) {\n    return `${parentPath}/`;\n  } else if (!parentPath && currentRoute.path) {\n    return currentRoute.path;\n  } else {\n    return `${parentPath}/${currentRoute.path}`;\n  }\n}\n/** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */\nfunction getOutlet(route) {\n  return route.outlet || PRIMARY_OUTLET;\n}\n/**\n * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.\n * The order of the configs is otherwise preserved.\n */\nfunction sortByMatchingOutlets(routes, outletName) {\n  const sortedConfig = routes.filter(r => getOutlet(r) === outletName);\n  sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));\n  return sortedConfig;\n}\n/**\n * Gets the first injector in the snapshot's parent tree.\n *\n * If the `Route` has a static list of providers, the returned injector will be the one created from\n * those. If it does not exist, the returned injector may come from the parents, which may be from a\n * loaded config or their static providers.\n *\n * Returns `null` if there is neither this nor any parents have a stored injector.\n *\n * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and\n * also used for getting the correct injector to use for creating components.\n */\nfunction getClosestRouteInjector(snapshot) {\n  if (!snapshot) return null;\n  // If the current route has its own injector, which is created from the static providers on the\n  // route itself, we should use that. Otherwise, we start at the parent since we do not want to\n  // include the lazy loaded injector from this route.\n  if (snapshot.routeConfig?._injector) {\n    return snapshot.routeConfig._injector;\n  }\n  for (let s = snapshot.parent; s; s = s.parent) {\n    const route = s.routeConfig;\n    // Note that the order here is important. `_loadedInjector` stored on the route with\n    // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`\n    // is created from the static providers on that parent route, so it applies to the children as\n    // well, but only if there is no lazy loaded NgModuleRef injector.\n    if (route?._loadedInjector) return route._loadedInjector;\n    if (route?._injector) return route._injector;\n  }\n  return null;\n}\n\n/**\n * Store contextual information about a `RouterOutlet`\n *\n * @publicApi\n */\nclass OutletContext {\n  rootInjector;\n  outlet = null;\n  route = null;\n  children;\n  attachRef = null;\n  get injector() {\n    return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;\n  }\n  constructor(rootInjector) {\n    this.rootInjector = rootInjector;\n    this.children = new ChildrenOutletContexts(this.rootInjector);\n  }\n}\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n * @publicApi\n */\nclass ChildrenOutletContexts {\n  rootInjector;\n  // contexts for child outlets, by name.\n  contexts = new Map();\n  /** @nodoc */\n  constructor(rootInjector) {\n    this.rootInjector = rootInjector;\n  }\n  /** Called when a `RouterOutlet` directive is instantiated */\n  onChildOutletCreated(childName, outlet) {\n    const context = this.getOrCreateContext(childName);\n    context.outlet = outlet;\n    this.contexts.set(childName, context);\n  }\n  /**\n   * Called when a `RouterOutlet` directive is destroyed.\n   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n   * re-created later.\n   */\n  onChildOutletDestroyed(childName) {\n    const context = this.getContext(childName);\n    if (context) {\n      context.outlet = null;\n      context.attachRef = null;\n    }\n  }\n  /**\n   * Called when the corresponding route is deactivated during navigation.\n   * Because the component get destroyed, all children outlet are destroyed.\n   */\n  onOutletDeactivated() {\n    const contexts = this.contexts;\n    this.contexts = new Map();\n    return contexts;\n  }\n  onOutletReAttached(contexts) {\n    this.contexts = contexts;\n  }\n  getOrCreateContext(childName) {\n    let context = this.getContext(childName);\n    if (!context) {\n      context = new OutletContext(this.rootInjector);\n      this.contexts.set(childName, context);\n    }\n    return context;\n  }\n  getContext(childName) {\n    return this.contexts.get(childName) || null;\n  }\n  static ɵfac = function ChildrenOutletContexts_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ChildrenOutletContexts)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: ChildrenOutletContexts,\n    factory: ChildrenOutletContexts.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ChildrenOutletContexts, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\nclass Tree {\n  /** @internal */\n  _root;\n  constructor(root) {\n    this._root = root;\n  }\n  get root() {\n    return this._root.value;\n  }\n  /**\n   * @internal\n   */\n  parent(t) {\n    const p = this.pathFromRoot(t);\n    return p.length > 1 ? p[p.length - 2] : null;\n  }\n  /**\n   * @internal\n   */\n  children(t) {\n    const n = findNode(t, this._root);\n    return n ? n.children.map(t => t.value) : [];\n  }\n  /**\n   * @internal\n   */\n  firstChild(t) {\n    const n = findNode(t, this._root);\n    return n && n.children.length > 0 ? n.children[0].value : null;\n  }\n  /**\n   * @internal\n   */\n  siblings(t) {\n    const p = findPath(t, this._root);\n    if (p.length < 2) return [];\n    const c = p[p.length - 2].children.map(c => c.value);\n    return c.filter(cc => cc !== t);\n  }\n  /**\n   * @internal\n   */\n  pathFromRoot(t) {\n    return findPath(t, this._root).map(s => s.value);\n  }\n}\n// DFS for the node matching the value\nfunction findNode(value, node) {\n  if (value === node.value) return node;\n  for (const child of node.children) {\n    const node = findNode(value, child);\n    if (node) return node;\n  }\n  return null;\n}\n// Return the path to the node with the given value using DFS\nfunction findPath(value, node) {\n  if (value === node.value) return [node];\n  for (const child of node.children) {\n    const path = findPath(value, child);\n    if (path.length) {\n      path.unshift(node);\n      return path;\n    }\n  }\n  return [];\n}\nclass TreeNode {\n  value;\n  children;\n  constructor(value, children) {\n    this.value = value;\n    this.children = children;\n  }\n  toString() {\n    return `TreeNode(${this.value})`;\n  }\n}\n// Return the list of T indexed by outlet name\nfunction nodeChildrenAsMap(node) {\n  const map = {};\n  if (node) {\n    node.children.forEach(child => map[child.value.outlet] = child);\n  }\n  return map;\n}\n\n/**\n * Represents the state of the router as a tree of activated routes.\n *\n * @usageNotes\n *\n * Every node in the route tree is an `ActivatedRoute` instance\n * that knows about the \"consumed\" URL segments, the extracted parameters,\n * and the resolved data.\n * Use the `ActivatedRoute` properties to traverse the tree from any node.\n *\n * The following fragment shows how a component gets the root node\n * of the current state to establish its own route tree:\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const root: ActivatedRoute = state.root;\n *     const child = root.firstChild;\n *     const id: Observable<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @see {@link ActivatedRoute}\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nclass RouterState extends Tree {\n  snapshot;\n  /** @internal */\n  constructor(root, /** The current snapshot of the router state */\n  snapshot) {\n    super(root);\n    this.snapshot = snapshot;\n    setRouterState(this, root);\n  }\n  toString() {\n    return this.snapshot.toString();\n  }\n}\nfunction createEmptyState(rootComponent) {\n  const snapshot = createEmptyStateSnapshot(rootComponent);\n  const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n  const emptyParams = new BehaviorSubject({});\n  const emptyData = new BehaviorSubject({});\n  const emptyQueryParams = new BehaviorSubject({});\n  const fragment = new BehaviorSubject('');\n  const activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);\n  activated.snapshot = snapshot.root;\n  return new RouterState(new TreeNode(activated, []), snapshot);\n}\nfunction createEmptyStateSnapshot(rootComponent) {\n  const emptyParams = {};\n  const emptyData = {};\n  const emptyQueryParams = {};\n  const fragment = '';\n  const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});\n  return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * Provides access to information about a route associated with a component\n * that is loaded in an outlet.\n * Use to traverse the `RouterState` tree and extract information from nodes.\n *\n * The following example shows how to construct a component using information from a\n * currently activated route.\n *\n * Note: the observables in this class only emit when the current and previous values differ based\n * on shallow equality. For example, changing deeply nested properties in resolved `data` will not\n * cause the `ActivatedRoute.data` `Observable` to emit a new value.\n *\n * {@example router/activated-route/module.ts region=\"activated-route\"\n *     header=\"activated-route.component.ts\"}\n *\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nclass ActivatedRoute {\n  urlSubject;\n  paramsSubject;\n  queryParamsSubject;\n  fragmentSubject;\n  dataSubject;\n  outlet;\n  component;\n  /** The current snapshot of this route */\n  snapshot;\n  /** @internal */\n  _futureSnapshot;\n  /** @internal */\n  _routerState;\n  /** @internal */\n  _paramMap;\n  /** @internal */\n  _queryParamMap;\n  /** An Observable of the resolved route title */\n  title;\n  /** An observable of the URL segments matched by this route. */\n  url;\n  /** An observable of the matrix parameters scoped to this route. */\n  params;\n  /** An observable of the query parameters shared by all the routes. */\n  queryParams;\n  /** An observable of the URL fragment shared by all the routes. */\n  fragment;\n  /** An observable of the static and resolved data of this route. */\n  data;\n  /** @internal */\n  constructor(/** @internal */\n  urlSubject, /** @internal */\n  paramsSubject, /** @internal */\n  queryParamsSubject, /** @internal */\n  fragmentSubject, /** @internal */\n  dataSubject, /** The outlet name of the route, a constant. */\n  outlet, /** The component of the route, a constant. */\n  component, futureSnapshot) {\n    this.urlSubject = urlSubject;\n    this.paramsSubject = paramsSubject;\n    this.queryParamsSubject = queryParamsSubject;\n    this.fragmentSubject = fragmentSubject;\n    this.dataSubject = dataSubject;\n    this.outlet = outlet;\n    this.component = component;\n    this._futureSnapshot = futureSnapshot;\n    this.title = this.dataSubject?.pipe(map(d => d[RouteTitleKey])) ?? of(undefined);\n    // TODO(atscott): Verify that these can be changed to `.asObservable()` with TGP.\n    this.url = urlSubject;\n    this.params = paramsSubject;\n    this.queryParams = queryParamsSubject;\n    this.fragment = fragmentSubject;\n    this.data = dataSubject;\n  }\n  /** The configuration used to match this route. */\n  get routeConfig() {\n    return this._futureSnapshot.routeConfig;\n  }\n  /** The root of the router state. */\n  get root() {\n    return this._routerState.root;\n  }\n  /** The parent of this route in the router state tree. */\n  get parent() {\n    return this._routerState.parent(this);\n  }\n  /** The first child of this route in the router state tree. */\n  get firstChild() {\n    return this._routerState.firstChild(this);\n  }\n  /** The children of this route in the router state tree. */\n  get children() {\n    return this._routerState.children(this);\n  }\n  /** The path from the root of the router state tree to this route. */\n  get pathFromRoot() {\n    return this._routerState.pathFromRoot(this);\n  }\n  /**\n   * An Observable that contains a map of the required and optional parameters\n   * specific to the route.\n   * The map supports retrieving single and multiple values from the same parameter.\n   */\n  get paramMap() {\n    this._paramMap ??= this.params.pipe(map(p => convertToParamMap(p)));\n    return this._paramMap;\n  }\n  /**\n   * An Observable that contains a map of the query parameters available to all routes.\n   * The map supports retrieving single and multiple values from the query parameter.\n   */\n  get queryParamMap() {\n    this._queryParamMap ??= this.queryParams.pipe(map(p => convertToParamMap(p)));\n    return this._queryParamMap;\n  }\n  toString() {\n    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n  }\n}\n/**\n * Returns the inherited params, data, and resolve for a given route.\n *\n * By default, we do not inherit parent data unless the current route is path-less or the parent\n * route is component-less.\n */\nfunction getInherited(route, parent, paramsInheritanceStrategy = 'emptyOnly') {\n  let inherited;\n  const {\n    routeConfig\n  } = route;\n  if (parent !== null && (paramsInheritanceStrategy === 'always' ||\n  // inherit parent data if route is empty path\n  routeConfig?.path === '' ||\n  // inherit parent data if parent was componentless\n  !parent.component && !parent.routeConfig?.loadComponent)) {\n    inherited = {\n      params: {\n        ...parent.params,\n        ...route.params\n      },\n      data: {\n        ...parent.data,\n        ...route.data\n      },\n      resolve: {\n        // Snapshots are created with data inherited from parent and guards (i.e. canActivate) can\n        // change data because it's not frozen...\n        // This first line could be deleted chose to break/disallow mutating the `data` object in\n        // guards.\n        // Note that data from parents still override this mutated data so anyone relying on this\n        // might be surprised that it doesn't work if parent data is inherited but otherwise does.\n        ...route.data,\n        // Ensure inherited resolved data overrides inherited static data\n        ...parent.data,\n        // static data from the current route overrides any inherited data\n        ...routeConfig?.data,\n        // resolved data from current route overrides everything\n        ...route._resolvedData\n      }\n    };\n  } else {\n    inherited = {\n      params: {\n        ...route.params\n      },\n      data: {\n        ...route.data\n      },\n      resolve: {\n        ...route.data,\n        ...(route._resolvedData ?? {})\n      }\n    };\n  }\n  if (routeConfig && hasStaticTitle(routeConfig)) {\n    inherited.resolve[RouteTitleKey] = routeConfig.title;\n  }\n  return inherited;\n}\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * The following example initializes a component with route information extracted\n * from the snapshot of the root node at the time of creation.\n *\n * ```ts\n * @Component({templateUrl:'./my-component.html'})\n * class MyComponent {\n *   constructor(route: ActivatedRoute) {\n *     const id: string = route.snapshot.params.id;\n *     const url: string = route.snapshot.url.join('');\n *     const user = route.snapshot.data.user;\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass ActivatedRouteSnapshot {\n  url;\n  params;\n  queryParams;\n  fragment;\n  data;\n  outlet;\n  component;\n  /** The configuration used to match this route **/\n  routeConfig;\n  /** @internal */\n  _resolve;\n  /** @internal */\n  _resolvedData;\n  /** @internal */\n  _routerState;\n  /** @internal */\n  _paramMap;\n  /** @internal */\n  _queryParamMap;\n  /** The resolved route title */\n  get title() {\n    // Note: This _must_ be a getter because the data is mutated in the resolvers. Title will not be\n    // available at the time of class instantiation.\n    return this.data?.[RouteTitleKey];\n  }\n  /** @internal */\n  constructor(/** The URL segments matched by this route */\n  url,\n  /**\n   *  The matrix parameters scoped to this route.\n   *\n   *  You can compute all params (or data) in the router state or to get params outside\n   *  of an activated component by traversing the `RouterState` tree as in the following\n   *  example:\n   *  ```\n   *  collectRouteParams(router: Router) {\n   *    let params = {};\n   *    let stack: ActivatedRouteSnapshot[] = [router.routerState.snapshot.root];\n   *    while (stack.length > 0) {\n   *      const route = stack.pop()!;\n   *      params = {...params, ...route.params};\n   *      stack.push(...route.children);\n   *    }\n   *    return params;\n   *  }\n   *  ```\n   */\n  params, /** The query parameters shared by all the routes */\n  queryParams, /** The URL fragment shared by all the routes */\n  fragment, /** The static and resolved data of this route */\n  data, /** The outlet name of the route */\n  outlet, /** The component of the route */\n  component, routeConfig, resolve) {\n    this.url = url;\n    this.params = params;\n    this.queryParams = queryParams;\n    this.fragment = fragment;\n    this.data = data;\n    this.outlet = outlet;\n    this.component = component;\n    this.routeConfig = routeConfig;\n    this._resolve = resolve;\n  }\n  /** The root of the router state */\n  get root() {\n    return this._routerState.root;\n  }\n  /** The parent of this route in the router state tree */\n  get parent() {\n    return this._routerState.parent(this);\n  }\n  /** The first child of this route in the router state tree */\n  get firstChild() {\n    return this._routerState.firstChild(this);\n  }\n  /** The children of this route in the router state tree */\n  get children() {\n    return this._routerState.children(this);\n  }\n  /** The path from the root of the router state tree to this route */\n  get pathFromRoot() {\n    return this._routerState.pathFromRoot(this);\n  }\n  get paramMap() {\n    this._paramMap ??= convertToParamMap(this.params);\n    return this._paramMap;\n  }\n  get queryParamMap() {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n  toString() {\n    const url = this.url.map(segment => segment.toString()).join('/');\n    const matched = this.routeConfig ? this.routeConfig.path : '';\n    return `Route(url:'${url}', path:'${matched}')`;\n  }\n}\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n *\n * The following example shows how a component is initialized with information\n * from the snapshot of the root node's state at the time of creation.\n *\n * ```ts\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const snapshot: RouterStateSnapshot = state.snapshot;\n *     const root: ActivatedRouteSnapshot = snapshot.root;\n *     const child = root.firstChild;\n *     const id: Observable<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass RouterStateSnapshot extends Tree {\n  url;\n  /** @internal */\n  constructor(/** The url from which this snapshot was created */\n  url, root) {\n    super(root);\n    this.url = url;\n    setRouterState(this, root);\n  }\n  toString() {\n    return serializeNode(this._root);\n  }\n}\nfunction setRouterState(state, node) {\n  node.value._routerState = state;\n  node.children.forEach(c => setRouterState(state, c));\n}\nfunction serializeNode(node) {\n  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n  return `${node.value}${c}`;\n}\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n */\nfunction advanceActivatedRoute(route) {\n  if (route.snapshot) {\n    const currentSnapshot = route.snapshot;\n    const nextSnapshot = route._futureSnapshot;\n    route.snapshot = nextSnapshot;\n    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n      route.queryParamsSubject.next(nextSnapshot.queryParams);\n    }\n    if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n      route.fragmentSubject.next(nextSnapshot.fragment);\n    }\n    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n      route.paramsSubject.next(nextSnapshot.params);\n    }\n    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n      route.urlSubject.next(nextSnapshot.url);\n    }\n    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n      route.dataSubject.next(nextSnapshot.data);\n    }\n  } else {\n    route.snapshot = route._futureSnapshot;\n    // this is for resolved data\n    route.dataSubject.next(route._futureSnapshot.data);\n  }\n}\nfunction equalParamsAndUrlSegments(a, b) {\n  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n  const parentsMismatch = !a.parent !== !b.parent;\n  return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));\n}\nfunction hasStaticTitle(config) {\n  return typeof config.title === 'string' || config.title === null;\n}\n\n/**\n * An `InjectionToken` provided by the `RouterOutlet` and can be set using the `routerOutletData`\n * input.\n *\n * When unset, this value is `null` by default.\n *\n * @usageNotes\n *\n * To set the data from the template of the component with `router-outlet`:\n * ```html\n * <router-outlet [routerOutletData]=\"{name: 'Angular'}\" />\n * ```\n *\n * To read the data in the routed component:\n * ```ts\n * data = inject(ROUTER_OUTLET_DATA) as Signal<{name: string}>;\n * ```\n *\n * @publicApi\n */\nconst ROUTER_OUTLET_DATA = new InjectionToken(ngDevMode ? 'RouterOutlet data' : '');\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * Each outlet can have a unique name, determined by the optional `name` attribute.\n * The name cannot be set or changed dynamically. If not set, default value is \"primary\".\n *\n * ```html\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * Named outlets can be the targets of secondary routes.\n * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:\n *\n * `{path: <base-path>, component: <component>, outlet: <target_outlet_name>}`\n *\n * Using named outlets and secondary routes, you can target multiple outlets in\n * the same `RouterLink` directive.\n *\n * The router keeps track of separate branches in a navigation tree for each named outlet and\n * generates a representation of that tree in the URL.\n * The URL for a secondary route uses the following syntax to specify both the primary and secondary\n * routes at the same time:\n *\n * `http://base-path/primary-route-path(outlet-name:route-path)`\n *\n * A router outlet emits an activate event when a new component is instantiated,\n * deactivate event when a component is destroyed.\n * An attached event emits when the `RouteReuseStrategy` instructs the outlet to reattach the\n * subtree, and the detached event emits when the `RouteReuseStrategy` instructs the outlet to\n * detach the subtree.\n *\n * ```html\n * <router-outlet\n *   (activate)='onActivate($event)'\n *   (deactivate)='onDeactivate($event)'\n *   (attach)='onAttach($event)'\n *   (detach)='onDetach($event)'></router-outlet>\n * ```\n *\n * @see {@link RouterLink}\n * @see {@link Route}\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterOutlet {\n  activated = null;\n  /** @internal */\n  get activatedComponentRef() {\n    return this.activated;\n  }\n  _activatedRoute = null;\n  /**\n   * The name of the outlet\n   *\n   */\n  name = PRIMARY_OUTLET;\n  activateEvents = new EventEmitter();\n  deactivateEvents = new EventEmitter();\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  attachEvents = new EventEmitter();\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  detachEvents = new EventEmitter();\n  /**\n   * Data that will be provided to the child injector through the `ROUTER_OUTLET_DATA` token.\n   *\n   * When unset, the value of the token is `undefined` by default.\n   */\n  routerOutletData = input(undefined);\n  parentContexts = inject(ChildrenOutletContexts);\n  location = inject(ViewContainerRef);\n  changeDetector = inject(ChangeDetectorRef);\n  inputBinder = inject(INPUT_BINDER, {\n    optional: true\n  });\n  /** @nodoc */\n  supportsBindingToComponentInputs = true;\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (changes['name']) {\n      const {\n        firstChange,\n        previousValue\n      } = changes['name'];\n      if (firstChange) {\n        // The first change is handled by ngOnInit. Because ngOnChanges doesn't get called when no\n        // input is set at all, we need to centrally handle the first change there.\n        return;\n      }\n      // unregister with the old name\n      if (this.isTrackedInParentContexts(previousValue)) {\n        this.deactivate();\n        this.parentContexts.onChildOutletDestroyed(previousValue);\n      }\n      // register the new name\n      this.initializeOutletWithName();\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    // Ensure that the registered outlet is this one before removing it on the context.\n    if (this.isTrackedInParentContexts(this.name)) {\n      this.parentContexts.onChildOutletDestroyed(this.name);\n    }\n    this.inputBinder?.unsubscribeFromRouteData(this);\n  }\n  isTrackedInParentContexts(outletName) {\n    return this.parentContexts.getContext(outletName)?.outlet === this;\n  }\n  /** @nodoc */\n  ngOnInit() {\n    this.initializeOutletWithName();\n  }\n  initializeOutletWithName() {\n    this.parentContexts.onChildOutletCreated(this.name, this);\n    if (this.activated) {\n      return;\n    }\n    // If the outlet was not instantiated at the time the route got activated we need to populate\n    // the outlet when it is initialized (ie inside a NgIf)\n    const context = this.parentContexts.getContext(this.name);\n    if (context?.route) {\n      if (context.attachRef) {\n        // `attachRef` is populated when there is an existing component to mount\n        this.attach(context.attachRef, context.route);\n      } else {\n        // otherwise the component defined in the configuration is created\n        this.activateWith(context.route, context.injector);\n      }\n    }\n  }\n  get isActivated() {\n    return !!this.activated;\n  }\n  /**\n   * @returns The currently activated component instance.\n   * @throws An error if the outlet is not activated.\n   */\n  get component() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this.activated.instance;\n  }\n  get activatedRoute() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this._activatedRoute;\n  }\n  get activatedRouteData() {\n    if (this._activatedRoute) {\n      return this._activatedRoute.snapshot.data;\n    }\n    return {};\n  }\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree\n   */\n  detach() {\n    if (!this.activated) throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    this.location.detach();\n    const cmp = this.activated;\n    this.activated = null;\n    this._activatedRoute = null;\n    this.detachEvents.emit(cmp.instance);\n    return cmp;\n  }\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n   */\n  attach(ref, activatedRoute) {\n    this.activated = ref;\n    this._activatedRoute = activatedRoute;\n    this.location.insert(ref.hostView);\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.attachEvents.emit(ref.instance);\n  }\n  deactivate() {\n    if (this.activated) {\n      const c = this.component;\n      this.activated.destroy();\n      this.activated = null;\n      this._activatedRoute = null;\n      this.deactivateEvents.emit(c);\n    }\n  }\n  activateWith(activatedRoute, environmentInjector) {\n    if (this.isActivated) {\n      throw new ɵRuntimeError(4013 /* RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot activate an already activated outlet');\n    }\n    this._activatedRoute = activatedRoute;\n    const location = this.location;\n    const snapshot = activatedRoute.snapshot;\n    const component = snapshot.component;\n    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n    const injector = new OutletInjector(activatedRoute, childContexts, location.injector, this.routerOutletData);\n    this.activated = location.createComponent(component, {\n      index: location.length,\n      injector,\n      environmentInjector: environmentInjector\n    });\n    // Calling `markForCheck` to make sure we will run the change detection when the\n    // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n    this.changeDetector.markForCheck();\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.activateEvents.emit(this.activated.instance);\n  }\n  static ɵfac = function RouterOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterOutlet)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterOutlet,\n    selectors: [[\"router-outlet\"]],\n    inputs: {\n      name: \"name\",\n      routerOutletData: [1, \"routerOutletData\"]\n    },\n    outputs: {\n      activateEvents: \"activate\",\n      deactivateEvents: \"deactivate\",\n      attachEvents: \"attach\",\n      detachEvents: \"detach\"\n    },\n    exportAs: [\"outlet\"],\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterOutlet, [{\n    type: Directive,\n    args: [{\n      selector: 'router-outlet',\n      exportAs: 'outlet'\n    }]\n  }], null, {\n    name: [{\n      type: Input\n    }],\n    activateEvents: [{\n      type: Output,\n      args: ['activate']\n    }],\n    deactivateEvents: [{\n      type: Output,\n      args: ['deactivate']\n    }],\n    attachEvents: [{\n      type: Output,\n      args: ['attach']\n    }],\n    detachEvents: [{\n      type: Output,\n      args: ['detach']\n    }]\n  });\n})();\nclass OutletInjector {\n  route;\n  childContexts;\n  parent;\n  outletData;\n  /**\n   * This injector has a special handing for the `ActivatedRoute` and\n   * `ChildrenOutletContexts` tokens: it returns corresponding values for those\n   * tokens dynamically. This behavior is different from the regular injector logic,\n   * when we initialize and store a value, which is later returned for all inject\n   * requests.\n   *\n   * In some cases (e.g. when using `@defer`), this dynamic behavior requires special\n   * handling. This function allows to identify an instance of the `OutletInjector` and\n   * create an instance of it without referring to the class itself (so this logic can\n   * be invoked from the `core` package). This helps to retain dynamic behavior for the\n   * mentioned tokens.\n   *\n   * Note: it's a temporary solution and we should explore how to support this case better.\n   */\n  __ngOutletInjector(parentInjector) {\n    return new OutletInjector(this.route, this.childContexts, parentInjector, this.outletData);\n  }\n  constructor(route, childContexts, parent, outletData) {\n    this.route = route;\n    this.childContexts = childContexts;\n    this.parent = parent;\n    this.outletData = outletData;\n  }\n  get(token, notFoundValue) {\n    if (token === ActivatedRoute) {\n      return this.route;\n    }\n    if (token === ChildrenOutletContexts) {\n      return this.childContexts;\n    }\n    if (token === ROUTER_OUTLET_DATA) {\n      return this.outletData;\n    }\n    return this.parent.get(token, notFoundValue);\n  }\n}\nconst INPUT_BINDER = new InjectionToken('');\n/**\n * Injectable used as a tree-shakable provider for opting in to binding router data to component\n * inputs.\n *\n * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or\n * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,\n * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. If it were not done this way, the previous information would be\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n *\n * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that\n * the subscriptions are cleaned up.\n */\nclass RoutedComponentInputBinder {\n  outletDataSubscriptions = new Map();\n  bindActivatedRouteToOutletComponent(outlet) {\n    this.unsubscribeFromRouteData(outlet);\n    this.subscribeToRouteData(outlet);\n  }\n  unsubscribeFromRouteData(outlet) {\n    this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n    this.outletDataSubscriptions.delete(outlet);\n  }\n  subscribeToRouteData(outlet) {\n    const {\n      activatedRoute\n    } = outlet;\n    const dataSubscription = combineLatest([activatedRoute.queryParams, activatedRoute.params, activatedRoute.data]).pipe(switchMap(([queryParams, params, data], index) => {\n      data = {\n        ...queryParams,\n        ...params,\n        ...data\n      };\n      // Get the first result from the data subscription synchronously so it's available to\n      // the component as soon as possible (and doesn't require a second change detection).\n      if (index === 0) {\n        return of(data);\n      }\n      // Promise.resolve is used to avoid synchronously writing the wrong data when\n      // two of the Observables in the `combineLatest` stream emit one after\n      // another.\n      return Promise.resolve(data);\n    })).subscribe(data => {\n      // Outlet may have been deactivated or changed names to be associated with a different\n      // route\n      if (!outlet.isActivated || !outlet.activatedComponentRef || outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\n        this.unsubscribeFromRouteData(outlet);\n        return;\n      }\n      const mirror = reflectComponentType(activatedRoute.component);\n      if (!mirror) {\n        this.unsubscribeFromRouteData(outlet);\n        return;\n      }\n      for (const {\n        templateName\n      } of mirror.inputs) {\n        outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n      }\n    });\n    this.outletDataSubscriptions.set(outlet, dataSubscription);\n  }\n  static ɵfac = function RoutedComponentInputBinder_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RoutedComponentInputBinder)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RoutedComponentInputBinder,\n    factory: RoutedComponentInputBinder.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RoutedComponentInputBinder, [{\n    type: Injectable\n  }], null, null);\n})();\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n  return new RouterState(root, curr);\n}\nfunction createNode(routeReuseStrategy, curr, prevState) {\n  // reuse an activated route that is currently displayed on the screen\n  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n    const value = prevState.value;\n    value._futureSnapshot = curr.value;\n    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n    return new TreeNode(value, children);\n  } else {\n    if (routeReuseStrategy.shouldAttach(curr.value)) {\n      // retrieve an activated route that is used to be displayed, but is not currently displayed\n      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n      if (detachedRouteHandle !== null) {\n        const tree = detachedRouteHandle.route;\n        tree.value._futureSnapshot = curr.value;\n        tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));\n        return tree;\n      }\n    }\n    const value = createActivatedRoute(curr.value);\n    const children = curr.children.map(c => createNode(routeReuseStrategy, c));\n    return new TreeNode(value, children);\n  }\n}\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n  return curr.children.map(child => {\n    for (const p of prevState.children) {\n      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n        return createNode(routeReuseStrategy, child, p);\n      }\n    }\n    return createNode(routeReuseStrategy, child);\n  });\n}\nfunction createActivatedRoute(c) {\n  return new ActivatedRoute(new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams), new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);\n}\n\n/**\n * Can be returned by a `Router` guard to instruct the `Router` to redirect rather than continue\n * processing the path of the in-flight navigation. The `redirectTo` indicates _where_ the new\n * navigation should go to and the optional `navigationBehaviorOptions` can provide more information\n * about _how_ to perform the navigation.\n *\n * ```ts\n * const route: Route = {\n *   path: \"user/:userId\",\n *   component: User,\n *   canActivate: [\n *     () => {\n *       const router = inject(Router);\n *       const authService = inject(AuthenticationService);\n *\n *       if (!authService.isLoggedIn()) {\n *         const loginPath = router.parseUrl(\"/login\");\n *         return new RedirectCommand(loginPath, {\n *           skipLocationChange: \"true\",\n *         });\n *       }\n *\n *       return true;\n *     },\n *   ],\n * };\n * ```\n * @see [Routing guide](guide/routing/common-router-tasks#preventing-unauthorized-access)\n *\n * @publicApi\n */\nclass RedirectCommand {\n  redirectTo;\n  navigationBehaviorOptions;\n  constructor(redirectTo, navigationBehaviorOptions) {\n    this.redirectTo = redirectTo;\n    this.navigationBehaviorOptions = navigationBehaviorOptions;\n  }\n}\nconst NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\nfunction redirectingNavigationError(urlSerializer, redirect) {\n  const {\n    redirectTo,\n    navigationBehaviorOptions\n  } = isUrlTree(redirect) ? {\n    redirectTo: redirect,\n    navigationBehaviorOptions: undefined\n  } : redirect;\n  const error = navigationCancelingError(ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`, NavigationCancellationCode.Redirect);\n  error.url = redirectTo;\n  error.navigationBehaviorOptions = navigationBehaviorOptions;\n  return error;\n}\nfunction navigationCancelingError(message, code) {\n  const error = new Error(`NavigationCancelingError: ${message || ''}`);\n  error[NAVIGATION_CANCELING_ERROR] = true;\n  error.cancellationCode = code;\n  return error;\n}\nfunction isRedirectingNavigationCancelingError(error) {\n  return isNavigationCancelingError(error) && isUrlTree(error.url);\n}\nfunction isNavigationCancelingError(error) {\n  return !!error && error[NAVIGATION_CANCELING_ERROR];\n}\nlet warnedAboutUnsupportedInputBinding = false;\nconst activateRoutes = (rootContexts, routeReuseStrategy, forwardEvent, inputBindingEnabled) => map(t => {\n  new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent, inputBindingEnabled).activate(rootContexts);\n  return t;\n});\nclass ActivateRoutes {\n  routeReuseStrategy;\n  futureState;\n  currState;\n  forwardEvent;\n  inputBindingEnabled;\n  constructor(routeReuseStrategy, futureState, currState, forwardEvent, inputBindingEnabled) {\n    this.routeReuseStrategy = routeReuseStrategy;\n    this.futureState = futureState;\n    this.currState = currState;\n    this.forwardEvent = forwardEvent;\n    this.inputBindingEnabled = inputBindingEnabled;\n  }\n  activate(parentContexts) {\n    const futureRoot = this.futureState._root;\n    const currRoot = this.currState ? this.currState._root : null;\n    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n    advanceActivatedRoute(this.futureState.root);\n    this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n  }\n  // De-activate the child route that are not re-used for the future state\n  deactivateChildRoutes(futureNode, currNode, contexts) {\n    const children = nodeChildrenAsMap(currNode);\n    // Recurse on the routes active in the future state to de-activate deeper children\n    futureNode.children.forEach(futureChild => {\n      const childOutletName = futureChild.value.outlet;\n      this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n      delete children[childOutletName];\n    });\n    // De-activate the routes that will not be re-used\n    Object.values(children).forEach(v => {\n      this.deactivateRouteAndItsChildren(v, contexts);\n    });\n  }\n  deactivateRoutes(futureNode, currNode, parentContext) {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n    if (future === curr) {\n      // Reusing the node, check to see if the children need to be de-activated\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContext.getContext(future.outlet);\n        if (context) {\n          this.deactivateChildRoutes(futureNode, currNode, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.deactivateChildRoutes(futureNode, currNode, parentContext);\n      }\n    } else {\n      if (curr) {\n        // Deactivate the current route which will not be re-used\n        this.deactivateRouteAndItsChildren(currNode, parentContext);\n      }\n    }\n  }\n  deactivateRouteAndItsChildren(route, parentContexts) {\n    // If there is no component, the Route is never attached to an outlet (because there is no\n    // component to attach).\n    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n      this.detachAndStoreRouteSubtree(route, parentContexts);\n    } else {\n      this.deactivateRouteAndOutlet(route, parentContexts);\n    }\n  }\n  detachAndStoreRouteSubtree(route, parentContexts) {\n    const context = parentContexts.getContext(route.value.outlet);\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children = nodeChildrenAsMap(route);\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n    if (context && context.outlet) {\n      const componentRef = context.outlet.detach();\n      const contexts = context.children.onOutletDeactivated();\n      this.routeReuseStrategy.store(route.value.snapshot, {\n        componentRef,\n        route,\n        contexts\n      });\n    }\n  }\n  deactivateRouteAndOutlet(route, parentContexts) {\n    const context = parentContexts.getContext(route.value.outlet);\n    // The context could be `null` if we are on a componentless route but there may still be\n    // children that need deactivating.\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children = nodeChildrenAsMap(route);\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n    if (context) {\n      if (context.outlet) {\n        // Destroy the component\n        context.outlet.deactivate();\n        // Destroy the contexts for all the outlets that were in the component\n        context.children.onOutletDeactivated();\n      }\n      // Clear the information about the attached component on the context but keep the reference to\n      // the outlet. Clear even if outlet was not yet activated to avoid activating later with old\n      // info\n      context.attachRef = null;\n      context.route = null;\n    }\n  }\n  activateChildRoutes(futureNode, currNode, contexts) {\n    const children = nodeChildrenAsMap(currNode);\n    futureNode.children.forEach(c => {\n      this.activateRoutes(c, children[c.value.outlet], contexts);\n      this.forwardEvent(new ActivationEnd(c.value.snapshot));\n    });\n    if (futureNode.children.length) {\n      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n    }\n  }\n  activateRoutes(futureNode, currNode, parentContexts) {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n    advanceActivatedRoute(future);\n    // reusing the node\n    if (future === curr) {\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        this.activateChildRoutes(futureNode, currNode, context.children);\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, currNode, parentContexts);\n      }\n    } else {\n      if (future.component) {\n        // if we have a normal route, we need to place the component into the outlet and recurse.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n          const stored = this.routeReuseStrategy.retrieve(future.snapshot);\n          this.routeReuseStrategy.store(future.snapshot, null);\n          context.children.onOutletReAttached(stored.contexts);\n          context.attachRef = stored.componentRef;\n          context.route = stored.route.value;\n          if (context.outlet) {\n            // Attach right away when the outlet has already been instantiated\n            // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n            context.outlet.attach(stored.componentRef, stored.route.value);\n          }\n          advanceActivatedRoute(stored.route.value);\n          this.activateChildRoutes(futureNode, null, context.children);\n        } else {\n          context.attachRef = null;\n          context.route = future;\n          if (context.outlet) {\n            // Activate the outlet when it has already been instantiated\n            // Otherwise it will get activated from its `ngOnInit` when instantiated\n            context.outlet.activateWith(future, context.injector);\n          }\n          this.activateChildRoutes(futureNode, null, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, null, parentContexts);\n      }\n    }\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const context = parentContexts.getOrCreateContext(future.outlet);\n      const outlet = context.outlet;\n      if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs && !warnedAboutUnsupportedInputBinding) {\n        console.warn(`'withComponentInputBinding' feature is enabled but ` + `this application is using an outlet that may not support binding to component inputs.`);\n        warnedAboutUnsupportedInputBinding = true;\n      }\n    }\n  }\n}\nclass CanActivate {\n  path;\n  route;\n  constructor(path) {\n    this.path = path;\n    this.route = this.path[this.path.length - 1];\n  }\n}\nclass CanDeactivate {\n  component;\n  route;\n  constructor(component, route) {\n    this.component = component;\n    this.route = route;\n  }\n}\nfunction getAllRouteGuards(future, curr, parentContexts) {\n  const futureRoot = future._root;\n  const currRoot = curr ? curr._root : null;\n  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\nfunction getCanActivateChild(p) {\n  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n  if (!canActivateChild || canActivateChild.length === 0) return null;\n  return {\n    node: p,\n    guards: canActivateChild\n  };\n}\nfunction getTokenOrFunctionIdentity(tokenOrFunction, injector) {\n  const NOT_FOUND = Symbol();\n  const result = injector.get(tokenOrFunction, NOT_FOUND);\n  if (result === NOT_FOUND) {\n    if (typeof tokenOrFunction === 'function' && !ɵisInjectable(tokenOrFunction)) {\n      // We think the token is just a function so return it as-is\n      return tokenOrFunction;\n    } else {\n      // This will throw the not found error\n      return injector.get(tokenOrFunction);\n    }\n  }\n  return result;\n}\nfunction getChildRouteGuards(futureNode, currNode, contexts, futurePath, checks = {\n  canDeactivateChecks: [],\n  canActivateChecks: []\n}) {\n  const prevChildren = nodeChildrenAsMap(currNode);\n  // Process the children of the future route\n  futureNode.children.forEach(c => {\n    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n    delete prevChildren[c.value.outlet];\n  });\n  // Process any children left from the current route (not active for the future route)\n  Object.entries(prevChildren).forEach(([k, v]) => deactivateRouteAndItsChildren(v, contexts.getContext(k), checks));\n  return checks;\n}\nfunction getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks = {\n  canDeactivateChecks: [],\n  canActivateChecks: []\n}) {\n  const future = futureNode.value;\n  const curr = currNode ? currNode.value : null;\n  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n  // reusing the node\n  if (curr && future.routeConfig === curr.routeConfig) {\n    const shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);\n    if (shouldRun) {\n      checks.canActivateChecks.push(new CanActivate(futurePath));\n    } else {\n      // we need to set the data\n      future.data = curr.data;\n      future._resolvedData = curr._resolvedData;\n    }\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks);\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n    }\n    if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n    }\n  } else {\n    if (curr) {\n      deactivateRouteAndItsChildren(currNode, context, checks);\n    }\n    checks.canActivateChecks.push(new CanActivate(futurePath));\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n    }\n  }\n  return checks;\n}\nfunction shouldRunGuardsAndResolvers(curr, future, mode) {\n  if (typeof mode === 'function') {\n    return mode(curr, future);\n  }\n  switch (mode) {\n    case 'pathParamsChange':\n      return !equalPath(curr.url, future.url);\n    case 'pathParamsOrQueryParamsChange':\n      return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);\n    case 'always':\n      return true;\n    case 'paramsOrQueryParamsChange':\n      return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);\n    case 'paramsChange':\n    default:\n      return !equalParamsAndUrlSegments(curr, future);\n  }\n}\nfunction deactivateRouteAndItsChildren(route, context, checks) {\n  const children = nodeChildrenAsMap(route);\n  const r = route.value;\n  Object.entries(children).forEach(([childName, node]) => {\n    if (!r.component) {\n      deactivateRouteAndItsChildren(node, context, checks);\n    } else if (context) {\n      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n    } else {\n      deactivateRouteAndItsChildren(node, null, checks);\n    }\n  });\n  if (!r.component) {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  } else if (context && context.outlet && context.outlet.isActivated) {\n    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n  } else {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  }\n}\n\n/**\n * Simple function check, but generic so type inference will flow. Example:\n *\n * function product(a: number, b: number) {\n *   return a * b;\n * }\n *\n * if (isFunction<product>(fn)) {\n *   return fn(1, 2);\n * } else {\n *   throw \"Must provide the `product` function\";\n * }\n */\nfunction isFunction(v) {\n  return typeof v === 'function';\n}\nfunction isBoolean(v) {\n  return typeof v === 'boolean';\n}\nfunction isCanLoad(guard) {\n  return guard && isFunction(guard.canLoad);\n}\nfunction isCanActivate(guard) {\n  return guard && isFunction(guard.canActivate);\n}\nfunction isCanActivateChild(guard) {\n  return guard && isFunction(guard.canActivateChild);\n}\nfunction isCanDeactivate(guard) {\n  return guard && isFunction(guard.canDeactivate);\n}\nfunction isCanMatch(guard) {\n  return guard && isFunction(guard.canMatch);\n}\nfunction isEmptyError(e) {\n  return e instanceof EmptyError || e?.name === 'EmptyError';\n}\nconst INITIAL_VALUE = /* @__PURE__ */Symbol('INITIAL_VALUE');\nfunction prioritizedGuardValue() {\n  return switchMap(obs => {\n    return combineLatest(obs.map(o => o.pipe(take(1), startWith(INITIAL_VALUE)))).pipe(map(results => {\n      for (const result of results) {\n        if (result === true) {\n          // If result is true, check the next one\n          continue;\n        } else if (result === INITIAL_VALUE) {\n          // If guard has not finished, we need to stop processing.\n          return INITIAL_VALUE;\n        } else if (result === false || isRedirect(result)) {\n          // Result finished and was not true. Return the result.\n          // Note that we only allow false/UrlTree/RedirectCommand. Other values are considered invalid and\n          // ignored.\n          return result;\n        }\n      }\n      // Everything resolved to true. Return true.\n      return true;\n    }), filter(item => item !== INITIAL_VALUE), take(1));\n  });\n}\nfunction isRedirect(val) {\n  return isUrlTree(val) || val instanceof RedirectCommand;\n}\nfunction checkGuards(injector, forwardEvent) {\n  return mergeMap(t => {\n    const {\n      targetSnapshot,\n      currentSnapshot,\n      guards: {\n        canActivateChecks,\n        canDeactivateChecks\n      }\n    } = t;\n    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n      return of({\n        ...t,\n        guardsResult: true\n      });\n    }\n    return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, injector).pipe(mergeMap(canDeactivate => {\n      return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, injector, forwardEvent) : of(canDeactivate);\n    }), map(guardsResult => ({\n      ...t,\n      guardsResult\n    })));\n  });\n}\nfunction runCanDeactivateChecks(checks, futureRSS, currRSS, injector) {\n  return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)), first(result => {\n    return result !== true;\n  }, true));\n}\nfunction runCanActivateChecks(futureSnapshot, checks, injector, forwardEvent) {\n  return from(checks).pipe(concatMap(check => {\n    return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path, injector), runCanActivate(futureSnapshot, check.route, injector));\n  }), first(result => {\n    return result !== true;\n  }, true));\n}\n/**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireActivationStart(snapshot, forwardEvent) {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ActivationStart(snapshot));\n  }\n  return of(true);\n}\n/**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireChildActivationStart(snapshot, forwardEvent) {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ChildActivationStart(snapshot));\n  }\n  return of(true);\n}\nfunction runCanActivate(futureRSS, futureARS, injector) {\n  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n  if (!canActivate || canActivate.length === 0) return of(true);\n  const canActivateObservables = canActivate.map(canActivate => {\n    return defer(() => {\n      const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n      const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);\n      const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n      return wrapIntoObservable(guardVal).pipe(first());\n    });\n  });\n  return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanActivateChild(futureRSS, path, injector) {\n  const futureARS = path[path.length - 1];\n  const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(p => getCanActivateChild(p)).filter(_ => _ !== null);\n  const canActivateChildGuardsMapped = canActivateChildGuards.map(d => {\n    return defer(() => {\n      const guardsMapped = d.guards.map(canActivateChild => {\n        const closestInjector = getClosestRouteInjector(d.node) ?? injector;\n        const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);\n        const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));\n        return wrapIntoObservable(guardVal).pipe(first());\n      });\n      return of(guardsMapped).pipe(prioritizedGuardValue());\n    });\n  });\n  return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\nfunction runCanDeactivate(component, currARS, currRSS, futureRSS, injector) {\n  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n  if (!canDeactivate || canDeactivate.length === 0) return of(true);\n  const canDeactivateObservables = canDeactivate.map(c => {\n    const closestInjector = getClosestRouteInjector(currARS) ?? injector;\n    const guard = getTokenOrFunctionIdentity(c, closestInjector);\n    const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));\n    return wrapIntoObservable(guardVal).pipe(first());\n  });\n  return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\nfunction runCanLoadGuards(injector, route, segments, urlSerializer) {\n  const canLoad = route.canLoad;\n  if (canLoad === undefined || canLoad.length === 0) {\n    return of(true);\n  }\n  const canLoadObservables = canLoad.map(injectionToken => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanLoad(guard) ? guard.canLoad(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n  return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nfunction redirectIfUrlTree(urlSerializer) {\n  return pipe(tap(result => {\n    if (typeof result === 'boolean') return;\n    throw redirectingNavigationError(urlSerializer, result);\n  }), map(result => result === true));\n}\nfunction runCanMatchGuards(injector, route, segments, urlSerializer) {\n  const canMatch = route.canMatch;\n  if (!canMatch || canMatch.length === 0) return of(true);\n  const canMatchObservables = canMatch.map(injectionToken => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments) : runInInjectionContext(injector, () => guard(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n  return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\nclass NoMatch {\n  segmentGroup;\n  constructor(segmentGroup) {\n    this.segmentGroup = segmentGroup || null;\n  }\n}\nclass AbsoluteRedirect extends Error {\n  urlTree;\n  constructor(urlTree) {\n    super();\n    this.urlTree = urlTree;\n  }\n}\nfunction noMatch$1(segmentGroup) {\n  return throwError(new NoMatch(segmentGroup));\n}\nfunction absoluteRedirect(newTree) {\n  return throwError(new AbsoluteRedirect(newTree));\n}\nfunction namedOutletsRedirect(redirectTo) {\n  return throwError(new ɵRuntimeError(4000 /* RuntimeErrorCode.NAMED_OUTLET_REDIRECT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));\n}\nfunction canLoadFails(route) {\n  return throwError(navigationCancelingError((typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`, NavigationCancellationCode.GuardRejected));\n}\nclass ApplyRedirects {\n  urlSerializer;\n  urlTree;\n  constructor(urlSerializer, urlTree) {\n    this.urlSerializer = urlSerializer;\n    this.urlTree = urlTree;\n  }\n  lineralizeSegments(route, urlTree) {\n    let res = [];\n    let c = urlTree.root;\n    while (true) {\n      res = res.concat(c.segments);\n      if (c.numberOfChildren === 0) {\n        return of(res);\n      }\n      if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n        return namedOutletsRedirect(`${route.redirectTo}`);\n      }\n      c = c.children[PRIMARY_OUTLET];\n    }\n  }\n  applyRedirectCommands(segments, redirectTo, posParams, currentSnapshot, injector) {\n    if (typeof redirectTo !== 'string') {\n      const redirectToFn = redirectTo;\n      const {\n        queryParams,\n        fragment,\n        routeConfig,\n        url,\n        outlet,\n        params,\n        data,\n        title\n      } = currentSnapshot;\n      const newRedirect = runInInjectionContext(injector, () => redirectToFn({\n        params,\n        data,\n        queryParams,\n        fragment,\n        routeConfig,\n        url,\n        outlet,\n        title\n      }));\n      if (newRedirect instanceof UrlTree) {\n        throw new AbsoluteRedirect(newRedirect);\n      }\n      redirectTo = newRedirect;\n    }\n    const newTree = this.applyRedirectCreateUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n    if (redirectTo[0] === '/') {\n      throw new AbsoluteRedirect(newTree);\n    }\n    return newTree;\n  }\n  applyRedirectCreateUrlTree(redirectTo, urlTree, segments, posParams) {\n    const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n    return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n  }\n  createQueryParams(redirectToParams, actualParams) {\n    const res = {};\n    Object.entries(redirectToParams).forEach(([k, v]) => {\n      const copySourceValue = typeof v === 'string' && v[0] === ':';\n      if (copySourceValue) {\n        const sourceName = v.substring(1);\n        res[k] = actualParams[sourceName];\n      } else {\n        res[k] = v;\n      }\n    });\n    return res;\n  }\n  createSegmentGroup(redirectTo, group, segments, posParams) {\n    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n    let children = {};\n    Object.entries(group.children).forEach(([name, child]) => {\n      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n    });\n    return new UrlSegmentGroup(updatedSegments, children);\n  }\n  createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {\n    return redirectToSegments.map(s => s.path[0] === ':' ? this.findPosParam(redirectTo, s, posParams) : this.findOrReturn(s, actualSegments));\n  }\n  findPosParam(redirectTo, redirectToUrlSegment, posParams) {\n    const pos = posParams[redirectToUrlSegment.path.substring(1)];\n    if (!pos) throw new ɵRuntimeError(4001 /* RuntimeErrorCode.MISSING_REDIRECT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n    return pos;\n  }\n  findOrReturn(redirectToUrlSegment, actualSegments) {\n    let idx = 0;\n    for (const s of actualSegments) {\n      if (s.path === redirectToUrlSegment.path) {\n        actualSegments.splice(idx);\n        return s;\n      }\n      idx++;\n    }\n    return redirectToUrlSegment;\n  }\n}\nconst noMatch = {\n  matched: false,\n  consumedSegments: [],\n  remainingSegments: [],\n  parameters: {},\n  positionalParamSegments: {}\n};\nfunction matchWithChecks(segmentGroup, route, segments, injector, urlSerializer) {\n  const result = match(segmentGroup, route, segments);\n  if (!result.matched) {\n    return of(result);\n  }\n  // Only create the Route's `EnvironmentInjector` if it matches the attempted\n  // navigation\n  injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n  return runCanMatchGuards(injector, route, segments, urlSerializer).pipe(map(v => v === true ? result : {\n    ...noMatch\n  }));\n}\nfunction match(segmentGroup, route, segments) {\n  if (route.path === '**') {\n    return createWildcardMatchResult(segments);\n  }\n  if (route.path === '') {\n    if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n      return {\n        ...noMatch\n      };\n    }\n    return {\n      matched: true,\n      consumedSegments: [],\n      remainingSegments: segments,\n      parameters: {},\n      positionalParamSegments: {}\n    };\n  }\n  const matcher = route.matcher || defaultUrlMatcher;\n  const res = matcher(segments, segmentGroup, route);\n  if (!res) return {\n    ...noMatch\n  };\n  const posParams = {};\n  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n    posParams[k] = v.path;\n  });\n  const parameters = res.consumed.length > 0 ? {\n    ...posParams,\n    ...res.consumed[res.consumed.length - 1].parameters\n  } : posParams;\n  return {\n    matched: true,\n    consumedSegments: res.consumed,\n    remainingSegments: segments.slice(res.consumed.length),\n    // TODO(atscott): investigate combining parameters and positionalParamSegments\n    parameters,\n    positionalParamSegments: res.posParams ?? {}\n  };\n}\nfunction createWildcardMatchResult(segments) {\n  return {\n    matched: true,\n    parameters: segments.length > 0 ? last(segments).parameters : {},\n    consumedSegments: segments,\n    remainingSegments: [],\n    positionalParamSegments: {}\n  };\n}\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n  if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n    return {\n      segmentGroup: s,\n      slicedSegments: []\n    };\n  }\n  if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n    return {\n      segmentGroup: s,\n      slicedSegments\n    };\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n  return {\n    segmentGroup: s,\n    slicedSegments\n  };\n}\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n  const res = {};\n  for (const r of routes) {\n    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return {\n    ...children,\n    ...res\n  };\n}\nfunction createChildrenForEmptyPaths(routes, primarySegment) {\n  const res = {};\n  res[PRIMARY_OUTLET] = primarySegment;\n  for (const r of routes) {\n    if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return res;\n}\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n  return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n  return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n  if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n    return false;\n  }\n  return r.path === '';\n}\nfunction noLeftoversInUrl(segmentGroup, segments, outlet) {\n  return segments.length === 0 && !segmentGroup.children[outlet];\n}\n\n/**\n * Class used to indicate there were no additional route config matches but that all segments of\n * the URL were consumed during matching so the route was URL matched. When this happens, we still\n * try to match child configs in case there are empty path children.\n */\nclass NoLeftoversInUrl {}\nfunction recognize$1(injector, configLoader, rootComponentType, config, urlTree, urlSerializer, paramsInheritanceStrategy = 'emptyOnly') {\n  return new Recognizer(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer).recognize();\n}\nconst MAX_ALLOWED_REDIRECTS = 31;\nclass Recognizer {\n  injector;\n  configLoader;\n  rootComponentType;\n  config;\n  urlTree;\n  paramsInheritanceStrategy;\n  urlSerializer;\n  applyRedirects;\n  absoluteRedirectCount = 0;\n  allowRedirects = true;\n  constructor(injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy, urlSerializer) {\n    this.injector = injector;\n    this.configLoader = configLoader;\n    this.rootComponentType = rootComponentType;\n    this.config = config;\n    this.urlTree = urlTree;\n    this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n    this.urlSerializer = urlSerializer;\n    this.applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n  }\n  noMatchError(e) {\n    return new ɵRuntimeError(4002 /* RuntimeErrorCode.NO_MATCH */, typeof ngDevMode === 'undefined' || ngDevMode ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'` : `'${e.segmentGroup}'`);\n  }\n  recognize() {\n    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n    return this.match(rootSegmentGroup).pipe(map(({\n      children,\n      rootSnapshot\n    }) => {\n      const rootNode = new TreeNode(rootSnapshot, children);\n      const routeState = new RouterStateSnapshot('', rootNode);\n      const tree = createUrlTreeFromSnapshot(rootSnapshot, [], this.urlTree.queryParams, this.urlTree.fragment);\n      // https://github.com/angular/angular/issues/47307\n      // Creating the tree stringifies the query params\n      // We don't want to do this here so reassign them to the original.\n      tree.queryParams = this.urlTree.queryParams;\n      routeState.url = this.urlSerializer.serialize(tree);\n      return {\n        state: routeState,\n        tree\n      };\n    }));\n  }\n  match(rootSegmentGroup) {\n    // Use Object.freeze to prevent readers of the Router state from modifying it outside\n    // of a navigation, resulting in the router being out of sync with the browser.\n    const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({\n      ...this.urlTree.queryParams\n    }), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});\n    return this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot).pipe(map(children => {\n      return {\n        children,\n        rootSnapshot\n      };\n    }), catchError(e => {\n      if (e instanceof AbsoluteRedirect) {\n        this.urlTree = e.urlTree;\n        return this.match(e.urlTree.root);\n      }\n      if (e instanceof NoMatch) {\n        throw this.noMatchError(e);\n      }\n      throw e;\n    }));\n  }\n  processSegmentGroup(injector, config, segmentGroup, outlet, parentRoute) {\n    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n      return this.processChildren(injector, config, segmentGroup, parentRoute);\n    }\n    return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true, parentRoute).pipe(map(child => child instanceof TreeNode ? [child] : []));\n  }\n  /**\n   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if\n   * we cannot find a match for _any_ of the children.\n   *\n   * @param config - The `Routes` to match against\n   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the\n   *     config.\n   */\n  processChildren(injector, config, segmentGroup, parentRoute) {\n    // Expand outlets one at a time, starting with the primary outlet. We need to do it this way\n    // because an absolute redirect from the primary outlet takes precedence.\n    const childOutlets = [];\n    for (const child of Object.keys(segmentGroup.children)) {\n      if (child === 'primary') {\n        childOutlets.unshift(child);\n      } else {\n        childOutlets.push(child);\n      }\n    }\n    return from(childOutlets).pipe(concatMap(childOutlet => {\n      const child = segmentGroup.children[childOutlet];\n      // Sort the config so that routes with outlets that match the one being activated\n      // appear first, followed by routes for other outlets, which might match if they have\n      // an empty path.\n      const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n      return this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);\n    }), scan((children, outletChildren) => {\n      children.push(...outletChildren);\n      return children;\n    }), defaultIfEmpty(null), last$1(), mergeMap(children => {\n      if (children === null) return noMatch$1(segmentGroup);\n      // Because we may have matched two outlets to the same empty path segment, we can have\n      // multiple activated results for the same outlet. We should merge the children of\n      // these results so the final return value is only one `TreeNode` per outlet.\n      const mergedChildren = mergeEmptyPathMatches(children);\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        // This should really never happen - we are only taking the first match for each\n        // outlet and merge the empty path matches.\n        checkOutletNameUniqueness(mergedChildren);\n      }\n      sortActivatedRouteSnapshots(mergedChildren);\n      return of(mergedChildren);\n    }));\n  }\n  processSegment(injector, routes, segmentGroup, segments, outlet, allowRedirects, parentRoute) {\n    return from(routes).pipe(concatMap(r => {\n      return this.processSegmentAgainstRoute(r._injector ?? injector, routes, r, segmentGroup, segments, outlet, allowRedirects, parentRoute).pipe(catchError(e => {\n        if (e instanceof NoMatch) {\n          return of(null);\n        }\n        throw e;\n      }));\n    }), first(x => !!x), catchError(e => {\n      if (isEmptyError(e)) {\n        if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n          return of(new NoLeftoversInUrl());\n        }\n        return noMatch$1(segmentGroup);\n      }\n      throw e;\n    }));\n  }\n  processSegmentAgainstRoute(injector, routes, route, rawSegment, segments, outlet, allowRedirects, parentRoute) {\n    // We allow matches to empty paths when the outlets differ so we can match a url like `/(b:b)` to\n    // a config like\n    // * `{path: '', children: [{path: 'b', outlet: 'b'}]}`\n    // or even\n    // * `{path: '', outlet: 'a', children: [{path: 'b', outlet: 'b'}]`\n    //\n    // The exception here is when the segment outlet is for the primary outlet. This would\n    // result in a match inside the named outlet because all children there are written as primary\n    // outlets. So we need to prevent child named outlet matches in a url like `/b` in a config like\n    // * `{path: '', outlet: 'x' children: [{path: 'b'}]}`\n    // This should only match if the url is `/(x:b)`.\n    if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n      return noMatch$1(rawSegment);\n    }\n    if (route.redirectTo === undefined) {\n      return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute);\n    }\n    if (this.allowRedirects && allowRedirects) {\n      return this.expandSegmentAgainstRouteUsingRedirect(injector, rawSegment, routes, route, segments, outlet, parentRoute);\n    }\n    return noMatch$1(rawSegment);\n  }\n  expandSegmentAgainstRouteUsingRedirect(injector, segmentGroup, routes, route, segments, outlet, parentRoute) {\n    const {\n      matched,\n      parameters,\n      consumedSegments,\n      positionalParamSegments,\n      remainingSegments\n    } = match(segmentGroup, route, segments);\n    if (!matched) return noMatch$1(segmentGroup);\n    // TODO(atscott): Move all of this under an if(ngDevMode) as a breaking change and allow stack\n    // size exceeded in production\n    if (typeof route.redirectTo === 'string' && route.redirectTo[0] === '/') {\n      this.absoluteRedirectCount++;\n      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n        if (ngDevMode) {\n          throw new ɵRuntimeError(4016 /* RuntimeErrorCode.INFINITE_REDIRECT */, `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.\\n` + `This is currently a dev mode only error but will become a` + ` call stack size exceeded error in production in a future major version.`);\n        }\n        this.allowRedirects = false;\n      }\n    }\n    const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({\n      ...this.urlTree.queryParams\n    }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n    const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);\n    currentSnapshot.params = Object.freeze(inherited.params);\n    currentSnapshot.data = Object.freeze(inherited.data);\n    const newTree = this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, currentSnapshot, injector);\n    return this.applyRedirects.lineralizeSegments(route, newTree).pipe(mergeMap(newSegments => {\n      return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);\n    }));\n  }\n  matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {\n    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);\n    if (route.path === '**') {\n      // Prior versions of the route matching algorithm would stop matching at the wildcard route.\n      // We should investigate a better strategy for any existing children. Otherwise, these\n      // child segments are silently dropped from the navigation.\n      // https://github.com/angular/angular/issues/40089\n      rawSegment.children = {};\n    }\n    return matchResult.pipe(switchMap(result => {\n      if (!result.matched) {\n        return noMatch$1(rawSegment);\n      }\n      // If the route has an injector created from providers, we should start using that.\n      injector = route._injector ?? injector;\n      return this.getChildConfig(injector, route, segments).pipe(switchMap(({\n        routes: childConfig\n      }) => {\n        const childInjector = route._loadedInjector ?? injector;\n        const {\n          parameters,\n          consumedSegments,\n          remainingSegments\n        } = result;\n        const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({\n          ...this.urlTree.queryParams\n        }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n        const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);\n        snapshot.params = Object.freeze(inherited.params);\n        snapshot.data = Object.freeze(inherited.data);\n        const {\n          segmentGroup,\n          slicedSegments\n        } = split(rawSegment, consumedSegments, remainingSegments, childConfig);\n        if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n          return this.processChildren(childInjector, childConfig, segmentGroup, snapshot).pipe(map(children => {\n            return new TreeNode(snapshot, children);\n          }));\n        }\n        if (childConfig.length === 0 && slicedSegments.length === 0) {\n          return of(new TreeNode(snapshot, []));\n        }\n        const matchedOnOutlet = getOutlet(route) === outlet;\n        // If we matched a config due to empty path match on a different outlet, we need to\n        // continue passing the current outlet for the segment rather than switch to PRIMARY.\n        // Note that we switch to primary when we have a match because outlet configs look like\n        // this: {path: 'a', outlet: 'a', children: [\n        //  {path: 'b', component: B},\n        //  {path: 'c', component: C},\n        // ]}\n        // Notice that the children of the named outlet are configured with the primary outlet\n        return this.processSegment(childInjector, childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true, snapshot).pipe(map(child => {\n          return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n        }));\n      }));\n    }));\n  }\n  getChildConfig(injector, route, segments) {\n    if (route.children) {\n      // The children belong to the same module\n      return of({\n        routes: route.children,\n        injector\n      });\n    }\n    if (route.loadChildren) {\n      // lazy children belong to the loaded module\n      if (route._loadedRoutes !== undefined) {\n        return of({\n          routes: route._loadedRoutes,\n          injector: route._loadedInjector\n        });\n      }\n      return runCanLoadGuards(injector, route, segments, this.urlSerializer).pipe(mergeMap(shouldLoadResult => {\n        if (shouldLoadResult) {\n          return this.configLoader.loadChildren(injector, route).pipe(tap(cfg => {\n            route._loadedRoutes = cfg.routes;\n            route._loadedInjector = cfg.injector;\n          }));\n        }\n        return canLoadFails(route);\n      }));\n    }\n    return of({\n      routes: [],\n      injector\n    });\n  }\n}\nfunction sortActivatedRouteSnapshots(nodes) {\n  nodes.sort((a, b) => {\n    if (a.value.outlet === PRIMARY_OUTLET) return -1;\n    if (b.value.outlet === PRIMARY_OUTLET) return 1;\n    return a.value.outlet.localeCompare(b.value.outlet);\n  });\n}\nfunction hasEmptyPathConfig(node) {\n  const config = node.value.routeConfig;\n  return config && config.path === '';\n}\n/**\n * Finds `TreeNode`s with matching empty path route configs and merges them into `TreeNode` with\n * the children from each duplicate. This is necessary because different outlets can match a\n * single empty path route config and the results need to then be merged.\n */\nfunction mergeEmptyPathMatches(nodes) {\n  const result = [];\n  // The set of nodes which contain children that were merged from two duplicate empty path nodes.\n  const mergedNodes = new Set();\n  for (const node of nodes) {\n    if (!hasEmptyPathConfig(node)) {\n      result.push(node);\n      continue;\n    }\n    const duplicateEmptyPathNode = result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\n    if (duplicateEmptyPathNode !== undefined) {\n      duplicateEmptyPathNode.children.push(...node.children);\n      mergedNodes.add(duplicateEmptyPathNode);\n    } else {\n      result.push(node);\n    }\n  }\n  // For each node which has children from multiple sources, we need to recompute a new `TreeNode`\n  // by also merging those children. This is necessary when there are multiple empty path configs\n  // in a row. Put another way: whenever we combine children of two nodes, we need to also check\n  // if any of those children can be combined into a single node as well.\n  for (const mergedNode of mergedNodes) {\n    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n    result.push(new TreeNode(mergedNode.value, mergedChildren));\n  }\n  return result.filter(n => !mergedNodes.has(n));\n}\nfunction checkOutletNameUniqueness(nodes) {\n  const names = {};\n  nodes.forEach(n => {\n    const routeWithSameOutletName = names[n.value.outlet];\n    if (routeWithSameOutletName) {\n      const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n      const c = n.value.url.map(s => s.toString()).join('/');\n      throw new ɵRuntimeError(4006 /* RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n    }\n    names[n.value.outlet] = n.value;\n  });\n}\nfunction getData(route) {\n  return route.data || {};\n}\nfunction getResolve(route) {\n  return route.resolve || {};\n}\nfunction recognize(injector, configLoader, rootComponentType, config, serializer, paramsInheritanceStrategy) {\n  return mergeMap(t => recognize$1(injector, configLoader, rootComponentType, config, t.extractedUrl, serializer, paramsInheritanceStrategy).pipe(map(({\n    state: targetSnapshot,\n    tree: urlAfterRedirects\n  }) => {\n    return {\n      ...t,\n      targetSnapshot,\n      urlAfterRedirects\n    };\n  })));\n}\nfunction resolveData(paramsInheritanceStrategy, injector) {\n  return mergeMap(t => {\n    const {\n      targetSnapshot,\n      guards: {\n        canActivateChecks\n      }\n    } = t;\n    if (!canActivateChecks.length) {\n      return of(t);\n    }\n    // Iterating a Set in javascript  happens in insertion order so it is safe to use a `Set` to\n    // preserve the correct order that the resolvers should run in.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#description\n    const routesWithResolversToRun = new Set(canActivateChecks.map(check => check.route));\n    const routesNeedingDataUpdates = new Set();\n    for (const route of routesWithResolversToRun) {\n      if (routesNeedingDataUpdates.has(route)) {\n        continue;\n      }\n      // All children under the route with a resolver to run need to recompute inherited data.\n      for (const newRoute of flattenRouteTree(route)) {\n        routesNeedingDataUpdates.add(newRoute);\n      }\n    }\n    let routesProcessed = 0;\n    return from(routesNeedingDataUpdates).pipe(concatMap(route => {\n      if (routesWithResolversToRun.has(route)) {\n        return runResolve(route, targetSnapshot, paramsInheritanceStrategy, injector);\n      } else {\n        route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n        return of(void 0);\n      }\n    }), tap(() => routesProcessed++), takeLast(1), mergeMap(_ => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY));\n  });\n}\n/**\n *  Returns the `ActivatedRouteSnapshot` tree as an array, using DFS to traverse the route tree.\n */\nfunction flattenRouteTree(route) {\n  const descendants = route.children.map(child => flattenRouteTree(child)).flat();\n  return [route, ...descendants];\n}\nfunction runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {\n  const config = futureARS.routeConfig;\n  const resolve = futureARS._resolve;\n  if (config?.title !== undefined && !hasStaticTitle(config)) {\n    resolve[RouteTitleKey] = config.title;\n  }\n  return resolveNode(resolve, futureARS, futureRSS, injector).pipe(map(resolvedData => {\n    futureARS._resolvedData = resolvedData;\n    futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n    return null;\n  }));\n}\nfunction resolveNode(resolve, futureARS, futureRSS, injector) {\n  const keys = getDataKeys(resolve);\n  if (keys.length === 0) {\n    return of({});\n  }\n  const data = {};\n  return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS, injector).pipe(first(), tap(value => {\n    if (value instanceof RedirectCommand) {\n      throw redirectingNavigationError(new DefaultUrlSerializer(), value);\n    }\n    data[key] = value;\n  }))), takeLast(1), mapTo(data), catchError(e => isEmptyError(e) ? EMPTY : throwError(e)));\n}\nfunction getResolver(injectionToken, futureARS, futureRSS, injector) {\n  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n  const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n  return wrapIntoObservable(resolverValue);\n}\n\n/**\n * Perform a side effect through a switchMap for every emission on the source Observable,\n * but return an Observable that is identical to the source. It's essentially the same as\n * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,\n * it will wait before continuing with the original value.\n */\nfunction switchTap(next) {\n  return switchMap(v => {\n    const nextResult = next(v);\n    if (nextResult) {\n      return from(nextResult).pipe(map(() => v));\n    }\n    return of(v);\n  });\n}\n\n/**\n * Provides a strategy for setting the page title after a router navigation.\n *\n * The built-in implementation traverses the router state snapshot and finds the deepest primary\n * outlet with `title` property. Given the `Routes` below, navigating to\n * `/base/child(popup:aux)` would result in the document title being set to \"child\".\n * ```ts\n * [\n *   {path: 'base', title: 'base', children: [\n *     {path: 'child', title: 'child'},\n *   ],\n *   {path: 'aux', outlet: 'popup', title: 'popupTitle'}\n * ]\n * ```\n *\n * This class can be used as a base class for custom title strategies. That is, you can create your\n * own class that extends the `TitleStrategy`. Note that in the above example, the `title`\n * from the named outlet is never used. However, a custom strategy might be implemented to\n * incorporate titles in named outlets.\n *\n * @publicApi\n * @see [Page title guide](guide/routing/common-router-tasks#setting-the-page-title)\n */\nclass TitleStrategy {\n  /**\n   * @returns The `title` of the deepest primary route.\n   */\n  buildTitle(snapshot) {\n    let pageTitle;\n    let route = snapshot.root;\n    while (route !== undefined) {\n      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n      route = route.children.find(child => child.outlet === PRIMARY_OUTLET);\n    }\n    return pageTitle;\n  }\n  /**\n   * Given an `ActivatedRouteSnapshot`, returns the final value of the\n   * `Route.title` property, which can either be a static string or a resolved value.\n   */\n  getResolvedTitleForRoute(snapshot) {\n    return snapshot.data[RouteTitleKey];\n  }\n  static ɵfac = function TitleStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TitleStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: TitleStrategy,\n    factory: () => (() => inject(DefaultTitleStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TitleStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultTitleStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * The default `TitleStrategy` used by the router that updates the title using the `Title` service.\n */\nclass DefaultTitleStrategy extends TitleStrategy {\n  title;\n  constructor(title) {\n    super();\n    this.title = title;\n  }\n  /**\n   * Sets the title of the browser to the given value.\n   *\n   * @param title The `pageTitle` from the deepest primary route.\n   */\n  updateTitle(snapshot) {\n    const title = this.buildTitle(snapshot);\n    if (title !== undefined) {\n      this.title.setTitle(title);\n    }\n  }\n  static ɵfac = function DefaultTitleStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DefaultTitleStrategy)(i0.ɵɵinject(i1.Title));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultTitleStrategy,\n    factory: DefaultTitleStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultTitleStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i1.Title\n  }], null);\n})();\n\n/**\n * A DI token for the router service.\n *\n * @publicApi\n */\nconst ROUTER_CONFIGURATION = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router config' : '', {\n  providedIn: 'root',\n  factory: () => ({})\n});\n\n/**\n * This component is used internally within the router to be a placeholder when an empty\n * router-outlet is needed. For example, with a config such as:\n *\n * `{path: 'parent', outlet: 'nav', children: [...]}`\n *\n * In order to render, there needs to be a component on this config, which will default\n * to this `EmptyOutletComponent`.\n */\nclass ɵEmptyOutletComponent {\n  static ɵfac = function ɵEmptyOutletComponent_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ɵEmptyOutletComponent)();\n  };\n  static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n    type: ɵEmptyOutletComponent,\n    selectors: [[\"ng-component\"]],\n    decls: 1,\n    vars: 0,\n    template: function _EmptyOutletComponent_Template(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵelement(0, \"router-outlet\");\n      }\n    },\n    dependencies: [RouterOutlet],\n    encapsulation: 2\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ɵEmptyOutletComponent, [{\n    type: Component,\n    args: [{\n      template: `<router-outlet></router-outlet>`,\n      imports: [RouterOutlet]\n    }]\n  }], null, null);\n})();\n/**\n * Makes a copy of the config and adds any default required properties.\n */\nfunction standardizeConfig(r) {\n  const children = r.children && r.children.map(standardizeConfig);\n  const c = children ? {\n    ...r,\n    children\n  } : {\n    ...r\n  };\n  if (!c.component && !c.loadComponent && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {\n    c.component = ɵEmptyOutletComponent;\n  }\n  return c;\n}\n\n/**\n * The DI token for a router configuration.\n *\n * `ROUTES` is a low level API for router configuration via dependency injection.\n *\n * We recommend that in almost all cases to use higher level APIs such as `RouterModule.forRoot()`,\n * `provideRouter`, or `Router.resetConfig()`.\n *\n * @publicApi\n */\nconst ROUTES = new InjectionToken(ngDevMode ? 'ROUTES' : '');\nclass RouterConfigLoader {\n  componentLoaders = new WeakMap();\n  childrenLoaders = new WeakMap();\n  onLoadStartListener;\n  onLoadEndListener;\n  compiler = inject(Compiler);\n  loadComponent(route) {\n    if (this.componentLoaders.get(route)) {\n      return this.componentLoaders.get(route);\n    } else if (route._loadedComponent) {\n      return of(route._loadedComponent);\n    }\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const loadRunner = wrapIntoObservable(route.loadComponent()).pipe(map(maybeUnwrapDefaultExport), tap(component => {\n      if (this.onLoadEndListener) {\n        this.onLoadEndListener(route);\n      }\n      (typeof ngDevMode === 'undefined' || ngDevMode) && assertStandalone(route.path ?? '', component);\n      route._loadedComponent = component;\n    }), finalize(() => {\n      this.componentLoaders.delete(route);\n    }));\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());\n    this.componentLoaders.set(route, loader);\n    return loader;\n  }\n  loadChildren(parentInjector, route) {\n    if (this.childrenLoaders.get(route)) {\n      return this.childrenLoaders.get(route);\n    } else if (route._loadedRoutes) {\n      return of({\n        routes: route._loadedRoutes,\n        injector: route._loadedInjector\n      });\n    }\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const moduleFactoryOrRoutes$ = loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\n    const loadRunner = moduleFactoryOrRoutes$.pipe(finalize(() => {\n      this.childrenLoaders.delete(route);\n    }));\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject()).pipe(refCount());\n    this.childrenLoaders.set(route, loader);\n    return loader;\n  }\n  static ɵfac = function RouterConfigLoader_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterConfigLoader)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterConfigLoader,\n    factory: RouterConfigLoader.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterConfigLoader, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Executes a `route.loadChildren` callback and converts the result to an array of child routes and\n * an injector if that callback returned a module.\n *\n * This function is used for the route discovery during prerendering\n * in @angular-devkit/build-angular. If there are any updates to the contract here, it will require\n * an update to the extractor.\n */\nfunction loadChildren(route, compiler, parentInjector, onLoadEndListener) {\n  return wrapIntoObservable(route.loadChildren()).pipe(map(maybeUnwrapDefaultExport), mergeMap(t => {\n    if (t instanceof NgModuleFactory || Array.isArray(t)) {\n      return of(t);\n    } else {\n      return from(compiler.compileModuleAsync(t));\n    }\n  }), map(factoryOrRoutes => {\n    if (onLoadEndListener) {\n      onLoadEndListener(route);\n    }\n    // This injector comes from the `NgModuleRef` when lazy loading an `NgModule`. There is\n    // no injector associated with lazy loading a `Route` array.\n    let injector;\n    let rawRoutes;\n    let requireStandaloneComponents = false;\n    if (Array.isArray(factoryOrRoutes)) {\n      rawRoutes = factoryOrRoutes;\n      requireStandaloneComponents = true;\n    } else {\n      injector = factoryOrRoutes.create(parentInjector).injector;\n      // When loading a module that doesn't provide `RouterModule.forChild()` preloader\n      // will get stuck in an infinite loop. The child module's Injector will look to\n      // its parent `Injector` when it doesn't find any ROUTES so it will return routes\n      // for it's parent module instead.\n      rawRoutes = injector.get(ROUTES, [], {\n        optional: true,\n        self: true\n      }).flat();\n    }\n    const routes = rawRoutes.map(standardizeConfig);\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(routes, route.path, requireStandaloneComponents);\n    return {\n      routes,\n      injector\n    };\n  }));\n}\nfunction isWrappedDefaultExport(value) {\n  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be\n  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that\n  // `default` will be a renamed property.\n  return value && typeof value === 'object' && 'default' in value;\n}\nfunction maybeUnwrapDefaultExport(input) {\n  // As per `isWrappedDefaultExport`, the `default` key here is generated by the browser and not\n  // subject to property renaming, so we reference it with bracket access.\n  return isWrappedDefaultExport(input) ? input['default'] : input;\n}\n\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @publicApi\n */\nclass UrlHandlingStrategy {\n  static ɵfac = function UrlHandlingStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UrlHandlingStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: UrlHandlingStrategy,\n    factory: () => (() => inject(DefaultUrlHandlingStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UrlHandlingStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultUrlHandlingStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * @publicApi\n */\nclass DefaultUrlHandlingStrategy {\n  shouldProcessUrl(url) {\n    return true;\n  }\n  extract(url) {\n    return url;\n  }\n  merge(newUrlPart, wholeUrl) {\n    return newUrlPart;\n  }\n  static ɵfac = function DefaultUrlHandlingStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DefaultUrlHandlingStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultUrlHandlingStrategy,\n    factory: DefaultUrlHandlingStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultUrlHandlingStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n\n/// <reference types=\"dom-view-transitions\" />\nconst CREATE_VIEW_TRANSITION = new InjectionToken(ngDevMode ? 'view transition helper' : '');\nconst VIEW_TRANSITION_OPTIONS = new InjectionToken(ngDevMode ? 'view transition options' : '');\n/**\n * A helper function for using browser view transitions. This function skips the call to\n * `startViewTransition` if the browser does not support it.\n *\n * @returns A Promise that resolves when the view transition callback begins.\n */\nfunction createViewTransition(injector, from, to) {\n  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n  const document = injector.get(DOCUMENT);\n  // Create promises outside the Angular zone to avoid causing extra change detections\n  return injector.get(NgZone).runOutsideAngular(() => {\n    if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n      transitionOptions.skipNextTransition = false;\n      // The timing of `startViewTransition` is closer to a macrotask. It won't be called\n      // until the current event loop exits so we use a promise resolved in a timeout instead\n      // of Promise.resolve().\n      return new Promise(resolve => setTimeout(resolve));\n    }\n    let resolveViewTransitionStarted;\n    const viewTransitionStarted = new Promise(resolve => {\n      resolveViewTransitionStarted = resolve;\n    });\n    const transition = document.startViewTransition(() => {\n      resolveViewTransitionStarted();\n      // We don't actually update dom within the transition callback. The resolving of the above\n      // promise unblocks the Router navigation, which synchronously activates and deactivates\n      // routes (the DOM update). This view transition waits for the next change detection to\n      // complete (below), which includes the update phase of the routed components.\n      return createRenderPromise(injector);\n    });\n    const {\n      onViewTransitionCreated\n    } = transitionOptions;\n    if (onViewTransitionCreated) {\n      runInInjectionContext(injector, () => onViewTransitionCreated({\n        transition,\n        from,\n        to\n      }));\n    }\n    return viewTransitionStarted;\n  });\n}\n/**\n * Creates a promise that resolves after next render.\n */\nfunction createRenderPromise(injector) {\n  return new Promise(resolve => {\n    // Wait for the microtask queue to empty after the next render happens (by waiting a macrotask).\n    // This ensures any follow-up renders in the microtask queue are completed before the\n    // view transition starts animating.\n    afterNextRender({\n      read: () => setTimeout(resolve)\n    }, {\n      injector\n    });\n  });\n}\nconst NAVIGATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');\nclass NavigationTransitions {\n  currentNavigation = null;\n  currentTransition = null;\n  lastSuccessfulNavigation = null;\n  /**\n   * These events are used to communicate back to the Router about the state of the transition. The\n   * Router wants to respond to these events in various ways. Because the `NavigationTransition`\n   * class is not public, this event subject is not publicly exposed.\n   */\n  events = new Subject();\n  /**\n   * Used to abort the current transition with an error.\n   */\n  transitionAbortSubject = new Subject();\n  configLoader = inject(RouterConfigLoader);\n  environmentInjector = inject(EnvironmentInjector);\n  urlSerializer = inject(UrlSerializer);\n  rootContexts = inject(ChildrenOutletContexts);\n  location = inject(Location);\n  inputBindingEnabled = inject(INPUT_BINDER, {\n    optional: true\n  }) !== null;\n  titleStrategy = inject(TitleStrategy);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  paramsInheritanceStrategy = this.options.paramsInheritanceStrategy || 'emptyOnly';\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  createViewTransition = inject(CREATE_VIEW_TRANSITION, {\n    optional: true\n  });\n  navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {\n    optional: true\n  });\n  navigationId = 0;\n  get hasRequestedNavigation() {\n    return this.navigationId !== 0;\n  }\n  transitions;\n  /**\n   * Hook that enables you to pause navigation after the preactivation phase.\n   * Used by `RouterModule`.\n   *\n   * @internal\n   */\n  afterPreactivation = () => of(void 0);\n  /** @internal */\n  rootComponentType = null;\n  constructor() {\n    const onLoadStart = r => this.events.next(new RouteConfigLoadStart(r));\n    const onLoadEnd = r => this.events.next(new RouteConfigLoadEnd(r));\n    this.configLoader.onLoadEndListener = onLoadEnd;\n    this.configLoader.onLoadStartListener = onLoadStart;\n  }\n  complete() {\n    this.transitions?.complete();\n  }\n  handleNavigationRequest(request) {\n    const id = ++this.navigationId;\n    this.transitions?.next({\n      ...this.transitions.value,\n      ...request,\n      id\n    });\n  }\n  setupNavigations(router, initialUrlTree, initialRouterState) {\n    this.transitions = new BehaviorSubject({\n      id: 0,\n      currentUrlTree: initialUrlTree,\n      currentRawUrl: initialUrlTree,\n      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),\n      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),\n      rawUrl: initialUrlTree,\n      extras: {},\n      resolve: () => {},\n      reject: () => {},\n      promise: Promise.resolve(true),\n      source: IMPERATIVE_NAVIGATION,\n      restoredState: null,\n      currentSnapshot: initialRouterState.snapshot,\n      targetSnapshot: null,\n      currentRouterState: initialRouterState,\n      targetRouterState: null,\n      guards: {\n        canActivateChecks: [],\n        canDeactivateChecks: []\n      },\n      guardsResult: null\n    });\n    return this.transitions.pipe(filter(t => t.id !== 0),\n    // Extract URL\n    map(t => ({\n      ...t,\n      extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)\n    })),\n    // Using switchMap so we cancel executing navigations when a new one comes in\n    switchMap(overallTransitionState => {\n      let completed = false;\n      let errored = false;\n      return of(overallTransitionState).pipe(switchMap(t => {\n        // It is possible that `switchMap` fails to cancel previous navigations if a new one happens synchronously while the operator\n        // is processing the `next` notification of that previous navigation. This can happen when a new navigation (say 2) cancels a\n        // previous one (1) and yet another navigation (3) happens synchronously in response to the `NavigationCancel` event for (1).\n        // https://github.com/ReactiveX/rxjs/issues/7455\n        if (this.navigationId > overallTransitionState.id) {\n          const cancellationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n          this.cancelNavigationTransition(overallTransitionState, cancellationReason, NavigationCancellationCode.SupersededByNewNavigation);\n          return EMPTY;\n        }\n        this.currentTransition = overallTransitionState;\n        // Store the Navigation object\n        this.currentNavigation = {\n          id: t.id,\n          initialUrl: t.rawUrl,\n          extractedUrl: t.extractedUrl,\n          targetBrowserUrl: typeof t.extras.browserUrl === 'string' ? this.urlSerializer.parse(t.extras.browserUrl) : t.extras.browserUrl,\n          trigger: t.source,\n          extras: t.extras,\n          previousNavigation: !this.lastSuccessfulNavigation ? null : {\n            ...this.lastSuccessfulNavigation,\n            previousNavigation: null\n          }\n        };\n        const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n        const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n        if (!urlTransition && onSameUrlNavigation !== 'reload') {\n          const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.` : '';\n          this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.rawUrl), reason, NavigationSkippedCode.IgnoredSameUrlNavigation));\n          t.resolve(false);\n          return EMPTY;\n        }\n        if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n          return of(t).pipe(\n          // Fire NavigationStart event\n          switchMap(t => {\n            const transition = this.transitions?.getValue();\n            this.events.next(new NavigationStart(t.id, this.urlSerializer.serialize(t.extractedUrl), t.source, t.restoredState));\n            if (transition !== this.transitions?.getValue()) {\n              return EMPTY;\n            }\n            // This delay is required to match old behavior that forced\n            // navigation to always be async\n            return Promise.resolve(t);\n          }),\n          // Recognize\n          recognize(this.environmentInjector, this.configLoader, this.rootComponentType, router.config, this.urlSerializer, this.paramsInheritanceStrategy),\n          // Update URL if in `eager` update mode\n          tap(t => {\n            overallTransitionState.targetSnapshot = t.targetSnapshot;\n            overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n            this.currentNavigation = {\n              ...this.currentNavigation,\n              finalUrl: t.urlAfterRedirects\n            };\n            // Fire RoutesRecognized\n            const routesRecognized = new RoutesRecognized(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(routesRecognized);\n          }));\n        } else if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\n          /* When the current URL shouldn't be processed, but the previous one\n           * was, we handle this \"error condition\" by navigating to the\n           * previously successful URL, but leaving the URL intact.*/\n          const {\n            id,\n            extractedUrl,\n            source,\n            restoredState,\n            extras\n          } = t;\n          const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);\n          this.events.next(navStart);\n          const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;\n          this.currentTransition = overallTransitionState = {\n            ...t,\n            targetSnapshot,\n            urlAfterRedirects: extractedUrl,\n            extras: {\n              ...extras,\n              skipLocationChange: false,\n              replaceUrl: false\n            }\n          };\n          this.currentNavigation.finalUrl = extractedUrl;\n          return of(overallTransitionState);\n        } else {\n          /* When neither the current or previous URL can be processed, do\n           * nothing other than update router's internal reference to the\n           * current \"settled\" URL. This way the next navigation will be coming\n           * from the current URL in the browser.\n           */\n          const reason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation was ignored because the UrlHandlingStrategy` + ` indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.` : '';\n          this.events.next(new NavigationSkipped(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n          t.resolve(false);\n          return EMPTY;\n        }\n      }),\n      // --- GUARDS ---\n      tap(t => {\n        const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n        this.events.next(guardsStart);\n      }), map(t => {\n        this.currentTransition = overallTransitionState = {\n          ...t,\n          guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)\n        };\n        return overallTransitionState;\n      }), checkGuards(this.environmentInjector, evt => this.events.next(evt)), tap(t => {\n        overallTransitionState.guardsResult = t.guardsResult;\n        if (t.guardsResult && typeof t.guardsResult !== 'boolean') {\n          throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n        }\n        const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);\n        this.events.next(guardsEnd);\n      }), filter(t => {\n        if (!t.guardsResult) {\n          this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);\n          return false;\n        }\n        return true;\n      }),\n      // --- RESOLVE ---\n      switchTap(t => {\n        if (t.guards.canActivateChecks.length) {\n          return of(t).pipe(tap(t => {\n            const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(resolveStart);\n          }), switchMap(t => {\n            let dataResolved = false;\n            return of(t).pipe(resolveData(this.paramsInheritanceStrategy, this.environmentInjector), tap({\n              next: () => dataResolved = true,\n              complete: () => {\n                if (!dataResolved) {\n                  this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);\n                }\n              }\n            }));\n          }), tap(t => {\n            const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);\n            this.events.next(resolveEnd);\n          }));\n        }\n        return undefined;\n      }),\n      // --- LOAD COMPONENTS ---\n      switchTap(t => {\n        const loadComponents = route => {\n          const loaders = [];\n          if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) {\n            loaders.push(this.configLoader.loadComponent(route.routeConfig).pipe(tap(loadedComponent => {\n              route.component = loadedComponent;\n            }), map(() => void 0)));\n          }\n          for (const child of route.children) {\n            loaders.push(...loadComponents(child));\n          }\n          return loaders;\n        };\n        return combineLatest(loadComponents(t.targetSnapshot.root)).pipe(defaultIfEmpty(null), take(1));\n      }), switchTap(() => this.afterPreactivation()), switchMap(() => {\n        const {\n          currentSnapshot,\n          targetSnapshot\n        } = overallTransitionState;\n        const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);\n        // If view transitions are enabled, block the navigation until the view\n        // transition callback starts. Otherwise, continue immediately.\n        return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);\n      }), map(t => {\n        const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);\n        this.currentTransition = overallTransitionState = {\n          ...t,\n          targetRouterState\n        };\n        this.currentNavigation.targetRouterState = targetRouterState;\n        return overallTransitionState;\n      }), tap(() => {\n        this.events.next(new BeforeActivateRoutes());\n      }), activateRoutes(this.rootContexts, router.routeReuseStrategy, evt => this.events.next(evt), this.inputBindingEnabled),\n      // Ensure that if some observable used to drive the transition doesn't\n      // complete, the navigation still finalizes This should never happen, but\n      // this is done as a safety measure to avoid surfacing this error (#49567).\n      take(1), tap({\n        next: t => {\n          completed = true;\n          this.lastSuccessfulNavigation = this.currentNavigation;\n          this.events.next(new NavigationEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects)));\n          this.titleStrategy?.updateTitle(t.targetRouterState.snapshot);\n          t.resolve(true);\n        },\n        complete: () => {\n          completed = true;\n        }\n      }),\n      // There used to be a lot more logic happening directly within the\n      // transition Observable. Some of this logic has been refactored out to\n      // other places but there may still be errors that happen there. This gives\n      // us a way to cancel the transition from the outside. This may also be\n      // required in the future to support something like the abort signal of the\n      // Navigation API where the navigation gets aborted from outside the\n      // transition.\n      takeUntil(this.transitionAbortSubject.pipe(tap(err => {\n        throw err;\n      }))), finalize(() => {\n        /* When the navigation stream finishes either through error or success,\n         * we set the `completed` or `errored` flag. However, there are some\n         * situations where we could get here without either of those being set.\n         * For instance, a redirect during NavigationStart. Therefore, this is a\n         * catch-all to make sure the NavigationCancel event is fired when a\n         * navigation gets cancelled but not caught by other means. */\n        if (!completed && !errored) {\n          const cancelationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';\n          this.cancelNavigationTransition(overallTransitionState, cancelationReason, NavigationCancellationCode.SupersededByNewNavigation);\n        }\n        // Only clear current navigation if it is still set to the one that\n        // finalized.\n        if (this.currentTransition?.id === overallTransitionState.id) {\n          this.currentNavigation = null;\n          this.currentTransition = null;\n        }\n      }), catchError(e => {\n        errored = true;\n        /* This error type is issued during Redirect, and is handled as a\n         * cancellation rather than an error. */\n        if (isNavigationCancelingError(e)) {\n          this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e.message, e.cancellationCode));\n          // When redirecting, we need to delay resolving the navigation\n          // promise and push it to the redirect navigation\n          if (!isRedirectingNavigationCancelingError(e)) {\n            overallTransitionState.resolve(false);\n          } else {\n            this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));\n          }\n          /* All other errors should reset to the router's internal URL reference\n           * to the pre-error state. */\n        } else {\n          const navigationError = new NavigationError(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), e, overallTransitionState.targetSnapshot ?? undefined);\n          try {\n            const navigationErrorHandlerResult = runInInjectionContext(this.environmentInjector, () => this.navigationErrorHandler?.(navigationError));\n            if (navigationErrorHandlerResult instanceof RedirectCommand) {\n              const {\n                message,\n                cancellationCode\n              } = redirectingNavigationError(this.urlSerializer, navigationErrorHandlerResult);\n              this.events.next(new NavigationCancel(overallTransitionState.id, this.urlSerializer.serialize(overallTransitionState.extractedUrl), message, cancellationCode));\n              this.events.next(new RedirectRequest(navigationErrorHandlerResult.redirectTo, navigationErrorHandlerResult.navigationBehaviorOptions));\n            } else {\n              this.events.next(navigationError);\n              throw e;\n            }\n          } catch (ee) {\n            // TODO(atscott): consider flipping the default behavior of\n            // resolveNavigationPromiseOnError to be `resolve(false)` when\n            // undefined. This is the most sane thing to do given that\n            // applications very rarely handle the promise rejection and, as a\n            // result, would get \"unhandled promise rejection\" console logs.\n            // The vast majority of applications would not be affected by this\n            // change so omitting a migration seems reasonable. Instead,\n            // applications that rely on rejection can specifically opt-in to the\n            // old behavior.\n            if (this.options.resolveNavigationPromiseOnError) {\n              overallTransitionState.resolve(false);\n            } else {\n              overallTransitionState.reject(ee);\n            }\n          }\n        }\n        return EMPTY;\n      }));\n      // casting because `pipe` returns observable({}) when called with 8+ arguments\n    }));\n  }\n  cancelNavigationTransition(t, reason, code) {\n    const navCancel = new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\n    this.events.next(navCancel);\n    t.resolve(false);\n  }\n  /**\n   * @returns Whether we're navigating to somewhere that is not what the Router is\n   * currently set to.\n   */\n  isUpdatingInternalState() {\n    // TODO(atscott): The serializer should likely be used instead of\n    // `UrlTree.toString()`. Custom serializers are often written to handle\n    // things better than the default one (objects, for example will be\n    // [Object object] with the custom serializer and be \"the same\" when they\n    // aren't).\n    // (Same for isUpdatedBrowserUrl)\n    return this.currentTransition?.extractedUrl.toString() !== this.currentTransition?.currentUrlTree.toString();\n  }\n  /**\n   * @returns Whether we're updating the browser URL to something new (navigation is going\n   * to somewhere not displayed in the URL bar and we will update the URL\n   * bar if navigation succeeds).\n   */\n  isUpdatedBrowserUrl() {\n    // The extracted URL is the part of the URL that this application cares about. `extract` may\n    // return only part of the browser URL and that part may have not changed even if some other\n    // portion of the URL did.\n    const currentBrowserUrl = this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n    const targetBrowserUrl = this.currentNavigation?.targetBrowserUrl ?? this.currentNavigation?.extractedUrl;\n    return currentBrowserUrl.toString() !== targetBrowserUrl?.toString() && !this.currentNavigation?.extras.skipLocationChange;\n  }\n  static ɵfac = function NavigationTransitions_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NavigationTransitions)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NavigationTransitions,\n    factory: NavigationTransitions.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NavigationTransitions, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction isBrowserTriggeredNavigation(source) {\n  return source !== IMPERATIVE_NAVIGATION;\n}\n\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @publicApi\n */\nclass RouteReuseStrategy {\n  static ɵfac = function RouteReuseStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouteReuseStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouteReuseStrategy,\n    factory: () => (() => inject(DefaultRouteReuseStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouteReuseStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(DefaultRouteReuseStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * This base route reuse strategy only reuses routes when the matched router configs are\n * identical. This prevents components from being destroyed and recreated\n * when just the route parameters, query parameters or fragment change\n * (that is, the existing component is _reused_).\n *\n * This strategy does not store any routes for later reuse.\n *\n * Angular uses this strategy by default.\n *\n *\n * It can be used as a base class for custom route reuse strategies, i.e. you can create your own\n * class that extends the `BaseRouteReuseStrategy` one.\n * @publicApi\n */\nclass BaseRouteReuseStrategy {\n  /**\n   * Whether the given route should detach for later reuse.\n   * Always returns false for `BaseRouteReuseStrategy`.\n   * */\n  shouldDetach(route) {\n    return false;\n  }\n  /**\n   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.\n   */\n  store(route, detachedTree) {}\n  /** Returns `false`, meaning the route (and its subtree) is never reattached */\n  shouldAttach(route) {\n    return false;\n  }\n  /** Returns `null` because this strategy does not store routes for later re-use. */\n  retrieve(route) {\n    return null;\n  }\n  /**\n   * Determines if a route should be reused.\n   * This strategy returns `true` when the future route config and current route config are\n   * identical.\n   */\n  shouldReuseRoute(future, curr) {\n    return future.routeConfig === curr.routeConfig;\n  }\n}\nclass DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {\n  static ɵfac = /* @__PURE__ */(() => {\n    let ɵDefaultRouteReuseStrategy_BaseFactory;\n    return function DefaultRouteReuseStrategy_Factory(__ngFactoryType__) {\n      return (ɵDefaultRouteReuseStrategy_BaseFactory || (ɵDefaultRouteReuseStrategy_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultRouteReuseStrategy)))(__ngFactoryType__ || DefaultRouteReuseStrategy);\n    };\n  })();\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DefaultRouteReuseStrategy,\n    factory: DefaultRouteReuseStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DefaultRouteReuseStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nclass StateManager {\n  static ɵfac = function StateManager_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || StateManager)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: StateManager,\n    factory: () => (() => inject(HistoryStateManager))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StateManager, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(HistoryStateManager)\n    }]\n  }], null, null);\n})();\nclass HistoryStateManager extends StateManager {\n  location = inject(Location);\n  urlSerializer = inject(UrlSerializer);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  canceledNavigationResolution = this.options.canceledNavigationResolution || 'replace';\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  currentUrlTree = new UrlTree();\n  getCurrentUrlTree() {\n    return this.currentUrlTree;\n  }\n  rawUrlTree = this.currentUrlTree;\n  getRawUrlTree() {\n    return this.rawUrlTree;\n  }\n  /**\n   * The id of the currently active page in the router.\n   * Updated to the transition's target id on a successful navigation.\n   *\n   * This is used to track what page the router last activated. When an attempted navigation fails,\n   * the router can then use this to compute how to restore the state back to the previously active\n   * page.\n   */\n  currentPageId = 0;\n  lastSuccessfulId = -1;\n  restoredState() {\n    return this.location.getState();\n  }\n  /**\n   * The ɵrouterPageId of whatever page is currently active in the browser history. This is\n   * important for computing the target page id for new navigations because we need to ensure each\n   * page id in the browser history is 1 more than the previous entry.\n   */\n  get browserPageId() {\n    if (this.canceledNavigationResolution !== 'computed') {\n      return this.currentPageId;\n    }\n    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;\n  }\n  routerState = createEmptyState(null);\n  getRouterState() {\n    return this.routerState;\n  }\n  stateMemento = this.createStateMemento();\n  createStateMemento() {\n    return {\n      rawUrlTree: this.rawUrlTree,\n      currentUrlTree: this.currentUrlTree,\n      routerState: this.routerState\n    };\n  }\n  registerNonRouterCurrentEntryChangeListener(listener) {\n    return this.location.subscribe(event => {\n      if (event['type'] === 'popstate') {\n        listener(event['url'], event.state);\n      }\n    });\n  }\n  handleRouterEvent(e, currentTransition) {\n    if (e instanceof NavigationStart) {\n      this.stateMemento = this.createStateMemento();\n    } else if (e instanceof NavigationSkipped) {\n      this.rawUrlTree = currentTransition.initialUrl;\n    } else if (e instanceof RoutesRecognized) {\n      if (this.urlUpdateStrategy === 'eager') {\n        if (!currentTransition.extras.skipLocationChange) {\n          const rawUrl = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);\n          this.setBrowserUrl(currentTransition.targetBrowserUrl ?? rawUrl, currentTransition);\n        }\n      }\n    } else if (e instanceof BeforeActivateRoutes) {\n      this.currentUrlTree = currentTransition.finalUrl;\n      this.rawUrlTree = this.urlHandlingStrategy.merge(currentTransition.finalUrl, currentTransition.initialUrl);\n      this.routerState = currentTransition.targetRouterState;\n      if (this.urlUpdateStrategy === 'deferred' && !currentTransition.extras.skipLocationChange) {\n        this.setBrowserUrl(currentTransition.targetBrowserUrl ?? this.rawUrlTree, currentTransition);\n      }\n    } else if (e instanceof NavigationCancel && (e.code === NavigationCancellationCode.GuardRejected || e.code === NavigationCancellationCode.NoDataFromResolver)) {\n      this.restoreHistory(currentTransition);\n    } else if (e instanceof NavigationError) {\n      this.restoreHistory(currentTransition, true);\n    } else if (e instanceof NavigationEnd) {\n      this.lastSuccessfulId = e.id;\n      this.currentPageId = this.browserPageId;\n    }\n  }\n  setBrowserUrl(url, transition) {\n    const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;\n    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {\n      // replacements do not update the target page\n      const currentBrowserPageId = this.browserPageId;\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, currentBrowserPageId)\n      };\n      this.location.replaceState(path, '', state);\n    } else {\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, this.browserPageId + 1)\n      };\n      this.location.go(path, '', state);\n    }\n  }\n  /**\n   * Performs the necessary rollback action to restore the browser URL to the\n   * state before the transition.\n   */\n  restoreHistory(navigation, restoringFromCaughtError = false) {\n    if (this.canceledNavigationResolution === 'computed') {\n      const currentBrowserPageId = this.browserPageId;\n      const targetPagePosition = this.currentPageId - currentBrowserPageId;\n      if (targetPagePosition !== 0) {\n        this.location.historyGo(targetPagePosition);\n      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {\n        // We got to the activation stage (where currentUrlTree is set to the navigation's\n        // finalUrl), but we weren't moving anywhere in history (skipLocationChange or replaceUrl).\n        // We still need to reset the router state back to what it was when the navigation started.\n        this.resetState(navigation);\n        this.resetUrlToCurrentUrlTree();\n      } else {\n        // The browser URL and router state was not updated before the navigation cancelled so\n        // there's no restoration needed.\n      }\n    } else if (this.canceledNavigationResolution === 'replace') {\n      // TODO(atscott): It seems like we should _always_ reset the state here. It would be a no-op\n      // for `deferred` navigations that haven't change the internal state yet because guards\n      // reject. For 'eager' navigations, it seems like we also really should reset the state\n      // because the navigation was cancelled. Investigate if this can be done by running TGP.\n      if (restoringFromCaughtError) {\n        this.resetState(navigation);\n      }\n      this.resetUrlToCurrentUrlTree();\n    }\n  }\n  resetState(navigation) {\n    this.routerState = this.stateMemento.routerState;\n    this.currentUrlTree = this.stateMemento.currentUrlTree;\n    // Note here that we use the urlHandlingStrategy to get the reset `rawUrlTree` because it may be\n    // configured to handle only part of the navigation URL. This means we would only want to reset\n    // the part of the navigation handled by the Angular router rather than the whole URL. In\n    // addition, the URLHandlingStrategy may be configured to specifically preserve parts of the URL\n    // when merging, such as the query params so they are not lost on a refresh.\n    this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);\n  }\n  resetUrlToCurrentUrlTree() {\n    this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\n  }\n  generateNgRouterState(navigationId, routerPageId) {\n    if (this.canceledNavigationResolution === 'computed') {\n      return {\n        navigationId,\n        ɵrouterPageId: routerPageId\n      };\n    }\n    return {\n      navigationId\n    };\n  }\n  static ɵfac = /* @__PURE__ */(() => {\n    let ɵHistoryStateManager_BaseFactory;\n    return function HistoryStateManager_Factory(__ngFactoryType__) {\n      return (ɵHistoryStateManager_BaseFactory || (ɵHistoryStateManager_BaseFactory = i0.ɵɵgetInheritedFactory(HistoryStateManager)))(__ngFactoryType__ || HistoryStateManager);\n    };\n  })();\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HistoryStateManager,\n    factory: HistoryStateManager.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HistoryStateManager, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nvar NavigationResult;\n(function (NavigationResult) {\n  NavigationResult[NavigationResult[\"COMPLETE\"] = 0] = \"COMPLETE\";\n  NavigationResult[NavigationResult[\"FAILED\"] = 1] = \"FAILED\";\n  NavigationResult[NavigationResult[\"REDIRECTING\"] = 2] = \"REDIRECTING\";\n})(NavigationResult || (NavigationResult = {}));\n/**\n * Performs the given action once the router finishes its next/current navigation.\n *\n * The navigation is considered complete under the following conditions:\n * - `NavigationCancel` event emits and the code is not `NavigationCancellationCode.Redirect` or\n * `NavigationCancellationCode.SupersededByNewNavigation`. In these cases, the\n * redirecting/superseding navigation must finish.\n * - `NavigationError`, `NavigationEnd`, or `NavigationSkipped` event emits\n */\nfunction afterNextNavigation(router, action) {\n  router.events.pipe(filter(e => e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped), map(e => {\n    if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n      return NavigationResult.COMPLETE;\n    }\n    const redirecting = e instanceof NavigationCancel ? e.code === NavigationCancellationCode.Redirect || e.code === NavigationCancellationCode.SupersededByNewNavigation : false;\n    return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;\n  }), filter(result => result !== NavigationResult.REDIRECTING), take(1)).subscribe(() => {\n    action();\n  });\n}\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `true`\n * (exact = true).\n */\nconst exactMatchOptions = {\n  paths: 'exact',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'exact'\n};\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `false`\n * (exact = false).\n */\nconst subsetMatchOptions = {\n  paths: 'subset',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'subset'\n};\n/**\n * @description\n *\n * A service that facilitates navigation among views and URL manipulation capabilities.\n * This service is provided in the root scope and configured with [provideRouter](api/router/provideRouter).\n *\n * @see {@link Route}\n * @see {@link provideRouter}\n * @see [Routing and Navigation Guide](guide/routing/common-router-tasks).\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass Router {\n  get currentUrlTree() {\n    return this.stateManager.getCurrentUrlTree();\n  }\n  get rawUrlTree() {\n    return this.stateManager.getRawUrlTree();\n  }\n  disposed = false;\n  nonRouterCurrentEntryChangeSubscription;\n  console = inject(ɵConsole);\n  stateManager = inject(StateManager);\n  options = inject(ROUTER_CONFIGURATION, {\n    optional: true\n  }) || {};\n  pendingTasks = inject(ɵPendingTasksInternal);\n  urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  navigationTransitions = inject(NavigationTransitions);\n  urlSerializer = inject(UrlSerializer);\n  location = inject(Location);\n  urlHandlingStrategy = inject(UrlHandlingStrategy);\n  /**\n   * The private `Subject` type for the public events exposed in the getter. This is used internally\n   * to push events to. The separate field allows us to expose separate types in the public API\n   * (i.e., an Observable rather than the Subject).\n   */\n  _events = new Subject();\n  /**\n   * An event stream for routing events.\n   */\n  get events() {\n    // TODO(atscott): This _should_ be events.asObservable(). However, this change requires internal\n    // cleanup: tests are doing `(route.events as Subject<Event>).next(...)`. This isn't\n    // allowed/supported but we still have to fix these or file bugs against the teams before making\n    // the change.\n    return this._events;\n  }\n  /**\n   * The current state of routing in this NgModule.\n   */\n  get routerState() {\n    return this.stateManager.getRouterState();\n  }\n  /**\n   * True if at least one navigation event has occurred,\n   * false otherwise.\n   */\n  navigated = false;\n  /**\n   * A strategy for re-using routes.\n   *\n   * @deprecated Configure using `providers` instead:\n   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.\n   */\n  routeReuseStrategy = inject(RouteReuseStrategy);\n  /**\n   * How to handle a navigation request to the current URL.\n   *\n   *\n   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.\n   * @see {@link withRouterConfig}\n   * @see {@link provideRouter}\n   * @see {@link RouterModule}\n   */\n  onSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n  config = inject(ROUTES, {\n    optional: true\n  })?.flat() ?? [];\n  /**\n   * Indicates whether the application has opted in to binding Router data to component inputs.\n   *\n   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or\n   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.\n   */\n  componentInputBindingEnabled = !!inject(INPUT_BINDER, {\n    optional: true\n  });\n  constructor() {\n    this.resetConfig(this.config);\n    this.navigationTransitions.setupNavigations(this, this.currentUrlTree, this.routerState).subscribe({\n      error: e => {\n        this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);\n      }\n    });\n    this.subscribeToNavigationEvents();\n  }\n  eventsSubscription = new Subscription();\n  subscribeToNavigationEvents() {\n    const subscription = this.navigationTransitions.events.subscribe(e => {\n      try {\n        const currentTransition = this.navigationTransitions.currentTransition;\n        const currentNavigation = this.navigationTransitions.currentNavigation;\n        if (currentTransition !== null && currentNavigation !== null) {\n          this.stateManager.handleRouterEvent(e, currentNavigation);\n          if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect && e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\n            // It seems weird that `navigated` is set to `true` when the navigation is rejected,\n            // however it's how things were written initially. Investigation would need to be done\n            // to determine if this can be removed.\n            this.navigated = true;\n          } else if (e instanceof NavigationEnd) {\n            this.navigated = true;\n          } else if (e instanceof RedirectRequest) {\n            const opts = e.navigationBehaviorOptions;\n            const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n            const extras = {\n              browserUrl: currentTransition.extras.browserUrl,\n              info: currentTransition.extras.info,\n              skipLocationChange: currentTransition.extras.skipLocationChange,\n              // The URL is already updated at this point if we have 'eager' URL\n              // updates or if the navigation was triggered by the browser (back\n              // button, URL bar, etc). We want to replace that item in history\n              // if the navigation is rejected.\n              replaceUrl: currentTransition.extras.replaceUrl || this.urlUpdateStrategy === 'eager' || isBrowserTriggeredNavigation(currentTransition.source),\n              // allow developer to override default options with RedirectCommand\n              ...opts\n            };\n            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n              resolve: currentTransition.resolve,\n              reject: currentTransition.reject,\n              promise: currentTransition.promise\n            });\n          }\n        }\n        // Note that it's important to have the Router process the events _before_ the event is\n        // pushed through the public observable. This ensures the correct router state is in place\n        // before applications observe the events.\n        if (isPublicRouterEvent(e)) {\n          this._events.next(e);\n        }\n      } catch (e) {\n        this.navigationTransitions.transitionAbortSubject.next(e);\n      }\n    });\n    this.eventsSubscription.add(subscription);\n  }\n  /** @internal */\n  resetRootComponentType(rootComponentType) {\n    // TODO: vsavkin router 4.0 should make the root component set to null\n    // this will simplify the lifecycle of the router.\n    this.routerState.root.component = rootComponentType;\n    this.navigationTransitions.rootComponentType = rootComponentType;\n  }\n  /**\n   * Sets up the location change listener and performs the initial navigation.\n   */\n  initialNavigation() {\n    this.setUpLocationChangeListener();\n    if (!this.navigationTransitions.hasRequestedNavigation) {\n      this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());\n    }\n  }\n  /**\n   * Sets up the location change listener. This listener detects navigations triggered from outside\n   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router\n   * navigation so that the correct events, guards, etc. are triggered.\n   */\n  setUpLocationChangeListener() {\n    // Don't need to use Zone.wrap any more, because zone.js\n    // already patch onPopState, so location change callback will\n    // run into ngZone\n    this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {\n      // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS\n      // hybrid apps.\n      setTimeout(() => {\n        this.navigateToSyncWithBrowser(url, 'popstate', state);\n      }, 0);\n    });\n  }\n  /**\n   * Schedules a router navigation to synchronize Router state with the browser state.\n   *\n   * This is done as a response to a popstate event and the initial navigation. These\n   * two scenarios represent times when the browser URL/state has been updated and\n   * the Router needs to respond to ensure its internal state matches.\n   */\n  navigateToSyncWithBrowser(url, source, state) {\n    const extras = {\n      replaceUrl: true\n    };\n    // TODO: restoredState should always include the entire state, regardless\n    // of navigationId. This requires a breaking change to update the type on\n    // NavigationStart’s restoredState, which currently requires navigationId\n    // to always be present. The Router used to only restore history state if\n    // a navigationId was present.\n    // The stored navigationId is used by the RouterScroller to retrieve the scroll\n    // position for the page.\n    const restoredState = state?.navigationId ? state : null;\n    // Separate to NavigationStart.restoredState, we must also restore the state to\n    // history.state and generate a new navigationId, since it will be overwritten\n    if (state) {\n      const stateCopy = {\n        ...state\n      };\n      delete stateCopy.navigationId;\n      delete stateCopy.ɵrouterPageId;\n      if (Object.keys(stateCopy).length !== 0) {\n        extras.state = stateCopy;\n      }\n    }\n    const urlTree = this.parseUrl(url);\n    this.scheduleNavigation(urlTree, source, restoredState, extras);\n  }\n  /** The current URL. */\n  get url() {\n    return this.serializeUrl(this.currentUrlTree);\n  }\n  /**\n   * Returns the current `Navigation` object when the router is navigating,\n   * and `null` when idle.\n   */\n  getCurrentNavigation() {\n    return this.navigationTransitions.currentNavigation;\n  }\n  /**\n   * The `Navigation` object of the most recent navigation to succeed and `null` if there\n   *     has not been a successful navigation yet.\n   */\n  get lastSuccessfulNavigation() {\n    return this.navigationTransitions.lastSuccessfulNavigation;\n  }\n  /**\n   * Resets the route configuration used for navigation and generating links.\n   *\n   * @param config The route array for the new configuration.\n   *\n   * @usageNotes\n   *\n   * ```\n   * router.resetConfig([\n   *  { path: 'team/:id', component: TeamCmp, children: [\n   *    { path: 'simple', component: SimpleCmp },\n   *    { path: 'user/:name', component: UserCmp }\n   *  ]}\n   * ]);\n   * ```\n   */\n  resetConfig(config) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n    this.config = config.map(standardizeConfig);\n    this.navigated = false;\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.dispose();\n  }\n  /** Disposes of the router. */\n  dispose() {\n    this.navigationTransitions.complete();\n    if (this.nonRouterCurrentEntryChangeSubscription) {\n      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();\n      this.nonRouterCurrentEntryChangeSubscription = undefined;\n    }\n    this.disposed = true;\n    this.eventsSubscription.unsubscribe();\n  }\n  /**\n   * Appends URL segments to the current URL tree to create a new URL tree.\n   *\n   * @param commands An array of URL fragments with which to construct the new URL tree.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`\n   * property of the options object, if supplied.\n   * @param navigationExtras Options that control the navigation strategy.\n   * @returns The new URL tree.\n   *\n   * @usageNotes\n   *\n   * ```\n   * // create /team/33/user/11\n   * router.createUrlTree(['/team', 33, 'user', 11]);\n   *\n   * // create /team/33;expand=true/user/11\n   * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n   *\n   * // you can collapse static segments like this (this works only with the first passed-in value):\n   * router.createUrlTree(['/team/33/user', userId]);\n   *\n   * // If the first segment can contain slashes, and you do not want the router to split it,\n   * // you can do the following:\n   * router.createUrlTree([{segmentPath: '/one/two'}]);\n   *\n   * // create /team/33/(user/11//right:chat)\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n   *\n   * // remove the right secondary node\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n   *\n   * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n   *\n   * // navigate to /team/33/user/11/details\n   * router.createUrlTree(['details'], {relativeTo: route});\n   *\n   * // navigate to /team/33/user/22\n   * router.createUrlTree(['../22'], {relativeTo: route});\n   *\n   * // navigate to /team/44/user/22\n   * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n   *\n   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the\n   * tree should be created relative to the root.\n   * ```\n   */\n  createUrlTree(commands, navigationExtras = {}) {\n    const {\n      relativeTo,\n      queryParams,\n      fragment,\n      queryParamsHandling,\n      preserveFragment\n    } = navigationExtras;\n    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n    let q = null;\n    switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {\n      case 'merge':\n        q = {\n          ...this.currentUrlTree.queryParams,\n          ...queryParams\n        };\n        break;\n      case 'preserve':\n        q = this.currentUrlTree.queryParams;\n        break;\n      default:\n        q = queryParams || null;\n    }\n    if (q !== null) {\n      q = this.removeEmptyProps(q);\n    }\n    let relativeToUrlSegmentGroup;\n    try {\n      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n    } catch (e) {\n      // This is strictly for backwards compatibility with tests that create\n      // invalid `ActivatedRoute` mocks.\n      // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and\n      // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at\n      // the moment.\n      if (typeof commands[0] !== 'string' || commands[0][0] !== '/') {\n        // Navigations that were absolute in the old way of creating UrlTrees\n        // would still work because they wouldn't attempt to match the\n        // segments in the `ActivatedRoute` to the `currentUrlTree` but\n        // instead just replace the root segment with the navigation result.\n        // Non-absolute navigations would fail to apply the commands because\n        // the logic could not find the segment to replace (so they'd act like there were no\n        // commands).\n        commands = [];\n      }\n      relativeToUrlSegmentGroup = this.currentUrlTree.root;\n    }\n    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);\n  }\n  /**\n   * Navigates to a view using an absolute route path.\n   *\n   * @param url An absolute path for a defined route. The function does not apply any delta to the\n   *     current URL.\n   * @param extras An object containing properties that modify the navigation strategy.\n   *\n   * @returns A Promise that resolves to 'true' when navigation succeeds,\n   * to 'false' when navigation fails, or is rejected on error.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to an absolute path.\n   *\n   * ```\n   * router.navigateByUrl(\"/team/33/user/11\");\n   *\n   * // Navigate without updating the URL\n   * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigateByUrl(url, extras = {\n    skipLocationChange: false\n  }) {\n    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n  }\n  /**\n   * Navigate based on the provided array of commands and a starting point.\n   * If no starting route is provided, the navigation is absolute.\n   *\n   * @param commands An array of URL fragments with which to construct the target URL.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property\n   * of the options object, if supplied.\n   * @param extras An options object that determines how the URL should be constructed or\n   *     interpreted.\n   *\n   * @returns A Promise that resolves to `true` when navigation succeeds, or `false` when navigation\n   *     fails. The Promise is rejected when an error occurs if `resolveNavigationPromiseOnError` is\n   * not `true`.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to a dynamic route path relative to the current URL.\n   *\n   * ```\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n   *\n   * // Navigate without updating the URL, overriding the default behavior\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigate(commands, extras = {\n    skipLocationChange: false\n  }) {\n    validateCommands(commands);\n    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n  }\n  /** Serializes a `UrlTree` into a string */\n  serializeUrl(url) {\n    return this.urlSerializer.serialize(url);\n  }\n  /** Parses a string into a `UrlTree` */\n  parseUrl(url) {\n    try {\n      return this.urlSerializer.parse(url);\n    } catch {\n      return this.urlSerializer.parse('/');\n    }\n  }\n  isActive(url, matchOptions) {\n    let options;\n    if (matchOptions === true) {\n      options = {\n        ...exactMatchOptions\n      };\n    } else if (matchOptions === false) {\n      options = {\n        ...subsetMatchOptions\n      };\n    } else {\n      options = matchOptions;\n    }\n    if (isUrlTree(url)) {\n      return containsTree(this.currentUrlTree, url, options);\n    }\n    const urlTree = this.parseUrl(url);\n    return containsTree(this.currentUrlTree, urlTree, options);\n  }\n  removeEmptyProps(params) {\n    return Object.entries(params).reduce((result, [key, value]) => {\n      if (value !== null && value !== undefined) {\n        result[key] = value;\n      }\n      return result;\n    }, {});\n  }\n  scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {\n    if (this.disposed) {\n      return Promise.resolve(false);\n    }\n    let resolve;\n    let reject;\n    let promise;\n    if (priorPromise) {\n      resolve = priorPromise.resolve;\n      reject = priorPromise.reject;\n      promise = priorPromise.promise;\n    } else {\n      promise = new Promise((res, rej) => {\n        resolve = res;\n        reject = rej;\n      });\n    }\n    // Indicate that the navigation is happening.\n    const taskId = this.pendingTasks.add();\n    afterNextNavigation(this, () => {\n      // Remove pending task in a microtask to allow for cancelled\n      // initial navigations and redirects within the same task.\n      queueMicrotask(() => this.pendingTasks.remove(taskId));\n    });\n    this.navigationTransitions.handleNavigationRequest({\n      source,\n      restoredState,\n      currentUrlTree: this.currentUrlTree,\n      currentRawUrl: this.currentUrlTree,\n      rawUrl,\n      extras,\n      resolve: resolve,\n      reject: reject,\n      promise,\n      currentSnapshot: this.routerState.snapshot,\n      currentRouterState: this.routerState\n    });\n    // Make sure that the error is propagated even though `processNavigations` catch\n    // handler does not rethrow\n    return promise.catch(e => {\n      return Promise.reject(e);\n    });\n  }\n  static ɵfac = function Router_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Router)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Router,\n    factory: Router.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Router, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction validateCommands(commands) {\n  for (let i = 0; i < commands.length; i++) {\n    const cmd = commands[i];\n    if (cmd == null) {\n      throw new ɵRuntimeError(4008 /* RuntimeErrorCode.NULLISH_COMMAND */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The requested path contains ${cmd} segment at index ${i}`);\n    }\n  }\n}\nfunction isPublicRouterEvent(e) {\n  return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);\n}\n\n/**\n * @description\n *\n * When applied to an element in a template, makes that element a link\n * that initiates navigation to a route. Navigation opens one or more routed components\n * in one or more `<router-outlet>` locations on the page.\n *\n * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,\n * the following creates a static link to the route:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * You can use dynamic values to generate the link.\n * For a dynamic link, pass an array of path segments,\n * followed by the params for each segment.\n * For example, `['/team', teamId, 'user', userName, {details: true}]`\n * generates a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one term and combined with dynamic segments.\n * For example, `['/team/11/user', userName, {details: true}]`\n *\n * The input that you provide to the link is treated as a delta to the current URL.\n * For instance, suppose the current URL is `/user/(box//aux:team)`.\n * The link `<a [routerLink]=\"['/user/jim']\">Jim</a>` creates the URL\n * `/user/(jim//aux:team)`.\n * See {@link Router#createUrlTree} for more information.\n *\n * @usageNotes\n *\n * You can use absolute or relative paths in a link, set query parameters,\n * control how parameters are handled, and keep a history of navigation states.\n *\n * ### Relative link paths\n *\n * The first segment name can be prepended with `/`, `./`, or `../`.\n * * If the first segment begins with `/`, the router looks up the route from the root of the\n *   app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router\n *   looks in the children of the current activated route.\n * * If the first segment begins with `../`, the router goes up one level in the route tree.\n *\n * ### Setting and handling query params and fragments\n *\n * The following link adds a query parameter and a fragment to the generated URL:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n *   link to user component\n * </a>\n * ```\n * By default, the directive constructs the new URL using the given query parameters.\n * The example generates the link: `/user/bob?debug=true#education`.\n *\n * You can instruct the directive to handle query parameters differently\n * by specifying the `queryParamsHandling` option in the link.\n * Allowed values are:\n *\n *  - `'merge'`: Merge the given `queryParams` into the current query params.\n *  - `'preserve'`: Preserve the current query params.\n *\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n *   link to user component\n * </a>\n * ```\n *\n * `queryParams`, `fragment`, `queryParamsHandling`, `preserveFragment`, and `relativeTo`\n * cannot be used when the `routerLink` input is a `UrlTree`.\n *\n * See {@link UrlCreationOptions#queryParamsHandling}.\n *\n * ### Preserving navigation history\n *\n * You can provide a `state` value to be persisted to the browser's\n * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).\n * For example:\n *\n * ```html\n * <a [routerLink]=\"['/user/bob']\" [state]=\"{tracingId: 123}\">\n *   link to user component\n * </a>\n * ```\n *\n * Use {@link Router#getCurrentNavigation} to retrieve a saved\n * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`\n * event:\n *\n * ```ts\n * // Get NavigationStart events\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\n *   const navigation = router.getCurrentNavigation();\n *   tracingService.trace({id: navigation.extras.state.tracingId});\n * });\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterLink {\n  router;\n  route;\n  tabIndexAttribute;\n  renderer;\n  el;\n  locationStrategy;\n  /**\n   * Represents an `href` attribute value applied to a host element,\n   * when a host element is `<a>`. For other tags, the value is `null`.\n   */\n  href = null;\n  /**\n   * Represents the `target` attribute on a host element.\n   * This is only used when the host element is an `<a>` tag.\n   */\n  target;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParams}\n   * @see {@link Router#createUrlTree}\n   */\n  queryParams;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#fragment}\n   * @see {@link Router#createUrlTree}\n   */\n  fragment;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParamsHandling}\n   * @see {@link Router#createUrlTree}\n   */\n  queryParamsHandling;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#state}\n   * @see {@link Router#navigateByUrl}\n   */\n  state;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#info}\n   * @see {@link Router#navigateByUrl}\n   */\n  info;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * Specify a value here when you do not want to use the default value\n   * for `routerLink`, which is the current activated route.\n   * Note that a value of `undefined` here will use the `routerLink` default.\n   * @see {@link UrlCreationOptions#relativeTo}\n   * @see {@link Router#createUrlTree}\n   */\n  relativeTo;\n  /** Whether a host element is an `<a>` tag. */\n  isAnchorElement;\n  subscription;\n  /** @internal */\n  onChanges = new Subject();\n  constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {\n    this.router = router;\n    this.route = route;\n    this.tabIndexAttribute = tabIndexAttribute;\n    this.renderer = renderer;\n    this.el = el;\n    this.locationStrategy = locationStrategy;\n    const tagName = el.nativeElement.tagName?.toLowerCase();\n    this.isAnchorElement = tagName === 'a' || tagName === 'area';\n    if (this.isAnchorElement) {\n      this.subscription = router.events.subscribe(s => {\n        if (s instanceof NavigationEnd) {\n          this.updateHref();\n        }\n      });\n    } else {\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#preserveFragment}\n   * @see {@link Router#createUrlTree}\n   */\n  preserveFragment = false;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#skipLocationChange}\n   * @see {@link Router#navigateByUrl}\n   */\n  skipLocationChange = false;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#replaceUrl}\n   * @see {@link Router#navigateByUrl}\n   */\n  replaceUrl = false;\n  /**\n   * Modifies the tab index if there was not a tabindex attribute on the element during\n   * instantiation.\n   */\n  setTabIndexIfNotOnNativeEl(newTabIndex) {\n    if (this.tabIndexAttribute != null /* both `null` and `undefined` */ || this.isAnchorElement) {\n      return;\n    }\n    this.applyAttributeValue('tabindex', newTabIndex);\n  }\n  /** @nodoc */\n  // TODO(atscott): Remove changes parameter in major version as a breaking change.\n  ngOnChanges(changes) {\n    if (ngDevMode && isUrlTree(this.routerLinkInput) && (this.fragment !== undefined || this.queryParams || this.queryParamsHandling || this.preserveFragment || this.relativeTo)) {\n      throw new ɵRuntimeError(4016 /* RuntimeErrorCode.INVALID_ROUTER_LINK_INPUTS */, 'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.');\n    }\n    if (this.isAnchorElement) {\n      this.updateHref();\n    }\n    // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes\n    // to the RouterLinks it's tracking.\n    this.onChanges.next(this);\n  }\n  routerLinkInput = null;\n  /**\n   * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.\n   *   - **array**: commands to pass to {@link Router#createUrlTree}.\n   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n   *   - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands\n   *     and other inputs that correspond to properties of `UrlCreationOptions`.\n   *   - **null|undefined**: effectively disables the `routerLink`\n   * @see {@link Router#createUrlTree}\n   */\n  set routerLink(commandsOrUrlTree) {\n    if (commandsOrUrlTree == null) {\n      this.routerLinkInput = null;\n      this.setTabIndexIfNotOnNativeEl(null);\n    } else {\n      if (isUrlTree(commandsOrUrlTree)) {\n        this.routerLinkInput = commandsOrUrlTree;\n      } else {\n        this.routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];\n      }\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n  /** @nodoc */\n  onClick(button, ctrlKey, shiftKey, altKey, metaKey) {\n    const urlTree = this.urlTree;\n    if (urlTree === null) {\n      return true;\n    }\n    if (this.isAnchorElement) {\n      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n        return true;\n      }\n      if (typeof this.target === 'string' && this.target != '_self') {\n        return true;\n      }\n    }\n    const extras = {\n      skipLocationChange: this.skipLocationChange,\n      replaceUrl: this.replaceUrl,\n      state: this.state,\n      info: this.info\n    };\n    this.router.navigateByUrl(urlTree, extras);\n    // Return `false` for `<a>` elements to prevent default action\n    // and cancel the native behavior, since the navigation is handled\n    // by the Router.\n    return !this.isAnchorElement;\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n  }\n  updateHref() {\n    const urlTree = this.urlTree;\n    this.href = urlTree !== null && this.locationStrategy ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) : null;\n    const sanitizedValue = this.href === null ? null :\n    // This class represents a directive that can be added to both `<a>` elements,\n    // as well as other elements. As a result, we can't define security context at\n    // compile time. So the security context is deferred to runtime.\n    // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function\n    // based on the tag and property names. The logic mimics the one from\n    // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.\n    //\n    // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`\n    // instead of applying a value via a renderer, after a final merge of the\n    // `RouterLinkWithHref` directive.\n    ɵɵsanitizeUrlOrResourceUrl(this.href, this.el.nativeElement.tagName.toLowerCase(), 'href');\n    this.applyAttributeValue('href', sanitizedValue);\n  }\n  applyAttributeValue(attrName, attrValue) {\n    const renderer = this.renderer;\n    const nativeElement = this.el.nativeElement;\n    if (attrValue !== null) {\n      renderer.setAttribute(nativeElement, attrName, attrValue);\n    } else {\n      renderer.removeAttribute(nativeElement, attrName);\n    }\n  }\n  get urlTree() {\n    if (this.routerLinkInput === null) {\n      return null;\n    } else if (isUrlTree(this.routerLinkInput)) {\n      return this.routerLinkInput;\n    }\n    return this.router.createUrlTree(this.routerLinkInput, {\n      // If the `relativeTo` input is not defined, we want to use `this.route` by default.\n      // Otherwise, we should use the value provided by the user in the input.\n      relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,\n      queryParams: this.queryParams,\n      fragment: this.fragment,\n      queryParamsHandling: this.queryParamsHandling,\n      preserveFragment: this.preserveFragment\n    });\n  }\n  static ɵfac = function RouterLink_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterLink)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(ActivatedRoute), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i3.LocationStrategy));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterLink,\n    selectors: [[\"\", \"routerLink\", \"\"]],\n    hostVars: 1,\n    hostBindings: function RouterLink_HostBindings(rf, ctx) {\n      if (rf & 1) {\n        i0.ɵɵlistener(\"click\", function RouterLink_click_HostBindingHandler($event) {\n          return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);\n        });\n      }\n      if (rf & 2) {\n        i0.ɵɵattribute(\"target\", ctx.target);\n      }\n    },\n    inputs: {\n      target: \"target\",\n      queryParams: \"queryParams\",\n      fragment: \"fragment\",\n      queryParamsHandling: \"queryParamsHandling\",\n      state: \"state\",\n      info: \"info\",\n      relativeTo: \"relativeTo\",\n      preserveFragment: [2, \"preserveFragment\", \"preserveFragment\", booleanAttribute],\n      skipLocationChange: [2, \"skipLocationChange\", \"skipLocationChange\", booleanAttribute],\n      replaceUrl: [2, \"replaceUrl\", \"replaceUrl\", booleanAttribute],\n      routerLink: \"routerLink\"\n    },\n    features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterLink, [{\n    type: Directive,\n    args: [{\n      selector: '[routerLink]'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: ActivatedRoute\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Attribute,\n      args: ['tabindex']\n    }]\n  }, {\n    type: i0.Renderer2\n  }, {\n    type: i0.ElementRef\n  }, {\n    type: i3.LocationStrategy\n  }], {\n    target: [{\n      type: HostBinding,\n      args: ['attr.target']\n    }, {\n      type: Input\n    }],\n    queryParams: [{\n      type: Input\n    }],\n    fragment: [{\n      type: Input\n    }],\n    queryParamsHandling: [{\n      type: Input\n    }],\n    state: [{\n      type: Input\n    }],\n    info: [{\n      type: Input\n    }],\n    relativeTo: [{\n      type: Input\n    }],\n    preserveFragment: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    skipLocationChange: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    replaceUrl: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    routerLink: [{\n      type: Input\n    }],\n    onClick: [{\n      type: HostListener,\n      args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]\n    }]\n  });\n})();\n\n/**\n *\n * @description\n *\n * Tracks whether the linked route of an element is currently active, and allows you\n * to specify one or more CSS classes to add to the element when the linked route\n * is active.\n *\n * Use this directive to create a visual distinction for elements associated with an active route.\n * For example, the following code highlights the word \"Bob\" when the router\n * activates the associated route:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * Whenever the URL is either '/user' or '/user/bob', the \"active-link\" class is\n * added to the anchor tag. If the URL changes, the class is removed.\n *\n * You can set more than one class using a space-separated string or an array.\n * For example:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * To directly check the `isActive` status of the link, assign the `RouterLinkActive`\n * instance to a template variable.\n * For example, the following checks the status without assigning any CSS classes:\n *\n * ```html\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n *   Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.\n * For example, the following sets the active-link class on the `<div>`  parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```html\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n *   <a routerLink=\"/user/jim\">Jim</a>\n *   <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * The `RouterLinkActive` directive can also be used to set the aria-current attribute\n * to provide an alternative distinction for active elements to visually impaired users.\n *\n * For example, the following code adds the 'active' class to the Home Page link when it is\n * indeed active and in such case also sets its aria-current attribute to 'page':\n *\n * ```html\n * <a routerLink=\"/\" routerLinkActive=\"active\" ariaCurrentWhenActive=\"page\">Home Page</a>\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nclass RouterLinkActive {\n  router;\n  element;\n  renderer;\n  cdr;\n  link;\n  links;\n  classes = [];\n  routerEventsSubscription;\n  linkInputChangesSubscription;\n  _isActive = false;\n  get isActive() {\n    return this._isActive;\n  }\n  /**\n   * Options to configure how to determine if the router link is active.\n   *\n   * These options are passed to the `Router.isActive()` function.\n   *\n   * @see {@link Router#isActive}\n   */\n  routerLinkActiveOptions = {\n    exact: false\n  };\n  /**\n   * Aria-current attribute to apply when the router link is active.\n   *\n   * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.\n   *\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}\n   */\n  ariaCurrentWhenActive;\n  /**\n   *\n   * You can use the output `isActiveChange` to get notified each time the link becomes\n   * active or inactive.\n   *\n   * Emits:\n   * true  -> Route is active\n   * false -> Route is inactive\n   *\n   * ```\n   * <a\n   *  routerLink=\"/user/bob\"\n   *  routerLinkActive=\"active-link\"\n   *  (isActiveChange)=\"this.onRouterLinkActive($event)\">Bob</a>\n   * ```\n   */\n  isActiveChange = new EventEmitter();\n  constructor(router, element, renderer, cdr, link) {\n    this.router = router;\n    this.element = element;\n    this.renderer = renderer;\n    this.cdr = cdr;\n    this.link = link;\n    this.routerEventsSubscription = router.events.subscribe(s => {\n      if (s instanceof NavigationEnd) {\n        this.update();\n      }\n    });\n  }\n  /** @nodoc */\n  ngAfterContentInit() {\n    // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).\n    of(this.links.changes, of(null)).pipe(mergeAll()).subscribe(_ => {\n      this.update();\n      this.subscribeToEachLinkOnChanges();\n    });\n  }\n  subscribeToEachLinkOnChanges() {\n    this.linkInputChangesSubscription?.unsubscribe();\n    const allLinkChanges = [...this.links.toArray(), this.link].filter(link => !!link).map(link => link.onChanges);\n    this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe(link => {\n      if (this._isActive !== this.isLinkActive(this.router)(link)) {\n        this.update();\n      }\n    });\n  }\n  set routerLinkActive(data) {\n    const classes = Array.isArray(data) ? data : data.split(' ');\n    this.classes = classes.filter(c => !!c);\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    this.update();\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.routerEventsSubscription.unsubscribe();\n    this.linkInputChangesSubscription?.unsubscribe();\n  }\n  update() {\n    if (!this.links || !this.router.navigated) return;\n    queueMicrotask(() => {\n      const hasActiveLinks = this.hasActiveLinks();\n      this.classes.forEach(c => {\n        if (hasActiveLinks) {\n          this.renderer.addClass(this.element.nativeElement, c);\n        } else {\n          this.renderer.removeClass(this.element.nativeElement, c);\n        }\n      });\n      if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n        this.renderer.setAttribute(this.element.nativeElement, 'aria-current', this.ariaCurrentWhenActive.toString());\n      } else {\n        this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n      }\n      // Only emit change if the active state changed.\n      if (this._isActive !== hasActiveLinks) {\n        this._isActive = hasActiveLinks;\n        this.cdr.markForCheck();\n        // Emit on isActiveChange after classes are updated\n        this.isActiveChange.emit(hasActiveLinks);\n      }\n    });\n  }\n  isLinkActive(router) {\n    const options = isActiveMatchOptions(this.routerLinkActiveOptions) ? this.routerLinkActiveOptions :\n    // While the types should disallow `undefined` here, it's possible without strict inputs\n    this.routerLinkActiveOptions.exact || false;\n    return link => {\n      const urlTree = link.urlTree;\n      return urlTree ? router.isActive(urlTree, options) : false;\n    };\n  }\n  hasActiveLinks() {\n    const isActiveCheckFn = this.isLinkActive(this.router);\n    return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);\n  }\n  static ɵfac = function RouterLinkActive_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterLinkActive)(i0.ɵɵdirectiveInject(Router), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(RouterLink, 8));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: RouterLinkActive,\n    selectors: [[\"\", \"routerLinkActive\", \"\"]],\n    contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {\n      if (rf & 1) {\n        i0.ɵɵcontentQuery(dirIndex, RouterLink, 5);\n      }\n      if (rf & 2) {\n        let _t;\n        i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.links = _t);\n      }\n    },\n    inputs: {\n      routerLinkActiveOptions: \"routerLinkActiveOptions\",\n      ariaCurrentWhenActive: \"ariaCurrentWhenActive\",\n      routerLinkActive: \"routerLinkActive\"\n    },\n    outputs: {\n      isActiveChange: \"isActiveChange\"\n    },\n    exportAs: [\"routerLinkActive\"],\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterLinkActive, [{\n    type: Directive,\n    args: [{\n      selector: '[routerLinkActive]',\n      exportAs: 'routerLinkActive'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: i0.ElementRef\n  }, {\n    type: i0.Renderer2\n  }, {\n    type: i0.ChangeDetectorRef\n  }, {\n    type: RouterLink,\n    decorators: [{\n      type: Optional\n    }]\n  }], {\n    links: [{\n      type: ContentChildren,\n      args: [RouterLink, {\n        descendants: true\n      }]\n    }],\n    routerLinkActiveOptions: [{\n      type: Input\n    }],\n    ariaCurrentWhenActive: [{\n      type: Input\n    }],\n    isActiveChange: [{\n      type: Output\n    }],\n    routerLinkActive: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * Use instead of `'paths' in options` to be compatible with property renaming\n */\nfunction isActiveMatchOptions(options) {\n  return !!options.paths;\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @publicApi\n */\nclass PreloadingStrategy {}\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```ts\n * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @publicApi\n */\nclass PreloadAllModules {\n  preload(route, fn) {\n    return fn().pipe(catchError(() => of(null)));\n  }\n  static ɵfac = function PreloadAllModules_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreloadAllModules)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreloadAllModules,\n    factory: PreloadAllModules.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreloadAllModules, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @publicApi\n */\nclass NoPreloading {\n  preload(route, fn) {\n    return of(null);\n  }\n  static ɵfac = function NoPreloading_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NoPreloading)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NoPreloading,\n    factory: NoPreloading.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NoPreloading, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n * @publicApi\n */\nclass RouterPreloader {\n  router;\n  injector;\n  preloadingStrategy;\n  loader;\n  subscription;\n  constructor(router, compiler, injector, preloadingStrategy, loader) {\n    this.router = router;\n    this.injector = injector;\n    this.preloadingStrategy = preloadingStrategy;\n    this.loader = loader;\n  }\n  setUpPreloading() {\n    this.subscription = this.router.events.pipe(filter(e => e instanceof NavigationEnd), concatMap(() => this.preload())).subscribe(() => {});\n  }\n  preload() {\n    return this.processRoutes(this.injector, this.router.config);\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n  processRoutes(injector, routes) {\n    const res = [];\n    for (const route of routes) {\n      if (route.providers && !route._injector) {\n        route._injector = createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);\n      }\n      const injectorForCurrentRoute = route._injector ?? injector;\n      const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n      // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not\n      // `loadComponent`. `canLoad` guards only block loading of child routes by design. This\n      // happens as a consequence of needing to descend into children for route matching immediately\n      // while component loading is deferred until route activation. Because `canLoad` guards can\n      // have side effects, we cannot execute them here so we instead skip preloading altogether\n      // when present. Lastly, it remains to be decided whether `canLoad` should behave this way\n      // at all. Code splitting and lazy loading is separate from client-side authorization checks\n      // and should not be used as a security measure to prevent loading of code.\n      if (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined || route.loadComponent && !route._loadedComponent) {\n        res.push(this.preloadConfig(injectorForCurrentRoute, route));\n      }\n      if (route.children || route._loadedRoutes) {\n        res.push(this.processRoutes(injectorForChildren, route.children ?? route._loadedRoutes));\n      }\n    }\n    return from(res).pipe(mergeAll());\n  }\n  preloadConfig(injector, route) {\n    return this.preloadingStrategy.preload(route, () => {\n      let loadedChildren$;\n      if (route.loadChildren && route.canLoad === undefined) {\n        loadedChildren$ = this.loader.loadChildren(injector, route);\n      } else {\n        loadedChildren$ = of(null);\n      }\n      const recursiveLoadChildren$ = loadedChildren$.pipe(mergeMap(config => {\n        if (config === null) {\n          return of(void 0);\n        }\n        route._loadedRoutes = config.routes;\n        route._loadedInjector = config.injector;\n        // If the loaded config was a module, use that as the module/module injector going\n        // forward. Otherwise, continue using the current module/module injector.\n        return this.processRoutes(config.injector ?? injector, config.routes);\n      }));\n      if (route.loadComponent && !route._loadedComponent) {\n        const loadComponent$ = this.loader.loadComponent(route);\n        return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n      } else {\n        return recursiveLoadChildren$;\n      }\n    });\n  }\n  static ɵfac = function RouterPreloader_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterPreloader)(i0.ɵɵinject(Router), i0.ɵɵinject(i0.Compiler), i0.ɵɵinject(i0.EnvironmentInjector), i0.ɵɵinject(PreloadingStrategy), i0.ɵɵinject(RouterConfigLoader));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterPreloader,\n    factory: RouterPreloader.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterPreloader, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: Router\n  }, {\n    type: i0.Compiler\n  }, {\n    type: i0.EnvironmentInjector\n  }, {\n    type: PreloadingStrategy\n  }, {\n    type: RouterConfigLoader\n  }], null);\n})();\nconst ROUTER_SCROLLER = new InjectionToken('');\nclass RouterScroller {\n  urlSerializer;\n  transitions;\n  viewportScroller;\n  zone;\n  options;\n  routerEventsSubscription;\n  scrollEventsSubscription;\n  lastId = 0;\n  lastSource = 'imperative';\n  restoredId = 0;\n  store = {};\n  /** @nodoc */\n  constructor(urlSerializer, transitions, viewportScroller, zone, options = {}) {\n    this.urlSerializer = urlSerializer;\n    this.transitions = transitions;\n    this.viewportScroller = viewportScroller;\n    this.zone = zone;\n    this.options = options;\n    // Default both options to 'disabled'\n    options.scrollPositionRestoration ||= 'disabled';\n    options.anchorScrolling ||= 'disabled';\n  }\n  init() {\n    // we want to disable the automatic scrolling because having two places\n    // responsible for scrolling results race conditions, especially given\n    // that browser don't implement this behavior consistently\n    if (this.options.scrollPositionRestoration !== 'disabled') {\n      this.viewportScroller.setHistoryScrollRestoration('manual');\n    }\n    this.routerEventsSubscription = this.createScrollEvents();\n    this.scrollEventsSubscription = this.consumeScrollEvents();\n  }\n  createScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (e instanceof NavigationStart) {\n        // store the scroll position of the current stable navigations.\n        this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n        this.lastSource = e.navigationTrigger;\n        this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n      } else if (e instanceof NavigationEnd) {\n        this.lastId = e.id;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n      } else if (e instanceof NavigationSkipped && e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {\n        this.lastSource = undefined;\n        this.restoredId = 0;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n      }\n    });\n  }\n  consumeScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (!(e instanceof Scroll)) return;\n      // a popstate event. The pop state event will always ignore anchor scrolling.\n      if (e.position) {\n        if (this.options.scrollPositionRestoration === 'top') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        } else if (this.options.scrollPositionRestoration === 'enabled') {\n          this.viewportScroller.scrollToPosition(e.position);\n        }\n        // imperative navigation \"forward\"\n      } else {\n        if (e.anchor && this.options.anchorScrolling === 'enabled') {\n          this.viewportScroller.scrollToAnchor(e.anchor);\n        } else if (this.options.scrollPositionRestoration !== 'disabled') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        }\n      }\n    });\n  }\n  scheduleScrollEvent(routerEvent, anchor) {\n    this.zone.runOutsideAngular(() => {\n      // The scroll event needs to be delayed until after change detection. Otherwise, we may\n      // attempt to restore the scroll position before the router outlet has fully rendered the\n      // component by executing its update block of the template function.\n      setTimeout(() => {\n        this.zone.run(() => {\n          this.transitions.events.next(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor));\n        });\n      }, 0);\n    });\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this.routerEventsSubscription?.unsubscribe();\n    this.scrollEventsSubscription?.unsubscribe();\n  }\n  static ɵfac = function RouterScroller_Factory(__ngFactoryType__) {\n    i0.ɵɵinvalidFactory();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: RouterScroller,\n    factory: RouterScroller.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterScroller, [{\n    type: Injectable\n  }], () => [{\n    type: UrlSerializer\n  }, {\n    type: NavigationTransitions\n  }, {\n    type: i3.ViewportScroller\n  }, {\n    type: i0.NgZone\n  }, {\n    type: undefined\n  }], null);\n})();\n\n/**\n * Sets up providers necessary to enable `Router` functionality for the application.\n * Allows to configure a set of routes as well as extra features that should be enabled.\n *\n * @usageNotes\n *\n * Basic example of how you can add a Router to your application:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent, {\n *   providers: [provideRouter(appRoutes)]\n * });\n * ```\n *\n * You can also enable optional features in the Router by adding functions from the `RouterFeatures`\n * type:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes,\n *         withDebugTracing(),\n *         withRouterConfig({paramsInheritanceStrategy: 'always'}))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link RouterFeatures}\n *\n * @publicApi\n * @param routes A set of `Route`s to use for the application routing table.\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to setup a Router.\n */\nfunction provideRouter(routes, ...features) {\n  return makeEnvironmentProviders([{\n    provide: ROUTES,\n    multi: true,\n    useValue: routes\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? {\n    provide: ROUTER_IS_PROVIDED,\n    useValue: true\n  } : [], {\n    provide: ActivatedRoute,\n    useFactory: rootRoute,\n    deps: [Router]\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useFactory: getBootstrapListener\n  }, features.map(feature => feature.ɵproviders)]);\n}\nfunction rootRoute(router) {\n  return router.routerState.root;\n}\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature(kind, providers) {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers\n  };\n}\n/**\n * An Injection token used to indicate whether `provideRouter` or `RouterModule.forRoot` was ever\n * called.\n */\nconst ROUTER_IS_PROVIDED = new InjectionToken('', {\n  providedIn: 'root',\n  factory: () => false\n});\nconst routerIsProvidedDevModeCheck = {\n  provide: ENVIRONMENT_INITIALIZER,\n  multi: true,\n  useFactory() {\n    return () => {\n      if (!inject(ROUTER_IS_PROVIDED)) {\n        console.warn('`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' + 'This is likely a mistake.');\n      }\n    };\n  }\n};\n/**\n * Registers a DI provider for a set of routes.\n * @param routes The route configuration to provide.\n *\n * @usageNotes\n *\n * ```ts\n * @NgModule({\n *   providers: [provideRoutes(ROUTES)]\n * })\n * class LazyLoadedChildModule {}\n * ```\n *\n * @deprecated If necessary, provide routes using the `ROUTES` `InjectionToken`.\n * @see {@link ROUTES}\n * @publicApi\n */\nfunction provideRoutes(routes) {\n  return [{\n    provide: ROUTES,\n    multi: true,\n    useValue: routes\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : []];\n}\n/**\n * Enables customizable scrolling behavior for router navigations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable scrolling feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withInMemoryScrolling())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link ViewportScroller}\n *\n * @publicApi\n * @param options Set of configuration parameters to customize scrolling behavior, see\n *     `InMemoryScrollingOptions` for additional information.\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withInMemoryScrolling(options = {}) {\n  const providers = [{\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n    }\n  }];\n  return routerFeature(4 /* RouterFeatureKind.InMemoryScrollingFeature */, providers);\n}\nfunction getBootstrapListener() {\n  const injector = inject(Injector);\n  return bootstrappedComponentRef => {\n    const ref = injector.get(ApplicationRef);\n    if (bootstrappedComponentRef !== ref.components[0]) {\n      return;\n    }\n    const router = injector.get(Router);\n    const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n    if (injector.get(INITIAL_NAVIGATION) === 1 /* InitialNavigation.EnabledNonBlocking */) {\n      router.initialNavigation();\n    }\n    injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();\n    injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();\n    router.resetRootComponentType(ref.componentTypes[0]);\n    if (!bootstrapDone.closed) {\n      bootstrapDone.next();\n      bootstrapDone.complete();\n      bootstrapDone.unsubscribe();\n    }\n  };\n}\n/**\n * A subject used to indicate that the bootstrapping phase is done. When initial navigation is\n * `enabledBlocking`, the first navigation waits until bootstrapping is finished before continuing\n * to the activation phase.\n */\nconst BOOTSTRAP_DONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '', {\n  factory: () => {\n    return new Subject();\n  }\n});\nconst INITIAL_NAVIGATION = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '', {\n  providedIn: 'root',\n  factory: () => 1 /* InitialNavigation.EnabledNonBlocking */\n});\n/**\n * Configures initial navigation to start before the root component is created.\n *\n * The bootstrap is blocked until the initial navigation is complete. This should be set in case\n * you use [server-side rendering](guide/ssr), but do not enable [hydration](guide/hydration) for\n * your application.\n *\n * @usageNotes\n *\n * Basic example of how you can enable this navigation behavior:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withEnabledBlockingInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withEnabledBlockingInitialNavigation() {\n  const providers = [{\n    provide: INITIAL_NAVIGATION,\n    useValue: 0 /* InitialNavigation.EnabledBlocking */\n  }, {\n    provide: APP_INITIALIZER,\n    multi: true,\n    deps: [Injector],\n    useFactory: injector => {\n      const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve());\n      return () => {\n        return locationInitialized.then(() => {\n          return new Promise(resolve => {\n            const router = injector.get(Router);\n            const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n            afterNextNavigation(router, () => {\n              // Unblock APP_INITIALIZER in case the initial navigation was canceled or errored\n              // without a redirect.\n              resolve(true);\n            });\n            injector.get(NavigationTransitions).afterPreactivation = () => {\n              // Unblock APP_INITIALIZER once we get to `afterPreactivation`. At this point, we\n              // assume activation will complete successfully (even though this is not\n              // guaranteed).\n              resolve(true);\n              return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n            };\n            router.initialNavigation();\n          });\n        });\n      };\n    }\n  }];\n  return routerFeature(2 /* RouterFeatureKind.EnabledBlockingInitialNavigationFeature */, providers);\n}\n/**\n * Disables initial navigation.\n *\n * Use if there is a reason to have more control over when the router starts its initial navigation\n * due to some complex initialization logic.\n *\n * @usageNotes\n *\n * Basic example of how you can disable initial navigation:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDisabledInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withDisabledInitialNavigation() {\n  const providers = [{\n    provide: APP_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const router = inject(Router);\n      return () => {\n        router.setUpLocationChangeListener();\n      };\n    }\n  }, {\n    provide: INITIAL_NAVIGATION,\n    useValue: 2 /* InitialNavigation.Disabled */\n  }];\n  return routerFeature(3 /* RouterFeatureKind.DisabledInitialNavigationFeature */, providers);\n}\n/**\n * Enables logging of all internal navigation events to the console.\n * Extra logging might be useful for debugging purposes to inspect Router event sequence.\n *\n * @usageNotes\n *\n * Basic example of how you can enable debug tracing:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDebugTracing())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withDebugTracing() {\n  let providers = [];\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    providers = [{\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useFactory: () => {\n        const router = inject(Router);\n        return () => router.events.subscribe(e => {\n          // tslint:disable:no-console\n          console.group?.(`Router Event: ${e.constructor.name}`);\n          console.log(stringifyEvent(e));\n          console.log(e);\n          console.groupEnd?.();\n          // tslint:enable:no-console\n        });\n      }\n    }];\n  } else {\n    providers = [];\n  }\n  return routerFeature(1 /* RouterFeatureKind.DebugTracingFeature */, providers);\n}\nconst ROUTER_PRELOADER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '');\n/**\n * Allows to configure a preloading strategy to use. The strategy is configured by providing a\n * reference to a class that implements a `PreloadingStrategy`.\n *\n * @usageNotes\n *\n * Basic example of how you can configure preloading:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withPreloading(PreloadAllModules))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param preloadingStrategy A reference to a class that implements a `PreloadingStrategy` that\n *     should be used.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withPreloading(preloadingStrategy) {\n  const providers = [{\n    provide: ROUTER_PRELOADER,\n    useExisting: RouterPreloader\n  }, {\n    provide: PreloadingStrategy,\n    useExisting: preloadingStrategy\n  }];\n  return routerFeature(0 /* RouterFeatureKind.PreloadingFeature */, providers);\n}\n/**\n * Allows to provide extra parameters to configure Router.\n *\n * @usageNotes\n *\n * Basic example of how you can provide extra configuration options:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withRouterConfig({\n *          onSameUrlNavigation: 'reload'\n *       }))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param options A set of parameters to configure Router, see `RouterConfigOptions` for\n *     additional information.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withRouterConfig(options) {\n  const providers = [{\n    provide: ROUTER_CONFIGURATION,\n    useValue: options\n  }];\n  return routerFeature(5 /* RouterFeatureKind.RouterConfigurationFeature */, providers);\n}\n/**\n * Provides the location strategy that uses the URL fragment instead of the history API.\n *\n * @usageNotes\n *\n * Basic example of how you can use the hash location option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withHashLocation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link HashLocationStrategy}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withHashLocation() {\n  const providers = [{\n    provide: LocationStrategy,\n    useClass: HashLocationStrategy\n  }];\n  return routerFeature(6 /* RouterFeatureKind.RouterHashLocationFeature */, providers);\n}\n/**\n * Provides a function which is called when a navigation error occurs.\n *\n * This function is run inside application's [injection context](guide/di/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\n *\n * This function can return a `RedirectCommand` to convert the error to a redirect, similar to returning\n * a `UrlTree` or `RedirectCommand` from a guard. This will also prevent the `Router` from emitting\n * `NavigationError`; it will instead emit `NavigationCancel` with code NavigationCancellationCode.Redirect.\n * Return values other than `RedirectCommand` are ignored and do not change any behavior with respect to\n * how the `Router` handles the error.\n *\n * @usageNotes\n *\n * Basic example of how you can use the error handler option:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withNavigationErrorHandler((e: NavigationError) =>\n * inject(MyErrorTracker).trackError(e)))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link NavigationError}\n * @see {@link core/inject}\n * @see {@link runInInjectionContext}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nfunction withNavigationErrorHandler(handler) {\n  const providers = [{\n    provide: NAVIGATION_ERROR_HANDLER,\n    useValue: handler\n  }];\n  return routerFeature(7 /* RouterFeatureKind.NavigationErrorHandlerFeature */, providers);\n}\n/**\n * Enables binding information from the `Router` state directly to the inputs of the component in\n * `Route` configurations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withComponentInputBinding())\n *     ]\n *   }\n * );\n * ```\n *\n * The router bindings information from any of the following sources:\n *\n *  - query parameters\n *  - path and matrix parameters\n *  - static route data\n *  - data from resolvers\n *\n * Duplicate keys are resolved in the same order from above, from least to greatest,\n * meaning that resolvers have the highest precedence and override any of the other information\n * from the route.\n *\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. This prevents previous information from being\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n * Default values can be provided with a resolver on the route to ensure the value is always present\n * or an input and use an input transform in the component.\n *\n * @see {@link guide/components/inputs#input-transforms input transforms}\n * @returns A set of providers for use with `provideRouter`.\n */\nfunction withComponentInputBinding() {\n  const providers = [RoutedComponentInputBinder, {\n    provide: INPUT_BINDER,\n    useExisting: RoutedComponentInputBinder\n  }];\n  return routerFeature(8 /* RouterFeatureKind.ComponentInputBindingFeature */, providers);\n}\n/**\n * Enables view transitions in the Router by running the route activation and deactivation inside of\n * `document.startViewTransition`.\n *\n * Note: The View Transitions API is not available in all browsers. If the browser does not support\n * view transitions, the Router will not attempt to start a view transition and continue processing\n * the navigation as usual.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```ts\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withViewTransitions())\n *     ]\n *   }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n * @developerPreview\n */\nfunction withViewTransitions(options) {\n  const providers = [{\n    provide: CREATE_VIEW_TRANSITION,\n    useValue: createViewTransition\n  }, {\n    provide: VIEW_TRANSITION_OPTIONS,\n    useValue: {\n      skipNextTransition: !!options?.skipInitialTransition,\n      ...options\n    }\n  }];\n  return routerFeature(9 /* RouterFeatureKind.ViewTransitionsFeature */, providers);\n}\n\n/**\n * The directives defined in the `RouterModule`.\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent];\n/**\n * @docsNotRequired\n */\nconst ROUTER_FORROOT_GUARD = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'router duplicate forRoot guard' : 'ROUTER_FORROOT_GUARD');\n// TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept\n// here to avoid a breaking change whereby the provider order matters based on where the\n// `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a \"breaking\"\n// change in a major version.\nconst ROUTER_PROVIDERS = [Location, {\n  provide: UrlSerializer,\n  useClass: DefaultUrlSerializer\n}, Router, ChildrenOutletContexts, {\n  provide: ActivatedRoute,\n  useFactory: rootRoute,\n  deps: [Router]\n}, RouterConfigLoader,\n// Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can\n// be removed when `provideRoutes` is removed.\ntypeof ngDevMode === 'undefined' || ngDevMode ? {\n  provide: ROUTER_IS_PROVIDED,\n  useValue: true\n} : []];\n/**\n * @description\n *\n * Adds directives and providers for in-app navigation among views defined in an application.\n * Use the Angular `Router` service to declaratively specify application states and manage state\n * transitions.\n *\n * You can import this NgModule multiple times, once for each lazy-loaded bundle.\n * However, only one `Router` service can be active.\n * To ensure this, there are two ways to register routes when importing this module:\n *\n * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given\n * routes, and the `Router` service itself.\n * * The `forChild()` method creates an `NgModule` that contains all the directives and the given\n * routes, but does not include the `Router` service.\n *\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks) for an\n * overview of how the `Router` service should be used.\n *\n * @publicApi\n */\nclass RouterModule {\n  constructor(guard) {}\n  /**\n   * Creates and configures a module with all the router providers and directives.\n   * Optionally sets up an application listener to perform an initial navigation.\n   *\n   * When registering the NgModule at the root, import as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forRoot(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the application.\n   * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\n   * @return The new `NgModule`.\n   *\n   */\n  static forRoot(routes, config) {\n    return {\n      ngModule: RouterModule,\n      providers: [ROUTER_PROVIDERS, typeof ngDevMode === 'undefined' || ngDevMode ? config?.enableTracing ? withDebugTracing().ɵproviders : [] : [], {\n        provide: ROUTES,\n        multi: true,\n        useValue: routes\n      }, {\n        provide: ROUTER_FORROOT_GUARD,\n        useFactory: provideForRootGuard,\n        deps: [[Router, new Optional(), new SkipSelf()]]\n      }, config?.errorHandler ? {\n        provide: NAVIGATION_ERROR_HANDLER,\n        useValue: config.errorHandler\n      } : [], {\n        provide: ROUTER_CONFIGURATION,\n        useValue: config ? config : {}\n      }, config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(), provideRouterScroller(), config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [], config?.initialNavigation ? provideInitialNavigation(config) : [], config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [], config?.enableViewTransitions ? withViewTransitions().ɵproviders : [], provideRouterInitializer()]\n    };\n  }\n  /**\n   * Creates a module with all the router directives and a provider registering routes,\n   * without creating a new Router service.\n   * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forChild(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the submodule.\n   * @return The new NgModule.\n   *\n   */\n  static forChild(routes) {\n    return {\n      ngModule: RouterModule,\n      providers: [{\n        provide: ROUTES,\n        multi: true,\n        useValue: routes\n      }]\n    };\n  }\n  static ɵfac = function RouterModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || RouterModule)(i0.ɵɵinject(ROUTER_FORROOT_GUARD, 8));\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: RouterModule,\n    imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent],\n    exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(RouterModule, [{\n    type: NgModule,\n    args: [{\n      imports: ROUTER_DIRECTIVES,\n      exports: ROUTER_DIRECTIVES\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [ROUTER_FORROOT_GUARD]\n    }]\n  }], null);\n})();\n/**\n * For internal use by `RouterModule` only. Note that this differs from `withInMemoryRouterScroller`\n * because it reads from the `ExtraOptions` which should not be used in the standalone world.\n */\nfunction provideRouterScroller() {\n  return {\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const config = inject(ROUTER_CONFIGURATION);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      if (config.scrollOffset) {\n        viewportScroller.setOffset(config.scrollOffset);\n      }\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);\n    }\n  };\n}\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` should\n// provide hash location directly via `{provide: LocationStrategy, useClass: HashLocationStrategy}`.\nfunction provideHashLocationStrategy() {\n  return {\n    provide: LocationStrategy,\n    useClass: HashLocationStrategy\n  };\n}\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` does not\n// need this at all because `PathLocationStrategy` is the default factory for `LocationStrategy`.\nfunction providePathLocationStrategy() {\n  return {\n    provide: LocationStrategy,\n    useClass: PathLocationStrategy\n  };\n}\nfunction provideForRootGuard(router) {\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {\n    throw new ɵRuntimeError(4007 /* RuntimeErrorCode.FOR_ROOT_CALLED_TWICE */, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` + ` Lazy loaded modules should use RouterModule.forChild() instead.`);\n  }\n  return 'guarded';\n}\n// Note: For internal use only with `RouterModule`. Standalone router setup with `provideRouter`\n// users call `withXInitialNavigation` directly.\nfunction provideInitialNavigation(config) {\n  return [config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [], config.initialNavigation === 'enabledBlocking' ? withEnabledBlockingInitialNavigation().ɵproviders : []];\n}\n// TODO(atscott): This should not be in the public API\n/**\n * A DI token for the router initializer that\n * is called after the app is bootstrapped.\n *\n * @publicApi\n */\nconst ROUTER_INITIALIZER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '');\nfunction provideRouterInitializer() {\n  return [\n  // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just\n  // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.\n  {\n    provide: ROUTER_INITIALIZER,\n    useFactory: getBootstrapListener\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useExisting: ROUTER_INITIALIZER\n  }];\n}\n\n/**\n * Maps an array of injectable classes with canMatch functions to an array of equivalent\n * `CanMatchFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanMatch(providers) {\n  return providers.map(provider => (...params) => inject(provider).canMatch(...params));\n}\n/**\n * Maps an array of injectable classes with canActivate functions to an array of equivalent\n * `CanActivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanActivate(providers) {\n  return providers.map(provider => (...params) => inject(provider).canActivate(...params));\n}\n/**\n * Maps an array of injectable classes with canActivateChild functions to an array of equivalent\n * `CanActivateChildFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanActivateChild(providers) {\n  return providers.map(provider => (...params) => inject(provider).canActivateChild(...params));\n}\n/**\n * Maps an array of injectable classes with canDeactivate functions to an array of equivalent\n * `CanDeactivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToCanDeactivate(providers) {\n  return providers.map(provider => (...params) => inject(provider).canDeactivate(...params));\n}\n/**\n * Maps an injectable class with a resolve function to an equivalent `ResolveFn`\n * for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='Resolve'}\n *\n * @publicApi\n * @see {@link Route}\n */\nfunction mapToResolve(provider) {\n  return (...params) => inject(provider).resolve(...params);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the router package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\nfunction getLoadedRoutes(route) {\n  return route._loadedRoutes;\n}\nɵpublishExternalGlobalUtil('ɵgetLoadedRoutes', getLoadedRoutes);\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTER_OUTLET_DATA, ROUTES, RedirectCommand, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLink as RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, createUrlTreeFromSnapshot, defaultUrlMatcher, mapToCanActivate, mapToCanActivateChild, mapToCanDeactivate, mapToCanMatch, mapToResolve, provideRouter, provideRoutes, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withHashLocation, withInMemoryScrolling, withNavigationErrorHandler, withPreloading, withRouterConfig, withViewTransitions, ɵEmptyOutletComponent, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS, afterNextNavigation as ɵafterNextNavigation, loadChildren as ɵloadChildren };\n"],
-  "mappings": "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",
-  "names": ["tree", "match", "res", "commands", "noMatch", "EventType", "NavigationCancellationCode", "NavigationSkippedCode", "t", "c", "node", "map", "tree", "contexts", "canActivate", "s", "tree", "last$1", "input", "from", "t", "NavigationResult", "e"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-PEAVEDUD.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-PEAVEDUD.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,36808 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  __async,
-  __commonJS,
-  __spreadProps,
-  __spreadValues,
-  __toESM
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/rxjs/dist/cjs/internal/util/isFunction.js
-var require_isFunction = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isFunction.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isFunction = void 0;
-    function isFunction(value) {
-      return typeof value === "function";
-    }
-    exports.isFunction = isFunction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/createErrorClass.js
-var require_createErrorClass = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/createErrorClass.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.createErrorClass = void 0;
-    function createErrorClass(createImpl) {
-      var _super = function(instance) {
-        Error.call(instance);
-        instance.stack = new Error().stack;
-      };
-      var ctorFunc = createImpl(_super);
-      ctorFunc.prototype = Object.create(Error.prototype);
-      ctorFunc.prototype.constructor = ctorFunc;
-      return ctorFunc;
-    }
-    exports.createErrorClass = createErrorClass;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/UnsubscriptionError.js
-var require_UnsubscriptionError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/UnsubscriptionError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.UnsubscriptionError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.UnsubscriptionError = createErrorClass_1.createErrorClass(function(_super) {
-      return function UnsubscriptionErrorImpl(errors) {
-        _super(this);
-        this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) {
-          return i + 1 + ") " + err.toString();
-        }).join("\n  ") : "";
-        this.name = "UnsubscriptionError";
-        this.errors = errors;
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/arrRemove.js
-var require_arrRemove = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/arrRemove.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.arrRemove = void 0;
-    function arrRemove(arr, item) {
-      if (arr) {
-        var index = arr.indexOf(item);
-        0 <= index && arr.splice(index, 1);
-      }
-    }
-    exports.arrRemove = arrRemove;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Subscription.js
-var require_Subscription = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Subscription.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isSubscription = exports.EMPTY_SUBSCRIPTION = exports.Subscription = void 0;
-    var isFunction_1 = require_isFunction();
-    var UnsubscriptionError_1 = require_UnsubscriptionError();
-    var arrRemove_1 = require_arrRemove();
-    var Subscription2 = function() {
-      function Subscription3(initialTeardown) {
-        this.initialTeardown = initialTeardown;
-        this.closed = false;
-        this._parentage = null;
-        this._finalizers = null;
-      }
-      Subscription3.prototype.unsubscribe = function() {
-        var e_1, _a, e_2, _b;
-        var errors;
-        if (!this.closed) {
-          this.closed = true;
-          var _parentage = this._parentage;
-          if (_parentage) {
-            this._parentage = null;
-            if (Array.isArray(_parentage)) {
-              try {
-                for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
-                  var parent_1 = _parentage_1_1.value;
-                  parent_1.remove(this);
-                }
-              } catch (e_1_1) {
-                e_1 = {
-                  error: e_1_1
-                };
-              } finally {
-                try {
-                  if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);
-                } finally {
-                  if (e_1) throw e_1.error;
-                }
-              }
-            } else {
-              _parentage.remove(this);
-            }
-          }
-          var initialFinalizer = this.initialTeardown;
-          if (isFunction_1.isFunction(initialFinalizer)) {
-            try {
-              initialFinalizer();
-            } catch (e) {
-              errors = e instanceof UnsubscriptionError_1.UnsubscriptionError ? e.errors : [e];
-            }
-          }
-          var _finalizers = this._finalizers;
-          if (_finalizers) {
-            this._finalizers = null;
-            try {
-              for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
-                var finalizer = _finalizers_1_1.value;
-                try {
-                  execFinalizer(finalizer);
-                } catch (err) {
-                  errors = errors !== null && errors !== void 0 ? errors : [];
-                  if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {
-                    errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
-                  } else {
-                    errors.push(err);
-                  }
-                }
-              }
-            } catch (e_2_1) {
-              e_2 = {
-                error: e_2_1
-              };
-            } finally {
-              try {
-                if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);
-              } finally {
-                if (e_2) throw e_2.error;
-              }
-            }
-          }
-          if (errors) {
-            throw new UnsubscriptionError_1.UnsubscriptionError(errors);
-          }
-        }
-      };
-      Subscription3.prototype.add = function(teardown) {
-        var _a;
-        if (teardown && teardown !== this) {
-          if (this.closed) {
-            execFinalizer(teardown);
-          } else {
-            if (teardown instanceof Subscription3) {
-              if (teardown.closed || teardown._hasParent(this)) {
-                return;
-              }
-              teardown._addParent(this);
-            }
-            (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);
-          }
-        }
-      };
-      Subscription3.prototype._hasParent = function(parent) {
-        var _parentage = this._parentage;
-        return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
-      };
-      Subscription3.prototype._addParent = function(parent) {
-        var _parentage = this._parentage;
-        this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
-      };
-      Subscription3.prototype._removeParent = function(parent) {
-        var _parentage = this._parentage;
-        if (_parentage === parent) {
-          this._parentage = null;
-        } else if (Array.isArray(_parentage)) {
-          arrRemove_1.arrRemove(_parentage, parent);
-        }
-      };
-      Subscription3.prototype.remove = function(teardown) {
-        var _finalizers = this._finalizers;
-        _finalizers && arrRemove_1.arrRemove(_finalizers, teardown);
-        if (teardown instanceof Subscription3) {
-          teardown._removeParent(this);
-        }
-      };
-      Subscription3.EMPTY = function() {
-        var empty = new Subscription3();
-        empty.closed = true;
-        return empty;
-      }();
-      return Subscription3;
-    }();
-    exports.Subscription = Subscription2;
-    exports.EMPTY_SUBSCRIPTION = Subscription2.EMPTY;
-    function isSubscription(value) {
-      return value instanceof Subscription2 || value && "closed" in value && isFunction_1.isFunction(value.remove) && isFunction_1.isFunction(value.add) && isFunction_1.isFunction(value.unsubscribe);
-    }
-    exports.isSubscription = isSubscription;
-    function execFinalizer(finalizer) {
-      if (isFunction_1.isFunction(finalizer)) {
-        finalizer();
-      } else {
-        finalizer.unsubscribe();
-      }
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/config.js
-var require_config = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/config.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.config = void 0;
-    exports.config = {
-      onUnhandledError: null,
-      onStoppedNotification: null,
-      Promise: void 0,
-      useDeprecatedSynchronousErrorHandling: false,
-      useDeprecatedNextContext: false
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/timeoutProvider.js
-var require_timeoutProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/timeoutProvider.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.timeoutProvider = void 0;
-    exports.timeoutProvider = {
-      setTimeout: function(handler, timeout) {
-        var args = [];
-        for (var _i = 2; _i < arguments.length; _i++) {
-          args[_i - 2] = arguments[_i];
-        }
-        var delegate = exports.timeoutProvider.delegate;
-        if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {
-          return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));
-        }
-        return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));
-      },
-      clearTimeout: function(handle) {
-        var delegate = exports.timeoutProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/reportUnhandledError.js
-var require_reportUnhandledError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/reportUnhandledError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.reportUnhandledError = void 0;
-    var config_1 = require_config();
-    var timeoutProvider_1 = require_timeoutProvider();
-    function reportUnhandledError(err) {
-      timeoutProvider_1.timeoutProvider.setTimeout(function() {
-        var onUnhandledError = config_1.config.onUnhandledError;
-        if (onUnhandledError) {
-          onUnhandledError(err);
-        } else {
-          throw err;
-        }
-      });
-    }
-    exports.reportUnhandledError = reportUnhandledError;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/noop.js
-var require_noop = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/noop.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.noop = void 0;
-    function noop2() {
-    }
-    exports.noop = noop2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/NotificationFactories.js
-var require_NotificationFactories = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/NotificationFactories.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.createNotification = exports.nextNotification = exports.errorNotification = exports.COMPLETE_NOTIFICATION = void 0;
-    exports.COMPLETE_NOTIFICATION = function() {
-      return createNotification("C", void 0, void 0);
-    }();
-    function errorNotification(error) {
-      return createNotification("E", void 0, error);
-    }
-    exports.errorNotification = errorNotification;
-    function nextNotification(value) {
-      return createNotification("N", value, void 0);
-    }
-    exports.nextNotification = nextNotification;
-    function createNotification(kind, value, error) {
-      return {
-        kind,
-        value,
-        error
-      };
-    }
-    exports.createNotification = createNotification;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/errorContext.js
-var require_errorContext = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/errorContext.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.captureError = exports.errorContext = void 0;
-    var config_1 = require_config();
-    var context = null;
-    function errorContext(cb) {
-      if (config_1.config.useDeprecatedSynchronousErrorHandling) {
-        var isRoot = !context;
-        if (isRoot) {
-          context = {
-            errorThrown: false,
-            error: null
-          };
-        }
-        cb();
-        if (isRoot) {
-          var _a = context, errorThrown = _a.errorThrown, error = _a.error;
-          context = null;
-          if (errorThrown) {
-            throw error;
-          }
-        }
-      } else {
-        cb();
-      }
-    }
-    exports.errorContext = errorContext;
-    function captureError(err) {
-      if (config_1.config.useDeprecatedSynchronousErrorHandling && context) {
-        context.errorThrown = true;
-        context.error = err;
-      }
-    }
-    exports.captureError = captureError;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Subscriber.js
-var require_Subscriber = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Subscriber.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.EMPTY_OBSERVER = exports.SafeSubscriber = exports.Subscriber = void 0;
-    var isFunction_1 = require_isFunction();
-    var Subscription_1 = require_Subscription();
-    var config_1 = require_config();
-    var reportUnhandledError_1 = require_reportUnhandledError();
-    var noop_1 = require_noop();
-    var NotificationFactories_1 = require_NotificationFactories();
-    var timeoutProvider_1 = require_timeoutProvider();
-    var errorContext_1 = require_errorContext();
-    var Subscriber = function(_super) {
-      __extends(Subscriber2, _super);
-      function Subscriber2(destination) {
-        var _this = _super.call(this) || this;
-        _this.isStopped = false;
-        if (destination) {
-          _this.destination = destination;
-          if (Subscription_1.isSubscription(destination)) {
-            destination.add(_this);
-          }
-        } else {
-          _this.destination = exports.EMPTY_OBSERVER;
-        }
-        return _this;
-      }
-      Subscriber2.create = function(next, error, complete) {
-        return new SafeSubscriber(next, error, complete);
-      };
-      Subscriber2.prototype.next = function(value) {
-        if (this.isStopped) {
-          handleStoppedNotification(NotificationFactories_1.nextNotification(value), this);
-        } else {
-          this._next(value);
-        }
-      };
-      Subscriber2.prototype.error = function(err) {
-        if (this.isStopped) {
-          handleStoppedNotification(NotificationFactories_1.errorNotification(err), this);
-        } else {
-          this.isStopped = true;
-          this._error(err);
-        }
-      };
-      Subscriber2.prototype.complete = function() {
-        if (this.isStopped) {
-          handleStoppedNotification(NotificationFactories_1.COMPLETE_NOTIFICATION, this);
-        } else {
-          this.isStopped = true;
-          this._complete();
-        }
-      };
-      Subscriber2.prototype.unsubscribe = function() {
-        if (!this.closed) {
-          this.isStopped = true;
-          _super.prototype.unsubscribe.call(this);
-          this.destination = null;
-        }
-      };
-      Subscriber2.prototype._next = function(value) {
-        this.destination.next(value);
-      };
-      Subscriber2.prototype._error = function(err) {
-        try {
-          this.destination.error(err);
-        } finally {
-          this.unsubscribe();
-        }
-      };
-      Subscriber2.prototype._complete = function() {
-        try {
-          this.destination.complete();
-        } finally {
-          this.unsubscribe();
-        }
-      };
-      return Subscriber2;
-    }(Subscription_1.Subscription);
-    exports.Subscriber = Subscriber;
-    var _bind = Function.prototype.bind;
-    function bind(fn, thisArg) {
-      return _bind.call(fn, thisArg);
-    }
-    var ConsumerObserver = function() {
-      function ConsumerObserver2(partialObserver) {
-        this.partialObserver = partialObserver;
-      }
-      ConsumerObserver2.prototype.next = function(value) {
-        var partialObserver = this.partialObserver;
-        if (partialObserver.next) {
-          try {
-            partialObserver.next(value);
-          } catch (error) {
-            handleUnhandledError(error);
-          }
-        }
-      };
-      ConsumerObserver2.prototype.error = function(err) {
-        var partialObserver = this.partialObserver;
-        if (partialObserver.error) {
-          try {
-            partialObserver.error(err);
-          } catch (error) {
-            handleUnhandledError(error);
-          }
-        } else {
-          handleUnhandledError(err);
-        }
-      };
-      ConsumerObserver2.prototype.complete = function() {
-        var partialObserver = this.partialObserver;
-        if (partialObserver.complete) {
-          try {
-            partialObserver.complete();
-          } catch (error) {
-            handleUnhandledError(error);
-          }
-        }
-      };
-      return ConsumerObserver2;
-    }();
-    var SafeSubscriber = function(_super) {
-      __extends(SafeSubscriber2, _super);
-      function SafeSubscriber2(observerOrNext, error, complete) {
-        var _this = _super.call(this) || this;
-        var partialObserver;
-        if (isFunction_1.isFunction(observerOrNext) || !observerOrNext) {
-          partialObserver = {
-            next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0,
-            error: error !== null && error !== void 0 ? error : void 0,
-            complete: complete !== null && complete !== void 0 ? complete : void 0
-          };
-        } else {
-          var context_1;
-          if (_this && config_1.config.useDeprecatedNextContext) {
-            context_1 = Object.create(observerOrNext);
-            context_1.unsubscribe = function() {
-              return _this.unsubscribe();
-            };
-            partialObserver = {
-              next: observerOrNext.next && bind(observerOrNext.next, context_1),
-              error: observerOrNext.error && bind(observerOrNext.error, context_1),
-              complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)
-            };
-          } else {
-            partialObserver = observerOrNext;
-          }
-        }
-        _this.destination = new ConsumerObserver(partialObserver);
-        return _this;
-      }
-      return SafeSubscriber2;
-    }(Subscriber);
-    exports.SafeSubscriber = SafeSubscriber;
-    function handleUnhandledError(error) {
-      if (config_1.config.useDeprecatedSynchronousErrorHandling) {
-        errorContext_1.captureError(error);
-      } else {
-        reportUnhandledError_1.reportUnhandledError(error);
-      }
-    }
-    function defaultErrorHandler(err) {
-      throw err;
-    }
-    function handleStoppedNotification(notification, subscriber) {
-      var onStoppedNotification = config_1.config.onStoppedNotification;
-      onStoppedNotification && timeoutProvider_1.timeoutProvider.setTimeout(function() {
-        return onStoppedNotification(notification, subscriber);
-      });
-    }
-    exports.EMPTY_OBSERVER = {
-      closed: true,
-      next: noop_1.noop,
-      error: defaultErrorHandler,
-      complete: noop_1.noop
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/symbol/observable.js
-var require_observable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/symbol/observable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.observable = void 0;
-    exports.observable = function() {
-      return typeof Symbol === "function" && Symbol.observable || "@@observable";
-    }();
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/identity.js
-var require_identity = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/identity.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.identity = void 0;
-    function identity(x) {
-      return x;
-    }
-    exports.identity = identity;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/pipe.js
-var require_pipe = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/pipe.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.pipeFromArray = exports.pipe = void 0;
-    var identity_1 = require_identity();
-    function pipe() {
-      var fns = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        fns[_i] = arguments[_i];
-      }
-      return pipeFromArray(fns);
-    }
-    exports.pipe = pipe;
-    function pipeFromArray(fns) {
-      if (fns.length === 0) {
-        return identity_1.identity;
-      }
-      if (fns.length === 1) {
-        return fns[0];
-      }
-      return function piped(input2) {
-        return fns.reduce(function(prev, fn) {
-          return fn(prev);
-        }, input2);
-      };
-    }
-    exports.pipeFromArray = pipeFromArray;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Observable.js
-var require_Observable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Observable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.Observable = void 0;
-    var Subscriber_1 = require_Subscriber();
-    var Subscription_1 = require_Subscription();
-    var observable_1 = require_observable();
-    var pipe_1 = require_pipe();
-    var config_1 = require_config();
-    var isFunction_1 = require_isFunction();
-    var errorContext_1 = require_errorContext();
-    var Observable = function() {
-      function Observable2(subscribe) {
-        if (subscribe) {
-          this._subscribe = subscribe;
-        }
-      }
-      Observable2.prototype.lift = function(operator) {
-        var observable = new Observable2();
-        observable.source = this;
-        observable.operator = operator;
-        return observable;
-      };
-      Observable2.prototype.subscribe = function(observerOrNext, error, complete) {
-        var _this = this;
-        var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new Subscriber_1.SafeSubscriber(observerOrNext, error, complete);
-        errorContext_1.errorContext(function() {
-          var _a = _this, operator = _a.operator, source = _a.source;
-          subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
-        });
-        return subscriber;
-      };
-      Observable2.prototype._trySubscribe = function(sink) {
-        try {
-          return this._subscribe(sink);
-        } catch (err) {
-          sink.error(err);
-        }
-      };
-      Observable2.prototype.forEach = function(next, promiseCtor) {
-        var _this = this;
-        promiseCtor = getPromiseCtor(promiseCtor);
-        return new promiseCtor(function(resolve, reject) {
-          var subscriber = new Subscriber_1.SafeSubscriber({
-            next: function(value) {
-              try {
-                next(value);
-              } catch (err) {
-                reject(err);
-                subscriber.unsubscribe();
-              }
-            },
-            error: reject,
-            complete: resolve
-          });
-          _this.subscribe(subscriber);
-        });
-      };
-      Observable2.prototype._subscribe = function(subscriber) {
-        var _a;
-        return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);
-      };
-      Observable2.prototype[observable_1.observable] = function() {
-        return this;
-      };
-      Observable2.prototype.pipe = function() {
-        var operations = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-          operations[_i] = arguments[_i];
-        }
-        return pipe_1.pipeFromArray(operations)(this);
-      };
-      Observable2.prototype.toPromise = function(promiseCtor) {
-        var _this = this;
-        promiseCtor = getPromiseCtor(promiseCtor);
-        return new promiseCtor(function(resolve, reject) {
-          var value;
-          _this.subscribe(function(x) {
-            return value = x;
-          }, function(err) {
-            return reject(err);
-          }, function() {
-            return resolve(value);
-          });
-        });
-      };
-      Observable2.create = function(subscribe) {
-        return new Observable2(subscribe);
-      };
-      return Observable2;
-    }();
-    exports.Observable = Observable;
-    function getPromiseCtor(promiseCtor) {
-      var _a;
-      return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config_1.config.Promise) !== null && _a !== void 0 ? _a : Promise;
-    }
-    function isObserver(value) {
-      return value && isFunction_1.isFunction(value.next) && isFunction_1.isFunction(value.error) && isFunction_1.isFunction(value.complete);
-    }
-    function isSubscriber(value) {
-      return value && value instanceof Subscriber_1.Subscriber || isObserver(value) && Subscription_1.isSubscription(value);
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/lift.js
-var require_lift = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/lift.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.operate = exports.hasLift = void 0;
-    var isFunction_1 = require_isFunction();
-    function hasLift(source) {
-      return isFunction_1.isFunction(source === null || source === void 0 ? void 0 : source.lift);
-    }
-    exports.hasLift = hasLift;
-    function operate(init) {
-      return function(source) {
-        if (hasLift(source)) {
-          return source.lift(function(liftedSource) {
-            try {
-              return init(liftedSource, this);
-            } catch (err) {
-              this.error(err);
-            }
-          });
-        }
-        throw new TypeError("Unable to lift unknown Observable type");
-      };
-    }
-    exports.operate = operate;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js
-var require_OperatorSubscriber = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.OperatorSubscriber = exports.createOperatorSubscriber = void 0;
-    var Subscriber_1 = require_Subscriber();
-    function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
-      return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
-    }
-    exports.createOperatorSubscriber = createOperatorSubscriber;
-    var OperatorSubscriber = function(_super) {
-      __extends(OperatorSubscriber2, _super);
-      function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
-        var _this = _super.call(this, destination) || this;
-        _this.onFinalize = onFinalize;
-        _this.shouldUnsubscribe = shouldUnsubscribe;
-        _this._next = onNext ? function(value) {
-          try {
-            onNext(value);
-          } catch (err) {
-            destination.error(err);
-          }
-        } : _super.prototype._next;
-        _this._error = onError ? function(err) {
-          try {
-            onError(err);
-          } catch (err2) {
-            destination.error(err2);
-          } finally {
-            this.unsubscribe();
-          }
-        } : _super.prototype._error;
-        _this._complete = onComplete ? function() {
-          try {
-            onComplete();
-          } catch (err) {
-            destination.error(err);
-          } finally {
-            this.unsubscribe();
-          }
-        } : _super.prototype._complete;
-        return _this;
-      }
-      OperatorSubscriber2.prototype.unsubscribe = function() {
-        var _a;
-        if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
-          var closed_1 = this.closed;
-          _super.prototype.unsubscribe.call(this);
-          !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));
-        }
-      };
-      return OperatorSubscriber2;
-    }(Subscriber_1.Subscriber);
-    exports.OperatorSubscriber = OperatorSubscriber;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/refCount.js
-var require_refCount = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/refCount.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.refCount = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function refCount() {
-      return lift_1.operate(function(source, subscriber) {
-        var connection = null;
-        source._refCount++;
-        var refCounter = OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, void 0, void 0, function() {
-          if (!source || source._refCount <= 0 || 0 < --source._refCount) {
-            connection = null;
-            return;
-          }
-          var sharedConnection = source._connection;
-          var conn = connection;
-          connection = null;
-          if (sharedConnection && (!conn || sharedConnection === conn)) {
-            sharedConnection.unsubscribe();
-          }
-          subscriber.unsubscribe();
-        });
-        source.subscribe(refCounter);
-        if (!refCounter.closed) {
-          connection = source.connect();
-        }
-      });
-    }
-    exports.refCount = refCount;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/ConnectableObservable.js
-var require_ConnectableObservable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/ConnectableObservable.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.ConnectableObservable = void 0;
-    var Observable_1 = require_Observable();
-    var Subscription_1 = require_Subscription();
-    var refCount_1 = require_refCount();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var lift_1 = require_lift();
-    var ConnectableObservable = function(_super) {
-      __extends(ConnectableObservable2, _super);
-      function ConnectableObservable2(source, subjectFactory) {
-        var _this = _super.call(this) || this;
-        _this.source = source;
-        _this.subjectFactory = subjectFactory;
-        _this._subject = null;
-        _this._refCount = 0;
-        _this._connection = null;
-        if (lift_1.hasLift(source)) {
-          _this.lift = source.lift;
-        }
-        return _this;
-      }
-      ConnectableObservable2.prototype._subscribe = function(subscriber) {
-        return this.getSubject().subscribe(subscriber);
-      };
-      ConnectableObservable2.prototype.getSubject = function() {
-        var subject = this._subject;
-        if (!subject || subject.isStopped) {
-          this._subject = this.subjectFactory();
-        }
-        return this._subject;
-      };
-      ConnectableObservable2.prototype._teardown = function() {
-        this._refCount = 0;
-        var _connection = this._connection;
-        this._subject = this._connection = null;
-        _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe();
-      };
-      ConnectableObservable2.prototype.connect = function() {
-        var _this = this;
-        var connection = this._connection;
-        if (!connection) {
-          connection = this._connection = new Subscription_1.Subscription();
-          var subject_1 = this.getSubject();
-          connection.add(this.source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subject_1, void 0, function() {
-            _this._teardown();
-            subject_1.complete();
-          }, function(err) {
-            _this._teardown();
-            subject_1.error(err);
-          }, function() {
-            return _this._teardown();
-          })));
-          if (connection.closed) {
-            this._connection = null;
-            connection = Subscription_1.Subscription.EMPTY;
-          }
-        }
-        return connection;
-      };
-      ConnectableObservable2.prototype.refCount = function() {
-        return refCount_1.refCount()(this);
-      };
-      return ConnectableObservable2;
-    }(Observable_1.Observable);
-    exports.ConnectableObservable = ConnectableObservable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/performanceTimestampProvider.js
-var require_performanceTimestampProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/performanceTimestampProvider.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.performanceTimestampProvider = void 0;
-    exports.performanceTimestampProvider = {
-      now: function() {
-        return (exports.performanceTimestampProvider.delegate || performance).now();
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/animationFrameProvider.js
-var require_animationFrameProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/animationFrameProvider.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.animationFrameProvider = void 0;
-    var Subscription_1 = require_Subscription();
-    exports.animationFrameProvider = {
-      schedule: function(callback) {
-        var request = requestAnimationFrame;
-        var cancel = cancelAnimationFrame;
-        var delegate = exports.animationFrameProvider.delegate;
-        if (delegate) {
-          request = delegate.requestAnimationFrame;
-          cancel = delegate.cancelAnimationFrame;
-        }
-        var handle = request(function(timestamp) {
-          cancel = void 0;
-          callback(timestamp);
-        });
-        return new Subscription_1.Subscription(function() {
-          return cancel === null || cancel === void 0 ? void 0 : cancel(handle);
-        });
-      },
-      requestAnimationFrame: function() {
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-          args[_i] = arguments[_i];
-        }
-        var delegate = exports.animationFrameProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args)));
-      },
-      cancelAnimationFrame: function() {
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-          args[_i] = arguments[_i];
-        }
-        var delegate = exports.animationFrameProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args)));
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/dom/animationFrames.js
-var require_animationFrames = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/dom/animationFrames.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.animationFrames = void 0;
-    var Observable_1 = require_Observable();
-    var performanceTimestampProvider_1 = require_performanceTimestampProvider();
-    var animationFrameProvider_1 = require_animationFrameProvider();
-    function animationFrames(timestampProvider) {
-      return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES;
-    }
-    exports.animationFrames = animationFrames;
-    function animationFramesFactory(timestampProvider) {
-      return new Observable_1.Observable(function(subscriber) {
-        var provider = timestampProvider || performanceTimestampProvider_1.performanceTimestampProvider;
-        var start = provider.now();
-        var id = 0;
-        var run = function() {
-          if (!subscriber.closed) {
-            id = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function(timestamp) {
-              id = 0;
-              var now = provider.now();
-              subscriber.next({
-                timestamp: timestampProvider ? now : timestamp,
-                elapsed: now - start
-              });
-              run();
-            });
-          }
-        };
-        run();
-        return function() {
-          if (id) {
-            animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id);
-          }
-        };
-      });
-    }
-    var DEFAULT_ANIMATION_FRAMES = animationFramesFactory();
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/ObjectUnsubscribedError.js
-var require_ObjectUnsubscribedError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/ObjectUnsubscribedError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.ObjectUnsubscribedError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.ObjectUnsubscribedError = createErrorClass_1.createErrorClass(function(_super) {
-      return function ObjectUnsubscribedErrorImpl() {
-        _super(this);
-        this.name = "ObjectUnsubscribedError";
-        this.message = "object unsubscribed";
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Subject.js
-var require_Subject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Subject.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AnonymousSubject = exports.Subject = void 0;
-    var Observable_1 = require_Observable();
-    var Subscription_1 = require_Subscription();
-    var ObjectUnsubscribedError_1 = require_ObjectUnsubscribedError();
-    var arrRemove_1 = require_arrRemove();
-    var errorContext_1 = require_errorContext();
-    var Subject2 = function(_super) {
-      __extends(Subject3, _super);
-      function Subject3() {
-        var _this = _super.call(this) || this;
-        _this.closed = false;
-        _this.currentObservers = null;
-        _this.observers = [];
-        _this.isStopped = false;
-        _this.hasError = false;
-        _this.thrownError = null;
-        return _this;
-      }
-      Subject3.prototype.lift = function(operator) {
-        var subject = new AnonymousSubject(this, this);
-        subject.operator = operator;
-        return subject;
-      };
-      Subject3.prototype._throwIfClosed = function() {
-        if (this.closed) {
-          throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
-        }
-      };
-      Subject3.prototype.next = function(value) {
-        var _this = this;
-        errorContext_1.errorContext(function() {
-          var e_1, _a;
-          _this._throwIfClosed();
-          if (!_this.isStopped) {
-            if (!_this.currentObservers) {
-              _this.currentObservers = Array.from(_this.observers);
-            }
-            try {
-              for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {
-                var observer = _c.value;
-                observer.next(value);
-              }
-            } catch (e_1_1) {
-              e_1 = {
-                error: e_1_1
-              };
-            } finally {
-              try {
-                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-              } finally {
-                if (e_1) throw e_1.error;
-              }
-            }
-          }
-        });
-      };
-      Subject3.prototype.error = function(err) {
-        var _this = this;
-        errorContext_1.errorContext(function() {
-          _this._throwIfClosed();
-          if (!_this.isStopped) {
-            _this.hasError = _this.isStopped = true;
-            _this.thrownError = err;
-            var observers = _this.observers;
-            while (observers.length) {
-              observers.shift().error(err);
-            }
-          }
-        });
-      };
-      Subject3.prototype.complete = function() {
-        var _this = this;
-        errorContext_1.errorContext(function() {
-          _this._throwIfClosed();
-          if (!_this.isStopped) {
-            _this.isStopped = true;
-            var observers = _this.observers;
-            while (observers.length) {
-              observers.shift().complete();
-            }
-          }
-        });
-      };
-      Subject3.prototype.unsubscribe = function() {
-        this.isStopped = this.closed = true;
-        this.observers = this.currentObservers = null;
-      };
-      Object.defineProperty(Subject3.prototype, "observed", {
-        get: function() {
-          var _a;
-          return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;
-        },
-        enumerable: false,
-        configurable: true
-      });
-      Subject3.prototype._trySubscribe = function(subscriber) {
-        this._throwIfClosed();
-        return _super.prototype._trySubscribe.call(this, subscriber);
-      };
-      Subject3.prototype._subscribe = function(subscriber) {
-        this._throwIfClosed();
-        this._checkFinalizedStatuses(subscriber);
-        return this._innerSubscribe(subscriber);
-      };
-      Subject3.prototype._innerSubscribe = function(subscriber) {
-        var _this = this;
-        var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;
-        if (hasError || isStopped) {
-          return Subscription_1.EMPTY_SUBSCRIPTION;
-        }
-        this.currentObservers = null;
-        observers.push(subscriber);
-        return new Subscription_1.Subscription(function() {
-          _this.currentObservers = null;
-          arrRemove_1.arrRemove(observers, subscriber);
-        });
-      };
-      Subject3.prototype._checkFinalizedStatuses = function(subscriber) {
-        var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;
-        if (hasError) {
-          subscriber.error(thrownError);
-        } else if (isStopped) {
-          subscriber.complete();
-        }
-      };
-      Subject3.prototype.asObservable = function() {
-        var observable = new Observable_1.Observable();
-        observable.source = this;
-        return observable;
-      };
-      Subject3.create = function(destination, source) {
-        return new AnonymousSubject(destination, source);
-      };
-      return Subject3;
-    }(Observable_1.Observable);
-    exports.Subject = Subject2;
-    var AnonymousSubject = function(_super) {
-      __extends(AnonymousSubject2, _super);
-      function AnonymousSubject2(destination, source) {
-        var _this = _super.call(this) || this;
-        _this.destination = destination;
-        _this.source = source;
-        return _this;
-      }
-      AnonymousSubject2.prototype.next = function(value) {
-        var _a, _b;
-        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);
-      };
-      AnonymousSubject2.prototype.error = function(err) {
-        var _a, _b;
-        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);
-      };
-      AnonymousSubject2.prototype.complete = function() {
-        var _a, _b;
-        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);
-      };
-      AnonymousSubject2.prototype._subscribe = function(subscriber) {
-        var _a, _b;
-        return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : Subscription_1.EMPTY_SUBSCRIPTION;
-      };
-      return AnonymousSubject2;
-    }(Subject2);
-    exports.AnonymousSubject = AnonymousSubject;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/BehaviorSubject.js
-var require_BehaviorSubject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/BehaviorSubject.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.BehaviorSubject = void 0;
-    var Subject_1 = require_Subject();
-    var BehaviorSubject2 = function(_super) {
-      __extends(BehaviorSubject3, _super);
-      function BehaviorSubject3(_value) {
-        var _this = _super.call(this) || this;
-        _this._value = _value;
-        return _this;
-      }
-      Object.defineProperty(BehaviorSubject3.prototype, "value", {
-        get: function() {
-          return this.getValue();
-        },
-        enumerable: false,
-        configurable: true
-      });
-      BehaviorSubject3.prototype._subscribe = function(subscriber) {
-        var subscription = _super.prototype._subscribe.call(this, subscriber);
-        !subscription.closed && subscriber.next(this._value);
-        return subscription;
-      };
-      BehaviorSubject3.prototype.getValue = function() {
-        var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;
-        if (hasError) {
-          throw thrownError;
-        }
-        this._throwIfClosed();
-        return _value;
-      };
-      BehaviorSubject3.prototype.next = function(value) {
-        _super.prototype.next.call(this, this._value = value);
-      };
-      return BehaviorSubject3;
-    }(Subject_1.Subject);
-    exports.BehaviorSubject = BehaviorSubject2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/dateTimestampProvider.js
-var require_dateTimestampProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/dateTimestampProvider.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.dateTimestampProvider = void 0;
-    exports.dateTimestampProvider = {
-      now: function() {
-        return (exports.dateTimestampProvider.delegate || Date).now();
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/ReplaySubject.js
-var require_ReplaySubject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/ReplaySubject.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.ReplaySubject = void 0;
-    var Subject_1 = require_Subject();
-    var dateTimestampProvider_1 = require_dateTimestampProvider();
-    var ReplaySubject = function(_super) {
-      __extends(ReplaySubject2, _super);
-      function ReplaySubject2(_bufferSize, _windowTime, _timestampProvider) {
-        if (_bufferSize === void 0) {
-          _bufferSize = Infinity;
-        }
-        if (_windowTime === void 0) {
-          _windowTime = Infinity;
-        }
-        if (_timestampProvider === void 0) {
-          _timestampProvider = dateTimestampProvider_1.dateTimestampProvider;
-        }
-        var _this = _super.call(this) || this;
-        _this._bufferSize = _bufferSize;
-        _this._windowTime = _windowTime;
-        _this._timestampProvider = _timestampProvider;
-        _this._buffer = [];
-        _this._infiniteTimeWindow = true;
-        _this._infiniteTimeWindow = _windowTime === Infinity;
-        _this._bufferSize = Math.max(1, _bufferSize);
-        _this._windowTime = Math.max(1, _windowTime);
-        return _this;
-      }
-      ReplaySubject2.prototype.next = function(value) {
-        var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;
-        if (!isStopped) {
-          _buffer.push(value);
-          !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);
-        }
-        this._trimBuffer();
-        _super.prototype.next.call(this, value);
-      };
-      ReplaySubject2.prototype._subscribe = function(subscriber) {
-        this._throwIfClosed();
-        this._trimBuffer();
-        var subscription = this._innerSubscribe(subscriber);
-        var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;
-        var copy = _buffer.slice();
-        for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {
-          subscriber.next(copy[i]);
-        }
-        this._checkFinalizedStatuses(subscriber);
-        return subscription;
-      };
-      ReplaySubject2.prototype._trimBuffer = function() {
-        var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;
-        var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;
-        _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);
-        if (!_infiniteTimeWindow) {
-          var now = _timestampProvider.now();
-          var last = 0;
-          for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {
-            last = i;
-          }
-          last && _buffer.splice(0, last + 1);
-        }
-      };
-      return ReplaySubject2;
-    }(Subject_1.Subject);
-    exports.ReplaySubject = ReplaySubject;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/AsyncSubject.js
-var require_AsyncSubject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/AsyncSubject.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AsyncSubject = void 0;
-    var Subject_1 = require_Subject();
-    var AsyncSubject = function(_super) {
-      __extends(AsyncSubject2, _super);
-      function AsyncSubject2() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this._value = null;
-        _this._hasValue = false;
-        _this._isComplete = false;
-        return _this;
-      }
-      AsyncSubject2.prototype._checkFinalizedStatuses = function(subscriber) {
-        var _a = this, hasError = _a.hasError, _hasValue = _a._hasValue, _value = _a._value, thrownError = _a.thrownError, isStopped = _a.isStopped, _isComplete = _a._isComplete;
-        if (hasError) {
-          subscriber.error(thrownError);
-        } else if (isStopped || _isComplete) {
-          _hasValue && subscriber.next(_value);
-          subscriber.complete();
-        }
-      };
-      AsyncSubject2.prototype.next = function(value) {
-        if (!this.isStopped) {
-          this._value = value;
-          this._hasValue = true;
-        }
-      };
-      AsyncSubject2.prototype.complete = function() {
-        var _a = this, _hasValue = _a._hasValue, _value = _a._value, _isComplete = _a._isComplete;
-        if (!_isComplete) {
-          this._isComplete = true;
-          _hasValue && _super.prototype.next.call(this, _value);
-          _super.prototype.complete.call(this);
-        }
-      };
-      return AsyncSubject2;
-    }(Subject_1.Subject);
-    exports.AsyncSubject = AsyncSubject;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/Action.js
-var require_Action = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/Action.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.Action = void 0;
-    var Subscription_1 = require_Subscription();
-    var Action = function(_super) {
-      __extends(Action2, _super);
-      function Action2(scheduler, work) {
-        return _super.call(this) || this;
-      }
-      Action2.prototype.schedule = function(state, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        return this;
-      };
-      return Action2;
-    }(Subscription_1.Subscription);
-    exports.Action = Action;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/intervalProvider.js
-var require_intervalProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/intervalProvider.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.intervalProvider = void 0;
-    exports.intervalProvider = {
-      setInterval: function(handler, timeout) {
-        var args = [];
-        for (var _i = 2; _i < arguments.length; _i++) {
-          args[_i - 2] = arguments[_i];
-        }
-        var delegate = exports.intervalProvider.delegate;
-        if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {
-          return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));
-        }
-        return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));
-      },
-      clearInterval: function(handle) {
-        var delegate = exports.intervalProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AsyncAction.js
-var require_AsyncAction = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AsyncAction.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AsyncAction = void 0;
-    var Action_1 = require_Action();
-    var intervalProvider_1 = require_intervalProvider();
-    var arrRemove_1 = require_arrRemove();
-    var AsyncAction = function(_super) {
-      __extends(AsyncAction2, _super);
-      function AsyncAction2(scheduler, work) {
-        var _this = _super.call(this, scheduler, work) || this;
-        _this.scheduler = scheduler;
-        _this.work = work;
-        _this.pending = false;
-        return _this;
-      }
-      AsyncAction2.prototype.schedule = function(state, delay) {
-        var _a;
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (this.closed) {
-          return this;
-        }
-        this.state = state;
-        var id = this.id;
-        var scheduler = this.scheduler;
-        if (id != null) {
-          this.id = this.recycleAsyncId(scheduler, id, delay);
-        }
-        this.pending = true;
-        this.delay = delay;
-        this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);
-        return this;
-      };
-      AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        return intervalProvider_1.intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);
-      };
-      AsyncAction2.prototype.recycleAsyncId = function(_scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay != null && this.delay === delay && this.pending === false) {
-          return id;
-        }
-        if (id != null) {
-          intervalProvider_1.intervalProvider.clearInterval(id);
-        }
-        return void 0;
-      };
-      AsyncAction2.prototype.execute = function(state, delay) {
-        if (this.closed) {
-          return new Error("executing a cancelled action");
-        }
-        this.pending = false;
-        var error = this._execute(state, delay);
-        if (error) {
-          return error;
-        } else if (this.pending === false && this.id != null) {
-          this.id = this.recycleAsyncId(this.scheduler, this.id, null);
-        }
-      };
-      AsyncAction2.prototype._execute = function(state, _delay) {
-        var errored = false;
-        var errorValue;
-        try {
-          this.work(state);
-        } catch (e) {
-          errored = true;
-          errorValue = e ? e : new Error("Scheduled action threw falsy error");
-        }
-        if (errored) {
-          this.unsubscribe();
-          return errorValue;
-        }
-      };
-      AsyncAction2.prototype.unsubscribe = function() {
-        if (!this.closed) {
-          var _a = this, id = _a.id, scheduler = _a.scheduler;
-          var actions = scheduler.actions;
-          this.work = this.state = this.scheduler = null;
-          this.pending = false;
-          arrRemove_1.arrRemove(actions, this);
-          if (id != null) {
-            this.id = this.recycleAsyncId(scheduler, id, null);
-          }
-          this.delay = null;
-          _super.prototype.unsubscribe.call(this);
-        }
-      };
-      return AsyncAction2;
-    }(Action_1.Action);
-    exports.AsyncAction = AsyncAction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/Immediate.js
-var require_Immediate = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/Immediate.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.TestTools = exports.Immediate = void 0;
-    var nextHandle = 1;
-    var resolved;
-    var activeHandles = {};
-    function findAndClearHandle(handle) {
-      if (handle in activeHandles) {
-        delete activeHandles[handle];
-        return true;
-      }
-      return false;
-    }
-    exports.Immediate = {
-      setImmediate: function(cb) {
-        var handle = nextHandle++;
-        activeHandles[handle] = true;
-        if (!resolved) {
-          resolved = Promise.resolve();
-        }
-        resolved.then(function() {
-          return findAndClearHandle(handle) && cb();
-        });
-        return handle;
-      },
-      clearImmediate: function(handle) {
-        findAndClearHandle(handle);
-      }
-    };
-    exports.TestTools = {
-      pending: function() {
-        return Object.keys(activeHandles).length;
-      }
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/immediateProvider.js
-var require_immediateProvider = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/immediateProvider.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.immediateProvider = void 0;
-    var Immediate_1 = require_Immediate();
-    var setImmediate = Immediate_1.Immediate.setImmediate;
-    var clearImmediate = Immediate_1.Immediate.clearImmediate;
-    exports.immediateProvider = {
-      setImmediate: function() {
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-          args[_i] = arguments[_i];
-        }
-        var delegate = exports.immediateProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args)));
-      },
-      clearImmediate: function(handle) {
-        var delegate = exports.immediateProvider.delegate;
-        return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);
-      },
-      delegate: void 0
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AsapAction.js
-var require_AsapAction = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AsapAction.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AsapAction = void 0;
-    var AsyncAction_1 = require_AsyncAction();
-    var immediateProvider_1 = require_immediateProvider();
-    var AsapAction = function(_super) {
-      __extends(AsapAction2, _super);
-      function AsapAction2(scheduler, work) {
-        var _this = _super.call(this, scheduler, work) || this;
-        _this.scheduler = scheduler;
-        _this.work = work;
-        return _this;
-      }
-      AsapAction2.prototype.requestAsyncId = function(scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay !== null && delay > 0) {
-          return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
-        }
-        scheduler.actions.push(this);
-        return scheduler._scheduled || (scheduler._scheduled = immediateProvider_1.immediateProvider.setImmediate(scheduler.flush.bind(scheduler, void 0)));
-      };
-      AsapAction2.prototype.recycleAsyncId = function(scheduler, id, delay) {
-        var _a;
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay != null ? delay > 0 : this.delay > 0) {
-          return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
-        }
-        var actions = scheduler.actions;
-        if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {
-          immediateProvider_1.immediateProvider.clearImmediate(id);
-          if (scheduler._scheduled === id) {
-            scheduler._scheduled = void 0;
-          }
-        }
-        return void 0;
-      };
-      return AsapAction2;
-    }(AsyncAction_1.AsyncAction);
-    exports.AsapAction = AsapAction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Scheduler.js
-var require_Scheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Scheduler.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.Scheduler = void 0;
-    var dateTimestampProvider_1 = require_dateTimestampProvider();
-    var Scheduler = function() {
-      function Scheduler2(schedulerActionCtor, now) {
-        if (now === void 0) {
-          now = Scheduler2.now;
-        }
-        this.schedulerActionCtor = schedulerActionCtor;
-        this.now = now;
-      }
-      Scheduler2.prototype.schedule = function(work, delay, state) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        return new this.schedulerActionCtor(this, work).schedule(state, delay);
-      };
-      Scheduler2.now = dateTimestampProvider_1.dateTimestampProvider.now;
-      return Scheduler2;
-    }();
-    exports.Scheduler = Scheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AsyncScheduler.js
-var require_AsyncScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AsyncScheduler.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AsyncScheduler = void 0;
-    var Scheduler_1 = require_Scheduler();
-    var AsyncScheduler = function(_super) {
-      __extends(AsyncScheduler2, _super);
-      function AsyncScheduler2(SchedulerAction, now) {
-        if (now === void 0) {
-          now = Scheduler_1.Scheduler.now;
-        }
-        var _this = _super.call(this, SchedulerAction, now) || this;
-        _this.actions = [];
-        _this._active = false;
-        return _this;
-      }
-      AsyncScheduler2.prototype.flush = function(action) {
-        var actions = this.actions;
-        if (this._active) {
-          actions.push(action);
-          return;
-        }
-        var error;
-        this._active = true;
-        do {
-          if (error = action.execute(action.state, action.delay)) {
-            break;
-          }
-        } while (action = actions.shift());
-        this._active = false;
-        if (error) {
-          while (action = actions.shift()) {
-            action.unsubscribe();
-          }
-          throw error;
-        }
-      };
-      return AsyncScheduler2;
-    }(Scheduler_1.Scheduler);
-    exports.AsyncScheduler = AsyncScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AsapScheduler.js
-var require_AsapScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AsapScheduler.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AsapScheduler = void 0;
-    var AsyncScheduler_1 = require_AsyncScheduler();
-    var AsapScheduler = function(_super) {
-      __extends(AsapScheduler2, _super);
-      function AsapScheduler2() {
-        return _super !== null && _super.apply(this, arguments) || this;
-      }
-      AsapScheduler2.prototype.flush = function(action) {
-        this._active = true;
-        var flushId = this._scheduled;
-        this._scheduled = void 0;
-        var actions = this.actions;
-        var error;
-        action = action || actions.shift();
-        do {
-          if (error = action.execute(action.state, action.delay)) {
-            break;
-          }
-        } while ((action = actions[0]) && action.id === flushId && actions.shift());
-        this._active = false;
-        if (error) {
-          while ((action = actions[0]) && action.id === flushId && actions.shift()) {
-            action.unsubscribe();
-          }
-          throw error;
-        }
-      };
-      return AsapScheduler2;
-    }(AsyncScheduler_1.AsyncScheduler);
-    exports.AsapScheduler = AsapScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/asap.js
-var require_asap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/asap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.asap = exports.asapScheduler = void 0;
-    var AsapAction_1 = require_AsapAction();
-    var AsapScheduler_1 = require_AsapScheduler();
-    exports.asapScheduler = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction);
-    exports.asap = exports.asapScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/async.js
-var require_async = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/async.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.async = exports.asyncScheduler = void 0;
-    var AsyncAction_1 = require_AsyncAction();
-    var AsyncScheduler_1 = require_AsyncScheduler();
-    exports.asyncScheduler = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
-    exports.async = exports.asyncScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/QueueAction.js
-var require_QueueAction = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/QueueAction.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.QueueAction = void 0;
-    var AsyncAction_1 = require_AsyncAction();
-    var QueueAction = function(_super) {
-      __extends(QueueAction2, _super);
-      function QueueAction2(scheduler, work) {
-        var _this = _super.call(this, scheduler, work) || this;
-        _this.scheduler = scheduler;
-        _this.work = work;
-        return _this;
-      }
-      QueueAction2.prototype.schedule = function(state, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay > 0) {
-          return _super.prototype.schedule.call(this, state, delay);
-        }
-        this.delay = delay;
-        this.state = state;
-        this.scheduler.flush(this);
-        return this;
-      };
-      QueueAction2.prototype.execute = function(state, delay) {
-        return delay > 0 || this.closed ? _super.prototype.execute.call(this, state, delay) : this._execute(state, delay);
-      };
-      QueueAction2.prototype.requestAsyncId = function(scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay != null && delay > 0 || delay == null && this.delay > 0) {
-          return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
-        }
-        scheduler.flush(this);
-        return 0;
-      };
-      return QueueAction2;
-    }(AsyncAction_1.AsyncAction);
-    exports.QueueAction = QueueAction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/QueueScheduler.js
-var require_QueueScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/QueueScheduler.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.QueueScheduler = void 0;
-    var AsyncScheduler_1 = require_AsyncScheduler();
-    var QueueScheduler = function(_super) {
-      __extends(QueueScheduler2, _super);
-      function QueueScheduler2() {
-        return _super !== null && _super.apply(this, arguments) || this;
-      }
-      return QueueScheduler2;
-    }(AsyncScheduler_1.AsyncScheduler);
-    exports.QueueScheduler = QueueScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/queue.js
-var require_queue = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/queue.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.queue = exports.queueScheduler = void 0;
-    var QueueAction_1 = require_QueueAction();
-    var QueueScheduler_1 = require_QueueScheduler();
-    exports.queueScheduler = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);
-    exports.queue = exports.queueScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameAction.js
-var require_AnimationFrameAction = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameAction.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AnimationFrameAction = void 0;
-    var AsyncAction_1 = require_AsyncAction();
-    var animationFrameProvider_1 = require_animationFrameProvider();
-    var AnimationFrameAction = function(_super) {
-      __extends(AnimationFrameAction2, _super);
-      function AnimationFrameAction2(scheduler, work) {
-        var _this = _super.call(this, scheduler, work) || this;
-        _this.scheduler = scheduler;
-        _this.work = work;
-        return _this;
-      }
-      AnimationFrameAction2.prototype.requestAsyncId = function(scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay !== null && delay > 0) {
-          return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
-        }
-        scheduler.actions.push(this);
-        return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function() {
-          return scheduler.flush(void 0);
-        }));
-      };
-      AnimationFrameAction2.prototype.recycleAsyncId = function(scheduler, id, delay) {
-        var _a;
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (delay != null ? delay > 0 : this.delay > 0) {
-          return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
-        }
-        var actions = scheduler.actions;
-        if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {
-          animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id);
-          scheduler._scheduled = void 0;
-        }
-        return void 0;
-      };
-      return AnimationFrameAction2;
-    }(AsyncAction_1.AsyncAction);
-    exports.AnimationFrameAction = AnimationFrameAction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameScheduler.js
-var require_AnimationFrameScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameScheduler.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.AnimationFrameScheduler = void 0;
-    var AsyncScheduler_1 = require_AsyncScheduler();
-    var AnimationFrameScheduler = function(_super) {
-      __extends(AnimationFrameScheduler2, _super);
-      function AnimationFrameScheduler2() {
-        return _super !== null && _super.apply(this, arguments) || this;
-      }
-      AnimationFrameScheduler2.prototype.flush = function(action) {
-        this._active = true;
-        var flushId = this._scheduled;
-        this._scheduled = void 0;
-        var actions = this.actions;
-        var error;
-        action = action || actions.shift();
-        do {
-          if (error = action.execute(action.state, action.delay)) {
-            break;
-          }
-        } while ((action = actions[0]) && action.id === flushId && actions.shift());
-        this._active = false;
-        if (error) {
-          while ((action = actions[0]) && action.id === flushId && actions.shift()) {
-            action.unsubscribe();
-          }
-          throw error;
-        }
-      };
-      return AnimationFrameScheduler2;
-    }(AsyncScheduler_1.AsyncScheduler);
-    exports.AnimationFrameScheduler = AnimationFrameScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/animationFrame.js
-var require_animationFrame = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/animationFrame.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.animationFrame = exports.animationFrameScheduler = void 0;
-    var AnimationFrameAction_1 = require_AnimationFrameAction();
-    var AnimationFrameScheduler_1 = require_AnimationFrameScheduler();
-    exports.animationFrameScheduler = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction);
-    exports.animationFrame = exports.animationFrameScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduler/VirtualTimeScheduler.js
-var require_VirtualTimeScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduler/VirtualTimeScheduler.js"(exports) {
-    "use strict";
-    var __extends = exports && exports.__extends || /* @__PURE__ */ function() {
-      var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf || {
-          __proto__: []
-        } instanceof Array && function(d2, b2) {
-          d2.__proto__ = b2;
-        } || function(d2, b2) {
-          for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
-        };
-        return extendStatics(d, b);
-      };
-      return function(d, b) {
-        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() {
-          this.constructor = d;
-        }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-      };
-    }();
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.VirtualAction = exports.VirtualTimeScheduler = void 0;
-    var AsyncAction_1 = require_AsyncAction();
-    var Subscription_1 = require_Subscription();
-    var AsyncScheduler_1 = require_AsyncScheduler();
-    var VirtualTimeScheduler = function(_super) {
-      __extends(VirtualTimeScheduler2, _super);
-      function VirtualTimeScheduler2(schedulerActionCtor, maxFrames) {
-        if (schedulerActionCtor === void 0) {
-          schedulerActionCtor = VirtualAction;
-        }
-        if (maxFrames === void 0) {
-          maxFrames = Infinity;
-        }
-        var _this = _super.call(this, schedulerActionCtor, function() {
-          return _this.frame;
-        }) || this;
-        _this.maxFrames = maxFrames;
-        _this.frame = 0;
-        _this.index = -1;
-        return _this;
-      }
-      VirtualTimeScheduler2.prototype.flush = function() {
-        var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
-        var error;
-        var action;
-        while ((action = actions[0]) && action.delay <= maxFrames) {
-          actions.shift();
-          this.frame = action.delay;
-          if (error = action.execute(action.state, action.delay)) {
-            break;
-          }
-        }
-        if (error) {
-          while (action = actions.shift()) {
-            action.unsubscribe();
-          }
-          throw error;
-        }
-      };
-      VirtualTimeScheduler2.frameTimeFactor = 10;
-      return VirtualTimeScheduler2;
-    }(AsyncScheduler_1.AsyncScheduler);
-    exports.VirtualTimeScheduler = VirtualTimeScheduler;
-    var VirtualAction = function(_super) {
-      __extends(VirtualAction2, _super);
-      function VirtualAction2(scheduler, work, index) {
-        if (index === void 0) {
-          index = scheduler.index += 1;
-        }
-        var _this = _super.call(this, scheduler, work) || this;
-        _this.scheduler = scheduler;
-        _this.work = work;
-        _this.index = index;
-        _this.active = true;
-        _this.index = scheduler.index = index;
-        return _this;
-      }
-      VirtualAction2.prototype.schedule = function(state, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        if (Number.isFinite(delay)) {
-          if (!this.id) {
-            return _super.prototype.schedule.call(this, state, delay);
-          }
-          this.active = false;
-          var action = new VirtualAction2(this.scheduler, this.work);
-          this.add(action);
-          return action.schedule(state, delay);
-        } else {
-          return Subscription_1.Subscription.EMPTY;
-        }
-      };
-      VirtualAction2.prototype.requestAsyncId = function(scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        this.delay = scheduler.frame + delay;
-        var actions = scheduler.actions;
-        actions.push(this);
-        actions.sort(VirtualAction2.sortActions);
-        return 1;
-      };
-      VirtualAction2.prototype.recycleAsyncId = function(scheduler, id, delay) {
-        if (delay === void 0) {
-          delay = 0;
-        }
-        return void 0;
-      };
-      VirtualAction2.prototype._execute = function(state, delay) {
-        if (this.active === true) {
-          return _super.prototype._execute.call(this, state, delay);
-        }
-      };
-      VirtualAction2.sortActions = function(a, b) {
-        if (a.delay === b.delay) {
-          if (a.index === b.index) {
-            return 0;
-          } else if (a.index > b.index) {
-            return 1;
-          } else {
-            return -1;
-          }
-        } else if (a.delay > b.delay) {
-          return 1;
-        } else {
-          return -1;
-        }
-      };
-      return VirtualAction2;
-    }(AsyncAction_1.AsyncAction);
-    exports.VirtualAction = VirtualAction;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/empty.js
-var require_empty = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/empty.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.empty = exports.EMPTY = void 0;
-    var Observable_1 = require_Observable();
-    exports.EMPTY = new Observable_1.Observable(function(subscriber) {
-      return subscriber.complete();
-    });
-    function empty(scheduler) {
-      return scheduler ? emptyScheduled(scheduler) : exports.EMPTY;
-    }
-    exports.empty = empty;
-    function emptyScheduled(scheduler) {
-      return new Observable_1.Observable(function(subscriber) {
-        return scheduler.schedule(function() {
-          return subscriber.complete();
-        });
-      });
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isScheduler.js
-var require_isScheduler = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isScheduler.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isScheduler = void 0;
-    var isFunction_1 = require_isFunction();
-    function isScheduler(value) {
-      return value && isFunction_1.isFunction(value.schedule);
-    }
-    exports.isScheduler = isScheduler;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/args.js
-var require_args = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/args.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.popNumber = exports.popScheduler = exports.popResultSelector = void 0;
-    var isFunction_1 = require_isFunction();
-    var isScheduler_1 = require_isScheduler();
-    function last(arr) {
-      return arr[arr.length - 1];
-    }
-    function popResultSelector(args) {
-      return isFunction_1.isFunction(last(args)) ? args.pop() : void 0;
-    }
-    exports.popResultSelector = popResultSelector;
-    function popScheduler(args) {
-      return isScheduler_1.isScheduler(last(args)) ? args.pop() : void 0;
-    }
-    exports.popScheduler = popScheduler;
-    function popNumber(args, defaultValue) {
-      return typeof last(args) === "number" ? args.pop() : defaultValue;
-    }
-    exports.popNumber = popNumber;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isArrayLike.js
-var require_isArrayLike = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isArrayLike.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isArrayLike = void 0;
-    exports.isArrayLike = function(x) {
-      return x && typeof x.length === "number" && typeof x !== "function";
-    };
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isPromise.js
-var require_isPromise = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isPromise.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isPromise = void 0;
-    var isFunction_1 = require_isFunction();
-    function isPromise2(value) {
-      return isFunction_1.isFunction(value === null || value === void 0 ? void 0 : value.then);
-    }
-    exports.isPromise = isPromise2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isInteropObservable.js
-var require_isInteropObservable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isInteropObservable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isInteropObservable = void 0;
-    var observable_1 = require_observable();
-    var isFunction_1 = require_isFunction();
-    function isInteropObservable(input2) {
-      return isFunction_1.isFunction(input2[observable_1.observable]);
-    }
-    exports.isInteropObservable = isInteropObservable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isAsyncIterable.js
-var require_isAsyncIterable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isAsyncIterable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isAsyncIterable = void 0;
-    var isFunction_1 = require_isFunction();
-    function isAsyncIterable(obj) {
-      return Symbol.asyncIterator && isFunction_1.isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);
-    }
-    exports.isAsyncIterable = isAsyncIterable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/throwUnobservableError.js
-var require_throwUnobservableError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/throwUnobservableError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.createInvalidObservableTypeError = void 0;
-    function createInvalidObservableTypeError(input2) {
-      return new TypeError("You provided " + (input2 !== null && typeof input2 === "object" ? "an invalid object" : "'" + input2 + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
-    }
-    exports.createInvalidObservableTypeError = createInvalidObservableTypeError;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/symbol/iterator.js
-var require_iterator = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/symbol/iterator.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.iterator = exports.getSymbolIterator = void 0;
-    function getSymbolIterator() {
-      if (typeof Symbol !== "function" || !Symbol.iterator) {
-        return "@@iterator";
-      }
-      return Symbol.iterator;
-    }
-    exports.getSymbolIterator = getSymbolIterator;
-    exports.iterator = getSymbolIterator();
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isIterable.js
-var require_isIterable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isIterable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isIterable = void 0;
-    var iterator_1 = require_iterator();
-    var isFunction_1 = require_isFunction();
-    function isIterable(input2) {
-      return isFunction_1.isFunction(input2 === null || input2 === void 0 ? void 0 : input2[iterator_1.iterator]);
-    }
-    exports.isIterable = isIterable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isReadableStreamLike.js
-var require_isReadableStreamLike = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isReadableStreamLike.js"(exports) {
-    "use strict";
-    var __generator = exports && exports.__generator || function(thisArg, body) {
-      var _ = {
-        label: 0,
-        sent: function() {
-          if (t[0] & 1) throw t[1];
-          return t[1];
-        },
-        trys: [],
-        ops: []
-      }, f, y, t, g;
-      return g = {
-        next: verb(0),
-        "throw": verb(1),
-        "return": verb(2)
-      }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
-        return this;
-      }), g;
-      function verb(n) {
-        return function(v) {
-          return step([n, v]);
-        };
-      }
-      function step(op) {
-        if (f) throw new TypeError("Generator is already executing.");
-        while (_) try {
-          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
-          if (y = 0, t) op = [op[0] & 2, t.value];
-          switch (op[0]) {
-            case 0:
-            case 1:
-              t = op;
-              break;
-            case 4:
-              _.label++;
-              return {
-                value: op[1],
-                done: false
-              };
-            case 5:
-              _.label++;
-              y = op[1];
-              op = [0];
-              continue;
-            case 7:
-              op = _.ops.pop();
-              _.trys.pop();
-              continue;
-            default:
-              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
-                _ = 0;
-                continue;
-              }
-              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
-                _.label = op[1];
-                break;
-              }
-              if (op[0] === 6 && _.label < t[1]) {
-                _.label = t[1];
-                t = op;
-                break;
-              }
-              if (t && _.label < t[2]) {
-                _.label = t[2];
-                _.ops.push(op);
-                break;
-              }
-              if (t[2]) _.ops.pop();
-              _.trys.pop();
-              continue;
-          }
-          op = body.call(thisArg, _);
-        } catch (e) {
-          op = [6, e];
-          y = 0;
-        } finally {
-          f = t = 0;
-        }
-        if (op[0] & 5) throw op[1];
-        return {
-          value: op[0] ? op[1] : void 0,
-          done: true
-        };
-      }
-    };
-    var __await = exports && exports.__await || function(v) {
-      return this instanceof __await ? (this.v = v, this) : new __await(v);
-    };
-    var __asyncGenerator = exports && exports.__asyncGenerator || function(thisArg, _arguments, generator) {
-      if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-      var g = generator.apply(thisArg, _arguments || []), i, q = [];
-      return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
-        return this;
-      }, i;
-      function verb(n) {
-        if (g[n]) i[n] = function(v) {
-          return new Promise(function(a, b) {
-            q.push([n, v, a, b]) > 1 || resume(n, v);
-          });
-        };
-      }
-      function resume(n, v) {
-        try {
-          step(g[n](v));
-        } catch (e) {
-          settle(q[0][3], e);
-        }
-      }
-      function step(r) {
-        r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
-      }
-      function fulfill(value) {
-        resume("next", value);
-      }
-      function reject(value) {
-        resume("throw", value);
-      }
-      function settle(f, v) {
-        if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
-      }
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isReadableStreamLike = exports.readableStreamLikeToAsyncGenerator = void 0;
-    var isFunction_1 = require_isFunction();
-    function readableStreamLikeToAsyncGenerator(readableStream) {
-      return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {
-        var reader, _a, value, done;
-        return __generator(this, function(_b) {
-          switch (_b.label) {
-            case 0:
-              reader = readableStream.getReader();
-              _b.label = 1;
-            case 1:
-              _b.trys.push([1, , 9, 10]);
-              _b.label = 2;
-            case 2:
-              if (false) return [3, 8];
-              return [4, __await(reader.read())];
-            case 3:
-              _a = _b.sent(), value = _a.value, done = _a.done;
-              if (!done) return [3, 5];
-              return [4, __await(void 0)];
-            case 4:
-              return [2, _b.sent()];
-            case 5:
-              return [4, __await(value)];
-            case 6:
-              return [4, _b.sent()];
-            case 7:
-              _b.sent();
-              return [3, 2];
-            case 8:
-              return [3, 10];
-            case 9:
-              reader.releaseLock();
-              return [7];
-            case 10:
-              return [2];
-          }
-        });
-      });
-    }
-    exports.readableStreamLikeToAsyncGenerator = readableStreamLikeToAsyncGenerator;
-    function isReadableStreamLike(obj) {
-      return isFunction_1.isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);
-    }
-    exports.isReadableStreamLike = isReadableStreamLike;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/innerFrom.js
-var require_innerFrom = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/innerFrom.js"(exports) {
-    "use strict";
-    var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
-      function adopt(value) {
-        return value instanceof P ? value : new P(function(resolve) {
-          resolve(value);
-        });
-      }
-      return new (P || (P = Promise))(function(resolve, reject) {
-        function fulfilled(value) {
-          try {
-            step(generator.next(value));
-          } catch (e) {
-            reject(e);
-          }
-        }
-        function rejected(value) {
-          try {
-            step(generator["throw"](value));
-          } catch (e) {
-            reject(e);
-          }
-        }
-        function step(result) {
-          result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
-        }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-      });
-    };
-    var __generator = exports && exports.__generator || function(thisArg, body) {
-      var _ = {
-        label: 0,
-        sent: function() {
-          if (t[0] & 1) throw t[1];
-          return t[1];
-        },
-        trys: [],
-        ops: []
-      }, f, y, t, g;
-      return g = {
-        next: verb(0),
-        "throw": verb(1),
-        "return": verb(2)
-      }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
-        return this;
-      }), g;
-      function verb(n) {
-        return function(v) {
-          return step([n, v]);
-        };
-      }
-      function step(op) {
-        if (f) throw new TypeError("Generator is already executing.");
-        while (_) try {
-          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
-          if (y = 0, t) op = [op[0] & 2, t.value];
-          switch (op[0]) {
-            case 0:
-            case 1:
-              t = op;
-              break;
-            case 4:
-              _.label++;
-              return {
-                value: op[1],
-                done: false
-              };
-            case 5:
-              _.label++;
-              y = op[1];
-              op = [0];
-              continue;
-            case 7:
-              op = _.ops.pop();
-              _.trys.pop();
-              continue;
-            default:
-              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
-                _ = 0;
-                continue;
-              }
-              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
-                _.label = op[1];
-                break;
-              }
-              if (op[0] === 6 && _.label < t[1]) {
-                _.label = t[1];
-                t = op;
-                break;
-              }
-              if (t && _.label < t[2]) {
-                _.label = t[2];
-                _.ops.push(op);
-                break;
-              }
-              if (t[2]) _.ops.pop();
-              _.trys.pop();
-              continue;
-          }
-          op = body.call(thisArg, _);
-        } catch (e) {
-          op = [6, e];
-          y = 0;
-        } finally {
-          f = t = 0;
-        }
-        if (op[0] & 5) throw op[1];
-        return {
-          value: op[0] ? op[1] : void 0,
-          done: true
-        };
-      }
-    };
-    var __asyncValues = exports && exports.__asyncValues || function(o) {
-      if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-      var m = o[Symbol.asyncIterator], i;
-      return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
-        return this;
-      }, i);
-      function verb(n) {
-        i[n] = o[n] && function(v) {
-          return new Promise(function(resolve, reject) {
-            v = o[n](v), settle(resolve, reject, v.done, v.value);
-          });
-        };
-      }
-      function settle(resolve, reject, d, v) {
-        Promise.resolve(v).then(function(v2) {
-          resolve({
-            value: v2,
-            done: d
-          });
-        }, reject);
-      }
-    };
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.fromReadableStreamLike = exports.fromAsyncIterable = exports.fromIterable = exports.fromPromise = exports.fromArrayLike = exports.fromInteropObservable = exports.innerFrom = void 0;
-    var isArrayLike_1 = require_isArrayLike();
-    var isPromise_1 = require_isPromise();
-    var Observable_1 = require_Observable();
-    var isInteropObservable_1 = require_isInteropObservable();
-    var isAsyncIterable_1 = require_isAsyncIterable();
-    var throwUnobservableError_1 = require_throwUnobservableError();
-    var isIterable_1 = require_isIterable();
-    var isReadableStreamLike_1 = require_isReadableStreamLike();
-    var isFunction_1 = require_isFunction();
-    var reportUnhandledError_1 = require_reportUnhandledError();
-    var observable_1 = require_observable();
-    function innerFrom(input2) {
-      if (input2 instanceof Observable_1.Observable) {
-        return input2;
-      }
-      if (input2 != null) {
-        if (isInteropObservable_1.isInteropObservable(input2)) {
-          return fromInteropObservable(input2);
-        }
-        if (isArrayLike_1.isArrayLike(input2)) {
-          return fromArrayLike(input2);
-        }
-        if (isPromise_1.isPromise(input2)) {
-          return fromPromise(input2);
-        }
-        if (isAsyncIterable_1.isAsyncIterable(input2)) {
-          return fromAsyncIterable(input2);
-        }
-        if (isIterable_1.isIterable(input2)) {
-          return fromIterable(input2);
-        }
-        if (isReadableStreamLike_1.isReadableStreamLike(input2)) {
-          return fromReadableStreamLike(input2);
-        }
-      }
-      throw throwUnobservableError_1.createInvalidObservableTypeError(input2);
-    }
-    exports.innerFrom = innerFrom;
-    function fromInteropObservable(obj) {
-      return new Observable_1.Observable(function(subscriber) {
-        var obs = obj[observable_1.observable]();
-        if (isFunction_1.isFunction(obs.subscribe)) {
-          return obs.subscribe(subscriber);
-        }
-        throw new TypeError("Provided object does not correctly implement Symbol.observable");
-      });
-    }
-    exports.fromInteropObservable = fromInteropObservable;
-    function fromArrayLike(array) {
-      return new Observable_1.Observable(function(subscriber) {
-        for (var i = 0; i < array.length && !subscriber.closed; i++) {
-          subscriber.next(array[i]);
-        }
-        subscriber.complete();
-      });
-    }
-    exports.fromArrayLike = fromArrayLike;
-    function fromPromise(promise) {
-      return new Observable_1.Observable(function(subscriber) {
-        promise.then(function(value) {
-          if (!subscriber.closed) {
-            subscriber.next(value);
-            subscriber.complete();
-          }
-        }, function(err) {
-          return subscriber.error(err);
-        }).then(null, reportUnhandledError_1.reportUnhandledError);
-      });
-    }
-    exports.fromPromise = fromPromise;
-    function fromIterable(iterable) {
-      return new Observable_1.Observable(function(subscriber) {
-        var e_1, _a;
-        try {
-          for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
-            var value = iterable_1_1.value;
-            subscriber.next(value);
-            if (subscriber.closed) {
-              return;
-            }
-          }
-        } catch (e_1_1) {
-          e_1 = {
-            error: e_1_1
-          };
-        } finally {
-          try {
-            if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);
-          } finally {
-            if (e_1) throw e_1.error;
-          }
-        }
-        subscriber.complete();
-      });
-    }
-    exports.fromIterable = fromIterable;
-    function fromAsyncIterable(asyncIterable) {
-      return new Observable_1.Observable(function(subscriber) {
-        process(asyncIterable, subscriber).catch(function(err) {
-          return subscriber.error(err);
-        });
-      });
-    }
-    exports.fromAsyncIterable = fromAsyncIterable;
-    function fromReadableStreamLike(readableStream) {
-      return fromAsyncIterable(isReadableStreamLike_1.readableStreamLikeToAsyncGenerator(readableStream));
-    }
-    exports.fromReadableStreamLike = fromReadableStreamLike;
-    function process(asyncIterable, subscriber) {
-      var asyncIterable_1, asyncIterable_1_1;
-      var e_2, _a;
-      return __awaiter(this, void 0, void 0, function() {
-        var value, e_2_1;
-        return __generator(this, function(_b) {
-          switch (_b.label) {
-            case 0:
-              _b.trys.push([0, 5, 6, 11]);
-              asyncIterable_1 = __asyncValues(asyncIterable);
-              _b.label = 1;
-            case 1:
-              return [4, asyncIterable_1.next()];
-            case 2:
-              if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];
-              value = asyncIterable_1_1.value;
-              subscriber.next(value);
-              if (subscriber.closed) {
-                return [2];
-              }
-              _b.label = 3;
-            case 3:
-              return [3, 1];
-            case 4:
-              return [3, 11];
-            case 5:
-              e_2_1 = _b.sent();
-              e_2 = {
-                error: e_2_1
-              };
-              return [3, 11];
-            case 6:
-              _b.trys.push([6, , 9, 10]);
-              if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];
-              return [4, _a.call(asyncIterable_1)];
-            case 7:
-              _b.sent();
-              _b.label = 8;
-            case 8:
-              return [3, 10];
-            case 9:
-              if (e_2) throw e_2.error;
-              return [7];
-            case 10:
-              return [7];
-            case 11:
-              subscriber.complete();
-              return [2];
-          }
-        });
-      });
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/executeSchedule.js
-var require_executeSchedule = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/executeSchedule.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.executeSchedule = void 0;
-    function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {
-      if (delay === void 0) {
-        delay = 0;
-      }
-      if (repeat === void 0) {
-        repeat = false;
-      }
-      var scheduleSubscription = scheduler.schedule(function() {
-        work();
-        if (repeat) {
-          parentSubscription.add(this.schedule(null, delay));
-        } else {
-          this.unsubscribe();
-        }
-      }, delay);
-      parentSubscription.add(scheduleSubscription);
-      if (!repeat) {
-        return scheduleSubscription;
-      }
-    }
-    exports.executeSchedule = executeSchedule;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/observeOn.js
-var require_observeOn = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/observeOn.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.observeOn = void 0;
-    var executeSchedule_1 = require_executeSchedule();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function observeOn(scheduler, delay) {
-      if (delay === void 0) {
-        delay = 0;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            return subscriber.next(value);
-          }, delay);
-        }, function() {
-          return executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            return subscriber.complete();
-          }, delay);
-        }, function(err) {
-          return executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            return subscriber.error(err);
-          }, delay);
-        }));
-      });
-    }
-    exports.observeOn = observeOn;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/subscribeOn.js
-var require_subscribeOn = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/subscribeOn.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.subscribeOn = void 0;
-    var lift_1 = require_lift();
-    function subscribeOn(scheduler, delay) {
-      if (delay === void 0) {
-        delay = 0;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        subscriber.add(scheduler.schedule(function() {
-          return source.subscribe(subscriber);
-        }, delay));
-      });
-    }
-    exports.subscribeOn = subscribeOn;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduleObservable.js
-var require_scheduleObservable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduleObservable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduleObservable = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var observeOn_1 = require_observeOn();
-    var subscribeOn_1 = require_subscribeOn();
-    function scheduleObservable(input2, scheduler) {
-      return innerFrom_1.innerFrom(input2).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));
-    }
-    exports.scheduleObservable = scheduleObservable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/schedulePromise.js
-var require_schedulePromise = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/schedulePromise.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.schedulePromise = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var observeOn_1 = require_observeOn();
-    var subscribeOn_1 = require_subscribeOn();
-    function schedulePromise(input2, scheduler) {
-      return innerFrom_1.innerFrom(input2).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));
-    }
-    exports.schedulePromise = schedulePromise;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduleArray.js
-var require_scheduleArray = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduleArray.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduleArray = void 0;
-    var Observable_1 = require_Observable();
-    function scheduleArray(input2, scheduler) {
-      return new Observable_1.Observable(function(subscriber) {
-        var i = 0;
-        return scheduler.schedule(function() {
-          if (i === input2.length) {
-            subscriber.complete();
-          } else {
-            subscriber.next(input2[i++]);
-            if (!subscriber.closed) {
-              this.schedule();
-            }
-          }
-        });
-      });
-    }
-    exports.scheduleArray = scheduleArray;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduleIterable.js
-var require_scheduleIterable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduleIterable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduleIterable = void 0;
-    var Observable_1 = require_Observable();
-    var iterator_1 = require_iterator();
-    var isFunction_1 = require_isFunction();
-    var executeSchedule_1 = require_executeSchedule();
-    function scheduleIterable(input2, scheduler) {
-      return new Observable_1.Observable(function(subscriber) {
-        var iterator;
-        executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-          iterator = input2[iterator_1.iterator]();
-          executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            var _a;
-            var value;
-            var done;
-            try {
-              _a = iterator.next(), value = _a.value, done = _a.done;
-            } catch (err) {
-              subscriber.error(err);
-              return;
-            }
-            if (done) {
-              subscriber.complete();
-            } else {
-              subscriber.next(value);
-            }
-          }, 0, true);
-        });
-        return function() {
-          return isFunction_1.isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();
-        };
-      });
-    }
-    exports.scheduleIterable = scheduleIterable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduleAsyncIterable.js
-var require_scheduleAsyncIterable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduleAsyncIterable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduleAsyncIterable = void 0;
-    var Observable_1 = require_Observable();
-    var executeSchedule_1 = require_executeSchedule();
-    function scheduleAsyncIterable(input2, scheduler) {
-      if (!input2) {
-        throw new Error("Iterable cannot be null");
-      }
-      return new Observable_1.Observable(function(subscriber) {
-        executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-          var iterator = input2[Symbol.asyncIterator]();
-          executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            iterator.next().then(function(result) {
-              if (result.done) {
-                subscriber.complete();
-              } else {
-                subscriber.next(result.value);
-              }
-            });
-          }, 0, true);
-        });
-      });
-    }
-    exports.scheduleAsyncIterable = scheduleAsyncIterable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduleReadableStreamLike.js
-var require_scheduleReadableStreamLike = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduleReadableStreamLike.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduleReadableStreamLike = void 0;
-    var scheduleAsyncIterable_1 = require_scheduleAsyncIterable();
-    var isReadableStreamLike_1 = require_isReadableStreamLike();
-    function scheduleReadableStreamLike(input2, scheduler) {
-      return scheduleAsyncIterable_1.scheduleAsyncIterable(isReadableStreamLike_1.readableStreamLikeToAsyncGenerator(input2), scheduler);
-    }
-    exports.scheduleReadableStreamLike = scheduleReadableStreamLike;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/scheduled/scheduled.js
-var require_scheduled = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/scheduled/scheduled.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scheduled = void 0;
-    var scheduleObservable_1 = require_scheduleObservable();
-    var schedulePromise_1 = require_schedulePromise();
-    var scheduleArray_1 = require_scheduleArray();
-    var scheduleIterable_1 = require_scheduleIterable();
-    var scheduleAsyncIterable_1 = require_scheduleAsyncIterable();
-    var isInteropObservable_1 = require_isInteropObservable();
-    var isPromise_1 = require_isPromise();
-    var isArrayLike_1 = require_isArrayLike();
-    var isIterable_1 = require_isIterable();
-    var isAsyncIterable_1 = require_isAsyncIterable();
-    var throwUnobservableError_1 = require_throwUnobservableError();
-    var isReadableStreamLike_1 = require_isReadableStreamLike();
-    var scheduleReadableStreamLike_1 = require_scheduleReadableStreamLike();
-    function scheduled(input2, scheduler) {
-      if (input2 != null) {
-        if (isInteropObservable_1.isInteropObservable(input2)) {
-          return scheduleObservable_1.scheduleObservable(input2, scheduler);
-        }
-        if (isArrayLike_1.isArrayLike(input2)) {
-          return scheduleArray_1.scheduleArray(input2, scheduler);
-        }
-        if (isPromise_1.isPromise(input2)) {
-          return schedulePromise_1.schedulePromise(input2, scheduler);
-        }
-        if (isAsyncIterable_1.isAsyncIterable(input2)) {
-          return scheduleAsyncIterable_1.scheduleAsyncIterable(input2, scheduler);
-        }
-        if (isIterable_1.isIterable(input2)) {
-          return scheduleIterable_1.scheduleIterable(input2, scheduler);
-        }
-        if (isReadableStreamLike_1.isReadableStreamLike(input2)) {
-          return scheduleReadableStreamLike_1.scheduleReadableStreamLike(input2, scheduler);
-        }
-      }
-      throw throwUnobservableError_1.createInvalidObservableTypeError(input2);
-    }
-    exports.scheduled = scheduled;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/from.js
-var require_from = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/from.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.from = void 0;
-    var scheduled_1 = require_scheduled();
-    var innerFrom_1 = require_innerFrom();
-    function from(input2, scheduler) {
-      return scheduler ? scheduled_1.scheduled(input2, scheduler) : innerFrom_1.innerFrom(input2);
-    }
-    exports.from = from;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/of.js
-var require_of = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/of.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.of = void 0;
-    var args_1 = require_args();
-    var from_1 = require_from();
-    function of() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(args);
-      return from_1.from(args, scheduler);
-    }
-    exports.of = of;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/throwError.js
-var require_throwError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/throwError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.throwError = void 0;
-    var Observable_1 = require_Observable();
-    var isFunction_1 = require_isFunction();
-    function throwError2(errorOrErrorFactory, scheduler) {
-      var errorFactory = isFunction_1.isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function() {
-        return errorOrErrorFactory;
-      };
-      var init = function(subscriber) {
-        return subscriber.error(errorFactory());
-      };
-      return new Observable_1.Observable(scheduler ? function(subscriber) {
-        return scheduler.schedule(init, 0, subscriber);
-      } : init);
-    }
-    exports.throwError = throwError2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/Notification.js
-var require_Notification = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/Notification.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.observeNotification = exports.Notification = exports.NotificationKind = void 0;
-    var empty_1 = require_empty();
-    var of_1 = require_of();
-    var throwError_1 = require_throwError();
-    var isFunction_1 = require_isFunction();
-    var NotificationKind;
-    (function(NotificationKind2) {
-      NotificationKind2["NEXT"] = "N";
-      NotificationKind2["ERROR"] = "E";
-      NotificationKind2["COMPLETE"] = "C";
-    })(NotificationKind = exports.NotificationKind || (exports.NotificationKind = {}));
-    var Notification = function() {
-      function Notification2(kind, value, error) {
-        this.kind = kind;
-        this.value = value;
-        this.error = error;
-        this.hasValue = kind === "N";
-      }
-      Notification2.prototype.observe = function(observer) {
-        return observeNotification(this, observer);
-      };
-      Notification2.prototype.do = function(nextHandler, errorHandler, completeHandler) {
-        var _a = this, kind = _a.kind, value = _a.value, error = _a.error;
-        return kind === "N" ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === "E" ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler();
-      };
-      Notification2.prototype.accept = function(nextOrObserver, error, complete) {
-        var _a;
-        return isFunction_1.isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) ? this.observe(nextOrObserver) : this.do(nextOrObserver, error, complete);
-      };
-      Notification2.prototype.toObservable = function() {
-        var _a = this, kind = _a.kind, value = _a.value, error = _a.error;
-        var result = kind === "N" ? of_1.of(value) : kind === "E" ? throwError_1.throwError(function() {
-          return error;
-        }) : kind === "C" ? empty_1.EMPTY : 0;
-        if (!result) {
-          throw new TypeError("Unexpected notification kind " + kind);
-        }
-        return result;
-      };
-      Notification2.createNext = function(value) {
-        return new Notification2("N", value);
-      };
-      Notification2.createError = function(err) {
-        return new Notification2("E", void 0, err);
-      };
-      Notification2.createComplete = function() {
-        return Notification2.completeNotification;
-      };
-      Notification2.completeNotification = new Notification2("C");
-      return Notification2;
-    }();
-    exports.Notification = Notification;
-    function observeNotification(notification, observer) {
-      var _a, _b, _c;
-      var _d = notification, kind = _d.kind, value = _d.value, error = _d.error;
-      if (typeof kind !== "string") {
-        throw new TypeError('Invalid notification, missing "kind"');
-      }
-      kind === "N" ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === "E" ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
-    }
-    exports.observeNotification = observeNotification;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isObservable.js
-var require_isObservable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isObservable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isObservable = void 0;
-    var Observable_1 = require_Observable();
-    var isFunction_1 = require_isFunction();
-    function isObservable(obj) {
-      return !!obj && (obj instanceof Observable_1.Observable || isFunction_1.isFunction(obj.lift) && isFunction_1.isFunction(obj.subscribe));
-    }
-    exports.isObservable = isObservable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/EmptyError.js
-var require_EmptyError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/EmptyError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.EmptyError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.EmptyError = createErrorClass_1.createErrorClass(function(_super) {
-      return function EmptyErrorImpl() {
-        _super(this);
-        this.name = "EmptyError";
-        this.message = "no elements in sequence";
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/lastValueFrom.js
-var require_lastValueFrom = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/lastValueFrom.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.lastValueFrom = void 0;
-    var EmptyError_1 = require_EmptyError();
-    function lastValueFrom(source, config) {
-      var hasConfig = typeof config === "object";
-      return new Promise(function(resolve, reject) {
-        var _hasValue = false;
-        var _value;
-        source.subscribe({
-          next: function(value) {
-            _value = value;
-            _hasValue = true;
-          },
-          error: reject,
-          complete: function() {
-            if (_hasValue) {
-              resolve(_value);
-            } else if (hasConfig) {
-              resolve(config.defaultValue);
-            } else {
-              reject(new EmptyError_1.EmptyError());
-            }
-          }
-        });
-      });
-    }
-    exports.lastValueFrom = lastValueFrom;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/firstValueFrom.js
-var require_firstValueFrom = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/firstValueFrom.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.firstValueFrom = void 0;
-    var EmptyError_1 = require_EmptyError();
-    var Subscriber_1 = require_Subscriber();
-    function firstValueFrom(source, config) {
-      var hasConfig = typeof config === "object";
-      return new Promise(function(resolve, reject) {
-        var subscriber = new Subscriber_1.SafeSubscriber({
-          next: function(value) {
-            resolve(value);
-            subscriber.unsubscribe();
-          },
-          error: reject,
-          complete: function() {
-            if (hasConfig) {
-              resolve(config.defaultValue);
-            } else {
-              reject(new EmptyError_1.EmptyError());
-            }
-          }
-        });
-        source.subscribe(subscriber);
-      });
-    }
-    exports.firstValueFrom = firstValueFrom;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/ArgumentOutOfRangeError.js
-var require_ArgumentOutOfRangeError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/ArgumentOutOfRangeError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.ArgumentOutOfRangeError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.ArgumentOutOfRangeError = createErrorClass_1.createErrorClass(function(_super) {
-      return function ArgumentOutOfRangeErrorImpl() {
-        _super(this);
-        this.name = "ArgumentOutOfRangeError";
-        this.message = "argument out of range";
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/NotFoundError.js
-var require_NotFoundError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/NotFoundError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.NotFoundError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.NotFoundError = createErrorClass_1.createErrorClass(function(_super) {
-      return function NotFoundErrorImpl(message) {
-        _super(this);
-        this.name = "NotFoundError";
-        this.message = message;
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/SequenceError.js
-var require_SequenceError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/SequenceError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.SequenceError = void 0;
-    var createErrorClass_1 = require_createErrorClass();
-    exports.SequenceError = createErrorClass_1.createErrorClass(function(_super) {
-      return function SequenceErrorImpl(message) {
-        _super(this);
-        this.name = "SequenceError";
-        this.message = message;
-      };
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/isDate.js
-var require_isDate = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/isDate.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isValidDate = void 0;
-    function isValidDate(value) {
-      return value instanceof Date && !isNaN(value);
-    }
-    exports.isValidDate = isValidDate;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/timeout.js
-var require_timeout = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/timeout.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.timeout = exports.TimeoutError = void 0;
-    var async_1 = require_async();
-    var isDate_1 = require_isDate();
-    var lift_1 = require_lift();
-    var innerFrom_1 = require_innerFrom();
-    var createErrorClass_1 = require_createErrorClass();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var executeSchedule_1 = require_executeSchedule();
-    exports.TimeoutError = createErrorClass_1.createErrorClass(function(_super) {
-      return function TimeoutErrorImpl(info) {
-        if (info === void 0) {
-          info = null;
-        }
-        _super(this);
-        this.message = "Timeout has occurred";
-        this.name = "TimeoutError";
-        this.info = info;
-      };
-    });
-    function timeout(config, schedulerArg) {
-      var _a = isDate_1.isValidDate(config) ? {
-        first: config
-      } : typeof config === "number" ? {
-        each: config
-      } : config, first = _a.first, each = _a.each, _b = _a.with, _with = _b === void 0 ? timeoutErrorFactory : _b, _c = _a.scheduler, scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : async_1.asyncScheduler : _c, _d = _a.meta, meta = _d === void 0 ? null : _d;
-      if (first == null && each == null) {
-        throw new TypeError("No timeout provided.");
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var originalSourceSubscription;
-        var timerSubscription;
-        var lastValue = null;
-        var seen = 0;
-        var startTimer = function(delay) {
-          timerSubscription = executeSchedule_1.executeSchedule(subscriber, scheduler, function() {
-            try {
-              originalSourceSubscription.unsubscribe();
-              innerFrom_1.innerFrom(_with({
-                meta,
-                lastValue,
-                seen
-              })).subscribe(subscriber);
-            } catch (err) {
-              subscriber.error(err);
-            }
-          }, delay);
-        };
-        originalSourceSubscription = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();
-          seen++;
-          subscriber.next(lastValue = value);
-          each > 0 && startTimer(each);
-        }, void 0, void 0, function() {
-          if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {
-            timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();
-          }
-          lastValue = null;
-        }));
-        !seen && startTimer(first != null ? typeof first === "number" ? first : +first - scheduler.now() : each);
-      });
-    }
-    exports.timeout = timeout;
-    function timeoutErrorFactory(info) {
-      throw new exports.TimeoutError(info);
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/map.js
-var require_map = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/map.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.map = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function map2(project, thisArg) {
-      return lift_1.operate(function(source, subscriber) {
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          subscriber.next(project.call(thisArg, value, index++));
-        }));
-      });
-    }
-    exports.map = map2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/mapOneOrManyArgs.js
-var require_mapOneOrManyArgs = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/mapOneOrManyArgs.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mapOneOrManyArgs = void 0;
-    var map_1 = require_map();
-    var isArray = Array.isArray;
-    function callOrApply(fn, args) {
-      return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);
-    }
-    function mapOneOrManyArgs(fn) {
-      return map_1.map(function(args) {
-        return callOrApply(fn, args);
-      });
-    }
-    exports.mapOneOrManyArgs = mapOneOrManyArgs;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/bindCallbackInternals.js
-var require_bindCallbackInternals = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/bindCallbackInternals.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bindCallbackInternals = void 0;
-    var isScheduler_1 = require_isScheduler();
-    var Observable_1 = require_Observable();
-    var subscribeOn_1 = require_subscribeOn();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var observeOn_1 = require_observeOn();
-    var AsyncSubject_1 = require_AsyncSubject();
-    function bindCallbackInternals(isNodeStyle, callbackFunc, resultSelector, scheduler) {
-      if (resultSelector) {
-        if (isScheduler_1.isScheduler(resultSelector)) {
-          scheduler = resultSelector;
-        } else {
-          return function() {
-            var args = [];
-            for (var _i = 0; _i < arguments.length; _i++) {
-              args[_i] = arguments[_i];
-            }
-            return bindCallbackInternals(isNodeStyle, callbackFunc, scheduler).apply(this, args).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));
-          };
-        }
-      }
-      if (scheduler) {
-        return function() {
-          var args = [];
-          for (var _i = 0; _i < arguments.length; _i++) {
-            args[_i] = arguments[_i];
-          }
-          return bindCallbackInternals(isNodeStyle, callbackFunc).apply(this, args).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));
-        };
-      }
-      return function() {
-        var _this = this;
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-          args[_i] = arguments[_i];
-        }
-        var subject = new AsyncSubject_1.AsyncSubject();
-        var uninitialized = true;
-        return new Observable_1.Observable(function(subscriber) {
-          var subs = subject.subscribe(subscriber);
-          if (uninitialized) {
-            uninitialized = false;
-            var isAsync_1 = false;
-            var isComplete_1 = false;
-            callbackFunc.apply(_this, __spreadArray(__spreadArray([], __read(args)), [function() {
-              var results = [];
-              for (var _i2 = 0; _i2 < arguments.length; _i2++) {
-                results[_i2] = arguments[_i2];
-              }
-              if (isNodeStyle) {
-                var err = results.shift();
-                if (err != null) {
-                  subject.error(err);
-                  return;
-                }
-              }
-              subject.next(1 < results.length ? results : results[0]);
-              isComplete_1 = true;
-              if (isAsync_1) {
-                subject.complete();
-              }
-            }]));
-            if (isComplete_1) {
-              subject.complete();
-            }
-            isAsync_1 = true;
-          }
-          return subs;
-        });
-      };
-    }
-    exports.bindCallbackInternals = bindCallbackInternals;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/bindCallback.js
-var require_bindCallback = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/bindCallback.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bindCallback = void 0;
-    var bindCallbackInternals_1 = require_bindCallbackInternals();
-    function bindCallback(callbackFunc, resultSelector, scheduler) {
-      return bindCallbackInternals_1.bindCallbackInternals(false, callbackFunc, resultSelector, scheduler);
-    }
-    exports.bindCallback = bindCallback;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/bindNodeCallback.js
-var require_bindNodeCallback = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/bindNodeCallback.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bindNodeCallback = void 0;
-    var bindCallbackInternals_1 = require_bindCallbackInternals();
-    function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
-      return bindCallbackInternals_1.bindCallbackInternals(true, callbackFunc, resultSelector, scheduler);
-    }
-    exports.bindNodeCallback = bindNodeCallback;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/argsArgArrayOrObject.js
-var require_argsArgArrayOrObject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/argsArgArrayOrObject.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.argsArgArrayOrObject = void 0;
-    var isArray = Array.isArray;
-    var getPrototypeOf = Object.getPrototypeOf;
-    var objectProto = Object.prototype;
-    var getKeys = Object.keys;
-    function argsArgArrayOrObject(args) {
-      if (args.length === 1) {
-        var first_1 = args[0];
-        if (isArray(first_1)) {
-          return {
-            args: first_1,
-            keys: null
-          };
-        }
-        if (isPOJO(first_1)) {
-          var keys = getKeys(first_1);
-          return {
-            args: keys.map(function(key) {
-              return first_1[key];
-            }),
-            keys
-          };
-        }
-      }
-      return {
-        args,
-        keys: null
-      };
-    }
-    exports.argsArgArrayOrObject = argsArgArrayOrObject;
-    function isPOJO(obj) {
-      return obj && typeof obj === "object" && getPrototypeOf(obj) === objectProto;
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/createObject.js
-var require_createObject = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/createObject.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.createObject = void 0;
-    function createObject(keys, values) {
-      return keys.reduce(function(result, key, i) {
-        return result[key] = values[i], result;
-      }, {});
-    }
-    exports.createObject = createObject;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/combineLatest.js
-var require_combineLatest = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/combineLatest.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.combineLatestInit = exports.combineLatest = void 0;
-    var Observable_1 = require_Observable();
-    var argsArgArrayOrObject_1 = require_argsArgArrayOrObject();
-    var from_1 = require_from();
-    var identity_1 = require_identity();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var args_1 = require_args();
-    var createObject_1 = require_createObject();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var executeSchedule_1 = require_executeSchedule();
-    function combineLatest() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(args);
-      var resultSelector = args_1.popResultSelector(args);
-      var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;
-      if (observables.length === 0) {
-        return from_1.from([], scheduler);
-      }
-      var result = new Observable_1.Observable(combineLatestInit(observables, scheduler, keys ? function(values) {
-        return createObject_1.createObject(keys, values);
-      } : identity_1.identity));
-      return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;
-    }
-    exports.combineLatest = combineLatest;
-    function combineLatestInit(observables, scheduler, valueTransform) {
-      if (valueTransform === void 0) {
-        valueTransform = identity_1.identity;
-      }
-      return function(subscriber) {
-        maybeSchedule(scheduler, function() {
-          var length = observables.length;
-          var values = new Array(length);
-          var active = length;
-          var remainingFirstValues = length;
-          var _loop_1 = function(i2) {
-            maybeSchedule(scheduler, function() {
-              var source = from_1.from(observables[i2], scheduler);
-              var hasFirstValue = false;
-              source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-                values[i2] = value;
-                if (!hasFirstValue) {
-                  hasFirstValue = true;
-                  remainingFirstValues--;
-                }
-                if (!remainingFirstValues) {
-                  subscriber.next(valueTransform(values.slice()));
-                }
-              }, function() {
-                if (!--active) {
-                  subscriber.complete();
-                }
-              }));
-            }, subscriber);
-          };
-          for (var i = 0; i < length; i++) {
-            _loop_1(i);
-          }
-        }, subscriber);
-      };
-    }
-    exports.combineLatestInit = combineLatestInit;
-    function maybeSchedule(scheduler, execute, subscription) {
-      if (scheduler) {
-        executeSchedule_1.executeSchedule(subscription, scheduler, execute);
-      } else {
-        execute();
-      }
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeInternals.js
-var require_mergeInternals = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeInternals.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeInternals = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var executeSchedule_1 = require_executeSchedule();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
-      var buffer = [];
-      var active = 0;
-      var index = 0;
-      var isComplete = false;
-      var checkComplete = function() {
-        if (isComplete && !buffer.length && !active) {
-          subscriber.complete();
-        }
-      };
-      var outerNext = function(value) {
-        return active < concurrent ? doInnerSub(value) : buffer.push(value);
-      };
-      var doInnerSub = function(value) {
-        expand && subscriber.next(value);
-        active++;
-        var innerComplete = false;
-        innerFrom_1.innerFrom(project(value, index++)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(innerValue) {
-          onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
-          if (expand) {
-            outerNext(innerValue);
-          } else {
-            subscriber.next(innerValue);
-          }
-        }, function() {
-          innerComplete = true;
-        }, void 0, function() {
-          if (innerComplete) {
-            try {
-              active--;
-              var _loop_1 = function() {
-                var bufferedValue = buffer.shift();
-                if (innerSubScheduler) {
-                  executeSchedule_1.executeSchedule(subscriber, innerSubScheduler, function() {
-                    return doInnerSub(bufferedValue);
-                  });
-                } else {
-                  doInnerSub(bufferedValue);
-                }
-              };
-              while (buffer.length && active < concurrent) {
-                _loop_1();
-              }
-              checkComplete();
-            } catch (err) {
-              subscriber.error(err);
-            }
-          }
-        }));
-      };
-      source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, outerNext, function() {
-        isComplete = true;
-        checkComplete();
-      }));
-      return function() {
-        additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
-      };
-    }
-    exports.mergeInternals = mergeInternals;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeMap.js
-var require_mergeMap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeMap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeMap = void 0;
-    var map_1 = require_map();
-    var innerFrom_1 = require_innerFrom();
-    var lift_1 = require_lift();
-    var mergeInternals_1 = require_mergeInternals();
-    var isFunction_1 = require_isFunction();
-    function mergeMap(project, resultSelector, concurrent) {
-      if (concurrent === void 0) {
-        concurrent = Infinity;
-      }
-      if (isFunction_1.isFunction(resultSelector)) {
-        return mergeMap(function(a, i) {
-          return map_1.map(function(b, ii) {
-            return resultSelector(a, b, i, ii);
-          })(innerFrom_1.innerFrom(project(a, i)));
-        }, concurrent);
-      } else if (typeof resultSelector === "number") {
-        concurrent = resultSelector;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        return mergeInternals_1.mergeInternals(source, subscriber, project, concurrent);
-      });
-    }
-    exports.mergeMap = mergeMap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeAll.js
-var require_mergeAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeAll = void 0;
-    var mergeMap_1 = require_mergeMap();
-    var identity_1 = require_identity();
-    function mergeAll(concurrent) {
-      if (concurrent === void 0) {
-        concurrent = Infinity;
-      }
-      return mergeMap_1.mergeMap(identity_1.identity, concurrent);
-    }
-    exports.mergeAll = mergeAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/concatAll.js
-var require_concatAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/concatAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concatAll = void 0;
-    var mergeAll_1 = require_mergeAll();
-    function concatAll() {
-      return mergeAll_1.mergeAll(1);
-    }
-    exports.concatAll = concatAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/concat.js
-var require_concat = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/concat.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concat = void 0;
-    var concatAll_1 = require_concatAll();
-    var args_1 = require_args();
-    var from_1 = require_from();
-    function concat() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      return concatAll_1.concatAll()(from_1.from(args, args_1.popScheduler(args)));
-    }
-    exports.concat = concat;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/defer.js
-var require_defer = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/defer.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.defer = void 0;
-    var Observable_1 = require_Observable();
-    var innerFrom_1 = require_innerFrom();
-    function defer(observableFactory) {
-      return new Observable_1.Observable(function(subscriber) {
-        innerFrom_1.innerFrom(observableFactory()).subscribe(subscriber);
-      });
-    }
-    exports.defer = defer;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/connectable.js
-var require_connectable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/connectable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.connectable = void 0;
-    var Subject_1 = require_Subject();
-    var Observable_1 = require_Observable();
-    var defer_1 = require_defer();
-    var DEFAULT_CONFIG = {
-      connector: function() {
-        return new Subject_1.Subject();
-      },
-      resetOnDisconnect: true
-    };
-    function connectable(source, config) {
-      if (config === void 0) {
-        config = DEFAULT_CONFIG;
-      }
-      var connection = null;
-      var connector = config.connector, _a = config.resetOnDisconnect, resetOnDisconnect = _a === void 0 ? true : _a;
-      var subject = connector();
-      var result = new Observable_1.Observable(function(subscriber) {
-        return subject.subscribe(subscriber);
-      });
-      result.connect = function() {
-        if (!connection || connection.closed) {
-          connection = defer_1.defer(function() {
-            return source;
-          }).subscribe(subject);
-          if (resetOnDisconnect) {
-            connection.add(function() {
-              return subject = connector();
-            });
-          }
-        }
-        return connection;
-      };
-      return result;
-    }
-    exports.connectable = connectable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/forkJoin.js
-var require_forkJoin = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/forkJoin.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.forkJoin = void 0;
-    var Observable_1 = require_Observable();
-    var argsArgArrayOrObject_1 = require_argsArgArrayOrObject();
-    var innerFrom_1 = require_innerFrom();
-    var args_1 = require_args();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var createObject_1 = require_createObject();
-    function forkJoin() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var resultSelector = args_1.popResultSelector(args);
-      var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys;
-      var result = new Observable_1.Observable(function(subscriber) {
-        var length = sources.length;
-        if (!length) {
-          subscriber.complete();
-          return;
-        }
-        var values = new Array(length);
-        var remainingCompletions = length;
-        var remainingEmissions = length;
-        var _loop_1 = function(sourceIndex2) {
-          var hasValue = false;
-          innerFrom_1.innerFrom(sources[sourceIndex2]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-            if (!hasValue) {
-              hasValue = true;
-              remainingEmissions--;
-            }
-            values[sourceIndex2] = value;
-          }, function() {
-            return remainingCompletions--;
-          }, void 0, function() {
-            if (!remainingCompletions || !hasValue) {
-              if (!remainingEmissions) {
-                subscriber.next(keys ? createObject_1.createObject(keys, values) : values);
-              }
-              subscriber.complete();
-            }
-          }));
-        };
-        for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {
-          _loop_1(sourceIndex);
-        }
-      });
-      return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;
-    }
-    exports.forkJoin = forkJoin;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/fromEvent.js
-var require_fromEvent = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/fromEvent.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.fromEvent = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var Observable_1 = require_Observable();
-    var mergeMap_1 = require_mergeMap();
-    var isArrayLike_1 = require_isArrayLike();
-    var isFunction_1 = require_isFunction();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var nodeEventEmitterMethods = ["addListener", "removeListener"];
-    var eventTargetMethods = ["addEventListener", "removeEventListener"];
-    var jqueryMethods = ["on", "off"];
-    function fromEvent(target, eventName, options, resultSelector) {
-      if (isFunction_1.isFunction(options)) {
-        resultSelector = options;
-        options = void 0;
-      }
-      if (resultSelector) {
-        return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));
-      }
-      var _a = __read(isEventTarget(target) ? eventTargetMethods.map(function(methodName) {
-        return function(handler) {
-          return target[methodName](eventName, handler, options);
-        };
-      }) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add = _a[0], remove2 = _a[1];
-      if (!add) {
-        if (isArrayLike_1.isArrayLike(target)) {
-          return mergeMap_1.mergeMap(function(subTarget) {
-            return fromEvent(subTarget, eventName, options);
-          })(innerFrom_1.innerFrom(target));
-        }
-      }
-      if (!add) {
-        throw new TypeError("Invalid event target");
-      }
-      return new Observable_1.Observable(function(subscriber) {
-        var handler = function() {
-          var args = [];
-          for (var _i = 0; _i < arguments.length; _i++) {
-            args[_i] = arguments[_i];
-          }
-          return subscriber.next(1 < args.length ? args : args[0]);
-        };
-        add(handler);
-        return function() {
-          return remove2(handler);
-        };
-      });
-    }
-    exports.fromEvent = fromEvent;
-    function toCommonHandlerRegistry(target, eventName) {
-      return function(methodName) {
-        return function(handler) {
-          return target[methodName](eventName, handler);
-        };
-      };
-    }
-    function isNodeStyleEventEmitter(target) {
-      return isFunction_1.isFunction(target.addListener) && isFunction_1.isFunction(target.removeListener);
-    }
-    function isJQueryStyleEventEmitter(target) {
-      return isFunction_1.isFunction(target.on) && isFunction_1.isFunction(target.off);
-    }
-    function isEventTarget(target) {
-      return isFunction_1.isFunction(target.addEventListener) && isFunction_1.isFunction(target.removeEventListener);
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/fromEventPattern.js
-var require_fromEventPattern = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/fromEventPattern.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.fromEventPattern = void 0;
-    var Observable_1 = require_Observable();
-    var isFunction_1 = require_isFunction();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    function fromEventPattern(addHandler, removeHandler, resultSelector) {
-      if (resultSelector) {
-        return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));
-      }
-      return new Observable_1.Observable(function(subscriber) {
-        var handler = function() {
-          var e = [];
-          for (var _i = 0; _i < arguments.length; _i++) {
-            e[_i] = arguments[_i];
-          }
-          return subscriber.next(e.length === 1 ? e[0] : e);
-        };
-        var retValue = addHandler(handler);
-        return isFunction_1.isFunction(removeHandler) ? function() {
-          return removeHandler(handler, retValue);
-        } : void 0;
-      });
-    }
-    exports.fromEventPattern = fromEventPattern;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/generate.js
-var require_generate = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/generate.js"(exports) {
-    "use strict";
-    var __generator = exports && exports.__generator || function(thisArg, body) {
-      var _ = {
-        label: 0,
-        sent: function() {
-          if (t[0] & 1) throw t[1];
-          return t[1];
-        },
-        trys: [],
-        ops: []
-      }, f, y, t, g;
-      return g = {
-        next: verb(0),
-        "throw": verb(1),
-        "return": verb(2)
-      }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
-        return this;
-      }), g;
-      function verb(n) {
-        return function(v) {
-          return step([n, v]);
-        };
-      }
-      function step(op) {
-        if (f) throw new TypeError("Generator is already executing.");
-        while (_) try {
-          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
-          if (y = 0, t) op = [op[0] & 2, t.value];
-          switch (op[0]) {
-            case 0:
-            case 1:
-              t = op;
-              break;
-            case 4:
-              _.label++;
-              return {
-                value: op[1],
-                done: false
-              };
-            case 5:
-              _.label++;
-              y = op[1];
-              op = [0];
-              continue;
-            case 7:
-              op = _.ops.pop();
-              _.trys.pop();
-              continue;
-            default:
-              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
-                _ = 0;
-                continue;
-              }
-              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
-                _.label = op[1];
-                break;
-              }
-              if (op[0] === 6 && _.label < t[1]) {
-                _.label = t[1];
-                t = op;
-                break;
-              }
-              if (t && _.label < t[2]) {
-                _.label = t[2];
-                _.ops.push(op);
-                break;
-              }
-              if (t[2]) _.ops.pop();
-              _.trys.pop();
-              continue;
-          }
-          op = body.call(thisArg, _);
-        } catch (e) {
-          op = [6, e];
-          y = 0;
-        } finally {
-          f = t = 0;
-        }
-        if (op[0] & 5) throw op[1];
-        return {
-          value: op[0] ? op[1] : void 0,
-          done: true
-        };
-      }
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.generate = void 0;
-    var identity_1 = require_identity();
-    var isScheduler_1 = require_isScheduler();
-    var defer_1 = require_defer();
-    var scheduleIterable_1 = require_scheduleIterable();
-    function generate(initialStateOrOptions, condition, iterate, resultSelectorOrScheduler, scheduler) {
-      var _a, _b;
-      var resultSelector;
-      var initialState;
-      if (arguments.length === 1) {
-        _a = initialStateOrOptions, initialState = _a.initialState, condition = _a.condition, iterate = _a.iterate, _b = _a.resultSelector, resultSelector = _b === void 0 ? identity_1.identity : _b, scheduler = _a.scheduler;
-      } else {
-        initialState = initialStateOrOptions;
-        if (!resultSelectorOrScheduler || isScheduler_1.isScheduler(resultSelectorOrScheduler)) {
-          resultSelector = identity_1.identity;
-          scheduler = resultSelectorOrScheduler;
-        } else {
-          resultSelector = resultSelectorOrScheduler;
-        }
-      }
-      function gen() {
-        var state;
-        return __generator(this, function(_a2) {
-          switch (_a2.label) {
-            case 0:
-              state = initialState;
-              _a2.label = 1;
-            case 1:
-              if (!(!condition || condition(state))) return [3, 4];
-              return [4, resultSelector(state)];
-            case 2:
-              _a2.sent();
-              _a2.label = 3;
-            case 3:
-              state = iterate(state);
-              return [3, 1];
-            case 4:
-              return [2];
-          }
-        });
-      }
-      return defer_1.defer(scheduler ? function() {
-        return scheduleIterable_1.scheduleIterable(gen(), scheduler);
-      } : gen);
-    }
-    exports.generate = generate;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/iif.js
-var require_iif = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/iif.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.iif = void 0;
-    var defer_1 = require_defer();
-    function iif(condition, trueResult, falseResult) {
-      return defer_1.defer(function() {
-        return condition() ? trueResult : falseResult;
-      });
-    }
-    exports.iif = iif;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/timer.js
-var require_timer = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/timer.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.timer = void 0;
-    var Observable_1 = require_Observable();
-    var async_1 = require_async();
-    var isScheduler_1 = require_isScheduler();
-    var isDate_1 = require_isDate();
-    function timer(dueTime, intervalOrScheduler, scheduler) {
-      if (dueTime === void 0) {
-        dueTime = 0;
-      }
-      if (scheduler === void 0) {
-        scheduler = async_1.async;
-      }
-      var intervalDuration = -1;
-      if (intervalOrScheduler != null) {
-        if (isScheduler_1.isScheduler(intervalOrScheduler)) {
-          scheduler = intervalOrScheduler;
-        } else {
-          intervalDuration = intervalOrScheduler;
-        }
-      }
-      return new Observable_1.Observable(function(subscriber) {
-        var due = isDate_1.isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;
-        if (due < 0) {
-          due = 0;
-        }
-        var n = 0;
-        return scheduler.schedule(function() {
-          if (!subscriber.closed) {
-            subscriber.next(n++);
-            if (0 <= intervalDuration) {
-              this.schedule(void 0, intervalDuration);
-            } else {
-              subscriber.complete();
-            }
-          }
-        }, due);
-      });
-    }
-    exports.timer = timer;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/interval.js
-var require_interval = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/interval.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.interval = void 0;
-    var async_1 = require_async();
-    var timer_1 = require_timer();
-    function interval(period, scheduler) {
-      if (period === void 0) {
-        period = 0;
-      }
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      if (period < 0) {
-        period = 0;
-      }
-      return timer_1.timer(period, period, scheduler);
-    }
-    exports.interval = interval;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/merge.js
-var require_merge = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/merge.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.merge = void 0;
-    var mergeAll_1 = require_mergeAll();
-    var innerFrom_1 = require_innerFrom();
-    var empty_1 = require_empty();
-    var args_1 = require_args();
-    var from_1 = require_from();
-    function merge2() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(args);
-      var concurrent = args_1.popNumber(args, Infinity);
-      var sources = args;
-      return !sources.length ? empty_1.EMPTY : sources.length === 1 ? innerFrom_1.innerFrom(sources[0]) : mergeAll_1.mergeAll(concurrent)(from_1.from(sources, scheduler));
-    }
-    exports.merge = merge2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/never.js
-var require_never = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/never.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.never = exports.NEVER = void 0;
-    var Observable_1 = require_Observable();
-    var noop_1 = require_noop();
-    exports.NEVER = new Observable_1.Observable(noop_1.noop);
-    function never() {
-      return exports.NEVER;
-    }
-    exports.never = never;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/argsOrArgArray.js
-var require_argsOrArgArray = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/argsOrArgArray.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.argsOrArgArray = void 0;
-    var isArray = Array.isArray;
-    function argsOrArgArray(args) {
-      return args.length === 1 && isArray(args[0]) ? args[0] : args;
-    }
-    exports.argsOrArgArray = argsOrArgArray;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/onErrorResumeNext.js
-var require_onErrorResumeNext = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/onErrorResumeNext.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.onErrorResumeNext = void 0;
-    var Observable_1 = require_Observable();
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    var innerFrom_1 = require_innerFrom();
-    function onErrorResumeNext() {
-      var sources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        sources[_i] = arguments[_i];
-      }
-      var nextSources = argsOrArgArray_1.argsOrArgArray(sources);
-      return new Observable_1.Observable(function(subscriber) {
-        var sourceIndex = 0;
-        var subscribeNext = function() {
-          if (sourceIndex < nextSources.length) {
-            var nextSource = void 0;
-            try {
-              nextSource = innerFrom_1.innerFrom(nextSources[sourceIndex++]);
-            } catch (err) {
-              subscribeNext();
-              return;
-            }
-            var innerSubscriber = new OperatorSubscriber_1.OperatorSubscriber(subscriber, void 0, noop_1.noop, noop_1.noop);
-            nextSource.subscribe(innerSubscriber);
-            innerSubscriber.add(subscribeNext);
-          } else {
-            subscriber.complete();
-          }
-        };
-        subscribeNext();
-      });
-    }
-    exports.onErrorResumeNext = onErrorResumeNext;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/pairs.js
-var require_pairs = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/pairs.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.pairs = void 0;
-    var from_1 = require_from();
-    function pairs(obj, scheduler) {
-      return from_1.from(Object.entries(obj), scheduler);
-    }
-    exports.pairs = pairs;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/util/not.js
-var require_not = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/util/not.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.not = void 0;
-    function not(pred, thisArg) {
-      return function(value, index) {
-        return !pred.call(thisArg, value, index);
-      };
-    }
-    exports.not = not;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/filter.js
-var require_filter = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/filter.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.filter = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function filter(predicate, thisArg) {
-      return lift_1.operate(function(source, subscriber) {
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return predicate.call(thisArg, value, index++) && subscriber.next(value);
-        }));
-      });
-    }
-    exports.filter = filter;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/partition.js
-var require_partition = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/partition.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.partition = void 0;
-    var not_1 = require_not();
-    var filter_1 = require_filter();
-    var innerFrom_1 = require_innerFrom();
-    function partition(source, predicate, thisArg) {
-      return [filter_1.filter(predicate, thisArg)(innerFrom_1.innerFrom(source)), filter_1.filter(not_1.not(predicate, thisArg))(innerFrom_1.innerFrom(source))];
-    }
-    exports.partition = partition;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/race.js
-var require_race = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/race.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.raceInit = exports.race = void 0;
-    var Observable_1 = require_Observable();
-    var innerFrom_1 = require_innerFrom();
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function race() {
-      var sources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        sources[_i] = arguments[_i];
-      }
-      sources = argsOrArgArray_1.argsOrArgArray(sources);
-      return sources.length === 1 ? innerFrom_1.innerFrom(sources[0]) : new Observable_1.Observable(raceInit(sources));
-    }
-    exports.race = race;
-    function raceInit(sources) {
-      return function(subscriber) {
-        var subscriptions = [];
-        var _loop_1 = function(i2) {
-          subscriptions.push(innerFrom_1.innerFrom(sources[i2]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-            if (subscriptions) {
-              for (var s = 0; s < subscriptions.length; s++) {
-                s !== i2 && subscriptions[s].unsubscribe();
-              }
-              subscriptions = null;
-            }
-            subscriber.next(value);
-          })));
-        };
-        for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {
-          _loop_1(i);
-        }
-      };
-    }
-    exports.raceInit = raceInit;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/range.js
-var require_range = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/range.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.range = void 0;
-    var Observable_1 = require_Observable();
-    var empty_1 = require_empty();
-    function range(start, count, scheduler) {
-      if (count == null) {
-        count = start;
-        start = 0;
-      }
-      if (count <= 0) {
-        return empty_1.EMPTY;
-      }
-      var end = count + start;
-      return new Observable_1.Observable(scheduler ? function(subscriber) {
-        var n = start;
-        return scheduler.schedule(function() {
-          if (n < end) {
-            subscriber.next(n++);
-            this.schedule();
-          } else {
-            subscriber.complete();
-          }
-        });
-      } : function(subscriber) {
-        var n = start;
-        while (n < end && !subscriber.closed) {
-          subscriber.next(n++);
-        }
-        subscriber.complete();
-      });
-    }
-    exports.range = range;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/using.js
-var require_using = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/using.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.using = void 0;
-    var Observable_1 = require_Observable();
-    var innerFrom_1 = require_innerFrom();
-    var empty_1 = require_empty();
-    function using(resourceFactory, observableFactory) {
-      return new Observable_1.Observable(function(subscriber) {
-        var resource2 = resourceFactory();
-        var result = observableFactory(resource2);
-        var source = result ? innerFrom_1.innerFrom(result) : empty_1.EMPTY;
-        source.subscribe(subscriber);
-        return function() {
-          if (resource2) {
-            resource2.unsubscribe();
-          }
-        };
-      });
-    }
-    exports.using = using;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/zip.js
-var require_zip = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/zip.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.zip = void 0;
-    var Observable_1 = require_Observable();
-    var innerFrom_1 = require_innerFrom();
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var empty_1 = require_empty();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var args_1 = require_args();
-    function zip() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var resultSelector = args_1.popResultSelector(args);
-      var sources = argsOrArgArray_1.argsOrArgArray(args);
-      return sources.length ? new Observable_1.Observable(function(subscriber) {
-        var buffers = sources.map(function() {
-          return [];
-        });
-        var completed = sources.map(function() {
-          return false;
-        });
-        subscriber.add(function() {
-          buffers = completed = null;
-        });
-        var _loop_1 = function(sourceIndex2) {
-          innerFrom_1.innerFrom(sources[sourceIndex2]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-            buffers[sourceIndex2].push(value);
-            if (buffers.every(function(buffer) {
-              return buffer.length;
-            })) {
-              var result = buffers.map(function(buffer) {
-                return buffer.shift();
-              });
-              subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray([], __read(result))) : result);
-              if (buffers.some(function(buffer, i) {
-                return !buffer.length && completed[i];
-              })) {
-                subscriber.complete();
-              }
-            }
-          }, function() {
-            completed[sourceIndex2] = true;
-            !buffers[sourceIndex2].length && subscriber.complete();
-          }));
-        };
-        for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {
-          _loop_1(sourceIndex);
-        }
-        return function() {
-          buffers = completed = null;
-        };
-      }) : empty_1.EMPTY;
-    }
-    exports.zip = zip;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/types.js
-var require_types = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/types.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/audit.js
-var require_audit = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/audit.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.audit = void 0;
-    var lift_1 = require_lift();
-    var innerFrom_1 = require_innerFrom();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function audit(durationSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        var lastValue = null;
-        var durationSubscriber = null;
-        var isComplete = false;
-        var endDuration = function() {
-          durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();
-          durationSubscriber = null;
-          if (hasValue) {
-            hasValue = false;
-            var value = lastValue;
-            lastValue = null;
-            subscriber.next(value);
-          }
-          isComplete && subscriber.complete();
-        };
-        var cleanupDuration = function() {
-          durationSubscriber = null;
-          isComplete && subscriber.complete();
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          hasValue = true;
-          lastValue = value;
-          if (!durationSubscriber) {
-            innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, endDuration, cleanupDuration));
-          }
-        }, function() {
-          isComplete = true;
-          (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();
-        }));
-      });
-    }
-    exports.audit = audit;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/auditTime.js
-var require_auditTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/auditTime.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.auditTime = void 0;
-    var async_1 = require_async();
-    var audit_1 = require_audit();
-    var timer_1 = require_timer();
-    function auditTime(duration, scheduler) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      return audit_1.audit(function() {
-        return timer_1.timer(duration, scheduler);
-      });
-    }
-    exports.auditTime = auditTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/buffer.js
-var require_buffer = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/buffer.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.buffer = void 0;
-    var lift_1 = require_lift();
-    var noop_1 = require_noop();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function buffer(closingNotifier) {
-      return lift_1.operate(function(source, subscriber) {
-        var currentBuffer = [];
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return currentBuffer.push(value);
-        }, function() {
-          subscriber.next(currentBuffer);
-          subscriber.complete();
-        }));
-        innerFrom_1.innerFrom(closingNotifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          var b = currentBuffer;
-          currentBuffer = [];
-          subscriber.next(b);
-        }, noop_1.noop));
-        return function() {
-          currentBuffer = null;
-        };
-      });
-    }
-    exports.buffer = buffer;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/bufferCount.js
-var require_bufferCount = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/bufferCount.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bufferCount = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var arrRemove_1 = require_arrRemove();
-    function bufferCount(bufferSize, startBufferEvery) {
-      if (startBufferEvery === void 0) {
-        startBufferEvery = null;
-      }
-      startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize;
-      return lift_1.operate(function(source, subscriber) {
-        var buffers = [];
-        var count = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var e_1, _a, e_2, _b;
-          var toEmit = null;
-          if (count++ % startBufferEvery === 0) {
-            buffers.push([]);
-          }
-          try {
-            for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) {
-              var buffer = buffers_1_1.value;
-              buffer.push(value);
-              if (bufferSize <= buffer.length) {
-                toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : [];
-                toEmit.push(buffer);
-              }
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-          if (toEmit) {
-            try {
-              for (var toEmit_1 = __values(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) {
-                var buffer = toEmit_1_1.value;
-                arrRemove_1.arrRemove(buffers, buffer);
-                subscriber.next(buffer);
-              }
-            } catch (e_2_1) {
-              e_2 = {
-                error: e_2_1
-              };
-            } finally {
-              try {
-                if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1);
-              } finally {
-                if (e_2) throw e_2.error;
-              }
-            }
-          }
-        }, function() {
-          var e_3, _a;
-          try {
-            for (var buffers_2 = __values(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) {
-              var buffer = buffers_2_1.value;
-              subscriber.next(buffer);
-            }
-          } catch (e_3_1) {
-            e_3 = {
-              error: e_3_1
-            };
-          } finally {
-            try {
-              if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2);
-            } finally {
-              if (e_3) throw e_3.error;
-            }
-          }
-          subscriber.complete();
-        }, void 0, function() {
-          buffers = null;
-        }));
-      });
-    }
-    exports.bufferCount = bufferCount;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/bufferTime.js
-var require_bufferTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/bufferTime.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bufferTime = void 0;
-    var Subscription_1 = require_Subscription();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var arrRemove_1 = require_arrRemove();
-    var async_1 = require_async();
-    var args_1 = require_args();
-    var executeSchedule_1 = require_executeSchedule();
-    function bufferTime(bufferTimeSpan) {
-      var _a, _b;
-      var otherArgs = [];
-      for (var _i = 1; _i < arguments.length; _i++) {
-        otherArgs[_i - 1] = arguments[_i];
-      }
-      var scheduler = (_a = args_1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler;
-      var bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null;
-      var maxBufferSize = otherArgs[1] || Infinity;
-      return lift_1.operate(function(source, subscriber) {
-        var bufferRecords = [];
-        var restartOnEmit = false;
-        var emit = function(record) {
-          var buffer = record.buffer, subs = record.subs;
-          subs.unsubscribe();
-          arrRemove_1.arrRemove(bufferRecords, record);
-          subscriber.next(buffer);
-          restartOnEmit && startBuffer();
-        };
-        var startBuffer = function() {
-          if (bufferRecords) {
-            var subs = new Subscription_1.Subscription();
-            subscriber.add(subs);
-            var buffer = [];
-            var record_1 = {
-              buffer,
-              subs
-            };
-            bufferRecords.push(record_1);
-            executeSchedule_1.executeSchedule(subs, scheduler, function() {
-              return emit(record_1);
-            }, bufferTimeSpan);
-          }
-        };
-        if (bufferCreationInterval !== null && bufferCreationInterval >= 0) {
-          executeSchedule_1.executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true);
-        } else {
-          restartOnEmit = true;
-        }
-        startBuffer();
-        var bufferTimeSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var e_1, _a2;
-          var recordsCopy = bufferRecords.slice();
-          try {
-            for (var recordsCopy_1 = __values(recordsCopy), recordsCopy_1_1 = recordsCopy_1.next(); !recordsCopy_1_1.done; recordsCopy_1_1 = recordsCopy_1.next()) {
-              var record = recordsCopy_1_1.value;
-              var buffer = record.buffer;
-              buffer.push(value);
-              maxBufferSize <= buffer.length && emit(record);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (recordsCopy_1_1 && !recordsCopy_1_1.done && (_a2 = recordsCopy_1.return)) _a2.call(recordsCopy_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-        }, function() {
-          while (bufferRecords === null || bufferRecords === void 0 ? void 0 : bufferRecords.length) {
-            subscriber.next(bufferRecords.shift().buffer);
-          }
-          bufferTimeSubscriber === null || bufferTimeSubscriber === void 0 ? void 0 : bufferTimeSubscriber.unsubscribe();
-          subscriber.complete();
-          subscriber.unsubscribe();
-        }, void 0, function() {
-          return bufferRecords = null;
-        });
-        source.subscribe(bufferTimeSubscriber);
-      });
-    }
-    exports.bufferTime = bufferTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/bufferToggle.js
-var require_bufferToggle = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/bufferToggle.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bufferToggle = void 0;
-    var Subscription_1 = require_Subscription();
-    var lift_1 = require_lift();
-    var innerFrom_1 = require_innerFrom();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    var arrRemove_1 = require_arrRemove();
-    function bufferToggle(openings, closingSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var buffers = [];
-        innerFrom_1.innerFrom(openings).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(openValue) {
-          var buffer = [];
-          buffers.push(buffer);
-          var closingSubscription = new Subscription_1.Subscription();
-          var emitBuffer = function() {
-            arrRemove_1.arrRemove(buffers, buffer);
-            subscriber.next(buffer);
-            closingSubscription.unsubscribe();
-          };
-          closingSubscription.add(innerFrom_1.innerFrom(closingSelector(openValue)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, emitBuffer, noop_1.noop)));
-        }, noop_1.noop));
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var e_1, _a;
-          try {
-            for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) {
-              var buffer = buffers_1_1.value;
-              buffer.push(value);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-        }, function() {
-          while (buffers.length > 0) {
-            subscriber.next(buffers.shift());
-          }
-          subscriber.complete();
-        }));
-      });
-    }
-    exports.bufferToggle = bufferToggle;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/bufferWhen.js
-var require_bufferWhen = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/bufferWhen.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.bufferWhen = void 0;
-    var lift_1 = require_lift();
-    var noop_1 = require_noop();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function bufferWhen(closingSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var buffer = null;
-        var closingSubscriber = null;
-        var openBuffer = function() {
-          closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();
-          var b = buffer;
-          buffer = [];
-          b && subscriber.next(b);
-          innerFrom_1.innerFrom(closingSelector()).subscribe(closingSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, openBuffer, noop_1.noop));
-        };
-        openBuffer();
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return buffer === null || buffer === void 0 ? void 0 : buffer.push(value);
-        }, function() {
-          buffer && subscriber.next(buffer);
-          subscriber.complete();
-        }, void 0, function() {
-          return buffer = closingSubscriber = null;
-        }));
-      });
-    }
-    exports.bufferWhen = bufferWhen;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/catchError.js
-var require_catchError = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/catchError.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.catchError = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var lift_1 = require_lift();
-    function catchError(selector) {
-      return lift_1.operate(function(source, subscriber) {
-        var innerSub = null;
-        var syncUnsub = false;
-        var handledResult;
-        innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, void 0, function(err) {
-          handledResult = innerFrom_1.innerFrom(selector(err, catchError(selector)(source)));
-          if (innerSub) {
-            innerSub.unsubscribe();
-            innerSub = null;
-            handledResult.subscribe(subscriber);
-          } else {
-            syncUnsub = true;
-          }
-        }));
-        if (syncUnsub) {
-          innerSub.unsubscribe();
-          innerSub = null;
-          handledResult.subscribe(subscriber);
-        }
-      });
-    }
-    exports.catchError = catchError;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/scanInternals.js
-var require_scanInternals = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/scanInternals.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scanInternals = void 0;
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {
-      return function(source, subscriber) {
-        var hasState = hasSeed;
-        var state = seed;
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var i = index++;
-          state = hasState ? accumulator(state, value, i) : (hasState = true, value);
-          emitOnNext && subscriber.next(state);
-        }, emitBeforeComplete && function() {
-          hasState && subscriber.next(state);
-          subscriber.complete();
-        }));
-      };
-    }
-    exports.scanInternals = scanInternals;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/reduce.js
-var require_reduce = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/reduce.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.reduce = void 0;
-    var scanInternals_1 = require_scanInternals();
-    var lift_1 = require_lift();
-    function reduce(accumulator, seed) {
-      return lift_1.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, false, true));
-    }
-    exports.reduce = reduce;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/toArray.js
-var require_toArray = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/toArray.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.toArray = void 0;
-    var reduce_1 = require_reduce();
-    var lift_1 = require_lift();
-    var arrReducer = function(arr, value) {
-      return arr.push(value), arr;
-    };
-    function toArray() {
-      return lift_1.operate(function(source, subscriber) {
-        reduce_1.reduce(arrReducer, [])(source).subscribe(subscriber);
-      });
-    }
-    exports.toArray = toArray;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/joinAllInternals.js
-var require_joinAllInternals = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/joinAllInternals.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.joinAllInternals = void 0;
-    var identity_1 = require_identity();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var pipe_1 = require_pipe();
-    var mergeMap_1 = require_mergeMap();
-    var toArray_1 = require_toArray();
-    function joinAllInternals(joinFn, project) {
-      return pipe_1.pipe(toArray_1.toArray(), mergeMap_1.mergeMap(function(sources) {
-        return joinFn(sources);
-      }), project ? mapOneOrManyArgs_1.mapOneOrManyArgs(project) : identity_1.identity);
-    }
-    exports.joinAllInternals = joinAllInternals;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/combineLatestAll.js
-var require_combineLatestAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/combineLatestAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.combineLatestAll = void 0;
-    var combineLatest_1 = require_combineLatest();
-    var joinAllInternals_1 = require_joinAllInternals();
-    function combineLatestAll(project) {
-      return joinAllInternals_1.joinAllInternals(combineLatest_1.combineLatest, project);
-    }
-    exports.combineLatestAll = combineLatestAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/combineAll.js
-var require_combineAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/combineAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.combineAll = void 0;
-    var combineLatestAll_1 = require_combineLatestAll();
-    exports.combineAll = combineLatestAll_1.combineLatestAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/combineLatest.js
-var require_combineLatest2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/combineLatest.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.combineLatest = void 0;
-    var combineLatest_1 = require_combineLatest();
-    var lift_1 = require_lift();
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var mapOneOrManyArgs_1 = require_mapOneOrManyArgs();
-    var pipe_1 = require_pipe();
-    var args_1 = require_args();
-    function combineLatest() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var resultSelector = args_1.popResultSelector(args);
-      return resultSelector ? pipe_1.pipe(combineLatest.apply(void 0, __spreadArray([], __read(args))), mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : lift_1.operate(function(source, subscriber) {
-        combineLatest_1.combineLatestInit(__spreadArray([source], __read(argsOrArgArray_1.argsOrArgArray(args))))(subscriber);
-      });
-    }
-    exports.combineLatest = combineLatest;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/combineLatestWith.js
-var require_combineLatestWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/combineLatestWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.combineLatestWith = void 0;
-    var combineLatest_1 = require_combineLatest2();
-    function combineLatestWith() {
-      var otherSources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        otherSources[_i] = arguments[_i];
-      }
-      return combineLatest_1.combineLatest.apply(void 0, __spreadArray([], __read(otherSources)));
-    }
-    exports.combineLatestWith = combineLatestWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/concatMap.js
-var require_concatMap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/concatMap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concatMap = void 0;
-    var mergeMap_1 = require_mergeMap();
-    var isFunction_1 = require_isFunction();
-    function concatMap(project, resultSelector) {
-      return isFunction_1.isFunction(resultSelector) ? mergeMap_1.mergeMap(project, resultSelector, 1) : mergeMap_1.mergeMap(project, 1);
-    }
-    exports.concatMap = concatMap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/concatMapTo.js
-var require_concatMapTo = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/concatMapTo.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concatMapTo = void 0;
-    var concatMap_1 = require_concatMap();
-    var isFunction_1 = require_isFunction();
-    function concatMapTo(innerObservable, resultSelector) {
-      return isFunction_1.isFunction(resultSelector) ? concatMap_1.concatMap(function() {
-        return innerObservable;
-      }, resultSelector) : concatMap_1.concatMap(function() {
-        return innerObservable;
-      });
-    }
-    exports.concatMapTo = concatMapTo;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/concat.js
-var require_concat2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/concat.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concat = void 0;
-    var lift_1 = require_lift();
-    var concatAll_1 = require_concatAll();
-    var args_1 = require_args();
-    var from_1 = require_from();
-    function concat() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(args);
-      return lift_1.operate(function(source, subscriber) {
-        concatAll_1.concatAll()(from_1.from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);
-      });
-    }
-    exports.concat = concat;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/concatWith.js
-var require_concatWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/concatWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.concatWith = void 0;
-    var concat_1 = require_concat2();
-    function concatWith() {
-      var otherSources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        otherSources[_i] = arguments[_i];
-      }
-      return concat_1.concat.apply(void 0, __spreadArray([], __read(otherSources)));
-    }
-    exports.concatWith = concatWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/observable/fromSubscribable.js
-var require_fromSubscribable = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/observable/fromSubscribable.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.fromSubscribable = void 0;
-    var Observable_1 = require_Observable();
-    function fromSubscribable(subscribable) {
-      return new Observable_1.Observable(function(subscriber) {
-        return subscribable.subscribe(subscriber);
-      });
-    }
-    exports.fromSubscribable = fromSubscribable;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/connect.js
-var require_connect = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/connect.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.connect = void 0;
-    var Subject_1 = require_Subject();
-    var innerFrom_1 = require_innerFrom();
-    var lift_1 = require_lift();
-    var fromSubscribable_1 = require_fromSubscribable();
-    var DEFAULT_CONFIG = {
-      connector: function() {
-        return new Subject_1.Subject();
-      }
-    };
-    function connect(selector, config) {
-      if (config === void 0) {
-        config = DEFAULT_CONFIG;
-      }
-      var connector = config.connector;
-      return lift_1.operate(function(source, subscriber) {
-        var subject = connector();
-        innerFrom_1.innerFrom(selector(fromSubscribable_1.fromSubscribable(subject))).subscribe(subscriber);
-        subscriber.add(source.subscribe(subject));
-      });
-    }
-    exports.connect = connect;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/count.js
-var require_count = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/count.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.count = void 0;
-    var reduce_1 = require_reduce();
-    function count(predicate) {
-      return reduce_1.reduce(function(total, value, i) {
-        return !predicate || predicate(value, i) ? total + 1 : total;
-      }, 0);
-    }
-    exports.count = count;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/debounce.js
-var require_debounce = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/debounce.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.debounce = void 0;
-    var lift_1 = require_lift();
-    var noop_1 = require_noop();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function debounce(durationSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        var lastValue = null;
-        var durationSubscriber = null;
-        var emit = function() {
-          durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();
-          durationSubscriber = null;
-          if (hasValue) {
-            hasValue = false;
-            var value = lastValue;
-            lastValue = null;
-            subscriber.next(value);
-          }
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();
-          hasValue = true;
-          lastValue = value;
-          durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, emit, noop_1.noop);
-          innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber);
-        }, function() {
-          emit();
-          subscriber.complete();
-        }, void 0, function() {
-          lastValue = durationSubscriber = null;
-        }));
-      });
-    }
-    exports.debounce = debounce;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/debounceTime.js
-var require_debounceTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/debounceTime.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.debounceTime = void 0;
-    var async_1 = require_async();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function debounceTime(dueTime, scheduler) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var activeTask = null;
-        var lastValue = null;
-        var lastTime = null;
-        var emit = function() {
-          if (activeTask) {
-            activeTask.unsubscribe();
-            activeTask = null;
-            var value = lastValue;
-            lastValue = null;
-            subscriber.next(value);
-          }
-        };
-        function emitWhenIdle() {
-          var targetTime = lastTime + dueTime;
-          var now = scheduler.now();
-          if (now < targetTime) {
-            activeTask = this.schedule(void 0, targetTime - now);
-            subscriber.add(activeTask);
-            return;
-          }
-          emit();
-        }
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          lastValue = value;
-          lastTime = scheduler.now();
-          if (!activeTask) {
-            activeTask = scheduler.schedule(emitWhenIdle, dueTime);
-            subscriber.add(activeTask);
-          }
-        }, function() {
-          emit();
-          subscriber.complete();
-        }, void 0, function() {
-          lastValue = activeTask = null;
-        }));
-      });
-    }
-    exports.debounceTime = debounceTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/defaultIfEmpty.js
-var require_defaultIfEmpty = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/defaultIfEmpty.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.defaultIfEmpty = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function defaultIfEmpty(defaultValue) {
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          hasValue = true;
-          subscriber.next(value);
-        }, function() {
-          if (!hasValue) {
-            subscriber.next(defaultValue);
-          }
-          subscriber.complete();
-        }));
-      });
-    }
-    exports.defaultIfEmpty = defaultIfEmpty;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/take.js
-var require_take = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/take.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.take = void 0;
-    var empty_1 = require_empty();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function take(count) {
-      return count <= 0 ? function() {
-        return empty_1.EMPTY;
-      } : lift_1.operate(function(source, subscriber) {
-        var seen = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          if (++seen <= count) {
-            subscriber.next(value);
-            if (count <= seen) {
-              subscriber.complete();
-            }
-          }
-        }));
-      });
-    }
-    exports.take = take;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/ignoreElements.js
-var require_ignoreElements = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/ignoreElements.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.ignoreElements = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    function ignoreElements() {
-      return lift_1.operate(function(source, subscriber) {
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, noop_1.noop));
-      });
-    }
-    exports.ignoreElements = ignoreElements;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mapTo.js
-var require_mapTo = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mapTo.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mapTo = void 0;
-    var map_1 = require_map();
-    function mapTo(value) {
-      return map_1.map(function() {
-        return value;
-      });
-    }
-    exports.mapTo = mapTo;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/delayWhen.js
-var require_delayWhen = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/delayWhen.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.delayWhen = void 0;
-    var concat_1 = require_concat();
-    var take_1 = require_take();
-    var ignoreElements_1 = require_ignoreElements();
-    var mapTo_1 = require_mapTo();
-    var mergeMap_1 = require_mergeMap();
-    var innerFrom_1 = require_innerFrom();
-    function delayWhen(delayDurationSelector, subscriptionDelay) {
-      if (subscriptionDelay) {
-        return function(source) {
-          return concat_1.concat(subscriptionDelay.pipe(take_1.take(1), ignoreElements_1.ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));
-        };
-      }
-      return mergeMap_1.mergeMap(function(value, index) {
-        return innerFrom_1.innerFrom(delayDurationSelector(value, index)).pipe(take_1.take(1), mapTo_1.mapTo(value));
-      });
-    }
-    exports.delayWhen = delayWhen;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/delay.js
-var require_delay = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/delay.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.delay = void 0;
-    var async_1 = require_async();
-    var delayWhen_1 = require_delayWhen();
-    var timer_1 = require_timer();
-    function delay(due, scheduler) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      var duration = timer_1.timer(due, scheduler);
-      return delayWhen_1.delayWhen(function() {
-        return duration;
-      });
-    }
-    exports.delay = delay;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/dematerialize.js
-var require_dematerialize = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/dematerialize.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.dematerialize = void 0;
-    var Notification_1 = require_Notification();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function dematerialize() {
-      return lift_1.operate(function(source, subscriber) {
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(notification) {
-          return Notification_1.observeNotification(notification, subscriber);
-        }));
-      });
-    }
-    exports.dematerialize = dematerialize;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/distinct.js
-var require_distinct = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/distinct.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.distinct = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    var innerFrom_1 = require_innerFrom();
-    function distinct(keySelector, flushes) {
-      return lift_1.operate(function(source, subscriber) {
-        var distinctKeys = /* @__PURE__ */ new Set();
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var key = keySelector ? keySelector(value) : value;
-          if (!distinctKeys.has(key)) {
-            distinctKeys.add(key);
-            subscriber.next(value);
-          }
-        }));
-        flushes && innerFrom_1.innerFrom(flushes).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          return distinctKeys.clear();
-        }, noop_1.noop));
-      });
-    }
-    exports.distinct = distinct;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/distinctUntilChanged.js
-var require_distinctUntilChanged = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/distinctUntilChanged.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.distinctUntilChanged = void 0;
-    var identity_1 = require_identity();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function distinctUntilChanged(comparator, keySelector) {
-      if (keySelector === void 0) {
-        keySelector = identity_1.identity;
-      }
-      comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;
-      return lift_1.operate(function(source, subscriber) {
-        var previousKey;
-        var first = true;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var currentKey = keySelector(value);
-          if (first || !comparator(previousKey, currentKey)) {
-            first = false;
-            previousKey = currentKey;
-            subscriber.next(value);
-          }
-        }));
-      });
-    }
-    exports.distinctUntilChanged = distinctUntilChanged;
-    function defaultCompare(a, b) {
-      return a === b;
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/distinctUntilKeyChanged.js
-var require_distinctUntilKeyChanged = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/distinctUntilKeyChanged.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.distinctUntilKeyChanged = void 0;
-    var distinctUntilChanged_1 = require_distinctUntilChanged();
-    function distinctUntilKeyChanged(key, compare) {
-      return distinctUntilChanged_1.distinctUntilChanged(function(x, y) {
-        return compare ? compare(x[key], y[key]) : x[key] === y[key];
-      });
-    }
-    exports.distinctUntilKeyChanged = distinctUntilKeyChanged;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/throwIfEmpty.js
-var require_throwIfEmpty = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/throwIfEmpty.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.throwIfEmpty = void 0;
-    var EmptyError_1 = require_EmptyError();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function throwIfEmpty(errorFactory) {
-      if (errorFactory === void 0) {
-        errorFactory = defaultErrorFactory;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          hasValue = true;
-          subscriber.next(value);
-        }, function() {
-          return hasValue ? subscriber.complete() : subscriber.error(errorFactory());
-        }));
-      });
-    }
-    exports.throwIfEmpty = throwIfEmpty;
-    function defaultErrorFactory() {
-      return new EmptyError_1.EmptyError();
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/elementAt.js
-var require_elementAt = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/elementAt.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.elementAt = void 0;
-    var ArgumentOutOfRangeError_1 = require_ArgumentOutOfRangeError();
-    var filter_1 = require_filter();
-    var throwIfEmpty_1 = require_throwIfEmpty();
-    var defaultIfEmpty_1 = require_defaultIfEmpty();
-    var take_1 = require_take();
-    function elementAt(index, defaultValue) {
-      if (index < 0) {
-        throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError();
-      }
-      var hasDefaultValue = arguments.length >= 2;
-      return function(source) {
-        return source.pipe(filter_1.filter(function(v, i) {
-          return i === index;
-        }), take_1.take(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function() {
-          return new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError();
-        }));
-      };
-    }
-    exports.elementAt = elementAt;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/endWith.js
-var require_endWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/endWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.endWith = void 0;
-    var concat_1 = require_concat();
-    var of_1 = require_of();
-    function endWith() {
-      var values = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        values[_i] = arguments[_i];
-      }
-      return function(source) {
-        return concat_1.concat(source, of_1.of.apply(void 0, __spreadArray([], __read(values))));
-      };
-    }
-    exports.endWith = endWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/every.js
-var require_every = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/every.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.every = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function every(predicate, thisArg) {
-      return lift_1.operate(function(source, subscriber) {
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          if (!predicate.call(thisArg, value, index++, source)) {
-            subscriber.next(false);
-            subscriber.complete();
-          }
-        }, function() {
-          subscriber.next(true);
-          subscriber.complete();
-        }));
-      });
-    }
-    exports.every = every;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/exhaustMap.js
-var require_exhaustMap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/exhaustMap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.exhaustMap = void 0;
-    var map_1 = require_map();
-    var innerFrom_1 = require_innerFrom();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function exhaustMap(project, resultSelector) {
-      if (resultSelector) {
-        return function(source) {
-          return source.pipe(exhaustMap(function(a, i) {
-            return innerFrom_1.innerFrom(project(a, i)).pipe(map_1.map(function(b, ii) {
-              return resultSelector(a, b, i, ii);
-            }));
-          }));
-        };
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var index = 0;
-        var innerSub = null;
-        var isComplete = false;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(outerValue) {
-          if (!innerSub) {
-            innerSub = OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, function() {
-              innerSub = null;
-              isComplete && subscriber.complete();
-            });
-            innerFrom_1.innerFrom(project(outerValue, index++)).subscribe(innerSub);
-          }
-        }, function() {
-          isComplete = true;
-          !innerSub && subscriber.complete();
-        }));
-      });
-    }
-    exports.exhaustMap = exhaustMap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/exhaustAll.js
-var require_exhaustAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/exhaustAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.exhaustAll = void 0;
-    var exhaustMap_1 = require_exhaustMap();
-    var identity_1 = require_identity();
-    function exhaustAll() {
-      return exhaustMap_1.exhaustMap(identity_1.identity);
-    }
-    exports.exhaustAll = exhaustAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/exhaust.js
-var require_exhaust = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/exhaust.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.exhaust = void 0;
-    var exhaustAll_1 = require_exhaustAll();
-    exports.exhaust = exhaustAll_1.exhaustAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/expand.js
-var require_expand = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/expand.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.expand = void 0;
-    var lift_1 = require_lift();
-    var mergeInternals_1 = require_mergeInternals();
-    function expand(project, concurrent, scheduler) {
-      if (concurrent === void 0) {
-        concurrent = Infinity;
-      }
-      concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;
-      return lift_1.operate(function(source, subscriber) {
-        return mergeInternals_1.mergeInternals(source, subscriber, project, concurrent, void 0, true, scheduler);
-      });
-    }
-    exports.expand = expand;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/finalize.js
-var require_finalize = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/finalize.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.finalize = void 0;
-    var lift_1 = require_lift();
-    function finalize(callback) {
-      return lift_1.operate(function(source, subscriber) {
-        try {
-          source.subscribe(subscriber);
-        } finally {
-          subscriber.add(callback);
-        }
-      });
-    }
-    exports.finalize = finalize;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/find.js
-var require_find = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/find.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.createFind = exports.find = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function find(predicate, thisArg) {
-      return lift_1.operate(createFind(predicate, thisArg, "value"));
-    }
-    exports.find = find;
-    function createFind(predicate, thisArg, emit) {
-      var findIndex = emit === "index";
-      return function(source, subscriber) {
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var i = index++;
-          if (predicate.call(thisArg, value, i, source)) {
-            subscriber.next(findIndex ? i : value);
-            subscriber.complete();
-          }
-        }, function() {
-          subscriber.next(findIndex ? -1 : void 0);
-          subscriber.complete();
-        }));
-      };
-    }
-    exports.createFind = createFind;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/findIndex.js
-var require_findIndex = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/findIndex.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.findIndex = void 0;
-    var lift_1 = require_lift();
-    var find_1 = require_find();
-    function findIndex(predicate, thisArg) {
-      return lift_1.operate(find_1.createFind(predicate, thisArg, "index"));
-    }
-    exports.findIndex = findIndex;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/first.js
-var require_first = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/first.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.first = void 0;
-    var EmptyError_1 = require_EmptyError();
-    var filter_1 = require_filter();
-    var take_1 = require_take();
-    var defaultIfEmpty_1 = require_defaultIfEmpty();
-    var throwIfEmpty_1 = require_throwIfEmpty();
-    var identity_1 = require_identity();
-    function first(predicate, defaultValue) {
-      var hasDefaultValue = arguments.length >= 2;
-      return function(source) {
-        return source.pipe(predicate ? filter_1.filter(function(v, i) {
-          return predicate(v, i, source);
-        }) : identity_1.identity, take_1.take(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function() {
-          return new EmptyError_1.EmptyError();
-        }));
-      };
-    }
-    exports.first = first;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/groupBy.js
-var require_groupBy = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/groupBy.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.groupBy = void 0;
-    var Observable_1 = require_Observable();
-    var innerFrom_1 = require_innerFrom();
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function groupBy(keySelector, elementOrOptions, duration, connector) {
-      return lift_1.operate(function(source, subscriber) {
-        var element;
-        if (!elementOrOptions || typeof elementOrOptions === "function") {
-          element = elementOrOptions;
-        } else {
-          duration = elementOrOptions.duration, element = elementOrOptions.element, connector = elementOrOptions.connector;
-        }
-        var groups = /* @__PURE__ */ new Map();
-        var notify = function(cb) {
-          groups.forEach(cb);
-          cb(subscriber);
-        };
-        var handleError2 = function(err) {
-          return notify(function(consumer) {
-            return consumer.error(err);
-          });
-        };
-        var activeGroups = 0;
-        var teardownAttempted = false;
-        var groupBySourceSubscriber = new OperatorSubscriber_1.OperatorSubscriber(subscriber, function(value) {
-          try {
-            var key_1 = keySelector(value);
-            var group_1 = groups.get(key_1);
-            if (!group_1) {
-              groups.set(key_1, group_1 = connector ? connector() : new Subject_1.Subject());
-              var grouped = createGroupedObservable(key_1, group_1);
-              subscriber.next(grouped);
-              if (duration) {
-                var durationSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(group_1, function() {
-                  group_1.complete();
-                  durationSubscriber_1 === null || durationSubscriber_1 === void 0 ? void 0 : durationSubscriber_1.unsubscribe();
-                }, void 0, void 0, function() {
-                  return groups.delete(key_1);
-                });
-                groupBySourceSubscriber.add(innerFrom_1.innerFrom(duration(grouped)).subscribe(durationSubscriber_1));
-              }
-            }
-            group_1.next(element ? element(value) : value);
-          } catch (err) {
-            handleError2(err);
-          }
-        }, function() {
-          return notify(function(consumer) {
-            return consumer.complete();
-          });
-        }, handleError2, function() {
-          return groups.clear();
-        }, function() {
-          teardownAttempted = true;
-          return activeGroups === 0;
-        });
-        source.subscribe(groupBySourceSubscriber);
-        function createGroupedObservable(key, groupSubject) {
-          var result = new Observable_1.Observable(function(groupSubscriber) {
-            activeGroups++;
-            var innerSub = groupSubject.subscribe(groupSubscriber);
-            return function() {
-              innerSub.unsubscribe();
-              --activeGroups === 0 && teardownAttempted && groupBySourceSubscriber.unsubscribe();
-            };
-          });
-          result.key = key;
-          return result;
-        }
-      });
-    }
-    exports.groupBy = groupBy;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/isEmpty.js
-var require_isEmpty = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/isEmpty.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.isEmpty = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function isEmpty() {
-      return lift_1.operate(function(source, subscriber) {
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          subscriber.next(false);
-          subscriber.complete();
-        }, function() {
-          subscriber.next(true);
-          subscriber.complete();
-        }));
-      });
-    }
-    exports.isEmpty = isEmpty;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/takeLast.js
-var require_takeLast = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/takeLast.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.takeLast = void 0;
-    var empty_1 = require_empty();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function takeLast(count) {
-      return count <= 0 ? function() {
-        return empty_1.EMPTY;
-      } : lift_1.operate(function(source, subscriber) {
-        var buffer = [];
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          buffer.push(value);
-          count < buffer.length && buffer.shift();
-        }, function() {
-          var e_1, _a;
-          try {
-            for (var buffer_1 = __values(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {
-              var value = buffer_1_1.value;
-              subscriber.next(value);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-          subscriber.complete();
-        }, void 0, function() {
-          buffer = null;
-        }));
-      });
-    }
-    exports.takeLast = takeLast;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/last.js
-var require_last = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/last.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.last = void 0;
-    var EmptyError_1 = require_EmptyError();
-    var filter_1 = require_filter();
-    var takeLast_1 = require_takeLast();
-    var throwIfEmpty_1 = require_throwIfEmpty();
-    var defaultIfEmpty_1 = require_defaultIfEmpty();
-    var identity_1 = require_identity();
-    function last(predicate, defaultValue) {
-      var hasDefaultValue = arguments.length >= 2;
-      return function(source) {
-        return source.pipe(predicate ? filter_1.filter(function(v, i) {
-          return predicate(v, i, source);
-        }) : identity_1.identity, takeLast_1.takeLast(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function() {
-          return new EmptyError_1.EmptyError();
-        }));
-      };
-    }
-    exports.last = last;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/materialize.js
-var require_materialize = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/materialize.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.materialize = void 0;
-    var Notification_1 = require_Notification();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function materialize() {
-      return lift_1.operate(function(source, subscriber) {
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          subscriber.next(Notification_1.Notification.createNext(value));
-        }, function() {
-          subscriber.next(Notification_1.Notification.createComplete());
-          subscriber.complete();
-        }, function(err) {
-          subscriber.next(Notification_1.Notification.createError(err));
-          subscriber.complete();
-        }));
-      });
-    }
-    exports.materialize = materialize;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/max.js
-var require_max = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/max.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.max = void 0;
-    var reduce_1 = require_reduce();
-    var isFunction_1 = require_isFunction();
-    function max(comparer) {
-      return reduce_1.reduce(isFunction_1.isFunction(comparer) ? function(x, y) {
-        return comparer(x, y) > 0 ? x : y;
-      } : function(x, y) {
-        return x > y ? x : y;
-      });
-    }
-    exports.max = max;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/flatMap.js
-var require_flatMap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/flatMap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.flatMap = void 0;
-    var mergeMap_1 = require_mergeMap();
-    exports.flatMap = mergeMap_1.mergeMap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeMapTo.js
-var require_mergeMapTo = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeMapTo.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeMapTo = void 0;
-    var mergeMap_1 = require_mergeMap();
-    var isFunction_1 = require_isFunction();
-    function mergeMapTo(innerObservable, resultSelector, concurrent) {
-      if (concurrent === void 0) {
-        concurrent = Infinity;
-      }
-      if (isFunction_1.isFunction(resultSelector)) {
-        return mergeMap_1.mergeMap(function() {
-          return innerObservable;
-        }, resultSelector, concurrent);
-      }
-      if (typeof resultSelector === "number") {
-        concurrent = resultSelector;
-      }
-      return mergeMap_1.mergeMap(function() {
-        return innerObservable;
-      }, concurrent);
-    }
-    exports.mergeMapTo = mergeMapTo;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeScan.js
-var require_mergeScan = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeScan.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeScan = void 0;
-    var lift_1 = require_lift();
-    var mergeInternals_1 = require_mergeInternals();
-    function mergeScan(accumulator, seed, concurrent) {
-      if (concurrent === void 0) {
-        concurrent = Infinity;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var state = seed;
-        return mergeInternals_1.mergeInternals(source, subscriber, function(value, index) {
-          return accumulator(state, value, index);
-        }, concurrent, function(value) {
-          state = value;
-        }, false, void 0, function() {
-          return state = null;
-        });
-      });
-    }
-    exports.mergeScan = mergeScan;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/merge.js
-var require_merge2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/merge.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.merge = void 0;
-    var lift_1 = require_lift();
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var mergeAll_1 = require_mergeAll();
-    var args_1 = require_args();
-    var from_1 = require_from();
-    function merge2() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(args);
-      var concurrent = args_1.popNumber(args, Infinity);
-      args = argsOrArgArray_1.argsOrArgArray(args);
-      return lift_1.operate(function(source, subscriber) {
-        mergeAll_1.mergeAll(concurrent)(from_1.from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);
-      });
-    }
-    exports.merge = merge2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/mergeWith.js
-var require_mergeWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/mergeWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeWith = void 0;
-    var merge_1 = require_merge2();
-    function mergeWith() {
-      var otherSources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        otherSources[_i] = arguments[_i];
-      }
-      return merge_1.merge.apply(void 0, __spreadArray([], __read(otherSources)));
-    }
-    exports.mergeWith = mergeWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/min.js
-var require_min = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/min.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.min = void 0;
-    var reduce_1 = require_reduce();
-    var isFunction_1 = require_isFunction();
-    function min(comparer) {
-      return reduce_1.reduce(isFunction_1.isFunction(comparer) ? function(x, y) {
-        return comparer(x, y) < 0 ? x : y;
-      } : function(x, y) {
-        return x < y ? x : y;
-      });
-    }
-    exports.min = min;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/multicast.js
-var require_multicast = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/multicast.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.multicast = void 0;
-    var ConnectableObservable_1 = require_ConnectableObservable();
-    var isFunction_1 = require_isFunction();
-    var connect_1 = require_connect();
-    function multicast(subjectOrSubjectFactory, selector) {
-      var subjectFactory = isFunction_1.isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : function() {
-        return subjectOrSubjectFactory;
-      };
-      if (isFunction_1.isFunction(selector)) {
-        return connect_1.connect(selector, {
-          connector: subjectFactory
-        });
-      }
-      return function(source) {
-        return new ConnectableObservable_1.ConnectableObservable(source, subjectFactory);
-      };
-    }
-    exports.multicast = multicast;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/onErrorResumeNextWith.js
-var require_onErrorResumeNextWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/onErrorResumeNextWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.onErrorResumeNext = exports.onErrorResumeNextWith = void 0;
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var onErrorResumeNext_1 = require_onErrorResumeNext();
-    function onErrorResumeNextWith() {
-      var sources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        sources[_i] = arguments[_i];
-      }
-      var nextSources = argsOrArgArray_1.argsOrArgArray(sources);
-      return function(source) {
-        return onErrorResumeNext_1.onErrorResumeNext.apply(void 0, __spreadArray([source], __read(nextSources)));
-      };
-    }
-    exports.onErrorResumeNextWith = onErrorResumeNextWith;
-    exports.onErrorResumeNext = onErrorResumeNextWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/pairwise.js
-var require_pairwise = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/pairwise.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.pairwise = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function pairwise() {
-      return lift_1.operate(function(source, subscriber) {
-        var prev;
-        var hasPrev = false;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var p = prev;
-          prev = value;
-          hasPrev && subscriber.next([p, value]);
-          hasPrev = true;
-        }));
-      });
-    }
-    exports.pairwise = pairwise;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/pluck.js
-var require_pluck = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/pluck.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.pluck = void 0;
-    var map_1 = require_map();
-    function pluck() {
-      var properties = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        properties[_i] = arguments[_i];
-      }
-      var length = properties.length;
-      if (length === 0) {
-        throw new Error("list of properties cannot be empty.");
-      }
-      return map_1.map(function(x) {
-        var currentProp = x;
-        for (var i = 0; i < length; i++) {
-          var p = currentProp === null || currentProp === void 0 ? void 0 : currentProp[properties[i]];
-          if (typeof p !== "undefined") {
-            currentProp = p;
-          } else {
-            return void 0;
-          }
-        }
-        return currentProp;
-      });
-    }
-    exports.pluck = pluck;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/publish.js
-var require_publish = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/publish.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.publish = void 0;
-    var Subject_1 = require_Subject();
-    var multicast_1 = require_multicast();
-    var connect_1 = require_connect();
-    function publish(selector) {
-      return selector ? function(source) {
-        return connect_1.connect(selector)(source);
-      } : function(source) {
-        return multicast_1.multicast(new Subject_1.Subject())(source);
-      };
-    }
-    exports.publish = publish;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/publishBehavior.js
-var require_publishBehavior = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/publishBehavior.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.publishBehavior = void 0;
-    var BehaviorSubject_1 = require_BehaviorSubject();
-    var ConnectableObservable_1 = require_ConnectableObservable();
-    function publishBehavior(initialValue) {
-      return function(source) {
-        var subject = new BehaviorSubject_1.BehaviorSubject(initialValue);
-        return new ConnectableObservable_1.ConnectableObservable(source, function() {
-          return subject;
-        });
-      };
-    }
-    exports.publishBehavior = publishBehavior;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/publishLast.js
-var require_publishLast = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/publishLast.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.publishLast = void 0;
-    var AsyncSubject_1 = require_AsyncSubject();
-    var ConnectableObservable_1 = require_ConnectableObservable();
-    function publishLast() {
-      return function(source) {
-        var subject = new AsyncSubject_1.AsyncSubject();
-        return new ConnectableObservable_1.ConnectableObservable(source, function() {
-          return subject;
-        });
-      };
-    }
-    exports.publishLast = publishLast;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/publishReplay.js
-var require_publishReplay = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/publishReplay.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.publishReplay = void 0;
-    var ReplaySubject_1 = require_ReplaySubject();
-    var multicast_1 = require_multicast();
-    var isFunction_1 = require_isFunction();
-    function publishReplay(bufferSize, windowTime, selectorOrScheduler, timestampProvider) {
-      if (selectorOrScheduler && !isFunction_1.isFunction(selectorOrScheduler)) {
-        timestampProvider = selectorOrScheduler;
-      }
-      var selector = isFunction_1.isFunction(selectorOrScheduler) ? selectorOrScheduler : void 0;
-      return function(source) {
-        return multicast_1.multicast(new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, timestampProvider), selector)(source);
-      };
-    }
-    exports.publishReplay = publishReplay;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/raceWith.js
-var require_raceWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/raceWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.raceWith = void 0;
-    var race_1 = require_race();
-    var lift_1 = require_lift();
-    var identity_1 = require_identity();
-    function raceWith() {
-      var otherSources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        otherSources[_i] = arguments[_i];
-      }
-      return !otherSources.length ? identity_1.identity : lift_1.operate(function(source, subscriber) {
-        race_1.raceInit(__spreadArray([source], __read(otherSources)))(subscriber);
-      });
-    }
-    exports.raceWith = raceWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/repeat.js
-var require_repeat = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/repeat.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.repeat = void 0;
-    var empty_1 = require_empty();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    var timer_1 = require_timer();
-    function repeat(countOrConfig) {
-      var _a;
-      var count = Infinity;
-      var delay;
-      if (countOrConfig != null) {
-        if (typeof countOrConfig === "object") {
-          _a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay;
-        } else {
-          count = countOrConfig;
-        }
-      }
-      return count <= 0 ? function() {
-        return empty_1.EMPTY;
-      } : lift_1.operate(function(source, subscriber) {
-        var soFar = 0;
-        var sourceSub;
-        var resubscribe = function() {
-          sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe();
-          sourceSub = null;
-          if (delay != null) {
-            var notifier = typeof delay === "number" ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(soFar));
-            var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-              notifierSubscriber_1.unsubscribe();
-              subscribeToSource();
-            });
-            notifier.subscribe(notifierSubscriber_1);
-          } else {
-            subscribeToSource();
-          }
-        };
-        var subscribeToSource = function() {
-          var syncUnsub = false;
-          sourceSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, function() {
-            if (++soFar < count) {
-              if (sourceSub) {
-                resubscribe();
-              } else {
-                syncUnsub = true;
-              }
-            } else {
-              subscriber.complete();
-            }
-          }));
-          if (syncUnsub) {
-            resubscribe();
-          }
-        };
-        subscribeToSource();
-      });
-    }
-    exports.repeat = repeat;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/repeatWhen.js
-var require_repeatWhen = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/repeatWhen.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.repeatWhen = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function repeatWhen(notifier) {
-      return lift_1.operate(function(source, subscriber) {
-        var innerSub;
-        var syncResub = false;
-        var completions$;
-        var isNotifierComplete = false;
-        var isMainComplete = false;
-        var checkComplete = function() {
-          return isMainComplete && isNotifierComplete && (subscriber.complete(), true);
-        };
-        var getCompletionSubject = function() {
-          if (!completions$) {
-            completions$ = new Subject_1.Subject();
-            innerFrom_1.innerFrom(notifier(completions$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-              if (innerSub) {
-                subscribeForRepeatWhen();
-              } else {
-                syncResub = true;
-              }
-            }, function() {
-              isNotifierComplete = true;
-              checkComplete();
-            }));
-          }
-          return completions$;
-        };
-        var subscribeForRepeatWhen = function() {
-          isMainComplete = false;
-          innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, function() {
-            isMainComplete = true;
-            !checkComplete() && getCompletionSubject().next();
-          }));
-          if (syncResub) {
-            innerSub.unsubscribe();
-            innerSub = null;
-            syncResub = false;
-            subscribeForRepeatWhen();
-          }
-        };
-        subscribeForRepeatWhen();
-      });
-    }
-    exports.repeatWhen = repeatWhen;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/retry.js
-var require_retry = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/retry.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.retry = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var identity_1 = require_identity();
-    var timer_1 = require_timer();
-    var innerFrom_1 = require_innerFrom();
-    function retry(configOrCount) {
-      if (configOrCount === void 0) {
-        configOrCount = Infinity;
-      }
-      var config;
-      if (configOrCount && typeof configOrCount === "object") {
-        config = configOrCount;
-      } else {
-        config = {
-          count: configOrCount
-        };
-      }
-      var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b;
-      return count <= 0 ? identity_1.identity : lift_1.operate(function(source, subscriber) {
-        var soFar = 0;
-        var innerSub;
-        var subscribeForRetry = function() {
-          var syncUnsub = false;
-          innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-            if (resetOnSuccess) {
-              soFar = 0;
-            }
-            subscriber.next(value);
-          }, void 0, function(err) {
-            if (soFar++ < count) {
-              var resub_1 = function() {
-                if (innerSub) {
-                  innerSub.unsubscribe();
-                  innerSub = null;
-                  subscribeForRetry();
-                } else {
-                  syncUnsub = true;
-                }
-              };
-              if (delay != null) {
-                var notifier = typeof delay === "number" ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(err, soFar));
-                var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-                  notifierSubscriber_1.unsubscribe();
-                  resub_1();
-                }, function() {
-                  subscriber.complete();
-                });
-                notifier.subscribe(notifierSubscriber_1);
-              } else {
-                resub_1();
-              }
-            } else {
-              subscriber.error(err);
-            }
-          }));
-          if (syncUnsub) {
-            innerSub.unsubscribe();
-            innerSub = null;
-            subscribeForRetry();
-          }
-        };
-        subscribeForRetry();
-      });
-    }
-    exports.retry = retry;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/retryWhen.js
-var require_retryWhen = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/retryWhen.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.retryWhen = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function retryWhen(notifier) {
-      return lift_1.operate(function(source, subscriber) {
-        var innerSub;
-        var syncResub = false;
-        var errors$;
-        var subscribeForRetryWhen = function() {
-          innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, void 0, void 0, function(err) {
-            if (!errors$) {
-              errors$ = new Subject_1.Subject();
-              innerFrom_1.innerFrom(notifier(errors$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-                return innerSub ? subscribeForRetryWhen() : syncResub = true;
-              }));
-            }
-            if (errors$) {
-              errors$.next(err);
-            }
-          }));
-          if (syncResub) {
-            innerSub.unsubscribe();
-            innerSub = null;
-            syncResub = false;
-            subscribeForRetryWhen();
-          }
-        };
-        subscribeForRetryWhen();
-      });
-    }
-    exports.retryWhen = retryWhen;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/sample.js
-var require_sample = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/sample.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.sample = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var lift_1 = require_lift();
-    var noop_1 = require_noop();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function sample(notifier) {
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        var lastValue = null;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          hasValue = true;
-          lastValue = value;
-        }));
-        innerFrom_1.innerFrom(notifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          if (hasValue) {
-            hasValue = false;
-            var value = lastValue;
-            lastValue = null;
-            subscriber.next(value);
-          }
-        }, noop_1.noop));
-      });
-    }
-    exports.sample = sample;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/sampleTime.js
-var require_sampleTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/sampleTime.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.sampleTime = void 0;
-    var async_1 = require_async();
-    var sample_1 = require_sample();
-    var interval_1 = require_interval();
-    function sampleTime(period, scheduler) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      return sample_1.sample(interval_1.interval(period, scheduler));
-    }
-    exports.sampleTime = sampleTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/scan.js
-var require_scan = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/scan.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.scan = void 0;
-    var lift_1 = require_lift();
-    var scanInternals_1 = require_scanInternals();
-    function scan(accumulator, seed) {
-      return lift_1.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, true));
-    }
-    exports.scan = scan;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/sequenceEqual.js
-var require_sequenceEqual = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/sequenceEqual.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.sequenceEqual = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function sequenceEqual(compareTo, comparator) {
-      if (comparator === void 0) {
-        comparator = function(a, b) {
-          return a === b;
-        };
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var aState = createState();
-        var bState = createState();
-        var emit = function(isEqual) {
-          subscriber.next(isEqual);
-          subscriber.complete();
-        };
-        var createSubscriber = function(selfState, otherState) {
-          var sequenceEqualSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(a) {
-            var buffer = otherState.buffer, complete = otherState.complete;
-            if (buffer.length === 0) {
-              complete ? emit(false) : selfState.buffer.push(a);
-            } else {
-              !comparator(a, buffer.shift()) && emit(false);
-            }
-          }, function() {
-            selfState.complete = true;
-            var complete = otherState.complete, buffer = otherState.buffer;
-            complete && emit(buffer.length === 0);
-            sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe();
-          });
-          return sequenceEqualSubscriber;
-        };
-        source.subscribe(createSubscriber(aState, bState));
-        innerFrom_1.innerFrom(compareTo).subscribe(createSubscriber(bState, aState));
-      });
-    }
-    exports.sequenceEqual = sequenceEqual;
-    function createState() {
-      return {
-        buffer: [],
-        complete: false
-      };
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/share.js
-var require_share = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/share.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.share = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var Subject_1 = require_Subject();
-    var Subscriber_1 = require_Subscriber();
-    var lift_1 = require_lift();
-    function share(options) {
-      if (options === void 0) {
-        options = {};
-      }
-      var _a = options.connector, connector = _a === void 0 ? function() {
-        return new Subject_1.Subject();
-      } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d;
-      return function(wrapperSource) {
-        var connection;
-        var resetConnection;
-        var subject;
-        var refCount = 0;
-        var hasCompleted = false;
-        var hasErrored = false;
-        var cancelReset = function() {
-          resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();
-          resetConnection = void 0;
-        };
-        var reset = function() {
-          cancelReset();
-          connection = subject = void 0;
-          hasCompleted = hasErrored = false;
-        };
-        var resetAndUnsubscribe = function() {
-          var conn = connection;
-          reset();
-          conn === null || conn === void 0 ? void 0 : conn.unsubscribe();
-        };
-        return lift_1.operate(function(source, subscriber) {
-          refCount++;
-          if (!hasErrored && !hasCompleted) {
-            cancelReset();
-          }
-          var dest = subject = subject !== null && subject !== void 0 ? subject : connector();
-          subscriber.add(function() {
-            refCount--;
-            if (refCount === 0 && !hasErrored && !hasCompleted) {
-              resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);
-            }
-          });
-          dest.subscribe(subscriber);
-          if (!connection && refCount > 0) {
-            connection = new Subscriber_1.SafeSubscriber({
-              next: function(value) {
-                return dest.next(value);
-              },
-              error: function(err) {
-                hasErrored = true;
-                cancelReset();
-                resetConnection = handleReset(reset, resetOnError, err);
-                dest.error(err);
-              },
-              complete: function() {
-                hasCompleted = true;
-                cancelReset();
-                resetConnection = handleReset(reset, resetOnComplete);
-                dest.complete();
-              }
-            });
-            innerFrom_1.innerFrom(source).subscribe(connection);
-          }
-        })(wrapperSource);
-      };
-    }
-    exports.share = share;
-    function handleReset(reset, on) {
-      var args = [];
-      for (var _i = 2; _i < arguments.length; _i++) {
-        args[_i - 2] = arguments[_i];
-      }
-      if (on === true) {
-        reset();
-        return;
-      }
-      if (on === false) {
-        return;
-      }
-      var onSubscriber = new Subscriber_1.SafeSubscriber({
-        next: function() {
-          onSubscriber.unsubscribe();
-          reset();
-        }
-      });
-      return innerFrom_1.innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);
-    }
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/shareReplay.js
-var require_shareReplay = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/shareReplay.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.shareReplay = void 0;
-    var ReplaySubject_1 = require_ReplaySubject();
-    var share_1 = require_share();
-    function shareReplay(configOrBufferSize, windowTime, scheduler) {
-      var _a, _b, _c;
-      var bufferSize;
-      var refCount = false;
-      if (configOrBufferSize && typeof configOrBufferSize === "object") {
-        _a = configOrBufferSize.bufferSize, bufferSize = _a === void 0 ? Infinity : _a, _b = configOrBufferSize.windowTime, windowTime = _b === void 0 ? Infinity : _b, _c = configOrBufferSize.refCount, refCount = _c === void 0 ? false : _c, scheduler = configOrBufferSize.scheduler;
-      } else {
-        bufferSize = configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity;
-      }
-      return share_1.share({
-        connector: function() {
-          return new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler);
-        },
-        resetOnError: true,
-        resetOnComplete: false,
-        resetOnRefCountZero: refCount
-      });
-    }
-    exports.shareReplay = shareReplay;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/single.js
-var require_single = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/single.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.single = void 0;
-    var EmptyError_1 = require_EmptyError();
-    var SequenceError_1 = require_SequenceError();
-    var NotFoundError_1 = require_NotFoundError();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function single(predicate) {
-      return lift_1.operate(function(source, subscriber) {
-        var hasValue = false;
-        var singleValue;
-        var seenValue = false;
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          seenValue = true;
-          if (!predicate || predicate(value, index++, source)) {
-            hasValue && subscriber.error(new SequenceError_1.SequenceError("Too many matching values"));
-            hasValue = true;
-            singleValue = value;
-          }
-        }, function() {
-          if (hasValue) {
-            subscriber.next(singleValue);
-            subscriber.complete();
-          } else {
-            subscriber.error(seenValue ? new NotFoundError_1.NotFoundError("No matching values") : new EmptyError_1.EmptyError());
-          }
-        }));
-      });
-    }
-    exports.single = single;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/skip.js
-var require_skip = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/skip.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.skip = void 0;
-    var filter_1 = require_filter();
-    function skip(count) {
-      return filter_1.filter(function(_, index) {
-        return count <= index;
-      });
-    }
-    exports.skip = skip;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/skipLast.js
-var require_skipLast = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/skipLast.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.skipLast = void 0;
-    var identity_1 = require_identity();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function skipLast(skipCount) {
-      return skipCount <= 0 ? identity_1.identity : lift_1.operate(function(source, subscriber) {
-        var ring = new Array(skipCount);
-        var seen = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var valueIndex = seen++;
-          if (valueIndex < skipCount) {
-            ring[valueIndex] = value;
-          } else {
-            var index = valueIndex % skipCount;
-            var oldValue = ring[index];
-            ring[index] = value;
-            subscriber.next(oldValue);
-          }
-        }));
-        return function() {
-          ring = null;
-        };
-      });
-    }
-    exports.skipLast = skipLast;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/skipUntil.js
-var require_skipUntil = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/skipUntil.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.skipUntil = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    var noop_1 = require_noop();
-    function skipUntil(notifier) {
-      return lift_1.operate(function(source, subscriber) {
-        var taking = false;
-        var skipSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          skipSubscriber === null || skipSubscriber === void 0 ? void 0 : skipSubscriber.unsubscribe();
-          taking = true;
-        }, noop_1.noop);
-        innerFrom_1.innerFrom(notifier).subscribe(skipSubscriber);
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return taking && subscriber.next(value);
-        }));
-      });
-    }
-    exports.skipUntil = skipUntil;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/skipWhile.js
-var require_skipWhile = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/skipWhile.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.skipWhile = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function skipWhile(predicate) {
-      return lift_1.operate(function(source, subscriber) {
-        var taking = false;
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return (taking || (taking = !predicate(value, index++))) && subscriber.next(value);
-        }));
-      });
-    }
-    exports.skipWhile = skipWhile;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/startWith.js
-var require_startWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/startWith.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.startWith = void 0;
-    var concat_1 = require_concat();
-    var args_1 = require_args();
-    var lift_1 = require_lift();
-    function startWith() {
-      var values = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        values[_i] = arguments[_i];
-      }
-      var scheduler = args_1.popScheduler(values);
-      return lift_1.operate(function(source, subscriber) {
-        (scheduler ? concat_1.concat(values, source, scheduler) : concat_1.concat(values, source)).subscribe(subscriber);
-      });
-    }
-    exports.startWith = startWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/switchMap.js
-var require_switchMap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/switchMap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.switchMap = void 0;
-    var innerFrom_1 = require_innerFrom();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function switchMap(project, resultSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var innerSubscriber = null;
-        var index = 0;
-        var isComplete = false;
-        var checkComplete = function() {
-          return isComplete && !innerSubscriber && subscriber.complete();
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();
-          var innerIndex = 0;
-          var outerIndex = index++;
-          innerFrom_1.innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(innerValue) {
-            return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);
-          }, function() {
-            innerSubscriber = null;
-            checkComplete();
-          }));
-        }, function() {
-          isComplete = true;
-          checkComplete();
-        }));
-      });
-    }
-    exports.switchMap = switchMap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/switchAll.js
-var require_switchAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/switchAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.switchAll = void 0;
-    var switchMap_1 = require_switchMap();
-    var identity_1 = require_identity();
-    function switchAll() {
-      return switchMap_1.switchMap(identity_1.identity);
-    }
-    exports.switchAll = switchAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/switchMapTo.js
-var require_switchMapTo = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/switchMapTo.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.switchMapTo = void 0;
-    var switchMap_1 = require_switchMap();
-    var isFunction_1 = require_isFunction();
-    function switchMapTo(innerObservable, resultSelector) {
-      return isFunction_1.isFunction(resultSelector) ? switchMap_1.switchMap(function() {
-        return innerObservable;
-      }, resultSelector) : switchMap_1.switchMap(function() {
-        return innerObservable;
-      });
-    }
-    exports.switchMapTo = switchMapTo;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/switchScan.js
-var require_switchScan = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/switchScan.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.switchScan = void 0;
-    var switchMap_1 = require_switchMap();
-    var lift_1 = require_lift();
-    function switchScan(accumulator, seed) {
-      return lift_1.operate(function(source, subscriber) {
-        var state = seed;
-        switchMap_1.switchMap(function(value, index) {
-          return accumulator(state, value, index);
-        }, function(_, innerValue) {
-          return state = innerValue, innerValue;
-        })(source).subscribe(subscriber);
-        return function() {
-          state = null;
-        };
-      });
-    }
-    exports.switchScan = switchScan;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/takeUntil.js
-var require_takeUntil = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/takeUntil.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.takeUntil = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    var noop_1 = require_noop();
-    function takeUntil(notifier) {
-      return lift_1.operate(function(source, subscriber) {
-        innerFrom_1.innerFrom(notifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          return subscriber.complete();
-        }, noop_1.noop));
-        !subscriber.closed && source.subscribe(subscriber);
-      });
-    }
-    exports.takeUntil = takeUntil;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/takeWhile.js
-var require_takeWhile = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/takeWhile.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.takeWhile = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function takeWhile(predicate, inclusive) {
-      if (inclusive === void 0) {
-        inclusive = false;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var index = 0;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var result = predicate(value, index++);
-          (result || inclusive) && subscriber.next(value);
-          !result && subscriber.complete();
-        }));
-      });
-    }
-    exports.takeWhile = takeWhile;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/tap.js
-var require_tap = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/tap.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.tap = void 0;
-    var isFunction_1 = require_isFunction();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var identity_1 = require_identity();
-    function tap(observerOrNext, error, complete) {
-      var tapObserver = isFunction_1.isFunction(observerOrNext) || error || complete ? {
-        next: observerOrNext,
-        error,
-        complete
-      } : observerOrNext;
-      return tapObserver ? lift_1.operate(function(source, subscriber) {
-        var _a;
-        (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
-        var isUnsub = true;
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var _a2;
-          (_a2 = tapObserver.next) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, value);
-          subscriber.next(value);
-        }, function() {
-          var _a2;
-          isUnsub = false;
-          (_a2 = tapObserver.complete) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
-          subscriber.complete();
-        }, function(err) {
-          var _a2;
-          isUnsub = false;
-          (_a2 = tapObserver.error) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, err);
-          subscriber.error(err);
-        }, function() {
-          var _a2, _b;
-          if (isUnsub) {
-            (_a2 = tapObserver.unsubscribe) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
-          }
-          (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
-        }));
-      }) : identity_1.identity;
-    }
-    exports.tap = tap;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/throttle.js
-var require_throttle = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/throttle.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.throttle = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function throttle(durationSelector, config) {
-      return lift_1.operate(function(source, subscriber) {
-        var _a = config !== null && config !== void 0 ? config : {}, _b = _a.leading, leading = _b === void 0 ? true : _b, _c = _a.trailing, trailing = _c === void 0 ? false : _c;
-        var hasValue = false;
-        var sendValue = null;
-        var throttled = null;
-        var isComplete = false;
-        var endThrottling = function() {
-          throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe();
-          throttled = null;
-          if (trailing) {
-            send();
-            isComplete && subscriber.complete();
-          }
-        };
-        var cleanupThrottling = function() {
-          throttled = null;
-          isComplete && subscriber.complete();
-        };
-        var startThrottle = function(value) {
-          return throttled = innerFrom_1.innerFrom(durationSelector(value)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling));
-        };
-        var send = function() {
-          if (hasValue) {
-            hasValue = false;
-            var value = sendValue;
-            sendValue = null;
-            subscriber.next(value);
-            !isComplete && startThrottle(value);
-          }
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          hasValue = true;
-          sendValue = value;
-          !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));
-        }, function() {
-          isComplete = true;
-          !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();
-        }));
-      });
-    }
-    exports.throttle = throttle;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/throttleTime.js
-var require_throttleTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/throttleTime.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.throttleTime = void 0;
-    var async_1 = require_async();
-    var throttle_1 = require_throttle();
-    var timer_1 = require_timer();
-    function throttleTime(duration, scheduler, config) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      var duration$ = timer_1.timer(duration, scheduler);
-      return throttle_1.throttle(function() {
-        return duration$;
-      }, config);
-    }
-    exports.throttleTime = throttleTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/timeInterval.js
-var require_timeInterval = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/timeInterval.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.TimeInterval = exports.timeInterval = void 0;
-    var async_1 = require_async();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function timeInterval(scheduler) {
-      if (scheduler === void 0) {
-        scheduler = async_1.asyncScheduler;
-      }
-      return lift_1.operate(function(source, subscriber) {
-        var last = scheduler.now();
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var now = scheduler.now();
-          var interval = now - last;
-          last = now;
-          subscriber.next(new TimeInterval(value, interval));
-        }));
-      });
-    }
-    exports.timeInterval = timeInterval;
-    var TimeInterval = /* @__PURE__ */ function() {
-      function TimeInterval2(value, interval) {
-        this.value = value;
-        this.interval = interval;
-      }
-      return TimeInterval2;
-    }();
-    exports.TimeInterval = TimeInterval;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/timeoutWith.js
-var require_timeoutWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/timeoutWith.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.timeoutWith = void 0;
-    var async_1 = require_async();
-    var isDate_1 = require_isDate();
-    var timeout_1 = require_timeout();
-    function timeoutWith(due, withObservable, scheduler) {
-      var first;
-      var each;
-      var _with;
-      scheduler = scheduler !== null && scheduler !== void 0 ? scheduler : async_1.async;
-      if (isDate_1.isValidDate(due)) {
-        first = due;
-      } else if (typeof due === "number") {
-        each = due;
-      }
-      if (withObservable) {
-        _with = function() {
-          return withObservable;
-        };
-      } else {
-        throw new TypeError("No observable provided to switch to");
-      }
-      if (first == null && each == null) {
-        throw new TypeError("No timeout provided.");
-      }
-      return timeout_1.timeout({
-        first,
-        each,
-        scheduler,
-        with: _with
-      });
-    }
-    exports.timeoutWith = timeoutWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/timestamp.js
-var require_timestamp = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/timestamp.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.timestamp = void 0;
-    var dateTimestampProvider_1 = require_dateTimestampProvider();
-    var map_1 = require_map();
-    function timestamp(timestampProvider) {
-      if (timestampProvider === void 0) {
-        timestampProvider = dateTimestampProvider_1.dateTimestampProvider;
-      }
-      return map_1.map(function(value) {
-        return {
-          value,
-          timestamp: timestampProvider.now()
-        };
-      });
-    }
-    exports.timestamp = timestamp;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/window.js
-var require_window = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/window.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.window = void 0;
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    var innerFrom_1 = require_innerFrom();
-    function window2(windowBoundaries) {
-      return lift_1.operate(function(source, subscriber) {
-        var windowSubject = new Subject_1.Subject();
-        subscriber.next(windowSubject.asObservable());
-        var errorHandler = function(err) {
-          windowSubject.error(err);
-          subscriber.error(err);
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.next(value);
-        }, function() {
-          windowSubject.complete();
-          subscriber.complete();
-        }, errorHandler));
-        innerFrom_1.innerFrom(windowBoundaries).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function() {
-          windowSubject.complete();
-          subscriber.next(windowSubject = new Subject_1.Subject());
-        }, noop_1.noop, errorHandler));
-        return function() {
-          windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.unsubscribe();
-          windowSubject = null;
-        };
-      });
-    }
-    exports.window = window2;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/windowCount.js
-var require_windowCount = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/windowCount.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.windowCount = void 0;
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    function windowCount(windowSize, startWindowEvery) {
-      if (startWindowEvery === void 0) {
-        startWindowEvery = 0;
-      }
-      var startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;
-      return lift_1.operate(function(source, subscriber) {
-        var windows = [new Subject_1.Subject()];
-        var starts = [];
-        var count = 0;
-        subscriber.next(windows[0].asObservable());
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var e_1, _a;
-          try {
-            for (var windows_1 = __values(windows), windows_1_1 = windows_1.next(); !windows_1_1.done; windows_1_1 = windows_1.next()) {
-              var window_1 = windows_1_1.value;
-              window_1.next(value);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (windows_1_1 && !windows_1_1.done && (_a = windows_1.return)) _a.call(windows_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-          var c = count - windowSize + 1;
-          if (c >= 0 && c % startEvery === 0) {
-            windows.shift().complete();
-          }
-          if (++count % startEvery === 0) {
-            var window_2 = new Subject_1.Subject();
-            windows.push(window_2);
-            subscriber.next(window_2.asObservable());
-          }
-        }, function() {
-          while (windows.length > 0) {
-            windows.shift().complete();
-          }
-          subscriber.complete();
-        }, function(err) {
-          while (windows.length > 0) {
-            windows.shift().error(err);
-          }
-          subscriber.error(err);
-        }, function() {
-          starts = null;
-          windows = null;
-        }));
-      });
-    }
-    exports.windowCount = windowCount;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/windowTime.js
-var require_windowTime = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/windowTime.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.windowTime = void 0;
-    var Subject_1 = require_Subject();
-    var async_1 = require_async();
-    var Subscription_1 = require_Subscription();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var arrRemove_1 = require_arrRemove();
-    var args_1 = require_args();
-    var executeSchedule_1 = require_executeSchedule();
-    function windowTime(windowTimeSpan) {
-      var _a, _b;
-      var otherArgs = [];
-      for (var _i = 1; _i < arguments.length; _i++) {
-        otherArgs[_i - 1] = arguments[_i];
-      }
-      var scheduler = (_a = args_1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler;
-      var windowCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null;
-      var maxWindowSize = otherArgs[1] || Infinity;
-      return lift_1.operate(function(source, subscriber) {
-        var windowRecords = [];
-        var restartOnClose = false;
-        var closeWindow = function(record) {
-          var window2 = record.window, subs = record.subs;
-          window2.complete();
-          subs.unsubscribe();
-          arrRemove_1.arrRemove(windowRecords, record);
-          restartOnClose && startWindow();
-        };
-        var startWindow = function() {
-          if (windowRecords) {
-            var subs = new Subscription_1.Subscription();
-            subscriber.add(subs);
-            var window_1 = new Subject_1.Subject();
-            var record_1 = {
-              window: window_1,
-              subs,
-              seen: 0
-            };
-            windowRecords.push(record_1);
-            subscriber.next(window_1.asObservable());
-            executeSchedule_1.executeSchedule(subs, scheduler, function() {
-              return closeWindow(record_1);
-            }, windowTimeSpan);
-          }
-        };
-        if (windowCreationInterval !== null && windowCreationInterval >= 0) {
-          executeSchedule_1.executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true);
-        } else {
-          restartOnClose = true;
-        }
-        startWindow();
-        var loop = function(cb) {
-          return windowRecords.slice().forEach(cb);
-        };
-        var terminate = function(cb) {
-          loop(function(_a2) {
-            var window2 = _a2.window;
-            return cb(window2);
-          });
-          cb(subscriber);
-          subscriber.unsubscribe();
-        };
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          loop(function(record) {
-            record.window.next(value);
-            maxWindowSize <= ++record.seen && closeWindow(record);
-          });
-        }, function() {
-          return terminate(function(consumer) {
-            return consumer.complete();
-          });
-        }, function(err) {
-          return terminate(function(consumer) {
-            return consumer.error(err);
-          });
-        }));
-        return function() {
-          windowRecords = null;
-        };
-      });
-    }
-    exports.windowTime = windowTime;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/windowToggle.js
-var require_windowToggle = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/windowToggle.js"(exports) {
-    "use strict";
-    var __values = exports && exports.__values || function(o) {
-      var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-      if (m) return m.call(o);
-      if (o && typeof o.length === "number") return {
-        next: function() {
-          if (o && i >= o.length) o = void 0;
-          return {
-            value: o && o[i++],
-            done: !o
-          };
-        }
-      };
-      throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.windowToggle = void 0;
-    var Subject_1 = require_Subject();
-    var Subscription_1 = require_Subscription();
-    var lift_1 = require_lift();
-    var innerFrom_1 = require_innerFrom();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var noop_1 = require_noop();
-    var arrRemove_1 = require_arrRemove();
-    function windowToggle(openings, closingSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var windows = [];
-        var handleError2 = function(err) {
-          while (0 < windows.length) {
-            windows.shift().error(err);
-          }
-          subscriber.error(err);
-        };
-        innerFrom_1.innerFrom(openings).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(openValue) {
-          var window2 = new Subject_1.Subject();
-          windows.push(window2);
-          var closingSubscription = new Subscription_1.Subscription();
-          var closeWindow = function() {
-            arrRemove_1.arrRemove(windows, window2);
-            window2.complete();
-            closingSubscription.unsubscribe();
-          };
-          var closingNotifier;
-          try {
-            closingNotifier = innerFrom_1.innerFrom(closingSelector(openValue));
-          } catch (err) {
-            handleError2(err);
-            return;
-          }
-          subscriber.next(window2.asObservable());
-          closingSubscription.add(closingNotifier.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, closeWindow, noop_1.noop, handleError2)));
-        }, noop_1.noop));
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          var e_1, _a;
-          var windowsCopy = windows.slice();
-          try {
-            for (var windowsCopy_1 = __values(windowsCopy), windowsCopy_1_1 = windowsCopy_1.next(); !windowsCopy_1_1.done; windowsCopy_1_1 = windowsCopy_1.next()) {
-              var window_1 = windowsCopy_1_1.value;
-              window_1.next(value);
-            }
-          } catch (e_1_1) {
-            e_1 = {
-              error: e_1_1
-            };
-          } finally {
-            try {
-              if (windowsCopy_1_1 && !windowsCopy_1_1.done && (_a = windowsCopy_1.return)) _a.call(windowsCopy_1);
-            } finally {
-              if (e_1) throw e_1.error;
-            }
-          }
-        }, function() {
-          while (0 < windows.length) {
-            windows.shift().complete();
-          }
-          subscriber.complete();
-        }, handleError2, function() {
-          while (0 < windows.length) {
-            windows.shift().unsubscribe();
-          }
-        }));
-      });
-    }
-    exports.windowToggle = windowToggle;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/windowWhen.js
-var require_windowWhen = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/windowWhen.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.windowWhen = void 0;
-    var Subject_1 = require_Subject();
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    function windowWhen(closingSelector) {
-      return lift_1.operate(function(source, subscriber) {
-        var window2;
-        var closingSubscriber;
-        var handleError2 = function(err) {
-          window2.error(err);
-          subscriber.error(err);
-        };
-        var openWindow = function() {
-          closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();
-          window2 === null || window2 === void 0 ? void 0 : window2.complete();
-          window2 = new Subject_1.Subject();
-          subscriber.next(window2.asObservable());
-          var closingNotifier;
-          try {
-            closingNotifier = innerFrom_1.innerFrom(closingSelector());
-          } catch (err) {
-            handleError2(err);
-            return;
-          }
-          closingNotifier.subscribe(closingSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, openWindow, openWindow, handleError2));
-        };
-        openWindow();
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          return window2.next(value);
-        }, function() {
-          window2.complete();
-          subscriber.complete();
-        }, handleError2, function() {
-          closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();
-          window2 = null;
-        }));
-      });
-    }
-    exports.windowWhen = windowWhen;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/withLatestFrom.js
-var require_withLatestFrom = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/withLatestFrom.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.withLatestFrom = void 0;
-    var lift_1 = require_lift();
-    var OperatorSubscriber_1 = require_OperatorSubscriber();
-    var innerFrom_1 = require_innerFrom();
-    var identity_1 = require_identity();
-    var noop_1 = require_noop();
-    var args_1 = require_args();
-    function withLatestFrom() {
-      var inputs = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        inputs[_i] = arguments[_i];
-      }
-      var project = args_1.popResultSelector(inputs);
-      return lift_1.operate(function(source, subscriber) {
-        var len = inputs.length;
-        var otherValues = new Array(len);
-        var hasValue = inputs.map(function() {
-          return false;
-        });
-        var ready = false;
-        var _loop_1 = function(i2) {
-          innerFrom_1.innerFrom(inputs[i2]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-            otherValues[i2] = value;
-            if (!ready && !hasValue[i2]) {
-              hasValue[i2] = true;
-              (ready = hasValue.every(identity_1.identity)) && (hasValue = null);
-            }
-          }, noop_1.noop));
-        };
-        for (var i = 0; i < len; i++) {
-          _loop_1(i);
-        }
-        source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function(value) {
-          if (ready) {
-            var values = __spreadArray([value], __read(otherValues));
-            subscriber.next(project ? project.apply(void 0, __spreadArray([], __read(values))) : values);
-          }
-        }));
-      });
-    }
-    exports.withLatestFrom = withLatestFrom;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/zipAll.js
-var require_zipAll = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/zipAll.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.zipAll = void 0;
-    var zip_1 = require_zip();
-    var joinAllInternals_1 = require_joinAllInternals();
-    function zipAll(project) {
-      return joinAllInternals_1.joinAllInternals(zip_1.zip, project);
-    }
-    exports.zipAll = zipAll;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/zip.js
-var require_zip2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/zip.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.zip = void 0;
-    var zip_1 = require_zip();
-    var lift_1 = require_lift();
-    function zip() {
-      var sources = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        sources[_i] = arguments[_i];
-      }
-      return lift_1.operate(function(source, subscriber) {
-        zip_1.zip.apply(void 0, __spreadArray([source], __read(sources))).subscribe(subscriber);
-      });
-    }
-    exports.zip = zip;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/zipWith.js
-var require_zipWith = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/zipWith.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.zipWith = void 0;
-    var zip_1 = require_zip2();
-    function zipWith() {
-      var otherInputs = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        otherInputs[_i] = arguments[_i];
-      }
-      return zip_1.zip.apply(void 0, __spreadArray([], __read(otherInputs)));
-    }
-    exports.zipWith = zipWith;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/index.js
-var require_cjs = __commonJS({
-  "node_modules/rxjs/dist/cjs/index.js"(exports) {
-    "use strict";
-    var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
-      if (k2 === void 0) k2 = k;
-      Object.defineProperty(o, k2, {
-        enumerable: true,
-        get: function() {
-          return m[k];
-        }
-      });
-    } : function(o, m, k, k2) {
-      if (k2 === void 0) k2 = k;
-      o[k2] = m[k];
-    });
-    var __exportStar = exports && exports.__exportStar || function(m, exports2) {
-      for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.interval = exports.iif = exports.generate = exports.fromEventPattern = exports.fromEvent = exports.from = exports.forkJoin = exports.empty = exports.defer = exports.connectable = exports.concat = exports.combineLatest = exports.bindNodeCallback = exports.bindCallback = exports.UnsubscriptionError = exports.TimeoutError = exports.SequenceError = exports.ObjectUnsubscribedError = exports.NotFoundError = exports.EmptyError = exports.ArgumentOutOfRangeError = exports.firstValueFrom = exports.lastValueFrom = exports.isObservable = exports.identity = exports.noop = exports.pipe = exports.NotificationKind = exports.Notification = exports.Subscriber = exports.Subscription = exports.Scheduler = exports.VirtualAction = exports.VirtualTimeScheduler = exports.animationFrameScheduler = exports.animationFrame = exports.queueScheduler = exports.queue = exports.asyncScheduler = exports.async = exports.asapScheduler = exports.asap = exports.AsyncSubject = exports.ReplaySubject = exports.BehaviorSubject = exports.Subject = exports.animationFrames = exports.observable = exports.ConnectableObservable = exports.Observable = void 0;
-    exports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.combineLatestWith = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = exports.config = exports.NEVER = exports.EMPTY = exports.scheduled = exports.zip = exports.using = exports.timer = exports.throwError = exports.range = exports.race = exports.partition = exports.pairs = exports.onErrorResumeNext = exports.of = exports.never = exports.merge = void 0;
-    exports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.pairwise = exports.onErrorResumeNextWith = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = exports.mergeAll = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = void 0;
-    exports.zipWith = exports.zipAll = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = exports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = void 0;
-    var Observable_1 = require_Observable();
-    Object.defineProperty(exports, "Observable", {
-      enumerable: true,
-      get: function() {
-        return Observable_1.Observable;
-      }
-    });
-    var ConnectableObservable_1 = require_ConnectableObservable();
-    Object.defineProperty(exports, "ConnectableObservable", {
-      enumerable: true,
-      get: function() {
-        return ConnectableObservable_1.ConnectableObservable;
-      }
-    });
-    var observable_1 = require_observable();
-    Object.defineProperty(exports, "observable", {
-      enumerable: true,
-      get: function() {
-        return observable_1.observable;
-      }
-    });
-    var animationFrames_1 = require_animationFrames();
-    Object.defineProperty(exports, "animationFrames", {
-      enumerable: true,
-      get: function() {
-        return animationFrames_1.animationFrames;
-      }
-    });
-    var Subject_1 = require_Subject();
-    Object.defineProperty(exports, "Subject", {
-      enumerable: true,
-      get: function() {
-        return Subject_1.Subject;
-      }
-    });
-    var BehaviorSubject_1 = require_BehaviorSubject();
-    Object.defineProperty(exports, "BehaviorSubject", {
-      enumerable: true,
-      get: function() {
-        return BehaviorSubject_1.BehaviorSubject;
-      }
-    });
-    var ReplaySubject_1 = require_ReplaySubject();
-    Object.defineProperty(exports, "ReplaySubject", {
-      enumerable: true,
-      get: function() {
-        return ReplaySubject_1.ReplaySubject;
-      }
-    });
-    var AsyncSubject_1 = require_AsyncSubject();
-    Object.defineProperty(exports, "AsyncSubject", {
-      enumerable: true,
-      get: function() {
-        return AsyncSubject_1.AsyncSubject;
-      }
-    });
-    var asap_1 = require_asap();
-    Object.defineProperty(exports, "asap", {
-      enumerable: true,
-      get: function() {
-        return asap_1.asap;
-      }
-    });
-    Object.defineProperty(exports, "asapScheduler", {
-      enumerable: true,
-      get: function() {
-        return asap_1.asapScheduler;
-      }
-    });
-    var async_1 = require_async();
-    Object.defineProperty(exports, "async", {
-      enumerable: true,
-      get: function() {
-        return async_1.async;
-      }
-    });
-    Object.defineProperty(exports, "asyncScheduler", {
-      enumerable: true,
-      get: function() {
-        return async_1.asyncScheduler;
-      }
-    });
-    var queue_1 = require_queue();
-    Object.defineProperty(exports, "queue", {
-      enumerable: true,
-      get: function() {
-        return queue_1.queue;
-      }
-    });
-    Object.defineProperty(exports, "queueScheduler", {
-      enumerable: true,
-      get: function() {
-        return queue_1.queueScheduler;
-      }
-    });
-    var animationFrame_1 = require_animationFrame();
-    Object.defineProperty(exports, "animationFrame", {
-      enumerable: true,
-      get: function() {
-        return animationFrame_1.animationFrame;
-      }
-    });
-    Object.defineProperty(exports, "animationFrameScheduler", {
-      enumerable: true,
-      get: function() {
-        return animationFrame_1.animationFrameScheduler;
-      }
-    });
-    var VirtualTimeScheduler_1 = require_VirtualTimeScheduler();
-    Object.defineProperty(exports, "VirtualTimeScheduler", {
-      enumerable: true,
-      get: function() {
-        return VirtualTimeScheduler_1.VirtualTimeScheduler;
-      }
-    });
-    Object.defineProperty(exports, "VirtualAction", {
-      enumerable: true,
-      get: function() {
-        return VirtualTimeScheduler_1.VirtualAction;
-      }
-    });
-    var Scheduler_1 = require_Scheduler();
-    Object.defineProperty(exports, "Scheduler", {
-      enumerable: true,
-      get: function() {
-        return Scheduler_1.Scheduler;
-      }
-    });
-    var Subscription_1 = require_Subscription();
-    Object.defineProperty(exports, "Subscription", {
-      enumerable: true,
-      get: function() {
-        return Subscription_1.Subscription;
-      }
-    });
-    var Subscriber_1 = require_Subscriber();
-    Object.defineProperty(exports, "Subscriber", {
-      enumerable: true,
-      get: function() {
-        return Subscriber_1.Subscriber;
-      }
-    });
-    var Notification_1 = require_Notification();
-    Object.defineProperty(exports, "Notification", {
-      enumerable: true,
-      get: function() {
-        return Notification_1.Notification;
-      }
-    });
-    Object.defineProperty(exports, "NotificationKind", {
-      enumerable: true,
-      get: function() {
-        return Notification_1.NotificationKind;
-      }
-    });
-    var pipe_1 = require_pipe();
-    Object.defineProperty(exports, "pipe", {
-      enumerable: true,
-      get: function() {
-        return pipe_1.pipe;
-      }
-    });
-    var noop_1 = require_noop();
-    Object.defineProperty(exports, "noop", {
-      enumerable: true,
-      get: function() {
-        return noop_1.noop;
-      }
-    });
-    var identity_1 = require_identity();
-    Object.defineProperty(exports, "identity", {
-      enumerable: true,
-      get: function() {
-        return identity_1.identity;
-      }
-    });
-    var isObservable_1 = require_isObservable();
-    Object.defineProperty(exports, "isObservable", {
-      enumerable: true,
-      get: function() {
-        return isObservable_1.isObservable;
-      }
-    });
-    var lastValueFrom_1 = require_lastValueFrom();
-    Object.defineProperty(exports, "lastValueFrom", {
-      enumerable: true,
-      get: function() {
-        return lastValueFrom_1.lastValueFrom;
-      }
-    });
-    var firstValueFrom_1 = require_firstValueFrom();
-    Object.defineProperty(exports, "firstValueFrom", {
-      enumerable: true,
-      get: function() {
-        return firstValueFrom_1.firstValueFrom;
-      }
-    });
-    var ArgumentOutOfRangeError_1 = require_ArgumentOutOfRangeError();
-    Object.defineProperty(exports, "ArgumentOutOfRangeError", {
-      enumerable: true,
-      get: function() {
-        return ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
-      }
-    });
-    var EmptyError_1 = require_EmptyError();
-    Object.defineProperty(exports, "EmptyError", {
-      enumerable: true,
-      get: function() {
-        return EmptyError_1.EmptyError;
-      }
-    });
-    var NotFoundError_1 = require_NotFoundError();
-    Object.defineProperty(exports, "NotFoundError", {
-      enumerable: true,
-      get: function() {
-        return NotFoundError_1.NotFoundError;
-      }
-    });
-    var ObjectUnsubscribedError_1 = require_ObjectUnsubscribedError();
-    Object.defineProperty(exports, "ObjectUnsubscribedError", {
-      enumerable: true,
-      get: function() {
-        return ObjectUnsubscribedError_1.ObjectUnsubscribedError;
-      }
-    });
-    var SequenceError_1 = require_SequenceError();
-    Object.defineProperty(exports, "SequenceError", {
-      enumerable: true,
-      get: function() {
-        return SequenceError_1.SequenceError;
-      }
-    });
-    var timeout_1 = require_timeout();
-    Object.defineProperty(exports, "TimeoutError", {
-      enumerable: true,
-      get: function() {
-        return timeout_1.TimeoutError;
-      }
-    });
-    var UnsubscriptionError_1 = require_UnsubscriptionError();
-    Object.defineProperty(exports, "UnsubscriptionError", {
-      enumerable: true,
-      get: function() {
-        return UnsubscriptionError_1.UnsubscriptionError;
-      }
-    });
-    var bindCallback_1 = require_bindCallback();
-    Object.defineProperty(exports, "bindCallback", {
-      enumerable: true,
-      get: function() {
-        return bindCallback_1.bindCallback;
-      }
-    });
-    var bindNodeCallback_1 = require_bindNodeCallback();
-    Object.defineProperty(exports, "bindNodeCallback", {
-      enumerable: true,
-      get: function() {
-        return bindNodeCallback_1.bindNodeCallback;
-      }
-    });
-    var combineLatest_1 = require_combineLatest();
-    Object.defineProperty(exports, "combineLatest", {
-      enumerable: true,
-      get: function() {
-        return combineLatest_1.combineLatest;
-      }
-    });
-    var concat_1 = require_concat();
-    Object.defineProperty(exports, "concat", {
-      enumerable: true,
-      get: function() {
-        return concat_1.concat;
-      }
-    });
-    var connectable_1 = require_connectable();
-    Object.defineProperty(exports, "connectable", {
-      enumerable: true,
-      get: function() {
-        return connectable_1.connectable;
-      }
-    });
-    var defer_1 = require_defer();
-    Object.defineProperty(exports, "defer", {
-      enumerable: true,
-      get: function() {
-        return defer_1.defer;
-      }
-    });
-    var empty_1 = require_empty();
-    Object.defineProperty(exports, "empty", {
-      enumerable: true,
-      get: function() {
-        return empty_1.empty;
-      }
-    });
-    var forkJoin_1 = require_forkJoin();
-    Object.defineProperty(exports, "forkJoin", {
-      enumerable: true,
-      get: function() {
-        return forkJoin_1.forkJoin;
-      }
-    });
-    var from_1 = require_from();
-    Object.defineProperty(exports, "from", {
-      enumerable: true,
-      get: function() {
-        return from_1.from;
-      }
-    });
-    var fromEvent_1 = require_fromEvent();
-    Object.defineProperty(exports, "fromEvent", {
-      enumerable: true,
-      get: function() {
-        return fromEvent_1.fromEvent;
-      }
-    });
-    var fromEventPattern_1 = require_fromEventPattern();
-    Object.defineProperty(exports, "fromEventPattern", {
-      enumerable: true,
-      get: function() {
-        return fromEventPattern_1.fromEventPattern;
-      }
-    });
-    var generate_1 = require_generate();
-    Object.defineProperty(exports, "generate", {
-      enumerable: true,
-      get: function() {
-        return generate_1.generate;
-      }
-    });
-    var iif_1 = require_iif();
-    Object.defineProperty(exports, "iif", {
-      enumerable: true,
-      get: function() {
-        return iif_1.iif;
-      }
-    });
-    var interval_1 = require_interval();
-    Object.defineProperty(exports, "interval", {
-      enumerable: true,
-      get: function() {
-        return interval_1.interval;
-      }
-    });
-    var merge_1 = require_merge();
-    Object.defineProperty(exports, "merge", {
-      enumerable: true,
-      get: function() {
-        return merge_1.merge;
-      }
-    });
-    var never_1 = require_never();
-    Object.defineProperty(exports, "never", {
-      enumerable: true,
-      get: function() {
-        return never_1.never;
-      }
-    });
-    var of_1 = require_of();
-    Object.defineProperty(exports, "of", {
-      enumerable: true,
-      get: function() {
-        return of_1.of;
-      }
-    });
-    var onErrorResumeNext_1 = require_onErrorResumeNext();
-    Object.defineProperty(exports, "onErrorResumeNext", {
-      enumerable: true,
-      get: function() {
-        return onErrorResumeNext_1.onErrorResumeNext;
-      }
-    });
-    var pairs_1 = require_pairs();
-    Object.defineProperty(exports, "pairs", {
-      enumerable: true,
-      get: function() {
-        return pairs_1.pairs;
-      }
-    });
-    var partition_1 = require_partition();
-    Object.defineProperty(exports, "partition", {
-      enumerable: true,
-      get: function() {
-        return partition_1.partition;
-      }
-    });
-    var race_1 = require_race();
-    Object.defineProperty(exports, "race", {
-      enumerable: true,
-      get: function() {
-        return race_1.race;
-      }
-    });
-    var range_1 = require_range();
-    Object.defineProperty(exports, "range", {
-      enumerable: true,
-      get: function() {
-        return range_1.range;
-      }
-    });
-    var throwError_1 = require_throwError();
-    Object.defineProperty(exports, "throwError", {
-      enumerable: true,
-      get: function() {
-        return throwError_1.throwError;
-      }
-    });
-    var timer_1 = require_timer();
-    Object.defineProperty(exports, "timer", {
-      enumerable: true,
-      get: function() {
-        return timer_1.timer;
-      }
-    });
-    var using_1 = require_using();
-    Object.defineProperty(exports, "using", {
-      enumerable: true,
-      get: function() {
-        return using_1.using;
-      }
-    });
-    var zip_1 = require_zip();
-    Object.defineProperty(exports, "zip", {
-      enumerable: true,
-      get: function() {
-        return zip_1.zip;
-      }
-    });
-    var scheduled_1 = require_scheduled();
-    Object.defineProperty(exports, "scheduled", {
-      enumerable: true,
-      get: function() {
-        return scheduled_1.scheduled;
-      }
-    });
-    var empty_2 = require_empty();
-    Object.defineProperty(exports, "EMPTY", {
-      enumerable: true,
-      get: function() {
-        return empty_2.EMPTY;
-      }
-    });
-    var never_2 = require_never();
-    Object.defineProperty(exports, "NEVER", {
-      enumerable: true,
-      get: function() {
-        return never_2.NEVER;
-      }
-    });
-    __exportStar(require_types(), exports);
-    var config_1 = require_config();
-    Object.defineProperty(exports, "config", {
-      enumerable: true,
-      get: function() {
-        return config_1.config;
-      }
-    });
-    var audit_1 = require_audit();
-    Object.defineProperty(exports, "audit", {
-      enumerable: true,
-      get: function() {
-        return audit_1.audit;
-      }
-    });
-    var auditTime_1 = require_auditTime();
-    Object.defineProperty(exports, "auditTime", {
-      enumerable: true,
-      get: function() {
-        return auditTime_1.auditTime;
-      }
-    });
-    var buffer_1 = require_buffer();
-    Object.defineProperty(exports, "buffer", {
-      enumerable: true,
-      get: function() {
-        return buffer_1.buffer;
-      }
-    });
-    var bufferCount_1 = require_bufferCount();
-    Object.defineProperty(exports, "bufferCount", {
-      enumerable: true,
-      get: function() {
-        return bufferCount_1.bufferCount;
-      }
-    });
-    var bufferTime_1 = require_bufferTime();
-    Object.defineProperty(exports, "bufferTime", {
-      enumerable: true,
-      get: function() {
-        return bufferTime_1.bufferTime;
-      }
-    });
-    var bufferToggle_1 = require_bufferToggle();
-    Object.defineProperty(exports, "bufferToggle", {
-      enumerable: true,
-      get: function() {
-        return bufferToggle_1.bufferToggle;
-      }
-    });
-    var bufferWhen_1 = require_bufferWhen();
-    Object.defineProperty(exports, "bufferWhen", {
-      enumerable: true,
-      get: function() {
-        return bufferWhen_1.bufferWhen;
-      }
-    });
-    var catchError_1 = require_catchError();
-    Object.defineProperty(exports, "catchError", {
-      enumerable: true,
-      get: function() {
-        return catchError_1.catchError;
-      }
-    });
-    var combineAll_1 = require_combineAll();
-    Object.defineProperty(exports, "combineAll", {
-      enumerable: true,
-      get: function() {
-        return combineAll_1.combineAll;
-      }
-    });
-    var combineLatestAll_1 = require_combineLatestAll();
-    Object.defineProperty(exports, "combineLatestAll", {
-      enumerable: true,
-      get: function() {
-        return combineLatestAll_1.combineLatestAll;
-      }
-    });
-    var combineLatestWith_1 = require_combineLatestWith();
-    Object.defineProperty(exports, "combineLatestWith", {
-      enumerable: true,
-      get: function() {
-        return combineLatestWith_1.combineLatestWith;
-      }
-    });
-    var concatAll_1 = require_concatAll();
-    Object.defineProperty(exports, "concatAll", {
-      enumerable: true,
-      get: function() {
-        return concatAll_1.concatAll;
-      }
-    });
-    var concatMap_1 = require_concatMap();
-    Object.defineProperty(exports, "concatMap", {
-      enumerable: true,
-      get: function() {
-        return concatMap_1.concatMap;
-      }
-    });
-    var concatMapTo_1 = require_concatMapTo();
-    Object.defineProperty(exports, "concatMapTo", {
-      enumerable: true,
-      get: function() {
-        return concatMapTo_1.concatMapTo;
-      }
-    });
-    var concatWith_1 = require_concatWith();
-    Object.defineProperty(exports, "concatWith", {
-      enumerable: true,
-      get: function() {
-        return concatWith_1.concatWith;
-      }
-    });
-    var connect_1 = require_connect();
-    Object.defineProperty(exports, "connect", {
-      enumerable: true,
-      get: function() {
-        return connect_1.connect;
-      }
-    });
-    var count_1 = require_count();
-    Object.defineProperty(exports, "count", {
-      enumerable: true,
-      get: function() {
-        return count_1.count;
-      }
-    });
-    var debounce_1 = require_debounce();
-    Object.defineProperty(exports, "debounce", {
-      enumerable: true,
-      get: function() {
-        return debounce_1.debounce;
-      }
-    });
-    var debounceTime_1 = require_debounceTime();
-    Object.defineProperty(exports, "debounceTime", {
-      enumerable: true,
-      get: function() {
-        return debounceTime_1.debounceTime;
-      }
-    });
-    var defaultIfEmpty_1 = require_defaultIfEmpty();
-    Object.defineProperty(exports, "defaultIfEmpty", {
-      enumerable: true,
-      get: function() {
-        return defaultIfEmpty_1.defaultIfEmpty;
-      }
-    });
-    var delay_1 = require_delay();
-    Object.defineProperty(exports, "delay", {
-      enumerable: true,
-      get: function() {
-        return delay_1.delay;
-      }
-    });
-    var delayWhen_1 = require_delayWhen();
-    Object.defineProperty(exports, "delayWhen", {
-      enumerable: true,
-      get: function() {
-        return delayWhen_1.delayWhen;
-      }
-    });
-    var dematerialize_1 = require_dematerialize();
-    Object.defineProperty(exports, "dematerialize", {
-      enumerable: true,
-      get: function() {
-        return dematerialize_1.dematerialize;
-      }
-    });
-    var distinct_1 = require_distinct();
-    Object.defineProperty(exports, "distinct", {
-      enumerable: true,
-      get: function() {
-        return distinct_1.distinct;
-      }
-    });
-    var distinctUntilChanged_1 = require_distinctUntilChanged();
-    Object.defineProperty(exports, "distinctUntilChanged", {
-      enumerable: true,
-      get: function() {
-        return distinctUntilChanged_1.distinctUntilChanged;
-      }
-    });
-    var distinctUntilKeyChanged_1 = require_distinctUntilKeyChanged();
-    Object.defineProperty(exports, "distinctUntilKeyChanged", {
-      enumerable: true,
-      get: function() {
-        return distinctUntilKeyChanged_1.distinctUntilKeyChanged;
-      }
-    });
-    var elementAt_1 = require_elementAt();
-    Object.defineProperty(exports, "elementAt", {
-      enumerable: true,
-      get: function() {
-        return elementAt_1.elementAt;
-      }
-    });
-    var endWith_1 = require_endWith();
-    Object.defineProperty(exports, "endWith", {
-      enumerable: true,
-      get: function() {
-        return endWith_1.endWith;
-      }
-    });
-    var every_1 = require_every();
-    Object.defineProperty(exports, "every", {
-      enumerable: true,
-      get: function() {
-        return every_1.every;
-      }
-    });
-    var exhaust_1 = require_exhaust();
-    Object.defineProperty(exports, "exhaust", {
-      enumerable: true,
-      get: function() {
-        return exhaust_1.exhaust;
-      }
-    });
-    var exhaustAll_1 = require_exhaustAll();
-    Object.defineProperty(exports, "exhaustAll", {
-      enumerable: true,
-      get: function() {
-        return exhaustAll_1.exhaustAll;
-      }
-    });
-    var exhaustMap_1 = require_exhaustMap();
-    Object.defineProperty(exports, "exhaustMap", {
-      enumerable: true,
-      get: function() {
-        return exhaustMap_1.exhaustMap;
-      }
-    });
-    var expand_1 = require_expand();
-    Object.defineProperty(exports, "expand", {
-      enumerable: true,
-      get: function() {
-        return expand_1.expand;
-      }
-    });
-    var filter_1 = require_filter();
-    Object.defineProperty(exports, "filter", {
-      enumerable: true,
-      get: function() {
-        return filter_1.filter;
-      }
-    });
-    var finalize_1 = require_finalize();
-    Object.defineProperty(exports, "finalize", {
-      enumerable: true,
-      get: function() {
-        return finalize_1.finalize;
-      }
-    });
-    var find_1 = require_find();
-    Object.defineProperty(exports, "find", {
-      enumerable: true,
-      get: function() {
-        return find_1.find;
-      }
-    });
-    var findIndex_1 = require_findIndex();
-    Object.defineProperty(exports, "findIndex", {
-      enumerable: true,
-      get: function() {
-        return findIndex_1.findIndex;
-      }
-    });
-    var first_1 = require_first();
-    Object.defineProperty(exports, "first", {
-      enumerable: true,
-      get: function() {
-        return first_1.first;
-      }
-    });
-    var groupBy_1 = require_groupBy();
-    Object.defineProperty(exports, "groupBy", {
-      enumerable: true,
-      get: function() {
-        return groupBy_1.groupBy;
-      }
-    });
-    var ignoreElements_1 = require_ignoreElements();
-    Object.defineProperty(exports, "ignoreElements", {
-      enumerable: true,
-      get: function() {
-        return ignoreElements_1.ignoreElements;
-      }
-    });
-    var isEmpty_1 = require_isEmpty();
-    Object.defineProperty(exports, "isEmpty", {
-      enumerable: true,
-      get: function() {
-        return isEmpty_1.isEmpty;
-      }
-    });
-    var last_1 = require_last();
-    Object.defineProperty(exports, "last", {
-      enumerable: true,
-      get: function() {
-        return last_1.last;
-      }
-    });
-    var map_1 = require_map();
-    Object.defineProperty(exports, "map", {
-      enumerable: true,
-      get: function() {
-        return map_1.map;
-      }
-    });
-    var mapTo_1 = require_mapTo();
-    Object.defineProperty(exports, "mapTo", {
-      enumerable: true,
-      get: function() {
-        return mapTo_1.mapTo;
-      }
-    });
-    var materialize_1 = require_materialize();
-    Object.defineProperty(exports, "materialize", {
-      enumerable: true,
-      get: function() {
-        return materialize_1.materialize;
-      }
-    });
-    var max_1 = require_max();
-    Object.defineProperty(exports, "max", {
-      enumerable: true,
-      get: function() {
-        return max_1.max;
-      }
-    });
-    var mergeAll_1 = require_mergeAll();
-    Object.defineProperty(exports, "mergeAll", {
-      enumerable: true,
-      get: function() {
-        return mergeAll_1.mergeAll;
-      }
-    });
-    var flatMap_1 = require_flatMap();
-    Object.defineProperty(exports, "flatMap", {
-      enumerable: true,
-      get: function() {
-        return flatMap_1.flatMap;
-      }
-    });
-    var mergeMap_1 = require_mergeMap();
-    Object.defineProperty(exports, "mergeMap", {
-      enumerable: true,
-      get: function() {
-        return mergeMap_1.mergeMap;
-      }
-    });
-    var mergeMapTo_1 = require_mergeMapTo();
-    Object.defineProperty(exports, "mergeMapTo", {
-      enumerable: true,
-      get: function() {
-        return mergeMapTo_1.mergeMapTo;
-      }
-    });
-    var mergeScan_1 = require_mergeScan();
-    Object.defineProperty(exports, "mergeScan", {
-      enumerable: true,
-      get: function() {
-        return mergeScan_1.mergeScan;
-      }
-    });
-    var mergeWith_1 = require_mergeWith();
-    Object.defineProperty(exports, "mergeWith", {
-      enumerable: true,
-      get: function() {
-        return mergeWith_1.mergeWith;
-      }
-    });
-    var min_1 = require_min();
-    Object.defineProperty(exports, "min", {
-      enumerable: true,
-      get: function() {
-        return min_1.min;
-      }
-    });
-    var multicast_1 = require_multicast();
-    Object.defineProperty(exports, "multicast", {
-      enumerable: true,
-      get: function() {
-        return multicast_1.multicast;
-      }
-    });
-    var observeOn_1 = require_observeOn();
-    Object.defineProperty(exports, "observeOn", {
-      enumerable: true,
-      get: function() {
-        return observeOn_1.observeOn;
-      }
-    });
-    var onErrorResumeNextWith_1 = require_onErrorResumeNextWith();
-    Object.defineProperty(exports, "onErrorResumeNextWith", {
-      enumerable: true,
-      get: function() {
-        return onErrorResumeNextWith_1.onErrorResumeNextWith;
-      }
-    });
-    var pairwise_1 = require_pairwise();
-    Object.defineProperty(exports, "pairwise", {
-      enumerable: true,
-      get: function() {
-        return pairwise_1.pairwise;
-      }
-    });
-    var pluck_1 = require_pluck();
-    Object.defineProperty(exports, "pluck", {
-      enumerable: true,
-      get: function() {
-        return pluck_1.pluck;
-      }
-    });
-    var publish_1 = require_publish();
-    Object.defineProperty(exports, "publish", {
-      enumerable: true,
-      get: function() {
-        return publish_1.publish;
-      }
-    });
-    var publishBehavior_1 = require_publishBehavior();
-    Object.defineProperty(exports, "publishBehavior", {
-      enumerable: true,
-      get: function() {
-        return publishBehavior_1.publishBehavior;
-      }
-    });
-    var publishLast_1 = require_publishLast();
-    Object.defineProperty(exports, "publishLast", {
-      enumerable: true,
-      get: function() {
-        return publishLast_1.publishLast;
-      }
-    });
-    var publishReplay_1 = require_publishReplay();
-    Object.defineProperty(exports, "publishReplay", {
-      enumerable: true,
-      get: function() {
-        return publishReplay_1.publishReplay;
-      }
-    });
-    var raceWith_1 = require_raceWith();
-    Object.defineProperty(exports, "raceWith", {
-      enumerable: true,
-      get: function() {
-        return raceWith_1.raceWith;
-      }
-    });
-    var reduce_1 = require_reduce();
-    Object.defineProperty(exports, "reduce", {
-      enumerable: true,
-      get: function() {
-        return reduce_1.reduce;
-      }
-    });
-    var repeat_1 = require_repeat();
-    Object.defineProperty(exports, "repeat", {
-      enumerable: true,
-      get: function() {
-        return repeat_1.repeat;
-      }
-    });
-    var repeatWhen_1 = require_repeatWhen();
-    Object.defineProperty(exports, "repeatWhen", {
-      enumerable: true,
-      get: function() {
-        return repeatWhen_1.repeatWhen;
-      }
-    });
-    var retry_1 = require_retry();
-    Object.defineProperty(exports, "retry", {
-      enumerable: true,
-      get: function() {
-        return retry_1.retry;
-      }
-    });
-    var retryWhen_1 = require_retryWhen();
-    Object.defineProperty(exports, "retryWhen", {
-      enumerable: true,
-      get: function() {
-        return retryWhen_1.retryWhen;
-      }
-    });
-    var refCount_1 = require_refCount();
-    Object.defineProperty(exports, "refCount", {
-      enumerable: true,
-      get: function() {
-        return refCount_1.refCount;
-      }
-    });
-    var sample_1 = require_sample();
-    Object.defineProperty(exports, "sample", {
-      enumerable: true,
-      get: function() {
-        return sample_1.sample;
-      }
-    });
-    var sampleTime_1 = require_sampleTime();
-    Object.defineProperty(exports, "sampleTime", {
-      enumerable: true,
-      get: function() {
-        return sampleTime_1.sampleTime;
-      }
-    });
-    var scan_1 = require_scan();
-    Object.defineProperty(exports, "scan", {
-      enumerable: true,
-      get: function() {
-        return scan_1.scan;
-      }
-    });
-    var sequenceEqual_1 = require_sequenceEqual();
-    Object.defineProperty(exports, "sequenceEqual", {
-      enumerable: true,
-      get: function() {
-        return sequenceEqual_1.sequenceEqual;
-      }
-    });
-    var share_1 = require_share();
-    Object.defineProperty(exports, "share", {
-      enumerable: true,
-      get: function() {
-        return share_1.share;
-      }
-    });
-    var shareReplay_1 = require_shareReplay();
-    Object.defineProperty(exports, "shareReplay", {
-      enumerable: true,
-      get: function() {
-        return shareReplay_1.shareReplay;
-      }
-    });
-    var single_1 = require_single();
-    Object.defineProperty(exports, "single", {
-      enumerable: true,
-      get: function() {
-        return single_1.single;
-      }
-    });
-    var skip_1 = require_skip();
-    Object.defineProperty(exports, "skip", {
-      enumerable: true,
-      get: function() {
-        return skip_1.skip;
-      }
-    });
-    var skipLast_1 = require_skipLast();
-    Object.defineProperty(exports, "skipLast", {
-      enumerable: true,
-      get: function() {
-        return skipLast_1.skipLast;
-      }
-    });
-    var skipUntil_1 = require_skipUntil();
-    Object.defineProperty(exports, "skipUntil", {
-      enumerable: true,
-      get: function() {
-        return skipUntil_1.skipUntil;
-      }
-    });
-    var skipWhile_1 = require_skipWhile();
-    Object.defineProperty(exports, "skipWhile", {
-      enumerable: true,
-      get: function() {
-        return skipWhile_1.skipWhile;
-      }
-    });
-    var startWith_1 = require_startWith();
-    Object.defineProperty(exports, "startWith", {
-      enumerable: true,
-      get: function() {
-        return startWith_1.startWith;
-      }
-    });
-    var subscribeOn_1 = require_subscribeOn();
-    Object.defineProperty(exports, "subscribeOn", {
-      enumerable: true,
-      get: function() {
-        return subscribeOn_1.subscribeOn;
-      }
-    });
-    var switchAll_1 = require_switchAll();
-    Object.defineProperty(exports, "switchAll", {
-      enumerable: true,
-      get: function() {
-        return switchAll_1.switchAll;
-      }
-    });
-    var switchMap_1 = require_switchMap();
-    Object.defineProperty(exports, "switchMap", {
-      enumerable: true,
-      get: function() {
-        return switchMap_1.switchMap;
-      }
-    });
-    var switchMapTo_1 = require_switchMapTo();
-    Object.defineProperty(exports, "switchMapTo", {
-      enumerable: true,
-      get: function() {
-        return switchMapTo_1.switchMapTo;
-      }
-    });
-    var switchScan_1 = require_switchScan();
-    Object.defineProperty(exports, "switchScan", {
-      enumerable: true,
-      get: function() {
-        return switchScan_1.switchScan;
-      }
-    });
-    var take_1 = require_take();
-    Object.defineProperty(exports, "take", {
-      enumerable: true,
-      get: function() {
-        return take_1.take;
-      }
-    });
-    var takeLast_1 = require_takeLast();
-    Object.defineProperty(exports, "takeLast", {
-      enumerable: true,
-      get: function() {
-        return takeLast_1.takeLast;
-      }
-    });
-    var takeUntil_1 = require_takeUntil();
-    Object.defineProperty(exports, "takeUntil", {
-      enumerable: true,
-      get: function() {
-        return takeUntil_1.takeUntil;
-      }
-    });
-    var takeWhile_1 = require_takeWhile();
-    Object.defineProperty(exports, "takeWhile", {
-      enumerable: true,
-      get: function() {
-        return takeWhile_1.takeWhile;
-      }
-    });
-    var tap_1 = require_tap();
-    Object.defineProperty(exports, "tap", {
-      enumerable: true,
-      get: function() {
-        return tap_1.tap;
-      }
-    });
-    var throttle_1 = require_throttle();
-    Object.defineProperty(exports, "throttle", {
-      enumerable: true,
-      get: function() {
-        return throttle_1.throttle;
-      }
-    });
-    var throttleTime_1 = require_throttleTime();
-    Object.defineProperty(exports, "throttleTime", {
-      enumerable: true,
-      get: function() {
-        return throttleTime_1.throttleTime;
-      }
-    });
-    var throwIfEmpty_1 = require_throwIfEmpty();
-    Object.defineProperty(exports, "throwIfEmpty", {
-      enumerable: true,
-      get: function() {
-        return throwIfEmpty_1.throwIfEmpty;
-      }
-    });
-    var timeInterval_1 = require_timeInterval();
-    Object.defineProperty(exports, "timeInterval", {
-      enumerable: true,
-      get: function() {
-        return timeInterval_1.timeInterval;
-      }
-    });
-    var timeout_2 = require_timeout();
-    Object.defineProperty(exports, "timeout", {
-      enumerable: true,
-      get: function() {
-        return timeout_2.timeout;
-      }
-    });
-    var timeoutWith_1 = require_timeoutWith();
-    Object.defineProperty(exports, "timeoutWith", {
-      enumerable: true,
-      get: function() {
-        return timeoutWith_1.timeoutWith;
-      }
-    });
-    var timestamp_1 = require_timestamp();
-    Object.defineProperty(exports, "timestamp", {
-      enumerable: true,
-      get: function() {
-        return timestamp_1.timestamp;
-      }
-    });
-    var toArray_1 = require_toArray();
-    Object.defineProperty(exports, "toArray", {
-      enumerable: true,
-      get: function() {
-        return toArray_1.toArray;
-      }
-    });
-    var window_1 = require_window();
-    Object.defineProperty(exports, "window", {
-      enumerable: true,
-      get: function() {
-        return window_1.window;
-      }
-    });
-    var windowCount_1 = require_windowCount();
-    Object.defineProperty(exports, "windowCount", {
-      enumerable: true,
-      get: function() {
-        return windowCount_1.windowCount;
-      }
-    });
-    var windowTime_1 = require_windowTime();
-    Object.defineProperty(exports, "windowTime", {
-      enumerable: true,
-      get: function() {
-        return windowTime_1.windowTime;
-      }
-    });
-    var windowToggle_1 = require_windowToggle();
-    Object.defineProperty(exports, "windowToggle", {
-      enumerable: true,
-      get: function() {
-        return windowToggle_1.windowToggle;
-      }
-    });
-    var windowWhen_1 = require_windowWhen();
-    Object.defineProperty(exports, "windowWhen", {
-      enumerable: true,
-      get: function() {
-        return windowWhen_1.windowWhen;
-      }
-    });
-    var withLatestFrom_1 = require_withLatestFrom();
-    Object.defineProperty(exports, "withLatestFrom", {
-      enumerable: true,
-      get: function() {
-        return withLatestFrom_1.withLatestFrom;
-      }
-    });
-    var zipAll_1 = require_zipAll();
-    Object.defineProperty(exports, "zipAll", {
-      enumerable: true,
-      get: function() {
-        return zipAll_1.zipAll;
-      }
-    });
-    var zipWith_1 = require_zipWith();
-    Object.defineProperty(exports, "zipWith", {
-      enumerable: true,
-      get: function() {
-        return zipWith_1.zipWith;
-      }
-    });
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/partition.js
-var require_partition2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/partition.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.partition = void 0;
-    var not_1 = require_not();
-    var filter_1 = require_filter();
-    function partition(predicate, thisArg) {
-      return function(source) {
-        return [filter_1.filter(predicate, thisArg)(source), filter_1.filter(not_1.not(predicate, thisArg))(source)];
-      };
-    }
-    exports.partition = partition;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/internal/operators/race.js
-var require_race2 = __commonJS({
-  "node_modules/rxjs/dist/cjs/internal/operators/race.js"(exports) {
-    "use strict";
-    var __read = exports && exports.__read || function(o, n) {
-      var m = typeof Symbol === "function" && o[Symbol.iterator];
-      if (!m) return o;
-      var i = m.call(o), r, ar = [], e;
-      try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-      } catch (error) {
-        e = {
-          error
-        };
-      } finally {
-        try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-        } finally {
-          if (e) throw e.error;
-        }
-      }
-      return ar;
-    };
-    var __spreadArray = exports && exports.__spreadArray || function(to, from) {
-      for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];
-      return to;
-    };
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.race = void 0;
-    var argsOrArgArray_1 = require_argsOrArgArray();
-    var raceWith_1 = require_raceWith();
-    function race() {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      return raceWith_1.raceWith.apply(void 0, __spreadArray([], __read(argsOrArgArray_1.argsOrArgArray(args))));
-    }
-    exports.race = race;
-  }
-});
-
-// node_modules/rxjs/dist/cjs/operators/index.js
-var require_operators = __commonJS({
-  "node_modules/rxjs/dist/cjs/operators/index.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.mergeAll = exports.merge = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = exports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.concat = exports.combineLatestWith = exports.combineLatest = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = void 0;
-    exports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = exports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.race = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.partition = exports.pairwise = exports.onErrorResumeNext = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = void 0;
-    exports.zipWith = exports.zipAll = exports.zip = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = void 0;
-    var audit_1 = require_audit();
-    Object.defineProperty(exports, "audit", {
-      enumerable: true,
-      get: function() {
-        return audit_1.audit;
-      }
-    });
-    var auditTime_1 = require_auditTime();
-    Object.defineProperty(exports, "auditTime", {
-      enumerable: true,
-      get: function() {
-        return auditTime_1.auditTime;
-      }
-    });
-    var buffer_1 = require_buffer();
-    Object.defineProperty(exports, "buffer", {
-      enumerable: true,
-      get: function() {
-        return buffer_1.buffer;
-      }
-    });
-    var bufferCount_1 = require_bufferCount();
-    Object.defineProperty(exports, "bufferCount", {
-      enumerable: true,
-      get: function() {
-        return bufferCount_1.bufferCount;
-      }
-    });
-    var bufferTime_1 = require_bufferTime();
-    Object.defineProperty(exports, "bufferTime", {
-      enumerable: true,
-      get: function() {
-        return bufferTime_1.bufferTime;
-      }
-    });
-    var bufferToggle_1 = require_bufferToggle();
-    Object.defineProperty(exports, "bufferToggle", {
-      enumerable: true,
-      get: function() {
-        return bufferToggle_1.bufferToggle;
-      }
-    });
-    var bufferWhen_1 = require_bufferWhen();
-    Object.defineProperty(exports, "bufferWhen", {
-      enumerable: true,
-      get: function() {
-        return bufferWhen_1.bufferWhen;
-      }
-    });
-    var catchError_1 = require_catchError();
-    Object.defineProperty(exports, "catchError", {
-      enumerable: true,
-      get: function() {
-        return catchError_1.catchError;
-      }
-    });
-    var combineAll_1 = require_combineAll();
-    Object.defineProperty(exports, "combineAll", {
-      enumerable: true,
-      get: function() {
-        return combineAll_1.combineAll;
-      }
-    });
-    var combineLatestAll_1 = require_combineLatestAll();
-    Object.defineProperty(exports, "combineLatestAll", {
-      enumerable: true,
-      get: function() {
-        return combineLatestAll_1.combineLatestAll;
-      }
-    });
-    var combineLatest_1 = require_combineLatest2();
-    Object.defineProperty(exports, "combineLatest", {
-      enumerable: true,
-      get: function() {
-        return combineLatest_1.combineLatest;
-      }
-    });
-    var combineLatestWith_1 = require_combineLatestWith();
-    Object.defineProperty(exports, "combineLatestWith", {
-      enumerable: true,
-      get: function() {
-        return combineLatestWith_1.combineLatestWith;
-      }
-    });
-    var concat_1 = require_concat2();
-    Object.defineProperty(exports, "concat", {
-      enumerable: true,
-      get: function() {
-        return concat_1.concat;
-      }
-    });
-    var concatAll_1 = require_concatAll();
-    Object.defineProperty(exports, "concatAll", {
-      enumerable: true,
-      get: function() {
-        return concatAll_1.concatAll;
-      }
-    });
-    var concatMap_1 = require_concatMap();
-    Object.defineProperty(exports, "concatMap", {
-      enumerable: true,
-      get: function() {
-        return concatMap_1.concatMap;
-      }
-    });
-    var concatMapTo_1 = require_concatMapTo();
-    Object.defineProperty(exports, "concatMapTo", {
-      enumerable: true,
-      get: function() {
-        return concatMapTo_1.concatMapTo;
-      }
-    });
-    var concatWith_1 = require_concatWith();
-    Object.defineProperty(exports, "concatWith", {
-      enumerable: true,
-      get: function() {
-        return concatWith_1.concatWith;
-      }
-    });
-    var connect_1 = require_connect();
-    Object.defineProperty(exports, "connect", {
-      enumerable: true,
-      get: function() {
-        return connect_1.connect;
-      }
-    });
-    var count_1 = require_count();
-    Object.defineProperty(exports, "count", {
-      enumerable: true,
-      get: function() {
-        return count_1.count;
-      }
-    });
-    var debounce_1 = require_debounce();
-    Object.defineProperty(exports, "debounce", {
-      enumerable: true,
-      get: function() {
-        return debounce_1.debounce;
-      }
-    });
-    var debounceTime_1 = require_debounceTime();
-    Object.defineProperty(exports, "debounceTime", {
-      enumerable: true,
-      get: function() {
-        return debounceTime_1.debounceTime;
-      }
-    });
-    var defaultIfEmpty_1 = require_defaultIfEmpty();
-    Object.defineProperty(exports, "defaultIfEmpty", {
-      enumerable: true,
-      get: function() {
-        return defaultIfEmpty_1.defaultIfEmpty;
-      }
-    });
-    var delay_1 = require_delay();
-    Object.defineProperty(exports, "delay", {
-      enumerable: true,
-      get: function() {
-        return delay_1.delay;
-      }
-    });
-    var delayWhen_1 = require_delayWhen();
-    Object.defineProperty(exports, "delayWhen", {
-      enumerable: true,
-      get: function() {
-        return delayWhen_1.delayWhen;
-      }
-    });
-    var dematerialize_1 = require_dematerialize();
-    Object.defineProperty(exports, "dematerialize", {
-      enumerable: true,
-      get: function() {
-        return dematerialize_1.dematerialize;
-      }
-    });
-    var distinct_1 = require_distinct();
-    Object.defineProperty(exports, "distinct", {
-      enumerable: true,
-      get: function() {
-        return distinct_1.distinct;
-      }
-    });
-    var distinctUntilChanged_1 = require_distinctUntilChanged();
-    Object.defineProperty(exports, "distinctUntilChanged", {
-      enumerable: true,
-      get: function() {
-        return distinctUntilChanged_1.distinctUntilChanged;
-      }
-    });
-    var distinctUntilKeyChanged_1 = require_distinctUntilKeyChanged();
-    Object.defineProperty(exports, "distinctUntilKeyChanged", {
-      enumerable: true,
-      get: function() {
-        return distinctUntilKeyChanged_1.distinctUntilKeyChanged;
-      }
-    });
-    var elementAt_1 = require_elementAt();
-    Object.defineProperty(exports, "elementAt", {
-      enumerable: true,
-      get: function() {
-        return elementAt_1.elementAt;
-      }
-    });
-    var endWith_1 = require_endWith();
-    Object.defineProperty(exports, "endWith", {
-      enumerable: true,
-      get: function() {
-        return endWith_1.endWith;
-      }
-    });
-    var every_1 = require_every();
-    Object.defineProperty(exports, "every", {
-      enumerable: true,
-      get: function() {
-        return every_1.every;
-      }
-    });
-    var exhaust_1 = require_exhaust();
-    Object.defineProperty(exports, "exhaust", {
-      enumerable: true,
-      get: function() {
-        return exhaust_1.exhaust;
-      }
-    });
-    var exhaustAll_1 = require_exhaustAll();
-    Object.defineProperty(exports, "exhaustAll", {
-      enumerable: true,
-      get: function() {
-        return exhaustAll_1.exhaustAll;
-      }
-    });
-    var exhaustMap_1 = require_exhaustMap();
-    Object.defineProperty(exports, "exhaustMap", {
-      enumerable: true,
-      get: function() {
-        return exhaustMap_1.exhaustMap;
-      }
-    });
-    var expand_1 = require_expand();
-    Object.defineProperty(exports, "expand", {
-      enumerable: true,
-      get: function() {
-        return expand_1.expand;
-      }
-    });
-    var filter_1 = require_filter();
-    Object.defineProperty(exports, "filter", {
-      enumerable: true,
-      get: function() {
-        return filter_1.filter;
-      }
-    });
-    var finalize_1 = require_finalize();
-    Object.defineProperty(exports, "finalize", {
-      enumerable: true,
-      get: function() {
-        return finalize_1.finalize;
-      }
-    });
-    var find_1 = require_find();
-    Object.defineProperty(exports, "find", {
-      enumerable: true,
-      get: function() {
-        return find_1.find;
-      }
-    });
-    var findIndex_1 = require_findIndex();
-    Object.defineProperty(exports, "findIndex", {
-      enumerable: true,
-      get: function() {
-        return findIndex_1.findIndex;
-      }
-    });
-    var first_1 = require_first();
-    Object.defineProperty(exports, "first", {
-      enumerable: true,
-      get: function() {
-        return first_1.first;
-      }
-    });
-    var groupBy_1 = require_groupBy();
-    Object.defineProperty(exports, "groupBy", {
-      enumerable: true,
-      get: function() {
-        return groupBy_1.groupBy;
-      }
-    });
-    var ignoreElements_1 = require_ignoreElements();
-    Object.defineProperty(exports, "ignoreElements", {
-      enumerable: true,
-      get: function() {
-        return ignoreElements_1.ignoreElements;
-      }
-    });
-    var isEmpty_1 = require_isEmpty();
-    Object.defineProperty(exports, "isEmpty", {
-      enumerable: true,
-      get: function() {
-        return isEmpty_1.isEmpty;
-      }
-    });
-    var last_1 = require_last();
-    Object.defineProperty(exports, "last", {
-      enumerable: true,
-      get: function() {
-        return last_1.last;
-      }
-    });
-    var map_1 = require_map();
-    Object.defineProperty(exports, "map", {
-      enumerable: true,
-      get: function() {
-        return map_1.map;
-      }
-    });
-    var mapTo_1 = require_mapTo();
-    Object.defineProperty(exports, "mapTo", {
-      enumerable: true,
-      get: function() {
-        return mapTo_1.mapTo;
-      }
-    });
-    var materialize_1 = require_materialize();
-    Object.defineProperty(exports, "materialize", {
-      enumerable: true,
-      get: function() {
-        return materialize_1.materialize;
-      }
-    });
-    var max_1 = require_max();
-    Object.defineProperty(exports, "max", {
-      enumerable: true,
-      get: function() {
-        return max_1.max;
-      }
-    });
-    var merge_1 = require_merge2();
-    Object.defineProperty(exports, "merge", {
-      enumerable: true,
-      get: function() {
-        return merge_1.merge;
-      }
-    });
-    var mergeAll_1 = require_mergeAll();
-    Object.defineProperty(exports, "mergeAll", {
-      enumerable: true,
-      get: function() {
-        return mergeAll_1.mergeAll;
-      }
-    });
-    var flatMap_1 = require_flatMap();
-    Object.defineProperty(exports, "flatMap", {
-      enumerable: true,
-      get: function() {
-        return flatMap_1.flatMap;
-      }
-    });
-    var mergeMap_1 = require_mergeMap();
-    Object.defineProperty(exports, "mergeMap", {
-      enumerable: true,
-      get: function() {
-        return mergeMap_1.mergeMap;
-      }
-    });
-    var mergeMapTo_1 = require_mergeMapTo();
-    Object.defineProperty(exports, "mergeMapTo", {
-      enumerable: true,
-      get: function() {
-        return mergeMapTo_1.mergeMapTo;
-      }
-    });
-    var mergeScan_1 = require_mergeScan();
-    Object.defineProperty(exports, "mergeScan", {
-      enumerable: true,
-      get: function() {
-        return mergeScan_1.mergeScan;
-      }
-    });
-    var mergeWith_1 = require_mergeWith();
-    Object.defineProperty(exports, "mergeWith", {
-      enumerable: true,
-      get: function() {
-        return mergeWith_1.mergeWith;
-      }
-    });
-    var min_1 = require_min();
-    Object.defineProperty(exports, "min", {
-      enumerable: true,
-      get: function() {
-        return min_1.min;
-      }
-    });
-    var multicast_1 = require_multicast();
-    Object.defineProperty(exports, "multicast", {
-      enumerable: true,
-      get: function() {
-        return multicast_1.multicast;
-      }
-    });
-    var observeOn_1 = require_observeOn();
-    Object.defineProperty(exports, "observeOn", {
-      enumerable: true,
-      get: function() {
-        return observeOn_1.observeOn;
-      }
-    });
-    var onErrorResumeNextWith_1 = require_onErrorResumeNextWith();
-    Object.defineProperty(exports, "onErrorResumeNext", {
-      enumerable: true,
-      get: function() {
-        return onErrorResumeNextWith_1.onErrorResumeNext;
-      }
-    });
-    var pairwise_1 = require_pairwise();
-    Object.defineProperty(exports, "pairwise", {
-      enumerable: true,
-      get: function() {
-        return pairwise_1.pairwise;
-      }
-    });
-    var partition_1 = require_partition2();
-    Object.defineProperty(exports, "partition", {
-      enumerable: true,
-      get: function() {
-        return partition_1.partition;
-      }
-    });
-    var pluck_1 = require_pluck();
-    Object.defineProperty(exports, "pluck", {
-      enumerable: true,
-      get: function() {
-        return pluck_1.pluck;
-      }
-    });
-    var publish_1 = require_publish();
-    Object.defineProperty(exports, "publish", {
-      enumerable: true,
-      get: function() {
-        return publish_1.publish;
-      }
-    });
-    var publishBehavior_1 = require_publishBehavior();
-    Object.defineProperty(exports, "publishBehavior", {
-      enumerable: true,
-      get: function() {
-        return publishBehavior_1.publishBehavior;
-      }
-    });
-    var publishLast_1 = require_publishLast();
-    Object.defineProperty(exports, "publishLast", {
-      enumerable: true,
-      get: function() {
-        return publishLast_1.publishLast;
-      }
-    });
-    var publishReplay_1 = require_publishReplay();
-    Object.defineProperty(exports, "publishReplay", {
-      enumerable: true,
-      get: function() {
-        return publishReplay_1.publishReplay;
-      }
-    });
-    var race_1 = require_race2();
-    Object.defineProperty(exports, "race", {
-      enumerable: true,
-      get: function() {
-        return race_1.race;
-      }
-    });
-    var raceWith_1 = require_raceWith();
-    Object.defineProperty(exports, "raceWith", {
-      enumerable: true,
-      get: function() {
-        return raceWith_1.raceWith;
-      }
-    });
-    var reduce_1 = require_reduce();
-    Object.defineProperty(exports, "reduce", {
-      enumerable: true,
-      get: function() {
-        return reduce_1.reduce;
-      }
-    });
-    var repeat_1 = require_repeat();
-    Object.defineProperty(exports, "repeat", {
-      enumerable: true,
-      get: function() {
-        return repeat_1.repeat;
-      }
-    });
-    var repeatWhen_1 = require_repeatWhen();
-    Object.defineProperty(exports, "repeatWhen", {
-      enumerable: true,
-      get: function() {
-        return repeatWhen_1.repeatWhen;
-      }
-    });
-    var retry_1 = require_retry();
-    Object.defineProperty(exports, "retry", {
-      enumerable: true,
-      get: function() {
-        return retry_1.retry;
-      }
-    });
-    var retryWhen_1 = require_retryWhen();
-    Object.defineProperty(exports, "retryWhen", {
-      enumerable: true,
-      get: function() {
-        return retryWhen_1.retryWhen;
-      }
-    });
-    var refCount_1 = require_refCount();
-    Object.defineProperty(exports, "refCount", {
-      enumerable: true,
-      get: function() {
-        return refCount_1.refCount;
-      }
-    });
-    var sample_1 = require_sample();
-    Object.defineProperty(exports, "sample", {
-      enumerable: true,
-      get: function() {
-        return sample_1.sample;
-      }
-    });
-    var sampleTime_1 = require_sampleTime();
-    Object.defineProperty(exports, "sampleTime", {
-      enumerable: true,
-      get: function() {
-        return sampleTime_1.sampleTime;
-      }
-    });
-    var scan_1 = require_scan();
-    Object.defineProperty(exports, "scan", {
-      enumerable: true,
-      get: function() {
-        return scan_1.scan;
-      }
-    });
-    var sequenceEqual_1 = require_sequenceEqual();
-    Object.defineProperty(exports, "sequenceEqual", {
-      enumerable: true,
-      get: function() {
-        return sequenceEqual_1.sequenceEqual;
-      }
-    });
-    var share_1 = require_share();
-    Object.defineProperty(exports, "share", {
-      enumerable: true,
-      get: function() {
-        return share_1.share;
-      }
-    });
-    var shareReplay_1 = require_shareReplay();
-    Object.defineProperty(exports, "shareReplay", {
-      enumerable: true,
-      get: function() {
-        return shareReplay_1.shareReplay;
-      }
-    });
-    var single_1 = require_single();
-    Object.defineProperty(exports, "single", {
-      enumerable: true,
-      get: function() {
-        return single_1.single;
-      }
-    });
-    var skip_1 = require_skip();
-    Object.defineProperty(exports, "skip", {
-      enumerable: true,
-      get: function() {
-        return skip_1.skip;
-      }
-    });
-    var skipLast_1 = require_skipLast();
-    Object.defineProperty(exports, "skipLast", {
-      enumerable: true,
-      get: function() {
-        return skipLast_1.skipLast;
-      }
-    });
-    var skipUntil_1 = require_skipUntil();
-    Object.defineProperty(exports, "skipUntil", {
-      enumerable: true,
-      get: function() {
-        return skipUntil_1.skipUntil;
-      }
-    });
-    var skipWhile_1 = require_skipWhile();
-    Object.defineProperty(exports, "skipWhile", {
-      enumerable: true,
-      get: function() {
-        return skipWhile_1.skipWhile;
-      }
-    });
-    var startWith_1 = require_startWith();
-    Object.defineProperty(exports, "startWith", {
-      enumerable: true,
-      get: function() {
-        return startWith_1.startWith;
-      }
-    });
-    var subscribeOn_1 = require_subscribeOn();
-    Object.defineProperty(exports, "subscribeOn", {
-      enumerable: true,
-      get: function() {
-        return subscribeOn_1.subscribeOn;
-      }
-    });
-    var switchAll_1 = require_switchAll();
-    Object.defineProperty(exports, "switchAll", {
-      enumerable: true,
-      get: function() {
-        return switchAll_1.switchAll;
-      }
-    });
-    var switchMap_1 = require_switchMap();
-    Object.defineProperty(exports, "switchMap", {
-      enumerable: true,
-      get: function() {
-        return switchMap_1.switchMap;
-      }
-    });
-    var switchMapTo_1 = require_switchMapTo();
-    Object.defineProperty(exports, "switchMapTo", {
-      enumerable: true,
-      get: function() {
-        return switchMapTo_1.switchMapTo;
-      }
-    });
-    var switchScan_1 = require_switchScan();
-    Object.defineProperty(exports, "switchScan", {
-      enumerable: true,
-      get: function() {
-        return switchScan_1.switchScan;
-      }
-    });
-    var take_1 = require_take();
-    Object.defineProperty(exports, "take", {
-      enumerable: true,
-      get: function() {
-        return take_1.take;
-      }
-    });
-    var takeLast_1 = require_takeLast();
-    Object.defineProperty(exports, "takeLast", {
-      enumerable: true,
-      get: function() {
-        return takeLast_1.takeLast;
-      }
-    });
-    var takeUntil_1 = require_takeUntil();
-    Object.defineProperty(exports, "takeUntil", {
-      enumerable: true,
-      get: function() {
-        return takeUntil_1.takeUntil;
-      }
-    });
-    var takeWhile_1 = require_takeWhile();
-    Object.defineProperty(exports, "takeWhile", {
-      enumerable: true,
-      get: function() {
-        return takeWhile_1.takeWhile;
-      }
-    });
-    var tap_1 = require_tap();
-    Object.defineProperty(exports, "tap", {
-      enumerable: true,
-      get: function() {
-        return tap_1.tap;
-      }
-    });
-    var throttle_1 = require_throttle();
-    Object.defineProperty(exports, "throttle", {
-      enumerable: true,
-      get: function() {
-        return throttle_1.throttle;
-      }
-    });
-    var throttleTime_1 = require_throttleTime();
-    Object.defineProperty(exports, "throttleTime", {
-      enumerable: true,
-      get: function() {
-        return throttleTime_1.throttleTime;
-      }
-    });
-    var throwIfEmpty_1 = require_throwIfEmpty();
-    Object.defineProperty(exports, "throwIfEmpty", {
-      enumerable: true,
-      get: function() {
-        return throwIfEmpty_1.throwIfEmpty;
-      }
-    });
-    var timeInterval_1 = require_timeInterval();
-    Object.defineProperty(exports, "timeInterval", {
-      enumerable: true,
-      get: function() {
-        return timeInterval_1.timeInterval;
-      }
-    });
-    var timeout_1 = require_timeout();
-    Object.defineProperty(exports, "timeout", {
-      enumerable: true,
-      get: function() {
-        return timeout_1.timeout;
-      }
-    });
-    var timeoutWith_1 = require_timeoutWith();
-    Object.defineProperty(exports, "timeoutWith", {
-      enumerable: true,
-      get: function() {
-        return timeoutWith_1.timeoutWith;
-      }
-    });
-    var timestamp_1 = require_timestamp();
-    Object.defineProperty(exports, "timestamp", {
-      enumerable: true,
-      get: function() {
-        return timestamp_1.timestamp;
-      }
-    });
-    var toArray_1 = require_toArray();
-    Object.defineProperty(exports, "toArray", {
-      enumerable: true,
-      get: function() {
-        return toArray_1.toArray;
-      }
-    });
-    var window_1 = require_window();
-    Object.defineProperty(exports, "window", {
-      enumerable: true,
-      get: function() {
-        return window_1.window;
-      }
-    });
-    var windowCount_1 = require_windowCount();
-    Object.defineProperty(exports, "windowCount", {
-      enumerable: true,
-      get: function() {
-        return windowCount_1.windowCount;
-      }
-    });
-    var windowTime_1 = require_windowTime();
-    Object.defineProperty(exports, "windowTime", {
-      enumerable: true,
-      get: function() {
-        return windowTime_1.windowTime;
-      }
-    });
-    var windowToggle_1 = require_windowToggle();
-    Object.defineProperty(exports, "windowToggle", {
-      enumerable: true,
-      get: function() {
-        return windowToggle_1.windowToggle;
-      }
-    });
-    var windowWhen_1 = require_windowWhen();
-    Object.defineProperty(exports, "windowWhen", {
-      enumerable: true,
-      get: function() {
-        return windowWhen_1.windowWhen;
-      }
-    });
-    var withLatestFrom_1 = require_withLatestFrom();
-    Object.defineProperty(exports, "withLatestFrom", {
-      enumerable: true,
-      get: function() {
-        return withLatestFrom_1.withLatestFrom;
-      }
-    });
-    var zip_1 = require_zip2();
-    Object.defineProperty(exports, "zip", {
-      enumerable: true,
-      get: function() {
-        return zip_1.zip;
-      }
-    });
-    var zipAll_1 = require_zipAll();
-    Object.defineProperty(exports, "zipAll", {
-      enumerable: true,
-      get: function() {
-        return zipAll_1.zipAll;
-      }
-    });
-    var zipWith_1 = require_zipWith();
-    Object.defineProperty(exports, "zipWith", {
-      enumerable: true,
-      get: function() {
-        return zipWith_1.zipWith;
-      }
-    });
-  }
-});
-
-// node_modules/@angular/core/fesm2022/primitives/signals.mjs
-function defaultEquals(a, b) {
-  return Object.is(a, b);
-}
-var activeConsumer = null;
-var inNotificationPhase = false;
-var epoch = 1;
-var SIGNAL = Symbol("SIGNAL");
-function setActiveConsumer(consumer) {
-  const prev = activeConsumer;
-  activeConsumer = consumer;
-  return prev;
-}
-function getActiveConsumer() {
-  return activeConsumer;
-}
-function isInNotificationPhase() {
-  return inNotificationPhase;
-}
-var REACTIVE_NODE = {
-  version: 0,
-  lastCleanEpoch: 0,
-  dirty: false,
-  producerNode: void 0,
-  producerLastReadVersion: void 0,
-  producerIndexOfThis: void 0,
-  nextProducerIndex: 0,
-  liveConsumerNode: void 0,
-  liveConsumerIndexOfThis: void 0,
-  consumerAllowSignalWrites: false,
-  consumerIsAlwaysLive: false,
-  producerMustRecompute: () => false,
-  producerRecomputeValue: () => {
-  },
-  consumerMarkedDirty: () => {
-  },
-  consumerOnSignalRead: () => {
-  }
-};
-function producerAccessed(node) {
-  if (inNotificationPhase) {
-    throw new Error(typeof ngDevMode !== "undefined" && ngDevMode ? `Assertion error: signal read during notification phase` : "");
-  }
-  if (activeConsumer === null) {
-    return;
-  }
-  activeConsumer.consumerOnSignalRead(node);
-  const idx = activeConsumer.nextProducerIndex++;
-  assertConsumerNode(activeConsumer);
-  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {
-    if (consumerIsLive(activeConsumer)) {
-      const staleProducer = activeConsumer.producerNode[idx];
-      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);
-    }
-  }
-  if (activeConsumer.producerNode[idx] !== node) {
-    activeConsumer.producerNode[idx] = node;
-    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;
-  }
-  activeConsumer.producerLastReadVersion[idx] = node.version;
-}
-function producerIncrementEpoch() {
-  epoch++;
-}
-function producerUpdateValueVersion(node) {
-  if (consumerIsLive(node) && !node.dirty) {
-    return;
-  }
-  if (!node.dirty && node.lastCleanEpoch === epoch) {
-    return;
-  }
-  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {
-    producerMarkClean(node);
-    return;
-  }
-  node.producerRecomputeValue(node);
-  producerMarkClean(node);
-}
-function producerNotifyConsumers(node) {
-  if (node.liveConsumerNode === void 0) {
-    return;
-  }
-  const prev = inNotificationPhase;
-  inNotificationPhase = true;
-  try {
-    for (const consumer of node.liveConsumerNode) {
-      if (!consumer.dirty) {
-        consumerMarkDirty(consumer);
-      }
-    }
-  } finally {
-    inNotificationPhase = prev;
-  }
-}
-function producerUpdatesAllowed() {
-  return activeConsumer?.consumerAllowSignalWrites !== false;
-}
-function consumerMarkDirty(node) {
-  node.dirty = true;
-  producerNotifyConsumers(node);
-  node.consumerMarkedDirty?.(node);
-}
-function producerMarkClean(node) {
-  node.dirty = false;
-  node.lastCleanEpoch = epoch;
-}
-function consumerBeforeComputation(node) {
-  node && (node.nextProducerIndex = 0);
-  return setActiveConsumer(node);
-}
-function consumerAfterComputation(node, prevConsumer) {
-  setActiveConsumer(prevConsumer);
-  if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {
-    return;
-  }
-  if (consumerIsLive(node)) {
-    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  while (node.producerNode.length > node.nextProducerIndex) {
-    node.producerNode.pop();
-    node.producerLastReadVersion.pop();
-    node.producerIndexOfThis.pop();
-  }
-}
-function consumerPollProducersForChange(node) {
-  assertConsumerNode(node);
-  for (let i = 0; i < node.producerNode.length; i++) {
-    const producer = node.producerNode[i];
-    const seenVersion = node.producerLastReadVersion[i];
-    if (seenVersion !== producer.version) {
-      return true;
-    }
-    producerUpdateValueVersion(producer);
-    if (seenVersion !== producer.version) {
-      return true;
-    }
-  }
-  return false;
-}
-function consumerDestroy(node) {
-  assertConsumerNode(node);
-  if (consumerIsLive(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;
-  if (node.liveConsumerNode) {
-    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;
-  }
-}
-function producerAddLiveConsumer(node, consumer, indexOfThis) {
-  assertProducerNode(node);
-  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);
-    }
-  }
-  node.liveConsumerIndexOfThis.push(indexOfThis);
-  return node.liveConsumerNode.push(consumer) - 1;
-}
-function producerRemoveLiveConsumerAtIndex(node, idx) {
-  assertProducerNode(node);
-  if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) {
-    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
-  }
-  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  const lastIdx = node.liveConsumerNode.length - 1;
-  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
-  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
-  node.liveConsumerNode.length--;
-  node.liveConsumerIndexOfThis.length--;
-  if (idx < node.liveConsumerNode.length) {
-    const idxProducer = node.liveConsumerIndexOfThis[idx];
-    const consumer = node.liveConsumerNode[idx];
-    assertConsumerNode(consumer);
-    consumer.producerIndexOfThis[idxProducer] = idx;
-  }
-}
-function consumerIsLive(node) {
-  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
-}
-function assertConsumerNode(node) {
-  node.producerNode ??= [];
-  node.producerIndexOfThis ??= [];
-  node.producerLastReadVersion ??= [];
-}
-function assertProducerNode(node) {
-  node.liveConsumerNode ??= [];
-  node.liveConsumerIndexOfThis ??= [];
-}
-function isConsumerNode(node) {
-  return node.producerNode !== void 0;
-}
-function createComputed(computation) {
-  const node = Object.create(COMPUTED_NODE);
-  node.computation = computation;
-  const computed2 = () => {
-    producerUpdateValueVersion(node);
-    producerAccessed(node);
-    if (node.value === ERRORED) {
-      throw node.error;
-    }
-    return node.value;
-  };
-  computed2[SIGNAL] = node;
-  return computed2;
-}
-var UNSET = Symbol("UNSET");
-var COMPUTING = Symbol("COMPUTING");
-var ERRORED = Symbol("ERRORED");
-var COMPUTED_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    value: UNSET,
-    dirty: true,
-    error: null,
-    equal: defaultEquals,
-    producerMustRecompute(node) {
-      return node.value === UNSET || node.value === COMPUTING;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING;
-      const prevConsumer = consumerBeforeComputation(node);
-      let newValue;
-      try {
-        newValue = node.computation();
-      } catch (err) {
-        newValue = ERRORED;
-        node.error = err;
-      } finally {
-        consumerAfterComputation(node, prevConsumer);
-      }
-      if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-function defaultThrowError() {
-  throw new Error();
-}
-var throwInvalidWriteToSignalErrorFn = defaultThrowError;
-function throwInvalidWriteToSignalError() {
-  throwInvalidWriteToSignalErrorFn();
-}
-function setThrowInvalidWriteToSignalError(fn) {
-  throwInvalidWriteToSignalErrorFn = fn;
-}
-var postSignalSetFn = null;
-function createSignal(initialValue) {
-  const node = Object.create(SIGNAL_NODE);
-  node.value = initialValue;
-  const getter = () => {
-    producerAccessed(node);
-    return node.value;
-  };
-  getter[SIGNAL] = node;
-  return getter;
-}
-function signalSetFn(node, newValue) {
-  if (!producerUpdatesAllowed()) {
-    throwInvalidWriteToSignalError();
-  }
-  if (!node.equal(node.value, newValue)) {
-    node.value = newValue;
-    signalValueChanged(node);
-  }
-}
-function signalUpdateFn(node, updater) {
-  if (!producerUpdatesAllowed()) {
-    throwInvalidWriteToSignalError();
-  }
-  signalSetFn(node, updater(node.value));
-}
-var SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    equal: defaultEquals,
-    value: void 0
-  });
-})();
-function signalValueChanged(node) {
-  node.version++;
-  producerIncrementEpoch();
-  producerNotifyConsumers(node);
-  postSignalSetFn?.();
-}
-function createWatch(fn, schedule, allowSignalWrites) {
-  const node = Object.create(WATCH_NODE);
-  if (allowSignalWrites) {
-    node.consumerAllowSignalWrites = true;
-  }
-  node.fn = fn;
-  node.schedule = schedule;
-  const registerOnCleanup = (cleanupFn) => {
-    node.cleanupFn = cleanupFn;
-  };
-  function isWatchNodeDestroyed(node2) {
-    return node2.fn === null && node2.schedule === null;
-  }
-  function destroyWatchNode(node2) {
-    if (!isWatchNodeDestroyed(node2)) {
-      consumerDestroy(node2);
-      node2.cleanupFn();
-      node2.fn = null;
-      node2.schedule = null;
-      node2.cleanupFn = NOOP_CLEANUP_FN;
-    }
-  }
-  const run = () => {
-    if (node.fn === null) {
-      return;
-    }
-    if (isInNotificationPhase()) {
-      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
-    }
-    node.dirty = false;
-    if (node.hasRun && !consumerPollProducersForChange(node)) {
-      return;
-    }
-    node.hasRun = true;
-    const prevConsumer = consumerBeforeComputation(node);
-    try {
-      node.cleanupFn();
-      node.cleanupFn = NOOP_CLEANUP_FN;
-      node.fn(registerOnCleanup);
-    } finally {
-      consumerAfterComputation(node, prevConsumer);
-    }
-  };
-  node.ref = {
-    notify: () => consumerMarkDirty(node),
-    run,
-    cleanup: () => node.cleanupFn(),
-    destroy: () => destroyWatchNode(node),
-    [SIGNAL]: node
-  };
-  return node.ref;
-}
-var NOOP_CLEANUP_FN = () => {
-};
-var WATCH_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    consumerIsAlwaysLive: true,
-    consumerAllowSignalWrites: false,
-    consumerMarkedDirty: (node) => {
-      if (node.schedule !== null) {
-        node.schedule(node.ref);
-      }
-    },
-    hasRun: false,
-    cleanupFn: NOOP_CLEANUP_FN
-  });
-})();
-
-// node_modules/@angular/core/fesm2022/core.mjs
-var import_rxjs = __toESM(require_cjs(), 1);
-
-// node_modules/@angular/core/fesm2022/primitives/event-dispatch.mjs
-var Attribute = {
-  /**
-   * The jsaction attribute defines a mapping of a DOM event to a
-   * generic event (aka jsaction), to which the actual event handlers
-   * that implement the behavior of the application are bound. The
-   * value is a semicolon separated list of colon separated pairs of
-   * an optional DOM event name and a jsaction name. If the optional
-   * DOM event name is omitted, 'click' is assumed. The jsaction names
-   * are dot separated pairs of a namespace and a simple jsaction
-   * name.
-   *
-   * See grammar in README.md for expected syntax in the attribute value.
-   */
-  JSACTION: "jsaction"
-};
-var EventType = {
-  /**
-   * Mouse middle click, introduced in Chrome 55 and not yet supported on
-   * other browsers.
-   */
-  AUXCLICK: "auxclick",
-  /**
-   * The change event fired by browsers when the `value` attribute of input,
-   * select, and textarea elements are changed.
-   */
-  CHANGE: "change",
-  /**
-   * The click event. In addEvent() refers to all click events, in the
-   * jsaction attribute it refers to the unmodified click and Enter/Space
-   * keypress events.  In the latter case, a jsaction click will be triggered,
-   * for accessibility reasons.  See clickmod and clickonly, below.
-   */
-  CLICK: "click",
-  /**
-   * Specifies the jsaction for a modified click event (i.e. a mouse
-   * click with the modifier key Cmd/Ctrl pressed). This event isn't
-   * separately enabled in addEvent(), because in the DOM, it's just a
-   * click event.
-   */
-  CLICKMOD: "clickmod",
-  /**
-   * Specifies the jsaction for a click-only event.  Click-only doesn't take
-   * into account the case where an element with focus receives an Enter/Space
-   * keypress.  This event isn't separately enabled in addEvent().
-   */
-  CLICKONLY: "clickonly",
-  /**
-   * The dblclick event.
-   */
-  DBLCLICK: "dblclick",
-  /**
-   * Focus doesn't bubble, but you can use it in addEvent() and
-   * jsaction anyway. EventContract does the right thing under the
-   * hood.
-   */
-  FOCUS: "focus",
-  /**
-   * This event only exists in IE. For addEvent() and jsaction, use
-   * focus instead; EventContract does the right thing even though
-   * focus doesn't bubble.
-   */
-  FOCUSIN: "focusin",
-  /**
-   * Analog to focus.
-   */
-  BLUR: "blur",
-  /**
-   * Analog to focusin.
-   */
-  FOCUSOUT: "focusout",
-  /**
-   * Submit doesn't bubble, so it cannot be used with event
-   * contract. However, the browser helpfully fires a click event on
-   * the submit button of a form (even if the form is not submitted by
-   * a click on the submit button). So you should handle click on the
-   * submit button instead.
-   */
-  SUBMIT: "submit",
-  /**
-   * The keydown event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keydown event. It represents click actions in non-Gecko
-   * browsers.
-   */
-  KEYDOWN: "keydown",
-  /**
-   * The keypress event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keypress event. It represents click actions in Gecko browsers.
-   */
-  KEYPRESS: "keypress",
-  /**
-   * The keyup event. In addEvent() and non-click jsaction it represents the
-   * regular DOM keyup event. It represents click actions in non-Gecko
-   * browsers.
-   */
-  KEYUP: "keyup",
-  /**
-   * The mouseup event. Can either be used directly or used implicitly to
-   * capture mouseup events. In addEvent(), it represents a regular DOM
-   * mouseup event.
-   */
-  MOUSEUP: "mouseup",
-  /**
-   * The mousedown event. Can either be used directly or used implicitly to
-   * capture mouseenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  MOUSEDOWN: "mousedown",
-  /**
-   * The mouseover event. Can either be used directly or used implicitly to
-   * capture mouseenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  MOUSEOVER: "mouseover",
-  /**
-   * The mouseout event. Can either be used directly or used implicitly to
-   * capture mouseover events. In addEvent(), it represents a regular DOM
-   * mouseout event.
-   */
-  MOUSEOUT: "mouseout",
-  /**
-   * The mouseenter event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  MOUSEENTER: "mouseenter",
-  /**
-   * The mouseleave event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  MOUSELEAVE: "mouseleave",
-  /**
-   * The mousemove event.
-   */
-  MOUSEMOVE: "mousemove",
-  /**
-   * The pointerup event. Can either be used directly or used implicitly to
-   * capture pointerup events. In addEvent(), it represents a regular DOM
-   * pointerup event.
-   */
-  POINTERUP: "pointerup",
-  /**
-   * The pointerdown event. Can either be used directly or used implicitly to
-   * capture pointerenter events. In addEvent(), it represents a regular DOM
-   * mouseover event.
-   */
-  POINTERDOWN: "pointerdown",
-  /**
-   * The pointerover event. Can either be used directly or used implicitly to
-   * capture pointerenter events. In addEvent(), it represents a regular DOM
-   * pointerover event.
-   */
-  POINTEROVER: "pointerover",
-  /**
-   * The pointerout event. Can either be used directly or used implicitly to
-   * capture pointerover events. In addEvent(), it represents a regular DOM
-   * pointerout event.
-   */
-  POINTEROUT: "pointerout",
-  /**
-   * The pointerenter event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  POINTERENTER: "pointerenter",
-  /**
-   * The pointerleave event. Does not bubble and fires individually on each
-   * element being entered within a DOM tree.
-   */
-  POINTERLEAVE: "pointerleave",
-  /**
-   * The pointermove event.
-   */
-  POINTERMOVE: "pointermove",
-  /**
-   * The pointercancel event.
-   */
-  POINTERCANCEL: "pointercancel",
-  /**
-   * The gotpointercapture event is fired when
-   * Element.setPointerCapture(pointerId) is called on a mouse input, or
-   * implicitly when a touch input begins.
-   */
-  GOTPOINTERCAPTURE: "gotpointercapture",
-  /**
-   * The lostpointercapture event is fired when
-   * Element.releasePointerCapture(pointerId) is called, or implicitly after a
-   * touch input ends.
-   */
-  LOSTPOINTERCAPTURE: "lostpointercapture",
-  /**
-   * The error event. The error event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing under
-   * the hood (except in IE8 which does not use error events).
-   */
-  ERROR: "error",
-  /**
-   * The load event. The load event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing
-   * under the hood.
-   */
-  LOAD: "load",
-  /**
-   * The unload event.
-   */
-  UNLOAD: "unload",
-  /**
-   * The touchstart event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHSTART: "touchstart",
-  /**
-   * The touchend event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHEND: "touchend",
-  /**
-   * The touchmove event. Bubbles, will only ever fire in browsers with
-   * touch support.
-   */
-  TOUCHMOVE: "touchmove",
-  /**
-   * The input event.
-   */
-  INPUT: "input",
-  /**
-   * The scroll event.
-   */
-  SCROLL: "scroll",
-  /**
-   * The toggle event. The toggle event doesn't bubble, but you can use it in
-   * addEvent() and jsaction anyway. EventContract does the right thing
-   * under the hood.
-   */
-  TOGGLE: "toggle",
-  /**
-   * A custom event. The actual custom event type is declared as the 'type'
-   * field in the event details. Supported in Firefox 6+, IE 9+, and all Chrome
-   * versions.
-   *
-   * This is an internal name. Users should use jsaction's fireCustomEvent to
-   * fire custom events instead of relying on this type to create them.
-   */
-  CUSTOM: "_custom"
-};
-var MOUSE_SPECIAL_EVENT_TYPES = [EventType.MOUSEENTER, EventType.MOUSELEAVE, "pointerenter", "pointerleave"];
-var BUBBLE_EVENT_TYPES = [
-  EventType.CLICK,
-  EventType.DBLCLICK,
-  EventType.FOCUSIN,
-  EventType.FOCUSOUT,
-  EventType.KEYDOWN,
-  EventType.KEYUP,
-  EventType.KEYPRESS,
-  EventType.MOUSEOVER,
-  EventType.MOUSEOUT,
-  EventType.SUBMIT,
-  EventType.TOUCHSTART,
-  EventType.TOUCHEND,
-  EventType.TOUCHMOVE,
-  "touchcancel",
-  "auxclick",
-  "change",
-  "compositionstart",
-  "compositionupdate",
-  "compositionend",
-  "beforeinput",
-  "input",
-  "select",
-  "copy",
-  "cut",
-  "paste",
-  "mousedown",
-  "mouseup",
-  "wheel",
-  "contextmenu",
-  "dragover",
-  "dragenter",
-  "dragleave",
-  "drop",
-  "dragstart",
-  "dragend",
-  "pointerdown",
-  "pointermove",
-  "pointerup",
-  "pointercancel",
-  "pointerover",
-  "pointerout",
-  "gotpointercapture",
-  "lostpointercapture",
-  // Video events.
-  "ended",
-  "loadedmetadata",
-  // Page visibility events.
-  "pagehide",
-  "pageshow",
-  "visibilitychange",
-  // Content visibility events.
-  "beforematch"
-];
-var CAPTURE_EVENT_TYPES = [EventType.FOCUS, EventType.BLUR, EventType.ERROR, EventType.LOAD, EventType.TOGGLE];
-var isCaptureEventType = (eventType) => CAPTURE_EVENT_TYPES.indexOf(eventType) >= 0;
-var EARLY_EVENT_TYPES = BUBBLE_EVENT_TYPES.concat(CAPTURE_EVENT_TYPES);
-var isEarlyEventType = (eventType) => EARLY_EVENT_TYPES.indexOf(eventType) >= 0;
-var MAC_ENTER = 3;
-var ENTER = 13;
-var SPACE = 32;
-var KeyCode = {
-  MAC_ENTER,
-  ENTER,
-  SPACE
-};
-var isMac = typeof navigator !== "undefined" && /Macintosh/.test(navigator.userAgent);
-var isWebKit = typeof navigator !== "undefined" && !/Opera/.test(navigator.userAgent) && /WebKit/.test(navigator.userAgent);
-var isIe = typeof navigator !== "undefined" && (/MSIE/.test(navigator.userAgent) || /Trident/.test(navigator.userAgent));
-var isGecko = typeof navigator !== "undefined" && !/Opera|WebKit/.test(navigator.userAgent) && /Gecko/.test(navigator.product);
-var ACTION_KEY_TO_KEYCODE = {
-  "Enter": KeyCode.ENTER,
-  " ": KeyCode.SPACE
-};
-var IDENTIFIER_TO_KEY_TRIGGER_MAPPING = {
-  "A": KeyCode.ENTER,
-  "BUTTON": 0,
-  "CHECKBOX": KeyCode.SPACE,
-  "COMBOBOX": KeyCode.ENTER,
-  "FILE": 0,
-  "GRIDCELL": KeyCode.ENTER,
-  "LINK": KeyCode.ENTER,
-  "LISTBOX": KeyCode.ENTER,
-  "MENU": 0,
-  "MENUBAR": 0,
-  "MENUITEM": 0,
-  "MENUITEMCHECKBOX": 0,
-  "MENUITEMRADIO": 0,
-  "OPTION": 0,
-  "RADIO": KeyCode.SPACE,
-  "RADIOGROUP": KeyCode.SPACE,
-  "RESET": 0,
-  "SUBMIT": 0,
-  "SWITCH": KeyCode.SPACE,
-  "TAB": 0,
-  "TREE": KeyCode.ENTER,
-  "TREEITEM": KeyCode.ENTER
-};
-var isIos = typeof navigator !== "undefined" && /iPhone|iPad|iPod/.test(navigator.userAgent);
-var DEFAULT_EVENT_TYPE = EventType.CLICK;
-var Restriction;
-(function(Restriction2) {
-  Restriction2[Restriction2["I_AM_THE_JSACTION_FRAMEWORK"] = 0] = "I_AM_THE_JSACTION_FRAMEWORK";
-})(Restriction || (Restriction = {}));
-var PROPAGATION_STOPPED_SYMBOL = Symbol.for("propagationStopped");
-
-// node_modules/@angular/core/fesm2022/core.mjs
-var import_operators = __toESM(require_operators(), 1);
-var ERROR_DETAILS_PAGE_BASE_URL = "https://angular.dev/errors";
-var XSS_SECURITY_URL = "https://g.co/ng/security#xss";
-var RuntimeError = class extends Error {
-  code;
-  constructor(code, message) {
-    super(formatRuntimeError(code, message));
-    this.code = code;
-  }
-};
-function formatRuntimeError(code, message) {
-  const fullCode = `NG0${Math.abs(code)}`;
-  let errorMessage = `${fullCode}${message ? ": " + message : ""}`;
-  if (ngDevMode && code < 0) {
-    const addPeriodSeparator = !errorMessage.match(/[.,;!?\n]$/);
-    const separator = addPeriodSeparator ? "." : "";
-    errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;
-  }
-  return errorMessage;
-}
-var REQUIRED_UNSET_VALUE = Symbol("InputSignalNode#UNSET");
-var INPUT_SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, SIGNAL_NODE), {
-    transformFn: void 0,
-    applyValueToInputSignal(node, value) {
-      signalSetFn(node, value);
-    }
-  });
-})();
-var ɵINPUT_SIGNAL_BRAND_READ_TYPE = Symbol();
-var ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = Symbol();
-function createInputSignal(initialValue, options) {
-  const node = Object.create(INPUT_SIGNAL_NODE);
-  node.value = initialValue;
-  node.transformFn = options?.transform;
-  function inputValueFn() {
-    producerAccessed(node);
-    if (node.value === REQUIRED_UNSET_VALUE) {
-      throw new RuntimeError(-950, ngDevMode && "Input is required but no value is available yet.");
-    }
-    return node.value;
-  }
-  inputValueFn[SIGNAL] = node;
-  if (ngDevMode) {
-    inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;
-    node.debugName = options?.debugName;
-  }
-  return inputValueFn;
-}
-function noSideEffects(fn) {
-  return {
-    toString: fn
-  }.toString();
-}
-var ANNOTATIONS = "__annotations__";
-var PARAMETERS = "__parameters__";
-var PROP_METADATA = "__prop__metadata__";
-function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function DecoratorFactory(...args) {
-      if (this instanceof DecoratorFactory) {
-        metaCtor.call(this, ...args);
-        return this;
-      }
-      const annotationInstance = new DecoratorFactory(...args);
-      return function TypeDecorator(cls) {
-        if (typeFn) typeFn(cls, ...args);
-        const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {
-          value: []
-        })[ANNOTATIONS];
-        annotations.push(annotationInstance);
-        if (additionalProcessing) additionalProcessing(cls);
-        return cls;
-      };
-    }
-    if (parentClass) {
-      DecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    DecoratorFactory.prototype.ngMetadataName = name;
-    DecoratorFactory.annotationCls = DecoratorFactory;
-    return DecoratorFactory;
-  });
-}
-function makeMetadataCtor(props) {
-  return function ctor(...args) {
-    if (props) {
-      const values = props(...args);
-      for (const propName in values) {
-        this[propName] = values[propName];
-      }
-    }
-  };
-}
-function makeParamDecorator(name, props, parentClass) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function ParamDecoratorFactory(...args) {
-      if (this instanceof ParamDecoratorFactory) {
-        metaCtor.apply(this, args);
-        return this;
-      }
-      const annotationInstance = new ParamDecoratorFactory(...args);
-      ParamDecorator.annotation = annotationInstance;
-      return ParamDecorator;
-      function ParamDecorator(cls, unusedKey, index) {
-        const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {
-          value: []
-        })[PARAMETERS];
-        while (parameters.length <= index) {
-          parameters.push(null);
-        }
-        (parameters[index] = parameters[index] || []).push(annotationInstance);
-        return cls;
-      }
-    }
-    if (parentClass) {
-      ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    ParamDecoratorFactory.prototype.ngMetadataName = name;
-    ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
-    return ParamDecoratorFactory;
-  });
-}
-function makePropDecorator(name, props, parentClass, additionalProcessing) {
-  return noSideEffects(() => {
-    const metaCtor = makeMetadataCtor(props);
-    function PropDecoratorFactory(...args) {
-      if (this instanceof PropDecoratorFactory) {
-        metaCtor.apply(this, args);
-        return this;
-      }
-      const decoratorInstance = new PropDecoratorFactory(...args);
-      function PropDecorator(target, name2) {
-        if (target === void 0) {
-          throw new Error("Standard Angular field decorators are not supported in JIT mode.");
-        }
-        const constructor = target.constructor;
-        const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {
-          value: {}
-        })[PROP_METADATA];
-        meta[name2] = meta.hasOwnProperty(name2) && meta[name2] || [];
-        meta[name2].unshift(decoratorInstance);
-        if (additionalProcessing) additionalProcessing(target, name2, ...args);
-      }
-      return PropDecorator;
-    }
-    if (parentClass) {
-      PropDecoratorFactory.prototype = Object.create(parentClass.prototype);
-    }
-    PropDecoratorFactory.prototype.ngMetadataName = name;
-    PropDecoratorFactory.annotationCls = PropDecoratorFactory;
-    return PropDecoratorFactory;
-  });
-}
-var _global = globalThis;
-function ngDevModeResetPerfCounters() {
-  const locationString = typeof location !== "undefined" ? location.toString() : "";
-  const newCounters = {
-    namedConstructors: locationString.indexOf("ngDevMode=namedConstructors") != -1,
-    firstCreatePass: 0,
-    tNode: 0,
-    tView: 0,
-    rendererCreateTextNode: 0,
-    rendererSetText: 0,
-    rendererCreateElement: 0,
-    rendererAddEventListener: 0,
-    rendererSetAttribute: 0,
-    rendererRemoveAttribute: 0,
-    rendererSetProperty: 0,
-    rendererSetClassName: 0,
-    rendererAddClass: 0,
-    rendererRemoveClass: 0,
-    rendererSetStyle: 0,
-    rendererRemoveStyle: 0,
-    rendererDestroy: 0,
-    rendererDestroyNode: 0,
-    rendererMoveNode: 0,
-    rendererRemoveNode: 0,
-    rendererAppendChild: 0,
-    rendererInsertBefore: 0,
-    rendererCreateComment: 0,
-    hydratedNodes: 0,
-    hydratedComponents: 0,
-    dehydratedViewsRemoved: 0,
-    dehydratedViewsCleanupRuns: 0,
-    componentsSkippedHydration: 0,
-    deferBlocksWithIncrementalHydration: 0
-  };
-  const allowNgDevModeTrue = locationString.indexOf("ngDevMode=false") === -1;
-  if (!allowNgDevModeTrue) {
-    _global["ngDevMode"] = false;
-  } else {
-    if (typeof _global["ngDevMode"] !== "object") {
-      _global["ngDevMode"] = {};
-    }
-    Object.assign(_global["ngDevMode"], newCounters);
-  }
-  return newCounters;
-}
-function initNgDevMode() {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (typeof ngDevMode !== "object" || Object.keys(ngDevMode).length === 0) {
-      ngDevModeResetPerfCounters();
-    }
-    return typeof ngDevMode !== "undefined" && !!ngDevMode;
-  }
-  return false;
-}
-function getClosureSafeProperty(objWithPropertyToExtract) {
-  for (let key in objWithPropertyToExtract) {
-    if (objWithPropertyToExtract[key] === getClosureSafeProperty) {
-      return key;
-    }
-  }
-  throw Error("Could not find renamed property on target object.");
-}
-function fillProperties(target, source) {
-  for (const key in source) {
-    if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
-      target[key] = source[key];
-    }
-  }
-}
-function stringify(token) {
-  if (typeof token === "string") {
-    return token;
-  }
-  if (Array.isArray(token)) {
-    return "[" + token.map(stringify).join(", ") + "]";
-  }
-  if (token == null) {
-    return "" + token;
-  }
-  if (token.overriddenName) {
-    return `${token.overriddenName}`;
-  }
-  if (token.name) {
-    return `${token.name}`;
-  }
-  const res = token.toString();
-  if (res == null) {
-    return "" + res;
-  }
-  const newLineIndex = res.indexOf("\n");
-  return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
-}
-function concatStringsWithSpace(before, after) {
-  return before == null || before === "" ? after === null ? "" : after : after == null || after === "" ? before : before + " " + after;
-}
-function truncateMiddle(str, maxLength = 100) {
-  if (!str || maxLength < 1 || str.length <= maxLength) return str;
-  if (maxLength == 1) return str.substring(0, 1) + "...";
-  const halfLimit = Math.round(maxLength / 2);
-  return str.substring(0, halfLimit) + "..." + str.substring(str.length - halfLimit);
-}
-var __forward_ref__ = getClosureSafeProperty({
-  __forward_ref__: getClosureSafeProperty
-});
-function forwardRef(forwardRefFn) {
-  forwardRefFn.__forward_ref__ = forwardRef;
-  forwardRefFn.toString = function() {
-    return stringify(this());
-  };
-  return forwardRefFn;
-}
-function resolveForwardRef(type) {
-  return isForwardRef(type) ? type() : type;
-}
-function isForwardRef(fn) {
-  return typeof fn === "function" && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;
-}
-function assertNumber(actual, msg) {
-  if (!(typeof actual === "number")) {
-    throwError(msg, typeof actual, "number", "===");
-  }
-}
-function assertNumberInRange(actual, minInclusive, maxInclusive) {
-  assertNumber(actual, "Expected a number");
-  assertLessThanOrEqual(actual, maxInclusive, "Expected number to be less than or equal to");
-  assertGreaterThanOrEqual(actual, minInclusive, "Expected number to be greater than or equal to");
-}
-function assertString(actual, msg) {
-  if (!(typeof actual === "string")) {
-    throwError(msg, actual === null ? "null" : typeof actual, "string", "===");
-  }
-}
-function assertFunction(actual, msg) {
-  if (!(typeof actual === "function")) {
-    throwError(msg, actual === null ? "null" : typeof actual, "function", "===");
-  }
-}
-function assertEqual(actual, expected, msg) {
-  if (!(actual == expected)) {
-    throwError(msg, actual, expected, "==");
-  }
-}
-function assertNotEqual(actual, expected, msg) {
-  if (!(actual != expected)) {
-    throwError(msg, actual, expected, "!=");
-  }
-}
-function assertSame(actual, expected, msg) {
-  if (!(actual === expected)) {
-    throwError(msg, actual, expected, "===");
-  }
-}
-function assertNotSame(actual, expected, msg) {
-  if (!(actual !== expected)) {
-    throwError(msg, actual, expected, "!==");
-  }
-}
-function assertLessThan(actual, expected, msg) {
-  if (!(actual < expected)) {
-    throwError(msg, actual, expected, "<");
-  }
-}
-function assertLessThanOrEqual(actual, expected, msg) {
-  if (!(actual <= expected)) {
-    throwError(msg, actual, expected, "<=");
-  }
-}
-function assertGreaterThan(actual, expected, msg) {
-  if (!(actual > expected)) {
-    throwError(msg, actual, expected, ">");
-  }
-}
-function assertGreaterThanOrEqual(actual, expected, msg) {
-  if (!(actual >= expected)) {
-    throwError(msg, actual, expected, ">=");
-  }
-}
-function assertDefined(actual, msg) {
-  if (actual == null) {
-    throwError(msg, actual, null, "!=");
-  }
-}
-function throwError(msg, actual, expected, comparison) {
-  throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? "" : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));
-}
-function assertDomNode(node) {
-  if (!(node instanceof Node)) {
-    throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);
-  }
-}
-function assertElement(node) {
-  if (!(node instanceof Element)) {
-    throwError(`The provided value must be an element but got ${stringify(node)}`);
-  }
-}
-function assertIndexInRange(arr, index) {
-  assertDefined(arr, "Array must be defined.");
-  const maxLen = arr.length;
-  if (index < 0 || index >= maxLen) {
-    throwError(`Index expected to be less than ${maxLen} but got ${index}`);
-  }
-}
-function assertOneOf(value, ...validValues) {
-  if (validValues.indexOf(value) !== -1) return true;
-  throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);
-}
-function assertNotReactive(fn) {
-  if (getActiveConsumer() !== null) {
-    throwError(`${fn}() should never be called in a reactive context.`);
-  }
-}
-function ɵɵdefineInjectable(opts) {
-  return {
-    token: opts.token,
-    providedIn: opts.providedIn || null,
-    factory: opts.factory,
-    value: void 0
-  };
-}
-var defineInjectable = ɵɵdefineInjectable;
-function ɵɵdefineInjector(options) {
-  return {
-    providers: options.providers || [],
-    imports: options.imports || []
-  };
-}
-function getInjectableDef(type) {
-  return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);
-}
-function isInjectable(type) {
-  return getInjectableDef(type) !== null;
-}
-function getOwnDefinition(type, field) {
-  return type.hasOwnProperty(field) ? type[field] : null;
-}
-function getInheritedInjectableDef(type) {
-  const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);
-  if (def) {
-    ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token "${type.name}" that inherits its @Injectable decorator but does not provide one itself.
-This will become an error in a future version of Angular. Please add @Injectable() to the "${type.name}" class.`);
-    return def;
-  } else {
-    return null;
-  }
-}
-function getInjectorDef(type) {
-  return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ? type[NG_INJ_DEF] : null;
-}
-var NG_PROV_DEF = getClosureSafeProperty({
-  ɵprov: getClosureSafeProperty
-});
-var NG_INJ_DEF = getClosureSafeProperty({
-  ɵinj: getClosureSafeProperty
-});
-var NG_INJECTABLE_DEF = getClosureSafeProperty({
-  ngInjectableDef: getClosureSafeProperty
-});
-var NG_INJECTOR_DEF = getClosureSafeProperty({
-  ngInjectorDef: getClosureSafeProperty
-});
-var InjectionToken = class {
-  _desc;
-  /** @internal */
-  ngMetadataName = "InjectionToken";
-  ɵprov;
-  /**
-   * @param _desc   Description for the token,
-   *                used only for debugging purposes,
-   *                it should but does not need to be unique
-   * @param options Options for the token's usage, as described above
-   */
-  constructor(_desc, options) {
-    this._desc = _desc;
-    this.ɵprov = void 0;
-    if (typeof options == "number") {
-      (typeof ngDevMode === "undefined" || ngDevMode) && assertLessThan(options, 0, "Only negative numbers are supported here");
-      this.__NG_ELEMENT_ID__ = options;
-    } else if (options !== void 0) {
-      this.ɵprov = ɵɵdefineInjectable({
-        token: this,
-        providedIn: options.providedIn || "root",
-        factory: options.factory
-      });
-    }
-  }
-  /**
-   * @internal
-   */
-  get multi() {
-    return this;
-  }
-  toString() {
-    return `InjectionToken ${this._desc}`;
-  }
-};
-var _injectorProfilerContext;
-function getInjectorProfilerContext() {
-  !ngDevMode && throwError("getInjectorProfilerContext should never be called in production mode");
-  return _injectorProfilerContext;
-}
-function setInjectorProfilerContext(context) {
-  !ngDevMode && throwError("setInjectorProfilerContext should never be called in production mode");
-  const previous = _injectorProfilerContext;
-  _injectorProfilerContext = context;
-  return previous;
-}
-var injectorProfilerCallback = null;
-var setInjectorProfiler = (injectorProfiler2) => {
-  !ngDevMode && throwError("setInjectorProfiler should never be called in production mode");
-  injectorProfilerCallback = injectorProfiler2;
-};
-function injectorProfiler(event) {
-  !ngDevMode && throwError("Injector profiler should never be called in production mode");
-  if (injectorProfilerCallback != null) {
-    injectorProfilerCallback(event);
-  }
-}
-function emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {
-  !ngDevMode && throwError("Injector profiler should never be called in production mode");
-  let token;
-  if (typeof eventProvider === "function") {
-    token = eventProvider;
-  } else if (eventProvider instanceof InjectionToken) {
-    token = eventProvider;
-  } else {
-    token = resolveForwardRef(eventProvider.provide);
-  }
-  let provider = eventProvider;
-  if (eventProvider instanceof InjectionToken) {
-    provider = eventProvider.ɵprov || eventProvider;
-  }
-  injectorProfiler({
-    type: 2,
-    context: getInjectorProfilerContext(),
-    providerRecord: {
-      token,
-      provider,
-      isViewProvider
-    }
-  });
-}
-function emitInstanceCreatedByInjectorEvent(instance) {
-  !ngDevMode && throwError("Injector profiler should never be called in production mode");
-  injectorProfiler({
-    type: 1,
-    context: getInjectorProfilerContext(),
-    instance: {
-      value: instance
-    }
-  });
-}
-function emitInjectEvent(token, value, flags) {
-  !ngDevMode && throwError("Injector profiler should never be called in production mode");
-  injectorProfiler({
-    type: 0,
-    context: getInjectorProfilerContext(),
-    service: {
-      token,
-      value,
-      flags
-    }
-  });
-}
-function runInInjectorProfilerContext(injector, token, callback) {
-  !ngDevMode && throwError("runInInjectorProfilerContext should never be called in production mode");
-  const prevInjectContext = setInjectorProfilerContext({
-    injector,
-    token
-  });
-  try {
-    callback();
-  } finally {
-    setInjectorProfilerContext(prevInjectContext);
-  }
-}
-function isEnvironmentProviders(value) {
-  return value && !!value.ɵproviders;
-}
-var NG_COMP_DEF = getClosureSafeProperty({
-  ɵcmp: getClosureSafeProperty
-});
-var NG_DIR_DEF = getClosureSafeProperty({
-  ɵdir: getClosureSafeProperty
-});
-var NG_PIPE_DEF = getClosureSafeProperty({
-  ɵpipe: getClosureSafeProperty
-});
-var NG_MOD_DEF = getClosureSafeProperty({
-  ɵmod: getClosureSafeProperty
-});
-var NG_FACTORY_DEF = getClosureSafeProperty({
-  ɵfac: getClosureSafeProperty
-});
-var NG_ELEMENT_ID = getClosureSafeProperty({
-  __NG_ELEMENT_ID__: getClosureSafeProperty
-});
-var NG_ENV_ID = getClosureSafeProperty({
-  __NG_ENV_ID__: getClosureSafeProperty
-});
-function renderStringify(value) {
-  if (typeof value === "string") return value;
-  if (value == null) return "";
-  return String(value);
-}
-function stringifyForError(value) {
-  if (typeof value === "function") return value.name || value.toString();
-  if (typeof value === "object" && value != null && typeof value.type === "function") {
-    return value.type.name || value.type.toString();
-  }
-  return renderStringify(value);
-}
-function debugStringifyTypeForError(type) {
-  let componentDef = type[NG_COMP_DEF] || null;
-  if (componentDef !== null && componentDef.debugInfo) {
-    return stringifyTypeFromDebugInfo(componentDef.debugInfo);
-  }
-  return stringifyForError(type);
-}
-function stringifyTypeFromDebugInfo(debugInfo) {
-  if (!debugInfo.filePath || !debugInfo.lineNumber) {
-    return debugInfo.className;
-  } else {
-    return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;
-  }
-}
-function throwCyclicDependencyError(token, path) {
-  const depPath = path ? `. Dependency path: ${path.join(" > ")} > ${token}` : "";
-  throw new RuntimeError(-200, ngDevMode ? `Circular dependency in DI detected for ${token}${depPath}` : token);
-}
-function throwMixedMultiProviderError() {
-  throw new Error(`Cannot mix multi providers and regular providers`);
-}
-function throwInvalidProviderError(ngModuleType, providers, provider) {
-  if (ngModuleType && providers) {
-    const providerDetail = providers.map((v) => v == provider ? "?" + provider + "?" : "...");
-    throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(", ")}]`);
-  } else if (isEnvironmentProviders(provider)) {
-    if (provider.ɵfromNgModule) {
-      throw new RuntimeError(207, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);
-    } else {
-      throw new RuntimeError(207, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);
-    }
-  } else {
-    throw new Error("Invalid provider");
-  }
-}
-function throwProviderNotFoundError(token, injectorName) {
-  const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ""}`;
-  throw new RuntimeError(-201, errorMessage);
-}
-var InjectFlags;
-(function(InjectFlags2) {
-  InjectFlags2[InjectFlags2["Default"] = 0] = "Default";
-  InjectFlags2[InjectFlags2["Host"] = 1] = "Host";
-  InjectFlags2[InjectFlags2["Self"] = 2] = "Self";
-  InjectFlags2[InjectFlags2["SkipSelf"] = 4] = "SkipSelf";
-  InjectFlags2[InjectFlags2["Optional"] = 8] = "Optional";
-})(InjectFlags || (InjectFlags = {}));
-var _injectImplementation;
-function getInjectImplementation() {
-  return _injectImplementation;
-}
-function setInjectImplementation(impl) {
-  const previous = _injectImplementation;
-  _injectImplementation = impl;
-  return previous;
-}
-function injectRootLimpMode(token, notFoundValue, flags) {
-  const injectableDef = getInjectableDef(token);
-  if (injectableDef && injectableDef.providedIn == "root") {
-    return injectableDef.value === void 0 ? injectableDef.value = injectableDef.factory() : injectableDef.value;
-  }
-  if (flags & InjectFlags.Optional) return null;
-  if (notFoundValue !== void 0) return notFoundValue;
-  throwProviderNotFoundError(token, "Injector");
-}
-function assertInjectImplementationNotEqual(fn) {
-  ngDevMode && assertNotEqual(_injectImplementation, fn, "Calling ɵɵinject would cause infinite recursion");
-}
-var _THROW_IF_NOT_FOUND = {};
-var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
-var DI_DECORATOR_FLAG = "__NG_DI_FLAG__";
-var NG_TEMP_TOKEN_PATH = "ngTempTokenPath";
-var NG_TOKEN_PATH = "ngTokenPath";
-var NEW_LINE = /\n/gm;
-var NO_NEW_LINE = "ɵ";
-var SOURCE = "__source";
-var _currentInjector = void 0;
-function getCurrentInjector() {
-  return _currentInjector;
-}
-function setCurrentInjector(injector) {
-  const former = _currentInjector;
-  _currentInjector = injector;
-  return former;
-}
-function injectInjectorOnly(token, flags = InjectFlags.Default) {
-  if (_currentInjector === void 0) {
-    throw new RuntimeError(-203, ngDevMode && `inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
-  } else if (_currentInjector === null) {
-    return injectRootLimpMode(token, void 0, flags);
-  } else {
-    const value = _currentInjector.get(token, flags & InjectFlags.Optional ? null : void 0, flags);
-    ngDevMode && emitInjectEvent(token, value, flags);
-    return value;
-  }
-}
-function ɵɵinject(token, flags = InjectFlags.Default) {
-  return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
-}
-function ɵɵinvalidFactoryDep(index) {
-  throw new RuntimeError(202, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.
-This can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.
-
-Please check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);
-}
-function inject(token, flags = InjectFlags.Default) {
-  return ɵɵinject(token, convertToBitFlags(flags));
-}
-function convertToBitFlags(flags) {
-  if (typeof flags === "undefined" || typeof flags === "number") {
-    return flags;
-  }
-  return 0 | // comment to force a line break in the formatter
-  (flags.optional && 8) | (flags.host && 1) | (flags.self && 2) | (flags.skipSelf && 4);
-}
-function injectArgs(types) {
-  const args = [];
-  for (let i = 0; i < types.length; i++) {
-    const arg = resolveForwardRef(types[i]);
-    if (Array.isArray(arg)) {
-      if (arg.length === 0) {
-        throw new RuntimeError(900, ngDevMode && "Arguments array must have arguments.");
-      }
-      let type = void 0;
-      let flags = InjectFlags.Default;
-      for (let j = 0; j < arg.length; j++) {
-        const meta = arg[j];
-        const flag = getInjectFlag(meta);
-        if (typeof flag === "number") {
-          if (flag === -1) {
-            type = meta.token;
-          } else {
-            flags |= flag;
-          }
-        } else {
-          type = meta;
-        }
-      }
-      args.push(ɵɵinject(type, flags));
-    } else {
-      args.push(ɵɵinject(arg));
-    }
-  }
-  return args;
-}
-function attachInjectFlag(decorator, flag) {
-  decorator[DI_DECORATOR_FLAG] = flag;
-  decorator.prototype[DI_DECORATOR_FLAG] = flag;
-  return decorator;
-}
-function getInjectFlag(token) {
-  return token[DI_DECORATOR_FLAG];
-}
-function catchInjectorError(e, token, injectorErrorName, source) {
-  const tokenPath = e[NG_TEMP_TOKEN_PATH];
-  if (token[SOURCE]) {
-    tokenPath.unshift(token[SOURCE]);
-  }
-  e.message = formatError("\n" + e.message, tokenPath, injectorErrorName, source);
-  e[NG_TOKEN_PATH] = tokenPath;
-  e[NG_TEMP_TOKEN_PATH] = null;
-  throw e;
-}
-function formatError(text, obj, injectorErrorName, source = null) {
-  text = text && text.charAt(0) === "\n" && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;
-  let context = stringify(obj);
-  if (Array.isArray(obj)) {
-    context = obj.map(stringify).join(" -> ");
-  } else if (typeof obj === "object") {
-    let parts = [];
-    for (let key in obj) {
-      if (obj.hasOwnProperty(key)) {
-        let value = obj[key];
-        parts.push(key + ":" + (typeof value === "string" ? JSON.stringify(value) : stringify(value)));
-      }
-    }
-    context = `{${parts.join(", ")}}`;
-  }
-  return `${injectorErrorName}${source ? "(" + source + ")" : ""}[${context}]: ${text.replace(NEW_LINE, "\n  ")}`;
-}
-var Inject = attachInjectFlag(
-  // Disable tslint because `DecoratorFlags` is a const enum which gets inlined.
-  makeParamDecorator("Inject", (token) => ({
-    token
-  })),
-  -1
-  /* DecoratorFlags.Inject */
-);
-var Optional = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Optional"),
-    8
-    /* InternalInjectFlags.Optional */
-  )
-);
-var Self = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Self"),
-    2
-    /* InternalInjectFlags.Self */
-  )
-);
-var SkipSelf = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("SkipSelf"),
-    4
-    /* InternalInjectFlags.SkipSelf */
-  )
-);
-var Host = (
-  // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
-  // tslint:disable-next-line: no-toplevel-property-access
-  attachInjectFlag(
-    makeParamDecorator("Host"),
-    1
-    /* InternalInjectFlags.Host */
-  )
-);
-function getFactoryDef(type, throwNotFound) {
-  const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);
-  if (!hasFactoryDef && throwNotFound === true && ngDevMode) {
-    throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);
-  }
-  return hasFactoryDef ? type[NG_FACTORY_DEF] : null;
-}
-function arrayEquals(a, b, identityAccessor) {
-  if (a.length !== b.length) return false;
-  for (let i = 0; i < a.length; i++) {
-    let valueA = a[i];
-    let valueB = b[i];
-    if (identityAccessor) {
-      valueA = identityAccessor(valueA);
-      valueB = identityAccessor(valueB);
-    }
-    if (valueB !== valueA) {
-      return false;
-    }
-  }
-  return true;
-}
-function flatten(list) {
-  return list.flat(Number.POSITIVE_INFINITY);
-}
-function deepForEach(input2, fn) {
-  input2.forEach((value) => Array.isArray(value) ? deepForEach(value, fn) : fn(value));
-}
-function addToArray(arr, index, value) {
-  if (index >= arr.length) {
-    arr.push(value);
-  } else {
-    arr.splice(index, 0, value);
-  }
-}
-function removeFromArray(arr, index) {
-  if (index >= arr.length - 1) {
-    return arr.pop();
-  } else {
-    return arr.splice(index, 1)[0];
-  }
-}
-function newArray(size, value) {
-  const list = [];
-  for (let i = 0; i < size; i++) {
-    list.push(value);
-  }
-  return list;
-}
-function arraySplice(array, index, count) {
-  const length = array.length - count;
-  while (index < length) {
-    array[index] = array[index + count];
-    index++;
-  }
-  while (count--) {
-    array.pop();
-  }
-}
-function arrayInsert2(array, index, value1, value2) {
-  ngDevMode && assertLessThanOrEqual(index, array.length, "Can't insert past array end.");
-  let end = array.length;
-  if (end == index) {
-    array.push(value1, value2);
-  } else if (end === 1) {
-    array.push(value2, array[0]);
-    array[0] = value1;
-  } else {
-    end--;
-    array.push(array[end - 1], array[end]);
-    while (end > index) {
-      const previousEnd = end - 2;
-      array[end] = array[previousEnd];
-      end--;
-    }
-    array[index] = value1;
-    array[index + 1] = value2;
-  }
-}
-function keyValueArraySet(keyValueArray, key, value) {
-  let index = keyValueArrayIndexOf(keyValueArray, key);
-  if (index >= 0) {
-    keyValueArray[index | 1] = value;
-  } else {
-    index = ~index;
-    arrayInsert2(keyValueArray, index, key, value);
-  }
-  return index;
-}
-function keyValueArrayGet(keyValueArray, key) {
-  const index = keyValueArrayIndexOf(keyValueArray, key);
-  if (index >= 0) {
-    return keyValueArray[index | 1];
-  }
-  return void 0;
-}
-function keyValueArrayIndexOf(keyValueArray, key) {
-  return _arrayIndexOfSorted(keyValueArray, key, 1);
-}
-function _arrayIndexOfSorted(array, value, shift) {
-  ngDevMode && assertEqual(Array.isArray(array), true, "Expecting an array");
-  let start = 0;
-  let end = array.length >> shift;
-  while (end !== start) {
-    const middle = start + (end - start >> 1);
-    const current = array[middle << shift];
-    if (value === current) {
-      return middle << shift;
-    } else if (current > value) {
-      end = middle;
-    } else {
-      start = middle + 1;
-    }
-  }
-  return ~(end << shift);
-}
-var EMPTY_OBJ = {};
-var EMPTY_ARRAY = [];
-if ((typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode()) {
-  Object.freeze(EMPTY_OBJ);
-  Object.freeze(EMPTY_ARRAY);
-}
-var ENVIRONMENT_INITIALIZER = new InjectionToken(ngDevMode ? "ENVIRONMENT_INITIALIZER" : "");
-var INJECTOR$1 = new InjectionToken(
-  ngDevMode ? "INJECTOR" : "",
-  // Disable tslint because this is const enum which gets inlined not top level prop access.
-  // tslint:disable-next-line: no-toplevel-property-access
-  -1
-  /* InjectorMarkers.Injector */
-);
-var INJECTOR_DEF_TYPES = new InjectionToken(ngDevMode ? "INJECTOR_DEF_TYPES" : "");
-var NullInjector = class {
-  get(token, notFoundValue = THROW_IF_NOT_FOUND) {
-    if (notFoundValue === THROW_IF_NOT_FOUND) {
-      const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);
-      error.name = "NullInjectorError";
-      throw error;
-    }
-    return notFoundValue;
-  }
-};
-function getNgModuleDef(type, throwNotFound) {
-  const ngModuleDef = type[NG_MOD_DEF] || null;
-  if (!ngModuleDef && throwNotFound === true) {
-    throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);
-  }
-  return ngModuleDef;
-}
-function getComponentDef(type) {
-  return type[NG_COMP_DEF] || null;
-}
-function getDirectiveDef(type) {
-  return type[NG_DIR_DEF] || null;
-}
-function getPipeDef$1(type) {
-  return type[NG_PIPE_DEF] || null;
-}
-function isStandalone(type) {
-  const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-  return def !== null ? def.standalone : false;
-}
-function makeEnvironmentProviders(providers) {
-  return {
-    ɵproviders: providers
-  };
-}
-function provideEnvironmentInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: ENVIRONMENT_INITIALIZER,
-    multi: true,
-    useValue: initializerFn
-  }]);
-}
-function importProvidersFrom(...sources) {
-  return {
-    ɵproviders: internalImportProvidersFrom(true, sources),
-    ɵfromNgModule: true
-  };
-}
-function internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {
-  const providersOut = [];
-  const dedup = /* @__PURE__ */ new Set();
-  let injectorTypesWithProviders;
-  const collectProviders = (provider) => {
-    providersOut.push(provider);
-  };
-  deepForEach(sources, (source) => {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && checkForStandaloneCmp) {
-      const cmpDef = getComponentDef(source);
-      if (cmpDef?.standalone) {
-        throw new RuntimeError(800, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component "${stringifyForError(source)}"`);
-      }
-    }
-    const internalSource = source;
-    if (walkProviderTree(internalSource, collectProviders, [], dedup)) {
-      injectorTypesWithProviders ||= [];
-      injectorTypesWithProviders.push(internalSource);
-    }
-  });
-  if (injectorTypesWithProviders !== void 0) {
-    processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);
-  }
-  return providersOut;
-}
-function processInjectorTypesWithProviders(typesWithProviders, visitor) {
-  for (let i = 0; i < typesWithProviders.length; i++) {
-    const {
-      ngModule,
-      providers
-    } = typesWithProviders[i];
-    deepForEachProvider(providers, (provider) => {
-      ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);
-      visitor(provider, ngModule);
-    });
-  }
-}
-function walkProviderTree(container, visitor, parents, dedup) {
-  container = resolveForwardRef(container);
-  if (!container) return false;
-  let defType = null;
-  let injDef = getInjectorDef(container);
-  const cmpDef = !injDef && getComponentDef(container);
-  if (!injDef && !cmpDef) {
-    const ngModule = container.ngModule;
-    injDef = getInjectorDef(ngModule);
-    if (injDef) {
-      defType = ngModule;
-    } else {
-      return false;
-    }
-  } else if (cmpDef && !cmpDef.standalone) {
-    return false;
-  } else {
-    defType = container;
-  }
-  if (ngDevMode && parents.indexOf(defType) !== -1) {
-    const defName = stringify(defType);
-    const path = parents.map(stringify);
-    throwCyclicDependencyError(defName, path);
-  }
-  const isDuplicate = dedup.has(defType);
-  if (cmpDef) {
-    if (isDuplicate) {
-      return false;
-    }
-    dedup.add(defType);
-    if (cmpDef.dependencies) {
-      const deps = typeof cmpDef.dependencies === "function" ? cmpDef.dependencies() : cmpDef.dependencies;
-      for (const dep of deps) {
-        walkProviderTree(dep, visitor, parents, dedup);
-      }
-    }
-  } else if (injDef) {
-    if (injDef.imports != null && !isDuplicate) {
-      ngDevMode && parents.push(defType);
-      dedup.add(defType);
-      let importTypesWithProviders;
-      try {
-        deepForEach(injDef.imports, (imported) => {
-          if (walkProviderTree(imported, visitor, parents, dedup)) {
-            importTypesWithProviders ||= [];
-            importTypesWithProviders.push(imported);
-          }
-        });
-      } finally {
-        ngDevMode && parents.pop();
-      }
-      if (importTypesWithProviders !== void 0) {
-        processInjectorTypesWithProviders(importTypesWithProviders, visitor);
-      }
-    }
-    if (!isDuplicate) {
-      const factory = getFactoryDef(defType) || (() => new defType());
-      visitor({
-        provide: defType,
-        useFactory: factory,
-        deps: EMPTY_ARRAY
-      }, defType);
-      visitor({
-        provide: INJECTOR_DEF_TYPES,
-        useValue: defType,
-        multi: true
-      }, defType);
-      visitor({
-        provide: ENVIRONMENT_INITIALIZER,
-        useValue: () => ɵɵinject(defType),
-        multi: true
-      }, defType);
-    }
-    const defProviders = injDef.providers;
-    if (defProviders != null && !isDuplicate) {
-      const injectorType = container;
-      deepForEachProvider(defProviders, (provider) => {
-        ngDevMode && validateProvider(provider, defProviders, injectorType);
-        visitor(provider, injectorType);
-      });
-    }
-  } else {
-    return false;
-  }
-  return defType !== container && container.providers !== void 0;
-}
-function validateProvider(provider, providers, containerType) {
-  if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {
-    return;
-  }
-  const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));
-  if (!classRef) {
-    throwInvalidProviderError(containerType, providers, provider);
-  }
-}
-function deepForEachProvider(providers, fn) {
-  for (let provider of providers) {
-    if (isEnvironmentProviders(provider)) {
-      provider = provider.ɵproviders;
-    }
-    if (Array.isArray(provider)) {
-      deepForEachProvider(provider, fn);
-    } else {
-      fn(provider);
-    }
-  }
-}
-var USE_VALUE$1 = getClosureSafeProperty({
-  provide: String,
-  useValue: getClosureSafeProperty
-});
-function isValueProvider(value) {
-  return value !== null && typeof value == "object" && USE_VALUE$1 in value;
-}
-function isExistingProvider(value) {
-  return !!(value && value.useExisting);
-}
-function isFactoryProvider(value) {
-  return !!(value && value.useFactory);
-}
-function isTypeProvider(value) {
-  return typeof value === "function";
-}
-function isClassProvider(value) {
-  return !!value.useClass;
-}
-var INJECTOR_SCOPE = new InjectionToken(ngDevMode ? "Set Injector scope." : "");
-var NOT_YET = {};
-var CIRCULAR = {};
-var NULL_INJECTOR = void 0;
-function getNullInjector() {
-  if (NULL_INJECTOR === void 0) {
-    NULL_INJECTOR = new NullInjector();
-  }
-  return NULL_INJECTOR;
-}
-var EnvironmentInjector = class {
-};
-var R3Injector = class extends EnvironmentInjector {
-  parent;
-  source;
-  scopes;
-  /**
-   * Map of tokens to records which contain the instances of those tokens.
-   * - `null` value implies that we don't have the record. Used by tree-shakable injectors
-   * to prevent further searches.
-   */
-  records = /* @__PURE__ */ new Map();
-  /**
-   * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.
-   */
-  _ngOnDestroyHooks = /* @__PURE__ */ new Set();
-  _onDestroyHooks = [];
-  /**
-   * Flag indicating that this injector was previously destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  _destroyed = false;
-  injectorDefTypes;
-  constructor(providers, parent, source, scopes) {
-    super();
-    this.parent = parent;
-    this.source = source;
-    this.scopes = scopes;
-    forEachSingleProvider(providers, (provider) => this.processProvider(provider));
-    this.records.set(INJECTOR$1, makeRecord(void 0, this));
-    if (scopes.has("environment")) {
-      this.records.set(EnvironmentInjector, makeRecord(void 0, this));
-    }
-    const record = this.records.get(INJECTOR_SCOPE);
-    if (record != null && typeof record.value === "string") {
-      this.scopes.add(record.value);
-    }
-    this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));
-  }
-  /**
-   * Destroy the injector and release references to every instance or provider associated with it.
-   *
-   * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a
-   * hook was found.
-   */
-  destroy() {
-    assertNotDestroyed(this);
-    this._destroyed = true;
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      for (const service of this._ngOnDestroyHooks) {
-        service.ngOnDestroy();
-      }
-      const onDestroyHooks = this._onDestroyHooks;
-      this._onDestroyHooks = [];
-      for (const hook of onDestroyHooks) {
-        hook();
-      }
-    } finally {
-      this.records.clear();
-      this._ngOnDestroyHooks.clear();
-      this.injectorDefTypes.clear();
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  onDestroy(callback) {
-    assertNotDestroyed(this);
-    this._onDestroyHooks.push(callback);
-    return () => this.removeOnDestroy(callback);
-  }
-  runInContext(fn) {
-    assertNotDestroyed(this);
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token: null
-      });
-    }
-    try {
-      return fn();
-    } finally {
-      setCurrentInjector(previousInjector);
-      setInjectImplementation(previousInjectImplementation);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-    }
-  }
-  get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {
-    assertNotDestroyed(this);
-    if (token.hasOwnProperty(NG_ENV_ID)) {
-      return token[NG_ENV_ID](this);
-    }
-    flags = convertToBitFlags(flags);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token
-      });
-    }
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    try {
-      if (!(flags & InjectFlags.SkipSelf)) {
-        let record = this.records.get(token);
-        if (record === void 0) {
-          const def = couldBeInjectableType(token) && getInjectableDef(token);
-          if (def && this.injectableDefInScope(def)) {
-            if (ngDevMode) {
-              runInInjectorProfilerContext(this, token, () => {
-                emitProviderConfiguredEvent(token);
-              });
-            }
-            record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);
-          } else {
-            record = null;
-          }
-          this.records.set(token, record);
-        }
-        if (record != null) {
-          return this.hydrate(token, record);
-        }
-      }
-      const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();
-      notFoundValue = flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;
-      return nextInjector.get(token, notFoundValue);
-    } catch (e) {
-      if (e.name === "NullInjectorError") {
-        const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
-        path.unshift(stringify(token));
-        if (previousInjector) {
-          throw e;
-        } else {
-          return catchInjectorError(e, token, "R3InjectorError", this.source);
-        }
-      } else {
-        throw e;
-      }
-    } finally {
-      setInjectImplementation(previousInjectImplementation);
-      setCurrentInjector(previousInjector);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-    }
-  }
-  /** @internal */
-  resolveInjectorInitializers() {
-    const prevConsumer = setActiveConsumer(null);
-    const previousInjector = setCurrentInjector(this);
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    let prevInjectContext;
-    if (ngDevMode) {
-      prevInjectContext = setInjectorProfilerContext({
-        injector: this,
-        token: null
-      });
-    }
-    try {
-      const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, InjectFlags.Self);
-      if (ngDevMode && !Array.isArray(initializers)) {
-        throw new RuntimeError(-209, `Unexpected type of the \`ENVIRONMENT_INITIALIZER\` token value (expected an array, but got ${typeof initializers}). Please check that the \`ENVIRONMENT_INITIALIZER\` token is configured as a \`multi: true\` provider.`);
-      }
-      for (const initializer of initializers) {
-        initializer();
-      }
-    } finally {
-      setCurrentInjector(previousInjector);
-      setInjectImplementation(previousInjectImplementation);
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  toString() {
-    const tokens = [];
-    const records = this.records;
-    for (const token of records.keys()) {
-      tokens.push(stringify(token));
-    }
-    return `R3Injector[${tokens.join(", ")}]`;
-  }
-  /**
-   * Process a `SingleProvider` and add it.
-   */
-  processProvider(provider) {
-    provider = resolveForwardRef(provider);
-    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);
-    const record = providerToRecord(provider);
-    if (ngDevMode) {
-      runInInjectorProfilerContext(this, token, () => {
-        if (isValueProvider(provider)) {
-          emitInstanceCreatedByInjectorEvent(provider.useValue);
-        }
-        emitProviderConfiguredEvent(provider);
-      });
-    }
-    if (!isTypeProvider(provider) && provider.multi === true) {
-      let multiRecord = this.records.get(token);
-      if (multiRecord) {
-        if (ngDevMode && multiRecord.multi === void 0) {
-          throwMixedMultiProviderError();
-        }
-      } else {
-        multiRecord = makeRecord(void 0, NOT_YET, true);
-        multiRecord.factory = () => injectArgs(multiRecord.multi);
-        this.records.set(token, multiRecord);
-      }
-      token = provider;
-      multiRecord.multi.push(provider);
-    } else {
-      if (ngDevMode) {
-        const existing = this.records.get(token);
-        if (existing && existing.multi !== void 0) {
-          throwMixedMultiProviderError();
-        }
-      }
-    }
-    this.records.set(token, record);
-  }
-  hydrate(token, record) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (ngDevMode && record.value === CIRCULAR) {
-        throwCyclicDependencyError(stringify(token));
-      } else if (record.value === NOT_YET) {
-        record.value = CIRCULAR;
-        if (ngDevMode) {
-          runInInjectorProfilerContext(this, token, () => {
-            record.value = record.factory();
-            emitInstanceCreatedByInjectorEvent(record.value);
-          });
-        } else {
-          record.value = record.factory();
-        }
-      }
-      if (typeof record.value === "object" && record.value && hasOnDestroy(record.value)) {
-        this._ngOnDestroyHooks.add(record.value);
-      }
-      return record.value;
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  injectableDefInScope(def) {
-    if (!def.providedIn) {
-      return false;
-    }
-    const providedIn = resolveForwardRef(def.providedIn);
-    if (typeof providedIn === "string") {
-      return providedIn === "any" || this.scopes.has(providedIn);
-    } else {
-      return this.injectorDefTypes.has(providedIn);
-    }
-  }
-  removeOnDestroy(callback) {
-    const destroyCBIdx = this._onDestroyHooks.indexOf(callback);
-    if (destroyCBIdx !== -1) {
-      this._onDestroyHooks.splice(destroyCBIdx, 1);
-    }
-  }
-};
-function injectableDefOrInjectorDefFactory(token) {
-  const injectableDef = getInjectableDef(token);
-  const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);
-  if (factory !== null) {
-    return factory;
-  }
-  if (token instanceof InjectionToken) {
-    throw new RuntimeError(204, ngDevMode && `Token ${stringify(token)} is missing a ɵprov definition.`);
-  }
-  if (token instanceof Function) {
-    return getUndecoratedInjectableFactory(token);
-  }
-  throw new RuntimeError(204, ngDevMode && "unreachable");
-}
-function getUndecoratedInjectableFactory(token) {
-  const paramLength = token.length;
-  if (paramLength > 0) {
-    throw new RuntimeError(204, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, "?").join(", ")}).`);
-  }
-  const inheritedInjectableDef = getInheritedInjectableDef(token);
-  if (inheritedInjectableDef !== null) {
-    return () => inheritedInjectableDef.factory(token);
-  } else {
-    return () => new token();
-  }
-}
-function providerToRecord(provider) {
-  if (isValueProvider(provider)) {
-    return makeRecord(void 0, provider.useValue);
-  } else {
-    const factory = providerToFactory(provider);
-    return makeRecord(factory, NOT_YET);
-  }
-}
-function providerToFactory(provider, ngModuleType, providers) {
-  let factory = void 0;
-  if (ngDevMode && isEnvironmentProviders(provider)) {
-    throwInvalidProviderError(void 0, providers, provider);
-  }
-  if (isTypeProvider(provider)) {
-    const unwrappedProvider = resolveForwardRef(provider);
-    return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);
-  } else {
-    if (isValueProvider(provider)) {
-      factory = () => resolveForwardRef(provider.useValue);
-    } else if (isFactoryProvider(provider)) {
-      factory = () => provider.useFactory(...injectArgs(provider.deps || []));
-    } else if (isExistingProvider(provider)) {
-      factory = () => ɵɵinject(resolveForwardRef(provider.useExisting));
-    } else {
-      const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));
-      if (ngDevMode && !classRef) {
-        throwInvalidProviderError(ngModuleType, providers, provider);
-      }
-      if (hasDeps(provider)) {
-        factory = () => new classRef(...injectArgs(provider.deps));
-      } else {
-        return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);
-      }
-    }
-  }
-  return factory;
-}
-function assertNotDestroyed(injector) {
-  if (injector.destroyed) {
-    throw new RuntimeError(205, ngDevMode && "Injector has already been destroyed.");
-  }
-}
-function makeRecord(factory, value, multi = false) {
-  return {
-    factory,
-    value,
-    multi: multi ? [] : void 0
-  };
-}
-function hasDeps(value) {
-  return !!value.deps;
-}
-function hasOnDestroy(value) {
-  return value !== null && typeof value === "object" && typeof value.ngOnDestroy === "function";
-}
-function couldBeInjectableType(value) {
-  return typeof value === "function" || typeof value === "object" && value instanceof InjectionToken;
-}
-function forEachSingleProvider(providers, fn) {
-  for (const provider of providers) {
-    if (Array.isArray(provider)) {
-      forEachSingleProvider(provider, fn);
-    } else if (provider && isEnvironmentProviders(provider)) {
-      forEachSingleProvider(provider.ɵproviders, fn);
-    } else {
-      fn(provider);
-    }
-  }
-}
-function runInInjectionContext(injector, fn) {
-  if (injector instanceof R3Injector) {
-    assertNotDestroyed(injector);
-  }
-  let prevInjectorProfilerContext;
-  if (ngDevMode) {
-    prevInjectorProfilerContext = setInjectorProfilerContext({
-      injector,
-      token: null
-    });
-  }
-  const prevInjector = setCurrentInjector(injector);
-  const previousInjectImplementation = setInjectImplementation(void 0);
-  try {
-    return fn();
-  } finally {
-    setCurrentInjector(prevInjector);
-    ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);
-    setInjectImplementation(previousInjectImplementation);
-  }
-}
-function isInInjectionContext() {
-  return getInjectImplementation() !== void 0 || getCurrentInjector() != null;
-}
-function assertInInjectionContext(debugFn) {
-  if (!isInInjectionContext()) {
-    throw new RuntimeError(-203, ngDevMode && debugFn.name + "() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`");
-  }
-}
-var FactoryTarget;
-(function(FactoryTarget2) {
-  FactoryTarget2[FactoryTarget2["Directive"] = 0] = "Directive";
-  FactoryTarget2[FactoryTarget2["Component"] = 1] = "Component";
-  FactoryTarget2[FactoryTarget2["Injectable"] = 2] = "Injectable";
-  FactoryTarget2[FactoryTarget2["Pipe"] = 3] = "Pipe";
-  FactoryTarget2[FactoryTarget2["NgModule"] = 4] = "NgModule";
-})(FactoryTarget || (FactoryTarget = {}));
-var R3TemplateDependencyKind;
-(function(R3TemplateDependencyKind2) {
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["Directive"] = 0] = "Directive";
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["Pipe"] = 1] = "Pipe";
-  R3TemplateDependencyKind2[R3TemplateDependencyKind2["NgModule"] = 2] = "NgModule";
-})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
-var ViewEncapsulation$1;
-(function(ViewEncapsulation2) {
-  ViewEncapsulation2[ViewEncapsulation2["Emulated"] = 0] = "Emulated";
-  ViewEncapsulation2[ViewEncapsulation2["None"] = 2] = "None";
-  ViewEncapsulation2[ViewEncapsulation2["ShadowDom"] = 3] = "ShadowDom";
-})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));
-function getCompilerFacade(request) {
-  const globalNg = _global["ng"];
-  if (globalNg && globalNg.ɵcompilerFacade) {
-    return globalNg.ɵcompilerFacade;
-  }
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    console.error(`JIT compilation failed for ${request.kind}`, request.type);
-    let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.
-
-`;
-    if (request.usage === 1) {
-      message += `The ${request.kind} is part of a library that has been partially compiled.
-`;
-      message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.
-`;
-      message += "\n";
-      message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.
-`;
-    } else {
-      message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.
-`;
-    }
-    message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',
-`;
-    message += `or manually provide the compiler with 'import "@angular/compiler";' before bootstrapping.`;
-    throw new Error(message);
-  } else {
-    throw new Error("JIT compiler unavailable");
-  }
-}
-var angularCoreDiEnv = {
-  "ɵɵdefineInjectable": ɵɵdefineInjectable,
-  "ɵɵdefineInjector": ɵɵdefineInjector,
-  "ɵɵinject": ɵɵinject,
-  "ɵɵinvalidFactoryDep": ɵɵinvalidFactoryDep,
-  "resolveForwardRef": resolveForwardRef
-};
-var Type = Function;
-function isType(v) {
-  return typeof v === "function";
-}
-var ES5_DELEGATE_CTOR = /^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*(arguments|(?:[^()]+\(\[\],)?[^()]+\(arguments\).*)\)/;
-var ES2015_INHERITED_CLASS = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/;
-var ES2015_INHERITED_CLASS_WITH_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/;
-var ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{[^}]*super\(\.\.\.arguments\)/;
-function isDelegateCtor(typeStr) {
-  return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);
-}
-var ReflectionCapabilities = class {
-  _reflect;
-  constructor(reflect) {
-    this._reflect = reflect || _global["Reflect"];
-  }
-  factory(t) {
-    return (...args) => new t(...args);
-  }
-  /** @internal */
-  _zipTypesAndAnnotations(paramTypes, paramAnnotations) {
-    let result;
-    if (typeof paramTypes === "undefined") {
-      result = newArray(paramAnnotations.length);
-    } else {
-      result = newArray(paramTypes.length);
-    }
-    for (let i = 0; i < result.length; i++) {
-      if (typeof paramTypes === "undefined") {
-        result[i] = [];
-      } else if (paramTypes[i] && paramTypes[i] != Object) {
-        result[i] = [paramTypes[i]];
-      } else {
-        result[i] = [];
-      }
-      if (paramAnnotations && paramAnnotations[i] != null) {
-        result[i] = result[i].concat(paramAnnotations[i]);
-      }
-    }
-    return result;
-  }
-  _ownParameters(type, parentCtor) {
-    const typeStr = type.toString();
-    if (isDelegateCtor(typeStr)) {
-      return null;
-    }
-    if (type.parameters && type.parameters !== parentCtor.parameters) {
-      return type.parameters;
-    }
-    const tsickleCtorParams = type.ctorParameters;
-    if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {
-      const ctorParameters = typeof tsickleCtorParams === "function" ? tsickleCtorParams() : tsickleCtorParams;
-      const paramTypes2 = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);
-      const paramAnnotations2 = ctorParameters.map((ctorParam) => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));
-      return this._zipTypesAndAnnotations(paramTypes2, paramAnnotations2);
-    }
-    const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];
-    const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata("design:paramtypes", type);
-    if (paramTypes || paramAnnotations) {
-      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
-    }
-    return newArray(type.length);
-  }
-  parameters(type) {
-    if (!isType(type)) {
-      return [];
-    }
-    const parentCtor = getParentCtor(type);
-    let parameters = this._ownParameters(type, parentCtor);
-    if (!parameters && parentCtor !== Object) {
-      parameters = this.parameters(parentCtor);
-    }
-    return parameters || [];
-  }
-  _ownAnnotations(typeOrFunc, parentCtor) {
-    if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {
-      let annotations = typeOrFunc.annotations;
-      if (typeof annotations === "function" && annotations.annotations) {
-        annotations = annotations.annotations;
-      }
-      return annotations;
-    }
-    if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {
-      return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);
-    }
-    if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {
-      return typeOrFunc[ANNOTATIONS];
-    }
-    return null;
-  }
-  annotations(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return [];
-    }
-    const parentCtor = getParentCtor(typeOrFunc);
-    const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];
-    const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];
-    return parentAnnotations.concat(ownAnnotations);
-  }
-  _ownPropMetadata(typeOrFunc, parentCtor) {
-    if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {
-      let propMetadata = typeOrFunc.propMetadata;
-      if (typeof propMetadata === "function" && propMetadata.propMetadata) {
-        propMetadata = propMetadata.propMetadata;
-      }
-      return propMetadata;
-    }
-    if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {
-      const propDecorators = typeOrFunc.propDecorators;
-      const propMetadata = {};
-      Object.keys(propDecorators).forEach((prop) => {
-        propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);
-      });
-      return propMetadata;
-    }
-    if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {
-      return typeOrFunc[PROP_METADATA];
-    }
-    return null;
-  }
-  propMetadata(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return {};
-    }
-    const parentCtor = getParentCtor(typeOrFunc);
-    const propMetadata = {};
-    if (parentCtor !== Object) {
-      const parentPropMetadata = this.propMetadata(parentCtor);
-      Object.keys(parentPropMetadata).forEach((propName) => {
-        propMetadata[propName] = parentPropMetadata[propName];
-      });
-    }
-    const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);
-    if (ownPropMetadata) {
-      Object.keys(ownPropMetadata).forEach((propName) => {
-        const decorators = [];
-        if (propMetadata.hasOwnProperty(propName)) {
-          decorators.push(...propMetadata[propName]);
-        }
-        decorators.push(...ownPropMetadata[propName]);
-        propMetadata[propName] = decorators;
-      });
-    }
-    return propMetadata;
-  }
-  ownPropMetadata(typeOrFunc) {
-    if (!isType(typeOrFunc)) {
-      return {};
-    }
-    return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};
-  }
-  hasLifecycleHook(type, lcProperty) {
-    return type instanceof Type && lcProperty in type.prototype;
-  }
-};
-function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
-  if (!decoratorInvocations) {
-    return [];
-  }
-  return decoratorInvocations.map((decoratorInvocation) => {
-    const decoratorType = decoratorInvocation.type;
-    const annotationCls = decoratorType.annotationCls;
-    const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];
-    return new annotationCls(...annotationArgs);
-  });
-}
-function getParentCtor(ctor) {
-  const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;
-  const parentCtor = parentProto ? parentProto.constructor : null;
-  return parentCtor || Object;
-}
-var HOST = 0;
-var TVIEW = 1;
-var FLAGS = 2;
-var PARENT = 3;
-var NEXT = 4;
-var T_HOST = 5;
-var HYDRATION = 6;
-var CLEANUP = 7;
-var CONTEXT = 8;
-var INJECTOR = 9;
-var ENVIRONMENT = 10;
-var RENDERER = 11;
-var CHILD_HEAD = 12;
-var CHILD_TAIL = 13;
-var DECLARATION_VIEW = 14;
-var DECLARATION_COMPONENT_VIEW = 15;
-var DECLARATION_LCONTAINER = 16;
-var PREORDER_HOOK_FLAGS = 17;
-var QUERIES = 18;
-var ID = 19;
-var EMBEDDED_VIEW_INJECTOR = 20;
-var ON_DESTROY_HOOKS = 21;
-var EFFECTS_TO_SCHEDULE = 22;
-var EFFECTS = 23;
-var REACTIVE_TEMPLATE_CONSUMER = 24;
-var HEADER_OFFSET = 25;
-var TYPE = 1;
-var DEHYDRATED_VIEWS = 6;
-var NATIVE = 7;
-var VIEW_REFS = 8;
-var MOVED_VIEWS = 9;
-var CONTAINER_HEADER_OFFSET = 10;
-var LContainerFlags;
-(function(LContainerFlags2) {
-  LContainerFlags2[LContainerFlags2["None"] = 0] = "None";
-  LContainerFlags2[LContainerFlags2["HasTransplantedViews"] = 2] = "HasTransplantedViews";
-})(LContainerFlags || (LContainerFlags = {}));
-function isLView(value) {
-  return Array.isArray(value) && typeof value[TYPE] === "object";
-}
-function isLContainer(value) {
-  return Array.isArray(value) && value[TYPE] === true;
-}
-function isContentQueryHost(tNode) {
-  return (tNode.flags & 4) !== 0;
-}
-function isComponentHost(tNode) {
-  return tNode.componentOffset > -1;
-}
-function isDirectiveHost(tNode) {
-  return (tNode.flags & 1) === 1;
-}
-function isComponentDef(def) {
-  return !!def.template;
-}
-function isRootView(target) {
-  return (target[FLAGS] & 512) !== 0;
-}
-function isProjectionTNode(tNode) {
-  return (tNode.type & 16) === 16;
-}
-function hasI18n(lView) {
-  return (lView[FLAGS] & 32) === 32;
-}
-function isDestroyed(lView) {
-  return (lView[FLAGS] & 256) === 256;
-}
-function assertTNodeForLView(tNode, lView) {
-  assertTNodeForTView(tNode, lView[TVIEW]);
-}
-function assertTNodeForTView(tNode, tView) {
-  assertTNode(tNode);
-  const tData = tView.data;
-  for (let i = HEADER_OFFSET; i < tData.length; i++) {
-    if (tData[i] === tNode) {
-      return;
-    }
-  }
-  throwError("This TNode does not belong to this TView.");
-}
-function assertTNode(tNode) {
-  assertDefined(tNode, "TNode must be defined");
-  if (!(tNode && typeof tNode === "object" && tNode.hasOwnProperty("directiveStylingLast"))) {
-    throwError("Not of type TNode, got: " + tNode);
-  }
-}
-function assertTIcu(tIcu) {
-  assertDefined(tIcu, "Expected TIcu to be defined");
-  if (!(typeof tIcu.currentCaseLViewIndex === "number")) {
-    throwError("Object is not of TIcu type.");
-  }
-}
-function assertComponentType(actual, msg = "Type passed in is not ComponentType, it does not have 'ɵcmp' property.") {
-  if (!getComponentDef(actual)) {
-    throwError(msg);
-  }
-}
-function assertNgModuleType(actual, msg = "Type passed in is not NgModuleType, it does not have 'ɵmod' property.") {
-  if (!getNgModuleDef(actual)) {
-    throwError(msg);
-  }
-}
-function assertHasParent(tNode) {
-  assertDefined(tNode, "currentTNode should exist!");
-  assertDefined(tNode.parent, "currentTNode should have a parent");
-}
-function assertLContainer(value) {
-  assertDefined(value, "LContainer must be defined");
-  assertEqual(isLContainer(value), true, "Expecting LContainer");
-}
-function assertLViewOrUndefined(value) {
-  value && assertEqual(isLView(value), true, "Expecting LView or undefined or null");
-}
-function assertLView(value) {
-  assertDefined(value, "LView must be defined");
-  assertEqual(isLView(value), true, "Expecting LView");
-}
-function assertFirstCreatePass(tView, errMessage) {
-  assertEqual(tView.firstCreatePass, true, errMessage || "Should only be called in first create pass.");
-}
-function assertFirstUpdatePass(tView, errMessage) {
-  assertEqual(tView.firstUpdatePass, true, errMessage || "Should only be called in first update pass.");
-}
-function assertDirectiveDef(obj) {
-  if (obj.type === void 0 || obj.selectors == void 0 || obj.inputs === void 0) {
-    throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);
-  }
-}
-function assertIndexInDeclRange(tView, index) {
-  assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);
-}
-function assertIndexInExpandoRange(lView, index) {
-  const tView = lView[1];
-  assertBetween(tView.expandoStartIndex, lView.length, index);
-}
-function assertBetween(lower, upper, index) {
-  if (!(lower <= index && index < upper)) {
-    throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);
-  }
-}
-function assertProjectionSlots(lView, errMessage) {
-  assertDefined(lView[DECLARATION_COMPONENT_VIEW], "Component views should exist.");
-  assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage || "Components with projection nodes (<ng-content>) must have projection slots defined.");
-}
-function assertParentView(lView, errMessage) {
-  assertDefined(lView, errMessage || "Component views should always have a parent view (component's host view)");
-}
-function assertNoDuplicateDirectives(directives) {
-  if (directives.length < 2) {
-    return;
-  }
-  const seenDirectives = /* @__PURE__ */ new Set();
-  for (const current of directives) {
-    if (seenDirectives.has(current)) {
-      throw new RuntimeError(309, `Directive ${current.type.name} matches multiple times on the same element. Directives can only match an element once.`);
-    }
-    seenDirectives.add(current);
-  }
-}
-function assertNodeInjector(lView, injectorIndex) {
-  assertIndexInExpandoRange(lView, injectorIndex);
-  assertIndexInExpandoRange(
-    lView,
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  );
-  assertNumber(lView[injectorIndex + 0], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 1], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 2], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 3], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 4], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 5], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 6], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[injectorIndex + 7], "injectorIndex should point to a bloom filter");
-  assertNumber(lView[
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ], "injectorIndex should point to parent injector");
-}
-var SimpleChange = class {
-  previousValue;
-  currentValue;
-  firstChange;
-  constructor(previousValue, currentValue, firstChange) {
-    this.previousValue = previousValue;
-    this.currentValue = currentValue;
-    this.firstChange = firstChange;
-  }
-  /**
-   * Check whether the new value is the first value assigned.
-   */
-  isFirstChange() {
-    return this.firstChange;
-  }
-};
-function applyValueToInputField(instance, inputSignalNode, privateName, value) {
-  if (inputSignalNode !== null) {
-    inputSignalNode.applyValueToInputSignal(inputSignalNode, value);
-  } else {
-    instance[privateName] = value;
-  }
-}
-var ɵɵNgOnChangesFeature = (() => {
-  const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;
-  ɵɵNgOnChangesFeatureImpl.ngInherit = true;
-  return ɵɵNgOnChangesFeatureImpl;
-})();
-function NgOnChangesFeatureImpl(definition) {
-  if (definition.type.prototype.ngOnChanges) {
-    definition.setInput = ngOnChangesSetInput;
-  }
-  return rememberChangeHistoryAndInvokeOnChangesHook;
-}
-function rememberChangeHistoryAndInvokeOnChangesHook() {
-  const simpleChangesStore = getSimpleChangesStore(this);
-  const current = simpleChangesStore?.current;
-  if (current) {
-    const previous = simpleChangesStore.previous;
-    if (previous === EMPTY_OBJ) {
-      simpleChangesStore.previous = current;
-    } else {
-      for (let key in current) {
-        previous[key] = current[key];
-      }
-    }
-    simpleChangesStore.current = null;
-    this.ngOnChanges(current);
-  }
-}
-function ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {
-  const declaredName = this.declaredInputs[publicName];
-  ngDevMode && assertString(declaredName, "Name of input in ngOnChanges has to be a string");
-  const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {
-    previous: EMPTY_OBJ,
-    current: null
-  });
-  const current = simpleChangesStore.current || (simpleChangesStore.current = {});
-  const previous = simpleChangesStore.previous;
-  const previousChange = previous[declaredName];
-  current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);
-  applyValueToInputField(instance, inputSignalNode, privateName, value);
-}
-var SIMPLE_CHANGES_STORE = "__ngSimpleChanges__";
-function getSimpleChangesStore(instance) {
-  return instance[SIMPLE_CHANGES_STORE] || null;
-}
-function setSimpleChangesStore(instance, store2) {
-  return instance[SIMPLE_CHANGES_STORE] = store2;
-}
-var profilerCallback = null;
-var setProfiler = (profiler2) => {
-  profilerCallback = profiler2;
-};
-var profiler = function(event, instance, hookOrListener) {
-  if (profilerCallback != null) {
-    profilerCallback(event, instance, hookOrListener);
-  }
-};
-var SVG_NAMESPACE = "svg";
-var MATH_ML_NAMESPACE = "math";
-function unwrapRNode(value) {
-  while (Array.isArray(value)) {
-    value = value[HOST];
-  }
-  return value;
-}
-function unwrapLView(value) {
-  while (Array.isArray(value)) {
-    if (typeof value[TYPE] === "object") return value;
-    value = value[HOST];
-  }
-  return null;
-}
-function getNativeByIndex(index, lView) {
-  ngDevMode && assertIndexInRange(lView, index);
-  ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, "Expected to be past HEADER_OFFSET");
-  return unwrapRNode(lView[index]);
-}
-function getNativeByTNode(tNode, lView) {
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  ngDevMode && assertIndexInRange(lView, tNode.index);
-  const node = unwrapRNode(lView[tNode.index]);
-  return node;
-}
-function getNativeByTNodeOrNull(tNode, lView) {
-  const index = tNode === null ? -1 : tNode.index;
-  if (index !== -1) {
-    ngDevMode && assertTNodeForLView(tNode, lView);
-    const node = unwrapRNode(lView[index]);
-    return node;
-  }
-  return null;
-}
-function getTNode(tView, index) {
-  ngDevMode && assertGreaterThan(index, -1, "wrong index for TNode");
-  ngDevMode && assertLessThan(index, tView.data.length, "wrong index for TNode");
-  const tNode = tView.data[index];
-  ngDevMode && tNode !== null && assertTNode(tNode);
-  return tNode;
-}
-function load(view, index) {
-  ngDevMode && assertIndexInRange(view, index);
-  return view[index];
-}
-function getComponentLViewByIndex(nodeIndex, hostView) {
-  ngDevMode && assertIndexInRange(hostView, nodeIndex);
-  const slotValue = hostView[nodeIndex];
-  const lView = isLView(slotValue) ? slotValue : slotValue[HOST];
-  return lView;
-}
-function isCreationMode(view) {
-  return (view[FLAGS] & 4) === 4;
-}
-function viewAttachedToChangeDetector(view) {
-  return (view[FLAGS] & 128) === 128;
-}
-function viewAttachedToContainer(view) {
-  return isLContainer(view[PARENT]);
-}
-function getConstant(consts, index) {
-  if (index === null || index === void 0) return null;
-  ngDevMode && assertIndexInRange(consts, index);
-  return consts[index];
-}
-function resetPreOrderHookFlags(lView) {
-  lView[PREORDER_HOOK_FLAGS] = 0;
-}
-function markViewForRefresh(lView) {
-  if (lView[FLAGS] & 1024) {
-    return;
-  }
-  lView[FLAGS] |= 1024;
-  if (viewAttachedToChangeDetector(lView)) {
-    markAncestorsForTraversal(lView);
-  }
-}
-function walkUpViews(nestingLevel, currentView) {
-  while (nestingLevel > 0) {
-    ngDevMode && assertDefined(currentView[DECLARATION_VIEW], "Declaration view should be defined if nesting level is greater than 0.");
-    currentView = currentView[DECLARATION_VIEW];
-    nestingLevel--;
-  }
-  return currentView;
-}
-function requiresRefreshOrTraversal(lView) {
-  return !!(lView[FLAGS] & (1024 | 8192) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);
-}
-function updateAncestorTraversalFlagsOnAttach(lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    9
-    /* NotificationSource.ViewAttached */
-  );
-  if (lView[FLAGS] & 64) {
-    lView[FLAGS] |= 1024;
-  }
-  if (requiresRefreshOrTraversal(lView)) {
-    markAncestorsForTraversal(lView);
-  }
-}
-function markAncestorsForTraversal(lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    0
-    /* NotificationSource.MarkAncestorsForTraversal */
-  );
-  let parent = getLViewParent(lView);
-  while (parent !== null) {
-    if (parent[FLAGS] & 8192) {
-      break;
-    }
-    parent[FLAGS] |= 8192;
-    if (!viewAttachedToChangeDetector(parent)) {
-      break;
-    }
-    parent = getLViewParent(parent);
-  }
-}
-function storeLViewOnDestroy(lView, onDestroyCallback) {
-  if ((lView[FLAGS] & 256) === 256) {
-    throw new RuntimeError(911, ngDevMode && "View has already been destroyed.");
-  }
-  if (lView[ON_DESTROY_HOOKS] === null) {
-    lView[ON_DESTROY_HOOKS] = [];
-  }
-  lView[ON_DESTROY_HOOKS].push(onDestroyCallback);
-}
-function removeLViewOnDestroy(lView, onDestroyCallback) {
-  if (lView[ON_DESTROY_HOOKS] === null) return;
-  const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);
-  if (destroyCBIdx !== -1) {
-    lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);
-  }
-}
-function getLViewParent(lView) {
-  ngDevMode && assertLView(lView);
-  const parent = lView[PARENT];
-  return isLContainer(parent) ? parent[PARENT] : parent;
-}
-var instructionState = {
-  lFrame: createLFrame(null),
-  bindingsEnabled: true,
-  skipHydrationRootTNode: null
-};
-var CheckNoChangesMode;
-(function(CheckNoChangesMode2) {
-  CheckNoChangesMode2[CheckNoChangesMode2["Off"] = 0] = "Off";
-  CheckNoChangesMode2[CheckNoChangesMode2["Exhaustive"] = 1] = "Exhaustive";
-  CheckNoChangesMode2[CheckNoChangesMode2["OnlyDirtyViews"] = 2] = "OnlyDirtyViews";
-})(CheckNoChangesMode || (CheckNoChangesMode = {}));
-var _checkNoChangesMode = 0;
-var _isRefreshingViews = false;
-function getElementDepthCount() {
-  return instructionState.lFrame.elementDepthCount;
-}
-function increaseElementDepthCount() {
-  instructionState.lFrame.elementDepthCount++;
-}
-function decreaseElementDepthCount() {
-  instructionState.lFrame.elementDepthCount--;
-}
-function getBindingsEnabled() {
-  return instructionState.bindingsEnabled;
-}
-function isInSkipHydrationBlock$1() {
-  return instructionState.skipHydrationRootTNode !== null;
-}
-function isSkipHydrationRootTNode(tNode) {
-  return instructionState.skipHydrationRootTNode === tNode;
-}
-function ɵɵenableBindings() {
-  instructionState.bindingsEnabled = true;
-}
-function enterSkipHydrationBlock(tNode) {
-  instructionState.skipHydrationRootTNode = tNode;
-}
-function ɵɵdisableBindings() {
-  instructionState.bindingsEnabled = false;
-}
-function leaveSkipHydrationBlock() {
-  instructionState.skipHydrationRootTNode = null;
-}
-function getLView() {
-  return instructionState.lFrame.lView;
-}
-function getTView() {
-  return instructionState.lFrame.tView;
-}
-function ɵɵrestoreView(viewToRestore) {
-  instructionState.lFrame.contextLView = viewToRestore;
-  return viewToRestore[CONTEXT];
-}
-function ɵɵresetView(value) {
-  instructionState.lFrame.contextLView = null;
-  return value;
-}
-function getCurrentTNode() {
-  let currentTNode = getCurrentTNodePlaceholderOk();
-  while (currentTNode !== null && currentTNode.type === 64) {
-    currentTNode = currentTNode.parent;
-  }
-  return currentTNode;
-}
-function getCurrentTNodePlaceholderOk() {
-  return instructionState.lFrame.currentTNode;
-}
-function getCurrentParentTNode() {
-  const lFrame = instructionState.lFrame;
-  const currentTNode = lFrame.currentTNode;
-  return lFrame.isParent ? currentTNode : currentTNode.parent;
-}
-function setCurrentTNode(tNode, isParent) {
-  ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);
-  const lFrame = instructionState.lFrame;
-  lFrame.currentTNode = tNode;
-  lFrame.isParent = isParent;
-}
-function isCurrentTNodeParent() {
-  return instructionState.lFrame.isParent;
-}
-function setCurrentTNodeAsNotParent() {
-  instructionState.lFrame.isParent = false;
-}
-function getContextLView() {
-  const contextLView = instructionState.lFrame.contextLView;
-  ngDevMode && assertDefined(contextLView, "contextLView must be defined.");
-  return contextLView;
-}
-function isInCheckNoChangesMode() {
-  !ngDevMode && throwError("Must never be called in production mode");
-  return _checkNoChangesMode !== CheckNoChangesMode.Off;
-}
-function isExhaustiveCheckNoChanges() {
-  !ngDevMode && throwError("Must never be called in production mode");
-  return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;
-}
-function setIsInCheckNoChangesMode(mode) {
-  !ngDevMode && throwError("Must never be called in production mode");
-  _checkNoChangesMode = mode;
-}
-function isRefreshingViews() {
-  return _isRefreshingViews;
-}
-function setIsRefreshingViews(mode) {
-  const prev = _isRefreshingViews;
-  _isRefreshingViews = mode;
-  return prev;
-}
-function getBindingRoot() {
-  const lFrame = instructionState.lFrame;
-  let index = lFrame.bindingRootIndex;
-  if (index === -1) {
-    index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;
-  }
-  return index;
-}
-function getBindingIndex() {
-  return instructionState.lFrame.bindingIndex;
-}
-function setBindingIndex(value) {
-  return instructionState.lFrame.bindingIndex = value;
-}
-function nextBindingIndex() {
-  return instructionState.lFrame.bindingIndex++;
-}
-function incrementBindingIndex(count) {
-  const lFrame = instructionState.lFrame;
-  const index = lFrame.bindingIndex;
-  lFrame.bindingIndex = lFrame.bindingIndex + count;
-  return index;
-}
-function isInI18nBlock() {
-  return instructionState.lFrame.inI18n;
-}
-function setInI18nBlock(isInI18nBlock2) {
-  instructionState.lFrame.inI18n = isInI18nBlock2;
-}
-function setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {
-  const lFrame = instructionState.lFrame;
-  lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;
-  setCurrentDirectiveIndex(currentDirectiveIndex);
-}
-function getCurrentDirectiveIndex() {
-  return instructionState.lFrame.currentDirectiveIndex;
-}
-function setCurrentDirectiveIndex(currentDirectiveIndex) {
-  instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;
-}
-function getCurrentDirectiveDef(tData) {
-  const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;
-  return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];
-}
-function getCurrentQueryIndex() {
-  return instructionState.lFrame.currentQueryIndex;
-}
-function setCurrentQueryIndex(value) {
-  instructionState.lFrame.currentQueryIndex = value;
-}
-function getDeclarationTNode(lView) {
-  const tView = lView[TVIEW];
-  if (tView.type === 2) {
-    ngDevMode && assertDefined(tView.declTNode, "Embedded TNodes should have declaration parents.");
-    return tView.declTNode;
-  }
-  if (tView.type === 1) {
-    return lView[T_HOST];
-  }
-  return null;
-}
-function enterDI(lView, tNode, flags) {
-  ngDevMode && assertLViewOrUndefined(lView);
-  if (flags & InjectFlags.SkipSelf) {
-    ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);
-    let parentTNode = tNode;
-    let parentLView = lView;
-    while (true) {
-      ngDevMode && assertDefined(parentTNode, "Parent TNode should be defined");
-      parentTNode = parentTNode.parent;
-      if (parentTNode === null && !(flags & InjectFlags.Host)) {
-        parentTNode = getDeclarationTNode(parentLView);
-        if (parentTNode === null) break;
-        ngDevMode && assertDefined(parentLView, "Parent LView should be defined");
-        parentLView = parentLView[DECLARATION_VIEW];
-        if (parentTNode.type & (2 | 8)) {
-          break;
-        }
-      } else {
-        break;
-      }
-    }
-    if (parentTNode === null) {
-      return false;
-    } else {
-      tNode = parentTNode;
-      lView = parentLView;
-    }
-  }
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  const lFrame = instructionState.lFrame = allocLFrame();
-  lFrame.currentTNode = tNode;
-  lFrame.lView = lView;
-  return true;
-}
-function enterView(newView) {
-  ngDevMode && assertNotEqual(newView[0], newView[1], "????");
-  ngDevMode && assertLViewOrUndefined(newView);
-  const newLFrame = allocLFrame();
-  if (ngDevMode) {
-    assertEqual(newLFrame.isParent, true, "Expected clean LFrame");
-    assertEqual(newLFrame.lView, null, "Expected clean LFrame");
-    assertEqual(newLFrame.tView, null, "Expected clean LFrame");
-    assertEqual(newLFrame.selectedIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.elementDepthCount, 0, "Expected clean LFrame");
-    assertEqual(newLFrame.currentDirectiveIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.currentNamespace, null, "Expected clean LFrame");
-    assertEqual(newLFrame.bindingRootIndex, -1, "Expected clean LFrame");
-    assertEqual(newLFrame.currentQueryIndex, 0, "Expected clean LFrame");
-  }
-  const tView = newView[TVIEW];
-  instructionState.lFrame = newLFrame;
-  ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);
-  newLFrame.currentTNode = tView.firstChild;
-  newLFrame.lView = newView;
-  newLFrame.tView = tView;
-  newLFrame.contextLView = newView;
-  newLFrame.bindingIndex = tView.bindingStartIndex;
-  newLFrame.inI18n = false;
-}
-function allocLFrame() {
-  const currentLFrame = instructionState.lFrame;
-  const childLFrame = currentLFrame === null ? null : currentLFrame.child;
-  const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;
-  return newLFrame;
-}
-function createLFrame(parent) {
-  const lFrame = {
-    currentTNode: null,
-    isParent: true,
-    lView: null,
-    tView: null,
-    selectedIndex: -1,
-    contextLView: null,
-    elementDepthCount: 0,
-    currentNamespace: null,
-    currentDirectiveIndex: -1,
-    bindingRootIndex: -1,
-    bindingIndex: -1,
-    currentQueryIndex: 0,
-    parent,
-    child: null,
-    inI18n: false
-  };
-  parent !== null && (parent.child = lFrame);
-  return lFrame;
-}
-function leaveViewLight() {
-  const oldLFrame = instructionState.lFrame;
-  instructionState.lFrame = oldLFrame.parent;
-  oldLFrame.currentTNode = null;
-  oldLFrame.lView = null;
-  return oldLFrame;
-}
-var leaveDI = leaveViewLight;
-function leaveView() {
-  const oldLFrame = leaveViewLight();
-  oldLFrame.isParent = true;
-  oldLFrame.tView = null;
-  oldLFrame.selectedIndex = -1;
-  oldLFrame.contextLView = null;
-  oldLFrame.elementDepthCount = 0;
-  oldLFrame.currentDirectiveIndex = -1;
-  oldLFrame.currentNamespace = null;
-  oldLFrame.bindingRootIndex = -1;
-  oldLFrame.bindingIndex = -1;
-  oldLFrame.currentQueryIndex = 0;
-}
-function nextContextImpl(level) {
-  const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);
-  return contextLView[CONTEXT];
-}
-function getSelectedIndex() {
-  return instructionState.lFrame.selectedIndex;
-}
-function setSelectedIndex(index) {
-  ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, "Index must be past HEADER_OFFSET (or -1).");
-  ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, "Can't set index passed end of LView");
-  instructionState.lFrame.selectedIndex = index;
-}
-function getSelectedTNode() {
-  const lFrame = instructionState.lFrame;
-  return getTNode(lFrame.tView, lFrame.selectedIndex);
-}
-function ɵɵnamespaceSVG() {
-  instructionState.lFrame.currentNamespace = SVG_NAMESPACE;
-}
-function ɵɵnamespaceMathML() {
-  instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;
-}
-function ɵɵnamespaceHTML() {
-  namespaceHTMLInternal();
-}
-function namespaceHTMLInternal() {
-  instructionState.lFrame.currentNamespace = null;
-}
-function getNamespace$1() {
-  return instructionState.lFrame.currentNamespace;
-}
-var _wasLastNodeCreated = true;
-function wasLastNodeCreated() {
-  return _wasLastNodeCreated;
-}
-function lastNodeWasCreated(flag) {
-  _wasLastNodeCreated = flag;
-}
-function registerPreOrderHooks(directiveIndex, directiveDef, tView) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const {
-    ngOnChanges,
-    ngOnInit,
-    ngDoCheck
-  } = directiveDef.type.prototype;
-  if (ngOnChanges) {
-    const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);
-    (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);
-    (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);
-  }
-  if (ngOnInit) {
-    (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);
-  }
-  if (ngDoCheck) {
-    (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);
-    (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);
-  }
-}
-function registerPostOrderHooks(tView, tNode) {
-  ngDevMode && assertFirstCreatePass(tView);
-  for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {
-    const directiveDef = tView.data[i];
-    ngDevMode && assertDefined(directiveDef, "Expecting DirectiveDef");
-    const lifecycleHooks = directiveDef.type.prototype;
-    const {
-      ngAfterContentInit,
-      ngAfterContentChecked,
-      ngAfterViewInit,
-      ngAfterViewChecked,
-      ngOnDestroy
-    } = lifecycleHooks;
-    if (ngAfterContentInit) {
-      (tView.contentHooks ??= []).push(-i, ngAfterContentInit);
-    }
-    if (ngAfterContentChecked) {
-      (tView.contentHooks ??= []).push(i, ngAfterContentChecked);
-      (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);
-    }
-    if (ngAfterViewInit) {
-      (tView.viewHooks ??= []).push(-i, ngAfterViewInit);
-    }
-    if (ngAfterViewChecked) {
-      (tView.viewHooks ??= []).push(i, ngAfterViewChecked);
-      (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);
-    }
-    if (ngOnDestroy != null) {
-      (tView.destroyHooks ??= []).push(i, ngOnDestroy);
-    }
-  }
-}
-function executeCheckHooks(lView, hooks, nodeIndex) {
-  callHooks(lView, hooks, 3, nodeIndex);
-}
-function executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {
-  ngDevMode && assertNotEqual(initPhase, 3, "Init pre-order hooks should not be called more than once");
-  if ((lView[FLAGS] & 3) === initPhase) {
-    callHooks(lView, hooks, initPhase, nodeIndex);
-  }
-}
-function incrementInitPhaseFlags(lView, initPhase) {
-  ngDevMode && assertNotEqual(initPhase, 3, "Init hooks phase should not be incremented after all init hooks have been run.");
-  let flags = lView[FLAGS];
-  if ((flags & 3) === initPhase) {
-    flags &= 16383;
-    flags += 1;
-    lView[FLAGS] = flags;
-  }
-}
-function callHooks(currentView, arr, initPhase, currentNodeIndex) {
-  ngDevMode && assertEqual(isInCheckNoChangesMode(), false, "Hooks should never be run when in check no changes mode.");
-  const startIndex = currentNodeIndex !== void 0 ? currentView[PREORDER_HOOK_FLAGS] & 65535 : 0;
-  const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;
-  const max = arr.length - 1;
-  let lastNodeIndexFound = 0;
-  for (let i = startIndex; i < max; i++) {
-    const hook = arr[i + 1];
-    if (typeof hook === "number") {
-      lastNodeIndexFound = arr[i];
-      if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {
-        break;
-      }
-    } else {
-      const isInitHook = arr[i] < 0;
-      if (isInitHook) {
-        currentView[PREORDER_HOOK_FLAGS] += 65536;
-      }
-      if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {
-        callHook(currentView, initPhase, arr, i);
-        currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760) + i + 2;
-      }
-      i++;
-    }
-  }
-}
-function callHookInternal(directive, hook) {
-  profiler(4, directive, hook);
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    hook.call(directive);
-  } finally {
-    setActiveConsumer(prevConsumer);
-    profiler(5, directive, hook);
-  }
-}
-function callHook(currentView, initPhase, arr, i) {
-  const isInitHook = arr[i] < 0;
-  const hook = arr[i + 1];
-  const directiveIndex = isInitHook ? -arr[i] : arr[i];
-  const directive = currentView[directiveIndex];
-  if (isInitHook) {
-    const indexWithintInitPhase = currentView[FLAGS] >> 14;
-    if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 && (currentView[FLAGS] & 3) === initPhase) {
-      currentView[FLAGS] += 16384;
-      callHookInternal(directive, hook);
-    }
-  } else {
-    callHookInternal(directive, hook);
-  }
-}
-var NO_PARENT_INJECTOR = -1;
-var NodeInjectorFactory = class {
-  factory;
-  /**
-   * The inject implementation to be activated when using the factory.
-   */
-  injectImpl;
-  /**
-   * Marker set to true during factory invocation to see if we get into recursive loop.
-   * Recursive loop causes an error to be displayed.
-   */
-  resolving = false;
-  /**
-   * Marks that the token can see other Tokens declared in `viewProviders` on the same node.
-   */
-  canSeeViewProviders;
-  /**
-   * An array of factories to use in case of `multi` provider.
-   */
-  multi;
-  /**
-   * Number of `multi`-providers which belong to the component.
-   *
-   * This is needed because when multiple components and directives declare the `multi` provider
-   * they have to be concatenated in the correct order.
-   *
-   * Example:
-   *
-   * If we have a component and directive active an a single element as declared here
-   * ```
-   * component:
-   *   providers: [ {provide: String, useValue: 'component', multi: true} ],
-   *   viewProviders: [ {provide: String, useValue: 'componentView', multi: true} ],
-   *
-   * directive:
-   *   providers: [ {provide: String, useValue: 'directive', multi: true} ],
-   * ```
-   *
-   * Then the expected results are:
-   *
-   * ```
-   * providers: ['component', 'directive']
-   * viewProviders: ['component', 'componentView', 'directive']
-   * ```
-   *
-   * The way to think about it is that the `viewProviders` have been inserted after the component
-   * but before the directives, which is why we need to know how many `multi`s have been declared by
-   * the component.
-   */
-  componentProviders;
-  /**
-   * Current index of the Factory in the `data`. Needed for `viewProviders` and `providers` merging.
-   * See `providerFactory`.
-   */
-  index;
-  /**
-   * Because the same `multi` provider can be declared in `providers` and `viewProviders` it is
-   * possible for `viewProviders` to shadow the `providers`. For this reason we store the
-   * `provideFactory` of the `providers` so that `providers` can be extended with `viewProviders`.
-   *
-   * Example:
-   *
-   * Given:
-   * ```
-   * providers: [ {provide: String, useValue: 'all', multi: true} ],
-   * viewProviders: [ {provide: String, useValue: 'viewOnly', multi: true} ],
-   * ```
-   *
-   * We have to return `['all']` in case of content injection, but `['all', 'viewOnly']` in case
-   * of view injection. We further have to make sure that the shared instances (in our case
-   * `all`) are the exact same instance in both the content as well as the view injection. (We
-   * have to make sure that we don't double instantiate.) For this reason the `viewProviders`
-   * `Factory` has a pointer to the shadowed `providers` factory so that it can instantiate the
-   * `providers` (`['all']`) and then extend it with `viewProviders` (`['all'] + ['viewOnly'] =
-   * ['all', 'viewOnly']`).
-   */
-  providerFactory;
-  constructor(factory, isViewProvider, injectImplementation) {
-    this.factory = factory;
-    ngDevMode && assertDefined(factory, "Factory not specified");
-    ngDevMode && assertEqual(typeof factory, "function", "Expected factory function.");
-    this.canSeeViewProviders = isViewProvider;
-    this.injectImpl = injectImplementation;
-  }
-};
-function isFactory(obj) {
-  return obj instanceof NodeInjectorFactory;
-}
-function toTNodeTypeAsString(tNodeType) {
-  let text = "";
-  tNodeType & 1 && (text += "|Text");
-  tNodeType & 2 && (text += "|Element");
-  tNodeType & 4 && (text += "|Container");
-  tNodeType & 8 && (text += "|ElementContainer");
-  tNodeType & 16 && (text += "|Projection");
-  tNodeType & 32 && (text += "|IcuContainer");
-  tNodeType & 64 && (text += "|Placeholder");
-  tNodeType & 128 && (text += "|LetDeclaration");
-  return text.length > 0 ? text.substring(1) : text;
-}
-function isTNodeShape(value) {
-  return value != null && typeof value === "object" && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === "number" || Array.isArray(value.insertBeforeIndex));
-}
-function isLetDeclaration(tNode) {
-  return !!(tNode.type & 128);
-}
-function hasClassInput(tNode) {
-  return (tNode.flags & 8) !== 0;
-}
-function hasStyleInput(tNode) {
-  return (tNode.flags & 16) !== 0;
-}
-function assertTNodeType(tNode, expectedTypes, message) {
-  assertDefined(tNode, "should be called with a TNode");
-  if ((tNode.type & expectedTypes) === 0) {
-    throwError(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);
-  }
-}
-function assertPureTNodeType(type) {
-  if (!(type === 2 || type === 1 || type === 4 || type === 8 || type === 32 || type === 16 || type === 64 || type === 128)) {
-    throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);
-  }
-}
-function setUpAttributes(renderer, native, attrs) {
-  let i = 0;
-  while (i < attrs.length) {
-    const value = attrs[i];
-    if (typeof value === "number") {
-      if (value !== 0) {
-        break;
-      }
-      i++;
-      const namespaceURI = attrs[i++];
-      const attrName = attrs[i++];
-      const attrVal = attrs[i++];
-      ngDevMode && ngDevMode.rendererSetAttribute++;
-      renderer.setAttribute(native, attrName, attrVal, namespaceURI);
-    } else {
-      const attrName = value;
-      const attrVal = attrs[++i];
-      ngDevMode && ngDevMode.rendererSetAttribute++;
-      if (isAnimationProp(attrName)) {
-        renderer.setProperty(native, attrName, attrVal);
-      } else {
-        renderer.setAttribute(native, attrName, attrVal);
-      }
-      i++;
-    }
-  }
-  return i;
-}
-function isNameOnlyAttributeMarker(marker) {
-  return marker === 3 || marker === 4 || marker === 6;
-}
-function isAnimationProp(name) {
-  return name.charCodeAt(0) === 64;
-}
-function mergeHostAttrs(dst, src) {
-  if (src === null || src.length === 0) {
-  } else if (dst === null || dst.length === 0) {
-    dst = src.slice();
-  } else {
-    let srcMarker = -1;
-    for (let i = 0; i < src.length; i++) {
-      const item = src[i];
-      if (typeof item === "number") {
-        srcMarker = item;
-      } else {
-        if (srcMarker === 0) {
-        } else if (srcMarker === -1 || srcMarker === 2) {
-          mergeHostAttribute(dst, srcMarker, item, null, src[++i]);
-        } else {
-          mergeHostAttribute(dst, srcMarker, item, null, null);
-        }
-      }
-    }
-  }
-  return dst;
-}
-function mergeHostAttribute(dst, marker, key1, key2, value) {
-  let i = 0;
-  let markerInsertPosition = dst.length;
-  if (marker === -1) {
-    markerInsertPosition = -1;
-  } else {
-    while (i < dst.length) {
-      const dstValue = dst[i++];
-      if (typeof dstValue === "number") {
-        if (dstValue === marker) {
-          markerInsertPosition = -1;
-          break;
-        } else if (dstValue > marker) {
-          markerInsertPosition = i - 1;
-          break;
-        }
-      }
-    }
-  }
-  while (i < dst.length) {
-    const item = dst[i];
-    if (typeof item === "number") {
-      break;
-    } else if (item === key1) {
-      if (key2 === null) {
-        if (value !== null) {
-          dst[i + 1] = value;
-        }
-        return;
-      } else if (key2 === dst[i + 1]) {
-        dst[i + 2] = value;
-        return;
-      }
-    }
-    i++;
-    if (key2 !== null) i++;
-    if (value !== null) i++;
-  }
-  if (markerInsertPosition !== -1) {
-    dst.splice(markerInsertPosition, 0, marker);
-    i = markerInsertPosition + 1;
-  }
-  dst.splice(i++, 0, key1);
-  if (key2 !== null) {
-    dst.splice(i++, 0, key2);
-  }
-  if (value !== null) {
-    dst.splice(i++, 0, value);
-  }
-}
-var NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
-var ChainedInjector = class {
-  injector;
-  parentInjector;
-  constructor(injector, parentInjector) {
-    this.injector = injector;
-    this.parentInjector = parentInjector;
-  }
-  get(token, notFoundValue, flags) {
-    flags = convertToBitFlags(flags);
-    const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
-    if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
-      return value;
-    }
-    return this.parentInjector.get(token, notFoundValue, flags);
-  }
-};
-function hasParentInjector(parentLocation) {
-  return parentLocation !== NO_PARENT_INJECTOR;
-}
-function getParentInjectorIndex(parentLocation) {
-  if (ngDevMode) {
-    assertNumber(parentLocation, "Number expected");
-    assertNotEqual(parentLocation, -1, "Not a valid state.");
-    const parentInjectorIndex = parentLocation & 32767;
-    assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, "Parent injector must be pointing past HEADER_OFFSET.");
-  }
-  return parentLocation & 32767;
-}
-function getParentInjectorViewOffset(parentLocation) {
-  return parentLocation >> 16;
-}
-function getParentInjectorView(location2, startView) {
-  let viewOffset = getParentInjectorViewOffset(location2);
-  let parentView = startView;
-  while (viewOffset > 0) {
-    parentView = parentView[DECLARATION_VIEW];
-    viewOffset--;
-  }
-  return parentView;
-}
-function isRouterOutletInjector(currentInjector) {
-  return currentInjector instanceof ChainedInjector && typeof currentInjector.injector.__ngOutletInjector === "function";
-}
-var includeViewProviders = true;
-function setIncludeViewProviders(v) {
-  const oldValue = includeViewProviders;
-  includeViewProviders = v;
-  return oldValue;
-}
-var BLOOM_SIZE = 256;
-var BLOOM_MASK = BLOOM_SIZE - 1;
-var BLOOM_BUCKET_BITS = 5;
-var nextNgElementId = 0;
-var NOT_FOUND = {};
-function bloomAdd(injectorIndex, tView, type) {
-  ngDevMode && assertEqual(tView.firstCreatePass, true, "expected firstCreatePass to be true");
-  let id;
-  if (typeof type === "string") {
-    id = type.charCodeAt(0) || 0;
-  } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {
-    id = type[NG_ELEMENT_ID];
-  }
-  if (id == null) {
-    id = type[NG_ELEMENT_ID] = nextNgElementId++;
-  }
-  const bloomHash = id & BLOOM_MASK;
-  const mask = 1 << bloomHash;
-  tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;
-}
-function getOrCreateNodeInjectorForNode(tNode, lView) {
-  const existingInjectorIndex = getInjectorIndex(tNode, lView);
-  if (existingInjectorIndex !== -1) {
-    return existingInjectorIndex;
-  }
-  const tView = lView[TVIEW];
-  if (tView.firstCreatePass) {
-    tNode.injectorIndex = lView.length;
-    insertBloom(tView.data, tNode);
-    insertBloom(lView, null);
-    insertBloom(tView.blueprint, null);
-  }
-  const parentLoc = getParentInjectorLocation(tNode, lView);
-  const injectorIndex = tNode.injectorIndex;
-  if (hasParentInjector(parentLoc)) {
-    const parentIndex = getParentInjectorIndex(parentLoc);
-    const parentLView = getParentInjectorView(parentLoc, lView);
-    const parentData = parentLView[TVIEW].data;
-    for (let i = 0; i < 8; i++) {
-      lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];
-    }
-  }
-  lView[
-    injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ] = parentLoc;
-  return injectorIndex;
-}
-function insertBloom(arr, footer) {
-  arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);
-}
-function getInjectorIndex(tNode, lView) {
-  if (tNode.injectorIndex === -1 || // If the injector index is the same as its parent's injector index, then the index has been
-  // copied down from the parent node. No injector has been created yet on this node.
-  tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex || // After the first template pass, the injector index might exist but the parent values
-  // might not have been calculated yet for this instance
-  lView[
-    tNode.injectorIndex + 8
-    /* NodeInjectorOffset.PARENT */
-  ] === null) {
-    return -1;
-  } else {
-    ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);
-    return tNode.injectorIndex;
-  }
-}
-function getParentInjectorLocation(tNode, lView) {
-  if (tNode.parent && tNode.parent.injectorIndex !== -1) {
-    return tNode.parent.injectorIndex;
-  }
-  let declarationViewOffset = 0;
-  let parentTNode = null;
-  let lViewCursor = lView;
-  while (lViewCursor !== null) {
-    parentTNode = getTNodeFromLView(lViewCursor);
-    if (parentTNode === null) {
-      return NO_PARENT_INJECTOR;
-    }
-    ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);
-    declarationViewOffset++;
-    lViewCursor = lViewCursor[DECLARATION_VIEW];
-    if (parentTNode.injectorIndex !== -1) {
-      return parentTNode.injectorIndex | declarationViewOffset << 16;
-    }
-  }
-  return NO_PARENT_INJECTOR;
-}
-function diPublicInInjector(injectorIndex, tView, token) {
-  bloomAdd(injectorIndex, tView, token);
-}
-function injectAttributeImpl(tNode, attrNameToInject) {
-  ngDevMode && assertTNodeType(
-    tNode,
-    12 | 3
-    /* TNodeType.AnyRNode */
-  );
-  ngDevMode && assertDefined(tNode, "expecting tNode");
-  if (attrNameToInject === "class") {
-    return tNode.classes;
-  }
-  if (attrNameToInject === "style") {
-    return tNode.styles;
-  }
-  const attrs = tNode.attrs;
-  if (attrs) {
-    const attrsLength = attrs.length;
-    let i = 0;
-    while (i < attrsLength) {
-      const value = attrs[i];
-      if (isNameOnlyAttributeMarker(value)) break;
-      if (value === 0) {
-        i = i + 2;
-      } else if (typeof value === "number") {
-        i++;
-        while (i < attrsLength && typeof attrs[i] === "string") {
-          i++;
-        }
-      } else if (value === attrNameToInject) {
-        return attrs[i + 1];
-      } else {
-        i = i + 2;
-      }
-    }
-  }
-  return null;
-}
-function notFoundValueOrThrow(notFoundValue, token, flags) {
-  if (flags & InjectFlags.Optional || notFoundValue !== void 0) {
-    return notFoundValue;
-  } else {
-    throwProviderNotFoundError(token, "NodeInjector");
-  }
-}
-function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
-  if (flags & InjectFlags.Optional && notFoundValue === void 0) {
-    notFoundValue = null;
-  }
-  if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {
-    const moduleInjector = lView[INJECTOR];
-    const previousInjectImplementation = setInjectImplementation(void 0);
-    try {
-      if (moduleInjector) {
-        return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);
-      } else {
-        return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);
-      }
-    } finally {
-      setInjectImplementation(previousInjectImplementation);
-    }
-  }
-  return notFoundValueOrThrow(notFoundValue, token, flags);
-}
-function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
-  if (tNode !== null) {
-    if (lView[FLAGS] & 2048 && // The token must be present on the current node injector when the `Self`
-    // flag is set, so the lookup on embedded view injector(s) can be skipped.
-    !(flags & InjectFlags.Self)) {
-      const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
-      if (embeddedInjectorValue !== NOT_FOUND) {
-        return embeddedInjectorValue;
-      }
-    }
-    const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
-    if (value !== NOT_FOUND) {
-      return value;
-    }
-  }
-  return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
-}
-function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
-  const bloomHash = bloomHashBitOrFactory(token);
-  if (typeof bloomHash === "function") {
-    if (!enterDI(lView, tNode, flags)) {
-      return flags & InjectFlags.Host ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
-    }
-    try {
-      let value;
-      if (ngDevMode) {
-        runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {
-          value = bloomHash(flags);
-          if (value != null) {
-            emitInstanceCreatedByInjectorEvent(value);
-          }
-        });
-      } else {
-        value = bloomHash(flags);
-      }
-      if (value == null && !(flags & InjectFlags.Optional)) {
-        throwProviderNotFoundError(token);
-      } else {
-        return value;
-      }
-    } finally {
-      leaveDI();
-    }
-  } else if (typeof bloomHash === "number") {
-    let previousTView = null;
-    let injectorIndex = getInjectorIndex(tNode, lView);
-    let parentLocation = NO_PARENT_INJECTOR;
-    let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
-    if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
-      parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[
-        injectorIndex + 8
-        /* NodeInjectorOffset.PARENT */
-      ];
-      if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
-        injectorIndex = -1;
-      } else {
-        previousTView = lView[TVIEW];
-        injectorIndex = getParentInjectorIndex(parentLocation);
-        lView = getParentInjectorView(parentLocation, lView);
-      }
-    }
-    while (injectorIndex !== -1) {
-      ngDevMode && assertNodeInjector(lView, injectorIndex);
-      const tView = lView[TVIEW];
-      ngDevMode && assertTNodeForLView(tView.data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ], lView);
-      if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
-        const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
-        if (instance !== NOT_FOUND) {
-          return instance;
-        }
-      }
-      parentLocation = lView[
-        injectorIndex + 8
-        /* NodeInjectorOffset.PARENT */
-      ];
-      if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {
-        previousTView = tView;
-        injectorIndex = getParentInjectorIndex(parentLocation);
-        lView = getParentInjectorView(parentLocation, lView);
-      } else {
-        injectorIndex = -1;
-      }
-    }
-  }
-  return notFoundValue;
-}
-function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
-  const currentTView = lView[TVIEW];
-  const tNode = currentTView.data[
-    injectorIndex + 8
-    /* NodeInjectorOffset.TNODE */
-  ];
-  const canAccessViewProviders = previousTView == null ? (
-    // 1) This is the first invocation `previousTView == null` which means that we are at the
-    // `TNode` of where injector is starting to look. In such a case the only time we are allowed
-    // to look into the ViewProviders is if:
-    // - we are on a component
-    // - AND the injector set `includeViewProviders` to true (implying that the token can see
-    // ViewProviders because it is the Component or a Service which itself was declared in
-    // ViewProviders)
-    isComponentHost(tNode) && includeViewProviders
-  ) : (
-    // 2) `previousTView != null` which means that we are now walking across the parent nodes.
-    // In such a case we are only allowed to look into the ViewProviders if:
-    // - We just crossed from child View to Parent View `previousTView != currentTView`
-    // - AND the parent TNode is an Element.
-    // This means that we just came from the Component's View and therefore are allowed to see
-    // into the ViewProviders.
-    previousTView != currentTView && (tNode.type & 3) !== 0
-  );
-  const isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;
-  const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);
-  if (injectableIdx !== null) {
-    return getNodeInjectable(lView, currentTView, injectableIdx, tNode);
-  } else {
-    return NOT_FOUND;
-  }
-}
-function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {
-  const nodeProviderIndexes = tNode.providerIndexes;
-  const tInjectables = tView.data;
-  const injectablesStart = nodeProviderIndexes & 1048575;
-  const directivesStart = tNode.directiveStart;
-  const directiveEnd = tNode.directiveEnd;
-  const cptViewProvidersCount = nodeProviderIndexes >> 20;
-  const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;
-  const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;
-  for (let i = startingIndex; i < endIndex; i++) {
-    const providerTokenOrDef = tInjectables[i];
-    if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {
-      return i;
-    }
-  }
-  if (isHostSpecialCase) {
-    const dirDef = tInjectables[directivesStart];
-    if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {
-      return directivesStart;
-    }
-  }
-  return null;
-}
-function getNodeInjectable(lView, tView, index, tNode) {
-  let value = lView[index];
-  const tData = tView.data;
-  if (isFactory(value)) {
-    const factory = value;
-    if (factory.resolving) {
-      throwCyclicDependencyError(stringifyForError(tData[index]));
-    }
-    const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);
-    factory.resolving = true;
-    let prevInjectContext;
-    if (ngDevMode) {
-      const token = tData[index].type || tData[index];
-      const injector = new NodeInjector(tNode, lView);
-      prevInjectContext = setInjectorProfilerContext({
-        injector,
-        token
-      });
-    }
-    const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;
-    const success = enterDI(lView, tNode, InjectFlags.Default);
-    ngDevMode && assertEqual(success, true, "Because flags do not contain `SkipSelf' we expect this to always succeed.");
-    try {
-      value = lView[index] = factory.factory(void 0, tData, lView, tNode);
-      ngDevMode && emitInstanceCreatedByInjectorEvent(value);
-      if (tView.firstCreatePass && index >= tNode.directiveStart) {
-        ngDevMode && assertDirectiveDef(tData[index]);
-        registerPreOrderHooks(index, tData[index], tView);
-      }
-    } finally {
-      ngDevMode && setInjectorProfilerContext(prevInjectContext);
-      previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);
-      setIncludeViewProviders(previousIncludeViewProviders);
-      factory.resolving = false;
-      leaveDI();
-    }
-  }
-  return value;
-}
-function bloomHashBitOrFactory(token) {
-  ngDevMode && assertDefined(token, "token must be defined");
-  if (typeof token === "string") {
-    return token.charCodeAt(0) || 0;
-  }
-  const tokenId = (
-    // First check with `hasOwnProperty` so we don't get an inherited ID.
-    token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : void 0
-  );
-  if (typeof tokenId === "number") {
-    if (tokenId >= 0) {
-      return tokenId & BLOOM_MASK;
-    } else {
-      ngDevMode && assertEqual(tokenId, -1, "Expecting to get Special Injector Id");
-      return createNodeInjector;
-    }
-  } else {
-    return tokenId;
-  }
-}
-function bloomHasToken(bloomHash, injectorIndex, injectorView) {
-  const mask = 1 << bloomHash;
-  const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];
-  return !!(value & mask);
-}
-function shouldSearchParent(flags, isFirstHostTNode) {
-  return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);
-}
-function getNodeInjectorLView(nodeInjector) {
-  return nodeInjector._lView;
-}
-function getNodeInjectorTNode(nodeInjector) {
-  return nodeInjector._tNode;
-}
-var NodeInjector = class {
-  _tNode;
-  _lView;
-  constructor(_tNode, _lView) {
-    this._tNode = _tNode;
-    this._lView = _lView;
-  }
-  get(token, notFoundValue, flags) {
-    return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);
-  }
-};
-function createNodeInjector() {
-  return new NodeInjector(getCurrentTNode(), getLView());
-}
-function ɵɵgetInheritedFactory(type) {
-  return noSideEffects(() => {
-    const ownConstructor = type.prototype.constructor;
-    const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);
-    const objectPrototype = Object.prototype;
-    let parent = Object.getPrototypeOf(type.prototype).constructor;
-    while (parent && parent !== objectPrototype) {
-      const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);
-      if (factory && factory !== ownFactory) {
-        return factory;
-      }
-      parent = Object.getPrototypeOf(parent);
-    }
-    return (t) => new t();
-  });
-}
-function getFactoryOf(type) {
-  if (isForwardRef(type)) {
-    return () => {
-      const factory = getFactoryOf(resolveForwardRef(type));
-      return factory && factory();
-    };
-  }
-  return getFactoryDef(type);
-}
-function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
-  let currentTNode = tNode;
-  let currentLView = lView;
-  while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 && !(currentLView[FLAGS] & 512)) {
-    ngDevMode && assertTNodeForLView(currentTNode, currentLView);
-    const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
-    if (nodeInjectorValue !== NOT_FOUND) {
-      return nodeInjectorValue;
-    }
-    let parentTNode = currentTNode.parent;
-    if (!parentTNode) {
-      const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
-      if (embeddedViewInjector) {
-        const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
-        if (embeddedViewInjectorValue !== NOT_FOUND) {
-          return embeddedViewInjectorValue;
-        }
-      }
-      parentTNode = getTNodeFromLView(currentLView);
-      currentLView = currentLView[DECLARATION_VIEW];
-    }
-    currentTNode = parentTNode;
-  }
-  return notFoundValue;
-}
-function getTNodeFromLView(lView) {
-  const tView = lView[TVIEW];
-  const tViewType = tView.type;
-  if (tViewType === 2) {
-    ngDevMode && assertDefined(tView.declTNode, "Embedded TNodes should have declaration parents.");
-    return tView.declTNode;
-  } else if (tViewType === 1) {
-    return lView[T_HOST];
-  }
-  return null;
-}
-function ɵɵinjectAttribute(attrNameToInject) {
-  return injectAttributeImpl(getCurrentTNode(), attrNameToInject);
-}
-var Attribute2 = makeParamDecorator("Attribute", (attributeName) => ({
-  attributeName,
-  __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName)
-}));
-var _reflect = null;
-function getReflect() {
-  return _reflect = _reflect || new ReflectionCapabilities();
-}
-function reflectDependencies(type) {
-  return convertDependencies(getReflect().parameters(type));
-}
-function convertDependencies(deps) {
-  return deps.map((dep) => reflectDependency(dep));
-}
-function reflectDependency(dep) {
-  const meta = {
-    token: null,
-    attribute: null,
-    host: false,
-    optional: false,
-    self: false,
-    skipSelf: false
-  };
-  if (Array.isArray(dep) && dep.length > 0) {
-    for (let j = 0; j < dep.length; j++) {
-      const param = dep[j];
-      if (param === void 0) {
-        continue;
-      }
-      const proto = Object.getPrototypeOf(param);
-      if (param instanceof Optional || proto.ngMetadataName === "Optional") {
-        meta.optional = true;
-      } else if (param instanceof SkipSelf || proto.ngMetadataName === "SkipSelf") {
-        meta.skipSelf = true;
-      } else if (param instanceof Self || proto.ngMetadataName === "Self") {
-        meta.self = true;
-      } else if (param instanceof Host || proto.ngMetadataName === "Host") {
-        meta.host = true;
-      } else if (param instanceof Inject) {
-        meta.token = param.token;
-      } else if (param instanceof Attribute2) {
-        if (param.attributeName === void 0) {
-          throw new RuntimeError(204, ngDevMode && `Attribute name must be defined.`);
-        }
-        meta.attribute = param.attributeName;
-      } else {
-        meta.token = param;
-      }
-    }
-  } else if (dep === void 0 || Array.isArray(dep) && dep.length === 0) {
-    meta.token = null;
-  } else {
-    meta.token = dep;
-  }
-  return meta;
-}
-function compileInjectable(type, meta) {
-  let ngInjectableDef = null;
-  let ngFactoryDef = null;
-  if (!type.hasOwnProperty(NG_PROV_DEF)) {
-    Object.defineProperty(type, NG_PROV_DEF, {
-      get: () => {
-        if (ngInjectableDef === null) {
-          const compiler = getCompilerFacade({
-            usage: 0,
-            kind: "injectable",
-            type
-          });
-          ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, meta));
-        }
-        return ngInjectableDef;
-      }
-    });
-  }
-  if (!type.hasOwnProperty(NG_FACTORY_DEF)) {
-    Object.defineProperty(type, NG_FACTORY_DEF, {
-      get: () => {
-        if (ngFactoryDef === null) {
-          const compiler = getCompilerFacade({
-            usage: 0,
-            kind: "injectable",
-            type
-          });
-          ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {
-            name: type.name,
-            type,
-            typeArgumentCount: 0,
-            // In JIT mode types are not available nor used.
-            deps: reflectDependencies(type),
-            target: compiler.FactoryTarget.Injectable
-          });
-        }
-        return ngFactoryDef;
-      },
-      // Leave this configurable so that the factories from directives or pipes can take precedence.
-      configurable: true
-    });
-  }
-}
-var USE_VALUE = getClosureSafeProperty({
-  provide: String,
-  useValue: getClosureSafeProperty
-});
-function isUseClassProvider(meta) {
-  return meta.useClass !== void 0;
-}
-function isUseValueProvider(meta) {
-  return USE_VALUE in meta;
-}
-function isUseFactoryProvider(meta) {
-  return meta.useFactory !== void 0;
-}
-function isUseExistingProvider(meta) {
-  return meta.useExisting !== void 0;
-}
-function getInjectableMetadata(type, srcMeta) {
-  const meta = srcMeta || {
-    providedIn: null
-  };
-  const compilerMeta = {
-    name: type.name,
-    type,
-    typeArgumentCount: 0,
-    providedIn: meta.providedIn
-  };
-  if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== void 0) {
-    compilerMeta.deps = convertDependencies(meta.deps);
-  }
-  if (isUseClassProvider(meta)) {
-    compilerMeta.useClass = meta.useClass;
-  } else if (isUseValueProvider(meta)) {
-    compilerMeta.useValue = meta.useValue;
-  } else if (isUseFactoryProvider(meta)) {
-    compilerMeta.useFactory = meta.useFactory;
-  } else if (isUseExistingProvider(meta)) {
-    compilerMeta.useExisting = meta.useExisting;
-  }
-  return compilerMeta;
-}
-var Injectable = makeDecorator("Injectable", void 0, void 0, void 0, (type, meta) => compileInjectable(type, meta));
-function createInjector(defType, parent = null, additionalProviders = null, name) {
-  const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);
-  injector.resolveInjectorInitializers();
-  return injector;
-}
-function createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = /* @__PURE__ */ new Set()) {
-  const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];
-  name = name || (typeof defType === "object" ? void 0 : stringify(defType));
-  return new R3Injector(providers, parent || getNullInjector(), name || null, scopes);
-}
-var Injector = class _Injector {
-  static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
-  static NULL = new NullInjector();
-  static create(options, parent) {
-    if (Array.isArray(options)) {
-      return createInjector({
-        name: ""
-      }, parent, options, "");
-    } else {
-      const name = options.name ?? "";
-      return createInjector({
-        name
-      }, options.parent, options.providers, name);
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _Injector,
-      providedIn: "any",
-      factory: () => ɵɵinject(INJECTOR$1)
-    })
-  );
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = -1;
-};
-var HostAttributeToken = class {
-  attributeName;
-  constructor(attributeName) {
-    this.attributeName = attributeName;
-  }
-  /** @internal */
-  __NG_ELEMENT_ID__ = () => ɵɵinjectAttribute(this.attributeName);
-  toString() {
-    return `HostAttributeToken ${this.attributeName}`;
-  }
-};
-var HOST_TAG_NAME = new InjectionToken(ngDevMode ? "HOST_TAG_NAME" : "");
-HOST_TAG_NAME.__NG_ELEMENT_ID__ = (flags) => {
-  const tNode = getCurrentTNode();
-  if (tNode === null) {
-    throw new RuntimeError(204, ngDevMode && "HOST_TAG_NAME can only be injected in directives and components during construction time (in a class constructor or as a class field initializer)");
-  }
-  if (tNode.type & 2) {
-    return tNode.value;
-  }
-  if (flags & InjectFlags.Optional) {
-    return null;
-  }
-  throw new RuntimeError(204, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. This is invalid, and so the dependency should be marked as optional.`);
-};
-function getDevModeNodeName(tNode) {
-  if (tNode.type & 8) {
-    return "an <ng-container>";
-  } else if (tNode.type & 4) {
-    return "an <ng-template>";
-  } else if (tNode.type & 128) {
-    return "an @let declaration";
-  } else {
-    return "a node";
-  }
-}
-var SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;
-var DestroyRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectDestroyRef;
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ENV_ID__ = (injector) => injector;
-};
-var NodeInjectorDestroyRef = class extends DestroyRef {
-  _lView;
-  constructor(_lView) {
-    super();
-    this._lView = _lView;
-  }
-  onDestroy(callback) {
-    storeLViewOnDestroy(this._lView, callback);
-    return () => removeLViewOnDestroy(this._lView, callback);
-  }
-};
-function injectDestroyRef() {
-  return new NodeInjectorDestroyRef(getLView());
-}
-var ChangeDetectionScheduler = class {
-};
-var ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Zoneless enabled" : "", {
-  providedIn: "root",
-  factory: () => false
-});
-var PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "Zoneless provided" : "", {
-  providedIn: "root",
-  factory: () => false
-});
-var ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "scheduler disabled" : "");
-var SCHEDULE_IN_ROOT_ZONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "run changes outside zone in root" : "");
-var PendingTasksInternal = class _PendingTasksInternal {
-  taskId = 0;
-  pendingTasks = /* @__PURE__ */ new Set();
-  get _hasPendingTasks() {
-    return this.hasPendingTasks.value;
-  }
-  hasPendingTasks = new import_rxjs.BehaviorSubject(false);
-  add() {
-    if (!this._hasPendingTasks) {
-      this.hasPendingTasks.next(true);
-    }
-    const taskId = this.taskId++;
-    this.pendingTasks.add(taskId);
-    return taskId;
-  }
-  has(taskId) {
-    return this.pendingTasks.has(taskId);
-  }
-  remove(taskId) {
-    this.pendingTasks.delete(taskId);
-    if (this.pendingTasks.size === 0 && this._hasPendingTasks) {
-      this.hasPendingTasks.next(false);
-    }
-  }
-  ngOnDestroy() {
-    this.pendingTasks.clear();
-    if (this._hasPendingTasks) {
-      this.hasPendingTasks.next(false);
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _PendingTasksInternal,
-      providedIn: "root",
-      factory: () => new _PendingTasksInternal()
-    })
-  );
-};
-var PendingTasks = class _PendingTasks {
-  internalPendingTasks = inject(PendingTasksInternal);
-  scheduler = inject(ChangeDetectionScheduler);
-  /**
-   * Adds a new task that should block application's stability.
-   * @returns A cleanup function that removes a task when called.
-   */
-  add() {
-    const taskId = this.internalPendingTasks.add();
-    return () => {
-      if (!this.internalPendingTasks.has(taskId)) {
-        return;
-      }
-      this.scheduler.notify(
-        12
-        /* NotificationSource.PendingTaskRemoved */
-      );
-      this.internalPendingTasks.remove(taskId);
-    };
-  }
-  /**
-   * Runs an asynchronous function and blocks the application's stability until the function completes.
-   *
-   * ```
-   * pendingTasks.run(async () => {
-   *   const userData = await fetch('/api/user');
-   *   this.userData.set(userData);
-   * });
-   * ```
-   *
-   * Application stability is at least delayed until the next tick after the `run` method resolves
-   * so it is safe to make additional updates to application state that would require UI synchronization:
-   *
-   * ```
-   * const userData = await pendingTasks.run(() => fetch('/api/user'));
-   * this.userData.set(userData);
-   * ```
-   *
-   * @param fn The asynchronous function to execute
-   */
-  run(fn) {
-    return __async(this, null, function* () {
-      const removeTask = this.add();
-      try {
-        return yield fn();
-      } finally {
-        removeTask();
-      }
-    });
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _PendingTasks,
-      providedIn: "root",
-      factory: () => new _PendingTasks()
-    })
-  );
-};
-var EventEmitter_ = class extends import_rxjs.Subject {
-  __isAsync;
-  // tslint:disable-line
-  destroyRef = void 0;
-  pendingTasks = void 0;
-  constructor(isAsync = false) {
-    super();
-    this.__isAsync = isAsync;
-    if (isInInjectionContext()) {
-      this.destroyRef = inject(DestroyRef, {
-        optional: true
-      }) ?? void 0;
-      this.pendingTasks = inject(PendingTasksInternal, {
-        optional: true
-      }) ?? void 0;
-    }
-  }
-  emit(value) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      super.next(value);
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-  subscribe(observerOrNext, error, complete) {
-    let nextFn = observerOrNext;
-    let errorFn = error || (() => null);
-    let completeFn = complete;
-    if (observerOrNext && typeof observerOrNext === "object") {
-      const observer = observerOrNext;
-      nextFn = observer.next?.bind(observer);
-      errorFn = observer.error?.bind(observer);
-      completeFn = observer.complete?.bind(observer);
-    }
-    if (this.__isAsync) {
-      errorFn = this.wrapInTimeout(errorFn);
-      if (nextFn) {
-        nextFn = this.wrapInTimeout(nextFn);
-      }
-      if (completeFn) {
-        completeFn = this.wrapInTimeout(completeFn);
-      }
-    }
-    const sink = super.subscribe({
-      next: nextFn,
-      error: errorFn,
-      complete: completeFn
-    });
-    if (observerOrNext instanceof import_rxjs.Subscription) {
-      observerOrNext.add(sink);
-    }
-    return sink;
-  }
-  wrapInTimeout(fn) {
-    return (value) => {
-      const taskId = this.pendingTasks?.add();
-      setTimeout(() => {
-        fn(value);
-        if (taskId !== void 0) {
-          this.pendingTasks?.remove(taskId);
-        }
-      });
-    };
-  }
-};
-var EventEmitter = EventEmitter_;
-function noop(...args) {
-}
-function scheduleCallbackWithRafRace(callback) {
-  let timeoutId;
-  let animationFrameId;
-  function cleanup() {
-    callback = noop;
-    try {
-      if (animationFrameId !== void 0 && typeof cancelAnimationFrame === "function") {
-        cancelAnimationFrame(animationFrameId);
-      }
-      if (timeoutId !== void 0) {
-        clearTimeout(timeoutId);
-      }
-    } catch {
-    }
-  }
-  timeoutId = setTimeout(() => {
-    callback();
-    cleanup();
-  });
-  if (typeof requestAnimationFrame === "function") {
-    animationFrameId = requestAnimationFrame(() => {
-      callback();
-      cleanup();
-    });
-  }
-  return () => cleanup();
-}
-function scheduleCallbackWithMicrotask(callback) {
-  queueMicrotask(() => callback());
-  return () => {
-    callback = noop;
-  };
-}
-var AsyncStackTaggingZoneSpec = class {
-  createTask;
-  constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {
-    this.name = "asyncStackTagging for " + namePrefix;
-    this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);
-  }
-  // ZoneSpec implementation below.
-  name;
-  onScheduleTask(delegate, _current, target, task) {
-    task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);
-    return delegate.scheduleTask(target, task);
-  }
-  onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {
-    let ret;
-    if (task.consoleTask) {
-      ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));
-    } else {
-      ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);
-    }
-    return ret;
-  }
-};
-var isAngularZoneProperty = "isAngularZone";
-var angularZoneInstanceIdProperty = isAngularZoneProperty + "_ID";
-var ngZoneInstanceId = 0;
-var NgZone = class _NgZone {
-  hasPendingMacrotasks = false;
-  hasPendingMicrotasks = false;
-  /**
-   * Whether there are no outstanding microtasks or macrotasks.
-   */
-  isStable = true;
-  /**
-   * Notifies when code enters Angular Zone. This gets fired first on VM Turn.
-   */
-  onUnstable = new EventEmitter(false);
-  /**
-   * Notifies when there is no more microtasks enqueued in the current VM Turn.
-   * This is a hint for Angular to do change detection, which may enqueue more microtasks.
-   * For this reason this event can fire multiple times per VM Turn.
-   */
-  onMicrotaskEmpty = new EventEmitter(false);
-  /**
-   * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
-   * implies we are about to relinquish VM turn.
-   * This event gets called just once.
-   */
-  onStable = new EventEmitter(false);
-  /**
-   * Notifies that an error has been delivered.
-   */
-  onError = new EventEmitter(false);
-  constructor(options) {
-    const {
-      enableLongStackTrace = false,
-      shouldCoalesceEventChangeDetection = false,
-      shouldCoalesceRunChangeDetection = false,
-      scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT
-    } = options;
-    if (typeof Zone == "undefined") {
-      throw new RuntimeError(908, ngDevMode && `In this configuration Angular requires Zone.js`);
-    }
-    Zone.assertZonePatched();
-    const self = this;
-    self._nesting = 0;
-    self._outer = self._inner = Zone.current;
-    if (ngDevMode) {
-      self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec("Angular"));
-    }
-    if (Zone["TaskTrackingZoneSpec"]) {
-      self._inner = self._inner.fork(new Zone["TaskTrackingZoneSpec"]());
-    }
-    if (enableLongStackTrace && Zone["longStackTraceZoneSpec"]) {
-      self._inner = self._inner.fork(Zone["longStackTraceZoneSpec"]);
-    }
-    self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
-    self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
-    self.callbackScheduled = false;
-    self.scheduleInRootZone = scheduleInRootZone;
-    forkInnerZoneWithAngularBehavior(self);
-  }
-  /**
-    This method checks whether the method call happens within an Angular Zone instance.
-  */
-  static isInAngularZone() {
-    return typeof Zone !== "undefined" && Zone.current.get(isAngularZoneProperty) === true;
-  }
-  /**
-    Assures that the method is called within the Angular Zone, otherwise throws an error.
-  */
-  static assertInAngularZone() {
-    if (!_NgZone.isInAngularZone()) {
-      throw new RuntimeError(909, ngDevMode && "Expected to be in Angular Zone, but it is not!");
-    }
-  }
-  /**
-    Assures that the method is called outside of the Angular Zone, otherwise throws an error.
-  */
-  static assertNotInAngularZone() {
-    if (_NgZone.isInAngularZone()) {
-      throw new RuntimeError(909, ngDevMode && "Expected to not be in Angular Zone, but it is!");
-    }
-  }
-  /**
-   * Executes the `fn` function synchronously within the Angular zone and returns value returned by
-   * the function.
-   *
-   * Running functions via `run` allows you to reenter Angular zone from a task that was executed
-   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * within the Angular zone.
-   *
-   * If a synchronous error happens it will be rethrown and not reported via `onError`.
-   */
-  run(fn, applyThis, applyArgs) {
-    return this._inner.run(fn, applyThis, applyArgs);
-  }
-  /**
-   * Executes the `fn` function synchronously within the Angular zone as a task and returns value
-   * returned by the function.
-   *
-   * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed
-   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * within the Angular zone.
-   *
-   * If a synchronous error happens it will be rethrown and not reported via `onError`.
-   */
-  runTask(fn, applyThis, applyArgs, name) {
-    const zone = this._inner;
-    const task = zone.scheduleEventTask("NgZoneEvent: " + name, fn, EMPTY_PAYLOAD, noop, noop);
-    try {
-      return zone.runTask(task, applyThis, applyArgs);
-    } finally {
-      zone.cancelTask(task);
-    }
-  }
-  /**
-   * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
-   * rethrown.
-   */
-  runGuarded(fn, applyThis, applyArgs) {
-    return this._inner.runGuarded(fn, applyThis, applyArgs);
-  }
-  /**
-   * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
-   * the function.
-   *
-   * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
-   * work that
-   * doesn't trigger Angular change-detection or is subject to Angular's error handling.
-   *
-   * Any future tasks or microtasks scheduled from within this function will continue executing from
-   * outside of the Angular zone.
-   *
-   * Use {@link #run} to reenter the Angular zone and do work that updates the application model.
-   */
-  runOutsideAngular(fn) {
-    return this._outer.run(fn);
-  }
-};
-var EMPTY_PAYLOAD = {};
-function checkStable(zone) {
-  if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
-    try {
-      zone._nesting++;
-      zone.onMicrotaskEmpty.emit(null);
-    } finally {
-      zone._nesting--;
-      if (!zone.hasPendingMicrotasks) {
-        try {
-          zone.runOutsideAngular(() => zone.onStable.emit(null));
-        } finally {
-          zone.isStable = true;
-        }
-      }
-    }
-  }
-}
-function delayChangeDetectionForEvents(zone) {
-  if (zone.isCheckStableRunning || zone.callbackScheduled) {
-    return;
-  }
-  zone.callbackScheduled = true;
-  function scheduleCheckStable() {
-    scheduleCallbackWithRafRace(() => {
-      zone.callbackScheduled = false;
-      updateMicroTaskStatus(zone);
-      zone.isCheckStableRunning = true;
-      checkStable(zone);
-      zone.isCheckStableRunning = false;
-    });
-  }
-  if (zone.scheduleInRootZone) {
-    Zone.root.run(() => {
-      scheduleCheckStable();
-    });
-  } else {
-    zone._outer.run(() => {
-      scheduleCheckStable();
-    });
-  }
-  updateMicroTaskStatus(zone);
-}
-function forkInnerZoneWithAngularBehavior(zone) {
-  const delayChangeDetectionForEventsDelegate = () => {
-    delayChangeDetectionForEvents(zone);
-  };
-  const instanceId = ngZoneInstanceId++;
-  zone._inner = zone._inner.fork({
-    name: "angular",
-    properties: {
-      [isAngularZoneProperty]: true,
-      [angularZoneInstanceIdProperty]: instanceId,
-      [angularZoneInstanceIdProperty + instanceId]: true
-    },
-    onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {
-      if (shouldBeIgnoredByZone(applyArgs)) {
-        return delegate.invokeTask(target, task, applyThis, applyArgs);
-      }
-      try {
-        onEnter(zone);
-        return delegate.invokeTask(target, task, applyThis, applyArgs);
-      } finally {
-        if (zone.shouldCoalesceEventChangeDetection && task.type === "eventTask" || zone.shouldCoalesceRunChangeDetection) {
-          delayChangeDetectionForEventsDelegate();
-        }
-        onLeave(zone);
-      }
-    },
-    onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {
-      try {
-        onEnter(zone);
-        return delegate.invoke(target, callback, applyThis, applyArgs, source);
-      } finally {
-        if (zone.shouldCoalesceRunChangeDetection && // Do not delay change detection when the task is the scheduler's tick.
-        // We need to synchronously trigger the stability logic so that the
-        // zone-based scheduler can prevent a duplicate ApplicationRef.tick
-        // by first checking if the scheduler tick is running. This does seem a bit roundabout,
-        // but we _do_ still want to trigger all the correct events when we exit the zone.run
-        // (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which
-        // relies on these events happening after change detection runs).
-        // Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate
-        // but is added here as well to prevent reads of applyArgs when not necessary
-        !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {
-          delayChangeDetectionForEventsDelegate();
-        }
-        onLeave(zone);
-      }
-    },
-    onHasTask: (delegate, current, target, hasTaskState) => {
-      delegate.hasTask(target, hasTaskState);
-      if (current === target) {
-        if (hasTaskState.change == "microTask") {
-          zone._hasPendingMicrotasks = hasTaskState.microTask;
-          updateMicroTaskStatus(zone);
-          checkStable(zone);
-        } else if (hasTaskState.change == "macroTask") {
-          zone.hasPendingMacrotasks = hasTaskState.macroTask;
-        }
-      }
-    },
-    onHandleError: (delegate, current, target, error) => {
-      delegate.handleError(target, error);
-      zone.runOutsideAngular(() => zone.onError.emit(error));
-      return false;
-    }
-  });
-}
-function updateMicroTaskStatus(zone) {
-  if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {
-    zone.hasPendingMicrotasks = true;
-  } else {
-    zone.hasPendingMicrotasks = false;
-  }
-}
-function onEnter(zone) {
-  zone._nesting++;
-  if (zone.isStable) {
-    zone.isStable = false;
-    zone.onUnstable.emit(null);
-  }
-}
-function onLeave(zone) {
-  zone._nesting--;
-  checkStable(zone);
-}
-var NoopNgZone = class {
-  hasPendingMicrotasks = false;
-  hasPendingMacrotasks = false;
-  isStable = true;
-  onUnstable = new EventEmitter();
-  onMicrotaskEmpty = new EventEmitter();
-  onStable = new EventEmitter();
-  onError = new EventEmitter();
-  run(fn, applyThis, applyArgs) {
-    return fn.apply(applyThis, applyArgs);
-  }
-  runGuarded(fn, applyThis, applyArgs) {
-    return fn.apply(applyThis, applyArgs);
-  }
-  runOutsideAngular(fn) {
-    return fn();
-  }
-  runTask(fn, applyThis, applyArgs, name) {
-    return fn.apply(applyThis, applyArgs);
-  }
-};
-function shouldBeIgnoredByZone(applyArgs) {
-  return hasApplyArgsData(applyArgs, "__ignore_ng_zone__");
-}
-function isSchedulerTick(applyArgs) {
-  return hasApplyArgsData(applyArgs, "__scheduler_tick__");
-}
-function hasApplyArgsData(applyArgs, key) {
-  if (!Array.isArray(applyArgs)) {
-    return false;
-  }
-  if (applyArgs.length !== 1) {
-    return false;
-  }
-  return applyArgs[0]?.data?.[key] === true;
-}
-function getNgZone(ngZoneToUse = "zone.js", options) {
-  if (ngZoneToUse === "noop") {
-    return new NoopNgZone();
-  }
-  if (ngZoneToUse === "zone.js") {
-    return new NgZone(options);
-  }
-  return ngZoneToUse;
-}
-var ErrorHandler = class {
-  /**
-   * @internal
-   */
-  _console = console;
-  handleError(error) {
-    this._console.error("ERROR", error);
-  }
-};
-var INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "internal error handler" : "", {
-  providedIn: "root",
-  factory: () => {
-    const zone = inject(NgZone);
-    const userErrorHandler = inject(ErrorHandler);
-    return (e) => zone.runOutsideAngular(() => userErrorHandler.handleError(e));
-  }
-});
-var OutputEmitterRef = class {
-  destroyed = false;
-  listeners = null;
-  errorHandler = inject(ErrorHandler, {
-    optional: true
-  });
-  /** @internal */
-  destroyRef = inject(DestroyRef);
-  constructor() {
-    this.destroyRef.onDestroy(() => {
-      this.destroyed = true;
-      this.listeners = null;
-    });
-  }
-  subscribe(callback) {
-    if (this.destroyed) {
-      throw new RuntimeError(953, ngDevMode && "Unexpected subscription to destroyed `OutputRef`. The owning directive/component is destroyed.");
-    }
-    (this.listeners ??= []).push(callback);
-    return {
-      unsubscribe: () => {
-        const idx = this.listeners?.indexOf(callback);
-        if (idx !== void 0 && idx !== -1) {
-          this.listeners?.splice(idx, 1);
-        }
-      }
-    };
-  }
-  /** Emits a new value to the output. */
-  emit(value) {
-    if (this.destroyed) {
-      throw new RuntimeError(953, ngDevMode && "Unexpected emit for destroyed `OutputRef`. The owning directive/component is destroyed.");
-    }
-    if (this.listeners === null) {
-      return;
-    }
-    const previousConsumer = setActiveConsumer(null);
-    try {
-      for (const listenerFn of this.listeners) {
-        try {
-          listenerFn(value);
-        } catch (err) {
-          this.errorHandler?.handleError(err);
-        }
-      }
-    } finally {
-      setActiveConsumer(previousConsumer);
-    }
-  }
-};
-function getOutputDestroyRef(ref) {
-  return ref.destroyRef;
-}
-function output(opts) {
-  ngDevMode && assertInInjectionContext(output);
-  return new OutputEmitterRef();
-}
-function inputFunction(initialValue, opts) {
-  ngDevMode && assertInInjectionContext(input);
-  return createInputSignal(initialValue, opts);
-}
-function inputRequiredFunction(opts) {
-  ngDevMode && assertInInjectionContext(input);
-  return createInputSignal(REQUIRED_UNSET_VALUE, opts);
-}
-var input = (() => {
-  inputFunction.required = inputRequiredFunction;
-  return inputFunction;
-})();
-function injectElementRef() {
-  return createElementRef(getCurrentTNode(), getLView());
-}
-function createElementRef(tNode, lView) {
-  return new ElementRef(getNativeByTNode(tNode, lView));
-}
-var ElementRef = class {
-  /**
-   * <div class="callout is-critical">
-   *   <header>Use with caution</header>
-   *   <p>
-   *    Use this API as the last resort when direct access to DOM is needed. Use templating and
-   *    data-binding provided by Angular instead. Alternatively you can take a look at
-   *    {@link Renderer2} which provides an API that can be safely used.
-   *   </p>
-   * </div>
-   */
-  nativeElement;
-  constructor(nativeElement) {
-    this.nativeElement = nativeElement;
-  }
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectElementRef;
-};
-function unwrapElementRef(value) {
-  return value instanceof ElementRef ? value.nativeElement : value;
-}
-function symbolIterator() {
-  return this._results[Symbol.iterator]();
-}
-var QueryList = class {
-  _emitDistinctChangesOnly;
-  dirty = true;
-  _onDirty = void 0;
-  _results = [];
-  _changesDetected = false;
-  _changes = void 0;
-  length = 0;
-  first = void 0;
-  last = void 0;
-  /**
-   * Returns `Observable` of `QueryList` notifying the subscriber of changes.
-   */
-  get changes() {
-    return this._changes ??= new import_rxjs.Subject();
-  }
-  /**
-   * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change
-   *     has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in
-   *     the same result)
-   */
-  constructor(_emitDistinctChangesOnly = false) {
-    this._emitDistinctChangesOnly = _emitDistinctChangesOnly;
-  }
-  /**
-   * Returns the QueryList entry at `index`.
-   */
-  get(index) {
-    return this._results[index];
-  }
-  /**
-   * See
-   * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
-   */
-  map(fn) {
-    return this._results.map(fn);
-  }
-  filter(fn) {
-    return this._results.filter(fn);
-  }
-  /**
-   * See
-   * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
-   */
-  find(fn) {
-    return this._results.find(fn);
-  }
-  /**
-   * See
-   * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
-   */
-  reduce(fn, init) {
-    return this._results.reduce(fn, init);
-  }
-  /**
-   * See
-   * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
-   */
-  forEach(fn) {
-    this._results.forEach(fn);
-  }
-  /**
-   * See
-   * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
-   */
-  some(fn) {
-    return this._results.some(fn);
-  }
-  /**
-   * Returns a copy of the internal results list as an Array.
-   */
-  toArray() {
-    return this._results.slice();
-  }
-  toString() {
-    return this._results.toString();
-  }
-  /**
-   * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that
-   * on change detection, it will not notify of changes to the queries, unless a new change
-   * occurs.
-   *
-   * @param resultsTree The query results to store
-   * @param identityAccessor Optional function for extracting stable object identity from a value
-   *    in the array. This function is executed for each element of the query result list while
-   *    comparing current query list with the new one (provided as a first argument of the `reset`
-   *    function) to detect if the lists are different. If the function is not provided, elements
-   *    are compared as is (without any pre-processing).
-   */
-  reset(resultsTree, identityAccessor) {
-    this.dirty = false;
-    const newResultFlat = flatten(resultsTree);
-    if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {
-      this._results = newResultFlat;
-      this.length = newResultFlat.length;
-      this.last = newResultFlat[this.length - 1];
-      this.first = newResultFlat[0];
-    }
-  }
-  /**
-   * Triggers a change event by emitting on the `changes` {@link EventEmitter}.
-   */
-  notifyOnChanges() {
-    if (this._changes !== void 0 && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);
-  }
-  /** @internal */
-  onDirty(cb) {
-    this._onDirty = cb;
-  }
-  /** internal */
-  setDirty() {
-    this.dirty = true;
-    this._onDirty?.();
-  }
-  /** internal */
-  destroy() {
-    if (this._changes !== void 0) {
-      this._changes.complete();
-      this._changes.unsubscribe();
-    }
-  }
-  [Symbol.iterator] = /* @__PURE__ */ (() => symbolIterator)();
-};
-var SKIP_HYDRATION_ATTR_NAME = "ngSkipHydration";
-var SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = "ngskiphydration";
-function hasSkipHydrationAttrOnTNode(tNode) {
-  const attrs = tNode.mergedAttrs;
-  if (attrs === null) return false;
-  for (let i = 0; i < attrs.length; i += 2) {
-    const value = attrs[i];
-    if (typeof value === "number") return false;
-    if (typeof value === "string" && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {
-      return true;
-    }
-  }
-  return false;
-}
-function hasSkipHydrationAttrOnRElement(rNode) {
-  return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);
-}
-function hasInSkipHydrationBlockFlag(tNode) {
-  return (tNode.flags & 128) === 128;
-}
-function isInSkipHydrationBlock(tNode) {
-  if (hasInSkipHydrationBlockFlag(tNode)) {
-    return true;
-  }
-  let currentTNode = tNode.parent;
-  while (currentTNode) {
-    if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {
-      return true;
-    }
-    currentTNode = currentTNode.parent;
-  }
-  return false;
-}
-function isI18nInSkipHydrationBlock(parentTNode) {
-  return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);
-}
-var ChangeDetectionStrategy;
-(function(ChangeDetectionStrategy2) {
-  ChangeDetectionStrategy2[ChangeDetectionStrategy2["OnPush"] = 0] = "OnPush";
-  ChangeDetectionStrategy2[ChangeDetectionStrategy2["Default"] = 1] = "Default";
-})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
-var TRACKED_LVIEWS = /* @__PURE__ */ new Map();
-var uniqueIdCounter = 0;
-function getUniqueLViewId() {
-  return uniqueIdCounter++;
-}
-function registerLView(lView) {
-  ngDevMode && assertNumber(lView[ID], "LView must have an ID in order to be registered");
-  TRACKED_LVIEWS.set(lView[ID], lView);
-}
-function getLViewById(id) {
-  ngDevMode && assertNumber(id, "ID used for LView lookup must be a number");
-  return TRACKED_LVIEWS.get(id) || null;
-}
-function unregisterLView(lView) {
-  ngDevMode && assertNumber(lView[ID], "Cannot stop tracking an LView that does not have an ID");
-  TRACKED_LVIEWS.delete(lView[ID]);
-}
-function getTrackedLViews() {
-  return TRACKED_LVIEWS;
-}
-var LContext = class {
-  lViewId;
-  nodeIndex;
-  native;
-  /**
-   * The instance of the Component node.
-   */
-  component;
-  /**
-   * The list of active directives that exist on this element.
-   */
-  directives;
-  /**
-   * The map of local references (local reference name => element or directive instance) that
-   * exist on this element.
-   */
-  localRefs;
-  /** Component's parent view data. */
-  get lView() {
-    return getLViewById(this.lViewId);
-  }
-  constructor(lViewId, nodeIndex, native) {
-    this.lViewId = lViewId;
-    this.nodeIndex = nodeIndex;
-    this.native = native;
-  }
-};
-function getLContext(target) {
-  let mpValue = readPatchedData(target);
-  if (mpValue) {
-    if (isLView(mpValue)) {
-      const lView = mpValue;
-      let nodeIndex;
-      let component = void 0;
-      let directives = void 0;
-      if (isComponentInstance(target)) {
-        nodeIndex = findViaComponent(lView, target);
-        if (nodeIndex == -1) {
-          throw new Error("The provided component was not found in the application");
-        }
-        component = target;
-      } else if (isDirectiveInstance(target)) {
-        nodeIndex = findViaDirective(lView, target);
-        if (nodeIndex == -1) {
-          throw new Error("The provided directive was not found in the application");
-        }
-        directives = getDirectivesAtNodeIndex(nodeIndex, lView);
-      } else {
-        nodeIndex = findViaNativeElement(lView, target);
-        if (nodeIndex == -1) {
-          return null;
-        }
-      }
-      const native = unwrapRNode(lView[nodeIndex]);
-      const existingCtx = readPatchedData(native);
-      const context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);
-      if (component && context.component === void 0) {
-        context.component = component;
-        attachPatchData(context.component, context);
-      }
-      if (directives && context.directives === void 0) {
-        context.directives = directives;
-        for (let i = 0; i < directives.length; i++) {
-          attachPatchData(directives[i], context);
-        }
-      }
-      attachPatchData(context.native, context);
-      mpValue = context;
-    }
-  } else {
-    const rElement = target;
-    ngDevMode && assertDomNode(rElement);
-    let parent = rElement;
-    while (parent = parent.parentNode) {
-      const parentContext = readPatchedData(parent);
-      if (parentContext) {
-        const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
-        if (!lView) {
-          return null;
-        }
-        const index = findViaNativeElement(lView, rElement);
-        if (index >= 0) {
-          const native = unwrapRNode(lView[index]);
-          const context = createLContext(lView, index, native);
-          attachPatchData(native, context);
-          mpValue = context;
-          break;
-        }
-      }
-    }
-  }
-  return mpValue || null;
-}
-function createLContext(lView, nodeIndex, native) {
-  return new LContext(lView[ID], nodeIndex, native);
-}
-function getComponentViewByInstance(componentInstance) {
-  let patchedData = readPatchedData(componentInstance);
-  let lView;
-  if (isLView(patchedData)) {
-    const contextLView = patchedData;
-    const nodeIndex = findViaComponent(contextLView, componentInstance);
-    lView = getComponentLViewByIndex(nodeIndex, contextLView);
-    const context = createLContext(contextLView, nodeIndex, lView[HOST]);
-    context.component = componentInstance;
-    attachPatchData(componentInstance, context);
-    attachPatchData(context.native, context);
-  } else {
-    const context = patchedData;
-    const contextLView = context.lView;
-    ngDevMode && assertLView(contextLView);
-    lView = getComponentLViewByIndex(context.nodeIndex, contextLView);
-  }
-  return lView;
-}
-var MONKEY_PATCH_KEY_NAME = "__ngContext__";
-function attachPatchData(target, data) {
-  ngDevMode && assertDefined(target, "Target expected");
-  if (isLView(data)) {
-    target[MONKEY_PATCH_KEY_NAME] = data[ID];
-    registerLView(data);
-  } else {
-    target[MONKEY_PATCH_KEY_NAME] = data;
-  }
-}
-function readPatchedData(target) {
-  ngDevMode && assertDefined(target, "Target expected");
-  const data = target[MONKEY_PATCH_KEY_NAME];
-  return typeof data === "number" ? getLViewById(data) : data || null;
-}
-function readPatchedLView(target) {
-  const value = readPatchedData(target);
-  if (value) {
-    return isLView(value) ? value : value.lView;
-  }
-  return null;
-}
-function isComponentInstance(instance) {
-  return instance && instance.constructor && instance.constructor.ɵcmp;
-}
-function isDirectiveInstance(instance) {
-  return instance && instance.constructor && instance.constructor.ɵdir;
-}
-function findViaNativeElement(lView, target) {
-  const tView = lView[TVIEW];
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    if (unwrapRNode(lView[i]) === target) {
-      return i;
-    }
-  }
-  return -1;
-}
-function traverseNextElement(tNode) {
-  if (tNode.child) {
-    return tNode.child;
-  } else if (tNode.next) {
-    return tNode.next;
-  } else {
-    while (tNode.parent && !tNode.parent.next) {
-      tNode = tNode.parent;
-    }
-    return tNode.parent && tNode.parent.next;
-  }
-}
-function findViaComponent(lView, componentInstance) {
-  const componentIndices = lView[TVIEW].components;
-  if (componentIndices) {
-    for (let i = 0; i < componentIndices.length; i++) {
-      const elementComponentIndex = componentIndices[i];
-      const componentView = getComponentLViewByIndex(elementComponentIndex, lView);
-      if (componentView[CONTEXT] === componentInstance) {
-        return elementComponentIndex;
-      }
-    }
-  } else {
-    const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);
-    const rootComponent = rootComponentView[CONTEXT];
-    if (rootComponent === componentInstance) {
-      return HEADER_OFFSET;
-    }
-  }
-  return -1;
-}
-function findViaDirective(lView, directiveInstance) {
-  let tNode = lView[TVIEW].firstChild;
-  while (tNode) {
-    const directiveIndexStart = tNode.directiveStart;
-    const directiveIndexEnd = tNode.directiveEnd;
-    for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {
-      if (lView[i] === directiveInstance) {
-        return tNode.index;
-      }
-    }
-    tNode = traverseNextElement(tNode);
-  }
-  return -1;
-}
-function getDirectivesAtNodeIndex(nodeIndex, lView) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  if (tNode.directiveStart === 0) return EMPTY_ARRAY;
-  const results = [];
-  for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
-    const directiveInstance = lView[i];
-    if (!isComponentInstance(directiveInstance)) {
-      results.push(directiveInstance);
-    }
-  }
-  return results;
-}
-function getComponentAtNodeIndex(nodeIndex, lView) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  const {
-    directiveStart,
-    componentOffset
-  } = tNode;
-  return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;
-}
-function discoverLocalRefs(lView, nodeIndex) {
-  const tNode = lView[TVIEW].data[nodeIndex];
-  if (tNode && tNode.localNames) {
-    const result = {};
-    let localIndex = tNode.index + 1;
-    for (let i = 0; i < tNode.localNames.length; i += 2) {
-      result[tNode.localNames[i]] = lView[localIndex];
-      localIndex++;
-    }
-    return result;
-  }
-  return null;
-}
-function getRootView(componentOrLView) {
-  ngDevMode && assertDefined(componentOrLView, "component");
-  let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);
-  while (lView && !(lView[FLAGS] & 512)) {
-    lView = getLViewParent(lView);
-  }
-  ngDevMode && assertLView(lView);
-  return lView;
-}
-function getRootContext(viewOrComponent) {
-  const rootView = getRootView(viewOrComponent);
-  ngDevMode && assertDefined(rootView[CONTEXT], "Root view has no context. Perhaps it is disconnected?");
-  return rootView[CONTEXT];
-}
-function getFirstLContainer(lView) {
-  return getNearestLContainer(lView[CHILD_HEAD]);
-}
-function getNextLContainer(container) {
-  return getNearestLContainer(container[NEXT]);
-}
-function getNearestLContainer(viewOrContainer) {
-  while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
-    viewOrContainer = viewOrContainer[NEXT];
-  }
-  return viewOrContainer;
-}
-function getComponent(element) {
-  ngDevMode && assertDomElement(element);
-  const context = getLContext(element);
-  if (context === null) return null;
-  if (context.component === void 0) {
-    const lView = context.lView;
-    if (lView === null) {
-      return null;
-    }
-    context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
-  }
-  return context.component;
-}
-function getContext(element) {
-  assertDomElement(element);
-  const context = getLContext(element);
-  const lView = context ? context.lView : null;
-  return lView === null ? null : lView[CONTEXT];
-}
-function getOwningComponent(elementOrDir) {
-  const context = getLContext(elementOrDir);
-  let lView = context ? context.lView : null;
-  if (lView === null) return null;
-  let parent;
-  while (lView[TVIEW].type === 2 && (parent = getLViewParent(lView))) {
-    lView = parent;
-  }
-  return lView[FLAGS] & 512 ? null : lView[CONTEXT];
-}
-function getRootComponents(elementOrDir) {
-  const lView = readPatchedLView(elementOrDir);
-  return lView !== null ? [getRootContext(lView)] : [];
-}
-function getInjector(elementOrDir) {
-  const context = getLContext(elementOrDir);
-  const lView = context ? context.lView : null;
-  if (lView === null) return Injector.NULL;
-  const tNode = lView[TVIEW].data[context.nodeIndex];
-  return new NodeInjector(tNode, lView);
-}
-function getInjectionTokens(element) {
-  const context = getLContext(element);
-  const lView = context ? context.lView : null;
-  if (lView === null) return [];
-  const tView = lView[TVIEW];
-  const tNode = tView.data[context.nodeIndex];
-  const providerTokens = [];
-  const startIndex = tNode.providerIndexes & 1048575;
-  const endIndex = tNode.directiveEnd;
-  for (let i = startIndex; i < endIndex; i++) {
-    let value = tView.data[i];
-    if (isDirectiveDefHack(value)) {
-      value = value.type;
-    }
-    providerTokens.push(value);
-  }
-  return providerTokens;
-}
-function getDirectives(node) {
-  if (node instanceof Text) {
-    return [];
-  }
-  const context = getLContext(node);
-  const lView = context ? context.lView : null;
-  if (lView === null) {
-    return [];
-  }
-  const tView = lView[TVIEW];
-  const nodeIndex = context.nodeIndex;
-  if (!tView?.data[nodeIndex]) {
-    return [];
-  }
-  if (context.directives === void 0) {
-    context.directives = getDirectivesAtNodeIndex(nodeIndex, lView);
-  }
-  return context.directives === null ? [] : [...context.directives];
-}
-function getDirectiveMetadata$1(directiveOrComponentInstance) {
-  const {
-    constructor
-  } = directiveOrComponentInstance;
-  if (!constructor) {
-    throw new Error("Unable to find the instance constructor");
-  }
-  const componentDef = getComponentDef(constructor);
-  if (componentDef) {
-    const inputs = extractInputDebugMetadata(componentDef.inputs);
-    return {
-      inputs,
-      outputs: componentDef.outputs,
-      encapsulation: componentDef.encapsulation,
-      changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Default
-    };
-  }
-  const directiveDef = getDirectiveDef(constructor);
-  if (directiveDef) {
-    const inputs = extractInputDebugMetadata(directiveDef.inputs);
-    return {
-      inputs,
-      outputs: directiveDef.outputs
-    };
-  }
-  return null;
-}
-function getLocalRefs(target) {
-  const context = getLContext(target);
-  if (context === null) return {};
-  if (context.localRefs === void 0) {
-    const lView = context.lView;
-    if (lView === null) {
-      return {};
-    }
-    context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
-  }
-  return context.localRefs || {};
-}
-function getHostElement(componentOrDirective) {
-  return getLContext(componentOrDirective).native;
-}
-function getListeners(element) {
-  ngDevMode && assertDomElement(element);
-  const lContext = getLContext(element);
-  const lView = lContext === null ? null : lContext.lView;
-  if (lView === null) return [];
-  const tView = lView[TVIEW];
-  const lCleanup = lView[CLEANUP];
-  const tCleanup = tView.cleanup;
-  const listeners = [];
-  if (tCleanup && lCleanup) {
-    for (let i = 0; i < tCleanup.length; ) {
-      const firstParam = tCleanup[i++];
-      const secondParam = tCleanup[i++];
-      if (typeof firstParam === "string") {
-        const name = firstParam;
-        const listenerElement = unwrapRNode(lView[secondParam]);
-        const callback = lCleanup[tCleanup[i++]];
-        const useCaptureOrIndx = tCleanup[i++];
-        const type = typeof useCaptureOrIndx === "boolean" || useCaptureOrIndx >= 0 ? "dom" : "output";
-        const useCapture = typeof useCaptureOrIndx === "boolean" ? useCaptureOrIndx : false;
-        if (element == listenerElement) {
-          listeners.push({
-            element,
-            name,
-            callback,
-            useCapture,
-            type
-          });
-        }
-      }
-    }
-  }
-  listeners.sort(sortListeners);
-  return listeners;
-}
-function sortListeners(a, b) {
-  if (a.name == b.name) return 0;
-  return a.name < b.name ? -1 : 1;
-}
-function isDirectiveDefHack(obj) {
-  return obj.type !== void 0 && obj.declaredInputs !== void 0 && obj.findHostDirectiveDefs !== void 0;
-}
-function assertDomElement(value) {
-  if (typeof Element !== "undefined" && !(value instanceof Element)) {
-    throw new Error("Expecting instance of DOM Element");
-  }
-}
-function extractInputDebugMetadata(inputs) {
-  const res = {};
-  for (const key in inputs) {
-    if (!inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    const value = inputs[key];
-    if (value === void 0) {
-      continue;
-    }
-    let minifiedName;
-    if (Array.isArray(value)) {
-      minifiedName = value[0];
-    } else {
-      minifiedName = value;
-    }
-    res[key] = minifiedName;
-  }
-  return res;
-}
-var DOCUMENT = void 0;
-function setDocument(document2) {
-  DOCUMENT = document2;
-}
-function getDocument() {
-  if (DOCUMENT !== void 0) {
-    return DOCUMENT;
-  } else if (typeof document !== "undefined") {
-    return document;
-  }
-  throw new RuntimeError(210, (typeof ngDevMode === "undefined" || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);
-}
-var APP_ID = new InjectionToken(ngDevMode ? "AppId" : "", {
-  providedIn: "root",
-  factory: () => DEFAULT_APP_ID
-});
-var DEFAULT_APP_ID = "ng";
-var PLATFORM_INITIALIZER = new InjectionToken(ngDevMode ? "Platform Initializer" : "");
-var PLATFORM_ID = new InjectionToken(ngDevMode ? "Platform ID" : "", {
-  providedIn: "platform",
-  factory: () => "unknown"
-  // set a default platform name, when none set explicitly
-});
-var PACKAGE_ROOT_URL = new InjectionToken(ngDevMode ? "Application Packages Root URL" : "");
-var ANIMATION_MODULE_TYPE = new InjectionToken(ngDevMode ? "AnimationModuleType" : "");
-var CSP_NONCE = new InjectionToken(ngDevMode ? "CSP nonce" : "", {
-  providedIn: "root",
-  factory: () => {
-    return getDocument().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce") || null;
-  }
-});
-var IMAGE_CONFIG_DEFAULTS = {
-  breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-  placeholderResolution: 30,
-  disableImageSizeWarning: false,
-  disableImageLazyLoadWarning: false
-};
-var IMAGE_CONFIG = new InjectionToken(ngDevMode ? "ImageConfig" : "", {
-  providedIn: "root",
-  factory: () => IMAGE_CONFIG_DEFAULTS
-});
-function makeStateKey(key) {
-  return key;
-}
-function initTransferState() {
-  const transferState = new TransferState();
-  if (inject(PLATFORM_ID) === "browser") {
-    transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));
-  }
-  return transferState;
-}
-var TransferState = class _TransferState {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _TransferState,
-      providedIn: "root",
-      factory: initTransferState
-    })
-  );
-  /** @internal */
-  store = {};
-  onSerializeCallbacks = {};
-  /**
-   * Get the value corresponding to a key. Return `defaultValue` if key is not found.
-   */
-  get(key, defaultValue) {
-    return this.store[key] !== void 0 ? this.store[key] : defaultValue;
-  }
-  /**
-   * Set the value corresponding to a key.
-   */
-  set(key, value) {
-    this.store[key] = value;
-  }
-  /**
-   * Remove a key from the store.
-   */
-  remove(key) {
-    delete this.store[key];
-  }
-  /**
-   * Test whether a key exists in the store.
-   */
-  hasKey(key) {
-    return this.store.hasOwnProperty(key);
-  }
-  /**
-   * Indicates whether the state is empty.
-   */
-  get isEmpty() {
-    return Object.keys(this.store).length === 0;
-  }
-  /**
-   * Register a callback to provide the value for a key when `toJson` is called.
-   */
-  onSerialize(key, callback) {
-    this.onSerializeCallbacks[key] = callback;
-  }
-  /**
-   * Serialize the current state of the store to JSON.
-   */
-  toJson() {
-    for (const key in this.onSerializeCallbacks) {
-      if (this.onSerializeCallbacks.hasOwnProperty(key)) {
-        try {
-          this.store[key] = this.onSerializeCallbacks[key]();
-        } catch (e) {
-          console.warn("Exception in onSerialize callback: ", e);
-        }
-      }
-    }
-    return JSON.stringify(this.store).replace(/</g, "\\u003C");
-  }
-};
-function retrieveTransferredState(doc, appId) {
-  const script = doc.getElementById(appId + "-state");
-  if (script?.textContent) {
-    try {
-      return JSON.parse(script.textContent);
-    } catch (e) {
-      console.warn("Exception while restoring TransferState for app " + appId, e);
-    }
-  }
-  return {};
-}
-var REFERENCE_NODE_HOST = "h";
-var REFERENCE_NODE_BODY = "b";
-var NodeNavigationStep;
-(function(NodeNavigationStep2) {
-  NodeNavigationStep2["FirstChild"] = "f";
-  NodeNavigationStep2["NextSibling"] = "n";
-})(NodeNavigationStep || (NodeNavigationStep = {}));
-var ELEMENT_CONTAINERS = "e";
-var TEMPLATES = "t";
-var CONTAINERS = "c";
-var MULTIPLIER = "x";
-var NUM_ROOT_NODES = "r";
-var TEMPLATE_ID = "i";
-var NODES = "n";
-var DISCONNECTED_NODES = "d";
-var I18N_DATA = "l";
-var DEFER_BLOCK_ID = "di";
-var DEFER_BLOCK_STATE$1 = "s";
-var DEFER_PARENT_BLOCK_ID = "p";
-var DEFER_HYDRATE_TRIGGERS = "t";
-var IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_HYDRATION_DOM_REUSE_ENABLED" : "");
-var PRESERVE_HOST_CONTENT_DEFAULT = false;
-var PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "PRESERVE_HOST_CONTENT" : "", {
-  providedIn: "root",
-  factory: () => PRESERVE_HOST_CONTENT_DEFAULT
-});
-var IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_I18N_HYDRATION_ENABLED" : "");
-var IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_EVENT_REPLAY_ENABLED" : "");
-var EVENT_REPLAY_ENABLED_DEFAULT = false;
-var IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === "undefined" || !!ngDevMode ? "IS_INCREMENTAL_HYDRATION_ENABLED" : "");
-var JSACTION_BLOCK_ELEMENT_MAP = new InjectionToken(ngDevMode ? "JSACTION_BLOCK_ELEMENT_MAP" : "", {
-  providedIn: "root",
-  factory: () => /* @__PURE__ */ new Map()
-});
-var TracingAction;
-(function(TracingAction2) {
-  TracingAction2[TracingAction2["CHANGE_DETECTION"] = 0] = "CHANGE_DETECTION";
-  TracingAction2[TracingAction2["AFTER_NEXT_RENDER"] = 1] = "AFTER_NEXT_RENDER";
-})(TracingAction || (TracingAction = {}));
-var TracingService = new InjectionToken(ngDevMode ? "TracingService" : "");
-var markedFeatures = /* @__PURE__ */ new Set();
-function performanceMarkFeature(feature) {
-  if (markedFeatures.has(feature)) {
-    return;
-  }
-  markedFeatures.add(feature);
-  performance?.mark?.("mark_feature_usage", {
-    detail: {
-      feature
-    }
-  });
-}
-function assertNotInReactiveContext(debugFn, extraContext) {
-  if (getActiveConsumer() !== null) {
-    throw new RuntimeError(-602, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ""}`);
-  }
-}
-var AfterRenderPhase;
-(function(AfterRenderPhase2) {
-  AfterRenderPhase2[AfterRenderPhase2["EarlyRead"] = 0] = "EarlyRead";
-  AfterRenderPhase2[AfterRenderPhase2["Write"] = 1] = "Write";
-  AfterRenderPhase2[AfterRenderPhase2["MixedReadWrite"] = 2] = "MixedReadWrite";
-  AfterRenderPhase2[AfterRenderPhase2["Read"] = 3] = "Read";
-})(AfterRenderPhase || (AfterRenderPhase = {}));
-var AfterRenderManager = class _AfterRenderManager {
-  impl = null;
-  execute() {
-    this.impl?.execute();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _AfterRenderManager,
-      providedIn: "root",
-      factory: () => new _AfterRenderManager()
-    })
-  );
-};
-var AFTER_RENDER_PHASES = (() => [AfterRenderPhase.EarlyRead, AfterRenderPhase.Write, AfterRenderPhase.MixedReadWrite, AfterRenderPhase.Read])();
-var AfterRenderImpl = class _AfterRenderImpl {
-  ngZone = inject(NgZone);
-  scheduler = inject(ChangeDetectionScheduler);
-  errorHandler = inject(ErrorHandler, {
-    optional: true
-  });
-  /** Current set of active sequences. */
-  sequences = /* @__PURE__ */ new Set();
-  /** Tracks registrations made during the current set of executions. */
-  deferredRegistrations = /* @__PURE__ */ new Set();
-  /** Whether the `AfterRenderManager` is currently executing hooks. */
-  executing = false;
-  constructor() {
-    inject(TracingService, {
-      optional: true
-    });
-  }
-  /**
-   * Run the sequence of phases of hooks, once through. As a result of executing some hooks, more
-   * might be scheduled.
-   */
-  execute() {
-    this.executing = true;
-    for (const phase of AFTER_RENDER_PHASES) {
-      for (const sequence of this.sequences) {
-        if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {
-          continue;
-        }
-        try {
-          sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => sequence.hooks[phase](sequence.pipelinedValue), sequence.snapshot));
-        } catch (err) {
-          sequence.erroredOrDestroyed = true;
-          this.errorHandler?.handleError(err);
-        }
-      }
-    }
-    this.executing = false;
-    for (const sequence of this.sequences) {
-      sequence.afterRun();
-      if (sequence.once) {
-        this.sequences.delete(sequence);
-        sequence.destroy();
-      }
-    }
-    for (const sequence of this.deferredRegistrations) {
-      this.sequences.add(sequence);
-    }
-    if (this.deferredRegistrations.size > 0) {
-      this.scheduler.notify(
-        8
-        /* NotificationSource.DeferredRenderHook */
-      );
-    }
-    this.deferredRegistrations.clear();
-  }
-  register(sequence) {
-    if (!this.executing) {
-      this.sequences.add(sequence);
-      this.scheduler.notify(
-        7
-        /* NotificationSource.RenderHook */
-      );
-    } else {
-      this.deferredRegistrations.add(sequence);
-    }
-  }
-  unregister(sequence) {
-    if (this.executing && this.sequences.has(sequence)) {
-      sequence.erroredOrDestroyed = true;
-      sequence.pipelinedValue = void 0;
-      sequence.once = true;
-    } else {
-      this.sequences.delete(sequence);
-      this.deferredRegistrations.delete(sequence);
-    }
-  }
-  maybeTrace(fn, snapshot) {
-    return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _AfterRenderImpl,
-      providedIn: "root",
-      factory: () => new _AfterRenderImpl()
-    })
-  );
-};
-var AfterRenderSequence = class {
-  impl;
-  hooks;
-  once;
-  snapshot;
-  /**
-   * Whether this sequence errored or was destroyed during this execution, and hooks should no
-   * longer run for it.
-   */
-  erroredOrDestroyed = false;
-  /**
-   * The value returned by the last hook execution (if any), ready to be pipelined into the next
-   * one.
-   */
-  pipelinedValue = void 0;
-  unregisterOnDestroy;
-  constructor(impl, hooks, once, destroyRef, snapshot = null) {
-    this.impl = impl;
-    this.hooks = hooks;
-    this.once = once;
-    this.snapshot = snapshot;
-    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
-  }
-  afterRun() {
-    this.erroredOrDestroyed = false;
-    this.pipelinedValue = void 0;
-    this.snapshot?.dispose();
-    this.snapshot = null;
-  }
-  destroy() {
-    this.impl.unregister(this);
-    this.unregisterOnDestroy?.();
-  }
-};
-function afterRender(callbackOrSpec, options) {
-  ngDevMode && assertNotInReactiveContext(afterRender, "Call `afterRender` outside of a reactive context. For example, schedule the render callback inside the component constructor`.");
-  !options?.injector && assertInInjectionContext(afterRender);
-  const injector = options?.injector ?? inject(Injector);
-  if (true) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  performanceMarkFeature("NgAfterRender");
-  return afterRenderImpl(
-    callbackOrSpec,
-    injector,
-    options,
-    /* once */
-    false
-  );
-}
-function afterNextRender(callbackOrSpec, options) {
-  !options?.injector && assertInInjectionContext(afterNextRender);
-  const injector = options?.injector ?? inject(Injector);
-  if (true) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  performanceMarkFeature("NgAfterNextRender");
-  return afterRenderImpl(
-    callbackOrSpec,
-    injector,
-    options,
-    /* once */
-    true
-  );
-}
-function getHooks(callbackOrSpec, phase) {
-  if (callbackOrSpec instanceof Function) {
-    const hooks = [void 0, void 0, void 0, void 0];
-    hooks[phase] = callbackOrSpec;
-    return hooks;
-  } else {
-    return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];
-  }
-}
-function afterRenderImpl(callbackOrSpec, injector, options, once) {
-  const manager = injector.get(AfterRenderManager);
-  manager.impl ??= injector.get(AfterRenderImpl);
-  const tracing = injector.get(TracingService, null, {
-    optional: true
-  });
-  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;
-  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef, tracing?.snapshot(null));
-  manager.impl.register(sequence);
-  return sequence;
-}
-var NOOP_AFTER_RENDER_REF = {
-  destroy() {
-  }
-};
-var DeferDependenciesLoadingState;
-(function(DeferDependenciesLoadingState2) {
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["NOT_STARTED"] = 0] = "NOT_STARTED";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["IN_PROGRESS"] = 1] = "IN_PROGRESS";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["COMPLETE"] = 2] = "COMPLETE";
-  DeferDependenciesLoadingState2[DeferDependenciesLoadingState2["FAILED"] = 3] = "FAILED";
-})(DeferDependenciesLoadingState || (DeferDependenciesLoadingState = {}));
-var MINIMUM_SLOT = 0;
-var LOADING_AFTER_SLOT = 1;
-var DeferBlockState;
-(function(DeferBlockState2) {
-  DeferBlockState2[DeferBlockState2["Placeholder"] = 0] = "Placeholder";
-  DeferBlockState2[DeferBlockState2["Loading"] = 1] = "Loading";
-  DeferBlockState2[DeferBlockState2["Complete"] = 2] = "Complete";
-  DeferBlockState2[DeferBlockState2["Error"] = 3] = "Error";
-})(DeferBlockState || (DeferBlockState = {}));
-var DeferBlockInternalState;
-(function(DeferBlockInternalState2) {
-  DeferBlockInternalState2[DeferBlockInternalState2["Initial"] = -1] = "Initial";
-})(DeferBlockInternalState || (DeferBlockInternalState = {}));
-var NEXT_DEFER_BLOCK_STATE = 0;
-var DEFER_BLOCK_STATE = 1;
-var STATE_IS_FROZEN_UNTIL = 2;
-var LOADING_AFTER_CLEANUP_FN = 3;
-var TRIGGER_CLEANUP_FNS = 4;
-var PREFETCH_TRIGGER_CLEANUP_FNS = 5;
-var SSR_UNIQUE_ID = 6;
-var SSR_BLOCK_STATE = 7;
-var ON_COMPLETE_FNS = 8;
-var HYDRATE_TRIGGER_CLEANUP_FNS = 9;
-var DeferBlockBehavior;
-(function(DeferBlockBehavior2) {
-  DeferBlockBehavior2[DeferBlockBehavior2["Manual"] = 0] = "Manual";
-  DeferBlockBehavior2[DeferBlockBehavior2["Playthrough"] = 1] = "Playthrough";
-})(DeferBlockBehavior || (DeferBlockBehavior = {}));
-function storeTriggerCleanupFn(type, lDetails, cleanupFn) {
-  const key = getCleanupFnKeyByType(type);
-  if (lDetails[key] === null) {
-    lDetails[key] = [];
-  }
-  lDetails[key].push(cleanupFn);
-}
-function invokeTriggerCleanupFns(type, lDetails) {
-  const key = getCleanupFnKeyByType(type);
-  const cleanupFns = lDetails[key];
-  if (cleanupFns !== null) {
-    for (const cleanupFn of cleanupFns) {
-      cleanupFn();
-    }
-    lDetails[key] = null;
-  }
-}
-function invokeAllTriggerCleanupFns(lDetails) {
-  invokeTriggerCleanupFns(1, lDetails);
-  invokeTriggerCleanupFns(0, lDetails);
-  invokeTriggerCleanupFns(2, lDetails);
-}
-function getCleanupFnKeyByType(type) {
-  let key = TRIGGER_CLEANUP_FNS;
-  if (type === 1) {
-    key = PREFETCH_TRIGGER_CLEANUP_FNS;
-  } else if (type === 2) {
-    key = HYDRATE_TRIGGER_CLEANUP_FNS;
-  }
-  return key;
-}
-function getDeferBlockDataIndex(deferBlockIndex) {
-  return deferBlockIndex + 1;
-}
-function getLDeferBlockDetails(lView, tNode) {
-  const tView = lView[TVIEW];
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  return lView[slotIndex];
-}
-function setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {
-  const tView = lView[TVIEW];
-  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  lView[slotIndex] = lDetails;
-}
-function getTDeferBlockDetails(tView, tNode) {
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  return tView.data[slotIndex];
-}
-function setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {
-  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);
-  ngDevMode && assertIndexInDeclRange(tView, slotIndex);
-  tView.data[slotIndex] = deferBlockConfig;
-}
-function getTemplateIndexForState(newState, hostLView, tNode) {
-  const tView = hostLView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  switch (newState) {
-    case DeferBlockState.Complete:
-      return tDetails.primaryTmplIndex;
-    case DeferBlockState.Loading:
-      return tDetails.loadingTmplIndex;
-    case DeferBlockState.Error:
-      return tDetails.errorTmplIndex;
-    case DeferBlockState.Placeholder:
-      return tDetails.placeholderTmplIndex;
-    default:
-      ngDevMode && throwError(`Unexpected defer block state: ${newState}`);
-      return null;
-  }
-}
-function getMinimumDurationForState(tDetails, currentState) {
-  if (currentState === DeferBlockState.Placeholder) {
-    return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;
-  } else if (currentState === DeferBlockState.Loading) {
-    return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;
-  }
-  return null;
-}
-function getLoadingBlockAfter(tDetails) {
-  return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;
-}
-function addDepsToRegistry(currentDeps, newDeps) {
-  if (!currentDeps || currentDeps.length === 0) {
-    return newDeps;
-  }
-  const currentDepSet = new Set(currentDeps);
-  for (const dep of newDeps) {
-    currentDepSet.add(dep);
-  }
-  return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);
-}
-function getPrimaryBlockTNode(tView, tDetails) {
-  const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;
-  return getTNode(tView, adjustedIndex);
-}
-function assertDeferredDependenciesLoaded(tDetails) {
-  assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, "Expecting all deferred dependencies to be loaded.");
-}
-function isTDeferBlockDetails(value) {
-  return value !== null && typeof value === "object" && typeof value.primaryTmplIndex === "number";
-}
-function isDeferBlock(tView, tNode) {
-  let tDetails = null;
-  const slotIndex = getDeferBlockDataIndex(tNode.index);
-  if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {
-    tDetails = getTDeferBlockDetails(tView, tNode);
-  }
-  return !!tDetails && isTDeferBlockDetails(tDetails);
-}
-var eventListenerOptions = {
-  passive: true,
-  capture: true
-};
-var hoverTriggers = /* @__PURE__ */ new WeakMap();
-var interactionTriggers = /* @__PURE__ */ new WeakMap();
-var viewportTriggers = /* @__PURE__ */ new WeakMap();
-var interactionEventNames = ["click", "keydown"];
-var hoverEventNames = ["mouseenter", "mouseover", "focusin"];
-var intersectionObserver = null;
-var observedViewportElements = 0;
-var DeferEventEntry = class {
-  callbacks = /* @__PURE__ */ new Set();
-  listener = () => {
-    for (const callback of this.callbacks) {
-      callback();
-    }
-  };
-};
-function onInteraction(trigger, callback) {
-  let entry = interactionTriggers.get(trigger);
-  if (!entry) {
-    entry = new DeferEventEntry();
-    interactionTriggers.set(trigger, entry);
-    for (const name of interactionEventNames) {
-      trigger.addEventListener(name, entry.listener, eventListenerOptions);
-    }
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    const {
-      callbacks,
-      listener
-    } = entry;
-    callbacks.delete(callback);
-    if (callbacks.size === 0) {
-      interactionTriggers.delete(trigger);
-      for (const name of interactionEventNames) {
-        trigger.removeEventListener(name, listener, eventListenerOptions);
-      }
-    }
-  };
-}
-function onHover(trigger, callback) {
-  let entry = hoverTriggers.get(trigger);
-  if (!entry) {
-    entry = new DeferEventEntry();
-    hoverTriggers.set(trigger, entry);
-    for (const name of hoverEventNames) {
-      trigger.addEventListener(name, entry.listener, eventListenerOptions);
-    }
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    const {
-      callbacks,
-      listener
-    } = entry;
-    callbacks.delete(callback);
-    if (callbacks.size === 0) {
-      for (const name of hoverEventNames) {
-        trigger.removeEventListener(name, listener, eventListenerOptions);
-      }
-      hoverTriggers.delete(trigger);
-    }
-  };
-}
-function onViewport(trigger, callback, injector) {
-  const ngZone = injector.get(NgZone);
-  let entry = viewportTriggers.get(trigger);
-  intersectionObserver = intersectionObserver || ngZone.runOutsideAngular(() => {
-    return new IntersectionObserver((entries) => {
-      for (const current of entries) {
-        if (current.isIntersecting && viewportTriggers.has(current.target)) {
-          ngZone.run(viewportTriggers.get(current.target).listener);
-        }
-      }
-    });
-  });
-  if (!entry) {
-    entry = new DeferEventEntry();
-    ngZone.runOutsideAngular(() => intersectionObserver.observe(trigger));
-    viewportTriggers.set(trigger, entry);
-    observedViewportElements++;
-  }
-  entry.callbacks.add(callback);
-  return () => {
-    if (!viewportTriggers.has(trigger)) {
-      return;
-    }
-    entry.callbacks.delete(callback);
-    if (entry.callbacks.size === 0) {
-      intersectionObserver?.unobserve(trigger);
-      viewportTriggers.delete(trigger);
-      observedViewportElements--;
-    }
-    if (observedViewportElements === 0) {
-      intersectionObserver?.disconnect();
-      intersectionObserver = null;
-    }
-  };
-}
-function getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {
-  if (walkUpTimes == null) {
-    return deferredHostLView;
-  }
-  if (walkUpTimes >= 0) {
-    return walkUpViews(walkUpTimes, deferredHostLView);
-  }
-  const deferredContainer = deferredHostLView[deferredTNode.index];
-  ngDevMode && assertLContainer(deferredContainer);
-  const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;
-  if (ngDevMode && triggerLView !== null) {
-    const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);
-    const renderedState = lDetails[DEFER_BLOCK_STATE];
-    assertEqual(renderedState, DeferBlockState.Placeholder, "Expected a placeholder to be rendered in this defer block.");
-    assertLView(triggerLView);
-  }
-  return triggerLView;
-}
-function getTriggerElement(triggerLView, triggerIndex) {
-  const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);
-  ngDevMode && assertElement(element);
-  return element;
-}
-function registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type) {
-  const injector = initialLView[INJECTOR];
-  const zone = injector.get(NgZone);
-  function pollDomTrigger() {
-    if (isDestroyed(initialLView)) {
-      return;
-    }
-    const lDetails = getLDeferBlockDetails(initialLView, tNode);
-    const renderedState = lDetails[DEFER_BLOCK_STATE];
-    if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {
-      return;
-    }
-    const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);
-    if (!triggerLView) {
-      afterNextRender({
-        read: pollDomTrigger
-      }, {
-        injector
-      });
-      return;
-    }
-    if (isDestroyed(triggerLView)) {
-      return;
-    }
-    const element = getTriggerElement(triggerLView, triggerIndex);
-    const cleanup = registerFn(element, () => {
-      zone.run(() => {
-        if (initialLView !== triggerLView) {
-          removeLViewOnDestroy(triggerLView, cleanup);
-        }
-        callback();
-      });
-    }, injector);
-    if (initialLView !== triggerLView) {
-      storeLViewOnDestroy(triggerLView, cleanup);
-    }
-    storeTriggerCleanupFn(type, lDetails, cleanup);
-  }
-  afterNextRender({
-    read: pollDomTrigger
-  }, {
-    injector
-  });
-}
-var DEFER_BLOCK_SSR_ID_ATTRIBUTE = "ngb";
-function setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {
-  if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {
-    return;
-  }
-  const existingAttr = nativeElement.getAttribute(Attribute.JSACTION);
-  const parts = eventTypes.reduce((prev, curr) => {
-    return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ":;" : prev;
-  }, "");
-  nativeElement.setAttribute(Attribute.JSACTION, `${existingAttr ?? ""}${parts}`);
-  const blockName = parentDeferBlockId ?? "";
-  if (blockName !== "" && parts.length > 0) {
-    nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);
-  }
-}
-function removeListenersFromBlocks(blockNames, jsActionMap) {
-  if (blockNames.length > 0) {
-    let blockList = [];
-    for (let blockName of blockNames) {
-      if (jsActionMap.has(blockName)) {
-        blockList = [...blockList, ...jsActionMap.get(blockName)];
-      }
-    }
-    const replayList = new Set(blockList);
-    replayList.forEach(removeListeners);
-  }
-}
-var removeListeners = (el) => {
-  el.removeAttribute(Attribute.JSACTION);
-  el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);
-  el.__jsaction_fns = void 0;
-};
-var JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? "EVENT_CONTRACT_DETAILS" : "", {
-  providedIn: "root",
-  factory: () => ({})
-});
-var DEHYDRATED_BLOCK_REGISTRY = new InjectionToken(ngDevMode ? "DEHYDRATED_BLOCK_REGISTRY" : "");
-var DehydratedBlockRegistry = class _DehydratedBlockRegistry {
-  registry = /* @__PURE__ */ new Map();
-  cleanupFns = /* @__PURE__ */ new Map();
-  jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
-  contract = inject(JSACTION_EVENT_CONTRACT);
-  add(blockId, info) {
-    this.registry.set(blockId, info);
-  }
-  get(blockId) {
-    return this.registry.get(blockId) ?? null;
-  }
-  has(blockId) {
-    return this.registry.has(blockId);
-  }
-  cleanup(hydratedBlocks) {
-    removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);
-    for (let blockId of hydratedBlocks) {
-      this.registry.delete(blockId);
-      this.jsActionMap.delete(blockId);
-      this.invokeTriggerCleanupFns(blockId);
-      this.hydrating.delete(blockId);
-    }
-    if (this.size === 0) {
-      this.contract.instance?.cleanUp();
-    }
-  }
-  get size() {
-    return this.registry.size;
-  }
-  // we have to leave the lowest block Id in the registry
-  // unless that block has no children
-  addCleanupFn(blockId, fn) {
-    let cleanupFunctions = [];
-    if (this.cleanupFns.has(blockId)) {
-      cleanupFunctions = this.cleanupFns.get(blockId);
-    }
-    cleanupFunctions.push(fn);
-    this.cleanupFns.set(blockId, cleanupFunctions);
-  }
-  invokeTriggerCleanupFns(blockId) {
-    const fns = this.cleanupFns.get(blockId) ?? [];
-    for (let fn of fns) {
-      fn();
-    }
-    this.cleanupFns.delete(blockId);
-  }
-  // Blocks that are being hydrated.
-  hydrating = /* @__PURE__ */ new Map();
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _DehydratedBlockRegistry,
-      providedIn: null,
-      factory: () => new _DehydratedBlockRegistry()
-    })
-  );
-};
-var TRANSFER_STATE_TOKEN_ID = "__nghData__";
-var NGH_DATA_KEY = makeStateKey(TRANSFER_STATE_TOKEN_ID);
-var TRANSFER_STATE_DEFER_BLOCKS_INFO = "__nghDeferData__";
-var NGH_DEFER_BLOCKS_KEY = makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);
-var NGH_ATTR_NAME = "ngh";
-var SSR_CONTENT_INTEGRITY_MARKER = "nghm";
-var _retrieveHydrationInfoImpl = () => null;
-function retrieveHydrationInfoImpl(rNode, injector, isRootView2 = false) {
-  let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);
-  if (nghAttrValue == null) return null;
-  const [componentViewNgh, rootViewNgh] = nghAttrValue.split("|");
-  nghAttrValue = isRootView2 ? rootViewNgh : componentViewNgh;
-  if (!nghAttrValue) return null;
-  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : "";
-  const remainingNgh = isRootView2 ? componentViewNgh : rootNgh;
-  let data = {};
-  if (nghAttrValue !== "") {
-    const transferState = injector.get(TransferState, null, {
-      optional: true
-    });
-    if (transferState !== null) {
-      const nghData = transferState.get(NGH_DATA_KEY, []);
-      data = nghData[Number(nghAttrValue)];
-      ngDevMode && assertDefined(data, "Unable to retrieve hydration info from the TransferState.");
-    }
-  }
-  const dehydratedView = {
-    data,
-    firstChild: rNode.firstChild ?? null
-  };
-  if (isRootView2) {
-    dehydratedView.firstChild = rNode;
-    setSegmentHead(dehydratedView, 0, rNode.nextSibling);
-  }
-  if (remainingNgh) {
-    rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);
-  } else {
-    rNode.removeAttribute(NGH_ATTR_NAME);
-  }
-  ngDevMode && markRNodeAsClaimedByHydration(
-    rNode,
-    /* checkIfAlreadyClaimed */
-    false
-  );
-  ngDevMode && ngDevMode.hydratedComponents++;
-  return dehydratedView;
-}
-function enableRetrieveHydrationInfoImpl() {
-  _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;
-}
-function retrieveHydrationInfo(rNode, injector, isRootView2 = false) {
-  return _retrieveHydrationInfoImpl(rNode, injector, isRootView2);
-}
-function getLNodeForHydration(viewRef) {
-  let lView = viewRef._lView;
-  const tView = lView[TVIEW];
-  if (tView.type === 2) {
-    return null;
-  }
-  if (isRootView(lView)) {
-    lView = lView[HEADER_OFFSET];
-  }
-  return lView;
-}
-function getTextNodeContent(node) {
-  return node.textContent?.replace(/\s/gm, "");
-}
-function processTextNodeMarkersBeforeHydration(node) {
-  const doc = getDocument();
-  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {
-    acceptNode(node2) {
-      const content = getTextNodeContent(node2);
-      const isTextNodeMarker = content === "ngetn" || content === "ngtns";
-      return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
-    }
-  });
-  let currentNode;
-  const nodes = [];
-  while (currentNode = commentNodesIterator.nextNode()) {
-    nodes.push(currentNode);
-  }
-  for (const node2 of nodes) {
-    if (node2.textContent === "ngetn") {
-      node2.replaceWith(doc.createTextNode(""));
-    } else {
-      node2.remove();
-    }
-  }
-}
-var HydrationStatus;
-(function(HydrationStatus2) {
-  HydrationStatus2["Hydrated"] = "hydrated";
-  HydrationStatus2["Skipped"] = "skipped";
-  HydrationStatus2["Mismatched"] = "mismatched";
-})(HydrationStatus || (HydrationStatus = {}));
-var HYDRATION_INFO_KEY = "__ngDebugHydrationInfo__";
-function patchHydrationInfo(node, info) {
-  node[HYDRATION_INFO_KEY] = info;
-}
-function readHydrationInfo(node) {
-  return node[HYDRATION_INFO_KEY] ?? null;
-}
-function markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsClaimedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {
-    throw new Error("Trying to claim a node, which was claimed already.");
-  }
-  patchHydrationInfo(node, {
-    status: HydrationStatus.Hydrated
-  });
-  ngDevMode.hydratedNodes++;
-}
-function markRNodeAsSkippedByHydration(node) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsSkippedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  patchHydrationInfo(node, {
-    status: HydrationStatus.Skipped
-  });
-  ngDevMode.componentsSkippedHydration++;
-}
-function markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {
-  if (!ngDevMode) {
-    throw new Error("Calling `markRNodeAsMismatchedByHydration` in prod mode is not supported and likely a mistake.");
-  }
-  while (node && !getComponent(node)) {
-    node = node?.parentNode;
-  }
-  if (node) {
-    patchHydrationInfo(node, {
-      status: HydrationStatus.Mismatched,
-      expectedNodeDetails,
-      actualNodeDetails
-    });
-  }
-}
-function isRNodeClaimedForHydration(node) {
-  return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;
-}
-function setSegmentHead(hydrationInfo, index, node) {
-  hydrationInfo.segmentHeads ??= {};
-  hydrationInfo.segmentHeads[index] = node;
-}
-function getSegmentHead(hydrationInfo, index) {
-  return hydrationInfo.segmentHeads?.[index] ?? null;
-}
-function isIncrementalHydrationEnabled(injector) {
-  return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {
-    optional: true
-  });
-}
-function assertIncrementalHydrationIsConfigured(injector) {
-  if (!isIncrementalHydrationEnabled(injector)) {
-    throw new RuntimeError(508, "Angular has detected that some `@defer` blocks use `hydrate` triggers, but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` call is added as an argument for the `provideClientHydration()` function call in your application config.");
-  }
-}
-function getNgContainerSize(hydrationInfo, index) {
-  const data = hydrationInfo.data;
-  let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;
-  if (size === null && data[CONTAINERS]?.[index]) {
-    size = calcSerializedContainerSize(hydrationInfo, index);
-  }
-  return size;
-}
-function isSerializedElementContainer(hydrationInfo, index) {
-  return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== void 0;
-}
-function getSerializedContainerViews(hydrationInfo, index) {
-  return hydrationInfo.data[CONTAINERS]?.[index] ?? null;
-}
-function calcSerializedContainerSize(hydrationInfo, index) {
-  const views = getSerializedContainerViews(hydrationInfo, index) ?? [];
-  let numNodes = 0;
-  for (let view of views) {
-    numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);
-  }
-  return numNodes;
-}
-function initDisconnectedNodes(hydrationInfo) {
-  if (typeof hydrationInfo.disconnectedNodes === "undefined") {
-    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];
-    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;
-  }
-  return hydrationInfo.disconnectedNodes;
-}
-function isDisconnectedNode$1(hydrationInfo, index) {
-  if (typeof hydrationInfo.disconnectedNodes === "undefined") {
-    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];
-    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;
-  }
-  return !!initDisconnectedNodes(hydrationInfo)?.has(index);
-}
-function processTextNodeBeforeSerialization(context, node) {
-  const el = node;
-  const corruptedTextNodes = context.corruptedTextNodes;
-  if (el.textContent === "") {
-    corruptedTextNodes.set(
-      el,
-      "ngetn"
-      /* TextNodeMarker.EmptyNode */
-    );
-  } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {
-    corruptedTextNodes.set(
-      el,
-      "ngtns"
-      /* TextNodeMarker.Separator */
-    );
-  }
-}
-function convertHydrateTriggersToJsAction(triggers) {
-  let actionList = [];
-  if (triggers !== null) {
-    if (triggers.has(
-      4
-      /* DeferBlockTrigger.Hover */
-    )) {
-      actionList.push(...hoverEventNames);
-    }
-    if (triggers.has(
-      3
-      /* DeferBlockTrigger.Interaction */
-    )) {
-      actionList.push(...interactionEventNames);
-    }
-  }
-  return actionList;
-}
-var _retrieveDeferBlockDataImpl = () => {
-  return {};
-};
-function retrieveDeferBlockDataImpl(injector) {
-  const transferState = injector.get(TransferState, null, {
-    optional: true
-  });
-  if (transferState !== null) {
-    const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});
-    ngDevMode && assertDefined(nghDeferData, "Unable to retrieve defer block info from the TransferState.");
-    return nghDeferData;
-  }
-  return {};
-}
-function enableRetrieveDeferBlockDataImpl() {
-  _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;
-}
-var ViewEncapsulation;
-(function(ViewEncapsulation2) {
-  ViewEncapsulation2[ViewEncapsulation2["Emulated"] = 0] = "Emulated";
-  ViewEncapsulation2[ViewEncapsulation2["None"] = 2] = "None";
-  ViewEncapsulation2[ViewEncapsulation2["ShadowDom"] = 3] = "ShadowDom";
-})(ViewEncapsulation || (ViewEncapsulation = {}));
-var policy$1;
-function getPolicy$1() {
-  if (policy$1 === void 0) {
-    policy$1 = null;
-    if (_global.trustedTypes) {
-      try {
-        policy$1 = _global.trustedTypes.createPolicy("angular", {
-          createHTML: (s) => s,
-          createScript: (s) => s,
-          createScriptURL: (s) => s
-        });
-      } catch {
-      }
-    }
-  }
-  return policy$1;
-}
-function trustedHTMLFromString(html) {
-  return getPolicy$1()?.createHTML(html) || html;
-}
-function trustedScriptURLFromString(url) {
-  return getPolicy$1()?.createScriptURL(url) || url;
-}
-var policy;
-function getPolicy() {
-  if (policy === void 0) {
-    policy = null;
-    if (_global.trustedTypes) {
-      try {
-        policy = _global.trustedTypes.createPolicy("angular#unsafe-bypass", {
-          createHTML: (s) => s,
-          createScript: (s) => s,
-          createScriptURL: (s) => s
-        });
-      } catch {
-      }
-    }
-  }
-  return policy;
-}
-function trustedHTMLFromStringBypass(html) {
-  return getPolicy()?.createHTML(html) || html;
-}
-function trustedScriptFromStringBypass(script) {
-  return getPolicy()?.createScript(script) || script;
-}
-function trustedScriptURLFromStringBypass(url) {
-  return getPolicy()?.createScriptURL(url) || url;
-}
-var SafeValueImpl = class {
-  changingThisBreaksApplicationSecurity;
-  constructor(changingThisBreaksApplicationSecurity) {
-    this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;
-  }
-  toString() {
-    return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${XSS_SECURITY_URL})`;
-  }
-};
-var SafeHtmlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "HTML";
-  }
-};
-var SafeStyleImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "Style";
-  }
-};
-var SafeScriptImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "Script";
-  }
-};
-var SafeUrlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "URL";
-  }
-};
-var SafeResourceUrlImpl = class extends SafeValueImpl {
-  getTypeName() {
-    return "ResourceURL";
-  }
-};
-function unwrapSafeValue(value) {
-  return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;
-}
-function allowSanitizationBypassAndThrow(value, type) {
-  const actualType = getSanitizationBypassType(value);
-  if (actualType != null && actualType !== type) {
-    if (actualType === "ResourceURL" && type === "URL") return true;
-    throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);
-  }
-  return actualType === type;
-}
-function getSanitizationBypassType(value) {
-  return value instanceof SafeValueImpl && value.getTypeName() || null;
-}
-function bypassSanitizationTrustHtml(trustedHtml) {
-  return new SafeHtmlImpl(trustedHtml);
-}
-function bypassSanitizationTrustStyle(trustedStyle) {
-  return new SafeStyleImpl(trustedStyle);
-}
-function bypassSanitizationTrustScript(trustedScript) {
-  return new SafeScriptImpl(trustedScript);
-}
-function bypassSanitizationTrustUrl(trustedUrl) {
-  return new SafeUrlImpl(trustedUrl);
-}
-function bypassSanitizationTrustResourceUrl(trustedResourceUrl) {
-  return new SafeResourceUrlImpl(trustedResourceUrl);
-}
-function getInertBodyHelper(defaultDoc) {
-  const inertDocumentHelper = new InertDocumentHelper(defaultDoc);
-  return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;
-}
-var DOMParserHelper = class {
-  inertDocumentHelper;
-  constructor(inertDocumentHelper) {
-    this.inertDocumentHelper = inertDocumentHelper;
-  }
-  getInertBodyElement(html) {
-    html = "<body><remove></remove>" + html;
-    try {
-      const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), "text/html").body;
-      if (body === null) {
-        return this.inertDocumentHelper.getInertBodyElement(html);
-      }
-      body.firstChild?.remove();
-      return body;
-    } catch {
-      return null;
-    }
-  }
-};
-var InertDocumentHelper = class {
-  defaultDoc;
-  inertDocument;
-  constructor(defaultDoc) {
-    this.defaultDoc = defaultDoc;
-    this.inertDocument = this.defaultDoc.implementation.createHTMLDocument("sanitization-inert");
-  }
-  getInertBodyElement(html) {
-    const templateEl = this.inertDocument.createElement("template");
-    templateEl.innerHTML = trustedHTMLFromString(html);
-    return templateEl;
-  }
-};
-function isDOMParserAvailable() {
-  try {
-    return !!new window.DOMParser().parseFromString(trustedHTMLFromString(""), "text/html");
-  } catch {
-    return false;
-  }
-}
-var SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;
-function _sanitizeUrl(url) {
-  url = String(url);
-  if (url.match(SAFE_URL_PATTERN)) return url;
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);
-  }
-  return "unsafe:" + url;
-}
-function tagSet(tags) {
-  const res = {};
-  for (const t of tags.split(",")) res[t] = true;
-  return res;
-}
-function merge(...sets) {
-  const res = {};
-  for (const s of sets) {
-    for (const v in s) {
-      if (s.hasOwnProperty(v)) res[v] = true;
-    }
-  }
-  return res;
-}
-var VOID_ELEMENTS = tagSet("area,br,col,hr,img,wbr");
-var OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");
-var OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet("rp,rt");
-var OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);
-var BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul"));
-var INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video"));
-var VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
-var URI_ATTRS = tagSet("background,cite,href,itemtype,longdesc,poster,src,xlink:href");
-var HTML_ATTRS = tagSet("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width");
-var ARIA_ATTRS = tagSet("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext");
-var VALID_ATTRS = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);
-var SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet("script,style,template");
-var SanitizingHtmlSerializer = class {
-  // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just
-  // because characters were re-encoded.
-  sanitizedSomething = false;
-  buf = [];
-  sanitizeChildren(el) {
-    let current = el.firstChild;
-    let traverseContent = true;
-    let parentNodes = [];
-    while (current) {
-      if (current.nodeType === Node.ELEMENT_NODE) {
-        traverseContent = this.startElement(current);
-      } else if (current.nodeType === Node.TEXT_NODE) {
-        this.chars(current.nodeValue);
-      } else {
-        this.sanitizedSomething = true;
-      }
-      if (traverseContent && current.firstChild) {
-        parentNodes.push(current);
-        current = getFirstChild(current);
-        continue;
-      }
-      while (current) {
-        if (current.nodeType === Node.ELEMENT_NODE) {
-          this.endElement(current);
-        }
-        let next = getNextSibling(current);
-        if (next) {
-          current = next;
-          break;
-        }
-        current = parentNodes.pop();
-      }
-    }
-    return this.buf.join("");
-  }
-  /**
-   * Sanitizes an opening element tag (if valid) and returns whether the element's contents should
-   * be traversed. Element content must always be traversed (even if the element itself is not
-   * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.
-   *
-   * @param element The element to sanitize.
-   * @return True if the element's contents should be traversed.
-   */
-  startElement(element) {
-    const tagName = getNodeName(element).toLowerCase();
-    if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {
-      this.sanitizedSomething = true;
-      return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);
-    }
-    this.buf.push("<");
-    this.buf.push(tagName);
-    const elAttrs = element.attributes;
-    for (let i = 0; i < elAttrs.length; i++) {
-      const elAttr = elAttrs.item(i);
-      const attrName = elAttr.name;
-      const lower = attrName.toLowerCase();
-      if (!VALID_ATTRS.hasOwnProperty(lower)) {
-        this.sanitizedSomething = true;
-        continue;
-      }
-      let value = elAttr.value;
-      if (URI_ATTRS[lower]) value = _sanitizeUrl(value);
-      this.buf.push(" ", attrName, '="', encodeEntities(value), '"');
-    }
-    this.buf.push(">");
-    return true;
-  }
-  endElement(current) {
-    const tagName = getNodeName(current).toLowerCase();
-    if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {
-      this.buf.push("</");
-      this.buf.push(tagName);
-      this.buf.push(">");
-    }
-  }
-  chars(chars) {
-    this.buf.push(encodeEntities(chars));
-  }
-};
-function isClobberedElement(parentNode, childNode) {
-  return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;
-}
-function getNextSibling(node) {
-  const nextSibling = node.nextSibling;
-  if (nextSibling && node !== nextSibling.previousSibling) {
-    throw clobberedElementError(nextSibling);
-  }
-  return nextSibling;
-}
-function getFirstChild(node) {
-  const firstChild = node.firstChild;
-  if (firstChild && isClobberedElement(node, firstChild)) {
-    throw clobberedElementError(firstChild);
-  }
-  return firstChild;
-}
-function getNodeName(node) {
-  const nodeName = node.nodeName;
-  return typeof nodeName === "string" ? nodeName : "FORM";
-}
-function clobberedElementError(node) {
-  return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);
-}
-var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
-var NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
-function encodeEntities(value) {
-  return value.replace(/&/g, "&amp;").replace(SURROGATE_PAIR_REGEXP, function(match) {
-    const hi = match.charCodeAt(0);
-    const low = match.charCodeAt(1);
-    return "&#" + ((hi - 55296) * 1024 + (low - 56320) + 65536) + ";";
-  }).replace(NON_ALPHANUMERIC_REGEXP, function(match) {
-    return "&#" + match.charCodeAt(0) + ";";
-  }).replace(/</g, "&lt;").replace(/>/g, "&gt;");
-}
-var inertBodyHelper;
-function _sanitizeHtml(defaultDoc, unsafeHtmlInput) {
-  let inertBodyElement = null;
-  try {
-    inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);
-    let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : "";
-    inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
-    let mXSSAttempts = 5;
-    let parsedHtml = unsafeHtml;
-    do {
-      if (mXSSAttempts === 0) {
-        throw new Error("Failed to sanitize html because the input is unstable");
-      }
-      mXSSAttempts--;
-      unsafeHtml = parsedHtml;
-      parsedHtml = inertBodyElement.innerHTML;
-      inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
-    } while (unsafeHtml !== parsedHtml);
-    const sanitizer = new SanitizingHtmlSerializer();
-    const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && sanitizer.sanitizedSomething) {
-      console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);
-    }
-    return trustedHTMLFromString(safeHtml);
-  } finally {
-    if (inertBodyElement) {
-      const parent = getTemplateContent(inertBodyElement) || inertBodyElement;
-      while (parent.firstChild) {
-        parent.firstChild.remove();
-      }
-    }
-  }
-}
-function getTemplateContent(el) {
-  return "content" in el && isTemplateElement(el) ? el.content : null;
-}
-function isTemplateElement(el) {
-  return el.nodeType === Node.ELEMENT_NODE && el.nodeName === "TEMPLATE";
-}
-var SecurityContext;
-(function(SecurityContext2) {
-  SecurityContext2[SecurityContext2["NONE"] = 0] = "NONE";
-  SecurityContext2[SecurityContext2["HTML"] = 1] = "HTML";
-  SecurityContext2[SecurityContext2["STYLE"] = 2] = "STYLE";
-  SecurityContext2[SecurityContext2["SCRIPT"] = 3] = "SCRIPT";
-  SecurityContext2[SecurityContext2["URL"] = 4] = "URL";
-  SecurityContext2[SecurityContext2["RESOURCE_URL"] = 5] = "RESOURCE_URL";
-})(SecurityContext || (SecurityContext = {}));
-function ɵɵsanitizeHtml(unsafeHtml) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeHtml,
-    "HTML"
-    /* BypassType.Html */
-  )) {
-    return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));
-  }
-  return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));
-}
-function ɵɵsanitizeStyle(unsafeStyle) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || "";
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeStyle,
-    "Style"
-    /* BypassType.Style */
-  )) {
-    return unwrapSafeValue(unsafeStyle);
-  }
-  return renderStringify(unsafeStyle);
-}
-function ɵɵsanitizeUrl(unsafeUrl) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || "";
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeUrl,
-    "URL"
-    /* BypassType.Url */
-  )) {
-    return unwrapSafeValue(unsafeUrl);
-  }
-  return _sanitizeUrl(renderStringify(unsafeUrl));
-}
-function ɵɵsanitizeResourceUrl(unsafeResourceUrl) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeResourceUrl,
-    "ResourceURL"
-    /* BypassType.ResourceUrl */
-  )) {
-    return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));
-  }
-  throw new RuntimeError(904, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);
-}
-function ɵɵsanitizeScript(unsafeScript) {
-  const sanitizer = getSanitizer();
-  if (sanitizer) {
-    return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || "");
-  }
-  if (allowSanitizationBypassAndThrow(
-    unsafeScript,
-    "Script"
-    /* BypassType.Script */
-  )) {
-    return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));
-  }
-  throw new RuntimeError(905, ngDevMode && "unsafe value used in a script context");
-}
-function ɵɵtrustConstantHtml(html) {
-  if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {
-    throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join("?")}`);
-  }
-  return trustedHTMLFromString(html[0]);
-}
-function ɵɵtrustConstantResourceUrl(url) {
-  if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {
-    throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join("?")}`);
-  }
-  return trustedScriptURLFromString(url[0]);
-}
-function getUrlSanitizer(tag, prop) {
-  if (prop === "src" && (tag === "embed" || tag === "frame" || tag === "iframe" || tag === "media" || tag === "script") || prop === "href" && (tag === "base" || tag === "link")) {
-    return ɵɵsanitizeResourceUrl;
-  }
-  return ɵɵsanitizeUrl;
-}
-function ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {
-  return getUrlSanitizer(tag, prop)(unsafeUrl);
-}
-function validateAgainstEventProperties(name) {
-  if (name.toLowerCase().startsWith("on")) {
-    const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, please use (${name.slice(2)})=...
-If '${name}' is a directive input, make sure the directive is imported by the current module.`;
-    throw new RuntimeError(306, errorMessage);
-  }
-}
-function validateAgainstEventAttributes(name) {
-  if (name.toLowerCase().startsWith("on")) {
-    const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, please use (${name.slice(2)})=...`;
-    throw new RuntimeError(306, errorMessage);
-  }
-}
-function getSanitizer() {
-  const lView = getLView();
-  return lView && lView[ENVIRONMENT].sanitizer;
-}
-var COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;
-var COMMENT_DELIMITER = /(<|>)/g;
-var COMMENT_DELIMITER_ESCAPED = "​$1​";
-function escapeCommentText(value) {
-  return value.replace(COMMENT_DISALLOWED, (text) => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));
-}
-function normalizeDebugBindingName(name) {
-  name = camelCaseToDashCase(name.replace(/[$@]/g, "_"));
-  return `ng-reflect-${name}`;
-}
-var CAMEL_CASE_REGEXP = /([A-Z])/g;
-function camelCaseToDashCase(input2) {
-  return input2.replace(CAMEL_CASE_REGEXP, (...m) => "-" + m[1].toLowerCase());
-}
-function normalizeDebugBindingValue(value) {
-  try {
-    return value != null ? value.toString().slice(0, 30) : value;
-  } catch (e) {
-    return "[ERROR] Exception while trying to serialize the value";
-  }
-}
-var CUSTOM_ELEMENTS_SCHEMA = {
-  name: "custom-elements"
-};
-var NO_ERRORS_SCHEMA = {
-  name: "no-errors-schema"
-};
-var shouldThrowErrorOnUnknownElement = false;
-function ɵsetUnknownElementStrictMode(shouldThrow) {
-  shouldThrowErrorOnUnknownElement = shouldThrow;
-}
-function ɵgetUnknownElementStrictMode() {
-  return shouldThrowErrorOnUnknownElement;
-}
-var shouldThrowErrorOnUnknownProperty = false;
-function ɵsetUnknownPropertyStrictMode(shouldThrow) {
-  shouldThrowErrorOnUnknownProperty = shouldThrow;
-}
-function ɵgetUnknownPropertyStrictMode() {
-  return shouldThrowErrorOnUnknownProperty;
-}
-function validateElementIsKnown(element, lView, tagName, schemas, hasDirectives) {
-  if (schemas === null) return;
-  if (!hasDirectives && tagName !== null) {
-    const isUnknown = (
-      // Note that we can't check for `typeof HTMLUnknownElement === 'function'` because
-      // Domino doesn't expose HTMLUnknownElement globally.
-      typeof HTMLUnknownElement !== "undefined" && HTMLUnknownElement && element instanceof HTMLUnknownElement || typeof customElements !== "undefined" && tagName.indexOf("-") > -1 && !customElements.get(tagName)
-    );
-    if (isUnknown && !matchingSchemas(schemas, tagName)) {
-      const isHostStandalone = isHostComponentStandalone(lView);
-      const templateLocation = getTemplateLocationDetails(lView);
-      const schemas2 = `'${isHostStandalone ? "@Component" : "@NgModule"}.schemas'`;
-      let message = `'${tagName}' is not a known element${templateLocation}:
-`;
-      message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? "included in the '@Component.imports' of this component" : "a part of an @NgModule where this component is declared"}.
-`;
-      if (tagName && tagName.indexOf("-") > -1) {
-        message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas2} of this component to suppress this message.`;
-      } else {
-        message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas2} of this component.`;
-      }
-      if (shouldThrowErrorOnUnknownElement) {
-        throw new RuntimeError(304, message);
-      } else {
-        console.error(formatRuntimeError(304, message));
-      }
-    }
-  }
-}
-function isPropertyValid(element, propName, tagName, schemas) {
-  if (schemas === null) return true;
-  if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {
-    return true;
-  }
-  return typeof Node === "undefined" || Node === null || !(element instanceof Node);
-}
-function handleUnknownPropertyError(propName, tagName, nodeType, lView) {
-  if (!tagName && nodeType === 4) {
-    tagName = "ng-template";
-  }
-  const isHostStandalone = isHostComponentStandalone(lView);
-  const templateLocation = getTemplateLocationDetails(lView);
-  let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;
-  const schemas = `'${isHostStandalone ? "@Component" : "@NgModule"}.schemas'`;
-  const importLocation = isHostStandalone ? "included in the '@Component.imports' of this component" : "a part of an @NgModule where this component is declared";
-  if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {
-    const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);
-    message += `
-If the '${propName}' is an Angular control flow directive, please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;
-  } else {
-    message += `
-1. If '${tagName}' is an Angular component and it has the '${propName}' input, then verify that it is ${importLocation}.`;
-    if (tagName && tagName.indexOf("-") > -1) {
-      message += `
-2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;
-      message += `
-3. To allow any property add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;
-    } else {
-      message += `
-2. To allow any property add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;
-    }
-  }
-  reportUnknownPropertyError(message);
-}
-function reportUnknownPropertyError(message) {
-  if (shouldThrowErrorOnUnknownProperty) {
-    throw new RuntimeError(303, message);
-  } else {
-    console.error(formatRuntimeError(303, message));
-  }
-}
-function getDeclarationComponentDef(lView) {
-  !ngDevMode && throwError("Must never be called in production mode");
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context = declarationLView[CONTEXT];
-  if (!context) return null;
-  return context.constructor ? getComponentDef(context.constructor) : null;
-}
-function isHostComponentStandalone(lView) {
-  !ngDevMode && throwError("Must never be called in production mode");
-  const componentDef = getDeclarationComponentDef(lView);
-  return !!componentDef?.standalone;
-}
-function getTemplateLocationDetails(lView) {
-  !ngDevMode && throwError("Must never be called in production mode");
-  const hostComponentDef = getDeclarationComponentDef(lView);
-  const componentClassName = hostComponentDef?.type?.name;
-  return componentClassName ? ` (used in the '${componentClassName}' component template)` : "";
-}
-var KNOWN_CONTROL_FLOW_DIRECTIVES = /* @__PURE__ */ new Map([["ngIf", "NgIf"], ["ngFor", "NgFor"], ["ngSwitchCase", "NgSwitchCase"], ["ngSwitchDefault", "NgSwitchDefault"]]);
-function matchingSchemas(schemas, tagName) {
-  if (schemas !== null) {
-    for (let i = 0; i < schemas.length; i++) {
-      const schema = schemas[i];
-      if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf("-") > -1) {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function ɵɵresolveWindow(element) {
-  return element.ownerDocument.defaultView;
-}
-function ɵɵresolveDocument(element) {
-  return element.ownerDocument;
-}
-function ɵɵresolveBody(element) {
-  return element.ownerDocument.body;
-}
-var INTERPOLATION_DELIMITER = `�`;
-function maybeUnwrapFn(value) {
-  if (value instanceof Function) {
-    return value();
-  } else {
-    return value;
-  }
-}
-var VALUE_STRING_LENGTH_LIMIT = 200;
-function assertStandaloneComponentType(type) {
-  assertComponentDef(type);
-  const componentDef = getComponentDef(type);
-  if (!componentDef.standalone) {
-    throw new RuntimeError(907, `The ${stringifyForError(type)} component is not marked as standalone, but Angular expects to have a standalone component here. Please make sure the ${stringifyForError(type)} component has the \`standalone: true\` flag in the decorator.`);
-  }
-}
-function assertComponentDef(type) {
-  if (!getComponentDef(type)) {
-    throw new RuntimeError(906, `The ${stringifyForError(type)} is not an Angular component, make sure it has the \`@Component\` decorator.`);
-  }
-}
-function throwMultipleComponentError(tNode, first, second) {
-  throw new RuntimeError(-300, `Multiple components match node with tagname ${tNode.value}: ${stringifyForError(first)} and ${stringifyForError(second)}`);
-}
-function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {
-  const hostComponentDef = getDeclarationComponentDef(lView);
-  const componentClassName = hostComponentDef?.type?.name;
-  const field = propName ? ` for '${propName}'` : "";
-  let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ""}`;
-  if (creationMode) {
-    msg += ` It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook?`;
-  }
-  throw new RuntimeError(-100, msg);
-}
-function formatValue(value) {
-  let strValue = String(value);
-  try {
-    if (Array.isArray(value) || strValue === "[object Object]") {
-      strValue = JSON.stringify(value);
-    }
-  } catch (error) {
-  }
-  return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + "…" : strValue;
-}
-function constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {
-  const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);
-  let oldValue = prefix, newValue = prefix;
-  for (let i = 0; i < chunks.length; i++) {
-    const slotIdx = rootIndex + i;
-    oldValue += `${lView[slotIdx]}${chunks[i]}`;
-    newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;
-  }
-  return {
-    propName,
-    oldValue,
-    newValue
-  };
-}
-function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {
-  const tData = lView[TVIEW].data;
-  const metadata = tData[bindingIndex];
-  if (typeof metadata === "string") {
-    if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {
-      return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);
-    }
-    return {
-      propName: metadata,
-      oldValue,
-      newValue
-    };
-  }
-  if (metadata === null) {
-    let idx = bindingIndex - 1;
-    while (typeof tData[idx] !== "string" && tData[idx + 1] === null) {
-      idx--;
-    }
-    const meta = tData[idx];
-    if (typeof meta === "string") {
-      const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, "g"));
-      if (matches && matches.length - 1 > bindingIndex - idx) {
-        return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);
-      }
-    }
-  }
-  return {
-    propName: void 0,
-    oldValue,
-    newValue
-  };
-}
-var InputFlags;
-(function(InputFlags2) {
-  InputFlags2[InputFlags2["None"] = 0] = "None";
-  InputFlags2[InputFlags2["SignalBased"] = 1] = "SignalBased";
-  InputFlags2[InputFlags2["HasDecoratorInputTransform"] = 2] = "HasDecoratorInputTransform";
-})(InputFlags || (InputFlags = {}));
-var RendererStyleFlags2;
-(function(RendererStyleFlags22) {
-  RendererStyleFlags22[RendererStyleFlags22["Important"] = 1] = "Important";
-  RendererStyleFlags22[RendererStyleFlags22["DashCase"] = 2] = "DashCase";
-})(RendererStyleFlags2 || (RendererStyleFlags2 = {}));
-var _icuContainerIterate;
-function icuContainerIterate(tIcuContainerNode, lView) {
-  return _icuContainerIterate(tIcuContainerNode, lView);
-}
-function ensureIcuContainerVisitorLoaded(loader) {
-  if (_icuContainerIterate === void 0) {
-    _icuContainerIterate = loader();
-  }
-}
-function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
-  if (lNodeToHandle != null) {
-    let lContainer;
-    let isComponent2 = false;
-    if (isLContainer(lNodeToHandle)) {
-      lContainer = lNodeToHandle;
-    } else if (isLView(lNodeToHandle)) {
-      isComponent2 = true;
-      ngDevMode && assertDefined(lNodeToHandle[HOST], "HOST must be defined for a component LView");
-      lNodeToHandle = lNodeToHandle[HOST];
-    }
-    const rNode = unwrapRNode(lNodeToHandle);
-    if (action === 0 && parent !== null) {
-      if (beforeNode == null) {
-        nativeAppendChild(renderer, parent, rNode);
-      } else {
-        nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
-      }
-    } else if (action === 1 && parent !== null) {
-      nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
-    } else if (action === 2) {
-      nativeRemoveNode(renderer, rNode, isComponent2);
-    } else if (action === 3) {
-      ngDevMode && ngDevMode.rendererDestroyNode++;
-      renderer.destroyNode(rNode);
-    }
-    if (lContainer != null) {
-      applyContainer(renderer, action, lContainer, parent, beforeNode);
-    }
-  }
-}
-function createTextNode(renderer, value) {
-  ngDevMode && ngDevMode.rendererCreateTextNode++;
-  ngDevMode && ngDevMode.rendererSetText++;
-  return renderer.createText(value);
-}
-function updateTextNode(renderer, rNode, value) {
-  ngDevMode && ngDevMode.rendererSetText++;
-  renderer.setValue(rNode, value);
-}
-function createCommentNode(renderer, value) {
-  ngDevMode && ngDevMode.rendererCreateComment++;
-  return renderer.createComment(escapeCommentText(value));
-}
-function createElementNode(renderer, name, namespace) {
-  ngDevMode && ngDevMode.rendererCreateElement++;
-  return renderer.createElement(name, namespace);
-}
-function removeViewFromDOM(tView, lView) {
-  detachViewFromDOM(tView, lView);
-  lView[HOST] = null;
-  lView[T_HOST] = null;
-}
-function addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
-  lView[HOST] = parentNativeNode;
-  lView[T_HOST] = parentTNode;
-  applyView(tView, lView, renderer, 1, parentNativeNode, beforeNode);
-}
-function detachViewFromDOM(tView, lView) {
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(
-    10
-    /* NotificationSource.ViewDetachedFromDOM */
-  );
-  applyView(tView, lView, lView[RENDERER], 2, null, null);
-}
-function destroyViewTree(rootView) {
-  let lViewOrLContainer = rootView[CHILD_HEAD];
-  if (!lViewOrLContainer) {
-    return cleanUpView(rootView[TVIEW], rootView);
-  }
-  while (lViewOrLContainer) {
-    let next = null;
-    if (isLView(lViewOrLContainer)) {
-      next = lViewOrLContainer[CHILD_HEAD];
-    } else {
-      ngDevMode && assertLContainer(lViewOrLContainer);
-      const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];
-      if (firstView) next = firstView;
-    }
-    if (!next) {
-      while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {
-        if (isLView(lViewOrLContainer)) {
-          cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
-        }
-        lViewOrLContainer = lViewOrLContainer[PARENT];
-      }
-      if (lViewOrLContainer === null) lViewOrLContainer = rootView;
-      if (isLView(lViewOrLContainer)) {
-        cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
-      }
-      next = lViewOrLContainer && lViewOrLContainer[NEXT];
-    }
-    lViewOrLContainer = next;
-  }
-}
-function insertView(tView, lView, lContainer, index) {
-  ngDevMode && assertLView(lView);
-  ngDevMode && assertLContainer(lContainer);
-  const indexInContainer = CONTAINER_HEADER_OFFSET + index;
-  const containerLength = lContainer.length;
-  if (index > 0) {
-    lContainer[indexInContainer - 1][NEXT] = lView;
-  }
-  if (index < containerLength - CONTAINER_HEADER_OFFSET) {
-    lView[NEXT] = lContainer[indexInContainer];
-    addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);
-  } else {
-    lContainer.push(lView);
-    lView[NEXT] = null;
-  }
-  lView[PARENT] = lContainer;
-  const declarationLContainer = lView[DECLARATION_LCONTAINER];
-  if (declarationLContainer !== null && lContainer !== declarationLContainer) {
-    trackMovedView(declarationLContainer, lView);
-  }
-  const lQueries = lView[QUERIES];
-  if (lQueries !== null) {
-    lQueries.insertView(tView);
-  }
-  updateAncestorTraversalFlagsOnAttach(lView);
-  lView[FLAGS] |= 128;
-}
-function trackMovedView(declarationContainer, lView) {
-  ngDevMode && assertDefined(lView, "LView required");
-  ngDevMode && assertLContainer(declarationContainer);
-  const movedViews = declarationContainer[MOVED_VIEWS];
-  const parent = lView[PARENT];
-  ngDevMode && assertDefined(parent, "missing parent");
-  if (isLView(parent)) {
-    declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;
-  } else {
-    const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];
-    ngDevMode && assertDefined(insertedComponentLView, "Missing insertedComponentLView");
-    const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];
-    ngDevMode && assertDefined(declaredComponentLView, "Missing declaredComponentLView");
-    if (declaredComponentLView !== insertedComponentLView) {
-      declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;
-    }
-  }
-  if (movedViews === null) {
-    declarationContainer[MOVED_VIEWS] = [lView];
-  } else {
-    movedViews.push(lView);
-  }
-}
-function detachMovedView(declarationContainer, lView) {
-  ngDevMode && assertLContainer(declarationContainer);
-  ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], "A projected view should belong to a non-empty projected views collection");
-  const movedViews = declarationContainer[MOVED_VIEWS];
-  const declarationViewIndex = movedViews.indexOf(lView);
-  movedViews.splice(declarationViewIndex, 1);
-}
-function detachView(lContainer, removeIndex) {
-  if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;
-  const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;
-  const viewToDetach = lContainer[indexInContainer];
-  if (viewToDetach) {
-    const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];
-    if (declarationLContainer !== null && declarationLContainer !== lContainer) {
-      detachMovedView(declarationLContainer, viewToDetach);
-    }
-    if (removeIndex > 0) {
-      lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];
-    }
-    const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);
-    removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);
-    const lQueries = removedLView[QUERIES];
-    if (lQueries !== null) {
-      lQueries.detachView(removedLView[TVIEW]);
-    }
-    viewToDetach[PARENT] = null;
-    viewToDetach[NEXT] = null;
-    viewToDetach[FLAGS] &= ~128;
-  }
-  return viewToDetach;
-}
-function destroyLView(tView, lView) {
-  if (!(lView[FLAGS] & 256)) {
-    const renderer = lView[RENDERER];
-    if (renderer.destroyNode) {
-      applyView(tView, lView, renderer, 3, null, null);
-    }
-    destroyViewTree(lView);
-  }
-}
-function cleanUpView(tView, lView) {
-  if (lView[FLAGS] & 256) {
-    return;
-  }
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    lView[FLAGS] &= ~128;
-    lView[FLAGS] |= 256;
-    lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
-    executeOnDestroys(tView, lView);
-    processCleanups(tView, lView);
-    if (lView[TVIEW].type === 1) {
-      ngDevMode && ngDevMode.rendererDestroy++;
-      lView[RENDERER].destroy();
-    }
-    const declarationContainer = lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && isLContainer(lView[PARENT])) {
-      if (declarationContainer !== lView[PARENT]) {
-        detachMovedView(declarationContainer, lView);
-      }
-      const lQueries = lView[QUERIES];
-      if (lQueries !== null) {
-        lQueries.detachView(tView);
-      }
-    }
-    unregisterLView(lView);
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function processCleanups(tView, lView) {
-  ngDevMode && assertNotReactive(processCleanups.name);
-  const tCleanup = tView.cleanup;
-  const lCleanup = lView[CLEANUP];
-  if (tCleanup !== null) {
-    for (let i = 0; i < tCleanup.length - 1; i += 2) {
-      if (typeof tCleanup[i] === "string") {
-        const targetIdx = tCleanup[i + 3];
-        ngDevMode && assertNumber(targetIdx, "cleanup target must be a number");
-        if (targetIdx >= 0) {
-          lCleanup[targetIdx]();
-        } else {
-          lCleanup[-targetIdx].unsubscribe();
-        }
-        i += 2;
-      } else {
-        const context = lCleanup[tCleanup[i + 1]];
-        tCleanup[i].call(context);
-      }
-    }
-  }
-  if (lCleanup !== null) {
-    lView[CLEANUP] = null;
-  }
-  const destroyHooks = lView[ON_DESTROY_HOOKS];
-  if (destroyHooks !== null) {
-    lView[ON_DESTROY_HOOKS] = null;
-    for (let i = 0; i < destroyHooks.length; i++) {
-      const destroyHooksFn = destroyHooks[i];
-      ngDevMode && assertFunction(destroyHooksFn, "Expecting destroy hook to be a function.");
-      destroyHooksFn();
-    }
-  }
-  const effects = lView[EFFECTS];
-  if (effects !== null) {
-    lView[EFFECTS] = null;
-    for (const effect2 of effects) {
-      effect2.destroy();
-    }
-  }
-}
-function executeOnDestroys(tView, lView) {
-  ngDevMode && assertNotReactive(executeOnDestroys.name);
-  let destroyHooks;
-  if (tView != null && (destroyHooks = tView.destroyHooks) != null) {
-    for (let i = 0; i < destroyHooks.length; i += 2) {
-      const context = lView[destroyHooks[i]];
-      if (!(context instanceof NodeInjectorFactory)) {
-        const toCall = destroyHooks[i + 1];
-        if (Array.isArray(toCall)) {
-          for (let j = 0; j < toCall.length; j += 2) {
-            const callContext = context[toCall[j]];
-            const hook = toCall[j + 1];
-            profiler(4, callContext, hook);
-            try {
-              hook.call(callContext);
-            } finally {
-              profiler(5, callContext, hook);
-            }
-          }
-        } else {
-          profiler(4, context, toCall);
-          try {
-            toCall.call(context);
-          } finally {
-            profiler(5, context, toCall);
-          }
-        }
-      }
-    }
-  }
-}
-function getParentRElement(tView, tNode, lView) {
-  return getClosestRElement(tView, tNode.parent, lView);
-}
-function getClosestRElement(tView, tNode, lView) {
-  let parentTNode = tNode;
-  while (parentTNode !== null && parentTNode.type & (8 | 32 | 128)) {
-    tNode = parentTNode;
-    parentTNode = tNode.parent;
-  }
-  if (parentTNode === null) {
-    return lView[HOST];
-  } else {
-    ngDevMode && assertTNodeType(
-      parentTNode,
-      3 | 4
-      /* TNodeType.Container */
-    );
-    const {
-      componentOffset
-    } = parentTNode;
-    if (componentOffset > -1) {
-      ngDevMode && assertTNodeForLView(parentTNode, lView);
-      const {
-        encapsulation
-      } = tView.data[parentTNode.directiveStart + componentOffset];
-      if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {
-        return null;
-      }
-    }
-    return getNativeByTNode(parentTNode, lView);
-  }
-}
-function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
-  ngDevMode && ngDevMode.rendererInsertBefore++;
-  renderer.insertBefore(parent, child, beforeNode, isMove);
-}
-function nativeAppendChild(renderer, parent, child) {
-  ngDevMode && ngDevMode.rendererAppendChild++;
-  ngDevMode && assertDefined(parent, "parent node must be defined");
-  renderer.appendChild(parent, child);
-}
-function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
-  if (beforeNode !== null) {
-    nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
-  } else {
-    nativeAppendChild(renderer, parent, child);
-  }
-}
-function nativeParentNode(renderer, node) {
-  return renderer.parentNode(node);
-}
-function nativeNextSibling(renderer, node) {
-  return renderer.nextSibling(node);
-}
-function getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {
-  return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);
-}
-function getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {
-  if (parentTNode.type & (8 | 32)) {
-    return getNativeByTNode(parentTNode, lView);
-  }
-  return null;
-}
-var _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;
-var _processI18nInsertBefore;
-function setI18nHandling(getInsertInFrontOfRNodeWithI18n2, processI18nInsertBefore2) {
-  _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n2;
-  _processI18nInsertBefore = processI18nInsertBefore2;
-}
-function appendChild(tView, lView, childRNode, childTNode) {
-  const parentRNode = getParentRElement(tView, childTNode, lView);
-  const renderer = lView[RENDERER];
-  const parentTNode = childTNode.parent || lView[T_HOST];
-  const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);
-  if (parentRNode != null) {
-    if (Array.isArray(childRNode)) {
-      for (let i = 0; i < childRNode.length; i++) {
-        nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);
-      }
-    } else {
-      nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);
-    }
-  }
-  _processI18nInsertBefore !== void 0 && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);
-}
-function getFirstNativeNode(lView, tNode) {
-  if (tNode !== null) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 32 | 16 | 128
-      /* TNodeType.LetDeclaration */
-    );
-    const tNodeType = tNode.type;
-    if (tNodeType & 3) {
-      return getNativeByTNode(tNode, lView);
-    } else if (tNodeType & 4) {
-      return getBeforeNodeForView(-1, lView[tNode.index]);
-    } else if (tNodeType & 8) {
-      const elIcuContainerChild = tNode.child;
-      if (elIcuContainerChild !== null) {
-        return getFirstNativeNode(lView, elIcuContainerChild);
-      } else {
-        const rNodeOrLContainer = lView[tNode.index];
-        if (isLContainer(rNodeOrLContainer)) {
-          return getBeforeNodeForView(-1, rNodeOrLContainer);
-        } else {
-          return unwrapRNode(rNodeOrLContainer);
-        }
-      }
-    } else if (tNodeType & 128) {
-      return getFirstNativeNode(lView, tNode.next);
-    } else if (tNodeType & 32) {
-      let nextRNode = icuContainerIterate(tNode, lView);
-      let rNode = nextRNode();
-      return rNode || unwrapRNode(lView[tNode.index]);
-    } else {
-      const projectionNodes = getProjectionNodes(lView, tNode);
-      if (projectionNodes !== null) {
-        if (Array.isArray(projectionNodes)) {
-          return projectionNodes[0];
-        }
-        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
-        ngDevMode && assertParentView(parentView);
-        return getFirstNativeNode(parentView, projectionNodes);
-      } else {
-        return getFirstNativeNode(lView, tNode.next);
-      }
-    }
-  }
-  return null;
-}
-function getProjectionNodes(lView, tNode) {
-  if (tNode !== null) {
-    const componentView = lView[DECLARATION_COMPONENT_VIEW];
-    const componentHost = componentView[T_HOST];
-    const slotIdx = tNode.projection;
-    ngDevMode && assertProjectionSlots(lView);
-    return componentHost.projection[slotIdx];
-  }
-  return null;
-}
-function getBeforeNodeForView(viewIndexInContainer, lContainer) {
-  const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;
-  if (nextViewIndex < lContainer.length) {
-    const lView = lContainer[nextViewIndex];
-    const firstTNodeOfView = lView[TVIEW].firstChild;
-    if (firstTNodeOfView !== null) {
-      return getFirstNativeNode(lView, firstTNodeOfView);
-    }
-  }
-  return lContainer[NATIVE];
-}
-function nativeRemoveNode(renderer, rNode, isHostElement) {
-  ngDevMode && ngDevMode.rendererRemoveNode++;
-  renderer.removeChild(null, rNode, isHostElement);
-}
-function clearElementContents(rElement) {
-  rElement.textContent = "";
-}
-function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {
-  while (tNode != null) {
-    ngDevMode && assertTNodeForLView(tNode, lView);
-    if (tNode.type === 128) {
-      tNode = tNode.next;
-      continue;
-    }
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 16 | 32
-      /* TNodeType.Icu */
-    );
-    const rawSlotValue = lView[tNode.index];
-    const tNodeType = tNode.type;
-    if (isProjection) {
-      if (action === 0) {
-        rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);
-        tNode.flags |= 2;
-      }
-    }
-    if ((tNode.flags & 32) !== 32) {
-      if (tNodeType & 8) {
-        applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      } else if (tNodeType & 32) {
-        const nextRNode = icuContainerIterate(tNode, lView);
-        let rNode;
-        while (rNode = nextRNode()) {
-          applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
-        }
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      } else if (tNodeType & 16) {
-        applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);
-      } else {
-        ngDevMode && assertTNodeType(
-          tNode,
-          3 | 4
-          /* TNodeType.Container */
-        );
-        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
-      }
-    }
-    tNode = isProjection ? tNode.projectionNext : tNode.next;
-  }
-}
-function applyView(tView, lView, renderer, action, parentRElement, beforeNode) {
-  applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);
-}
-function applyProjection(tView, lView, tProjectionNode) {
-  const renderer = lView[RENDERER];
-  const parentRNode = getParentRElement(tView, tProjectionNode, lView);
-  const parentTNode = tProjectionNode.parent || lView[T_HOST];
-  let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);
-  applyProjectionRecursive(renderer, 0, lView, tProjectionNode, parentRNode, beforeNode);
-}
-function applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {
-  const componentLView = lView[DECLARATION_COMPONENT_VIEW];
-  const componentNode = componentLView[T_HOST];
-  ngDevMode && assertEqual(typeof tProjectionNode.projection, "number", "expecting projection index");
-  const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];
-  if (Array.isArray(nodeToProjectOrRNodes)) {
-    for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {
-      const rNode = nodeToProjectOrRNodes[i];
-      applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
-    }
-  } else {
-    let nodeToProject = nodeToProjectOrRNodes;
-    const projectedComponentLView = componentLView[PARENT];
-    if (hasInSkipHydrationBlockFlag(tProjectionNode)) {
-      nodeToProject.flags |= 128;
-    }
-    applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);
-  }
-}
-function applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {
-  ngDevMode && assertLContainer(lContainer);
-  const anchor = lContainer[NATIVE];
-  const native = unwrapRNode(lContainer);
-  if (anchor !== native) {
-    applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);
-  }
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const lView = lContainer[i];
-    applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);
-  }
-}
-function applyStyling(renderer, isClassBased, rNode, prop, value) {
-  if (isClassBased) {
-    if (!value) {
-      ngDevMode && ngDevMode.rendererRemoveClass++;
-      renderer.removeClass(rNode, prop);
-    } else {
-      ngDevMode && ngDevMode.rendererAddClass++;
-      renderer.addClass(rNode, prop);
-    }
-  } else {
-    let flags = prop.indexOf("-") === -1 ? void 0 : RendererStyleFlags2.DashCase;
-    if (value == null) {
-      ngDevMode && ngDevMode.rendererRemoveStyle++;
-      renderer.removeStyle(rNode, prop, flags);
-    } else {
-      const isImportant = typeof value === "string" ? value.endsWith("!important") : false;
-      if (isImportant) {
-        value = value.slice(0, -10);
-        flags |= RendererStyleFlags2.Important;
-      }
-      ngDevMode && ngDevMode.rendererSetStyle++;
-      renderer.setStyle(rNode, prop, value, flags);
-    }
-  }
-}
-function writeDirectStyle(renderer, element, newValue) {
-  ngDevMode && assertString(newValue, "'newValue' should be a string");
-  renderer.setAttribute(element, "style", newValue);
-  ngDevMode && ngDevMode.rendererSetStyle++;
-}
-function writeDirectClass(renderer, element, newValue) {
-  ngDevMode && assertString(newValue, "'newValue' should be a string");
-  if (newValue === "") {
-    renderer.removeAttribute(element, "class");
-  } else {
-    renderer.setAttribute(element, "class", newValue);
-  }
-  ngDevMode && ngDevMode.rendererSetClassName++;
-}
-function setupStaticAttributes(renderer, element, tNode) {
-  const {
-    mergedAttrs,
-    classes,
-    styles
-  } = tNode;
-  if (mergedAttrs !== null) {
-    setUpAttributes(renderer, element, mergedAttrs);
-  }
-  if (classes !== null) {
-    writeDirectClass(renderer, element, classes);
-  }
-  if (styles !== null) {
-    writeDirectStyle(renderer, element, styles);
-  }
-}
-function classIndexOf(className, classToSearch, startingIndex) {
-  ngDevMode && assertNotEqual(classToSearch, "", 'can not look for "" string.');
-  let end = className.length;
-  while (true) {
-    const foundIndex = className.indexOf(classToSearch, startingIndex);
-    if (foundIndex === -1) return foundIndex;
-    if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32) {
-      const length = classToSearch.length;
-      if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32) {
-        return foundIndex;
-      }
-    }
-    startingIndex = foundIndex + 1;
-  }
-}
-var NG_TEMPLATE_SELECTOR = "ng-template";
-function isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {
-  ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), "Class name expected to be lowercase.");
-  let i = 0;
-  if (isProjectionMode) {
-    for (; i < attrs.length && typeof attrs[i] === "string"; i += 2) {
-      if (attrs[i] === "class" && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {
-        return true;
-      }
-    }
-  } else if (isInlineTemplate(tNode)) {
-    return false;
-  }
-  i = attrs.indexOf(1, i);
-  if (i > -1) {
-    let item;
-    while (++i < attrs.length && typeof (item = attrs[i]) === "string") {
-      if (item.toLowerCase() === cssClassToMatch) {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function isInlineTemplate(tNode) {
-  return tNode.type === 4 && tNode.value !== NG_TEMPLATE_SELECTOR;
-}
-function hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {
-  const tagNameToCompare = tNode.type === 4 && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;
-  return currentSelector === tagNameToCompare;
-}
-function isNodeMatchingSelector(tNode, selector, isProjectionMode) {
-  ngDevMode && assertDefined(selector[0], "Selector should have a tag name");
-  let mode = 4;
-  const nodeAttrs = tNode.attrs;
-  const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;
-  let skipToNextSelector = false;
-  for (let i = 0; i < selector.length; i++) {
-    const current = selector[i];
-    if (typeof current === "number") {
-      if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {
-        return false;
-      }
-      if (skipToNextSelector && isPositive(current)) continue;
-      skipToNextSelector = false;
-      mode = current | mode & 1;
-      continue;
-    }
-    if (skipToNextSelector) continue;
-    if (mode & 4) {
-      mode = 2 | mode & 1;
-      if (current !== "" && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === "" && selector.length === 1) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-      }
-    } else if (mode & 8) {
-      if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-      }
-    } else {
-      const selectorAttrValue = selector[++i];
-      const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);
-      if (attrIndexInNode === -1) {
-        if (isPositive(mode)) return false;
-        skipToNextSelector = true;
-        continue;
-      }
-      if (selectorAttrValue !== "") {
-        let nodeAttrValue;
-        if (attrIndexInNode > nameOnlyMarkerIdx) {
-          nodeAttrValue = "";
-        } else {
-          ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0, "We do not match directives on namespaced attributes");
-          nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();
-        }
-        if (mode & 2 && selectorAttrValue !== nodeAttrValue) {
-          if (isPositive(mode)) return false;
-          skipToNextSelector = true;
-        }
-      }
-    }
-  }
-  return isPositive(mode) || skipToNextSelector;
-}
-function isPositive(mode) {
-  return (mode & 1) === 0;
-}
-function findAttrIndexInNode(name, attrs, isInlineTemplate2, isProjectionMode) {
-  if (attrs === null) return -1;
-  let i = 0;
-  if (isProjectionMode || !isInlineTemplate2) {
-    let bindingsMode = false;
-    while (i < attrs.length) {
-      const maybeAttrName = attrs[i];
-      if (maybeAttrName === name) {
-        return i;
-      } else if (maybeAttrName === 3 || maybeAttrName === 6) {
-        bindingsMode = true;
-      } else if (maybeAttrName === 1 || maybeAttrName === 2) {
-        let value = attrs[++i];
-        while (typeof value === "string") {
-          value = attrs[++i];
-        }
-        continue;
-      } else if (maybeAttrName === 4) {
-        break;
-      } else if (maybeAttrName === 0) {
-        i += 4;
-        continue;
-      }
-      i += bindingsMode ? 1 : 2;
-    }
-    return -1;
-  } else {
-    return matchTemplateAttribute(attrs, name);
-  }
-}
-function isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {
-  for (let i = 0; i < selector.length; i++) {
-    if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {
-      return true;
-    }
-  }
-  return false;
-}
-function getProjectAsAttrValue(tNode) {
-  const nodeAttrs = tNode.attrs;
-  if (nodeAttrs != null) {
-    const ngProjectAsAttrIdx = nodeAttrs.indexOf(
-      5
-      /* AttributeMarker.ProjectAs */
-    );
-    if ((ngProjectAsAttrIdx & 1) === 0) {
-      return nodeAttrs[ngProjectAsAttrIdx + 1];
-    }
-  }
-  return null;
-}
-function getNameOnlyMarkerIndex(nodeAttrs) {
-  for (let i = 0; i < nodeAttrs.length; i++) {
-    const nodeAttr = nodeAttrs[i];
-    if (isNameOnlyAttributeMarker(nodeAttr)) {
-      return i;
-    }
-  }
-  return nodeAttrs.length;
-}
-function matchTemplateAttribute(attrs, name) {
-  let i = attrs.indexOf(
-    4
-    /* AttributeMarker.Template */
-  );
-  if (i > -1) {
-    i++;
-    while (i < attrs.length) {
-      const attr = attrs[i];
-      if (typeof attr === "number") return -1;
-      if (attr === name) return i;
-      i++;
-    }
-  }
-  return -1;
-}
-function isSelectorInSelectorList(selector, list) {
-  selectorListLoop: for (let i = 0; i < list.length; i++) {
-    const currentSelectorInList = list[i];
-    if (selector.length !== currentSelectorInList.length) {
-      continue;
-    }
-    for (let j = 0; j < selector.length; j++) {
-      if (selector[j] !== currentSelectorInList[j]) {
-        continue selectorListLoop;
-      }
-    }
-    return true;
-  }
-  return false;
-}
-function maybeWrapInNotSelector(isNegativeMode, chunk) {
-  return isNegativeMode ? ":not(" + chunk.trim() + ")" : chunk;
-}
-function stringifyCSSSelector(selector) {
-  let result = selector[0];
-  let i = 1;
-  let mode = 2;
-  let currentChunk = "";
-  let isNegativeMode = false;
-  while (i < selector.length) {
-    let valueOrMarker = selector[i];
-    if (typeof valueOrMarker === "string") {
-      if (mode & 2) {
-        const attrValue = selector[++i];
-        currentChunk += "[" + valueOrMarker + (attrValue.length > 0 ? '="' + attrValue + '"' : "") + "]";
-      } else if (mode & 8) {
-        currentChunk += "." + valueOrMarker;
-      } else if (mode & 4) {
-        currentChunk += " " + valueOrMarker;
-      }
-    } else {
-      if (currentChunk !== "" && !isPositive(valueOrMarker)) {
-        result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
-        currentChunk = "";
-      }
-      mode = valueOrMarker;
-      isNegativeMode = isNegativeMode || !isPositive(mode);
-    }
-    i++;
-  }
-  if (currentChunk !== "") {
-    result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
-  }
-  return result;
-}
-function stringifyCSSSelectorList(selectorList) {
-  return selectorList.map(stringifyCSSSelector).join(",");
-}
-function extractAttrsAndClassesFromSelector(selector) {
-  const attrs = [];
-  const classes = [];
-  let i = 1;
-  let mode = 2;
-  while (i < selector.length) {
-    let valueOrMarker = selector[i];
-    if (typeof valueOrMarker === "string") {
-      if (mode === 2) {
-        if (valueOrMarker !== "") {
-          attrs.push(valueOrMarker, selector[++i]);
-        }
-      } else if (mode === 8) {
-        classes.push(valueOrMarker);
-      }
-    } else {
-      if (!isPositive(mode)) break;
-      mode = valueOrMarker;
-    }
-    i++;
-  }
-  return {
-    attrs,
-    classes
-  };
-}
-var NO_CHANGE = typeof ngDevMode === "undefined" || ngDevMode ? {
-  __brand__: "NO_CHANGE"
-} : {};
-function ɵɵadvance(delta = 1) {
-  ngDevMode && assertGreaterThan(delta, 0, "Can only advance forward");
-  selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
-}
-function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
-  ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);
-  if (!checkNoChangesMode) {
-    const hooksInitPhaseCompleted = (lView[FLAGS] & 3) === 3;
-    if (hooksInitPhaseCompleted) {
-      const preOrderCheckHooks = tView.preOrderCheckHooks;
-      if (preOrderCheckHooks !== null) {
-        executeCheckHooks(lView, preOrderCheckHooks, index);
-      }
-    } else {
-      const preOrderHooks = tView.preOrderHooks;
-      if (preOrderHooks !== null) {
-        executeInitAndCheckHooks(lView, preOrderHooks, 0, index);
-      }
-    }
-  }
-  setSelectedIndex(index);
-}
-function ɵɵdirectiveInject(token, flags = InjectFlags.Default) {
-  const lView = getLView();
-  if (lView === null) {
-    ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
-    return ɵɵinject(token, flags);
-  }
-  const tNode = getCurrentTNode();
-  const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
-  ngDevMode && emitInjectEvent(token, value, flags);
-  return value;
-}
-function ɵɵinvalidFactory() {
-  const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : "invalid";
-  throw new Error(msg);
-}
-function writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    let inputSignalNode = null;
-    if ((flags & InputFlags.SignalBased) !== 0) {
-      const field = instance[privateName];
-      inputSignalNode = field[SIGNAL];
-    }
-    if (inputSignalNode !== null && inputSignalNode.transformFn !== void 0) {
-      value = inputSignalNode.transformFn(value);
-    }
-    if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {
-      value = def.inputTransforms[privateName].call(instance, value);
-    }
-    if (def.setInput !== null) {
-      def.setInput(instance, inputSignalNode, value, publicName, privateName);
-    } else {
-      applyValueToInputField(instance, inputSignalNode, privateName, value);
-    }
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function processHostBindingOpCodes(tView, lView) {
-  const hostBindingOpCodes = tView.hostBindingOpCodes;
-  if (hostBindingOpCodes === null) return;
-  try {
-    for (let i = 0; i < hostBindingOpCodes.length; i++) {
-      const opCode = hostBindingOpCodes[i];
-      if (opCode < 0) {
-        setSelectedIndex(~opCode);
-      } else {
-        const directiveIdx = opCode;
-        const bindingRootIndx = hostBindingOpCodes[++i];
-        const hostBindingFn = hostBindingOpCodes[++i];
-        setBindingRootForHostBindings(bindingRootIndx, directiveIdx);
-        const context = lView[directiveIdx];
-        hostBindingFn(2, context);
-      }
-    }
-  } finally {
-    setSelectedIndex(-1);
-  }
-}
-function createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {
-  const lView = tView.blueprint.slice();
-  lView[HOST] = host;
-  lView[FLAGS] = flags | 4 | 128 | 8 | 64 | 1024;
-  if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048) {
-    lView[FLAGS] |= 2048;
-  }
-  resetPreOrderHookFlags(lView);
-  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
-  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
-  lView[CONTEXT] = context;
-  lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];
-  ngDevMode && assertDefined(lView[ENVIRONMENT], "LViewEnvironment is required");
-  lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];
-  ngDevMode && assertDefined(lView[RENDERER], "Renderer is required");
-  lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;
-  lView[T_HOST] = tHostNode;
-  lView[ID] = getUniqueLViewId();
-  lView[HYDRATION] = hydrationInfo;
-  lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
-  ngDevMode && assertEqual(tView.type == 2 ? parentLView !== null : true, true, "Embedded views must have parentLView");
-  lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
-  return lView;
-}
-function getOrCreateTNode(tView, index, type, name, attrs) {
-  ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
-  // `view_engine_compatibility` for additional context.
-  assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
-  ngDevMode && assertPureTNodeType(type);
-  let tNode = tView.data[index];
-  if (tNode === null) {
-    tNode = createTNodeAtIndex(tView, index, type, name, attrs);
-    if (isInI18nBlock()) {
-      tNode.flags |= 32;
-    }
-  } else if (tNode.type & 64) {
-    tNode.type = type;
-    tNode.value = name;
-    tNode.attrs = attrs;
-    const parent = getCurrentParentTNode();
-    tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
-    ngDevMode && assertTNodeForTView(tNode, tView);
-    ngDevMode && assertEqual(index, tNode.index, "Expecting same index");
-  }
-  setCurrentTNode(tNode, true);
-  return tNode;
-}
-function createTNodeAtIndex(tView, index, type, name, attrs) {
-  const currentTNode = getCurrentTNodePlaceholderOk();
-  const isParent = isCurrentTNodeParent();
-  const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;
-  const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);
-  if (tView.firstChild === null) {
-    tView.firstChild = tNode;
-  }
-  if (currentTNode !== null) {
-    if (isParent) {
-      if (currentTNode.child == null && tNode.parent !== null) {
-        currentTNode.child = tNode;
-      }
-    } else {
-      if (currentTNode.next === null) {
-        currentTNode.next = tNode;
-        tNode.prev = currentTNode;
-      }
-    }
-  }
-  return tNode;
-}
-function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
-  if (numSlotsToAlloc === 0) return -1;
-  if (ngDevMode) {
-    assertFirstCreatePass(tView);
-    assertSame(tView, lView[TVIEW], "`LView` must be associated with `TView`!");
-    assertEqual(tView.data.length, lView.length, "Expecting LView to be same size as TView");
-    assertEqual(tView.data.length, tView.blueprint.length, "Expecting Blueprint to be same size as TView");
-    assertFirstUpdatePass(tView);
-  }
-  const allocIdx = lView.length;
-  for (let i = 0; i < numSlotsToAlloc; i++) {
-    lView.push(initialValue);
-    tView.blueprint.push(initialValue);
-    tView.data.push(null);
-  }
-  return allocIdx;
-}
-function executeTemplate(tView, lView, templateFn, rf, context) {
-  const prevSelectedIndex = getSelectedIndex();
-  const isUpdatePhase = rf & 2;
-  try {
-    setSelectedIndex(-1);
-    if (isUpdatePhase && lView.length > HEADER_OFFSET) {
-      selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());
-    }
-    const preHookType = isUpdatePhase ? 2 : 0;
-    profiler(preHookType, context);
-    templateFn(rf, context);
-  } finally {
-    setSelectedIndex(prevSelectedIndex);
-    const postHookType = isUpdatePhase ? 3 : 1;
-    profiler(postHookType, context);
-  }
-}
-function executeContentQueries(tView, tNode, lView) {
-  if (isContentQueryHost(tNode)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const start = tNode.directiveStart;
-      const end = tNode.directiveEnd;
-      for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
-        const def = tView.data[directiveIndex];
-        if (def.contentQueries) {
-          const directiveInstance = lView[directiveIndex];
-          ngDevMode && assertDefined(directiveIndex, "Incorrect reference to a directive defining a content query");
-          def.contentQueries(1, directiveInstance, directiveIndex);
-        }
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function createDirectivesInstances(tView, lView, tNode) {
-  if (!getBindingsEnabled()) return;
-  instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));
-  if ((tNode.flags & 64) === 64) {
-    invokeDirectivesHostBindings(tView, lView, tNode);
-  }
-}
-function saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {
-  const localNames = tNode.localNames;
-  if (localNames !== null) {
-    let localIndex = tNode.index + 1;
-    for (let i = 0; i < localNames.length; i += 2) {
-      const index = localNames[i + 1];
-      const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];
-      viewData[localIndex++] = value;
-    }
-  }
-}
-function getOrCreateComponentTView(def) {
-  const tView = def.tView;
-  if (tView === null || tView.incompleteFirstPass) {
-    const declTNode = null;
-    return def.tView = createTView(1, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);
-  }
-  return tView;
-}
-function createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {
-  ngDevMode && ngDevMode.tView++;
-  const bindingStartIndex = HEADER_OFFSET + decls;
-  const initialViewLength = bindingStartIndex + vars;
-  const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);
-  const consts = typeof constsOrFactory === "function" ? constsOrFactory() : constsOrFactory;
-  const tView = blueprint[TVIEW] = {
-    type,
-    blueprint,
-    template: templateFn,
-    queries: null,
-    viewQuery,
-    declTNode,
-    data: blueprint.slice().fill(null, bindingStartIndex),
-    bindingStartIndex,
-    expandoStartIndex: initialViewLength,
-    hostBindingOpCodes: null,
-    firstCreatePass: true,
-    firstUpdatePass: true,
-    staticViewQueries: false,
-    staticContentQueries: false,
-    preOrderHooks: null,
-    preOrderCheckHooks: null,
-    contentHooks: null,
-    contentCheckHooks: null,
-    viewHooks: null,
-    viewCheckHooks: null,
-    destroyHooks: null,
-    cleanup: null,
-    contentQueries: null,
-    components: null,
-    directiveRegistry: typeof directives === "function" ? directives() : directives,
-    pipeRegistry: typeof pipes === "function" ? pipes() : pipes,
-    firstChild: null,
-    schemas,
-    consts,
-    incompleteFirstPass: false,
-    ssrId
-  };
-  if (ngDevMode) {
-    Object.seal(tView);
-  }
-  return tView;
-}
-function createViewBlueprint(bindingStartIndex, initialViewLength) {
-  const blueprint = [];
-  for (let i = 0; i < initialViewLength; i++) {
-    blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);
-  }
-  return blueprint;
-}
-function locateHostElement(renderer, elementOrSelector, encapsulation, injector) {
-  const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);
-  const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom;
-  const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);
-  applyRootElementTransform(rootElement);
-  return rootElement;
-}
-function applyRootElementTransform(rootElement) {
-  _applyRootElementTransformImpl(rootElement);
-}
-var _applyRootElementTransformImpl = () => null;
-function applyRootElementTransformImpl(rootElement) {
-  if (hasSkipHydrationAttrOnRElement(rootElement)) {
-    clearElementContents(rootElement);
-  } else {
-    processTextNodeMarkersBeforeHydration(rootElement);
-  }
-}
-function enableApplyRootElementTransformImpl() {
-  _applyRootElementTransformImpl = applyRootElementTransformImpl;
-}
-function storeCleanupWithContext(tView, lView, context, cleanupFn) {
-  const lCleanup = getOrCreateLViewCleanup(lView);
-  ngDevMode && assertDefined(context, "Cleanup context is mandatory when registering framework-level destroy hooks");
-  lCleanup.push(context);
-  if (tView.firstCreatePass) {
-    getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);
-  } else {
-    if (ngDevMode) {
-      Object.freeze(getOrCreateTViewCleanup(tView));
-    }
-  }
-}
-function createTNode(tView, tParent, type, index, value, attrs) {
-  ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
-  // `view_engine_compatibility` for additional context.
-  assertGreaterThanOrEqual(index, HEADER_OFFSET, "TNodes can't be in the LView header.");
-  ngDevMode && assertNotSame(attrs, void 0, "'undefined' is not valid value for 'attrs'");
-  ngDevMode && ngDevMode.tNode++;
-  ngDevMode && tParent && assertTNodeForTView(tParent, tView);
-  let injectorIndex = tParent ? tParent.injectorIndex : -1;
-  let flags = 0;
-  if (isInSkipHydrationBlock$1()) {
-    flags |= 128;
-  }
-  const tNode = {
-    type,
-    index,
-    insertBeforeIndex: null,
-    injectorIndex,
-    directiveStart: -1,
-    directiveEnd: -1,
-    directiveStylingLast: -1,
-    componentOffset: -1,
-    propertyBindings: null,
-    flags,
-    providerIndexes: 0,
-    value,
-    attrs,
-    mergedAttrs: null,
-    localNames: null,
-    initialInputs: void 0,
-    inputs: null,
-    outputs: null,
-    tView: null,
-    next: null,
-    prev: null,
-    projectionNext: null,
-    child: null,
-    parent: tParent,
-    projection: null,
-    styles: null,
-    stylesWithoutHost: null,
-    residualStyles: void 0,
-    classes: null,
-    classesWithoutHost: null,
-    residualClasses: void 0,
-    classBindings: 0,
-    styleBindings: 0
-  };
-  if (ngDevMode) {
-    Object.seal(tNode);
-  }
-  return tNode;
-}
-function captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {
-  for (let publicName in aliasMap) {
-    if (!aliasMap.hasOwnProperty(publicName)) {
-      continue;
-    }
-    const value = aliasMap[publicName];
-    if (value === void 0) {
-      continue;
-    }
-    bindingsResult ??= {};
-    let internalName;
-    let inputFlags = InputFlags.None;
-    if (Array.isArray(value)) {
-      internalName = value[0];
-      inputFlags = value[1];
-    } else {
-      internalName = value;
-    }
-    let finalPublicName = publicName;
-    if (hostDirectiveAliasMap !== null) {
-      if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {
-        continue;
-      }
-      finalPublicName = hostDirectiveAliasMap[publicName];
-    }
-    if (mode === 0) {
-      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);
-    } else {
-      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);
-    }
-  }
-  return bindingsResult;
-}
-function addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {
-  let values;
-  if (bindings.hasOwnProperty(publicName)) {
-    (values = bindings[publicName]).push(directiveIndex, internalName);
-  } else {
-    values = bindings[publicName] = [directiveIndex, internalName];
-  }
-  if (inputFlags !== void 0) {
-    values.push(inputFlags);
-  }
-}
-function initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  const tViewData = tView.data;
-  const tNodeAttrs = tNode.attrs;
-  const inputsFromAttrs = [];
-  let inputsStore = null;
-  let outputsStore = null;
-  for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {
-    const directiveDef = tViewData[directiveIndex];
-    const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;
-    const aliasedInputs = aliasData ? aliasData.inputs : null;
-    const aliasedOutputs = aliasData ? aliasData.outputs : null;
-    inputsStore = captureNodeBindings(0, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);
-    outputsStore = captureNodeBindings(1, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);
-    const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode) ? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs) : null;
-    inputsFromAttrs.push(initialInputs);
-  }
-  if (inputsStore !== null) {
-    if (inputsStore.hasOwnProperty("class")) {
-      tNode.flags |= 8;
-    }
-    if (inputsStore.hasOwnProperty("style")) {
-      tNode.flags |= 16;
-    }
-  }
-  tNode.initialInputs = inputsFromAttrs;
-  tNode.inputs = inputsStore;
-  tNode.outputs = outputsStore;
-}
-function mapPropName(name) {
-  if (name === "class") return "className";
-  if (name === "for") return "htmlFor";
-  if (name === "formaction") return "formAction";
-  if (name === "innerHtml") return "innerHTML";
-  if (name === "readonly") return "readOnly";
-  if (name === "tabindex") return "tabIndex";
-  return name;
-}
-function elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {
-  ngDevMode && assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-  const element = getNativeByTNode(tNode, lView);
-  let inputData = tNode.inputs;
-  let dataValue;
-  if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {
-    setInputsForProperty(tView, lView, dataValue, propName, value);
-    if (isComponentHost(tNode)) markDirtyIfOnPush(lView, tNode.index);
-    if (ngDevMode) {
-      setNgReflectProperties(lView, element, tNode.type, dataValue, value);
-    }
-  } else if (tNode.type & 3) {
-    propName = mapPropName(propName);
-    if (ngDevMode) {
-      validateAgainstEventProperties(propName);
-      if (!isPropertyValid(element, propName, tNode.value, tView.schemas)) {
-        handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);
-      }
-      ngDevMode.rendererSetProperty++;
-    }
-    value = sanitizer != null ? sanitizer(value, tNode.value || "", propName) : value;
-    renderer.setProperty(element, propName, value);
-  } else if (tNode.type & 12) {
-    if (ngDevMode && !matchingSchemas(tView.schemas, tNode.value)) {
-      handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);
-    }
-  }
-}
-function markDirtyIfOnPush(lView, viewIndex) {
-  ngDevMode && assertLView(lView);
-  const childComponentLView = getComponentLViewByIndex(viewIndex, lView);
-  if (!(childComponentLView[FLAGS] & 16)) {
-    childComponentLView[FLAGS] |= 64;
-  }
-}
-function setNgReflectProperty(lView, element, type, attrName, value) {
-  const renderer = lView[RENDERER];
-  attrName = normalizeDebugBindingName(attrName);
-  const debugValue = normalizeDebugBindingValue(value);
-  if (type & 3) {
-    if (value == null) {
-      renderer.removeAttribute(element, attrName);
-    } else {
-      renderer.setAttribute(element, attrName, debugValue);
-    }
-  } else {
-    const textContent = escapeCommentText(`bindings=${JSON.stringify({
-      [attrName]: debugValue
-    }, null, 2)}`);
-    renderer.setValue(element, textContent);
-  }
-}
-function setNgReflectProperties(lView, element, type, dataValue, value) {
-  if (type & (3 | 4)) {
-    for (let i = 0; i < dataValue.length; i += 3) {
-      setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
-    }
-  }
-}
-function resolveDirectives(tView, lView, tNode, localRefs) {
-  ngDevMode && assertFirstCreatePass(tView);
-  if (getBindingsEnabled()) {
-    const exportsMap = localRefs === null ? null : {
-      "": -1
-    };
-    const matchResult = findDirectiveDefMatches(tView, tNode);
-    let directiveDefs;
-    let hostDirectiveDefs;
-    if (matchResult === null) {
-      directiveDefs = hostDirectiveDefs = null;
-    } else {
-      [directiveDefs, hostDirectiveDefs] = matchResult;
-    }
-    if (directiveDefs !== null) {
-      initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);
-    }
-    if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);
-  }
-  tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
-}
-function initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {
-  ngDevMode && assertFirstCreatePass(tView);
-  for (let i = 0; i < directives.length; i++) {
-    diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);
-  }
-  initTNodeFlags(tNode, tView.data.length, directives.length);
-  for (let i = 0; i < directives.length; i++) {
-    const def = directives[i];
-    if (def.providersResolver) def.providersResolver(def);
-  }
-  let preOrderHooksFound = false;
-  let preOrderCheckHooksFound = false;
-  let directiveIdx = allocExpando(tView, lView, directives.length, null);
-  ngDevMode && assertSame(directiveIdx, tNode.directiveStart, "TNode.directiveStart should point to just allocated space");
-  for (let i = 0; i < directives.length; i++) {
-    const def = directives[i];
-    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
-    configureViewWithDirective(tView, tNode, lView, directiveIdx, def);
-    saveNameToExportMap(directiveIdx, def, exportsMap);
-    if (def.contentQueries !== null) tNode.flags |= 4;
-    if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64;
-    const lifeCycleHooks = def.type.prototype;
-    if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
-      (tView.preOrderHooks ??= []).push(tNode.index);
-      preOrderHooksFound = true;
-    }
-    if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
-      (tView.preOrderCheckHooks ??= []).push(tNode.index);
-      preOrderCheckHooksFound = true;
-    }
-    directiveIdx++;
-  }
-  initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);
-}
-function registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {
-  ngDevMode && assertFirstCreatePass(tView);
-  const hostBindings = def.hostBindings;
-  if (hostBindings) {
-    let hostBindingOpCodes = tView.hostBindingOpCodes;
-    if (hostBindingOpCodes === null) {
-      hostBindingOpCodes = tView.hostBindingOpCodes = [];
-    }
-    const elementIndx = ~tNode.index;
-    if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
-      hostBindingOpCodes.push(elementIndx);
-    }
-    hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
-  }
-}
-function lastSelectedElementIdx(hostBindingOpCodes) {
-  let i = hostBindingOpCodes.length;
-  while (i > 0) {
-    const value = hostBindingOpCodes[--i];
-    if (typeof value === "number" && value < 0) {
-      return value;
-    }
-  }
-  return 0;
-}
-function instantiateAllDirectives(tView, lView, tNode, native) {
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  if (isComponentHost(tNode)) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3
-      /* TNodeType.AnyRNode */
-    );
-    addComponentLogic(lView, tNode, tView.data[start + tNode.componentOffset]);
-  }
-  if (!tView.firstCreatePass) {
-    getOrCreateNodeInjectorForNode(tNode, lView);
-  }
-  attachPatchData(native, lView);
-  const initialInputs = tNode.initialInputs;
-  for (let i = start; i < end; i++) {
-    const def = tView.data[i];
-    const directive = getNodeInjectable(lView, tView, i, tNode);
-    attachPatchData(directive, lView);
-    if (initialInputs !== null) {
-      setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);
-    }
-    if (isComponentDef(def)) {
-      const componentView = getComponentLViewByIndex(tNode.index, lView);
-      componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);
-    }
-  }
-}
-function invokeDirectivesHostBindings(tView, lView, tNode) {
-  const start = tNode.directiveStart;
-  const end = tNode.directiveEnd;
-  const elementIndex = tNode.index;
-  const currentDirectiveIndex = getCurrentDirectiveIndex();
-  try {
-    setSelectedIndex(elementIndex);
-    for (let dirIndex = start; dirIndex < end; dirIndex++) {
-      const def = tView.data[dirIndex];
-      const directive = lView[dirIndex];
-      setCurrentDirectiveIndex(dirIndex);
-      if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {
-        invokeHostBindingsInCreationMode(def, directive);
-      }
-    }
-  } finally {
-    setSelectedIndex(-1);
-    setCurrentDirectiveIndex(currentDirectiveIndex);
-  }
-}
-function invokeHostBindingsInCreationMode(def, directive) {
-  if (def.hostBindings !== null) {
-    def.hostBindings(1, directive);
-  }
-}
-function findDirectiveDefMatches(tView, tNode) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && assertTNodeType(
-    tNode,
-    3 | 12
-    /* TNodeType.AnyContainer */
-  );
-  const registry = tView.directiveRegistry;
-  let matches = null;
-  let hostDirectiveDefs = null;
-  if (registry) {
-    for (let i = 0; i < registry.length; i++) {
-      const def = registry[i];
-      if (isNodeMatchingSelectorList(
-        tNode,
-        def.selectors,
-        /* isProjectionMode */
-        false
-      )) {
-        matches || (matches = []);
-        if (isComponentDef(def)) {
-          if (ngDevMode) {
-            assertTNodeType(tNode, 2, `"${tNode.value}" tags cannot be used as component hosts. Please use a different tag to activate the ${stringify(def.type)} component.`);
-            if (isComponentHost(tNode)) {
-              throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);
-            }
-          }
-          if (def.findHostDirectiveDefs !== null) {
-            const hostDirectiveMatches = [];
-            hostDirectiveDefs = hostDirectiveDefs || /* @__PURE__ */ new Map();
-            def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);
-            matches.unshift(...hostDirectiveMatches, def);
-            const componentOffset = hostDirectiveMatches.length;
-            markAsComponentHost(tView, tNode, componentOffset);
-          } else {
-            matches.unshift(def);
-            markAsComponentHost(tView, tNode, 0);
-          }
-        } else {
-          hostDirectiveDefs = hostDirectiveDefs || /* @__PURE__ */ new Map();
-          def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);
-          matches.push(def);
-        }
-      }
-    }
-  }
-  ngDevMode && matches !== null && assertNoDuplicateDirectives(matches);
-  return matches === null ? null : [matches, hostDirectiveDefs];
-}
-function markAsComponentHost(tView, hostTNode, componentOffset) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && assertGreaterThan(componentOffset, -1, "componentOffset must be great than -1");
-  hostTNode.componentOffset = componentOffset;
-  (tView.components ??= []).push(hostTNode.index);
-}
-function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
-  if (localRefs) {
-    const localNames = tNode.localNames = [];
-    for (let i = 0; i < localRefs.length; i += 2) {
-      const index = exportsMap[localRefs[i + 1]];
-      if (index == null) throw new RuntimeError(-301, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);
-      localNames.push(localRefs[i], index);
-    }
-  }
-}
-function saveNameToExportMap(directiveIdx, def, exportsMap) {
-  if (exportsMap) {
-    if (def.exportAs) {
-      for (let i = 0; i < def.exportAs.length; i++) {
-        exportsMap[def.exportAs[i]] = directiveIdx;
-      }
-    }
-    if (isComponentDef(def)) exportsMap[""] = directiveIdx;
-  }
-}
-function initTNodeFlags(tNode, index, numberOfDirectives) {
-  ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, "Reached the max number of directives");
-  tNode.flags |= 1;
-  tNode.directiveStart = index;
-  tNode.directiveEnd = index + numberOfDirectives;
-  tNode.providerIndexes = index;
-}
-function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
-  ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, "Must be in Expando section");
-  tView.data[directiveIndex] = def;
-  const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
-  const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);
-  tView.blueprint[directiveIndex] = nodeInjectorFactory;
-  lView[directiveIndex] = nodeInjectorFactory;
-  registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
-}
-function getInitialLViewFlagsFromDef(def) {
-  let flags = 16;
-  if (def.signals) {
-    flags = 4096;
-  } else if (def.onPush) {
-    flags = 64;
-  }
-  return flags;
-}
-function addComponentLogic(lView, hostTNode, def) {
-  const native = getNativeByTNode(hostTNode, lView);
-  const tView = getOrCreateComponentTView(def);
-  const rendererFactory = lView[ENVIRONMENT].rendererFactory;
-  const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));
-  lView[hostTNode.index] = componentView;
-}
-function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
-  if (ngDevMode) {
-    assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-    validateAgainstEventAttributes(name);
-    assertTNodeType(tNode, 2, `Attempted to set attribute \`${name}\` on a container node. Host bindings are not valid on ng-container or ng-template.`);
-  }
-  const element = getNativeByTNode(tNode, lView);
-  setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);
-}
-function setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {
-  if (value == null) {
-    ngDevMode && ngDevMode.rendererRemoveAttribute++;
-    renderer.removeAttribute(element, name, namespace);
-  } else {
-    ngDevMode && ngDevMode.rendererSetAttribute++;
-    const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || "", name);
-    renderer.setAttribute(element, name, strValue, namespace);
-  }
-}
-function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {
-  const initialInputs = initialInputData[directiveIndex];
-  if (initialInputs !== null) {
-    for (let i = 0; i < initialInputs.length; ) {
-      const publicName = initialInputs[i++];
-      const privateName = initialInputs[i++];
-      const flags = initialInputs[i++];
-      const value = initialInputs[i++];
-      writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
-      if (ngDevMode) {
-        const nativeElement = getNativeByTNode(tNode, lView);
-        setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
-      }
-    }
-  }
-}
-function generateInitialInputs(inputs, directiveIndex, attrs) {
-  let inputsToStore = null;
-  let i = 0;
-  while (i < attrs.length) {
-    const attrName = attrs[i];
-    if (attrName === 0) {
-      i += 4;
-      continue;
-    } else if (attrName === 5) {
-      i += 2;
-      continue;
-    }
-    if (typeof attrName === "number") break;
-    if (inputs.hasOwnProperty(attrName)) {
-      if (inputsToStore === null) inputsToStore = [];
-      const inputConfig = inputs[attrName];
-      for (let j = 0; j < inputConfig.length; j += 3) {
-        if (inputConfig[j] === directiveIndex) {
-          inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);
-          break;
-        }
-      }
-    }
-    i += 2;
-  }
-  return inputsToStore;
-}
-function createLContainer(hostNative, currentView, native, tNode) {
-  ngDevMode && assertLView(currentView);
-  const lContainer = [
-    hostNative,
-    // host native
-    true,
-    // Boolean `true` in this position signifies that this is an `LContainer`
-    0,
-    // flags
-    currentView,
-    // parent
-    null,
-    // next
-    tNode,
-    // t_host
-    null,
-    // dehydrated views
-    native,
-    // native,
-    null,
-    // view refs
-    null
-    // moved views
-  ];
-  ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, "Should allocate correct number of slots for LContainer header.");
-  return lContainer;
-}
-function refreshContentQueries(tView, lView) {
-  const contentQueries = tView.contentQueries;
-  if (contentQueries !== null) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      for (let i = 0; i < contentQueries.length; i += 2) {
-        const queryStartIdx = contentQueries[i];
-        const directiveDefIdx = contentQueries[i + 1];
-        if (directiveDefIdx !== -1) {
-          const directiveDef = tView.data[directiveDefIdx];
-          ngDevMode && assertDefined(directiveDef, "DirectiveDef not found.");
-          ngDevMode && assertDefined(directiveDef.contentQueries, "contentQueries function should be defined");
-          setCurrentQueryIndex(queryStartIdx);
-          directiveDef.contentQueries(2, lView[directiveDefIdx], directiveDefIdx);
-        }
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function addToEndOfViewTree(lView, lViewOrLContainer) {
-  if (lView[CHILD_HEAD]) {
-    lView[CHILD_TAIL][NEXT] = lViewOrLContainer;
-  } else {
-    lView[CHILD_HEAD] = lViewOrLContainer;
-  }
-  lView[CHILD_TAIL] = lViewOrLContainer;
-  return lViewOrLContainer;
-}
-function executeViewQueryFn(flags, viewQueryFn, component) {
-  ngDevMode && assertDefined(viewQueryFn, "View queries function to execute must be defined.");
-  setCurrentQueryIndex(0);
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    viewQueryFn(flags, component);
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {
-  if (tData[bindingIndex] === null) {
-    if (tNode.inputs == null || !tNode.inputs[propertyName]) {
-      const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);
-      propBindingIdxs.push(bindingIndex);
-      let bindingMetadata = propertyName;
-      if (interpolationParts.length > 0) {
-        bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);
-      }
-      tData[bindingIndex] = bindingMetadata;
-    }
-  }
-}
-function getOrCreateLViewCleanup(view) {
-  return view[CLEANUP] ??= [];
-}
-function getOrCreateTViewCleanup(tView) {
-  return tView.cleanup ??= [];
-}
-function loadComponentRenderer(currentDef, tNode, lView) {
-  if (currentDef === null || isComponentDef(currentDef)) {
-    lView = unwrapLView(lView[tNode.index]);
-  }
-  return lView[RENDERER];
-}
-function handleError(lView, error) {
-  const injector = lView[INJECTOR];
-  const errorHandler = injector ? injector.get(ErrorHandler, null) : null;
-  errorHandler && errorHandler.handleError(error);
-}
-function setInputsForProperty(tView, lView, inputs, publicName, value) {
-  for (let i = 0; i < inputs.length; ) {
-    const index = inputs[i++];
-    const privateName = inputs[i++];
-    const flags = inputs[i++];
-    const instance = lView[index];
-    ngDevMode && assertIndexInRange(lView, index);
-    const def = tView.data[index];
-    writeToDirectiveInput(def, instance, publicName, privateName, flags, value);
-  }
-}
-function textBindingInternal(lView, index, value) {
-  ngDevMode && assertString(value, "Value should be a string");
-  ngDevMode && assertNotSame(value, NO_CHANGE, "value should not be NO_CHANGE");
-  ngDevMode && assertIndexInRange(lView, index);
-  const element = getNativeByIndex(index, lView);
-  ngDevMode && assertDefined(element, "native element should exist");
-  updateTextNode(lView[RENDERER], element, value);
-}
-function renderComponent(hostLView, componentHostIdx) {
-  ngDevMode && assertEqual(isCreationMode(hostLView), true, "Should be run in creation mode");
-  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
-  const componentTView = componentView[TVIEW];
-  syncViewWithBlueprint(componentTView, componentView);
-  const hostRNode = componentView[HOST];
-  if (hostRNode !== null && componentView[HYDRATION] === null) {
-    componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);
-  }
-  renderView(componentTView, componentView, componentView[CONTEXT]);
-}
-function syncViewWithBlueprint(tView, lView) {
-  for (let i = lView.length; i < tView.blueprint.length; i++) {
-    lView.push(tView.blueprint[i]);
-  }
-}
-function renderView(tView, lView, context) {
-  ngDevMode && assertEqual(isCreationMode(lView), true, "Should be run in creation mode");
-  ngDevMode && assertNotReactive(renderView.name);
-  enterView(lView);
-  try {
-    const viewQuery = tView.viewQuery;
-    if (viewQuery !== null) {
-      executeViewQueryFn(1, viewQuery, context);
-    }
-    const templateFn = tView.template;
-    if (templateFn !== null) {
-      executeTemplate(tView, lView, templateFn, 1, context);
-    }
-    if (tView.firstCreatePass) {
-      tView.firstCreatePass = false;
-    }
-    lView[QUERIES]?.finishViewCreation(tView);
-    if (tView.staticContentQueries) {
-      refreshContentQueries(tView, lView);
-    }
-    if (tView.staticViewQueries) {
-      executeViewQueryFn(2, tView.viewQuery, context);
-    }
-    const components = tView.components;
-    if (components !== null) {
-      renderChildComponents(lView, components);
-    }
-  } catch (error) {
-    if (tView.firstCreatePass) {
-      tView.incompleteFirstPass = true;
-      tView.firstCreatePass = false;
-    }
-    throw error;
-  } finally {
-    lView[FLAGS] &= ~4;
-    leaveView();
-  }
-}
-function renderChildComponents(hostLView, components) {
-  for (let i = 0; i < components.length; i++) {
-    renderComponent(hostLView, components[i]);
-  }
-}
-function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    const embeddedTView = templateTNode.tView;
-    ngDevMode && assertDefined(embeddedTView, "TView must be defined for a template node.");
-    ngDevMode && assertTNodeForLView(templateTNode, declarationLView);
-    const isSignalView = declarationLView[FLAGS] & 4096;
-    const viewFlags = isSignalView ? 4096 : 16;
-    const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);
-    const declarationLContainer = declarationLView[templateTNode.index];
-    ngDevMode && assertLContainer(declarationLContainer);
-    embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
-    const declarationViewLQueries = declarationLView[QUERIES];
-    if (declarationViewLQueries !== null) {
-      embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
-    }
-    renderView(embeddedTView, embeddedLView, context);
-    return embeddedLView;
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function getLViewFromLContainer(lContainer, index) {
-  const adjustedIndex = CONTAINER_HEADER_OFFSET + index;
-  if (adjustedIndex < lContainer.length) {
-    const lView = lContainer[adjustedIndex];
-    ngDevMode && assertLView(lView);
-    return lView;
-  }
-  return void 0;
-}
-function shouldAddViewToDom(tNode, dehydratedView) {
-  return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);
-}
-function addLViewToLContainer(lContainer, lView, index, addToDOM = true) {
-  const tView = lView[TVIEW];
-  insertView(tView, lView, lContainer, index);
-  if (addToDOM) {
-    const beforeNode = getBeforeNodeForView(index, lContainer);
-    const renderer = lView[RENDERER];
-    const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);
-    if (parentRNode !== null) {
-      addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
-    }
-  }
-  const hydrationInfo = lView[HYDRATION];
-  if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {
-    hydrationInfo.firstChild = null;
-  }
-}
-function removeLViewFromLContainer(lContainer, index) {
-  const lView = detachView(lContainer, index);
-  if (lView !== void 0) {
-    destroyLView(lView[TVIEW], lView);
-  }
-  return lView;
-}
-function collectNativeNodes(tView, lView, tNode, result, isProjection = false) {
-  while (tNode !== null) {
-    if (tNode.type === 128) {
-      tNode = isProjection ? tNode.projectionNext : tNode.next;
-      continue;
-    }
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12 | 16 | 32
-      /* TNodeType.Icu */
-    );
-    const lNode = lView[tNode.index];
-    if (lNode !== null) {
-      result.push(unwrapRNode(lNode));
-    }
-    if (isLContainer(lNode)) {
-      collectNativeNodesInLContainer(lNode, result);
-    }
-    const tNodeType = tNode.type;
-    if (tNodeType & 8) {
-      collectNativeNodes(tView, lView, tNode.child, result);
-    } else if (tNodeType & 32) {
-      const nextRNode = icuContainerIterate(tNode, lView);
-      let rNode;
-      while (rNode = nextRNode()) {
-        result.push(rNode);
-      }
-    } else if (tNodeType & 16) {
-      const nodesInSlot = getProjectionNodes(lView, tNode);
-      if (Array.isArray(nodesInSlot)) {
-        result.push(...nodesInSlot);
-      } else {
-        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
-        ngDevMode && assertParentView(parentView);
-        collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);
-      }
-    }
-    tNode = isProjection ? tNode.projectionNext : tNode.next;
-  }
-  return result;
-}
-function collectNativeNodesInLContainer(lContainer, result) {
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const lViewInAContainer = lContainer[i];
-    const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;
-    if (lViewFirstChildTNode !== null) {
-      collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);
-    }
-  }
-  if (lContainer[NATIVE] !== lContainer[HOST]) {
-    result.push(lContainer[NATIVE]);
-  }
-}
-var freeConsumers = [];
-function getOrBorrowReactiveLViewConsumer(lView) {
-  return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);
-}
-function borrowReactiveLViewConsumer(lView) {
-  const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);
-  consumer.lView = lView;
-  return consumer;
-}
-function maybeReturnReactiveLViewConsumer(consumer) {
-  if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {
-    return;
-  }
-  consumer.lView = null;
-  freeConsumers.push(consumer);
-}
-var REACTIVE_LVIEW_CONSUMER_NODE = __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerMarkedDirty: (node) => {
-    markAncestorsForTraversal(node.lView);
-  },
-  consumerOnSignalRead() {
-    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;
-  }
-});
-function getOrCreateTemporaryConsumer(lView) {
-  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);
-  consumer.lView = lView;
-  return consumer;
-}
-var TEMPORARY_CONSUMER_NODE = __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerMarkedDirty: (node) => {
-    let parent = getLViewParent(node.lView);
-    while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {
-      parent = getLViewParent(parent);
-    }
-    if (!parent) {
-      return;
-    }
-    markViewForRefresh(parent);
-  },
-  consumerOnSignalRead() {
-    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;
-  }
-});
-function viewShouldHaveReactiveConsumer(tView) {
-  return tView.type !== 2;
-}
-function runEffectsInView(view) {
-  if (view[EFFECTS] === null) {
-    return;
-  }
-  let tryFlushEffects = true;
-  while (tryFlushEffects) {
-    let foundDirtyEffect = false;
-    for (const effect2 of view[EFFECTS]) {
-      if (!effect2.dirty) {
-        continue;
-      }
-      foundDirtyEffect = true;
-      if (effect2.zone === null || Zone.current === effect2.zone) {
-        effect2.run();
-      } else {
-        effect2.zone.run(() => effect2.run());
-      }
-    }
-    tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192);
-  }
-}
-var MAXIMUM_REFRESH_RERUNS$1 = 100;
-function detectChangesInternal(lView, notifyErrorHandler = true, mode = 0) {
-  const environment = lView[ENVIRONMENT];
-  const rendererFactory = environment.rendererFactory;
-  const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();
-  if (!checkNoChangesMode) {
-    rendererFactory.begin?.();
-  }
-  try {
-    detectChangesInViewWhileDirty(lView, mode);
-  } catch (error) {
-    if (notifyErrorHandler) {
-      handleError(lView, error);
-    }
-    throw error;
-  } finally {
-    if (!checkNoChangesMode) {
-      rendererFactory.end?.();
-    }
-  }
-}
-function detectChangesInViewWhileDirty(lView, mode) {
-  const lastIsRefreshingViewsValue = isRefreshingViews();
-  try {
-    setIsRefreshingViews(true);
-    detectChangesInView(lView, mode);
-    if (ngDevMode && isExhaustiveCheckNoChanges()) {
-      return;
-    }
-    let retries = 0;
-    while (requiresRefreshOrTraversal(lView)) {
-      if (retries === MAXIMUM_REFRESH_RERUNS$1) {
-        throw new RuntimeError(103, ngDevMode && "Infinite change detection while trying to refresh views. There may be components which each cause the other to require a refresh, causing an infinite loop.");
-      }
-      retries++;
-      detectChangesInView(
-        lView,
-        1
-        /* ChangeDetectionMode.Targeted */
-      );
-    }
-  } finally {
-    setIsRefreshingViews(lastIsRefreshingViewsValue);
-  }
-}
-function checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {
-  setIsInCheckNoChangesMode(mode);
-  try {
-    detectChangesInternal(lView, notifyErrorHandler);
-  } finally {
-    setIsInCheckNoChangesMode(CheckNoChangesMode.Off);
-  }
-}
-function refreshView(tView, lView, templateFn, context) {
-  ngDevMode && assertEqual(isCreationMode(lView), false, "Should be run in update mode");
-  const flags = lView[FLAGS];
-  if ((flags & 256) === 256) return;
-  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
-  const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();
-  enterView(lView);
-  let returnConsumerToPool = true;
-  let prevConsumer = null;
-  let currentConsumer = null;
-  if (!isInCheckNoChangesPass) {
-    if (viewShouldHaveReactiveConsumer(tView)) {
-      currentConsumer = getOrBorrowReactiveLViewConsumer(lView);
-      prevConsumer = consumerBeforeComputation(currentConsumer);
-    } else if (getActiveConsumer() === null) {
-      returnConsumerToPool = false;
-      currentConsumer = getOrCreateTemporaryConsumer(lView);
-      prevConsumer = consumerBeforeComputation(currentConsumer);
-    } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {
-      consumerDestroy(lView[REACTIVE_TEMPLATE_CONSUMER]);
-      lView[REACTIVE_TEMPLATE_CONSUMER] = null;
-    }
-  }
-  try {
-    resetPreOrderHookFlags(lView);
-    setBindingIndex(tView.bindingStartIndex);
-    if (templateFn !== null) {
-      executeTemplate(tView, lView, templateFn, 2, context);
-    }
-    const hooksInitPhaseCompleted = (flags & 3) === 3;
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const preOrderCheckHooks = tView.preOrderCheckHooks;
-        if (preOrderCheckHooks !== null) {
-          executeCheckHooks(lView, preOrderCheckHooks, null);
-        }
-      } else {
-        const preOrderHooks = tView.preOrderHooks;
-        if (preOrderHooks !== null) {
-          executeInitAndCheckHooks(lView, preOrderHooks, 0, null);
-        }
-        incrementInitPhaseFlags(
-          lView,
-          0
-          /* InitPhaseState.OnInitHooksToBeRun */
-        );
-      }
-    }
-    if (!isInExhaustiveCheckNoChangesPass) {
-      markTransplantedViewsForRefresh(lView);
-    }
-    runEffectsInView(lView);
-    detectChangesInEmbeddedViews(
-      lView,
-      0
-      /* ChangeDetectionMode.Global */
-    );
-    if (tView.contentQueries !== null) {
-      refreshContentQueries(tView, lView);
-    }
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const contentCheckHooks = tView.contentCheckHooks;
-        if (contentCheckHooks !== null) {
-          executeCheckHooks(lView, contentCheckHooks);
-        }
-      } else {
-        const contentHooks = tView.contentHooks;
-        if (contentHooks !== null) {
-          executeInitAndCheckHooks(
-            lView,
-            contentHooks,
-            1
-            /* InitPhaseState.AfterContentInitHooksToBeRun */
-          );
-        }
-        incrementInitPhaseFlags(
-          lView,
-          1
-          /* InitPhaseState.AfterContentInitHooksToBeRun */
-        );
-      }
-    }
-    processHostBindingOpCodes(tView, lView);
-    const components = tView.components;
-    if (components !== null) {
-      detectChangesInChildComponents(
-        lView,
-        components,
-        0
-        /* ChangeDetectionMode.Global */
-      );
-    }
-    const viewQuery = tView.viewQuery;
-    if (viewQuery !== null) {
-      executeViewQueryFn(2, viewQuery, context);
-    }
-    if (!isInCheckNoChangesPass) {
-      if (hooksInitPhaseCompleted) {
-        const viewCheckHooks = tView.viewCheckHooks;
-        if (viewCheckHooks !== null) {
-          executeCheckHooks(lView, viewCheckHooks);
-        }
-      } else {
-        const viewHooks = tView.viewHooks;
-        if (viewHooks !== null) {
-          executeInitAndCheckHooks(
-            lView,
-            viewHooks,
-            2
-            /* InitPhaseState.AfterViewInitHooksToBeRun */
-          );
-        }
-        incrementInitPhaseFlags(
-          lView,
-          2
-          /* InitPhaseState.AfterViewInitHooksToBeRun */
-        );
-      }
-    }
-    if (tView.firstUpdatePass === true) {
-      tView.firstUpdatePass = false;
-    }
-    if (lView[EFFECTS_TO_SCHEDULE]) {
-      for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {
-        notifyEffect();
-      }
-      lView[EFFECTS_TO_SCHEDULE] = null;
-    }
-    if (!isInCheckNoChangesPass) {
-      lView[FLAGS] &= ~(64 | 8);
-    }
-  } catch (e) {
-    if (!isInCheckNoChangesPass) {
-      markAncestorsForTraversal(lView);
-    }
-    throw e;
-  } finally {
-    if (currentConsumer !== null) {
-      consumerAfterComputation(currentConsumer, prevConsumer);
-      if (returnConsumerToPool) {
-        maybeReturnReactiveLViewConsumer(currentConsumer);
-      }
-    }
-    leaveView();
-  }
-}
-function detectChangesInEmbeddedViews(lView, mode) {
-  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
-    for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-      const embeddedLView = lContainer[i];
-      detectChangesInViewIfAttached(embeddedLView, mode);
-    }
-  }
-}
-function markTransplantedViewsForRefresh(lView) {
-  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
-    if (!(lContainer[FLAGS] & LContainerFlags.HasTransplantedViews)) continue;
-    const movedViews = lContainer[MOVED_VIEWS];
-    ngDevMode && assertDefined(movedViews, "Transplanted View flags set but missing MOVED_VIEWS");
-    for (let i = 0; i < movedViews.length; i++) {
-      const movedLView = movedViews[i];
-      markViewForRefresh(movedLView);
-    }
-  }
-}
-function detectChangesInComponent(hostLView, componentHostIdx, mode) {
-  ngDevMode && assertEqual(isCreationMode(hostLView), false, "Should be run in update mode");
-  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
-  detectChangesInViewIfAttached(componentView, mode);
-}
-function detectChangesInViewIfAttached(lView, mode) {
-  if (!viewAttachedToChangeDetector(lView)) {
-    return;
-  }
-  detectChangesInView(lView, mode);
-}
-function detectChangesInView(lView, mode) {
-  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();
-  const tView = lView[TVIEW];
-  const flags = lView[FLAGS];
-  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];
-  let shouldRefreshView = !!(mode === 0 && flags & 16);
-  shouldRefreshView ||= !!(flags & 64 && mode === 0 && !isInCheckNoChangesPass);
-  shouldRefreshView ||= !!(flags & 1024);
-  shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange(consumer));
-  shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());
-  if (consumer) {
-    consumer.dirty = false;
-  }
-  lView[FLAGS] &= ~(8192 | 1024);
-  if (shouldRefreshView) {
-    refreshView(tView, lView, tView.template, lView[CONTEXT]);
-  } else if (flags & 8192) {
-    runEffectsInView(lView);
-    detectChangesInEmbeddedViews(
-      lView,
-      1
-      /* ChangeDetectionMode.Targeted */
-    );
-    const components = tView.components;
-    if (components !== null) {
-      detectChangesInChildComponents(
-        lView,
-        components,
-        1
-        /* ChangeDetectionMode.Targeted */
-      );
-    }
-  }
-}
-function detectChangesInChildComponents(hostLView, components, mode) {
-  for (let i = 0; i < components.length; i++) {
-    detectChangesInComponent(hostLView, components[i], mode);
-  }
-}
-function markViewDirty(lView, source) {
-  const dirtyBitsToUse = isRefreshingViews() ? (
-    // When we are actively refreshing views, we only use the `Dirty` bit to mark a view
-    64
-  ) : (
-    // When we are not actively refreshing a view tree, it is absolutely
-    // valid to update state and mark views dirty. We use the `RefreshView` flag in this
-    // case to allow synchronously rerunning change detection. This applies today to
-    // afterRender hooks as well as animation listeners which execute after detecting
-    // changes in a view when the render factory flushes.
-    1024 | 64
-  );
-  lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);
-  while (lView) {
-    lView[FLAGS] |= dirtyBitsToUse;
-    const parent = getLViewParent(lView);
-    if (isRootView(lView) && !parent) {
-      return lView;
-    }
-    lView = parent;
-  }
-  return null;
-}
-var ViewRef$1 = class {
-  _lView;
-  _cdRefInjectingView;
-  notifyErrorHandler;
-  _appRef = null;
-  _attachedToViewContainer = false;
-  get rootNodes() {
-    const lView = this._lView;
-    const tView = lView[TVIEW];
-    return collectNativeNodes(tView, lView, tView.firstChild, []);
-  }
-  constructor(_lView, _cdRefInjectingView, notifyErrorHandler = true) {
-    this._lView = _lView;
-    this._cdRefInjectingView = _cdRefInjectingView;
-    this.notifyErrorHandler = notifyErrorHandler;
-  }
-  get context() {
-    return this._lView[CONTEXT];
-  }
-  /**
-   * Reports whether the given view is considered dirty according to the different marking mechanisms.
-   */
-  get dirty() {
-    return !!(this._lView[FLAGS] & (64 | 1024 | 8192)) || !!this._lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty;
-  }
-  /**
-   * @deprecated Replacing the full context object is not supported. Modify the context
-   *   directly, or consider using a `Proxy` if you need to replace the full object.
-   * // TODO(devversion): Remove this.
-   */
-  set context(value) {
-    if (ngDevMode) {
-      console.warn("Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.");
-    }
-    this._lView[CONTEXT] = value;
-  }
-  get destroyed() {
-    return (this._lView[FLAGS] & 256) === 256;
-  }
-  destroy() {
-    if (this._appRef) {
-      this._appRef.detachView(this);
-    } else if (this._attachedToViewContainer) {
-      const parent = this._lView[PARENT];
-      if (isLContainer(parent)) {
-        const viewRefs = parent[VIEW_REFS];
-        const index = viewRefs ? viewRefs.indexOf(this) : -1;
-        if (index > -1) {
-          ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, "An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.");
-          detachView(parent, index);
-          removeFromArray(viewRefs, index);
-        }
-      }
-      this._attachedToViewContainer = false;
-    }
-    destroyLView(this._lView[TVIEW], this._lView);
-  }
-  onDestroy(callback) {
-    storeLViewOnDestroy(this._lView, callback);
-  }
-  /**
-   * Marks a view and all of its ancestors dirty.
-   *
-   * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush} component is
-   * checked when it needs to be re-rendered but the two normal triggers haven't marked it
-   * dirty (i.e. inputs haven't changed and events haven't fired in the view).
-   *
-   * <!-- TODO: Add a link to a chapter on OnPush components -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * ```ts
-   * @Component({
-   *   selector: 'app-root',
-   *   template: `Number of ticks: {{numberOfTicks}}`
-   *   changeDetection: ChangeDetectionStrategy.OnPush,
-   * })
-   * class AppComponent {
-   *   numberOfTicks = 0;
-   *
-   *   constructor(private ref: ChangeDetectorRef) {
-   *     setInterval(() => {
-   *       this.numberOfTicks++;
-   *       // the following is required, otherwise the view will not be updated
-   *       this.ref.markForCheck();
-   *     }, 1000);
-   *   }
-   * }
-   * ```
-   */
-  markForCheck() {
-    markViewDirty(
-      this._cdRefInjectingView || this._lView,
-      4
-      /* NotificationSource.MarkForCheck */
-    );
-  }
-  markForRefresh() {
-    markViewForRefresh(this._cdRefInjectingView || this._lView);
-  }
-  /**
-   * Detaches the view from the change detection tree.
-   *
-   * Detached views will not be checked during change detection runs until they are
-   * re-attached, even if they are dirty. `detach` can be used in combination with
-   * {@link ChangeDetectorRef#detectChanges} to implement local change
-   * detection checks.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example defines a component with a large list of readonly data.
-   * Imagine the data changes constantly, many times per second. For performance reasons,
-   * we want to check and update the list every five seconds. We can do that by detaching
-   * the component's change detector and doing a local check every five seconds.
-   *
-   * ```ts
-   * class DataProvider {
-   *   // in a real application the returned data will be different every time
-   *   get data() {
-   *     return [1,2,3,4,5];
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'giant-list',
-   *   template: `
-   *     <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
-   *   `,
-   * })
-   * class GiantList {
-   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
-   *     ref.detach();
-   *     setInterval(() => {
-   *       this.ref.detectChanges();
-   *     }, 5000);
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'app',
-   *   providers: [DataProvider],
-   *   template: `
-   *     <giant-list><giant-list>
-   *   `,
-   * })
-   * class App {
-   * }
-   * ```
-   */
-  detach() {
-    this._lView[FLAGS] &= ~128;
-  }
-  /**
-   * Re-attaches a view to the change detection tree.
-   *
-   * This can be used to re-attach views that were previously detached from the tree
-   * using {@link ChangeDetectorRef#detach}. Views are attached to the tree by default.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example creates a component displaying `live` data. The component will detach
-   * its change detector from the main change detector tree when the component's live property
-   * is set to false.
-   *
-   * ```ts
-   * class DataProvider {
-   *   data = 1;
-   *
-   *   constructor() {
-   *     setInterval(() => {
-   *       this.data = this.data * 2;
-   *     }, 500);
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'live-data',
-   *   inputs: ['live'],
-   *   template: 'Data: {{dataProvider.data}}'
-   * })
-   * class LiveData {
-   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
-   *
-   *   set live(value) {
-   *     if (value) {
-   *       this.ref.reattach();
-   *     } else {
-   *       this.ref.detach();
-   *     }
-   *   }
-   * }
-   *
-   * @Component({
-   *   selector: 'app-root',
-   *   providers: [DataProvider],
-   *   template: `
-   *     Live Update: <input type="checkbox" [(ngModel)]="live">
-   *     <live-data [live]="live"><live-data>
-   *   `,
-   * })
-   * class AppComponent {
-   *   live = true;
-   * }
-   * ```
-   */
-  reattach() {
-    updateAncestorTraversalFlagsOnAttach(this._lView);
-    this._lView[FLAGS] |= 128;
-  }
-  /**
-   * Checks the view and its children.
-   *
-   * This can also be used in combination with {@link ChangeDetectorRef#detach} to implement
-   * local change detection checks.
-   *
-   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
-   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example defines a component with a large list of readonly data.
-   * Imagine, the data changes constantly, many times per second. For performance reasons,
-   * we want to check and update the list every five seconds.
-   *
-   * We can do that by detaching the component's change detector and doing a local change detection
-   * check every five seconds.
-   *
-   * See {@link ChangeDetectorRef#detach} for more information.
-   */
-  detectChanges() {
-    this._lView[FLAGS] |= 1024;
-    detectChangesInternal(this._lView, this.notifyErrorHandler);
-  }
-  /**
-   * Checks the change detector and its children, and throws if any changes are detected.
-   *
-   * This is used in development mode to verify that running change detection doesn't
-   * introduce other changes.
-   */
-  checkNoChanges() {
-    if (ngDevMode) {
-      checkNoChangesInternal(this._lView, CheckNoChangesMode.OnlyDirtyViews, this.notifyErrorHandler);
-    }
-  }
-  attachToViewContainerRef() {
-    if (this._appRef) {
-      throw new RuntimeError(902, ngDevMode && "This view is already attached directly to the ApplicationRef!");
-    }
-    this._attachedToViewContainer = true;
-  }
-  detachFromAppRef() {
-    this._appRef = null;
-    const isRoot = isRootView(this._lView);
-    const declarationContainer = this._lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && !isRoot) {
-      detachMovedView(declarationContainer, this._lView);
-    }
-    detachViewFromDOM(this._lView[TVIEW], this._lView);
-  }
-  attachToAppRef(appRef) {
-    if (this._attachedToViewContainer) {
-      throw new RuntimeError(902, ngDevMode && "This view is already attached to a ViewContainer!");
-    }
-    this._appRef = appRef;
-    const isRoot = isRootView(this._lView);
-    const declarationContainer = this._lView[DECLARATION_LCONTAINER];
-    if (declarationContainer !== null && !isRoot) {
-      trackMovedView(declarationContainer, this._lView);
-    }
-    updateAncestorTraversalFlagsOnAttach(this._lView);
-  }
-};
-var TemplateRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectTemplateRef;
-};
-var ViewEngineTemplateRef = TemplateRef;
-var R3TemplateRef = class TemplateRef2 extends ViewEngineTemplateRef {
-  _declarationLView;
-  _declarationTContainer;
-  elementRef;
-  constructor(_declarationLView, _declarationTContainer, elementRef) {
-    super();
-    this._declarationLView = _declarationLView;
-    this._declarationTContainer = _declarationTContainer;
-    this.elementRef = elementRef;
-  }
-  /**
-   * Returns an `ssrId` associated with a TView, which was used to
-   * create this instance of the `TemplateRef`.
-   *
-   * @internal
-   */
-  get ssrId() {
-    return this._declarationTContainer.tView?.ssrId || null;
-  }
-  createEmbeddedView(context, injector) {
-    return this.createEmbeddedViewImpl(context, injector);
-  }
-  /**
-   * @internal
-   */
-  createEmbeddedViewImpl(context, injector, dehydratedView) {
-    const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, {
-      embeddedViewInjector: injector,
-      dehydratedView
-    });
-    return new ViewRef$1(embeddedLView);
-  }
-};
-function injectTemplateRef() {
-  return createTemplateRef(getCurrentTNode(), getLView());
-}
-function createTemplateRef(hostTNode, hostLView) {
-  if (hostTNode.type & 4) {
-    ngDevMode && assertDefined(hostTNode.tView, "TView must be allocated");
-    return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));
-  }
-  return null;
-}
-var AT_THIS_LOCATION = "<-- AT THIS LOCATION";
-function getFriendlyStringFromTNodeType(tNodeType) {
-  switch (tNodeType) {
-    case 4:
-      return "view container";
-    case 2:
-      return "element";
-    case 8:
-      return "ng-container";
-    case 32:
-      return "icu";
-    case 64:
-      return "i18n";
-    case 16:
-      return "projection";
-    case 1:
-      return "text";
-    case 128:
-      return "@let";
-    default:
-      return "<unknown>";
-  }
-}
-function validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {
-  if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {
-    const expectedNode = shortRNodeDescription(nodeType, tagName, null);
-    let header = `During hydration Angular expected ${expectedNode} but `;
-    const hostComponentDef = getDeclarationComponentDef(lView);
-    const componentClassName = hostComponentDef?.type?.name;
-    const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);
-    const expected = `Angular expected this DOM:
-
-${expectedDom}
-
-`;
-    let actual = "";
-    const componentHostElement = unwrapRNode(lView[HOST]);
-    if (!node) {
-      header += `the node was not found.
-
-`;
-      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);
-    } else {
-      const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);
-      header += `found ${actualNode}.
-
-`;
-      const actualDom = describeDomFromNode(node);
-      actual = `Actual DOM is:
-
-${actualDom}
-
-`;
-      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);
-    }
-    const footer = getHydrationErrorFooter(componentClassName);
-    const message = header + expected + actual + getHydrationAttributeNote() + footer;
-    throw new RuntimeError(-500, message);
-  }
-}
-function validateSiblingNodeExists(node) {
-  validateNodeExists(node);
-  if (!node.nextSibling) {
-    const header = "During hydration Angular expected more sibling nodes to be present.\n\n";
-    const actual = `Actual DOM is:
-
-${describeDomFromNode(node)}
-
-`;
-    const footer = getHydrationErrorFooter();
-    const message = header + actual + footer;
-    markRNodeAsHavingHydrationMismatch(node, "", actual);
-    throw new RuntimeError(-501, message);
-  }
-}
-function validateNodeExists(node, lView = null, tNode = null) {
-  if (!node) {
-    const header = "During hydration, Angular expected an element to be present at this location.\n\n";
-    let expected = "";
-    let footer = "";
-    if (lView !== null && tNode !== null) {
-      expected = describeExpectedDom(lView, tNode, false);
-      footer = getHydrationErrorFooter();
-      markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, "");
-    }
-    throw new RuntimeError(-502, `${header}${expected}
-
-${footer}`);
-  }
-}
-function nodeNotFoundError(lView, tNode) {
-  const header = "During serialization, Angular was unable to find an element in the DOM:\n\n";
-  const expected = `${describeExpectedDom(lView, tNode, false)}
-
-`;
-  const footer = getHydrationErrorFooter();
-  throw new RuntimeError(-502, header + expected + footer);
-}
-function nodeNotFoundAtPathError(host, path) {
-  const header = `During hydration Angular was unable to locate a node using the "${path}" path, starting from the ${describeRNode(host)} node.
-
-`;
-  const footer = getHydrationErrorFooter();
-  markRNodeAsHavingHydrationMismatch(host);
-  throw new RuntimeError(-502, header + footer);
-}
-function unsupportedProjectionOfDomNodes(rNode) {
-  const header = "During serialization, Angular detected DOM nodes that were created outside of Angular context and provided as projectable nodes (likely via `ViewContainerRef.createComponent` or `createComponent` APIs). Hydration is not supported for such cases, consider refactoring the code to avoid this pattern or using `ngSkipHydration` on the host element of the component.\n\n";
-  const actual = `${describeDomFromNode(rNode)}
-
-`;
-  const message = header + actual + getHydrationAttributeNote();
-  return new RuntimeError(-503, message);
-}
-function invalidSkipHydrationHost(rNode) {
-  const header = "The `ngSkipHydration` flag is applied on a node that doesn't act as a component host. Hydration can be skipped only on per-component basis.\n\n";
-  const actual = `${describeDomFromNode(rNode)}
-
-`;
-  const footer = "Please move the `ngSkipHydration` attribute to the component host element.\n\n";
-  const message = header + actual + footer;
-  return new RuntimeError(-504, message);
-}
-function stringifyTNodeAttrs(tNode) {
-  const results = [];
-  if (tNode.attrs) {
-    for (let i = 0; i < tNode.attrs.length; ) {
-      const attrName = tNode.attrs[i++];
-      if (typeof attrName == "number") {
-        break;
-      }
-      const attrValue = tNode.attrs[i++];
-      results.push(`${attrName}="${shorten(attrValue)}"`);
-    }
-  }
-  return results.join(" ");
-}
-var internalAttrs = /* @__PURE__ */ new Set(["ngh", "ng-version", "ng-server-context"]);
-function stringifyRNodeAttrs(rNode) {
-  const results = [];
-  for (let i = 0; i < rNode.attributes.length; i++) {
-    const attr = rNode.attributes[i];
-    if (internalAttrs.has(attr.name)) continue;
-    results.push(`${attr.name}="${shorten(attr.value)}"`);
-  }
-  return results.join(" ");
-}
-function describeTNode(tNode, innerContent = "…") {
-  switch (tNode.type) {
-    case 1:
-      const content = tNode.value ? `(${tNode.value})` : "";
-      return `#text${content}`;
-    case 2:
-      const attrs = stringifyTNodeAttrs(tNode);
-      const tag = tNode.value.toLowerCase();
-      return `<${tag}${attrs ? " " + attrs : ""}>${innerContent}</${tag}>`;
-    case 8:
-      return "<!-- ng-container -->";
-    case 4:
-      return "<!-- container -->";
-    default:
-      const typeAsString = getFriendlyStringFromTNodeType(tNode.type);
-      return `#node(${typeAsString})`;
-  }
-}
-function describeRNode(rNode, innerContent = "…") {
-  const node = rNode;
-  switch (node.nodeType) {
-    case Node.ELEMENT_NODE:
-      const tag = node.tagName.toLowerCase();
-      const attrs = stringifyRNodeAttrs(node);
-      return `<${tag}${attrs ? " " + attrs : ""}>${innerContent}</${tag}>`;
-    case Node.TEXT_NODE:
-      const content = node.textContent ? shorten(node.textContent) : "";
-      return `#text${content ? `(${content})` : ""}`;
-    case Node.COMMENT_NODE:
-      return `<!-- ${shorten(node.textContent ?? "")} -->`;
-    default:
-      return `#node(${node.nodeType})`;
-  }
-}
-function describeExpectedDom(lView, tNode, isViewContainerAnchor) {
-  const spacer = "  ";
-  let content = "";
-  if (tNode.prev) {
-    content += spacer + "…\n";
-    content += spacer + describeTNode(tNode.prev) + "\n";
-  } else if (tNode.type && tNode.type & 12) {
-    content += spacer + "…\n";
-  }
-  if (isViewContainerAnchor) {
-    content += spacer + describeTNode(tNode) + "\n";
-    content += spacer + `<!-- container -->  ${AT_THIS_LOCATION}
-`;
-  } else {
-    content += spacer + describeTNode(tNode) + `  ${AT_THIS_LOCATION}
-`;
-  }
-  content += spacer + "…\n";
-  const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;
-  if (parentRNode) {
-    content = describeRNode(parentRNode, "\n" + content);
-  }
-  return content;
-}
-function describeDomFromNode(node) {
-  const spacer = "  ";
-  let content = "";
-  const currentNode = node;
-  if (currentNode.previousSibling) {
-    content += spacer + "…\n";
-    content += spacer + describeRNode(currentNode.previousSibling) + "\n";
-  }
-  content += spacer + describeRNode(currentNode) + `  ${AT_THIS_LOCATION}
-`;
-  if (node.nextSibling) {
-    content += spacer + "…\n";
-  }
-  if (node.parentNode) {
-    content = describeRNode(currentNode.parentNode, "\n" + content);
-  }
-  return content;
-}
-function shortRNodeDescription(nodeType, tagName, textContent) {
-  switch (nodeType) {
-    case Node.ELEMENT_NODE:
-      return `<${tagName.toLowerCase()}>`;
-    case Node.TEXT_NODE:
-      const content = textContent ? ` (with the "${shorten(textContent)}" content)` : "";
-      return `a text node${content}`;
-    case Node.COMMENT_NODE:
-      return "a comment node";
-    default:
-      return `#node(nodeType=${nodeType})`;
-  }
-}
-function getHydrationErrorFooter(componentClassName) {
-  const componentInfo = componentClassName ? `the "${componentClassName}"` : "corresponding";
-  return `To fix this problem:
-  * check ${componentInfo} component for hydration-related issues
-  * check to see if your template has valid HTML structure
-  * or skip hydration by adding the \`ngSkipHydration\` attribute to its host node in a template
-
-`;
-}
-function getHydrationAttributeNote() {
-  return "Note: attributes are only displayed to better represent the DOM but have no effect on hydration mismatches.\n\n";
-}
-function stripNewlines(input2) {
-  return input2.replace(/\s+/gm, "");
-}
-function shorten(input2, maxLength = 50) {
-  if (!input2) {
-    return "";
-  }
-  input2 = stripNewlines(input2);
-  return input2.length > maxLength ? `${input2.substring(0, maxLength - 1)}…` : input2;
-}
-function getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {
-  const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;
-  const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;
-  if (insertBeforeIndex === null) {
-    return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);
-  } else {
-    ngDevMode && assertIndexInRange(lView, insertBeforeIndex);
-    return unwrapRNode(lView[insertBeforeIndex]);
-  }
-}
-function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {
-  const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;
-  if (Array.isArray(tNodeInsertBeforeIndex)) {
-    ngDevMode && assertDomNode(childRNode);
-    let i18nParent = childRNode;
-    let anchorRNode = null;
-    if (!(childTNode.type & 3)) {
-      anchorRNode = i18nParent;
-      i18nParent = parentRElement;
-    }
-    if (i18nParent !== null && childTNode.componentOffset === -1) {
-      for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {
-        const i18nChild = lView[tNodeInsertBeforeIndex[i]];
-        nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);
-      }
-    }
-  }
-}
-function addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {
-  ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, "We expect that insertBeforeIndex is not set");
-  previousTNodes.push(newTNode);
-  if (previousTNodes.length > 1) {
-    for (let i = previousTNodes.length - 2; i >= 0; i--) {
-      const existingTNode = previousTNodes[i];
-      if (!isI18nText(existingTNode)) {
-        if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {
-          setInsertBeforeIndex(existingTNode, newTNode.index);
-        }
-      }
-    }
-  }
-}
-function isI18nText(tNode) {
-  return !(tNode.type & 64);
-}
-function isNewTNodeCreatedBefore(existingTNode, newTNode) {
-  return isI18nText(newTNode) || existingTNode.index > newTNode.index;
-}
-function getInsertBeforeIndex(tNode) {
-  const index = tNode.insertBeforeIndex;
-  return Array.isArray(index) ? index[0] : index;
-}
-function setInsertBeforeIndex(tNode, value) {
-  const index = tNode.insertBeforeIndex;
-  if (Array.isArray(index)) {
-    index[0] = value;
-  } else {
-    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
-    tNode.insertBeforeIndex = value;
-  }
-}
-function getTIcu(tView, index) {
-  const value = tView.data[index];
-  if (value === null || typeof value === "string") return null;
-  if (ngDevMode && !(value.hasOwnProperty("tView") || value.hasOwnProperty("currentCaseLViewIndex"))) {
-    throwError("We expect to get 'null'|'TIcu'|'TIcuContainer', but got: " + value);
-  }
-  const tIcu = value.hasOwnProperty("currentCaseLViewIndex") ? value : value.value;
-  ngDevMode && assertTIcu(tIcu);
-  return tIcu;
-}
-function setTIcu(tView, index, tIcu) {
-  const tNode = tView.data[index];
-  ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty("tView"), true, "We expect to get 'null'|'TIcuContainer'");
-  if (tNode === null) {
-    tView.data[index] = tIcu;
-  } else {
-    ngDevMode && assertTNodeType(
-      tNode,
-      32
-      /* TNodeType.Icu */
-    );
-    tNode.value = tIcu;
-  }
-}
-function setTNodeInsertBeforeIndex(tNode, index) {
-  ngDevMode && assertTNode(tNode);
-  let insertBeforeIndex = tNode.insertBeforeIndex;
-  if (insertBeforeIndex === null) {
-    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
-    insertBeforeIndex = tNode.insertBeforeIndex = [null, index];
-  } else {
-    assertEqual(Array.isArray(insertBeforeIndex), true, "Expecting array here");
-    insertBeforeIndex.push(index);
-  }
-}
-function createTNodePlaceholder(tView, previousTNodes, index) {
-  const tNode = createTNodeAtIndex(tView, index, 64, null, null);
-  addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);
-  return tNode;
-}
-function getCurrentICUCaseIndex(tIcu, lView) {
-  const currentCase = lView[tIcu.currentCaseLViewIndex];
-  return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;
-}
-function getParentFromIcuCreateOpCode(mergedCode) {
-  return mergedCode >>> 17;
-}
-function getRefFromIcuCreateOpCode(mergedCode) {
-  return (mergedCode & 131070) >>> 1;
-}
-function getInstructionFromIcuCreateOpCode(mergedCode) {
-  return mergedCode & 1;
-}
-function icuCreateOpCode(opCode, parentIdx, refIdx) {
-  ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, "Missing parent index");
-  ngDevMode && assertGreaterThan(refIdx, 0, "Missing ref index");
-  return opCode | parentIdx << 17 | refIdx << 1;
-}
-function isRootTemplateMessage(subTemplateIndex) {
-  return subTemplateIndex === -1;
-}
-function enterIcu(state, tIcu, lView) {
-  state.index = 0;
-  const currentCase = getCurrentICUCaseIndex(tIcu, lView);
-  if (currentCase !== null) {
-    ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
-    state.removes = tIcu.remove[currentCase];
-  } else {
-    state.removes = EMPTY_ARRAY;
-  }
-}
-function icuContainerIteratorNext(state) {
-  if (state.index < state.removes.length) {
-    const removeOpCode = state.removes[state.index++];
-    ngDevMode && assertNumber(removeOpCode, "Expecting OpCode number");
-    if (removeOpCode > 0) {
-      const rNode = state.lView[removeOpCode];
-      ngDevMode && assertDomNode(rNode);
-      return rNode;
-    } else {
-      state.stack.push(state.index, state.removes);
-      const tIcuIndex = ~removeOpCode;
-      const tIcu = state.lView[TVIEW].data[tIcuIndex];
-      ngDevMode && assertTIcu(tIcu);
-      enterIcu(state, tIcu, state.lView);
-      return icuContainerIteratorNext(state);
-    }
-  } else {
-    if (state.stack.length === 0) {
-      return null;
-    } else {
-      state.removes = state.stack.pop();
-      state.index = state.stack.pop();
-      return icuContainerIteratorNext(state);
-    }
-  }
-}
-function loadIcuContainerVisitor() {
-  const _state = {
-    stack: [],
-    index: -1
-  };
-  function icuContainerIteratorStart(tIcuContainerNode, lView) {
-    _state.lView = lView;
-    while (_state.stack.length) _state.stack.pop();
-    ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
-    enterIcu(_state, tIcuContainerNode.value, lView);
-    return icuContainerIteratorNext.bind(null, _state);
-  }
-  return icuContainerIteratorStart;
-}
-function createIcuIterator(tIcu, lView) {
-  const state = {
-    stack: [],
-    index: -1,
-    lView
-  };
-  ngDevMode && assertTIcu(tIcu);
-  enterIcu(state, tIcu, lView);
-  return icuContainerIteratorNext.bind(null, state);
-}
-var REF_EXTRACTOR_REGEXP = new RegExp(`^(\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);
-function compressNodeLocation(referenceNode, path) {
-  const result = [referenceNode];
-  for (const segment of path) {
-    const lastIdx = result.length - 1;
-    if (lastIdx > 0 && result[lastIdx - 1] === segment) {
-      const value = result[lastIdx] || 1;
-      result[lastIdx] = value + 1;
-    } else {
-      result.push(segment, "");
-    }
-  }
-  return result.join("");
-}
-function decompressNodeLocation(path) {
-  const matches = path.match(REF_EXTRACTOR_REGEXP);
-  const [_, refNodeId, refNodeName, rest] = matches;
-  const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;
-  const steps = [];
-  for (const [_2, step, count] of rest.matchAll(/(f|n)(\d*)/g)) {
-    const repeat = parseInt(count, 10) || 1;
-    steps.push(step, repeat);
-  }
-  return [ref, ...steps];
-}
-function isFirstElementInNgContainer(tNode) {
-  return !tNode.prev && tNode.parent?.type === 8;
-}
-function getNoOffsetIndex(tNode) {
-  return tNode.index - HEADER_OFFSET;
-}
-function isDisconnectedNode(tNode, lView) {
-  return !(tNode.type & (16 | 128)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));
-}
-function isDisconnectedRNode(rNode) {
-  return !!rNode && !rNode.isConnected;
-}
-function locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {
-  const i18nNodes = hydrationInfo.i18nNodes;
-  if (i18nNodes) {
-    return i18nNodes.get(noOffsetIndex);
-  }
-  return void 0;
-}
-function tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {
-  const nodes = hydrationInfo.data[NODES];
-  const path = nodes?.[noOffsetIndex];
-  return path ? locateRNodeByPath(path, lView) : null;
-}
-function locateNextRNode(hydrationInfo, tView, lView, tNode) {
-  const noOffsetIndex = getNoOffsetIndex(tNode);
-  let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);
-  if (native === void 0) {
-    const nodes = hydrationInfo.data[NODES];
-    if (nodes?.[noOffsetIndex]) {
-      native = locateRNodeByPath(nodes[noOffsetIndex], lView);
-    } else if (tView.firstChild === tNode) {
-      native = hydrationInfo.firstChild;
-    } else {
-      const previousTNodeParent = tNode.prev === null;
-      const previousTNode = tNode.prev ?? tNode.parent;
-      ngDevMode && assertDefined(previousTNode, "Unexpected state: current TNode does not have a connection to the previous node or a parent node.");
-      if (isFirstElementInNgContainer(tNode)) {
-        const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);
-        native = getSegmentHead(hydrationInfo, noOffsetParentIndex);
-      } else {
-        let previousRElement = getNativeByTNode(previousTNode, lView);
-        if (previousTNodeParent) {
-          native = previousRElement.firstChild;
-        } else {
-          const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);
-          const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);
-          if (previousTNode.type === 2 && segmentHead) {
-            const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);
-            const nodesToSkip = numRootNodesToSkip + 1;
-            native = siblingAfter(nodesToSkip, segmentHead);
-          } else {
-            native = previousRElement.nextSibling;
-          }
-        }
-      }
-    }
-  }
-  return native;
-}
-function siblingAfter(skip, from) {
-  let currentNode = from;
-  for (let i = 0; i < skip; i++) {
-    ngDevMode && validateSiblingNodeExists(currentNode);
-    currentNode = currentNode.nextSibling;
-  }
-  return currentNode;
-}
-function stringifyNavigationInstructions(instructions) {
-  const container = [];
-  for (let i = 0; i < instructions.length; i += 2) {
-    const step = instructions[i];
-    const repeat = instructions[i + 1];
-    for (let r = 0; r < repeat; r++) {
-      container.push(step === NodeNavigationStep.FirstChild ? "firstChild" : "nextSibling");
-    }
-  }
-  return container.join(".");
-}
-function navigateToNode(from, instructions) {
-  let node = from;
-  for (let i = 0; i < instructions.length; i += 2) {
-    const step = instructions[i];
-    const repeat = instructions[i + 1];
-    for (let r = 0; r < repeat; r++) {
-      if (ngDevMode && !node) {
-        throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));
-      }
-      switch (step) {
-        case NodeNavigationStep.FirstChild:
-          node = node.firstChild;
-          break;
-        case NodeNavigationStep.NextSibling:
-          node = node.nextSibling;
-          break;
-      }
-    }
-  }
-  if (ngDevMode && !node) {
-    throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));
-  }
-  return node;
-}
-function locateRNodeByPath(path, lView) {
-  const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);
-  let ref;
-  if (referenceNode === REFERENCE_NODE_HOST) {
-    ref = lView[DECLARATION_COMPONENT_VIEW][HOST];
-  } else if (referenceNode === REFERENCE_NODE_BODY) {
-    ref = ɵɵresolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);
-  } else {
-    const parentElementId = Number(referenceNode);
-    ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);
-  }
-  return navigateToNode(ref, navigationInstructions);
-}
-function navigateBetween(start, finish) {
-  if (start === finish) {
-    return [];
-  } else if (start.parentElement == null || finish.parentElement == null) {
-    return null;
-  } else if (start.parentElement === finish.parentElement) {
-    return navigateBetweenSiblings(start, finish);
-  } else {
-    const parent = finish.parentElement;
-    const parentPath = navigateBetween(start, parent);
-    const childPath = navigateBetween(parent.firstChild, finish);
-    if (!parentPath || !childPath) return null;
-    return [
-      // First navigate to `finish`'s parent
-      ...parentPath,
-      // Then to its first child.
-      NodeNavigationStep.FirstChild,
-      // And finally from that node to `finish` (maybe a no-op if we're already there).
-      ...childPath
-    ];
-  }
-}
-function navigateBetweenSiblings(start, finish) {
-  const nav = [];
-  let node = null;
-  for (node = start; node != null && node !== finish; node = node.nextSibling) {
-    nav.push(NodeNavigationStep.NextSibling);
-  }
-  return node == null ? null : nav;
-}
-function calcPathBetween(from, to, fromNodeName) {
-  const path = navigateBetween(from, to);
-  return path === null ? null : compressNodeLocation(fromNodeName, path);
-}
-function calcPathForNode(tNode, lView, excludedParentNodes) {
-  let parentTNode = tNode.parent;
-  let parentIndex;
-  let parentRNode;
-  let referenceNodeName;
-  while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {
-    parentTNode = parentTNode.parent;
-  }
-  if (parentTNode === null || !(parentTNode.type & 3)) {
-    parentIndex = referenceNodeName = REFERENCE_NODE_HOST;
-    parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];
-  } else {
-    parentIndex = parentTNode.index;
-    parentRNode = unwrapRNode(lView[parentIndex]);
-    referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);
-  }
-  let rNode = unwrapRNode(lView[tNode.index]);
-  if (tNode.type & (12 | 32)) {
-    const firstRNode = getFirstNativeNode(lView, tNode);
-    if (firstRNode) {
-      rNode = firstRNode;
-    }
-  }
-  let path = calcPathBetween(parentRNode, rNode, referenceNodeName);
-  if (path === null && parentRNode !== rNode) {
-    const body = parentRNode.ownerDocument.body;
-    path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);
-    if (path === null) {
-      throw nodeNotFoundError(lView, tNode);
-    }
-  }
-  return path;
-}
-var _isI18nHydrationSupportEnabled = false;
-var _prepareI18nBlockForHydrationImpl = () => {
-};
-function setIsI18nHydrationSupportEnabled(enabled) {
-  _isI18nHydrationSupportEnabled = enabled;
-}
-function isI18nHydrationSupportEnabled() {
-  return _isI18nHydrationSupportEnabled;
-}
-function prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {
-  _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);
-}
-function enablePrepareI18nBlockForHydrationImpl() {
-  _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;
-}
-function isI18nHydrationEnabled(injector) {
-  injector = injector ?? inject(Injector);
-  return injector.get(IS_I18N_HYDRATION_ENABLED, false);
-}
-function getOrComputeI18nChildren(tView, context) {
-  let i18nChildren = context.i18nChildren.get(tView);
-  if (i18nChildren === void 0) {
-    i18nChildren = collectI18nChildren(tView);
-    context.i18nChildren.set(tView, i18nChildren);
-  }
-  return i18nChildren;
-}
-function collectI18nChildren(tView) {
-  const children = /* @__PURE__ */ new Set();
-  function collectI18nViews(node) {
-    children.add(node.index);
-    switch (node.kind) {
-      case 1:
-      case 2: {
-        for (const childNode of node.children) {
-          collectI18nViews(childNode);
-        }
-        break;
-      }
-      case 3: {
-        for (const caseNodes of node.cases) {
-          for (const caseNode of caseNodes) {
-            collectI18nViews(caseNode);
-          }
-        }
-        break;
-      }
-    }
-  }
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const tI18n = tView.data[i];
-    if (!tI18n || !tI18n.ast) {
-      continue;
-    }
-    for (const node of tI18n.ast) {
-      collectI18nViews(node);
-    }
-  }
-  return children.size === 0 ? null : children;
-}
-function trySerializeI18nBlock(lView, index, context) {
-  if (!context.isI18nHydrationEnabled) {
-    return null;
-  }
-  const tView = lView[TVIEW];
-  const tI18n = tView.data[index];
-  if (!tI18n || !tI18n.ast) {
-    return null;
-  }
-  const parentTNode = tView.data[tI18n.parentTNodeIndex];
-  if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {
-    return null;
-  }
-  const serializedI18nBlock = {
-    caseQueue: [],
-    disconnectedNodes: /* @__PURE__ */ new Set(),
-    disjointNodes: /* @__PURE__ */ new Set()
-  };
-  serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);
-  return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;
-}
-function serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {
-  let prevRNode = null;
-  for (const node of nodes) {
-    const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);
-    if (nextRNode) {
-      if (isDisjointNode(prevRNode, nextRNode)) {
-        serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);
-      }
-      prevRNode = nextRNode;
-    }
-  }
-  return prevRNode;
-}
-function isDisjointNode(prevNode, nextNode) {
-  return prevNode && prevNode.nextSibling !== nextNode;
-}
-function serializeI18nNode(lView, serializedI18nBlock, context, node) {
-  const maybeRNode = unwrapRNode(lView[node.index]);
-  if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {
-    serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);
-    return null;
-  }
-  const rNode = maybeRNode;
-  switch (node.kind) {
-    case 0: {
-      processTextNodeBeforeSerialization(context, rNode);
-      break;
-    }
-    case 1:
-    case 2: {
-      serializeI18nBlock(lView, serializedI18nBlock, context, node.children);
-      break;
-    }
-    case 3: {
-      const currentCase = lView[node.currentCaseLViewIndex];
-      if (currentCase != null) {
-        const caseIdx = currentCase < 0 ? ~currentCase : currentCase;
-        serializedI18nBlock.caseQueue.push(caseIdx);
-        serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);
-      }
-      break;
-    }
-  }
-  return getFirstNativeNodeForI18nNode(lView, node);
-}
-function getFirstNativeNodeForI18nNode(lView, node) {
-  const tView = lView[TVIEW];
-  const maybeTNode = tView.data[node.index];
-  if (isTNodeShape(maybeTNode)) {
-    return getFirstNativeNode(lView, maybeTNode);
-  } else if (node.kind === 3) {
-    const icuIterator = createIcuIterator(maybeTNode, lView);
-    let rNode = icuIterator();
-    return rNode ?? unwrapRNode(lView[node.index]);
-  } else {
-    return unwrapRNode(lView[node.index]) ?? null;
-  }
-}
-function setCurrentNode(state, node) {
-  state.currentNode = node;
-}
-function appendI18nNodeToCollection(context, state, astNode) {
-  const noOffsetIndex = astNode.index - HEADER_OFFSET;
-  const {
-    disconnectedNodes
-  } = context;
-  const currentNode = state.currentNode;
-  if (state.isConnected) {
-    context.i18nNodes.set(noOffsetIndex, currentNode);
-    disconnectedNodes.delete(noOffsetIndex);
-  } else {
-    disconnectedNodes.add(noOffsetIndex);
-  }
-  return currentNode;
-}
-function skipSiblingNodes(state, skip) {
-  let currentNode = state.currentNode;
-  for (let i = 0; i < skip; i++) {
-    if (!currentNode) {
-      break;
-    }
-    currentNode = currentNode?.nextSibling ?? null;
-  }
-  return currentNode;
-}
-function forkHydrationState(state, nextNode) {
-  return {
-    currentNode: nextNode,
-    isConnected: state.isConnected
-  };
-}
-function prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {
-  const hydrationInfo = lView[HYDRATION];
-  if (!hydrationInfo) {
-    return;
-  }
-  if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {
-    return;
-  }
-  const tView = lView[TVIEW];
-  const tI18n = tView.data[index];
-  ngDevMode && assertDefined(tI18n, "Expected i18n data to be present in a given TView slot during hydration");
-  function findHydrationRoot() {
-    if (isRootTemplateMessage(subTemplateIndex)) {
-      ngDevMode && assertDefined(parentTNode, "Expected parent TNode while hydrating i18n root");
-      const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);
-      return parentTNode.type & 8 ? rootNode : rootNode.firstChild;
-    }
-    return hydrationInfo?.firstChild;
-  }
-  const currentNode = findHydrationRoot();
-  ngDevMode && assertDefined(currentNode, "Expected root i18n node during hydration");
-  const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? /* @__PURE__ */ new Set();
-  const i18nNodes = hydrationInfo.i18nNodes ??= /* @__PURE__ */ new Map();
-  const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];
-  const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= /* @__PURE__ */ new Map();
-  collectI18nNodesFromDom({
-    hydrationInfo,
-    lView,
-    i18nNodes,
-    disconnectedNodes,
-    caseQueue,
-    dehydratedIcuData
-  }, {
-    currentNode,
-    isConnected: true
-  }, tI18n.ast);
-  hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;
-}
-function collectI18nNodesFromDom(context, state, nodeOrNodes) {
-  if (Array.isArray(nodeOrNodes)) {
-    let nextState = state;
-    for (const node of nodeOrNodes) {
-      const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);
-      if (targetNode) {
-        nextState = forkHydrationState(state, targetNode);
-      }
-      collectI18nNodesFromDom(context, nextState, node);
-    }
-  } else {
-    if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {
-      return;
-    }
-    switch (nodeOrNodes.kind) {
-      case 0: {
-        const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-      case 1: {
-        collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);
-        const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-      case 2: {
-        const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;
-        const {
-          hydrationInfo
-        } = context;
-        const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);
-        switch (nodeOrNodes.type) {
-          case 0: {
-            const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);
-            if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {
-              collectI18nNodesFromDom(context, state, nodeOrNodes.children);
-              const nextNode = skipSiblingNodes(state, 1);
-              setCurrentNode(state, nextNode);
-            } else {
-              collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);
-              setCurrentNode(state, currentNode?.nextSibling ?? null);
-              if (containerSize !== null) {
-                const nextNode = skipSiblingNodes(state, containerSize + 1);
-                setCurrentNode(state, nextNode);
-              }
-            }
-            break;
-          }
-          case 1: {
-            ngDevMode && assertNotEqual(containerSize, null, "Expected a container size while hydrating i18n subtemplate");
-            appendI18nNodeToCollection(context, state, nodeOrNodes);
-            const nextNode = skipSiblingNodes(state, containerSize + 1);
-            setCurrentNode(state, nextNode);
-            break;
-          }
-        }
-        break;
-      }
-      case 3: {
-        const selectedCase = state.isConnected ? context.caseQueue.shift() : null;
-        const childState = {
-          currentNode: null,
-          isConnected: false
-        };
-        for (let i = 0; i < nodeOrNodes.cases.length; i++) {
-          collectI18nNodesFromDom(context, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);
-        }
-        if (selectedCase !== null) {
-          context.dehydratedIcuData.set(nodeOrNodes.index, {
-            case: selectedCase,
-            node: nodeOrNodes
-          });
-        }
-        const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);
-        setCurrentNode(state, currentNode?.nextSibling ?? null);
-        break;
-      }
-    }
-  }
-}
-var _claimDehydratedIcuCaseImpl = () => {
-};
-function claimDehydratedIcuCase(lView, icuIndex, caseIndex) {
-  _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);
-}
-function enableClaimDehydratedIcuCaseImpl() {
-  _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;
-}
-function claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {
-  const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;
-  if (dehydratedIcuDataMap) {
-    const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);
-    if (dehydratedIcuData?.case === caseIndex) {
-      dehydratedIcuDataMap.delete(icuIndex);
-    }
-  }
-}
-function removeDehydratedViews(lContainer) {
-  const views = lContainer[DEHYDRATED_VIEWS] ?? [];
-  const parentLView = lContainer[PARENT];
-  const renderer = parentLView[RENDERER];
-  const retainedViews = [];
-  for (const view of views) {
-    if (view.data[DEFER_BLOCK_ID] !== void 0) {
-      retainedViews.push(view);
-    } else {
-      removeDehydratedView(view, renderer);
-      ngDevMode && ngDevMode.dehydratedViewsRemoved++;
-    }
-  }
-  lContainer[DEHYDRATED_VIEWS] = retainedViews;
-}
-function removeDehydratedView(dehydratedView, renderer) {
-  let nodesRemoved = 0;
-  let currentRNode = dehydratedView.firstChild;
-  if (currentRNode) {
-    const numNodes = dehydratedView.data[NUM_ROOT_NODES];
-    while (nodesRemoved < numNodes) {
-      ngDevMode && validateSiblingNodeExists(currentRNode);
-      const nextSibling = currentRNode.nextSibling;
-      nativeRemoveNode(renderer, currentRNode, false);
-      currentRNode = nextSibling;
-      nodesRemoved++;
-    }
-  }
-}
-function locateDehydratedViewsInContainer(currentRNode, serializedViews) {
-  const dehydratedViews = [];
-  for (const serializedView of serializedViews) {
-    for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {
-      const view = {
-        data: serializedView,
-        firstChild: null
-      };
-      if (serializedView[NUM_ROOT_NODES] > 0) {
-        view.firstChild = currentRNode;
-        currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);
-      }
-      dehydratedViews.push(view);
-    }
-  }
-  return [currentRNode, dehydratedViews];
-}
-var _findMatchingDehydratedViewImpl = () => null;
-function findMatchingDehydratedViewImpl(lContainer, template) {
-  const views = lContainer[DEHYDRATED_VIEWS];
-  if (!template || views === null || views.length === 0) {
-    return null;
-  }
-  const view = views[0];
-  if (view.data[TEMPLATE_ID] === template) {
-    return views.shift();
-  } else {
-    removeDehydratedViews(lContainer);
-    return null;
-  }
-}
-function enableFindMatchingDehydratedViewImpl() {
-  _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;
-}
-function findMatchingDehydratedView(lContainer, template) {
-  return _findMatchingDehydratedViewImpl(lContainer, template);
-}
-var ComponentRef$1 = class {
-};
-var ComponentFactory$1 = class {
-};
-var _NullComponentFactoryResolver = class {
-  resolveComponentFactory(component) {
-    throw Error(`No component factory found for ${stringify(component)}.`);
-  }
-};
-var ComponentFactoryResolver$1 = class {
-  static NULL = new _NullComponentFactoryResolver();
-};
-var RendererFactory2 = class {
-};
-var Renderer2 = class {
-  /**
-   * If null or undefined, the view engine won't call it.
-   * This is used as a performance optimization for production mode.
-   */
-  destroyNode = null;
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = () => injectRenderer2();
-};
-function injectRenderer2() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);
-  return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];
-}
-var Sanitizer = class _Sanitizer {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _Sanitizer,
-      providedIn: "root",
-      factory: () => null
-    })
-  );
-};
-function isModuleWithProviders(value) {
-  return value.ngModule !== void 0;
-}
-function isNgModule(value) {
-  return !!getNgModuleDef(value);
-}
-function isPipe(value) {
-  return !!getPipeDef$1(value);
-}
-function isDirective(value) {
-  return !!getDirectiveDef(value);
-}
-function isComponent(value) {
-  return !!getComponentDef(value);
-}
-function getDependencyTypeForError(type) {
-  if (getComponentDef(type)) return "component";
-  if (getDirectiveDef(type)) return "directive";
-  if (getPipeDef$1(type)) return "pipe";
-  return "type";
-}
-function verifyStandaloneImport(depType, importingType) {
-  if (isForwardRef(depType)) {
-    depType = resolveForwardRef(depType);
-    if (!depType) {
-      throw new Error(`Expected forwardRef function, imported from "${stringifyForError(importingType)}", to return a standalone entity or NgModule but got "${stringifyForError(depType) || depType}".`);
-    }
-  }
-  if (getNgModuleDef(depType) == null) {
-    const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);
-    if (def != null) {
-      if (!def.standalone) {
-        throw new Error(`The "${stringifyForError(depType)}" ${getDependencyTypeForError(depType)}, imported from "${stringifyForError(importingType)}", is not standalone. Did you forget to add the standalone: true flag?`);
-      }
-    } else {
-      if (isModuleWithProviders(depType)) {
-        throw new Error(`A module with providers was imported from "${stringifyForError(importingType)}". Modules with providers are not supported in standalone components imports.`);
-      } else {
-        throw new Error(`The "${stringifyForError(depType)}" type, imported from "${stringifyForError(importingType)}", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);
-      }
-    }
-  }
-}
-var USE_RUNTIME_DEPS_TRACKER_FOR_JIT = true;
-var DepsTracker = class {
-  ownerNgModule = /* @__PURE__ */ new Map();
-  ngModulesWithSomeUnresolvedDecls = /* @__PURE__ */ new Set();
-  ngModulesScopeCache = /* @__PURE__ */ new Map();
-  standaloneComponentsScopeCache = /* @__PURE__ */ new Map();
-  /**
-   * Attempts to resolve ng module's forward ref declarations as much as possible and add them to
-   * the `ownerNgModule` map. This method normally should be called after the initial parsing when
-   * all the forward refs are resolved (e.g., when trying to render a component)
-   */
-  resolveNgModulesDecls() {
-    if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {
-      return;
-    }
-    for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {
-      const def = getNgModuleDef(moduleType);
-      if (def?.declarations) {
-        for (const decl of maybeUnwrapFn(def.declarations)) {
-          if (isComponent(decl)) {
-            this.ownerNgModule.set(decl, moduleType);
-          }
-        }
-      }
-    }
-    this.ngModulesWithSomeUnresolvedDecls.clear();
-  }
-  /** @override */
-  getComponentDependencies(type, rawImports) {
-    this.resolveNgModulesDecls();
-    const def = getComponentDef(type);
-    if (def === null) {
-      throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);
-    }
-    if (def.standalone) {
-      const scope = this.getStandaloneComponentScope(type, rawImports);
-      if (scope.compilation.isPoisoned) {
-        return {
-          dependencies: []
-        };
-      }
-      return {
-        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]
-      };
-    } else {
-      if (!this.ownerNgModule.has(type)) {
-        return {
-          dependencies: []
-        };
-      }
-      const scope = this.getNgModuleScope(this.ownerNgModule.get(type));
-      if (scope.compilation.isPoisoned) {
-        return {
-          dependencies: []
-        };
-      }
-      return {
-        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]
-      };
-    }
-  }
-  /**
-   * @override
-   * This implementation does not make use of param scopeInfo since it assumes the scope info is
-   * already added to the type itself through methods like {@link ɵɵsetNgModuleScope}
-   */
-  registerNgModule(type, scopeInfo) {
-    if (!isNgModule(type)) {
-      throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);
-    }
-    this.ngModulesWithSomeUnresolvedDecls.add(type);
-  }
-  /** @override */
-  clearScopeCacheFor(type) {
-    this.ngModulesScopeCache.delete(type);
-    this.standaloneComponentsScopeCache.delete(type);
-  }
-  /** @override */
-  getNgModuleScope(type) {
-    if (this.ngModulesScopeCache.has(type)) {
-      return this.ngModulesScopeCache.get(type);
-    }
-    const scope = this.computeNgModuleScope(type);
-    this.ngModulesScopeCache.set(type, scope);
-    return scope;
-  }
-  /** Compute NgModule scope afresh. */
-  computeNgModuleScope(type) {
-    const def = getNgModuleDef(type, true);
-    const scope = {
-      exported: {
-        directives: /* @__PURE__ */ new Set(),
-        pipes: /* @__PURE__ */ new Set()
-      },
-      compilation: {
-        directives: /* @__PURE__ */ new Set(),
-        pipes: /* @__PURE__ */ new Set()
-      }
-    };
-    for (const imported of maybeUnwrapFn(def.imports)) {
-      if (isNgModule(imported)) {
-        const importedScope = this.getNgModuleScope(imported);
-        addSet(importedScope.exported.directives, scope.compilation.directives);
-        addSet(importedScope.exported.pipes, scope.compilation.pipes);
-      } else if (isStandalone(imported)) {
-        if (isDirective(imported) || isComponent(imported)) {
-          scope.compilation.directives.add(imported);
-        } else if (isPipe(imported)) {
-          scope.compilation.pipes.add(imported);
-        } else {
-          throw new RuntimeError(980, "The standalone imported type is neither a component nor a directive nor a pipe");
-        }
-      } else {
-        scope.compilation.isPoisoned = true;
-        break;
-      }
-    }
-    if (!scope.compilation.isPoisoned) {
-      for (const decl of maybeUnwrapFn(def.declarations)) {
-        if (isNgModule(decl) || isStandalone(decl)) {
-          scope.compilation.isPoisoned = true;
-          break;
-        }
-        if (isPipe(decl)) {
-          scope.compilation.pipes.add(decl);
-        } else {
-          scope.compilation.directives.add(decl);
-        }
-      }
-    }
-    for (const exported of maybeUnwrapFn(def.exports)) {
-      if (isNgModule(exported)) {
-        const exportedScope = this.getNgModuleScope(exported);
-        addSet(exportedScope.exported.directives, scope.exported.directives);
-        addSet(exportedScope.exported.pipes, scope.exported.pipes);
-        addSet(exportedScope.exported.directives, scope.compilation.directives);
-        addSet(exportedScope.exported.pipes, scope.compilation.pipes);
-      } else if (isPipe(exported)) {
-        scope.exported.pipes.add(exported);
-      } else {
-        scope.exported.directives.add(exported);
-      }
-    }
-    return scope;
-  }
-  /** @override */
-  getStandaloneComponentScope(type, rawImports) {
-    if (this.standaloneComponentsScopeCache.has(type)) {
-      return this.standaloneComponentsScopeCache.get(type);
-    }
-    const ans = this.computeStandaloneComponentScope(type, rawImports);
-    this.standaloneComponentsScopeCache.set(type, ans);
-    return ans;
-  }
-  computeStandaloneComponentScope(type, rawImports) {
-    const ans = {
-      compilation: {
-        // Standalone components are always able to self-reference.
-        directives: /* @__PURE__ */ new Set([type]),
-        pipes: /* @__PURE__ */ new Set(),
-        ngModules: /* @__PURE__ */ new Set()
-      }
-    };
-    for (const rawImport of flatten(rawImports ?? [])) {
-      const imported = resolveForwardRef(rawImport);
-      try {
-        verifyStandaloneImport(imported, type);
-      } catch (e) {
-        ans.compilation.isPoisoned = true;
-        return ans;
-      }
-      if (isNgModule(imported)) {
-        ans.compilation.ngModules.add(imported);
-        const importedScope = this.getNgModuleScope(imported);
-        if (importedScope.exported.isPoisoned) {
-          ans.compilation.isPoisoned = true;
-          return ans;
-        }
-        addSet(importedScope.exported.directives, ans.compilation.directives);
-        addSet(importedScope.exported.pipes, ans.compilation.pipes);
-      } else if (isPipe(imported)) {
-        ans.compilation.pipes.add(imported);
-      } else if (isDirective(imported) || isComponent(imported)) {
-        ans.compilation.directives.add(imported);
-      } else {
-        ans.compilation.isPoisoned = true;
-        return ans;
-      }
-    }
-    return ans;
-  }
-  /** @override */
-  isOrphanComponent(cmp) {
-    const def = getComponentDef(cmp);
-    if (!def || def.standalone) {
-      return false;
-    }
-    this.resolveNgModulesDecls();
-    return !this.ownerNgModule.has(cmp);
-  }
-};
-function addSet(sourceSet, targetSet) {
-  for (const m of sourceSet) {
-    targetSet.add(m);
-  }
-}
-var depsTracker = new DepsTracker();
-function computeStaticStyling(tNode, attrs, writeToHost) {
-  ngDevMode && assertFirstCreatePass(getTView(), "Expecting to be called in first template pass only");
-  let styles = writeToHost ? tNode.styles : null;
-  let classes = writeToHost ? tNode.classes : null;
-  let mode = 0;
-  if (attrs !== null) {
-    for (let i = 0; i < attrs.length; i++) {
-      const value = attrs[i];
-      if (typeof value === "number") {
-        mode = value;
-      } else if (mode == 1) {
-        classes = concatStringsWithSpace(classes, value);
-      } else if (mode == 2) {
-        const style = value;
-        const styleValue = attrs[++i];
-        styles = concatStringsWithSpace(styles, style + ": " + styleValue + ";");
-      }
-    }
-  }
-  writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;
-  writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;
-}
-var ComponentFactoryResolver = class extends ComponentFactoryResolver$1 {
-  ngModule;
-  /**
-   * @param ngModule The NgModuleRef to which all resolved factories are bound.
-   */
-  constructor(ngModule) {
-    super();
-    this.ngModule = ngModule;
-  }
-  resolveComponentFactory(component) {
-    ngDevMode && assertComponentType(component);
-    const componentDef = getComponentDef(component);
-    return new ComponentFactory(componentDef, this.ngModule);
-  }
-};
-function toRefArray(map2, isInputMap) {
-  const array = [];
-  for (const publicName in map2) {
-    if (!map2.hasOwnProperty(publicName)) {
-      continue;
-    }
-    const value = map2[publicName];
-    if (value === void 0) {
-      continue;
-    }
-    const isArray = Array.isArray(value);
-    const propName = isArray ? value[0] : value;
-    const flags = isArray ? value[1] : InputFlags.None;
-    if (isInputMap) {
-      array.push({
-        propName,
-        templateName: publicName,
-        isSignal: (flags & InputFlags.SignalBased) !== 0
-      });
-    } else {
-      array.push({
-        propName,
-        templateName: publicName
-      });
-    }
-  }
-  return array;
-}
-function getNamespace(elementName) {
-  const name = elementName.toLowerCase();
-  return name === "svg" ? SVG_NAMESPACE : name === "math" ? MATH_ML_NAMESPACE : null;
-}
-var ComponentFactory = class extends ComponentFactory$1 {
-  componentDef;
-  ngModule;
-  selector;
-  componentType;
-  ngContentSelectors;
-  isBoundToModule;
-  get inputs() {
-    const componentDef = this.componentDef;
-    const inputTransforms = componentDef.inputTransforms;
-    const refArray = toRefArray(componentDef.inputs, true);
-    if (inputTransforms !== null) {
-      for (const input2 of refArray) {
-        if (inputTransforms.hasOwnProperty(input2.propName)) {
-          input2.transform = inputTransforms[input2.propName];
-        }
-      }
-    }
-    return refArray;
-  }
-  get outputs() {
-    return toRefArray(this.componentDef.outputs, false);
-  }
-  /**
-   * @param componentDef The component definition.
-   * @param ngModule The NgModuleRef to which the factory is bound.
-   */
-  constructor(componentDef, ngModule) {
-    super();
-    this.componentDef = componentDef;
-    this.ngModule = ngModule;
-    this.componentType = componentDef.type;
-    this.selector = stringifyCSSSelectorList(componentDef.selectors);
-    this.ngContentSelectors = componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];
-    this.isBoundToModule = !!ngModule;
-  }
-  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (ngDevMode && (typeof ngJitMode === "undefined" || ngJitMode) && this.componentDef.debugInfo?.forbidOrphanRendering) {
-        if (depsTracker.isOrphanComponent(this.componentType)) {
-          throw new RuntimeError(981, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(this.componentType)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);
-        }
-      }
-      environmentInjector = environmentInjector || this.ngModule;
-      let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;
-      if (realEnvironmentInjector && this.componentDef.getStandaloneInjector !== null) {
-        realEnvironmentInjector = this.componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;
-      }
-      const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;
-      const rendererFactory = rootViewInjector.get(RendererFactory2, null);
-      if (rendererFactory === null) {
-        throw new RuntimeError(407, ngDevMode && "Angular was not able to inject a renderer (RendererFactory2). Likely this is due to a broken DI hierarchy. Make sure that any injector used to create this component has a correct parent.");
-      }
-      const sanitizer = rootViewInjector.get(Sanitizer, null);
-      const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);
-      const environment = {
-        rendererFactory,
-        sanitizer,
-        changeDetectionScheduler
-      };
-      const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
-      const elementName = this.componentDef.selectors[0][0] || "div";
-      const hostRNode = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) : createElementNode(hostRenderer, elementName, getNamespace(elementName));
-      let rootFlags = 512;
-      if (this.componentDef.signals) {
-        rootFlags |= 4096;
-      } else if (!this.componentDef.onPush) {
-        rootFlags |= 16;
-      }
-      let hydrationInfo = null;
-      if (hostRNode !== null) {
-        hydrationInfo = retrieveHydrationInfo(
-          hostRNode,
-          rootViewInjector,
-          true
-          /* isRootView */
-        );
-      }
-      const rootTView = createTView(0, null, null, 1, 0, null, null, null, null, null, null);
-      const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);
-      enterView(rootLView);
-      let component;
-      let tElementNode;
-      let componentView = null;
-      try {
-        const rootComponentDef = this.componentDef;
-        let rootDirectives;
-        let hostDirectiveDefs = null;
-        if (rootComponentDef.findHostDirectiveDefs) {
-          rootDirectives = [];
-          hostDirectiveDefs = /* @__PURE__ */ new Map();
-          rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);
-          rootDirectives.push(rootComponentDef);
-          ngDevMode && assertNoDuplicateDirectives(rootDirectives);
-        } else {
-          rootDirectives = [rootComponentDef];
-        }
-        const hostTNode = createRootComponentTNode(rootLView, hostRNode);
-        componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment, hostRenderer);
-        tElementNode = getTNode(rootTView, HEADER_OFFSET);
-        if (hostRNode) {
-          setRootNodeAttributes(hostRenderer, rootComponentDef, hostRNode, rootSelectorOrNode);
-        }
-        if (projectableNodes !== void 0) {
-          projectNodes(tElementNode, this.ngContentSelectors, projectableNodes);
-        }
-        component = createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, [LifecycleHooksFeature]);
-        renderView(rootTView, rootLView, null);
-      } catch (e) {
-        if (componentView !== null) {
-          unregisterLView(componentView);
-        }
-        unregisterLView(rootLView);
-        throw e;
-      } finally {
-        leaveView();
-      }
-      return new ComponentRef(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-};
-var ComponentRef = class extends ComponentRef$1 {
-  location;
-  _rootLView;
-  _tNode;
-  instance;
-  hostView;
-  changeDetectorRef;
-  componentType;
-  previousInputValues = null;
-  constructor(componentType, instance, location2, _rootLView, _tNode) {
-    super();
-    this.location = location2;
-    this._rootLView = _rootLView;
-    this._tNode = _tNode;
-    this.instance = instance;
-    this.hostView = this.changeDetectorRef = new ViewRef$1(
-      _rootLView,
-      void 0,
-      false
-      /* notifyErrorHandler */
-    );
-    this.componentType = componentType;
-  }
-  setInput(name, value) {
-    const inputData = this._tNode.inputs;
-    let dataValue;
-    if (inputData !== null && (dataValue = inputData[name])) {
-      this.previousInputValues ??= /* @__PURE__ */ new Map();
-      if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {
-        return;
-      }
-      const lView = this._rootLView;
-      setInputsForProperty(lView[TVIEW], lView, dataValue, name, value);
-      this.previousInputValues.set(name, value);
-      const childComponentLView = getComponentLViewByIndex(this._tNode.index, lView);
-      markViewDirty(
-        childComponentLView,
-        1
-        /* NotificationSource.SetInput */
-      );
-    } else {
-      if (ngDevMode) {
-        const cmpNameForError = stringifyForError(this.componentType);
-        let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;
-        message += `Make sure that the '${name}' property is annotated with @Input() or a mapped @Input('${name}') exists.`;
-        reportUnknownPropertyError(message);
-      }
-    }
-  }
-  get injector() {
-    return new NodeInjector(this._tNode, this._rootLView);
-  }
-  destroy() {
-    this.hostView.destroy();
-  }
-  onDestroy(callback) {
-    this.hostView.onDestroy(callback);
-  }
-};
-function createRootComponentTNode(lView, rNode) {
-  const tView = lView[TVIEW];
-  const index = HEADER_OFFSET;
-  ngDevMode && assertIndexInRange(lView, index);
-  lView[index] = rNode;
-  return getOrCreateTNode(tView, index, 2, "#host", null);
-}
-function createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment, hostRenderer) {
-  const tView = rootView[TVIEW];
-  applyRootComponentStyling(rootDirectives, tNode, hostRNode, hostRenderer);
-  let hydrationInfo = null;
-  if (hostRNode !== null) {
-    hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);
-  }
-  const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);
-  const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);
-  if (tView.firstCreatePass) {
-    markAsComponentHost(tView, tNode, rootDirectives.length - 1);
-  }
-  addToEndOfViewTree(rootView, componentView);
-  return rootView[tNode.index] = componentView;
-}
-function applyRootComponentStyling(rootDirectives, tNode, rNode, hostRenderer) {
-  for (const def of rootDirectives) {
-    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);
-  }
-  if (tNode.mergedAttrs !== null) {
-    computeStaticStyling(tNode, tNode.mergedAttrs, true);
-    if (rNode !== null) {
-      setupStaticAttributes(hostRenderer, rNode, tNode);
-    }
-  }
-}
-function createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {
-  const rootTNode = getCurrentTNode();
-  ngDevMode && assertDefined(rootTNode, "tNode should have been already created");
-  const tView = rootLView[TVIEW];
-  const native = getNativeByTNode(rootTNode, rootLView);
-  initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);
-  for (let i = 0; i < rootDirectives.length; i++) {
-    const directiveIndex = rootTNode.directiveStart + i;
-    const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);
-    attachPatchData(directiveInstance, rootLView);
-  }
-  invokeDirectivesHostBindings(tView, rootLView, rootTNode);
-  if (native) {
-    attachPatchData(native, rootLView);
-  }
-  ngDevMode && assertGreaterThan(rootTNode.componentOffset, -1, "componentOffset must be great than -1");
-  const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);
-  componentView[CONTEXT] = rootLView[CONTEXT] = component;
-  if (hostFeatures !== null) {
-    for (const feature of hostFeatures) {
-      feature(component, rootComponentDef);
-    }
-  }
-  executeContentQueries(tView, rootTNode, rootLView);
-  return component;
-}
-function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
-  if (rootSelectorOrNode) {
-    setUpAttributes(hostRenderer, hostRNode, ["ng-version", "19.0.5"]);
-  } else {
-    const {
-      attrs,
-      classes
-    } = extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
-    if (attrs) {
-      setUpAttributes(hostRenderer, hostRNode, attrs);
-    }
-    if (classes && classes.length > 0) {
-      writeDirectClass(hostRenderer, hostRNode, classes.join(" "));
-    }
-  }
-}
-function projectNodes(tNode, ngContentSelectors, projectableNodes) {
-  const projection = tNode.projection = [];
-  for (let i = 0; i < ngContentSelectors.length; i++) {
-    const nodesforSlot = projectableNodes[i];
-    projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);
-  }
-}
-function LifecycleHooksFeature() {
-  const tNode = getCurrentTNode();
-  ngDevMode && assertDefined(tNode, "TNode is required");
-  registerPostOrderHooks(getLView()[TVIEW], tNode);
-}
-var ViewContainerRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectViewContainerRef;
-};
-function injectViewContainerRef() {
-  const previousTNode = getCurrentTNode();
-  return createContainerRef(previousTNode, getLView());
-}
-var VE_ViewContainerRef = ViewContainerRef;
-var R3ViewContainerRef = class ViewContainerRef2 extends VE_ViewContainerRef {
-  _lContainer;
-  _hostTNode;
-  _hostLView;
-  constructor(_lContainer, _hostTNode, _hostLView) {
-    super();
-    this._lContainer = _lContainer;
-    this._hostTNode = _hostTNode;
-    this._hostLView = _hostLView;
-  }
-  get element() {
-    return createElementRef(this._hostTNode, this._hostLView);
-  }
-  get injector() {
-    return new NodeInjector(this._hostTNode, this._hostLView);
-  }
-  /** @deprecated No replacement */
-  get parentInjector() {
-    const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);
-    if (hasParentInjector(parentLocation)) {
-      const parentView = getParentInjectorView(parentLocation, this._hostLView);
-      const injectorIndex = getParentInjectorIndex(parentLocation);
-      ngDevMode && assertNodeInjector(parentView, injectorIndex);
-      const parentTNode = parentView[TVIEW].data[
-        injectorIndex + 8
-        /* NodeInjectorOffset.TNODE */
-      ];
-      return new NodeInjector(parentTNode, parentView);
-    } else {
-      return new NodeInjector(null, this._hostLView);
-    }
-  }
-  clear() {
-    while (this.length > 0) {
-      this.remove(this.length - 1);
-    }
-  }
-  get(index) {
-    const viewRefs = getViewRefs(this._lContainer);
-    return viewRefs !== null && viewRefs[index] || null;
-  }
-  get length() {
-    return this._lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-  createEmbeddedView(templateRef, context, indexOrOptions) {
-    let index;
-    let injector;
-    if (typeof indexOrOptions === "number") {
-      index = indexOrOptions;
-    } else if (indexOrOptions != null) {
-      index = indexOrOptions.index;
-      injector = indexOrOptions.injector;
-    }
-    const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);
-    const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, dehydratedView);
-    this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));
-    return viewRef;
-  }
-  createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {
-    const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);
-    let index;
-    if (isComponentFactory) {
-      if (ngDevMode) {
-        assertEqual(typeof indexOrOptions !== "object", true, "It looks like Component factory was provided as the first argument and an options object as the second argument. This combination of arguments is incompatible. You can either change the first argument to provide Component type or change the second argument to be a number (representing an index at which to insert the new component's host view into this container)");
-      }
-      index = indexOrOptions;
-    } else {
-      if (ngDevMode) {
-        assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. Please check whether provided class has @Component decorator.`);
-        assertEqual(typeof indexOrOptions !== "number", true, "It looks like Component type was provided as the first argument and a number (representing an index at which to insert the new component's host view into this container as the second argument. This combination of arguments is incompatible. Please use an object as the second argument instead.");
-      }
-      const options = indexOrOptions || {};
-      if (ngDevMode && options.environmentInjector && options.ngModuleRef) {
-        throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);
-      }
-      index = options.index;
-      injector = options.injector;
-      projectableNodes = options.projectableNodes;
-      environmentInjector = options.environmentInjector || options.ngModuleRef;
-    }
-    const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));
-    const contextInjector = injector || this.parentInjector;
-    if (!environmentInjector && componentFactory.ngModule == null) {
-      const _injector = isComponentFactory ? contextInjector : this.parentInjector;
-      const result = _injector.get(EnvironmentInjector, null);
-      if (result) {
-        environmentInjector = result;
-      }
-    }
-    const componentDef = getComponentDef(componentFactory.componentType ?? {});
-    const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);
-    const rNode = dehydratedView?.firstChild ?? null;
-    const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector);
-    this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));
-    return componentRef;
-  }
-  insert(viewRef, index) {
-    return this.insertImpl(viewRef, index, true);
-  }
-  insertImpl(viewRef, index, addToDOM) {
-    const lView = viewRef._lView;
-    if (ngDevMode && viewRef.destroyed) {
-      throw new Error("Cannot insert a destroyed View in a ViewContainer!");
-    }
-    if (viewAttachedToContainer(lView)) {
-      const prevIdx = this.indexOf(viewRef);
-      if (prevIdx !== -1) {
-        this.detach(prevIdx);
-      } else {
-        const prevLContainer = lView[PARENT];
-        ngDevMode && assertEqual(isLContainer(prevLContainer), true, "An attached view should have its PARENT point to a container.");
-        const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);
-        prevVCRef.detach(prevVCRef.indexOf(viewRef));
-      }
-    }
-    const adjustedIdx = this._adjustIndex(index);
-    const lContainer = this._lContainer;
-    addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);
-    viewRef.attachToViewContainerRef();
-    addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
-    return viewRef;
-  }
-  move(viewRef, newIndex) {
-    if (ngDevMode && viewRef.destroyed) {
-      throw new Error("Cannot move a destroyed View in a ViewContainer!");
-    }
-    return this.insert(viewRef, newIndex);
-  }
-  indexOf(viewRef) {
-    const viewRefsArr = getViewRefs(this._lContainer);
-    return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;
-  }
-  remove(index) {
-    const adjustedIdx = this._adjustIndex(index, -1);
-    const detachedView = detachView(this._lContainer, adjustedIdx);
-    if (detachedView) {
-      removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);
-      destroyLView(detachedView[TVIEW], detachedView);
-    }
-  }
-  detach(index) {
-    const adjustedIdx = this._adjustIndex(index, -1);
-    const view = detachView(this._lContainer, adjustedIdx);
-    const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;
-    return wasDetached ? new ViewRef$1(view) : null;
-  }
-  _adjustIndex(index, shift = 0) {
-    if (index == null) {
-      return this.length + shift;
-    }
-    if (ngDevMode) {
-      assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);
-      assertLessThan(index, this.length + 1 + shift, "index");
-    }
-    return index;
-  }
-};
-function getViewRefs(lContainer) {
-  return lContainer[VIEW_REFS];
-}
-function getOrCreateViewRefs(lContainer) {
-  return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);
-}
-function createContainerRef(hostTNode, hostLView) {
-  ngDevMode && assertTNodeType(
-    hostTNode,
-    12 | 3
-    /* TNodeType.AnyRNode */
-  );
-  let lContainer;
-  const slotValue = hostLView[hostTNode.index];
-  if (isLContainer(slotValue)) {
-    lContainer = slotValue;
-  } else {
-    lContainer = createLContainer(slotValue, hostLView, null, hostTNode);
-    hostLView[hostTNode.index] = lContainer;
-    addToEndOfViewTree(hostLView, lContainer);
-  }
-  _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);
-  return new R3ViewContainerRef(lContainer, hostTNode, hostLView);
-}
-function insertAnchorNode(hostLView, hostTNode) {
-  const renderer = hostLView[RENDERER];
-  ngDevMode && ngDevMode.rendererCreateComment++;
-  const commentNode = renderer.createComment(ngDevMode ? "container" : "");
-  const hostNative = getNativeByTNode(hostTNode, hostLView);
-  const parentOfHostNative = nativeParentNode(renderer, hostNative);
-  nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);
-  return commentNode;
-}
-var _locateOrCreateAnchorNode = createAnchorNode;
-var _populateDehydratedViewsInLContainer = () => false;
-function populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {
-  return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);
-}
-function createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
-  if (lContainer[NATIVE]) return;
-  let commentNode;
-  if (hostTNode.type & 8) {
-    commentNode = unwrapRNode(slotValue);
-  } else {
-    commentNode = insertAnchorNode(hostLView, hostTNode);
-  }
-  lContainer[NATIVE] = commentNode;
-}
-function populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {
-  if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {
-    return true;
-  }
-  const hydrationInfo = hostLView[HYDRATION];
-  const noOffsetIndex = tNode.index - HEADER_OFFSET;
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
-  if (isNodeCreationMode) {
-    return false;
-  }
-  const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);
-  const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];
-  ngDevMode && assertDefined(serializedViews, "Unexpected state: no hydration info available for a given TNode, which represents a view container.");
-  const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);
-  if (ngDevMode) {
-    validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);
-    markRNodeAsClaimedByHydration(commentNode, false);
-  }
-  lContainer[NATIVE] = commentNode;
-  lContainer[DEHYDRATED_VIEWS] = dehydratedViews;
-  return true;
-}
-function locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
-  if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {
-    createAnchorNode(lContainer, hostLView, hostTNode, slotValue);
-  }
-}
-function enableLocateOrCreateContainerRefImpl() {
-  _locateOrCreateAnchorNode = locateOrCreateAnchorNode;
-  _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;
-}
-var LQuery_ = class _LQuery_ {
-  queryList;
-  matches = null;
-  constructor(queryList) {
-    this.queryList = queryList;
-  }
-  clone() {
-    return new _LQuery_(this.queryList);
-  }
-  setDirty() {
-    this.queryList.setDirty();
-  }
-};
-var LQueries_ = class _LQueries_ {
-  queries;
-  constructor(queries = []) {
-    this.queries = queries;
-  }
-  createEmbeddedView(tView) {
-    const tQueries = tView.queries;
-    if (tQueries !== null) {
-      const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;
-      const viewLQueries = [];
-      for (let i = 0; i < noOfInheritedQueries; i++) {
-        const tQuery = tQueries.getByIndex(i);
-        const parentLQuery = this.queries[tQuery.indexInDeclarationView];
-        viewLQueries.push(parentLQuery.clone());
-      }
-      return new _LQueries_(viewLQueries);
-    }
-    return null;
-  }
-  insertView(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  detachView(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  finishViewCreation(tView) {
-    this.dirtyQueriesWithMatches(tView);
-  }
-  dirtyQueriesWithMatches(tView) {
-    for (let i = 0; i < this.queries.length; i++) {
-      if (getTQuery(tView, i).matches !== null) {
-        this.queries[i].setDirty();
-      }
-    }
-  }
-};
-var TQueryMetadata_ = class {
-  flags;
-  read;
-  predicate;
-  constructor(predicate, flags, read = null) {
-    this.flags = flags;
-    this.read = read;
-    if (typeof predicate === "string") {
-      this.predicate = splitQueryMultiSelectors(predicate);
-    } else {
-      this.predicate = predicate;
-    }
-  }
-};
-var TQueries_ = class _TQueries_ {
-  queries;
-  constructor(queries = []) {
-    this.queries = queries;
-  }
-  elementStart(tView, tNode) {
-    ngDevMode && assertFirstCreatePass(tView, "Queries should collect results on the first template pass only");
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].elementStart(tView, tNode);
-    }
-  }
-  elementEnd(tNode) {
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].elementEnd(tNode);
-    }
-  }
-  embeddedTView(tNode) {
-    let queriesForTemplateRef = null;
-    for (let i = 0; i < this.length; i++) {
-      const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;
-      const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);
-      if (tqueryClone) {
-        tqueryClone.indexInDeclarationView = i;
-        if (queriesForTemplateRef !== null) {
-          queriesForTemplateRef.push(tqueryClone);
-        } else {
-          queriesForTemplateRef = [tqueryClone];
-        }
-      }
-    }
-    return queriesForTemplateRef !== null ? new _TQueries_(queriesForTemplateRef) : null;
-  }
-  template(tView, tNode) {
-    ngDevMode && assertFirstCreatePass(tView, "Queries should collect results on the first template pass only");
-    for (let i = 0; i < this.queries.length; i++) {
-      this.queries[i].template(tView, tNode);
-    }
-  }
-  getByIndex(index) {
-    ngDevMode && assertIndexInRange(this.queries, index);
-    return this.queries[index];
-  }
-  get length() {
-    return this.queries.length;
-  }
-  track(tquery) {
-    this.queries.push(tquery);
-  }
-};
-var TQuery_ = class _TQuery_ {
-  metadata;
-  matches = null;
-  indexInDeclarationView = -1;
-  crossesNgTemplate = false;
-  /**
-   * A node index on which a query was declared (-1 for view queries and ones inherited from the
-   * declaration template). We use this index (alongside with _appliesToNextNode flag) to know
-   * when to apply content queries to elements in a template.
-   */
-  _declarationNodeIndex;
-  /**
-   * A flag indicating if a given query still applies to nodes it is crossing. We use this flag
-   * (alongside with _declarationNodeIndex) to know when to stop applying content queries to
-   * elements in a template.
-   */
-  _appliesToNextNode = true;
-  constructor(metadata, nodeIndex = -1) {
-    this.metadata = metadata;
-    this._declarationNodeIndex = nodeIndex;
-  }
-  elementStart(tView, tNode) {
-    if (this.isApplyingToNode(tNode)) {
-      this.matchTNode(tView, tNode);
-    }
-  }
-  elementEnd(tNode) {
-    if (this._declarationNodeIndex === tNode.index) {
-      this._appliesToNextNode = false;
-    }
-  }
-  template(tView, tNode) {
-    this.elementStart(tView, tNode);
-  }
-  embeddedTView(tNode, childQueryIndex) {
-    if (this.isApplyingToNode(tNode)) {
-      this.crossesNgTemplate = true;
-      this.addMatch(-tNode.index, childQueryIndex);
-      return new _TQuery_(this.metadata);
-    }
-    return null;
-  }
-  isApplyingToNode(tNode) {
-    if (this._appliesToNextNode && (this.metadata.flags & 1) !== 1) {
-      const declarationNodeIdx = this._declarationNodeIndex;
-      let parent = tNode.parent;
-      while (parent !== null && parent.type & 8 && parent.index !== declarationNodeIdx) {
-        parent = parent.parent;
-      }
-      return declarationNodeIdx === (parent !== null ? parent.index : -1);
-    }
-    return this._appliesToNextNode;
-  }
-  matchTNode(tView, tNode) {
-    const predicate = this.metadata.predicate;
-    if (Array.isArray(predicate)) {
-      for (let i = 0; i < predicate.length; i++) {
-        const name = predicate[i];
-        this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));
-        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));
-      }
-    } else {
-      if (predicate === TemplateRef) {
-        if (tNode.type & 4) {
-          this.matchTNodeWithReadOption(tView, tNode, -1);
-        }
-      } else {
-        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));
-      }
-    }
-  }
-  matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {
-    if (nodeMatchIdx !== null) {
-      const read = this.metadata.read;
-      if (read !== null) {
-        if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4) {
-          this.addMatch(tNode.index, -2);
-        } else {
-          const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);
-          if (directiveOrProviderIdx !== null) {
-            this.addMatch(tNode.index, directiveOrProviderIdx);
-          }
-        }
-      } else {
-        this.addMatch(tNode.index, nodeMatchIdx);
-      }
-    }
-  }
-  addMatch(tNodeIdx, matchIdx) {
-    if (this.matches === null) {
-      this.matches = [tNodeIdx, matchIdx];
-    } else {
-      this.matches.push(tNodeIdx, matchIdx);
-    }
-  }
-};
-function getIdxOfMatchingSelector(tNode, selector) {
-  const localNames = tNode.localNames;
-  if (localNames !== null) {
-    for (let i = 0; i < localNames.length; i += 2) {
-      if (localNames[i] === selector) {
-        return localNames[i + 1];
-      }
-    }
-  }
-  return null;
-}
-function createResultByTNodeType(tNode, currentView) {
-  if (tNode.type & (3 | 8)) {
-    return createElementRef(tNode, currentView);
-  } else if (tNode.type & 4) {
-    return createTemplateRef(tNode, currentView);
-  }
-  return null;
-}
-function createResultForNode(lView, tNode, matchingIdx, read) {
-  if (matchingIdx === -1) {
-    return createResultByTNodeType(tNode, lView);
-  } else if (matchingIdx === -2) {
-    return createSpecialToken(lView, tNode, read);
-  } else {
-    return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);
-  }
-}
-function createSpecialToken(lView, tNode, read) {
-  if (read === ElementRef) {
-    return createElementRef(tNode, lView);
-  } else if (read === TemplateRef) {
-    return createTemplateRef(tNode, lView);
-  } else if (read === ViewContainerRef) {
-    ngDevMode && assertTNodeType(
-      tNode,
-      3 | 12
-      /* TNodeType.AnyContainer */
-    );
-    return createContainerRef(tNode, lView);
-  } else {
-    ngDevMode && throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);
-  }
-}
-function materializeViewResults(tView, lView, tQuery, queryIndex) {
-  const lQuery = lView[QUERIES].queries[queryIndex];
-  if (lQuery.matches === null) {
-    const tViewData = tView.data;
-    const tQueryMatches = tQuery.matches;
-    const result = [];
-    for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {
-      const matchedNodeIdx = tQueryMatches[i];
-      if (matchedNodeIdx < 0) {
-        result.push(null);
-      } else {
-        ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);
-        const tNode = tViewData[matchedNodeIdx];
-        result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));
-      }
-    }
-    lQuery.matches = result;
-  }
-  return lQuery.matches;
-}
-function collectQueryResults(tView, lView, queryIndex, result) {
-  const tQuery = tView.queries.getByIndex(queryIndex);
-  const tQueryMatches = tQuery.matches;
-  if (tQueryMatches !== null) {
-    const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);
-    for (let i = 0; i < tQueryMatches.length; i += 2) {
-      const tNodeIdx = tQueryMatches[i];
-      if (tNodeIdx > 0) {
-        result.push(lViewResults[i / 2]);
-      } else {
-        const childQueryIndex = tQueryMatches[i + 1];
-        const declarationLContainer = lView[-tNodeIdx];
-        ngDevMode && assertLContainer(declarationLContainer);
-        for (let i2 = CONTAINER_HEADER_OFFSET; i2 < declarationLContainer.length; i2++) {
-          const embeddedLView = declarationLContainer[i2];
-          if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {
-            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
-          }
-        }
-        if (declarationLContainer[MOVED_VIEWS] !== null) {
-          const embeddedLViews = declarationLContainer[MOVED_VIEWS];
-          for (let i2 = 0; i2 < embeddedLViews.length; i2++) {
-            const embeddedLView = embeddedLViews[i2];
-            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
-          }
-        }
-      }
-    }
-  }
-  return result;
-}
-function loadQueryInternal(lView, queryIndex) {
-  ngDevMode && assertDefined(lView[QUERIES], "LQueries should be defined when trying to load a query");
-  ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);
-  return lView[QUERIES].queries[queryIndex].queryList;
-}
-function createLQuery(tView, lView, flags) {
-  const queryList = new QueryList(
-    (flags & 4) === 4
-    /* QueryFlags.emitDistinctChangesOnly */
-  );
-  storeCleanupWithContext(tView, lView, queryList, queryList.destroy);
-  const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;
-  return lQueries.push(new LQuery_(queryList)) - 1;
-}
-function createViewQuery(predicate, flags, read) {
-  ngDevMode && assertNumber(flags, "Expecting flags");
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);
-    if ((flags & 2) === 2) {
-      tView.staticViewQueries = true;
-    }
-  }
-  return createLQuery(tView, getLView(), flags);
-}
-function createContentQuery(directiveIndex, predicate, flags, read) {
-  ngDevMode && assertNumber(flags, "Expecting flags");
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    const tNode = getCurrentTNode();
-    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);
-    saveContentQueryAndDirectiveIndex(tView, directiveIndex);
-    if ((flags & 2) === 2) {
-      tView.staticContentQueries = true;
-    }
-  }
-  return createLQuery(tView, getLView(), flags);
-}
-function splitQueryMultiSelectors(locator) {
-  return locator.split(",").map((s) => s.trim());
-}
-function createTQuery(tView, metadata, nodeIndex) {
-  if (tView.queries === null) tView.queries = new TQueries_();
-  tView.queries.track(new TQuery_(metadata, nodeIndex));
-}
-function saveContentQueryAndDirectiveIndex(tView, directiveIndex) {
-  const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);
-  const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;
-  if (directiveIndex !== lastSavedDirectiveIndex) {
-    tViewContentQueries.push(tView.queries.length - 1, directiveIndex);
-  }
-}
-function getTQuery(tView, index) {
-  ngDevMode && assertDefined(tView.queries, "TQueries must be defined to retrieve a TQuery");
-  return tView.queries.getByIndex(index);
-}
-function getQueryResults(lView, queryIndex) {
-  const tView = lView[TVIEW];
-  const tQuery = getTQuery(tView, queryIndex);
-  return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);
-}
-function isSignal(value) {
-  return typeof value === "function" && value[SIGNAL] !== void 0;
-}
-var ɵWRITABLE_SIGNAL = Symbol("WRITABLE_SIGNAL");
-function ɵunwrapWritableSignal(value) {
-  return null;
-}
-function signal(initialValue, options) {
-  performanceMarkFeature("NgSignals");
-  const signalFn = createSignal(initialValue);
-  const node = signalFn[SIGNAL];
-  if (options?.equal) {
-    node.equal = options.equal;
-  }
-  signalFn.set = (newValue) => signalSetFn(node, newValue);
-  signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
-  signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
-  if (ngDevMode) {
-    signalFn.toString = () => `[Signal: ${signalFn()}]`;
-    node.debugName = options?.debugName;
-  }
-  return signalFn;
-}
-function signalAsReadonlyFn() {
-  const node = this[SIGNAL];
-  if (node.readonlyFn === void 0) {
-    const readonlyFn = () => this();
-    readonlyFn[SIGNAL] = node;
-    node.readonlyFn = readonlyFn;
-  }
-  return node.readonlyFn;
-}
-function isWritableSignal(value) {
-  return isSignal(value) && typeof value.set === "function";
-}
-function createQuerySignalFn(firstOnly, required, opts) {
-  let node;
-  const signalFn = createComputed(() => {
-    node._dirtyCounter();
-    const value = refreshSignalQuery(node, firstOnly);
-    if (required && value === void 0) {
-      throw new RuntimeError(-951, ngDevMode && "Child query result is required but no value is available.");
-    }
-    return value;
-  });
-  node = signalFn[SIGNAL];
-  node._dirtyCounter = signal(0);
-  node._flatValue = void 0;
-  if (ngDevMode) {
-    signalFn.toString = () => `[Query Signal]`;
-    node.debugName = opts?.debugName;
-  }
-  return signalFn;
-}
-function createSingleResultOptionalQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    true,
-    /* required */
-    false,
-    opts
-  );
-}
-function createSingleResultRequiredQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    true,
-    /* required */
-    true,
-    opts
-  );
-}
-function createMultiResultQuerySignalFn(opts) {
-  return createQuerySignalFn(
-    /* firstOnly */
-    false,
-    /* required */
-    false,
-    opts
-  );
-}
-function bindQueryToSignal(target, queryIndex) {
-  const node = target[SIGNAL];
-  node._lView = getLView();
-  node._queryIndex = queryIndex;
-  node._queryList = loadQueryInternal(node._lView, queryIndex);
-  node._queryList.onDirty(() => node._dirtyCounter.update((v) => v + 1));
-}
-function refreshSignalQuery(node, firstOnly) {
-  const lView = node._lView;
-  const queryIndex = node._queryIndex;
-  if (lView === void 0 || queryIndex === void 0 || lView[FLAGS] & 4) {
-    return firstOnly ? void 0 : EMPTY_ARRAY;
-  }
-  const queryList = loadQueryInternal(lView, queryIndex);
-  const results = getQueryResults(lView, queryIndex);
-  queryList.reset(results, unwrapElementRef);
-  if (firstOnly) {
-    return queryList.first;
-  } else {
-    const resultChanged = queryList._changesDetected;
-    if (resultChanged || node._flatValue === void 0) {
-      return node._flatValue = queryList.toArray();
-    }
-    return node._flatValue;
-  }
-}
-function viewChildFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChild);
-  return createSingleResultOptionalQuerySignalFn(opts);
-}
-function viewChildRequiredFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChild);
-  return createSingleResultRequiredQuerySignalFn(opts);
-}
-var viewChild = (() => {
-  viewChildFn.required = viewChildRequiredFn;
-  return viewChildFn;
-})();
-function viewChildren(locator, opts) {
-  ngDevMode && assertInInjectionContext(viewChildren);
-  return createMultiResultQuerySignalFn(opts);
-}
-function contentChildFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(contentChild);
-  return createSingleResultOptionalQuerySignalFn(opts);
-}
-function contentChildRequiredFn(locator, opts) {
-  ngDevMode && assertInInjectionContext(contentChildren);
-  return createSingleResultRequiredQuerySignalFn(opts);
-}
-var contentChild = (() => {
-  contentChildFn.required = contentChildRequiredFn;
-  return contentChildFn;
-})();
-function contentChildren(locator, opts) {
-  return createMultiResultQuerySignalFn(opts);
-}
-function createModelSignal(initialValue, opts) {
-  const node = Object.create(INPUT_SIGNAL_NODE);
-  const emitterRef = new OutputEmitterRef();
-  node.value = initialValue;
-  function getter() {
-    producerAccessed(node);
-    assertModelSet(node.value);
-    return node.value;
-  }
-  getter[SIGNAL] = node;
-  getter.asReadonly = signalAsReadonlyFn.bind(getter);
-  getter.set = (newValue) => {
-    if (!node.equal(node.value, newValue)) {
-      signalSetFn(node, newValue);
-      emitterRef.emit(newValue);
-    }
-  };
-  getter.update = (updateFn) => {
-    assertModelSet(node.value);
-    getter.set(updateFn(node.value));
-  };
-  getter.subscribe = emitterRef.subscribe.bind(emitterRef);
-  getter.destroyRef = emitterRef.destroyRef;
-  if (ngDevMode) {
-    getter.toString = () => `[Model Signal: ${getter()}]`;
-    node.debugName = opts?.debugName;
-  }
-  return getter;
-}
-function assertModelSet(value) {
-  if (value === REQUIRED_UNSET_VALUE) {
-    throw new RuntimeError(952, ngDevMode && "Model is required but no value is available yet.");
-  }
-}
-function modelFunction(initialValue, opts) {
-  ngDevMode && assertInInjectionContext(model);
-  return createModelSignal(initialValue, opts);
-}
-function modelRequiredFunction(opts) {
-  ngDevMode && assertInInjectionContext(model);
-  return createModelSignal(REQUIRED_UNSET_VALUE, opts);
-}
-var model = (() => {
-  modelFunction.required = modelRequiredFunction;
-  return modelFunction;
-})();
-var emitDistinctChangesOnlyDefaultValue = true;
-var Query = class {
-};
-var ContentChildren = makePropDecorator("ContentChildren", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: false,
-  isViewQuery: false,
-  descendants: false,
-  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
-}, opts), Query);
-var ContentChild = makePropDecorator("ContentChild", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: true,
-  isViewQuery: false,
-  descendants: true
-}, opts), Query);
-var ViewChildren = makePropDecorator("ViewChildren", (selector, opts = {}) => __spreadValues({
-  selector,
-  first: false,
-  isViewQuery: true,
-  descendants: true,
-  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
-}, opts), Query);
-var ViewChild = makePropDecorator("ViewChild", (selector, opts) => __spreadValues({
-  selector,
-  first: true,
-  isViewQuery: true,
-  descendants: true
-}, opts), Query);
-function resolveComponentResources(resourceResolver) {
-  const componentResolved = [];
-  const urlMap = /* @__PURE__ */ new Map();
-  function cachedResourceResolve(url) {
-    let promise = urlMap.get(url);
-    if (!promise) {
-      const resp = resourceResolver(url);
-      urlMap.set(url, promise = resp.then(unwrapResponse));
-    }
-    return promise;
-  }
-  componentResourceResolutionQueue.forEach((component, type) => {
-    const promises = [];
-    if (component.templateUrl) {
-      promises.push(cachedResourceResolve(component.templateUrl).then((template) => {
-        component.template = template;
-      }));
-    }
-    const styles = typeof component.styles === "string" ? [component.styles] : component.styles || [];
-    component.styles = styles;
-    if (component.styleUrl && component.styleUrls?.length) {
-      throw new Error("@Component cannot define both `styleUrl` and `styleUrls`. Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple");
-    } else if (component.styleUrls?.length) {
-      const styleOffset = component.styles.length;
-      const styleUrls = component.styleUrls;
-      component.styleUrls.forEach((styleUrl, index) => {
-        styles.push("");
-        promises.push(cachedResourceResolve(styleUrl).then((style) => {
-          styles[styleOffset + index] = style;
-          styleUrls.splice(styleUrls.indexOf(styleUrl), 1);
-          if (styleUrls.length == 0) {
-            component.styleUrls = void 0;
-          }
-        }));
-      });
-    } else if (component.styleUrl) {
-      promises.push(cachedResourceResolve(component.styleUrl).then((style) => {
-        styles.push(style);
-        component.styleUrl = void 0;
-      }));
-    }
-    const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));
-    componentResolved.push(fullyResolved);
-  });
-  clearResolutionOfComponentResourcesQueue();
-  return Promise.all(componentResolved).then(() => void 0);
-}
-var componentResourceResolutionQueue = /* @__PURE__ */ new Map();
-var componentDefPendingResolution = /* @__PURE__ */ new Set();
-function maybeQueueResolutionOfComponentResources(type, metadata) {
-  if (componentNeedsResolution(metadata)) {
-    componentResourceResolutionQueue.set(type, metadata);
-    componentDefPendingResolution.add(type);
-  }
-}
-function isComponentDefPendingResolution(type) {
-  return componentDefPendingResolution.has(type);
-}
-function componentNeedsResolution(component) {
-  return !!(component.templateUrl && !component.hasOwnProperty("template") || component.styleUrls && component.styleUrls.length || component.styleUrl);
-}
-function clearResolutionOfComponentResourcesQueue() {
-  const old = componentResourceResolutionQueue;
-  componentResourceResolutionQueue = /* @__PURE__ */ new Map();
-  return old;
-}
-function restoreComponentResolutionQueue(queue) {
-  componentDefPendingResolution.clear();
-  queue.forEach((_, type) => componentDefPendingResolution.add(type));
-  componentResourceResolutionQueue = queue;
-}
-function isComponentResourceResolutionQueueEmpty() {
-  return componentResourceResolutionQueue.size === 0;
-}
-function unwrapResponse(response) {
-  return typeof response == "string" ? response : response.text();
-}
-function componentDefResolved(type) {
-  componentDefPendingResolution.delete(type);
-}
-var modules = /* @__PURE__ */ new Map();
-var checkForDuplicateNgModules = true;
-function assertSameOrNotExisting(id, type, incoming) {
-  if (type && type !== incoming && checkForDuplicateNgModules) {
-    throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);
-  }
-}
-function registerNgModuleType(ngModuleType, id) {
-  const existing = modules.get(id) || null;
-  assertSameOrNotExisting(id, existing, ngModuleType);
-  modules.set(id, ngModuleType);
-}
-function getRegisteredNgModuleType(id) {
-  return modules.get(id);
-}
-function setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {
-  checkForDuplicateNgModules = !allowDuplicates;
-}
-function ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  const element = getNativeByTNode(tNode, lView);
-  if (tNode.type === 2 && tagName.toLowerCase() === "iframe") {
-    const iframe = element;
-    iframe.src = "";
-    iframe.srcdoc = trustedHTMLFromString("");
-    nativeRemoveNode(lView[RENDERER], iframe);
-    const errorMessage = ngDevMode && `Angular has detected that the \`${attrName}\` was applied as a binding to an <iframe>${getTemplateLocationDetails(lView)}. For security reasons, the \`${attrName}\` can be set on an <iframe> as a static attribute only. 
-To fix this, switch the \`${attrName}\` binding to a static attribute in a template or in host bindings section.`;
-    throw new RuntimeError(-910, errorMessage);
-  }
-  return attrValue;
-}
-var NgModuleRef$1 = class {
-};
-var NgModuleFactory$1 = class {
-};
-function createNgModule(ngModule, parentInjector) {
-  return new NgModuleRef(ngModule, parentInjector ?? null, []);
-}
-var createNgModuleRef = createNgModule;
-var NgModuleRef = class extends NgModuleRef$1 {
-  ngModuleType;
-  _parent;
-  // tslint:disable-next-line:require-internal-with-underscore
-  _bootstrapComponents = [];
-  // tslint:disable-next-line:require-internal-with-underscore
-  _r3Injector;
-  instance;
-  destroyCbs = [];
-  // When bootstrapping a module we have a dependency graph that looks like this:
-  // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the
-  // module being resolved tries to inject the ComponentFactoryResolver, it'll create a
-  // circular dependency which will result in a runtime error, because the injector doesn't
-  // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves
-  // and providing it, rather than letting the injector resolve it.
-  componentFactoryResolver = new ComponentFactoryResolver(this);
-  constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {
-    super();
-    this.ngModuleType = ngModuleType;
-    this._parent = _parent;
-    const ngModuleDef = getNgModuleDef(ngModuleType);
-    ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);
-    this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);
-    this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{
-      provide: NgModuleRef$1,
-      useValue: this
-    }, {
-      provide: ComponentFactoryResolver$1,
-      useValue: this.componentFactoryResolver
-    }, ...additionalProviders], stringify(ngModuleType), /* @__PURE__ */ new Set(["environment"]));
-    if (runInjectorInitializers) {
-      this.resolveInjectorInitializers();
-    }
-  }
-  resolveInjectorInitializers() {
-    this._r3Injector.resolveInjectorInitializers();
-    this.instance = this._r3Injector.get(this.ngModuleType);
-  }
-  get injector() {
-    return this._r3Injector;
-  }
-  destroy() {
-    ngDevMode && assertDefined(this.destroyCbs, "NgModule already destroyed");
-    const injector = this._r3Injector;
-    !injector.destroyed && injector.destroy();
-    this.destroyCbs.forEach((fn) => fn());
-    this.destroyCbs = null;
-  }
-  onDestroy(callback) {
-    ngDevMode && assertDefined(this.destroyCbs, "NgModule already destroyed");
-    this.destroyCbs.push(callback);
-  }
-};
-var NgModuleFactory = class extends NgModuleFactory$1 {
-  moduleType;
-  constructor(moduleType) {
-    super();
-    this.moduleType = moduleType;
-  }
-  create(parentInjector) {
-    return new NgModuleRef(this.moduleType, parentInjector, []);
-  }
-};
-function createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {
-  return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);
-}
-var EnvironmentNgModuleRefAdapter = class extends NgModuleRef$1 {
-  injector;
-  componentFactoryResolver = new ComponentFactoryResolver(this);
-  instance = null;
-  constructor(config) {
-    super();
-    const injector = new R3Injector([...config.providers, {
-      provide: NgModuleRef$1,
-      useValue: this
-    }, {
-      provide: ComponentFactoryResolver$1,
-      useValue: this.componentFactoryResolver
-    }], config.parent || getNullInjector(), config.debugName, /* @__PURE__ */ new Set(["environment"]));
-    this.injector = injector;
-    if (config.runEnvironmentInitializers) {
-      injector.resolveInjectorInitializers();
-    }
-  }
-  destroy() {
-    this.injector.destroy();
-  }
-  onDestroy(callback) {
-    this.injector.onDestroy(callback);
-  }
-};
-function createEnvironmentInjector(providers, parent, debugName = null) {
-  const adapter = new EnvironmentNgModuleRefAdapter({
-    providers,
-    parent,
-    debugName,
-    runEnvironmentInitializers: true
-  });
-  return adapter.injector;
-}
-var StandaloneService = class _StandaloneService {
-  _injector;
-  cachedInjectors = /* @__PURE__ */ new Map();
-  constructor(_injector) {
-    this._injector = _injector;
-  }
-  getOrCreateStandaloneInjector(componentDef) {
-    if (!componentDef.standalone) {
-      return null;
-    }
-    if (!this.cachedInjectors.has(componentDef)) {
-      const providers = internalImportProvidersFrom(false, componentDef.type);
-      const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, `Standalone[${componentDef.type.name}]`) : null;
-      this.cachedInjectors.set(componentDef, standaloneInjector);
-    }
-    return this.cachedInjectors.get(componentDef);
-  }
-  ngOnDestroy() {
-    try {
-      for (const injector of this.cachedInjectors.values()) {
-        if (injector !== null) {
-          injector.destroy();
-        }
-      }
-    } finally {
-      this.cachedInjectors.clear();
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _StandaloneService,
-      providedIn: "environment",
-      factory: () => new _StandaloneService(ɵɵinject(EnvironmentInjector))
-    })
-  );
-};
-function ɵɵdefineComponent(componentDefinition) {
-  return noSideEffects(() => {
-    (typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode();
-    const baseDef = getNgDirectiveDef(componentDefinition);
-    const def = __spreadProps(__spreadValues({}, baseDef), {
-      decls: componentDefinition.decls,
-      vars: componentDefinition.vars,
-      template: componentDefinition.template,
-      consts: componentDefinition.consts || null,
-      ngContentSelectors: componentDefinition.ngContentSelectors,
-      onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
-      directiveDefs: null,
-      // assigned in noSideEffects
-      pipeDefs: null,
-      // assigned in noSideEffects
-      dependencies: baseDef.standalone && componentDefinition.dependencies || null,
-      getStandaloneInjector: baseDef.standalone ? (parentInjector) => {
-        return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);
-      } : null,
-      getExternalStyles: null,
-      signals: componentDefinition.signals ?? false,
-      data: componentDefinition.data || {},
-      encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,
-      styles: componentDefinition.styles || EMPTY_ARRAY,
-      _: null,
-      schemas: componentDefinition.schemas || null,
-      tView: null,
-      id: ""
-    });
-    if (baseDef.standalone) {
-      performanceMarkFeature("NgStandalone");
-    }
-    initFeatures(def);
-    const dependencies = componentDefinition.dependencies;
-    def.directiveDefs = extractDefListOrFactory(
-      dependencies,
-      /* pipeDef */
-      false
-    );
-    def.pipeDefs = extractDefListOrFactory(
-      dependencies,
-      /* pipeDef */
-      true
-    );
-    def.id = getComponentId(def);
-    return def;
-  });
-}
-function extractDirectiveDef(type) {
-  return getComponentDef(type) || getDirectiveDef(type);
-}
-function nonNull(value) {
-  return value !== null;
-}
-function ɵɵdefineNgModule(def) {
-  return noSideEffects(() => {
-    const res = {
-      type: def.type,
-      bootstrap: def.bootstrap || EMPTY_ARRAY,
-      declarations: def.declarations || EMPTY_ARRAY,
-      imports: def.imports || EMPTY_ARRAY,
-      exports: def.exports || EMPTY_ARRAY,
-      transitiveCompileScopes: null,
-      schemas: def.schemas || null,
-      id: def.id || null
-    };
-    return res;
-  });
-}
-function parseAndConvertBindingsForDefinition(obj, declaredInputs) {
-  if (obj == null) return EMPTY_OBJ;
-  const newLookup = {};
-  for (const minifiedKey in obj) {
-    if (obj.hasOwnProperty(minifiedKey)) {
-      const value = obj[minifiedKey];
-      let publicName;
-      let declaredName;
-      let inputFlags = InputFlags.None;
-      if (Array.isArray(value)) {
-        inputFlags = value[0];
-        publicName = value[1];
-        declaredName = value[2] ?? publicName;
-      } else {
-        publicName = value;
-        declaredName = value;
-      }
-      if (declaredInputs) {
-        newLookup[publicName] = inputFlags !== InputFlags.None ? [minifiedKey, inputFlags] : minifiedKey;
-        declaredInputs[publicName] = declaredName;
-      } else {
-        newLookup[publicName] = minifiedKey;
-      }
-    }
-  }
-  return newLookup;
-}
-function ɵɵdefineDirective(directiveDefinition) {
-  return noSideEffects(() => {
-    const def = getNgDirectiveDef(directiveDefinition);
-    initFeatures(def);
-    return def;
-  });
-}
-function ɵɵdefinePipe(pipeDef) {
-  return {
-    type: pipeDef.type,
-    name: pipeDef.name,
-    factory: null,
-    pure: pipeDef.pure !== false,
-    standalone: pipeDef.standalone ?? true,
-    onDestroy: pipeDef.type.prototype.ngOnDestroy || null
-  };
-}
-function getNgDirectiveDef(directiveDefinition) {
-  const declaredInputs = {};
-  return {
-    type: directiveDefinition.type,
-    providersResolver: null,
-    factory: null,
-    hostBindings: directiveDefinition.hostBindings || null,
-    hostVars: directiveDefinition.hostVars || 0,
-    hostAttrs: directiveDefinition.hostAttrs || null,
-    contentQueries: directiveDefinition.contentQueries || null,
-    declaredInputs,
-    inputTransforms: null,
-    inputConfig: directiveDefinition.inputs || EMPTY_OBJ,
-    exportAs: directiveDefinition.exportAs || null,
-    standalone: directiveDefinition.standalone ?? true,
-    signals: directiveDefinition.signals === true,
-    selectors: directiveDefinition.selectors || EMPTY_ARRAY,
-    viewQuery: directiveDefinition.viewQuery || null,
-    features: directiveDefinition.features || null,
-    setInput: null,
-    findHostDirectiveDefs: null,
-    hostDirectives: null,
-    inputs: parseAndConvertBindingsForDefinition(directiveDefinition.inputs, declaredInputs),
-    outputs: parseAndConvertBindingsForDefinition(directiveDefinition.outputs),
-    debugInfo: null
-  };
-}
-function initFeatures(definition) {
-  definition.features?.forEach((fn) => fn(definition));
-}
-function extractDefListOrFactory(dependencies, pipeDef) {
-  if (!dependencies) {
-    return null;
-  }
-  const defExtractor = pipeDef ? getPipeDef$1 : extractDirectiveDef;
-  return () => (typeof dependencies === "function" ? dependencies() : dependencies).map((dep) => defExtractor(dep)).filter(nonNull);
-}
-var GENERATED_COMP_IDS = /* @__PURE__ */ new Map();
-function getComponentId(componentDef) {
-  let hash = 0;
-  const componentDefConsts = typeof componentDef.consts === "function" ? "" : componentDef.consts;
-  const hashSelectors = [
-    componentDef.selectors,
-    componentDef.ngContentSelectors,
-    componentDef.hostVars,
-    componentDef.hostAttrs,
-    componentDefConsts,
-    componentDef.vars,
-    componentDef.decls,
-    componentDef.encapsulation,
-    componentDef.standalone,
-    componentDef.signals,
-    componentDef.exportAs,
-    JSON.stringify(componentDef.inputs),
-    JSON.stringify(componentDef.outputs),
-    // We cannot use 'componentDef.type.name' as the name of the symbol will change and will not
-    // match in the server and browser bundles.
-    Object.getOwnPropertyNames(componentDef.type.prototype),
-    !!componentDef.contentQueries,
-    !!componentDef.viewQuery
-  ];
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    for (const item of hashSelectors) {
-      assertNotEqual(typeof item, "function", "Internal error: attempting to use a function in component id computation logic.");
-    }
-  }
-  for (const char of hashSelectors.join("|")) {
-    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;
-  }
-  hash += 2147483647 + 1;
-  const compId = "c" + hash;
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (GENERATED_COMP_IDS.has(compId)) {
-      const previousCompDefType = GENERATED_COMP_IDS.get(compId);
-      if (previousCompDefType !== componentDef.type) {
-        console.warn(formatRuntimeError(-912, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));
-      }
-    } else {
-      GENERATED_COMP_IDS.set(compId, componentDef.type);
-    }
-  }
-  return compId;
-}
-function getSuperType(type) {
-  return Object.getPrototypeOf(type.prototype).constructor;
-}
-function ɵɵInheritDefinitionFeature(definition) {
-  let superType = getSuperType(definition.type);
-  let shouldInheritFields = true;
-  const inheritanceChain = [definition];
-  while (superType) {
-    let superDef = void 0;
-    if (isComponentDef(definition)) {
-      superDef = superType.ɵcmp || superType.ɵdir;
-    } else {
-      if (superType.ɵcmp) {
-        throw new RuntimeError(903, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);
-      }
-      superDef = superType.ɵdir;
-    }
-    if (superDef) {
-      if (shouldInheritFields) {
-        inheritanceChain.push(superDef);
-        const writeableDef = definition;
-        writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);
-        writeableDef.inputTransforms = maybeUnwrapEmpty(definition.inputTransforms);
-        writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);
-        writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);
-        const superHostBindings = superDef.hostBindings;
-        superHostBindings && inheritHostBindings(definition, superHostBindings);
-        const superViewQuery = superDef.viewQuery;
-        const superContentQueries = superDef.contentQueries;
-        superViewQuery && inheritViewQuery(definition, superViewQuery);
-        superContentQueries && inheritContentQueries(definition, superContentQueries);
-        mergeInputsWithTransforms(definition, superDef);
-        fillProperties(definition.outputs, superDef.outputs);
-        if (isComponentDef(superDef) && superDef.data.animation) {
-          const defData = definition.data;
-          defData.animation = (defData.animation || []).concat(superDef.data.animation);
-        }
-      }
-      const features = superDef.features;
-      if (features) {
-        for (let i = 0; i < features.length; i++) {
-          const feature = features[i];
-          if (feature && feature.ngInherit) {
-            feature(definition);
-          }
-          if (feature === ɵɵInheritDefinitionFeature) {
-            shouldInheritFields = false;
-          }
-        }
-      }
-    }
-    superType = Object.getPrototypeOf(superType);
-  }
-  mergeHostAttrsAcrossInheritance(inheritanceChain);
-}
-function mergeInputsWithTransforms(target, source) {
-  for (const key in source.inputs) {
-    if (!source.inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    if (target.inputs.hasOwnProperty(key)) {
-      continue;
-    }
-    const value = source.inputs[key];
-    if (value === void 0) {
-      continue;
-    }
-    target.inputs[key] = value;
-    target.declaredInputs[key] = source.declaredInputs[key];
-    if (source.inputTransforms !== null) {
-      const minifiedName = Array.isArray(value) ? value[0] : value;
-      if (!source.inputTransforms.hasOwnProperty(minifiedName)) {
-        continue;
-      }
-      target.inputTransforms ??= {};
-      target.inputTransforms[minifiedName] = source.inputTransforms[minifiedName];
-    }
-  }
-}
-function mergeHostAttrsAcrossInheritance(inheritanceChain) {
-  let hostVars = 0;
-  let hostAttrs = null;
-  for (let i = inheritanceChain.length - 1; i >= 0; i--) {
-    const def = inheritanceChain[i];
-    def.hostVars = hostVars += def.hostVars;
-    def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));
-  }
-}
-function maybeUnwrapEmpty(value) {
-  if (value === EMPTY_OBJ) {
-    return {};
-  } else if (value === EMPTY_ARRAY) {
-    return [];
-  } else {
-    return value;
-  }
-}
-function inheritViewQuery(definition, superViewQuery) {
-  const prevViewQuery = definition.viewQuery;
-  if (prevViewQuery) {
-    definition.viewQuery = (rf, ctx) => {
-      superViewQuery(rf, ctx);
-      prevViewQuery(rf, ctx);
-    };
-  } else {
-    definition.viewQuery = superViewQuery;
-  }
-}
-function inheritContentQueries(definition, superContentQueries) {
-  const prevContentQueries = definition.contentQueries;
-  if (prevContentQueries) {
-    definition.contentQueries = (rf, ctx, directiveIndex) => {
-      superContentQueries(rf, ctx, directiveIndex);
-      prevContentQueries(rf, ctx, directiveIndex);
-    };
-  } else {
-    definition.contentQueries = superContentQueries;
-  }
-}
-function inheritHostBindings(definition, superHostBindings) {
-  const prevHostBindings = definition.hostBindings;
-  if (prevHostBindings) {
-    definition.hostBindings = (rf, ctx) => {
-      superHostBindings(rf, ctx);
-      prevHostBindings(rf, ctx);
-    };
-  } else {
-    definition.hostBindings = superHostBindings;
-  }
-}
-var COPY_DIRECTIVE_FIELDS = [
-  // The child class should use the providers of its parent.
-  "providersResolver"
-  // Not listed here are any fields which are handled by the `ɵɵInheritDefinitionFeature`, such
-  // as inputs, outputs, and host binding functions.
-];
-var COPY_COMPONENT_FIELDS = [
-  // The child class should use the template function of its parent, including all template
-  // semantics.
-  "template",
-  "decls",
-  "consts",
-  "vars",
-  "onPush",
-  "ngContentSelectors",
-  // The child class should use the CSS styles of its parent, including all styling semantics.
-  "styles",
-  "encapsulation",
-  // The child class should be checked by the runtime in the same way as its parent.
-  "schemas"
-];
-function ɵɵCopyDefinitionFeature(definition) {
-  let superType = getSuperType(definition.type);
-  let superDef = void 0;
-  if (isComponentDef(definition)) {
-    superDef = superType.ɵcmp;
-  } else {
-    superDef = superType.ɵdir;
-  }
-  const defAny = definition;
-  for (const field of COPY_DIRECTIVE_FIELDS) {
-    defAny[field] = superDef[field];
-  }
-  if (isComponentDef(superDef)) {
-    for (const field of COPY_COMPONENT_FIELDS) {
-      defAny[field] = superDef[field];
-    }
-  }
-}
-function ɵɵHostDirectivesFeature(rawHostDirectives) {
-  const feature = (definition) => {
-    const isEager = Array.isArray(rawHostDirectives);
-    if (definition.hostDirectives === null) {
-      definition.findHostDirectiveDefs = findHostDirectiveDefs;
-      definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];
-    } else if (isEager) {
-      definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));
-    } else {
-      definition.hostDirectives.unshift(rawHostDirectives);
-    }
-  };
-  feature.ngInherit = true;
-  return feature;
-}
-function findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {
-  if (currentDef.hostDirectives !== null) {
-    for (const configOrFn of currentDef.hostDirectives) {
-      if (typeof configOrFn === "function") {
-        const resolved = configOrFn();
-        for (const config of resolved) {
-          trackHostDirectiveDef(createHostDirectiveDef(config), matchedDefs, hostDirectiveDefs);
-        }
-      } else {
-        trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);
-      }
-    }
-  }
-}
-function trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {
-  const hostDirectiveDef = getDirectiveDef(def.directive);
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    validateHostDirective(def, hostDirectiveDef);
-  }
-  patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);
-  findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);
-  hostDirectiveDefs.set(hostDirectiveDef, def);
-  matchedDefs.push(hostDirectiveDef);
-}
-function createHostDirectiveDef(config) {
-  return typeof config === "function" ? {
-    directive: resolveForwardRef(config),
-    inputs: EMPTY_OBJ,
-    outputs: EMPTY_OBJ
-  } : {
-    directive: resolveForwardRef(config.directive),
-    inputs: bindingArrayToMap(config.inputs),
-    outputs: bindingArrayToMap(config.outputs)
-  };
-}
-function bindingArrayToMap(bindings) {
-  if (bindings === void 0 || bindings.length === 0) {
-    return EMPTY_OBJ;
-  }
-  const result = {};
-  for (let i = 0; i < bindings.length; i += 2) {
-    result[bindings[i]] = bindings[i + 1];
-  }
-  return result;
-}
-function patchDeclaredInputs(declaredInputs, exposedInputs) {
-  for (const publicName in exposedInputs) {
-    if (exposedInputs.hasOwnProperty(publicName)) {
-      const remappedPublicName = exposedInputs[publicName];
-      const privateName = declaredInputs[publicName];
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {
-        assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);
-      }
-      declaredInputs[remappedPublicName] = privateName;
-    }
-  }
-}
-function validateHostDirective(hostDirectiveConfig, directiveDef) {
-  const type = hostDirectiveConfig.directive;
-  if (directiveDef === null) {
-    if (getComponentDef(type) !== null) {
-      throw new RuntimeError(310, `Host directive ${type.name} cannot be a component.`);
-    }
-    throw new RuntimeError(307, `Could not resolve metadata for host directive ${type.name}. Make sure that the ${type.name} class is annotated with an @Directive decorator.`);
-  }
-  if (!directiveDef.standalone) {
-    throw new RuntimeError(308, `Host directive ${directiveDef.type.name} must be standalone.`);
-  }
-  validateMappings("input", directiveDef, hostDirectiveConfig.inputs);
-  validateMappings("output", directiveDef, hostDirectiveConfig.outputs);
-}
-function validateMappings(bindingType, def, hostDirectiveBindings) {
-  const className = def.type.name;
-  const bindings = bindingType === "input" ? def.inputs : def.outputs;
-  for (const publicName in hostDirectiveBindings) {
-    if (hostDirectiveBindings.hasOwnProperty(publicName)) {
-      if (!bindings.hasOwnProperty(publicName)) {
-        throw new RuntimeError(311, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);
-      }
-      const remappedPublicName = hostDirectiveBindings[publicName];
-      if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {
-        throw new RuntimeError(312, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);
-      }
-    }
-  }
-}
-function ɵɵInputTransformsFeature(definition) {
-  const inputs = definition.inputConfig;
-  const inputTransforms = {};
-  for (const minifiedKey in inputs) {
-    if (inputs.hasOwnProperty(minifiedKey)) {
-      const value = inputs[minifiedKey];
-      if (Array.isArray(value) && value[3]) {
-        inputTransforms[minifiedKey] = value[3];
-      }
-    }
-  }
-  definition.inputTransforms = inputTransforms;
-}
-function isListLikeIterable(obj) {
-  if (!isJsObject(obj)) return false;
-  return Array.isArray(obj) || !(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]
-  Symbol.iterator in obj;
-}
-function areIterablesEqual(a, b, comparator) {
-  const iterator1 = a[Symbol.iterator]();
-  const iterator2 = b[Symbol.iterator]();
-  while (true) {
-    const item1 = iterator1.next();
-    const item2 = iterator2.next();
-    if (item1.done && item2.done) return true;
-    if (item1.done || item2.done) return false;
-    if (!comparator(item1.value, item2.value)) return false;
-  }
-}
-function iterateListLike(obj, fn) {
-  if (Array.isArray(obj)) {
-    for (let i = 0; i < obj.length; i++) {
-      fn(obj[i]);
-    }
-  } else {
-    const iterator = obj[Symbol.iterator]();
-    let item;
-    while (!(item = iterator.next()).done) {
-      fn(item.value);
-    }
-  }
-}
-function isJsObject(o) {
-  return o !== null && (typeof o === "function" || typeof o === "object");
-}
-function devModeEqual(a, b) {
-  const isListLikeIterableA = isListLikeIterable(a);
-  const isListLikeIterableB = isListLikeIterable(b);
-  if (isListLikeIterableA && isListLikeIterableB) {
-    return areIterablesEqual(a, b, devModeEqual);
-  } else {
-    const isAObject = a && (typeof a === "object" || typeof a === "function");
-    const isBObject = b && (typeof b === "object" || typeof b === "function");
-    if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
-      return true;
-    } else {
-      return Object.is(a, b);
-    }
-  }
-}
-function updateBinding(lView, bindingIndex, value) {
-  return lView[bindingIndex] = value;
-}
-function getBinding(lView, bindingIndex) {
-  ngDevMode && assertIndexInRange(lView, bindingIndex);
-  ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, "Stored value should never be NO_CHANGE.");
-  return lView[bindingIndex];
-}
-function bindingUpdated(lView, bindingIndex, value) {
-  ngDevMode && assertNotSame(value, NO_CHANGE, "Incoming value should never be NO_CHANGE.");
-  ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);
-  const oldValue = lView[bindingIndex];
-  if (Object.is(oldValue, value)) {
-    return false;
-  } else {
-    if (ngDevMode && isInCheckNoChangesMode()) {
-      const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : void 0;
-      if (!devModeEqual(oldValueToCompare, value)) {
-        const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
-        throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);
-      }
-      return false;
-    }
-    lView[bindingIndex] = value;
-    return true;
-  }
-}
-function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
-  const different = bindingUpdated(lView, bindingIndex, exp1);
-  return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
-}
-function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
-  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
-  return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
-}
-function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
-  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
-  return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
-}
-function isDetachedByI18n(tNode) {
-  return (tNode.flags & 32) === 32;
-}
-function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const tNode = getOrCreateTNode(tView, index, 4, tagName || null, attrs || null);
-  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
-  registerPostOrderHooks(tView, tNode);
-  const embeddedTView = tNode.tView = createTView(
-    2,
-    tNode,
-    templateFn,
-    decls,
-    vars,
-    tView.directiveRegistry,
-    tView.pipeRegistry,
-    null,
-    tView.schemas,
-    tViewConsts,
-    null
-    /* ssrId */
-  );
-  if (tView.queries !== null) {
-    tView.queries.template(tView, tNode);
-    embeddedTView.queries = tView.queries.embeddedTView(tNode);
-  }
-  return tNode;
-}
-function declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = declarationTView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, declarationTView, declarationLView, templateFn, decls, vars, tagName, attrs, localRefsIndex) : declarationTView.data[adjustedIndex];
-  setCurrentTNode(tNode, false);
-  const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);
-  if (wasLastNodeCreated()) {
-    appendChild(declarationTView, declarationLView, comment, tNode);
-  }
-  attachPatchData(comment, declarationLView);
-  const lContainer = createLContainer(comment, declarationLView, comment, tNode);
-  declarationLView[adjustedIndex] = lContainer;
-  addToEndOfViewTree(declarationLView, lContainer);
-  populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);
-  if (isDirectiveHost(tNode)) {
-    createDirectivesInstances(declarationTView, declarationLView, tNode);
-  }
-  if (localRefsIndex != null) {
-    saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);
-  }
-  return tNode;
-}
-function ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
-  const lView = getLView();
-  const tView = getTView();
-  const attrs = getConstant(tView.consts, attrsIndex);
-  declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor);
-  return ɵɵtemplate;
-}
-var _locateOrCreateContainerAnchor = createContainerAnchorImpl;
-function createContainerAnchorImpl(tView, lView, tNode, index) {
-  lastNodeWasCreated(true);
-  return lView[RENDERER].createComment(ngDevMode ? "container" : "");
-}
-function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createContainerAnchorImpl(tView, lView, tNode, index);
-  }
-  const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;
-  if (ssrId !== null && tNode.tView !== null) {
-    if (tNode.tView.ssrId === null) {
-      tNode.tView.ssrId = ssrId;
-    } else {
-      ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, "Unexpected value of the `ssrId` for this TView");
-    }
-  }
-  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateNodeExists(currentRNode, lView, tNode);
-  setSegmentHead(hydrationInfo, index, currentRNode);
-  const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);
-  const comment = siblingAfter(viewContainerSize, currentRNode);
-  if (ngDevMode) {
-    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);
-    markRNodeAsClaimedByHydration(comment);
-  }
-  return comment;
-}
-function enableLocateOrCreateContainerAnchorImpl() {
-  _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;
-}
-function onIdle(callback, injector) {
-  const scheduler = injector.get(IdleScheduler);
-  const cleanupFn = () => scheduler.remove(callback);
-  scheduler.add(callback);
-  return cleanupFn;
-}
-var _requestIdleCallback = () => typeof requestIdleCallback !== "undefined" ? requestIdleCallback : setTimeout;
-var _cancelIdleCallback = () => typeof requestIdleCallback !== "undefined" ? cancelIdleCallback : clearTimeout;
-var IdleScheduler = class _IdleScheduler {
-  // Indicates whether current callbacks are being invoked.
-  executingCallbacks = false;
-  // Currently scheduled idle callback id.
-  idleId = null;
-  // Set of callbacks to be invoked next.
-  current = /* @__PURE__ */ new Set();
-  // Set of callbacks collected while invoking current set of callbacks.
-  // Those callbacks are scheduled for the next idle period.
-  deferred = /* @__PURE__ */ new Set();
-  ngZone = inject(NgZone);
-  requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);
-  cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);
-  add(callback) {
-    const target = this.executingCallbacks ? this.deferred : this.current;
-    target.add(callback);
-    if (this.idleId === null) {
-      this.scheduleIdleCallback();
-    }
-  }
-  remove(callback) {
-    const {
-      current,
-      deferred
-    } = this;
-    current.delete(callback);
-    deferred.delete(callback);
-    if (current.size === 0 && deferred.size === 0) {
-      this.cancelIdleCallback();
-    }
-  }
-  scheduleIdleCallback() {
-    const callback = () => {
-      this.cancelIdleCallback();
-      this.executingCallbacks = true;
-      for (const callback2 of this.current) {
-        callback2();
-      }
-      this.current.clear();
-      this.executingCallbacks = false;
-      if (this.deferred.size > 0) {
-        for (const callback2 of this.deferred) {
-          this.current.add(callback2);
-        }
-        this.deferred.clear();
-        this.scheduleIdleCallback();
-      }
-    };
-    this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));
-  }
-  cancelIdleCallback() {
-    if (this.idleId !== null) {
-      this.cancelIdleCallbackFn(this.idleId);
-      this.idleId = null;
-    }
-  }
-  ngOnDestroy() {
-    this.cancelIdleCallback();
-    this.current.clear();
-    this.deferred.clear();
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _IdleScheduler,
-      providedIn: "root",
-      factory: () => new _IdleScheduler()
-    })
-  );
-};
-function onTimer(delay) {
-  return (callback, injector) => scheduleTimerTrigger(delay, callback, injector);
-}
-function scheduleTimerTrigger(delay, callback, injector) {
-  const scheduler = injector.get(TimerScheduler);
-  const cleanupFn = () => scheduler.remove(callback);
-  scheduler.add(delay, callback);
-  return cleanupFn;
-}
-var TimerScheduler = class _TimerScheduler {
-  // Indicates whether current callbacks are being invoked.
-  executingCallbacks = false;
-  // Currently scheduled `setTimeout` id.
-  timeoutId = null;
-  // When currently scheduled timer would fire.
-  invokeTimerAt = null;
-  // List of callbacks to be invoked.
-  // For each callback we also store a timestamp on when the callback
-  // should be invoked. We store timestamps and callback functions
-  // in a flat array to avoid creating new objects for each entry.
-  // [timestamp1, callback1, timestamp2, callback2, ...]
-  current = [];
-  // List of callbacks collected while invoking current set of callbacks.
-  // Those callbacks are added to the "current" queue at the end of
-  // the current callback invocation. The shape of this list is the same
-  // as the shape of the `current` list.
-  deferred = [];
-  add(delay, callback) {
-    const target = this.executingCallbacks ? this.deferred : this.current;
-    this.addToQueue(target, Date.now() + delay, callback);
-    this.scheduleTimer();
-  }
-  remove(callback) {
-    const {
-      current,
-      deferred
-    } = this;
-    const callbackIndex = this.removeFromQueue(current, callback);
-    if (callbackIndex === -1) {
-      this.removeFromQueue(deferred, callback);
-    }
-    if (current.length === 0 && deferred.length === 0) {
-      this.clearTimeout();
-    }
-  }
-  addToQueue(target, invokeAt, callback) {
-    let insertAtIndex = target.length;
-    for (let i = 0; i < target.length; i += 2) {
-      const invokeQueuedCallbackAt = target[i];
-      if (invokeQueuedCallbackAt > invokeAt) {
-        insertAtIndex = i;
-        break;
-      }
-    }
-    arrayInsert2(target, insertAtIndex, invokeAt, callback);
-  }
-  removeFromQueue(target, callback) {
-    let index = -1;
-    for (let i = 0; i < target.length; i += 2) {
-      const queuedCallback = target[i + 1];
-      if (queuedCallback === callback) {
-        index = i;
-        break;
-      }
-    }
-    if (index > -1) {
-      arraySplice(target, index, 2);
-    }
-    return index;
-  }
-  scheduleTimer() {
-    const callback = () => {
-      this.clearTimeout();
-      this.executingCallbacks = true;
-      const current = [...this.current];
-      const now = Date.now();
-      for (let i = 0; i < current.length; i += 2) {
-        const invokeAt = current[i];
-        const callback2 = current[i + 1];
-        if (invokeAt <= now) {
-          callback2();
-        } else {
-          break;
-        }
-      }
-      let lastCallbackIndex = -1;
-      for (let i = 0; i < this.current.length; i += 2) {
-        const invokeAt = this.current[i];
-        if (invokeAt <= now) {
-          lastCallbackIndex = i + 1;
-        } else {
-          break;
-        }
-      }
-      if (lastCallbackIndex >= 0) {
-        arraySplice(this.current, 0, lastCallbackIndex + 1);
-      }
-      this.executingCallbacks = false;
-      if (this.deferred.length > 0) {
-        for (let i = 0; i < this.deferred.length; i += 2) {
-          const invokeAt = this.deferred[i];
-          const callback2 = this.deferred[i + 1];
-          this.addToQueue(this.current, invokeAt, callback2);
-        }
-        this.deferred.length = 0;
-      }
-      this.scheduleTimer();
-    };
-    const FRAME_DURATION_MS = 16;
-    if (this.current.length > 0) {
-      const now = Date.now();
-      const invokeAt = this.current[0];
-      if (this.timeoutId === null || // Reschedule a timer in case a queue contains an item with
-      // an earlier timestamp and the delta is more than an average
-      // frame duration.
-      this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {
-        this.clearTimeout();
-        const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);
-        this.invokeTimerAt = invokeAt;
-        this.timeoutId = setTimeout(callback, timeout);
-      }
-    }
-  }
-  clearTimeout() {
-    if (this.timeoutId !== null) {
-      clearTimeout(this.timeoutId);
-      this.timeoutId = null;
-    }
-  }
-  ngOnDestroy() {
-    this.clearTimeout();
-    this.current.length = 0;
-    this.deferred.length = 0;
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _TimerScheduler,
-      providedIn: "root",
-      factory: () => new _TimerScheduler()
-    })
-  );
-};
-var CachedInjectorService = class _CachedInjectorService {
-  cachedInjectors = /* @__PURE__ */ new Map();
-  getOrCreateInjector(key, parentInjector, providers, debugName) {
-    if (!this.cachedInjectors.has(key)) {
-      const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;
-      this.cachedInjectors.set(key, injector);
-    }
-    return this.cachedInjectors.get(key);
-  }
-  ngOnDestroy() {
-    try {
-      for (const injector of this.cachedInjectors.values()) {
-        if (injector !== null) {
-          injector.destroy();
-        }
-      }
-    } finally {
-      this.cachedInjectors.clear();
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _CachedInjectorService,
-      providedIn: "environment",
-      factory: () => new _CachedInjectorService()
-    })
-  );
-};
-var DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken("DEFER_BLOCK_DEPENDENCY_INTERCEPTOR");
-var DEFER_BLOCK_CONFIG = new InjectionToken(ngDevMode ? "DEFER_BLOCK_CONFIG" : "");
-function getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {
-  return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? "DeferBlock Injector" : "");
-}
-function createDeferBlockInjector(parentInjector, tDetails, providers) {
-  if (parentInjector instanceof ChainedInjector) {
-    const origInjector = parentInjector.injector;
-    const parentEnvInjector2 = parentInjector.parentInjector;
-    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector2, tDetails, providers);
-    return new ChainedInjector(origInjector, envInjector);
-  }
-  const parentEnvInjector = parentInjector.get(EnvironmentInjector);
-  if (parentEnvInjector !== parentInjector) {
-    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);
-    return new ChainedInjector(parentInjector, envInjector);
-  }
-  return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);
-}
-function renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {
-  const hostLView = lContainer[PARENT];
-  const hostTView = hostLView[TVIEW];
-  if (isDestroyed(hostLView)) return;
-  ngDevMode && assertTNodeForLView(tNode, hostLView);
-  const lDetails = getLDeferBlockDetails(hostLView, tNode);
-  ngDevMode && assertDefined(lDetails, "Expected a defer block state defined");
-  const currentState = lDetails[DEFER_BLOCK_STATE];
-  const ssrState = lDetails[SSR_BLOCK_STATE];
-  if (ssrState !== null && newState < ssrState) {
-    return;
-  }
-  if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {
-    const tDetails = getTDeferBlockDetails(hostTView, tNode);
-    const needsScheduling = !skipTimerScheduling && false;
-    if (ngDevMode && needsScheduling) {
-      assertDefined(applyDeferBlockStateWithSchedulingImpl, "Expected scheduling function to be defined");
-    }
-    const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;
-    try {
-      applyStateFn(newState, lDetails, lContainer, tNode, hostLView);
-    } catch (error) {
-      handleError(hostLView, error);
-    }
-  }
-}
-function findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {
-  return lContainer[DEHYDRATED_VIEWS]?.find((view) => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null;
-}
-function applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {
-  const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);
-  if (stateTmplIndex !== null) {
-    lDetails[DEFER_BLOCK_STATE] = newState;
-    const hostTView = hostLView[TVIEW];
-    const adjustedIndex = stateTmplIndex + HEADER_OFFSET;
-    const activeBlockTNode = getTNode(hostTView, adjustedIndex);
-    const viewIndex = 0;
-    removeLViewFromLContainer(lContainer, viewIndex);
-    let injector;
-    if (newState === DeferBlockState.Complete) {
-      const tDetails = getTDeferBlockDetails(hostTView, tNode);
-      const providers = tDetails.providers;
-      if (providers && providers.length > 0) {
-        injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);
-      }
-    }
-    const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);
-    lContainer[DEHYDRATED_VIEWS] = null;
-    const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {
-      injector,
-      dehydratedView
-    });
-    addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));
-    markViewDirty(
-      embeddedLView,
-      2
-      /* NotificationSource.DeferBlockStateUpdate */
-    );
-    if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {
-      for (const callback of lDetails[ON_COMPLETE_FNS]) {
-        callback();
-      }
-      lDetails[ON_COMPLETE_FNS] = null;
-    }
-  }
-}
-function applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {
-  const now = Date.now();
-  const hostTView = hostLView[TVIEW];
-  const tDetails = getTDeferBlockDetails(hostTView, tNode);
-  if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {
-    lDetails[STATE_IS_FROZEN_UNTIL] = null;
-    const loadingAfter = getLoadingBlockAfter(tDetails);
-    const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;
-    if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {
-      lDetails[NEXT_DEFER_BLOCK_STATE] = newState;
-      const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);
-      lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;
-    } else {
-      if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {
-        lDetails[LOADING_AFTER_CLEANUP_FN]();
-        lDetails[LOADING_AFTER_CLEANUP_FN] = null;
-        lDetails[NEXT_DEFER_BLOCK_STATE] = null;
-      }
-      applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);
-      const duration = getMinimumDurationForState(tDetails, newState);
-      if (duration !== null) {
-        lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;
-        scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);
-      }
-    }
-  } else {
-    lDetails[NEXT_DEFER_BLOCK_STATE] = newState;
-  }
-}
-function scheduleDeferBlockUpdate(timeout, lDetails, tNode, lContainer, hostLView) {
-  const callback = () => {
-    const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];
-    lDetails[STATE_IS_FROZEN_UNTIL] = null;
-    lDetails[NEXT_DEFER_BLOCK_STATE] = null;
-    if (nextState !== null) {
-      renderDeferBlockState(nextState, tNode, lContainer);
-    }
-  };
-  return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);
-}
-function isValidStateChange(currentState, newState) {
-  return currentState < newState;
-}
-function renderPlaceholder(lView, tNode) {
-  const lContainer = lView[tNode.index];
-  ngDevMode && assertLContainer(lContainer);
-  renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);
-}
-function renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {
-  ngDevMode && assertDefined(tDetails.loadingPromise, "Expected loading Promise to exist on this defer block");
-  tDetails.loadingPromise.then(() => {
-    if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {
-      ngDevMode && assertDeferredDependenciesLoaded(tDetails);
-      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
-    } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {
-      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
-    }
-  });
-}
-var applyDeferBlockStateWithSchedulingImpl = null;
-function ɵɵdeferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {
-  const tViewConsts = tView.consts;
-  if (placeholderConfigIndex != null) {
-    tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);
-  }
-  if (loadingConfigIndex != null) {
-    tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);
-  }
-  if (applyDeferBlockStateWithSchedulingImpl === null) {
-    applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;
-  }
-}
-var ASYNC_COMPONENT_METADATA_FN = "__ngAsyncComponentMetadataFn__";
-function getAsyncClassMetadataFn(type) {
-  const componentClass = type;
-  return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;
-}
-function setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {
-  const componentClass = type;
-  componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then((dependencies) => {
-    metadataSetterFn(...dependencies);
-    componentClass[ASYNC_COMPONENT_METADATA_FN] = null;
-    return dependencies;
-  });
-  return componentClass[ASYNC_COMPONENT_METADATA_FN];
-}
-function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
-  return noSideEffects(() => {
-    const clazz = type;
-    if (decorators !== null) {
-      if (clazz.hasOwnProperty("decorators") && clazz.decorators !== void 0) {
-        clazz.decorators.push(...decorators);
-      } else {
-        clazz.decorators = decorators;
-      }
-    }
-    if (ctorParameters !== null) {
-      clazz.ctorParameters = ctorParameters;
-    }
-    if (propDecorators !== null) {
-      if (clazz.hasOwnProperty("propDecorators") && clazz.propDecorators !== void 0) {
-        clazz.propDecorators = __spreadValues(__spreadValues({}, clazz.propDecorators), propDecorators);
-      } else {
-        clazz.propDecorators = propDecorators;
-      }
-    }
-  });
-}
-var Console = class _Console {
-  log(message) {
-    console.log(message);
-  }
-  // Note: for reporting errors use `DOM.logError()` as it is platform specific
-  warn(message) {
-    console.warn(message);
-  }
-  static ɵfac = function Console_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Console)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Console,
-    factory: _Console.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Console, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], null, null);
-})();
-var DIDebugData = class {
-  resolverToTokenToDependencies = /* @__PURE__ */ new WeakMap();
-  resolverToProviders = /* @__PURE__ */ new WeakMap();
-  standaloneInjectorToComponent = /* @__PURE__ */ new WeakMap();
-  reset() {
-    this.resolverToTokenToDependencies = /* @__PURE__ */ new WeakMap();
-    this.resolverToProviders = /* @__PURE__ */ new WeakMap();
-    this.standaloneInjectorToComponent = /* @__PURE__ */ new WeakMap();
-  }
-};
-var frameworkDIDebugData = new DIDebugData();
-function getFrameworkDIDebugData() {
-  return frameworkDIDebugData;
-}
-function setupFrameworkInjectorProfiler() {
-  frameworkDIDebugData.reset();
-  setInjectorProfiler((injectorProfilerEvent) => handleInjectorProfilerEvent(injectorProfilerEvent));
-}
-function handleInjectorProfilerEvent(injectorProfilerEvent) {
-  const {
-    context,
-    type
-  } = injectorProfilerEvent;
-  if (type === 0) {
-    handleInjectEvent(context, injectorProfilerEvent.service);
-  } else if (type === 1) {
-    handleInstanceCreatedByInjectorEvent(context, injectorProfilerEvent.instance);
-  } else if (type === 2) {
-    handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);
-  }
-}
-function handleInjectEvent(context, data) {
-  const diResolver = getDIResolver(context.injector);
-  if (diResolver === null) {
-    throwError("An Inject event must be run within an injection context.");
-  }
-  const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;
-  if (!diResolverToInstantiatedToken.has(diResolver)) {
-    diResolverToInstantiatedToken.set(diResolver, /* @__PURE__ */ new WeakMap());
-  }
-  if (!canBeHeldWeakly(context.token)) {
-    return;
-  }
-  const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);
-  if (!instantiatedTokenToDependencies.has(context.token)) {
-    instantiatedTokenToDependencies.set(context.token, []);
-  }
-  const {
-    token,
-    value,
-    flags
-  } = data;
-  assertDefined(context.token, "Injector profiler context token is undefined.");
-  const dependencies = instantiatedTokenToDependencies.get(context.token);
-  assertDefined(dependencies, "Could not resolve dependencies for token.");
-  if (context.injector instanceof NodeInjector) {
-    dependencies.push({
-      token,
-      value,
-      flags,
-      injectedIn: getNodeInjectorContext(context.injector)
-    });
-  } else {
-    dependencies.push({
-      token,
-      value,
-      flags
-    });
-  }
-}
-function getNodeInjectorContext(injector) {
-  if (!(injector instanceof NodeInjector)) {
-    throwError("getNodeInjectorContext must be called with a NodeInjector");
-  }
-  const lView = getNodeInjectorLView(injector);
-  const tNode = getNodeInjectorTNode(injector);
-  if (tNode === null) {
-    return;
-  }
-  assertTNodeForLView(tNode, lView);
-  return {
-    lView,
-    tNode
-  };
-}
-function handleInstanceCreatedByInjectorEvent(context, data) {
-  const {
-    value
-  } = data;
-  if (getDIResolver(context.injector) === null) {
-    throwError("An InjectorCreatedInstance event must be run within an injection context.");
-  }
-  let standaloneComponent = void 0;
-  if (typeof value === "object") {
-    standaloneComponent = value?.constructor;
-  }
-  if (standaloneComponent == void 0 || !isStandaloneComponent(standaloneComponent)) {
-    return;
-  }
-  const environmentInjector = context.injector.get(EnvironmentInjector, null, {
-    optional: true
-  });
-  if (environmentInjector === null) {
-    return;
-  }
-  const {
-    standaloneInjectorToComponent
-  } = frameworkDIDebugData;
-  if (standaloneInjectorToComponent.has(environmentInjector)) {
-    return;
-  }
-  standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);
-}
-function isStandaloneComponent(value) {
-  const def = getComponentDef(value);
-  return !!def?.standalone;
-}
-function handleProviderConfiguredEvent(context, data) {
-  const {
-    resolverToProviders
-  } = frameworkDIDebugData;
-  let diResolver;
-  if (context?.injector instanceof NodeInjector) {
-    diResolver = getNodeInjectorTNode(context.injector);
-  } else {
-    diResolver = context.injector;
-  }
-  if (diResolver === null) {
-    throwError("A ProviderConfigured event must be run within an injection context.");
-  }
-  if (!resolverToProviders.has(diResolver)) {
-    resolverToProviders.set(diResolver, []);
-  }
-  resolverToProviders.get(diResolver).push(data);
-}
-function getDIResolver(injector) {
-  let diResolver = null;
-  if (injector === void 0) {
-    return diResolver;
-  }
-  if (injector instanceof NodeInjector) {
-    diResolver = getNodeInjectorLView(injector);
-  } else {
-    diResolver = injector;
-  }
-  return diResolver;
-}
-function canBeHeldWeakly(value) {
-  return value !== null && (typeof value === "object" || typeof value === "function" || typeof value === "symbol");
-}
-function applyChanges(component) {
-  ngDevMode && assertDefined(component, "component");
-  markViewDirty(
-    getComponentViewByInstance(component),
-    3
-    /* NotificationSource.DebugApplyChanges */
-  );
-  getRootComponents(component).forEach((rootComponent) => detectChanges(rootComponent));
-}
-function detectChanges(component) {
-  const view = getComponentViewByInstance(component);
-  view[FLAGS] |= 1024;
-  detectChangesInternal(view);
-}
-function getDependenciesFromInjectable(injector, token) {
-  const instance = injector.get(token, null, {
-    self: true,
-    optional: true
-  });
-  if (instance === null) {
-    throw new Error(`Unable to determine instance of ${token} in given injector`);
-  }
-  const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);
-  const resolutionPath = getInjectorResolutionPath(injector);
-  const dependencies = unformattedDependencies.map((dep) => {
-    const formattedDependency = {
-      value: dep.value
-    };
-    const flags = dep.flags;
-    formattedDependency.flags = {
-      optional: (8 & flags) === 8,
-      host: (1 & flags) === 1,
-      self: (2 & flags) === 2,
-      skipSelf: (4 & flags) === 4
-      /* InternalInjectFlags.SkipSelf */
-    };
-    for (let i = 0; i < resolutionPath.length; i++) {
-      const injectorToCheck = resolutionPath[i];
-      if (i === 0 && formattedDependency.flags.skipSelf) {
-        continue;
-      }
-      if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {
-        break;
-      }
-      const instance2 = injectorToCheck.get(dep.token, null, {
-        self: true,
-        optional: true
-      });
-      if (instance2 !== null) {
-        if (formattedDependency.flags.host) {
-          const firstInjector = resolutionPath[0];
-          const lookupFromFirstInjector = firstInjector.get(dep.token, null, __spreadProps(__spreadValues({}, formattedDependency.flags), {
-            optional: true
-          }));
-          if (lookupFromFirstInjector !== null) {
-            formattedDependency.providedIn = injectorToCheck;
-          }
-          break;
-        }
-        formattedDependency.providedIn = injectorToCheck;
-        break;
-      }
-      if (i === 0 && formattedDependency.flags.self) {
-        break;
-      }
-    }
-    if (dep.token) formattedDependency.token = dep.token;
-    return formattedDependency;
-  });
-  return {
-    instance,
-    dependencies
-  };
-}
-function getDependenciesForTokenInInjector(token, injector) {
-  const {
-    resolverToTokenToDependencies
-  } = getFrameworkDIDebugData();
-  if (!(injector instanceof NodeInjector)) {
-    return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];
-  }
-  const lView = getNodeInjectorLView(injector);
-  const tokenDependencyMap = resolverToTokenToDependencies.get(lView);
-  const dependencies = tokenDependencyMap?.get(token) ?? [];
-  return dependencies.filter((dependency) => {
-    const dependencyNode = dependency.injectedIn?.tNode;
-    if (dependencyNode === void 0) {
-      return false;
-    }
-    const instanceNode = getNodeInjectorTNode(injector);
-    assertTNode(dependencyNode);
-    assertTNode(instanceNode);
-    return dependencyNode === instanceNode;
-  });
-}
-function getProviderImportsContainer(injector) {
-  const {
-    standaloneInjectorToComponent
-  } = getFrameworkDIDebugData();
-  if (standaloneInjectorToComponent.has(injector)) {
-    return standaloneInjectorToComponent.get(injector);
-  }
-  const defTypeRef = injector.get(NgModuleRef$1, null, {
-    self: true,
-    optional: true
-  });
-  if (defTypeRef === null) {
-    return null;
-  }
-  if (defTypeRef.instance === null) {
-    return null;
-  }
-  return defTypeRef.instance.constructor;
-}
-function getNodeInjectorProviders(injector) {
-  const diResolver = getNodeInjectorTNode(injector);
-  const {
-    resolverToProviders
-  } = getFrameworkDIDebugData();
-  return resolverToProviders.get(diResolver) ?? [];
-}
-function getProviderImportPaths(providerImportsContainer) {
-  const providerToPath = /* @__PURE__ */ new Map();
-  const visitedContainers = /* @__PURE__ */ new Set();
-  const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);
-  walkProviderTree(providerImportsContainer, visitor, [], /* @__PURE__ */ new Set());
-  return providerToPath;
-}
-function walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {
-  return (provider, container) => {
-    if (!providerToPath.has(provider)) {
-      providerToPath.set(provider, [container]);
-    }
-    if (!visitedContainers.has(container)) {
-      for (const prov of providerToPath.keys()) {
-        const existingImportPath = providerToPath.get(prov);
-        let containerDef = getInjectorDef(container);
-        if (!containerDef) {
-          const ngModule = container.ngModule;
-          containerDef = getInjectorDef(ngModule);
-        }
-        if (!containerDef) {
-          return;
-        }
-        const lastContainerAddedToPath = existingImportPath[0];
-        let isNextStepInPath = false;
-        deepForEach(containerDef.imports, (moduleImport) => {
-          if (isNextStepInPath) {
-            return;
-          }
-          isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;
-          if (isNextStepInPath) {
-            providerToPath.get(prov)?.unshift(container);
-          }
-        });
-      }
-    }
-    visitedContainers.add(container);
-  };
-}
-function getEnvironmentInjectorProviders(injector) {
-  const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];
-  if (isPlatformInjector(injector)) {
-    return providerRecordsWithoutImportPaths;
-  }
-  const providerImportsContainer = getProviderImportsContainer(injector);
-  if (providerImportsContainer === null) {
-    return providerRecordsWithoutImportPaths;
-  }
-  const providerToPath = getProviderImportPaths(providerImportsContainer);
-  const providerRecords = [];
-  for (const providerRecord of providerRecordsWithoutImportPaths) {
-    const provider = providerRecord.provider;
-    const token = provider.provide;
-    if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {
-      continue;
-    }
-    let importPath = providerToPath.get(provider) ?? [];
-    const def = getComponentDef(providerImportsContainer);
-    const isStandaloneComponent2 = !!def?.standalone;
-    if (isStandaloneComponent2) {
-      importPath = [providerImportsContainer, ...importPath];
-    }
-    providerRecords.push(__spreadProps(__spreadValues({}, providerRecord), {
-      importPath
-    }));
-  }
-  return providerRecords;
-}
-function isPlatformInjector(injector) {
-  return injector instanceof R3Injector && injector.scopes.has("platform");
-}
-function getInjectorProviders(injector) {
-  if (injector instanceof NodeInjector) {
-    return getNodeInjectorProviders(injector);
-  } else if (injector instanceof EnvironmentInjector) {
-    return getEnvironmentInjectorProviders(injector);
-  }
-  throwError("getInjectorProviders only supports NodeInjector and EnvironmentInjector");
-}
-function getInjectorMetadata(injector) {
-  if (injector instanceof NodeInjector) {
-    const lView = getNodeInjectorLView(injector);
-    const tNode = getNodeInjectorTNode(injector);
-    assertTNodeForLView(tNode, lView);
-    return {
-      type: "element",
-      source: getNativeByTNode(tNode, lView)
-    };
-  }
-  if (injector instanceof R3Injector) {
-    return {
-      type: "environment",
-      source: injector.source ?? null
-    };
-  }
-  if (injector instanceof NullInjector) {
-    return {
-      type: "null",
-      source: null
-    };
-  }
-  return null;
-}
-function getInjectorResolutionPath(injector) {
-  const resolutionPath = [injector];
-  getInjectorResolutionPathHelper(injector, resolutionPath);
-  return resolutionPath;
-}
-function getInjectorResolutionPathHelper(injector, resolutionPath) {
-  const parent = getInjectorParent(injector);
-  if (parent === null) {
-    if (injector instanceof NodeInjector) {
-      const firstInjector = resolutionPath[0];
-      if (firstInjector instanceof NodeInjector) {
-        const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);
-        if (moduleInjector === null) {
-          throwError("NodeInjector must have some connection to the module injector tree");
-        }
-        resolutionPath.push(moduleInjector);
-        getInjectorResolutionPathHelper(moduleInjector, resolutionPath);
-      }
-      return resolutionPath;
-    }
-  } else {
-    resolutionPath.push(parent);
-    getInjectorResolutionPathHelper(parent, resolutionPath);
-  }
-  return resolutionPath;
-}
-function getInjectorParent(injector) {
-  if (injector instanceof R3Injector) {
-    const parent = injector.parent;
-    if (isRouterOutletInjector(parent)) {
-      return parent.parentInjector;
-    }
-    return parent;
-  }
-  let tNode;
-  let lView;
-  if (injector instanceof NodeInjector) {
-    tNode = getNodeInjectorTNode(injector);
-    lView = getNodeInjectorLView(injector);
-  } else if (injector instanceof NullInjector) {
-    return null;
-  } else if (injector instanceof ChainedInjector) {
-    return injector.parentInjector;
-  } else {
-    throwError("getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector");
-  }
-  const parentLocation = getParentInjectorLocation(tNode, lView);
-  if (hasParentInjector(parentLocation)) {
-    const parentInjectorIndex = getParentInjectorIndex(parentLocation);
-    const parentLView = getParentInjectorView(parentLocation, lView);
-    const parentTView = parentLView[TVIEW];
-    const parentTNode = parentTView.data[
-      parentInjectorIndex + 8
-      /* NodeInjectorOffset.TNODE */
-    ];
-    return new NodeInjector(parentTNode, parentLView);
-  } else {
-    const chainedInjector = lView[INJECTOR];
-    const injectorParent = chainedInjector.injector?.parent;
-    if (injectorParent instanceof NodeInjector) {
-      return injectorParent;
-    }
-  }
-  return null;
-}
-function getModuleInjectorOfNodeInjector(injector) {
-  let lView;
-  if (injector instanceof NodeInjector) {
-    lView = getNodeInjectorLView(injector);
-  } else {
-    throwError("getModuleInjectorOfNodeInjector must be called with a NodeInjector");
-  }
-  const inj = lView[INJECTOR];
-  const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;
-  if (!moduleInjector) {
-    throwError("NodeInjector must have some connection to the module injector tree");
-  }
-  return moduleInjector;
-}
-var GLOBAL_PUBLISH_EXPANDO_KEY = "ng";
-var globalUtilsFunctions = {
-  /**
-   * Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon
-   * in application's code. The contract of those functions might be changed in any release and/or a
-   * function can be removed completely.
-   */
-  "ɵgetDependenciesFromInjectable": getDependenciesFromInjectable,
-  "ɵgetInjectorProviders": getInjectorProviders,
-  "ɵgetInjectorResolutionPath": getInjectorResolutionPath,
-  "ɵgetInjectorMetadata": getInjectorMetadata,
-  "ɵsetProfiler": setProfiler,
-  "getDirectiveMetadata": getDirectiveMetadata$1,
-  "getComponent": getComponent,
-  "getContext": getContext,
-  "getListeners": getListeners,
-  "getOwningComponent": getOwningComponent,
-  "getHostElement": getHostElement,
-  "getInjector": getInjector,
-  "getRootComponents": getRootComponents,
-  "getDirectives": getDirectives,
-  "applyChanges": applyChanges,
-  "isSignal": isSignal
-};
-var _published = false;
-function publishDefaultGlobalUtils$1() {
-  if (!_published) {
-    _published = true;
-    if (typeof window !== "undefined") {
-      setupFrameworkInjectorProfiler();
-    }
-    for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {
-      publishGlobalUtil(methodName, method);
-    }
-  }
-}
-function publishGlobalUtil(name, fn) {
-  publishUtil(name, fn);
-}
-function publishExternalGlobalUtil(name, fn) {
-  publishUtil(name, fn);
-}
-function publishUtil(name, fn) {
-  if (typeof COMPILED === "undefined" || !COMPILED) {
-    const w = _global;
-    ngDevMode && assertDefined(fn, "function not defined");
-    w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};
-    w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;
-  }
-}
-var TESTABILITY = new InjectionToken("");
-var TESTABILITY_GETTER = new InjectionToken("");
-var Testability = class _Testability {
-  _ngZone;
-  registry;
-  _isZoneStable = true;
-  _callbacks = [];
-  taskTrackingZone = null;
-  constructor(_ngZone, registry, testabilityGetter) {
-    this._ngZone = _ngZone;
-    this.registry = registry;
-    if (!_testabilityGetter) {
-      setTestabilityGetter(testabilityGetter);
-      testabilityGetter.addToWindow(registry);
-    }
-    this._watchAngularEvents();
-    _ngZone.run(() => {
-      this.taskTrackingZone = typeof Zone == "undefined" ? null : Zone.current.get("TaskTrackingZone");
-    });
-  }
-  _watchAngularEvents() {
-    this._ngZone.onUnstable.subscribe({
-      next: () => {
-        this._isZoneStable = false;
-      }
-    });
-    this._ngZone.runOutsideAngular(() => {
-      this._ngZone.onStable.subscribe({
-        next: () => {
-          NgZone.assertNotInAngularZone();
-          queueMicrotask(() => {
-            this._isZoneStable = true;
-            this._runCallbacksIfReady();
-          });
-        }
-      });
-    });
-  }
-  /**
-   * Whether an associated application is stable
-   */
-  isStable() {
-    return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;
-  }
-  _runCallbacksIfReady() {
-    if (this.isStable()) {
-      queueMicrotask(() => {
-        while (this._callbacks.length !== 0) {
-          let cb = this._callbacks.pop();
-          clearTimeout(cb.timeoutId);
-          cb.doneCb();
-        }
-      });
-    } else {
-      let pending = this.getPendingTasks();
-      this._callbacks = this._callbacks.filter((cb) => {
-        if (cb.updateCb && cb.updateCb(pending)) {
-          clearTimeout(cb.timeoutId);
-          return false;
-        }
-        return true;
-      });
-    }
-  }
-  getPendingTasks() {
-    if (!this.taskTrackingZone) {
-      return [];
-    }
-    return this.taskTrackingZone.macroTasks.map((t) => {
-      return {
-        source: t.source,
-        // From TaskTrackingZone:
-        // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40
-        creationLocation: t.creationLocation,
-        data: t.data
-      };
-    });
-  }
-  addCallback(cb, timeout, updateCb) {
-    let timeoutId = -1;
-    if (timeout && timeout > 0) {
-      timeoutId = setTimeout(() => {
-        this._callbacks = this._callbacks.filter((cb2) => cb2.timeoutId !== timeoutId);
-        cb();
-      }, timeout);
-    }
-    this._callbacks.push({
-      doneCb: cb,
-      timeoutId,
-      updateCb
-    });
-  }
-  /**
-   * Wait for the application to be stable with a timeout. If the timeout is reached before that
-   * happens, the callback receives a list of the macro tasks that were pending, otherwise null.
-   *
-   * @param doneCb The callback to invoke when Angular is stable or the timeout expires
-   *    whichever comes first.
-   * @param timeout Optional. The maximum time to wait for Angular to become stable. If not
-   *    specified, whenStable() will wait forever.
-   * @param updateCb Optional. If specified, this callback will be invoked whenever the set of
-   *    pending macrotasks changes. If this callback returns true doneCb will not be invoked
-   *    and no further updates will be issued.
-   */
-  whenStable(doneCb, timeout, updateCb) {
-    if (updateCb && !this.taskTrackingZone) {
-      throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');
-    }
-    this.addCallback(doneCb, timeout, updateCb);
-    this._runCallbacksIfReady();
-  }
-  /**
-   * Registers an application with a testability hook so that it can be tracked.
-   * @param token token of application, root element
-   *
-   * @internal
-   */
-  registerApplication(token) {
-    this.registry.registerApplication(token, this);
-  }
-  /**
-   * Unregisters an application.
-   * @param token token of application, root element
-   *
-   * @internal
-   */
-  unregisterApplication(token) {
-    this.registry.unregisterApplication(token);
-  }
-  /**
-   * Find providers by name
-   * @param using The root element to search from
-   * @param provider The name of binding variable
-   * @param exactMatch Whether using exactMatch
-   */
-  findProviders(using, provider, exactMatch) {
-    return [];
-  }
-  static ɵfac = function Testability_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Testability,
-    factory: _Testability.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Testability, [{
-    type: Injectable
-  }], () => [{
-    type: NgZone
-  }, {
-    type: TestabilityRegistry
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [TESTABILITY_GETTER]
-    }]
-  }], null);
-})();
-var TestabilityRegistry = class _TestabilityRegistry {
-  /** @internal */
-  _applications = /* @__PURE__ */ new Map();
-  /**
-   * Registers an application with a testability hook so that it can be tracked
-   * @param token token of application, root element
-   * @param testability Testability hook
-   */
-  registerApplication(token, testability) {
-    this._applications.set(token, testability);
-  }
-  /**
-   * Unregisters an application.
-   * @param token token of application, root element
-   */
-  unregisterApplication(token) {
-    this._applications.delete(token);
-  }
-  /**
-   * Unregisters all applications
-   */
-  unregisterAllApplications() {
-    this._applications.clear();
-  }
-  /**
-   * Get a testability hook associated with the application
-   * @param elem root element
-   */
-  getTestability(elem) {
-    return this._applications.get(elem) || null;
-  }
-  /**
-   * Get all registered testabilities
-   */
-  getAllTestabilities() {
-    return Array.from(this._applications.values());
-  }
-  /**
-   * Get all registered applications(root elements)
-   */
-  getAllRootElements() {
-    return Array.from(this._applications.keys());
-  }
-  /**
-   * Find testability of a node in the Tree
-   * @param elem node
-   * @param findInAncestors whether finding testability in ancestors if testability was not found in
-   * current node
-   */
-  findTestabilityInTree(elem, findInAncestors = true) {
-    return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;
-  }
-  static ɵfac = function TestabilityRegistry_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TestabilityRegistry)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _TestabilityRegistry,
-    factory: _TestabilityRegistry.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], null, null);
-})();
-function setTestabilityGetter(getter) {
-  _testabilityGetter = getter;
-}
-var _testabilityGetter;
-function isPromise(obj) {
-  return !!obj && typeof obj.then === "function";
-}
-function isSubscribable(obj) {
-  return !!obj && typeof obj.subscribe === "function";
-}
-var APP_INITIALIZER = new InjectionToken(ngDevMode ? "Application Initializer" : "");
-function provideAppInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: APP_INITIALIZER,
-    multi: true,
-    useValue: initializerFn
-  }]);
-}
-var ApplicationInitStatus = class _ApplicationInitStatus {
-  // Using non null assertion, these fields are defined below
-  // within the `new Promise` callback (synchronously).
-  resolve;
-  reject;
-  initialized = false;
-  done = false;
-  donePromise = new Promise((res, rej) => {
-    this.resolve = res;
-    this.reject = rej;
-  });
-  appInits = inject(APP_INITIALIZER, {
-    optional: true
-  }) ?? [];
-  injector = inject(Injector);
-  constructor() {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !Array.isArray(this.appInits)) {
-      throw new RuntimeError(-209, `Unexpected type of the \`APP_INITIALIZER\` token value (expected an array, but got ${typeof this.appInits}). Please check that the \`APP_INITIALIZER\` token is configured as a \`multi: true\` provider.`);
-    }
-  }
-  /** @internal */
-  runInitializers() {
-    if (this.initialized) {
-      return;
-    }
-    const asyncInitPromises = [];
-    for (const appInits of this.appInits) {
-      const initResult = runInInjectionContext(this.injector, appInits);
-      if (isPromise(initResult)) {
-        asyncInitPromises.push(initResult);
-      } else if (isSubscribable(initResult)) {
-        const observableAsPromise = new Promise((resolve, reject) => {
-          initResult.subscribe({
-            complete: resolve,
-            error: reject
-          });
-        });
-        asyncInitPromises.push(observableAsPromise);
-      }
-    }
-    const complete = () => {
-      this.done = true;
-      this.resolve();
-    };
-    Promise.all(asyncInitPromises).then(() => {
-      complete();
-    }).catch((e) => {
-      this.reject(e);
-    });
-    if (asyncInitPromises.length === 0) {
-      complete();
-    }
-    this.initialized = true;
-  }
-  static ɵfac = function ApplicationInitStatus_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationInitStatus)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ApplicationInitStatus,
-    factory: _ApplicationInitStatus.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-var EffectScheduler = class _EffectScheduler {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _EffectScheduler,
-      providedIn: "root",
-      factory: () => new ZoneAwareEffectScheduler()
-    })
-  );
-};
-var ZoneAwareEffectScheduler = class {
-  queuedEffectCount = 0;
-  queues = /* @__PURE__ */ new Map();
-  schedule(handle) {
-    this.enqueue(handle);
-  }
-  enqueue(handle) {
-    const zone = handle.zone;
-    if (!this.queues.has(zone)) {
-      this.queues.set(zone, /* @__PURE__ */ new Set());
-    }
-    const queue = this.queues.get(zone);
-    if (queue.has(handle)) {
-      return;
-    }
-    this.queuedEffectCount++;
-    queue.add(handle);
-  }
-  /**
-   * Run all scheduled effects.
-   *
-   * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no
-   * ordering guarantee between effects scheduled in different zones.
-   */
-  flush() {
-    while (this.queuedEffectCount > 0) {
-      for (const [zone, queue] of this.queues) {
-        if (zone === null) {
-          this.flushQueue(queue);
-        } else {
-          zone.run(() => this.flushQueue(queue));
-        }
-      }
-    }
-  }
-  flushQueue(queue) {
-    for (const handle of queue) {
-      queue.delete(handle);
-      this.queuedEffectCount--;
-      handle.run();
-    }
-  }
-};
-var APP_BOOTSTRAP_LISTENER = new InjectionToken(ngDevMode ? "appBootstrapListener" : "");
-function publishDefaultGlobalUtils() {
-  ngDevMode && publishDefaultGlobalUtils$1();
-}
-function publishSignalConfiguration() {
-  setThrowInvalidWriteToSignalError(() => {
-    throw new RuntimeError(600, ngDevMode && "Writing to signals is not allowed in a `computed`.");
-  });
-}
-function isBoundToModule(cf) {
-  return cf.isBoundToModule;
-}
-var NgProbeToken = class {
-  name;
-  token;
-  constructor(name, token) {
-    this.name = name;
-    this.token = token;
-  }
-};
-var MAXIMUM_REFRESH_RERUNS = 10;
-function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
-  try {
-    const result = callback();
-    if (isPromise(result)) {
-      return result.catch((e) => {
-        ngZone.runOutsideAngular(() => errorHandler.handleError(e));
-        throw e;
-      });
-    }
-    return result;
-  } catch (e) {
-    ngZone.runOutsideAngular(() => errorHandler.handleError(e));
-    throw e;
-  }
-}
-function optionsReducer(dst, objs) {
-  if (Array.isArray(objs)) {
-    return objs.reduce(optionsReducer, dst);
-  }
-  return __spreadValues(__spreadValues({}, dst), objs);
-}
-var ApplicationRef = class _ApplicationRef {
-  /** @internal */
-  _runningTick = false;
-  _destroyed = false;
-  _destroyListeners = [];
-  /** @internal */
-  _views = [];
-  internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);
-  afterRenderManager = inject(AfterRenderManager);
-  zonelessEnabled = inject(ZONELESS_ENABLED);
-  rootEffectScheduler = inject(EffectScheduler);
-  /**
-   * Current dirty state of the application across a number of dimensions (views, afterRender hooks,
-   * etc).
-   *
-   * A flag set here means that `tick()` will attempt to resolve the dirtiness when executed.
-   *
-   * @internal
-   */
-  dirtyFlags = 0;
-  /**
-   * Like `dirtyFlags` but don't cause `tick()` to loop.
-   *
-   * @internal
-   */
-  deferredDirtyFlags = 0;
-  /**
-   * Most recent snapshot from the `TracingService`, if any.
-   *
-   * This snapshot attempts to capture the context when `tick()` was first
-   * scheduled. It then runs wrapped in this context.
-   *
-   * @internal
-   */
-  tracingSnapshot = null;
-  // Needed for ComponentFixture temporarily during migration of autoDetect behavior
-  // Eventually the hostView of the fixture should just attach to ApplicationRef.
-  externalTestViews = /* @__PURE__ */ new Set();
-  /** @internal */
-  afterTick = new import_rxjs.Subject();
-  /** @internal */
-  get allViews() {
-    return [...this.externalTestViews.keys(), ...this._views];
-  }
-  /**
-   * Indicates whether this instance was destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  /**
-   * Get a list of component types registered to this application.
-   * This list is populated even before the component is created.
-   */
-  componentTypes = [];
-  /**
-   * Get a list of components registered to this application.
-   */
-  components = [];
-  /**
-   * Returns an Observable that indicates when the application is stable or unstable.
-   */
-  isStable = inject(PendingTasksInternal).hasPendingTasks.pipe((0, import_operators.map)((pending) => !pending));
-  constructor() {
-    inject(TracingService, {
-      optional: true
-    });
-  }
-  /**
-   * @returns A promise that resolves when the application becomes stable
-   */
-  whenStable() {
-    let subscription;
-    return new Promise((resolve) => {
-      subscription = this.isStable.subscribe({
-        next: (stable) => {
-          if (stable) {
-            resolve();
-          }
-        }
-      });
-    }).finally(() => {
-      subscription.unsubscribe();
-    });
-  }
-  _injector = inject(EnvironmentInjector);
-  _rendererFactory = null;
-  /**
-   * The `EnvironmentInjector` used to create this application.
-   */
-  get injector() {
-    return this._injector;
-  }
-  /**
-   * Bootstrap a component onto the element identified by its selector or, optionally, to a
-   * specified element.
-   *
-   * @usageNotes
-   * ### Bootstrap process
-   *
-   * When bootstrapping a component, Angular mounts it onto a target DOM element
-   * and kicks off automatic change detection. The target DOM element can be
-   * provided using the `rootSelectorOrNode` argument.
-   *
-   * If the target DOM element is not provided, Angular tries to find one on a page
-   * using the `selector` of the component that is being bootstrapped
-   * (first matched element is used).
-   *
-   * ### Example
-   *
-   * Generally, we define the component to bootstrap in the `bootstrap` array of `NgModule`,
-   * but it requires us to know the component while writing the application code.
-   *
-   * Imagine a situation where we have to wait for an API call to decide about the component to
-   * bootstrap. We can use the `ngDoBootstrap` hook of the `NgModule` and call this method to
-   * dynamically bootstrap a component.
-   *
-   * {@example core/ts/platform/platform.ts region='componentSelector'}
-   *
-   * Optionally, a component can be mounted onto a DOM element that does not match the
-   * selector of the bootstrapped component.
-   *
-   * In the following example, we are providing a CSS selector to match the target element.
-   *
-   * {@example core/ts/platform/platform.ts region='cssSelector'}
-   *
-   * While in this example, we are providing reference to a DOM node.
-   *
-   * {@example core/ts/platform/platform.ts region='domNode'}
-   */
-  bootstrap(componentOrFactory, rootSelectorOrNode) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
-    const initStatus = this._injector.get(ApplicationInitStatus);
-    if (!initStatus.done) {
-      const standalone = !isComponentFactory && isStandalone(componentOrFactory);
-      const errorMessage = (typeof ngDevMode === "undefined" || ngDevMode) && "Cannot bootstrap as there are still asynchronous initializers running." + (standalone ? "" : " Bootstrap components in the `ngDoBootstrap` method of the root module.");
-      throw new RuntimeError(405, errorMessage);
-    }
-    let componentFactory;
-    if (isComponentFactory) {
-      componentFactory = componentOrFactory;
-    } else {
-      const resolver = this._injector.get(ComponentFactoryResolver$1);
-      componentFactory = resolver.resolveComponentFactory(componentOrFactory);
-    }
-    this.componentTypes.push(componentFactory.componentType);
-    const ngModule = isBoundToModule(componentFactory) ? void 0 : this._injector.get(NgModuleRef$1);
-    const selectorOrNode = rootSelectorOrNode || componentFactory.selector;
-    const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
-    const nativeElement = compRef.location.nativeElement;
-    const testability = compRef.injector.get(TESTABILITY, null);
-    testability?.registerApplication(nativeElement);
-    compRef.onDestroy(() => {
-      this.detachView(compRef.hostView);
-      remove(this.components, compRef);
-      testability?.unregisterApplication(nativeElement);
-    });
-    this._loadComponent(compRef);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      const _console = this._injector.get(Console);
-      _console.log(`Angular is running in development mode.`);
-    }
-    return compRef;
-  }
-  /**
-   * Invoke this method to explicitly process change detection and its side-effects.
-   *
-   * In development mode, `tick()` also performs a second change detection cycle to ensure that no
-   * further changes are detected. If additional changes are picked up during this second cycle,
-   * bindings in the app have side-effects that cannot be resolved in a single change detection
-   * pass.
-   * In this case, Angular throws an error, since an Angular application can only have one change
-   * detection pass during which all change detection must complete.
-   */
-  tick() {
-    if (!this.zonelessEnabled) {
-      this.dirtyFlags |= 1;
-    }
-    this._tick();
-  }
-  /** @internal */
-  _tick = () => {
-    if (this.tracingSnapshot !== null) {
-      const snapshot = this.tracingSnapshot;
-      this.tracingSnapshot = null;
-      snapshot.run(TracingAction.CHANGE_DETECTION, this._tick);
-      snapshot.dispose();
-      return;
-    }
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    if (this._runningTick) {
-      throw new RuntimeError(101, ngDevMode && "ApplicationRef.tick is called recursively");
-    }
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      this._runningTick = true;
-      this.synchronize();
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        for (let view of this.allViews) {
-          view.checkNoChanges();
-        }
-      }
-    } catch (e) {
-      this.internalErrorHandler(e);
-    } finally {
-      this._runningTick = false;
-      setActiveConsumer(prevConsumer);
-      this.afterTick.next();
-    }
-  };
-  /**
-   * Performs the core work of synchronizing the application state with the UI, resolving any
-   * pending dirtiness (potentially in a loop).
-   */
-  synchronize() {
-    if (this._rendererFactory === null && !this._injector.destroyed) {
-      this._rendererFactory = this._injector.get(RendererFactory2, null, {
-        optional: true
-      });
-    }
-    this.dirtyFlags |= this.deferredDirtyFlags;
-    this.deferredDirtyFlags = 0;
-    let runs = 0;
-    while (this.dirtyFlags !== 0 && runs++ < MAXIMUM_REFRESH_RERUNS) {
-      this.synchronizeOnce();
-    }
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {
-      throw new RuntimeError(103, ngDevMode && "Infinite change detection while refreshing application views. Ensure views are not calling `markForCheck` on every template execution or that afterRender hooks always mark views for check.");
-    }
-  }
-  /**
-   * Perform a single synchronization pass.
-   */
-  synchronizeOnce() {
-    this.dirtyFlags |= this.deferredDirtyFlags;
-    this.deferredDirtyFlags = 0;
-    if (this.dirtyFlags & 16) {
-      this.dirtyFlags &= ~16;
-      this.rootEffectScheduler.flush();
-    }
-    if (this.dirtyFlags & 7) {
-      const useGlobalCheck = Boolean(
-        this.dirtyFlags & 1
-        /* ApplicationRefDirtyFlags.ViewTreeGlobal */
-      );
-      this.dirtyFlags &= ~7;
-      this.dirtyFlags |= 8;
-      for (let {
-        _lView,
-        notifyErrorHandler
-      } of this.allViews) {
-        detectChangesInViewIfRequired(_lView, notifyErrorHandler, useGlobalCheck, this.zonelessEnabled);
-      }
-      this.dirtyFlags &= ~4;
-      this.syncDirtyFlagsWithViews();
-      if (this.dirtyFlags & (7 | 16)) {
-        return;
-      }
-    } else {
-      this._rendererFactory?.begin?.();
-      this._rendererFactory?.end?.();
-    }
-    if (this.dirtyFlags & 8) {
-      this.dirtyFlags &= ~8;
-      this.afterRenderManager.execute();
-    }
-    this.syncDirtyFlagsWithViews();
-  }
-  /**
-   * Checks `allViews` for views which require refresh/traversal, and updates `dirtyFlags`
-   * accordingly, with two potential behaviors:
-   *
-   * 1. If any of our views require updating, then this adds the `ViewTreeTraversal` dirty flag.
-   *    This _should_ be a no-op, since the scheduler should've added the flag at the same time the
-   *    view was marked as needing updating.
-   *
-   *    TODO(alxhub): figure out if this behavior is still needed for edge cases.
-   *
-   * 2. If none of our views require updating, then clear the view-related `dirtyFlag`s. This
-   *    happens when the scheduler is notified of a view becoming dirty, but the view itself isn't
-   *    reachable through traversal from our roots (e.g. it's detached from the CD tree).
-   */
-  syncDirtyFlagsWithViews() {
-    if (this.allViews.some(({
-      _lView
-    }) => requiresRefreshOrTraversal(_lView))) {
-      this.dirtyFlags |= 2;
-      return;
-    } else {
-      this.dirtyFlags &= ~7;
-    }
-  }
-  /**
-   * Attaches a view so that it will be dirty checked.
-   * The view will be automatically detached when it is destroyed.
-   * This will throw if the view is already attached to a ViewContainer.
-   */
-  attachView(viewRef) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const view = viewRef;
-    this._views.push(view);
-    view.attachToAppRef(this);
-  }
-  /**
-   * Detaches a view from dirty checking again.
-   */
-  detachView(viewRef) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    const view = viewRef;
-    remove(this._views, view);
-    view.detachFromAppRef();
-  }
-  _loadComponent(componentRef) {
-    this.attachView(componentRef.hostView);
-    this.tick();
-    this.components.push(componentRef);
-    const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);
-    if (ngDevMode && !Array.isArray(listeners)) {
-      throw new RuntimeError(-209, `Unexpected type of the \`APP_BOOTSTRAP_LISTENER\` token value (expected an array, but got ${typeof listeners}). Please check that the \`APP_BOOTSTRAP_LISTENER\` token is configured as a \`multi: true\` provider.`);
-    }
-    listeners.forEach((listener) => listener(componentRef));
-  }
-  /** @internal */
-  ngOnDestroy() {
-    if (this._destroyed) return;
-    try {
-      this._destroyListeners.forEach((listener) => listener());
-      this._views.slice().forEach((view) => view.destroy());
-    } finally {
-      this._destroyed = true;
-      this._views = [];
-      this._destroyListeners = [];
-    }
-  }
-  /**
-   * Registers a listener to be called when an instance is destroyed.
-   *
-   * @param callback A callback function to add as a listener.
-   * @returns A function which unregisters a listener.
-   */
-  onDestroy(callback) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.warnIfDestroyed();
-    this._destroyListeners.push(callback);
-    return () => remove(this._destroyListeners, callback);
-  }
-  /**
-   * Destroys an Angular application represented by this `ApplicationRef`. Calling this function
-   * will destroy the associated environment injectors as well as all the bootstrapped components
-   * with their views.
-   */
-  destroy() {
-    if (this._destroyed) {
-      throw new RuntimeError(406, ngDevMode && "This instance of the `ApplicationRef` has already been destroyed.");
-    }
-    const injector = this._injector;
-    if (injector.destroy && !injector.destroyed) {
-      injector.destroy();
-    }
-  }
-  /**
-   * Returns the number of attached views.
-   */
-  get viewCount() {
-    return this._views.length;
-  }
-  warnIfDestroyed() {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && this._destroyed) {
-      console.warn(formatRuntimeError(406, "This instance of the `ApplicationRef` has already been destroyed."));
-    }
-  }
-  static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationRef)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ApplicationRef,
-    factory: _ApplicationRef.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function remove(list, el) {
-  const index = list.indexOf(el);
-  if (index > -1) {
-    list.splice(index, 1);
-  }
-}
-function detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, zonelessEnabled) {
-  if (!isFirstPass && !requiresRefreshOrTraversal(lView)) {
-    return;
-  }
-  const mode = isFirstPass && !zonelessEnabled ? (
-    // The first pass is always in Global mode, which includes `CheckAlways` views.
-    0
-  ) : (
-    // Only refresh views with the `RefreshView` flag or views is a changed signal
-    1
-  );
-  detectChangesInternal(lView, notifyErrorHandler, mode);
-}
-function scheduleDelayedTrigger(scheduleFn) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  renderPlaceholder(lView, tNode);
-  if (!shouldTriggerDeferBlock(0, lView)) return;
-  const injector = lView[INJECTOR];
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const cleanupFn = scheduleFn(() => triggerDeferBlock(0, lView, tNode), injector);
-  storeTriggerCleanupFn(0, lDetails, cleanupFn);
-}
-function scheduleDelayedPrefetching(scheduleFn, trigger) {
-  if (true) return;
-  const lView = getLView();
-  const injector = lView[INJECTOR];
-  const tNode = getCurrentTNode();
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    const lDetails = getLDeferBlockDetails(lView, tNode);
-    const prefetch = () => triggerPrefetching(tDetails, lView, tNode);
-    const cleanupFn = scheduleFn(prefetch, injector);
-    storeTriggerCleanupFn(1, lDetails, cleanupFn);
-  }
-}
-function triggerPrefetching(tDetails, lView, tNode) {
-  triggerResourceLoading(tDetails, lView, tNode);
-}
-function triggerResourceLoading(tDetails, lView, tNode) {
-  const injector = lView[INJECTOR];
-  const tView = lView[TVIEW];
-  if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {
-    return tDetails.loadingPromise ?? Promise.resolve();
-  }
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);
-  tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;
-  invokeTriggerCleanupFns(1, lDetails);
-  let dependenciesFn = tDetails.dependencyResolverFn;
-  if (ngDevMode) {
-    const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {
-      optional: true
-    });
-    if (deferDependencyInterceptor) {
-      dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);
-    }
-  }
-  const pendingTasks = injector.get(PendingTasksInternal);
-  const taskId = pendingTasks.add();
-  if (!dependenciesFn) {
-    tDetails.loadingPromise = Promise.resolve().then(() => {
-      tDetails.loadingPromise = null;
-      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
-      pendingTasks.remove(taskId);
-    });
-    return tDetails.loadingPromise;
-  }
-  tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then((results) => {
-    let failed = false;
-    const directiveDefs = [];
-    const pipeDefs = [];
-    for (const result of results) {
-      if (result.status === "fulfilled") {
-        const dependency = result.value;
-        const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);
-        if (directiveDef) {
-          directiveDefs.push(directiveDef);
-        } else {
-          const pipeDef = getPipeDef$1(dependency);
-          if (pipeDef) {
-            pipeDefs.push(pipeDef);
-          }
-        }
-      } else {
-        failed = true;
-        break;
-      }
-    }
-    tDetails.loadingPromise = null;
-    pendingTasks.remove(taskId);
-    if (failed) {
-      tDetails.loadingState = DeferDependenciesLoadingState.FAILED;
-      if (tDetails.errorTmplIndex === null) {
-        const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : "";
-        const error = new RuntimeError(750, ngDevMode && `Loading dependencies for \`@defer\` block failed, but no \`@error\` block was configured${templateLocation}. Consider using the \`@error\` block to render an error state.`);
-        handleError(lView, error);
-      }
-    } else {
-      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;
-      const primaryBlockTView = primaryBlockTNode.tView;
-      if (directiveDefs.length > 0) {
-        primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);
-        const directiveTypes = directiveDefs.map((def) => def.type);
-        const providers = internalImportProvidersFrom(false, ...directiveTypes);
-        tDetails.providers = providers;
-      }
-      if (pipeDefs.length > 0) {
-        primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);
-      }
-    }
-  });
-  return tDetails.loadingPromise;
-}
-function shouldTriggerDeferBlock(triggerType, lView) {
-  if (triggerType === 0 && true && true) {
-    return false;
-  }
-  const injector = lView[INJECTOR];
-  const config = injector.get(DEFER_BLOCK_CONFIG, null, {
-    optional: true
-  });
-  if (config?.behavior === DeferBlockBehavior.Manual) {
-    return false;
-  }
-  return true;
-}
-function triggerDeferBlock(triggerType, lView, tNode) {
-  const tView = lView[TVIEW];
-  const lContainer = lView[tNode.index];
-  ngDevMode && assertLContainer(lContainer);
-  if (!shouldTriggerDeferBlock(triggerType, lView)) return;
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  invokeAllTriggerCleanupFns(lDetails);
-  switch (tDetails.loadingState) {
-    case DeferDependenciesLoadingState.NOT_STARTED:
-      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);
-      triggerResourceLoading(tDetails, lView, tNode);
-      if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {
-        renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
-      }
-      break;
-    case DeferDependenciesLoadingState.IN_PROGRESS:
-      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);
-      renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);
-      break;
-    case DeferDependenciesLoadingState.COMPLETE:
-      ngDevMode && assertDeferredDependenciesLoaded(tDetails);
-      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);
-      break;
-    case DeferDependenciesLoadingState.FAILED:
-      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);
-      break;
-    default:
-      if (ngDevMode) {
-        throwError("Unknown defer block state");
-      }
-  }
-}
-function shouldAttachTrigger(triggerType, lView, tNode) {
-  if (triggerType === 0) {
-    return shouldAttachRegularTrigger(lView, tNode);
-  } else if (triggerType === 2) {
-    return !shouldAttachRegularTrigger(lView, tNode);
-  }
-  return false;
-}
-function shouldAttachRegularTrigger(lView, tNode) {
-  const injector = lView[INJECTOR];
-  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-  const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);
-  const hasHydrateTriggers = tDetails.flags !== null && (tDetails.flags & 1) === 1;
-  if (true) {
-    return !incrementalHydrationEnabled || !hasHydrateTriggers;
-  }
-  const lDetails = getLDeferBlockDetails(lView, tNode);
-  const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;
-  if (hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {
-    return false;
-  }
-  return true;
-}
-function getHydrateTriggers(tView, tNode) {
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  return tDetails.hydrateTriggers ??= /* @__PURE__ */ new Map();
-}
-function ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = declareTemplate(lView, tView, index, null, 0, 0);
-  const injector = lView[INJECTOR];
-  if (tView.firstCreatePass) {
-    performanceMarkFeature("NgDefer");
-    const tDetails = {
-      primaryTmplIndex,
-      loadingTmplIndex: loadingTmplIndex ?? null,
-      placeholderTmplIndex: placeholderTmplIndex ?? null,
-      errorTmplIndex: errorTmplIndex ?? null,
-      placeholderBlockConfig: null,
-      loadingBlockConfig: null,
-      dependencyResolverFn: dependencyResolverFn ?? null,
-      loadingState: DeferDependenciesLoadingState.NOT_STARTED,
-      loadingPromise: null,
-      providers: null,
-      hydrateTriggers: null,
-      prefetchTriggers: null,
-      flags: flags ?? 0
-      /* TDeferDetailsFlags.Default */
-    };
-    enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);
-    setTDeferBlockDetails(tView, adjustedIndex, tDetails);
-  }
-  const lContainer = lView[adjustedIndex];
-  populateDehydratedViewsInLContainer(lContainer, tNode, lView);
-  let ssrBlockState = null;
-  let ssrUniqueId = null;
-  if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {
-    const info = lContainer[DEHYDRATED_VIEWS][0].data;
-    ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;
-    ssrBlockState = info[DEFER_BLOCK_STATE$1];
-  }
-  const lDetails = [
-    null,
-    // NEXT_DEFER_BLOCK_STATE
-    DeferBlockInternalState.Initial,
-    // DEFER_BLOCK_STATE
-    null,
-    // STATE_IS_FROZEN_UNTIL
-    null,
-    // LOADING_AFTER_CLEANUP_FN
-    null,
-    // TRIGGER_CLEANUP_FNS
-    null,
-    // PREFETCH_TRIGGER_CLEANUP_FNS
-    ssrUniqueId,
-    // SSR_UNIQUE_ID
-    ssrBlockState,
-    // SSR_BLOCK_STATE
-    null,
-    // ON_COMPLETE_FNS
-    null
-    // HYDRATE_TRIGGER_CLEANUP_FNS
-  ];
-  setLDeferBlockDetails(lView, adjustedIndex, lDetails);
-  let registry = null;
-  if (ssrUniqueId !== null) {
-    ngDevMode && assertIncrementalHydrationIsConfigured(injector);
-    registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);
-    registry.add(ssrUniqueId, {
-      lView,
-      tNode,
-      lContainer
-    });
-  }
-  const onLViewDestroy = () => {
-    invokeAllTriggerCleanupFns(lDetails);
-    if (ssrUniqueId !== null) {
-      registry?.cleanup([ssrUniqueId]);
-    }
-  };
-  storeTriggerCleanupFn(0, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));
-  storeLViewOnDestroy(lView, onLViewDestroy);
-}
-function ɵɵdeferWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const value = Boolean(rawValue);
-      const lDetails = getLDeferBlockDetails(lView, tNode);
-      const renderedState = lDetails[DEFER_BLOCK_STATE];
-      if (value === false && renderedState === DeferBlockInternalState.Initial) {
-        renderPlaceholder(lView, tNode);
-      } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {
-        triggerDeferBlock(0, lView, tNode);
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function ɵɵdeferPrefetchWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      const value = Boolean(rawValue);
-      const tView = lView[TVIEW];
-      const tNode2 = getSelectedTNode();
-      const tDetails = getTDeferBlockDetails(tView, tNode2);
-      if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-        triggerPrefetching(tDetails, lView, tNode2);
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  }
-}
-function ɵɵdeferHydrateWhen(rawValue) {
-  const lView = getLView();
-  const tNode = getSelectedTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const bindingIndex = nextBindingIndex();
-  const tView = getTView();
-  const hydrateTriggers = getHydrateTriggers(tView, tNode);
-  hydrateTriggers.set(6, null);
-  if (bindingUpdated(lView, bindingIndex, rawValue)) {
-    if (true) {
-      triggerDeferBlock(2, lView, tNode);
-    } else {
-      const injector = lView[INJECTOR];
-      const prevConsumer = setActiveConsumer(null);
-      try {
-        const value = Boolean(rawValue);
-        if (value === true) {
-          const lDetails = getLDeferBlockDetails(lView, tNode);
-          const ssrUniqueId = lDetails[SSR_UNIQUE_ID];
-          ngDevMode && assertSsrIdDefined(ssrUniqueId);
-          triggerHydrationFromBlockName(injector, ssrUniqueId);
-        }
-      } finally {
-        setActiveConsumer(prevConsumer);
-      }
-    }
-  }
-}
-function ɵɵdeferHydrateNever() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(7, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  scheduleDelayedTrigger(onIdle);
-}
-function ɵɵdeferPrefetchOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  scheduleDelayedPrefetching(
-    onIdle,
-    0
-    /* DeferBlockTrigger.Idle */
-  );
-}
-function ɵɵdeferHydrateOnIdle() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(0, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    scheduleDelayedHydrating(onIdle, lView, tNode);
-  }
-}
-function ɵɵdeferOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-  if (tDetails.loadingTmplIndex === null) {
-    renderPlaceholder(lView, tNode);
-  }
-  triggerDeferBlock(0, lView, tNode);
-}
-function ɵɵdeferPrefetchOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    triggerResourceLoading(tDetails, lView, tNode);
-  }
-}
-function ɵɵdeferHydrateOnImmediate() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(1, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    const injector = lView[INJECTOR];
-    const lDetails = getLDeferBlockDetails(lView, tNode);
-    const ssrUniqueId = lDetails[SSR_UNIQUE_ID];
-    ngDevMode && assertSsrIdDefined(ssrUniqueId);
-    triggerHydrationFromBlockName(injector, ssrUniqueId);
-  }
-}
-function ɵɵdeferOnTimer(delay) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  scheduleDelayedTrigger(onTimer(delay));
-}
-function ɵɵdeferPrefetchOnTimer(delay) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  scheduleDelayedPrefetching(
-    onTimer(delay),
-    5
-    /* DeferBlockTrigger.Timer */
-  );
-}
-function ɵɵdeferHydrateOnTimer(delay) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(5, {
-    delay
-  });
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  } else {
-    scheduleDelayedHydrating(onTimer(delay), lView, tNode);
-  }
-}
-function ɵɵdeferOnHover(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (false) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onHover,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onHover,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnHover() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(4, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (false) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onInteraction,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onInteraction,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnInteraction() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(3, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(0, lView, tNode)) return;
-  renderPlaceholder(lView, tNode);
-  if (false) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onViewport,
-      () => triggerDeferBlock(0, lView, tNode),
-      0
-      /* TriggerType.Regular */
-    );
-  }
-}
-function ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(1, lView, tNode)) return;
-  const tView = lView[TVIEW];
-  const tDetails = getTDeferBlockDetails(tView, tNode);
-  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {
-    registerDomTrigger(
-      lView,
-      tNode,
-      triggerIndex,
-      walkUpTimes,
-      onViewport,
-      () => triggerPrefetching(tDetails, lView, tNode),
-      1
-      /* TriggerType.Prefetch */
-    );
-  }
-}
-function ɵɵdeferHydrateOnViewport() {
-  const lView = getLView();
-  const tNode = getCurrentTNode();
-  if (!shouldAttachTrigger(2, lView, tNode)) return;
-  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);
-  hydrateTriggers.set(2, null);
-  if (true) {
-    triggerDeferBlock(2, lView, tNode);
-  }
-}
-function ɵɵattribute(name, value, sanitizer, namespace) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, "attr." + name, bindingIndex);
-  }
-  return ɵɵattribute;
-}
-function interpolationV(lView, values) {
-  ngDevMode && assertLessThan(2, values.length, "should have at least 3 values");
-  ngDevMode && assertEqual(values.length % 2, 1, "should have an odd number of values");
-  let isBindingUpdated = false;
-  let bindingIndex = getBindingIndex();
-  for (let i = 1; i < values.length; i += 2) {
-    isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;
-  }
-  setBindingIndex(bindingIndex);
-  if (!isBindingUpdated) {
-    return NO_CHANGE;
-  }
-  let content = values[0];
-  for (let i = 1; i < values.length; i += 2) {
-    content += renderStringify(values[i]) + values[i + 1];
-  }
-  return content;
-}
-function interpolation1(lView, prefix, v0, suffix) {
-  const different = bindingUpdated(lView, nextBindingIndex(), v0);
-  return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
-}
-function interpolation2(lView, prefix, v0, i0, v1, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated2(lView, bindingIndex, v0, v1);
-  incrementBindingIndex(2);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
-}
-function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);
-  incrementBindingIndex(3);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;
-}
-function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const bindingIndex = getBindingIndex();
-  const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  incrementBindingIndex(4);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;
-}
-function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated(lView, bindingIndex + 4, v4) || different;
-  incrementBindingIndex(5);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;
-}
-function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;
-  incrementBindingIndex(6);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;
-}
-function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;
-  incrementBindingIndex(7);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;
-}
-function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const bindingIndex = getBindingIndex();
-  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
-  different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;
-  incrementBindingIndex(8);
-  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;
-}
-function ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 1, prefix, suffix);
-  }
-  return ɵɵattributeInterpolate1;
-}
-function ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 2, prefix, i0, suffix);
-  }
-  return ɵɵattributeInterpolate2;
-}
-function ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);
-  }
-  return ɵɵattributeInterpolate3;
-}
-function ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
-  }
-  return ɵɵattributeInterpolate4;
-}
-function ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
-  }
-  return ɵɵattributeInterpolate5;
-}
-function ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
-  }
-  return ɵɵattributeInterpolate6;
-}
-function ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
-  }
-  return ɵɵattributeInterpolate7;
-}
-function ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
-    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
-  }
-  return ɵɵattributeInterpolate8;
-}
-function ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {
-  const lView = getLView();
-  const interpolated = interpolationV(lView, values);
-  if (interpolated !== NO_CHANGE) {
-    const tNode = getSelectedTNode();
-    elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);
-    if (ngDevMode) {
-      const interpolationInBetween = [values[0]];
-      for (let i = 2; i < values.length; i += 2) {
-        interpolationInBetween.push(values[i]);
-      }
-      storePropertyBindingMetadata(getTView().data, tNode, "attr." + attrName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
-    }
-  }
-  return ɵɵattributeInterpolateV;
-}
-function toTStylingRange(prev, next) {
-  ngDevMode && assertNumberInRange(
-    prev,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  ngDevMode && assertNumberInRange(
-    next,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return prev << 17 | next << 2;
-}
-function getTStylingRangePrev(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange >> 17 & 32767;
-}
-function getTStylingRangePrevDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 2) == 2;
-}
-function setTStylingRangePrev(tStylingRange, previous) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  ngDevMode && assertNumberInRange(
-    previous,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return tStylingRange & ~4294836224 | previous << 17;
-}
-function setTStylingRangePrevDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange | 2;
-}
-function getTStylingRangeNext(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 131068) >> 2;
-}
-function setTStylingRangeNext(tStylingRange, next) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  ngDevMode && assertNumberInRange(
-    next,
-    0,
-    32767
-    /* StylingRange.UNSIGNED_MASK */
-  );
-  return tStylingRange & ~131068 | //
-  next << 2;
-}
-function getTStylingRangeNextDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return (tStylingRange & 1) === 1;
-}
-function setTStylingRangeNextDuplicate(tStylingRange) {
-  ngDevMode && assertNumber(tStylingRange, "expected number");
-  return tStylingRange | 1;
-}
-function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {
-  ngDevMode && assertFirstUpdatePass(getTView());
-  let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;
-  let tmplHead = getTStylingRangePrev(tBindings);
-  let tmplTail = getTStylingRangeNext(tBindings);
-  tData[index] = tStylingKeyWithStatic;
-  let isKeyDuplicateOfStatic = false;
-  let tStylingKey;
-  if (Array.isArray(tStylingKeyWithStatic)) {
-    const staticKeyValueArray = tStylingKeyWithStatic;
-    tStylingKey = staticKeyValueArray[1];
-    if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {
-      isKeyDuplicateOfStatic = true;
-    }
-  } else {
-    tStylingKey = tStylingKeyWithStatic;
-  }
-  if (isHostBinding) {
-    const hasTemplateBindings = tmplTail !== 0;
-    if (hasTemplateBindings) {
-      const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);
-      tData[index + 1] = toTStylingRange(previousNode, tmplHead);
-      if (previousNode !== 0) {
-        tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);
-      }
-      tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);
-    } else {
-      tData[index + 1] = toTStylingRange(tmplHead, 0);
-      if (tmplHead !== 0) {
-        tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);
-      }
-      tmplHead = index;
-    }
-  } else {
-    tData[index + 1] = toTStylingRange(tmplTail, 0);
-    ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, "Adding template bindings after hostBindings is not allowed.");
-    if (tmplHead === 0) {
-      tmplHead = index;
-    } else {
-      tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);
-    }
-    tmplTail = index;
-  }
-  if (isKeyDuplicateOfStatic) {
-    tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
-  }
-  markDuplicates(tData, tStylingKey, index, true);
-  markDuplicates(tData, tStylingKey, index, false);
-  markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
-  tBindings = toTStylingRange(tmplHead, tmplTail);
-  if (isClassBinding) {
-    tNode.classBindings = tBindings;
-  } else {
-    tNode.styleBindings = tBindings;
-  }
-}
-function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {
-  const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;
-  if (residual != null && typeof tStylingKey == "string" && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {
-    tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);
-  }
-}
-function markDuplicates(tData, tStylingKey, index, isPrevDir) {
-  const tStylingAtIndex = tData[index + 1];
-  const isMap = tStylingKey === null;
-  let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
-  let foundDuplicate = false;
-  while (cursor !== 0 && (foundDuplicate === false || isMap)) {
-    ngDevMode && assertIndexInRange(tData, cursor);
-    const tStylingValueAtCursor = tData[cursor];
-    const tStyleRangeAtCursor = tData[cursor + 1];
-    if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {
-      foundDuplicate = true;
-      tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);
-    }
-    cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);
-  }
-  if (foundDuplicate) {
-    tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);
-  }
-}
-function isStylingMatch(tStylingKeyCursor, tStylingKey) {
-  ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, "Expected that 'tStylingKey' has been unwrapped");
-  if (tStylingKeyCursor === null || // If the cursor is `null` it means that we have map at that
-  // location so we must assume that we have a match.
-  tStylingKey == null || // If `tStylingKey` is `null` then it is a map therefor assume that it
-  // contains a match.
-  (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey) {
-    return true;
-  } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === "string") {
-    return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0;
-  }
-  return false;
-}
-var parserState = {
-  textEnd: 0,
-  key: 0,
-  keyEnd: 0,
-  value: 0,
-  valueEnd: 0
-};
-function getLastParsedKey(text) {
-  return text.substring(parserState.key, parserState.keyEnd);
-}
-function getLastParsedValue(text) {
-  return text.substring(parserState.value, parserState.valueEnd);
-}
-function parseClassName(text) {
-  resetParserState(text);
-  return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));
-}
-function parseClassNameNext(text, index) {
-  const end = parserState.textEnd;
-  if (end === index) {
-    return -1;
-  }
-  index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);
-  return consumeWhitespace(text, index, end);
-}
-function parseStyle(text) {
-  resetParserState(text);
-  return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));
-}
-function parseStyleNext(text, startIndex) {
-  const end = parserState.textEnd;
-  let index = parserState.key = consumeWhitespace(text, startIndex, end);
-  if (end === index) {
-    return -1;
-  }
-  index = parserState.keyEnd = consumeStyleKey(text, index, end);
-  index = consumeSeparator(
-    text,
-    index,
-    end,
-    58
-    /* CharCode.COLON */
-  );
-  index = parserState.value = consumeWhitespace(text, index, end);
-  index = parserState.valueEnd = consumeStyleValue(text, index, end);
-  return consumeSeparator(
-    text,
-    index,
-    end,
-    59
-    /* CharCode.SEMI_COLON */
-  );
-}
-function resetParserState(text) {
-  parserState.key = 0;
-  parserState.keyEnd = 0;
-  parserState.value = 0;
-  parserState.valueEnd = 0;
-  parserState.textEnd = text.length;
-}
-function consumeWhitespace(text, startIndex, endIndex) {
-  while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeClassToken(text, startIndex, endIndex) {
-  while (startIndex < endIndex && text.charCodeAt(startIndex) > 32) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeStyleKey(text, startIndex, endIndex) {
-  let ch;
-  while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 || ch === 95 || (ch & -33) >= 65 && (ch & -33) <= 90 || ch >= 48 && ch <= 57)) {
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeSeparator(text, startIndex, endIndex, separator) {
-  startIndex = consumeWhitespace(text, startIndex, endIndex);
-  if (startIndex < endIndex) {
-    if (ngDevMode && text.charCodeAt(startIndex) !== separator) {
-      malformedStyleError(text, String.fromCharCode(separator), startIndex);
-    }
-    startIndex++;
-  }
-  return startIndex;
-}
-function consumeStyleValue(text, startIndex, endIndex) {
-  let ch1 = -1;
-  let ch2 = -1;
-  let ch3 = -1;
-  let i = startIndex;
-  let lastChIndex = i;
-  while (i < endIndex) {
-    const ch = text.charCodeAt(i++);
-    if (ch === 59) {
-      return lastChIndex;
-    } else if (ch === 34 || ch === 39) {
-      lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);
-    } else if (startIndex === i - 4 && // We have seen only 4 characters so far "URL(" (Ignore "foo_URL()")
-    ch3 === 85 && ch2 === 82 && ch1 === 76 && ch === 40) {
-      lastChIndex = i = consumeQuotedText(text, 41, i, endIndex);
-    } else if (ch > 32) {
-      lastChIndex = i;
-    }
-    ch3 = ch2;
-    ch2 = ch1;
-    ch1 = ch & -33;
-  }
-  return lastChIndex;
-}
-function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
-  let ch1 = -1;
-  let index = startIndex;
-  while (index < endIndex) {
-    const ch = text.charCodeAt(index++);
-    if (ch == quoteCharCode && ch1 !== 92) {
-      return index;
-    }
-    if (ch == 92 && ch1 === 92) {
-      ch1 = 0;
-    } else {
-      ch1 = ch;
-    }
-  }
-  throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();
-}
-function malformedStyleError(text, expecting, index) {
-  ngDevMode && assertEqual(typeof text === "string", true, "String expected here");
-  throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + "[>>" + text.substring(index, index + 1) + "<<]" + text.slice(index + 1) + `'. Expecting '${expecting}'.`);
-}
-function ɵɵproperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵproperty;
-}
-function setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {
-  const inputs = tNode.inputs;
-  const property = isClassBased ? "class" : "style";
-  setInputsForProperty(tView, lView, inputs[property], property, value);
-}
-function ɵɵstyleProp(prop, value, suffix) {
-  checkStylingProperty(prop, value, suffix, false);
-  return ɵɵstyleProp;
-}
-function ɵɵclassProp(className, value) {
-  checkStylingProperty(className, value, null, true);
-  return ɵɵclassProp;
-}
-function ɵɵstyleMap(styles) {
-  checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);
-}
-function styleStringParser(keyValueArray, text) {
-  for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {
-    styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));
-  }
-}
-function ɵɵclassMap(classes) {
-  checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);
-}
-function classStringParser(keyValueArray, text) {
-  for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
-    keyValueArraySet(keyValueArray, getLastParsedKey(text), true);
-  }
-}
-function checkStylingProperty(prop, value, suffix, isClassBased) {
-  const lView = getLView();
-  const tView = getTView();
-  const bindingIndex = incrementBindingIndex(2);
-  if (tView.firstUpdatePass) {
-    stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);
-  }
-  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
-    const tNode = tView.data[getSelectedIndex()];
-    updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);
-  }
-}
-function checkStylingMap(keyValueArraySet2, stringParser, value, isClassBased) {
-  const tView = getTView();
-  const bindingIndex = incrementBindingIndex(2);
-  if (tView.firstUpdatePass) {
-    stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);
-  }
-  const lView = getLView();
-  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
-    const tNode = tView.data[getSelectedIndex()];
-    if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {
-      if (ngDevMode) {
-        const tStylingKey = tView.data[bindingIndex];
-        assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, "Styling linked list shadow input should be marked as 'false'");
-      }
-      let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;
-      ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(";"), true, "Expecting static portion to end with ';'");
-      if (staticPrefix !== null) {
-        value = concatStringsWithSpace(staticPrefix, value ? value : "");
-      }
-      setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);
-    } else {
-      updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet2, stringParser, value), isClassBased, bindingIndex);
-    }
-  }
-}
-function isInHostBindings(tView, bindingIndex) {
-  return bindingIndex >= tView.expandoStartIndex;
-}
-function stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {
-  ngDevMode && assertFirstUpdatePass(tView);
-  const tData = tView.data;
-  if (tData[bindingIndex + 1] === null) {
-    const tNode = tData[getSelectedIndex()];
-    ngDevMode && assertDefined(tNode, "TNode expected");
-    const isHostBindings = isInHostBindings(tView, bindingIndex);
-    if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {
-      tStylingKey = false;
-    }
-    tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);
-    insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);
-  }
-}
-function wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {
-  const hostDirectiveDef = getCurrentDirectiveDef(tData);
-  let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
-  if (hostDirectiveDef === null) {
-    const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;
-    if (isFirstStylingInstructionInTemplate) {
-      stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);
-      stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);
-      residual = null;
-    }
-  } else {
-    const directiveStylingLast = tNode.directiveStylingLast;
-    const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;
-    if (isFirstStylingInstructionInHostBinding) {
-      stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);
-      if (residual === null) {
-        let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);
-        if (templateStylingKey !== void 0 && Array.isArray(templateStylingKey)) {
-          templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1], isClassBased);
-          templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);
-          setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);
-        }
-      } else {
-        residual = collectResidual(tData, tNode, isClassBased);
-      }
-    }
-  }
-  if (residual !== void 0) {
-    isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;
-  }
-  return stylingKey;
-}
-function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
-  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
-  if (getTStylingRangeNext(bindings) === 0) {
-    return void 0;
-  }
-  return tData[getTStylingRangePrev(bindings)];
-}
-function setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {
-  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
-  ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, "Expecting to have at least one template styling binding.");
-  tData[getTStylingRangePrev(bindings)] = tStylingKey;
-}
-function collectResidual(tData, tNode, isClassBased) {
-  let residual = void 0;
-  const directiveEnd = tNode.directiveEnd;
-  ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, "By the time this function gets called at least one hostBindings-node styling instruction must have executed.");
-  for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {
-    const attrs = tData[i].hostAttrs;
-    residual = collectStylingFromTAttrs(residual, attrs, isClassBased);
-  }
-  return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);
-}
-function collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {
-  let currentDirective = null;
-  const directiveEnd = tNode.directiveEnd;
-  let directiveStylingLast = tNode.directiveStylingLast;
-  if (directiveStylingLast === -1) {
-    directiveStylingLast = tNode.directiveStart;
-  } else {
-    directiveStylingLast++;
-  }
-  while (directiveStylingLast < directiveEnd) {
-    currentDirective = tData[directiveStylingLast];
-    ngDevMode && assertDefined(currentDirective, "expected to be defined");
-    stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);
-    if (currentDirective === hostDirectiveDef) break;
-    directiveStylingLast++;
-  }
-  if (hostDirectiveDef !== null) {
-    tNode.directiveStylingLast = directiveStylingLast;
-  }
-  return stylingKey;
-}
-function collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {
-  const desiredMarker = isClassBased ? 1 : 2;
-  let currentMarker = -1;
-  if (attrs !== null) {
-    for (let i = 0; i < attrs.length; i++) {
-      const item = attrs[i];
-      if (typeof item === "number") {
-        currentMarker = item;
-      } else {
-        if (currentMarker === desiredMarker) {
-          if (!Array.isArray(stylingKey)) {
-            stylingKey = stylingKey === void 0 ? [] : ["", stylingKey];
-          }
-          keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);
-        }
-      }
-    }
-  }
-  return stylingKey === void 0 ? null : stylingKey;
-}
-function toStylingKeyValueArray(keyValueArraySet2, stringParser, value) {
-  if (value == null || value === "") return EMPTY_ARRAY;
-  const styleKeyValueArray = [];
-  const unwrappedValue = unwrapSafeValue(value);
-  if (Array.isArray(unwrappedValue)) {
-    for (let i = 0; i < unwrappedValue.length; i++) {
-      keyValueArraySet2(styleKeyValueArray, unwrappedValue[i], true);
-    }
-  } else if (typeof unwrappedValue === "object") {
-    for (const key in unwrappedValue) {
-      if (unwrappedValue.hasOwnProperty(key)) {
-        keyValueArraySet2(styleKeyValueArray, key, unwrappedValue[key]);
-      }
-    }
-  } else if (typeof unwrappedValue === "string") {
-    stringParser(styleKeyValueArray, unwrappedValue);
-  } else {
-    ngDevMode && throwError("Unsupported styling type " + typeof unwrappedValue + ": " + unwrappedValue);
-  }
-  return styleKeyValueArray;
-}
-function styleKeyValueArraySet(keyValueArray, key, value) {
-  keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));
-}
-function classKeyValueArraySet(keyValueArray, key, value) {
-  const stringKey = String(key);
-  if (stringKey !== "" && !stringKey.includes(" ")) {
-    keyValueArraySet(keyValueArray, stringKey, value);
-  }
-}
-function updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {
-  if (oldKeyValueArray === NO_CHANGE) {
-    oldKeyValueArray = EMPTY_ARRAY;
-  }
-  let oldIndex = 0;
-  let newIndex = 0;
-  let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;
-  let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;
-  while (oldKey !== null || newKey !== null) {
-    ngDevMode && assertLessThan(oldIndex, 999, "Are we stuck in infinite loop?");
-    ngDevMode && assertLessThan(newIndex, 999, "Are we stuck in infinite loop?");
-    const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : void 0;
-    const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : void 0;
-    let setKey = null;
-    let setValue = void 0;
-    if (oldKey === newKey) {
-      oldIndex += 2;
-      newIndex += 2;
-      if (oldValue !== newValue) {
-        setKey = newKey;
-        setValue = newValue;
-      }
-    } else if (newKey === null || oldKey !== null && oldKey < newKey) {
-      oldIndex += 2;
-      setKey = oldKey;
-    } else {
-      ngDevMode && assertDefined(newKey, "Expecting to have a valid key");
-      newIndex += 2;
-      setKey = newKey;
-      setValue = newValue;
-    }
-    if (setKey !== null) {
-      updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);
-    }
-    oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;
-    newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;
-  }
-}
-function updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {
-  if (!(tNode.type & 3)) {
-    return;
-  }
-  const tData = tView.data;
-  const tRange = tData[bindingIndex + 1];
-  const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : void 0;
-  if (!isStylingValuePresent(higherPriorityValue)) {
-    if (!isStylingValuePresent(value)) {
-      if (getTStylingRangePrevDuplicate(tRange)) {
-        value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);
-      }
-    }
-    const rNode = getNativeByIndex(getSelectedIndex(), lView);
-    applyStyling(renderer, isClassBased, rNode, prop, value);
-  }
-}
-function findStylingValue(tData, tNode, lView, prop, index, isClassBased) {
-  const isPrevDirection = tNode === null;
-  let value = void 0;
-  while (index > 0) {
-    const rawKey = tData[index];
-    const containsStatics = Array.isArray(rawKey);
-    const key = containsStatics ? rawKey[1] : rawKey;
-    const isStylingMap = key === null;
-    let valueAtLViewIndex = lView[index + 1];
-    if (valueAtLViewIndex === NO_CHANGE) {
-      valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : void 0;
-    }
-    let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : void 0;
-    if (containsStatics && !isStylingValuePresent(currentValue)) {
-      currentValue = keyValueArrayGet(rawKey, prop);
-    }
-    if (isStylingValuePresent(currentValue)) {
-      value = currentValue;
-      if (isPrevDirection) {
-        return value;
-      }
-    }
-    const tRange = tData[index + 1];
-    index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);
-  }
-  if (tNode !== null) {
-    let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;
-    if (residual != null) {
-      value = keyValueArrayGet(residual, prop);
-    }
-  }
-  return value;
-}
-function isStylingValuePresent(value) {
-  return value !== void 0;
-}
-function normalizeSuffix(value, suffix) {
-  if (value == null || value === "") {
-  } else if (typeof suffix === "string") {
-    value = value + suffix;
-  } else if (typeof value === "object") {
-    value = stringify(unwrapSafeValue(value));
-  }
-  return value;
-}
-function hasStylingInputShadow(tNode, isClassBased) {
-  return (tNode.flags & (isClassBased ? 8 : 16)) !== 0;
-}
-function ɵɵclassMapInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵclassMapInterpolateV(values) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
-}
-function ɵɵcomponentInstance() {
-  const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];
-  ngDevMode && assertDefined(instance, "Expected component instance to be defined");
-  return instance;
-}
-var LiveCollection = class {
-  destroy(item) {
-  }
-  updateValue(index, value) {
-  }
-  // operations below could be implemented on top of the operations defined so far, but having
-  // them explicitly allow clear expression of intent and potentially more performant
-  // implementations
-  swap(index1, index2) {
-    const startIdx = Math.min(index1, index2);
-    const endIdx = Math.max(index1, index2);
-    const endItem = this.detach(endIdx);
-    if (endIdx - startIdx > 1) {
-      const startItem = this.detach(startIdx);
-      this.attach(startIdx, endItem);
-      this.attach(endIdx, startItem);
-    } else {
-      this.attach(startIdx, endItem);
-    }
-  }
-  move(prevIndex, newIdx) {
-    this.attach(newIdx, this.detach(prevIndex));
-  }
-};
-function valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {
-  if (liveIdx === newIdx && Object.is(liveValue, newValue)) {
-    return 1;
-  } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {
-    return -1;
-  }
-  return 0;
-}
-function recordDuplicateKeys(keyToIdx, key, idx) {
-  const idxSoFar = keyToIdx.get(key);
-  if (idxSoFar !== void 0) {
-    idxSoFar.add(idx);
-  } else {
-    keyToIdx.set(key, /* @__PURE__ */ new Set([idx]));
-  }
-}
-function reconcile(liveCollection, newCollection, trackByFn) {
-  let detachedItems = void 0;
-  let liveKeysInTheFuture = void 0;
-  let liveStartIdx = 0;
-  let liveEndIdx = liveCollection.length - 1;
-  const duplicateKeys = ngDevMode ? /* @__PURE__ */ new Map() : void 0;
-  if (Array.isArray(newCollection)) {
-    let newEndIdx = newCollection.length - 1;
-    while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {
-      const liveStartValue = liveCollection.at(liveStartIdx);
-      const newStartValue = newCollection[liveStartIdx];
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);
-      }
-      const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);
-      if (isStartMatching !== 0) {
-        if (isStartMatching < 0) {
-          liveCollection.updateValue(liveStartIdx, newStartValue);
-        }
-        liveStartIdx++;
-        continue;
-      }
-      const liveEndValue = liveCollection.at(liveEndIdx);
-      const newEndValue = newCollection[newEndIdx];
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);
-      }
-      const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);
-      if (isEndMatching !== 0) {
-        if (isEndMatching < 0) {
-          liveCollection.updateValue(liveEndIdx, newEndValue);
-        }
-        liveEndIdx--;
-        newEndIdx--;
-        continue;
-      }
-      const liveStartKey = trackByFn(liveStartIdx, liveStartValue);
-      const liveEndKey = trackByFn(liveEndIdx, liveEndValue);
-      const newStartKey = trackByFn(liveStartIdx, newStartValue);
-      if (Object.is(newStartKey, liveEndKey)) {
-        const newEndKey = trackByFn(newEndIdx, newEndValue);
-        if (Object.is(newEndKey, liveStartKey)) {
-          liveCollection.swap(liveStartIdx, liveEndIdx);
-          liveCollection.updateValue(liveEndIdx, newEndValue);
-          newEndIdx--;
-          liveEndIdx--;
-        } else {
-          liveCollection.move(liveEndIdx, liveStartIdx);
-        }
-        liveCollection.updateValue(liveStartIdx, newStartValue);
-        liveStartIdx++;
-        continue;
-      }
-      detachedItems ??= new UniqueValueMultiKeyMap();
-      liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);
-      if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {
-        liveCollection.updateValue(liveStartIdx, newStartValue);
-        liveStartIdx++;
-        liveEndIdx++;
-      } else if (!liveKeysInTheFuture.has(newStartKey)) {
-        const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);
-        liveCollection.attach(liveStartIdx, newItem);
-        liveStartIdx++;
-        liveEndIdx++;
-      } else {
-        detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));
-        liveEndIdx--;
-      }
-    }
-    while (liveStartIdx <= newEndIdx) {
-      createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);
-      liveStartIdx++;
-    }
-  } else if (newCollection != null) {
-    const newCollectionIterator = newCollection[Symbol.iterator]();
-    let newIterationResult = newCollectionIterator.next();
-    while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {
-      const liveValue = liveCollection.at(liveStartIdx);
-      const newValue = newIterationResult.value;
-      if (ngDevMode) {
-        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);
-      }
-      const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);
-      if (isStartMatching !== 0) {
-        if (isStartMatching < 0) {
-          liveCollection.updateValue(liveStartIdx, newValue);
-        }
-        liveStartIdx++;
-        newIterationResult = newCollectionIterator.next();
-      } else {
-        detachedItems ??= new UniqueValueMultiKeyMap();
-        liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);
-        const newKey = trackByFn(liveStartIdx, newValue);
-        if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {
-          liveCollection.updateValue(liveStartIdx, newValue);
-          liveStartIdx++;
-          liveEndIdx++;
-          newIterationResult = newCollectionIterator.next();
-        } else if (!liveKeysInTheFuture.has(newKey)) {
-          liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));
-          liveStartIdx++;
-          liveEndIdx++;
-          newIterationResult = newCollectionIterator.next();
-        } else {
-          const liveKey = trackByFn(liveStartIdx, liveValue);
-          detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));
-          liveEndIdx--;
-        }
-      }
-    }
-    while (!newIterationResult.done) {
-      createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);
-      newIterationResult = newCollectionIterator.next();
-    }
-  }
-  while (liveStartIdx <= liveEndIdx) {
-    liveCollection.destroy(liveCollection.detach(liveEndIdx--));
-  }
-  detachedItems?.forEach((item) => {
-    liveCollection.destroy(item);
-  });
-  if (ngDevMode) {
-    let duplicatedKeysMsg = [];
-    for (const [key, idxSet] of duplicateKeys) {
-      if (idxSet.size > 1) {
-        const idx = [...idxSet].sort((a, b) => a - b);
-        for (let i = 1; i < idx.length; i++) {
-          duplicatedKeysMsg.push(`key "${stringifyForError(key)}" at index "${idx[i - 1]}" and "${idx[i]}"`);
-        }
-      }
-    }
-    if (duplicatedKeysMsg.length > 0) {
-      const message = formatRuntimeError(-955, "The provided track expression resulted in duplicated keys for a given collection. Adjust the tracking expression such that it uniquely identifies all the items in the collection. Duplicated keys were: \n" + duplicatedKeysMsg.join(", \n") + ".");
-      console.warn(message);
-    }
-  }
-}
-function attachPreviouslyDetached(prevCollection, detachedItems, index, key) {
-  if (detachedItems !== void 0 && detachedItems.has(key)) {
-    prevCollection.attach(index, detachedItems.get(key));
-    detachedItems.delete(key);
-    return true;
-  }
-  return false;
-}
-function createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {
-  if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {
-    const newItem = liveCollection.create(index, value);
-    liveCollection.attach(index, newItem);
-  } else {
-    liveCollection.updateValue(index, value);
-  }
-}
-function initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {
-  const keys = /* @__PURE__ */ new Set();
-  for (let i = start; i <= end; i++) {
-    keys.add(trackByFn(i, liveCollection.at(i)));
-  }
-  return keys;
-}
-var UniqueValueMultiKeyMap = class {
-  // A map from a key to the first value corresponding to this key.
-  kvMap = /* @__PURE__ */ new Map();
-  // A map that acts as a linked list of values - each value maps to the next value in this "linked
-  // list" (this only works if values are unique). Allocated lazily to avoid memory consumption when
-  // there are no duplicated values.
-  _vMap = void 0;
-  has(key) {
-    return this.kvMap.has(key);
-  }
-  delete(key) {
-    if (!this.has(key)) return false;
-    const value = this.kvMap.get(key);
-    if (this._vMap !== void 0 && this._vMap.has(value)) {
-      this.kvMap.set(key, this._vMap.get(value));
-      this._vMap.delete(value);
-    } else {
-      this.kvMap.delete(key);
-    }
-    return true;
-  }
-  get(key) {
-    return this.kvMap.get(key);
-  }
-  set(key, value) {
-    if (this.kvMap.has(key)) {
-      let prevValue = this.kvMap.get(key);
-      if (ngDevMode && prevValue === value) {
-        throw new Error(`Detected a duplicated value ${value} for the key ${key}`);
-      }
-      if (this._vMap === void 0) {
-        this._vMap = /* @__PURE__ */ new Map();
-      }
-      const vMap = this._vMap;
-      while (vMap.has(prevValue)) {
-        prevValue = vMap.get(prevValue);
-      }
-      vMap.set(prevValue, value);
-    } else {
-      this.kvMap.set(key, value);
-    }
-  }
-  forEach(cb) {
-    for (let [key, value] of this.kvMap) {
-      cb(value, key);
-      if (this._vMap !== void 0) {
-        const vMap = this._vMap;
-        while (vMap.has(value)) {
-          value = vMap.get(value);
-          cb(value, key);
-        }
-      }
-    }
-  }
-};
-function ɵɵconditional(matchingTemplateIndex, contextValue) {
-  performanceMarkFeature("NgControlFlow");
-  const hostLView = getLView();
-  const bindingIndex = nextBindingIndex();
-  const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;
-  const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : void 0;
-  const viewInContainerIdx = 0;
-  if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
-    const prevConsumer = setActiveConsumer(null);
-    try {
-      if (prevContainer !== void 0) {
-        removeLViewFromLContainer(prevContainer, viewInContainerIdx);
-      }
-      if (matchingTemplateIndex !== -1) {
-        const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;
-        const nextContainer = getLContainer(hostLView, nextLContainerIndex);
-        const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);
-        const dehydratedView = findMatchingDehydratedView(nextContainer, templateTNode.tView.ssrId);
-        const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {
-          dehydratedView
-        });
-        addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));
-      }
-    } finally {
-      setActiveConsumer(prevConsumer);
-    }
-  } else if (prevContainer !== void 0) {
-    const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);
-    if (lView !== void 0) {
-      lView[CONTEXT] = contextValue;
-    }
-  }
-}
-var RepeaterContext = class {
-  lContainer;
-  $implicit;
-  $index;
-  constructor(lContainer, $implicit, $index) {
-    this.lContainer = lContainer;
-    this.$implicit = $implicit;
-    this.$index = $index;
-  }
-  get $count() {
-    return this.lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-};
-function ɵɵrepeaterTrackByIndex(index) {
-  return index;
-}
-function ɵɵrepeaterTrackByIdentity(_, value) {
-  return value;
-}
-var RepeaterMetadata = class {
-  hasEmptyBlock;
-  trackByFn;
-  liveCollection;
-  constructor(hasEmptyBlock, trackByFn, liveCollection) {
-    this.hasEmptyBlock = hasEmptyBlock;
-    this.trackByFn = trackByFn;
-    this.liveCollection = liveCollection;
-  }
-};
-function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {
-  performanceMarkFeature("NgControlFlow");
-  ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);
-  const lView = getLView();
-  const tView = getTView();
-  const hasEmptyBlock = emptyTemplateFn !== void 0;
-  const hostLView = getLView();
-  const boundTrackBy = trackByUsesComponentInstance ? (
-    // We only want to bind when necessary, because it produces a
-    // new function. For pure functions it's not necessary.
-    trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT])
-  ) : trackByFn;
-  const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);
-  hostLView[HEADER_OFFSET + index] = metadata;
-  declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex));
-  if (hasEmptyBlock) {
-    ngDevMode && assertDefined(emptyDecls, "Missing number of declarations for the empty repeater block.");
-    ngDevMode && assertDefined(emptyVars, "Missing number of bindings for the empty repeater block.");
-    declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex));
-  }
-}
-function isViewExpensiveToRecreate(lView) {
-  return lView.length - HEADER_OFFSET > 2;
-}
-var OperationsCounter = class {
-  created = 0;
-  destroyed = 0;
-  reset() {
-    this.created = 0;
-    this.destroyed = 0;
-  }
-  recordCreate() {
-    this.created++;
-  }
-  recordDestroy() {
-    this.destroyed++;
-  }
-  /**
-   * A method indicating if the entire collection was re-created as part of the reconciliation pass.
-   * Used to warn developers about the usage of a tracking function that might result in excessive
-   * amount of view creation / destroy operations.
-   *
-   * @returns boolean value indicating if a live collection was re-created
-   */
-  wasReCreated(collectionLen) {
-    return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;
-  }
-};
-var LiveCollectionLContainerImpl = class extends LiveCollection {
-  lContainer;
-  hostLView;
-  templateTNode;
-  operationsCounter = ngDevMode ? new OperationsCounter() : void 0;
-  /**
-   Property indicating if indexes in the repeater context need to be updated following the live
-   collection changes. Index updates are necessary if and only if views are inserted / removed in
-   the middle of LContainer. Adds and removals at the end don't require index updates.
-  */
-  needsIndexUpdate = false;
-  constructor(lContainer, hostLView, templateTNode) {
-    super();
-    this.lContainer = lContainer;
-    this.hostLView = hostLView;
-    this.templateTNode = templateTNode;
-  }
-  get length() {
-    return this.lContainer.length - CONTAINER_HEADER_OFFSET;
-  }
-  at(index) {
-    return this.getLView(index)[CONTEXT].$implicit;
-  }
-  attach(index, lView) {
-    const dehydratedView = lView[HYDRATION];
-    this.needsIndexUpdate ||= index !== this.length;
-    addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));
-  }
-  detach(index) {
-    this.needsIndexUpdate ||= index !== this.length - 1;
-    return detachExistingView(this.lContainer, index);
-  }
-  create(index, value) {
-    const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);
-    const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {
-      dehydratedView
-    });
-    this.operationsCounter?.recordCreate();
-    return embeddedLView;
-  }
-  destroy(lView) {
-    destroyLView(lView[TVIEW], lView);
-    this.operationsCounter?.recordDestroy();
-  }
-  updateValue(index, value) {
-    this.getLView(index)[CONTEXT].$implicit = value;
-  }
-  reset() {
-    this.needsIndexUpdate = false;
-    this.operationsCounter?.reset();
-  }
-  updateIndexes() {
-    if (this.needsIndexUpdate) {
-      for (let i = 0; i < this.length; i++) {
-        this.getLView(i)[CONTEXT].$index = i;
-      }
-    }
-  }
-  getLView(index) {
-    return getExistingLViewFromLContainer(this.lContainer, index);
-  }
-};
-function ɵɵrepeater(collection) {
-  const prevConsumer = setActiveConsumer(null);
-  const metadataSlotIdx = getSelectedIndex();
-  try {
-    const hostLView = getLView();
-    const hostTView = hostLView[TVIEW];
-    const metadata = hostLView[metadataSlotIdx];
-    const containerIndex = metadataSlotIdx + 1;
-    const lContainer = getLContainer(hostLView, containerIndex);
-    if (metadata.liveCollection === void 0) {
-      const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);
-      metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);
-    } else {
-      metadata.liveCollection.reset();
-    }
-    const liveCollection = metadata.liveCollection;
-    reconcile(liveCollection, collection, metadata.trackByFn);
-    if (ngDevMode && metadata.trackByFn === ɵɵrepeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {
-      const message = formatRuntimeError(-956, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. Please review the "track expression" and make sure that it uniquely identifies items in a collection.`);
-      console.warn(message);
-    }
-    liveCollection.updateIndexes();
-    if (metadata.hasEmptyBlock) {
-      const bindingIndex = nextBindingIndex();
-      const isCollectionEmpty = liveCollection.length === 0;
-      if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {
-        const emptyTemplateIndex = metadataSlotIdx + 2;
-        const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);
-        if (isCollectionEmpty) {
-          const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);
-          const dehydratedView = findMatchingDehydratedView(lContainerForEmpty, emptyTemplateTNode.tView.ssrId);
-          const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, void 0, {
-            dehydratedView
-          });
-          addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));
-        } else {
-          removeLViewFromLContainer(lContainerForEmpty, 0);
-        }
-      }
-    }
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-function getLContainer(lView, index) {
-  const lContainer = lView[index];
-  ngDevMode && assertLContainer(lContainer);
-  return lContainer;
-}
-function detachExistingView(lContainer, index) {
-  const existingLView = detachView(lContainer, index);
-  ngDevMode && assertLView(existingLView);
-  return existingLView;
-}
-function getExistingLViewFromLContainer(lContainer, index) {
-  const existingLView = getLViewFromLContainer(lContainer, index);
-  ngDevMode && assertLView(existingLView);
-  return existingLView;
-}
-function getExistingTNode(tView, index) {
-  const tNode = getTNode(tView, index);
-  ngDevMode && assertTNode(tNode);
-  return tNode;
-}
-function elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {
-  ngDevMode && assertFirstCreatePass(tView);
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const attrs = getConstant(tViewConsts, attrsIndex);
-  const tNode = getOrCreateTNode(tView, index, 2, name, attrs);
-  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
-  if (tNode.attrs !== null) {
-    computeStaticStyling(tNode, tNode.attrs, false);
-  }
-  if (tNode.mergedAttrs !== null) {
-    computeStaticStyling(tNode, tNode.mergedAttrs, true);
-  }
-  if (tView.queries !== null) {
-    tView.queries.elementStart(tView, tNode);
-  }
-  return tNode;
-}
-function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = HEADER_OFFSET + index;
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "elements should be created before any bindings");
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  const renderer = lView[RENDERER];
-  const tNode = tView.firstCreatePass ? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
-  const native = _locateOrCreateElementNode(tView, lView, tNode, renderer, name, index);
-  lView[adjustedIndex] = native;
-  const hasDirectives = isDirectiveHost(tNode);
-  if (ngDevMode && tView.firstCreatePass) {
-    validateElementIsKnown(native, lView, tNode.value, tView.schemas, hasDirectives);
-  }
-  setCurrentTNode(tNode, true);
-  setupStaticAttributes(renderer, native, tNode);
-  if (!isDetachedByI18n(tNode) && wasLastNodeCreated()) {
-    appendChild(tView, lView, native, tNode);
-  }
-  if (getElementDepthCount() === 0) {
-    attachPatchData(native, lView);
-  }
-  increaseElementDepthCount();
-  if (hasDirectives) {
-    createDirectivesInstances(tView, lView, tNode);
-    executeContentQueries(tView, tNode, lView);
-  }
-  if (localRefsIndex !== null) {
-    saveResolvedLocalsInData(lView, tNode);
-  }
-  return ɵɵelementStart;
-}
-function ɵɵelementEnd() {
-  let currentTNode = getCurrentTNode();
-  ngDevMode && assertDefined(currentTNode, "No parent node to close.");
-  if (isCurrentTNodeParent()) {
-    setCurrentTNodeAsNotParent();
-  } else {
-    ngDevMode && assertHasParent(getCurrentTNode());
-    currentTNode = currentTNode.parent;
-    setCurrentTNode(currentTNode, false);
-  }
-  const tNode = currentTNode;
-  ngDevMode && assertTNodeType(
-    tNode,
-    3
-    /* TNodeType.AnyRNode */
-  );
-  if (isSkipHydrationRootTNode(tNode)) {
-    leaveSkipHydrationBlock();
-  }
-  decreaseElementDepthCount();
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    registerPostOrderHooks(tView, currentTNode);
-    if (isContentQueryHost(currentTNode)) {
-      tView.queries.elementEnd(currentTNode);
-    }
-  }
-  if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {
-    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);
-  }
-  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
-    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
-  }
-  return ɵɵelementEnd;
-}
-function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
-  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
-  ɵɵelementEnd();
-  return ɵɵelement;
-}
-var _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) => {
-  lastNodeWasCreated(true);
-  return createElementNode(renderer, name, getNamespace$1());
-};
-function locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createElementNode(renderer, name, getNamespace$1());
-  }
-  const native = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);
-  ngDevMode && markRNodeAsClaimedByHydration(native);
-  if (getSerializedContainerViews(hydrationInfo, index)) {
-    ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);
-    setSegmentHead(hydrationInfo, index, native.nextSibling);
-  }
-  if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {
-    if (isComponentHost(tNode)) {
-      enterSkipHydrationBlock(tNode);
-      clearElementContents(native);
-      ngDevMode && markRNodeAsSkippedByHydration(native);
-    } else if (ngDevMode) {
-      throw invalidSkipHydrationHost(native);
-    }
-  }
-  return native;
-}
-function enableLocateOrCreateElementNodeImpl() {
-  _locateOrCreateElementNode = locateOrCreateElementNodeImpl;
-}
-function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {
-  ngDevMode && ngDevMode.firstCreatePass++;
-  const tViewConsts = tView.consts;
-  const attrs = getConstant(tViewConsts, attrsIndex);
-  const tNode = getOrCreateTNode(tView, index, 8, "ng-container", attrs);
-  if (attrs !== null) {
-    computeStaticStyling(tNode, attrs, true);
-  }
-  const localRefs = getConstant(tViewConsts, localRefsIndex);
-  resolveDirectives(tView, lView, tNode, localRefs);
-  if (tView.queries !== null) {
-    tView.queries.elementStart(tView, tNode);
-  }
-  return tNode;
-}
-function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "element containers should be created before any bindings");
-  const tNode = tView.firstCreatePass ? elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
-  setCurrentTNode(tNode, true);
-  const comment = _locateOrCreateElementContainerNode(tView, lView, tNode, index);
-  lView[adjustedIndex] = comment;
-  if (wasLastNodeCreated()) {
-    appendChild(tView, lView, comment, tNode);
-  }
-  attachPatchData(comment, lView);
-  if (isDirectiveHost(tNode)) {
-    createDirectivesInstances(tView, lView, tNode);
-    executeContentQueries(tView, tNode, lView);
-  }
-  if (localRefsIndex != null) {
-    saveResolvedLocalsInData(lView, tNode);
-  }
-  return ɵɵelementContainerStart;
-}
-function ɵɵelementContainerEnd() {
-  let currentTNode = getCurrentTNode();
-  const tView = getTView();
-  if (isCurrentTNodeParent()) {
-    setCurrentTNodeAsNotParent();
-  } else {
-    ngDevMode && assertHasParent(currentTNode);
-    currentTNode = currentTNode.parent;
-    setCurrentTNode(currentTNode, false);
-  }
-  ngDevMode && assertTNodeType(
-    currentTNode,
-    8
-    /* TNodeType.ElementContainer */
-  );
-  if (tView.firstCreatePass) {
-    registerPostOrderHooks(tView, currentTNode);
-    if (isContentQueryHost(currentTNode)) {
-      tView.queries.elementEnd(currentTNode);
-    }
-  }
-  return ɵɵelementContainerEnd;
-}
-function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
-  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
-  ɵɵelementContainerEnd();
-  return ɵɵelementContainer;
-}
-var _locateOrCreateElementContainerNode = (tView, lView, tNode, index) => {
-  lastNodeWasCreated(true);
-  return createCommentNode(lView[RENDERER], ngDevMode ? "ng-container" : "");
-};
-function locateOrCreateElementContainerNode(tView, lView, tNode, index) {
-  let comment;
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index) || isDetachedByI18n(tNode);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createCommentNode(lView[RENDERER], ngDevMode ? "ng-container" : "");
-  }
-  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateNodeExists(currentRNode, lView, tNode);
-  const ngContainerSize = getNgContainerSize(hydrationInfo, index);
-  ngDevMode && assertNumber(ngContainerSize, "Unexpected state: hydrating an <ng-container>, but no hydration info is available.");
-  setSegmentHead(hydrationInfo, index, currentRNode);
-  comment = siblingAfter(ngContainerSize, currentRNode);
-  if (ngDevMode) {
-    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);
-    markRNodeAsClaimedByHydration(comment);
-  }
-  return comment;
-}
-function enableLocateOrCreateElementContainerNodeImpl() {
-  _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;
-}
-function ɵɵgetCurrentView() {
-  return getLView();
-}
-function ɵɵhostProperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵhostProperty;
-}
-function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    const currentDef = getCurrentDirectiveDef(tView.data);
-    const renderer = loadComponentRenderer(currentDef, tNode, lView);
-    elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵsyntheticHostProperty;
-}
-if (typeof ngI18nClosureMode === "undefined") {
-  (function() {
-    _global["ngI18nClosureMode"] = // TODO(FW-1250): validate that this actually, you know, works.
-    // tslint:disable-next-line:no-toplevel-property-access
-    typeof goog !== "undefined" && typeof goog.getMsg === "function";
-  })();
-}
-var u = void 0;
-function plural(val) {
-  const n = val, i = Math.floor(Math.abs(val)), v = val.toString().replace(/^[^.]*\.?/, "").length;
-  if (i === 1 && v === 0) return 1;
-  return 5;
-}
-var localeEn = ["en", [["a", "p"], ["AM", "PM"], u], [["AM", "PM"], u, u], [["S", "M", "T", "W", "T", "F", "S"], ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]], u, [["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]], u, [["B", "A"], ["BC", "AD"], ["Before Christ", "Anno Domini"]], 0, [6, 0], ["M/d/yy", "MMM d, y", "MMMM d, y", "EEEE, MMMM d, y"], ["h:mm a", "h:mm:ss a", "h:mm:ss a z", "h:mm:ss a zzzz"], ["{1}, {0}", u, "{1} 'at' {0}", u], [".", ",", ";", "%", "+", "-", "E", "×", "‰", "∞", "NaN", ":"], ["#,##0.###", "#,##0%", "¤#,##0.00", "#E0"], "USD", "$", "US Dollar", {}, "ltr", plural];
-var LOCALE_DATA = {};
-function registerLocaleData(data, localeId, extraData) {
-  if (typeof localeId !== "string") {
-    extraData = localeId;
-    localeId = data[LocaleDataIndex.LocaleId];
-  }
-  localeId = localeId.toLowerCase().replace(/_/g, "-");
-  LOCALE_DATA[localeId] = data;
-  if (extraData) {
-    LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
-  }
-}
-function findLocaleData(locale) {
-  const normalizedLocale = normalizeLocale(locale);
-  let match = getLocaleData(normalizedLocale);
-  if (match) {
-    return match;
-  }
-  const parentLocale = normalizedLocale.split("-")[0];
-  match = getLocaleData(parentLocale);
-  if (match) {
-    return match;
-  }
-  if (parentLocale === "en") {
-    return localeEn;
-  }
-  throw new RuntimeError(701, ngDevMode && `Missing locale data for the locale "${locale}".`);
-}
-function getLocaleCurrencyCode(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.CurrencyCode] || null;
-}
-function getLocalePluralCase(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.PluralCase];
-}
-function getLocaleData(normalizedLocale) {
-  if (!(normalizedLocale in LOCALE_DATA)) {
-    LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];
-  }
-  return LOCALE_DATA[normalizedLocale];
-}
-function unregisterAllLocaleData() {
-  LOCALE_DATA = {};
-}
-var LocaleDataIndex;
-(function(LocaleDataIndex2) {
-  LocaleDataIndex2[LocaleDataIndex2["LocaleId"] = 0] = "LocaleId";
-  LocaleDataIndex2[LocaleDataIndex2["DayPeriodsFormat"] = 1] = "DayPeriodsFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DayPeriodsStandalone"] = 2] = "DayPeriodsStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["DaysFormat"] = 3] = "DaysFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DaysStandalone"] = 4] = "DaysStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["MonthsFormat"] = 5] = "MonthsFormat";
-  LocaleDataIndex2[LocaleDataIndex2["MonthsStandalone"] = 6] = "MonthsStandalone";
-  LocaleDataIndex2[LocaleDataIndex2["Eras"] = 7] = "Eras";
-  LocaleDataIndex2[LocaleDataIndex2["FirstDayOfWeek"] = 8] = "FirstDayOfWeek";
-  LocaleDataIndex2[LocaleDataIndex2["WeekendRange"] = 9] = "WeekendRange";
-  LocaleDataIndex2[LocaleDataIndex2["DateFormat"] = 10] = "DateFormat";
-  LocaleDataIndex2[LocaleDataIndex2["TimeFormat"] = 11] = "TimeFormat";
-  LocaleDataIndex2[LocaleDataIndex2["DateTimeFormat"] = 12] = "DateTimeFormat";
-  LocaleDataIndex2[LocaleDataIndex2["NumberSymbols"] = 13] = "NumberSymbols";
-  LocaleDataIndex2[LocaleDataIndex2["NumberFormats"] = 14] = "NumberFormats";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencyCode"] = 15] = "CurrencyCode";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencySymbol"] = 16] = "CurrencySymbol";
-  LocaleDataIndex2[LocaleDataIndex2["CurrencyName"] = 17] = "CurrencyName";
-  LocaleDataIndex2[LocaleDataIndex2["Currencies"] = 18] = "Currencies";
-  LocaleDataIndex2[LocaleDataIndex2["Directionality"] = 19] = "Directionality";
-  LocaleDataIndex2[LocaleDataIndex2["PluralCase"] = 20] = "PluralCase";
-  LocaleDataIndex2[LocaleDataIndex2["ExtraData"] = 21] = "ExtraData";
-})(LocaleDataIndex || (LocaleDataIndex = {}));
-function normalizeLocale(locale) {
-  return locale.toLowerCase().replace(/_/g, "-");
-}
-var pluralMapping = ["zero", "one", "two", "few", "many"];
-function getPluralCase(value, locale) {
-  const plural2 = getLocalePluralCase(locale)(parseInt(value, 10));
-  const result = pluralMapping[plural2];
-  return result !== void 0 ? result : "other";
-}
-var DEFAULT_LOCALE_ID = "en-US";
-var USD_CURRENCY_CODE = "USD";
-var ELEMENT_MARKER = {
-  marker: "element"
-};
-var ICU_MARKER = {
-  marker: "ICU"
-};
-var I18nCreateOpCode;
-(function(I18nCreateOpCode2) {
-  I18nCreateOpCode2[I18nCreateOpCode2["SHIFT"] = 2] = "SHIFT";
-  I18nCreateOpCode2[I18nCreateOpCode2["APPEND_EAGERLY"] = 1] = "APPEND_EAGERLY";
-  I18nCreateOpCode2[I18nCreateOpCode2["COMMENT"] = 2] = "COMMENT";
-})(I18nCreateOpCode || (I18nCreateOpCode = {}));
-var LOCALE_ID$1 = DEFAULT_LOCALE_ID;
-function setLocaleId(localeId) {
-  ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);
-  if (typeof localeId === "string") {
-    LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, "-");
-  }
-}
-function getLocaleId() {
-  return LOCALE_ID$1;
-}
-var changeMask = 0;
-var changeMaskCounter = 0;
-function setMaskBit(hasChange) {
-  if (hasChange) {
-    changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);
-  }
-  changeMaskCounter++;
-}
-function applyI18n(tView, lView, index) {
-  if (changeMaskCounter > 0) {
-    ngDevMode && assertDefined(tView, `tView should be defined`);
-    const tI18n = tView.data[index];
-    const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;
-    const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;
-    applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);
-  }
-  changeMask = 0;
-  changeMaskCounter = 0;
-}
-function createNodeWithoutHydration(lView, textOrName, nodeType) {
-  const renderer = lView[RENDERER];
-  switch (nodeType) {
-    case Node.COMMENT_NODE:
-      return createCommentNode(renderer, textOrName);
-    case Node.TEXT_NODE:
-      return createTextNode(renderer, textOrName);
-    case Node.ELEMENT_NODE:
-      return createElementNode(renderer, textOrName, null);
-  }
-}
-var _locateOrCreateNode = (lView, index, textOrName, nodeType) => {
-  lastNodeWasCreated(true);
-  return createNodeWithoutHydration(lView, textOrName, nodeType);
-};
-function locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {
-  const hydrationInfo = lView[HYDRATION];
-  const noOffsetIndex = index - HEADER_OFFSET;
-  const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createNodeWithoutHydration(lView, textOrName, nodeType);
-  }
-  const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);
-  ngDevMode && assertDefined(native, "expected native element");
-  ngDevMode && assertEqual(native.nodeType, nodeType, "expected matching nodeType");
-  ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), "expecting matching tagName");
-  ngDevMode && markRNodeAsClaimedByHydration(native);
-  return native;
-}
-function enableLocateOrCreateI18nNodeImpl() {
-  _locateOrCreateNode = locateOrCreateNodeImpl;
-}
-function applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {
-  const renderer = lView[RENDERER];
-  for (let i = 0; i < createOpCodes.length; i++) {
-    const opCode = createOpCodes[i++];
-    const text = createOpCodes[i];
-    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
-    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
-    const index = opCode >>> I18nCreateOpCode.SHIFT;
-    let rNode = lView[index];
-    let lastNodeWasCreated2 = false;
-    if (rNode === null) {
-      rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);
-      lastNodeWasCreated2 = wasLastNodeCreated();
-    }
-    if (appendNow && parentRNode !== null && lastNodeWasCreated2) {
-      nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);
-    }
-  }
-}
-function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
-  ngDevMode && assertDomNode(anchorRNode);
-  const renderer = lView[RENDERER];
-  let rootIdx = null;
-  let rootRNode;
-  for (let i = 0; i < mutableOpCodes.length; i++) {
-    const opCode = mutableOpCodes[i];
-    if (typeof opCode == "string") {
-      const textNodeIndex = mutableOpCodes[++i];
-      if (lView[textNodeIndex] === null) {
-        ngDevMode && ngDevMode.rendererCreateTextNode++;
-        ngDevMode && assertIndexInRange(lView, textNodeIndex);
-        lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);
-      }
-    } else if (typeof opCode == "number") {
-      switch (opCode & 1) {
-        case 0:
-          const parentIdx = getParentFromIcuCreateOpCode(opCode);
-          if (rootIdx === null) {
-            rootIdx = parentIdx;
-            rootRNode = nativeParentNode(renderer, anchorRNode);
-          }
-          let insertInFrontOf;
-          let parentRNode;
-          if (parentIdx === rootIdx) {
-            insertInFrontOf = anchorRNode;
-            parentRNode = rootRNode;
-          } else {
-            insertInFrontOf = null;
-            parentRNode = unwrapRNode(lView[parentIdx]);
-          }
-          if (parentRNode !== null) {
-            ngDevMode && assertDomNode(parentRNode);
-            const refIdx = getRefFromIcuCreateOpCode(opCode);
-            ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, "Missing ref");
-            const child = lView[refIdx];
-            ngDevMode && assertDomNode(child);
-            nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);
-            const tIcu = getTIcu(tView, refIdx);
-            if (tIcu !== null && typeof tIcu === "object") {
-              ngDevMode && assertTIcu(tIcu);
-              const caseIndex = getCurrentICUCaseIndex(tIcu, lView);
-              if (caseIndex !== null) {
-                applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);
-              }
-            }
-          }
-          break;
-        case 1:
-          const elementNodeIndex = opCode >>> 1;
-          const attrName = mutableOpCodes[++i];
-          const attrValue = mutableOpCodes[++i];
-          setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);
-          break;
-        default:
-          if (ngDevMode) {
-            throw new RuntimeError(700, `Unable to determine the type of mutate operation for "${opCode}"`);
-          }
-      }
-    } else {
-      switch (opCode) {
-        case ICU_MARKER:
-          const commentValue = mutableOpCodes[++i];
-          const commentNodeIndex = mutableOpCodes[++i];
-          if (lView[commentNodeIndex] === null) {
-            ngDevMode && assertEqual(typeof commentValue, "string", `Expected "${commentValue}" to be a comment node value`);
-            ngDevMode && ngDevMode.rendererCreateComment++;
-            ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);
-            const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);
-            attachPatchData(commentRNode, lView);
-          }
-          break;
-        case ELEMENT_MARKER:
-          const tagName = mutableOpCodes[++i];
-          const elementNodeIndex = mutableOpCodes[++i];
-          if (lView[elementNodeIndex] === null) {
-            ngDevMode && assertEqual(typeof tagName, "string", `Expected "${tagName}" to be an element node tag name`);
-            ngDevMode && ngDevMode.rendererCreateElement++;
-            ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);
-            const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);
-            attachPatchData(elementRNode, lView);
-          }
-          break;
-        default:
-          ngDevMode && throwError(`Unable to determine the type of mutate operation for "${opCode}"`);
-      }
-    }
-  }
-}
-function applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask2) {
-  for (let i = 0; i < updateOpCodes.length; i++) {
-    const checkBit = updateOpCodes[i];
-    const skipCodes = updateOpCodes[++i];
-    if (checkBit & changeMask2) {
-      let value = "";
-      for (let j = i + 1; j <= i + skipCodes; j++) {
-        const opCode = updateOpCodes[j];
-        if (typeof opCode == "string") {
-          value += opCode;
-        } else if (typeof opCode == "number") {
-          if (opCode < 0) {
-            value += renderStringify(lView[bindingsStartIndex - opCode]);
-          } else {
-            const nodeIndex = opCode >>> 2;
-            switch (opCode & 3) {
-              case 1:
-                const propName = updateOpCodes[++j];
-                const sanitizeFn = updateOpCodes[++j];
-                const tNodeOrTagName = tView.data[nodeIndex];
-                ngDevMode && assertDefined(tNodeOrTagName, "Experting TNode or string");
-                if (typeof tNodeOrTagName === "string") {
-                  setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);
-                } else {
-                  elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);
-                }
-                break;
-              case 0:
-                const rText = lView[nodeIndex];
-                rText !== null && updateTextNode(lView[RENDERER], rText, value);
-                break;
-              case 2:
-                applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);
-                break;
-              case 3:
-                applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);
-                break;
-            }
-          }
-        }
-      }
-    } else {
-      const opCode = updateOpCodes[i + 1];
-      if (opCode > 0 && (opCode & 3) === 3) {
-        const nodeIndex = opCode >>> 2;
-        const tIcu = getTIcu(tView, nodeIndex);
-        const currentIndex = lView[tIcu.currentCaseLViewIndex];
-        if (currentIndex < 0) {
-          applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);
-        }
-      }
-    }
-    i += skipCodes;
-  }
-}
-function applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {
-  ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);
-  let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];
-  if (activeCaseIndex !== null) {
-    let mask = changeMask;
-    if (activeCaseIndex < 0) {
-      activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;
-      mask = -1;
-    }
-    applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);
-  }
-}
-function applyIcuSwitchCase(tView, tIcu, lView, value) {
-  const caseIndex = getCaseIndex(tIcu, value);
-  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
-  if (activeCaseIndex !== caseIndex) {
-    applyIcuSwitchCaseRemove(tView, tIcu, lView);
-    lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;
-    if (caseIndex !== null) {
-      const anchorRNode = lView[tIcu.anchorIdx];
-      if (anchorRNode) {
-        ngDevMode && assertDomNode(anchorRNode);
-        applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);
-      }
-      claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);
-    }
-  }
-}
-function applyIcuSwitchCaseRemove(tView, tIcu, lView) {
-  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);
-  if (activeCaseIndex !== null) {
-    const removeCodes = tIcu.remove[activeCaseIndex];
-    for (let i = 0; i < removeCodes.length; i++) {
-      const nodeOrIcuIndex = removeCodes[i];
-      if (nodeOrIcuIndex > 0) {
-        const rNode = getNativeByIndex(nodeOrIcuIndex, lView);
-        rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);
-      } else {
-        applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);
-      }
-    }
-  }
-}
-function getCaseIndex(icuExpression, bindingValue) {
-  let index = icuExpression.cases.indexOf(bindingValue);
-  if (index === -1) {
-    switch (icuExpression.type) {
-      case 1: {
-        const resolvedCase = getPluralCase(bindingValue, getLocaleId());
-        index = icuExpression.cases.indexOf(resolvedCase);
-        if (index === -1 && resolvedCase !== "other") {
-          index = icuExpression.cases.indexOf("other");
-        }
-        break;
-      }
-      case 0: {
-        index = icuExpression.cases.indexOf("other");
-        break;
-      }
-    }
-  }
-  return index === -1 ? null : index;
-}
-function i18nCreateOpCodesToString(opcodes) {
-  const createOpCodes = opcodes || (Array.isArray(this) ? this : []);
-  let lines = [];
-  for (let i = 0; i < createOpCodes.length; i++) {
-    const opCode = createOpCodes[i++];
-    const text = createOpCodes[i];
-    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
-    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
-    const index = opCode >>> I18nCreateOpCode.SHIFT;
-    lines.push(`lView[${index}] = document.${isComment ? "createComment" : "createText"}(${JSON.stringify(text)});`);
-    if (appendNow) {
-      lines.push(`parent.appendChild(lView[${index}]);`);
-    }
-  }
-  return lines;
-}
-function i18nUpdateOpCodesToString(opcodes) {
-  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
-  let lines = [];
-  function consumeOpCode(value) {
-    const ref = value >>> 2;
-    const opCode = value & 3;
-    switch (opCode) {
-      case 0:
-        return `(lView[${ref}] as Text).textContent = $$$`;
-      case 1:
-        const attrName = parser.consumeString();
-        const sanitizationFn = parser.consumeFunction();
-        const value2 = sanitizationFn ? `(${sanitizationFn})($$$)` : "$$$";
-        return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value2})`;
-      case 2:
-        return `icuSwitchCase(${ref}, $$$)`;
-      case 3:
-        return `icuUpdateCase(${ref})`;
-    }
-    throw new Error("unexpected OpCode");
-  }
-  while (parser.hasMore()) {
-    let mask = parser.consumeNumber();
-    let size = parser.consumeNumber();
-    const end = parser.i + size;
-    const statements = [];
-    let statement = "";
-    while (parser.i < end) {
-      let value = parser.consumeNumberOrString();
-      if (typeof value === "string") {
-        statement += value;
-      } else if (value < 0) {
-        statement += "${lView[i" + value + "]}";
-      } else {
-        const opCodeText = consumeOpCode(value);
-        statements.push(opCodeText.replace("$$$", "`" + statement + "`") + ";");
-        statement = "";
-      }
-    }
-    lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(" ")} }`);
-  }
-  return lines;
-}
-function icuCreateOpCodesToString(opcodes) {
-  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
-  let lines = [];
-  function consumeOpCode(opCode) {
-    const parent = getParentFromIcuCreateOpCode(opCode);
-    const ref = getRefFromIcuCreateOpCode(opCode);
-    switch (getInstructionFromIcuCreateOpCode(opCode)) {
-      case 0:
-        return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;
-      case 1:
-        return `(lView[${ref}] as Element).setAttribute("${parser.consumeString()}", "${parser.consumeString()}")`;
-    }
-    throw new Error("Unexpected OpCode: " + getInstructionFromIcuCreateOpCode(opCode));
-  }
-  let lastRef = -1;
-  while (parser.hasMore()) {
-    let value = parser.consumeNumberStringOrMarker();
-    if (value === ICU_MARKER) {
-      const text = parser.consumeString();
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createComment("${text}")`);
-    } else if (value === ELEMENT_MARKER) {
-      const text = parser.consumeString();
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createElement("${text}")`);
-    } else if (typeof value === "string") {
-      lastRef = parser.consumeNumber();
-      lines.push(`lView[${lastRef}] = document.createTextNode("${value}")`);
-    } else if (typeof value === "number") {
-      const line = consumeOpCode(value);
-      line && lines.push(line);
-    } else {
-      throw new Error("Unexpected value");
-    }
-  }
-  return lines;
-}
-function i18nRemoveOpCodesToString(opcodes) {
-  const removeCodes = opcodes || (Array.isArray(this) ? this : []);
-  let lines = [];
-  for (let i = 0; i < removeCodes.length; i++) {
-    const nodeOrIcuIndex = removeCodes[i];
-    if (nodeOrIcuIndex > 0) {
-      lines.push(`remove(lView[${nodeOrIcuIndex}])`);
-    } else {
-      lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);
-    }
-  }
-  return lines;
-}
-var OpCodeParser = class {
-  i = 0;
-  codes;
-  constructor(codes) {
-    this.codes = codes;
-  }
-  hasMore() {
-    return this.i < this.codes.length;
-  }
-  consumeNumber() {
-    let value = this.codes[this.i++];
-    assertNumber(value, "expecting number in OpCode");
-    return value;
-  }
-  consumeString() {
-    let value = this.codes[this.i++];
-    assertString(value, "expecting string in OpCode");
-    return value;
-  }
-  consumeFunction() {
-    let value = this.codes[this.i++];
-    if (value === null || typeof value === "function") {
-      return value;
-    }
-    throw new Error("expecting function in OpCode");
-  }
-  consumeNumberOrString() {
-    let value = this.codes[this.i++];
-    if (typeof value === "string") {
-      return value;
-    }
-    assertNumber(value, "expecting number or string in OpCode");
-    return value;
-  }
-  consumeNumberStringOrMarker() {
-    let value = this.codes[this.i++];
-    if (typeof value === "string" || typeof value === "number" || value == ICU_MARKER || value == ELEMENT_MARKER) {
-      return value;
-    }
-    assertNumber(value, "expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode");
-    return value;
-  }
-};
-var BINDING_REGEXP = /�(\d+):?\d*�/gi;
-var ICU_REGEXP = /({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi;
-var NESTED_ICU = /�(\d+)�/;
-var ICU_BLOCK_REGEXP = /^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/;
-var MARKER = `�`;
-var SUBTEMPLATE_REGEXP = /�\/?\*(\d+:\d+)�/gi;
-var PH_REGEXP = /�(\/?[#*]\d+):?\d*�/gi;
-var NGSP_UNICODE_REGEXP = /\uE500/g;
-function replaceNgsp(value) {
-  return value.replace(NGSP_UNICODE_REGEXP, " ");
-}
-function attachDebugGetter(obj, debugGetter) {
-  if (ngDevMode) {
-    Object.defineProperty(obj, "debug", {
-      get: debugGetter,
-      enumerable: false
-    });
-  } else {
-    throw new Error("This method should be guarded with `ngDevMode` so that it can be tree shaken in production!");
-  }
-}
-function i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {
-  const rootTNode = getCurrentParentTNode();
-  const createOpCodes = [];
-  const updateOpCodes = [];
-  const existingTNodeStack = [[]];
-  const astStack = [[]];
-  if (ngDevMode) {
-    attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  message = getTranslationForTemplate(message, subTemplateIndex);
-  const msgParts = replaceNgsp(message).split(PH_REGEXP);
-  for (let i = 0; i < msgParts.length; i++) {
-    let value = msgParts[i];
-    if ((i & 1) === 0) {
-      const parts = i18nParseTextIntoPartsAndICU(value);
-      for (let j = 0; j < parts.length; j++) {
-        let part = parts[j];
-        if ((j & 1) === 0) {
-          const text = part;
-          ngDevMode && assertString(text, "Parsed ICU part should be string");
-          if (text !== "") {
-            i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);
-          }
-        } else {
-          const icuExpression = part;
-          if (typeof icuExpression !== "object") {
-            throw new Error(`Unable to parse ICU expression in "${message}" message.`);
-          }
-          const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : "", true);
-          const icuNodeIndex = icuContainerTNode.index;
-          ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, "Index must be in absolute LView offset");
-          icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);
-        }
-      }
-    } else {
-      const isClosing = value.charCodeAt(0) === 47;
-      const type = value.charCodeAt(isClosing ? 1 : 0);
-      ngDevMode && assertOneOf(
-        type,
-        42,
-        35
-        /* CharCode.HASH */
-      );
-      const index2 = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));
-      if (isClosing) {
-        existingTNodeStack.shift();
-        astStack.shift();
-        setCurrentTNode(getCurrentParentTNode(), false);
-      } else {
-        const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index2);
-        existingTNodeStack.unshift([]);
-        setCurrentTNode(tNode, true);
-        const placeholderNode = {
-          kind: 2,
-          index: index2,
-          children: [],
-          type: type === 35 ? 0 : 1
-          /* I18nPlaceholderType.SUBTEMPLATE */
-        };
-        astStack[0].push(placeholderNode);
-        astStack.unshift(placeholderNode.children);
-      }
-    }
-  }
-  tView.data[index] = {
-    create: createOpCodes,
-    update: updateOpCodes,
-    ast: astStack[0],
-    parentTNodeIndex
-  };
-}
-function createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {
-  const i18nNodeIdx = allocExpando(tView, lView, 1, null);
-  let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;
-  let parentTNode = getCurrentParentTNode();
-  if (rootTNode === parentTNode) {
-    parentTNode = null;
-  }
-  if (parentTNode === null) {
-    opCode |= I18nCreateOpCode.APPEND_EAGERLY;
-  }
-  if (isICU) {
-    opCode |= I18nCreateOpCode.COMMENT;
-    ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);
-  }
-  createOpCodes.push(opCode, text === null ? "" : text);
-  const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 : 1, text === null ? ngDevMode ? "{{?}}" : "" : text, null);
-  addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);
-  const tNodeIdx = tNode.index;
-  setCurrentTNode(
-    tNode,
-    false
-    /* Text nodes are self closing */
-  );
-  if (parentTNode !== null && rootTNode !== parentTNode) {
-    setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);
-  }
-  return tNode;
-}
-function i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {
-  const hasBinding = text.match(BINDING_REGEXP);
-  const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);
-  const index = tNode.index;
-  if (hasBinding) {
-    generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);
-  }
-  ast.push({
-    kind: 0,
-    index
-  });
-}
-function i18nAttributesFirstPass(tView, index, values) {
-  const previousElement = getCurrentTNode();
-  const previousElementIndex = previousElement.index;
-  const updateOpCodes = [];
-  if (ngDevMode) {
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  if (tView.firstCreatePass && tView.data[index] === null) {
-    for (let i = 0; i < values.length; i += 2) {
-      const attrName = values[i];
-      const message = values[i + 1];
-      if (message !== "") {
-        if (ICU_REGEXP.test(message)) {
-          throw new Error(`ICU expressions are not supported in attributes. Message: "${message}".`);
-        }
-        generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), null);
-      }
-    }
-    tView.data[index] = updateOpCodes;
-  }
-}
-function generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {
-  ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, "Index must be in absolute LView offset");
-  const maskIndex = updateOpCodes.length;
-  const sizeIndex = maskIndex + 1;
-  updateOpCodes.push(null, null);
-  const startIndex = maskIndex + 2;
-  if (ngDevMode) {
-    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
-  }
-  const textParts = str.split(BINDING_REGEXP);
-  let mask = 0;
-  for (let j = 0; j < textParts.length; j++) {
-    const textValue = textParts[j];
-    if (j & 1) {
-      const bindingIndex = bindingStart + parseInt(textValue, 10);
-      updateOpCodes.push(-1 - bindingIndex);
-      mask = mask | toMaskBit(bindingIndex);
-    } else if (textValue !== "") {
-      updateOpCodes.push(textValue);
-    }
-  }
-  updateOpCodes.push(destinationNode << 2 | (attrName ? 1 : 0));
-  if (attrName) {
-    updateOpCodes.push(attrName, sanitizeFn);
-  }
-  updateOpCodes[maskIndex] = mask;
-  updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;
-  return mask;
-}
-function countBindings(opCodes) {
-  let count = 0;
-  for (let i = 0; i < opCodes.length; i++) {
-    const opCode = opCodes[i];
-    if (typeof opCode === "number" && opCode < 0) {
-      count++;
-    }
-  }
-  return count;
-}
-function toMaskBit(bindingIndex) {
-  return 1 << Math.min(bindingIndex, 31);
-}
-function removeInnerTemplateTranslation(message) {
-  let match;
-  let res = "";
-  let index = 0;
-  let inTemplate = false;
-  let tagMatched;
-  while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {
-    if (!inTemplate) {
-      res += message.substring(index, match.index + match[0].length);
-      tagMatched = match[1];
-      inTemplate = true;
-    } else {
-      if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {
-        index = match.index;
-        inTemplate = false;
-      }
-    }
-  }
-  ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation "${message}"`);
-  res += message.slice(index);
-  return res;
-}
-function getTranslationForTemplate(message, subTemplateIndex) {
-  if (isRootTemplateMessage(subTemplateIndex)) {
-    return removeInnerTemplateTranslation(message);
-  } else {
-    const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;
-    const end = message.search(new RegExp(`${MARKER}\\/\\*\\d+:${subTemplateIndex}${MARKER}`));
-    return removeInnerTemplateTranslation(message.substring(start, end));
-  }
-}
-function icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {
-  ngDevMode && assertDefined(icuExpression, "ICU expression must be defined");
-  let bindingMask = 0;
-  const tIcu = {
-    type: icuExpression.type,
-    currentCaseLViewIndex: allocExpando(tView, lView, 1, null),
-    anchorIdx,
-    cases: [],
-    create: [],
-    remove: [],
-    update: []
-  };
-  addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);
-  setTIcu(tView, anchorIdx, tIcu);
-  const values = icuExpression.values;
-  const cases = [];
-  for (let i = 0; i < values.length; i++) {
-    const valueArr = values[i];
-    const nestedIcus = [];
-    for (let j = 0; j < valueArr.length; j++) {
-      const value = valueArr[j];
-      if (typeof value !== "string") {
-        const icuIndex = nestedIcus.push(value) - 1;
-        valueArr[j] = `<!--�${icuIndex}�-->`;
-      }
-    }
-    const caseAst = [];
-    cases.push(caseAst);
-    bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(""), nestedIcus) | bindingMask;
-  }
-  if (bindingMask) {
-    addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);
-  }
-  ast.push({
-    kind: 3,
-    index: anchorIdx,
-    cases,
-    currentCaseLViewIndex: tIcu.currentCaseLViewIndex
-  });
-}
-function parseICUBlock(pattern) {
-  const cases = [];
-  const values = [];
-  let icuType = 1;
-  let mainBinding = 0;
-  pattern = pattern.replace(ICU_BLOCK_REGEXP, function(str, binding, type) {
-    if (type === "select") {
-      icuType = 0;
-    } else {
-      icuType = 1;
-    }
-    mainBinding = parseInt(binding.slice(1), 10);
-    return "";
-  });
-  const parts = i18nParseTextIntoPartsAndICU(pattern);
-  for (let pos = 0; pos < parts.length; ) {
-    let key = parts[pos++].trim();
-    if (icuType === 1) {
-      key = key.replace(/\s*(?:=)?(\w+)\s*/, "$1");
-    }
-    if (key.length) {
-      cases.push(key);
-    }
-    const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);
-    if (cases.length > values.length) {
-      values.push(blocks);
-    }
-  }
-  return {
-    type: icuType,
-    mainBinding,
-    cases,
-    values
-  };
-}
-function i18nParseTextIntoPartsAndICU(pattern) {
-  if (!pattern) {
-    return [];
-  }
-  let prevPos = 0;
-  const braceStack = [];
-  const results = [];
-  const braces = /[{}]/g;
-  braces.lastIndex = 0;
-  let match;
-  while (match = braces.exec(pattern)) {
-    const pos = match.index;
-    if (match[0] == "}") {
-      braceStack.pop();
-      if (braceStack.length == 0) {
-        const block = pattern.substring(prevPos, pos);
-        if (ICU_BLOCK_REGEXP.test(block)) {
-          results.push(parseICUBlock(block));
-        } else {
-          results.push(block);
-        }
-        prevPos = pos + 1;
-      }
-    } else {
-      if (braceStack.length == 0) {
-        const substring2 = pattern.substring(prevPos, pos);
-        results.push(substring2);
-        prevPos = pos + 1;
-      }
-      braceStack.push("{");
-    }
-  }
-  const substring = pattern.substring(prevPos);
-  results.push(substring);
-  return results;
-}
-function parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {
-  const create = [];
-  const remove2 = [];
-  const update = [];
-  if (ngDevMode) {
-    attachDebugGetter(create, icuCreateOpCodesToString);
-    attachDebugGetter(remove2, i18nRemoveOpCodesToString);
-    attachDebugGetter(update, i18nUpdateOpCodesToString);
-  }
-  tIcu.cases.push(caseName);
-  tIcu.create.push(create);
-  tIcu.remove.push(remove2);
-  tIcu.update.push(update);
-  const inertBodyHelper2 = getInertBodyHelper(getDocument());
-  const inertBodyElement = inertBodyHelper2.getInertBodyElement(unsafeCaseHtml);
-  ngDevMode && assertDefined(inertBodyElement, "Unable to generate inert body element");
-  const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;
-  if (inertRootNode) {
-    return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove2, update, inertRootNode, parentIdx, nestedIcus, 0);
-  } else {
-    return 0;
-  }
-}
-function walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove2, update, parentNode, parentIdx, nestedIcus, depth) {
-  let bindingMask = 0;
-  let currentNode = parentNode.firstChild;
-  while (currentNode) {
-    const newIndex = allocExpando(tView, lView, 1, null);
-    switch (currentNode.nodeType) {
-      case Node.ELEMENT_NODE:
-        const element = currentNode;
-        const tagName = element.tagName.toLowerCase();
-        if (VALID_ELEMENTS.hasOwnProperty(tagName)) {
-          addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);
-          tView.data[newIndex] = tagName;
-          const elAttrs = element.attributes;
-          for (let i = 0; i < elAttrs.length; i++) {
-            const attr = elAttrs.item(i);
-            const lowerAttrName = attr.name.toLowerCase();
-            const hasBinding2 = !!attr.value.match(BINDING_REGEXP);
-            if (hasBinding2) {
-              if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {
-                if (URI_ATTRS[lowerAttrName]) {
-                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, _sanitizeUrl);
-                } else {
-                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, null);
-                }
-              } else {
-                ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ${lowerAttrName} on element ${tagName} (see ${XSS_SECURITY_URL})`);
-              }
-            } else {
-              addCreateAttribute(create, newIndex, attr);
-            }
-          }
-          const elementNode = {
-            kind: 1,
-            index: newIndex,
-            children: []
-          };
-          ast.push(elementNode);
-          bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove2, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;
-          addRemoveNode(remove2, newIndex, depth);
-        }
-        break;
-      case Node.TEXT_NODE:
-        const value = currentNode.textContent || "";
-        const hasBinding = value.match(BINDING_REGEXP);
-        addCreateNodeAndAppend(create, null, hasBinding ? "" : value, parentIdx, newIndex);
-        addRemoveNode(remove2, newIndex, depth);
-        if (hasBinding) {
-          bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;
-        }
-        ast.push({
-          kind: 0,
-          index: newIndex
-        });
-        break;
-      case Node.COMMENT_NODE:
-        const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || "");
-        if (isNestedIcu) {
-          const nestedIcuIndex = parseInt(isNestedIcu[1], 10);
-          const icuExpression = nestedIcus[nestedIcuIndex];
-          addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : "", parentIdx, newIndex);
-          icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);
-          addRemoveNestedIcu(remove2, newIndex, depth);
-        }
-        break;
-    }
-    currentNode = currentNode.nextSibling;
-  }
-  return bindingMask;
-}
-function addRemoveNode(remove2, index, depth) {
-  if (depth === 0) {
-    remove2.push(index);
-  }
-}
-function addRemoveNestedIcu(remove2, index, depth) {
-  if (depth === 0) {
-    remove2.push(~index);
-    remove2.push(index);
-  }
-}
-function addUpdateIcuSwitch(update, icuExpression, index) {
-  update.push(
-    toMaskBit(icuExpression.mainBinding),
-    2,
-    -1 - icuExpression.mainBinding,
-    index << 2 | 2
-    /* I18nUpdateOpCode.IcuSwitch */
-  );
-}
-function addUpdateIcuUpdate(update, bindingMask, index) {
-  update.push(
-    bindingMask,
-    1,
-    index << 2 | 3
-    /* I18nUpdateOpCode.IcuUpdate */
-  );
-}
-function addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {
-  if (marker !== null) {
-    create.push(marker);
-  }
-  create.push(text, createAtIdx, icuCreateOpCode(0, appendToParentIdx, createAtIdx));
-}
-function addCreateAttribute(create, newIndex, attr) {
-  create.push(newIndex << 1 | 1, attr.name, attr.value);
-}
-var ROOT_TEMPLATE_ID = 0;
-var PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]/;
-var PP_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g;
-var PP_ICU_VARS_REGEXP = /({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g;
-var PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;
-var PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\d+)?)�/g;
-var PP_CLOSE_TEMPLATE_REGEXP = /\/\*/;
-var PP_TEMPLATE_ID_REGEXP = /\d+\:(\d+)/;
-function i18nPostprocess(message, replacements = {}) {
-  let result = message;
-  if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {
-    const matches = {};
-    const templateIdsStack = [ROOT_TEMPLATE_ID];
-    result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {
-      const content = phs || tmpl;
-      const placeholders = matches[content] || [];
-      if (!placeholders.length) {
-        content.split("|").forEach((placeholder2) => {
-          const match = placeholder2.match(PP_TEMPLATE_ID_REGEXP);
-          const templateId2 = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;
-          const isCloseTemplateTag2 = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder2);
-          placeholders.push([templateId2, isCloseTemplateTag2, placeholder2]);
-        });
-        matches[content] = placeholders;
-      }
-      if (!placeholders.length) {
-        throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);
-      }
-      const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];
-      let idx = 0;
-      for (let i = 0; i < placeholders.length; i++) {
-        if (placeholders[i][0] === currentTemplateId) {
-          idx = i;
-          break;
-        }
-      }
-      const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];
-      if (isCloseTemplateTag) {
-        templateIdsStack.pop();
-      } else if (currentTemplateId !== templateId) {
-        templateIdsStack.push(templateId);
-      }
-      placeholders.splice(idx, 1);
-      return placeholder;
-    });
-  }
-  if (!Object.keys(replacements).length) {
-    return result;
-  }
-  result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {
-    return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;
-  });
-  result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {
-    return replacements.hasOwnProperty(key) ? replacements[key] : match;
-  });
-  result = result.replace(PP_ICUS_REGEXP, (match, key) => {
-    if (replacements.hasOwnProperty(key)) {
-      const list = replacements[key];
-      if (!list.length) {
-        throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);
-      }
-      return list.shift();
-    }
-    return match;
-  });
-  return result;
-}
-function ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {
-  const tView = getTView();
-  const lView = getLView();
-  const adjustedIndex = HEADER_OFFSET + index;
-  ngDevMode && assertDefined(tView, `tView should be defined`);
-  const message = getConstant(tView.consts, messageIndex);
-  const parentTNode = getCurrentParentTNode();
-  if (tView.firstCreatePass) {
-    i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);
-  }
-  if (tView.type === 2) {
-    const componentLView = lView[DECLARATION_COMPONENT_VIEW];
-    componentLView[FLAGS] |= 32;
-  } else {
-    lView[FLAGS] |= 32;
-  }
-  const tI18n = tView.data[adjustedIndex];
-  const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;
-  const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);
-  const insertInFrontOf = parentTNode && parentTNode.type & 8 ? lView[parentTNode.index] : null;
-  prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);
-  applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);
-  setInI18nBlock(true);
-}
-function ɵɵi18nEnd() {
-  setInI18nBlock(false);
-}
-function ɵɵi18n(index, messageIndex, subTemplateIndex) {
-  ɵɵi18nStart(index, messageIndex, subTemplateIndex);
-  ɵɵi18nEnd();
-}
-function ɵɵi18nAttributes(index, attrsIndex) {
-  const tView = getTView();
-  ngDevMode && assertDefined(tView, `tView should be defined`);
-  const attrs = getConstant(tView.consts, attrsIndex);
-  i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);
-}
-function ɵɵi18nExp(value) {
-  const lView = getLView();
-  setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));
-  return ɵɵi18nExp;
-}
-function ɵɵi18nApply(index) {
-  applyI18n(getTView(), getLView(), index + HEADER_OFFSET);
-}
-function ɵɵi18nPostprocess(message, replacements = {}) {
-  return i18nPostprocess(message, replacements);
-}
-var stashEventListener = (el, eventName, listenerFn) => {
-};
-function ɵɵlistener(eventName, listenerFn, useCapture, eventTargetResolver) {
-  const lView = getLView();
-  const tView = getTView();
-  const tNode = getCurrentTNode();
-  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);
-  return ɵɵlistener;
-}
-function ɵɵsyntheticHostListener(eventName, listenerFn) {
-  const tNode = getCurrentTNode();
-  const lView = getLView();
-  const tView = getTView();
-  const currentDef = getCurrentDirectiveDef(tView.data);
-  const renderer = loadComponentRenderer(currentDef, tNode, lView);
-  listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);
-  return ɵɵsyntheticHostListener;
-}
-function findExistingListener(tView, lView, eventName, tNodeIdx) {
-  const tCleanup = tView.cleanup;
-  if (tCleanup != null) {
-    for (let i = 0; i < tCleanup.length - 1; i += 2) {
-      const cleanupEventName = tCleanup[i];
-      if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
-        const lCleanup = lView[CLEANUP];
-        const listenerIdxInLCleanup = tCleanup[i + 2];
-        return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
-      }
-      if (typeof cleanupEventName === "string") {
-        i += 2;
-      }
-    }
-  }
-  return null;
-}
-function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {
-  const isTNodeDirectiveHost = isDirectiveHost(tNode);
-  const firstCreatePass = tView.firstCreatePass;
-  const tCleanup = firstCreatePass && getOrCreateTViewCleanup(tView);
-  const context = lView[CONTEXT];
-  const lCleanup = getOrCreateLViewCleanup(lView);
-  ngDevMode && assertTNodeType(
-    tNode,
-    3 | 12
-    /* TNodeType.AnyContainer */
-  );
-  let processOutputs = true;
-  if (tNode.type & 3 || eventTargetResolver) {
-    const native = getNativeByTNode(tNode, lView);
-    const target = eventTargetResolver ? eventTargetResolver(native) : native;
-    const lCleanupIndex = lCleanup.length;
-    const idxOrTargetGetter = eventTargetResolver ? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;
-    let existingListener = null;
-    if (!eventTargetResolver && isTNodeDirectiveHost) {
-      existingListener = findExistingListener(tView, lView, eventName, tNode.index);
-    }
-    if (existingListener !== null) {
-      const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
-      lastListenerFn.__ngNextListenerFn__ = listenerFn;
-      existingListener.__ngLastListenerFn__ = listenerFn;
-      processOutputs = false;
-    } else {
-      listenerFn = wrapListener(tNode, lView, context, listenerFn);
-      stashEventListener(native, eventName, listenerFn);
-      const cleanupFn = renderer.listen(target, eventName, listenerFn);
-      ngDevMode && ngDevMode.rendererAddEventListener++;
-      lCleanup.push(listenerFn, cleanupFn);
-      tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
-    }
-  } else {
-    listenerFn = wrapListener(tNode, lView, context, listenerFn);
-  }
-  const outputs = tNode.outputs;
-  let props;
-  if (processOutputs && outputs !== null && (props = outputs[eventName])) {
-    const propsLength = props.length;
-    if (propsLength) {
-      for (let i = 0; i < propsLength; i += 2) {
-        const index = props[i];
-        ngDevMode && assertIndexInRange(lView, index);
-        const minifiedName = props[i + 1];
-        const directiveInstance = lView[index];
-        const output2 = directiveInstance[minifiedName];
-        if (ngDevMode && !isOutputSubscribable(output2)) {
-          throw new Error(`@Output ${minifiedName} not initialized in '${directiveInstance.constructor.name}'.`);
-        }
-        const subscription = output2.subscribe(listenerFn);
-        const idx = lCleanup.length;
-        lCleanup.push(listenerFn, subscription);
-        tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
-      }
-    }
-  }
-}
-function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    profiler(6, context, listenerFn);
-    return listenerFn(e) !== false;
-  } catch (error) {
-    handleError(lView, error);
-    return false;
-  } finally {
-    profiler(7, context, listenerFn);
-    setActiveConsumer(prevConsumer);
-  }
-}
-function wrapListener(tNode, lView, context, listenerFn) {
-  return function wrapListenerIn_markDirtyAndPreventDefault(e) {
-    if (e === Function) {
-      return listenerFn;
-    }
-    const startView = tNode.componentOffset > -1 ? getComponentLViewByIndex(tNode.index, lView) : lView;
-    markViewDirty(
-      startView,
-      5
-      /* NotificationSource.Listener */
-    );
-    let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);
-    let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;
-    while (nextListenerFn) {
-      result = executeListenerWithErrorHandling(lView, context, nextListenerFn, e) && result;
-      nextListenerFn = nextListenerFn.__ngNextListenerFn__;
-    }
-    return result;
-  };
-}
-function isOutputSubscribable(value) {
-  return value != null && typeof value.subscribe === "function";
-}
-function ɵɵnextContext(level = 1) {
-  return nextContextImpl(level);
-}
-function matchingProjectionSlotIndex(tNode, projectionSlots) {
-  let wildcardNgContentIndex = null;
-  const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);
-  for (let i = 0; i < projectionSlots.length; i++) {
-    const slotValue = projectionSlots[i];
-    if (slotValue === "*") {
-      wildcardNgContentIndex = i;
-      continue;
-    }
-    if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(
-      tNode,
-      slotValue,
-      /* isProjectionMode */
-      true
-    ) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {
-      return i;
-    }
-  }
-  return wildcardNgContentIndex;
-}
-function ɵɵprojectionDef(projectionSlots) {
-  const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];
-  if (!componentNode.projection) {
-    const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;
-    const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);
-    const tails = projectionHeads.slice();
-    let componentChild = componentNode.child;
-    while (componentChild !== null) {
-      if (componentChild.type !== 128) {
-        const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;
-        if (slotIndex !== null) {
-          if (tails[slotIndex]) {
-            tails[slotIndex].projectionNext = componentChild;
-          } else {
-            projectionHeads[slotIndex] = componentChild;
-          }
-          tails[slotIndex] = componentChild;
-        }
-      }
-      componentChild = componentChild.next;
-    }
-  }
-}
-function ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {
-  const lView = getLView();
-  const tView = getTView();
-  const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;
-  if (fallbackIndex !== null) {
-    declareTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);
-  }
-  const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16, null, attrs || null);
-  if (tProjectionNode.projection === null) {
-    tProjectionNode.projection = selectorIndex;
-  }
-  setCurrentTNodeAsNotParent();
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();
-  const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];
-  const isEmpty = componentHostNode.projection[tProjectionNode.projection] === null;
-  if (isEmpty && fallbackIndex !== null) {
-    insertFallbackContent(lView, tView, fallbackIndex);
-  } else if (isNodeCreationMode && (tProjectionNode.flags & 32) !== 32) {
-    applyProjection(tView, lView, tProjectionNode);
-  }
-}
-function insertFallbackContent(lView, tView, fallbackIndex) {
-  const adjustedIndex = HEADER_OFFSET + fallbackIndex;
-  const fallbackTNode = tView.data[adjustedIndex];
-  const fallbackLContainer = lView[adjustedIndex];
-  ngDevMode && assertTNode(fallbackTNode);
-  ngDevMode && assertLContainer(fallbackLContainer);
-  const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);
-  const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, void 0, {
-    dehydratedView
-  });
-  addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));
-}
-function ɵɵpropertyInterpolate(propName, v0, sanitizer) {
-  ɵɵpropertyInterpolate1(propName, "", v0, "", sanitizer);
-  return ɵɵpropertyInterpolate;
-}
-function ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);
-  }
-  return ɵɵpropertyInterpolate1;
-}
-function ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);
-  }
-  return ɵɵpropertyInterpolate2;
-}
-function ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);
-  }
-  return ɵɵpropertyInterpolate3;
-}
-function ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
-  }
-  return ɵɵpropertyInterpolate4;
-}
-function ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
-  }
-  return ɵɵpropertyInterpolate5;
-}
-function ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
-  }
-  return ɵɵpropertyInterpolate6;
-}
-function ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
-  }
-  return ɵɵpropertyInterpolate7;
-}
-function ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
-  }
-  return ɵɵpropertyInterpolate8;
-}
-function ɵɵpropertyInterpolateV(propName, values, sanitizer) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  if (interpolatedValue !== NO_CHANGE) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
-    if (ngDevMode) {
-      const interpolationInBetween = [values[0]];
-      for (let i = 2; i < values.length; i += 2) {
-        interpolationInBetween.push(values[i]);
-      }
-      storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);
-    }
-  }
-  return ɵɵpropertyInterpolateV;
-}
-function ɵɵcontentQuery(directiveIndex, predicate, flags, read) {
-  createContentQuery(directiveIndex, predicate, flags, read);
-}
-function ɵɵviewQuery(predicate, flags, read) {
-  createViewQuery(predicate, flags, read);
-}
-function ɵɵqueryRefresh(queryList) {
-  const lView = getLView();
-  const tView = getTView();
-  const queryIndex = getCurrentQueryIndex();
-  setCurrentQueryIndex(queryIndex + 1);
-  const tQuery = getTQuery(tView, queryIndex);
-  if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2) === 2)) {
-    if (tQuery.matches === null) {
-      queryList.reset([]);
-    } else {
-      const result = getQueryResults(lView, queryIndex);
-      queryList.reset(result, unwrapElementRef);
-      queryList.notifyOnChanges();
-    }
-    return true;
-  }
-  return false;
-}
-function ɵɵloadQuery() {
-  return loadQueryInternal(getLView(), getCurrentQueryIndex());
-}
-function ɵɵcontentQuerySignal(directiveIndex, target, predicate, flags, read) {
-  bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));
-}
-function ɵɵviewQuerySignal(target, predicate, flags, read) {
-  bindQueryToSignal(target, createViewQuery(predicate, flags, read));
-}
-function ɵɵqueryAdvance(indexOffset = 1) {
-  setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);
-}
-function store(tView, lView, index, value) {
-  if (index >= tView.data.length) {
-    tView.data[index] = null;
-    tView.blueprint[index] = null;
-  }
-  lView[index] = value;
-}
-function ɵɵreference(index) {
-  const contextLView = getContextLView();
-  return load(contextLView, HEADER_OFFSET + index);
-}
-function ɵɵstyleMapInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstyleMapInterpolateV(values) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  ɵɵstyleMap(interpolatedValue);
-}
-function ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate1;
-}
-function ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate2;
-}
-function ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate3;
-}
-function ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate4;
-}
-function ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate5;
-}
-function ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate6;
-}
-function ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate7;
-}
-function ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolate8;
-}
-function ɵɵstylePropInterpolateV(prop, values, valueSuffix) {
-  const lView = getLView();
-  const interpolatedValue = interpolationV(lView, values);
-  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
-  return ɵɵstylePropInterpolateV;
-}
-function ɵɵtext(index, value = "") {
-  const lView = getLView();
-  const tView = getTView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, "text nodes should be created before any bindings");
-  ngDevMode && assertIndexInRange(lView, adjustedIndex);
-  const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1, value, null) : tView.data[adjustedIndex];
-  const textNative = _locateOrCreateTextNode(tView, lView, tNode, value, index);
-  lView[adjustedIndex] = textNative;
-  if (wasLastNodeCreated()) {
-    appendChild(tView, lView, textNative, tNode);
-  }
-  setCurrentTNode(tNode, false);
-}
-var _locateOrCreateTextNode = (tView, lView, tNode, value, index) => {
-  lastNodeWasCreated(true);
-  return createTextNode(lView[RENDERER], value);
-};
-function locateOrCreateTextNodeImpl(tView, lView, tNode, value, index) {
-  const hydrationInfo = lView[HYDRATION];
-  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);
-  lastNodeWasCreated(isNodeCreationMode);
-  if (isNodeCreationMode) {
-    return createTextNode(lView[RENDERER], value);
-  }
-  const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);
-  ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);
-  ngDevMode && markRNodeAsClaimedByHydration(textNative);
-  return textNative;
-}
-function enableLocateOrCreateTextNodeImpl() {
-  _locateOrCreateTextNode = locateOrCreateTextNodeImpl;
-}
-function ɵɵtextInterpolate(v0) {
-  ɵɵtextInterpolate1("", v0, "");
-  return ɵɵtextInterpolate;
-}
-function ɵɵtextInterpolate1(prefix, v0, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation1(lView, prefix, v0, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate1;
-}
-function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate2;
-}
-function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate3;
-}
-function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate4;
-}
-function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate5;
-}
-function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate6;
-}
-function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate7;
-}
-function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
-  const lView = getLView();
-  const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolate8;
-}
-function ɵɵtextInterpolateV(values) {
-  const lView = getLView();
-  const interpolated = interpolationV(lView, values);
-  if (interpolated !== NO_CHANGE) {
-    textBindingInternal(lView, getSelectedIndex(), interpolated);
-  }
-  return ɵɵtextInterpolateV;
-}
-function ɵɵtwoWayProperty(propName, value, sanitizer) {
-  if (isWritableSignal(value)) {
-    value = value();
-  }
-  const lView = getLView();
-  const bindingIndex = nextBindingIndex();
-  if (bindingUpdated(lView, bindingIndex, value)) {
-    const tView = getTView();
-    const tNode = getSelectedTNode();
-    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
-    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
-  }
-  return ɵɵtwoWayProperty;
-}
-function ɵɵtwoWayBindingSet(target, value) {
-  const canWrite = isWritableSignal(target);
-  canWrite && target.set(value);
-  return canWrite;
-}
-function ɵɵtwoWayListener(eventName, listenerFn) {
-  const lView = getLView();
-  const tView = getTView();
-  const tNode = getCurrentTNode();
-  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);
-  return ɵɵtwoWayListener;
-}
-var UNINITIALIZED_LET = {};
-function ɵɵdeclareLet(index) {
-  const tView = getTView();
-  const lView = getLView();
-  const adjustedIndex = index + HEADER_OFFSET;
-  const tNode = getOrCreateTNode(tView, adjustedIndex, 128, null, null);
-  setCurrentTNode(tNode, false);
-  store(tView, lView, adjustedIndex, UNINITIALIZED_LET);
-  return ɵɵdeclareLet;
-}
-function ɵɵstoreLet(value) {
-  performanceMarkFeature("NgLet");
-  const tView = getTView();
-  const lView = getLView();
-  const index = getSelectedIndex();
-  store(tView, lView, index, value);
-  return value;
-}
-function ɵɵreadContextLet(index) {
-  const contextLView = getContextLView();
-  const value = load(contextLView, HEADER_OFFSET + index);
-  if (value === UNINITIALIZED_LET) {
-    throw new RuntimeError(314, ngDevMode && "Attempting to access a @let declaration whose value is not available yet");
-  }
-  return value;
-}
-function providersResolver(def, providers, viewProviders) {
-  const tView = getTView();
-  if (tView.firstCreatePass) {
-    const isComponent2 = isComponentDef(def);
-    resolveProvider(viewProviders, tView.data, tView.blueprint, isComponent2, true);
-    resolveProvider(providers, tView.data, tView.blueprint, isComponent2, false);
-  }
-}
-function resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent2, isViewProvider) {
-  provider = resolveForwardRef(provider);
-  if (Array.isArray(provider)) {
-    for (let i = 0; i < provider.length; i++) {
-      resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent2, isViewProvider);
-    }
-  } else {
-    const tView = getTView();
-    const lView = getLView();
-    const tNode = getCurrentTNode();
-    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);
-    const providerFactory = providerToFactory(provider);
-    if (ngDevMode) {
-      const injector = new NodeInjector(tNode, lView);
-      runInInjectorProfilerContext(injector, token, () => {
-        emitProviderConfiguredEvent(provider, isViewProvider);
-      });
-    }
-    const beginIndex = tNode.providerIndexes & 1048575;
-    const endIndex = tNode.directiveStart;
-    const cptViewProvidersCount = tNode.providerIndexes >> 20;
-    if (isTypeProvider(provider) || !provider.multi) {
-      const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);
-      const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);
-      if (existingFactoryIndex === -1) {
-        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
-        registerDestroyHooksIfSupported(tView, provider, tInjectables.length);
-        tInjectables.push(token);
-        tNode.directiveStart++;
-        tNode.directiveEnd++;
-        if (isViewProvider) {
-          tNode.providerIndexes += 1048576;
-        }
-        lInjectablesBlueprint.push(factory);
-        lView.push(factory);
-      } else {
-        lInjectablesBlueprint[existingFactoryIndex] = factory;
-        lView[existingFactoryIndex] = factory;
-      }
-    } else {
-      const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);
-      const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);
-      const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];
-      const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];
-      if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {
-        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
-        const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent2, providerFactory);
-        if (!isViewProvider && doesViewProvidersFactoryExist) {
-          lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;
-        }
-        registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);
-        tInjectables.push(token);
-        tNode.directiveStart++;
-        tNode.directiveEnd++;
-        if (isViewProvider) {
-          tNode.providerIndexes += 1048576;
-        }
-        lInjectablesBlueprint.push(factory);
-        lView.push(factory);
-      } else {
-        const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent2);
-        registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);
-      }
-      if (!isViewProvider && isComponent2 && doesViewProvidersFactoryExist) {
-        lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;
-      }
-    }
-  }
-}
-function registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {
-  const providerIsTypeProvider = isTypeProvider(provider);
-  const providerIsClassProvider = isClassProvider(provider);
-  if (providerIsTypeProvider || providerIsClassProvider) {
-    const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;
-    const prototype = classToken.prototype;
-    const ngOnDestroy = prototype.ngOnDestroy;
-    if (ngOnDestroy) {
-      const hooks = tView.destroyHooks || (tView.destroyHooks = []);
-      if (!providerIsTypeProvider && provider.multi) {
-        ngDevMode && assertDefined(indexInFactory, "indexInFactory when registering multi factory destroy hook");
-        const existingCallbacksIndex = hooks.indexOf(contextIndex);
-        if (existingCallbacksIndex === -1) {
-          hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);
-        } else {
-          hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);
-        }
-      } else {
-        hooks.push(contextIndex, ngOnDestroy);
-      }
-    }
-  }
-}
-function multiFactoryAdd(multiFactory2, factory, isComponentProvider) {
-  if (isComponentProvider) {
-    multiFactory2.componentProviders++;
-  }
-  return multiFactory2.multi.push(factory) - 1;
-}
-function indexOf(item, arr, begin, end) {
-  for (let i = begin; i < end; i++) {
-    if (arr[i] === item) return i;
-  }
-  return -1;
-}
-function multiProvidersFactoryResolver(_, tData, lData, tNode) {
-  return multiResolve(this.multi, []);
-}
-function multiViewProvidersFactoryResolver(_, tData, lView, tNode) {
-  const factories = this.multi;
-  let result;
-  if (this.providerFactory) {
-    const componentCount = this.providerFactory.componentProviders;
-    const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);
-    result = multiProviders.slice(0, componentCount);
-    multiResolve(factories, result);
-    for (let i = componentCount; i < multiProviders.length; i++) {
-      result.push(multiProviders[i]);
-    }
-  } else {
-    result = [];
-    multiResolve(factories, result);
-  }
-  return result;
-}
-function multiResolve(factories, result) {
-  for (let i = 0; i < factories.length; i++) {
-    const factory = factories[i];
-    result.push(factory());
-  }
-  return result;
-}
-function multiFactory(factoryFn, index, isViewProvider, isComponent2, f) {
-  const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);
-  factory.multi = [];
-  factory.index = index;
-  factory.componentProviders = 0;
-  multiFactoryAdd(factory, f, isComponent2 && !isViewProvider);
-  return factory;
-}
-function ɵɵProvidersFeature(providers, viewProviders = []) {
-  return (definition) => {
-    definition.providersResolver = (def, processProvidersFn) => {
-      return providersResolver(
-        def,
-        //
-        processProvidersFn ? processProvidersFn(providers) : providers,
-        //
-        viewProviders
-      );
-    };
-  };
-}
-function ɵɵExternalStylesFeature(styleUrls) {
-  return (definition) => {
-    if (styleUrls.length < 1) {
-      return;
-    }
-    definition.getExternalStyles = (encapsulationId) => {
-      const urls = styleUrls.map((value) => value + "?ngcomp" + (encapsulationId ? "=" + encodeURIComponent(encapsulationId) : "") + "&e=" + definition.encapsulation);
-      return urls;
-    };
-  };
-}
-function ɵɵsetComponentScope(type, directives, pipes) {
-  const def = type.ɵcmp;
-  def.directiveDefs = extractDefListOrFactory(
-    directives,
-    /* pipeDef */
-    false
-  );
-  def.pipeDefs = extractDefListOrFactory(
-    pipes,
-    /* pipeDef */
-    true
-  );
-}
-function ɵɵsetNgModuleScope(type, scope) {
-  return noSideEffects(() => {
-    const ngModuleDef = getNgModuleDef(type, true);
-    ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);
-    ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);
-    ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);
-    if (scope.bootstrap) {
-      ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);
-    }
-    depsTracker.registerNgModule(type, scope);
-  });
-}
-function convertToTypeArray(values) {
-  if (typeof values === "function") {
-    return values;
-  }
-  const flattenValues = flatten(values);
-  if (flattenValues.some(isForwardRef)) {
-    return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);
-  } else {
-    return flattenValues.map(maybeUnwrapModuleWithProviders);
-  }
-}
-function maybeUnwrapModuleWithProviders(value) {
-  return isModuleWithProviders(value) ? value.ngModule : value;
-}
-function ɵɵpureFunction0(slotOffset, pureFn, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) : getBinding(lView, bindingIndex);
-}
-function ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {
-  return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);
-}
-function ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {
-  return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);
-}
-function ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
-  return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);
-}
-function ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
-  return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);
-}
-function ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) : pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);
-}
-function ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);
-}
-function ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);
-}
-function ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {
-  const bindingIndex = getBindingRoot() + slotOffset;
-  const lView = getLView();
-  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
-  return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);
-}
-function ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {
-  return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);
-}
-function getPureFunctionReturnValue(lView, returnValueIndex) {
-  ngDevMode && assertIndexInRange(lView, returnValueIndex);
-  const lastReturnValue = lView[returnValueIndex];
-  return lastReturnValue === NO_CHANGE ? void 0 : lastReturnValue;
-}
-function pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);
-}
-function pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);
-}
-function pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);
-}
-function pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
-  const bindingIndex = bindingRoot + slotOffset;
-  return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);
-}
-function pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {
-  let bindingIndex = bindingRoot + slotOffset;
-  let different = false;
-  for (let i = 0; i < exps.length; i++) {
-    bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);
-  }
-  return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);
-}
-function ɵɵpipe(index, pipeName) {
-  const tView = getTView();
-  let pipeDef;
-  const adjustedIndex = index + HEADER_OFFSET;
-  if (tView.firstCreatePass) {
-    pipeDef = getPipeDef(pipeName, tView.pipeRegistry);
-    tView.data[adjustedIndex] = pipeDef;
-    if (pipeDef.onDestroy) {
-      (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);
-    }
-  } else {
-    pipeDef = tView.data[adjustedIndex];
-  }
-  const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));
-  let previousInjectorProfilerContext;
-  if (ngDevMode) {
-    previousInjectorProfilerContext = setInjectorProfilerContext({
-      injector: new NodeInjector(getCurrentTNode(), getLView()),
-      token: pipeDef.type
-    });
-  }
-  const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);
-  try {
-    const previousIncludeViewProviders = setIncludeViewProviders(false);
-    const pipeInstance = pipeFactory();
-    setIncludeViewProviders(previousIncludeViewProviders);
-    store(tView, getLView(), adjustedIndex, pipeInstance);
-    return pipeInstance;
-  } finally {
-    setInjectImplementation(previousInjectImplementation);
-    ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);
-  }
-}
-function getPipeDef(name, registry) {
-  if (registry) {
-    if (ngDevMode) {
-      const pipes = registry.filter((pipe) => pipe.name === name);
-      if (pipes.length > 1) {
-        console.warn(formatRuntimeError(313, getMultipleMatchingPipesMessage(name)));
-      }
-    }
-    for (let i = registry.length - 1; i >= 0; i--) {
-      const pipeDef = registry[i];
-      if (name === pipeDef.name) {
-        return pipeDef;
-      }
-    }
-  }
-  if (ngDevMode) {
-    throw new RuntimeError(-302, getPipeNotFoundErrorMessage(name));
-  }
-  return;
-}
-function getMultipleMatchingPipesMessage(name) {
-  const lView = getLView();
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context = declarationLView[CONTEXT];
-  const hostIsStandalone = isHostComponentStandalone(lView);
-  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : "";
-  const verifyMessage = `check ${hostIsStandalone ? "'@Component.imports' of this component" : "the imports of this module"}`;
-  const errorMessage = `Multiple pipes match the name \`${name}\`${componentInfoMessage}. ${verifyMessage}`;
-  return errorMessage;
-}
-function getPipeNotFoundErrorMessage(name) {
-  const lView = getLView();
-  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];
-  const context = declarationLView[CONTEXT];
-  const hostIsStandalone = isHostComponentStandalone(lView);
-  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : "";
-  const verifyMessage = `Verify that it is ${hostIsStandalone ? "included in the '@Component.imports' of this component" : "declared or imported in this module"}`;
-  const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;
-  return errorMessage;
-}
-function ɵɵpipeBind1(index, offset, v1) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);
-}
-function ɵɵpipeBind2(index, slotOffset, v1, v2) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);
-}
-function ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);
-}
-function ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);
-}
-function ɵɵpipeBindV(index, slotOffset, values) {
-  const adjustedIndex = index + HEADER_OFFSET;
-  const lView = getLView();
-  const pipeInstance = load(lView, adjustedIndex);
-  return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);
-}
-function isPure(lView, index) {
-  return lView[TVIEW].data[index].pure;
-}
-function ɵɵtemplateRefExtractor(tNode, lView) {
-  return createTemplateRef(tNode, lView);
-}
-function ɵɵgetComponentDepsFactory(type, rawImports) {
-  return () => {
-    try {
-      return depsTracker.getComponentDependencies(type, rawImports).dependencies;
-    } catch (e) {
-      console.error(`Computing dependencies in local compilation mode for the component "${type.name}" failed with the exception:`, e);
-      throw e;
-    }
-  };
-}
-function ɵsetClassDebugInfo(type, debugInfo) {
-  const def = getComponentDef(type);
-  if (def !== null) {
-    def.debugInfo = debugInfo;
-  }
-}
-function ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {
-  ngDevMode && assertComponentDef(type);
-  const oldDef = getComponentDef(type);
-  applyMetadata.apply(null, [type, namespaces, ...locals]);
-  if (oldDef.tView) {
-    const trackedViews = getTrackedLViews().values();
-    for (const root of trackedViews) {
-      if (root[FLAGS] & 512 && root[PARENT] === null) {
-        recreateMatchingLViews(oldDef, root);
-      }
-    }
-  }
-}
-function recreateMatchingLViews(def, rootLView) {
-  ngDevMode && assertDefined(def.tView, "Expected a component definition that has been instantiated at least once");
-  const tView = rootLView[TVIEW];
-  if (tView === def.tView) {
-    ngDevMode && assertComponentDef(def.type);
-    recreateLView(getComponentDef(def.type), rootLView);
-    return;
-  }
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const current = rootLView[i];
-    if (isLContainer(current)) {
-      for (let i2 = CONTAINER_HEADER_OFFSET; i2 < current.length; i2++) {
-        recreateMatchingLViews(def, current[i2]);
-      }
-    } else if (isLView(current)) {
-      recreateMatchingLViews(def, current);
-    }
-  }
-}
-function clearRendererCache(factory, def) {
-  factory.rendererByCompId?.delete(def.id);
-}
-function recreateLView(def, lView) {
-  const instance = lView[CONTEXT];
-  const host = lView[HOST];
-  const parentLView = lView[PARENT];
-  ngDevMode && assertLView(parentLView);
-  const tNode = lView[T_HOST];
-  ngDevMode && assertTNodeType(
-    tNode,
-    2
-    /* TNodeType.Element */
-  );
-  const newTView = getOrCreateComponentTView(def);
-  const rendererFactory = lView[ENVIRONMENT].rendererFactory;
-  clearRendererCache(rendererFactory, def);
-  const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(def), host, tNode, null, rendererFactory.createRenderer(host, def), null, null, null);
-  replaceLViewInTree(parentLView, lView, newLView, tNode.index);
-  destroyLView(lView[TVIEW], lView);
-  removeViewFromDOM(lView[TVIEW], lView);
-  resetProjectionState(tNode);
-  renderView(newTView, newLView, instance);
-  refreshView(newTView, newLView, newTView.template, instance);
-}
-function replaceLViewInTree(parentLView, oldLView, newLView, index) {
-  for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {
-    const current = parentLView[i];
-    if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {
-      current[NEXT] = newLView;
-      break;
-    }
-  }
-  if (parentLView[CHILD_HEAD] === oldLView) {
-    parentLView[CHILD_HEAD] = newLView;
-  }
-  if (parentLView[CHILD_TAIL] === oldLView) {
-    parentLView[CHILD_TAIL] = newLView;
-  }
-  newLView[NEXT] = oldLView[NEXT];
-  oldLView[NEXT] = null;
-  parentLView[index] = newLView;
-}
-function resetProjectionState(tNode) {
-  if (tNode.projection !== null) {
-    for (const current of tNode.projection) {
-      if (isTNodeShape(current)) {
-        current.projectionNext = null;
-        current.flags &= ~2;
-      }
-    }
-    tNode.projection = null;
-  }
-}
-var angularCoreEnv = /* @__PURE__ */ (() => ({
-  "ɵɵattribute": ɵɵattribute,
-  "ɵɵattributeInterpolate1": ɵɵattributeInterpolate1,
-  "ɵɵattributeInterpolate2": ɵɵattributeInterpolate2,
-  "ɵɵattributeInterpolate3": ɵɵattributeInterpolate3,
-  "ɵɵattributeInterpolate4": ɵɵattributeInterpolate4,
-  "ɵɵattributeInterpolate5": ɵɵattributeInterpolate5,
-  "ɵɵattributeInterpolate6": ɵɵattributeInterpolate6,
-  "ɵɵattributeInterpolate7": ɵɵattributeInterpolate7,
-  "ɵɵattributeInterpolate8": ɵɵattributeInterpolate8,
-  "ɵɵattributeInterpolateV": ɵɵattributeInterpolateV,
-  "ɵɵdefineComponent": ɵɵdefineComponent,
-  "ɵɵdefineDirective": ɵɵdefineDirective,
-  "ɵɵdefineInjectable": ɵɵdefineInjectable,
-  "ɵɵdefineInjector": ɵɵdefineInjector,
-  "ɵɵdefineNgModule": ɵɵdefineNgModule,
-  "ɵɵdefinePipe": ɵɵdefinePipe,
-  "ɵɵdirectiveInject": ɵɵdirectiveInject,
-  "ɵɵgetInheritedFactory": ɵɵgetInheritedFactory,
-  "ɵɵinject": ɵɵinject,
-  "ɵɵinjectAttribute": ɵɵinjectAttribute,
-  "ɵɵinvalidFactory": ɵɵinvalidFactory,
-  "ɵɵinvalidFactoryDep": ɵɵinvalidFactoryDep,
-  "ɵɵtemplateRefExtractor": ɵɵtemplateRefExtractor,
-  "ɵɵresetView": ɵɵresetView,
-  "ɵɵHostDirectivesFeature": ɵɵHostDirectivesFeature,
-  "ɵɵNgOnChangesFeature": ɵɵNgOnChangesFeature,
-  "ɵɵProvidersFeature": ɵɵProvidersFeature,
-  "ɵɵCopyDefinitionFeature": ɵɵCopyDefinitionFeature,
-  "ɵɵInheritDefinitionFeature": ɵɵInheritDefinitionFeature,
-  "ɵɵInputTransformsFeature": ɵɵInputTransformsFeature,
-  "ɵɵExternalStylesFeature": ɵɵExternalStylesFeature,
-  "ɵɵnextContext": ɵɵnextContext,
-  "ɵɵnamespaceHTML": ɵɵnamespaceHTML,
-  "ɵɵnamespaceMathML": ɵɵnamespaceMathML,
-  "ɵɵnamespaceSVG": ɵɵnamespaceSVG,
-  "ɵɵenableBindings": ɵɵenableBindings,
-  "ɵɵdisableBindings": ɵɵdisableBindings,
-  "ɵɵelementStart": ɵɵelementStart,
-  "ɵɵelementEnd": ɵɵelementEnd,
-  "ɵɵelement": ɵɵelement,
-  "ɵɵelementContainerStart": ɵɵelementContainerStart,
-  "ɵɵelementContainerEnd": ɵɵelementContainerEnd,
-  "ɵɵelementContainer": ɵɵelementContainer,
-  "ɵɵpureFunction0": ɵɵpureFunction0,
-  "ɵɵpureFunction1": ɵɵpureFunction1,
-  "ɵɵpureFunction2": ɵɵpureFunction2,
-  "ɵɵpureFunction3": ɵɵpureFunction3,
-  "ɵɵpureFunction4": ɵɵpureFunction4,
-  "ɵɵpureFunction5": ɵɵpureFunction5,
-  "ɵɵpureFunction6": ɵɵpureFunction6,
-  "ɵɵpureFunction7": ɵɵpureFunction7,
-  "ɵɵpureFunction8": ɵɵpureFunction8,
-  "ɵɵpureFunctionV": ɵɵpureFunctionV,
-  "ɵɵgetCurrentView": ɵɵgetCurrentView,
-  "ɵɵrestoreView": ɵɵrestoreView,
-  "ɵɵlistener": ɵɵlistener,
-  "ɵɵprojection": ɵɵprojection,
-  "ɵɵsyntheticHostProperty": ɵɵsyntheticHostProperty,
-  "ɵɵsyntheticHostListener": ɵɵsyntheticHostListener,
-  "ɵɵpipeBind1": ɵɵpipeBind1,
-  "ɵɵpipeBind2": ɵɵpipeBind2,
-  "ɵɵpipeBind3": ɵɵpipeBind3,
-  "ɵɵpipeBind4": ɵɵpipeBind4,
-  "ɵɵpipeBindV": ɵɵpipeBindV,
-  "ɵɵprojectionDef": ɵɵprojectionDef,
-  "ɵɵhostProperty": ɵɵhostProperty,
-  "ɵɵproperty": ɵɵproperty,
-  "ɵɵpropertyInterpolate": ɵɵpropertyInterpolate,
-  "ɵɵpropertyInterpolate1": ɵɵpropertyInterpolate1,
-  "ɵɵpropertyInterpolate2": ɵɵpropertyInterpolate2,
-  "ɵɵpropertyInterpolate3": ɵɵpropertyInterpolate3,
-  "ɵɵpropertyInterpolate4": ɵɵpropertyInterpolate4,
-  "ɵɵpropertyInterpolate5": ɵɵpropertyInterpolate5,
-  "ɵɵpropertyInterpolate6": ɵɵpropertyInterpolate6,
-  "ɵɵpropertyInterpolate7": ɵɵpropertyInterpolate7,
-  "ɵɵpropertyInterpolate8": ɵɵpropertyInterpolate8,
-  "ɵɵpropertyInterpolateV": ɵɵpropertyInterpolateV,
-  "ɵɵpipe": ɵɵpipe,
-  "ɵɵqueryRefresh": ɵɵqueryRefresh,
-  "ɵɵqueryAdvance": ɵɵqueryAdvance,
-  "ɵɵviewQuery": ɵɵviewQuery,
-  "ɵɵviewQuerySignal": ɵɵviewQuerySignal,
-  "ɵɵloadQuery": ɵɵloadQuery,
-  "ɵɵcontentQuery": ɵɵcontentQuery,
-  "ɵɵcontentQuerySignal": ɵɵcontentQuerySignal,
-  "ɵɵreference": ɵɵreference,
-  "ɵɵclassMap": ɵɵclassMap,
-  "ɵɵclassMapInterpolate1": ɵɵclassMapInterpolate1,
-  "ɵɵclassMapInterpolate2": ɵɵclassMapInterpolate2,
-  "ɵɵclassMapInterpolate3": ɵɵclassMapInterpolate3,
-  "ɵɵclassMapInterpolate4": ɵɵclassMapInterpolate4,
-  "ɵɵclassMapInterpolate5": ɵɵclassMapInterpolate5,
-  "ɵɵclassMapInterpolate6": ɵɵclassMapInterpolate6,
-  "ɵɵclassMapInterpolate7": ɵɵclassMapInterpolate7,
-  "ɵɵclassMapInterpolate8": ɵɵclassMapInterpolate8,
-  "ɵɵclassMapInterpolateV": ɵɵclassMapInterpolateV,
-  "ɵɵstyleMap": ɵɵstyleMap,
-  "ɵɵstyleMapInterpolate1": ɵɵstyleMapInterpolate1,
-  "ɵɵstyleMapInterpolate2": ɵɵstyleMapInterpolate2,
-  "ɵɵstyleMapInterpolate3": ɵɵstyleMapInterpolate3,
-  "ɵɵstyleMapInterpolate4": ɵɵstyleMapInterpolate4,
-  "ɵɵstyleMapInterpolate5": ɵɵstyleMapInterpolate5,
-  "ɵɵstyleMapInterpolate6": ɵɵstyleMapInterpolate6,
-  "ɵɵstyleMapInterpolate7": ɵɵstyleMapInterpolate7,
-  "ɵɵstyleMapInterpolate8": ɵɵstyleMapInterpolate8,
-  "ɵɵstyleMapInterpolateV": ɵɵstyleMapInterpolateV,
-  "ɵɵstyleProp": ɵɵstyleProp,
-  "ɵɵstylePropInterpolate1": ɵɵstylePropInterpolate1,
-  "ɵɵstylePropInterpolate2": ɵɵstylePropInterpolate2,
-  "ɵɵstylePropInterpolate3": ɵɵstylePropInterpolate3,
-  "ɵɵstylePropInterpolate4": ɵɵstylePropInterpolate4,
-  "ɵɵstylePropInterpolate5": ɵɵstylePropInterpolate5,
-  "ɵɵstylePropInterpolate6": ɵɵstylePropInterpolate6,
-  "ɵɵstylePropInterpolate7": ɵɵstylePropInterpolate7,
-  "ɵɵstylePropInterpolate8": ɵɵstylePropInterpolate8,
-  "ɵɵstylePropInterpolateV": ɵɵstylePropInterpolateV,
-  "ɵɵclassProp": ɵɵclassProp,
-  "ɵɵadvance": ɵɵadvance,
-  "ɵɵtemplate": ɵɵtemplate,
-  "ɵɵconditional": ɵɵconditional,
-  "ɵɵdefer": ɵɵdefer,
-  "ɵɵdeferWhen": ɵɵdeferWhen,
-  "ɵɵdeferOnIdle": ɵɵdeferOnIdle,
-  "ɵɵdeferOnImmediate": ɵɵdeferOnImmediate,
-  "ɵɵdeferOnTimer": ɵɵdeferOnTimer,
-  "ɵɵdeferOnHover": ɵɵdeferOnHover,
-  "ɵɵdeferOnInteraction": ɵɵdeferOnInteraction,
-  "ɵɵdeferOnViewport": ɵɵdeferOnViewport,
-  "ɵɵdeferPrefetchWhen": ɵɵdeferPrefetchWhen,
-  "ɵɵdeferPrefetchOnIdle": ɵɵdeferPrefetchOnIdle,
-  "ɵɵdeferPrefetchOnImmediate": ɵɵdeferPrefetchOnImmediate,
-  "ɵɵdeferPrefetchOnTimer": ɵɵdeferPrefetchOnTimer,
-  "ɵɵdeferPrefetchOnHover": ɵɵdeferPrefetchOnHover,
-  "ɵɵdeferPrefetchOnInteraction": ɵɵdeferPrefetchOnInteraction,
-  "ɵɵdeferPrefetchOnViewport": ɵɵdeferPrefetchOnViewport,
-  "ɵɵdeferHydrateWhen": ɵɵdeferHydrateWhen,
-  "ɵɵdeferHydrateNever": ɵɵdeferHydrateNever,
-  "ɵɵdeferHydrateOnIdle": ɵɵdeferHydrateOnIdle,
-  "ɵɵdeferHydrateOnImmediate": ɵɵdeferHydrateOnImmediate,
-  "ɵɵdeferHydrateOnTimer": ɵɵdeferHydrateOnTimer,
-  "ɵɵdeferHydrateOnHover": ɵɵdeferHydrateOnHover,
-  "ɵɵdeferHydrateOnInteraction": ɵɵdeferHydrateOnInteraction,
-  "ɵɵdeferHydrateOnViewport": ɵɵdeferHydrateOnViewport,
-  "ɵɵdeferEnableTimerScheduling": ɵɵdeferEnableTimerScheduling,
-  "ɵɵrepeater": ɵɵrepeater,
-  "ɵɵrepeaterCreate": ɵɵrepeaterCreate,
-  "ɵɵrepeaterTrackByIndex": ɵɵrepeaterTrackByIndex,
-  "ɵɵrepeaterTrackByIdentity": ɵɵrepeaterTrackByIdentity,
-  "ɵɵcomponentInstance": ɵɵcomponentInstance,
-  "ɵɵtext": ɵɵtext,
-  "ɵɵtextInterpolate": ɵɵtextInterpolate,
-  "ɵɵtextInterpolate1": ɵɵtextInterpolate1,
-  "ɵɵtextInterpolate2": ɵɵtextInterpolate2,
-  "ɵɵtextInterpolate3": ɵɵtextInterpolate3,
-  "ɵɵtextInterpolate4": ɵɵtextInterpolate4,
-  "ɵɵtextInterpolate5": ɵɵtextInterpolate5,
-  "ɵɵtextInterpolate6": ɵɵtextInterpolate6,
-  "ɵɵtextInterpolate7": ɵɵtextInterpolate7,
-  "ɵɵtextInterpolate8": ɵɵtextInterpolate8,
-  "ɵɵtextInterpolateV": ɵɵtextInterpolateV,
-  "ɵɵi18n": ɵɵi18n,
-  "ɵɵi18nAttributes": ɵɵi18nAttributes,
-  "ɵɵi18nExp": ɵɵi18nExp,
-  "ɵɵi18nStart": ɵɵi18nStart,
-  "ɵɵi18nEnd": ɵɵi18nEnd,
-  "ɵɵi18nApply": ɵɵi18nApply,
-  "ɵɵi18nPostprocess": ɵɵi18nPostprocess,
-  "ɵɵresolveWindow": ɵɵresolveWindow,
-  "ɵɵresolveDocument": ɵɵresolveDocument,
-  "ɵɵresolveBody": ɵɵresolveBody,
-  "ɵɵsetComponentScope": ɵɵsetComponentScope,
-  "ɵɵsetNgModuleScope": ɵɵsetNgModuleScope,
-  "ɵɵregisterNgModuleType": registerNgModuleType,
-  "ɵɵgetComponentDepsFactory": ɵɵgetComponentDepsFactory,
-  "ɵsetClassDebugInfo": ɵsetClassDebugInfo,
-  "ɵɵdeclareLet": ɵɵdeclareLet,
-  "ɵɵstoreLet": ɵɵstoreLet,
-  "ɵɵreadContextLet": ɵɵreadContextLet,
-  "ɵɵsanitizeHtml": ɵɵsanitizeHtml,
-  "ɵɵsanitizeStyle": ɵɵsanitizeStyle,
-  "ɵɵsanitizeResourceUrl": ɵɵsanitizeResourceUrl,
-  "ɵɵsanitizeScript": ɵɵsanitizeScript,
-  "ɵɵsanitizeUrl": ɵɵsanitizeUrl,
-  "ɵɵsanitizeUrlOrResourceUrl": ɵɵsanitizeUrlOrResourceUrl,
-  "ɵɵtrustConstantHtml": ɵɵtrustConstantHtml,
-  "ɵɵtrustConstantResourceUrl": ɵɵtrustConstantResourceUrl,
-  "ɵɵvalidateIframeAttribute": ɵɵvalidateIframeAttribute,
-  "forwardRef": forwardRef,
-  "resolveForwardRef": resolveForwardRef,
-  "ɵɵtwoWayProperty": ɵɵtwoWayProperty,
-  "ɵɵtwoWayBindingSet": ɵɵtwoWayBindingSet,
-  "ɵɵtwoWayListener": ɵɵtwoWayListener,
-  "ɵɵreplaceMetadata": ɵɵreplaceMetadata
-}))();
-var jitOptions = null;
-function setJitOptions(options) {
-  if (jitOptions !== null) {
-    if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {
-      ngDevMode && console.error("Provided value for `defaultEncapsulation` can not be changed once it has been set.");
-      return;
-    }
-    if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {
-      ngDevMode && console.error("Provided value for `preserveWhitespaces` can not be changed once it has been set.");
-      return;
-    }
-  }
-  jitOptions = options;
-}
-function getJitOptions() {
-  return jitOptions;
-}
-function resetJitOptions() {
-  jitOptions = null;
-}
-function patchModuleCompilation() {
-}
-var moduleQueue = [];
-function enqueueModuleForDelayedScoping(moduleType, ngModule) {
-  moduleQueue.push({
-    moduleType,
-    ngModule
-  });
-}
-var flushingModuleQueue = false;
-function flushModuleScopingQueueAsMuchAsPossible() {
-  if (!flushingModuleQueue) {
-    flushingModuleQueue = true;
-    try {
-      for (let i = moduleQueue.length - 1; i >= 0; i--) {
-        const {
-          moduleType,
-          ngModule
-        } = moduleQueue[i];
-        if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {
-          moduleQueue.splice(i, 1);
-          setScopeOnDeclaredComponents(moduleType, ngModule);
-        }
-      }
-    } finally {
-      flushingModuleQueue = false;
-    }
-  }
-}
-function isResolvedDeclaration(declaration) {
-  if (Array.isArray(declaration)) {
-    return declaration.every(isResolvedDeclaration);
-  }
-  return !!resolveForwardRef(declaration);
-}
-function compileNgModule(moduleType, ngModule = {}) {
-  patchModuleCompilation();
-  compileNgModuleDefs(moduleType, ngModule);
-  if (ngModule.id !== void 0) {
-    registerNgModuleType(moduleType, ngModule.id);
-  }
-  enqueueModuleForDelayedScoping(moduleType, ngModule);
-}
-function compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {
-  ngDevMode && assertDefined(moduleType, "Required value moduleType");
-  ngDevMode && assertDefined(ngModule, "Required value ngModule");
-  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
-  let ngModuleDef = null;
-  Object.defineProperty(moduleType, NG_MOD_DEF, {
-    configurable: true,
-    get: () => {
-      if (ngModuleDef === null) {
-        if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {
-          throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);
-        }
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {
-          type: moduleType,
-          bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),
-          declarations: declarations.map(resolveForwardRef),
-          imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),
-          exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),
-          schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,
-          id: ngModule.id || null
-        });
-        if (!ngModuleDef.schemas) {
-          ngModuleDef.schemas = [];
-        }
-      }
-      return ngModuleDef;
-    }
-  });
-  let ngFactoryDef = null;
-  Object.defineProperty(moduleType, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/ɵfac.js`, {
-          name: moduleType.name,
-          type: moduleType,
-          deps: reflectDependencies(moduleType),
-          target: compiler.FactoryTarget.NgModule,
-          typeArgumentCount: 0
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-  let ngInjectorDef = null;
-  Object.defineProperty(moduleType, NG_INJ_DEF, {
-    get: () => {
-      if (ngInjectorDef === null) {
-        ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);
-        const meta = {
-          name: moduleType.name,
-          type: moduleType,
-          providers: ngModule.providers || EMPTY_ARRAY,
-          imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]
-        };
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "NgModule",
-          type: moduleType
-        });
-        ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);
-      }
-      return ngInjectorDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function generateStandaloneInDeclarationsError(type, location2) {
-  const prefix = `Unexpected "${stringifyForError(type)}" found in the "declarations" array of the`;
-  const suffix = `"${stringifyForError(type)}" is marked as standalone and can't be declared in any NgModule - did you intend to import it instead (by adding it to the "imports" array)?`;
-  return `${prefix} ${location2}, ${suffix}`;
-}
-function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {
-  if (verifiedNgModule.get(moduleType)) return;
-  if (isStandalone(moduleType)) return;
-  verifiedNgModule.set(moduleType, true);
-  moduleType = resolveForwardRef(moduleType);
-  let ngModuleDef;
-  if (importingModule) {
-    ngModuleDef = getNgModuleDef(moduleType);
-    if (!ngModuleDef) {
-      throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);
-    }
-  } else {
-    ngModuleDef = getNgModuleDef(moduleType, true);
-  }
-  const errors = [];
-  const declarations = maybeUnwrapFn(ngModuleDef.declarations);
-  const imports = maybeUnwrapFn(ngModuleDef.imports);
-  flatten(imports).map(unwrapModuleWithProvidersImports).forEach((modOrStandaloneCmpt) => {
-    verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);
-    verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);
-  });
-  const exports = maybeUnwrapFn(ngModuleDef.exports);
-  declarations.forEach(verifyDeclarationsHaveDefinitions);
-  declarations.forEach(verifyDirectivesHaveSelector);
-  declarations.forEach((declarationType) => verifyNotStandalone(declarationType, moduleType));
-  const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];
-  exports.forEach(verifyExportsAreDeclaredOrReExported);
-  declarations.forEach((decl) => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
-  const ngModule = getAnnotation(moduleType, "NgModule");
-  if (ngModule) {
-    ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach((mod) => {
-      verifySemanticsOfNgModuleImport(mod, moduleType);
-      verifySemanticsOfNgModuleDef(mod, false, moduleType);
-    });
-    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);
-    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);
-  }
-  if (errors.length) {
-    throw new Error(errors.join("\n"));
-  }
-  function verifyDeclarationsHaveDefinitions(type) {
-    type = resolveForwardRef(type);
-    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-    if (!def) {
-      errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);
-    }
-  }
-  function verifyDirectivesHaveSelector(type) {
-    type = resolveForwardRef(type);
-    const def = getDirectiveDef(type);
-    if (!getComponentDef(type) && def && def.selectors.length == 0) {
-      errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);
-    }
-  }
-  function verifyNotStandalone(type, moduleType2) {
-    type = resolveForwardRef(type);
-    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);
-    if (def?.standalone) {
-      const location2 = `"${stringifyForError(moduleType2)}" NgModule`;
-      errors.push(generateStandaloneInDeclarationsError(type, location2));
-    }
-  }
-  function verifyExportsAreDeclaredOrReExported(type) {
-    type = resolveForwardRef(type);
-    const kind = getComponentDef(type) && "component" || getDirectiveDef(type) && "directive" || getPipeDef$1(type) && "pipe";
-    if (kind) {
-      if (combinedDeclarations.lastIndexOf(type) === -1) {
-        errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);
-      }
-    }
-  }
-  function verifyDeclarationIsUnique(type, suppressErrors) {
-    type = resolveForwardRef(type);
-    const existingModule = ownerNgModule.get(type);
-    if (existingModule && existingModule !== moduleType) {
-      if (!suppressErrors) {
-        const modules2 = [existingModule, moduleType].map(stringifyForError).sort();
-        errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules2[0]} and ${modules2[1]}! Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules2[0]} and ${modules2[1]}. You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules2[0]} and ${modules2[1]}.`);
-      }
-    } else {
-      ownerNgModule.set(type, moduleType);
-    }
-  }
-  function verifyComponentIsPartOfNgModule(type) {
-    type = resolveForwardRef(type);
-    const existingModule = ownerNgModule.get(type);
-    if (!existingModule && !isStandalone(type)) {
-      errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);
-    }
-  }
-  function verifyCorrectBootstrapType(type) {
-    type = resolveForwardRef(type);
-    if (!getComponentDef(type)) {
-      errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);
-    }
-    if (isStandalone(type)) {
-      errors.push(`The \`${stringifyForError(type)}\` class is a standalone component, which can not be used in the \`@NgModule.bootstrap\` array. Use the \`bootstrapApplication\` function for bootstrap instead.`);
-    }
-  }
-  function verifySemanticsOfNgModuleImport(type, importingModule2) {
-    type = resolveForwardRef(type);
-    const directiveDef = getComponentDef(type) || getDirectiveDef(type);
-    if (directiveDef !== null && !directiveDef.standalone) {
-      throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule2.name}'. Please add an @NgModule annotation.`);
-    }
-    const pipeDef = getPipeDef$1(type);
-    if (pipeDef !== null && !pipeDef.standalone) {
-      throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule2.name}'. Please add an @NgModule annotation.`);
-    }
-  }
-}
-function unwrapModuleWithProvidersImports(typeOrWithProviders) {
-  typeOrWithProviders = resolveForwardRef(typeOrWithProviders);
-  return typeOrWithProviders.ngModule || typeOrWithProviders;
-}
-function getAnnotation(type, name) {
-  let annotation = null;
-  collect(type.__annotations__);
-  collect(type.decorators);
-  return annotation;
-  function collect(annotations) {
-    if (annotations) {
-      annotations.forEach(readAnnotation);
-    }
-  }
-  function readAnnotation(decorator) {
-    if (!annotation) {
-      const proto = Object.getPrototypeOf(decorator);
-      if (proto.ngMetadataName == name) {
-        annotation = decorator;
-      } else if (decorator.type) {
-        const proto2 = Object.getPrototypeOf(decorator.type);
-        if (proto2.ngMetadataName == name) {
-          annotation = decorator.args[0];
-        }
-      }
-    }
-  }
-}
-var ownerNgModule = /* @__PURE__ */ new WeakMap();
-var verifiedNgModule = /* @__PURE__ */ new WeakMap();
-function resetCompiledComponents() {
-  ownerNgModule = /* @__PURE__ */ new WeakMap();
-  verifiedNgModule = /* @__PURE__ */ new WeakMap();
-  moduleQueue.length = 0;
-  GENERATED_COMP_IDS.clear();
-}
-function computeCombinedExports(type) {
-  type = resolveForwardRef(type);
-  const ngModuleDef = getNgModuleDef(type);
-  if (ngModuleDef === null) {
-    return [type];
-  }
-  return flatten(maybeUnwrapFn(ngModuleDef.exports).map((type2) => {
-    const ngModuleDef2 = getNgModuleDef(type2);
-    if (ngModuleDef2) {
-      verifySemanticsOfNgModuleDef(type2, false);
-      return computeCombinedExports(type2);
-    } else {
-      return type2;
-    }
-  }));
-}
-function setScopeOnDeclaredComponents(moduleType, ngModule) {
-  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
-  const transitiveScopes = transitiveScopesFor(moduleType);
-  declarations.forEach((declaration) => {
-    declaration = resolveForwardRef(declaration);
-    if (declaration.hasOwnProperty(NG_COMP_DEF)) {
-      const component = declaration;
-      const componentDef = getComponentDef(component);
-      patchComponentDefWithScope(componentDef, transitiveScopes);
-    } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {
-      declaration.ngSelectorScope = moduleType;
-    }
-  });
-}
-function patchComponentDefWithScope(componentDef, transitiveScopes) {
-  componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map((dir) => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter((def) => !!def);
-  componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map((pipe) => getPipeDef$1(pipe));
-  componentDef.schemas = transitiveScopes.schemas;
-  componentDef.tView = null;
-}
-function transitiveScopesFor(type) {
-  if (isNgModule(type)) {
-    if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      const scope = depsTracker.getNgModuleScope(type);
-      const def = getNgModuleDef(type, true);
-      return __spreadValues({
-        schemas: def.schemas || null
-      }, scope);
-    } else {
-      return transitiveScopesForNgModule(type);
-    }
-  } else if (isStandalone(type)) {
-    const directiveDef = getComponentDef(type) || getDirectiveDef(type);
-    if (directiveDef !== null) {
-      return {
-        schemas: null,
-        compilation: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set()
-        },
-        exported: {
-          directives: /* @__PURE__ */ new Set([type]),
-          pipes: /* @__PURE__ */ new Set()
-        }
-      };
-    }
-    const pipeDef = getPipeDef$1(type);
-    if (pipeDef !== null) {
-      return {
-        schemas: null,
-        compilation: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set()
-        },
-        exported: {
-          directives: /* @__PURE__ */ new Set(),
-          pipes: /* @__PURE__ */ new Set([type])
-        }
-      };
-    }
-  }
-  throw new Error(`${type.name} does not have a module def (ɵmod property)`);
-}
-function transitiveScopesForNgModule(moduleType) {
-  const def = getNgModuleDef(moduleType, true);
-  if (def.transitiveCompileScopes !== null) {
-    return def.transitiveCompileScopes;
-  }
-  const scopes = {
-    schemas: def.schemas || null,
-    compilation: {
-      directives: /* @__PURE__ */ new Set(),
-      pipes: /* @__PURE__ */ new Set()
-    },
-    exported: {
-      directives: /* @__PURE__ */ new Set(),
-      pipes: /* @__PURE__ */ new Set()
-    }
-  };
-  maybeUnwrapFn(def.imports).forEach((imported) => {
-    const importedScope = transitiveScopesFor(imported);
-    importedScope.exported.directives.forEach((entry) => scopes.compilation.directives.add(entry));
-    importedScope.exported.pipes.forEach((entry) => scopes.compilation.pipes.add(entry));
-  });
-  maybeUnwrapFn(def.declarations).forEach((declared) => {
-    const declaredWithDefs = declared;
-    if (getPipeDef$1(declaredWithDefs)) {
-      scopes.compilation.pipes.add(declared);
-    } else {
-      scopes.compilation.directives.add(declared);
-    }
-  });
-  maybeUnwrapFn(def.exports).forEach((exported) => {
-    const exportedType = exported;
-    if (isNgModule(exportedType)) {
-      const exportedScope = transitiveScopesFor(exportedType);
-      exportedScope.exported.directives.forEach((entry) => {
-        scopes.compilation.directives.add(entry);
-        scopes.exported.directives.add(entry);
-      });
-      exportedScope.exported.pipes.forEach((entry) => {
-        scopes.compilation.pipes.add(entry);
-        scopes.exported.pipes.add(entry);
-      });
-    } else if (getPipeDef$1(exportedType)) {
-      scopes.exported.pipes.add(exportedType);
-    } else {
-      scopes.exported.directives.add(exportedType);
-    }
-  });
-  def.transitiveCompileScopes = scopes;
-  return scopes;
-}
-function expandModuleWithProviders(value) {
-  if (isModuleWithProviders(value)) {
-    return value.ngModule;
-  }
-  return value;
-}
-var compilationDepth = 0;
-function compileComponent(type, metadata) {
-  (typeof ngDevMode === "undefined" || ngDevMode) && initNgDevMode();
-  let ngComponentDef = null;
-  maybeQueueResolutionOfComponentResources(type, metadata);
-  addDirectiveFactoryDef(type, metadata);
-  Object.defineProperty(type, NG_COMP_DEF, {
-    get: () => {
-      if (ngComponentDef === null) {
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "component",
-          type
-        });
-        if (componentNeedsResolution(metadata)) {
-          const error = [`Component '${type.name}' is not resolved:`];
-          if (metadata.templateUrl) {
-            error.push(` - templateUrl: ${metadata.templateUrl}`);
-          }
-          if (metadata.styleUrls && metadata.styleUrls.length) {
-            error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);
-          }
-          if (metadata.styleUrl) {
-            error.push(` - styleUrl: ${metadata.styleUrl}`);
-          }
-          error.push(`Did you run and wait for 'resolveComponentResources()'?`);
-          throw new Error(error.join("\n"));
-        }
-        const options = getJitOptions();
-        let preserveWhitespaces = metadata.preserveWhitespaces;
-        if (preserveWhitespaces === void 0) {
-          if (options !== null && options.preserveWhitespaces !== void 0) {
-            preserveWhitespaces = options.preserveWhitespaces;
-          } else {
-            preserveWhitespaces = false;
-          }
-        }
-        let encapsulation = metadata.encapsulation;
-        if (encapsulation === void 0) {
-          if (options !== null && options.defaultEncapsulation !== void 0) {
-            encapsulation = options.defaultEncapsulation;
-          } else {
-            encapsulation = ViewEncapsulation.Emulated;
-          }
-        }
-        const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;
-        const meta = __spreadProps(__spreadValues({}, directiveMetadata(type, metadata)), {
-          typeSourceSpan: compiler.createParseSourceSpan("Component", type.name, templateUrl),
-          template: metadata.template || "",
-          preserveWhitespaces,
-          styles: typeof metadata.styles === "string" ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,
-          animations: metadata.animations,
-          // JIT components are always compiled against an empty set of `declarations`. Instead, the
-          // `directiveDefs` and `pipeDefs` are updated at a later point:
-          //  * for NgModule-based components, they're set when the NgModule which declares the
-          //    component resolves in the module scoping queue
-          //  * for standalone components, they're set just below, after `compileComponent`.
-          declarations: [],
-          changeDetection: metadata.changeDetection,
-          encapsulation,
-          interpolation: metadata.interpolation,
-          viewProviders: metadata.viewProviders || null
-        });
-        compilationDepth++;
-        try {
-          if (meta.usesInheritance) {
-            addDirectiveDefToUndecoratedParents(type);
-          }
-          ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);
-          if (meta.isStandalone) {
-            const imports = flatten(metadata.imports || EMPTY_ARRAY);
-            const {
-              directiveDefs,
-              pipeDefs
-            } = getStandaloneDefFunctions(type, imports);
-            ngComponentDef.directiveDefs = directiveDefs;
-            ngComponentDef.pipeDefs = pipeDefs;
-            ngComponentDef.dependencies = () => imports.map(resolveForwardRef);
-          }
-        } finally {
-          compilationDepth--;
-        }
-        if (compilationDepth === 0) {
-          flushModuleScopingQueueAsMuchAsPossible();
-        }
-        if (hasSelectorScope(type)) {
-          const scopes = transitiveScopesFor(type.ngSelectorScope);
-          patchComponentDefWithScope(ngComponentDef, scopes);
-        }
-        if (metadata.schemas) {
-          if (meta.isStandalone) {
-            ngComponentDef.schemas = metadata.schemas;
-          } else {
-            throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);
-          }
-        } else if (meta.isStandalone) {
-          ngComponentDef.schemas = [];
-        }
-      }
-      return ngComponentDef;
-    },
-    set: (def) => {
-      ngComponentDef = def;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getStandaloneDefFunctions(type, imports) {
-  let cachedDirectiveDefs = null;
-  let cachedPipeDefs = null;
-  const directiveDefs = () => {
-    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      if (cachedDirectiveDefs === null) {
-        cachedDirectiveDefs = [getComponentDef(type)];
-        const seen = /* @__PURE__ */ new Set([type]);
-        for (const rawDep of imports) {
-          ngDevMode && verifyStandaloneImport(rawDep, type);
-          const dep = resolveForwardRef(rawDep);
-          if (seen.has(dep)) {
-            continue;
-          }
-          seen.add(dep);
-          if (!!getNgModuleDef(dep)) {
-            const scope = transitiveScopesFor(dep);
-            for (const dir of scope.exported.directives) {
-              const def = getComponentDef(dir) || getDirectiveDef(dir);
-              if (def && !seen.has(dir)) {
-                seen.add(dir);
-                cachedDirectiveDefs.push(def);
-              }
-            }
-          } else {
-            const def = getComponentDef(dep) || getDirectiveDef(dep);
-            if (def) {
-              cachedDirectiveDefs.push(def);
-            }
-          }
-        }
-      }
-      return cachedDirectiveDefs;
-    } else {
-      if (ngDevMode) {
-        for (const rawDep of imports) {
-          verifyStandaloneImport(rawDep, type);
-        }
-      }
-      if (!isComponent(type)) {
-        return [];
-      }
-      const scope = depsTracker.getStandaloneComponentScope(type, imports);
-      return [...scope.compilation.directives].map((p) => getComponentDef(p) || getDirectiveDef(p)).filter((d) => d !== null);
-    }
-  };
-  const pipeDefs = () => {
-    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {
-      if (cachedPipeDefs === null) {
-        cachedPipeDefs = [];
-        const seen = /* @__PURE__ */ new Set();
-        for (const rawDep of imports) {
-          const dep = resolveForwardRef(rawDep);
-          if (seen.has(dep)) {
-            continue;
-          }
-          seen.add(dep);
-          if (!!getNgModuleDef(dep)) {
-            const scope = transitiveScopesFor(dep);
-            for (const pipe of scope.exported.pipes) {
-              const def = getPipeDef$1(pipe);
-              if (def && !seen.has(pipe)) {
-                seen.add(pipe);
-                cachedPipeDefs.push(def);
-              }
-            }
-          } else {
-            const def = getPipeDef$1(dep);
-            if (def) {
-              cachedPipeDefs.push(def);
-            }
-          }
-        }
-      }
-      return cachedPipeDefs;
-    } else {
-      if (ngDevMode) {
-        for (const rawDep of imports) {
-          verifyStandaloneImport(rawDep, type);
-        }
-      }
-      if (!isComponent(type)) {
-        return [];
-      }
-      const scope = depsTracker.getStandaloneComponentScope(type, imports);
-      return [...scope.compilation.pipes].map((p) => getPipeDef$1(p)).filter((d) => d !== null);
-    }
-  };
-  return {
-    directiveDefs,
-    pipeDefs
-  };
-}
-function hasSelectorScope(component) {
-  return component.ngSelectorScope !== void 0;
-}
-function compileDirective(type, directive) {
-  let ngDirectiveDef = null;
-  addDirectiveFactoryDef(type, directive || {});
-  Object.defineProperty(type, NG_DIR_DEF, {
-    get: () => {
-      if (ngDirectiveDef === null) {
-        const meta = getDirectiveMetadata(type, directive || {});
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "directive",
-          type
-        });
-        ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);
-      }
-      return ngDirectiveDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getDirectiveMetadata(type, metadata) {
-  const name = type && type.name;
-  const sourceMapUrl = `ng:///${name}/ɵdir.js`;
-  const compiler = getCompilerFacade({
-    usage: 0,
-    kind: "directive",
-    type
-  });
-  const facade = directiveMetadata(type, metadata);
-  facade.typeSourceSpan = compiler.createParseSourceSpan("Directive", name, sourceMapUrl);
-  if (facade.usesInheritance) {
-    addDirectiveDefToUndecoratedParents(type);
-  }
-  return {
-    metadata: facade,
-    sourceMapUrl
-  };
-}
-function addDirectiveFactoryDef(type, metadata) {
-  let ngFactoryDef = null;
-  Object.defineProperty(type, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const meta = getDirectiveMetadata(type, metadata);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "directive",
-          type
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, {
-          name: meta.metadata.name,
-          type: meta.metadata.type,
-          typeArgumentCount: 0,
-          deps: reflectDependencies(type),
-          target: compiler.FactoryTarget.Directive
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function extendsDirectlyFromObject(type) {
-  return Object.getPrototypeOf(type.prototype) === Object.prototype;
-}
-function directiveMetadata(type, metadata) {
-  const reflect = getReflect();
-  const propMetadata = reflect.ownPropMetadata(type);
-  return {
-    name: type.name,
-    type,
-    selector: metadata.selector !== void 0 ? metadata.selector : null,
-    host: metadata.host || EMPTY_OBJ,
-    propMetadata,
-    inputs: metadata.inputs || EMPTY_ARRAY,
-    outputs: metadata.outputs || EMPTY_ARRAY,
-    queries: extractQueriesMetadata(type, propMetadata, isContentQuery),
-    lifecycle: {
-      usesOnChanges: reflect.hasLifecycleHook(type, "ngOnChanges")
-    },
-    typeSourceSpan: null,
-    usesInheritance: !extendsDirectlyFromObject(type),
-    exportAs: extractExportAs(metadata.exportAs),
-    providers: metadata.providers || null,
-    viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),
-    isStandalone: metadata.standalone === void 0 ? true : !!metadata.standalone,
-    isSignal: !!metadata.signals,
-    hostDirectives: metadata.hostDirectives?.map((directive) => typeof directive === "function" ? {
-      directive
-    } : directive) || null
-  };
-}
-function addDirectiveDefToUndecoratedParents(type) {
-  const objPrototype = Object.prototype;
-  let parent = Object.getPrototypeOf(type.prototype).constructor;
-  while (parent && parent !== objPrototype) {
-    if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {
-      compileDirective(parent, null);
-    }
-    parent = Object.getPrototypeOf(parent);
-  }
-}
-function convertToR3QueryPredicate(selector) {
-  return typeof selector === "string" ? splitByComma(selector) : resolveForwardRef(selector);
-}
-function convertToR3QueryMetadata(propertyName, ann) {
-  return {
-    propertyName,
-    predicate: convertToR3QueryPredicate(ann.selector),
-    descendants: ann.descendants,
-    first: ann.first,
-    read: ann.read ? ann.read : null,
-    static: !!ann.static,
-    emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,
-    isSignal: !!ann.isSignal
-  };
-}
-function extractQueriesMetadata(type, propMetadata, isQueryAnn) {
-  const queriesMeta = [];
-  for (const field in propMetadata) {
-    if (propMetadata.hasOwnProperty(field)) {
-      const annotations = propMetadata[field];
-      annotations.forEach((ann) => {
-        if (isQueryAnn(ann)) {
-          if (!ann.selector) {
-            throw new Error(`Can't construct a query for the property "${field}" of "${stringifyForError(type)}" since the query selector wasn't defined.`);
-          }
-          if (annotations.some(isInputAnnotation)) {
-            throw new Error(`Cannot combine @Input decorators with query decorators`);
-          }
-          queriesMeta.push(convertToR3QueryMetadata(field, ann));
-        }
-      });
-    }
-  }
-  return queriesMeta;
-}
-function extractExportAs(exportAs) {
-  return exportAs === void 0 ? null : splitByComma(exportAs);
-}
-function isContentQuery(value) {
-  const name = value.ngMetadataName;
-  return name === "ContentChild" || name === "ContentChildren";
-}
-function isViewQuery(value) {
-  const name = value.ngMetadataName;
-  return name === "ViewChild" || name === "ViewChildren";
-}
-function isInputAnnotation(value) {
-  return value.ngMetadataName === "Input";
-}
-function splitByComma(value) {
-  return value.split(",").map((piece) => piece.trim());
-}
-var LIFECYCLE_HOOKS = ["ngOnChanges", "ngOnInit", "ngOnDestroy", "ngDoCheck", "ngAfterViewInit", "ngAfterViewChecked", "ngAfterContentInit", "ngAfterContentChecked"];
-function shouldAddAbstractDirective(type) {
-  const reflect = getReflect();
-  if (LIFECYCLE_HOOKS.some((hookName) => reflect.hasLifecycleHook(type, hookName))) {
-    return true;
-  }
-  const propMetadata = reflect.propMetadata(type);
-  for (const field in propMetadata) {
-    const annotations = propMetadata[field];
-    for (let i = 0; i < annotations.length; i++) {
-      const current = annotations[i];
-      const metadataName = current.ngMetadataName;
-      if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === "Output" || metadataName === "HostBinding" || metadataName === "HostListener") {
-        return true;
-      }
-    }
-  }
-  return false;
-}
-function compilePipe(type, meta) {
-  let ngPipeDef = null;
-  let ngFactoryDef = null;
-  Object.defineProperty(type, NG_FACTORY_DEF, {
-    get: () => {
-      if (ngFactoryDef === null) {
-        const metadata = getPipeMetadata(type, meta);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "pipe",
-          type: metadata.type
-        });
-        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, {
-          name: metadata.name,
-          type: metadata.type,
-          typeArgumentCount: 0,
-          deps: reflectDependencies(type),
-          target: compiler.FactoryTarget.Pipe
-        });
-      }
-      return ngFactoryDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-  Object.defineProperty(type, NG_PIPE_DEF, {
-    get: () => {
-      if (ngPipeDef === null) {
-        const metadata = getPipeMetadata(type, meta);
-        const compiler = getCompilerFacade({
-          usage: 0,
-          kind: "pipe",
-          type: metadata.type
-        });
-        ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);
-      }
-      return ngPipeDef;
-    },
-    // Make the property configurable in dev mode to allow overriding in tests
-    configurable: !!ngDevMode
-  });
-}
-function getPipeMetadata(type, meta) {
-  return {
-    type,
-    name: type.name,
-    pipeName: meta.name,
-    pure: meta.pure !== void 0 ? meta.pure : true,
-    isStandalone: meta.standalone === void 0 ? true : !!meta.standalone
-  };
-}
-var Directive = makeDecorator("Directive", (dir = {}) => dir, void 0, void 0, (type, meta) => compileDirective(type, meta));
-var Component = makeDecorator("Component", (c = {}) => __spreadValues({
-  changeDetection: ChangeDetectionStrategy.Default
-}, c), Directive, void 0, (type, meta) => compileComponent(type, meta));
-var Pipe = makeDecorator("Pipe", (p) => __spreadValues({
-  pure: true
-}, p), void 0, void 0, (type, meta) => compilePipe(type, meta));
-var Input = makePropDecorator("Input", (arg) => {
-  if (!arg) {
-    return {};
-  }
-  return typeof arg === "string" ? {
-    alias: arg
-  } : arg;
-});
-var Output = makePropDecorator("Output", (alias) => ({
-  alias
-}));
-var HostBinding = makePropDecorator("HostBinding", (hostPropertyName) => ({
-  hostPropertyName
-}));
-var HostListener = makePropDecorator("HostListener", (eventName, args) => ({
-  eventName,
-  args
-}));
-var NgModule = makeDecorator(
-  "NgModule",
-  (ngModule) => ngModule,
-  void 0,
-  void 0,
-  /**
-   * Decorator that marks the following class as an NgModule, and supplies
-   * configuration metadata for it.
-   *
-   * * The `declarations` option configures the compiler
-   * with information about what belongs to the NgModule.
-   * * The `providers` options configures the NgModule's injector to provide
-   * dependencies the NgModule members.
-   * * The `imports` and `exports` options bring in members from other modules, and make
-   * this module's members available to others.
-   */
-  (type, meta) => compileNgModule(type, meta)
-);
-var Version = class {
-  full;
-  major;
-  minor;
-  patch;
-  constructor(full) {
-    this.full = full;
-    const parts = full.split(".");
-    this.major = parts[0];
-    this.minor = parts[1];
-    this.patch = parts.slice(2).join(".");
-  }
-};
-var VERSION = new Version("19.0.5");
-var ModuleWithComponentFactories = class {
-  ngModuleFactory;
-  componentFactories;
-  constructor(ngModuleFactory, componentFactories) {
-    this.ngModuleFactory = ngModuleFactory;
-    this.componentFactories = componentFactories;
-  }
-};
-var Compiler = class _Compiler {
-  /**
-   * Compiles the given NgModule and all of its components. All templates of the components
-   * have to be inlined.
-   */
-  compileModuleSync(moduleType) {
-    return new NgModuleFactory(moduleType);
-  }
-  /**
-   * Compiles the given NgModule and all of its components
-   */
-  compileModuleAsync(moduleType) {
-    return Promise.resolve(this.compileModuleSync(moduleType));
-  }
-  /**
-   * Same as {@link Compiler#compileModuleSync compileModuleSync} but also creates ComponentFactories for all components.
-   */
-  compileModuleAndAllComponentsSync(moduleType) {
-    const ngModuleFactory = this.compileModuleSync(moduleType);
-    const moduleDef = getNgModuleDef(moduleType);
-    const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {
-      const componentDef = getComponentDef(declaration);
-      componentDef && factories.push(new ComponentFactory(componentDef));
-      return factories;
-    }, []);
-    return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
-  }
-  /**
-   * Same as {@link Compiler#compileModuleAsync compileModuleAsync} but also creates ComponentFactories for all components.
-   */
-  compileModuleAndAllComponentsAsync(moduleType) {
-    return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));
-  }
-  /**
-   * Clears all caches.
-   */
-  clearCache() {
-  }
-  /**
-   * Clears the cache for the given component/ngModule.
-   */
-  clearCacheFor(type) {
-  }
-  /**
-   * Returns the id for a given NgModule, if one is defined and known to the compiler.
-   */
-  getModuleId(moduleType) {
-    return void 0;
-  }
-  static ɵfac = function Compiler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Compiler)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Compiler,
-    factory: _Compiler.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var COMPILER_OPTIONS = new InjectionToken(ngDevMode ? "compilerOptions" : "");
-var CompilerFactory = class {
-};
-function compileNgModuleFactory(injector, options, moduleType) {
-  ngDevMode && assertNgModuleType(moduleType);
-  const moduleFactory = new NgModuleFactory(moduleType);
-  if (typeof ngJitMode !== "undefined" && !ngJitMode) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);
-  setJitOptions({
-    defaultEncapsulation: _lastDefined(compilerOptions.map((opts) => opts.defaultEncapsulation)),
-    preserveWhitespaces: _lastDefined(compilerOptions.map((opts) => opts.preserveWhitespaces))
-  });
-  if (isComponentResourceResolutionQueueEmpty()) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compilerProviders = compilerOptions.flatMap((option) => option.providers ?? []);
-  if (compilerProviders.length === 0) {
-    return Promise.resolve(moduleFactory);
-  }
-  const compiler = getCompilerFacade({
-    usage: 0,
-    kind: "NgModule",
-    type: moduleType
-  });
-  const compilerInjector = Injector.create({
-    providers: compilerProviders
-  });
-  const resourceLoader = compilerInjector.get(compiler.ResourceLoader);
-  return resolveComponentResources((url) => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);
-}
-function _lastDefined(args) {
-  for (let i = args.length - 1; i >= 0; i--) {
-    if (args[i] !== void 0) {
-      return args[i];
-    }
-  }
-  return void 0;
-}
-var NgZoneChangeDetectionScheduler = class _NgZoneChangeDetectionScheduler {
-  zone = inject(NgZone);
-  changeDetectionScheduler = inject(ChangeDetectionScheduler);
-  applicationRef = inject(ApplicationRef);
-  _onMicrotaskEmptySubscription;
-  initialize() {
-    if (this._onMicrotaskEmptySubscription) {
-      return;
-    }
-    this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({
-      next: () => {
-        if (this.changeDetectionScheduler.runningTick) {
-          return;
-        }
-        this.zone.run(() => {
-          this.applicationRef.tick();
-        });
-      }
-    });
-  }
-  ngOnDestroy() {
-    this._onMicrotaskEmptySubscription?.unsubscribe();
-  }
-  static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgZoneChangeDetectionScheduler)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgZoneChangeDetectionScheduler,
-    factory: _NgZoneChangeDetectionScheduler.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "provideZoneChangeDetection token" : "", {
-  factory: () => false
-});
-function internalProvideZoneChangeDetection({
-  ngZoneFactory,
-  ignoreChangesOutsideZone,
-  scheduleInRootZone
-}) {
-  ngZoneFactory ??= () => new NgZone(__spreadProps(__spreadValues({}, getNgZoneOptions()), {
-    scheduleInRootZone
-  }));
-  return [
-    {
-      provide: NgZone,
-      useFactory: ngZoneFactory
-    },
-    {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {
-          optional: true
-        });
-        if ((typeof ngDevMode === "undefined" || ngDevMode) && ngZoneChangeDetectionScheduler === null) {
-          throw new RuntimeError(402, `A required Injectable was not found in the dependency injection tree. If you are bootstrapping an NgModule, make sure that the \`BrowserModule\` is imported.`);
-        }
-        return () => ngZoneChangeDetectionScheduler.initialize();
-      }
-    },
-    {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useFactory: () => {
-        const service = inject(ZoneStablePendingTask);
-        return () => {
-          service.initialize();
-        };
-      }
-    },
-    // Always disable scheduler whenever explicitly disabled, even if another place called
-    // `provideZoneChangeDetection` without the 'ignore' option.
-    ignoreChangesOutsideZone === true ? {
-      provide: ZONELESS_SCHEDULER_DISABLED,
-      useValue: true
-    } : [],
-    {
-      provide: SCHEDULE_IN_ROOT_ZONE,
-      useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT
-    }
-  ];
-}
-function provideZoneChangeDetection(options) {
-  const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
-  const scheduleInRootZone = options?.scheduleInRootZone;
-  const zoneProviders = internalProvideZoneChangeDetection({
-    ngZoneFactory: () => {
-      const ngZoneOptions = getNgZoneOptions(options);
-      ngZoneOptions.scheduleInRootZone = scheduleInRootZone;
-      if (ngZoneOptions.shouldCoalesceEventChangeDetection) {
-        performanceMarkFeature("NgZone_CoalesceEvent");
-      }
-      return new NgZone(ngZoneOptions);
-    },
-    ignoreChangesOutsideZone,
-    scheduleInRootZone
-  });
-  return makeEnvironmentProviders([{
-    provide: PROVIDED_NG_ZONE,
-    useValue: true
-  }, {
-    provide: ZONELESS_ENABLED,
-    useValue: false
-  }, zoneProviders]);
-}
-function getNgZoneOptions(options) {
-  return {
-    enableLongStackTrace: typeof ngDevMode === "undefined" ? false : !!ngDevMode,
-    shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,
-    shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false
-  };
-}
-var ZoneStablePendingTask = class _ZoneStablePendingTask {
-  subscription = new import_rxjs.Subscription();
-  initialized = false;
-  zone = inject(NgZone);
-  pendingTasks = inject(PendingTasksInternal);
-  initialize() {
-    if (this.initialized) {
-      return;
-    }
-    this.initialized = true;
-    let task = null;
-    if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
-      task = this.pendingTasks.add();
-    }
-    this.zone.runOutsideAngular(() => {
-      this.subscription.add(this.zone.onStable.subscribe(() => {
-        NgZone.assertNotInAngularZone();
-        queueMicrotask(() => {
-          if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {
-            this.pendingTasks.remove(task);
-            task = null;
-          }
-        });
-      }));
-    });
-    this.subscription.add(this.zone.onUnstable.subscribe(() => {
-      NgZone.assertInAngularZone();
-      task ??= this.pendingTasks.add();
-    }));
-  }
-  ngOnDestroy() {
-    this.subscription.unsubscribe();
-  }
-  static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ZoneStablePendingTask)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ZoneStablePendingTask,
-    factory: _ZoneStablePendingTask.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;
-var consecutiveMicrotaskNotifications = 0;
-var stackFromLastFewNotifications = [];
-function trackMicrotaskNotificationForDebugging() {
-  consecutiveMicrotaskNotifications++;
-  if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {
-    const stack = new Error().stack;
-    if (stack) {
-      stackFromLastFewNotifications.push(stack);
-    }
-  }
-  if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {
-    throw new RuntimeError(103, "Angular could not stabilize because there were endless change notifications within the browser event loop. The stack from the last several notifications: \n" + stackFromLastFewNotifications.join("\n"));
-  }
-}
-var ChangeDetectionSchedulerImpl = class _ChangeDetectionSchedulerImpl {
-  appRef = inject(ApplicationRef);
-  taskService = inject(PendingTasksInternal);
-  ngZone = inject(NgZone);
-  zonelessEnabled = inject(ZONELESS_ENABLED);
-  tracing = inject(TracingService, {
-    optional: true
-  });
-  disableScheduling = inject(ZONELESS_SCHEDULER_DISABLED, {
-    optional: true
-  }) ?? false;
-  zoneIsDefined = typeof Zone !== "undefined" && !!Zone.root.run;
-  schedulerTickApplyArgs = [{
-    data: {
-      "__scheduler_tick__": true
-    }
-  }];
-  subscriptions = new import_rxjs.Subscription();
-  angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;
-  scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {
-    optional: true
-  }) ?? false);
-  cancelScheduledCallback = null;
-  useMicrotaskScheduler = false;
-  runningTick = false;
-  pendingRenderTaskId = null;
-  constructor() {
-    this.subscriptions.add(this.appRef.afterTick.subscribe(() => {
-      if (!this.runningTick) {
-        this.cleanup();
-      }
-    }));
-    this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {
-      if (!this.runningTick) {
-        this.cleanup();
-      }
-    }));
-    this.disableScheduling ||= !this.zonelessEnabled && // NoopNgZone without enabling zoneless means no scheduling whatsoever
-    (this.ngZone instanceof NoopNgZone || // The same goes for the lack of Zone without enabling zoneless scheduling
-    !this.zoneIsDefined);
-  }
-  notify(source) {
-    if (!this.zonelessEnabled && source === 5) {
-      return;
-    }
-    let force = false;
-    switch (source) {
-      case 0: {
-        this.appRef.dirtyFlags |= 2;
-        break;
-      }
-      case 3:
-      case 2:
-      case 4:
-      case 5:
-      case 1: {
-        this.appRef.dirtyFlags |= 4;
-        break;
-      }
-      case 8: {
-        this.appRef.deferredDirtyFlags |= 8;
-        break;
-      }
-      case 6: {
-        this.appRef.dirtyFlags |= 2;
-        force = true;
-        break;
-      }
-      case 13: {
-        this.appRef.dirtyFlags |= 16;
-        force = true;
-        break;
-      }
-      case 14: {
-        this.appRef.dirtyFlags |= 2;
-        force = true;
-        break;
-      }
-      case 12: {
-        force = true;
-        break;
-      }
-      case 10:
-      case 9:
-      case 7:
-      case 11:
-      default: {
-        this.appRef.dirtyFlags |= 8;
-      }
-    }
-    this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;
-    if (!this.shouldScheduleTick(force)) {
-      return;
-    }
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (this.useMicrotaskScheduler) {
-        trackMicrotaskNotificationForDebugging();
-      } else {
-        consecutiveMicrotaskNotifications = 0;
-        stackFromLastFewNotifications.length = 0;
-      }
-    }
-    const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;
-    this.pendingRenderTaskId = this.taskService.add();
-    if (this.scheduleInRootZone) {
-      this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));
-    } else {
-      this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));
-    }
-  }
-  shouldScheduleTick(force) {
-    if (this.disableScheduling && !force || this.appRef.destroyed) {
-      return false;
-    }
-    if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {
-      return false;
-    }
-    if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {
-      return false;
-    }
-    return true;
-  }
-  /**
-   * Calls ApplicationRef._tick inside the `NgZone`.
-   *
-   * Calling `tick` directly runs change detection and cancels any change detection that had been
-   * scheduled previously.
-   *
-   * @param shouldRefreshViews Passed directly to `ApplicationRef._tick` and skips straight to
-   *     render hooks when `false`.
-   */
-  tick() {
-    if (this.runningTick || this.appRef.destroyed) {
-      return;
-    }
-    if (this.appRef.dirtyFlags === 0) {
-      this.cleanup();
-      return;
-    }
-    if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7) {
-      this.appRef.dirtyFlags |= 1;
-    }
-    const task = this.taskService.add();
-    try {
-      this.ngZone.run(() => {
-        this.runningTick = true;
-        this.appRef._tick();
-      }, void 0, this.schedulerTickApplyArgs);
-    } catch (e) {
-      this.taskService.remove(task);
-      throw e;
-    } finally {
-      this.cleanup();
-    }
-    this.useMicrotaskScheduler = true;
-    scheduleCallbackWithMicrotask(() => {
-      this.useMicrotaskScheduler = false;
-      this.taskService.remove(task);
-    });
-  }
-  ngOnDestroy() {
-    this.subscriptions.unsubscribe();
-    this.cleanup();
-  }
-  cleanup() {
-    this.runningTick = false;
-    this.cancelScheduledCallback?.();
-    this.cancelScheduledCallback = null;
-    if (this.pendingRenderTaskId !== null) {
-      const taskId = this.pendingRenderTaskId;
-      this.pendingRenderTaskId = null;
-      this.taskService.remove(taskId);
-    }
-  }
-  static ɵfac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ChangeDetectionSchedulerImpl)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ChangeDetectionSchedulerImpl,
-    factory: _ChangeDetectionSchedulerImpl.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function provideExperimentalZonelessChangeDetection() {
-  performanceMarkFeature("NgZoneless");
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && typeof Zone !== "undefined" && Zone) {
-    const message = formatRuntimeError(914, `The application is using zoneless change detection, but is still loading Zone.js. Consider removing Zone.js to get the full benefits of zoneless. In applications using the Angular CLI, Zone.js is typically included in the "polyfills" section of the angular.json file.`);
-    console.warn(message);
-  }
-  return makeEnvironmentProviders([{
-    provide: ChangeDetectionScheduler,
-    useExisting: ChangeDetectionSchedulerImpl
-  }, {
-    provide: NgZone,
-    useClass: NoopNgZone
-  }, {
-    provide: ZONELESS_ENABLED,
-    useValue: true
-  }, {
-    provide: SCHEDULE_IN_ROOT_ZONE,
-    useValue: false
-  }, typeof ngDevMode === "undefined" || ngDevMode ? [{
-    provide: PROVIDED_ZONELESS,
-    useValue: true
-  }] : []]);
-}
-function getGlobalLocale() {
-  if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode && typeof goog !== "undefined" && goog.LOCALE !== "en") {
-    return goog.LOCALE;
-  } else {
-    return typeof $localize !== "undefined" && $localize.locale || DEFAULT_LOCALE_ID;
-  }
-}
-var LOCALE_ID = new InjectionToken(ngDevMode ? "LocaleId" : "", {
-  providedIn: "root",
-  factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale()
-});
-var DEFAULT_CURRENCY_CODE = new InjectionToken(ngDevMode ? "DefaultCurrencyCode" : "", {
-  providedIn: "root",
-  factory: () => USD_CURRENCY_CODE
-});
-var TRANSLATIONS = new InjectionToken(ngDevMode ? "Translations" : "");
-var TRANSLATIONS_FORMAT = new InjectionToken(ngDevMode ? "TranslationsFormat" : "");
-var MissingTranslationStrategy;
-(function(MissingTranslationStrategy2) {
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Error"] = 0] = "Error";
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Warning"] = 1] = "Warning";
-  MissingTranslationStrategy2[MissingTranslationStrategy2["Ignore"] = 2] = "Ignore";
-})(MissingTranslationStrategy || (MissingTranslationStrategy = {}));
-var SCAN_DELAY = 200;
-var OVERSIZED_IMAGE_TOLERANCE = 1200;
-var ImagePerformanceWarning = class _ImagePerformanceWarning {
-  // Map of full image URLs -> original `ngSrc` values.
-  window = null;
-  observer = null;
-  options = inject(IMAGE_CONFIG);
-  isBrowser = inject(PLATFORM_ID) === "browser";
-  lcpImageUrl;
-  start() {
-    if (!this.isBrowser || typeof PerformanceObserver === "undefined" || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {
-      return;
-    }
-    this.observer = this.initPerformanceObserver();
-    const doc = getDocument();
-    const win = doc.defaultView;
-    if (typeof win !== "undefined") {
-      this.window = win;
-      const waitToScan = () => {
-        setTimeout(this.scanImages.bind(this), SCAN_DELAY);
-      };
-      const setup = () => {
-        if (doc.readyState === "complete") {
-          waitToScan();
-        } else {
-          this.window?.addEventListener("load", waitToScan, {
-            once: true
-          });
-        }
-      };
-      if (typeof Zone !== "undefined") {
-        Zone.root.run(() => setup());
-      } else {
-        setup();
-      }
-    }
-  }
-  ngOnDestroy() {
-    this.observer?.disconnect();
-  }
-  initPerformanceObserver() {
-    if (typeof PerformanceObserver === "undefined") {
-      return null;
-    }
-    const observer = new PerformanceObserver((entryList) => {
-      const entries = entryList.getEntries();
-      if (entries.length === 0) return;
-      const lcpElement = entries[entries.length - 1];
-      const imgSrc = lcpElement.element?.src ?? "";
-      if (imgSrc.startsWith("data:") || imgSrc.startsWith("blob:")) return;
-      this.lcpImageUrl = imgSrc;
-    });
-    observer.observe({
-      type: "largest-contentful-paint",
-      buffered: true
-    });
-    return observer;
-  }
-  scanImages() {
-    const images = getDocument().querySelectorAll("img");
-    let lcpElementFound, lcpElementLoadedCorrectly = false;
-    images.forEach((image) => {
-      if (!this.options?.disableImageSizeWarning) {
-        if (!image.getAttribute("ng-img") && this.isOversized(image)) {
-          logOversizedImageWarning(image.src);
-        }
-      }
-      if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {
-        if (image.src === this.lcpImageUrl) {
-          lcpElementFound = true;
-          if (image.loading !== "lazy" || image.getAttribute("ng-img")) {
-            lcpElementLoadedCorrectly = true;
-          }
-        }
-      }
-    });
-    if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {
-      logLazyLCPWarning(this.lcpImageUrl);
-    }
-  }
-  isOversized(image) {
-    if (!this.window) {
-      return false;
-    }
-    const nonOversizedImageExtentions = [
-      // SVG images are vector-based, which means they can scale
-      // to any size without losing quality.
-      ".svg"
-    ];
-    const imageSource = (image.src || "").toLowerCase();
-    if (nonOversizedImageExtentions.some((extension) => imageSource.endsWith(extension))) {
-      return false;
-    }
-    const computedStyle = this.window.getComputedStyle(image);
-    let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-    let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-    const boxSizing = computedStyle.getPropertyValue("box-sizing");
-    const objectFit = computedStyle.getPropertyValue("object-fit");
-    if (objectFit === `cover`) {
-      return false;
-    }
-    if (boxSizing === "border-box") {
-      const paddingTop = computedStyle.getPropertyValue("padding-top");
-      const paddingRight = computedStyle.getPropertyValue("padding-right");
-      const paddingBottom = computedStyle.getPropertyValue("padding-bottom");
-      const paddingLeft = computedStyle.getPropertyValue("padding-left");
-      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
-      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
-    }
-    const intrinsicWidth = image.naturalWidth;
-    const intrinsicHeight = image.naturalHeight;
-    const recommendedWidth = this.window.devicePixelRatio * renderedWidth;
-    const recommendedHeight = this.window.devicePixelRatio * renderedHeight;
-    const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
-    const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
-    return oversizedWidth || oversizedHeight;
-  }
-  static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ImagePerformanceWarning)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ImagePerformanceWarning,
-    factory: _ImagePerformanceWarning.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-function logLazyLCPWarning(src) {
-  console.warn(formatRuntimeError(-913, `An image with src ${src} is the Largest Contentful Paint (LCP) element but was given a "loading" value of "lazy", which can negatively impact application loading performance. This warning can be addressed by changing the loading value of the LCP image to "eager", or by using the NgOptimizedImage directive's prioritization utilities. For more information about addressing or disabling this warning, see https://angular.dev/errors/NG0913`));
-}
-function logOversizedImageWarning(src) {
-  console.warn(formatRuntimeError(-913, `An image with src ${src} has intrinsic file dimensions much larger than its rendered size. This can negatively impact application loading performance. For more information about addressing or disabling this warning, see https://angular.dev/errors/NG0913`));
-}
-var PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? "PlatformDestroyListeners" : "");
-var ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? "ENABLE_ROOT_COMPONENT_BOOTSTRAP" : "");
-function isApplicationBootstrapConfig(config) {
-  return !config.moduleRef;
-}
-function bootstrap(config) {
-  const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;
-  const ngZone = envInjector.get(NgZone);
-  return ngZone.run(() => {
-    if (isApplicationBootstrapConfig(config)) {
-      config.r3Injector.resolveInjectorInitializers();
-    } else {
-      config.moduleRef.resolveInjectorInitializers();
-    }
-    const exceptionHandler = envInjector.get(ErrorHandler, null);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (exceptionHandler === null) {
-        const errorMessage = isApplicationBootstrapConfig(config) ? "No `ErrorHandler` found in the Dependency Injection tree." : "No ErrorHandler. Is platform module (BrowserModule) included";
-        throw new RuntimeError(402, errorMessage);
-      }
-      if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
-        throw new RuntimeError(408, "Invalid change detection configuration: provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.");
-      }
-    }
-    let onErrorSubscription;
-    ngZone.runOutsideAngular(() => {
-      onErrorSubscription = ngZone.onError.subscribe({
-        next: (error) => {
-          exceptionHandler.handleError(error);
-        }
-      });
-    });
-    if (isApplicationBootstrapConfig(config)) {
-      const destroyListener = () => envInjector.destroy();
-      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
-      onPlatformDestroyListeners.add(destroyListener);
-      envInjector.onDestroy(() => {
-        onErrorSubscription.unsubscribe();
-        onPlatformDestroyListeners.delete(destroyListener);
-      });
-    } else {
-      const destroyListener = () => config.moduleRef.destroy();
-      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);
-      onPlatformDestroyListeners.add(destroyListener);
-      config.moduleRef.onDestroy(() => {
-        remove(config.allPlatformModules, config.moduleRef);
-        onErrorSubscription.unsubscribe();
-        onPlatformDestroyListeners.delete(destroyListener);
-      });
-    }
-    return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {
-      const initStatus = envInjector.get(ApplicationInitStatus);
-      initStatus.runInitializers();
-      return initStatus.donePromise.then(() => {
-        const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);
-        setLocaleId(localeId || DEFAULT_LOCALE_ID);
-        const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);
-        if (!enableRootComponentBoostrap) {
-          if (isApplicationBootstrapConfig(config)) {
-            return envInjector.get(ApplicationRef);
-          }
-          config.allPlatformModules.push(config.moduleRef);
-          return config.moduleRef;
-        }
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          const imagePerformanceService = envInjector.get(ImagePerformanceWarning);
-          imagePerformanceService.start();
-        }
-        if (isApplicationBootstrapConfig(config)) {
-          const appRef = envInjector.get(ApplicationRef);
-          if (config.rootComponent !== void 0) {
-            appRef.bootstrap(config.rootComponent);
-          }
-          return appRef;
-        } else {
-          moduleDoBootstrap(config.moduleRef, config.allPlatformModules);
-          return config.moduleRef;
-        }
-      });
-    });
-  });
-}
-function moduleDoBootstrap(moduleRef, allPlatformModules) {
-  const appRef = moduleRef.injector.get(ApplicationRef);
-  if (moduleRef._bootstrapComponents.length > 0) {
-    moduleRef._bootstrapComponents.forEach((f) => appRef.bootstrap(f));
-  } else if (moduleRef.instance.ngDoBootstrap) {
-    moduleRef.instance.ngDoBootstrap(appRef);
-  } else {
-    throw new RuntimeError(-403, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);
-  }
-  allPlatformModules.push(moduleRef);
-}
-var PlatformRef = class _PlatformRef {
-  _injector;
-  _modules = [];
-  _destroyListeners = [];
-  _destroyed = false;
-  /** @internal */
-  constructor(_injector) {
-    this._injector = _injector;
-  }
-  /**
-   * Creates an instance of an `@NgModule` for the given platform.
-   *
-   * @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function
-   *     argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.
-   */
-  bootstrapModuleFactory(moduleFactory, options) {
-    const scheduleInRootZone = options?.scheduleInRootZone;
-    const ngZoneFactory = () => getNgZone(options?.ngZone, __spreadProps(__spreadValues({}, getNgZoneOptions({
-      eventCoalescing: options?.ngZoneEventCoalescing,
-      runCoalescing: options?.ngZoneRunCoalescing
-    })), {
-      scheduleInRootZone
-    }));
-    const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
-    const allAppProviders = [internalProvideZoneChangeDetection({
-      ngZoneFactory,
-      ignoreChangesOutsideZone
-    }), {
-      provide: ChangeDetectionScheduler,
-      useExisting: ChangeDetectionSchedulerImpl
-    }];
-    const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);
-    return bootstrap({
-      moduleRef,
-      allPlatformModules: this._modules,
-      platformInjector: this.injector
-    });
-  }
-  /**
-   * Creates an instance of an `@NgModule` for a given platform.
-   *
-   * @usageNotes
-   * ### Simple Example
-   *
-   * ```ts
-   * @NgModule({
-   *   imports: [BrowserModule]
-   * })
-   * class MyModule {}
-   *
-   * let moduleRef = platformBrowser().bootstrapModule(MyModule);
-   * ```
-   *
-   */
-  bootstrapModule(moduleType, compilerOptions = []) {
-    const options = optionsReducer({}, compilerOptions);
-    return compileNgModuleFactory(this.injector, options, moduleType).then((moduleFactory) => this.bootstrapModuleFactory(moduleFactory, options));
-  }
-  /**
-   * Registers a listener to be called when the platform is destroyed.
-   */
-  onDestroy(callback) {
-    this._destroyListeners.push(callback);
-  }
-  /**
-   * Retrieves the platform {@link Injector}, which is the parent injector for
-   * every Angular application on the page and provides singleton providers.
-   */
-  get injector() {
-    return this._injector;
-  }
-  /**
-   * Destroys the current Angular platform and all Angular applications on the page.
-   * Destroys all modules and listeners registered with the platform.
-   */
-  destroy() {
-    if (this._destroyed) {
-      throw new RuntimeError(404, ngDevMode && "The platform has already been destroyed!");
-    }
-    this._modules.slice().forEach((module) => module.destroy());
-    this._destroyListeners.forEach((listener) => listener());
-    const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);
-    if (destroyListeners) {
-      destroyListeners.forEach((listener) => listener());
-      destroyListeners.clear();
-    }
-    this._destroyed = true;
-  }
-  /**
-   * Indicates whether this instance was destroyed.
-   */
-  get destroyed() {
-    return this._destroyed;
-  }
-  static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformRef)(ɵɵinject(Injector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformRef,
-    factory: _PlatformRef.ɵfac,
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformRef, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform"
-    }]
-  }], () => [{
-    type: Injector
-  }], null);
-})();
-var _platformInjector = null;
-var ALLOW_MULTIPLE_PLATFORMS = new InjectionToken(ngDevMode ? "AllowMultipleToken" : "");
-function createPlatform(injector) {
-  if (_platformInjector && !_platformInjector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
-    throw new RuntimeError(400, ngDevMode && "There can be only one platform. Destroy the previous one to create a new one.");
-  }
-  publishDefaultGlobalUtils();
-  publishSignalConfiguration();
-  _platformInjector = injector;
-  const platform = injector.get(PlatformRef);
-  runPlatformInitializers(injector);
-  return platform;
-}
-function createPlatformFactory(parentPlatformFactory, name, providers = []) {
-  const desc = `Platform: ${name}`;
-  const marker = new InjectionToken(desc);
-  return (extraProviders = []) => {
-    let platform = getPlatform();
-    if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
-      const platformProviders = [...providers, ...extraProviders, {
-        provide: marker,
-        useValue: true
-      }];
-      if (parentPlatformFactory) {
-        parentPlatformFactory(platformProviders);
-      } else {
-        createPlatform(createPlatformInjector(platformProviders, desc));
-      }
-    }
-    return assertPlatform(marker);
-  };
-}
-function createPlatformInjector(providers = [], name) {
-  return Injector.create({
-    name,
-    providers: [{
-      provide: INJECTOR_SCOPE,
-      useValue: "platform"
-    }, {
-      provide: PLATFORM_DESTROY_LISTENERS,
-      useValue: /* @__PURE__ */ new Set([() => _platformInjector = null])
-    }, ...providers]
-  });
-}
-function assertPlatform(requiredToken) {
-  const platform = getPlatform();
-  if (!platform) {
-    throw new RuntimeError(401, ngDevMode && "No platform exists!");
-  }
-  if ((typeof ngDevMode === "undefined" || ngDevMode) && !platform.injector.get(requiredToken, null)) {
-    throw new RuntimeError(400, "A platform with a different configuration has been created. Please destroy it first.");
-  }
-  return platform;
-}
-function getPlatform() {
-  return _platformInjector?.get(PlatformRef) ?? null;
-}
-function destroyPlatform() {
-  getPlatform()?.destroy();
-}
-function createOrReusePlatformInjector(providers = []) {
-  if (_platformInjector) return _platformInjector;
-  publishDefaultGlobalUtils();
-  const injector = createPlatformInjector(providers);
-  _platformInjector = injector;
-  publishSignalConfiguration();
-  runPlatformInitializers(injector);
-  return injector;
-}
-function providePlatformInitializer(initializerFn) {
-  return makeEnvironmentProviders([{
-    provide: PLATFORM_INITIALIZER,
-    useValue: initializerFn,
-    multi: true
-  }]);
-}
-function runPlatformInitializers(injector) {
-  const inits = injector.get(PLATFORM_INITIALIZER, null);
-  runInInjectionContext(injector, () => {
-    inits?.forEach((init) => init());
-  });
-}
-function provideExperimentalCheckNoChangesForDebug(options) {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    if (options.interval === void 0 && !options.useNgZoneOnStable) {
-      throw new Error("Must provide one of `useNgZoneOnStable` or `interval`");
-    }
-    const checkNoChangesMode = options?.exhaustive === false ? CheckNoChangesMode.OnlyDirtyViews : CheckNoChangesMode.Exhaustive;
-    return makeEnvironmentProviders([options?.useNgZoneOnStable ? {
-      provide: NgZone,
-      useFactory: () => new DebugNgZoneForCheckNoChanges(checkNoChangesMode)
-    } : [], options?.interval !== void 0 ? exhaustiveCheckNoChangesInterval(options.interval, checkNoChangesMode) : [], {
-      provide: ENVIRONMENT_INITIALIZER,
-      multi: true,
-      useValue: () => {
-        if (options?.useNgZoneOnStable && !(inject(NgZone) instanceof DebugNgZoneForCheckNoChanges)) {
-          throw new Error("`provideExperimentalCheckNoChangesForDebug` with `useNgZoneOnStable` must be after any other provider for `NgZone`.");
-        }
-      }
-    }]);
-  } else {
-    return makeEnvironmentProviders([]);
-  }
-}
-var DebugNgZoneForCheckNoChanges = class extends NgZone {
-  checkNoChangesMode;
-  applicationRef;
-  scheduler;
-  errorHandler;
-  injector = inject(EnvironmentInjector);
-  constructor(checkNoChangesMode) {
-    const zonelessEnabled = inject(ZONELESS_ENABLED);
-    super({
-      shouldCoalesceEventChangeDetection: true,
-      shouldCoalesceRunChangeDetection: zonelessEnabled
-    });
-    this.checkNoChangesMode = checkNoChangesMode;
-    if (zonelessEnabled) {
-      this.onMicrotaskEmpty.emit = () => {
-      };
-      this.onStable.emit = () => {
-        this.scheduler ||= this.injector.get(ChangeDetectionSchedulerImpl);
-        if (this.scheduler.pendingRenderTaskId || this.scheduler.runningTick) {
-          return;
-        }
-        this.checkApplicationViews();
-      };
-      this.onUnstable.emit = () => {
-      };
-    } else {
-      this.runOutsideAngular(() => {
-        this.onStable.subscribe(() => {
-          this.checkApplicationViews();
-        });
-      });
-    }
-  }
-  checkApplicationViews() {
-    this.applicationRef ||= this.injector.get(ApplicationRef);
-    for (const view of this.applicationRef.allViews) {
-      try {
-        checkNoChangesInternal(view._lView, this.checkNoChangesMode, view.notifyErrorHandler);
-      } catch (e) {
-        this.errorHandler ||= this.injector.get(ErrorHandler);
-        this.errorHandler.handleError(e);
-      }
-    }
-  }
-};
-function exhaustiveCheckNoChangesInterval(interval, checkNoChangesMode) {
-  return {
-    provide: ENVIRONMENT_INITIALIZER,
-    multi: true,
-    useFactory: () => {
-      const applicationRef = inject(ApplicationRef);
-      const errorHandler = inject(ErrorHandler);
-      const scheduler = inject(ChangeDetectionSchedulerImpl);
-      const ngZone = inject(NgZone);
-      return () => {
-        function scheduleCheckNoChanges() {
-          ngZone.runOutsideAngular(() => {
-            setTimeout(() => {
-              if (applicationRef.destroyed) {
-                return;
-              }
-              if (scheduler.pendingRenderTaskId || scheduler.runningTick) {
-                scheduleCheckNoChanges();
-                return;
-              }
-              for (const view of applicationRef.allViews) {
-                try {
-                  checkNoChangesInternal(view._lView, checkNoChangesMode, view.notifyErrorHandler);
-                } catch (e) {
-                  errorHandler.handleError(e);
-                }
-              }
-              scheduleCheckNoChanges();
-            }, interval);
-          });
-        }
-        scheduleCheckNoChanges();
-      };
-    }
-  };
-}
-function isDevMode() {
-  return typeof ngDevMode === "undefined" || !!ngDevMode;
-}
-function enableProdMode() {
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    _global["ngDevMode"] = false;
-  }
-}
-function getModuleFactory(id) {
-  const type = getRegisteredNgModuleType(id);
-  if (!type) throw noModuleError(id);
-  return new NgModuleFactory(type);
-}
-function getNgModuleById(id) {
-  const type = getRegisteredNgModuleType(id);
-  if (!type) throw noModuleError(id);
-  return type;
-}
-function noModuleError(id) {
-  return new Error(`No module with ID ${id} loaded`);
-}
-var ChangeDetectorRef = class {
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectChangeDetectorRef;
-};
-function injectChangeDetectorRef(flags) {
-  return createViewRef(
-    getCurrentTNode(),
-    getLView(),
-    (flags & 16) === 16
-    /* InternalInjectFlags.ForPipe */
-  );
-}
-function createViewRef(tNode, lView, isPipe2) {
-  if (isComponentHost(tNode) && !isPipe2) {
-    const componentView = getComponentLViewByIndex(tNode.index, lView);
-    return new ViewRef$1(componentView, componentView);
-  } else if (tNode.type & (3 | 12 | 32 | 128)) {
-    const hostComponentView = lView[DECLARATION_COMPONENT_VIEW];
-    return new ViewRef$1(hostComponentView, lView);
-  }
-  return null;
-}
-var ViewRef = class extends ChangeDetectorRef {
-};
-var EmbeddedViewRef = class extends ViewRef {
-};
-var DebugEventListener = class {
-  name;
-  callback;
-  constructor(name, callback) {
-    this.name = name;
-    this.callback = callback;
-  }
-};
-function asNativeElements(debugEls) {
-  return debugEls.map((el) => el.nativeElement);
-}
-var DebugNode = class {
-  /**
-   * The underlying DOM node.
-   */
-  nativeNode;
-  constructor(nativeNode) {
-    this.nativeNode = nativeNode;
-  }
-  /**
-   * The `DebugElement` parent. Will be `null` if this is the root element.
-   */
-  get parent() {
-    const parent = this.nativeNode.parentNode;
-    return parent ? new DebugElement(parent) : null;
-  }
-  /**
-   * The host dependency injector. For example, the root element's component instance injector.
-   */
-  get injector() {
-    return getInjector(this.nativeNode);
-  }
-  /**
-   * The element's own component instance, if it has one.
-   */
-  get componentInstance() {
-    const nativeElement = this.nativeNode;
-    return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));
-  }
-  /**
-   * An object that provides parent context for this element. Often an ancestor component instance
-   * that governs this element.
-   *
-   * When an element is repeated within *ngFor, the context is an `NgForOf` whose `$implicit`
-   * property is the value of the row instance value. For example, the `hero` in `*ngFor="let hero
-   * of heroes"`.
-   */
-  get context() {
-    return getComponent(this.nativeNode) || getContext(this.nativeNode);
-  }
-  /**
-   * The callbacks attached to the component's @Output properties and/or the element's event
-   * properties.
-   */
-  get listeners() {
-    return getListeners(this.nativeNode).filter((listener) => listener.type === "dom");
-  }
-  /**
-   * Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local
-   * variable name.
-   */
-  get references() {
-    return getLocalRefs(this.nativeNode);
-  }
-  /**
-   * This component's injector lookup tokens. Includes the component itself plus the tokens that the
-   * component lists in its providers metadata.
-   */
-  get providerTokens() {
-    return getInjectionTokens(this.nativeNode);
-  }
-};
-var DebugElement = class extends DebugNode {
-  constructor(nativeNode) {
-    ngDevMode && assertDomNode(nativeNode);
-    super(nativeNode);
-  }
-  /**
-   * The underlying DOM element at the root of the component.
-   */
-  get nativeElement() {
-    return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;
-  }
-  /**
-   * The element tag name, if it is an element.
-   */
-  get name() {
-    const context = getLContext(this.nativeNode);
-    const lView = context ? context.lView : null;
-    if (lView !== null) {
-      const tData = lView[TVIEW].data;
-      const tNode = tData[context.nodeIndex];
-      return tNode.value;
-    } else {
-      return this.nativeNode.nodeName;
-    }
-  }
-  /**
-   *  Gets a map of property names to property values for an element.
-   *
-   *  This map includes:
-   *  - Regular property bindings (e.g. `[id]="id"`)
-   *  - Host property bindings (e.g. `host: { '[id]': "id" }`)
-   *  - Interpolated property bindings (e.g. `id="{{ value }}")
-   *
-   *  It does not include:
-   *  - input property bindings (e.g. `[myCustomInput]="value"`)
-   *  - attribute bindings (e.g. `[attr.role]="menu"`)
-   */
-  get properties() {
-    const context = getLContext(this.nativeNode);
-    const lView = context ? context.lView : null;
-    if (lView === null) {
-      return {};
-    }
-    const tData = lView[TVIEW].data;
-    const tNode = tData[context.nodeIndex];
-    const properties = {};
-    copyDomProperties(this.nativeElement, properties);
-    collectPropertyBindings(properties, tNode, lView, tData);
-    return properties;
-  }
-  /**
-   *  A map of attribute names to attribute values for an element.
-   */
-  // TODO: replace null by undefined in the return type
-  get attributes() {
-    const attributes = {};
-    const element = this.nativeElement;
-    if (!element) {
-      return attributes;
-    }
-    const context = getLContext(element);
-    const lView = context ? context.lView : null;
-    if (lView === null) {
-      return {};
-    }
-    const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
-    const lowercaseTNodeAttrs = [];
-    if (tNodeAttrs) {
-      let i = 0;
-      while (i < tNodeAttrs.length) {
-        const attrName = tNodeAttrs[i];
-        if (typeof attrName !== "string") break;
-        const attrValue = tNodeAttrs[i + 1];
-        attributes[attrName] = attrValue;
-        lowercaseTNodeAttrs.push(attrName.toLowerCase());
-        i += 2;
-      }
-    }
-    for (const attr of element.attributes) {
-      if (!lowercaseTNodeAttrs.includes(attr.name)) {
-        attributes[attr.name] = attr.value;
-      }
-    }
-    return attributes;
-  }
-  /**
-   * The inline styles of the DOM element.
-   */
-  // TODO: replace null by undefined in the return type
-  get styles() {
-    const element = this.nativeElement;
-    return element?.style ?? {};
-  }
-  /**
-   * A map containing the class names on the element as keys.
-   *
-   * This map is derived from the `className` property of the DOM element.
-   *
-   * Note: The values of this object will always be `true`. The class key will not appear in the KV
-   * object if it does not exist on the element.
-   *
-   * @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)
-   */
-  get classes() {
-    const result = {};
-    const element = this.nativeElement;
-    const className = element.className;
-    const classes = typeof className !== "string" ? className.baseVal.split(" ") : className.split(" ");
-    classes.forEach((value) => result[value] = true);
-    return result;
-  }
-  /**
-   * The `childNodes` of the DOM element as a `DebugNode` array.
-   *
-   * @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)
-   */
-  get childNodes() {
-    const childNodes = this.nativeNode.childNodes;
-    const children = [];
-    for (let i = 0; i < childNodes.length; i++) {
-      const element = childNodes[i];
-      children.push(getDebugNode(element));
-    }
-    return children;
-  }
-  /**
-   * The immediate `DebugElement` children. Walk the tree by descending through `children`.
-   */
-  get children() {
-    const nativeElement = this.nativeElement;
-    if (!nativeElement) return [];
-    const childNodes = nativeElement.children;
-    const children = [];
-    for (let i = 0; i < childNodes.length; i++) {
-      const element = childNodes[i];
-      children.push(getDebugNode(element));
-    }
-    return children;
-  }
-  /**
-   * @returns the first `DebugElement` that matches the predicate at any depth in the subtree.
-   */
-  query(predicate) {
-    const results = this.queryAll(predicate);
-    return results[0] || null;
-  }
-  /**
-   * @returns All `DebugElement` matches for the predicate at any depth in the subtree.
-   */
-  queryAll(predicate) {
-    const matches = [];
-    _queryAll(this, predicate, matches, true);
-    return matches;
-  }
-  /**
-   * @returns All `DebugNode` matches for the predicate at any depth in the subtree.
-   */
-  queryAllNodes(predicate) {
-    const matches = [];
-    _queryAll(this, predicate, matches, false);
-    return matches;
-  }
-  /**
-   * Triggers the event by its name if there is a corresponding listener in the element's
-   * `listeners` collection.
-   *
-   * If the event lacks a listener or there's some other problem, consider
-   * calling `nativeElement.dispatchEvent(eventObject)`.
-   *
-   * @param eventName The name of the event to trigger
-   * @param eventObj The _event object_ expected by the handler
-   *
-   * @see [Testing components scenarios](guide/testing/components-scenarios#trigger-event-handler)
-   */
-  triggerEventHandler(eventName, eventObj) {
-    const node = this.nativeNode;
-    const invokedListeners = [];
-    this.listeners.forEach((listener) => {
-      if (listener.name === eventName) {
-        const callback = listener.callback;
-        callback.call(node, eventObj);
-        invokedListeners.push(callback);
-      }
-    });
-    if (typeof node.eventListeners === "function") {
-      node.eventListeners(eventName).forEach((listener) => {
-        if (listener.toString().indexOf("__ngUnwrap__") !== -1) {
-          const unwrappedListener = listener("__ngUnwrap__");
-          return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);
-        }
-      });
-    }
-  }
-};
-function copyDomProperties(element, properties) {
-  if (element) {
-    let obj = Object.getPrototypeOf(element);
-    const NodePrototype = Node.prototype;
-    while (obj !== null && obj !== NodePrototype) {
-      const descriptors = Object.getOwnPropertyDescriptors(obj);
-      for (let key in descriptors) {
-        if (!key.startsWith("__") && !key.startsWith("on")) {
-          const value = element[key];
-          if (isPrimitiveValue(value)) {
-            properties[key] = value;
-          }
-        }
-      }
-      obj = Object.getPrototypeOf(obj);
-    }
-  }
-}
-function isPrimitiveValue(value) {
-  return typeof value === "string" || typeof value === "boolean" || typeof value === "number" || value === null;
-}
-function _queryAll(parentElement, predicate, matches, elementsOnly) {
-  const context = getLContext(parentElement.nativeNode);
-  const lView = context ? context.lView : null;
-  if (lView !== null) {
-    const parentTNode = lView[TVIEW].data[context.nodeIndex];
-    _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
-  } else {
-    _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);
-  }
-}
-function _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {
-  ngDevMode && assertTNodeForLView(tNode, lView);
-  const nativeNode = getNativeByTNodeOrNull(tNode, lView);
-  if (tNode.type & (3 | 8)) {
-    _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);
-    if (isComponentHost(tNode)) {
-      const componentView = getComponentLViewByIndex(tNode.index, lView);
-      if (componentView && componentView[TVIEW].firstChild) {
-        _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);
-      }
-    } else {
-      if (tNode.child) {
-        _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
-      }
-      nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);
-    }
-    const nodeOrContainer = lView[tNode.index];
-    if (isLContainer(nodeOrContainer)) {
-      _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  } else if (tNode.type & 4) {
-    const lContainer = lView[tNode.index];
-    _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);
-    _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);
-  } else if (tNode.type & 16) {
-    const componentView = lView[DECLARATION_COMPONENT_VIEW];
-    const componentHost = componentView[T_HOST];
-    const head = componentHost.projection[tNode.projection];
-    if (Array.isArray(head)) {
-      for (let nativeNode2 of head) {
-        _addQueryMatch(nativeNode2, predicate, matches, elementsOnly, rootNativeNode);
-      }
-    } else if (head) {
-      const nextLView = componentView[PARENT];
-      const nextTNode = nextLView[TVIEW].data[head.index];
-      _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  } else if (tNode.child) {
-    _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
-  }
-  if (rootNativeNode !== nativeNode) {
-    const nextTNode = tNode.flags & 2 ? tNode.projectionNext : tNode.next;
-    if (nextTNode) {
-      _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  }
-}
-function _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    const childView = lContainer[i];
-    const firstChild = childView[TVIEW].firstChild;
-    if (firstChild) {
-      _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);
-    }
-  }
-}
-function _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {
-  if (rootNativeNode !== nativeNode) {
-    const debugNode = getDebugNode(nativeNode);
-    if (!debugNode) {
-      return;
-    }
-    if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-      matches.push(debugNode);
-    } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-      matches.push(debugNode);
-    }
-  }
-}
-function _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {
-  const nodes = parentNode.childNodes;
-  const length = nodes.length;
-  for (let i = 0; i < length; i++) {
-    const node = nodes[i];
-    const debugNode = getDebugNode(node);
-    if (debugNode) {
-      if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-        matches.push(debugNode);
-      } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
-        matches.push(debugNode);
-      }
-      _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);
-    }
-  }
-}
-function collectPropertyBindings(properties, tNode, lView, tData) {
-  let bindingIndexes = tNode.propertyBindings;
-  if (bindingIndexes !== null) {
-    for (let i = 0; i < bindingIndexes.length; i++) {
-      const bindingIndex = bindingIndexes[i];
-      const propMetadata = tData[bindingIndex];
-      const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);
-      const propertyName = metadataParts[0];
-      if (metadataParts.length > 1) {
-        let value = metadataParts[1];
-        for (let j = 1; j < metadataParts.length - 1; j++) {
-          value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];
-        }
-        properties[propertyName] = value;
-      } else {
-        properties[propertyName] = lView[bindingIndex];
-      }
-    }
-  }
-}
-var NG_DEBUG_PROPERTY = "__ng_debug__";
-function getDebugNode(nativeNode) {
-  if (nativeNode instanceof Node) {
-    if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {
-      nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);
-    }
-    return nativeNode[NG_DEBUG_PROPERTY];
-  }
-  return null;
-}
-var DefaultIterableDifferFactory = class {
-  constructor() {
-  }
-  supports(obj) {
-    return isListLikeIterable(obj);
-  }
-  create(trackByFn) {
-    return new DefaultIterableDiffer(trackByFn);
-  }
-};
-var trackByIdentity = (index, item) => item;
-var DefaultIterableDiffer = class {
-  length = 0;
-  // TODO: confirm the usage of `collection` as it's unused, readonly and on a non public API.
-  collection;
-  // Keeps track of the used records at any point in time (during & across `_check()` calls)
-  _linkedRecords = null;
-  // Keeps track of the removed records at any point in time during `_check()` calls.
-  _unlinkedRecords = null;
-  _previousItHead = null;
-  _itHead = null;
-  _itTail = null;
-  _additionsHead = null;
-  _additionsTail = null;
-  _movesHead = null;
-  _movesTail = null;
-  _removalsHead = null;
-  _removalsTail = null;
-  // Keeps track of records where custom track by is the same, but item identity has changed
-  _identityChangesHead = null;
-  _identityChangesTail = null;
-  _trackByFn;
-  constructor(trackByFn) {
-    this._trackByFn = trackByFn || trackByIdentity;
-  }
-  forEachItem(fn) {
-    let record;
-    for (record = this._itHead; record !== null; record = record._next) {
-      fn(record);
-    }
-  }
-  forEachOperation(fn) {
-    let nextIt = this._itHead;
-    let nextRemove = this._removalsHead;
-    let addRemoveOffset = 0;
-    let moveOffsets = null;
-    while (nextIt || nextRemove) {
-      const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;
-      const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
-      const currentIndex = record.currentIndex;
-      if (record === nextRemove) {
-        addRemoveOffset--;
-        nextRemove = nextRemove._nextRemoved;
-      } else {
-        nextIt = nextIt._next;
-        if (record.previousIndex == null) {
-          addRemoveOffset++;
-        } else {
-          if (!moveOffsets) moveOffsets = [];
-          const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
-          const localCurrentIndex = currentIndex - addRemoveOffset;
-          if (localMovePreviousIndex != localCurrentIndex) {
-            for (let i = 0; i < localMovePreviousIndex; i++) {
-              const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;
-              const index = offset + i;
-              if (localCurrentIndex <= index && index < localMovePreviousIndex) {
-                moveOffsets[i] = offset + 1;
-              }
-            }
-            const previousIndex = record.previousIndex;
-            moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
-          }
-        }
-      }
-      if (adjPreviousIndex !== currentIndex) {
-        fn(record, adjPreviousIndex, currentIndex);
-      }
-    }
-  }
-  forEachPreviousItem(fn) {
-    let record;
-    for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
-      fn(record);
-    }
-  }
-  forEachAddedItem(fn) {
-    let record;
-    for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-      fn(record);
-    }
-  }
-  forEachMovedItem(fn) {
-    let record;
-    for (record = this._movesHead; record !== null; record = record._nextMoved) {
-      fn(record);
-    }
-  }
-  forEachRemovedItem(fn) {
-    let record;
-    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
-      fn(record);
-    }
-  }
-  forEachIdentityChange(fn) {
-    let record;
-    for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
-      fn(record);
-    }
-  }
-  diff(collection) {
-    if (collection == null) collection = [];
-    if (!isListLikeIterable(collection)) {
-      throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);
-    }
-    if (this.check(collection)) {
-      return this;
-    } else {
-      return null;
-    }
-  }
-  onDestroy() {
-  }
-  check(collection) {
-    this._reset();
-    let record = this._itHead;
-    let mayBeDirty = false;
-    let index;
-    let item;
-    let itemTrackBy;
-    if (Array.isArray(collection)) {
-      this.length = collection.length;
-      for (let index2 = 0; index2 < this.length; index2++) {
-        item = collection[index2];
-        itemTrackBy = this._trackByFn(index2, item);
-        if (record === null || !Object.is(record.trackById, itemTrackBy)) {
-          record = this._mismatch(record, item, itemTrackBy, index2);
-          mayBeDirty = true;
-        } else {
-          if (mayBeDirty) {
-            record = this._verifyReinsertion(record, item, itemTrackBy, index2);
-          }
-          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-        }
-        record = record._next;
-      }
-    } else {
-      index = 0;
-      iterateListLike(collection, (item2) => {
-        itemTrackBy = this._trackByFn(index, item2);
-        if (record === null || !Object.is(record.trackById, itemTrackBy)) {
-          record = this._mismatch(record, item2, itemTrackBy, index);
-          mayBeDirty = true;
-        } else {
-          if (mayBeDirty) {
-            record = this._verifyReinsertion(record, item2, itemTrackBy, index);
-          }
-          if (!Object.is(record.item, item2)) this._addIdentityChange(record, item2);
-        }
-        record = record._next;
-        index++;
-      });
-      this.length = index;
-    }
-    this._truncate(record);
-    this.collection = collection;
-    return this.isDirty;
-  }
-  /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity
-   * changes.
-   */
-  get isDirty() {
-    return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;
-  }
-  /**
-   * Reset the state of the change objects to show no changes. This means set previousKey to
-   * currentKey, and clear all of the queues (additions, moves, removals).
-   * Set the previousIndexes of moved and added items to their currentIndexes
-   * Reset the list of additions, moves and removals
-   *
-   * @internal
-   */
-  _reset() {
-    if (this.isDirty) {
-      let record;
-      for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
-        record._nextPrevious = record._next;
-      }
-      for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-        record.previousIndex = record.currentIndex;
-      }
-      this._additionsHead = this._additionsTail = null;
-      for (record = this._movesHead; record !== null; record = record._nextMoved) {
-        record.previousIndex = record.currentIndex;
-      }
-      this._movesHead = this._movesTail = null;
-      this._removalsHead = this._removalsTail = null;
-      this._identityChangesHead = this._identityChangesTail = null;
-    }
-  }
-  /**
-   * This is the core function which handles differences between collections.
-   *
-   * - `record` is the record which we saw at this position last time. If null then it is a new
-   *   item.
-   * - `item` is the current item in the collection
-   * - `index` is the position of the item in the collection
-   *
-   * @internal
-   */
-  _mismatch(record, item, itemTrackBy, index) {
-    let previousRecord;
-    if (record === null) {
-      previousRecord = this._itTail;
-    } else {
-      previousRecord = record._prev;
-      this._remove(record);
-    }
-    record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
-    if (record !== null) {
-      if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-      this._reinsertAfter(record, previousRecord, index);
-    } else {
-      record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
-      if (record !== null) {
-        if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
-        this._moveAfter(record, previousRecord, index);
-      } else {
-        record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
-      }
-    }
-    return record;
-  }
-  /**
-   * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
-   *
-   * Use case: `[a, a]` => `[b, a, a]`
-   *
-   * If we did not have this check then the insertion of `b` would:
-   *   1) evict first `a`
-   *   2) insert `b` at `0` index.
-   *   3) leave `a` at index `1` as is. <-- this is wrong!
-   *   3) reinsert `a` at index 2. <-- this is wrong!
-   *
-   * The correct behavior is:
-   *   1) evict first `a`
-   *   2) insert `b` at `0` index.
-   *   3) reinsert `a` at index 1.
-   *   3) move `a` at from `1` to `2`.
-   *
-   *
-   * Double check that we have not evicted a duplicate item. We need to check if the item type may
-   * have already been removed:
-   * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
-   * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
-   * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
-   * at the end.
-   *
-   * @internal
-   */
-  _verifyReinsertion(record, item, itemTrackBy, index) {
-    let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
-    if (reinsertRecord !== null) {
-      record = this._reinsertAfter(reinsertRecord, record._prev, index);
-    } else if (record.currentIndex != index) {
-      record.currentIndex = index;
-      this._addToMoves(record, index);
-    }
-    return record;
-  }
-  /**
-   * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection
-   *
-   * - `record` The first excess {@link IterableChangeRecord_}.
-   *
-   * @internal
-   */
-  _truncate(record) {
-    while (record !== null) {
-      const nextRecord = record._next;
-      this._addToRemovals(this._unlink(record));
-      record = nextRecord;
-    }
-    if (this._unlinkedRecords !== null) {
-      this._unlinkedRecords.clear();
-    }
-    if (this._additionsTail !== null) {
-      this._additionsTail._nextAdded = null;
-    }
-    if (this._movesTail !== null) {
-      this._movesTail._nextMoved = null;
-    }
-    if (this._itTail !== null) {
-      this._itTail._next = null;
-    }
-    if (this._removalsTail !== null) {
-      this._removalsTail._nextRemoved = null;
-    }
-    if (this._identityChangesTail !== null) {
-      this._identityChangesTail._nextIdentityChange = null;
-    }
-  }
-  /** @internal */
-  _reinsertAfter(record, prevRecord, index) {
-    if (this._unlinkedRecords !== null) {
-      this._unlinkedRecords.remove(record);
-    }
-    const prev = record._prevRemoved;
-    const next = record._nextRemoved;
-    if (prev === null) {
-      this._removalsHead = next;
-    } else {
-      prev._nextRemoved = next;
-    }
-    if (next === null) {
-      this._removalsTail = prev;
-    } else {
-      next._prevRemoved = prev;
-    }
-    this._insertAfter(record, prevRecord, index);
-    this._addToMoves(record, index);
-    return record;
-  }
-  /** @internal */
-  _moveAfter(record, prevRecord, index) {
-    this._unlink(record);
-    this._insertAfter(record, prevRecord, index);
-    this._addToMoves(record, index);
-    return record;
-  }
-  /** @internal */
-  _addAfter(record, prevRecord, index) {
-    this._insertAfter(record, prevRecord, index);
-    if (this._additionsTail === null) {
-      this._additionsTail = this._additionsHead = record;
-    } else {
-      this._additionsTail = this._additionsTail._nextAdded = record;
-    }
-    return record;
-  }
-  /** @internal */
-  _insertAfter(record, prevRecord, index) {
-    const next = prevRecord === null ? this._itHead : prevRecord._next;
-    record._next = next;
-    record._prev = prevRecord;
-    if (next === null) {
-      this._itTail = record;
-    } else {
-      next._prev = record;
-    }
-    if (prevRecord === null) {
-      this._itHead = record;
-    } else {
-      prevRecord._next = record;
-    }
-    if (this._linkedRecords === null) {
-      this._linkedRecords = new _DuplicateMap();
-    }
-    this._linkedRecords.put(record);
-    record.currentIndex = index;
-    return record;
-  }
-  /** @internal */
-  _remove(record) {
-    return this._addToRemovals(this._unlink(record));
-  }
-  /** @internal */
-  _unlink(record) {
-    if (this._linkedRecords !== null) {
-      this._linkedRecords.remove(record);
-    }
-    const prev = record._prev;
-    const next = record._next;
-    if (prev === null) {
-      this._itHead = next;
-    } else {
-      prev._next = next;
-    }
-    if (next === null) {
-      this._itTail = prev;
-    } else {
-      next._prev = prev;
-    }
-    return record;
-  }
-  /** @internal */
-  _addToMoves(record, toIndex) {
-    if (record.previousIndex === toIndex) {
-      return record;
-    }
-    if (this._movesTail === null) {
-      this._movesTail = this._movesHead = record;
-    } else {
-      this._movesTail = this._movesTail._nextMoved = record;
-    }
-    return record;
-  }
-  _addToRemovals(record) {
-    if (this._unlinkedRecords === null) {
-      this._unlinkedRecords = new _DuplicateMap();
-    }
-    this._unlinkedRecords.put(record);
-    record.currentIndex = null;
-    record._nextRemoved = null;
-    if (this._removalsTail === null) {
-      this._removalsTail = this._removalsHead = record;
-      record._prevRemoved = null;
-    } else {
-      record._prevRemoved = this._removalsTail;
-      this._removalsTail = this._removalsTail._nextRemoved = record;
-    }
-    return record;
-  }
-  /** @internal */
-  _addIdentityChange(record, item) {
-    record.item = item;
-    if (this._identityChangesTail === null) {
-      this._identityChangesTail = this._identityChangesHead = record;
-    } else {
-      this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
-    }
-    return record;
-  }
-};
-var IterableChangeRecord_ = class {
-  item;
-  trackById;
-  currentIndex = null;
-  previousIndex = null;
-  /** @internal */
-  _nextPrevious = null;
-  /** @internal */
-  _prev = null;
-  /** @internal */
-  _next = null;
-  /** @internal */
-  _prevDup = null;
-  /** @internal */
-  _nextDup = null;
-  /** @internal */
-  _prevRemoved = null;
-  /** @internal */
-  _nextRemoved = null;
-  /** @internal */
-  _nextAdded = null;
-  /** @internal */
-  _nextMoved = null;
-  /** @internal */
-  _nextIdentityChange = null;
-  constructor(item, trackById) {
-    this.item = item;
-    this.trackById = trackById;
-  }
-};
-var _DuplicateItemRecordList = class {
-  /** @internal */
-  _head = null;
-  /** @internal */
-  _tail = null;
-  /**
-   * Append the record to the list of duplicates.
-   *
-   * Note: by design all records in the list of duplicates hold the same value in record.item.
-   */
-  add(record) {
-    if (this._head === null) {
-      this._head = this._tail = record;
-      record._nextDup = null;
-      record._prevDup = null;
-    } else {
-      this._tail._nextDup = record;
-      record._prevDup = this._tail;
-      record._nextDup = null;
-      this._tail = record;
-    }
-  }
-  // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and
-  // IterableChangeRecord_.currentIndex >= atOrAfterIndex
-  get(trackById, atOrAfterIndex) {
-    let record;
-    for (record = this._head; record !== null; record = record._nextDup) {
-      if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {
-        return record;
-      }
-    }
-    return null;
-  }
-  /**
-   * Remove one {@link IterableChangeRecord_} from the list of duplicates.
-   *
-   * Returns whether the list of duplicates is empty.
-   */
-  remove(record) {
-    const prev = record._prevDup;
-    const next = record._nextDup;
-    if (prev === null) {
-      this._head = next;
-    } else {
-      prev._nextDup = next;
-    }
-    if (next === null) {
-      this._tail = prev;
-    } else {
-      next._prevDup = prev;
-    }
-    return this._head === null;
-  }
-};
-var _DuplicateMap = class {
-  map = /* @__PURE__ */ new Map();
-  put(record) {
-    const key = record.trackById;
-    let duplicates = this.map.get(key);
-    if (!duplicates) {
-      duplicates = new _DuplicateItemRecordList();
-      this.map.set(key, duplicates);
-    }
-    duplicates.add(record);
-  }
-  /**
-   * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
-   * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
-   *
-   * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
-   * have any more `a`s needs to return the second `a`.
-   */
-  get(trackById, atOrAfterIndex) {
-    const key = trackById;
-    const recordList = this.map.get(key);
-    return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
-  }
-  /**
-   * Removes a {@link IterableChangeRecord_} from the list of duplicates.
-   *
-   * The list of duplicates also is removed from the map if it gets empty.
-   */
-  remove(record) {
-    const key = record.trackById;
-    const recordList = this.map.get(key);
-    if (recordList.remove(record)) {
-      this.map.delete(key);
-    }
-    return record;
-  }
-  get isEmpty() {
-    return this.map.size === 0;
-  }
-  clear() {
-    this.map.clear();
-  }
-};
-function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
-  const previousIndex = item.previousIndex;
-  if (previousIndex === null) return previousIndex;
-  let moveOffset = 0;
-  if (moveOffsets && previousIndex < moveOffsets.length) {
-    moveOffset = moveOffsets[previousIndex];
-  }
-  return previousIndex + addRemoveOffset + moveOffset;
-}
-var DefaultKeyValueDifferFactory = class {
-  constructor() {
-  }
-  supports(obj) {
-    return obj instanceof Map || isJsObject(obj);
-  }
-  create() {
-    return new DefaultKeyValueDiffer();
-  }
-};
-var DefaultKeyValueDiffer = class {
-  _records = /* @__PURE__ */ new Map();
-  _mapHead = null;
-  // _appendAfter is used in the check loop
-  _appendAfter = null;
-  _previousMapHead = null;
-  _changesHead = null;
-  _changesTail = null;
-  _additionsHead = null;
-  _additionsTail = null;
-  _removalsHead = null;
-  _removalsTail = null;
-  get isDirty() {
-    return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;
-  }
-  forEachItem(fn) {
-    let record;
-    for (record = this._mapHead; record !== null; record = record._next) {
-      fn(record);
-    }
-  }
-  forEachPreviousItem(fn) {
-    let record;
-    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
-      fn(record);
-    }
-  }
-  forEachChangedItem(fn) {
-    let record;
-    for (record = this._changesHead; record !== null; record = record._nextChanged) {
-      fn(record);
-    }
-  }
-  forEachAddedItem(fn) {
-    let record;
-    for (record = this._additionsHead; record !== null; record = record._nextAdded) {
-      fn(record);
-    }
-  }
-  forEachRemovedItem(fn) {
-    let record;
-    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
-      fn(record);
-    }
-  }
-  diff(map2) {
-    if (!map2) {
-      map2 = /* @__PURE__ */ new Map();
-    } else if (!(map2 instanceof Map || isJsObject(map2))) {
-      throw new RuntimeError(900, ngDevMode && `Error trying to diff '${stringify(map2)}'. Only maps and objects are allowed`);
-    }
-    return this.check(map2) ? this : null;
-  }
-  onDestroy() {
-  }
-  /**
-   * Check the current state of the map vs the previous.
-   * The algorithm is optimised for when the keys do no change.
-   */
-  check(map2) {
-    this._reset();
-    let insertBefore = this._mapHead;
-    this._appendAfter = null;
-    this._forEach(map2, (value, key) => {
-      if (insertBefore && insertBefore.key === key) {
-        this._maybeAddToChanges(insertBefore, value);
-        this._appendAfter = insertBefore;
-        insertBefore = insertBefore._next;
-      } else {
-        const record = this._getOrCreateRecordForKey(key, value);
-        insertBefore = this._insertBeforeOrAppend(insertBefore, record);
-      }
-    });
-    if (insertBefore) {
-      if (insertBefore._prev) {
-        insertBefore._prev._next = null;
-      }
-      this._removalsHead = insertBefore;
-      for (let record = insertBefore; record !== null; record = record._nextRemoved) {
-        if (record === this._mapHead) {
-          this._mapHead = null;
-        }
-        this._records.delete(record.key);
-        record._nextRemoved = record._next;
-        record.previousValue = record.currentValue;
-        record.currentValue = null;
-        record._prev = null;
-        record._next = null;
-      }
-    }
-    if (this._changesTail) this._changesTail._nextChanged = null;
-    if (this._additionsTail) this._additionsTail._nextAdded = null;
-    return this.isDirty;
-  }
-  /**
-   * Inserts a record before `before` or append at the end of the list when `before` is null.
-   *
-   * Notes:
-   * - This method appends at `this._appendAfter`,
-   * - This method updates `this._appendAfter`,
-   * - The return value is the new value for the insertion pointer.
-   */
-  _insertBeforeOrAppend(before, record) {
-    if (before) {
-      const prev = before._prev;
-      record._next = before;
-      record._prev = prev;
-      before._prev = record;
-      if (prev) {
-        prev._next = record;
-      }
-      if (before === this._mapHead) {
-        this._mapHead = record;
-      }
-      this._appendAfter = before;
-      return before;
-    }
-    if (this._appendAfter) {
-      this._appendAfter._next = record;
-      record._prev = this._appendAfter;
-    } else {
-      this._mapHead = record;
-    }
-    this._appendAfter = record;
-    return null;
-  }
-  _getOrCreateRecordForKey(key, value) {
-    if (this._records.has(key)) {
-      const record2 = this._records.get(key);
-      this._maybeAddToChanges(record2, value);
-      const prev = record2._prev;
-      const next = record2._next;
-      if (prev) {
-        prev._next = next;
-      }
-      if (next) {
-        next._prev = prev;
-      }
-      record2._next = null;
-      record2._prev = null;
-      return record2;
-    }
-    const record = new KeyValueChangeRecord_(key);
-    this._records.set(key, record);
-    record.currentValue = value;
-    this._addToAdditions(record);
-    return record;
-  }
-  /** @internal */
-  _reset() {
-    if (this.isDirty) {
-      let record;
-      this._previousMapHead = this._mapHead;
-      for (record = this._previousMapHead; record !== null; record = record._next) {
-        record._nextPrevious = record._next;
-      }
-      for (record = this._changesHead; record !== null; record = record._nextChanged) {
-        record.previousValue = record.currentValue;
-      }
-      for (record = this._additionsHead; record != null; record = record._nextAdded) {
-        record.previousValue = record.currentValue;
-      }
-      this._changesHead = this._changesTail = null;
-      this._additionsHead = this._additionsTail = null;
-      this._removalsHead = null;
-    }
-  }
-  // Add the record or a given key to the list of changes only when the value has actually changed
-  _maybeAddToChanges(record, newValue) {
-    if (!Object.is(newValue, record.currentValue)) {
-      record.previousValue = record.currentValue;
-      record.currentValue = newValue;
-      this._addToChanges(record);
-    }
-  }
-  _addToAdditions(record) {
-    if (this._additionsHead === null) {
-      this._additionsHead = this._additionsTail = record;
-    } else {
-      this._additionsTail._nextAdded = record;
-      this._additionsTail = record;
-    }
-  }
-  _addToChanges(record) {
-    if (this._changesHead === null) {
-      this._changesHead = this._changesTail = record;
-    } else {
-      this._changesTail._nextChanged = record;
-      this._changesTail = record;
-    }
-  }
-  /** @internal */
-  _forEach(obj, fn) {
-    if (obj instanceof Map) {
-      obj.forEach(fn);
-    } else {
-      Object.keys(obj).forEach((k) => fn(obj[k], k));
-    }
-  }
-};
-var KeyValueChangeRecord_ = class {
-  key;
-  previousValue = null;
-  currentValue = null;
-  /** @internal */
-  _nextPrevious = null;
-  /** @internal */
-  _next = null;
-  /** @internal */
-  _prev = null;
-  /** @internal */
-  _nextAdded = null;
-  /** @internal */
-  _nextRemoved = null;
-  /** @internal */
-  _nextChanged = null;
-  constructor(key) {
-    this.key = key;
-  }
-};
-function defaultIterableDiffersFactory() {
-  return new IterableDiffers([new DefaultIterableDifferFactory()]);
-}
-var IterableDiffers = class _IterableDiffers {
-  factories;
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _IterableDiffers,
-      providedIn: "root",
-      factory: defaultIterableDiffersFactory
-    })
-  );
-  constructor(factories) {
-    this.factories = factories;
-  }
-  static create(factories, parent) {
-    if (parent != null) {
-      const copied = parent.factories.slice();
-      factories = factories.concat(copied);
-    }
-    return new _IterableDiffers(factories);
-  }
-  /**
-   * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the
-   * inherited {@link IterableDiffers} instance with the provided factories and return a new
-   * {@link IterableDiffers} instance.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example shows how to extend an existing list of factories,
-   * which will only be applied to the injector for this component and its children.
-   * This step is all that's required to make a new {@link IterableDiffer} available.
-   *
-   * ```
-   * @Component({
-   *   viewProviders: [
-   *     IterableDiffers.extend([new ImmutableListDiffer()])
-   *   ]
-   * })
-   * ```
-   */
-  static extend(factories) {
-    return {
-      provide: _IterableDiffers,
-      useFactory: (parent) => {
-        return _IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());
-      },
-      // Dependency technically isn't optional, but we can provide a better error message this way.
-      deps: [[_IterableDiffers, new SkipSelf(), new Optional()]]
-    };
-  }
-  find(iterable) {
-    const factory = this.factories.find((f) => f.supports(iterable));
-    if (factory != null) {
-      return factory;
-    } else {
-      throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);
-    }
-  }
-};
-function getTypeNameForDebugging(type) {
-  return type["name"] || typeof type;
-}
-function defaultKeyValueDiffersFactory() {
-  return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);
-}
-var KeyValueDiffers = class _KeyValueDiffers {
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _KeyValueDiffers,
-      providedIn: "root",
-      factory: defaultKeyValueDiffersFactory
-    })
-  );
-  factories;
-  constructor(factories) {
-    this.factories = factories;
-  }
-  static create(factories, parent) {
-    if (parent) {
-      const copied = parent.factories.slice();
-      factories = factories.concat(copied);
-    }
-    return new _KeyValueDiffers(factories);
-  }
-  /**
-   * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the
-   * inherited {@link KeyValueDiffers} instance with the provided factories and return a new
-   * {@link KeyValueDiffers} instance.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * The following example shows how to extend an existing list of factories,
-   * which will only be applied to the injector for this component and its children.
-   * This step is all that's required to make a new {@link KeyValueDiffer} available.
-   *
-   * ```
-   * @Component({
-   *   viewProviders: [
-   *     KeyValueDiffers.extend([new ImmutableMapDiffer()])
-   *   ]
-   * })
-   * ```
-   */
-  static extend(factories) {
-    return {
-      provide: _KeyValueDiffers,
-      useFactory: (parent) => {
-        return _KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());
-      },
-      // Dependency technically isn't optional, but we can provide a better error message this way.
-      deps: [[_KeyValueDiffers, new SkipSelf(), new Optional()]]
-    };
-  }
-  find(kv) {
-    const factory = this.factories.find((f) => f.supports(kv));
-    if (factory) {
-      return factory;
-    }
-    throw new RuntimeError(901, ngDevMode && `Cannot find a differ supporting object '${kv}'`);
-  }
-};
-var keyValDiff = [new DefaultKeyValueDifferFactory()];
-var iterableDiff = [new DefaultIterableDifferFactory()];
-var defaultIterableDiffers = new IterableDiffers(iterableDiff);
-var defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
-var platformCore = createPlatformFactory(null, "core", []);
-var ApplicationModule = class _ApplicationModule {
-  // Inject ApplicationRef to make it eager...
-  constructor(appRef) {
-  }
-  static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ApplicationModule)(ɵɵinject(ApplicationRef));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _ApplicationModule
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
-    type: NgModule
-  }], () => [{
-    type: ApplicationRef
-  }], null);
-})();
-function defaultEquals2(a, b) {
-  return Object.is(a, b);
-}
-var activeConsumer2 = null;
-var SIGNAL2 = Symbol("SIGNAL");
-function setActiveConsumer2(consumer) {
-  const prev = activeConsumer2;
-  activeConsumer2 = consumer;
-  return prev;
-}
-var REACTIVE_NODE2 = {
-  version: 0,
-  lastCleanEpoch: 0,
-  dirty: false,
-  producerNode: void 0,
-  producerLastReadVersion: void 0,
-  producerIndexOfThis: void 0,
-  nextProducerIndex: 0,
-  liveConsumerNode: void 0,
-  liveConsumerIndexOfThis: void 0,
-  consumerAllowSignalWrites: false,
-  consumerIsAlwaysLive: false,
-  producerMustRecompute: () => false,
-  producerRecomputeValue: () => {
-  },
-  consumerMarkedDirty: () => {
-  },
-  consumerOnSignalRead: () => {
-  }
-};
-function consumerBeforeComputation2(node) {
-  node && (node.nextProducerIndex = 0);
-  return setActiveConsumer2(node);
-}
-function consumerAfterComputation2(node, prevConsumer) {
-  setActiveConsumer2(prevConsumer);
-  if (!node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0) {
-    return;
-  }
-  if (consumerIsLive2(node)) {
-    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex2(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  while (node.producerNode.length > node.nextProducerIndex) {
-    node.producerNode.pop();
-    node.producerLastReadVersion.pop();
-    node.producerIndexOfThis.pop();
-  }
-}
-function producerRemoveLiveConsumerAtIndex2(node, idx) {
-  assertProducerNode2(node);
-  if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) {
-    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);
-  }
-  if (node.liveConsumerNode.length === 1 && isConsumerNode2(node)) {
-    for (let i = 0; i < node.producerNode.length; i++) {
-      producerRemoveLiveConsumerAtIndex2(node.producerNode[i], node.producerIndexOfThis[i]);
-    }
-  }
-  const lastIdx = node.liveConsumerNode.length - 1;
-  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];
-  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];
-  node.liveConsumerNode.length--;
-  node.liveConsumerIndexOfThis.length--;
-  if (idx < node.liveConsumerNode.length) {
-    const idxProducer = node.liveConsumerIndexOfThis[idx];
-    const consumer = node.liveConsumerNode[idx];
-    assertConsumerNode2(consumer);
-    consumer.producerIndexOfThis[idxProducer] = idx;
-  }
-}
-function consumerIsLive2(node) {
-  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;
-}
-function assertConsumerNode2(node) {
-  node.producerNode ??= [];
-  node.producerIndexOfThis ??= [];
-  node.producerLastReadVersion ??= [];
-}
-function assertProducerNode2(node) {
-  node.liveConsumerNode ??= [];
-  node.liveConsumerIndexOfThis ??= [];
-}
-function isConsumerNode2(node) {
-  return node.producerNode !== void 0;
-}
-var UNSET$1 = Symbol("UNSET");
-var COMPUTING$1 = Symbol("COMPUTING");
-var ERRORED$1 = Symbol("ERRORED");
-var COMPUTED_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    value: UNSET$1,
-    dirty: true,
-    error: null,
-    equal: defaultEquals2,
-    producerMustRecompute(node) {
-      return node.value === UNSET$1 || node.value === COMPUTING$1;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING$1) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING$1;
-      const prevConsumer = consumerBeforeComputation2(node);
-      let newValue;
-      try {
-        newValue = node.computation();
-      } catch (err) {
-        newValue = ERRORED$1;
-        node.error = err;
-      } finally {
-        consumerAfterComputation2(node, prevConsumer);
-      }
-      if (oldValue !== UNSET$1 && oldValue !== ERRORED$1 && newValue !== ERRORED$1 && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-var SIGNAL_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    equal: defaultEquals2,
-    value: void 0
-  });
-})();
-var NOOP_CLEANUP_FN2 = () => {
-};
-var WATCH_NODE2 = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE2), {
-    consumerIsAlwaysLive: true,
-    consumerAllowSignalWrites: false,
-    consumerMarkedDirty: (node) => {
-      if (node.schedule !== null) {
-        node.schedule(node.ref);
-      }
-    },
-    hasRun: false,
-    cleanupFn: NOOP_CLEANUP_FN2
-  });
-})();
-function setAlternateWeakRefImpl(impl) {
-}
-function internalCreateApplication(config) {
-  try {
-    const {
-      rootComponent,
-      appProviders,
-      platformProviders
-    } = config;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && rootComponent !== void 0) {
-      assertStandaloneComponentType(rootComponent);
-    }
-    const platformInjector = createOrReusePlatformInjector(platformProviders);
-    const allAppProviders = [internalProvideZoneChangeDetection({}), {
-      provide: ChangeDetectionScheduler,
-      useExisting: ChangeDetectionSchedulerImpl
-    }, ...appProviders || []];
-    const adapter = new EnvironmentNgModuleRefAdapter({
-      providers: allAppProviders,
-      parent: platformInjector,
-      debugName: typeof ngDevMode === "undefined" || ngDevMode ? "Environment Injector" : "",
-      // We skip environment initializers because we need to run them inside the NgZone, which
-      // happens after we get the NgZone instance from the Injector.
-      runEnvironmentInitializers: false
-    });
-    return bootstrap({
-      r3Injector: adapter.injector,
-      platformInjector,
-      rootComponent
-    });
-  } catch (e) {
-    return Promise.reject(e);
-  }
-}
-function getDeferBlocks(lView, deferBlocks) {
-  const tView = lView[TVIEW];
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    if (isLContainer(lView[i])) {
-      const lContainer = lView[i];
-      const isLast = i === tView.bindingStartIndex - 1;
-      if (!isLast) {
-        const tNode = tView.data[i];
-        const tDetails = getTDeferBlockDetails(tView, tNode);
-        if (isTDeferBlockDetails(tDetails)) {
-          deferBlocks.push({
-            lContainer,
-            lView,
-            tNode,
-            tDetails
-          });
-          continue;
-        }
-      }
-      for (let i2 = CONTAINER_HEADER_OFFSET; i2 < lContainer.length; i2++) {
-        getDeferBlocks(lContainer[i2], deferBlocks);
-      }
-    } else if (isLView(lView[i])) {
-      getDeferBlocks(lView[i], deferBlocks);
-    }
-  }
-}
-function withEventReplay() {
-  const providers = [{
-    provide: IS_EVENT_REPLAY_ENABLED,
-    useFactory: () => {
-      let isEnabled = true;
-      if (false) {
-        const appId = inject(APP_ID);
-        isEnabled = !!window._ejsas?.[appId];
-      }
-      if (isEnabled) {
-        performanceMarkFeature("NgEventReplay");
-      }
-      return isEnabled;
-    }
-  }];
-  if (false) {
-    providers.push({
-      provide: ENVIRONMENT_INITIALIZER,
-      useValue: () => {
-        const injector = inject(Injector);
-        const appRef = injector.get(ApplicationRef);
-        if (!appsWithEventReplay.has(appRef)) {
-          const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);
-          if (shouldEnableEventReplay(injector)) {
-            setStashFn((rEl, eventName, listenerFn) => {
-              sharedStashFunction(rEl, eventName, listenerFn);
-              sharedMapFunction(rEl, jsActionMap);
-            });
-          }
-        }
-      },
-      multi: true
-    }, {
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        const injector = inject(Injector);
-        const appRef = inject(ApplicationRef);
-        return () => {
-          if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {
-            return;
-          }
-          appsWithEventReplay.add(appRef);
-          appRef.onDestroy(() => appsWithEventReplay.delete(appRef));
-          appRef.whenStable().then(() => {
-            const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);
-            initEventReplay(eventContractDetails, injector);
-            const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);
-            jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);
-            jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);
-            const eventContract = eventContractDetails.instance;
-            if (isIncrementalHydrationEnabled(injector)) {
-              appRef.onDestroy(() => eventContract.cleanUp());
-            } else {
-              eventContract.cleanUp();
-            }
-          });
-        };
-      },
-      multi: true
-    });
-  }
-  return providers;
-}
-function collectDomEventsInfo(tView, lView, eventTypesToReplay) {
-  const domEventsInfo = /* @__PURE__ */ new Map();
-  const lCleanup = lView[CLEANUP];
-  const tCleanup = tView.cleanup;
-  if (!tCleanup || !lCleanup) {
-    return domEventsInfo;
-  }
-  for (let i = 0; i < tCleanup.length; ) {
-    const firstParam = tCleanup[i++];
-    const secondParam = tCleanup[i++];
-    if (typeof firstParam !== "string") {
-      continue;
-    }
-    const eventType = firstParam;
-    if (!isEarlyEventType(eventType)) {
-      continue;
-    }
-    if (isCaptureEventType(eventType)) {
-      eventTypesToReplay.capture.add(eventType);
-    } else {
-      eventTypesToReplay.regular.add(eventType);
-    }
-    const listenerElement = unwrapRNode(lView[secondParam]);
-    i++;
-    const useCaptureOrIndx = tCleanup[i++];
-    const isDomEvent = typeof useCaptureOrIndx === "boolean" || useCaptureOrIndx >= 0;
-    if (!isDomEvent) {
-      continue;
-    }
-    if (!domEventsInfo.has(listenerElement)) {
-      domEventsInfo.set(listenerElement, [eventType]);
-    } else {
-      domEventsInfo.get(listenerElement).push(eventType);
-    }
-  }
-  return domEventsInfo;
-}
-var SerializedViewCollection = class {
-  views = [];
-  indexByContent = /* @__PURE__ */ new Map();
-  add(serializedView) {
-    const viewAsString = JSON.stringify(serializedView);
-    if (!this.indexByContent.has(viewAsString)) {
-      const index = this.views.length;
-      this.views.push(serializedView);
-      this.indexByContent.set(viewAsString, index);
-      return index;
-    }
-    return this.indexByContent.get(viewAsString);
-  }
-  getAll() {
-    return this.views;
-  }
-};
-var tViewSsrId = 0;
-function getSsrId(tView) {
-  if (!tView.ssrId) {
-    tView.ssrId = `t${tViewSsrId++}`;
-  }
-  return tView.ssrId;
-}
-function calcNumRootNodes(tView, lView, tNode) {
-  const rootNodes = [];
-  collectNativeNodes(tView, lView, tNode, rootNodes);
-  return rootNodes.length;
-}
-function calcNumRootNodesInLContainer(lContainer) {
-  const rootNodes = [];
-  collectNativeNodesInLContainer(lContainer, rootNodes);
-  return rootNodes.length;
-}
-function annotateComponentLViewForHydration(lView, context, injector) {
-  const hostElement = lView[HOST];
-  if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-    return annotateHostElementForHydration(hostElement, lView, null, context);
-  }
-  return null;
-}
-function annotateLContainerForHydration(lContainer, context, injector) {
-  const componentLView = unwrapLView(lContainer[HOST]);
-  const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context, injector);
-  if (componentLViewNghIndex === null) {
-    return;
-  }
-  const hostElement = unwrapRNode(componentLView[HOST]);
-  const rootLView = lContainer[PARENT];
-  const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context);
-  const renderer = componentLView[RENDERER];
-  const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;
-  renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);
-}
-function annotateForHydration(appRef, doc) {
-  const injector = appRef.injector;
-  const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);
-  const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);
-  const serializedViewCollection = new SerializedViewCollection();
-  const corruptedTextNodes = /* @__PURE__ */ new Map();
-  const viewRefs = appRef._views;
-  const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);
-  const eventTypesToReplay = {
-    regular: /* @__PURE__ */ new Set(),
-    capture: /* @__PURE__ */ new Set()
-  };
-  const deferBlocks = /* @__PURE__ */ new Map();
-  const appId = appRef.injector.get(APP_ID);
-  for (const viewRef of viewRefs) {
-    const lNode = getLNodeForHydration(viewRef);
-    if (lNode !== null) {
-      const context = {
-        serializedViewCollection,
-        corruptedTextNodes,
-        isI18nHydrationEnabled: isI18nHydrationEnabledVal,
-        isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,
-        i18nChildren: /* @__PURE__ */ new Map(),
-        eventTypesToReplay,
-        shouldReplayEvents,
-        appId,
-        deferBlocks
-      };
-      if (isLContainer(lNode)) {
-        annotateLContainerForHydration(lNode, context, injector);
-      } else {
-        annotateComponentLViewForHydration(lNode, context, injector);
-      }
-      insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);
-    }
-  }
-  const serializedViews = serializedViewCollection.getAll();
-  const transferState = injector.get(TransferState);
-  transferState.set(NGH_DATA_KEY, serializedViews);
-  if (deferBlocks.size > 0) {
-    const blocks = {};
-    for (const [id, info] of deferBlocks.entries()) {
-      blocks[id] = info;
-    }
-    transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);
-  }
-  return eventTypesToReplay;
-}
-function serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context) {
-  const views = [];
-  let lastViewAsString = "";
-  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
-    let childLView = lContainer[i];
-    let template;
-    let numRootNodes;
-    let serializedView;
-    if (isRootView(childLView)) {
-      childLView = childLView[HEADER_OFFSET];
-      if (isLContainer(childLView)) {
-        numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;
-        annotateLContainerForHydration(childLView, context, lView[INJECTOR]);
-        const componentLView = unwrapLView(childLView[HOST]);
-        serializedView = {
-          [TEMPLATE_ID]: componentLView[TVIEW].ssrId,
-          [NUM_ROOT_NODES]: numRootNodes
-        };
-      }
-    }
-    if (!serializedView) {
-      const childTView = childLView[TVIEW];
-      if (childTView.type === 1) {
-        template = childTView.ssrId;
-        numRootNodes = 1;
-      } else {
-        template = getSsrId(childTView);
-        numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);
-      }
-      serializedView = {
-        [TEMPLATE_ID]: template,
-        [NUM_ROOT_NODES]: numRootNodes
-      };
-      let isHydrateNeverBlock = false;
-      if (isDeferBlock(lView[TVIEW], tNode)) {
-        const lDetails = getLDeferBlockDetails(lView, tNode);
-        const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);
-        if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {
-          const deferBlockId = `d${context.deferBlocks.size}`;
-          if (tDetails.hydrateTriggers.has(
-            7
-            /* DeferBlockTrigger.Never */
-          )) {
-            isHydrateNeverBlock = true;
-          }
-          let rootNodes = [];
-          collectNativeNodesInLContainer(lContainer, rootNodes);
-          const deferBlockInfo = {
-            [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,
-            [NUM_ROOT_NODES]: rootNodes.length,
-            [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE]
-          };
-          const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);
-          if (serializedTriggers.length > 0) {
-            deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;
-          }
-          context.deferBlocks.set(deferBlockId, deferBlockInfo);
-          const node = unwrapRNode(lContainer);
-          if (node !== void 0) {
-            if (node.nodeType === Node.COMMENT_NODE) {
-              annotateDeferBlockAnchorForHydration(node, deferBlockId);
-            }
-          } else {
-            ngDevMode && validateNodeExists(node, childLView, tNode);
-            ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);
-            annotateDeferBlockAnchorForHydration(node, deferBlockId);
-          }
-          if (!isHydrateNeverBlock) {
-            annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context);
-          }
-          parentDeferBlockId = deferBlockId;
-          serializedView[DEFER_BLOCK_ID] = deferBlockId;
-        }
-        serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];
-      }
-      if (!isHydrateNeverBlock) {
-        Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));
-      }
-    }
-    const currentViewAsString = JSON.stringify(serializedView);
-    if (views.length > 0 && currentViewAsString === lastViewAsString) {
-      const previousView = views[views.length - 1];
-      previousView[MULTIPLIER] ??= 1;
-      previousView[MULTIPLIER]++;
-    } else {
-      lastViewAsString = currentViewAsString;
-      views.push(serializedView);
-    }
-  }
-  return views;
-}
-function serializeHydrateTriggers(triggerMap) {
-  const serializableDeferBlockTrigger = /* @__PURE__ */ new Set([
-    0,
-    1,
-    2,
-    5
-    /* DeferBlockTrigger.Timer */
-  ]);
-  let triggers = [];
-  for (let [trigger, details] of triggerMap) {
-    if (serializableDeferBlockTrigger.has(trigger)) {
-      if (details === null) {
-        triggers.push(trigger);
-      } else {
-        triggers.push({
-          trigger,
-          delay: details.delay
-        });
-      }
-    }
-  }
-  return triggers;
-}
-function appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {
-  const noOffsetIndex = tNode.index - HEADER_OFFSET;
-  ngh[NODES] ??= {};
-  ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);
-}
-function appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {
-  const noOffsetIndex = typeof tNodeOrNoOffsetIndex === "number" ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;
-  ngh[DISCONNECTED_NODES] ??= [];
-  if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {
-    ngh[DISCONNECTED_NODES].push(noOffsetIndex);
-  }
-}
-function serializeLView(lView, parentDeferBlockId = null, context) {
-  const ngh = {};
-  const tView = lView[TVIEW];
-  const i18nChildren = getOrComputeI18nChildren(tView, context);
-  const nativeElementsToEventTypes = context.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context.eventTypesToReplay) : null;
-  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
-    const tNode = tView.data[i];
-    const noOffsetIndex = i - HEADER_OFFSET;
-    const i18nData = trySerializeI18nBlock(lView, i, context);
-    if (i18nData) {
-      ngh[I18N_DATA] ??= {};
-      ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;
-      for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {
-        appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);
-      }
-      for (const nodeNoOffsetIndex of i18nData.disjointNodes) {
-        const tNode2 = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];
-        ngDevMode && assertTNode(tNode2);
-        appendSerializedNodePath(ngh, tNode2, lView, i18nChildren);
-      }
-      continue;
-    }
-    if (!isTNodeShape(tNode)) {
-      continue;
-    }
-    if (isDetachedByI18n(tNode)) {
-      continue;
-    }
-    if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {
-      appendDisconnectedNodeIndex(ngh, tNode);
-      continue;
-    }
-    if (Array.isArray(tNode.projection)) {
-      for (const projectionHeadTNode of tNode.projection) {
-        if (!projectionHeadTNode) continue;
-        if (!Array.isArray(projectionHeadTNode)) {
-          if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {
-            if (isDisconnectedNode(projectionHeadTNode, lView)) {
-              appendDisconnectedNodeIndex(ngh, projectionHeadTNode);
-            } else {
-              appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);
-            }
-          }
-        } else {
-          throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));
-        }
-      }
-    }
-    conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);
-    if (isLContainer(lView[i])) {
-      const embeddedTView = tNode.tView;
-      if (embeddedTView !== null) {
-        ngh[TEMPLATES] ??= {};
-        ngh[TEMPLATES][noOffsetIndex] = getSsrId(embeddedTView);
-      }
-      const hostNode = lView[i][HOST];
-      if (Array.isArray(hostNode)) {
-        const targetNode = unwrapRNode(hostNode);
-        if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-          annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context);
-        }
-      }
-      ngh[CONTAINERS] ??= {};
-      ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context);
-    } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {
-      const targetNode = unwrapRNode(lView[i][HOST]);
-      if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {
-        annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context);
-      }
-    } else {
-      if (tNode.type & 8) {
-        ngh[ELEMENT_CONTAINERS] ??= {};
-        ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);
-      } else if (tNode.type & (16 | 128)) {
-        let nextTNode = tNode.next;
-        while (nextTNode !== null && nextTNode.type & (16 | 128)) {
-          nextTNode = nextTNode.next;
-        }
-        if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {
-          appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);
-        }
-      } else if (tNode.type & 1) {
-        const rNode = unwrapRNode(lView[i]);
-        processTextNodeBeforeSerialization(context, rNode);
-      }
-    }
-    if (nativeElementsToEventTypes && tNode.type & 2) {
-      const nativeElement = unwrapRNode(lView[i]);
-      if (nativeElementsToEventTypes.has(nativeElement)) {
-        setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);
-      }
-    }
-  }
-  return ngh;
-}
-function conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {
-  if (isProjectionTNode(tNode)) {
-    return;
-  }
-  if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {
-    appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);
-  }
-  if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {
-    appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);
-  }
-}
-function componentUsesShadowDomEncapsulation(lView) {
-  const instance = lView[CONTEXT];
-  return instance?.constructor ? getComponentDef(instance.constructor)?.encapsulation === ViewEncapsulation.ShadowDom : false;
-}
-function annotateHostElementForHydration(element, lView, parentDeferBlockId, context) {
-  const renderer = lView[RENDERER];
-  if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {
-    renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, "");
-    return null;
-  } else {
-    const ngh = serializeLView(lView, parentDeferBlockId, context);
-    const index = context.serializedViewCollection.add(ngh);
-    renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());
-    return index;
-  }
-}
-function annotateDeferBlockAnchorForHydration(comment, deferBlockId) {
-  comment.textContent = `ngh=${deferBlockId}`;
-}
-function insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {
-  for (const [textNode, marker] of corruptedTextNodes) {
-    textNode.after(doc.createComment(marker));
-  }
-}
-function isContentProjectedNode(tNode) {
-  let currentTNode = tNode;
-  while (currentTNode != null) {
-    if (isComponentHost(currentTNode)) {
-      return true;
-    }
-    currentTNode = currentTNode.parent;
-  }
-  return false;
-}
-function annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context) {
-  const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);
-  for (let et of actionList) {
-    context.eventTypesToReplay.regular.add(et);
-  }
-  if (actionList.length > 0) {
-    const elementNodes = rootNodes.filter((rn) => rn.nodeType === Node.ELEMENT_NODE);
-    for (let rNode of elementNodes) {
-      setJSActionAttributes(rNode, actionList, parentDeferBlockId);
-    }
-  }
-}
-var isHydrationSupportEnabled = false;
-var isI18nHydrationRuntimeSupportEnabled = false;
-var isIncrementalHydrationRuntimeSupportEnabled = false;
-function enableHydrationRuntimeSupport() {
-  if (!isHydrationSupportEnabled) {
-    isHydrationSupportEnabled = true;
-    enableRetrieveHydrationInfoImpl();
-    enableLocateOrCreateElementNodeImpl();
-    enableLocateOrCreateTextNodeImpl();
-    enableLocateOrCreateElementContainerNodeImpl();
-    enableLocateOrCreateContainerAnchorImpl();
-    enableLocateOrCreateContainerRefImpl();
-    enableFindMatchingDehydratedViewImpl();
-    enableApplyRootElementTransformImpl();
-  }
-}
-function enableI18nHydrationRuntimeSupport() {
-  if (!isI18nHydrationRuntimeSupportEnabled) {
-    isI18nHydrationRuntimeSupportEnabled = true;
-    enableLocateOrCreateI18nNodeImpl();
-    enablePrepareI18nBlockForHydrationImpl();
-    enableClaimDehydratedIcuCaseImpl();
-  }
-}
-function enableIncrementalHydrationRuntimeSupport() {
-  if (!isIncrementalHydrationRuntimeSupportEnabled) {
-    isIncrementalHydrationRuntimeSupportEnabled = true;
-    enableRetrieveDeferBlockDataImpl();
-  }
-}
-function isClientRenderModeEnabled() {
-  const doc = getDocument();
-  return false;
-}
-function withDomHydration() {
-  const providers = [{
-    provide: IS_HYDRATION_DOM_REUSE_ENABLED,
-    useFactory: () => {
-      let isEnabled = true;
-      if (false) {
-        const transferState = inject(TransferState, {
-          optional: true
-        });
-        isEnabled = !!transferState?.get(NGH_DATA_KEY, null);
-      }
-      if (isEnabled) {
-        performanceMarkFeature("NgHydration");
-      }
-      return isEnabled;
-    }
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      setIsI18nHydrationSupportEnabled(false);
-      if (true) {
-        return;
-      }
-      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-        verifySsrContentsIntegrity();
-        enableHydrationRuntimeSupport();
-      } else if (typeof ngDevMode !== "undefined" && ngDevMode && !isClientRenderModeEnabled()) {
-        const console2 = inject(Console);
-        const message = formatRuntimeError(-505, "Angular hydration was requested on the client, but there was no serialized information present in the server response, thus hydration was not enabled. Make sure the `provideClientHydration()` is included into the list of providers in the server part of the application configuration.");
-        console2.warn(message);
-      }
-    },
-    multi: true
-  }];
-  if (false) {
-    providers.push({
-      provide: PRESERVE_HOST_CONTENT,
-      useFactory: () => {
-        return inject(IS_HYDRATION_DOM_REUSE_ENABLED);
-      }
-    }, {
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-          const appRef = inject(ApplicationRef);
-          const injector = inject(Injector);
-          return () => {
-            whenStableWithTimeout(appRef, injector).then(() => {
-              cleanupDehydratedViews(appRef);
-              if (typeof ngDevMode !== "undefined" && ngDevMode) {
-                countBlocksSkippedByHydration(injector);
-                printHydrationStats(injector);
-              }
-            });
-          };
-        }
-        return () => {
-        };
-      },
-      multi: true
-    });
-  }
-  return makeEnvironmentProviders(providers);
-}
-function withI18nSupport() {
-  return [{
-    provide: IS_I18N_HYDRATION_ENABLED,
-    useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
-        enableI18nHydrationRuntimeSupport();
-        setIsI18nHydrationSupportEnabled(true);
-        performanceMarkFeature("NgI18nHydration");
-      }
-    },
-    multi: true
-  }];
-}
-function withIncrementalHydration() {
-  const providers = [withEventReplay(), {
-    provide: IS_INCREMENTAL_HYDRATION_ENABLED,
-    useValue: true
-  }, {
-    provide: DEHYDRATED_BLOCK_REGISTRY,
-    useClass: DehydratedBlockRegistry
-  }, {
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      enableIncrementalHydrationRuntimeSupport();
-      performanceMarkFeature("NgIncrementalHydration");
-    },
-    multi: true
-  }];
-  if (false) {
-    providers.push({
-      provide: APP_BOOTSTRAP_LISTENER,
-      useFactory: () => {
-        const injector = inject(Injector);
-        const doc = getDocument();
-        return () => {
-          const deferBlockData = processBlockData(injector);
-          const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);
-          processAndInitTriggers(injector, deferBlockData, commentsByBlockId);
-          appendDeferBlocksToJSActionMap(doc, injector);
-        };
-      },
-      multi: true
-    });
-  }
-  return providers;
-}
-function verifySsrContentsIntegrity() {
-  const doc = getDocument();
-  let hydrationMarker;
-  for (const node of doc.body.childNodes) {
-    if (node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {
-      hydrationMarker = node;
-      break;
-    }
-  }
-  if (!hydrationMarker) {
-    throw new RuntimeError(-507, typeof ngDevMode !== "undefined" && ngDevMode && "Angular hydration logic detected that HTML content of this page was modified after it was produced during server side rendering. Make sure that there are no optimizations that remove comment nodes from HTML enabled on your CDN. Angular hydration relies on HTML produced by the server, including whitespaces and comment nodes.");
-  }
-}
-function booleanAttribute(value) {
-  return typeof value === "boolean" ? value : value != null && value !== "false";
-}
-function numberAttribute(value, fallbackValue = NaN) {
-  const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));
-  return isNumberValue ? Number(value) : fallbackValue;
-}
-var PERFORMANCE_MARK_PREFIX = "🅰️";
-var enablePerfLogging = false;
-function startMeasuring(label) {
-  if (!enablePerfLogging) {
-    return;
-  }
-  const {
-    startLabel
-  } = labels(label);
-  performance.mark(startLabel);
-}
-function stopMeasuring(label) {
-  if (!enablePerfLogging) {
-    return;
-  }
-  const {
-    startLabel,
-    labelName,
-    endLabel
-  } = labels(label);
-  performance.mark(endLabel);
-  performance.measure(labelName, startLabel, endLabel);
-  performance.clearMarks(startLabel);
-  performance.clearMarks(endLabel);
-}
-function labels(label) {
-  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;
-  return {
-    labelName,
-    startLabel: `start:${labelName}`,
-    endLabel: `end:${labelName}`
-  };
-}
-var warningLogged = false;
-function enableProfiling() {
-  if (!warningLogged && (typeof performance === "undefined" || !performance.mark || !performance.measure)) {
-    warningLogged = true;
-    console.warn("Performance API is not supported on this platform");
-    return;
-  }
-  enablePerfLogging = true;
-}
-function disableProfiling() {
-  enablePerfLogging = false;
-}
-function getClosestComponentName(node) {
-  let currentNode = node;
-  while (currentNode) {
-    const lView = readPatchedLView(currentNode);
-    if (lView !== null) {
-      for (let i = HEADER_OFFSET; i < lView.length; i++) {
-        const current = lView[i];
-        if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {
-          continue;
-        }
-        const tView = lView[TVIEW];
-        const tNode = getTNode(tView, i);
-        if (isComponentHost(tNode)) {
-          const def = tView.data[tNode.directiveStart + tNode.componentOffset];
-          const name = def.debugInfo?.className || def.type.name;
-          if (name) {
-            return name;
-          } else {
-            break;
-          }
-        }
-      }
-    }
-    currentNode = currentNode.parentNode;
-  }
-  return null;
-}
-function ɵɵngDeclareDirective(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "directive",
-    type: decl.type
-  });
-  return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
-}
-function ɵɵngDeclareClassMetadata(decl) {
-  setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);
-}
-function ɵɵngDeclareClassMetadataAsync(decl) {
-  setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {
-    const meta = decl.resolveMetadata(...types);
-    setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);
-  });
-}
-function ɵɵngDeclareComponent(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "component",
-    type: decl.type
-  });
-  return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);
-}
-function ɵɵngDeclareFactory(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: getFactoryKind(decl.target),
-    type: decl.type
-  });
-  return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);
-}
-function getFactoryKind(target) {
-  switch (target) {
-    case FactoryTarget.Directive:
-      return "directive";
-    case FactoryTarget.Component:
-      return "component";
-    case FactoryTarget.Injectable:
-      return "injectable";
-    case FactoryTarget.Pipe:
-      return "pipe";
-    case FactoryTarget.NgModule:
-      return "NgModule";
-  }
-}
-function ɵɵngDeclareInjectable(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "injectable",
-    type: decl.type
-  });
-  return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);
-}
-function ɵɵngDeclareInjector(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "NgModule",
-    type: decl.type
-  });
-  return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);
-}
-function ɵɵngDeclareNgModule(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "NgModule",
-    type: decl.type
-  });
-  return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);
-}
-function ɵɵngDeclarePipe(decl) {
-  const compiler = getCompilerFacade({
-    usage: 1,
-    kind: "pipe",
-    type: decl.type
-  });
-  return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
-}
-function computed(computation, options) {
-  performanceMarkFeature("NgSignals");
-  const getter = createComputed(computation);
-  if (options?.equal) {
-    getter[SIGNAL].equal = options.equal;
-  }
-  if (ngDevMode) {
-    getter.toString = () => `[Computed: ${getter()}]`;
-    getter[SIGNAL].debugName = options?.debugName;
-  }
-  return getter;
-}
-var identityFn = (v) => v;
-function createLinkedSignal(node) {
-  const linkedSignalGetter = () => {
-    producerUpdateValueVersion(node);
-    producerAccessed(node);
-    if (node.value === ERRORED2) {
-      throw node.error;
-    }
-    return node.value;
-  };
-  const getter = linkedSignalGetter;
-  getter[SIGNAL] = node;
-  if (ngDevMode) {
-    getter.toString = () => `[LinkedSignal: ${getter()}]`;
-  }
-  getter.set = (newValue) => {
-    producerUpdateValueVersion(node);
-    signalSetFn(node, newValue);
-    producerMarkClean(node);
-  };
-  getter.update = (updateFn) => {
-    producerUpdateValueVersion(node);
-    signalUpdateFn(node, updateFn);
-    producerMarkClean(node);
-  };
-  getter.asReadonly = signalAsReadonlyFn.bind(getter);
-  return getter;
-}
-function linkedSignal(optionsOrComputation, options) {
-  performanceMarkFeature("NgSignals");
-  const isShorthand = typeof optionsOrComputation === "function";
-  const node = Object.create(LINKED_SIGNAL_NODE);
-  node.source = isShorthand ? optionsOrComputation : optionsOrComputation.source;
-  if (!isShorthand) {
-    node.computation = optionsOrComputation.computation;
-  }
-  const equal = isShorthand ? options?.equal : optionsOrComputation.equal;
-  if (equal) {
-    node.equal = equal;
-  }
-  return createLinkedSignal(node);
-}
-var UNSET2 = Symbol("UNSET");
-var COMPUTING2 = Symbol("COMPUTING");
-var ERRORED2 = Symbol("ERRORED");
-var LINKED_SIGNAL_NODE = (() => {
-  return __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-    value: UNSET2,
-    dirty: true,
-    error: null,
-    equal: defaultEquals,
-    computation: identityFn,
-    producerMustRecompute(node) {
-      return node.value === UNSET2 || node.value === COMPUTING2;
-    },
-    producerRecomputeValue(node) {
-      if (node.value === COMPUTING2) {
-        throw new Error("Detected cycle in computations.");
-      }
-      const oldValue = node.value;
-      node.value = COMPUTING2;
-      const prevConsumer = consumerBeforeComputation(node);
-      let newValue;
-      try {
-        const newSourceValue = node.source();
-        const prev = oldValue === UNSET2 || oldValue === ERRORED2 ? void 0 : {
-          source: node.sourceValue,
-          value: oldValue
-        };
-        newValue = node.computation(newSourceValue, prev);
-        node.sourceValue = newSourceValue;
-      } catch (err) {
-        newValue = ERRORED2;
-        node.error = err;
-      } finally {
-        consumerAfterComputation(node, prevConsumer);
-      }
-      if (oldValue !== UNSET2 && newValue !== ERRORED2 && node.equal(oldValue, newValue)) {
-        node.value = oldValue;
-        return;
-      }
-      node.value = newValue;
-      node.version++;
-    }
-  });
-})();
-function untracked(nonReactiveReadsFn) {
-  const prevConsumer = setActiveConsumer(null);
-  try {
-    return nonReactiveReadsFn();
-  } finally {
-    setActiveConsumer(prevConsumer);
-  }
-}
-var ViewContext = class {
-  view;
-  node;
-  constructor(view, node) {
-    this.view = view;
-    this.node = node;
-  }
-  /**
-   * @internal
-   * @nocollapse
-   */
-  static __NG_ELEMENT_ID__ = injectViewContext;
-};
-function injectViewContext() {
-  return new ViewContext(getLView(), getCurrentTNode());
-}
-var USE_MICROTASK_EFFECT_BY_DEFAULT = false;
-var MicrotaskEffectScheduler = class _MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {
-  pendingTasks = inject(PendingTasksInternal);
-  taskId = null;
-  schedule(effect2) {
-    super.schedule(effect2);
-    if (this.taskId === null) {
-      this.taskId = this.pendingTasks.add();
-      queueMicrotask(() => this.flush());
-    }
-  }
-  flush() {
-    try {
-      super.flush();
-    } finally {
-      if (this.taskId !== null) {
-        this.pendingTasks.remove(this.taskId);
-        this.taskId = null;
-      }
-    }
-  }
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _MicrotaskEffectScheduler,
-      providedIn: "root",
-      factory: () => new _MicrotaskEffectScheduler()
-    })
-  );
-};
-var EffectHandle = class {
-  scheduler;
-  effectFn;
-  zone;
-  injector;
-  unregisterOnDestroy;
-  watcher;
-  constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {
-    this.scheduler = scheduler;
-    this.effectFn = effectFn;
-    this.zone = zone;
-    this.injector = injector;
-    this.watcher = createWatch((onCleanup) => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);
-    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());
-  }
-  runEffect(onCleanup) {
-    try {
-      this.effectFn(onCleanup);
-    } catch (err) {
-      const errorHandler = this.injector.get(ErrorHandler, null, {
-        optional: true
-      });
-      errorHandler?.handleError(err);
-    }
-  }
-  run() {
-    this.watcher.run();
-  }
-  schedule() {
-    this.scheduler.schedule(this);
-  }
-  destroy() {
-    this.watcher.destroy();
-    this.unregisterOnDestroy?.();
-  }
-};
-function effect$1() {
-}
-function microtaskEffect(effectFn, options) {
-  performanceMarkFeature("NgSignals");
-  ngDevMode && assertNotInReactiveContext(effect$1, "Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor.");
-  !options?.injector && assertInInjectionContext(effect$1);
-  const injector = options?.injector ?? inject(Injector);
-  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === "undefined" ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);
-  const cdr = injector.get(ChangeDetectorRef, null, {
-    optional: true
-  });
-  if (!cdr || !(cdr._lView[FLAGS] & 8)) {
-    handle.watcher.notify();
-  } else {
-    (cdr._lView[EFFECTS_TO_SCHEDULE] ??= []).push(handle.watcher.notify);
-  }
-  return handle;
-}
-var useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;
-var EffectRefImpl = class {
-  [SIGNAL];
-  constructor(node) {
-    this[SIGNAL] = node;
-  }
-  destroy() {
-    this[SIGNAL].destroy();
-  }
-};
-function effect(effectFn, options) {
-  if (useMicrotaskEffectsByDefault) {
-    if (ngDevMode && options?.forceRoot) {
-      throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);
-    }
-    return microtaskEffect(effectFn, options);
-  }
-  performanceMarkFeature("NgSignals");
-  ngDevMode && assertNotInReactiveContext(effect, "Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor.");
-  !options?.injector && assertInInjectionContext(effect);
-  if (ngDevMode && options?.allowSignalWrites !== void 0) {
-    console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);
-  }
-  const injector = options?.injector ?? inject(Injector);
-  let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
-  let node;
-  const viewContext = injector.get(ViewContext, null, {
-    optional: true
-  });
-  const notifier = injector.get(ChangeDetectionScheduler);
-  if (viewContext !== null && !options?.forceRoot) {
-    node = createViewEffect(viewContext.view, notifier, effectFn);
-    if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {
-      destroyRef = null;
-    }
-  } else {
-    node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);
-  }
-  node.injector = injector;
-  if (destroyRef !== null) {
-    node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());
-  }
-  if (ngDevMode) {
-    node.debugName = options?.debugName ?? "";
-  }
-  return new EffectRefImpl(node);
-}
-var APP_EFFECT_SCHEDULER = new InjectionToken("", {
-  providedIn: "root",
-  factory: () => inject(EffectScheduler)
-});
-var BASE_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, REACTIVE_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerAllowSignalWrites: true,
-  dirty: true,
-  hasRun: false,
-  cleanupFns: void 0,
-  zone: null,
-  onDestroyFn: noop,
-  run() {
-    this.dirty = false;
-    if (ngDevMode && isInNotificationPhase()) {
-      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);
-    }
-    if (this.hasRun && !consumerPollProducersForChange(this)) {
-      return;
-    }
-    this.hasRun = true;
-    const registerCleanupFn = (cleanupFn) => (this.cleanupFns ??= []).push(cleanupFn);
-    const prevNode = consumerBeforeComputation(this);
-    const prevRefreshingViews = setIsRefreshingViews(false);
-    try {
-      this.maybeCleanup();
-      this.fn(registerCleanupFn);
-    } finally {
-      setIsRefreshingViews(prevRefreshingViews);
-      consumerAfterComputation(this, prevNode);
-    }
-  },
-  maybeCleanup() {
-    if (!this.cleanupFns?.length) {
-      return;
-    }
-    try {
-      while (this.cleanupFns.length) {
-        this.cleanupFns.pop()();
-      }
-    } finally {
-      this.cleanupFns = [];
-    }
-  }
-}))();
-var ROOT_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, BASE_EFFECT_NODE), {
-  consumerMarkedDirty() {
-    this.scheduler.schedule(this);
-    this.notifier.notify(
-      13
-      /* NotificationSource.RootEffect */
-    );
-  },
-  destroy() {
-    consumerDestroy(this);
-    this.onDestroyFn();
-    this.maybeCleanup();
-  }
-}))();
-var VIEW_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, BASE_EFFECT_NODE), {
-  consumerMarkedDirty() {
-    this.view[FLAGS] |= 8192;
-    markAncestorsForTraversal(this.view);
-    this.notifier.notify(
-      14
-      /* NotificationSource.ViewEffect */
-    );
-  },
-  destroy() {
-    consumerDestroy(this);
-    this.onDestroyFn();
-    this.maybeCleanup();
-    this.view[EFFECTS]?.delete(this);
-  }
-}))();
-function createViewEffect(view, notifier, fn) {
-  const node = Object.create(VIEW_EFFECT_NODE);
-  node.view = view;
-  node.zone = typeof Zone !== "undefined" ? Zone.current : null;
-  node.notifier = notifier;
-  node.fn = fn;
-  view[EFFECTS] ??= /* @__PURE__ */ new Set();
-  view[EFFECTS].add(node);
-  node.consumerMarkedDirty(node);
-  return node;
-}
-function createRootEffect(fn, scheduler, notifier) {
-  const node = Object.create(ROOT_EFFECT_NODE);
-  node.fn = fn;
-  node.scheduler = scheduler;
-  node.notifier = notifier;
-  node.zone = typeof Zone !== "undefined" ? Zone.current : null;
-  node.scheduler.schedule(node);
-  node.notifier.notify(
-    13
-    /* NotificationSource.RootEffect */
-  );
-  return node;
-}
-var NOT_SET = Symbol("NOT_SET");
-var EMPTY_CLEANUP_SET = /* @__PURE__ */ new Set();
-var AFTER_RENDER_PHASE_EFFECT_NODE = (() => __spreadProps(__spreadValues({}, SIGNAL_NODE), {
-  consumerIsAlwaysLive: true,
-  consumerAllowSignalWrites: true,
-  value: NOT_SET,
-  cleanup: null,
-  /** Called when the effect becomes dirty */
-  consumerMarkedDirty() {
-    if (this.sequence.impl.executing) {
-      if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {
-        return;
-      }
-      this.sequence.erroredOrDestroyed = true;
-    }
-    this.sequence.scheduler.notify(
-      7
-      /* NotificationSource.RenderHook */
-    );
-  },
-  phaseFn(previousValue) {
-    this.sequence.lastPhase = this.phase;
-    if (!this.dirty) {
-      return this.signal;
-    }
-    this.dirty = false;
-    if (this.value !== NOT_SET && !consumerPollProducersForChange(this)) {
-      return this.signal;
-    }
-    try {
-      for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {
-        cleanupFn();
-      }
-    } finally {
-      this.cleanup?.clear();
-    }
-    const args = [];
-    if (previousValue !== void 0) {
-      args.push(previousValue);
-    }
-    args.push(this.registerCleanupFn);
-    const prevConsumer = consumerBeforeComputation(this);
-    let newValue;
-    try {
-      newValue = this.userFn.apply(null, args);
-    } finally {
-      consumerAfterComputation(this, prevConsumer);
-    }
-    if (this.value === NOT_SET || !this.equal(this.value, newValue)) {
-      this.value = newValue;
-      this.version++;
-    }
-    return this.signal;
-  }
-}))();
-var AfterRenderEffectSequence = class extends AfterRenderSequence {
-  scheduler;
-  /**
-   * While this sequence is executing, this tracks the last phase which was called by the
-   * `afterRender` machinery.
-   *
-   * When a phase effect is marked dirty, this is used to determine whether it's already run or not.
-   */
-  lastPhase = null;
-  /**
-   * The reactive nodes for each phase, if a phase effect is defined for that phase.
-   *
-   * These are initialized to `undefined` but set in the constructor.
-   */
-  nodes = [void 0, void 0, void 0, void 0];
-  constructor(impl, effectHooks, scheduler, destroyRef, snapshot = null) {
-    super(impl, [void 0, void 0, void 0, void 0], false, destroyRef, snapshot);
-    this.scheduler = scheduler;
-    for (const phase of AFTER_RENDER_PHASES) {
-      const effectHook = effectHooks[phase];
-      if (effectHook === void 0) {
-        continue;
-      }
-      const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);
-      node.sequence = this;
-      node.phase = phase;
-      node.userFn = effectHook;
-      node.dirty = true;
-      node.signal = () => {
-        producerAccessed(node);
-        return node.value;
-      };
-      node.signal[SIGNAL] = node;
-      node.registerCleanupFn = (fn) => (node.cleanup ??= /* @__PURE__ */ new Set()).add(fn);
-      this.nodes[phase] = node;
-      this.hooks[phase] = (value) => node.phaseFn(value);
-    }
-  }
-  afterRun() {
-    super.afterRun();
-    this.lastPhase = null;
-  }
-  destroy() {
-    super.destroy();
-    for (const node of this.nodes) {
-      for (const fn of node?.cleanup ?? EMPTY_CLEANUP_SET) {
-        fn();
-      }
-    }
-  }
-};
-function afterRenderEffect(callbackOrSpec, options) {
-  ngDevMode && assertNotInReactiveContext(afterRenderEffect, "Call `afterRenderEffect` outside of a reactive context. For example, create the render effect inside the component constructor`.");
-  !options?.injector && assertInInjectionContext(afterRenderEffect);
-  if (true) {
-    return NOOP_AFTER_RENDER_REF;
-  }
-  const injector = options?.injector ?? inject(Injector);
-  const scheduler = injector.get(ChangeDetectionScheduler);
-  const manager = injector.get(AfterRenderManager);
-  const tracing = injector.get(TracingService, null, {
-    optional: true
-  });
-  manager.impl ??= injector.get(AfterRenderImpl);
-  let spec = callbackOrSpec;
-  if (typeof spec === "function") {
-    spec = {
-      mixedReadWrite: callbackOrSpec
-    };
-  }
-  const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], scheduler, injector.get(DestroyRef), tracing?.snapshot(null));
-  manager.impl.register(sequence);
-  return sequence;
-}
-var ResourceStatus;
-(function(ResourceStatus2) {
-  ResourceStatus2[ResourceStatus2["Idle"] = 0] = "Idle";
-  ResourceStatus2[ResourceStatus2["Error"] = 1] = "Error";
-  ResourceStatus2[ResourceStatus2["Loading"] = 2] = "Loading";
-  ResourceStatus2[ResourceStatus2["Reloading"] = 3] = "Reloading";
-  ResourceStatus2[ResourceStatus2["Resolved"] = 4] = "Resolved";
-  ResourceStatus2[ResourceStatus2["Local"] = 5] = "Local";
-})(ResourceStatus || (ResourceStatus = {}));
-function resource(options) {
-  options?.injector || assertInInjectionContext(resource);
-  const request = options.request ?? (() => null);
-  return new WritableResourceImpl(request, options.loader, options.equal, options.injector);
-}
-var BaseWritableResource = class {
-  value;
-  status = signal(ResourceStatus.Idle);
-  error = signal(void 0);
-  rawSetValue;
-  constructor(equal) {
-    this.value = signal(void 0, {
-      equal: equal ? wrapEqualityFn(equal) : void 0
-    });
-    this.rawSetValue = this.value.set;
-    this.value.set = (value) => this.set(value);
-    this.value.update = (fn) => this.set(fn(untracked(this.value)));
-  }
-  set(value) {
-    const prevVersion = this.value[SIGNAL].version;
-    this.rawSetValue(value);
-    if (this.value[SIGNAL].version === prevVersion) {
-      return;
-    }
-    this.onLocalValue();
-    this.status.set(ResourceStatus.Local);
-    this.error.set(void 0);
-  }
-  update(updater) {
-    this.value.update(updater);
-  }
-  isLoading = computed(() => this.status() === ResourceStatus.Loading || this.status() === ResourceStatus.Reloading);
-  hasValue() {
-    return this.status() === ResourceStatus.Resolved || this.status() === ResourceStatus.Local || this.status() === ResourceStatus.Reloading;
-  }
-  asReadonly() {
-    return this;
-  }
-  /**
-   * Put the resource in a state with a given value.
-   */
-  setValueState(status, value = void 0) {
-    this.status.set(status);
-    this.rawSetValue(value);
-    this.error.set(void 0);
-  }
-  /**
-   * Put the resource into the error state.
-   */
-  setErrorState(err) {
-    this.value.set(void 0);
-    this.status.set(ResourceStatus.Error);
-    this.error.set(err);
-  }
-};
-var WritableResourceImpl = class extends BaseWritableResource {
-  loaderFn;
-  request;
-  pendingTasks;
-  effectRef;
-  pendingController;
-  resolvePendingTask = void 0;
-  constructor(requestFn, loaderFn, equal, injector) {
-    super(equal);
-    this.loaderFn = loaderFn;
-    injector = injector ?? inject(Injector);
-    this.pendingTasks = injector.get(PendingTasks);
-    this.request = computed(() => ({
-      // The current request as defined for this resource.
-      request: requestFn(),
-      // A counter signal which increments from 0, re-initialized for each request (similar to the
-      // `linkedSignal` pattern). A value other than 0 indicates a refresh operation.
-      reload: signal(0)
-    }));
-    this.effectRef = effect(this.loadEffect.bind(this), {
-      injector,
-      manualCleanup: true
-    });
-    injector.get(DestroyRef).onDestroy(() => this.destroy());
-  }
-  reload() {
-    const status = untracked(this.status);
-    if (status === ResourceStatus.Idle || status === ResourceStatus.Loading || status === ResourceStatus.Reloading) {
-      return false;
-    }
-    untracked(this.request).reload.update((v) => v + 1);
-    return true;
-  }
-  destroy() {
-    this.effectRef.destroy();
-    this.abortInProgressLoad();
-    this.setValueState(ResourceStatus.Idle);
-  }
-  loadEffect() {
-    return __async(this, null, function* () {
-      const previousStatus = untracked(this.status);
-      this.abortInProgressLoad();
-      const request = this.request();
-      if (request.request === void 0) {
-        this.setValueState(ResourceStatus.Idle);
-        return;
-      }
-      if (request.reload() === 0) {
-        this.setValueState(ResourceStatus.Loading);
-      } else {
-        this.status.set(ResourceStatus.Reloading);
-      }
-      const resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();
-      const {
-        signal: abortSignal
-      } = this.pendingController = new AbortController();
-      try {
-        const result = yield untracked(() => this.loaderFn({
-          abortSignal,
-          request: request.request,
-          previous: {
-            status: previousStatus
-          }
-        }));
-        if (abortSignal.aborted) {
-          return;
-        }
-        this.setValueState(ResourceStatus.Resolved, result);
-      } catch (err) {
-        if (abortSignal.aborted) {
-          return;
-        }
-        this.setErrorState(err);
-      } finally {
-        resolvePendingTask();
-      }
-    });
-  }
-  abortInProgressLoad() {
-    this.pendingController?.abort();
-    this.pendingController = void 0;
-    this.resolvePendingTask?.();
-    this.resolvePendingTask = void 0;
-  }
-  onLocalValue() {
-    this.abortInProgressLoad();
-  }
-};
-function wrapEqualityFn(equal) {
-  return (a, b) => a === void 0 || b === void 0 ? a === b : equal(a, b);
-}
-function createComponent(component, options) {
-  ngDevMode && assertComponentDef(component);
-  const componentDef = getComponentDef(component);
-  const elementInjector = options.elementInjector || getNullInjector();
-  const factory = new ComponentFactory(componentDef);
-  return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector);
-}
-function reflectComponentType(component) {
-  const componentDef = getComponentDef(component);
-  if (!componentDef) return null;
-  const factory = new ComponentFactory(componentDef);
-  return {
-    get selector() {
-      return factory.selector;
-    },
-    get type() {
-      return factory.componentType;
-    },
-    get inputs() {
-      return factory.inputs;
-    },
-    get outputs() {
-      return factory.outputs;
-    },
-    get ngContentSelectors() {
-      return factory.ngContentSelectors;
-    },
-    get isStandalone() {
-      return componentDef.standalone;
-    },
-    get isSignal() {
-      return componentDef.signals;
-    }
-  };
-}
-function mergeApplicationConfig(...configs) {
-  return configs.reduce((prev, curr) => {
-    return Object.assign(prev, curr, {
-      providers: [...prev.providers, ...curr.providers]
-    });
-  }, {
-    providers: []
-  });
-}
-var REQUEST = new InjectionToken("REQUEST", {
-  providedIn: "platform",
-  factory: () => null
-});
-var RESPONSE_INIT = new InjectionToken("RESPONSE_INIT", {
-  providedIn: "platform",
-  factory: () => null
-});
-var REQUEST_CONTEXT = new InjectionToken("REQUEST_CONTEXT", {
-  providedIn: "platform",
-  factory: () => null
-});
-if (typeof ngDevMode !== "undefined" && ngDevMode) {
-  _global.$localize ??= function() {
-    throw new Error("It looks like your application or one of its dependencies is using i18n.\nAngular 9 introduced a global `$localize()` function that needs to be loaded.\nPlease run `ng add @angular/localize` from the Angular CLI.\n(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\nFor server-side rendering applications add the import to your `main.server.ts` file.)");
-  };
-}
-
-export {
-  SIGNAL,
-  require_cjs,
-  require_operators,
-  XSS_SECURITY_URL,
-  RuntimeError,
-  formatRuntimeError,
-  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,
-  noSideEffects,
-  _global,
-  stringify,
-  truncateMiddle,
-  forwardRef,
-  resolveForwardRef,
-  ɵɵdefineInjectable,
-  defineInjectable,
-  ɵɵdefineInjector,
-  getInjectableDef,
-  isInjectable,
-  NG_PROV_DEF,
-  NG_INJ_DEF,
-  InjectionToken,
-  setInjectorProfilerContext,
-  isEnvironmentProviders,
-  NG_COMP_DEF,
-  NG_DIR_DEF,
-  NG_PIPE_DEF,
-  NG_MOD_DEF,
-  NG_ELEMENT_ID,
-  InjectFlags,
-  setCurrentInjector,
-  ɵɵinject,
-  ɵɵinvalidFactoryDep,
-  inject,
-  convertToBitFlags,
-  Inject,
-  Optional,
-  Self,
-  SkipSelf,
-  Host,
-  ENVIRONMENT_INITIALIZER,
-  INJECTOR$1,
-  isStandalone,
-  makeEnvironmentProviders,
-  provideEnvironmentInitializer,
-  importProvidersFrom,
-  INJECTOR_SCOPE,
-  EnvironmentInjector,
-  runInInjectionContext,
-  assertInInjectionContext,
-  FactoryTarget,
-  Type,
-  ReflectionCapabilities,
-  CONTAINER_HEADER_OFFSET,
-  SimpleChange,
-  ɵɵNgOnChangesFeature,
-  ɵɵenableBindings,
-  ɵɵdisableBindings,
-  ɵɵrestoreView,
-  ɵɵresetView,
-  ɵɵnamespaceSVG,
-  ɵɵnamespaceMathML,
-  ɵɵnamespaceHTML,
-  NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR,
-  ɵɵgetInheritedFactory,
-  ɵɵinjectAttribute,
-  Attribute2 as Attribute,
-  Injectable,
-  createInjector,
-  Injector,
-  HostAttributeToken,
-  HOST_TAG_NAME,
-  DestroyRef,
-  ChangeDetectionScheduler,
-  ZONELESS_ENABLED,
-  PendingTasksInternal,
-  PendingTasks,
-  EventEmitter,
-  NgZone,
-  NoopNgZone,
-  ErrorHandler,
-  INTERNAL_APPLICATION_ERROR_HANDLER,
-  OutputEmitterRef,
-  getOutputDestroyRef,
-  output,
-  input,
-  ElementRef,
-  QueryList,
-  ChangeDetectionStrategy,
-  LContext,
-  getLContext,
-  getDirectives,
-  getHostElement,
-  setDocument,
-  APP_ID,
-  PLATFORM_INITIALIZER,
-  PLATFORM_ID,
-  PACKAGE_ROOT_URL,
-  ANIMATION_MODULE_TYPE,
-  CSP_NONCE,
-  IMAGE_CONFIG_DEFAULTS,
-  IMAGE_CONFIG,
-  makeStateKey,
-  TransferState,
-  IS_HYDRATION_DOM_REUSE_ENABLED,
-  IS_INCREMENTAL_HYDRATION_ENABLED,
-  TracingAction,
-  TracingService,
-  performanceMarkFeature,
-  assertNotInReactiveContext,
-  AfterRenderPhase,
-  AfterRenderManager,
-  afterRender,
-  afterNextRender,
-  DeferBlockState,
-  DeferBlockBehavior,
-  JSACTION_EVENT_CONTRACT,
-  SSR_CONTENT_INTEGRITY_MARKER,
-  readHydrationInfo,
-  ViewEncapsulation,
-  unwrapSafeValue,
-  allowSanitizationBypassAndThrow,
-  getSanitizationBypassType,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustUrl,
-  bypassSanitizationTrustResourceUrl,
-  _sanitizeUrl,
-  _sanitizeHtml,
-  SecurityContext,
-  ɵɵsanitizeHtml,
-  ɵɵsanitizeStyle,
-  ɵɵsanitizeUrl,
-  ɵɵsanitizeResourceUrl,
-  ɵɵsanitizeScript,
-  ɵɵtrustConstantHtml,
-  ɵɵtrustConstantResourceUrl,
-  ɵɵsanitizeUrlOrResourceUrl,
-  CUSTOM_ELEMENTS_SCHEMA,
-  NO_ERRORS_SCHEMA,
-  ɵsetUnknownElementStrictMode,
-  ɵgetUnknownElementStrictMode,
-  ɵsetUnknownPropertyStrictMode,
-  ɵgetUnknownPropertyStrictMode,
-  ɵɵresolveWindow,
-  ɵɵresolveDocument,
-  ɵɵresolveBody,
-  RendererStyleFlags2,
-  NO_CHANGE,
-  ɵɵadvance,
-  ɵɵdirectiveInject,
-  ɵɵinvalidFactory,
-  ViewRef$1,
-  TemplateRef,
-  ComponentRef$1,
-  ComponentFactory$1,
-  ComponentFactoryResolver$1,
-  RendererFactory2,
-  Renderer2,
-  Sanitizer,
-  isNgModule,
-  USE_RUNTIME_DEPS_TRACKER_FOR_JIT,
-  depsTracker,
-  ComponentFactory,
-  ComponentRef,
-  LifecycleHooksFeature,
-  ViewContainerRef,
-  isSignal,
-  ɵunwrapWritableSignal,
-  signal,
-  viewChild,
-  viewChildren,
-  contentChild,
-  contentChildren,
-  model,
-  Query,
-  ContentChildren,
-  ContentChild,
-  ViewChildren,
-  ViewChild,
-  resolveComponentResources,
-  isComponentDefPendingResolution,
-  clearResolutionOfComponentResourcesQueue,
-  restoreComponentResolutionQueue,
-  registerNgModuleType,
-  setAllowDuplicateNgModuleIdsForTest,
-  ɵɵvalidateIframeAttribute,
-  NgModuleRef$1,
-  NgModuleFactory$1,
-  createNgModule,
-  createNgModuleRef,
-  NgModuleRef,
-  NgModuleFactory,
-  createEnvironmentInjector,
-  ɵɵdefineComponent,
-  ɵɵdefineNgModule,
-  ɵɵdefineDirective,
-  ɵɵdefinePipe,
-  ɵɵInheritDefinitionFeature,
-  ɵɵCopyDefinitionFeature,
-  ɵɵHostDirectivesFeature,
-  ɵɵInputTransformsFeature,
-  devModeEqual,
-  ɵɵtemplate,
-  DEFER_BLOCK_DEPENDENCY_INTERCEPTOR,
-  DEFER_BLOCK_CONFIG,
-  renderDeferBlockState,
-  ɵɵdeferEnableTimerScheduling,
-  getAsyncClassMetadataFn,
-  setClassMetadataAsync,
-  setClassMetadata,
-  Console,
-  publishExternalGlobalUtil,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  Testability,
-  TestabilityRegistry,
-  setTestabilityGetter,
-  isPromise,
-  isSubscribable,
-  APP_INITIALIZER,
-  provideAppInitializer,
-  ApplicationInitStatus,
-  EffectScheduler,
-  APP_BOOTSTRAP_LISTENER,
-  isBoundToModule,
-  NgProbeToken,
-  ApplicationRef,
-  detectChangesInViewIfRequired,
-  triggerResourceLoading,
-  ɵɵdefer,
-  ɵɵdeferWhen,
-  ɵɵdeferPrefetchWhen,
-  ɵɵdeferHydrateWhen,
-  ɵɵdeferHydrateNever,
-  ɵɵdeferOnIdle,
-  ɵɵdeferPrefetchOnIdle,
-  ɵɵdeferHydrateOnIdle,
-  ɵɵdeferOnImmediate,
-  ɵɵdeferPrefetchOnImmediate,
-  ɵɵdeferHydrateOnImmediate,
-  ɵɵdeferOnTimer,
-  ɵɵdeferPrefetchOnTimer,
-  ɵɵdeferHydrateOnTimer,
-  ɵɵdeferOnHover,
-  ɵɵdeferPrefetchOnHover,
-  ɵɵdeferHydrateOnHover,
-  ɵɵdeferOnInteraction,
-  ɵɵdeferPrefetchOnInteraction,
-  ɵɵdeferHydrateOnInteraction,
-  ɵɵdeferOnViewport,
-  ɵɵdeferPrefetchOnViewport,
-  ɵɵdeferHydrateOnViewport,
-  ɵɵattribute,
-  ɵɵattributeInterpolate1,
-  ɵɵattributeInterpolate2,
-  ɵɵattributeInterpolate3,
-  ɵɵattributeInterpolate4,
-  ɵɵattributeInterpolate5,
-  ɵɵattributeInterpolate6,
-  ɵɵattributeInterpolate7,
-  ɵɵattributeInterpolate8,
-  ɵɵattributeInterpolateV,
-  ɵɵproperty,
-  ɵɵstyleProp,
-  ɵɵclassProp,
-  ɵɵstyleMap,
-  ɵɵclassMap,
-  ɵɵclassMapInterpolate1,
-  ɵɵclassMapInterpolate2,
-  ɵɵclassMapInterpolate3,
-  ɵɵclassMapInterpolate4,
-  ɵɵclassMapInterpolate5,
-  ɵɵclassMapInterpolate6,
-  ɵɵclassMapInterpolate7,
-  ɵɵclassMapInterpolate8,
-  ɵɵclassMapInterpolateV,
-  ɵɵcomponentInstance,
-  ɵɵconditional,
-  ɵɵrepeaterTrackByIndex,
-  ɵɵrepeaterTrackByIdentity,
-  ɵɵrepeaterCreate,
-  ɵɵrepeater,
-  ɵɵelementStart,
-  ɵɵelementEnd,
-  ɵɵelement,
-  ɵɵelementContainerStart,
-  ɵɵelementContainerEnd,
-  ɵɵelementContainer,
-  ɵɵgetCurrentView,
-  ɵɵhostProperty,
-  ɵɵsyntheticHostProperty,
-  registerLocaleData,
-  findLocaleData,
-  getLocaleCurrencyCode,
-  getLocalePluralCase,
-  unregisterAllLocaleData,
-  LocaleDataIndex,
-  DEFAULT_LOCALE_ID,
-  setLocaleId,
-  ɵɵi18nStart,
-  ɵɵi18nEnd,
-  ɵɵi18n,
-  ɵɵi18nAttributes,
-  ɵɵi18nExp,
-  ɵɵi18nApply,
-  ɵɵi18nPostprocess,
-  ɵɵlistener,
-  ɵɵsyntheticHostListener,
-  ɵɵnextContext,
-  ɵɵprojectionDef,
-  ɵɵprojection,
-  ɵɵpropertyInterpolate,
-  ɵɵpropertyInterpolate1,
-  ɵɵpropertyInterpolate2,
-  ɵɵpropertyInterpolate3,
-  ɵɵpropertyInterpolate4,
-  ɵɵpropertyInterpolate5,
-  ɵɵpropertyInterpolate6,
-  ɵɵpropertyInterpolate7,
-  ɵɵpropertyInterpolate8,
-  ɵɵpropertyInterpolateV,
-  ɵɵcontentQuery,
-  ɵɵviewQuery,
-  ɵɵqueryRefresh,
-  ɵɵloadQuery,
-  ɵɵcontentQuerySignal,
-  ɵɵviewQuerySignal,
-  ɵɵqueryAdvance,
-  store,
-  ɵɵreference,
-  ɵɵstyleMapInterpolate1,
-  ɵɵstyleMapInterpolate2,
-  ɵɵstyleMapInterpolate3,
-  ɵɵstyleMapInterpolate4,
-  ɵɵstyleMapInterpolate5,
-  ɵɵstyleMapInterpolate6,
-  ɵɵstyleMapInterpolate7,
-  ɵɵstyleMapInterpolate8,
-  ɵɵstyleMapInterpolateV,
-  ɵɵstylePropInterpolate1,
-  ɵɵstylePropInterpolate2,
-  ɵɵstylePropInterpolate3,
-  ɵɵstylePropInterpolate4,
-  ɵɵstylePropInterpolate5,
-  ɵɵstylePropInterpolate6,
-  ɵɵstylePropInterpolate7,
-  ɵɵstylePropInterpolate8,
-  ɵɵstylePropInterpolateV,
-  ɵɵtext,
-  ɵɵtextInterpolate,
-  ɵɵtextInterpolate1,
-  ɵɵtextInterpolate2,
-  ɵɵtextInterpolate3,
-  ɵɵtextInterpolate4,
-  ɵɵtextInterpolate5,
-  ɵɵtextInterpolate6,
-  ɵɵtextInterpolate7,
-  ɵɵtextInterpolate8,
-  ɵɵtextInterpolateV,
-  ɵɵtwoWayProperty,
-  ɵɵtwoWayBindingSet,
-  ɵɵtwoWayListener,
-  ɵɵdeclareLet,
-  ɵɵstoreLet,
-  ɵɵreadContextLet,
-  ɵɵProvidersFeature,
-  ɵɵExternalStylesFeature,
-  ɵɵsetComponentScope,
-  ɵɵsetNgModuleScope,
-  ɵɵpureFunction0,
-  ɵɵpureFunction1,
-  ɵɵpureFunction2,
-  ɵɵpureFunction3,
-  ɵɵpureFunction4,
-  ɵɵpureFunction5,
-  ɵɵpureFunction6,
-  ɵɵpureFunction7,
-  ɵɵpureFunction8,
-  ɵɵpureFunctionV,
-  ɵɵpipe,
-  ɵɵpipeBind1,
-  ɵɵpipeBind2,
-  ɵɵpipeBind3,
-  ɵɵpipeBind4,
-  ɵɵpipeBindV,
-  ɵɵtemplateRefExtractor,
-  ɵɵgetComponentDepsFactory,
-  ɵsetClassDebugInfo,
-  ɵɵreplaceMetadata,
-  resetJitOptions,
-  flushModuleScopingQueueAsMuchAsPossible,
-  compileNgModule,
-  compileNgModuleDefs,
-  generateStandaloneInDeclarationsError,
-  resetCompiledComponents,
-  patchComponentDefWithScope,
-  transitiveScopesFor,
-  compileComponent,
-  compileDirective,
-  compilePipe,
-  Directive,
-  Component,
-  Pipe,
-  Input,
-  Output,
-  HostBinding,
-  HostListener,
-  NgModule,
-  Version,
-  VERSION,
-  ModuleWithComponentFactories,
-  Compiler,
-  COMPILER_OPTIONS,
-  CompilerFactory,
-  compileNgModuleFactory,
-  PROVIDED_NG_ZONE,
-  internalProvideZoneChangeDetection,
-  provideZoneChangeDetection,
-  ChangeDetectionSchedulerImpl,
-  provideExperimentalZonelessChangeDetection,
-  LOCALE_ID,
-  DEFAULT_CURRENCY_CODE,
-  TRANSLATIONS,
-  TRANSLATIONS_FORMAT,
-  MissingTranslationStrategy,
-  ENABLE_ROOT_COMPONENT_BOOTSTRAP,
-  PlatformRef,
-  ALLOW_MULTIPLE_PLATFORMS,
-  createPlatform,
-  createPlatformFactory,
-  assertPlatform,
-  getPlatform,
-  destroyPlatform,
-  providePlatformInitializer,
-  provideExperimentalCheckNoChangesForDebug,
-  isDevMode,
-  enableProdMode,
-  getModuleFactory,
-  getNgModuleById,
-  ChangeDetectorRef,
-  injectChangeDetectorRef,
-  ViewRef,
-  EmbeddedViewRef,
-  DebugEventListener,
-  asNativeElements,
-  DebugNode,
-  DebugElement,
-  getDebugNode,
-  DefaultIterableDiffer,
-  IterableDiffers,
-  KeyValueDiffers,
-  defaultIterableDiffers,
-  defaultKeyValueDiffers,
-  platformCore,
-  ApplicationModule,
-  setAlternateWeakRefImpl,
-  internalCreateApplication,
-  getDeferBlocks,
-  withEventReplay,
-  annotateForHydration,
-  withDomHydration,
-  withI18nSupport,
-  withIncrementalHydration,
-  booleanAttribute,
-  numberAttribute,
-  PERFORMANCE_MARK_PREFIX,
-  startMeasuring,
-  stopMeasuring,
-  enableProfiling,
-  disableProfiling,
-  getClosestComponentName,
-  ɵɵngDeclareDirective,
-  ɵɵngDeclareClassMetadata,
-  ɵɵngDeclareClassMetadataAsync,
-  ɵɵngDeclareComponent,
-  ɵɵngDeclareFactory,
-  ɵɵngDeclareInjectable,
-  ɵɵngDeclareInjector,
-  ɵɵngDeclareNgModule,
-  ɵɵngDeclarePipe,
-  computed,
-  linkedSignal,
-  untracked,
-  MicrotaskEffectScheduler,
-  microtaskEffect,
-  effect,
-  afterRenderEffect,
-  ResourceStatus,
-  resource,
-  createComponent,
-  reflectComponentType,
-  mergeApplicationConfig,
-  REQUEST,
-  RESPONSE_INIT,
-  REQUEST_CONTEXT
-};
-/*! Bundled license information:
-
-@angular/core/fesm2022/primitives/signals.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/primitives/event-dispatch.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-
-@angular/core/fesm2022/core.mjs:
-  (*!
-   * @license
-   * Copyright Google LLC All Rights Reserved.
-   *
-   * Use of this source code is governed by an MIT-style license that can be
-   * found in the LICENSE file at https://angular.dev/license
-   *)
-*/
-//# sourceMappingURL=chunk-PEAVEDUD.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-PEAVEDUD.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-PEAVEDUD.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/rxjs/dist/cjs/internal/util/isFunction.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/createErrorClass.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/UnsubscriptionError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/arrRemove.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Subscription.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/config.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/timeoutProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/reportUnhandledError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/noop.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/NotificationFactories.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/errorContext.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Subscriber.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/symbol/observable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/identity.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/pipe.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Observable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/lift.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/refCount.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/ConnectableObservable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/performanceTimestampProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/animationFrameProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/dom/animationFrames.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/ObjectUnsubscribedError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Subject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/BehaviorSubject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/dateTimestampProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/ReplaySubject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/AsyncSubject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/Action.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/intervalProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AsyncAction.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/Immediate.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/immediateProvider.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AsapAction.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Scheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AsyncScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AsapScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/asap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/async.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/QueueAction.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/QueueScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/queue.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameAction.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/AnimationFrameScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/animationFrame.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduler/VirtualTimeScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/empty.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isScheduler.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/args.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isArrayLike.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isPromise.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isInteropObservable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isAsyncIterable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/throwUnobservableError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/symbol/iterator.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isIterable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isReadableStreamLike.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/innerFrom.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/executeSchedule.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/observeOn.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/subscribeOn.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduleObservable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/schedulePromise.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduleArray.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduleIterable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduleAsyncIterable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduleReadableStreamLike.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/scheduled/scheduled.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/from.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/of.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/throwError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/Notification.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isObservable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/EmptyError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/lastValueFrom.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/firstValueFrom.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/ArgumentOutOfRangeError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/NotFoundError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/SequenceError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/isDate.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/timeout.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/map.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/mapOneOrManyArgs.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/bindCallbackInternals.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/bindCallback.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/bindNodeCallback.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/argsArgArrayOrObject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/createObject.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/combineLatest.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeInternals.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeMap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/concatAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/concat.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/defer.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/connectable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/forkJoin.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/fromEvent.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/fromEventPattern.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/generate.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/iif.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/timer.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/interval.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/merge.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/never.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/argsOrArgArray.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/onErrorResumeNext.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/pairs.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/util/not.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/filter.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/partition.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/race.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/range.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/using.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/zip.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/types.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/audit.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/auditTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/buffer.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/bufferCount.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/bufferTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/bufferToggle.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/bufferWhen.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/catchError.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/scanInternals.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/reduce.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/toArray.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/joinAllInternals.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/combineLatestAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/combineAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/combineLatest.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/combineLatestWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/concatMap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/concatMapTo.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/concat.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/concatWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/observable/fromSubscribable.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/connect.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/count.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/debounce.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/debounceTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/defaultIfEmpty.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/take.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/ignoreElements.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mapTo.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/delayWhen.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/delay.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/dematerialize.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/distinct.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/distinctUntilChanged.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/distinctUntilKeyChanged.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/throwIfEmpty.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/elementAt.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/endWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/every.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/exhaustMap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/exhaustAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/exhaust.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/expand.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/finalize.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/find.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/findIndex.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/first.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/groupBy.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/isEmpty.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/takeLast.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/last.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/materialize.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/max.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/flatMap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeMapTo.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeScan.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/merge.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/mergeWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/min.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/multicast.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/onErrorResumeNextWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/pairwise.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/pluck.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/publish.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/publishBehavior.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/publishLast.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/publishReplay.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/raceWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/repeat.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/repeatWhen.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/retry.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/retryWhen.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/sample.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/sampleTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/scan.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/sequenceEqual.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/share.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/shareReplay.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/single.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/skip.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/skipLast.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/skipUntil.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/skipWhile.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/startWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/switchMap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/switchAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/switchMapTo.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/switchScan.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/takeUntil.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/takeWhile.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/tap.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/throttle.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/throttleTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/timeInterval.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/timeoutWith.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/timestamp.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/window.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/windowCount.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/windowTime.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/windowToggle.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/windowWhen.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/withLatestFrom.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/zipAll.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/zip.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/zipWith.js", "../../../../../../node_modules/rxjs/dist/cjs/index.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/partition.js", "../../../../../../node_modules/rxjs/dist/cjs/internal/operators/race.js", "../../../../../../node_modules/rxjs/dist/cjs/operators/index.js", "../../../../../../node_modules/@angular/core/fesm2022/primitives/signals.mjs", "../../../../../../node_modules/@angular/core/fesm2022/core.mjs", "../../../../../../node_modules/@angular/core/fesm2022/primitives/event-dispatch.mjs"],
-  "sourcesContent": ["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isFunction = void 0;\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\nexports.isFunction = isFunction;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createErrorClass = void 0;\nfunction createErrorClass(createImpl) {\n  var _super = function (instance) {\n    Error.call(instance);\n    instance.stack = new Error().stack;\n  };\n  var ctorFunc = createImpl(_super);\n  ctorFunc.prototype = Object.create(Error.prototype);\n  ctorFunc.prototype.constructor = ctorFunc;\n  return ctorFunc;\n}\nexports.createErrorClass = createErrorClass;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UnsubscriptionError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.UnsubscriptionError = createErrorClass_1.createErrorClass(function (_super) {\n  return function UnsubscriptionErrorImpl(errors) {\n    _super(this);\n    this.message = errors ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) {\n      return i + 1 + \") \" + err.toString();\n    }).join('\\n  ') : '';\n    this.name = 'UnsubscriptionError';\n    this.errors = errors;\n  };\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.arrRemove = void 0;\nfunction arrRemove(arr, item) {\n  if (arr) {\n    var index = arr.indexOf(item);\n    0 <= index && arr.splice(index, 1);\n  }\n}\nexports.arrRemove = arrRemove;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isSubscription = exports.EMPTY_SUBSCRIPTION = exports.Subscription = void 0;\nvar isFunction_1 = require(\"./util/isFunction\");\nvar UnsubscriptionError_1 = require(\"./util/UnsubscriptionError\");\nvar arrRemove_1 = require(\"./util/arrRemove\");\nvar Subscription = function () {\n  function Subscription(initialTeardown) {\n    this.initialTeardown = initialTeardown;\n    this.closed = false;\n    this._parentage = null;\n    this._finalizers = null;\n  }\n  Subscription.prototype.unsubscribe = function () {\n    var e_1, _a, e_2, _b;\n    var errors;\n    if (!this.closed) {\n      this.closed = true;\n      var _parentage = this._parentage;\n      if (_parentage) {\n        this._parentage = null;\n        if (Array.isArray(_parentage)) {\n          try {\n            for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n              var parent_1 = _parentage_1_1.value;\n              parent_1.remove(this);\n            }\n          } catch (e_1_1) {\n            e_1 = {\n              error: e_1_1\n            };\n          } finally {\n            try {\n              if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n            } finally {\n              if (e_1) throw e_1.error;\n            }\n          }\n        } else {\n          _parentage.remove(this);\n        }\n      }\n      var initialFinalizer = this.initialTeardown;\n      if (isFunction_1.isFunction(initialFinalizer)) {\n        try {\n          initialFinalizer();\n        } catch (e) {\n          errors = e instanceof UnsubscriptionError_1.UnsubscriptionError ? e.errors : [e];\n        }\n      }\n      var _finalizers = this._finalizers;\n      if (_finalizers) {\n        this._finalizers = null;\n        try {\n          for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n            var finalizer = _finalizers_1_1.value;\n            try {\n              execFinalizer(finalizer);\n            } catch (err) {\n              errors = errors !== null && errors !== void 0 ? errors : [];\n              if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {\n                errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n              } else {\n                errors.push(err);\n              }\n            }\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n      }\n      if (errors) {\n        throw new UnsubscriptionError_1.UnsubscriptionError(errors);\n      }\n    }\n  };\n  Subscription.prototype.add = function (teardown) {\n    var _a;\n    if (teardown && teardown !== this) {\n      if (this.closed) {\n        execFinalizer(teardown);\n      } else {\n        if (teardown instanceof Subscription) {\n          if (teardown.closed || teardown._hasParent(this)) {\n            return;\n          }\n          teardown._addParent(this);\n        }\n        (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n      }\n    }\n  };\n  Subscription.prototype._hasParent = function (parent) {\n    var _parentage = this._parentage;\n    return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);\n  };\n  Subscription.prototype._addParent = function (parent) {\n    var _parentage = this._parentage;\n    this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n  };\n  Subscription.prototype._removeParent = function (parent) {\n    var _parentage = this._parentage;\n    if (_parentage === parent) {\n      this._parentage = null;\n    } else if (Array.isArray(_parentage)) {\n      arrRemove_1.arrRemove(_parentage, parent);\n    }\n  };\n  Subscription.prototype.remove = function (teardown) {\n    var _finalizers = this._finalizers;\n    _finalizers && arrRemove_1.arrRemove(_finalizers, teardown);\n    if (teardown instanceof Subscription) {\n      teardown._removeParent(this);\n    }\n  };\n  Subscription.EMPTY = function () {\n    var empty = new Subscription();\n    empty.closed = true;\n    return empty;\n  }();\n  return Subscription;\n}();\nexports.Subscription = Subscription;\nexports.EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nfunction isSubscription(value) {\n  return value instanceof Subscription || value && 'closed' in value && isFunction_1.isFunction(value.remove) && isFunction_1.isFunction(value.add) && isFunction_1.isFunction(value.unsubscribe);\n}\nexports.isSubscription = isSubscription;\nfunction execFinalizer(finalizer) {\n  if (isFunction_1.isFunction(finalizer)) {\n    finalizer();\n  } else {\n    finalizer.unsubscribe();\n  }\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.config = void 0;\nexports.config = {\n  onUnhandledError: null,\n  onStoppedNotification: null,\n  Promise: undefined,\n  useDeprecatedSynchronousErrorHandling: false,\n  useDeprecatedNextContext: false\n};\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.timeoutProvider = void 0;\nexports.timeoutProvider = {\n  setTimeout: function (handler, timeout) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      args[_i - 2] = arguments[_i];\n    }\n    var delegate = exports.timeoutProvider.delegate;\n    if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n      return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n    }\n    return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n  },\n  clearTimeout: function (handle) {\n    var delegate = exports.timeoutProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.reportUnhandledError = void 0;\nvar config_1 = require(\"../config\");\nvar timeoutProvider_1 = require(\"../scheduler/timeoutProvider\");\nfunction reportUnhandledError(err) {\n  timeoutProvider_1.timeoutProvider.setTimeout(function () {\n    var onUnhandledError = config_1.config.onUnhandledError;\n    if (onUnhandledError) {\n      onUnhandledError(err);\n    } else {\n      throw err;\n    }\n  });\n}\nexports.reportUnhandledError = reportUnhandledError;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.noop = void 0;\nfunction noop() {}\nexports.noop = noop;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createNotification = exports.nextNotification = exports.errorNotification = exports.COMPLETE_NOTIFICATION = void 0;\nexports.COMPLETE_NOTIFICATION = function () {\n  return createNotification('C', undefined, undefined);\n}();\nfunction errorNotification(error) {\n  return createNotification('E', undefined, error);\n}\nexports.errorNotification = errorNotification;\nfunction nextNotification(value) {\n  return createNotification('N', value, undefined);\n}\nexports.nextNotification = nextNotification;\nfunction createNotification(kind, value, error) {\n  return {\n    kind: kind,\n    value: value,\n    error: error\n  };\n}\nexports.createNotification = createNotification;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.captureError = exports.errorContext = void 0;\nvar config_1 = require(\"../config\");\nvar context = null;\nfunction errorContext(cb) {\n  if (config_1.config.useDeprecatedSynchronousErrorHandling) {\n    var isRoot = !context;\n    if (isRoot) {\n      context = {\n        errorThrown: false,\n        error: null\n      };\n    }\n    cb();\n    if (isRoot) {\n      var _a = context,\n        errorThrown = _a.errorThrown,\n        error = _a.error;\n      context = null;\n      if (errorThrown) {\n        throw error;\n      }\n    }\n  } else {\n    cb();\n  }\n}\nexports.errorContext = errorContext;\nfunction captureError(err) {\n  if (config_1.config.useDeprecatedSynchronousErrorHandling && context) {\n    context.errorThrown = true;\n    context.error = err;\n  }\n}\nexports.captureError = captureError;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.EMPTY_OBSERVER = exports.SafeSubscriber = exports.Subscriber = void 0;\nvar isFunction_1 = require(\"./util/isFunction\");\nvar Subscription_1 = require(\"./Subscription\");\nvar config_1 = require(\"./config\");\nvar reportUnhandledError_1 = require(\"./util/reportUnhandledError\");\nvar noop_1 = require(\"./util/noop\");\nvar NotificationFactories_1 = require(\"./NotificationFactories\");\nvar timeoutProvider_1 = require(\"./scheduler/timeoutProvider\");\nvar errorContext_1 = require(\"./util/errorContext\");\nvar Subscriber = function (_super) {\n  __extends(Subscriber, _super);\n  function Subscriber(destination) {\n    var _this = _super.call(this) || this;\n    _this.isStopped = false;\n    if (destination) {\n      _this.destination = destination;\n      if (Subscription_1.isSubscription(destination)) {\n        destination.add(_this);\n      }\n    } else {\n      _this.destination = exports.EMPTY_OBSERVER;\n    }\n    return _this;\n  }\n  Subscriber.create = function (next, error, complete) {\n    return new SafeSubscriber(next, error, complete);\n  };\n  Subscriber.prototype.next = function (value) {\n    if (this.isStopped) {\n      handleStoppedNotification(NotificationFactories_1.nextNotification(value), this);\n    } else {\n      this._next(value);\n    }\n  };\n  Subscriber.prototype.error = function (err) {\n    if (this.isStopped) {\n      handleStoppedNotification(NotificationFactories_1.errorNotification(err), this);\n    } else {\n      this.isStopped = true;\n      this._error(err);\n    }\n  };\n  Subscriber.prototype.complete = function () {\n    if (this.isStopped) {\n      handleStoppedNotification(NotificationFactories_1.COMPLETE_NOTIFICATION, this);\n    } else {\n      this.isStopped = true;\n      this._complete();\n    }\n  };\n  Subscriber.prototype.unsubscribe = function () {\n    if (!this.closed) {\n      this.isStopped = true;\n      _super.prototype.unsubscribe.call(this);\n      this.destination = null;\n    }\n  };\n  Subscriber.prototype._next = function (value) {\n    this.destination.next(value);\n  };\n  Subscriber.prototype._error = function (err) {\n    try {\n      this.destination.error(err);\n    } finally {\n      this.unsubscribe();\n    }\n  };\n  Subscriber.prototype._complete = function () {\n    try {\n      this.destination.complete();\n    } finally {\n      this.unsubscribe();\n    }\n  };\n  return Subscriber;\n}(Subscription_1.Subscription);\nexports.Subscriber = Subscriber;\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n  return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = function () {\n  function ConsumerObserver(partialObserver) {\n    this.partialObserver = partialObserver;\n  }\n  ConsumerObserver.prototype.next = function (value) {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.next) {\n      try {\n        partialObserver.next(value);\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    }\n  };\n  ConsumerObserver.prototype.error = function (err) {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.error) {\n      try {\n        partialObserver.error(err);\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    } else {\n      handleUnhandledError(err);\n    }\n  };\n  ConsumerObserver.prototype.complete = function () {\n    var partialObserver = this.partialObserver;\n    if (partialObserver.complete) {\n      try {\n        partialObserver.complete();\n      } catch (error) {\n        handleUnhandledError(error);\n      }\n    }\n  };\n  return ConsumerObserver;\n}();\nvar SafeSubscriber = function (_super) {\n  __extends(SafeSubscriber, _super);\n  function SafeSubscriber(observerOrNext, error, complete) {\n    var _this = _super.call(this) || this;\n    var partialObserver;\n    if (isFunction_1.isFunction(observerOrNext) || !observerOrNext) {\n      partialObserver = {\n        next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,\n        error: error !== null && error !== void 0 ? error : undefined,\n        complete: complete !== null && complete !== void 0 ? complete : undefined\n      };\n    } else {\n      var context_1;\n      if (_this && config_1.config.useDeprecatedNextContext) {\n        context_1 = Object.create(observerOrNext);\n        context_1.unsubscribe = function () {\n          return _this.unsubscribe();\n        };\n        partialObserver = {\n          next: observerOrNext.next && bind(observerOrNext.next, context_1),\n          error: observerOrNext.error && bind(observerOrNext.error, context_1),\n          complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)\n        };\n      } else {\n        partialObserver = observerOrNext;\n      }\n    }\n    _this.destination = new ConsumerObserver(partialObserver);\n    return _this;\n  }\n  return SafeSubscriber;\n}(Subscriber);\nexports.SafeSubscriber = SafeSubscriber;\nfunction handleUnhandledError(error) {\n  if (config_1.config.useDeprecatedSynchronousErrorHandling) {\n    errorContext_1.captureError(error);\n  } else {\n    reportUnhandledError_1.reportUnhandledError(error);\n  }\n}\nfunction defaultErrorHandler(err) {\n  throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n  var onStoppedNotification = config_1.config.onStoppedNotification;\n  onStoppedNotification && timeoutProvider_1.timeoutProvider.setTimeout(function () {\n    return onStoppedNotification(notification, subscriber);\n  });\n}\nexports.EMPTY_OBSERVER = {\n  closed: true,\n  next: noop_1.noop,\n  error: defaultErrorHandler,\n  complete: noop_1.noop\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.observable = void 0;\nexports.observable = function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}();\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.identity = void 0;\nfunction identity(x) {\n  return x;\n}\nexports.identity = identity;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.pipeFromArray = exports.pipe = void 0;\nvar identity_1 = require(\"./identity\");\nfunction pipe() {\n  var fns = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    fns[_i] = arguments[_i];\n  }\n  return pipeFromArray(fns);\n}\nexports.pipe = pipe;\nfunction pipeFromArray(fns) {\n  if (fns.length === 0) {\n    return identity_1.identity;\n  }\n  if (fns.length === 1) {\n    return fns[0];\n  }\n  return function piped(input) {\n    return fns.reduce(function (prev, fn) {\n      return fn(prev);\n    }, input);\n  };\n}\nexports.pipeFromArray = pipeFromArray;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Observable = void 0;\nvar Subscriber_1 = require(\"./Subscriber\");\nvar Subscription_1 = require(\"./Subscription\");\nvar observable_1 = require(\"./symbol/observable\");\nvar pipe_1 = require(\"./util/pipe\");\nvar config_1 = require(\"./config\");\nvar isFunction_1 = require(\"./util/isFunction\");\nvar errorContext_1 = require(\"./util/errorContext\");\nvar Observable = function () {\n  function Observable(subscribe) {\n    if (subscribe) {\n      this._subscribe = subscribe;\n    }\n  }\n  Observable.prototype.lift = function (operator) {\n    var observable = new Observable();\n    observable.source = this;\n    observable.operator = operator;\n    return observable;\n  };\n  Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n    var _this = this;\n    var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new Subscriber_1.SafeSubscriber(observerOrNext, error, complete);\n    errorContext_1.errorContext(function () {\n      var _a = _this,\n        operator = _a.operator,\n        source = _a.source;\n      subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));\n    });\n    return subscriber;\n  };\n  Observable.prototype._trySubscribe = function (sink) {\n    try {\n      return this._subscribe(sink);\n    } catch (err) {\n      sink.error(err);\n    }\n  };\n  Observable.prototype.forEach = function (next, promiseCtor) {\n    var _this = this;\n    promiseCtor = getPromiseCtor(promiseCtor);\n    return new promiseCtor(function (resolve, reject) {\n      var subscriber = new Subscriber_1.SafeSubscriber({\n        next: function (value) {\n          try {\n            next(value);\n          } catch (err) {\n            reject(err);\n            subscriber.unsubscribe();\n          }\n        },\n        error: reject,\n        complete: resolve\n      });\n      _this.subscribe(subscriber);\n    });\n  };\n  Observable.prototype._subscribe = function (subscriber) {\n    var _a;\n    return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n  };\n  Observable.prototype[observable_1.observable] = function () {\n    return this;\n  };\n  Observable.prototype.pipe = function () {\n    var operations = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      operations[_i] = arguments[_i];\n    }\n    return pipe_1.pipeFromArray(operations)(this);\n  };\n  Observable.prototype.toPromise = function (promiseCtor) {\n    var _this = this;\n    promiseCtor = getPromiseCtor(promiseCtor);\n    return new promiseCtor(function (resolve, reject) {\n      var value;\n      _this.subscribe(function (x) {\n        return value = x;\n      }, function (err) {\n        return reject(err);\n      }, function () {\n        return resolve(value);\n      });\n    });\n  };\n  Observable.create = function (subscribe) {\n    return new Observable(subscribe);\n  };\n  return Observable;\n}();\nexports.Observable = Observable;\nfunction getPromiseCtor(promiseCtor) {\n  var _a;\n  return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config_1.config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n  return value && isFunction_1.isFunction(value.next) && isFunction_1.isFunction(value.error) && isFunction_1.isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n  return value && value instanceof Subscriber_1.Subscriber || isObserver(value) && Subscription_1.isSubscription(value);\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.operate = exports.hasLift = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nfunction hasLift(source) {\n  return isFunction_1.isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexports.hasLift = hasLift;\nfunction operate(init) {\n  return function (source) {\n    if (hasLift(source)) {\n      return source.lift(function (liftedSource) {\n        try {\n          return init(liftedSource, this);\n        } catch (err) {\n          this.error(err);\n        }\n      });\n    }\n    throw new TypeError('Unable to lift unknown Observable type');\n  };\n}\nexports.operate = operate;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.OperatorSubscriber = exports.createOperatorSubscriber = void 0;\nvar Subscriber_1 = require(\"../Subscriber\");\nfunction createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n  return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nexports.createOperatorSubscriber = createOperatorSubscriber;\nvar OperatorSubscriber = function (_super) {\n  __extends(OperatorSubscriber, _super);\n  function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n    var _this = _super.call(this, destination) || this;\n    _this.onFinalize = onFinalize;\n    _this.shouldUnsubscribe = shouldUnsubscribe;\n    _this._next = onNext ? function (value) {\n      try {\n        onNext(value);\n      } catch (err) {\n        destination.error(err);\n      }\n    } : _super.prototype._next;\n    _this._error = onError ? function (err) {\n      try {\n        onError(err);\n      } catch (err) {\n        destination.error(err);\n      } finally {\n        this.unsubscribe();\n      }\n    } : _super.prototype._error;\n    _this._complete = onComplete ? function () {\n      try {\n        onComplete();\n      } catch (err) {\n        destination.error(err);\n      } finally {\n        this.unsubscribe();\n      }\n    } : _super.prototype._complete;\n    return _this;\n  }\n  OperatorSubscriber.prototype.unsubscribe = function () {\n    var _a;\n    if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n      var closed_1 = this.closed;\n      _super.prototype.unsubscribe.call(this);\n      !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n    }\n  };\n  return OperatorSubscriber;\n}(Subscriber_1.Subscriber);\nexports.OperatorSubscriber = OperatorSubscriber;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.refCount = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction refCount() {\n  return lift_1.operate(function (source, subscriber) {\n    var connection = null;\n    source._refCount++;\n    var refCounter = OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, undefined, undefined, function () {\n      if (!source || source._refCount <= 0 || 0 < --source._refCount) {\n        connection = null;\n        return;\n      }\n      var sharedConnection = source._connection;\n      var conn = connection;\n      connection = null;\n      if (sharedConnection && (!conn || sharedConnection === conn)) {\n        sharedConnection.unsubscribe();\n      }\n      subscriber.unsubscribe();\n    });\n    source.subscribe(refCounter);\n    if (!refCounter.closed) {\n      connection = source.connect();\n    }\n  });\n}\nexports.refCount = refCount;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ConnectableObservable = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar Subscription_1 = require(\"../Subscription\");\nvar refCount_1 = require(\"../operators/refCount\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nvar lift_1 = require(\"../util/lift\");\nvar ConnectableObservable = function (_super) {\n  __extends(ConnectableObservable, _super);\n  function ConnectableObservable(source, subjectFactory) {\n    var _this = _super.call(this) || this;\n    _this.source = source;\n    _this.subjectFactory = subjectFactory;\n    _this._subject = null;\n    _this._refCount = 0;\n    _this._connection = null;\n    if (lift_1.hasLift(source)) {\n      _this.lift = source.lift;\n    }\n    return _this;\n  }\n  ConnectableObservable.prototype._subscribe = function (subscriber) {\n    return this.getSubject().subscribe(subscriber);\n  };\n  ConnectableObservable.prototype.getSubject = function () {\n    var subject = this._subject;\n    if (!subject || subject.isStopped) {\n      this._subject = this.subjectFactory();\n    }\n    return this._subject;\n  };\n  ConnectableObservable.prototype._teardown = function () {\n    this._refCount = 0;\n    var _connection = this._connection;\n    this._subject = this._connection = null;\n    _connection === null || _connection === void 0 ? void 0 : _connection.unsubscribe();\n  };\n  ConnectableObservable.prototype.connect = function () {\n    var _this = this;\n    var connection = this._connection;\n    if (!connection) {\n      connection = this._connection = new Subscription_1.Subscription();\n      var subject_1 = this.getSubject();\n      connection.add(this.source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subject_1, undefined, function () {\n        _this._teardown();\n        subject_1.complete();\n      }, function (err) {\n        _this._teardown();\n        subject_1.error(err);\n      }, function () {\n        return _this._teardown();\n      })));\n      if (connection.closed) {\n        this._connection = null;\n        connection = Subscription_1.Subscription.EMPTY;\n      }\n    }\n    return connection;\n  };\n  ConnectableObservable.prototype.refCount = function () {\n    return refCount_1.refCount()(this);\n  };\n  return ConnectableObservable;\n}(Observable_1.Observable);\nexports.ConnectableObservable = ConnectableObservable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.performanceTimestampProvider = void 0;\nexports.performanceTimestampProvider = {\n  now: function () {\n    return (exports.performanceTimestampProvider.delegate || performance).now();\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.animationFrameProvider = void 0;\nvar Subscription_1 = require(\"../Subscription\");\nexports.animationFrameProvider = {\n  schedule: function (callback) {\n    var request = requestAnimationFrame;\n    var cancel = cancelAnimationFrame;\n    var delegate = exports.animationFrameProvider.delegate;\n    if (delegate) {\n      request = delegate.requestAnimationFrame;\n      cancel = delegate.cancelAnimationFrame;\n    }\n    var handle = request(function (timestamp) {\n      cancel = undefined;\n      callback(timestamp);\n    });\n    return new Subscription_1.Subscription(function () {\n      return cancel === null || cancel === void 0 ? void 0 : cancel(handle);\n    });\n  },\n  requestAnimationFrame: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = exports.animationFrameProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.requestAnimationFrame) || requestAnimationFrame).apply(void 0, __spreadArray([], __read(args)));\n  },\n  cancelAnimationFrame: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = exports.animationFrameProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.cancelAnimationFrame) || cancelAnimationFrame).apply(void 0, __spreadArray([], __read(args)));\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.animationFrames = void 0;\nvar Observable_1 = require(\"../../Observable\");\nvar performanceTimestampProvider_1 = require(\"../../scheduler/performanceTimestampProvider\");\nvar animationFrameProvider_1 = require(\"../../scheduler/animationFrameProvider\");\nfunction animationFrames(timestampProvider) {\n  return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES;\n}\nexports.animationFrames = animationFrames;\nfunction animationFramesFactory(timestampProvider) {\n  return new Observable_1.Observable(function (subscriber) {\n    var provider = timestampProvider || performanceTimestampProvider_1.performanceTimestampProvider;\n    var start = provider.now();\n    var id = 0;\n    var run = function () {\n      if (!subscriber.closed) {\n        id = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function (timestamp) {\n          id = 0;\n          var now = provider.now();\n          subscriber.next({\n            timestamp: timestampProvider ? now : timestamp,\n            elapsed: now - start\n          });\n          run();\n        });\n      }\n    };\n    run();\n    return function () {\n      if (id) {\n        animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id);\n      }\n    };\n  });\n}\nvar DEFAULT_ANIMATION_FRAMES = animationFramesFactory();\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ObjectUnsubscribedError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.ObjectUnsubscribedError = createErrorClass_1.createErrorClass(function (_super) {\n  return function ObjectUnsubscribedErrorImpl() {\n    _super(this);\n    this.name = 'ObjectUnsubscribedError';\n    this.message = 'object unsubscribed';\n  };\n});\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AnonymousSubject = exports.Subject = void 0;\nvar Observable_1 = require(\"./Observable\");\nvar Subscription_1 = require(\"./Subscription\");\nvar ObjectUnsubscribedError_1 = require(\"./util/ObjectUnsubscribedError\");\nvar arrRemove_1 = require(\"./util/arrRemove\");\nvar errorContext_1 = require(\"./util/errorContext\");\nvar Subject = function (_super) {\n  __extends(Subject, _super);\n  function Subject() {\n    var _this = _super.call(this) || this;\n    _this.closed = false;\n    _this.currentObservers = null;\n    _this.observers = [];\n    _this.isStopped = false;\n    _this.hasError = false;\n    _this.thrownError = null;\n    return _this;\n  }\n  Subject.prototype.lift = function (operator) {\n    var subject = new AnonymousSubject(this, this);\n    subject.operator = operator;\n    return subject;\n  };\n  Subject.prototype._throwIfClosed = function () {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n    }\n  };\n  Subject.prototype.next = function (value) {\n    var _this = this;\n    errorContext_1.errorContext(function () {\n      var e_1, _a;\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        if (!_this.currentObservers) {\n          _this.currentObservers = Array.from(_this.observers);\n        }\n        try {\n          for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var observer = _c.value;\n            observer.next(value);\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n      }\n    });\n  };\n  Subject.prototype.error = function (err) {\n    var _this = this;\n    errorContext_1.errorContext(function () {\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        _this.hasError = _this.isStopped = true;\n        _this.thrownError = err;\n        var observers = _this.observers;\n        while (observers.length) {\n          observers.shift().error(err);\n        }\n      }\n    });\n  };\n  Subject.prototype.complete = function () {\n    var _this = this;\n    errorContext_1.errorContext(function () {\n      _this._throwIfClosed();\n      if (!_this.isStopped) {\n        _this.isStopped = true;\n        var observers = _this.observers;\n        while (observers.length) {\n          observers.shift().complete();\n        }\n      }\n    });\n  };\n  Subject.prototype.unsubscribe = function () {\n    this.isStopped = this.closed = true;\n    this.observers = this.currentObservers = null;\n  };\n  Object.defineProperty(Subject.prototype, \"observed\", {\n    get: function () {\n      var _a;\n      return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Subject.prototype._trySubscribe = function (subscriber) {\n    this._throwIfClosed();\n    return _super.prototype._trySubscribe.call(this, subscriber);\n  };\n  Subject.prototype._subscribe = function (subscriber) {\n    this._throwIfClosed();\n    this._checkFinalizedStatuses(subscriber);\n    return this._innerSubscribe(subscriber);\n  };\n  Subject.prototype._innerSubscribe = function (subscriber) {\n    var _this = this;\n    var _a = this,\n      hasError = _a.hasError,\n      isStopped = _a.isStopped,\n      observers = _a.observers;\n    if (hasError || isStopped) {\n      return Subscription_1.EMPTY_SUBSCRIPTION;\n    }\n    this.currentObservers = null;\n    observers.push(subscriber);\n    return new Subscription_1.Subscription(function () {\n      _this.currentObservers = null;\n      arrRemove_1.arrRemove(observers, subscriber);\n    });\n  };\n  Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n    var _a = this,\n      hasError = _a.hasError,\n      thrownError = _a.thrownError,\n      isStopped = _a.isStopped;\n    if (hasError) {\n      subscriber.error(thrownError);\n    } else if (isStopped) {\n      subscriber.complete();\n    }\n  };\n  Subject.prototype.asObservable = function () {\n    var observable = new Observable_1.Observable();\n    observable.source = this;\n    return observable;\n  };\n  Subject.create = function (destination, source) {\n    return new AnonymousSubject(destination, source);\n  };\n  return Subject;\n}(Observable_1.Observable);\nexports.Subject = Subject;\nvar AnonymousSubject = function (_super) {\n  __extends(AnonymousSubject, _super);\n  function AnonymousSubject(destination, source) {\n    var _this = _super.call(this) || this;\n    _this.destination = destination;\n    _this.source = source;\n    return _this;\n  }\n  AnonymousSubject.prototype.next = function (value) {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n  };\n  AnonymousSubject.prototype.error = function (err) {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n  };\n  AnonymousSubject.prototype.complete = function () {\n    var _a, _b;\n    (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n  };\n  AnonymousSubject.prototype._subscribe = function (subscriber) {\n    var _a, _b;\n    return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : Subscription_1.EMPTY_SUBSCRIPTION;\n  };\n  return AnonymousSubject;\n}(Subject);\nexports.AnonymousSubject = AnonymousSubject;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BehaviorSubject = void 0;\nvar Subject_1 = require(\"./Subject\");\nvar BehaviorSubject = function (_super) {\n  __extends(BehaviorSubject, _super);\n  function BehaviorSubject(_value) {\n    var _this = _super.call(this) || this;\n    _this._value = _value;\n    return _this;\n  }\n  Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n    get: function () {\n      return this.getValue();\n    },\n    enumerable: false,\n    configurable: true\n  });\n  BehaviorSubject.prototype._subscribe = function (subscriber) {\n    var subscription = _super.prototype._subscribe.call(this, subscriber);\n    !subscription.closed && subscriber.next(this._value);\n    return subscription;\n  };\n  BehaviorSubject.prototype.getValue = function () {\n    var _a = this,\n      hasError = _a.hasError,\n      thrownError = _a.thrownError,\n      _value = _a._value;\n    if (hasError) {\n      throw thrownError;\n    }\n    this._throwIfClosed();\n    return _value;\n  };\n  BehaviorSubject.prototype.next = function (value) {\n    _super.prototype.next.call(this, this._value = value);\n  };\n  return BehaviorSubject;\n}(Subject_1.Subject);\nexports.BehaviorSubject = BehaviorSubject;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.dateTimestampProvider = void 0;\nexports.dateTimestampProvider = {\n  now: function () {\n    return (exports.dateTimestampProvider.delegate || Date).now();\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ReplaySubject = void 0;\nvar Subject_1 = require(\"./Subject\");\nvar dateTimestampProvider_1 = require(\"./scheduler/dateTimestampProvider\");\nvar ReplaySubject = function (_super) {\n  __extends(ReplaySubject, _super);\n  function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n    if (_bufferSize === void 0) {\n      _bufferSize = Infinity;\n    }\n    if (_windowTime === void 0) {\n      _windowTime = Infinity;\n    }\n    if (_timestampProvider === void 0) {\n      _timestampProvider = dateTimestampProvider_1.dateTimestampProvider;\n    }\n    var _this = _super.call(this) || this;\n    _this._bufferSize = _bufferSize;\n    _this._windowTime = _windowTime;\n    _this._timestampProvider = _timestampProvider;\n    _this._buffer = [];\n    _this._infiniteTimeWindow = true;\n    _this._infiniteTimeWindow = _windowTime === Infinity;\n    _this._bufferSize = Math.max(1, _bufferSize);\n    _this._windowTime = Math.max(1, _windowTime);\n    return _this;\n  }\n  ReplaySubject.prototype.next = function (value) {\n    var _a = this,\n      isStopped = _a.isStopped,\n      _buffer = _a._buffer,\n      _infiniteTimeWindow = _a._infiniteTimeWindow,\n      _timestampProvider = _a._timestampProvider,\n      _windowTime = _a._windowTime;\n    if (!isStopped) {\n      _buffer.push(value);\n      !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n    }\n    this._trimBuffer();\n    _super.prototype.next.call(this, value);\n  };\n  ReplaySubject.prototype._subscribe = function (subscriber) {\n    this._throwIfClosed();\n    this._trimBuffer();\n    var subscription = this._innerSubscribe(subscriber);\n    var _a = this,\n      _infiniteTimeWindow = _a._infiniteTimeWindow,\n      _buffer = _a._buffer;\n    var copy = _buffer.slice();\n    for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n      subscriber.next(copy[i]);\n    }\n    this._checkFinalizedStatuses(subscriber);\n    return subscription;\n  };\n  ReplaySubject.prototype._trimBuffer = function () {\n    var _a = this,\n      _bufferSize = _a._bufferSize,\n      _timestampProvider = _a._timestampProvider,\n      _buffer = _a._buffer,\n      _infiniteTimeWindow = _a._infiniteTimeWindow;\n    var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n    _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n    if (!_infiniteTimeWindow) {\n      var now = _timestampProvider.now();\n      var last = 0;\n      for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n        last = i;\n      }\n      last && _buffer.splice(0, last + 1);\n    }\n  };\n  return ReplaySubject;\n}(Subject_1.Subject);\nexports.ReplaySubject = ReplaySubject;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AsyncSubject = void 0;\nvar Subject_1 = require(\"./Subject\");\nvar AsyncSubject = function (_super) {\n  __extends(AsyncSubject, _super);\n  function AsyncSubject() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n    _this._value = null;\n    _this._hasValue = false;\n    _this._isComplete = false;\n    return _this;\n  }\n  AsyncSubject.prototype._checkFinalizedStatuses = function (subscriber) {\n    var _a = this,\n      hasError = _a.hasError,\n      _hasValue = _a._hasValue,\n      _value = _a._value,\n      thrownError = _a.thrownError,\n      isStopped = _a.isStopped,\n      _isComplete = _a._isComplete;\n    if (hasError) {\n      subscriber.error(thrownError);\n    } else if (isStopped || _isComplete) {\n      _hasValue && subscriber.next(_value);\n      subscriber.complete();\n    }\n  };\n  AsyncSubject.prototype.next = function (value) {\n    if (!this.isStopped) {\n      this._value = value;\n      this._hasValue = true;\n    }\n  };\n  AsyncSubject.prototype.complete = function () {\n    var _a = this,\n      _hasValue = _a._hasValue,\n      _value = _a._value,\n      _isComplete = _a._isComplete;\n    if (!_isComplete) {\n      this._isComplete = true;\n      _hasValue && _super.prototype.next.call(this, _value);\n      _super.prototype.complete.call(this);\n    }\n  };\n  return AsyncSubject;\n}(Subject_1.Subject);\nexports.AsyncSubject = AsyncSubject;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Action = void 0;\nvar Subscription_1 = require(\"../Subscription\");\nvar Action = function (_super) {\n  __extends(Action, _super);\n  function Action(scheduler, work) {\n    return _super.call(this) || this;\n  }\n  Action.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return this;\n  };\n  return Action;\n}(Subscription_1.Subscription);\nexports.Action = Action;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.intervalProvider = void 0;\nexports.intervalProvider = {\n  setInterval: function (handler, timeout) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      args[_i - 2] = arguments[_i];\n    }\n    var delegate = exports.intervalProvider.delegate;\n    if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n      return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n    }\n    return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n  },\n  clearInterval: function (handle) {\n    var delegate = exports.intervalProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AsyncAction = void 0;\nvar Action_1 = require(\"./Action\");\nvar intervalProvider_1 = require(\"./intervalProvider\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nvar AsyncAction = function (_super) {\n  __extends(AsyncAction, _super);\n  function AsyncAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    _this.pending = false;\n    return _this;\n  }\n  AsyncAction.prototype.schedule = function (state, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (this.closed) {\n      return this;\n    }\n    this.state = state;\n    var id = this.id;\n    var scheduler = this.scheduler;\n    if (id != null) {\n      this.id = this.recycleAsyncId(scheduler, id, delay);\n    }\n    this.pending = true;\n    this.delay = delay;\n    this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n    return this;\n  };\n  AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return intervalProvider_1.intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n  };\n  AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null && this.delay === delay && this.pending === false) {\n      return id;\n    }\n    if (id != null) {\n      intervalProvider_1.intervalProvider.clearInterval(id);\n    }\n    return undefined;\n  };\n  AsyncAction.prototype.execute = function (state, delay) {\n    if (this.closed) {\n      return new Error('executing a cancelled action');\n    }\n    this.pending = false;\n    var error = this._execute(state, delay);\n    if (error) {\n      return error;\n    } else if (this.pending === false && this.id != null) {\n      this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n    }\n  };\n  AsyncAction.prototype._execute = function (state, _delay) {\n    var errored = false;\n    var errorValue;\n    try {\n      this.work(state);\n    } catch (e) {\n      errored = true;\n      errorValue = e ? e : new Error('Scheduled action threw falsy error');\n    }\n    if (errored) {\n      this.unsubscribe();\n      return errorValue;\n    }\n  };\n  AsyncAction.prototype.unsubscribe = function () {\n    if (!this.closed) {\n      var _a = this,\n        id = _a.id,\n        scheduler = _a.scheduler;\n      var actions = scheduler.actions;\n      this.work = this.state = this.scheduler = null;\n      this.pending = false;\n      arrRemove_1.arrRemove(actions, this);\n      if (id != null) {\n        this.id = this.recycleAsyncId(scheduler, id, null);\n      }\n      this.delay = null;\n      _super.prototype.unsubscribe.call(this);\n    }\n  };\n  return AsyncAction;\n}(Action_1.Action);\nexports.AsyncAction = AsyncAction;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TestTools = exports.Immediate = void 0;\nvar nextHandle = 1;\nvar resolved;\nvar activeHandles = {};\nfunction findAndClearHandle(handle) {\n  if (handle in activeHandles) {\n    delete activeHandles[handle];\n    return true;\n  }\n  return false;\n}\nexports.Immediate = {\n  setImmediate: function (cb) {\n    var handle = nextHandle++;\n    activeHandles[handle] = true;\n    if (!resolved) {\n      resolved = Promise.resolve();\n    }\n    resolved.then(function () {\n      return findAndClearHandle(handle) && cb();\n    });\n    return handle;\n  },\n  clearImmediate: function (handle) {\n    findAndClearHandle(handle);\n  }\n};\nexports.TestTools = {\n  pending: function () {\n    return Object.keys(activeHandles).length;\n  }\n};\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.immediateProvider = void 0;\nvar Immediate_1 = require(\"../util/Immediate\");\nvar setImmediate = Immediate_1.Immediate.setImmediate,\n  clearImmediate = Immediate_1.Immediate.clearImmediate;\nexports.immediateProvider = {\n  setImmediate: function () {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var delegate = exports.immediateProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.setImmediate) || setImmediate).apply(void 0, __spreadArray([], __read(args)));\n  },\n  clearImmediate: function (handle) {\n    var delegate = exports.immediateProvider.delegate;\n    return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearImmediate) || clearImmediate)(handle);\n  },\n  delegate: undefined\n};\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AsapAction = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar immediateProvider_1 = require(\"./immediateProvider\");\nvar AsapAction = function (_super) {\n  __extends(AsapAction, _super);\n  function AsapAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay !== null && delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.actions.push(this);\n    return scheduler._scheduled || (scheduler._scheduled = immediateProvider_1.immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n  };\n  AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null ? delay > 0 : this.delay > 0) {\n      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n    }\n    var actions = scheduler.actions;\n    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n      immediateProvider_1.immediateProvider.clearImmediate(id);\n      if (scheduler._scheduled === id) {\n        scheduler._scheduled = undefined;\n      }\n    }\n    return undefined;\n  };\n  return AsapAction;\n}(AsyncAction_1.AsyncAction);\nexports.AsapAction = AsapAction;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Scheduler = void 0;\nvar dateTimestampProvider_1 = require(\"./scheduler/dateTimestampProvider\");\nvar Scheduler = function () {\n  function Scheduler(schedulerActionCtor, now) {\n    if (now === void 0) {\n      now = Scheduler.now;\n    }\n    this.schedulerActionCtor = schedulerActionCtor;\n    this.now = now;\n  }\n  Scheduler.prototype.schedule = function (work, delay, state) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return new this.schedulerActionCtor(this, work).schedule(state, delay);\n  };\n  Scheduler.now = dateTimestampProvider_1.dateTimestampProvider.now;\n  return Scheduler;\n}();\nexports.Scheduler = Scheduler;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AsyncScheduler = void 0;\nvar Scheduler_1 = require(\"../Scheduler\");\nvar AsyncScheduler = function (_super) {\n  __extends(AsyncScheduler, _super);\n  function AsyncScheduler(SchedulerAction, now) {\n    if (now === void 0) {\n      now = Scheduler_1.Scheduler.now;\n    }\n    var _this = _super.call(this, SchedulerAction, now) || this;\n    _this.actions = [];\n    _this._active = false;\n    return _this;\n  }\n  AsyncScheduler.prototype.flush = function (action) {\n    var actions = this.actions;\n    if (this._active) {\n      actions.push(action);\n      return;\n    }\n    var error;\n    this._active = true;\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while (action = actions.shift());\n    this._active = false;\n    if (error) {\n      while (action = actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AsyncScheduler;\n}(Scheduler_1.Scheduler);\nexports.AsyncScheduler = AsyncScheduler;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AsapScheduler = void 0;\nvar AsyncScheduler_1 = require(\"./AsyncScheduler\");\nvar AsapScheduler = function (_super) {\n  __extends(AsapScheduler, _super);\n  function AsapScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  AsapScheduler.prototype.flush = function (action) {\n    this._active = true;\n    var flushId = this._scheduled;\n    this._scheduled = undefined;\n    var actions = this.actions;\n    var error;\n    action = action || actions.shift();\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while ((action = actions[0]) && action.id === flushId && actions.shift());\n    this._active = false;\n    if (error) {\n      while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AsapScheduler;\n}(AsyncScheduler_1.AsyncScheduler);\nexports.AsapScheduler = AsapScheduler;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.asap = exports.asapScheduler = void 0;\nvar AsapAction_1 = require(\"./AsapAction\");\nvar AsapScheduler_1 = require(\"./AsapScheduler\");\nexports.asapScheduler = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction);\nexports.asap = exports.asapScheduler;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.async = exports.asyncScheduler = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar AsyncScheduler_1 = require(\"./AsyncScheduler\");\nexports.asyncScheduler = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);\nexports.async = exports.asyncScheduler;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.QueueAction = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar QueueAction = function (_super) {\n  __extends(QueueAction, _super);\n  function QueueAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  QueueAction.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay > 0) {\n      return _super.prototype.schedule.call(this, state, delay);\n    }\n    this.delay = delay;\n    this.state = state;\n    this.scheduler.flush(this);\n    return this;\n  };\n  QueueAction.prototype.execute = function (state, delay) {\n    return delay > 0 || this.closed ? _super.prototype.execute.call(this, state, delay) : this._execute(state, delay);\n  };\n  QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null && delay > 0 || delay == null && this.delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.flush(this);\n    return 0;\n  };\n  return QueueAction;\n}(AsyncAction_1.AsyncAction);\nexports.QueueAction = QueueAction;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.QueueScheduler = void 0;\nvar AsyncScheduler_1 = require(\"./AsyncScheduler\");\nvar QueueScheduler = function (_super) {\n  __extends(QueueScheduler, _super);\n  function QueueScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  return QueueScheduler;\n}(AsyncScheduler_1.AsyncScheduler);\nexports.QueueScheduler = QueueScheduler;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.queue = exports.queueScheduler = void 0;\nvar QueueAction_1 = require(\"./QueueAction\");\nvar QueueScheduler_1 = require(\"./QueueScheduler\");\nexports.queueScheduler = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);\nexports.queue = exports.queueScheduler;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AnimationFrameAction = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar animationFrameProvider_1 = require(\"./animationFrameProvider\");\nvar AnimationFrameAction = function (_super) {\n  __extends(AnimationFrameAction, _super);\n  function AnimationFrameAction(scheduler, work) {\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    return _this;\n  }\n  AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay !== null && delay > 0) {\n      return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n    }\n    scheduler.actions.push(this);\n    return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider_1.animationFrameProvider.requestAnimationFrame(function () {\n      return scheduler.flush(undefined);\n    }));\n  };\n  AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    var _a;\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (delay != null ? delay > 0 : this.delay > 0) {\n      return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n    }\n    var actions = scheduler.actions;\n    if (id != null && ((_a = actions[actions.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== id) {\n      animationFrameProvider_1.animationFrameProvider.cancelAnimationFrame(id);\n      scheduler._scheduled = undefined;\n    }\n    return undefined;\n  };\n  return AnimationFrameAction;\n}(AsyncAction_1.AsyncAction);\nexports.AnimationFrameAction = AnimationFrameAction;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AnimationFrameScheduler = void 0;\nvar AsyncScheduler_1 = require(\"./AsyncScheduler\");\nvar AnimationFrameScheduler = function (_super) {\n  __extends(AnimationFrameScheduler, _super);\n  function AnimationFrameScheduler() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  AnimationFrameScheduler.prototype.flush = function (action) {\n    this._active = true;\n    var flushId = this._scheduled;\n    this._scheduled = undefined;\n    var actions = this.actions;\n    var error;\n    action = action || actions.shift();\n    do {\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    } while ((action = actions[0]) && action.id === flushId && actions.shift());\n    this._active = false;\n    if (error) {\n      while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  return AnimationFrameScheduler;\n}(AsyncScheduler_1.AsyncScheduler);\nexports.AnimationFrameScheduler = AnimationFrameScheduler;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.animationFrame = exports.animationFrameScheduler = void 0;\nvar AnimationFrameAction_1 = require(\"./AnimationFrameAction\");\nvar AnimationFrameScheduler_1 = require(\"./AnimationFrameScheduler\");\nexports.animationFrameScheduler = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction);\nexports.animationFrame = exports.animationFrameScheduler;\n", "\"use strict\";\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.VirtualAction = exports.VirtualTimeScheduler = void 0;\nvar AsyncAction_1 = require(\"./AsyncAction\");\nvar Subscription_1 = require(\"../Subscription\");\nvar AsyncScheduler_1 = require(\"./AsyncScheduler\");\nvar VirtualTimeScheduler = function (_super) {\n  __extends(VirtualTimeScheduler, _super);\n  function VirtualTimeScheduler(schedulerActionCtor, maxFrames) {\n    if (schedulerActionCtor === void 0) {\n      schedulerActionCtor = VirtualAction;\n    }\n    if (maxFrames === void 0) {\n      maxFrames = Infinity;\n    }\n    var _this = _super.call(this, schedulerActionCtor, function () {\n      return _this.frame;\n    }) || this;\n    _this.maxFrames = maxFrames;\n    _this.frame = 0;\n    _this.index = -1;\n    return _this;\n  }\n  VirtualTimeScheduler.prototype.flush = function () {\n    var _a = this,\n      actions = _a.actions,\n      maxFrames = _a.maxFrames;\n    var error;\n    var action;\n    while ((action = actions[0]) && action.delay <= maxFrames) {\n      actions.shift();\n      this.frame = action.delay;\n      if (error = action.execute(action.state, action.delay)) {\n        break;\n      }\n    }\n    if (error) {\n      while (action = actions.shift()) {\n        action.unsubscribe();\n      }\n      throw error;\n    }\n  };\n  VirtualTimeScheduler.frameTimeFactor = 10;\n  return VirtualTimeScheduler;\n}(AsyncScheduler_1.AsyncScheduler);\nexports.VirtualTimeScheduler = VirtualTimeScheduler;\nvar VirtualAction = function (_super) {\n  __extends(VirtualAction, _super);\n  function VirtualAction(scheduler, work, index) {\n    if (index === void 0) {\n      index = scheduler.index += 1;\n    }\n    var _this = _super.call(this, scheduler, work) || this;\n    _this.scheduler = scheduler;\n    _this.work = work;\n    _this.index = index;\n    _this.active = true;\n    _this.index = scheduler.index = index;\n    return _this;\n  }\n  VirtualAction.prototype.schedule = function (state, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    if (Number.isFinite(delay)) {\n      if (!this.id) {\n        return _super.prototype.schedule.call(this, state, delay);\n      }\n      this.active = false;\n      var action = new VirtualAction(this.scheduler, this.work);\n      this.add(action);\n      return action.schedule(state, delay);\n    } else {\n      return Subscription_1.Subscription.EMPTY;\n    }\n  };\n  VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    this.delay = scheduler.frame + delay;\n    var actions = scheduler.actions;\n    actions.push(this);\n    actions.sort(VirtualAction.sortActions);\n    return 1;\n  };\n  VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n    if (delay === void 0) {\n      delay = 0;\n    }\n    return undefined;\n  };\n  VirtualAction.prototype._execute = function (state, delay) {\n    if (this.active === true) {\n      return _super.prototype._execute.call(this, state, delay);\n    }\n  };\n  VirtualAction.sortActions = function (a, b) {\n    if (a.delay === b.delay) {\n      if (a.index === b.index) {\n        return 0;\n      } else if (a.index > b.index) {\n        return 1;\n      } else {\n        return -1;\n      }\n    } else if (a.delay > b.delay) {\n      return 1;\n    } else {\n      return -1;\n    }\n  };\n  return VirtualAction;\n}(AsyncAction_1.AsyncAction);\nexports.VirtualAction = VirtualAction;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.empty = exports.EMPTY = void 0;\nvar Observable_1 = require(\"../Observable\");\nexports.EMPTY = new Observable_1.Observable(function (subscriber) {\n  return subscriber.complete();\n});\nfunction empty(scheduler) {\n  return scheduler ? emptyScheduled(scheduler) : exports.EMPTY;\n}\nexports.empty = empty;\nfunction emptyScheduled(scheduler) {\n  return new Observable_1.Observable(function (subscriber) {\n    return scheduler.schedule(function () {\n      return subscriber.complete();\n    });\n  });\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isScheduler = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nfunction isScheduler(value) {\n  return value && isFunction_1.isFunction(value.schedule);\n}\nexports.isScheduler = isScheduler;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.popNumber = exports.popScheduler = exports.popResultSelector = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nvar isScheduler_1 = require(\"./isScheduler\");\nfunction last(arr) {\n  return arr[arr.length - 1];\n}\nfunction popResultSelector(args) {\n  return isFunction_1.isFunction(last(args)) ? args.pop() : undefined;\n}\nexports.popResultSelector = popResultSelector;\nfunction popScheduler(args) {\n  return isScheduler_1.isScheduler(last(args)) ? args.pop() : undefined;\n}\nexports.popScheduler = popScheduler;\nfunction popNumber(args, defaultValue) {\n  return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\nexports.popNumber = popNumber;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isArrayLike = void 0;\nexports.isArrayLike = function (x) {\n  return x && typeof x.length === 'number' && typeof x !== 'function';\n};\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isPromise = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nfunction isPromise(value) {\n  return isFunction_1.isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\nexports.isPromise = isPromise;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isInteropObservable = void 0;\nvar observable_1 = require(\"../symbol/observable\");\nvar isFunction_1 = require(\"./isFunction\");\nfunction isInteropObservable(input) {\n  return isFunction_1.isFunction(input[observable_1.observable]);\n}\nexports.isInteropObservable = isInteropObservable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isAsyncIterable = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nfunction isAsyncIterable(obj) {\n  return Symbol.asyncIterator && isFunction_1.isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\nexports.isAsyncIterable = isAsyncIterable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createInvalidObservableTypeError = void 0;\nfunction createInvalidObservableTypeError(input) {\n  return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\nexports.createInvalidObservableTypeError = createInvalidObservableTypeError;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.iterator = exports.getSymbolIterator = void 0;\nfunction getSymbolIterator() {\n  if (typeof Symbol !== 'function' || !Symbol.iterator) {\n    return '@@iterator';\n  }\n  return Symbol.iterator;\n}\nexports.getSymbolIterator = getSymbolIterator;\nexports.iterator = getSymbolIterator();\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isIterable = void 0;\nvar iterator_1 = require(\"../symbol/iterator\");\nvar isFunction_1 = require(\"./isFunction\");\nfunction isIterable(input) {\n  return isFunction_1.isFunction(input === null || input === void 0 ? void 0 : input[iterator_1.iterator]);\n}\nexports.isIterable = isIterable;\n", "\"use strict\";\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (_) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n};\nvar __await = this && this.__await || function (v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n};\nvar __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []),\n    i,\n    q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i;\n  function verb(n) {\n    if (g[n]) i[n] = function (v) {\n      return new Promise(function (a, b) {\n        q.push([n, v, a, b]) > 1 || resume(n, v);\n      });\n    };\n  }\n  function resume(n, v) {\n    try {\n      step(g[n](v));\n    } catch (e) {\n      settle(q[0][3], e);\n    }\n  }\n  function step(r) {\n    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n  }\n  function fulfill(value) {\n    resume(\"next\", value);\n  }\n  function reject(value) {\n    resume(\"throw\", value);\n  }\n  function settle(f, v) {\n    if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n  }\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isReadableStreamLike = exports.readableStreamLikeToAsyncGenerator = void 0;\nvar isFunction_1 = require(\"./isFunction\");\nfunction readableStreamLikeToAsyncGenerator(readableStream) {\n  return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n    var reader, _a, value, done;\n    return __generator(this, function (_b) {\n      switch (_b.label) {\n        case 0:\n          reader = readableStream.getReader();\n          _b.label = 1;\n        case 1:\n          _b.trys.push([1,, 9, 10]);\n          _b.label = 2;\n        case 2:\n          if (!true) return [3, 8];\n          return [4, __await(reader.read())];\n        case 3:\n          _a = _b.sent(), value = _a.value, done = _a.done;\n          if (!done) return [3, 5];\n          return [4, __await(void 0)];\n        case 4:\n          return [2, _b.sent()];\n        case 5:\n          return [4, __await(value)];\n        case 6:\n          return [4, _b.sent()];\n        case 7:\n          _b.sent();\n          return [3, 2];\n        case 8:\n          return [3, 10];\n        case 9:\n          reader.releaseLock();\n          return [7];\n        case 10:\n          return [2];\n      }\n    });\n  });\n}\nexports.readableStreamLikeToAsyncGenerator = readableStreamLikeToAsyncGenerator;\nfunction isReadableStreamLike(obj) {\n  return isFunction_1.isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\nexports.isReadableStreamLike = isReadableStreamLike;\n", "\"use strict\";\n\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function (resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function (resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nvar __generator = this && this.__generator || function (thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (_) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n};\nvar __asyncValues = this && this.__asyncValues || function (o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator],\n    i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i);\n  function verb(n) {\n    i[n] = o[n] && function (v) {\n      return new Promise(function (resolve, reject) {\n        v = o[n](v), settle(resolve, reject, v.done, v.value);\n      });\n    };\n  }\n  function settle(resolve, reject, d, v) {\n    Promise.resolve(v).then(function (v) {\n      resolve({\n        value: v,\n        done: d\n      });\n    }, reject);\n  }\n};\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.fromReadableStreamLike = exports.fromAsyncIterable = exports.fromIterable = exports.fromPromise = exports.fromArrayLike = exports.fromInteropObservable = exports.innerFrom = void 0;\nvar isArrayLike_1 = require(\"../util/isArrayLike\");\nvar isPromise_1 = require(\"../util/isPromise\");\nvar Observable_1 = require(\"../Observable\");\nvar isInteropObservable_1 = require(\"../util/isInteropObservable\");\nvar isAsyncIterable_1 = require(\"../util/isAsyncIterable\");\nvar throwUnobservableError_1 = require(\"../util/throwUnobservableError\");\nvar isIterable_1 = require(\"../util/isIterable\");\nvar isReadableStreamLike_1 = require(\"../util/isReadableStreamLike\");\nvar isFunction_1 = require(\"../util/isFunction\");\nvar reportUnhandledError_1 = require(\"../util/reportUnhandledError\");\nvar observable_1 = require(\"../symbol/observable\");\nfunction innerFrom(input) {\n  if (input instanceof Observable_1.Observable) {\n    return input;\n  }\n  if (input != null) {\n    if (isInteropObservable_1.isInteropObservable(input)) {\n      return fromInteropObservable(input);\n    }\n    if (isArrayLike_1.isArrayLike(input)) {\n      return fromArrayLike(input);\n    }\n    if (isPromise_1.isPromise(input)) {\n      return fromPromise(input);\n    }\n    if (isAsyncIterable_1.isAsyncIterable(input)) {\n      return fromAsyncIterable(input);\n    }\n    if (isIterable_1.isIterable(input)) {\n      return fromIterable(input);\n    }\n    if (isReadableStreamLike_1.isReadableStreamLike(input)) {\n      return fromReadableStreamLike(input);\n    }\n  }\n  throw throwUnobservableError_1.createInvalidObservableTypeError(input);\n}\nexports.innerFrom = innerFrom;\nfunction fromInteropObservable(obj) {\n  return new Observable_1.Observable(function (subscriber) {\n    var obs = obj[observable_1.observable]();\n    if (isFunction_1.isFunction(obs.subscribe)) {\n      return obs.subscribe(subscriber);\n    }\n    throw new TypeError('Provided object does not correctly implement Symbol.observable');\n  });\n}\nexports.fromInteropObservable = fromInteropObservable;\nfunction fromArrayLike(array) {\n  return new Observable_1.Observable(function (subscriber) {\n    for (var i = 0; i < array.length && !subscriber.closed; i++) {\n      subscriber.next(array[i]);\n    }\n    subscriber.complete();\n  });\n}\nexports.fromArrayLike = fromArrayLike;\nfunction fromPromise(promise) {\n  return new Observable_1.Observable(function (subscriber) {\n    promise.then(function (value) {\n      if (!subscriber.closed) {\n        subscriber.next(value);\n        subscriber.complete();\n      }\n    }, function (err) {\n      return subscriber.error(err);\n    }).then(null, reportUnhandledError_1.reportUnhandledError);\n  });\n}\nexports.fromPromise = fromPromise;\nfunction fromIterable(iterable) {\n  return new Observable_1.Observable(function (subscriber) {\n    var e_1, _a;\n    try {\n      for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n        var value = iterable_1_1.value;\n        subscriber.next(value);\n        if (subscriber.closed) {\n          return;\n        }\n      }\n    } catch (e_1_1) {\n      e_1 = {\n        error: e_1_1\n      };\n    } finally {\n      try {\n        if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n      } finally {\n        if (e_1) throw e_1.error;\n      }\n    }\n    subscriber.complete();\n  });\n}\nexports.fromIterable = fromIterable;\nfunction fromAsyncIterable(asyncIterable) {\n  return new Observable_1.Observable(function (subscriber) {\n    process(asyncIterable, subscriber).catch(function (err) {\n      return subscriber.error(err);\n    });\n  });\n}\nexports.fromAsyncIterable = fromAsyncIterable;\nfunction fromReadableStreamLike(readableStream) {\n  return fromAsyncIterable(isReadableStreamLike_1.readableStreamLikeToAsyncGenerator(readableStream));\n}\nexports.fromReadableStreamLike = fromReadableStreamLike;\nfunction process(asyncIterable, subscriber) {\n  var asyncIterable_1, asyncIterable_1_1;\n  var e_2, _a;\n  return __awaiter(this, void 0, void 0, function () {\n    var value, e_2_1;\n    return __generator(this, function (_b) {\n      switch (_b.label) {\n        case 0:\n          _b.trys.push([0, 5, 6, 11]);\n          asyncIterable_1 = __asyncValues(asyncIterable);\n          _b.label = 1;\n        case 1:\n          return [4, asyncIterable_1.next()];\n        case 2:\n          if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n          value = asyncIterable_1_1.value;\n          subscriber.next(value);\n          if (subscriber.closed) {\n            return [2];\n          }\n          _b.label = 3;\n        case 3:\n          return [3, 1];\n        case 4:\n          return [3, 11];\n        case 5:\n          e_2_1 = _b.sent();\n          e_2 = {\n            error: e_2_1\n          };\n          return [3, 11];\n        case 6:\n          _b.trys.push([6,, 9, 10]);\n          if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n          return [4, _a.call(asyncIterable_1)];\n        case 7:\n          _b.sent();\n          _b.label = 8;\n        case 8:\n          return [3, 10];\n        case 9:\n          if (e_2) throw e_2.error;\n          return [7];\n        case 10:\n          return [7];\n        case 11:\n          subscriber.complete();\n          return [2];\n      }\n    });\n  });\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.executeSchedule = void 0;\nfunction executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  if (repeat === void 0) {\n    repeat = false;\n  }\n  var scheduleSubscription = scheduler.schedule(function () {\n    work();\n    if (repeat) {\n      parentSubscription.add(this.schedule(null, delay));\n    } else {\n      this.unsubscribe();\n    }\n  }, delay);\n  parentSubscription.add(scheduleSubscription);\n  if (!repeat) {\n    return scheduleSubscription;\n  }\n}\nexports.executeSchedule = executeSchedule;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.observeOn = void 0;\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction observeOn(scheduler, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        return subscriber.next(value);\n      }, delay);\n    }, function () {\n      return executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        return subscriber.complete();\n      }, delay);\n    }, function (err) {\n      return executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        return subscriber.error(err);\n      }, delay);\n    }));\n  });\n}\nexports.observeOn = observeOn;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.subscribeOn = void 0;\nvar lift_1 = require(\"../util/lift\");\nfunction subscribeOn(scheduler, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    subscriber.add(scheduler.schedule(function () {\n      return source.subscribe(subscriber);\n    }, delay));\n  });\n}\nexports.subscribeOn = subscribeOn;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduleObservable = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar observeOn_1 = require(\"../operators/observeOn\");\nvar subscribeOn_1 = require(\"../operators/subscribeOn\");\nfunction scheduleObservable(input, scheduler) {\n  return innerFrom_1.innerFrom(input).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));\n}\nexports.scheduleObservable = scheduleObservable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.schedulePromise = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar observeOn_1 = require(\"../operators/observeOn\");\nvar subscribeOn_1 = require(\"../operators/subscribeOn\");\nfunction schedulePromise(input, scheduler) {\n  return innerFrom_1.innerFrom(input).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));\n}\nexports.schedulePromise = schedulePromise;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduleArray = void 0;\nvar Observable_1 = require(\"../Observable\");\nfunction scheduleArray(input, scheduler) {\n  return new Observable_1.Observable(function (subscriber) {\n    var i = 0;\n    return scheduler.schedule(function () {\n      if (i === input.length) {\n        subscriber.complete();\n      } else {\n        subscriber.next(input[i++]);\n        if (!subscriber.closed) {\n          this.schedule();\n        }\n      }\n    });\n  });\n}\nexports.scheduleArray = scheduleArray;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduleIterable = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar iterator_1 = require(\"../symbol/iterator\");\nvar isFunction_1 = require(\"../util/isFunction\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nfunction scheduleIterable(input, scheduler) {\n  return new Observable_1.Observable(function (subscriber) {\n    var iterator;\n    executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n      iterator = input[iterator_1.iterator]();\n      executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        var _a;\n        var value;\n        var done;\n        try {\n          _a = iterator.next(), value = _a.value, done = _a.done;\n        } catch (err) {\n          subscriber.error(err);\n          return;\n        }\n        if (done) {\n          subscriber.complete();\n        } else {\n          subscriber.next(value);\n        }\n      }, 0, true);\n    });\n    return function () {\n      return isFunction_1.isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();\n    };\n  });\n}\nexports.scheduleIterable = scheduleIterable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduleAsyncIterable = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nfunction scheduleAsyncIterable(input, scheduler) {\n  if (!input) {\n    throw new Error('Iterable cannot be null');\n  }\n  return new Observable_1.Observable(function (subscriber) {\n    executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n      var iterator = input[Symbol.asyncIterator]();\n      executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        iterator.next().then(function (result) {\n          if (result.done) {\n            subscriber.complete();\n          } else {\n            subscriber.next(result.value);\n          }\n        });\n      }, 0, true);\n    });\n  });\n}\nexports.scheduleAsyncIterable = scheduleAsyncIterable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduleReadableStreamLike = void 0;\nvar scheduleAsyncIterable_1 = require(\"./scheduleAsyncIterable\");\nvar isReadableStreamLike_1 = require(\"../util/isReadableStreamLike\");\nfunction scheduleReadableStreamLike(input, scheduler) {\n  return scheduleAsyncIterable_1.scheduleAsyncIterable(isReadableStreamLike_1.readableStreamLikeToAsyncGenerator(input), scheduler);\n}\nexports.scheduleReadableStreamLike = scheduleReadableStreamLike;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scheduled = void 0;\nvar scheduleObservable_1 = require(\"./scheduleObservable\");\nvar schedulePromise_1 = require(\"./schedulePromise\");\nvar scheduleArray_1 = require(\"./scheduleArray\");\nvar scheduleIterable_1 = require(\"./scheduleIterable\");\nvar scheduleAsyncIterable_1 = require(\"./scheduleAsyncIterable\");\nvar isInteropObservable_1 = require(\"../util/isInteropObservable\");\nvar isPromise_1 = require(\"../util/isPromise\");\nvar isArrayLike_1 = require(\"../util/isArrayLike\");\nvar isIterable_1 = require(\"../util/isIterable\");\nvar isAsyncIterable_1 = require(\"../util/isAsyncIterable\");\nvar throwUnobservableError_1 = require(\"../util/throwUnobservableError\");\nvar isReadableStreamLike_1 = require(\"../util/isReadableStreamLike\");\nvar scheduleReadableStreamLike_1 = require(\"./scheduleReadableStreamLike\");\nfunction scheduled(input, scheduler) {\n  if (input != null) {\n    if (isInteropObservable_1.isInteropObservable(input)) {\n      return scheduleObservable_1.scheduleObservable(input, scheduler);\n    }\n    if (isArrayLike_1.isArrayLike(input)) {\n      return scheduleArray_1.scheduleArray(input, scheduler);\n    }\n    if (isPromise_1.isPromise(input)) {\n      return schedulePromise_1.schedulePromise(input, scheduler);\n    }\n    if (isAsyncIterable_1.isAsyncIterable(input)) {\n      return scheduleAsyncIterable_1.scheduleAsyncIterable(input, scheduler);\n    }\n    if (isIterable_1.isIterable(input)) {\n      return scheduleIterable_1.scheduleIterable(input, scheduler);\n    }\n    if (isReadableStreamLike_1.isReadableStreamLike(input)) {\n      return scheduleReadableStreamLike_1.scheduleReadableStreamLike(input, scheduler);\n    }\n  }\n  throw throwUnobservableError_1.createInvalidObservableTypeError(input);\n}\nexports.scheduled = scheduled;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.from = void 0;\nvar scheduled_1 = require(\"../scheduled/scheduled\");\nvar innerFrom_1 = require(\"./innerFrom\");\nfunction from(input, scheduler) {\n  return scheduler ? scheduled_1.scheduled(input, scheduler) : innerFrom_1.innerFrom(input);\n}\nexports.from = from;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.of = void 0;\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"./from\");\nfunction of() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(args);\n  return from_1.from(args, scheduler);\n}\nexports.of = of;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.throwError = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction throwError(errorOrErrorFactory, scheduler) {\n  var errorFactory = isFunction_1.isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () {\n    return errorOrErrorFactory;\n  };\n  var init = function (subscriber) {\n    return subscriber.error(errorFactory());\n  };\n  return new Observable_1.Observable(scheduler ? function (subscriber) {\n    return scheduler.schedule(init, 0, subscriber);\n  } : init);\n}\nexports.throwError = throwError;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.observeNotification = exports.Notification = exports.NotificationKind = void 0;\nvar empty_1 = require(\"./observable/empty\");\nvar of_1 = require(\"./observable/of\");\nvar throwError_1 = require(\"./observable/throwError\");\nvar isFunction_1 = require(\"./util/isFunction\");\nvar NotificationKind;\n(function (NotificationKind) {\n  NotificationKind[\"NEXT\"] = \"N\";\n  NotificationKind[\"ERROR\"] = \"E\";\n  NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind = exports.NotificationKind || (exports.NotificationKind = {}));\nvar Notification = function () {\n  function Notification(kind, value, error) {\n    this.kind = kind;\n    this.value = value;\n    this.error = error;\n    this.hasValue = kind === 'N';\n  }\n  Notification.prototype.observe = function (observer) {\n    return observeNotification(this, observer);\n  };\n  Notification.prototype.do = function (nextHandler, errorHandler, completeHandler) {\n    var _a = this,\n      kind = _a.kind,\n      value = _a.value,\n      error = _a.error;\n    return kind === 'N' ? nextHandler === null || nextHandler === void 0 ? void 0 : nextHandler(value) : kind === 'E' ? errorHandler === null || errorHandler === void 0 ? void 0 : errorHandler(error) : completeHandler === null || completeHandler === void 0 ? void 0 : completeHandler();\n  };\n  Notification.prototype.accept = function (nextOrObserver, error, complete) {\n    var _a;\n    return isFunction_1.isFunction((_a = nextOrObserver) === null || _a === void 0 ? void 0 : _a.next) ? this.observe(nextOrObserver) : this.do(nextOrObserver, error, complete);\n  };\n  Notification.prototype.toObservable = function () {\n    var _a = this,\n      kind = _a.kind,\n      value = _a.value,\n      error = _a.error;\n    var result = kind === 'N' ? of_1.of(value) : kind === 'E' ? throwError_1.throwError(function () {\n      return error;\n    }) : kind === 'C' ? empty_1.EMPTY : 0;\n    if (!result) {\n      throw new TypeError(\"Unexpected notification kind \" + kind);\n    }\n    return result;\n  };\n  Notification.createNext = function (value) {\n    return new Notification('N', value);\n  };\n  Notification.createError = function (err) {\n    return new Notification('E', undefined, err);\n  };\n  Notification.createComplete = function () {\n    return Notification.completeNotification;\n  };\n  Notification.completeNotification = new Notification('C');\n  return Notification;\n}();\nexports.Notification = Notification;\nfunction observeNotification(notification, observer) {\n  var _a, _b, _c;\n  var _d = notification,\n    kind = _d.kind,\n    value = _d.value,\n    error = _d.error;\n  if (typeof kind !== 'string') {\n    throw new TypeError('Invalid notification, missing \"kind\"');\n  }\n  kind === 'N' ? (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, value) : kind === 'E' ? (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, error) : (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);\n}\nexports.observeNotification = observeNotification;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isObservable = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar isFunction_1 = require(\"./isFunction\");\nfunction isObservable(obj) {\n  return !!obj && (obj instanceof Observable_1.Observable || isFunction_1.isFunction(obj.lift) && isFunction_1.isFunction(obj.subscribe));\n}\nexports.isObservable = isObservable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.EmptyError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.EmptyError = createErrorClass_1.createErrorClass(function (_super) {\n  return function EmptyErrorImpl() {\n    _super(this);\n    this.name = 'EmptyError';\n    this.message = 'no elements in sequence';\n  };\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.lastValueFrom = void 0;\nvar EmptyError_1 = require(\"./util/EmptyError\");\nfunction lastValueFrom(source, config) {\n  var hasConfig = typeof config === 'object';\n  return new Promise(function (resolve, reject) {\n    var _hasValue = false;\n    var _value;\n    source.subscribe({\n      next: function (value) {\n        _value = value;\n        _hasValue = true;\n      },\n      error: reject,\n      complete: function () {\n        if (_hasValue) {\n          resolve(_value);\n        } else if (hasConfig) {\n          resolve(config.defaultValue);\n        } else {\n          reject(new EmptyError_1.EmptyError());\n        }\n      }\n    });\n  });\n}\nexports.lastValueFrom = lastValueFrom;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.firstValueFrom = void 0;\nvar EmptyError_1 = require(\"./util/EmptyError\");\nvar Subscriber_1 = require(\"./Subscriber\");\nfunction firstValueFrom(source, config) {\n  var hasConfig = typeof config === 'object';\n  return new Promise(function (resolve, reject) {\n    var subscriber = new Subscriber_1.SafeSubscriber({\n      next: function (value) {\n        resolve(value);\n        subscriber.unsubscribe();\n      },\n      error: reject,\n      complete: function () {\n        if (hasConfig) {\n          resolve(config.defaultValue);\n        } else {\n          reject(new EmptyError_1.EmptyError());\n        }\n      }\n    });\n    source.subscribe(subscriber);\n  });\n}\nexports.firstValueFrom = firstValueFrom;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ArgumentOutOfRangeError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.ArgumentOutOfRangeError = createErrorClass_1.createErrorClass(function (_super) {\n  return function ArgumentOutOfRangeErrorImpl() {\n    _super(this);\n    this.name = 'ArgumentOutOfRangeError';\n    this.message = 'argument out of range';\n  };\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NotFoundError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.NotFoundError = createErrorClass_1.createErrorClass(function (_super) {\n  return function NotFoundErrorImpl(message) {\n    _super(this);\n    this.name = 'NotFoundError';\n    this.message = message;\n  };\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SequenceError = void 0;\nvar createErrorClass_1 = require(\"./createErrorClass\");\nexports.SequenceError = createErrorClass_1.createErrorClass(function (_super) {\n  return function SequenceErrorImpl(message) {\n    _super(this);\n    this.name = 'SequenceError';\n    this.message = message;\n  };\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isValidDate = void 0;\nfunction isValidDate(value) {\n  return value instanceof Date && !isNaN(value);\n}\nexports.isValidDate = isValidDate;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.timeout = exports.TimeoutError = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar isDate_1 = require(\"../util/isDate\");\nvar lift_1 = require(\"../util/lift\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar createErrorClass_1 = require(\"../util/createErrorClass\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nexports.TimeoutError = createErrorClass_1.createErrorClass(function (_super) {\n  return function TimeoutErrorImpl(info) {\n    if (info === void 0) {\n      info = null;\n    }\n    _super(this);\n    this.message = 'Timeout has occurred';\n    this.name = 'TimeoutError';\n    this.info = info;\n  };\n});\nfunction timeout(config, schedulerArg) {\n  var _a = isDate_1.isValidDate(config) ? {\n      first: config\n    } : typeof config === 'number' ? {\n      each: config\n    } : config,\n    first = _a.first,\n    each = _a.each,\n    _b = _a.with,\n    _with = _b === void 0 ? timeoutErrorFactory : _b,\n    _c = _a.scheduler,\n    scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : async_1.asyncScheduler : _c,\n    _d = _a.meta,\n    meta = _d === void 0 ? null : _d;\n  if (first == null && each == null) {\n    throw new TypeError('No timeout provided.');\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var originalSourceSubscription;\n    var timerSubscription;\n    var lastValue = null;\n    var seen = 0;\n    var startTimer = function (delay) {\n      timerSubscription = executeSchedule_1.executeSchedule(subscriber, scheduler, function () {\n        try {\n          originalSourceSubscription.unsubscribe();\n          innerFrom_1.innerFrom(_with({\n            meta: meta,\n            lastValue: lastValue,\n            seen: seen\n          })).subscribe(subscriber);\n        } catch (err) {\n          subscriber.error(err);\n        }\n      }, delay);\n    };\n    originalSourceSubscription = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n      seen++;\n      subscriber.next(lastValue = value);\n      each > 0 && startTimer(each);\n    }, undefined, undefined, function () {\n      if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {\n        timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n      }\n      lastValue = null;\n    }));\n    !seen && startTimer(first != null ? typeof first === 'number' ? first : +first - scheduler.now() : each);\n  });\n}\nexports.timeout = timeout;\nfunction timeoutErrorFactory(info) {\n  throw new exports.TimeoutError(info);\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.map = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction map(project, thisArg) {\n  return lift_1.operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      subscriber.next(project.call(thisArg, value, index++));\n    }));\n  });\n}\nexports.map = map;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mapOneOrManyArgs = void 0;\nvar map_1 = require(\"../operators/map\");\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n  return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nfunction mapOneOrManyArgs(fn) {\n  return map_1.map(function (args) {\n    return callOrApply(fn, args);\n  });\n}\nexports.mapOneOrManyArgs = mapOneOrManyArgs;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bindCallbackInternals = void 0;\nvar isScheduler_1 = require(\"../util/isScheduler\");\nvar Observable_1 = require(\"../Observable\");\nvar subscribeOn_1 = require(\"../operators/subscribeOn\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar observeOn_1 = require(\"../operators/observeOn\");\nvar AsyncSubject_1 = require(\"../AsyncSubject\");\nfunction bindCallbackInternals(isNodeStyle, callbackFunc, resultSelector, scheduler) {\n  if (resultSelector) {\n    if (isScheduler_1.isScheduler(resultSelector)) {\n      scheduler = resultSelector;\n    } else {\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        return bindCallbackInternals(isNodeStyle, callbackFunc, scheduler).apply(this, args).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));\n      };\n    }\n  }\n  if (scheduler) {\n    return function () {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n      return bindCallbackInternals(isNodeStyle, callbackFunc).apply(this, args).pipe(subscribeOn_1.subscribeOn(scheduler), observeOn_1.observeOn(scheduler));\n    };\n  }\n  return function () {\n    var _this = this;\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n    var subject = new AsyncSubject_1.AsyncSubject();\n    var uninitialized = true;\n    return new Observable_1.Observable(function (subscriber) {\n      var subs = subject.subscribe(subscriber);\n      if (uninitialized) {\n        uninitialized = false;\n        var isAsync_1 = false;\n        var isComplete_1 = false;\n        callbackFunc.apply(_this, __spreadArray(__spreadArray([], __read(args)), [function () {\n          var results = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            results[_i] = arguments[_i];\n          }\n          if (isNodeStyle) {\n            var err = results.shift();\n            if (err != null) {\n              subject.error(err);\n              return;\n            }\n          }\n          subject.next(1 < results.length ? results : results[0]);\n          isComplete_1 = true;\n          if (isAsync_1) {\n            subject.complete();\n          }\n        }]));\n        if (isComplete_1) {\n          subject.complete();\n        }\n        isAsync_1 = true;\n      }\n      return subs;\n    });\n  };\n}\nexports.bindCallbackInternals = bindCallbackInternals;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bindCallback = void 0;\nvar bindCallbackInternals_1 = require(\"./bindCallbackInternals\");\nfunction bindCallback(callbackFunc, resultSelector, scheduler) {\n  return bindCallbackInternals_1.bindCallbackInternals(false, callbackFunc, resultSelector, scheduler);\n}\nexports.bindCallback = bindCallback;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bindNodeCallback = void 0;\nvar bindCallbackInternals_1 = require(\"./bindCallbackInternals\");\nfunction bindNodeCallback(callbackFunc, resultSelector, scheduler) {\n  return bindCallbackInternals_1.bindCallbackInternals(true, callbackFunc, resultSelector, scheduler);\n}\nexports.bindNodeCallback = bindNodeCallback;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.argsArgArrayOrObject = void 0;\nvar isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf,\n  objectProto = Object.prototype,\n  getKeys = Object.keys;\nfunction argsArgArrayOrObject(args) {\n  if (args.length === 1) {\n    var first_1 = args[0];\n    if (isArray(first_1)) {\n      return {\n        args: first_1,\n        keys: null\n      };\n    }\n    if (isPOJO(first_1)) {\n      var keys = getKeys(first_1);\n      return {\n        args: keys.map(function (key) {\n          return first_1[key];\n        }),\n        keys: keys\n      };\n    }\n  }\n  return {\n    args: args,\n    keys: null\n  };\n}\nexports.argsArgArrayOrObject = argsArgArrayOrObject;\nfunction isPOJO(obj) {\n  return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createObject = void 0;\nfunction createObject(keys, values) {\n  return keys.reduce(function (result, key, i) {\n    return result[key] = values[i], result;\n  }, {});\n}\nexports.createObject = createObject;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.combineLatestInit = exports.combineLatest = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar argsArgArrayOrObject_1 = require(\"../util/argsArgArrayOrObject\");\nvar from_1 = require(\"./from\");\nvar identity_1 = require(\"../util/identity\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar args_1 = require(\"../util/args\");\nvar createObject_1 = require(\"../util/createObject\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nfunction combineLatest() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(args);\n  var resultSelector = args_1.popResultSelector(args);\n  var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args),\n    observables = _a.args,\n    keys = _a.keys;\n  if (observables.length === 0) {\n    return from_1.from([], scheduler);\n  }\n  var result = new Observable_1.Observable(combineLatestInit(observables, scheduler, keys ? function (values) {\n    return createObject_1.createObject(keys, values);\n  } : identity_1.identity));\n  return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;\n}\nexports.combineLatest = combineLatest;\nfunction combineLatestInit(observables, scheduler, valueTransform) {\n  if (valueTransform === void 0) {\n    valueTransform = identity_1.identity;\n  }\n  return function (subscriber) {\n    maybeSchedule(scheduler, function () {\n      var length = observables.length;\n      var values = new Array(length);\n      var active = length;\n      var remainingFirstValues = length;\n      var _loop_1 = function (i) {\n        maybeSchedule(scheduler, function () {\n          var source = from_1.from(observables[i], scheduler);\n          var hasFirstValue = false;\n          source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n            values[i] = value;\n            if (!hasFirstValue) {\n              hasFirstValue = true;\n              remainingFirstValues--;\n            }\n            if (!remainingFirstValues) {\n              subscriber.next(valueTransform(values.slice()));\n            }\n          }, function () {\n            if (! --active) {\n              subscriber.complete();\n            }\n          }));\n        }, subscriber);\n      };\n      for (var i = 0; i < length; i++) {\n        _loop_1(i);\n      }\n    }, subscriber);\n  };\n}\nexports.combineLatestInit = combineLatestInit;\nfunction maybeSchedule(scheduler, execute, subscription) {\n  if (scheduler) {\n    executeSchedule_1.executeSchedule(subscription, scheduler, execute);\n  } else {\n    execute();\n  }\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeInternals = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n  var buffer = [];\n  var active = 0;\n  var index = 0;\n  var isComplete = false;\n  var checkComplete = function () {\n    if (isComplete && !buffer.length && !active) {\n      subscriber.complete();\n    }\n  };\n  var outerNext = function (value) {\n    return active < concurrent ? doInnerSub(value) : buffer.push(value);\n  };\n  var doInnerSub = function (value) {\n    expand && subscriber.next(value);\n    active++;\n    var innerComplete = false;\n    innerFrom_1.innerFrom(project(value, index++)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (innerValue) {\n      onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n      if (expand) {\n        outerNext(innerValue);\n      } else {\n        subscriber.next(innerValue);\n      }\n    }, function () {\n      innerComplete = true;\n    }, undefined, function () {\n      if (innerComplete) {\n        try {\n          active--;\n          var _loop_1 = function () {\n            var bufferedValue = buffer.shift();\n            if (innerSubScheduler) {\n              executeSchedule_1.executeSchedule(subscriber, innerSubScheduler, function () {\n                return doInnerSub(bufferedValue);\n              });\n            } else {\n              doInnerSub(bufferedValue);\n            }\n          };\n          while (buffer.length && active < concurrent) {\n            _loop_1();\n          }\n          checkComplete();\n        } catch (err) {\n          subscriber.error(err);\n        }\n      }\n    }));\n  };\n  source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, outerNext, function () {\n    isComplete = true;\n    checkComplete();\n  }));\n  return function () {\n    additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n  };\n}\nexports.mergeInternals = mergeInternals;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeMap = void 0;\nvar map_1 = require(\"./map\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar lift_1 = require(\"../util/lift\");\nvar mergeInternals_1 = require(\"./mergeInternals\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction mergeMap(project, resultSelector, concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  if (isFunction_1.isFunction(resultSelector)) {\n    return mergeMap(function (a, i) {\n      return map_1.map(function (b, ii) {\n        return resultSelector(a, b, i, ii);\n      })(innerFrom_1.innerFrom(project(a, i)));\n    }, concurrent);\n  } else if (typeof resultSelector === 'number') {\n    concurrent = resultSelector;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    return mergeInternals_1.mergeInternals(source, subscriber, project, concurrent);\n  });\n}\nexports.mergeMap = mergeMap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeAll = void 0;\nvar mergeMap_1 = require(\"./mergeMap\");\nvar identity_1 = require(\"../util/identity\");\nfunction mergeAll(concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  return mergeMap_1.mergeMap(identity_1.identity, concurrent);\n}\nexports.mergeAll = mergeAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concatAll = void 0;\nvar mergeAll_1 = require(\"./mergeAll\");\nfunction concatAll() {\n  return mergeAll_1.mergeAll(1);\n}\nexports.concatAll = concatAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concat = void 0;\nvar concatAll_1 = require(\"../operators/concatAll\");\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"./from\");\nfunction concat() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  return concatAll_1.concatAll()(from_1.from(args, args_1.popScheduler(args)));\n}\nexports.concat = concat;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defer = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar innerFrom_1 = require(\"./innerFrom\");\nfunction defer(observableFactory) {\n  return new Observable_1.Observable(function (subscriber) {\n    innerFrom_1.innerFrom(observableFactory()).subscribe(subscriber);\n  });\n}\nexports.defer = defer;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.connectable = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar Observable_1 = require(\"../Observable\");\nvar defer_1 = require(\"./defer\");\nvar DEFAULT_CONFIG = {\n  connector: function () {\n    return new Subject_1.Subject();\n  },\n  resetOnDisconnect: true\n};\nfunction connectable(source, config) {\n  if (config === void 0) {\n    config = DEFAULT_CONFIG;\n  }\n  var connection = null;\n  var connector = config.connector,\n    _a = config.resetOnDisconnect,\n    resetOnDisconnect = _a === void 0 ? true : _a;\n  var subject = connector();\n  var result = new Observable_1.Observable(function (subscriber) {\n    return subject.subscribe(subscriber);\n  });\n  result.connect = function () {\n    if (!connection || connection.closed) {\n      connection = defer_1.defer(function () {\n        return source;\n      }).subscribe(subject);\n      if (resetOnDisconnect) {\n        connection.add(function () {\n          return subject = connector();\n        });\n      }\n    }\n    return connection;\n  };\n  return result;\n}\nexports.connectable = connectable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.forkJoin = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar argsArgArrayOrObject_1 = require(\"../util/argsArgArrayOrObject\");\nvar innerFrom_1 = require(\"./innerFrom\");\nvar args_1 = require(\"../util/args\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar createObject_1 = require(\"../util/createObject\");\nfunction forkJoin() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var resultSelector = args_1.popResultSelector(args);\n  var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args),\n    sources = _a.args,\n    keys = _a.keys;\n  var result = new Observable_1.Observable(function (subscriber) {\n    var length = sources.length;\n    if (!length) {\n      subscriber.complete();\n      return;\n    }\n    var values = new Array(length);\n    var remainingCompletions = length;\n    var remainingEmissions = length;\n    var _loop_1 = function (sourceIndex) {\n      var hasValue = false;\n      innerFrom_1.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n        if (!hasValue) {\n          hasValue = true;\n          remainingEmissions--;\n        }\n        values[sourceIndex] = value;\n      }, function () {\n        return remainingCompletions--;\n      }, undefined, function () {\n        if (!remainingCompletions || !hasValue) {\n          if (!remainingEmissions) {\n            subscriber.next(keys ? createObject_1.createObject(keys, values) : values);\n          }\n          subscriber.complete();\n        }\n      }));\n    };\n    for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n      _loop_1(sourceIndex);\n    }\n  });\n  return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;\n}\nexports.forkJoin = forkJoin;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.fromEvent = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar Observable_1 = require(\"../Observable\");\nvar mergeMap_1 = require(\"../operators/mergeMap\");\nvar isArrayLike_1 = require(\"../util/isArrayLike\");\nvar isFunction_1 = require(\"../util/isFunction\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar nodeEventEmitterMethods = ['addListener', 'removeListener'];\nvar eventTargetMethods = ['addEventListener', 'removeEventListener'];\nvar jqueryMethods = ['on', 'off'];\nfunction fromEvent(target, eventName, options, resultSelector) {\n  if (isFunction_1.isFunction(options)) {\n    resultSelector = options;\n    options = undefined;\n  }\n  if (resultSelector) {\n    return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));\n  }\n  var _a = __read(isEventTarget(target) ? eventTargetMethods.map(function (methodName) {\n      return function (handler) {\n        return target[methodName](eventName, handler, options);\n      };\n    }) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2),\n    add = _a[0],\n    remove = _a[1];\n  if (!add) {\n    if (isArrayLike_1.isArrayLike(target)) {\n      return mergeMap_1.mergeMap(function (subTarget) {\n        return fromEvent(subTarget, eventName, options);\n      })(innerFrom_1.innerFrom(target));\n    }\n  }\n  if (!add) {\n    throw new TypeError('Invalid event target');\n  }\n  return new Observable_1.Observable(function (subscriber) {\n    var handler = function () {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n      }\n      return subscriber.next(1 < args.length ? args : args[0]);\n    };\n    add(handler);\n    return function () {\n      return remove(handler);\n    };\n  });\n}\nexports.fromEvent = fromEvent;\nfunction toCommonHandlerRegistry(target, eventName) {\n  return function (methodName) {\n    return function (handler) {\n      return target[methodName](eventName, handler);\n    };\n  };\n}\nfunction isNodeStyleEventEmitter(target) {\n  return isFunction_1.isFunction(target.addListener) && isFunction_1.isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n  return isFunction_1.isFunction(target.on) && isFunction_1.isFunction(target.off);\n}\nfunction isEventTarget(target) {\n  return isFunction_1.isFunction(target.addEventListener) && isFunction_1.isFunction(target.removeEventListener);\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.fromEventPattern = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar isFunction_1 = require(\"../util/isFunction\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nfunction fromEventPattern(addHandler, removeHandler, resultSelector) {\n  if (resultSelector) {\n    return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector));\n  }\n  return new Observable_1.Observable(function (subscriber) {\n    var handler = function () {\n      var e = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        e[_i] = arguments[_i];\n      }\n      return subscriber.next(e.length === 1 ? e[0] : e);\n    };\n    var retValue = addHandler(handler);\n    return isFunction_1.isFunction(removeHandler) ? function () {\n      return removeHandler(handler, retValue);\n    } : undefined;\n  });\n}\nexports.fromEventPattern = fromEventPattern;\n", "\"use strict\";\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n  var _ = {\n      label: 0,\n      sent: function () {\n        if (t[0] & 1) throw t[1];\n        return t[1];\n      },\n      trys: [],\n      ops: []\n    },\n    f,\n    y,\n    t,\n    g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n    while (_) try {\n      if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n      if (y = 0, t) op = [op[0] & 2, t.value];\n      switch (op[0]) {\n        case 0:\n        case 1:\n          t = op;\n          break;\n        case 4:\n          _.label++;\n          return {\n            value: op[1],\n            done: false\n          };\n        case 5:\n          _.label++;\n          y = op[1];\n          op = [0];\n          continue;\n        case 7:\n          op = _.ops.pop();\n          _.trys.pop();\n          continue;\n        default:\n          if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n            _ = 0;\n            continue;\n          }\n          if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n            _.label = op[1];\n            break;\n          }\n          if (op[0] === 6 && _.label < t[1]) {\n            _.label = t[1];\n            t = op;\n            break;\n          }\n          if (t && _.label < t[2]) {\n            _.label = t[2];\n            _.ops.push(op);\n            break;\n          }\n          if (t[2]) _.ops.pop();\n          _.trys.pop();\n          continue;\n      }\n      op = body.call(thisArg, _);\n    } catch (e) {\n      op = [6, e];\n      y = 0;\n    } finally {\n      f = t = 0;\n    }\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.generate = void 0;\nvar identity_1 = require(\"../util/identity\");\nvar isScheduler_1 = require(\"../util/isScheduler\");\nvar defer_1 = require(\"./defer\");\nvar scheduleIterable_1 = require(\"../scheduled/scheduleIterable\");\nfunction generate(initialStateOrOptions, condition, iterate, resultSelectorOrScheduler, scheduler) {\n  var _a, _b;\n  var resultSelector;\n  var initialState;\n  if (arguments.length === 1) {\n    _a = initialStateOrOptions, initialState = _a.initialState, condition = _a.condition, iterate = _a.iterate, _b = _a.resultSelector, resultSelector = _b === void 0 ? identity_1.identity : _b, scheduler = _a.scheduler;\n  } else {\n    initialState = initialStateOrOptions;\n    if (!resultSelectorOrScheduler || isScheduler_1.isScheduler(resultSelectorOrScheduler)) {\n      resultSelector = identity_1.identity;\n      scheduler = resultSelectorOrScheduler;\n    } else {\n      resultSelector = resultSelectorOrScheduler;\n    }\n  }\n  function gen() {\n    var state;\n    return __generator(this, function (_a) {\n      switch (_a.label) {\n        case 0:\n          state = initialState;\n          _a.label = 1;\n        case 1:\n          if (!(!condition || condition(state))) return [3, 4];\n          return [4, resultSelector(state)];\n        case 2:\n          _a.sent();\n          _a.label = 3;\n        case 3:\n          state = iterate(state);\n          return [3, 1];\n        case 4:\n          return [2];\n      }\n    });\n  }\n  return defer_1.defer(scheduler ? function () {\n    return scheduleIterable_1.scheduleIterable(gen(), scheduler);\n  } : gen);\n}\nexports.generate = generate;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.iif = void 0;\nvar defer_1 = require(\"./defer\");\nfunction iif(condition, trueResult, falseResult) {\n  return defer_1.defer(function () {\n    return condition() ? trueResult : falseResult;\n  });\n}\nexports.iif = iif;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.timer = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar async_1 = require(\"../scheduler/async\");\nvar isScheduler_1 = require(\"../util/isScheduler\");\nvar isDate_1 = require(\"../util/isDate\");\nfunction timer(dueTime, intervalOrScheduler, scheduler) {\n  if (dueTime === void 0) {\n    dueTime = 0;\n  }\n  if (scheduler === void 0) {\n    scheduler = async_1.async;\n  }\n  var intervalDuration = -1;\n  if (intervalOrScheduler != null) {\n    if (isScheduler_1.isScheduler(intervalOrScheduler)) {\n      scheduler = intervalOrScheduler;\n    } else {\n      intervalDuration = intervalOrScheduler;\n    }\n  }\n  return new Observable_1.Observable(function (subscriber) {\n    var due = isDate_1.isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n    if (due < 0) {\n      due = 0;\n    }\n    var n = 0;\n    return scheduler.schedule(function () {\n      if (!subscriber.closed) {\n        subscriber.next(n++);\n        if (0 <= intervalDuration) {\n          this.schedule(undefined, intervalDuration);\n        } else {\n          subscriber.complete();\n        }\n      }\n    }, due);\n  });\n}\nexports.timer = timer;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.interval = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar timer_1 = require(\"./timer\");\nfunction interval(period, scheduler) {\n  if (period === void 0) {\n    period = 0;\n  }\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  if (period < 0) {\n    period = 0;\n  }\n  return timer_1.timer(period, period, scheduler);\n}\nexports.interval = interval;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.merge = void 0;\nvar mergeAll_1 = require(\"../operators/mergeAll\");\nvar innerFrom_1 = require(\"./innerFrom\");\nvar empty_1 = require(\"./empty\");\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"./from\");\nfunction merge() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(args);\n  var concurrent = args_1.popNumber(args, Infinity);\n  var sources = args;\n  return !sources.length ? empty_1.EMPTY : sources.length === 1 ? innerFrom_1.innerFrom(sources[0]) : mergeAll_1.mergeAll(concurrent)(from_1.from(sources, scheduler));\n}\nexports.merge = merge;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.never = exports.NEVER = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar noop_1 = require(\"../util/noop\");\nexports.NEVER = new Observable_1.Observable(noop_1.noop);\nfunction never() {\n  return exports.NEVER;\n}\nexports.never = never;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.argsOrArgArray = void 0;\nvar isArray = Array.isArray;\nfunction argsOrArgArray(args) {\n  return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\nexports.argsOrArgArray = argsOrArgArray;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.onErrorResumeNext = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nvar innerFrom_1 = require(\"./innerFrom\");\nfunction onErrorResumeNext() {\n  var sources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    sources[_i] = arguments[_i];\n  }\n  var nextSources = argsOrArgArray_1.argsOrArgArray(sources);\n  return new Observable_1.Observable(function (subscriber) {\n    var sourceIndex = 0;\n    var subscribeNext = function () {\n      if (sourceIndex < nextSources.length) {\n        var nextSource = void 0;\n        try {\n          nextSource = innerFrom_1.innerFrom(nextSources[sourceIndex++]);\n        } catch (err) {\n          subscribeNext();\n          return;\n        }\n        var innerSubscriber = new OperatorSubscriber_1.OperatorSubscriber(subscriber, undefined, noop_1.noop, noop_1.noop);\n        nextSource.subscribe(innerSubscriber);\n        innerSubscriber.add(subscribeNext);\n      } else {\n        subscriber.complete();\n      }\n    };\n    subscribeNext();\n  });\n}\nexports.onErrorResumeNext = onErrorResumeNext;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.pairs = void 0;\nvar from_1 = require(\"./from\");\nfunction pairs(obj, scheduler) {\n  return from_1.from(Object.entries(obj), scheduler);\n}\nexports.pairs = pairs;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.not = void 0;\nfunction not(pred, thisArg) {\n  return function (value, index) {\n    return !pred.call(thisArg, value, index);\n  };\n}\nexports.not = not;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.filter = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction filter(predicate, thisArg) {\n  return lift_1.operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return predicate.call(thisArg, value, index++) && subscriber.next(value);\n    }));\n  });\n}\nexports.filter = filter;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.partition = void 0;\nvar not_1 = require(\"../util/not\");\nvar filter_1 = require(\"../operators/filter\");\nvar innerFrom_1 = require(\"./innerFrom\");\nfunction partition(source, predicate, thisArg) {\n  return [filter_1.filter(predicate, thisArg)(innerFrom_1.innerFrom(source)), filter_1.filter(not_1.not(predicate, thisArg))(innerFrom_1.innerFrom(source))];\n}\nexports.partition = partition;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.raceInit = exports.race = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar innerFrom_1 = require(\"./innerFrom\");\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nfunction race() {\n  var sources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    sources[_i] = arguments[_i];\n  }\n  sources = argsOrArgArray_1.argsOrArgArray(sources);\n  return sources.length === 1 ? innerFrom_1.innerFrom(sources[0]) : new Observable_1.Observable(raceInit(sources));\n}\nexports.race = race;\nfunction raceInit(sources) {\n  return function (subscriber) {\n    var subscriptions = [];\n    var _loop_1 = function (i) {\n      subscriptions.push(innerFrom_1.innerFrom(sources[i]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n        if (subscriptions) {\n          for (var s = 0; s < subscriptions.length; s++) {\n            s !== i && subscriptions[s].unsubscribe();\n          }\n          subscriptions = null;\n        }\n        subscriber.next(value);\n      })));\n    };\n    for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n      _loop_1(i);\n    }\n  };\n}\nexports.raceInit = raceInit;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.range = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar empty_1 = require(\"./empty\");\nfunction range(start, count, scheduler) {\n  if (count == null) {\n    count = start;\n    start = 0;\n  }\n  if (count <= 0) {\n    return empty_1.EMPTY;\n  }\n  var end = count + start;\n  return new Observable_1.Observable(scheduler ? function (subscriber) {\n    var n = start;\n    return scheduler.schedule(function () {\n      if (n < end) {\n        subscriber.next(n++);\n        this.schedule();\n      } else {\n        subscriber.complete();\n      }\n    });\n  } : function (subscriber) {\n    var n = start;\n    while (n < end && !subscriber.closed) {\n      subscriber.next(n++);\n    }\n    subscriber.complete();\n  });\n}\nexports.range = range;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.using = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar innerFrom_1 = require(\"./innerFrom\");\nvar empty_1 = require(\"./empty\");\nfunction using(resourceFactory, observableFactory) {\n  return new Observable_1.Observable(function (subscriber) {\n    var resource = resourceFactory();\n    var result = observableFactory(resource);\n    var source = result ? innerFrom_1.innerFrom(result) : empty_1.EMPTY;\n    source.subscribe(subscriber);\n    return function () {\n      if (resource) {\n        resource.unsubscribe();\n      }\n    };\n  });\n}\nexports.using = using;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.zip = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar innerFrom_1 = require(\"./innerFrom\");\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar empty_1 = require(\"./empty\");\nvar OperatorSubscriber_1 = require(\"../operators/OperatorSubscriber\");\nvar args_1 = require(\"../util/args\");\nfunction zip() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var resultSelector = args_1.popResultSelector(args);\n  var sources = argsOrArgArray_1.argsOrArgArray(args);\n  return sources.length ? new Observable_1.Observable(function (subscriber) {\n    var buffers = sources.map(function () {\n      return [];\n    });\n    var completed = sources.map(function () {\n      return false;\n    });\n    subscriber.add(function () {\n      buffers = completed = null;\n    });\n    var _loop_1 = function (sourceIndex) {\n      innerFrom_1.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n        buffers[sourceIndex].push(value);\n        if (buffers.every(function (buffer) {\n          return buffer.length;\n        })) {\n          var result = buffers.map(function (buffer) {\n            return buffer.shift();\n          });\n          subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray([], __read(result))) : result);\n          if (buffers.some(function (buffer, i) {\n            return !buffer.length && completed[i];\n          })) {\n            subscriber.complete();\n          }\n        }\n      }, function () {\n        completed[sourceIndex] = true;\n        !buffers[sourceIndex].length && subscriber.complete();\n      }));\n    };\n    for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n      _loop_1(sourceIndex);\n    }\n    return function () {\n      buffers = completed = null;\n    };\n  }) : empty_1.EMPTY;\n}\nexports.zip = zip;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.audit = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction audit(durationSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    var lastValue = null;\n    var durationSubscriber = null;\n    var isComplete = false;\n    var endDuration = function () {\n      durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n      durationSubscriber = null;\n      if (hasValue) {\n        hasValue = false;\n        var value = lastValue;\n        lastValue = null;\n        subscriber.next(value);\n      }\n      isComplete && subscriber.complete();\n    };\n    var cleanupDuration = function () {\n      durationSubscriber = null;\n      isComplete && subscriber.complete();\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      lastValue = value;\n      if (!durationSubscriber) {\n        innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, endDuration, cleanupDuration));\n      }\n    }, function () {\n      isComplete = true;\n      (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n    }));\n  });\n}\nexports.audit = audit;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.auditTime = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar audit_1 = require(\"./audit\");\nvar timer_1 = require(\"../observable/timer\");\nfunction auditTime(duration, scheduler) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  return audit_1.audit(function () {\n    return timer_1.timer(duration, scheduler);\n  });\n}\nexports.auditTime = auditTime;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.buffer = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar noop_1 = require(\"../util/noop\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction buffer(closingNotifier) {\n  return lift_1.operate(function (source, subscriber) {\n    var currentBuffer = [];\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return currentBuffer.push(value);\n    }, function () {\n      subscriber.next(currentBuffer);\n      subscriber.complete();\n    }));\n    innerFrom_1.innerFrom(closingNotifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      var b = currentBuffer;\n      currentBuffer = [];\n      subscriber.next(b);\n    }, noop_1.noop));\n    return function () {\n      currentBuffer = null;\n    };\n  });\n}\nexports.buffer = buffer;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bufferCount = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nfunction bufferCount(bufferSize, startBufferEvery) {\n  if (startBufferEvery === void 0) {\n    startBufferEvery = null;\n  }\n  startBufferEvery = startBufferEvery !== null && startBufferEvery !== void 0 ? startBufferEvery : bufferSize;\n  return lift_1.operate(function (source, subscriber) {\n    var buffers = [];\n    var count = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var e_1, _a, e_2, _b;\n      var toEmit = null;\n      if (count++ % startBufferEvery === 0) {\n        buffers.push([]);\n      }\n      try {\n        for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) {\n          var buffer = buffers_1_1.value;\n          buffer.push(value);\n          if (bufferSize <= buffer.length) {\n            toEmit = toEmit !== null && toEmit !== void 0 ? toEmit : [];\n            toEmit.push(buffer);\n          }\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      if (toEmit) {\n        try {\n          for (var toEmit_1 = __values(toEmit), toEmit_1_1 = toEmit_1.next(); !toEmit_1_1.done; toEmit_1_1 = toEmit_1.next()) {\n            var buffer = toEmit_1_1.value;\n            arrRemove_1.arrRemove(buffers, buffer);\n            subscriber.next(buffer);\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (toEmit_1_1 && !toEmit_1_1.done && (_b = toEmit_1.return)) _b.call(toEmit_1);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n      }\n    }, function () {\n      var e_3, _a;\n      try {\n        for (var buffers_2 = __values(buffers), buffers_2_1 = buffers_2.next(); !buffers_2_1.done; buffers_2_1 = buffers_2.next()) {\n          var buffer = buffers_2_1.value;\n          subscriber.next(buffer);\n        }\n      } catch (e_3_1) {\n        e_3 = {\n          error: e_3_1\n        };\n      } finally {\n        try {\n          if (buffers_2_1 && !buffers_2_1.done && (_a = buffers_2.return)) _a.call(buffers_2);\n        } finally {\n          if (e_3) throw e_3.error;\n        }\n      }\n      subscriber.complete();\n    }, undefined, function () {\n      buffers = null;\n    }));\n  });\n}\nexports.bufferCount = bufferCount;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bufferTime = void 0;\nvar Subscription_1 = require(\"../Subscription\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nvar async_1 = require(\"../scheduler/async\");\nvar args_1 = require(\"../util/args\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nfunction bufferTime(bufferTimeSpan) {\n  var _a, _b;\n  var otherArgs = [];\n  for (var _i = 1; _i < arguments.length; _i++) {\n    otherArgs[_i - 1] = arguments[_i];\n  }\n  var scheduler = (_a = args_1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler;\n  var bufferCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null;\n  var maxBufferSize = otherArgs[1] || Infinity;\n  return lift_1.operate(function (source, subscriber) {\n    var bufferRecords = [];\n    var restartOnEmit = false;\n    var emit = function (record) {\n      var buffer = record.buffer,\n        subs = record.subs;\n      subs.unsubscribe();\n      arrRemove_1.arrRemove(bufferRecords, record);\n      subscriber.next(buffer);\n      restartOnEmit && startBuffer();\n    };\n    var startBuffer = function () {\n      if (bufferRecords) {\n        var subs = new Subscription_1.Subscription();\n        subscriber.add(subs);\n        var buffer = [];\n        var record_1 = {\n          buffer: buffer,\n          subs: subs\n        };\n        bufferRecords.push(record_1);\n        executeSchedule_1.executeSchedule(subs, scheduler, function () {\n          return emit(record_1);\n        }, bufferTimeSpan);\n      }\n    };\n    if (bufferCreationInterval !== null && bufferCreationInterval >= 0) {\n      executeSchedule_1.executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true);\n    } else {\n      restartOnEmit = true;\n    }\n    startBuffer();\n    var bufferTimeSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var e_1, _a;\n      var recordsCopy = bufferRecords.slice();\n      try {\n        for (var recordsCopy_1 = __values(recordsCopy), recordsCopy_1_1 = recordsCopy_1.next(); !recordsCopy_1_1.done; recordsCopy_1_1 = recordsCopy_1.next()) {\n          var record = recordsCopy_1_1.value;\n          var buffer = record.buffer;\n          buffer.push(value);\n          maxBufferSize <= buffer.length && emit(record);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (recordsCopy_1_1 && !recordsCopy_1_1.done && (_a = recordsCopy_1.return)) _a.call(recordsCopy_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    }, function () {\n      while (bufferRecords === null || bufferRecords === void 0 ? void 0 : bufferRecords.length) {\n        subscriber.next(bufferRecords.shift().buffer);\n      }\n      bufferTimeSubscriber === null || bufferTimeSubscriber === void 0 ? void 0 : bufferTimeSubscriber.unsubscribe();\n      subscriber.complete();\n      subscriber.unsubscribe();\n    }, undefined, function () {\n      return bufferRecords = null;\n    });\n    source.subscribe(bufferTimeSubscriber);\n  });\n}\nexports.bufferTime = bufferTime;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bufferToggle = void 0;\nvar Subscription_1 = require(\"../Subscription\");\nvar lift_1 = require(\"../util/lift\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nfunction bufferToggle(openings, closingSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var buffers = [];\n    innerFrom_1.innerFrom(openings).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (openValue) {\n      var buffer = [];\n      buffers.push(buffer);\n      var closingSubscription = new Subscription_1.Subscription();\n      var emitBuffer = function () {\n        arrRemove_1.arrRemove(buffers, buffer);\n        subscriber.next(buffer);\n        closingSubscription.unsubscribe();\n      };\n      closingSubscription.add(innerFrom_1.innerFrom(closingSelector(openValue)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, emitBuffer, noop_1.noop)));\n    }, noop_1.noop));\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var e_1, _a;\n      try {\n        for (var buffers_1 = __values(buffers), buffers_1_1 = buffers_1.next(); !buffers_1_1.done; buffers_1_1 = buffers_1.next()) {\n          var buffer = buffers_1_1.value;\n          buffer.push(value);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (buffers_1_1 && !buffers_1_1.done && (_a = buffers_1.return)) _a.call(buffers_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    }, function () {\n      while (buffers.length > 0) {\n        subscriber.next(buffers.shift());\n      }\n      subscriber.complete();\n    }));\n  });\n}\nexports.bufferToggle = bufferToggle;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bufferWhen = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar noop_1 = require(\"../util/noop\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction bufferWhen(closingSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var buffer = null;\n    var closingSubscriber = null;\n    var openBuffer = function () {\n      closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();\n      var b = buffer;\n      buffer = [];\n      b && subscriber.next(b);\n      innerFrom_1.innerFrom(closingSelector()).subscribe(closingSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, openBuffer, noop_1.noop));\n    };\n    openBuffer();\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return buffer === null || buffer === void 0 ? void 0 : buffer.push(value);\n    }, function () {\n      buffer && subscriber.next(buffer);\n      subscriber.complete();\n    }, undefined, function () {\n      return buffer = closingSubscriber = null;\n    }));\n  });\n}\nexports.bufferWhen = bufferWhen;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.catchError = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar lift_1 = require(\"../util/lift\");\nfunction catchError(selector) {\n  return lift_1.operate(function (source, subscriber) {\n    var innerSub = null;\n    var syncUnsub = false;\n    var handledResult;\n    innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n      handledResult = innerFrom_1.innerFrom(selector(err, catchError(selector)(source)));\n      if (innerSub) {\n        innerSub.unsubscribe();\n        innerSub = null;\n        handledResult.subscribe(subscriber);\n      } else {\n        syncUnsub = true;\n      }\n    }));\n    if (syncUnsub) {\n      innerSub.unsubscribe();\n      innerSub = null;\n      handledResult.subscribe(subscriber);\n    }\n  });\n}\nexports.catchError = catchError;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scanInternals = void 0;\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {\n  return function (source, subscriber) {\n    var hasState = hasSeed;\n    var state = seed;\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var i = index++;\n      state = hasState ? accumulator(state, value, i) : (hasState = true, value);\n      emitOnNext && subscriber.next(state);\n    }, emitBeforeComplete && function () {\n      hasState && subscriber.next(state);\n      subscriber.complete();\n    }));\n  };\n}\nexports.scanInternals = scanInternals;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.reduce = void 0;\nvar scanInternals_1 = require(\"./scanInternals\");\nvar lift_1 = require(\"../util/lift\");\nfunction reduce(accumulator, seed) {\n  return lift_1.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\nexports.reduce = reduce;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.toArray = void 0;\nvar reduce_1 = require(\"./reduce\");\nvar lift_1 = require(\"../util/lift\");\nvar arrReducer = function (arr, value) {\n  return arr.push(value), arr;\n};\nfunction toArray() {\n  return lift_1.operate(function (source, subscriber) {\n    reduce_1.reduce(arrReducer, [])(source).subscribe(subscriber);\n  });\n}\nexports.toArray = toArray;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.joinAllInternals = void 0;\nvar identity_1 = require(\"../util/identity\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar pipe_1 = require(\"../util/pipe\");\nvar mergeMap_1 = require(\"./mergeMap\");\nvar toArray_1 = require(\"./toArray\");\nfunction joinAllInternals(joinFn, project) {\n  return pipe_1.pipe(toArray_1.toArray(), mergeMap_1.mergeMap(function (sources) {\n    return joinFn(sources);\n  }), project ? mapOneOrManyArgs_1.mapOneOrManyArgs(project) : identity_1.identity);\n}\nexports.joinAllInternals = joinAllInternals;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.combineLatestAll = void 0;\nvar combineLatest_1 = require(\"../observable/combineLatest\");\nvar joinAllInternals_1 = require(\"./joinAllInternals\");\nfunction combineLatestAll(project) {\n  return joinAllInternals_1.joinAllInternals(combineLatest_1.combineLatest, project);\n}\nexports.combineLatestAll = combineLatestAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.combineAll = void 0;\nvar combineLatestAll_1 = require(\"./combineLatestAll\");\nexports.combineAll = combineLatestAll_1.combineLatestAll;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.combineLatest = void 0;\nvar combineLatest_1 = require(\"../observable/combineLatest\");\nvar lift_1 = require(\"../util/lift\");\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar mapOneOrManyArgs_1 = require(\"../util/mapOneOrManyArgs\");\nvar pipe_1 = require(\"../util/pipe\");\nvar args_1 = require(\"../util/args\");\nfunction combineLatest() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var resultSelector = args_1.popResultSelector(args);\n  return resultSelector ? pipe_1.pipe(combineLatest.apply(void 0, __spreadArray([], __read(args))), mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : lift_1.operate(function (source, subscriber) {\n    combineLatest_1.combineLatestInit(__spreadArray([source], __read(argsOrArgArray_1.argsOrArgArray(args))))(subscriber);\n  });\n}\nexports.combineLatest = combineLatest;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.combineLatestWith = void 0;\nvar combineLatest_1 = require(\"./combineLatest\");\nfunction combineLatestWith() {\n  var otherSources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    otherSources[_i] = arguments[_i];\n  }\n  return combineLatest_1.combineLatest.apply(void 0, __spreadArray([], __read(otherSources)));\n}\nexports.combineLatestWith = combineLatestWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concatMap = void 0;\nvar mergeMap_1 = require(\"./mergeMap\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction concatMap(project, resultSelector) {\n  return isFunction_1.isFunction(resultSelector) ? mergeMap_1.mergeMap(project, resultSelector, 1) : mergeMap_1.mergeMap(project, 1);\n}\nexports.concatMap = concatMap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concatMapTo = void 0;\nvar concatMap_1 = require(\"./concatMap\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction concatMapTo(innerObservable, resultSelector) {\n  return isFunction_1.isFunction(resultSelector) ? concatMap_1.concatMap(function () {\n    return innerObservable;\n  }, resultSelector) : concatMap_1.concatMap(function () {\n    return innerObservable;\n  });\n}\nexports.concatMapTo = concatMapTo;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concat = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar concatAll_1 = require(\"./concatAll\");\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"../observable/from\");\nfunction concat() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(args);\n  return lift_1.operate(function (source, subscriber) {\n    concatAll_1.concatAll()(from_1.from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);\n  });\n}\nexports.concat = concat;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.concatWith = void 0;\nvar concat_1 = require(\"./concat\");\nfunction concatWith() {\n  var otherSources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    otherSources[_i] = arguments[_i];\n  }\n  return concat_1.concat.apply(void 0, __spreadArray([], __read(otherSources)));\n}\nexports.concatWith = concatWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.fromSubscribable = void 0;\nvar Observable_1 = require(\"../Observable\");\nfunction fromSubscribable(subscribable) {\n  return new Observable_1.Observable(function (subscriber) {\n    return subscribable.subscribe(subscriber);\n  });\n}\nexports.fromSubscribable = fromSubscribable;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.connect = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar lift_1 = require(\"../util/lift\");\nvar fromSubscribable_1 = require(\"../observable/fromSubscribable\");\nvar DEFAULT_CONFIG = {\n  connector: function () {\n    return new Subject_1.Subject();\n  }\n};\nfunction connect(selector, config) {\n  if (config === void 0) {\n    config = DEFAULT_CONFIG;\n  }\n  var connector = config.connector;\n  return lift_1.operate(function (source, subscriber) {\n    var subject = connector();\n    innerFrom_1.innerFrom(selector(fromSubscribable_1.fromSubscribable(subject))).subscribe(subscriber);\n    subscriber.add(source.subscribe(subject));\n  });\n}\nexports.connect = connect;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.count = void 0;\nvar reduce_1 = require(\"./reduce\");\nfunction count(predicate) {\n  return reduce_1.reduce(function (total, value, i) {\n    return !predicate || predicate(value, i) ? total + 1 : total;\n  }, 0);\n}\nexports.count = count;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.debounce = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar noop_1 = require(\"../util/noop\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction debounce(durationSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    var lastValue = null;\n    var durationSubscriber = null;\n    var emit = function () {\n      durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n      durationSubscriber = null;\n      if (hasValue) {\n        hasValue = false;\n        var value = lastValue;\n        lastValue = null;\n        subscriber.next(value);\n      }\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n      hasValue = true;\n      lastValue = value;\n      durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, emit, noop_1.noop);\n      innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber);\n    }, function () {\n      emit();\n      subscriber.complete();\n    }, undefined, function () {\n      lastValue = durationSubscriber = null;\n    }));\n  });\n}\nexports.debounce = debounce;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.debounceTime = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction debounceTime(dueTime, scheduler) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var activeTask = null;\n    var lastValue = null;\n    var lastTime = null;\n    var emit = function () {\n      if (activeTask) {\n        activeTask.unsubscribe();\n        activeTask = null;\n        var value = lastValue;\n        lastValue = null;\n        subscriber.next(value);\n      }\n    };\n    function emitWhenIdle() {\n      var targetTime = lastTime + dueTime;\n      var now = scheduler.now();\n      if (now < targetTime) {\n        activeTask = this.schedule(undefined, targetTime - now);\n        subscriber.add(activeTask);\n        return;\n      }\n      emit();\n    }\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      lastValue = value;\n      lastTime = scheduler.now();\n      if (!activeTask) {\n        activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n        subscriber.add(activeTask);\n      }\n    }, function () {\n      emit();\n      subscriber.complete();\n    }, undefined, function () {\n      lastValue = activeTask = null;\n    }));\n  });\n}\nexports.debounceTime = debounceTime;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultIfEmpty = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction defaultIfEmpty(defaultValue) {\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      subscriber.next(value);\n    }, function () {\n      if (!hasValue) {\n        subscriber.next(defaultValue);\n      }\n      subscriber.complete();\n    }));\n  });\n}\nexports.defaultIfEmpty = defaultIfEmpty;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.take = void 0;\nvar empty_1 = require(\"../observable/empty\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction take(count) {\n  return count <= 0 ? function () {\n    return empty_1.EMPTY;\n  } : lift_1.operate(function (source, subscriber) {\n    var seen = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      if (++seen <= count) {\n        subscriber.next(value);\n        if (count <= seen) {\n          subscriber.complete();\n        }\n      }\n    }));\n  });\n}\nexports.take = take;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ignoreElements = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nfunction ignoreElements() {\n  return lift_1.operate(function (source, subscriber) {\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, noop_1.noop));\n  });\n}\nexports.ignoreElements = ignoreElements;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mapTo = void 0;\nvar map_1 = require(\"./map\");\nfunction mapTo(value) {\n  return map_1.map(function () {\n    return value;\n  });\n}\nexports.mapTo = mapTo;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.delayWhen = void 0;\nvar concat_1 = require(\"../observable/concat\");\nvar take_1 = require(\"./take\");\nvar ignoreElements_1 = require(\"./ignoreElements\");\nvar mapTo_1 = require(\"./mapTo\");\nvar mergeMap_1 = require(\"./mergeMap\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction delayWhen(delayDurationSelector, subscriptionDelay) {\n  if (subscriptionDelay) {\n    return function (source) {\n      return concat_1.concat(subscriptionDelay.pipe(take_1.take(1), ignoreElements_1.ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n    };\n  }\n  return mergeMap_1.mergeMap(function (value, index) {\n    return innerFrom_1.innerFrom(delayDurationSelector(value, index)).pipe(take_1.take(1), mapTo_1.mapTo(value));\n  });\n}\nexports.delayWhen = delayWhen;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.delay = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar delayWhen_1 = require(\"./delayWhen\");\nvar timer_1 = require(\"../observable/timer\");\nfunction delay(due, scheduler) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  var duration = timer_1.timer(due, scheduler);\n  return delayWhen_1.delayWhen(function () {\n    return duration;\n  });\n}\nexports.delay = delay;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.dematerialize = void 0;\nvar Notification_1 = require(\"../Notification\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction dematerialize() {\n  return lift_1.operate(function (source, subscriber) {\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (notification) {\n      return Notification_1.observeNotification(notification, subscriber);\n    }));\n  });\n}\nexports.dematerialize = dematerialize;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.distinct = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction distinct(keySelector, flushes) {\n  return lift_1.operate(function (source, subscriber) {\n    var distinctKeys = new Set();\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var key = keySelector ? keySelector(value) : value;\n      if (!distinctKeys.has(key)) {\n        distinctKeys.add(key);\n        subscriber.next(value);\n      }\n    }));\n    flushes && innerFrom_1.innerFrom(flushes).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      return distinctKeys.clear();\n    }, noop_1.noop));\n  });\n}\nexports.distinct = distinct;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.distinctUntilChanged = void 0;\nvar identity_1 = require(\"../util/identity\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction distinctUntilChanged(comparator, keySelector) {\n  if (keySelector === void 0) {\n    keySelector = identity_1.identity;\n  }\n  comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n  return lift_1.operate(function (source, subscriber) {\n    var previousKey;\n    var first = true;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var currentKey = keySelector(value);\n      if (first || !comparator(previousKey, currentKey)) {\n        first = false;\n        previousKey = currentKey;\n        subscriber.next(value);\n      }\n    }));\n  });\n}\nexports.distinctUntilChanged = distinctUntilChanged;\nfunction defaultCompare(a, b) {\n  return a === b;\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.distinctUntilKeyChanged = void 0;\nvar distinctUntilChanged_1 = require(\"./distinctUntilChanged\");\nfunction distinctUntilKeyChanged(key, compare) {\n  return distinctUntilChanged_1.distinctUntilChanged(function (x, y) {\n    return compare ? compare(x[key], y[key]) : x[key] === y[key];\n  });\n}\nexports.distinctUntilKeyChanged = distinctUntilKeyChanged;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.throwIfEmpty = void 0;\nvar EmptyError_1 = require(\"../util/EmptyError\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction throwIfEmpty(errorFactory) {\n  if (errorFactory === void 0) {\n    errorFactory = defaultErrorFactory;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      subscriber.next(value);\n    }, function () {\n      return hasValue ? subscriber.complete() : subscriber.error(errorFactory());\n    }));\n  });\n}\nexports.throwIfEmpty = throwIfEmpty;\nfunction defaultErrorFactory() {\n  return new EmptyError_1.EmptyError();\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.elementAt = void 0;\nvar ArgumentOutOfRangeError_1 = require(\"../util/ArgumentOutOfRangeError\");\nvar filter_1 = require(\"./filter\");\nvar throwIfEmpty_1 = require(\"./throwIfEmpty\");\nvar defaultIfEmpty_1 = require(\"./defaultIfEmpty\");\nvar take_1 = require(\"./take\");\nfunction elementAt(index, defaultValue) {\n  if (index < 0) {\n    throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError();\n  }\n  var hasDefaultValue = arguments.length >= 2;\n  return function (source) {\n    return source.pipe(filter_1.filter(function (v, i) {\n      return i === index;\n    }), take_1.take(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () {\n      return new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError();\n    }));\n  };\n}\nexports.elementAt = elementAt;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.endWith = void 0;\nvar concat_1 = require(\"../observable/concat\");\nvar of_1 = require(\"../observable/of\");\nfunction endWith() {\n  var values = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    values[_i] = arguments[_i];\n  }\n  return function (source) {\n    return concat_1.concat(source, of_1.of.apply(void 0, __spreadArray([], __read(values))));\n  };\n}\nexports.endWith = endWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.every = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction every(predicate, thisArg) {\n  return lift_1.operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      if (!predicate.call(thisArg, value, index++, source)) {\n        subscriber.next(false);\n        subscriber.complete();\n      }\n    }, function () {\n      subscriber.next(true);\n      subscriber.complete();\n    }));\n  });\n}\nexports.every = every;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.exhaustMap = void 0;\nvar map_1 = require(\"./map\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction exhaustMap(project, resultSelector) {\n  if (resultSelector) {\n    return function (source) {\n      return source.pipe(exhaustMap(function (a, i) {\n        return innerFrom_1.innerFrom(project(a, i)).pipe(map_1.map(function (b, ii) {\n          return resultSelector(a, b, i, ii);\n        }));\n      }));\n    };\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var index = 0;\n    var innerSub = null;\n    var isComplete = false;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (outerValue) {\n      if (!innerSub) {\n        innerSub = OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, function () {\n          innerSub = null;\n          isComplete && subscriber.complete();\n        });\n        innerFrom_1.innerFrom(project(outerValue, index++)).subscribe(innerSub);\n      }\n    }, function () {\n      isComplete = true;\n      !innerSub && subscriber.complete();\n    }));\n  });\n}\nexports.exhaustMap = exhaustMap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.exhaustAll = void 0;\nvar exhaustMap_1 = require(\"./exhaustMap\");\nvar identity_1 = require(\"../util/identity\");\nfunction exhaustAll() {\n  return exhaustMap_1.exhaustMap(identity_1.identity);\n}\nexports.exhaustAll = exhaustAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.exhaust = void 0;\nvar exhaustAll_1 = require(\"./exhaustAll\");\nexports.exhaust = exhaustAll_1.exhaustAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.expand = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar mergeInternals_1 = require(\"./mergeInternals\");\nfunction expand(project, concurrent, scheduler) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;\n  return lift_1.operate(function (source, subscriber) {\n    return mergeInternals_1.mergeInternals(source, subscriber, project, concurrent, undefined, true, scheduler);\n  });\n}\nexports.expand = expand;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.finalize = void 0;\nvar lift_1 = require(\"../util/lift\");\nfunction finalize(callback) {\n  return lift_1.operate(function (source, subscriber) {\n    try {\n      source.subscribe(subscriber);\n    } finally {\n      subscriber.add(callback);\n    }\n  });\n}\nexports.finalize = finalize;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createFind = exports.find = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction find(predicate, thisArg) {\n  return lift_1.operate(createFind(predicate, thisArg, 'value'));\n}\nexports.find = find;\nfunction createFind(predicate, thisArg, emit) {\n  var findIndex = emit === 'index';\n  return function (source, subscriber) {\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var i = index++;\n      if (predicate.call(thisArg, value, i, source)) {\n        subscriber.next(findIndex ? i : value);\n        subscriber.complete();\n      }\n    }, function () {\n      subscriber.next(findIndex ? -1 : undefined);\n      subscriber.complete();\n    }));\n  };\n}\nexports.createFind = createFind;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.findIndex = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar find_1 = require(\"./find\");\nfunction findIndex(predicate, thisArg) {\n  return lift_1.operate(find_1.createFind(predicate, thisArg, 'index'));\n}\nexports.findIndex = findIndex;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.first = void 0;\nvar EmptyError_1 = require(\"../util/EmptyError\");\nvar filter_1 = require(\"./filter\");\nvar take_1 = require(\"./take\");\nvar defaultIfEmpty_1 = require(\"./defaultIfEmpty\");\nvar throwIfEmpty_1 = require(\"./throwIfEmpty\");\nvar identity_1 = require(\"../util/identity\");\nfunction first(predicate, defaultValue) {\n  var hasDefaultValue = arguments.length >= 2;\n  return function (source) {\n    return source.pipe(predicate ? filter_1.filter(function (v, i) {\n      return predicate(v, i, source);\n    }) : identity_1.identity, take_1.take(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () {\n      return new EmptyError_1.EmptyError();\n    }));\n  };\n}\nexports.first = first;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.groupBy = void 0;\nvar Observable_1 = require(\"../Observable\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction groupBy(keySelector, elementOrOptions, duration, connector) {\n  return lift_1.operate(function (source, subscriber) {\n    var element;\n    if (!elementOrOptions || typeof elementOrOptions === 'function') {\n      element = elementOrOptions;\n    } else {\n      duration = elementOrOptions.duration, element = elementOrOptions.element, connector = elementOrOptions.connector;\n    }\n    var groups = new Map();\n    var notify = function (cb) {\n      groups.forEach(cb);\n      cb(subscriber);\n    };\n    var handleError = function (err) {\n      return notify(function (consumer) {\n        return consumer.error(err);\n      });\n    };\n    var activeGroups = 0;\n    var teardownAttempted = false;\n    var groupBySourceSubscriber = new OperatorSubscriber_1.OperatorSubscriber(subscriber, function (value) {\n      try {\n        var key_1 = keySelector(value);\n        var group_1 = groups.get(key_1);\n        if (!group_1) {\n          groups.set(key_1, group_1 = connector ? connector() : new Subject_1.Subject());\n          var grouped = createGroupedObservable(key_1, group_1);\n          subscriber.next(grouped);\n          if (duration) {\n            var durationSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(group_1, function () {\n              group_1.complete();\n              durationSubscriber_1 === null || durationSubscriber_1 === void 0 ? void 0 : durationSubscriber_1.unsubscribe();\n            }, undefined, undefined, function () {\n              return groups.delete(key_1);\n            });\n            groupBySourceSubscriber.add(innerFrom_1.innerFrom(duration(grouped)).subscribe(durationSubscriber_1));\n          }\n        }\n        group_1.next(element ? element(value) : value);\n      } catch (err) {\n        handleError(err);\n      }\n    }, function () {\n      return notify(function (consumer) {\n        return consumer.complete();\n      });\n    }, handleError, function () {\n      return groups.clear();\n    }, function () {\n      teardownAttempted = true;\n      return activeGroups === 0;\n    });\n    source.subscribe(groupBySourceSubscriber);\n    function createGroupedObservable(key, groupSubject) {\n      var result = new Observable_1.Observable(function (groupSubscriber) {\n        activeGroups++;\n        var innerSub = groupSubject.subscribe(groupSubscriber);\n        return function () {\n          innerSub.unsubscribe();\n          --activeGroups === 0 && teardownAttempted && groupBySourceSubscriber.unsubscribe();\n        };\n      });\n      result.key = key;\n      return result;\n    }\n  });\n}\nexports.groupBy = groupBy;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isEmpty = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction isEmpty() {\n  return lift_1.operate(function (source, subscriber) {\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      subscriber.next(false);\n      subscriber.complete();\n    }, function () {\n      subscriber.next(true);\n      subscriber.complete();\n    }));\n  });\n}\nexports.isEmpty = isEmpty;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.takeLast = void 0;\nvar empty_1 = require(\"../observable/empty\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction takeLast(count) {\n  return count <= 0 ? function () {\n    return empty_1.EMPTY;\n  } : lift_1.operate(function (source, subscriber) {\n    var buffer = [];\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      buffer.push(value);\n      count < buffer.length && buffer.shift();\n    }, function () {\n      var e_1, _a;\n      try {\n        for (var buffer_1 = __values(buffer), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) {\n          var value = buffer_1_1.value;\n          subscriber.next(value);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      subscriber.complete();\n    }, undefined, function () {\n      buffer = null;\n    }));\n  });\n}\nexports.takeLast = takeLast;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.last = void 0;\nvar EmptyError_1 = require(\"../util/EmptyError\");\nvar filter_1 = require(\"./filter\");\nvar takeLast_1 = require(\"./takeLast\");\nvar throwIfEmpty_1 = require(\"./throwIfEmpty\");\nvar defaultIfEmpty_1 = require(\"./defaultIfEmpty\");\nvar identity_1 = require(\"../util/identity\");\nfunction last(predicate, defaultValue) {\n  var hasDefaultValue = arguments.length >= 2;\n  return function (source) {\n    return source.pipe(predicate ? filter_1.filter(function (v, i) {\n      return predicate(v, i, source);\n    }) : identity_1.identity, takeLast_1.takeLast(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () {\n      return new EmptyError_1.EmptyError();\n    }));\n  };\n}\nexports.last = last;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.materialize = void 0;\nvar Notification_1 = require(\"../Notification\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction materialize() {\n  return lift_1.operate(function (source, subscriber) {\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      subscriber.next(Notification_1.Notification.createNext(value));\n    }, function () {\n      subscriber.next(Notification_1.Notification.createComplete());\n      subscriber.complete();\n    }, function (err) {\n      subscriber.next(Notification_1.Notification.createError(err));\n      subscriber.complete();\n    }));\n  });\n}\nexports.materialize = materialize;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.max = void 0;\nvar reduce_1 = require(\"./reduce\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction max(comparer) {\n  return reduce_1.reduce(isFunction_1.isFunction(comparer) ? function (x, y) {\n    return comparer(x, y) > 0 ? x : y;\n  } : function (x, y) {\n    return x > y ? x : y;\n  });\n}\nexports.max = max;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.flatMap = void 0;\nvar mergeMap_1 = require(\"./mergeMap\");\nexports.flatMap = mergeMap_1.mergeMap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeMapTo = void 0;\nvar mergeMap_1 = require(\"./mergeMap\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction mergeMapTo(innerObservable, resultSelector, concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  if (isFunction_1.isFunction(resultSelector)) {\n    return mergeMap_1.mergeMap(function () {\n      return innerObservable;\n    }, resultSelector, concurrent);\n  }\n  if (typeof resultSelector === 'number') {\n    concurrent = resultSelector;\n  }\n  return mergeMap_1.mergeMap(function () {\n    return innerObservable;\n  }, concurrent);\n}\nexports.mergeMapTo = mergeMapTo;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeScan = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar mergeInternals_1 = require(\"./mergeInternals\");\nfunction mergeScan(accumulator, seed, concurrent) {\n  if (concurrent === void 0) {\n    concurrent = Infinity;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var state = seed;\n    return mergeInternals_1.mergeInternals(source, subscriber, function (value, index) {\n      return accumulator(state, value, index);\n    }, concurrent, function (value) {\n      state = value;\n    }, false, undefined, function () {\n      return state = null;\n    });\n  });\n}\nexports.mergeScan = mergeScan;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.merge = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar mergeAll_1 = require(\"./mergeAll\");\nvar args_1 = require(\"../util/args\");\nvar from_1 = require(\"../observable/from\");\nfunction merge() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(args);\n  var concurrent = args_1.popNumber(args, Infinity);\n  args = argsOrArgArray_1.argsOrArgArray(args);\n  return lift_1.operate(function (source, subscriber) {\n    mergeAll_1.mergeAll(concurrent)(from_1.from(__spreadArray([source], __read(args)), scheduler)).subscribe(subscriber);\n  });\n}\nexports.merge = merge;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeWith = void 0;\nvar merge_1 = require(\"./merge\");\nfunction mergeWith() {\n  var otherSources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    otherSources[_i] = arguments[_i];\n  }\n  return merge_1.merge.apply(void 0, __spreadArray([], __read(otherSources)));\n}\nexports.mergeWith = mergeWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.min = void 0;\nvar reduce_1 = require(\"./reduce\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction min(comparer) {\n  return reduce_1.reduce(isFunction_1.isFunction(comparer) ? function (x, y) {\n    return comparer(x, y) < 0 ? x : y;\n  } : function (x, y) {\n    return x < y ? x : y;\n  });\n}\nexports.min = min;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.multicast = void 0;\nvar ConnectableObservable_1 = require(\"../observable/ConnectableObservable\");\nvar isFunction_1 = require(\"../util/isFunction\");\nvar connect_1 = require(\"./connect\");\nfunction multicast(subjectOrSubjectFactory, selector) {\n  var subjectFactory = isFunction_1.isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : function () {\n    return subjectOrSubjectFactory;\n  };\n  if (isFunction_1.isFunction(selector)) {\n    return connect_1.connect(selector, {\n      connector: subjectFactory\n    });\n  }\n  return function (source) {\n    return new ConnectableObservable_1.ConnectableObservable(source, subjectFactory);\n  };\n}\nexports.multicast = multicast;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.onErrorResumeNext = exports.onErrorResumeNextWith = void 0;\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar onErrorResumeNext_1 = require(\"../observable/onErrorResumeNext\");\nfunction onErrorResumeNextWith() {\n  var sources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    sources[_i] = arguments[_i];\n  }\n  var nextSources = argsOrArgArray_1.argsOrArgArray(sources);\n  return function (source) {\n    return onErrorResumeNext_1.onErrorResumeNext.apply(void 0, __spreadArray([source], __read(nextSources)));\n  };\n}\nexports.onErrorResumeNextWith = onErrorResumeNextWith;\nexports.onErrorResumeNext = onErrorResumeNextWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.pairwise = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction pairwise() {\n  return lift_1.operate(function (source, subscriber) {\n    var prev;\n    var hasPrev = false;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var p = prev;\n      prev = value;\n      hasPrev && subscriber.next([p, value]);\n      hasPrev = true;\n    }));\n  });\n}\nexports.pairwise = pairwise;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.pluck = void 0;\nvar map_1 = require(\"./map\");\nfunction pluck() {\n  var properties = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    properties[_i] = arguments[_i];\n  }\n  var length = properties.length;\n  if (length === 0) {\n    throw new Error('list of properties cannot be empty.');\n  }\n  return map_1.map(function (x) {\n    var currentProp = x;\n    for (var i = 0; i < length; i++) {\n      var p = currentProp === null || currentProp === void 0 ? void 0 : currentProp[properties[i]];\n      if (typeof p !== 'undefined') {\n        currentProp = p;\n      } else {\n        return undefined;\n      }\n    }\n    return currentProp;\n  });\n}\nexports.pluck = pluck;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.publish = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar multicast_1 = require(\"./multicast\");\nvar connect_1 = require(\"./connect\");\nfunction publish(selector) {\n  return selector ? function (source) {\n    return connect_1.connect(selector)(source);\n  } : function (source) {\n    return multicast_1.multicast(new Subject_1.Subject())(source);\n  };\n}\nexports.publish = publish;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.publishBehavior = void 0;\nvar BehaviorSubject_1 = require(\"../BehaviorSubject\");\nvar ConnectableObservable_1 = require(\"../observable/ConnectableObservable\");\nfunction publishBehavior(initialValue) {\n  return function (source) {\n    var subject = new BehaviorSubject_1.BehaviorSubject(initialValue);\n    return new ConnectableObservable_1.ConnectableObservable(source, function () {\n      return subject;\n    });\n  };\n}\nexports.publishBehavior = publishBehavior;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.publishLast = void 0;\nvar AsyncSubject_1 = require(\"../AsyncSubject\");\nvar ConnectableObservable_1 = require(\"../observable/ConnectableObservable\");\nfunction publishLast() {\n  return function (source) {\n    var subject = new AsyncSubject_1.AsyncSubject();\n    return new ConnectableObservable_1.ConnectableObservable(source, function () {\n      return subject;\n    });\n  };\n}\nexports.publishLast = publishLast;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.publishReplay = void 0;\nvar ReplaySubject_1 = require(\"../ReplaySubject\");\nvar multicast_1 = require(\"./multicast\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction publishReplay(bufferSize, windowTime, selectorOrScheduler, timestampProvider) {\n  if (selectorOrScheduler && !isFunction_1.isFunction(selectorOrScheduler)) {\n    timestampProvider = selectorOrScheduler;\n  }\n  var selector = isFunction_1.isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined;\n  return function (source) {\n    return multicast_1.multicast(new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, timestampProvider), selector)(source);\n  };\n}\nexports.publishReplay = publishReplay;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.raceWith = void 0;\nvar race_1 = require(\"../observable/race\");\nvar lift_1 = require(\"../util/lift\");\nvar identity_1 = require(\"../util/identity\");\nfunction raceWith() {\n  var otherSources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    otherSources[_i] = arguments[_i];\n  }\n  return !otherSources.length ? identity_1.identity : lift_1.operate(function (source, subscriber) {\n    race_1.raceInit(__spreadArray([source], __read(otherSources)))(subscriber);\n  });\n}\nexports.raceWith = raceWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.repeat = void 0;\nvar empty_1 = require(\"../observable/empty\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar timer_1 = require(\"../observable/timer\");\nfunction repeat(countOrConfig) {\n  var _a;\n  var count = Infinity;\n  var delay;\n  if (countOrConfig != null) {\n    if (typeof countOrConfig === 'object') {\n      _a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay;\n    } else {\n      count = countOrConfig;\n    }\n  }\n  return count <= 0 ? function () {\n    return empty_1.EMPTY;\n  } : lift_1.operate(function (source, subscriber) {\n    var soFar = 0;\n    var sourceSub;\n    var resubscribe = function () {\n      sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe();\n      sourceSub = null;\n      if (delay != null) {\n        var notifier = typeof delay === 'number' ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(soFar));\n        var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n          notifierSubscriber_1.unsubscribe();\n          subscribeToSource();\n        });\n        notifier.subscribe(notifierSubscriber_1);\n      } else {\n        subscribeToSource();\n      }\n    };\n    var subscribeToSource = function () {\n      var syncUnsub = false;\n      sourceSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, function () {\n        if (++soFar < count) {\n          if (sourceSub) {\n            resubscribe();\n          } else {\n            syncUnsub = true;\n          }\n        } else {\n          subscriber.complete();\n        }\n      }));\n      if (syncUnsub) {\n        resubscribe();\n      }\n    };\n    subscribeToSource();\n  });\n}\nexports.repeat = repeat;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.repeatWhen = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction repeatWhen(notifier) {\n  return lift_1.operate(function (source, subscriber) {\n    var innerSub;\n    var syncResub = false;\n    var completions$;\n    var isNotifierComplete = false;\n    var isMainComplete = false;\n    var checkComplete = function () {\n      return isMainComplete && isNotifierComplete && (subscriber.complete(), true);\n    };\n    var getCompletionSubject = function () {\n      if (!completions$) {\n        completions$ = new Subject_1.Subject();\n        innerFrom_1.innerFrom(notifier(completions$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n          if (innerSub) {\n            subscribeForRepeatWhen();\n          } else {\n            syncResub = true;\n          }\n        }, function () {\n          isNotifierComplete = true;\n          checkComplete();\n        }));\n      }\n      return completions$;\n    };\n    var subscribeForRepeatWhen = function () {\n      isMainComplete = false;\n      innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, function () {\n        isMainComplete = true;\n        !checkComplete() && getCompletionSubject().next();\n      }));\n      if (syncResub) {\n        innerSub.unsubscribe();\n        innerSub = null;\n        syncResub = false;\n        subscribeForRepeatWhen();\n      }\n    };\n    subscribeForRepeatWhen();\n  });\n}\nexports.repeatWhen = repeatWhen;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.retry = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar identity_1 = require(\"../util/identity\");\nvar timer_1 = require(\"../observable/timer\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction retry(configOrCount) {\n  if (configOrCount === void 0) {\n    configOrCount = Infinity;\n  }\n  var config;\n  if (configOrCount && typeof configOrCount === 'object') {\n    config = configOrCount;\n  } else {\n    config = {\n      count: configOrCount\n    };\n  }\n  var _a = config.count,\n    count = _a === void 0 ? Infinity : _a,\n    delay = config.delay,\n    _b = config.resetOnSuccess,\n    resetOnSuccess = _b === void 0 ? false : _b;\n  return count <= 0 ? identity_1.identity : lift_1.operate(function (source, subscriber) {\n    var soFar = 0;\n    var innerSub;\n    var subscribeForRetry = function () {\n      var syncUnsub = false;\n      innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n        if (resetOnSuccess) {\n          soFar = 0;\n        }\n        subscriber.next(value);\n      }, undefined, function (err) {\n        if (soFar++ < count) {\n          var resub_1 = function () {\n            if (innerSub) {\n              innerSub.unsubscribe();\n              innerSub = null;\n              subscribeForRetry();\n            } else {\n              syncUnsub = true;\n            }\n          };\n          if (delay != null) {\n            var notifier = typeof delay === 'number' ? timer_1.timer(delay) : innerFrom_1.innerFrom(delay(err, soFar));\n            var notifierSubscriber_1 = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n              notifierSubscriber_1.unsubscribe();\n              resub_1();\n            }, function () {\n              subscriber.complete();\n            });\n            notifier.subscribe(notifierSubscriber_1);\n          } else {\n            resub_1();\n          }\n        } else {\n          subscriber.error(err);\n        }\n      }));\n      if (syncUnsub) {\n        innerSub.unsubscribe();\n        innerSub = null;\n        subscribeForRetry();\n      }\n    };\n    subscribeForRetry();\n  });\n}\nexports.retry = retry;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.retryWhen = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction retryWhen(notifier) {\n  return lift_1.operate(function (source, subscriber) {\n    var innerSub;\n    var syncResub = false;\n    var errors$;\n    var subscribeForRetryWhen = function () {\n      innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n        if (!errors$) {\n          errors$ = new Subject_1.Subject();\n          innerFrom_1.innerFrom(notifier(errors$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n            return innerSub ? subscribeForRetryWhen() : syncResub = true;\n          }));\n        }\n        if (errors$) {\n          errors$.next(err);\n        }\n      }));\n      if (syncResub) {\n        innerSub.unsubscribe();\n        innerSub = null;\n        syncResub = false;\n        subscribeForRetryWhen();\n      }\n    };\n    subscribeForRetryWhen();\n  });\n}\nexports.retryWhen = retryWhen;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sample = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar lift_1 = require(\"../util/lift\");\nvar noop_1 = require(\"../util/noop\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction sample(notifier) {\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    var lastValue = null;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      lastValue = value;\n    }));\n    innerFrom_1.innerFrom(notifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      if (hasValue) {\n        hasValue = false;\n        var value = lastValue;\n        lastValue = null;\n        subscriber.next(value);\n      }\n    }, noop_1.noop));\n  });\n}\nexports.sample = sample;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sampleTime = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar sample_1 = require(\"./sample\");\nvar interval_1 = require(\"../observable/interval\");\nfunction sampleTime(period, scheduler) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  return sample_1.sample(interval_1.interval(period, scheduler));\n}\nexports.sampleTime = sampleTime;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.scan = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar scanInternals_1 = require(\"./scanInternals\");\nfunction scan(accumulator, seed) {\n  return lift_1.operate(scanInternals_1.scanInternals(accumulator, seed, arguments.length >= 2, true));\n}\nexports.scan = scan;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sequenceEqual = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction sequenceEqual(compareTo, comparator) {\n  if (comparator === void 0) {\n    comparator = function (a, b) {\n      return a === b;\n    };\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var aState = createState();\n    var bState = createState();\n    var emit = function (isEqual) {\n      subscriber.next(isEqual);\n      subscriber.complete();\n    };\n    var createSubscriber = function (selfState, otherState) {\n      var sequenceEqualSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (a) {\n        var buffer = otherState.buffer,\n          complete = otherState.complete;\n        if (buffer.length === 0) {\n          complete ? emit(false) : selfState.buffer.push(a);\n        } else {\n          !comparator(a, buffer.shift()) && emit(false);\n        }\n      }, function () {\n        selfState.complete = true;\n        var complete = otherState.complete,\n          buffer = otherState.buffer;\n        complete && emit(buffer.length === 0);\n        sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe();\n      });\n      return sequenceEqualSubscriber;\n    };\n    source.subscribe(createSubscriber(aState, bState));\n    innerFrom_1.innerFrom(compareTo).subscribe(createSubscriber(bState, aState));\n  });\n}\nexports.sequenceEqual = sequenceEqual;\nfunction createState() {\n  return {\n    buffer: [],\n    complete: false\n  };\n}\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.share = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar Subject_1 = require(\"../Subject\");\nvar Subscriber_1 = require(\"../Subscriber\");\nvar lift_1 = require(\"../util/lift\");\nfunction share(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var _a = options.connector,\n    connector = _a === void 0 ? function () {\n      return new Subject_1.Subject();\n    } : _a,\n    _b = options.resetOnError,\n    resetOnError = _b === void 0 ? true : _b,\n    _c = options.resetOnComplete,\n    resetOnComplete = _c === void 0 ? true : _c,\n    _d = options.resetOnRefCountZero,\n    resetOnRefCountZero = _d === void 0 ? true : _d;\n  return function (wrapperSource) {\n    var connection;\n    var resetConnection;\n    var subject;\n    var refCount = 0;\n    var hasCompleted = false;\n    var hasErrored = false;\n    var cancelReset = function () {\n      resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n      resetConnection = undefined;\n    };\n    var reset = function () {\n      cancelReset();\n      connection = subject = undefined;\n      hasCompleted = hasErrored = false;\n    };\n    var resetAndUnsubscribe = function () {\n      var conn = connection;\n      reset();\n      conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n    };\n    return lift_1.operate(function (source, subscriber) {\n      refCount++;\n      if (!hasErrored && !hasCompleted) {\n        cancelReset();\n      }\n      var dest = subject = subject !== null && subject !== void 0 ? subject : connector();\n      subscriber.add(function () {\n        refCount--;\n        if (refCount === 0 && !hasErrored && !hasCompleted) {\n          resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n        }\n      });\n      dest.subscribe(subscriber);\n      if (!connection && refCount > 0) {\n        connection = new Subscriber_1.SafeSubscriber({\n          next: function (value) {\n            return dest.next(value);\n          },\n          error: function (err) {\n            hasErrored = true;\n            cancelReset();\n            resetConnection = handleReset(reset, resetOnError, err);\n            dest.error(err);\n          },\n          complete: function () {\n            hasCompleted = true;\n            cancelReset();\n            resetConnection = handleReset(reset, resetOnComplete);\n            dest.complete();\n          }\n        });\n        innerFrom_1.innerFrom(source).subscribe(connection);\n      }\n    })(wrapperSource);\n  };\n}\nexports.share = share;\nfunction handleReset(reset, on) {\n  var args = [];\n  for (var _i = 2; _i < arguments.length; _i++) {\n    args[_i - 2] = arguments[_i];\n  }\n  if (on === true) {\n    reset();\n    return;\n  }\n  if (on === false) {\n    return;\n  }\n  var onSubscriber = new Subscriber_1.SafeSubscriber({\n    next: function () {\n      onSubscriber.unsubscribe();\n      reset();\n    }\n  });\n  return innerFrom_1.innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.shareReplay = void 0;\nvar ReplaySubject_1 = require(\"../ReplaySubject\");\nvar share_1 = require(\"./share\");\nfunction shareReplay(configOrBufferSize, windowTime, scheduler) {\n  var _a, _b, _c;\n  var bufferSize;\n  var refCount = false;\n  if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n    _a = configOrBufferSize.bufferSize, bufferSize = _a === void 0 ? Infinity : _a, _b = configOrBufferSize.windowTime, windowTime = _b === void 0 ? Infinity : _b, _c = configOrBufferSize.refCount, refCount = _c === void 0 ? false : _c, scheduler = configOrBufferSize.scheduler;\n  } else {\n    bufferSize = configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity;\n  }\n  return share_1.share({\n    connector: function () {\n      return new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler);\n    },\n    resetOnError: true,\n    resetOnComplete: false,\n    resetOnRefCountZero: refCount\n  });\n}\nexports.shareReplay = shareReplay;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.single = void 0;\nvar EmptyError_1 = require(\"../util/EmptyError\");\nvar SequenceError_1 = require(\"../util/SequenceError\");\nvar NotFoundError_1 = require(\"../util/NotFoundError\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction single(predicate) {\n  return lift_1.operate(function (source, subscriber) {\n    var hasValue = false;\n    var singleValue;\n    var seenValue = false;\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      seenValue = true;\n      if (!predicate || predicate(value, index++, source)) {\n        hasValue && subscriber.error(new SequenceError_1.SequenceError('Too many matching values'));\n        hasValue = true;\n        singleValue = value;\n      }\n    }, function () {\n      if (hasValue) {\n        subscriber.next(singleValue);\n        subscriber.complete();\n      } else {\n        subscriber.error(seenValue ? new NotFoundError_1.NotFoundError('No matching values') : new EmptyError_1.EmptyError());\n      }\n    }));\n  });\n}\nexports.single = single;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.skip = void 0;\nvar filter_1 = require(\"./filter\");\nfunction skip(count) {\n  return filter_1.filter(function (_, index) {\n    return count <= index;\n  });\n}\nexports.skip = skip;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.skipLast = void 0;\nvar identity_1 = require(\"../util/identity\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction skipLast(skipCount) {\n  return skipCount <= 0 ? identity_1.identity : lift_1.operate(function (source, subscriber) {\n    var ring = new Array(skipCount);\n    var seen = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var valueIndex = seen++;\n      if (valueIndex < skipCount) {\n        ring[valueIndex] = value;\n      } else {\n        var index = valueIndex % skipCount;\n        var oldValue = ring[index];\n        ring[index] = value;\n        subscriber.next(oldValue);\n      }\n    }));\n    return function () {\n      ring = null;\n    };\n  });\n}\nexports.skipLast = skipLast;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.skipUntil = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar noop_1 = require(\"../util/noop\");\nfunction skipUntil(notifier) {\n  return lift_1.operate(function (source, subscriber) {\n    var taking = false;\n    var skipSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      skipSubscriber === null || skipSubscriber === void 0 ? void 0 : skipSubscriber.unsubscribe();\n      taking = true;\n    }, noop_1.noop);\n    innerFrom_1.innerFrom(notifier).subscribe(skipSubscriber);\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return taking && subscriber.next(value);\n    }));\n  });\n}\nexports.skipUntil = skipUntil;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.skipWhile = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction skipWhile(predicate) {\n  return lift_1.operate(function (source, subscriber) {\n    var taking = false;\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return (taking || (taking = !predicate(value, index++))) && subscriber.next(value);\n    }));\n  });\n}\nexports.skipWhile = skipWhile;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.startWith = void 0;\nvar concat_1 = require(\"../observable/concat\");\nvar args_1 = require(\"../util/args\");\nvar lift_1 = require(\"../util/lift\");\nfunction startWith() {\n  var values = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    values[_i] = arguments[_i];\n  }\n  var scheduler = args_1.popScheduler(values);\n  return lift_1.operate(function (source, subscriber) {\n    (scheduler ? concat_1.concat(values, source, scheduler) : concat_1.concat(values, source)).subscribe(subscriber);\n  });\n}\nexports.startWith = startWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.switchMap = void 0;\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction switchMap(project, resultSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var innerSubscriber = null;\n    var index = 0;\n    var isComplete = false;\n    var checkComplete = function () {\n      return isComplete && !innerSubscriber && subscriber.complete();\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n      var innerIndex = 0;\n      var outerIndex = index++;\n      innerFrom_1.innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (innerValue) {\n        return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);\n      }, function () {\n        innerSubscriber = null;\n        checkComplete();\n      }));\n    }, function () {\n      isComplete = true;\n      checkComplete();\n    }));\n  });\n}\nexports.switchMap = switchMap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.switchAll = void 0;\nvar switchMap_1 = require(\"./switchMap\");\nvar identity_1 = require(\"../util/identity\");\nfunction switchAll() {\n  return switchMap_1.switchMap(identity_1.identity);\n}\nexports.switchAll = switchAll;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.switchMapTo = void 0;\nvar switchMap_1 = require(\"./switchMap\");\nvar isFunction_1 = require(\"../util/isFunction\");\nfunction switchMapTo(innerObservable, resultSelector) {\n  return isFunction_1.isFunction(resultSelector) ? switchMap_1.switchMap(function () {\n    return innerObservable;\n  }, resultSelector) : switchMap_1.switchMap(function () {\n    return innerObservable;\n  });\n}\nexports.switchMapTo = switchMapTo;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.switchScan = void 0;\nvar switchMap_1 = require(\"./switchMap\");\nvar lift_1 = require(\"../util/lift\");\nfunction switchScan(accumulator, seed) {\n  return lift_1.operate(function (source, subscriber) {\n    var state = seed;\n    switchMap_1.switchMap(function (value, index) {\n      return accumulator(state, value, index);\n    }, function (_, innerValue) {\n      return state = innerValue, innerValue;\n    })(source).subscribe(subscriber);\n    return function () {\n      state = null;\n    };\n  });\n}\nexports.switchScan = switchScan;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.takeUntil = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar noop_1 = require(\"../util/noop\");\nfunction takeUntil(notifier) {\n  return lift_1.operate(function (source, subscriber) {\n    innerFrom_1.innerFrom(notifier).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      return subscriber.complete();\n    }, noop_1.noop));\n    !subscriber.closed && source.subscribe(subscriber);\n  });\n}\nexports.takeUntil = takeUntil;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.takeWhile = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction takeWhile(predicate, inclusive) {\n  if (inclusive === void 0) {\n    inclusive = false;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var index = 0;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var result = predicate(value, index++);\n      (result || inclusive) && subscriber.next(value);\n      !result && subscriber.complete();\n    }));\n  });\n}\nexports.takeWhile = takeWhile;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.tap = void 0;\nvar isFunction_1 = require(\"../util/isFunction\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar identity_1 = require(\"../util/identity\");\nfunction tap(observerOrNext, error, complete) {\n  var tapObserver = isFunction_1.isFunction(observerOrNext) || error || complete ? {\n    next: observerOrNext,\n    error: error,\n    complete: complete\n  } : observerOrNext;\n  return tapObserver ? lift_1.operate(function (source, subscriber) {\n    var _a;\n    (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n    var isUnsub = true;\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var _a;\n      (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n      subscriber.next(value);\n    }, function () {\n      var _a;\n      isUnsub = false;\n      (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n      subscriber.complete();\n    }, function (err) {\n      var _a;\n      isUnsub = false;\n      (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n      subscriber.error(err);\n    }, function () {\n      var _a, _b;\n      if (isUnsub) {\n        (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n      }\n      (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n    }));\n  }) : identity_1.identity;\n}\nexports.tap = tap;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.throttle = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction throttle(durationSelector, config) {\n  return lift_1.operate(function (source, subscriber) {\n    var _a = config !== null && config !== void 0 ? config : {},\n      _b = _a.leading,\n      leading = _b === void 0 ? true : _b,\n      _c = _a.trailing,\n      trailing = _c === void 0 ? false : _c;\n    var hasValue = false;\n    var sendValue = null;\n    var throttled = null;\n    var isComplete = false;\n    var endThrottling = function () {\n      throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe();\n      throttled = null;\n      if (trailing) {\n        send();\n        isComplete && subscriber.complete();\n      }\n    };\n    var cleanupThrottling = function () {\n      throttled = null;\n      isComplete && subscriber.complete();\n    };\n    var startThrottle = function (value) {\n      return throttled = innerFrom_1.innerFrom(durationSelector(value)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling));\n    };\n    var send = function () {\n      if (hasValue) {\n        hasValue = false;\n        var value = sendValue;\n        sendValue = null;\n        subscriber.next(value);\n        !isComplete && startThrottle(value);\n      }\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      hasValue = true;\n      sendValue = value;\n      !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n    }, function () {\n      isComplete = true;\n      !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n    }));\n  });\n}\nexports.throttle = throttle;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.throttleTime = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar throttle_1 = require(\"./throttle\");\nvar timer_1 = require(\"../observable/timer\");\nfunction throttleTime(duration, scheduler, config) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  var duration$ = timer_1.timer(duration, scheduler);\n  return throttle_1.throttle(function () {\n    return duration$;\n  }, config);\n}\nexports.throttleTime = throttleTime;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TimeInterval = exports.timeInterval = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction timeInterval(scheduler) {\n  if (scheduler === void 0) {\n    scheduler = async_1.asyncScheduler;\n  }\n  return lift_1.operate(function (source, subscriber) {\n    var last = scheduler.now();\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var now = scheduler.now();\n      var interval = now - last;\n      last = now;\n      subscriber.next(new TimeInterval(value, interval));\n    }));\n  });\n}\nexports.timeInterval = timeInterval;\nvar TimeInterval = function () {\n  function TimeInterval(value, interval) {\n    this.value = value;\n    this.interval = interval;\n  }\n  return TimeInterval;\n}();\nexports.TimeInterval = TimeInterval;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.timeoutWith = void 0;\nvar async_1 = require(\"../scheduler/async\");\nvar isDate_1 = require(\"../util/isDate\");\nvar timeout_1 = require(\"./timeout\");\nfunction timeoutWith(due, withObservable, scheduler) {\n  var first;\n  var each;\n  var _with;\n  scheduler = scheduler !== null && scheduler !== void 0 ? scheduler : async_1.async;\n  if (isDate_1.isValidDate(due)) {\n    first = due;\n  } else if (typeof due === 'number') {\n    each = due;\n  }\n  if (withObservable) {\n    _with = function () {\n      return withObservable;\n    };\n  } else {\n    throw new TypeError('No observable provided to switch to');\n  }\n  if (first == null && each == null) {\n    throw new TypeError('No timeout provided.');\n  }\n  return timeout_1.timeout({\n    first: first,\n    each: each,\n    scheduler: scheduler,\n    with: _with\n  });\n}\nexports.timeoutWith = timeoutWith;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.timestamp = void 0;\nvar dateTimestampProvider_1 = require(\"../scheduler/dateTimestampProvider\");\nvar map_1 = require(\"./map\");\nfunction timestamp(timestampProvider) {\n  if (timestampProvider === void 0) {\n    timestampProvider = dateTimestampProvider_1.dateTimestampProvider;\n  }\n  return map_1.map(function (value) {\n    return {\n      value: value,\n      timestamp: timestampProvider.now()\n    };\n  });\n}\nexports.timestamp = timestamp;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.window = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction window(windowBoundaries) {\n  return lift_1.operate(function (source, subscriber) {\n    var windowSubject = new Subject_1.Subject();\n    subscriber.next(windowSubject.asObservable());\n    var errorHandler = function (err) {\n      windowSubject.error(err);\n      subscriber.error(err);\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.next(value);\n    }, function () {\n      windowSubject.complete();\n      subscriber.complete();\n    }, errorHandler));\n    innerFrom_1.innerFrom(windowBoundaries).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {\n      windowSubject.complete();\n      subscriber.next(windowSubject = new Subject_1.Subject());\n    }, noop_1.noop, errorHandler));\n    return function () {\n      windowSubject === null || windowSubject === void 0 ? void 0 : windowSubject.unsubscribe();\n      windowSubject = null;\n    };\n  });\n}\nexports.window = window;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.windowCount = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nfunction windowCount(windowSize, startWindowEvery) {\n  if (startWindowEvery === void 0) {\n    startWindowEvery = 0;\n  }\n  var startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;\n  return lift_1.operate(function (source, subscriber) {\n    var windows = [new Subject_1.Subject()];\n    var starts = [];\n    var count = 0;\n    subscriber.next(windows[0].asObservable());\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var e_1, _a;\n      try {\n        for (var windows_1 = __values(windows), windows_1_1 = windows_1.next(); !windows_1_1.done; windows_1_1 = windows_1.next()) {\n          var window_1 = windows_1_1.value;\n          window_1.next(value);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (windows_1_1 && !windows_1_1.done && (_a = windows_1.return)) _a.call(windows_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      var c = count - windowSize + 1;\n      if (c >= 0 && c % startEvery === 0) {\n        windows.shift().complete();\n      }\n      if (++count % startEvery === 0) {\n        var window_2 = new Subject_1.Subject();\n        windows.push(window_2);\n        subscriber.next(window_2.asObservable());\n      }\n    }, function () {\n      while (windows.length > 0) {\n        windows.shift().complete();\n      }\n      subscriber.complete();\n    }, function (err) {\n      while (windows.length > 0) {\n        windows.shift().error(err);\n      }\n      subscriber.error(err);\n    }, function () {\n      starts = null;\n      windows = null;\n    }));\n  });\n}\nexports.windowCount = windowCount;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.windowTime = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar async_1 = require(\"../scheduler/async\");\nvar Subscription_1 = require(\"../Subscription\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nvar args_1 = require(\"../util/args\");\nvar executeSchedule_1 = require(\"../util/executeSchedule\");\nfunction windowTime(windowTimeSpan) {\n  var _a, _b;\n  var otherArgs = [];\n  for (var _i = 1; _i < arguments.length; _i++) {\n    otherArgs[_i - 1] = arguments[_i];\n  }\n  var scheduler = (_a = args_1.popScheduler(otherArgs)) !== null && _a !== void 0 ? _a : async_1.asyncScheduler;\n  var windowCreationInterval = (_b = otherArgs[0]) !== null && _b !== void 0 ? _b : null;\n  var maxWindowSize = otherArgs[1] || Infinity;\n  return lift_1.operate(function (source, subscriber) {\n    var windowRecords = [];\n    var restartOnClose = false;\n    var closeWindow = function (record) {\n      var window = record.window,\n        subs = record.subs;\n      window.complete();\n      subs.unsubscribe();\n      arrRemove_1.arrRemove(windowRecords, record);\n      restartOnClose && startWindow();\n    };\n    var startWindow = function () {\n      if (windowRecords) {\n        var subs = new Subscription_1.Subscription();\n        subscriber.add(subs);\n        var window_1 = new Subject_1.Subject();\n        var record_1 = {\n          window: window_1,\n          subs: subs,\n          seen: 0\n        };\n        windowRecords.push(record_1);\n        subscriber.next(window_1.asObservable());\n        executeSchedule_1.executeSchedule(subs, scheduler, function () {\n          return closeWindow(record_1);\n        }, windowTimeSpan);\n      }\n    };\n    if (windowCreationInterval !== null && windowCreationInterval >= 0) {\n      executeSchedule_1.executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true);\n    } else {\n      restartOnClose = true;\n    }\n    startWindow();\n    var loop = function (cb) {\n      return windowRecords.slice().forEach(cb);\n    };\n    var terminate = function (cb) {\n      loop(function (_a) {\n        var window = _a.window;\n        return cb(window);\n      });\n      cb(subscriber);\n      subscriber.unsubscribe();\n    };\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      loop(function (record) {\n        record.window.next(value);\n        maxWindowSize <= ++record.seen && closeWindow(record);\n      });\n    }, function () {\n      return terminate(function (consumer) {\n        return consumer.complete();\n      });\n    }, function (err) {\n      return terminate(function (consumer) {\n        return consumer.error(err);\n      });\n    }));\n    return function () {\n      windowRecords = null;\n    };\n  });\n}\nexports.windowTime = windowTime;\n", "\"use strict\";\n\nvar __values = this && this.__values || function (o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n    m = s && o[s],\n    i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function () {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.windowToggle = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar Subscription_1 = require(\"../Subscription\");\nvar lift_1 = require(\"../util/lift\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar noop_1 = require(\"../util/noop\");\nvar arrRemove_1 = require(\"../util/arrRemove\");\nfunction windowToggle(openings, closingSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var windows = [];\n    var handleError = function (err) {\n      while (0 < windows.length) {\n        windows.shift().error(err);\n      }\n      subscriber.error(err);\n    };\n    innerFrom_1.innerFrom(openings).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (openValue) {\n      var window = new Subject_1.Subject();\n      windows.push(window);\n      var closingSubscription = new Subscription_1.Subscription();\n      var closeWindow = function () {\n        arrRemove_1.arrRemove(windows, window);\n        window.complete();\n        closingSubscription.unsubscribe();\n      };\n      var closingNotifier;\n      try {\n        closingNotifier = innerFrom_1.innerFrom(closingSelector(openValue));\n      } catch (err) {\n        handleError(err);\n        return;\n      }\n      subscriber.next(window.asObservable());\n      closingSubscription.add(closingNotifier.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, closeWindow, noop_1.noop, handleError)));\n    }, noop_1.noop));\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      var e_1, _a;\n      var windowsCopy = windows.slice();\n      try {\n        for (var windowsCopy_1 = __values(windowsCopy), windowsCopy_1_1 = windowsCopy_1.next(); !windowsCopy_1_1.done; windowsCopy_1_1 = windowsCopy_1.next()) {\n          var window_1 = windowsCopy_1_1.value;\n          window_1.next(value);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (windowsCopy_1_1 && !windowsCopy_1_1.done && (_a = windowsCopy_1.return)) _a.call(windowsCopy_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    }, function () {\n      while (0 < windows.length) {\n        windows.shift().complete();\n      }\n      subscriber.complete();\n    }, handleError, function () {\n      while (0 < windows.length) {\n        windows.shift().unsubscribe();\n      }\n    }));\n  });\n}\nexports.windowToggle = windowToggle;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.windowWhen = void 0;\nvar Subject_1 = require(\"../Subject\");\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nfunction windowWhen(closingSelector) {\n  return lift_1.operate(function (source, subscriber) {\n    var window;\n    var closingSubscriber;\n    var handleError = function (err) {\n      window.error(err);\n      subscriber.error(err);\n    };\n    var openWindow = function () {\n      closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();\n      window === null || window === void 0 ? void 0 : window.complete();\n      window = new Subject_1.Subject();\n      subscriber.next(window.asObservable());\n      var closingNotifier;\n      try {\n        closingNotifier = innerFrom_1.innerFrom(closingSelector());\n      } catch (err) {\n        handleError(err);\n        return;\n      }\n      closingNotifier.subscribe(closingSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, openWindow, openWindow, handleError));\n    };\n    openWindow();\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      return window.next(value);\n    }, function () {\n      window.complete();\n      subscriber.complete();\n    }, handleError, function () {\n      closingSubscriber === null || closingSubscriber === void 0 ? void 0 : closingSubscriber.unsubscribe();\n      window = null;\n    }));\n  });\n}\nexports.windowWhen = windowWhen;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.withLatestFrom = void 0;\nvar lift_1 = require(\"../util/lift\");\nvar OperatorSubscriber_1 = require(\"./OperatorSubscriber\");\nvar innerFrom_1 = require(\"../observable/innerFrom\");\nvar identity_1 = require(\"../util/identity\");\nvar noop_1 = require(\"../util/noop\");\nvar args_1 = require(\"../util/args\");\nfunction withLatestFrom() {\n  var inputs = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    inputs[_i] = arguments[_i];\n  }\n  var project = args_1.popResultSelector(inputs);\n  return lift_1.operate(function (source, subscriber) {\n    var len = inputs.length;\n    var otherValues = new Array(len);\n    var hasValue = inputs.map(function () {\n      return false;\n    });\n    var ready = false;\n    var _loop_1 = function (i) {\n      innerFrom_1.innerFrom(inputs[i]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n        otherValues[i] = value;\n        if (!ready && !hasValue[i]) {\n          hasValue[i] = true;\n          (ready = hasValue.every(identity_1.identity)) && (hasValue = null);\n        }\n      }, noop_1.noop));\n    };\n    for (var i = 0; i < len; i++) {\n      _loop_1(i);\n    }\n    source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {\n      if (ready) {\n        var values = __spreadArray([value], __read(otherValues));\n        subscriber.next(project ? project.apply(void 0, __spreadArray([], __read(values))) : values);\n      }\n    }));\n  });\n}\nexports.withLatestFrom = withLatestFrom;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.zipAll = void 0;\nvar zip_1 = require(\"../observable/zip\");\nvar joinAllInternals_1 = require(\"./joinAllInternals\");\nfunction zipAll(project) {\n  return joinAllInternals_1.joinAllInternals(zip_1.zip, project);\n}\nexports.zipAll = zipAll;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.zip = void 0;\nvar zip_1 = require(\"../observable/zip\");\nvar lift_1 = require(\"../util/lift\");\nfunction zip() {\n  var sources = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    sources[_i] = arguments[_i];\n  }\n  return lift_1.operate(function (source, subscriber) {\n    zip_1.zip.apply(void 0, __spreadArray([source], __read(sources))).subscribe(subscriber);\n  });\n}\nexports.zip = zip;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.zipWith = void 0;\nvar zip_1 = require(\"./zip\");\nfunction zipWith() {\n  var otherInputs = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    otherInputs[_i] = arguments[_i];\n  }\n  return zip_1.zip.apply(void 0, __spreadArray([], __read(otherInputs)));\n}\nexports.zipWith = zipWith;\n", "\"use strict\";\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  Object.defineProperty(o, k2, {\n    enumerable: true,\n    get: function () {\n      return m[k];\n    }\n  });\n} : function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.interval = exports.iif = exports.generate = exports.fromEventPattern = exports.fromEvent = exports.from = exports.forkJoin = exports.empty = exports.defer = exports.connectable = exports.concat = exports.combineLatest = exports.bindNodeCallback = exports.bindCallback = exports.UnsubscriptionError = exports.TimeoutError = exports.SequenceError = exports.ObjectUnsubscribedError = exports.NotFoundError = exports.EmptyError = exports.ArgumentOutOfRangeError = exports.firstValueFrom = exports.lastValueFrom = exports.isObservable = exports.identity = exports.noop = exports.pipe = exports.NotificationKind = exports.Notification = exports.Subscriber = exports.Subscription = exports.Scheduler = exports.VirtualAction = exports.VirtualTimeScheduler = exports.animationFrameScheduler = exports.animationFrame = exports.queueScheduler = exports.queue = exports.asyncScheduler = exports.async = exports.asapScheduler = exports.asap = exports.AsyncSubject = exports.ReplaySubject = exports.BehaviorSubject = exports.Subject = exports.animationFrames = exports.observable = exports.ConnectableObservable = exports.Observable = void 0;\nexports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.combineLatestWith = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = exports.config = exports.NEVER = exports.EMPTY = exports.scheduled = exports.zip = exports.using = exports.timer = exports.throwError = exports.range = exports.race = exports.partition = exports.pairs = exports.onErrorResumeNext = exports.of = exports.never = exports.merge = void 0;\nexports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.pairwise = exports.onErrorResumeNextWith = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = exports.mergeAll = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = void 0;\nexports.zipWith = exports.zipAll = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = exports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = void 0;\nvar Observable_1 = require(\"./internal/Observable\");\nObject.defineProperty(exports, \"Observable\", {\n  enumerable: true,\n  get: function () {\n    return Observable_1.Observable;\n  }\n});\nvar ConnectableObservable_1 = require(\"./internal/observable/ConnectableObservable\");\nObject.defineProperty(exports, \"ConnectableObservable\", {\n  enumerable: true,\n  get: function () {\n    return ConnectableObservable_1.ConnectableObservable;\n  }\n});\nvar observable_1 = require(\"./internal/symbol/observable\");\nObject.defineProperty(exports, \"observable\", {\n  enumerable: true,\n  get: function () {\n    return observable_1.observable;\n  }\n});\nvar animationFrames_1 = require(\"./internal/observable/dom/animationFrames\");\nObject.defineProperty(exports, \"animationFrames\", {\n  enumerable: true,\n  get: function () {\n    return animationFrames_1.animationFrames;\n  }\n});\nvar Subject_1 = require(\"./internal/Subject\");\nObject.defineProperty(exports, \"Subject\", {\n  enumerable: true,\n  get: function () {\n    return Subject_1.Subject;\n  }\n});\nvar BehaviorSubject_1 = require(\"./internal/BehaviorSubject\");\nObject.defineProperty(exports, \"BehaviorSubject\", {\n  enumerable: true,\n  get: function () {\n    return BehaviorSubject_1.BehaviorSubject;\n  }\n});\nvar ReplaySubject_1 = require(\"./internal/ReplaySubject\");\nObject.defineProperty(exports, \"ReplaySubject\", {\n  enumerable: true,\n  get: function () {\n    return ReplaySubject_1.ReplaySubject;\n  }\n});\nvar AsyncSubject_1 = require(\"./internal/AsyncSubject\");\nObject.defineProperty(exports, \"AsyncSubject\", {\n  enumerable: true,\n  get: function () {\n    return AsyncSubject_1.AsyncSubject;\n  }\n});\nvar asap_1 = require(\"./internal/scheduler/asap\");\nObject.defineProperty(exports, \"asap\", {\n  enumerable: true,\n  get: function () {\n    return asap_1.asap;\n  }\n});\nObject.defineProperty(exports, \"asapScheduler\", {\n  enumerable: true,\n  get: function () {\n    return asap_1.asapScheduler;\n  }\n});\nvar async_1 = require(\"./internal/scheduler/async\");\nObject.defineProperty(exports, \"async\", {\n  enumerable: true,\n  get: function () {\n    return async_1.async;\n  }\n});\nObject.defineProperty(exports, \"asyncScheduler\", {\n  enumerable: true,\n  get: function () {\n    return async_1.asyncScheduler;\n  }\n});\nvar queue_1 = require(\"./internal/scheduler/queue\");\nObject.defineProperty(exports, \"queue\", {\n  enumerable: true,\n  get: function () {\n    return queue_1.queue;\n  }\n});\nObject.defineProperty(exports, \"queueScheduler\", {\n  enumerable: true,\n  get: function () {\n    return queue_1.queueScheduler;\n  }\n});\nvar animationFrame_1 = require(\"./internal/scheduler/animationFrame\");\nObject.defineProperty(exports, \"animationFrame\", {\n  enumerable: true,\n  get: function () {\n    return animationFrame_1.animationFrame;\n  }\n});\nObject.defineProperty(exports, \"animationFrameScheduler\", {\n  enumerable: true,\n  get: function () {\n    return animationFrame_1.animationFrameScheduler;\n  }\n});\nvar VirtualTimeScheduler_1 = require(\"./internal/scheduler/VirtualTimeScheduler\");\nObject.defineProperty(exports, \"VirtualTimeScheduler\", {\n  enumerable: true,\n  get: function () {\n    return VirtualTimeScheduler_1.VirtualTimeScheduler;\n  }\n});\nObject.defineProperty(exports, \"VirtualAction\", {\n  enumerable: true,\n  get: function () {\n    return VirtualTimeScheduler_1.VirtualAction;\n  }\n});\nvar Scheduler_1 = require(\"./internal/Scheduler\");\nObject.defineProperty(exports, \"Scheduler\", {\n  enumerable: true,\n  get: function () {\n    return Scheduler_1.Scheduler;\n  }\n});\nvar Subscription_1 = require(\"./internal/Subscription\");\nObject.defineProperty(exports, \"Subscription\", {\n  enumerable: true,\n  get: function () {\n    return Subscription_1.Subscription;\n  }\n});\nvar Subscriber_1 = require(\"./internal/Subscriber\");\nObject.defineProperty(exports, \"Subscriber\", {\n  enumerable: true,\n  get: function () {\n    return Subscriber_1.Subscriber;\n  }\n});\nvar Notification_1 = require(\"./internal/Notification\");\nObject.defineProperty(exports, \"Notification\", {\n  enumerable: true,\n  get: function () {\n    return Notification_1.Notification;\n  }\n});\nObject.defineProperty(exports, \"NotificationKind\", {\n  enumerable: true,\n  get: function () {\n    return Notification_1.NotificationKind;\n  }\n});\nvar pipe_1 = require(\"./internal/util/pipe\");\nObject.defineProperty(exports, \"pipe\", {\n  enumerable: true,\n  get: function () {\n    return pipe_1.pipe;\n  }\n});\nvar noop_1 = require(\"./internal/util/noop\");\nObject.defineProperty(exports, \"noop\", {\n  enumerable: true,\n  get: function () {\n    return noop_1.noop;\n  }\n});\nvar identity_1 = require(\"./internal/util/identity\");\nObject.defineProperty(exports, \"identity\", {\n  enumerable: true,\n  get: function () {\n    return identity_1.identity;\n  }\n});\nvar isObservable_1 = require(\"./internal/util/isObservable\");\nObject.defineProperty(exports, \"isObservable\", {\n  enumerable: true,\n  get: function () {\n    return isObservable_1.isObservable;\n  }\n});\nvar lastValueFrom_1 = require(\"./internal/lastValueFrom\");\nObject.defineProperty(exports, \"lastValueFrom\", {\n  enumerable: true,\n  get: function () {\n    return lastValueFrom_1.lastValueFrom;\n  }\n});\nvar firstValueFrom_1 = require(\"./internal/firstValueFrom\");\nObject.defineProperty(exports, \"firstValueFrom\", {\n  enumerable: true,\n  get: function () {\n    return firstValueFrom_1.firstValueFrom;\n  }\n});\nvar ArgumentOutOfRangeError_1 = require(\"./internal/util/ArgumentOutOfRangeError\");\nObject.defineProperty(exports, \"ArgumentOutOfRangeError\", {\n  enumerable: true,\n  get: function () {\n    return ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;\n  }\n});\nvar EmptyError_1 = require(\"./internal/util/EmptyError\");\nObject.defineProperty(exports, \"EmptyError\", {\n  enumerable: true,\n  get: function () {\n    return EmptyError_1.EmptyError;\n  }\n});\nvar NotFoundError_1 = require(\"./internal/util/NotFoundError\");\nObject.defineProperty(exports, \"NotFoundError\", {\n  enumerable: true,\n  get: function () {\n    return NotFoundError_1.NotFoundError;\n  }\n});\nvar ObjectUnsubscribedError_1 = require(\"./internal/util/ObjectUnsubscribedError\");\nObject.defineProperty(exports, \"ObjectUnsubscribedError\", {\n  enumerable: true,\n  get: function () {\n    return ObjectUnsubscribedError_1.ObjectUnsubscribedError;\n  }\n});\nvar SequenceError_1 = require(\"./internal/util/SequenceError\");\nObject.defineProperty(exports, \"SequenceError\", {\n  enumerable: true,\n  get: function () {\n    return SequenceError_1.SequenceError;\n  }\n});\nvar timeout_1 = require(\"./internal/operators/timeout\");\nObject.defineProperty(exports, \"TimeoutError\", {\n  enumerable: true,\n  get: function () {\n    return timeout_1.TimeoutError;\n  }\n});\nvar UnsubscriptionError_1 = require(\"./internal/util/UnsubscriptionError\");\nObject.defineProperty(exports, \"UnsubscriptionError\", {\n  enumerable: true,\n  get: function () {\n    return UnsubscriptionError_1.UnsubscriptionError;\n  }\n});\nvar bindCallback_1 = require(\"./internal/observable/bindCallback\");\nObject.defineProperty(exports, \"bindCallback\", {\n  enumerable: true,\n  get: function () {\n    return bindCallback_1.bindCallback;\n  }\n});\nvar bindNodeCallback_1 = require(\"./internal/observable/bindNodeCallback\");\nObject.defineProperty(exports, \"bindNodeCallback\", {\n  enumerable: true,\n  get: function () {\n    return bindNodeCallback_1.bindNodeCallback;\n  }\n});\nvar combineLatest_1 = require(\"./internal/observable/combineLatest\");\nObject.defineProperty(exports, \"combineLatest\", {\n  enumerable: true,\n  get: function () {\n    return combineLatest_1.combineLatest;\n  }\n});\nvar concat_1 = require(\"./internal/observable/concat\");\nObject.defineProperty(exports, \"concat\", {\n  enumerable: true,\n  get: function () {\n    return concat_1.concat;\n  }\n});\nvar connectable_1 = require(\"./internal/observable/connectable\");\nObject.defineProperty(exports, \"connectable\", {\n  enumerable: true,\n  get: function () {\n    return connectable_1.connectable;\n  }\n});\nvar defer_1 = require(\"./internal/observable/defer\");\nObject.defineProperty(exports, \"defer\", {\n  enumerable: true,\n  get: function () {\n    return defer_1.defer;\n  }\n});\nvar empty_1 = require(\"./internal/observable/empty\");\nObject.defineProperty(exports, \"empty\", {\n  enumerable: true,\n  get: function () {\n    return empty_1.empty;\n  }\n});\nvar forkJoin_1 = require(\"./internal/observable/forkJoin\");\nObject.defineProperty(exports, \"forkJoin\", {\n  enumerable: true,\n  get: function () {\n    return forkJoin_1.forkJoin;\n  }\n});\nvar from_1 = require(\"./internal/observable/from\");\nObject.defineProperty(exports, \"from\", {\n  enumerable: true,\n  get: function () {\n    return from_1.from;\n  }\n});\nvar fromEvent_1 = require(\"./internal/observable/fromEvent\");\nObject.defineProperty(exports, \"fromEvent\", {\n  enumerable: true,\n  get: function () {\n    return fromEvent_1.fromEvent;\n  }\n});\nvar fromEventPattern_1 = require(\"./internal/observable/fromEventPattern\");\nObject.defineProperty(exports, \"fromEventPattern\", {\n  enumerable: true,\n  get: function () {\n    return fromEventPattern_1.fromEventPattern;\n  }\n});\nvar generate_1 = require(\"./internal/observable/generate\");\nObject.defineProperty(exports, \"generate\", {\n  enumerable: true,\n  get: function () {\n    return generate_1.generate;\n  }\n});\nvar iif_1 = require(\"./internal/observable/iif\");\nObject.defineProperty(exports, \"iif\", {\n  enumerable: true,\n  get: function () {\n    return iif_1.iif;\n  }\n});\nvar interval_1 = require(\"./internal/observable/interval\");\nObject.defineProperty(exports, \"interval\", {\n  enumerable: true,\n  get: function () {\n    return interval_1.interval;\n  }\n});\nvar merge_1 = require(\"./internal/observable/merge\");\nObject.defineProperty(exports, \"merge\", {\n  enumerable: true,\n  get: function () {\n    return merge_1.merge;\n  }\n});\nvar never_1 = require(\"./internal/observable/never\");\nObject.defineProperty(exports, \"never\", {\n  enumerable: true,\n  get: function () {\n    return never_1.never;\n  }\n});\nvar of_1 = require(\"./internal/observable/of\");\nObject.defineProperty(exports, \"of\", {\n  enumerable: true,\n  get: function () {\n    return of_1.of;\n  }\n});\nvar onErrorResumeNext_1 = require(\"./internal/observable/onErrorResumeNext\");\nObject.defineProperty(exports, \"onErrorResumeNext\", {\n  enumerable: true,\n  get: function () {\n    return onErrorResumeNext_1.onErrorResumeNext;\n  }\n});\nvar pairs_1 = require(\"./internal/observable/pairs\");\nObject.defineProperty(exports, \"pairs\", {\n  enumerable: true,\n  get: function () {\n    return pairs_1.pairs;\n  }\n});\nvar partition_1 = require(\"./internal/observable/partition\");\nObject.defineProperty(exports, \"partition\", {\n  enumerable: true,\n  get: function () {\n    return partition_1.partition;\n  }\n});\nvar race_1 = require(\"./internal/observable/race\");\nObject.defineProperty(exports, \"race\", {\n  enumerable: true,\n  get: function () {\n    return race_1.race;\n  }\n});\nvar range_1 = require(\"./internal/observable/range\");\nObject.defineProperty(exports, \"range\", {\n  enumerable: true,\n  get: function () {\n    return range_1.range;\n  }\n});\nvar throwError_1 = require(\"./internal/observable/throwError\");\nObject.defineProperty(exports, \"throwError\", {\n  enumerable: true,\n  get: function () {\n    return throwError_1.throwError;\n  }\n});\nvar timer_1 = require(\"./internal/observable/timer\");\nObject.defineProperty(exports, \"timer\", {\n  enumerable: true,\n  get: function () {\n    return timer_1.timer;\n  }\n});\nvar using_1 = require(\"./internal/observable/using\");\nObject.defineProperty(exports, \"using\", {\n  enumerable: true,\n  get: function () {\n    return using_1.using;\n  }\n});\nvar zip_1 = require(\"./internal/observable/zip\");\nObject.defineProperty(exports, \"zip\", {\n  enumerable: true,\n  get: function () {\n    return zip_1.zip;\n  }\n});\nvar scheduled_1 = require(\"./internal/scheduled/scheduled\");\nObject.defineProperty(exports, \"scheduled\", {\n  enumerable: true,\n  get: function () {\n    return scheduled_1.scheduled;\n  }\n});\nvar empty_2 = require(\"./internal/observable/empty\");\nObject.defineProperty(exports, \"EMPTY\", {\n  enumerable: true,\n  get: function () {\n    return empty_2.EMPTY;\n  }\n});\nvar never_2 = require(\"./internal/observable/never\");\nObject.defineProperty(exports, \"NEVER\", {\n  enumerable: true,\n  get: function () {\n    return never_2.NEVER;\n  }\n});\n__exportStar(require(\"./internal/types\"), exports);\nvar config_1 = require(\"./internal/config\");\nObject.defineProperty(exports, \"config\", {\n  enumerable: true,\n  get: function () {\n    return config_1.config;\n  }\n});\nvar audit_1 = require(\"./internal/operators/audit\");\nObject.defineProperty(exports, \"audit\", {\n  enumerable: true,\n  get: function () {\n    return audit_1.audit;\n  }\n});\nvar auditTime_1 = require(\"./internal/operators/auditTime\");\nObject.defineProperty(exports, \"auditTime\", {\n  enumerable: true,\n  get: function () {\n    return auditTime_1.auditTime;\n  }\n});\nvar buffer_1 = require(\"./internal/operators/buffer\");\nObject.defineProperty(exports, \"buffer\", {\n  enumerable: true,\n  get: function () {\n    return buffer_1.buffer;\n  }\n});\nvar bufferCount_1 = require(\"./internal/operators/bufferCount\");\nObject.defineProperty(exports, \"bufferCount\", {\n  enumerable: true,\n  get: function () {\n    return bufferCount_1.bufferCount;\n  }\n});\nvar bufferTime_1 = require(\"./internal/operators/bufferTime\");\nObject.defineProperty(exports, \"bufferTime\", {\n  enumerable: true,\n  get: function () {\n    return bufferTime_1.bufferTime;\n  }\n});\nvar bufferToggle_1 = require(\"./internal/operators/bufferToggle\");\nObject.defineProperty(exports, \"bufferToggle\", {\n  enumerable: true,\n  get: function () {\n    return bufferToggle_1.bufferToggle;\n  }\n});\nvar bufferWhen_1 = require(\"./internal/operators/bufferWhen\");\nObject.defineProperty(exports, \"bufferWhen\", {\n  enumerable: true,\n  get: function () {\n    return bufferWhen_1.bufferWhen;\n  }\n});\nvar catchError_1 = require(\"./internal/operators/catchError\");\nObject.defineProperty(exports, \"catchError\", {\n  enumerable: true,\n  get: function () {\n    return catchError_1.catchError;\n  }\n});\nvar combineAll_1 = require(\"./internal/operators/combineAll\");\nObject.defineProperty(exports, \"combineAll\", {\n  enumerable: true,\n  get: function () {\n    return combineAll_1.combineAll;\n  }\n});\nvar combineLatestAll_1 = require(\"./internal/operators/combineLatestAll\");\nObject.defineProperty(exports, \"combineLatestAll\", {\n  enumerable: true,\n  get: function () {\n    return combineLatestAll_1.combineLatestAll;\n  }\n});\nvar combineLatestWith_1 = require(\"./internal/operators/combineLatestWith\");\nObject.defineProperty(exports, \"combineLatestWith\", {\n  enumerable: true,\n  get: function () {\n    return combineLatestWith_1.combineLatestWith;\n  }\n});\nvar concatAll_1 = require(\"./internal/operators/concatAll\");\nObject.defineProperty(exports, \"concatAll\", {\n  enumerable: true,\n  get: function () {\n    return concatAll_1.concatAll;\n  }\n});\nvar concatMap_1 = require(\"./internal/operators/concatMap\");\nObject.defineProperty(exports, \"concatMap\", {\n  enumerable: true,\n  get: function () {\n    return concatMap_1.concatMap;\n  }\n});\nvar concatMapTo_1 = require(\"./internal/operators/concatMapTo\");\nObject.defineProperty(exports, \"concatMapTo\", {\n  enumerable: true,\n  get: function () {\n    return concatMapTo_1.concatMapTo;\n  }\n});\nvar concatWith_1 = require(\"./internal/operators/concatWith\");\nObject.defineProperty(exports, \"concatWith\", {\n  enumerable: true,\n  get: function () {\n    return concatWith_1.concatWith;\n  }\n});\nvar connect_1 = require(\"./internal/operators/connect\");\nObject.defineProperty(exports, \"connect\", {\n  enumerable: true,\n  get: function () {\n    return connect_1.connect;\n  }\n});\nvar count_1 = require(\"./internal/operators/count\");\nObject.defineProperty(exports, \"count\", {\n  enumerable: true,\n  get: function () {\n    return count_1.count;\n  }\n});\nvar debounce_1 = require(\"./internal/operators/debounce\");\nObject.defineProperty(exports, \"debounce\", {\n  enumerable: true,\n  get: function () {\n    return debounce_1.debounce;\n  }\n});\nvar debounceTime_1 = require(\"./internal/operators/debounceTime\");\nObject.defineProperty(exports, \"debounceTime\", {\n  enumerable: true,\n  get: function () {\n    return debounceTime_1.debounceTime;\n  }\n});\nvar defaultIfEmpty_1 = require(\"./internal/operators/defaultIfEmpty\");\nObject.defineProperty(exports, \"defaultIfEmpty\", {\n  enumerable: true,\n  get: function () {\n    return defaultIfEmpty_1.defaultIfEmpty;\n  }\n});\nvar delay_1 = require(\"./internal/operators/delay\");\nObject.defineProperty(exports, \"delay\", {\n  enumerable: true,\n  get: function () {\n    return delay_1.delay;\n  }\n});\nvar delayWhen_1 = require(\"./internal/operators/delayWhen\");\nObject.defineProperty(exports, \"delayWhen\", {\n  enumerable: true,\n  get: function () {\n    return delayWhen_1.delayWhen;\n  }\n});\nvar dematerialize_1 = require(\"./internal/operators/dematerialize\");\nObject.defineProperty(exports, \"dematerialize\", {\n  enumerable: true,\n  get: function () {\n    return dematerialize_1.dematerialize;\n  }\n});\nvar distinct_1 = require(\"./internal/operators/distinct\");\nObject.defineProperty(exports, \"distinct\", {\n  enumerable: true,\n  get: function () {\n    return distinct_1.distinct;\n  }\n});\nvar distinctUntilChanged_1 = require(\"./internal/operators/distinctUntilChanged\");\nObject.defineProperty(exports, \"distinctUntilChanged\", {\n  enumerable: true,\n  get: function () {\n    return distinctUntilChanged_1.distinctUntilChanged;\n  }\n});\nvar distinctUntilKeyChanged_1 = require(\"./internal/operators/distinctUntilKeyChanged\");\nObject.defineProperty(exports, \"distinctUntilKeyChanged\", {\n  enumerable: true,\n  get: function () {\n    return distinctUntilKeyChanged_1.distinctUntilKeyChanged;\n  }\n});\nvar elementAt_1 = require(\"./internal/operators/elementAt\");\nObject.defineProperty(exports, \"elementAt\", {\n  enumerable: true,\n  get: function () {\n    return elementAt_1.elementAt;\n  }\n});\nvar endWith_1 = require(\"./internal/operators/endWith\");\nObject.defineProperty(exports, \"endWith\", {\n  enumerable: true,\n  get: function () {\n    return endWith_1.endWith;\n  }\n});\nvar every_1 = require(\"./internal/operators/every\");\nObject.defineProperty(exports, \"every\", {\n  enumerable: true,\n  get: function () {\n    return every_1.every;\n  }\n});\nvar exhaust_1 = require(\"./internal/operators/exhaust\");\nObject.defineProperty(exports, \"exhaust\", {\n  enumerable: true,\n  get: function () {\n    return exhaust_1.exhaust;\n  }\n});\nvar exhaustAll_1 = require(\"./internal/operators/exhaustAll\");\nObject.defineProperty(exports, \"exhaustAll\", {\n  enumerable: true,\n  get: function () {\n    return exhaustAll_1.exhaustAll;\n  }\n});\nvar exhaustMap_1 = require(\"./internal/operators/exhaustMap\");\nObject.defineProperty(exports, \"exhaustMap\", {\n  enumerable: true,\n  get: function () {\n    return exhaustMap_1.exhaustMap;\n  }\n});\nvar expand_1 = require(\"./internal/operators/expand\");\nObject.defineProperty(exports, \"expand\", {\n  enumerable: true,\n  get: function () {\n    return expand_1.expand;\n  }\n});\nvar filter_1 = require(\"./internal/operators/filter\");\nObject.defineProperty(exports, \"filter\", {\n  enumerable: true,\n  get: function () {\n    return filter_1.filter;\n  }\n});\nvar finalize_1 = require(\"./internal/operators/finalize\");\nObject.defineProperty(exports, \"finalize\", {\n  enumerable: true,\n  get: function () {\n    return finalize_1.finalize;\n  }\n});\nvar find_1 = require(\"./internal/operators/find\");\nObject.defineProperty(exports, \"find\", {\n  enumerable: true,\n  get: function () {\n    return find_1.find;\n  }\n});\nvar findIndex_1 = require(\"./internal/operators/findIndex\");\nObject.defineProperty(exports, \"findIndex\", {\n  enumerable: true,\n  get: function () {\n    return findIndex_1.findIndex;\n  }\n});\nvar first_1 = require(\"./internal/operators/first\");\nObject.defineProperty(exports, \"first\", {\n  enumerable: true,\n  get: function () {\n    return first_1.first;\n  }\n});\nvar groupBy_1 = require(\"./internal/operators/groupBy\");\nObject.defineProperty(exports, \"groupBy\", {\n  enumerable: true,\n  get: function () {\n    return groupBy_1.groupBy;\n  }\n});\nvar ignoreElements_1 = require(\"./internal/operators/ignoreElements\");\nObject.defineProperty(exports, \"ignoreElements\", {\n  enumerable: true,\n  get: function () {\n    return ignoreElements_1.ignoreElements;\n  }\n});\nvar isEmpty_1 = require(\"./internal/operators/isEmpty\");\nObject.defineProperty(exports, \"isEmpty\", {\n  enumerable: true,\n  get: function () {\n    return isEmpty_1.isEmpty;\n  }\n});\nvar last_1 = require(\"./internal/operators/last\");\nObject.defineProperty(exports, \"last\", {\n  enumerable: true,\n  get: function () {\n    return last_1.last;\n  }\n});\nvar map_1 = require(\"./internal/operators/map\");\nObject.defineProperty(exports, \"map\", {\n  enumerable: true,\n  get: function () {\n    return map_1.map;\n  }\n});\nvar mapTo_1 = require(\"./internal/operators/mapTo\");\nObject.defineProperty(exports, \"mapTo\", {\n  enumerable: true,\n  get: function () {\n    return mapTo_1.mapTo;\n  }\n});\nvar materialize_1 = require(\"./internal/operators/materialize\");\nObject.defineProperty(exports, \"materialize\", {\n  enumerable: true,\n  get: function () {\n    return materialize_1.materialize;\n  }\n});\nvar max_1 = require(\"./internal/operators/max\");\nObject.defineProperty(exports, \"max\", {\n  enumerable: true,\n  get: function () {\n    return max_1.max;\n  }\n});\nvar mergeAll_1 = require(\"./internal/operators/mergeAll\");\nObject.defineProperty(exports, \"mergeAll\", {\n  enumerable: true,\n  get: function () {\n    return mergeAll_1.mergeAll;\n  }\n});\nvar flatMap_1 = require(\"./internal/operators/flatMap\");\nObject.defineProperty(exports, \"flatMap\", {\n  enumerable: true,\n  get: function () {\n    return flatMap_1.flatMap;\n  }\n});\nvar mergeMap_1 = require(\"./internal/operators/mergeMap\");\nObject.defineProperty(exports, \"mergeMap\", {\n  enumerable: true,\n  get: function () {\n    return mergeMap_1.mergeMap;\n  }\n});\nvar mergeMapTo_1 = require(\"./internal/operators/mergeMapTo\");\nObject.defineProperty(exports, \"mergeMapTo\", {\n  enumerable: true,\n  get: function () {\n    return mergeMapTo_1.mergeMapTo;\n  }\n});\nvar mergeScan_1 = require(\"./internal/operators/mergeScan\");\nObject.defineProperty(exports, \"mergeScan\", {\n  enumerable: true,\n  get: function () {\n    return mergeScan_1.mergeScan;\n  }\n});\nvar mergeWith_1 = require(\"./internal/operators/mergeWith\");\nObject.defineProperty(exports, \"mergeWith\", {\n  enumerable: true,\n  get: function () {\n    return mergeWith_1.mergeWith;\n  }\n});\nvar min_1 = require(\"./internal/operators/min\");\nObject.defineProperty(exports, \"min\", {\n  enumerable: true,\n  get: function () {\n    return min_1.min;\n  }\n});\nvar multicast_1 = require(\"./internal/operators/multicast\");\nObject.defineProperty(exports, \"multicast\", {\n  enumerable: true,\n  get: function () {\n    return multicast_1.multicast;\n  }\n});\nvar observeOn_1 = require(\"./internal/operators/observeOn\");\nObject.defineProperty(exports, \"observeOn\", {\n  enumerable: true,\n  get: function () {\n    return observeOn_1.observeOn;\n  }\n});\nvar onErrorResumeNextWith_1 = require(\"./internal/operators/onErrorResumeNextWith\");\nObject.defineProperty(exports, \"onErrorResumeNextWith\", {\n  enumerable: true,\n  get: function () {\n    return onErrorResumeNextWith_1.onErrorResumeNextWith;\n  }\n});\nvar pairwise_1 = require(\"./internal/operators/pairwise\");\nObject.defineProperty(exports, \"pairwise\", {\n  enumerable: true,\n  get: function () {\n    return pairwise_1.pairwise;\n  }\n});\nvar pluck_1 = require(\"./internal/operators/pluck\");\nObject.defineProperty(exports, \"pluck\", {\n  enumerable: true,\n  get: function () {\n    return pluck_1.pluck;\n  }\n});\nvar publish_1 = require(\"./internal/operators/publish\");\nObject.defineProperty(exports, \"publish\", {\n  enumerable: true,\n  get: function () {\n    return publish_1.publish;\n  }\n});\nvar publishBehavior_1 = require(\"./internal/operators/publishBehavior\");\nObject.defineProperty(exports, \"publishBehavior\", {\n  enumerable: true,\n  get: function () {\n    return publishBehavior_1.publishBehavior;\n  }\n});\nvar publishLast_1 = require(\"./internal/operators/publishLast\");\nObject.defineProperty(exports, \"publishLast\", {\n  enumerable: true,\n  get: function () {\n    return publishLast_1.publishLast;\n  }\n});\nvar publishReplay_1 = require(\"./internal/operators/publishReplay\");\nObject.defineProperty(exports, \"publishReplay\", {\n  enumerable: true,\n  get: function () {\n    return publishReplay_1.publishReplay;\n  }\n});\nvar raceWith_1 = require(\"./internal/operators/raceWith\");\nObject.defineProperty(exports, \"raceWith\", {\n  enumerable: true,\n  get: function () {\n    return raceWith_1.raceWith;\n  }\n});\nvar reduce_1 = require(\"./internal/operators/reduce\");\nObject.defineProperty(exports, \"reduce\", {\n  enumerable: true,\n  get: function () {\n    return reduce_1.reduce;\n  }\n});\nvar repeat_1 = require(\"./internal/operators/repeat\");\nObject.defineProperty(exports, \"repeat\", {\n  enumerable: true,\n  get: function () {\n    return repeat_1.repeat;\n  }\n});\nvar repeatWhen_1 = require(\"./internal/operators/repeatWhen\");\nObject.defineProperty(exports, \"repeatWhen\", {\n  enumerable: true,\n  get: function () {\n    return repeatWhen_1.repeatWhen;\n  }\n});\nvar retry_1 = require(\"./internal/operators/retry\");\nObject.defineProperty(exports, \"retry\", {\n  enumerable: true,\n  get: function () {\n    return retry_1.retry;\n  }\n});\nvar retryWhen_1 = require(\"./internal/operators/retryWhen\");\nObject.defineProperty(exports, \"retryWhen\", {\n  enumerable: true,\n  get: function () {\n    return retryWhen_1.retryWhen;\n  }\n});\nvar refCount_1 = require(\"./internal/operators/refCount\");\nObject.defineProperty(exports, \"refCount\", {\n  enumerable: true,\n  get: function () {\n    return refCount_1.refCount;\n  }\n});\nvar sample_1 = require(\"./internal/operators/sample\");\nObject.defineProperty(exports, \"sample\", {\n  enumerable: true,\n  get: function () {\n    return sample_1.sample;\n  }\n});\nvar sampleTime_1 = require(\"./internal/operators/sampleTime\");\nObject.defineProperty(exports, \"sampleTime\", {\n  enumerable: true,\n  get: function () {\n    return sampleTime_1.sampleTime;\n  }\n});\nvar scan_1 = require(\"./internal/operators/scan\");\nObject.defineProperty(exports, \"scan\", {\n  enumerable: true,\n  get: function () {\n    return scan_1.scan;\n  }\n});\nvar sequenceEqual_1 = require(\"./internal/operators/sequenceEqual\");\nObject.defineProperty(exports, \"sequenceEqual\", {\n  enumerable: true,\n  get: function () {\n    return sequenceEqual_1.sequenceEqual;\n  }\n});\nvar share_1 = require(\"./internal/operators/share\");\nObject.defineProperty(exports, \"share\", {\n  enumerable: true,\n  get: function () {\n    return share_1.share;\n  }\n});\nvar shareReplay_1 = require(\"./internal/operators/shareReplay\");\nObject.defineProperty(exports, \"shareReplay\", {\n  enumerable: true,\n  get: function () {\n    return shareReplay_1.shareReplay;\n  }\n});\nvar single_1 = require(\"./internal/operators/single\");\nObject.defineProperty(exports, \"single\", {\n  enumerable: true,\n  get: function () {\n    return single_1.single;\n  }\n});\nvar skip_1 = require(\"./internal/operators/skip\");\nObject.defineProperty(exports, \"skip\", {\n  enumerable: true,\n  get: function () {\n    return skip_1.skip;\n  }\n});\nvar skipLast_1 = require(\"./internal/operators/skipLast\");\nObject.defineProperty(exports, \"skipLast\", {\n  enumerable: true,\n  get: function () {\n    return skipLast_1.skipLast;\n  }\n});\nvar skipUntil_1 = require(\"./internal/operators/skipUntil\");\nObject.defineProperty(exports, \"skipUntil\", {\n  enumerable: true,\n  get: function () {\n    return skipUntil_1.skipUntil;\n  }\n});\nvar skipWhile_1 = require(\"./internal/operators/skipWhile\");\nObject.defineProperty(exports, \"skipWhile\", {\n  enumerable: true,\n  get: function () {\n    return skipWhile_1.skipWhile;\n  }\n});\nvar startWith_1 = require(\"./internal/operators/startWith\");\nObject.defineProperty(exports, \"startWith\", {\n  enumerable: true,\n  get: function () {\n    return startWith_1.startWith;\n  }\n});\nvar subscribeOn_1 = require(\"./internal/operators/subscribeOn\");\nObject.defineProperty(exports, \"subscribeOn\", {\n  enumerable: true,\n  get: function () {\n    return subscribeOn_1.subscribeOn;\n  }\n});\nvar switchAll_1 = require(\"./internal/operators/switchAll\");\nObject.defineProperty(exports, \"switchAll\", {\n  enumerable: true,\n  get: function () {\n    return switchAll_1.switchAll;\n  }\n});\nvar switchMap_1 = require(\"./internal/operators/switchMap\");\nObject.defineProperty(exports, \"switchMap\", {\n  enumerable: true,\n  get: function () {\n    return switchMap_1.switchMap;\n  }\n});\nvar switchMapTo_1 = require(\"./internal/operators/switchMapTo\");\nObject.defineProperty(exports, \"switchMapTo\", {\n  enumerable: true,\n  get: function () {\n    return switchMapTo_1.switchMapTo;\n  }\n});\nvar switchScan_1 = require(\"./internal/operators/switchScan\");\nObject.defineProperty(exports, \"switchScan\", {\n  enumerable: true,\n  get: function () {\n    return switchScan_1.switchScan;\n  }\n});\nvar take_1 = require(\"./internal/operators/take\");\nObject.defineProperty(exports, \"take\", {\n  enumerable: true,\n  get: function () {\n    return take_1.take;\n  }\n});\nvar takeLast_1 = require(\"./internal/operators/takeLast\");\nObject.defineProperty(exports, \"takeLast\", {\n  enumerable: true,\n  get: function () {\n    return takeLast_1.takeLast;\n  }\n});\nvar takeUntil_1 = require(\"./internal/operators/takeUntil\");\nObject.defineProperty(exports, \"takeUntil\", {\n  enumerable: true,\n  get: function () {\n    return takeUntil_1.takeUntil;\n  }\n});\nvar takeWhile_1 = require(\"./internal/operators/takeWhile\");\nObject.defineProperty(exports, \"takeWhile\", {\n  enumerable: true,\n  get: function () {\n    return takeWhile_1.takeWhile;\n  }\n});\nvar tap_1 = require(\"./internal/operators/tap\");\nObject.defineProperty(exports, \"tap\", {\n  enumerable: true,\n  get: function () {\n    return tap_1.tap;\n  }\n});\nvar throttle_1 = require(\"./internal/operators/throttle\");\nObject.defineProperty(exports, \"throttle\", {\n  enumerable: true,\n  get: function () {\n    return throttle_1.throttle;\n  }\n});\nvar throttleTime_1 = require(\"./internal/operators/throttleTime\");\nObject.defineProperty(exports, \"throttleTime\", {\n  enumerable: true,\n  get: function () {\n    return throttleTime_1.throttleTime;\n  }\n});\nvar throwIfEmpty_1 = require(\"./internal/operators/throwIfEmpty\");\nObject.defineProperty(exports, \"throwIfEmpty\", {\n  enumerable: true,\n  get: function () {\n    return throwIfEmpty_1.throwIfEmpty;\n  }\n});\nvar timeInterval_1 = require(\"./internal/operators/timeInterval\");\nObject.defineProperty(exports, \"timeInterval\", {\n  enumerable: true,\n  get: function () {\n    return timeInterval_1.timeInterval;\n  }\n});\nvar timeout_2 = require(\"./internal/operators/timeout\");\nObject.defineProperty(exports, \"timeout\", {\n  enumerable: true,\n  get: function () {\n    return timeout_2.timeout;\n  }\n});\nvar timeoutWith_1 = require(\"./internal/operators/timeoutWith\");\nObject.defineProperty(exports, \"timeoutWith\", {\n  enumerable: true,\n  get: function () {\n    return timeoutWith_1.timeoutWith;\n  }\n});\nvar timestamp_1 = require(\"./internal/operators/timestamp\");\nObject.defineProperty(exports, \"timestamp\", {\n  enumerable: true,\n  get: function () {\n    return timestamp_1.timestamp;\n  }\n});\nvar toArray_1 = require(\"./internal/operators/toArray\");\nObject.defineProperty(exports, \"toArray\", {\n  enumerable: true,\n  get: function () {\n    return toArray_1.toArray;\n  }\n});\nvar window_1 = require(\"./internal/operators/window\");\nObject.defineProperty(exports, \"window\", {\n  enumerable: true,\n  get: function () {\n    return window_1.window;\n  }\n});\nvar windowCount_1 = require(\"./internal/operators/windowCount\");\nObject.defineProperty(exports, \"windowCount\", {\n  enumerable: true,\n  get: function () {\n    return windowCount_1.windowCount;\n  }\n});\nvar windowTime_1 = require(\"./internal/operators/windowTime\");\nObject.defineProperty(exports, \"windowTime\", {\n  enumerable: true,\n  get: function () {\n    return windowTime_1.windowTime;\n  }\n});\nvar windowToggle_1 = require(\"./internal/operators/windowToggle\");\nObject.defineProperty(exports, \"windowToggle\", {\n  enumerable: true,\n  get: function () {\n    return windowToggle_1.windowToggle;\n  }\n});\nvar windowWhen_1 = require(\"./internal/operators/windowWhen\");\nObject.defineProperty(exports, \"windowWhen\", {\n  enumerable: true,\n  get: function () {\n    return windowWhen_1.windowWhen;\n  }\n});\nvar withLatestFrom_1 = require(\"./internal/operators/withLatestFrom\");\nObject.defineProperty(exports, \"withLatestFrom\", {\n  enumerable: true,\n  get: function () {\n    return withLatestFrom_1.withLatestFrom;\n  }\n});\nvar zipAll_1 = require(\"./internal/operators/zipAll\");\nObject.defineProperty(exports, \"zipAll\", {\n  enumerable: true,\n  get: function () {\n    return zipAll_1.zipAll;\n  }\n});\nvar zipWith_1 = require(\"./internal/operators/zipWith\");\nObject.defineProperty(exports, \"zipWith\", {\n  enumerable: true,\n  get: function () {\n    return zipWith_1.zipWith;\n  }\n});\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.partition = void 0;\nvar not_1 = require(\"../util/not\");\nvar filter_1 = require(\"./filter\");\nfunction partition(predicate, thisArg) {\n  return function (source) {\n    return [filter_1.filter(predicate, thisArg)(source), filter_1.filter(not_1.not(predicate, thisArg))(source)];\n  };\n}\nexports.partition = partition;\n", "\"use strict\";\n\nvar __read = this && this.__read || function (o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n    r,\n    ar = [],\n    e;\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n  return ar;\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from) {\n  for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n  return to;\n};\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.race = void 0;\nvar argsOrArgArray_1 = require(\"../util/argsOrArgArray\");\nvar raceWith_1 = require(\"./raceWith\");\nfunction race() {\n  var args = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    args[_i] = arguments[_i];\n  }\n  return raceWith_1.raceWith.apply(void 0, __spreadArray([], __read(argsOrArgArray_1.argsOrArgArray(args))));\n}\nexports.race = race;\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeAll = exports.merge = exports.max = exports.materialize = exports.mapTo = exports.map = exports.last = exports.isEmpty = exports.ignoreElements = exports.groupBy = exports.first = exports.findIndex = exports.find = exports.finalize = exports.filter = exports.expand = exports.exhaustMap = exports.exhaustAll = exports.exhaust = exports.every = exports.endWith = exports.elementAt = exports.distinctUntilKeyChanged = exports.distinctUntilChanged = exports.distinct = exports.dematerialize = exports.delayWhen = exports.delay = exports.defaultIfEmpty = exports.debounceTime = exports.debounce = exports.count = exports.connect = exports.concatWith = exports.concatMapTo = exports.concatMap = exports.concatAll = exports.concat = exports.combineLatestWith = exports.combineLatest = exports.combineLatestAll = exports.combineAll = exports.catchError = exports.bufferWhen = exports.bufferToggle = exports.bufferTime = exports.bufferCount = exports.buffer = exports.auditTime = exports.audit = void 0;\nexports.timeInterval = exports.throwIfEmpty = exports.throttleTime = exports.throttle = exports.tap = exports.takeWhile = exports.takeUntil = exports.takeLast = exports.take = exports.switchScan = exports.switchMapTo = exports.switchMap = exports.switchAll = exports.subscribeOn = exports.startWith = exports.skipWhile = exports.skipUntil = exports.skipLast = exports.skip = exports.single = exports.shareReplay = exports.share = exports.sequenceEqual = exports.scan = exports.sampleTime = exports.sample = exports.refCount = exports.retryWhen = exports.retry = exports.repeatWhen = exports.repeat = exports.reduce = exports.raceWith = exports.race = exports.publishReplay = exports.publishLast = exports.publishBehavior = exports.publish = exports.pluck = exports.partition = exports.pairwise = exports.onErrorResumeNext = exports.observeOn = exports.multicast = exports.min = exports.mergeWith = exports.mergeScan = exports.mergeMapTo = exports.mergeMap = exports.flatMap = void 0;\nexports.zipWith = exports.zipAll = exports.zip = exports.withLatestFrom = exports.windowWhen = exports.windowToggle = exports.windowTime = exports.windowCount = exports.window = exports.toArray = exports.timestamp = exports.timeoutWith = exports.timeout = void 0;\nvar audit_1 = require(\"../internal/operators/audit\");\nObject.defineProperty(exports, \"audit\", {\n  enumerable: true,\n  get: function () {\n    return audit_1.audit;\n  }\n});\nvar auditTime_1 = require(\"../internal/operators/auditTime\");\nObject.defineProperty(exports, \"auditTime\", {\n  enumerable: true,\n  get: function () {\n    return auditTime_1.auditTime;\n  }\n});\nvar buffer_1 = require(\"../internal/operators/buffer\");\nObject.defineProperty(exports, \"buffer\", {\n  enumerable: true,\n  get: function () {\n    return buffer_1.buffer;\n  }\n});\nvar bufferCount_1 = require(\"../internal/operators/bufferCount\");\nObject.defineProperty(exports, \"bufferCount\", {\n  enumerable: true,\n  get: function () {\n    return bufferCount_1.bufferCount;\n  }\n});\nvar bufferTime_1 = require(\"../internal/operators/bufferTime\");\nObject.defineProperty(exports, \"bufferTime\", {\n  enumerable: true,\n  get: function () {\n    return bufferTime_1.bufferTime;\n  }\n});\nvar bufferToggle_1 = require(\"../internal/operators/bufferToggle\");\nObject.defineProperty(exports, \"bufferToggle\", {\n  enumerable: true,\n  get: function () {\n    return bufferToggle_1.bufferToggle;\n  }\n});\nvar bufferWhen_1 = require(\"../internal/operators/bufferWhen\");\nObject.defineProperty(exports, \"bufferWhen\", {\n  enumerable: true,\n  get: function () {\n    return bufferWhen_1.bufferWhen;\n  }\n});\nvar catchError_1 = require(\"../internal/operators/catchError\");\nObject.defineProperty(exports, \"catchError\", {\n  enumerable: true,\n  get: function () {\n    return catchError_1.catchError;\n  }\n});\nvar combineAll_1 = require(\"../internal/operators/combineAll\");\nObject.defineProperty(exports, \"combineAll\", {\n  enumerable: true,\n  get: function () {\n    return combineAll_1.combineAll;\n  }\n});\nvar combineLatestAll_1 = require(\"../internal/operators/combineLatestAll\");\nObject.defineProperty(exports, \"combineLatestAll\", {\n  enumerable: true,\n  get: function () {\n    return combineLatestAll_1.combineLatestAll;\n  }\n});\nvar combineLatest_1 = require(\"../internal/operators/combineLatest\");\nObject.defineProperty(exports, \"combineLatest\", {\n  enumerable: true,\n  get: function () {\n    return combineLatest_1.combineLatest;\n  }\n});\nvar combineLatestWith_1 = require(\"../internal/operators/combineLatestWith\");\nObject.defineProperty(exports, \"combineLatestWith\", {\n  enumerable: true,\n  get: function () {\n    return combineLatestWith_1.combineLatestWith;\n  }\n});\nvar concat_1 = require(\"../internal/operators/concat\");\nObject.defineProperty(exports, \"concat\", {\n  enumerable: true,\n  get: function () {\n    return concat_1.concat;\n  }\n});\nvar concatAll_1 = require(\"../internal/operators/concatAll\");\nObject.defineProperty(exports, \"concatAll\", {\n  enumerable: true,\n  get: function () {\n    return concatAll_1.concatAll;\n  }\n});\nvar concatMap_1 = require(\"../internal/operators/concatMap\");\nObject.defineProperty(exports, \"concatMap\", {\n  enumerable: true,\n  get: function () {\n    return concatMap_1.concatMap;\n  }\n});\nvar concatMapTo_1 = require(\"../internal/operators/concatMapTo\");\nObject.defineProperty(exports, \"concatMapTo\", {\n  enumerable: true,\n  get: function () {\n    return concatMapTo_1.concatMapTo;\n  }\n});\nvar concatWith_1 = require(\"../internal/operators/concatWith\");\nObject.defineProperty(exports, \"concatWith\", {\n  enumerable: true,\n  get: function () {\n    return concatWith_1.concatWith;\n  }\n});\nvar connect_1 = require(\"../internal/operators/connect\");\nObject.defineProperty(exports, \"connect\", {\n  enumerable: true,\n  get: function () {\n    return connect_1.connect;\n  }\n});\nvar count_1 = require(\"../internal/operators/count\");\nObject.defineProperty(exports, \"count\", {\n  enumerable: true,\n  get: function () {\n    return count_1.count;\n  }\n});\nvar debounce_1 = require(\"../internal/operators/debounce\");\nObject.defineProperty(exports, \"debounce\", {\n  enumerable: true,\n  get: function () {\n    return debounce_1.debounce;\n  }\n});\nvar debounceTime_1 = require(\"../internal/operators/debounceTime\");\nObject.defineProperty(exports, \"debounceTime\", {\n  enumerable: true,\n  get: function () {\n    return debounceTime_1.debounceTime;\n  }\n});\nvar defaultIfEmpty_1 = require(\"../internal/operators/defaultIfEmpty\");\nObject.defineProperty(exports, \"defaultIfEmpty\", {\n  enumerable: true,\n  get: function () {\n    return defaultIfEmpty_1.defaultIfEmpty;\n  }\n});\nvar delay_1 = require(\"../internal/operators/delay\");\nObject.defineProperty(exports, \"delay\", {\n  enumerable: true,\n  get: function () {\n    return delay_1.delay;\n  }\n});\nvar delayWhen_1 = require(\"../internal/operators/delayWhen\");\nObject.defineProperty(exports, \"delayWhen\", {\n  enumerable: true,\n  get: function () {\n    return delayWhen_1.delayWhen;\n  }\n});\nvar dematerialize_1 = require(\"../internal/operators/dematerialize\");\nObject.defineProperty(exports, \"dematerialize\", {\n  enumerable: true,\n  get: function () {\n    return dematerialize_1.dematerialize;\n  }\n});\nvar distinct_1 = require(\"../internal/operators/distinct\");\nObject.defineProperty(exports, \"distinct\", {\n  enumerable: true,\n  get: function () {\n    return distinct_1.distinct;\n  }\n});\nvar distinctUntilChanged_1 = require(\"../internal/operators/distinctUntilChanged\");\nObject.defineProperty(exports, \"distinctUntilChanged\", {\n  enumerable: true,\n  get: function () {\n    return distinctUntilChanged_1.distinctUntilChanged;\n  }\n});\nvar distinctUntilKeyChanged_1 = require(\"../internal/operators/distinctUntilKeyChanged\");\nObject.defineProperty(exports, \"distinctUntilKeyChanged\", {\n  enumerable: true,\n  get: function () {\n    return distinctUntilKeyChanged_1.distinctUntilKeyChanged;\n  }\n});\nvar elementAt_1 = require(\"../internal/operators/elementAt\");\nObject.defineProperty(exports, \"elementAt\", {\n  enumerable: true,\n  get: function () {\n    return elementAt_1.elementAt;\n  }\n});\nvar endWith_1 = require(\"../internal/operators/endWith\");\nObject.defineProperty(exports, \"endWith\", {\n  enumerable: true,\n  get: function () {\n    return endWith_1.endWith;\n  }\n});\nvar every_1 = require(\"../internal/operators/every\");\nObject.defineProperty(exports, \"every\", {\n  enumerable: true,\n  get: function () {\n    return every_1.every;\n  }\n});\nvar exhaust_1 = require(\"../internal/operators/exhaust\");\nObject.defineProperty(exports, \"exhaust\", {\n  enumerable: true,\n  get: function () {\n    return exhaust_1.exhaust;\n  }\n});\nvar exhaustAll_1 = require(\"../internal/operators/exhaustAll\");\nObject.defineProperty(exports, \"exhaustAll\", {\n  enumerable: true,\n  get: function () {\n    return exhaustAll_1.exhaustAll;\n  }\n});\nvar exhaustMap_1 = require(\"../internal/operators/exhaustMap\");\nObject.defineProperty(exports, \"exhaustMap\", {\n  enumerable: true,\n  get: function () {\n    return exhaustMap_1.exhaustMap;\n  }\n});\nvar expand_1 = require(\"../internal/operators/expand\");\nObject.defineProperty(exports, \"expand\", {\n  enumerable: true,\n  get: function () {\n    return expand_1.expand;\n  }\n});\nvar filter_1 = require(\"../internal/operators/filter\");\nObject.defineProperty(exports, \"filter\", {\n  enumerable: true,\n  get: function () {\n    return filter_1.filter;\n  }\n});\nvar finalize_1 = require(\"../internal/operators/finalize\");\nObject.defineProperty(exports, \"finalize\", {\n  enumerable: true,\n  get: function () {\n    return finalize_1.finalize;\n  }\n});\nvar find_1 = require(\"../internal/operators/find\");\nObject.defineProperty(exports, \"find\", {\n  enumerable: true,\n  get: function () {\n    return find_1.find;\n  }\n});\nvar findIndex_1 = require(\"../internal/operators/findIndex\");\nObject.defineProperty(exports, \"findIndex\", {\n  enumerable: true,\n  get: function () {\n    return findIndex_1.findIndex;\n  }\n});\nvar first_1 = require(\"../internal/operators/first\");\nObject.defineProperty(exports, \"first\", {\n  enumerable: true,\n  get: function () {\n    return first_1.first;\n  }\n});\nvar groupBy_1 = require(\"../internal/operators/groupBy\");\nObject.defineProperty(exports, \"groupBy\", {\n  enumerable: true,\n  get: function () {\n    return groupBy_1.groupBy;\n  }\n});\nvar ignoreElements_1 = require(\"../internal/operators/ignoreElements\");\nObject.defineProperty(exports, \"ignoreElements\", {\n  enumerable: true,\n  get: function () {\n    return ignoreElements_1.ignoreElements;\n  }\n});\nvar isEmpty_1 = require(\"../internal/operators/isEmpty\");\nObject.defineProperty(exports, \"isEmpty\", {\n  enumerable: true,\n  get: function () {\n    return isEmpty_1.isEmpty;\n  }\n});\nvar last_1 = require(\"../internal/operators/last\");\nObject.defineProperty(exports, \"last\", {\n  enumerable: true,\n  get: function () {\n    return last_1.last;\n  }\n});\nvar map_1 = require(\"../internal/operators/map\");\nObject.defineProperty(exports, \"map\", {\n  enumerable: true,\n  get: function () {\n    return map_1.map;\n  }\n});\nvar mapTo_1 = require(\"../internal/operators/mapTo\");\nObject.defineProperty(exports, \"mapTo\", {\n  enumerable: true,\n  get: function () {\n    return mapTo_1.mapTo;\n  }\n});\nvar materialize_1 = require(\"../internal/operators/materialize\");\nObject.defineProperty(exports, \"materialize\", {\n  enumerable: true,\n  get: function () {\n    return materialize_1.materialize;\n  }\n});\nvar max_1 = require(\"../internal/operators/max\");\nObject.defineProperty(exports, \"max\", {\n  enumerable: true,\n  get: function () {\n    return max_1.max;\n  }\n});\nvar merge_1 = require(\"../internal/operators/merge\");\nObject.defineProperty(exports, \"merge\", {\n  enumerable: true,\n  get: function () {\n    return merge_1.merge;\n  }\n});\nvar mergeAll_1 = require(\"../internal/operators/mergeAll\");\nObject.defineProperty(exports, \"mergeAll\", {\n  enumerable: true,\n  get: function () {\n    return mergeAll_1.mergeAll;\n  }\n});\nvar flatMap_1 = require(\"../internal/operators/flatMap\");\nObject.defineProperty(exports, \"flatMap\", {\n  enumerable: true,\n  get: function () {\n    return flatMap_1.flatMap;\n  }\n});\nvar mergeMap_1 = require(\"../internal/operators/mergeMap\");\nObject.defineProperty(exports, \"mergeMap\", {\n  enumerable: true,\n  get: function () {\n    return mergeMap_1.mergeMap;\n  }\n});\nvar mergeMapTo_1 = require(\"../internal/operators/mergeMapTo\");\nObject.defineProperty(exports, \"mergeMapTo\", {\n  enumerable: true,\n  get: function () {\n    return mergeMapTo_1.mergeMapTo;\n  }\n});\nvar mergeScan_1 = require(\"../internal/operators/mergeScan\");\nObject.defineProperty(exports, \"mergeScan\", {\n  enumerable: true,\n  get: function () {\n    return mergeScan_1.mergeScan;\n  }\n});\nvar mergeWith_1 = require(\"../internal/operators/mergeWith\");\nObject.defineProperty(exports, \"mergeWith\", {\n  enumerable: true,\n  get: function () {\n    return mergeWith_1.mergeWith;\n  }\n});\nvar min_1 = require(\"../internal/operators/min\");\nObject.defineProperty(exports, \"min\", {\n  enumerable: true,\n  get: function () {\n    return min_1.min;\n  }\n});\nvar multicast_1 = require(\"../internal/operators/multicast\");\nObject.defineProperty(exports, \"multicast\", {\n  enumerable: true,\n  get: function () {\n    return multicast_1.multicast;\n  }\n});\nvar observeOn_1 = require(\"../internal/operators/observeOn\");\nObject.defineProperty(exports, \"observeOn\", {\n  enumerable: true,\n  get: function () {\n    return observeOn_1.observeOn;\n  }\n});\nvar onErrorResumeNextWith_1 = require(\"../internal/operators/onErrorResumeNextWith\");\nObject.defineProperty(exports, \"onErrorResumeNext\", {\n  enumerable: true,\n  get: function () {\n    return onErrorResumeNextWith_1.onErrorResumeNext;\n  }\n});\nvar pairwise_1 = require(\"../internal/operators/pairwise\");\nObject.defineProperty(exports, \"pairwise\", {\n  enumerable: true,\n  get: function () {\n    return pairwise_1.pairwise;\n  }\n});\nvar partition_1 = require(\"../internal/operators/partition\");\nObject.defineProperty(exports, \"partition\", {\n  enumerable: true,\n  get: function () {\n    return partition_1.partition;\n  }\n});\nvar pluck_1 = require(\"../internal/operators/pluck\");\nObject.defineProperty(exports, \"pluck\", {\n  enumerable: true,\n  get: function () {\n    return pluck_1.pluck;\n  }\n});\nvar publish_1 = require(\"../internal/operators/publish\");\nObject.defineProperty(exports, \"publish\", {\n  enumerable: true,\n  get: function () {\n    return publish_1.publish;\n  }\n});\nvar publishBehavior_1 = require(\"../internal/operators/publishBehavior\");\nObject.defineProperty(exports, \"publishBehavior\", {\n  enumerable: true,\n  get: function () {\n    return publishBehavior_1.publishBehavior;\n  }\n});\nvar publishLast_1 = require(\"../internal/operators/publishLast\");\nObject.defineProperty(exports, \"publishLast\", {\n  enumerable: true,\n  get: function () {\n    return publishLast_1.publishLast;\n  }\n});\nvar publishReplay_1 = require(\"../internal/operators/publishReplay\");\nObject.defineProperty(exports, \"publishReplay\", {\n  enumerable: true,\n  get: function () {\n    return publishReplay_1.publishReplay;\n  }\n});\nvar race_1 = require(\"../internal/operators/race\");\nObject.defineProperty(exports, \"race\", {\n  enumerable: true,\n  get: function () {\n    return race_1.race;\n  }\n});\nvar raceWith_1 = require(\"../internal/operators/raceWith\");\nObject.defineProperty(exports, \"raceWith\", {\n  enumerable: true,\n  get: function () {\n    return raceWith_1.raceWith;\n  }\n});\nvar reduce_1 = require(\"../internal/operators/reduce\");\nObject.defineProperty(exports, \"reduce\", {\n  enumerable: true,\n  get: function () {\n    return reduce_1.reduce;\n  }\n});\nvar repeat_1 = require(\"../internal/operators/repeat\");\nObject.defineProperty(exports, \"repeat\", {\n  enumerable: true,\n  get: function () {\n    return repeat_1.repeat;\n  }\n});\nvar repeatWhen_1 = require(\"../internal/operators/repeatWhen\");\nObject.defineProperty(exports, \"repeatWhen\", {\n  enumerable: true,\n  get: function () {\n    return repeatWhen_1.repeatWhen;\n  }\n});\nvar retry_1 = require(\"../internal/operators/retry\");\nObject.defineProperty(exports, \"retry\", {\n  enumerable: true,\n  get: function () {\n    return retry_1.retry;\n  }\n});\nvar retryWhen_1 = require(\"../internal/operators/retryWhen\");\nObject.defineProperty(exports, \"retryWhen\", {\n  enumerable: true,\n  get: function () {\n    return retryWhen_1.retryWhen;\n  }\n});\nvar refCount_1 = require(\"../internal/operators/refCount\");\nObject.defineProperty(exports, \"refCount\", {\n  enumerable: true,\n  get: function () {\n    return refCount_1.refCount;\n  }\n});\nvar sample_1 = require(\"../internal/operators/sample\");\nObject.defineProperty(exports, \"sample\", {\n  enumerable: true,\n  get: function () {\n    return sample_1.sample;\n  }\n});\nvar sampleTime_1 = require(\"../internal/operators/sampleTime\");\nObject.defineProperty(exports, \"sampleTime\", {\n  enumerable: true,\n  get: function () {\n    return sampleTime_1.sampleTime;\n  }\n});\nvar scan_1 = require(\"../internal/operators/scan\");\nObject.defineProperty(exports, \"scan\", {\n  enumerable: true,\n  get: function () {\n    return scan_1.scan;\n  }\n});\nvar sequenceEqual_1 = require(\"../internal/operators/sequenceEqual\");\nObject.defineProperty(exports, \"sequenceEqual\", {\n  enumerable: true,\n  get: function () {\n    return sequenceEqual_1.sequenceEqual;\n  }\n});\nvar share_1 = require(\"../internal/operators/share\");\nObject.defineProperty(exports, \"share\", {\n  enumerable: true,\n  get: function () {\n    return share_1.share;\n  }\n});\nvar shareReplay_1 = require(\"../internal/operators/shareReplay\");\nObject.defineProperty(exports, \"shareReplay\", {\n  enumerable: true,\n  get: function () {\n    return shareReplay_1.shareReplay;\n  }\n});\nvar single_1 = require(\"../internal/operators/single\");\nObject.defineProperty(exports, \"single\", {\n  enumerable: true,\n  get: function () {\n    return single_1.single;\n  }\n});\nvar skip_1 = require(\"../internal/operators/skip\");\nObject.defineProperty(exports, \"skip\", {\n  enumerable: true,\n  get: function () {\n    return skip_1.skip;\n  }\n});\nvar skipLast_1 = require(\"../internal/operators/skipLast\");\nObject.defineProperty(exports, \"skipLast\", {\n  enumerable: true,\n  get: function () {\n    return skipLast_1.skipLast;\n  }\n});\nvar skipUntil_1 = require(\"../internal/operators/skipUntil\");\nObject.defineProperty(exports, \"skipUntil\", {\n  enumerable: true,\n  get: function () {\n    return skipUntil_1.skipUntil;\n  }\n});\nvar skipWhile_1 = require(\"../internal/operators/skipWhile\");\nObject.defineProperty(exports, \"skipWhile\", {\n  enumerable: true,\n  get: function () {\n    return skipWhile_1.skipWhile;\n  }\n});\nvar startWith_1 = require(\"../internal/operators/startWith\");\nObject.defineProperty(exports, \"startWith\", {\n  enumerable: true,\n  get: function () {\n    return startWith_1.startWith;\n  }\n});\nvar subscribeOn_1 = require(\"../internal/operators/subscribeOn\");\nObject.defineProperty(exports, \"subscribeOn\", {\n  enumerable: true,\n  get: function () {\n    return subscribeOn_1.subscribeOn;\n  }\n});\nvar switchAll_1 = require(\"../internal/operators/switchAll\");\nObject.defineProperty(exports, \"switchAll\", {\n  enumerable: true,\n  get: function () {\n    return switchAll_1.switchAll;\n  }\n});\nvar switchMap_1 = require(\"../internal/operators/switchMap\");\nObject.defineProperty(exports, \"switchMap\", {\n  enumerable: true,\n  get: function () {\n    return switchMap_1.switchMap;\n  }\n});\nvar switchMapTo_1 = require(\"../internal/operators/switchMapTo\");\nObject.defineProperty(exports, \"switchMapTo\", {\n  enumerable: true,\n  get: function () {\n    return switchMapTo_1.switchMapTo;\n  }\n});\nvar switchScan_1 = require(\"../internal/operators/switchScan\");\nObject.defineProperty(exports, \"switchScan\", {\n  enumerable: true,\n  get: function () {\n    return switchScan_1.switchScan;\n  }\n});\nvar take_1 = require(\"../internal/operators/take\");\nObject.defineProperty(exports, \"take\", {\n  enumerable: true,\n  get: function () {\n    return take_1.take;\n  }\n});\nvar takeLast_1 = require(\"../internal/operators/takeLast\");\nObject.defineProperty(exports, \"takeLast\", {\n  enumerable: true,\n  get: function () {\n    return takeLast_1.takeLast;\n  }\n});\nvar takeUntil_1 = require(\"../internal/operators/takeUntil\");\nObject.defineProperty(exports, \"takeUntil\", {\n  enumerable: true,\n  get: function () {\n    return takeUntil_1.takeUntil;\n  }\n});\nvar takeWhile_1 = require(\"../internal/operators/takeWhile\");\nObject.defineProperty(exports, \"takeWhile\", {\n  enumerable: true,\n  get: function () {\n    return takeWhile_1.takeWhile;\n  }\n});\nvar tap_1 = require(\"../internal/operators/tap\");\nObject.defineProperty(exports, \"tap\", {\n  enumerable: true,\n  get: function () {\n    return tap_1.tap;\n  }\n});\nvar throttle_1 = require(\"../internal/operators/throttle\");\nObject.defineProperty(exports, \"throttle\", {\n  enumerable: true,\n  get: function () {\n    return throttle_1.throttle;\n  }\n});\nvar throttleTime_1 = require(\"../internal/operators/throttleTime\");\nObject.defineProperty(exports, \"throttleTime\", {\n  enumerable: true,\n  get: function () {\n    return throttleTime_1.throttleTime;\n  }\n});\nvar throwIfEmpty_1 = require(\"../internal/operators/throwIfEmpty\");\nObject.defineProperty(exports, \"throwIfEmpty\", {\n  enumerable: true,\n  get: function () {\n    return throwIfEmpty_1.throwIfEmpty;\n  }\n});\nvar timeInterval_1 = require(\"../internal/operators/timeInterval\");\nObject.defineProperty(exports, \"timeInterval\", {\n  enumerable: true,\n  get: function () {\n    return timeInterval_1.timeInterval;\n  }\n});\nvar timeout_1 = require(\"../internal/operators/timeout\");\nObject.defineProperty(exports, \"timeout\", {\n  enumerable: true,\n  get: function () {\n    return timeout_1.timeout;\n  }\n});\nvar timeoutWith_1 = require(\"../internal/operators/timeoutWith\");\nObject.defineProperty(exports, \"timeoutWith\", {\n  enumerable: true,\n  get: function () {\n    return timeoutWith_1.timeoutWith;\n  }\n});\nvar timestamp_1 = require(\"../internal/operators/timestamp\");\nObject.defineProperty(exports, \"timestamp\", {\n  enumerable: true,\n  get: function () {\n    return timestamp_1.timestamp;\n  }\n});\nvar toArray_1 = require(\"../internal/operators/toArray\");\nObject.defineProperty(exports, \"toArray\", {\n  enumerable: true,\n  get: function () {\n    return toArray_1.toArray;\n  }\n});\nvar window_1 = require(\"../internal/operators/window\");\nObject.defineProperty(exports, \"window\", {\n  enumerable: true,\n  get: function () {\n    return window_1.window;\n  }\n});\nvar windowCount_1 = require(\"../internal/operators/windowCount\");\nObject.defineProperty(exports, \"windowCount\", {\n  enumerable: true,\n  get: function () {\n    return windowCount_1.windowCount;\n  }\n});\nvar windowTime_1 = require(\"../internal/operators/windowTime\");\nObject.defineProperty(exports, \"windowTime\", {\n  enumerable: true,\n  get: function () {\n    return windowTime_1.windowTime;\n  }\n});\nvar windowToggle_1 = require(\"../internal/operators/windowToggle\");\nObject.defineProperty(exports, \"windowToggle\", {\n  enumerable: true,\n  get: function () {\n    return windowToggle_1.windowToggle;\n  }\n});\nvar windowWhen_1 = require(\"../internal/operators/windowWhen\");\nObject.defineProperty(exports, \"windowWhen\", {\n  enumerable: true,\n  get: function () {\n    return windowWhen_1.windowWhen;\n  }\n});\nvar withLatestFrom_1 = require(\"../internal/operators/withLatestFrom\");\nObject.defineProperty(exports, \"withLatestFrom\", {\n  enumerable: true,\n  get: function () {\n    return withLatestFrom_1.withLatestFrom;\n  }\n});\nvar zip_1 = require(\"../internal/operators/zip\");\nObject.defineProperty(exports, \"zip\", {\n  enumerable: true,\n  get: function () {\n    return zip_1.zip;\n  }\n});\nvar zipAll_1 = require(\"../internal/operators/zipAll\");\nObject.defineProperty(exports, \"zipAll\", {\n  enumerable: true,\n  get: function () {\n    return zipAll_1.zipAll;\n  }\n});\nvar zipWith_1 = require(\"../internal/operators/zipWith\");\nObject.defineProperty(exports, \"zipWith\", {\n  enumerable: true,\n  get: function () {\n    return zipWith_1.zipWith;\n  }\n});\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\n/**\n * The default equality function used for `signal` and `computed`, which uses referential equality.\n */\nfunction defaultEquals(a, b) {\n  return Object.is(a, b);\n}\n\n/**\n * The currently active consumer `ReactiveNode`, if running code in a reactive context.\n *\n * Change this via `setActiveConsumer`.\n */\nlet activeConsumer = null;\nlet inNotificationPhase = false;\n/**\n * Global epoch counter. Incremented whenever a source signal is set.\n */\nlet epoch = 1;\n/**\n * Symbol used to tell `Signal`s apart from other functions.\n *\n * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.\n */\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n  const prev = activeConsumer;\n  activeConsumer = consumer;\n  return prev;\n}\nfunction getActiveConsumer() {\n  return activeConsumer;\n}\nfunction isInNotificationPhase() {\n  return inNotificationPhase;\n}\nfunction isReactive(value) {\n  return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n  version: 0,\n  lastCleanEpoch: 0,\n  dirty: false,\n  producerNode: undefined,\n  producerLastReadVersion: undefined,\n  producerIndexOfThis: undefined,\n  nextProducerIndex: 0,\n  liveConsumerNode: undefined,\n  liveConsumerIndexOfThis: undefined,\n  consumerAllowSignalWrites: false,\n  consumerIsAlwaysLive: false,\n  producerMustRecompute: () => false,\n  producerRecomputeValue: () => {},\n  consumerMarkedDirty: () => {},\n  consumerOnSignalRead: () => {}\n};\n/**\n * Called by implementations when a producer's signal is read.\n */\nfunction producerAccessed(node) {\n  if (inNotificationPhase) {\n    throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n  }\n  if (activeConsumer === null) {\n    // Accessed outside of a reactive context, so nothing to record.\n    return;\n  }\n  activeConsumer.consumerOnSignalRead(node);\n  // This producer is the `idx`th dependency of `activeConsumer`.\n  const idx = activeConsumer.nextProducerIndex++;\n  assertConsumerNode(activeConsumer);\n  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {\n    // There's been a change in producers since the last execution of `activeConsumer`.\n    // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and\n    // replaced with `this`.\n    //\n    // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in\n    // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need\n    // to remove it from the stale producer's `liveConsumer`s.\n    if (consumerIsLive(activeConsumer)) {\n      const staleProducer = activeConsumer.producerNode[idx];\n      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);\n      // At this point, the only record of `staleProducer` is the reference at\n      // `activeConsumer.producerNode[idx]` which will be overwritten below.\n    }\n  }\n  if (activeConsumer.producerNode[idx] !== node) {\n    // We're a new dependency of the consumer (at `idx`).\n    activeConsumer.producerNode[idx] = node;\n    // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a\n    // placeholder value.\n    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;\n  }\n  activeConsumer.producerLastReadVersion[idx] = node.version;\n}\n/**\n * Increment the global epoch counter.\n *\n * Called by source producers (that is, not computeds) whenever their values change.\n */\nfunction producerIncrementEpoch() {\n  epoch++;\n}\n/**\n * Ensure this producer's `version` is up-to-date.\n */\nfunction producerUpdateValueVersion(node) {\n  if (consumerIsLive(node) && !node.dirty) {\n    // A live consumer will be marked dirty by producers, so a clean state means that its version\n    // is guaranteed to be up-to-date.\n    return;\n  }\n  if (!node.dirty && node.lastCleanEpoch === epoch) {\n    // Even non-live consumers can skip polling if they previously found themselves to be clean at\n    // the current epoch, since their dependencies could not possibly have changed (such a change\n    // would've increased the epoch).\n    return;\n  }\n  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n    // None of our producers report a change since the last time they were read, so no\n    // recomputation of our value is necessary, and we can consider ourselves clean.\n    producerMarkClean(node);\n    return;\n  }\n  node.producerRecomputeValue(node);\n  // After recomputing the value, we're no longer dirty.\n  producerMarkClean(node);\n}\n/**\n * Propagate a dirty notification to live consumers of this producer.\n */\nfunction producerNotifyConsumers(node) {\n  if (node.liveConsumerNode === undefined) {\n    return;\n  }\n  // Prevent signal reads when we're updating the graph\n  const prev = inNotificationPhase;\n  inNotificationPhase = true;\n  try {\n    for (const consumer of node.liveConsumerNode) {\n      if (!consumer.dirty) {\n        consumerMarkDirty(consumer);\n      }\n    }\n  } finally {\n    inNotificationPhase = prev;\n  }\n}\n/**\n * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,\n * based on the current consumer context.\n */\nfunction producerUpdatesAllowed() {\n  return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n  node.dirty = true;\n  producerNotifyConsumers(node);\n  node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n  node.dirty = false;\n  node.lastCleanEpoch = epoch;\n}\n/**\n * Prepare this consumer to run a computation in its reactive context.\n *\n * Must be called by subclasses which represent reactive computations, before those computations\n * begin.\n */\nfunction consumerBeforeComputation(node) {\n  node && (node.nextProducerIndex = 0);\n  return setActiveConsumer(node);\n}\n/**\n * Finalize this consumer's state after a reactive computation has run.\n *\n * Must be called by subclasses which represent reactive computations, after those computations\n * have finished.\n */\nfunction consumerAfterComputation(node, prevConsumer) {\n  setActiveConsumer(prevConsumer);\n  if (!node || node.producerNode === undefined || node.producerIndexOfThis === undefined || node.producerLastReadVersion === undefined) {\n    return;\n  }\n  if (consumerIsLive(node)) {\n    // For live consumers, we need to remove the producer -> consumer edge for any stale producers\n    // which weren't dependencies after the recomputation.\n    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate the producer tracking arrays.\n  // Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but\n  // benchmarking has shown that individual pop operations are faster.\n  while (node.producerNode.length > node.nextProducerIndex) {\n    node.producerNode.pop();\n    node.producerLastReadVersion.pop();\n    node.producerIndexOfThis.pop();\n  }\n}\n/**\n * Determine whether this consumer has any dependencies which have changed since the last time\n * they were read.\n */\nfunction consumerPollProducersForChange(node) {\n  assertConsumerNode(node);\n  // Poll producers for change.\n  for (let i = 0; i < node.producerNode.length; i++) {\n    const producer = node.producerNode[i];\n    const seenVersion = node.producerLastReadVersion[i];\n    // First check the versions. A mismatch means that the producer's value is known to have\n    // changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n    // The producer's version is the same as the last time we read it, but it might itself be\n    // stale. Force the producer to recompute its version (calculating a new value if necessary).\n    producerUpdateValueVersion(producer);\n    // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the\n    // versions still match then it has not changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Disconnect this consumer from the graph.\n */\nfunction consumerDestroy(node) {\n  assertConsumerNode(node);\n  if (consumerIsLive(node)) {\n    // Drop all connections from the graph to this node.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate all the arrays to drop all connection from this node to the graph.\n  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;\n  if (node.liveConsumerNode) {\n    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;\n  }\n}\n/**\n * Add `consumer` as a live consumer of this node.\n *\n * Note that this operation is potentially transitive. If this node becomes live, then it becomes\n * a live consumer of all of its current producers.\n */\nfunction producerAddLiveConsumer(node, consumer, indexOfThis) {\n  assertProducerNode(node);\n  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {\n    // When going from 0 to 1 live consumers, we become a live consumer to our producers.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);\n    }\n  }\n  node.liveConsumerIndexOfThis.push(indexOfThis);\n  return node.liveConsumerNode.push(consumer) - 1;\n}\n/**\n * Remove the live consumer at `idx`.\n */\nfunction producerRemoveLiveConsumerAtIndex(node, idx) {\n  assertProducerNode(node);\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {\n    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);\n  }\n  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {\n    // When removing the last live consumer, we will no longer be live. We need to remove\n    // ourselves from our producers' tracking (which may cause consumer-producers to lose\n    // liveness as well).\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single\n  // live consumer, this is a no-op.\n  const lastIdx = node.liveConsumerNode.length - 1;\n  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];\n  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];\n  // Truncate the array.\n  node.liveConsumerNode.length--;\n  node.liveConsumerIndexOfThis.length--;\n  // If the index is still valid, then we need to fix the index pointer from the producer to this\n  // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).\n  if (idx < node.liveConsumerNode.length) {\n    const idxProducer = node.liveConsumerIndexOfThis[idx];\n    const consumer = node.liveConsumerNode[idx];\n    assertConsumerNode(consumer);\n    consumer.producerIndexOfThis[idxProducer] = idx;\n  }\n}\nfunction consumerIsLive(node) {\n  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;\n}\nfunction assertConsumerNode(node) {\n  node.producerNode ??= [];\n  node.producerIndexOfThis ??= [];\n  node.producerLastReadVersion ??= [];\n}\nfunction assertProducerNode(node) {\n  node.liveConsumerNode ??= [];\n  node.liveConsumerIndexOfThis ??= [];\n}\nfunction isConsumerNode(node) {\n  return node.producerNode !== undefined;\n}\n\n/**\n * Create a computed signal which derives a reactive value from an expression.\n */\nfunction createComputed(computation) {\n  const node = Object.create(COMPUTED_NODE);\n  node.computation = computation;\n  const computed = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion(node);\n    // Record that someone looked at this signal.\n    producerAccessed(node);\n    if (node.value === ERRORED) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  computed[SIGNAL] = node;\n  return computed;\n}\n/**\n * A dedicated symbol used before a computed value has been calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    value: UNSET,\n    dirty: true,\n    error: null,\n    equal: defaultEquals,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET || node.value === COMPUTING;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING;\n      const prevConsumer = consumerBeforeComputation(node);\n      let newValue;\n      try {\n        newValue = node.computation();\n      } catch (err) {\n        newValue = ERRORED;\n        node.error = err;\n      } finally {\n        consumerAfterComputation(node, prevConsumer);\n      }\n      if (oldValue !== UNSET && oldValue !== ERRORED && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\nfunction defaultThrowError() {\n  throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError() {\n  throwInvalidWriteToSignalErrorFn();\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n  throwInvalidWriteToSignalErrorFn = fn;\n}\n\n/**\n * If set, called after `WritableSignal`s are updated.\n *\n * This hook can be used to achieve various effects, such as running effects synchronously as part\n * of setting a signal.\n */\nlet postSignalSetFn = null;\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction createSignal(initialValue) {\n  const node = Object.create(SIGNAL_NODE);\n  node.value = initialValue;\n  const getter = () => {\n    producerAccessed(node);\n    return node.value;\n  };\n  getter[SIGNAL] = node;\n  return getter;\n}\nfunction setPostSignalSetFn(fn) {\n  const prev = postSignalSetFn;\n  postSignalSetFn = fn;\n  return prev;\n}\nfunction signalGetFn() {\n  producerAccessed(this);\n  return this.value;\n}\nfunction signalSetFn(node, newValue) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  if (!node.equal(node.value, newValue)) {\n    node.value = newValue;\n    signalValueChanged(node);\n  }\n}\nfunction signalUpdateFn(node, updater) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn() {\n  postSignalSetFn?.();\n}\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    equal: defaultEquals,\n    value: undefined\n  };\n})();\nfunction signalValueChanged(node) {\n  node.version++;\n  producerIncrementEpoch();\n  producerNotifyConsumers(node);\n  postSignalSetFn?.();\n}\nfunction createWatch(fn, schedule, allowSignalWrites) {\n  const node = Object.create(WATCH_NODE);\n  if (allowSignalWrites) {\n    node.consumerAllowSignalWrites = true;\n  }\n  node.fn = fn;\n  node.schedule = schedule;\n  const registerOnCleanup = cleanupFn => {\n    node.cleanupFn = cleanupFn;\n  };\n  function isWatchNodeDestroyed(node) {\n    return node.fn === null && node.schedule === null;\n  }\n  function destroyWatchNode(node) {\n    if (!isWatchNodeDestroyed(node)) {\n      consumerDestroy(node); // disconnect watcher from the reactive graph\n      node.cleanupFn();\n      // nullify references to the integration functions to mark node as destroyed\n      node.fn = null;\n      node.schedule = null;\n      node.cleanupFn = NOOP_CLEANUP_FN;\n    }\n  }\n  const run = () => {\n    if (node.fn === null) {\n      // trying to run a destroyed watch is noop\n      return;\n    }\n    if (isInNotificationPhase()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    node.dirty = false;\n    if (node.hasRun && !consumerPollProducersForChange(node)) {\n      return;\n    }\n    node.hasRun = true;\n    const prevConsumer = consumerBeforeComputation(node);\n    try {\n      node.cleanupFn();\n      node.cleanupFn = NOOP_CLEANUP_FN;\n      node.fn(registerOnCleanup);\n    } finally {\n      consumerAfterComputation(node, prevConsumer);\n    }\n  };\n  node.ref = {\n    notify: () => consumerMarkDirty(node),\n    run,\n    cleanup: () => node.cleanupFn(),\n    destroy: () => destroyWatchNode(node),\n    [SIGNAL]: node\n  };\n  return node.ref;\n}\nconst NOOP_CLEANUP_FN = () => {};\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst WATCH_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    consumerIsAlwaysLive: true,\n    consumerAllowSignalWrites: false,\n    consumerMarkedDirty: node => {\n      if (node.schedule !== null) {\n        node.schedule(node.ref);\n      }\n    },\n    hasRun: false,\n    cleanupFn: NOOP_CLEANUP_FN\n  };\n})();\nfunction setAlternateWeakRefImpl(impl) {\n  // TODO: remove this function\n}\nexport { REACTIVE_NODE, SIGNAL, SIGNAL_NODE, consumerAfterComputation, consumerBeforeComputation, consumerDestroy, consumerMarkDirty, consumerPollProducersForChange, createComputed, createSignal, createWatch, defaultEquals, getActiveConsumer, isInNotificationPhase, isReactive, producerAccessed, producerIncrementEpoch, producerMarkClean, producerNotifyConsumers, producerUpdateValueVersion, producerUpdatesAllowed, runPostSignalSetFn, setActiveConsumer, setAlternateWeakRefImpl, setPostSignalSetFn, setThrowInvalidWriteToSignalError, signalSetFn, signalUpdateFn };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, producerUpdateValueVersion as producerUpdateValueVersion$1, producerMarkClean as producerMarkClean$1, defaultEquals as defaultEquals$1, createWatch as createWatch$1, isInNotificationPhase as isInNotificationPhase$1 } from '@angular/core/primitives/signals';\nexport { SIGNAL as ɵSIGNAL } from '@angular/core/primitives/signals';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { Attribute as Attribute$1, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, clearAppScopedEarlyEventContract, EventDispatcher, registerDispatcher, isEarlyEventType, isCaptureEventType, EventPhase } from '@angular/core/primitives/event-dispatch';\nimport { map } from 'rxjs/operators';\n\n/**\n * Base URL for the error details page.\n *\n * Keep this constant in sync across:\n *  - packages/compiler-cli/src/ngtsc/diagnostics/src/error_details_base_url.ts\n *  - packages/core/src/error_details_base_url.ts\n */\nconst ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.dev/errors';\n/**\n * URL for the XSS security documentation.\n */\nconst XSS_SECURITY_URL = 'https://g.co/ng/security#xss';\n\n/**\n * Class that represents a runtime error.\n * Formats and outputs the error message in a consistent way.\n *\n * Example:\n * ```ts\n *  throw new RuntimeError(\n *    RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,\n *    ngDevMode && 'Injector has already been destroyed.');\n * ```\n *\n * Note: the `message` argument contains a descriptive error message as a string in development\n * mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the\n * `message` argument becomes `false`, thus we account for it in the typings and the runtime\n * logic.\n */\nclass RuntimeError extends Error {\n  code;\n  constructor(code, message) {\n    super(formatRuntimeError(code, message));\n    this.code = code;\n  }\n}\n/**\n * Called to format a runtime error.\n * See additional info on the `message` argument type in the `RuntimeError` class description.\n */\nfunction formatRuntimeError(code, message) {\n  // Error code might be a negative number, which is a special marker that instructs the logic to\n  // generate a link to the error details page on angular.io.\n  // We also prepend `0` to non-compile-time errors.\n  const fullCode = `NG0${Math.abs(code)}`;\n  let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;\n  if (ngDevMode && code < 0) {\n    const addPeriodSeparator = !errorMessage.match(/[.,;!?\\n]$/);\n    const separator = addPeriodSeparator ? '.' : '';\n    errorMessage = `${errorMessage}${separator} Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;\n  }\n  return errorMessage;\n}\nconst REQUIRED_UNSET_VALUE = /* @__PURE__ */Symbol('InputSignalNode#UNSET');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst INPUT_SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...SIGNAL_NODE$1,\n    transformFn: undefined,\n    applyValueToInputSignal(node, value) {\n      signalSetFn$1(node, value);\n    }\n  };\n})();\nconst ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */Symbol();\nconst ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */Symbol();\n/**\n * Creates an input signal.\n *\n * @param initialValue The initial value.\n *   Can be set to {@link REQUIRED_UNSET_VALUE} for required inputs.\n * @param options Additional options for the input. e.g. a transform, or an alias.\n */\nfunction createInputSignal(initialValue, options) {\n  const node = Object.create(INPUT_SIGNAL_NODE);\n  node.value = initialValue;\n  // Perf note: Always set `transformFn` here to ensure that `node` always\n  // has the same v8 class shape, allowing monomorphic reads on input signals.\n  node.transformFn = options?.transform;\n  function inputValueFn() {\n    // Record that someone looked at this signal.\n    producerAccessed$1(node);\n    if (node.value === REQUIRED_UNSET_VALUE) {\n      throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, ngDevMode && 'Input is required but no value is available yet.');\n    }\n    return node.value;\n  }\n  inputValueFn[SIGNAL$1] = node;\n  if (ngDevMode) {\n    inputValueFn.toString = () => `[Input Signal: ${inputValueFn()}]`;\n    node.debugName = options?.debugName;\n  }\n  return inputValueFn;\n}\n\n/**\n * Convince closure compiler that the wrapped function has no side-effects.\n *\n * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to\n * allow us to execute a function but have closure compiler mark the call as no-side-effects.\n * It is important that the return value for the `noSideEffects` function be assigned\n * to something which is retained otherwise the call to `noSideEffects` will be removed by closure\n * compiler.\n */\nfunction noSideEffects(fn) {\n  return {\n    toString: fn\n  }.toString();\n}\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\n/**\n * @suppress {globalThis}\n */\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function DecoratorFactory(...args) {\n      if (this instanceof DecoratorFactory) {\n        metaCtor.call(this, ...args);\n        return this;\n      }\n      const annotationInstance = new DecoratorFactory(...args);\n      return function TypeDecorator(cls) {\n        if (typeFn) typeFn(cls, ...args);\n        // Use of Object.defineProperty is important since it creates non-enumerable property which\n        // prevents the property is copied during subclassing.\n        const annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {\n          value: []\n        })[ANNOTATIONS];\n        annotations.push(annotationInstance);\n        if (additionalProcessing) additionalProcessing(cls);\n        return cls;\n      };\n    }\n    if (parentClass) {\n      DecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    DecoratorFactory.prototype.ngMetadataName = name;\n    DecoratorFactory.annotationCls = DecoratorFactory;\n    return DecoratorFactory;\n  });\n}\nfunction makeMetadataCtor(props) {\n  return function ctor(...args) {\n    if (props) {\n      const values = props(...args);\n      for (const propName in values) {\n        this[propName] = values[propName];\n      }\n    }\n  };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function ParamDecoratorFactory(...args) {\n      if (this instanceof ParamDecoratorFactory) {\n        metaCtor.apply(this, args);\n        return this;\n      }\n      const annotationInstance = new ParamDecoratorFactory(...args);\n      ParamDecorator.annotation = annotationInstance;\n      return ParamDecorator;\n      function ParamDecorator(cls, unusedKey, index) {\n        // Use of Object.defineProperty is important since it creates non-enumerable property which\n        // prevents the property is copied during subclassing.\n        const parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {\n          value: []\n        })[PARAMETERS];\n        // there might be gaps if some in between parameters do not have annotations.\n        // we pad with nulls.\n        while (parameters.length <= index) {\n          parameters.push(null);\n        }\n        (parameters[index] = parameters[index] || []).push(annotationInstance);\n        return cls;\n      }\n    }\n    if (parentClass) {\n      ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    ParamDecoratorFactory.prototype.ngMetadataName = name;\n    ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n    return ParamDecoratorFactory;\n  });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n  return noSideEffects(() => {\n    const metaCtor = makeMetadataCtor(props);\n    function PropDecoratorFactory(...args) {\n      if (this instanceof PropDecoratorFactory) {\n        metaCtor.apply(this, args);\n        return this;\n      }\n      const decoratorInstance = new PropDecoratorFactory(...args);\n      function PropDecorator(target, name) {\n        // target is undefined with standard decorators. This case is not supported and will throw\n        // if this decorator is used in JIT mode with standard decorators.\n        if (target === undefined) {\n          throw new Error('Standard Angular field decorators are not supported in JIT mode.');\n        }\n        const constructor = target.constructor;\n        // Use of Object.defineProperty is important because it creates a non-enumerable property\n        // which prevents the property from being copied during subclassing.\n        const meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {\n          value: {}\n        })[PROP_METADATA];\n        meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n        meta[name].unshift(decoratorInstance);\n        if (additionalProcessing) additionalProcessing(target, name, ...args);\n      }\n      return PropDecorator;\n    }\n    if (parentClass) {\n      PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n    }\n    PropDecoratorFactory.prototype.ngMetadataName = name;\n    PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n    return PropDecoratorFactory;\n  });\n}\nconst _global = globalThis;\nfunction ngDevModeResetPerfCounters() {\n  const locationString = typeof location !== 'undefined' ? location.toString() : '';\n  const newCounters = {\n    namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,\n    firstCreatePass: 0,\n    tNode: 0,\n    tView: 0,\n    rendererCreateTextNode: 0,\n    rendererSetText: 0,\n    rendererCreateElement: 0,\n    rendererAddEventListener: 0,\n    rendererSetAttribute: 0,\n    rendererRemoveAttribute: 0,\n    rendererSetProperty: 0,\n    rendererSetClassName: 0,\n    rendererAddClass: 0,\n    rendererRemoveClass: 0,\n    rendererSetStyle: 0,\n    rendererRemoveStyle: 0,\n    rendererDestroy: 0,\n    rendererDestroyNode: 0,\n    rendererMoveNode: 0,\n    rendererRemoveNode: 0,\n    rendererAppendChild: 0,\n    rendererInsertBefore: 0,\n    rendererCreateComment: 0,\n    hydratedNodes: 0,\n    hydratedComponents: 0,\n    dehydratedViewsRemoved: 0,\n    dehydratedViewsCleanupRuns: 0,\n    componentsSkippedHydration: 0,\n    deferBlocksWithIncrementalHydration: 0\n  };\n  // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.\n  const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n  if (!allowNgDevModeTrue) {\n    _global['ngDevMode'] = false;\n  } else {\n    if (typeof _global['ngDevMode'] !== 'object') {\n      _global['ngDevMode'] = {};\n    }\n    Object.assign(_global['ngDevMode'], newCounters);\n  }\n  return newCounters;\n}\n/**\n * This function checks to see if the `ngDevMode` has been set. If yes,\n * then we honor it, otherwise we default to dev mode with additional checks.\n *\n * The idea is that unless we are doing production build where we explicitly\n * set `ngDevMode == false` we should be helping the developer by providing\n * as much early warning and errors as possible.\n *\n * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions\n * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode\n * is defined for the entire instruction set.\n *\n * When checking `ngDevMode` on toplevel, always init it before referencing it\n * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can\n *  get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.\n *\n * Details on possible values for `ngDevMode` can be found on its docstring.\n *\n * NOTE:\n * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nfunction initNgDevMode() {\n  // The below checks are to ensure that calling `initNgDevMode` multiple times does not\n  // reset the counters.\n  // If the `ngDevMode` is not an object, then it means we have not created the perf counters\n  // yet.\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (typeof ngDevMode !== 'object' || Object.keys(ngDevMode).length === 0) {\n      ngDevModeResetPerfCounters();\n    }\n    return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n  }\n  return false;\n}\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n  for (let key in objWithPropertyToExtract) {\n    if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n      return key;\n    }\n  }\n  throw Error('Could not find renamed property on target object.');\n}\n/**\n * Sets properties on a target object from a source object, but only if\n * the property doesn't already exist on the target object.\n * @param target The target to set properties on\n * @param source The source of the property keys and values to set\n */\nfunction fillProperties(target, source) {\n  for (const key in source) {\n    if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n      target[key] = source[key];\n    }\n  }\n}\nfunction stringify(token) {\n  if (typeof token === 'string') {\n    return token;\n  }\n  if (Array.isArray(token)) {\n    return '[' + token.map(stringify).join(', ') + ']';\n  }\n  if (token == null) {\n    return '' + token;\n  }\n  if (token.overriddenName) {\n    return `${token.overriddenName}`;\n  }\n  if (token.name) {\n    return `${token.name}`;\n  }\n  const res = token.toString();\n  if (res == null) {\n    return '' + res;\n  }\n  const newLineIndex = res.indexOf('\\n');\n  return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n}\n/**\n * Concatenates two strings with separator, allocating new strings only when necessary.\n *\n * @param before before string.\n * @param separator separator string.\n * @param after after string.\n * @returns concatenated string.\n */\nfunction concatStringsWithSpace(before, after) {\n  return before == null || before === '' ? after === null ? '' : after : after == null || after === '' ? before : before + ' ' + after;\n}\n/**\n * Ellipses the string in the middle when longer than the max length\n *\n * @param string\n * @param maxLength of the output string\n * @returns ellipsed string with ... in the middle\n */\nfunction truncateMiddle(str, maxLength = 100) {\n  if (!str || maxLength < 1 || str.length <= maxLength) return str;\n  if (maxLength == 1) return str.substring(0, 1) + '...';\n  const halfLimit = Math.round(maxLength / 2);\n  return str.substring(0, halfLimit) + '...' + str.substring(str.length - halfLimit);\n}\nconst __forward_ref__ = getClosureSafeProperty({\n  __forward_ref__: getClosureSafeProperty\n});\n/**\n * Allows to refer to references which are not yet defined.\n *\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\n * DI is declared, but not yet defined. It is also used when the `token` which we use when creating\n * a query is not yet defined.\n *\n * `forwardRef` is also used to break circularities in standalone components imports.\n *\n * @usageNotes\n * ### Circular dependency example\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\n *\n * ### Circular standalone reference import example\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   imports: [ChildComponent],\n *   selector: 'app-parent',\n *   template: `<app-child [hideParent]=\"hideParent\"></app-child>`,\n * })\n * export class ParentComponent {\n *   @Input() hideParent: boolean;\n * }\n *\n *\n * @Component({\n *   standalone: true,\n *   imports: [CommonModule, forwardRef(() => ParentComponent)],\n *   selector: 'app-child',\n *   template: `<app-parent *ngIf=\"!hideParent\"></app-parent>`,\n * })\n * export class ChildComponent {\n *   @Input() hideParent: boolean;\n * }\n * ```\n *\n * @publicApi\n */\nfunction forwardRef(forwardRefFn) {\n  forwardRefFn.__forward_ref__ = forwardRef;\n  forwardRefFn.toString = function () {\n    return stringify(this());\n  };\n  return forwardRefFn;\n}\n/**\n * Lazily retrieves the reference value from a forwardRef.\n *\n * Acts as the identity function when given a non-forward-ref value.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\n *\n * @see {@link forwardRef}\n * @publicApi\n */\nfunction resolveForwardRef(type) {\n  return isForwardRef(type) ? type() : type;\n}\n/** Checks whether a function is wrapped by a `forwardRef`. */\nfunction isForwardRef(fn) {\n  return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;\n}\n\n// The functions in this file verify that the assumptions we are making\nfunction assertNumber(actual, msg) {\n  if (!(typeof actual === 'number')) {\n    throwError(msg, typeof actual, 'number', '===');\n  }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n  assertNumber(actual, 'Expected a number');\n  assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n  assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n  if (!(typeof actual === 'string')) {\n    throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n  }\n}\nfunction assertFunction(actual, msg) {\n  if (!(typeof actual === 'function')) {\n    throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n  }\n}\nfunction assertEqual(actual, expected, msg) {\n  if (!(actual == expected)) {\n    throwError(msg, actual, expected, '==');\n  }\n}\nfunction assertNotEqual(actual, expected, msg) {\n  if (!(actual != expected)) {\n    throwError(msg, actual, expected, '!=');\n  }\n}\nfunction assertSame(actual, expected, msg) {\n  if (!(actual === expected)) {\n    throwError(msg, actual, expected, '===');\n  }\n}\nfunction assertNotSame(actual, expected, msg) {\n  if (!(actual !== expected)) {\n    throwError(msg, actual, expected, '!==');\n  }\n}\nfunction assertLessThan(actual, expected, msg) {\n  if (!(actual < expected)) {\n    throwError(msg, actual, expected, '<');\n  }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n  if (!(actual <= expected)) {\n    throwError(msg, actual, expected, '<=');\n  }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n  if (!(actual > expected)) {\n    throwError(msg, actual, expected, '>');\n  }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n  if (!(actual >= expected)) {\n    throwError(msg, actual, expected, '>=');\n  }\n}\nfunction assertNotDefined(actual, msg) {\n  if (actual != null) {\n    throwError(msg, actual, null, '==');\n  }\n}\nfunction assertDefined(actual, msg) {\n  if (actual == null) {\n    throwError(msg, actual, null, '!=');\n  }\n}\nfunction throwError(msg, actual, expected, comparison) {\n  throw new Error(`ASSERTION ERROR: ${msg}` + (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n  if (!(node instanceof Node)) {\n    throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n  }\n}\nfunction assertElement(node) {\n  if (!(node instanceof Element)) {\n    throwError(`The provided value must be an element but got ${stringify(node)}`);\n  }\n}\nfunction assertIndexInRange(arr, index) {\n  assertDefined(arr, 'Array must be defined.');\n  const maxLen = arr.length;\n  if (index < 0 || index >= maxLen) {\n    throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n  }\n}\nfunction assertOneOf(value, ...validValues) {\n  if (validValues.indexOf(value) !== -1) return true;\n  throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\nfunction assertNotReactive(fn) {\n  if (getActiveConsumer$1() !== null) {\n    throwError(`${fn}() should never be called in a reactive context.`);\n  }\n}\n\n/**\n * Construct an injectable definition which defines how a token will be constructed by the DI\n * system, and in which injectors (if any) it will be available.\n *\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\n * `InjectableType`.\n *\n * Options:\n * * `providedIn` determines which injectors will include the injectable, by either associating it\n *   with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\n *   provided in the `'root'` injector, which will be the application-level injector in most apps.\n * * `factory` gives the zero argument function which will create an instance of the injectable.\n *   The factory can call [`inject`](api/core/inject) to access the `Injector` and request injection\n * of dependencies.\n *\n * @codeGenApi\n * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.\n */\nfunction ɵɵdefineInjectable(opts) {\n  return {\n    token: opts.token,\n    providedIn: opts.providedIn || null,\n    factory: opts.factory,\n    value: undefined\n  };\n}\n/**\n * @deprecated in v8, delete after v10. This API should be used only by generated code, and that\n * code should now use ɵɵdefineInjectable instead.\n * @publicApi\n */\nconst defineInjectable = ɵɵdefineInjectable;\n/**\n * Construct an `InjectorDef` which configures an injector.\n *\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\n * `InjectorType`.\n *\n * Options:\n *\n * * `providers`: an optional array of providers to add to the injector. Each provider must\n *   either have a factory or point to a type which has a `ɵprov` static property (the\n *   type must be an `InjectableType`).\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\n *   whose providers will also be added to the injector. Locally provided types will override\n *   providers from imports.\n *\n * @codeGenApi\n */\nfunction ɵɵdefineInjector(options) {\n  return {\n    providers: options.providers || [],\n    imports: options.imports || []\n  };\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading\n * inherited value.\n *\n * @param type A type which may have its own (non-inherited) `ɵprov`.\n */\nfunction getInjectableDef(type) {\n  return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);\n}\nfunction isInjectable(type) {\n  return getInjectableDef(type) !== null;\n}\n/**\n * Return definition only if it is defined directly on `type` and is not inherited from a base\n * class of `type`.\n */\nfunction getOwnDefinition(type, field) {\n  return type.hasOwnProperty(field) ? type[field] : null;\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.\n *\n * @param type A type which may have `ɵprov`, via inheritance.\n *\n * @deprecated Will be removed in a future version of Angular, where an error will occur in the\n *     scenario if we find the `ɵprov` on an ancestor only.\n */\nfunction getInheritedInjectableDef(type) {\n  const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);\n  if (def) {\n    ngDevMode && console.warn(`DEPRECATED: DI is instantiating a token \"${type.name}\" that inherits its @Injectable decorator but does not provide one itself.\\n` + `This will become an error in a future version of Angular. Please add @Injectable() to the \"${type.name}\" class.`);\n    return def;\n  } else {\n    return null;\n  }\n}\n/**\n * Read the injector def type in a way which is immune to accidentally reading inherited value.\n *\n * @param type type which may have an injector def (`ɵinj`)\n */\nfunction getInjectorDef(type) {\n  return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ? type[NG_INJ_DEF] : null;\n}\nconst NG_PROV_DEF = getClosureSafeProperty({\n  ɵprov: getClosureSafeProperty\n});\nconst NG_INJ_DEF = getClosureSafeProperty({\n  ɵinj: getClosureSafeProperty\n});\n// We need to keep these around so we can read off old defs if new defs are unavailable\nconst NG_INJECTABLE_DEF = getClosureSafeProperty({\n  ngInjectableDef: getClosureSafeProperty\n});\nconst NG_INJECTOR_DEF = getClosureSafeProperty({\n  ngInjectorDef: getClosureSafeProperty\n});\n\n/**\n * Creates a token that can be used in a DI Provider.\n *\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\n * runtime representation) such as when injecting an interface, callable type, array or\n * parameterized type.\n *\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\n * the `Injector`. This provides an additional level of type safety.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * **Important Note**: Ensure that you use the same instance of the `InjectionToken` in both the\n * provider and the injection call. Creating a new instance of `InjectionToken` in different places,\n * even with the same description, will be treated as different tokens by Angular's DI system,\n * leading to a `NullInjectorError`.\n *\n * </div>\n *\n * {@example injection-token/src/main.ts region='InjectionToken'}\n *\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\n * dependencies, it can do so using the [`inject`](api/core/inject) function.\n * As you can see in the Tree-shakable InjectionToken example below.\n *\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:\n * this option is now deprecated). As mentioned above, `'root'` is the default value for\n * `providedIn`.\n *\n * The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.\n *\n * @usageNotes\n * ### Basic Examples\n *\n * ### Plain InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\n *\n * ### Tree-shakable InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n * @publicApi\n */\nclass InjectionToken {\n  _desc;\n  /** @internal */\n  ngMetadataName = 'InjectionToken';\n  ɵprov;\n  /**\n   * @param _desc   Description for the token,\n   *                used only for debugging purposes,\n   *                it should but does not need to be unique\n   * @param options Options for the token's usage, as described above\n   */\n  constructor(_desc, options) {\n    this._desc = _desc;\n    this.ɵprov = undefined;\n    if (typeof options == 'number') {\n      (typeof ngDevMode === 'undefined' || ngDevMode) && assertLessThan(options, 0, 'Only negative numbers are supported here');\n      // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.\n      // See `InjectorMarkers`\n      this.__NG_ELEMENT_ID__ = options;\n    } else if (options !== undefined) {\n      this.ɵprov = ɵɵdefineInjectable({\n        token: this,\n        providedIn: options.providedIn || 'root',\n        factory: options.factory\n      });\n    }\n  }\n  /**\n   * @internal\n   */\n  get multi() {\n    return this;\n  }\n  toString() {\n    return `InjectionToken ${this._desc}`;\n  }\n}\nlet _injectorProfilerContext;\nfunction getInjectorProfilerContext() {\n  !ngDevMode && throwError('getInjectorProfilerContext should never be called in production mode');\n  return _injectorProfilerContext;\n}\nfunction setInjectorProfilerContext(context) {\n  !ngDevMode && throwError('setInjectorProfilerContext should never be called in production mode');\n  const previous = _injectorProfilerContext;\n  _injectorProfilerContext = context;\n  return previous;\n}\nlet injectorProfilerCallback = null;\n/**\n * Sets the callback function which will be invoked during certain DI events within the\n * runtime (for example: injecting services, creating injectable instances, configuring providers)\n *\n * Warning: this function is *INTERNAL* and should not be relied upon in application's code.\n * The contract of the function might be changed in any release and/or the function can be removed\n * completely.\n *\n * @param profiler function provided by the caller or null value to disable profiling.\n */\nconst setInjectorProfiler = injectorProfiler => {\n  !ngDevMode && throwError('setInjectorProfiler should never be called in production mode');\n  injectorProfilerCallback = injectorProfiler;\n};\n/**\n * Injector profiler function which emits on DI events executed by the runtime.\n *\n * @param event InjectorProfilerEvent corresponding to the DI event being emitted\n */\nfunction injectorProfiler(event) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  if (injectorProfilerCallback != null /* both `null` and `undefined` */) {\n    injectorProfilerCallback(event);\n  }\n}\n/**\n * Emits an InjectorProfilerEventType.ProviderConfigured to the injector profiler. The data in the\n * emitted event includes the raw provider, as well as the token that provider is providing.\n *\n * @param eventProvider A provider object\n */\nfunction emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  let token;\n  // if the provider is a TypeProvider (typeof provider is function) then the token is the\n  // provider itself\n  if (typeof eventProvider === 'function') {\n    token = eventProvider;\n  }\n  // if the provider is an injection token, then the token is the injection token.\n  else if (eventProvider instanceof InjectionToken) {\n    token = eventProvider;\n  }\n  // in all other cases we can access the token via the `provide` property of the provider\n  else {\n    token = resolveForwardRef(eventProvider.provide);\n  }\n  let provider = eventProvider;\n  // Injection tokens may define their own default provider which gets attached to the token itself\n  // as `ɵprov`. In this case, we want to emit the provider that is attached to the token, not the\n  // token itself.\n  if (eventProvider instanceof InjectionToken) {\n    provider = eventProvider.ɵprov || eventProvider;\n  }\n  injectorProfiler({\n    type: 2 /* InjectorProfilerEventType.ProviderConfigured */,\n    context: getInjectorProfilerContext(),\n    providerRecord: {\n      token,\n      provider,\n      isViewProvider\n    }\n  });\n}\n/**\n * Emits an event to the injector profiler with the instance that was created. Note that\n * the injector associated with this emission can be accessed by using getDebugInjectContext()\n *\n * @param instance an object created by an injector\n */\nfunction emitInstanceCreatedByInjectorEvent(instance) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  injectorProfiler({\n    type: 1 /* InjectorProfilerEventType.InstanceCreatedByInjector */,\n    context: getInjectorProfilerContext(),\n    instance: {\n      value: instance\n    }\n  });\n}\n/**\n * @param token DI token associated with injected service\n * @param value the instance of the injected service (i.e the result of `inject(token)`)\n * @param flags the flags that the token was injected with\n */\nfunction emitInjectEvent(token, value, flags) {\n  !ngDevMode && throwError('Injector profiler should never be called in production mode');\n  injectorProfiler({\n    type: 0 /* InjectorProfilerEventType.Inject */,\n    context: getInjectorProfilerContext(),\n    service: {\n      token,\n      value,\n      flags\n    }\n  });\n}\nfunction runInInjectorProfilerContext(injector, token, callback) {\n  !ngDevMode && throwError('runInInjectorProfilerContext should never be called in production mode');\n  const prevInjectContext = setInjectorProfilerContext({\n    injector,\n    token\n  });\n  try {\n    callback();\n  } finally {\n    setInjectorProfilerContext(prevInjectContext);\n  }\n}\nfunction isEnvironmentProviders(value) {\n  return value && !!value.ɵproviders;\n}\nconst NG_COMP_DEF = getClosureSafeProperty({\n  ɵcmp: getClosureSafeProperty\n});\nconst NG_DIR_DEF = getClosureSafeProperty({\n  ɵdir: getClosureSafeProperty\n});\nconst NG_PIPE_DEF = getClosureSafeProperty({\n  ɵpipe: getClosureSafeProperty\n});\nconst NG_MOD_DEF = getClosureSafeProperty({\n  ɵmod: getClosureSafeProperty\n});\nconst NG_FACTORY_DEF = getClosureSafeProperty({\n  ɵfac: getClosureSafeProperty\n});\n/**\n * If a directive is diPublic, bloomAdd sets a property on the type with this constant as\n * the key and the directive's unique ID as the value. This allows us to map directives to their\n * bloom filter bit for DI.\n */\n// TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.\nconst NG_ELEMENT_ID = getClosureSafeProperty({\n  __NG_ELEMENT_ID__: getClosureSafeProperty\n});\n/**\n * The `NG_ENV_ID` field on a DI token indicates special processing in the `EnvironmentInjector`:\n * getting such tokens from the `EnvironmentInjector` will bypass the standard DI resolution\n * strategy and instead will return implementation produced by the `NG_ENV_ID` factory function.\n *\n * This particular retrieval of DI tokens is mostly done to eliminate circular dependencies and\n * improve tree-shaking.\n */\nconst NG_ENV_ID = getClosureSafeProperty({\n  __NG_ENV_ID__: getClosureSafeProperty\n});\n\n/**\n * Used for stringify render output in Ivy.\n * Important! This function is very performance-sensitive and we should\n * be extra careful not to introduce megamorphic reads in it.\n * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.\n */\nfunction renderStringify(value) {\n  if (typeof value === 'string') return value;\n  if (value == null) return '';\n  // Use `String` so that it invokes the `toString` method of the value. Note that this\n  // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).\n  return String(value);\n}\n/**\n * Used to stringify a value so that it can be displayed in an error message.\n *\n * Important! This function contains a megamorphic read and should only be\n * used for error messages.\n */\nfunction stringifyForError(value) {\n  if (typeof value === 'function') return value.name || value.toString();\n  if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n    return value.type.name || value.type.toString();\n  }\n  return renderStringify(value);\n}\n/**\n * Used to stringify a `Type` and including the file path and line number in which it is defined, if\n * possible, for better debugging experience.\n *\n * Important! This function contains a megamorphic read and should only be used for error messages.\n */\nfunction debugStringifyTypeForError(type) {\n  // TODO(pmvald): Do some refactoring so that we can use getComponentDef here without creating\n  // circular deps.\n  let componentDef = type[NG_COMP_DEF] || null;\n  if (componentDef !== null && componentDef.debugInfo) {\n    return stringifyTypeFromDebugInfo(componentDef.debugInfo);\n  }\n  return stringifyForError(type);\n}\n// TODO(pmvald): Do some refactoring so that we can use the type ClassDebugInfo for the param\n// debugInfo here without creating circular deps.\nfunction stringifyTypeFromDebugInfo(debugInfo) {\n  if (!debugInfo.filePath || !debugInfo.lineNumber) {\n    return debugInfo.className;\n  } else {\n    return `${debugInfo.className} (at ${debugInfo.filePath}:${debugInfo.lineNumber})`;\n  }\n}\n\n/** Called when directives inject each other (creating a circular dependency) */\nfunction throwCyclicDependencyError(token, path) {\n  const depPath = path ? `. Dependency path: ${path.join(' > ')} > ${token}` : '';\n  throw new RuntimeError(-200 /* RuntimeErrorCode.CYCLIC_DI_DEPENDENCY */, ngDevMode ? `Circular dependency in DI detected for ${token}${depPath}` : token);\n}\nfunction throwMixedMultiProviderError() {\n  throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n  if (ngModuleType && providers) {\n    const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n    throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}' - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`);\n  } else if (isEnvironmentProviders(provider)) {\n    if (provider.ɵfromNgModule) {\n      throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, `Invalid providers from 'importProvidersFrom' present in a non-environment injector. 'importProvidersFrom' can't be used for component providers.`);\n    } else {\n      throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, `Invalid providers present in a non-environment injector. 'EnvironmentProviders' can't be used for component providers.`);\n    }\n  } else {\n    throw new Error('Invalid provider');\n  }\n}\n/** Throws an error when a token is not found in DI. */\nfunction throwProviderNotFoundError(token, injectorName) {\n  const errorMessage = ngDevMode && `No provider for ${stringifyForError(token)} found${injectorName ? ` in ${injectorName}` : ''}`;\n  throw new RuntimeError(-201 /* RuntimeErrorCode.PROVIDER_NOT_FOUND */, errorMessage);\n}\n\n/**\n * Injection flags for DI.\n *\n * @publicApi\n * @deprecated use an options object for [`inject`](api/core/inject) instead.\n */\nvar InjectFlags;\n(function (InjectFlags) {\n  // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer\n  // writes exports of it into ngfactory files.\n  /** Check self and check parent injector if needed */\n  InjectFlags[InjectFlags[\"Default\"] = 0] = \"Default\";\n  /**\n   * Specifies that an injector should retrieve a dependency from any injector until reaching the\n   * host element of the current component. (Only used with Element Injector)\n   */\n  InjectFlags[InjectFlags[\"Host\"] = 1] = \"Host\";\n  /** Don't ascend to ancestors of the node requesting injection. */\n  InjectFlags[InjectFlags[\"Self\"] = 2] = \"Self\";\n  /** Skip the node that is requesting injection. */\n  InjectFlags[InjectFlags[\"SkipSelf\"] = 4] = \"SkipSelf\";\n  /** Inject `defaultValue` instead if token not found. */\n  InjectFlags[InjectFlags[\"Optional\"] = 8] = \"Optional\";\n})(InjectFlags || (InjectFlags = {}));\n\n/**\n * Current implementation of inject.\n *\n * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed\n * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this\n * way for two reasons:\n *  1. `Injector` should not depend on ivy logic.\n *  2. To maintain tree shake-ability we don't want to bring in unnecessary code.\n */\nlet _injectImplementation;\nfunction getInjectImplementation() {\n  return _injectImplementation;\n}\n/**\n * Sets the current inject implementation.\n */\nfunction setInjectImplementation(impl) {\n  const previous = _injectImplementation;\n  _injectImplementation = impl;\n  return previous;\n}\n/**\n * Injects `root` tokens in limp mode.\n *\n * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to\n * `\"root\"`. This is known as the limp mode injection. In such case the value is stored in the\n * injectable definition.\n */\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n  const injectableDef = getInjectableDef(token);\n  if (injectableDef && injectableDef.providedIn == 'root') {\n    return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() : injectableDef.value;\n  }\n  if (flags & InjectFlags.Optional) return null;\n  if (notFoundValue !== undefined) return notFoundValue;\n  throwProviderNotFoundError(token, 'Injector');\n}\n/**\n * Assert that `_injectImplementation` is not `fn`.\n *\n * This is useful, to prevent infinite recursion.\n *\n * @param fn Function which it should not equal to\n */\nfunction assertInjectImplementationNotEqual(fn) {\n  ngDevMode && assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');\n}\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\n/*\n * Name of a property (that we patch onto DI decorator), which is used as an annotation of which\n * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators\n * in the code, thus making them tree-shakable.\n */\nconst DI_DECORATOR_FLAG = '__NG_DI_FLAG__';\nconst NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';\nconst NG_TOKEN_PATH = 'ngTokenPath';\nconst NEW_LINE = /\\n/gm;\nconst NO_NEW_LINE = 'ɵ';\nconst SOURCE = '__source';\n/**\n * Current injector value used by `inject`.\n * - `undefined`: it is an error to call `inject`\n * - `null`: `inject` can be called but there is no injector (limp-mode).\n * - Injector instance: Use the injector for resolution.\n */\nlet _currentInjector = undefined;\nfunction getCurrentInjector() {\n  return _currentInjector;\n}\nfunction setCurrentInjector(injector) {\n  const former = _currentInjector;\n  _currentInjector = injector;\n  return former;\n}\nfunction injectInjectorOnly(token, flags = InjectFlags.Default) {\n  if (_currentInjector === undefined) {\n    throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode && `inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \\`runInInjectionContext\\`.`);\n  } else if (_currentInjector === null) {\n    return injectRootLimpMode(token, undefined, flags);\n  } else {\n    const value = _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);\n    ngDevMode && emitInjectEvent(token, value, flags);\n    return value;\n  }\n}\nfunction ɵɵinject(token, flags = InjectFlags.Default) {\n  return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactoryDep(index) {\n  throw new RuntimeError(202 /* RuntimeErrorCode.INVALID_FACTORY_DEPENDENCY */, ngDevMode && `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.`);\n}\n/**\n * Injects a token from the currently active injector.\n * `inject` is only supported in an [injection context](guide/di/dependency-injection-context). It\n * can be used during:\n * - Construction (via the `constructor`) of a class being instantiated by the DI system, such\n * as an `@Injectable` or `@Component`.\n * - In the initializer for fields of such classes.\n * - In the factory function specified for `useFactory` of a `Provider` or an `@Injectable`.\n * - In the `factory` function specified for an `InjectionToken`.\n * - In a stackframe of a function call in a DI context\n *\n * @param token A token that represents a dependency that should be injected.\n * @param flags Optional flags that control how injection is executed.\n * The flags correspond to injection strategies that can be specified with\n * parameter decorators `@Host`, `@Self`, `@SkipSelf`, and `@Optional`.\n * @returns the injected value if operation is successful, `null` otherwise.\n * @throws if called outside of a supported context.\n *\n * @usageNotes\n * In practice the `inject()` calls are allowed in a constructor, a constructor parameter and a\n * field initializer:\n *\n * ```ts\n * @Injectable({providedIn: 'root'})\n * export class Car {\n *   radio: Radio|undefined;\n *   // OK: field initializer\n *   spareTyre = inject(Tyre);\n *\n *   constructor() {\n *     // OK: constructor body\n *     this.radio = inject(Radio);\n *   }\n * }\n * ```\n *\n * It is also legal to call `inject` from a provider's factory:\n *\n * ```ts\n * providers: [\n *   {provide: Car, useFactory: () => {\n *     // OK: a class factory\n *     const engine = inject(Engine);\n *     return new Car(engine);\n *   }}\n * ]\n * ```\n *\n * Calls to the `inject()` function outside of the class creation context will result in error. Most\n * notably, calls to `inject()` are disallowed after a class instance was created, in methods\n * (including lifecycle hooks):\n *\n * ```ts\n * @Component({ ... })\n * export class CarComponent {\n *   ngOnInit() {\n *     // ERROR: too late, the component instance was already created\n *     const engine = inject(Engine);\n *     engine.start();\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nfunction inject(token, flags = InjectFlags.Default) {\n  // The `as any` here _shouldn't_ be necessary, but without it JSCompiler\n  // throws a disambiguation  error due to the multiple signatures.\n  return ɵɵinject(token, convertToBitFlags(flags));\n}\n// Converts object-based DI flags (`InjectOptions`) to bit flags (`InjectFlags`).\nfunction convertToBitFlags(flags) {\n  if (typeof flags === 'undefined' || typeof flags === 'number') {\n    return flags;\n  }\n  // While TypeScript doesn't accept it without a cast, bitwise OR with false-y values in\n  // JavaScript is a no-op. We can use that for a very codesize-efficient conversion from\n  // `InjectOptions` to `InjectFlags`.\n  return 0 /* InternalInjectFlags.Default */ | (\n  // comment to force a line break in the formatter\n  flags.optional && 8 /* InternalInjectFlags.Optional */) | (flags.host && 1 /* InternalInjectFlags.Host */) | (flags.self && 2 /* InternalInjectFlags.Self */) | (flags.skipSelf && 4 /* InternalInjectFlags.SkipSelf */);\n}\nfunction injectArgs(types) {\n  const args = [];\n  for (let i = 0; i < types.length; i++) {\n    const arg = resolveForwardRef(types[i]);\n    if (Array.isArray(arg)) {\n      if (arg.length === 0) {\n        throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && 'Arguments array must have arguments.');\n      }\n      let type = undefined;\n      let flags = InjectFlags.Default;\n      for (let j = 0; j < arg.length; j++) {\n        const meta = arg[j];\n        const flag = getInjectFlag(meta);\n        if (typeof flag === 'number') {\n          // Special case when we handle @Inject decorator.\n          if (flag === -1 /* DecoratorFlags.Inject */) {\n            type = meta.token;\n          } else {\n            flags |= flag;\n          }\n        } else {\n          type = meta;\n        }\n      }\n      args.push(ɵɵinject(type, flags));\n    } else {\n      args.push(ɵɵinject(arg));\n    }\n  }\n  return args;\n}\n/**\n * Attaches a given InjectFlag to a given decorator using monkey-patching.\n * Since DI decorators can be used in providers `deps` array (when provider is configured using\n * `useFactory`) without initialization (e.g. `Host`) and as an instance (e.g. `new Host()`), we\n * attach the flag to make it available both as a static property and as a field on decorator\n * instance.\n *\n * @param decorator Provided DI decorator.\n * @param flag InjectFlag that should be applied.\n */\nfunction attachInjectFlag(decorator, flag) {\n  decorator[DI_DECORATOR_FLAG] = flag;\n  decorator.prototype[DI_DECORATOR_FLAG] = flag;\n  return decorator;\n}\n/**\n * Reads monkey-patched property that contains InjectFlag attached to a decorator.\n *\n * @param token Token that may contain monkey-patched DI flags property.\n */\nfunction getInjectFlag(token) {\n  return token[DI_DECORATOR_FLAG];\n}\nfunction catchInjectorError(e, token, injectorErrorName, source) {\n  const tokenPath = e[NG_TEMP_TOKEN_PATH];\n  if (token[SOURCE]) {\n    tokenPath.unshift(token[SOURCE]);\n  }\n  e.message = formatError('\\n' + e.message, tokenPath, injectorErrorName, source);\n  e[NG_TOKEN_PATH] = tokenPath;\n  e[NG_TEMP_TOKEN_PATH] = null;\n  throw e;\n}\nfunction formatError(text, obj, injectorErrorName, source = null) {\n  text = text && text.charAt(0) === '\\n' && text.charAt(1) == NO_NEW_LINE ? text.slice(2) : text;\n  let context = stringify(obj);\n  if (Array.isArray(obj)) {\n    context = obj.map(stringify).join(' -> ');\n  } else if (typeof obj === 'object') {\n    let parts = [];\n    for (let key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        let value = obj[key];\n        parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));\n      }\n    }\n    context = `{${parts.join(', ')}}`;\n  }\n  return `${injectorErrorName}${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\\n  ')}`;\n}\n\n/**\n * Inject decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Inject = attachInjectFlag(\n// Disable tslint because `DecoratorFlags` is a const enum which gets inlined.\nmakeParamDecorator('Inject', token => ({\n  token\n})), -1 /* DecoratorFlags.Inject */);\n/**\n * Optional decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Optional =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Optional'), 8 /* InternalInjectFlags.Optional */);\n/**\n * Self decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Self =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Self'), 2 /* InternalInjectFlags.Self */);\n/**\n * `SkipSelf` decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst SkipSelf =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('SkipSelf'), 4 /* InternalInjectFlags.SkipSelf */);\n/**\n * Host decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Host =\n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Host'), 1 /* InternalInjectFlags.Host */);\nfunction getFactoryDef(type, throwNotFound) {\n  const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n  if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n    throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);\n  }\n  return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\n\n/**\n * Determines if the contents of two arrays is identical\n *\n * @param a first array\n * @param b second array\n * @param identityAccessor Optional function for extracting stable object identity from a value in\n *     the array.\n */\nfunction arrayEquals(a, b, identityAccessor) {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) {\n    let valueA = a[i];\n    let valueB = b[i];\n    if (identityAccessor) {\n      valueA = identityAccessor(valueA);\n      valueB = identityAccessor(valueB);\n    }\n    if (valueB !== valueA) {\n      return false;\n    }\n  }\n  return true;\n}\n/**\n * Flattens an array.\n */\nfunction flatten(list) {\n  return list.flat(Number.POSITIVE_INFINITY);\n}\nfunction deepForEach(input, fn) {\n  input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n  // perf: array.push is faster than array.splice!\n  if (index >= arr.length) {\n    arr.push(value);\n  } else {\n    arr.splice(index, 0, value);\n  }\n}\nfunction removeFromArray(arr, index) {\n  // perf: array.pop is faster than array.splice!\n  if (index >= arr.length - 1) {\n    return arr.pop();\n  } else {\n    return arr.splice(index, 1)[0];\n  }\n}\nfunction newArray(size, value) {\n  const list = [];\n  for (let i = 0; i < size; i++) {\n    list.push(value);\n  }\n  return list;\n}\n/**\n * Remove item from array (Same as `Array.splice()` but faster.)\n *\n * `Array.splice()` is not as fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * https://jsperf.com/fast-array-splice (About 20x faster)\n *\n * @param array Array to splice\n * @param index Index of element in array to remove.\n * @param count Number of items to remove.\n */\nfunction arraySplice(array, index, count) {\n  const length = array.length - count;\n  while (index < length) {\n    array[index] = array[index + count];\n    index++;\n  }\n  while (count--) {\n    array.pop(); // shrink the array\n  }\n}\n/**\n * Same as `Array.splice(index, 0, value)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value Value to add to array.\n */\nfunction arrayInsert(array, index, value) {\n  ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n  let end = array.length;\n  while (end > index) {\n    const previousEnd = end - 1;\n    array[end] = array[previousEnd];\n    end = previousEnd;\n  }\n  array[index] = value;\n}\n/**\n * Same as `Array.splice2(index, 0, value1, value2)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value1 Value to add to array.\n * @param value2 Value to add to array.\n */\nfunction arrayInsert2(array, index, value1, value2) {\n  ngDevMode && assertLessThanOrEqual(index, array.length, \"Can't insert past array end.\");\n  let end = array.length;\n  if (end == index) {\n    // inserting at the end.\n    array.push(value1, value2);\n  } else if (end === 1) {\n    // corner case when we have less items in array than we have items to insert.\n    array.push(value2, array[0]);\n    array[0] = value1;\n  } else {\n    end--;\n    array.push(array[end - 1], array[end]);\n    while (end > index) {\n      const previousEnd = end - 2;\n      array[end] = array[previousEnd];\n      end--;\n    }\n    array[index] = value1;\n    array[index + 1] = value2;\n  }\n}\n/**\n * Get an index of an `value` in a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @returns index of the value.\n *   - positive index if value found.\n *   - negative index if value not found. (`~index` to get the value where it should have been\n *     located)\n */\nfunction arrayIndexOfSorted(array, value) {\n  return _arrayIndexOfSorted(array, value, 0);\n}\n/**\n * Set a `value` for a `key`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or create.\n * @param value The value to set for a `key`.\n * @returns index (always even) of where the value vas set.\n */\nfunction keyValueArraySet(keyValueArray, key, value) {\n  let index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it set it.\n    keyValueArray[index | 1] = value;\n  } else {\n    index = ~index;\n    arrayInsert2(keyValueArray, index, key, value);\n  }\n  return index;\n}\n/**\n * Retrieve a `value` for a `key` (on `undefined` if not found.)\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @return The `value` stored at the `key` location or `undefined if not found.\n */\nfunction keyValueArrayGet(keyValueArray, key) {\n  const index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it retrieve it.\n    return keyValueArray[index | 1];\n  }\n  return undefined;\n}\n/**\n * Retrieve a `key` index value in the array or `-1` if not found.\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @returns index of where the key is (or should have been.)\n *   - positive (even) index if key found.\n *   - negative index if key not found. (`~index` (even) to get the index where it should have\n *     been inserted.)\n */\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n  return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\n/**\n * Delete a `key` (and `value`) from the `KeyValueArray`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or delete (if exist).\n * @returns index of where the key was (or should have been.)\n *   - positive (even) index if key found and deleted.\n *   - negative index if key not found. (`~index` (even) to get the index where it should have\n *     been.)\n */\nfunction keyValueArrayDelete(keyValueArray, key) {\n  const index = keyValueArrayIndexOf(keyValueArray, key);\n  if (index >= 0) {\n    // if we found it remove it.\n    arraySplice(keyValueArray, index, 2);\n  }\n  return index;\n}\n/**\n * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @param shift grouping shift.\n *   - `0` means look at every location\n *   - `1` means only look at every other (even) location (the odd locations are to be ignored as\n *         they are values.)\n * @returns index of the value.\n *   - positive index if value found.\n *   - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction _arrayIndexOfSorted(array, value, shift) {\n  ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n  let start = 0;\n  let end = array.length >> shift;\n  while (end !== start) {\n    const middle = start + (end - start >> 1); // find the middle.\n    const current = array[middle << shift];\n    if (value === current) {\n      return middle << shift;\n    } else if (current > value) {\n      end = middle;\n    } else {\n      start = middle + 1; // We already searched middle so make it non-inclusive by adding 1\n    }\n  }\n  return ~(end << shift);\n}\n\n/**\n * This file contains reuseable \"empty\" symbols that can be used as default return values\n * in different parts of the rendering code. Because the same symbols are returned, this\n * allows for identity checks against these values to be consistently used by the framework\n * code.\n */\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\n// freezing the values prevents any code from accidentally inserting new values in\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {\n  // These property accesses can be ignored because ngDevMode will be set to false\n  // when optimizing code and the whole if statement will be dropped.\n  // tslint:disable-next-line:no-toplevel-property-access\n  Object.freeze(EMPTY_OBJ);\n  // tslint:disable-next-line:no-toplevel-property-access\n  Object.freeze(EMPTY_ARRAY);\n}\n\n/**\n * A multi-provider token for initialization functions that will run upon construction of an\n * environment injector.\n *\n * @deprecated from v19.0.0, use provideEnvironmentInitializer instead\n *\n * @see {@link provideEnvironmentInitializer}\n *\n * Note: As opposed to the `APP_INITIALIZER` token, the `ENVIRONMENT_INITIALIZER` functions are not awaited,\n * hence they should not be `async`.\n *\n * @publicApi\n */\nconst ENVIRONMENT_INITIALIZER = new InjectionToken(ngDevMode ? 'ENVIRONMENT_INITIALIZER' : '');\n\n/**\n * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.\n *\n * Requesting this token instead of `Injector` allows `StaticInjector` to be tree-shaken from a\n * project.\n *\n * @publicApi\n */\nconst INJECTOR$1 = new InjectionToken(ngDevMode ? 'INJECTOR' : '',\n// Disable tslint because this is const enum which gets inlined not top level prop access.\n// tslint:disable-next-line: no-toplevel-property-access\n-1 /* InjectorMarkers.Injector */);\nconst INJECTOR_DEF_TYPES = new InjectionToken(ngDevMode ? 'INJECTOR_DEF_TYPES' : '');\nclass NullInjector {\n  get(token, notFoundValue = THROW_IF_NOT_FOUND) {\n    if (notFoundValue === THROW_IF_NOT_FOUND) {\n      const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);\n      error.name = 'NullInjectorError';\n      throw error;\n    }\n    return notFoundValue;\n  }\n}\nfunction getNgModuleDef(type, throwNotFound) {\n  const ngModuleDef = type[NG_MOD_DEF] || null;\n  if (!ngModuleDef && throwNotFound === true) {\n    throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);\n  }\n  return ngModuleDef;\n}\n/**\n * The following getter methods retrieve the definition from the type. Currently the retrieval\n * honors inheritance, but in the future we may change the rule to require that definitions are\n * explicit. This would require some sort of migration strategy.\n */\nfunction getComponentDef(type) {\n  return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDef(type) {\n  return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef$1(type) {\n  return type[NG_PIPE_DEF] || null;\n}\n/**\n * Checks whether a given Component, Directive or Pipe is marked as standalone.\n * This will return false if passed anything other than a Component, Directive, or Pipe class\n * See [this guide](guide/components/importing) for additional information:\n *\n * @param type A reference to a Component, Directive or Pipe.\n * @publicApi\n */\nfunction isStandalone(type) {\n  const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n  // TODO: standalone as default value (invert the condition)\n  return def !== null ? def.standalone : false;\n}\n\n/**\n * Wrap an array of `Provider`s into `EnvironmentProviders`, preventing them from being accidentally\n * referenced in `@Component` in a component injector.\n */\nfunction makeEnvironmentProviders(providers) {\n  return {\n    ɵproviders: providers\n  };\n}\n/**\n * @description\n * This function is used to provide initialization functions that will be executed upon construction\n * of an environment injector.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `ENVIRONMENT_INITIALIZER` token which is now deprecated.\n *\n * @see {@link ENVIRONMENT_INITIALIZER}\n *\n * @usageNotes\n * The following example illustrates how to configure an initialization function using\n * `provideEnvironmentInitializer()`\n * ```ts\n * createEnvironmentInjector(\n *   [\n *     provideEnvironmentInitializer(() => {\n *       console.log('environment initialized');\n *     }),\n *   ],\n *   parentInjector\n * );\n * ```\n *\n * @publicApi\n */\nfunction provideEnvironmentInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useValue: initializerFn\n  }]);\n}\n/**\n * Collects providers from all NgModules and standalone components, including transitively imported\n * ones.\n *\n * Providers extracted via `importProvidersFrom` are only usable in an application injector or\n * another environment injector (such as a route injector). They should not be used in component\n * providers.\n *\n * More information about standalone components can be found in [this\n * guide](guide/components/importing).\n *\n * @usageNotes\n * The results of the `importProvidersFrom` call can be used in the `bootstrapApplication` call:\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     importProvidersFrom(NgModuleOne, NgModuleTwo)\n *   ]\n * });\n * ```\n *\n * You can also use the `importProvidersFrom` results in the `providers` field of a route, when a\n * standalone component is used:\n *\n * ```ts\n * export const ROUTES: Route[] = [\n *   {\n *     path: 'foo',\n *     providers: [\n *       importProvidersFrom(NgModuleOne, NgModuleTwo)\n *     ],\n *     component: YourStandaloneComponent\n *   }\n * ];\n * ```\n *\n * @returns Collected providers from the specified list of types.\n * @publicApi\n */\nfunction importProvidersFrom(...sources) {\n  return {\n    ɵproviders: internalImportProvidersFrom(true, sources),\n    ɵfromNgModule: true\n  };\n}\nfunction internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {\n  const providersOut = [];\n  const dedup = new Set(); // already seen types\n  let injectorTypesWithProviders;\n  const collectProviders = provider => {\n    providersOut.push(provider);\n  };\n  deepForEach(sources, source => {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && checkForStandaloneCmp) {\n      const cmpDef = getComponentDef(source);\n      if (cmpDef?.standalone) {\n        throw new RuntimeError(800 /* RuntimeErrorCode.IMPORT_PROVIDERS_FROM_STANDALONE */, `Importing providers supports NgModule or ModuleWithProviders but got a standalone component \"${stringifyForError(source)}\"`);\n      }\n    }\n    // Narrow `source` to access the internal type analogue for `ModuleWithProviders`.\n    const internalSource = source;\n    if (walkProviderTree(internalSource, collectProviders, [], dedup)) {\n      injectorTypesWithProviders ||= [];\n      injectorTypesWithProviders.push(internalSource);\n    }\n  });\n  // Collect all providers from `ModuleWithProviders` types.\n  if (injectorTypesWithProviders !== undefined) {\n    processInjectorTypesWithProviders(injectorTypesWithProviders, collectProviders);\n  }\n  return providersOut;\n}\n/**\n * Collects all providers from the list of `ModuleWithProviders` and appends them to the provided\n * array.\n */\nfunction processInjectorTypesWithProviders(typesWithProviders, visitor) {\n  for (let i = 0; i < typesWithProviders.length; i++) {\n    const {\n      ngModule,\n      providers\n    } = typesWithProviders[i];\n    deepForEachProvider(providers, provider => {\n      ngDevMode && validateProvider(provider, providers || EMPTY_ARRAY, ngModule);\n      visitor(provider, ngModule);\n    });\n  }\n}\n/**\n * The logic visits an `InjectorType`, an `InjectorTypeWithProviders`, or a standalone\n * `ComponentType`, and all of its transitive providers and collects providers.\n *\n * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,\n * the function will return \"true\" to indicate that the providers of the type definition need\n * to be processed. This allows us to process providers of injector types after all imports of\n * an injector definition are processed. (following View Engine semantics: see FW-1349)\n */\nfunction walkProviderTree(container, visitor, parents, dedup) {\n  container = resolveForwardRef(container);\n  if (!container) return false;\n  // The actual type which had the definition. Usually `container`, but may be an unwrapped type\n  // from `InjectorTypeWithProviders`.\n  let defType = null;\n  let injDef = getInjectorDef(container);\n  const cmpDef = !injDef && getComponentDef(container);\n  if (!injDef && !cmpDef) {\n    // `container` is not an injector type or a component type. It might be:\n    //  * An `InjectorTypeWithProviders` that wraps an injector type.\n    //  * A standalone directive or pipe that got pulled in from a standalone component's\n    //    dependencies.\n    // Try to unwrap it as an `InjectorTypeWithProviders` first.\n    const ngModule = container.ngModule;\n    injDef = getInjectorDef(ngModule);\n    if (injDef) {\n      defType = ngModule;\n    } else {\n      // Not a component or injector type, so ignore it.\n      return false;\n    }\n  } else if (cmpDef && !cmpDef.standalone) {\n    return false;\n  } else {\n    defType = container;\n  }\n  // Check for circular dependencies.\n  if (ngDevMode && parents.indexOf(defType) !== -1) {\n    const defName = stringify(defType);\n    const path = parents.map(stringify);\n    throwCyclicDependencyError(defName, path);\n  }\n  // Check for multiple imports of the same module\n  const isDuplicate = dedup.has(defType);\n  if (cmpDef) {\n    if (isDuplicate) {\n      // This component definition has already been processed.\n      return false;\n    }\n    dedup.add(defType);\n    if (cmpDef.dependencies) {\n      const deps = typeof cmpDef.dependencies === 'function' ? cmpDef.dependencies() : cmpDef.dependencies;\n      for (const dep of deps) {\n        walkProviderTree(dep, visitor, parents, dedup);\n      }\n    }\n  } else if (injDef) {\n    // First, include providers from any imports.\n    if (injDef.imports != null && !isDuplicate) {\n      // Before processing defType's imports, add it to the set of parents. This way, if it ends\n      // up deeply importing itself, this can be detected.\n      ngDevMode && parents.push(defType);\n      // Add it to the set of dedups. This way we can detect multiple imports of the same module\n      dedup.add(defType);\n      let importTypesWithProviders;\n      try {\n        deepForEach(injDef.imports, imported => {\n          if (walkProviderTree(imported, visitor, parents, dedup)) {\n            importTypesWithProviders ||= [];\n            // If the processed import is an injector type with providers, we store it in the\n            // list of import types with providers, so that we can process those afterwards.\n            importTypesWithProviders.push(imported);\n          }\n        });\n      } finally {\n        // Remove it from the parents set when finished.\n        ngDevMode && parents.pop();\n      }\n      // Imports which are declared with providers (TypeWithProviders) need to be processed\n      // after all imported modules are processed. This is similar to how View Engine\n      // processes/merges module imports in the metadata resolver. See: FW-1349.\n      if (importTypesWithProviders !== undefined) {\n        processInjectorTypesWithProviders(importTypesWithProviders, visitor);\n      }\n    }\n    if (!isDuplicate) {\n      // Track the InjectorType and add a provider for it.\n      // It's important that this is done after the def's imports.\n      const factory = getFactoryDef(defType) || (() => new defType());\n      // Append extra providers to make more info available for consumers (to retrieve an injector\n      // type), as well as internally (to calculate an injection scope correctly and eagerly\n      // instantiate a `defType` when an injector is created).\n      // Provider to create `defType` using its factory.\n      visitor({\n        provide: defType,\n        useFactory: factory,\n        deps: EMPTY_ARRAY\n      }, defType);\n      // Make this `defType` available to an internal logic that calculates injector scope.\n      visitor({\n        provide: INJECTOR_DEF_TYPES,\n        useValue: defType,\n        multi: true\n      }, defType);\n      // Provider to eagerly instantiate `defType` via `INJECTOR_INITIALIZER`.\n      visitor({\n        provide: ENVIRONMENT_INITIALIZER,\n        useValue: () => ɵɵinject(defType),\n        multi: true\n      }, defType);\n    }\n    // Next, include providers listed on the definition itself.\n    const defProviders = injDef.providers;\n    if (defProviders != null && !isDuplicate) {\n      const injectorType = container;\n      deepForEachProvider(defProviders, provider => {\n        ngDevMode && validateProvider(provider, defProviders, injectorType);\n        visitor(provider, injectorType);\n      });\n    }\n  } else {\n    // Should not happen, but just in case.\n    return false;\n  }\n  return defType !== container && container.providers !== undefined;\n}\nfunction validateProvider(provider, providers, containerType) {\n  if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) || isExistingProvider(provider)) {\n    return;\n  }\n  // Here we expect the provider to be a `useClass` provider (by elimination).\n  const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n  if (!classRef) {\n    throwInvalidProviderError(containerType, providers, provider);\n  }\n}\nfunction deepForEachProvider(providers, fn) {\n  for (let provider of providers) {\n    if (isEnvironmentProviders(provider)) {\n      provider = provider.ɵproviders;\n    }\n    if (Array.isArray(provider)) {\n      deepForEachProvider(provider, fn);\n    } else {\n      fn(provider);\n    }\n  }\n}\nconst USE_VALUE$1 = getClosureSafeProperty({\n  provide: String,\n  useValue: getClosureSafeProperty\n});\nfunction isValueProvider(value) {\n  return value !== null && typeof value == 'object' && USE_VALUE$1 in value;\n}\nfunction isExistingProvider(value) {\n  return !!(value && value.useExisting);\n}\nfunction isFactoryProvider(value) {\n  return !!(value && value.useFactory);\n}\nfunction isTypeProvider(value) {\n  return typeof value === 'function';\n}\nfunction isClassProvider(value) {\n  return !!value.useClass;\n}\n\n/**\n * An internal token whose presence in an injector indicates that the injector should treat itself\n * as a root scoped injector when processing requests for unknown tokens which may indicate\n * they are provided in the root scope.\n */\nconst INJECTOR_SCOPE = new InjectionToken(ngDevMode ? 'Set Injector scope.' : '');\n\n/**\n * Marker which indicates that a value has not yet been created from the factory function.\n */\nconst NOT_YET = {};\n/**\n * Marker which indicates that the factory function for a token is in the process of being called.\n *\n * If the injector is asked to inject a token with its value set to CIRCULAR, that indicates\n * injection of a dependency has recursively attempted to inject the original token, and there is\n * a circular dependency among the providers.\n */\nconst CIRCULAR = {};\n/**\n * A lazily initialized NullInjector.\n */\nlet NULL_INJECTOR = undefined;\nfunction getNullInjector() {\n  if (NULL_INJECTOR === undefined) {\n    NULL_INJECTOR = new NullInjector();\n  }\n  return NULL_INJECTOR;\n}\n/**\n * An `Injector` that's part of the environment injector hierarchy, which exists outside of the\n * component tree.\n */\nclass EnvironmentInjector {}\nclass R3Injector extends EnvironmentInjector {\n  parent;\n  source;\n  scopes;\n  /**\n   * Map of tokens to records which contain the instances of those tokens.\n   * - `null` value implies that we don't have the record. Used by tree-shakable injectors\n   * to prevent further searches.\n   */\n  records = new Map();\n  /**\n   * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.\n   */\n  _ngOnDestroyHooks = new Set();\n  _onDestroyHooks = [];\n  /**\n   * Flag indicating that this injector was previously destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  _destroyed = false;\n  injectorDefTypes;\n  constructor(providers, parent, source, scopes) {\n    super();\n    this.parent = parent;\n    this.source = source;\n    this.scopes = scopes;\n    // Start off by creating Records for every provider.\n    forEachSingleProvider(providers, provider => this.processProvider(provider));\n    // Make sure the INJECTOR token provides this injector.\n    this.records.set(INJECTOR$1, makeRecord(undefined, this));\n    // And `EnvironmentInjector` if the current injector is supposed to be env-scoped.\n    if (scopes.has('environment')) {\n      this.records.set(EnvironmentInjector, makeRecord(undefined, this));\n    }\n    // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide\n    // any injectable scoped to APP_ROOT_SCOPE.\n    const record = this.records.get(INJECTOR_SCOPE);\n    if (record != null && typeof record.value === 'string') {\n      this.scopes.add(record.value);\n    }\n    this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self));\n  }\n  /**\n   * Destroy the injector and release references to every instance or provider associated with it.\n   *\n   * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a\n   * hook was found.\n   */\n  destroy() {\n    assertNotDestroyed(this);\n    // Set destroyed = true first, in case lifecycle hooks re-enter destroy().\n    this._destroyed = true;\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // Call all the lifecycle hooks.\n      for (const service of this._ngOnDestroyHooks) {\n        service.ngOnDestroy();\n      }\n      const onDestroyHooks = this._onDestroyHooks;\n      // Reset the _onDestroyHooks array before iterating over it to prevent hooks that unregister\n      // themselves from mutating the array during iteration.\n      this._onDestroyHooks = [];\n      for (const hook of onDestroyHooks) {\n        hook();\n      }\n    } finally {\n      // Release all references.\n      this.records.clear();\n      this._ngOnDestroyHooks.clear();\n      this.injectorDefTypes.clear();\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  onDestroy(callback) {\n    assertNotDestroyed(this);\n    this._onDestroyHooks.push(callback);\n    return () => this.removeOnDestroy(callback);\n  }\n  runInContext(fn) {\n    assertNotDestroyed(this);\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: null\n      });\n    }\n    try {\n      return fn();\n    } finally {\n      setCurrentInjector(previousInjector);\n      setInjectImplementation(previousInjectImplementation);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n    }\n  }\n  get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {\n    assertNotDestroyed(this);\n    if (token.hasOwnProperty(NG_ENV_ID)) {\n      return token[NG_ENV_ID](this);\n    }\n    flags = convertToBitFlags(flags);\n    // Set the injection context.\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: token\n      });\n    }\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    try {\n      // Check for the SkipSelf flag.\n      if (!(flags & InjectFlags.SkipSelf)) {\n        // SkipSelf isn't set, check if the record belongs to this injector.\n        let record = this.records.get(token);\n        if (record === undefined) {\n          // No record, but maybe the token is scoped to this injector. Look for an injectable\n          // def with a scope matching this injector.\n          const def = couldBeInjectableType(token) && getInjectableDef(token);\n          if (def && this.injectableDefInScope(def)) {\n            // Found an injectable def and it's scoped to this injector. Pretend as if it was here\n            // all along.\n            if (ngDevMode) {\n              runInInjectorProfilerContext(this, token, () => {\n                emitProviderConfiguredEvent(token);\n              });\n            }\n            record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);\n          } else {\n            record = null;\n          }\n          this.records.set(token, record);\n        }\n        // If a record was found, get the instance for it and return it.\n        if (record != null /* NOT null || undefined */) {\n          return this.hydrate(token, record);\n        }\n      }\n      // Select the next injector based on the Self flag - if self is set, the next injector is\n      // the NullInjector, otherwise it's the parent.\n      const nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector();\n      // Set the notFoundValue based on the Optional flag - if optional is set and notFoundValue\n      // is undefined, the value is null, otherwise it's the notFoundValue.\n      notFoundValue = flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;\n      return nextInjector.get(token, notFoundValue);\n    } catch (e) {\n      if (e.name === 'NullInjectorError') {\n        const path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];\n        path.unshift(stringify(token));\n        if (previousInjector) {\n          // We still have a parent injector, keep throwing\n          throw e;\n        } else {\n          // Format & throw the final error message when we don't have any previous injector\n          return catchInjectorError(e, token, 'R3InjectorError', this.source);\n        }\n      } else {\n        throw e;\n      }\n    } finally {\n      // Lastly, restore the previous injection context.\n      setInjectImplementation(previousInjectImplementation);\n      setCurrentInjector(previousInjector);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n    }\n  }\n  /** @internal */\n  resolveInjectorInitializers() {\n    const prevConsumer = setActiveConsumer$1(null);\n    const previousInjector = setCurrentInjector(this);\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    let prevInjectContext;\n    if (ngDevMode) {\n      prevInjectContext = setInjectorProfilerContext({\n        injector: this,\n        token: null\n      });\n    }\n    try {\n      const initializers = this.get(ENVIRONMENT_INITIALIZER, EMPTY_ARRAY, InjectFlags.Self);\n      if (ngDevMode && !Array.isArray(initializers)) {\n        throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `ENVIRONMENT_INITIALIZER` token value ' + `(expected an array, but got ${typeof initializers}). ` + 'Please check that the `ENVIRONMENT_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n      }\n      for (const initializer of initializers) {\n        initializer();\n      }\n    } finally {\n      setCurrentInjector(previousInjector);\n      setInjectImplementation(previousInjectImplementation);\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  toString() {\n    const tokens = [];\n    const records = this.records;\n    for (const token of records.keys()) {\n      tokens.push(stringify(token));\n    }\n    return `R3Injector[${tokens.join(', ')}]`;\n  }\n  /**\n   * Process a `SingleProvider` and add it.\n   */\n  processProvider(provider) {\n    // Determine the token from the provider. Either it's its own token, or has a {provide: ...}\n    // property.\n    provider = resolveForwardRef(provider);\n    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);\n    // Construct a `Record` for the provider.\n    const record = providerToRecord(provider);\n    if (ngDevMode) {\n      runInInjectorProfilerContext(this, token, () => {\n        // Emit InjectorProfilerEventType.Create if provider is a value provider because\n        // these are the only providers that do not go through the value hydration logic\n        // where this event would normally be emitted from.\n        if (isValueProvider(provider)) {\n          emitInstanceCreatedByInjectorEvent(provider.useValue);\n        }\n        emitProviderConfiguredEvent(provider);\n      });\n    }\n    if (!isTypeProvider(provider) && provider.multi === true) {\n      // If the provider indicates that it's a multi-provider, process it specially.\n      // First check whether it's been defined already.\n      let multiRecord = this.records.get(token);\n      if (multiRecord) {\n        // It has. Throw a nice error if\n        if (ngDevMode && multiRecord.multi === undefined) {\n          throwMixedMultiProviderError();\n        }\n      } else {\n        multiRecord = makeRecord(undefined, NOT_YET, true);\n        multiRecord.factory = () => injectArgs(multiRecord.multi);\n        this.records.set(token, multiRecord);\n      }\n      token = provider;\n      multiRecord.multi.push(provider);\n    } else {\n      if (ngDevMode) {\n        const existing = this.records.get(token);\n        if (existing && existing.multi !== undefined) {\n          throwMixedMultiProviderError();\n        }\n      }\n    }\n    this.records.set(token, record);\n  }\n  hydrate(token, record) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      if (ngDevMode && record.value === CIRCULAR) {\n        throwCyclicDependencyError(stringify(token));\n      } else if (record.value === NOT_YET) {\n        record.value = CIRCULAR;\n        if (ngDevMode) {\n          runInInjectorProfilerContext(this, token, () => {\n            record.value = record.factory();\n            emitInstanceCreatedByInjectorEvent(record.value);\n          });\n        } else {\n          record.value = record.factory();\n        }\n      }\n      if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {\n        this._ngOnDestroyHooks.add(record.value);\n      }\n      return record.value;\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  injectableDefInScope(def) {\n    if (!def.providedIn) {\n      return false;\n    }\n    const providedIn = resolveForwardRef(def.providedIn);\n    if (typeof providedIn === 'string') {\n      return providedIn === 'any' || this.scopes.has(providedIn);\n    } else {\n      return this.injectorDefTypes.has(providedIn);\n    }\n  }\n  removeOnDestroy(callback) {\n    const destroyCBIdx = this._onDestroyHooks.indexOf(callback);\n    if (destroyCBIdx !== -1) {\n      this._onDestroyHooks.splice(destroyCBIdx, 1);\n    }\n  }\n}\nfunction injectableDefOrInjectorDefFactory(token) {\n  // Most tokens will have an injectable def directly on them, which specifies a factory directly.\n  const injectableDef = getInjectableDef(token);\n  const factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);\n  if (factory !== null) {\n    return factory;\n  }\n  // InjectionTokens should have an injectable def (ɵprov) and thus should be handled above.\n  // If it's missing that, it's an error.\n  if (token instanceof InjectionToken) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Token ${stringify(token)} is missing a ɵprov definition.`);\n  }\n  // Undecorated types can sometimes be created if they have no constructor arguments.\n  if (token instanceof Function) {\n    return getUndecoratedInjectableFactory(token);\n  }\n  // There was no way to resolve a factory for this token.\n  throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && 'unreachable');\n}\nfunction getUndecoratedInjectableFactory(token) {\n  // If the token has parameters then it has dependencies that we cannot resolve implicitly.\n  const paramLength = token.length;\n  if (paramLength > 0) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Can't resolve all parameters for ${stringify(token)}: (${newArray(paramLength, '?').join(', ')}).`);\n  }\n  // The constructor function appears to have no parameters.\n  // This might be because it inherits from a super-class. In which case, use an injectable\n  // def from an ancestor if there is one.\n  // Otherwise this really is a simple class with no dependencies, so return a factory that\n  // just instantiates the zero-arg constructor.\n  const inheritedInjectableDef = getInheritedInjectableDef(token);\n  if (inheritedInjectableDef !== null) {\n    return () => inheritedInjectableDef.factory(token);\n  } else {\n    return () => new token();\n  }\n}\nfunction providerToRecord(provider) {\n  if (isValueProvider(provider)) {\n    return makeRecord(undefined, provider.useValue);\n  } else {\n    const factory = providerToFactory(provider);\n    return makeRecord(factory, NOT_YET);\n  }\n}\n/**\n * Converts a `SingleProvider` into a factory function.\n *\n * @param provider provider to convert to factory\n */\nfunction providerToFactory(provider, ngModuleType, providers) {\n  let factory = undefined;\n  if (ngDevMode && isEnvironmentProviders(provider)) {\n    throwInvalidProviderError(undefined, providers, provider);\n  }\n  if (isTypeProvider(provider)) {\n    const unwrappedProvider = resolveForwardRef(provider);\n    return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);\n  } else {\n    if (isValueProvider(provider)) {\n      factory = () => resolveForwardRef(provider.useValue);\n    } else if (isFactoryProvider(provider)) {\n      factory = () => provider.useFactory(...injectArgs(provider.deps || []));\n    } else if (isExistingProvider(provider)) {\n      factory = () => ɵɵinject(resolveForwardRef(provider.useExisting));\n    } else {\n      const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));\n      if (ngDevMode && !classRef) {\n        throwInvalidProviderError(ngModuleType, providers, provider);\n      }\n      if (hasDeps(provider)) {\n        factory = () => new classRef(...injectArgs(provider.deps));\n      } else {\n        return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);\n      }\n    }\n  }\n  return factory;\n}\nfunction assertNotDestroyed(injector) {\n  if (injector.destroyed) {\n    throw new RuntimeError(205 /* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED */, ngDevMode && 'Injector has already been destroyed.');\n  }\n}\nfunction makeRecord(factory, value, multi = false) {\n  return {\n    factory: factory,\n    value: value,\n    multi: multi ? [] : undefined\n  };\n}\nfunction hasDeps(value) {\n  return !!value.deps;\n}\nfunction hasOnDestroy(value) {\n  return value !== null && typeof value === 'object' && typeof value.ngOnDestroy === 'function';\n}\nfunction couldBeInjectableType(value) {\n  return typeof value === 'function' || typeof value === 'object' && value instanceof InjectionToken;\n}\nfunction forEachSingleProvider(providers, fn) {\n  for (const provider of providers) {\n    if (Array.isArray(provider)) {\n      forEachSingleProvider(provider, fn);\n    } else if (provider && isEnvironmentProviders(provider)) {\n      forEachSingleProvider(provider.ɵproviders, fn);\n    } else {\n      fn(provider);\n    }\n  }\n}\n\n/**\n * Runs the given function in the [context](guide/di/dependency-injection-context) of the given\n * `Injector`.\n *\n * Within the function's stack frame, [`inject`](api/core/inject) can be used to inject dependencies\n * from the given `Injector`. Note that `inject` is only usable synchronously, and cannot be used in\n * any asynchronous callbacks or after any `await` points.\n *\n * @param injector the injector which will satisfy calls to [`inject`](api/core/inject) while `fn`\n *     is executing\n * @param fn the closure to be run in the context of `injector`\n * @returns the return value of the function, if any\n * @publicApi\n */\nfunction runInInjectionContext(injector, fn) {\n  if (injector instanceof R3Injector) {\n    assertNotDestroyed(injector);\n  }\n  let prevInjectorProfilerContext;\n  if (ngDevMode) {\n    prevInjectorProfilerContext = setInjectorProfilerContext({\n      injector,\n      token: null\n    });\n  }\n  const prevInjector = setCurrentInjector(injector);\n  const previousInjectImplementation = setInjectImplementation(undefined);\n  try {\n    return fn();\n  } finally {\n    setCurrentInjector(prevInjector);\n    ngDevMode && setInjectorProfilerContext(prevInjectorProfilerContext);\n    setInjectImplementation(previousInjectImplementation);\n  }\n}\n/**\n * Whether the current stack frame is inside an injection context.\n */\nfunction isInInjectionContext() {\n  return getInjectImplementation() !== undefined || getCurrentInjector() != null;\n}\n/**\n * Asserts that the current stack frame is within an [injection\n * context](guide/di/dependency-injection-context) and has access to `inject`.\n *\n * @param debugFn a reference to the function making the assertion (used for the error message).\n *\n * @publicApi\n */\nfunction assertInInjectionContext(debugFn) {\n  // Taking a `Function` instead of a string name here prevents the unminified name of the function\n  // from being retained in the bundle regardless of minification.\n  if (!isInInjectionContext()) {\n    throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode && debugFn.name + '() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`');\n  }\n}\nvar FactoryTarget;\n(function (FactoryTarget) {\n  FactoryTarget[FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n  FactoryTarget[FactoryTarget[\"Component\"] = 1] = \"Component\";\n  FactoryTarget[FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n  FactoryTarget[FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n  FactoryTarget[FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n})(FactoryTarget || (FactoryTarget = {}));\nvar R3TemplateDependencyKind;\n(function (R3TemplateDependencyKind) {\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"Directive\"] = 0] = \"Directive\";\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"Pipe\"] = 1] = \"Pipe\";\n  R3TemplateDependencyKind[R3TemplateDependencyKind[\"NgModule\"] = 2] = \"NgModule\";\n})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));\nvar ViewEncapsulation$1;\n(function (ViewEncapsulation) {\n  ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n  // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n  ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n  ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));\nfunction getCompilerFacade(request) {\n  const globalNg = _global['ng'];\n  if (globalNg && globalNg.ɵcompilerFacade) {\n    return globalNg.ɵcompilerFacade;\n  }\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // Log the type as an error so that a developer can easily navigate to the type from the\n    // console.\n    console.error(`JIT compilation failed for ${request.kind}`, request.type);\n    let message = `The ${request.kind} '${request.type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.\\n\\n`;\n    if (request.usage === 1 /* JitCompilerUsage.PartialDeclaration */) {\n      message += `The ${request.kind} is part of a library that has been partially compiled.\\n`;\n      message += `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.\\n`;\n      message += '\\n';\n      message += `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.\\n`;\n    } else {\n      message += `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.\\n`;\n    }\n    message += `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',\\n`;\n    message += `or manually provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`;\n    throw new Error(message);\n  } else {\n    throw new Error('JIT compiler unavailable');\n  }\n}\n\n/**\n * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.\n *\n * This should be kept up to date with the public exports of @angular/core.\n */\nconst angularCoreDiEnv = {\n  'ɵɵdefineInjectable': ɵɵdefineInjectable,\n  'ɵɵdefineInjector': ɵɵdefineInjector,\n  'ɵɵinject': ɵɵinject,\n  'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,\n  'resolveForwardRef': resolveForwardRef\n};\n\n/**\n * @description\n *\n * Represents a type that a Component or other object is instances of.\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by\n * the `MyCustomComponent` constructor function.\n *\n * @publicApi\n */\nconst Type = Function;\nfunction isType(v) {\n  return typeof v === 'function';\n}\n\n/*\n * #########################\n * Attention: These Regular expressions have to hold even if the code is minified!\n * ##########################\n */\n/**\n * Regular expression that detects pass-through constructors for ES5 output. This Regex\n * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also\n * it intends to capture the pattern where existing constructors have been downleveled from\n * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.\n *\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, arguments) || this;\n * ```\n *\n * downleveled to ES5 with `downlevelIteration` for TypeScript < 4.2:\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, __spread(arguments)) || this;\n * ```\n *\n * or downleveled to ES5 with `downlevelIteration` for TypeScript >= 4.2:\n * ```ts\n *   function MyClass() {\n *     var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;\n * ```\n *\n * More details can be found in: https://github.com/angular/angular/issues/38453.\n */\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|(?:[^()]+\\(\\[\\],)?[^()]+\\(arguments\\).*)\\)/;\n/** Regular expression that detects ES2015 classes which extend from other classes. */\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes and\n * have an explicit constructor defined.\n */\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes\n * and inherit a constructor.\n */\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{[^}]*super\\(\\.\\.\\.arguments\\)/;\n/**\n * Determine whether a stringified type is a class which delegates its constructor\n * to its parent.\n *\n * This is not trivial since compiled code can actually contain a constructor function\n * even if the original source code did not. For instance, when the child class contains\n * an initialized instance property.\n */\nfunction isDelegateCtor(typeStr) {\n  return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);\n}\nclass ReflectionCapabilities {\n  _reflect;\n  constructor(reflect) {\n    this._reflect = reflect || _global['Reflect'];\n  }\n  factory(t) {\n    return (...args) => new t(...args);\n  }\n  /** @internal */\n  _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n    let result;\n    if (typeof paramTypes === 'undefined') {\n      result = newArray(paramAnnotations.length);\n    } else {\n      result = newArray(paramTypes.length);\n    }\n    for (let i = 0; i < result.length; i++) {\n      // TS outputs Object for parameters without types, while Traceur omits\n      // the annotations. For now we preserve the Traceur behavior to aid\n      // migration, but this can be revisited.\n      if (typeof paramTypes === 'undefined') {\n        result[i] = [];\n      } else if (paramTypes[i] && paramTypes[i] != Object) {\n        result[i] = [paramTypes[i]];\n      } else {\n        result[i] = [];\n      }\n      if (paramAnnotations && paramAnnotations[i] != null) {\n        result[i] = result[i].concat(paramAnnotations[i]);\n      }\n    }\n    return result;\n  }\n  _ownParameters(type, parentCtor) {\n    const typeStr = type.toString();\n    // If we have no decorators, we only have function.length as metadata.\n    // In that case, to detect whether a child class declared an own constructor or not,\n    // we need to look inside of that constructor to check whether it is\n    // just calling the parent.\n    // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439\n    // that sets 'design:paramtypes' to []\n    // if a class inherits from another class but has no ctor declared itself.\n    if (isDelegateCtor(typeStr)) {\n      return null;\n    }\n    // Prefer the direct API.\n    if (type.parameters && type.parameters !== parentCtor.parameters) {\n      return type.parameters;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    const tsickleCtorParams = type.ctorParameters;\n    if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n      // Newer tsickle uses a function closure\n      // Retain the non-function case for compatibility with older tsickle\n      const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n      const paramTypes = ctorParameters.map(ctorParam => ctorParam && ctorParam.type);\n      const paramAnnotations = ctorParameters.map(ctorParam => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n    }\n    // API for metadata created by invoking the decorators.\n    const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n    const paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata('design:paramtypes', type);\n    if (paramTypes || paramAnnotations) {\n      return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n    }\n    // If a class has no decorators, at least create metadata\n    // based on function.length.\n    // Note: We know that this is a real constructor as we checked\n    // the content of the constructor above.\n    return newArray(type.length);\n  }\n  parameters(type) {\n    // Note: only report metadata if we have at least one class decorator\n    // to stay in sync with the static reflector.\n    if (!isType(type)) {\n      return [];\n    }\n    const parentCtor = getParentCtor(type);\n    let parameters = this._ownParameters(type, parentCtor);\n    if (!parameters && parentCtor !== Object) {\n      parameters = this.parameters(parentCtor);\n    }\n    return parameters || [];\n  }\n  _ownAnnotations(typeOrFunc, parentCtor) {\n    // Prefer the direct API.\n    if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n      let annotations = typeOrFunc.annotations;\n      if (typeof annotations === 'function' && annotations.annotations) {\n        annotations = annotations.annotations;\n      }\n      return annotations;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n      return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n    }\n    // API for metadata created by invoking the decorators.\n    if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n      return typeOrFunc[ANNOTATIONS];\n    }\n    return null;\n  }\n  annotations(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return [];\n    }\n    const parentCtor = getParentCtor(typeOrFunc);\n    const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n    const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n    return parentAnnotations.concat(ownAnnotations);\n  }\n  _ownPropMetadata(typeOrFunc, parentCtor) {\n    // Prefer the direct API.\n    if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n      let propMetadata = typeOrFunc.propMetadata;\n      if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n        propMetadata = propMetadata.propMetadata;\n      }\n      return propMetadata;\n    }\n    // API of tsickle for lowering decorators to properties on the class.\n    if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n      const propDecorators = typeOrFunc.propDecorators;\n      const propMetadata = {};\n      Object.keys(propDecorators).forEach(prop => {\n        propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n      });\n      return propMetadata;\n    }\n    // API for metadata created by invoking the decorators.\n    if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n      return typeOrFunc[PROP_METADATA];\n    }\n    return null;\n  }\n  propMetadata(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return {};\n    }\n    const parentCtor = getParentCtor(typeOrFunc);\n    const propMetadata = {};\n    if (parentCtor !== Object) {\n      const parentPropMetadata = this.propMetadata(parentCtor);\n      Object.keys(parentPropMetadata).forEach(propName => {\n        propMetadata[propName] = parentPropMetadata[propName];\n      });\n    }\n    const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n    if (ownPropMetadata) {\n      Object.keys(ownPropMetadata).forEach(propName => {\n        const decorators = [];\n        if (propMetadata.hasOwnProperty(propName)) {\n          decorators.push(...propMetadata[propName]);\n        }\n        decorators.push(...ownPropMetadata[propName]);\n        propMetadata[propName] = decorators;\n      });\n    }\n    return propMetadata;\n  }\n  ownPropMetadata(typeOrFunc) {\n    if (!isType(typeOrFunc)) {\n      return {};\n    }\n    return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n  }\n  hasLifecycleHook(type, lcProperty) {\n    return type instanceof Type && lcProperty in type.prototype;\n  }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n  if (!decoratorInvocations) {\n    return [];\n  }\n  return decoratorInvocations.map(decoratorInvocation => {\n    const decoratorType = decoratorInvocation.type;\n    const annotationCls = decoratorType.annotationCls;\n    const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n    return new annotationCls(...annotationArgs);\n  });\n}\nfunction getParentCtor(ctor) {\n  const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n  const parentCtor = parentProto ? parentProto.constructor : null;\n  // Note: We always use `Object` as the null value\n  // to simplify checking later on.\n  return parentCtor || Object;\n}\n\n// Below are constants for LView indices to help us look up LView members\n// without having to remember the specific indices.\n// Uglify will inline these when minifying so there shouldn't be a cost.\nconst HOST = 0;\nconst TVIEW = 1;\n// Shared with LContainer\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst T_HOST = 5;\n// End shared with LContainer\nconst HYDRATION = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR = 9;\nconst ENVIRONMENT = 10;\nconst RENDERER = 11;\nconst CHILD_HEAD = 12;\nconst CHILD_TAIL = 13;\n// FIXME(misko): Investigate if the three declarations aren't all same thing.\nconst DECLARATION_VIEW = 14;\nconst DECLARATION_COMPONENT_VIEW = 15;\nconst DECLARATION_LCONTAINER = 16;\nconst PREORDER_HOOK_FLAGS = 17;\nconst QUERIES = 18;\nconst ID = 19;\nconst EMBEDDED_VIEW_INJECTOR = 20;\nconst ON_DESTROY_HOOKS = 21;\nconst EFFECTS_TO_SCHEDULE = 22;\nconst EFFECTS = 23;\nconst REACTIVE_TEMPLATE_CONSUMER = 24;\n/**\n * Size of LView's header. Necessary to adjust for it when setting slots.\n *\n * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate\n * instruction index into `LView` index. All other indexes should be in the `LView` index space and\n * there should be no need to refer to `HEADER_OFFSET` anywhere else.\n */\nconst HEADER_OFFSET = 25;\n\n/**\n * Special location which allows easy identification of type. If we have an array which was\n * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is\n * `LContainer`.\n */\nconst TYPE = 1;\n/**\n * Below are constants for LContainer indices to help us look up LContainer members\n * without having to remember the specific indices.\n * Uglify will inline these when minifying so there shouldn't be a cost.\n */\n// FLAGS, PARENT, NEXT, and T_HOST are indices 2, 3, 4, and 5\n// As we already have these constants in LView, we don't need to re-create them.\nconst DEHYDRATED_VIEWS = 6;\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\n/**\n * Size of LContainer's header. Represents the index after which all views in the\n * container will be inserted. We need to keep a record of current views so we know\n * which views are already in the DOM (and don't need to be re-added) and so we can\n * remove views from the DOM when they are no longer required.\n */\nconst CONTAINER_HEADER_OFFSET = 10;\n/** Flags associated with an LContainer (saved in LContainer[FLAGS]) */\nvar LContainerFlags;\n(function (LContainerFlags) {\n  LContainerFlags[LContainerFlags[\"None\"] = 0] = \"None\";\n  /**\n   * Flag to signify that this `LContainer` may have transplanted views which need to be change\n   * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.\n   *\n   * This flag, once set, is never unset for the `LContainer`.\n   */\n  LContainerFlags[LContainerFlags[\"HasTransplantedViews\"] = 2] = \"HasTransplantedViews\";\n})(LContainerFlags || (LContainerFlags = {}));\n\n/**\n * True if `value` is `LView`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLView(value) {\n  return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\n/**\n * True if `value` is `LContainer`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLContainer(value) {\n  return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n  return (tNode.flags & 4 /* TNodeFlags.hasContentQuery */) !== 0;\n}\nfunction isComponentHost(tNode) {\n  return tNode.componentOffset > -1;\n}\nfunction isDirectiveHost(tNode) {\n  return (tNode.flags & 1 /* TNodeFlags.isDirectiveHost */) === 1 /* TNodeFlags.isDirectiveHost */;\n}\nfunction isComponentDef(def) {\n  return !!def.template;\n}\nfunction isRootView(target) {\n  return (target[FLAGS] & 512 /* LViewFlags.IsRoot */) !== 0;\n}\nfunction isProjectionTNode(tNode) {\n  return (tNode.type & 16 /* TNodeType.Projection */) === 16 /* TNodeType.Projection */;\n}\nfunction hasI18n(lView) {\n  return (lView[FLAGS] & 32 /* LViewFlags.HasI18n */) === 32 /* LViewFlags.HasI18n */;\n}\nfunction isDestroyed(lView) {\n  return (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;\n}\n\n// [Assert functions do not constraint type when they are guarded by a truthy\n// expression.](https://github.com/microsoft/TypeScript/issues/37295)\nfunction assertTNodeForLView(tNode, lView) {\n  assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeForTView(tNode, tView) {\n  assertTNode(tNode);\n  const tData = tView.data;\n  for (let i = HEADER_OFFSET; i < tData.length; i++) {\n    if (tData[i] === tNode) {\n      return;\n    }\n  }\n  throwError('This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n  assertDefined(tNode, 'TNode must be defined');\n  if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n    throwError('Not of type TNode, got: ' + tNode);\n  }\n}\nfunction assertTIcu(tIcu) {\n  assertDefined(tIcu, 'Expected TIcu to be defined');\n  if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n    throwError('Object is not of TIcu type.');\n  }\n}\nfunction assertComponentType(actual, msg = \"Type passed in is not ComponentType, it does not have 'ɵcmp' property.\") {\n  if (!getComponentDef(actual)) {\n    throwError(msg);\n  }\n}\nfunction assertNgModuleType(actual, msg = \"Type passed in is not NgModuleType, it does not have 'ɵmod' property.\") {\n  if (!getNgModuleDef(actual)) {\n    throwError(msg);\n  }\n}\nfunction assertCurrentTNodeIsParent(isParent) {\n  assertEqual(isParent, true, 'currentTNode should be a parent');\n}\nfunction assertHasParent(tNode) {\n  assertDefined(tNode, 'currentTNode should exist!');\n  assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertLContainer(value) {\n  assertDefined(value, 'LContainer must be defined');\n  assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n  value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n  assertDefined(value, 'LView must be defined');\n  assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n  assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n  assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');\n}\n/**\n * This is a basic sanity check that an object is probably a directive def. DirectiveDef is\n * an interface, so we can't do a direct instanceof check.\n */\nfunction assertDirectiveDef(obj) {\n  if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n    throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n  }\n}\nfunction assertIndexInDeclRange(tView, index) {\n  assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n  const tView = lView[1];\n  assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n  if (!(lower <= index && index < upper)) {\n    throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n  }\n}\nfunction assertProjectionSlots(lView, errMessage) {\n  assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');\n  assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage || 'Components with projection nodes (<ng-content>) must have projection slots defined.');\n}\nfunction assertParentView(lView, errMessage) {\n  assertDefined(lView, errMessage || \"Component views should always have a parent view (component's host view)\");\n}\nfunction assertNoDuplicateDirectives(directives) {\n  // The array needs at least two elements in order to have duplicates.\n  if (directives.length < 2) {\n    return;\n  }\n  const seenDirectives = new Set();\n  for (const current of directives) {\n    if (seenDirectives.has(current)) {\n      throw new RuntimeError(309 /* RuntimeErrorCode.DUPLICATE_DIRECTIVE */, `Directive ${current.type.name} matches multiple times on the same element. ` + `Directives can only match an element once.`);\n    }\n    seenDirectives.add(current);\n  }\n}\n/**\n * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a\n * NodeInjector data structure.\n *\n * @param lView `LView` which should be checked.\n * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.\n */\nfunction assertNodeInjector(lView, injectorIndex) {\n  assertIndexInExpandoRange(lView, injectorIndex);\n  assertIndexInExpandoRange(lView, injectorIndex + 8 /* NodeInjectorOffset.PARENT */);\n  assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n  assertNumber(lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */], 'injectorIndex should point to parent injector');\n}\n\n/**\n * Represents a basic change from a previous to a new value for a single\n * property on a directive instance. Passed as a value in a\n * {@link SimpleChanges} object to the `ngOnChanges` hook.\n *\n * @see {@link OnChanges}\n *\n * @publicApi\n */\nclass SimpleChange {\n  previousValue;\n  currentValue;\n  firstChange;\n  constructor(previousValue, currentValue, firstChange) {\n    this.previousValue = previousValue;\n    this.currentValue = currentValue;\n    this.firstChange = firstChange;\n  }\n  /**\n   * Check whether the new value is the first value assigned.\n   */\n  isFirstChange() {\n    return this.firstChange;\n  }\n}\nfunction applyValueToInputField(instance, inputSignalNode, privateName, value) {\n  if (inputSignalNode !== null) {\n    inputSignalNode.applyValueToInputSignal(inputSignalNode, value);\n  } else {\n    instance[privateName] = value;\n  }\n}\n\n/**\n * The NgOnChangesFeature decorates a component with support for the ngOnChanges\n * lifecycle hook, so it should be included in any component that implements\n * that hook.\n *\n * If the component or directive uses inheritance, the NgOnChangesFeature MUST\n * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise\n * inherited properties will not be propagated to the ngOnChanges lifecycle\n * hook.\n *\n * Example usage:\n *\n * ```ts\n * static ɵcmp = defineComponent({\n *   ...\n *   inputs: {name: 'publicName'},\n *   features: [NgOnChangesFeature]\n * });\n * ```\n *\n * @codeGenApi\n */\nconst ɵɵNgOnChangesFeature = /* @__PURE__ */(() => {\n  const ɵɵNgOnChangesFeatureImpl = () => NgOnChangesFeatureImpl;\n  // This option ensures that the ngOnChanges lifecycle hook will be inherited\n  // from superclasses (in InheritDefinitionFeature).\n  /** @nocollapse */\n  ɵɵNgOnChangesFeatureImpl.ngInherit = true;\n  return ɵɵNgOnChangesFeatureImpl;\n})();\nfunction NgOnChangesFeatureImpl(definition) {\n  if (definition.type.prototype.ngOnChanges) {\n    definition.setInput = ngOnChangesSetInput;\n  }\n  return rememberChangeHistoryAndInvokeOnChangesHook;\n}\n/**\n * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate\n * `ngOnChanges`.\n *\n * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are\n * found it invokes `ngOnChanges` on the component instance.\n *\n * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,\n *     it is guaranteed to be called with component instance.\n */\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n  const simpleChangesStore = getSimpleChangesStore(this);\n  const current = simpleChangesStore?.current;\n  if (current) {\n    const previous = simpleChangesStore.previous;\n    if (previous === EMPTY_OBJ) {\n      simpleChangesStore.previous = current;\n    } else {\n      // New changes are copied to the previous store, so that we don't lose history for inputs\n      // which were not changed this time\n      for (let key in current) {\n        previous[key] = current[key];\n      }\n    }\n    simpleChangesStore.current = null;\n    this.ngOnChanges(current);\n  }\n}\nfunction ngOnChangesSetInput(instance, inputSignalNode, value, publicName, privateName) {\n  const declaredName = this.declaredInputs[publicName];\n  ngDevMode && assertString(declaredName, 'Name of input in ngOnChanges has to be a string');\n  const simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {\n    previous: EMPTY_OBJ,\n    current: null\n  });\n  const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n  const previous = simpleChangesStore.previous;\n  const previousChange = previous[declaredName];\n  current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n  applyValueToInputField(instance, inputSignalNode, privateName, value);\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n  return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n  return instance[SIMPLE_CHANGES_STORE] = store;\n}\nlet profilerCallback = null;\n/**\n * Sets the callback function which will be invoked before and after performing certain actions at\n * runtime (for example, before and after running change detection).\n *\n * Warning: this function is *INTERNAL* and should not be relied upon in application's code.\n * The contract of the function might be changed in any release and/or the function can be removed\n * completely.\n *\n * @param profiler function provided by the caller or null value to disable profiling.\n */\nconst setProfiler = profiler => {\n  profilerCallback = profiler;\n};\n/**\n * Profiler function which wraps user code executed by the runtime.\n *\n * @param event ProfilerEvent corresponding to the execution context\n * @param instance component instance\n * @param hookOrListener lifecycle hook function or output listener. The value depends on the\n *  execution context\n * @returns\n */\nconst profiler = function (event, instance, hookOrListener) {\n  if (profilerCallback != null /* both `null` and `undefined` */) {\n    profilerCallback(event, instance, hookOrListener);\n  }\n};\nconst SVG_NAMESPACE = 'svg';\nconst MATH_ML_NAMESPACE = 'math';\n\n/**\n * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)\n * in same location in `LView`. This is because we don't want to pre-allocate space for it\n * because the storage is sparse. This file contains utilities for dealing with such data types.\n *\n * How do we know what is stored at a given location in `LView`.\n * - `Array.isArray(value) === false` => `RNode` (The normal storage value)\n * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.\n *   - `typeof value[TYPE] === 'object'` => `LView`\n *      - This happens when we have a component at a given location\n *   - `typeof value[TYPE] === true` => `LContainer`\n *      - This happens when we have `LContainer` binding at a given location.\n *\n *\n * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.\n */\n/**\n * Returns `RNode`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapRNode(value) {\n  while (Array.isArray(value)) {\n    value = value[HOST];\n  }\n  return value;\n}\n/**\n * Returns `LView` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLView(value) {\n  while (Array.isArray(value)) {\n    // This check is same as `isLView()` but we don't call at as we don't want to call\n    // `Array.isArray()` twice and give JITer more work for inlining.\n    if (typeof value[TYPE] === 'object') return value;\n    value = value[HOST];\n  }\n  return null;\n}\n/**\n * Retrieves an element value from the provided `viewData`, by unwrapping\n * from any containers, component views, or style contexts.\n */\nfunction getNativeByIndex(index, lView) {\n  ngDevMode && assertIndexInRange(lView, index);\n  ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n  return unwrapRNode(lView[index]);\n}\n/**\n * Retrieve an `RNode` for a given `TNode` and `LView`.\n *\n * This function guarantees in dev mode to retrieve a non-null `RNode`.\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNode(tNode, lView) {\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  ngDevMode && assertIndexInRange(lView, tNode.index);\n  const node = unwrapRNode(lView[tNode.index]);\n  return node;\n}\n/**\n * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.\n *\n * Some `TNode`s don't have associated `RNode`s. For example `Projection`\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNodeOrNull(tNode, lView) {\n  const index = tNode === null ? -1 : tNode.index;\n  if (index !== -1) {\n    ngDevMode && assertTNodeForLView(tNode, lView);\n    const node = unwrapRNode(lView[index]);\n    return node;\n  }\n  return null;\n}\n// fixme(misko): The return Type should be `TNode|null`\nfunction getTNode(tView, index) {\n  ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n  ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n  const tNode = tView.data[index];\n  ngDevMode && tNode !== null && assertTNode(tNode);\n  return tNode;\n}\n/** Retrieves a value from any `LView` or `TData`. */\nfunction load(view, index) {\n  ngDevMode && assertIndexInRange(view, index);\n  return view[index];\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n  // Could be an LView or an LContainer. If LContainer, unwrap to find LView.\n  ngDevMode && assertIndexInRange(hostView, nodeIndex);\n  const slotValue = hostView[nodeIndex];\n  const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n  return lView;\n}\n/** Checks whether a given view is in creation mode */\nfunction isCreationMode(view) {\n  return (view[FLAGS] & 4 /* LViewFlags.CreationMode */) === 4 /* LViewFlags.CreationMode */;\n}\n/**\n * Returns a boolean for whether the view is attached to the change detection tree.\n *\n * Note: This determines whether a view should be checked, not whether it's inserted\n * into a container. For that, you'll want `viewAttachedToContainer` below.\n */\nfunction viewAttachedToChangeDetector(view) {\n  return (view[FLAGS] & 128 /* LViewFlags.Attached */) === 128 /* LViewFlags.Attached */;\n}\n/** Returns a boolean for whether the view is attached to a container. */\nfunction viewAttachedToContainer(view) {\n  return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n  if (index === null || index === undefined) return null;\n  ngDevMode && assertIndexInRange(consts, index);\n  return consts[index];\n}\n/**\n * Resets the pre-order hook flags of the view.\n * @param lView the LView on which the flags are reset\n */\nfunction resetPreOrderHookFlags(lView) {\n  lView[PREORDER_HOOK_FLAGS] = 0;\n}\n/**\n * Adds the `RefreshView` flag from the lView and updates HAS_CHILD_VIEWS_TO_REFRESH flag of\n * parents.\n */\nfunction markViewForRefresh(lView) {\n  if (lView[FLAGS] & 1024 /* LViewFlags.RefreshView */) {\n    return;\n  }\n  lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  if (viewAttachedToChangeDetector(lView)) {\n    markAncestorsForTraversal(lView);\n  }\n}\n/**\n * Walks up the LView hierarchy.\n * @param nestingLevel Number of times to walk up in hierarchy.\n * @param currentView View from which to start the lookup.\n */\nfunction walkUpViews(nestingLevel, currentView) {\n  while (nestingLevel > 0) {\n    ngDevMode && assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n    currentView = currentView[DECLARATION_VIEW];\n    nestingLevel--;\n  }\n  return currentView;\n}\nfunction requiresRefreshOrTraversal(lView) {\n  return !!(lView[FLAGS] & (1024 /* LViewFlags.RefreshView */ | 8192 /* LViewFlags.HasChildViewsToRefresh */) || lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty);\n}\n/**\n * Updates the `HasChildViewsToRefresh` flag on the parents of the `LView` as well as the\n * parents above.\n */\nfunction updateAncestorTraversalFlagsOnAttach(lView) {\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(9 /* NotificationSource.ViewAttached */);\n  if (lView[FLAGS] & 64 /* LViewFlags.Dirty */) {\n    lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  }\n  if (requiresRefreshOrTraversal(lView)) {\n    markAncestorsForTraversal(lView);\n  }\n}\n/**\n * Ensures views above the given `lView` are traversed during change detection even when they are\n * not dirty.\n *\n * This is done by setting the `HAS_CHILD_VIEWS_TO_REFRESH` flag up to the root, stopping when the\n * flag is already `true` or the `lView` is detached.\n */\nfunction markAncestorsForTraversal(lView) {\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(0 /* NotificationSource.MarkAncestorsForTraversal */);\n  let parent = getLViewParent(lView);\n  while (parent !== null) {\n    // We stop adding markers to the ancestors once we reach one that already has the marker. This\n    // is to avoid needlessly traversing all the way to the root when the marker already exists.\n    if (parent[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */) {\n      break;\n    }\n    parent[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;\n    if (!viewAttachedToChangeDetector(parent)) {\n      break;\n    }\n    parent = getLViewParent(parent);\n  }\n}\n/**\n * Stores a LView-specific destroy callback.\n */\nfunction storeLViewOnDestroy(lView, onDestroyCallback) {\n  if ((lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) {\n    throw new RuntimeError(911 /* RuntimeErrorCode.VIEW_ALREADY_DESTROYED */, ngDevMode && 'View has already been destroyed.');\n  }\n  if (lView[ON_DESTROY_HOOKS] === null) {\n    lView[ON_DESTROY_HOOKS] = [];\n  }\n  lView[ON_DESTROY_HOOKS].push(onDestroyCallback);\n}\n/**\n * Removes previously registered LView-specific destroy callback.\n */\nfunction removeLViewOnDestroy(lView, onDestroyCallback) {\n  if (lView[ON_DESTROY_HOOKS] === null) return;\n  const destroyCBIdx = lView[ON_DESTROY_HOOKS].indexOf(onDestroyCallback);\n  if (destroyCBIdx !== -1) {\n    lView[ON_DESTROY_HOOKS].splice(destroyCBIdx, 1);\n  }\n}\n/**\n * Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of\n * that LContainer, which is an LView\n * @param lView the lView whose parent to get\n */\nfunction getLViewParent(lView) {\n  ngDevMode && assertLView(lView);\n  const parent = lView[PARENT];\n  return isLContainer(parent) ? parent[PARENT] : parent;\n}\nconst instructionState = {\n  lFrame: createLFrame(null),\n  bindingsEnabled: true,\n  skipHydrationRootTNode: null\n};\nvar CheckNoChangesMode;\n(function (CheckNoChangesMode) {\n  CheckNoChangesMode[CheckNoChangesMode[\"Off\"] = 0] = \"Off\";\n  CheckNoChangesMode[CheckNoChangesMode[\"Exhaustive\"] = 1] = \"Exhaustive\";\n  CheckNoChangesMode[CheckNoChangesMode[\"OnlyDirtyViews\"] = 2] = \"OnlyDirtyViews\";\n})(CheckNoChangesMode || (CheckNoChangesMode = {}));\n/**\n * In this mode, any changes in bindings will throw an ExpressionChangedAfterChecked error.\n *\n * Necessary to support ChangeDetectorRef.checkNoChanges().\n *\n * The `checkNoChanges` function is invoked only in ngDevMode=true and verifies that no unintended\n * changes exist in the change detector or its children.\n */\nlet _checkNoChangesMode = 0; /* CheckNoChangesMode.Off */\n/**\n * Flag used to indicate that we are in the middle running change detection on a view\n *\n * @see detectChangesInViewWhileDirty\n */\nlet _isRefreshingViews = false;\n/**\n * Returns true if the instruction state stack is empty.\n *\n * Intended to be called from tests only (tree shaken otherwise).\n */\nfunction specOnlyIsInstructionStateEmpty() {\n  return instructionState.lFrame.parent === null;\n}\nfunction getElementDepthCount() {\n  return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n  instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n  instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n  return instructionState.bindingsEnabled;\n}\n/**\n * Returns true if currently inside a skip hydration block.\n * @returns boolean\n */\nfunction isInSkipHydrationBlock$1() {\n  return instructionState.skipHydrationRootTNode !== null;\n}\n/**\n * Returns true if this is the root TNode of the skip hydration block.\n * @param tNode the current TNode\n * @returns boolean\n */\nfunction isSkipHydrationRootTNode(tNode) {\n  return instructionState.skipHydrationRootTNode === tNode;\n}\n/**\n * Enables directive matching on elements.\n *\n *  * Example:\n * ```html\n * <my-comp my-directive>\n *   Should match component / directive.\n * </my-comp>\n * <div ngNonBindable>\n *   <!-- ɵɵdisableBindings() -->\n *   <my-comp my-directive>\n *     Should not match component / directive because we are in ngNonBindable.\n *   </my-comp>\n *   <!-- ɵɵenableBindings() -->\n * </div>\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵenableBindings() {\n  instructionState.bindingsEnabled = true;\n}\n/**\n * Sets a flag to specify that the TNode is in a skip hydration block.\n * @param tNode the current TNode\n */\nfunction enterSkipHydrationBlock(tNode) {\n  instructionState.skipHydrationRootTNode = tNode;\n}\n/**\n * Disables directive matching on element.\n *\n *  * Example:\n * ```html\n * <my-comp my-directive>\n *   Should match component / directive.\n * </my-comp>\n * <div ngNonBindable>\n *   <!-- ɵɵdisableBindings() -->\n *   <my-comp my-directive>\n *     Should not match component / directive because we are in ngNonBindable.\n *   </my-comp>\n *   <!-- ɵɵenableBindings() -->\n * </div>\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdisableBindings() {\n  instructionState.bindingsEnabled = false;\n}\n/**\n * Clears the root skip hydration node when leaving a skip hydration block.\n */\nfunction leaveSkipHydrationBlock() {\n  instructionState.skipHydrationRootTNode = null;\n}\n/**\n * Return the current `LView`.\n */\nfunction getLView() {\n  return instructionState.lFrame.lView;\n}\n/**\n * Return the current `TView`.\n */\nfunction getTView() {\n  return instructionState.lFrame.tView;\n}\n/**\n * Restores `contextViewData` to the given OpaqueViewState instance.\n *\n * Used in conjunction with the getCurrentView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @param viewToRestore The OpaqueViewState instance to restore.\n * @returns Context of the restored OpaqueViewState instance.\n *\n * @codeGenApi\n */\nfunction ɵɵrestoreView(viewToRestore) {\n  instructionState.lFrame.contextLView = viewToRestore;\n  return viewToRestore[CONTEXT];\n}\n/**\n * Clears the view set in `ɵɵrestoreView` from memory. Returns the passed in\n * value so that it can be used as a return value of an instruction.\n *\n * @codeGenApi\n */\nfunction ɵɵresetView(value) {\n  instructionState.lFrame.contextLView = null;\n  return value;\n}\nfunction getCurrentTNode() {\n  let currentTNode = getCurrentTNodePlaceholderOk();\n  while (currentTNode !== null && currentTNode.type === 64 /* TNodeType.Placeholder */) {\n    currentTNode = currentTNode.parent;\n  }\n  return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n  return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n  const lFrame = instructionState.lFrame;\n  const currentTNode = lFrame.currentTNode;\n  return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n  ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n  const lFrame = instructionState.lFrame;\n  lFrame.currentTNode = tNode;\n  lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n  return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n  instructionState.lFrame.isParent = false;\n}\nfunction getContextLView() {\n  const contextLView = instructionState.lFrame.contextLView;\n  ngDevMode && assertDefined(contextLView, 'contextLView must be defined.');\n  return contextLView;\n}\nfunction isInCheckNoChangesMode() {\n  !ngDevMode && throwError('Must never be called in production mode');\n  return _checkNoChangesMode !== CheckNoChangesMode.Off;\n}\nfunction isExhaustiveCheckNoChanges() {\n  !ngDevMode && throwError('Must never be called in production mode');\n  return _checkNoChangesMode === CheckNoChangesMode.Exhaustive;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  _checkNoChangesMode = mode;\n}\nfunction isRefreshingViews() {\n  return _isRefreshingViews;\n}\nfunction setIsRefreshingViews(mode) {\n  const prev = _isRefreshingViews;\n  _isRefreshingViews = mode;\n  return prev;\n}\n// top level variables should not be exported for performance reasons (PERF_NOTES.md)\nfunction getBindingRoot() {\n  const lFrame = instructionState.lFrame;\n  let index = lFrame.bindingRootIndex;\n  if (index === -1) {\n    index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n  }\n  return index;\n}\nfunction getBindingIndex() {\n  return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n  return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n  return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n  const lFrame = instructionState.lFrame;\n  const index = lFrame.bindingIndex;\n  lFrame.bindingIndex = lFrame.bindingIndex + count;\n  return index;\n}\nfunction isInI18nBlock() {\n  return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n  instructionState.lFrame.inI18n = isInI18nBlock;\n}\n/**\n * Set a new binding root index so that host template functions can execute.\n *\n * Bindings inside the host template are 0 index. But because we don't know ahead of time\n * how many host bindings we have we can't pre-compute them. For this reason they are all\n * 0 index and we just shift the root so that they match next available location in the LView.\n *\n * @param bindingRootIndex Root index for `hostBindings`\n * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive\n *        whose `hostBindings` are being processed.\n */\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n  const lFrame = instructionState.lFrame;\n  lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n  setCurrentDirectiveIndex(currentDirectiveIndex);\n}\n/**\n * When host binding is executing this points to the directive index.\n * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`\n * `LView[getCurrentDirectiveIndex()]` is directive instance.\n */\nfunction getCurrentDirectiveIndex() {\n  return instructionState.lFrame.currentDirectiveIndex;\n}\n/**\n * Sets an index of a directive whose `hostBindings` are being processed.\n *\n * @param currentDirectiveIndex `TData` index where current directive instance can be found.\n */\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n  instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\n/**\n * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being\n * executed.\n *\n * @param tData Current `TData` where the `DirectiveDef` will be looked up at.\n */\nfunction getCurrentDirectiveDef(tData) {\n  const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n  return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n  return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n  instructionState.lFrame.currentQueryIndex = value;\n}\n/**\n * Returns a `TNode` of the location where the current `LView` is declared at.\n *\n * @param lView an `LView` that we want to find parent `TNode` for.\n */\nfunction getDeclarationTNode(lView) {\n  const tView = lView[TVIEW];\n  // Return the declaration parent for embedded views\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n    return tView.declTNode;\n  }\n  // Components don't have `TView.declTNode` because each instance of component could be\n  // inserted in different location, hence `TView.declTNode` is meaningless.\n  // Falling back to `T_HOST` in case we cross component boundary.\n  if (tView.type === 1 /* TViewType.Component */) {\n    return lView[T_HOST];\n  }\n  // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.\n  return null;\n}\n/**\n * This is a light weight version of the `enterView` which is needed by the DI system.\n *\n * @param lView `LView` location of the DI context.\n * @param tNode `TNode` for DI context\n * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration\n *     tree from `tNode`  until we find parent declared `TElementNode`.\n * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared\n *     `TNode` if `flags` has  `SkipSelf`). Failing to enter DI implies that no associated\n *     `NodeInjector` can be found and we should instead use `ModuleInjector`.\n *     - If `true` than this call must be fallowed by `leaveDI`\n *     - If `false` than this call failed and we should NOT call `leaveDI`\n */\nfunction enterDI(lView, tNode, flags) {\n  ngDevMode && assertLViewOrUndefined(lView);\n  if (flags & InjectFlags.SkipSelf) {\n    ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n    let parentTNode = tNode;\n    let parentLView = lView;\n    while (true) {\n      ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n      parentTNode = parentTNode.parent;\n      if (parentTNode === null && !(flags & InjectFlags.Host)) {\n        parentTNode = getDeclarationTNode(parentLView);\n        if (parentTNode === null) break;\n        // In this case, a parent exists and is definitely an element. So it will definitely\n        // have an existing lView as the declaration view, which is why we can assume it's defined.\n        ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n        parentLView = parentLView[DECLARATION_VIEW];\n        // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives\n        // We want to skip those and look only at Elements and ElementContainers to ensure\n        // we're looking at true parent nodes, and not content or other types.\n        if (parentTNode.type & (2 /* TNodeType.Element */ | 8 /* TNodeType.ElementContainer */)) {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (parentTNode === null) {\n      // If we failed to find a parent TNode this means that we should use module injector.\n      return false;\n    } else {\n      tNode = parentTNode;\n      lView = parentLView;\n    }\n  }\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  const lFrame = instructionState.lFrame = allocLFrame();\n  lFrame.currentTNode = tNode;\n  lFrame.lView = lView;\n  return true;\n}\n/**\n * Swap the current lView with a new lView.\n *\n * For performance reasons we store the lView in the top level of the module.\n * This way we minimize the number of properties to read. Whenever a new view\n * is entered we have to store the lView for later, and when the view is\n * exited the state has to be restored\n *\n * @param newView New lView to become active\n * @returns the previously active lView;\n */\nfunction enterView(newView) {\n  ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n  ngDevMode && assertLViewOrUndefined(newView);\n  const newLFrame = allocLFrame();\n  if (ngDevMode) {\n    assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n    assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n    assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n    assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n  }\n  const tView = newView[TVIEW];\n  instructionState.lFrame = newLFrame;\n  ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n  newLFrame.currentTNode = tView.firstChild;\n  newLFrame.lView = newView;\n  newLFrame.tView = tView;\n  newLFrame.contextLView = newView;\n  newLFrame.bindingIndex = tView.bindingStartIndex;\n  newLFrame.inI18n = false;\n}\n/**\n * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.\n */\nfunction allocLFrame() {\n  const currentLFrame = instructionState.lFrame;\n  const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n  const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n  return newLFrame;\n}\nfunction createLFrame(parent) {\n  const lFrame = {\n    currentTNode: null,\n    isParent: true,\n    lView: null,\n    tView: null,\n    selectedIndex: -1,\n    contextLView: null,\n    elementDepthCount: 0,\n    currentNamespace: null,\n    currentDirectiveIndex: -1,\n    bindingRootIndex: -1,\n    bindingIndex: -1,\n    currentQueryIndex: 0,\n    parent: parent,\n    child: null,\n    inI18n: false\n  };\n  parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.\n  return lFrame;\n}\n/**\n * A lightweight version of leave which is used with DI.\n *\n * This function only resets `currentTNode` and `LView` as those are the only properties\n * used with DI (`enterDI()`).\n *\n * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where\n * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.\n */\nfunction leaveViewLight() {\n  const oldLFrame = instructionState.lFrame;\n  instructionState.lFrame = oldLFrame.parent;\n  oldLFrame.currentTNode = null;\n  oldLFrame.lView = null;\n  return oldLFrame;\n}\n/**\n * This is a lightweight version of the `leaveView` which is needed by the DI system.\n *\n * NOTE: this function is an alias so that we can change the type of the function to have `void`\n * return type.\n */\nconst leaveDI = leaveViewLight;\n/**\n * Leave the current `LView`\n *\n * This pops the `LFrame` with the associated `LView` from the stack.\n *\n * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is\n * because for performance reasons we don't release `LFrame` but rather keep it for next use.\n */\nfunction leaveView() {\n  const oldLFrame = leaveViewLight();\n  oldLFrame.isParent = true;\n  oldLFrame.tView = null;\n  oldLFrame.selectedIndex = -1;\n  oldLFrame.contextLView = null;\n  oldLFrame.elementDepthCount = 0;\n  oldLFrame.currentDirectiveIndex = -1;\n  oldLFrame.currentNamespace = null;\n  oldLFrame.bindingRootIndex = -1;\n  oldLFrame.bindingIndex = -1;\n  oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n  const contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);\n  return contextLView[CONTEXT];\n}\n/**\n * Gets the currently selected element index.\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n */\nfunction getSelectedIndex() {\n  return instructionState.lFrame.selectedIndex;\n}\n/**\n * Sets the most recent index passed to {@link select}\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n *\n * (Note that if an \"exit function\" was set earlier (via `setElementExitFn()`) then that will be\n * run if and when the provided `index` value is different from the current selected index value.)\n */\nfunction setSelectedIndex(index) {\n  ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n  ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, \"Can't set index passed end of LView\");\n  instructionState.lFrame.selectedIndex = index;\n}\n/**\n * Gets the `tNode` that represents currently selected element.\n */\nfunction getSelectedTNode() {\n  const lFrame = instructionState.lFrame;\n  return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceSVG() {\n  instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceMathML() {\n  instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceHTML() {\n  namespaceHTMLInternal();\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n */\nfunction namespaceHTMLInternal() {\n  instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace$1() {\n  return instructionState.lFrame.currentNamespace;\n}\nlet _wasLastNodeCreated = true;\n/**\n * Retrieves a global flag that indicates whether the most recent DOM node\n * was created or hydrated.\n */\nfunction wasLastNodeCreated() {\n  return _wasLastNodeCreated;\n}\n/**\n * Sets a global flag to indicate whether the most recent DOM node\n * was created or hydrated.\n */\nfunction lastNodeWasCreated(flag) {\n  _wasLastNodeCreated = flag;\n}\n\n/**\n * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.\n *\n * Must be run *only* on the first template pass.\n *\n * Sets up the pre-order hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * @param directiveIndex The index of the directive in LView\n * @param directiveDef The definition containing the hooks to setup in tView\n * @param tView The current TView\n */\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const {\n    ngOnChanges,\n    ngOnInit,\n    ngDoCheck\n  } = directiveDef.type.prototype;\n  if (ngOnChanges) {\n    const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n    (tView.preOrderHooks ??= []).push(directiveIndex, wrappedOnChanges);\n    (tView.preOrderCheckHooks ??= []).push(directiveIndex, wrappedOnChanges);\n  }\n  if (ngOnInit) {\n    (tView.preOrderHooks ??= []).push(0 - directiveIndex, ngOnInit);\n  }\n  if (ngDoCheck) {\n    (tView.preOrderHooks ??= []).push(directiveIndex, ngDoCheck);\n    (tView.preOrderCheckHooks ??= []).push(directiveIndex, ngDoCheck);\n  }\n}\n/**\n *\n * Loops through the directives on the provided `tNode` and queues hooks to be\n * run that are not initialization hooks.\n *\n * Should be executed during `elementEnd()` and similar to\n * preserve hook execution order. Content, view, and destroy hooks for projected\n * components and directives must be called *before* their hosts.\n *\n * Sets up the content, view, and destroy hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up\n * separately at `elementStart`.\n *\n * @param tView The current TView\n * @param tNode The TNode whose directives are to be searched for hooks to queue\n */\nfunction registerPostOrderHooks(tView, tNode) {\n  ngDevMode && assertFirstCreatePass(tView);\n  // It's necessary to loop through the directives at elementEnd() (rather than processing in\n  // directiveCreate) so we can preserve the current hook order. Content, view, and destroy\n  // hooks for projected components and directives must be called *before* their hosts.\n  for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n    const directiveDef = tView.data[i];\n    ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n    const lifecycleHooks = directiveDef.type.prototype;\n    const {\n      ngAfterContentInit,\n      ngAfterContentChecked,\n      ngAfterViewInit,\n      ngAfterViewChecked,\n      ngOnDestroy\n    } = lifecycleHooks;\n    if (ngAfterContentInit) {\n      (tView.contentHooks ??= []).push(-i, ngAfterContentInit);\n    }\n    if (ngAfterContentChecked) {\n      (tView.contentHooks ??= []).push(i, ngAfterContentChecked);\n      (tView.contentCheckHooks ??= []).push(i, ngAfterContentChecked);\n    }\n    if (ngAfterViewInit) {\n      (tView.viewHooks ??= []).push(-i, ngAfterViewInit);\n    }\n    if (ngAfterViewChecked) {\n      (tView.viewHooks ??= []).push(i, ngAfterViewChecked);\n      (tView.viewCheckHooks ??= []).push(i, ngAfterViewChecked);\n    }\n    if (ngOnDestroy != null) {\n      (tView.destroyHooks ??= []).push(i, ngOnDestroy);\n    }\n  }\n}\n/**\n * Executing hooks requires complex logic as we need to deal with 2 constraints.\n *\n * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only\n * once, across many change detection cycles. This must be true even if some hooks throw, or if\n * some recursively trigger a change detection cycle.\n * To solve that, it is required to track the state of the execution of these init hooks.\n * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},\n * and the index within that phase. They can be seen as a cursor in the following structure:\n * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]\n * They are stored as flags in LView[FLAGS].\n *\n * 2. Pre-order hooks can be executed in batches, because of the select instruction.\n * To be able to pause and resume their execution, we also need some state about the hook's array\n * that is being processed:\n * - the index of the next hook to be executed\n * - the number of init hooks already found in the processed part of the  array\n * They are stored as flags in LView[PREORDER_HOOK_FLAGS].\n */\n/**\n * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were\n * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read\n * / write of the init-hooks related flags.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n  callHooks(lView, hooks, 3 /* InitPhaseState.InitPhaseCompleted */, nodeIndex);\n}\n/**\n * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,\n * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param initPhase A phase for which hooks should be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n  ngDevMode && assertNotEqual(initPhase, 3 /* InitPhaseState.InitPhaseCompleted */, 'Init pre-order hooks should not be called more than once');\n  if ((lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n    callHooks(lView, hooks, initPhase, nodeIndex);\n  }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n  ngDevMode && assertNotEqual(initPhase, 3 /* InitPhaseState.InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');\n  let flags = lView[FLAGS];\n  if ((flags & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n    flags &= 16383 /* LViewFlags.IndexWithinInitPhaseReset */;\n    flags += 1 /* LViewFlags.InitPhaseStateIncrementer */;\n    lView[FLAGS] = flags;\n  }\n}\n/**\n * Calls lifecycle hooks with their contexts, skipping init hooks if it's not\n * the first LView pass\n *\n * @param currentView The current view\n * @param arr The array in which the hooks are found\n * @param initPhaseState the current state of the init phase\n * @param currentNodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n  ngDevMode && assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n  const startIndex = currentNodeIndex !== undefined ? currentView[PREORDER_HOOK_FLAGS] & 65535 /* PreOrderHookFlags.IndexOfTheNextPreOrderHookMaskMask */ : 0;\n  const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n  const max = arr.length - 1; // Stop the loop at length - 1, because we look for the hook at i + 1\n  let lastNodeIndexFound = 0;\n  for (let i = startIndex; i < max; i++) {\n    const hook = arr[i + 1];\n    if (typeof hook === 'number') {\n      lastNodeIndexFound = arr[i];\n      if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n        break;\n      }\n    } else {\n      const isInitHook = arr[i] < 0;\n      if (isInitHook) {\n        currentView[PREORDER_HOOK_FLAGS] += 65536 /* PreOrderHookFlags.NumberOfInitHooksCalledIncrementer */;\n      }\n      if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n        callHook(currentView, initPhase, arr, i);\n        currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760 /* PreOrderHookFlags.NumberOfInitHooksCalledMask */) + i + 2;\n      }\n      i++;\n    }\n  }\n}\n/**\n * Executes a single lifecycle hook, making sure that:\n * - it is called in the non-reactive context;\n * - profiling data are registered.\n */\nfunction callHookInternal(directive, hook) {\n  profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    hook.call(directive);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n    profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);\n  }\n}\n/**\n * Execute one hook against the current `LView`.\n *\n * @param currentView The current view\n * @param initPhaseState the current state of the init phase\n * @param arr The array in which the hooks are found\n * @param i The current index within the hook data array\n */\nfunction callHook(currentView, initPhase, arr, i) {\n  const isInitHook = arr[i] < 0;\n  const hook = arr[i + 1];\n  const directiveIndex = isInitHook ? -arr[i] : arr[i];\n  const directive = currentView[directiveIndex];\n  if (isInitHook) {\n    const indexWithintInitPhase = currentView[FLAGS] >> 14 /* LViewFlags.IndexWithinInitPhaseShift */;\n    // The init phase state must be always checked here as it may have been recursively updated.\n    if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16 /* PreOrderHookFlags.NumberOfInitHooksCalledShift */ && (currentView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === initPhase) {\n      currentView[FLAGS] += 16384 /* LViewFlags.IndexWithinInitPhaseIncrementer */;\n      callHookInternal(directive, hook);\n    }\n  } else {\n    callHookInternal(directive, hook);\n  }\n}\nconst NO_PARENT_INJECTOR = -1;\n/**\n * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in\n * `TView.data`. This allows us to store information about the current node's tokens (which\n * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be\n * shared, so they live in `LView`).\n *\n * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter\n * determines whether a directive is available on the associated node or not. This prevents us\n * from searching the directives array at this level unless it's probable the directive is in it.\n *\n * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.\n *\n * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed\n * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`\n * will differ based on where it is flattened into the main array, so it's not possible to know\n * the indices ahead of time and save their types here. The interfaces are still included here\n * for documentation purposes.\n *\n * export interface LInjector extends Array<any> {\n *\n *    // Cumulative bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)\n *    [0]: number;\n *\n *    // Cumulative bloom for directive IDs 32-63\n *    [1]: number;\n *\n *    // Cumulative bloom for directive IDs 64-95\n *    [2]: number;\n *\n *    // Cumulative bloom for directive IDs 96-127\n *    [3]: number;\n *\n *    // Cumulative bloom for directive IDs 128-159\n *    [4]: number;\n *\n *    // Cumulative bloom for directive IDs 160 - 191\n *    [5]: number;\n *\n *    // Cumulative bloom for directive IDs 192 - 223\n *    [6]: number;\n *\n *    // Cumulative bloom for directive IDs 224 - 255\n *    [7]: number;\n *\n *    // We need to store a reference to the injector's parent so DI can keep looking up\n *    // the injector tree until it finds the dependency it's looking for.\n *    [PARENT_INJECTOR]: number;\n * }\n *\n * export interface TInjector extends Array<any> {\n *\n *    // Shared node bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)\n *    [0]: number;\n *\n *    // Shared node bloom for directive IDs 32-63\n *    [1]: number;\n *\n *    // Shared node bloom for directive IDs 64-95\n *    [2]: number;\n *\n *    // Shared node bloom for directive IDs 96-127\n *    [3]: number;\n *\n *    // Shared node bloom for directive IDs 128-159\n *    [4]: number;\n *\n *    // Shared node bloom for directive IDs 160 - 191\n *    [5]: number;\n *\n *    // Shared node bloom for directive IDs 192 - 223\n *    [6]: number;\n *\n *    // Shared node bloom for directive IDs 224 - 255\n *    [7]: number;\n *\n *    // Necessary to find directive indices for a particular node.\n *    [TNODE]: TElementNode|TElementContainerNode|TContainerNode;\n *  }\n */\n/**\n * Factory for creating instances of injectors in the NodeInjector.\n *\n * This factory is complicated by the fact that it can resolve `multi` factories as well.\n *\n * NOTE: Some of the fields are optional which means that this class has two hidden classes.\n * - One without `multi` support (most common)\n * - One with `multi` values, (rare).\n *\n * Since VMs can cache up to 4 inline hidden classes this is OK.\n *\n * - Single factory: Only `resolving` and `factory` is defined.\n * - `providers` factory: `componentProviders` is a number and `index = -1`.\n * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.\n */\nclass NodeInjectorFactory {\n  factory;\n  /**\n   * The inject implementation to be activated when using the factory.\n   */\n  injectImpl;\n  /**\n   * Marker set to true during factory invocation to see if we get into recursive loop.\n   * Recursive loop causes an error to be displayed.\n   */\n  resolving = false;\n  /**\n   * Marks that the token can see other Tokens declared in `viewProviders` on the same node.\n   */\n  canSeeViewProviders;\n  /**\n   * An array of factories to use in case of `multi` provider.\n   */\n  multi;\n  /**\n   * Number of `multi`-providers which belong to the component.\n   *\n   * This is needed because when multiple components and directives declare the `multi` provider\n   * they have to be concatenated in the correct order.\n   *\n   * Example:\n   *\n   * If we have a component and directive active an a single element as declared here\n   * ```\n   * component:\n   *   providers: [ {provide: String, useValue: 'component', multi: true} ],\n   *   viewProviders: [ {provide: String, useValue: 'componentView', multi: true} ],\n   *\n   * directive:\n   *   providers: [ {provide: String, useValue: 'directive', multi: true} ],\n   * ```\n   *\n   * Then the expected results are:\n   *\n   * ```\n   * providers: ['component', 'directive']\n   * viewProviders: ['component', 'componentView', 'directive']\n   * ```\n   *\n   * The way to think about it is that the `viewProviders` have been inserted after the component\n   * but before the directives, which is why we need to know how many `multi`s have been declared by\n   * the component.\n   */\n  componentProviders;\n  /**\n   * Current index of the Factory in the `data`. Needed for `viewProviders` and `providers` merging.\n   * See `providerFactory`.\n   */\n  index;\n  /**\n   * Because the same `multi` provider can be declared in `providers` and `viewProviders` it is\n   * possible for `viewProviders` to shadow the `providers`. For this reason we store the\n   * `provideFactory` of the `providers` so that `providers` can be extended with `viewProviders`.\n   *\n   * Example:\n   *\n   * Given:\n   * ```\n   * providers: [ {provide: String, useValue: 'all', multi: true} ],\n   * viewProviders: [ {provide: String, useValue: 'viewOnly', multi: true} ],\n   * ```\n   *\n   * We have to return `['all']` in case of content injection, but `['all', 'viewOnly']` in case\n   * of view injection. We further have to make sure that the shared instances (in our case\n   * `all`) are the exact same instance in both the content as well as the view injection. (We\n   * have to make sure that we don't double instantiate.) For this reason the `viewProviders`\n   * `Factory` has a pointer to the shadowed `providers` factory so that it can instantiate the\n   * `providers` (`['all']`) and then extend it with `viewProviders` (`['all'] + ['viewOnly'] =\n   * ['all', 'viewOnly']`).\n   */\n  providerFactory;\n  constructor(\n  /**\n   * Factory to invoke in order to create a new instance.\n   */\n  factory,\n  /**\n   * Set to `true` if the token is declared in `viewProviders` (or if it is component).\n   */\n  isViewProvider, injectImplementation) {\n    this.factory = factory;\n    ngDevMode && assertDefined(factory, 'Factory not specified');\n    ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n    this.canSeeViewProviders = isViewProvider;\n    this.injectImpl = injectImplementation;\n  }\n}\nfunction isFactory(obj) {\n  return obj instanceof NodeInjectorFactory;\n}\n\n/**\n * Converts `TNodeType` into human readable text.\n * Make sure this matches with `TNodeType`\n */\nfunction toTNodeTypeAsString(tNodeType) {\n  let text = '';\n  tNodeType & 1 /* TNodeType.Text */ && (text += '|Text');\n  tNodeType & 2 /* TNodeType.Element */ && (text += '|Element');\n  tNodeType & 4 /* TNodeType.Container */ && (text += '|Container');\n  tNodeType & 8 /* TNodeType.ElementContainer */ && (text += '|ElementContainer');\n  tNodeType & 16 /* TNodeType.Projection */ && (text += '|Projection');\n  tNodeType & 32 /* TNodeType.Icu */ && (text += '|IcuContainer');\n  tNodeType & 64 /* TNodeType.Placeholder */ && (text += '|Placeholder');\n  tNodeType & 128 /* TNodeType.LetDeclaration */ && (text += '|LetDeclaration');\n  return text.length > 0 ? text.substring(1) : text;\n}\n/**\n * Helper function to detect if a given value matches a `TNode` shape.\n *\n * The logic uses the `insertBeforeIndex` and its possible values as\n * a way to differentiate a TNode shape from other types of objects\n * within the `TView.data`. This is not a perfect check, but it can\n * be a reasonable differentiator, since we control the shapes of objects\n * within `TView.data`.\n */\nfunction isTNodeShape(value) {\n  return value != null && typeof value === 'object' && (value.insertBeforeIndex === null || typeof value.insertBeforeIndex === 'number' || Array.isArray(value.insertBeforeIndex));\n}\nfunction isLetDeclaration(tNode) {\n  return !!(tNode.type & 128 /* TNodeType.LetDeclaration */);\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.\n *\n * ```html\n * <div my-dir [class]=\"exp\"></div>\n * ```\n * and\n * ```ts\n * @Directive({\n * })\n * class MyDirective {\n *   @Input()\n *   class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasClassInput(tNode) {\n  return (tNode.flags & 8 /* TNodeFlags.hasClassInput */) !== 0;\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.\n *\n * ```html\n * <div my-dir [style]=\"exp\"></div>\n * ```\n * and\n * ```ts\n * @Directive({\n * })\n * class MyDirective {\n *   @Input()\n *   class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasStyleInput(tNode) {\n  return (tNode.flags & 16 /* TNodeFlags.hasStyleInput */) !== 0;\n}\nfunction assertTNodeType(tNode, expectedTypes, message) {\n  assertDefined(tNode, 'should be called with a TNode');\n  if ((tNode.type & expectedTypes) === 0) {\n    throwError(message || `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n  }\n}\nfunction assertPureTNodeType(type) {\n  if (!(type === 2 /* TNodeType.Element */ || type === 1 /* TNodeType.Text */ || type === 4 /* TNodeType.Container */ || type === 8 /* TNodeType.ElementContainer */ || type === 32 /* TNodeType.Icu */ || type === 16 /* TNodeType.Projection */ || type === 64 /* TNodeType.Placeholder */ || type === 128 /* TNodeType.LetDeclaration */)) {\n    throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n  }\n}\n\n/**\n * Assigns all attribute values to the provided element via the inferred renderer.\n *\n * This function accepts two forms of attribute entries:\n *\n * default: (key, value):\n *  attrs = [key1, value1, key2, value2]\n *\n * namespaced: (NAMESPACE_MARKER, uri, name, value)\n *  attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]\n *\n * The `attrs` array can contain a mix of both the default and namespaced entries.\n * The \"default\" values are set without a marker, but if the function comes across\n * a marker value then it will attempt to set a namespaced value. If the marker is\n * not of a namespaced value then the function will quit and return the index value\n * where it stopped during the iteration of the attrs array.\n *\n * See [AttributeMarker] to understand what the namespace marker value is.\n *\n * Note that this instruction does not support assigning style and class values to\n * an element. See `elementStart` and `elementHostAttrs` to learn how styling values\n * are applied to an element.\n * @param renderer The renderer to be used\n * @param native The element that the attributes will be assigned to\n * @param attrs The attribute array of values that will be assigned to the element\n * @returns the index value that was last accessed in the attributes array\n */\nfunction setUpAttributes(renderer, native, attrs) {\n  let i = 0;\n  while (i < attrs.length) {\n    const value = attrs[i];\n    if (typeof value === 'number') {\n      // only namespaces are supported. Other value types (such as style/class\n      // entries) are not supported in this function.\n      if (value !== 0 /* AttributeMarker.NamespaceURI */) {\n        break;\n      }\n      // we just landed on the marker value ... therefore\n      // we should skip to the next entry\n      i++;\n      const namespaceURI = attrs[i++];\n      const attrName = attrs[i++];\n      const attrVal = attrs[i++];\n      ngDevMode && ngDevMode.rendererSetAttribute++;\n      renderer.setAttribute(native, attrName, attrVal, namespaceURI);\n    } else {\n      // attrName is string;\n      const attrName = value;\n      const attrVal = attrs[++i];\n      // Standard attributes\n      ngDevMode && ngDevMode.rendererSetAttribute++;\n      if (isAnimationProp(attrName)) {\n        renderer.setProperty(native, attrName, attrVal);\n      } else {\n        renderer.setAttribute(native, attrName, attrVal);\n      }\n      i++;\n    }\n  }\n  // another piece of code may iterate over the same attributes array. Therefore\n  // it may be helpful to return the exact spot where the attributes array exited\n  // whether by running into an unsupported marker or if all the static values were\n  // iterated over.\n  return i;\n}\n/**\n * Test whether the given value is a marker that indicates that the following\n * attribute values in a `TAttributes` array are only the names of attributes,\n * and not name-value pairs.\n * @param marker The attribute marker to test.\n * @returns true if the marker is a \"name-only\" marker (e.g. `Bindings`, `Template` or `I18n`).\n */\nfunction isNameOnlyAttributeMarker(marker) {\n  return marker === 3 /* AttributeMarker.Bindings */ || marker === 4 /* AttributeMarker.Template */ || marker === 6 /* AttributeMarker.I18n */;\n}\nfunction isAnimationProp(name) {\n  // Perf note: accessing charCodeAt to check for the first character of a string is faster as\n  // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that\n  // charCodeAt doesn't allocate memory to return a substring.\n  return name.charCodeAt(0) === 64 /* CharCode.AT_SIGN */;\n}\n/**\n * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.\n *\n * This merge function keeps the order of attrs same.\n *\n * @param dst Location of where the merged `TAttributes` should end up.\n * @param src `TAttributes` which should be appended to `dst`\n */\nfunction mergeHostAttrs(dst, src) {\n  if (src === null || src.length === 0) {\n    // do nothing\n  } else if (dst === null || dst.length === 0) {\n    // We have source, but dst is empty, just make a copy.\n    dst = src.slice();\n  } else {\n    let srcMarker = -1 /* AttributeMarker.ImplicitAttributes */;\n    for (let i = 0; i < src.length; i++) {\n      const item = src[i];\n      if (typeof item === 'number') {\n        srcMarker = item;\n      } else {\n        if (srcMarker === 0 /* AttributeMarker.NamespaceURI */) {\n          // Case where we need to consume `key1`, `key2`, `value` items.\n        } else if (srcMarker === -1 /* AttributeMarker.ImplicitAttributes */ || srcMarker === 2 /* AttributeMarker.Styles */) {\n          // Case where we have to consume `key1` and `value` only.\n          mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n        } else {\n          // Case where we have to consume `key1` only.\n          mergeHostAttribute(dst, srcMarker, item, null, null);\n        }\n      }\n    }\n  }\n  return dst;\n}\n/**\n * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.\n *\n * @param dst `TAttributes` to append to.\n * @param marker Region where the `key`/`value` should be added.\n * @param key1 Key to add to `TAttributes`\n * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)\n * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.\n */\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n  let i = 0;\n  // Assume that new markers will be inserted at the end.\n  let markerInsertPosition = dst.length;\n  // scan until correct type.\n  if (marker === -1 /* AttributeMarker.ImplicitAttributes */) {\n    markerInsertPosition = -1;\n  } else {\n    while (i < dst.length) {\n      const dstValue = dst[i++];\n      if (typeof dstValue === 'number') {\n        if (dstValue === marker) {\n          markerInsertPosition = -1;\n          break;\n        } else if (dstValue > marker) {\n          // We need to save this as we want the markers to be inserted in specific order.\n          markerInsertPosition = i - 1;\n          break;\n        }\n      }\n    }\n  }\n  // search until you find place of insertion\n  while (i < dst.length) {\n    const item = dst[i];\n    if (typeof item === 'number') {\n      // since `i` started as the index after the marker, we did not find it if we are at the next\n      // marker\n      break;\n    } else if (item === key1) {\n      // We already have same token\n      if (key2 === null) {\n        if (value !== null) {\n          dst[i + 1] = value;\n        }\n        return;\n      } else if (key2 === dst[i + 1]) {\n        dst[i + 2] = value;\n        return;\n      }\n    }\n    // Increment counter.\n    i++;\n    if (key2 !== null) i++;\n    if (value !== null) i++;\n  }\n  // insert at location.\n  if (markerInsertPosition !== -1) {\n    dst.splice(markerInsertPosition, 0, marker);\n    i = markerInsertPosition + 1;\n  }\n  dst.splice(i++, 0, key1);\n  if (key2 !== null) {\n    dst.splice(i++, 0, key2);\n  }\n  if (value !== null) {\n    dst.splice(i++, 0, value);\n  }\n}\n\n// This default value is when checking the hierarchy for a token.\n//\n// It means both:\n// - the token is not provided by the current injector,\n// - only the element injectors should be checked (ie do not check module injectors\n//\n//          mod1\n//         /\n//       el1   mod2\n//         \\  /\n//         el2\n//\n// When requesting el2.injector.get(token), we should check in the following order and return the\n// first found value:\n// - el2.injector.get(token, default)\n// - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module\n// - mod2.injector.get(token, default)\nconst NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};\n\n/**\n * Injector that looks up a value using a specific injector, before falling back to the module\n * injector. Used primarily when creating components or embedded views dynamically.\n */\nclass ChainedInjector {\n  injector;\n  parentInjector;\n  constructor(injector, parentInjector) {\n    this.injector = injector;\n    this.parentInjector = parentInjector;\n  }\n  get(token, notFoundValue, flags) {\n    flags = convertToBitFlags(flags);\n    const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);\n    if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {\n      // Return the value from the root element injector when\n      // - it provides it\n      //   (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)\n      // - the module injector should not be checked\n      //   (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)\n      return value;\n    }\n    return this.parentInjector.get(token, notFoundValue, flags);\n  }\n}\n\n/// Parent Injector Utils ///////////////////////////////////////////////////////////////\nfunction hasParentInjector(parentLocation) {\n  return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n  if (ngDevMode) {\n    assertNumber(parentLocation, 'Number expected');\n    assertNotEqual(parentLocation, -1, 'Not a valid state.');\n    const parentInjectorIndex = parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;\n    assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n  }\n  return parentLocation & 32767 /* RelativeInjectorLocationFlags.InjectorIndexMask */;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n  return parentLocation >> 16 /* RelativeInjectorLocationFlags.ViewOffsetShift */;\n}\n/**\n * Unwraps a parent injector location number to find the view offset from the current injector,\n * then walks up the declaration view tree until the view is found that contains the parent\n * injector.\n *\n * @param location The location of the parent injector, which contains the view offset\n * @param startView The LView instance from which to start walking up the view tree\n * @returns The LView instance that contains the parent injector\n */\nfunction getParentInjectorView(location, startView) {\n  let viewOffset = getParentInjectorViewOffset(location);\n  let parentView = startView;\n  // For most cases, the parent injector can be found on the host node (e.g. for component\n  // or container), but we must keep the loop here to support the rarer case of deeply nested\n  // <ng-template> tags or inline views, where the parent injector might live many views\n  // above the child injector.\n  while (viewOffset > 0) {\n    parentView = parentView[DECLARATION_VIEW];\n    viewOffset--;\n  }\n  return parentView;\n}\n/**\n * Detects whether an injector is an instance of a `ChainedInjector`,\n * created based on the `OutletInjector`.\n */\nfunction isRouterOutletInjector(currentInjector) {\n  return currentInjector instanceof ChainedInjector && typeof currentInjector.injector.__ngOutletInjector === 'function';\n}\n\n/**\n * Defines if the call to `inject` should include `viewProviders` in its resolution.\n *\n * This is set to true when we try to instantiate a component. This value is reset in\n * `getNodeInjectable` to a value which matches the declaration location of the token about to be\n * instantiated. This is done so that if we are injecting a token which was declared outside of\n * `viewProviders` we don't accidentally pull `viewProviders` in.\n *\n * Example:\n *\n * ```ts\n * @Injectable()\n * class MyService {\n *   constructor(public value: String) {}\n * }\n *\n * @Component({\n *   providers: [\n *     MyService,\n *     {provide: String, value: 'providers' }\n *   ]\n *   viewProviders: [\n *     {provide: String, value: 'viewProviders'}\n *   ]\n * })\n * class MyComponent {\n *   constructor(myService: MyService, value: String) {\n *     // We expect that Component can see into `viewProviders`.\n *     expect(value).toEqual('viewProviders');\n *     // `MyService` was not declared in `viewProviders` hence it can't see it.\n *     expect(myService.value).toEqual('providers');\n *   }\n * }\n *\n * ```\n */\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n  const oldValue = includeViewProviders;\n  includeViewProviders = v;\n  return oldValue;\n}\n/**\n * The number of slots in each bloom filter (used by DI). The larger this number, the fewer\n * directives that will share slots, and thus, the fewer false positives when checking for\n * the existence of a directive.\n */\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\n/**\n * The number of bits that is represented by a single bloom bucket. JS bit operations are 32 bits,\n * so each bucket represents 32 distinct tokens which accounts for log2(32) = 5 bits of a bloom hash\n * number.\n */\nconst BLOOM_BUCKET_BITS = 5;\n/** Counter used to generate unique IDs for directives. */\nlet nextNgElementId = 0;\n/** Value used when something wasn't found by an injector. */\nconst NOT_FOUND = {};\n/**\n * Registers this directive as present in its node's injector by flipping the directive's\n * corresponding bit in the injector's bloom filter.\n *\n * @param injectorIndex The index of the node injector where this token should be registered\n * @param tView The TView for the injector's bloom filters\n * @param type The directive token to register\n */\nfunction bloomAdd(injectorIndex, tView, type) {\n  ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n  let id;\n  if (typeof type === 'string') {\n    id = type.charCodeAt(0) || 0;\n  } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n    id = type[NG_ELEMENT_ID];\n  }\n  // Set a unique ID on the directive type, so if something tries to inject the directive,\n  // we can easily retrieve the ID and hash it into the bloom bit that should be checked.\n  if (id == null) {\n    id = type[NG_ELEMENT_ID] = nextNgElementId++;\n  }\n  // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),\n  // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.\n  const bloomHash = id & BLOOM_MASK;\n  // Create a mask that targets the specific bit associated with the directive.\n  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n  // to bit positions 0 - 31 in a 32 bit integer.\n  const mask = 1 << bloomHash;\n  // Each bloom bucket in `tData` represents `BLOOM_BUCKET_BITS` number of bits of `bloomHash`.\n  // Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset that the mask\n  // should be written to.\n  tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;\n}\n/**\n * Creates (or gets an existing) injector for a given element or container.\n *\n * @param tNode for which an injector should be retrieved / created.\n * @param lView View where the node is stored\n * @returns Node injector\n */\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n  const existingInjectorIndex = getInjectorIndex(tNode, lView);\n  if (existingInjectorIndex !== -1) {\n    return existingInjectorIndex;\n  }\n  const tView = lView[TVIEW];\n  if (tView.firstCreatePass) {\n    tNode.injectorIndex = lView.length;\n    insertBloom(tView.data, tNode); // foundation for node bloom\n    insertBloom(lView, null); // foundation for cumulative bloom\n    insertBloom(tView.blueprint, null);\n  }\n  const parentLoc = getParentInjectorLocation(tNode, lView);\n  const injectorIndex = tNode.injectorIndex;\n  // If a parent injector can't be found, its location is set to -1.\n  // In that case, we don't need to set up a cumulative bloom\n  if (hasParentInjector(parentLoc)) {\n    const parentIndex = getParentInjectorIndex(parentLoc);\n    const parentLView = getParentInjectorView(parentLoc, lView);\n    const parentData = parentLView[TVIEW].data;\n    // Creates a cumulative bloom filter that merges the parent's bloom filter\n    // and its own cumulative bloom (which contains tokens for all ancestors)\n    for (let i = 0; i < 8 /* NodeInjectorOffset.BLOOM_SIZE */; i++) {\n      lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n    }\n  }\n  lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */] = parentLoc;\n  return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n  arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n  if (tNode.injectorIndex === -1 ||\n  // If the injector index is the same as its parent's injector index, then the index has been\n  // copied down from the parent node. No injector has been created yet on this node.\n  tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex ||\n  // After the first template pass, the injector index might exist but the parent values\n  // might not have been calculated yet for this instance\n  lView[tNode.injectorIndex + 8 /* NodeInjectorOffset.PARENT */] === null) {\n    return -1;\n  } else {\n    ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n    return tNode.injectorIndex;\n  }\n}\n/**\n * Finds the index of the parent injector, with a view offset if applicable. Used to set the\n * parent injector initially.\n *\n * @returns Returns a number that is the combination of the number of LViews that we have to go up\n * to find the LView containing the parent inject AND the index of the injector within that LView.\n */\nfunction getParentInjectorLocation(tNode, lView) {\n  if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n    // If we have a parent `TNode` and there is an injector associated with it we are done, because\n    // the parent injector is within the current `LView`.\n    return tNode.parent.injectorIndex; // ViewOffset is 0\n  }\n  // When parent injector location is computed it may be outside of the current view. (ie it could\n  // be pointing to a declared parent location). This variable stores number of declaration parents\n  // we need to walk up in order to find the parent injector location.\n  let declarationViewOffset = 0;\n  let parentTNode = null;\n  let lViewCursor = lView;\n  // The parent injector is not in the current `LView`. We will have to walk the declared parent\n  // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent\n  // `NodeInjector`.\n  while (lViewCursor !== null) {\n    parentTNode = getTNodeFromLView(lViewCursor);\n    if (parentTNode === null) {\n      // If we have no parent, than we are done.\n      return NO_PARENT_INJECTOR;\n    }\n    ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n    // Every iteration of the loop requires that we go to the declared parent.\n    declarationViewOffset++;\n    lViewCursor = lViewCursor[DECLARATION_VIEW];\n    if (parentTNode.injectorIndex !== -1) {\n      // We found a NodeInjector which points to something.\n      return parentTNode.injectorIndex | declarationViewOffset << 16 /* RelativeInjectorLocationFlags.ViewOffsetShift */;\n    }\n  }\n  return NO_PARENT_INJECTOR;\n}\n/**\n * Makes a type or an injection token public to the DI system by adding it to an\n * injector's bloom filter.\n *\n * @param di The node injector in which a directive will be added\n * @param token The type or the injection token to be made public\n */\nfunction diPublicInInjector(injectorIndex, tView, token) {\n  bloomAdd(injectorIndex, tView, token);\n}\n/**\n * Inject static attribute value into directive constructor.\n *\n * This method is used with `factory` functions which are generated as part of\n * `defineDirective` or `defineComponent`. The method retrieves the static value\n * of an attribute. (Dynamic attributes are not supported since they are not resolved\n *  at the time of injection and can change over time.)\n *\n * # Example\n * Given:\n * ```ts\n * @Component(...)\n * class MyComponent {\n *   constructor(@Attribute('title') title: string) { ... }\n * }\n * ```\n * When instantiated with\n * ```html\n * <my-component title=\"Hello\"></my-component>\n * ```\n *\n * Then factory method generated is:\n * ```ts\n * MyComponent.ɵcmp = defineComponent({\n *   factory: () => new MyComponent(injectAttribute('title'))\n *   ...\n * })\n * ```\n *\n * @publicApi\n */\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n  ngDevMode && assertTNodeType(tNode, 12 /* TNodeType.AnyContainer */ | 3 /* TNodeType.AnyRNode */);\n  ngDevMode && assertDefined(tNode, 'expecting tNode');\n  if (attrNameToInject === 'class') {\n    return tNode.classes;\n  }\n  if (attrNameToInject === 'style') {\n    return tNode.styles;\n  }\n  const attrs = tNode.attrs;\n  if (attrs) {\n    const attrsLength = attrs.length;\n    let i = 0;\n    while (i < attrsLength) {\n      const value = attrs[i];\n      // If we hit a `Bindings` or `Template` marker then we are done.\n      if (isNameOnlyAttributeMarker(value)) break;\n      // Skip namespaced attributes\n      if (value === 0 /* AttributeMarker.NamespaceURI */) {\n        // we skip the next two values\n        // as namespaced attributes looks like\n        // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',\n        // 'existValue', ...]\n        i = i + 2;\n      } else if (typeof value === 'number') {\n        // Skip to the first value of the marked attribute.\n        i++;\n        while (i < attrsLength && typeof attrs[i] === 'string') {\n          i++;\n        }\n      } else if (value === attrNameToInject) {\n        return attrs[i + 1];\n      } else {\n        i = i + 2;\n      }\n    }\n  }\n  return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n  if (flags & InjectFlags.Optional || notFoundValue !== undefined) {\n    return notFoundValue;\n  } else {\n    throwProviderNotFoundError(token, 'NodeInjector');\n  }\n}\n/**\n * Returns the value associated to the given token from the ModuleInjector or throws exception\n *\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector or throws an exception\n */\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n  if (flags & InjectFlags.Optional && notFoundValue === undefined) {\n    // This must be set or the NullInjector will throw for optional deps\n    notFoundValue = null;\n  }\n  if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {\n    const moduleInjector = lView[INJECTOR];\n    // switch to `injectInjectorOnly` implementation for module injector, since module injector\n    // should not have access to Component/Directive DI scope (that may happen through\n    // `directiveInject` implementation)\n    const previousInjectImplementation = setInjectImplementation(undefined);\n    try {\n      if (moduleInjector) {\n        return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);\n      } else {\n        return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);\n      }\n    } finally {\n      setInjectImplementation(previousInjectImplementation);\n    }\n  }\n  return notFoundValueOrThrow(notFoundValue, token, flags);\n}\n/**\n * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.\n *\n * Look for the injector providing the token by walking up the node injector tree and then\n * the module injector tree.\n *\n * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom\n * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {\n  if (tNode !== null) {\n    // If the view or any of its ancestors have an embedded\n    // view injector, we have to look it up there first.\n    if (lView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ &&\n    // The token must be present on the current node injector when the `Self`\n    // flag is set, so the lookup on embedded view injector(s) can be skipped.\n    !(flags & InjectFlags.Self)) {\n      const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);\n      if (embeddedInjectorValue !== NOT_FOUND) {\n        return embeddedInjectorValue;\n      }\n    }\n    // Otherwise try the node injector.\n    const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);\n    if (value !== NOT_FOUND) {\n      return value;\n    }\n  }\n  // Finally, fall back to the module injector.\n  return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\n/**\n * Returns the value associated to the given token from the node injector.\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {\n  const bloomHash = bloomHashBitOrFactory(token);\n  // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef\n  // so just call the factory function to create it.\n  if (typeof bloomHash === 'function') {\n    if (!enterDI(lView, tNode, flags)) {\n      // Failed to enter DI, try module injector instead. If a token is injected with the @Host\n      // flag, the module injector is not searched for that token in Ivy.\n      return flags & InjectFlags.Host ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n    }\n    try {\n      let value;\n      if (ngDevMode) {\n        runInInjectorProfilerContext(new NodeInjector(getCurrentTNode(), getLView()), token, () => {\n          value = bloomHash(flags);\n          if (value != null) {\n            emitInstanceCreatedByInjectorEvent(value);\n          }\n        });\n      } else {\n        value = bloomHash(flags);\n      }\n      if (value == null && !(flags & InjectFlags.Optional)) {\n        throwProviderNotFoundError(token);\n      } else {\n        return value;\n      }\n    } finally {\n      leaveDI();\n    }\n  } else if (typeof bloomHash === 'number') {\n    // A reference to the previous injector TView that was found while climbing the element\n    // injector tree. This is used to know if viewProviders can be accessed on the current\n    // injector.\n    let previousTView = null;\n    let injectorIndex = getInjectorIndex(tNode, lView);\n    let parentLocation = NO_PARENT_INJECTOR;\n    let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n    // If we should skip this injector, or if there is no injector on this node, start by\n    // searching the parent injector.\n    if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {\n      parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */];\n      if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n        injectorIndex = -1;\n      } else {\n        previousTView = lView[TVIEW];\n        injectorIndex = getParentInjectorIndex(parentLocation);\n        lView = getParentInjectorView(parentLocation, lView);\n      }\n    }\n    // Traverse up the injector tree until we find a potential match or until we know there\n    // *isn't* a match.\n    while (injectorIndex !== -1) {\n      ngDevMode && assertNodeInjector(lView, injectorIndex);\n      // Check the current injector. If it matches, see if it contains token.\n      const tView = lView[TVIEW];\n      ngDevMode && assertTNodeForLView(tView.data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */], lView);\n      if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n        // At this point, we have an injector which *may* contain the token, so we step through\n        // the providers and directives associated with the injector's corresponding node to get\n        // the instance.\n        const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n        if (instance !== NOT_FOUND) {\n          return instance;\n        }\n      }\n      parentLocation = lView[injectorIndex + 8 /* NodeInjectorOffset.PARENT */];\n      if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {\n        // The def wasn't found anywhere on this node, so it was a false positive.\n        // Traverse up the tree and continue searching.\n        previousTView = tView;\n        injectorIndex = getParentInjectorIndex(parentLocation);\n        lView = getParentInjectorView(parentLocation, lView);\n      } else {\n        // If we should not search parent OR If the ancestor bloom filter value does not have the\n        // bit corresponding to the directive we can give up on traversing up to find the specific\n        // injector.\n        injectorIndex = -1;\n      }\n    }\n  }\n  return notFoundValue;\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n  const currentTView = lView[TVIEW];\n  const tNode = currentTView.data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n  // First, we need to determine if view providers can be accessed by the starting element.\n  // There are two possibilities\n  const canAccessViewProviders = previousTView == null ?\n  // 1) This is the first invocation `previousTView == null` which means that we are at the\n  // `TNode` of where injector is starting to look. In such a case the only time we are allowed\n  // to look into the ViewProviders is if:\n  // - we are on a component\n  // - AND the injector set `includeViewProviders` to true (implying that the token can see\n  // ViewProviders because it is the Component or a Service which itself was declared in\n  // ViewProviders)\n  isComponentHost(tNode) && includeViewProviders :\n  // 2) `previousTView != null` which means that we are now walking across the parent nodes.\n  // In such a case we are only allowed to look into the ViewProviders if:\n  // - We just crossed from child View to Parent View `previousTView != currentTView`\n  // - AND the parent TNode is an Element.\n  // This means that we just came from the Component's View and therefore are allowed to see\n  // into the ViewProviders.\n  previousTView != currentTView && (tNode.type & 3 /* TNodeType.AnyRNode */) !== 0;\n  // This special case happens when there is a @host on the inject and when we are searching\n  // on the host element node.\n  const isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;\n  const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n  if (injectableIdx !== null) {\n    return getNodeInjectable(lView, currentTView, injectableIdx, tNode);\n  } else {\n    return NOT_FOUND;\n  }\n}\n/**\n * Searches for the given token among the node's directives and providers.\n *\n * @param tNode TNode on which directives are present.\n * @param tView The tView we are currently processing\n * @param token Provider token or type of a directive to look for.\n * @param canAccessViewProviders Whether view providers should be considered.\n * @param isHostSpecialCase Whether the host special case applies.\n * @returns Index of a found directive or provider, or null when none found.\n */\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n  const nodeProviderIndexes = tNode.providerIndexes;\n  const tInjectables = tView.data;\n  const injectablesStart = nodeProviderIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n  const directivesStart = tNode.directiveStart;\n  const directiveEnd = tNode.directiveEnd;\n  const cptViewProvidersCount = nodeProviderIndexes >> 20 /* TNodeProviderIndexes.CptViewProvidersCountShift */;\n  const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n  // When the host special case applies, only the viewProviders and the component are visible\n  const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n  for (let i = startingIndex; i < endIndex; i++) {\n    const providerTokenOrDef = tInjectables[i];\n    if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {\n      return i;\n    }\n  }\n  if (isHostSpecialCase) {\n    const dirDef = tInjectables[directivesStart];\n    if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n      return directivesStart;\n    }\n  }\n  return null;\n}\n/**\n * Retrieve or instantiate the injectable from the `LView` at particular `index`.\n *\n * This function checks to see if the value has already been instantiated and if so returns the\n * cached `injectable`. Otherwise if it detects that the value is still a factory it\n * instantiates the `injectable` and caches the value.\n */\nfunction getNodeInjectable(lView, tView, index, tNode) {\n  let value = lView[index];\n  const tData = tView.data;\n  if (isFactory(value)) {\n    const factory = value;\n    if (factory.resolving) {\n      throwCyclicDependencyError(stringifyForError(tData[index]));\n    }\n    const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n    factory.resolving = true;\n    let prevInjectContext;\n    if (ngDevMode) {\n      // tData indexes mirror the concrete instances in its corresponding LView.\n      // lView[index] here is either the injectable instace itself or a factory,\n      // therefore tData[index] is the constructor of that injectable or a\n      // definition object that contains the constructor in a `.type` field.\n      const token = tData[index].type || tData[index];\n      const injector = new NodeInjector(tNode, lView);\n      prevInjectContext = setInjectorProfilerContext({\n        injector,\n        token\n      });\n    }\n    const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n    const success = enterDI(lView, tNode, InjectFlags.Default);\n    ngDevMode && assertEqual(success, true, \"Because flags do not contain `SkipSelf' we expect this to always succeed.\");\n    try {\n      value = lView[index] = factory.factory(undefined, tData, lView, tNode);\n      ngDevMode && emitInstanceCreatedByInjectorEvent(value);\n      // This code path is hit for both directives and providers.\n      // For perf reasons, we want to avoid searching for hooks on providers.\n      // It does no harm to try (the hooks just won't exist), but the extra\n      // checks are unnecessary and this is a hot path. So we check to see\n      // if the index of the dependency is in the directive range for this\n      // tNode. If it's not, we know it's a provider and skip hook registration.\n      if (tView.firstCreatePass && index >= tNode.directiveStart) {\n        ngDevMode && assertDirectiveDef(tData[index]);\n        registerPreOrderHooks(index, tData[index], tView);\n      }\n    } finally {\n      ngDevMode && setInjectorProfilerContext(prevInjectContext);\n      previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);\n      setIncludeViewProviders(previousIncludeViewProviders);\n      factory.resolving = false;\n      leaveDI();\n    }\n  }\n  return value;\n}\n/**\n * Returns the bit in an injector's bloom filter that should be used to determine whether or not\n * the directive might be provided by the injector.\n *\n * When a directive is public, it is added to the bloom filter and given a unique ID that can be\n * retrieved on the Type. When the directive isn't public or the token is not a directive `null`\n * is returned as the node injector can not possibly provide that token.\n *\n * @param token the injection token\n * @returns the matching bit to check in the bloom filter or `null` if the token is not known.\n *   When the returned value is negative then it represents special values such as `Injector`.\n */\nfunction bloomHashBitOrFactory(token) {\n  ngDevMode && assertDefined(token, 'token must be defined');\n  if (typeof token === 'string') {\n    return token.charCodeAt(0) || 0;\n  }\n  const tokenId =\n  // First check with `hasOwnProperty` so we don't get an inherited ID.\n  token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n  // Negative token IDs are used for special objects such as `Injector`\n  if (typeof tokenId === 'number') {\n    if (tokenId >= 0) {\n      return tokenId & BLOOM_MASK;\n    } else {\n      ngDevMode && assertEqual(tokenId, -1 /* InjectorMarkers.Injector */, 'Expecting to get Special Injector Id');\n      return createNodeInjector;\n    }\n  } else {\n    return tokenId;\n  }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n  // Create a mask that targets the specific bit associated with the directive we're looking for.\n  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n  // to bit positions 0 - 31 in a 32 bit integer.\n  const mask = 1 << bloomHash;\n  // Each bloom bucket in `injectorView` represents `BLOOM_BUCKET_BITS` number of bits of\n  // `bloomHash`. Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset\n  // that should be used.\n  const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];\n  // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,\n  // this injector is a potential match.\n  return !!(value & mask);\n}\n/** Returns true if flags prevent parent injector from being searched for tokens */\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n  return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);\n}\nfunction getNodeInjectorLView(nodeInjector) {\n  return nodeInjector._lView;\n}\nfunction getNodeInjectorTNode(nodeInjector) {\n  return nodeInjector._tNode;\n}\nclass NodeInjector {\n  _tNode;\n  _lView;\n  constructor(_tNode, _lView) {\n    this._tNode = _tNode;\n    this._lView = _lView;\n  }\n  get(token, notFoundValue, flags) {\n    return getOrCreateInjectable(this._tNode, this._lView, token, convertToBitFlags(flags), notFoundValue);\n  }\n}\n/** Creates a `NodeInjector` for the current node. */\nfunction createNodeInjector() {\n  return new NodeInjector(getCurrentTNode(), getLView());\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵgetInheritedFactory(type) {\n  return noSideEffects(() => {\n    const ownConstructor = type.prototype.constructor;\n    const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);\n    const objectPrototype = Object.prototype;\n    let parent = Object.getPrototypeOf(type.prototype).constructor;\n    // Go up the prototype until we hit `Object`.\n    while (parent && parent !== objectPrototype) {\n      const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);\n      // If we hit something that has a factory and the factory isn't the same as the type,\n      // we've found the inherited factory. Note the check that the factory isn't the type's\n      // own factory is redundant in most cases, but if the user has custom decorators on the\n      // class, this lookup will start one level down in the prototype chain, causing us to\n      // find the own factory first and potentially triggering an infinite loop downstream.\n      if (factory && factory !== ownFactory) {\n        return factory;\n      }\n      parent = Object.getPrototypeOf(parent);\n    }\n    // There is no factory defined. Either this was improper usage of inheritance\n    // (no Angular decorator on the superclass) or there is no constructor at all\n    // in the inheritance chain. Since the two cases cannot be distinguished, the\n    // latter has to be assumed.\n    return t => new t();\n  });\n}\nfunction getFactoryOf(type) {\n  if (isForwardRef(type)) {\n    return () => {\n      const factory = getFactoryOf(resolveForwardRef(type));\n      return factory && factory();\n    };\n  }\n  return getFactoryDef(type);\n}\n/**\n * Returns a value from the closest embedded or node injector.\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {\n  let currentTNode = tNode;\n  let currentLView = lView;\n  // When an LView with an embedded view injector is inserted, it'll likely be interlaced with\n  // nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).\n  // Since the bloom filters for the node injectors have already been constructed and we don't\n  // have a way of extracting the records from an injector, the only way to maintain the correct\n  // hierarchy when resolving the value is to walk it node-by-node while attempting to resolve\n  // the token at each level.\n  while (currentTNode !== null && currentLView !== null && currentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */ && !(currentLView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {\n    ngDevMode && assertTNodeForLView(currentTNode, currentLView);\n    // Note that this lookup on the node injector is using the `Self` flag, because\n    // we don't want the node injector to look at any parent injectors since we\n    // may hit the embedded view injector first.\n    const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);\n    if (nodeInjectorValue !== NOT_FOUND) {\n      return nodeInjectorValue;\n    }\n    // Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191\n    let parentTNode = currentTNode.parent;\n    // `TNode.parent` includes the parent within the current view only. If it doesn't exist,\n    // it means that we've hit the view boundary and we need to go up to the next view.\n    if (!parentTNode) {\n      // Before we go to the next LView, check if the token exists on the current embedded injector.\n      const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];\n      if (embeddedViewInjector) {\n        const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);\n        if (embeddedViewInjectorValue !== NOT_FOUND) {\n          return embeddedViewInjectorValue;\n        }\n      }\n      // Otherwise keep going up the tree.\n      parentTNode = getTNodeFromLView(currentLView);\n      currentLView = currentLView[DECLARATION_VIEW];\n    }\n    currentTNode = parentTNode;\n  }\n  return notFoundValue;\n}\n/** Gets the TNode associated with an LView inside of the declaration view. */\nfunction getTNodeFromLView(lView) {\n  const tView = lView[TVIEW];\n  const tViewType = tView.type;\n  // The parent pointer differs based on `TView.type`.\n  if (tViewType === 2 /* TViewType.Embedded */) {\n    ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n    return tView.declTNode;\n  } else if (tViewType === 1 /* TViewType.Component */) {\n    // Components don't have `TView.declTNode` because each instance of component could be\n    // inserted in different location, hence `TView.declTNode` is meaningless.\n    return lView[T_HOST];\n  }\n  return null;\n}\n\n/**\n * Facade for the attribute injection from DI.\n *\n * @codeGenApi\n */\nfunction ɵɵinjectAttribute(attrNameToInject) {\n  return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\n\n/**\n * Attribute decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Attribute = makeParamDecorator('Attribute', attributeName => ({\n  attributeName,\n  __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName)\n}));\nlet _reflect = null;\nfunction getReflect() {\n  return _reflect = _reflect || new ReflectionCapabilities();\n}\nfunction reflectDependencies(type) {\n  return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n  return deps.map(dep => reflectDependency(dep));\n}\nfunction reflectDependency(dep) {\n  const meta = {\n    token: null,\n    attribute: null,\n    host: false,\n    optional: false,\n    self: false,\n    skipSelf: false\n  };\n  if (Array.isArray(dep) && dep.length > 0) {\n    for (let j = 0; j < dep.length; j++) {\n      const param = dep[j];\n      if (param === undefined) {\n        // param may be undefined if type of dep is not set by ngtsc\n        continue;\n      }\n      const proto = Object.getPrototypeOf(param);\n      if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n        meta.optional = true;\n      } else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n        meta.skipSelf = true;\n      } else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n        meta.self = true;\n      } else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n        meta.host = true;\n      } else if (param instanceof Inject) {\n        meta.token = param.token;\n      } else if (param instanceof Attribute) {\n        if (param.attributeName === undefined) {\n          throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `Attribute name must be defined.`);\n        }\n        meta.attribute = param.attributeName;\n      } else {\n        meta.token = param;\n      }\n    }\n  } else if (dep === undefined || Array.isArray(dep) && dep.length === 0) {\n    meta.token = null;\n  } else {\n    meta.token = dep;\n  }\n  return meta;\n}\n\n/**\n * Compile an Angular injectable according to its `Injectable` metadata, and patch the resulting\n * injectable def (`ɵprov`) onto the injectable type.\n */\nfunction compileInjectable(type, meta) {\n  let ngInjectableDef = null;\n  let ngFactoryDef = null;\n  // if NG_PROV_DEF is already defined on this class then don't overwrite it\n  if (!type.hasOwnProperty(NG_PROV_DEF)) {\n    Object.defineProperty(type, NG_PROV_DEF, {\n      get: () => {\n        if (ngInjectableDef === null) {\n          const compiler = getCompilerFacade({\n            usage: 0 /* JitCompilerUsage.Decorator */,\n            kind: 'injectable',\n            type\n          });\n          ngInjectableDef = compiler.compileInjectable(angularCoreDiEnv, `ng:///${type.name}/ɵprov.js`, getInjectableMetadata(type, meta));\n        }\n        return ngInjectableDef;\n      }\n    });\n  }\n  // if NG_FACTORY_DEF is already defined on this class then don't overwrite it\n  if (!type.hasOwnProperty(NG_FACTORY_DEF)) {\n    Object.defineProperty(type, NG_FACTORY_DEF, {\n      get: () => {\n        if (ngFactoryDef === null) {\n          const compiler = getCompilerFacade({\n            usage: 0 /* JitCompilerUsage.Decorator */,\n            kind: 'injectable',\n            type\n          });\n          ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, `ng:///${type.name}/ɵfac.js`, {\n            name: type.name,\n            type,\n            typeArgumentCount: 0,\n            // In JIT mode types are not available nor used.\n            deps: reflectDependencies(type),\n            target: compiler.FactoryTarget.Injectable\n          });\n        }\n        return ngFactoryDef;\n      },\n      // Leave this configurable so that the factories from directives or pipes can take precedence.\n      configurable: true\n    });\n  }\n}\nconst USE_VALUE = getClosureSafeProperty({\n  provide: String,\n  useValue: getClosureSafeProperty\n});\nfunction isUseClassProvider(meta) {\n  return meta.useClass !== undefined;\n}\nfunction isUseValueProvider(meta) {\n  return USE_VALUE in meta;\n}\nfunction isUseFactoryProvider(meta) {\n  return meta.useFactory !== undefined;\n}\nfunction isUseExistingProvider(meta) {\n  return meta.useExisting !== undefined;\n}\nfunction getInjectableMetadata(type, srcMeta) {\n  // Allow the compilation of a class with a `@Injectable()` decorator without parameters\n  const meta = srcMeta || {\n    providedIn: null\n  };\n  const compilerMeta = {\n    name: type.name,\n    type: type,\n    typeArgumentCount: 0,\n    providedIn: meta.providedIn\n  };\n  if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {\n    compilerMeta.deps = convertDependencies(meta.deps);\n  }\n  // Check to see if the user explicitly provided a `useXxxx` property.\n  if (isUseClassProvider(meta)) {\n    compilerMeta.useClass = meta.useClass;\n  } else if (isUseValueProvider(meta)) {\n    compilerMeta.useValue = meta.useValue;\n  } else if (isUseFactoryProvider(meta)) {\n    compilerMeta.useFactory = meta.useFactory;\n  } else if (isUseExistingProvider(meta)) {\n    compilerMeta.useExisting = meta.useExisting;\n  }\n  return compilerMeta;\n}\n\n/**\n * Injectable decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Injectable = makeDecorator('Injectable', undefined, undefined, undefined, (type, meta) => compileInjectable(type, meta));\n\n/**\n * Create a new `Injector` which is configured using a `defType` of `InjectorType<any>`s.\n */\nfunction createInjector(defType, parent = null, additionalProviders = null, name) {\n  const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);\n  injector.resolveInjectorInitializers();\n  return injector;\n}\n/**\n * Creates a new injector without eagerly resolving its injector types. Can be used in places\n * where resolving the injector types immediately can lead to an infinite loop. The injector types\n * should be resolved at a later point by calling `_resolveInjectorDefTypes`.\n */\nfunction createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = new Set()) {\n  const providers = [additionalProviders || EMPTY_ARRAY, importProvidersFrom(defType)];\n  name = name || (typeof defType === 'object' ? undefined : stringify(defType));\n  return new R3Injector(providers, parent || getNullInjector(), name || null, scopes);\n}\n\n/**\n * Concrete injectors implement this interface. Injectors are configured\n * with [providers](guide/di/dependency-injection-providers) that associate\n * dependencies of various types with [injection tokens](guide/di/dependency-injection-providers).\n *\n * @see [DI Providers](guide/di/dependency-injection-providers).\n * @see {@link StaticProvider}\n *\n * @usageNotes\n *\n *  The following example creates a service injector instance.\n *\n * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}\n *\n * ### Usage example\n *\n * {@example core/di/ts/injector_spec.ts region='Injector'}\n *\n * `Injector` returns itself when given `Injector` as a token:\n *\n * {@example core/di/ts/injector_spec.ts region='injectInjector'}\n *\n * @publicApi\n */\nclass Injector {\n  static THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;\n  static NULL = new NullInjector();\n  static create(options, parent) {\n    if (Array.isArray(options)) {\n      return createInjector({\n        name: ''\n      }, parent, options, '');\n    } else {\n      const name = options.name ?? '';\n      return createInjector({\n        name\n      }, options.parent, options.providers, name);\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: Injector,\n    providedIn: 'any',\n    factory: () => ɵɵinject(INJECTOR$1)\n  });\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = -1 /* InjectorMarkers.Injector */;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Creates a token that can be used to inject static attributes of the host node.\n *\n * @usageNotes\n * ### Injecting an attribute that is known to exist\n * ```ts\n * @Directive()\n * class MyDir {\n *   attr: string = inject(new HostAttributeToken('some-attr'));\n * }\n * ```\n *\n * ### Optionally injecting an attribute\n * ```ts\n * @Directive()\n * class MyDir {\n *   attr: string | null = inject(new HostAttributeToken('some-attr'), {optional: true});\n * }\n * ```\n * @publicApi\n */\nclass HostAttributeToken {\n  attributeName;\n  constructor(attributeName) {\n    this.attributeName = attributeName;\n  }\n  /** @internal */\n  __NG_ELEMENT_ID__ = () => ɵɵinjectAttribute(this.attributeName);\n  toString() {\n    return `HostAttributeToken ${this.attributeName}`;\n  }\n}\n\n/**\n * A token that can be used to inject the tag name of the host node.\n *\n * @usageNotes\n * ### Injecting a tag name that is known to exist\n * ```ts\n * @Directive()\n * class MyDir {\n *   tagName: string = inject(HOST_TAG_NAME);\n * }\n * ```\n *\n * ### Optionally injecting a tag name\n * ```ts\n * @Directive()\n * class MyDir {\n *   tagName: string | null = inject(HOST_TAG_NAME, {optional: true});\n * }\n * ```\n * @publicApi\n */\nconst HOST_TAG_NAME = new InjectionToken(ngDevMode ? 'HOST_TAG_NAME' : '');\n// HOST_TAG_NAME should be resolved at the current node, similar to e.g. ElementRef,\n// so we manually specify __NG_ELEMENT_ID__ here, instead of using a factory.\n// tslint:disable-next-line:no-toplevel-property-access\nHOST_TAG_NAME.__NG_ELEMENT_ID__ = flags => {\n  const tNode = getCurrentTNode();\n  if (tNode === null) {\n    throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && 'HOST_TAG_NAME can only be injected in directives and components ' + 'during construction time (in a class constructor or as a class field initializer)');\n  }\n  if (tNode.type & 2 /* TNodeType.Element */) {\n    return tNode.value;\n  }\n  if (flags & InjectFlags.Optional) {\n    return null;\n  }\n  throw new RuntimeError(204 /* RuntimeErrorCode.INVALID_INJECTION_TOKEN */, ngDevMode && `HOST_TAG_NAME was used on ${getDevModeNodeName(tNode)} which doesn't have an underlying element in the DOM. ` + `This is invalid, and so the dependency should be marked as optional.`);\n};\nfunction getDevModeNodeName(tNode) {\n  if (tNode.type & 8 /* TNodeType.ElementContainer */) {\n    return 'an <ng-container>';\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    return 'an <ng-template>';\n  } else if (tNode.type & 128 /* TNodeType.LetDeclaration */) {\n    return 'an @let declaration';\n  } else {\n    return 'a node';\n  }\n}\n\n/**\n * @module\n * @description\n * The `di` module provides dependency injection container services.\n */\n\n/**\n * This file should not be necessary because node resolution should just default to `./di/index`!\n *\n * However it does not seem to work and it breaks:\n *  - //packages/animations/browser/test:test_web_chromium-local\n *  - //packages/compiler-cli/test:extract_i18n\n *  - //packages/compiler-cli/test:ngc\n *  - //packages/compiler-cli/test:perform_watch\n *  - //packages/compiler-cli/test/diagnostics:check_types\n *  - //packages/compiler-cli/test/transformers:test\n *  - //packages/compiler/test:test\n *  - //tools/public_api_guard:core_api\n *\n * Remove this file once the above is solved or wait until `ngc` is deleted and then it should be\n * safe to delete this file.\n */\n\nconst SCHEDULE_IN_ROOT_ZONE_DEFAULT = false;\n\n/**\n * `DestroyRef` lets you set callbacks to run for any cleanup or destruction behavior.\n * The scope of this destruction depends on where `DestroyRef` is injected. If `DestroyRef`\n * is injected in a component or directive, the callbacks run when that component or\n * directive is destroyed. Otherwise the callbacks run when a corresponding injector is destroyed.\n *\n * @publicApi\n */\nclass DestroyRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectDestroyRef;\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ENV_ID__ = injector => injector;\n}\nclass NodeInjectorDestroyRef extends DestroyRef {\n  _lView;\n  constructor(_lView) {\n    super();\n    this._lView = _lView;\n  }\n  onDestroy(callback) {\n    storeLViewOnDestroy(this._lView, callback);\n    return () => removeLViewOnDestroy(this._lView, callback);\n  }\n}\nfunction injectDestroyRef() {\n  return new NodeInjectorDestroyRef(getLView());\n}\n\n/**\n * Injectable that is notified when an `LView` is made aware of changes to application state.\n */\nclass ChangeDetectionScheduler {}\n/** Token used to indicate if zoneless was enabled via provideZonelessChangeDetection(). */\nconst ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', {\n  providedIn: 'root',\n  factory: () => false\n});\n/** Token used to indicate `provideExperimentalZonelessChangeDetection` was used. */\nconst PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', {\n  providedIn: 'root',\n  factory: () => false\n});\nconst ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'scheduler disabled' : '');\n// TODO(atscott): Remove in v19. Scheduler should be done with runOutsideAngular.\nconst SCHEDULE_IN_ROOT_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'run changes outside zone in root' : '');\n\n/**\n * Internal implementation of the pending tasks service.\n */\nclass PendingTasksInternal {\n  taskId = 0;\n  pendingTasks = new Set();\n  get _hasPendingTasks() {\n    return this.hasPendingTasks.value;\n  }\n  hasPendingTasks = new BehaviorSubject(false);\n  add() {\n    if (!this._hasPendingTasks) {\n      this.hasPendingTasks.next(true);\n    }\n    const taskId = this.taskId++;\n    this.pendingTasks.add(taskId);\n    return taskId;\n  }\n  has(taskId) {\n    return this.pendingTasks.has(taskId);\n  }\n  remove(taskId) {\n    this.pendingTasks.delete(taskId);\n    if (this.pendingTasks.size === 0 && this._hasPendingTasks) {\n      this.hasPendingTasks.next(false);\n    }\n  }\n  ngOnDestroy() {\n    this.pendingTasks.clear();\n    if (this._hasPendingTasks) {\n      this.hasPendingTasks.next(false);\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: PendingTasksInternal,\n    providedIn: 'root',\n    factory: () => new PendingTasksInternal()\n  });\n}\n/**\n * Service that keeps track of pending tasks contributing to the stableness of Angular\n * application. While several existing Angular services (ex.: `HttpClient`) will internally manage\n * tasks influencing stability, this API gives control over stability to library and application\n * developers for specific cases not covered by Angular internals.\n *\n * The concept of stability comes into play in several important scenarios:\n * - SSR process needs to wait for the application stability before serializing and sending rendered\n * HTML;\n * - tests might want to delay assertions until the application becomes stable;\n *\n * @usageNotes\n * ```ts\n * const pendingTasks = inject(PendingTasks);\n * const taskCleanup = pendingTasks.add();\n * // do work that should block application's stability and then:\n * taskCleanup();\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nclass PendingTasks {\n  internalPendingTasks = inject(PendingTasksInternal);\n  scheduler = inject(ChangeDetectionScheduler);\n  /**\n   * Adds a new task that should block application's stability.\n   * @returns A cleanup function that removes a task when called.\n   */\n  add() {\n    const taskId = this.internalPendingTasks.add();\n    return () => {\n      if (!this.internalPendingTasks.has(taskId)) {\n        // This pending task has already been cleared.\n        return;\n      }\n      // Notifying the scheduler will hold application stability open until the next tick.\n      this.scheduler.notify(12 /* NotificationSource.PendingTaskRemoved */);\n      this.internalPendingTasks.remove(taskId);\n    };\n  }\n  /**\n   * Runs an asynchronous function and blocks the application's stability until the function completes.\n   *\n   * ```\n   * pendingTasks.run(async () => {\n   *   const userData = await fetch('/api/user');\n   *   this.userData.set(userData);\n   * });\n   * ```\n   *\n   * Application stability is at least delayed until the next tick after the `run` method resolves\n   * so it is safe to make additional updates to application state that would require UI synchronization:\n   *\n   * ```\n   * const userData = await pendingTasks.run(() => fetch('/api/user'));\n   * this.userData.set(userData);\n   * ```\n   *\n   * @param fn The asynchronous function to execute\n   */\n  async run(fn) {\n    const removeTask = this.add();\n    try {\n      return await fn();\n    } finally {\n      removeTask();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: PendingTasks,\n    providedIn: 'root',\n    factory: () => new PendingTasks()\n  });\n}\nclass EventEmitter_ extends Subject {\n  __isAsync; // tslint:disable-line\n  destroyRef = undefined;\n  pendingTasks = undefined;\n  constructor(isAsync = false) {\n    super();\n    this.__isAsync = isAsync;\n    // Attempt to retrieve a `DestroyRef` and `PendingTasks` optionally.\n    // For backwards compatibility reasons, this cannot be required.\n    if (isInInjectionContext()) {\n      // `DestroyRef` is optional because it is not available in all contexts.\n      // But it is useful to properly complete the `EventEmitter` if used with `outputToObservable`\n      // when the component/directive is destroyed. (See `outputToObservable` for more details.)\n      this.destroyRef = inject(DestroyRef, {\n        optional: true\n      }) ?? undefined;\n      this.pendingTasks = inject(PendingTasksInternal, {\n        optional: true\n      }) ?? undefined;\n    }\n  }\n  emit(value) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      super.next(value);\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n  subscribe(observerOrNext, error, complete) {\n    let nextFn = observerOrNext;\n    let errorFn = error || (() => null);\n    let completeFn = complete;\n    if (observerOrNext && typeof observerOrNext === 'object') {\n      const observer = observerOrNext;\n      nextFn = observer.next?.bind(observer);\n      errorFn = observer.error?.bind(observer);\n      completeFn = observer.complete?.bind(observer);\n    }\n    if (this.__isAsync) {\n      errorFn = this.wrapInTimeout(errorFn);\n      if (nextFn) {\n        nextFn = this.wrapInTimeout(nextFn);\n      }\n      if (completeFn) {\n        completeFn = this.wrapInTimeout(completeFn);\n      }\n    }\n    const sink = super.subscribe({\n      next: nextFn,\n      error: errorFn,\n      complete: completeFn\n    });\n    if (observerOrNext instanceof Subscription) {\n      observerOrNext.add(sink);\n    }\n    return sink;\n  }\n  wrapInTimeout(fn) {\n    return value => {\n      const taskId = this.pendingTasks?.add();\n      setTimeout(() => {\n        fn(value);\n        if (taskId !== undefined) {\n          this.pendingTasks?.remove(taskId);\n        }\n      });\n    };\n  }\n}\n/**\n * @publicApi\n */\nconst EventEmitter = EventEmitter_;\nfunction noop(...args) {\n  // Do nothing.\n}\n\n/**\n * Gets a scheduling function that runs the callback after the first of setTimeout and\n * requestAnimationFrame resolves.\n *\n * - `requestAnimationFrame` ensures that change detection runs ahead of a browser repaint.\n * This ensures that the create and update passes of a change detection always happen\n * in the same frame.\n * - When the browser is resource-starved, `rAF` can execute _before_ a `setTimeout` because\n * rendering is a very high priority process. This means that `setTimeout` cannot guarantee\n * same-frame create and update pass, when `setTimeout` is used to schedule the update phase.\n * - While `rAF` gives us the desirable same-frame updates, it has two limitations that\n * prevent it from being used alone. First, it does not run in background tabs, which would\n * prevent Angular from initializing an application when opened in a new tab (for example).\n * Second, repeated calls to requestAnimationFrame will execute at the refresh rate of the\n * hardware (~16ms for a 60Hz display). This would cause significant slowdown of tests that\n * are written with several updates and asserts in the form of \"update; await stable; assert;\".\n * - Both `setTimeout` and `rAF` are able to \"coalesce\" several events from a single user\n * interaction into a single change detection. Importantly, this reduces view tree traversals when\n * compared to an alternative timing mechanism like `queueMicrotask`, where change detection would\n * then be interleaves between each event.\n *\n * By running change detection after the first of `setTimeout` and `rAF` to execute, we get the\n * best of both worlds.\n *\n * @returns a function to cancel the scheduled callback\n */\nfunction scheduleCallbackWithRafRace(callback) {\n  let timeoutId;\n  let animationFrameId;\n  function cleanup() {\n    callback = noop;\n    try {\n      if (animationFrameId !== undefined && typeof cancelAnimationFrame === 'function') {\n        cancelAnimationFrame(animationFrameId);\n      }\n      if (timeoutId !== undefined) {\n        clearTimeout(timeoutId);\n      }\n    } catch {\n      // Clearing/canceling can fail in tests due to the timing of functions being patched and unpatched\n      // Just ignore the errors - we protect ourselves from this issue by also making the callback a no-op.\n    }\n  }\n  timeoutId = setTimeout(() => {\n    callback();\n    cleanup();\n  });\n  if (typeof requestAnimationFrame === 'function') {\n    animationFrameId = requestAnimationFrame(() => {\n      callback();\n      cleanup();\n    });\n  }\n  return () => cleanup();\n}\nfunction scheduleCallbackWithMicrotask(callback) {\n  queueMicrotask(() => callback());\n  return () => {\n    callback = noop;\n  };\n}\nclass AsyncStackTaggingZoneSpec {\n  createTask;\n  constructor(namePrefix, consoleAsyncStackTaggingImpl = console) {\n    this.name = 'asyncStackTagging for ' + namePrefix;\n    this.createTask = consoleAsyncStackTaggingImpl?.createTask ?? (() => null);\n  }\n  // ZoneSpec implementation below.\n  name;\n  onScheduleTask(delegate, _current, target, task) {\n    task.consoleTask = this.createTask(`Zone - ${task.source || task.type}`);\n    return delegate.scheduleTask(target, task);\n  }\n  onInvokeTask(delegate, _currentZone, targetZone, task, applyThis, applyArgs) {\n    let ret;\n    if (task.consoleTask) {\n      ret = task.consoleTask.run(() => delegate.invokeTask(targetZone, task, applyThis, applyArgs));\n    } else {\n      ret = delegate.invokeTask(targetZone, task, applyThis, applyArgs);\n    }\n    return ret;\n  }\n}\nconst isAngularZoneProperty = 'isAngularZone';\nconst angularZoneInstanceIdProperty = isAngularZoneProperty + '_ID';\nlet ngZoneInstanceId = 0;\n/**\n * An injectable service for executing work inside or outside of the Angular zone.\n *\n * The most common use of this service is to optimize performance when starting a work consisting of\n * one or more asynchronous tasks that don't require UI updates or error handling to be handled by\n * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks\n * can reenter the Angular zone via {@link #run}.\n *\n * <!-- TODO: add/fix links to:\n *   - docs explaining zones and the use of zones in Angular and change-detection\n *   - link to runOutsideAngular/run (throughout this file!)\n *   -->\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import {Component, NgZone} from '@angular/core';\n * import {NgIf} from '@angular/common';\n *\n * @Component({\n *   selector: 'ng-zone-demo',\n *   template: `\n *     <h2>Demo: NgZone</h2>\n *\n *     <p>Progress: {{progress}}%</p>\n *     <p *ngIf=\"progress >= 100\">Done processing {{label}} of Angular zone!</p>\n *\n *     <button (click)=\"processWithinAngularZone()\">Process within Angular zone</button>\n *     <button (click)=\"processOutsideOfAngularZone()\">Process outside of Angular zone</button>\n *   `,\n * })\n * export class NgZoneDemo {\n *   progress: number = 0;\n *   label: string;\n *\n *   constructor(private _ngZone: NgZone) {}\n *\n *   // Loop inside the Angular zone\n *   // so the UI DOES refresh after each setTimeout cycle\n *   processWithinAngularZone() {\n *     this.label = 'inside';\n *     this.progress = 0;\n *     this._increaseProgress(() => console.log('Inside Done!'));\n *   }\n *\n *   // Loop outside of the Angular zone\n *   // so the UI DOES NOT refresh after each setTimeout cycle\n *   processOutsideOfAngularZone() {\n *     this.label = 'outside';\n *     this.progress = 0;\n *     this._ngZone.runOutsideAngular(() => {\n *       this._increaseProgress(() => {\n *         // reenter the Angular zone and display done\n *         this._ngZone.run(() => { console.log('Outside Done!'); });\n *       });\n *     });\n *   }\n *\n *   _increaseProgress(doneCallback: () => void) {\n *     this.progress += 1;\n *     console.log(`Current progress: ${this.progress}%`);\n *\n *     if (this.progress < 100) {\n *       window.setTimeout(() => this._increaseProgress(doneCallback), 10);\n *     } else {\n *       doneCallback();\n *     }\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass NgZone {\n  hasPendingMacrotasks = false;\n  hasPendingMicrotasks = false;\n  /**\n   * Whether there are no outstanding microtasks or macrotasks.\n   */\n  isStable = true;\n  /**\n   * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\n   */\n  onUnstable = new EventEmitter(false);\n  /**\n   * Notifies when there is no more microtasks enqueued in the current VM Turn.\n   * This is a hint for Angular to do change detection, which may enqueue more microtasks.\n   * For this reason this event can fire multiple times per VM Turn.\n   */\n  onMicrotaskEmpty = new EventEmitter(false);\n  /**\n   * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\n   * implies we are about to relinquish VM turn.\n   * This event gets called just once.\n   */\n  onStable = new EventEmitter(false);\n  /**\n   * Notifies that an error has been delivered.\n   */\n  onError = new EventEmitter(false);\n  constructor(options) {\n    const {\n      enableLongStackTrace = false,\n      shouldCoalesceEventChangeDetection = false,\n      shouldCoalesceRunChangeDetection = false,\n      scheduleInRootZone = SCHEDULE_IN_ROOT_ZONE_DEFAULT\n    } = options;\n    if (typeof Zone == 'undefined') {\n      throw new RuntimeError(908 /* RuntimeErrorCode.MISSING_ZONEJS */, ngDevMode && `In this configuration Angular requires Zone.js`);\n    }\n    Zone.assertZonePatched();\n    const self = this;\n    self._nesting = 0;\n    self._outer = self._inner = Zone.current;\n    // AsyncStackTaggingZoneSpec provides `linked stack traces` to show\n    // where the async operation is scheduled. For more details, refer\n    // to this article, https://developer.chrome.com/blog/devtools-better-angular-debugging/\n    // And we only import this AsyncStackTaggingZoneSpec in development mode,\n    // in the production mode, the AsyncStackTaggingZoneSpec will be tree shaken away.\n    if (ngDevMode) {\n      self._inner = self._inner.fork(new AsyncStackTaggingZoneSpec('Angular'));\n    }\n    if (Zone['TaskTrackingZoneSpec']) {\n      self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());\n    }\n    if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n      self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n    }\n    // if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be\n    // coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.\n    self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;\n    self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;\n    self.callbackScheduled = false;\n    self.scheduleInRootZone = scheduleInRootZone;\n    forkInnerZoneWithAngularBehavior(self);\n  }\n  /**\n    This method checks whether the method call happens within an Angular Zone instance.\n  */\n  static isInAngularZone() {\n    // Zone needs to be checked, because this method might be called even when NoopNgZone is used.\n    return typeof Zone !== 'undefined' && Zone.current.get(isAngularZoneProperty) === true;\n  }\n  /**\n    Assures that the method is called within the Angular Zone, otherwise throws an error.\n  */\n  static assertInAngularZone() {\n    if (!NgZone.isInAngularZone()) {\n      throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to be in Angular Zone, but it is not!');\n    }\n  }\n  /**\n    Assures that the method is called outside of the Angular Zone, otherwise throws an error.\n  */\n  static assertNotInAngularZone() {\n    if (NgZone.isInAngularZone()) {\n      throw new RuntimeError(909 /* RuntimeErrorCode.UNEXPECTED_ZONE_STATE */, ngDevMode && 'Expected to not be in Angular Zone, but it is!');\n    }\n  }\n  /**\n   * Executes the `fn` function synchronously within the Angular zone and returns value returned by\n   * the function.\n   *\n   * Running functions via `run` allows you to reenter Angular zone from a task that was executed\n   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * within the Angular zone.\n   *\n   * If a synchronous error happens it will be rethrown and not reported via `onError`.\n   */\n  run(fn, applyThis, applyArgs) {\n    return this._inner.run(fn, applyThis, applyArgs);\n  }\n  /**\n   * Executes the `fn` function synchronously within the Angular zone as a task and returns value\n   * returned by the function.\n   *\n   * Running functions via `runTask` allows you to reenter Angular zone from a task that was executed\n   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * within the Angular zone.\n   *\n   * If a synchronous error happens it will be rethrown and not reported via `onError`.\n   */\n  runTask(fn, applyThis, applyArgs, name) {\n    const zone = this._inner;\n    const task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n    try {\n      return zone.runTask(task, applyThis, applyArgs);\n    } finally {\n      zone.cancelTask(task);\n    }\n  }\n  /**\n   * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not\n   * rethrown.\n   */\n  runGuarded(fn, applyThis, applyArgs) {\n    return this._inner.runGuarded(fn, applyThis, applyArgs);\n  }\n  /**\n   * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\n   * the function.\n   *\n   * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do\n   * work that\n   * doesn't trigger Angular change-detection or is subject to Angular's error handling.\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * outside of the Angular zone.\n   *\n   * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\n   */\n  runOutsideAngular(fn) {\n    return this._outer.run(fn);\n  }\n}\nconst EMPTY_PAYLOAD = {};\nfunction checkStable(zone) {\n  // TODO: @JiaLiPassion, should check zone.isCheckStableRunning to prevent\n  // re-entry. The case is:\n  //\n  // @Component({...})\n  // export class AppComponent {\n  // constructor(private ngZone: NgZone) {\n  //   this.ngZone.onStable.subscribe(() => {\n  //     this.ngZone.run(() => console.log('stable'););\n  //   });\n  // }\n  //\n  // The onStable subscriber run another function inside ngZone\n  // which causes `checkStable()` re-entry.\n  // But this fix causes some issues in g3, so this fix will be\n  // launched in another PR.\n  if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n    try {\n      zone._nesting++;\n      zone.onMicrotaskEmpty.emit(null);\n    } finally {\n      zone._nesting--;\n      if (!zone.hasPendingMicrotasks) {\n        try {\n          zone.runOutsideAngular(() => zone.onStable.emit(null));\n        } finally {\n          zone.isStable = true;\n        }\n      }\n    }\n  }\n}\nfunction delayChangeDetectionForEvents(zone) {\n  /**\n   * We also need to check _nesting here\n   * Consider the following case with shouldCoalesceRunChangeDetection = true\n   *\n   * ngZone.run(() => {});\n   * ngZone.run(() => {});\n   *\n   * We want the two `ngZone.run()` only trigger one change detection\n   * when shouldCoalesceRunChangeDetection is true.\n   * And because in this case, change detection run in async way(requestAnimationFrame),\n   * so we also need to check the _nesting here to prevent multiple\n   * change detections.\n   */\n  if (zone.isCheckStableRunning || zone.callbackScheduled) {\n    return;\n  }\n  zone.callbackScheduled = true;\n  function scheduleCheckStable() {\n    scheduleCallbackWithRafRace(() => {\n      zone.callbackScheduled = false;\n      updateMicroTaskStatus(zone);\n      zone.isCheckStableRunning = true;\n      checkStable(zone);\n      zone.isCheckStableRunning = false;\n    });\n  }\n  if (zone.scheduleInRootZone) {\n    Zone.root.run(() => {\n      scheduleCheckStable();\n    });\n  } else {\n    zone._outer.run(() => {\n      scheduleCheckStable();\n    });\n  }\n  updateMicroTaskStatus(zone);\n}\nfunction forkInnerZoneWithAngularBehavior(zone) {\n  const delayChangeDetectionForEventsDelegate = () => {\n    delayChangeDetectionForEvents(zone);\n  };\n  const instanceId = ngZoneInstanceId++;\n  zone._inner = zone._inner.fork({\n    name: 'angular',\n    properties: {\n      [isAngularZoneProperty]: true,\n      [angularZoneInstanceIdProperty]: instanceId,\n      [angularZoneInstanceIdProperty + instanceId]: true\n    },\n    onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n      // Prevent triggering change detection when the flag is detected.\n      if (shouldBeIgnoredByZone(applyArgs)) {\n        return delegate.invokeTask(target, task, applyThis, applyArgs);\n      }\n      try {\n        onEnter(zone);\n        return delegate.invokeTask(target, task, applyThis, applyArgs);\n      } finally {\n        if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {\n          delayChangeDetectionForEventsDelegate();\n        }\n        onLeave(zone);\n      }\n    },\n    onInvoke: (delegate, current, target, callback, applyThis, applyArgs, source) => {\n      try {\n        onEnter(zone);\n        return delegate.invoke(target, callback, applyThis, applyArgs, source);\n      } finally {\n        if (zone.shouldCoalesceRunChangeDetection &&\n        // Do not delay change detection when the task is the scheduler's tick.\n        // We need to synchronously trigger the stability logic so that the\n        // zone-based scheduler can prevent a duplicate ApplicationRef.tick\n        // by first checking if the scheduler tick is running. This does seem a bit roundabout,\n        // but we _do_ still want to trigger all the correct events when we exit the zone.run\n        // (`onMicrotaskEmpty` and `onStable` _should_ emit; developers can have code which\n        // relies on these events happening after change detection runs).\n        // Note: `zone.callbackScheduled` is already in delayChangeDetectionForEventsDelegate\n        // but is added here as well to prevent reads of applyArgs when not necessary\n        !zone.callbackScheduled && !isSchedulerTick(applyArgs)) {\n          delayChangeDetectionForEventsDelegate();\n        }\n        onLeave(zone);\n      }\n    },\n    onHasTask: (delegate, current, target, hasTaskState) => {\n      delegate.hasTask(target, hasTaskState);\n      if (current === target) {\n        // We are only interested in hasTask events which originate from our zone\n        // (A child hasTask event is not interesting to us)\n        if (hasTaskState.change == 'microTask') {\n          zone._hasPendingMicrotasks = hasTaskState.microTask;\n          updateMicroTaskStatus(zone);\n          checkStable(zone);\n        } else if (hasTaskState.change == 'macroTask') {\n          zone.hasPendingMacrotasks = hasTaskState.macroTask;\n        }\n      }\n    },\n    onHandleError: (delegate, current, target, error) => {\n      delegate.handleError(target, error);\n      zone.runOutsideAngular(() => zone.onError.emit(error));\n      return false;\n    }\n  });\n}\nfunction updateMicroTaskStatus(zone) {\n  if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.callbackScheduled === true) {\n    zone.hasPendingMicrotasks = true;\n  } else {\n    zone.hasPendingMicrotasks = false;\n  }\n}\nfunction onEnter(zone) {\n  zone._nesting++;\n  if (zone.isStable) {\n    zone.isStable = false;\n    zone.onUnstable.emit(null);\n  }\n}\nfunction onLeave(zone) {\n  zone._nesting--;\n  checkStable(zone);\n}\n/**\n * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls\n * to framework to perform rendering.\n */\nclass NoopNgZone {\n  hasPendingMicrotasks = false;\n  hasPendingMacrotasks = false;\n  isStable = true;\n  onUnstable = new EventEmitter();\n  onMicrotaskEmpty = new EventEmitter();\n  onStable = new EventEmitter();\n  onError = new EventEmitter();\n  run(fn, applyThis, applyArgs) {\n    return fn.apply(applyThis, applyArgs);\n  }\n  runGuarded(fn, applyThis, applyArgs) {\n    return fn.apply(applyThis, applyArgs);\n  }\n  runOutsideAngular(fn) {\n    return fn();\n  }\n  runTask(fn, applyThis, applyArgs, name) {\n    return fn.apply(applyThis, applyArgs);\n  }\n}\nfunction shouldBeIgnoredByZone(applyArgs) {\n  return hasApplyArgsData(applyArgs, '__ignore_ng_zone__');\n}\nfunction isSchedulerTick(applyArgs) {\n  return hasApplyArgsData(applyArgs, '__scheduler_tick__');\n}\nfunction hasApplyArgsData(applyArgs, key) {\n  if (!Array.isArray(applyArgs)) {\n    return false;\n  }\n  // We should only ever get 1 arg passed through to invokeTask.\n  // Short circuit here incase that behavior changes.\n  if (applyArgs.length !== 1) {\n    return false;\n  }\n  return applyArgs[0]?.data?.[key] === true;\n}\nfunction getNgZone(ngZoneToUse = 'zone.js', options) {\n  if (ngZoneToUse === 'noop') {\n    return new NoopNgZone();\n  }\n  if (ngZoneToUse === 'zone.js') {\n    return new NgZone(options);\n  }\n  return ngZoneToUse;\n}\n\n// Public API for Zone\n\n/**\n * Provides a hook for centralized exception handling.\n *\n * The default implementation of `ErrorHandler` prints error messages to the `console`. To\n * intercept error handling, write a custom exception handler that replaces this default as\n * appropriate for your app.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * class MyErrorHandler implements ErrorHandler {\n *   handleError(error) {\n *     // do something with the exception\n *   }\n * }\n *\n * // Provide in standalone apps\n * bootstrapApplication(AppComponent, {\n *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n *\n * // Provide in module-based apps\n * @NgModule({\n *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n * class MyModule {}\n * ```\n *\n * @publicApi\n */\nclass ErrorHandler {\n  /**\n   * @internal\n   */\n  _console = console;\n  handleError(error) {\n    this._console.error('ERROR', error);\n  }\n}\n/**\n * `InjectionToken` used to configure how to call the `ErrorHandler`.\n *\n * `NgZone` is provided by default today so the default (and only) implementation for this\n * is calling `ErrorHandler.handleError` outside of the Angular zone.\n */\nconst INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'internal error handler' : '', {\n  providedIn: 'root',\n  factory: () => {\n    const zone = inject(NgZone);\n    const userErrorHandler = inject(ErrorHandler);\n    return e => zone.runOutsideAngular(() => userErrorHandler.handleError(e));\n  }\n});\n\n/**\n * An `OutputEmitterRef` is created by the `output()` function and can be\n * used to emit values to consumers of your directive or component.\n *\n * Consumers of your directive/component can bind to the output and\n * subscribe to changes via the bound event syntax. For example:\n *\n * ```html\n * <my-comp (valueChange)=\"processNewValue($event)\" />\n * ```\n *\n * @publicAPI\n */\nclass OutputEmitterRef {\n  destroyed = false;\n  listeners = null;\n  errorHandler = inject(ErrorHandler, {\n    optional: true\n  });\n  /** @internal */\n  destroyRef = inject(DestroyRef);\n  constructor() {\n    // Clean-up all listeners and mark as destroyed upon destroy.\n    this.destroyRef.onDestroy(() => {\n      this.destroyed = true;\n      this.listeners = null;\n    });\n  }\n  subscribe(callback) {\n    if (this.destroyed) {\n      throw new RuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n    }\n    (this.listeners ??= []).push(callback);\n    return {\n      unsubscribe: () => {\n        const idx = this.listeners?.indexOf(callback);\n        if (idx !== undefined && idx !== -1) {\n          this.listeners?.splice(idx, 1);\n        }\n      }\n    };\n  }\n  /** Emits a new value to the output. */\n  emit(value) {\n    if (this.destroyed) {\n      throw new RuntimeError(953 /* RuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected emit for destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n    }\n    if (this.listeners === null) {\n      return;\n    }\n    const previousConsumer = setActiveConsumer$1(null);\n    try {\n      for (const listenerFn of this.listeners) {\n        try {\n          listenerFn(value);\n        } catch (err) {\n          this.errorHandler?.handleError(err);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(previousConsumer);\n    }\n  }\n}\n/** Gets the owning `DestroyRef` for the given output. */\nfunction getOutputDestroyRef(ref) {\n  return ref.destroyRef;\n}\n\n/**\n * The `output` function allows declaration of Angular outputs in\n * directives and components.\n *\n * You can use outputs to emit values to parent directives and component.\n * Parents can subscribe to changes via:\n *\n * - template event bindings. For example, `(myOutput)=\"doSomething($event)\"`\n * - programmatic subscription by using `OutputRef#subscribe`.\n *\n * @usageNotes\n *\n * To use `output()`, import the function from `@angular/core`.\n *\n * ```ts\n * import {output} from '@angular/core';\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `output`.\n *\n * ```ts\n * @Directive({\n *   ...\n * })\n * export class MyDir {\n *   nameChange = output<string>();    // OutputEmitterRef<string>\n *   onClick    = output();            // OutputEmitterRef<void>\n * }\n * ```\n *\n * You can emit values to consumers of your directive, by using\n * the `emit` method from `OutputEmitterRef`.\n *\n * ```ts\n * updateName(newName: string): void {\n *   this.nameChange.emit(newName);\n * }\n * ```\n * @initializerApiFunction {\"showTypesInSignaturePreview\": true}\n * @publicAPI\n */\nfunction output(opts) {\n  ngDevMode && assertInInjectionContext(output);\n  return new OutputEmitterRef();\n}\nfunction inputFunction(initialValue, opts) {\n  ngDevMode && assertInInjectionContext(input);\n  return createInputSignal(initialValue, opts);\n}\nfunction inputRequiredFunction(opts) {\n  ngDevMode && assertInInjectionContext(input);\n  return createInputSignal(REQUIRED_UNSET_VALUE, opts);\n}\n/**\n * The `input` function allows declaration of Angular inputs in directives\n * and components.\n *\n * There are two variants of inputs that can be declared:\n *\n *   1. **Optional inputs** with an initial value.\n *   2. **Required inputs** that consumers need to set.\n *\n * By default, the `input` function will declare optional inputs that\n * always have an initial value. Required inputs can be declared\n * using the `input.required()` function.\n *\n * Inputs are signals. The values of an input are exposed as a `Signal`.\n * The signal always holds the latest value of the input that is bound\n * from the parent.\n *\n * @usageNotes\n * To use signal-based inputs, import `input` from `@angular/core`.\n *\n * ```ts\n * import {input} from '@angular/core`;\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `input` or `input.required`.\n *\n * ```ts\n * @Component({\n *   ...\n * })\n * export class UserProfileComponent {\n *   firstName = input<string>();             // Signal<string|undefined>\n *   lastName  = input.required<string>();    // Signal<string>\n *   age       = input(0)                     // Signal<number>\n * }\n * ```\n *\n * Inside your component template, you can display values of the inputs\n * by calling the signal.\n *\n * ```html\n * <span>{{firstName()}}</span>\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst input = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `input` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing`input` export.\n  inputFunction.required = inputRequiredFunction;\n  return inputFunction;\n})();\n\n/**\n * Creates an ElementRef from the most recent node.\n *\n * @returns The ElementRef instance to use\n */\nfunction injectElementRef() {\n  return createElementRef(getCurrentTNode(), getLView());\n}\n/**\n * Creates an ElementRef given a node.\n *\n * @param tNode The node for which you'd like an ElementRef\n * @param lView The view to which the node belongs\n * @returns The ElementRef instance to use\n */\nfunction createElementRef(tNode, lView) {\n  return new ElementRef(getNativeByTNode(tNode, lView));\n}\n/**\n * A wrapper around a native element inside of a View.\n *\n * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\n * element.\n *\n * @security Permitting direct access to the DOM can make your application more vulnerable to\n * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the\n * [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\n// Note: We don't expose things like `Injector`, `ViewContainer`, ... here,\n// i.e. users have to ask for what they need. With that, we can build better analysis tools\n// and could do better codegen in the future.\nclass ElementRef {\n  /**\n   * <div class=\"callout is-critical\">\n   *   <header>Use with caution</header>\n   *   <p>\n   *    Use this API as the last resort when direct access to DOM is needed. Use templating and\n   *    data-binding provided by Angular instead. Alternatively you can take a look at\n   *    {@link Renderer2} which provides an API that can be safely used.\n   *   </p>\n   * </div>\n   */\n  nativeElement;\n  constructor(nativeElement) {\n    this.nativeElement = nativeElement;\n  }\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectElementRef;\n}\n/**\n * Unwraps `ElementRef` and return the `nativeElement`.\n *\n * @param value value to unwrap\n * @returns `nativeElement` if `ElementRef` otherwise returns value as is.\n */\nfunction unwrapElementRef(value) {\n  return value instanceof ElementRef ? value.nativeElement : value;\n}\nfunction symbolIterator() {\n  // @ts-expect-error accessing a private member\n  return this._results[Symbol.iterator]();\n}\n/**\n * An unmodifiable list of items that Angular keeps up to date when the state\n * of the application changes.\n *\n * The type of object that {@link ViewChildren}, {@link ContentChildren}, and {@link QueryList}\n * provide.\n *\n * Implements an iterable interface, therefore it can be used in both ES6\n * javascript `for (var i of items)` loops as well as in Angular templates with\n * `*ngFor=\"let i of myList\"`.\n *\n * Changes can be observed by subscribing to the changes `Observable`.\n *\n * NOTE: In the future this class will implement an `Observable` interface.\n *\n * @usageNotes\n * ### Example\n * ```ts\n * @Component({...})\n * class Container {\n *   @ViewChildren(Item) items:QueryList<Item>;\n * }\n * ```\n *\n * @publicApi\n */\nclass QueryList {\n  _emitDistinctChangesOnly;\n  dirty = true;\n  _onDirty = undefined;\n  _results = [];\n  _changesDetected = false;\n  _changes = undefined;\n  length = 0;\n  first = undefined;\n  last = undefined;\n  /**\n   * Returns `Observable` of `QueryList` notifying the subscriber of changes.\n   */\n  get changes() {\n    return this._changes ??= new Subject();\n  }\n  /**\n   * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change\n   *     has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in\n   *     the same result)\n   */\n  constructor(_emitDistinctChangesOnly = false) {\n    this._emitDistinctChangesOnly = _emitDistinctChangesOnly;\n  }\n  /**\n   * Returns the QueryList entry at `index`.\n   */\n  get(index) {\n    return this._results[index];\n  }\n  /**\n   * See\n   * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)\n   */\n  map(fn) {\n    return this._results.map(fn);\n  }\n  filter(fn) {\n    return this._results.filter(fn);\n  }\n  /**\n   * See\n   * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)\n   */\n  find(fn) {\n    return this._results.find(fn);\n  }\n  /**\n   * See\n   * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)\n   */\n  reduce(fn, init) {\n    return this._results.reduce(fn, init);\n  }\n  /**\n   * See\n   * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)\n   */\n  forEach(fn) {\n    this._results.forEach(fn);\n  }\n  /**\n   * See\n   * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)\n   */\n  some(fn) {\n    return this._results.some(fn);\n  }\n  /**\n   * Returns a copy of the internal results list as an Array.\n   */\n  toArray() {\n    return this._results.slice();\n  }\n  toString() {\n    return this._results.toString();\n  }\n  /**\n   * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that\n   * on change detection, it will not notify of changes to the queries, unless a new change\n   * occurs.\n   *\n   * @param resultsTree The query results to store\n   * @param identityAccessor Optional function for extracting stable object identity from a value\n   *    in the array. This function is executed for each element of the query result list while\n   *    comparing current query list with the new one (provided as a first argument of the `reset`\n   *    function) to detect if the lists are different. If the function is not provided, elements\n   *    are compared as is (without any pre-processing).\n   */\n  reset(resultsTree, identityAccessor) {\n    this.dirty = false;\n    const newResultFlat = flatten(resultsTree);\n    if (this._changesDetected = !arrayEquals(this._results, newResultFlat, identityAccessor)) {\n      this._results = newResultFlat;\n      this.length = newResultFlat.length;\n      this.last = newResultFlat[this.length - 1];\n      this.first = newResultFlat[0];\n    }\n  }\n  /**\n   * Triggers a change event by emitting on the `changes` {@link EventEmitter}.\n   */\n  notifyOnChanges() {\n    if (this._changes !== undefined && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.next(this);\n  }\n  /** @internal */\n  onDirty(cb) {\n    this._onDirty = cb;\n  }\n  /** internal */\n  setDirty() {\n    this.dirty = true;\n    this._onDirty?.();\n  }\n  /** internal */\n  destroy() {\n    if (this._changes !== undefined) {\n      this._changes.complete();\n      this._changes.unsubscribe();\n    }\n  }\n  [Symbol.iterator] = (() => symbolIterator)();\n}\n\n/**\n * The name of an attribute that can be added to the hydration boundary node\n * (component host node) to disable hydration for the content within that boundary.\n */\nconst SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration';\n/** Lowercase name of the `ngSkipHydration` attribute used for case-insensitive comparisons. */\nconst SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = 'ngskiphydration';\n/**\n * Helper function to check if a given TNode has the 'ngSkipHydration' attribute.\n */\nfunction hasSkipHydrationAttrOnTNode(tNode) {\n  const attrs = tNode.mergedAttrs;\n  if (attrs === null) return false;\n  // only ever look at the attribute name and skip the values\n  for (let i = 0; i < attrs.length; i += 2) {\n    const value = attrs[i];\n    // This is a marker, which means that the static attributes section is over,\n    // so we can exit early.\n    if (typeof value === 'number') return false;\n    if (typeof value === 'string' && value.toLowerCase() === SKIP_HYDRATION_ATTR_NAME_LOWER_CASE) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Helper function to check if a given RElement has the 'ngSkipHydration' attribute.\n */\nfunction hasSkipHydrationAttrOnRElement(rNode) {\n  return rNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME);\n}\n/**\n * Checks whether a TNode has a flag to indicate that it's a part of\n * a skip hydration block.\n */\nfunction hasInSkipHydrationBlockFlag(tNode) {\n  return (tNode.flags & 128 /* TNodeFlags.inSkipHydrationBlock */) === 128 /* TNodeFlags.inSkipHydrationBlock */;\n}\n/**\n * Helper function that determines if a given node is within a skip hydration block\n * by navigating up the TNode tree to see if any parent nodes have skip hydration\n * attribute.\n */\nfunction isInSkipHydrationBlock(tNode) {\n  if (hasInSkipHydrationBlockFlag(tNode)) {\n    return true;\n  }\n  let currentTNode = tNode.parent;\n  while (currentTNode) {\n    if (hasInSkipHydrationBlockFlag(tNode) || hasSkipHydrationAttrOnTNode(currentTNode)) {\n      return true;\n    }\n    currentTNode = currentTNode.parent;\n  }\n  return false;\n}\n/**\n * Check if an i18n block is in a skip hydration section by looking at a parent TNode\n * to determine if this TNode is in a skip hydration section or the TNode has\n * the `ngSkipHydration` attribute.\n */\nfunction isI18nInSkipHydrationBlock(parentTNode) {\n  return hasInSkipHydrationBlockFlag(parentTNode) || hasSkipHydrationAttrOnTNode(parentTNode) || isInSkipHydrationBlock(parentTNode);\n}\n\n/**\n * The strategy that the default change detector uses to detect changes.\n * When set, takes effect the next time change detection is triggered.\n *\n * @see [Change detection usage](/api/core/ChangeDetectorRef?tab=usage-notes)\n * @see [Skipping component subtrees](/best-practices/skipping-subtrees)\n *\n * @publicApi\n */\nvar ChangeDetectionStrategy;\n(function (ChangeDetectionStrategy) {\n  /**\n   * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated\n   * until reactivated by setting the strategy to `Default` (`CheckAlways`).\n   * Change detection can still be explicitly invoked.\n   * This strategy applies to all child directives and cannot be overridden.\n   */\n  ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n  /**\n   * Use the default `CheckAlways` strategy, in which change detection is automatic until\n   * explicitly deactivated.\n   */\n  ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));\n\n// Keeps track of the currently-active LViews.\nconst TRACKED_LVIEWS = new Map();\n// Used for generating unique IDs for LViews.\nlet uniqueIdCounter = 0;\n/** Gets a unique ID that can be assigned to an LView. */\nfunction getUniqueLViewId() {\n  return uniqueIdCounter++;\n}\n/** Starts tracking an LView. */\nfunction registerLView(lView) {\n  ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');\n  TRACKED_LVIEWS.set(lView[ID], lView);\n}\n/** Gets an LView by its unique ID. */\nfunction getLViewById(id) {\n  ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');\n  return TRACKED_LVIEWS.get(id) || null;\n}\n/** Stops tracking an LView. */\nfunction unregisterLView(lView) {\n  ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');\n  TRACKED_LVIEWS.delete(lView[ID]);\n}\n/** Gets the currently-tracked views. */\nfunction getTrackedLViews() {\n  return TRACKED_LVIEWS;\n}\n\n/**\n * The internal view context which is specific to a given DOM element, directive or\n * component instance. Each value in here (besides the LView and element node details)\n * can be present, null or undefined. If undefined then it implies the value has not been\n * looked up yet, otherwise, if null, then a lookup was executed and nothing was found.\n *\n * Each value will get filled when the respective value is examined within the getContext\n * function. The component, element and each directive instance will share the same instance\n * of the context.\n */\nclass LContext {\n  lViewId;\n  nodeIndex;\n  native;\n  /**\n   * The instance of the Component node.\n   */\n  component;\n  /**\n   * The list of active directives that exist on this element.\n   */\n  directives;\n  /**\n   * The map of local references (local reference name => element or directive instance) that\n   * exist on this element.\n   */\n  localRefs;\n  /** Component's parent view data. */\n  get lView() {\n    return getLViewById(this.lViewId);\n  }\n  constructor(\n  /**\n   * ID of the component's parent view data.\n   */\n  lViewId,\n  /**\n   * The index instance of the node.\n   */\n  nodeIndex,\n  /**\n   * The instance of the DOM node that is attached to the lNode.\n   */\n  native) {\n    this.lViewId = lViewId;\n    this.nodeIndex = nodeIndex;\n    this.native = native;\n  }\n}\n\n/**\n * Returns the matching `LContext` data for a given DOM node, directive or component instance.\n *\n * This function will examine the provided DOM element, component, or directive instance\\'s\n * monkey-patched property to derive the `LContext` data. Once called then the monkey-patched\n * value will be that of the newly created `LContext`.\n *\n * If the monkey-patched value is the `LView` instance then the context value for that\n * target will be created and the monkey-patch reference will be updated. Therefore when this\n * function is called it may mutate the provided element\\'s, component\\'s or any of the associated\n * directive\\'s monkey-patch values.\n *\n * If the monkey-patch value is not detected then the code will walk up the DOM until an element\n * is found which contains a monkey-patch reference. When that occurs then the provided element\n * will be updated with a new context (which is then returned). If the monkey-patch value is not\n * detected for a component/directive instance then it will throw an error (all components and\n * directives should be automatically monkey-patched by ivy).\n *\n * @param target Component, Directive or DOM Node.\n */\nfunction getLContext(target) {\n  let mpValue = readPatchedData(target);\n  if (mpValue) {\n    // only when it's an array is it considered an LView instance\n    // ... otherwise it's an already constructed LContext instance\n    if (isLView(mpValue)) {\n      const lView = mpValue;\n      let nodeIndex;\n      let component = undefined;\n      let directives = undefined;\n      if (isComponentInstance(target)) {\n        nodeIndex = findViaComponent(lView, target);\n        if (nodeIndex == -1) {\n          throw new Error('The provided component was not found in the application');\n        }\n        component = target;\n      } else if (isDirectiveInstance(target)) {\n        nodeIndex = findViaDirective(lView, target);\n        if (nodeIndex == -1) {\n          throw new Error('The provided directive was not found in the application');\n        }\n        directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n      } else {\n        nodeIndex = findViaNativeElement(lView, target);\n        if (nodeIndex == -1) {\n          return null;\n        }\n      }\n      // the goal is not to fill the entire context full of data because the lookups\n      // are expensive. Instead, only the target data (the element, component, container, ICU\n      // expression or directive details) are filled into the context. If called multiple times\n      // with different target values then the missing target data will be filled in.\n      const native = unwrapRNode(lView[nodeIndex]);\n      const existingCtx = readPatchedData(native);\n      const context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, native);\n      // only when the component has been discovered then update the monkey-patch\n      if (component && context.component === undefined) {\n        context.component = component;\n        attachPatchData(context.component, context);\n      }\n      // only when the directives have been discovered then update the monkey-patch\n      if (directives && context.directives === undefined) {\n        context.directives = directives;\n        for (let i = 0; i < directives.length; i++) {\n          attachPatchData(directives[i], context);\n        }\n      }\n      attachPatchData(context.native, context);\n      mpValue = context;\n    }\n  } else {\n    const rElement = target;\n    ngDevMode && assertDomNode(rElement);\n    // if the context is not found then we need to traverse upwards up the DOM\n    // to find the nearest element that has already been monkey patched with data\n    let parent = rElement;\n    while (parent = parent.parentNode) {\n      const parentContext = readPatchedData(parent);\n      if (parentContext) {\n        const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;\n        // the edge of the app was also reached here through another means\n        // (maybe because the DOM was changed manually).\n        if (!lView) {\n          return null;\n        }\n        const index = findViaNativeElement(lView, rElement);\n        if (index >= 0) {\n          const native = unwrapRNode(lView[index]);\n          const context = createLContext(lView, index, native);\n          attachPatchData(native, context);\n          mpValue = context;\n          break;\n        }\n      }\n    }\n  }\n  return mpValue || null;\n}\n/**\n * Creates an empty instance of a `LContext` context\n */\nfunction createLContext(lView, nodeIndex, native) {\n  return new LContext(lView[ID], nodeIndex, native);\n}\n/**\n * Takes a component instance and returns the view for that component.\n *\n * @param componentInstance\n * @returns The component's view\n */\nfunction getComponentViewByInstance(componentInstance) {\n  let patchedData = readPatchedData(componentInstance);\n  let lView;\n  if (isLView(patchedData)) {\n    const contextLView = patchedData;\n    const nodeIndex = findViaComponent(contextLView, componentInstance);\n    lView = getComponentLViewByIndex(nodeIndex, contextLView);\n    const context = createLContext(contextLView, nodeIndex, lView[HOST]);\n    context.component = componentInstance;\n    attachPatchData(componentInstance, context);\n    attachPatchData(context.native, context);\n  } else {\n    const context = patchedData;\n    const contextLView = context.lView;\n    ngDevMode && assertLView(contextLView);\n    lView = getComponentLViewByIndex(context.nodeIndex, contextLView);\n  }\n  return lView;\n}\n/**\n * This property will be monkey-patched on elements, components and directives.\n */\nconst MONKEY_PATCH_KEY_NAME = '__ngContext__';\nfunction attachLViewId(target, data) {\n  target[MONKEY_PATCH_KEY_NAME] = data[ID];\n}\n/**\n * Returns the monkey-patch value data present on the target (which could be\n * a component, directive or a DOM node).\n */\nfunction readLView(target) {\n  const data = readPatchedData(target);\n  if (isLView(data)) {\n    return data;\n  }\n  return data ? data.lView : null;\n}\n/**\n * Assigns the given data to the given target (which could be a component,\n * directive or DOM node instance) using monkey-patching.\n */\nfunction attachPatchData(target, data) {\n  ngDevMode && assertDefined(target, 'Target expected');\n  // Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this\n  // for `LView`, because we have control over when an `LView` is created and destroyed, whereas\n  // we can't know when to remove an `LContext`.\n  if (isLView(data)) {\n    target[MONKEY_PATCH_KEY_NAME] = data[ID];\n    registerLView(data);\n  } else {\n    target[MONKEY_PATCH_KEY_NAME] = data;\n  }\n}\n/**\n * Returns the monkey-patch value data present on the target (which could be\n * a component, directive or a DOM node).\n */\nfunction readPatchedData(target) {\n  ngDevMode && assertDefined(target, 'Target expected');\n  const data = target[MONKEY_PATCH_KEY_NAME];\n  return typeof data === 'number' ? getLViewById(data) : data || null;\n}\nfunction readPatchedLView(target) {\n  const value = readPatchedData(target);\n  if (value) {\n    return isLView(value) ? value : value.lView;\n  }\n  return null;\n}\nfunction isComponentInstance(instance) {\n  return instance && instance.constructor && instance.constructor.ɵcmp;\n}\nfunction isDirectiveInstance(instance) {\n  return instance && instance.constructor && instance.constructor.ɵdir;\n}\n/**\n * Locates the element within the given LView and returns the matching index\n */\nfunction findViaNativeElement(lView, target) {\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (unwrapRNode(lView[i]) === target) {\n      return i;\n    }\n  }\n  return -1;\n}\n/**\n * Locates the next tNode (child, sibling or parent).\n */\nfunction traverseNextElement(tNode) {\n  if (tNode.child) {\n    return tNode.child;\n  } else if (tNode.next) {\n    return tNode.next;\n  } else {\n    // Let's take the following template: <div><span>text</span></div><component/>\n    // After checking the text node, we need to find the next parent that has a \"next\" TNode,\n    // in this case the parent `div`, so that we can find the component.\n    while (tNode.parent && !tNode.parent.next) {\n      tNode = tNode.parent;\n    }\n    return tNode.parent && tNode.parent.next;\n  }\n}\n/**\n * Locates the component within the given LView and returns the matching index\n */\nfunction findViaComponent(lView, componentInstance) {\n  const componentIndices = lView[TVIEW].components;\n  if (componentIndices) {\n    for (let i = 0; i < componentIndices.length; i++) {\n      const elementComponentIndex = componentIndices[i];\n      const componentView = getComponentLViewByIndex(elementComponentIndex, lView);\n      if (componentView[CONTEXT] === componentInstance) {\n        return elementComponentIndex;\n      }\n    }\n  } else {\n    const rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);\n    const rootComponent = rootComponentView[CONTEXT];\n    if (rootComponent === componentInstance) {\n      // we are dealing with the root element here therefore we know that the\n      // element is the very first element after the HEADER data in the lView\n      return HEADER_OFFSET;\n    }\n  }\n  return -1;\n}\n/**\n * Locates the directive within the given LView and returns the matching index\n */\nfunction findViaDirective(lView, directiveInstance) {\n  // if a directive is monkey patched then it will (by default)\n  // have a reference to the LView of the current view. The\n  // element bound to the directive being search lives somewhere\n  // in the view data. We loop through the nodes and check their\n  // list of directives for the instance.\n  let tNode = lView[TVIEW].firstChild;\n  while (tNode) {\n    const directiveIndexStart = tNode.directiveStart;\n    const directiveIndexEnd = tNode.directiveEnd;\n    for (let i = directiveIndexStart; i < directiveIndexEnd; i++) {\n      if (lView[i] === directiveInstance) {\n        return tNode.index;\n      }\n    }\n    tNode = traverseNextElement(tNode);\n  }\n  return -1;\n}\n/**\n * Returns a list of directives applied to a node at a specific index. The list includes\n * directives matched by selector and any host directives, but it excludes components.\n * Use `getComponentAtNodeIndex` to find the component applied to a node.\n *\n * @param nodeIndex The node index\n * @param lView The target view data\n */\nfunction getDirectivesAtNodeIndex(nodeIndex, lView) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  if (tNode.directiveStart === 0) return EMPTY_ARRAY;\n  const results = [];\n  for (let i = tNode.directiveStart; i < tNode.directiveEnd; i++) {\n    const directiveInstance = lView[i];\n    if (!isComponentInstance(directiveInstance)) {\n      results.push(directiveInstance);\n    }\n  }\n  return results;\n}\nfunction getComponentAtNodeIndex(nodeIndex, lView) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  const {\n    directiveStart,\n    componentOffset\n  } = tNode;\n  return componentOffset > -1 ? lView[directiveStart + componentOffset] : null;\n}\n/**\n * Returns a map of local references (local reference name => element or directive instance) that\n * exist on a given element.\n */\nfunction discoverLocalRefs(lView, nodeIndex) {\n  const tNode = lView[TVIEW].data[nodeIndex];\n  if (tNode && tNode.localNames) {\n    const result = {};\n    let localIndex = tNode.index + 1;\n    for (let i = 0; i < tNode.localNames.length; i += 2) {\n      result[tNode.localNames[i]] = lView[localIndex];\n      localIndex++;\n    }\n    return result;\n  }\n  return null;\n}\n\n/**\n * Retrieve the root view from any component or `LView` by walking the parent `LView` until\n * reaching the root `LView`.\n *\n * @param componentOrLView any component or `LView`\n */\nfunction getRootView(componentOrLView) {\n  ngDevMode && assertDefined(componentOrLView, 'component');\n  let lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);\n  while (lView && !(lView[FLAGS] & 512 /* LViewFlags.IsRoot */)) {\n    lView = getLViewParent(lView);\n  }\n  ngDevMode && assertLView(lView);\n  return lView;\n}\n/**\n * Returns the context information associated with the application where the target is situated. It\n * does this by walking the parent views until it gets to the root view, then getting the context\n * off of that.\n *\n * @param viewOrComponent the `LView` or component to get the root context for.\n */\nfunction getRootContext(viewOrComponent) {\n  const rootView = getRootView(viewOrComponent);\n  ngDevMode && assertDefined(rootView[CONTEXT], 'Root view has no context. Perhaps it is disconnected?');\n  return rootView[CONTEXT];\n}\n/**\n * Gets the first `LContainer` in the LView or `null` if none exists.\n */\nfunction getFirstLContainer(lView) {\n  return getNearestLContainer(lView[CHILD_HEAD]);\n}\n/**\n * Gets the next `LContainer` that is a sibling of the given container.\n */\nfunction getNextLContainer(container) {\n  return getNearestLContainer(container[NEXT]);\n}\nfunction getNearestLContainer(viewOrContainer) {\n  while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {\n    viewOrContainer = viewOrContainer[NEXT];\n  }\n  return viewOrContainer;\n}\n\n/**\n * Retrieves the component instance associated with a given DOM element.\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <div>\n *     <child-comp></child-comp>\n *   </div>\n * </app-root>\n * ```\n *\n * Calling `getComponent` on `<child-comp>` will return the instance of `ChildComponent`\n * associated with this DOM element.\n *\n * Calling the function on `<app-root>` will return the `MyApp` instance.\n *\n *\n * @param element DOM element from which the component should be retrieved.\n * @returns Component instance associated with the element or `null` if there\n *    is no component associated with it.\n *\n * @publicApi\n */\nfunction getComponent(element) {\n  ngDevMode && assertDomElement(element);\n  const context = getLContext(element);\n  if (context === null) return null;\n  if (context.component === undefined) {\n    const lView = context.lView;\n    if (lView === null) {\n      return null;\n    }\n    context.component = getComponentAtNodeIndex(context.nodeIndex, lView);\n  }\n  return context.component;\n}\n/**\n * If inside an embedded view (e.g. `*ngIf` or `*ngFor`), retrieves the context of the embedded\n * view that the element is part of. Otherwise retrieves the instance of the component whose view\n * owns the element (in this case, the result is the same as calling `getOwningComponent`).\n *\n * @param element Element for which to get the surrounding component instance.\n * @returns Instance of the component that is around the element or null if the element isn't\n *    inside any component.\n *\n * @publicApi\n */\nfunction getContext(element) {\n  assertDomElement(element);\n  const context = getLContext(element);\n  const lView = context ? context.lView : null;\n  return lView === null ? null : lView[CONTEXT];\n}\n/**\n * Retrieves the component instance whose view contains the DOM element.\n *\n * For example, if `<child-comp>` is used in the template of `<app-comp>`\n * (i.e. a `ViewChild` of `<app-comp>`), calling `getOwningComponent` on `<child-comp>`\n * would return `<app-comp>`.\n *\n * @param elementOrDir DOM element, component or directive instance\n *    for which to retrieve the root components.\n * @returns Component instance whose view owns the DOM element or null if the element is not\n *    part of a component view.\n *\n * @publicApi\n */\nfunction getOwningComponent(elementOrDir) {\n  const context = getLContext(elementOrDir);\n  let lView = context ? context.lView : null;\n  if (lView === null) return null;\n  let parent;\n  while (lView[TVIEW].type === 2 /* TViewType.Embedded */ && (parent = getLViewParent(lView))) {\n    lView = parent;\n  }\n  return lView[FLAGS] & 512 /* LViewFlags.IsRoot */ ? null : lView[CONTEXT];\n}\n/**\n * Retrieves all root components associated with a DOM element, directive or component instance.\n * Root components are those which have been bootstrapped by Angular.\n *\n * @param elementOrDir DOM element, component or directive instance\n *    for which to retrieve the root components.\n * @returns Root components associated with the target object.\n *\n * @publicApi\n */\nfunction getRootComponents(elementOrDir) {\n  const lView = readPatchedLView(elementOrDir);\n  return lView !== null ? [getRootContext(lView)] : [];\n}\n/**\n * Retrieves an `Injector` associated with an element, component or directive instance.\n *\n * @param elementOrDir DOM element, component or directive instance for which to\n *    retrieve the injector.\n * @returns Injector associated with the element, component or directive instance.\n *\n * @publicApi\n */\nfunction getInjector(elementOrDir) {\n  const context = getLContext(elementOrDir);\n  const lView = context ? context.lView : null;\n  if (lView === null) return Injector.NULL;\n  const tNode = lView[TVIEW].data[context.nodeIndex];\n  return new NodeInjector(tNode, lView);\n}\n/**\n * Retrieve a set of injection tokens at a given DOM node.\n *\n * @param element Element for which the injection tokens should be retrieved.\n */\nfunction getInjectionTokens(element) {\n  const context = getLContext(element);\n  const lView = context ? context.lView : null;\n  if (lView === null) return [];\n  const tView = lView[TVIEW];\n  const tNode = tView.data[context.nodeIndex];\n  const providerTokens = [];\n  const startIndex = tNode.providerIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n  const endIndex = tNode.directiveEnd;\n  for (let i = startIndex; i < endIndex; i++) {\n    let value = tView.data[i];\n    if (isDirectiveDefHack(value)) {\n      // The fact that we sometimes store Type and sometimes DirectiveDef in this location is a\n      // design flaw.  We should always store same type so that we can be monomorphic. The issue\n      // is that for Components/Directives we store the def instead the type. The correct behavior\n      // is that we should always be storing injectable type in this location.\n      value = value.type;\n    }\n    providerTokens.push(value);\n  }\n  return providerTokens;\n}\n/**\n * Retrieves directive instances associated with a given DOM node. Does not include\n * component instances.\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <button my-button></button>\n *   <my-comp></my-comp>\n * </app-root>\n * ```\n *\n * Calling `getDirectives` on `<button>` will return an array with an instance of the `MyButton`\n * directive that is associated with the DOM node.\n *\n * Calling `getDirectives` on `<my-comp>` will return an empty array.\n *\n * @param node DOM node for which to get the directives.\n * @returns Array of directives associated with the node.\n *\n * @publicApi\n */\nfunction getDirectives(node) {\n  // Skip text nodes because we can't have directives associated with them.\n  if (node instanceof Text) {\n    return [];\n  }\n  const context = getLContext(node);\n  const lView = context ? context.lView : null;\n  if (lView === null) {\n    return [];\n  }\n  const tView = lView[TVIEW];\n  const nodeIndex = context.nodeIndex;\n  if (!tView?.data[nodeIndex]) {\n    return [];\n  }\n  if (context.directives === undefined) {\n    context.directives = getDirectivesAtNodeIndex(nodeIndex, lView);\n  }\n  // The `directives` in this case are a named array called `LComponentView`. Clone the\n  // result so we don't expose an internal data structure in the user's console.\n  return context.directives === null ? [] : [...context.directives];\n}\n/**\n * Returns the debug (partial) metadata for a particular directive or component instance.\n * The function accepts an instance of a directive or component and returns the corresponding\n * metadata.\n *\n * @param directiveOrComponentInstance Instance of a directive or component\n * @returns metadata of the passed directive or component\n *\n * @publicApi\n */\nfunction getDirectiveMetadata$1(directiveOrComponentInstance) {\n  const {\n    constructor\n  } = directiveOrComponentInstance;\n  if (!constructor) {\n    throw new Error('Unable to find the instance constructor');\n  }\n  // In case a component inherits from a directive, we may have component and directive metadata\n  // To ensure we don't get the metadata of the directive, we want to call `getComponentDef` first.\n  const componentDef = getComponentDef(constructor);\n  if (componentDef) {\n    const inputs = extractInputDebugMetadata(componentDef.inputs);\n    return {\n      inputs,\n      outputs: componentDef.outputs,\n      encapsulation: componentDef.encapsulation,\n      changeDetection: componentDef.onPush ? ChangeDetectionStrategy.OnPush : ChangeDetectionStrategy.Default\n    };\n  }\n  const directiveDef = getDirectiveDef(constructor);\n  if (directiveDef) {\n    const inputs = extractInputDebugMetadata(directiveDef.inputs);\n    return {\n      inputs,\n      outputs: directiveDef.outputs\n    };\n  }\n  return null;\n}\n/**\n * Retrieve map of local references.\n *\n * The references are retrieved as a map of local reference name to element or directive instance.\n *\n * @param target DOM element, component or directive instance for which to retrieve\n *    the local references.\n */\nfunction getLocalRefs(target) {\n  const context = getLContext(target);\n  if (context === null) return {};\n  if (context.localRefs === undefined) {\n    const lView = context.lView;\n    if (lView === null) {\n      return {};\n    }\n    context.localRefs = discoverLocalRefs(lView, context.nodeIndex);\n  }\n  return context.localRefs || {};\n}\n/**\n * Retrieves the host element of a component or directive instance.\n * The host element is the DOM element that matched the selector of the directive.\n *\n * @param componentOrDirective Component or directive instance for which the host\n *     element should be retrieved.\n * @returns Host element of the target.\n *\n * @publicApi\n */\nfunction getHostElement(componentOrDirective) {\n  return getLContext(componentOrDirective).native;\n}\n/**\n * Retrieves the rendered text for a given component.\n *\n * This function retrieves the host element of a component and\n * and then returns the `textContent` for that element. This implies\n * that the text returned will include re-projected content of\n * the component as well.\n *\n * @param component The component to return the content text for.\n */\nfunction getRenderedText(component) {\n  const hostElement = getHostElement(component);\n  return hostElement.textContent || '';\n}\n/**\n * Retrieves a list of event listeners associated with a DOM element. The list does include host\n * listeners, but it does not include event listeners defined outside of the Angular context\n * (e.g. through `addEventListener`).\n *\n * @usageNotes\n * Given the following DOM structure:\n *\n * ```html\n * <app-root>\n *   <div (click)=\"doSomething()\"></div>\n * </app-root>\n * ```\n *\n * Calling `getListeners` on `<div>` will return an object that looks as follows:\n *\n * ```ts\n * {\n *   name: 'click',\n *   element: <div>,\n *   callback: () => doSomething(),\n *   useCapture: false\n * }\n * ```\n *\n * @param element Element for which the DOM listeners should be retrieved.\n * @returns Array of event listeners on the DOM element.\n *\n * @publicApi\n */\nfunction getListeners(element) {\n  ngDevMode && assertDomElement(element);\n  const lContext = getLContext(element);\n  const lView = lContext === null ? null : lContext.lView;\n  if (lView === null) return [];\n  const tView = lView[TVIEW];\n  const lCleanup = lView[CLEANUP];\n  const tCleanup = tView.cleanup;\n  const listeners = [];\n  if (tCleanup && lCleanup) {\n    for (let i = 0; i < tCleanup.length;) {\n      const firstParam = tCleanup[i++];\n      const secondParam = tCleanup[i++];\n      if (typeof firstParam === 'string') {\n        const name = firstParam;\n        const listenerElement = unwrapRNode(lView[secondParam]);\n        const callback = lCleanup[tCleanup[i++]];\n        const useCaptureOrIndx = tCleanup[i++];\n        // if useCaptureOrIndx is boolean then report it as is.\n        // if useCaptureOrIndx is positive number then it in unsubscribe method\n        // if useCaptureOrIndx is negative number then it is a Subscription\n        const type = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0 ? 'dom' : 'output';\n        const useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;\n        if (element == listenerElement) {\n          listeners.push({\n            element,\n            name,\n            callback,\n            useCapture,\n            type\n          });\n        }\n      }\n    }\n  }\n  listeners.sort(sortListeners);\n  return listeners;\n}\nfunction sortListeners(a, b) {\n  if (a.name == b.name) return 0;\n  return a.name < b.name ? -1 : 1;\n}\n/**\n * This function should not exist because it is megamorphic and only mostly correct.\n *\n * See call site for more info.\n */\nfunction isDirectiveDefHack(obj) {\n  return obj.type !== undefined && obj.declaredInputs !== undefined && obj.findHostDirectiveDefs !== undefined;\n}\n/**\n * Retrieve the component `LView` from component/element.\n *\n * NOTE: `LView` is a private and should not be leaked outside.\n *       Don't export this method to `ng.*` on window.\n *\n * @param target DOM element or component instance for which to retrieve the LView.\n */\nfunction getComponentLView(target) {\n  const lContext = getLContext(target);\n  const nodeIndx = lContext.nodeIndex;\n  const lView = lContext.lView;\n  ngDevMode && assertLView(lView);\n  const componentLView = lView[nodeIndx];\n  ngDevMode && assertLView(componentLView);\n  return componentLView;\n}\n/** Asserts that a value is a DOM Element. */\nfunction assertDomElement(value) {\n  if (typeof Element !== 'undefined' && !(value instanceof Element)) {\n    throw new Error('Expecting instance of DOM Element');\n  }\n}\n/**\n * A directive definition holds additional metadata using bitwise flags to indicate\n * for example whether it is signal based.\n *\n * This information needs to be separate from the `publicName -> minifiedName`\n * mappings for backwards compatibility.\n */\nfunction extractInputDebugMetadata(inputs) {\n  const res = {};\n  for (const key in inputs) {\n    if (!inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    const value = inputs[key];\n    if (value === undefined) {\n      continue;\n    }\n    let minifiedName;\n    if (Array.isArray(value)) {\n      minifiedName = value[0];\n      // flags are not used for now.\n      // TODO: Consider exposing flag information in discovery.\n    } else {\n      minifiedName = value;\n    }\n    res[key] = minifiedName;\n  }\n  return res;\n}\n\n/**\n * Most of the use of `document` in Angular is from within the DI system so it is possible to simply\n * inject the `DOCUMENT` token and are done.\n *\n * Ivy is special because it does not rely upon the DI and must get hold of the document some other\n * way.\n *\n * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.\n * Wherever ivy needs the global document, it calls `getDocument()` instead.\n *\n * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to\n * tell ivy what the global `document` is.\n *\n * Angular does this for us in each of the standard platforms (`Browser` and `Server`)\n * by calling `setDocument()` when providing the `DOCUMENT` token.\n */\nlet DOCUMENT = undefined;\n/**\n * Tell ivy what the `document` is for this platform.\n *\n * It is only necessary to call this if the current platform is not a browser.\n *\n * @param document The object representing the global `document` in this environment.\n */\nfunction setDocument(document) {\n  DOCUMENT = document;\n}\n/**\n * Access the object that represents the `document` for this platform.\n *\n * Ivy calls this whenever it needs to access the `document` object.\n * For example to create the renderer or to do sanitization.\n */\nfunction getDocument() {\n  if (DOCUMENT !== undefined) {\n    return DOCUMENT;\n  } else if (typeof document !== 'undefined') {\n    return document;\n  }\n  throw new RuntimeError(210 /* RuntimeErrorCode.MISSING_DOCUMENT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The document object is not available in this context. Make sure the DOCUMENT injection token is provided.`);\n  // No \"document\" can be found. This should only happen if we are running ivy outside Angular and\n  // the current platform is not a browser. Since this is not a supported scenario at the moment\n  // this should not happen in Angular apps.\n  // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a\n  // public API.\n}\n\n/**\n * A DI token representing a string ID, used\n * primarily for prefixing application attributes and CSS styles when\n * {@link ViewEncapsulation#Emulated} is being used.\n *\n * The token is needed in cases when multiple applications are bootstrapped on a page\n * (for example, using `bootstrapApplication` calls). In this case, ensure that those applications\n * have different `APP_ID` value setup. For example:\n *\n * ```ts\n * bootstrapApplication(ComponentA, {\n *   providers: [\n *     { provide: APP_ID, useValue: 'app-a' },\n *     // ... other providers ...\n *   ]\n * });\n *\n * bootstrapApplication(ComponentB, {\n *   providers: [\n *     { provide: APP_ID, useValue: 'app-b' },\n *     // ... other providers ...\n *   ]\n * });\n * ```\n *\n * By default, when there is only one application bootstrapped, you don't need to provide the\n * `APP_ID` token (the `ng` will be used as an app ID).\n *\n * @publicApi\n */\nconst APP_ID = new InjectionToken(ngDevMode ? 'AppId' : '', {\n  providedIn: 'root',\n  factory: () => DEFAULT_APP_ID\n});\n/** Default value of the `APP_ID` token. */\nconst DEFAULT_APP_ID = 'ng';\n/**\n * A function that is executed when a platform is initialized.\n *\n * @deprecated from v19.0.0, use providePlatformInitializer instead\n *\n * @see {@link providePlatformInitializer}\n *\n * @publicApi\n */\nconst PLATFORM_INITIALIZER = new InjectionToken(ngDevMode ? 'Platform Initializer' : '');\n/**\n * A token that indicates an opaque platform ID.\n * @publicApi\n */\nconst PLATFORM_ID = new InjectionToken(ngDevMode ? 'Platform ID' : '', {\n  providedIn: 'platform',\n  factory: () => 'unknown' // set a default platform name, when none set explicitly\n});\n/**\n * A DI token that indicates the root directory of\n * the application\n * @publicApi\n * @deprecated\n */\nconst PACKAGE_ROOT_URL = new InjectionToken(ngDevMode ? 'Application Packages Root URL' : '');\n// We keep this token here, rather than the animations package, so that modules that only care\n// about which animations module is loaded (e.g. the CDK) can retrieve it without having to\n// include extra dependencies. See #44970 for more context.\n/**\n * A [DI token](api/core/InjectionToken) that indicates which animations\n * module has been loaded.\n * @publicApi\n */\nconst ANIMATION_MODULE_TYPE = new InjectionToken(ngDevMode ? 'AnimationModuleType' : '');\n// TODO(crisbeto): link to CSP guide here.\n/**\n * Token used to configure the [Content Security Policy](https://web.dev/strict-csp/) nonce that\n * Angular will apply when inserting inline styles. If not provided, Angular will look up its value\n * from the `ngCspNonce` attribute of the application root node.\n *\n * @publicApi\n */\nconst CSP_NONCE = new InjectionToken(ngDevMode ? 'CSP nonce' : '', {\n  providedIn: 'root',\n  factory: () => {\n    // Ideally we wouldn't have to use `querySelector` here since we know that the nonce will be on\n    // the root node, but because the token value is used in renderers, it has to be available\n    // *very* early in the bootstrapping process. This should be a fairly shallow search, because\n    // the app won't have been added to the DOM yet. Some approaches that were considered:\n    // 1. Find the root node through `ApplicationRef.components[i].location` - normally this would\n    // be enough for our purposes, but the token is injected very early so the `components` array\n    // isn't populated yet.\n    // 2. Find the root `LView` through the current `LView` - renderers are a prerequisite to\n    // creating the `LView`. This means that no `LView` will have been entered when this factory is\n    // invoked for the root component.\n    // 3. Have the token factory return `() => string` which is invoked when a nonce is requested -\n    // the slightly later execution does allow us to get an `LView` reference, but the fact that\n    // it is a function means that it could be executed at *any* time (including immediately) which\n    // may lead to weird bugs.\n    // 4. Have the `ComponentFactory` read the attribute and provide it to the injector under the\n    // hood - has the same problem as #1 and #2 in that the renderer is used to query for the root\n    // node and the nonce value needs to be available when the renderer is created.\n    return getDocument().body?.querySelector('[ngCspNonce]')?.getAttribute('ngCspNonce') || null;\n  }\n});\nconst IMAGE_CONFIG_DEFAULTS = {\n  breakpoints: [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n  placeholderResolution: 30,\n  disableImageSizeWarning: false,\n  disableImageLazyLoadWarning: false\n};\n/**\n * Injection token that configures the image optimized image functionality.\n * See {@link ImageConfig} for additional information about parameters that\n * can be used.\n *\n * @see {@link NgOptimizedImage}\n * @see {@link ImageConfig}\n * @publicApi\n */\nconst IMAGE_CONFIG = new InjectionToken(ngDevMode ? 'ImageConfig' : '', {\n  providedIn: 'root',\n  factory: () => IMAGE_CONFIG_DEFAULTS\n});\n\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```ts\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * @publicApi\n */\nfunction makeStateKey(key) {\n  return key;\n}\nfunction initTransferState() {\n  const transferState = new TransferState();\n  if (inject(PLATFORM_ID) === 'browser') {\n    transferState.store = retrieveTransferredState(getDocument(), inject(APP_ID));\n  }\n  return transferState;\n}\n/**\n * A key value store that is transferred from the application on the server side to the application\n * on the client side.\n *\n * The `TransferState` is available as an injectable token.\n * On the client, just inject this token using DI and use it, it will be lazily initialized.\n * On the server it's already included if `renderApplication` function is used. Otherwise, import\n * the `ServerTransferStateModule` module to make the `TransferState` available.\n *\n * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only\n * boolean, number, string, null and non-class objects will be serialized and deserialized in a\n * non-lossy manner.\n *\n * @publicApi\n */\nclass TransferState {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: TransferState,\n    providedIn: 'root',\n    factory: initTransferState\n  });\n  /** @internal */\n  store = {};\n  onSerializeCallbacks = {};\n  /**\n   * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n   */\n  get(key, defaultValue) {\n    return this.store[key] !== undefined ? this.store[key] : defaultValue;\n  }\n  /**\n   * Set the value corresponding to a key.\n   */\n  set(key, value) {\n    this.store[key] = value;\n  }\n  /**\n   * Remove a key from the store.\n   */\n  remove(key) {\n    delete this.store[key];\n  }\n  /**\n   * Test whether a key exists in the store.\n   */\n  hasKey(key) {\n    return this.store.hasOwnProperty(key);\n  }\n  /**\n   * Indicates whether the state is empty.\n   */\n  get isEmpty() {\n    return Object.keys(this.store).length === 0;\n  }\n  /**\n   * Register a callback to provide the value for a key when `toJson` is called.\n   */\n  onSerialize(key, callback) {\n    this.onSerializeCallbacks[key] = callback;\n  }\n  /**\n   * Serialize the current state of the store to JSON.\n   */\n  toJson() {\n    // Call the onSerialize callbacks and put those values into the store.\n    for (const key in this.onSerializeCallbacks) {\n      if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n        try {\n          this.store[key] = this.onSerializeCallbacks[key]();\n        } catch (e) {\n          console.warn('Exception in onSerialize callback: ', e);\n        }\n      }\n    }\n    // Escape script tag to avoid break out of <script> tag in serialized output.\n    // Encoding of `<` is the same behaviour as G3 script_builders.\n    return JSON.stringify(this.store).replace(/</g, '\\\\u003C');\n  }\n}\nfunction retrieveTransferredState(doc, appId) {\n  // Locate the script tag with the JSON data transferred from the server.\n  // The id of the script tag is set to the Angular appId + 'state'.\n  const script = doc.getElementById(appId + '-state');\n  if (script?.textContent) {\n    try {\n      // Avoid using any here as it triggers lint errors in google3 (any is not allowed).\n      // Decoding of `<` is done of the box by browsers and node.js, same behaviour as G3\n      // script_builders.\n      return JSON.parse(script.textContent);\n    } catch (e) {\n      console.warn('Exception while restoring TransferState for app ' + appId, e);\n    }\n  }\n  return {};\n}\n\n/** Encodes that the node lookup should start from the host node of this component. */\nconst REFERENCE_NODE_HOST = 'h';\n/** Encodes that the node lookup should start from the document body node. */\nconst REFERENCE_NODE_BODY = 'b';\n/**\n * Describes navigation steps that the runtime logic need to perform,\n * starting from a given (known) element.\n */\nvar NodeNavigationStep;\n(function (NodeNavigationStep) {\n  NodeNavigationStep[\"FirstChild\"] = \"f\";\n  NodeNavigationStep[\"NextSibling\"] = \"n\";\n})(NodeNavigationStep || (NodeNavigationStep = {}));\n/**\n * Keys within serialized view data structure to represent various\n * parts. See the `SerializedView` interface below for additional information.\n */\nconst ELEMENT_CONTAINERS = 'e';\nconst TEMPLATES = 't';\nconst CONTAINERS = 'c';\nconst MULTIPLIER = 'x';\nconst NUM_ROOT_NODES = 'r';\nconst TEMPLATE_ID = 'i'; // as it's also an \"id\"\nconst NODES = 'n';\nconst DISCONNECTED_NODES = 'd';\nconst I18N_DATA = 'l';\nconst DEFER_BLOCK_ID = 'di';\nconst DEFER_BLOCK_STATE$1 = 's';\nconst DEFER_PARENT_BLOCK_ID = 'p';\nconst DEFER_HYDRATE_TRIGGERS = 't';\nconst DEFER_PREFETCH_TRIGGERS = 'pt';\n\n/**\n * Internal token that specifies whether DOM reuse logic\n * during hydration is enabled.\n */\nconst IS_HYDRATION_DOM_REUSE_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_HYDRATION_DOM_REUSE_ENABLED' : '');\n// By default (in client rendering mode), we remove all the contents\n// of the host element and render an application after that.\nconst PRESERVE_HOST_CONTENT_DEFAULT = false;\n/**\n * Internal token that indicates whether host element content should be\n * retained during the bootstrap.\n */\nconst PRESERVE_HOST_CONTENT = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'PRESERVE_HOST_CONTENT' : '', {\n  providedIn: 'root',\n  factory: () => PRESERVE_HOST_CONTENT_DEFAULT\n});\n/**\n * Internal token that indicates whether hydration support for i18n\n * is enabled.\n */\nconst IS_I18N_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_I18N_HYDRATION_ENABLED' : '');\n/**\n * Internal token that indicates whether event replay support for SSR\n * is enabled.\n */\nconst IS_EVENT_REPLAY_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_EVENT_REPLAY_ENABLED' : '');\nconst EVENT_REPLAY_ENABLED_DEFAULT = false;\n/**\n * Internal token that indicates whether incremental hydration support\n * is enabled.\n */\nconst IS_INCREMENTAL_HYDRATION_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || !!ngDevMode ? 'IS_INCREMENTAL_HYDRATION_ENABLED' : '');\n/**\n * A map of DOM elements with `jsaction` attributes grouped by action names.\n */\nconst JSACTION_BLOCK_ELEMENT_MAP = new InjectionToken(ngDevMode ? 'JSACTION_BLOCK_ELEMENT_MAP' : '', {\n  providedIn: 'root',\n  factory: () => new Map()\n});\n\n/** Actions that are supported by the tracing framework. */\nvar TracingAction;\n(function (TracingAction) {\n  TracingAction[TracingAction[\"CHANGE_DETECTION\"] = 0] = \"CHANGE_DETECTION\";\n  TracingAction[TracingAction[\"AFTER_NEXT_RENDER\"] = 1] = \"AFTER_NEXT_RENDER\";\n})(TracingAction || (TracingAction = {}));\n/**\n * Injection token for a `TracingService`, optionally provided.\n */\nconst TracingService = new InjectionToken(ngDevMode ? 'TracingService' : '');\nconst markedFeatures = new Set();\n// tslint:disable:ban\n/**\n * A guarded `performance.mark` for feature marking.\n *\n * This method exists because while all supported browser and node.js version supported by Angular\n * support performance.mark API. This is not the case for other environments such as JSDOM and\n * Cloudflare workers.\n */\nfunction performanceMarkFeature(feature) {\n  if (markedFeatures.has(feature)) {\n    return;\n  }\n  markedFeatures.add(feature);\n  performance?.mark?.('mark_feature_usage', {\n    detail: {\n      feature\n    }\n  });\n}\n\n/**\n * Asserts that the current stack frame is not within a reactive context. Useful\n * to disallow certain code from running inside a reactive context (see {@link toSignal}).\n *\n * @param debugFn a reference to the function making the assertion (used for the error message).\n *\n * @publicApi\n */\nfunction assertNotInReactiveContext(debugFn, extraContext) {\n  // Taking a `Function` instead of a string name here prevents the un-minified name of the function\n  // from being retained in the bundle regardless of minification.\n  if (getActiveConsumer$1() !== null) {\n    throw new RuntimeError(-602 /* RuntimeErrorCode.ASSERTION_NOT_INSIDE_REACTIVE_CONTEXT */, ngDevMode && `${debugFn.name}() cannot be called from within a reactive context.${extraContext ? ` ${extraContext}` : ''}`);\n  }\n}\n\n/**\n * The phase to run an `afterRender` or `afterNextRender` callback in.\n *\n * Callbacks in the same phase run in the order they are registered. Phases run in the\n * following order after each render:\n *\n *   1. `AfterRenderPhase.EarlyRead`\n *   2. `AfterRenderPhase.Write`\n *   3. `AfterRenderPhase.MixedReadWrite`\n *   4. `AfterRenderPhase.Read`\n *\n * Angular is unable to verify or enforce that phases are used correctly, and instead\n * relies on each developer to follow the guidelines documented for each value and\n * carefully choose the appropriate one, refactoring their code if necessary. By doing\n * so, Angular is better able to minimize the performance degradation associated with\n * manual DOM access, ensuring the best experience for the end users of your application\n * or library.\n *\n * @deprecated Specify the phase for your callback to run in by passing a spec-object as the first\n *   parameter to `afterRender` or `afterNextRender` instead of a function.\n */\nvar AfterRenderPhase;\n(function (AfterRenderPhase) {\n  /**\n   * Use `AfterRenderPhase.EarlyRead` for callbacks that only need to **read** from the\n   * DOM before a subsequent `AfterRenderPhase.Write` callback, for example to perform\n   * custom layout that the browser doesn't natively support. Prefer the\n   * `AfterRenderPhase.EarlyRead` phase if reading can wait until after the write phase.\n   * **Never** write to the DOM in this phase.\n   *\n   * <div class=\"docs-alert docs-alert-important\">\n   *\n   * Using this value can degrade performance.\n   * Instead, prefer using built-in browser functionality when possible.\n   *\n   * </div>\n   */\n  AfterRenderPhase[AfterRenderPhase[\"EarlyRead\"] = 0] = \"EarlyRead\";\n  /**\n   * Use `AfterRenderPhase.Write` for callbacks that only **write** to the DOM. **Never**\n   * read from the DOM in this phase.\n   */\n  AfterRenderPhase[AfterRenderPhase[\"Write\"] = 1] = \"Write\";\n  /**\n   * Use `AfterRenderPhase.MixedReadWrite` for callbacks that read from or write to the\n   * DOM, that haven't been refactored to use a different phase. **Never** use this phase if\n   * it is possible to divide the work among the other phases instead.\n   *\n   * <div class=\"docs-alert docs-alert-critical\">\n   *\n   * Using this value can **significantly** degrade performance.\n   * Instead, prefer dividing work into the appropriate phase callbacks.\n   *\n   * </div>\n   */\n  AfterRenderPhase[AfterRenderPhase[\"MixedReadWrite\"] = 2] = \"MixedReadWrite\";\n  /**\n   * Use `AfterRenderPhase.Read` for callbacks that only **read** from the DOM. **Never**\n   * write to the DOM in this phase.\n   */\n  AfterRenderPhase[AfterRenderPhase[\"Read\"] = 3] = \"Read\";\n})(AfterRenderPhase || (AfterRenderPhase = {}));\nclass AfterRenderManager {\n  impl = null;\n  execute() {\n    this.impl?.execute();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: AfterRenderManager,\n    providedIn: 'root',\n    factory: () => new AfterRenderManager()\n  });\n}\nconst AFTER_RENDER_PHASES = /* @__PURE__ **/(() => [AfterRenderPhase.EarlyRead, AfterRenderPhase.Write, AfterRenderPhase.MixedReadWrite, AfterRenderPhase.Read])();\nclass AfterRenderImpl {\n  ngZone = inject(NgZone);\n  scheduler = inject(ChangeDetectionScheduler);\n  errorHandler = inject(ErrorHandler, {\n    optional: true\n  });\n  /** Current set of active sequences. */\n  sequences = new Set();\n  /** Tracks registrations made during the current set of executions. */\n  deferredRegistrations = new Set();\n  /** Whether the `AfterRenderManager` is currently executing hooks. */\n  executing = false;\n  constructor() {\n    // Inject the tracing service to make sure it's initialized.\n    inject(TracingService, {\n      optional: true\n    });\n  }\n  /**\n   * Run the sequence of phases of hooks, once through. As a result of executing some hooks, more\n   * might be scheduled.\n   */\n  execute() {\n    this.executing = true;\n    for (const phase of AFTER_RENDER_PHASES) {\n      for (const sequence of this.sequences) {\n        if (sequence.erroredOrDestroyed || !sequence.hooks[phase]) {\n          continue;\n        }\n        try {\n          sequence.pipelinedValue = this.ngZone.runOutsideAngular(() => this.maybeTrace(() => sequence.hooks[phase](sequence.pipelinedValue), sequence.snapshot));\n        } catch (err) {\n          sequence.erroredOrDestroyed = true;\n          this.errorHandler?.handleError(err);\n        }\n      }\n    }\n    this.executing = false;\n    // Cleanup step to reset sequence state and also collect one-shot sequences for removal.\n    for (const sequence of this.sequences) {\n      sequence.afterRun();\n      if (sequence.once) {\n        this.sequences.delete(sequence);\n        // Destroy the sequence so its on destroy callbacks can be cleaned up\n        // immediately, instead of waiting until the injector is destroyed.\n        sequence.destroy();\n      }\n    }\n    for (const sequence of this.deferredRegistrations) {\n      this.sequences.add(sequence);\n    }\n    if (this.deferredRegistrations.size > 0) {\n      this.scheduler.notify(8 /* NotificationSource.DeferredRenderHook */);\n    }\n    this.deferredRegistrations.clear();\n  }\n  register(sequence) {\n    if (!this.executing) {\n      this.sequences.add(sequence);\n      // Trigger an `ApplicationRef.tick()` if one is not already pending/running, because we have a\n      // new render hook that needs to run.\n      this.scheduler.notify(7 /* NotificationSource.RenderHook */);\n    } else {\n      this.deferredRegistrations.add(sequence);\n    }\n  }\n  unregister(sequence) {\n    if (this.executing && this.sequences.has(sequence)) {\n      // We can't remove an `AfterRenderSequence` in the middle of iteration.\n      // Instead, mark it as destroyed so it doesn't run any more, and mark it as one-shot so it'll\n      // be removed at the end of the current execution.\n      sequence.erroredOrDestroyed = true;\n      sequence.pipelinedValue = undefined;\n      sequence.once = true;\n    } else {\n      // It's safe to directly remove this sequence.\n      this.sequences.delete(sequence);\n      this.deferredRegistrations.delete(sequence);\n    }\n  }\n  maybeTrace(fn, snapshot) {\n    // Only trace the execution if the snapshot is defined.\n    return snapshot ? snapshot.run(TracingAction.AFTER_NEXT_RENDER, fn) : fn();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: AfterRenderImpl,\n    providedIn: 'root',\n    factory: () => new AfterRenderImpl()\n  });\n}\nclass AfterRenderSequence {\n  impl;\n  hooks;\n  once;\n  snapshot;\n  /**\n   * Whether this sequence errored or was destroyed during this execution, and hooks should no\n   * longer run for it.\n   */\n  erroredOrDestroyed = false;\n  /**\n   * The value returned by the last hook execution (if any), ready to be pipelined into the next\n   * one.\n   */\n  pipelinedValue = undefined;\n  unregisterOnDestroy;\n  constructor(impl, hooks, once, destroyRef, snapshot = null) {\n    this.impl = impl;\n    this.hooks = hooks;\n    this.once = once;\n    this.snapshot = snapshot;\n    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n  }\n  afterRun() {\n    this.erroredOrDestroyed = false;\n    this.pipelinedValue = undefined;\n    // Clear the tracing snapshot after the initial run. This snapshot only\n    // associates the initial run of the hook with the context that created it.\n    // Follow-up runs are independent of that initial context and have different\n    // triggers.\n    this.snapshot?.dispose();\n    this.snapshot = null;\n  }\n  destroy() {\n    this.impl.unregister(this);\n    this.unregisterOnDestroy?.();\n  }\n}\nfunction afterRender(callbackOrSpec, options) {\n  ngDevMode && assertNotInReactiveContext(afterRender, 'Call `afterRender` outside of a reactive context. For example, schedule the render ' + 'callback inside the component constructor`.');\n  !options?.injector && assertInInjectionContext(afterRender);\n  const injector = options?.injector ?? inject(Injector);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  performanceMarkFeature('NgAfterRender');\n  return afterRenderImpl(callbackOrSpec, injector, options, /* once */false);\n}\nfunction afterNextRender(callbackOrSpec, options) {\n  !options?.injector && assertInInjectionContext(afterNextRender);\n  const injector = options?.injector ?? inject(Injector);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  performanceMarkFeature('NgAfterNextRender');\n  return afterRenderImpl(callbackOrSpec, injector, options, /* once */true);\n}\nfunction getHooks(callbackOrSpec, phase) {\n  if (callbackOrSpec instanceof Function) {\n    const hooks = [undefined, undefined, undefined, undefined];\n    hooks[phase] = callbackOrSpec;\n    return hooks;\n  } else {\n    return [callbackOrSpec.earlyRead, callbackOrSpec.write, callbackOrSpec.mixedReadWrite, callbackOrSpec.read];\n  }\n}\n/**\n * Shared implementation for `afterRender` and `afterNextRender`.\n */\nfunction afterRenderImpl(callbackOrSpec, injector, options, once) {\n  const manager = injector.get(AfterRenderManager);\n  // Lazily initialize the handler implementation, if necessary. This is so that it can be\n  // tree-shaken if `afterRender` and `afterNextRender` aren't used.\n  manager.impl ??= injector.get(AfterRenderImpl);\n  const tracing = injector.get(TracingService, null, {\n    optional: true\n  });\n  const hooks = options?.phase ?? AfterRenderPhase.MixedReadWrite;\n  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  const sequence = new AfterRenderSequence(manager.impl, getHooks(callbackOrSpec, hooks), once, destroyRef, tracing?.snapshot(null));\n  manager.impl.register(sequence);\n  return sequence;\n}\n/** `AfterRenderRef` that does nothing. */\nconst NOOP_AFTER_RENDER_REF = {\n  destroy() {}\n};\n\n/**\n * Describes the state of defer block dependency loading.\n */\nvar DeferDependenciesLoadingState;\n(function (DeferDependenciesLoadingState) {\n  /** Initial state, dependency loading is not yet triggered */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"NOT_STARTED\"] = 0] = \"NOT_STARTED\";\n  /** Dependency loading is in progress */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"IN_PROGRESS\"] = 1] = \"IN_PROGRESS\";\n  /** Dependency loading has completed successfully */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"COMPLETE\"] = 2] = \"COMPLETE\";\n  /** Dependency loading has failed */\n  DeferDependenciesLoadingState[DeferDependenciesLoadingState[\"FAILED\"] = 3] = \"FAILED\";\n})(DeferDependenciesLoadingState || (DeferDependenciesLoadingState = {}));\n/** Slot index where `minimum` parameter value is stored. */\nconst MINIMUM_SLOT = 0;\n/** Slot index where `after` parameter value is stored. */\nconst LOADING_AFTER_SLOT = 1;\n/**\n * Describes the current state of this defer block instance.\n *\n * @publicApi\n */\nvar DeferBlockState;\n(function (DeferBlockState) {\n  /** The placeholder block content is rendered */\n  DeferBlockState[DeferBlockState[\"Placeholder\"] = 0] = \"Placeholder\";\n  /** The loading block content is rendered */\n  DeferBlockState[DeferBlockState[\"Loading\"] = 1] = \"Loading\";\n  /** The main content block content is rendered */\n  DeferBlockState[DeferBlockState[\"Complete\"] = 2] = \"Complete\";\n  /** The error block content is rendered */\n  DeferBlockState[DeferBlockState[\"Error\"] = 3] = \"Error\";\n})(DeferBlockState || (DeferBlockState = {}));\n/**\n * Describes the initial state of this defer block instance.\n *\n * Note: this state is internal only and *must* be represented\n * with a number lower than any value in the `DeferBlockState` enum.\n */\nvar DeferBlockInternalState;\n(function (DeferBlockInternalState) {\n  /** Initial state. Nothing is rendered yet. */\n  DeferBlockInternalState[DeferBlockInternalState[\"Initial\"] = -1] = \"Initial\";\n})(DeferBlockInternalState || (DeferBlockInternalState = {}));\nconst NEXT_DEFER_BLOCK_STATE = 0;\n// Note: it's *important* to keep the state in this slot, because this slot\n// is used by runtime logic to differentiate between LViews, LContainers and\n// other types (see `isLView` and `isLContainer` functions). In case of defer\n// blocks, this slot would always be a number.\nconst DEFER_BLOCK_STATE = 1;\nconst STATE_IS_FROZEN_UNTIL = 2;\nconst LOADING_AFTER_CLEANUP_FN = 3;\nconst TRIGGER_CLEANUP_FNS = 4;\nconst PREFETCH_TRIGGER_CLEANUP_FNS = 5;\nconst SSR_UNIQUE_ID = 6;\nconst SSR_BLOCK_STATE = 7;\nconst ON_COMPLETE_FNS = 8;\nconst HYDRATE_TRIGGER_CLEANUP_FNS = 9;\n/**\n * Options for configuring defer blocks behavior.\n * @publicApi\n */\nvar DeferBlockBehavior;\n(function (DeferBlockBehavior) {\n  /**\n   * Manual triggering mode for defer blocks. Provides control over when defer blocks render\n   * and which state they render.\n   */\n  DeferBlockBehavior[DeferBlockBehavior[\"Manual\"] = 0] = \"Manual\";\n  /**\n   * Playthrough mode for defer blocks. This mode behaves like defer blocks would in a browser.\n   * This is the default behavior in test environments.\n   */\n  DeferBlockBehavior[DeferBlockBehavior[\"Playthrough\"] = 1] = \"Playthrough\";\n})(DeferBlockBehavior || (DeferBlockBehavior = {}));\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Registers a cleanup function associated with a prefetching trigger\n * or a regular trigger of a defer block.\n */\nfunction storeTriggerCleanupFn(type, lDetails, cleanupFn) {\n  const key = getCleanupFnKeyByType(type);\n  if (lDetails[key] === null) {\n    lDetails[key] = [];\n  }\n  lDetails[key].push(cleanupFn);\n}\n/**\n * Invokes registered cleanup functions either for prefetch or for regular triggers.\n */\nfunction invokeTriggerCleanupFns(type, lDetails) {\n  const key = getCleanupFnKeyByType(type);\n  const cleanupFns = lDetails[key];\n  if (cleanupFns !== null) {\n    for (const cleanupFn of cleanupFns) {\n      cleanupFn();\n    }\n    lDetails[key] = null;\n  }\n}\n/**\n * Invokes registered cleanup functions for prefetch, hydrate, and regular triggers.\n */\nfunction invokeAllTriggerCleanupFns(lDetails) {\n  invokeTriggerCleanupFns(1 /* TriggerType.Prefetch */, lDetails);\n  invokeTriggerCleanupFns(0 /* TriggerType.Regular */, lDetails);\n  invokeTriggerCleanupFns(2 /* TriggerType.Hydrate */, lDetails);\n}\nfunction getCleanupFnKeyByType(type) {\n  let key = TRIGGER_CLEANUP_FNS;\n  if (type === 1 /* TriggerType.Prefetch */) {\n    key = PREFETCH_TRIGGER_CLEANUP_FNS;\n  } else if (type === 2 /* TriggerType.Hydrate */) {\n    key = HYDRATE_TRIGGER_CLEANUP_FNS;\n  }\n  return key;\n}\n\n/**\n * Calculates a data slot index for defer block info (either static or\n * instance-specific), given an index of a defer instruction.\n */\nfunction getDeferBlockDataIndex(deferBlockIndex) {\n  // Instance state is located at the *next* position\n  // after the defer block slot in an LView or TView.data.\n  return deferBlockIndex + 1;\n}\n/** Retrieves a defer block state from an LView, given a TNode that represents a block. */\nfunction getLDeferBlockDetails(lView, tNode) {\n  const tView = lView[TVIEW];\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  return lView[slotIndex];\n}\n/** Stores a defer block instance state in LView. */\nfunction setLDeferBlockDetails(lView, deferBlockIndex, lDetails) {\n  const tView = lView[TVIEW];\n  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  lView[slotIndex] = lDetails;\n}\n/** Retrieves static info about a defer block, given a TView and a TNode that represents a block. */\nfunction getTDeferBlockDetails(tView, tNode) {\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  return tView.data[slotIndex];\n}\n/** Stores a defer block static info in `TView.data`. */\nfunction setTDeferBlockDetails(tView, deferBlockIndex, deferBlockConfig) {\n  const slotIndex = getDeferBlockDataIndex(deferBlockIndex);\n  ngDevMode && assertIndexInDeclRange(tView, slotIndex);\n  tView.data[slotIndex] = deferBlockConfig;\n}\nfunction getTemplateIndexForState(newState, hostLView, tNode) {\n  const tView = hostLView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  switch (newState) {\n    case DeferBlockState.Complete:\n      return tDetails.primaryTmplIndex;\n    case DeferBlockState.Loading:\n      return tDetails.loadingTmplIndex;\n    case DeferBlockState.Error:\n      return tDetails.errorTmplIndex;\n    case DeferBlockState.Placeholder:\n      return tDetails.placeholderTmplIndex;\n    default:\n      ngDevMode && throwError(`Unexpected defer block state: ${newState}`);\n      return null;\n  }\n}\n/**\n * Returns a minimum amount of time that a given state should be rendered for,\n * taking into account `minimum` parameter value. If the `minimum` value is\n * not specified - returns `null`.\n */\nfunction getMinimumDurationForState(tDetails, currentState) {\n  if (currentState === DeferBlockState.Placeholder) {\n    return tDetails.placeholderBlockConfig?.[MINIMUM_SLOT] ?? null;\n  } else if (currentState === DeferBlockState.Loading) {\n    return tDetails.loadingBlockConfig?.[MINIMUM_SLOT] ?? null;\n  }\n  return null;\n}\n/** Retrieves the value of the `after` parameter on the @loading block. */\nfunction getLoadingBlockAfter(tDetails) {\n  return tDetails.loadingBlockConfig?.[LOADING_AFTER_SLOT] ?? null;\n}\n/**\n * Adds downloaded dependencies into a directive or a pipe registry,\n * making sure that a dependency doesn't yet exist in the registry.\n */\nfunction addDepsToRegistry(currentDeps, newDeps) {\n  if (!currentDeps || currentDeps.length === 0) {\n    return newDeps;\n  }\n  const currentDepSet = new Set(currentDeps);\n  for (const dep of newDeps) {\n    currentDepSet.add(dep);\n  }\n  // If `currentDeps` is the same length, there were no new deps and can\n  // return the original array.\n  return currentDeps.length === currentDepSet.size ? currentDeps : Array.from(currentDepSet);\n}\n/** Retrieves a TNode that represents main content of a defer block. */\nfunction getPrimaryBlockTNode(tView, tDetails) {\n  const adjustedIndex = tDetails.primaryTmplIndex + HEADER_OFFSET;\n  return getTNode(tView, adjustedIndex);\n}\n/**\n * Asserts whether all dependencies for a defer block are loaded.\n * Always run this function (in dev mode) before rendering a defer\n * block in completed state.\n */\nfunction assertDeferredDependenciesLoaded(tDetails) {\n  assertEqual(tDetails.loadingState, DeferDependenciesLoadingState.COMPLETE, 'Expecting all deferred dependencies to be loaded.');\n}\n/**\n * Determines if a given value matches the expected structure of a defer block\n *\n * We can safely rely on the primaryTmplIndex because every defer block requires\n * that a primary template exists. All the other template options are optional.\n */\nfunction isTDeferBlockDetails(value) {\n  return value !== null && typeof value === 'object' && typeof value.primaryTmplIndex === 'number';\n}\n/**\n * Whether a given TNode represents a defer block.\n */\nfunction isDeferBlock(tView, tNode) {\n  let tDetails = null;\n  const slotIndex = getDeferBlockDataIndex(tNode.index);\n  // Check if a slot index is in the reasonable range.\n  // Note: we do `-1` on the right border, since defer block details are stored\n  // in the `n+1` slot, see `getDeferBlockDataIndex` for more info.\n  if (HEADER_OFFSET < slotIndex && slotIndex < tView.bindingStartIndex) {\n    tDetails = getTDeferBlockDetails(tView, tNode);\n  }\n  return !!tDetails && isTDeferBlockDetails(tDetails);\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/** Configuration object used to register passive and capturing events. */\nconst eventListenerOptions = {\n  passive: true,\n  capture: true\n};\n/** Keeps track of the currently-registered `on hover` triggers. */\nconst hoverTriggers = new WeakMap();\n/** Keeps track of the currently-registered `on interaction` triggers. */\nconst interactionTriggers = new WeakMap();\n/** Currently-registered `viewport` triggers. */\nconst viewportTriggers = new WeakMap();\n/** Names of the events considered as interaction events. */\nconst interactionEventNames = ['click', 'keydown'];\n/** Names of the events considered as hover events. */\nconst hoverEventNames = ['mouseenter', 'mouseover', 'focusin'];\n/** `IntersectionObserver` used to observe `viewport` triggers. */\nlet intersectionObserver = null;\n/** Number of elements currently observed with `viewport` triggers. */\nlet observedViewportElements = 0;\n/** Object keeping track of registered callbacks for a deferred block trigger. */\nclass DeferEventEntry {\n  callbacks = new Set();\n  listener = () => {\n    for (const callback of this.callbacks) {\n      callback();\n    }\n  };\n}\n/**\n * Registers an interaction trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger is interacted with.\n */\nfunction onInteraction(trigger, callback) {\n  let entry = interactionTriggers.get(trigger);\n  // If this is the first entry for this element, add the listeners.\n  if (!entry) {\n    // Note that managing events centrally like this lends itself well to using global\n    // event delegation. It currently does delegation at the element level, rather than the\n    // document level, because:\n    // 1. Global delegation is the most effective when there are a lot of events being registered\n    // at the same time. Deferred blocks are unlikely to be used in such a way.\n    // 2. Matching events to their target isn't free. For each `click` and `keydown` event we\n    // would have look through all the triggers and check if the target either is the element\n    // itself or it's contained within the element. Given that `click` and `keydown` are some\n    // of the most common events, this may end up introducing a lot of runtime overhead.\n    // 3. We're still registering only two events per element, no matter how many deferred blocks\n    // are referencing it.\n    entry = new DeferEventEntry();\n    interactionTriggers.set(trigger, entry);\n    for (const name of interactionEventNames) {\n      trigger.addEventListener(name, entry.listener, eventListenerOptions);\n    }\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    const {\n      callbacks,\n      listener\n    } = entry;\n    callbacks.delete(callback);\n    if (callbacks.size === 0) {\n      interactionTriggers.delete(trigger);\n      for (const name of interactionEventNames) {\n        trigger.removeEventListener(name, listener, eventListenerOptions);\n      }\n    }\n  };\n}\n/**\n * Registers a hover trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger is hovered over.\n */\nfunction onHover(trigger, callback) {\n  let entry = hoverTriggers.get(trigger);\n  // If this is the first entry for this element, add the listener.\n  if (!entry) {\n    entry = new DeferEventEntry();\n    hoverTriggers.set(trigger, entry);\n    for (const name of hoverEventNames) {\n      trigger.addEventListener(name, entry.listener, eventListenerOptions);\n    }\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    const {\n      callbacks,\n      listener\n    } = entry;\n    callbacks.delete(callback);\n    if (callbacks.size === 0) {\n      for (const name of hoverEventNames) {\n        trigger.removeEventListener(name, listener, eventListenerOptions);\n      }\n      hoverTriggers.delete(trigger);\n    }\n  };\n}\n/**\n * Registers a viewport trigger.\n * @param trigger Element that is the trigger.\n * @param callback Callback to be invoked when the trigger comes into the viewport.\n * @param injector Injector that can be used by the trigger to resolve DI tokens.\n */\nfunction onViewport(trigger, callback, injector) {\n  const ngZone = injector.get(NgZone);\n  let entry = viewportTriggers.get(trigger);\n  intersectionObserver = intersectionObserver || ngZone.runOutsideAngular(() => {\n    return new IntersectionObserver(entries => {\n      for (const current of entries) {\n        // Only invoke the callbacks if the specific element is intersecting.\n        if (current.isIntersecting && viewportTriggers.has(current.target)) {\n          ngZone.run(viewportTriggers.get(current.target).listener);\n        }\n      }\n    });\n  });\n  if (!entry) {\n    entry = new DeferEventEntry();\n    ngZone.runOutsideAngular(() => intersectionObserver.observe(trigger));\n    viewportTriggers.set(trigger, entry);\n    observedViewportElements++;\n  }\n  entry.callbacks.add(callback);\n  return () => {\n    // It's possible that a different cleanup callback fully removed this element already.\n    if (!viewportTriggers.has(trigger)) {\n      return;\n    }\n    entry.callbacks.delete(callback);\n    if (entry.callbacks.size === 0) {\n      intersectionObserver?.unobserve(trigger);\n      viewportTriggers.delete(trigger);\n      observedViewportElements--;\n    }\n    if (observedViewportElements === 0) {\n      intersectionObserver?.disconnect();\n      intersectionObserver = null;\n    }\n  };\n}\n/**\n * Helper function to get the LView in which a deferred block's trigger is rendered.\n * @param deferredHostLView LView in which the deferred block is defined.\n * @param deferredTNode TNode defining the deferred block.\n * @param walkUpTimes Number of times to go up in the view hierarchy to find the trigger's view.\n *   A negative value means that the trigger is inside the block's placeholder, while an undefined\n *   value means that the trigger is in the same LView as the deferred block.\n */\nfunction getTriggerLView(deferredHostLView, deferredTNode, walkUpTimes) {\n  // The trigger is in the same view, we don't need to traverse.\n  if (walkUpTimes == null) {\n    return deferredHostLView;\n  }\n  // A positive value or zero means that the trigger is in a parent view.\n  if (walkUpTimes >= 0) {\n    return walkUpViews(walkUpTimes, deferredHostLView);\n  }\n  // If the value is negative, it means that the trigger is inside the placeholder.\n  const deferredContainer = deferredHostLView[deferredTNode.index];\n  ngDevMode && assertLContainer(deferredContainer);\n  const triggerLView = deferredContainer[CONTAINER_HEADER_OFFSET] ?? null;\n  // We need to null check, because the placeholder might not have been rendered yet.\n  if (ngDevMode && triggerLView !== null) {\n    const lDetails = getLDeferBlockDetails(deferredHostLView, deferredTNode);\n    const renderedState = lDetails[DEFER_BLOCK_STATE];\n    assertEqual(renderedState, DeferBlockState.Placeholder, 'Expected a placeholder to be rendered in this defer block.');\n    assertLView(triggerLView);\n  }\n  return triggerLView;\n}\n/**\n * Gets the element that a deferred block's trigger is pointing to.\n * @param triggerLView LView in which the trigger is defined.\n * @param triggerIndex Index at which the trigger element should've been rendered.\n */\nfunction getTriggerElement(triggerLView, triggerIndex) {\n  const element = getNativeByIndex(HEADER_OFFSET + triggerIndex, triggerLView);\n  ngDevMode && assertElement(element);\n  return element;\n}\n/**\n * Registers a DOM-node based trigger.\n * @param initialLView LView in which the defer block is rendered.\n * @param tNode TNode representing the defer block.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to go up/down in the view hierarchy to find the trigger.\n * @param registerFn Function that will register the DOM events.\n * @param callback Callback to be invoked when the trigger receives the event that should render\n *     the deferred block.\n * @param type Trigger type to distinguish between regular and prefetch triggers.\n */\nfunction registerDomTrigger(initialLView, tNode, triggerIndex, walkUpTimes, registerFn, callback, type) {\n  const injector = initialLView[INJECTOR];\n  const zone = injector.get(NgZone);\n  function pollDomTrigger() {\n    // If the initial view was destroyed, we don't need to do anything.\n    if (isDestroyed(initialLView)) {\n      return;\n    }\n    const lDetails = getLDeferBlockDetails(initialLView, tNode);\n    const renderedState = lDetails[DEFER_BLOCK_STATE];\n    // If the block was loaded before the trigger was resolved, we don't need to do anything.\n    if (renderedState !== DeferBlockInternalState.Initial && renderedState !== DeferBlockState.Placeholder) {\n      return;\n    }\n    const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);\n    // Keep polling until we resolve the trigger's LView.\n    if (!triggerLView) {\n      afterNextRender({\n        read: pollDomTrigger\n      }, {\n        injector\n      });\n      return;\n    }\n    // It's possible that the trigger's view was destroyed before we resolved the trigger element.\n    if (isDestroyed(triggerLView)) {\n      return;\n    }\n    const element = getTriggerElement(triggerLView, triggerIndex);\n    const cleanup = registerFn(element, () => {\n      // `pollDomTrigger` runs outside the zone (because of `afterNextRender`) and registers its\n      // listeners outside the zone, so we jump back into the zone prior to running the callback.\n      zone.run(() => {\n        if (initialLView !== triggerLView) {\n          removeLViewOnDestroy(triggerLView, cleanup);\n        }\n        callback();\n      });\n    }, injector);\n    // The trigger and deferred block might be in different LViews.\n    // For the main LView the cleanup would happen as a part of\n    // `storeTriggerCleanupFn` logic. For trigger LView we register\n    // a cleanup function there to remove event handlers in case an\n    // LView gets destroyed before a trigger is invoked.\n    if (initialLView !== triggerLView) {\n      storeLViewOnDestroy(triggerLView, cleanup);\n    }\n    storeTriggerCleanupFn(type, lDetails, cleanup);\n  }\n  // Begin polling for the trigger.\n  afterNextRender({\n    read: pollDomTrigger\n  }, {\n    injector\n  });\n}\nconst DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb';\nfunction invokeRegisteredDelegationListeners(event) {\n  const handlerFns = event.currentTarget?.__jsaction_fns?.get(event.type);\n  if (!handlerFns) {\n    return;\n  }\n  for (const handler of handlerFns) {\n    handler(event);\n  }\n}\nfunction setJSActionAttributes(nativeElement, eventTypes, parentDeferBlockId = null) {\n  // jsaction attributes specifically should be applied to elements and not comment nodes.\n  // Comment nodes also have no setAttribute function. So this avoids errors.\n  if (eventTypes.length === 0 || nativeElement.nodeType !== Node.ELEMENT_NODE) {\n    return;\n  }\n  const existingAttr = nativeElement.getAttribute(Attribute$1.JSACTION);\n  // we dedupe cases where hydrate triggers are used as it's possible that\n  // someone may have added an event binding to the root node that matches what the\n  // hydrate trigger adds.\n  const parts = eventTypes.reduce((prev, curr) => {\n    // if there is no existing attribute OR it's not in the existing one, we need to add it\n    return (existingAttr?.indexOf(curr) ?? -1) === -1 ? prev + curr + ':;' : prev;\n  }, '');\n  //  This is required to be a module accessor to appease security tests on setAttribute.\n  nativeElement.setAttribute(Attribute$1.JSACTION, `${existingAttr ?? ''}${parts}`);\n  const blockName = parentDeferBlockId ?? '';\n  if (blockName !== '' && parts.length > 0) {\n    nativeElement.setAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE, blockName);\n  }\n}\nconst sharedStashFunction = (rEl, eventType, listenerFn) => {\n  const el = rEl;\n  const eventListenerMap = el.__jsaction_fns ?? new Map();\n  const eventListeners = eventListenerMap.get(eventType) ?? [];\n  eventListeners.push(listenerFn);\n  eventListenerMap.set(eventType, eventListeners);\n  el.__jsaction_fns = eventListenerMap;\n};\nconst sharedMapFunction = (rEl, jsActionMap) => {\n  let blockName = rEl.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE) ?? '';\n  const el = rEl;\n  const blockSet = jsActionMap.get(blockName) ?? new Set();\n  if (!blockSet.has(el)) {\n    blockSet.add(el);\n  }\n  jsActionMap.set(blockName, blockSet);\n};\nfunction removeListenersFromBlocks(blockNames, jsActionMap) {\n  if (blockNames.length > 0) {\n    let blockList = [];\n    for (let blockName of blockNames) {\n      if (jsActionMap.has(blockName)) {\n        blockList = [...blockList, ...jsActionMap.get(blockName)];\n      }\n    }\n    const replayList = new Set(blockList);\n    replayList.forEach(removeListeners);\n  }\n}\nconst removeListeners = el => {\n  el.removeAttribute(Attribute$1.JSACTION);\n  el.removeAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n  el.__jsaction_fns = undefined;\n};\nconst JSACTION_EVENT_CONTRACT = new InjectionToken(ngDevMode ? 'EVENT_CONTRACT_DETAILS' : '', {\n  providedIn: 'root',\n  factory: () => ({})\n});\nfunction invokeListeners(event, currentTarget) {\n  const handlerFns = currentTarget?.__jsaction_fns?.get(event.type);\n  if (!handlerFns) {\n    return;\n  }\n  for (const handler of handlerFns) {\n    handler(event);\n  }\n}\n\n/**\n * An internal injection token to reference `DehydratedBlockRegistry` implementation\n * in a tree-shakable way.\n */\nconst DEHYDRATED_BLOCK_REGISTRY = new InjectionToken(ngDevMode ? 'DEHYDRATED_BLOCK_REGISTRY' : '');\n/**\n * The DehydratedBlockRegistry is used for incremental hydration purposes. It keeps\n * track of the Defer Blocks that need hydration so we can effectively\n * navigate up to the top dehydrated defer block and fire appropriate cleanup\n * functions post hydration.\n */\nclass DehydratedBlockRegistry {\n  registry = new Map();\n  cleanupFns = new Map();\n  jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n  contract = inject(JSACTION_EVENT_CONTRACT);\n  add(blockId, info) {\n    this.registry.set(blockId, info);\n  }\n  get(blockId) {\n    return this.registry.get(blockId) ?? null;\n  }\n  has(blockId) {\n    return this.registry.has(blockId);\n  }\n  cleanup(hydratedBlocks) {\n    removeListenersFromBlocks(hydratedBlocks, this.jsActionMap);\n    for (let blockId of hydratedBlocks) {\n      this.registry.delete(blockId);\n      this.jsActionMap.delete(blockId);\n      this.invokeTriggerCleanupFns(blockId);\n      this.hydrating.delete(blockId);\n    }\n    if (this.size === 0) {\n      this.contract.instance?.cleanUp();\n    }\n  }\n  get size() {\n    return this.registry.size;\n  }\n  // we have to leave the lowest block Id in the registry\n  // unless that block has no children\n  addCleanupFn(blockId, fn) {\n    let cleanupFunctions = [];\n    if (this.cleanupFns.has(blockId)) {\n      cleanupFunctions = this.cleanupFns.get(blockId);\n    }\n    cleanupFunctions.push(fn);\n    this.cleanupFns.set(blockId, cleanupFunctions);\n  }\n  invokeTriggerCleanupFns(blockId) {\n    const fns = this.cleanupFns.get(blockId) ?? [];\n    for (let fn of fns) {\n      fn();\n    }\n    this.cleanupFns.delete(blockId);\n  }\n  // Blocks that are being hydrated.\n  hydrating = new Map();\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: DehydratedBlockRegistry,\n    providedIn: null,\n    factory: () => new DehydratedBlockRegistry()\n  });\n}\n\n/**\n * The name of the key used in the TransferState collection,\n * where hydration information is located.\n */\nconst TRANSFER_STATE_TOKEN_ID = '__nghData__';\n/**\n * Lookup key used to reference DOM hydration data (ngh) in `TransferState`.\n */\nconst NGH_DATA_KEY = makeStateKey(TRANSFER_STATE_TOKEN_ID);\n/**\n * The name of the key used in the TransferState collection,\n * where serialized defer block information is located.\n */\nconst TRANSFER_STATE_DEFER_BLOCKS_INFO = '__nghDeferData__';\n/**\n * Lookup key used to retrieve defer block datain `TransferState`.\n */\nconst NGH_DEFER_BLOCKS_KEY = makeStateKey(TRANSFER_STATE_DEFER_BLOCKS_INFO);\n/**\n * The name of the attribute that would be added to host component\n * nodes and contain a reference to a particular slot in transferred\n * state that contains the necessary hydration info for this component.\n */\nconst NGH_ATTR_NAME = 'ngh';\n/**\n * Marker used in a comment node to ensure hydration content integrity\n */\nconst SSR_CONTENT_INTEGRITY_MARKER = 'nghm';\n/**\n * Reference to a function that reads `ngh` attribute value from a given RNode\n * and retrieves hydration information from the TransferState using that value\n * as an index. Returns `null` by default, when hydration is not enabled.\n *\n * @param rNode Component's host element.\n * @param injector Injector that this component has access to.\n * @param isRootView Specifies whether we trying to read hydration info for the root view.\n */\nlet _retrieveHydrationInfoImpl = () => null;\nfunction retrieveHydrationInfoImpl(rNode, injector, isRootView = false) {\n  let nghAttrValue = rNode.getAttribute(NGH_ATTR_NAME);\n  if (nghAttrValue == null) return null;\n  // For cases when a root component also acts as an anchor node for a ViewContainerRef\n  // (for example, when ViewContainerRef is injected in a root component), there is a need\n  // to serialize information about the component itself, as well as an LContainer that\n  // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:\n  // (1) hydration info for the root component itself and (2) hydration info for the\n  // ViewContainerRef instance (an LContainer). Each piece of information is included into\n  // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.\n  // Since we only have 1 root element, we encode both bits of info into a single string:\n  // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view\n  // and 25 is the `ngh` for a root view which holds LContainer).\n  const [componentViewNgh, rootViewNgh] = nghAttrValue.split('|');\n  nghAttrValue = isRootView ? rootViewNgh : componentViewNgh;\n  if (!nghAttrValue) return null;\n  // We've read one of the ngh ids, keep the remaining one, so that\n  // we can set it back on the DOM element.\n  const rootNgh = rootViewNgh ? `|${rootViewNgh}` : '';\n  const remainingNgh = isRootView ? componentViewNgh : rootNgh;\n  let data = {};\n  // An element might have an empty `ngh` attribute value (e.g. `<comp ngh=\"\" />`),\n  // which means that no special annotations are required. Do not attempt to read\n  // from the TransferState in this case.\n  if (nghAttrValue !== '') {\n    const transferState = injector.get(TransferState, null, {\n      optional: true\n    });\n    if (transferState !== null) {\n      const nghData = transferState.get(NGH_DATA_KEY, []);\n      // The nghAttrValue is always a number referencing an index\n      // in the hydration TransferState data.\n      data = nghData[Number(nghAttrValue)];\n      // If the `ngh` attribute exists and has a non-empty value,\n      // the hydration info *must* be present in the TransferState.\n      // If there is no data for some reasons, this is an error.\n      ngDevMode && assertDefined(data, 'Unable to retrieve hydration info from the TransferState.');\n    }\n  }\n  const dehydratedView = {\n    data,\n    firstChild: rNode.firstChild ?? null\n  };\n  if (isRootView) {\n    // If there is hydration info present for the root view, it means that there was\n    // a ViewContainerRef injected in the root component. The root component host element\n    // acted as an anchor node in this scenario. As a result, the DOM nodes that represent\n    // embedded views in this ViewContainerRef are located as siblings to the host node,\n    // i.e. `<app-root /><#VIEW1><#VIEW2>...<!--container-->`. In this case, the current\n    // node becomes the first child of this root view and the next sibling is the first\n    // element in the DOM segment.\n    dehydratedView.firstChild = rNode;\n    // We use `0` here, since this is the slot (right after the HEADER_OFFSET)\n    // where a component LView or an LContainer is located in a root LView.\n    setSegmentHead(dehydratedView, 0, rNode.nextSibling);\n  }\n  if (remainingNgh) {\n    // If we have only used one of the ngh ids, store the remaining one\n    // back on this RNode.\n    rNode.setAttribute(NGH_ATTR_NAME, remainingNgh);\n  } else {\n    // The `ngh` attribute is cleared from the DOM node now\n    // that the data has been retrieved for all indices.\n    rNode.removeAttribute(NGH_ATTR_NAME);\n  }\n  // Note: don't check whether this node was claimed for hydration,\n  // because this node might've been previously claimed while processing\n  // template instructions.\n  ngDevMode && markRNodeAsClaimedByHydration(rNode, /* checkIfAlreadyClaimed */false);\n  ngDevMode && ngDevMode.hydratedComponents++;\n  return dehydratedView;\n}\n/**\n * Sets the implementation for the `retrieveHydrationInfo` function.\n */\nfunction enableRetrieveHydrationInfoImpl() {\n  _retrieveHydrationInfoImpl = retrieveHydrationInfoImpl;\n}\n/**\n * Retrieves hydration info by reading the value from the `ngh` attribute\n * and accessing a corresponding slot in TransferState storage.\n */\nfunction retrieveHydrationInfo(rNode, injector, isRootView = false) {\n  return _retrieveHydrationInfoImpl(rNode, injector, isRootView);\n}\n/**\n * Retrieves the necessary object from a given ViewRef to serialize:\n *  - an LView for component views\n *  - an LContainer for cases when component acts as a ViewContainerRef anchor\n *  - `null` in case of an embedded view\n */\nfunction getLNodeForHydration(viewRef) {\n  // Reading an internal field from `ViewRef` instance.\n  let lView = viewRef._lView;\n  const tView = lView[TVIEW];\n  // A registered ViewRef might represent an instance of an\n  // embedded view, in which case we do not need to annotate it.\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    return null;\n  }\n  // Check if it's a root view and if so, retrieve component's\n  // LView from the first slot after the header.\n  if (isRootView(lView)) {\n    lView = lView[HEADER_OFFSET];\n  }\n  return lView;\n}\nfunction getTextNodeContent(node) {\n  return node.textContent?.replace(/\\s/gm, '');\n}\n/**\n * Restores text nodes and separators into the DOM that were lost during SSR\n * serialization. The hydration process replaces empty text nodes and text\n * nodes that are immediately adjacent to other text nodes with comment nodes\n * that this method filters on to restore those missing nodes that the\n * hydration process is expecting to be present.\n *\n * @param node The app's root HTML Element\n */\nfunction processTextNodeMarkersBeforeHydration(node) {\n  const doc = getDocument();\n  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n    acceptNode(node) {\n      const content = getTextNodeContent(node);\n      const isTextNodeMarker = content === \"ngetn\" /* TextNodeMarker.EmptyNode */ || content === \"ngtns\" /* TextNodeMarker.Separator */;\n      return isTextNodeMarker ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n    }\n  });\n  let currentNode;\n  // We cannot modify the DOM while using the commentIterator,\n  // because it throws off the iterator state.\n  // So we collect all marker nodes first and then follow up with\n  // applying the changes to the DOM: either inserting an empty node\n  // or just removing the marker if it was used as a separator.\n  const nodes = [];\n  while (currentNode = commentNodesIterator.nextNode()) {\n    nodes.push(currentNode);\n  }\n  for (const node of nodes) {\n    if (node.textContent === \"ngetn\" /* TextNodeMarker.EmptyNode */) {\n      node.replaceWith(doc.createTextNode(''));\n    } else {\n      node.remove();\n    }\n  }\n}\n/**\n * Internal type that represents a claimed node.\n * Only used in dev mode.\n */\nvar HydrationStatus;\n(function (HydrationStatus) {\n  HydrationStatus[\"Hydrated\"] = \"hydrated\";\n  HydrationStatus[\"Skipped\"] = \"skipped\";\n  HydrationStatus[\"Mismatched\"] = \"mismatched\";\n})(HydrationStatus || (HydrationStatus = {}));\nconst HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';\nfunction patchHydrationInfo(node, info) {\n  node[HYDRATION_INFO_KEY] = info;\n}\nfunction readHydrationInfo(node) {\n  return node[HYDRATION_INFO_KEY] ?? null;\n}\n/**\n * Marks a node as \"claimed\" by hydration process.\n * This is needed to make assessments in tests whether\n * the hydration process handled all nodes.\n */\nfunction markRNodeAsClaimedByHydration(node, checkIfAlreadyClaimed = true) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsClaimedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  if (checkIfAlreadyClaimed && isRNodeClaimedForHydration(node)) {\n    throw new Error('Trying to claim a node, which was claimed already.');\n  }\n  patchHydrationInfo(node, {\n    status: HydrationStatus.Hydrated\n  });\n  ngDevMode.hydratedNodes++;\n}\nfunction markRNodeAsSkippedByHydration(node) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsSkippedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  patchHydrationInfo(node, {\n    status: HydrationStatus.Skipped\n  });\n  ngDevMode.componentsSkippedHydration++;\n}\nfunction countBlocksSkippedByHydration(injector) {\n  const transferState = injector.get(TransferState);\n  const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n  if (ngDevMode) {\n    ngDevMode.deferBlocksWithIncrementalHydration = Object.keys(nghDeferData).length;\n  }\n}\nfunction markRNodeAsHavingHydrationMismatch(node, expectedNodeDetails = null, actualNodeDetails = null) {\n  if (!ngDevMode) {\n    throw new Error('Calling `markRNodeAsMismatchedByHydration` in prod mode ' + 'is not supported and likely a mistake.');\n  }\n  // The RNode can be a standard HTMLElement (not an Angular component or directive)\n  // The devtools component tree only displays Angular components & directives\n  // Therefore we attach the debug info to the closest component/directive\n  while (node && !getComponent(node)) {\n    node = node?.parentNode;\n  }\n  if (node) {\n    patchHydrationInfo(node, {\n      status: HydrationStatus.Mismatched,\n      expectedNodeDetails,\n      actualNodeDetails\n    });\n  }\n}\nfunction isRNodeClaimedForHydration(node) {\n  return readHydrationInfo(node)?.status === HydrationStatus.Hydrated;\n}\nfunction setSegmentHead(hydrationInfo, index, node) {\n  hydrationInfo.segmentHeads ??= {};\n  hydrationInfo.segmentHeads[index] = node;\n}\nfunction getSegmentHead(hydrationInfo, index) {\n  return hydrationInfo.segmentHeads?.[index] ?? null;\n}\nfunction isIncrementalHydrationEnabled(injector) {\n  return injector.get(IS_INCREMENTAL_HYDRATION_ENABLED, false, {\n    optional: true\n  });\n}\n/** Throws an error if the incremental hydration is not enabled */\nfunction assertIncrementalHydrationIsConfigured(injector) {\n  if (!isIncrementalHydrationEnabled(injector)) {\n    throw new RuntimeError(508 /* RuntimeErrorCode.MISCONFIGURED_INCREMENTAL_HYDRATION */, 'Angular has detected that some `@defer` blocks use `hydrate` triggers, ' + 'but incremental hydration was not enabled. Please ensure that the `withIncrementalHydration()` ' + 'call is added as an argument for the `provideClientHydration()` function call ' + 'in your application config.');\n  }\n}\n/** Throws an error if the ssrUniqueId on the LDeferBlockDetails is not present  */\nfunction assertSsrIdDefined(ssrUniqueId) {\n  assertDefined(ssrUniqueId, 'Internal error: expecting an SSR id for a defer block that should be hydrated, but the id is not present');\n}\n/**\n * Returns the size of an <ng-container>, using either the information\n * serialized in `ELEMENT_CONTAINERS` (element container size) or by\n * computing the sum of root nodes in all dehydrated views in a given\n * container (in case this `<ng-container>` was also used as a view\n * container host node, e.g. <ng-container *ngIf>).\n */\nfunction getNgContainerSize(hydrationInfo, index) {\n  const data = hydrationInfo.data;\n  let size = data[ELEMENT_CONTAINERS]?.[index] ?? null;\n  // If there is no serialized information available in the `ELEMENT_CONTAINERS` slot,\n  // check if we have info about view containers at this location (e.g.\n  // `<ng-container *ngIf>`) and use container size as a number of root nodes in this\n  // element container.\n  if (size === null && data[CONTAINERS]?.[index]) {\n    size = calcSerializedContainerSize(hydrationInfo, index);\n  }\n  return size;\n}\nfunction isSerializedElementContainer(hydrationInfo, index) {\n  return hydrationInfo.data[ELEMENT_CONTAINERS]?.[index] !== undefined;\n}\nfunction getSerializedContainerViews(hydrationInfo, index) {\n  return hydrationInfo.data[CONTAINERS]?.[index] ?? null;\n}\n/**\n * Computes the size of a serialized container (the number of root nodes)\n * by calculating the sum of root nodes in all dehydrated views in this container.\n */\nfunction calcSerializedContainerSize(hydrationInfo, index) {\n  const views = getSerializedContainerViews(hydrationInfo, index) ?? [];\n  let numNodes = 0;\n  for (let view of views) {\n    numNodes += view[NUM_ROOT_NODES] * (view[MULTIPLIER] ?? 1);\n  }\n  return numNodes;\n}\n/**\n * Attempt to initialize the `disconnectedNodes` field of the given\n * `DehydratedView`. Returns the initialized value.\n */\nfunction initDisconnectedNodes(hydrationInfo) {\n  // Check if we are processing disconnected info for the first time.\n  if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n  }\n  return hydrationInfo.disconnectedNodes;\n}\n/**\n * Checks whether a node is annotated as \"disconnected\", i.e. not present\n * in the DOM at serialization time. We should not attempt hydration for\n * such nodes and instead, use a regular \"creation mode\".\n */\nfunction isDisconnectedNode$1(hydrationInfo, index) {\n  // Check if we are processing disconnected info for the first time.\n  if (typeof hydrationInfo.disconnectedNodes === 'undefined') {\n    const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];\n    hydrationInfo.disconnectedNodes = nodeIds ? new Set(nodeIds) : null;\n  }\n  return !!initDisconnectedNodes(hydrationInfo)?.has(index);\n}\n/**\n * Helper function to prepare text nodes for serialization by ensuring\n * that seperate logical text blocks in the DOM remain separate after\n * serialization.\n */\nfunction processTextNodeBeforeSerialization(context, node) {\n  // Handle cases where text nodes can be lost after DOM serialization:\n  //  1. When there is an *empty text node* in DOM: in this case, this\n  //     node would not make it into the serialized string and as a result,\n  //     this node wouldn't be created in a browser. This would result in\n  //     a mismatch during the hydration, where the runtime logic would expect\n  //     a text node to be present in live DOM, but no text node would exist.\n  //     Example: `<span>{{ name }}</span>` when the `name` is an empty string.\n  //     This would result in `<span></span>` string after serialization and\n  //     in a browser only the `span` element would be created. To resolve that,\n  //     an extra comment node is appended in place of an empty text node and\n  //     that special comment node is replaced with an empty text node *before*\n  //     hydration.\n  //  2. When there are 2 consecutive text nodes present in the DOM.\n  //     Example: `<div>Hello <ng-container *ngIf=\"true\">world</ng-container></div>`.\n  //     In this scenario, the live DOM would look like this:\n  //       <div>#text('Hello ') #text('world') #comment('container')</div>\n  //     Serialized string would look like this: `<div>Hello world<!--container--></div>`.\n  //     The live DOM in a browser after that would be:\n  //       <div>#text('Hello world') #comment('container')</div>\n  //     Notice how 2 text nodes are now \"merged\" into one. This would cause hydration\n  //     logic to fail, since it'd expect 2 text nodes being present, not one.\n  //     To fix this, we insert a special comment node in between those text nodes, so\n  //     serialized representation is: `<div>Hello <!--ngtns-->world<!--container--></div>`.\n  //     This forces browser to create 2 text nodes separated by a comment node.\n  //     Before running a hydration process, this special comment node is removed, so the\n  //     live DOM has exactly the same state as it was before serialization.\n  // Collect this node as required special annotation only when its\n  // contents is empty. Otherwise, such text node would be present on\n  // the client after server-side rendering and no special handling needed.\n  const el = node;\n  const corruptedTextNodes = context.corruptedTextNodes;\n  if (el.textContent === '') {\n    corruptedTextNodes.set(el, \"ngetn\" /* TextNodeMarker.EmptyNode */);\n  } else if (el.nextSibling?.nodeType === Node.TEXT_NODE) {\n    corruptedTextNodes.set(el, \"ngtns\" /* TextNodeMarker.Separator */);\n  }\n}\nfunction convertHydrateTriggersToJsAction(triggers) {\n  let actionList = [];\n  if (triggers !== null) {\n    if (triggers.has(4 /* DeferBlockTrigger.Hover */)) {\n      actionList.push(...hoverEventNames);\n    }\n    if (triggers.has(3 /* DeferBlockTrigger.Interaction */)) {\n      actionList.push(...interactionEventNames);\n    }\n  }\n  return actionList;\n}\n/**\n * Builds a queue of blocks that need to be hydrated, looking up the\n * tree to the topmost defer block that exists in the tree that hasn't\n * been hydrated, but exists in the registry. This queue is in top down\n * hierarchical order as a list of defer block ids.\n * Note: This is utilizing serialized information to navigate up the tree\n */\nfunction getParentBlockHydrationQueue(deferBlockId, injector) {\n  const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n  const transferState = injector.get(TransferState);\n  const deferBlockParents = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n  let isTopMostDeferBlock = false;\n  let currentBlockId = deferBlockId;\n  let parentBlockPromise = null;\n  const hydrationQueue = [];\n  while (!isTopMostDeferBlock && currentBlockId) {\n    ngDevMode && assertEqual(hydrationQueue.indexOf(currentBlockId), -1, 'Internal error: defer block hierarchy has a cycle.');\n    isTopMostDeferBlock = dehydratedBlockRegistry.has(currentBlockId);\n    const hydratingParentBlock = dehydratedBlockRegistry.hydrating.get(currentBlockId);\n    if (parentBlockPromise === null && hydratingParentBlock != null) {\n      // TODO: add an ngDevMode asset that `hydratingParentBlock.promise` exists and is of type Promise.\n      parentBlockPromise = hydratingParentBlock.promise;\n      break;\n    }\n    hydrationQueue.unshift(currentBlockId);\n    currentBlockId = deferBlockParents[currentBlockId][DEFER_PARENT_BLOCK_ID];\n  }\n  return {\n    parentBlockPromise,\n    hydrationQueue\n  };\n}\nfunction gatherDeferBlocksByJSActionAttribute(doc) {\n  const jsactionNodes = doc.body.querySelectorAll('[jsaction]');\n  const blockMap = new Set();\n  for (let node of jsactionNodes) {\n    const attr = node.getAttribute('jsaction');\n    const blockId = node.getAttribute('ngb');\n    const eventTypes = [...hoverEventNames.join(':;'), ...interactionEventNames.join(':;')].join('|');\n    if (attr?.match(eventTypes) && blockId !== null) {\n      blockMap.add(node);\n    }\n  }\n  return blockMap;\n}\nfunction appendDeferBlocksToJSActionMap(doc, injector) {\n  const blockMap = gatherDeferBlocksByJSActionAttribute(doc);\n  for (let rNode of blockMap) {\n    const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n    sharedMapFunction(rNode, jsActionMap);\n  }\n}\n/**\n * Retrieves defer block hydration information from the TransferState.\n *\n * @param injector Injector that this component has access to.\n */\nlet _retrieveDeferBlockDataImpl = () => {\n  return {};\n};\nfunction retrieveDeferBlockDataImpl(injector) {\n  const transferState = injector.get(TransferState, null, {\n    optional: true\n  });\n  if (transferState !== null) {\n    const nghDeferData = transferState.get(NGH_DEFER_BLOCKS_KEY, {});\n    ngDevMode && assertDefined(nghDeferData, 'Unable to retrieve defer block info from the TransferState.');\n    return nghDeferData;\n  }\n  return {};\n}\n/**\n * Sets the implementation for the `retrieveDeferBlockData` function.\n */\nfunction enableRetrieveDeferBlockDataImpl() {\n  _retrieveDeferBlockDataImpl = retrieveDeferBlockDataImpl;\n}\n/**\n * Retrieves defer block data from TransferState storage\n */\nfunction retrieveDeferBlockData(injector) {\n  return _retrieveDeferBlockDataImpl(injector);\n}\nfunction isTimerTrigger(triggerInfo) {\n  return typeof triggerInfo === 'object' && triggerInfo.trigger === 5 /* DeferBlockTrigger.Timer */;\n}\nfunction getHydrateTimerTrigger(blockData) {\n  const trigger = blockData[DEFER_HYDRATE_TRIGGERS]?.find(t => isTimerTrigger(t));\n  return trigger?.delay ?? null;\n}\nfunction hasHydrateTrigger(blockData, trigger) {\n  return blockData[DEFER_HYDRATE_TRIGGERS]?.includes(trigger) ?? false;\n}\n/**\n * Creates a summary of the given serialized defer block, which is used later to properly initialize\n * specific triggers.\n */\nfunction createBlockSummary(blockInfo) {\n  return {\n    data: blockInfo,\n    hydrate: {\n      idle: hasHydrateTrigger(blockInfo, 0 /* DeferBlockTrigger.Idle */),\n      immediate: hasHydrateTrigger(blockInfo, 1 /* DeferBlockTrigger.Immediate */),\n      timer: getHydrateTimerTrigger(blockInfo),\n      viewport: hasHydrateTrigger(blockInfo, 2 /* DeferBlockTrigger.Viewport */)\n    }\n  };\n}\n/**\n * Processes all of the defer block data in the transfer state and creates a map of the summaries\n */\nfunction processBlockData(injector) {\n  const blockData = retrieveDeferBlockData(injector);\n  let blockDetails = new Map();\n  for (let blockId in blockData) {\n    blockDetails.set(blockId, createBlockSummary(blockData[blockId]));\n  }\n  return blockDetails;\n}\n\n/**\n * Defines the CSS styles encapsulation policies for the {@link Component} decorator's\n * `encapsulation` option.\n *\n * See {@link Component#encapsulation encapsulation}.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/ts/metadata/encapsulation.ts region='longform'}\n *\n * @publicApi\n */\nvar ViewEncapsulation;\n(function (ViewEncapsulation) {\n  // TODO: consider making `ViewEncapsulation` a `const enum` instead. See\n  // https://github.com/angular/angular/issues/44119 for additional information.\n  /**\n   * Emulates a native Shadow DOM encapsulation behavior by adding a specific attribute to the\n   * component's host element and applying the same attribute to all the CSS selectors provided\n   * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls}.\n   *\n   * This is the default option.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n  // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n  /**\n   * Doesn't provide any sort of CSS style encapsulation, meaning that all the styles provided\n   * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls} are applicable\n   * to any HTML element of the application regardless of their host Component.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n  /**\n   * Uses the browser's native Shadow DOM API to encapsulate CSS styles, meaning that it creates\n   * a ShadowRoot for the component's host element which is then used to encapsulate\n   * all the Component's styling.\n   */\n  ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation || (ViewEncapsulation = {}));\n\n/**\n * @fileoverview\n * A module to facilitate use of a Trusted Types policy internally within\n * Angular. It lazily constructs the Trusted Types policy, providing helper\n * utilities for promoting strings to Trusted Types. When Trusted Types are not\n * available, strings are used as a fallback.\n * @security All use of this module is security-sensitive and should go through\n * security review.\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy$1;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy$1() {\n  if (policy$1 === undefined) {\n    policy$1 = null;\n    if (_global.trustedTypes) {\n      try {\n        policy$1 = _global.trustedTypes.createPolicy('angular', {\n          createHTML: s => s,\n          createScript: s => s,\n          createScriptURL: s => s\n        });\n      } catch {\n        // trustedTypes.createPolicy throws if called with a name that is\n        // already registered, even in report-only mode. Until the API changes,\n        // catch the error not to break the applications functionally. In such\n        // cases, the code will fall back to using strings.\n      }\n    }\n  }\n  return policy$1;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will be interpreted as HTML by a browser, e.g. when assigning to\n * element.innerHTML.\n */\nfunction trustedHTMLFromString(html) {\n  return getPolicy$1()?.createHTML(html) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security In particular, it must be assured that the provided string will\n * never cause an XSS vulnerability if used in a context that will be\n * interpreted and executed as a script by a browser, e.g. when calling eval.\n */\nfunction trustedScriptFromString(script) {\n  return getPolicy$1()?.createScript(script) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will cause a browser to load and execute a resource, e.g. when\n * assigning to script.src.\n */\nfunction trustedScriptURLFromString(url) {\n  return getPolicy$1()?.createScriptURL(url) || url;\n}\n/**\n * Unsafely call the Function constructor with the given string arguments. It\n * is only available in development mode, and should be stripped out of\n * production code.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only called from development code, as use in production code can lead to\n * XSS vulnerabilities.\n */\nfunction newTrustedFunctionForDev(...args) {\n  if (typeof ngDevMode === 'undefined') {\n    throw new Error('newTrustedFunctionForDev should never be called in production');\n  }\n  if (!_global.trustedTypes) {\n    // In environments that don't support Trusted Types, fall back to the most\n    // straightforward implementation:\n    return new Function(...args);\n  }\n  // Chrome currently does not support passing TrustedScript to the Function\n  // constructor. The following implements the workaround proposed on the page\n  // below, where the Chromium bug is also referenced:\n  // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor\n  const fnArgs = args.slice(0, -1).join(',');\n  const fnBody = args[args.length - 1];\n  const body = `(function anonymous(${fnArgs}\n) { ${fnBody}\n})`;\n  // Using eval directly confuses the compiler and prevents this module from\n  // being stripped out of JS binaries even if not used. The global['eval']\n  // indirection fixes that.\n  const fn = _global['eval'](trustedScriptFromString(body));\n  if (fn.bind === undefined) {\n    // Workaround for a browser bug that only exists in Chrome 83, where passing\n    // a TrustedScript to eval just returns the TrustedScript back without\n    // evaluating it. In that case, fall back to the most straightforward\n    // implementation:\n    return new Function(...args);\n  }\n  // To completely mimic the behavior of calling \"new Function\", two more\n  // things need to happen:\n  // 1. Stringifying the resulting function should return its source code\n  fn.toString = () => body;\n  // 2. When calling the resulting function, `this` should refer to `global`\n  return fn.bind(_global);\n  // When Trusted Types support in Function constructors is widely available,\n  // the implementation of this function can be simplified to:\n  // return new Function(...args.map(a => trustedScriptFromString(a)));\n}\n\n/**\n * @fileoverview\n * A module to facilitate use of a Trusted Types policy internally within\n * Angular specifically for bypassSecurityTrust* and custom sanitizers. It\n * lazily constructs the Trusted Types policy, providing helper utilities for\n * promoting strings to Trusted Types. When Trusted Types are not available,\n * strings are used as a fallback.\n * @security All use of this module is security-sensitive and should go through\n * security review.\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy() {\n  if (policy === undefined) {\n    policy = null;\n    if (_global.trustedTypes) {\n      try {\n        policy = _global.trustedTypes.createPolicy('angular#unsafe-bypass', {\n          createHTML: s => s,\n          createScript: s => s,\n          createScriptURL: s => s\n        });\n      } catch {\n        // trustedTypes.createPolicy throws if called with a name that is\n        // already registered, even in report-only mode. Until the API changes,\n        // catch the error not to break the applications functionally. In such\n        // cases, the code will fall back to using strings.\n      }\n    }\n  }\n  return policy;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedHTMLFromStringBypass(html) {\n  return getPolicy()?.createHTML(html) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptFromStringBypass(script) {\n  return getPolicy()?.createScript(script) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptURLFromStringBypass(url) {\n  return getPolicy()?.createScriptURL(url) || url;\n}\nclass SafeValueImpl {\n  changingThisBreaksApplicationSecurity;\n  constructor(changingThisBreaksApplicationSecurity) {\n    this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n  }\n  toString() {\n    return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` + ` (see ${XSS_SECURITY_URL})`;\n  }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"HTML\" /* BypassType.Html */;\n  }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"Style\" /* BypassType.Style */;\n  }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"Script\" /* BypassType.Script */;\n  }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"URL\" /* BypassType.Url */;\n  }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n  getTypeName() {\n    return \"ResourceURL\" /* BypassType.ResourceUrl */;\n  }\n}\nfunction unwrapSafeValue(value) {\n  return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n  const actualType = getSanitizationBypassType(value);\n  if (actualType != null && actualType !== type) {\n    // Allow ResourceURLs in URL contexts, they are strictly more trusted.\n    if (actualType === \"ResourceURL\" /* BypassType.ResourceUrl */ && type === \"URL\" /* BypassType.Url */) return true;\n    throw new Error(`Required a safe ${type}, got a ${actualType} (see ${XSS_SECURITY_URL})`);\n  }\n  return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n  return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\n/**\n * Mark `html` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link htmlSanitizer} to be trusted implicitly.\n *\n * @param trustedHtml `html` string which needs to be implicitly trusted.\n * @returns a `html` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n  return new SafeHtmlImpl(trustedHtml);\n}\n/**\n * Mark `style` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link styleSanitizer} to be trusted implicitly.\n *\n * @param trustedStyle `style` string which needs to be implicitly trusted.\n * @returns a `style` hich has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n  return new SafeStyleImpl(trustedStyle);\n}\n/**\n * Mark `script` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link scriptSanitizer} to be trusted implicitly.\n *\n * @param trustedScript `script` string which needs to be implicitly trusted.\n * @returns a `script` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustScript(trustedScript) {\n  return new SafeScriptImpl(trustedScript);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link urlSanitizer} to be trusted implicitly.\n *\n * @param trustedUrl `url` string which needs to be implicitly trusted.\n * @returns a `url`  which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n  return new SafeUrlImpl(trustedUrl);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.\n *\n * @param trustedResourceUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n  return new SafeResourceUrlImpl(trustedResourceUrl);\n}\n\n/**\n * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we use one of two strategies for doing this.\n * Default: DOMParser strategy\n * Fallback: InertDocument strategy\n */\nfunction getInertBodyHelper(defaultDoc) {\n  const inertDocumentHelper = new InertDocumentHelper(defaultDoc);\n  return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;\n}\n/**\n * Uses DOMParser to create and fill an inert body element.\n * This is the default strategy used in browsers that support it.\n */\nclass DOMParserHelper {\n  inertDocumentHelper;\n  constructor(inertDocumentHelper) {\n    this.inertDocumentHelper = inertDocumentHelper;\n  }\n  getInertBodyElement(html) {\n    // We add these extra elements to ensure that the rest of the content is parsed as expected\n    // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the\n    // `<head>` tag. Note that the `<body>` tag is closed implicitly to prevent unclosed tags\n    // in `html` from consuming the otherwise explicit `</body>` tag.\n    html = '<body><remove></remove>' + html;\n    try {\n      const body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), 'text/html').body;\n      if (body === null) {\n        // In some browsers (e.g. Mozilla/5.0 iPad AppleWebKit Mobile) the `body` property only\n        // becomes available in the following tick of the JS engine. In that case we fall back to\n        // the `inertDocumentHelper` instead.\n        return this.inertDocumentHelper.getInertBodyElement(html);\n      }\n      body.firstChild?.remove();\n      return body;\n    } catch {\n      return null;\n    }\n  }\n}\n/**\n * Use an HTML5 `template` element to create and fill an inert DOM element.\n * This is the fallback strategy if the browser does not support DOMParser.\n */\nclass InertDocumentHelper {\n  defaultDoc;\n  inertDocument;\n  constructor(defaultDoc) {\n    this.defaultDoc = defaultDoc;\n    this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n  }\n  getInertBodyElement(html) {\n    const templateEl = this.inertDocument.createElement('template');\n    templateEl.innerHTML = trustedHTMLFromString(html);\n    return templateEl;\n  }\n}\n/**\n * We need to determine whether the DOMParser exists in the global context and\n * supports parsing HTML; HTML parsing support is not as wide as other formats, see\n * https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility.\n *\n * @suppress {uselessCode}\n */\nfunction isDOMParserAvailable() {\n  try {\n    return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');\n  } catch {\n    return false;\n  }\n}\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * This regular expression matches a subset of URLs that will not cause script\n * execution if used in URL context within a HTML document. Specifically, this\n * regular expression matches if:\n * (1) Either a protocol that is not javascript:, and that has valid characters\n *     (alphanumeric or [+-.]).\n * (2) or no protocol.  A protocol must be followed by a colon. The below\n *     allows that by allowing colons only after one of the characters [/?#].\n *     A colon after a hash (#) must be in the fragment.\n *     Otherwise, a colon after a (?) must be in a query.\n *     Otherwise, a colon after a single solidus (/) must be in a path.\n *     Otherwise, a colon after a double solidus (//) must be in the authority\n *     (before port).\n *\n * The pattern disallows &, used in HTML entity declarations before\n * one of the characters in [/?#]. This disallows HTML entities used in the\n * protocol name, which should never happen, e.g. \"h&#116;tp\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo&lt;bar/baz\".  Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript&#58;...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\\/?#]*(?:[\\/?#]|$))/i;\nfunction _sanitizeUrl(url) {\n  url = String(url);\n  if (url.match(SAFE_URL_PATTERN)) return url;\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    console.warn(`WARNING: sanitizing unsafe URL value ${url} (see ${XSS_SECURITY_URL})`);\n  }\n  return 'unsafe:' + url;\n}\nfunction tagSet(tags) {\n  const res = {};\n  for (const t of tags.split(',')) res[t] = true;\n  return res;\n}\nfunction merge(...sets) {\n  const res = {};\n  for (const s of sets) {\n    for (const v in s) {\n      if (s.hasOwnProperty(v)) res[v] = true;\n    }\n  }\n  return res;\n}\n// Good source of info about elements and attributes\n// https://html.spec.whatwg.org/#semantics\n// https://simon.html5.org/html-elements\n// Safe Void Elements - HTML5\n// https://html.spec.whatwg.org/#void-elements\nconst VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');\n// Elements that you can, intentionally, leave open (and which close themselves)\n// https://html.spec.whatwg.org/#optional-tags\nconst OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');\nconst OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');\nconst OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);\n// Safe Block Elements - HTML5\nconst BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' + 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));\n// Inline Elements - HTML5\nconst INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' + 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' + 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));\nconst VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);\n// Attributes that have href and hence need to be sanitized\nconst URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');\nconst HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' + 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' + 'scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,' + 'valign,value,vspace,width');\n// Accessibility attributes as per WAI-ARIA 1.1 (W3C Working Draft 14 December 2018)\nconst ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' + 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' + 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' + 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' + 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' + 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' + 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext');\n// NB: This currently consciously doesn't support SVG. SVG sanitization has had several security\n// issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via\n// innerHTML is required, SVG attributes should be added here.\n// NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those\n// can be sanitized, but they increase security surface area without a legitimate use case, so they\n// are left out here.\nconst VALID_ATTRS = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS);\n// Elements whose content should not be traversed/preserved, if the elements themselves are invalid.\n//\n// Typically, `<invalid>Some content</invalid>` would traverse (and in this case preserve)\n// `Some content`, but strip `invalid-element` opening/closing tags. For some elements, though, we\n// don't want to preserve the content, if the elements themselves are going to be removed.\nconst SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet('script,style,template');\n/**\n * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe\n * attributes.\n */\nclass SanitizingHtmlSerializer {\n  // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just\n  // because characters were re-encoded.\n  sanitizedSomething = false;\n  buf = [];\n  sanitizeChildren(el) {\n    // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.\n    // However this code never accesses properties off of `document` before deleting its contents\n    // again, so it shouldn't be vulnerable to DOM clobbering.\n    let current = el.firstChild;\n    let traverseContent = true;\n    let parentNodes = [];\n    while (current) {\n      if (current.nodeType === Node.ELEMENT_NODE) {\n        traverseContent = this.startElement(current);\n      } else if (current.nodeType === Node.TEXT_NODE) {\n        this.chars(current.nodeValue);\n      } else {\n        // Strip non-element, non-text nodes.\n        this.sanitizedSomething = true;\n      }\n      if (traverseContent && current.firstChild) {\n        // Push current node to the parent stack before entering its content.\n        parentNodes.push(current);\n        current = getFirstChild(current);\n        continue;\n      }\n      while (current) {\n        // Leaving the element.\n        // Walk up and to the right, closing tags as we go.\n        if (current.nodeType === Node.ELEMENT_NODE) {\n          this.endElement(current);\n        }\n        let next = getNextSibling(current);\n        if (next) {\n          current = next;\n          break;\n        }\n        // There was no next sibling, walk up to the parent node (extract it from the stack).\n        current = parentNodes.pop();\n      }\n    }\n    return this.buf.join('');\n  }\n  /**\n   * Sanitizes an opening element tag (if valid) and returns whether the element's contents should\n   * be traversed. Element content must always be traversed (even if the element itself is not\n   * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.\n   *\n   * @param element The element to sanitize.\n   * @return True if the element's contents should be traversed.\n   */\n  startElement(element) {\n    const tagName = getNodeName(element).toLowerCase();\n    if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n      this.sanitizedSomething = true;\n      return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);\n    }\n    this.buf.push('<');\n    this.buf.push(tagName);\n    const elAttrs = element.attributes;\n    for (let i = 0; i < elAttrs.length; i++) {\n      const elAttr = elAttrs.item(i);\n      const attrName = elAttr.name;\n      const lower = attrName.toLowerCase();\n      if (!VALID_ATTRS.hasOwnProperty(lower)) {\n        this.sanitizedSomething = true;\n        continue;\n      }\n      let value = elAttr.value;\n      // TODO(martinprobst): Special case image URIs for data:image/...\n      if (URI_ATTRS[lower]) value = _sanitizeUrl(value);\n      this.buf.push(' ', attrName, '=\"', encodeEntities(value), '\"');\n    }\n    this.buf.push('>');\n    return true;\n  }\n  endElement(current) {\n    const tagName = getNodeName(current).toLowerCase();\n    if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {\n      this.buf.push('</');\n      this.buf.push(tagName);\n      this.buf.push('>');\n    }\n  }\n  chars(chars) {\n    this.buf.push(encodeEntities(chars));\n  }\n}\n/**\n * Verifies whether a given child node is a descendant of a given parent node.\n * It may not be the case when properties like `.firstChild` are clobbered and\n * accessing `.firstChild` results in an unexpected node returned.\n */\nfunction isClobberedElement(parentNode, childNode) {\n  return (parentNode.compareDocumentPosition(childNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) !== Node.DOCUMENT_POSITION_CONTAINED_BY;\n}\n/**\n * Retrieves next sibling node and makes sure that there is no\n * clobbering of the `nextSibling` property happening.\n */\nfunction getNextSibling(node) {\n  const nextSibling = node.nextSibling;\n  // Make sure there is no `nextSibling` clobbering: navigating to\n  // the next sibling and going back to the previous one should result\n  // in the original node.\n  if (nextSibling && node !== nextSibling.previousSibling) {\n    throw clobberedElementError(nextSibling);\n  }\n  return nextSibling;\n}\n/**\n * Retrieves first child node and makes sure that there is no\n * clobbering of the `firstChild` property happening.\n */\nfunction getFirstChild(node) {\n  const firstChild = node.firstChild;\n  if (firstChild && isClobberedElement(node, firstChild)) {\n    throw clobberedElementError(firstChild);\n  }\n  return firstChild;\n}\n/** Gets a reasonable nodeName, even for clobbered nodes. */\nfunction getNodeName(node) {\n  const nodeName = node.nodeName;\n  // If the property is clobbered, assume it is an `HTMLFormElement`.\n  return typeof nodeName === 'string' ? nodeName : 'FORM';\n}\nfunction clobberedElementError(node) {\n  return new Error(`Failed to sanitize html because the element is clobbered: ${node.outerHTML}`);\n}\n// Regular Expressions for parsing tags and attributes\nconst SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n// ! to ~ is the ASCII range.\nconst NON_ALPHANUMERIC_REGEXP = /([^\\#-~ |!])/g;\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n */\nfunction encodeEntities(value) {\n  return value.replace(/&/g, '&amp;').replace(SURROGATE_PAIR_REGEXP, function (match) {\n    const hi = match.charCodeAt(0);\n    const low = match.charCodeAt(1);\n    return '&#' + ((hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000) + ';';\n  }).replace(NON_ALPHANUMERIC_REGEXP, function (match) {\n    return '&#' + match.charCodeAt(0) + ';';\n  }).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nlet inertBodyHelper;\n/**\n * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to\n * the DOM in a browser environment.\n */\nfunction _sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n  let inertBodyElement = null;\n  try {\n    inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc);\n    // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n    let unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';\n    inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n    // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser\n    // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.\n    let mXSSAttempts = 5;\n    let parsedHtml = unsafeHtml;\n    do {\n      if (mXSSAttempts === 0) {\n        throw new Error('Failed to sanitize html because the input is unstable');\n      }\n      mXSSAttempts--;\n      unsafeHtml = parsedHtml;\n      parsedHtml = inertBodyElement.innerHTML;\n      inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n    } while (unsafeHtml !== parsedHtml);\n    const sanitizer = new SanitizingHtmlSerializer();\n    const safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {\n      console.warn(`WARNING: sanitizing HTML stripped some content, see ${XSS_SECURITY_URL}`);\n    }\n    return trustedHTMLFromString(safeHtml);\n  } finally {\n    // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n    if (inertBodyElement) {\n      const parent = getTemplateContent(inertBodyElement) || inertBodyElement;\n      while (parent.firstChild) {\n        parent.firstChild.remove();\n      }\n    }\n  }\n}\nfunction getTemplateContent(el) {\n  return 'content' in el /** Microsoft/TypeScript#21517 */ && isTemplateElement(el) ? el.content : null;\n}\nfunction isTemplateElement(el) {\n  return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';\n}\n\n/**\n * A SecurityContext marks a location that has dangerous security implications, e.g. a DOM property\n * like `innerHTML` that could cause Cross Site Scripting (XSS) security bugs when improperly\n * handled.\n *\n * See DomSanitizer for more details on security in Angular applications.\n *\n * @publicApi\n */\nvar SecurityContext;\n(function (SecurityContext) {\n  SecurityContext[SecurityContext[\"NONE\"] = 0] = \"NONE\";\n  SecurityContext[SecurityContext[\"HTML\"] = 1] = \"HTML\";\n  SecurityContext[SecurityContext[\"STYLE\"] = 2] = \"STYLE\";\n  SecurityContext[SecurityContext[\"SCRIPT\"] = 3] = \"SCRIPT\";\n  SecurityContext[SecurityContext[\"URL\"] = 4] = \"URL\";\n  SecurityContext[SecurityContext[\"RESOURCE_URL\"] = 5] = \"RESOURCE_URL\";\n})(SecurityContext || (SecurityContext = {}));\n\n/**\n * An `html` sanitizer which converts untrusted `html` **string** into trusted string by removing\n * dangerous content.\n *\n * This method parses the `html` and locates potentially dangerous content (such as urls and\n * javascript) and removes it.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustHtml}.\n *\n * @param unsafeHtml untrusted `html`, typically from the user.\n * @returns `html` string which is safe to display to user, because all of the dangerous javascript\n * and urls have been removed.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeHtml(unsafeHtml) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeHtml, \"HTML\" /* BypassType.Html */)) {\n    return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));\n  }\n  return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));\n}\n/**\n * A `style` sanitizer which converts untrusted `style` **string** into trusted string by removing\n * dangerous content.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustStyle}.\n *\n * @param unsafeStyle untrusted `style`, typically from the user.\n * @returns `style` string which is safe to bind to the `style` properties.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeStyle(unsafeStyle) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';\n  }\n  if (allowSanitizationBypassAndThrow(unsafeStyle, \"Style\" /* BypassType.Style */)) {\n    return unwrapSafeValue(unsafeStyle);\n  }\n  return renderStringify(unsafeStyle);\n}\n/**\n * A `url` sanitizer which converts untrusted `url` **string** into trusted string by removing\n * dangerous\n * content.\n *\n * This method parses the `url` and locates potentially dangerous content (such as javascript) and\n * removes it.\n *\n * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustUrl}.\n *\n * @param unsafeUrl untrusted `url`, typically from the user.\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\n * all of the dangerous javascript has been removed.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeUrl(unsafeUrl) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';\n  }\n  if (allowSanitizationBypassAndThrow(unsafeUrl, \"URL\" /* BypassType.Url */)) {\n    return unwrapSafeValue(unsafeUrl);\n  }\n  return _sanitizeUrl(renderStringify(unsafeUrl));\n}\n/**\n * A `url` sanitizer which only lets trusted `url`s through.\n *\n * This passes only `url`s marked trusted by calling {@link bypassSanitizationTrustResourceUrl}.\n *\n * @param unsafeResourceUrl untrusted `url`, typically from the user.\n * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because\n * only trusted `url`s have been allowed to pass.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeResourceUrl(unsafeResourceUrl) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeResourceUrl, \"ResourceURL\" /* BypassType.ResourceUrl */)) {\n    return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));\n  }\n  throw new RuntimeError(904 /* RuntimeErrorCode.UNSAFE_VALUE_IN_RESOURCE_URL */, ngDevMode && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);\n}\n/**\n * A `script` sanitizer which only lets trusted javascript through.\n *\n * This passes only `script`s marked trusted by calling {@link\n * bypassSanitizationTrustScript}.\n *\n * @param unsafeScript untrusted `script`, typically from the user.\n * @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,\n * because only trusted `scripts` have been allowed to pass.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeScript(unsafeScript) {\n  const sanitizer = getSanitizer();\n  if (sanitizer) {\n    return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '');\n  }\n  if (allowSanitizationBypassAndThrow(unsafeScript, \"Script\" /* BypassType.Script */)) {\n    return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));\n  }\n  throw new RuntimeError(905 /* RuntimeErrorCode.UNSAFE_VALUE_IN_SCRIPT */, ngDevMode && 'unsafe value used in a script context');\n}\n/**\n * A template tag function for promoting the associated constant literal to a\n * TrustedHTML. Interpolation is explicitly not allowed.\n *\n * @param html constant template literal containing trusted HTML.\n * @returns TrustedHTML wrapping `html`.\n *\n * @security This is a security-sensitive function and should only be used to\n * convert constant values of attributes and properties found in\n * application-provided Angular templates to TrustedHTML.\n *\n * @codeGenApi\n */\nfunction ɵɵtrustConstantHtml(html) {\n  // The following runtime check ensures that the function was called as a\n  // template tag (e.g. ɵɵtrustConstantHtml`content`), without any interpolation\n  // (e.g. not ɵɵtrustConstantHtml`content ${variable}`). A TemplateStringsArray\n  // is an array with a `raw` property that is also an array. The associated\n  // template literal has no interpolation if and only if the length of the\n  // TemplateStringsArray is 1.\n  if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {\n    throw new Error(`Unexpected interpolation in trusted HTML constant: ${html.join('?')}`);\n  }\n  return trustedHTMLFromString(html[0]);\n}\n/**\n * A template tag function for promoting the associated constant literal to a\n * TrustedScriptURL. Interpolation is explicitly not allowed.\n *\n * @param url constant template literal containing a trusted script URL.\n * @returns TrustedScriptURL wrapping `url`.\n *\n * @security This is a security-sensitive function and should only be used to\n * convert constant values of attributes and properties found in\n * application-provided Angular templates to TrustedScriptURL.\n *\n * @codeGenApi\n */\nfunction ɵɵtrustConstantResourceUrl(url) {\n  // The following runtime check ensures that the function was called as a\n  // template tag (e.g. ɵɵtrustConstantResourceUrl`content`), without any\n  // interpolation (e.g. not ɵɵtrustConstantResourceUrl`content ${variable}`). A\n  // TemplateStringsArray is an array with a `raw` property that is also an\n  // array. The associated template literal has no interpolation if and only if\n  // the length of the TemplateStringsArray is 1.\n  if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {\n    throw new Error(`Unexpected interpolation in trusted URL constant: ${url.join('?')}`);\n  }\n  return trustedScriptURLFromString(url[0]);\n}\n/**\n * Detects which sanitizer to use for URL property, based on tag name and prop name.\n *\n * The rules are based on the RESOURCE_URL context config from\n * `packages/compiler/src/schema/dom_security_schema.ts`.\n * If tag and prop names don't match Resource URL schema, use URL sanitizer.\n */\nfunction getUrlSanitizer(tag, prop) {\n  if (prop === 'src' && (tag === 'embed' || tag === 'frame' || tag === 'iframe' || tag === 'media' || tag === 'script') || prop === 'href' && (tag === 'base' || tag === 'link')) {\n    return ɵɵsanitizeResourceUrl;\n  }\n  return ɵɵsanitizeUrl;\n}\n/**\n * Sanitizes URL, selecting sanitizer function based on tag and property names.\n *\n * This function is used in case we can't define security context at compile time, when only prop\n * name is available. This happens when we generate host bindings for Directives/Components. The\n * host element is unknown at compile time, so we defer calculation of specific sanitizer to\n * runtime.\n *\n * @param unsafeUrl untrusted `url`, typically from the user.\n * @param tag target element tag name.\n * @param prop name of the property that contains the value.\n * @returns `url` string which is safe to bind.\n *\n * @codeGenApi\n */\nfunction ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {\n  return getUrlSanitizer(tag, prop)(unsafeUrl);\n}\nfunction validateAgainstEventProperties(name) {\n  if (name.toLowerCase().startsWith('on')) {\n    const errorMessage = `Binding to event property '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...` + `\\nIf '${name}' is a directive input, make sure the directive is imported by the` + ` current module.`;\n    throw new RuntimeError(306 /* RuntimeErrorCode.INVALID_EVENT_BINDING */, errorMessage);\n  }\n}\nfunction validateAgainstEventAttributes(name) {\n  if (name.toLowerCase().startsWith('on')) {\n    const errorMessage = `Binding to event attribute '${name}' is disallowed for security reasons, ` + `please use (${name.slice(2)})=...`;\n    throw new RuntimeError(306 /* RuntimeErrorCode.INVALID_EVENT_BINDING */, errorMessage);\n  }\n}\nfunction getSanitizer() {\n  const lView = getLView();\n  return lView && lView[ENVIRONMENT].sanitizer;\n}\n\n/**\n * Disallowed strings in the comment.\n *\n * see: https://html.spec.whatwg.org/multipage/syntax.html#comments\n */\nconst COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;\n/**\n * Delimiter in the disallowed strings which needs to be wrapped with zero with character.\n */\nconst COMMENT_DELIMITER = /(<|>)/g;\nconst COMMENT_DELIMITER_ESCAPED = '\\u200B$1\\u200B';\n/**\n * Escape the content of comment strings so that it can be safely inserted into a comment node.\n *\n * The issue is that HTML does not specify any way to escape comment end text inside the comment.\n * Consider: `<!-- The way you close a comment is with \">\", and \"->\" at the beginning or by \"-->\" or\n * \"--!>\" at the end. -->`. Above the `\"-->\"` is meant to be text not an end to the comment. This\n * can be created programmatically through DOM APIs. (`<!--` are also disallowed.)\n *\n * see: https://html.spec.whatwg.org/multipage/syntax.html#comments\n *\n * ```ts\n * div.innerHTML = div.innerHTML\n * ```\n *\n * One would expect that the above code would be safe to do, but it turns out that because comment\n * text is not escaped, the comment may contain text which will prematurely close the comment\n * opening up the application for XSS attack. (In SSR we programmatically create comment nodes which\n * may contain such text and expect them to be safe.)\n *\n * This function escapes the comment text by looking for comment delimiters (`<` and `>`) and\n * surrounding them with `_>_` where the `_` is a zero width space `\\u200B`. The result is that if a\n * comment contains any of the comment start/end delimiters (such as `<!--`, `-->` or `--!>`) the\n * text it will render normally but it will not cause the HTML parser to close/open the comment.\n *\n * @param value text to make safe for comment node by escaping the comment open/close character\n *     sequence.\n */\nfunction escapeCommentText(value) {\n  return value.replace(COMMENT_DISALLOWED, text => text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED));\n}\nfunction normalizeDebugBindingName(name) {\n  // Attribute names with `$` (eg `x-y$`) are valid per spec, but unsupported by some browsers\n  name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));\n  return `ng-reflect-${name}`;\n}\nconst CAMEL_CASE_REGEXP = /([A-Z])/g;\nfunction camelCaseToDashCase(input) {\n  return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());\n}\nfunction normalizeDebugBindingValue(value) {\n  try {\n    // Limit the size of the value as otherwise the DOM just gets polluted.\n    return value != null ? value.toString().slice(0, 30) : value;\n  } catch (e) {\n    return '[ERROR] Exception while trying to serialize the value';\n  }\n}\n\n/**\n * Defines a schema that allows an NgModule to contain the following:\n * - Non-Angular elements named with dash case (`-`).\n * - Element properties named with dash case (`-`).\n * Dash case is the naming convention for custom elements.\n *\n * @publicApi\n */\nconst CUSTOM_ELEMENTS_SCHEMA = {\n  name: 'custom-elements'\n};\n/**\n * Defines a schema that allows any property on any element.\n *\n * This schema allows you to ignore the errors related to any unknown elements or properties in a\n * template. The usage of this schema is generally discouraged because it prevents useful validation\n * and may hide real errors in your template. Consider using the `CUSTOM_ELEMENTS_SCHEMA` instead.\n *\n * @publicApi\n */\nconst NO_ERRORS_SCHEMA = {\n  name: 'no-errors-schema'\n};\nlet shouldThrowErrorOnUnknownElement = false;\n/**\n * Sets a strict mode for JIT-compiled components to throw an error on unknown elements,\n * instead of just logging the error.\n * (for AOT-compiled ones this check happens at build time).\n */\nfunction ɵsetUnknownElementStrictMode(shouldThrow) {\n  shouldThrowErrorOnUnknownElement = shouldThrow;\n}\n/**\n * Gets the current value of the strict mode.\n */\nfunction ɵgetUnknownElementStrictMode() {\n  return shouldThrowErrorOnUnknownElement;\n}\nlet shouldThrowErrorOnUnknownProperty = false;\n/**\n * Sets a strict mode for JIT-compiled components to throw an error on unknown properties,\n * instead of just logging the error.\n * (for AOT-compiled ones this check happens at build time).\n */\nfunction ɵsetUnknownPropertyStrictMode(shouldThrow) {\n  shouldThrowErrorOnUnknownProperty = shouldThrow;\n}\n/**\n * Gets the current value of the strict mode.\n */\nfunction ɵgetUnknownPropertyStrictMode() {\n  return shouldThrowErrorOnUnknownProperty;\n}\n/**\n * Validates that the element is known at runtime and produces\n * an error if it's not the case.\n * This check is relevant for JIT-compiled components (for AOT-compiled\n * ones this check happens at build time).\n *\n * The element is considered known if either:\n * - it's a known HTML element\n * - it's a known custom element\n * - the element matches any directive\n * - the element is allowed by one of the schemas\n *\n * @param element Element to validate\n * @param lView An `LView` that represents a current component that is being rendered\n * @param tagName Name of the tag to check\n * @param schemas Array of schemas\n * @param hasDirectives Boolean indicating that the element matches any directive\n */\nfunction validateElementIsKnown(element, lView, tagName, schemas, hasDirectives) {\n  // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT\n  // mode where this check happens at compile time. In JIT mode, `schemas` is always present and\n  // defined as an array (as an empty array in case `schemas` field is not defined) and we should\n  // execute the check below.\n  if (schemas === null) return;\n  // If the element matches any directive, it's considered as valid.\n  if (!hasDirectives && tagName !== null) {\n    // The element is unknown if it's an instance of HTMLUnknownElement, or it isn't registered\n    // as a custom element. Note that unknown elements with a dash in their name won't be instances\n    // of HTMLUnknownElement in browsers that support web components.\n    const isUnknown =\n    // Note that we can't check for `typeof HTMLUnknownElement === 'function'` because\n    // Domino doesn't expose HTMLUnknownElement globally.\n    typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement && element instanceof HTMLUnknownElement || typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 && !customElements.get(tagName);\n    if (isUnknown && !matchingSchemas(schemas, tagName)) {\n      const isHostStandalone = isHostComponentStandalone(lView);\n      const templateLocation = getTemplateLocationDetails(lView);\n      const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n      let message = `'${tagName}' is not a known element${templateLocation}:\\n`;\n      message += `1. If '${tagName}' is an Angular component, then verify that it is ${isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared'}.\\n`;\n      if (tagName && tagName.indexOf('-') > -1) {\n        message += `2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the ${schemas} of this component to suppress this message.`;\n      } else {\n        message += `2. To allow any element add 'NO_ERRORS_SCHEMA' to the ${schemas} of this component.`;\n      }\n      if (shouldThrowErrorOnUnknownElement) {\n        throw new RuntimeError(304 /* RuntimeErrorCode.UNKNOWN_ELEMENT */, message);\n      } else {\n        console.error(formatRuntimeError(304 /* RuntimeErrorCode.UNKNOWN_ELEMENT */, message));\n      }\n    }\n  }\n}\n/**\n * Validates that the property of the element is known at runtime and returns\n * false if it's not the case.\n * This check is relevant for JIT-compiled components (for AOT-compiled\n * ones this check happens at build time).\n *\n * The property is considered known if either:\n * - it's a known property of the element\n * - the element is allowed by one of the schemas\n * - the property is used for animations\n *\n * @param element Element to validate\n * @param propName Name of the property to check\n * @param tagName Name of the tag hosting the property\n * @param schemas Array of schemas\n */\nfunction isPropertyValid(element, propName, tagName, schemas) {\n  // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT\n  // mode where this check happens at compile time. In JIT mode, `schemas` is always present and\n  // defined as an array (as an empty array in case `schemas` field is not defined) and we should\n  // execute the check below.\n  if (schemas === null) return true;\n  // The property is considered valid if the element matches the schema, it exists on the element,\n  // or it is synthetic.\n  if (matchingSchemas(schemas, tagName) || propName in element || isAnimationProp(propName)) {\n    return true;\n  }\n  // Note: `typeof Node` returns 'function' in most browsers, but is undefined with domino.\n  return typeof Node === 'undefined' || Node === null || !(element instanceof Node);\n}\n/**\n * Logs or throws an error that a property is not supported on an element.\n *\n * @param propName Name of the invalid property\n * @param tagName Name of the tag hosting the property\n * @param nodeType Type of the node hosting the property\n * @param lView An `LView` that represents a current component\n */\nfunction handleUnknownPropertyError(propName, tagName, nodeType, lView) {\n  // Special-case a situation when a structural directive is applied to\n  // an `<ng-template>` element, for example: `<ng-template *ngIf=\"true\">`.\n  // In this case the compiler generates the `ɵɵtemplate` instruction with\n  // the `null` as the tagName. The directive matching logic at runtime relies\n  // on this effect (see `isInlineTemplate`), thus using the 'ng-template' as\n  // a default value of the `tNode.value` is not feasible at this moment.\n  if (!tagName && nodeType === 4 /* TNodeType.Container */) {\n    tagName = 'ng-template';\n  }\n  const isHostStandalone = isHostComponentStandalone(lView);\n  const templateLocation = getTemplateLocationDetails(lView);\n  let message = `Can't bind to '${propName}' since it isn't a known property of '${tagName}'${templateLocation}.`;\n  const schemas = `'${isHostStandalone ? '@Component' : '@NgModule'}.schemas'`;\n  const importLocation = isHostStandalone ? \"included in the '@Component.imports' of this component\" : 'a part of an @NgModule where this component is declared';\n  if (KNOWN_CONTROL_FLOW_DIRECTIVES.has(propName)) {\n    // Most likely this is a control flow directive (such as `*ngIf`) used in\n    // a template, but the directive or the `CommonModule` is not imported.\n    const correspondingImport = KNOWN_CONTROL_FLOW_DIRECTIVES.get(propName);\n    message += `\\nIf the '${propName}' is an Angular control flow directive, ` + `please make sure that either the '${correspondingImport}' directive or the 'CommonModule' is ${importLocation}.`;\n  } else {\n    // May be an Angular component, which is not imported/declared?\n    message += `\\n1. If '${tagName}' is an Angular component and it has the ` + `'${propName}' input, then verify that it is ${importLocation}.`;\n    // May be a Web Component?\n    if (tagName && tagName.indexOf('-') > -1) {\n      message += `\\n2. If '${tagName}' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' ` + `to the ${schemas} of this component to suppress this message.`;\n      message += `\\n3. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n    } else {\n      // If it's expected, the error can be suppressed by the `NO_ERRORS_SCHEMA` schema.\n      message += `\\n2. To allow any property add 'NO_ERRORS_SCHEMA' to ` + `the ${schemas} of this component.`;\n    }\n  }\n  reportUnknownPropertyError(message);\n}\nfunction reportUnknownPropertyError(message) {\n  if (shouldThrowErrorOnUnknownProperty) {\n    throw new RuntimeError(303 /* RuntimeErrorCode.UNKNOWN_BINDING */, message);\n  } else {\n    console.error(formatRuntimeError(303 /* RuntimeErrorCode.UNKNOWN_BINDING */, message));\n  }\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode and also it relies on the constructor function being available.\n *\n * Gets a reference to the host component def (where a current component is declared).\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction getDeclarationComponentDef(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  // Unable to obtain a context.\n  if (!context) return null;\n  return context.constructor ? getComponentDef(context.constructor) : null;\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode.\n *\n * Checks if the current component is declared inside of a standalone component template.\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction isHostComponentStandalone(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const componentDef = getDeclarationComponentDef(lView);\n  // Treat host component as non-standalone if we can't obtain the def.\n  return !!componentDef?.standalone;\n}\n/**\n * WARNING: this is a **dev-mode only** function (thus should always be guarded by the `ngDevMode`)\n * and must **not** be used in production bundles. The function makes megamorphic reads, which might\n * be too slow for production mode.\n *\n * Constructs a string describing the location of the host component template. The function is used\n * in dev mode to produce error messages.\n *\n * @param lView An `LView` that represents a current component that is being rendered.\n */\nfunction getTemplateLocationDetails(lView) {\n  !ngDevMode && throwError('Must never be called in production mode');\n  const hostComponentDef = getDeclarationComponentDef(lView);\n  const componentClassName = hostComponentDef?.type?.name;\n  return componentClassName ? ` (used in the '${componentClassName}' component template)` : '';\n}\n/**\n * The set of known control flow directives and their corresponding imports.\n * We use this set to produce a more precises error message with a note\n * that the `CommonModule` should also be included.\n */\nconst KNOWN_CONTROL_FLOW_DIRECTIVES = new Map([['ngIf', 'NgIf'], ['ngFor', 'NgFor'], ['ngSwitchCase', 'NgSwitchCase'], ['ngSwitchDefault', 'NgSwitchDefault']]);\n/**\n * Returns true if the tag name is allowed by specified schemas.\n * @param schemas Array of schemas\n * @param tagName Name of the tag\n */\nfunction matchingSchemas(schemas, tagName) {\n  if (schemas !== null) {\n    for (let i = 0; i < schemas.length; i++) {\n      const schema = schemas[i];\n      if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveWindow(element) {\n  return element.ownerDocument.defaultView;\n}\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveDocument(element) {\n  return element.ownerDocument;\n}\n/**\n *\n * @codeGenApi\n */\nfunction ɵɵresolveBody(element) {\n  return element.ownerDocument.body;\n}\n/**\n * The special delimiter we use to separate property names, prefixes, and suffixes\n * in property binding metadata. See storeBindingMetadata().\n *\n * We intentionally use the Unicode \"REPLACEMENT CHARACTER\" (U+FFFD) as a delimiter\n * because it is a very uncommon character that is unlikely to be part of a user's\n * property names or interpolation strings. If it is in fact used in a property\n * binding, DebugElement.properties will not return the correct value for that\n * binding. However, there should be no runtime effect for real applications.\n *\n * This character is typically rendered as a question mark inside of a diamond.\n * See https://en.wikipedia.org/wiki/Specials_(Unicode_block)\n *\n */\nconst INTERPOLATION_DELIMITER = `�`;\n/**\n * Unwrap a value which might be behind a closure (for forward declaration reasons).\n */\nfunction maybeUnwrapFn(value) {\n  if (value instanceof Function) {\n    return value();\n  } else {\n    return value;\n  }\n}\n\n/**\n * The max length of the string representation of a value in an error message\n */\nconst VALUE_STRING_LENGTH_LIMIT = 200;\n/** Verifies that a given type is a Standalone Component. */\nfunction assertStandaloneComponentType(type) {\n  assertComponentDef(type);\n  const componentDef = getComponentDef(type);\n  if (!componentDef.standalone) {\n    throw new RuntimeError(907 /* RuntimeErrorCode.TYPE_IS_NOT_STANDALONE */, `The ${stringifyForError(type)} component is not marked as standalone, ` + `but Angular expects to have a standalone component here. ` + `Please make sure the ${stringifyForError(type)} component has ` + `the \\`standalone: true\\` flag in the decorator.`);\n  }\n}\n/** Verifies whether a given type is a component */\nfunction assertComponentDef(type) {\n  if (!getComponentDef(type)) {\n    throw new RuntimeError(906 /* RuntimeErrorCode.MISSING_GENERATED_DEF */, `The ${stringifyForError(type)} is not an Angular component, ` + `make sure it has the \\`@Component\\` decorator.`);\n  }\n}\n/** Called when there are multiple component selectors that match a given node */\nfunction throwMultipleComponentError(tNode, first, second) {\n  throw new RuntimeError(-300 /* RuntimeErrorCode.MULTIPLE_COMPONENTS_MATCH */, `Multiple components match node with tagname ${tNode.value}: ` + `${stringifyForError(first)} and ` + `${stringifyForError(second)}`);\n}\n/** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */\nfunction throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName, lView) {\n  const hostComponentDef = getDeclarationComponentDef(lView);\n  const componentClassName = hostComponentDef?.type?.name;\n  const field = propName ? ` for '${propName}'` : '';\n  let msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value${field}: '${formatValue(oldValue)}'. Current value: '${formatValue(currValue)}'.${componentClassName ? ` Expression location: ${componentClassName} component` : ''}`;\n  if (creationMode) {\n    msg += ` It seems like the view has been created after its parent and its children have been dirty checked.` + ` Has it been created in a change detection hook?`;\n  }\n  throw new RuntimeError(-100 /* RuntimeErrorCode.EXPRESSION_CHANGED_AFTER_CHECKED */, msg);\n}\nfunction formatValue(value) {\n  let strValue = String(value);\n  // JSON.stringify will throw on circular references\n  try {\n    if (Array.isArray(value) || strValue === '[object Object]') {\n      strValue = JSON.stringify(value);\n    }\n  } catch (error) {}\n  return strValue.length > VALUE_STRING_LENGTH_LIMIT ? strValue.substring(0, VALUE_STRING_LENGTH_LIMIT) + '…' : strValue;\n}\nfunction constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {\n  const [propName, prefix, ...chunks] = meta.split(INTERPOLATION_DELIMITER);\n  let oldValue = prefix,\n    newValue = prefix;\n  for (let i = 0; i < chunks.length; i++) {\n    const slotIdx = rootIndex + i;\n    oldValue += `${lView[slotIdx]}${chunks[i]}`;\n    newValue += `${slotIdx === expressionIndex ? changedValue : lView[slotIdx]}${chunks[i]}`;\n  }\n  return {\n    propName,\n    oldValue,\n    newValue\n  };\n}\n/**\n * Constructs an object that contains details for the ExpressionChangedAfterItHasBeenCheckedError:\n * - property name (for property bindings or interpolations)\n * - old and new values, enriched using information from metadata\n *\n * More information on the metadata storage format can be found in `storePropertyBindingMetadata`\n * function description.\n */\nfunction getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {\n  const tData = lView[TVIEW].data;\n  const metadata = tData[bindingIndex];\n  if (typeof metadata === 'string') {\n    // metadata for property interpolation\n    if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {\n      return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);\n    }\n    // metadata for property binding\n    return {\n      propName: metadata,\n      oldValue,\n      newValue\n    };\n  }\n  // metadata is not available for this expression, check if this expression is a part of the\n  // property interpolation by going from the current binding index left and look for a string that\n  // contains INTERPOLATION_DELIMITER, the layout in tView.data for this case will look like this:\n  // [..., 'id�Prefix � and � suffix', null, null, null, ...]\n  if (metadata === null) {\n    let idx = bindingIndex - 1;\n    while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {\n      idx--;\n    }\n    const meta = tData[idx];\n    if (typeof meta === 'string') {\n      const matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g'));\n      // first interpolation delimiter separates property name from interpolation parts (in case of\n      // property interpolations), so we subtract one from total number of found delimiters\n      if (matches && matches.length - 1 > bindingIndex - idx) {\n        return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);\n      }\n    }\n  }\n  return {\n    propName: undefined,\n    oldValue,\n    newValue\n  };\n}\n\n/** Flags describing an input for a directive. */\nvar InputFlags;\n(function (InputFlags) {\n  InputFlags[InputFlags[\"None\"] = 0] = \"None\";\n  InputFlags[InputFlags[\"SignalBased\"] = 1] = \"SignalBased\";\n  InputFlags[InputFlags[\"HasDecoratorInputTransform\"] = 2] = \"HasDecoratorInputTransform\";\n})(InputFlags || (InputFlags = {}));\n\n/**\n * Flags for renderer-specific style modifiers.\n * @publicApi\n */\nvar RendererStyleFlags2;\n(function (RendererStyleFlags2) {\n  // TODO(misko): This needs to be refactored into a separate file so that it can be imported from\n  // `node_manipulation.ts` Currently doing the import cause resolution order to change and fails\n  // the tests. The work around is to have hard coded value in `node_manipulation.ts` for now.\n  /**\n   * Marks a style as important.\n   */\n  RendererStyleFlags2[RendererStyleFlags2[\"Important\"] = 1] = \"Important\";\n  /**\n   * Marks a style as using dash case naming (this-is-dash-case).\n   */\n  RendererStyleFlags2[RendererStyleFlags2[\"DashCase\"] = 2] = \"DashCase\";\n})(RendererStyleFlags2 || (RendererStyleFlags2 = {}));\nlet _icuContainerIterate;\n/**\n * Iterator which provides ability to visit all of the `TIcuContainerNode` root `RNode`s.\n */\nfunction icuContainerIterate(tIcuContainerNode, lView) {\n  return _icuContainerIterate(tIcuContainerNode, lView);\n}\n/**\n * Ensures that `IcuContainerVisitor`'s implementation is present.\n *\n * This function is invoked when i18n instruction comes across an ICU. The purpose is to allow the\n * bundler to tree shake ICU logic and only load it if ICU instruction is executed.\n */\nfunction ensureIcuContainerVisitorLoaded(loader) {\n  if (_icuContainerIterate === undefined) {\n    // Do not inline this function. We want to keep `ensureIcuContainerVisitorLoaded` light, so it\n    // can be inlined into call-site.\n    _icuContainerIterate = loader();\n  }\n}\n\n/**\n * NOTE: for performance reasons, the possible actions are inlined within the function instead of\n * being passed as an argument.\n */\nfunction applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {\n  // If this slot was allocated for a text node dynamically created by i18n, the text node itself\n  // won't be created until i18nApply() in the update block, so this node should be skipped.\n  // For more info, see \"ICU expressions should work inside an ngTemplateOutlet inside an ngFor\"\n  // in `i18n_spec.ts`.\n  if (lNodeToHandle != null) {\n    let lContainer;\n    let isComponent = false;\n    // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is\n    // wrapped in an array which needs to be unwrapped. We need to know if it is a component and if\n    // it has LContainer so that we can process all of those cases appropriately.\n    if (isLContainer(lNodeToHandle)) {\n      lContainer = lNodeToHandle;\n    } else if (isLView(lNodeToHandle)) {\n      isComponent = true;\n      ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');\n      lNodeToHandle = lNodeToHandle[HOST];\n    }\n    const rNode = unwrapRNode(lNodeToHandle);\n    if (action === 0 /* WalkTNodeTreeAction.Create */ && parent !== null) {\n      if (beforeNode == null) {\n        nativeAppendChild(renderer, parent, rNode);\n      } else {\n        nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n      }\n    } else if (action === 1 /* WalkTNodeTreeAction.Insert */ && parent !== null) {\n      nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);\n    } else if (action === 2 /* WalkTNodeTreeAction.Detach */) {\n      nativeRemoveNode(renderer, rNode, isComponent);\n    } else if (action === 3 /* WalkTNodeTreeAction.Destroy */) {\n      ngDevMode && ngDevMode.rendererDestroyNode++;\n      renderer.destroyNode(rNode);\n    }\n    if (lContainer != null) {\n      applyContainer(renderer, action, lContainer, parent, beforeNode);\n    }\n  }\n}\nfunction createTextNode(renderer, value) {\n  ngDevMode && ngDevMode.rendererCreateTextNode++;\n  ngDevMode && ngDevMode.rendererSetText++;\n  return renderer.createText(value);\n}\nfunction updateTextNode(renderer, rNode, value) {\n  ngDevMode && ngDevMode.rendererSetText++;\n  renderer.setValue(rNode, value);\n}\nfunction createCommentNode(renderer, value) {\n  ngDevMode && ngDevMode.rendererCreateComment++;\n  return renderer.createComment(escapeCommentText(value));\n}\n/**\n * Creates a native element from a tag name, using a renderer.\n * @param renderer A renderer to use\n * @param name the tag name\n * @param namespace Optional namespace for element.\n * @returns the element created\n */\nfunction createElementNode(renderer, name, namespace) {\n  ngDevMode && ngDevMode.rendererCreateElement++;\n  return renderer.createElement(name, namespace);\n}\n/**\n * Removes all DOM elements associated with a view.\n *\n * Because some root nodes of the view may be containers, we sometimes need\n * to propagate deeply into the nested containers to remove all elements in the\n * views beneath it.\n *\n * @param tView The `TView' of the `LView` from which elements should be added or removed\n * @param lView The view from which elements should be added or removed\n */\nfunction removeViewFromDOM(tView, lView) {\n  detachViewFromDOM(tView, lView);\n  lView[HOST] = null;\n  lView[T_HOST] = null;\n}\n/**\n * Adds all DOM elements associated with a view.\n *\n * Because some root nodes of the view may be containers, we sometimes need\n * to propagate deeply into the nested containers to add all elements in the\n * views beneath it.\n *\n * @param tView The `TView' of the `LView` from which elements should be added or removed\n * @param parentTNode The `TNode` where the `LView` should be attached to.\n * @param renderer Current renderer to use for DOM manipulations.\n * @param lView The view from which elements should be added or removed\n * @param parentNativeNode The parent `RElement` where it should be inserted into.\n * @param beforeNode The node before which elements should be added, if insert mode\n */\nfunction addViewToDOM(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {\n  lView[HOST] = parentNativeNode;\n  lView[T_HOST] = parentTNode;\n  applyView(tView, lView, renderer, 1 /* WalkTNodeTreeAction.Insert */, parentNativeNode, beforeNode);\n}\n/**\n * Detach a `LView` from the DOM by detaching its nodes.\n *\n * @param tView The `TView' of the `LView` to be detached\n * @param lView the `LView` to be detached.\n */\nfunction detachViewFromDOM(tView, lView) {\n  // When we remove a view from the DOM, we need to rerun afterRender hooks\n  // We don't necessarily needs to run change detection. DOM removal only requires\n  // change detection if animations are enabled (this notification is handled by animations).\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(10 /* NotificationSource.ViewDetachedFromDOM */);\n  applyView(tView, lView, lView[RENDERER], 2 /* WalkTNodeTreeAction.Detach */, null, null);\n}\n/**\n * Traverses down and up the tree of views and containers to remove listeners and\n * call onDestroy callbacks.\n *\n * Notes:\n *  - Because it's used for onDestroy calls, it needs to be bottom-up.\n *  - Must process containers instead of their views to avoid splicing\n *  when views are destroyed and re-added.\n *  - Using a while loop because it's faster than recursion\n *  - Destroy only called on movement to sibling or movement to parent (laterally or up)\n *\n *  @param rootView The view to destroy\n */\nfunction destroyViewTree(rootView) {\n  // If the view has no children, we can clean it up and return early.\n  let lViewOrLContainer = rootView[CHILD_HEAD];\n  if (!lViewOrLContainer) {\n    return cleanUpView(rootView[TVIEW], rootView);\n  }\n  while (lViewOrLContainer) {\n    let next = null;\n    if (isLView(lViewOrLContainer)) {\n      // If LView, traverse down to child.\n      next = lViewOrLContainer[CHILD_HEAD];\n    } else {\n      ngDevMode && assertLContainer(lViewOrLContainer);\n      // If container, traverse down to its first LView.\n      const firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];\n      if (firstView) next = firstView;\n    }\n    if (!next) {\n      // Only clean up view when moving to the side or up, as destroy hooks\n      // should be called in order from the bottom up.\n      while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {\n        if (isLView(lViewOrLContainer)) {\n          cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n        }\n        lViewOrLContainer = lViewOrLContainer[PARENT];\n      }\n      if (lViewOrLContainer === null) lViewOrLContainer = rootView;\n      if (isLView(lViewOrLContainer)) {\n        cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);\n      }\n      next = lViewOrLContainer && lViewOrLContainer[NEXT];\n    }\n    lViewOrLContainer = next;\n  }\n}\n/**\n * Inserts a view into a container.\n *\n * This adds the view to the container's array of active views in the correct\n * position. It also adds the view's elements to the DOM if the container isn't a\n * root node of another view (in that case, the view's elements will be added when\n * the container's parent view is added later).\n *\n * @param tView The `TView' of the `LView` to insert\n * @param lView The view to insert\n * @param lContainer The container into which the view should be inserted\n * @param index Which index in the container to insert the child view into\n */\nfunction insertView(tView, lView, lContainer, index) {\n  ngDevMode && assertLView(lView);\n  ngDevMode && assertLContainer(lContainer);\n  const indexInContainer = CONTAINER_HEADER_OFFSET + index;\n  const containerLength = lContainer.length;\n  if (index > 0) {\n    // This is a new view, we need to add it to the children.\n    lContainer[indexInContainer - 1][NEXT] = lView;\n  }\n  if (index < containerLength - CONTAINER_HEADER_OFFSET) {\n    lView[NEXT] = lContainer[indexInContainer];\n    addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);\n  } else {\n    lContainer.push(lView);\n    lView[NEXT] = null;\n  }\n  lView[PARENT] = lContainer;\n  // track views where declaration and insertion points are different\n  const declarationLContainer = lView[DECLARATION_LCONTAINER];\n  if (declarationLContainer !== null && lContainer !== declarationLContainer) {\n    trackMovedView(declarationLContainer, lView);\n  }\n  // notify query that a new view has been added\n  const lQueries = lView[QUERIES];\n  if (lQueries !== null) {\n    lQueries.insertView(tView);\n  }\n  updateAncestorTraversalFlagsOnAttach(lView);\n  // Sets the attached flag\n  lView[FLAGS] |= 128 /* LViewFlags.Attached */;\n}\n/**\n * Track views created from the declaration container (TemplateRef) and inserted into a\n * different LContainer or attached directly to ApplicationRef.\n */\nfunction trackMovedView(declarationContainer, lView) {\n  ngDevMode && assertDefined(lView, 'LView required');\n  ngDevMode && assertLContainer(declarationContainer);\n  const movedViews = declarationContainer[MOVED_VIEWS];\n  const parent = lView[PARENT];\n  ngDevMode && assertDefined(parent, 'missing parent');\n  if (isLView(parent)) {\n    declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;\n  } else {\n    const insertedComponentLView = parent[PARENT][DECLARATION_COMPONENT_VIEW];\n    ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');\n    const declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];\n    ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');\n    if (declaredComponentLView !== insertedComponentLView) {\n      // At this point the declaration-component is not same as insertion-component; this means that\n      // this is a transplanted view. Mark the declared lView as having transplanted views so that\n      // those views can participate in CD.\n      declarationContainer[FLAGS] |= LContainerFlags.HasTransplantedViews;\n    }\n  }\n  if (movedViews === null) {\n    declarationContainer[MOVED_VIEWS] = [lView];\n  } else {\n    movedViews.push(lView);\n  }\n}\nfunction detachMovedView(declarationContainer, lView) {\n  ngDevMode && assertLContainer(declarationContainer);\n  ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');\n  const movedViews = declarationContainer[MOVED_VIEWS];\n  const declarationViewIndex = movedViews.indexOf(lView);\n  movedViews.splice(declarationViewIndex, 1);\n}\n/**\n * Detaches a view from a container.\n *\n * This method removes the view from the container's array of active views. It also\n * removes the view's elements from the DOM.\n *\n * @param lContainer The container from which to detach a view\n * @param removeIndex The index of the view to detach\n * @returns Detached LView instance.\n */\nfunction detachView(lContainer, removeIndex) {\n  if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;\n  const indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;\n  const viewToDetach = lContainer[indexInContainer];\n  if (viewToDetach) {\n    const declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];\n    if (declarationLContainer !== null && declarationLContainer !== lContainer) {\n      detachMovedView(declarationLContainer, viewToDetach);\n    }\n    if (removeIndex > 0) {\n      lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];\n    }\n    const removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);\n    removeViewFromDOM(viewToDetach[TVIEW], viewToDetach);\n    // notify query that a view has been removed\n    const lQueries = removedLView[QUERIES];\n    if (lQueries !== null) {\n      lQueries.detachView(removedLView[TVIEW]);\n    }\n    viewToDetach[PARENT] = null;\n    viewToDetach[NEXT] = null;\n    // Unsets the attached flag\n    viewToDetach[FLAGS] &= ~128 /* LViewFlags.Attached */;\n  }\n  return viewToDetach;\n}\n/**\n * A standalone function which destroys an LView,\n * conducting clean up (e.g. removing listeners, calling onDestroys).\n *\n * @param tView The `TView' of the `LView` to be destroyed\n * @param lView The view to be destroyed.\n */\nfunction destroyLView(tView, lView) {\n  if (!(lView[FLAGS] & 256 /* LViewFlags.Destroyed */)) {\n    const renderer = lView[RENDERER];\n    if (renderer.destroyNode) {\n      applyView(tView, lView, renderer, 3 /* WalkTNodeTreeAction.Destroy */, null, null);\n    }\n    destroyViewTree(lView);\n  }\n}\n/**\n * Calls onDestroys hooks for all directives and pipes in a given view and then removes all\n * listeners. Listeners are removed as the last step so events delivered in the onDestroys hooks\n * can be propagated to @Output listeners.\n *\n * @param tView `TView` for the `LView` to clean up.\n * @param lView The LView to clean up\n */\nfunction cleanUpView(tView, lView) {\n  if (lView[FLAGS] & 256 /* LViewFlags.Destroyed */) {\n    return;\n  }\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    // Usually the Attached flag is removed when the view is detached from its parent, however\n    // if it's a root view, the flag won't be unset hence why we're also removing on destroy.\n    lView[FLAGS] &= ~128 /* LViewFlags.Attached */;\n    // Mark the LView as destroyed *before* executing the onDestroy hooks. An onDestroy hook\n    // runs arbitrary user code, which could include its own `viewRef.destroy()` (or similar). If\n    // We don't flag the view as destroyed before the hooks, this could lead to an infinite loop.\n    // This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is\n    // really more of an \"afterDestroy\" hook if you think about it.\n    lView[FLAGS] |= 256 /* LViewFlags.Destroyed */;\n    lView[REACTIVE_TEMPLATE_CONSUMER] && consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);\n    executeOnDestroys(tView, lView);\n    processCleanups(tView, lView);\n    // For component views only, the local renderer is destroyed at clean up time.\n    if (lView[TVIEW].type === 1 /* TViewType.Component */) {\n      ngDevMode && ngDevMode.rendererDestroy++;\n      lView[RENDERER].destroy();\n    }\n    const declarationContainer = lView[DECLARATION_LCONTAINER];\n    // we are dealing with an embedded view that is still inserted into a container\n    if (declarationContainer !== null && isLContainer(lView[PARENT])) {\n      // and this is a projected view\n      if (declarationContainer !== lView[PARENT]) {\n        detachMovedView(declarationContainer, lView);\n      }\n      // For embedded views still attached to a container: remove query result from this view.\n      const lQueries = lView[QUERIES];\n      if (lQueries !== null) {\n        lQueries.detachView(tView);\n      }\n    }\n    // Unregister the view once everything else has been cleaned up.\n    unregisterLView(lView);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n/** Removes listeners and unsubscribes from output subscriptions */\nfunction processCleanups(tView, lView) {\n  ngDevMode && assertNotReactive(processCleanups.name);\n  const tCleanup = tView.cleanup;\n  const lCleanup = lView[CLEANUP];\n  if (tCleanup !== null) {\n    for (let i = 0; i < tCleanup.length - 1; i += 2) {\n      if (typeof tCleanup[i] === 'string') {\n        // This is a native DOM listener. It will occupy 4 entries in the TCleanup array (hence i +=\n        // 2 at the end of this block).\n        const targetIdx = tCleanup[i + 3];\n        ngDevMode && assertNumber(targetIdx, 'cleanup target must be a number');\n        if (targetIdx >= 0) {\n          // Destroy anything whose teardown is a function call (e.g. QueryList, ModelSignal).\n          lCleanup[targetIdx]();\n        } else {\n          // Subscription\n          lCleanup[-targetIdx].unsubscribe();\n        }\n        i += 2;\n      } else {\n        // This is a cleanup function that is grouped with the index of its context\n        const context = lCleanup[tCleanup[i + 1]];\n        tCleanup[i].call(context);\n      }\n    }\n  }\n  if (lCleanup !== null) {\n    lView[CLEANUP] = null;\n  }\n  const destroyHooks = lView[ON_DESTROY_HOOKS];\n  if (destroyHooks !== null) {\n    // Reset the ON_DESTROY_HOOKS array before iterating over it to prevent hooks that unregister\n    // themselves from mutating the array during iteration.\n    lView[ON_DESTROY_HOOKS] = null;\n    for (let i = 0; i < destroyHooks.length; i++) {\n      const destroyHooksFn = destroyHooks[i];\n      ngDevMode && assertFunction(destroyHooksFn, 'Expecting destroy hook to be a function.');\n      destroyHooksFn();\n    }\n  }\n  // Destroy effects registered to the view. Many of these will have been processed above.\n  const effects = lView[EFFECTS];\n  if (effects !== null) {\n    lView[EFFECTS] = null;\n    for (const effect of effects) {\n      effect.destroy();\n    }\n  }\n}\n/** Calls onDestroy hooks for this view */\nfunction executeOnDestroys(tView, lView) {\n  ngDevMode && assertNotReactive(executeOnDestroys.name);\n  let destroyHooks;\n  if (tView != null && (destroyHooks = tView.destroyHooks) != null) {\n    for (let i = 0; i < destroyHooks.length; i += 2) {\n      const context = lView[destroyHooks[i]];\n      // Only call the destroy hook if the context has been requested.\n      if (!(context instanceof NodeInjectorFactory)) {\n        const toCall = destroyHooks[i + 1];\n        if (Array.isArray(toCall)) {\n          for (let j = 0; j < toCall.length; j += 2) {\n            const callContext = context[toCall[j]];\n            const hook = toCall[j + 1];\n            profiler(4 /* ProfilerEvent.LifecycleHookStart */, callContext, hook);\n            try {\n              hook.call(callContext);\n            } finally {\n              profiler(5 /* ProfilerEvent.LifecycleHookEnd */, callContext, hook);\n            }\n          }\n        } else {\n          profiler(4 /* ProfilerEvent.LifecycleHookStart */, context, toCall);\n          try {\n            toCall.call(context);\n          } finally {\n            profiler(5 /* ProfilerEvent.LifecycleHookEnd */, context, toCall);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Returns a native element if a node can be inserted into the given parent.\n *\n * There are two reasons why we may not be able to insert a element immediately.\n * - Projection: When creating a child content element of a component, we have to skip the\n *   insertion because the content of a component will be projected.\n *   `<component><content>delayed due to projection</content></component>`\n * - Parent container is disconnected: This can happen when we are inserting a view into\n *   parent container, which itself is disconnected. For example the parent container is part\n *   of a View which has not be inserted or is made for projection but has not been inserted\n *   into destination.\n *\n * @param tView: Current `TView`.\n * @param tNode: `TNode` for which we wish to retrieve render parent.\n * @param lView: Current `LView`.\n */\nfunction getParentRElement(tView, tNode, lView) {\n  return getClosestRElement(tView, tNode.parent, lView);\n}\n/**\n * Get closest `RElement` or `null` if it can't be found.\n *\n * If `TNode` is `TNodeType.Element` => return `RElement` at `LView[tNode.index]` location.\n * If `TNode` is `TNodeType.ElementContainer|IcuContain` => return the parent (recursively).\n * If `TNode` is `null` then return host `RElement`:\n *   - return `null` if projection\n *   - return `null` if parent container is disconnected (we have no parent.)\n *\n * @param tView: Current `TView`.\n * @param tNode: `TNode` for which we wish to retrieve `RElement` (or `null` if host element is\n *     needed).\n * @param lView: Current `LView`.\n * @returns `null` if the `RElement` can't be determined at this time (no parent / projection)\n */\nfunction getClosestRElement(tView, tNode, lView) {\n  let parentTNode = tNode;\n  // Skip over element and ICU containers as those are represented by a comment node and\n  // can't be used as a render parent. Also skip let declarations since they don't have a\n  // corresponding DOM node at all.\n  while (parentTNode !== null && parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {\n    tNode = parentTNode;\n    parentTNode = tNode.parent;\n  }\n  // If the parent tNode is null, then we are inserting across views: either into an embedded view\n  // or a component view.\n  if (parentTNode === null) {\n    // We are inserting a root element of the component view into the component host element and\n    // it should always be eager.\n    return lView[HOST];\n  } else {\n    ngDevMode && assertTNodeType(parentTNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);\n    const {\n      componentOffset\n    } = parentTNode;\n    if (componentOffset > -1) {\n      ngDevMode && assertTNodeForLView(parentTNode, lView);\n      const {\n        encapsulation\n      } = tView.data[parentTNode.directiveStart + componentOffset];\n      // We've got a parent which is an element in the current view. We just need to verify if the\n      // parent element is not a component. Component's content nodes are not inserted immediately\n      // because they will be projected, and so doing insert at this point would be wasteful.\n      // Since the projection would then move it to its final destination. Note that we can't\n      // make this assumption when using the Shadow DOM, because the native projection placeholders\n      // (<content> or <slot>) have to be in place as elements are being inserted.\n      if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {\n        return null;\n      }\n    }\n    return getNativeByTNode(parentTNode, lView);\n  }\n}\n/**\n * Inserts a native node before another native node for a given parent.\n * This is a utility function that can be used when native nodes were determined.\n */\nfunction nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {\n  ngDevMode && ngDevMode.rendererInsertBefore++;\n  renderer.insertBefore(parent, child, beforeNode, isMove);\n}\nfunction nativeAppendChild(renderer, parent, child) {\n  ngDevMode && ngDevMode.rendererAppendChild++;\n  ngDevMode && assertDefined(parent, 'parent node must be defined');\n  renderer.appendChild(parent, child);\n}\nfunction nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {\n  if (beforeNode !== null) {\n    nativeInsertBefore(renderer, parent, child, beforeNode, isMove);\n  } else {\n    nativeAppendChild(renderer, parent, child);\n  }\n}\n/**\n * Returns a native parent of a given native node.\n */\nfunction nativeParentNode(renderer, node) {\n  return renderer.parentNode(node);\n}\n/**\n * Returns a native sibling of a given native node.\n */\nfunction nativeNextSibling(renderer, node) {\n  return renderer.nextSibling(node);\n}\n/**\n * Find a node in front of which `currentTNode` should be inserted.\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * takes `TNode.insertBeforeIndex` into account if i18n code has been invoked.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {\n  return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);\n}\n/**\n * Find a node in front of which `currentTNode` should be inserted. (Does not take i18n into\n * account)\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * does not take `TNode.insertBeforeIndex` into account.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {\n  if (parentTNode.type & (8 /* TNodeType.ElementContainer */ | 32 /* TNodeType.Icu */)) {\n    return getNativeByTNode(parentTNode, lView);\n  }\n  return null;\n}\n/**\n * Tree shakable boundary for `getInsertInFrontOfRNodeWithI18n` function.\n *\n * This function will only be set if i18n code runs.\n */\nlet _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;\n/**\n * Tree shakable boundary for `processI18nInsertBefore` function.\n *\n * This function will only be set if i18n code runs.\n */\nlet _processI18nInsertBefore;\nfunction setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {\n  _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;\n  _processI18nInsertBefore = processI18nInsertBefore;\n}\n/**\n * Appends the `child` native node (or a collection of nodes) to the `parent`.\n *\n * @param tView The `TView' to be appended\n * @param lView The current LView\n * @param childRNode The native child (or children) that should be appended\n * @param childTNode The TNode of the child element\n */\nfunction appendChild(tView, lView, childRNode, childTNode) {\n  const parentRNode = getParentRElement(tView, childTNode, lView);\n  const renderer = lView[RENDERER];\n  const parentTNode = childTNode.parent || lView[T_HOST];\n  const anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);\n  if (parentRNode != null) {\n    if (Array.isArray(childRNode)) {\n      for (let i = 0; i < childRNode.length; i++) {\n        nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);\n      }\n    } else {\n      nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);\n    }\n  }\n  _processI18nInsertBefore !== undefined && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);\n}\n/**\n * Returns the first native node for a given LView, starting from the provided TNode.\n *\n * Native nodes are returned in the order in which those appear in the native tree (DOM).\n */\nfunction getFirstNativeNode(lView, tNode) {\n  if (tNode !== null) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */ | 16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */);\n    const tNodeType = tNode.type;\n    if (tNodeType & 3 /* TNodeType.AnyRNode */) {\n      return getNativeByTNode(tNode, lView);\n    } else if (tNodeType & 4 /* TNodeType.Container */) {\n      return getBeforeNodeForView(-1, lView[tNode.index]);\n    } else if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n      const elIcuContainerChild = tNode.child;\n      if (elIcuContainerChild !== null) {\n        return getFirstNativeNode(lView, elIcuContainerChild);\n      } else {\n        const rNodeOrLContainer = lView[tNode.index];\n        if (isLContainer(rNodeOrLContainer)) {\n          return getBeforeNodeForView(-1, rNodeOrLContainer);\n        } else {\n          return unwrapRNode(rNodeOrLContainer);\n        }\n      }\n    } else if (tNodeType & 128 /* TNodeType.LetDeclaration */) {\n      return getFirstNativeNode(lView, tNode.next);\n    } else if (tNodeType & 32 /* TNodeType.Icu */) {\n      let nextRNode = icuContainerIterate(tNode, lView);\n      let rNode = nextRNode();\n      // If the ICU container has no nodes, than we use the ICU anchor as the node.\n      return rNode || unwrapRNode(lView[tNode.index]);\n    } else {\n      const projectionNodes = getProjectionNodes(lView, tNode);\n      if (projectionNodes !== null) {\n        if (Array.isArray(projectionNodes)) {\n          return projectionNodes[0];\n        }\n        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n        ngDevMode && assertParentView(parentView);\n        return getFirstNativeNode(parentView, projectionNodes);\n      } else {\n        return getFirstNativeNode(lView, tNode.next);\n      }\n    }\n  }\n  return null;\n}\nfunction getProjectionNodes(lView, tNode) {\n  if (tNode !== null) {\n    const componentView = lView[DECLARATION_COMPONENT_VIEW];\n    const componentHost = componentView[T_HOST];\n    const slotIdx = tNode.projection;\n    ngDevMode && assertProjectionSlots(lView);\n    return componentHost.projection[slotIdx];\n  }\n  return null;\n}\nfunction getBeforeNodeForView(viewIndexInContainer, lContainer) {\n  const nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;\n  if (nextViewIndex < lContainer.length) {\n    const lView = lContainer[nextViewIndex];\n    const firstTNodeOfView = lView[TVIEW].firstChild;\n    if (firstTNodeOfView !== null) {\n      return getFirstNativeNode(lView, firstTNodeOfView);\n    }\n  }\n  return lContainer[NATIVE];\n}\n/**\n * Removes a native node itself using a given renderer. To remove the node we are looking up its\n * parent from the native tree as not all platforms / browsers support the equivalent of\n * node.remove().\n *\n * @param renderer A renderer to be used\n * @param rNode The native node that should be removed\n * @param isHostElement A flag indicating if a node to be removed is a host of a component.\n */\nfunction nativeRemoveNode(renderer, rNode, isHostElement) {\n  ngDevMode && ngDevMode.rendererRemoveNode++;\n  renderer.removeChild(null, rNode, isHostElement);\n}\n/**\n * Clears the contents of a given RElement.\n *\n * @param rElement the native RElement to be cleared\n */\nfunction clearElementContents(rElement) {\n  rElement.textContent = '';\n}\n/**\n * Performs the operation of `action` on the node. Typically this involves inserting or removing\n * nodes on the LView or projection boundary.\n */\nfunction applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {\n  while (tNode != null) {\n    ngDevMode && assertTNodeForLView(tNode, lView);\n    // Let declarations don't have corresponding DOM nodes so we skip over them.\n    if (tNode.type === 128 /* TNodeType.LetDeclaration */) {\n      tNode = tNode.next;\n      continue;\n    }\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);\n    const rawSlotValue = lView[tNode.index];\n    const tNodeType = tNode.type;\n    if (isProjection) {\n      if (action === 0 /* WalkTNodeTreeAction.Create */) {\n        rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);\n        tNode.flags |= 2 /* TNodeFlags.isProjected */;\n      }\n    }\n    if ((tNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {\n      if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n        applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      } else if (tNodeType & 32 /* TNodeType.Icu */) {\n        const nextRNode = icuContainerIterate(tNode, lView);\n        let rNode;\n        while (rNode = nextRNode()) {\n          applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);\n        }\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      } else if (tNodeType & 16 /* TNodeType.Projection */) {\n        applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);\n      } else {\n        ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */);\n        applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);\n      }\n    }\n    tNode = isProjection ? tNode.projectionNext : tNode.next;\n  }\n}\nfunction applyView(tView, lView, renderer, action, parentRElement, beforeNode) {\n  applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);\n}\n/**\n * `applyProjection` performs operation on the projection.\n *\n * Inserting a projection requires us to locate the projected nodes from the parent component. The\n * complication is that those nodes themselves could be re-projected from their parent component.\n *\n * @param tView The `TView` of `LView` which needs to be inserted, detached, destroyed\n * @param lView The `LView` which needs to be inserted, detached, destroyed.\n * @param tProjectionNode node to project\n */\nfunction applyProjection(tView, lView, tProjectionNode) {\n  const renderer = lView[RENDERER];\n  const parentRNode = getParentRElement(tView, tProjectionNode, lView);\n  const parentTNode = tProjectionNode.parent || lView[T_HOST];\n  let beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);\n  applyProjectionRecursive(renderer, 0 /* WalkTNodeTreeAction.Create */, lView, tProjectionNode, parentRNode, beforeNode);\n}\n/**\n * `applyProjectionRecursive` performs operation on the projection specified by `action` (insert,\n * detach, destroy)\n *\n * Inserting a projection requires us to locate the projected nodes from the parent component. The\n * complication is that those nodes themselves could be re-projected from their parent component.\n *\n * @param renderer Render to use\n * @param action action to perform (insert, detach, destroy)\n * @param lView The LView which needs to be inserted, detached, destroyed.\n * @param tProjectionNode node to project\n * @param parentRElement parent DOM element for insertion/removal.\n * @param beforeNode Before which node the insertions should happen.\n */\nfunction applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {\n  const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n  const componentNode = componentLView[T_HOST];\n  ngDevMode && assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');\n  const nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];\n  if (Array.isArray(nodeToProjectOrRNodes)) {\n    // This should not exist, it is a bit of a hack. When we bootstrap a top level node and we\n    // need to support passing projectable nodes, so we cheat and put them in the TNode\n    // of the Host TView. (Yes we put instance info at the T Level). We can get away with it\n    // because we know that TView is not shared and therefore it will not be a problem.\n    // This should be refactored and cleaned up.\n    for (let i = 0; i < nodeToProjectOrRNodes.length; i++) {\n      const rNode = nodeToProjectOrRNodes[i];\n      applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);\n    }\n  } else {\n    let nodeToProject = nodeToProjectOrRNodes;\n    const projectedComponentLView = componentLView[PARENT];\n    // If a parent <ng-content> is located within a skip hydration block,\n    // annotate an actual node that is being projected with the same flag too.\n    if (hasInSkipHydrationBlockFlag(tProjectionNode)) {\n      nodeToProject.flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;\n    }\n    applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);\n  }\n}\n/**\n * `applyContainer` performs an operation on the container and its views as specified by\n * `action` (insert, detach, destroy)\n *\n * Inserting a Container is complicated by the fact that the container may have Views which\n * themselves have containers or projections.\n *\n * @param renderer Renderer to use\n * @param action action to perform (insert, detach, destroy)\n * @param lContainer The LContainer which needs to be inserted, detached, destroyed.\n * @param parentRElement parent DOM element for insertion/removal.\n * @param beforeNode Before which node the insertions should happen.\n */\nfunction applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {\n  ngDevMode && assertLContainer(lContainer);\n  const anchor = lContainer[NATIVE]; // LContainer has its own before node.\n  const native = unwrapRNode(lContainer);\n  // An LContainer can be created dynamically on any node by injecting ViewContainerRef.\n  // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor\n  // node (comment in the DOM) that will be different from the LContainer's host node. In this\n  // particular case we need to execute action on 2 nodes:\n  // - container's host node (this is done in the executeActionOnElementOrContainer)\n  // - container's host node (this is done here)\n  if (anchor !== native) {\n    // This is very strange to me (Misko). I would expect that the native is same as anchor. I\n    // don't see a reason why they should be different, but they are.\n    //\n    // If they are we need to process the second anchor as well.\n    applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);\n  }\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const lView = lContainer[i];\n    applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);\n  }\n}\n/**\n * Writes class/style to element.\n *\n * @param renderer Renderer to use.\n * @param isClassBased `true` if it should be written to `class` (`false` to write to `style`)\n * @param rNode The Node to write to.\n * @param prop Property to write to. This would be the class/style name.\n * @param value Value to write. If `null`/`undefined`/`false` this is considered a remove (set/add\n *        otherwise).\n */\nfunction applyStyling(renderer, isClassBased, rNode, prop, value) {\n  if (isClassBased) {\n    // We actually want JS true/false here because any truthy value should add the class\n    if (!value) {\n      ngDevMode && ngDevMode.rendererRemoveClass++;\n      renderer.removeClass(rNode, prop);\n    } else {\n      ngDevMode && ngDevMode.rendererAddClass++;\n      renderer.addClass(rNode, prop);\n    }\n  } else {\n    let flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n    if (value == null /** || value === undefined */) {\n      ngDevMode && ngDevMode.rendererRemoveStyle++;\n      renderer.removeStyle(rNode, prop, flags);\n    } else {\n      // A value is important if it ends with `!important`. The style\n      // parser strips any semicolons at the end of the value.\n      const isImportant = typeof value === 'string' ? value.endsWith('!important') : false;\n      if (isImportant) {\n        // !important has to be stripped from the value for it to be valid.\n        value = value.slice(0, -10);\n        flags |= RendererStyleFlags2.Important;\n      }\n      ngDevMode && ngDevMode.rendererSetStyle++;\n      renderer.setStyle(rNode, prop, value, flags);\n    }\n  }\n}\n/**\n * Write `cssText` to `RElement`.\n *\n * This function does direct write without any reconciliation. Used for writing initial values, so\n * that static styling values do not pull in the style parser.\n *\n * @param renderer Renderer to use\n * @param element The element which needs to be updated.\n * @param newValue The new class list to write.\n */\nfunction writeDirectStyle(renderer, element, newValue) {\n  ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n  renderer.setAttribute(element, 'style', newValue);\n  ngDevMode && ngDevMode.rendererSetStyle++;\n}\n/**\n * Write `className` to `RElement`.\n *\n * This function does direct write without any reconciliation. Used for writing initial values, so\n * that static styling values do not pull in the style parser.\n *\n * @param renderer Renderer to use\n * @param element The element which needs to be updated.\n * @param newValue The new class list to write.\n */\nfunction writeDirectClass(renderer, element, newValue) {\n  ngDevMode && assertString(newValue, \"'newValue' should be a string\");\n  if (newValue === '') {\n    // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.\n    renderer.removeAttribute(element, 'class');\n  } else {\n    renderer.setAttribute(element, 'class', newValue);\n  }\n  ngDevMode && ngDevMode.rendererSetClassName++;\n}\n/** Sets up the static DOM attributes on an `RNode`. */\nfunction setupStaticAttributes(renderer, element, tNode) {\n  const {\n    mergedAttrs,\n    classes,\n    styles\n  } = tNode;\n  if (mergedAttrs !== null) {\n    setUpAttributes(renderer, element, mergedAttrs);\n  }\n  if (classes !== null) {\n    writeDirectClass(renderer, element, classes);\n  }\n  if (styles !== null) {\n    writeDirectStyle(renderer, element, styles);\n  }\n}\n\n/**\n * Returns an index of `classToSearch` in `className` taking token boundaries into account.\n *\n * `classIndexOf('AB A', 'A', 0)` will be 3 (not 0 since `AB!==A`)\n *\n * @param className A string containing classes (whitespace separated)\n * @param classToSearch A class name to locate\n * @param startingIndex Starting location of search\n * @returns an index of the located class (or -1 if not found)\n */\nfunction classIndexOf(className, classToSearch, startingIndex) {\n  ngDevMode && assertNotEqual(classToSearch, '', 'can not look for \"\" string.');\n  let end = className.length;\n  while (true) {\n    const foundIndex = className.indexOf(classToSearch, startingIndex);\n    if (foundIndex === -1) return foundIndex;\n    if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32 /* CharCode.SPACE */) {\n      // Ensure that it has leading whitespace\n      const length = classToSearch.length;\n      if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32 /* CharCode.SPACE */) {\n        // Ensure that it has trailing whitespace\n        return foundIndex;\n      }\n    }\n    // False positive, keep searching from where we left off.\n    startingIndex = foundIndex + 1;\n  }\n}\nconst NG_TEMPLATE_SELECTOR = 'ng-template';\n/**\n * Search the `TAttributes` to see if it contains `cssClassToMatch` (case insensitive)\n *\n * @param tNode static data of the node to match\n * @param attrs `TAttributes` to search through.\n * @param cssClassToMatch class to match (lowercase)\n * @param isProjectionMode Whether or not class matching should look into the attribute `class` in\n *    addition to the `AttributeMarker.Classes`.\n */\nfunction isCssClassMatching(tNode, attrs, cssClassToMatch, isProjectionMode) {\n  ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');\n  let i = 0;\n  if (isProjectionMode) {\n    for (; i < attrs.length && typeof attrs[i] === 'string'; i += 2) {\n      // Search for an implicit `class` attribute and check if its value matches `cssClassToMatch`.\n      if (attrs[i] === 'class' && classIndexOf(attrs[i + 1].toLowerCase(), cssClassToMatch, 0) !== -1) {\n        return true;\n      }\n    }\n  } else if (isInlineTemplate(tNode)) {\n    // Matching directives (i.e. when not matching for projection mode) should not consider the\n    // class bindings that are present on inline templates, as those class bindings only target\n    // the root node of the template, not the template itself.\n    return false;\n  }\n  // Resume the search for classes after the `Classes` marker.\n  i = attrs.indexOf(1 /* AttributeMarker.Classes */, i);\n  if (i > -1) {\n    // We found the classes section. Start searching for the class.\n    let item;\n    while (++i < attrs.length && typeof (item = attrs[i]) === 'string') {\n      if (item.toLowerCase() === cssClassToMatch) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n/**\n * Checks whether the `tNode` represents an inline template (e.g. `*ngFor`).\n *\n * @param tNode current TNode\n */\nfunction isInlineTemplate(tNode) {\n  return tNode.type === 4 /* TNodeType.Container */ && tNode.value !== NG_TEMPLATE_SELECTOR;\n}\n/**\n * Function that checks whether a given tNode matches tag-based selector and has a valid type.\n *\n * Matching can be performed in 2 modes: projection mode (when we project nodes) and regular\n * directive matching mode:\n * - in the \"directive matching\" mode we do _not_ take TContainer's tagName into account if it is\n * different from NG_TEMPLATE_SELECTOR (value different from NG_TEMPLATE_SELECTOR indicates that a\n * tag name was extracted from * syntax so we would match the same directive twice);\n * - in the \"projection\" mode, we use a tag name potentially extracted from the * syntax processing\n * (applicable to TNodeType.Container only).\n */\nfunction hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {\n  const tagNameToCompare = tNode.type === 4 /* TNodeType.Container */ && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;\n  return currentSelector === tagNameToCompare;\n}\n/**\n * A utility function to match an Ivy node static data against a simple CSS selector\n *\n * @param tNode static data of the node to match\n * @param selector The selector to try matching against the node.\n * @param isProjectionMode if `true` we are matching for content projection, otherwise we are doing\n * directive matching.\n * @returns true if node matches the selector.\n */\nfunction isNodeMatchingSelector(tNode, selector, isProjectionMode) {\n  ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');\n  let mode = 4 /* SelectorFlags.ELEMENT */;\n  const nodeAttrs = tNode.attrs;\n  // Find the index of first attribute that has no value, only a name.\n  const nameOnlyMarkerIdx = nodeAttrs !== null ? getNameOnlyMarkerIndex(nodeAttrs) : 0;\n  // When processing \":not\" selectors, we skip to the next \":not\" if the\n  // current one doesn't match\n  let skipToNextSelector = false;\n  for (let i = 0; i < selector.length; i++) {\n    const current = selector[i];\n    if (typeof current === 'number') {\n      // If we finish processing a :not selector and it hasn't failed, return false\n      if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {\n        return false;\n      }\n      // If we are skipping to the next :not() and this mode flag is positive,\n      // it's a part of the current :not() selector, and we should keep skipping\n      if (skipToNextSelector && isPositive(current)) continue;\n      skipToNextSelector = false;\n      mode = current | mode & 1 /* SelectorFlags.NOT */;\n      continue;\n    }\n    if (skipToNextSelector) continue;\n    if (mode & 4 /* SelectorFlags.ELEMENT */) {\n      mode = 2 /* SelectorFlags.ATTRIBUTE */ | mode & 1 /* SelectorFlags.NOT */;\n      if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === '' && selector.length === 1) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n      }\n    } else if (mode & 8 /* SelectorFlags.CLASS */) {\n      if (nodeAttrs === null || !isCssClassMatching(tNode, nodeAttrs, current, isProjectionMode)) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n      }\n    } else {\n      const selectorAttrValue = selector[++i];\n      const attrIndexInNode = findAttrIndexInNode(current, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);\n      if (attrIndexInNode === -1) {\n        if (isPositive(mode)) return false;\n        skipToNextSelector = true;\n        continue;\n      }\n      if (selectorAttrValue !== '') {\n        let nodeAttrValue;\n        if (attrIndexInNode > nameOnlyMarkerIdx) {\n          nodeAttrValue = '';\n        } else {\n          ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0 /* AttributeMarker.NamespaceURI */, 'We do not match directives on namespaced attributes');\n          // we lowercase the attribute value to be able to match\n          // selectors without case-sensitivity\n          // (selectors are already in lowercase when generated)\n          nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();\n        }\n        if (mode & 2 /* SelectorFlags.ATTRIBUTE */ && selectorAttrValue !== nodeAttrValue) {\n          if (isPositive(mode)) return false;\n          skipToNextSelector = true;\n        }\n      }\n    }\n  }\n  return isPositive(mode) || skipToNextSelector;\n}\nfunction isPositive(mode) {\n  return (mode & 1 /* SelectorFlags.NOT */) === 0;\n}\n/**\n * Examines the attribute's definition array for a node to find the index of the\n * attribute that matches the given `name`.\n *\n * NOTE: This will not match namespaced attributes.\n *\n * Attribute matching depends upon `isInlineTemplate` and `isProjectionMode`.\n * The following table summarizes which types of attributes we attempt to match:\n *\n * ===========================================================================================================\n * Modes                   | Normal Attributes | Bindings Attributes | Template Attributes | I18n\n * Attributes\n * ===========================================================================================================\n * Inline + Projection     | YES               | YES                 | NO                  | YES\n * -----------------------------------------------------------------------------------------------------------\n * Inline + Directive      | NO                | NO                  | YES                 | NO\n * -----------------------------------------------------------------------------------------------------------\n * Non-inline + Projection | YES               | YES                 | NO                  | YES\n * -----------------------------------------------------------------------------------------------------------\n * Non-inline + Directive  | YES               | YES                 | NO                  | YES\n * ===========================================================================================================\n *\n * @param name the name of the attribute to find\n * @param attrs the attribute array to examine\n * @param isInlineTemplate true if the node being matched is an inline template (e.g. `*ngFor`)\n * rather than a manually expanded template node (e.g `<ng-template>`).\n * @param isProjectionMode true if we are matching against content projection otherwise we are\n * matching against directives.\n */\nfunction findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {\n  if (attrs === null) return -1;\n  let i = 0;\n  if (isProjectionMode || !isInlineTemplate) {\n    let bindingsMode = false;\n    while (i < attrs.length) {\n      const maybeAttrName = attrs[i];\n      if (maybeAttrName === name) {\n        return i;\n      } else if (maybeAttrName === 3 /* AttributeMarker.Bindings */ || maybeAttrName === 6 /* AttributeMarker.I18n */) {\n        bindingsMode = true;\n      } else if (maybeAttrName === 1 /* AttributeMarker.Classes */ || maybeAttrName === 2 /* AttributeMarker.Styles */) {\n        let value = attrs[++i];\n        // We should skip classes here because we have a separate mechanism for\n        // matching classes in projection mode.\n        while (typeof value === 'string') {\n          value = attrs[++i];\n        }\n        continue;\n      } else if (maybeAttrName === 4 /* AttributeMarker.Template */) {\n        // We do not care about Template attributes in this scenario.\n        break;\n      } else if (maybeAttrName === 0 /* AttributeMarker.NamespaceURI */) {\n        // Skip the whole namespaced attribute and value. This is by design.\n        i += 4;\n        continue;\n      }\n      // In binding mode there are only names, rather than name-value pairs.\n      i += bindingsMode ? 1 : 2;\n    }\n    // We did not match the attribute\n    return -1;\n  } else {\n    return matchTemplateAttribute(attrs, name);\n  }\n}\nfunction isNodeMatchingSelectorList(tNode, selector, isProjectionMode = false) {\n  for (let i = 0; i < selector.length; i++) {\n    if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction getProjectAsAttrValue(tNode) {\n  const nodeAttrs = tNode.attrs;\n  if (nodeAttrs != null) {\n    const ngProjectAsAttrIdx = nodeAttrs.indexOf(5 /* AttributeMarker.ProjectAs */);\n    // only check for ngProjectAs in attribute names, don't accidentally match attribute's value\n    // (attribute names are stored at even indexes)\n    if ((ngProjectAsAttrIdx & 1) === 0) {\n      return nodeAttrs[ngProjectAsAttrIdx + 1];\n    }\n  }\n  return null;\n}\nfunction getNameOnlyMarkerIndex(nodeAttrs) {\n  for (let i = 0; i < nodeAttrs.length; i++) {\n    const nodeAttr = nodeAttrs[i];\n    if (isNameOnlyAttributeMarker(nodeAttr)) {\n      return i;\n    }\n  }\n  return nodeAttrs.length;\n}\nfunction matchTemplateAttribute(attrs, name) {\n  let i = attrs.indexOf(4 /* AttributeMarker.Template */);\n  if (i > -1) {\n    i++;\n    while (i < attrs.length) {\n      const attr = attrs[i];\n      // Return in case we checked all template attrs and are switching to the next section in the\n      // attrs array (that starts with a number that represents an attribute marker).\n      if (typeof attr === 'number') return -1;\n      if (attr === name) return i;\n      i++;\n    }\n  }\n  return -1;\n}\n/**\n * Checks whether a selector is inside a CssSelectorList\n * @param selector Selector to be checked.\n * @param list List in which to look for the selector.\n */\nfunction isSelectorInSelectorList(selector, list) {\n  selectorListLoop: for (let i = 0; i < list.length; i++) {\n    const currentSelectorInList = list[i];\n    if (selector.length !== currentSelectorInList.length) {\n      continue;\n    }\n    for (let j = 0; j < selector.length; j++) {\n      if (selector[j] !== currentSelectorInList[j]) {\n        continue selectorListLoop;\n      }\n    }\n    return true;\n  }\n  return false;\n}\nfunction maybeWrapInNotSelector(isNegativeMode, chunk) {\n  return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;\n}\nfunction stringifyCSSSelector(selector) {\n  let result = selector[0];\n  let i = 1;\n  let mode = 2 /* SelectorFlags.ATTRIBUTE */;\n  let currentChunk = '';\n  let isNegativeMode = false;\n  while (i < selector.length) {\n    let valueOrMarker = selector[i];\n    if (typeof valueOrMarker === 'string') {\n      if (mode & 2 /* SelectorFlags.ATTRIBUTE */) {\n        const attrValue = selector[++i];\n        currentChunk += '[' + valueOrMarker + (attrValue.length > 0 ? '=\"' + attrValue + '\"' : '') + ']';\n      } else if (mode & 8 /* SelectorFlags.CLASS */) {\n        currentChunk += '.' + valueOrMarker;\n      } else if (mode & 4 /* SelectorFlags.ELEMENT */) {\n        currentChunk += ' ' + valueOrMarker;\n      }\n    } else {\n      //\n      // Append current chunk to the final result in case we come across SelectorFlag, which\n      // indicates that the previous section of a selector is over. We need to accumulate content\n      // between flags to make sure we wrap the chunk later in :not() selector if needed, e.g.\n      // ```\n      //  ['', Flags.CLASS, '.classA', Flags.CLASS | Flags.NOT, '.classB', '.classC']\n      // ```\n      // should be transformed to `.classA :not(.classB .classC)`.\n      //\n      // Note: for negative selector part, we accumulate content between flags until we find the\n      // next negative flag. This is needed to support a case where `:not()` rule contains more than\n      // one chunk, e.g. the following selector:\n      // ```\n      //  ['', Flags.ELEMENT | Flags.NOT, 'p', Flags.CLASS, 'foo', Flags.CLASS | Flags.NOT, 'bar']\n      // ```\n      // should be stringified to `:not(p.foo) :not(.bar)`\n      //\n      if (currentChunk !== '' && !isPositive(valueOrMarker)) {\n        result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n        currentChunk = '';\n      }\n      mode = valueOrMarker;\n      // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative\n      // mode is maintained for remaining chunks of a selector.\n      isNegativeMode = isNegativeMode || !isPositive(mode);\n    }\n    i++;\n  }\n  if (currentChunk !== '') {\n    result += maybeWrapInNotSelector(isNegativeMode, currentChunk);\n  }\n  return result;\n}\n/**\n * Generates string representation of CSS selector in parsed form.\n *\n * ComponentDef and DirectiveDef are generated with the selector in parsed form to avoid doing\n * additional parsing at runtime (for example, for directive matching). However in some cases (for\n * example, while bootstrapping a component), a string version of the selector is required to query\n * for the host element on the page. This function takes the parsed form of a selector and returns\n * its string representation.\n *\n * @param selectorList selector in parsed form\n * @returns string representation of a given selector\n */\nfunction stringifyCSSSelectorList(selectorList) {\n  return selectorList.map(stringifyCSSSelector).join(',');\n}\n/**\n * Extracts attributes and classes information from a given CSS selector.\n *\n * This function is used while creating a component dynamically. In this case, the host element\n * (that is created dynamically) should contain attributes and classes specified in component's CSS\n * selector.\n *\n * @param selector CSS selector in parsed form (in a form of array)\n * @returns object with `attrs` and `classes` fields that contain extracted information\n */\nfunction extractAttrsAndClassesFromSelector(selector) {\n  const attrs = [];\n  const classes = [];\n  let i = 1;\n  let mode = 2 /* SelectorFlags.ATTRIBUTE */;\n  while (i < selector.length) {\n    let valueOrMarker = selector[i];\n    if (typeof valueOrMarker === 'string') {\n      if (mode === 2 /* SelectorFlags.ATTRIBUTE */) {\n        if (valueOrMarker !== '') {\n          attrs.push(valueOrMarker, selector[++i]);\n        }\n      } else if (mode === 8 /* SelectorFlags.CLASS */) {\n        classes.push(valueOrMarker);\n      }\n    } else {\n      // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative\n      // mode is maintained for remaining chunks of a selector. Since attributes and classes are\n      // extracted only for \"positive\" part of the selector, we can stop here.\n      if (!isPositive(mode)) break;\n      mode = valueOrMarker;\n    }\n    i++;\n  }\n  return {\n    attrs,\n    classes\n  };\n}\n\n/** A special value which designates that a value has not changed. */\nconst NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? {\n  __brand__: 'NO_CHANGE'\n} : {};\n\n/**\n * Advances to an element for later binding instructions.\n *\n * Used in conjunction with instructions like {@link property} to act on elements with specified\n * indices, for example those created with {@link element} or {@link elementStart}.\n *\n * ```ts\n * (rf: RenderFlags, ctx: any) => {\n *   if (rf & 1) {\n *     text(0, 'Hello');\n *     text(1, 'Goodbye')\n *     element(2, 'div');\n *   }\n *   if (rf & 2) {\n *     advance(2); // Advance twice to the <div>.\n *     property('title', 'test');\n *   }\n *  }\n * ```\n * @param delta Number of elements to advance forwards by.\n *\n * @codeGenApi\n */\nfunction ɵɵadvance(delta = 1) {\n  ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');\n  selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());\n}\nfunction selectIndexInternal(tView, lView, index, checkNoChangesMode) {\n  ngDevMode && assertIndexInDeclRange(lView[TVIEW], index);\n  // Flush the initial hooks for elements in the view that have been added up to this point.\n  // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n  if (!checkNoChangesMode) {\n    const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;\n    if (hooksInitPhaseCompleted) {\n      const preOrderCheckHooks = tView.preOrderCheckHooks;\n      if (preOrderCheckHooks !== null) {\n        executeCheckHooks(lView, preOrderCheckHooks, index);\n      }\n    } else {\n      const preOrderHooks = tView.preOrderHooks;\n      if (preOrderHooks !== null) {\n        executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, index);\n      }\n    }\n  }\n  // We must set the selected index *after* running the hooks, because hooks may have side-effects\n  // that cause other template functions to run, thus updating the selected index, which is global\n  // state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index\n  // will be altered by the time we leave the `ɵɵadvance` instruction.\n  setSelectedIndex(index);\n}\nfunction ɵɵdirectiveInject(token, flags = InjectFlags.Default) {\n  const lView = getLView();\n  // Fall back to inject() if view hasn't been created. This situation can happen in tests\n  // if inject utilities are used before bootstrapping.\n  if (lView === null) {\n    // Verify that we will not get into infinite loop.\n    ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);\n    return ɵɵinject(token, flags);\n  }\n  const tNode = getCurrentTNode();\n  const value = getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);\n  ngDevMode && emitInjectEvent(token, value, flags);\n  return value;\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * This instruction allows the actual error message to be optimized away when ngDevMode is turned\n * off, saving bytes of generated code while still providing a good experience in dev mode.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactory() {\n  const msg = ngDevMode ? `This constructor was not compatible with Dependency Injection.` : 'invalid';\n  throw new Error(msg);\n}\nfunction writeToDirectiveInput(def, instance, publicName, privateName, flags, value) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    // If we know we are dealing with a signal input, we cache its reference\n    // in a tree-shakable way. The input signal node can then be used for\n    // value transform execution or actual value updates without introducing\n    // additional megamorphic accesses for accessing the instance field.\n    let inputSignalNode = null;\n    if ((flags & InputFlags.SignalBased) !== 0) {\n      const field = instance[privateName];\n      inputSignalNode = field[SIGNAL$1];\n    }\n    // If there is a signal node and a transform, run it before potentially\n    // delegating to features like `NgOnChanges`.\n    if (inputSignalNode !== null && inputSignalNode.transformFn !== undefined) {\n      value = inputSignalNode.transformFn(value);\n    }\n    // If there is a decorator input transform, run it.\n    if ((flags & InputFlags.HasDecoratorInputTransform) !== 0) {\n      value = def.inputTransforms[privateName].call(instance, value);\n    }\n    if (def.setInput !== null) {\n      def.setInput(instance, inputSignalNode, value, publicName, privateName);\n    } else {\n      applyValueToInputField(instance, inputSignalNode, privateName, value);\n    }\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n\n/**\n * Invoke `HostBindingsFunction`s for view.\n *\n * This methods executes `TView.hostBindingOpCodes`. It is used to execute the\n * `HostBindingsFunction`s associated with the current `LView`.\n *\n * @param tView Current `TView`.\n * @param lView Current `LView`.\n */\nfunction processHostBindingOpCodes(tView, lView) {\n  const hostBindingOpCodes = tView.hostBindingOpCodes;\n  if (hostBindingOpCodes === null) return;\n  try {\n    for (let i = 0; i < hostBindingOpCodes.length; i++) {\n      const opCode = hostBindingOpCodes[i];\n      if (opCode < 0) {\n        // Negative numbers are element indexes.\n        setSelectedIndex(~opCode);\n      } else {\n        // Positive numbers are NumberTuple which store bindingRootIndex and directiveIndex.\n        const directiveIdx = opCode;\n        const bindingRootIndx = hostBindingOpCodes[++i];\n        const hostBindingFn = hostBindingOpCodes[++i];\n        setBindingRootForHostBindings(bindingRootIndx, directiveIdx);\n        const context = lView[directiveIdx];\n        hostBindingFn(2 /* RenderFlags.Update */, context);\n      }\n    }\n  } finally {\n    setSelectedIndex(-1);\n  }\n}\nfunction createLView(parentLView, tView, context, flags, host, tHostNode, environment, renderer, injector, embeddedViewInjector, hydrationInfo) {\n  const lView = tView.blueprint.slice();\n  lView[HOST] = host;\n  lView[FLAGS] = flags | 4 /* LViewFlags.CreationMode */ | 128 /* LViewFlags.Attached */ | 8 /* LViewFlags.FirstLViewPass */ | 64 /* LViewFlags.Dirty */ | 1024 /* LViewFlags.RefreshView */;\n  if (embeddedViewInjector !== null || parentLView && parentLView[FLAGS] & 2048 /* LViewFlags.HasEmbeddedViewInjector */) {\n    lView[FLAGS] |= 2048 /* LViewFlags.HasEmbeddedViewInjector */;\n  }\n  resetPreOrderHookFlags(lView);\n  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);\n  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;\n  lView[CONTEXT] = context;\n  lView[ENVIRONMENT] = environment || parentLView && parentLView[ENVIRONMENT];\n  ngDevMode && assertDefined(lView[ENVIRONMENT], 'LViewEnvironment is required');\n  lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];\n  ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');\n  lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;\n  lView[T_HOST] = tHostNode;\n  lView[ID] = getUniqueLViewId();\n  lView[HYDRATION] = hydrationInfo;\n  lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;\n  ngDevMode && assertEqual(tView.type == 2 /* TViewType.Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');\n  lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2 /* TViewType.Embedded */ ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;\n  return lView;\n}\nfunction getOrCreateTNode(tView, index, type, name, attrs) {\n  ngDevMode && index !== 0 &&\n  // 0 are bogus nodes and they are OK. See `createContainerRef` in\n  // `view_engine_compatibility` for additional context.\n  assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n  // Keep this function short, so that the VM will inline it.\n  ngDevMode && assertPureTNodeType(type);\n  let tNode = tView.data[index];\n  if (tNode === null) {\n    tNode = createTNodeAtIndex(tView, index, type, name, attrs);\n    if (isInI18nBlock()) {\n      // If we are in i18n block then all elements should be pre declared through `Placeholder`\n      // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.\n      // If the `TNode` was not pre-declared than it means it was not mentioned which means it was\n      // removed, so we mark it as detached.\n      tNode.flags |= 32 /* TNodeFlags.isDetached */;\n    }\n  } else if (tNode.type & 64 /* TNodeType.Placeholder */) {\n    tNode.type = type;\n    tNode.value = name;\n    tNode.attrs = attrs;\n    const parent = getCurrentParentTNode();\n    tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;\n    ngDevMode && assertTNodeForTView(tNode, tView);\n    ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');\n  }\n  setCurrentTNode(tNode, true);\n  return tNode;\n}\nfunction createTNodeAtIndex(tView, index, type, name, attrs) {\n  const currentTNode = getCurrentTNodePlaceholderOk();\n  const isParent = isCurrentTNodeParent();\n  const parent = isParent ? currentTNode : currentTNode && currentTNode.parent;\n  // Parents cannot cross component boundaries because components will be used in multiple places.\n  const tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs);\n  // Assign a pointer to the first child node of a given view. The first node is not always the one\n  // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has\n  // the index 1 or more, so we can't just check node index.\n  if (tView.firstChild === null) {\n    tView.firstChild = tNode;\n  }\n  if (currentTNode !== null) {\n    if (isParent) {\n      // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?\n      if (currentTNode.child == null && tNode.parent !== null) {\n        // We are in the same view, which means we are adding content node to the parent view.\n        currentTNode.child = tNode;\n      }\n    } else {\n      if (currentTNode.next === null) {\n        // In the case of i18n the `currentTNode` may already be linked, in which case we don't want\n        // to break the links which i18n created.\n        currentTNode.next = tNode;\n        tNode.prev = currentTNode;\n      }\n    }\n  }\n  return tNode;\n}\n/**\n * When elements are created dynamically after a view blueprint is created (e.g. through\n * i18nApply()), we need to adjust the blueprint for future\n * template passes.\n *\n * @param tView `TView` associated with `LView`\n * @param lView The `LView` containing the blueprint to adjust\n * @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0\n * @param initialValue Initial value to store in blueprint\n */\nfunction allocExpando(tView, lView, numSlotsToAlloc, initialValue) {\n  if (numSlotsToAlloc === 0) return -1;\n  if (ngDevMode) {\n    assertFirstCreatePass(tView);\n    assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');\n    assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');\n    assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');\n    assertFirstUpdatePass(tView);\n  }\n  const allocIdx = lView.length;\n  for (let i = 0; i < numSlotsToAlloc; i++) {\n    lView.push(initialValue);\n    tView.blueprint.push(initialValue);\n    tView.data.push(null);\n  }\n  return allocIdx;\n}\nfunction executeTemplate(tView, lView, templateFn, rf, context) {\n  const prevSelectedIndex = getSelectedIndex();\n  const isUpdatePhase = rf & 2 /* RenderFlags.Update */;\n  try {\n    setSelectedIndex(-1);\n    if (isUpdatePhase && lView.length > HEADER_OFFSET) {\n      // When we're updating, inherently select 0 so we don't\n      // have to generate that instruction for most update blocks.\n      selectIndexInternal(tView, lView, HEADER_OFFSET, !!ngDevMode && isInCheckNoChangesMode());\n    }\n    const preHookType = isUpdatePhase ? 2 /* ProfilerEvent.TemplateUpdateStart */ : 0 /* ProfilerEvent.TemplateCreateStart */;\n    profiler(preHookType, context);\n    templateFn(rf, context);\n  } finally {\n    setSelectedIndex(prevSelectedIndex);\n    const postHookType = isUpdatePhase ? 3 /* ProfilerEvent.TemplateUpdateEnd */ : 1 /* ProfilerEvent.TemplateCreateEnd */;\n    profiler(postHookType, context);\n  }\n}\n//////////////////////////\n//// Element\n//////////////////////////\nfunction executeContentQueries(tView, tNode, lView) {\n  if (isContentQueryHost(tNode)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const start = tNode.directiveStart;\n      const end = tNode.directiveEnd;\n      for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n        const def = tView.data[directiveIndex];\n        if (def.contentQueries) {\n          const directiveInstance = lView[directiveIndex];\n          ngDevMode && assertDefined(directiveIndex, 'Incorrect reference to a directive defining a content query');\n          def.contentQueries(1 /* RenderFlags.Create */, directiveInstance, directiveIndex);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Creates directive instances.\n */\nfunction createDirectivesInstances(tView, lView, tNode) {\n  if (!getBindingsEnabled()) return;\n  instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));\n  if ((tNode.flags & 64 /* TNodeFlags.hasHostBindings */) === 64 /* TNodeFlags.hasHostBindings */) {\n    invokeDirectivesHostBindings(tView, lView, tNode);\n  }\n}\n/**\n * Takes a list of local names and indices and pushes the resolved local variable values\n * to LView in the same order as they are loaded in the template with load().\n */\nfunction saveResolvedLocalsInData(viewData, tNode, localRefExtractor = getNativeByTNode) {\n  const localNames = tNode.localNames;\n  if (localNames !== null) {\n    let localIndex = tNode.index + 1;\n    for (let i = 0; i < localNames.length; i += 2) {\n      const index = localNames[i + 1];\n      const value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];\n      viewData[localIndex++] = value;\n    }\n  }\n}\n/**\n * Gets TView from a template function or creates a new TView\n * if it doesn't already exist.\n *\n * @param def ComponentDef\n * @returns TView\n */\nfunction getOrCreateComponentTView(def) {\n  const tView = def.tView;\n  // Create a TView if there isn't one, or recreate it if the first create pass didn't\n  // complete successfully since we can't know for sure whether it's in a usable shape.\n  if (tView === null || tView.incompleteFirstPass) {\n    // Declaration node here is null since this function is called when we dynamically create a\n    // component and hence there is no declaration.\n    const declTNode = null;\n    return def.tView = createTView(1 /* TViewType.Component */, declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts, def.id);\n  }\n  return tView;\n}\n/**\n * Creates a TView instance\n *\n * @param type Type of `TView`.\n * @param declTNode Declaration location of this `TView`.\n * @param templateFn Template function\n * @param decls The number of nodes, local refs, and pipes in this template\n * @param directives Registry of directives for this view\n * @param pipes Registry of pipes for this view\n * @param viewQuery View queries for this view\n * @param schemas Schemas for this view\n * @param consts Constants for this view\n */\nfunction createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory, ssrId) {\n  ngDevMode && ngDevMode.tView++;\n  const bindingStartIndex = HEADER_OFFSET + decls;\n  // This length does not yet contain host bindings from child directives because at this point,\n  // we don't know which directives are active on this template. As soon as a directive is matched\n  // that has a host binding, we will update the blueprint with that def's hostVars count.\n  const initialViewLength = bindingStartIndex + vars;\n  const blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);\n  const consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;\n  const tView = blueprint[TVIEW] = {\n    type: type,\n    blueprint: blueprint,\n    template: templateFn,\n    queries: null,\n    viewQuery: viewQuery,\n    declTNode: declTNode,\n    data: blueprint.slice().fill(null, bindingStartIndex),\n    bindingStartIndex: bindingStartIndex,\n    expandoStartIndex: initialViewLength,\n    hostBindingOpCodes: null,\n    firstCreatePass: true,\n    firstUpdatePass: true,\n    staticViewQueries: false,\n    staticContentQueries: false,\n    preOrderHooks: null,\n    preOrderCheckHooks: null,\n    contentHooks: null,\n    contentCheckHooks: null,\n    viewHooks: null,\n    viewCheckHooks: null,\n    destroyHooks: null,\n    cleanup: null,\n    contentQueries: null,\n    components: null,\n    directiveRegistry: typeof directives === 'function' ? directives() : directives,\n    pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,\n    firstChild: null,\n    schemas: schemas,\n    consts: consts,\n    incompleteFirstPass: false,\n    ssrId\n  };\n  if (ngDevMode) {\n    // For performance reasons it is important that the tView retains the same shape during runtime.\n    // (To make sure that all of the code is monomorphic.) For this reason we seal the object to\n    // prevent class transitions.\n    Object.seal(tView);\n  }\n  return tView;\n}\nfunction createViewBlueprint(bindingStartIndex, initialViewLength) {\n  const blueprint = [];\n  for (let i = 0; i < initialViewLength; i++) {\n    blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);\n  }\n  return blueprint;\n}\n/**\n * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.\n *\n * @param renderer the renderer used to locate the element.\n * @param elementOrSelector Render element or CSS selector to locate the element.\n * @param encapsulation View Encapsulation defined for component that requests host element.\n * @param injector Root view injector instance.\n */\nfunction locateHostElement(renderer, elementOrSelector, encapsulation, injector) {\n  // Note: we use default value for the `PRESERVE_HOST_CONTENT` here even though it's a\n  // tree-shakable one (providedIn:'root'). This code path can be triggered during dynamic\n  // component creation (after calling ViewContainerRef.createComponent) when an injector\n  // instance can be provided. The injector instance might be disconnected from the main DI\n  // tree, thus the `PRESERVE_HOST_CONTENT` would not be able to instantiate. In this case, the\n  // default value will be used.\n  const preserveHostContent = injector.get(PRESERVE_HOST_CONTENT, PRESERVE_HOST_CONTENT_DEFAULT);\n  // When using native Shadow DOM, do not clear host element to allow native slot\n  // projection.\n  const preserveContent = preserveHostContent || encapsulation === ViewEncapsulation.ShadowDom;\n  const rootElement = renderer.selectRootElement(elementOrSelector, preserveContent);\n  applyRootElementTransform(rootElement);\n  return rootElement;\n}\n/**\n * Applies any root element transformations that are needed. If hydration is enabled,\n * this will process corrupted text nodes.\n *\n * @param rootElement the app root HTML Element\n */\nfunction applyRootElementTransform(rootElement) {\n  _applyRootElementTransformImpl(rootElement);\n}\n/**\n * Reference to a function that applies transformations to the root HTML element\n * of an app. When hydration is enabled, this processes any corrupt text nodes\n * so they are properly hydratable on the client.\n *\n * @param rootElement the app root HTML Element\n */\nlet _applyRootElementTransformImpl = () => null;\n/**\n * Processes text node markers before hydration begins. This replaces any special comment\n * nodes that were added prior to serialization are swapped out to restore proper text\n * nodes before hydration.\n *\n * @param rootElement the app root HTML Element\n */\nfunction applyRootElementTransformImpl(rootElement) {\n  if (hasSkipHydrationAttrOnRElement(rootElement)) {\n    // Handle a situation when the `ngSkipHydration` attribute is applied\n    // to the root node of an application. In this case, we should clear\n    // the contents and render everything from scratch.\n    clearElementContents(rootElement);\n  } else {\n    processTextNodeMarkersBeforeHydration(rootElement);\n  }\n}\n/**\n * Sets the implementation for the `applyRootElementTransform` function.\n */\nfunction enableApplyRootElementTransformImpl() {\n  _applyRootElementTransformImpl = applyRootElementTransformImpl;\n}\n/**\n * Saves context for this cleanup function in LView.cleanupInstances.\n *\n * On the first template pass, saves in TView:\n * - Cleanup function\n * - Index of context we just saved in LView.cleanupInstances\n */\nfunction storeCleanupWithContext(tView, lView, context, cleanupFn) {\n  const lCleanup = getOrCreateLViewCleanup(lView);\n  // Historically the `storeCleanupWithContext` was used to register both framework-level and\n  // user-defined cleanup callbacks, but over time those two types of cleanups were separated.\n  // This dev mode checks assures that user-level cleanup callbacks are _not_ stored in data\n  // structures reserved for framework-specific hooks.\n  ngDevMode && assertDefined(context, 'Cleanup context is mandatory when registering framework-level destroy hooks');\n  lCleanup.push(context);\n  if (tView.firstCreatePass) {\n    getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);\n  } else {\n    // Make sure that no new framework-level cleanup functions are registered after the first\n    // template pass is done (and TView data structures are meant to fully constructed).\n    if (ngDevMode) {\n      Object.freeze(getOrCreateTViewCleanup(tView));\n    }\n  }\n}\nfunction createTNode(tView, tParent, type, index, value, attrs) {\n  ngDevMode && index !== 0 &&\n  // 0 are bogus nodes and they are OK. See `createContainerRef` in\n  // `view_engine_compatibility` for additional context.\n  assertGreaterThanOrEqual(index, HEADER_OFFSET, \"TNodes can't be in the LView header.\");\n  ngDevMode && assertNotSame(attrs, undefined, \"'undefined' is not valid value for 'attrs'\");\n  ngDevMode && ngDevMode.tNode++;\n  ngDevMode && tParent && assertTNodeForTView(tParent, tView);\n  let injectorIndex = tParent ? tParent.injectorIndex : -1;\n  let flags = 0;\n  if (isInSkipHydrationBlock$1()) {\n    flags |= 128 /* TNodeFlags.inSkipHydrationBlock */;\n  }\n  const tNode = {\n    type,\n    index,\n    insertBeforeIndex: null,\n    injectorIndex,\n    directiveStart: -1,\n    directiveEnd: -1,\n    directiveStylingLast: -1,\n    componentOffset: -1,\n    propertyBindings: null,\n    flags,\n    providerIndexes: 0,\n    value: value,\n    attrs: attrs,\n    mergedAttrs: null,\n    localNames: null,\n    initialInputs: undefined,\n    inputs: null,\n    outputs: null,\n    tView: null,\n    next: null,\n    prev: null,\n    projectionNext: null,\n    child: null,\n    parent: tParent,\n    projection: null,\n    styles: null,\n    stylesWithoutHost: null,\n    residualStyles: undefined,\n    classes: null,\n    classesWithoutHost: null,\n    residualClasses: undefined,\n    classBindings: 0,\n    styleBindings: 0\n  };\n  if (ngDevMode) {\n    // For performance reasons it is important that the tNode retains the same shape during runtime.\n    // (To make sure that all of the code is monomorphic.) For this reason we seal the object to\n    // prevent class transitions.\n    Object.seal(tNode);\n  }\n  return tNode;\n}\nfunction captureNodeBindings(mode, aliasMap, directiveIndex, bindingsResult, hostDirectiveAliasMap) {\n  for (let publicName in aliasMap) {\n    if (!aliasMap.hasOwnProperty(publicName)) {\n      continue;\n    }\n    const value = aliasMap[publicName];\n    if (value === undefined) {\n      continue;\n    }\n    bindingsResult ??= {};\n    let internalName;\n    let inputFlags = InputFlags.None;\n    // For inputs, the value might be an array capturing additional\n    // input flags.\n    if (Array.isArray(value)) {\n      internalName = value[0];\n      inputFlags = value[1];\n    } else {\n      internalName = value;\n    }\n    // If there are no host directive mappings, we want to remap using the alias map from the\n    // definition itself. If there is an alias map, it has two functions:\n    // 1. It serves as an allowlist of bindings that are exposed by the host directives. Only the\n    // ones inside the host directive map will be exposed on the host.\n    // 2. The public name of the property is aliased using the host directive alias map, rather\n    // than the alias map from the definition.\n    let finalPublicName = publicName;\n    if (hostDirectiveAliasMap !== null) {\n      // If there is no mapping, it's not part of the allowlist and this input/output\n      // is not captured and should be ignored.\n      if (!hostDirectiveAliasMap.hasOwnProperty(publicName)) {\n        continue;\n      }\n      finalPublicName = hostDirectiveAliasMap[publicName];\n    }\n    if (mode === 0 /* CaptureNodeBindingMode.Inputs */) {\n      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName, inputFlags);\n    } else {\n      addPropertyBinding(bindingsResult, directiveIndex, finalPublicName, internalName);\n    }\n  }\n  return bindingsResult;\n}\nfunction addPropertyBinding(bindings, directiveIndex, publicName, internalName, inputFlags) {\n  let values;\n  if (bindings.hasOwnProperty(publicName)) {\n    (values = bindings[publicName]).push(directiveIndex, internalName);\n  } else {\n    values = bindings[publicName] = [directiveIndex, internalName];\n  }\n  if (inputFlags !== undefined) {\n    values.push(inputFlags);\n  }\n}\n/**\n * Initializes data structures required to work with directive inputs and outputs.\n * Initialization is done for all directives matched on a given TNode.\n */\nfunction initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefinitionMap) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  const tViewData = tView.data;\n  const tNodeAttrs = tNode.attrs;\n  const inputsFromAttrs = [];\n  let inputsStore = null;\n  let outputsStore = null;\n  for (let directiveIndex = start; directiveIndex < end; directiveIndex++) {\n    const directiveDef = tViewData[directiveIndex];\n    const aliasData = hostDirectiveDefinitionMap ? hostDirectiveDefinitionMap.get(directiveDef) : null;\n    const aliasedInputs = aliasData ? aliasData.inputs : null;\n    const aliasedOutputs = aliasData ? aliasData.outputs : null;\n    inputsStore = captureNodeBindings(0 /* CaptureNodeBindingMode.Inputs */, directiveDef.inputs, directiveIndex, inputsStore, aliasedInputs);\n    outputsStore = captureNodeBindings(1 /* CaptureNodeBindingMode.Outputs */, directiveDef.outputs, directiveIndex, outputsStore, aliasedOutputs);\n    // Do not use unbound attributes as inputs to structural directives, since structural\n    // directive inputs can only be set using microsyntax (e.g. `<div *dir=\"exp\">`).\n    // TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which\n    // should be set for inline templates.\n    const initialInputs = inputsStore !== null && tNodeAttrs !== null && !isInlineTemplate(tNode) ? generateInitialInputs(inputsStore, directiveIndex, tNodeAttrs) : null;\n    inputsFromAttrs.push(initialInputs);\n  }\n  if (inputsStore !== null) {\n    if (inputsStore.hasOwnProperty('class')) {\n      tNode.flags |= 8 /* TNodeFlags.hasClassInput */;\n    }\n    if (inputsStore.hasOwnProperty('style')) {\n      tNode.flags |= 16 /* TNodeFlags.hasStyleInput */;\n    }\n  }\n  tNode.initialInputs = inputsFromAttrs;\n  tNode.inputs = inputsStore;\n  tNode.outputs = outputsStore;\n}\n/**\n * Mapping between attributes names that don't correspond to their element property names.\n *\n * Performance note: this function is written as a series of if checks (instead of, say, a property\n * object lookup) for performance reasons - the series of `if` checks seems to be the fastest way of\n * mapping property names. Do NOT change without benchmarking.\n *\n * Note: this mapping has to be kept in sync with the equally named mapping in the template\n * type-checking machinery of ngtsc.\n */\nfunction mapPropName(name) {\n  if (name === 'class') return 'className';\n  if (name === 'for') return 'htmlFor';\n  if (name === 'formaction') return 'formAction';\n  if (name === 'innerHtml') return 'innerHTML';\n  if (name === 'readonly') return 'readOnly';\n  if (name === 'tabindex') return 'tabIndex';\n  return name;\n}\nfunction elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n  const element = getNativeByTNode(tNode, lView);\n  let inputData = tNode.inputs;\n  let dataValue;\n  if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {\n    setInputsForProperty(tView, lView, dataValue, propName, value);\n    if (isComponentHost(tNode)) markDirtyIfOnPush(lView, tNode.index);\n    if (ngDevMode) {\n      setNgReflectProperties(lView, element, tNode.type, dataValue, value);\n    }\n  } else if (tNode.type & 3 /* TNodeType.AnyRNode */) {\n    propName = mapPropName(propName);\n    if (ngDevMode) {\n      validateAgainstEventProperties(propName);\n      if (!isPropertyValid(element, propName, tNode.value, tView.schemas)) {\n        handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n      }\n      ngDevMode.rendererSetProperty++;\n    }\n    // It is assumed that the sanitizer is only added when the compiler determines that the\n    // property is risky, so sanitization can be done without further checks.\n    value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;\n    renderer.setProperty(element, propName, value);\n  } else if (tNode.type & 12 /* TNodeType.AnyContainer */) {\n    // If the node is a container and the property didn't\n    // match any of the inputs or schemas we should throw.\n    if (ngDevMode && !matchingSchemas(tView.schemas, tNode.value)) {\n      handleUnknownPropertyError(propName, tNode.value, tNode.type, lView);\n    }\n  }\n}\n/** If node is an OnPush component, marks its LView dirty. */\nfunction markDirtyIfOnPush(lView, viewIndex) {\n  ngDevMode && assertLView(lView);\n  const childComponentLView = getComponentLViewByIndex(viewIndex, lView);\n  if (!(childComponentLView[FLAGS] & 16 /* LViewFlags.CheckAlways */)) {\n    childComponentLView[FLAGS] |= 64 /* LViewFlags.Dirty */;\n  }\n}\nfunction setNgReflectProperty(lView, element, type, attrName, value) {\n  const renderer = lView[RENDERER];\n  attrName = normalizeDebugBindingName(attrName);\n  const debugValue = normalizeDebugBindingValue(value);\n  if (type & 3 /* TNodeType.AnyRNode */) {\n    if (value == null) {\n      renderer.removeAttribute(element, attrName);\n    } else {\n      renderer.setAttribute(element, attrName, debugValue);\n    }\n  } else {\n    const textContent = escapeCommentText(`bindings=${JSON.stringify({\n      [attrName]: debugValue\n    }, null, 2)}`);\n    renderer.setValue(element, textContent);\n  }\n}\nfunction setNgReflectProperties(lView, element, type, dataValue, value) {\n  if (type & (3 /* TNodeType.AnyRNode */ | 4 /* TNodeType.Container */)) {\n    /**\n     * dataValue is an array containing runtime input or output names for the directives:\n     * i+0: directive instance index\n     * i+1: privateName\n     *\n     * e.g. [0, 'change', 'change-minified']\n     * we want to set the reflected property with the privateName: dataValue[i+1]\n     */\n    for (let i = 0; i < dataValue.length; i += 3) {\n      setNgReflectProperty(lView, element, type, dataValue[i + 1], value);\n    }\n  }\n}\n/**\n * Resolve the matched directives on a node.\n */\nfunction resolveDirectives(tView, lView, tNode, localRefs) {\n  // Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in\n  // tsickle.\n  ngDevMode && assertFirstCreatePass(tView);\n  if (getBindingsEnabled()) {\n    const exportsMap = localRefs === null ? null : {\n      '': -1\n    };\n    const matchResult = findDirectiveDefMatches(tView, tNode);\n    let directiveDefs;\n    let hostDirectiveDefs;\n    if (matchResult === null) {\n      directiveDefs = hostDirectiveDefs = null;\n    } else {\n      [directiveDefs, hostDirectiveDefs] = matchResult;\n    }\n    if (directiveDefs !== null) {\n      initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs);\n    }\n    if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);\n  }\n  // Merge the template attrs last so that they have the highest priority.\n  tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);\n}\n/** Initializes the data structures necessary for a list of directives to be instantiated. */\nfunction initializeDirectives(tView, lView, tNode, directives, exportsMap, hostDirectiveDefs) {\n  ngDevMode && assertFirstCreatePass(tView);\n  // Publishes the directive types to DI so they can be injected. Needs to\n  // happen in a separate pass before the TNode flags have been initialized.\n  for (let i = 0; i < directives.length; i++) {\n    diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, directives[i].type);\n  }\n  initTNodeFlags(tNode, tView.data.length, directives.length);\n  // When the same token is provided by several directives on the same node, some rules apply in\n  // the viewEngine:\n  // - viewProviders have priority over providers\n  // - the last directive in NgModule.declarations has priority over the previous one\n  // So to match these rules, the order in which providers are added in the arrays is very\n  // important.\n  for (let i = 0; i < directives.length; i++) {\n    const def = directives[i];\n    if (def.providersResolver) def.providersResolver(def);\n  }\n  let preOrderHooksFound = false;\n  let preOrderCheckHooksFound = false;\n  let directiveIdx = allocExpando(tView, lView, directives.length, null);\n  ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');\n  for (let i = 0; i < directives.length; i++) {\n    const def = directives[i];\n    // Merge the attrs in the order of matches. This assumes that the first directive is the\n    // component itself, so that the component has the least priority.\n    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n    configureViewWithDirective(tView, tNode, lView, directiveIdx, def);\n    saveNameToExportMap(directiveIdx, def, exportsMap);\n    if (def.contentQueries !== null) tNode.flags |= 4 /* TNodeFlags.hasContentQuery */;\n    if (def.hostBindings !== null || def.hostAttrs !== null || def.hostVars !== 0) tNode.flags |= 64 /* TNodeFlags.hasHostBindings */;\n    const lifeCycleHooks = def.type.prototype;\n    // Only push a node index into the preOrderHooks array if this is the first\n    // pre-order hook found on this node.\n    if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {\n      // We will push the actual hook function into this array later during dir instantiation.\n      // We cannot do it now because we must ensure hooks are registered in the same\n      // order that directives are created (i.e. injection order).\n      (tView.preOrderHooks ??= []).push(tNode.index);\n      preOrderHooksFound = true;\n    }\n    if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {\n      (tView.preOrderCheckHooks ??= []).push(tNode.index);\n      preOrderCheckHooksFound = true;\n    }\n    directiveIdx++;\n  }\n  initializeInputAndOutputAliases(tView, tNode, hostDirectiveDefs);\n}\n/**\n * Add `hostBindings` to the `TView.hostBindingOpCodes`.\n *\n * @param tView `TView` to which the `hostBindings` should be added.\n * @param tNode `TNode` the element which contains the directive\n * @param directiveIdx Directive index in view.\n * @param directiveVarsIdx Where will the directive's vars be stored\n * @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.\n */\nfunction registerHostBindingOpCodes(tView, tNode, directiveIdx, directiveVarsIdx, def) {\n  ngDevMode && assertFirstCreatePass(tView);\n  const hostBindings = def.hostBindings;\n  if (hostBindings) {\n    let hostBindingOpCodes = tView.hostBindingOpCodes;\n    if (hostBindingOpCodes === null) {\n      hostBindingOpCodes = tView.hostBindingOpCodes = [];\n    }\n    const elementIndx = ~tNode.index;\n    if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {\n      // Conditionally add select element so that we are more efficient in execution.\n      // NOTE: this is strictly not necessary and it trades code size for runtime perf.\n      // (We could just always add it.)\n      hostBindingOpCodes.push(elementIndx);\n    }\n    hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);\n  }\n}\n/**\n * Returns the last selected element index in the `HostBindingOpCodes`\n *\n * For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only\n * if it changes. This method returns the last index (or '0' if not found.)\n *\n * Selected element index are only the ones which are negative.\n */\nfunction lastSelectedElementIdx(hostBindingOpCodes) {\n  let i = hostBindingOpCodes.length;\n  while (i > 0) {\n    const value = hostBindingOpCodes[--i];\n    if (typeof value === 'number' && value < 0) {\n      return value;\n    }\n  }\n  return 0;\n}\n/**\n * Instantiate all the directives that were previously resolved on the current node.\n */\nfunction instantiateAllDirectives(tView, lView, tNode, native) {\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  // The component view needs to be created before creating the node injector\n  // since it is used to inject some special symbols like `ChangeDetectorRef`.\n  if (isComponentHost(tNode)) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);\n    addComponentLogic(lView, tNode, tView.data[start + tNode.componentOffset]);\n  }\n  if (!tView.firstCreatePass) {\n    getOrCreateNodeInjectorForNode(tNode, lView);\n  }\n  attachPatchData(native, lView);\n  const initialInputs = tNode.initialInputs;\n  for (let i = start; i < end; i++) {\n    const def = tView.data[i];\n    const directive = getNodeInjectable(lView, tView, i, tNode);\n    attachPatchData(directive, lView);\n    if (initialInputs !== null) {\n      setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);\n    }\n    if (isComponentDef(def)) {\n      const componentView = getComponentLViewByIndex(tNode.index, lView);\n      componentView[CONTEXT] = getNodeInjectable(lView, tView, i, tNode);\n    }\n  }\n}\nfunction invokeDirectivesHostBindings(tView, lView, tNode) {\n  const start = tNode.directiveStart;\n  const end = tNode.directiveEnd;\n  const elementIndex = tNode.index;\n  const currentDirectiveIndex = getCurrentDirectiveIndex();\n  try {\n    setSelectedIndex(elementIndex);\n    for (let dirIndex = start; dirIndex < end; dirIndex++) {\n      const def = tView.data[dirIndex];\n      const directive = lView[dirIndex];\n      setCurrentDirectiveIndex(dirIndex);\n      if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {\n        invokeHostBindingsInCreationMode(def, directive);\n      }\n    }\n  } finally {\n    setSelectedIndex(-1);\n    setCurrentDirectiveIndex(currentDirectiveIndex);\n  }\n}\n/**\n * Invoke the host bindings in creation mode.\n *\n * @param def `DirectiveDef` which may contain the `hostBindings` function.\n * @param directive Instance of directive.\n */\nfunction invokeHostBindingsInCreationMode(def, directive) {\n  if (def.hostBindings !== null) {\n    def.hostBindings(1 /* RenderFlags.Create */, directive);\n  }\n}\n/**\n * Matches the current node against all available selectors.\n * If a component is matched (at most one), it is returned in first position in the array.\n */\nfunction findDirectiveDefMatches(tView, tNode) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n  const registry = tView.directiveRegistry;\n  let matches = null;\n  let hostDirectiveDefs = null;\n  if (registry) {\n    for (let i = 0; i < registry.length; i++) {\n      const def = registry[i];\n      if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */false)) {\n        matches || (matches = []);\n        if (isComponentDef(def)) {\n          if (ngDevMode) {\n            assertTNodeType(tNode, 2 /* TNodeType.Element */, `\"${tNode.value}\" tags cannot be used as component hosts. ` + `Please use a different tag to activate the ${stringify(def.type)} component.`);\n            if (isComponentHost(tNode)) {\n              throwMultipleComponentError(tNode, matches.find(isComponentDef).type, def.type);\n            }\n          }\n          // Components are inserted at the front of the matches array so that their lifecycle\n          // hooks run before any directive lifecycle hooks. This appears to be for ViewEngine\n          // compatibility. This logic doesn't make sense with host directives, because it\n          // would allow the host directives to undo any overrides the host may have made.\n          // To handle this case, the host directives of components are inserted at the beginning\n          // of the array, followed by the component. As such, the insertion order is as follows:\n          // 1. Host directives belonging to the selector-matched component.\n          // 2. Selector-matched component.\n          // 3. Host directives belonging to selector-matched directives.\n          // 4. Selector-matched directives.\n          if (def.findHostDirectiveDefs !== null) {\n            const hostDirectiveMatches = [];\n            hostDirectiveDefs = hostDirectiveDefs || new Map();\n            def.findHostDirectiveDefs(def, hostDirectiveMatches, hostDirectiveDefs);\n            // Add all host directives declared on this component, followed by the component itself.\n            // Host directives should execute first so the host has a chance to override changes\n            // to the DOM made by them.\n            matches.unshift(...hostDirectiveMatches, def);\n            // Component is offset starting from the beginning of the host directives array.\n            const componentOffset = hostDirectiveMatches.length;\n            markAsComponentHost(tView, tNode, componentOffset);\n          } else {\n            // No host directives on this component, just add the\n            // component def to the beginning of the matches.\n            matches.unshift(def);\n            markAsComponentHost(tView, tNode, 0);\n          }\n        } else {\n          // Append any host directives to the matches first.\n          hostDirectiveDefs = hostDirectiveDefs || new Map();\n          def.findHostDirectiveDefs?.(def, matches, hostDirectiveDefs);\n          matches.push(def);\n        }\n      }\n    }\n  }\n  ngDevMode && matches !== null && assertNoDuplicateDirectives(matches);\n  return matches === null ? null : [matches, hostDirectiveDefs];\n}\n/**\n * Marks a given TNode as a component's host. This consists of:\n * - setting the component offset on the TNode.\n * - storing index of component's host element so it will be queued for view refresh during CD.\n */\nfunction markAsComponentHost(tView, hostTNode, componentOffset) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && assertGreaterThan(componentOffset, -1, 'componentOffset must be great than -1');\n  hostTNode.componentOffset = componentOffset;\n  (tView.components ??= []).push(hostTNode.index);\n}\n/** Caches local names and their matching directive indices for query and template lookups. */\nfunction cacheMatchingLocalNames(tNode, localRefs, exportsMap) {\n  if (localRefs) {\n    const localNames = tNode.localNames = [];\n    // Local names must be stored in tNode in the same order that localRefs are defined\n    // in the template to ensure the data is loaded in the same slots as their refs\n    // in the template (for template queries).\n    for (let i = 0; i < localRefs.length; i += 2) {\n      const index = exportsMap[localRefs[i + 1]];\n      if (index == null) throw new RuntimeError(-301 /* RuntimeErrorCode.EXPORT_NOT_FOUND */, ngDevMode && `Export of name '${localRefs[i + 1]}' not found!`);\n      localNames.push(localRefs[i], index);\n    }\n  }\n}\n/**\n * Builds up an export map as directives are created, so local refs can be quickly mapped\n * to their directive instances.\n */\nfunction saveNameToExportMap(directiveIdx, def, exportsMap) {\n  if (exportsMap) {\n    if (def.exportAs) {\n      for (let i = 0; i < def.exportAs.length; i++) {\n        exportsMap[def.exportAs[i]] = directiveIdx;\n      }\n    }\n    if (isComponentDef(def)) exportsMap[''] = directiveIdx;\n  }\n}\n/**\n * Initializes the flags on the current node, setting all indices to the initial index,\n * the directive count to 0, and adding the isComponent flag.\n * @param index the initial index\n */\nfunction initTNodeFlags(tNode, index, numberOfDirectives) {\n  ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');\n  tNode.flags |= 1 /* TNodeFlags.isDirectiveHost */;\n  // When the first directive is created on a node, save the index\n  tNode.directiveStart = index;\n  tNode.directiveEnd = index + numberOfDirectives;\n  tNode.providerIndexes = index;\n}\n/**\n * Setup directive for instantiation.\n *\n * We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well\n * as `LView`. `TView` gets the `DirectiveDef`.\n *\n * @param tView `TView`\n * @param tNode `TNode`\n * @param lView `LView`\n * @param directiveIndex Index where the directive will be stored in the Expando.\n * @param def `DirectiveDef`\n */\nfunction configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {\n  ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');\n  tView.data[directiveIndex] = def;\n  const directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));\n  // Even though `directiveFactory` will already be using `ɵɵdirectiveInject` in its generated code,\n  // we also want to support `inject()` directly from the directive constructor context so we set\n  // `ɵɵdirectiveInject` as the inject implementation here too.\n  const nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), ɵɵdirectiveInject);\n  tView.blueprint[directiveIndex] = nodeInjectorFactory;\n  lView[directiveIndex] = nodeInjectorFactory;\n  registerHostBindingOpCodes(tView, tNode, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);\n}\n/**\n * Gets the initial set of LView flags based on the component definition that the LView represents.\n * @param def Component definition from which to determine the flags.\n */\nfunction getInitialLViewFlagsFromDef(def) {\n  let flags = 16 /* LViewFlags.CheckAlways */;\n  if (def.signals) {\n    flags = 4096 /* LViewFlags.SignalView */;\n  } else if (def.onPush) {\n    flags = 64 /* LViewFlags.Dirty */;\n  }\n  return flags;\n}\nfunction addComponentLogic(lView, hostTNode, def) {\n  const native = getNativeByTNode(hostTNode, lView);\n  const tView = getOrCreateComponentTView(def);\n  // Only component views should be added to the view tree directly. Embedded views are\n  // accessed through their containers because they may be removed / re-added later.\n  const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n  const componentView = addToEndOfViewTree(lView, createLView(lView, tView, null, getInitialLViewFlagsFromDef(def), native, hostTNode, null, rendererFactory.createRenderer(native, def), null, null, null));\n  // Component view will always be created before any injected LContainers,\n  // so this is a regular element, wrap it with the component view\n  lView[hostTNode.index] = componentView;\n}\nfunction elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {\n  if (ngDevMode) {\n    assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n    validateAgainstEventAttributes(name);\n    assertTNodeType(tNode, 2 /* TNodeType.Element */, `Attempted to set attribute \\`${name}\\` on a container node. ` + `Host bindings are not valid on ng-container or ng-template.`);\n  }\n  const element = getNativeByTNode(tNode, lView);\n  setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);\n}\nfunction setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {\n  if (value == null) {\n    ngDevMode && ngDevMode.rendererRemoveAttribute++;\n    renderer.removeAttribute(element, name, namespace);\n  } else {\n    ngDevMode && ngDevMode.rendererSetAttribute++;\n    const strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);\n    renderer.setAttribute(element, name, strValue, namespace);\n  }\n}\n/**\n * Sets initial input properties on directive instances from attribute data\n *\n * @param lView Current LView that is being processed.\n * @param directiveIndex Index of the directive in directives array\n * @param instance Instance of the directive on which to set the initial inputs\n * @param def The directive def that contains the list of inputs\n * @param tNode The static data for this node\n */\nfunction setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {\n  const initialInputs = initialInputData[directiveIndex];\n  if (initialInputs !== null) {\n    for (let i = 0; i < initialInputs.length;) {\n      const publicName = initialInputs[i++];\n      const privateName = initialInputs[i++];\n      const flags = initialInputs[i++];\n      const value = initialInputs[i++];\n      writeToDirectiveInput(def, instance, publicName, privateName, flags, value);\n      if (ngDevMode) {\n        const nativeElement = getNativeByTNode(tNode, lView);\n        setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);\n      }\n    }\n  }\n}\n/**\n * Generates initialInputData for a node and stores it in the template's static storage\n * so subsequent template invocations don't have to recalculate it.\n *\n * initialInputData is an array containing values that need to be set as input properties\n * for directives on this node, but only once on creation. We need this array to support\n * the case where you set an @Input property of a directive using attribute-like syntax.\n * e.g. if you have a `name` @Input, you can set it once like this:\n *\n * <my-component name=\"Bess\"></my-component>\n *\n * @param inputs Input alias map that was generated from the directive def inputs.\n * @param directiveIndex Index of the directive that is currently being processed.\n * @param attrs Static attrs on this node.\n */\nfunction generateInitialInputs(inputs, directiveIndex, attrs) {\n  let inputsToStore = null;\n  let i = 0;\n  while (i < attrs.length) {\n    const attrName = attrs[i];\n    if (attrName === 0 /* AttributeMarker.NamespaceURI */) {\n      // We do not allow inputs on namespaced attributes.\n      i += 4;\n      continue;\n    } else if (attrName === 5 /* AttributeMarker.ProjectAs */) {\n      // Skip over the `ngProjectAs` value.\n      i += 2;\n      continue;\n    }\n    // If we hit any other attribute markers, we're done anyway. None of those are valid inputs.\n    if (typeof attrName === 'number') break;\n    if (inputs.hasOwnProperty(attrName)) {\n      if (inputsToStore === null) inputsToStore = [];\n      // Find the input's public name from the input store. Note that we can be found easier\n      // through the directive def, but we want to do it using the inputs store so that it can\n      // account for host directive aliases.\n      const inputConfig = inputs[attrName];\n      for (let j = 0; j < inputConfig.length; j += 3) {\n        if (inputConfig[j] === directiveIndex) {\n          inputsToStore.push(attrName, inputConfig[j + 1], inputConfig[j + 2], attrs[i + 1]);\n          // A directive can't have multiple inputs with the same name so we can break here.\n          break;\n        }\n      }\n    }\n    i += 2;\n  }\n  return inputsToStore;\n}\n//////////////////////////\n//// ViewContainer & View\n//////////////////////////\n/**\n * Creates a LContainer, either from a container instruction, or for a ViewContainerRef.\n *\n * @param hostNative The host element for the LContainer\n * @param hostTNode The host TNode for the LContainer\n * @param currentView The parent view of the LContainer\n * @param native The native comment element\n * @param isForViewContainerRef Optional a flag indicating the ViewContainerRef case\n * @returns LContainer\n */\nfunction createLContainer(hostNative, currentView, native, tNode) {\n  ngDevMode && assertLView(currentView);\n  const lContainer = [hostNative,\n  // host native\n  true,\n  // Boolean `true` in this position signifies that this is an `LContainer`\n  0,\n  // flags\n  currentView,\n  // parent\n  null,\n  // next\n  tNode,\n  // t_host\n  null,\n  // dehydrated views\n  native,\n  // native,\n  null,\n  // view refs\n  null // moved views\n  ];\n  ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');\n  return lContainer;\n}\n/** Refreshes all content queries declared by directives in a given view */\nfunction refreshContentQueries(tView, lView) {\n  const contentQueries = tView.contentQueries;\n  if (contentQueries !== null) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      for (let i = 0; i < contentQueries.length; i += 2) {\n        const queryStartIdx = contentQueries[i];\n        const directiveDefIdx = contentQueries[i + 1];\n        if (directiveDefIdx !== -1) {\n          const directiveDef = tView.data[directiveDefIdx];\n          ngDevMode && assertDefined(directiveDef, 'DirectiveDef not found.');\n          ngDevMode && assertDefined(directiveDef.contentQueries, 'contentQueries function should be defined');\n          setCurrentQueryIndex(queryStartIdx);\n          directiveDef.contentQueries(2 /* RenderFlags.Update */, lView[directiveDefIdx], directiveDefIdx);\n        }\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Adds LView or LContainer to the end of the current view tree.\n *\n * This structure will be used to traverse through nested views to remove listeners\n * and call onDestroy callbacks.\n *\n * @param lView The view where LView or LContainer should be added\n * @param adjustedHostIndex Index of the view's host node in LView[], adjusted for header\n * @param lViewOrLContainer The LView or LContainer to add to the view tree\n * @returns The state passed in\n */\nfunction addToEndOfViewTree(lView, lViewOrLContainer) {\n  // TODO(benlesh/misko): This implementation is incorrect, because it always adds the LContainer\n  // to the end of the queue, which means if the developer retrieves the LContainers from RNodes out\n  // of order, the change detection will run out of order, as the act of retrieving the the\n  // LContainer from the RNode is what adds it to the queue.\n  if (lView[CHILD_HEAD]) {\n    lView[CHILD_TAIL][NEXT] = lViewOrLContainer;\n  } else {\n    lView[CHILD_HEAD] = lViewOrLContainer;\n  }\n  lView[CHILD_TAIL] = lViewOrLContainer;\n  return lViewOrLContainer;\n}\n///////////////////////////////\n//// Change detection\n///////////////////////////////\nfunction executeViewQueryFn(flags, viewQueryFn, component) {\n  ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');\n  setCurrentQueryIndex(0);\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    viewQueryFn(flags, component);\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n///////////////////////////////\n//// Bindings & interpolations\n///////////////////////////////\n/**\n * Stores meta-data for a property binding to be used by TestBed's `DebugElement.properties`.\n *\n * In order to support TestBed's `DebugElement.properties` we need to save, for each binding:\n * - a bound property name;\n * - a static parts of interpolated strings;\n *\n * A given property metadata is saved at the binding's index in the `TView.data` (in other words, a\n * property binding metadata will be stored in `TView.data` at the same index as a bound value in\n * `LView`). Metadata are represented as `INTERPOLATION_DELIMITER`-delimited string with the\n * following format:\n * - `propertyName` for bound properties;\n * - `propertyName�prefix�interpolation_static_part1�..interpolation_static_partN�suffix` for\n * interpolated properties.\n *\n * @param tData `TData` where meta-data will be saved;\n * @param tNode `TNode` that is a target of the binding;\n * @param propertyName bound property name;\n * @param bindingIndex binding index in `LView`\n * @param interpolationParts static interpolation parts (for property interpolations)\n */\nfunction storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex, ...interpolationParts) {\n  // Binding meta-data are stored only the first time a given property instruction is processed.\n  // Since we don't have a concept of the \"first update pass\" we need to check for presence of the\n  // binding meta-data to decide if one should be stored (or if was stored already).\n  if (tData[bindingIndex] === null) {\n    if (tNode.inputs == null || !tNode.inputs[propertyName]) {\n      const propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);\n      propBindingIdxs.push(bindingIndex);\n      let bindingMetadata = propertyName;\n      if (interpolationParts.length > 0) {\n        bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);\n      }\n      tData[bindingIndex] = bindingMetadata;\n    }\n  }\n}\nfunction getOrCreateLViewCleanup(view) {\n  // top level variables should not be exported for performance reasons (PERF_NOTES.md)\n  return view[CLEANUP] ??= [];\n}\nfunction getOrCreateTViewCleanup(tView) {\n  return tView.cleanup ??= [];\n}\n/**\n * There are cases where the sub component's renderer needs to be included\n * instead of the current renderer (see the componentSyntheticHost* instructions).\n */\nfunction loadComponentRenderer(currentDef, tNode, lView) {\n  // TODO(FW-2043): the `currentDef` is null when host bindings are invoked while creating root\n  // component (see packages/core/src/render3/component.ts). This is not consistent with the process\n  // of creating inner components, when current directive index is available in the state. In order\n  // to avoid relying on current def being `null` (thus special-casing root component creation), the\n  // process of creating root component should be unified with the process of creating inner\n  // components.\n  if (currentDef === null || isComponentDef(currentDef)) {\n    lView = unwrapLView(lView[tNode.index]);\n  }\n  return lView[RENDERER];\n}\n/** Handles an error thrown in an LView. */\nfunction handleError(lView, error) {\n  const injector = lView[INJECTOR];\n  const errorHandler = injector ? injector.get(ErrorHandler, null) : null;\n  errorHandler && errorHandler.handleError(error);\n}\n/**\n * Set the inputs of directives at the current node to corresponding value.\n *\n * @param tView The current TView\n * @param lView the `LView` which contains the directives.\n * @param inputs mapping between the public \"input\" name and privately-known,\n *        possibly minified, property names to write to.\n * @param value Value to set.\n */\nfunction setInputsForProperty(tView, lView, inputs, publicName, value) {\n  for (let i = 0; i < inputs.length;) {\n    const index = inputs[i++];\n    const privateName = inputs[i++];\n    const flags = inputs[i++];\n    const instance = lView[index];\n    ngDevMode && assertIndexInRange(lView, index);\n    const def = tView.data[index];\n    writeToDirectiveInput(def, instance, publicName, privateName, flags, value);\n  }\n}\n/**\n * Updates a text binding at a given index in a given LView.\n */\nfunction textBindingInternal(lView, index, value) {\n  ngDevMode && assertString(value, 'Value should be a string');\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');\n  ngDevMode && assertIndexInRange(lView, index);\n  const element = getNativeByIndex(index, lView);\n  ngDevMode && assertDefined(element, 'native element should exist');\n  updateTextNode(lView[RENDERER], element, value);\n}\nfunction renderComponent(hostLView, componentHostIdx) {\n  ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');\n  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n  const componentTView = componentView[TVIEW];\n  syncViewWithBlueprint(componentTView, componentView);\n  const hostRNode = componentView[HOST];\n  // Populate an LView with hydration info retrieved from the DOM via TransferState.\n  if (hostRNode !== null && componentView[HYDRATION] === null) {\n    componentView[HYDRATION] = retrieveHydrationInfo(hostRNode, componentView[INJECTOR]);\n  }\n  renderView(componentTView, componentView, componentView[CONTEXT]);\n}\n/**\n * Syncs an LView instance with its blueprint if they have gotten out of sync.\n *\n * Typically, blueprints and their view instances should always be in sync, so the loop here\n * will be skipped. However, consider this case of two components side-by-side:\n *\n * App template:\n * ```html\n * <comp></comp>\n * <comp></comp>\n * ```\n *\n * The following will happen:\n * 1. App template begins processing.\n * 2. First <comp> is matched as a component and its LView is created.\n * 3. Second <comp> is matched as a component and its LView is created.\n * 4. App template completes processing, so it's time to check child templates.\n * 5. First <comp> template is checked. It has a directive, so its def is pushed to blueprint.\n * 6. Second <comp> template is checked. Its blueprint has been updated by the first\n * <comp> template, but its LView was created before this update, so it is out of sync.\n *\n * Note that embedded views inside ngFor loops will never be out of sync because these views\n * are processed as soon as they are created.\n *\n * @param tView The `TView` that contains the blueprint for syncing\n * @param lView The view to sync\n */\nfunction syncViewWithBlueprint(tView, lView) {\n  for (let i = lView.length; i < tView.blueprint.length; i++) {\n    lView.push(tView.blueprint[i]);\n  }\n}\n/**\n * Processes a view in the creation mode. This includes a number of steps in a specific order:\n * - creating view query functions (if any);\n * - executing a template function in the creation mode;\n * - updating static queries (if any);\n * - creating child components defined in a given view.\n */\nfunction renderView(tView, lView, context) {\n  ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');\n  ngDevMode && assertNotReactive(renderView.name);\n  enterView(lView);\n  try {\n    const viewQuery = tView.viewQuery;\n    if (viewQuery !== null) {\n      executeViewQueryFn(1 /* RenderFlags.Create */, viewQuery, context);\n    }\n    // Execute a template associated with this view, if it exists. A template function might not be\n    // defined for the root component views.\n    const templateFn = tView.template;\n    if (templateFn !== null) {\n      executeTemplate(tView, lView, templateFn, 1 /* RenderFlags.Create */, context);\n    }\n    // This needs to be set before children are processed to support recursive components.\n    // This must be set to false immediately after the first creation run because in an\n    // ngFor loop, all the views will be created together before update mode runs and turns\n    // off firstCreatePass. If we don't set it here, instances will perform directive\n    // matching, etc again and again.\n    if (tView.firstCreatePass) {\n      tView.firstCreatePass = false;\n    }\n    // Mark all queries active in this view as dirty. This is necessary for signal-based queries to\n    // have a clear marking point where we can read query results atomically (for a given view).\n    lView[QUERIES]?.finishViewCreation(tView);\n    // We resolve content queries specifically marked as `static` in creation mode. Dynamic\n    // content queries are resolved during change detection (i.e. update mode), after embedded\n    // views are refreshed (see block above).\n    if (tView.staticContentQueries) {\n      refreshContentQueries(tView, lView);\n    }\n    // We must materialize query results before child components are processed\n    // in case a child component has projected a container. The LContainer needs\n    // to exist so the embedded views are properly attached by the container.\n    if (tView.staticViewQueries) {\n      executeViewQueryFn(2 /* RenderFlags.Update */, tView.viewQuery, context);\n    }\n    // Render child component views.\n    const components = tView.components;\n    if (components !== null) {\n      renderChildComponents(lView, components);\n    }\n  } catch (error) {\n    // If we didn't manage to get past the first template pass due to\n    // an error, mark the view as corrupted so we can try to recover.\n    if (tView.firstCreatePass) {\n      tView.incompleteFirstPass = true;\n      tView.firstCreatePass = false;\n    }\n    throw error;\n  } finally {\n    lView[FLAGS] &= ~4 /* LViewFlags.CreationMode */;\n    leaveView();\n  }\n}\n/** Renders child components in the current view (creation mode). */\nfunction renderChildComponents(hostLView, components) {\n  for (let i = 0; i < components.length; i++) {\n    renderComponent(hostLView, components[i]);\n  }\n}\nfunction createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    const embeddedTView = templateTNode.tView;\n    ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');\n    ngDevMode && assertTNodeForLView(templateTNode, declarationLView);\n    // Embedded views follow the change detection strategy of the view they're declared in.\n    const isSignalView = declarationLView[FLAGS] & 4096 /* LViewFlags.SignalView */;\n    const viewFlags = isSignalView ? 4096 /* LViewFlags.SignalView */ : 16 /* LViewFlags.CheckAlways */;\n    const embeddedLView = createLView(declarationLView, embeddedTView, context, viewFlags, null, templateTNode, null, null, options?.injector ?? null, options?.embeddedViewInjector ?? null, options?.dehydratedView ?? null);\n    const declarationLContainer = declarationLView[templateTNode.index];\n    ngDevMode && assertLContainer(declarationLContainer);\n    embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;\n    const declarationViewLQueries = declarationLView[QUERIES];\n    if (declarationViewLQueries !== null) {\n      embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);\n    }\n    // execute creation mode of a view\n    renderView(embeddedTView, embeddedLView, context);\n    return embeddedLView;\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nfunction getLViewFromLContainer(lContainer, index) {\n  const adjustedIndex = CONTAINER_HEADER_OFFSET + index;\n  // avoid reading past the array boundaries\n  if (adjustedIndex < lContainer.length) {\n    const lView = lContainer[adjustedIndex];\n    ngDevMode && assertLView(lView);\n    return lView;\n  }\n  return undefined;\n}\n/**\n * Returns whether an elements that belong to a view should be\n * inserted into the DOM. For client-only cases, DOM elements are\n * always inserted. For hydration cases, we check whether serialized\n * info is available for a view and the view is not in a \"skip hydration\"\n * block (in which case view contents was re-created, thus needing insertion).\n */\nfunction shouldAddViewToDom(tNode, dehydratedView) {\n  return !dehydratedView || dehydratedView.firstChild === null || hasInSkipHydrationBlockFlag(tNode);\n}\nfunction addLViewToLContainer(lContainer, lView, index, addToDOM = true) {\n  const tView = lView[TVIEW];\n  // Insert into the view tree so the new view can be change-detected\n  insertView(tView, lView, lContainer, index);\n  // Insert elements that belong to this view into the DOM tree\n  if (addToDOM) {\n    const beforeNode = getBeforeNodeForView(index, lContainer);\n    const renderer = lView[RENDERER];\n    const parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);\n    if (parentRNode !== null) {\n      addViewToDOM(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);\n    }\n  }\n  // When in hydration mode, reset the pointer to the first child in\n  // the dehydrated view. This indicates that the view was hydrated and\n  // further attaching/detaching should work with this view as normal.\n  const hydrationInfo = lView[HYDRATION];\n  if (hydrationInfo !== null && hydrationInfo.firstChild !== null) {\n    hydrationInfo.firstChild = null;\n  }\n}\nfunction removeLViewFromLContainer(lContainer, index) {\n  const lView = detachView(lContainer, index);\n  if (lView !== undefined) {\n    destroyLView(lView[TVIEW], lView);\n  }\n  return lView;\n}\nfunction collectNativeNodes(tView, lView, tNode, result, isProjection = false) {\n  while (tNode !== null) {\n    // Let declarations don't have corresponding DOM nodes so we skip over them.\n    if (tNode.type === 128 /* TNodeType.LetDeclaration */) {\n      tNode = isProjection ? tNode.projectionNext : tNode.next;\n      continue;\n    }\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 16 /* TNodeType.Projection */ | 32 /* TNodeType.Icu */);\n    const lNode = lView[tNode.index];\n    if (lNode !== null) {\n      result.push(unwrapRNode(lNode));\n    }\n    // A given lNode can represent either a native node or a LContainer (when it is a host of a\n    // ViewContainerRef). When we find a LContainer we need to descend into it to collect root nodes\n    // from the views in this container.\n    if (isLContainer(lNode)) {\n      collectNativeNodesInLContainer(lNode, result);\n    }\n    const tNodeType = tNode.type;\n    if (tNodeType & 8 /* TNodeType.ElementContainer */) {\n      collectNativeNodes(tView, lView, tNode.child, result);\n    } else if (tNodeType & 32 /* TNodeType.Icu */) {\n      const nextRNode = icuContainerIterate(tNode, lView);\n      let rNode;\n      while (rNode = nextRNode()) {\n        result.push(rNode);\n      }\n    } else if (tNodeType & 16 /* TNodeType.Projection */) {\n      const nodesInSlot = getProjectionNodes(lView, tNode);\n      if (Array.isArray(nodesInSlot)) {\n        result.push(...nodesInSlot);\n      } else {\n        const parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);\n        ngDevMode && assertParentView(parentView);\n        collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);\n      }\n    }\n    tNode = isProjection ? tNode.projectionNext : tNode.next;\n  }\n  return result;\n}\n/**\n * Collects all root nodes in all views in a given LContainer.\n */\nfunction collectNativeNodesInLContainer(lContainer, result) {\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const lViewInAContainer = lContainer[i];\n    const lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;\n    if (lViewFirstChildTNode !== null) {\n      collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);\n    }\n  }\n  // When an LContainer is created, the anchor (comment) node is:\n  // - (1) either reused in case of an ElementContainer (<ng-container>)\n  // - (2) or a new comment node is created\n  // In the first case, the anchor comment node would be added to the final\n  // list by the code in the `collectNativeNodes` function\n  // (see the `result.push(unwrapRNode(lNode))` line), but the second\n  // case requires extra handling: the anchor node needs to be added to the\n  // final list manually. See additional information in the `createAnchorNode`\n  // function in the `view_container_ref.ts`.\n  //\n  // In the first case, the same reference would be stored in the `NATIVE`\n  // and `HOST` slots in an LContainer. Otherwise, this is the second case and\n  // we should add an element to the final list.\n  if (lContainer[NATIVE] !== lContainer[HOST]) {\n    result.push(lContainer[NATIVE]);\n  }\n}\nlet freeConsumers = [];\n/**\n * Create a new template consumer pointing at the specified LView.\n * Sometimes, a previously created consumer may be reused, in order to save on allocations. In that\n * case, the LView will be updated.\n */\nfunction getOrBorrowReactiveLViewConsumer(lView) {\n  return lView[REACTIVE_TEMPLATE_CONSUMER] ?? borrowReactiveLViewConsumer(lView);\n}\nfunction borrowReactiveLViewConsumer(lView) {\n  const consumer = freeConsumers.pop() ?? Object.create(REACTIVE_LVIEW_CONSUMER_NODE);\n  consumer.lView = lView;\n  return consumer;\n}\nfunction maybeReturnReactiveLViewConsumer(consumer) {\n  if (consumer.lView[REACTIVE_TEMPLATE_CONSUMER] === consumer) {\n    // The consumer got committed.\n    return;\n  }\n  consumer.lView = null;\n  freeConsumers.push(consumer);\n}\nconst REACTIVE_LVIEW_CONSUMER_NODE = {\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerMarkedDirty: node => {\n    markAncestorsForTraversal(node.lView);\n  },\n  consumerOnSignalRead() {\n    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n  }\n};\n/**\n * Creates a temporary consumer for use with `LView`s that should not have consumers.\n * If the LView already has a consumer, returns the existing one instead.\n *\n * This is necessary because some APIs may cause change detection directly on an LView\n * that we do not want to have a consumer (Embedded views today). As a result, there\n * would be no active consumer from running change detection on its host component\n * and any signals in the LView template would be untracked. Instead, we create\n * this temporary consumer that marks the first parent that _should_ have a consumer\n * for refresh. Once change detection runs as part of that refresh, we throw away\n * this consumer because its signals will then be tracked by the parent's consumer.\n */\nfunction getOrCreateTemporaryConsumer(lView) {\n  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER] ?? Object.create(TEMPORARY_CONSUMER_NODE);\n  consumer.lView = lView;\n  return consumer;\n}\nconst TEMPORARY_CONSUMER_NODE = {\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerMarkedDirty: node => {\n    let parent = getLViewParent(node.lView);\n    while (parent && !viewShouldHaveReactiveConsumer(parent[TVIEW])) {\n      parent = getLViewParent(parent);\n    }\n    if (!parent) {\n      // If we can't find an appropriate parent that should have a consumer, we\n      // don't have a way of appropriately refreshing this LView as part of application synchronization.\n      return;\n    }\n    markViewForRefresh(parent);\n  },\n  consumerOnSignalRead() {\n    this.lView[REACTIVE_TEMPLATE_CONSUMER] = this;\n  }\n};\n/**\n * Indicates if the view should get its own reactive consumer node.\n *\n * In the current design, all embedded views share a consumer with the component view. This allows\n * us to refresh at the component level rather than at a per-view level. In addition, root views get\n * their own reactive node because root component will have a host view that executes the\n * component's host bindings. This needs to be tracked in a consumer as well.\n *\n * To get a more granular change detection than per-component, all we would just need to update the\n * condition here so that a given view gets a reactive consumer which can become dirty independently\n * from its parent component. For example embedded views for signal components could be created with\n * a new type \"SignalEmbeddedView\" and the condition here wouldn't even need updating in order to\n * get granular per-view change detection for signal components.\n */\nfunction viewShouldHaveReactiveConsumer(tView) {\n  return tView.type !== 2 /* TViewType.Embedded */;\n}\nfunction runEffectsInView(view) {\n  if (view[EFFECTS] === null) {\n    return;\n  }\n  // Since effects can make other effects dirty, we flush them in a loop until there are no more to\n  // flush.\n  let tryFlushEffects = true;\n  while (tryFlushEffects) {\n    let foundDirtyEffect = false;\n    for (const effect of view[EFFECTS]) {\n      if (!effect.dirty) {\n        continue;\n      }\n      foundDirtyEffect = true;\n      // `runEffectsInView` is called during change detection, and therefore runs\n      // in the Angular zone if it's available.\n      if (effect.zone === null || Zone.current === effect.zone) {\n        effect.run();\n      } else {\n        effect.zone.run(() => effect.run());\n      }\n    }\n    // Check if we need to continue flushing. If we didn't find any dirty effects, then there's\n    // no need to loop back. Otherwise, check the view to see if it was marked for traversal\n    // again. If so, there's a chance that one of the effects we ran caused another effect to\n    // become dirty.\n    tryFlushEffects = foundDirtyEffect && !!(view[FLAGS] & 8192 /* LViewFlags.HasChildViewsToRefresh */);\n  }\n}\n\n/**\n * The maximum number of times the change detection traversal will rerun before throwing an error.\n */\nconst MAXIMUM_REFRESH_RERUNS$1 = 100;\nfunction detectChangesInternal(lView, notifyErrorHandler = true, mode = 0 /* ChangeDetectionMode.Global */) {\n  const environment = lView[ENVIRONMENT];\n  const rendererFactory = environment.rendererFactory;\n  // Check no changes mode is a dev only mode used to verify that bindings have not changed\n  // since they were assigned. We do not want to invoke renderer factory functions in that mode\n  // to avoid any possible side-effects.\n  const checkNoChangesMode = !!ngDevMode && isInCheckNoChangesMode();\n  if (!checkNoChangesMode) {\n    rendererFactory.begin?.();\n  }\n  try {\n    detectChangesInViewWhileDirty(lView, mode);\n  } catch (error) {\n    if (notifyErrorHandler) {\n      handleError(lView, error);\n    }\n    throw error;\n  } finally {\n    if (!checkNoChangesMode) {\n      rendererFactory.end?.();\n    }\n  }\n}\nfunction detectChangesInViewWhileDirty(lView, mode) {\n  const lastIsRefreshingViewsValue = isRefreshingViews();\n  try {\n    setIsRefreshingViews(true);\n    detectChangesInView(lView, mode);\n    // We don't need or want to do any looping when in exhaustive checkNoChanges because we\n    // already traverse all the views and nothing should change so we shouldn't have to do\n    // another pass to pick up new changes.\n    if (ngDevMode && isExhaustiveCheckNoChanges()) {\n      return;\n    }\n    let retries = 0;\n    // If after running change detection, this view still needs to be refreshed or there are\n    // descendants views that need to be refreshed due to re-dirtying during the change detection\n    // run, detect changes on the view again. We run change detection in `Targeted` mode to only\n    // refresh views with the `RefreshView` flag.\n    while (requiresRefreshOrTraversal(lView)) {\n      if (retries === MAXIMUM_REFRESH_RERUNS$1) {\n        throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, ngDevMode && 'Infinite change detection while trying to refresh views. ' + 'There may be components which each cause the other to require a refresh, ' + 'causing an infinite loop.');\n      }\n      retries++;\n      // Even if this view is detached, we still detect changes in targeted mode because this was\n      // the root of the change detection run.\n      detectChangesInView(lView, 1 /* ChangeDetectionMode.Targeted */);\n    }\n  } finally {\n    // restore state to what it was before entering this change detection loop\n    setIsRefreshingViews(lastIsRefreshingViewsValue);\n  }\n}\nfunction checkNoChangesInternal(lView, mode, notifyErrorHandler = true) {\n  setIsInCheckNoChangesMode(mode);\n  try {\n    detectChangesInternal(lView, notifyErrorHandler);\n  } finally {\n    setIsInCheckNoChangesMode(CheckNoChangesMode.Off);\n  }\n}\n/**\n * Processes a view in update mode. This includes a number of steps in a specific order:\n * - executing a template function in update mode;\n * - executing hooks;\n * - refreshing queries;\n * - setting host bindings;\n * - refreshing child (embedded and component) views.\n */\nfunction refreshView(tView, lView, templateFn, context) {\n  ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');\n  const flags = lView[FLAGS];\n  if ((flags & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */) return;\n  // Check no changes mode is a dev only mode used to verify that bindings have not changed\n  // since they were assigned. We do not want to execute lifecycle hooks in that mode.\n  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n  const isInExhaustiveCheckNoChangesPass = ngDevMode && isExhaustiveCheckNoChanges();\n  // Start component reactive context\n  // - We might already be in a reactive context if this is an embedded view of the host.\n  // - We might be descending into a view that needs a consumer.\n  enterView(lView);\n  let returnConsumerToPool = true;\n  let prevConsumer = null;\n  let currentConsumer = null;\n  if (!isInCheckNoChangesPass) {\n    if (viewShouldHaveReactiveConsumer(tView)) {\n      currentConsumer = getOrBorrowReactiveLViewConsumer(lView);\n      prevConsumer = consumerBeforeComputation$1(currentConsumer);\n    } else if (getActiveConsumer$1() === null) {\n      // If the current view should not have a reactive consumer but we don't have an active consumer,\n      // we still need to create a temporary consumer to track any signal reads in this template.\n      // This is a rare case that can happen with `viewContainerRef.createEmbeddedView(...).detectChanges()`.\n      // This temporary consumer marks the first parent that _should_ have a consumer for refresh.\n      // Once that refresh happens, the signals will be tracked in the parent consumer and we can destroy\n      // the temporary one.\n      returnConsumerToPool = false;\n      currentConsumer = getOrCreateTemporaryConsumer(lView);\n      prevConsumer = consumerBeforeComputation$1(currentConsumer);\n    } else if (lView[REACTIVE_TEMPLATE_CONSUMER]) {\n      consumerDestroy$1(lView[REACTIVE_TEMPLATE_CONSUMER]);\n      lView[REACTIVE_TEMPLATE_CONSUMER] = null;\n    }\n  }\n  try {\n    resetPreOrderHookFlags(lView);\n    setBindingIndex(tView.bindingStartIndex);\n    if (templateFn !== null) {\n      executeTemplate(tView, lView, templateFn, 2 /* RenderFlags.Update */, context);\n    }\n    const hooksInitPhaseCompleted = (flags & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;\n    // execute pre-order hooks (OnInit, OnChanges, DoCheck)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const preOrderCheckHooks = tView.preOrderCheckHooks;\n        if (preOrderCheckHooks !== null) {\n          executeCheckHooks(lView, preOrderCheckHooks, null);\n        }\n      } else {\n        const preOrderHooks = tView.preOrderHooks;\n        if (preOrderHooks !== null) {\n          executeInitAndCheckHooks(lView, preOrderHooks, 0 /* InitPhaseState.OnInitHooksToBeRun */, null);\n        }\n        incrementInitPhaseFlags(lView, 0 /* InitPhaseState.OnInitHooksToBeRun */);\n      }\n    }\n    // We do not need to mark transplanted views for refresh when doing exhaustive checks\n    // because all views will be reached anyways during the traversal.\n    if (!isInExhaustiveCheckNoChangesPass) {\n      // First mark transplanted views that are declared in this lView as needing a refresh at their\n      // insertion points. This is needed to avoid the situation where the template is defined in this\n      // `LView` but its declaration appears after the insertion component.\n      markTransplantedViewsForRefresh(lView);\n    }\n    runEffectsInView(lView);\n    detectChangesInEmbeddedViews(lView, 0 /* ChangeDetectionMode.Global */);\n    // Content query results must be refreshed before content hooks are called.\n    if (tView.contentQueries !== null) {\n      refreshContentQueries(tView, lView);\n    }\n    // execute content hooks (AfterContentInit, AfterContentChecked)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const contentCheckHooks = tView.contentCheckHooks;\n        if (contentCheckHooks !== null) {\n          executeCheckHooks(lView, contentCheckHooks);\n        }\n      } else {\n        const contentHooks = tView.contentHooks;\n        if (contentHooks !== null) {\n          executeInitAndCheckHooks(lView, contentHooks, 1 /* InitPhaseState.AfterContentInitHooksToBeRun */);\n        }\n        incrementInitPhaseFlags(lView, 1 /* InitPhaseState.AfterContentInitHooksToBeRun */);\n      }\n    }\n    processHostBindingOpCodes(tView, lView);\n    // Refresh child component views.\n    const components = tView.components;\n    if (components !== null) {\n      detectChangesInChildComponents(lView, components, 0 /* ChangeDetectionMode.Global */);\n    }\n    // View queries must execute after refreshing child components because a template in this view\n    // could be inserted in a child component. If the view query executes before child component\n    // refresh, the template might not yet be inserted.\n    const viewQuery = tView.viewQuery;\n    if (viewQuery !== null) {\n      executeViewQueryFn(2 /* RenderFlags.Update */, viewQuery, context);\n    }\n    // execute view hooks (AfterViewInit, AfterViewChecked)\n    // PERF WARNING: do NOT extract this to a separate function without running benchmarks\n    if (!isInCheckNoChangesPass) {\n      if (hooksInitPhaseCompleted) {\n        const viewCheckHooks = tView.viewCheckHooks;\n        if (viewCheckHooks !== null) {\n          executeCheckHooks(lView, viewCheckHooks);\n        }\n      } else {\n        const viewHooks = tView.viewHooks;\n        if (viewHooks !== null) {\n          executeInitAndCheckHooks(lView, viewHooks, 2 /* InitPhaseState.AfterViewInitHooksToBeRun */);\n        }\n        incrementInitPhaseFlags(lView, 2 /* InitPhaseState.AfterViewInitHooksToBeRun */);\n      }\n    }\n    if (tView.firstUpdatePass === true) {\n      // We need to make sure that we only flip the flag on successful `refreshView` only\n      // Don't do this in `finally` block.\n      // If we did this in `finally` block then an exception could block the execution of styling\n      // instructions which in turn would be unable to insert themselves into the styling linked\n      // list. The result of this would be that if the exception would not be throw on subsequent CD\n      // the styling would be unable to process it data and reflect to the DOM.\n      tView.firstUpdatePass = false;\n    }\n    // Schedule any effects that are waiting on the update pass of this view.\n    if (lView[EFFECTS_TO_SCHEDULE]) {\n      for (const notifyEffect of lView[EFFECTS_TO_SCHEDULE]) {\n        notifyEffect();\n      }\n      // Once they've been run, we can drop the array.\n      lView[EFFECTS_TO_SCHEDULE] = null;\n    }\n    // Do not reset the dirty state when running in check no changes mode. We don't want components\n    // to behave differently depending on whether check no changes is enabled or not. For example:\n    // Marking an OnPush component as dirty from within the `ngAfterViewInit` hook in order to\n    // refresh a `NgClass` binding should work. If we would reset the dirty state in the check\n    // no changes cycle, the component would be not be dirty for the next update pass. This would\n    // be different in production mode where the component dirty state is not reset.\n    if (!isInCheckNoChangesPass) {\n      lView[FLAGS] &= ~(64 /* LViewFlags.Dirty */ | 8 /* LViewFlags.FirstLViewPass */);\n    }\n  } catch (e) {\n    if (!isInCheckNoChangesPass) {\n      // If refreshing a view causes an error, we need to remark the ancestors as needing traversal\n      // because the error might have caused a situation where views below the current location are\n      // dirty but will be unreachable because the \"has dirty children\" flag in the ancestors has been\n      // cleared during change detection and we failed to run to completion.\n      markAncestorsForTraversal(lView);\n    }\n    throw e;\n  } finally {\n    if (currentConsumer !== null) {\n      consumerAfterComputation$1(currentConsumer, prevConsumer);\n      if (returnConsumerToPool) {\n        maybeReturnReactiveLViewConsumer(currentConsumer);\n      }\n    }\n    leaveView();\n  }\n}\n/**\n * Goes over embedded views (ones created through ViewContainerRef APIs) and refreshes\n * them by executing an associated template function.\n */\nfunction detectChangesInEmbeddedViews(lView, mode) {\n  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n    for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n      const embeddedLView = lContainer[i];\n      detectChangesInViewIfAttached(embeddedLView, mode);\n    }\n  }\n}\n/**\n * Mark transplanted views as needing to be refreshed at their attachment points.\n *\n * @param lView The `LView` that may have transplanted views.\n */\nfunction markTransplantedViewsForRefresh(lView) {\n  for (let lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {\n    if (!(lContainer[FLAGS] & LContainerFlags.HasTransplantedViews)) continue;\n    const movedViews = lContainer[MOVED_VIEWS];\n    ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');\n    for (let i = 0; i < movedViews.length; i++) {\n      const movedLView = movedViews[i];\n      markViewForRefresh(movedLView);\n    }\n  }\n}\n/**\n * Detects changes in a component by entering the component view and processing its bindings,\n * queries, etc. if it is CheckAlways, OnPush and Dirty, etc.\n *\n * @param componentHostIdx  Element index in LView[] (adjusted for HEADER_OFFSET)\n */\nfunction detectChangesInComponent(hostLView, componentHostIdx, mode) {\n  ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');\n  const componentView = getComponentLViewByIndex(componentHostIdx, hostLView);\n  detectChangesInViewIfAttached(componentView, mode);\n}\n/**\n * Visits a view as part of change detection traversal.\n *\n * If the view is detached, no additional traversal happens.\n */\nfunction detectChangesInViewIfAttached(lView, mode) {\n  if (!viewAttachedToChangeDetector(lView)) {\n    return;\n  }\n  detectChangesInView(lView, mode);\n}\n/**\n * Visits a view as part of change detection traversal.\n *\n * The view is refreshed if:\n * - If the view is CheckAlways or Dirty and ChangeDetectionMode is `Global`\n * - If the view has the `RefreshView` flag\n *\n * The view is not refreshed, but descendants are traversed in `ChangeDetectionMode.Targeted` if the\n * view HasChildViewsToRefresh flag is set.\n */\nfunction detectChangesInView(lView, mode) {\n  const isInCheckNoChangesPass = ngDevMode && isInCheckNoChangesMode();\n  const tView = lView[TVIEW];\n  const flags = lView[FLAGS];\n  const consumer = lView[REACTIVE_TEMPLATE_CONSUMER];\n  // Refresh CheckAlways views in Global mode.\n  let shouldRefreshView = !!(mode === 0 /* ChangeDetectionMode.Global */ && flags & 16 /* LViewFlags.CheckAlways */);\n  // Refresh Dirty views in Global mode, as long as we're not in checkNoChanges.\n  // CheckNoChanges never worked with `OnPush` components because the `Dirty` flag was\n  // cleared before checkNoChanges ran. Because there is now a loop for to check for\n  // backwards views, it gives an opportunity for `OnPush` components to be marked `Dirty`\n  // before the CheckNoChanges pass. We don't want existing errors that are hidden by the\n  // current CheckNoChanges bug to surface when making unrelated changes.\n  shouldRefreshView ||= !!(flags & 64 /* LViewFlags.Dirty */ && mode === 0 /* ChangeDetectionMode.Global */ && !isInCheckNoChangesPass);\n  // Always refresh views marked for refresh, regardless of mode.\n  shouldRefreshView ||= !!(flags & 1024 /* LViewFlags.RefreshView */);\n  // Refresh views when they have a dirty reactive consumer, regardless of mode.\n  shouldRefreshView ||= !!(consumer?.dirty && consumerPollProducersForChange$1(consumer));\n  shouldRefreshView ||= !!(ngDevMode && isExhaustiveCheckNoChanges());\n  // Mark the Flags and `ReactiveNode` as not dirty before refreshing the component, so that they\n  // can be re-dirtied during the refresh process.\n  if (consumer) {\n    consumer.dirty = false;\n  }\n  lView[FLAGS] &= ~(8192 /* LViewFlags.HasChildViewsToRefresh */ | 1024 /* LViewFlags.RefreshView */);\n  if (shouldRefreshView) {\n    refreshView(tView, lView, tView.template, lView[CONTEXT]);\n  } else if (flags & 8192 /* LViewFlags.HasChildViewsToRefresh */) {\n    runEffectsInView(lView);\n    detectChangesInEmbeddedViews(lView, 1 /* ChangeDetectionMode.Targeted */);\n    const components = tView.components;\n    if (components !== null) {\n      detectChangesInChildComponents(lView, components, 1 /* ChangeDetectionMode.Targeted */);\n    }\n  }\n}\n/** Refreshes child components in the current view (update mode). */\nfunction detectChangesInChildComponents(hostLView, components, mode) {\n  for (let i = 0; i < components.length; i++) {\n    detectChangesInComponent(hostLView, components[i], mode);\n  }\n}\n\n/**\n * Marks current view and all ancestors dirty.\n *\n * Returns the root view because it is found as a byproduct of marking the view tree\n * dirty, and can be used by methods that consume markViewDirty() to easily schedule\n * change detection. Otherwise, such methods would need to traverse up the view tree\n * an additional time to get the root view and schedule a tick on it.\n *\n * @param lView The starting LView to mark dirty\n * @returns the root LView\n */\nfunction markViewDirty(lView, source) {\n  const dirtyBitsToUse = isRefreshingViews() ?\n  // When we are actively refreshing views, we only use the `Dirty` bit to mark a view\n  64 /* LViewFlags.Dirty */ :\n  // When we are not actively refreshing a view tree, it is absolutely\n  // valid to update state and mark views dirty. We use the `RefreshView` flag in this\n  // case to allow synchronously rerunning change detection. This applies today to\n  // afterRender hooks as well as animation listeners which execute after detecting\n  // changes in a view when the render factory flushes.\n  1024 /* LViewFlags.RefreshView */ | 64 /* LViewFlags.Dirty */;\n  lView[ENVIRONMENT].changeDetectionScheduler?.notify(source);\n  while (lView) {\n    lView[FLAGS] |= dirtyBitsToUse;\n    const parent = getLViewParent(lView);\n    // Stop traversing up as soon as you find a root view that wasn't attached to any container\n    if (isRootView(lView) && !parent) {\n      return lView;\n    }\n    // continue otherwise\n    lView = parent;\n  }\n  return null;\n}\nclass ViewRef$1 {\n  _lView;\n  _cdRefInjectingView;\n  notifyErrorHandler;\n  _appRef = null;\n  _attachedToViewContainer = false;\n  get rootNodes() {\n    const lView = this._lView;\n    const tView = lView[TVIEW];\n    return collectNativeNodes(tView, lView, tView.firstChild, []);\n  }\n  constructor(\n  /**\n   * This represents `LView` associated with the component when ViewRef is a ChangeDetectorRef.\n   *\n   * When ViewRef is created for a dynamic component, this also represents the `LView` for the\n   * component.\n   *\n   * For a \"regular\" ViewRef created for an embedded view, this is the `LView` for the embedded\n   * view.\n   *\n   * @internal\n   */\n  _lView,\n  /**\n   * This represents the `LView` associated with the point where `ChangeDetectorRef` was\n   * requested.\n   *\n   * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view.\n   */\n  _cdRefInjectingView, notifyErrorHandler = true) {\n    this._lView = _lView;\n    this._cdRefInjectingView = _cdRefInjectingView;\n    this.notifyErrorHandler = notifyErrorHandler;\n  }\n  get context() {\n    return this._lView[CONTEXT];\n  }\n  /**\n   * Reports whether the given view is considered dirty according to the different marking mechanisms.\n   */\n  get dirty() {\n    return !!(this._lView[FLAGS] & (64 /* LViewFlags.Dirty */ | 1024 /* LViewFlags.RefreshView */ | 8192 /* LViewFlags.HasChildViewsToRefresh */)) || !!this._lView[REACTIVE_TEMPLATE_CONSUMER]?.dirty;\n  }\n  /**\n   * @deprecated Replacing the full context object is not supported. Modify the context\n   *   directly, or consider using a `Proxy` if you need to replace the full object.\n   * // TODO(devversion): Remove this.\n   */\n  set context(value) {\n    if (ngDevMode) {\n      // Note: We have a warning message here because the `@deprecated` JSDoc will not be picked\n      // up for assignments on the setter. We want to let users know about the deprecated usage.\n      console.warn('Angular: Replacing the `context` object of an `EmbeddedViewRef` is deprecated.');\n    }\n    this._lView[CONTEXT] = value;\n  }\n  get destroyed() {\n    return (this._lView[FLAGS] & 256 /* LViewFlags.Destroyed */) === 256 /* LViewFlags.Destroyed */;\n  }\n  destroy() {\n    if (this._appRef) {\n      this._appRef.detachView(this);\n    } else if (this._attachedToViewContainer) {\n      const parent = this._lView[PARENT];\n      if (isLContainer(parent)) {\n        const viewRefs = parent[VIEW_REFS];\n        const index = viewRefs ? viewRefs.indexOf(this) : -1;\n        if (index > -1) {\n          ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');\n          detachView(parent, index);\n          removeFromArray(viewRefs, index);\n        }\n      }\n      this._attachedToViewContainer = false;\n    }\n    destroyLView(this._lView[TVIEW], this._lView);\n  }\n  onDestroy(callback) {\n    storeLViewOnDestroy(this._lView, callback);\n  }\n  /**\n   * Marks a view and all of its ancestors dirty.\n   *\n   * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush} component is\n   * checked when it needs to be re-rendered but the two normal triggers haven't marked it\n   * dirty (i.e. inputs haven't changed and events haven't fired in the view).\n   *\n   * <!-- TODO: Add a link to a chapter on OnPush components -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * ```ts\n   * @Component({\n   *   selector: 'app-root',\n   *   template: `Number of ticks: {{numberOfTicks}}`\n   *   changeDetection: ChangeDetectionStrategy.OnPush,\n   * })\n   * class AppComponent {\n   *   numberOfTicks = 0;\n   *\n   *   constructor(private ref: ChangeDetectorRef) {\n   *     setInterval(() => {\n   *       this.numberOfTicks++;\n   *       // the following is required, otherwise the view will not be updated\n   *       this.ref.markForCheck();\n   *     }, 1000);\n   *   }\n   * }\n   * ```\n   */\n  markForCheck() {\n    markViewDirty(this._cdRefInjectingView || this._lView, 4 /* NotificationSource.MarkForCheck */);\n  }\n  markForRefresh() {\n    markViewForRefresh(this._cdRefInjectingView || this._lView);\n  }\n  /**\n   * Detaches the view from the change detection tree.\n   *\n   * Detached views will not be checked during change detection runs until they are\n   * re-attached, even if they are dirty. `detach` can be used in combination with\n   * {@link ChangeDetectorRef#detectChanges} to implement local change\n   * detection checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds. We can do that by detaching\n   * the component's change detector and doing a local check every five seconds.\n   *\n   * ```ts\n   * class DataProvider {\n   *   // in a real application the returned data will be different every time\n   *   get data() {\n   *     return [1,2,3,4,5];\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'giant-list',\n   *   template: `\n   *     <li *ngFor=\"let d of dataProvider.data\">Data {{d}}</li>\n   *   `,\n   * })\n   * class GiantList {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {\n   *     ref.detach();\n   *     setInterval(() => {\n   *       this.ref.detectChanges();\n   *     }, 5000);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   providers: [DataProvider],\n   *   template: `\n   *     <giant-list><giant-list>\n   *   `,\n   * })\n   * class App {\n   * }\n   * ```\n   */\n  detach() {\n    this._lView[FLAGS] &= ~128 /* LViewFlags.Attached */;\n  }\n  /**\n   * Re-attaches a view to the change detection tree.\n   *\n   * This can be used to re-attach views that were previously detached from the tree\n   * using {@link ChangeDetectorRef#detach}. Views are attached to the tree by default.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example creates a component displaying `live` data. The component will detach\n   * its change detector from the main change detector tree when the component's live property\n   * is set to false.\n   *\n   * ```ts\n   * class DataProvider {\n   *   data = 1;\n   *\n   *   constructor() {\n   *     setInterval(() => {\n   *       this.data = this.data * 2;\n   *     }, 500);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'live-data',\n   *   inputs: ['live'],\n   *   template: 'Data: {{dataProvider.data}}'\n   * })\n   * class LiveData {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}\n   *\n   *   set live(value) {\n   *     if (value) {\n   *       this.ref.reattach();\n   *     } else {\n   *       this.ref.detach();\n   *     }\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app-root',\n   *   providers: [DataProvider],\n   *   template: `\n   *     Live Update: <input type=\"checkbox\" [(ngModel)]=\"live\">\n   *     <live-data [live]=\"live\"><live-data>\n   *   `,\n   * })\n   * class AppComponent {\n   *   live = true;\n   * }\n   * ```\n   */\n  reattach() {\n    updateAncestorTraversalFlagsOnAttach(this._lView);\n    this._lView[FLAGS] |= 128 /* LViewFlags.Attached */;\n  }\n  /**\n   * Checks the view and its children.\n   *\n   * This can also be used in combination with {@link ChangeDetectorRef#detach} to implement\n   * local change detection checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine, the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds.\n   *\n   * We can do that by detaching the component's change detector and doing a local change detection\n   * check every five seconds.\n   *\n   * See {@link ChangeDetectorRef#detach} for more information.\n   */\n  detectChanges() {\n    // Add `RefreshView` flag to ensure this view is refreshed if not already dirty.\n    // `RefreshView` flag is used intentionally over `Dirty` because it gets cleared before\n    // executing any of the actual refresh code while the `Dirty` flag doesn't get cleared\n    // until the end of the refresh. Using `RefreshView` prevents creating a potential difference\n    // in the state of the LViewFlags during template execution.\n    this._lView[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n    detectChangesInternal(this._lView, this.notifyErrorHandler);\n  }\n  /**\n   * Checks the change detector and its children, and throws if any changes are detected.\n   *\n   * This is used in development mode to verify that running change detection doesn't\n   * introduce other changes.\n   */\n  checkNoChanges() {\n    if (ngDevMode) {\n      checkNoChangesInternal(this._lView, CheckNoChangesMode.OnlyDirtyViews, this.notifyErrorHandler);\n    }\n  }\n  attachToViewContainerRef() {\n    if (this._appRef) {\n      throw new RuntimeError(902 /* RuntimeErrorCode.VIEW_ALREADY_ATTACHED */, ngDevMode && 'This view is already attached directly to the ApplicationRef!');\n    }\n    this._attachedToViewContainer = true;\n  }\n  detachFromAppRef() {\n    this._appRef = null;\n    const isRoot = isRootView(this._lView);\n    const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n    if (declarationContainer !== null && !isRoot) {\n      detachMovedView(declarationContainer, this._lView);\n    }\n    detachViewFromDOM(this._lView[TVIEW], this._lView);\n  }\n  attachToAppRef(appRef) {\n    if (this._attachedToViewContainer) {\n      throw new RuntimeError(902 /* RuntimeErrorCode.VIEW_ALREADY_ATTACHED */, ngDevMode && 'This view is already attached to a ViewContainer!');\n    }\n    this._appRef = appRef;\n    const isRoot = isRootView(this._lView);\n    const declarationContainer = this._lView[DECLARATION_LCONTAINER];\n    if (declarationContainer !== null && !isRoot) {\n      trackMovedView(declarationContainer, this._lView);\n    }\n    updateAncestorTraversalFlagsOnAttach(this._lView);\n  }\n}\n\n/**\n * Represents an embedded template that can be used to instantiate embedded views.\n * To instantiate embedded views based on a template, use the `ViewContainerRef`\n * method `createEmbeddedView()`.\n *\n * Access a `TemplateRef` instance by placing a directive on an `<ng-template>`\n * element (or directive prefixed with `*`). The `TemplateRef` for the embedded view\n * is injected into the constructor of the directive,\n * using the `TemplateRef` token.\n *\n * You can also use a `Query` to find a `TemplateRef` associated with\n * a component or a directive.\n *\n * @see {@link ViewContainerRef}\n *\n * @publicApi\n */\nclass TemplateRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectTemplateRef;\n}\nconst ViewEngineTemplateRef = TemplateRef;\n// TODO(alxhub): combine interface and implementation. Currently this is challenging since something\n// in g3 depends on them being separate.\nconst R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {\n  _declarationLView;\n  _declarationTContainer;\n  elementRef;\n  constructor(_declarationLView, _declarationTContainer, elementRef) {\n    super();\n    this._declarationLView = _declarationLView;\n    this._declarationTContainer = _declarationTContainer;\n    this.elementRef = elementRef;\n  }\n  /**\n   * Returns an `ssrId` associated with a TView, which was used to\n   * create this instance of the `TemplateRef`.\n   *\n   * @internal\n   */\n  get ssrId() {\n    return this._declarationTContainer.tView?.ssrId || null;\n  }\n  createEmbeddedView(context, injector) {\n    return this.createEmbeddedViewImpl(context, injector);\n  }\n  /**\n   * @internal\n   */\n  createEmbeddedViewImpl(context, injector, dehydratedView) {\n    const embeddedLView = createAndRenderEmbeddedLView(this._declarationLView, this._declarationTContainer, context, {\n      embeddedViewInjector: injector,\n      dehydratedView\n    });\n    return new ViewRef$1(embeddedLView);\n  }\n};\n/**\n * Creates a TemplateRef given a node.\n *\n * @returns The TemplateRef instance to use\n */\nfunction injectTemplateRef() {\n  return createTemplateRef(getCurrentTNode(), getLView());\n}\n/**\n * Creates a TemplateRef and stores it on the injector.\n *\n * @param hostTNode The node on which a TemplateRef is requested\n * @param hostLView The `LView` to which the node belongs\n * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type\n */\nfunction createTemplateRef(hostTNode, hostLView) {\n  if (hostTNode.type & 4 /* TNodeType.Container */) {\n    ngDevMode && assertDefined(hostTNode.tView, 'TView must be allocated');\n    return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));\n  }\n  return null;\n}\nconst AT_THIS_LOCATION = '<-- AT THIS LOCATION';\n/**\n * Retrieves a user friendly string for a given TNodeType for use in\n * friendly error messages\n *\n * @param tNodeType\n * @returns\n */\nfunction getFriendlyStringFromTNodeType(tNodeType) {\n  switch (tNodeType) {\n    case 4 /* TNodeType.Container */:\n      return 'view container';\n    case 2 /* TNodeType.Element */:\n      return 'element';\n    case 8 /* TNodeType.ElementContainer */:\n      return 'ng-container';\n    case 32 /* TNodeType.Icu */:\n      return 'icu';\n    case 64 /* TNodeType.Placeholder */:\n      return 'i18n';\n    case 16 /* TNodeType.Projection */:\n      return 'projection';\n    case 1 /* TNodeType.Text */:\n      return 'text';\n    case 128 /* TNodeType.LetDeclaration */:\n      return '@let';\n    default:\n      // This should not happen as we cover all possible TNode types above.\n      return '<unknown>';\n  }\n}\n/**\n * Validates that provided nodes match during the hydration process.\n */\nfunction validateMatchingNode(node, nodeType, tagName, lView, tNode, isViewContainerAnchor = false) {\n  if (!node || node.nodeType !== nodeType || node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== tagName?.toLowerCase()) {\n    const expectedNode = shortRNodeDescription(nodeType, tagName, null);\n    let header = `During hydration Angular expected ${expectedNode} but `;\n    const hostComponentDef = getDeclarationComponentDef(lView);\n    const componentClassName = hostComponentDef?.type?.name;\n    const expectedDom = describeExpectedDom(lView, tNode, isViewContainerAnchor);\n    const expected = `Angular expected this DOM:\\n\\n${expectedDom}\\n\\n`;\n    let actual = '';\n    const componentHostElement = unwrapRNode(lView[HOST]);\n    if (!node) {\n      // No node found during hydration.\n      header += `the node was not found.\\n\\n`;\n      // Since the node is missing, we use the closest node to attach the error to\n      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom);\n    } else {\n      const actualNode = shortRNodeDescription(node.nodeType, node.tagName ?? null, node.textContent ?? null);\n      header += `found ${actualNode}.\\n\\n`;\n      const actualDom = describeDomFromNode(node);\n      actual = `Actual DOM is:\\n\\n${actualDom}\\n\\n`;\n      // DevTools only report hydration issues on the component level, so we attach extra debug\n      // info to a component host element to make it available to DevTools.\n      markRNodeAsHavingHydrationMismatch(componentHostElement, expectedDom, actualDom);\n    }\n    const footer = getHydrationErrorFooter(componentClassName);\n    const message = header + expected + actual + getHydrationAttributeNote() + footer;\n    throw new RuntimeError(-500 /* RuntimeErrorCode.HYDRATION_NODE_MISMATCH */, message);\n  }\n}\n/**\n * Validates that a given node has sibling nodes\n */\nfunction validateSiblingNodeExists(node) {\n  validateNodeExists(node);\n  if (!node.nextSibling) {\n    const header = 'During hydration Angular expected more sibling nodes to be present.\\n\\n';\n    const actual = `Actual DOM is:\\n\\n${describeDomFromNode(node)}\\n\\n`;\n    const footer = getHydrationErrorFooter();\n    const message = header + actual + footer;\n    markRNodeAsHavingHydrationMismatch(node, '', actual);\n    throw new RuntimeError(-501 /* RuntimeErrorCode.HYDRATION_MISSING_SIBLINGS */, message);\n  }\n}\n/**\n * Validates that a node exists or throws\n */\nfunction validateNodeExists(node, lView = null, tNode = null) {\n  if (!node) {\n    const header = 'During hydration, Angular expected an element to be present at this location.\\n\\n';\n    let expected = '';\n    let footer = '';\n    if (lView !== null && tNode !== null) {\n      expected = describeExpectedDom(lView, tNode, false);\n      footer = getHydrationErrorFooter();\n      // Since the node is missing, we use the closest node to attach the error to\n      markRNodeAsHavingHydrationMismatch(unwrapRNode(lView[HOST]), expected, '');\n    }\n    throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, `${header}${expected}\\n\\n${footer}`);\n  }\n}\n/**\n * Builds the hydration error message when a node is not found\n *\n * @param lView the LView where the node exists\n * @param tNode the TNode\n */\nfunction nodeNotFoundError(lView, tNode) {\n  const header = 'During serialization, Angular was unable to find an element in the DOM:\\n\\n';\n  const expected = `${describeExpectedDom(lView, tNode, false)}\\n\\n`;\n  const footer = getHydrationErrorFooter();\n  throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, header + expected + footer);\n}\n/**\n * Builds a hydration error message when a node is not found at a path location\n *\n * @param host the Host Node\n * @param path the path to the node\n */\nfunction nodeNotFoundAtPathError(host, path) {\n  const header = `During hydration Angular was unable to locate a node ` + `using the \"${path}\" path, starting from the ${describeRNode(host)} node.\\n\\n`;\n  const footer = getHydrationErrorFooter();\n  markRNodeAsHavingHydrationMismatch(host);\n  throw new RuntimeError(-502 /* RuntimeErrorCode.HYDRATION_MISSING_NODE */, header + footer);\n}\n/**\n * Builds the hydration error message in the case that dom nodes are created outside of\n * the Angular context and are being used as projected nodes\n *\n * @param lView the LView\n * @param tNode the TNode\n * @returns an error\n */\nfunction unsupportedProjectionOfDomNodes(rNode) {\n  const header = 'During serialization, Angular detected DOM nodes ' + 'that were created outside of Angular context and provided as projectable nodes ' + '(likely via `ViewContainerRef.createComponent` or `createComponent` APIs). ' + 'Hydration is not supported for such cases, consider refactoring the code to avoid ' + 'this pattern or using `ngSkipHydration` on the host element of the component.\\n\\n';\n  const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n  const message = header + actual + getHydrationAttributeNote();\n  return new RuntimeError(-503 /* RuntimeErrorCode.UNSUPPORTED_PROJECTION_DOM_NODES */, message);\n}\n/**\n * Builds the hydration error message in the case that ngSkipHydration was used on a\n * node that is not a component host element or host binding\n *\n * @param rNode the HTML Element\n * @returns an error\n */\nfunction invalidSkipHydrationHost(rNode) {\n  const header = 'The `ngSkipHydration` flag is applied on a node ' + \"that doesn't act as a component host. Hydration can be \" + 'skipped only on per-component basis.\\n\\n';\n  const actual = `${describeDomFromNode(rNode)}\\n\\n`;\n  const footer = 'Please move the `ngSkipHydration` attribute to the component host element.\\n\\n';\n  const message = header + actual + footer;\n  return new RuntimeError(-504 /* RuntimeErrorCode.INVALID_SKIP_HYDRATION_HOST */, message);\n}\n// Stringification methods\n/**\n * Stringifies a given TNode's attributes\n *\n * @param tNode a provided TNode\n * @returns string\n */\nfunction stringifyTNodeAttrs(tNode) {\n  const results = [];\n  if (tNode.attrs) {\n    for (let i = 0; i < tNode.attrs.length;) {\n      const attrName = tNode.attrs[i++];\n      // Once we reach the first flag, we know that the list of\n      // attributes is over.\n      if (typeof attrName == 'number') {\n        break;\n      }\n      const attrValue = tNode.attrs[i++];\n      results.push(`${attrName}=\"${shorten(attrValue)}\"`);\n    }\n  }\n  return results.join(' ');\n}\n/**\n * The list of internal attributes that should be filtered out while\n * producing an error message.\n */\nconst internalAttrs = new Set(['ngh', 'ng-version', 'ng-server-context']);\n/**\n * Stringifies an HTML Element's attributes\n *\n * @param rNode an HTML Element\n * @returns string\n */\nfunction stringifyRNodeAttrs(rNode) {\n  const results = [];\n  for (let i = 0; i < rNode.attributes.length; i++) {\n    const attr = rNode.attributes[i];\n    if (internalAttrs.has(attr.name)) continue;\n    results.push(`${attr.name}=\"${shorten(attr.value)}\"`);\n  }\n  return results.join(' ');\n}\n// Methods for Describing the DOM\n/**\n * Converts a tNode to a helpful readable string value for use in error messages\n *\n * @param tNode a given TNode\n * @param innerContent the content of the node\n * @returns string\n */\nfunction describeTNode(tNode, innerContent = '…') {\n  switch (tNode.type) {\n    case 1 /* TNodeType.Text */:\n      const content = tNode.value ? `(${tNode.value})` : '';\n      return `#text${content}`;\n    case 2 /* TNodeType.Element */:\n      const attrs = stringifyTNodeAttrs(tNode);\n      const tag = tNode.value.toLowerCase();\n      return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}</${tag}>`;\n    case 8 /* TNodeType.ElementContainer */:\n      return '<!-- ng-container -->';\n    case 4 /* TNodeType.Container */:\n      return '<!-- container -->';\n    default:\n      const typeAsString = getFriendlyStringFromTNodeType(tNode.type);\n      return `#node(${typeAsString})`;\n  }\n}\n/**\n * Converts an RNode to a helpful readable string value for use in error messages\n *\n * @param rNode a given RNode\n * @param innerContent the content of the node\n * @returns string\n */\nfunction describeRNode(rNode, innerContent = '…') {\n  const node = rNode;\n  switch (node.nodeType) {\n    case Node.ELEMENT_NODE:\n      const tag = node.tagName.toLowerCase();\n      const attrs = stringifyRNodeAttrs(node);\n      return `<${tag}${attrs ? ' ' + attrs : ''}>${innerContent}</${tag}>`;\n    case Node.TEXT_NODE:\n      const content = node.textContent ? shorten(node.textContent) : '';\n      return `#text${content ? `(${content})` : ''}`;\n    case Node.COMMENT_NODE:\n      return `<!-- ${shorten(node.textContent ?? '')} -->`;\n    default:\n      return `#node(${node.nodeType})`;\n  }\n}\n/**\n * Builds the string containing the expected DOM present given the LView and TNode\n * values for a readable error message\n *\n * @param lView the lView containing the DOM\n * @param tNode the tNode\n * @param isViewContainerAnchor boolean\n * @returns string\n */\nfunction describeExpectedDom(lView, tNode, isViewContainerAnchor) {\n  const spacer = '  ';\n  let content = '';\n  if (tNode.prev) {\n    content += spacer + '…\\n';\n    content += spacer + describeTNode(tNode.prev) + '\\n';\n  } else if (tNode.type && tNode.type & 12 /* TNodeType.AnyContainer */) {\n    content += spacer + '…\\n';\n  }\n  if (isViewContainerAnchor) {\n    content += spacer + describeTNode(tNode) + '\\n';\n    content += spacer + `<!-- container -->  ${AT_THIS_LOCATION}\\n`;\n  } else {\n    content += spacer + describeTNode(tNode) + `  ${AT_THIS_LOCATION}\\n`;\n  }\n  content += spacer + '…\\n';\n  const parentRNode = tNode.type ? getParentRElement(lView[TVIEW], tNode, lView) : null;\n  if (parentRNode) {\n    content = describeRNode(parentRNode, '\\n' + content);\n  }\n  return content;\n}\n/**\n * Builds the string containing the DOM present around a given RNode for a\n * readable error message\n *\n * @param node the RNode\n * @returns string\n */\nfunction describeDomFromNode(node) {\n  const spacer = '  ';\n  let content = '';\n  const currentNode = node;\n  if (currentNode.previousSibling) {\n    content += spacer + '…\\n';\n    content += spacer + describeRNode(currentNode.previousSibling) + '\\n';\n  }\n  content += spacer + describeRNode(currentNode) + `  ${AT_THIS_LOCATION}\\n`;\n  if (node.nextSibling) {\n    content += spacer + '…\\n';\n  }\n  if (node.parentNode) {\n    content = describeRNode(currentNode.parentNode, '\\n' + content);\n  }\n  return content;\n}\n/**\n * Shortens the description of a given RNode by its type for readability\n *\n * @param nodeType the type of node\n * @param tagName the node tag name\n * @param textContent the text content in the node\n * @returns string\n */\nfunction shortRNodeDescription(nodeType, tagName, textContent) {\n  switch (nodeType) {\n    case Node.ELEMENT_NODE:\n      return `<${tagName.toLowerCase()}>`;\n    case Node.TEXT_NODE:\n      const content = textContent ? ` (with the \"${shorten(textContent)}\" content)` : '';\n      return `a text node${content}`;\n    case Node.COMMENT_NODE:\n      return 'a comment node';\n    default:\n      return `#node(nodeType=${nodeType})`;\n  }\n}\n/**\n * Builds the footer hydration error message\n *\n * @param componentClassName the name of the component class\n * @returns string\n */\nfunction getHydrationErrorFooter(componentClassName) {\n  const componentInfo = componentClassName ? `the \"${componentClassName}\"` : 'corresponding';\n  return `To fix this problem:\\n` + `  * check ${componentInfo} component for hydration-related issues\\n` + `  * check to see if your template has valid HTML structure\\n` + `  * or skip hydration by adding the \\`ngSkipHydration\\` attribute ` + `to its host node in a template\\n\\n`;\n}\n/**\n * An attribute related note for hydration errors\n */\nfunction getHydrationAttributeNote() {\n  return 'Note: attributes are only displayed to better represent the DOM' + ' but have no effect on hydration mismatches.\\n\\n';\n}\n// Node string utility functions\n/**\n * Strips all newlines out of a given string\n *\n * @param input a string to be cleared of new line characters\n * @returns\n */\nfunction stripNewlines(input) {\n  return input.replace(/\\s+/gm, '');\n}\n/**\n * Reduces a string down to a maximum length of characters with ellipsis for readability\n *\n * @param input a string input\n * @param maxLength a maximum length in characters\n * @returns string\n */\nfunction shorten(input, maxLength = 50) {\n  if (!input) {\n    return '';\n  }\n  input = stripNewlines(input);\n  return input.length > maxLength ? `${input.substring(0, maxLength - 1)}…` : input;\n}\n\n/**\n * Find a node in front of which `currentTNode` should be inserted (takes i18n into account).\n *\n * This method determines the `RNode` in front of which we should insert the `currentRNode`. This\n * takes `TNode.insertBeforeIndex` into account.\n *\n * @param parentTNode parent `TNode`\n * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)\n * @param lView current `LView`\n */\nfunction getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {\n  const tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;\n  const insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;\n  if (insertBeforeIndex === null) {\n    return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);\n  } else {\n    ngDevMode && assertIndexInRange(lView, insertBeforeIndex);\n    return unwrapRNode(lView[insertBeforeIndex]);\n  }\n}\n/**\n * Process `TNode.insertBeforeIndex` by adding i18n text nodes.\n *\n * See `TNode.insertBeforeIndex`\n */\nfunction processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {\n  const tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;\n  if (Array.isArray(tNodeInsertBeforeIndex)) {\n    // An array indicates that there are i18n nodes that need to be added as children of this\n    // `childRNode`. These i18n nodes were created before this `childRNode` was available and so\n    // only now can be added. The first element of the array is the normal index where we should\n    // insert the `childRNode`. Additional elements are the extra nodes to be added as children of\n    // `childRNode`.\n    ngDevMode && assertDomNode(childRNode);\n    let i18nParent = childRNode;\n    let anchorRNode = null;\n    if (!(childTNode.type & 3 /* TNodeType.AnyRNode */)) {\n      anchorRNode = i18nParent;\n      i18nParent = parentRElement;\n    }\n    if (i18nParent !== null && childTNode.componentOffset === -1) {\n      for (let i = 1; i < tNodeInsertBeforeIndex.length; i++) {\n        // No need to `unwrapRNode` because all of the indexes point to i18n text nodes.\n        // see `assertDomNode` below.\n        const i18nChild = lView[tNodeInsertBeforeIndex[i]];\n        nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);\n      }\n    }\n  }\n}\n\n/**\n * Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list\n * `tNode.insertBeforeIndex`.\n *\n * Things to keep in mind:\n * 1. All i18n text nodes are encoded as `TNodeType.Element` and are created eagerly by the\n *    `ɵɵi18nStart` instruction.\n * 2. All `TNodeType.Placeholder` `TNodes` are elements which will be created later by\n *    `ɵɵelementStart` instruction.\n * 3. `ɵɵelementStart` instruction will create `TNode`s in the ascending `TNode.index` order. (So a\n *    smaller index `TNode` is guaranteed to be created before a larger one)\n *\n * We use the above three invariants to determine `TNode.insertBeforeIndex`.\n *\n * In an ideal world `TNode.insertBeforeIndex` would always be `TNode.next.index`. However,\n * this will not work because `TNode.next.index` may be larger than `TNode.index` which means that\n * the next node is not yet created and therefore we can't insert in front of it.\n *\n * Rule1: `TNode.insertBeforeIndex = null` if `TNode.next === null` (Initial condition, as we don't\n *        know if there will be further `TNode`s inserted after.)\n * Rule2: If `previousTNode` is created after the `tNode` being inserted, then\n *        `previousTNode.insertBeforeNode = tNode.index` (So when a new `tNode` is added we check\n *        previous to see if we can update its `insertBeforeTNode`)\n *\n * See `TNode.insertBeforeIndex` for more context.\n *\n * @param previousTNodes A list of previous TNodes so that we can easily traverse `TNode`s in\n *     reverse order. (If `TNode` would have `previous` this would not be necessary.)\n * @param newTNode A TNode to add to the `previousTNodes` list.\n */\nfunction addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {\n  // Start with Rule1\n  ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');\n  previousTNodes.push(newTNode);\n  if (previousTNodes.length > 1) {\n    for (let i = previousTNodes.length - 2; i >= 0; i--) {\n      const existingTNode = previousTNodes[i];\n      // Text nodes are created eagerly and so they don't need their `indexBeforeIndex` updated.\n      // It is safe to ignore them.\n      if (!isI18nText(existingTNode)) {\n        if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {\n          // If it was created before us in time, (and it does not yet have `insertBeforeIndex`)\n          // then add the `insertBeforeIndex`.\n          setInsertBeforeIndex(existingTNode, newTNode.index);\n        }\n      }\n    }\n  }\n}\nfunction isI18nText(tNode) {\n  return !(tNode.type & 64 /* TNodeType.Placeholder */);\n}\nfunction isNewTNodeCreatedBefore(existingTNode, newTNode) {\n  return isI18nText(newTNode) || existingTNode.index > newTNode.index;\n}\nfunction getInsertBeforeIndex(tNode) {\n  const index = tNode.insertBeforeIndex;\n  return Array.isArray(index) ? index[0] : index;\n}\nfunction setInsertBeforeIndex(tNode, value) {\n  const index = tNode.insertBeforeIndex;\n  if (Array.isArray(index)) {\n    // Array is stored if we have to insert child nodes. See `TNode.insertBeforeIndex`\n    index[0] = value;\n  } else {\n    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n    tNode.insertBeforeIndex = value;\n  }\n}\n\n/**\n * Retrieve `TIcu` at a given `index`.\n *\n * The `TIcu` can be stored either directly (if it is nested ICU) OR\n * it is stored inside tho `TIcuContainer` if it is top level ICU.\n *\n * The reason for this is that the top level ICU need a `TNode` so that they are part of the render\n * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is\n * expressed (parent ICU may have selected a case which does not contain it.)\n *\n * @param tView Current `TView`.\n * @param index Index where the value should be read from.\n */\nfunction getTIcu(tView, index) {\n  const value = tView.data[index];\n  if (value === null || typeof value === 'string') return null;\n  if (ngDevMode && !(value.hasOwnProperty('tView') || value.hasOwnProperty('currentCaseLViewIndex'))) {\n    throwError(\"We expect to get 'null'|'TIcu'|'TIcuContainer', but got: \" + value);\n  }\n  // Here the `value.hasOwnProperty('currentCaseLViewIndex')` is a polymorphic read as it can be\n  // either TIcu or TIcuContainerNode. This is not ideal, but we still think it is OK because it\n  // will be just two cases which fits into the browser inline cache (inline cache can take up to\n  // 4)\n  const tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value : value.value;\n  ngDevMode && assertTIcu(tIcu);\n  return tIcu;\n}\n/**\n * Store `TIcu` at a give `index`.\n *\n * The `TIcu` can be stored either directly (if it is nested ICU) OR\n * it is stored inside tho `TIcuContainer` if it is top level ICU.\n *\n * The reason for this is that the top level ICU need a `TNode` so that they are part of the render\n * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is\n * expressed (parent ICU may have selected a case which does not contain it.)\n *\n * @param tView Current `TView`.\n * @param index Index where the value should be stored at in `Tview.data`\n * @param tIcu The TIcu to store.\n */\nfunction setTIcu(tView, index, tIcu) {\n  const tNode = tView.data[index];\n  ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty('tView'), true, \"We expect to get 'null'|'TIcuContainer'\");\n  if (tNode === null) {\n    tView.data[index] = tIcu;\n  } else {\n    ngDevMode && assertTNodeType(tNode, 32 /* TNodeType.Icu */);\n    tNode.value = tIcu;\n  }\n}\n/**\n * Set `TNode.insertBeforeIndex` taking the `Array` into account.\n *\n * See `TNode.insertBeforeIndex`\n */\nfunction setTNodeInsertBeforeIndex(tNode, index) {\n  ngDevMode && assertTNode(tNode);\n  let insertBeforeIndex = tNode.insertBeforeIndex;\n  if (insertBeforeIndex === null) {\n    setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);\n    insertBeforeIndex = tNode.insertBeforeIndex = [null /* may be updated to number later */, index];\n  } else {\n    assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');\n    insertBeforeIndex.push(index);\n  }\n}\n/**\n * Create `TNode.type=TNodeType.Placeholder` node.\n *\n * See `TNodeType.Placeholder` for more information.\n */\nfunction createTNodePlaceholder(tView, previousTNodes, index) {\n  const tNode = createTNodeAtIndex(tView, index, 64 /* TNodeType.Placeholder */, null, null);\n  addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);\n  return tNode;\n}\n/**\n * Returns current ICU case.\n *\n * ICU cases are stored as index into the `TIcu.cases`.\n * At times it is necessary to communicate that the ICU case just switched and that next ICU update\n * should update all bindings regardless of the mask. In such a case the we store negative numbers\n * for cases which have just been switched. This function removes the negative flag.\n */\nfunction getCurrentICUCaseIndex(tIcu, lView) {\n  const currentCase = lView[tIcu.currentCaseLViewIndex];\n  return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;\n}\nfunction getParentFromIcuCreateOpCode(mergedCode) {\n  return mergedCode >>> 17 /* IcuCreateOpCode.SHIFT_PARENT */;\n}\nfunction getRefFromIcuCreateOpCode(mergedCode) {\n  return (mergedCode & 131070 /* IcuCreateOpCode.MASK_REF */) >>> 1 /* IcuCreateOpCode.SHIFT_REF */;\n}\nfunction getInstructionFromIcuCreateOpCode(mergedCode) {\n  return mergedCode & 1 /* IcuCreateOpCode.MASK_INSTRUCTION */;\n}\nfunction icuCreateOpCode(opCode, parentIdx, refIdx) {\n  ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');\n  ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');\n  return opCode | parentIdx << 17 /* IcuCreateOpCode.SHIFT_PARENT */ | refIdx << 1 /* IcuCreateOpCode.SHIFT_REF */;\n}\n// Returns whether the given value corresponds to a root template message,\n// or a sub-template.\nfunction isRootTemplateMessage(subTemplateIndex) {\n  return subTemplateIndex === -1;\n}\nfunction enterIcu(state, tIcu, lView) {\n  state.index = 0;\n  const currentCase = getCurrentICUCaseIndex(tIcu, lView);\n  if (currentCase !== null) {\n    ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);\n    state.removes = tIcu.remove[currentCase];\n  } else {\n    state.removes = EMPTY_ARRAY;\n  }\n}\nfunction icuContainerIteratorNext(state) {\n  if (state.index < state.removes.length) {\n    const removeOpCode = state.removes[state.index++];\n    ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');\n    if (removeOpCode > 0) {\n      const rNode = state.lView[removeOpCode];\n      ngDevMode && assertDomNode(rNode);\n      return rNode;\n    } else {\n      state.stack.push(state.index, state.removes);\n      // ICUs are represented by negative indices\n      const tIcuIndex = ~removeOpCode;\n      const tIcu = state.lView[TVIEW].data[tIcuIndex];\n      ngDevMode && assertTIcu(tIcu);\n      enterIcu(state, tIcu, state.lView);\n      return icuContainerIteratorNext(state);\n    }\n  } else {\n    if (state.stack.length === 0) {\n      return null;\n    } else {\n      state.removes = state.stack.pop();\n      state.index = state.stack.pop();\n      return icuContainerIteratorNext(state);\n    }\n  }\n}\nfunction loadIcuContainerVisitor() {\n  const _state = {\n    stack: [],\n    index: -1\n  };\n  /**\n   * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`\n   * to determine which root belong to the ICU.\n   *\n   * Example of usage.\n   * ```\n   * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);\n   * let rNode: RNode|null;\n   * while(rNode = nextRNode()) {\n   *   console.log(rNode);\n   * }\n   * ```\n   *\n   * @param tIcuContainerNode Current `TIcuContainerNode`\n   * @param lView `LView` where the `RNode`s should be looked up.\n   */\n  function icuContainerIteratorStart(tIcuContainerNode, lView) {\n    _state.lView = lView;\n    while (_state.stack.length) _state.stack.pop();\n    ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);\n    enterIcu(_state, tIcuContainerNode.value, lView);\n    return icuContainerIteratorNext.bind(null, _state);\n  }\n  return icuContainerIteratorStart;\n}\nfunction createIcuIterator(tIcu, lView) {\n  const state = {\n    stack: [],\n    index: -1,\n    lView\n  };\n  ngDevMode && assertTIcu(tIcu);\n  enterIcu(state, tIcu, lView);\n  return icuContainerIteratorNext.bind(null, state);\n}\n\n/**\n * Regexp that extracts a reference node information from the compressed node location.\n * The reference node is represented as either:\n *  - a number which points to an LView slot\n *  - the `b` char which indicates that the lookup should start from the `document.body`\n *  - the `h` char to start lookup from the component host node (`lView[HOST]`)\n */\nconst REF_EXTRACTOR_REGEXP = new RegExp(`^(\\\\d+)*(${REFERENCE_NODE_BODY}|${REFERENCE_NODE_HOST})*(.*)`);\n/**\n * Helper function that takes a reference node location and a set of navigation steps\n * (from the reference node) to a target node and outputs a string that represents\n * a location.\n *\n * For example, given: referenceNode = 'b' (body) and path = ['firstChild', 'firstChild',\n * 'nextSibling'], the function returns: `bf2n`.\n */\nfunction compressNodeLocation(referenceNode, path) {\n  const result = [referenceNode];\n  for (const segment of path) {\n    const lastIdx = result.length - 1;\n    if (lastIdx > 0 && result[lastIdx - 1] === segment) {\n      // An empty string in a count slot represents 1 occurrence of an instruction.\n      const value = result[lastIdx] || 1;\n      result[lastIdx] = value + 1;\n    } else {\n      // Adding a new segment to the path.\n      // Using an empty string in a counter field to avoid encoding `1`s\n      // into the path, since they are implicit (e.g. `f1n1` vs `fn`), so\n      // it's enough to have a single char in this case.\n      result.push(segment, '');\n    }\n  }\n  return result.join('');\n}\n/**\n * Helper function that reverts the `compressNodeLocation` and transforms a given\n * string into an array where at 0th position there is a reference node info and\n * after that it contains information (in pairs) about a navigation step and the\n * number of repetitions.\n *\n * For example, the path like 'bf2n' will be transformed to:\n * ['b', 'firstChild', 2, 'nextSibling', 1].\n *\n * This information is later consumed by the code that navigates the DOM to find\n * a given node by its location.\n */\nfunction decompressNodeLocation(path) {\n  const matches = path.match(REF_EXTRACTOR_REGEXP);\n  const [_, refNodeId, refNodeName, rest] = matches;\n  // If a reference node is represented by an index, transform it to a number.\n  const ref = refNodeId ? parseInt(refNodeId, 10) : refNodeName;\n  const steps = [];\n  // Match all segments in a path.\n  for (const [_, step, count] of rest.matchAll(/(f|n)(\\d*)/g)) {\n    const repeat = parseInt(count, 10) || 1;\n    steps.push(step, repeat);\n  }\n  return [ref, ...steps];\n}\n\n/** Whether current TNode is a first node in an <ng-container>. */\nfunction isFirstElementInNgContainer(tNode) {\n  return !tNode.prev && tNode.parent?.type === 8 /* TNodeType.ElementContainer */;\n}\n/** Returns an instruction index (subtracting HEADER_OFFSET). */\nfunction getNoOffsetIndex(tNode) {\n  return tNode.index - HEADER_OFFSET;\n}\n/**\n * Check whether a given node exists, but is disconnected from the DOM.\n */\nfunction isDisconnectedNode(tNode, lView) {\n  return !(tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) && !!lView[tNode.index] && isDisconnectedRNode(unwrapRNode(lView[tNode.index]));\n}\n/**\n * Check whether the given node exists, but is disconnected from the DOM.\n *\n * Note: we leverage the fact that we have this information available in the DOM emulation\n * layer (in Domino) for now. Longer-term solution should not rely on the DOM emulation and\n * only use internal data structures and state to compute this information.\n */\nfunction isDisconnectedRNode(rNode) {\n  return !!rNode && !rNode.isConnected;\n}\n/**\n * Locate a node in an i18n tree that corresponds to a given instruction index.\n *\n * @param hydrationInfo The hydration annotation data\n * @param noOffsetIndex the instruction index\n * @returns an RNode that corresponds to the instruction index\n */\nfunction locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex) {\n  const i18nNodes = hydrationInfo.i18nNodes;\n  if (i18nNodes) {\n    return i18nNodes.get(noOffsetIndex);\n  }\n  return undefined;\n}\n/**\n * Attempt to locate an RNode by a path, if it exists.\n *\n * @param hydrationInfo The hydration annotation data\n * @param lView the current lView\n * @param noOffsetIndex the instruction index\n * @returns an RNode that corresponds to the instruction index or null if no path exists\n */\nfunction tryLocateRNodeByPath(hydrationInfo, lView, noOffsetIndex) {\n  const nodes = hydrationInfo.data[NODES];\n  const path = nodes?.[noOffsetIndex];\n  return path ? locateRNodeByPath(path, lView) : null;\n}\n/**\n * Locate a node in DOM tree that corresponds to a given TNode.\n *\n * @param hydrationInfo The hydration annotation data\n * @param tView the current tView\n * @param lView the current lView\n * @param tNode the current tNode\n * @returns an RNode that represents a given tNode\n */\nfunction locateNextRNode(hydrationInfo, tView, lView, tNode) {\n  const noOffsetIndex = getNoOffsetIndex(tNode);\n  let native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n  if (native === undefined) {\n    const nodes = hydrationInfo.data[NODES];\n    if (nodes?.[noOffsetIndex]) {\n      // We know the exact location of the node.\n      native = locateRNodeByPath(nodes[noOffsetIndex], lView);\n    } else if (tView.firstChild === tNode) {\n      // We create a first node in this view, so we use a reference\n      // to the first child in this DOM segment.\n      native = hydrationInfo.firstChild;\n    } else {\n      // Locate a node based on a previous sibling or a parent node.\n      const previousTNodeParent = tNode.prev === null;\n      const previousTNode = tNode.prev ?? tNode.parent;\n      ngDevMode && assertDefined(previousTNode, 'Unexpected state: current TNode does not have a connection ' + 'to the previous node or a parent node.');\n      if (isFirstElementInNgContainer(tNode)) {\n        const noOffsetParentIndex = getNoOffsetIndex(tNode.parent);\n        native = getSegmentHead(hydrationInfo, noOffsetParentIndex);\n      } else {\n        let previousRElement = getNativeByTNode(previousTNode, lView);\n        if (previousTNodeParent) {\n          native = previousRElement.firstChild;\n        } else {\n          // If the previous node is an element, but it also has container info,\n          // this means that we are processing a node like `<div #vcrTarget>`, which is\n          // represented in the DOM as `<div></div>...<!--container-->`.\n          // In this case, there are nodes *after* this element and we need to skip\n          // all of them to reach an element that we are looking for.\n          const noOffsetPrevSiblingIndex = getNoOffsetIndex(previousTNode);\n          const segmentHead = getSegmentHead(hydrationInfo, noOffsetPrevSiblingIndex);\n          if (previousTNode.type === 2 /* TNodeType.Element */ && segmentHead) {\n            const numRootNodesToSkip = calcSerializedContainerSize(hydrationInfo, noOffsetPrevSiblingIndex);\n            // `+1` stands for an anchor comment node after all the views in this container.\n            const nodesToSkip = numRootNodesToSkip + 1;\n            // First node after this segment.\n            native = siblingAfter(nodesToSkip, segmentHead);\n          } else {\n            native = previousRElement.nextSibling;\n          }\n        }\n      }\n    }\n  }\n  return native;\n}\n/**\n * Skips over a specified number of nodes and returns the next sibling node after that.\n */\nfunction siblingAfter(skip, from) {\n  let currentNode = from;\n  for (let i = 0; i < skip; i++) {\n    ngDevMode && validateSiblingNodeExists(currentNode);\n    currentNode = currentNode.nextSibling;\n  }\n  return currentNode;\n}\n/**\n * Helper function to produce a string representation of the navigation steps\n * (in terms of `nextSibling` and `firstChild` navigations). Used in error\n * messages in dev mode.\n */\nfunction stringifyNavigationInstructions(instructions) {\n  const container = [];\n  for (let i = 0; i < instructions.length; i += 2) {\n    const step = instructions[i];\n    const repeat = instructions[i + 1];\n    for (let r = 0; r < repeat; r++) {\n      container.push(step === NodeNavigationStep.FirstChild ? 'firstChild' : 'nextSibling');\n    }\n  }\n  return container.join('.');\n}\n/**\n * Helper function that navigates from a starting point node (the `from` node)\n * using provided set of navigation instructions (within `path` argument).\n */\nfunction navigateToNode(from, instructions) {\n  let node = from;\n  for (let i = 0; i < instructions.length; i += 2) {\n    const step = instructions[i];\n    const repeat = instructions[i + 1];\n    for (let r = 0; r < repeat; r++) {\n      if (ngDevMode && !node) {\n        throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n      }\n      switch (step) {\n        case NodeNavigationStep.FirstChild:\n          node = node.firstChild;\n          break;\n        case NodeNavigationStep.NextSibling:\n          node = node.nextSibling;\n          break;\n      }\n    }\n  }\n  if (ngDevMode && !node) {\n    throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));\n  }\n  return node;\n}\n/**\n * Locates an RNode given a set of navigation instructions (which also contains\n * a starting point node info).\n */\nfunction locateRNodeByPath(path, lView) {\n  const [referenceNode, ...navigationInstructions] = decompressNodeLocation(path);\n  let ref;\n  if (referenceNode === REFERENCE_NODE_HOST) {\n    ref = lView[DECLARATION_COMPONENT_VIEW][HOST];\n  } else if (referenceNode === REFERENCE_NODE_BODY) {\n    ref = ɵɵresolveBody(lView[DECLARATION_COMPONENT_VIEW][HOST]);\n  } else {\n    const parentElementId = Number(referenceNode);\n    ref = unwrapRNode(lView[parentElementId + HEADER_OFFSET]);\n  }\n  return navigateToNode(ref, navigationInstructions);\n}\n/**\n * Generate a list of DOM navigation operations to get from node `start` to node `finish`.\n *\n * Note: assumes that node `start` occurs before node `finish` in an in-order traversal of the DOM\n * tree. That is, we should be able to get from `start` to `finish` purely by using `.firstChild`\n * and `.nextSibling` operations.\n */\nfunction navigateBetween(start, finish) {\n  if (start === finish) {\n    return [];\n  } else if (start.parentElement == null || finish.parentElement == null) {\n    return null;\n  } else if (start.parentElement === finish.parentElement) {\n    return navigateBetweenSiblings(start, finish);\n  } else {\n    // `finish` is a child of its parent, so the parent will always have a child.\n    const parent = finish.parentElement;\n    const parentPath = navigateBetween(start, parent);\n    const childPath = navigateBetween(parent.firstChild, finish);\n    if (!parentPath || !childPath) return null;\n    return [\n    // First navigate to `finish`'s parent\n    ...parentPath,\n    // Then to its first child.\n    NodeNavigationStep.FirstChild,\n    // And finally from that node to `finish` (maybe a no-op if we're already there).\n    ...childPath];\n  }\n}\n/**\n * Calculates a path between 2 sibling nodes (generates a number of `NextSibling` navigations).\n * Returns `null` if no such path exists between the given nodes.\n */\nfunction navigateBetweenSiblings(start, finish) {\n  const nav = [];\n  let node = null;\n  for (node = start; node != null && node !== finish; node = node.nextSibling) {\n    nav.push(NodeNavigationStep.NextSibling);\n  }\n  // If the `node` becomes `null` or `undefined` at the end, that means that we\n  // didn't find the `end` node, thus return `null` (which would trigger serialization\n  // error to be produced).\n  return node == null ? null : nav;\n}\n/**\n * Calculates a path between 2 nodes in terms of `nextSibling` and `firstChild`\n * navigations:\n * - the `from` node is a known node, used as an starting point for the lookup\n *   (the `fromNodeName` argument is a string representation of the node).\n * - the `to` node is a node that the runtime logic would be looking up,\n *   using the path generated by this function.\n */\nfunction calcPathBetween(from, to, fromNodeName) {\n  const path = navigateBetween(from, to);\n  return path === null ? null : compressNodeLocation(fromNodeName, path);\n}\n/**\n * Invoked at serialization time (on the server) when a set of navigation\n * instructions needs to be generated for a TNode.\n */\nfunction calcPathForNode(tNode, lView, excludedParentNodes) {\n  let parentTNode = tNode.parent;\n  let parentIndex;\n  let parentRNode;\n  let referenceNodeName;\n  // Skip over all parent nodes that are disconnected from the DOM, such nodes\n  // can not be used as anchors.\n  //\n  // This might happen in certain content projection-based use-cases, where\n  // a content of an element is projected and used, when a parent element\n  // itself remains detached from DOM. In this scenario we try to find a parent\n  // element that is attached to DOM and can act as an anchor instead.\n  //\n  // It can also happen that the parent node should be excluded, for example,\n  // because it belongs to an i18n block, which requires paths which aren't\n  // relative to other views in an i18n block.\n  while (parentTNode !== null && (isDisconnectedNode(parentTNode, lView) || excludedParentNodes?.has(parentTNode.index))) {\n    parentTNode = parentTNode.parent;\n  }\n  if (parentTNode === null || !(parentTNode.type & 3 /* TNodeType.AnyRNode */)) {\n    // If there is no parent TNode or a parent TNode does not represent an RNode\n    // (i.e. not a DOM node), use component host element as a reference node.\n    parentIndex = referenceNodeName = REFERENCE_NODE_HOST;\n    parentRNode = lView[DECLARATION_COMPONENT_VIEW][HOST];\n  } else {\n    // Use parent TNode as a reference node.\n    parentIndex = parentTNode.index;\n    parentRNode = unwrapRNode(lView[parentIndex]);\n    referenceNodeName = renderStringify(parentIndex - HEADER_OFFSET);\n  }\n  let rNode = unwrapRNode(lView[tNode.index]);\n  if (tNode.type & (12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */)) {\n    // For <ng-container> nodes, instead of serializing a reference\n    // to the anchor comment node, serialize a location of the first\n    // DOM element. Paired with the container size (serialized as a part\n    // of `ngh.containers`), it should give enough information for runtime\n    // to hydrate nodes in this container.\n    const firstRNode = getFirstNativeNode(lView, tNode);\n    // If container is not empty, use a reference to the first element,\n    // otherwise, rNode would point to an anchor comment node.\n    if (firstRNode) {\n      rNode = firstRNode;\n    }\n  }\n  let path = calcPathBetween(parentRNode, rNode, referenceNodeName);\n  if (path === null && parentRNode !== rNode) {\n    // Searching for a path between elements within a host node failed.\n    // Trying to find a path to an element starting from the `document.body` instead.\n    //\n    // Important note: this type of reference is relatively unstable, since Angular\n    // may not be able to control parts of the page that the runtime logic navigates\n    // through. This is mostly needed to cover \"portals\" use-case (like menus, dialog boxes,\n    // etc), where nodes are content-projected (including direct DOM manipulations) outside\n    // of the host node. The better solution is to provide APIs to work with \"portals\",\n    // at which point this code path would not be needed.\n    const body = parentRNode.ownerDocument.body;\n    path = calcPathBetween(body, rNode, REFERENCE_NODE_BODY);\n    if (path === null) {\n      // If the path is still empty, it's likely that this node is detached and\n      // won't be found during hydration.\n      throw nodeNotFoundError(lView, tNode);\n    }\n  }\n  return path;\n}\n/**\n * Retrieves all comments nodes that contain ngh comments referring to a defer block\n */\nfunction gatherDeferBlocksCommentNodes(doc, node) {\n  const commentNodesIterator = doc.createNodeIterator(node, NodeFilter.SHOW_COMMENT, {\n    acceptNode\n  });\n  let currentNode;\n  const nodesByBlockId = new Map();\n  while (currentNode = commentNodesIterator.nextNode()) {\n    const nghPattern = 'ngh=';\n    const content = currentNode?.textContent;\n    const nghIdx = content?.indexOf(nghPattern) ?? -1;\n    if (nghIdx > -1) {\n      const nghValue = content.substring(nghIdx + nghPattern.length).trim();\n      // Make sure the value has an expected format.\n      ngDevMode && assertEqual(nghValue.startsWith('d'), true, 'Invalid defer block id found in a comment node.');\n      nodesByBlockId.set(nghValue, currentNode);\n    }\n  }\n  return nodesByBlockId;\n}\nfunction acceptNode(node) {\n  return node.textContent?.trimStart().startsWith('ngh=') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n}\nlet _isI18nHydrationSupportEnabled = false;\nlet _prepareI18nBlockForHydrationImpl = () => {\n  // noop unless `enablePrepareI18nBlockForHydrationImpl` is invoked.\n};\nfunction setIsI18nHydrationSupportEnabled(enabled) {\n  _isI18nHydrationSupportEnabled = enabled;\n}\nfunction isI18nHydrationSupportEnabled() {\n  return _isI18nHydrationSupportEnabled;\n}\n/**\n * Prepares an i18n block and its children, located at the given\n * view and instruction index, for hydration.\n *\n * @param lView lView with the i18n block\n * @param index index of the i18n block in the lView\n * @param parentTNode TNode of the parent of the i18n block\n * @param subTemplateIndex sub-template index, or -1 for the main template\n */\nfunction prepareI18nBlockForHydration(lView, index, parentTNode, subTemplateIndex) {\n  _prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex);\n}\nfunction enablePrepareI18nBlockForHydrationImpl() {\n  _prepareI18nBlockForHydrationImpl = prepareI18nBlockForHydrationImpl;\n}\nfunction isI18nHydrationEnabled(injector) {\n  injector = injector ?? inject(Injector);\n  return injector.get(IS_I18N_HYDRATION_ENABLED, false);\n}\n/**\n * Collects, if not already cached, all of the indices in the\n * given TView which are children of an i18n block.\n *\n * Since i18n blocks don't introduce a parent TNode, this is necessary\n * in order to determine which indices in a LView are translated.\n */\nfunction getOrComputeI18nChildren(tView, context) {\n  let i18nChildren = context.i18nChildren.get(tView);\n  if (i18nChildren === undefined) {\n    i18nChildren = collectI18nChildren(tView);\n    context.i18nChildren.set(tView, i18nChildren);\n  }\n  return i18nChildren;\n}\nfunction collectI18nChildren(tView) {\n  const children = new Set();\n  function collectI18nViews(node) {\n    children.add(node.index);\n    switch (node.kind) {\n      case 1 /* I18nNodeKind.ELEMENT */:\n      case 2 /* I18nNodeKind.PLACEHOLDER */:\n        {\n          for (const childNode of node.children) {\n            collectI18nViews(childNode);\n          }\n          break;\n        }\n      case 3 /* I18nNodeKind.ICU */:\n        {\n          for (const caseNodes of node.cases) {\n            for (const caseNode of caseNodes) {\n              collectI18nViews(caseNode);\n            }\n          }\n          break;\n        }\n    }\n  }\n  // Traverse through the AST of each i18n block in the LView,\n  // and collect every instruction index.\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const tI18n = tView.data[i];\n    if (!tI18n || !tI18n.ast) {\n      continue;\n    }\n    for (const node of tI18n.ast) {\n      collectI18nViews(node);\n    }\n  }\n  return children.size === 0 ? null : children;\n}\n/**\n * Attempts to serialize i18n data for an i18n block, located at\n * the given view and instruction index.\n *\n * @param lView lView with the i18n block\n * @param index index of the i18n block in the lView\n * @param context the hydration context\n * @returns the i18n data, or null if there is no relevant data\n */\nfunction trySerializeI18nBlock(lView, index, context) {\n  if (!context.isI18nHydrationEnabled) {\n    return null;\n  }\n  const tView = lView[TVIEW];\n  const tI18n = tView.data[index];\n  if (!tI18n || !tI18n.ast) {\n    return null;\n  }\n  const parentTNode = tView.data[tI18n.parentTNodeIndex];\n  if (parentTNode && isI18nInSkipHydrationBlock(parentTNode)) {\n    return null;\n  }\n  const serializedI18nBlock = {\n    caseQueue: [],\n    disconnectedNodes: new Set(),\n    disjointNodes: new Set()\n  };\n  serializeI18nBlock(lView, serializedI18nBlock, context, tI18n.ast);\n  return serializedI18nBlock.caseQueue.length === 0 && serializedI18nBlock.disconnectedNodes.size === 0 && serializedI18nBlock.disjointNodes.size === 0 ? null : serializedI18nBlock;\n}\nfunction serializeI18nBlock(lView, serializedI18nBlock, context, nodes) {\n  let prevRNode = null;\n  for (const node of nodes) {\n    const nextRNode = serializeI18nNode(lView, serializedI18nBlock, context, node);\n    if (nextRNode) {\n      if (isDisjointNode(prevRNode, nextRNode)) {\n        serializedI18nBlock.disjointNodes.add(node.index - HEADER_OFFSET);\n      }\n      prevRNode = nextRNode;\n    }\n  }\n  return prevRNode;\n}\n/**\n * Helper to determine whether the given nodes are \"disjoint\".\n *\n * The i18n hydration process walks through the DOM and i18n nodes\n * at the same time. It expects the sibling DOM node of the previous\n * i18n node to be the first node of the next i18n node.\n *\n * In cases of content projection, this won't always be the case. So\n * when we detect that, we mark the node as \"disjoint\", ensuring that\n * we will serialize the path to the node. This way, when we hydrate the\n * i18n node, we will be able to find the correct place to start.\n */\nfunction isDisjointNode(prevNode, nextNode) {\n  return prevNode && prevNode.nextSibling !== nextNode;\n}\n/**\n * Process the given i18n node for serialization.\n * Returns the first RNode for the i18n node to begin hydration.\n */\nfunction serializeI18nNode(lView, serializedI18nBlock, context, node) {\n  const maybeRNode = unwrapRNode(lView[node.index]);\n  if (!maybeRNode || isDisconnectedRNode(maybeRNode)) {\n    serializedI18nBlock.disconnectedNodes.add(node.index - HEADER_OFFSET);\n    return null;\n  }\n  const rNode = maybeRNode;\n  switch (node.kind) {\n    case 0 /* I18nNodeKind.TEXT */:\n      {\n        processTextNodeBeforeSerialization(context, rNode);\n        break;\n      }\n    case 1 /* I18nNodeKind.ELEMENT */:\n    case 2 /* I18nNodeKind.PLACEHOLDER */:\n      {\n        serializeI18nBlock(lView, serializedI18nBlock, context, node.children);\n        break;\n      }\n    case 3 /* I18nNodeKind.ICU */:\n      {\n        const currentCase = lView[node.currentCaseLViewIndex];\n        if (currentCase != null) {\n          // i18n uses a negative value to signal a change to a new case, so we\n          // need to invert it to get the proper value.\n          const caseIdx = currentCase < 0 ? ~currentCase : currentCase;\n          serializedI18nBlock.caseQueue.push(caseIdx);\n          serializeI18nBlock(lView, serializedI18nBlock, context, node.cases[caseIdx]);\n        }\n        break;\n      }\n  }\n  return getFirstNativeNodeForI18nNode(lView, node);\n}\n/**\n * Helper function to get the first native node to begin hydrating\n * the given i18n node.\n */\nfunction getFirstNativeNodeForI18nNode(lView, node) {\n  const tView = lView[TVIEW];\n  const maybeTNode = tView.data[node.index];\n  if (isTNodeShape(maybeTNode)) {\n    // If the node is backed by an actual TNode, we can simply delegate.\n    return getFirstNativeNode(lView, maybeTNode);\n  } else if (node.kind === 3 /* I18nNodeKind.ICU */) {\n    // A nested ICU container won't have an actual TNode. In that case, we can use\n    // an iterator to find the first child.\n    const icuIterator = createIcuIterator(maybeTNode, lView);\n    let rNode = icuIterator();\n    // If the ICU container has no nodes, then we use the ICU anchor as the node.\n    return rNode ?? unwrapRNode(lView[node.index]);\n  } else {\n    // Otherwise, the node is a text or trivial element in an ICU container,\n    // and we can just use the RNode directly.\n    return unwrapRNode(lView[node.index]) ?? null;\n  }\n}\nfunction setCurrentNode(state, node) {\n  state.currentNode = node;\n}\n/**\n * Marks the current RNode as the hydration root for the given\n * AST node.\n */\nfunction appendI18nNodeToCollection(context, state, astNode) {\n  const noOffsetIndex = astNode.index - HEADER_OFFSET;\n  const {\n    disconnectedNodes\n  } = context;\n  const currentNode = state.currentNode;\n  if (state.isConnected) {\n    context.i18nNodes.set(noOffsetIndex, currentNode);\n    // We expect the node to be connected, so ensure that it\n    // is not in the set, regardless of whether we found it,\n    // so that the downstream error handling can provide the\n    // proper context.\n    disconnectedNodes.delete(noOffsetIndex);\n  } else {\n    disconnectedNodes.add(noOffsetIndex);\n  }\n  return currentNode;\n}\n/**\n * Skip over some sibling nodes during hydration.\n *\n * Note: we use this instead of `siblingAfter` as it's expected that\n * sometimes we might encounter null nodes. In those cases, we want to\n * defer to downstream error handling to provide proper context.\n */\nfunction skipSiblingNodes(state, skip) {\n  let currentNode = state.currentNode;\n  for (let i = 0; i < skip; i++) {\n    if (!currentNode) {\n      break;\n    }\n    currentNode = currentNode?.nextSibling ?? null;\n  }\n  return currentNode;\n}\n/**\n * Fork the given state into a new state for hydrating children.\n */\nfunction forkHydrationState(state, nextNode) {\n  return {\n    currentNode: nextNode,\n    isConnected: state.isConnected\n  };\n}\nfunction prepareI18nBlockForHydrationImpl(lView, index, parentTNode, subTemplateIndex) {\n  const hydrationInfo = lView[HYDRATION];\n  if (!hydrationInfo) {\n    return;\n  }\n  if (!isI18nHydrationSupportEnabled() || parentTNode && (isI18nInSkipHydrationBlock(parentTNode) || isDisconnectedNode$1(hydrationInfo, parentTNode.index - HEADER_OFFSET))) {\n    return;\n  }\n  const tView = lView[TVIEW];\n  const tI18n = tView.data[index];\n  ngDevMode && assertDefined(tI18n, 'Expected i18n data to be present in a given TView slot during hydration');\n  function findHydrationRoot() {\n    if (isRootTemplateMessage(subTemplateIndex)) {\n      // This is the root of an i18n block. In this case, our hydration root will\n      // depend on where our parent TNode (i.e. the block with i18n applied) is\n      // in the DOM.\n      ngDevMode && assertDefined(parentTNode, 'Expected parent TNode while hydrating i18n root');\n      const rootNode = locateNextRNode(hydrationInfo, tView, lView, parentTNode);\n      // If this i18n block is attached to an <ng-container>, then we want to begin\n      // hydrating directly with the RNode. Otherwise, for a TNode with a physical DOM\n      // element, we want to recurse into the first child and begin there.\n      return parentTNode.type & 8 /* TNodeType.ElementContainer */ ? rootNode : rootNode.firstChild;\n    }\n    // This is a nested template in an i18n block. In this case, the entire view\n    // is translated, and part of a dehydrated view in a container. This means that\n    // we can simply begin hydration with the first dehydrated child.\n    return hydrationInfo?.firstChild;\n  }\n  const currentNode = findHydrationRoot();\n  ngDevMode && assertDefined(currentNode, 'Expected root i18n node during hydration');\n  const disconnectedNodes = initDisconnectedNodes(hydrationInfo) ?? new Set();\n  const i18nNodes = hydrationInfo.i18nNodes ??= new Map();\n  const caseQueue = hydrationInfo.data[I18N_DATA]?.[index - HEADER_OFFSET] ?? [];\n  const dehydratedIcuData = hydrationInfo.dehydratedIcuData ??= new Map();\n  collectI18nNodesFromDom({\n    hydrationInfo,\n    lView,\n    i18nNodes,\n    disconnectedNodes,\n    caseQueue,\n    dehydratedIcuData\n  }, {\n    currentNode,\n    isConnected: true\n  }, tI18n.ast);\n  // Nodes from inactive ICU cases should be considered disconnected. We track them above\n  // because they aren't (and shouldn't be) serialized. Since we may mutate or create a\n  // new set, we need to be sure to write the expected value back to the DehydratedView.\n  hydrationInfo.disconnectedNodes = disconnectedNodes.size === 0 ? null : disconnectedNodes;\n}\nfunction collectI18nNodesFromDom(context, state, nodeOrNodes) {\n  if (Array.isArray(nodeOrNodes)) {\n    let nextState = state;\n    for (const node of nodeOrNodes) {\n      // Whenever a node doesn't directly follow the previous RNode, it\n      // is given a path. We need to resume collecting nodes from that location\n      // until and unless we find another disjoint node.\n      const targetNode = tryLocateRNodeByPath(context.hydrationInfo, context.lView, node.index - HEADER_OFFSET);\n      if (targetNode) {\n        nextState = forkHydrationState(state, targetNode);\n      }\n      collectI18nNodesFromDom(context, nextState, node);\n    }\n  } else {\n    if (context.disconnectedNodes.has(nodeOrNodes.index - HEADER_OFFSET)) {\n      // i18n nodes can be considered disconnected if e.g. they were projected.\n      // In that case, we have to make sure to skip over them.\n      return;\n    }\n    switch (nodeOrNodes.kind) {\n      case 0 /* I18nNodeKind.TEXT */:\n        {\n          // Claim a text node for hydration\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n      case 1 /* I18nNodeKind.ELEMENT */:\n        {\n          // Recurse into the current element's children...\n          collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n          // And claim the parent element itself.\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n      case 2 /* I18nNodeKind.PLACEHOLDER */:\n        {\n          const noOffsetIndex = nodeOrNodes.index - HEADER_OFFSET;\n          const {\n            hydrationInfo\n          } = context;\n          const containerSize = getNgContainerSize(hydrationInfo, noOffsetIndex);\n          switch (nodeOrNodes.type) {\n            case 0 /* I18nPlaceholderType.ELEMENT */:\n              {\n                // Hydration expects to find the head of the element.\n                const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n                // A TNode for the node may not yet if we're hydrating during the first pass,\n                // so use the serialized data to determine if this is an <ng-container>.\n                if (isSerializedElementContainer(hydrationInfo, noOffsetIndex)) {\n                  // An <ng-container> doesn't have a physical DOM node, so we need to\n                  // continue hydrating from siblings.\n                  collectI18nNodesFromDom(context, state, nodeOrNodes.children);\n                  // Skip over the anchor element. It will be claimed by the\n                  // downstream container hydration.\n                  const nextNode = skipSiblingNodes(state, 1);\n                  setCurrentNode(state, nextNode);\n                } else {\n                  // Non-container elements represent an actual node in the DOM, so we\n                  // need to continue hydration with the children, and claim the node.\n                  collectI18nNodesFromDom(context, forkHydrationState(state, state.currentNode?.firstChild ?? null), nodeOrNodes.children);\n                  setCurrentNode(state, currentNode?.nextSibling ?? null);\n                  // Elements can also be the anchor of a view container, so there may\n                  // be elements after this node that we need to skip.\n                  if (containerSize !== null) {\n                    // `+1` stands for an anchor node after all of the views in the container.\n                    const nextNode = skipSiblingNodes(state, containerSize + 1);\n                    setCurrentNode(state, nextNode);\n                  }\n                }\n                break;\n              }\n            case 1 /* I18nPlaceholderType.SUBTEMPLATE */:\n              {\n                ngDevMode && assertNotEqual(containerSize, null, 'Expected a container size while hydrating i18n subtemplate');\n                // Hydration expects to find the head of the template.\n                appendI18nNodeToCollection(context, state, nodeOrNodes);\n                // Skip over all of the template children, as well as the anchor\n                // node, since the template itself will handle them instead.\n                const nextNode = skipSiblingNodes(state, containerSize + 1);\n                setCurrentNode(state, nextNode);\n                break;\n              }\n          }\n          break;\n        }\n      case 3 /* I18nNodeKind.ICU */:\n        {\n          // If the current node is connected, we need to pop the next case from the\n          // queue, so that the active case is also considered connected.\n          const selectedCase = state.isConnected ? context.caseQueue.shift() : null;\n          const childState = {\n            currentNode: null,\n            isConnected: false\n          };\n          // We traverse through each case, even if it's not active,\n          // so that we correctly populate disconnected nodes.\n          for (let i = 0; i < nodeOrNodes.cases.length; i++) {\n            collectI18nNodesFromDom(context, i === selectedCase ? state : childState, nodeOrNodes.cases[i]);\n          }\n          if (selectedCase !== null) {\n            // ICUs represent a branching state, and the selected case could be different\n            // than what it was on the server. In that case, we need to be able to clean\n            // up the nodes from the original case. To do that, we store the selected case.\n            context.dehydratedIcuData.set(nodeOrNodes.index, {\n              case: selectedCase,\n              node: nodeOrNodes\n            });\n          }\n          // Hydration expects to find the ICU anchor element.\n          const currentNode = appendI18nNodeToCollection(context, state, nodeOrNodes);\n          setCurrentNode(state, currentNode?.nextSibling ?? null);\n          break;\n        }\n    }\n  }\n}\nlet _claimDehydratedIcuCaseImpl = () => {\n  // noop unless `enableClaimDehydratedIcuCaseImpl` is invoked\n};\n/**\n * Mark the case for the ICU node at the given index in the view as claimed,\n * allowing its nodes to be hydrated and not cleaned up.\n */\nfunction claimDehydratedIcuCase(lView, icuIndex, caseIndex) {\n  _claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex);\n}\nfunction enableClaimDehydratedIcuCaseImpl() {\n  _claimDehydratedIcuCaseImpl = claimDehydratedIcuCaseImpl;\n}\nfunction claimDehydratedIcuCaseImpl(lView, icuIndex, caseIndex) {\n  const dehydratedIcuDataMap = lView[HYDRATION]?.dehydratedIcuData;\n  if (dehydratedIcuDataMap) {\n    const dehydratedIcuData = dehydratedIcuDataMap.get(icuIndex);\n    if (dehydratedIcuData?.case === caseIndex) {\n      // If the case we're attempting to claim matches the dehydrated one,\n      // we remove it from the map to mark it as \"claimed.\"\n      dehydratedIcuDataMap.delete(icuIndex);\n    }\n  }\n}\n/**\n * Clean up all i18n hydration data associated with the given view.\n */\nfunction cleanupI18nHydrationData(lView) {\n  const hydrationInfo = lView[HYDRATION];\n  if (hydrationInfo) {\n    const {\n      i18nNodes,\n      dehydratedIcuData: dehydratedIcuDataMap\n    } = hydrationInfo;\n    if (i18nNodes && dehydratedIcuDataMap) {\n      const renderer = lView[RENDERER];\n      for (const dehydratedIcuData of dehydratedIcuDataMap.values()) {\n        cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData);\n      }\n    }\n    hydrationInfo.i18nNodes = undefined;\n    hydrationInfo.dehydratedIcuData = undefined;\n  }\n}\nfunction cleanupDehydratedIcuData(renderer, i18nNodes, dehydratedIcuData) {\n  for (const node of dehydratedIcuData.node.cases[dehydratedIcuData.case]) {\n    const rNode = i18nNodes.get(node.index - HEADER_OFFSET);\n    if (rNode) {\n      nativeRemoveNode(renderer, rNode, false);\n    }\n  }\n}\n\n/**\n * Removes all dehydrated views from a given LContainer:\n * both in internal data structure, as well as removing\n * corresponding DOM nodes that belong to that dehydrated view.\n */\nfunction removeDehydratedViews(lContainer) {\n  const views = lContainer[DEHYDRATED_VIEWS] ?? [];\n  const parentLView = lContainer[PARENT];\n  const renderer = parentLView[RENDERER];\n  const retainedViews = [];\n  for (const view of views) {\n    // Do not clean up contents of `@defer` blocks.\n    // The cleanup for this content would happen once a given block\n    // is triggered and hydrated.\n    if (view.data[DEFER_BLOCK_ID] !== undefined) {\n      retainedViews.push(view);\n    } else {\n      removeDehydratedView(view, renderer);\n      ngDevMode && ngDevMode.dehydratedViewsRemoved++;\n    }\n  }\n  // Reset the value to an array to indicate that no\n  // further processing of dehydrated views is needed for\n  // this view container (i.e. do not trigger the lookup process\n  // once again in case a `ViewContainerRef` is created later).\n  lContainer[DEHYDRATED_VIEWS] = retainedViews;\n}\n/**\n * Helper function to remove all nodes from a dehydrated view.\n */\nfunction removeDehydratedView(dehydratedView, renderer) {\n  let nodesRemoved = 0;\n  let currentRNode = dehydratedView.firstChild;\n  if (currentRNode) {\n    const numNodes = dehydratedView.data[NUM_ROOT_NODES];\n    while (nodesRemoved < numNodes) {\n      ngDevMode && validateSiblingNodeExists(currentRNode);\n      const nextSibling = currentRNode.nextSibling;\n      nativeRemoveNode(renderer, currentRNode, false);\n      currentRNode = nextSibling;\n      nodesRemoved++;\n    }\n  }\n}\n/**\n * Walks over all views within this LContainer invokes dehydrated views\n * cleanup function for each one.\n */\nfunction cleanupLContainer(lContainer) {\n  removeDehydratedViews(lContainer);\n  // The host could be an LView if this container is on a component node.\n  // In this case, descend into host LView for further cleanup. See also\n  // LContainer[HOST] docs for additional information.\n  const hostLView = lContainer[HOST];\n  if (isLView(hostLView)) {\n    cleanupLView(hostLView);\n  }\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    cleanupLView(lContainer[i]);\n  }\n}\n/**\n * Walks over `LContainer`s and components registered within\n * this LView and invokes dehydrated views cleanup function for each one.\n */\nfunction cleanupLView(lView) {\n  cleanupI18nHydrationData(lView);\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (isLContainer(lView[i])) {\n      const lContainer = lView[i];\n      cleanupLContainer(lContainer);\n    } else if (isLView(lView[i])) {\n      // This is a component, enter the `cleanupLView` recursively.\n      cleanupLView(lView[i]);\n    }\n  }\n}\n/**\n * Walks over all views registered within the ApplicationRef and removes\n * all dehydrated views from all `LContainer`s along the way.\n */\nfunction cleanupDehydratedViews(appRef) {\n  const viewRefs = appRef._views;\n  for (const viewRef of viewRefs) {\n    const lNode = getLNodeForHydration(viewRef);\n    // An `lView` might be `null` if a `ViewRef` represents\n    // an embedded view (not a component view).\n    if (lNode !== null && lNode[HOST] !== null) {\n      if (isLView(lNode)) {\n        cleanupLView(lNode);\n      } else {\n        // Cleanup in all views within this view container\n        cleanupLContainer(lNode);\n      }\n      ngDevMode && ngDevMode.dehydratedViewsCleanupRuns++;\n    }\n  }\n}\n/**\n * post hydration cleanup handling for defer blocks that were incrementally\n * hydrated. This removes all the jsaction attributes, timers, observers,\n * dehydrated views and containers\n */\nfunction cleanupHydratedDeferBlocks(deferBlock, hydratedBlocks, registry, appRef) {\n  if (deferBlock !== null) {\n    registry.cleanup(hydratedBlocks);\n    cleanupLContainer(deferBlock.lContainer);\n    cleanupDehydratedViews(appRef);\n  }\n}\n\n/**\n * Given a current DOM node and a serialized information about the views\n * in a container, walks over the DOM structure, collecting the list of\n * dehydrated views.\n */\nfunction locateDehydratedViewsInContainer(currentRNode, serializedViews) {\n  const dehydratedViews = [];\n  for (const serializedView of serializedViews) {\n    // Repeats a view multiple times as needed, based on the serialized information\n    // (for example, for *ngFor-produced views).\n    for (let i = 0; i < (serializedView[MULTIPLIER] ?? 1); i++) {\n      const view = {\n        data: serializedView,\n        firstChild: null\n      };\n      if (serializedView[NUM_ROOT_NODES] > 0) {\n        // Keep reference to the first node in this view,\n        // so it can be accessed while invoking template instructions.\n        view.firstChild = currentRNode;\n        // Move over to the next node after this view, which can\n        // either be a first node of the next view or an anchor comment\n        // node after the last view in a container.\n        currentRNode = siblingAfter(serializedView[NUM_ROOT_NODES], currentRNode);\n      }\n      dehydratedViews.push(view);\n    }\n  }\n  return [currentRNode, dehydratedViews];\n}\n/**\n * Reference to a function that searches for a matching dehydrated views\n * stored on a given lContainer.\n * Returns `null` by default, when hydration is not enabled.\n */\nlet _findMatchingDehydratedViewImpl = () => null;\n/**\n * Retrieves the next dehydrated view from the LContainer and verifies that\n * it matches a given template id (from the TView that was used to create this\n * instance of a view). If the id doesn't match, that means that we are in an\n * unexpected state and can not complete the reconciliation process. Thus,\n * all dehydrated views from this LContainer are removed (including corresponding\n * DOM nodes) and the rendering is performed as if there were no dehydrated views\n * in this container.\n */\nfunction findMatchingDehydratedViewImpl(lContainer, template) {\n  const views = lContainer[DEHYDRATED_VIEWS];\n  if (!template || views === null || views.length === 0) {\n    return null;\n  }\n  const view = views[0];\n  // Verify whether the first dehydrated view in the container matches\n  // the template id passed to this function (that originated from a TView\n  // that was used to create an instance of an embedded or component views.\n  if (view.data[TEMPLATE_ID] === template) {\n    // If the template id matches - extract the first view and return it.\n    return views.shift();\n  } else {\n    // Otherwise, we are at the state when reconciliation can not be completed,\n    // thus we remove all dehydrated views within this container (remove them\n    // from internal data structures as well as delete associated elements from\n    // the DOM tree).\n    removeDehydratedViews(lContainer);\n    return null;\n  }\n}\nfunction enableFindMatchingDehydratedViewImpl() {\n  _findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;\n}\nfunction findMatchingDehydratedView(lContainer, template) {\n  return _findMatchingDehydratedViewImpl(lContainer, template);\n}\n\n/**\n * Represents a component created by a `ComponentFactory`.\n * Provides access to the component instance and related objects,\n * and provides the means of destroying the instance.\n *\n * @publicApi\n */\nclass ComponentRef$1 {}\n/**\n * Base class for a factory that can create a component dynamically.\n * Instantiate a factory for a given type of component with `resolveComponentFactory()`.\n * Use the resulting `ComponentFactory.create()` method to create a component of that type.\n *\n * @publicApi\n *\n * @deprecated Angular no longer requires Component factories. Please use other APIs where\n *     Component class can be used directly.\n */\nclass ComponentFactory$1 {}\nclass _NullComponentFactoryResolver {\n  resolveComponentFactory(component) {\n    throw Error(`No component factory found for ${stringify(component)}.`);\n  }\n}\n/**\n * A simple registry that maps `Components` to generated `ComponentFactory` classes\n * that can be used to create instances of components.\n * Use to obtain the factory for a given component type,\n * then use the factory's `create()` method to create a component of that type.\n *\n * Note: since v13, dynamic component creation via\n * [`ViewContainerRef.createComponent`](api/core/ViewContainerRef#createComponent)\n * does **not** require resolving component factory: component class can be used directly.\n *\n * @publicApi\n *\n * @deprecated Angular no longer requires Component factories. Please use other APIs where\n *     Component class can be used directly.\n */\nclass ComponentFactoryResolver$1 {\n  static NULL = new _NullComponentFactoryResolver();\n}\n\n/**\n * Creates and initializes a custom renderer that implements the `Renderer2` base class.\n *\n * @publicApi\n */\nclass RendererFactory2 {}\n/**\n * Extend this base class to implement custom rendering. By default, Angular\n * renders a template into DOM. You can use custom rendering to intercept\n * rendering calls, or to render to something other than DOM.\n *\n * Create your custom renderer using `RendererFactory2`.\n *\n * Use a custom renderer to bypass Angular's templating and\n * make custom UI changes that can't be expressed declaratively.\n * For example if you need to set a property or an attribute whose name is\n * not statically known, use the `setProperty()` or\n * `setAttribute()` method.\n *\n * @publicApi\n */\nclass Renderer2 {\n  /**\n   * If null or undefined, the view engine won't call it.\n   * This is used as a performance optimization for production mode.\n   */\n  destroyNode = null;\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = () => injectRenderer2();\n}\n/** Injects a Renderer2 for the current component. */\nfunction injectRenderer2() {\n  // We need the Renderer to be based on the component that it's being injected into, however since\n  // DI happens before we've entered its view, `getLView` will return the parent view instead.\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  const nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);\n  return (isLView(nodeAtIndex) ? nodeAtIndex : lView)[RENDERER];\n}\n\n/**\n * Sanitizer is used by the views to sanitize potentially dangerous values.\n *\n * @publicApi\n */\nclass Sanitizer {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: Sanitizer,\n    providedIn: 'root',\n    factory: () => null\n  });\n}\nfunction isModuleWithProviders(value) {\n  return value.ngModule !== undefined;\n}\nfunction isNgModule(value) {\n  return !!getNgModuleDef(value);\n}\nfunction isPipe(value) {\n  return !!getPipeDef$1(value);\n}\nfunction isDirective(value) {\n  return !!getDirectiveDef(value);\n}\nfunction isComponent(value) {\n  return !!getComponentDef(value);\n}\nfunction getDependencyTypeForError(type) {\n  if (getComponentDef(type)) return 'component';\n  if (getDirectiveDef(type)) return 'directive';\n  if (getPipeDef$1(type)) return 'pipe';\n  return 'type';\n}\nfunction verifyStandaloneImport(depType, importingType) {\n  if (isForwardRef(depType)) {\n    depType = resolveForwardRef(depType);\n    if (!depType) {\n      throw new Error(`Expected forwardRef function, imported from \"${stringifyForError(importingType)}\", to return a standalone entity or NgModule but got \"${stringifyForError(depType) || depType}\".`);\n    }\n  }\n  if (getNgModuleDef(depType) == null) {\n    const def = getComponentDef(depType) || getDirectiveDef(depType) || getPipeDef$1(depType);\n    if (def != null) {\n      // if a component, directive or pipe is imported make sure that it is standalone\n      if (!def.standalone) {\n        throw new Error(`The \"${stringifyForError(depType)}\" ${getDependencyTypeForError(depType)}, imported from \"${stringifyForError(importingType)}\", is not standalone. Did you forget to add the standalone: true flag?`);\n      }\n    } else {\n      // it can be either a module with provider or an unknown (not annotated) type\n      if (isModuleWithProviders(depType)) {\n        throw new Error(`A module with providers was imported from \"${stringifyForError(importingType)}\". Modules with providers are not supported in standalone components imports.`);\n      } else {\n        throw new Error(`The \"${stringifyForError(depType)}\" type, imported from \"${stringifyForError(importingType)}\", must be a standalone component / directive / pipe or an NgModule. Did you forget to add the required @Component / @Directive / @Pipe or @NgModule annotation?`);\n      }\n    }\n  }\n}\n\n/**\n * Indicates whether to use the runtime dependency tracker for scope calculation in JIT compilation.\n * The value \"false\" means the old code path based on patching scope info into the types will be\n * used.\n *\n * @deprecated For migration purposes only, to be removed soon.\n */\nconst USE_RUNTIME_DEPS_TRACKER_FOR_JIT = true;\n/**\n * An implementation of DepsTrackerApi which will be used for JIT and local compilation.\n */\nclass DepsTracker {\n  ownerNgModule = new Map();\n  ngModulesWithSomeUnresolvedDecls = new Set();\n  ngModulesScopeCache = new Map();\n  standaloneComponentsScopeCache = new Map();\n  /**\n   * Attempts to resolve ng module's forward ref declarations as much as possible and add them to\n   * the `ownerNgModule` map. This method normally should be called after the initial parsing when\n   * all the forward refs are resolved (e.g., when trying to render a component)\n   */\n  resolveNgModulesDecls() {\n    if (this.ngModulesWithSomeUnresolvedDecls.size === 0) {\n      return;\n    }\n    for (const moduleType of this.ngModulesWithSomeUnresolvedDecls) {\n      const def = getNgModuleDef(moduleType);\n      if (def?.declarations) {\n        for (const decl of maybeUnwrapFn(def.declarations)) {\n          if (isComponent(decl)) {\n            this.ownerNgModule.set(decl, moduleType);\n          }\n        }\n      }\n    }\n    this.ngModulesWithSomeUnresolvedDecls.clear();\n  }\n  /** @override */\n  getComponentDependencies(type, rawImports) {\n    this.resolveNgModulesDecls();\n    const def = getComponentDef(type);\n    if (def === null) {\n      throw new Error(`Attempting to get component dependencies for a type that is not a component: ${type}`);\n    }\n    if (def.standalone) {\n      const scope = this.getStandaloneComponentScope(type, rawImports);\n      if (scope.compilation.isPoisoned) {\n        return {\n          dependencies: []\n        };\n      }\n      return {\n        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes, ...scope.compilation.ngModules]\n      };\n    } else {\n      if (!this.ownerNgModule.has(type)) {\n        // This component is orphan! No need to handle the error since the component rendering\n        // pipeline (e.g., view_container_ref) will check for this error based on configs.\n        return {\n          dependencies: []\n        };\n      }\n      const scope = this.getNgModuleScope(this.ownerNgModule.get(type));\n      if (scope.compilation.isPoisoned) {\n        return {\n          dependencies: []\n        };\n      }\n      return {\n        dependencies: [...scope.compilation.directives, ...scope.compilation.pipes]\n      };\n    }\n  }\n  /**\n   * @override\n   * This implementation does not make use of param scopeInfo since it assumes the scope info is\n   * already added to the type itself through methods like {@link ɵɵsetNgModuleScope}\n   */\n  registerNgModule(type, scopeInfo) {\n    if (!isNgModule(type)) {\n      throw new Error(`Attempting to register a Type which is not NgModule as NgModule: ${type}`);\n    }\n    // Lazily process the NgModules later when needed.\n    this.ngModulesWithSomeUnresolvedDecls.add(type);\n  }\n  /** @override */\n  clearScopeCacheFor(type) {\n    this.ngModulesScopeCache.delete(type);\n    this.standaloneComponentsScopeCache.delete(type);\n  }\n  /** @override */\n  getNgModuleScope(type) {\n    if (this.ngModulesScopeCache.has(type)) {\n      return this.ngModulesScopeCache.get(type);\n    }\n    const scope = this.computeNgModuleScope(type);\n    this.ngModulesScopeCache.set(type, scope);\n    return scope;\n  }\n  /** Compute NgModule scope afresh. */\n  computeNgModuleScope(type) {\n    const def = getNgModuleDef(type, true);\n    const scope = {\n      exported: {\n        directives: new Set(),\n        pipes: new Set()\n      },\n      compilation: {\n        directives: new Set(),\n        pipes: new Set()\n      }\n    };\n    // Analyzing imports\n    for (const imported of maybeUnwrapFn(def.imports)) {\n      if (isNgModule(imported)) {\n        const importedScope = this.getNgModuleScope(imported);\n        // When this module imports another, the imported module's exported directives and pipes\n        // are added to the compilation scope of this module.\n        addSet(importedScope.exported.directives, scope.compilation.directives);\n        addSet(importedScope.exported.pipes, scope.compilation.pipes);\n      } else if (isStandalone(imported)) {\n        if (isDirective(imported) || isComponent(imported)) {\n          scope.compilation.directives.add(imported);\n        } else if (isPipe(imported)) {\n          scope.compilation.pipes.add(imported);\n        } else {\n          // The standalone thing is neither a component nor a directive nor a pipe ... (what?)\n          throw new RuntimeError(980 /* RuntimeErrorCode.RUNTIME_DEPS_INVALID_IMPORTED_TYPE */, 'The standalone imported type is neither a component nor a directive nor a pipe');\n        }\n      } else {\n        // The import is neither a module nor a module-with-providers nor a standalone thing. This\n        // is going to be an error. So we short circuit.\n        scope.compilation.isPoisoned = true;\n        break;\n      }\n    }\n    // Analyzing declarations\n    if (!scope.compilation.isPoisoned) {\n      for (const decl of maybeUnwrapFn(def.declarations)) {\n        // Cannot declare another NgModule or a standalone thing\n        if (isNgModule(decl) || isStandalone(decl)) {\n          scope.compilation.isPoisoned = true;\n          break;\n        }\n        if (isPipe(decl)) {\n          scope.compilation.pipes.add(decl);\n        } else {\n          // decl is either a directive or a component. The component may not yet have the ɵcmp due\n          // to async compilation.\n          scope.compilation.directives.add(decl);\n        }\n      }\n    }\n    // Analyzing exports\n    for (const exported of maybeUnwrapFn(def.exports)) {\n      if (isNgModule(exported)) {\n        // When this module exports another, the exported module's exported directives and pipes\n        // are added to both the compilation and exported scopes of this module.\n        const exportedScope = this.getNgModuleScope(exported);\n        // Based on the current logic there is no way to have poisoned exported scope. So no need to\n        // check for it.\n        addSet(exportedScope.exported.directives, scope.exported.directives);\n        addSet(exportedScope.exported.pipes, scope.exported.pipes);\n        // Some test toolings which run in JIT mode depend on this behavior that the exported scope\n        // should also be present in the compilation scope, even though AoT does not support this\n        // and it is also in odds with NgModule metadata definitions. Without this some tests in\n        // Google will fail.\n        addSet(exportedScope.exported.directives, scope.compilation.directives);\n        addSet(exportedScope.exported.pipes, scope.compilation.pipes);\n      } else if (isPipe(exported)) {\n        scope.exported.pipes.add(exported);\n      } else {\n        scope.exported.directives.add(exported);\n      }\n    }\n    return scope;\n  }\n  /** @override */\n  getStandaloneComponentScope(type, rawImports) {\n    if (this.standaloneComponentsScopeCache.has(type)) {\n      return this.standaloneComponentsScopeCache.get(type);\n    }\n    const ans = this.computeStandaloneComponentScope(type, rawImports);\n    this.standaloneComponentsScopeCache.set(type, ans);\n    return ans;\n  }\n  computeStandaloneComponentScope(type, rawImports) {\n    const ans = {\n      compilation: {\n        // Standalone components are always able to self-reference.\n        directives: new Set([type]),\n        pipes: new Set(),\n        ngModules: new Set()\n      }\n    };\n    for (const rawImport of flatten(rawImports ?? [])) {\n      const imported = resolveForwardRef(rawImport);\n      try {\n        verifyStandaloneImport(imported, type);\n      } catch (e) {\n        // Short-circuit if an import is not valid\n        ans.compilation.isPoisoned = true;\n        return ans;\n      }\n      if (isNgModule(imported)) {\n        ans.compilation.ngModules.add(imported);\n        const importedScope = this.getNgModuleScope(imported);\n        // Short-circuit if an imported NgModule has corrupted exported scope.\n        if (importedScope.exported.isPoisoned) {\n          ans.compilation.isPoisoned = true;\n          return ans;\n        }\n        addSet(importedScope.exported.directives, ans.compilation.directives);\n        addSet(importedScope.exported.pipes, ans.compilation.pipes);\n      } else if (isPipe(imported)) {\n        ans.compilation.pipes.add(imported);\n      } else if (isDirective(imported) || isComponent(imported)) {\n        ans.compilation.directives.add(imported);\n      } else {\n        // The imported thing is not module/pipe/directive/component, so we error and short-circuit\n        // here\n        ans.compilation.isPoisoned = true;\n        return ans;\n      }\n    }\n    return ans;\n  }\n  /** @override */\n  isOrphanComponent(cmp) {\n    const def = getComponentDef(cmp);\n    if (!def || def.standalone) {\n      return false;\n    }\n    this.resolveNgModulesDecls();\n    return !this.ownerNgModule.has(cmp);\n  }\n}\nfunction addSet(sourceSet, targetSet) {\n  for (const m of sourceSet) {\n    targetSet.add(m);\n  }\n}\n/** The deps tracker to be used in the current Angular app in dev mode. */\nconst depsTracker = new DepsTracker();\nconst TEST_ONLY = {\n  DepsTracker\n};\n\n/**\n * Compute the static styling (class/style) from `TAttributes`.\n *\n * This function should be called during `firstCreatePass` only.\n *\n * @param tNode The `TNode` into which the styling information should be loaded.\n * @param attrs `TAttributes` containing the styling information.\n * @param writeToHost Where should the resulting static styles be written?\n *   - `false` Write to `TNode.stylesWithoutHost` / `TNode.classesWithoutHost`\n *   - `true` Write to `TNode.styles` / `TNode.classes`\n */\nfunction computeStaticStyling(tNode, attrs, writeToHost) {\n  ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');\n  let styles = writeToHost ? tNode.styles : null;\n  let classes = writeToHost ? tNode.classes : null;\n  let mode = 0;\n  if (attrs !== null) {\n    for (let i = 0; i < attrs.length; i++) {\n      const value = attrs[i];\n      if (typeof value === 'number') {\n        mode = value;\n      } else if (mode == 1 /* AttributeMarker.Classes */) {\n        classes = concatStringsWithSpace(classes, value);\n      } else if (mode == 2 /* AttributeMarker.Styles */) {\n        const style = value;\n        const styleValue = attrs[++i];\n        styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');\n      }\n    }\n  }\n  writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;\n  writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;\n}\nclass ComponentFactoryResolver extends ComponentFactoryResolver$1 {\n  ngModule;\n  /**\n   * @param ngModule The NgModuleRef to which all resolved factories are bound.\n   */\n  constructor(ngModule) {\n    super();\n    this.ngModule = ngModule;\n  }\n  resolveComponentFactory(component) {\n    ngDevMode && assertComponentType(component);\n    const componentDef = getComponentDef(component);\n    return new ComponentFactory(componentDef, this.ngModule);\n  }\n}\nfunction toRefArray(map, isInputMap) {\n  const array = [];\n  for (const publicName in map) {\n    if (!map.hasOwnProperty(publicName)) {\n      continue;\n    }\n    const value = map[publicName];\n    if (value === undefined) {\n      continue;\n    }\n    const isArray = Array.isArray(value);\n    const propName = isArray ? value[0] : value;\n    const flags = isArray ? value[1] : InputFlags.None;\n    if (isInputMap) {\n      array.push({\n        propName: propName,\n        templateName: publicName,\n        isSignal: (flags & InputFlags.SignalBased) !== 0\n      });\n    } else {\n      array.push({\n        propName: propName,\n        templateName: publicName\n      });\n    }\n  }\n  return array;\n}\nfunction getNamespace(elementName) {\n  const name = elementName.toLowerCase();\n  return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;\n}\n/**\n * ComponentFactory interface implementation.\n */\nclass ComponentFactory extends ComponentFactory$1 {\n  componentDef;\n  ngModule;\n  selector;\n  componentType;\n  ngContentSelectors;\n  isBoundToModule;\n  get inputs() {\n    const componentDef = this.componentDef;\n    const inputTransforms = componentDef.inputTransforms;\n    const refArray = toRefArray(componentDef.inputs, true);\n    if (inputTransforms !== null) {\n      for (const input of refArray) {\n        if (inputTransforms.hasOwnProperty(input.propName)) {\n          input.transform = inputTransforms[input.propName];\n        }\n      }\n    }\n    return refArray;\n  }\n  get outputs() {\n    return toRefArray(this.componentDef.outputs, false);\n  }\n  /**\n   * @param componentDef The component definition.\n   * @param ngModule The NgModuleRef to which the factory is bound.\n   */\n  constructor(componentDef, ngModule) {\n    super();\n    this.componentDef = componentDef;\n    this.ngModule = ngModule;\n    this.componentType = componentDef.type;\n    this.selector = stringifyCSSSelectorList(componentDef.selectors);\n    this.ngContentSelectors = componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];\n    this.isBoundToModule = !!ngModule;\n  }\n  create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // Check if the component is orphan\n      if (ngDevMode && (typeof ngJitMode === 'undefined' || ngJitMode) && this.componentDef.debugInfo?.forbidOrphanRendering) {\n        if (depsTracker.isOrphanComponent(this.componentType)) {\n          throw new RuntimeError(981 /* RuntimeErrorCode.RUNTIME_DEPS_ORPHAN_COMPONENT */, `Orphan component found! Trying to render the component ${debugStringifyTypeForError(this.componentType)} without first loading the NgModule that declares it. It is recommended to make this component standalone in order to avoid this error. If this is not possible now, import the component's NgModule in the appropriate NgModule, or the standalone component in which you are trying to render this component. If this is a lazy import, load the NgModule lazily as well and use its module injector.`);\n        }\n      }\n      environmentInjector = environmentInjector || this.ngModule;\n      let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ? environmentInjector : environmentInjector?.injector;\n      if (realEnvironmentInjector && this.componentDef.getStandaloneInjector !== null) {\n        realEnvironmentInjector = this.componentDef.getStandaloneInjector(realEnvironmentInjector) || realEnvironmentInjector;\n      }\n      const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;\n      const rendererFactory = rootViewInjector.get(RendererFactory2, null);\n      if (rendererFactory === null) {\n        throw new RuntimeError(407 /* RuntimeErrorCode.RENDERER_NOT_FOUND */, ngDevMode && 'Angular was not able to inject a renderer (RendererFactory2). ' + 'Likely this is due to a broken DI hierarchy. ' + 'Make sure that any injector used to create this component has a correct parent.');\n      }\n      const sanitizer = rootViewInjector.get(Sanitizer, null);\n      const changeDetectionScheduler = rootViewInjector.get(ChangeDetectionScheduler, null);\n      const environment = {\n        rendererFactory,\n        sanitizer,\n        changeDetectionScheduler\n      };\n      const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);\n      // Determine a tag name used for creating host elements when this component is created\n      // dynamically. Default to 'div' if this component did not specify any tag name in its\n      // selector.\n      const elementName = this.componentDef.selectors[0][0] || 'div';\n      const hostRNode = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation, rootViewInjector) : createElementNode(hostRenderer, elementName, getNamespace(elementName));\n      let rootFlags = 512 /* LViewFlags.IsRoot */;\n      if (this.componentDef.signals) {\n        rootFlags |= 4096 /* LViewFlags.SignalView */;\n      } else if (!this.componentDef.onPush) {\n        rootFlags |= 16 /* LViewFlags.CheckAlways */;\n      }\n      let hydrationInfo = null;\n      if (hostRNode !== null) {\n        hydrationInfo = retrieveHydrationInfo(hostRNode, rootViewInjector, true /* isRootView */);\n      }\n      // Create the root view. Uses empty TView and ContentTemplate.\n      const rootTView = createTView(0 /* TViewType.Root */, null, null, 1, 0, null, null, null, null, null, null);\n      const rootLView = createLView(null, rootTView, null, rootFlags, null, null, environment, hostRenderer, rootViewInjector, null, hydrationInfo);\n      // rootView is the parent when bootstrapping\n      // TODO(misko): it looks like we are entering view here but we don't really need to as\n      // `renderView` does that. However as the code is written it is needed because\n      // `createRootComponentView` and `createRootComponent` both read global state. Fixing those\n      // issues would allow us to drop this.\n      enterView(rootLView);\n      let component;\n      let tElementNode;\n      let componentView = null;\n      try {\n        const rootComponentDef = this.componentDef;\n        let rootDirectives;\n        let hostDirectiveDefs = null;\n        if (rootComponentDef.findHostDirectiveDefs) {\n          rootDirectives = [];\n          hostDirectiveDefs = new Map();\n          rootComponentDef.findHostDirectiveDefs(rootComponentDef, rootDirectives, hostDirectiveDefs);\n          rootDirectives.push(rootComponentDef);\n          ngDevMode && assertNoDuplicateDirectives(rootDirectives);\n        } else {\n          rootDirectives = [rootComponentDef];\n        }\n        const hostTNode = createRootComponentTNode(rootLView, hostRNode);\n        componentView = createRootComponentView(hostTNode, hostRNode, rootComponentDef, rootDirectives, rootLView, environment, hostRenderer);\n        tElementNode = getTNode(rootTView, HEADER_OFFSET);\n        // TODO(crisbeto): in practice `hostRNode` should always be defined, but there are some\n        // tests where the renderer is mocked out and `undefined` is returned. We should update the\n        // tests so that this check can be removed.\n        if (hostRNode) {\n          setRootNodeAttributes(hostRenderer, rootComponentDef, hostRNode, rootSelectorOrNode);\n        }\n        if (projectableNodes !== undefined) {\n          projectNodes(tElementNode, this.ngContentSelectors, projectableNodes);\n        }\n        // TODO: should LifecycleHooksFeature and other host features be generated by the compiler\n        // and executed here? Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref\n        component = createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, [LifecycleHooksFeature]);\n        renderView(rootTView, rootLView, null);\n      } catch (e) {\n        // Stop tracking the views if creation failed since\n        // the consumer won't have a way to dereference them.\n        if (componentView !== null) {\n          unregisterLView(componentView);\n        }\n        unregisterLView(rootLView);\n        throw e;\n      } finally {\n        leaveView();\n      }\n      return new ComponentRef(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Represents an instance of a Component created via a {@link ComponentFactory}.\n *\n * `ComponentRef` provides access to the Component Instance as well other objects related to this\n * Component Instance and allows you to destroy the Component Instance via the {@link #destroy}\n * method.\n *\n */\nclass ComponentRef extends ComponentRef$1 {\n  location;\n  _rootLView;\n  _tNode;\n  instance;\n  hostView;\n  changeDetectorRef;\n  componentType;\n  previousInputValues = null;\n  constructor(componentType, instance, location, _rootLView, _tNode) {\n    super();\n    this.location = location;\n    this._rootLView = _rootLView;\n    this._tNode = _tNode;\n    this.instance = instance;\n    this.hostView = this.changeDetectorRef = new ViewRef$1(_rootLView, undefined /* _cdRefInjectingView */, false /* notifyErrorHandler */);\n    this.componentType = componentType;\n  }\n  setInput(name, value) {\n    const inputData = this._tNode.inputs;\n    let dataValue;\n    if (inputData !== null && (dataValue = inputData[name])) {\n      this.previousInputValues ??= new Map();\n      // Do not set the input if it is the same as the last value\n      // This behavior matches `bindingUpdated` when binding inputs in templates.\n      if (this.previousInputValues.has(name) && Object.is(this.previousInputValues.get(name), value)) {\n        return;\n      }\n      const lView = this._rootLView;\n      setInputsForProperty(lView[TVIEW], lView, dataValue, name, value);\n      this.previousInputValues.set(name, value);\n      const childComponentLView = getComponentLViewByIndex(this._tNode.index, lView);\n      markViewDirty(childComponentLView, 1 /* NotificationSource.SetInput */);\n    } else {\n      if (ngDevMode) {\n        const cmpNameForError = stringifyForError(this.componentType);\n        let message = `Can't set value of the '${name}' input on the '${cmpNameForError}' component. `;\n        message += `Make sure that the '${name}' property is annotated with @Input() or a mapped @Input('${name}') exists.`;\n        reportUnknownPropertyError(message);\n      }\n    }\n  }\n  get injector() {\n    return new NodeInjector(this._tNode, this._rootLView);\n  }\n  destroy() {\n    this.hostView.destroy();\n  }\n  onDestroy(callback) {\n    this.hostView.onDestroy(callback);\n  }\n}\n/** Creates a TNode that can be used to instantiate a root component. */\nfunction createRootComponentTNode(lView, rNode) {\n  const tView = lView[TVIEW];\n  const index = HEADER_OFFSET;\n  ngDevMode && assertIndexInRange(lView, index);\n  lView[index] = rNode;\n  // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at\n  // the same time we want to communicate the debug `TNode` that this is a special `TNode`\n  // representing a host element.\n  return getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, '#host', null);\n}\n/**\n * Creates the root component view and the root component node.\n *\n * @param hostRNode Render host element.\n * @param rootComponentDef ComponentDef\n * @param rootView The parent view where the host node is stored\n * @param rendererFactory Factory to be used for creating child renderers.\n * @param hostRenderer The current renderer\n * @param sanitizer The sanitizer, if provided\n *\n * @returns Component view created\n */\nfunction createRootComponentView(tNode, hostRNode, rootComponentDef, rootDirectives, rootView, environment, hostRenderer) {\n  const tView = rootView[TVIEW];\n  applyRootComponentStyling(rootDirectives, tNode, hostRNode, hostRenderer);\n  // Hydration info is on the host element and needs to be retrieved\n  // and passed to the component LView.\n  let hydrationInfo = null;\n  if (hostRNode !== null) {\n    hydrationInfo = retrieveHydrationInfo(hostRNode, rootView[INJECTOR]);\n  }\n  const viewRenderer = environment.rendererFactory.createRenderer(hostRNode, rootComponentDef);\n  const componentView = createLView(rootView, getOrCreateComponentTView(rootComponentDef), null, getInitialLViewFlagsFromDef(rootComponentDef), rootView[tNode.index], tNode, environment, viewRenderer, null, null, hydrationInfo);\n  if (tView.firstCreatePass) {\n    markAsComponentHost(tView, tNode, rootDirectives.length - 1);\n  }\n  addToEndOfViewTree(rootView, componentView);\n  // Store component view at node index, with node as the HOST\n  return rootView[tNode.index] = componentView;\n}\n/** Sets up the styling information on a root component. */\nfunction applyRootComponentStyling(rootDirectives, tNode, rNode, hostRenderer) {\n  for (const def of rootDirectives) {\n    tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, def.hostAttrs);\n  }\n  if (tNode.mergedAttrs !== null) {\n    computeStaticStyling(tNode, tNode.mergedAttrs, true);\n    if (rNode !== null) {\n      setupStaticAttributes(hostRenderer, rNode, tNode);\n    }\n  }\n}\n/**\n * Creates a root component and sets it up with features and host bindings.Shared by\n * renderComponent() and ViewContainerRef.createComponent().\n */\nfunction createRootComponent(componentView, rootComponentDef, rootDirectives, hostDirectiveDefs, rootLView, hostFeatures) {\n  const rootTNode = getCurrentTNode();\n  ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');\n  const tView = rootLView[TVIEW];\n  const native = getNativeByTNode(rootTNode, rootLView);\n  initializeDirectives(tView, rootLView, rootTNode, rootDirectives, null, hostDirectiveDefs);\n  for (let i = 0; i < rootDirectives.length; i++) {\n    const directiveIndex = rootTNode.directiveStart + i;\n    const directiveInstance = getNodeInjectable(rootLView, tView, directiveIndex, rootTNode);\n    attachPatchData(directiveInstance, rootLView);\n  }\n  invokeDirectivesHostBindings(tView, rootLView, rootTNode);\n  if (native) {\n    attachPatchData(native, rootLView);\n  }\n  // We're guaranteed for the `componentOffset` to be positive here\n  // since a root component always matches a component def.\n  ngDevMode && assertGreaterThan(rootTNode.componentOffset, -1, 'componentOffset must be great than -1');\n  const component = getNodeInjectable(rootLView, tView, rootTNode.directiveStart + rootTNode.componentOffset, rootTNode);\n  componentView[CONTEXT] = rootLView[CONTEXT] = component;\n  if (hostFeatures !== null) {\n    for (const feature of hostFeatures) {\n      feature(component, rootComponentDef);\n    }\n  }\n  // We want to generate an empty QueryList for root content queries for backwards\n  // compatibility with ViewEngine.\n  executeContentQueries(tView, rootTNode, rootLView);\n  return component;\n}\n/** Sets the static attributes on a root component. */\nfunction setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {\n  if (rootSelectorOrNode) {\n    // The placeholder will be replaced with the actual version at build time.\n    setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.0.5']);\n  } else {\n    // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`\n    // is not defined), also apply attributes and classes extracted from component selector.\n    // Extract attributes and classes from the first selector only to match VE behavior.\n    const {\n      attrs,\n      classes\n    } = extractAttrsAndClassesFromSelector(componentDef.selectors[0]);\n    if (attrs) {\n      setUpAttributes(hostRenderer, hostRNode, attrs);\n    }\n    if (classes && classes.length > 0) {\n      writeDirectClass(hostRenderer, hostRNode, classes.join(' '));\n    }\n  }\n}\n/** Projects the `projectableNodes` that were specified when creating a root component. */\nfunction projectNodes(tNode, ngContentSelectors, projectableNodes) {\n  const projection = tNode.projection = [];\n  for (let i = 0; i < ngContentSelectors.length; i++) {\n    const nodesforSlot = projectableNodes[i];\n    // Projectable nodes can be passed as array of arrays or an array of iterables (ngUpgrade\n    // case). Here we do normalize passed data structure to be an array of arrays to avoid\n    // complex checks down the line.\n    // We also normalize the length of the passed in projectable nodes (to match the number of\n    // <ng-container> slots defined by a component).\n    projection.push(nodesforSlot != null && nodesforSlot.length ? Array.from(nodesforSlot) : null);\n  }\n}\n/**\n * Used to enable lifecycle hooks on the root component.\n *\n * Include this feature when calling `renderComponent` if the root component\n * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't\n * be called properly.\n *\n * Example:\n *\n * ```ts\n * renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});\n * ```\n */\nfunction LifecycleHooksFeature() {\n  const tNode = getCurrentTNode();\n  ngDevMode && assertDefined(tNode, 'TNode is required');\n  registerPostOrderHooks(getLView()[TVIEW], tNode);\n}\n\n/**\n * Represents a container where one or more views can be attached to a component.\n *\n * Can contain *host views* (created by instantiating a\n * component with the `createComponent()` method), and *embedded views*\n * (created by instantiating a `TemplateRef` with the `createEmbeddedView()` method).\n *\n * A view container instance can contain other view containers,\n * creating a view hierarchy.\n *\n * @usageNotes\n *\n * The example below demonstrates how the `createComponent` function can be used\n * to create an instance of a ComponentRef dynamically and attach it to an ApplicationRef,\n * so that it gets included into change detection cycles.\n *\n * Note: the example uses standalone components, but the function can also be used for\n * non-standalone components (declared in an NgModule) as well.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   selector: 'dynamic',\n *   template: `<span>This is a content of a dynamic component.</span>`,\n * })\n * class DynamicComponent {\n *   vcr = inject(ViewContainerRef);\n * }\n *\n * @Component({\n *   standalone: true,\n *   selector: 'app',\n *   template: `<main>Hi! This is the main content.</main>`,\n * })\n * class AppComponent {\n *   vcr = inject(ViewContainerRef);\n *\n *   ngAfterViewInit() {\n *     const compRef = this.vcr.createComponent(DynamicComponent);\n *     compRef.changeDetectorRef.detectChanges();\n *   }\n * }\n * ```\n *\n * @see {@link ComponentRef}\n * @see {@link EmbeddedViewRef}\n *\n * @publicApi\n */\nclass ViewContainerRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectViewContainerRef;\n}\n/**\n * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef\n * already exists, retrieves the existing ViewContainerRef.\n *\n * @returns The ViewContainerRef instance to use\n */\nfunction injectViewContainerRef() {\n  const previousTNode = getCurrentTNode();\n  return createContainerRef(previousTNode, getLView());\n}\nconst VE_ViewContainerRef = ViewContainerRef;\n// TODO(alxhub): cleaning up this indirection triggers a subtle bug in Closure in g3. Once the fix\n// for that lands, this can be cleaned up.\nconst R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {\n  _lContainer;\n  _hostTNode;\n  _hostLView;\n  constructor(_lContainer, _hostTNode, _hostLView) {\n    super();\n    this._lContainer = _lContainer;\n    this._hostTNode = _hostTNode;\n    this._hostLView = _hostLView;\n  }\n  get element() {\n    return createElementRef(this._hostTNode, this._hostLView);\n  }\n  get injector() {\n    return new NodeInjector(this._hostTNode, this._hostLView);\n  }\n  /** @deprecated No replacement */\n  get parentInjector() {\n    const parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);\n    if (hasParentInjector(parentLocation)) {\n      const parentView = getParentInjectorView(parentLocation, this._hostLView);\n      const injectorIndex = getParentInjectorIndex(parentLocation);\n      ngDevMode && assertNodeInjector(parentView, injectorIndex);\n      const parentTNode = parentView[TVIEW].data[injectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n      return new NodeInjector(parentTNode, parentView);\n    } else {\n      return new NodeInjector(null, this._hostLView);\n    }\n  }\n  clear() {\n    while (this.length > 0) {\n      this.remove(this.length - 1);\n    }\n  }\n  get(index) {\n    const viewRefs = getViewRefs(this._lContainer);\n    return viewRefs !== null && viewRefs[index] || null;\n  }\n  get length() {\n    return this._lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n  createEmbeddedView(templateRef, context, indexOrOptions) {\n    let index;\n    let injector;\n    if (typeof indexOrOptions === 'number') {\n      index = indexOrOptions;\n    } else if (indexOrOptions != null) {\n      index = indexOrOptions.index;\n      injector = indexOrOptions.injector;\n    }\n    const dehydratedView = findMatchingDehydratedView(this._lContainer, templateRef.ssrId);\n    const viewRef = templateRef.createEmbeddedViewImpl(context || {}, injector, dehydratedView);\n    this.insertImpl(viewRef, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n    return viewRef;\n  }\n  createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {\n    const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);\n    let index;\n    // This function supports 2 signatures and we need to handle options correctly for both:\n    //   1. When first argument is a Component type. This signature also requires extra\n    //      options to be provided as object (more ergonomic option).\n    //   2. First argument is a Component factory. In this case extra options are represented as\n    //      positional arguments. This signature is less ergonomic and will be deprecated.\n    if (isComponentFactory) {\n      if (ngDevMode) {\n        assertEqual(typeof indexOrOptions !== 'object', true, 'It looks like Component factory was provided as the first argument ' + 'and an options object as the second argument. This combination of arguments ' + 'is incompatible. You can either change the first argument to provide Component ' + 'type or change the second argument to be a number (representing an index at ' + \"which to insert the new component's host view into this container)\");\n      }\n      index = indexOrOptions;\n    } else {\n      if (ngDevMode) {\n        assertDefined(getComponentDef(componentFactoryOrType), `Provided Component class doesn't contain Component definition. ` + `Please check whether provided class has @Component decorator.`);\n        assertEqual(typeof indexOrOptions !== 'number', true, 'It looks like Component type was provided as the first argument ' + \"and a number (representing an index at which to insert the new component's \" + 'host view into this container as the second argument. This combination of arguments ' + 'is incompatible. Please use an object as the second argument instead.');\n      }\n      const options = indexOrOptions || {};\n      if (ngDevMode && options.environmentInjector && options.ngModuleRef) {\n        throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);\n      }\n      index = options.index;\n      injector = options.injector;\n      projectableNodes = options.projectableNodes;\n      environmentInjector = options.environmentInjector || options.ngModuleRef;\n    }\n    const componentFactory = isComponentFactory ? componentFactoryOrType : new ComponentFactory(getComponentDef(componentFactoryOrType));\n    const contextInjector = injector || this.parentInjector;\n    // If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.\n    if (!environmentInjector && componentFactory.ngModule == null) {\n      // For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that\n      // an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an\n      // `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based\n      // use-cases. For the `ComponentFactory` case we preserve backwards-compatibility and try\n      // using a provided injector first, then fall back to the parent injector of this\n      // `ViewContainerRef` instance.\n      //\n      // For the factory-less case, it's critical to establish a connection with the module\n      // injector tree (by retrieving an instance of an `NgModuleRef` and accessing its injector),\n      // so that a component can use DI tokens provided in MgModules. For this reason, we can not\n      // rely on the provided injector, since it might be detached from the DI tree (for example, if\n      // it was created via `Injector.create` without specifying a parent injector, or if an\n      // injector is retrieved from an `NgModuleRef` created via `createNgModule` using an\n      // NgModule outside of a module tree). Instead, we always use `ViewContainerRef`'s parent\n      // injector, which is normally connected to the DI tree, which includes module injector\n      // subtree.\n      const _injector = isComponentFactory ? contextInjector : this.parentInjector;\n      // DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||\n      // undefined` expression which seems to cause internal google apps to fail. This is documented\n      // in the following internal bug issue: go/b/142967802\n      const result = _injector.get(EnvironmentInjector, null);\n      if (result) {\n        environmentInjector = result;\n      }\n    }\n    const componentDef = getComponentDef(componentFactory.componentType ?? {});\n    const dehydratedView = findMatchingDehydratedView(this._lContainer, componentDef?.id ?? null);\n    const rNode = dehydratedView?.firstChild ?? null;\n    const componentRef = componentFactory.create(contextInjector, projectableNodes, rNode, environmentInjector);\n    this.insertImpl(componentRef.hostView, index, shouldAddViewToDom(this._hostTNode, dehydratedView));\n    return componentRef;\n  }\n  insert(viewRef, index) {\n    return this.insertImpl(viewRef, index, true);\n  }\n  insertImpl(viewRef, index, addToDOM) {\n    const lView = viewRef._lView;\n    if (ngDevMode && viewRef.destroyed) {\n      throw new Error('Cannot insert a destroyed View in a ViewContainer!');\n    }\n    if (viewAttachedToContainer(lView)) {\n      // If view is already attached, detach it first so we clean up references appropriately.\n      const prevIdx = this.indexOf(viewRef);\n      // A view might be attached either to this or a different container. The `prevIdx` for\n      // those cases will be:\n      // equal to -1 for views attached to this ViewContainerRef\n      // >= 0 for views attached to a different ViewContainerRef\n      if (prevIdx !== -1) {\n        this.detach(prevIdx);\n      } else {\n        const prevLContainer = lView[PARENT];\n        ngDevMode && assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.');\n        // We need to re-create a R3ViewContainerRef instance since those are not stored on\n        // LView (nor anywhere else).\n        const prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);\n        prevVCRef.detach(prevVCRef.indexOf(viewRef));\n      }\n    }\n    // Logical operation of adding `LView` to `LContainer`\n    const adjustedIdx = this._adjustIndex(index);\n    const lContainer = this._lContainer;\n    addLViewToLContainer(lContainer, lView, adjustedIdx, addToDOM);\n    viewRef.attachToViewContainerRef();\n    addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);\n    return viewRef;\n  }\n  move(viewRef, newIndex) {\n    if (ngDevMode && viewRef.destroyed) {\n      throw new Error('Cannot move a destroyed View in a ViewContainer!');\n    }\n    return this.insert(viewRef, newIndex);\n  }\n  indexOf(viewRef) {\n    const viewRefsArr = getViewRefs(this._lContainer);\n    return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;\n  }\n  remove(index) {\n    const adjustedIdx = this._adjustIndex(index, -1);\n    const detachedView = detachView(this._lContainer, adjustedIdx);\n    if (detachedView) {\n      // Before destroying the view, remove it from the container's array of `ViewRef`s.\n      // This ensures the view container length is updated before calling\n      // `destroyLView`, which could recursively call view container methods that\n      // rely on an accurate container length.\n      // (e.g. a method on this view container being called by a child directive's OnDestroy\n      // lifecycle hook)\n      removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);\n      destroyLView(detachedView[TVIEW], detachedView);\n    }\n  }\n  detach(index) {\n    const adjustedIdx = this._adjustIndex(index, -1);\n    const view = detachView(this._lContainer, adjustedIdx);\n    const wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;\n    return wasDetached ? new ViewRef$1(view) : null;\n  }\n  _adjustIndex(index, shift = 0) {\n    if (index == null) {\n      return this.length + shift;\n    }\n    if (ngDevMode) {\n      assertGreaterThan(index, -1, `ViewRef index must be positive, got ${index}`);\n      // +1 because it's legal to insert at the end.\n      assertLessThan(index, this.length + 1 + shift, 'index');\n    }\n    return index;\n  }\n};\nfunction getViewRefs(lContainer) {\n  return lContainer[VIEW_REFS];\n}\nfunction getOrCreateViewRefs(lContainer) {\n  return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);\n}\n/**\n * Creates a ViewContainerRef and stores it on the injector.\n *\n * @param hostTNode The node that is requesting a ViewContainerRef\n * @param hostLView The view to which the node belongs\n * @returns The ViewContainerRef instance to use\n */\nfunction createContainerRef(hostTNode, hostLView) {\n  ngDevMode && assertTNodeType(hostTNode, 12 /* TNodeType.AnyContainer */ | 3 /* TNodeType.AnyRNode */);\n  let lContainer;\n  const slotValue = hostLView[hostTNode.index];\n  if (isLContainer(slotValue)) {\n    // If the host is a container, we don't need to create a new LContainer\n    lContainer = slotValue;\n  } else {\n    // An LContainer anchor can not be `null`, but we set it here temporarily\n    // and update to the actual value later in this function (see\n    // `_locateOrCreateAnchorNode`).\n    lContainer = createLContainer(slotValue, hostLView, null, hostTNode);\n    hostLView[hostTNode.index] = lContainer;\n    addToEndOfViewTree(hostLView, lContainer);\n  }\n  _locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n  return new R3ViewContainerRef(lContainer, hostTNode, hostLView);\n}\n/**\n * Creates and inserts a comment node that acts as an anchor for a view container.\n *\n * If the host is a regular element, we have to insert a comment node manually which will\n * be used as an anchor when inserting elements. In this specific case we use low-level DOM\n * manipulation to insert it.\n */\nfunction insertAnchorNode(hostLView, hostTNode) {\n  const renderer = hostLView[RENDERER];\n  ngDevMode && ngDevMode.rendererCreateComment++;\n  const commentNode = renderer.createComment(ngDevMode ? 'container' : '');\n  const hostNative = getNativeByTNode(hostTNode, hostLView);\n  const parentOfHostNative = nativeParentNode(renderer, hostNative);\n  nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);\n  return commentNode;\n}\nlet _locateOrCreateAnchorNode = createAnchorNode;\nlet _populateDehydratedViewsInLContainer = () => false; // noop by default\n/**\n * Looks up dehydrated views that belong to a given LContainer and populates\n * this information into the `LContainer[DEHYDRATED_VIEWS]` slot. When running\n * in client-only mode, this function is a noop.\n *\n * @param lContainer LContainer that should be populated.\n * @param tNode Corresponding TNode.\n * @param hostLView LView that hosts LContainer.\n * @returns a boolean flag that indicates whether a populating operation\n *   was successful. The operation might be unsuccessful in case is has completed\n *   previously, we are rendering in client-only mode or this content is located\n *   in a skip hydration section.\n */\nfunction populateDehydratedViewsInLContainer(lContainer, tNode, hostLView) {\n  return _populateDehydratedViewsInLContainer(lContainer, tNode, hostLView);\n}\n/**\n * Regular creation mode: an anchor is created and\n * assigned to the `lContainer[NATIVE]` slot.\n */\nfunction createAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n  // We already have a native element (anchor) set, return.\n  if (lContainer[NATIVE]) return;\n  let commentNode;\n  // If the host is an element container, the native host element is guaranteed to be a\n  // comment and we can reuse that comment as anchor element for the new LContainer.\n  // The comment node in question is already part of the DOM structure so we don't need to append\n  // it again.\n  if (hostTNode.type & 8 /* TNodeType.ElementContainer */) {\n    commentNode = unwrapRNode(slotValue);\n  } else {\n    commentNode = insertAnchorNode(hostLView, hostTNode);\n  }\n  lContainer[NATIVE] = commentNode;\n}\n/**\n * Hydration logic that looks up all dehydrated views in this container\n * and puts them into `lContainer[DEHYDRATED_VIEWS]` slot.\n *\n * @returns a boolean flag that indicates whether a populating operation\n *   was successful. The operation might be unsuccessful in case is has completed\n *   previously, we are rendering in client-only mode or this content is located\n *   in a skip hydration section.\n */\nfunction populateDehydratedViewsInLContainerImpl(lContainer, tNode, hostLView) {\n  // We already have a native element (anchor) set and the process\n  // of finding dehydrated views happened (so the `lContainer[DEHYDRATED_VIEWS]`\n  // is not null), exit early.\n  if (lContainer[NATIVE] && lContainer[DEHYDRATED_VIEWS]) {\n    return true;\n  }\n  const hydrationInfo = hostLView[HYDRATION];\n  const noOffsetIndex = tNode.index - HEADER_OFFSET;\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(tNode) || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return false;\n  }\n  // Hydration mode, looking up an anchor node and dehydrated views in DOM.\n  const currentRNode = getSegmentHead(hydrationInfo, noOffsetIndex);\n  const serializedViews = hydrationInfo.data[CONTAINERS]?.[noOffsetIndex];\n  ngDevMode && assertDefined(serializedViews, 'Unexpected state: no hydration info available for a given TNode, ' + 'which represents a view container.');\n  const [commentNode, dehydratedViews] = locateDehydratedViewsInContainer(currentRNode, serializedViews);\n  if (ngDevMode) {\n    validateMatchingNode(commentNode, Node.COMMENT_NODE, null, hostLView, tNode, true);\n    // Do not throw in case this node is already claimed (thus `false` as a second\n    // argument). If this container is created based on an `<ng-template>`, the comment\n    // node would be already claimed from the `template` instruction. If an element acts\n    // as an anchor (e.g. <div #vcRef>), a separate comment node would be created/located,\n    // so we need to claim it here.\n    markRNodeAsClaimedByHydration(commentNode, false);\n  }\n  lContainer[NATIVE] = commentNode;\n  lContainer[DEHYDRATED_VIEWS] = dehydratedViews;\n  return true;\n}\nfunction locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {\n  if (!_populateDehydratedViewsInLContainer(lContainer, hostTNode, hostLView)) {\n    // Populating dehydrated views operation returned `false`, which indicates\n    // that the logic was running in client-only mode, this an anchor comment\n    // node should be created for this container.\n    createAnchorNode(lContainer, hostLView, hostTNode, slotValue);\n  }\n}\nfunction enableLocateOrCreateContainerRefImpl() {\n  _locateOrCreateAnchorNode = locateOrCreateAnchorNode;\n  _populateDehydratedViewsInLContainer = populateDehydratedViewsInLContainerImpl;\n}\nclass LQuery_ {\n  queryList;\n  matches = null;\n  constructor(queryList) {\n    this.queryList = queryList;\n  }\n  clone() {\n    return new LQuery_(this.queryList);\n  }\n  setDirty() {\n    this.queryList.setDirty();\n  }\n}\nclass LQueries_ {\n  queries;\n  constructor(queries = []) {\n    this.queries = queries;\n  }\n  createEmbeddedView(tView) {\n    const tQueries = tView.queries;\n    if (tQueries !== null) {\n      const noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;\n      const viewLQueries = [];\n      // An embedded view has queries propagated from a declaration view at the beginning of the\n      // TQueries collection and up until a first content query declared in the embedded view. Only\n      // propagated LQueries are created at this point (LQuery corresponding to declared content\n      // queries will be instantiated from the content query instructions for each directive).\n      for (let i = 0; i < noOfInheritedQueries; i++) {\n        const tQuery = tQueries.getByIndex(i);\n        const parentLQuery = this.queries[tQuery.indexInDeclarationView];\n        viewLQueries.push(parentLQuery.clone());\n      }\n      return new LQueries_(viewLQueries);\n    }\n    return null;\n  }\n  insertView(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  detachView(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  finishViewCreation(tView) {\n    this.dirtyQueriesWithMatches(tView);\n  }\n  dirtyQueriesWithMatches(tView) {\n    for (let i = 0; i < this.queries.length; i++) {\n      if (getTQuery(tView, i).matches !== null) {\n        this.queries[i].setDirty();\n      }\n    }\n  }\n}\nclass TQueryMetadata_ {\n  flags;\n  read;\n  predicate;\n  constructor(predicate, flags, read = null) {\n    this.flags = flags;\n    this.read = read;\n    // Compiler might not be able to pre-optimize and split multiple selectors.\n    if (typeof predicate === 'string') {\n      this.predicate = splitQueryMultiSelectors(predicate);\n    } else {\n      this.predicate = predicate;\n    }\n  }\n}\nclass TQueries_ {\n  queries;\n  constructor(queries = []) {\n    this.queries = queries;\n  }\n  elementStart(tView, tNode) {\n    ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].elementStart(tView, tNode);\n    }\n  }\n  elementEnd(tNode) {\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].elementEnd(tNode);\n    }\n  }\n  embeddedTView(tNode) {\n    let queriesForTemplateRef = null;\n    for (let i = 0; i < this.length; i++) {\n      const childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;\n      const tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);\n      if (tqueryClone) {\n        tqueryClone.indexInDeclarationView = i;\n        if (queriesForTemplateRef !== null) {\n          queriesForTemplateRef.push(tqueryClone);\n        } else {\n          queriesForTemplateRef = [tqueryClone];\n        }\n      }\n    }\n    return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;\n  }\n  template(tView, tNode) {\n    ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');\n    for (let i = 0; i < this.queries.length; i++) {\n      this.queries[i].template(tView, tNode);\n    }\n  }\n  getByIndex(index) {\n    ngDevMode && assertIndexInRange(this.queries, index);\n    return this.queries[index];\n  }\n  get length() {\n    return this.queries.length;\n  }\n  track(tquery) {\n    this.queries.push(tquery);\n  }\n}\nclass TQuery_ {\n  metadata;\n  matches = null;\n  indexInDeclarationView = -1;\n  crossesNgTemplate = false;\n  /**\n   * A node index on which a query was declared (-1 for view queries and ones inherited from the\n   * declaration template). We use this index (alongside with _appliesToNextNode flag) to know\n   * when to apply content queries to elements in a template.\n   */\n  _declarationNodeIndex;\n  /**\n   * A flag indicating if a given query still applies to nodes it is crossing. We use this flag\n   * (alongside with _declarationNodeIndex) to know when to stop applying content queries to\n   * elements in a template.\n   */\n  _appliesToNextNode = true;\n  constructor(metadata, nodeIndex = -1) {\n    this.metadata = metadata;\n    this._declarationNodeIndex = nodeIndex;\n  }\n  elementStart(tView, tNode) {\n    if (this.isApplyingToNode(tNode)) {\n      this.matchTNode(tView, tNode);\n    }\n  }\n  elementEnd(tNode) {\n    if (this._declarationNodeIndex === tNode.index) {\n      this._appliesToNextNode = false;\n    }\n  }\n  template(tView, tNode) {\n    this.elementStart(tView, tNode);\n  }\n  embeddedTView(tNode, childQueryIndex) {\n    if (this.isApplyingToNode(tNode)) {\n      this.crossesNgTemplate = true;\n      // A marker indicating a `<ng-template>` element (a placeholder for query results from\n      // embedded views created based on this `<ng-template>`).\n      this.addMatch(-tNode.index, childQueryIndex);\n      return new TQuery_(this.metadata);\n    }\n    return null;\n  }\n  isApplyingToNode(tNode) {\n    if (this._appliesToNextNode && (this.metadata.flags & 1 /* QueryFlags.descendants */) !== 1 /* QueryFlags.descendants */) {\n      const declarationNodeIdx = this._declarationNodeIndex;\n      let parent = tNode.parent;\n      // Determine if a given TNode is a \"direct\" child of a node on which a content query was\n      // declared (only direct children of query's host node can match with the descendants: false\n      // option). There are 3 main use-case / conditions to consider here:\n      // - <needs-target><i #target></i></needs-target>: here <i #target> parent node is a query\n      // host node;\n      // - <needs-target><ng-template [ngIf]=\"true\"><i #target></i></ng-template></needs-target>:\n      // here <i #target> parent node is null;\n      // - <needs-target><ng-container><i #target></i></ng-container></needs-target>: here we need\n      // to go past `<ng-container>` to determine <i #target> parent node (but we shouldn't traverse\n      // up past the query's host node!).\n      while (parent !== null && parent.type & 8 /* TNodeType.ElementContainer */ && parent.index !== declarationNodeIdx) {\n        parent = parent.parent;\n      }\n      return declarationNodeIdx === (parent !== null ? parent.index : -1);\n    }\n    return this._appliesToNextNode;\n  }\n  matchTNode(tView, tNode) {\n    const predicate = this.metadata.predicate;\n    if (Array.isArray(predicate)) {\n      for (let i = 0; i < predicate.length; i++) {\n        const name = predicate[i];\n        this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name));\n        // Also try matching the name to a provider since strings can be used as DI tokens too.\n        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));\n      }\n    } else {\n      if (predicate === TemplateRef) {\n        if (tNode.type & 4 /* TNodeType.Container */) {\n          this.matchTNodeWithReadOption(tView, tNode, -1);\n        }\n      } else {\n        this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));\n      }\n    }\n  }\n  matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {\n    if (nodeMatchIdx !== null) {\n      const read = this.metadata.read;\n      if (read !== null) {\n        if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4 /* TNodeType.Container */) {\n          this.addMatch(tNode.index, -2);\n        } else {\n          const directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);\n          if (directiveOrProviderIdx !== null) {\n            this.addMatch(tNode.index, directiveOrProviderIdx);\n          }\n        }\n      } else {\n        this.addMatch(tNode.index, nodeMatchIdx);\n      }\n    }\n  }\n  addMatch(tNodeIdx, matchIdx) {\n    if (this.matches === null) {\n      this.matches = [tNodeIdx, matchIdx];\n    } else {\n      this.matches.push(tNodeIdx, matchIdx);\n    }\n  }\n}\n/**\n * Iterates over local names for a given node and returns directive index\n * (or -1 if a local name points to an element).\n *\n * @param tNode static data of a node to check\n * @param selector selector to match\n * @returns directive index, -1 or null if a selector didn't match any of the local names\n */\nfunction getIdxOfMatchingSelector(tNode, selector) {\n  const localNames = tNode.localNames;\n  if (localNames !== null) {\n    for (let i = 0; i < localNames.length; i += 2) {\n      if (localNames[i] === selector) {\n        return localNames[i + 1];\n      }\n    }\n  }\n  return null;\n}\nfunction createResultByTNodeType(tNode, currentView) {\n  if (tNode.type & (3 /* TNodeType.AnyRNode */ | 8 /* TNodeType.ElementContainer */)) {\n    return createElementRef(tNode, currentView);\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    return createTemplateRef(tNode, currentView);\n  }\n  return null;\n}\nfunction createResultForNode(lView, tNode, matchingIdx, read) {\n  if (matchingIdx === -1) {\n    // if read token and / or strategy is not specified, detect it using appropriate tNode type\n    return createResultByTNodeType(tNode, lView);\n  } else if (matchingIdx === -2) {\n    // read a special token from a node injector\n    return createSpecialToken(lView, tNode, read);\n  } else {\n    // read a token\n    return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);\n  }\n}\nfunction createSpecialToken(lView, tNode, read) {\n  if (read === ElementRef) {\n    return createElementRef(tNode, lView);\n  } else if (read === TemplateRef) {\n    return createTemplateRef(tNode, lView);\n  } else if (read === ViewContainerRef) {\n    ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n    return createContainerRef(tNode, lView);\n  } else {\n    ngDevMode && throwError(`Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ${stringify(read)}.`);\n  }\n}\n/**\n * A helper function that creates query results for a given view. This function is meant to do the\n * processing once and only once for a given view instance (a set of results for a given view\n * doesn't change).\n */\nfunction materializeViewResults(tView, lView, tQuery, queryIndex) {\n  const lQuery = lView[QUERIES].queries[queryIndex];\n  if (lQuery.matches === null) {\n    const tViewData = tView.data;\n    const tQueryMatches = tQuery.matches;\n    const result = [];\n    for (let i = 0; tQueryMatches !== null && i < tQueryMatches.length; i += 2) {\n      const matchedNodeIdx = tQueryMatches[i];\n      if (matchedNodeIdx < 0) {\n        // we at the <ng-template> marker which might have results in views created based on this\n        // <ng-template> - those results will be in separate views though, so here we just leave\n        // null as a placeholder\n        result.push(null);\n      } else {\n        ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);\n        const tNode = tViewData[matchedNodeIdx];\n        result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));\n      }\n    }\n    lQuery.matches = result;\n  }\n  return lQuery.matches;\n}\n/**\n * A helper function that collects (already materialized) query results from a tree of views,\n * starting with a provided LView.\n */\nfunction collectQueryResults(tView, lView, queryIndex, result) {\n  const tQuery = tView.queries.getByIndex(queryIndex);\n  const tQueryMatches = tQuery.matches;\n  if (tQueryMatches !== null) {\n    const lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);\n    for (let i = 0; i < tQueryMatches.length; i += 2) {\n      const tNodeIdx = tQueryMatches[i];\n      if (tNodeIdx > 0) {\n        result.push(lViewResults[i / 2]);\n      } else {\n        const childQueryIndex = tQueryMatches[i + 1];\n        const declarationLContainer = lView[-tNodeIdx];\n        ngDevMode && assertLContainer(declarationLContainer);\n        // collect matches for views inserted in this container\n        for (let i = CONTAINER_HEADER_OFFSET; i < declarationLContainer.length; i++) {\n          const embeddedLView = declarationLContainer[i];\n          if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {\n            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n          }\n        }\n        // collect matches for views created from this declaration container and inserted into\n        // different containers\n        if (declarationLContainer[MOVED_VIEWS] !== null) {\n          const embeddedLViews = declarationLContainer[MOVED_VIEWS];\n          for (let i = 0; i < embeddedLViews.length; i++) {\n            const embeddedLView = embeddedLViews[i];\n            collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);\n          }\n        }\n      }\n    }\n  }\n  return result;\n}\nfunction loadQueryInternal(lView, queryIndex) {\n  ngDevMode && assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');\n  ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);\n  return lView[QUERIES].queries[queryIndex].queryList;\n}\n/**\n * Creates a new instance of LQuery and returns its index in the collection of LQuery objects.\n *\n * @returns index in the collection of LQuery objects\n */\nfunction createLQuery(tView, lView, flags) {\n  const queryList = new QueryList((flags & 4 /* QueryFlags.emitDistinctChangesOnly */) === 4 /* QueryFlags.emitDistinctChangesOnly */);\n  storeCleanupWithContext(tView, lView, queryList, queryList.destroy);\n  const lQueries = (lView[QUERIES] ??= new LQueries_()).queries;\n  return lQueries.push(new LQuery_(queryList)) - 1;\n}\nfunction createViewQuery(predicate, flags, read) {\n  ngDevMode && assertNumber(flags, 'Expecting flags');\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);\n    if ((flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */) {\n      tView.staticViewQueries = true;\n    }\n  }\n  return createLQuery(tView, getLView(), flags);\n}\nfunction createContentQuery(directiveIndex, predicate, flags, read) {\n  ngDevMode && assertNumber(flags, 'Expecting flags');\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    const tNode = getCurrentTNode();\n    createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);\n    saveContentQueryAndDirectiveIndex(tView, directiveIndex);\n    if ((flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */) {\n      tView.staticContentQueries = true;\n    }\n  }\n  return createLQuery(tView, getLView(), flags);\n}\n/** Splits multiple selectors in the locator. */\nfunction splitQueryMultiSelectors(locator) {\n  return locator.split(',').map(s => s.trim());\n}\nfunction createTQuery(tView, metadata, nodeIndex) {\n  if (tView.queries === null) tView.queries = new TQueries_();\n  tView.queries.track(new TQuery_(metadata, nodeIndex));\n}\nfunction saveContentQueryAndDirectiveIndex(tView, directiveIndex) {\n  const tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);\n  const lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;\n  if (directiveIndex !== lastSavedDirectiveIndex) {\n    tViewContentQueries.push(tView.queries.length - 1, directiveIndex);\n  }\n}\nfunction getTQuery(tView, index) {\n  ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');\n  return tView.queries.getByIndex(index);\n}\n/**\n * A helper function collecting results from all the views where a given query was active.\n * @param lView\n * @param queryIndex\n */\nfunction getQueryResults(lView, queryIndex) {\n  const tView = lView[TVIEW];\n  const tQuery = getTQuery(tView, queryIndex);\n  return tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);\n}\n\n/**\n * Checks if the given `value` is a reactive `Signal`.\n */\nfunction isSignal(value) {\n  return typeof value === 'function' && value[SIGNAL$1] !== undefined;\n}\n\n/** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */\nconst ɵWRITABLE_SIGNAL = /* @__PURE__ */Symbol('WRITABLE_SIGNAL');\n/**\n * Utility function used during template type checking to extract the value from a `WritableSignal`.\n * @codeGenApi\n */\nfunction ɵunwrapWritableSignal(value) {\n  // Note: the function uses `WRITABLE_SIGNAL` as a brand instead of `WritableSignal<T>`,\n  // because the latter incorrectly unwraps non-signal getter functions.\n  return null;\n}\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction signal(initialValue, options) {\n  performanceMarkFeature('NgSignals');\n  const signalFn = createSignal$1(initialValue);\n  const node = signalFn[SIGNAL$1];\n  if (options?.equal) {\n    node.equal = options.equal;\n  }\n  signalFn.set = newValue => signalSetFn$1(node, newValue);\n  signalFn.update = updateFn => signalUpdateFn$1(node, updateFn);\n  signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);\n  if (ngDevMode) {\n    signalFn.toString = () => `[Signal: ${signalFn()}]`;\n    node.debugName = options?.debugName;\n  }\n  return signalFn;\n}\nfunction signalAsReadonlyFn() {\n  const node = this[SIGNAL$1];\n  if (node.readonlyFn === undefined) {\n    const readonlyFn = () => this();\n    readonlyFn[SIGNAL$1] = node;\n    node.readonlyFn = readonlyFn;\n  }\n  return node.readonlyFn;\n}\n/**\n * Checks if the given `value` is a writeable signal.\n */\nfunction isWritableSignal(value) {\n  return isSignal(value) && typeof value.set === 'function';\n}\n\n/**\n * A signal factory function in charge of creating a new computed signal capturing query\n * results. This centralized creation function is used by all types of queries (child / children,\n * required / optional).\n *\n * @param firstOnly indicates if all or only the first result should be returned\n * @param required indicates if at least one result is required\n * @returns a read-only signal with query results\n */\nfunction createQuerySignalFn(firstOnly, required, opts) {\n  let node;\n  const signalFn = createComputed$1(() => {\n    // A dedicated signal that increments its value every time a query changes its dirty status. By\n    // using this signal we can implement a query as computed and avoid creation of a specialized\n    // reactive node type. Please note that a query gets marked dirty under the following\n    // circumstances:\n    // - a view (where a query is active) finished its first creation pass;\n    // - a new view is inserted / deleted and it impacts query results.\n    node._dirtyCounter();\n    const value = refreshSignalQuery(node, firstOnly);\n    if (required && value === undefined) {\n      throw new RuntimeError(-951 /* RuntimeErrorCode.REQUIRED_QUERY_NO_VALUE */, ngDevMode && 'Child query result is required but no value is available.');\n    }\n    return value;\n  });\n  node = signalFn[SIGNAL$1];\n  node._dirtyCounter = signal(0);\n  node._flatValue = undefined;\n  if (ngDevMode) {\n    signalFn.toString = () => `[Query Signal]`;\n    node.debugName = opts?.debugName;\n  }\n  return signalFn;\n}\nfunction createSingleResultOptionalQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */true, /* required */false, opts);\n}\nfunction createSingleResultRequiredQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */true, /* required */true, opts);\n}\nfunction createMultiResultQuerySignalFn(opts) {\n  return createQuerySignalFn(/* firstOnly */false, /* required */false, opts);\n}\nfunction bindQueryToSignal(target, queryIndex) {\n  const node = target[SIGNAL$1];\n  node._lView = getLView();\n  node._queryIndex = queryIndex;\n  node._queryList = loadQueryInternal(node._lView, queryIndex);\n  node._queryList.onDirty(() => node._dirtyCounter.update(v => v + 1));\n}\nfunction refreshSignalQuery(node, firstOnly) {\n  const lView = node._lView;\n  const queryIndex = node._queryIndex;\n  // There are 2 conditions under which we want to return \"empty\" results instead of the ones\n  // collected by a query:\n  //\n  // 1) a given query wasn't created yet (this is a period of time between the directive creation\n  // and execution of the query creation function) - in this case a query doesn't exist yet and we\n  // don't have any results to return.\n  //\n  // 2) we are in the process of constructing a view (the first\n  // creation pass didn't finish) and a query might have partial results, but we don't want to\n  // return those - instead we do delay results collection until all nodes had a chance of matching\n  // and we can present consistent, \"atomic\" (on a view level) results.\n  if (lView === undefined || queryIndex === undefined || lView[FLAGS] & 4 /* LViewFlags.CreationMode */) {\n    return firstOnly ? undefined : EMPTY_ARRAY;\n  }\n  const queryList = loadQueryInternal(lView, queryIndex);\n  const results = getQueryResults(lView, queryIndex);\n  queryList.reset(results, unwrapElementRef);\n  if (firstOnly) {\n    return queryList.first;\n  } else {\n    // TODO: remove access to the private _changesDetected field by abstracting / removing usage of\n    // QueryList in the signal-based queries (perf follow-up)\n    const resultChanged = queryList._changesDetected;\n    if (resultChanged || node._flatValue === undefined) {\n      return node._flatValue = queryList.toArray();\n    }\n    return node._flatValue;\n  }\n}\nfunction viewChildFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChild);\n  return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction viewChildRequiredFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChild);\n  return createSingleResultRequiredQuerySignalFn(opts);\n}\n/**\n * Initializes a view child query.\n *\n * Consider using `viewChild.required` for queries that should always match.\n *\n * @usageNotes\n * Create a child query in your component by declaring a\n * class field and initializing it with the `viewChild()` function.\n *\n * ```angular-ts\n * @Component({template: '<div #el></div><my-component #cmp />'})\n * export class TestComponent {\n *   divEl = viewChild<ElementRef>('el');                   // Signal<ElementRef|undefined>\n *   divElRequired = viewChild.required<ElementRef>('el');  // Signal<ElementRef>\n *   cmp = viewChild(MyComponent);                          // Signal<MyComponent|undefined>\n *   cmpRequired = viewChild.required(MyComponent);         // Signal<MyComponent>\n * }\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst viewChild = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `viewChild` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `viewChild` export.\n  viewChildFn.required = viewChildRequiredFn;\n  return viewChildFn;\n})();\n/**\n * Initializes a view children query.\n *\n * Query results are represented as a signal of a read-only collection containing all matched\n * elements.\n *\n * @usageNotes\n * Create a children query in your component by declaring a\n * class field and initializing it with the `viewChildren()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   divEls = viewChildren<ElementRef>('el');   // Signal<ReadonlyArray<ElementRef>>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nfunction viewChildren(locator, opts) {\n  ngDevMode && assertInInjectionContext(viewChildren);\n  return createMultiResultQuerySignalFn(opts);\n}\nfunction contentChildFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(contentChild);\n  return createSingleResultOptionalQuerySignalFn(opts);\n}\nfunction contentChildRequiredFn(locator, opts) {\n  ngDevMode && assertInInjectionContext(contentChildren);\n  return createSingleResultRequiredQuerySignalFn(opts);\n}\n/**\n * Initializes a content child query. Consider using `contentChild.required` for queries that should\n * always match.\n *\n * @usageNotes\n * Create a child query in your component by declaring a\n * class field and initializing it with the `contentChild()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   headerEl = contentChild<ElementRef>('h');                    // Signal<ElementRef|undefined>\n *   headerElElRequired = contentChild.required<ElementRef>('h'); // Signal<ElementRef>\n *   header = contentChild(MyHeader);                             // Signal<MyHeader|undefined>\n *   headerRequired = contentChild.required(MyHeader);            // Signal<MyHeader>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nconst contentChild = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `viewChild` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `viewChild` export.\n  contentChildFn.required = contentChildRequiredFn;\n  return contentChildFn;\n})();\n/**\n * Initializes a content children query.\n *\n * Query results are represented as a signal of a read-only collection containing all matched\n * elements.\n *\n * @usageNotes\n * Create a children query in your component by declaring a\n * class field and initializing it with the `contentChildren()` function.\n *\n * ```ts\n * @Component({...})\n * export class TestComponent {\n *   headerEl = contentChildren<ElementRef>('h');   // Signal<ReadonlyArray<ElementRef>>\n * }\n * ```\n *\n * @initializerApiFunction\n * @publicAPI\n */\nfunction contentChildren(locator, opts) {\n  return createMultiResultQuerySignalFn(opts);\n}\n\n/**\n * Creates a model signal.\n *\n * @param initialValue The initial value.\n *   Can be set to {@link REQUIRED_UNSET_VALUE} for required model signals.\n * @param options Additional options for the model.\n */\nfunction createModelSignal(initialValue, opts) {\n  const node = Object.create(INPUT_SIGNAL_NODE);\n  const emitterRef = new OutputEmitterRef();\n  node.value = initialValue;\n  function getter() {\n    producerAccessed$1(node);\n    assertModelSet(node.value);\n    return node.value;\n  }\n  getter[SIGNAL$1] = node;\n  getter.asReadonly = signalAsReadonlyFn.bind(getter);\n  // TODO: Should we throw an error when updating a destroyed model?\n  getter.set = newValue => {\n    if (!node.equal(node.value, newValue)) {\n      signalSetFn$1(node, newValue);\n      emitterRef.emit(newValue);\n    }\n  };\n  getter.update = updateFn => {\n    assertModelSet(node.value);\n    getter.set(updateFn(node.value));\n  };\n  getter.subscribe = emitterRef.subscribe.bind(emitterRef);\n  getter.destroyRef = emitterRef.destroyRef;\n  if (ngDevMode) {\n    getter.toString = () => `[Model Signal: ${getter()}]`;\n    node.debugName = opts?.debugName;\n  }\n  return getter;\n}\n/** Asserts that a model's value is set. */\nfunction assertModelSet(value) {\n  if (value === REQUIRED_UNSET_VALUE) {\n    throw new RuntimeError(952 /* RuntimeErrorCode.REQUIRED_MODEL_NO_VALUE */, ngDevMode && 'Model is required but no value is available yet.');\n  }\n}\nfunction modelFunction(initialValue, opts) {\n  ngDevMode && assertInInjectionContext(model);\n  return createModelSignal(initialValue, opts);\n}\nfunction modelRequiredFunction(opts) {\n  ngDevMode && assertInInjectionContext(model);\n  return createModelSignal(REQUIRED_UNSET_VALUE, opts);\n}\n/**\n * `model` declares a writeable signal that is exposed as an input/output\n * pair on the containing directive.\n *\n * The input name is taken either from the class member or from the `alias` option.\n * The output name is generated by taking the input name and appending `Change`.\n *\n * @usageNotes\n *\n * To use `model()`, import the function from `@angular/core`.\n *\n * ```ts\n * import {model} from '@angular/core`;\n * ```\n *\n * Inside your component, introduce a new class member and initialize\n * it with a call to `model` or `model.required`.\n *\n * ```ts\n * @Directive({\n *   ...\n * })\n * export class MyDir {\n *   firstName = model<string>();            // ModelSignal<string|undefined>\n *   lastName  = model.required<string>();   // ModelSignal<string>\n *   age       = model(0);                   // ModelSignal<number>\n * }\n * ```\n *\n * Inside your component template, you can display the value of a `model`\n * by calling the signal.\n *\n * ```html\n * <span>{{firstName()}}</span>\n * ```\n *\n * Updating the `model` is equivalent to updating a writable signal.\n *\n * ```ts\n * updateName(newFirstName: string): void {\n *   this.firstName.set(newFirstName);\n * }\n * ```\n *\n * @publicAPI\n * @initializerApiFunction\n */\nconst model = (() => {\n  // Note: This may be considered a side-effect, but nothing will depend on\n  // this assignment, unless this `model` constant export is accessed. It's a\n  // self-contained side effect that is local to the user facing `model` export.\n  modelFunction.required = modelRequiredFunction;\n  return modelFunction;\n})();\n\n// Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not\n// explicitly set.\nconst emitDistinctChangesOnlyDefaultValue = true;\n/**\n * Base class for query metadata.\n *\n * @see {@link ContentChildren}\n * @see {@link ContentChild}\n * @see {@link ViewChildren}\n * @see {@link ViewChild}\n *\n * @publicApi\n */\nclass Query {}\n/**\n * ContentChildren decorator and metadata.\n *\n *\n * @Annotation\n * @publicApi\n */\nconst ContentChildren = makePropDecorator('ContentChildren', (selector, opts = {}) => ({\n  selector,\n  first: false,\n  isViewQuery: false,\n  descendants: false,\n  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n  ...opts\n}), Query);\n/**\n * ContentChild decorator and metadata.\n *\n *\n * @Annotation\n *\n * @publicApi\n */\nconst ContentChild = makePropDecorator('ContentChild', (selector, opts = {}) => ({\n  selector,\n  first: true,\n  isViewQuery: false,\n  descendants: true,\n  ...opts\n}), Query);\n/**\n * ViewChildren decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChildren = makePropDecorator('ViewChildren', (selector, opts = {}) => ({\n  selector,\n  first: false,\n  isViewQuery: true,\n  descendants: true,\n  emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue,\n  ...opts\n}), Query);\n/**\n * ViewChild decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChild = makePropDecorator('ViewChild', (selector, opts) => ({\n  selector,\n  first: true,\n  isViewQuery: true,\n  descendants: true,\n  ...opts\n}), Query);\n\n/**\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\n *\n * Example:\n * ```ts\n * @Component({\n *   selector: 'my-comp',\n *   templateUrl: 'my-comp.html', // This requires asynchronous resolution\n * })\n * class MyComponent{\n * }\n *\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\n *\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\n *\n * // Use browser's `fetch()` function as the default resource resolution strategy.\n * resolveComponentResources(fetch).then(() => {\n *   // After resolution all URLs have been converted into `template` strings.\n *   renderComponent(MyComponent);\n * });\n *\n * ```\n *\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\n * to call this method outside JIT mode.\n *\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\n */\nfunction resolveComponentResources(resourceResolver) {\n  // Store all promises which are fetching the resources.\n  const componentResolved = [];\n  // Cache so that we don't fetch the same resource more than once.\n  const urlMap = new Map();\n  function cachedResourceResolve(url) {\n    let promise = urlMap.get(url);\n    if (!promise) {\n      const resp = resourceResolver(url);\n      urlMap.set(url, promise = resp.then(unwrapResponse));\n    }\n    return promise;\n  }\n  componentResourceResolutionQueue.forEach((component, type) => {\n    const promises = [];\n    if (component.templateUrl) {\n      promises.push(cachedResourceResolve(component.templateUrl).then(template => {\n        component.template = template;\n      }));\n    }\n    const styles = typeof component.styles === 'string' ? [component.styles] : component.styles || [];\n    component.styles = styles;\n    if (component.styleUrl && component.styleUrls?.length) {\n      throw new Error('@Component cannot define both `styleUrl` and `styleUrls`. ' + 'Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple');\n    } else if (component.styleUrls?.length) {\n      const styleOffset = component.styles.length;\n      const styleUrls = component.styleUrls;\n      component.styleUrls.forEach((styleUrl, index) => {\n        styles.push(''); // pre-allocate array.\n        promises.push(cachedResourceResolve(styleUrl).then(style => {\n          styles[styleOffset + index] = style;\n          styleUrls.splice(styleUrls.indexOf(styleUrl), 1);\n          if (styleUrls.length == 0) {\n            component.styleUrls = undefined;\n          }\n        }));\n      });\n    } else if (component.styleUrl) {\n      promises.push(cachedResourceResolve(component.styleUrl).then(style => {\n        styles.push(style);\n        component.styleUrl = undefined;\n      }));\n    }\n    const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));\n    componentResolved.push(fullyResolved);\n  });\n  clearResolutionOfComponentResourcesQueue();\n  return Promise.all(componentResolved).then(() => undefined);\n}\nlet componentResourceResolutionQueue = new Map();\n// Track when existing ɵcmp for a Type is waiting on resources.\nconst componentDefPendingResolution = new Set();\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n  if (componentNeedsResolution(metadata)) {\n    componentResourceResolutionQueue.set(type, metadata);\n    componentDefPendingResolution.add(type);\n  }\n}\nfunction isComponentDefPendingResolution(type) {\n  return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n  return !!(component.templateUrl && !component.hasOwnProperty('template') || component.styleUrls && component.styleUrls.length || component.styleUrl);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n  const old = componentResourceResolutionQueue;\n  componentResourceResolutionQueue = new Map();\n  return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n  componentDefPendingResolution.clear();\n  queue.forEach((_, type) => componentDefPendingResolution.add(type));\n  componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n  return componentResourceResolutionQueue.size === 0;\n}\nfunction unwrapResponse(response) {\n  return typeof response == 'string' ? response : response.text();\n}\nfunction componentDefResolved(type) {\n  componentDefPendingResolution.delete(type);\n}\n\n/**\n * Map of module-id to the corresponding NgModule.\n */\nconst modules = new Map();\n/**\n * Whether to check for duplicate NgModule registrations.\n *\n * This can be disabled for testing.\n */\nlet checkForDuplicateNgModules = true;\nfunction assertSameOrNotExisting(id, type, incoming) {\n  if (type && type !== incoming && checkForDuplicateNgModules) {\n    throw new Error(`Duplicate module registered for ${id} - ${stringify(type)} vs ${stringify(type.name)}`);\n  }\n}\n/**\n * Adds the given NgModule type to Angular's NgModule registry.\n *\n * This is generated as a side-effect of NgModule compilation. Note that the `id` is passed in\n * explicitly and not read from the NgModule definition. This is for two reasons: it avoids a\n * megamorphic read, and in JIT there's a chicken-and-egg problem where the NgModule may not be\n * fully resolved when it's registered.\n *\n * @codeGenApi\n */\nfunction registerNgModuleType(ngModuleType, id) {\n  const existing = modules.get(id) || null;\n  assertSameOrNotExisting(id, existing, ngModuleType);\n  modules.set(id, ngModuleType);\n}\nfunction clearModulesForTest() {\n  modules.clear();\n}\nfunction getRegisteredNgModuleType(id) {\n  return modules.get(id);\n}\n/**\n * Control whether the NgModule registration system enforces that each NgModule type registered has\n * a unique id.\n *\n * This is useful for testing as the NgModule registry cannot be properly reset between tests with\n * Angular's current API.\n */\nfunction setAllowDuplicateNgModuleIdsForTest(allowDuplicates) {\n  checkForDuplicateNgModules = !allowDuplicates;\n}\n\n/**\n * Validation function invoked at runtime for each binding that might potentially\n * represent a security-sensitive attribute of an <iframe>.\n * See `IFRAME_SECURITY_SENSITIVE_ATTRS` in the\n * `packages/compiler/src/schema/dom_security_schema.ts` script for the full list\n * of such attributes.\n *\n * @codeGenApi\n */\nfunction ɵɵvalidateIframeAttribute(attrValue, tagName, attrName) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  const element = getNativeByTNode(tNode, lView);\n  // Restrict any dynamic bindings of security-sensitive attributes/properties\n  // on an <iframe> for security reasons.\n  if (tNode.type === 2 /* TNodeType.Element */ && tagName.toLowerCase() === 'iframe') {\n    const iframe = element;\n    // Unset previously applied `src` and `srcdoc` if we come across a situation when\n    // a security-sensitive attribute is set later via an attribute/property binding.\n    iframe.src = '';\n    iframe.srcdoc = trustedHTMLFromString('');\n    // Also remove the <iframe> from the document.\n    nativeRemoveNode(lView[RENDERER], iframe);\n    const errorMessage = ngDevMode && `Angular has detected that the \\`${attrName}\\` was applied ` + `as a binding to an <iframe>${getTemplateLocationDetails(lView)}. ` + `For security reasons, the \\`${attrName}\\` can be set on an <iframe> ` + `as a static attribute only. \\n` + `To fix this, switch the \\`${attrName}\\` binding to a static attribute ` + `in a template or in host bindings section.`;\n    throw new RuntimeError(-910 /* RuntimeErrorCode.UNSAFE_IFRAME_ATTRS */, errorMessage);\n  }\n  return attrValue;\n}\n\n/**\n * Represents an instance of an `NgModule` created by an `NgModuleFactory`.\n * Provides access to the `NgModule` instance and related objects.\n *\n * @publicApi\n */\nclass NgModuleRef$1 {}\n/**\n * @publicApi\n *\n * @deprecated\n * This class was mostly used as a part of ViewEngine-based JIT API and is no longer needed in Ivy\n * JIT mode. Angular provides APIs that accept NgModule classes directly (such as\n * [PlatformRef.bootstrapModule](api/core/PlatformRef#bootstrapModule) and\n * [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of\n * using factory-based ones.\n */\nclass NgModuleFactory$1 {}\n\n/**\n * Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.\n *\n * @param ngModule NgModule class.\n * @param parentInjector Optional injector instance to use as a parent for the module injector. If\n *     not provided, `NullInjector` will be used instead.\n * @returns NgModuleRef that represents an NgModule instance.\n *\n * @publicApi\n */\nfunction createNgModule(ngModule, parentInjector) {\n  return new NgModuleRef(ngModule, parentInjector ?? null, []);\n}\n/**\n * The `createNgModule` function alias for backwards-compatibility.\n * Please avoid using it directly and use `createNgModule` instead.\n *\n * @deprecated Use `createNgModule` instead.\n */\nconst createNgModuleRef = createNgModule;\nclass NgModuleRef extends NgModuleRef$1 {\n  ngModuleType;\n  _parent;\n  // tslint:disable-next-line:require-internal-with-underscore\n  _bootstrapComponents = [];\n  // tslint:disable-next-line:require-internal-with-underscore\n  _r3Injector;\n  instance;\n  destroyCbs = [];\n  // When bootstrapping a module we have a dependency graph that looks like this:\n  // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the\n  // module being resolved tries to inject the ComponentFactoryResolver, it'll create a\n  // circular dependency which will result in a runtime error, because the injector doesn't\n  // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves\n  // and providing it, rather than letting the injector resolve it.\n  componentFactoryResolver = new ComponentFactoryResolver(this);\n  constructor(ngModuleType, _parent, additionalProviders, runInjectorInitializers = true) {\n    super();\n    this.ngModuleType = ngModuleType;\n    this._parent = _parent;\n    const ngModuleDef = getNgModuleDef(ngModuleType);\n    ngDevMode && assertDefined(ngModuleDef, `NgModule '${stringify(ngModuleType)}' is not a subtype of 'NgModuleType'.`);\n    this._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);\n    this._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{\n      provide: NgModuleRef$1,\n      useValue: this\n    }, {\n      provide: ComponentFactoryResolver$1,\n      useValue: this.componentFactoryResolver\n    }, ...additionalProviders], stringify(ngModuleType), new Set(['environment']));\n    // We need to resolve the injector types separately from the injector creation, because\n    // the module might be trying to use this ref in its constructor for DI which will cause a\n    // circular error that will eventually error out, because the injector isn't created yet.\n    if (runInjectorInitializers) {\n      this.resolveInjectorInitializers();\n    }\n  }\n  resolveInjectorInitializers() {\n    this._r3Injector.resolveInjectorInitializers();\n    this.instance = this._r3Injector.get(this.ngModuleType);\n  }\n  get injector() {\n    return this._r3Injector;\n  }\n  destroy() {\n    ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n    const injector = this._r3Injector;\n    !injector.destroyed && injector.destroy();\n    this.destroyCbs.forEach(fn => fn());\n    this.destroyCbs = null;\n  }\n  onDestroy(callback) {\n    ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');\n    this.destroyCbs.push(callback);\n  }\n}\nclass NgModuleFactory extends NgModuleFactory$1 {\n  moduleType;\n  constructor(moduleType) {\n    super();\n    this.moduleType = moduleType;\n  }\n  create(parentInjector) {\n    return new NgModuleRef(this.moduleType, parentInjector, []);\n  }\n}\nfunction createNgModuleRefWithProviders(moduleType, parentInjector, additionalProviders) {\n  return new NgModuleRef(moduleType, parentInjector, additionalProviders, false);\n}\nclass EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {\n  injector;\n  componentFactoryResolver = new ComponentFactoryResolver(this);\n  instance = null;\n  constructor(config) {\n    super();\n    const injector = new R3Injector([...config.providers, {\n      provide: NgModuleRef$1,\n      useValue: this\n    }, {\n      provide: ComponentFactoryResolver$1,\n      useValue: this.componentFactoryResolver\n    }], config.parent || getNullInjector(), config.debugName, new Set(['environment']));\n    this.injector = injector;\n    if (config.runEnvironmentInitializers) {\n      injector.resolveInjectorInitializers();\n    }\n  }\n  destroy() {\n    this.injector.destroy();\n  }\n  onDestroy(callback) {\n    this.injector.onDestroy(callback);\n  }\n}\n/**\n * Create a new environment injector.\n *\n * @param providers An array of providers.\n * @param parent A parent environment injector.\n * @param debugName An optional name for this injector instance, which will be used in error\n *     messages.\n *\n * @publicApi\n */\nfunction createEnvironmentInjector(providers, parent, debugName = null) {\n  const adapter = new EnvironmentNgModuleRefAdapter({\n    providers,\n    parent,\n    debugName,\n    runEnvironmentInitializers: true\n  });\n  return adapter.injector;\n}\n\n/**\n * A service used by the framework to create instances of standalone injectors. Those injectors are\n * created on demand in case of dynamic component instantiation and contain ambient providers\n * collected from the imports graph rooted at a given standalone component.\n */\nclass StandaloneService {\n  _injector;\n  cachedInjectors = new Map();\n  constructor(_injector) {\n    this._injector = _injector;\n  }\n  getOrCreateStandaloneInjector(componentDef) {\n    if (!componentDef.standalone) {\n      return null;\n    }\n    if (!this.cachedInjectors.has(componentDef)) {\n      const providers = internalImportProvidersFrom(false, componentDef.type);\n      const standaloneInjector = providers.length > 0 ? createEnvironmentInjector([providers], this._injector, `Standalone[${componentDef.type.name}]`) : null;\n      this.cachedInjectors.set(componentDef, standaloneInjector);\n    }\n    return this.cachedInjectors.get(componentDef);\n  }\n  ngOnDestroy() {\n    try {\n      for (const injector of this.cachedInjectors.values()) {\n        if (injector !== null) {\n          injector.destroy();\n        }\n      }\n    } finally {\n      this.cachedInjectors.clear();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: StandaloneService,\n    providedIn: 'environment',\n    factory: () => new StandaloneService(ɵɵinject(EnvironmentInjector))\n  });\n}\n\n/**\n * Create a component definition object.\n *\n *\n * # Example\n * ```ts\n * class MyComponent {\n *   // Generated by Angular Template Compiler\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\n *   static ɵcmp = defineComponent({\n *     ...\n *   });\n * }\n * ```\n * @codeGenApi\n */\nfunction ɵɵdefineComponent(componentDefinition) {\n  return noSideEffects(() => {\n    // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.\n    // See the `initNgDevMode` docstring for more information.\n    (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n    const baseDef = getNgDirectiveDef(componentDefinition);\n    const def = {\n      ...baseDef,\n      decls: componentDefinition.decls,\n      vars: componentDefinition.vars,\n      template: componentDefinition.template,\n      consts: componentDefinition.consts || null,\n      ngContentSelectors: componentDefinition.ngContentSelectors,\n      onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n      directiveDefs: null,\n      // assigned in noSideEffects\n      pipeDefs: null,\n      // assigned in noSideEffects\n      dependencies: baseDef.standalone && componentDefinition.dependencies || null,\n      getStandaloneInjector: baseDef.standalone ? parentInjector => {\n        return parentInjector.get(StandaloneService).getOrCreateStandaloneInjector(def);\n      } : null,\n      getExternalStyles: null,\n      signals: componentDefinition.signals ?? false,\n      data: componentDefinition.data || {},\n      encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,\n      styles: componentDefinition.styles || EMPTY_ARRAY,\n      _: null,\n      schemas: componentDefinition.schemas || null,\n      tView: null,\n      id: ''\n    };\n    // TODO: Do we still need/want this ?\n    if (baseDef.standalone) {\n      performanceMarkFeature('NgStandalone');\n    }\n    initFeatures(def);\n    const dependencies = componentDefinition.dependencies;\n    def.directiveDefs = extractDefListOrFactory(dependencies, /* pipeDef */false);\n    def.pipeDefs = extractDefListOrFactory(dependencies, /* pipeDef */true);\n    def.id = getComponentId(def);\n    return def;\n  });\n}\nfunction extractDirectiveDef(type) {\n  return getComponentDef(type) || getDirectiveDef(type);\n}\nfunction nonNull(value) {\n  return value !== null;\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵdefineNgModule(def) {\n  return noSideEffects(() => {\n    const res = {\n      type: def.type,\n      bootstrap: def.bootstrap || EMPTY_ARRAY,\n      declarations: def.declarations || EMPTY_ARRAY,\n      imports: def.imports || EMPTY_ARRAY,\n      exports: def.exports || EMPTY_ARRAY,\n      transitiveCompileScopes: null,\n      schemas: def.schemas || null,\n      id: def.id || null\n    };\n    return res;\n  });\n}\nfunction parseAndConvertBindingsForDefinition(obj, declaredInputs) {\n  if (obj == null) return EMPTY_OBJ;\n  const newLookup = {};\n  for (const minifiedKey in obj) {\n    if (obj.hasOwnProperty(minifiedKey)) {\n      const value = obj[minifiedKey];\n      let publicName;\n      let declaredName;\n      let inputFlags = InputFlags.None;\n      if (Array.isArray(value)) {\n        inputFlags = value[0];\n        publicName = value[1];\n        declaredName = value[2] ?? publicName; // declared name might not be set to save bytes.\n      } else {\n        publicName = value;\n        declaredName = value;\n      }\n      // For inputs, capture the declared name, or if some flags are set.\n      if (declaredInputs) {\n        // Perf note: An array is only allocated for the input if there are flags.\n        newLookup[publicName] = inputFlags !== InputFlags.None ? [minifiedKey, inputFlags] : minifiedKey;\n        declaredInputs[publicName] = declaredName;\n      } else {\n        newLookup[publicName] = minifiedKey;\n      }\n    }\n  }\n  return newLookup;\n}\n/**\n * Create a directive definition object.\n *\n * # Example\n * ```ts\n * class MyDirective {\n *   // Generated by Angular Template Compiler\n *   // [Symbol] syntax will not be supported by TypeScript until v2.7\n *   static ɵdir = ɵɵdefineDirective({\n *     ...\n *   });\n * }\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdefineDirective(directiveDefinition) {\n  return noSideEffects(() => {\n    const def = getNgDirectiveDef(directiveDefinition);\n    initFeatures(def);\n    return def;\n  });\n}\n/**\n * Create a pipe definition object.\n *\n * # Example\n * ```ts\n * class MyPipe implements PipeTransform {\n *   // Generated by Angular Template Compiler\n *   static ɵpipe = definePipe({\n *     ...\n *   });\n * }\n * ```\n * @param pipeDef Pipe definition generated by the compiler\n *\n * @codeGenApi\n */\nfunction ɵɵdefinePipe(pipeDef) {\n  return {\n    type: pipeDef.type,\n    name: pipeDef.name,\n    factory: null,\n    pure: pipeDef.pure !== false,\n    standalone: pipeDef.standalone ?? true,\n    onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n  };\n}\nfunction getNgDirectiveDef(directiveDefinition) {\n  const declaredInputs = {};\n  return {\n    type: directiveDefinition.type,\n    providersResolver: null,\n    factory: null,\n    hostBindings: directiveDefinition.hostBindings || null,\n    hostVars: directiveDefinition.hostVars || 0,\n    hostAttrs: directiveDefinition.hostAttrs || null,\n    contentQueries: directiveDefinition.contentQueries || null,\n    declaredInputs: declaredInputs,\n    inputTransforms: null,\n    inputConfig: directiveDefinition.inputs || EMPTY_OBJ,\n    exportAs: directiveDefinition.exportAs || null,\n    standalone: directiveDefinition.standalone ?? true,\n    signals: directiveDefinition.signals === true,\n    selectors: directiveDefinition.selectors || EMPTY_ARRAY,\n    viewQuery: directiveDefinition.viewQuery || null,\n    features: directiveDefinition.features || null,\n    setInput: null,\n    findHostDirectiveDefs: null,\n    hostDirectives: null,\n    inputs: parseAndConvertBindingsForDefinition(directiveDefinition.inputs, declaredInputs),\n    outputs: parseAndConvertBindingsForDefinition(directiveDefinition.outputs),\n    debugInfo: null\n  };\n}\nfunction initFeatures(definition) {\n  definition.features?.forEach(fn => fn(definition));\n}\nfunction extractDefListOrFactory(dependencies, pipeDef) {\n  if (!dependencies) {\n    return null;\n  }\n  const defExtractor = pipeDef ? getPipeDef$1 : extractDirectiveDef;\n  return () => (typeof dependencies === 'function' ? dependencies() : dependencies).map(dep => defExtractor(dep)).filter(nonNull);\n}\n/**\n * A map that contains the generated component IDs and type.\n */\nconst GENERATED_COMP_IDS = new Map();\n/**\n * A method can returns a component ID from the component definition using a variant of DJB2 hash\n * algorithm.\n */\nfunction getComponentId(componentDef) {\n  let hash = 0;\n  // For components with i18n in templates, the `consts` array is generated by the compiler\n  // as a function. If client and server bundles were produced with different minification\n  // configurations, the serializable contents of the function body would be different on\n  // the client and on the server. This might result in different ids generated. To avoid this\n  // issue, we do not take the `consts` contents into account if it's a function.\n  // See https://github.com/angular/angular/issues/58713.\n  const componentDefConsts = typeof componentDef.consts === 'function' ? '' : componentDef.consts;\n  // We cannot rely solely on the component selector as the same selector can be used in different\n  // modules.\n  //\n  // `componentDef.style` is not used, due to it causing inconsistencies. Ex: when server\n  // component styles has no sourcemaps and browsers do.\n  //\n  // Example:\n  // https://github.com/angular/components/blob/d9f82c8f95309e77a6d82fd574c65871e91354c2/src/material/core/option/option.ts#L248\n  // https://github.com/angular/components/blob/285f46dc2b4c5b127d356cb7c4714b221f03ce50/src/material/legacy-core/option/option.ts#L32\n  const hashSelectors = [componentDef.selectors, componentDef.ngContentSelectors, componentDef.hostVars, componentDef.hostAttrs, componentDefConsts, componentDef.vars, componentDef.decls, componentDef.encapsulation, componentDef.standalone, componentDef.signals, componentDef.exportAs, JSON.stringify(componentDef.inputs), JSON.stringify(componentDef.outputs),\n  // We cannot use 'componentDef.type.name' as the name of the symbol will change and will not\n  // match in the server and browser bundles.\n  Object.getOwnPropertyNames(componentDef.type.prototype), !!componentDef.contentQueries, !!componentDef.viewQuery];\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // If client and server bundles were produced with different minification configurations,\n    // the serializable contents of the function body would be different on the client and on\n    // the server. Ensure that we do not accidentally use functions in component id computation.\n    for (const item of hashSelectors) {\n      assertNotEqual(typeof item, 'function', 'Internal error: attempting to use a function in component id computation logic.');\n    }\n  }\n  for (const char of hashSelectors.join('|')) {\n    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n  }\n  // Force positive number hash.\n  // 2147483647 = equivalent of Integer.MAX_VALUE.\n  hash += 2147483647 + 1;\n  const compId = 'c' + hash;\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (GENERATED_COMP_IDS.has(compId)) {\n      const previousCompDefType = GENERATED_COMP_IDS.get(compId);\n      if (previousCompDefType !== componentDef.type) {\n        console.warn(formatRuntimeError(-912 /* RuntimeErrorCode.COMPONENT_ID_COLLISION */, `Component ID generation collision detected. Components '${previousCompDefType.name}' and '${componentDef.type.name}' with selector '${stringifyCSSSelectorList(componentDef.selectors)}' generated the same component ID. To fix this, you can change the selector of one of those components or add an extra host attribute to force a different ID.`));\n      }\n    } else {\n      GENERATED_COMP_IDS.set(compId, componentDef.type);\n    }\n  }\n  return compId;\n}\nfunction getSuperType(type) {\n  return Object.getPrototypeOf(type.prototype).constructor;\n}\n/**\n * Merges the definition from a super class to a sub class.\n * @param definition The definition that is a SubClass of another directive of component\n *\n * @codeGenApi\n */\nfunction ɵɵInheritDefinitionFeature(definition) {\n  let superType = getSuperType(definition.type);\n  let shouldInheritFields = true;\n  const inheritanceChain = [definition];\n  while (superType) {\n    let superDef = undefined;\n    if (isComponentDef(definition)) {\n      // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n      superDef = superType.ɵcmp || superType.ɵdir;\n    } else {\n      if (superType.ɵcmp) {\n        throw new RuntimeError(903 /* RuntimeErrorCode.INVALID_INHERITANCE */, ngDevMode && `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}`);\n      }\n      // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n      superDef = superType.ɵdir;\n    }\n    if (superDef) {\n      if (shouldInheritFields) {\n        inheritanceChain.push(superDef);\n        // Some fields in the definition may be empty, if there were no values to put in them that\n        // would've justified object creation. Unwrap them if necessary.\n        const writeableDef = definition;\n        writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);\n        writeableDef.inputTransforms = maybeUnwrapEmpty(definition.inputTransforms);\n        writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);\n        writeableDef.outputs = maybeUnwrapEmpty(definition.outputs);\n        // Merge hostBindings\n        const superHostBindings = superDef.hostBindings;\n        superHostBindings && inheritHostBindings(definition, superHostBindings);\n        // Merge queries\n        const superViewQuery = superDef.viewQuery;\n        const superContentQueries = superDef.contentQueries;\n        superViewQuery && inheritViewQuery(definition, superViewQuery);\n        superContentQueries && inheritContentQueries(definition, superContentQueries);\n        // Merge inputs and outputs\n        mergeInputsWithTransforms(definition, superDef);\n        fillProperties(definition.outputs, superDef.outputs);\n        // Merge animations metadata.\n        // If `superDef` is a Component, the `data` field is present (defaults to an empty object).\n        if (isComponentDef(superDef) && superDef.data.animation) {\n          // If super def is a Component, the `definition` is also a Component, since Directives can\n          // not inherit Components (we throw an error above and cannot reach this code).\n          const defData = definition.data;\n          defData.animation = (defData.animation || []).concat(superDef.data.animation);\n        }\n      }\n      // Run parent features\n      const features = superDef.features;\n      if (features) {\n        for (let i = 0; i < features.length; i++) {\n          const feature = features[i];\n          if (feature && feature.ngInherit) {\n            feature(definition);\n          }\n          // If `InheritDefinitionFeature` is a part of the current `superDef`, it means that this\n          // def already has all the necessary information inherited from its super class(es), so we\n          // can stop merging fields from super classes. However we need to iterate through the\n          // prototype chain to look for classes that might contain other \"features\" (like\n          // NgOnChanges), which we should invoke for the original `definition`. We set the\n          // `shouldInheritFields` flag to indicate that, essentially skipping fields inheritance\n          // logic and only invoking functions from the \"features\" list.\n          if (feature === ɵɵInheritDefinitionFeature) {\n            shouldInheritFields = false;\n          }\n        }\n      }\n    }\n    superType = Object.getPrototypeOf(superType);\n  }\n  mergeHostAttrsAcrossInheritance(inheritanceChain);\n}\nfunction mergeInputsWithTransforms(target, source) {\n  for (const key in source.inputs) {\n    if (!source.inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    if (target.inputs.hasOwnProperty(key)) {\n      continue;\n    }\n    const value = source.inputs[key];\n    if (value === undefined) {\n      continue;\n    }\n    target.inputs[key] = value;\n    target.declaredInputs[key] = source.declaredInputs[key];\n    // If the input is inherited, and we have a transform for it, we also inherit it.\n    // Note that transforms should not be inherited if the input has its own metadata\n    // in the `source` directive itself already (i.e. the input is re-declared/overridden).\n    if (source.inputTransforms !== null) {\n      // Note: transforms are stored with their minified names.\n      // Perf: only access the minified name when there are source transforms.\n      const minifiedName = Array.isArray(value) ? value[0] : value;\n      if (!source.inputTransforms.hasOwnProperty(minifiedName)) {\n        continue;\n      }\n      target.inputTransforms ??= {};\n      target.inputTransforms[minifiedName] = source.inputTransforms[minifiedName];\n    }\n  }\n}\n/**\n * Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.\n *\n * @param inheritanceChain A list of `WritableDefs` starting at the top most type and listing\n * sub-types in order. For each type take the `hostAttrs` and `hostVars` and merge it with the child\n * type.\n */\nfunction mergeHostAttrsAcrossInheritance(inheritanceChain) {\n  let hostVars = 0;\n  let hostAttrs = null;\n  // We process the inheritance order from the base to the leaves here.\n  for (let i = inheritanceChain.length - 1; i >= 0; i--) {\n    const def = inheritanceChain[i];\n    // For each `hostVars`, we need to add the superclass amount.\n    def.hostVars = hostVars += def.hostVars;\n    // for each `hostAttrs` we need to merge it with superclass.\n    def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));\n  }\n}\nfunction maybeUnwrapEmpty(value) {\n  if (value === EMPTY_OBJ) {\n    return {};\n  } else if (value === EMPTY_ARRAY) {\n    return [];\n  } else {\n    return value;\n  }\n}\nfunction inheritViewQuery(definition, superViewQuery) {\n  const prevViewQuery = definition.viewQuery;\n  if (prevViewQuery) {\n    definition.viewQuery = (rf, ctx) => {\n      superViewQuery(rf, ctx);\n      prevViewQuery(rf, ctx);\n    };\n  } else {\n    definition.viewQuery = superViewQuery;\n  }\n}\nfunction inheritContentQueries(definition, superContentQueries) {\n  const prevContentQueries = definition.contentQueries;\n  if (prevContentQueries) {\n    definition.contentQueries = (rf, ctx, directiveIndex) => {\n      superContentQueries(rf, ctx, directiveIndex);\n      prevContentQueries(rf, ctx, directiveIndex);\n    };\n  } else {\n    definition.contentQueries = superContentQueries;\n  }\n}\nfunction inheritHostBindings(definition, superHostBindings) {\n  const prevHostBindings = definition.hostBindings;\n  if (prevHostBindings) {\n    definition.hostBindings = (rf, ctx) => {\n      superHostBindings(rf, ctx);\n      prevHostBindings(rf, ctx);\n    };\n  } else {\n    definition.hostBindings = superHostBindings;\n  }\n}\n\n/**\n * Fields which exist on either directive or component definitions, and need to be copied from\n * parent to child classes by the `ɵɵCopyDefinitionFeature`.\n */\nconst COPY_DIRECTIVE_FIELDS = [\n// The child class should use the providers of its parent.\n'providersResolver'\n// Not listed here are any fields which are handled by the `ɵɵInheritDefinitionFeature`, such\n// as inputs, outputs, and host binding functions.\n];\n/**\n * Fields which exist only on component definitions, and need to be copied from parent to child\n * classes by the `ɵɵCopyDefinitionFeature`.\n *\n * The type here allows any field of `ComponentDef` which is not also a property of `DirectiveDef`,\n * since those should go in `COPY_DIRECTIVE_FIELDS` above.\n */\nconst COPY_COMPONENT_FIELDS = [\n// The child class should use the template function of its parent, including all template\n// semantics.\n'template', 'decls', 'consts', 'vars', 'onPush', 'ngContentSelectors',\n// The child class should use the CSS styles of its parent, including all styling semantics.\n'styles', 'encapsulation',\n// The child class should be checked by the runtime in the same way as its parent.\n'schemas'];\n/**\n * Copies the fields not handled by the `ɵɵInheritDefinitionFeature` from the supertype of a\n * definition.\n *\n * This exists primarily to support ngcc migration of an existing View Engine pattern, where an\n * entire decorator is inherited from a parent to a child class. When ngcc detects this case, it\n * generates a skeleton definition on the child class, and applies this feature.\n *\n * The `ɵɵCopyDefinitionFeature` then copies any needed fields from the parent class' definition,\n * including things like the component template function.\n *\n * @param definition The definition of a child class which inherits from a parent class with its\n * own definition.\n *\n * @codeGenApi\n */\nfunction ɵɵCopyDefinitionFeature(definition) {\n  let superType = getSuperType(definition.type);\n  let superDef = undefined;\n  if (isComponentDef(definition)) {\n    // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n    superDef = superType.ɵcmp;\n  } else {\n    // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.\n    superDef = superType.ɵdir;\n  }\n  // Needed because `definition` fields are readonly.\n  const defAny = definition;\n  // Copy over any fields that apply to either directives or components.\n  for (const field of COPY_DIRECTIVE_FIELDS) {\n    defAny[field] = superDef[field];\n  }\n  if (isComponentDef(superDef)) {\n    // Copy over any component-specific fields.\n    for (const field of COPY_COMPONENT_FIELDS) {\n      defAny[field] = superDef[field];\n    }\n  }\n}\n\n/**\n * This feature adds the host directives behavior to a directive definition by patching a\n * function onto it. The expectation is that the runtime will invoke the function during\n * directive matching.\n *\n * For example:\n * ```ts\n * class ComponentWithHostDirective {\n *   static ɵcmp = defineComponent({\n *    type: ComponentWithHostDirective,\n *    features: [ɵɵHostDirectivesFeature([\n *      SimpleHostDirective,\n *      {directive: AdvancedHostDirective, inputs: ['foo: alias'], outputs: ['bar']},\n *    ])]\n *  });\n * }\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵHostDirectivesFeature(rawHostDirectives) {\n  const feature = definition => {\n    const isEager = Array.isArray(rawHostDirectives);\n    if (definition.hostDirectives === null) {\n      definition.findHostDirectiveDefs = findHostDirectiveDefs;\n      definition.hostDirectives = isEager ? rawHostDirectives.map(createHostDirectiveDef) : [rawHostDirectives];\n    } else if (isEager) {\n      definition.hostDirectives.unshift(...rawHostDirectives.map(createHostDirectiveDef));\n    } else {\n      definition.hostDirectives.unshift(rawHostDirectives);\n    }\n  };\n  feature.ngInherit = true;\n  return feature;\n}\nfunction findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {\n  if (currentDef.hostDirectives !== null) {\n    for (const configOrFn of currentDef.hostDirectives) {\n      if (typeof configOrFn === 'function') {\n        const resolved = configOrFn();\n        for (const config of resolved) {\n          trackHostDirectiveDef(createHostDirectiveDef(config), matchedDefs, hostDirectiveDefs);\n        }\n      } else {\n        trackHostDirectiveDef(configOrFn, matchedDefs, hostDirectiveDefs);\n      }\n    }\n  }\n}\n/** Tracks a single host directive during directive matching. */\nfunction trackHostDirectiveDef(def, matchedDefs, hostDirectiveDefs) {\n  const hostDirectiveDef = getDirectiveDef(def.directive);\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    validateHostDirective(def, hostDirectiveDef);\n  }\n  // We need to patch the `declaredInputs` so that\n  // `ngOnChanges` can map the properties correctly.\n  patchDeclaredInputs(hostDirectiveDef.declaredInputs, def.inputs);\n  // Host directives execute before the host so that its host bindings can be overwritten.\n  findHostDirectiveDefs(hostDirectiveDef, matchedDefs, hostDirectiveDefs);\n  hostDirectiveDefs.set(hostDirectiveDef, def);\n  matchedDefs.push(hostDirectiveDef);\n}\n/** Creates a `HostDirectiveDef` from a used-defined host directive configuration. */\nfunction createHostDirectiveDef(config) {\n  return typeof config === 'function' ? {\n    directive: resolveForwardRef(config),\n    inputs: EMPTY_OBJ,\n    outputs: EMPTY_OBJ\n  } : {\n    directive: resolveForwardRef(config.directive),\n    inputs: bindingArrayToMap(config.inputs),\n    outputs: bindingArrayToMap(config.outputs)\n  };\n}\n/**\n * Converts an array in the form of `['publicName', 'alias', 'otherPublicName', 'otherAlias']` into\n * a map in the form of `{publicName: 'alias', otherPublicName: 'otherAlias'}`.\n */\nfunction bindingArrayToMap(bindings) {\n  if (bindings === undefined || bindings.length === 0) {\n    return EMPTY_OBJ;\n  }\n  const result = {};\n  for (let i = 0; i < bindings.length; i += 2) {\n    result[bindings[i]] = bindings[i + 1];\n  }\n  return result;\n}\n/**\n * `ngOnChanges` has some leftover legacy ViewEngine behavior where the keys inside the\n * `SimpleChanges` event refer to the *declared* name of the input, not its public name or its\n * minified name. E.g. in `@Input('alias') foo: string`, the name in the `SimpleChanges` object\n * will always be `foo`, and not `alias` or the minified name of `foo` in apps using property\n * minification.\n *\n * This is achieved through the `DirectiveDef.declaredInputs` map that is constructed when the\n * definition is declared. When a property is written to the directive instance, the\n * `NgOnChangesFeature` will try to remap the property name being written to using the\n * `declaredInputs`.\n *\n * Since the host directive input remapping happens during directive matching, `declaredInputs`\n * won't contain the new alias that the input is available under. This function addresses the\n * issue by patching the host directive aliases to the `declaredInputs`. There is *not* a risk of\n * this patching accidentally introducing new inputs to the host directive, because `declaredInputs`\n * is used *only* by the `NgOnChangesFeature` when determining what name is used in the\n * `SimpleChanges` object which won't be reached if an input doesn't exist.\n */\nfunction patchDeclaredInputs(declaredInputs, exposedInputs) {\n  for (const publicName in exposedInputs) {\n    if (exposedInputs.hasOwnProperty(publicName)) {\n      const remappedPublicName = exposedInputs[publicName];\n      const privateName = declaredInputs[publicName];\n      // We *technically* shouldn't be able to hit this case because we can't have multiple\n      // inputs on the same property and we have validations against conflicting aliases in\n      // `validateMappings`. If we somehow did, it would lead to `ngOnChanges` being invoked\n      // with the wrong name so we have a non-user-friendly assertion here just in case.\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && declaredInputs.hasOwnProperty(remappedPublicName)) {\n        assertEqual(declaredInputs[remappedPublicName], declaredInputs[publicName], `Conflicting host directive input alias ${publicName}.`);\n      }\n      declaredInputs[remappedPublicName] = privateName;\n    }\n  }\n}\n/**\n * Verifies that the host directive has been configured correctly.\n * @param hostDirectiveConfig Host directive configuration object.\n * @param directiveDef Directive definition of the host directive.\n */\nfunction validateHostDirective(hostDirectiveConfig, directiveDef) {\n  const type = hostDirectiveConfig.directive;\n  if (directiveDef === null) {\n    if (getComponentDef(type) !== null) {\n      throw new RuntimeError(310 /* RuntimeErrorCode.HOST_DIRECTIVE_COMPONENT */, `Host directive ${type.name} cannot be a component.`);\n    }\n    throw new RuntimeError(307 /* RuntimeErrorCode.HOST_DIRECTIVE_UNRESOLVABLE */, `Could not resolve metadata for host directive ${type.name}. ` + `Make sure that the ${type.name} class is annotated with an @Directive decorator.`);\n  }\n  if (!directiveDef.standalone) {\n    throw new RuntimeError(308 /* RuntimeErrorCode.HOST_DIRECTIVE_NOT_STANDALONE */, `Host directive ${directiveDef.type.name} must be standalone.`);\n  }\n  validateMappings('input', directiveDef, hostDirectiveConfig.inputs);\n  validateMappings('output', directiveDef, hostDirectiveConfig.outputs);\n}\n/**\n * Checks that the host directive inputs/outputs configuration is valid.\n * @param bindingType Kind of binding that is being validated. Used in the error message.\n * @param def Definition of the host directive that is being validated against.\n * @param hostDirectiveBindings Host directive mapping object that shold be validated.\n */\nfunction validateMappings(bindingType, def, hostDirectiveBindings) {\n  const className = def.type.name;\n  const bindings = bindingType === 'input' ? def.inputs : def.outputs;\n  for (const publicName in hostDirectiveBindings) {\n    if (hostDirectiveBindings.hasOwnProperty(publicName)) {\n      if (!bindings.hasOwnProperty(publicName)) {\n        throw new RuntimeError(311 /* RuntimeErrorCode.HOST_DIRECTIVE_UNDEFINED_BINDING */, `Directive ${className} does not have an ${bindingType} with a public name of ${publicName}.`);\n      }\n      const remappedPublicName = hostDirectiveBindings[publicName];\n      if (bindings.hasOwnProperty(remappedPublicName) && remappedPublicName !== publicName) {\n        throw new RuntimeError(312 /* RuntimeErrorCode.HOST_DIRECTIVE_CONFLICTING_ALIAS */, `Cannot alias ${bindingType} ${publicName} of host directive ${className} to ${remappedPublicName}, because it already has a different ${bindingType} with the same public name.`);\n      }\n    }\n  }\n}\n\n/**\n * Decorates the directive definition with support for input transform functions.\n *\n * If the directive uses inheritance, the feature should be included before the\n * `InheritDefinitionFeature` to ensure that the `inputTransforms` field is populated.\n *\n * @codeGenApi\n */\nfunction ɵɵInputTransformsFeature(definition) {\n  const inputs = definition.inputConfig;\n  const inputTransforms = {};\n  for (const minifiedKey in inputs) {\n    if (inputs.hasOwnProperty(minifiedKey)) {\n      // Note: the private names are used for the keys, rather than the public ones, because public\n      // names can be re-aliased in host directives which would invalidate the lookup.\n      const value = inputs[minifiedKey];\n      if (Array.isArray(value) && value[3]) {\n        inputTransforms[minifiedKey] = value[3];\n      }\n    }\n  }\n  definition.inputTransforms = inputTransforms;\n}\nfunction isIterable(obj) {\n  return obj !== null && typeof obj === 'object' && obj[Symbol.iterator] !== undefined;\n}\nfunction isListLikeIterable(obj) {\n  if (!isJsObject(obj)) return false;\n  return Array.isArray(obj) || !(obj instanceof Map) &&\n  // JS Map are iterables but return entries as [k, v]\n  Symbol.iterator in obj; // JS Iterable have a Symbol.iterator prop\n}\nfunction areIterablesEqual(a, b, comparator) {\n  const iterator1 = a[Symbol.iterator]();\n  const iterator2 = b[Symbol.iterator]();\n  while (true) {\n    const item1 = iterator1.next();\n    const item2 = iterator2.next();\n    if (item1.done && item2.done) return true;\n    if (item1.done || item2.done) return false;\n    if (!comparator(item1.value, item2.value)) return false;\n  }\n}\nfunction iterateListLike(obj, fn) {\n  if (Array.isArray(obj)) {\n    for (let i = 0; i < obj.length; i++) {\n      fn(obj[i]);\n    }\n  } else {\n    const iterator = obj[Symbol.iterator]();\n    let item;\n    while (!(item = iterator.next()).done) {\n      fn(item.value);\n    }\n  }\n}\nfunction isJsObject(o) {\n  return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\nfunction devModeEqual(a, b) {\n  const isListLikeIterableA = isListLikeIterable(a);\n  const isListLikeIterableB = isListLikeIterable(b);\n  if (isListLikeIterableA && isListLikeIterableB) {\n    return areIterablesEqual(a, b, devModeEqual);\n  } else {\n    const isAObject = a && (typeof a === 'object' || typeof a === 'function');\n    const isBObject = b && (typeof b === 'object' || typeof b === 'function');\n    if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {\n      return true;\n    } else {\n      return Object.is(a, b);\n    }\n  }\n}\n\n// TODO(misko): consider inlining\n/** Updates binding and returns the value. */\nfunction updateBinding(lView, bindingIndex, value) {\n  return lView[bindingIndex] = value;\n}\n/** Gets the current binding value. */\nfunction getBinding(lView, bindingIndex) {\n  ngDevMode && assertIndexInRange(lView, bindingIndex);\n  ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');\n  return lView[bindingIndex];\n}\n/**\n * Updates binding if changed, then returns whether it was updated.\n *\n * This function also checks the `CheckNoChangesMode` and throws if changes are made.\n * Some changes (Objects/iterables) during `CheckNoChangesMode` are exempt to comply with VE\n * behavior.\n *\n * @param lView current `LView`\n * @param bindingIndex The binding in the `LView` to check\n * @param value New value to check against `lView[bindingIndex]`\n * @returns `true` if the bindings has changed. (Throws if binding has changed during\n *          `CheckNoChangesMode`)\n */\nfunction bindingUpdated(lView, bindingIndex, value) {\n  ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');\n  ngDevMode && assertLessThan(bindingIndex, lView.length, `Slot should have been initialized to NO_CHANGE`);\n  const oldValue = lView[bindingIndex];\n  if (Object.is(oldValue, value)) {\n    return false;\n  } else {\n    if (ngDevMode && isInCheckNoChangesMode()) {\n      // View engine didn't report undefined values as changed on the first checkNoChanges pass\n      // (before the change detection was run).\n      const oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;\n      if (!devModeEqual(oldValueToCompare, value)) {\n        const details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);\n        throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName, lView);\n      }\n      // There was a change, but the `devModeEqual` decided that the change is exempt from an error.\n      // For this reason we exit as if no change. The early exit is needed to prevent the changed\n      // value to be written into `LView` (If we would write the new value that we would not see it\n      // as change on next CD.)\n      return false;\n    }\n    lView[bindingIndex] = value;\n    return true;\n  }\n}\n/** Updates 2 bindings if changed, then returns whether either was updated. */\nfunction bindingUpdated2(lView, bindingIndex, exp1, exp2) {\n  const different = bindingUpdated(lView, bindingIndex, exp1);\n  return bindingUpdated(lView, bindingIndex + 1, exp2) || different;\n}\n/** Updates 3 bindings if changed, then returns whether any was updated. */\nfunction bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {\n  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n  return bindingUpdated(lView, bindingIndex + 2, exp3) || different;\n}\n/** Updates 4 bindings if changed, then returns whether any was updated. */\nfunction bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {\n  const different = bindingUpdated2(lView, bindingIndex, exp1, exp2);\n  return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;\n}\n\n/**\n * Checks whether a TNode is considered detached, i.e. not present in the\n * translated i18n template. We should not attempt hydration for such nodes\n * and instead, use a regular \"creation mode\".\n */\nfunction isDetachedByI18n(tNode) {\n  return (tNode.flags & 32 /* TNodeFlags.isDetached */) === 32 /* TNodeFlags.isDetached */;\n}\nfunction templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrs, localRefsIndex) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  // TODO(pk): refactor getOrCreateTNode to have the \"create\" only version\n  const tNode = getOrCreateTNode(tView, index, 4 /* TNodeType.Container */, tagName || null, attrs || null);\n  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));\n  registerPostOrderHooks(tView, tNode);\n  const embeddedTView = tNode.tView = createTView(2 /* TViewType.Embedded */, tNode, templateFn, decls, vars, tView.directiveRegistry, tView.pipeRegistry, null, tView.schemas, tViewConsts, null /* ssrId */);\n  if (tView.queries !== null) {\n    tView.queries.template(tView, tNode);\n    embeddedTView.queries = tView.queries.embeddedTView(tNode);\n  }\n  return tNode;\n}\n/**\n * Creates an LContainer for an embedded view.\n *\n * @param declarationLView LView in which the template was declared.\n * @param declarationTView TView in which the template wa declared.\n * @param index The index of the container in the data array\n * @param templateFn Inline template\n * @param decls The number of nodes, local refs, and pipes for this template\n * @param vars The number of bindings for this template\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param localRefs Index of the local references in the `consts` array.\n * @param localRefExtractor A function which extracts local-refs values from the template.\n *        Defaults to the current element associated with the local-ref.\n */\nfunction declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = declarationTView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, declarationTView, declarationLView, templateFn, decls, vars, tagName, attrs, localRefsIndex) : declarationTView.data[adjustedIndex];\n  setCurrentTNode(tNode, false);\n  const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);\n  if (wasLastNodeCreated()) {\n    appendChild(declarationTView, declarationLView, comment, tNode);\n  }\n  attachPatchData(comment, declarationLView);\n  const lContainer = createLContainer(comment, declarationLView, comment, tNode);\n  declarationLView[adjustedIndex] = lContainer;\n  addToEndOfViewTree(declarationLView, lContainer);\n  // If hydration is enabled, looks up dehydrated views in the DOM\n  // using hydration annotation info and stores those views on LContainer.\n  // In client-only mode, this function is a noop.\n  populateDehydratedViewsInLContainer(lContainer, tNode, declarationLView);\n  if (isDirectiveHost(tNode)) {\n    createDirectivesInstances(declarationTView, declarationLView, tNode);\n  }\n  if (localRefsIndex != null) {\n    saveResolvedLocalsInData(declarationLView, tNode, localRefExtractor);\n  }\n  return tNode;\n}\n/**\n * Creates an LContainer for an ng-template (dynamically-inserted view), e.g.\n *\n * <ng-template #foo>\n *    <div></div>\n * </ng-template>\n *\n * @param index The index of the container in the data array\n * @param templateFn Inline template\n * @param decls The number of nodes, local refs, and pipes for this template\n * @param vars The number of bindings for this template\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param localRefs Index of the local references in the `consts` array.\n * @param localRefExtractor A function which extracts local-refs values from the template.\n *        Defaults to the current element associated with the local-ref.\n *\n * @codeGenApi\n */\nfunction ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {\n  const lView = getLView();\n  const tView = getTView();\n  const attrs = getConstant(tView.consts, attrsIndex);\n  declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor);\n  return ɵɵtemplate;\n}\nlet _locateOrCreateContainerAnchor = createContainerAnchorImpl;\n/**\n * Regular creation mode for LContainers and their anchor (comment) nodes.\n */\nfunction createContainerAnchorImpl(tView, lView, tNode, index) {\n  lastNodeWasCreated(true);\n  return lView[RENDERER].createComment(ngDevMode ? 'container' : '');\n}\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode for LContainers and their\n * anchor (comment) nodes.\n */\nfunction locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createContainerAnchorImpl(tView, lView, tNode, index);\n  }\n  const ssrId = hydrationInfo.data[TEMPLATES]?.[index] ?? null;\n  // Apply `ssrId` value to the underlying TView if it was not previously set.\n  //\n  // There might be situations when the same component is present in a template\n  // multiple times and some instances are opted-out of using hydration via\n  // `ngSkipHydration` attribute. In this scenario, at the time a TView is created,\n  // the `ssrId` might be `null` (if the first component is opted-out of hydration).\n  // The code below makes sure that the `ssrId` is applied to the TView if it's still\n  // `null` and verifies we never try to override it with a different value.\n  if (ssrId !== null && tNode.tView !== null) {\n    if (tNode.tView.ssrId === null) {\n      tNode.tView.ssrId = ssrId;\n    } else {\n      ngDevMode && assertEqual(tNode.tView.ssrId, ssrId, 'Unexpected value of the `ssrId` for this TView');\n    }\n  }\n  // Hydration mode, looking up existing elements in DOM.\n  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n  setSegmentHead(hydrationInfo, index, currentRNode);\n  const viewContainerSize = calcSerializedContainerSize(hydrationInfo, index);\n  const comment = siblingAfter(viewContainerSize, currentRNode);\n  if (ngDevMode) {\n    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n    markRNodeAsClaimedByHydration(comment);\n  }\n  return comment;\n}\nfunction enableLocateOrCreateContainerAnchorImpl() {\n  _locateOrCreateContainerAnchor = locateOrCreateContainerAnchorImpl;\n}\n\n/**\n * Helper function to schedule a callback to be invoked when a browser becomes idle.\n *\n * @param callback A function to be invoked when a browser becomes idle.\n * @param injector injector for the app\n */\nfunction onIdle(callback, injector) {\n  const scheduler = injector.get(IdleScheduler);\n  const cleanupFn = () => scheduler.remove(callback);\n  scheduler.add(callback);\n  return cleanupFn;\n}\n/**\n * Use shims for the `requestIdleCallback` and `cancelIdleCallback` functions for\n * environments where those functions are not available (e.g. Node.js and Safari).\n *\n * Note: we wrap the `requestIdleCallback` call into a function, so that it can be\n * overridden/mocked in test environment and picked up by the runtime code.\n */\nconst _requestIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : setTimeout;\nconst _cancelIdleCallback = () => typeof requestIdleCallback !== 'undefined' ? cancelIdleCallback : clearTimeout;\n/**\n * Helper service to schedule `requestIdleCallback`s for batches of defer blocks,\n * to avoid calling `requestIdleCallback` for each defer block (e.g. if\n * defer blocks are defined inside a for loop).\n */\nclass IdleScheduler {\n  // Indicates whether current callbacks are being invoked.\n  executingCallbacks = false;\n  // Currently scheduled idle callback id.\n  idleId = null;\n  // Set of callbacks to be invoked next.\n  current = new Set();\n  // Set of callbacks collected while invoking current set of callbacks.\n  // Those callbacks are scheduled for the next idle period.\n  deferred = new Set();\n  ngZone = inject(NgZone);\n  requestIdleCallbackFn = _requestIdleCallback().bind(globalThis);\n  cancelIdleCallbackFn = _cancelIdleCallback().bind(globalThis);\n  add(callback) {\n    const target = this.executingCallbacks ? this.deferred : this.current;\n    target.add(callback);\n    if (this.idleId === null) {\n      this.scheduleIdleCallback();\n    }\n  }\n  remove(callback) {\n    const {\n      current,\n      deferred\n    } = this;\n    current.delete(callback);\n    deferred.delete(callback);\n    // If the last callback was removed and there is a pending\n    // idle callback - cancel it.\n    if (current.size === 0 && deferred.size === 0) {\n      this.cancelIdleCallback();\n    }\n  }\n  scheduleIdleCallback() {\n    const callback = () => {\n      this.cancelIdleCallback();\n      this.executingCallbacks = true;\n      for (const callback of this.current) {\n        callback();\n      }\n      this.current.clear();\n      this.executingCallbacks = false;\n      // If there are any callbacks added during an invocation\n      // of the current ones - make them \"current\" and schedule\n      // a new idle callback.\n      if (this.deferred.size > 0) {\n        for (const callback of this.deferred) {\n          this.current.add(callback);\n        }\n        this.deferred.clear();\n        this.scheduleIdleCallback();\n      }\n    };\n    // Ensure that the callback runs in the NgZone since\n    // the `requestIdleCallback` is not currently patched by Zone.js.\n    this.idleId = this.requestIdleCallbackFn(() => this.ngZone.run(callback));\n  }\n  cancelIdleCallback() {\n    if (this.idleId !== null) {\n      this.cancelIdleCallbackFn(this.idleId);\n      this.idleId = null;\n    }\n  }\n  ngOnDestroy() {\n    this.cancelIdleCallback();\n    this.current.clear();\n    this.deferred.clear();\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: IdleScheduler,\n    providedIn: 'root',\n    factory: () => new IdleScheduler()\n  });\n}\n\n/**\n * Returns a function that captures a provided delay.\n * Invoking the returned function schedules a trigger.\n */\nfunction onTimer(delay) {\n  return (callback, injector) => scheduleTimerTrigger(delay, callback, injector);\n}\n/**\n * Schedules a callback to be invoked after a given timeout.\n *\n * @param delay A number of ms to wait until firing a callback.\n * @param callback A function to be invoked after a timeout.\n * @param injector injector for the app.\n */\nfunction scheduleTimerTrigger(delay, callback, injector) {\n  const scheduler = injector.get(TimerScheduler);\n  const cleanupFn = () => scheduler.remove(callback);\n  scheduler.add(delay, callback);\n  return cleanupFn;\n}\n/**\n * Helper service to schedule `setTimeout`s for batches of defer blocks,\n * to avoid calling `setTimeout` for each defer block (e.g. if defer blocks\n * are created inside a for loop).\n */\nclass TimerScheduler {\n  // Indicates whether current callbacks are being invoked.\n  executingCallbacks = false;\n  // Currently scheduled `setTimeout` id.\n  timeoutId = null;\n  // When currently scheduled timer would fire.\n  invokeTimerAt = null;\n  // List of callbacks to be invoked.\n  // For each callback we also store a timestamp on when the callback\n  // should be invoked. We store timestamps and callback functions\n  // in a flat array to avoid creating new objects for each entry.\n  // [timestamp1, callback1, timestamp2, callback2, ...]\n  current = [];\n  // List of callbacks collected while invoking current set of callbacks.\n  // Those callbacks are added to the \"current\" queue at the end of\n  // the current callback invocation. The shape of this list is the same\n  // as the shape of the `current` list.\n  deferred = [];\n  add(delay, callback) {\n    const target = this.executingCallbacks ? this.deferred : this.current;\n    this.addToQueue(target, Date.now() + delay, callback);\n    this.scheduleTimer();\n  }\n  remove(callback) {\n    const {\n      current,\n      deferred\n    } = this;\n    const callbackIndex = this.removeFromQueue(current, callback);\n    if (callbackIndex === -1) {\n      // Try cleaning up deferred queue only in case\n      // we didn't find a callback in the \"current\" queue.\n      this.removeFromQueue(deferred, callback);\n    }\n    // If the last callback was removed and there is a pending timeout - cancel it.\n    if (current.length === 0 && deferred.length === 0) {\n      this.clearTimeout();\n    }\n  }\n  addToQueue(target, invokeAt, callback) {\n    let insertAtIndex = target.length;\n    for (let i = 0; i < target.length; i += 2) {\n      const invokeQueuedCallbackAt = target[i];\n      if (invokeQueuedCallbackAt > invokeAt) {\n        // We've reached a first timer that is scheduled\n        // for a later time than what we are trying to insert.\n        // This is the location at which we need to insert,\n        // no need to iterate further.\n        insertAtIndex = i;\n        break;\n      }\n    }\n    arrayInsert2(target, insertAtIndex, invokeAt, callback);\n  }\n  removeFromQueue(target, callback) {\n    let index = -1;\n    for (let i = 0; i < target.length; i += 2) {\n      const queuedCallback = target[i + 1];\n      if (queuedCallback === callback) {\n        index = i;\n        break;\n      }\n    }\n    if (index > -1) {\n      // Remove 2 elements: a timestamp slot and\n      // the following slot with a callback function.\n      arraySplice(target, index, 2);\n    }\n    return index;\n  }\n  scheduleTimer() {\n    const callback = () => {\n      this.clearTimeout();\n      this.executingCallbacks = true;\n      // Clone the current state of the queue, since it might be altered\n      // as we invoke callbacks.\n      const current = [...this.current];\n      // Invoke callbacks that were scheduled to run before the current time.\n      const now = Date.now();\n      for (let i = 0; i < current.length; i += 2) {\n        const invokeAt = current[i];\n        const callback = current[i + 1];\n        if (invokeAt <= now) {\n          callback();\n        } else {\n          // We've reached a timer that should not be invoked yet.\n          break;\n        }\n      }\n      // The state of the queue might've changed after callbacks invocation,\n      // run the cleanup logic based on the *current* state of the queue.\n      let lastCallbackIndex = -1;\n      for (let i = 0; i < this.current.length; i += 2) {\n        const invokeAt = this.current[i];\n        if (invokeAt <= now) {\n          // Add +1 to account for a callback function that\n          // goes after the timestamp in events array.\n          lastCallbackIndex = i + 1;\n        } else {\n          // We've reached a timer that should not be invoked yet.\n          break;\n        }\n      }\n      if (lastCallbackIndex >= 0) {\n        arraySplice(this.current, 0, lastCallbackIndex + 1);\n      }\n      this.executingCallbacks = false;\n      // If there are any callbacks added during an invocation\n      // of the current ones - move them over to the \"current\"\n      // queue.\n      if (this.deferred.length > 0) {\n        for (let i = 0; i < this.deferred.length; i += 2) {\n          const invokeAt = this.deferred[i];\n          const callback = this.deferred[i + 1];\n          this.addToQueue(this.current, invokeAt, callback);\n        }\n        this.deferred.length = 0;\n      }\n      this.scheduleTimer();\n    };\n    // Avoid running timer callbacks more than once per\n    // average frame duration. This is needed for better\n    // batching and to avoid kicking off excessive change\n    // detection cycles.\n    const FRAME_DURATION_MS = 16; // 1000ms / 60fps\n    if (this.current.length > 0) {\n      const now = Date.now();\n      // First element in the queue points at the timestamp\n      // of the first (earliest) event.\n      const invokeAt = this.current[0];\n      if (this.timeoutId === null ||\n      // Reschedule a timer in case a queue contains an item with\n      // an earlier timestamp and the delta is more than an average\n      // frame duration.\n      this.invokeTimerAt && this.invokeTimerAt - invokeAt > FRAME_DURATION_MS) {\n        // There was a timeout already, but an earlier event was added\n        // into the queue. In this case we drop an old timer and setup\n        // a new one with an updated (smaller) timeout.\n        this.clearTimeout();\n        const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);\n        this.invokeTimerAt = invokeAt;\n        this.timeoutId = setTimeout(callback, timeout);\n      }\n    }\n  }\n  clearTimeout() {\n    if (this.timeoutId !== null) {\n      clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n  }\n  ngOnDestroy() {\n    this.clearTimeout();\n    this.current.length = 0;\n    this.deferred.length = 0;\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: TimerScheduler,\n    providedIn: 'root',\n    factory: () => new TimerScheduler()\n  });\n}\n\n/**\n * A service used by the framework to create and cache injector instances.\n *\n * This service is used to create a single injector instance for each defer\n * block definition, to avoid creating an injector for each defer block instance\n * of a certain type.\n */\nclass CachedInjectorService {\n  cachedInjectors = new Map();\n  getOrCreateInjector(key, parentInjector, providers, debugName) {\n    if (!this.cachedInjectors.has(key)) {\n      const injector = providers.length > 0 ? createEnvironmentInjector(providers, parentInjector, debugName) : null;\n      this.cachedInjectors.set(key, injector);\n    }\n    return this.cachedInjectors.get(key);\n  }\n  ngOnDestroy() {\n    try {\n      for (const injector of this.cachedInjectors.values()) {\n        if (injector !== null) {\n          injector.destroy();\n        }\n      }\n    } finally {\n      this.cachedInjectors.clear();\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: CachedInjectorService,\n    providedIn: 'environment',\n    factory: () => new CachedInjectorService()\n  });\n}\n\n/**\n * **INTERNAL**, avoid referencing it in application code.\n * *\n * Injector token that allows to provide `DeferBlockDependencyInterceptor` class\n * implementation.\n *\n * This token is only injected in devMode\n */\nconst DEFER_BLOCK_DEPENDENCY_INTERCEPTOR = new InjectionToken('DEFER_BLOCK_DEPENDENCY_INTERCEPTOR');\n/**\n * **INTERNAL**, token used for configuring defer block behavior.\n */\nconst DEFER_BLOCK_CONFIG = new InjectionToken(ngDevMode ? 'DEFER_BLOCK_CONFIG' : '');\n/**\n * Checks whether there is a cached injector associated with a given defer block\n * declaration and returns if it exists. If there is no cached injector present -\n * creates a new injector and stores in the cache.\n */\nfunction getOrCreateEnvironmentInjector(parentInjector, tDetails, providers) {\n  return parentInjector.get(CachedInjectorService).getOrCreateInjector(tDetails, parentInjector, providers, ngDevMode ? 'DeferBlock Injector' : '');\n}\n/** Injector Helpers */\n/**\n * Creates a new injector, which contains providers collected from dependencies (NgModules) of\n * defer-loaded components. This function detects different types of parent injectors and creates\n * a new injector based on that.\n */\nfunction createDeferBlockInjector(parentInjector, tDetails, providers) {\n  // Check if the parent injector is an instance of a `ChainedInjector`.\n  //\n  // In this case, we retain the shape of the injector and use a newly created\n  // `EnvironmentInjector` as a parent in the `ChainedInjector`. That is needed to\n  // make sure that the primary injector gets consulted first (since it's typically\n  // a NodeInjector) and `EnvironmentInjector` tree is consulted after that.\n  if (parentInjector instanceof ChainedInjector) {\n    const origInjector = parentInjector.injector;\n    // Guaranteed to be an environment injector\n    const parentEnvInjector = parentInjector.parentInjector;\n    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n    return new ChainedInjector(origInjector, envInjector);\n  }\n  const parentEnvInjector = parentInjector.get(EnvironmentInjector);\n  // If the `parentInjector` is *not* an `EnvironmentInjector` - we need to create\n  // a new `ChainedInjector` with the following setup:\n  //\n  //  - the provided `parentInjector` becomes a primary injector\n  //  - an existing (real) `EnvironmentInjector` becomes a parent injector for\n  //    a newly-created one, which contains extra providers\n  //\n  // So the final order in which injectors would be consulted in this case would look like this:\n  //\n  //  1. Provided `parentInjector`\n  //  2. Newly-created `EnvironmentInjector` with extra providers\n  //  3. `EnvironmentInjector` from the `parentInjector`\n  if (parentEnvInjector !== parentInjector) {\n    const envInjector = getOrCreateEnvironmentInjector(parentEnvInjector, tDetails, providers);\n    return new ChainedInjector(parentInjector, envInjector);\n  }\n  // The `parentInjector` is an instance of an `EnvironmentInjector`.\n  // No need for special handling, we can use `parentInjector` as a\n  // parent injector directly.\n  return getOrCreateEnvironmentInjector(parentInjector, tDetails, providers);\n}\n/** Rendering Helpers */\n/**\n * Transitions a defer block to the new state. Updates the  necessary\n * data structures and renders corresponding block.\n *\n * @param newState New state that should be applied to the defer block.\n * @param tNode TNode that represents a defer block.\n * @param lContainer Represents an instance of a defer block.\n * @param skipTimerScheduling Indicates that `@loading` and `@placeholder` block\n *   should be rendered immediately, even if they have `after` or `minimum` config\n *   options setup. This flag to needed for testing APIs to transition defer block\n *   between states via `DeferFixture.render` method.\n */\nfunction renderDeferBlockState(newState, tNode, lContainer, skipTimerScheduling = false) {\n  const hostLView = lContainer[PARENT];\n  const hostTView = hostLView[TVIEW];\n  // Check if this view is not destroyed. Since the loading process was async,\n  // the view might end up being destroyed by the time rendering happens.\n  if (isDestroyed(hostLView)) return;\n  // Make sure this TNode belongs to TView that represents host LView.\n  ngDevMode && assertTNodeForLView(tNode, hostLView);\n  const lDetails = getLDeferBlockDetails(hostLView, tNode);\n  ngDevMode && assertDefined(lDetails, 'Expected a defer block state defined');\n  const currentState = lDetails[DEFER_BLOCK_STATE];\n  const ssrState = lDetails[SSR_BLOCK_STATE];\n  if (ssrState !== null && newState < ssrState) {\n    return; // trying to render a previous state, exit\n  }\n  if (isValidStateChange(currentState, newState) && isValidStateChange(lDetails[NEXT_DEFER_BLOCK_STATE] ?? -1, newState)) {\n    const tDetails = getTDeferBlockDetails(hostTView, tNode);\n    // Skips scheduling on the server since it can delay the server response.\n    const needsScheduling = !skipTimerScheduling && (typeof ngServerMode === 'undefined' || !ngServerMode) && (getLoadingBlockAfter(tDetails) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Loading) !== null || getMinimumDurationForState(tDetails, DeferBlockState.Placeholder));\n    if (ngDevMode && needsScheduling) {\n      assertDefined(applyDeferBlockStateWithSchedulingImpl, 'Expected scheduling function to be defined');\n    }\n    const applyStateFn = needsScheduling ? applyDeferBlockStateWithSchedulingImpl : applyDeferBlockState;\n    try {\n      applyStateFn(newState, lDetails, lContainer, tNode, hostLView);\n    } catch (error) {\n      handleError(hostLView, error);\n    }\n  }\n}\nfunction findMatchingDehydratedViewForDeferBlock(lContainer, lDetails) {\n  // Find matching view based on serialized defer block state.\n  return lContainer[DEHYDRATED_VIEWS]?.find(view => view.data[DEFER_BLOCK_STATE$1] === lDetails[DEFER_BLOCK_STATE]) ?? null;\n}\n/**\n * Applies changes to the DOM to reflect a given state.\n */\nfunction applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView) {\n  const stateTmplIndex = getTemplateIndexForState(newState, hostLView, tNode);\n  if (stateTmplIndex !== null) {\n    lDetails[DEFER_BLOCK_STATE] = newState;\n    const hostTView = hostLView[TVIEW];\n    const adjustedIndex = stateTmplIndex + HEADER_OFFSET;\n    // The TNode that represents a template that will activated in the defer block\n    const activeBlockTNode = getTNode(hostTView, adjustedIndex);\n    // There is only 1 view that can be present in an LContainer that\n    // represents a defer block, so always refer to the first one.\n    const viewIndex = 0;\n    removeLViewFromLContainer(lContainer, viewIndex);\n    let injector;\n    if (newState === DeferBlockState.Complete) {\n      // When we render a defer block in completed state, there might be\n      // newly loaded standalone components used within the block, which may\n      // import NgModules with providers. In order to make those providers\n      // available for components declared in that NgModule, we create an instance\n      // of an environment injector to host those providers and pass this injector\n      // to the logic that creates a view.\n      const tDetails = getTDeferBlockDetails(hostTView, tNode);\n      const providers = tDetails.providers;\n      if (providers && providers.length > 0) {\n        injector = createDeferBlockInjector(hostLView[INJECTOR], tDetails, providers);\n      }\n    }\n    const dehydratedView = findMatchingDehydratedViewForDeferBlock(lContainer, lDetails);\n    // Erase dehydrated view info, so that it's not removed later\n    // by post-hydration cleanup process.\n    lContainer[DEHYDRATED_VIEWS] = null;\n    const embeddedLView = createAndRenderEmbeddedLView(hostLView, activeBlockTNode, null, {\n      injector,\n      dehydratedView\n    });\n    addLViewToLContainer(lContainer, embeddedLView, viewIndex, shouldAddViewToDom(activeBlockTNode, dehydratedView));\n    markViewDirty(embeddedLView, 2 /* NotificationSource.DeferBlockStateUpdate */);\n    // TODO(incremental-hydration):\n    // - what if we had some views in `lContainer[DEHYDRATED_VIEWS]`, but\n    //   we didn't find a view that matches the expected state?\n    // - for example, handle a situation when a block was in the \"completed\" state\n    //   on the server, but the loading failing on the client. How do we reconcile and cleanup?\n    if ((newState === DeferBlockState.Complete || newState === DeferBlockState.Error) && Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n      for (const callback of lDetails[ON_COMPLETE_FNS]) {\n        callback();\n      }\n      lDetails[ON_COMPLETE_FNS] = null;\n    }\n  }\n}\n/**\n * Extends the `applyDeferBlockState` with timer-based scheduling.\n * This function becomes available on a page if there are defer blocks\n * that use `after` or `minimum` parameters in the `@loading` or\n * `@placeholder` blocks.\n */\nfunction applyDeferBlockStateWithScheduling(newState, lDetails, lContainer, tNode, hostLView) {\n  const now = Date.now();\n  const hostTView = hostLView[TVIEW];\n  const tDetails = getTDeferBlockDetails(hostTView, tNode);\n  if (lDetails[STATE_IS_FROZEN_UNTIL] === null || lDetails[STATE_IS_FROZEN_UNTIL] <= now) {\n    lDetails[STATE_IS_FROZEN_UNTIL] = null;\n    const loadingAfter = getLoadingBlockAfter(tDetails);\n    const inLoadingAfterPhase = lDetails[LOADING_AFTER_CLEANUP_FN] !== null;\n    if (newState === DeferBlockState.Loading && loadingAfter !== null && !inLoadingAfterPhase) {\n      // Trying to render loading, but it has an `after` config,\n      // so schedule an update action after a timeout.\n      lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n      const cleanupFn = scheduleDeferBlockUpdate(loadingAfter, lDetails, tNode, lContainer, hostLView);\n      lDetails[LOADING_AFTER_CLEANUP_FN] = cleanupFn;\n    } else {\n      // If we transition to a complete or an error state and there is a pending\n      // operation to render loading after a timeout - invoke a cleanup operation,\n      // which stops the timer.\n      if (newState > DeferBlockState.Loading && inLoadingAfterPhase) {\n        lDetails[LOADING_AFTER_CLEANUP_FN]();\n        lDetails[LOADING_AFTER_CLEANUP_FN] = null;\n        lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n      }\n      applyDeferBlockState(newState, lDetails, lContainer, tNode, hostLView);\n      const duration = getMinimumDurationForState(tDetails, newState);\n      if (duration !== null) {\n        lDetails[STATE_IS_FROZEN_UNTIL] = now + duration;\n        scheduleDeferBlockUpdate(duration, lDetails, tNode, lContainer, hostLView);\n      }\n    }\n  } else {\n    // We are still rendering the previous state.\n    // Update the `NEXT_DEFER_BLOCK_STATE`, which would be\n    // picked up once it's time to transition to the next state.\n    lDetails[NEXT_DEFER_BLOCK_STATE] = newState;\n  }\n}\n/**\n * Schedules an update operation after a specified timeout.\n */\nfunction scheduleDeferBlockUpdate(timeout, lDetails, tNode, lContainer, hostLView) {\n  const callback = () => {\n    const nextState = lDetails[NEXT_DEFER_BLOCK_STATE];\n    lDetails[STATE_IS_FROZEN_UNTIL] = null;\n    lDetails[NEXT_DEFER_BLOCK_STATE] = null;\n    if (nextState !== null) {\n      renderDeferBlockState(nextState, tNode, lContainer);\n    }\n  };\n  return scheduleTimerTrigger(timeout, callback, hostLView[INJECTOR]);\n}\n/**\n * Checks whether we can transition to the next state.\n *\n * We transition to the next state if the previous state was represented\n * with a number that is less than the next state. For example, if the current\n * state is \"loading\" (represented as `1`), we should not show a placeholder\n * (represented as `0`), but we can show a completed state (represented as `2`)\n * or an error state (represented as `3`).\n */\nfunction isValidStateChange(currentState, newState) {\n  return currentState < newState;\n}\n/** Utility function to render placeholder content (if present) */\nfunction renderPlaceholder(lView, tNode) {\n  const lContainer = lView[tNode.index];\n  ngDevMode && assertLContainer(lContainer);\n  renderDeferBlockState(DeferBlockState.Placeholder, tNode, lContainer);\n}\n/**\n * Subscribes to the \"loading\" Promise and renders corresponding defer sub-block,\n * based on the loading results.\n *\n * @param lContainer Represents an instance of a defer block.\n * @param tNode Represents defer block info shared across all instances.\n */\nfunction renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer) {\n  ngDevMode && assertDefined(tDetails.loadingPromise, 'Expected loading Promise to exist on this defer block');\n  tDetails.loadingPromise.then(() => {\n    if (tDetails.loadingState === DeferDependenciesLoadingState.COMPLETE) {\n      ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n      // Everything is loaded, show the primary block content\n      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n    } else if (tDetails.loadingState === DeferDependenciesLoadingState.FAILED) {\n      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n    }\n  });\n}\n/**\n * Reference to the timer-based scheduler implementation of defer block state\n * rendering method. It's used to make timer-based scheduling tree-shakable.\n * If `minimum` or `after` parameters are used, compiler generates an extra\n * argument for the `ɵɵdefer` instruction, which references a timer-based\n * implementation.\n */\nlet applyDeferBlockStateWithSchedulingImpl = null;\n/**\n * Enables timer-related scheduling if `after` or `minimum` parameters are setup\n * on the `@loading` or `@placeholder` blocks.\n */\nfunction ɵɵdeferEnableTimerScheduling(tView, tDetails, placeholderConfigIndex, loadingConfigIndex) {\n  const tViewConsts = tView.consts;\n  if (placeholderConfigIndex != null) {\n    tDetails.placeholderBlockConfig = getConstant(tViewConsts, placeholderConfigIndex);\n  }\n  if (loadingConfigIndex != null) {\n    tDetails.loadingBlockConfig = getConstant(tViewConsts, loadingConfigIndex);\n  }\n  // Enable implementation that supports timer-based scheduling.\n  if (applyDeferBlockStateWithSchedulingImpl === null) {\n    applyDeferBlockStateWithSchedulingImpl = applyDeferBlockStateWithScheduling;\n  }\n}\n\n/**\n * The name of a field that Angular monkey-patches onto a component\n * class to store a function that loads defer-loadable dependencies\n * and applies metadata to a class.\n */\nconst ASYNC_COMPONENT_METADATA_FN = '__ngAsyncComponentMetadataFn__';\n/**\n * If a given component has unresolved async metadata - returns a reference\n * to a function that applies component metadata after resolving defer-loadable\n * dependencies. Otherwise - this function returns `null`.\n */\nfunction getAsyncClassMetadataFn(type) {\n  const componentClass = type; // cast to `any`, so that we can read a monkey-patched field\n  return componentClass[ASYNC_COMPONENT_METADATA_FN] ?? null;\n}\n/**\n * Handles the process of applying metadata info to a component class in case\n * component template has defer blocks (thus some dependencies became deferrable).\n *\n * @param type Component class where metadata should be added\n * @param dependencyLoaderFn Function that loads dependencies\n * @param metadataSetterFn Function that forms a scope in which the `setClassMetadata` is invoked\n */\nfunction setClassMetadataAsync(type, dependencyLoaderFn, metadataSetterFn) {\n  const componentClass = type; // cast to `any`, so that we can monkey-patch it\n  componentClass[ASYNC_COMPONENT_METADATA_FN] = () => Promise.all(dependencyLoaderFn()).then(dependencies => {\n    metadataSetterFn(...dependencies);\n    // Metadata is now set, reset field value to indicate that this component\n    // can by used/compiled synchronously.\n    componentClass[ASYNC_COMPONENT_METADATA_FN] = null;\n    return dependencies;\n  });\n  return componentClass[ASYNC_COMPONENT_METADATA_FN];\n}\n/**\n * Adds decorator, constructor, and property metadata to a given type via static metadata fields\n * on the type.\n *\n * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.\n *\n * Calls to `setClassMetadata` can be guarded by ngDevMode, resulting in the metadata assignments\n * being tree-shaken away during production builds.\n */\nfunction setClassMetadata(type, decorators, ctorParameters, propDecorators) {\n  return noSideEffects(() => {\n    const clazz = type;\n    if (decorators !== null) {\n      if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {\n        clazz.decorators.push(...decorators);\n      } else {\n        clazz.decorators = decorators;\n      }\n    }\n    if (ctorParameters !== null) {\n      // Rather than merging, clobber the existing parameters. If other projects exist which\n      // use tsickle-style annotations and reflect over them in the same way, this could\n      // cause issues, but that is vanishingly unlikely.\n      clazz.ctorParameters = ctorParameters;\n    }\n    if (propDecorators !== null) {\n      // The property decorator objects are merged as it is possible different fields have\n      // different decorator types. Decorators on individual fields are not merged, as it's\n      // also incredibly unlikely that a field will be decorated both with an Angular\n      // decorator and a non-Angular decorator that's also been downleveled.\n      if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {\n        clazz.propDecorators = {\n          ...clazz.propDecorators,\n          ...propDecorators\n        };\n      } else {\n        clazz.propDecorators = propDecorators;\n      }\n    }\n  });\n}\n\n/*\n * This file exists to support compilation of @angular/core in Ivy mode.\n *\n * When the Angular compiler processes a compilation unit, it normally writes imports to\n * @angular/core. When compiling the core package itself this strategy isn't usable. Instead, the\n * compiler writes imports to this file.\n *\n * Only a subset of such imports are supported - core is not allowed to declare components or pipes.\n * A check in ngtsc's `R3SymbolsImportRewriter` validates this condition. The rewriter is only used\n * when compiling @angular/core and is responsible for translating an external name (prefixed with\n * ɵ) to the internal symbol name as exported below.\n *\n * The below symbols are used for @Injectable and @NgModule compilation.\n */\n/**\n * The existence of this constant (in this particular file) informs the Angular compiler that the\n * current program is actually @angular/core, which needs to be compiled specially.\n */\nconst ITS_JUST_ANGULAR = true;\nclass Console {\n  log(message) {\n    // tslint:disable-next-line:no-console\n    console.log(message);\n  }\n  // Note: for reporting errors use `DOM.logError()` as it is platform specific\n  warn(message) {\n    // tslint:disable-next-line:no-console\n    console.warn(message);\n  }\n  static ɵfac = function Console_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Console)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Console,\n    factory: Console.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Console, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], null, null);\n})();\n\n/**\n * These are the data structures that our framework injector profiler will fill with data in order\n * to support DI debugging APIs.\n *\n * resolverToTokenToDependencies: Maps an injector to a Map of tokens to an Array of\n * dependencies. Injector -> Token -> Dependencies This is used to support the\n * getDependenciesFromInjectable API, which takes in an injector and a token and returns it's\n * dependencies.\n *\n * resolverToProviders: Maps a DI resolver (an Injector or a TNode) to the providers configured\n * within it This is used to support the getInjectorProviders API, which takes in an injector and\n * returns the providers that it was configured with. Note that for the element injector case we\n * use the TNode instead of the LView as the DI resolver. This is because the registration of\n * providers happens only once per type of TNode. If an injector is created with an identical TNode,\n * the providers for that injector will not be reconfigured.\n *\n * standaloneInjectorToComponent: Maps the injector of a standalone component to the standalone\n * component that it is associated with. Used in the getInjectorProviders API, specificially in the\n * discovery of import paths for each provider. This is necessary because the imports array of a\n * standalone component is processed and configured in its standalone injector, but exists within\n * the component's definition. Because getInjectorProviders takes in an injector, if that injector\n * is the injector of a standalone component, we need to be able to discover the place where the\n * imports array is located (the component) in order to flatten the imports array within it to\n * discover all of it's providers.\n *\n *\n * All of these data structures are instantiated with WeakMaps. This will ensure that the presence\n * of any object in the keys of these maps does not prevent the garbage collector from collecting\n * those objects. Because of this property of WeakMaps, these data structures will never be the\n * source of a memory leak.\n *\n * An example of this advantage: When components are destroyed, we don't need to do\n * any additional work to remove that component from our mappings.\n *\n */\nclass DIDebugData {\n  resolverToTokenToDependencies = new WeakMap();\n  resolverToProviders = new WeakMap();\n  standaloneInjectorToComponent = new WeakMap();\n  reset() {\n    this.resolverToTokenToDependencies = new WeakMap();\n    this.resolverToProviders = new WeakMap();\n    this.standaloneInjectorToComponent = new WeakMap();\n  }\n}\nlet frameworkDIDebugData = new DIDebugData();\nfunction getFrameworkDIDebugData() {\n  return frameworkDIDebugData;\n}\n/**\n * Initalize default handling of injector events. This handling parses events\n * as they are emitted and constructs the data structures necessary to support\n * some of debug APIs.\n *\n * See handleInjectEvent, handleCreateEvent and handleProviderConfiguredEvent\n * for descriptions of each handler\n *\n * Supported APIs:\n *               - getDependenciesFromInjectable\n *               - getInjectorProviders\n */\nfunction setupFrameworkInjectorProfiler() {\n  frameworkDIDebugData.reset();\n  setInjectorProfiler(injectorProfilerEvent => handleInjectorProfilerEvent(injectorProfilerEvent));\n}\nfunction handleInjectorProfilerEvent(injectorProfilerEvent) {\n  const {\n    context,\n    type\n  } = injectorProfilerEvent;\n  if (type === 0 /* InjectorProfilerEventType.Inject */) {\n    handleInjectEvent(context, injectorProfilerEvent.service);\n  } else if (type === 1 /* InjectorProfilerEventType.InstanceCreatedByInjector */) {\n    handleInstanceCreatedByInjectorEvent(context, injectorProfilerEvent.instance);\n  } else if (type === 2 /* InjectorProfilerEventType.ProviderConfigured */) {\n    handleProviderConfiguredEvent(context, injectorProfilerEvent.providerRecord);\n  }\n}\n/**\n *\n * Stores the injected service in frameworkDIDebugData.resolverToTokenToDependencies\n * based on it's injector and token.\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data InjectedService the service associated with this inject event.\n *\n */\nfunction handleInjectEvent(context, data) {\n  const diResolver = getDIResolver(context.injector);\n  if (diResolver === null) {\n    throwError('An Inject event must be run within an injection context.');\n  }\n  const diResolverToInstantiatedToken = frameworkDIDebugData.resolverToTokenToDependencies;\n  if (!diResolverToInstantiatedToken.has(diResolver)) {\n    diResolverToInstantiatedToken.set(diResolver, new WeakMap());\n  }\n  // if token is a primitive type, ignore this event. We do this because we cannot keep track of\n  // non-primitive tokens in WeakMaps since they are not garbage collectable.\n  if (!canBeHeldWeakly(context.token)) {\n    return;\n  }\n  const instantiatedTokenToDependencies = diResolverToInstantiatedToken.get(diResolver);\n  if (!instantiatedTokenToDependencies.has(context.token)) {\n    instantiatedTokenToDependencies.set(context.token, []);\n  }\n  const {\n    token,\n    value,\n    flags\n  } = data;\n  assertDefined(context.token, 'Injector profiler context token is undefined.');\n  const dependencies = instantiatedTokenToDependencies.get(context.token);\n  assertDefined(dependencies, 'Could not resolve dependencies for token.');\n  if (context.injector instanceof NodeInjector) {\n    dependencies.push({\n      token,\n      value,\n      flags,\n      injectedIn: getNodeInjectorContext(context.injector)\n    });\n  } else {\n    dependencies.push({\n      token,\n      value,\n      flags\n    });\n  }\n}\n/**\n *\n * Returns the LView and TNode associated with a NodeInjector. Returns undefined if the injector\n * is not a NodeInjector.\n *\n * @param injector\n * @returns {lView: LView, tNode: TNode}|undefined\n */\nfunction getNodeInjectorContext(injector) {\n  if (!(injector instanceof NodeInjector)) {\n    throwError('getNodeInjectorContext must be called with a NodeInjector');\n  }\n  const lView = getNodeInjectorLView(injector);\n  const tNode = getNodeInjectorTNode(injector);\n  if (tNode === null) {\n    return;\n  }\n  assertTNodeForLView(tNode, lView);\n  return {\n    lView,\n    tNode\n  };\n}\n/**\n *\n * If the created instance is an instance of a standalone component, maps the injector to that\n * standalone component in frameworkDIDebugData.standaloneInjectorToComponent\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data InjectorCreatedInstance an object containing the instance that was just created\n *\n */\nfunction handleInstanceCreatedByInjectorEvent(context, data) {\n  const {\n    value\n  } = data;\n  if (getDIResolver(context.injector) === null) {\n    throwError('An InjectorCreatedInstance event must be run within an injection context.');\n  }\n  // if our value is an instance of a standalone component, map the injector of that standalone\n  // component to the component class. Otherwise, this event is a noop.\n  let standaloneComponent = undefined;\n  if (typeof value === 'object') {\n    standaloneComponent = value?.constructor;\n  }\n  // We want to also cover if `standaloneComponent === null` in addition to `undefined`\n  if (standaloneComponent == undefined || !isStandaloneComponent(standaloneComponent)) {\n    return;\n  }\n  const environmentInjector = context.injector.get(EnvironmentInjector, null, {\n    optional: true\n  });\n  // Standalone components should have an environment injector. If one cannot be\n  // found we may be in a test case for low level functionality that did not explicitly\n  // setup this injector. In those cases, we simply ignore this event.\n  if (environmentInjector === null) {\n    return;\n  }\n  const {\n    standaloneInjectorToComponent\n  } = frameworkDIDebugData;\n  // If our injector has already been mapped, as is the case\n  // when a standalone component imports another standalone component,\n  // we consider the original component (the component doing the importing)\n  // as the component connected to our injector.\n  if (standaloneInjectorToComponent.has(environmentInjector)) {\n    return;\n  }\n  // If our injector hasn't been mapped, then we map it to the standalone component\n  standaloneInjectorToComponent.set(environmentInjector, standaloneComponent);\n}\nfunction isStandaloneComponent(value) {\n  const def = getComponentDef(value);\n  return !!def?.standalone;\n}\n/**\n *\n * Stores the emitted ProviderRecords from the InjectorProfilerEventType.ProviderConfigured\n * event in frameworkDIDebugData.resolverToProviders\n *\n * @param context InjectorProfilerContext the injection context that this event occurred in.\n * @param data ProviderRecord an object containing the instance that was just created\n *\n */\nfunction handleProviderConfiguredEvent(context, data) {\n  const {\n    resolverToProviders\n  } = frameworkDIDebugData;\n  let diResolver;\n  if (context?.injector instanceof NodeInjector) {\n    diResolver = getNodeInjectorTNode(context.injector);\n  } else {\n    diResolver = context.injector;\n  }\n  if (diResolver === null) {\n    throwError('A ProviderConfigured event must be run within an injection context.');\n  }\n  if (!resolverToProviders.has(diResolver)) {\n    resolverToProviders.set(diResolver, []);\n  }\n  resolverToProviders.get(diResolver).push(data);\n}\nfunction getDIResolver(injector) {\n  let diResolver = null;\n  if (injector === undefined) {\n    return diResolver;\n  }\n  // We use the LView as the diResolver for NodeInjectors because they\n  // do not persist anywhere in the framework. They are simply wrappers around an LView and a TNode\n  // that do persist. Because of this, we rely on the LView of the NodeInjector in order to use\n  // as a concrete key to represent this injector. If we get the same LView back later, we know\n  // we're looking at the same injector.\n  if (injector instanceof NodeInjector) {\n    diResolver = getNodeInjectorLView(injector);\n  }\n  // Other injectors can be used a keys for a map because their instances\n  // persist\n  else {\n    diResolver = injector;\n  }\n  return diResolver;\n}\n// inspired by\n// https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-canbeheldweakly\nfunction canBeHeldWeakly(value) {\n  // we check for value !== null here because typeof null === 'object\n  return value !== null && (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol');\n}\n\n/**\n * Marks a component for check (in case of OnPush components) and synchronously\n * performs change detection on the application this component belongs to.\n *\n * @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}.\n *\n * @publicApi\n */\nfunction applyChanges(component) {\n  ngDevMode && assertDefined(component, 'component');\n  markViewDirty(getComponentViewByInstance(component), 3 /* NotificationSource.DebugApplyChanges */);\n  getRootComponents(component).forEach(rootComponent => detectChanges(rootComponent));\n}\n/**\n * Synchronously perform change detection on a component (and possibly its sub-components).\n *\n * This function triggers change detection in a synchronous way on a component.\n *\n * @param component The component which the change detection should be performed on.\n */\nfunction detectChanges(component) {\n  const view = getComponentViewByInstance(component);\n  view[FLAGS] |= 1024 /* LViewFlags.RefreshView */;\n  detectChangesInternal(view);\n}\n\n/**\n * Discovers the dependencies of an injectable instance. Provides DI information about each\n * dependency that the injectable was instantiated with, including where they were provided from.\n *\n * @param injector An injector instance\n * @param token a DI token that was constructed by the given injector instance\n * @returns an object that contains the created instance of token as well as all of the dependencies\n * that it was instantiated with OR undefined if the token was not created within the given\n * injector.\n */\nfunction getDependenciesFromInjectable(injector, token) {\n  // First we check to see if the token given maps to an actual instance in the injector given.\n  // We use `self: true` because we only want to look at the injector we were given.\n  // We use `optional: true` because it's possible that the token we were given was never\n  // constructed by the injector we were given.\n  const instance = injector.get(token, null, {\n    self: true,\n    optional: true\n  });\n  if (instance === null) {\n    throw new Error(`Unable to determine instance of ${token} in given injector`);\n  }\n  const unformattedDependencies = getDependenciesForTokenInInjector(token, injector);\n  const resolutionPath = getInjectorResolutionPath(injector);\n  const dependencies = unformattedDependencies.map(dep => {\n    // injectedIn contains private fields, so we omit it from the response\n    const formattedDependency = {\n      value: dep.value\n    };\n    // convert injection flags to booleans\n    const flags = dep.flags;\n    formattedDependency.flags = {\n      optional: (8 /* InternalInjectFlags.Optional */ & flags) === 8 /* InternalInjectFlags.Optional */,\n      host: (1 /* InternalInjectFlags.Host */ & flags) === 1 /* InternalInjectFlags.Host */,\n      self: (2 /* InternalInjectFlags.Self */ & flags) === 2 /* InternalInjectFlags.Self */,\n      skipSelf: (4 /* InternalInjectFlags.SkipSelf */ & flags) === 4 /* InternalInjectFlags.SkipSelf */\n    };\n    // find the injector that provided the dependency\n    for (let i = 0; i < resolutionPath.length; i++) {\n      const injectorToCheck = resolutionPath[i];\n      // if skipSelf is true we skip the first injector\n      if (i === 0 && formattedDependency.flags.skipSelf) {\n        continue;\n      }\n      // host only applies to NodeInjectors\n      if (formattedDependency.flags.host && injectorToCheck instanceof EnvironmentInjector) {\n        break;\n      }\n      const instance = injectorToCheck.get(dep.token, null, {\n        self: true,\n        optional: true\n      });\n      if (instance !== null) {\n        // if host flag is true we double check that we can get the service from the first element\n        // in the resolution path by using the host flag. This is done to make sure that we've found\n        // the correct providing injector, and not a node injector that is connected to our path via\n        // a router outlet.\n        if (formattedDependency.flags.host) {\n          const firstInjector = resolutionPath[0];\n          const lookupFromFirstInjector = firstInjector.get(dep.token, null, {\n            ...formattedDependency.flags,\n            optional: true\n          });\n          if (lookupFromFirstInjector !== null) {\n            formattedDependency.providedIn = injectorToCheck;\n          }\n          break;\n        }\n        formattedDependency.providedIn = injectorToCheck;\n        break;\n      }\n      // if self is true we stop after the first injector\n      if (i === 0 && formattedDependency.flags.self) {\n        break;\n      }\n    }\n    if (dep.token) formattedDependency.token = dep.token;\n    return formattedDependency;\n  });\n  return {\n    instance,\n    dependencies\n  };\n}\nfunction getDependenciesForTokenInInjector(token, injector) {\n  const {\n    resolverToTokenToDependencies\n  } = getFrameworkDIDebugData();\n  if (!(injector instanceof NodeInjector)) {\n    return resolverToTokenToDependencies.get(injector)?.get?.(token) ?? [];\n  }\n  const lView = getNodeInjectorLView(injector);\n  const tokenDependencyMap = resolverToTokenToDependencies.get(lView);\n  const dependencies = tokenDependencyMap?.get(token) ?? [];\n  // In the NodeInjector case, all injections for every node are stored in the same lView.\n  // We use the injectedIn field of the dependency to filter out the dependencies that\n  // do not come from the same node as the instance we're looking at.\n  return dependencies.filter(dependency => {\n    const dependencyNode = dependency.injectedIn?.tNode;\n    if (dependencyNode === undefined) {\n      return false;\n    }\n    const instanceNode = getNodeInjectorTNode(injector);\n    assertTNode(dependencyNode);\n    assertTNode(instanceNode);\n    return dependencyNode === instanceNode;\n  });\n}\n/**\n * Gets the class associated with an injector that contains a provider `imports` array in it's\n * definition\n *\n * For Module Injectors this returns the NgModule constructor.\n *\n * For Standalone injectors this returns the standalone component constructor.\n *\n * @param injector Injector an injector instance\n * @returns the constructor where the `imports` array that configures this injector is located\n */\nfunction getProviderImportsContainer(injector) {\n  const {\n    standaloneInjectorToComponent\n  } = getFrameworkDIDebugData();\n  // standalone components configure providers through a component def, so we have to\n  // use the standalone component associated with this injector if Injector represents\n  // a standalone components EnvironmentInjector\n  if (standaloneInjectorToComponent.has(injector)) {\n    return standaloneInjectorToComponent.get(injector);\n  }\n  // Module injectors configure providers through their NgModule def, so we use the\n  // injector to lookup its NgModuleRef and through that grab its instance\n  const defTypeRef = injector.get(NgModuleRef$1, null, {\n    self: true,\n    optional: true\n  });\n  // If we can't find an associated imports container, return null.\n  // This could be the case if this function is called with an R3Injector that does not represent\n  // a standalone component or NgModule.\n  if (defTypeRef === null) {\n    return null;\n  }\n  // In standalone applications, the root environment injector created by bootstrapApplication\n  // may have no associated \"instance\".\n  if (defTypeRef.instance === null) {\n    return null;\n  }\n  return defTypeRef.instance.constructor;\n}\n/**\n * Gets the providers configured on a NodeInjector\n *\n * @param injector A NodeInjector instance\n * @returns ProviderRecord[] an array of objects representing the providers configured on this\n *     injector\n */\nfunction getNodeInjectorProviders(injector) {\n  const diResolver = getNodeInjectorTNode(injector);\n  const {\n    resolverToProviders\n  } = getFrameworkDIDebugData();\n  return resolverToProviders.get(diResolver) ?? [];\n}\n/**\n * Gets a mapping of providers configured on an injector to their import paths\n *\n * ModuleA -> imports ModuleB\n * ModuleB -> imports ModuleC\n * ModuleB -> provides MyServiceA\n * ModuleC -> provides MyServiceB\n *\n * getProviderImportPaths(ModuleA)\n * > Map(2) {\n *   MyServiceA => [ModuleA, ModuleB]\n *   MyServiceB => [ModuleA, ModuleB, ModuleC]\n *  }\n *\n * @param providerImportsContainer constructor of class that contains an `imports` array in it's\n *     definition\n * @returns A Map object that maps providers to an array of constructors representing it's import\n *     path\n *\n */\nfunction getProviderImportPaths(providerImportsContainer) {\n  const providerToPath = new Map();\n  const visitedContainers = new Set();\n  const visitor = walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers);\n  walkProviderTree(providerImportsContainer, visitor, [], new Set());\n  return providerToPath;\n}\n/**\n *\n * Higher order function that returns a visitor for WalkProviderTree\n *\n * Takes in a Map and Set to keep track of the providers and containers\n * visited, so that we can discover the import paths of these providers\n * during the traversal.\n *\n * This visitor takes advantage of the fact that walkProviderTree performs a\n * postorder traversal of the provider tree for the passed in container. Because postorder\n * traversal recursively processes subtrees from leaf nodes until the traversal reaches the root,\n * we write a visitor that constructs provider import paths in reverse.\n *\n *\n * We use the visitedContainers set defined outside this visitor\n * because we want to run some logic only once for\n * each container in the tree. That logic can be described as:\n *\n *\n * 1. for each discovered_provider and discovered_path in the incomplete provider paths we've\n * already discovered\n * 2. get the first container in discovered_path\n * 3. if that first container is in the imports array of the container we're visiting\n *    Then the container we're visiting is also in the import path of discovered_provider, so we\n *    unshift discovered_path with the container we're currently visiting\n *\n *\n * Example Run:\n * ```\n *                 ┌──────────┐\n *                 │containerA│\n *      ┌─imports-─┤          ├──imports─┐\n *      │          │  provA   │          │\n *      │          │  provB   │          │\n *      │          └──────────┘          │\n *      │                                │\n *     ┌▼─────────┐             ┌────────▼─┐\n *     │containerB│             │containerC│\n *     │          │             │          │\n *     │  provD   │             │  provF   │\n *     │  provE   │             │  provG   │\n *     └──────────┘             └──────────┘\n * ```\n *\n * Each step of the traversal,\n *\n * ```\n * visitor(provD, containerB)\n * providerToPath === Map { provD => [containerB] }\n * visitedContainers === Set { containerB }\n *\n * visitor(provE, containerB)\n * providerToPath === Map { provD => [containerB], provE => [containerB] }\n * visitedContainers === Set { containerB }\n *\n * visitor(provF, containerC)\n * providerToPath === Map { provD => [containerB], provE => [containerB], provF => [containerC] }\n * visitedContainers === Set { containerB, containerC }\n *\n * visitor(provG, containerC)\n * providerToPath === Map {\n *   provD => [containerB], provE => [containerB], provF => [containerC], provG => [containerC]\n * }\n * visitedContainers === Set { containerB, containerC }\n *\n * visitor(provA, containerA)\n * providerToPath === Map {\n *   provD => [containerA, containerB],\n *   provE => [containerA, containerB],\n *   provF => [containerA, containerC],\n *   provG => [containerA, containerC],\n *   provA => [containerA]\n * }\n * visitedContainers === Set { containerB, containerC, containerA }\n *\n * visitor(provB, containerA)\n * providerToPath === Map {\n *   provD => [containerA, containerB],\n *   provE => [containerA, containerB],\n *   provF => [containerA, containerC],\n *   provG => [containerA, containerC],\n *   provA => [containerA]\n *   provB => [containerA]\n * }\n * visitedContainers === Set { containerB, containerC, containerA }\n * ```\n *\n * @param providerToPath Map map of providers to paths that this function fills\n * @param visitedContainers Set a set to keep track of the containers we've already visited\n * @return function(provider SingleProvider, container: Type<unknown> | InjectorType<unknown>) =>\n *     void\n */\nfunction walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers) {\n  return (provider, container) => {\n    // If the provider is not already in the providerToPath map,\n    // add an entry with the provider as the key and an array containing the current container as\n    // the value\n    if (!providerToPath.has(provider)) {\n      providerToPath.set(provider, [container]);\n    }\n    // This block will run exactly once for each container in the import tree.\n    // This is where we run the logic to check the imports array of the current\n    // container to see if it's the next container in the path for our currently\n    // discovered providers.\n    if (!visitedContainers.has(container)) {\n      // Iterate through the providers we've already seen\n      for (const prov of providerToPath.keys()) {\n        const existingImportPath = providerToPath.get(prov);\n        let containerDef = getInjectorDef(container);\n        if (!containerDef) {\n          const ngModule = container.ngModule;\n          containerDef = getInjectorDef(ngModule);\n        }\n        if (!containerDef) {\n          return;\n        }\n        const lastContainerAddedToPath = existingImportPath[0];\n        let isNextStepInPath = false;\n        deepForEach(containerDef.imports, moduleImport => {\n          if (isNextStepInPath) {\n            return;\n          }\n          isNextStepInPath = moduleImport.ngModule === lastContainerAddedToPath || moduleImport === lastContainerAddedToPath;\n          if (isNextStepInPath) {\n            providerToPath.get(prov)?.unshift(container);\n          }\n        });\n      }\n    }\n    visitedContainers.add(container);\n  };\n}\n/**\n * Gets the providers configured on an EnvironmentInjector\n *\n * @param injector EnvironmentInjector\n * @returns an array of objects representing the providers of the given injector\n */\nfunction getEnvironmentInjectorProviders(injector) {\n  const providerRecordsWithoutImportPaths = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];\n  // platform injector has no provider imports container so can we skip trying to\n  // find import paths\n  if (isPlatformInjector(injector)) {\n    return providerRecordsWithoutImportPaths;\n  }\n  const providerImportsContainer = getProviderImportsContainer(injector);\n  if (providerImportsContainer === null) {\n    // We assume that if an environment injector exists without an associated provider imports\n    // container, it was created without such a container. Some examples cases where this could\n    // happen:\n    // - The root injector of a standalone application\n    // - A router injector created by using the providers array in a lazy loaded route\n    // - A manually created injector that is attached to the injector tree\n    // Since each of these cases has no provider container, there is no concept of import paths,\n    // so we can simply return the provider records.\n    return providerRecordsWithoutImportPaths;\n  }\n  const providerToPath = getProviderImportPaths(providerImportsContainer);\n  const providerRecords = [];\n  for (const providerRecord of providerRecordsWithoutImportPaths) {\n    const provider = providerRecord.provider;\n    // Ignore these special providers for now until we have a cleaner way of\n    // determing when they are provided by the framework vs provided by the user.\n    const token = provider.provide;\n    if (token === ENVIRONMENT_INITIALIZER || token === INJECTOR_DEF_TYPES) {\n      continue;\n    }\n    let importPath = providerToPath.get(provider) ?? [];\n    const def = getComponentDef(providerImportsContainer);\n    const isStandaloneComponent = !!def?.standalone;\n    // We prepend the component constructor in the standalone case\n    // because walkProviderTree does not visit this constructor during it's traversal\n    if (isStandaloneComponent) {\n      importPath = [providerImportsContainer, ...importPath];\n    }\n    providerRecords.push({\n      ...providerRecord,\n      importPath\n    });\n  }\n  return providerRecords;\n}\nfunction isPlatformInjector(injector) {\n  return injector instanceof R3Injector && injector.scopes.has('platform');\n}\n/**\n * Gets the providers configured on an injector.\n *\n * @param injector the injector to lookup the providers of\n * @returns ProviderRecord[] an array of objects representing the providers of the given injector\n */\nfunction getInjectorProviders(injector) {\n  if (injector instanceof NodeInjector) {\n    return getNodeInjectorProviders(injector);\n  } else if (injector instanceof EnvironmentInjector) {\n    return getEnvironmentInjectorProviders(injector);\n  }\n  throwError('getInjectorProviders only supports NodeInjector and EnvironmentInjector');\n}\n/**\n *\n * Given an injector, this function will return\n * an object containing the type and source of the injector.\n *\n * |              | type        | source                                                      |\n * |--------------|-------------|-------------------------------------------------------------|\n * | NodeInjector | element     | DOM element that created this injector                      |\n * | R3Injector   | environment | `injector.source`                                           |\n * | NullInjector | null        | null                                                        |\n *\n * @param injector the Injector to get metadata for\n * @returns an object containing the type and source of the given injector. If the injector metadata\n *     cannot be determined, returns null.\n */\nfunction getInjectorMetadata(injector) {\n  if (injector instanceof NodeInjector) {\n    const lView = getNodeInjectorLView(injector);\n    const tNode = getNodeInjectorTNode(injector);\n    assertTNodeForLView(tNode, lView);\n    return {\n      type: 'element',\n      source: getNativeByTNode(tNode, lView)\n    };\n  }\n  if (injector instanceof R3Injector) {\n    return {\n      type: 'environment',\n      source: injector.source ?? null\n    };\n  }\n  if (injector instanceof NullInjector) {\n    return {\n      type: 'null',\n      source: null\n    };\n  }\n  return null;\n}\nfunction getInjectorResolutionPath(injector) {\n  const resolutionPath = [injector];\n  getInjectorResolutionPathHelper(injector, resolutionPath);\n  return resolutionPath;\n}\nfunction getInjectorResolutionPathHelper(injector, resolutionPath) {\n  const parent = getInjectorParent(injector);\n  // if getInjectorParent can't find a parent, then we've either reached the end\n  // of the path, or we need to move from the Element Injector tree to the\n  // module injector tree using the first injector in our path as the connection point.\n  if (parent === null) {\n    if (injector instanceof NodeInjector) {\n      const firstInjector = resolutionPath[0];\n      if (firstInjector instanceof NodeInjector) {\n        const moduleInjector = getModuleInjectorOfNodeInjector(firstInjector);\n        if (moduleInjector === null) {\n          throwError('NodeInjector must have some connection to the module injector tree');\n        }\n        resolutionPath.push(moduleInjector);\n        getInjectorResolutionPathHelper(moduleInjector, resolutionPath);\n      }\n      return resolutionPath;\n    }\n  } else {\n    resolutionPath.push(parent);\n    getInjectorResolutionPathHelper(parent, resolutionPath);\n  }\n  return resolutionPath;\n}\n/**\n * Gets the parent of an injector.\n *\n * This function is not able to make the jump from the Element Injector Tree to the Module\n * injector tree. This is because the \"parent\" (the next step in the reoslution path)\n * of a root NodeInjector is dependent on which NodeInjector ancestor initiated\n * the DI lookup. See getInjectorResolutionPath for a function that can make this jump.\n *\n * In the below diagram:\n * ```ts\n * getInjectorParent(NodeInjectorB)\n *  > NodeInjectorA\n * getInjectorParent(NodeInjectorA) // or getInjectorParent(getInjectorParent(NodeInjectorB))\n *  > null // cannot jump to ModuleInjector tree\n * ```\n *\n * ```\n *                ┌───────┐                ┌───────────────────┐\n *    ┌───────────┤ModuleA├───Injector────►│EnvironmentInjector│\n *    │           └───┬───┘                └───────────────────┘\n *    │               │\n *    │           bootstraps\n *    │               │\n *    │               │\n *    │          ┌────▼─────┐                 ┌─────────────┐\n * declares      │ComponentA├────Injector────►│NodeInjectorA│\n *    │          └────┬─────┘                 └─────▲───────┘\n *    │               │                             │\n *    │            renders                        parent\n *    │               │                             │\n *    │          ┌────▼─────┐                 ┌─────┴───────┐\n *    └─────────►│ComponentB├────Injector────►│NodeInjectorB│\n *               └──────────┘                 └─────────────┘\n *```\n *\n * @param injector an Injector to get the parent of\n * @returns Injector the parent of the given injector\n */\nfunction getInjectorParent(injector) {\n  if (injector instanceof R3Injector) {\n    const parent = injector.parent;\n    if (isRouterOutletInjector(parent)) {\n      // This is a special case for a `ChainedInjector` instance, which represents\n      // a combination of a Router's `OutletInjector` and an EnvironmentInjector,\n      // which represents a `@defer` block. Since the `OutletInjector` doesn't store\n      // any tokens itself, we point to the parent injector instead. See the\n      // `OutletInjector.__ngOutletInjector` field for additional information.\n      return parent.parentInjector;\n    }\n    return parent;\n  }\n  let tNode;\n  let lView;\n  if (injector instanceof NodeInjector) {\n    tNode = getNodeInjectorTNode(injector);\n    lView = getNodeInjectorLView(injector);\n  } else if (injector instanceof NullInjector) {\n    return null;\n  } else if (injector instanceof ChainedInjector) {\n    return injector.parentInjector;\n  } else {\n    throwError('getInjectorParent only support injectors of type R3Injector, NodeInjector, NullInjector');\n  }\n  const parentLocation = getParentInjectorLocation(tNode, lView);\n  if (hasParentInjector(parentLocation)) {\n    const parentInjectorIndex = getParentInjectorIndex(parentLocation);\n    const parentLView = getParentInjectorView(parentLocation, lView);\n    const parentTView = parentLView[TVIEW];\n    const parentTNode = parentTView.data[parentInjectorIndex + 8 /* NodeInjectorOffset.TNODE */];\n    return new NodeInjector(parentTNode, parentLView);\n  } else {\n    const chainedInjector = lView[INJECTOR];\n    // Case where chainedInjector.injector is an OutletInjector and chainedInjector.injector.parent\n    // is a NodeInjector.\n    // todo(aleksanderbodurri): ideally nothing in packages/core should deal\n    // directly with router concerns. Refactor this so that we can make the jump from\n    // NodeInjector -> OutletInjector -> NodeInjector\n    // without explicitly relying on types contracts from packages/router\n    const injectorParent = chainedInjector.injector?.parent;\n    if (injectorParent instanceof NodeInjector) {\n      return injectorParent;\n    }\n  }\n  return null;\n}\n/**\n * Gets the module injector of a NodeInjector.\n *\n * @param injector NodeInjector to get module injector of\n * @returns Injector representing module injector of the given NodeInjector\n */\nfunction getModuleInjectorOfNodeInjector(injector) {\n  let lView;\n  if (injector instanceof NodeInjector) {\n    lView = getNodeInjectorLView(injector);\n  } else {\n    throwError('getModuleInjectorOfNodeInjector must be called with a NodeInjector');\n  }\n  const inj = lView[INJECTOR];\n  const moduleInjector = inj instanceof ChainedInjector ? inj.parentInjector : inj.parent;\n  if (!moduleInjector) {\n    throwError('NodeInjector must have some connection to the module injector tree');\n  }\n  return moduleInjector;\n}\n\n/**\n * This file introduces series of globally accessible debug tools\n * to allow for the Angular debugging story to function.\n *\n * To see this in action run the following command:\n *\n *   bazel run //packages/core/test/bundling/todo:devserver\n *\n *  Then load `localhost:5432` and start using the console tools.\n */\n/**\n * This value reflects the property on the window where the dev\n * tools are patched (window.ng).\n * */\nconst GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';\nconst globalUtilsFunctions = {\n  /**\n   * Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon\n   * in application's code. The contract of those functions might be changed in any release and/or a\n   * function can be removed completely.\n   */\n  'ɵgetDependenciesFromInjectable': getDependenciesFromInjectable,\n  'ɵgetInjectorProviders': getInjectorProviders,\n  'ɵgetInjectorResolutionPath': getInjectorResolutionPath,\n  'ɵgetInjectorMetadata': getInjectorMetadata,\n  'ɵsetProfiler': setProfiler,\n  'getDirectiveMetadata': getDirectiveMetadata$1,\n  'getComponent': getComponent,\n  'getContext': getContext,\n  'getListeners': getListeners,\n  'getOwningComponent': getOwningComponent,\n  'getHostElement': getHostElement,\n  'getInjector': getInjector,\n  'getRootComponents': getRootComponents,\n  'getDirectives': getDirectives,\n  'applyChanges': applyChanges,\n  'isSignal': isSignal\n};\nlet _published = false;\n/**\n * Publishes a collection of default debug tools onto`window.ng`.\n *\n * These functions are available globally when Angular is in development\n * mode and are automatically stripped away from prod mode is on.\n */\nfunction publishDefaultGlobalUtils$1() {\n  if (!_published) {\n    _published = true;\n    if (typeof window !== 'undefined') {\n      // Only configure the injector profiler when running in the browser.\n      setupFrameworkInjectorProfiler();\n    }\n    for (const [methodName, method] of Object.entries(globalUtilsFunctions)) {\n      publishGlobalUtil(methodName, method);\n    }\n  }\n}\n/**\n * Publishes the given function to `window.ng` so that it can be\n * used from the browser console when an application is not in production.\n */\nfunction publishGlobalUtil(name, fn) {\n  publishUtil(name, fn);\n}\n/**\n * Publishes the given function to `window.ng` from package other than @angular/core\n * So that it can be used from the browser console when an application is not in production.\n */\nfunction publishExternalGlobalUtil(name, fn) {\n  publishUtil(name, fn);\n}\nfunction publishUtil(name, fn) {\n  if (typeof COMPILED === 'undefined' || !COMPILED) {\n    // Note: we can't export `ng` when using closure enhanced optimization as:\n    // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n    // - we can't declare a closure extern as the namespace `ng` is already used within Google\n    //   for typings for AngularJS (via `goog.provide('ng....')`).\n    const w = _global;\n    ngDevMode && assertDefined(fn, 'function not defined');\n    w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {};\n    w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn;\n  }\n}\n\n/**\n * Internal injection token that can used to access an instance of a Testability class.\n *\n * This token acts as a bridge between the core bootstrap code and the `Testability` class. This is\n * needed to ensure that there are no direct references to the `Testability` class, so it can be\n * tree-shaken away (if not referenced). For the environments/setups when the `Testability` class\n * should be available, this token is used to add a provider that references the `Testability`\n * class. Otherwise, only this token is retained in a bundle, but the `Testability` class is not.\n */\nconst TESTABILITY = new InjectionToken('');\n/**\n * Internal injection token to retrieve Testability getter class instance.\n */\nconst TESTABILITY_GETTER = new InjectionToken('');\n/**\n * The Testability service provides testing hooks that can be accessed from\n * the browser.\n *\n * Angular applications bootstrapped using an NgModule (via `@NgModule.bootstrap` field) will also\n * instantiate Testability by default (in both development and production modes).\n *\n * For applications bootstrapped using the `bootstrapApplication` function, Testability is not\n * included by default. You can include it into your applications by getting the list of necessary\n * providers using the `provideProtractorTestingSupport()` function and adding them into the\n * `options.providers` array. Example:\n *\n * ```ts\n * import {provideProtractorTestingSupport} from '@angular/platform-browser';\n *\n * await bootstrapApplication(RootComponent, providers: [provideProtractorTestingSupport()]);\n * ```\n *\n * @publicApi\n */\nclass Testability {\n  _ngZone;\n  registry;\n  _isZoneStable = true;\n  _callbacks = [];\n  taskTrackingZone = null;\n  constructor(_ngZone, registry, testabilityGetter) {\n    this._ngZone = _ngZone;\n    this.registry = registry;\n    // If there was no Testability logic registered in the global scope\n    // before, register the current testability getter as a global one.\n    if (!_testabilityGetter) {\n      setTestabilityGetter(testabilityGetter);\n      testabilityGetter.addToWindow(registry);\n    }\n    this._watchAngularEvents();\n    _ngZone.run(() => {\n      this.taskTrackingZone = typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');\n    });\n  }\n  _watchAngularEvents() {\n    this._ngZone.onUnstable.subscribe({\n      next: () => {\n        this._isZoneStable = false;\n      }\n    });\n    this._ngZone.runOutsideAngular(() => {\n      this._ngZone.onStable.subscribe({\n        next: () => {\n          NgZone.assertNotInAngularZone();\n          queueMicrotask(() => {\n            this._isZoneStable = true;\n            this._runCallbacksIfReady();\n          });\n        }\n      });\n    });\n  }\n  /**\n   * Whether an associated application is stable\n   */\n  isStable() {\n    return this._isZoneStable && !this._ngZone.hasPendingMacrotasks;\n  }\n  _runCallbacksIfReady() {\n    if (this.isStable()) {\n      // Schedules the call backs in a new frame so that it is always async.\n      queueMicrotask(() => {\n        while (this._callbacks.length !== 0) {\n          let cb = this._callbacks.pop();\n          clearTimeout(cb.timeoutId);\n          cb.doneCb();\n        }\n      });\n    } else {\n      // Still not stable, send updates.\n      let pending = this.getPendingTasks();\n      this._callbacks = this._callbacks.filter(cb => {\n        if (cb.updateCb && cb.updateCb(pending)) {\n          clearTimeout(cb.timeoutId);\n          return false;\n        }\n        return true;\n      });\n    }\n  }\n  getPendingTasks() {\n    if (!this.taskTrackingZone) {\n      return [];\n    }\n    // Copy the tasks data so that we don't leak tasks.\n    return this.taskTrackingZone.macroTasks.map(t => {\n      return {\n        source: t.source,\n        // From TaskTrackingZone:\n        // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40\n        creationLocation: t.creationLocation,\n        data: t.data\n      };\n    });\n  }\n  addCallback(cb, timeout, updateCb) {\n    let timeoutId = -1;\n    if (timeout && timeout > 0) {\n      timeoutId = setTimeout(() => {\n        this._callbacks = this._callbacks.filter(cb => cb.timeoutId !== timeoutId);\n        cb();\n      }, timeout);\n    }\n    this._callbacks.push({\n      doneCb: cb,\n      timeoutId: timeoutId,\n      updateCb: updateCb\n    });\n  }\n  /**\n   * Wait for the application to be stable with a timeout. If the timeout is reached before that\n   * happens, the callback receives a list of the macro tasks that were pending, otherwise null.\n   *\n   * @param doneCb The callback to invoke when Angular is stable or the timeout expires\n   *    whichever comes first.\n   * @param timeout Optional. The maximum time to wait for Angular to become stable. If not\n   *    specified, whenStable() will wait forever.\n   * @param updateCb Optional. If specified, this callback will be invoked whenever the set of\n   *    pending macrotasks changes. If this callback returns true doneCb will not be invoked\n   *    and no further updates will be issued.\n   */\n  whenStable(doneCb, timeout, updateCb) {\n    if (updateCb && !this.taskTrackingZone) {\n      throw new Error('Task tracking zone is required when passing an update callback to ' + 'whenStable(). Is \"zone.js/plugins/task-tracking\" loaded?');\n    }\n    this.addCallback(doneCb, timeout, updateCb);\n    this._runCallbacksIfReady();\n  }\n  /**\n   * Registers an application with a testability hook so that it can be tracked.\n   * @param token token of application, root element\n   *\n   * @internal\n   */\n  registerApplication(token) {\n    this.registry.registerApplication(token, this);\n  }\n  /**\n   * Unregisters an application.\n   * @param token token of application, root element\n   *\n   * @internal\n   */\n  unregisterApplication(token) {\n    this.registry.unregisterApplication(token);\n  }\n  /**\n   * Find providers by name\n   * @param using The root element to search from\n   * @param provider The name of binding variable\n   * @param exactMatch Whether using exactMatch\n   */\n  findProviders(using, provider, exactMatch) {\n    // TODO(juliemr): implement.\n    return [];\n  }\n  static ɵfac = function Testability_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER));\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Testability,\n    factory: Testability.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Testability, [{\n    type: Injectable\n  }], () => [{\n    type: NgZone\n  }, {\n    type: TestabilityRegistry\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [TESTABILITY_GETTER]\n    }]\n  }], null);\n})();\n/**\n * A global registry of {@link Testability} instances for specific elements.\n * @publicApi\n */\nclass TestabilityRegistry {\n  /** @internal */\n  _applications = new Map();\n  /**\n   * Registers an application with a testability hook so that it can be tracked\n   * @param token token of application, root element\n   * @param testability Testability hook\n   */\n  registerApplication(token, testability) {\n    this._applications.set(token, testability);\n  }\n  /**\n   * Unregisters an application.\n   * @param token token of application, root element\n   */\n  unregisterApplication(token) {\n    this._applications.delete(token);\n  }\n  /**\n   * Unregisters all applications\n   */\n  unregisterAllApplications() {\n    this._applications.clear();\n  }\n  /**\n   * Get a testability hook associated with the application\n   * @param elem root element\n   */\n  getTestability(elem) {\n    return this._applications.get(elem) || null;\n  }\n  /**\n   * Get all registered testabilities\n   */\n  getAllTestabilities() {\n    return Array.from(this._applications.values());\n  }\n  /**\n   * Get all registered applications(root elements)\n   */\n  getAllRootElements() {\n    return Array.from(this._applications.keys());\n  }\n  /**\n   * Find testability of a node in the Tree\n   * @param elem node\n   * @param findInAncestors whether finding testability in ancestors if testability was not found in\n   * current node\n   */\n  findTestabilityInTree(elem, findInAncestors = true) {\n    return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;\n  }\n  static ɵfac = function TestabilityRegistry_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TestabilityRegistry)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: TestabilityRegistry,\n    factory: TestabilityRegistry.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], null, null);\n})();\n/**\n * Set the {@link GetTestability} implementation used by the Angular testing framework.\n * @publicApi\n */\nfunction setTestabilityGetter(getter) {\n  _testabilityGetter = getter;\n}\nlet _testabilityGetter;\n\n/**\n * Determine if the argument is shaped like a Promise\n */\nfunction isPromise(obj) {\n  // allow any Promise/A+ compliant thenable.\n  // It's up to the caller to ensure that obj.then conforms to the spec\n  return !!obj && typeof obj.then === 'function';\n}\n/**\n * Determine if the argument is a Subscribable\n */\nfunction isSubscribable(obj) {\n  return !!obj && typeof obj.subscribe === 'function';\n}\n\n/**\n * A DI token that you can use to provide\n * one or more initialization functions.\n *\n * The provided functions are injected at application startup and executed during\n * app initialization. If any of these functions returns a Promise or an Observable, initialization\n * does not complete until the Promise is resolved or the Observable is completed.\n *\n * You can, for example, create a factory function that loads language data\n * or an external configuration, and provide that function to the `APP_INITIALIZER` token.\n * The function is executed during the application bootstrap process,\n * and the needed data is available on startup.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * @deprecated from v19.0.0, use provideAppInitializer instead\n *\n * @see {@link ApplicationInitStatus}\n * @see {@link provideAppInitializer}\n *\n * @usageNotes\n *\n * The following example illustrates how to configure a multi-provider using `APP_INITIALIZER` token\n * and a function returning a promise.\n * ### Example with NgModule-based application\n * ```ts\n *  function initializeApp(): Promise<any> {\n *    const http = inject(HttpClient);\n *    return firstValueFrom(\n *      http\n *        .get(\"https://someUrl.com/api/user\")\n *        .pipe(tap(user => { ... }))\n *    );\n *  }\n *\n *  @NgModule({\n *   imports: [BrowserModule],\n *   declarations: [AppComponent],\n *   bootstrap: [AppComponent],\n *   providers: [{\n *     provide: APP_INITIALIZER,\n *     useValue: initializeApp,\n *     multi: true,\n *    }]\n *   })\n *  export class AppModule {}\n * ```\n *\n * ### Example with standalone application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * bootstrapApplication(App, {\n *   providers: [\n *     provideHttpClient(),\n *     {\n *       provide: APP_INITIALIZER,\n *       useValue: initializeApp,\n *       multi: true,\n *     },\n *   ],\n * });\n\n * ```\n *\n *\n * It's also possible to configure a multi-provider using `APP_INITIALIZER` token and a function\n * returning an observable, see an example below. Note: the `HttpClient` in this example is used for\n * demo purposes to illustrate how the factory function can work with other providers available\n * through DI.\n *\n * ### Example with NgModule-based application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * @NgModule({\n *   imports: [BrowserModule, HttpClientModule],\n *   declarations: [AppComponent],\n *   bootstrap: [AppComponent],\n *   providers: [{\n *     provide: APP_INITIALIZER,\n *     useValue: initializeApp,\n *     multi: true,\n *   }]\n * })\n * export class AppModule {}\n * ```\n *\n * ### Example with standalone application\n * ```ts\n * function initializeApp() {\n *   const http = inject(HttpClient);\n *   return firstValueFrom(\n *     http\n *       .get(\"https://someUrl.com/api/user\")\n *       .pipe(tap(user => { ... }))\n *   );\n * }\n *\n * bootstrapApplication(App, {\n *   providers: [\n *     provideHttpClient(),\n *     {\n *       provide: APP_INITIALIZER,\n *       useValue: initializeApp,\n *       multi: true,\n *     },\n *   ],\n * });\n * ```\n *\n * @publicApi\n */\nconst APP_INITIALIZER = new InjectionToken(ngDevMode ? 'Application Initializer' : '');\n/**\n * @description\n * The provided function is injected at application startup and executed during\n * app initialization. If the function returns a Promise or an Observable, initialization\n * does not complete until the Promise is resolved or the Observable is completed.\n *\n * You can, for example, create a function that loads language data\n * or an external configuration, and provide that function using `provideAppInitializer()`.\n * The function is executed during the application bootstrap process,\n * and the needed data is available on startup.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `APP_INITIALIZER` token which is now deprecated.\n *\n * @see {@link APP_INITIALIZER}\n *\n * @usageNotes\n * The following example illustrates how to configure an initialization function using\n * `provideAppInitializer()`\n * ```ts\n * bootstrapApplication(App, {\n *   providers: [\n *     provideAppInitializer(() => {\n *       const http = inject(HttpClient);\n *       return firstValueFrom(\n *         http\n *           .get(\"https://someUrl.com/api/user\")\n *           .pipe(tap(user => { ... }))\n *       );\n *     }),\n *     provideHttpClient(),\n *   ],\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideAppInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: APP_INITIALIZER,\n    multi: true,\n    useValue: initializerFn\n  }]);\n}\n/**\n * A class that reflects the state of running {@link APP_INITIALIZER} functions.\n *\n * @publicApi\n */\nclass ApplicationInitStatus {\n  // Using non null assertion, these fields are defined below\n  // within the `new Promise` callback (synchronously).\n  resolve;\n  reject;\n  initialized = false;\n  done = false;\n  donePromise = new Promise((res, rej) => {\n    this.resolve = res;\n    this.reject = rej;\n  });\n  appInits = inject(APP_INITIALIZER, {\n    optional: true\n  }) ?? [];\n  injector = inject(Injector);\n  constructor() {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !Array.isArray(this.appInits)) {\n      throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `APP_INITIALIZER` token value ' + `(expected an array, but got ${typeof this.appInits}). ` + 'Please check that the `APP_INITIALIZER` token is configured as a ' + '`multi: true` provider.');\n    }\n  }\n  /** @internal */\n  runInitializers() {\n    if (this.initialized) {\n      return;\n    }\n    const asyncInitPromises = [];\n    for (const appInits of this.appInits) {\n      const initResult = runInInjectionContext(this.injector, appInits);\n      if (isPromise(initResult)) {\n        asyncInitPromises.push(initResult);\n      } else if (isSubscribable(initResult)) {\n        const observableAsPromise = new Promise((resolve, reject) => {\n          initResult.subscribe({\n            complete: resolve,\n            error: reject\n          });\n        });\n        asyncInitPromises.push(observableAsPromise);\n      }\n    }\n    const complete = () => {\n      // @ts-expect-error overwriting a readonly\n      this.done = true;\n      this.resolve();\n    };\n    Promise.all(asyncInitPromises).then(() => {\n      complete();\n    }).catch(e => {\n      this.reject(e);\n    });\n    if (asyncInitPromises.length === 0) {\n      complete();\n    }\n    this.initialized = true;\n  }\n  static ɵfac = function ApplicationInitStatus_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationInitStatus)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ApplicationInitStatus,\n    factory: ApplicationInitStatus.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n\n/**\n * A scheduler which manages the execution of effects.\n */\nclass EffectScheduler {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: EffectScheduler,\n    providedIn: 'root',\n    factory: () => new ZoneAwareEffectScheduler()\n  });\n}\n/**\n * A wrapper around `ZoneAwareQueueingScheduler` that schedules flushing via the microtask queue\n * when.\n */\nclass ZoneAwareEffectScheduler {\n  queuedEffectCount = 0;\n  queues = new Map();\n  schedule(handle) {\n    this.enqueue(handle);\n  }\n  enqueue(handle) {\n    const zone = handle.zone;\n    if (!this.queues.has(zone)) {\n      this.queues.set(zone, new Set());\n    }\n    const queue = this.queues.get(zone);\n    if (queue.has(handle)) {\n      return;\n    }\n    this.queuedEffectCount++;\n    queue.add(handle);\n  }\n  /**\n   * Run all scheduled effects.\n   *\n   * Execution order of effects within the same zone is guaranteed to be FIFO, but there is no\n   * ordering guarantee between effects scheduled in different zones.\n   */\n  flush() {\n    while (this.queuedEffectCount > 0) {\n      for (const [zone, queue] of this.queues) {\n        // `zone` here must be defined.\n        if (zone === null) {\n          this.flushQueue(queue);\n        } else {\n          zone.run(() => this.flushQueue(queue));\n        }\n      }\n    }\n  }\n  flushQueue(queue) {\n    for (const handle of queue) {\n      queue.delete(handle);\n      this.queuedEffectCount--;\n      // TODO: what happens if this throws an error?\n      handle.run();\n    }\n  }\n}\n\n/**\n * A DI token that provides a set of callbacks to\n * be called for every component that is bootstrapped.\n *\n * Each callback must take a `ComponentRef` instance and return nothing.\n *\n * `(componentRef: ComponentRef) => void`\n *\n * @publicApi\n */\nconst APP_BOOTSTRAP_LISTENER = new InjectionToken(ngDevMode ? 'appBootstrapListener' : '');\nfunction publishDefaultGlobalUtils() {\n  ngDevMode && publishDefaultGlobalUtils$1();\n}\n/**\n * Sets the error for an invalid write to a signal to be an Angular `RuntimeError`.\n */\nfunction publishSignalConfiguration() {\n  setThrowInvalidWriteToSignalError$1(() => {\n    throw new RuntimeError(600 /* RuntimeErrorCode.SIGNAL_WRITE_FROM_ILLEGAL_CONTEXT */, ngDevMode && 'Writing to signals is not allowed in a `computed`.');\n  });\n}\nfunction isBoundToModule(cf) {\n  return cf.isBoundToModule;\n}\n/**\n * A token for third-party components that can register themselves with NgProbe.\n *\n * @deprecated\n * @publicApi\n */\nclass NgProbeToken {\n  name;\n  token;\n  constructor(name, token) {\n    this.name = name;\n    this.token = token;\n  }\n}\n/** Maximum number of times ApplicationRef will refresh all attached views in a single tick. */\nconst MAXIMUM_REFRESH_RERUNS = 10;\nfunction _callAndReportToErrorHandler(errorHandler, ngZone, callback) {\n  try {\n    const result = callback();\n    if (isPromise(result)) {\n      return result.catch(e => {\n        ngZone.runOutsideAngular(() => errorHandler.handleError(e));\n        // rethrow as the exception handler might not do it\n        throw e;\n      });\n    }\n    return result;\n  } catch (e) {\n    ngZone.runOutsideAngular(() => errorHandler.handleError(e));\n    // rethrow as the exception handler might not do it\n    throw e;\n  }\n}\nfunction optionsReducer(dst, objs) {\n  if (Array.isArray(objs)) {\n    return objs.reduce(optionsReducer, dst);\n  }\n  return {\n    ...dst,\n    ...objs\n  };\n}\n/**\n * A reference to an Angular application running on a page.\n *\n * @usageNotes\n * {@a is-stable-examples}\n * ### isStable examples and caveats\n *\n * Note two important points about `isStable`, demonstrated in the examples below:\n * - the application will never be stable if you start any kind\n * of recurrent asynchronous task when the application starts\n * (for example for a polling process, started with a `setInterval`, a `setTimeout`\n * or using RxJS operators like `interval`);\n * - the `isStable` Observable runs outside of the Angular zone.\n *\n * Let's imagine that you start a recurrent task\n * (here incrementing a counter, using RxJS `interval`),\n * and at the same time subscribe to `isStable`.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *      filter(stable => stable)\n *   ).subscribe(() => console.log('App is stable now');\n *   interval(1000).subscribe(counter => console.log(counter));\n * }\n * ```\n * In this example, `isStable` will never emit `true`,\n * and the trace \"App is stable now\" will never get logged.\n *\n * If you want to execute something when the app is stable,\n * you have to wait for the application to be stable\n * before starting your polling process.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     tap(stable => console.log('App is stable now')),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => console.log(counter));\n * }\n * ```\n * In this example, the trace \"App is stable now\" will be logged\n * and then the counter starts incrementing every second.\n *\n * Note also that this Observable runs outside of the Angular zone,\n * which means that the code in the subscription\n * to this Observable will not trigger the change detection.\n *\n * Let's imagine that instead of logging the counter value,\n * you update a field of your component\n * and display it in its template.\n *\n * ```ts\n * constructor(appRef: ApplicationRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => this.value = counter);\n * }\n * ```\n * As the `isStable` Observable runs outside the zone,\n * the `value` field will be updated properly,\n * but the template will not be refreshed!\n *\n * You'll have to manually trigger the change detection to update the template.\n *\n * ```ts\n * constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => {\n *     this.value = counter;\n *     cd.detectChanges();\n *   });\n * }\n * ```\n *\n * Or make the subscription callback run inside the zone.\n *\n * ```ts\n * constructor(appRef: ApplicationRef, zone: NgZone) {\n *   appRef.isStable.pipe(\n *     first(stable => stable),\n *     switchMap(() => interval(1000))\n *   ).subscribe(counter => zone.run(() => this.value = counter));\n * }\n * ```\n *\n * @publicApi\n */\nclass ApplicationRef {\n  /** @internal */\n  _runningTick = false;\n  _destroyed = false;\n  _destroyListeners = [];\n  /** @internal */\n  _views = [];\n  internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER);\n  afterRenderManager = inject(AfterRenderManager);\n  zonelessEnabled = inject(ZONELESS_ENABLED);\n  rootEffectScheduler = inject(EffectScheduler);\n  /**\n   * Current dirty state of the application across a number of dimensions (views, afterRender hooks,\n   * etc).\n   *\n   * A flag set here means that `tick()` will attempt to resolve the dirtiness when executed.\n   *\n   * @internal\n   */\n  dirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n  /**\n   * Like `dirtyFlags` but don't cause `tick()` to loop.\n   *\n   * @internal\n   */\n  deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n  /**\n   * Most recent snapshot from the `TracingService`, if any.\n   *\n   * This snapshot attempts to capture the context when `tick()` was first\n   * scheduled. It then runs wrapped in this context.\n   *\n   * @internal\n   */\n  tracingSnapshot = null;\n  // Needed for ComponentFixture temporarily during migration of autoDetect behavior\n  // Eventually the hostView of the fixture should just attach to ApplicationRef.\n  externalTestViews = new Set();\n  /** @internal */\n  afterTick = new Subject();\n  /** @internal */\n  get allViews() {\n    return [...this.externalTestViews.keys(), ...this._views];\n  }\n  /**\n   * Indicates whether this instance was destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  /**\n   * Get a list of component types registered to this application.\n   * This list is populated even before the component is created.\n   */\n  componentTypes = [];\n  /**\n   * Get a list of components registered to this application.\n   */\n  components = [];\n  /**\n   * Returns an Observable that indicates when the application is stable or unstable.\n   */\n  isStable = inject(PendingTasksInternal).hasPendingTasks.pipe(map(pending => !pending));\n  constructor() {\n    // Inject the tracing service to initialize it.\n    inject(TracingService, {\n      optional: true\n    });\n  }\n  /**\n   * @returns A promise that resolves when the application becomes stable\n   */\n  whenStable() {\n    let subscription;\n    return new Promise(resolve => {\n      subscription = this.isStable.subscribe({\n        next: stable => {\n          if (stable) {\n            resolve();\n          }\n        }\n      });\n    }).finally(() => {\n      subscription.unsubscribe();\n    });\n  }\n  _injector = inject(EnvironmentInjector);\n  _rendererFactory = null;\n  /**\n   * The `EnvironmentInjector` used to create this application.\n   */\n  get injector() {\n    return this._injector;\n  }\n  /**\n   * Bootstrap a component onto the element identified by its selector or, optionally, to a\n   * specified element.\n   *\n   * @usageNotes\n   * ### Bootstrap process\n   *\n   * When bootstrapping a component, Angular mounts it onto a target DOM element\n   * and kicks off automatic change detection. The target DOM element can be\n   * provided using the `rootSelectorOrNode` argument.\n   *\n   * If the target DOM element is not provided, Angular tries to find one on a page\n   * using the `selector` of the component that is being bootstrapped\n   * (first matched element is used).\n   *\n   * ### Example\n   *\n   * Generally, we define the component to bootstrap in the `bootstrap` array of `NgModule`,\n   * but it requires us to know the component while writing the application code.\n   *\n   * Imagine a situation where we have to wait for an API call to decide about the component to\n   * bootstrap. We can use the `ngDoBootstrap` hook of the `NgModule` and call this method to\n   * dynamically bootstrap a component.\n   *\n   * {@example core/ts/platform/platform.ts region='componentSelector'}\n   *\n   * Optionally, a component can be mounted onto a DOM element that does not match the\n   * selector of the bootstrapped component.\n   *\n   * In the following example, we are providing a CSS selector to match the target element.\n   *\n   * {@example core/ts/platform/platform.ts region='cssSelector'}\n   *\n   * While in this example, we are providing reference to a DOM node.\n   *\n   * {@example core/ts/platform/platform.ts region='domNode'}\n   */\n  bootstrap(componentOrFactory, rootSelectorOrNode) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;\n    const initStatus = this._injector.get(ApplicationInitStatus);\n    if (!initStatus.done) {\n      const standalone = !isComponentFactory && isStandalone(componentOrFactory);\n      const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) && 'Cannot bootstrap as there are still asynchronous initializers running.' + (standalone ? '' : ' Bootstrap components in the `ngDoBootstrap` method of the root module.');\n      throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, errorMessage);\n    }\n    let componentFactory;\n    if (isComponentFactory) {\n      componentFactory = componentOrFactory;\n    } else {\n      const resolver = this._injector.get(ComponentFactoryResolver$1);\n      componentFactory = resolver.resolveComponentFactory(componentOrFactory);\n    }\n    this.componentTypes.push(componentFactory.componentType);\n    // Create a factory associated with the current module if it's not bound to some other\n    const ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef$1);\n    const selectorOrNode = rootSelectorOrNode || componentFactory.selector;\n    const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);\n    const nativeElement = compRef.location.nativeElement;\n    const testability = compRef.injector.get(TESTABILITY, null);\n    testability?.registerApplication(nativeElement);\n    compRef.onDestroy(() => {\n      this.detachView(compRef.hostView);\n      remove(this.components, compRef);\n      testability?.unregisterApplication(nativeElement);\n    });\n    this._loadComponent(compRef);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const _console = this._injector.get(Console);\n      _console.log(`Angular is running in development mode.`);\n    }\n    return compRef;\n  }\n  /**\n   * Invoke this method to explicitly process change detection and its side-effects.\n   *\n   * In development mode, `tick()` also performs a second change detection cycle to ensure that no\n   * further changes are detected. If additional changes are picked up during this second cycle,\n   * bindings in the app have side-effects that cannot be resolved in a single change detection\n   * pass.\n   * In this case, Angular throws an error, since an Angular application can only have one change\n   * detection pass during which all change detection must complete.\n   */\n  tick() {\n    if (!this.zonelessEnabled) {\n      this.dirtyFlags |= 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */;\n    }\n    this._tick();\n  }\n  /** @internal */\n  _tick = () => {\n    if (this.tracingSnapshot !== null) {\n      const snapshot = this.tracingSnapshot;\n      this.tracingSnapshot = null;\n      // Ensure we always run `_tick()` in the context of the most recent snapshot,\n      // if one exists. Snapshots may be reference counted by the implementation so\n      // we want to ensure that if we request a snapshot that we use it.\n      snapshot.run(TracingAction.CHANGE_DETECTION, this._tick);\n      snapshot.dispose();\n      return;\n    }\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    if (this._runningTick) {\n      throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');\n    }\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      this._runningTick = true;\n      this.synchronize();\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        for (let view of this.allViews) {\n          view.checkNoChanges();\n        }\n      }\n    } catch (e) {\n      // Attention: Don't rethrow as it could cancel subscriptions to Observables!\n      this.internalErrorHandler(e);\n    } finally {\n      this._runningTick = false;\n      setActiveConsumer$1(prevConsumer);\n      this.afterTick.next();\n    }\n  };\n  /**\n   * Performs the core work of synchronizing the application state with the UI, resolving any\n   * pending dirtiness (potentially in a loop).\n   */\n  synchronize() {\n    if (this._rendererFactory === null && !this._injector.destroyed) {\n      this._rendererFactory = this._injector.get(RendererFactory2, null, {\n        optional: true\n      });\n    }\n    // When beginning synchronization, all deferred dirtiness becomes active dirtiness.\n    this.dirtyFlags |= this.deferredDirtyFlags;\n    this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n    let runs = 0;\n    while (this.dirtyFlags !== 0 /* ApplicationRefDirtyFlags.None */ && runs++ < MAXIMUM_REFRESH_RERUNS) {\n      this.synchronizeOnce();\n    }\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && runs >= MAXIMUM_REFRESH_RERUNS) {\n      throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, ngDevMode && 'Infinite change detection while refreshing application views. ' + 'Ensure views are not calling `markForCheck` on every template execution or ' + 'that afterRender hooks always mark views for check.');\n    }\n  }\n  /**\n   * Perform a single synchronization pass.\n   */\n  synchronizeOnce() {\n    // If we happened to loop, deferred dirtiness can be processed as active dirtiness again.\n    this.dirtyFlags |= this.deferredDirtyFlags;\n    this.deferredDirtyFlags = 0 /* ApplicationRefDirtyFlags.None */;\n    // First, process any dirty root effects.\n    if (this.dirtyFlags & 16 /* ApplicationRefDirtyFlags.RootEffects */) {\n      this.dirtyFlags &= ~16 /* ApplicationRefDirtyFlags.RootEffects */;\n      this.rootEffectScheduler.flush();\n    }\n    // First check dirty views, if there are any.\n    if (this.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {\n      // Change detection on views starts in targeted mode (only check components if they're\n      // marked as dirty) unless global checking is specifically requested via APIs like\n      // `ApplicationRef.tick()` and the `NgZone` integration.\n      const useGlobalCheck = Boolean(this.dirtyFlags & 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */);\n      // Clear the view-related dirty flags.\n      this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;\n      // Set the AfterRender bit, as we're checking views and will need to run afterRender hooks.\n      this.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n      // Check all potentially dirty views.\n      for (let {\n        _lView,\n        notifyErrorHandler\n      } of this.allViews) {\n        detectChangesInViewIfRequired(_lView, notifyErrorHandler, useGlobalCheck, this.zonelessEnabled);\n      }\n      // If `markForCheck()` was called during view checking, it will have set the `ViewTreeCheck`\n      // flag. We clear the flag here because, for backwards compatibility, `markForCheck()`\n      // during view checking doesn't cause the view to be re-checked.\n      this.dirtyFlags &= ~4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;\n      // Check if any views are still dirty after checking and we need to loop back.\n      this.syncDirtyFlagsWithViews();\n      if (this.dirtyFlags & (7 /* ApplicationRefDirtyFlags.ViewTreeAny */ | 16 /* ApplicationRefDirtyFlags.RootEffects */)) {\n        // If any views or effects are still dirty after checking, loop back before running render\n        // hooks.\n        return;\n      }\n    } else {\n      // If we skipped refreshing views above, there might still be unflushed animations\n      // because we never called `detectChangesInternal` on the views.\n      this._rendererFactory?.begin?.();\n      this._rendererFactory?.end?.();\n    }\n    // Even if there were no dirty views, afterRender hooks might still be dirty.\n    if (this.dirtyFlags & 8 /* ApplicationRefDirtyFlags.AfterRender */) {\n      this.dirtyFlags &= ~8 /* ApplicationRefDirtyFlags.AfterRender */;\n      this.afterRenderManager.execute();\n      // afterRender hooks might influence dirty flags.\n    }\n    this.syncDirtyFlagsWithViews();\n  }\n  /**\n   * Checks `allViews` for views which require refresh/traversal, and updates `dirtyFlags`\n   * accordingly, with two potential behaviors:\n   *\n   * 1. If any of our views require updating, then this adds the `ViewTreeTraversal` dirty flag.\n   *    This _should_ be a no-op, since the scheduler should've added the flag at the same time the\n   *    view was marked as needing updating.\n   *\n   *    TODO(alxhub): figure out if this behavior is still needed for edge cases.\n   *\n   * 2. If none of our views require updating, then clear the view-related `dirtyFlag`s. This\n   *    happens when the scheduler is notified of a view becoming dirty, but the view itself isn't\n   *    reachable through traversal from our roots (e.g. it's detached from the CD tree).\n   */\n  syncDirtyFlagsWithViews() {\n    if (this.allViews.some(({\n      _lView\n    }) => requiresRefreshOrTraversal(_lView))) {\n      // If after running all afterRender callbacks new views are dirty, ensure we loop back.\n      this.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n      return;\n    } else {\n      // Even though this flag may be set, none of _our_ views require traversal, and so the\n      // `ApplicationRef` doesn't require any repeated checking.\n      this.dirtyFlags &= ~7 /* ApplicationRefDirtyFlags.ViewTreeAny */;\n    }\n  }\n  /**\n   * Attaches a view so that it will be dirty checked.\n   * The view will be automatically detached when it is destroyed.\n   * This will throw if the view is already attached to a ViewContainer.\n   */\n  attachView(viewRef) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const view = viewRef;\n    this._views.push(view);\n    view.attachToAppRef(this);\n  }\n  /**\n   * Detaches a view from dirty checking again.\n   */\n  detachView(viewRef) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    const view = viewRef;\n    remove(this._views, view);\n    view.detachFromAppRef();\n  }\n  _loadComponent(componentRef) {\n    this.attachView(componentRef.hostView);\n    this.tick();\n    this.components.push(componentRef);\n    // Get the listeners lazily to prevent DI cycles.\n    const listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []);\n    if (ngDevMode && !Array.isArray(listeners)) {\n      throw new RuntimeError(-209 /* RuntimeErrorCode.INVALID_MULTI_PROVIDER */, 'Unexpected type of the `APP_BOOTSTRAP_LISTENER` token value ' + `(expected an array, but got ${typeof listeners}). ` + 'Please check that the `APP_BOOTSTRAP_LISTENER` token is configured as a ' + '`multi: true` provider.');\n    }\n    listeners.forEach(listener => listener(componentRef));\n  }\n  /** @internal */\n  ngOnDestroy() {\n    if (this._destroyed) return;\n    try {\n      // Call all the lifecycle hooks.\n      this._destroyListeners.forEach(listener => listener());\n      // Destroy all registered views.\n      this._views.slice().forEach(view => view.destroy());\n    } finally {\n      // Indicate that this instance is destroyed.\n      this._destroyed = true;\n      // Release all references.\n      this._views = [];\n      this._destroyListeners = [];\n    }\n  }\n  /**\n   * Registers a listener to be called when an instance is destroyed.\n   *\n   * @param callback A callback function to add as a listener.\n   * @returns A function which unregisters a listener.\n   */\n  onDestroy(callback) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();\n    this._destroyListeners.push(callback);\n    return () => remove(this._destroyListeners, callback);\n  }\n  /**\n   * Destroys an Angular application represented by this `ApplicationRef`. Calling this function\n   * will destroy the associated environment injectors as well as all the bootstrapped components\n   * with their views.\n   */\n  destroy() {\n    if (this._destroyed) {\n      throw new RuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, ngDevMode && 'This instance of the `ApplicationRef` has already been destroyed.');\n    }\n    const injector = this._injector;\n    // Check that this injector instance supports destroy operation.\n    if (injector.destroy && !injector.destroyed) {\n      // Destroying an underlying injector will trigger the `ngOnDestroy` lifecycle\n      // hook, which invokes the remaining cleanup actions.\n      injector.destroy();\n    }\n  }\n  /**\n   * Returns the number of attached views.\n   */\n  get viewCount() {\n    return this._views.length;\n  }\n  warnIfDestroyed() {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._destroyed) {\n      console.warn(formatRuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));\n    }\n  }\n  static ɵfac = function ApplicationRef_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationRef)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ApplicationRef,\n    factory: ApplicationRef.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationRef, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction remove(list, el) {\n  const index = list.indexOf(el);\n  if (index > -1) {\n    list.splice(index, 1);\n  }\n}\nfunction detectChangesInViewIfRequired(lView, notifyErrorHandler, isFirstPass, zonelessEnabled) {\n  // When re-checking, only check views which actually need it.\n  if (!isFirstPass && !requiresRefreshOrTraversal(lView)) {\n    return;\n  }\n  const mode = isFirstPass && !zonelessEnabled ?\n  // The first pass is always in Global mode, which includes `CheckAlways` views.\n  0 /* ChangeDetectionMode.Global */ :\n  // Only refresh views with the `RefreshView` flag or views is a changed signal\n  1 /* ChangeDetectionMode.Targeted */;\n  detectChangesInternal(lView, notifyErrorHandler, mode);\n}\n\n/**\n * Schedules triggering of a defer block for `on idle` and `on timer` conditions.\n */\nfunction scheduleDelayedTrigger(scheduleFn) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  renderPlaceholder(lView, tNode);\n  // Exit early to avoid invoking `scheduleFn`, which would\n  // add `setTimeout` call and potentially delay serialization\n  // on the server unnecessarily.\n  if (!shouldTriggerDeferBlock(0 /* TriggerType.Regular */, lView)) return;\n  const injector = lView[INJECTOR];\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const cleanupFn = scheduleFn(() => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), injector);\n  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, cleanupFn);\n}\n/**\n * Schedules prefetching for `on idle` and `on timer` triggers.\n *\n * @param scheduleFn A function that does the scheduling.\n */\nfunction scheduleDelayedPrefetching(scheduleFn, trigger) {\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n  const lView = getLView();\n  const injector = lView[INJECTOR];\n  // Only trigger the scheduled trigger on the browser\n  // since we don't want to delay the server response.\n  const tNode = getCurrentTNode();\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    const lDetails = getLDeferBlockDetails(lView, tNode);\n    const prefetch = () => triggerPrefetching(tDetails, lView, tNode);\n    const cleanupFn = scheduleFn(prefetch, injector);\n    storeTriggerCleanupFn(1 /* TriggerType.Prefetch */, lDetails, cleanupFn);\n  }\n}\n/**\n * Schedules hydration triggering of a defer block for `on idle` and `on timer` conditions.\n */\nfunction scheduleDelayedHydrating(scheduleFn, lView, tNode) {\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) return;\n  // Only trigger the scheduled trigger on the browser\n  // since we don't want to delay the server response.\n  const injector = lView[INJECTOR];\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n  ngDevMode && assertSsrIdDefined(ssrUniqueId);\n  const cleanupFn = scheduleFn(() => triggerHydrationFromBlockName(injector, ssrUniqueId), injector);\n  storeTriggerCleanupFn(2 /* TriggerType.Hydrate */, lDetails, cleanupFn);\n}\n/**\n * Trigger prefetching of dependencies for a defer block.\n *\n * @param tDetails Static information about this defer block.\n * @param lView LView of a host view.\n * @param tNode TNode that represents a defer block.\n */\nfunction triggerPrefetching(tDetails, lView, tNode) {\n  triggerResourceLoading(tDetails, lView, tNode);\n}\n/**\n * Trigger loading of defer block dependencies if the process hasn't started yet.\n *\n * @param tDetails Static information about this defer block.\n * @param lView LView of a host view.\n */\nfunction triggerResourceLoading(tDetails, lView, tNode) {\n  const injector = lView[INJECTOR];\n  const tView = lView[TVIEW];\n  if (tDetails.loadingState !== DeferDependenciesLoadingState.NOT_STARTED) {\n    // If the loading status is different from initial one, it means that\n    // the loading of dependencies is in progress and there is nothing to do\n    // in this function. All details can be obtained from the `tDetails` object.\n    return tDetails.loadingPromise ?? Promise.resolve();\n  }\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const primaryBlockTNode = getPrimaryBlockTNode(tView, tDetails);\n  // Switch from NOT_STARTED -> IN_PROGRESS state.\n  tDetails.loadingState = DeferDependenciesLoadingState.IN_PROGRESS;\n  // Prefetching is triggered, cleanup all registered prefetch triggers.\n  invokeTriggerCleanupFns(1 /* TriggerType.Prefetch */, lDetails);\n  let dependenciesFn = tDetails.dependencyResolverFn;\n  if (ngDevMode) {\n    // Check if dependency function interceptor is configured.\n    const deferDependencyInterceptor = injector.get(DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, null, {\n      optional: true\n    });\n    if (deferDependencyInterceptor) {\n      dependenciesFn = deferDependencyInterceptor.intercept(dependenciesFn);\n    }\n  }\n  // Indicate that an application is not stable and has a pending task.\n  const pendingTasks = injector.get(PendingTasksInternal);\n  const taskId = pendingTasks.add();\n  // The `dependenciesFn` might be `null` when all dependencies within\n  // a given defer block were eagerly referenced elsewhere in a file,\n  // thus no dynamic `import()`s were produced.\n  if (!dependenciesFn) {\n    tDetails.loadingPromise = Promise.resolve().then(() => {\n      tDetails.loadingPromise = null;\n      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n      pendingTasks.remove(taskId);\n    });\n    return tDetails.loadingPromise;\n  }\n  // Start downloading of defer block dependencies.\n  tDetails.loadingPromise = Promise.allSettled(dependenciesFn()).then(results => {\n    let failed = false;\n    const directiveDefs = [];\n    const pipeDefs = [];\n    for (const result of results) {\n      if (result.status === 'fulfilled') {\n        const dependency = result.value;\n        const directiveDef = getComponentDef(dependency) || getDirectiveDef(dependency);\n        if (directiveDef) {\n          directiveDefs.push(directiveDef);\n        } else {\n          const pipeDef = getPipeDef$1(dependency);\n          if (pipeDef) {\n            pipeDefs.push(pipeDef);\n          }\n        }\n      } else {\n        failed = true;\n        break;\n      }\n    }\n    // Loading is completed, we no longer need the loading Promise\n    // and a pending task should also be removed.\n    tDetails.loadingPromise = null;\n    pendingTasks.remove(taskId);\n    if (failed) {\n      tDetails.loadingState = DeferDependenciesLoadingState.FAILED;\n      if (tDetails.errorTmplIndex === null) {\n        const templateLocation = ngDevMode ? getTemplateLocationDetails(lView) : '';\n        const error = new RuntimeError(750 /* RuntimeErrorCode.DEFER_LOADING_FAILED */, ngDevMode && 'Loading dependencies for `@defer` block failed, ' + `but no \\`@error\\` block was configured${templateLocation}. ` + 'Consider using the `@error` block to render an error state.');\n        handleError(lView, error);\n      }\n    } else {\n      tDetails.loadingState = DeferDependenciesLoadingState.COMPLETE;\n      // Update directive and pipe registries to add newly downloaded dependencies.\n      const primaryBlockTView = primaryBlockTNode.tView;\n      if (directiveDefs.length > 0) {\n        primaryBlockTView.directiveRegistry = addDepsToRegistry(primaryBlockTView.directiveRegistry, directiveDefs);\n        // Extract providers from all NgModules imported by standalone components\n        // used within this defer block.\n        const directiveTypes = directiveDefs.map(def => def.type);\n        const providers = internalImportProvidersFrom(false, ...directiveTypes);\n        tDetails.providers = providers;\n      }\n      if (pipeDefs.length > 0) {\n        primaryBlockTView.pipeRegistry = addDepsToRegistry(primaryBlockTView.pipeRegistry, pipeDefs);\n      }\n    }\n  });\n  return tDetails.loadingPromise;\n}\n/**\n * Defines whether we should proceed with triggering a given defer block.\n */\nfunction shouldTriggerDeferBlock(triggerType, lView) {\n  // prevents triggering regular triggers when on the server.\n  if (triggerType === 0 /* TriggerType.Regular */ && typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return false;\n  }\n  // prevents triggering in the case of a test run with manual defer block configuration.\n  const injector = lView[INJECTOR];\n  const config = injector.get(DEFER_BLOCK_CONFIG, null, {\n    optional: true\n  });\n  if (config?.behavior === DeferBlockBehavior.Manual) {\n    return false;\n  }\n  return true;\n}\n/**\n * Attempts to trigger loading of defer block dependencies.\n * If the block is already in a loading, completed or an error state -\n * no additional actions are taken.\n */\nfunction triggerDeferBlock(triggerType, lView, tNode) {\n  const tView = lView[TVIEW];\n  const lContainer = lView[tNode.index];\n  ngDevMode && assertLContainer(lContainer);\n  if (!shouldTriggerDeferBlock(triggerType, lView)) return;\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  // Defer block is triggered, cleanup all registered trigger functions.\n  invokeAllTriggerCleanupFns(lDetails);\n  switch (tDetails.loadingState) {\n    case DeferDependenciesLoadingState.NOT_STARTED:\n      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n      triggerResourceLoading(tDetails, lView, tNode);\n      // The `loadingState` might have changed to \"loading\".\n      if (tDetails.loadingState === DeferDependenciesLoadingState.IN_PROGRESS) {\n        renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n      }\n      break;\n    case DeferDependenciesLoadingState.IN_PROGRESS:\n      renderDeferBlockState(DeferBlockState.Loading, tNode, lContainer);\n      renderDeferStateAfterResourceLoading(tDetails, tNode, lContainer);\n      break;\n    case DeferDependenciesLoadingState.COMPLETE:\n      ngDevMode && assertDeferredDependenciesLoaded(tDetails);\n      renderDeferBlockState(DeferBlockState.Complete, tNode, lContainer);\n      break;\n    case DeferDependenciesLoadingState.FAILED:\n      renderDeferBlockState(DeferBlockState.Error, tNode, lContainer);\n      break;\n    default:\n      if (ngDevMode) {\n        throwError('Unknown defer block state');\n      }\n  }\n}\n/**\n * The core mechanism for incremental hydration. This triggers\n * hydration for all the blocks in the tree that need to be hydrated\n * and keeps track of all those blocks that were hydrated along the way.\n *\n * Note: the `replayQueuedEventsFn` is only provided when hydration is invoked\n * as a result of an event replay (via JsAction). When hydration is invoked from\n * an instruction set (e.g. `deferOnImmediate`) - there is no need to replay any\n * events.\n */\nasync function triggerHydrationFromBlockName(injector, blockName, replayQueuedEventsFn) {\n  const dehydratedBlockRegistry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n  const blocksBeingHydrated = dehydratedBlockRegistry.hydrating;\n  // Make sure we don't hydrate/trigger the same thing multiple times\n  if (blocksBeingHydrated.has(blockName)) {\n    return;\n  }\n  // The parent promise is the possible case of a list of defer blocks already being queued\n  // If it is queued, it'll exist; otherwise it'll be null. The hydration queue will contain all\n  // elements that need to be hydrated, sans any that have promises already\n  const {\n    parentBlockPromise,\n    hydrationQueue\n  } = getParentBlockHydrationQueue(blockName, injector);\n  // The hydrating map in the registry prevents re-triggering hydration for a block that's already in\n  // the hydration queue. Here we generate promises for each of the blocks about to be hydrated\n  populateHydratingStateForQueue(dehydratedBlockRegistry, hydrationQueue);\n  // Trigger resource loading and hydration for the blocks in the queue in the order of highest block\n  // to lowest block. Once a block has finished resource loading, after next render fires after hydration\n  // finishes. The new block will have its defer instruction called and will be in the registry.\n  // Due to timing related to potential nested control flow, this has to be scheduled after the next render.\n  // Indicate that we have some pending async work.\n  const pendingTasks = injector.get(PendingTasksInternal);\n  const taskId = pendingTasks.add();\n  // If the parent block was being hydrated, but the process has\n  // not yet complete, wait until parent block promise settles before\n  // going over dehydrated blocks from the queue.\n  if (parentBlockPromise !== null) {\n    await parentBlockPromise;\n  }\n  // Actually do the triggering and hydration of the queue of blocks\n  for (const dehydratedBlockId of hydrationQueue) {\n    await triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry);\n    await nextRender(injector);\n    // TODO(incremental-hydration): assert (in dev mode) that a defer block is present in the dehydrated registry\n    // at this point. If not - it means that the block has not been hydrated, for example due to different\n    // `@if` conditions on the client and the server. If we detect this case, we should also do the cleanup\n    // of all child block (promises, registry state, etc).\n    // TODO(incremental-hydration): call `rejectFn` when lDetails[DEFER_BLOCK_STATE] is `DeferBlockState.Error`.\n    blocksBeingHydrated.get(dehydratedBlockId).resolve();\n    // TODO(incremental-hydration): consider adding a wait for stability here\n  }\n  // Await hydration completion for the requested block.\n  await blocksBeingHydrated.get(blockName)?.promise;\n  // All async work is done, remove the taskId from the registry.\n  pendingTasks.remove(taskId);\n  // Replay any queued events, if any exist and the replay operation was requested.\n  if (replayQueuedEventsFn) {\n    replayQueuedEventsFn(hydrationQueue);\n  }\n  // Cleanup after hydration of all affected defer blocks.\n  cleanupHydratedDeferBlocks(dehydratedBlockRegistry.get(blockName), hydrationQueue, dehydratedBlockRegistry, injector.get(ApplicationRef));\n}\n/**\n * Generates a new promise for every defer block in the hydrating queue\n */\nfunction populateHydratingStateForQueue(registry, queue) {\n  for (let blockId of queue) {\n    registry.hydrating.set(blockId, Promise.withResolvers());\n  }\n}\n// Waits for the next render cycle to complete\nfunction nextRender(injector) {\n  return new Promise(resolveFn => afterNextRender(resolveFn, {\n    injector\n  }));\n}\nasync function triggerResourceLoadingForHydration(dehydratedBlockId, dehydratedBlockRegistry) {\n  const deferBlock = dehydratedBlockRegistry.get(dehydratedBlockId);\n  // Since we trigger hydration for nested defer blocks in a sequence (parent -> child),\n  // there is a chance that a defer block may not be present at hydration time. For example,\n  // when a nested block was in an `@if` condition, which has changed.\n  if (deferBlock === null) {\n    // TODO(incremental-hydration): handle the cleanup for cases when\n    // defer block is no longer present during hydration (e.g. `@if` condition\n    // has changed during hydration/rendering).\n    return;\n  }\n  const {\n    tNode,\n    lView\n  } = deferBlock;\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  return new Promise(resolve => {\n    onDeferBlockCompletion(lDetails, resolve);\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  });\n}\n/**\n * Registers cleanup functions for a defer block when the block has finished\n * fetching and rendering\n */\nfunction onDeferBlockCompletion(lDetails, callback) {\n  if (!Array.isArray(lDetails[ON_COMPLETE_FNS])) {\n    lDetails[ON_COMPLETE_FNS] = [];\n  }\n  lDetails[ON_COMPLETE_FNS].push(callback);\n}\n/**\n * Determines whether specific trigger types should be attached during an instruction firing\n * to ensure the proper triggers for a given type are used.\n */\nfunction shouldAttachTrigger(triggerType, lView, tNode) {\n  if (triggerType === 0 /* TriggerType.Regular */) {\n    return shouldAttachRegularTrigger(lView, tNode);\n  } else if (triggerType === 2 /* TriggerType.Hydrate */) {\n    return !shouldAttachRegularTrigger(lView, tNode);\n  }\n  // TriggerType.Prefetch is active only on the client\n  return !(typeof ngServerMode !== 'undefined' && ngServerMode);\n}\n/**\n * Defines whether a regular trigger logic (e.g. \"on viewport\") should be attached\n * to a defer block. This function defines a condition, which mutually excludes\n * `deferOn*` and `deferHydrateOn*` triggers, to make sure only one of the trigger\n * types is active for a block with the current state.\n */\nfunction shouldAttachRegularTrigger(lView, tNode) {\n  const injector = lView[INJECTOR];\n  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n  const incrementalHydrationEnabled = isIncrementalHydrationEnabled(injector);\n  const hasHydrateTriggers = tDetails.flags !== null && (tDetails.flags & 1 /* TDeferDetailsFlags.HasHydrateTriggers */) === 1 /* TDeferDetailsFlags.HasHydrateTriggers */;\n  // On the server:\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // Regular triggers are activated on the server when:\n    //  - Either Incremental Hydration is *not* enabled\n    //  - Or Incremental Hydration is enabled, but a given block doesn't have \"hydrate\" triggers\n    return !incrementalHydrationEnabled || !hasHydrateTriggers;\n  }\n  // On the client:\n  const lDetails = getLDeferBlockDetails(lView, tNode);\n  const wasServerSideRendered = lDetails[SSR_UNIQUE_ID] !== null;\n  if (hasHydrateTriggers && wasServerSideRendered && incrementalHydrationEnabled) {\n    return false;\n  }\n  return true;\n}\n/**\n * Retrives a Defer Block's list of hydration triggers\n */\nfunction getHydrateTriggers(tView, tNode) {\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  return tDetails.hydrateTriggers ??= new Map();\n}\n/**\n * Loops through all defer block summaries and ensures all the blocks triggers are\n * properly initialized\n */\nfunction processAndInitTriggers(injector, blockData, nodes) {\n  const idleElements = [];\n  const timerElements = [];\n  const viewportElements = [];\n  const immediateElements = [];\n  for (let [blockId, blockSummary] of blockData) {\n    const commentNode = nodes.get(blockId);\n    if (commentNode !== undefined) {\n      const numRootNodes = blockSummary.data[NUM_ROOT_NODES];\n      let currentNode = commentNode;\n      for (let i = 0; i < numRootNodes; i++) {\n        currentNode = currentNode.previousSibling;\n        if (currentNode.nodeType !== Node.ELEMENT_NODE) {\n          continue;\n        }\n        const elementTrigger = {\n          el: currentNode,\n          blockName: blockId\n        };\n        // hydrate\n        if (blockSummary.hydrate.idle) {\n          idleElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.immediate) {\n          immediateElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.timer !== null) {\n          elementTrigger.delay = blockSummary.hydrate.timer;\n          timerElements.push(elementTrigger);\n        }\n        if (blockSummary.hydrate.viewport) {\n          viewportElements.push(elementTrigger);\n        }\n      }\n    }\n  }\n  setIdleTriggers(injector, idleElements);\n  setImmediateTriggers(injector, immediateElements);\n  setViewportTriggers(injector, viewportElements);\n  setTimerTriggers(injector, timerElements);\n}\nfunction setIdleTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n    const cleanupFn = onIdle(onInvoke, injector);\n    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n  }\n}\nfunction setViewportTriggers(injector, elementTriggers) {\n  if (elementTriggers.length > 0) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    for (let elementTrigger of elementTriggers) {\n      const cleanupFn = onViewport(elementTrigger.el, () => triggerHydrationFromBlockName(injector, elementTrigger.blockName), injector);\n      registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n    }\n  }\n}\nfunction setTimerTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    const registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    const onInvoke = () => triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n    const timerFn = onTimer(elementTrigger.delay);\n    const cleanupFn = timerFn(onInvoke, injector);\n    registry.addCleanupFn(elementTrigger.blockName, cleanupFn);\n  }\n}\nfunction setImmediateTriggers(injector, elementTriggers) {\n  for (const elementTrigger of elementTriggers) {\n    // Note: we intentionally avoid awaiting each call and instead kick off\n    // th hydration process simultaneously for all defer blocks with this trigger;\n    triggerHydrationFromBlockName(injector, elementTrigger.blockName);\n  }\n}\n\n/**\n * Creates runtime data structures for defer blocks.\n *\n * @param index Index of the `defer` instruction.\n * @param primaryTmplIndex Index of the template with the primary block content.\n * @param dependencyResolverFn Function that contains dependencies for this defer block.\n * @param loadingTmplIndex Index of the template with the loading block content.\n * @param placeholderTmplIndex Index of the template with the placeholder block content.\n * @param errorTmplIndex Index of the template with the error block content.\n * @param loadingConfigIndex Index in the constants array of the configuration of the loading.\n *     block.\n * @param placeholderConfigIndex Index in the constants array of the configuration of the\n *     placeholder block.\n * @param enableTimerScheduling Function that enables timer-related scheduling if `after`\n *     or `minimum` parameters are setup on the `@loading` or `@placeholder` blocks.\n * @param flags A set of flags to define a particular behavior (e.g. to indicate that\n *              hydrate triggers are present and regular triggers should be deactivated\n *              in certain scenarios).\n *\n * @codeGenApi\n */\nfunction ɵɵdefer(index, primaryTmplIndex, dependencyResolverFn, loadingTmplIndex, placeholderTmplIndex, errorTmplIndex, loadingConfigIndex, placeholderConfigIndex, enableTimerScheduling, flags) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = declareTemplate(lView, tView, index, null, 0, 0);\n  const injector = lView[INJECTOR];\n  if (tView.firstCreatePass) {\n    performanceMarkFeature('NgDefer');\n    const tDetails = {\n      primaryTmplIndex,\n      loadingTmplIndex: loadingTmplIndex ?? null,\n      placeholderTmplIndex: placeholderTmplIndex ?? null,\n      errorTmplIndex: errorTmplIndex ?? null,\n      placeholderBlockConfig: null,\n      loadingBlockConfig: null,\n      dependencyResolverFn: dependencyResolverFn ?? null,\n      loadingState: DeferDependenciesLoadingState.NOT_STARTED,\n      loadingPromise: null,\n      providers: null,\n      hydrateTriggers: null,\n      prefetchTriggers: null,\n      flags: flags ?? 0 /* TDeferDetailsFlags.Default */\n    };\n    enableTimerScheduling?.(tView, tDetails, placeholderConfigIndex, loadingConfigIndex);\n    setTDeferBlockDetails(tView, adjustedIndex, tDetails);\n  }\n  const lContainer = lView[adjustedIndex];\n  // If hydration is enabled, looks up dehydrated views in the DOM\n  // using hydration annotation info and stores those views on LContainer.\n  // In client-only mode, this function is a noop.\n  populateDehydratedViewsInLContainer(lContainer, tNode, lView);\n  let ssrBlockState = null;\n  let ssrUniqueId = null;\n  if (lContainer[DEHYDRATED_VIEWS]?.length > 0) {\n    const info = lContainer[DEHYDRATED_VIEWS][0].data;\n    ssrUniqueId = info[DEFER_BLOCK_ID] ?? null;\n    ssrBlockState = info[DEFER_BLOCK_STATE$1];\n  }\n  // Init instance-specific defer details and store it.\n  const lDetails = [null,\n  // NEXT_DEFER_BLOCK_STATE\n  DeferBlockInternalState.Initial,\n  // DEFER_BLOCK_STATE\n  null,\n  // STATE_IS_FROZEN_UNTIL\n  null,\n  // LOADING_AFTER_CLEANUP_FN\n  null,\n  // TRIGGER_CLEANUP_FNS\n  null,\n  // PREFETCH_TRIGGER_CLEANUP_FNS\n  ssrUniqueId,\n  // SSR_UNIQUE_ID\n  ssrBlockState,\n  // SSR_BLOCK_STATE\n  null,\n  // ON_COMPLETE_FNS\n  null // HYDRATE_TRIGGER_CLEANUP_FNS\n  ];\n  setLDeferBlockDetails(lView, adjustedIndex, lDetails);\n  let registry = null;\n  if (ssrUniqueId !== null) {\n    ngDevMode && assertIncrementalHydrationIsConfigured(injector);\n    // Store this defer block in the registry, to have an access to\n    // internal data structures from hydration runtime code.\n    registry = injector.get(DEHYDRATED_BLOCK_REGISTRY);\n    registry.add(ssrUniqueId, {\n      lView,\n      tNode,\n      lContainer\n    });\n  }\n  const onLViewDestroy = () => {\n    invokeAllTriggerCleanupFns(lDetails);\n    if (ssrUniqueId !== null) {\n      registry?.cleanup([ssrUniqueId]);\n    }\n  };\n  // When defer block is triggered - unsubscribe from LView destroy cleanup.\n  storeTriggerCleanupFn(0 /* TriggerType.Regular */, lDetails, () => removeLViewOnDestroy(lView, onLViewDestroy));\n  storeLViewOnDestroy(lView, onLViewDestroy);\n}\n/**\n * Loads defer block dependencies when a trigger value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const value = Boolean(rawValue); // handle truthy or falsy values\n      const lDetails = getLDeferBlockDetails(lView, tNode);\n      const renderedState = lDetails[DEFER_BLOCK_STATE];\n      if (value === false && renderedState === DeferBlockInternalState.Initial) {\n        // If nothing is rendered yet, render a placeholder (if defined).\n        renderPlaceholder(lView, tNode);\n      } else if (value === true && (renderedState === DeferBlockInternalState.Initial || renderedState === DeferBlockState.Placeholder)) {\n        triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode);\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Prefetches the deferred content when a value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      const value = Boolean(rawValue); // handle truthy or falsy values\n      const tView = lView[TVIEW];\n      const tNode = getSelectedTNode();\n      const tDetails = getTDeferBlockDetails(tView, tNode);\n      if (value === true && tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n        // If loading has not been started yet, trigger it now.\n        triggerPrefetching(tDetails, lView, tNode);\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  }\n}\n/**\n * Hydrates the deferred content when a value becomes truthy.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateWhen(rawValue) {\n  const lView = getLView();\n  const tNode = getSelectedTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  // TODO(incremental-hydration): audit all defer instructions to reduce unnecessary work by\n  // moving function calls inside their relevant control flow blocks\n  const bindingIndex = nextBindingIndex();\n  const tView = getTView();\n  const hydrateTriggers = getHydrateTriggers(tView, tNode);\n  hydrateTriggers.set(6 /* DeferBlockTrigger.When */, null);\n  if (bindingUpdated(lView, bindingIndex, rawValue)) {\n    if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n      // We are on the server and SSR for defer blocks is enabled.\n      triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n    } else {\n      const injector = lView[INJECTOR];\n      const prevConsumer = setActiveConsumer$1(null);\n      try {\n        const value = Boolean(rawValue); // handle truthy or falsy values\n        if (value === true) {\n          // The `when` condition has changed to `true`, trigger defer block loading\n          // if the block is either in initial (nothing is rendered) or a placeholder\n          // state.\n          const lDetails = getLDeferBlockDetails(lView, tNode);\n          const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n          ngDevMode && assertSsrIdDefined(ssrUniqueId);\n          triggerHydrationFromBlockName(injector, ssrUniqueId);\n        }\n      } finally {\n        setActiveConsumer$1(prevConsumer);\n      }\n    }\n  }\n}\n/**\n * Specifies that hydration never occurs.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateNever() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(7 /* DeferBlockTrigger.Never */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  scheduleDelayedTrigger(onIdle);\n}\n/**\n * Sets up logic to handle the `prefetch on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  scheduleDelayedPrefetching(onIdle, 0 /* DeferBlockTrigger.Idle */);\n}\n/**\n * Sets up logic to handle the `on idle` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnIdle() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(0 /* DeferBlockTrigger.Idle */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    scheduleDelayedHydrating(onIdle, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on immediate` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  // Render placeholder block only if loading template is not present and we're on\n  // the client to avoid content flickering, since it would be immediately replaced\n  // by the loading block.\n  const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n  if (tDetails.loadingTmplIndex === null) {\n    renderPlaceholder(lView, tNode);\n  }\n  triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode);\n}\n/**\n * Sets up logic to handle the `prefetch on immediate` deferred trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    triggerResourceLoading(tDetails, lView, tNode);\n  }\n}\n/**\n * Sets up logic to handle the `on immediate` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnImmediate() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(1 /* DeferBlockTrigger.Immediate */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    const injector = lView[INJECTOR];\n    const lDetails = getLDeferBlockDetails(lView, tNode);\n    const ssrUniqueId = lDetails[SSR_UNIQUE_ID];\n    ngDevMode && assertSsrIdDefined(ssrUniqueId);\n    triggerHydrationFromBlockName(injector, ssrUniqueId);\n  }\n}\n/**\n * Creates runtime data structures for the `on timer` deferred trigger.\n * @param delay Amount of time to wait before loading the content.\n * @codeGenApi\n */\nfunction ɵɵdeferOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  scheduleDelayedTrigger(onTimer(delay));\n}\n/**\n * Creates runtime data structures for the `prefetch on timer` deferred trigger.\n * @param delay Amount of time to wait before prefetching the content.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  scheduleDelayedPrefetching(onTimer(delay), 5 /* DeferBlockTrigger.Timer */);\n}\n/**\n * Creates runtime data structures for the `on timer` hydrate trigger.\n * @param delay Amount of time to wait before loading the content.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnTimer(delay) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(5 /* DeferBlockTrigger.Timer */, {\n    delay\n  });\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  } else {\n    scheduleDelayedHydrating(onTimer(delay), lView, tNode);\n  }\n}\n/**\n * Creates runtime data structures for the `on hover` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnHover(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on hover` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnHover(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onHover, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on hover` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnHover() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(4 /* DeferBlockTrigger.Hover */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on hover is handled by JSAction in\n  // event_replay.ts.\n}\n/**\n * Creates runtime data structures for the `on interaction` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnInteraction(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on interaction` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnInteraction(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onInteraction, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on interaction` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnInteraction() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(3 /* DeferBlockTrigger.Interaction */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on interaction is handled by JSAction in\n  // event_replay.ts.\n}\n/**\n * Creates runtime data structures for the `on viewport` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferOnViewport(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(0 /* TriggerType.Regular */, lView, tNode)) return;\n  renderPlaceholder(lView, tNode);\n  // Avoid adding event listeners when this instruction is invoked on the server.\n  if (!(typeof ngServerMode !== 'undefined' && ngServerMode)) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewport, () => triggerDeferBlock(0 /* TriggerType.Regular */, lView, tNode), 0 /* TriggerType.Regular */);\n  }\n}\n/**\n * Creates runtime data structures for the `prefetch on viewport` deferred trigger.\n * @param triggerIndex Index at which to find the trigger element.\n * @param walkUpTimes Number of times to walk up/down the tree hierarchy to find the trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferPrefetchOnViewport(triggerIndex, walkUpTimes) {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(1 /* TriggerType.Prefetch */, lView, tNode)) return;\n  const tView = lView[TVIEW];\n  const tDetails = getTDeferBlockDetails(tView, tNode);\n  if (tDetails.loadingState === DeferDependenciesLoadingState.NOT_STARTED) {\n    registerDomTrigger(lView, tNode, triggerIndex, walkUpTimes, onViewport, () => triggerPrefetching(tDetails, lView, tNode), 1 /* TriggerType.Prefetch */);\n  }\n}\n/**\n * Creates runtime data structures for the `on viewport` hydrate trigger.\n * @codeGenApi\n */\nfunction ɵɵdeferHydrateOnViewport() {\n  const lView = getLView();\n  const tNode = getCurrentTNode();\n  if (!shouldAttachTrigger(2 /* TriggerType.Hydrate */, lView, tNode)) return;\n  const hydrateTriggers = getHydrateTriggers(getTView(), tNode);\n  hydrateTriggers.set(2 /* DeferBlockTrigger.Viewport */, null);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    // We are on the server and SSR for defer blocks is enabled.\n    triggerDeferBlock(2 /* TriggerType.Hydrate */, lView, tNode);\n  }\n  // The actual triggering of hydration on viewport happens in triggering.ts,\n  // since these instructions won't exist for dehydrated content.\n}\n\n/**\n * Updates the value of or removes a bound attribute on an Element.\n *\n * Used in the case of `[attr.title]=\"value\"`\n *\n * @param name name The name of the attribute.\n * @param value value The attribute is removed when value is `null` or `undefined`.\n *                  Otherwise the attribute value is set to the stringified value.\n * @param sanitizer An optional function used to sanitize the value.\n * @param namespace Optional namespace to use when setting the attribute.\n *\n * @codeGenApi\n */\nfunction ɵɵattribute(name, value, sanitizer, namespace) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);\n  }\n  return ɵɵattribute;\n}\n\n/**\n * Create interpolation bindings with a variable number of expressions.\n *\n * If there are 1 to 8 expressions `interpolation1()` to `interpolation8()` should be used instead.\n * Those are faster because there is no need to create an array of expressions and iterate over it.\n *\n * `values`:\n * - has static text at even indexes,\n * - has evaluated expressions at odd indexes.\n *\n * Returns the concatenated string when any of the arguments changes, `NO_CHANGE` otherwise.\n */\nfunction interpolationV(lView, values) {\n  ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');\n  ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');\n  let isBindingUpdated = false;\n  let bindingIndex = getBindingIndex();\n  for (let i = 1; i < values.length; i += 2) {\n    // Check if bindings (odd indexes) have changed\n    isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;\n  }\n  setBindingIndex(bindingIndex);\n  if (!isBindingUpdated) {\n    return NO_CHANGE;\n  }\n  // Build the updated content\n  let content = values[0];\n  for (let i = 1; i < values.length; i += 2) {\n    content += renderStringify(values[i]) + values[i + 1];\n  }\n  return content;\n}\n/**\n * Creates an interpolation binding with 1 expression.\n *\n * @param prefix static value used for concatenation only.\n * @param v0 value checked for change.\n * @param suffix static value used for concatenation only.\n */\nfunction interpolation1(lView, prefix, v0, suffix) {\n  const different = bindingUpdated(lView, nextBindingIndex(), v0);\n  return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 2 expressions.\n */\nfunction interpolation2(lView, prefix, v0, i0, v1, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated2(lView, bindingIndex, v0, v1);\n  incrementBindingIndex(2);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 3 expressions.\n */\nfunction interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);\n  incrementBindingIndex(3);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;\n}\n/**\n * Create an interpolation binding with 4 expressions.\n */\nfunction interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const bindingIndex = getBindingIndex();\n  const different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  incrementBindingIndex(4);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 5 expressions.\n */\nfunction interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated(lView, bindingIndex + 4, v4) || different;\n  incrementBindingIndex(5);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 6 expressions.\n */\nfunction interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;\n  incrementBindingIndex(6);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 7 expressions.\n */\nfunction interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;\n  incrementBindingIndex(7);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;\n}\n/**\n * Creates an interpolation binding with 8 expressions.\n */\nfunction interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const bindingIndex = getBindingIndex();\n  let different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);\n  different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;\n  incrementBindingIndex(8);\n  return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;\n}\n\n/**\n *\n * Update an interpolated attribute on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate1('title', 'prefix', v0, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix);\n  }\n  return ɵɵattributeInterpolate1;\n}\n/**\n *\n * Update an interpolated attribute on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix);\n  }\n  return ɵɵattributeInterpolate2;\n}\n/**\n *\n * Update an interpolated attribute on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate3(\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);\n  }\n  return ɵɵattributeInterpolate3;\n}\n/**\n *\n * Update an interpolated attribute on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate4(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);\n  }\n  return ɵɵattributeInterpolate4;\n}\n/**\n *\n * Update an interpolated attribute on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate5(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);\n  }\n  return ɵɵattributeInterpolate5;\n}\n/**\n *\n * Update an interpolated attribute on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate6(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);\n  }\n  return ɵɵattributeInterpolate6;\n}\n/**\n *\n * Update an interpolated attribute on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate7(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);\n  }\n  return ɵɵattributeInterpolate7;\n}\n/**\n *\n * Update an interpolated attribute on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div attr.title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolate8(\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * @param attrName The name of the attribute to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);\n    ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);\n  }\n  return ɵɵattributeInterpolate8;\n}\n/**\n * Update an interpolated attribute on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵattributeInterpolateV(\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * @param attrName The name of the attribute to update.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {\n  const lView = getLView();\n  const interpolated = interpolationV(lView, values);\n  if (interpolated !== NO_CHANGE) {\n    const tNode = getSelectedTNode();\n    elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);\n    if (ngDevMode) {\n      const interpolationInBetween = [values[0]]; // prefix\n      for (let i = 2; i < values.length; i += 2) {\n        interpolationInBetween.push(values[i]);\n      }\n      storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);\n    }\n  }\n  return ɵɵattributeInterpolateV;\n}\nfunction toTStylingRange(prev, next) {\n  ngDevMode && assertNumberInRange(prev, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return prev << 17 /* StylingRange.PREV_SHIFT */ | next << 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction getTStylingRangePrev(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange >> 17 /* StylingRange.PREV_SHIFT */ & 32767 /* StylingRange.UNSIGNED_MASK */;\n}\nfunction getTStylingRangePrevDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 2 /* StylingRange.PREV_DUPLICATE */) == 2 /* StylingRange.PREV_DUPLICATE */;\n}\nfunction setTStylingRangePrev(tStylingRange, previous) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  ngDevMode && assertNumberInRange(previous, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return tStylingRange & ~4294836224 /* StylingRange.PREV_MASK */ | previous << 17 /* StylingRange.PREV_SHIFT */;\n}\nfunction setTStylingRangePrevDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange | 2 /* StylingRange.PREV_DUPLICATE */;\n}\nfunction getTStylingRangeNext(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 131068 /* StylingRange.NEXT_MASK */) >> 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction setTStylingRangeNext(tStylingRange, next) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  ngDevMode && assertNumberInRange(next, 0, 32767 /* StylingRange.UNSIGNED_MASK */);\n  return tStylingRange & ~131068 /* StylingRange.NEXT_MASK */ |\n  //\n  next << 2 /* StylingRange.NEXT_SHIFT */;\n}\nfunction getTStylingRangeNextDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return (tStylingRange & 1 /* StylingRange.NEXT_DUPLICATE */) === 1 /* StylingRange.NEXT_DUPLICATE */;\n}\nfunction setTStylingRangeNextDuplicate(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  return tStylingRange | 1 /* StylingRange.NEXT_DUPLICATE */;\n}\nfunction getTStylingRangeTail(tStylingRange) {\n  ngDevMode && assertNumber(tStylingRange, 'expected number');\n  const next = getTStylingRangeNext(tStylingRange);\n  return next === 0 ? getTStylingRangePrev(tStylingRange) : next;\n}\n\n/**\n * NOTE: The word `styling` is used interchangeably as style or class styling.\n *\n * This file contains code to link styling instructions together so that they can be replayed in\n * priority order. The file exists because Ivy styling instruction execution order does not match\n * that of the priority order. The purpose of this code is to create a linked list so that the\n * instructions can be traversed in priority order when computing the styles.\n *\n * Assume we are dealing with the following code:\n * ```angular-ts\n * @Component({\n *   template: `\n *     <my-cmp [style]=\" {color: '#001'} \"\n *             [style.color]=\" #002 \"\n *             dir-style-color-1\n *             dir-style-color-2> `\n * })\n * class ExampleComponent {\n *   static ngComp = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#001'});\n *     ɵɵstyleProp('color', '#002');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `[dir-style-color-1]',\n * })\n * class Style1Directive {\n *   @HostBinding('style') style = {color: '#005'};\n *   @HostBinding('style.color') color = '#006';\n *\n *   static ngDir = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#005'});\n *     ɵɵstyleProp('color', '#006');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `[dir-style-color-2]',\n * })\n * class Style2Directive {\n *   @HostBinding('style') style = {color: '#007'};\n *   @HostBinding('style.color') color = '#008';\n *\n *   static ngDir = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#007'});\n *     ɵɵstyleProp('color', '#008');\n *     ...\n *   }\n * }\n *\n * @Directive({\n *   selector: `my-cmp',\n * })\n * class MyComponent {\n *   @HostBinding('style') style = {color: '#003'};\n *   @HostBinding('style.color') color = '#004';\n *\n *   static ngComp = ... {\n *     ...\n *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`\n *     ɵɵstyleMap({color: '#003'});\n *     ɵɵstyleProp('color', '#004');\n *     ...\n *   }\n * }\n * ```\n *\n * The Order of instruction execution is:\n *\n * NOTE: the comment binding location is for illustrative purposes only.\n *\n * ```ts\n * // Template: (ExampleComponent)\n *     ɵɵstyleMap({color: '#001'});   // Binding index: 10\n *     ɵɵstyleProp('color', '#002');  // Binding index: 12\n * // MyComponent\n *     ɵɵstyleMap({color: '#003'});   // Binding index: 20\n *     ɵɵstyleProp('color', '#004');  // Binding index: 22\n * // Style1Directive\n *     ɵɵstyleMap({color: '#005'});   // Binding index: 24\n *     ɵɵstyleProp('color', '#006');  // Binding index: 26\n * // Style2Directive\n *     ɵɵstyleMap({color: '#007'});   // Binding index: 28\n *     ɵɵstyleProp('color', '#008');  // Binding index: 30\n * ```\n *\n * The correct priority order of concatenation is:\n *\n * ```ts\n * // MyComponent\n *     ɵɵstyleMap({color: '#003'});   // Binding index: 20\n *     ɵɵstyleProp('color', '#004');  // Binding index: 22\n * // Style1Directive\n *     ɵɵstyleMap({color: '#005'});   // Binding index: 24\n *     ɵɵstyleProp('color', '#006');  // Binding index: 26\n * // Style2Directive\n *     ɵɵstyleMap({color: '#007'});   // Binding index: 28\n *     ɵɵstyleProp('color', '#008');  // Binding index: 30\n * // Template: (ExampleComponent)\n *     ɵɵstyleMap({color: '#001'});   // Binding index: 10\n *     ɵɵstyleProp('color', '#002');  // Binding index: 12\n * ```\n *\n * What color should be rendered?\n *\n * Once the items are correctly sorted in the list, the answer is simply the last item in the\n * concatenation list which is `#002`.\n *\n * To do so we keep a linked list of all of the bindings which pertain to this element.\n * Notice that the bindings are inserted in the order of execution, but the `TView.data` allows\n * us to traverse them in the order of priority.\n *\n * |Idx|`TView.data`|`LView`          | Notes\n * |---|------------|-----------------|--------------\n * |...|            |                 |\n * |10 |`null`      |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`\n * |11 |`30 | 12`   | ...             |\n * |12 |`color`     |`'#002'`         | `ɵɵstyleProp('color', '#002')`\n * |13 |`10 | 0`    | ...             |\n * |...|            |                 |\n * |20 |`null`      |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`\n * |21 |`0 | 22`    | ...             |\n * |22 |`color`     |`'#004'`         | `ɵɵstyleProp('color', '#004')`\n * |23 |`20 | 24`   | ...             |\n * |24 |`null`      |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`\n * |25 |`22 | 26`   | ...             |\n * |26 |`color`     |`'#006'`         | `ɵɵstyleProp('color', '#006')`\n * |27 |`24 | 28`   | ...             |\n * |28 |`null`      |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`\n * |29 |`26 | 30`   | ...             |\n * |30 |`color`     |`'#008'`         | `ɵɵstyleProp('color', '#008')`\n * |31 |`28 | 10`   | ...             |\n *\n * The above data structure allows us to re-concatenate the styling no matter which data binding\n * changes.\n *\n * NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next\n * duplicate bit. The duplicate bit if true says there either is a binding with the same name or\n * there is a map (which may contain the name). This information is useful in knowing if other\n * styles with higher priority need to be searched for overwrites.\n *\n * NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in\n * `tnode_linked_list_spec.ts` for working example.\n */\nlet __unused_const_as_closure_does_not_like_standalone_comment_blocks__;\n/**\n * Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked\n * list of styles and compute the duplicate flag.\n *\n * Note: this function is executed during `firstUpdatePass` only to populate the `TView.data`.\n *\n * The function works by keeping track of `tStylingRange` which contains two pointers pointing to\n * the head/tail of the template portion of the styles.\n *  - if `isHost === false` (we are template) then insertion is at tail of `TStylingRange`\n *  - if `isHost === true` (we are host binding) then insertion is at head of `TStylingRange`\n *\n * @param tData The `TData` to insert into.\n * @param tNode `TNode` associated with the styling element.\n * @param tStylingKey See `TStylingKey`.\n * @param index location of where `tStyleValue` should be stored (and linked into list.)\n * @param isHostBinding `true` if the insertion is for a `hostBinding`. (insertion is in front of\n *               template.)\n * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.\n *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)\n */\nfunction insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {\n  ngDevMode && assertFirstUpdatePass(getTView());\n  let tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;\n  let tmplHead = getTStylingRangePrev(tBindings);\n  let tmplTail = getTStylingRangeNext(tBindings);\n  tData[index] = tStylingKeyWithStatic;\n  let isKeyDuplicateOfStatic = false;\n  let tStylingKey;\n  if (Array.isArray(tStylingKeyWithStatic)) {\n    // We are case when the `TStylingKey` contains static fields as well.\n    const staticKeyValueArray = tStylingKeyWithStatic;\n    tStylingKey = staticKeyValueArray[1]; // unwrap.\n    // We need to check if our key is present in the static so that we can mark it as duplicate.\n    if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {\n      // tStylingKey is present in the statics, need to mark it as duplicate.\n      isKeyDuplicateOfStatic = true;\n    }\n  } else {\n    tStylingKey = tStylingKeyWithStatic;\n  }\n  if (isHostBinding) {\n    // We are inserting host bindings\n    // If we don't have template bindings then `tail` is 0.\n    const hasTemplateBindings = tmplTail !== 0;\n    // This is important to know because that means that the `head` can't point to the first\n    // template bindings (there are none.) Instead the head points to the tail of the template.\n    if (hasTemplateBindings) {\n      // template head's \"prev\" will point to last host binding or to 0 if no host bindings yet\n      const previousNode = getTStylingRangePrev(tData[tmplHead + 1]);\n      tData[index + 1] = toTStylingRange(previousNode, tmplHead);\n      // if a host binding has already been registered, we need to update the next of that host\n      // binding to point to this one\n      if (previousNode !== 0) {\n        // We need to update the template-tail value to point to us.\n        tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);\n      }\n      // The \"previous\" of the template binding head should point to this host binding\n      tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);\n    } else {\n      tData[index + 1] = toTStylingRange(tmplHead, 0);\n      // if a host binding has already been registered, we need to update the next of that host\n      // binding to point to this one\n      if (tmplHead !== 0) {\n        // We need to update the template-tail value to point to us.\n        tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);\n      }\n      // if we don't have template, the head points to template-tail, and needs to be advanced.\n      tmplHead = index;\n    }\n  } else {\n    // We are inserting in template section.\n    // We need to set this binding's \"previous\" to the current template tail\n    tData[index + 1] = toTStylingRange(tmplTail, 0);\n    ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');\n    if (tmplHead === 0) {\n      tmplHead = index;\n    } else {\n      // We need to update the previous value \"next\" to point to this binding\n      tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);\n    }\n    tmplTail = index;\n  }\n  // Now we need to update / compute the duplicates.\n  // Starting with our location search towards head (least priority)\n  if (isKeyDuplicateOfStatic) {\n    tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);\n  }\n  markDuplicates(tData, tStylingKey, index, true);\n  markDuplicates(tData, tStylingKey, index, false);\n  markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);\n  tBindings = toTStylingRange(tmplHead, tmplTail);\n  if (isClassBinding) {\n    tNode.classBindings = tBindings;\n  } else {\n    tNode.styleBindings = tBindings;\n  }\n}\n/**\n * Look into the residual styling to see if the current `tStylingKey` is duplicate of residual.\n *\n * @param tNode `TNode` where the residual is stored.\n * @param tStylingKey `TStylingKey` to store.\n * @param tData `TData` associated with the current `LView`.\n * @param index location of where `tStyleValue` should be stored (and linked into list.)\n * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.\n *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)\n */\nfunction markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {\n  const residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;\n  if (residual != null /* or undefined */ && typeof tStylingKey == 'string' && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {\n    // We have duplicate in the residual so mark ourselves as duplicate.\n    tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);\n  }\n}\n/**\n * Marks `TStyleValue`s as duplicates if another style binding in the list has the same\n * `TStyleValue`.\n *\n * NOTE: this function is intended to be called twice once with `isPrevDir` set to `true` and once\n * with it set to `false` to search both the previous as well as next items in the list.\n *\n * No duplicate case\n * ```\n *   [style.color]\n *   [style.width.px] <<- index\n *   [style.height.px]\n * ```\n *\n * In the above case adding `[style.width.px]` to the existing `[style.color]` produces no\n * duplicates because `width` is not found in any other part of the linked list.\n *\n * Duplicate case\n * ```\n *   [style.color]\n *   [style.width.em]\n *   [style.width.px] <<- index\n * ```\n * In the above case adding `[style.width.px]` will produce a duplicate with `[style.width.em]`\n * because `width` is found in the chain.\n *\n * Map case 1\n * ```\n *   [style.width.px]\n *   [style.color]\n *   [style]  <<- index\n * ```\n * In the above case adding `[style]` will produce a duplicate with any other bindings because\n * `[style]` is a Map and as such is fully dynamic and could produce `color` or `width`.\n *\n * Map case 2\n * ```\n *   [style]\n *   [style.width.px]\n *   [style.color]  <<- index\n * ```\n * In the above case adding `[style.color]` will produce a duplicate because there is already a\n * `[style]` binding which is a Map and as such is fully dynamic and could produce `color` or\n * `width`.\n *\n * NOTE: Once `[style]` (Map) is added into the system all things are mapped as duplicates.\n * NOTE: We use `style` as example, but same logic is applied to `class`es as well.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tStylingKey `TStylingKeyPrimitive` which contains the value to compare to other keys in\n *        the linked list.\n * @param index Starting location in the linked list to search from\n * @param isPrevDir Direction.\n *        - `true` for previous (lower priority);\n *        - `false` for next (higher priority).\n */\nfunction markDuplicates(tData, tStylingKey, index, isPrevDir) {\n  const tStylingAtIndex = tData[index + 1];\n  const isMap = tStylingKey === null;\n  let cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);\n  let foundDuplicate = false;\n  // We keep iterating as long as we have a cursor\n  // AND either:\n  // - we found what we are looking for, OR\n  // - we are a map in which case we have to continue searching even after we find what we were\n  //   looking for since we are a wild card and everything needs to be flipped to duplicate.\n  while (cursor !== 0 && (foundDuplicate === false || isMap)) {\n    ngDevMode && assertIndexInRange(tData, cursor);\n    const tStylingValueAtCursor = tData[cursor];\n    const tStyleRangeAtCursor = tData[cursor + 1];\n    if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {\n      foundDuplicate = true;\n      tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);\n    }\n    cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);\n  }\n  if (foundDuplicate) {\n    // if we found a duplicate, than mark ourselves.\n    tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);\n  }\n}\n/**\n * Determines if two `TStylingKey`s are a match.\n *\n * When computing whether a binding contains a duplicate, we need to compare if the instruction\n * `TStylingKey` has a match.\n *\n * Here are examples of `TStylingKey`s which match given `tStylingKeyCursor` is:\n * - `color`\n *    - `color`    // Match another color\n *    - `null`     // That means that `tStylingKey` is a `classMap`/`styleMap` instruction\n *    - `['', 'color', 'other', true]` // wrapped `color` so match\n *    - `['', null, 'other', true]`       // wrapped `null` so match\n *    - `['', 'width', 'color', 'value']` // wrapped static value contains a match on `'color'`\n * - `null`       // `tStylingKeyCursor` always match as it is `classMap`/`styleMap` instruction\n *\n * @param tStylingKeyCursor\n * @param tStylingKey\n */\nfunction isStylingMatch(tStylingKeyCursor, tStylingKey) {\n  ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, \"Expected that 'tStylingKey' has been unwrapped\");\n  if (tStylingKeyCursor === null ||\n  // If the cursor is `null` it means that we have map at that\n  // location so we must assume that we have a match.\n  tStylingKey == null ||\n  // If `tStylingKey` is `null` then it is a map therefor assume that it\n  // contains a match.\n  (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey // If the keys match explicitly than we are a match.\n  ) {\n    return true;\n  } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {\n    // if we did not find a match, but `tStylingKeyCursor` is `KeyValueArray` that means cursor has\n    // statics and we need to check those as well.\n    return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0; // see if we are matching the key\n  }\n  return false;\n}\n\n// Global state of the parser. (This makes parser non-reentrant, but that is not an issue)\nconst parserState = {\n  textEnd: 0,\n  key: 0,\n  keyEnd: 0,\n  value: 0,\n  valueEnd: 0\n};\n/**\n * Retrieves the last parsed `key` of style.\n * @param text the text to substring the key from.\n */\nfunction getLastParsedKey(text) {\n  return text.substring(parserState.key, parserState.keyEnd);\n}\n/**\n * Retrieves the last parsed `value` of style.\n * @param text the text to substring the key from.\n */\nfunction getLastParsedValue(text) {\n  return text.substring(parserState.value, parserState.valueEnd);\n}\n/**\n * Initializes `className` string for parsing and parses the first token.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n *   const key = getLastParsedKey();\n *   ...\n * }\n * ```\n * @param text `className` to parse\n * @returns index where the next invocation of `parseClassNameNext` should resume.\n */\nfunction parseClassName(text) {\n  resetParserState(text);\n  return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\n/**\n * Parses next `className` token.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n *   const key = getLastParsedKey();\n *   ...\n * }\n * ```\n *\n * @param text `className` to parse\n * @param index where the parsing should resume.\n * @returns index where the next invocation of `parseClassNameNext` should resume.\n */\nfunction parseClassNameNext(text, index) {\n  const end = parserState.textEnd;\n  if (end === index) {\n    return -1;\n  }\n  index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);\n  return consumeWhitespace(text, index, end);\n}\n/**\n * Initializes `cssText` string for parsing and parses the first key/values.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {\n *   const key = getLastParsedKey();\n *   const value = getLastParsedValue();\n *   ...\n * }\n * ```\n * @param text `cssText` to parse\n * @returns index where the next invocation of `parseStyleNext` should resume.\n */\nfunction parseStyle(text) {\n  resetParserState(text);\n  return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));\n}\n/**\n * Parses the next `cssText` key/values.\n *\n * This function is intended to be used in this format:\n * ```ts\n * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {\n *   const key = getLastParsedKey();\n *   const value = getLastParsedValue();\n *   ...\n * }\n *\n * @param text `cssText` to parse\n * @param index where the parsing should resume.\n * @returns index where the next invocation of `parseStyleNext` should resume.\n */\nfunction parseStyleNext(text, startIndex) {\n  const end = parserState.textEnd;\n  let index = parserState.key = consumeWhitespace(text, startIndex, end);\n  if (end === index) {\n    // we reached an end so just quit\n    return -1;\n  }\n  index = parserState.keyEnd = consumeStyleKey(text, index, end);\n  index = consumeSeparator(text, index, end, 58 /* CharCode.COLON */);\n  index = parserState.value = consumeWhitespace(text, index, end);\n  index = parserState.valueEnd = consumeStyleValue(text, index, end);\n  return consumeSeparator(text, index, end, 59 /* CharCode.SEMI_COLON */);\n}\n/**\n * Reset the global state of the styling parser.\n * @param text The styling text to parse.\n */\nfunction resetParserState(text) {\n  parserState.key = 0;\n  parserState.keyEnd = 0;\n  parserState.value = 0;\n  parserState.valueEnd = 0;\n  parserState.textEnd = text.length;\n}\n/**\n * Returns index of next non-whitespace character.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index of next non-whitespace character (May be the same as `start` if no whitespace at\n *          that location.)\n */\nfunction consumeWhitespace(text, startIndex, endIndex) {\n  while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32 /* CharCode.SPACE */) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Returns index of last char in class token.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last char in class token.\n */\nfunction consumeClassToken(text, startIndex, endIndex) {\n  while (startIndex < endIndex && text.charCodeAt(startIndex) > 32 /* CharCode.SPACE */) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes all of the characters belonging to style key and token.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last style key character.\n */\nfunction consumeStyleKey(text, startIndex, endIndex) {\n  let ch;\n  while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45 /* CharCode.DASH */ || ch === 95 /* CharCode.UNDERSCORE */ || (ch & -33 /* CharCode.UPPER_CASE */) >= 65 /* CharCode.A */ && (ch & -33 /* CharCode.UPPER_CASE */) <= 90 /* CharCode.Z */ || ch >= 48 /* CharCode.ZERO */ && ch <= 57 /* CharCode.NINE */)) {\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes all whitespace and the separator `:` after the style key.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after separator and surrounding whitespace.\n */\nfunction consumeSeparator(text, startIndex, endIndex, separator) {\n  startIndex = consumeWhitespace(text, startIndex, endIndex);\n  if (startIndex < endIndex) {\n    if (ngDevMode && text.charCodeAt(startIndex) !== separator) {\n      malformedStyleError(text, String.fromCharCode(separator), startIndex);\n    }\n    startIndex++;\n  }\n  return startIndex;\n}\n/**\n * Consumes style value honoring `url()` and `\"\"` text.\n *\n * @param text Text to scan\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after last style value character.\n */\nfunction consumeStyleValue(text, startIndex, endIndex) {\n  let ch1 = -1; // 1st previous character\n  let ch2 = -1; // 2nd previous character\n  let ch3 = -1; // 3rd previous character\n  let i = startIndex;\n  let lastChIndex = i;\n  while (i < endIndex) {\n    const ch = text.charCodeAt(i++);\n    if (ch === 59 /* CharCode.SEMI_COLON */) {\n      return lastChIndex;\n    } else if (ch === 34 /* CharCode.DOUBLE_QUOTE */ || ch === 39 /* CharCode.SINGLE_QUOTE */) {\n      lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);\n    } else if (startIndex === i - 4 &&\n    // We have seen only 4 characters so far \"URL(\" (Ignore \"foo_URL()\")\n    ch3 === 85 /* CharCode.U */ && ch2 === 82 /* CharCode.R */ && ch1 === 76 /* CharCode.L */ && ch === 40 /* CharCode.OPEN_PAREN */) {\n      lastChIndex = i = consumeQuotedText(text, 41 /* CharCode.CLOSE_PAREN */, i, endIndex);\n    } else if (ch > 32 /* CharCode.SPACE */) {\n      // if we have a non-whitespace character then capture its location\n      lastChIndex = i;\n    }\n    ch3 = ch2;\n    ch2 = ch1;\n    ch1 = ch & -33 /* CharCode.UPPER_CASE */;\n  }\n  return lastChIndex;\n}\n/**\n * Consumes all of the quoted characters.\n *\n * @param text Text to scan\n * @param quoteCharCode CharCode of either `\"` or `'` quote or `)` for `url(...)`.\n * @param startIndex Starting index of character where the scan should start.\n * @param endIndex Ending index of character where the scan should end.\n * @returns Index after quoted characters.\n */\nfunction consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {\n  let ch1 = -1; // 1st previous character\n  let index = startIndex;\n  while (index < endIndex) {\n    const ch = text.charCodeAt(index++);\n    if (ch == quoteCharCode && ch1 !== 92 /* CharCode.BACK_SLASH */) {\n      return index;\n    }\n    if (ch == 92 /* CharCode.BACK_SLASH */ && ch1 === 92 /* CharCode.BACK_SLASH */) {\n      // two back slashes cancel each other out. For example `\"\\\\\"` should properly end the\n      // quotation. (It should not assume that the last `\"` is escaped.)\n      ch1 = 0;\n    } else {\n      ch1 = ch;\n    }\n  }\n  throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();\n}\nfunction malformedStyleError(text, expecting, index) {\n  ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');\n  throw throwError(`Malformed style at location ${index} in string '` + text.substring(0, index) + '[>>' + text.substring(index, index + 1) + '<<]' + text.slice(index + 1) + `'. Expecting '${expecting}'.`);\n}\n\n/**\n * Update a property on a selected element.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled\n *\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵproperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵproperty;\n}\n/**\n * Given `<div style=\"...\" my-dir>` and `MyDir` with `@Input('style')` we need to write to\n * directive input.\n */\nfunction setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {\n  const inputs = tNode.inputs;\n  const property = isClassBased ? 'class' : 'style';\n  // We support both 'class' and `className` hence the fallback.\n  setInputsForProperty(tView, lView, inputs[property], property, value);\n}\n\n/**\n * Update a style binding on an element with the provided value.\n *\n * If the style value is falsy then it will be removed from the element\n * (or assigned a different value depending if there are any styles placed\n * on the element with `styleMap` or any static styles that are\n * present from when the element was created with `styling`).\n *\n * Note that the styling element is updated as part of `stylingApply`.\n *\n * @param prop A valid CSS property.\n * @param value New value to write (`null` or an empty string to remove).\n * @param suffix Optional suffix. Used with scalar values to add unit such as `px`.\n *\n * Note that this will apply the provided style value to the host element if this function is called\n * within a host binding function.\n *\n * @codeGenApi\n */\nfunction ɵɵstyleProp(prop, value, suffix) {\n  checkStylingProperty(prop, value, suffix, false);\n  return ɵɵstyleProp;\n}\n/**\n * Update a class binding on an element with the provided value.\n *\n * This instruction is meant to handle the `[class.foo]=\"exp\"` case and,\n * therefore, the class binding itself must already be allocated using\n * `styling` within the creation block.\n *\n * @param prop A valid CSS class (only one).\n * @param value A true/false value which will turn the class on or off.\n *\n * Note that this will apply the provided class value to the host element if this function\n * is called within a host binding function.\n *\n * @codeGenApi\n */\nfunction ɵɵclassProp(className, value) {\n  checkStylingProperty(className, value, null, true);\n  return ɵɵclassProp;\n}\n/**\n * Update style bindings using an object literal on an element.\n *\n * This instruction is meant to apply styling via the `[style]=\"exp\"` template bindings.\n * When styles are applied to the element they will then be updated with respect to\n * any styles/classes set via `styleProp`. If any styles are set to falsy\n * then they will be removed from the element.\n *\n * Note that the styling instruction will not be applied until `stylingApply` is called.\n *\n * @param styles A key/value style map of the styles that will be applied to the given element.\n *        Any missing styles (that have already been applied to the element beforehand) will be\n *        removed (unset) from the element's styling.\n *\n * Note that this will apply the provided styleMap value to the host element if this function\n * is called within a host binding.\n *\n * @codeGenApi\n */\nfunction ɵɵstyleMap(styles) {\n  checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);\n}\n/**\n * Parse text as style and add values to KeyValueArray.\n *\n * This code is pulled out to a separate function so that it can be tree shaken away if it is not\n * needed. It is only referenced from `ɵɵstyleMap`.\n *\n * @param keyValueArray KeyValueArray to add parsed values to.\n * @param text text to parse.\n */\nfunction styleStringParser(keyValueArray, text) {\n  for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {\n    styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));\n  }\n}\n/**\n * Update class bindings using an object literal or class-string on an element.\n *\n * This instruction is meant to apply styling via the `[class]=\"exp\"` template bindings.\n * When classes are applied to the element they will then be updated with\n * respect to any styles/classes set via `classProp`. If any\n * classes are set to falsy then they will be removed from the element.\n *\n * Note that the styling instruction will not be applied until `stylingApply` is called.\n * Note that this will the provided classMap value to the host element if this function is called\n * within a host binding.\n *\n * @param classes A key/value map or string of CSS classes that will be added to the\n *        given element. Any missing classes (that have already been applied to the element\n *        beforehand) will be removed (unset) from the element's list of CSS classes.\n *\n * @codeGenApi\n */\nfunction ɵɵclassMap(classes) {\n  checkStylingMap(classKeyValueArraySet, classStringParser, classes, true);\n}\n/**\n * Parse text as class and add values to KeyValueArray.\n *\n * This code is pulled out to a separate function so that it can be tree shaken away if it is not\n * needed. It is only referenced from `ɵɵclassMap`.\n *\n * @param keyValueArray KeyValueArray to add parsed values to.\n * @param text text to parse.\n */\nfunction classStringParser(keyValueArray, text) {\n  for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {\n    keyValueArraySet(keyValueArray, getLastParsedKey(text), true);\n  }\n}\n/**\n * Common code between `ɵɵclassProp` and `ɵɵstyleProp`.\n *\n * @param prop property name.\n * @param value binding value.\n * @param suffix suffix for the property (e.g. `em` or `px`)\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction checkStylingProperty(prop, value, suffix, isClassBased) {\n  const lView = getLView();\n  const tView = getTView();\n  // Styling instructions use 2 slots per binding.\n  // 1. one for the value / TStylingKey\n  // 2. one for the intermittent-value / TStylingRange\n  const bindingIndex = incrementBindingIndex(2);\n  if (tView.firstUpdatePass) {\n    stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);\n  }\n  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n    const tNode = tView.data[getSelectedIndex()];\n    updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);\n  }\n}\n/**\n * Common code between `ɵɵclassMap` and `ɵɵstyleMap`.\n *\n * @param keyValueArraySet (See `keyValueArraySet` in \"util/array_utils\") Gets passed in as a\n *        function so that `style` can be processed. This is done for tree shaking purposes.\n * @param stringParser Parser used to parse `value` if `string`. (Passed in as `style` and `class`\n *        have different parsers.)\n * @param value bound value from application\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {\n  const tView = getTView();\n  const bindingIndex = incrementBindingIndex(2);\n  if (tView.firstUpdatePass) {\n    stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);\n  }\n  const lView = getLView();\n  if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {\n    // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the\n    // if so as not to read unnecessarily.\n    const tNode = tView.data[getSelectedIndex()];\n    if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {\n      if (ngDevMode) {\n        // verify that if we are shadowing then `TData` is appropriately marked so that we skip\n        // processing this binding in styling resolution.\n        const tStylingKey = tView.data[bindingIndex];\n        assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, \"Styling linked list shadow input should be marked as 'false'\");\n      }\n      // VE does not concatenate the static portion like we are doing here.\n      // Instead VE just ignores the static completely if dynamic binding is present.\n      // Because of locality we have already set the static portion because we don't know if there\n      // is a dynamic portion until later. If we would ignore the static portion it would look like\n      // the binding has removed it. This would confuse `[ngStyle]`/`[ngClass]` to do the wrong\n      // thing as it would think that the static portion was removed. For this reason we\n      // concatenate it so that `[ngStyle]`/`[ngClass]`  can continue to work on changed.\n      let staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;\n      ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(';'), true, \"Expecting static portion to end with ';'\");\n      if (staticPrefix !== null) {\n        // We want to make sure that falsy values of `value` become empty strings.\n        value = concatStringsWithSpace(staticPrefix, value ? value : '');\n      }\n      // Given `<div [style] my-dir>` such that `my-dir` has `@Input('style')`.\n      // This takes over the `[style]` binding. (Same for `[class]`)\n      setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);\n    } else {\n      updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);\n    }\n  }\n}\n/**\n * Determines when the binding is in `hostBindings` section\n *\n * @param tView Current `TView`\n * @param bindingIndex index of binding which we would like if it is in `hostBindings`\n */\nfunction isInHostBindings(tView, bindingIndex) {\n  // All host bindings are placed after the expando section.\n  return bindingIndex >= tView.expandoStartIndex;\n}\n/**\n * Collects the necessary information to insert the binding into a linked list of style bindings\n * using `insertTStylingBinding`.\n *\n * @param tView `TView` where the binding linked list will be stored.\n * @param tStylingKey Property/key of the binding.\n * @param bindingIndex Index of binding associated with the `prop`\n * @param isClassBased `true` if `class` change (`false` if `style`)\n */\nfunction stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {\n  ngDevMode && assertFirstUpdatePass(tView);\n  const tData = tView.data;\n  if (tData[bindingIndex + 1] === null) {\n    // The above check is necessary because we don't clear first update pass until first successful\n    // (no exception) template execution. This prevents the styling instruction from double adding\n    // itself to the list.\n    // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the\n    // if so as not to read unnecessarily.\n    const tNode = tData[getSelectedIndex()];\n    ngDevMode && assertDefined(tNode, 'TNode expected');\n    const isHostBindings = isInHostBindings(tView, bindingIndex);\n    if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {\n      // `tStylingKey === null` implies that we are either `[style]` or `[class]` binding.\n      // If there is a directive which uses `@Input('style')` or `@Input('class')` than\n      // we need to neutralize this binding since that directive is shadowing it.\n      // We turn this into a noop by setting the key to `false`\n      tStylingKey = false;\n    }\n    tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);\n    insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);\n  }\n}\n/**\n * Adds static styling information to the binding if applicable.\n *\n * The linked list of styles not only stores the list and keys, but also stores static styling\n * information on some of the keys. This function determines if the key should contain the styling\n * information and computes it.\n *\n * See `TStylingStatic` for more details.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param stylingKey `TStylingKeyPrimitive` which may need to be wrapped into `TStylingKey`\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {\n  const hostDirectiveDef = getCurrentDirectiveDef(tData);\n  let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n  if (hostDirectiveDef === null) {\n    // We are in template node.\n    // If template node already had styling instruction then it has already collected the static\n    // styling and there is no need to collect them again. We know that we are the first styling\n    // instruction because the `TNode.*Bindings` points to 0 (nothing has been inserted yet).\n    const isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;\n    if (isFirstStylingInstructionInTemplate) {\n      // It would be nice to be able to get the statics from `mergeAttrs`, however, at this point\n      // they are already merged and it would not be possible to figure which property belongs where\n      // in the priority.\n      stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);\n      stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased);\n      // We know that if we have styling binding in template we can't have residual.\n      residual = null;\n    }\n  } else {\n    // We are in host binding node and there was no binding instruction in template node.\n    // This means that we need to compute the residual.\n    const directiveStylingLast = tNode.directiveStylingLast;\n    const isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;\n    if (isFirstStylingInstructionInHostBinding) {\n      stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);\n      if (residual === null) {\n        // - If `null` than either:\n        //    - Template styling instruction already ran and it has consumed the static\n        //      styling into its `TStylingKey` and so there is no need to update residual. Instead\n        //      we need to update the `TStylingKey` associated with the first template node\n        //      instruction. OR\n        //    - Some other styling instruction ran and determined that there are no residuals\n        let templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);\n        if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {\n          // Only recompute if `templateStylingKey` had static values. (If no static value found\n          // then there is nothing to do since this operation can only produce less static keys, not\n          // more.)\n          templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1] /* unwrap previous statics */, isClassBased);\n          templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);\n          setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);\n        }\n      } else {\n        // We only need to recompute residual if it is not `null`.\n        // - If existing residual (implies there was no template styling). This means that some of\n        //   the statics may have moved from the residual to the `stylingKey` and so we have to\n        //   recompute.\n        // - If `undefined` this is the first time we are running.\n        residual = collectResidual(tData, tNode, isClassBased);\n      }\n    }\n  }\n  if (residual !== undefined) {\n    isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;\n  }\n  return stylingKey;\n}\n/**\n * Retrieve the `TStylingKey` for the template styling instruction.\n *\n * This is needed since `hostBinding` styling instructions are inserted after the template\n * instruction. While the template instruction needs to update the residual in `TNode` the\n * `hostBinding` instructions need to update the `TStylingKey` of the template instruction because\n * the template instruction is downstream from the `hostBindings` instructions.\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @return `TStylingKey` if found or `undefined` if not found.\n */\nfunction getTemplateHeadTStylingKey(tData, tNode, isClassBased) {\n  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n  if (getTStylingRangeNext(bindings) === 0) {\n    // There does not seem to be a styling instruction in the `template`.\n    return undefined;\n  }\n  return tData[getTStylingRangePrev(bindings)];\n}\n/**\n * Update the `TStylingKey` of the first template instruction in `TNode`.\n *\n * Logically `hostBindings` styling instructions are of lower priority than that of the template.\n * However, they execute after the template styling instructions. This means that they get inserted\n * in front of the template styling instructions.\n *\n * If we have a template styling instruction and a new `hostBindings` styling instruction is\n * executed it means that it may need to steal static fields from the template instruction. This\n * method allows us to update the first template instruction `TStylingKey` with a new value.\n *\n * Assume:\n * ```angular-ts\n * <div my-dir style=\"color: red\" [style.color]=\"tmplExp\"></div>\n *\n * @Directive({\n *   host: {\n *     'style': 'width: 100px',\n *     '[style.color]': 'dirExp',\n *   }\n * })\n * class MyDir {}\n * ```\n *\n * when `[style.color]=\"tmplExp\"` executes it creates this data structure.\n * ```ts\n *  ['', 'color', 'color', 'red', 'width', '100px'],\n * ```\n *\n * The reason for this is that the template instruction does not know if there are styling\n * instructions and must assume that there are none and must collect all of the static styling.\n * (both\n * `color' and 'width`)\n *\n * When `'[style.color]': 'dirExp',` executes we need to insert a new data into the linked list.\n * ```ts\n *  ['', 'color', 'width', '100px'],  // newly inserted\n *  ['', 'color', 'color', 'red', 'width', '100px'], // this is wrong\n * ```\n *\n * Notice that the template statics is now wrong as it incorrectly contains `width` so we need to\n * update it like so:\n * ```ts\n *  ['', 'color', 'width', '100px'],\n *  ['', 'color', 'color', 'red'],    // UPDATE\n * ```\n *\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param tStylingKey New `TStylingKey` which is replacing the old one.\n */\nfunction setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {\n  const bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;\n  ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');\n  tData[getTStylingRangePrev(bindings)] = tStylingKey;\n}\n/**\n * Collect all static values after the current `TNode.directiveStylingLast` index.\n *\n * Collect the remaining styling information which has not yet been collected by an existing\n * styling instruction.\n *\n * @param tData `TData` where the `DirectiveDefs` are stored.\n * @param tNode `TNode` which contains the directive range.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectResidual(tData, tNode, isClassBased) {\n  let residual = undefined;\n  const directiveEnd = tNode.directiveEnd;\n  ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.');\n  // We add `1 + tNode.directiveStart` because we need to skip the current directive (as we are\n  // collecting things after the last `hostBindings` directive which had a styling instruction.)\n  for (let i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {\n    const attrs = tData[i].hostAttrs;\n    residual = collectStylingFromTAttrs(residual, attrs, isClassBased);\n  }\n  return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);\n}\n/**\n * Collect the static styling information with lower priority than `hostDirectiveDef`.\n *\n * (This is opposite of residual styling.)\n *\n * @param hostDirectiveDef `DirectiveDef` for which we want to collect lower priority static\n *        styling. (Or `null` if template styling)\n * @param tData `TData` where the linked list is stored.\n * @param tNode `TNode` for which the styling is being computed.\n * @param stylingKey Existing `TStylingKey` to update or wrap.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {\n  // We need to loop because there can be directives which have `hostAttrs` but don't have\n  // `hostBindings` so this loop catches up to the current directive..\n  let currentDirective = null;\n  const directiveEnd = tNode.directiveEnd;\n  let directiveStylingLast = tNode.directiveStylingLast;\n  if (directiveStylingLast === -1) {\n    directiveStylingLast = tNode.directiveStart;\n  } else {\n    directiveStylingLast++;\n  }\n  while (directiveStylingLast < directiveEnd) {\n    currentDirective = tData[directiveStylingLast];\n    ngDevMode && assertDefined(currentDirective, 'expected to be defined');\n    stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);\n    if (currentDirective === hostDirectiveDef) break;\n    directiveStylingLast++;\n  }\n  if (hostDirectiveDef !== null) {\n    // we only advance the styling cursor if we are collecting data from host bindings.\n    // Template executes before host bindings and so if we would update the index,\n    // host bindings would not get their statics.\n    tNode.directiveStylingLast = directiveStylingLast;\n  }\n  return stylingKey;\n}\n/**\n * Convert `TAttrs` into `TStylingStatic`.\n *\n * @param stylingKey existing `TStylingKey` to update or wrap.\n * @param attrs `TAttributes` to process.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {\n  const desiredMarker = isClassBased ? 1 /* AttributeMarker.Classes */ : 2 /* AttributeMarker.Styles */;\n  let currentMarker = -1 /* AttributeMarker.ImplicitAttributes */;\n  if (attrs !== null) {\n    for (let i = 0; i < attrs.length; i++) {\n      const item = attrs[i];\n      if (typeof item === 'number') {\n        currentMarker = item;\n      } else {\n        if (currentMarker === desiredMarker) {\n          if (!Array.isArray(stylingKey)) {\n            stylingKey = stylingKey === undefined ? [] : ['', stylingKey];\n          }\n          keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);\n        }\n      }\n    }\n  }\n  return stylingKey === undefined ? null : stylingKey;\n}\n/**\n * Convert user input to `KeyValueArray`.\n *\n * This function takes user input which could be `string`, Object literal, or iterable and converts\n * it into a consistent representation. The output of this is `KeyValueArray` (which is an array\n * where\n * even indexes contain keys and odd indexes contain values for those keys).\n *\n * The advantage of converting to `KeyValueArray` is that we can perform diff in an input\n * independent\n * way.\n * (ie we can compare `foo bar` to `['bar', 'baz'] and determine a set of changes which need to be\n * applied)\n *\n * The fact that `KeyValueArray` is sorted is very important because it allows us to compute the\n * difference in linear fashion without the need to allocate any additional data.\n *\n * For example if we kept this as a `Map` we would have to iterate over previous `Map` to determine\n * which values need to be deleted, over the new `Map` to determine additions, and we would have to\n * keep additional `Map` to keep track of duplicates or items which have not yet been visited.\n *\n * @param keyValueArraySet (See `keyValueArraySet` in \"util/array_utils\") Gets passed in as a\n *        function so that `style` can be processed. This is done\n *        for tree shaking purposes.\n * @param stringParser The parser is passed in so that it will be tree shakable. See\n *        `styleStringParser` and `classStringParser`\n * @param value The value to parse/convert to `KeyValueArray`\n */\nfunction toStylingKeyValueArray(keyValueArraySet, stringParser, value) {\n  if (value == null /*|| value === undefined */ || value === '') return EMPTY_ARRAY;\n  const styleKeyValueArray = [];\n  const unwrappedValue = unwrapSafeValue(value);\n  if (Array.isArray(unwrappedValue)) {\n    for (let i = 0; i < unwrappedValue.length; i++) {\n      keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);\n    }\n  } else if (typeof unwrappedValue === 'object') {\n    for (const key in unwrappedValue) {\n      if (unwrappedValue.hasOwnProperty(key)) {\n        keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);\n      }\n    }\n  } else if (typeof unwrappedValue === 'string') {\n    stringParser(styleKeyValueArray, unwrappedValue);\n  } else {\n    ngDevMode && throwError('Unsupported styling type ' + typeof unwrappedValue + ': ' + unwrappedValue);\n  }\n  return styleKeyValueArray;\n}\n/**\n * Set a `value` for a `key`.\n *\n * See: `keyValueArraySet` for details\n *\n * @param keyValueArray KeyValueArray to add to.\n * @param key Style key to add.\n * @param value The value to set.\n */\nfunction styleKeyValueArraySet(keyValueArray, key, value) {\n  keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));\n}\n/**\n * Class-binding-specific function for setting the `value` for a `key`.\n *\n * See: `keyValueArraySet` for details\n *\n * @param keyValueArray KeyValueArray to add to.\n * @param key Style key to add.\n * @param value The value to set.\n */\nfunction classKeyValueArraySet(keyValueArray, key, value) {\n  // We use `classList.add` to eventually add the CSS classes to the DOM node. Any value passed into\n  // `add` is stringified and added to the `class` attribute, e.g. even null, undefined or numbers\n  // will be added. Stringify the key here so that our internal data structure matches the value in\n  // the DOM. The only exceptions are empty strings and strings that contain spaces for which\n  // the browser throws an error. We ignore such values, because the error is somewhat cryptic.\n  const stringKey = String(key);\n  if (stringKey !== '' && !stringKey.includes(' ')) {\n    keyValueArraySet(keyValueArray, stringKey, value);\n  }\n}\n/**\n * Update map based styling.\n *\n * Map based styling could be anything which contains more than one binding. For example `string`,\n * or object literal. Dealing with all of these types would complicate the logic so\n * instead this function expects that the complex input is first converted into normalized\n * `KeyValueArray`. The advantage of normalization is that we get the values sorted, which makes it\n * very cheap to compute deltas between the previous and current value.\n *\n * @param tView Associated `TView.data` contains the linked list of binding priorities.\n * @param tNode `TNode` where the binding is located.\n * @param lView `LView` contains the values associated with other styling binding at this `TNode`.\n * @param renderer Renderer to use if any updates.\n * @param oldKeyValueArray Previous value represented as `KeyValueArray`\n * @param newKeyValueArray Current value represented as `KeyValueArray`\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param bindingIndex Binding index of the binding.\n */\nfunction updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {\n  if (oldKeyValueArray === NO_CHANGE) {\n    // On first execution the oldKeyValueArray is NO_CHANGE => treat it as empty KeyValueArray.\n    oldKeyValueArray = EMPTY_ARRAY;\n  }\n  let oldIndex = 0;\n  let newIndex = 0;\n  let oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;\n  let newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;\n  while (oldKey !== null || newKey !== null) {\n    ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');\n    ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');\n    const oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;\n    const newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;\n    let setKey = null;\n    let setValue = undefined;\n    if (oldKey === newKey) {\n      // UPDATE: Keys are equal => new value is overwriting old value.\n      oldIndex += 2;\n      newIndex += 2;\n      if (oldValue !== newValue) {\n        setKey = newKey;\n        setValue = newValue;\n      }\n    } else if (newKey === null || oldKey !== null && oldKey < newKey) {\n      // DELETE: oldKey key is missing or we did not find the oldKey in the newValue\n      // (because the keyValueArray is sorted and `newKey` is found later alphabetically).\n      // `\"background\" < \"color\"` so we need to delete `\"background\"` because it is not found in the\n      // new array.\n      oldIndex += 2;\n      setKey = oldKey;\n    } else {\n      // CREATE: newKey's is earlier alphabetically than oldKey's (or no oldKey) => we have new key.\n      // `\"color\" > \"background\"` so we need to add `color` because it is in new array but not in\n      // old array.\n      ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');\n      newIndex += 2;\n      setKey = newKey;\n      setValue = newValue;\n    }\n    if (setKey !== null) {\n      updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);\n    }\n    oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;\n    newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;\n  }\n}\n/**\n * Update a simple (property name) styling.\n *\n * This function takes `prop` and updates the DOM to that value. The function takes the binding\n * value as well as binding priority into consideration to determine which value should be written\n * to DOM. (For example it may be determined that there is a higher priority overwrite which blocks\n * the DOM write, or if the value goes to `undefined` a lower priority overwrite may be consulted.)\n *\n * @param tView Associated `TView.data` contains the linked list of binding priorities.\n * @param tNode `TNode` where the binding is located.\n * @param lView `LView` contains the values associated with other styling binding at this `TNode`.\n * @param renderer Renderer to use if any updates.\n * @param prop Either style property name or a class name.\n * @param value Either style value for `prop` or `true`/`false` if `prop` is class.\n * @param isClassBased `true` if `class` (`false` if `style`)\n * @param bindingIndex Binding index of the binding.\n */\nfunction updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {\n  if (!(tNode.type & 3 /* TNodeType.AnyRNode */)) {\n    // It is possible to have styling on non-elements (such as ng-container).\n    // This is rare, but it does happen. In such a case, just ignore the binding.\n    return;\n  }\n  const tData = tView.data;\n  const tRange = tData[bindingIndex + 1];\n  const higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : undefined;\n  if (!isStylingValuePresent(higherPriorityValue)) {\n    // We don't have a next duplicate, or we did not find a duplicate value.\n    if (!isStylingValuePresent(value)) {\n      // We should delete current value or restore to lower priority value.\n      if (getTStylingRangePrevDuplicate(tRange)) {\n        // We have a possible prev duplicate, let's retrieve it.\n        value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);\n      }\n    }\n    const rNode = getNativeByIndex(getSelectedIndex(), lView);\n    applyStyling(renderer, isClassBased, rNode, prop, value);\n  }\n}\n/**\n * Search for styling value with higher priority which is overwriting current value, or a\n * value of lower priority to which we should fall back if the value is `undefined`.\n *\n * When value is being applied at a location, related values need to be consulted.\n * - If there is a higher priority binding, we should be using that one instead.\n *   For example `<div  [style]=\"{color:exp1}\" [style.color]=\"exp2\">` change to `exp1`\n *   requires that we check `exp2` to see if it is set to value other than `undefined`.\n * - If there is a lower priority binding and we are changing to `undefined`\n *   For example `<div  [style]=\"{color:exp1}\" [style.color]=\"exp2\">` change to `exp2` to\n *   `undefined` requires that we check `exp1` (and static values) and use that as new value.\n *\n * NOTE: The styling stores two values.\n * 1. The raw value which came from the application is stored at `index + 0` location. (This value\n *    is used for dirty checking).\n * 2. The normalized value is stored at `index + 1`.\n *\n * @param tData `TData` used for traversing the priority.\n * @param tNode `TNode` to use for resolving static styling. Also controls search direction.\n *   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.\n *      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.\n *   - `null` search prev and go all the way to end. Return last value where\n *     `isStylingValuePresent(value)` is true.\n * @param lView `LView` used for retrieving the actual values.\n * @param prop Property which we are interested in.\n * @param index Starting index in the linked list of styling bindings where the search should start.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction findStylingValue(tData, tNode, lView, prop, index, isClassBased) {\n  // `TNode` to use for resolving static styling. Also controls search direction.\n  //   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.\n  //      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.\n  //   - `null` search prev and go all the way to end. Return last value where\n  //     `isStylingValuePresent(value)` is true.\n  const isPrevDirection = tNode === null;\n  let value = undefined;\n  while (index > 0) {\n    const rawKey = tData[index];\n    const containsStatics = Array.isArray(rawKey);\n    // Unwrap the key if we contain static values.\n    const key = containsStatics ? rawKey[1] : rawKey;\n    const isStylingMap = key === null;\n    let valueAtLViewIndex = lView[index + 1];\n    if (valueAtLViewIndex === NO_CHANGE) {\n      // In firstUpdatePass the styling instructions create a linked list of styling.\n      // On subsequent passes it is possible for a styling instruction to try to read a binding\n      // which\n      // has not yet executed. In that case we will find `NO_CHANGE` and we should assume that\n      // we have `undefined` (or empty array in case of styling-map instruction) instead. This\n      // allows the resolution to apply the value (which may later be overwritten when the\n      // binding actually executes.)\n      valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY : undefined;\n    }\n    let currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : undefined;\n    if (containsStatics && !isStylingValuePresent(currentValue)) {\n      currentValue = keyValueArrayGet(rawKey, prop);\n    }\n    if (isStylingValuePresent(currentValue)) {\n      value = currentValue;\n      if (isPrevDirection) {\n        return value;\n      }\n    }\n    const tRange = tData[index + 1];\n    index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);\n  }\n  if (tNode !== null) {\n    // in case where we are going in next direction AND we did not find anything, we need to\n    // consult residual styling\n    let residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;\n    if (residual != null /** OR residual !=== undefined */) {\n      value = keyValueArrayGet(residual, prop);\n    }\n  }\n  return value;\n}\n/**\n * Determines if the binding value should be used (or if the value is 'undefined' and hence priority\n * resolution should be used.)\n *\n * @param value Binding style value.\n */\nfunction isStylingValuePresent(value) {\n  // Currently only `undefined` value is considered non-binding. That is `undefined` says I don't\n  // have an opinion as to what this binding should be and you should consult other bindings by\n  // priority to determine the valid value.\n  // This is extracted into a single function so that we have a single place to control this.\n  return value !== undefined;\n}\n/**\n * Normalizes and/or adds a suffix to the value.\n *\n * If value is `null`/`undefined` no suffix is added\n * @param value\n * @param suffix\n */\nfunction normalizeSuffix(value, suffix) {\n  if (value == null || value === '') {\n    // do nothing\n    // Do not add the suffix if the value is going to be empty.\n    // As it produce invalid CSS, which the browsers will automatically omit but Domino will not.\n    // Example: `\"left\": \"px;\"` instead of `\"left\": \"\"`.\n  } else if (typeof suffix === 'string') {\n    value = value + suffix;\n  } else if (typeof value === 'object') {\n    value = stringify(unwrapSafeValue(value));\n  }\n  return value;\n}\n/**\n * Tests if the `TNode` has input shadow.\n *\n * An input shadow is when a directive steals (shadows) the input by using `@Input('style')` or\n * `@Input('class')` as input.\n *\n * @param tNode `TNode` which we would like to see if it has shadow.\n * @param isClassBased `true` if `class` (`false` if `style`)\n */\nfunction hasStylingInputShadow(tNode, isClassBased) {\n  return (tNode.flags & (isClassBased ? 8 /* TNodeFlags.hasClassInput */ : 16 /* TNodeFlags.hasStyleInput */)) !== 0;\n}\n\n/**\n *\n * Update an interpolated class on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate1('prefix', v0, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate2('prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate3(\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate4(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate5(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate6(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate7(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n *\n * Update an interpolated class on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolate8(\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n/**\n * Update an interpolated class on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  class=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵclassMapInterpolateV(\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @codeGenApi\n */\nfunction ɵɵclassMapInterpolateV(values) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Instruction that returns the component instance in which the current instruction is executing.\n * This is a constant-time version of `nextContent` for the case where we know that we need the\n * component instance specifically, rather than the context of a particular template.\n *\n * @codeGenApi\n */\nfunction ɵɵcomponentInstance() {\n  const instance = getLView()[DECLARATION_COMPONENT_VIEW][CONTEXT];\n  ngDevMode && assertDefined(instance, 'Expected component instance to be defined');\n  return instance;\n}\n\n/**\n * A type representing the live collection to be reconciled with any new (incoming) collection. This\n * is an adapter class that makes it possible to work with different internal data structures,\n * regardless of the actual values of the incoming collection.\n */\nclass LiveCollection {\n  destroy(item) {\n    // noop by default\n  }\n  updateValue(index, value) {\n    // noop by default\n  }\n  // operations below could be implemented on top of the operations defined so far, but having\n  // them explicitly allow clear expression of intent and potentially more performant\n  // implementations\n  swap(index1, index2) {\n    const startIdx = Math.min(index1, index2);\n    const endIdx = Math.max(index1, index2);\n    const endItem = this.detach(endIdx);\n    if (endIdx - startIdx > 1) {\n      const startItem = this.detach(startIdx);\n      this.attach(startIdx, endItem);\n      this.attach(endIdx, startItem);\n    } else {\n      this.attach(startIdx, endItem);\n    }\n  }\n  move(prevIndex, newIdx) {\n    this.attach(newIdx, this.detach(prevIndex));\n  }\n}\nfunction valuesMatching(liveIdx, liveValue, newIdx, newValue, trackBy) {\n  if (liveIdx === newIdx && Object.is(liveValue, newValue)) {\n    // matching and no value identity to update\n    return 1;\n  } else if (Object.is(trackBy(liveIdx, liveValue), trackBy(newIdx, newValue))) {\n    // matching but requires value identity update\n    return -1;\n  }\n  return 0;\n}\nfunction recordDuplicateKeys(keyToIdx, key, idx) {\n  const idxSoFar = keyToIdx.get(key);\n  if (idxSoFar !== undefined) {\n    idxSoFar.add(idx);\n  } else {\n    keyToIdx.set(key, new Set([idx]));\n  }\n}\n/**\n * The live collection reconciliation algorithm that perform various in-place operations, so it\n * reflects the content of the new (incoming) collection.\n *\n * The reconciliation algorithm has 2 code paths:\n * - \"fast\" path that don't require any memory allocation;\n * - \"slow\" path that requires additional memory allocation for intermediate data structures used to\n * collect additional information about the live collection.\n * It might happen that the algorithm switches between the two modes in question in a single\n * reconciliation path - generally it tries to stay on the \"fast\" path as much as possible.\n *\n * The overall complexity of the algorithm is O(n + m) for speed and O(n) for memory (where n is the\n * length of the live collection and m is the length of the incoming collection). Given the problem\n * at hand the complexity / performance constraints makes it impossible to perform the absolute\n * minimum of operation to reconcile the 2 collections. The algorithm makes different tradeoffs to\n * stay within reasonable performance bounds and may apply sub-optimal number of operations in\n * certain situations.\n *\n * @param liveCollection the current, live collection;\n * @param newCollection the new, incoming collection;\n * @param trackByFn key generation function that determines equality between items in the life and\n *     incoming collection;\n */\nfunction reconcile(liveCollection, newCollection, trackByFn) {\n  let detachedItems = undefined;\n  let liveKeysInTheFuture = undefined;\n  let liveStartIdx = 0;\n  let liveEndIdx = liveCollection.length - 1;\n  const duplicateKeys = ngDevMode ? new Map() : undefined;\n  if (Array.isArray(newCollection)) {\n    let newEndIdx = newCollection.length - 1;\n    while (liveStartIdx <= liveEndIdx && liveStartIdx <= newEndIdx) {\n      // compare from the beginning\n      const liveStartValue = liveCollection.at(liveStartIdx);\n      const newStartValue = newCollection[liveStartIdx];\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newStartValue), liveStartIdx);\n      }\n      const isStartMatching = valuesMatching(liveStartIdx, liveStartValue, liveStartIdx, newStartValue, trackByFn);\n      if (isStartMatching !== 0) {\n        if (isStartMatching < 0) {\n          liveCollection.updateValue(liveStartIdx, newStartValue);\n        }\n        liveStartIdx++;\n        continue;\n      }\n      // compare from the end\n      // TODO(perf): do _all_ the matching from the end\n      const liveEndValue = liveCollection.at(liveEndIdx);\n      const newEndValue = newCollection[newEndIdx];\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(newEndIdx, newEndValue), newEndIdx);\n      }\n      const isEndMatching = valuesMatching(liveEndIdx, liveEndValue, newEndIdx, newEndValue, trackByFn);\n      if (isEndMatching !== 0) {\n        if (isEndMatching < 0) {\n          liveCollection.updateValue(liveEndIdx, newEndValue);\n        }\n        liveEndIdx--;\n        newEndIdx--;\n        continue;\n      }\n      // Detect swap and moves:\n      const liveStartKey = trackByFn(liveStartIdx, liveStartValue);\n      const liveEndKey = trackByFn(liveEndIdx, liveEndValue);\n      const newStartKey = trackByFn(liveStartIdx, newStartValue);\n      if (Object.is(newStartKey, liveEndKey)) {\n        const newEndKey = trackByFn(newEndIdx, newEndValue);\n        // detect swap on both ends;\n        if (Object.is(newEndKey, liveStartKey)) {\n          liveCollection.swap(liveStartIdx, liveEndIdx);\n          liveCollection.updateValue(liveEndIdx, newEndValue);\n          newEndIdx--;\n          liveEndIdx--;\n        } else {\n          // the new item is the same as the live item with the end pointer - this is a move forward\n          // to an earlier index;\n          liveCollection.move(liveEndIdx, liveStartIdx);\n        }\n        liveCollection.updateValue(liveStartIdx, newStartValue);\n        liveStartIdx++;\n        continue;\n      }\n      // Fallback to the slow path: we need to learn more about the content of the live and new\n      // collections.\n      detachedItems ??= new UniqueValueMultiKeyMap();\n      liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n      // Check if I'm inserting a previously detached item: if so, attach it here\n      if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newStartKey)) {\n        liveCollection.updateValue(liveStartIdx, newStartValue);\n        liveStartIdx++;\n        liveEndIdx++;\n      } else if (!liveKeysInTheFuture.has(newStartKey)) {\n        // Check if we seen a new item that doesn't exist in the old collection and must be INSERTED\n        const newItem = liveCollection.create(liveStartIdx, newCollection[liveStartIdx]);\n        liveCollection.attach(liveStartIdx, newItem);\n        liveStartIdx++;\n        liveEndIdx++;\n      } else {\n        // We know that the new item exists later on in old collection but we don't know its index\n        // and as the consequence can't move it (don't know where to find it). Detach the old item,\n        // hoping that it unlocks the fast path again.\n        detachedItems.set(liveStartKey, liveCollection.detach(liveStartIdx));\n        liveEndIdx--;\n      }\n    }\n    // Final cleanup steps:\n    // - more items in the new collection => insert\n    while (liveStartIdx <= newEndIdx) {\n      createOrAttach(liveCollection, detachedItems, trackByFn, liveStartIdx, newCollection[liveStartIdx]);\n      liveStartIdx++;\n    }\n  } else if (newCollection != null) {\n    // iterable - immediately fallback to the slow path\n    const newCollectionIterator = newCollection[Symbol.iterator]();\n    let newIterationResult = newCollectionIterator.next();\n    while (!newIterationResult.done && liveStartIdx <= liveEndIdx) {\n      const liveValue = liveCollection.at(liveStartIdx);\n      const newValue = newIterationResult.value;\n      if (ngDevMode) {\n        recordDuplicateKeys(duplicateKeys, trackByFn(liveStartIdx, newValue), liveStartIdx);\n      }\n      const isStartMatching = valuesMatching(liveStartIdx, liveValue, liveStartIdx, newValue, trackByFn);\n      if (isStartMatching !== 0) {\n        // found a match - move on, but update value\n        if (isStartMatching < 0) {\n          liveCollection.updateValue(liveStartIdx, newValue);\n        }\n        liveStartIdx++;\n        newIterationResult = newCollectionIterator.next();\n      } else {\n        detachedItems ??= new UniqueValueMultiKeyMap();\n        liveKeysInTheFuture ??= initLiveItemsInTheFuture(liveCollection, liveStartIdx, liveEndIdx, trackByFn);\n        // Check if I'm inserting a previously detached item: if so, attach it here\n        const newKey = trackByFn(liveStartIdx, newValue);\n        if (attachPreviouslyDetached(liveCollection, detachedItems, liveStartIdx, newKey)) {\n          liveCollection.updateValue(liveStartIdx, newValue);\n          liveStartIdx++;\n          liveEndIdx++;\n          newIterationResult = newCollectionIterator.next();\n        } else if (!liveKeysInTheFuture.has(newKey)) {\n          liveCollection.attach(liveStartIdx, liveCollection.create(liveStartIdx, newValue));\n          liveStartIdx++;\n          liveEndIdx++;\n          newIterationResult = newCollectionIterator.next();\n        } else {\n          // it is a move forward - detach the current item without advancing in collections\n          const liveKey = trackByFn(liveStartIdx, liveValue);\n          detachedItems.set(liveKey, liveCollection.detach(liveStartIdx));\n          liveEndIdx--;\n        }\n      }\n    }\n    // this is a new item as we run out of the items in the old collection - create or attach a\n    // previously detached one\n    while (!newIterationResult.done) {\n      createOrAttach(liveCollection, detachedItems, trackByFn, liveCollection.length, newIterationResult.value);\n      newIterationResult = newCollectionIterator.next();\n    }\n  }\n  // Cleanups common to the array and iterable:\n  // - more items in the live collection => delete starting from the end;\n  while (liveStartIdx <= liveEndIdx) {\n    liveCollection.destroy(liveCollection.detach(liveEndIdx--));\n  }\n  // - destroy items that were detached but never attached again.\n  detachedItems?.forEach(item => {\n    liveCollection.destroy(item);\n  });\n  // report duplicate keys (dev mode only)\n  if (ngDevMode) {\n    let duplicatedKeysMsg = [];\n    for (const [key, idxSet] of duplicateKeys) {\n      if (idxSet.size > 1) {\n        const idx = [...idxSet].sort((a, b) => a - b);\n        for (let i = 1; i < idx.length; i++) {\n          duplicatedKeysMsg.push(`key \"${stringifyForError(key)}\" at index \"${idx[i - 1]}\" and \"${idx[i]}\"`);\n        }\n      }\n    }\n    if (duplicatedKeysMsg.length > 0) {\n      const message = formatRuntimeError(-955 /* RuntimeErrorCode.LOOP_TRACK_DUPLICATE_KEYS */, 'The provided track expression resulted in duplicated keys for a given collection. ' + 'Adjust the tracking expression such that it uniquely identifies all the items in the collection. ' + 'Duplicated keys were: \\n' + duplicatedKeysMsg.join(', \\n') + '.');\n      // tslint:disable-next-line:no-console\n      console.warn(message);\n    }\n  }\n}\nfunction attachPreviouslyDetached(prevCollection, detachedItems, index, key) {\n  if (detachedItems !== undefined && detachedItems.has(key)) {\n    prevCollection.attach(index, detachedItems.get(key));\n    detachedItems.delete(key);\n    return true;\n  }\n  return false;\n}\nfunction createOrAttach(liveCollection, detachedItems, trackByFn, index, value) {\n  if (!attachPreviouslyDetached(liveCollection, detachedItems, index, trackByFn(index, value))) {\n    const newItem = liveCollection.create(index, value);\n    liveCollection.attach(index, newItem);\n  } else {\n    liveCollection.updateValue(index, value);\n  }\n}\nfunction initLiveItemsInTheFuture(liveCollection, start, end, trackByFn) {\n  const keys = new Set();\n  for (let i = start; i <= end; i++) {\n    keys.add(trackByFn(i, liveCollection.at(i)));\n  }\n  return keys;\n}\n/**\n * A specific, partial implementation of the Map interface with the following characteristics:\n * - allows multiple values for a given key;\n * - maintain FIFO order for multiple values corresponding to a given key;\n * - assumes that all values are unique.\n *\n * The implementation aims at having the minimal overhead for cases where keys are _not_ duplicated\n * (the most common case in the list reconciliation algorithm). To achieve this, the first value for\n * a given key is stored in a regular map. Then, when more values are set for a given key, we\n * maintain a form of linked list in a separate map. To maintain this linked list we assume that all\n * values (in the entire collection) are unique.\n */\nclass UniqueValueMultiKeyMap {\n  // A map from a key to the first value corresponding to this key.\n  kvMap = new Map();\n  // A map that acts as a linked list of values - each value maps to the next value in this \"linked\n  // list\" (this only works if values are unique). Allocated lazily to avoid memory consumption when\n  // there are no duplicated values.\n  _vMap = undefined;\n  has(key) {\n    return this.kvMap.has(key);\n  }\n  delete(key) {\n    if (!this.has(key)) return false;\n    const value = this.kvMap.get(key);\n    if (this._vMap !== undefined && this._vMap.has(value)) {\n      this.kvMap.set(key, this._vMap.get(value));\n      this._vMap.delete(value);\n    } else {\n      this.kvMap.delete(key);\n    }\n    return true;\n  }\n  get(key) {\n    return this.kvMap.get(key);\n  }\n  set(key, value) {\n    if (this.kvMap.has(key)) {\n      let prevValue = this.kvMap.get(key);\n      // Note: we don't use `assertNotSame`, because the value needs to be stringified even if\n      // there is no error which can freeze the browser for large values (see #58509).\n      if (ngDevMode && prevValue === value) {\n        throw new Error(`Detected a duplicated value ${value} for the key ${key}`);\n      }\n      if (this._vMap === undefined) {\n        this._vMap = new Map();\n      }\n      const vMap = this._vMap;\n      while (vMap.has(prevValue)) {\n        prevValue = vMap.get(prevValue);\n      }\n      vMap.set(prevValue, value);\n    } else {\n      this.kvMap.set(key, value);\n    }\n  }\n  forEach(cb) {\n    for (let [key, value] of this.kvMap) {\n      cb(value, key);\n      if (this._vMap !== undefined) {\n        const vMap = this._vMap;\n        while (vMap.has(value)) {\n          value = vMap.get(value);\n          cb(value, key);\n        }\n      }\n    }\n  }\n}\n\n/**\n * The conditional instruction represents the basic building block on the runtime side to support\n * built-in \"if\" and \"switch\". On the high level this instruction is responsible for adding and\n * removing views selected by a conditional expression.\n *\n * @param matchingTemplateIndex Index of a template TNode representing a conditional view to be\n *     inserted; -1 represents a special case when there is no view to insert.\n * @param contextValue Value that should be exposed as the context of the conditional.\n * @codeGenApi\n */\nfunction ɵɵconditional(matchingTemplateIndex, contextValue) {\n  performanceMarkFeature('NgControlFlow');\n  const hostLView = getLView();\n  const bindingIndex = nextBindingIndex();\n  const prevMatchingTemplateIndex = hostLView[bindingIndex] !== NO_CHANGE ? hostLView[bindingIndex] : -1;\n  const prevContainer = prevMatchingTemplateIndex !== -1 ? getLContainer(hostLView, HEADER_OFFSET + prevMatchingTemplateIndex) : undefined;\n  const viewInContainerIdx = 0;\n  if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {\n    const prevConsumer = setActiveConsumer$1(null);\n    try {\n      // The index of the view to show changed - remove the previously displayed one\n      // (it is a noop if there are no active views in a container).\n      if (prevContainer !== undefined) {\n        removeLViewFromLContainer(prevContainer, viewInContainerIdx);\n      }\n      // Index -1 is a special case where none of the conditions evaluates to\n      // a truthy value and as the consequence we've got no view to show.\n      if (matchingTemplateIndex !== -1) {\n        const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;\n        const nextContainer = getLContainer(hostLView, nextLContainerIndex);\n        const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);\n        const dehydratedView = findMatchingDehydratedView(nextContainer, templateTNode.tView.ssrId);\n        const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {\n          dehydratedView\n        });\n        addLViewToLContainer(nextContainer, embeddedLView, viewInContainerIdx, shouldAddViewToDom(templateTNode, dehydratedView));\n      }\n    } finally {\n      setActiveConsumer$1(prevConsumer);\n    }\n  } else if (prevContainer !== undefined) {\n    // We might keep displaying the same template but the actual value of the expression could have\n    // changed - re-bind in context.\n    const lView = getLViewFromLContainer(prevContainer, viewInContainerIdx);\n    if (lView !== undefined) {\n      lView[CONTEXT] = contextValue;\n    }\n  }\n}\nclass RepeaterContext {\n  lContainer;\n  $implicit;\n  $index;\n  constructor(lContainer, $implicit, $index) {\n    this.lContainer = lContainer;\n    this.$implicit = $implicit;\n    this.$index = $index;\n  }\n  get $count() {\n    return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n}\n/**\n * A built-in trackBy function used for situations where users specified collection index as a\n * tracking expression. Having this function body in the runtime avoids unnecessary code generation.\n *\n * @param index\n * @returns\n */\nfunction ɵɵrepeaterTrackByIndex(index) {\n  return index;\n}\n/**\n * A built-in trackBy function used for situations where users specified collection item reference\n * as a tracking expression. Having this function body in the runtime avoids unnecessary code\n * generation.\n *\n * @param index\n * @returns\n */\nfunction ɵɵrepeaterTrackByIdentity(_, value) {\n  return value;\n}\nclass RepeaterMetadata {\n  hasEmptyBlock;\n  trackByFn;\n  liveCollection;\n  constructor(hasEmptyBlock, trackByFn, liveCollection) {\n    this.hasEmptyBlock = hasEmptyBlock;\n    this.trackByFn = trackByFn;\n    this.liveCollection = liveCollection;\n  }\n}\n/**\n * The repeaterCreate instruction runs in the creation part of the template pass and initializes\n * internal data structures required by the update pass of the built-in repeater logic. Repeater\n * metadata are allocated in the data part of LView with the following layout:\n * - LView[HEADER_OFFSET + index] - metadata\n * - LView[HEADER_OFFSET + index + 1] - reference to a template function rendering an item\n * - LView[HEADER_OFFSET + index + 2] - optional reference to a template function rendering an empty\n * block\n *\n * @param index Index at which to store the metadata of the repeater.\n * @param templateFn Reference to the template of the main repeater block.\n * @param decls The number of nodes, local refs, and pipes for the main block.\n * @param vars The number of bindings for the main block.\n * @param tagName The name of the container element, if applicable\n * @param attrsIndex Index of template attributes in the `consts` array.\n * @param trackByFn Reference to the tracking function.\n * @param trackByUsesComponentInstance Whether the tracking function has any references to the\n *  component instance. If it doesn't, we can avoid rebinding it.\n * @param emptyTemplateFn Reference to the template function of the empty block.\n * @param emptyDecls The number of nodes, local refs, and pipes for the empty block.\n * @param emptyVars The number of bindings for the empty block.\n * @param emptyTagName The name of the empty block container element, if applicable\n * @param emptyAttrsIndex Index of the empty block template attributes in the `consts` array.\n *\n * @codeGenApi\n */\nfunction ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex, trackByFn, trackByUsesComponentInstance, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, emptyAttrsIndex) {\n  performanceMarkFeature('NgControlFlow');\n  ngDevMode && assertFunction(trackByFn, `A track expression must be a function, was ${typeof trackByFn} instead.`);\n  const lView = getLView();\n  const tView = getTView();\n  const hasEmptyBlock = emptyTemplateFn !== undefined;\n  const hostLView = getLView();\n  const boundTrackBy = trackByUsesComponentInstance ?\n  // We only want to bind when necessary, because it produces a\n  // new function. For pure functions it's not necessary.\n  trackByFn.bind(hostLView[DECLARATION_COMPONENT_VIEW][CONTEXT]) : trackByFn;\n  const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);\n  hostLView[HEADER_OFFSET + index] = metadata;\n  declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex));\n  if (hasEmptyBlock) {\n    ngDevMode && assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');\n    ngDevMode && assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');\n    declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex));\n  }\n}\nfunction isViewExpensiveToRecreate(lView) {\n  // assumption: anything more than a text node with a binding is considered \"expensive\"\n  return lView.length - HEADER_OFFSET > 2;\n}\nclass OperationsCounter {\n  created = 0;\n  destroyed = 0;\n  reset() {\n    this.created = 0;\n    this.destroyed = 0;\n  }\n  recordCreate() {\n    this.created++;\n  }\n  recordDestroy() {\n    this.destroyed++;\n  }\n  /**\n   * A method indicating if the entire collection was re-created as part of the reconciliation pass.\n   * Used to warn developers about the usage of a tracking function that might result in excessive\n   * amount of view creation / destroy operations.\n   *\n   * @returns boolean value indicating if a live collection was re-created\n   */\n  wasReCreated(collectionLen) {\n    return collectionLen > 0 && this.created === this.destroyed && this.created === collectionLen;\n  }\n}\nclass LiveCollectionLContainerImpl extends LiveCollection {\n  lContainer;\n  hostLView;\n  templateTNode;\n  operationsCounter = ngDevMode ? new OperationsCounter() : undefined;\n  /**\n   Property indicating if indexes in the repeater context need to be updated following the live\n   collection changes. Index updates are necessary if and only if views are inserted / removed in\n   the middle of LContainer. Adds and removals at the end don't require index updates.\n  */\n  needsIndexUpdate = false;\n  constructor(lContainer, hostLView, templateTNode) {\n    super();\n    this.lContainer = lContainer;\n    this.hostLView = hostLView;\n    this.templateTNode = templateTNode;\n  }\n  get length() {\n    return this.lContainer.length - CONTAINER_HEADER_OFFSET;\n  }\n  at(index) {\n    return this.getLView(index)[CONTEXT].$implicit;\n  }\n  attach(index, lView) {\n    const dehydratedView = lView[HYDRATION];\n    this.needsIndexUpdate ||= index !== this.length;\n    addLViewToLContainer(this.lContainer, lView, index, shouldAddViewToDom(this.templateTNode, dehydratedView));\n  }\n  detach(index) {\n    this.needsIndexUpdate ||= index !== this.length - 1;\n    return detachExistingView(this.lContainer, index);\n  }\n  create(index, value) {\n    const dehydratedView = findMatchingDehydratedView(this.lContainer, this.templateTNode.tView.ssrId);\n    const embeddedLView = createAndRenderEmbeddedLView(this.hostLView, this.templateTNode, new RepeaterContext(this.lContainer, value, index), {\n      dehydratedView\n    });\n    this.operationsCounter?.recordCreate();\n    return embeddedLView;\n  }\n  destroy(lView) {\n    destroyLView(lView[TVIEW], lView);\n    this.operationsCounter?.recordDestroy();\n  }\n  updateValue(index, value) {\n    this.getLView(index)[CONTEXT].$implicit = value;\n  }\n  reset() {\n    this.needsIndexUpdate = false;\n    this.operationsCounter?.reset();\n  }\n  updateIndexes() {\n    if (this.needsIndexUpdate) {\n      for (let i = 0; i < this.length; i++) {\n        this.getLView(i)[CONTEXT].$index = i;\n      }\n    }\n  }\n  getLView(index) {\n    return getExistingLViewFromLContainer(this.lContainer, index);\n  }\n}\n/**\n * The repeater instruction does update-time diffing of a provided collection (against the\n * collection seen previously) and maps changes in the collection to views structure (by adding,\n * removing or moving views as needed).\n * @param collection - the collection instance to be checked for changes\n * @codeGenApi\n */\nfunction ɵɵrepeater(collection) {\n  const prevConsumer = setActiveConsumer$1(null);\n  const metadataSlotIdx = getSelectedIndex();\n  try {\n    const hostLView = getLView();\n    const hostTView = hostLView[TVIEW];\n    const metadata = hostLView[metadataSlotIdx];\n    const containerIndex = metadataSlotIdx + 1;\n    const lContainer = getLContainer(hostLView, containerIndex);\n    if (metadata.liveCollection === undefined) {\n      const itemTemplateTNode = getExistingTNode(hostTView, containerIndex);\n      metadata.liveCollection = new LiveCollectionLContainerImpl(lContainer, hostLView, itemTemplateTNode);\n    } else {\n      metadata.liveCollection.reset();\n    }\n    const liveCollection = metadata.liveCollection;\n    reconcile(liveCollection, collection, metadata.trackByFn);\n    // Warn developers about situations where the entire collection was re-created as part of the\n    // reconciliation pass. Note that this warning might be \"overreacting\" and report cases where\n    // the collection re-creation is the intended behavior. Still, the assumption is that most of\n    // the time it is undesired.\n    if (ngDevMode && metadata.trackByFn === ɵɵrepeaterTrackByIdentity && liveCollection.operationsCounter?.wasReCreated(liveCollection.length) && isViewExpensiveToRecreate(getExistingLViewFromLContainer(lContainer, 0))) {\n      const message = formatRuntimeError(-956 /* RuntimeErrorCode.LOOP_TRACK_RECREATE */, `The configured tracking expression (track by identity) caused re-creation of the entire collection of size ${liveCollection.length}. ` + 'This is an expensive operation requiring destruction and subsequent creation of DOM nodes, directives, components etc. ' + 'Please review the \"track expression\" and make sure that it uniquely identifies items in a collection.');\n      console.warn(message);\n    }\n    // moves in the container might caused context's index to get out of order, re-adjust if needed\n    liveCollection.updateIndexes();\n    // handle empty blocks\n    if (metadata.hasEmptyBlock) {\n      const bindingIndex = nextBindingIndex();\n      const isCollectionEmpty = liveCollection.length === 0;\n      if (bindingUpdated(hostLView, bindingIndex, isCollectionEmpty)) {\n        const emptyTemplateIndex = metadataSlotIdx + 2;\n        const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);\n        if (isCollectionEmpty) {\n          const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);\n          const dehydratedView = findMatchingDehydratedView(lContainerForEmpty, emptyTemplateTNode.tView.ssrId);\n          const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, undefined, {\n            dehydratedView\n          });\n          addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));\n        } else {\n          removeLViewFromLContainer(lContainerForEmpty, 0);\n        }\n      }\n    }\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nfunction getLContainer(lView, index) {\n  const lContainer = lView[index];\n  ngDevMode && assertLContainer(lContainer);\n  return lContainer;\n}\nfunction detachExistingView(lContainer, index) {\n  const existingLView = detachView(lContainer, index);\n  ngDevMode && assertLView(existingLView);\n  return existingLView;\n}\nfunction getExistingLViewFromLContainer(lContainer, index) {\n  const existingLView = getLViewFromLContainer(lContainer, index);\n  ngDevMode && assertLView(existingLView);\n  return existingLView;\n}\nfunction getExistingTNode(tView, index) {\n  const tNode = getTNode(tView, index);\n  ngDevMode && assertTNode(tNode);\n  return tNode;\n}\nfunction elementStartFirstCreatePass(index, tView, lView, name, attrsIndex, localRefsIndex) {\n  ngDevMode && assertFirstCreatePass(tView);\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  const attrs = getConstant(tViewConsts, attrsIndex);\n  const tNode = getOrCreateTNode(tView, index, 2 /* TNodeType.Element */, name, attrs);\n  resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));\n  if (tNode.attrs !== null) {\n    computeStaticStyling(tNode, tNode.attrs, false);\n  }\n  if (tNode.mergedAttrs !== null) {\n    computeStaticStyling(tNode, tNode.mergedAttrs, true);\n  }\n  if (tView.queries !== null) {\n    tView.queries.elementStart(tView, tNode);\n  }\n  return tNode;\n}\n/**\n * Create DOM element. The instruction must later be followed by `elementEnd()` call.\n *\n * @param index Index of the element in the LView array\n * @param name Name of the DOM Node\n * @param attrsIndex Index of the element's attributes in the `consts` array.\n * @param localRefsIndex Index of the element's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * Attributes and localRefs are passed as an array of strings where elements with an even index\n * hold an attribute name and elements with an odd index hold an attribute value, ex.:\n * ['id', 'warning5', 'class', 'alert']\n *\n * @codeGenApi\n */\nfunction ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = HEADER_OFFSET + index;\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'elements should be created before any bindings');\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  const renderer = lView[RENDERER];\n  const tNode = tView.firstCreatePass ? elementStartFirstCreatePass(adjustedIndex, tView, lView, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n  const native = _locateOrCreateElementNode(tView, lView, tNode, renderer, name, index);\n  lView[adjustedIndex] = native;\n  const hasDirectives = isDirectiveHost(tNode);\n  if (ngDevMode && tView.firstCreatePass) {\n    validateElementIsKnown(native, lView, tNode.value, tView.schemas, hasDirectives);\n  }\n  setCurrentTNode(tNode, true);\n  setupStaticAttributes(renderer, native, tNode);\n  if (!isDetachedByI18n(tNode) && wasLastNodeCreated()) {\n    // In the i18n case, the translation may have removed this element, so only add it if it is not\n    // detached. See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.\n    appendChild(tView, lView, native, tNode);\n  }\n  // any immediate children of a component or template container must be pre-emptively\n  // monkey-patched with the component view data so that the element can be inspected\n  // later on using any element discovery utility methods (see `element_discovery.ts`)\n  if (getElementDepthCount() === 0) {\n    attachPatchData(native, lView);\n  }\n  increaseElementDepthCount();\n  if (hasDirectives) {\n    createDirectivesInstances(tView, lView, tNode);\n    executeContentQueries(tView, tNode, lView);\n  }\n  if (localRefsIndex !== null) {\n    saveResolvedLocalsInData(lView, tNode);\n  }\n  return ɵɵelementStart;\n}\n/**\n * Mark the end of the element.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementEnd() {\n  let currentTNode = getCurrentTNode();\n  ngDevMode && assertDefined(currentTNode, 'No parent node to close.');\n  if (isCurrentTNodeParent()) {\n    setCurrentTNodeAsNotParent();\n  } else {\n    ngDevMode && assertHasParent(getCurrentTNode());\n    currentTNode = currentTNode.parent;\n    setCurrentTNode(currentTNode, false);\n  }\n  const tNode = currentTNode;\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */);\n  if (isSkipHydrationRootTNode(tNode)) {\n    leaveSkipHydrationBlock();\n  }\n  decreaseElementDepthCount();\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    registerPostOrderHooks(tView, currentTNode);\n    if (isContentQueryHost(currentTNode)) {\n      tView.queries.elementEnd(currentTNode);\n    }\n  }\n  if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {\n    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);\n  }\n  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {\n    setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);\n  }\n  return ɵɵelementEnd;\n}\n/**\n * Creates an empty element using {@link elementStart} and {@link elementEnd}\n *\n * @param index Index of the element in the data array\n * @param name Name of the DOM Node\n * @param attrsIndex Index of the element's attributes in the `consts` array.\n * @param localRefsIndex Index of the element's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelement(index, name, attrsIndex, localRefsIndex) {\n  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);\n  ɵɵelementEnd();\n  return ɵɵelement;\n}\nlet _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) => {\n  lastNodeWasCreated(true);\n  return createElementNode(renderer, name, getNamespace$1());\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of element nodes.\n */\nfunction locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createElementNode(renderer, name, getNamespace$1());\n  }\n  // Hydration mode, looking up an existing element in DOM.\n  const native = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateMatchingNode(native, Node.ELEMENT_NODE, name, lView, tNode);\n  ngDevMode && markRNodeAsClaimedByHydration(native);\n  // This element might also be an anchor of a view container.\n  if (getSerializedContainerViews(hydrationInfo, index)) {\n    // Important note: this element acts as an anchor, but it's **not** a part\n    // of the embedded view, so we start the segment **after** this element, taking\n    // a reference to the next sibling. For example, the following template:\n    // `<div #vcrTarget>` is represented in the DOM as `<div></div>...<!--container-->`,\n    // so while processing a `<div>` instruction, point to the next sibling as a\n    // start of a segment.\n    ngDevMode && validateNodeExists(native.nextSibling, lView, tNode);\n    setSegmentHead(hydrationInfo, index, native.nextSibling);\n  }\n  // Checks if the skip hydration attribute is present during hydration so we know to\n  // skip attempting to hydrate this block. We check both TNode and RElement for an\n  // attribute: the RElement case is needed for i18n cases, when we add it to host\n  // elements during the annotation phase (after all internal data structures are setup).\n  if (hydrationInfo && (hasSkipHydrationAttrOnTNode(tNode) || hasSkipHydrationAttrOnRElement(native))) {\n    if (isComponentHost(tNode)) {\n      enterSkipHydrationBlock(tNode);\n      // Since this isn't hydratable, we need to empty the node\n      // so there's no duplicate content after render\n      clearElementContents(native);\n      ngDevMode && markRNodeAsSkippedByHydration(native);\n    } else if (ngDevMode) {\n      // If this is not a component host, throw an error.\n      // Hydration can be skipped on per-component basis only.\n      throw invalidSkipHydrationHost(native);\n    }\n  }\n  return native;\n}\nfunction enableLocateOrCreateElementNodeImpl() {\n  _locateOrCreateElementNode = locateOrCreateElementNodeImpl;\n}\nfunction elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {\n  ngDevMode && ngDevMode.firstCreatePass++;\n  const tViewConsts = tView.consts;\n  const attrs = getConstant(tViewConsts, attrsIndex);\n  const tNode = getOrCreateTNode(tView, index, 8 /* TNodeType.ElementContainer */, 'ng-container', attrs);\n  // While ng-container doesn't necessarily support styling, we use the style context to identify\n  // and execute directives on the ng-container.\n  if (attrs !== null) {\n    computeStaticStyling(tNode, attrs, true);\n  }\n  const localRefs = getConstant(tViewConsts, localRefsIndex);\n  resolveDirectives(tView, lView, tNode, localRefs);\n  if (tView.queries !== null) {\n    tView.queries.elementStart(tView, tNode);\n  }\n  return tNode;\n}\n/**\n * Creates a logical container for other nodes (<ng-container>) backed by a comment node in the DOM.\n * The instruction must later be followed by `elementContainerEnd()` call.\n *\n * @param index Index of the element in the LView array\n * @param attrsIndex Index of the container attributes in the `consts` array.\n * @param localRefsIndex Index of the container's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * Even if this instruction accepts a set of attributes no actual attribute values are propagated to\n * the DOM (as a comment node can't have attributes). Attributes are here only for directive\n * matching purposes and setting initial inputs of directives.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'element containers should be created before any bindings');\n  const tNode = tView.firstCreatePass ? elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];\n  setCurrentTNode(tNode, true);\n  const comment = _locateOrCreateElementContainerNode(tView, lView, tNode, index);\n  lView[adjustedIndex] = comment;\n  if (wasLastNodeCreated()) {\n    appendChild(tView, lView, comment, tNode);\n  }\n  attachPatchData(comment, lView);\n  if (isDirectiveHost(tNode)) {\n    createDirectivesInstances(tView, lView, tNode);\n    executeContentQueries(tView, tNode, lView);\n  }\n  if (localRefsIndex != null) {\n    saveResolvedLocalsInData(lView, tNode);\n  }\n  return ɵɵelementContainerStart;\n}\n/**\n * Mark the end of the <ng-container>.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainerEnd() {\n  let currentTNode = getCurrentTNode();\n  const tView = getTView();\n  if (isCurrentTNodeParent()) {\n    setCurrentTNodeAsNotParent();\n  } else {\n    ngDevMode && assertHasParent(currentTNode);\n    currentTNode = currentTNode.parent;\n    setCurrentTNode(currentTNode, false);\n  }\n  ngDevMode && assertTNodeType(currentTNode, 8 /* TNodeType.ElementContainer */);\n  if (tView.firstCreatePass) {\n    registerPostOrderHooks(tView, currentTNode);\n    if (isContentQueryHost(currentTNode)) {\n      tView.queries.elementEnd(currentTNode);\n    }\n  }\n  return ɵɵelementContainerEnd;\n}\n/**\n * Creates an empty logical container using {@link elementContainerStart}\n * and {@link elementContainerEnd}\n *\n * @param index Index of the element in the LView array\n * @param attrsIndex Index of the container attributes in the `consts` array.\n * @param localRefsIndex Index of the container's local references in the `consts` array.\n * @returns This function returns itself so that it may be chained.\n *\n * @codeGenApi\n */\nfunction ɵɵelementContainer(index, attrsIndex, localRefsIndex) {\n  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);\n  ɵɵelementContainerEnd();\n  return ɵɵelementContainer;\n}\nlet _locateOrCreateElementContainerNode = (tView, lView, tNode, index) => {\n  lastNodeWasCreated(true);\n  return createCommentNode(lView[RENDERER], ngDevMode ? 'ng-container' : '');\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of comment nodes that\n * represent <ng-container>'s anchor.\n */\nfunction locateOrCreateElementContainerNode(tView, lView, tNode, index) {\n  let comment;\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index) || isDetachedByI18n(tNode);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createCommentNode(lView[RENDERER], ngDevMode ? 'ng-container' : '');\n  }\n  // Hydration mode, looking up existing elements in DOM.\n  const currentRNode = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateNodeExists(currentRNode, lView, tNode);\n  const ngContainerSize = getNgContainerSize(hydrationInfo, index);\n  ngDevMode && assertNumber(ngContainerSize, 'Unexpected state: hydrating an <ng-container>, ' + 'but no hydration info is available.');\n  setSegmentHead(hydrationInfo, index, currentRNode);\n  comment = siblingAfter(ngContainerSize, currentRNode);\n  if (ngDevMode) {\n    validateMatchingNode(comment, Node.COMMENT_NODE, null, lView, tNode);\n    markRNodeAsClaimedByHydration(comment);\n  }\n  return comment;\n}\nfunction enableLocateOrCreateElementContainerNodeImpl() {\n  _locateOrCreateElementContainerNode = locateOrCreateElementContainerNode;\n}\n\n/**\n * Returns the current OpaqueViewState instance.\n *\n * Used in conjunction with the restoreView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @codeGenApi\n */\nfunction ɵɵgetCurrentView() {\n  return getLView();\n}\n\n/**\n * Update a property on a host element. Only applies to native node properties, not inputs.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `property('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵhostProperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵhostProperty;\n}\n/**\n * Updates a synthetic host binding (e.g. `[@foo]`) on a component or directive.\n *\n * This instruction is for compatibility purposes and is designed to ensure that a\n * synthetic host binding (e.g. `@HostBinding('@foo')`) properly gets rendered in\n * the component's renderer. Normally all host bindings are evaluated with the parent\n * component's renderer, but, in the case of animation @triggers, they need to be\n * evaluated with the sub component's renderer (because that's where the animation\n * triggers are defined).\n *\n * Do not use this instruction as a replacement for `elementProperty`. This instruction\n * only exists to ensure compatibility with the ViewEngine's host binding behavior.\n *\n * @param index The index of the element to update in the data array\n * @param propName Name of property. Because it is going to DOM, this is not subject to\n *        renaming as part of minification.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n *\n * @codeGenApi\n */\nfunction ɵɵsyntheticHostProperty(propName, value, sanitizer) {\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    const currentDef = getCurrentDirectiveDef(tView.data);\n    const renderer = loadComponentRenderer(currentDef, tNode, lView);\n    elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵsyntheticHostProperty;\n}\n\n/**\n * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nif (typeof ngI18nClosureMode === 'undefined') {\n  // These property accesses can be ignored because ngI18nClosureMode will be set to false\n  // when optimizing code and the whole if statement will be dropped.\n  // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.\n  // NOTE: we need to have it in IIFE so that the tree-shaker is happy.\n  (function () {\n    // tslint:disable-next-line:no-toplevel-property-access\n    _global['ngI18nClosureMode'] =\n    // TODO(FW-1250): validate that this actually, you know, works.\n    // tslint:disable-next-line:no-toplevel-property-access\n    typeof goog !== 'undefined' && typeof goog.getMsg === 'function';\n  })();\n}\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\nfunction plural(val) {\n  const n = val,\n    i = Math.floor(Math.abs(val)),\n    v = val.toString().replace(/^[^.]*\\.?/, '').length;\n  if (i === 1 && v === 0) return 1;\n  return 5;\n}\nvar localeEn = [\"en\", [[\"a\", \"p\"], [\"AM\", \"PM\"], u], [[\"AM\", \"PM\"], u, u], [[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"], [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]], u, [[\"B\", \"A\"], [\"BC\", \"AD\"], [\"Before Christ\", \"Anno Domini\"]], 0, [6, 0], [\"M/d/yy\", \"MMM d, y\", \"MMMM d, y\", \"EEEE, MMMM d, y\"], [\"h:mm a\", \"h:mm:ss a\", \"h:mm:ss a z\", \"h:mm:ss a zzzz\"], [\"{1}, {0}\", u, \"{1} 'at' {0}\", u], [\".\", \",\", \";\", \"%\", \"+\", \"-\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0%\", \"¤#,##0.00\", \"#E0\"], \"USD\", \"$\", \"US Dollar\", {}, \"ltr\", plural];\n\n/**\n * This const is used to store the locale data registered with `registerLocaleData`\n */\nlet LOCALE_DATA = {};\n/**\n * Register locale data to be used internally by Angular. See the\n * [\"I18n guide\"](guide/i18n/format-data-locale) to know how to import additional locale\n * data.\n *\n * The signature `registerLocaleData(data: any, extraData?: any)` is deprecated since v5.1\n */\nfunction registerLocaleData(data, localeId, extraData) {\n  if (typeof localeId !== 'string') {\n    extraData = localeId;\n    localeId = data[LocaleDataIndex.LocaleId];\n  }\n  localeId = localeId.toLowerCase().replace(/_/g, '-');\n  LOCALE_DATA[localeId] = data;\n  if (extraData) {\n    LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;\n  }\n}\n/**\n * Finds the locale data for a given locale.\n *\n * @param locale The locale code.\n * @returns The locale data.\n * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)\n */\nfunction findLocaleData(locale) {\n  const normalizedLocale = normalizeLocale(locale);\n  let match = getLocaleData(normalizedLocale);\n  if (match) {\n    return match;\n  }\n  // let's try to find a parent locale\n  const parentLocale = normalizedLocale.split('-')[0];\n  match = getLocaleData(parentLocale);\n  if (match) {\n    return match;\n  }\n  if (parentLocale === 'en') {\n    return localeEn;\n  }\n  throw new RuntimeError(701 /* RuntimeErrorCode.MISSING_LOCALE_DATA */, ngDevMode && `Missing locale data for the locale \"${locale}\".`);\n}\n/**\n * Retrieves the default currency code for the given locale.\n *\n * The default is defined as the first currency which is still in use.\n *\n * @param locale The code of the locale whose currency code we want.\n * @returns The code of the default currency for the given locale.\n *\n */\nfunction getLocaleCurrencyCode(locale) {\n  const data = findLocaleData(locale);\n  return data[LocaleDataIndex.CurrencyCode] || null;\n}\n/**\n * Retrieves the plural function used by ICU expressions to determine the plural case to use\n * for a given locale.\n * @param locale A locale code for the locale format rules to use.\n * @returns The plural function for the locale.\n * @see {@link NgPlural}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n */\nfunction getLocalePluralCase(locale) {\n  const data = findLocaleData(locale);\n  return data[LocaleDataIndex.PluralCase];\n}\n/**\n * Helper function to get the given `normalizedLocale` from `LOCALE_DATA`\n * or from the global `ng.common.locale`.\n */\nfunction getLocaleData(normalizedLocale) {\n  if (!(normalizedLocale in LOCALE_DATA)) {\n    LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];\n  }\n  return LOCALE_DATA[normalizedLocale];\n}\n/**\n * Helper function to remove all the locale data from `LOCALE_DATA`.\n */\nfunction unregisterAllLocaleData() {\n  LOCALE_DATA = {};\n}\n/**\n * Index of each type of locale data from the locale data array\n */\nvar LocaleDataIndex;\n(function (LocaleDataIndex) {\n  LocaleDataIndex[LocaleDataIndex[\"LocaleId\"] = 0] = \"LocaleId\";\n  LocaleDataIndex[LocaleDataIndex[\"DayPeriodsFormat\"] = 1] = \"DayPeriodsFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DayPeriodsStandalone\"] = 2] = \"DayPeriodsStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"DaysFormat\"] = 3] = \"DaysFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DaysStandalone\"] = 4] = \"DaysStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"MonthsFormat\"] = 5] = \"MonthsFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"MonthsStandalone\"] = 6] = \"MonthsStandalone\";\n  LocaleDataIndex[LocaleDataIndex[\"Eras\"] = 7] = \"Eras\";\n  LocaleDataIndex[LocaleDataIndex[\"FirstDayOfWeek\"] = 8] = \"FirstDayOfWeek\";\n  LocaleDataIndex[LocaleDataIndex[\"WeekendRange\"] = 9] = \"WeekendRange\";\n  LocaleDataIndex[LocaleDataIndex[\"DateFormat\"] = 10] = \"DateFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"TimeFormat\"] = 11] = \"TimeFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"DateTimeFormat\"] = 12] = \"DateTimeFormat\";\n  LocaleDataIndex[LocaleDataIndex[\"NumberSymbols\"] = 13] = \"NumberSymbols\";\n  LocaleDataIndex[LocaleDataIndex[\"NumberFormats\"] = 14] = \"NumberFormats\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencyCode\"] = 15] = \"CurrencyCode\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencySymbol\"] = 16] = \"CurrencySymbol\";\n  LocaleDataIndex[LocaleDataIndex[\"CurrencyName\"] = 17] = \"CurrencyName\";\n  LocaleDataIndex[LocaleDataIndex[\"Currencies\"] = 18] = \"Currencies\";\n  LocaleDataIndex[LocaleDataIndex[\"Directionality\"] = 19] = \"Directionality\";\n  LocaleDataIndex[LocaleDataIndex[\"PluralCase\"] = 20] = \"PluralCase\";\n  LocaleDataIndex[LocaleDataIndex[\"ExtraData\"] = 21] = \"ExtraData\";\n})(LocaleDataIndex || (LocaleDataIndex = {}));\n/**\n * Returns the canonical form of a locale name - lowercase with `_` replaced with `-`.\n */\nfunction normalizeLocale(locale) {\n  return locale.toLowerCase().replace(/_/g, '-');\n}\nconst pluralMapping = ['zero', 'one', 'two', 'few', 'many'];\n/**\n * Returns the plural case based on the locale\n */\nfunction getPluralCase(value, locale) {\n  const plural = getLocalePluralCase(locale)(parseInt(value, 10));\n  const result = pluralMapping[plural];\n  return result !== undefined ? result : 'other';\n}\n/**\n * The locale id that the application is using by default (for translations and ICU expressions).\n */\nconst DEFAULT_LOCALE_ID = 'en-US';\n/**\n * USD currency code that the application uses by default for CurrencyPipe when no\n * DEFAULT_CURRENCY_CODE is provided.\n */\nconst USD_CURRENCY_CODE = 'USD';\n\n/**\n * Marks that the next string is an element name.\n *\n * See `I18nMutateOpCodes` documentation.\n */\nconst ELEMENT_MARKER = {\n  marker: 'element'\n};\n/**\n * Marks that the next string is comment text need for ICU.\n *\n * See `I18nMutateOpCodes` documentation.\n */\nconst ICU_MARKER = {\n  marker: 'ICU'\n};\n/**\n * See `I18nCreateOpCodes`\n */\nvar I18nCreateOpCode;\n(function (I18nCreateOpCode) {\n  /**\n   * Number of bits to shift index so that it can be combined with the `APPEND_EAGERLY` and\n   * `COMMENT`.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"SHIFT\"] = 2] = \"SHIFT\";\n  /**\n   * Should the node be appended to parent immediately after creation.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"APPEND_EAGERLY\"] = 1] = \"APPEND_EAGERLY\";\n  /**\n   * If set the node should be comment (rather than a text) node.\n   */\n  I18nCreateOpCode[I18nCreateOpCode[\"COMMENT\"] = 2] = \"COMMENT\";\n})(I18nCreateOpCode || (I18nCreateOpCode = {}));\n\n/**\n * The locale id that the application is currently using (for translations and ICU expressions).\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n */\nlet LOCALE_ID$1 = DEFAULT_LOCALE_ID;\n/**\n * Sets the locale id that will be used for translations and ICU expressions.\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n *\n * @param localeId\n */\nfunction setLocaleId(localeId) {\n  ngDevMode && assertDefined(localeId, `Expected localeId to be defined`);\n  if (typeof localeId === 'string') {\n    LOCALE_ID$1 = localeId.toLowerCase().replace(/_/g, '-');\n  }\n}\n/**\n * Gets the locale id that will be used for translations and ICU expressions.\n * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine\n * but is now defined as a global value.\n */\nfunction getLocaleId() {\n  return LOCALE_ID$1;\n}\n\n/**\n * Keep track of which input bindings in `ɵɵi18nExp` have changed.\n *\n * This is used to efficiently update expressions in i18n only when the corresponding input has\n * changed.\n *\n * 1) Each bit represents which of the `ɵɵi18nExp` has changed.\n * 2) There are 32 bits allowed in JS.\n * 3) Bit 32 is special as it is shared for all changes past 32. (In other words if you have more\n * than 32 `ɵɵi18nExp` then all changes past 32nd `ɵɵi18nExp` will be mapped to same bit. This means\n * that we may end up changing more than we need to. But i18n expressions with 32 bindings is rare\n * so in practice it should not be an issue.)\n */\nlet changeMask = 0b0;\n/**\n * Keeps track of which bit needs to be updated in `changeMask`\n *\n * This value gets incremented on every call to `ɵɵi18nExp`\n */\nlet changeMaskCounter = 0;\n/**\n * Keep track of which input bindings in `ɵɵi18nExp` have changed.\n *\n * `setMaskBit` gets invoked by each call to `ɵɵi18nExp`.\n *\n * @param hasChange did `ɵɵi18nExp` detect a change.\n */\nfunction setMaskBit(hasChange) {\n  if (hasChange) {\n    changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);\n  }\n  changeMaskCounter++;\n}\nfunction applyI18n(tView, lView, index) {\n  if (changeMaskCounter > 0) {\n    ngDevMode && assertDefined(tView, `tView should be defined`);\n    const tI18n = tView.data[index];\n    // When `index` points to an `ɵɵi18nAttributes` then we have an array otherwise `TI18n`\n    const updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;\n    const bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;\n    applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);\n  }\n  // Reset changeMask & maskBit to default for the next update cycle\n  changeMask = 0b0;\n  changeMaskCounter = 0;\n}\nfunction createNodeWithoutHydration(lView, textOrName, nodeType) {\n  const renderer = lView[RENDERER];\n  switch (nodeType) {\n    case Node.COMMENT_NODE:\n      return createCommentNode(renderer, textOrName);\n    case Node.TEXT_NODE:\n      return createTextNode(renderer, textOrName);\n    case Node.ELEMENT_NODE:\n      return createElementNode(renderer, textOrName, null);\n  }\n}\nlet _locateOrCreateNode = (lView, index, textOrName, nodeType) => {\n  lastNodeWasCreated(true);\n  return createNodeWithoutHydration(lView, textOrName, nodeType);\n};\nfunction locateOrCreateNodeImpl(lView, index, textOrName, nodeType) {\n  const hydrationInfo = lView[HYDRATION];\n  const noOffsetIndex = index - HEADER_OFFSET;\n  const isNodeCreationMode = !isI18nHydrationSupportEnabled() || !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, noOffsetIndex);\n  lastNodeWasCreated(isNodeCreationMode);\n  if (isNodeCreationMode) {\n    return createNodeWithoutHydration(lView, textOrName, nodeType);\n  }\n  const native = locateI18nRNodeByIndex(hydrationInfo, noOffsetIndex);\n  // TODO: Improve error handling\n  //\n  // Other hydration paths use validateMatchingNode() in order to provide\n  // detailed information in development mode about the expected DOM.\n  // However, not every node in an i18n block has a TNode. Instead, we\n  // need to be able to use the AST to generate a similar message.\n  ngDevMode && assertDefined(native, 'expected native element');\n  ngDevMode && assertEqual(native.nodeType, nodeType, 'expected matching nodeType');\n  ngDevMode && nodeType === Node.ELEMENT_NODE && assertEqual(native.tagName.toLowerCase(), textOrName.toLowerCase(), 'expecting matching tagName');\n  ngDevMode && markRNodeAsClaimedByHydration(native);\n  return native;\n}\nfunction enableLocateOrCreateI18nNodeImpl() {\n  _locateOrCreateNode = locateOrCreateNodeImpl;\n}\n/**\n * Apply `I18nCreateOpCodes` op-codes as stored in `TI18n.create`.\n *\n * Creates text (and comment) nodes which are internationalized.\n *\n * @param lView Current lView\n * @param createOpCodes Set of op-codes to apply\n * @param parentRNode Parent node (so that direct children can be added eagerly) or `null` if it is\n *     a root node.\n * @param insertInFrontOf DOM node that should be used as an anchor.\n */\nfunction applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {\n  const renderer = lView[RENDERER];\n  for (let i = 0; i < createOpCodes.length; i++) {\n    const opCode = createOpCodes[i++];\n    const text = createOpCodes[i];\n    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n    const index = opCode >>> I18nCreateOpCode.SHIFT;\n    let rNode = lView[index];\n    let lastNodeWasCreated = false;\n    if (rNode === null) {\n      // We only create new DOM nodes if they don't already exist: If ICU switches case back to a\n      // case which was already instantiated, no need to create new DOM nodes.\n      rNode = lView[index] = _locateOrCreateNode(lView, index, text, isComment ? Node.COMMENT_NODE : Node.TEXT_NODE);\n      lastNodeWasCreated = wasLastNodeCreated();\n    }\n    if (appendNow && parentRNode !== null && lastNodeWasCreated) {\n      nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);\n    }\n  }\n}\n/**\n * Apply `I18nMutateOpCodes` OpCodes.\n *\n * @param tView Current `TView`\n * @param mutableOpCodes Mutable OpCodes to process\n * @param lView Current `LView`\n * @param anchorRNode place where the i18n node should be inserted.\n */\nfunction applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {\n  ngDevMode && assertDomNode(anchorRNode);\n  const renderer = lView[RENDERER];\n  // `rootIdx` represents the node into which all inserts happen.\n  let rootIdx = null;\n  // `rootRNode` represents the real node into which we insert. This can be different from\n  // `lView[rootIdx]` if we have projection.\n  //  - null we don't have a parent (as can be the case in when we are inserting into a root of\n  //    LView which has no parent.)\n  //  - `RElement` The element representing the root after taking projection into account.\n  let rootRNode;\n  for (let i = 0; i < mutableOpCodes.length; i++) {\n    const opCode = mutableOpCodes[i];\n    if (typeof opCode == 'string') {\n      const textNodeIndex = mutableOpCodes[++i];\n      if (lView[textNodeIndex] === null) {\n        ngDevMode && ngDevMode.rendererCreateTextNode++;\n        ngDevMode && assertIndexInRange(lView, textNodeIndex);\n        lView[textNodeIndex] = _locateOrCreateNode(lView, textNodeIndex, opCode, Node.TEXT_NODE);\n      }\n    } else if (typeof opCode == 'number') {\n      switch (opCode & 1 /* IcuCreateOpCode.MASK_INSTRUCTION */) {\n        case 0 /* IcuCreateOpCode.AppendChild */:\n          const parentIdx = getParentFromIcuCreateOpCode(opCode);\n          if (rootIdx === null) {\n            // The first operation should save the `rootIdx` because the first operation\n            // must insert into the root. (Only subsequent operations can insert into a dynamic\n            // parent)\n            rootIdx = parentIdx;\n            rootRNode = nativeParentNode(renderer, anchorRNode);\n          }\n          let insertInFrontOf;\n          let parentRNode;\n          if (parentIdx === rootIdx) {\n            insertInFrontOf = anchorRNode;\n            parentRNode = rootRNode;\n          } else {\n            insertInFrontOf = null;\n            parentRNode = unwrapRNode(lView[parentIdx]);\n          }\n          // FIXME(misko): Refactor with `processI18nText`\n          if (parentRNode !== null) {\n            // This can happen if the `LView` we are adding to is not attached to a parent `LView`.\n            // In such a case there is no \"root\" we can attach to. This is fine, as we still need to\n            // create the elements. When the `LView` gets later added to a parent these \"root\" nodes\n            // get picked up and added.\n            ngDevMode && assertDomNode(parentRNode);\n            const refIdx = getRefFromIcuCreateOpCode(opCode);\n            ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref');\n            // `unwrapRNode` is not needed here as all of these point to RNodes as part of the i18n\n            // which can't have components.\n            const child = lView[refIdx];\n            ngDevMode && assertDomNode(child);\n            nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);\n            const tIcu = getTIcu(tView, refIdx);\n            if (tIcu !== null && typeof tIcu === 'object') {\n              // If we just added a comment node which has ICU then that ICU may have already been\n              // rendered and therefore we need to re-add it here.\n              ngDevMode && assertTIcu(tIcu);\n              const caseIndex = getCurrentICUCaseIndex(tIcu, lView);\n              if (caseIndex !== null) {\n                applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);\n              }\n            }\n          }\n          break;\n        case 1 /* IcuCreateOpCode.Attr */:\n          const elementNodeIndex = opCode >>> 1 /* IcuCreateOpCode.SHIFT_REF */;\n          const attrName = mutableOpCodes[++i];\n          const attrValue = mutableOpCodes[++i];\n          // This code is used for ICU expressions only, since we don't support\n          // directives/components in ICUs, we don't need to worry about inputs here\n          setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);\n          break;\n        default:\n          if (ngDevMode) {\n            throw new RuntimeError(700 /* RuntimeErrorCode.INVALID_I18N_STRUCTURE */, `Unable to determine the type of mutate operation for \"${opCode}\"`);\n          }\n      }\n    } else {\n      switch (opCode) {\n        case ICU_MARKER:\n          const commentValue = mutableOpCodes[++i];\n          const commentNodeIndex = mutableOpCodes[++i];\n          if (lView[commentNodeIndex] === null) {\n            ngDevMode && assertEqual(typeof commentValue, 'string', `Expected \"${commentValue}\" to be a comment node value`);\n            ngDevMode && ngDevMode.rendererCreateComment++;\n            ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);\n            const commentRNode = lView[commentNodeIndex] = _locateOrCreateNode(lView, commentNodeIndex, commentValue, Node.COMMENT_NODE);\n            // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)\n            attachPatchData(commentRNode, lView);\n          }\n          break;\n        case ELEMENT_MARKER:\n          const tagName = mutableOpCodes[++i];\n          const elementNodeIndex = mutableOpCodes[++i];\n          if (lView[elementNodeIndex] === null) {\n            ngDevMode && assertEqual(typeof tagName, 'string', `Expected \"${tagName}\" to be an element node tag name`);\n            ngDevMode && ngDevMode.rendererCreateElement++;\n            ngDevMode && assertIndexInExpandoRange(lView, elementNodeIndex);\n            const elementRNode = lView[elementNodeIndex] = _locateOrCreateNode(lView, elementNodeIndex, tagName, Node.ELEMENT_NODE);\n            // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)\n            attachPatchData(elementRNode, lView);\n          }\n          break;\n        default:\n          ngDevMode && throwError(`Unable to determine the type of mutate operation for \"${opCode}\"`);\n      }\n    }\n  }\n}\n/**\n * Apply `I18nUpdateOpCodes` OpCodes\n *\n * @param tView Current `TView`\n * @param lView Current `LView`\n * @param updateOpCodes OpCodes to process\n * @param bindingsStartIndex Location of the first `ɵɵi18nApply`\n * @param changeMask Each bit corresponds to a `ɵɵi18nExp` (Counting backwards from\n *     `bindingsStartIndex`)\n */\nfunction applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {\n  for (let i = 0; i < updateOpCodes.length; i++) {\n    // bit code to check if we should apply the next update\n    const checkBit = updateOpCodes[i];\n    // Number of opCodes to skip until next set of update codes\n    const skipCodes = updateOpCodes[++i];\n    if (checkBit & changeMask) {\n      // The value has been updated since last checked\n      let value = '';\n      for (let j = i + 1; j <= i + skipCodes; j++) {\n        const opCode = updateOpCodes[j];\n        if (typeof opCode == 'string') {\n          value += opCode;\n        } else if (typeof opCode == 'number') {\n          if (opCode < 0) {\n            // Negative opCode represent `i18nExp` values offset.\n            value += renderStringify(lView[bindingsStartIndex - opCode]);\n          } else {\n            const nodeIndex = opCode >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n            switch (opCode & 3 /* I18nUpdateOpCode.MASK_OPCODE */) {\n              case 1 /* I18nUpdateOpCode.Attr */:\n                const propName = updateOpCodes[++j];\n                const sanitizeFn = updateOpCodes[++j];\n                const tNodeOrTagName = tView.data[nodeIndex];\n                ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');\n                if (typeof tNodeOrTagName === 'string') {\n                  // IF we don't have a `TNode`, then we are an element in ICU (as ICU content does\n                  // not have TNode), in which case we know that there are no directives, and hence\n                  // we use attribute setting.\n                  setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);\n                } else {\n                  elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);\n                }\n                break;\n              case 0 /* I18nUpdateOpCode.Text */:\n                const rText = lView[nodeIndex];\n                rText !== null && updateTextNode(lView[RENDERER], rText, value);\n                break;\n              case 2 /* I18nUpdateOpCode.IcuSwitch */:\n                applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);\n                break;\n              case 3 /* I18nUpdateOpCode.IcuUpdate */:\n                applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);\n                break;\n            }\n          }\n        }\n      }\n    } else {\n      const opCode = updateOpCodes[i + 1];\n      if (opCode > 0 && (opCode & 3 /* I18nUpdateOpCode.MASK_OPCODE */) === 3 /* I18nUpdateOpCode.IcuUpdate */) {\n        // Special case for the `icuUpdateCase`. It could be that the mask did not match, but\n        // we still need to execute `icuUpdateCase` because the case has changed recently due to\n        // previous `icuSwitchCase` instruction. (`icuSwitchCase` and `icuUpdateCase` always come in\n        // pairs.)\n        const nodeIndex = opCode >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n        const tIcu = getTIcu(tView, nodeIndex);\n        const currentIndex = lView[tIcu.currentCaseLViewIndex];\n        if (currentIndex < 0) {\n          applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);\n        }\n      }\n    }\n    i += skipCodes;\n  }\n}\n/**\n * Apply OpCodes associated with updating an existing ICU.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param bindingsStartIndex Location of the first `ɵɵi18nApply`\n * @param lView Current `LView`\n */\nfunction applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {\n  ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);\n  let activeCaseIndex = lView[tIcu.currentCaseLViewIndex];\n  if (activeCaseIndex !== null) {\n    let mask = changeMask;\n    if (activeCaseIndex < 0) {\n      // Clear the flag.\n      // Negative number means that the ICU was freshly created and we need to force the update.\n      activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex;\n      // -1 is same as all bits on, which simulates creation since it marks all bits dirty\n      mask = -1;\n    }\n    applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);\n  }\n}\n/**\n * Apply OpCodes associated with switching a case on ICU.\n *\n * This involves tearing down existing case and than building up a new case.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param lView Current `LView`\n * @param value Value of the case to update to.\n */\nfunction applyIcuSwitchCase(tView, tIcu, lView, value) {\n  // Rebuild a new case for this ICU\n  const caseIndex = getCaseIndex(tIcu, value);\n  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n  if (activeCaseIndex !== caseIndex) {\n    applyIcuSwitchCaseRemove(tView, tIcu, lView);\n    lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;\n    if (caseIndex !== null) {\n      // Add the nodes for the new case\n      const anchorRNode = lView[tIcu.anchorIdx];\n      if (anchorRNode) {\n        ngDevMode && assertDomNode(anchorRNode);\n        applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);\n      }\n      claimDehydratedIcuCase(lView, tIcu.anchorIdx, caseIndex);\n    }\n  }\n}\n/**\n * Apply OpCodes associated with tearing ICU case.\n *\n * This involves tearing down existing case and than building up a new case.\n *\n * @param tView Current `TView`\n * @param tIcu Current `TIcu`\n * @param lView Current `LView`\n */\nfunction applyIcuSwitchCaseRemove(tView, tIcu, lView) {\n  let activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);\n  if (activeCaseIndex !== null) {\n    const removeCodes = tIcu.remove[activeCaseIndex];\n    for (let i = 0; i < removeCodes.length; i++) {\n      const nodeOrIcuIndex = removeCodes[i];\n      if (nodeOrIcuIndex > 0) {\n        // Positive numbers are `RNode`s.\n        const rNode = getNativeByIndex(nodeOrIcuIndex, lView);\n        rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);\n      } else {\n        // Negative numbers are ICUs\n        applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);\n      }\n    }\n  }\n}\n/**\n * Returns the index of the current case of an ICU expression depending on the main binding value\n *\n * @param icuExpression\n * @param bindingValue The value of the main binding used by this ICU expression\n */\nfunction getCaseIndex(icuExpression, bindingValue) {\n  let index = icuExpression.cases.indexOf(bindingValue);\n  if (index === -1) {\n    switch (icuExpression.type) {\n      case 1 /* IcuType.plural */:\n        {\n          const resolvedCase = getPluralCase(bindingValue, getLocaleId());\n          index = icuExpression.cases.indexOf(resolvedCase);\n          if (index === -1 && resolvedCase !== 'other') {\n            index = icuExpression.cases.indexOf('other');\n          }\n          break;\n        }\n      case 0 /* IcuType.select */:\n        {\n          index = icuExpression.cases.indexOf('other');\n          break;\n        }\n    }\n  }\n  return index === -1 ? null : index;\n}\n\n/**\n * Converts `I18nCreateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nCreateOpCodes.debug` property if `ngDevMode` is enabled.\n * This function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nCreateOpCodes` if attached as a method.\n * @param opcodes `I18nCreateOpCodes` if invoked as a function.\n */\nfunction i18nCreateOpCodesToString(opcodes) {\n  const createOpCodes = opcodes || (Array.isArray(this) ? this : []);\n  let lines = [];\n  for (let i = 0; i < createOpCodes.length; i++) {\n    const opCode = createOpCodes[i++];\n    const text = createOpCodes[i];\n    const isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;\n    const appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;\n    const index = opCode >>> I18nCreateOpCode.SHIFT;\n    lines.push(`lView[${index}] = document.${isComment ? 'createComment' : 'createText'}(${JSON.stringify(text)});`);\n    if (appendNow) {\n      lines.push(`parent.appendChild(lView[${index}]);`);\n    }\n  }\n  return lines;\n}\n/**\n * Converts `I18nUpdateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nUpdateOpCodes.debug` property if `ngDevMode` is enabled.\n * This function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nUpdateOpCodes` if attached as a method.\n * @param opcodes `I18nUpdateOpCodes` if invoked as a function.\n */\nfunction i18nUpdateOpCodesToString(opcodes) {\n  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n  let lines = [];\n  function consumeOpCode(value) {\n    const ref = value >>> 2 /* I18nUpdateOpCode.SHIFT_REF */;\n    const opCode = value & 3 /* I18nUpdateOpCode.MASK_OPCODE */;\n    switch (opCode) {\n      case 0 /* I18nUpdateOpCode.Text */:\n        return `(lView[${ref}] as Text).textContent = $$$`;\n      case 1 /* I18nUpdateOpCode.Attr */:\n        const attrName = parser.consumeString();\n        const sanitizationFn = parser.consumeFunction();\n        const value = sanitizationFn ? `(${sanitizationFn})($$$)` : '$$$';\n        return `(lView[${ref}] as Element).setAttribute('${attrName}', ${value})`;\n      case 2 /* I18nUpdateOpCode.IcuSwitch */:\n        return `icuSwitchCase(${ref}, $$$)`;\n      case 3 /* I18nUpdateOpCode.IcuUpdate */:\n        return `icuUpdateCase(${ref})`;\n    }\n    throw new Error('unexpected OpCode');\n  }\n  while (parser.hasMore()) {\n    let mask = parser.consumeNumber();\n    let size = parser.consumeNumber();\n    const end = parser.i + size;\n    const statements = [];\n    let statement = '';\n    while (parser.i < end) {\n      let value = parser.consumeNumberOrString();\n      if (typeof value === 'string') {\n        statement += value;\n      } else if (value < 0) {\n        // Negative numbers are ref indexes\n        // Here `i` refers to current binding index. It is to signify that the value is relative,\n        // rather than absolute.\n        statement += '${lView[i' + value + ']}';\n      } else {\n        // Positive numbers are operations.\n        const opCodeText = consumeOpCode(value);\n        statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');\n        statement = '';\n      }\n    }\n    lines.push(`if (mask & 0b${mask.toString(2)}) { ${statements.join(' ')} }`);\n  }\n  return lines;\n}\n/**\n * Converts `I18nCreateOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nCreateOpCodes.debug` if `ngDevMode` is enabled. This\n * function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nCreateOpCodes` if attached as a method.\n * @param opcodes `I18nCreateOpCodes` if invoked as a function.\n */\nfunction icuCreateOpCodesToString(opcodes) {\n  const parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));\n  let lines = [];\n  function consumeOpCode(opCode) {\n    const parent = getParentFromIcuCreateOpCode(opCode);\n    const ref = getRefFromIcuCreateOpCode(opCode);\n    switch (getInstructionFromIcuCreateOpCode(opCode)) {\n      case 0 /* IcuCreateOpCode.AppendChild */:\n        return `(lView[${parent}] as Element).appendChild(lView[${lastRef}])`;\n      case 1 /* IcuCreateOpCode.Attr */:\n        return `(lView[${ref}] as Element).setAttribute(\"${parser.consumeString()}\", \"${parser.consumeString()}\")`;\n    }\n    throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));\n  }\n  let lastRef = -1;\n  while (parser.hasMore()) {\n    let value = parser.consumeNumberStringOrMarker();\n    if (value === ICU_MARKER) {\n      const text = parser.consumeString();\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createComment(\"${text}\")`);\n    } else if (value === ELEMENT_MARKER) {\n      const text = parser.consumeString();\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createElement(\"${text}\")`);\n    } else if (typeof value === 'string') {\n      lastRef = parser.consumeNumber();\n      lines.push(`lView[${lastRef}] = document.createTextNode(\"${value}\")`);\n    } else if (typeof value === 'number') {\n      const line = consumeOpCode(value);\n      line && lines.push(line);\n    } else {\n      throw new Error('Unexpected value');\n    }\n  }\n  return lines;\n}\n/**\n * Converts `I18nRemoveOpCodes` array into a human readable format.\n *\n * This function is attached to the `I18nRemoveOpCodes.debug` if `ngDevMode` is enabled. This\n * function provides a human readable view of the opcodes. This is useful when debugging the\n * application as well as writing more readable tests.\n *\n * @param this `I18nRemoveOpCodes` if attached as a method.\n * @param opcodes `I18nRemoveOpCodes` if invoked as a function.\n */\nfunction i18nRemoveOpCodesToString(opcodes) {\n  const removeCodes = opcodes || (Array.isArray(this) ? this : []);\n  let lines = [];\n  for (let i = 0; i < removeCodes.length; i++) {\n    const nodeOrIcuIndex = removeCodes[i];\n    if (nodeOrIcuIndex > 0) {\n      // Positive numbers are `RNode`s.\n      lines.push(`remove(lView[${nodeOrIcuIndex}])`);\n    } else {\n      // Negative numbers are ICUs\n      lines.push(`removeNestedICU(${~nodeOrIcuIndex})`);\n    }\n  }\n  return lines;\n}\nclass OpCodeParser {\n  i = 0;\n  codes;\n  constructor(codes) {\n    this.codes = codes;\n  }\n  hasMore() {\n    return this.i < this.codes.length;\n  }\n  consumeNumber() {\n    let value = this.codes[this.i++];\n    assertNumber(value, 'expecting number in OpCode');\n    return value;\n  }\n  consumeString() {\n    let value = this.codes[this.i++];\n    assertString(value, 'expecting string in OpCode');\n    return value;\n  }\n  consumeFunction() {\n    let value = this.codes[this.i++];\n    if (value === null || typeof value === 'function') {\n      return value;\n    }\n    throw new Error('expecting function in OpCode');\n  }\n  consumeNumberOrString() {\n    let value = this.codes[this.i++];\n    if (typeof value === 'string') {\n      return value;\n    }\n    assertNumber(value, 'expecting number or string in OpCode');\n    return value;\n  }\n  consumeNumberStringOrMarker() {\n    let value = this.codes[this.i++];\n    if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER || value == ELEMENT_MARKER) {\n      return value;\n    }\n    assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');\n    return value;\n  }\n}\nconst BINDING_REGEXP = /�(\\d+):?\\d*�/gi;\nconst ICU_REGEXP = /({\\s*�\\d+:?\\d*�\\s*,\\s*\\S{6}\\s*,[\\s\\S]*})/gi;\nconst NESTED_ICU = /�(\\d+)�/;\nconst ICU_BLOCK_REGEXP = /^\\s*(�\\d+:?\\d*�)\\s*,\\s*(select|plural)\\s*,/;\nconst MARKER = `�`;\nconst SUBTEMPLATE_REGEXP = /�\\/?\\*(\\d+:\\d+)�/gi;\nconst PH_REGEXP = /�(\\/?[#*]\\d+):?\\d*�/gi;\n/**\n * Angular uses the special entity &ngsp; as a placeholder for non-removable space.\n * It's replaced by the 0xE500 PUA (Private Use Areas) unicode character and later on replaced by a\n * space.\n * We are re-implementing the same idea since translations might contain this special character.\n */\nconst NGSP_UNICODE_REGEXP = /\\uE500/g;\nfunction replaceNgsp(value) {\n  return value.replace(NGSP_UNICODE_REGEXP, ' ');\n}\n/**\n * Patch a `debug` property getter on top of the existing object.\n *\n * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`\n *\n * @param obj Object to patch\n * @param debugGetter Getter returning a value to patch\n */\nfunction attachDebugGetter(obj, debugGetter) {\n  if (ngDevMode) {\n    Object.defineProperty(obj, 'debug', {\n      get: debugGetter,\n      enumerable: false\n    });\n  } else {\n    throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');\n  }\n}\n/**\n * Create dynamic nodes from i18n translation block.\n *\n * - Text nodes are created synchronously\n * - TNodes are linked into tree lazily\n *\n * @param tView Current `TView`\n * @parentTNodeIndex index to the parent TNode of this i18n block\n * @param lView Current `LView`\n * @param index Index of `ɵɵi18nStart` instruction.\n * @param message Message to translate.\n * @param subTemplateIndex Index into the sub template of message translation. (ie in case of\n *     `ngIf`) (-1 otherwise)\n */\nfunction i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {\n  const rootTNode = getCurrentParentTNode();\n  const createOpCodes = [];\n  const updateOpCodes = [];\n  const existingTNodeStack = [[]];\n  const astStack = [[]];\n  if (ngDevMode) {\n    attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  message = getTranslationForTemplate(message, subTemplateIndex);\n  const msgParts = replaceNgsp(message).split(PH_REGEXP);\n  for (let i = 0; i < msgParts.length; i++) {\n    let value = msgParts[i];\n    if ((i & 1) === 0) {\n      // Even indexes are text (including bindings & ICU expressions)\n      const parts = i18nParseTextIntoPartsAndICU(value);\n      for (let j = 0; j < parts.length; j++) {\n        let part = parts[j];\n        if ((j & 1) === 0) {\n          // `j` is odd therefore `part` is string\n          const text = part;\n          ngDevMode && assertString(text, 'Parsed ICU part should be string');\n          if (text !== '') {\n            i18nStartFirstCreatePassProcessTextNode(astStack[0], tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);\n          }\n        } else {\n          // `j` is Even therefor `part` is an `ICUExpression`\n          const icuExpression = part;\n          // Verify that ICU expression has the right shape. Translations might contain invalid\n          // constructions (while original messages were correct), so ICU parsing at runtime may\n          // not succeed (thus `icuExpression` remains a string).\n          // Note: we intentionally retain the error here by not using `ngDevMode`, because\n          // the value can change based on the locale and users aren't guaranteed to hit\n          // an invalid string while they're developing.\n          if (typeof icuExpression !== 'object') {\n            throw new Error(`Unable to parse ICU expression in \"${message}\" message.`);\n          }\n          const icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? `ICU ${index}:${icuExpression.mainBinding}` : '', true);\n          const icuNodeIndex = icuContainerTNode.index;\n          ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');\n          icuStart(astStack[0], tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);\n        }\n      }\n    } else {\n      // Odd indexes are placeholders (elements and sub-templates)\n      // At this point value is something like: '/#1:2' (originally coming from '�/#1:2�')\n      const isClosing = value.charCodeAt(0) === 47 /* CharCode.SLASH */;\n      const type = value.charCodeAt(isClosing ? 1 : 0);\n      ngDevMode && assertOneOf(type, 42 /* CharCode.STAR */, 35 /* CharCode.HASH */);\n      const index = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));\n      if (isClosing) {\n        existingTNodeStack.shift();\n        astStack.shift();\n        setCurrentTNode(getCurrentParentTNode(), false);\n      } else {\n        const tNode = createTNodePlaceholder(tView, existingTNodeStack[0], index);\n        existingTNodeStack.unshift([]);\n        setCurrentTNode(tNode, true);\n        const placeholderNode = {\n          kind: 2 /* I18nNodeKind.PLACEHOLDER */,\n          index,\n          children: [],\n          type: type === 35 /* CharCode.HASH */ ? 0 /* I18nPlaceholderType.ELEMENT */ : 1 /* I18nPlaceholderType.SUBTEMPLATE */\n        };\n        astStack[0].push(placeholderNode);\n        astStack.unshift(placeholderNode.children);\n      }\n    }\n  }\n  tView.data[index] = {\n    create: createOpCodes,\n    update: updateOpCodes,\n    ast: astStack[0],\n    parentTNodeIndex\n  };\n}\n/**\n * Allocate space in i18n Range add create OpCode instruction to create a text or comment node.\n *\n * @param tView Current `TView` needed to allocate space in i18n range.\n * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will be\n *     added as part of the `i18nStart` instruction or as part of the `TNode.insertBeforeIndex`.\n * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.\n * @param lView Current `LView` needed to allocate space in i18n range.\n * @param createOpCodes Array storing `I18nCreateOpCodes` where new opCodes will be added.\n * @param text Text to be added when the `Text` or `Comment` node will be created.\n * @param isICU true if a `Comment` node for ICU (instead of `Text`) node should be created.\n */\nfunction createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {\n  const i18nNodeIdx = allocExpando(tView, lView, 1, null);\n  let opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;\n  let parentTNode = getCurrentParentTNode();\n  if (rootTNode === parentTNode) {\n    // FIXME(misko): A null `parentTNode` should represent when we fall of the `LView` boundary.\n    // (there is no parent), but in some circumstances (because we are inconsistent about how we set\n    // `previousOrParentTNode`) it could point to `rootTNode` So this is a work around.\n    parentTNode = null;\n  }\n  if (parentTNode === null) {\n    // If we don't have a parent that means that we can eagerly add nodes.\n    // If we have a parent than these nodes can't be added now (as the parent has not been created\n    // yet) and instead the `parentTNode` is responsible for adding it. See\n    // `TNode.insertBeforeIndex`\n    opCode |= I18nCreateOpCode.APPEND_EAGERLY;\n  }\n  if (isICU) {\n    opCode |= I18nCreateOpCode.COMMENT;\n    ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);\n  }\n  createOpCodes.push(opCode, text === null ? '' : text);\n  // We store `{{?}}` so that when looking at debug `TNodeType.template` we can see where the\n  // bindings are.\n  const tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32 /* TNodeType.Icu */ : 1 /* TNodeType.Text */, text === null ? ngDevMode ? '{{?}}' : '' : text, null);\n  addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);\n  const tNodeIdx = tNode.index;\n  setCurrentTNode(tNode, false /* Text nodes are self closing */);\n  if (parentTNode !== null && rootTNode !== parentTNode) {\n    // We are a child of deeper node (rather than a direct child of `i18nStart` instruction.)\n    // We have to make sure to add ourselves to the parent.\n    setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);\n  }\n  return tNode;\n}\n/**\n * Processes text node in i18n block.\n *\n * Text nodes can have:\n * - Create instruction in `createOpCodes` for creating the text node.\n * - Allocate spec for text node in i18n range of `LView`\n * - If contains binding:\n *    - bindings => allocate space in i18n range of `LView` to store the binding value.\n *    - populate `updateOpCodes` with update instructions.\n *\n * @param tView Current `TView`\n * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will\n *     be added as part of the `i18nStart` instruction or as part of the\n *     `TNode.insertBeforeIndex`.\n * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.\n * @param createOpCodes Location where the creation OpCodes will be stored.\n * @param lView Current `LView`\n * @param text The translated text (which may contain binding)\n */\nfunction i18nStartFirstCreatePassProcessTextNode(ast, tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {\n  const hasBinding = text.match(BINDING_REGEXP);\n  const tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);\n  const index = tNode.index;\n  if (hasBinding) {\n    generateBindingUpdateOpCodes(updateOpCodes, text, index, null, 0, null);\n  }\n  ast.push({\n    kind: 0 /* I18nNodeKind.TEXT */,\n    index\n  });\n}\n/**\n * See `i18nAttributes` above.\n */\nfunction i18nAttributesFirstPass(tView, index, values) {\n  const previousElement = getCurrentTNode();\n  const previousElementIndex = previousElement.index;\n  const updateOpCodes = [];\n  if (ngDevMode) {\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  if (tView.firstCreatePass && tView.data[index] === null) {\n    for (let i = 0; i < values.length; i += 2) {\n      const attrName = values[i];\n      const message = values[i + 1];\n      if (message !== '') {\n        // Check if attribute value contains an ICU and throw an error if that's the case.\n        // ICUs in element attributes are not supported.\n        // Note: we intentionally retain the error here by not using `ngDevMode`, because\n        // the `value` can change based on the locale and users aren't guaranteed to hit\n        // an invalid string while they're developing.\n        if (ICU_REGEXP.test(message)) {\n          throw new Error(`ICU expressions are not supported in attributes. Message: \"${message}\".`);\n        }\n        // i18n attributes that hit this code path are guaranteed to have bindings, because\n        // the compiler treats static i18n attributes as regular attribute bindings.\n        // Since this may not be the first i18n attribute on this element we need to pass in how\n        // many previous bindings there have already been.\n        generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName, countBindings(updateOpCodes), null);\n      }\n    }\n    tView.data[index] = updateOpCodes;\n  }\n}\n/**\n * Generate the OpCodes to update the bindings of a string.\n *\n * @param updateOpCodes Place where the update opcodes will be stored.\n * @param str The string containing the bindings.\n * @param destinationNode Index of the destination node which will receive the binding.\n * @param attrName Name of the attribute, if the string belongs to an attribute.\n * @param sanitizeFn Sanitization function used to sanitize the string after update, if necessary.\n * @param bindingStart The lView index of the next expression that can be bound via an opCode.\n * @returns The mask value for these bindings\n */\nfunction generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName, bindingStart, sanitizeFn) {\n  ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');\n  const maskIndex = updateOpCodes.length; // Location of mask\n  const sizeIndex = maskIndex + 1; // location of size for skipping\n  updateOpCodes.push(null, null); // Alloc space for mask and size\n  const startIndex = maskIndex + 2; // location of first allocation.\n  if (ngDevMode) {\n    attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);\n  }\n  const textParts = str.split(BINDING_REGEXP);\n  let mask = 0;\n  for (let j = 0; j < textParts.length; j++) {\n    const textValue = textParts[j];\n    if (j & 1) {\n      // Odd indexes are bindings\n      const bindingIndex = bindingStart + parseInt(textValue, 10);\n      updateOpCodes.push(-1 - bindingIndex);\n      mask = mask | toMaskBit(bindingIndex);\n    } else if (textValue !== '') {\n      // Even indexes are text\n      updateOpCodes.push(textValue);\n    }\n  }\n  updateOpCodes.push(destinationNode << 2 /* I18nUpdateOpCode.SHIFT_REF */ | (attrName ? 1 /* I18nUpdateOpCode.Attr */ : 0 /* I18nUpdateOpCode.Text */));\n  if (attrName) {\n    updateOpCodes.push(attrName, sanitizeFn);\n  }\n  updateOpCodes[maskIndex] = mask;\n  updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;\n  return mask;\n}\n/**\n * Count the number of bindings in the given `opCodes`.\n *\n * It could be possible to speed this up, by passing the number of bindings found back from\n * `generateBindingUpdateOpCodes()` to `i18nAttributesFirstPass()` but this would then require more\n * complexity in the code and/or transient objects to be created.\n *\n * Since this function is only called once when the template is instantiated, is trivial in the\n * first instance (since `opCodes` will be an empty array), and it is not common for elements to\n * contain multiple i18n bound attributes, it seems like this is a reasonable compromise.\n */\nfunction countBindings(opCodes) {\n  let count = 0;\n  for (let i = 0; i < opCodes.length; i++) {\n    const opCode = opCodes[i];\n    // Bindings are negative numbers.\n    if (typeof opCode === 'number' && opCode < 0) {\n      count++;\n    }\n  }\n  return count;\n}\n/**\n * Convert binding index to mask bit.\n *\n * Each index represents a single bit on the bit-mask. Because bit-mask only has 32 bits, we make\n * the 32nd bit share all masks for all bindings higher than 32. Since it is extremely rare to\n * have more than 32 bindings this will be hit very rarely. The downside of hitting this corner\n * case is that we will execute binding code more often than necessary. (penalty of performance)\n */\nfunction toMaskBit(bindingIndex) {\n  return 1 << Math.min(bindingIndex, 31);\n}\n/**\n * Removes everything inside the sub-templates of a message.\n */\nfunction removeInnerTemplateTranslation(message) {\n  let match;\n  let res = '';\n  let index = 0;\n  let inTemplate = false;\n  let tagMatched;\n  while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {\n    if (!inTemplate) {\n      res += message.substring(index, match.index + match[0].length);\n      tagMatched = match[1];\n      inTemplate = true;\n    } else {\n      if (match[0] === `${MARKER}/*${tagMatched}${MARKER}`) {\n        index = match.index;\n        inTemplate = false;\n      }\n    }\n  }\n  ngDevMode && assertEqual(inTemplate, false, `Tag mismatch: unable to find the end of the sub-template in the translation \"${message}\"`);\n  res += message.slice(index);\n  return res;\n}\n/**\n * Extracts a part of a message and removes the rest.\n *\n * This method is used for extracting a part of the message associated with a template. A\n * translated message can span multiple templates.\n *\n * Example:\n * ```html\n * <div i18n>Translate <span *ngIf>me</span>!</div>\n * ```\n *\n * @param message The message to crop\n * @param subTemplateIndex Index of the sub-template to extract. If undefined it returns the\n * external template and removes all sub-templates.\n */\nfunction getTranslationForTemplate(message, subTemplateIndex) {\n  if (isRootTemplateMessage(subTemplateIndex)) {\n    // We want the root template message, ignore all sub-templates\n    return removeInnerTemplateTranslation(message);\n  } else {\n    // We want a specific sub-template\n    const start = message.indexOf(`:${subTemplateIndex}${MARKER}`) + 2 + subTemplateIndex.toString().length;\n    const end = message.search(new RegExp(`${MARKER}\\\\/\\\\*\\\\d+:${subTemplateIndex}${MARKER}`));\n    return removeInnerTemplateTranslation(message.substring(start, end));\n  }\n}\n/**\n * Generate the OpCodes for ICU expressions.\n *\n * @param icuExpression\n * @param index Index where the anchor is stored and an optional `TIcuContainerNode`\n *   - `lView[anchorIdx]` points to a `Comment` node representing the anchor for the ICU.\n *   - `tView.data[anchorIdx]` points to the `TIcuContainerNode` if ICU is root (`null` otherwise)\n */\nfunction icuStart(ast, tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {\n  ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');\n  let bindingMask = 0;\n  const tIcu = {\n    type: icuExpression.type,\n    currentCaseLViewIndex: allocExpando(tView, lView, 1, null),\n    anchorIdx,\n    cases: [],\n    create: [],\n    remove: [],\n    update: []\n  };\n  addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);\n  setTIcu(tView, anchorIdx, tIcu);\n  const values = icuExpression.values;\n  const cases = [];\n  for (let i = 0; i < values.length; i++) {\n    // Each value is an array of strings & other ICU expressions\n    const valueArr = values[i];\n    const nestedIcus = [];\n    for (let j = 0; j < valueArr.length; j++) {\n      const value = valueArr[j];\n      if (typeof value !== 'string') {\n        // It is an nested ICU expression\n        const icuIndex = nestedIcus.push(value) - 1;\n        // Replace nested ICU expression by a comment node\n        valueArr[j] = `<!--�${icuIndex}�-->`;\n      }\n    }\n    const caseAst = [];\n    cases.push(caseAst);\n    bindingMask = parseIcuCase(caseAst, tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) | bindingMask;\n  }\n  if (bindingMask) {\n    addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);\n  }\n  ast.push({\n    kind: 3 /* I18nNodeKind.ICU */,\n    index: anchorIdx,\n    cases,\n    currentCaseLViewIndex: tIcu.currentCaseLViewIndex\n  });\n}\n/**\n * Parses text containing an ICU expression and produces a JSON object for it.\n * Original code from closure library, modified for Angular.\n *\n * @param pattern Text containing an ICU expression that needs to be parsed.\n *\n */\nfunction parseICUBlock(pattern) {\n  const cases = [];\n  const values = [];\n  let icuType = 1 /* IcuType.plural */;\n  let mainBinding = 0;\n  pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {\n    if (type === 'select') {\n      icuType = 0 /* IcuType.select */;\n    } else {\n      icuType = 1 /* IcuType.plural */;\n    }\n    mainBinding = parseInt(binding.slice(1), 10);\n    return '';\n  });\n  const parts = i18nParseTextIntoPartsAndICU(pattern);\n  // Looking for (key block)+ sequence. One of the keys has to be \"other\".\n  for (let pos = 0; pos < parts.length;) {\n    let key = parts[pos++].trim();\n    if (icuType === 1 /* IcuType.plural */) {\n      // Key can be \"=x\", we just want \"x\"\n      key = key.replace(/\\s*(?:=)?(\\w+)\\s*/, '$1');\n    }\n    if (key.length) {\n      cases.push(key);\n    }\n    const blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);\n    if (cases.length > values.length) {\n      values.push(blocks);\n    }\n  }\n  // TODO(ocombe): support ICU expressions in attributes, see #21615\n  return {\n    type: icuType,\n    mainBinding: mainBinding,\n    cases,\n    values\n  };\n}\n/**\n * Breaks pattern into strings and top level {...} blocks.\n * Can be used to break a message into text and ICU expressions, or to break an ICU expression\n * into keys and cases. Original code from closure library, modified for Angular.\n *\n * @param pattern (sub)Pattern to be broken.\n * @returns An `Array<string|IcuExpression>` where:\n *   - odd positions: `string` => text between ICU expressions\n *   - even positions: `ICUExpression` => ICU expression parsed into `ICUExpression` record.\n */\nfunction i18nParseTextIntoPartsAndICU(pattern) {\n  if (!pattern) {\n    return [];\n  }\n  let prevPos = 0;\n  const braceStack = [];\n  const results = [];\n  const braces = /[{}]/g;\n  // lastIndex doesn't get set to 0 so we have to.\n  braces.lastIndex = 0;\n  let match;\n  while (match = braces.exec(pattern)) {\n    const pos = match.index;\n    if (match[0] == '}') {\n      braceStack.pop();\n      if (braceStack.length == 0) {\n        // End of the block.\n        const block = pattern.substring(prevPos, pos);\n        if (ICU_BLOCK_REGEXP.test(block)) {\n          results.push(parseICUBlock(block));\n        } else {\n          results.push(block);\n        }\n        prevPos = pos + 1;\n      }\n    } else {\n      if (braceStack.length == 0) {\n        const substring = pattern.substring(prevPos, pos);\n        results.push(substring);\n        prevPos = pos + 1;\n      }\n      braceStack.push('{');\n    }\n  }\n  const substring = pattern.substring(prevPos);\n  results.push(substring);\n  return results;\n}\n/**\n * Parses a node, its children and its siblings, and generates the mutate & update OpCodes.\n *\n */\nfunction parseIcuCase(ast, tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {\n  const create = [];\n  const remove = [];\n  const update = [];\n  if (ngDevMode) {\n    attachDebugGetter(create, icuCreateOpCodesToString);\n    attachDebugGetter(remove, i18nRemoveOpCodesToString);\n    attachDebugGetter(update, i18nUpdateOpCodesToString);\n  }\n  tIcu.cases.push(caseName);\n  tIcu.create.push(create);\n  tIcu.remove.push(remove);\n  tIcu.update.push(update);\n  const inertBodyHelper = getInertBodyHelper(getDocument());\n  const inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);\n  ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');\n  const inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;\n  if (inertRootNode) {\n    return walkIcuTree(ast, tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);\n  } else {\n    return 0;\n  }\n}\nfunction walkIcuTree(ast, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {\n  let bindingMask = 0;\n  let currentNode = parentNode.firstChild;\n  while (currentNode) {\n    const newIndex = allocExpando(tView, lView, 1, null);\n    switch (currentNode.nodeType) {\n      case Node.ELEMENT_NODE:\n        const element = currentNode;\n        const tagName = element.tagName.toLowerCase();\n        if (VALID_ELEMENTS.hasOwnProperty(tagName)) {\n          addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);\n          tView.data[newIndex] = tagName;\n          const elAttrs = element.attributes;\n          for (let i = 0; i < elAttrs.length; i++) {\n            const attr = elAttrs.item(i);\n            const lowerAttrName = attr.name.toLowerCase();\n            const hasBinding = !!attr.value.match(BINDING_REGEXP);\n            // we assume the input string is safe, unless it's using a binding\n            if (hasBinding) {\n              if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {\n                if (URI_ATTRS[lowerAttrName]) {\n                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, _sanitizeUrl);\n                } else {\n                  generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, 0, null);\n                }\n              } else {\n                ngDevMode && console.warn(`WARNING: ignoring unsafe attribute value ` + `${lowerAttrName} on element ${tagName} ` + `(see ${XSS_SECURITY_URL})`);\n              }\n            } else {\n              addCreateAttribute(create, newIndex, attr);\n            }\n          }\n          const elementNode = {\n            kind: 1 /* I18nNodeKind.ELEMENT */,\n            index: newIndex,\n            children: []\n          };\n          ast.push(elementNode);\n          // Parse the children of this node (if any)\n          bindingMask = walkIcuTree(elementNode.children, tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;\n          addRemoveNode(remove, newIndex, depth);\n        }\n        break;\n      case Node.TEXT_NODE:\n        const value = currentNode.textContent || '';\n        const hasBinding = value.match(BINDING_REGEXP);\n        addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);\n        addRemoveNode(remove, newIndex, depth);\n        if (hasBinding) {\n          bindingMask = generateBindingUpdateOpCodes(update, value, newIndex, null, 0, null) | bindingMask;\n        }\n        ast.push({\n          kind: 0 /* I18nNodeKind.TEXT */,\n          index: newIndex\n        });\n        break;\n      case Node.COMMENT_NODE:\n        // Check if the comment node is a placeholder for a nested ICU\n        const isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');\n        if (isNestedIcu) {\n          const nestedIcuIndex = parseInt(isNestedIcu[1], 10);\n          const icuExpression = nestedIcus[nestedIcuIndex];\n          // Create the comment node that will anchor the ICU expression\n          addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? `nested ICU ${nestedIcuIndex}` : '', parentIdx, newIndex);\n          icuStart(ast, tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);\n          addRemoveNestedIcu(remove, newIndex, depth);\n        }\n        break;\n    }\n    currentNode = currentNode.nextSibling;\n  }\n  return bindingMask;\n}\nfunction addRemoveNode(remove, index, depth) {\n  if (depth === 0) {\n    remove.push(index);\n  }\n}\nfunction addRemoveNestedIcu(remove, index, depth) {\n  if (depth === 0) {\n    remove.push(~index); // remove ICU at `index`\n    remove.push(index); // remove ICU comment at `index`\n  }\n}\nfunction addUpdateIcuSwitch(update, icuExpression, index) {\n  update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2 /* I18nUpdateOpCode.SHIFT_REF */ | 2 /* I18nUpdateOpCode.IcuSwitch */);\n}\nfunction addUpdateIcuUpdate(update, bindingMask, index) {\n  update.push(bindingMask, 1, index << 2 /* I18nUpdateOpCode.SHIFT_REF */ | 3 /* I18nUpdateOpCode.IcuUpdate */);\n}\nfunction addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {\n  if (marker !== null) {\n    create.push(marker);\n  }\n  create.push(text, createAtIdx, icuCreateOpCode(0 /* IcuCreateOpCode.AppendChild */, appendToParentIdx, createAtIdx));\n}\nfunction addCreateAttribute(create, newIndex, attr) {\n  create.push(newIndex << 1 /* IcuCreateOpCode.SHIFT_REF */ | 1 /* IcuCreateOpCode.Attr */, attr.name, attr.value);\n}\n\n// i18nPostprocess consts\nconst ROOT_TEMPLATE_ID = 0;\nconst PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]/;\nconst PP_PLACEHOLDERS_REGEXP = /\\[(�.+?�?)\\]|(�\\/?\\*\\d+:\\d+�)/g;\nconst PP_ICU_VARS_REGEXP = /({\\s*)(VAR_(PLURAL|SELECT)(_\\d+)?)(\\s*,)/g;\nconst PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;\nconst PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\\d+)?)�/g;\nconst PP_CLOSE_TEMPLATE_REGEXP = /\\/\\*/;\nconst PP_TEMPLATE_ID_REGEXP = /\\d+\\:(\\d+)/;\n/**\n * Handles message string post-processing for internationalization.\n *\n * Handles message string post-processing by transforming it from intermediate\n * format (that might contain some markers that we need to replace) to the final\n * form, consumable by i18nStart instruction. Post processing steps include:\n *\n * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])\n * 2. Replace all ICU vars (like \"VAR_PLURAL\")\n * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)\n *    in case multiple ICUs have the same placeholder name\n *\n * @param message Raw translation string for post processing\n * @param replacements Set of replacements that should be applied\n *\n * @returns Transformed string that can be consumed by i18nStart instruction\n *\n * @codeGenApi\n */\nfunction i18nPostprocess(message, replacements = {}) {\n  /**\n   * Step 1: resolve all multi-value placeholders like [�#5�|�*1:1��#2:1�|�#4:1�]\n   *\n   * Note: due to the way we process nested templates (BFS), multi-value placeholders are typically\n   * grouped by templates, for example: [�#5�|�#6�|�#1:1�|�#3:2�] where �#5� and �#6� belong to root\n   * template, �#1:1� belong to nested template with index 1 and �#1:2� - nested template with index\n   * 3. However in real templates the order might be different: i.e. �#1:1� and/or �#3:2� may go in\n   * front of �#6�. The post processing step restores the right order by keeping track of the\n   * template id stack and looks for placeholders that belong to the currently active template.\n   */\n  let result = message;\n  if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {\n    const matches = {};\n    const templateIdsStack = [ROOT_TEMPLATE_ID];\n    result = result.replace(PP_PLACEHOLDERS_REGEXP, (m, phs, tmpl) => {\n      const content = phs || tmpl;\n      const placeholders = matches[content] || [];\n      if (!placeholders.length) {\n        content.split('|').forEach(placeholder => {\n          const match = placeholder.match(PP_TEMPLATE_ID_REGEXP);\n          const templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;\n          const isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);\n          placeholders.push([templateId, isCloseTemplateTag, placeholder]);\n        });\n        matches[content] = placeholders;\n      }\n      if (!placeholders.length) {\n        throw new Error(`i18n postprocess: unmatched placeholder - ${content}`);\n      }\n      const currentTemplateId = templateIdsStack[templateIdsStack.length - 1];\n      let idx = 0;\n      // find placeholder index that matches current template id\n      for (let i = 0; i < placeholders.length; i++) {\n        if (placeholders[i][0] === currentTemplateId) {\n          idx = i;\n          break;\n        }\n      }\n      // update template id stack based on the current tag extracted\n      const [templateId, isCloseTemplateTag, placeholder] = placeholders[idx];\n      if (isCloseTemplateTag) {\n        templateIdsStack.pop();\n      } else if (currentTemplateId !== templateId) {\n        templateIdsStack.push(templateId);\n      }\n      // remove processed tag from the list\n      placeholders.splice(idx, 1);\n      return placeholder;\n    });\n  }\n  // return current result if no replacements specified\n  if (!Object.keys(replacements).length) {\n    return result;\n  }\n  /**\n   * Step 2: replace all ICU vars (like \"VAR_PLURAL\")\n   */\n  result = result.replace(PP_ICU_VARS_REGEXP, (match, start, key, _type, _idx, end) => {\n    return replacements.hasOwnProperty(key) ? `${start}${replacements[key]}${end}` : match;\n  });\n  /**\n   * Step 3: replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n   */\n  result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, (match, key) => {\n    return replacements.hasOwnProperty(key) ? replacements[key] : match;\n  });\n  /**\n   * Step 4: replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�) in case\n   * multiple ICUs have the same placeholder name\n   */\n  result = result.replace(PP_ICUS_REGEXP, (match, key) => {\n    if (replacements.hasOwnProperty(key)) {\n      const list = replacements[key];\n      if (!list.length) {\n        throw new Error(`i18n postprocess: unmatched ICU - ${match} with key: ${key}`);\n      }\n      return list.shift();\n    }\n    return match;\n  });\n  return result;\n}\n\n/**\n * Marks a block of text as translatable.\n *\n * The instructions `i18nStart` and `i18nEnd` mark the translation block in the template.\n * The translation `message` is the value which is locale specific. The translation string may\n * contain placeholders which associate inner elements and sub-templates within the translation.\n *\n * The translation `message` placeholders are:\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\n *   `block` that matches the sub-template in which it was declared.\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\n *   and end of DOM element that were embedded in the original translation block. The placeholder\n *   `index` points to the element index in the template instructions set. An optional `block` that\n *   matches the sub-template in which it was declared.\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\n *   split up and translated separately in each angular template function. The `index` points to the\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\n *\n * @param index A unique index of the translation in the static block.\n * @param messageIndex An index of the translation message from the `def.consts` array.\n * @param subTemplateIndex Optional sub-template index in the `message`.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nStart(index, messageIndex, subTemplateIndex = -1) {\n  const tView = getTView();\n  const lView = getLView();\n  const adjustedIndex = HEADER_OFFSET + index;\n  ngDevMode && assertDefined(tView, `tView should be defined`);\n  const message = getConstant(tView.consts, messageIndex);\n  const parentTNode = getCurrentParentTNode();\n  if (tView.firstCreatePass) {\n    i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);\n  }\n  // Set a flag that this LView has i18n blocks.\n  // The flag is later used to determine whether this component should\n  // be hydrated (currently hydration is not supported for i18n blocks).\n  if (tView.type === 2 /* TViewType.Embedded */) {\n    // Annotate host component's LView (not embedded view's LView),\n    // since hydration can be skipped on per-component basis only.\n    const componentLView = lView[DECLARATION_COMPONENT_VIEW];\n    componentLView[FLAGS] |= 32 /* LViewFlags.HasI18n */;\n  } else {\n    lView[FLAGS] |= 32 /* LViewFlags.HasI18n */;\n  }\n  const tI18n = tView.data[adjustedIndex];\n  const sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;\n  const parentRNode = getClosestRElement(tView, sameViewParentTNode, lView);\n  // If `parentTNode` is an `ElementContainer` than it has `<!--ng-container--->`.\n  // When we do inserts we have to make sure to insert in front of `<!--ng-container--->`.\n  const insertInFrontOf = parentTNode && parentTNode.type & 8 /* TNodeType.ElementContainer */ ? lView[parentTNode.index] : null;\n  prepareI18nBlockForHydration(lView, adjustedIndex, parentTNode, subTemplateIndex);\n  applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);\n  setInI18nBlock(true);\n}\n/**\n * Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes\n * into the render tree, moves the placeholder nodes and removes the deleted nodes.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nEnd() {\n  setInI18nBlock(false);\n}\n/**\n *\n * Use this instruction to create a translation block that doesn't contain any placeholder.\n * It calls both {@link i18nStart} and {@link i18nEnd} in one instruction.\n *\n * The translation `message` is the value which is locale specific. The translation string may\n * contain placeholders which associate inner elements and sub-templates within the translation.\n *\n * The translation `message` placeholders are:\n * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be\n *   interpolated into. The placeholder `index` points to the expression binding index. An optional\n *   `block` that matches the sub-template in which it was declared.\n * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning\n *   and end of DOM element that were embedded in the original translation block. The placeholder\n *   `index` points to the element index in the template instructions set. An optional `block` that\n *   matches the sub-template in which it was declared.\n * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be\n *   split up and translated separately in each angular template function. The `index` points to the\n *   `template` instruction index. A `block` that matches the sub-template in which it was declared.\n *\n * @param index A unique index of the translation in the static block.\n * @param messageIndex An index of the translation message from the `def.consts` array.\n * @param subTemplateIndex Optional sub-template index in the `message`.\n *\n * @codeGenApi\n */\nfunction ɵɵi18n(index, messageIndex, subTemplateIndex) {\n  ɵɵi18nStart(index, messageIndex, subTemplateIndex);\n  ɵɵi18nEnd();\n}\n/**\n * Marks a list of attributes as translatable.\n *\n * @param index A unique index in the static block\n * @param values\n *\n * @codeGenApi\n */\nfunction ɵɵi18nAttributes(index, attrsIndex) {\n  const tView = getTView();\n  ngDevMode && assertDefined(tView, `tView should be defined`);\n  const attrs = getConstant(tView.consts, attrsIndex);\n  i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);\n}\n/**\n * Stores the values of the bindings during each update cycle in order to determine if we need to\n * update the translated nodes.\n *\n * @param value The binding's value\n * @returns This function returns itself so that it may be chained\n * (e.g. `i18nExp(ctx.name)(ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵi18nExp(value) {\n  const lView = getLView();\n  setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));\n  return ɵɵi18nExp;\n}\n/**\n * Updates a translation block or an i18n attribute when the bindings have changed.\n *\n * @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}\n * (i18n attribute) on which it should update the content.\n *\n * @codeGenApi\n */\nfunction ɵɵi18nApply(index) {\n  applyI18n(getTView(), getLView(), index + HEADER_OFFSET);\n}\n/**\n * Handles message string post-processing for internationalization.\n *\n * Handles message string post-processing by transforming it from intermediate\n * format (that might contain some markers that we need to replace) to the final\n * form, consumable by i18nStart instruction. Post processing steps include:\n *\n * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])\n * 2. Replace all ICU vars (like \"VAR_PLURAL\")\n * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}\n * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)\n *    in case multiple ICUs have the same placeholder name\n *\n * @param message Raw translation string for post processing\n * @param replacements Set of replacements that should be applied\n *\n * @returns Transformed string that can be consumed by i18nStart instruction\n *\n * @codeGenApi\n */\nfunction ɵɵi18nPostprocess(message, replacements = {}) {\n  return i18nPostprocess(message, replacements);\n}\n\n/**\n * Contains a reference to a function that disables event replay feature\n * for server-side rendered applications. This function is overridden with\n * an actual implementation when the event replay feature is enabled via\n * `withEventReplay()` call.\n */\nlet stashEventListener = (el, eventName, listenerFn) => {};\nfunction setStashFn(fn) {\n  stashEventListener = fn;\n}\n/**\n * Adds an event listener to the current node.\n *\n * If an output exists on one of the node's directives, it also subscribes to the output\n * and saves the subscription for later cleanup.\n *\n * @param eventName Name of the event\n * @param listenerFn The function to be called when event emits\n * @param useCapture Whether or not to use capture in event listener - this argument is a reminder\n *     from the Renderer3 infrastructure and should be removed from the instruction arguments\n * @param eventTargetResolver Function that returns global target information in case this listener\n * should be attached to a global object like window, document or body\n *\n * @codeGenApi\n */\nfunction ɵɵlistener(eventName, listenerFn, useCapture, eventTargetResolver) {\n  const lView = getLView();\n  const tView = getTView();\n  const tNode = getCurrentTNode();\n  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);\n  return ɵɵlistener;\n}\n/**\n * Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.\n *\n * This instruction is for compatibility purposes and is designed to ensure that a\n * synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered\n * in the component's renderer. Normally all host listeners are evaluated with the\n * parent component's renderer, but, in the case of animation @triggers, they need\n * to be evaluated with the sub component's renderer (because that's where the\n * animation triggers are defined).\n *\n * Do not use this instruction as a replacement for `listener`. This instruction\n * only exists to ensure compatibility with the ViewEngine's host binding behavior.\n *\n * @param eventName Name of the event\n * @param listenerFn The function to be called when event emits\n * @param useCapture Whether or not to use capture in event listener\n * @param eventTargetResolver Function that returns global target information in case this listener\n * should be attached to a global object like window, document or body\n *\n * @codeGenApi\n */\nfunction ɵɵsyntheticHostListener(eventName, listenerFn) {\n  const tNode = getCurrentTNode();\n  const lView = getLView();\n  const tView = getTView();\n  const currentDef = getCurrentDirectiveDef(tView.data);\n  const renderer = loadComponentRenderer(currentDef, tNode, lView);\n  listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);\n  return ɵɵsyntheticHostListener;\n}\n/**\n * A utility function that checks if a given element has already an event handler registered for an\n * event with a specified name. The TView.cleanup data structure is used to find out which events\n * are registered for a given element.\n */\nfunction findExistingListener(tView, lView, eventName, tNodeIdx) {\n  const tCleanup = tView.cleanup;\n  if (tCleanup != null) {\n    for (let i = 0; i < tCleanup.length - 1; i += 2) {\n      const cleanupEventName = tCleanup[i];\n      if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {\n        // We have found a matching event name on the same node but it might not have been\n        // registered yet, so we must explicitly verify entries in the LView cleanup data\n        // structures.\n        const lCleanup = lView[CLEANUP];\n        const listenerIdxInLCleanup = tCleanup[i + 2];\n        return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;\n      }\n      // TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or\n      // 2-element entries (for directive and queries destroy hooks). As such we can encounter\n      // blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements\n      // first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check\n      // documentation of TView.cleanup for more details of this data structure layout.\n      if (typeof cleanupEventName === 'string') {\n        i += 2;\n      }\n    }\n  }\n  return null;\n}\nfunction listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {\n  const isTNodeDirectiveHost = isDirectiveHost(tNode);\n  const firstCreatePass = tView.firstCreatePass;\n  const tCleanup = firstCreatePass && getOrCreateTViewCleanup(tView);\n  const context = lView[CONTEXT];\n  // When the ɵɵlistener instruction was generated and is executed we know that there is either a\n  // native listener or a directive output on this element. As such we we know that we will have to\n  // register a listener and store its cleanup function on LView.\n  const lCleanup = getOrCreateLViewCleanup(lView);\n  ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);\n  let processOutputs = true;\n  // Adding a native event listener is applicable when:\n  // - The corresponding TNode represents a DOM element.\n  // - The event target has a resolver (usually resulting in a global object,\n  //   such as `window` or `document`).\n  if (tNode.type & 3 /* TNodeType.AnyRNode */ || eventTargetResolver) {\n    const native = getNativeByTNode(tNode, lView);\n    const target = eventTargetResolver ? eventTargetResolver(native) : native;\n    const lCleanupIndex = lCleanup.length;\n    const idxOrTargetGetter = eventTargetResolver ? _lView => eventTargetResolver(unwrapRNode(_lView[tNode.index])) : tNode.index;\n    // In order to match current behavior, native DOM event listeners must be added for all\n    // events (including outputs).\n    // There might be cases where multiple directives on the same element try to register an event\n    // handler function for the same event. In this situation we want to avoid registration of\n    // several native listeners as each registration would be intercepted by NgZone and\n    // trigger change detection. This would mean that a single user action would result in several\n    // change detections being invoked. To avoid this situation we want to have only one call to\n    // native handler registration (for the same element and same type of event).\n    //\n    // In order to have just one native event handler in presence of multiple handler functions,\n    // we just register a first handler function as a native event listener and then chain\n    // (coalesce) other handler functions on top of the first native handler function.\n    let existingListener = null;\n    // Please note that the coalescing described here doesn't happen for events specifying an\n    // alternative target (ex. (document:click)) - this is to keep backward compatibility with the\n    // view engine.\n    // Also, we don't have to search for existing listeners is there are no directives\n    // matching on a given node as we can't register multiple event handlers for the same event in\n    // a template (this would mean having duplicate attributes).\n    if (!eventTargetResolver && isTNodeDirectiveHost) {\n      existingListener = findExistingListener(tView, lView, eventName, tNode.index);\n    }\n    if (existingListener !== null) {\n      // Attach a new listener to coalesced listeners list, maintaining the order in which\n      // listeners are registered. For performance reasons, we keep a reference to the last\n      // listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through\n      // the entire set each time we need to add a new listener.\n      const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;\n      lastListenerFn.__ngNextListenerFn__ = listenerFn;\n      existingListener.__ngLastListenerFn__ = listenerFn;\n      processOutputs = false;\n    } else {\n      listenerFn = wrapListener(tNode, lView, context, listenerFn);\n      stashEventListener(native, eventName, listenerFn);\n      const cleanupFn = renderer.listen(target, eventName, listenerFn);\n      ngDevMode && ngDevMode.rendererAddEventListener++;\n      lCleanup.push(listenerFn, cleanupFn);\n      tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);\n    }\n  } else {\n    // Even if there is no native listener to add, we still need to wrap the listener so that OnPush\n    // ancestors are marked dirty when an event occurs.\n    listenerFn = wrapListener(tNode, lView, context, listenerFn);\n  }\n  // subscribe to directive outputs\n  const outputs = tNode.outputs;\n  let props;\n  if (processOutputs && outputs !== null && (props = outputs[eventName])) {\n    const propsLength = props.length;\n    if (propsLength) {\n      for (let i = 0; i < propsLength; i += 2) {\n        const index = props[i];\n        ngDevMode && assertIndexInRange(lView, index);\n        const minifiedName = props[i + 1];\n        const directiveInstance = lView[index];\n        const output = directiveInstance[minifiedName];\n        if (ngDevMode && !isOutputSubscribable(output)) {\n          throw new Error(`@Output ${minifiedName} not initialized in '${directiveInstance.constructor.name}'.`);\n        }\n        const subscription = output.subscribe(listenerFn);\n        const idx = lCleanup.length;\n        lCleanup.push(listenerFn, subscription);\n        tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));\n      }\n    }\n  }\n}\nfunction executeListenerWithErrorHandling(lView, context, listenerFn, e) {\n  const prevConsumer = setActiveConsumer$1(null);\n  try {\n    profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);\n    // Only explicitly returning false from a listener should preventDefault\n    return listenerFn(e) !== false;\n  } catch (error) {\n    handleError(lView, error);\n    return false;\n  } finally {\n    profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);\n    setActiveConsumer$1(prevConsumer);\n  }\n}\n/**\n * Wraps an event listener with a function that marks ancestors dirty and prevents default behavior,\n * if applicable.\n *\n * @param tNode The TNode associated with this listener\n * @param lView The LView that contains this listener\n * @param listenerFn The listener function to call\n * @param wrapWithPreventDefault Whether or not to prevent default behavior\n * (the procedural renderer does this already, so in those cases, we should skip)\n */\nfunction wrapListener(tNode, lView, context, listenerFn) {\n  // Note: we are performing most of the work in the listener function itself\n  // to optimize listener registration.\n  return function wrapListenerIn_markDirtyAndPreventDefault(e) {\n    // Ivy uses `Function` as a special token that allows us to unwrap the function\n    // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`.\n    if (e === Function) {\n      return listenerFn;\n    }\n    // In order to be backwards compatible with View Engine, events on component host nodes\n    // must also mark the component view itself dirty (i.e. the view that it owns).\n    const startView = tNode.componentOffset > -1 ? getComponentLViewByIndex(tNode.index, lView) : lView;\n    markViewDirty(startView, 5 /* NotificationSource.Listener */);\n    let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);\n    // A just-invoked listener function might have coalesced listeners so we need to check for\n    // their presence and invoke as needed.\n    let nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;\n    while (nextListenerFn) {\n      // We should prevent default if any of the listeners explicitly return false\n      result = executeListenerWithErrorHandling(lView, context, nextListenerFn, e) && result;\n      nextListenerFn = nextListenerFn.__ngNextListenerFn__;\n    }\n    return result;\n  };\n}\n/**\n * Whether the given value represents a subscribable output.\n *\n * For example, an `EventEmitter, a `Subject`, an `Observable` or an\n * `OutputEmitter`.\n */\nfunction isOutputSubscribable(value) {\n  return value != null && typeof value.subscribe === 'function';\n}\n\n/**\n * Retrieves a context at the level specified and saves it as the global, contextViewData.\n * Will get the next level up if level is not specified.\n *\n * This is used to save contexts of parent views so they can be bound in embedded views, or\n * in conjunction with reference() to bind a ref from a parent view.\n *\n * @param level The relative level of the view from which to grab context compared to contextVewData\n * @returns context\n *\n * @codeGenApi\n */\nfunction ɵɵnextContext(level = 1) {\n  return nextContextImpl(level);\n}\n\n/**\n * Checks a given node against matching projection slots and returns the\n * determined slot index. Returns \"null\" if no slot matched the given node.\n *\n * This function takes into account the parsed ngProjectAs selector from the\n * node's attributes. If present, it will check whether the ngProjectAs selector\n * matches any of the projection slot selectors.\n */\nfunction matchingProjectionSlotIndex(tNode, projectionSlots) {\n  let wildcardNgContentIndex = null;\n  const ngProjectAsAttrVal = getProjectAsAttrValue(tNode);\n  for (let i = 0; i < projectionSlots.length; i++) {\n    const slotValue = projectionSlots[i];\n    // The last wildcard projection slot should match all nodes which aren't matching\n    // any selector. This is necessary to be backwards compatible with view engine.\n    if (slotValue === '*') {\n      wildcardNgContentIndex = i;\n      continue;\n    }\n    // If we ran into an `ngProjectAs` attribute, we should match its parsed selector\n    // to the list of selectors, otherwise we fall back to matching against the node.\n    if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(tNode, slotValue, /* isProjectionMode */true) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {\n      return i; // first matching selector \"captures\" a given node\n    }\n  }\n  return wildcardNgContentIndex;\n}\n/**\n * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.\n * It takes all the selectors from the entire component's template and decides where\n * each projected node belongs (it re-distributes nodes among \"buckets\" where each \"bucket\" is\n * backed by a selector).\n *\n * This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,\n * un-parsed form.\n *\n * The parsed form is needed for efficient matching of a node against a given CSS selector.\n * The un-parsed, textual form is needed for support of the ngProjectAs attribute.\n *\n * Having a CSS selector in 2 different formats is not ideal, but alternatives have even more\n * drawbacks:\n * - having only a textual form would require runtime parsing of CSS selectors;\n * - we can't have only a parsed as we can't re-construct textual form from it (as entered by a\n * template author).\n *\n * @param projectionSlots? A collection of projection slots. A projection slot can be based\n *        on a parsed CSS selectors or set to the wildcard selector (\"*\") in order to match\n *        all nodes which do not match any selector. If not specified, a single wildcard\n *        selector projection slot will be defined.\n *\n * @codeGenApi\n */\nfunction ɵɵprojectionDef(projectionSlots) {\n  const componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];\n  if (!componentNode.projection) {\n    // If no explicit projection slots are defined, fall back to a single\n    // projection slot with the wildcard selector.\n    const numProjectionSlots = projectionSlots ? projectionSlots.length : 1;\n    const projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);\n    const tails = projectionHeads.slice();\n    let componentChild = componentNode.child;\n    while (componentChild !== null) {\n      // Do not project let declarations so they don't occupy a slot.\n      if (componentChild.type !== 128 /* TNodeType.LetDeclaration */) {\n        const slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;\n        if (slotIndex !== null) {\n          if (tails[slotIndex]) {\n            tails[slotIndex].projectionNext = componentChild;\n          } else {\n            projectionHeads[slotIndex] = componentChild;\n          }\n          tails[slotIndex] = componentChild;\n        }\n      }\n      componentChild = componentChild.next;\n    }\n  }\n}\n/**\n * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call\n * to the projectionDef instruction.\n *\n * @param nodeIndex Index of the projection node.\n * @param selectorIndex Index of the slot selector.\n *  - 0 when the selector is `*` (or unspecified as this is the default value),\n *  - 1 based index of the selector from the {@link projectionDef}\n * @param attrs Static attributes set on the `ng-content` node.\n * @param fallbackTemplateFn Template function with fallback content.\n *   Will be rendered if the slot is empty at runtime.\n * @param fallbackDecls Number of declarations in the fallback template.\n * @param fallbackVars Number of variables in the fallback template.\n *\n * @codeGenApi\n */\nfunction ɵɵprojection(nodeIndex, selectorIndex = 0, attrs, fallbackTemplateFn, fallbackDecls, fallbackVars) {\n  const lView = getLView();\n  const tView = getTView();\n  const fallbackIndex = fallbackTemplateFn ? nodeIndex + 1 : null;\n  // Fallback content needs to be declared no matter whether the slot is empty since different\n  // instances of the component may or may not insert it. Also it needs to be declare *before*\n  // the projection node in order to work correctly with hydration.\n  if (fallbackIndex !== null) {\n    declareTemplate(lView, tView, fallbackIndex, fallbackTemplateFn, fallbackDecls, fallbackVars, null, attrs);\n  }\n  const tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16 /* TNodeType.Projection */, null, attrs || null);\n  // We can't use viewData[HOST_NODE] because projection nodes can be nested in embedded views.\n  if (tProjectionNode.projection === null) {\n    tProjectionNode.projection = selectorIndex;\n  }\n  // `<ng-content>` has no content. Even if there's fallback\n  // content, the fallback is shown next to it.\n  setCurrentTNodeAsNotParent();\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1();\n  const componentHostNode = lView[DECLARATION_COMPONENT_VIEW][T_HOST];\n  const isEmpty = componentHostNode.projection[tProjectionNode.projection] === null;\n  if (isEmpty && fallbackIndex !== null) {\n    insertFallbackContent(lView, tView, fallbackIndex);\n  } else if (isNodeCreationMode && (tProjectionNode.flags & 32 /* TNodeFlags.isDetached */) !== 32 /* TNodeFlags.isDetached */) {\n    // re-distribution of projectable nodes is stored on a component's view level\n    applyProjection(tView, lView, tProjectionNode);\n  }\n}\n/** Inserts the fallback content of a projection slot. Assumes there's no projected content. */\nfunction insertFallbackContent(lView, tView, fallbackIndex) {\n  const adjustedIndex = HEADER_OFFSET + fallbackIndex;\n  const fallbackTNode = tView.data[adjustedIndex];\n  const fallbackLContainer = lView[adjustedIndex];\n  ngDevMode && assertTNode(fallbackTNode);\n  ngDevMode && assertLContainer(fallbackLContainer);\n  const dehydratedView = findMatchingDehydratedView(fallbackLContainer, fallbackTNode.tView.ssrId);\n  const fallbackLView = createAndRenderEmbeddedLView(lView, fallbackTNode, undefined, {\n    dehydratedView\n  });\n  addLViewToLContainer(fallbackLContainer, fallbackLView, 0, shouldAddViewToDom(fallbackTNode, dehydratedView));\n}\n\n/**\n *\n * Update an interpolated property on an element with a lone bound value\n *\n * Used when the value passed to a property has 1 interpolated value in it, an no additional text\n * surrounds that interpolated value:\n *\n * ```html\n * <div title=\"{{v0}}\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate('title', v0);\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate(propName, v0, sanitizer) {\n  ɵɵpropertyInterpolate1(propName, '', v0, '', sanitizer);\n  return ɵɵpropertyInterpolate;\n}\n/**\n *\n * Update an interpolated property on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate1('title', 'prefix', v0, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);\n  }\n  return ɵɵpropertyInterpolate1;\n}\n/**\n *\n * Update an interpolated property on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);\n  }\n  return ɵɵpropertyInterpolate2;\n}\n/**\n *\n * Update an interpolated property on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate3(\n * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);\n  }\n  return ɵɵpropertyInterpolate3;\n}\n/**\n *\n * Update an interpolated property on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate4(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);\n  }\n  return ɵɵpropertyInterpolate4;\n}\n/**\n *\n * Update an interpolated property on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate5(\n * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);\n  }\n  return ɵɵpropertyInterpolate5;\n}\n/**\n *\n * Update an interpolated property on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate6(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);\n  }\n  return ɵɵpropertyInterpolate6;\n}\n/**\n *\n * Update an interpolated property on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate7(\n *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);\n  }\n  return ɵɵpropertyInterpolate7;\n}\n/**\n *\n * Update an interpolated property on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolate8(\n *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);\n  }\n  return ɵɵpropertyInterpolate8;\n}\n/**\n * Update an interpolated property on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  title=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is::\n *\n * ```ts\n * ɵɵpropertyInterpolateV(\n *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * If the property name also exists as an input property on one of the element's directives,\n * the component property will be set instead of the element property. This check must\n * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.\n *\n * @param propName The name of the property to update.\n * @param values The collection of values and the strings in between those values, beginning with a\n * string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param sanitizer An optional sanitizer function\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵpropertyInterpolateV(propName, values, sanitizer) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  if (interpolatedValue !== NO_CHANGE) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);\n    if (ngDevMode) {\n      const interpolationInBetween = [values[0]]; // prefix\n      for (let i = 2; i < values.length; i += 2) {\n        interpolationInBetween.push(values[i]);\n      }\n      storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1, ...interpolationInBetween);\n    }\n  }\n  return ɵɵpropertyInterpolateV;\n}\n\n/**\n * Registers a QueryList, associated with a content query, for later refresh (part of a view\n * refresh).\n *\n * @param directiveIndex Current directive index\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n * @returns QueryList<T>\n *\n * @codeGenApi\n */\nfunction ɵɵcontentQuery(directiveIndex, predicate, flags, read) {\n  createContentQuery(directiveIndex, predicate, flags, read);\n}\n/**\n * Creates a new view query by initializing internal data structures.\n *\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵviewQuery(predicate, flags, read) {\n  createViewQuery(predicate, flags, read);\n}\n/**\n * Refreshes a query by combining matches from all active views and removing matches from deleted\n * views.\n *\n * @returns `true` if a query got dirty during change detection or if this is a static query\n * resolving in creation mode, `false` otherwise.\n *\n * @codeGenApi\n */\nfunction ɵɵqueryRefresh(queryList) {\n  const lView = getLView();\n  const tView = getTView();\n  const queryIndex = getCurrentQueryIndex();\n  setCurrentQueryIndex(queryIndex + 1);\n  const tQuery = getTQuery(tView, queryIndex);\n  if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2 /* QueryFlags.isStatic */) === 2 /* QueryFlags.isStatic */)) {\n    if (tQuery.matches === null) {\n      queryList.reset([]);\n    } else {\n      const result = getQueryResults(lView, queryIndex);\n      queryList.reset(result, unwrapElementRef);\n      queryList.notifyOnChanges();\n    }\n    return true;\n  }\n  return false;\n}\n/**\n * Loads a QueryList corresponding to the current view or content query.\n *\n * @codeGenApi\n */\nfunction ɵɵloadQuery() {\n  return loadQueryInternal(getLView(), getCurrentQueryIndex());\n}\n\n/**\n * Creates a new content query and binds it to a signal created by an authoring function.\n *\n * @param directiveIndex Current directive index\n * @param target The target signal to which the query should be bound\n * @param predicate The type for which the query will search\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵcontentQuerySignal(directiveIndex, target, predicate, flags, read) {\n  bindQueryToSignal(target, createContentQuery(directiveIndex, predicate, flags, read));\n}\n/**\n * Creates a new view query by initializing internal data structures and binding a new query to the\n * target signal.\n *\n * @param target The target signal to assign the query results to.\n * @param predicate The type or label that should match a given query\n * @param flags Flags associated with the query\n * @param read What to save in the query\n *\n * @codeGenApi\n */\nfunction ɵɵviewQuerySignal(target, predicate, flags, read) {\n  bindQueryToSignal(target, createViewQuery(predicate, flags, read));\n}\n/**\n * Advances the current query index by a specified offset.\n *\n * Adjusting the current query index is necessary in cases where a given directive has a mix of\n * zone-based and signal-based queries. The signal-based queries don't require tracking of the\n * current index (those are refreshed on demand and not during change detection) so this instruction\n * is only necessary for backward-compatibility.\n *\n * @param index offset to apply to the current query index (defaults to 1)\n *\n * @codeGenApi\n */\nfunction ɵɵqueryAdvance(indexOffset = 1) {\n  setCurrentQueryIndex(getCurrentQueryIndex() + indexOffset);\n}\n\n/** Store a value in the `data` at a given `index`. */\nfunction store(tView, lView, index, value) {\n  // We don't store any static data for local variables, so the first time\n  // we see the template, we should store as null to avoid a sparse array\n  if (index >= tView.data.length) {\n    tView.data[index] = null;\n    tView.blueprint[index] = null;\n  }\n  lView[index] = value;\n}\n/**\n * Retrieves a local reference from the current contextViewData.\n *\n * If the reference to retrieve is in a parent view, this instruction is used in conjunction\n * with a nextContext() call, which walks up the tree and updates the contextViewData instance.\n *\n * @param index The index of the local ref in contextViewData.\n *\n * @codeGenApi\n */\nfunction ɵɵreference(index) {\n  const contextLView = getContextLView();\n  return load(contextLView, HEADER_OFFSET + index);\n}\n\n/**\n *\n * Update an interpolated style on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div style=\"key: {{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate1('key: ', v0, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate2('key: ', v0, '; key1: ', v1, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key2: {{v1}}; key2: {{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate3(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate4(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate5(\n *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}};\n *             key5: {{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate6(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *             key6: {{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate7(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    '; key6: ', v6, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n *\n * Update an interpolated style on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div style=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *             key6: {{v6}}; key7: {{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolate8(\n *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *    '; key6: ', v6, '; key7: ', v7, 'suffix');\n * ```\n *\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  ɵɵstyleMap(interpolatedValue);\n}\n/**\n * Update an interpolated style on an element with 9 or more bound values surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  class=\"key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};\n *         key6: {{v6}}; key7: {{v7}}; key8: {{v8}}; key9: {{v9}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstyleMapInterpolateV(\n *    ['key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,\n *     '; key6: ', v6, '; key7: ', v7, '; key8: ', v8, '; key9: ', v9, 'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '; key2: ', value1, '; key2: ', value2, ..., value99, 'suffix']`)\n * @codeGenApi\n */\nfunction ɵɵstyleMapInterpolateV(values) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  ɵɵstyleMap(interpolatedValue);\n}\n\n/**\n *\n * Update an interpolated style property on an element with single bound value surrounded by text.\n *\n * Used when the value passed to a property has 1 interpolated value in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate1(0, 'prefix', v0, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation1(lView, prefix, v0, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate1;\n}\n/**\n *\n * Update an interpolated style property on an element with 2 bound values surrounded by text.\n *\n * Used when the value passed to a property has 2 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate2(0, 'prefix', v0, '-', v1, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate2;\n}\n/**\n *\n * Update an interpolated style property on an element with 3 bound values surrounded by text.\n *\n * Used when the value passed to a property has 3 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate3(0, 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate3;\n}\n/**\n *\n * Update an interpolated style property on an element with 4 bound values surrounded by text.\n *\n * Used when the value passed to a property has 4 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate4(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate4;\n}\n/**\n *\n * Update an interpolated style property on an element with 5 bound values surrounded by text.\n *\n * Used when the value passed to a property has 5 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate5(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate5;\n}\n/**\n *\n * Update an interpolated style property on an element with 6 bound values surrounded by text.\n *\n * Used when the value passed to a property has 6 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate6(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate6;\n}\n/**\n *\n * Update an interpolated style property on an element with 7 bound values surrounded by text.\n *\n * Used when the value passed to a property has 7 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate7(\n *    0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate7;\n}\n/**\n *\n * Update an interpolated style property on an element with 8 bound values surrounded by text.\n *\n * Used when the value passed to a property has 8 interpolated values in it:\n *\n * ```html\n * <div style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix\"></div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolate8(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6,\n * '-', v7, 'suffix');\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`.\n * @param prefix Static value used for concatenation only.\n * @param v0 Value checked for change.\n * @param i0 Static value used for concatenation only.\n * @param v1 Value checked for change.\n * @param i1 Static value used for concatenation only.\n * @param v2 Value checked for change.\n * @param i2 Static value used for concatenation only.\n * @param v3 Value checked for change.\n * @param i3 Static value used for concatenation only.\n * @param v4 Value checked for change.\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change.\n * @param i5 Static value used for concatenation only.\n * @param v6 Value checked for change.\n * @param i6 Static value used for concatenation only.\n * @param v7 Value checked for change.\n * @param suffix Static value used for concatenation only.\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolate8;\n}\n/**\n * Update an interpolated style property on an element with 9 or more bound values surrounded by\n * text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div\n *  style.color=\"prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix\">\n * </div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵstylePropInterpolateV(\n *  0, ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *\n * @param styleIndex Index of style to update. This index value refers to the\n *        index of the style in the style bindings array that was passed into\n *        `styling`..\n * @param values The collection of values and the strings in-between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵstylePropInterpolateV(prop, values, valueSuffix) {\n  const lView = getLView();\n  const interpolatedValue = interpolationV(lView, values);\n  checkStylingProperty(prop, interpolatedValue, valueSuffix, false);\n  return ɵɵstylePropInterpolateV;\n}\n\n/**\n * Create static text node\n *\n * @param index Index of the node in the data array\n * @param value Static string value to write.\n *\n * @codeGenApi\n */\nfunction ɵɵtext(index, value = '') {\n  const lView = getLView();\n  const tView = getTView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'text nodes should be created before any bindings');\n  ngDevMode && assertIndexInRange(lView, adjustedIndex);\n  const tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1 /* TNodeType.Text */, value, null) : tView.data[adjustedIndex];\n  const textNative = _locateOrCreateTextNode(tView, lView, tNode, value, index);\n  lView[adjustedIndex] = textNative;\n  if (wasLastNodeCreated()) {\n    appendChild(tView, lView, textNative, tNode);\n  }\n  // Text nodes are self closing.\n  setCurrentTNode(tNode, false);\n}\nlet _locateOrCreateTextNode = (tView, lView, tNode, value, index) => {\n  lastNodeWasCreated(true);\n  return createTextNode(lView[RENDERER], value);\n};\n/**\n * Enables hydration code path (to lookup existing elements in DOM)\n * in addition to the regular creation mode of text nodes.\n */\nfunction locateOrCreateTextNodeImpl(tView, lView, tNode, value, index) {\n  const hydrationInfo = lView[HYDRATION];\n  const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDetachedByI18n(tNode) || isDisconnectedNode$1(hydrationInfo, index);\n  lastNodeWasCreated(isNodeCreationMode);\n  // Regular creation mode.\n  if (isNodeCreationMode) {\n    return createTextNode(lView[RENDERER], value);\n  }\n  // Hydration mode, looking up an existing element in DOM.\n  const textNative = locateNextRNode(hydrationInfo, tView, lView, tNode);\n  ngDevMode && validateMatchingNode(textNative, Node.TEXT_NODE, null, lView, tNode);\n  ngDevMode && markRNodeAsClaimedByHydration(textNative);\n  return textNative;\n}\nfunction enableLocateOrCreateTextNodeImpl() {\n  _locateOrCreateTextNode = locateOrCreateTextNodeImpl;\n}\n\n/**\n *\n * Update text content with a lone bound value\n *\n * Used when a text node has 1 interpolated value in it, an no additional text\n * surrounds that interpolated value:\n *\n * ```html\n * <div>{{v0}}</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate(v0);\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate(v0) {\n  ɵɵtextInterpolate1('', v0, '');\n  return ɵɵtextInterpolate;\n}\n/**\n *\n * Update text content with single bound value surrounded by other text.\n *\n * Used when a text node has 1 interpolated value in it:\n *\n * ```html\n * <div>prefix{{v0}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate1('prefix', v0, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate1(prefix, v0, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation1(lView, prefix, v0, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate1;\n}\n/**\n *\n * Update text content with 2 bound values surrounded by other text.\n *\n * Used when a text node has 2 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate2('prefix', v0, '-', v1, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate2;\n}\n/**\n *\n * Update text content with 3 bound values surrounded by other text.\n *\n * Used when a text node has 3 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate3(\n * 'prefix', v0, '-', v1, '-', v2, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate3;\n}\n/**\n *\n * Update text content with 4 bound values surrounded by other text.\n *\n * Used when a text node has 4 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate4(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see ɵɵtextInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate4;\n}\n/**\n *\n * Update text content with 5 bound values surrounded by other text.\n *\n * Used when a text node has 5 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate5(\n * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate5;\n}\n/**\n *\n * Update text content with 6 bound values surrounded by other text.\n *\n * Used when a text node has 6 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate6(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');\n * ```\n *\n * @param i4 Static value used for concatenation only.\n * @param v5 Value checked for change. @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate6;\n}\n/**\n *\n * Update text content with 7 bound values surrounded by other text.\n *\n * Used when a text node has 7 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate7(\n *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate7;\n}\n/**\n *\n * Update text content with 8 bound values surrounded by other text.\n *\n * Used when a text node has 8 interpolated values in it:\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolate8(\n *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');\n * ```\n * @returns itself, so that it may be chained.\n * @see textInterpolateV\n * @codeGenApi\n */\nfunction ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {\n  const lView = getLView();\n  const interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolate8;\n}\n/**\n * Update text content with 9 or more bound values other surrounded by text.\n *\n * Used when the number of interpolated values exceeds 8.\n *\n * ```html\n * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix</div>\n * ```\n *\n * Its compiled representation is:\n *\n * ```ts\n * ɵɵtextInterpolateV(\n *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,\n *  'suffix']);\n * ```\n *.\n * @param values The collection of values and the strings in between those values, beginning with\n * a string prefix and ending with a string suffix.\n * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)\n *\n * @returns itself, so that it may be chained.\n * @codeGenApi\n */\nfunction ɵɵtextInterpolateV(values) {\n  const lView = getLView();\n  const interpolated = interpolationV(lView, values);\n  if (interpolated !== NO_CHANGE) {\n    textBindingInternal(lView, getSelectedIndex(), interpolated);\n  }\n  return ɵɵtextInterpolateV;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Update a two-way bound property on a selected element.\n *\n * Operates on the element selected by index via the {@link select} instruction.\n *\n * @param propName Name of property.\n * @param value New value to write.\n * @param sanitizer An optional function used to sanitize the value.\n * @returns This function returns itself so that it may be chained\n * (e.g. `twoWayProperty('name', ctx.name)('title', ctx.title)`)\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayProperty(propName, value, sanitizer) {\n  // TODO(crisbeto): perf impact of re-evaluating this on each change detection?\n  if (isWritableSignal(value)) {\n    value = value();\n  }\n  const lView = getLView();\n  const bindingIndex = nextBindingIndex();\n  if (bindingUpdated(lView, bindingIndex, value)) {\n    const tView = getTView();\n    const tNode = getSelectedTNode();\n    elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);\n    ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);\n  }\n  return ɵɵtwoWayProperty;\n}\n/**\n * Function used inside two-way listeners to conditionally set the value of the bound expression.\n *\n * @param target Field on which to set the value.\n * @param value Value to be set to the field.\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayBindingSet(target, value) {\n  const canWrite = isWritableSignal(target);\n  canWrite && target.set(value);\n  return canWrite;\n}\n/**\n * Adds an event listener that updates a two-way binding to the current node.\n *\n * @param eventName Name of the event.\n * @param listenerFn The function to be called when event emits.\n *\n * @codeGenApi\n */\nfunction ɵɵtwoWayListener(eventName, listenerFn) {\n  const lView = getLView();\n  const tView = getTView();\n  const tNode = getCurrentTNode();\n  listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn);\n  return ɵɵtwoWayListener;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/** Object that indicates the value of a `@let` declaration that hasn't been initialized yet. */\nconst UNINITIALIZED_LET = {};\n/**\n * Declares an `@let` at a specific data slot. Returns itself to allow chaining.\n *\n * @param index Index at which to declare the `@let`.\n *\n * @codeGenApi\n */\nfunction ɵɵdeclareLet(index) {\n  const tView = getTView();\n  const lView = getLView();\n  const adjustedIndex = index + HEADER_OFFSET;\n  const tNode = getOrCreateTNode(tView, adjustedIndex, 128 /* TNodeType.LetDeclaration */, null, null);\n  setCurrentTNode(tNode, false);\n  store(tView, lView, adjustedIndex, UNINITIALIZED_LET);\n  return ɵɵdeclareLet;\n}\n/**\n * Instruction that stores the value of a `@let` declaration on the current view.\n * Returns the value to allow usage inside variable initializers.\n *\n * @codeGenApi\n */\nfunction ɵɵstoreLet(value) {\n  performanceMarkFeature('NgLet');\n  const tView = getTView();\n  const lView = getLView();\n  const index = getSelectedIndex();\n  store(tView, lView, index, value);\n  return value;\n}\n/**\n * Retrieves the value of a `@let` declaration defined in a parent view.\n *\n * @param index Index of the declaration within the view.\n *\n * @codeGenApi\n */\nfunction ɵɵreadContextLet(index) {\n  const contextLView = getContextLView();\n  const value = load(contextLView, HEADER_OFFSET + index);\n  if (value === UNINITIALIZED_LET) {\n    throw new RuntimeError(314 /* RuntimeErrorCode.UNINITIALIZED_LET_ACCESS */, ngDevMode && 'Attempting to access a @let declaration whose value is not available yet');\n  }\n  return value;\n}\n\n/*\n * This file re-exports all symbols contained in this directory.\n *\n * Why is this file not `index.ts`?\n *\n * There seems to be an inconsistent path resolution of an `index.ts` file\n * when only the parent directory is referenced. This could be due to the\n * node module resolution configuration differing from rollup and/or typescript.\n *\n * With commit\n * https://github.com/angular/angular/commit/d5e3f2c64bd13ce83e7c70788b7fc514ca4a9918\n * the `instructions.ts` file was moved to `instructions/instructions.ts` and an\n * `index.ts` file was used to re-export everything. Having had file names that were\n * importing from `instructions' directly (not the from the sub file or the `index.ts`\n * file) caused strange CI issues. `index.ts` had to be renamed to `all.ts` for this\n * to work.\n *\n * Jira Issue = FW-1184\n */\n\n/**\n * Resolves the providers which are defined in the DirectiveDef.\n *\n * When inserting the tokens and the factories in their respective arrays, we can assume that\n * this method is called first for the component (if any), and then for other directives on the same\n * node.\n * As a consequence,the providers are always processed in that order:\n * 1) The view providers of the component\n * 2) The providers of the component\n * 3) The providers of the other directives\n * This matches the structure of the injectables arrays of a view (for each node).\n * So the tokens and the factories can be pushed at the end of the arrays, except\n * in one case for multi providers.\n *\n * @param def the directive definition\n * @param providers: Array of `providers`.\n * @param viewProviders: Array of `viewProviders`.\n */\nfunction providersResolver(def, providers, viewProviders) {\n  const tView = getTView();\n  if (tView.firstCreatePass) {\n    const isComponent = isComponentDef(def);\n    // The list of view providers is processed first, and the flags are updated\n    resolveProvider(viewProviders, tView.data, tView.blueprint, isComponent, true);\n    // Then, the list of providers is processed, and the flags are updated\n    resolveProvider(providers, tView.data, tView.blueprint, isComponent, false);\n  }\n}\n/**\n * Resolves a provider and publishes it to the DI system.\n */\nfunction resolveProvider(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {\n  provider = resolveForwardRef(provider);\n  if (Array.isArray(provider)) {\n    // Recursively call `resolveProvider`\n    // Recursion is OK in this case because this code will not be in hot-path once we implement\n    // cloning of the initial state.\n    for (let i = 0; i < provider.length; i++) {\n      resolveProvider(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);\n    }\n  } else {\n    const tView = getTView();\n    const lView = getLView();\n    const tNode = getCurrentTNode();\n    let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);\n    const providerFactory = providerToFactory(provider);\n    if (ngDevMode) {\n      const injector = new NodeInjector(tNode, lView);\n      runInInjectorProfilerContext(injector, token, () => {\n        emitProviderConfiguredEvent(provider, isViewProvider);\n      });\n    }\n    const beginIndex = tNode.providerIndexes & 1048575 /* TNodeProviderIndexes.ProvidersStartIndexMask */;\n    const endIndex = tNode.directiveStart;\n    const cptViewProvidersCount = tNode.providerIndexes >> 20 /* TNodeProviderIndexes.CptViewProvidersCountShift */;\n    if (isTypeProvider(provider) || !provider.multi) {\n      // Single provider case: the factory is created and pushed immediately\n      const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);\n      const existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);\n      if (existingFactoryIndex === -1) {\n        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n        registerDestroyHooksIfSupported(tView, provider, tInjectables.length);\n        tInjectables.push(token);\n        tNode.directiveStart++;\n        tNode.directiveEnd++;\n        if (isViewProvider) {\n          tNode.providerIndexes += 1048576 /* TNodeProviderIndexes.CptViewProvidersCountShifter */;\n        }\n        lInjectablesBlueprint.push(factory);\n        lView.push(factory);\n      } else {\n        lInjectablesBlueprint[existingFactoryIndex] = factory;\n        lView[existingFactoryIndex] = factory;\n      }\n    } else {\n      // Multi provider case:\n      // We create a multi factory which is going to aggregate all the values.\n      // Since the output of such a factory depends on content or view injection,\n      // we create two of them, which are linked together.\n      //\n      // The first one (for view providers) is always in the first block of the injectables array,\n      // and the second one (for providers) is always in the second block.\n      // This is important because view providers have higher priority. When a multi token\n      // is being looked up, the view providers should be found first.\n      // Note that it is not possible to have a multi factory in the third block (directive block).\n      //\n      // The algorithm to process multi providers is as follows:\n      // 1) If the multi provider comes from the `viewProviders` of the component:\n      //   a) If the special view providers factory doesn't exist, it is created and pushed.\n      //   b) Else, the multi provider is added to the existing multi factory.\n      // 2) If the multi provider comes from the `providers` of the component or of another\n      // directive:\n      //   a) If the multi factory doesn't exist, it is created and provider pushed into it.\n      //      It is also linked to the multi factory for view providers, if it exists.\n      //   b) Else, the multi provider is added to the existing multi factory.\n      const existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);\n      const existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);\n      const doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];\n      const doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];\n      if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {\n        // Cases 1.a and 2.a\n        diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);\n        const factory = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory);\n        if (!isViewProvider && doesViewProvidersFactoryExist) {\n          lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = factory;\n        }\n        registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);\n        tInjectables.push(token);\n        tNode.directiveStart++;\n        tNode.directiveEnd++;\n        if (isViewProvider) {\n          tNode.providerIndexes += 1048576 /* TNodeProviderIndexes.CptViewProvidersCountShifter */;\n        }\n        lInjectablesBlueprint.push(factory);\n        lView.push(factory);\n      } else {\n        // Cases 1.b and 2.b\n        const indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);\n        registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);\n      }\n      if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {\n        lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;\n      }\n    }\n  }\n}\n/**\n * Registers the `ngOnDestroy` hook of a provider, if the provider supports destroy hooks.\n * @param tView `TView` in which to register the hook.\n * @param provider Provider whose hook should be registered.\n * @param contextIndex Index under which to find the context for the hook when it's being invoked.\n * @param indexInFactory Only required for `multi` providers. Index of the provider in the multi\n * provider factory.\n */\nfunction registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {\n  const providerIsTypeProvider = isTypeProvider(provider);\n  const providerIsClassProvider = isClassProvider(provider);\n  if (providerIsTypeProvider || providerIsClassProvider) {\n    // Resolve forward references as `useClass` can hold a forward reference.\n    const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;\n    const prototype = classToken.prototype;\n    const ngOnDestroy = prototype.ngOnDestroy;\n    if (ngOnDestroy) {\n      const hooks = tView.destroyHooks || (tView.destroyHooks = []);\n      if (!providerIsTypeProvider && provider.multi) {\n        ngDevMode && assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');\n        const existingCallbacksIndex = hooks.indexOf(contextIndex);\n        if (existingCallbacksIndex === -1) {\n          hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);\n        } else {\n          hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);\n        }\n      } else {\n        hooks.push(contextIndex, ngOnDestroy);\n      }\n    }\n  }\n}\n/**\n * Add a factory in a multi factory.\n * @returns Index at which the factory was inserted.\n */\nfunction multiFactoryAdd(multiFactory, factory, isComponentProvider) {\n  if (isComponentProvider) {\n    multiFactory.componentProviders++;\n  }\n  return multiFactory.multi.push(factory) - 1;\n}\n/**\n * Returns the index of item in the array, but only in the begin to end range.\n */\nfunction indexOf(item, arr, begin, end) {\n  for (let i = begin; i < end; i++) {\n    if (arr[i] === item) return i;\n  }\n  return -1;\n}\n/**\n * Use this with `multi` `providers`.\n */\nfunction multiProvidersFactoryResolver(_, tData, lData, tNode) {\n  return multiResolve(this.multi, []);\n}\n/**\n * Use this with `multi` `viewProviders`.\n *\n * This factory knows how to concatenate itself with the existing `multi` `providers`.\n */\nfunction multiViewProvidersFactoryResolver(_, tData, lView, tNode) {\n  const factories = this.multi;\n  let result;\n  if (this.providerFactory) {\n    const componentCount = this.providerFactory.componentProviders;\n    const multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode);\n    // Copy the section of the array which contains `multi` `providers` from the component\n    result = multiProviders.slice(0, componentCount);\n    // Insert the `viewProvider` instances.\n    multiResolve(factories, result);\n    // Copy the section of the array which contains `multi` `providers` from other directives\n    for (let i = componentCount; i < multiProviders.length; i++) {\n      result.push(multiProviders[i]);\n    }\n  } else {\n    result = [];\n    // Insert the `viewProvider` instances.\n    multiResolve(factories, result);\n  }\n  return result;\n}\n/**\n * Maps an array of factories into an array of values.\n */\nfunction multiResolve(factories, result) {\n  for (let i = 0; i < factories.length; i++) {\n    const factory = factories[i];\n    result.push(factory());\n  }\n  return result;\n}\n/**\n * Creates a multi factory.\n */\nfunction multiFactory(factoryFn, index, isViewProvider, isComponent, f) {\n  const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);\n  factory.multi = [];\n  factory.index = index;\n  factory.componentProviders = 0;\n  multiFactoryAdd(factory, f, isComponent && !isViewProvider);\n  return factory;\n}\n\n/**\n * This feature resolves the providers of a directive (or component),\n * and publish them into the DI system, making it visible to others for injection.\n *\n * For example:\n * ```ts\n * class ComponentWithProviders {\n *   constructor(private greeter: GreeterDE) {}\n *\n *   static ɵcmp = defineComponent({\n *     type: ComponentWithProviders,\n *     selectors: [['component-with-providers']],\n *    factory: () => new ComponentWithProviders(directiveInject(GreeterDE as any)),\n *    decls: 1,\n *    vars: 1,\n *    template: function(fs: RenderFlags, ctx: ComponentWithProviders) {\n *      if (fs & RenderFlags.Create) {\n *        ɵɵtext(0);\n *      }\n *      if (fs & RenderFlags.Update) {\n *        ɵɵtextInterpolate(ctx.greeter.greet());\n *      }\n *    },\n *    features: [ɵɵProvidersFeature([GreeterDE])]\n *  });\n * }\n * ```\n *\n * @param definition\n *\n * @codeGenApi\n */\nfunction ɵɵProvidersFeature(providers, viewProviders = []) {\n  return definition => {\n    definition.providersResolver = (def, processProvidersFn) => {\n      return providersResolver(def,\n      //\n      processProvidersFn ? processProvidersFn(providers) : providers,\n      //\n      viewProviders);\n    };\n  };\n}\n\n/**\n * A feature that adds support for external runtime styles for a component.\n * An external runtime style is a URL to a CSS stylesheet that contains the styles\n * for a given component. For browsers, this URL will be used in an appended `link` element\n * when the component is rendered. This feature is typically used for Hot Module Replacement\n * (HMR) of component stylesheets by leveraging preexisting global stylesheet HMR available\n * in most development servers.\n *\n * @codeGenApi\n */\nfunction ɵɵExternalStylesFeature(styleUrls) {\n  return definition => {\n    if (styleUrls.length < 1) {\n      return;\n    }\n    definition.getExternalStyles = encapsulationId => {\n      // Add encapsulation ID search parameter `ngcomp` to support external style encapsulation as well as the encapsulation mode\n      // for usage tracking.\n      const urls = styleUrls.map(value => value + '?ngcomp' + (encapsulationId ? '=' + encodeURIComponent(encapsulationId) : '') + '&e=' + definition.encapsulation);\n      return urls;\n    };\n  };\n}\n\n/**\n * Generated next to NgModules to monkey-patch directive and pipe references onto a component's\n * definition, when generating a direct reference in the component file would otherwise create an\n * import cycle.\n *\n * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.\n *\n * @codeGenApi\n */\nfunction ɵɵsetComponentScope(type, directives, pipes) {\n  const def = type.ɵcmp;\n  def.directiveDefs = extractDefListOrFactory(directives, /* pipeDef */false);\n  def.pipeDefs = extractDefListOrFactory(pipes, /* pipeDef */true);\n}\n/**\n * Adds the module metadata that is necessary to compute the module's transitive scope to an\n * existing module definition.\n *\n * Scope metadata of modules is not used in production builds, so calls to this function can be\n * marked pure to tree-shake it from the bundle, allowing for all referenced declarations\n * to become eligible for tree-shaking as well.\n *\n * @codeGenApi\n */\nfunction ɵɵsetNgModuleScope(type, scope) {\n  return noSideEffects(() => {\n    const ngModuleDef = getNgModuleDef(type, true);\n    ngModuleDef.declarations = convertToTypeArray(scope.declarations || EMPTY_ARRAY);\n    ngModuleDef.imports = convertToTypeArray(scope.imports || EMPTY_ARRAY);\n    ngModuleDef.exports = convertToTypeArray(scope.exports || EMPTY_ARRAY);\n    if (scope.bootstrap) {\n      // This only happens in local compilation mode.\n      ngModuleDef.bootstrap = convertToTypeArray(scope.bootstrap);\n    }\n    depsTracker.registerNgModule(type, scope);\n  });\n}\nfunction convertToTypeArray(values) {\n  if (typeof values === 'function') {\n    return values;\n  }\n  const flattenValues = flatten(values);\n  if (flattenValues.some(isForwardRef)) {\n    return () => flattenValues.map(resolveForwardRef).map(maybeUnwrapModuleWithProviders);\n  } else {\n    return flattenValues.map(maybeUnwrapModuleWithProviders);\n  }\n}\nfunction maybeUnwrapModuleWithProviders(value) {\n  return isModuleWithProviders(value) ? value.ngModule : value;\n}\n\n/**\n * Bindings for pure functions are stored after regular bindings.\n *\n * |-------decls------|---------vars---------|                 |----- hostVars (dir1) ------|\n * ------------------------------------------------------------------------------------------\n * | nodes/refs/pipes | bindings | fn slots  | injector | dir1 | host bindings | host slots |\n * ------------------------------------------------------------------------------------------\n *                    ^                      ^\n *      TView.bindingStartIndex      TView.expandoStartIndex\n *\n * Pure function instructions are given an offset from the binding root. Adding the offset to the\n * binding root gives the first index where the bindings are stored. In component views, the binding\n * root is the bindingStartIndex. In host bindings, the binding root is the expandoStartIndex +\n * any directive instances + any hostVars in directives evaluated before it.\n *\n * See VIEW_DATA.md for more information about host binding resolution.\n */\n/**\n * If the value hasn't been saved, calls the pure function to store and return the\n * value. If it has been saved, returns the saved value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns a value\n * @param thisArg Optional calling context of pureFn\n * @returns value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction0(slotOffset, pureFn, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) : getBinding(lView, bindingIndex);\n}\n/**\n * If the value of the provided exp has changed, calls the pure function to return\n * an updated value. Or if the value has not changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns an updated value\n * @param exp Updated expression value\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {\n  return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {\n  return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n  return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n  return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) : pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param exp7\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  let different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param exp5\n * @param exp6\n * @param exp7\n * @param exp8\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {\n  const bindingIndex = getBindingRoot() + slotOffset;\n  const lView = getLView();\n  const different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);\n  return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);\n}\n/**\n * pureFunction instruction that can support any number of bindings.\n *\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn A pure function that takes binding values and builds an object or array\n * containing those values.\n * @param exps An array of binding values\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n * @codeGenApi\n */\nfunction ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {\n  return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);\n}\n/**\n * Results of a pure function invocation are stored in LView in a dedicated slot that is initialized\n * to NO_CHANGE. In rare situations a pure pipe might throw an exception on the very first\n * invocation and not produce any valid results. In this case LView would keep holding the NO_CHANGE\n * value. The NO_CHANGE is not something that we can use in expressions / bindings thus we convert\n * it to `undefined`.\n */\nfunction getPureFunctionReturnValue(lView, returnValueIndex) {\n  ngDevMode && assertIndexInRange(lView, returnValueIndex);\n  const lastReturnValue = lView[returnValueIndex];\n  return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;\n}\n/**\n * If the value of the provided exp has changed, calls the pure function to return\n * an updated value. Or if the value has not changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn Function that returns an updated value\n * @param exp Updated expression value\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);\n}\n/**\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn\n * @param exp1\n * @param exp2\n * @param exp3\n * @param exp4\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n *\n */\nfunction pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {\n  const bindingIndex = bindingRoot + slotOffset;\n  return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);\n}\n/**\n * pureFunction instruction that can support any number of bindings.\n *\n * If the value of any provided exp has changed, calls the pure function to return\n * an updated value. Or if no values have changed, returns cached value.\n *\n * @param lView LView in which the function is being executed.\n * @param bindingRoot Binding root index.\n * @param slotOffset the offset from binding root to the reserved slot\n * @param pureFn A pure function that takes binding values and builds an object or array\n * containing those values.\n * @param exps An array of binding values\n * @param thisArg Optional calling context of pureFn\n * @returns Updated or cached value\n */\nfunction pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {\n  let bindingIndex = bindingRoot + slotOffset;\n  let different = false;\n  for (let i = 0; i < exps.length; i++) {\n    bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);\n  }\n  return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);\n}\n\n/**\n * Create a pipe.\n *\n * @param index Pipe index where the pipe will be stored.\n * @param pipeName The name of the pipe\n * @returns T the instance of the pipe.\n *\n * @codeGenApi\n */\nfunction ɵɵpipe(index, pipeName) {\n  const tView = getTView();\n  let pipeDef;\n  const adjustedIndex = index + HEADER_OFFSET;\n  if (tView.firstCreatePass) {\n    // The `getPipeDef` throws if a pipe with a given name is not found\n    // (so we use non-null assertion below).\n    pipeDef = getPipeDef(pipeName, tView.pipeRegistry);\n    tView.data[adjustedIndex] = pipeDef;\n    if (pipeDef.onDestroy) {\n      (tView.destroyHooks ??= []).push(adjustedIndex, pipeDef.onDestroy);\n    }\n  } else {\n    pipeDef = tView.data[adjustedIndex];\n  }\n  const pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));\n  let previousInjectorProfilerContext;\n  if (ngDevMode) {\n    previousInjectorProfilerContext = setInjectorProfilerContext({\n      injector: new NodeInjector(getCurrentTNode(), getLView()),\n      token: pipeDef.type\n    });\n  }\n  const previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);\n  try {\n    // DI for pipes is supposed to behave like directives when placed on a component\n    // host node, which means that we have to disable access to `viewProviders`.\n    const previousIncludeViewProviders = setIncludeViewProviders(false);\n    const pipeInstance = pipeFactory();\n    setIncludeViewProviders(previousIncludeViewProviders);\n    store(tView, getLView(), adjustedIndex, pipeInstance);\n    return pipeInstance;\n  } finally {\n    // we have to restore the injector implementation in finally, just in case the creation of the\n    // pipe throws an error.\n    setInjectImplementation(previousInjectImplementation);\n    ngDevMode && setInjectorProfilerContext(previousInjectorProfilerContext);\n  }\n}\n/**\n * Searches the pipe registry for a pipe with the given name. If one is found,\n * returns the pipe. Otherwise, an error is thrown because the pipe cannot be resolved.\n *\n * @param name Name of pipe to resolve\n * @param registry Full list of available pipes\n * @returns Matching PipeDef\n */\nfunction getPipeDef(name, registry) {\n  if (registry) {\n    if (ngDevMode) {\n      const pipes = registry.filter(pipe => pipe.name === name);\n      // TODO: Throw an error in the next major\n      if (pipes.length > 1) {\n        console.warn(formatRuntimeError(313 /* RuntimeErrorCode.MULTIPLE_MATCHING_PIPES */, getMultipleMatchingPipesMessage(name)));\n      }\n    }\n    for (let i = registry.length - 1; i >= 0; i--) {\n      const pipeDef = registry[i];\n      if (name === pipeDef.name) {\n        return pipeDef;\n      }\n    }\n  }\n  if (ngDevMode) {\n    throw new RuntimeError(-302 /* RuntimeErrorCode.PIPE_NOT_FOUND */, getPipeNotFoundErrorMessage(name));\n  }\n  return;\n}\n/**\n * Generates a helpful error message for the user when multiple pipes match the name.\n *\n * @param name Name of the pipe\n * @returns The error message\n */\nfunction getMultipleMatchingPipesMessage(name) {\n  const lView = getLView();\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  const hostIsStandalone = isHostComponentStandalone(lView);\n  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n  const verifyMessage = `check ${hostIsStandalone ? \"'@Component.imports' of this component\" : 'the imports of this module'}`;\n  const errorMessage = `Multiple pipes match the name \\`${name}\\`${componentInfoMessage}. ${verifyMessage}`;\n  return errorMessage;\n}\n/**\n * Generates a helpful error message for the user when a pipe is not found.\n *\n * @param name Name of the missing pipe\n * @returns The error message\n */\nfunction getPipeNotFoundErrorMessage(name) {\n  const lView = getLView();\n  const declarationLView = lView[DECLARATION_COMPONENT_VIEW];\n  const context = declarationLView[CONTEXT];\n  const hostIsStandalone = isHostComponentStandalone(lView);\n  const componentInfoMessage = context ? ` in the '${context.constructor.name}' component` : '';\n  const verifyMessage = `Verify that it is ${hostIsStandalone ? \"included in the '@Component.imports' of this component\" : 'declared or imported in this module'}`;\n  const errorMessage = `The pipe '${name}' could not be found${componentInfoMessage}. ${verifyMessage}`;\n  return errorMessage;\n}\n/**\n * Invokes a pipe with 1 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param offset the binding offset\n * @param v1 1st argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind1(index, offset, v1) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), offset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1);\n}\n/**\n * Invokes a pipe with 2 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind2(index, slotOffset, v1, v2) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2);\n}\n/**\n * Invokes a pipe with 3 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n * @param v3 4rd argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3);\n}\n/**\n * Invokes a pipe with 4 arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param v1 1st argument to {@link PipeTransform#transform}.\n * @param v2 2nd argument to {@link PipeTransform#transform}.\n * @param v3 3rd argument to {@link PipeTransform#transform}.\n * @param v4 4th argument to {@link PipeTransform#transform}.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4);\n}\n/**\n * Invokes a pipe with variable number of arguments.\n *\n * This instruction acts as a guard to {@link PipeTransform#transform} invoking\n * the pipe only when an input to the pipe changes.\n *\n * @param index Pipe index where the pipe was stored on creation.\n * @param slotOffset the offset in the reserved slot space\n * @param values Array of arguments to pass to {@link PipeTransform#transform} method.\n *\n * @codeGenApi\n */\nfunction ɵɵpipeBindV(index, slotOffset, values) {\n  const adjustedIndex = index + HEADER_OFFSET;\n  const lView = getLView();\n  const pipeInstance = load(lView, adjustedIndex);\n  return isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values);\n}\nfunction isPure(lView, index) {\n  return lView[TVIEW].data[index].pure;\n}\n\n/**\n * Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the\n * `<ng-template>` element.\n *\n * @codeGenApi\n */\nfunction ɵɵtemplateRefExtractor(tNode, lView) {\n  return createTemplateRef(tNode, lView);\n}\nfunction ɵɵgetComponentDepsFactory(type, rawImports) {\n  return () => {\n    try {\n      return depsTracker.getComponentDependencies(type, rawImports).dependencies;\n    } catch (e) {\n      console.error(`Computing dependencies in local compilation mode for the component \"${type.name}\" failed with the exception:`, e);\n      throw e;\n    }\n  };\n}\n\n/**\n * Sets the debug info for an Angular class.\n *\n * This runtime is guarded by ngDevMode flag.\n */\nfunction ɵsetClassDebugInfo(type, debugInfo) {\n  const def = getComponentDef(type);\n  if (def !== null) {\n    def.debugInfo = debugInfo;\n  }\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Replaces the metadata of a component type and re-renders all live instances of the component.\n * @param type Class whose metadata will be replaced.\n * @param applyMetadata Callback that will apply a new set of metadata on the `type` when invoked.\n * @param environment Syntehtic namespace imports that need to be passed along to the callback.\n * @param locals Local symbols from the source location that have to be exposed to the callback.\n * @codeGenApi\n */\nfunction ɵɵreplaceMetadata(type, applyMetadata, namespaces, locals) {\n  ngDevMode && assertComponentDef(type);\n  const oldDef = getComponentDef(type);\n  // The reason `applyMetadata` is a callback that is invoked (almost) immediately is because\n  // the compiler usually produces more code than just the component definition, e.g. there\n  // can be functions for embedded views, the variables for the constant pool and `setClassMetadata`\n  // calls. The callback allows us to keep them isolate from the rest of the app and to invoke\n  // them at the right time.\n  applyMetadata.apply(null, [type, namespaces, ...locals]);\n  // If a `tView` hasn't been created yet, it means that this component hasn't been instantianted\n  // before. In this case there's nothing left for us to do aside from patching it in.\n  if (oldDef.tView) {\n    const trackedViews = getTrackedLViews().values();\n    for (const root of trackedViews) {\n      // Note: we have the additional check, because `IsRoot` can also indicate\n      // a component created through something like `createComponent`.\n      if (root[FLAGS] & 512 /* LViewFlags.IsRoot */ && root[PARENT] === null) {\n        recreateMatchingLViews(oldDef, root);\n      }\n    }\n  }\n}\n/**\n * Finds all LViews matching a specific component definition and recreates them.\n * @param def Component definition to search for.\n * @param rootLView View from which to start the search.\n */\nfunction recreateMatchingLViews(def, rootLView) {\n  ngDevMode && assertDefined(def.tView, 'Expected a component definition that has been instantiated at least once');\n  const tView = rootLView[TVIEW];\n  // Use `tView` to match the LView since `instanceof` can\n  // produce false positives when using inheritance.\n  if (tView === def.tView) {\n    ngDevMode && assertComponentDef(def.type);\n    recreateLView(getComponentDef(def.type), rootLView);\n    return;\n  }\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const current = rootLView[i];\n    if (isLContainer(current)) {\n      for (let i = CONTAINER_HEADER_OFFSET; i < current.length; i++) {\n        recreateMatchingLViews(def, current[i]);\n      }\n    } else if (isLView(current)) {\n      recreateMatchingLViews(def, current);\n    }\n  }\n}\n/**\n * Removes any cached renderers from the factory for the provided type.\n * This is currently used by the HMR logic to ensure Renderers are kept\n * synchronized with any definition metadata updates.\n * @param factory A RendererFactory2 instance.\n * @param def A ComponentDef instance.\n */\nfunction clearRendererCache(factory, def) {\n  // Cast to read a private field.\n  // NOTE: This must be kept synchronized with the renderer factory implementation in platform-browser.\n  factory.rendererByCompId?.delete(def.id);\n}\n/**\n * Recreates an LView in-place from a new component definition.\n * @param def Definition from which to recreate the view.\n * @param lView View to be recreated.\n */\nfunction recreateLView(def, lView) {\n  const instance = lView[CONTEXT];\n  const host = lView[HOST];\n  // In theory the parent can also be an LContainer, but it appears like that's\n  // only the case for embedded views which we won't be replacing here.\n  const parentLView = lView[PARENT];\n  ngDevMode && assertLView(parentLView);\n  const tNode = lView[T_HOST];\n  ngDevMode && assertTNodeType(tNode, 2 /* TNodeType.Element */);\n  // Recreate the TView since the template might've changed.\n  const newTView = getOrCreateComponentTView(def);\n  // Always force the creation of a new renderer to ensure state captured during construction\n  // stays consistent with the new component definition by clearing any old cached factories.\n  const rendererFactory = lView[ENVIRONMENT].rendererFactory;\n  clearRendererCache(rendererFactory, def);\n  // Create a new LView from the new TView, but reusing the existing TNode and DOM node.\n  const newLView = createLView(parentLView, newTView, instance, getInitialLViewFlagsFromDef(def), host, tNode, null, rendererFactory.createRenderer(host, def), null, null, null);\n  // Detach the LView from its current place in the tree so we don't\n  // start traversing any siblings and modifying their structure.\n  replaceLViewInTree(parentLView, lView, newLView, tNode.index);\n  // Destroy the detached LView.\n  destroyLView(lView[TVIEW], lView);\n  // Remove the nodes associated with the destroyed LView. This removes the\n  // descendants, but not the host which we want to stay in place.\n  removeViewFromDOM(lView[TVIEW], lView);\n  // Reset the content projection state of the TNode before the first render.\n  // Note that this has to happen after the LView has been destroyed or we\n  // risk some projected nodes not being removed correctly.\n  resetProjectionState(tNode);\n  // Creation pass for the new view.\n  renderView(newTView, newLView, instance);\n  // Update pass for the new view.\n  refreshView(newTView, newLView, newTView.template, instance);\n}\n/**\n * Replaces one LView in the tree with another one.\n * @param parentLView Parent of the LView being replaced.\n * @param oldLView LView being replaced.\n * @param newLView Replacement LView to be inserted.\n * @param index Index at which the LView should be inserted.\n */\nfunction replaceLViewInTree(parentLView, oldLView, newLView, index) {\n  // Update the sibling whose `NEXT` pointer refers to the old view.\n  for (let i = HEADER_OFFSET; i < parentLView[TVIEW].bindingStartIndex; i++) {\n    const current = parentLView[i];\n    if ((isLView(current) || isLContainer(current)) && current[NEXT] === oldLView) {\n      current[NEXT] = newLView;\n      break;\n    }\n  }\n  // Set the new view as the head, if the old view was first.\n  if (parentLView[CHILD_HEAD] === oldLView) {\n    parentLView[CHILD_HEAD] = newLView;\n  }\n  // Set the new view as the tail, if the old view was last.\n  if (parentLView[CHILD_TAIL] === oldLView) {\n    parentLView[CHILD_TAIL] = newLView;\n  }\n  // Update the `NEXT` pointer to the same as the old view.\n  newLView[NEXT] = oldLView[NEXT];\n  // Clear out the `NEXT` of the old view.\n  oldLView[NEXT] = null;\n  // Insert the new LView at the correct index.\n  parentLView[index] = newLView;\n}\n/**\n * Child nodes mutate the `projection` state of their parent node as they're being projected.\n * This function resets the `project` back to its initial state.\n * @param tNode\n */\nfunction resetProjectionState(tNode) {\n  // The `projection` is mutated by child nodes as they're being projected. We need to\n  // reset it to the initial state so projection works after the template is swapped out.\n  if (tNode.projection !== null) {\n    for (const current of tNode.projection) {\n      if (isTNodeShape(current)) {\n        // Reset `projectionNext` since it can affect the traversal order during projection.\n        current.projectionNext = null;\n        current.flags &= ~2 /* TNodeFlags.isProjected */;\n      }\n    }\n    tNode.projection = null;\n  }\n}\n\n/**\n * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.\n *\n * This should be kept up to date with the public exports of @angular/core.\n */\nconst angularCoreEnv = (() => ({\n  'ɵɵattribute': ɵɵattribute,\n  'ɵɵattributeInterpolate1': ɵɵattributeInterpolate1,\n  'ɵɵattributeInterpolate2': ɵɵattributeInterpolate2,\n  'ɵɵattributeInterpolate3': ɵɵattributeInterpolate3,\n  'ɵɵattributeInterpolate4': ɵɵattributeInterpolate4,\n  'ɵɵattributeInterpolate5': ɵɵattributeInterpolate5,\n  'ɵɵattributeInterpolate6': ɵɵattributeInterpolate6,\n  'ɵɵattributeInterpolate7': ɵɵattributeInterpolate7,\n  'ɵɵattributeInterpolate8': ɵɵattributeInterpolate8,\n  'ɵɵattributeInterpolateV': ɵɵattributeInterpolateV,\n  'ɵɵdefineComponent': ɵɵdefineComponent,\n  'ɵɵdefineDirective': ɵɵdefineDirective,\n  'ɵɵdefineInjectable': ɵɵdefineInjectable,\n  'ɵɵdefineInjector': ɵɵdefineInjector,\n  'ɵɵdefineNgModule': ɵɵdefineNgModule,\n  'ɵɵdefinePipe': ɵɵdefinePipe,\n  'ɵɵdirectiveInject': ɵɵdirectiveInject,\n  'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,\n  'ɵɵinject': ɵɵinject,\n  'ɵɵinjectAttribute': ɵɵinjectAttribute,\n  'ɵɵinvalidFactory': ɵɵinvalidFactory,\n  'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,\n  'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,\n  'ɵɵresetView': ɵɵresetView,\n  'ɵɵHostDirectivesFeature': ɵɵHostDirectivesFeature,\n  'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,\n  'ɵɵProvidersFeature': ɵɵProvidersFeature,\n  'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,\n  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,\n  'ɵɵInputTransformsFeature': ɵɵInputTransformsFeature,\n  'ɵɵExternalStylesFeature': ɵɵExternalStylesFeature,\n  'ɵɵnextContext': ɵɵnextContext,\n  'ɵɵnamespaceHTML': ɵɵnamespaceHTML,\n  'ɵɵnamespaceMathML': ɵɵnamespaceMathML,\n  'ɵɵnamespaceSVG': ɵɵnamespaceSVG,\n  'ɵɵenableBindings': ɵɵenableBindings,\n  'ɵɵdisableBindings': ɵɵdisableBindings,\n  'ɵɵelementStart': ɵɵelementStart,\n  'ɵɵelementEnd': ɵɵelementEnd,\n  'ɵɵelement': ɵɵelement,\n  'ɵɵelementContainerStart': ɵɵelementContainerStart,\n  'ɵɵelementContainerEnd': ɵɵelementContainerEnd,\n  'ɵɵelementContainer': ɵɵelementContainer,\n  'ɵɵpureFunction0': ɵɵpureFunction0,\n  'ɵɵpureFunction1': ɵɵpureFunction1,\n  'ɵɵpureFunction2': ɵɵpureFunction2,\n  'ɵɵpureFunction3': ɵɵpureFunction3,\n  'ɵɵpureFunction4': ɵɵpureFunction4,\n  'ɵɵpureFunction5': ɵɵpureFunction5,\n  'ɵɵpureFunction6': ɵɵpureFunction6,\n  'ɵɵpureFunction7': ɵɵpureFunction7,\n  'ɵɵpureFunction8': ɵɵpureFunction8,\n  'ɵɵpureFunctionV': ɵɵpureFunctionV,\n  'ɵɵgetCurrentView': ɵɵgetCurrentView,\n  'ɵɵrestoreView': ɵɵrestoreView,\n  'ɵɵlistener': ɵɵlistener,\n  'ɵɵprojection': ɵɵprojection,\n  'ɵɵsyntheticHostProperty': ɵɵsyntheticHostProperty,\n  'ɵɵsyntheticHostListener': ɵɵsyntheticHostListener,\n  'ɵɵpipeBind1': ɵɵpipeBind1,\n  'ɵɵpipeBind2': ɵɵpipeBind2,\n  'ɵɵpipeBind3': ɵɵpipeBind3,\n  'ɵɵpipeBind4': ɵɵpipeBind4,\n  'ɵɵpipeBindV': ɵɵpipeBindV,\n  'ɵɵprojectionDef': ɵɵprojectionDef,\n  'ɵɵhostProperty': ɵɵhostProperty,\n  'ɵɵproperty': ɵɵproperty,\n  'ɵɵpropertyInterpolate': ɵɵpropertyInterpolate,\n  'ɵɵpropertyInterpolate1': ɵɵpropertyInterpolate1,\n  'ɵɵpropertyInterpolate2': ɵɵpropertyInterpolate2,\n  'ɵɵpropertyInterpolate3': ɵɵpropertyInterpolate3,\n  'ɵɵpropertyInterpolate4': ɵɵpropertyInterpolate4,\n  'ɵɵpropertyInterpolate5': ɵɵpropertyInterpolate5,\n  'ɵɵpropertyInterpolate6': ɵɵpropertyInterpolate6,\n  'ɵɵpropertyInterpolate7': ɵɵpropertyInterpolate7,\n  'ɵɵpropertyInterpolate8': ɵɵpropertyInterpolate8,\n  'ɵɵpropertyInterpolateV': ɵɵpropertyInterpolateV,\n  'ɵɵpipe': ɵɵpipe,\n  'ɵɵqueryRefresh': ɵɵqueryRefresh,\n  'ɵɵqueryAdvance': ɵɵqueryAdvance,\n  'ɵɵviewQuery': ɵɵviewQuery,\n  'ɵɵviewQuerySignal': ɵɵviewQuerySignal,\n  'ɵɵloadQuery': ɵɵloadQuery,\n  'ɵɵcontentQuery': ɵɵcontentQuery,\n  'ɵɵcontentQuerySignal': ɵɵcontentQuerySignal,\n  'ɵɵreference': ɵɵreference,\n  'ɵɵclassMap': ɵɵclassMap,\n  'ɵɵclassMapInterpolate1': ɵɵclassMapInterpolate1,\n  'ɵɵclassMapInterpolate2': ɵɵclassMapInterpolate2,\n  'ɵɵclassMapInterpolate3': ɵɵclassMapInterpolate3,\n  'ɵɵclassMapInterpolate4': ɵɵclassMapInterpolate4,\n  'ɵɵclassMapInterpolate5': ɵɵclassMapInterpolate5,\n  'ɵɵclassMapInterpolate6': ɵɵclassMapInterpolate6,\n  'ɵɵclassMapInterpolate7': ɵɵclassMapInterpolate7,\n  'ɵɵclassMapInterpolate8': ɵɵclassMapInterpolate8,\n  'ɵɵclassMapInterpolateV': ɵɵclassMapInterpolateV,\n  'ɵɵstyleMap': ɵɵstyleMap,\n  'ɵɵstyleMapInterpolate1': ɵɵstyleMapInterpolate1,\n  'ɵɵstyleMapInterpolate2': ɵɵstyleMapInterpolate2,\n  'ɵɵstyleMapInterpolate3': ɵɵstyleMapInterpolate3,\n  'ɵɵstyleMapInterpolate4': ɵɵstyleMapInterpolate4,\n  'ɵɵstyleMapInterpolate5': ɵɵstyleMapInterpolate5,\n  'ɵɵstyleMapInterpolate6': ɵɵstyleMapInterpolate6,\n  'ɵɵstyleMapInterpolate7': ɵɵstyleMapInterpolate7,\n  'ɵɵstyleMapInterpolate8': ɵɵstyleMapInterpolate8,\n  'ɵɵstyleMapInterpolateV': ɵɵstyleMapInterpolateV,\n  'ɵɵstyleProp': ɵɵstyleProp,\n  'ɵɵstylePropInterpolate1': ɵɵstylePropInterpolate1,\n  'ɵɵstylePropInterpolate2': ɵɵstylePropInterpolate2,\n  'ɵɵstylePropInterpolate3': ɵɵstylePropInterpolate3,\n  'ɵɵstylePropInterpolate4': ɵɵstylePropInterpolate4,\n  'ɵɵstylePropInterpolate5': ɵɵstylePropInterpolate5,\n  'ɵɵstylePropInterpolate6': ɵɵstylePropInterpolate6,\n  'ɵɵstylePropInterpolate7': ɵɵstylePropInterpolate7,\n  'ɵɵstylePropInterpolate8': ɵɵstylePropInterpolate8,\n  'ɵɵstylePropInterpolateV': ɵɵstylePropInterpolateV,\n  'ɵɵclassProp': ɵɵclassProp,\n  'ɵɵadvance': ɵɵadvance,\n  'ɵɵtemplate': ɵɵtemplate,\n  'ɵɵconditional': ɵɵconditional,\n  'ɵɵdefer': ɵɵdefer,\n  'ɵɵdeferWhen': ɵɵdeferWhen,\n  'ɵɵdeferOnIdle': ɵɵdeferOnIdle,\n  'ɵɵdeferOnImmediate': ɵɵdeferOnImmediate,\n  'ɵɵdeferOnTimer': ɵɵdeferOnTimer,\n  'ɵɵdeferOnHover': ɵɵdeferOnHover,\n  'ɵɵdeferOnInteraction': ɵɵdeferOnInteraction,\n  'ɵɵdeferOnViewport': ɵɵdeferOnViewport,\n  'ɵɵdeferPrefetchWhen': ɵɵdeferPrefetchWhen,\n  'ɵɵdeferPrefetchOnIdle': ɵɵdeferPrefetchOnIdle,\n  'ɵɵdeferPrefetchOnImmediate': ɵɵdeferPrefetchOnImmediate,\n  'ɵɵdeferPrefetchOnTimer': ɵɵdeferPrefetchOnTimer,\n  'ɵɵdeferPrefetchOnHover': ɵɵdeferPrefetchOnHover,\n  'ɵɵdeferPrefetchOnInteraction': ɵɵdeferPrefetchOnInteraction,\n  'ɵɵdeferPrefetchOnViewport': ɵɵdeferPrefetchOnViewport,\n  'ɵɵdeferHydrateWhen': ɵɵdeferHydrateWhen,\n  'ɵɵdeferHydrateNever': ɵɵdeferHydrateNever,\n  'ɵɵdeferHydrateOnIdle': ɵɵdeferHydrateOnIdle,\n  'ɵɵdeferHydrateOnImmediate': ɵɵdeferHydrateOnImmediate,\n  'ɵɵdeferHydrateOnTimer': ɵɵdeferHydrateOnTimer,\n  'ɵɵdeferHydrateOnHover': ɵɵdeferHydrateOnHover,\n  'ɵɵdeferHydrateOnInteraction': ɵɵdeferHydrateOnInteraction,\n  'ɵɵdeferHydrateOnViewport': ɵɵdeferHydrateOnViewport,\n  'ɵɵdeferEnableTimerScheduling': ɵɵdeferEnableTimerScheduling,\n  'ɵɵrepeater': ɵɵrepeater,\n  'ɵɵrepeaterCreate': ɵɵrepeaterCreate,\n  'ɵɵrepeaterTrackByIndex': ɵɵrepeaterTrackByIndex,\n  'ɵɵrepeaterTrackByIdentity': ɵɵrepeaterTrackByIdentity,\n  'ɵɵcomponentInstance': ɵɵcomponentInstance,\n  'ɵɵtext': ɵɵtext,\n  'ɵɵtextInterpolate': ɵɵtextInterpolate,\n  'ɵɵtextInterpolate1': ɵɵtextInterpolate1,\n  'ɵɵtextInterpolate2': ɵɵtextInterpolate2,\n  'ɵɵtextInterpolate3': ɵɵtextInterpolate3,\n  'ɵɵtextInterpolate4': ɵɵtextInterpolate4,\n  'ɵɵtextInterpolate5': ɵɵtextInterpolate5,\n  'ɵɵtextInterpolate6': ɵɵtextInterpolate6,\n  'ɵɵtextInterpolate7': ɵɵtextInterpolate7,\n  'ɵɵtextInterpolate8': ɵɵtextInterpolate8,\n  'ɵɵtextInterpolateV': ɵɵtextInterpolateV,\n  'ɵɵi18n': ɵɵi18n,\n  'ɵɵi18nAttributes': ɵɵi18nAttributes,\n  'ɵɵi18nExp': ɵɵi18nExp,\n  'ɵɵi18nStart': ɵɵi18nStart,\n  'ɵɵi18nEnd': ɵɵi18nEnd,\n  'ɵɵi18nApply': ɵɵi18nApply,\n  'ɵɵi18nPostprocess': ɵɵi18nPostprocess,\n  'ɵɵresolveWindow': ɵɵresolveWindow,\n  'ɵɵresolveDocument': ɵɵresolveDocument,\n  'ɵɵresolveBody': ɵɵresolveBody,\n  'ɵɵsetComponentScope': ɵɵsetComponentScope,\n  'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,\n  'ɵɵregisterNgModuleType': registerNgModuleType,\n  'ɵɵgetComponentDepsFactory': ɵɵgetComponentDepsFactory,\n  'ɵsetClassDebugInfo': ɵsetClassDebugInfo,\n  'ɵɵdeclareLet': ɵɵdeclareLet,\n  'ɵɵstoreLet': ɵɵstoreLet,\n  'ɵɵreadContextLet': ɵɵreadContextLet,\n  'ɵɵsanitizeHtml': ɵɵsanitizeHtml,\n  'ɵɵsanitizeStyle': ɵɵsanitizeStyle,\n  'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,\n  'ɵɵsanitizeScript': ɵɵsanitizeScript,\n  'ɵɵsanitizeUrl': ɵɵsanitizeUrl,\n  'ɵɵsanitizeUrlOrResourceUrl': ɵɵsanitizeUrlOrResourceUrl,\n  'ɵɵtrustConstantHtml': ɵɵtrustConstantHtml,\n  'ɵɵtrustConstantResourceUrl': ɵɵtrustConstantResourceUrl,\n  'ɵɵvalidateIframeAttribute': ɵɵvalidateIframeAttribute,\n  'forwardRef': forwardRef,\n  'resolveForwardRef': resolveForwardRef,\n  'ɵɵtwoWayProperty': ɵɵtwoWayProperty,\n  'ɵɵtwoWayBindingSet': ɵɵtwoWayBindingSet,\n  'ɵɵtwoWayListener': ɵɵtwoWayListener,\n  'ɵɵreplaceMetadata': ɵɵreplaceMetadata\n}))();\nlet jitOptions = null;\nfunction setJitOptions(options) {\n  if (jitOptions !== null) {\n    if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {\n      ngDevMode && console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');\n      return;\n    }\n    if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {\n      ngDevMode && console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');\n      return;\n    }\n  }\n  jitOptions = options;\n}\nfunction getJitOptions() {\n  return jitOptions;\n}\nfunction resetJitOptions() {\n  jitOptions = null;\n}\nfunction patchModuleCompilation() {\n  // Does nothing, but exists as a target for patching.\n}\nconst moduleQueue = [];\n/**\n * Enqueues moduleDef to be checked later to see if scope can be set on its\n * component declarations.\n */\nfunction enqueueModuleForDelayedScoping(moduleType, ngModule) {\n  moduleQueue.push({\n    moduleType,\n    ngModule\n  });\n}\nlet flushingModuleQueue = false;\n/**\n * Loops over queued module definitions, if a given module definition has all of its\n * declarations resolved, it dequeues that module definition and sets the scope on\n * its declarations.\n */\nfunction flushModuleScopingQueueAsMuchAsPossible() {\n  if (!flushingModuleQueue) {\n    flushingModuleQueue = true;\n    try {\n      for (let i = moduleQueue.length - 1; i >= 0; i--) {\n        const {\n          moduleType,\n          ngModule\n        } = moduleQueue[i];\n        if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {\n          // dequeue\n          moduleQueue.splice(i, 1);\n          setScopeOnDeclaredComponents(moduleType, ngModule);\n        }\n      }\n    } finally {\n      flushingModuleQueue = false;\n    }\n  }\n}\n/**\n * Returns truthy if a declaration has resolved. If the declaration happens to be\n * an array of declarations, it will recurse to check each declaration in that array\n * (which may also be arrays).\n */\nfunction isResolvedDeclaration(declaration) {\n  if (Array.isArray(declaration)) {\n    return declaration.every(isResolvedDeclaration);\n  }\n  return !!resolveForwardRef(declaration);\n}\n/**\n * Compiles a module in JIT mode.\n *\n * This function automatically gets called when a class has a `@NgModule` decorator.\n */\nfunction compileNgModule(moduleType, ngModule = {}) {\n  patchModuleCompilation();\n  compileNgModuleDefs(moduleType, ngModule);\n  if (ngModule.id !== undefined) {\n    registerNgModuleType(moduleType, ngModule.id);\n  }\n  // Because we don't know if all declarations have resolved yet at the moment the\n  // NgModule decorator is executing, we're enqueueing the setting of module scope\n  // on its declarations to be run at a later time when all declarations for the module,\n  // including forward refs, have resolved.\n  enqueueModuleForDelayedScoping(moduleType, ngModule);\n}\n/**\n * Compiles and adds the `ɵmod`, `ɵfac` and `ɵinj` properties to the module class.\n *\n * It's possible to compile a module via this API which will allow duplicate declarations in its\n * root.\n */\nfunction compileNgModuleDefs(moduleType, ngModule, allowDuplicateDeclarationsInRoot = false) {\n  ngDevMode && assertDefined(moduleType, 'Required value moduleType');\n  ngDevMode && assertDefined(ngModule, 'Required value ngModule');\n  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n  let ngModuleDef = null;\n  Object.defineProperty(moduleType, NG_MOD_DEF, {\n    configurable: true,\n    get: () => {\n      if (ngModuleDef === null) {\n        if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {\n          // We need to assert this immediately, because allowing it to continue will cause it to\n          // go into an infinite loop before we've reached the point where we throw all the errors.\n          throw new Error(`'${stringifyForError(moduleType)}' module can't import itself`);\n        }\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngModuleDef = compiler.compileNgModule(angularCoreEnv, `ng:///${moduleType.name}/ɵmod.js`, {\n          type: moduleType,\n          bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(resolveForwardRef),\n          declarations: declarations.map(resolveForwardRef),\n          imports: flatten(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n          exports: flatten(ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef).map(expandModuleWithProviders),\n          schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,\n          id: ngModule.id || null\n        });\n        // Set `schemas` on ngModuleDef to an empty array in JIT mode to indicate that runtime\n        // should verify that there are no unknown elements in a template. In AOT mode, that check\n        // happens at compile time and `schemas` information is not present on Component and Module\n        // defs after compilation (so the check doesn't happen the second time at runtime).\n        if (!ngModuleDef.schemas) {\n          ngModuleDef.schemas = [];\n        }\n      }\n      return ngModuleDef;\n    }\n  });\n  let ngFactoryDef = null;\n  Object.defineProperty(moduleType, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${moduleType.name}/ɵfac.js`, {\n          name: moduleType.name,\n          type: moduleType,\n          deps: reflectDependencies(moduleType),\n          target: compiler.FactoryTarget.NgModule,\n          typeArgumentCount: 0\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n  let ngInjectorDef = null;\n  Object.defineProperty(moduleType, NG_INJ_DEF, {\n    get: () => {\n      if (ngInjectorDef === null) {\n        ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);\n        const meta = {\n          name: moduleType.name,\n          type: moduleType,\n          providers: ngModule.providers || EMPTY_ARRAY,\n          imports: [(ngModule.imports || EMPTY_ARRAY).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY).map(resolveForwardRef)]\n        };\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'NgModule',\n          type: moduleType\n        });\n        ngInjectorDef = compiler.compileInjector(angularCoreEnv, `ng:///${moduleType.name}/ɵinj.js`, meta);\n      }\n      return ngInjectorDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction generateStandaloneInDeclarationsError(type, location) {\n  const prefix = `Unexpected \"${stringifyForError(type)}\" found in the \"declarations\" array of the`;\n  const suffix = `\"${stringifyForError(type)}\" is marked as standalone and can't be declared ` + 'in any NgModule - did you intend to import it instead (by adding it to the \"imports\" array)?';\n  return `${prefix} ${location}, ${suffix}`;\n}\nfunction verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {\n  if (verifiedNgModule.get(moduleType)) return;\n  // skip verifications of standalone components, directives, and pipes\n  if (isStandalone(moduleType)) return;\n  verifiedNgModule.set(moduleType, true);\n  moduleType = resolveForwardRef(moduleType);\n  let ngModuleDef;\n  if (importingModule) {\n    ngModuleDef = getNgModuleDef(moduleType);\n    if (!ngModuleDef) {\n      throw new Error(`Unexpected value '${moduleType.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n  } else {\n    ngModuleDef = getNgModuleDef(moduleType, true);\n  }\n  const errors = [];\n  const declarations = maybeUnwrapFn(ngModuleDef.declarations);\n  const imports = maybeUnwrapFn(ngModuleDef.imports);\n  flatten(imports).map(unwrapModuleWithProvidersImports).forEach(modOrStandaloneCmpt => {\n    verifySemanticsOfNgModuleImport(modOrStandaloneCmpt, moduleType);\n    verifySemanticsOfNgModuleDef(modOrStandaloneCmpt, false, moduleType);\n  });\n  const exports = maybeUnwrapFn(ngModuleDef.exports);\n  declarations.forEach(verifyDeclarationsHaveDefinitions);\n  declarations.forEach(verifyDirectivesHaveSelector);\n  declarations.forEach(declarationType => verifyNotStandalone(declarationType, moduleType));\n  const combinedDeclarations = [...declarations.map(resolveForwardRef), ...flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)];\n  exports.forEach(verifyExportsAreDeclaredOrReExported);\n  declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));\n  const ngModule = getAnnotation(moduleType, 'NgModule');\n  if (ngModule) {\n    ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(mod => {\n      verifySemanticsOfNgModuleImport(mod, moduleType);\n      verifySemanticsOfNgModuleDef(mod, false, moduleType);\n    });\n    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);\n    ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);\n  }\n  // Throw Error if any errors were detected.\n  if (errors.length) {\n    throw new Error(errors.join('\\n'));\n  }\n  ////////////////////////////////////////////////////////////////////////////////////////////////\n  function verifyDeclarationsHaveDefinitions(type) {\n    type = resolveForwardRef(type);\n    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n    if (!def) {\n      errors.push(`Unexpected value '${stringifyForError(type)}' declared by the module '${stringifyForError(moduleType)}'. Please add a @Pipe/@Directive/@Component annotation.`);\n    }\n  }\n  function verifyDirectivesHaveSelector(type) {\n    type = resolveForwardRef(type);\n    const def = getDirectiveDef(type);\n    if (!getComponentDef(type) && def && def.selectors.length == 0) {\n      errors.push(`Directive ${stringifyForError(type)} has no selector, please add it!`);\n    }\n  }\n  function verifyNotStandalone(type, moduleType) {\n    type = resolveForwardRef(type);\n    const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef$1(type);\n    if (def?.standalone) {\n      const location = `\"${stringifyForError(moduleType)}\" NgModule`;\n      errors.push(generateStandaloneInDeclarationsError(type, location));\n    }\n  }\n  function verifyExportsAreDeclaredOrReExported(type) {\n    type = resolveForwardRef(type);\n    const kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' || getPipeDef$1(type) && 'pipe';\n    if (kind) {\n      // only checked if we are declared as Component, Directive, or Pipe\n      // Modules don't need to be declared or imported.\n      if (combinedDeclarations.lastIndexOf(type) === -1) {\n        // We are exporting something which we don't explicitly declare or import.\n        errors.push(`Can't export ${kind} ${stringifyForError(type)} from ${stringifyForError(moduleType)} as it was neither declared nor imported!`);\n      }\n    }\n  }\n  function verifyDeclarationIsUnique(type, suppressErrors) {\n    type = resolveForwardRef(type);\n    const existingModule = ownerNgModule.get(type);\n    if (existingModule && existingModule !== moduleType) {\n      if (!suppressErrors) {\n        const modules = [existingModule, moduleType].map(stringifyForError).sort();\n        errors.push(`Type ${stringifyForError(type)} is part of the declarations of 2 modules: ${modules[0]} and ${modules[1]}! ` + `Please consider moving ${stringifyForError(type)} to a higher module that imports ${modules[0]} and ${modules[1]}. ` + `You can also create a new NgModule that exports and includes ${stringifyForError(type)} then import that NgModule in ${modules[0]} and ${modules[1]}.`);\n      }\n    } else {\n      // Mark type as having owner.\n      ownerNgModule.set(type, moduleType);\n    }\n  }\n  function verifyComponentIsPartOfNgModule(type) {\n    type = resolveForwardRef(type);\n    const existingModule = ownerNgModule.get(type);\n    if (!existingModule && !isStandalone(type)) {\n      errors.push(`Component ${stringifyForError(type)} is not part of any NgModule or the module has not been imported into your module.`);\n    }\n  }\n  function verifyCorrectBootstrapType(type) {\n    type = resolveForwardRef(type);\n    if (!getComponentDef(type)) {\n      errors.push(`${stringifyForError(type)} cannot be used as an entry component.`);\n    }\n    if (isStandalone(type)) {\n      // Note: this error should be the same as the\n      // `NGMODULE_BOOTSTRAP_IS_STANDALONE` one in AOT compiler.\n      errors.push(`The \\`${stringifyForError(type)}\\` class is a standalone component, which can ` + `not be used in the \\`@NgModule.bootstrap\\` array. Use the \\`bootstrapApplication\\` ` + `function for bootstrap instead.`);\n    }\n  }\n  function verifySemanticsOfNgModuleImport(type, importingModule) {\n    type = resolveForwardRef(type);\n    const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n    if (directiveDef !== null && !directiveDef.standalone) {\n      throw new Error(`Unexpected directive '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n    const pipeDef = getPipeDef$1(type);\n    if (pipeDef !== null && !pipeDef.standalone) {\n      throw new Error(`Unexpected pipe '${type.name}' imported by the module '${importingModule.name}'. Please add an @NgModule annotation.`);\n    }\n  }\n}\nfunction unwrapModuleWithProvidersImports(typeOrWithProviders) {\n  typeOrWithProviders = resolveForwardRef(typeOrWithProviders);\n  return typeOrWithProviders.ngModule || typeOrWithProviders;\n}\nfunction getAnnotation(type, name) {\n  let annotation = null;\n  collect(type.__annotations__);\n  collect(type.decorators);\n  return annotation;\n  function collect(annotations) {\n    if (annotations) {\n      annotations.forEach(readAnnotation);\n    }\n  }\n  function readAnnotation(decorator) {\n    if (!annotation) {\n      const proto = Object.getPrototypeOf(decorator);\n      if (proto.ngMetadataName == name) {\n        annotation = decorator;\n      } else if (decorator.type) {\n        const proto = Object.getPrototypeOf(decorator.type);\n        if (proto.ngMetadataName == name) {\n          annotation = decorator.args[0];\n        }\n      }\n    }\n  }\n}\n/**\n * Keep track of compiled components. This is needed because in tests we often want to compile the\n * same component with more than one NgModule. This would cause an error unless we reset which\n * NgModule the component belongs to. We keep the list of compiled components here so that the\n * TestBed can reset it later.\n */\nlet ownerNgModule = new WeakMap();\nlet verifiedNgModule = new WeakMap();\nfunction resetCompiledComponents() {\n  ownerNgModule = new WeakMap();\n  verifiedNgModule = new WeakMap();\n  moduleQueue.length = 0;\n  GENERATED_COMP_IDS.clear();\n}\n/**\n * Computes the combined declarations of explicit declarations, as well as declarations inherited by\n * traversing the exports of imported modules.\n * @param type\n */\nfunction computeCombinedExports(type) {\n  type = resolveForwardRef(type);\n  const ngModuleDef = getNgModuleDef(type);\n  // a standalone component, directive or pipe\n  if (ngModuleDef === null) {\n    return [type];\n  }\n  return flatten(maybeUnwrapFn(ngModuleDef.exports).map(type => {\n    const ngModuleDef = getNgModuleDef(type);\n    if (ngModuleDef) {\n      verifySemanticsOfNgModuleDef(type, false);\n      return computeCombinedExports(type);\n    } else {\n      return type;\n    }\n  }));\n}\n/**\n * Some declared components may be compiled asynchronously, and thus may not have their\n * ɵcmp set yet. If this is the case, then a reference to the module is written into\n * the `ngSelectorScope` property of the declared type.\n */\nfunction setScopeOnDeclaredComponents(moduleType, ngModule) {\n  const declarations = flatten(ngModule.declarations || EMPTY_ARRAY);\n  const transitiveScopes = transitiveScopesFor(moduleType);\n  declarations.forEach(declaration => {\n    declaration = resolveForwardRef(declaration);\n    if (declaration.hasOwnProperty(NG_COMP_DEF)) {\n      // A `ɵcmp` field exists - go ahead and patch the component directly.\n      const component = declaration;\n      const componentDef = getComponentDef(component);\n      patchComponentDefWithScope(componentDef, transitiveScopes);\n    } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {\n      // Set `ngSelectorScope` for future reference when the component compilation finishes.\n      declaration.ngSelectorScope = moduleType;\n    }\n  });\n}\n/**\n * Patch the definition of a component with directives and pipes from the compilation scope of\n * a given module.\n */\nfunction patchComponentDefWithScope(componentDef, transitiveScopes) {\n  componentDef.directiveDefs = () => Array.from(transitiveScopes.compilation.directives).map(dir => dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir)).filter(def => !!def);\n  componentDef.pipeDefs = () => Array.from(transitiveScopes.compilation.pipes).map(pipe => getPipeDef$1(pipe));\n  componentDef.schemas = transitiveScopes.schemas;\n  // Since we avoid Components/Directives/Pipes recompiling in case there are no overrides, we\n  // may face a problem where previously compiled defs available to a given Component/Directive\n  // are cached in TView and may become stale (in case any of these defs gets recompiled). In\n  // order to avoid this problem, we force fresh TView to be created.\n  componentDef.tView = null;\n}\n/**\n * Compute the pair of transitive scopes (compilation scope and exported scope) for a given type\n * (either a NgModule or a standalone component / directive / pipe).\n */\nfunction transitiveScopesFor(type) {\n  if (isNgModule(type)) {\n    if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      const scope = depsTracker.getNgModuleScope(type);\n      const def = getNgModuleDef(type, true);\n      return {\n        schemas: def.schemas || null,\n        ...scope\n      };\n    } else {\n      return transitiveScopesForNgModule(type);\n    }\n  } else if (isStandalone(type)) {\n    const directiveDef = getComponentDef(type) || getDirectiveDef(type);\n    if (directiveDef !== null) {\n      return {\n        schemas: null,\n        compilation: {\n          directives: new Set(),\n          pipes: new Set()\n        },\n        exported: {\n          directives: new Set([type]),\n          pipes: new Set()\n        }\n      };\n    }\n    const pipeDef = getPipeDef$1(type);\n    if (pipeDef !== null) {\n      return {\n        schemas: null,\n        compilation: {\n          directives: new Set(),\n          pipes: new Set()\n        },\n        exported: {\n          directives: new Set(),\n          pipes: new Set([type])\n        }\n      };\n    }\n  }\n  // TODO: change the error message to be more user-facing and take standalone into account\n  throw new Error(`${type.name} does not have a module def (ɵmod property)`);\n}\n/**\n * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.\n *\n * This operation is memoized and the result is cached on the module's definition. This function can\n * be called on modules with components that have not fully compiled yet, but the result should not\n * be used until they have.\n *\n * @param moduleType module that transitive scope should be calculated for.\n */\nfunction transitiveScopesForNgModule(moduleType) {\n  const def = getNgModuleDef(moduleType, true);\n  if (def.transitiveCompileScopes !== null) {\n    return def.transitiveCompileScopes;\n  }\n  const scopes = {\n    schemas: def.schemas || null,\n    compilation: {\n      directives: new Set(),\n      pipes: new Set()\n    },\n    exported: {\n      directives: new Set(),\n      pipes: new Set()\n    }\n  };\n  maybeUnwrapFn(def.imports).forEach(imported => {\n    // When this module imports another, the imported module's exported directives and pipes are\n    // added to the compilation scope of this module.\n    const importedScope = transitiveScopesFor(imported);\n    importedScope.exported.directives.forEach(entry => scopes.compilation.directives.add(entry));\n    importedScope.exported.pipes.forEach(entry => scopes.compilation.pipes.add(entry));\n  });\n  maybeUnwrapFn(def.declarations).forEach(declared => {\n    const declaredWithDefs = declared;\n    if (getPipeDef$1(declaredWithDefs)) {\n      scopes.compilation.pipes.add(declared);\n    } else {\n      // Either declared has a ɵcmp or ɵdir, or it's a component which hasn't\n      // had its template compiled yet. In either case, it gets added to the compilation's\n      // directives.\n      scopes.compilation.directives.add(declared);\n    }\n  });\n  maybeUnwrapFn(def.exports).forEach(exported => {\n    const exportedType = exported;\n    // Either the type is a module, a pipe, or a component/directive (which may not have a\n    // ɵcmp as it might be compiled asynchronously).\n    if (isNgModule(exportedType)) {\n      // When this module exports another, the exported module's exported directives and pipes are\n      // added to both the compilation and exported scopes of this module.\n      const exportedScope = transitiveScopesFor(exportedType);\n      exportedScope.exported.directives.forEach(entry => {\n        scopes.compilation.directives.add(entry);\n        scopes.exported.directives.add(entry);\n      });\n      exportedScope.exported.pipes.forEach(entry => {\n        scopes.compilation.pipes.add(entry);\n        scopes.exported.pipes.add(entry);\n      });\n    } else if (getPipeDef$1(exportedType)) {\n      scopes.exported.pipes.add(exportedType);\n    } else {\n      scopes.exported.directives.add(exportedType);\n    }\n  });\n  def.transitiveCompileScopes = scopes;\n  return scopes;\n}\nfunction expandModuleWithProviders(value) {\n  if (isModuleWithProviders(value)) {\n    return value.ngModule;\n  }\n  return value;\n}\n\n/**\n * Keep track of the compilation depth to avoid reentrancy issues during JIT compilation. This\n * matters in the following scenario:\n *\n * Consider a component 'A' that extends component 'B', both declared in module 'M'. During\n * the compilation of 'A' the definition of 'B' is requested to capture the inheritance chain,\n * potentially triggering compilation of 'B'. If this nested compilation were to trigger\n * `flushModuleScopingQueueAsMuchAsPossible` it may happen that module 'M' is still pending in the\n * queue, resulting in 'A' and 'B' to be patched with the NgModule scope. As the compilation of\n * 'A' is still in progress, this would introduce a circular dependency on its compilation. To avoid\n * this issue, the module scope queue is only flushed for compilations at the depth 0, to ensure\n * all compilations have finished.\n */\nlet compilationDepth = 0;\n/**\n * Compile an Angular component according to its decorator metadata, and patch the resulting\n * component def (ɵcmp) onto the component type.\n *\n * Compilation may be asynchronous (due to the need to resolve URLs for the component template or\n * other resources, for example). In the event that compilation is not immediate, `compileComponent`\n * will enqueue resource resolution into a global queue and will fail to return the `ɵcmp`\n * until the global queue has been resolved with a call to `resolveComponentResources`.\n */\nfunction compileComponent(type, metadata) {\n  // Initialize ngDevMode. This must be the first statement in compileComponent.\n  // See the `initNgDevMode` docstring for more information.\n  (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n  let ngComponentDef = null;\n  // Metadata may have resources which need to be resolved.\n  maybeQueueResolutionOfComponentResources(type, metadata);\n  // Note that we're using the same function as `Directive`, because that's only subset of metadata\n  // that we need to create the ngFactoryDef. We're avoiding using the component metadata\n  // because we'd have to resolve the asynchronous templates.\n  addDirectiveFactoryDef(type, metadata);\n  Object.defineProperty(type, NG_COMP_DEF, {\n    get: () => {\n      if (ngComponentDef === null) {\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'component',\n          type: type\n        });\n        if (componentNeedsResolution(metadata)) {\n          const error = [`Component '${type.name}' is not resolved:`];\n          if (metadata.templateUrl) {\n            error.push(` - templateUrl: ${metadata.templateUrl}`);\n          }\n          if (metadata.styleUrls && metadata.styleUrls.length) {\n            error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);\n          }\n          if (metadata.styleUrl) {\n            error.push(` - styleUrl: ${metadata.styleUrl}`);\n          }\n          error.push(`Did you run and wait for 'resolveComponentResources()'?`);\n          throw new Error(error.join('\\n'));\n        }\n        // This const was called `jitOptions` previously but had to be renamed to `options` because\n        // of a bug with Terser that caused optimized JIT builds to throw a `ReferenceError`.\n        // This bug was investigated in https://github.com/angular/angular-cli/issues/17264.\n        // We should not rename it back until https://github.com/terser/terser/issues/615 is fixed.\n        const options = getJitOptions();\n        let preserveWhitespaces = metadata.preserveWhitespaces;\n        if (preserveWhitespaces === undefined) {\n          if (options !== null && options.preserveWhitespaces !== undefined) {\n            preserveWhitespaces = options.preserveWhitespaces;\n          } else {\n            preserveWhitespaces = false;\n          }\n        }\n        let encapsulation = metadata.encapsulation;\n        if (encapsulation === undefined) {\n          if (options !== null && options.defaultEncapsulation !== undefined) {\n            encapsulation = options.defaultEncapsulation;\n          } else {\n            encapsulation = ViewEncapsulation.Emulated;\n          }\n        }\n        const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;\n        const meta = {\n          ...directiveMetadata(type, metadata),\n          typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl),\n          template: metadata.template || '',\n          preserveWhitespaces,\n          styles: typeof metadata.styles === 'string' ? [metadata.styles] : metadata.styles || EMPTY_ARRAY,\n          animations: metadata.animations,\n          // JIT components are always compiled against an empty set of `declarations`. Instead, the\n          // `directiveDefs` and `pipeDefs` are updated at a later point:\n          //  * for NgModule-based components, they're set when the NgModule which declares the\n          //    component resolves in the module scoping queue\n          //  * for standalone components, they're set just below, after `compileComponent`.\n          declarations: [],\n          changeDetection: metadata.changeDetection,\n          encapsulation,\n          interpolation: metadata.interpolation,\n          viewProviders: metadata.viewProviders || null\n        };\n        compilationDepth++;\n        try {\n          if (meta.usesInheritance) {\n            addDirectiveDefToUndecoratedParents(type);\n          }\n          ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);\n          if (meta.isStandalone) {\n            // Patch the component definition for standalone components with `directiveDefs` and\n            // `pipeDefs` functions which lazily compute the directives/pipes available in the\n            // standalone component. Also set `dependencies` to the lazily resolved list of imports.\n            const imports = flatten(metadata.imports || EMPTY_ARRAY);\n            const {\n              directiveDefs,\n              pipeDefs\n            } = getStandaloneDefFunctions(type, imports);\n            ngComponentDef.directiveDefs = directiveDefs;\n            ngComponentDef.pipeDefs = pipeDefs;\n            ngComponentDef.dependencies = () => imports.map(resolveForwardRef);\n          }\n        } finally {\n          // Ensure that the compilation depth is decremented even when the compilation failed.\n          compilationDepth--;\n        }\n        if (compilationDepth === 0) {\n          // When NgModule decorator executed, we enqueued the module definition such that\n          // it would only dequeue and add itself as module scope to all of its declarations,\n          // but only if  if all of its declarations had resolved. This call runs the check\n          // to see if any modules that are in the queue can be dequeued and add scope to\n          // their declarations.\n          flushModuleScopingQueueAsMuchAsPossible();\n        }\n        // If component compilation is async, then the @NgModule annotation which declares the\n        // component may execute and set an ngSelectorScope property on the component type. This\n        // allows the component to patch itself with directiveDefs from the module after it\n        // finishes compiling.\n        if (hasSelectorScope(type)) {\n          const scopes = transitiveScopesFor(type.ngSelectorScope);\n          patchComponentDefWithScope(ngComponentDef, scopes);\n        }\n        if (metadata.schemas) {\n          if (meta.isStandalone) {\n            ngComponentDef.schemas = metadata.schemas;\n          } else {\n            throw new Error(`The 'schemas' was specified for the ${stringifyForError(type)} but is only valid on a component that is standalone.`);\n          }\n        } else if (meta.isStandalone) {\n          ngComponentDef.schemas = [];\n        }\n      }\n      return ngComponentDef;\n    },\n    set: def => {\n      ngComponentDef = def;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\n/**\n * Build memoized `directiveDefs` and `pipeDefs` functions for the component definition of a\n * standalone component, which process `imports` and filter out directives and pipes. The use of\n * memoized functions here allows for the delayed resolution of any `forwardRef`s present in the\n * component's `imports`.\n */\nfunction getStandaloneDefFunctions(type, imports) {\n  let cachedDirectiveDefs = null;\n  let cachedPipeDefs = null;\n  const directiveDefs = () => {\n    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      if (cachedDirectiveDefs === null) {\n        // Standalone components are always able to self-reference, so include the component's own\n        // definition in its `directiveDefs`.\n        cachedDirectiveDefs = [getComponentDef(type)];\n        const seen = new Set([type]);\n        for (const rawDep of imports) {\n          ngDevMode && verifyStandaloneImport(rawDep, type);\n          const dep = resolveForwardRef(rawDep);\n          if (seen.has(dep)) {\n            continue;\n          }\n          seen.add(dep);\n          if (!!getNgModuleDef(dep)) {\n            const scope = transitiveScopesFor(dep);\n            for (const dir of scope.exported.directives) {\n              const def = getComponentDef(dir) || getDirectiveDef(dir);\n              if (def && !seen.has(dir)) {\n                seen.add(dir);\n                cachedDirectiveDefs.push(def);\n              }\n            }\n          } else {\n            const def = getComponentDef(dep) || getDirectiveDef(dep);\n            if (def) {\n              cachedDirectiveDefs.push(def);\n            }\n          }\n        }\n      }\n      return cachedDirectiveDefs;\n    } else {\n      if (ngDevMode) {\n        for (const rawDep of imports) {\n          verifyStandaloneImport(rawDep, type);\n        }\n      }\n      if (!isComponent(type)) {\n        return [];\n      }\n      const scope = depsTracker.getStandaloneComponentScope(type, imports);\n      return [...scope.compilation.directives].map(p => getComponentDef(p) || getDirectiveDef(p)).filter(d => d !== null);\n    }\n  };\n  const pipeDefs = () => {\n    if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) {\n      if (cachedPipeDefs === null) {\n        cachedPipeDefs = [];\n        const seen = new Set();\n        for (const rawDep of imports) {\n          const dep = resolveForwardRef(rawDep);\n          if (seen.has(dep)) {\n            continue;\n          }\n          seen.add(dep);\n          if (!!getNgModuleDef(dep)) {\n            const scope = transitiveScopesFor(dep);\n            for (const pipe of scope.exported.pipes) {\n              const def = getPipeDef$1(pipe);\n              if (def && !seen.has(pipe)) {\n                seen.add(pipe);\n                cachedPipeDefs.push(def);\n              }\n            }\n          } else {\n            const def = getPipeDef$1(dep);\n            if (def) {\n              cachedPipeDefs.push(def);\n            }\n          }\n        }\n      }\n      return cachedPipeDefs;\n    } else {\n      if (ngDevMode) {\n        for (const rawDep of imports) {\n          verifyStandaloneImport(rawDep, type);\n        }\n      }\n      if (!isComponent(type)) {\n        return [];\n      }\n      const scope = depsTracker.getStandaloneComponentScope(type, imports);\n      return [...scope.compilation.pipes].map(p => getPipeDef$1(p)).filter(d => d !== null);\n    }\n  };\n  return {\n    directiveDefs,\n    pipeDefs\n  };\n}\nfunction hasSelectorScope(component) {\n  return component.ngSelectorScope !== undefined;\n}\n/**\n * Compile an Angular directive according to its decorator metadata, and patch the resulting\n * directive def onto the component type.\n *\n * In the event that compilation is not immediate, `compileDirective` will return a `Promise` which\n * will resolve when compilation completes and the directive becomes usable.\n */\nfunction compileDirective(type, directive) {\n  let ngDirectiveDef = null;\n  addDirectiveFactoryDef(type, directive || {});\n  Object.defineProperty(type, NG_DIR_DEF, {\n    get: () => {\n      if (ngDirectiveDef === null) {\n        // `directive` can be null in the case of abstract directives as a base class\n        // that use `@Directive()` with no selector. In that case, pass empty object to the\n        // `directiveMetadata` function instead of null.\n        const meta = getDirectiveMetadata(type, directive || {});\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'directive',\n          type\n        });\n        ngDirectiveDef = compiler.compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);\n      }\n      return ngDirectiveDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction getDirectiveMetadata(type, metadata) {\n  const name = type && type.name;\n  const sourceMapUrl = `ng:///${name}/ɵdir.js`;\n  const compiler = getCompilerFacade({\n    usage: 0 /* JitCompilerUsage.Decorator */,\n    kind: 'directive',\n    type\n  });\n  const facade = directiveMetadata(type, metadata);\n  facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);\n  if (facade.usesInheritance) {\n    addDirectiveDefToUndecoratedParents(type);\n  }\n  return {\n    metadata: facade,\n    sourceMapUrl\n  };\n}\nfunction addDirectiveFactoryDef(type, metadata) {\n  let ngFactoryDef = null;\n  Object.defineProperty(type, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const meta = getDirectiveMetadata(type, metadata);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'directive',\n          type\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${type.name}/ɵfac.js`, {\n          name: meta.metadata.name,\n          type: meta.metadata.type,\n          typeArgumentCount: 0,\n          deps: reflectDependencies(type),\n          target: compiler.FactoryTarget.Directive\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction extendsDirectlyFromObject(type) {\n  return Object.getPrototypeOf(type.prototype) === Object.prototype;\n}\n/**\n * Extract the `R3DirectiveMetadata` for a particular directive (either a `Directive` or a\n * `Component`).\n */\nfunction directiveMetadata(type, metadata) {\n  // Reflect inputs and outputs.\n  const reflect = getReflect();\n  const propMetadata = reflect.ownPropMetadata(type);\n  return {\n    name: type.name,\n    type: type,\n    selector: metadata.selector !== undefined ? metadata.selector : null,\n    host: metadata.host || EMPTY_OBJ,\n    propMetadata: propMetadata,\n    inputs: metadata.inputs || EMPTY_ARRAY,\n    outputs: metadata.outputs || EMPTY_ARRAY,\n    queries: extractQueriesMetadata(type, propMetadata, isContentQuery),\n    lifecycle: {\n      usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges')\n    },\n    typeSourceSpan: null,\n    usesInheritance: !extendsDirectlyFromObject(type),\n    exportAs: extractExportAs(metadata.exportAs),\n    providers: metadata.providers || null,\n    viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery),\n    isStandalone: metadata.standalone === undefined ? true : !!metadata.standalone,\n    isSignal: !!metadata.signals,\n    hostDirectives: metadata.hostDirectives?.map(directive => typeof directive === 'function' ? {\n      directive\n    } : directive) || null\n  };\n}\n/**\n * Adds a directive definition to all parent classes of a type that don't have an Angular decorator.\n */\nfunction addDirectiveDefToUndecoratedParents(type) {\n  const objPrototype = Object.prototype;\n  let parent = Object.getPrototypeOf(type.prototype).constructor;\n  // Go up the prototype until we hit `Object`.\n  while (parent && parent !== objPrototype) {\n    // Since inheritance works if the class was annotated already, we only need to add\n    // the def if there are no annotations and the def hasn't been created already.\n    if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {\n      compileDirective(parent, null);\n    }\n    parent = Object.getPrototypeOf(parent);\n  }\n}\nfunction convertToR3QueryPredicate(selector) {\n  return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);\n}\nfunction convertToR3QueryMetadata(propertyName, ann) {\n  return {\n    propertyName: propertyName,\n    predicate: convertToR3QueryPredicate(ann.selector),\n    descendants: ann.descendants,\n    first: ann.first,\n    read: ann.read ? ann.read : null,\n    static: !!ann.static,\n    emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,\n    isSignal: !!ann.isSignal\n  };\n}\nfunction extractQueriesMetadata(type, propMetadata, isQueryAnn) {\n  const queriesMeta = [];\n  for (const field in propMetadata) {\n    if (propMetadata.hasOwnProperty(field)) {\n      const annotations = propMetadata[field];\n      annotations.forEach(ann => {\n        if (isQueryAnn(ann)) {\n          if (!ann.selector) {\n            throw new Error(`Can't construct a query for the property \"${field}\" of ` + `\"${stringifyForError(type)}\" since the query selector wasn't defined.`);\n          }\n          if (annotations.some(isInputAnnotation)) {\n            throw new Error(`Cannot combine @Input decorators with query decorators`);\n          }\n          queriesMeta.push(convertToR3QueryMetadata(field, ann));\n        }\n      });\n    }\n  }\n  return queriesMeta;\n}\nfunction extractExportAs(exportAs) {\n  return exportAs === undefined ? null : splitByComma(exportAs);\n}\nfunction isContentQuery(value) {\n  const name = value.ngMetadataName;\n  return name === 'ContentChild' || name === 'ContentChildren';\n}\nfunction isViewQuery(value) {\n  const name = value.ngMetadataName;\n  return name === 'ViewChild' || name === 'ViewChildren';\n}\nfunction isInputAnnotation(value) {\n  return value.ngMetadataName === 'Input';\n}\nfunction splitByComma(value) {\n  return value.split(',').map(piece => piece.trim());\n}\nconst LIFECYCLE_HOOKS = ['ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked', 'ngAfterContentInit', 'ngAfterContentChecked'];\nfunction shouldAddAbstractDirective(type) {\n  const reflect = getReflect();\n  if (LIFECYCLE_HOOKS.some(hookName => reflect.hasLifecycleHook(type, hookName))) {\n    return true;\n  }\n  const propMetadata = reflect.propMetadata(type);\n  for (const field in propMetadata) {\n    const annotations = propMetadata[field];\n    for (let i = 0; i < annotations.length; i++) {\n      const current = annotations[i];\n      const metadataName = current.ngMetadataName;\n      if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === 'Output' || metadataName === 'HostBinding' || metadataName === 'HostListener') {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction compilePipe(type, meta) {\n  let ngPipeDef = null;\n  let ngFactoryDef = null;\n  Object.defineProperty(type, NG_FACTORY_DEF, {\n    get: () => {\n      if (ngFactoryDef === null) {\n        const metadata = getPipeMetadata(type, meta);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'pipe',\n          type: metadata.type\n        });\n        ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, {\n          name: metadata.name,\n          type: metadata.type,\n          typeArgumentCount: 0,\n          deps: reflectDependencies(type),\n          target: compiler.FactoryTarget.Pipe\n        });\n      }\n      return ngFactoryDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n  Object.defineProperty(type, NG_PIPE_DEF, {\n    get: () => {\n      if (ngPipeDef === null) {\n        const metadata = getPipeMetadata(type, meta);\n        const compiler = getCompilerFacade({\n          usage: 0 /* JitCompilerUsage.Decorator */,\n          kind: 'pipe',\n          type: metadata.type\n        });\n        ngPipeDef = compiler.compilePipe(angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata);\n      }\n      return ngPipeDef;\n    },\n    // Make the property configurable in dev mode to allow overriding in tests\n    configurable: !!ngDevMode\n  });\n}\nfunction getPipeMetadata(type, meta) {\n  return {\n    type: type,\n    name: type.name,\n    pipeName: meta.name,\n    pure: meta.pure !== undefined ? meta.pure : true,\n    isStandalone: meta.standalone === undefined ? true : !!meta.standalone\n  };\n}\n\n/**\n * Type of the Directive metadata.\n *\n * @publicApi\n */\nconst Directive = makeDecorator('Directive', (dir = {}) => dir, undefined, undefined, (type, meta) => compileDirective(type, meta));\n/**\n * Component decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Component = makeDecorator('Component', (c = {}) => ({\n  changeDetection: ChangeDetectionStrategy.Default,\n  ...c\n}), Directive, undefined, (type, meta) => compileComponent(type, meta));\n/**\n * @Annotation\n * @publicApi\n */\nconst Pipe = makeDecorator('Pipe', p => ({\n  pure: true,\n  ...p\n}), undefined, undefined, (type, meta) => compilePipe(type, meta));\n/**\n * @Annotation\n * @publicApi\n */\nconst Input = makePropDecorator('Input', arg => {\n  if (!arg) {\n    return {};\n  }\n  return typeof arg === 'string' ? {\n    alias: arg\n  } : arg;\n});\n/**\n * @Annotation\n * @publicApi\n */\nconst Output = makePropDecorator('Output', alias => ({\n  alias\n}));\n/**\n * @Annotation\n * @publicApi\n */\nconst HostBinding = makePropDecorator('HostBinding', hostPropertyName => ({\n  hostPropertyName\n}));\n/**\n * @Annotation\n * @publicApi\n */\nconst HostListener = makePropDecorator('HostListener', (eventName, args) => ({\n  eventName,\n  args\n}));\n\n/**\n * @Annotation\n */\nconst NgModule = makeDecorator('NgModule', ngModule => ngModule, undefined, undefined,\n/**\n * Decorator that marks the following class as an NgModule, and supplies\n * configuration metadata for it.\n *\n * * The `declarations` option configures the compiler\n * with information about what belongs to the NgModule.\n * * The `providers` options configures the NgModule's injector to provide\n * dependencies the NgModule members.\n * * The `imports` and `exports` options bring in members from other modules, and make\n * this module's members available to others.\n */\n(type, meta) => compileNgModule(type, meta));\n\n/**\n * This indirection is needed to free up Component, etc symbols in the public API\n * to be used by the decorator versions of these annotations.\n */\n\n/**\n * @description Represents the version of Angular\n *\n * @publicApi\n */\nclass Version {\n  full;\n  major;\n  minor;\n  patch;\n  constructor(full) {\n    this.full = full;\n    const parts = full.split('.');\n    this.major = parts[0];\n    this.minor = parts[1];\n    this.patch = parts.slice(2).join('.');\n  }\n}\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * Combination of NgModuleFactory and ComponentFactories.\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass ModuleWithComponentFactories {\n  ngModuleFactory;\n  componentFactories;\n  constructor(ngModuleFactory, componentFactories) {\n    this.ngModuleFactory = ngModuleFactory;\n    this.componentFactories = componentFactories;\n  }\n}\n/**\n * Low-level service for running the angular compiler during runtime\n * to create {@link ComponentFactory}s, which\n * can later be used to create and render a Component instance.\n *\n * Each `@NgModule` provides an own `Compiler` to its injector,\n * that will use the directives/pipes of the ng module for compilation\n * of components.\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass Compiler {\n  /**\n   * Compiles the given NgModule and all of its components. All templates of the components\n   * have to be inlined.\n   */\n  compileModuleSync(moduleType) {\n    return new NgModuleFactory(moduleType);\n  }\n  /**\n   * Compiles the given NgModule and all of its components\n   */\n  compileModuleAsync(moduleType) {\n    return Promise.resolve(this.compileModuleSync(moduleType));\n  }\n  /**\n   * Same as {@link Compiler#compileModuleSync compileModuleSync} but also creates ComponentFactories for all components.\n   */\n  compileModuleAndAllComponentsSync(moduleType) {\n    const ngModuleFactory = this.compileModuleSync(moduleType);\n    const moduleDef = getNgModuleDef(moduleType);\n    const componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce((factories, declaration) => {\n      const componentDef = getComponentDef(declaration);\n      componentDef && factories.push(new ComponentFactory(componentDef));\n      return factories;\n    }, []);\n    return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n  }\n  /**\n   * Same as {@link Compiler#compileModuleAsync compileModuleAsync} but also creates ComponentFactories for all components.\n   */\n  compileModuleAndAllComponentsAsync(moduleType) {\n    return Promise.resolve(this.compileModuleAndAllComponentsSync(moduleType));\n  }\n  /**\n   * Clears all caches.\n   */\n  clearCache() {}\n  /**\n   * Clears the cache for the given component/ngModule.\n   */\n  clearCacheFor(type) {}\n  /**\n   * Returns the id for a given NgModule, if one is defined and known to the compiler.\n   */\n  getModuleId(moduleType) {\n    return undefined;\n  }\n  static ɵfac = function Compiler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Compiler)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: Compiler,\n    factory: Compiler.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(Compiler, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Token to provide CompilerOptions in the platform injector.\n *\n * @publicApi\n */\nconst COMPILER_OPTIONS = new InjectionToken(ngDevMode ? 'compilerOptions' : '');\n/**\n * A factory for creating a Compiler\n *\n * @publicApi\n *\n * @deprecated\n * Ivy JIT mode doesn't require accessing this symbol.\n */\nclass CompilerFactory {}\nfunction compileNgModuleFactory(injector, options, moduleType) {\n  ngDevMode && assertNgModuleType(moduleType);\n  const moduleFactory = new NgModuleFactory(moduleType);\n  // All of the logic below is irrelevant for AOT-compiled code.\n  if (typeof ngJitMode !== 'undefined' && !ngJitMode) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options);\n  // Configure the compiler to use the provided options. This call may fail when multiple modules\n  // are bootstrapped with incompatible options, as a component can only be compiled according to\n  // a single set of options.\n  setJitOptions({\n    defaultEncapsulation: _lastDefined(compilerOptions.map(opts => opts.defaultEncapsulation)),\n    preserveWhitespaces: _lastDefined(compilerOptions.map(opts => opts.preserveWhitespaces))\n  });\n  if (isComponentResourceResolutionQueueEmpty()) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compilerProviders = compilerOptions.flatMap(option => option.providers ?? []);\n  // In case there are no compiler providers, we just return the module factory as\n  // there won't be any resource loader. This can happen with Ivy, because AOT compiled\n  // modules can be still passed through \"bootstrapModule\". In that case we shouldn't\n  // unnecessarily require the JIT compiler.\n  if (compilerProviders.length === 0) {\n    return Promise.resolve(moduleFactory);\n  }\n  const compiler = getCompilerFacade({\n    usage: 0 /* JitCompilerUsage.Decorator */,\n    kind: 'NgModule',\n    type: moduleType\n  });\n  const compilerInjector = Injector.create({\n    providers: compilerProviders\n  });\n  const resourceLoader = compilerInjector.get(compiler.ResourceLoader);\n  // The resource loader can also return a string while the \"resolveComponentResources\"\n  // always expects a promise. Therefore we need to wrap the returned value in a promise.\n  return resolveComponentResources(url => Promise.resolve(resourceLoader.get(url))).then(() => moduleFactory);\n}\nfunction _lastDefined(args) {\n  for (let i = args.length - 1; i >= 0; i--) {\n    if (args[i] !== undefined) {\n      return args[i];\n    }\n  }\n  return undefined;\n}\nclass NgZoneChangeDetectionScheduler {\n  zone = inject(NgZone);\n  changeDetectionScheduler = inject(ChangeDetectionScheduler);\n  applicationRef = inject(ApplicationRef);\n  _onMicrotaskEmptySubscription;\n  initialize() {\n    if (this._onMicrotaskEmptySubscription) {\n      return;\n    }\n    this._onMicrotaskEmptySubscription = this.zone.onMicrotaskEmpty.subscribe({\n      next: () => {\n        // `onMicroTaskEmpty` can happen _during_ the zoneless scheduler change detection because\n        // zone.run(() => {}) will result in `checkStable` at the end of the `zone.run` closure\n        // and emit `onMicrotaskEmpty` synchronously if run coalsecing is false.\n        if (this.changeDetectionScheduler.runningTick) {\n          return;\n        }\n        this.zone.run(() => {\n          this.applicationRef.tick();\n        });\n      }\n    });\n  }\n  ngOnDestroy() {\n    this._onMicrotaskEmptySubscription?.unsubscribe();\n  }\n  static ɵfac = function NgZoneChangeDetectionScheduler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgZoneChangeDetectionScheduler)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: NgZoneChangeDetectionScheduler,\n    factory: NgZoneChangeDetectionScheduler.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n/**\n * Internal token used to verify that `provideZoneChangeDetection` is not used\n * with the bootstrapModule API.\n */\nconst PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', {\n  factory: () => false\n});\nfunction internalProvideZoneChangeDetection({\n  ngZoneFactory,\n  ignoreChangesOutsideZone,\n  scheduleInRootZone\n}) {\n  ngZoneFactory ??= () => new NgZone({\n    ...getNgZoneOptions(),\n    scheduleInRootZone\n  });\n  return [{\n    provide: NgZone,\n    useFactory: ngZoneFactory\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, {\n        optional: true\n      });\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && ngZoneChangeDetectionScheduler === null) {\n        throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, `A required Injectable was not found in the dependency injection tree. ` + 'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');\n      }\n      return () => ngZoneChangeDetectionScheduler.initialize();\n    }\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const service = inject(ZoneStablePendingTask);\n      return () => {\n        service.initialize();\n      };\n    }\n  },\n  // Always disable scheduler whenever explicitly disabled, even if another place called\n  // `provideZoneChangeDetection` without the 'ignore' option.\n  ignoreChangesOutsideZone === true ? {\n    provide: ZONELESS_SCHEDULER_DISABLED,\n    useValue: true\n  } : [], {\n    provide: SCHEDULE_IN_ROOT_ZONE,\n    useValue: scheduleInRootZone ?? SCHEDULE_IN_ROOT_ZONE_DEFAULT\n  }];\n}\n/**\n * Provides `NgZone`-based change detection for the application bootstrapped using\n * `bootstrapApplication`.\n *\n * `NgZone` is already provided in applications by default. This provider allows you to configure\n * options like `eventCoalescing` in the `NgZone`.\n * This provider is not available for `platformBrowser().bootstrapModule`, which uses\n * `BootstrapOptions` instead.\n *\n * @usageNotes\n * ```ts\n * bootstrapApplication(MyApp, {providers: [\n *   provideZoneChangeDetection({eventCoalescing: true}),\n * ]});\n * ```\n *\n * @publicApi\n * @see {@link bootstrapApplication}\n * @see {@link NgZoneOptions}\n */\nfunction provideZoneChangeDetection(options) {\n  const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;\n  const scheduleInRootZone = options?.scheduleInRootZone;\n  const zoneProviders = internalProvideZoneChangeDetection({\n    ngZoneFactory: () => {\n      const ngZoneOptions = getNgZoneOptions(options);\n      ngZoneOptions.scheduleInRootZone = scheduleInRootZone;\n      if (ngZoneOptions.shouldCoalesceEventChangeDetection) {\n        performanceMarkFeature('NgZone_CoalesceEvent');\n      }\n      return new NgZone(ngZoneOptions);\n    },\n    ignoreChangesOutsideZone,\n    scheduleInRootZone\n  });\n  return makeEnvironmentProviders([{\n    provide: PROVIDED_NG_ZONE,\n    useValue: true\n  }, {\n    provide: ZONELESS_ENABLED,\n    useValue: false\n  }, zoneProviders]);\n}\n// Transforms a set of `BootstrapOptions` (supported by the NgModule-based bootstrap APIs) ->\n// `NgZoneOptions` that are recognized by the NgZone constructor. Passing no options will result in\n// a set of default options returned.\nfunction getNgZoneOptions(options) {\n  return {\n    enableLongStackTrace: typeof ngDevMode === 'undefined' ? false : !!ngDevMode,\n    shouldCoalesceEventChangeDetection: options?.eventCoalescing ?? false,\n    shouldCoalesceRunChangeDetection: options?.runCoalescing ?? false\n  };\n}\nclass ZoneStablePendingTask {\n  subscription = new Subscription();\n  initialized = false;\n  zone = inject(NgZone);\n  pendingTasks = inject(PendingTasksInternal);\n  initialize() {\n    if (this.initialized) {\n      return;\n    }\n    this.initialized = true;\n    let task = null;\n    if (!this.zone.isStable && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n      task = this.pendingTasks.add();\n    }\n    this.zone.runOutsideAngular(() => {\n      this.subscription.add(this.zone.onStable.subscribe(() => {\n        NgZone.assertNotInAngularZone();\n        // Check whether there are no pending macro/micro tasks in the next tick\n        // to allow for NgZone to update the state.\n        queueMicrotask(() => {\n          if (task !== null && !this.zone.hasPendingMacrotasks && !this.zone.hasPendingMicrotasks) {\n            this.pendingTasks.remove(task);\n            task = null;\n          }\n        });\n      }));\n    });\n    this.subscription.add(this.zone.onUnstable.subscribe(() => {\n      NgZone.assertInAngularZone();\n      task ??= this.pendingTasks.add();\n    }));\n  }\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n  static ɵfac = function ZoneStablePendingTask_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ZoneStablePendingTask)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ZoneStablePendingTask,\n    factory: ZoneStablePendingTask.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ZoneStablePendingTask, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nconst CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT = 100;\nlet consecutiveMicrotaskNotifications = 0;\nlet stackFromLastFewNotifications = [];\nfunction trackMicrotaskNotificationForDebugging() {\n  consecutiveMicrotaskNotifications++;\n  if (CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT - consecutiveMicrotaskNotifications < 5) {\n    const stack = new Error().stack;\n    if (stack) {\n      stackFromLastFewNotifications.push(stack);\n    }\n  }\n  if (consecutiveMicrotaskNotifications === CONSECUTIVE_MICROTASK_NOTIFICATION_LIMIT) {\n    throw new RuntimeError(103 /* RuntimeErrorCode.INFINITE_CHANGE_DETECTION */, 'Angular could not stabilize because there were endless change notifications within the browser event loop. ' + 'The stack from the last several notifications: \\n' + stackFromLastFewNotifications.join('\\n'));\n  }\n}\nclass ChangeDetectionSchedulerImpl {\n  appRef = inject(ApplicationRef);\n  taskService = inject(PendingTasksInternal);\n  ngZone = inject(NgZone);\n  zonelessEnabled = inject(ZONELESS_ENABLED);\n  tracing = inject(TracingService, {\n    optional: true\n  });\n  disableScheduling = inject(ZONELESS_SCHEDULER_DISABLED, {\n    optional: true\n  }) ?? false;\n  zoneIsDefined = typeof Zone !== 'undefined' && !!Zone.root.run;\n  schedulerTickApplyArgs = [{\n    data: {\n      '__scheduler_tick__': true\n    }\n  }];\n  subscriptions = new Subscription();\n  angularZoneId = this.zoneIsDefined ? this.ngZone._inner?.get(angularZoneInstanceIdProperty) : null;\n  scheduleInRootZone = !this.zonelessEnabled && this.zoneIsDefined && (inject(SCHEDULE_IN_ROOT_ZONE, {\n    optional: true\n  }) ?? false);\n  cancelScheduledCallback = null;\n  useMicrotaskScheduler = false;\n  runningTick = false;\n  pendingRenderTaskId = null;\n  constructor() {\n    this.subscriptions.add(this.appRef.afterTick.subscribe(() => {\n      // If the scheduler isn't running a tick but the application ticked, that means\n      // someone called ApplicationRef.tick manually. In this case, we should cancel\n      // any change detections that had been scheduled so we don't run an extra one.\n      if (!this.runningTick) {\n        this.cleanup();\n      }\n    }));\n    this.subscriptions.add(this.ngZone.onUnstable.subscribe(() => {\n      // If the zone becomes unstable when we're not running tick (this happens from the zone.run),\n      // we should cancel any scheduled change detection here because at this point we\n      // know that the zone will stabilize at some point and run change detection itself.\n      if (!this.runningTick) {\n        this.cleanup();\n      }\n    }));\n    // TODO(atscott): These conditions will need to change when zoneless is the default\n    // Instead, they should flip to checking if ZoneJS scheduling is provided\n    this.disableScheduling ||= !this.zonelessEnabled && (\n    // NoopNgZone without enabling zoneless means no scheduling whatsoever\n    this.ngZone instanceof NoopNgZone ||\n    // The same goes for the lack of Zone without enabling zoneless scheduling\n    !this.zoneIsDefined);\n  }\n  notify(source) {\n    if (!this.zonelessEnabled && source === 5 /* NotificationSource.Listener */) {\n      // When the notification comes from a listener, we skip the notification unless the\n      // application has enabled zoneless. Ideally, listeners wouldn't notify the scheduler at all\n      // automatically. We do not know that a developer made a change in the listener callback that\n      // requires an `ApplicationRef.tick` (synchronize templates / run render hooks). We do this\n      // only for an easier migration from OnPush components to zoneless. Because listeners are\n      // usually executed inside the Angular zone and listeners automatically call `markViewDirty`,\n      // developers never needed to manually use `ChangeDetectorRef.markForCheck` or some other API\n      // to make listener callbacks work correctly with `OnPush` components.\n      return;\n    }\n    let force = false;\n    switch (source) {\n      case 0 /* NotificationSource.MarkAncestorsForTraversal */:\n        {\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          break;\n        }\n      case 3 /* NotificationSource.DebugApplyChanges */:\n      case 2 /* NotificationSource.DeferBlockStateUpdate */:\n      case 4 /* NotificationSource.MarkForCheck */:\n      case 5 /* NotificationSource.Listener */:\n      case 1 /* NotificationSource.SetInput */:\n        {\n          this.appRef.dirtyFlags |= 4 /* ApplicationRefDirtyFlags.ViewTreeCheck */;\n          break;\n        }\n      case 8 /* NotificationSource.DeferredRenderHook */:\n        {\n          // Render hooks are \"deferred\" when they're triggered from other render hooks. Using the\n          // deferred dirty flags ensures that adding new hooks doesn't automatically trigger a loop\n          // inside tick().\n          this.appRef.deferredDirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n          break;\n        }\n      case 6 /* NotificationSource.CustomElement */:\n        {\n          // We use `ViewTreeTraversal` to ensure we refresh the element even if this is triggered\n          // during CD. In practice this is a no-op since the elements code also calls via a\n          // `markForRefresh()` API which sends `NotificationSource.MarkAncestorsForTraversal` anyway.\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          force = true;\n          break;\n        }\n      case 13 /* NotificationSource.RootEffect */:\n        {\n          this.appRef.dirtyFlags |= 16 /* ApplicationRefDirtyFlags.RootEffects */;\n          // Root effects still force a CD, even if the scheduler is disabled. This ensures that\n          // effects always run, even when triggered from outside the zone when the scheduler is\n          // otherwise disabled.\n          force = true;\n          break;\n        }\n      case 14 /* NotificationSource.ViewEffect */:\n        {\n          // This is technically a no-op, since view effects will also send a\n          // `MarkAncestorsForTraversal` notification. Still, we set this for logical consistency.\n          this.appRef.dirtyFlags |= 2 /* ApplicationRefDirtyFlags.ViewTreeTraversal */;\n          // View effects still force a CD, even if the scheduler is disabled. This ensures that\n          // effects always run, even when triggered from outside the zone when the scheduler is\n          // otherwise disabled.\n          force = true;\n          break;\n        }\n      case 12 /* NotificationSource.PendingTaskRemoved */:\n        {\n          // Removing a pending task via the public API forces a scheduled tick, ensuring that\n          // stability is async and delayed until there was at least an opportunity to run\n          // application synchronization. This prevents some footguns when working with the\n          // public API for pending tasks where developers attempt to update application state\n          // immediately after removing the last task.\n          force = true;\n          break;\n        }\n      case 10 /* NotificationSource.ViewDetachedFromDOM */:\n      case 9 /* NotificationSource.ViewAttached */:\n      case 7 /* NotificationSource.RenderHook */:\n      case 11 /* NotificationSource.AsyncAnimationsLoaded */:\n      default:\n        {\n          // These notifications only schedule a tick but do not change whether we should refresh\n          // views. Instead, we only need to run render hooks unless another notification from the\n          // other set is also received before `tick` happens.\n          this.appRef.dirtyFlags |= 8 /* ApplicationRefDirtyFlags.AfterRender */;\n        }\n    }\n    // If not already defined, attempt to capture a tracing snapshot of this\n    // notification so that the resulting CD run can be attributed to the\n    // context which produced the notification.\n    this.appRef.tracingSnapshot = this.tracing?.snapshot(this.appRef.tracingSnapshot) ?? null;\n    if (!this.shouldScheduleTick(force)) {\n      return;\n    }\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (this.useMicrotaskScheduler) {\n        trackMicrotaskNotificationForDebugging();\n      } else {\n        consecutiveMicrotaskNotifications = 0;\n        stackFromLastFewNotifications.length = 0;\n      }\n    }\n    const scheduleCallback = this.useMicrotaskScheduler ? scheduleCallbackWithMicrotask : scheduleCallbackWithRafRace;\n    this.pendingRenderTaskId = this.taskService.add();\n    if (this.scheduleInRootZone) {\n      this.cancelScheduledCallback = Zone.root.run(() => scheduleCallback(() => this.tick()));\n    } else {\n      this.cancelScheduledCallback = this.ngZone.runOutsideAngular(() => scheduleCallback(() => this.tick()));\n    }\n  }\n  shouldScheduleTick(force) {\n    if (this.disableScheduling && !force || this.appRef.destroyed) {\n      return false;\n    }\n    // already scheduled or running\n    if (this.pendingRenderTaskId !== null || this.runningTick || this.appRef._runningTick) {\n      return false;\n    }\n    // If we're inside the zone don't bother with scheduler. Zone will stabilize\n    // eventually and run change detection.\n    if (!this.zonelessEnabled && this.zoneIsDefined && Zone.current.get(angularZoneInstanceIdProperty + this.angularZoneId)) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Calls ApplicationRef._tick inside the `NgZone`.\n   *\n   * Calling `tick` directly runs change detection and cancels any change detection that had been\n   * scheduled previously.\n   *\n   * @param shouldRefreshViews Passed directly to `ApplicationRef._tick` and skips straight to\n   *     render hooks when `false`.\n   */\n  tick() {\n    // When ngZone.run below exits, onMicrotaskEmpty may emit if the zone is\n    // stable. We want to prevent double ticking so we track whether the tick is\n    // already running and skip it if so.\n    if (this.runningTick || this.appRef.destroyed) {\n      return;\n    }\n    // If we reach the tick and there is no work to be done in ApplicationRef.tick,\n    // skip it altogether and clean up. There may be no work if, for example, the only\n    // event that notified the scheduler was the removal of a pending task.\n    if (this.appRef.dirtyFlags === 0 /* ApplicationRefDirtyFlags.None */) {\n      this.cleanup();\n      return;\n    }\n    // The scheduler used to pass \"whether to check views\" as a boolean flag instead of setting\n    // fine-grained dirtiness flags, and global checking was always used on the first pass. This\n    // created an interesting edge case: if a notification made a view dirty and then ticked via the\n    // scheduler (and not the zone) a global check was still performed.\n    //\n    // Ideally, this would not be the case, and only zone-based ticks would do global passes.\n    // However this is a breaking change and requires fixes in g3. Until this cleanup can be done,\n    // we add the `ViewTreeGlobal` flag to request a global check if any views are dirty in a\n    // scheduled tick (unless zoneless is enabled, in which case global checks aren't really a\n    // thing).\n    //\n    // TODO(alxhub): clean up and remove this workaround as a breaking change.\n    if (!this.zonelessEnabled && this.appRef.dirtyFlags & 7 /* ApplicationRefDirtyFlags.ViewTreeAny */) {\n      this.appRef.dirtyFlags |= 1 /* ApplicationRefDirtyFlags.ViewTreeGlobal */;\n    }\n    const task = this.taskService.add();\n    try {\n      this.ngZone.run(() => {\n        this.runningTick = true;\n        this.appRef._tick();\n      }, undefined, this.schedulerTickApplyArgs);\n    } catch (e) {\n      this.taskService.remove(task);\n      throw e;\n    } finally {\n      this.cleanup();\n    }\n    // If we're notified of a change within 1 microtask of running change\n    // detection, run another round in the same event loop. This allows code\n    // which uses Promise.resolve (see NgModel) to avoid\n    // ExpressionChanged...Error to still be reflected in a single browser\n    // paint, even if that spans multiple rounds of change detection.\n    this.useMicrotaskScheduler = true;\n    scheduleCallbackWithMicrotask(() => {\n      this.useMicrotaskScheduler = false;\n      this.taskService.remove(task);\n    });\n  }\n  ngOnDestroy() {\n    this.subscriptions.unsubscribe();\n    this.cleanup();\n  }\n  cleanup() {\n    this.runningTick = false;\n    this.cancelScheduledCallback?.();\n    this.cancelScheduledCallback = null;\n    // If this is the last task, the service will synchronously emit a stable\n    // notification. If there is a subscriber that then acts in a way that\n    // tries to notify the scheduler again, we need to be able to respond to\n    // schedule a new change detection. Therefore, we should clear the task ID\n    // before removing it from the pending tasks (or the tasks service should\n    // not synchronously emit stable, similar to how Zone stableness only\n    // happens if it's still stable after a microtask).\n    if (this.pendingRenderTaskId !== null) {\n      const taskId = this.pendingRenderTaskId;\n      this.pendingRenderTaskId = null;\n      this.taskService.remove(taskId);\n    }\n  }\n  static ɵfac = function ChangeDetectionSchedulerImpl_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ChangeDetectionSchedulerImpl)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ChangeDetectionSchedulerImpl,\n    factory: ChangeDetectionSchedulerImpl.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ChangeDetectionSchedulerImpl, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n/**\n * Provides change detection without ZoneJS for the application bootstrapped using\n * `bootstrapApplication`.\n *\n * This function allows you to configure the application to not use the state/state changes of\n * ZoneJS to schedule change detection in the application. This will work when ZoneJS is not present\n * on the page at all or if it exists because something else is using it (either another Angular\n * application which uses ZoneJS for scheduling or some other library that relies on ZoneJS).\n *\n * This can also be added to the `TestBed` providers to configure the test environment to more\n * closely match production behavior. This will help give higher confidence that components are\n * compatible with zoneless change detection.\n *\n * ZoneJS uses browser events to trigger change detection. When using this provider, Angular will\n * instead use Angular APIs to schedule change detection. These APIs include:\n *\n * - `ChangeDetectorRef.markForCheck`\n * - `ComponentRef.setInput`\n * - updating a signal that is read in a template\n * - when bound host or template listeners are triggered\n * - attaching a view that was marked dirty by one of the above\n * - removing a view\n * - registering a render hook (templates are only refreshed if render hooks do one of the above)\n *\n * @usageNotes\n * ```ts\n * bootstrapApplication(MyApp, {providers: [\n *   provideExperimentalZonelessChangeDetection(),\n * ]});\n * ```\n *\n * This API is experimental. Neither the shape, nor the underlying behavior is stable and can change\n * in patch versions. There are known feature gaps and API ergonomic considerations. We will iterate\n * on the exact API based on the feedback and our understanding of the problem and solution space.\n *\n * @publicApi\n * @experimental\n * @see [bootstrapApplication](/api/platform-browser/bootstrapApplication)\n */\nfunction provideExperimentalZonelessChangeDetection() {\n  performanceMarkFeature('NgZoneless');\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && typeof Zone !== 'undefined' && Zone) {\n    const message = formatRuntimeError(914 /* RuntimeErrorCode.UNEXPECTED_ZONEJS_PRESENT_IN_ZONELESS_MODE */, `The application is using zoneless change detection, but is still loading Zone.js. ` + `Consider removing Zone.js to get the full benefits of zoneless. ` + `In applications using the Angular CLI, Zone.js is typically included in the \"polyfills\" section of the angular.json file.`);\n    console.warn(message);\n  }\n  return makeEnvironmentProviders([{\n    provide: ChangeDetectionScheduler,\n    useExisting: ChangeDetectionSchedulerImpl\n  }, {\n    provide: NgZone,\n    useClass: NoopNgZone\n  }, {\n    provide: ZONELESS_ENABLED,\n    useValue: true\n  }, {\n    provide: SCHEDULE_IN_ROOT_ZONE,\n    useValue: false\n  }, typeof ngDevMode === 'undefined' || ngDevMode ? [{\n    provide: PROVIDED_ZONELESS,\n    useValue: true\n  }] : []]);\n}\n\n/**\n * Work out the locale from the potential global properties.\n *\n * * Closure Compiler: use `goog.LOCALE`.\n * * Ivy enabled: use `$localize.locale`\n */\nfunction getGlobalLocale() {\n  if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode && typeof goog !== 'undefined' && goog.LOCALE !== 'en') {\n    // * The default `goog.LOCALE` value is `en`, while Angular used `en-US`.\n    // * In order to preserve backwards compatibility, we use Angular default value over\n    //   Closure Compiler's one.\n    return goog.LOCALE;\n  } else {\n    // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE\n    // COMPILE-TIME INLINER.\n    //\n    // * During compile time inlining of translations the expression will be replaced\n    //   with a string literal that is the current locale. Other forms of this expression are not\n    //   guaranteed to be replaced.\n    //\n    // * During runtime translation evaluation, the developer is required to set `$localize.locale`\n    //   if required, or just to provide their own `LOCALE_ID` provider.\n    return typeof $localize !== 'undefined' && $localize.locale || DEFAULT_LOCALE_ID;\n  }\n}\n/**\n * Provide this token to set the locale of your application.\n * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,\n * DecimalPipe and PercentPipe) and by ICU expressions.\n *\n * See the [i18n guide](guide/i18n/locale-id) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { LOCALE_ID } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: LOCALE_ID, useValue: 'en-US' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst LOCALE_ID = new InjectionToken(ngDevMode ? 'LocaleId' : '', {\n  providedIn: 'root',\n  factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale()\n});\n/**\n * Provide this token to set the default currency code your application uses for\n * CurrencyPipe when there is no currency code passed into it. This is only used by\n * CurrencyPipe and has no relation to locale currency. Defaults to USD if not configured.\n *\n * See the [i18n guide](guide/i18n/locale-id) for more information.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * **Deprecation notice:**\n *\n * The default currency code is currently always `USD` but this is deprecated from v9.\n *\n * **In v10 the default currency code will be taken from the current locale.**\n *\n * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in\n * your application `NgModule`:\n *\n * ```ts\n * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}\n * ```\n *\n * </div>\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: DEFAULT_CURRENCY_CODE, useValue: 'EUR' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst DEFAULT_CURRENCY_CODE = new InjectionToken(ngDevMode ? 'DefaultCurrencyCode' : '', {\n  providedIn: 'root',\n  factory: () => USD_CURRENCY_CODE\n});\n/**\n * Use this token at bootstrap to provide the content of your translation file (`xtb`,\n * `xlf` or `xlf2`) when you want to translate your application in another language.\n *\n * See the [i18n guide](guide/i18n/merge) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { TRANSLATIONS } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * // content of your translation file\n * const translations = '....';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: TRANSLATIONS, useValue: translations }]\n * });\n * ```\n *\n * @publicApi\n */\nconst TRANSLATIONS = new InjectionToken(ngDevMode ? 'Translations' : '');\n/**\n * Provide this token at bootstrap to set the format of your {@link TRANSLATIONS}: `xtb`,\n * `xlf` or `xlf2`.\n *\n * See the [i18n guide](guide/i18n/merge) for more information.\n *\n * @usageNotes\n * ### Example\n *\n * ```ts\n * import { TRANSLATIONS_FORMAT } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]\n * });\n * ```\n *\n * @publicApi\n */\nconst TRANSLATIONS_FORMAT = new InjectionToken(ngDevMode ? 'TranslationsFormat' : '');\n/**\n * Use this enum at bootstrap as an option of `bootstrapModule` to define the strategy\n * that the compiler should use in case of missing translations:\n * - Error: throw if you have missing translations.\n * - Warning (default): show a warning in the console and/or shell.\n * - Ignore: do nothing.\n *\n * See the [i18n guide](guide/i18n/merge#report-missing-translations) for more information.\n *\n * @usageNotes\n * ### Example\n * ```ts\n * import { MissingTranslationStrategy } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { AppModule } from './app/app.module';\n *\n * platformBrowserDynamic().bootstrapModule(AppModule, {\n *   missingTranslation: MissingTranslationStrategy.Error\n * });\n * ```\n *\n * @publicApi\n */\nvar MissingTranslationStrategy;\n(function (MissingTranslationStrategy) {\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Error\"] = 0] = \"Error\";\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Warning\"] = 1] = \"Warning\";\n  MissingTranslationStrategy[MissingTranslationStrategy[\"Ignore\"] = 2] = \"Ignore\";\n})(MissingTranslationStrategy || (MissingTranslationStrategy = {}));\n\n// A delay in milliseconds before the scan is run after onLoad, to avoid any\n// potential race conditions with other LCP-related functions. This delay\n// happens outside of the main JavaScript execution and will only effect the timing\n// on when the warning becomes visible in the console.\nconst SCAN_DELAY = 200;\nconst OVERSIZED_IMAGE_TOLERANCE = 1200;\nclass ImagePerformanceWarning {\n  // Map of full image URLs -> original `ngSrc` values.\n  window = null;\n  observer = null;\n  options = inject(IMAGE_CONFIG);\n  isBrowser = inject(PLATFORM_ID) === 'browser';\n  lcpImageUrl;\n  start() {\n    if (!this.isBrowser || typeof PerformanceObserver === 'undefined' || this.options?.disableImageSizeWarning && this.options?.disableImageLazyLoadWarning) {\n      return;\n    }\n    this.observer = this.initPerformanceObserver();\n    const doc = getDocument();\n    const win = doc.defaultView;\n    if (typeof win !== 'undefined') {\n      this.window = win;\n      // Wait to avoid race conditions where LCP image triggers\n      // load event before it's recorded by the performance observer\n      const waitToScan = () => {\n        setTimeout(this.scanImages.bind(this), SCAN_DELAY);\n      };\n      const setup = () => {\n        // Consider the case when the application is created and destroyed multiple times.\n        // Typically, applications are created instantly once the page is loaded, and the\n        // `window.load` listener is always triggered. However, the `window.load` event will never\n        // be fired if the page is loaded, and the application is created later. Checking for\n        // `readyState` is the easiest way to determine whether the page has been loaded or not.\n        if (doc.readyState === 'complete') {\n          waitToScan();\n        } else {\n          this.window?.addEventListener('load', waitToScan, {\n            once: true\n          });\n        }\n      };\n      // Angular doesn't have to run change detection whenever any asynchronous tasks are invoked in\n      // the scope of this functionality.\n      if (typeof Zone !== 'undefined') {\n        Zone.root.run(() => setup());\n      } else {\n        setup();\n      }\n    }\n  }\n  ngOnDestroy() {\n    this.observer?.disconnect();\n  }\n  initPerformanceObserver() {\n    if (typeof PerformanceObserver === 'undefined') {\n      return null;\n    }\n    const observer = new PerformanceObserver(entryList => {\n      const entries = entryList.getEntries();\n      if (entries.length === 0) return;\n      // We use the latest entry produced by the `PerformanceObserver` as the best\n      // signal on which element is actually an LCP one. As an example, the first image to load on\n      // a page, by virtue of being the only thing on the page so far, is often a LCP candidate\n      // and gets reported by PerformanceObserver, but isn't necessarily the LCP element.\n      const lcpElement = entries[entries.length - 1];\n      // Cast to `any` due to missing `element` on the `LargestContentfulPaint` type of entry.\n      // See https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint\n      const imgSrc = lcpElement.element?.src ?? '';\n      // Exclude `data:` and `blob:` URLs, since they are fetched resources.\n      if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n      this.lcpImageUrl = imgSrc;\n    });\n    observer.observe({\n      type: 'largest-contentful-paint',\n      buffered: true\n    });\n    return observer;\n  }\n  scanImages() {\n    const images = getDocument().querySelectorAll('img');\n    let lcpElementFound,\n      lcpElementLoadedCorrectly = false;\n    images.forEach(image => {\n      if (!this.options?.disableImageSizeWarning) {\n        // Image elements using the NgOptimizedImage directive are excluded,\n        // as that directive has its own version of this check.\n        if (!image.getAttribute('ng-img') && this.isOversized(image)) {\n          logOversizedImageWarning(image.src);\n        }\n      }\n      if (!this.options?.disableImageLazyLoadWarning && this.lcpImageUrl) {\n        if (image.src === this.lcpImageUrl) {\n          lcpElementFound = true;\n          if (image.loading !== 'lazy' || image.getAttribute('ng-img')) {\n            // This variable is set to true and never goes back to false to account\n            // for the case where multiple images have the same src url, and some\n            // have lazy loading while others don't.\n            // Also ignore NgOptimizedImage because there's a different warning for that.\n            lcpElementLoadedCorrectly = true;\n          }\n        }\n      }\n    });\n    if (lcpElementFound && !lcpElementLoadedCorrectly && this.lcpImageUrl && !this.options?.disableImageLazyLoadWarning) {\n      logLazyLCPWarning(this.lcpImageUrl);\n    }\n  }\n  isOversized(image) {\n    if (!this.window) {\n      return false;\n    }\n    // The `isOversized` check may not be applicable or may require adjustments\n    // for several types of image formats or scenarios. Currently, we specify only\n    // `svg`, but this may also include `gif` since their quality isn’t tied to\n    // dimensions in the same way as raster images.\n    const nonOversizedImageExtentions = [\n    // SVG images are vector-based, which means they can scale\n    // to any size without losing quality.\n    '.svg'];\n    // Convert it to lowercase because this may have uppercase\n    // extensions, such as `IMAGE.SVG`.\n    // We fallback to an empty string because `src` may be `undefined`\n    // if it is explicitly set to `null` by some third-party code\n    // (e.g., `image.src = null`).\n    const imageSource = (image.src || '').toLowerCase();\n    if (nonOversizedImageExtentions.some(extension => imageSource.endsWith(extension))) {\n      return false;\n    }\n    const computedStyle = this.window.getComputedStyle(image);\n    let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n    let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n    const boxSizing = computedStyle.getPropertyValue('box-sizing');\n    const objectFit = computedStyle.getPropertyValue('object-fit');\n    if (objectFit === `cover`) {\n      // Object fit cover may indicate a use case such as a sprite sheet where\n      // this warning does not apply.\n      return false;\n    }\n    if (boxSizing === 'border-box') {\n      // If the image `box-sizing` is set to `border-box`, we adjust the rendered\n      // dimensions by subtracting padding values.\n      const paddingTop = computedStyle.getPropertyValue('padding-top');\n      const paddingRight = computedStyle.getPropertyValue('padding-right');\n      const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n      const paddingLeft = computedStyle.getPropertyValue('padding-left');\n      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n    }\n    const intrinsicWidth = image.naturalWidth;\n    const intrinsicHeight = image.naturalHeight;\n    const recommendedWidth = this.window.devicePixelRatio * renderedWidth;\n    const recommendedHeight = this.window.devicePixelRatio * renderedHeight;\n    const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n    const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n    return oversizedWidth || oversizedHeight;\n  }\n  static ɵfac = function ImagePerformanceWarning_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ImagePerformanceWarning)();\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: ImagePerformanceWarning,\n    factory: ImagePerformanceWarning.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ImagePerformanceWarning, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\nfunction logLazyLCPWarning(src) {\n  console.warn(formatRuntimeError(-913 /* RuntimeErrorCode.IMAGE_PERFORMANCE_WARNING */, `An image with src ${src} is the Largest Contentful Paint (LCP) element ` + `but was given a \"loading\" value of \"lazy\", which can negatively impact ` + `application loading performance. This warning can be addressed by ` + `changing the loading value of the LCP image to \"eager\", or by using the ` + `NgOptimizedImage directive's prioritization utilities. For more ` + `information about addressing or disabling this warning, see ` + `https://angular.dev/errors/NG0913`));\n}\nfunction logOversizedImageWarning(src) {\n  console.warn(formatRuntimeError(-913 /* RuntimeErrorCode.IMAGE_PERFORMANCE_WARNING */, `An image with src ${src} has intrinsic file dimensions much larger than its ` + `rendered size. This can negatively impact application loading performance. ` + `For more information about addressing or disabling this warning, see ` + `https://angular.dev/errors/NG0913`));\n}\n\n/**\n * Internal token that allows to register extra callbacks that should be invoked during the\n * `PlatformRef.destroy` operation. This token is needed to avoid a direct reference to the\n * `PlatformRef` class (i.e. register the callback via `PlatformRef.onDestroy`), thus making the\n * entire class tree-shakeable.\n */\nconst PLATFORM_DESTROY_LISTENERS = new InjectionToken(ngDevMode ? 'PlatformDestroyListeners' : '');\n\n/**\n * InjectionToken to control root component bootstrap behavior.\n *\n * This token is primarily used in Angular's server-side rendering (SSR) scenarios,\n * particularly by the `@angular/ssr` package, to manage whether the root component\n * should be bootstrapped during the application initialization process.\n *\n * ## Purpose:\n * During SSR route extraction, setting this token to `false` prevents Angular from\n * bootstrapping the root component. This avoids unnecessary component rendering,\n * enabling route extraction without requiring additional APIs or triggering\n * component logic.\n *\n * ## Behavior:\n * - **`false`**: Prevents the root component from being bootstrapped.\n * - **`true`** (default): Proceeds with the normal root component bootstrap process.\n *\n * This mechanism ensures SSR can efficiently separate route extraction logic\n * from component rendering.\n */\nconst ENABLE_ROOT_COMPONENT_BOOTSTRAP = new InjectionToken(ngDevMode ? 'ENABLE_ROOT_COMPONENT_BOOTSTRAP' : '');\nfunction isApplicationBootstrapConfig(config) {\n  return !config.moduleRef;\n}\nfunction bootstrap(config) {\n  const envInjector = isApplicationBootstrapConfig(config) ? config.r3Injector : config.moduleRef.injector;\n  const ngZone = envInjector.get(NgZone);\n  return ngZone.run(() => {\n    if (isApplicationBootstrapConfig(config)) {\n      config.r3Injector.resolveInjectorInitializers();\n    } else {\n      config.moduleRef.resolveInjectorInitializers();\n    }\n    const exceptionHandler = envInjector.get(ErrorHandler, null);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (exceptionHandler === null) {\n        const errorMessage = isApplicationBootstrapConfig(config) ? 'No `ErrorHandler` found in the Dependency Injection tree.' : 'No ErrorHandler. Is platform module (BrowserModule) included';\n        throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, errorMessage);\n      }\n      if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {\n        throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' + 'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');\n      }\n    }\n    let onErrorSubscription;\n    ngZone.runOutsideAngular(() => {\n      onErrorSubscription = ngZone.onError.subscribe({\n        next: error => {\n          exceptionHandler.handleError(error);\n        }\n      });\n    });\n    // If the whole platform is destroyed, invoke the `destroy` method\n    // for all bootstrapped applications as well.\n    if (isApplicationBootstrapConfig(config)) {\n      const destroyListener = () => envInjector.destroy();\n      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n      onPlatformDestroyListeners.add(destroyListener);\n      envInjector.onDestroy(() => {\n        onErrorSubscription.unsubscribe();\n        onPlatformDestroyListeners.delete(destroyListener);\n      });\n    } else {\n      const destroyListener = () => config.moduleRef.destroy();\n      const onPlatformDestroyListeners = config.platformInjector.get(PLATFORM_DESTROY_LISTENERS);\n      onPlatformDestroyListeners.add(destroyListener);\n      config.moduleRef.onDestroy(() => {\n        remove(config.allPlatformModules, config.moduleRef);\n        onErrorSubscription.unsubscribe();\n        onPlatformDestroyListeners.delete(destroyListener);\n      });\n    }\n    return _callAndReportToErrorHandler(exceptionHandler, ngZone, () => {\n      const initStatus = envInjector.get(ApplicationInitStatus);\n      initStatus.runInitializers();\n      return initStatus.donePromise.then(() => {\n        // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy\n        const localeId = envInjector.get(LOCALE_ID, DEFAULT_LOCALE_ID);\n        setLocaleId(localeId || DEFAULT_LOCALE_ID);\n        const enableRootComponentBoostrap = envInjector.get(ENABLE_ROOT_COMPONENT_BOOTSTRAP, true);\n        if (!enableRootComponentBoostrap) {\n          if (isApplicationBootstrapConfig(config)) {\n            return envInjector.get(ApplicationRef);\n          }\n          config.allPlatformModules.push(config.moduleRef);\n          return config.moduleRef;\n        }\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          const imagePerformanceService = envInjector.get(ImagePerformanceWarning);\n          imagePerformanceService.start();\n        }\n        if (isApplicationBootstrapConfig(config)) {\n          const appRef = envInjector.get(ApplicationRef);\n          if (config.rootComponent !== undefined) {\n            appRef.bootstrap(config.rootComponent);\n          }\n          return appRef;\n        } else {\n          moduleDoBootstrap(config.moduleRef, config.allPlatformModules);\n          return config.moduleRef;\n        }\n      });\n    });\n  });\n}\nfunction moduleDoBootstrap(moduleRef, allPlatformModules) {\n  const appRef = moduleRef.injector.get(ApplicationRef);\n  if (moduleRef._bootstrapComponents.length > 0) {\n    moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));\n  } else if (moduleRef.instance.ngDoBootstrap) {\n    moduleRef.instance.ngDoBootstrap(appRef);\n  } else {\n    throw new RuntimeError(-403 /* RuntimeErrorCode.BOOTSTRAP_COMPONENTS_NOT_FOUND */, ngDevMode && `The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, ` + `but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ` + `Please define one of these.`);\n  }\n  allPlatformModules.push(moduleRef);\n}\n\n/**\n * The Angular platform is the entry point for Angular on a web page.\n * Each page has exactly one platform. Services (such as reflection) which are common\n * to every Angular application running on the page are bound in its scope.\n * A page's platform is initialized implicitly when a platform is created using a platform\n * factory such as `PlatformBrowser`, or explicitly by calling the `createPlatform()` function.\n *\n * @publicApi\n */\nclass PlatformRef {\n  _injector;\n  _modules = [];\n  _destroyListeners = [];\n  _destroyed = false;\n  /** @internal */\n  constructor(_injector) {\n    this._injector = _injector;\n  }\n  /**\n   * Creates an instance of an `@NgModule` for the given platform.\n   *\n   * @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function\n   *     argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.\n   */\n  bootstrapModuleFactory(moduleFactory, options) {\n    const scheduleInRootZone = options?.scheduleInRootZone;\n    const ngZoneFactory = () => getNgZone(options?.ngZone, {\n      ...getNgZoneOptions({\n        eventCoalescing: options?.ngZoneEventCoalescing,\n        runCoalescing: options?.ngZoneRunCoalescing\n      }),\n      scheduleInRootZone\n    });\n    const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;\n    const allAppProviders = [internalProvideZoneChangeDetection({\n      ngZoneFactory,\n      ignoreChangesOutsideZone\n    }), {\n      provide: ChangeDetectionScheduler,\n      useExisting: ChangeDetectionSchedulerImpl\n    }];\n    const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, allAppProviders);\n    return bootstrap({\n      moduleRef,\n      allPlatformModules: this._modules,\n      platformInjector: this.injector\n    });\n  }\n  /**\n   * Creates an instance of an `@NgModule` for a given platform.\n   *\n   * @usageNotes\n   * ### Simple Example\n   *\n   * ```ts\n   * @NgModule({\n   *   imports: [BrowserModule]\n   * })\n   * class MyModule {}\n   *\n   * let moduleRef = platformBrowser().bootstrapModule(MyModule);\n   * ```\n   *\n   */\n  bootstrapModule(moduleType, compilerOptions = []) {\n    const options = optionsReducer({}, compilerOptions);\n    return compileNgModuleFactory(this.injector, options, moduleType).then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options));\n  }\n  /**\n   * Registers a listener to be called when the platform is destroyed.\n   */\n  onDestroy(callback) {\n    this._destroyListeners.push(callback);\n  }\n  /**\n   * Retrieves the platform {@link Injector}, which is the parent injector for\n   * every Angular application on the page and provides singleton providers.\n   */\n  get injector() {\n    return this._injector;\n  }\n  /**\n   * Destroys the current Angular platform and all Angular applications on the page.\n   * Destroys all modules and listeners registered with the platform.\n   */\n  destroy() {\n    if (this._destroyed) {\n      throw new RuntimeError(404 /* RuntimeErrorCode.PLATFORM_ALREADY_DESTROYED */, ngDevMode && 'The platform has already been destroyed!');\n    }\n    this._modules.slice().forEach(module => module.destroy());\n    this._destroyListeners.forEach(listener => listener());\n    const destroyListeners = this._injector.get(PLATFORM_DESTROY_LISTENERS, null);\n    if (destroyListeners) {\n      destroyListeners.forEach(listener => listener());\n      destroyListeners.clear();\n    }\n    this._destroyed = true;\n  }\n  /**\n   * Indicates whether this instance was destroyed.\n   */\n  get destroyed() {\n    return this._destroyed;\n  }\n  static ɵfac = function PlatformRef_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformRef)(ɵɵinject(Injector));\n  };\n  static ɵprov = /*@__PURE__*/ɵɵdefineInjectable({\n    token: PlatformRef,\n    factory: PlatformRef.ɵfac,\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(PlatformRef, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform'\n    }]\n  }], () => [{\n    type: Injector\n  }], null);\n})();\nlet _platformInjector = null;\n/**\n * Internal token to indicate whether having multiple bootstrapped platform should be allowed (only\n * one bootstrapped platform is allowed by default). This token helps to support SSR scenarios.\n */\nconst ALLOW_MULTIPLE_PLATFORMS = new InjectionToken(ngDevMode ? 'AllowMultipleToken' : '');\n/**\n * Creates a platform.\n * Platforms must be created on launch using this function.\n *\n * @publicApi\n */\nfunction createPlatform(injector) {\n  if (_platformInjector && !_platformInjector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n    throw new RuntimeError(400 /* RuntimeErrorCode.MULTIPLE_PLATFORMS */, ngDevMode && 'There can be only one platform. Destroy the previous one to create a new one.');\n  }\n  publishDefaultGlobalUtils();\n  publishSignalConfiguration();\n  _platformInjector = injector;\n  const platform = injector.get(PlatformRef);\n  runPlatformInitializers(injector);\n  return platform;\n}\n/**\n * Creates a factory for a platform. Can be used to provide or override `Providers` specific to\n * your application's runtime needs, such as `PLATFORM_INITIALIZER` and `PLATFORM_ID`.\n * @param parentPlatformFactory Another platform factory to modify. Allows you to compose factories\n * to build up configurations that might be required by different libraries or parts of the\n * application.\n * @param name Identifies the new platform factory.\n * @param providers A set of dependency providers for platforms created with the new factory.\n *\n * @publicApi\n */\nfunction createPlatformFactory(parentPlatformFactory, name, providers = []) {\n  const desc = `Platform: ${name}`;\n  const marker = new InjectionToken(desc);\n  return (extraProviders = []) => {\n    let platform = getPlatform();\n    if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n      const platformProviders = [...providers, ...extraProviders, {\n        provide: marker,\n        useValue: true\n      }];\n      if (parentPlatformFactory) {\n        parentPlatformFactory(platformProviders);\n      } else {\n        createPlatform(createPlatformInjector(platformProviders, desc));\n      }\n    }\n    return assertPlatform(marker);\n  };\n}\n/**\n * Helper function to create an instance of a platform injector (that maintains the 'platform'\n * scope).\n */\nfunction createPlatformInjector(providers = [], name) {\n  return Injector.create({\n    name,\n    providers: [{\n      provide: INJECTOR_SCOPE,\n      useValue: 'platform'\n    }, {\n      provide: PLATFORM_DESTROY_LISTENERS,\n      useValue: new Set([() => _platformInjector = null])\n    }, ...providers]\n  });\n}\n/**\n * Checks that there is currently a platform that contains the given token as a provider.\n *\n * @publicApi\n */\nfunction assertPlatform(requiredToken) {\n  const platform = getPlatform();\n  if (!platform) {\n    throw new RuntimeError(401 /* RuntimeErrorCode.PLATFORM_NOT_FOUND */, ngDevMode && 'No platform exists!');\n  }\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && !platform.injector.get(requiredToken, null)) {\n    throw new RuntimeError(400 /* RuntimeErrorCode.MULTIPLE_PLATFORMS */, 'A platform with a different configuration has been created. Please destroy it first.');\n  }\n  return platform;\n}\n/**\n * Returns the current platform.\n *\n * @publicApi\n */\nfunction getPlatform() {\n  return _platformInjector?.get(PlatformRef) ?? null;\n}\n/**\n * Destroys the current Angular platform and all Angular applications on the page.\n * Destroys all modules and listeners registered with the platform.\n *\n * @publicApi\n */\nfunction destroyPlatform() {\n  getPlatform()?.destroy();\n}\n/**\n * The goal of this function is to bootstrap a platform injector,\n * but avoid referencing `PlatformRef` class.\n * This function is needed for bootstrapping a Standalone Component.\n */\nfunction createOrReusePlatformInjector(providers = []) {\n  // If a platform injector already exists, it means that the platform\n  // is already bootstrapped and no additional actions are required.\n  if (_platformInjector) return _platformInjector;\n  publishDefaultGlobalUtils();\n  // Otherwise, setup a new platform injector and run platform initializers.\n  const injector = createPlatformInjector(providers);\n  _platformInjector = injector;\n  publishSignalConfiguration();\n  runPlatformInitializers(injector);\n  return injector;\n}\n/**\n * @description\n * This function is used to provide initialization functions that will be executed upon\n * initialization of the platform injector.\n *\n * Note that the provided initializer is run in the injection context.\n *\n * Previously, this was achieved using the `PLATFORM_INITIALIZER` token which is now deprecated.\n *\n * @see {@link PLATFORM_INITIALIZER}\n *\n * @publicApi\n */\nfunction providePlatformInitializer(initializerFn) {\n  return makeEnvironmentProviders([{\n    provide: PLATFORM_INITIALIZER,\n    useValue: initializerFn,\n    multi: true\n  }]);\n}\nfunction runPlatformInitializers(injector) {\n  const inits = injector.get(PLATFORM_INITIALIZER, null);\n  runInInjectionContext(injector, () => {\n    inits?.forEach(init => init());\n  });\n}\n\n/**\n * Used to periodically verify no expressions have changed after they were checked.\n *\n * @param options Used to configure when the check will execute.\n *   - `interval` will periodically run exhaustive `checkNoChanges` on application views\n *   - `useNgZoneOnStable` will use ZoneJS to determine when change detection might have run\n *      in an application using ZoneJS to drive change detection. When the `NgZone.onStable` would\n *      have emitted, all views attached to the `ApplicationRef` are checked for changes.\n *   - 'exhaustive' means that all views attached to `ApplicationRef` and all the descendants of those views will be\n *     checked for changes (excluding those subtrees which are detached via `ChangeDetectorRef.detach()`).\n *     This is useful because the check that runs after regular change detection does not work for components using `ChangeDetectionStrategy.OnPush`.\n *     This check is will surface any existing errors hidden by `OnPush` components. By default, this check is exhaustive\n *     and will always check all views, regardless of their \"dirty\" state and `ChangeDetectionStrategy`.\n *\n * When the `useNgZoneOnStable` option is `true`, this function will provide its own `NgZone` implementation and needs\n * to come after any other `NgZone` provider, including `provideZoneChangeDetection()` and `provideExperimentalZonelessChangeDetection()`.\n *\n * @experimental\n * @publicApi\n */\nfunction provideExperimentalCheckNoChangesForDebug(options) {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (options.interval === undefined && !options.useNgZoneOnStable) {\n      throw new Error('Must provide one of `useNgZoneOnStable` or `interval`');\n    }\n    const checkNoChangesMode = options?.exhaustive === false ? CheckNoChangesMode.OnlyDirtyViews : CheckNoChangesMode.Exhaustive;\n    return makeEnvironmentProviders([options?.useNgZoneOnStable ? {\n      provide: NgZone,\n      useFactory: () => new DebugNgZoneForCheckNoChanges(checkNoChangesMode)\n    } : [], options?.interval !== undefined ? exhaustiveCheckNoChangesInterval(options.interval, checkNoChangesMode) : [], {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue: () => {\n        if (options?.useNgZoneOnStable && !(inject(NgZone) instanceof DebugNgZoneForCheckNoChanges)) {\n          throw new Error('`provideExperimentalCheckNoChangesForDebug` with `useNgZoneOnStable` must be after any other provider for `NgZone`.');\n        }\n      }\n    }]);\n  } else {\n    return makeEnvironmentProviders([]);\n  }\n}\nclass DebugNgZoneForCheckNoChanges extends NgZone {\n  checkNoChangesMode;\n  applicationRef;\n  scheduler;\n  errorHandler;\n  injector = inject(EnvironmentInjector);\n  constructor(checkNoChangesMode) {\n    const zonelessEnabled = inject(ZONELESS_ENABLED);\n    // Use coalescing to ensure we aren't ever running this check synchronously\n    super({\n      shouldCoalesceEventChangeDetection: true,\n      shouldCoalesceRunChangeDetection: zonelessEnabled\n    });\n    this.checkNoChangesMode = checkNoChangesMode;\n    if (zonelessEnabled) {\n      // prevent emits to ensure code doesn't rely on these\n      this.onMicrotaskEmpty.emit = () => {};\n      this.onStable.emit = () => {\n        this.scheduler ||= this.injector.get(ChangeDetectionSchedulerImpl);\n        if (this.scheduler.pendingRenderTaskId || this.scheduler.runningTick) {\n          return;\n        }\n        this.checkApplicationViews();\n      };\n      this.onUnstable.emit = () => {};\n    } else {\n      this.runOutsideAngular(() => {\n        this.onStable.subscribe(() => {\n          this.checkApplicationViews();\n        });\n      });\n    }\n  }\n  checkApplicationViews() {\n    this.applicationRef ||= this.injector.get(ApplicationRef);\n    for (const view of this.applicationRef.allViews) {\n      try {\n        checkNoChangesInternal(view._lView, this.checkNoChangesMode, view.notifyErrorHandler);\n      } catch (e) {\n        this.errorHandler ||= this.injector.get(ErrorHandler);\n        this.errorHandler.handleError(e);\n      }\n    }\n  }\n}\nfunction exhaustiveCheckNoChangesInterval(interval, checkNoChangesMode) {\n  return {\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useFactory: () => {\n      const applicationRef = inject(ApplicationRef);\n      const errorHandler = inject(ErrorHandler);\n      const scheduler = inject(ChangeDetectionSchedulerImpl);\n      const ngZone = inject(NgZone);\n      return () => {\n        function scheduleCheckNoChanges() {\n          ngZone.runOutsideAngular(() => {\n            setTimeout(() => {\n              if (applicationRef.destroyed) {\n                return;\n              }\n              if (scheduler.pendingRenderTaskId || scheduler.runningTick) {\n                scheduleCheckNoChanges();\n                return;\n              }\n              for (const view of applicationRef.allViews) {\n                try {\n                  checkNoChangesInternal(view._lView, checkNoChangesMode, view.notifyErrorHandler);\n                } catch (e) {\n                  errorHandler.handleError(e);\n                }\n              }\n              scheduleCheckNoChanges();\n            }, interval);\n          });\n        }\n        scheduleCheckNoChanges();\n      };\n    }\n  };\n}\n\n/**\n * Returns whether Angular is in development mode.\n *\n * By default, this is true, unless `enableProdMode` is invoked prior to calling this method or the\n * application is built using the Angular CLI with the `optimization` option.\n * @see {@link cli/build ng build}\n *\n * @publicApi\n */\nfunction isDevMode() {\n  return typeof ngDevMode === 'undefined' || !!ngDevMode;\n}\n/**\n * Disable Angular's development mode, which turns off assertions and other\n * checks within the framework.\n *\n * One important assertion this disables verifies that a change detection pass\n * does not result in additional changes to any bindings (also known as\n * unidirectional data flow).\n *\n * Using this method is discouraged as the Angular CLI will set production mode when using the\n * `optimization` option.\n * @see {@link cli/build ng build}\n *\n * @publicApi\n */\nfunction enableProdMode() {\n  // The below check is there so when ngDevMode is set via terser\n  // `global['ngDevMode'] = false;` is also dropped.\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    _global['ngDevMode'] = false;\n  }\n}\n\n// Public API for render\n\n/**\n * Returns the NgModuleFactory with the given id (specified using [@NgModule.id\n * field](api/core/NgModule#id)), if it exists and has been loaded. Factories for NgModules that do\n * not specify an `id` cannot be retrieved. Throws if an NgModule cannot be found.\n * @publicApi\n * @deprecated Use `getNgModuleById` instead.\n */\nfunction getModuleFactory(id) {\n  const type = getRegisteredNgModuleType(id);\n  if (!type) throw noModuleError(id);\n  return new NgModuleFactory(type);\n}\n/**\n * Returns the NgModule class with the given id (specified using [@NgModule.id\n * field](api/core/NgModule#id)), if it exists and has been loaded. Classes for NgModules that do\n * not specify an `id` cannot be retrieved. Throws if an NgModule cannot be found.\n * @publicApi\n */\nfunction getNgModuleById(id) {\n  const type = getRegisteredNgModuleType(id);\n  if (!type) throw noModuleError(id);\n  return type;\n}\nfunction noModuleError(id) {\n  return new Error(`No module with ID ${id} loaded`);\n}\n\n/**\n * Base class that provides change detection functionality.\n * A change-detection tree collects all views that are to be checked for changes.\n * Use the methods to add and remove views from the tree, initiate change-detection,\n * and explicitly mark views as _dirty_, meaning that they have changed and need to be re-rendered.\n *\n * @see [Using change detection hooks](guide/components/lifecycle#using-change-detection-hooks)\n * @see [Defining custom change detection](guide/components/lifecycle#defining-custom-change-detection)\n *\n * @usageNotes\n *\n * The following examples demonstrate how to modify default change-detection behavior\n * to perform explicit detection when needed.\n *\n * ### Use `markForCheck()` with `CheckOnce` strategy\n *\n * The following example sets the `OnPush` change-detection strategy for a component\n * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check\n * after an interval.\n *\n * {@example core/ts/change_detect/change-detection.ts region='mark-for-check'}\n *\n * ### Detach change detector to limit how often check occurs\n *\n * The following example defines a component with a large list of read-only data\n * that is expected to change constantly, many times per second.\n * To improve performance, we want to check and update the list\n * less often than the changes actually occur. To do that, we detach\n * the component's change detector and perform an explicit local check every five seconds.\n *\n * {@example core/ts/change_detect/change-detection.ts region='detach'}\n *\n *\n * ### Reattaching a detached component\n *\n * The following example creates a component displaying live data.\n * The component detaches its change detector from the main change detector tree\n * when the `live` property is set to false, and reattaches it when the property\n * becomes true.\n *\n * {@example core/ts/change_detect/change-detection.ts region='reattach'}\n *\n * @publicApi\n */\nclass ChangeDetectorRef {\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectChangeDetectorRef;\n}\n/** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */\nfunction injectChangeDetectorRef(flags) {\n  return createViewRef(getCurrentTNode(), getLView(), (flags & 16 /* InternalInjectFlags.ForPipe */) === 16 /* InternalInjectFlags.ForPipe */);\n}\n/**\n * Creates a ViewRef and stores it on the injector as ChangeDetectorRef (public alias).\n *\n * @param tNode The node that is requesting a ChangeDetectorRef\n * @param lView The view to which the node belongs\n * @param isPipe Whether the view is being injected into a pipe.\n * @returns The ChangeDetectorRef to use\n */\nfunction createViewRef(tNode, lView, isPipe) {\n  if (isComponentHost(tNode) && !isPipe) {\n    // The LView represents the location where the component is declared.\n    // Instead we want the LView for the component View and so we need to look it up.\n    const componentView = getComponentLViewByIndex(tNode.index, lView); // look down\n    return new ViewRef$1(componentView, componentView);\n  } else if (tNode.type & (3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */ | 32 /* TNodeType.Icu */ | 128 /* TNodeType.LetDeclaration */)) {\n    // The LView represents the location where the injection is requested from.\n    // We need to locate the containing LView (in case where the `lView` is an embedded view)\n    const hostComponentView = lView[DECLARATION_COMPONENT_VIEW]; // look up\n    return new ViewRef$1(hostComponentView, lView);\n  }\n  return null;\n}\n\n/**\n * Represents an Angular view.\n *\n * @see [Change detection usage](/api/core/ChangeDetectorRef?tab=usage-notes)\n *\n * @publicApi\n */\nclass ViewRef extends ChangeDetectorRef {}\n/**\n * Represents an Angular view in a view container.\n * An embedded view can be referenced from a component\n * other than the hosting component whose template defines it, or it can be defined\n * independently by a `TemplateRef`.\n *\n * Properties of elements in a view can change, but the structure (number and order) of elements in\n * a view cannot. Change the structure of elements by inserting, moving, or\n * removing nested views in a view container.\n *\n * @see {@link ViewContainerRef}\n *\n * @usageNotes\n *\n * The following template breaks down into two separate `TemplateRef` instances,\n * an outer one and an inner one.\n *\n * ```html\n * Count: {{items.length}}\n * <ul>\n *   <li *ngFor=\"let  item of items\">{{item}}</li>\n * </ul>\n * ```\n *\n * This is the outer `TemplateRef`:\n *\n * ```html\n * Count: {{items.length}}\n * <ul>\n *   <ng-template ngFor let-item [ngForOf]=\"items\"></ng-template>\n * </ul>\n * ```\n *\n * This is the inner `TemplateRef`:\n *\n * ```html\n *   <li>{{item}}</li>\n * ```\n *\n * The outer and inner `TemplateRef` instances are assembled into views as follows:\n *\n * ```html\n * <!-- ViewRef: outer-0 -->\n * Count: 2\n * <ul>\n *   <ng-template view-container-ref></ng-template>\n *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->\n *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->\n * </ul>\n * <!-- /ViewRef: outer-0 -->\n * ```\n * @publicApi\n */\nclass EmbeddedViewRef extends ViewRef {}\n\n// Public API for compiler\n\n// This file exists for easily patching NgModuleFactoryLoader in g3\nvar ng_module_factory_loader_impl = {};\n\n/**\n * @publicApi\n */\nclass DebugEventListener {\n  name;\n  callback;\n  constructor(name, callback) {\n    this.name = name;\n    this.callback = callback;\n  }\n}\n/**\n * @publicApi\n */\nfunction asNativeElements(debugEls) {\n  return debugEls.map(el => el.nativeElement);\n}\n/**\n * @publicApi\n */\nclass DebugNode {\n  /**\n   * The underlying DOM node.\n   */\n  nativeNode;\n  constructor(nativeNode) {\n    this.nativeNode = nativeNode;\n  }\n  /**\n   * The `DebugElement` parent. Will be `null` if this is the root element.\n   */\n  get parent() {\n    const parent = this.nativeNode.parentNode;\n    return parent ? new DebugElement(parent) : null;\n  }\n  /**\n   * The host dependency injector. For example, the root element's component instance injector.\n   */\n  get injector() {\n    return getInjector(this.nativeNode);\n  }\n  /**\n   * The element's own component instance, if it has one.\n   */\n  get componentInstance() {\n    const nativeElement = this.nativeNode;\n    return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));\n  }\n  /**\n   * An object that provides parent context for this element. Often an ancestor component instance\n   * that governs this element.\n   *\n   * When an element is repeated within *ngFor, the context is an `NgForOf` whose `$implicit`\n   * property is the value of the row instance value. For example, the `hero` in `*ngFor=\"let hero\n   * of heroes\"`.\n   */\n  get context() {\n    return getComponent(this.nativeNode) || getContext(this.nativeNode);\n  }\n  /**\n   * The callbacks attached to the component's @Output properties and/or the element's event\n   * properties.\n   */\n  get listeners() {\n    return getListeners(this.nativeNode).filter(listener => listener.type === 'dom');\n  }\n  /**\n   * Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local\n   * variable name.\n   */\n  get references() {\n    return getLocalRefs(this.nativeNode);\n  }\n  /**\n   * This component's injector lookup tokens. Includes the component itself plus the tokens that the\n   * component lists in its providers metadata.\n   */\n  get providerTokens() {\n    return getInjectionTokens(this.nativeNode);\n  }\n}\n/**\n * @publicApi\n *\n * @see [Component testing scenarios](guide/testing/components-scenarios)\n * @see [Basics of testing components](guide/testing/components-basics)\n * @see [Testing utility APIs](guide/testing/utility-apis)\n */\nclass DebugElement extends DebugNode {\n  constructor(nativeNode) {\n    ngDevMode && assertDomNode(nativeNode);\n    super(nativeNode);\n  }\n  /**\n   * The underlying DOM element at the root of the component.\n   */\n  get nativeElement() {\n    return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;\n  }\n  /**\n   * The element tag name, if it is an element.\n   */\n  get name() {\n    const context = getLContext(this.nativeNode);\n    const lView = context ? context.lView : null;\n    if (lView !== null) {\n      const tData = lView[TVIEW].data;\n      const tNode = tData[context.nodeIndex];\n      return tNode.value;\n    } else {\n      return this.nativeNode.nodeName;\n    }\n  }\n  /**\n   *  Gets a map of property names to property values for an element.\n   *\n   *  This map includes:\n   *  - Regular property bindings (e.g. `[id]=\"id\"`)\n   *  - Host property bindings (e.g. `host: { '[id]': \"id\" }`)\n   *  - Interpolated property bindings (e.g. `id=\"{{ value }}\")\n   *\n   *  It does not include:\n   *  - input property bindings (e.g. `[myCustomInput]=\"value\"`)\n   *  - attribute bindings (e.g. `[attr.role]=\"menu\"`)\n   */\n  get properties() {\n    const context = getLContext(this.nativeNode);\n    const lView = context ? context.lView : null;\n    if (lView === null) {\n      return {};\n    }\n    const tData = lView[TVIEW].data;\n    const tNode = tData[context.nodeIndex];\n    const properties = {};\n    // Collect properties from the DOM.\n    copyDomProperties(this.nativeElement, properties);\n    // Collect properties from the bindings. This is needed for animation renderer which has\n    // synthetic properties which don't get reflected into the DOM.\n    collectPropertyBindings(properties, tNode, lView, tData);\n    return properties;\n  }\n  /**\n   *  A map of attribute names to attribute values for an element.\n   */\n  // TODO: replace null by undefined in the return type\n  get attributes() {\n    const attributes = {};\n    const element = this.nativeElement;\n    if (!element) {\n      return attributes;\n    }\n    const context = getLContext(element);\n    const lView = context ? context.lView : null;\n    if (lView === null) {\n      return {};\n    }\n    const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;\n    const lowercaseTNodeAttrs = [];\n    // For debug nodes we take the element's attribute directly from the DOM since it allows us\n    // to account for ones that weren't set via bindings (e.g. ViewEngine keeps track of the ones\n    // that are set through `Renderer2`). The problem is that the browser will lowercase all names,\n    // however since we have the attributes already on the TNode, we can preserve the case by going\n    // through them once, adding them to the `attributes` map and putting their lower-cased name\n    // into an array. Afterwards when we're going through the native DOM attributes, we can check\n    // whether we haven't run into an attribute already through the TNode.\n    if (tNodeAttrs) {\n      let i = 0;\n      while (i < tNodeAttrs.length) {\n        const attrName = tNodeAttrs[i];\n        // Stop as soon as we hit a marker. We only care about the regular attributes. Everything\n        // else will be handled below when we read the final attributes off the DOM.\n        if (typeof attrName !== 'string') break;\n        const attrValue = tNodeAttrs[i + 1];\n        attributes[attrName] = attrValue;\n        lowercaseTNodeAttrs.push(attrName.toLowerCase());\n        i += 2;\n      }\n    }\n    for (const attr of element.attributes) {\n      // Make sure that we don't assign the same attribute both in its\n      // case-sensitive form and the lower-cased one from the browser.\n      if (!lowercaseTNodeAttrs.includes(attr.name)) {\n        attributes[attr.name] = attr.value;\n      }\n    }\n    return attributes;\n  }\n  /**\n   * The inline styles of the DOM element.\n   */\n  // TODO: replace null by undefined in the return type\n  get styles() {\n    const element = this.nativeElement;\n    return element?.style ?? {};\n  }\n  /**\n   * A map containing the class names on the element as keys.\n   *\n   * This map is derived from the `className` property of the DOM element.\n   *\n   * Note: The values of this object will always be `true`. The class key will not appear in the KV\n   * object if it does not exist on the element.\n   *\n   * @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)\n   */\n  get classes() {\n    const result = {};\n    const element = this.nativeElement;\n    // SVG elements return an `SVGAnimatedString` instead of a plain string for the `className`.\n    const className = element.className;\n    const classes = typeof className !== 'string' ? className.baseVal.split(' ') : className.split(' ');\n    classes.forEach(value => result[value] = true);\n    return result;\n  }\n  /**\n   * The `childNodes` of the DOM element as a `DebugNode` array.\n   *\n   * @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)\n   */\n  get childNodes() {\n    const childNodes = this.nativeNode.childNodes;\n    const children = [];\n    for (let i = 0; i < childNodes.length; i++) {\n      const element = childNodes[i];\n      children.push(getDebugNode(element));\n    }\n    return children;\n  }\n  /**\n   * The immediate `DebugElement` children. Walk the tree by descending through `children`.\n   */\n  get children() {\n    const nativeElement = this.nativeElement;\n    if (!nativeElement) return [];\n    const childNodes = nativeElement.children;\n    const children = [];\n    for (let i = 0; i < childNodes.length; i++) {\n      const element = childNodes[i];\n      children.push(getDebugNode(element));\n    }\n    return children;\n  }\n  /**\n   * @returns the first `DebugElement` that matches the predicate at any depth in the subtree.\n   */\n  query(predicate) {\n    const results = this.queryAll(predicate);\n    return results[0] || null;\n  }\n  /**\n   * @returns All `DebugElement` matches for the predicate at any depth in the subtree.\n   */\n  queryAll(predicate) {\n    const matches = [];\n    _queryAll(this, predicate, matches, true);\n    return matches;\n  }\n  /**\n   * @returns All `DebugNode` matches for the predicate at any depth in the subtree.\n   */\n  queryAllNodes(predicate) {\n    const matches = [];\n    _queryAll(this, predicate, matches, false);\n    return matches;\n  }\n  /**\n   * Triggers the event by its name if there is a corresponding listener in the element's\n   * `listeners` collection.\n   *\n   * If the event lacks a listener or there's some other problem, consider\n   * calling `nativeElement.dispatchEvent(eventObject)`.\n   *\n   * @param eventName The name of the event to trigger\n   * @param eventObj The _event object_ expected by the handler\n   *\n   * @see [Testing components scenarios](guide/testing/components-scenarios#trigger-event-handler)\n   */\n  triggerEventHandler(eventName, eventObj) {\n    const node = this.nativeNode;\n    const invokedListeners = [];\n    this.listeners.forEach(listener => {\n      if (listener.name === eventName) {\n        const callback = listener.callback;\n        callback.call(node, eventObj);\n        invokedListeners.push(callback);\n      }\n    });\n    // We need to check whether `eventListeners` exists, because it's something\n    // that Zone.js only adds to `EventTarget` in browser environments.\n    if (typeof node.eventListeners === 'function') {\n      // Note that in Ivy we wrap event listeners with a call to `event.preventDefault` in some\n      // cases. We use '__ngUnwrap__' as a special token that gives us access to the actual event\n      // listener.\n      node.eventListeners(eventName).forEach(listener => {\n        // In order to ensure that we can detect the special __ngUnwrap__ token described above, we\n        // use `toString` on the listener and see if it contains the token. We use this approach to\n        // ensure that it still worked with compiled code since it cannot remove or rename string\n        // literals. We also considered using a special function name (i.e. if(listener.name ===\n        // special)) but that was more cumbersome and we were also concerned the compiled code could\n        // strip the name, turning the condition in to (\"\" === \"\") and always returning true.\n        if (listener.toString().indexOf('__ngUnwrap__') !== -1) {\n          const unwrappedListener = listener('__ngUnwrap__');\n          return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);\n        }\n      });\n    }\n  }\n}\nfunction copyDomProperties(element, properties) {\n  if (element) {\n    // Skip own properties (as those are patched)\n    let obj = Object.getPrototypeOf(element);\n    const NodePrototype = Node.prototype;\n    while (obj !== null && obj !== NodePrototype) {\n      const descriptors = Object.getOwnPropertyDescriptors(obj);\n      for (let key in descriptors) {\n        if (!key.startsWith('__') && !key.startsWith('on')) {\n          // don't include properties starting with `__` and `on`.\n          // `__` are patched values which should not be included.\n          // `on` are listeners which also should not be included.\n          const value = element[key];\n          if (isPrimitiveValue(value)) {\n            properties[key] = value;\n          }\n        }\n      }\n      obj = Object.getPrototypeOf(obj);\n    }\n  }\n}\nfunction isPrimitiveValue(value) {\n  return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' || value === null;\n}\nfunction _queryAll(parentElement, predicate, matches, elementsOnly) {\n  const context = getLContext(parentElement.nativeNode);\n  const lView = context ? context.lView : null;\n  if (lView !== null) {\n    const parentTNode = lView[TVIEW].data[context.nodeIndex];\n    _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);\n  } else {\n    // If the context is null, then `parentElement` was either created with Renderer2 or native DOM\n    // APIs.\n    _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);\n  }\n}\n/**\n * Recursively match the current TNode against the predicate, and goes on with the next ones.\n *\n * @param tNode the current TNode\n * @param lView the LView of this TNode\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _queryNodeChildren(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {\n  ngDevMode && assertTNodeForLView(tNode, lView);\n  const nativeNode = getNativeByTNodeOrNull(tNode, lView);\n  // For each type of TNode, specific logic is executed.\n  if (tNode.type & (3 /* TNodeType.AnyRNode */ | 8 /* TNodeType.ElementContainer */)) {\n    // Case 1: the TNode is an element\n    // The native node has to be checked.\n    _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n    if (isComponentHost(tNode)) {\n      // If the element is the host of a component, then all nodes in its view have to be processed.\n      // Note: the component's content (tNode.child) will be processed from the insertion points.\n      const componentView = getComponentLViewByIndex(tNode.index, lView);\n      if (componentView && componentView[TVIEW].firstChild) {\n        _queryNodeChildren(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);\n      }\n    } else {\n      if (tNode.child) {\n        // Otherwise, its children have to be processed.\n        _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n      }\n      // We also have to query the DOM directly in order to catch elements inserted through\n      // Renderer2. Note that this is __not__ optimal, because we're walking similar trees multiple\n      // times. ViewEngine could do it more efficiently, because all the insertions go through\n      // Renderer2, however that's not the case in Ivy. This approach is being used because:\n      // 1. Matching the ViewEngine behavior would mean potentially introducing a dependency\n      //    from `Renderer2` to Ivy which could bring Ivy code into ViewEngine.\n      // 2. It allows us to capture nodes that were inserted directly via the DOM.\n      nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);\n    }\n    // In all cases, if a dynamic container exists for this node, each view inside it has to be\n    // processed.\n    const nodeOrContainer = lView[tNode.index];\n    if (isLContainer(nodeOrContainer)) {\n      _queryNodeChildrenInContainer(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  } else if (tNode.type & 4 /* TNodeType.Container */) {\n    // Case 2: the TNode is a container\n    // The native node has to be checked.\n    const lContainer = lView[tNode.index];\n    _addQueryMatch(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode);\n    // Each view inside the container has to be processed.\n    _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode);\n  } else if (tNode.type & 16 /* TNodeType.Projection */) {\n    // Case 3: the TNode is a projection insertion point (i.e. a <ng-content>).\n    // The nodes projected at this location all need to be processed.\n    const componentView = lView[DECLARATION_COMPONENT_VIEW];\n    const componentHost = componentView[T_HOST];\n    const head = componentHost.projection[tNode.projection];\n    if (Array.isArray(head)) {\n      for (let nativeNode of head) {\n        _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode);\n      }\n    } else if (head) {\n      const nextLView = componentView[PARENT];\n      const nextTNode = nextLView[TVIEW].data[head.index];\n      _queryNodeChildren(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  } else if (tNode.child) {\n    // Case 4: the TNode is a view.\n    _queryNodeChildren(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);\n  }\n  // We don't want to go to the next sibling of the root node.\n  if (rootNativeNode !== nativeNode) {\n    // To determine the next node to be processed, we need to use the next or the projectionNext\n    // link, depending on whether the current node has been projected.\n    const nextTNode = tNode.flags & 2 /* TNodeFlags.isProjected */ ? tNode.projectionNext : tNode.next;\n    if (nextTNode) {\n      _queryNodeChildren(nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  }\n}\n/**\n * Process all TNodes in a given container.\n *\n * @param lContainer the container to be processed\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _queryNodeChildrenInContainer(lContainer, predicate, matches, elementsOnly, rootNativeNode) {\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    const childView = lContainer[i];\n    const firstChild = childView[TVIEW].firstChild;\n    if (firstChild) {\n      _queryNodeChildren(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);\n    }\n  }\n}\n/**\n * Match the current native node against the predicate.\n *\n * @param nativeNode the current native node\n * @param predicate the predicate to match\n * @param matches the list of positive matches\n * @param elementsOnly whether only elements should be searched\n * @param rootNativeNode the root native node on which predicate should not be matched\n */\nfunction _addQueryMatch(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {\n  if (rootNativeNode !== nativeNode) {\n    const debugNode = getDebugNode(nativeNode);\n    if (!debugNode) {\n      return;\n    }\n    // Type of the \"predicate and \"matches\" array are set based on the value of\n    // the \"elementsOnly\" parameter. TypeScript is not able to properly infer these\n    // types with generics, so we manually cast the parameters accordingly.\n    if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n      matches.push(debugNode);\n    } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n      matches.push(debugNode);\n    }\n  }\n}\n/**\n * Match all the descendants of a DOM node against a predicate.\n *\n * @param nativeNode the current native node\n * @param predicate the predicate to match\n * @param matches the list where matches are stored\n * @param elementsOnly whether only elements should be searched\n */\nfunction _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {\n  const nodes = parentNode.childNodes;\n  const length = nodes.length;\n  for (let i = 0; i < length; i++) {\n    const node = nodes[i];\n    const debugNode = getDebugNode(node);\n    if (debugNode) {\n      if (elementsOnly && debugNode instanceof DebugElement && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n        matches.push(debugNode);\n      } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {\n        matches.push(debugNode);\n      }\n      _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);\n    }\n  }\n}\n/**\n * Iterates through the property bindings for a given node and generates\n * a map of property names to values. This map only contains property bindings\n * defined in templates, not in host bindings.\n */\nfunction collectPropertyBindings(properties, tNode, lView, tData) {\n  let bindingIndexes = tNode.propertyBindings;\n  if (bindingIndexes !== null) {\n    for (let i = 0; i < bindingIndexes.length; i++) {\n      const bindingIndex = bindingIndexes[i];\n      const propMetadata = tData[bindingIndex];\n      const metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);\n      const propertyName = metadataParts[0];\n      if (metadataParts.length > 1) {\n        let value = metadataParts[1];\n        for (let j = 1; j < metadataParts.length - 1; j++) {\n          value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];\n        }\n        properties[propertyName] = value;\n      } else {\n        properties[propertyName] = lView[bindingIndex];\n      }\n    }\n  }\n}\n// Need to keep the nodes in a global Map so that multiple angular apps are supported.\nconst _nativeNodeToDebugNode = new Map();\nconst NG_DEBUG_PROPERTY = '__ng_debug__';\n/**\n * @publicApi\n */\nfunction getDebugNode(nativeNode) {\n  if (nativeNode instanceof Node) {\n    if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {\n      nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement(nativeNode) : new DebugNode(nativeNode);\n    }\n    return nativeNode[NG_DEBUG_PROPERTY];\n  }\n  return null;\n}\nfunction getAllDebugNodes() {\n  return Array.from(_nativeNodeToDebugNode.values());\n}\nfunction indexDebugNode(node) {\n  _nativeNodeToDebugNode.set(node.nativeNode, node);\n}\nfunction removeDebugNodeFromIndex(node) {\n  _nativeNodeToDebugNode.delete(node.nativeNode);\n}\nclass DefaultIterableDifferFactory {\n  constructor() {}\n  supports(obj) {\n    return isListLikeIterable(obj);\n  }\n  create(trackByFn) {\n    return new DefaultIterableDiffer(trackByFn);\n  }\n}\nconst trackByIdentity = (index, item) => item;\n/**\n * @deprecated v4.0.0 - Should not be part of public API.\n * @publicApi\n */\nclass DefaultIterableDiffer {\n  length = 0;\n  // TODO: confirm the usage of `collection` as it's unused, readonly and on a non public API.\n  collection;\n  // Keeps track of the used records at any point in time (during & across `_check()` calls)\n  _linkedRecords = null;\n  // Keeps track of the removed records at any point in time during `_check()` calls.\n  _unlinkedRecords = null;\n  _previousItHead = null;\n  _itHead = null;\n  _itTail = null;\n  _additionsHead = null;\n  _additionsTail = null;\n  _movesHead = null;\n  _movesTail = null;\n  _removalsHead = null;\n  _removalsTail = null;\n  // Keeps track of records where custom track by is the same, but item identity has changed\n  _identityChangesHead = null;\n  _identityChangesTail = null;\n  _trackByFn;\n  constructor(trackByFn) {\n    this._trackByFn = trackByFn || trackByIdentity;\n  }\n  forEachItem(fn) {\n    let record;\n    for (record = this._itHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n  forEachOperation(fn) {\n    let nextIt = this._itHead;\n    let nextRemove = this._removalsHead;\n    let addRemoveOffset = 0;\n    let moveOffsets = null;\n    while (nextIt || nextRemove) {\n      // Figure out which is the next record to process\n      // Order: remove, add, move\n      const record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;\n      const adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n      const currentIndex = record.currentIndex;\n      // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary\n      if (record === nextRemove) {\n        addRemoveOffset--;\n        nextRemove = nextRemove._nextRemoved;\n      } else {\n        nextIt = nextIt._next;\n        if (record.previousIndex == null) {\n          addRemoveOffset++;\n        } else {\n          // INVARIANT:  currentIndex < previousIndex\n          if (!moveOffsets) moveOffsets = [];\n          const localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n          const localCurrentIndex = currentIndex - addRemoveOffset;\n          if (localMovePreviousIndex != localCurrentIndex) {\n            for (let i = 0; i < localMovePreviousIndex; i++) {\n              const offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;\n              const index = offset + i;\n              if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n                moveOffsets[i] = offset + 1;\n              }\n            }\n            const previousIndex = record.previousIndex;\n            moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n          }\n        }\n      }\n      if (adjPreviousIndex !== currentIndex) {\n        fn(record, adjPreviousIndex, currentIndex);\n      }\n    }\n  }\n  forEachPreviousItem(fn) {\n    let record;\n    for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n  forEachAddedItem(fn) {\n    let record;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n  forEachMovedItem(fn) {\n    let record;\n    for (record = this._movesHead; record !== null; record = record._nextMoved) {\n      fn(record);\n    }\n  }\n  forEachRemovedItem(fn) {\n    let record;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n  forEachIdentityChange(fn) {\n    let record;\n    for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n      fn(record);\n    }\n  }\n  diff(collection) {\n    if (collection == null) collection = [];\n    if (!isListLikeIterable(collection)) {\n      throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && `Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);\n    }\n    if (this.check(collection)) {\n      return this;\n    } else {\n      return null;\n    }\n  }\n  onDestroy() {}\n  check(collection) {\n    this._reset();\n    let record = this._itHead;\n    let mayBeDirty = false;\n    let index;\n    let item;\n    let itemTrackBy;\n    if (Array.isArray(collection)) {\n      this.length = collection.length;\n      for (let index = 0; index < this.length; index++) {\n        item = collection[index];\n        itemTrackBy = this._trackByFn(index, item);\n        if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n          record = this._mismatch(record, item, itemTrackBy, index);\n          mayBeDirty = true;\n        } else {\n          if (mayBeDirty) {\n            // TODO(misko): can we limit this to duplicates only?\n            record = this._verifyReinsertion(record, item, itemTrackBy, index);\n          }\n          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        }\n        record = record._next;\n      }\n    } else {\n      index = 0;\n      iterateListLike(collection, item => {\n        itemTrackBy = this._trackByFn(index, item);\n        if (record === null || !Object.is(record.trackById, itemTrackBy)) {\n          record = this._mismatch(record, item, itemTrackBy, index);\n          mayBeDirty = true;\n        } else {\n          if (mayBeDirty) {\n            // TODO(misko): can we limit this to duplicates only?\n            record = this._verifyReinsertion(record, item, itemTrackBy, index);\n          }\n          if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        }\n        record = record._next;\n        index++;\n      });\n      this.length = index;\n    }\n    this._truncate(record);\n    this.collection = collection;\n    return this.isDirty;\n  }\n  /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\n   * changes.\n   */\n  get isDirty() {\n    return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;\n  }\n  /**\n   * Reset the state of the change objects to show no changes. This means set previousKey to\n   * currentKey, and clear all of the queues (additions, moves, removals).\n   * Set the previousIndexes of moved and added items to their currentIndexes\n   * Reset the list of additions, moves and removals\n   *\n   * @internal\n   */\n  _reset() {\n    if (this.isDirty) {\n      let record;\n      for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        record.previousIndex = record.currentIndex;\n      }\n      this._additionsHead = this._additionsTail = null;\n      for (record = this._movesHead; record !== null; record = record._nextMoved) {\n        record.previousIndex = record.currentIndex;\n      }\n      this._movesHead = this._movesTail = null;\n      this._removalsHead = this._removalsTail = null;\n      this._identityChangesHead = this._identityChangesTail = null;\n      // TODO(vicb): when assert gets supported\n      // assert(!this.isDirty);\n    }\n  }\n  /**\n   * This is the core function which handles differences between collections.\n   *\n   * - `record` is the record which we saw at this position last time. If null then it is a new\n   *   item.\n   * - `item` is the current item in the collection\n   * - `index` is the position of the item in the collection\n   *\n   * @internal\n   */\n  _mismatch(record, item, itemTrackBy, index) {\n    // The previous record after which we will append the current one.\n    let previousRecord;\n    if (record === null) {\n      previousRecord = this._itTail;\n    } else {\n      previousRecord = record._prev;\n      // Remove the record from the collection since we know it does not match the item.\n      this._remove(record);\n    }\n    // See if we have evicted the item, which used to be at some anterior position of _itHead list.\n    record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n    if (record !== null) {\n      // It is an item which we have evicted earlier: reinsert it back into the list.\n      // But first we need to check if identity changed, so we can update in view if necessary.\n      if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n      this._reinsertAfter(record, previousRecord, index);\n    } else {\n      // Attempt to see if the item is at some posterior position of _itHead list.\n      record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n      if (record !== null) {\n        // We have the item in _itHead at/after `index` position. We need to move it forward in the\n        // collection.\n        // But first we need to check if identity changed, so we can update in view if necessary.\n        if (!Object.is(record.item, item)) this._addIdentityChange(record, item);\n        this._moveAfter(record, previousRecord, index);\n      } else {\n        // It is a new item: add it.\n        record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);\n      }\n    }\n    return record;\n  }\n  /**\n   * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\n   *\n   * Use case: `[a, a]` => `[b, a, a]`\n   *\n   * If we did not have this check then the insertion of `b` would:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) leave `a` at index `1` as is. <-- this is wrong!\n   *   3) reinsert `a` at index 2. <-- this is wrong!\n   *\n   * The correct behavior is:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) reinsert `a` at index 1.\n   *   3) move `a` at from `1` to `2`.\n   *\n   *\n   * Double check that we have not evicted a duplicate item. We need to check if the item type may\n   * have already been removed:\n   * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\n   * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\n   * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\n   * at the end.\n   *\n   * @internal\n   */\n  _verifyReinsertion(record, item, itemTrackBy, index) {\n    let reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n    if (reinsertRecord !== null) {\n      record = this._reinsertAfter(reinsertRecord, record._prev, index);\n    } else if (record.currentIndex != index) {\n      record.currentIndex = index;\n      this._addToMoves(record, index);\n    }\n    return record;\n  }\n  /**\n   * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection\n   *\n   * - `record` The first excess {@link IterableChangeRecord_}.\n   *\n   * @internal\n   */\n  _truncate(record) {\n    // Anything after that needs to be removed;\n    while (record !== null) {\n      const nextRecord = record._next;\n      this._addToRemovals(this._unlink(record));\n      record = nextRecord;\n    }\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.clear();\n    }\n    if (this._additionsTail !== null) {\n      this._additionsTail._nextAdded = null;\n    }\n    if (this._movesTail !== null) {\n      this._movesTail._nextMoved = null;\n    }\n    if (this._itTail !== null) {\n      this._itTail._next = null;\n    }\n    if (this._removalsTail !== null) {\n      this._removalsTail._nextRemoved = null;\n    }\n    if (this._identityChangesTail !== null) {\n      this._identityChangesTail._nextIdentityChange = null;\n    }\n  }\n  /** @internal */\n  _reinsertAfter(record, prevRecord, index) {\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.remove(record);\n    }\n    const prev = record._prevRemoved;\n    const next = record._nextRemoved;\n    if (prev === null) {\n      this._removalsHead = next;\n    } else {\n      prev._nextRemoved = next;\n    }\n    if (next === null) {\n      this._removalsTail = prev;\n    } else {\n      next._prevRemoved = prev;\n    }\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n  /** @internal */\n  _moveAfter(record, prevRecord, index) {\n    this._unlink(record);\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n  /** @internal */\n  _addAfter(record, prevRecord, index) {\n    this._insertAfter(record, prevRecord, index);\n    if (this._additionsTail === null) {\n      // TODO(vicb):\n      // assert(this._additionsHead === null);\n      this._additionsTail = this._additionsHead = record;\n    } else {\n      // TODO(vicb):\n      // assert(_additionsTail._nextAdded === null);\n      // assert(record._nextAdded === null);\n      this._additionsTail = this._additionsTail._nextAdded = record;\n    }\n    return record;\n  }\n  /** @internal */\n  _insertAfter(record, prevRecord, index) {\n    // TODO(vicb):\n    // assert(record != prevRecord);\n    // assert(record._next === null);\n    // assert(record._prev === null);\n    const next = prevRecord === null ? this._itHead : prevRecord._next;\n    // TODO(vicb):\n    // assert(next != record);\n    // assert(prevRecord != record);\n    record._next = next;\n    record._prev = prevRecord;\n    if (next === null) {\n      this._itTail = record;\n    } else {\n      next._prev = record;\n    }\n    if (prevRecord === null) {\n      this._itHead = record;\n    } else {\n      prevRecord._next = record;\n    }\n    if (this._linkedRecords === null) {\n      this._linkedRecords = new _DuplicateMap();\n    }\n    this._linkedRecords.put(record);\n    record.currentIndex = index;\n    return record;\n  }\n  /** @internal */\n  _remove(record) {\n    return this._addToRemovals(this._unlink(record));\n  }\n  /** @internal */\n  _unlink(record) {\n    if (this._linkedRecords !== null) {\n      this._linkedRecords.remove(record);\n    }\n    const prev = record._prev;\n    const next = record._next;\n    // TODO(vicb):\n    // assert((record._prev = null) === null);\n    // assert((record._next = null) === null);\n    if (prev === null) {\n      this._itHead = next;\n    } else {\n      prev._next = next;\n    }\n    if (next === null) {\n      this._itTail = prev;\n    } else {\n      next._prev = prev;\n    }\n    return record;\n  }\n  /** @internal */\n  _addToMoves(record, toIndex) {\n    // TODO(vicb):\n    // assert(record._nextMoved === null);\n    if (record.previousIndex === toIndex) {\n      return record;\n    }\n    if (this._movesTail === null) {\n      // TODO(vicb):\n      // assert(_movesHead === null);\n      this._movesTail = this._movesHead = record;\n    } else {\n      // TODO(vicb):\n      // assert(_movesTail._nextMoved === null);\n      this._movesTail = this._movesTail._nextMoved = record;\n    }\n    return record;\n  }\n  _addToRemovals(record) {\n    if (this._unlinkedRecords === null) {\n      this._unlinkedRecords = new _DuplicateMap();\n    }\n    this._unlinkedRecords.put(record);\n    record.currentIndex = null;\n    record._nextRemoved = null;\n    if (this._removalsTail === null) {\n      // TODO(vicb):\n      // assert(_removalsHead === null);\n      this._removalsTail = this._removalsHead = record;\n      record._prevRemoved = null;\n    } else {\n      // TODO(vicb):\n      // assert(_removalsTail._nextRemoved === null);\n      // assert(record._nextRemoved === null);\n      record._prevRemoved = this._removalsTail;\n      this._removalsTail = this._removalsTail._nextRemoved = record;\n    }\n    return record;\n  }\n  /** @internal */\n  _addIdentityChange(record, item) {\n    record.item = item;\n    if (this._identityChangesTail === null) {\n      this._identityChangesTail = this._identityChangesHead = record;\n    } else {\n      this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n    }\n    return record;\n  }\n}\nclass IterableChangeRecord_ {\n  item;\n  trackById;\n  currentIndex = null;\n  previousIndex = null;\n  /** @internal */\n  _nextPrevious = null;\n  /** @internal */\n  _prev = null;\n  /** @internal */\n  _next = null;\n  /** @internal */\n  _prevDup = null;\n  /** @internal */\n  _nextDup = null;\n  /** @internal */\n  _prevRemoved = null;\n  /** @internal */\n  _nextRemoved = null;\n  /** @internal */\n  _nextAdded = null;\n  /** @internal */\n  _nextMoved = null;\n  /** @internal */\n  _nextIdentityChange = null;\n  constructor(item, trackById) {\n    this.item = item;\n    this.trackById = trackById;\n  }\n}\n// A linked list of IterableChangeRecords with the same IterableChangeRecord_.item\nclass _DuplicateItemRecordList {\n  /** @internal */\n  _head = null;\n  /** @internal */\n  _tail = null;\n  /**\n   * Append the record to the list of duplicates.\n   *\n   * Note: by design all records in the list of duplicates hold the same value in record.item.\n   */\n  add(record) {\n    if (this._head === null) {\n      this._head = this._tail = record;\n      record._nextDup = null;\n      record._prevDup = null;\n    } else {\n      // TODO(vicb):\n      // assert(record.item ==  _head.item ||\n      //       record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);\n      this._tail._nextDup = record;\n      record._prevDup = this._tail;\n      record._nextDup = null;\n      this._tail = record;\n    }\n  }\n  // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and\n  // IterableChangeRecord_.currentIndex >= atOrAfterIndex\n  get(trackById, atOrAfterIndex) {\n    let record;\n    for (record = this._head; record !== null; record = record._nextDup) {\n      if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {\n        return record;\n      }\n    }\n    return null;\n  }\n  /**\n   * Remove one {@link IterableChangeRecord_} from the list of duplicates.\n   *\n   * Returns whether the list of duplicates is empty.\n   */\n  remove(record) {\n    // TODO(vicb):\n    // assert(() {\n    //  // verify that the record being removed is in the list.\n    //  for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {\n    //    if (identical(cursor, record)) return true;\n    //  }\n    //  return false;\n    //});\n    const prev = record._prevDup;\n    const next = record._nextDup;\n    if (prev === null) {\n      this._head = next;\n    } else {\n      prev._nextDup = next;\n    }\n    if (next === null) {\n      this._tail = prev;\n    } else {\n      next._prevDup = prev;\n    }\n    return this._head === null;\n  }\n}\nclass _DuplicateMap {\n  map = new Map();\n  put(record) {\n    const key = record.trackById;\n    let duplicates = this.map.get(key);\n    if (!duplicates) {\n      duplicates = new _DuplicateItemRecordList();\n      this.map.set(key, duplicates);\n    }\n    duplicates.add(record);\n  }\n  /**\n   * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we\n   * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.\n   *\n   * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\n   * have any more `a`s needs to return the second `a`.\n   */\n  get(trackById, atOrAfterIndex) {\n    const key = trackById;\n    const recordList = this.map.get(key);\n    return recordList ? recordList.get(trackById, atOrAfterIndex) : null;\n  }\n  /**\n   * Removes a {@link IterableChangeRecord_} from the list of duplicates.\n   *\n   * The list of duplicates also is removed from the map if it gets empty.\n   */\n  remove(record) {\n    const key = record.trackById;\n    const recordList = this.map.get(key);\n    // Remove the list of duplicates when it gets empty\n    if (recordList.remove(record)) {\n      this.map.delete(key);\n    }\n    return record;\n  }\n  get isEmpty() {\n    return this.map.size === 0;\n  }\n  clear() {\n    this.map.clear();\n  }\n}\nfunction getPreviousIndex(item, addRemoveOffset, moveOffsets) {\n  const previousIndex = item.previousIndex;\n  if (previousIndex === null) return previousIndex;\n  let moveOffset = 0;\n  if (moveOffsets && previousIndex < moveOffsets.length) {\n    moveOffset = moveOffsets[previousIndex];\n  }\n  return previousIndex + addRemoveOffset + moveOffset;\n}\nclass DefaultKeyValueDifferFactory {\n  constructor() {}\n  supports(obj) {\n    return obj instanceof Map || isJsObject(obj);\n  }\n  create() {\n    return new DefaultKeyValueDiffer();\n  }\n}\nclass DefaultKeyValueDiffer {\n  _records = new Map();\n  _mapHead = null;\n  // _appendAfter is used in the check loop\n  _appendAfter = null;\n  _previousMapHead = null;\n  _changesHead = null;\n  _changesTail = null;\n  _additionsHead = null;\n  _additionsTail = null;\n  _removalsHead = null;\n  _removalsTail = null;\n  get isDirty() {\n    return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;\n  }\n  forEachItem(fn) {\n    let record;\n    for (record = this._mapHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n  forEachPreviousItem(fn) {\n    let record;\n    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n  forEachChangedItem(fn) {\n    let record;\n    for (record = this._changesHead; record !== null; record = record._nextChanged) {\n      fn(record);\n    }\n  }\n  forEachAddedItem(fn) {\n    let record;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n  forEachRemovedItem(fn) {\n    let record;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n  diff(map) {\n    if (!map) {\n      map = new Map();\n    } else if (!(map instanceof Map || isJsObject(map))) {\n      throw new RuntimeError(900 /* RuntimeErrorCode.INVALID_DIFFER_INPUT */, ngDevMode && `Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);\n    }\n    return this.check(map) ? this : null;\n  }\n  onDestroy() {}\n  /**\n   * Check the current state of the map vs the previous.\n   * The algorithm is optimised for when the keys do no change.\n   */\n  check(map) {\n    this._reset();\n    let insertBefore = this._mapHead;\n    this._appendAfter = null;\n    this._forEach(map, (value, key) => {\n      if (insertBefore && insertBefore.key === key) {\n        this._maybeAddToChanges(insertBefore, value);\n        this._appendAfter = insertBefore;\n        insertBefore = insertBefore._next;\n      } else {\n        const record = this._getOrCreateRecordForKey(key, value);\n        insertBefore = this._insertBeforeOrAppend(insertBefore, record);\n      }\n    });\n    // Items remaining at the end of the list have been deleted\n    if (insertBefore) {\n      if (insertBefore._prev) {\n        insertBefore._prev._next = null;\n      }\n      this._removalsHead = insertBefore;\n      for (let record = insertBefore; record !== null; record = record._nextRemoved) {\n        if (record === this._mapHead) {\n          this._mapHead = null;\n        }\n        this._records.delete(record.key);\n        record._nextRemoved = record._next;\n        record.previousValue = record.currentValue;\n        record.currentValue = null;\n        record._prev = null;\n        record._next = null;\n      }\n    }\n    // Make sure tails have no next records from previous runs\n    if (this._changesTail) this._changesTail._nextChanged = null;\n    if (this._additionsTail) this._additionsTail._nextAdded = null;\n    return this.isDirty;\n  }\n  /**\n   * Inserts a record before `before` or append at the end of the list when `before` is null.\n   *\n   * Notes:\n   * - This method appends at `this._appendAfter`,\n   * - This method updates `this._appendAfter`,\n   * - The return value is the new value for the insertion pointer.\n   */\n  _insertBeforeOrAppend(before, record) {\n    if (before) {\n      const prev = before._prev;\n      record._next = before;\n      record._prev = prev;\n      before._prev = record;\n      if (prev) {\n        prev._next = record;\n      }\n      if (before === this._mapHead) {\n        this._mapHead = record;\n      }\n      this._appendAfter = before;\n      return before;\n    }\n    if (this._appendAfter) {\n      this._appendAfter._next = record;\n      record._prev = this._appendAfter;\n    } else {\n      this._mapHead = record;\n    }\n    this._appendAfter = record;\n    return null;\n  }\n  _getOrCreateRecordForKey(key, value) {\n    if (this._records.has(key)) {\n      const record = this._records.get(key);\n      this._maybeAddToChanges(record, value);\n      const prev = record._prev;\n      const next = record._next;\n      if (prev) {\n        prev._next = next;\n      }\n      if (next) {\n        next._prev = prev;\n      }\n      record._next = null;\n      record._prev = null;\n      return record;\n    }\n    const record = new KeyValueChangeRecord_(key);\n    this._records.set(key, record);\n    record.currentValue = value;\n    this._addToAdditions(record);\n    return record;\n  }\n  /** @internal */\n  _reset() {\n    if (this.isDirty) {\n      let record;\n      // let `_previousMapHead` contain the state of the map before the changes\n      this._previousMapHead = this._mapHead;\n      for (record = this._previousMapHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n      // Update `record.previousValue` with the value of the item before the changes\n      // We need to update all changed items (that's those which have been added and changed)\n      for (record = this._changesHead; record !== null; record = record._nextChanged) {\n        record.previousValue = record.currentValue;\n      }\n      for (record = this._additionsHead; record != null; record = record._nextAdded) {\n        record.previousValue = record.currentValue;\n      }\n      this._changesHead = this._changesTail = null;\n      this._additionsHead = this._additionsTail = null;\n      this._removalsHead = null;\n    }\n  }\n  // Add the record or a given key to the list of changes only when the value has actually changed\n  _maybeAddToChanges(record, newValue) {\n    if (!Object.is(newValue, record.currentValue)) {\n      record.previousValue = record.currentValue;\n      record.currentValue = newValue;\n      this._addToChanges(record);\n    }\n  }\n  _addToAdditions(record) {\n    if (this._additionsHead === null) {\n      this._additionsHead = this._additionsTail = record;\n    } else {\n      this._additionsTail._nextAdded = record;\n      this._additionsTail = record;\n    }\n  }\n  _addToChanges(record) {\n    if (this._changesHead === null) {\n      this._changesHead = this._changesTail = record;\n    } else {\n      this._changesTail._nextChanged = record;\n      this._changesTail = record;\n    }\n  }\n  /** @internal */\n  _forEach(obj, fn) {\n    if (obj instanceof Map) {\n      obj.forEach(fn);\n    } else {\n      Object.keys(obj).forEach(k => fn(obj[k], k));\n    }\n  }\n}\nclass KeyValueChangeRecord_ {\n  key;\n  previousValue = null;\n  currentValue = null;\n  /** @internal */\n  _nextPrevious = null;\n  /** @internal */\n  _next = null;\n  /** @internal */\n  _prev = null;\n  /** @internal */\n  _nextAdded = null;\n  /** @internal */\n  _nextRemoved = null;\n  /** @internal */\n  _nextChanged = null;\n  constructor(key) {\n    this.key = key;\n  }\n}\nfunction defaultIterableDiffersFactory() {\n  return new IterableDiffers([new DefaultIterableDifferFactory()]);\n}\n/**\n * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\n *\n * @publicApi\n */\nclass IterableDiffers {\n  factories;\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: IterableDiffers,\n    providedIn: 'root',\n    factory: defaultIterableDiffersFactory\n  });\n  constructor(factories) {\n    this.factories = factories;\n  }\n  static create(factories, parent) {\n    if (parent != null) {\n      const copied = parent.factories.slice();\n      factories = factories.concat(copied);\n    }\n    return new IterableDiffers(factories);\n  }\n  /**\n   * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the\n   * inherited {@link IterableDiffers} instance with the provided factories and return a new\n   * {@link IterableDiffers} instance.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example shows how to extend an existing list of factories,\n   * which will only be applied to the injector for this component and its children.\n   * This step is all that's required to make a new {@link IterableDiffer} available.\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     IterableDiffers.extend([new ImmutableListDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories) {\n    return {\n      provide: IterableDiffers,\n      useFactory: parent => {\n        // if parent is null, it means that we are in the root injector and we have just overridden\n        // the default injection mechanism for IterableDiffers, in such a case just assume\n        // `defaultIterableDiffersFactory`.\n        return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[IterableDiffers, new SkipSelf(), new Optional()]]\n    };\n  }\n  find(iterable) {\n    const factory = this.factories.find(f => f.supports(iterable));\n    if (factory != null) {\n      return factory;\n    } else {\n      throw new RuntimeError(901 /* RuntimeErrorCode.NO_SUPPORTING_DIFFER_FACTORY */, ngDevMode && `Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);\n    }\n  }\n}\nfunction getTypeNameForDebugging(type) {\n  return type['name'] || typeof type;\n}\nfunction defaultKeyValueDiffersFactory() {\n  return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);\n}\n/**\n * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\n *\n * @publicApi\n */\nclass KeyValueDiffers {\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: KeyValueDiffers,\n    providedIn: 'root',\n    factory: defaultKeyValueDiffersFactory\n  });\n  factories;\n  constructor(factories) {\n    this.factories = factories;\n  }\n  static create(factories, parent) {\n    if (parent) {\n      const copied = parent.factories.slice();\n      factories = factories.concat(copied);\n    }\n    return new KeyValueDiffers(factories);\n  }\n  /**\n   * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the\n   * inherited {@link KeyValueDiffers} instance with the provided factories and return a new\n   * {@link KeyValueDiffers} instance.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * The following example shows how to extend an existing list of factories,\n   * which will only be applied to the injector for this component and its children.\n   * This step is all that's required to make a new {@link KeyValueDiffer} available.\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     KeyValueDiffers.extend([new ImmutableMapDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories) {\n    return {\n      provide: KeyValueDiffers,\n      useFactory: parent => {\n        // if parent is null, it means that we are in the root injector and we have just overridden\n        // the default injection mechanism for KeyValueDiffers, in such a case just assume\n        // `defaultKeyValueDiffersFactory`.\n        return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[KeyValueDiffers, new SkipSelf(), new Optional()]]\n    };\n  }\n  find(kv) {\n    const factory = this.factories.find(f => f.supports(kv));\n    if (factory) {\n      return factory;\n    }\n    throw new RuntimeError(901 /* RuntimeErrorCode.NO_SUPPORTING_DIFFER_FACTORY */, ngDevMode && `Cannot find a differ supporting object '${kv}'`);\n  }\n}\n\n/**\n * Structural diffing for `Object`s and `Map`s.\n */\nconst keyValDiff = [new DefaultKeyValueDifferFactory()];\n/**\n * Structural diffing for `Iterable` types such as `Array`s.\n */\nconst iterableDiff = [new DefaultIterableDifferFactory()];\nconst defaultIterableDiffers = new IterableDiffers(iterableDiff);\nconst defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);\n\n/**\n * @module\n * @description\n * Change detection enables data binding in Angular.\n */\n\n/**\n * This platform has to be included in any other platform\n *\n * @publicApi\n */\nconst platformCore = createPlatformFactory(null, 'core', []);\n\n/**\n * Re-exported by `BrowserModule`, which is included automatically in the root\n * `AppModule` when you create a new app with the CLI `new` command. Eagerly injects\n * `ApplicationRef` to instantiate it.\n *\n * @publicApi\n */\nclass ApplicationModule {\n  // Inject ApplicationRef to make it eager...\n  constructor(appRef) {}\n  static ɵfac = function ApplicationModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ApplicationModule)(ɵɵinject(ApplicationRef));\n  };\n  static ɵmod = /*@__PURE__*/ɵɵdefineNgModule({\n    type: ApplicationModule\n  });\n  static ɵinj = /*@__PURE__*/ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && setClassMetadata(ApplicationModule, [{\n    type: NgModule\n  }], () => [{\n    type: ApplicationRef\n  }], null);\n})();\n\n/**\n * The default equality function used for `signal` and `computed`, which uses referential equality.\n */\nfunction defaultEquals(a, b) {\n  return Object.is(a, b);\n}\n\n/**\n * The currently active consumer `ReactiveNode`, if running code in a reactive context.\n *\n * Change this via `setActiveConsumer`.\n */\nlet activeConsumer = null;\nlet inNotificationPhase = false;\n/**\n * Global epoch counter. Incremented whenever a source signal is set.\n */\nlet epoch = 1;\n/**\n * Symbol used to tell `Signal`s apart from other functions.\n *\n * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values.\n */\nconst SIGNAL = /* @__PURE__ */Symbol('SIGNAL');\nfunction setActiveConsumer(consumer) {\n  const prev = activeConsumer;\n  activeConsumer = consumer;\n  return prev;\n}\nfunction getActiveConsumer() {\n  return activeConsumer;\n}\nfunction isInNotificationPhase() {\n  return inNotificationPhase;\n}\nfunction isReactive(value) {\n  return value[SIGNAL] !== undefined;\n}\nconst REACTIVE_NODE = {\n  version: 0,\n  lastCleanEpoch: 0,\n  dirty: false,\n  producerNode: undefined,\n  producerLastReadVersion: undefined,\n  producerIndexOfThis: undefined,\n  nextProducerIndex: 0,\n  liveConsumerNode: undefined,\n  liveConsumerIndexOfThis: undefined,\n  consumerAllowSignalWrites: false,\n  consumerIsAlwaysLive: false,\n  producerMustRecompute: () => false,\n  producerRecomputeValue: () => {},\n  consumerMarkedDirty: () => {},\n  consumerOnSignalRead: () => {}\n};\n/**\n * Called by implementations when a producer's signal is read.\n */\nfunction producerAccessed(node) {\n  if (inNotificationPhase) {\n    throw new Error(typeof ngDevMode !== 'undefined' && ngDevMode ? `Assertion error: signal read during notification phase` : '');\n  }\n  if (activeConsumer === null) {\n    // Accessed outside of a reactive context, so nothing to record.\n    return;\n  }\n  activeConsumer.consumerOnSignalRead(node);\n  // This producer is the `idx`th dependency of `activeConsumer`.\n  const idx = activeConsumer.nextProducerIndex++;\n  assertConsumerNode(activeConsumer);\n  if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) {\n    // There's been a change in producers since the last execution of `activeConsumer`.\n    // `activeConsumer.producerNode[idx]` holds a stale dependency which will be be removed and\n    // replaced with `this`.\n    //\n    // If `activeConsumer` isn't live, then this is a no-op, since we can replace the producer in\n    // `activeConsumer.producerNode` directly. However, if `activeConsumer` is live, then we need\n    // to remove it from the stale producer's `liveConsumer`s.\n    if (consumerIsLive(activeConsumer)) {\n      const staleProducer = activeConsumer.producerNode[idx];\n      producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]);\n      // At this point, the only record of `staleProducer` is the reference at\n      // `activeConsumer.producerNode[idx]` which will be overwritten below.\n    }\n  }\n  if (activeConsumer.producerNode[idx] !== node) {\n    // We're a new dependency of the consumer (at `idx`).\n    activeConsumer.producerNode[idx] = node;\n    // If the active consumer is live, then add it as a live consumer. If not, then use 0 as a\n    // placeholder value.\n    activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0;\n  }\n  activeConsumer.producerLastReadVersion[idx] = node.version;\n}\n/**\n * Increment the global epoch counter.\n *\n * Called by source producers (that is, not computeds) whenever their values change.\n */\nfunction producerIncrementEpoch() {\n  epoch++;\n}\n/**\n * Ensure this producer's `version` is up-to-date.\n */\nfunction producerUpdateValueVersion(node) {\n  if (consumerIsLive(node) && !node.dirty) {\n    // A live consumer will be marked dirty by producers, so a clean state means that its version\n    // is guaranteed to be up-to-date.\n    return;\n  }\n  if (!node.dirty && node.lastCleanEpoch === epoch) {\n    // Even non-live consumers can skip polling if they previously found themselves to be clean at\n    // the current epoch, since their dependencies could not possibly have changed (such a change\n    // would've increased the epoch).\n    return;\n  }\n  if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) {\n    // None of our producers report a change since the last time they were read, so no\n    // recomputation of our value is necessary, and we can consider ourselves clean.\n    producerMarkClean(node);\n    return;\n  }\n  node.producerRecomputeValue(node);\n  // After recomputing the value, we're no longer dirty.\n  producerMarkClean(node);\n}\n/**\n * Propagate a dirty notification to live consumers of this producer.\n */\nfunction producerNotifyConsumers(node) {\n  if (node.liveConsumerNode === undefined) {\n    return;\n  }\n  // Prevent signal reads when we're updating the graph\n  const prev = inNotificationPhase;\n  inNotificationPhase = true;\n  try {\n    for (const consumer of node.liveConsumerNode) {\n      if (!consumer.dirty) {\n        consumerMarkDirty(consumer);\n      }\n    }\n  } finally {\n    inNotificationPhase = prev;\n  }\n}\n/**\n * Whether this `ReactiveNode` in its producer capacity is currently allowed to initiate updates,\n * based on the current consumer context.\n */\nfunction producerUpdatesAllowed() {\n  return activeConsumer?.consumerAllowSignalWrites !== false;\n}\nfunction consumerMarkDirty(node) {\n  node.dirty = true;\n  producerNotifyConsumers(node);\n  node.consumerMarkedDirty?.(node);\n}\nfunction producerMarkClean(node) {\n  node.dirty = false;\n  node.lastCleanEpoch = epoch;\n}\n/**\n * Prepare this consumer to run a computation in its reactive context.\n *\n * Must be called by subclasses which represent reactive computations, before those computations\n * begin.\n */\nfunction consumerBeforeComputation(node) {\n  node && (node.nextProducerIndex = 0);\n  return setActiveConsumer(node);\n}\n/**\n * Finalize this consumer's state after a reactive computation has run.\n *\n * Must be called by subclasses which represent reactive computations, after those computations\n * have finished.\n */\nfunction consumerAfterComputation(node, prevConsumer) {\n  setActiveConsumer(prevConsumer);\n  if (!node || node.producerNode === undefined || node.producerIndexOfThis === undefined || node.producerLastReadVersion === undefined) {\n    return;\n  }\n  if (consumerIsLive(node)) {\n    // For live consumers, we need to remove the producer -> consumer edge for any stale producers\n    // which weren't dependencies after the recomputation.\n    for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate the producer tracking arrays.\n  // Perf note: this is essentially truncating the length to `node.nextProducerIndex`, but\n  // benchmarking has shown that individual pop operations are faster.\n  while (node.producerNode.length > node.nextProducerIndex) {\n    node.producerNode.pop();\n    node.producerLastReadVersion.pop();\n    node.producerIndexOfThis.pop();\n  }\n}\n/**\n * Determine whether this consumer has any dependencies which have changed since the last time\n * they were read.\n */\nfunction consumerPollProducersForChange(node) {\n  assertConsumerNode(node);\n  // Poll producers for change.\n  for (let i = 0; i < node.producerNode.length; i++) {\n    const producer = node.producerNode[i];\n    const seenVersion = node.producerLastReadVersion[i];\n    // First check the versions. A mismatch means that the producer's value is known to have\n    // changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n    // The producer's version is the same as the last time we read it, but it might itself be\n    // stale. Force the producer to recompute its version (calculating a new value if necessary).\n    producerUpdateValueVersion(producer);\n    // Now when we do this check, `producer.version` is guaranteed to be up to date, so if the\n    // versions still match then it has not changed since the last time we read it.\n    if (seenVersion !== producer.version) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Disconnect this consumer from the graph.\n */\nfunction consumerDestroy(node) {\n  assertConsumerNode(node);\n  if (consumerIsLive(node)) {\n    // Drop all connections from the graph to this node.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Truncate all the arrays to drop all connection from this node to the graph.\n  node.producerNode.length = node.producerLastReadVersion.length = node.producerIndexOfThis.length = 0;\n  if (node.liveConsumerNode) {\n    node.liveConsumerNode.length = node.liveConsumerIndexOfThis.length = 0;\n  }\n}\n/**\n * Add `consumer` as a live consumer of this node.\n *\n * Note that this operation is potentially transitive. If this node becomes live, then it becomes\n * a live consumer of all of its current producers.\n */\nfunction producerAddLiveConsumer(node, consumer, indexOfThis) {\n  assertProducerNode(node);\n  if (node.liveConsumerNode.length === 0 && isConsumerNode(node)) {\n    // When going from 0 to 1 live consumers, we become a live consumer to our producers.\n    for (let i = 0; i < node.producerNode.length; i++) {\n      node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i);\n    }\n  }\n  node.liveConsumerIndexOfThis.push(indexOfThis);\n  return node.liveConsumerNode.push(consumer) - 1;\n}\n/**\n * Remove the live consumer at `idx`.\n */\nfunction producerRemoveLiveConsumerAtIndex(node, idx) {\n  assertProducerNode(node);\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && idx >= node.liveConsumerNode.length) {\n    throw new Error(`Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`);\n  }\n  if (node.liveConsumerNode.length === 1 && isConsumerNode(node)) {\n    // When removing the last live consumer, we will no longer be live. We need to remove\n    // ourselves from our producers' tracking (which may cause consumer-producers to lose\n    // liveness as well).\n    for (let i = 0; i < node.producerNode.length; i++) {\n      producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]);\n    }\n  }\n  // Move the last value of `liveConsumers` into `idx`. Note that if there's only a single\n  // live consumer, this is a no-op.\n  const lastIdx = node.liveConsumerNode.length - 1;\n  node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx];\n  node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx];\n  // Truncate the array.\n  node.liveConsumerNode.length--;\n  node.liveConsumerIndexOfThis.length--;\n  // If the index is still valid, then we need to fix the index pointer from the producer to this\n  // consumer, and update it from `lastIdx` to `idx` (accounting for the move above).\n  if (idx < node.liveConsumerNode.length) {\n    const idxProducer = node.liveConsumerIndexOfThis[idx];\n    const consumer = node.liveConsumerNode[idx];\n    assertConsumerNode(consumer);\n    consumer.producerIndexOfThis[idxProducer] = idx;\n  }\n}\nfunction consumerIsLive(node) {\n  return node.consumerIsAlwaysLive || (node?.liveConsumerNode?.length ?? 0) > 0;\n}\nfunction assertConsumerNode(node) {\n  node.producerNode ??= [];\n  node.producerIndexOfThis ??= [];\n  node.producerLastReadVersion ??= [];\n}\nfunction assertProducerNode(node) {\n  node.liveConsumerNode ??= [];\n  node.liveConsumerIndexOfThis ??= [];\n}\nfunction isConsumerNode(node) {\n  return node.producerNode !== undefined;\n}\n\n/**\n * Create a computed signal which derives a reactive value from an expression.\n */\nfunction createComputed(computation) {\n  const node = Object.create(COMPUTED_NODE);\n  node.computation = computation;\n  const computed = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion(node);\n    // Record that someone looked at this signal.\n    producerAccessed(node);\n    if (node.value === ERRORED$1) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  computed[SIGNAL] = node;\n  return computed;\n}\n/**\n * A dedicated symbol used before a computed value has been calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET$1 = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING$1 = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a computed signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED$1 = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst COMPUTED_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    value: UNSET$1,\n    dirty: true,\n    error: null,\n    equal: defaultEquals,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET$1 || node.value === COMPUTING$1;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING$1) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING$1;\n      const prevConsumer = consumerBeforeComputation(node);\n      let newValue;\n      try {\n        newValue = node.computation();\n      } catch (err) {\n        newValue = ERRORED$1;\n        node.error = err;\n      } finally {\n        consumerAfterComputation(node, prevConsumer);\n      }\n      if (oldValue !== UNSET$1 && oldValue !== ERRORED$1 && newValue !== ERRORED$1 && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\nfunction defaultThrowError() {\n  throw new Error();\n}\nlet throwInvalidWriteToSignalErrorFn = defaultThrowError;\nfunction throwInvalidWriteToSignalError() {\n  throwInvalidWriteToSignalErrorFn();\n}\nfunction setThrowInvalidWriteToSignalError(fn) {\n  throwInvalidWriteToSignalErrorFn = fn;\n}\n\n/**\n * If set, called after `WritableSignal`s are updated.\n *\n * This hook can be used to achieve various effects, such as running effects synchronously as part\n * of setting a signal.\n */\nlet postSignalSetFn = null;\n/**\n * Create a `Signal` that can be set or updated directly.\n */\nfunction createSignal(initialValue) {\n  const node = Object.create(SIGNAL_NODE);\n  node.value = initialValue;\n  const getter = () => {\n    producerAccessed(node);\n    return node.value;\n  };\n  getter[SIGNAL] = node;\n  return getter;\n}\nfunction setPostSignalSetFn(fn) {\n  const prev = postSignalSetFn;\n  postSignalSetFn = fn;\n  return prev;\n}\nfunction signalGetFn() {\n  producerAccessed(this);\n  return this.value;\n}\nfunction signalSetFn(node, newValue) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  if (!node.equal(node.value, newValue)) {\n    node.value = newValue;\n    signalValueChanged(node);\n  }\n}\nfunction signalUpdateFn(node, updater) {\n  if (!producerUpdatesAllowed()) {\n    throwInvalidWriteToSignalError();\n  }\n  signalSetFn(node, updater(node.value));\n}\nfunction runPostSignalSetFn() {\n  postSignalSetFn?.();\n}\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    equal: defaultEquals,\n    value: undefined\n  };\n})();\nfunction signalValueChanged(node) {\n  node.version++;\n  producerIncrementEpoch();\n  producerNotifyConsumers(node);\n  postSignalSetFn?.();\n}\nfunction createWatch(fn, schedule, allowSignalWrites) {\n  const node = Object.create(WATCH_NODE);\n  if (allowSignalWrites) {\n    node.consumerAllowSignalWrites = true;\n  }\n  node.fn = fn;\n  node.schedule = schedule;\n  const registerOnCleanup = cleanupFn => {\n    node.cleanupFn = cleanupFn;\n  };\n  function isWatchNodeDestroyed(node) {\n    return node.fn === null && node.schedule === null;\n  }\n  function destroyWatchNode(node) {\n    if (!isWatchNodeDestroyed(node)) {\n      consumerDestroy(node); // disconnect watcher from the reactive graph\n      node.cleanupFn();\n      // nullify references to the integration functions to mark node as destroyed\n      node.fn = null;\n      node.schedule = null;\n      node.cleanupFn = NOOP_CLEANUP_FN;\n    }\n  }\n  const run = () => {\n    if (node.fn === null) {\n      // trying to run a destroyed watch is noop\n      return;\n    }\n    if (isInNotificationPhase()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    node.dirty = false;\n    if (node.hasRun && !consumerPollProducersForChange(node)) {\n      return;\n    }\n    node.hasRun = true;\n    const prevConsumer = consumerBeforeComputation(node);\n    try {\n      node.cleanupFn();\n      node.cleanupFn = NOOP_CLEANUP_FN;\n      node.fn(registerOnCleanup);\n    } finally {\n      consumerAfterComputation(node, prevConsumer);\n    }\n  };\n  node.ref = {\n    notify: () => consumerMarkDirty(node),\n    run,\n    cleanup: () => node.cleanupFn(),\n    destroy: () => destroyWatchNode(node),\n    [SIGNAL]: node\n  };\n  return node.ref;\n}\nconst NOOP_CLEANUP_FN = () => {};\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `COMPUTED_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst WATCH_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE,\n    consumerIsAlwaysLive: true,\n    consumerAllowSignalWrites: false,\n    consumerMarkedDirty: node => {\n      if (node.schedule !== null) {\n        node.schedule(node.ref);\n      }\n    },\n    hasRun: false,\n    cleanupFn: NOOP_CLEANUP_FN\n  };\n})();\nfunction setAlternateWeakRefImpl(impl) {\n  // TODO: remove this function\n}\n\n/**\n * Internal create application API that implements the core application creation logic and optional\n * bootstrap logic.\n *\n * Platforms (such as `platform-browser`) may require different set of application and platform\n * providers for an application to function correctly. As a result, platforms may use this function\n * internally and supply the necessary providers during the bootstrap, while exposing\n * platform-specific APIs as a part of their public API.\n *\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n */\nfunction internalCreateApplication(config) {\n  try {\n    const {\n      rootComponent,\n      appProviders,\n      platformProviders\n    } = config;\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {\n      assertStandaloneComponentType(rootComponent);\n    }\n    const platformInjector = createOrReusePlatformInjector(platformProviders);\n    // Create root application injector based on a set of providers configured at the platform\n    // bootstrap level as well as providers passed to the bootstrap call by a user.\n    const allAppProviders = [internalProvideZoneChangeDetection({}), {\n      provide: ChangeDetectionScheduler,\n      useExisting: ChangeDetectionSchedulerImpl\n    }, ...(appProviders || [])];\n    const adapter = new EnvironmentNgModuleRefAdapter({\n      providers: allAppProviders,\n      parent: platformInjector,\n      debugName: typeof ngDevMode === 'undefined' || ngDevMode ? 'Environment Injector' : '',\n      // We skip environment initializers because we need to run them inside the NgZone, which\n      // happens after we get the NgZone instance from the Injector.\n      runEnvironmentInitializers: false\n    });\n    return bootstrap({\n      r3Injector: adapter.injector,\n      platformInjector,\n      rootComponent\n    });\n  } catch (e) {\n    return Promise.reject(e);\n  }\n}\n\n/**\n * Retrieves all defer blocks in a given LView.\n *\n * @param lView lView with defer blocks\n * @param deferBlocks defer block aggregator array\n */\nfunction getDeferBlocks(lView, deferBlocks) {\n  const tView = lView[TVIEW];\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    if (isLContainer(lView[i])) {\n      const lContainer = lView[i];\n      // An LContainer may represent an instance of a defer block, in which case\n      // we store it as a result. Otherwise, keep iterating over LContainer views and\n      // look for defer blocks.\n      const isLast = i === tView.bindingStartIndex - 1;\n      if (!isLast) {\n        const tNode = tView.data[i];\n        const tDetails = getTDeferBlockDetails(tView, tNode);\n        if (isTDeferBlockDetails(tDetails)) {\n          deferBlocks.push({\n            lContainer,\n            lView,\n            tNode,\n            tDetails\n          });\n          // This LContainer represents a defer block, so we exit\n          // this iteration and don't inspect views in this LContainer.\n          continue;\n        }\n      }\n      for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n        getDeferBlocks(lContainer[i], deferBlocks);\n      }\n    } else if (isLView(lView[i])) {\n      // This is a component, enter the `getDeferBlocks` recursively.\n      getDeferBlocks(lView[i], deferBlocks);\n    }\n  }\n}\n\n/** Apps in which we've enabled event replay.\n *  This is to prevent initializing event replay more than once per app.\n */\nconst appsWithEventReplay = new WeakSet();\n/**\n * The key that represents all replayable elements that are not in defer blocks.\n */\nconst EAGER_CONTENT_LISTENERS_KEY = '';\n/**\n * A list of block events that need to be replayed\n */\nlet blockEventQueue = [];\n/**\n * Determines whether Event Replay feature should be activated on the client.\n */\nfunction shouldEnableEventReplay(injector) {\n  return injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n}\n/**\n * Returns a set of providers required to setup support for event replay.\n * Requires hydration to be enabled separately.\n */\nfunction withEventReplay() {\n  const providers = [{\n    provide: IS_EVENT_REPLAY_ENABLED,\n    useFactory: () => {\n      let isEnabled = true;\n      if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n        // Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature\n        // is enabled, but there are no events configured in this application, in which case\n        // we don't activate this feature, since there are no events to replay.\n        const appId = inject(APP_ID);\n        isEnabled = !!window._ejsas?.[appId];\n      }\n      if (isEnabled) {\n        performanceMarkFeature('NgEventReplay');\n      }\n      return isEnabled;\n    }\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: ENVIRONMENT_INITIALIZER,\n      useValue: () => {\n        const injector = inject(Injector);\n        const appRef = injector.get(ApplicationRef);\n        // We have to check for the appRef here due to the possibility of multiple apps\n        // being present on the same page. We only want to enable event replay for the\n        // apps that actually want it.\n        if (!appsWithEventReplay.has(appRef)) {\n          const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP);\n          if (shouldEnableEventReplay(injector)) {\n            setStashFn((rEl, eventName, listenerFn) => {\n              sharedStashFunction(rEl, eventName, listenerFn);\n              sharedMapFunction(rEl, jsActionMap);\n            });\n          }\n        }\n      },\n      multi: true\n    }, {\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        const injector = inject(Injector);\n        const appRef = inject(ApplicationRef);\n        return () => {\n          // We have to check for the appRef here due to the possibility of multiple apps\n          // being present on the same page. We only want to enable event replay for the\n          // apps that actually want it.\n          if (!shouldEnableEventReplay(injector) || appsWithEventReplay.has(appRef)) {\n            return;\n          }\n          appsWithEventReplay.add(appRef);\n          appRef.onDestroy(() => appsWithEventReplay.delete(appRef));\n          // Kick off event replay logic once hydration for the initial part\n          // of the application is completed. This timing is similar to the unclaimed\n          // dehydrated views cleanup timing.\n          appRef.whenStable().then(() => {\n            const eventContractDetails = injector.get(JSACTION_EVENT_CONTRACT);\n            initEventReplay(eventContractDetails, injector);\n            const jsActionMap = injector.get(JSACTION_BLOCK_ELEMENT_MAP);\n            jsActionMap.get(EAGER_CONTENT_LISTENERS_KEY)?.forEach(removeListeners);\n            jsActionMap.delete(EAGER_CONTENT_LISTENERS_KEY);\n            const eventContract = eventContractDetails.instance;\n            // This removes event listeners registered through the container manager,\n            // as listeners registered on `document.body` might never be removed if we\n            // don't clean up the contract.\n            if (isIncrementalHydrationEnabled(injector)) {\n              // When incremental hydration is enabled, we cannot clean up the event\n              // contract immediately because we're unaware if there are any deferred\n              // blocks to hydrate. We can only schedule a contract cleanup when the\n              // app is destroyed.\n              appRef.onDestroy(() => eventContract.cleanUp());\n            } else {\n              eventContract.cleanUp();\n            }\n          });\n        };\n      },\n      multi: true\n    });\n  }\n  return providers;\n}\nconst initEventReplay = (eventDelegation, injector) => {\n  const appId = injector.get(APP_ID);\n  // This is set in packages/platform-server/src/utils.ts\n  const earlyJsactionData = window._ejsas[appId];\n  const eventContract = eventDelegation.instance = new EventContract(new EventContractContainer(earlyJsactionData.c));\n  for (const et of earlyJsactionData.et) {\n    eventContract.addEvent(et);\n  }\n  for (const et of earlyJsactionData.etc) {\n    eventContract.addEvent(et);\n  }\n  const eventInfos = getAppScopedQueuedEventInfos(appId);\n  eventContract.replayEarlyEventInfos(eventInfos);\n  clearAppScopedEarlyEventContract(appId);\n  const dispatcher = new EventDispatcher(event => {\n    invokeRegisteredReplayListeners(injector, event, event.currentTarget);\n  });\n  registerDispatcher(eventContract, dispatcher);\n};\n/**\n * Extracts information about all DOM events (added in a template) registered on elements in a give\n * LView. Maps collected events to a corresponding DOM element (an element is used as a key).\n */\nfunction collectDomEventsInfo(tView, lView, eventTypesToReplay) {\n  const domEventsInfo = new Map();\n  const lCleanup = lView[CLEANUP];\n  const tCleanup = tView.cleanup;\n  if (!tCleanup || !lCleanup) {\n    return domEventsInfo;\n  }\n  for (let i = 0; i < tCleanup.length;) {\n    const firstParam = tCleanup[i++];\n    const secondParam = tCleanup[i++];\n    if (typeof firstParam !== 'string') {\n      continue;\n    }\n    const eventType = firstParam;\n    if (!isEarlyEventType(eventType)) {\n      continue;\n    }\n    if (isCaptureEventType(eventType)) {\n      eventTypesToReplay.capture.add(eventType);\n    } else {\n      eventTypesToReplay.regular.add(eventType);\n    }\n    const listenerElement = unwrapRNode(lView[secondParam]);\n    i++; // move the cursor to the next position (location of the listener idx)\n    const useCaptureOrIndx = tCleanup[i++];\n    // if useCaptureOrIndx is boolean then report it as is.\n    // if useCaptureOrIndx is positive number then it in unsubscribe method\n    // if useCaptureOrIndx is negative number then it is a Subscription\n    const isDomEvent = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0;\n    if (!isDomEvent) {\n      continue;\n    }\n    if (!domEventsInfo.has(listenerElement)) {\n      domEventsInfo.set(listenerElement, [eventType]);\n    } else {\n      domEventsInfo.get(listenerElement).push(eventType);\n    }\n  }\n  return domEventsInfo;\n}\nfunction invokeRegisteredReplayListeners(injector, event, currentTarget) {\n  const blockName = (currentTarget && currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE)) ?? '';\n  if (/d\\d+/.test(blockName)) {\n    hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget);\n  } else if (event.eventPhase === EventPhase.REPLAY) {\n    invokeListeners(event, currentTarget);\n  }\n}\nfunction hydrateAndInvokeBlockListeners(blockName, injector, event, currentTarget) {\n  blockEventQueue.push({\n    event,\n    currentTarget\n  });\n  triggerHydrationFromBlockName(injector, blockName, replayQueuedBlockEvents);\n}\nfunction replayQueuedBlockEvents(hydratedBlocks) {\n  // clone the queue\n  const queue = [...blockEventQueue];\n  const hydrated = new Set(hydratedBlocks);\n  // empty it\n  blockEventQueue = [];\n  for (let {\n    event,\n    currentTarget\n  } of queue) {\n    const blockName = currentTarget.getAttribute(DEFER_BLOCK_SSR_ID_ATTRIBUTE);\n    if (hydrated.has(blockName)) {\n      invokeListeners(event, currentTarget);\n    } else {\n      // requeue events that weren't yet hydrated\n      blockEventQueue.push({\n        event,\n        currentTarget\n      });\n    }\n  }\n}\n\n/**\n * A collection that tracks all serialized views (`ngh` DOM annotations)\n * to avoid duplication. An attempt to add a duplicate view results in the\n * collection returning the index of the previously collected serialized view.\n * This reduces the number of annotations needed for a given page.\n */\nclass SerializedViewCollection {\n  views = [];\n  indexByContent = new Map();\n  add(serializedView) {\n    const viewAsString = JSON.stringify(serializedView);\n    if (!this.indexByContent.has(viewAsString)) {\n      const index = this.views.length;\n      this.views.push(serializedView);\n      this.indexByContent.set(viewAsString, index);\n      return index;\n    }\n    return this.indexByContent.get(viewAsString);\n  }\n  getAll() {\n    return this.views;\n  }\n}\n/**\n * Global counter that is used to generate a unique id for TViews\n * during the serialization process.\n */\nlet tViewSsrId = 0;\n/**\n * Generates a unique id for a given TView and returns this id.\n * The id is also stored on this instance of a TView and reused in\n * subsequent calls.\n *\n * This id is needed to uniquely identify and pick up dehydrated views\n * at runtime.\n */\nfunction getSsrId(tView) {\n  if (!tView.ssrId) {\n    tView.ssrId = `t${tViewSsrId++}`;\n  }\n  return tView.ssrId;\n}\n/**\n * Computes the number of root nodes in a given view\n * (or child nodes in a given container if a tNode is provided).\n */\nfunction calcNumRootNodes(tView, lView, tNode) {\n  const rootNodes = [];\n  collectNativeNodes(tView, lView, tNode, rootNodes);\n  return rootNodes.length;\n}\n/**\n * Computes the number of root nodes in all views in a given LContainer.\n */\nfunction calcNumRootNodesInLContainer(lContainer) {\n  const rootNodes = [];\n  collectNativeNodesInLContainer(lContainer, rootNodes);\n  return rootNodes.length;\n}\n/**\n * Annotates root level component's LView for hydration,\n * see `annotateHostElementForHydration` for additional information.\n */\nfunction annotateComponentLViewForHydration(lView, context, injector) {\n  const hostElement = lView[HOST];\n  // Root elements might also be annotated with the `ngSkipHydration` attribute,\n  // check if it's present before starting the serialization process.\n  if (hostElement && !hostElement.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n    return annotateHostElementForHydration(hostElement, lView, null, context);\n  }\n  return null;\n}\n/**\n * Annotates root level LContainer for hydration. This happens when a root component\n * injects ViewContainerRef, thus making the component an anchor for a view container.\n * This function serializes the component itself as well as all views from the view\n * container.\n */\nfunction annotateLContainerForHydration(lContainer, context, injector) {\n  const componentLView = unwrapLView(lContainer[HOST]);\n  // Serialize the root component itself.\n  const componentLViewNghIndex = annotateComponentLViewForHydration(componentLView, context, injector);\n  if (componentLViewNghIndex === null) {\n    // Component was not serialized (for example, if hydration was skipped by adding\n    // the `ngSkipHydration` attribute or this component uses i18n blocks in the template,\n    // but `withI18nSupport()` was not added), avoid annotating host element with the `ngh`\n    // attribute.\n    return;\n  }\n  const hostElement = unwrapRNode(componentLView[HOST]);\n  // Serialize all views within this view container.\n  const rootLView = lContainer[PARENT];\n  const rootLViewNghIndex = annotateHostElementForHydration(hostElement, rootLView, null, context);\n  const renderer = componentLView[RENDERER];\n  // For cases when a root component also acts as an anchor node for a ViewContainerRef\n  // (for example, when ViewContainerRef is injected in a root component), there is a need\n  // to serialize information about the component itself, as well as an LContainer that\n  // represents this ViewContainerRef. Effectively, we need to serialize 2 pieces of info:\n  // (1) hydration info for the root component itself and (2) hydration info for the\n  // ViewContainerRef instance (an LContainer). Each piece of information is included into\n  // the hydration data (in the TransferState object) separately, thus we end up with 2 ids.\n  // Since we only have 1 root element, we encode both bits of info into a single string:\n  // ids are separated by the `|` char (e.g. `10|25`, where `10` is the ngh for a component view\n  // and 25 is the `ngh` for a root view which holds LContainer).\n  const finalIndex = `${componentLViewNghIndex}|${rootLViewNghIndex}`;\n  renderer.setAttribute(hostElement, NGH_ATTR_NAME, finalIndex);\n}\n/**\n * Annotates all components bootstrapped in a given ApplicationRef\n * with info needed for hydration.\n *\n * @param appRef An instance of an ApplicationRef.\n * @param doc A reference to the current Document instance.\n * @return event types that need to be replayed\n */\nfunction annotateForHydration(appRef, doc) {\n  const injector = appRef.injector;\n  const isI18nHydrationEnabledVal = isI18nHydrationEnabled(injector);\n  const isIncrementalHydrationEnabledVal = isIncrementalHydrationEnabled(injector);\n  const serializedViewCollection = new SerializedViewCollection();\n  const corruptedTextNodes = new Map();\n  const viewRefs = appRef._views;\n  const shouldReplayEvents = injector.get(IS_EVENT_REPLAY_ENABLED, EVENT_REPLAY_ENABLED_DEFAULT);\n  const eventTypesToReplay = {\n    regular: new Set(),\n    capture: new Set()\n  };\n  const deferBlocks = new Map();\n  const appId = appRef.injector.get(APP_ID);\n  for (const viewRef of viewRefs) {\n    const lNode = getLNodeForHydration(viewRef);\n    // An `lView` might be `null` if a `ViewRef` represents\n    // an embedded view (not a component view).\n    if (lNode !== null) {\n      const context = {\n        serializedViewCollection,\n        corruptedTextNodes,\n        isI18nHydrationEnabled: isI18nHydrationEnabledVal,\n        isIncrementalHydrationEnabled: isIncrementalHydrationEnabledVal,\n        i18nChildren: new Map(),\n        eventTypesToReplay,\n        shouldReplayEvents,\n        appId,\n        deferBlocks\n      };\n      if (isLContainer(lNode)) {\n        annotateLContainerForHydration(lNode, context, injector);\n      } else {\n        annotateComponentLViewForHydration(lNode, context, injector);\n      }\n      insertCorruptedTextNodeMarkers(corruptedTextNodes, doc);\n    }\n  }\n  // Note: we *always* include hydration info key and a corresponding value\n  // into the TransferState, even if the list of serialized views is empty.\n  // This is needed as a signal to the client that the server part of the\n  // hydration logic was setup and enabled correctly. Otherwise, if a client\n  // hydration doesn't find a key in the transfer state - an error is produced.\n  const serializedViews = serializedViewCollection.getAll();\n  const transferState = injector.get(TransferState);\n  transferState.set(NGH_DATA_KEY, serializedViews);\n  if (deferBlocks.size > 0) {\n    const blocks = {};\n    for (const [id, info] of deferBlocks.entries()) {\n      blocks[id] = info;\n    }\n    transferState.set(NGH_DEFER_BLOCKS_KEY, blocks);\n  }\n  return eventTypesToReplay;\n}\n/**\n * Serializes the lContainer data into a list of SerializedView objects,\n * that represent views within this lContainer.\n *\n * @param lContainer the lContainer we are serializing\n * @param tNode the TNode that contains info about this LContainer\n * @param lView that hosts this LContainer\n * @param parentDeferBlockId the defer block id of the parent if it exists\n * @param context the hydration context\n * @returns an array of the `SerializedView` objects\n */\nfunction serializeLContainer(lContainer, tNode, lView, parentDeferBlockId, context) {\n  const views = [];\n  let lastViewAsString = '';\n  for (let i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {\n    let childLView = lContainer[i];\n    let template;\n    let numRootNodes;\n    let serializedView;\n    if (isRootView(childLView)) {\n      // If this is a root view, get an LView for the underlying component,\n      // because it contains information about the view to serialize.\n      childLView = childLView[HEADER_OFFSET];\n      // If we have an LContainer at this position, this indicates that the\n      // host element was used as a ViewContainerRef anchor (e.g. a `ViewContainerRef`\n      // was injected within the component class). This case requires special handling.\n      if (isLContainer(childLView)) {\n        // Calculate the number of root nodes in all views in a given container\n        // and increment by one to account for an anchor node itself, i.e. in this\n        // scenario we'll have a layout that would look like this:\n        // `<app-root /><#VIEW1><#VIEW2>...<!--container-->`\n        // The `+1` is to capture the `<app-root />` element.\n        numRootNodes = calcNumRootNodesInLContainer(childLView) + 1;\n        annotateLContainerForHydration(childLView, context, lView[INJECTOR]);\n        const componentLView = unwrapLView(childLView[HOST]);\n        serializedView = {\n          [TEMPLATE_ID]: componentLView[TVIEW].ssrId,\n          [NUM_ROOT_NODES]: numRootNodes\n        };\n      }\n    }\n    if (!serializedView) {\n      const childTView = childLView[TVIEW];\n      if (childTView.type === 1 /* TViewType.Component */) {\n        template = childTView.ssrId;\n        // This is a component view, thus it has only 1 root node: the component\n        // host node itself (other nodes would be inside that host node).\n        numRootNodes = 1;\n      } else {\n        template = getSsrId(childTView);\n        numRootNodes = calcNumRootNodes(childTView, childLView, childTView.firstChild);\n      }\n      serializedView = {\n        [TEMPLATE_ID]: template,\n        [NUM_ROOT_NODES]: numRootNodes\n      };\n      let isHydrateNeverBlock = false;\n      // If this is a defer block, serialize extra info.\n      if (isDeferBlock(lView[TVIEW], tNode)) {\n        const lDetails = getLDeferBlockDetails(lView, tNode);\n        const tDetails = getTDeferBlockDetails(lView[TVIEW], tNode);\n        if (context.isIncrementalHydrationEnabled && tDetails.hydrateTriggers !== null) {\n          const deferBlockId = `d${context.deferBlocks.size}`;\n          if (tDetails.hydrateTriggers.has(7 /* DeferBlockTrigger.Never */)) {\n            isHydrateNeverBlock = true;\n          }\n          let rootNodes = [];\n          collectNativeNodesInLContainer(lContainer, rootNodes);\n          // Add defer block into info context.deferBlocks\n          const deferBlockInfo = {\n            [DEFER_PARENT_BLOCK_ID]: parentDeferBlockId,\n            [NUM_ROOT_NODES]: rootNodes.length,\n            [DEFER_BLOCK_STATE$1]: lDetails[DEFER_BLOCK_STATE]\n          };\n          const serializedTriggers = serializeHydrateTriggers(tDetails.hydrateTriggers);\n          if (serializedTriggers.length > 0) {\n            deferBlockInfo[DEFER_HYDRATE_TRIGGERS] = serializedTriggers;\n          }\n          context.deferBlocks.set(deferBlockId, deferBlockInfo);\n          const node = unwrapRNode(lContainer);\n          if (node !== undefined) {\n            if (node.nodeType === Node.COMMENT_NODE) {\n              annotateDeferBlockAnchorForHydration(node, deferBlockId);\n            }\n          } else {\n            ngDevMode && validateNodeExists(node, childLView, tNode);\n            ngDevMode && validateMatchingNode(node, Node.COMMENT_NODE, null, childLView, tNode, true);\n            annotateDeferBlockAnchorForHydration(node, deferBlockId);\n          }\n          if (!isHydrateNeverBlock) {\n            // Add JSAction attributes for root nodes that use some hydration triggers\n            annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, deferBlockId, context);\n          }\n          // Use current block id as parent for nested routes.\n          parentDeferBlockId = deferBlockId;\n          // Serialize extra info into the view object.\n          // TODO(incremental-hydration): this should be serialized and included at a different level\n          // (not at the view level).\n          serializedView[DEFER_BLOCK_ID] = deferBlockId;\n        }\n        // DEFER_BLOCK_STATE is used for reconciliation in hydration, both regular and incremental.\n        // We need to know which template is rendered when hydrating. So we serialize this state\n        // regardless of hydration type.\n        serializedView[DEFER_BLOCK_STATE$1] = lDetails[DEFER_BLOCK_STATE];\n      }\n      if (!isHydrateNeverBlock) {\n        Object.assign(serializedView, serializeLView(lContainer[i], parentDeferBlockId, context));\n      }\n    }\n    // Check if the previous view has the same shape (for example, it was\n    // produced by the *ngFor), in which case bump the counter on the previous\n    // view instead of including the same information again.\n    const currentViewAsString = JSON.stringify(serializedView);\n    if (views.length > 0 && currentViewAsString === lastViewAsString) {\n      const previousView = views[views.length - 1];\n      previousView[MULTIPLIER] ??= 1;\n      previousView[MULTIPLIER]++;\n    } else {\n      // Record this view as most recently added.\n      lastViewAsString = currentViewAsString;\n      views.push(serializedView);\n    }\n  }\n  return views;\n}\nfunction serializeHydrateTriggers(triggerMap) {\n  const serializableDeferBlockTrigger = new Set([0 /* DeferBlockTrigger.Idle */, 1 /* DeferBlockTrigger.Immediate */, 2 /* DeferBlockTrigger.Viewport */, 5 /* DeferBlockTrigger.Timer */]);\n  let triggers = [];\n  for (let [trigger, details] of triggerMap) {\n    if (serializableDeferBlockTrigger.has(trigger)) {\n      if (details === null) {\n        triggers.push(trigger);\n      } else {\n        triggers.push({\n          trigger,\n          delay: details.delay\n        });\n      }\n    }\n  }\n  return triggers;\n}\n/**\n * Helper function to produce a node path (which navigation steps runtime logic\n * needs to take to locate a node) and stores it in the `NODES` section of the\n * current serialized view.\n */\nfunction appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes) {\n  const noOffsetIndex = tNode.index - HEADER_OFFSET;\n  ngh[NODES] ??= {};\n  // Ensure we don't calculate the path multiple times.\n  ngh[NODES][noOffsetIndex] ??= calcPathForNode(tNode, lView, excludedParentNodes);\n}\n/**\n * Helper function to append information about a disconnected node.\n * This info is needed at runtime to avoid DOM lookups for this element\n * and instead, the element would be created from scratch.\n */\nfunction appendDisconnectedNodeIndex(ngh, tNodeOrNoOffsetIndex) {\n  const noOffsetIndex = typeof tNodeOrNoOffsetIndex === 'number' ? tNodeOrNoOffsetIndex : tNodeOrNoOffsetIndex.index - HEADER_OFFSET;\n  ngh[DISCONNECTED_NODES] ??= [];\n  if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {\n    ngh[DISCONNECTED_NODES].push(noOffsetIndex);\n  }\n}\n/**\n * Serializes the lView data into a SerializedView object that will later be added\n * to the TransferState storage and referenced using the `ngh` attribute on a host\n * element.\n *\n * @param lView the lView we are serializing\n * @param context the hydration context\n * @returns the `SerializedView` object containing the data to be added to the host node\n */\nfunction serializeLView(lView, parentDeferBlockId = null, context) {\n  const ngh = {};\n  const tView = lView[TVIEW];\n  const i18nChildren = getOrComputeI18nChildren(tView, context);\n  const nativeElementsToEventTypes = context.shouldReplayEvents ? collectDomEventsInfo(tView, lView, context.eventTypesToReplay) : null;\n  // Iterate over DOM element references in an LView.\n  for (let i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {\n    const tNode = tView.data[i];\n    const noOffsetIndex = i - HEADER_OFFSET;\n    // Attempt to serialize any i18n data for the given slot. We do this first, as i18n\n    // has its own process for serialization.\n    const i18nData = trySerializeI18nBlock(lView, i, context);\n    if (i18nData) {\n      ngh[I18N_DATA] ??= {};\n      ngh[I18N_DATA][noOffsetIndex] = i18nData.caseQueue;\n      for (const nodeNoOffsetIndex of i18nData.disconnectedNodes) {\n        appendDisconnectedNodeIndex(ngh, nodeNoOffsetIndex);\n      }\n      for (const nodeNoOffsetIndex of i18nData.disjointNodes) {\n        const tNode = tView.data[nodeNoOffsetIndex + HEADER_OFFSET];\n        ngDevMode && assertTNode(tNode);\n        appendSerializedNodePath(ngh, tNode, lView, i18nChildren);\n      }\n      continue;\n    }\n    // Skip processing of a given slot in the following cases:\n    // - Local refs (e.g. <div #localRef>) take up an extra slot in LViews\n    //   to store the same element. In this case, there is no information in\n    //   a corresponding slot in TNode data structure.\n    // - When a slot contains something other than a TNode. For example, there\n    //   might be some metadata information about a defer block or a control flow block.\n    if (!isTNodeShape(tNode)) {\n      continue;\n    }\n    // Skip any nodes that are in an i18n block but are considered detached (i.e. not\n    // present in the template). These nodes are disconnected from the DOM tree, and\n    // so we don't want to serialize any information about them.\n    if (isDetachedByI18n(tNode)) {\n      continue;\n    }\n    // Check if a native node that represents a given TNode is disconnected from the DOM tree.\n    // Such nodes must be excluded from the hydration (since the hydration won't be able to\n    // find them), so the TNode ids are collected and used at runtime to skip the hydration.\n    //\n    // This situation may happen during the content projection, when some nodes don't make it\n    // into one of the content projection slots (for example, when there is no default\n    // <ng-content /> slot in projector component's template).\n    if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {\n      appendDisconnectedNodeIndex(ngh, tNode);\n      continue;\n    }\n    if (Array.isArray(tNode.projection)) {\n      for (const projectionHeadTNode of tNode.projection) {\n        // We may have `null`s in slots with no projected content.\n        if (!projectionHeadTNode) continue;\n        if (!Array.isArray(projectionHeadTNode)) {\n          // If we process re-projected content (i.e. `<ng-content>`\n          // appears at projection location), skip annotations for this content\n          // since all DOM nodes in this projection were handled while processing\n          // a parent lView, which contains those nodes.\n          if (!isProjectionTNode(projectionHeadTNode) && !isInSkipHydrationBlock(projectionHeadTNode)) {\n            if (isDisconnectedNode(projectionHeadTNode, lView)) {\n              // Check whether this node is connected, since we may have a TNode\n              // in the data structure as a projection segment head, but the\n              // content projection slot might be disabled (e.g.\n              // <ng-content *ngIf=\"false\" />).\n              appendDisconnectedNodeIndex(ngh, projectionHeadTNode);\n            } else {\n              appendSerializedNodePath(ngh, projectionHeadTNode, lView, i18nChildren);\n            }\n          }\n        } else {\n          // If a value is an array, it means that we are processing a projection\n          // where projectable nodes were passed in as DOM nodes (for example, when\n          // calling `ViewContainerRef.createComponent(CmpA, {projectableNodes: [...]})`).\n          //\n          // In this scenario, nodes can come from anywhere (either created manually,\n          // accessed via `document.querySelector`, etc) and may be in any state\n          // (attached or detached from the DOM tree). As a result, we can not reliably\n          // restore the state for such cases during hydration.\n          throw unsupportedProjectionOfDomNodes(unwrapRNode(lView[i]));\n        }\n      }\n    }\n    conditionallyAnnotateNodePath(ngh, tNode, lView, i18nChildren);\n    if (isLContainer(lView[i])) {\n      // Serialize information about a template.\n      const embeddedTView = tNode.tView;\n      if (embeddedTView !== null) {\n        ngh[TEMPLATES] ??= {};\n        ngh[TEMPLATES][noOffsetIndex] = getSsrId(embeddedTView);\n      }\n      // Serialize views within this LContainer.\n      const hostNode = lView[i][HOST]; // host node of this container\n      // LView[i][HOST] can be of 2 different types:\n      // - either a DOM node\n      // - or an array that represents an LView of a component\n      if (Array.isArray(hostNode)) {\n        // This is a component, serialize info about it.\n        const targetNode = unwrapRNode(hostNode);\n        if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n          annotateHostElementForHydration(targetNode, hostNode, parentDeferBlockId, context);\n        }\n      }\n      ngh[CONTAINERS] ??= {};\n      ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], tNode, lView, parentDeferBlockId, context);\n    } else if (Array.isArray(lView[i]) && !isLetDeclaration(tNode)) {\n      // This is a component, annotate the host node with an `ngh` attribute.\n      // Note: Let declarations that return an array are also storing an array in the LView,\n      // we need to exclude them.\n      const targetNode = unwrapRNode(lView[i][HOST]);\n      if (!targetNode.hasAttribute(SKIP_HYDRATION_ATTR_NAME)) {\n        annotateHostElementForHydration(targetNode, lView[i], parentDeferBlockId, context);\n      }\n    } else {\n      // <ng-container> case\n      if (tNode.type & 8 /* TNodeType.ElementContainer */) {\n        // An <ng-container> is represented by the number of\n        // top-level nodes. This information is needed to skip over\n        // those nodes to reach a corresponding anchor node (comment node).\n        ngh[ELEMENT_CONTAINERS] ??= {};\n        ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);\n      } else if (tNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {\n        // Current TNode represents an `<ng-content>` slot or `@let` declaration,\n        // thus it has no DOM elements associated with it, so the **next sibling**\n        // node would not be able to find an anchor. In this case, use full path instead.\n        let nextTNode = tNode.next;\n        // Skip over all `<ng-content>` slots and `@let` declarations in a row.\n        while (nextTNode !== null && nextTNode.type & (16 /* TNodeType.Projection */ | 128 /* TNodeType.LetDeclaration */)) {\n          nextTNode = nextTNode.next;\n        }\n        if (nextTNode && !isInSkipHydrationBlock(nextTNode)) {\n          // Handle a tNode after the `<ng-content>` slot.\n          appendSerializedNodePath(ngh, nextTNode, lView, i18nChildren);\n        }\n      } else if (tNode.type & 1 /* TNodeType.Text */) {\n        const rNode = unwrapRNode(lView[i]);\n        processTextNodeBeforeSerialization(context, rNode);\n      }\n    }\n    // Attach `jsaction` attribute to elements that have registered listeners,\n    // thus potentially having a need to do an event replay.\n    if (nativeElementsToEventTypes && tNode.type & 2 /* TNodeType.Element */) {\n      const nativeElement = unwrapRNode(lView[i]);\n      if (nativeElementsToEventTypes.has(nativeElement)) {\n        setJSActionAttributes(nativeElement, nativeElementsToEventTypes.get(nativeElement), parentDeferBlockId);\n      }\n    }\n  }\n  return ngh;\n}\n/**\n * Serializes node location in cases when it's needed, specifically:\n *\n *  1. If `tNode.projectionNext` is different from `tNode.next` - it means that\n *     the next `tNode` after projection is different from the one in the original\n *     template. Since hydration relies on `tNode.next`, this serialized info\n *     is required to help runtime code find the node at the correct location.\n *  2. In certain content projection-based use-cases, it's possible that only\n *     a content of a projected element is rendered. In this case, content nodes\n *     require an extra annotation, since runtime logic can't rely on parent-child\n *     connection to identify the location of a node.\n */\nfunction conditionallyAnnotateNodePath(ngh, tNode, lView, excludedParentNodes) {\n  if (isProjectionTNode(tNode)) {\n    // Do not annotate projection nodes (<ng-content />), since\n    // they don't have a corresponding DOM node representing them.\n    return;\n  }\n  // Handle case #1 described above.\n  if (tNode.projectionNext && tNode.projectionNext !== tNode.next && !isInSkipHydrationBlock(tNode.projectionNext)) {\n    appendSerializedNodePath(ngh, tNode.projectionNext, lView, excludedParentNodes);\n  }\n  // Handle case #2 described above.\n  // Note: we only do that for the first node (i.e. when `tNode.prev === null`),\n  // the rest of the nodes would rely on the current node location, so no extra\n  // annotation is needed.\n  if (tNode.prev === null && tNode.parent !== null && isDisconnectedNode(tNode.parent, lView) && !isDisconnectedNode(tNode, lView)) {\n    appendSerializedNodePath(ngh, tNode, lView, excludedParentNodes);\n  }\n}\n/**\n * Determines whether a component instance that is represented\n * by a given LView uses `ViewEncapsulation.ShadowDom`.\n */\nfunction componentUsesShadowDomEncapsulation(lView) {\n  const instance = lView[CONTEXT];\n  return instance?.constructor ? getComponentDef(instance.constructor)?.encapsulation === ViewEncapsulation.ShadowDom : false;\n}\n/**\n * Annotates component host element for hydration:\n * - by either adding the `ngh` attribute and collecting hydration-related info\n *   for the serialization and transferring to the client\n * - or by adding the `ngSkipHydration` attribute in case Angular detects that\n *   component contents is not compatible with hydration.\n *\n * @param element The Host element to be annotated\n * @param lView The associated LView\n * @param context The hydration context\n * @returns An index of serialized view from the transfer state object\n *          or `null` when a given component can not be serialized.\n */\nfunction annotateHostElementForHydration(element, lView, parentDeferBlockId, context) {\n  const renderer = lView[RENDERER];\n  if (hasI18n(lView) && !isI18nHydrationSupportEnabled() || componentUsesShadowDomEncapsulation(lView)) {\n    // Attach the skip hydration attribute if this component:\n    // - either has i18n blocks, since hydrating such blocks is not yet supported\n    // - or uses ShadowDom view encapsulation, since Domino doesn't support\n    //   shadow DOM, so we can not guarantee that client and server representations\n    //   would exactly match\n    renderer.setAttribute(element, SKIP_HYDRATION_ATTR_NAME, '');\n    return null;\n  } else {\n    const ngh = serializeLView(lView, parentDeferBlockId, context);\n    const index = context.serializedViewCollection.add(ngh);\n    renderer.setAttribute(element, NGH_ATTR_NAME, index.toString());\n    return index;\n  }\n}\n/**\n * Annotates defer block comment node for hydration:\n *\n * @param comment The Host element to be annotated\n * @param deferBlockId the id of the target defer block\n */\nfunction annotateDeferBlockAnchorForHydration(comment, deferBlockId) {\n  comment.textContent = `ngh=${deferBlockId}`;\n}\n/**\n * Physically inserts the comment nodes to ensure empty text nodes and adjacent\n * text node separators are preserved after server serialization of the DOM.\n * These get swapped back for empty text nodes or separators once hydration happens\n * on the client.\n *\n * @param corruptedTextNodes The Map of text nodes to be replaced with comments\n * @param doc The document\n */\nfunction insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {\n  for (const [textNode, marker] of corruptedTextNodes) {\n    textNode.after(doc.createComment(marker));\n  }\n}\n/**\n * Detects whether a given TNode represents a node that\n * is being content projected.\n */\nfunction isContentProjectedNode(tNode) {\n  let currentTNode = tNode;\n  while (currentTNode != null) {\n    // If we come across a component host node in parent nodes -\n    // this TNode is in the content projection section.\n    if (isComponentHost(currentTNode)) {\n      return true;\n    }\n    currentTNode = currentTNode.parent;\n  }\n  return false;\n}\n/**\n * Incremental hydration requires that any defer block root node\n * with interaction or hover triggers have all of their root nodes\n * trigger hydration with those events. So we need to make sure all\n * the root nodes of that block have the proper jsaction attribute\n * to ensure hydration is triggered, since the content is dehydrated\n */\nfunction annotateDeferBlockRootNodesWithJsAction(tDetails, rootNodes, parentDeferBlockId, context) {\n  const actionList = convertHydrateTriggersToJsAction(tDetails.hydrateTriggers);\n  for (let et of actionList) {\n    context.eventTypesToReplay.regular.add(et);\n  }\n  if (actionList.length > 0) {\n    const elementNodes = rootNodes.filter(rn => rn.nodeType === Node.ELEMENT_NODE);\n    for (let rNode of elementNodes) {\n      setJSActionAttributes(rNode, actionList, parentDeferBlockId);\n    }\n  }\n}\n\n/**\n * Indicates whether the hydration-related code was added,\n * prevents adding it multiple times.\n */\nlet isHydrationSupportEnabled = false;\n/**\n * Indicates whether the i18n-related code was added,\n * prevents adding it multiple times.\n *\n * Note: This merely controls whether the code is loaded,\n * while `setIsI18nHydrationSupportEnabled` determines\n * whether i18n blocks are serialized or hydrated.\n */\nlet isI18nHydrationRuntimeSupportEnabled = false;\n/**\n * Indicates whether the incremental hydration code was added,\n * prevents adding it multiple times.\n */\nlet isIncrementalHydrationRuntimeSupportEnabled = false;\n/**\n * Defines a period of time that Angular waits for the `ApplicationRef.isStable` to emit `true`.\n * If there was no event with the `true` value during this time, Angular reports a warning.\n */\nconst APPLICATION_IS_STABLE_TIMEOUT = 10_000;\n/**\n * Brings the necessary hydration code in tree-shakable manner.\n * The code is only present when the `provideClientHydration` is\n * invoked. Otherwise, this code is tree-shaken away during the\n * build optimization step.\n *\n * This technique allows us to swap implementations of methods so\n * tree shaking works appropriately when hydration is disabled or\n * enabled. It brings in the appropriate version of the method that\n * supports hydration only when enabled.\n */\nfunction enableHydrationRuntimeSupport() {\n  if (!isHydrationSupportEnabled) {\n    isHydrationSupportEnabled = true;\n    enableRetrieveHydrationInfoImpl();\n    enableLocateOrCreateElementNodeImpl();\n    enableLocateOrCreateTextNodeImpl();\n    enableLocateOrCreateElementContainerNodeImpl();\n    enableLocateOrCreateContainerAnchorImpl();\n    enableLocateOrCreateContainerRefImpl();\n    enableFindMatchingDehydratedViewImpl();\n    enableApplyRootElementTransformImpl();\n  }\n}\n/**\n * Brings the necessary i18n hydration code in tree-shakable manner.\n * Similar to `enableHydrationRuntimeSupport`, the code is only\n * present when `withI18nSupport` is invoked.\n */\nfunction enableI18nHydrationRuntimeSupport() {\n  if (!isI18nHydrationRuntimeSupportEnabled) {\n    isI18nHydrationRuntimeSupportEnabled = true;\n    enableLocateOrCreateI18nNodeImpl();\n    enablePrepareI18nBlockForHydrationImpl();\n    enableClaimDehydratedIcuCaseImpl();\n  }\n}\n/**\n * Brings the necessary incremental hydration code in tree-shakable manner.\n * Similar to `enableHydrationRuntimeSupport`, the code is only\n * present when `enableIncrementalHydrationRuntimeSupport` is invoked.\n */\nfunction enableIncrementalHydrationRuntimeSupport() {\n  if (!isIncrementalHydrationRuntimeSupportEnabled) {\n    isIncrementalHydrationRuntimeSupportEnabled = true;\n    enableRetrieveDeferBlockDataImpl();\n  }\n}\n/**\n * Outputs a message with hydration stats into a console.\n */\nfunction printHydrationStats(injector) {\n  const console = injector.get(Console);\n  const message = `Angular hydrated ${ngDevMode.hydratedComponents} component(s) ` + `and ${ngDevMode.hydratedNodes} node(s), ` + `${ngDevMode.componentsSkippedHydration} component(s) were skipped. ` + (isIncrementalHydrationEnabled(injector) ? `${ngDevMode.deferBlocksWithIncrementalHydration} defer block(s) were configured to use incremental hydration. ` : '') + `Learn more at https://angular.dev/guide/hydration.`;\n  // tslint:disable-next-line:no-console\n  console.log(message);\n}\n/**\n * Returns a Promise that is resolved when an application becomes stable.\n */\nfunction whenStableWithTimeout(appRef, injector) {\n  const whenStablePromise = appRef.whenStable();\n  if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n    const timeoutTime = APPLICATION_IS_STABLE_TIMEOUT;\n    const console = injector.get(Console);\n    const ngZone = injector.get(NgZone);\n    // The following call should not and does not prevent the app to become stable\n    // We cannot use RxJS timer here because the app would remain unstable.\n    // This also avoids an extra change detection cycle.\n    const timeoutId = ngZone.runOutsideAngular(() => {\n      return setTimeout(() => logWarningOnStableTimedout(timeoutTime, console), timeoutTime);\n    });\n    whenStablePromise.finally(() => clearTimeout(timeoutId));\n  }\n  return whenStablePromise;\n}\n/**\n * Defines a name of an attribute that is added to the <body> tag\n * in the `index.html` file in case a given route was configured\n * with `RenderMode.Client`. 'cm' is an abbreviation for \"Client Mode\".\n */\nconst CLIENT_RENDER_MODE_FLAG = 'ngcm';\n/**\n * Checks whether the `RenderMode.Client` was defined for the current route.\n */\nfunction isClientRenderModeEnabled() {\n  const doc = getDocument();\n  return (typeof ngServerMode === 'undefined' || !ngServerMode) && doc.body.hasAttribute(CLIENT_RENDER_MODE_FLAG);\n}\n/**\n * Returns a set of providers required to setup hydration support\n * for an application that is server side rendered. This function is\n * included into the `provideClientHydration` public API function from\n * the `platform-browser` package.\n *\n * The function sets up an internal flag that would be recognized during\n * the server side rendering time as well, so there is no need to\n * configure or change anything in NgUniversal to enable the feature.\n */\nfunction withDomHydration() {\n  const providers = [{\n    provide: IS_HYDRATION_DOM_REUSE_ENABLED,\n    useFactory: () => {\n      let isEnabled = true;\n      if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n        // On the client, verify that the server response contains\n        // hydration annotations. Otherwise, keep hydration disabled.\n        const transferState = inject(TransferState, {\n          optional: true\n        });\n        isEnabled = !!transferState?.get(NGH_DATA_KEY, null);\n      }\n      if (isEnabled) {\n        performanceMarkFeature('NgHydration');\n      }\n      return isEnabled;\n    }\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      // i18n support is enabled by calling withI18nSupport(), but there's\n      // no way to turn it off (e.g. for tests), so we turn it off by default.\n      setIsI18nHydrationSupportEnabled(false);\n      if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n        // Since this function is used across both server and client,\n        // make sure that the runtime code is only added when invoked\n        // on the client (see the `enableHydrationRuntimeSupport` function\n        // call below).\n        return;\n      }\n      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n        verifySsrContentsIntegrity();\n        enableHydrationRuntimeSupport();\n      } else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled()) {\n        const console = inject(Console);\n        const message = formatRuntimeError(-505 /* RuntimeErrorCode.MISSING_HYDRATION_ANNOTATIONS */, 'Angular hydration was requested on the client, but there was no ' + 'serialized information present in the server response, ' + 'thus hydration was not enabled. ' + 'Make sure the `provideClientHydration()` is included into the list ' + 'of providers in the server part of the application configuration.');\n        // tslint:disable-next-line:no-console\n        console.warn(message);\n      }\n    },\n    multi: true\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: PRESERVE_HOST_CONTENT,\n      useFactory: () => {\n        // Preserve host element content only in a browser\n        // environment and when hydration is configured properly.\n        // On a server, an application is rendered from scratch,\n        // so the host content needs to be empty.\n        return inject(IS_HYDRATION_DOM_REUSE_ENABLED);\n      }\n    }, {\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n          const appRef = inject(ApplicationRef);\n          const injector = inject(Injector);\n          return () => {\n            // Wait until an app becomes stable and cleanup all views that\n            // were not claimed during the application bootstrap process.\n            // The timing is similar to when we start the serialization process\n            // on the server.\n            //\n            // Note: the cleanup task *MUST* be scheduled within the Angular zone in Zone apps\n            // to ensure that change detection is properly run afterward.\n            whenStableWithTimeout(appRef, injector).then(() => {\n              cleanupDehydratedViews(appRef);\n              if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n                countBlocksSkippedByHydration(injector);\n                printHydrationStats(injector);\n              }\n            });\n          };\n        }\n        return () => {}; // noop\n      },\n      multi: true\n    });\n  }\n  return makeEnvironmentProviders(providers);\n}\n/**\n * Returns a set of providers required to setup support for i18n hydration.\n * Requires hydration to be enabled separately.\n */\nfunction withI18nSupport() {\n  return [{\n    provide: IS_I18N_HYDRATION_ENABLED,\n    useFactory: () => inject(IS_HYDRATION_DOM_REUSE_ENABLED)\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {\n        enableI18nHydrationRuntimeSupport();\n        setIsI18nHydrationSupportEnabled(true);\n        performanceMarkFeature('NgI18nHydration');\n      }\n    },\n    multi: true\n  }];\n}\n/**\n * Returns a set of providers required to setup support for incremental hydration.\n * Requires hydration to be enabled separately.\n * Enabling incremental hydration also enables event replay for the entire app.\n *\n * @developerPreview\n */\nfunction withIncrementalHydration() {\n  const providers = [withEventReplay(), {\n    provide: IS_INCREMENTAL_HYDRATION_ENABLED,\n    useValue: true\n  }, {\n    provide: DEHYDRATED_BLOCK_REGISTRY,\n    useClass: DehydratedBlockRegistry\n  }, {\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      enableIncrementalHydrationRuntimeSupport();\n      performanceMarkFeature('NgIncrementalHydration');\n    },\n    multi: true\n  }];\n  if (typeof ngServerMode === 'undefined' || !ngServerMode) {\n    providers.push({\n      provide: APP_BOOTSTRAP_LISTENER,\n      useFactory: () => {\n        const injector = inject(Injector);\n        const doc = getDocument();\n        return () => {\n          const deferBlockData = processBlockData(injector);\n          const commentsByBlockId = gatherDeferBlocksCommentNodes(doc, doc.body);\n          processAndInitTriggers(injector, deferBlockData, commentsByBlockId);\n          appendDeferBlocksToJSActionMap(doc, injector);\n        };\n      },\n      multi: true\n    });\n  }\n  return providers;\n}\n/**\n *\n * @param time The time in ms until the stable timedout warning message is logged\n */\nfunction logWarningOnStableTimedout(time, console) {\n  const message = `Angular hydration expected the ApplicationRef.isStable() to emit \\`true\\`, but it ` + `didn't happen within ${time}ms. Angular hydration logic depends on the application becoming stable ` + `as a signal to complete hydration process.`;\n  console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));\n}\n/**\n * Verifies whether the DOM contains a special marker added during SSR time to make sure\n * there is no SSR'ed contents transformations happen after SSR is completed. Typically that\n * happens either by CDN or during the build process as an optimization to remove comment nodes.\n * Hydration process requires comment nodes produced by Angular to locate correct DOM segments.\n * When this special marker is *not* present - throw an error and do not proceed with hydration,\n * since it will not be able to function correctly.\n *\n * Note: this function is invoked only on the client, so it's safe to use DOM APIs.\n */\nfunction verifySsrContentsIntegrity() {\n  const doc = getDocument();\n  let hydrationMarker;\n  for (const node of doc.body.childNodes) {\n    if (node.nodeType === Node.COMMENT_NODE && node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {\n      hydrationMarker = node;\n      break;\n    }\n  }\n  if (!hydrationMarker) {\n    throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' && ngDevMode && 'Angular hydration logic detected that HTML content of this page was modified after it ' + 'was produced during server side rendering. Make sure that there are no optimizations ' + 'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' + 'relies on HTML produced by the server, including whitespaces and comment nodes.');\n  }\n}\n\n/**\n * Transforms a value (typically a string) to a boolean.\n * Intended to be used as a transform function of an input.\n *\n *  @usageNotes\n *  ```ts\n *  @Input({ transform: booleanAttribute }) status!: boolean;\n *  ```\n * @param value Value to be transformed.\n *\n * @publicApi\n */\nfunction booleanAttribute(value) {\n  return typeof value === 'boolean' ? value : value != null && value !== 'false';\n}\n/**\n * Transforms a value (typically a string) to a number.\n * Intended to be used as a transform function of an input.\n * @param value Value to be transformed.\n * @param fallbackValue Value to use if the provided value can't be parsed as a number.\n *\n *  @usageNotes\n *  ```ts\n *  @Input({ transform: numberAttribute }) id!: number;\n *  ```\n *\n * @publicApi\n */\nfunction numberAttribute(value, fallbackValue = NaN) {\n  // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n  // and other non-number values as NaN, where Number just uses 0) but it considers the string\n  // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n  const isNumberValue = !isNaN(parseFloat(value)) && !isNaN(Number(value));\n  return isNumberValue ? Number(value) : fallbackValue;\n}\nconst PERFORMANCE_MARK_PREFIX = '🅰️';\nlet enablePerfLogging = false;\n/**\n * Function that will start measuring against the performance API\n * Should be used in pair with stopMeasuring\n */\nfunction startMeasuring(label) {\n  if (!enablePerfLogging) {\n    return;\n  }\n  const {\n    startLabel\n  } = labels(label);\n  /* tslint:disable:ban */\n  performance.mark(startLabel);\n  /* tslint:enable:ban */\n}\n/**\n * Function that will stop measuring against the performance API\n * Should be used in pair with stopMeasuring\n */\nfunction stopMeasuring(label) {\n  if (!enablePerfLogging) {\n    return;\n  }\n  const {\n    startLabel,\n    labelName,\n    endLabel\n  } = labels(label);\n  /* tslint:disable:ban */\n  performance.mark(endLabel);\n  performance.measure(labelName, startLabel, endLabel);\n  performance.clearMarks(startLabel);\n  performance.clearMarks(endLabel);\n  /* tslint:enable:ban */\n}\nfunction labels(label) {\n  const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;\n  return {\n    labelName,\n    startLabel: `start:${labelName}`,\n    endLabel: `end:${labelName}`\n  };\n}\nlet warningLogged = false;\n/**\n * This enables an internal performance profiler\n *\n * It should not be imported in application code\n */\nfunction enableProfiling() {\n  if (!warningLogged && (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {\n    warningLogged = true;\n    console.warn('Performance API is not supported on this platform');\n    return;\n  }\n  enablePerfLogging = true;\n}\nfunction disableProfiling() {\n  enablePerfLogging = false;\n}\n\n/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n/**\n * Gets the class name of the closest component to a node.\n * Warning! this function will return minified names if the name of the component is minified. The\n * consumer of the function is responsible for resolving the minified name to its original name.\n * @param node Node from which to start the search.\n */\nfunction getClosestComponentName(node) {\n  let currentNode = node;\n  while (currentNode) {\n    const lView = readPatchedLView(currentNode);\n    if (lView !== null) {\n      for (let i = HEADER_OFFSET; i < lView.length; i++) {\n        const current = lView[i];\n        if (!isLView(current) && !isLContainer(current) || current[HOST] !== currentNode) {\n          continue;\n        }\n        const tView = lView[TVIEW];\n        const tNode = getTNode(tView, i);\n        if (isComponentHost(tNode)) {\n          const def = tView.data[tNode.directiveStart + tNode.componentOffset];\n          const name = def.debugInfo?.className || def.type.name;\n          // Note: the name may be an empty string if the class name is\n          // dropped due to minification. In such cases keep going up the tree.\n          if (name) {\n            return name;\n          } else {\n            break;\n          }\n        }\n      }\n    }\n    currentNode = currentNode.parentNode;\n  }\n  return null;\n}\n\n/**\n * Compiles a partial directive declaration object into a full directive definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareDirective(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'directive',\n    type: decl.type\n  });\n  return compiler.compileDirectiveDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\n/**\n * Evaluates the class metadata declaration.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareClassMetadata(decl) {\n  setClassMetadata(decl.type, decl.decorators, decl.ctorParameters ?? null, decl.propDecorators ?? null);\n}\n/**\n * Evaluates the class metadata of a component that contains deferred blocks.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareClassMetadataAsync(decl) {\n  setClassMetadataAsync(decl.type, decl.resolveDeferredDeps, (...types) => {\n    const meta = decl.resolveMetadata(...types);\n    setClassMetadata(decl.type, meta.decorators, meta.ctorParameters, meta.propDecorators);\n  });\n}\n/**\n * Compiles a partial component declaration object into a full component definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareComponent(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'component',\n    type: decl.type\n  });\n  return compiler.compileComponentDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵcmp.js`, decl);\n}\n/**\n * Compiles a partial pipe declaration object into a full pipe definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareFactory(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: getFactoryKind(decl.target),\n    type: decl.type\n  });\n  return compiler.compileFactoryDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵfac.js`, decl);\n}\nfunction getFactoryKind(target) {\n  switch (target) {\n    case FactoryTarget.Directive:\n      return 'directive';\n    case FactoryTarget.Component:\n      return 'component';\n    case FactoryTarget.Injectable:\n      return 'injectable';\n    case FactoryTarget.Pipe:\n      return 'pipe';\n    case FactoryTarget.NgModule:\n      return 'NgModule';\n  }\n}\n/**\n * Compiles a partial injectable declaration object into a full injectable definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareInjectable(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'injectable',\n    type: decl.type\n  });\n  return compiler.compileInjectableDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵprov.js`, decl);\n}\n/**\n * Compiles a partial injector declaration object into a full injector definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareInjector(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'NgModule',\n    type: decl.type\n  });\n  return compiler.compileInjectorDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵinj.js`, decl);\n}\n/**\n * Compiles a partial NgModule declaration object into a full NgModule definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclareNgModule(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'NgModule',\n    type: decl.type\n  });\n  return compiler.compileNgModuleDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵmod.js`, decl);\n}\n/**\n * Compiles a partial pipe declaration object into a full pipe definition object.\n *\n * @codeGenApi\n */\nfunction ɵɵngDeclarePipe(decl) {\n  const compiler = getCompilerFacade({\n    usage: 1 /* JitCompilerUsage.PartialDeclaration */,\n    kind: 'pipe',\n    type: decl.type\n  });\n  return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);\n}\n\n// we reexport these symbols just so that they are retained during the dead code elimination\n\n/**\n * Create a computed `Signal` which derives a reactive value from an expression.\n */\nfunction computed(computation, options) {\n  performanceMarkFeature('NgSignals');\n  const getter = createComputed$1(computation);\n  if (options?.equal) {\n    getter[SIGNAL$1].equal = options.equal;\n  }\n  if (ngDevMode) {\n    getter.toString = () => `[Computed: ${getter()}]`;\n    getter[SIGNAL$1].debugName = options?.debugName;\n  }\n  return getter;\n}\nconst identityFn = v => v;\n/**\n * Create a linked signal which represents state that is (re)set from a linked reactive expression.\n */\nfunction createLinkedSignal(node) {\n  const linkedSignalGetter = () => {\n    // Check if the value needs updating before returning it.\n    producerUpdateValueVersion$1(node);\n    // Record that someone looked at this signal.\n    producerAccessed$1(node);\n    if (node.value === ERRORED) {\n      throw node.error;\n    }\n    return node.value;\n  };\n  const getter = linkedSignalGetter;\n  getter[SIGNAL$1] = node;\n  if (ngDevMode) {\n    getter.toString = () => `[LinkedSignal: ${getter()}]`;\n  }\n  getter.set = newValue => {\n    producerUpdateValueVersion$1(node);\n    signalSetFn$1(node, newValue);\n    producerMarkClean$1(node);\n  };\n  getter.update = updateFn => {\n    producerUpdateValueVersion$1(node);\n    signalUpdateFn$1(node, updateFn);\n    producerMarkClean$1(node);\n  };\n  getter.asReadonly = signalAsReadonlyFn.bind(getter);\n  return getter;\n}\nfunction linkedSignal(optionsOrComputation, options) {\n  performanceMarkFeature('NgSignals');\n  const isShorthand = typeof optionsOrComputation === 'function';\n  const node = Object.create(LINKED_SIGNAL_NODE);\n  node.source = isShorthand ? optionsOrComputation : optionsOrComputation.source;\n  if (!isShorthand) {\n    node.computation = optionsOrComputation.computation;\n  }\n  const equal = isShorthand ? options?.equal : optionsOrComputation.equal;\n  if (equal) {\n    node.equal = equal;\n  }\n  return createLinkedSignal(node);\n}\n/**\n * A dedicated symbol used before a state value has been set / calculated for the first time.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst UNSET = /* @__PURE__ */Symbol('UNSET');\n/**\n * A dedicated symbol used in place of a linked signal value to indicate that a given computation\n * is in progress. Used to detect cycles in computation chains.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst COMPUTING = /* @__PURE__ */Symbol('COMPUTING');\n/**\n * A dedicated symbol used in place of a linked signal value to indicate that a given computation\n * failed. The thrown error is cached until the computation gets dirty again or the state is set.\n * Explicitly typed as `any` so we can use it as signal's value.\n */\nconst ERRORED = /* @__PURE__ */Symbol('ERRORED');\n// Note: Using an IIFE here to ensure that the spread assignment is not considered\n// a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`.\n// TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved.\nconst LINKED_SIGNAL_NODE = /* @__PURE__ */(() => {\n  return {\n    ...REACTIVE_NODE$1,\n    value: UNSET,\n    dirty: true,\n    error: null,\n    equal: defaultEquals$1,\n    computation: identityFn,\n    producerMustRecompute(node) {\n      // Force a recomputation if there's no current value, or if the current value is in the\n      // process of being calculated (which should throw an error).\n      return node.value === UNSET || node.value === COMPUTING;\n    },\n    producerRecomputeValue(node) {\n      if (node.value === COMPUTING) {\n        // Our computation somehow led to a cyclic read of itself.\n        throw new Error('Detected cycle in computations.');\n      }\n      const oldValue = node.value;\n      node.value = COMPUTING;\n      const prevConsumer = consumerBeforeComputation$1(node);\n      let newValue;\n      try {\n        const newSourceValue = node.source();\n        const prev = oldValue === UNSET || oldValue === ERRORED ? undefined : {\n          source: node.sourceValue,\n          value: oldValue\n        };\n        newValue = node.computation(newSourceValue, prev);\n        node.sourceValue = newSourceValue;\n      } catch (err) {\n        newValue = ERRORED;\n        node.error = err;\n      } finally {\n        consumerAfterComputation$1(node, prevConsumer);\n      }\n      if (oldValue !== UNSET && newValue !== ERRORED && node.equal(oldValue, newValue)) {\n        // No change to `valueVersion` - old and new values are\n        // semantically equivalent.\n        node.value = oldValue;\n        return;\n      }\n      node.value = newValue;\n      node.version++;\n    }\n  };\n})();\n\n/**\n * Execute an arbitrary function in a non-reactive (non-tracking) context. The executed function\n * can, optionally, return a value.\n */\nfunction untracked(nonReactiveReadsFn) {\n  const prevConsumer = setActiveConsumer$1(null);\n  // We are not trying to catch any particular errors here, just making sure that the consumers\n  // stack is restored in case of errors.\n  try {\n    return nonReactiveReadsFn();\n  } finally {\n    setActiveConsumer$1(prevConsumer);\n  }\n}\nclass ViewContext {\n  view;\n  node;\n  constructor(view, node) {\n    this.view = view;\n    this.node = node;\n  }\n  /**\n   * @internal\n   * @nocollapse\n   */\n  static __NG_ELEMENT_ID__ = injectViewContext;\n}\nfunction injectViewContext() {\n  return new ViewContext(getLView(), getCurrentTNode());\n}\n\n/**\n * Controls whether effects use the legacy `microtaskEffect` by default.\n */\nconst USE_MICROTASK_EFFECT_BY_DEFAULT = false;\nclass MicrotaskEffectScheduler extends ZoneAwareEffectScheduler {\n  pendingTasks = inject(PendingTasksInternal);\n  taskId = null;\n  schedule(effect) {\n    // Check whether there are any pending effects _before_ queueing in the base class.\n    super.schedule(effect);\n    if (this.taskId === null) {\n      this.taskId = this.pendingTasks.add();\n      queueMicrotask(() => this.flush());\n    }\n  }\n  flush() {\n    try {\n      super.flush();\n    } finally {\n      if (this.taskId !== null) {\n        this.pendingTasks.remove(this.taskId);\n        this.taskId = null;\n      }\n    }\n  }\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: MicrotaskEffectScheduler,\n    providedIn: 'root',\n    factory: () => new MicrotaskEffectScheduler()\n  });\n}\n/**\n * Core reactive node for an Angular effect.\n *\n * `EffectHandle` combines the reactive graph's `Watch` base node for effects with the framework's\n * scheduling abstraction (`MicrotaskEffectScheduler`) as well as automatic cleanup via `DestroyRef`\n * if available/requested.\n */\nclass EffectHandle {\n  scheduler;\n  effectFn;\n  zone;\n  injector;\n  unregisterOnDestroy;\n  watcher;\n  constructor(scheduler, effectFn, zone, destroyRef, injector, allowSignalWrites) {\n    this.scheduler = scheduler;\n    this.effectFn = effectFn;\n    this.zone = zone;\n    this.injector = injector;\n    this.watcher = createWatch$1(onCleanup => this.runEffect(onCleanup), () => this.schedule(), allowSignalWrites);\n    this.unregisterOnDestroy = destroyRef?.onDestroy(() => this.destroy());\n  }\n  runEffect(onCleanup) {\n    try {\n      this.effectFn(onCleanup);\n    } catch (err) {\n      // Inject the `ErrorHandler` here in order to avoid circular DI error\n      // if the effect is used inside of a custom `ErrorHandler`.\n      const errorHandler = this.injector.get(ErrorHandler, null, {\n        optional: true\n      });\n      errorHandler?.handleError(err);\n    }\n  }\n  run() {\n    this.watcher.run();\n  }\n  schedule() {\n    this.scheduler.schedule(this);\n  }\n  destroy() {\n    this.watcher.destroy();\n    this.unregisterOnDestroy?.();\n    // Note: if the effect is currently scheduled, it's not un-scheduled, and so the scheduler will\n    // retain a reference to it. Attempting to execute it will be a no-op.\n  }\n}\n// Just used for the name for the debug error below.\nfunction effect$1() {}\n/**\n * Create a global `Effect` for the given reactive function.\n */\nfunction microtaskEffect(effectFn, options) {\n  performanceMarkFeature('NgSignals');\n  ngDevMode && assertNotInReactiveContext(effect$1, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n  !options?.injector && assertInInjectionContext(effect$1);\n  const injector = options?.injector ?? inject(Injector);\n  const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  const handle = new EffectHandle(injector.get(MicrotaskEffectScheduler), effectFn, typeof Zone === 'undefined' ? null : Zone.current, destroyRef, injector, options?.allowSignalWrites ?? false);\n  // Effects need to be marked dirty manually to trigger their initial run. The timing of this\n  // marking matters, because the effects may read signals that track component inputs, which are\n  // only available after those components have had their first update pass.\n  //\n  // We inject `ChangeDetectorRef` optionally, to determine whether this effect is being created in\n  // the context of a component or not. If it is, then we check whether the component has already\n  // run its update pass, and defer the effect's initial scheduling until the update pass if it\n  // hasn't already run.\n  const cdr = injector.get(ChangeDetectorRef, null, {\n    optional: true\n  });\n  if (!cdr || !(cdr._lView[FLAGS] & 8 /* LViewFlags.FirstLViewPass */)) {\n    // This effect is either not running in a view injector, or the view has already\n    // undergone its first change detection pass, which is necessary for any required inputs to be\n    // set.\n    handle.watcher.notify();\n  } else {\n    // Delay the initialization of the effect until the view is fully initialized.\n    (cdr._lView[EFFECTS_TO_SCHEDULE] ??= []).push(handle.watcher.notify);\n  }\n  return handle;\n}\nlet useMicrotaskEffectsByDefault = USE_MICROTASK_EFFECT_BY_DEFAULT;\n/**\n * Toggle the flag on whether to use microtask effects (for testing).\n */\nfunction setUseMicrotaskEffectsByDefault(value) {\n  const prev = useMicrotaskEffectsByDefault;\n  useMicrotaskEffectsByDefault = value;\n  return prev;\n}\nclass EffectRefImpl {\n  [SIGNAL$1];\n  constructor(node) {\n    this[SIGNAL$1] = node;\n  }\n  destroy() {\n    this[SIGNAL$1].destroy();\n  }\n}\n/**\n * Registers an \"effect\" that will be scheduled & executed whenever the signals that it reads\n * changes.\n *\n * Angular has two different kinds of effect: component effects and root effects. Component effects\n * are created when `effect()` is called from a component, directive, or within a service of a\n * component/directive. Root effects are created when `effect()` is called from outside the\n * component tree, such as in a root service, or when the `forceRoot` option is provided.\n *\n * The two effect types differ in their timing. Component effects run as a component lifecycle\n * event during Angular's synchronization (change detection) process, and can safely read input\n * signals or create/destroy views that depend on component state. Root effects run as microtasks\n * and have no connection to the component tree or change detection.\n *\n * `effect()` must be run in injection context, unless the `injector` option is manually specified.\n *\n * @developerPreview\n */\nfunction effect(effectFn, options) {\n  if (useMicrotaskEffectsByDefault) {\n    if (ngDevMode && options?.forceRoot) {\n      throw new Error(`Cannot use 'forceRoot' option with microtask effects on`);\n    }\n    return microtaskEffect(effectFn, options);\n  }\n  performanceMarkFeature('NgSignals');\n  ngDevMode && assertNotInReactiveContext(effect, 'Call `effect` outside of a reactive context. For example, schedule the ' + 'effect inside the component constructor.');\n  !options?.injector && assertInInjectionContext(effect);\n  if (ngDevMode && options?.allowSignalWrites !== undefined) {\n    console.warn(`The 'allowSignalWrites' flag is deprecated and no longer impacts effect() (writes are always allowed)`);\n  }\n  const injector = options?.injector ?? inject(Injector);\n  let destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;\n  let node;\n  const viewContext = injector.get(ViewContext, null, {\n    optional: true\n  });\n  const notifier = injector.get(ChangeDetectionScheduler);\n  if (viewContext !== null && !options?.forceRoot) {\n    // This effect was created in the context of a view, and will be associated with the view.\n    node = createViewEffect(viewContext.view, notifier, effectFn);\n    if (destroyRef instanceof NodeInjectorDestroyRef && destroyRef._lView === viewContext.view) {\n      // The effect is being created in the same view as the `DestroyRef` references, so it will be\n      // automatically destroyed without the need for an explicit `DestroyRef` registration.\n      destroyRef = null;\n    }\n  } else {\n    // This effect was created outside the context of a view, and will be scheduled independently.\n    node = createRootEffect(effectFn, injector.get(EffectScheduler), notifier);\n  }\n  node.injector = injector;\n  if (destroyRef !== null) {\n    // If we need to register for cleanup, do that here.\n    node.onDestroyFn = destroyRef.onDestroy(() => node.destroy());\n  }\n  if (ngDevMode) {\n    node.debugName = options?.debugName ?? '';\n  }\n  return new EffectRefImpl(node);\n}\n/**\n * Not public API, which guarantees `EffectScheduler` only ever comes from the application root\n * injector.\n */\nconst APP_EFFECT_SCHEDULER = /* @__PURE__ */new InjectionToken('', {\n  providedIn: 'root',\n  factory: () => inject(EffectScheduler)\n});\nconst BASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...REACTIVE_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerAllowSignalWrites: true,\n  dirty: true,\n  hasRun: false,\n  cleanupFns: undefined,\n  zone: null,\n  onDestroyFn: noop,\n  run() {\n    this.dirty = false;\n    if (ngDevMode && isInNotificationPhase$1()) {\n      throw new Error(`Schedulers cannot synchronously execute watches while scheduling.`);\n    }\n    if (this.hasRun && !consumerPollProducersForChange$1(this)) {\n      return;\n    }\n    this.hasRun = true;\n    const registerCleanupFn = cleanupFn => (this.cleanupFns ??= []).push(cleanupFn);\n    const prevNode = consumerBeforeComputation$1(this);\n    // We clear `setIsRefreshingViews` so that `markForCheck()` within the body of an effect will\n    // cause CD to reach the component in question.\n    const prevRefreshingViews = setIsRefreshingViews(false);\n    try {\n      this.maybeCleanup();\n      this.fn(registerCleanupFn);\n    } finally {\n      setIsRefreshingViews(prevRefreshingViews);\n      consumerAfterComputation$1(this, prevNode);\n    }\n  },\n  maybeCleanup() {\n    if (!this.cleanupFns?.length) {\n      return;\n    }\n    try {\n      // Attempt to run the cleanup functions. Regardless of failure or success, we consider\n      // cleanup \"completed\" and clear the list for the next run of the effect. Note that an error\n      // from the cleanup function will still crash the current run of the effect.\n      while (this.cleanupFns.length) {\n        this.cleanupFns.pop()();\n      }\n    } finally {\n      this.cleanupFns = [];\n    }\n  }\n}))();\nconst ROOT_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...BASE_EFFECT_NODE,\n  consumerMarkedDirty() {\n    this.scheduler.schedule(this);\n    this.notifier.notify(13 /* NotificationSource.RootEffect */);\n  },\n  destroy() {\n    consumerDestroy$1(this);\n    this.onDestroyFn();\n    this.maybeCleanup();\n  }\n}))();\nconst VIEW_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...BASE_EFFECT_NODE,\n  consumerMarkedDirty() {\n    this.view[FLAGS] |= 8192 /* LViewFlags.HasChildViewsToRefresh */;\n    markAncestorsForTraversal(this.view);\n    this.notifier.notify(14 /* NotificationSource.ViewEffect */);\n  },\n  destroy() {\n    consumerDestroy$1(this);\n    this.onDestroyFn();\n    this.maybeCleanup();\n    this.view[EFFECTS]?.delete(this);\n  }\n}))();\nfunction createViewEffect(view, notifier, fn) {\n  const node = Object.create(VIEW_EFFECT_NODE);\n  node.view = view;\n  node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n  node.notifier = notifier;\n  node.fn = fn;\n  view[EFFECTS] ??= new Set();\n  view[EFFECTS].add(node);\n  node.consumerMarkedDirty(node);\n  return node;\n}\nfunction createRootEffect(fn, scheduler, notifier) {\n  const node = Object.create(ROOT_EFFECT_NODE);\n  node.fn = fn;\n  node.scheduler = scheduler;\n  node.notifier = notifier;\n  node.zone = typeof Zone !== 'undefined' ? Zone.current : null;\n  node.scheduler.schedule(node);\n  node.notifier.notify(13 /* NotificationSource.RootEffect */);\n  return node;\n}\nconst NOT_SET = Symbol('NOT_SET');\nconst EMPTY_CLEANUP_SET = new Set();\nconst AFTER_RENDER_PHASE_EFFECT_NODE = /* @__PURE__ */(() => ({\n  ...SIGNAL_NODE$1,\n  consumerIsAlwaysLive: true,\n  consumerAllowSignalWrites: true,\n  value: NOT_SET,\n  cleanup: null,\n  /** Called when the effect becomes dirty */\n  consumerMarkedDirty() {\n    if (this.sequence.impl.executing) {\n      // If hooks are in the middle of executing, then it matters whether this node has yet been\n      // executed within its sequence. If not, then we don't want to notify the scheduler since\n      // this node will be reached naturally.\n      if (this.sequence.lastPhase === null || this.sequence.lastPhase < this.phase) {\n        return;\n      }\n      // If during the execution of a later phase an earlier phase became dirty, then we should not\n      // run any further phases until the earlier one reruns.\n      this.sequence.erroredOrDestroyed = true;\n    }\n    // Either hooks are not running, or we're marking a node dirty that has already run within its\n    // sequence.\n    this.sequence.scheduler.notify(7 /* NotificationSource.RenderHook */);\n  },\n  phaseFn(previousValue) {\n    this.sequence.lastPhase = this.phase;\n    if (!this.dirty) {\n      return this.signal;\n    }\n    this.dirty = false;\n    if (this.value !== NOT_SET && !consumerPollProducersForChange$1(this)) {\n      // None of our producers report a change since the last time they were read, so no\n      // recomputation of our value is necessary.\n      return this.signal;\n    }\n    // Run any needed cleanup functions.\n    try {\n      for (const cleanupFn of this.cleanup ?? EMPTY_CLEANUP_SET) {\n        cleanupFn();\n      }\n    } finally {\n      // Even if a cleanup function errors, ensure it's cleared.\n      this.cleanup?.clear();\n    }\n    // Prepare to call the user's effect callback. If there was a previous phase, then it gave us\n    // its value as a `Signal`, otherwise `previousValue` will be `undefined`.\n    const args = [];\n    if (previousValue !== undefined) {\n      args.push(previousValue);\n    }\n    args.push(this.registerCleanupFn);\n    // Call the user's callback in our reactive context.\n    const prevConsumer = consumerBeforeComputation$1(this);\n    let newValue;\n    try {\n      newValue = this.userFn.apply(null, args);\n    } finally {\n      consumerAfterComputation$1(this, prevConsumer);\n    }\n    if (this.value === NOT_SET || !this.equal(this.value, newValue)) {\n      this.value = newValue;\n      this.version++;\n    }\n    return this.signal;\n  }\n}))();\n/**\n * An `AfterRenderSequence` that manages an `afterRenderEffect`'s phase effects.\n */\nclass AfterRenderEffectSequence extends AfterRenderSequence {\n  scheduler;\n  /**\n   * While this sequence is executing, this tracks the last phase which was called by the\n   * `afterRender` machinery.\n   *\n   * When a phase effect is marked dirty, this is used to determine whether it's already run or not.\n   */\n  lastPhase = null;\n  /**\n   * The reactive nodes for each phase, if a phase effect is defined for that phase.\n   *\n   * These are initialized to `undefined` but set in the constructor.\n   */\n  nodes = [undefined, undefined, undefined, undefined];\n  constructor(impl, effectHooks, scheduler, destroyRef, snapshot = null) {\n    // Note that we also initialize the underlying `AfterRenderSequence` hooks to `undefined` and\n    // populate them as we create reactive nodes below.\n    super(impl, [undefined, undefined, undefined, undefined], false, destroyRef, snapshot);\n    this.scheduler = scheduler;\n    // Setup a reactive node for each phase.\n    for (const phase of AFTER_RENDER_PHASES) {\n      const effectHook = effectHooks[phase];\n      if (effectHook === undefined) {\n        continue;\n      }\n      const node = Object.create(AFTER_RENDER_PHASE_EFFECT_NODE);\n      node.sequence = this;\n      node.phase = phase;\n      node.userFn = effectHook;\n      node.dirty = true;\n      node.signal = () => {\n        producerAccessed$1(node);\n        return node.value;\n      };\n      node.signal[SIGNAL$1] = node;\n      node.registerCleanupFn = fn => (node.cleanup ??= new Set()).add(fn);\n      this.nodes[phase] = node;\n      // Install the upstream hook which runs the `phaseFn` for this phase.\n      this.hooks[phase] = value => node.phaseFn(value);\n    }\n  }\n  afterRun() {\n    super.afterRun();\n    // We're done running this sequence, so reset `lastPhase`.\n    this.lastPhase = null;\n  }\n  destroy() {\n    super.destroy();\n    // Run the cleanup functions for each node.\n    for (const node of this.nodes) {\n      for (const fn of node?.cleanup ?? EMPTY_CLEANUP_SET) {\n        fn();\n      }\n    }\n  }\n}\n/**\n * @experimental\n */\nfunction afterRenderEffect(callbackOrSpec, options) {\n  ngDevMode && assertNotInReactiveContext(afterRenderEffect, 'Call `afterRenderEffect` outside of a reactive context. For example, create the render ' + 'effect inside the component constructor`.');\n  !options?.injector && assertInInjectionContext(afterRenderEffect);\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return NOOP_AFTER_RENDER_REF;\n  }\n  const injector = options?.injector ?? inject(Injector);\n  const scheduler = injector.get(ChangeDetectionScheduler);\n  const manager = injector.get(AfterRenderManager);\n  const tracing = injector.get(TracingService, null, {\n    optional: true\n  });\n  manager.impl ??= injector.get(AfterRenderImpl);\n  let spec = callbackOrSpec;\n  if (typeof spec === 'function') {\n    spec = {\n      mixedReadWrite: callbackOrSpec\n    };\n  }\n  const sequence = new AfterRenderEffectSequence(manager.impl, [spec.earlyRead, spec.write, spec.mixedReadWrite, spec.read], scheduler, injector.get(DestroyRef), tracing?.snapshot(null));\n  manager.impl.register(sequence);\n  return sequence;\n}\n\n// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are\n\n/**\n * Status of a `Resource`.\n *\n * @experimental\n */\nvar ResourceStatus;\n(function (ResourceStatus) {\n  /**\n   * The resource has no valid request and will not perform any loading.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Idle\"] = 0] = \"Idle\";\n  /**\n   * Loading failed with an error.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Error\"] = 1] = \"Error\";\n  /**\n   * The resource is currently loading a new value as a result of a change in its `request`.\n   *\n   * `value()` will be `undefined`.\n   */\n  ResourceStatus[ResourceStatus[\"Loading\"] = 2] = \"Loading\";\n  /**\n   * The resource is currently reloading a fresh value for the same request.\n   *\n   * `value()` will continue to return the previously fetched value during the reloading operation.\n   */\n  ResourceStatus[ResourceStatus[\"Reloading\"] = 3] = \"Reloading\";\n  /**\n   * Loading has completed and the resource has the value returned from the loader.\n   */\n  ResourceStatus[ResourceStatus[\"Resolved\"] = 4] = \"Resolved\";\n  /**\n   * The resource's value was set locally via `.set()` or `.update()`.\n   */\n  ResourceStatus[ResourceStatus[\"Local\"] = 5] = \"Local\";\n})(ResourceStatus || (ResourceStatus = {}));\n\n/**\n * Constructs a `Resource` that projects a reactive request to an asynchronous operation defined by\n * a loader function, which exposes the result of the loading operation via signals.\n *\n * Note that `resource` is intended for _read_ operations, not operations which perform mutations.\n * `resource` will cancel in-progress loads via the `AbortSignal` when destroyed or when a new\n * request object becomes available, which could prematurely abort mutations.\n *\n * @experimental\n */\nfunction resource(options) {\n  options?.injector || assertInInjectionContext(resource);\n  const request = options.request ?? (() => null);\n  return new WritableResourceImpl(request, options.loader, options.equal, options.injector);\n}\n/**\n * Base class for `WritableResource` which handles the state operations and is unopinionated on the\n * actual async operation.\n *\n * Mainly factored out for better readability.\n */\nclass BaseWritableResource {\n  value;\n  status = signal(ResourceStatus.Idle);\n  error = signal(undefined);\n  rawSetValue;\n  constructor(equal) {\n    this.value = signal(undefined, {\n      equal: equal ? wrapEqualityFn(equal) : undefined\n    });\n    this.rawSetValue = this.value.set;\n    this.value.set = value => this.set(value);\n    this.value.update = fn => this.set(fn(untracked(this.value)));\n  }\n  set(value) {\n    // Set the value signal and check whether its `version` changes. This will tell us\n    // if the value signal actually updated or not.\n    const prevVersion = this.value[SIGNAL$1].version;\n    this.rawSetValue(value);\n    if (this.value[SIGNAL$1].version === prevVersion) {\n      // The value must've been equal to the previous, so no need to change states.\n      return;\n    }\n    // We're departing from whatever state the resource was in previously, and entering\n    // Local state.\n    this.onLocalValue();\n    this.status.set(ResourceStatus.Local);\n    this.error.set(undefined);\n  }\n  update(updater) {\n    this.value.update(updater);\n  }\n  isLoading = computed(() => this.status() === ResourceStatus.Loading || this.status() === ResourceStatus.Reloading);\n  hasValue() {\n    return this.status() === ResourceStatus.Resolved || this.status() === ResourceStatus.Local || this.status() === ResourceStatus.Reloading;\n  }\n  asReadonly() {\n    return this;\n  }\n  /**\n   * Put the resource in a state with a given value.\n   */\n  setValueState(status, value = undefined) {\n    this.status.set(status);\n    this.rawSetValue(value);\n    this.error.set(undefined);\n  }\n  /**\n   * Put the resource into the error state.\n   */\n  setErrorState(err) {\n    this.value.set(undefined);\n    // The previous line will set the status to `Local`, so we need to update it.\n    this.status.set(ResourceStatus.Error);\n    this.error.set(err);\n  }\n}\nclass WritableResourceImpl extends BaseWritableResource {\n  loaderFn;\n  request;\n  pendingTasks;\n  effectRef;\n  pendingController;\n  resolvePendingTask = undefined;\n  constructor(requestFn, loaderFn, equal, injector) {\n    super(equal);\n    this.loaderFn = loaderFn;\n    injector = injector ?? inject(Injector);\n    this.pendingTasks = injector.get(PendingTasks);\n    this.request = computed(() => ({\n      // The current request as defined for this resource.\n      request: requestFn(),\n      // A counter signal which increments from 0, re-initialized for each request (similar to the\n      // `linkedSignal` pattern). A value other than 0 indicates a refresh operation.\n      reload: signal(0)\n    }));\n    // The actual data-fetching effect.\n    this.effectRef = effect(this.loadEffect.bind(this), {\n      injector,\n      manualCleanup: true\n    });\n    // Cancel any pending request when the resource itself is destroyed.\n    injector.get(DestroyRef).onDestroy(() => this.destroy());\n  }\n  reload() {\n    // We don't want to restart in-progress loads.\n    const status = untracked(this.status);\n    if (status === ResourceStatus.Idle || status === ResourceStatus.Loading || status === ResourceStatus.Reloading) {\n      return false;\n    }\n    untracked(this.request).reload.update(v => v + 1);\n    return true;\n  }\n  destroy() {\n    this.effectRef.destroy();\n    this.abortInProgressLoad();\n    this.setValueState(ResourceStatus.Idle);\n  }\n  async loadEffect() {\n    // Capture the status before any state transitions.\n    const previousStatus = untracked(this.status);\n    // Cancel any previous loading attempts.\n    this.abortInProgressLoad();\n    const request = this.request();\n    if (request.request === undefined) {\n      // An undefined request means there's nothing to load.\n      this.setValueState(ResourceStatus.Idle);\n      return;\n    }\n    // Subscribing here allows us to refresh the load later by updating the refresh signal. At the\n    // same time, we update the status according to whether we're reloading or loading.\n    if (request.reload() === 0) {\n      this.setValueState(ResourceStatus.Loading); // value becomes undefined\n    } else {\n      this.status.set(ResourceStatus.Reloading); // value persists\n    }\n    // Capturing _this_ load's pending task in a local variable is important here. We may attempt to\n    // resolve it twice:\n    //\n    //  1. when the loading function promise resolves/rejects\n    //  2. when cancelling the loading operation\n    //\n    // After the loading operation is cancelled, `this.resolvePendingTask` no longer represents this\n    // particular task, but this `await` may eventually resolve/reject. Thus, when we cancel in\n    // response to (1) below, we need to cancel the locally saved task.\n    const resolvePendingTask = this.resolvePendingTask = this.pendingTasks.add();\n    const {\n      signal: abortSignal\n    } = this.pendingController = new AbortController();\n    try {\n      // The actual loading is run through `untracked` - only the request side of `resource` is\n      // reactive. This avoids any confusion with signals tracking or not tracking depending on\n      // which side of the `await` they are.\n      const result = await untracked(() => this.loaderFn({\n        abortSignal,\n        request: request.request,\n        previous: {\n          status: previousStatus\n        }\n      }));\n      if (abortSignal.aborted) {\n        // This load operation was cancelled.\n        return;\n      }\n      // Success :)\n      this.setValueState(ResourceStatus.Resolved, result);\n    } catch (err) {\n      if (abortSignal.aborted) {\n        // This load operation was cancelled.\n        return;\n      }\n      // Fail :(\n      this.setErrorState(err);\n    } finally {\n      // Resolve the pending task now that loading is done.\n      resolvePendingTask();\n    }\n  }\n  abortInProgressLoad() {\n    this.pendingController?.abort();\n    this.pendingController = undefined;\n    // Once the load is aborted, we no longer want to block stability on its resolution.\n    this.resolvePendingTask?.();\n    this.resolvePendingTask = undefined;\n  }\n  onLocalValue() {\n    this.abortInProgressLoad();\n  }\n}\n/**\n * Wraps an equality function to handle either value being `undefined`.\n */\nfunction wrapEqualityFn(equal) {\n  return (a, b) => a === undefined || b === undefined ? a === b : equal(a, b);\n}\n\n/**\n * Creates a `ComponentRef` instance based on provided component type and a set of options.\n *\n * @usageNotes\n *\n * The example below demonstrates how the `createComponent` function can be used\n * to create an instance of a ComponentRef dynamically and attach it to an ApplicationRef,\n * so that it gets included into change detection cycles.\n *\n * Note: the example uses standalone components, but the function can also be used for\n * non-standalone components (declared in an NgModule) as well.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   template: `Hello {{ name }}!`\n * })\n * class HelloComponent {\n *   name = 'Angular';\n * }\n *\n * @Component({\n *   standalone: true,\n *   template: `<div id=\"hello-component-host\"></div>`\n * })\n * class RootComponent {}\n *\n * // Bootstrap an application.\n * const applicationRef = await bootstrapApplication(RootComponent);\n *\n * // Locate a DOM node that would be used as a host.\n * const hostElement = document.getElementById('hello-component-host');\n *\n * // Get an `EnvironmentInjector` instance from the `ApplicationRef`.\n * const environmentInjector = applicationRef.injector;\n *\n * // We can now create a `ComponentRef` instance.\n * const componentRef = createComponent(HelloComponent, {hostElement, environmentInjector});\n *\n * // Last step is to register the newly created ref using the `ApplicationRef` instance\n * // to include the component view into change detection cycles.\n * applicationRef.attachView(componentRef.hostView);\n * componentRef.changeDetectorRef.detectChanges();\n * ```\n *\n * @param component Component class reference.\n * @param options Set of options to use:\n *  * `environmentInjector`: An `EnvironmentInjector` instance to be used for the component.\n *  * `hostElement` (optional): A DOM node that should act as a host node for the component. If not\n * provided, Angular creates one based on the tag name used in the component selector (and falls\n * back to using `div` if selector doesn't have tag name info).\n *  * `elementInjector` (optional): An `ElementInjector` instance, see additional info about it\n * [here](guide/di/hierarchical-dependency-injection#elementinjector).\n *  * `projectableNodes` (optional): A list of DOM nodes that should be projected through\n * [`<ng-content>`](api/core/ng-content) of the new component instance, e.g.,\n * `[[element1, element2]]`: projects `element1` and `element2` into the same `<ng-content>`.\n * `[[element1, element2], [element3]]`: projects `element1` and `element2` into one `<ng-content>`,\n * and `element3` into a separate `<ng-content>`.\n * @returns ComponentRef instance that represents a given Component.\n *\n * @publicApi\n */\nfunction createComponent(component, options) {\n  ngDevMode && assertComponentDef(component);\n  const componentDef = getComponentDef(component);\n  const elementInjector = options.elementInjector || getNullInjector();\n  const factory = new ComponentFactory(componentDef);\n  return factory.create(elementInjector, options.projectableNodes, options.hostElement, options.environmentInjector);\n}\n/**\n * Creates an object that allows to retrieve component metadata.\n *\n * @usageNotes\n *\n * The example below demonstrates how to use the function and how the fields\n * of the returned object map to the component metadata.\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   selector: 'foo-component',\n *   template: `\n *     <ng-content></ng-content>\n *     <ng-content select=\"content-selector-a\"></ng-content>\n *   `,\n * })\n * class FooComponent {\n *   @Input('inputName') inputPropName: string;\n *   @Output('outputName') outputPropName = new EventEmitter<void>();\n * }\n *\n * const mirror = reflectComponentType(FooComponent);\n * expect(mirror.type).toBe(FooComponent);\n * expect(mirror.selector).toBe('foo-component');\n * expect(mirror.isStandalone).toBe(true);\n * expect(mirror.inputs).toEqual([{propName: 'inputName', templateName: 'inputPropName'}]);\n * expect(mirror.outputs).toEqual([{propName: 'outputName', templateName: 'outputPropName'}]);\n * expect(mirror.ngContentSelectors).toEqual([\n *   '*',                 // first `<ng-content>` in a template, the selector defaults to `*`\n *   'content-selector-a' // second `<ng-content>` in a template\n * ]);\n * ```\n *\n * @param component Component class reference.\n * @returns An object that allows to retrieve component metadata.\n *\n * @publicApi\n */\nfunction reflectComponentType(component) {\n  const componentDef = getComponentDef(component);\n  if (!componentDef) return null;\n  const factory = new ComponentFactory(componentDef);\n  return {\n    get selector() {\n      return factory.selector;\n    },\n    get type() {\n      return factory.componentType;\n    },\n    get inputs() {\n      return factory.inputs;\n    },\n    get outputs() {\n      return factory.outputs;\n    },\n    get ngContentSelectors() {\n      return factory.ngContentSelectors;\n    },\n    get isStandalone() {\n      return componentDef.standalone;\n    },\n    get isSignal() {\n      return componentDef.signals;\n    }\n  };\n}\n\n/**\n * Merge multiple application configurations from left to right.\n *\n * @param configs Two or more configurations to be merged.\n * @returns A merged [ApplicationConfig](api/core/ApplicationConfig).\n *\n * @publicApi\n */\nfunction mergeApplicationConfig(...configs) {\n  return configs.reduce((prev, curr) => {\n    return Object.assign(prev, curr, {\n      providers: [...prev.providers, ...curr.providers]\n    });\n  }, {\n    providers: []\n  });\n}\n\n/**\n * Injection token representing the current HTTP request object.\n *\n * Use this token to access the current request when handling server-side\n * rendering (SSR).\n *\n * @remarks\n * This token may be `null` in the following scenarios:\n *\n * * During the build processes.\n * * When the application is rendered in the browser (client-side rendering).\n * * When performing static site generation (SSG).\n * * During route extraction in development (at the time of the request).\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request | `Request` on MDN}\n *\n * @developerPreview\n */\nconst REQUEST = new InjectionToken('REQUEST', {\n  providedIn: 'platform',\n  factory: () => null\n});\n/**\n * Injection token for response initialization options.\n *\n * Use this token to provide response options for configuring or initializing\n * HTTP responses in server-side rendering or API endpoints.\n *\n * @remarks\n * This token may be `null` in the following scenarios:\n *\n * * During the build processes.\n * * When the application is rendered in the browser (client-side rendering).\n * * When performing static site generation (SSG).\n * * During route extraction in development (at the time of the request).\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response | `ResponseInit` on MDN}\n *\n * @developerPreview\n */\nconst RESPONSE_INIT = new InjectionToken('RESPONSE_INIT', {\n  providedIn: 'platform',\n  factory: () => null\n});\n/**\n * Injection token for additional request context.\n *\n * Use this token to pass custom metadata or context related to the current request in server-side rendering.\n *\n * @remarks\n * This token is only available during server-side rendering and will be `null` in other contexts.\n *\n * @developerPreview\n */\nconst REQUEST_CONTEXT = new InjectionToken('REQUEST_CONTEXT', {\n  providedIn: 'platform',\n  factory: () => null\n});\n\n/**\n * @module\n * @description\n * Entry point from which you should import all public core APIs.\n */\nif (typeof ngDevMode !== 'undefined' && ngDevMode) {\n  // This helper is to give a reasonable error message to people upgrading to v9 that have not yet\n  // installed `@angular/localize` in their app.\n  // tslint:disable-next-line: no-toplevel-property-access\n  _global.$localize ??= function () {\n    throw new Error('It looks like your application or one of its dependencies is using i18n.\\n' + 'Angular 9 introduced a global `$localize()` function that needs to be loaded.\\n' + 'Please run `ng add @angular/localize` from the Angular CLI.\\n' + \"(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\\n\" + 'For server-side rendering applications add the import to your `main.server.ts` file.)');\n  };\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/* This file is not used to build this module. It is only used during editing\n * by the TypeScript language service and during build for verification. `ngc`\n * replaces this file with production index.ts when it rewrites private symbol\n * names.\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, AfterRenderPhase, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, HOST_TAG_NAME, Host, HostAttributeToken, HostBinding, HostListener, INJECTOR$1 as INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, OutputEmitterRef, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, PendingTasks, Pipe, PlatformRef, Query, QueryList, REQUEST, REQUEST_CONTEXT, RESPONSE_INIT, Renderer2, RendererFactory2, RendererStyleFlags2, ResourceStatus, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, afterNextRender, afterRender, afterRenderEffect, asNativeElements, assertInInjectionContext, assertNotInReactiveContext, assertPlatform, booleanAttribute, computed, contentChild, contentChildren, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, input, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, untracked, viewChild, viewChildren, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, AfterRenderManager as ɵAfterRenderManager, CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, ChangeDetectionScheduler as ɵChangeDetectionScheduler, ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, DeferBlockBehavior as ɵDeferBlockBehavior, DeferBlockState as ɵDeferBlockState, ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, EffectScheduler as ɵEffectScheduler, IMAGE_CONFIG as ɵIMAGE_CONFIG, IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, PendingTasksInternal as ɵPendingTasksInternal, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, TracingAction as ɵTracingAction, TracingService as ɵTracingService, USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, ZONELESS_ENABLED as ɵZONELESS_ENABLED, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, depsTracker as ɵdepsTracker, detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, devModeEqual as ɵdevModeEqual, disableProfiling as ɵdisableProfiling, enableProfiling as ɵenableProfiling, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, getClosestComponentName as ɵgetClosestComponentName, getDebugNode as ɵgetDebugNode, getDeferBlocks as ɵgetDeferBlocks, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getOutputDestroyRef as ɵgetOutputDestroyRef, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, isBoundToModule as ɵisBoundToModule, isComponentDefPendingResolution as ɵisComponentDefPendingResolution, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, microtaskEffect as ɵmicrotaskEffect, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, performanceMarkFeature as ɵperformanceMarkFeature, publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, readHydrationInfo as ɵreadHydrationInfo, registerLocaleData as ɵregisterLocaleData, renderDeferBlockState as ɵrenderDeferBlockState, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setInjectorProfilerContext as ɵsetInjectorProfilerContext, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, startMeasuring as ɵstartMeasuring, stopMeasuring as ɵstopMeasuring, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, triggerResourceLoading as ɵtriggerResourceLoading, truncateMiddle as ɵtruncateMiddle, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵunwrapWritableSignal, withDomHydration as ɵwithDomHydration, withEventReplay as ɵwithEventReplay, withI18nSupport as ɵwithI18nSupport, withIncrementalHydration as ɵwithIncrementalHydration, ɵɵCopyDefinitionFeature, ɵɵExternalStylesFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcomponentInstance, ɵɵconditional, ɵɵcontentQuery, ɵɵcontentQuerySignal, ɵɵdeclareLet, ɵɵdefer, ɵɵdeferEnableTimerScheduling, ɵɵdeferHydrateNever, ɵɵdeferHydrateOnHover, ɵɵdeferHydrateOnIdle, ɵɵdeferHydrateOnImmediate, ɵɵdeferHydrateOnInteraction, ɵɵdeferHydrateOnTimer, ɵɵdeferHydrateOnViewport, ɵɵdeferHydrateWhen, ɵɵdeferOnHover, ɵɵdeferOnIdle, ɵɵdeferOnImmediate, ɵɵdeferOnInteraction, ɵɵdeferOnTimer, ɵɵdeferOnViewport, ɵɵdeferPrefetchOnHover, ɵɵdeferPrefetchOnIdle, ɵɵdeferPrefetchOnImmediate, ɵɵdeferPrefetchOnInteraction, ɵɵdeferPrefetchOnTimer, ɵɵdeferPrefetchOnViewport, ɵɵdeferPrefetchWhen, ɵɵdeferWhen, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetComponentDepsFactory, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareClassMetadataAsync, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryAdvance, ɵɵqueryRefresh, ɵɵreadContextLet, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵrepeater, ɵɵrepeaterCreate, ɵɵrepeaterTrackByIdentity, ɵɵrepeaterTrackByIndex, ɵɵreplaceMetadata, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstoreLet, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵtwoWayBindingSet, ɵɵtwoWayListener, ɵɵtwoWayProperty, ɵɵvalidateIframeAttribute, ɵɵviewQuery, ɵɵviewQuerySignal };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nconst Attribute = {\n  /**\n   * The jsaction attribute defines a mapping of a DOM event to a\n   * generic event (aka jsaction), to which the actual event handlers\n   * that implement the behavior of the application are bound. The\n   * value is a semicolon separated list of colon separated pairs of\n   * an optional DOM event name and a jsaction name. If the optional\n   * DOM event name is omitted, 'click' is assumed. The jsaction names\n   * are dot separated pairs of a namespace and a simple jsaction\n   * name.\n   *\n   * See grammar in README.md for expected syntax in the attribute value.\n   */\n  JSACTION: 'jsaction'\n};\n\n/** All properties that are used by jsaction. */\nconst Property = {\n  /**\n   * The parsed value of the jsaction attribute is stored in this\n   * property on the DOM node. The parsed value is an Object. The\n   * property names of the object are the events; the values are the\n   * names of the actions. This property is attached even on nodes\n   * that don't have a jsaction attribute as an optimization, because\n   * property lookup is faster than attribute access.\n   */\n  JSACTION: '__jsaction',\n  /**\n   * The owner property references an a logical owner for a DOM node. JSAction\n   * will follow this reference instead of parentNode when traversing the DOM\n   * to find jsaction attributes. This allows overlaying a logical structure\n   * over a document where the DOM structure can't reflect that structure.\n   */\n  OWNER: '__owner'\n};\n\n/**\n * Map from jsaction annotation to a parsed map from event name to action name.\n */\nconst parseCache = {};\n/**\n * Reads the jsaction parser cache from the given DOM Element.\n */\nfunction get(element) {\n  return element[Property.JSACTION];\n}\n/**\n * Reads the jsaction parser cache for the given DOM element. If no cache is yet present,\n * creates an empty one.\n */\nfunction getDefaulted(element) {\n  const cache = get(element) ?? {};\n  set(element, cache);\n  return cache;\n}\n/**\n * Writes the jsaction parser cache to the given DOM Element.\n */\nfunction set(element, actionMap) {\n  element[Property.JSACTION] = actionMap;\n}\n/**\n * Looks up the parsed action map from the source jsaction attribute value.\n *\n * @param text Unparsed jsaction attribute value.\n * @return Parsed jsaction attribute value, if already present in the cache.\n */\nfunction getParsed(text) {\n  return parseCache[text];\n}\n/**\n * Inserts the parse result for the given source jsaction value into the cache.\n *\n * @param text Unparsed jsaction attribute value.\n * @param parsed Attribute value parsed into the action map.\n */\nfunction setParsed(text, parsed) {\n  parseCache[text] = parsed;\n}\n/**\n * Clears the jsaction parser cache from the given DOM Element.\n *\n * @param element .\n */\nfunction clear(element) {\n  if (Property.JSACTION in element) {\n    delete element[Property.JSACTION];\n  }\n}\n\n/*\n * Names of events that are special to jsaction. These are not all\n * event types that are legal to use in either HTML or the addEvent()\n * API, but these are the ones that are treated specially. All other\n * DOM events can be used in either addEvent() or in the value of the\n * jsaction attribute. Beware of browser specific events or events\n * that don't bubble though: If they are not mentioned here, then\n * event contract doesn't work around their peculiarities.\n */\nconst EventType = {\n  /**\n   * Mouse middle click, introduced in Chrome 55 and not yet supported on\n   * other browsers.\n   */\n  AUXCLICK: 'auxclick',\n  /**\n   * The change event fired by browsers when the `value` attribute of input,\n   * select, and textarea elements are changed.\n   */\n  CHANGE: 'change',\n  /**\n   * The click event. In addEvent() refers to all click events, in the\n   * jsaction attribute it refers to the unmodified click and Enter/Space\n   * keypress events.  In the latter case, a jsaction click will be triggered,\n   * for accessibility reasons.  See clickmod and clickonly, below.\n   */\n  CLICK: 'click',\n  /**\n   * Specifies the jsaction for a modified click event (i.e. a mouse\n   * click with the modifier key Cmd/Ctrl pressed). This event isn't\n   * separately enabled in addEvent(), because in the DOM, it's just a\n   * click event.\n   */\n  CLICKMOD: 'clickmod',\n  /**\n   * Specifies the jsaction for a click-only event.  Click-only doesn't take\n   * into account the case where an element with focus receives an Enter/Space\n   * keypress.  This event isn't separately enabled in addEvent().\n   */\n  CLICKONLY: 'clickonly',\n  /**\n   * The dblclick event.\n   */\n  DBLCLICK: 'dblclick',\n  /**\n   * Focus doesn't bubble, but you can use it in addEvent() and\n   * jsaction anyway. EventContract does the right thing under the\n   * hood.\n   */\n  FOCUS: 'focus',\n  /**\n   * This event only exists in IE. For addEvent() and jsaction, use\n   * focus instead; EventContract does the right thing even though\n   * focus doesn't bubble.\n   */\n  FOCUSIN: 'focusin',\n  /**\n   * Analog to focus.\n   */\n  BLUR: 'blur',\n  /**\n   * Analog to focusin.\n   */\n  FOCUSOUT: 'focusout',\n  /**\n   * Submit doesn't bubble, so it cannot be used with event\n   * contract. However, the browser helpfully fires a click event on\n   * the submit button of a form (even if the form is not submitted by\n   * a click on the submit button). So you should handle click on the\n   * submit button instead.\n   */\n  SUBMIT: 'submit',\n  /**\n   * The keydown event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keydown event. It represents click actions in non-Gecko\n   * browsers.\n   */\n  KEYDOWN: 'keydown',\n  /**\n   * The keypress event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keypress event. It represents click actions in Gecko browsers.\n   */\n  KEYPRESS: 'keypress',\n  /**\n   * The keyup event. In addEvent() and non-click jsaction it represents the\n   * regular DOM keyup event. It represents click actions in non-Gecko\n   * browsers.\n   */\n  KEYUP: 'keyup',\n  /**\n   * The mouseup event. Can either be used directly or used implicitly to\n   * capture mouseup events. In addEvent(), it represents a regular DOM\n   * mouseup event.\n   */\n  MOUSEUP: 'mouseup',\n  /**\n   * The mousedown event. Can either be used directly or used implicitly to\n   * capture mouseenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  MOUSEDOWN: 'mousedown',\n  /**\n   * The mouseover event. Can either be used directly or used implicitly to\n   * capture mouseenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  MOUSEOVER: 'mouseover',\n  /**\n   * The mouseout event. Can either be used directly or used implicitly to\n   * capture mouseover events. In addEvent(), it represents a regular DOM\n   * mouseout event.\n   */\n  MOUSEOUT: 'mouseout',\n  /**\n   * The mouseenter event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  MOUSEENTER: 'mouseenter',\n  /**\n   * The mouseleave event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  MOUSELEAVE: 'mouseleave',\n  /**\n   * The mousemove event.\n   */\n  MOUSEMOVE: 'mousemove',\n  /**\n   * The pointerup event. Can either be used directly or used implicitly to\n   * capture pointerup events. In addEvent(), it represents a regular DOM\n   * pointerup event.\n   */\n  POINTERUP: 'pointerup',\n  /**\n   * The pointerdown event. Can either be used directly or used implicitly to\n   * capture pointerenter events. In addEvent(), it represents a regular DOM\n   * mouseover event.\n   */\n  POINTERDOWN: 'pointerdown',\n  /**\n   * The pointerover event. Can either be used directly or used implicitly to\n   * capture pointerenter events. In addEvent(), it represents a regular DOM\n   * pointerover event.\n   */\n  POINTEROVER: 'pointerover',\n  /**\n   * The pointerout event. Can either be used directly or used implicitly to\n   * capture pointerover events. In addEvent(), it represents a regular DOM\n   * pointerout event.\n   */\n  POINTEROUT: 'pointerout',\n  /**\n   * The pointerenter event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  POINTERENTER: 'pointerenter',\n  /**\n   * The pointerleave event. Does not bubble and fires individually on each\n   * element being entered within a DOM tree.\n   */\n  POINTERLEAVE: 'pointerleave',\n  /**\n   * The pointermove event.\n   */\n  POINTERMOVE: 'pointermove',\n  /**\n   * The pointercancel event.\n   */\n  POINTERCANCEL: 'pointercancel',\n  /**\n   * The gotpointercapture event is fired when\n   * Element.setPointerCapture(pointerId) is called on a mouse input, or\n   * implicitly when a touch input begins.\n   */\n  GOTPOINTERCAPTURE: 'gotpointercapture',\n  /**\n   * The lostpointercapture event is fired when\n   * Element.releasePointerCapture(pointerId) is called, or implicitly after a\n   * touch input ends.\n   */\n  LOSTPOINTERCAPTURE: 'lostpointercapture',\n  /**\n   * The error event. The error event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing under\n   * the hood (except in IE8 which does not use error events).\n   */\n  ERROR: 'error',\n  /**\n   * The load event. The load event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing\n   * under the hood.\n   */\n  LOAD: 'load',\n  /**\n   * The unload event.\n   */\n  UNLOAD: 'unload',\n  /**\n   * The touchstart event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHSTART: 'touchstart',\n  /**\n   * The touchend event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHEND: 'touchend',\n  /**\n   * The touchmove event. Bubbles, will only ever fire in browsers with\n   * touch support.\n   */\n  TOUCHMOVE: 'touchmove',\n  /**\n   * The input event.\n   */\n  INPUT: 'input',\n  /**\n   * The scroll event.\n   */\n  SCROLL: 'scroll',\n  /**\n   * The toggle event. The toggle event doesn't bubble, but you can use it in\n   * addEvent() and jsaction anyway. EventContract does the right thing\n   * under the hood.\n   */\n  TOGGLE: 'toggle',\n  /**\n   * A custom event. The actual custom event type is declared as the 'type'\n   * field in the event details. Supported in Firefox 6+, IE 9+, and all Chrome\n   * versions.\n   *\n   * This is an internal name. Users should use jsaction's fireCustomEvent to\n   * fire custom events instead of relying on this type to create them.\n   */\n  CUSTOM: '_custom'\n};\n/** All event types that do not bubble or capture and need a polyfill. */\nconst MOUSE_SPECIAL_EVENT_TYPES = [EventType.MOUSEENTER, EventType.MOUSELEAVE, 'pointerenter', 'pointerleave'];\n/** All event types that are registered in the bubble phase. */\nconst BUBBLE_EVENT_TYPES = [EventType.CLICK, EventType.DBLCLICK, EventType.FOCUSIN, EventType.FOCUSOUT, EventType.KEYDOWN, EventType.KEYUP, EventType.KEYPRESS, EventType.MOUSEOVER, EventType.MOUSEOUT, EventType.SUBMIT, EventType.TOUCHSTART, EventType.TOUCHEND, EventType.TOUCHMOVE, 'touchcancel', 'auxclick', 'change', 'compositionstart', 'compositionupdate', 'compositionend', 'beforeinput', 'input', 'select', 'copy', 'cut', 'paste', 'mousedown', 'mouseup', 'wheel', 'contextmenu', 'dragover', 'dragenter', 'dragleave', 'drop', 'dragstart', 'dragend', 'pointerdown', 'pointermove', 'pointerup', 'pointercancel', 'pointerover', 'pointerout', 'gotpointercapture', 'lostpointercapture',\n// Video events.\n'ended', 'loadedmetadata',\n// Page visibility events.\n'pagehide', 'pageshow', 'visibilitychange',\n// Content visibility events.\n'beforematch'];\n/** All event types that are registered in the capture phase. */\nconst CAPTURE_EVENT_TYPES = [EventType.FOCUS, EventType.BLUR, EventType.ERROR, EventType.LOAD, EventType.TOGGLE];\n/**\n * Whether or not an event type should be registered in the capture phase.\n * @param eventType\n * @returns bool\n */\nconst isCaptureEventType = eventType => CAPTURE_EVENT_TYPES.indexOf(eventType) >= 0;\n/** All event types that are registered early.  */\nconst EARLY_EVENT_TYPES = BUBBLE_EVENT_TYPES.concat(CAPTURE_EVENT_TYPES);\n/**\n * Whether or not an event type is registered in the early contract.\n */\nconst isEarlyEventType = eventType => EARLY_EVENT_TYPES.indexOf(eventType) >= 0;\n\n/**\n * If on a Macintosh with an extended keyboard, the Enter key located in the\n * numeric pad has a different ASCII code.\n */\nconst MAC_ENTER = 3;\n/** The Enter key. */\nconst ENTER = 13;\n/** The Space key. */\nconst SPACE = 32;\n/** Special keycodes used by jsaction for the generic click action. */\nconst KeyCode = {\n  MAC_ENTER,\n  ENTER,\n  SPACE\n};\n\n/**\n * Gets a browser event type, if it would differ from the JSAction event type.\n */\nfunction getBrowserEventType(eventType) {\n  // Mouseenter and mouseleave events are not handled directly because they\n  // are not available everywhere. In browsers where they are available, they\n  // don't bubble and aren't visible at the container boundary. Instead, we\n  // synthesize the mouseenter and mouseleave events from mouseover and\n  // mouseout events, respectively. Cf. eventcontract.js.\n  if (eventType === EventType.MOUSEENTER) {\n    return EventType.MOUSEOVER;\n  } else if (eventType === EventType.MOUSELEAVE) {\n    return EventType.MOUSEOUT;\n  } else if (eventType === EventType.POINTERENTER) {\n    return EventType.POINTEROVER;\n  } else if (eventType === EventType.POINTERLEAVE) {\n    return EventType.POINTEROUT;\n  }\n  return eventType;\n}\n/**\n * Registers the event handler function with the given DOM element for\n * the given event type.\n *\n * @param element The element.\n * @param eventType The event type.\n * @param handler The handler function to install.\n * @param passive A boolean value that, if `true`, indicates that the function\n *     specified by `handler` will never call `preventDefault()`.\n * @return Information needed to uninstall the event handler eventually.\n */\nfunction addEventListener(element, eventType, handler, passive) {\n  // All event handlers are registered in the bubbling\n  // phase.\n  //\n  // All browsers support focus and blur, but these events only are propagated\n  // in the capture phase. Very legacy browsers do not support focusin or\n  // focusout.\n  //\n  // It would be a bad idea to register all event handlers in the\n  // capture phase because then regular onclick handlers would not be\n  // executed at all on events that trigger a jsaction. That's not\n  // entirely what we want, at least for now.\n  //\n  // Error and load events (i.e. on images) do not bubble so they are also\n  // handled in the capture phase.\n  let capture = false;\n  if (isCaptureEventType(eventType)) {\n    capture = true;\n  }\n  const options = typeof passive === 'boolean' ? {\n    capture,\n    passive\n  } : capture;\n  element.addEventListener(eventType, handler, options);\n  return {\n    eventType,\n    handler,\n    capture,\n    passive\n  };\n}\n/**\n * Removes the event handler for the given event from the element.\n * the given event type.\n *\n * @param element The element.\n * @param info The information needed to deregister the handler, as returned by\n *     addEventListener(), above.\n */\nfunction removeEventListener(element, info) {\n  if (element.removeEventListener) {\n    // It's worth noting that some browser releases have been inconsistent on this, and unless\n    // you have specific reasons otherwise, it's probably wise to use the same values used for\n    // the call to addEventListener() when calling removeEventListener().\n    const options = typeof info.passive === 'boolean' ? {\n      capture: info.capture\n    } : info.capture;\n    element.removeEventListener(info.eventType, info.handler, options);\n    // `detachEvent` is an old DOM API.\n    // tslint:disable-next-line:no-any\n  } else if (element.detachEvent) {\n    // `detachEvent` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    element.detachEvent(`on${info.eventType}`, info.handler);\n  }\n}\n/**\n * Cancels propagation of an event.\n * @param e The event to cancel propagation for.\n */\nfunction stopPropagation(e) {\n  e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n}\n/**\n * Prevents the default action of an event.\n * @param e The event to prevent the default action for.\n */\nfunction preventDefault(e) {\n  e.preventDefault ? e.preventDefault() : e.returnValue = false;\n}\n/**\n * Gets the target Element of the event. In Firefox, a text node may appear as\n * the target of the event, in which case we return the parent element of the\n * text node.\n * @param e The event to get the target of.\n * @return The target element.\n */\nfunction getTarget(e) {\n  let el = e.target;\n  // In Firefox, the event may have a text node as its target. We always\n  // want the parent Element the text node belongs to, however.\n  if (!el.getAttribute && el.parentNode) {\n    el = el.parentNode;\n  }\n  return el;\n}\n/**\n * Whether we are on a Mac. Not pulling in useragent just for this.\n */\nlet isMac = typeof navigator !== 'undefined' && /Macintosh/.test(navigator.userAgent);\n/**\n * Determines and returns whether the given event (which is assumed to be a\n * click event) is a middle click.\n * NOTE: There is not a consistent way to identify middle click\n * http://www.unixpapa.com/js/mouse.html\n */\nfunction isMiddleClick(e) {\n  return (\n    // `which` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.which === 2 ||\n    // `which` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.which == null &&\n    // `button` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.button === 4 // middle click for IE\n  );\n}\n/**\n * Determines and returns whether the given event (which is assumed\n * to be a click event) is modified. A middle click is considered a modified\n * click to retain the default browser action, which opens a link in a new tab.\n * @param e The event.\n * @return Whether the given event is modified.\n */\nfunction isModifiedClickEvent(e) {\n  return (\n    // `metaKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    isMac && e.metaKey ||\n    // `ctrlKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    !isMac && e.ctrlKey || isMiddleClick(e) ||\n    // `shiftKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.shiftKey\n  );\n}\n/** Whether we are on WebKit (e.g., Chrome). */\nconst isWebKit = typeof navigator !== 'undefined' && !/Opera/.test(navigator.userAgent) && /WebKit/.test(navigator.userAgent);\n/** Whether we are on IE. */\nconst isIe = typeof navigator !== 'undefined' && (/MSIE/.test(navigator.userAgent) || /Trident/.test(navigator.userAgent));\n/** Whether we are on Gecko (e.g., Firefox). */\nconst isGecko = typeof navigator !== 'undefined' && !/Opera|WebKit/.test(navigator.userAgent) && /Gecko/.test(navigator.product);\n/**\n * Determines and returns whether the given element is a valid target for\n * keypress/keydown DOM events that act like regular DOM clicks.\n * @param el The element.\n * @return Whether the given element is a valid action key target.\n */\nfunction isValidActionKeyTarget(el) {\n  if (!('getAttribute' in el)) {\n    return false;\n  }\n  if (isTextControl(el)) {\n    return false;\n  }\n  if (isNativelyActivatable(el)) {\n    return false;\n  }\n  // `isContentEditable` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  if (el.isContentEditable) {\n    return false;\n  }\n  return true;\n}\n/**\n * Whether an event has a modifier key activated.\n * @param e The event.\n * @return True, if a modifier key is activated.\n */\nfunction hasModifierKey(e) {\n  return (\n    // `ctrlKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.ctrlKey ||\n    // `shiftKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.shiftKey ||\n    // `altKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.altKey ||\n    // `metaKey` is an old DOM API.\n    // tslint:disable-next-line:no-any\n    e.metaKey\n  );\n}\n/**\n * Determines and returns whether the given event has a target that already\n * has event handlers attached because it is a native HTML control. Used to\n * determine if preventDefault should be called when isActionKeyEvent is true.\n * @param e The event.\n * @return If preventDefault should be called.\n */\nfunction shouldCallPreventDefaultOnNativeHtmlControl(e) {\n  const el = getTarget(e);\n  const tagName = el.tagName.toUpperCase();\n  const role = (el.getAttribute('role') || '').toUpperCase();\n  if (tagName === 'BUTTON' || role === 'BUTTON') {\n    return true;\n  }\n  if (!isNativeHTMLControl(el)) {\n    return false;\n  }\n  if (tagName === 'A') {\n    return false;\n  }\n  /**\n   * Fix for physical d-pads on feature phone platforms; the native event\n   * (ie. isTrusted: true) needs to fire to show the OPTION list. See\n   * b/135288469 for more info.\n   */\n  if (tagName === 'SELECT') {\n    return false;\n  }\n  if (processSpace(el)) {\n    return false;\n  }\n  if (isTextControl(el)) {\n    return false;\n  }\n  return true;\n}\n/**\n * Determines and returns whether the given event acts like a regular DOM click,\n * and should be handled instead of the click.  If this returns true, the caller\n * will call preventDefault() to prevent a possible duplicate event.\n * This is represented by a keypress (keydown on Gecko browsers) on Enter or\n * Space key.\n * @param e The event.\n * @return True, if the event emulates a DOM click.\n */\nfunction isActionKeyEvent(e) {\n  let key =\n  // `which` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.which ||\n  // `keyCode` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.keyCode;\n  if (!key && e.key) {\n    key = ACTION_KEY_TO_KEYCODE[e.key];\n  }\n  if (isWebKit && key === KeyCode.MAC_ENTER) {\n    key = KeyCode.ENTER;\n  }\n  if (key !== KeyCode.ENTER && key !== KeyCode.SPACE) {\n    return false;\n  }\n  const el = getTarget(e);\n  if (e.type !== EventType.KEYDOWN || !isValidActionKeyTarget(el) || hasModifierKey(e)) {\n    return false;\n  }\n  // For <input type=\"checkbox\">, we must only handle the browser's native click\n  // event, so that the browser can toggle the checkbox.\n  if (processSpace(el) && key === KeyCode.SPACE) {\n    return false;\n  }\n  // If this element is non-focusable, ignore stray keystrokes (b/18337209)\n  // Sscreen readers can move without tab focus, so any tabIndex is focusable.\n  // See B/21809604\n  if (!isFocusable(el)) {\n    return false;\n  }\n  const type = (el.getAttribute('role') || el.type || el.tagName).toUpperCase();\n  const isSpecificTriggerKey = IDENTIFIER_TO_KEY_TRIGGER_MAPPING[type] % key === 0;\n  const isDefaultTriggerKey = !(type in IDENTIFIER_TO_KEY_TRIGGER_MAPPING) && key === KeyCode.ENTER;\n  const hasType = el.tagName.toUpperCase() !== 'INPUT' || !!el.type;\n  return (isSpecificTriggerKey || isDefaultTriggerKey) && hasType;\n}\n/**\n * Checks whether a DOM element can receive keyboard focus.\n * This code is based on goog.dom.isFocusable, but simplified since we shouldn't\n * care about visibility if we're already handling a keyboard event.\n */\nfunction isFocusable(el) {\n  return (el.tagName in NATIVELY_FOCUSABLE_ELEMENTS || hasSpecifiedTabIndex(el)) && !el.disabled;\n}\n/**\n * @param element Element to check.\n * @return Whether the element has a specified tab index.\n */\nfunction hasSpecifiedTabIndex(element) {\n  // IE returns 0 for an unset tabIndex, so we must use getAttributeNode(),\n  // which returns an object with a 'specified' property if tabIndex is\n  // specified.  This works on other browsers, too.\n  const attrNode = element.getAttributeNode('tabindex'); // Must be lowercase!\n  return attrNode != null && attrNode.specified;\n}\n/** Element tagnames that are focusable by default. */\nconst NATIVELY_FOCUSABLE_ELEMENTS = {\n  'A': 1,\n  'INPUT': 1,\n  'TEXTAREA': 1,\n  'SELECT': 1,\n  'BUTTON': 1\n};\n/** @return True, if the Space key was pressed. */\nfunction isSpaceKeyEvent(e) {\n  const key =\n  // `which` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.which ||\n  // `keyCode` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  e.keyCode;\n  const el = getTarget(e);\n  const elementName = (el.type || el.tagName).toUpperCase();\n  return key === KeyCode.SPACE && elementName !== 'CHECKBOX';\n}\n/**\n * Determines whether the event corresponds to a non-bubbling mouse\n * event type (mouseenter, mouseleave, pointerenter, and pointerleave).\n *\n * During mouseover (mouseenter) and pointerover (pointerenter), the\n * relatedTarget is the element being entered from. During mouseout (mouseleave)\n * and pointerout (pointerleave), the relatedTarget is the element being exited\n * to.\n *\n * In both cases, if relatedTarget is outside target, then the corresponding\n * special event has occurred, otherwise it hasn't.\n *\n * @param e The mouseover/mouseout event.\n * @param type The type of the mouse special event.\n * @param element The element on which the jsaction for the\n *     mouseenter/mouseleave event is defined.\n * @return True if the event is a mouseenter/mouseleave event.\n */\nfunction isMouseSpecialEvent(e, type, element) {\n  // `relatedTarget` is an old DOM API.\n  // tslint:disable-next-line:no-any\n  const related = e.relatedTarget;\n  return (e.type === EventType.MOUSEOVER && type === EventType.MOUSEENTER || e.type === EventType.MOUSEOUT && type === EventType.MOUSELEAVE || e.type === EventType.POINTEROVER && type === EventType.POINTERENTER || e.type === EventType.POINTEROUT && type === EventType.POINTERLEAVE) && (!related || related !== element && !element.contains(related));\n}\n/**\n * Creates a new EventLike object for a mouseenter/mouseleave event that's\n * derived from the original corresponding mouseover/mouseout event.\n * @param e The event.\n * @param target The element on which the jsaction for the mouseenter/mouseleave\n *     event is defined.\n * @return A modified event-like object copied from the event object passed into\n *     this function.\n */\nfunction createMouseSpecialEvent(e, target) {\n  // We have to create a copy of the event object because we need to mutate\n  // its fields. We do this for the special mouse events because the event\n  // target needs to be retargeted to the action element rather than the real\n  // element (since we are simulating the special mouse events with mouseover/\n  // mouseout).\n  //\n  // Since we're making a copy anyways, we might as well attempt to convert\n  // this event into a pseudo-real mouseenter/mouseleave event by adjusting\n  // its type.\n  //\n  // tslint:disable-next-line:no-any\n  const copy = {};\n  for (const property in e) {\n    if (property === 'srcElement' || property === 'target') {\n      continue;\n    }\n    const key = property;\n    // Making a copy requires iterating through all properties of `Event`.\n    // tslint:disable-next-line:no-dict-access-on-struct-type\n    const value = e[key];\n    if (typeof value === 'function') {\n      continue;\n    }\n    // Value should be the expected type, but the value of `key` is not known\n    // statically.\n    // tslint:disable-next-line:no-any\n    copy[key] = value;\n  }\n  if (e.type === EventType.MOUSEOVER) {\n    copy['type'] = EventType.MOUSEENTER;\n  } else if (e.type === EventType.MOUSEOUT) {\n    copy['type'] = EventType.MOUSELEAVE;\n  } else if (e.type === EventType.POINTEROVER) {\n    copy['type'] = EventType.POINTERENTER;\n  } else {\n    copy['type'] = EventType.POINTERLEAVE;\n  }\n  copy['target'] = copy['srcElement'] = target;\n  copy['bubbles'] = false;\n  return copy;\n}\n/**\n * Returns touch data extracted from the touch event: clientX, clientY, screenX\n * and screenY. If the event has no touch information at all, the returned\n * value is null.\n *\n * The fields of this Object are unquoted.\n *\n * @param event A touch event.\n */\nfunction getTouchData(event) {\n  const touch = event.changedTouches && event.changedTouches[0] || event.touches && event.touches[0];\n  if (!touch) {\n    return null;\n  }\n  return {\n    clientX: touch.clientX,\n    clientY: touch.clientY,\n    screenX: touch.screenX,\n    screenY: touch.screenY\n  };\n}\n/**\n * Creates a new EventLike object for a \"click\" event that's derived from the\n * original corresponding \"touchend\" event for a fast-click implementation.\n *\n * It takes a touch event, adds common fields found in a click event and\n * changes the type to 'click', so that the resulting event looks more like\n * a real click event.\n *\n * @param event A touch event.\n * @return A modified event-like object copied from the event object passed into\n *     this function.\n */\nfunction recreateTouchEventAsClick(event) {\n  const click = {};\n  click['originalEventType'] = event.type;\n  click['type'] = EventType.CLICK;\n  for (const property in event) {\n    if (property === 'type' || property === 'srcElement') {\n      continue;\n    }\n    const key = property;\n    // Making a copy requires iterating through all properties of `TouchEvent`.\n    // tslint:disable-next-line:no-dict-access-on-struct-type\n    const value = event[key];\n    if (typeof value === 'function') {\n      continue;\n    }\n    // Value should be the expected type, but the value of `key` is not known\n    // statically.\n    // tslint:disable-next-line:no-any\n    click[key] = value;\n  }\n  // Ensure that the event has the most recent timestamp. This timestamp\n  // may be used in the future to validate or cancel subsequent click events.\n  click['timeStamp'] = Date.now();\n  // Emulate preventDefault and stopPropagation behavior\n  click['defaultPrevented'] = false;\n  click['preventDefault'] = syntheticPreventDefault;\n  click['_propagationStopped'] = false;\n  click['stopPropagation'] = syntheticStopPropagation;\n  // Emulate click coordinates using touch info\n  const touch = getTouchData(event);\n  if (touch) {\n    click['clientX'] = touch.clientX;\n    click['clientY'] = touch.clientY;\n    click['screenX'] = touch.screenX;\n    click['screenY'] = touch.screenY;\n  }\n  return click;\n}\n/**\n * An implementation of \"preventDefault\" for a synthesized event. Simply\n * sets \"defaultPrevented\" property to true.\n */\nfunction syntheticPreventDefault() {\n  this.defaultPrevented = true;\n}\n/**\n * An implementation of \"stopPropagation\" for a synthesized event. It simply\n * sets a synthetic non-standard \"_propagationStopped\" property to true.\n */\nfunction syntheticStopPropagation() {\n  this._propagationStopped = true;\n}\n/**\n * Mapping of KeyboardEvent.key values to\n * KeyCode values.\n */\nconst ACTION_KEY_TO_KEYCODE = {\n  'Enter': KeyCode.ENTER,\n  ' ': KeyCode.SPACE\n};\n/**\n * Mapping of HTML element identifiers (ARIA role, type, or tagName) to the\n * keys (enter and/or space) that should activate them. A value of zero means\n * that both should activate them.\n */\nconst IDENTIFIER_TO_KEY_TRIGGER_MAPPING = {\n  'A': KeyCode.ENTER,\n  'BUTTON': 0,\n  'CHECKBOX': KeyCode.SPACE,\n  'COMBOBOX': KeyCode.ENTER,\n  'FILE': 0,\n  'GRIDCELL': KeyCode.ENTER,\n  'LINK': KeyCode.ENTER,\n  'LISTBOX': KeyCode.ENTER,\n  'MENU': 0,\n  'MENUBAR': 0,\n  'MENUITEM': 0,\n  'MENUITEMCHECKBOX': 0,\n  'MENUITEMRADIO': 0,\n  'OPTION': 0,\n  'RADIO': KeyCode.SPACE,\n  'RADIOGROUP': KeyCode.SPACE,\n  'RESET': 0,\n  'SUBMIT': 0,\n  'SWITCH': KeyCode.SPACE,\n  'TAB': 0,\n  'TREE': KeyCode.ENTER,\n  'TREEITEM': KeyCode.ENTER\n};\n/**\n * Returns whether or not to process space based on the type of the element;\n * checks to make sure that type is not null.\n * @param element The element.\n * @return Whether or not to process space based on type.\n */\nfunction processSpace(element) {\n  const type = (element.getAttribute('type') || element.tagName).toUpperCase();\n  return type in PROCESS_SPACE;\n}\n/**\n * Returns whether or not the given element is a text control.\n * @param el The element.\n * @return Whether or not the given element is a text control.\n */\nfunction isTextControl(el) {\n  const type = (el.getAttribute('type') || el.tagName).toUpperCase();\n  return type in TEXT_CONTROLS;\n}\n/**\n * Returns if the given element is a native HTML control.\n * @param el The element.\n * @return If the given element is a native HTML control.\n */\nfunction isNativeHTMLControl(el) {\n  return el.tagName.toUpperCase() in NATIVE_HTML_CONTROLS;\n}\n/**\n * Returns if the given element is natively activatable. Browsers emit click\n * events for natively activatable elements, even when activated via keyboard.\n * For these elements, we don't need to raise a11y click events.\n * @param el The element.\n * @return If the given element is a native HTML control.\n */\nfunction isNativelyActivatable(el) {\n  return el.tagName.toUpperCase() === 'BUTTON' || !!el.type && el.type.toUpperCase() === 'FILE';\n}\n/**\n * HTML <input> types (not ARIA roles) which will auto-trigger a click event for\n * the Space key, with side-effects. We will not call preventDefault if space is\n * pressed, nor will we raise a11y click events.  For all other elements, we can\n * suppress the default event (which has no desired side-effects) and handle the\n * keydown ourselves.\n */\nconst PROCESS_SPACE = {\n  'CHECKBOX': true,\n  'FILE': true,\n  'OPTION': true,\n  'RADIO': true\n};\n/** TagNames and Input types for which to not process enter/space as click. */\nconst TEXT_CONTROLS = {\n  'COLOR': true,\n  'DATE': true,\n  'DATETIME': true,\n  'DATETIME-LOCAL': true,\n  'EMAIL': true,\n  'MONTH': true,\n  'NUMBER': true,\n  'PASSWORD': true,\n  'RANGE': true,\n  'SEARCH': true,\n  'TEL': true,\n  'TEXT': true,\n  'TEXTAREA': true,\n  'TIME': true,\n  'URL': true,\n  'WEEK': true\n};\n/** TagNames that are native HTML controls. */\nconst NATIVE_HTML_CONTROLS = {\n  'A': true,\n  'AREA': true,\n  'BUTTON': true,\n  'DIALOG': true,\n  'IMG': true,\n  'INPUT': true,\n  'LINK': true,\n  'MENU': true,\n  'OPTGROUP': true,\n  'OPTION': true,\n  'PROGRESS': true,\n  'SELECT': true,\n  'TEXTAREA': true\n};\n/** Exported for testing. */\nconst testing = {\n  setIsMac(value) {\n    isMac = value;\n  }\n};\n\n/**\n * Whether the user agent is running on iOS.\n */\nconst isIos = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/.test(navigator.userAgent);\n/**\n * A class representing a container node and all the event handlers\n * installed on it. Used so that handlers can be cleaned up if the\n * container is removed from the contract.\n */\nclass EventContractContainer {\n  element;\n  /**\n   * Array of event handlers and their corresponding event types that are\n   * installed on this container.\n   *\n   */\n  handlerInfos = [];\n  /**\n   * @param element The container Element.\n   */\n  constructor(element) {\n    this.element = element;\n  }\n  /**\n   * Installs the provided installer on the element owned by this container,\n   * and maintains a reference to resulting handler in order to remove it\n   * later if desired.\n   */\n  addEventListener(eventType, getHandler, passive) {\n    // In iOS, event bubbling doesn't happen automatically in any DOM element,\n    // unless it has an onclick attribute or DOM event handler attached to it.\n    // This breaks JsAction in some cases. See \"Making Elements Clickable\"\n    // section at http://goo.gl/2VoGnB.\n    //\n    // A workaround for this issue is to change the CSS cursor style to 'pointer'\n    // for the container element, which magically turns on event bubbling. This\n    // solution is described in the comments section at http://goo.gl/6pEO1z.\n    //\n    // We use a navigator.userAgent check here as this problem is present both\n    // on Mobile Safari and thin WebKit wrappers, such as Chrome for iOS.\n    if (isIos) {\n      this.element.style.cursor = 'pointer';\n    }\n    this.handlerInfos.push(addEventListener(this.element, eventType, getHandler(this.element), passive));\n  }\n  /**\n   * Removes all the handlers installed on this container.\n   */\n  cleanUp() {\n    for (let i = 0; i < this.handlerInfos.length; i++) {\n      removeEventListener(this.element, this.handlerInfos[i]);\n    }\n    this.handlerInfos = [];\n  }\n}\nconst Char = {\n  /**\n   * The separator between the namespace and the action name in the\n   * jsaction attribute value.\n   */\n  NAMESPACE_ACTION_SEPARATOR: '.',\n  /**\n   * The separator between the event name and action in the jsaction\n   * attribute value.\n   */\n  EVENT_ACTION_SEPARATOR: ':'\n};\n\n/** Added for readability when accessing stable property names. */\nfunction getEventType(eventInfo) {\n  return eventInfo.eventType;\n}\n/** Added for readability when accessing stable property names. */\nfunction setEventType(eventInfo, eventType) {\n  eventInfo.eventType = eventType;\n}\n/** Added for readability when accessing stable property names. */\nfunction getEvent(eventInfo) {\n  return eventInfo.event;\n}\n/** Added for readability when accessing stable property names. */\nfunction setEvent(eventInfo, event) {\n  eventInfo.event = event;\n}\n/** Added for readability when accessing stable property names. */\nfunction getTargetElement(eventInfo) {\n  return eventInfo.targetElement;\n}\n/** Added for readability when accessing stable property names. */\nfunction setTargetElement(eventInfo, targetElement) {\n  eventInfo.targetElement = targetElement;\n}\n/** Added for readability when accessing stable property names. */\nfunction getContainer(eventInfo) {\n  return eventInfo.eic;\n}\n/** Added for readability when accessing stable property names. */\nfunction setContainer(eventInfo, container) {\n  eventInfo.eic = container;\n}\n/** Added for readability when accessing stable property names. */\nfunction getTimestamp(eventInfo) {\n  return eventInfo.timeStamp;\n}\n/** Added for readability when accessing stable property names. */\nfunction setTimestamp(eventInfo, timestamp) {\n  eventInfo.timeStamp = timestamp;\n}\n/** Added for readability when accessing stable property names. */\nfunction getAction(eventInfo) {\n  return eventInfo.eia;\n}\n/** Added for readability when accessing stable property names. */\nfunction setAction(eventInfo, actionName, actionElement) {\n  eventInfo.eia = [actionName, actionElement];\n}\n/** Added for readability when accessing stable property names. */\nfunction unsetAction(eventInfo) {\n  eventInfo.eia = undefined;\n}\n/** Added for readability when accessing stable property names. */\nfunction getActionName(actionInfo) {\n  return actionInfo[0];\n}\n/** Added for readability when accessing stable property names. */\nfunction getActionElement(actionInfo) {\n  return actionInfo[1];\n}\n/** Added for readability when accessing stable property names. */\nfunction getIsReplay(eventInfo) {\n  return eventInfo.eirp;\n}\n/** Added for readability when accessing stable property names. */\nfunction setIsReplay(eventInfo, replay) {\n  eventInfo.eirp = replay;\n}\n/** Added for readability when accessing stable property names. */\nfunction getA11yClickKey(eventInfo) {\n  return eventInfo.eiack;\n}\n/** Added for readability when accessing stable property names. */\nfunction setA11yClickKey(eventInfo, a11yClickKey) {\n  eventInfo.eiack = a11yClickKey;\n}\n/** Added for readability when accessing stable property names. */\nfunction getResolved(eventInfo) {\n  return eventInfo.eir;\n}\n/** Added for readability when accessing stable property names. */\nfunction setResolved(eventInfo, resolved) {\n  eventInfo.eir = resolved;\n}\n/** Clones an `EventInfo` */\nfunction cloneEventInfo(eventInfo) {\n  return {\n    eventType: eventInfo.eventType,\n    event: eventInfo.event,\n    targetElement: eventInfo.targetElement,\n    eic: eventInfo.eic,\n    eia: eventInfo.eia,\n    timeStamp: eventInfo.timeStamp,\n    eirp: eventInfo.eirp,\n    eiack: eventInfo.eiack,\n    eir: eventInfo.eir\n  };\n}\n/**\n * Utility function for creating an `EventInfo`.\n *\n * This can be used from code-size sensitive compilation units, as taking\n * parameters vs. an `Object` literal reduces code size.\n */\nfunction createEventInfoFromParameters(eventType, event, targetElement, container, timestamp, action, isReplay, a11yClickKey) {\n  return {\n    eventType,\n    event,\n    targetElement,\n    eic: container,\n    timeStamp: timestamp,\n    eia: action,\n    eirp: isReplay,\n    eiack: a11yClickKey\n  };\n}\n/**\n * Utility function for creating an `EventInfo`.\n *\n * This should be used in compilation units that are less sensitive to code\n * size.\n */\nfunction createEventInfo({\n  eventType,\n  event,\n  targetElement,\n  container,\n  timestamp,\n  action,\n  isReplay,\n  a11yClickKey\n}) {\n  return {\n    eventType,\n    event,\n    targetElement,\n    eic: container,\n    timeStamp: timestamp,\n    eia: action ? [action.name, action.element] : undefined,\n    eirp: isReplay,\n    eiack: a11yClickKey\n  };\n}\n/**\n * Utility class around an `EventInfo`.\n *\n * This should be used in compilation units that are less sensitive to code\n * size.\n */\nclass EventInfoWrapper {\n  eventInfo;\n  constructor(eventInfo) {\n    this.eventInfo = eventInfo;\n  }\n  getEventType() {\n    return getEventType(this.eventInfo);\n  }\n  setEventType(eventType) {\n    setEventType(this.eventInfo, eventType);\n  }\n  getEvent() {\n    return getEvent(this.eventInfo);\n  }\n  setEvent(event) {\n    setEvent(this.eventInfo, event);\n  }\n  getTargetElement() {\n    return getTargetElement(this.eventInfo);\n  }\n  setTargetElement(targetElement) {\n    setTargetElement(this.eventInfo, targetElement);\n  }\n  getContainer() {\n    return getContainer(this.eventInfo);\n  }\n  setContainer(container) {\n    setContainer(this.eventInfo, container);\n  }\n  getTimestamp() {\n    return getTimestamp(this.eventInfo);\n  }\n  setTimestamp(timestamp) {\n    setTimestamp(this.eventInfo, timestamp);\n  }\n  getAction() {\n    const action = getAction(this.eventInfo);\n    if (!action) return undefined;\n    return {\n      name: action[0],\n      element: action[1]\n    };\n  }\n  setAction(action) {\n    if (!action) {\n      unsetAction(this.eventInfo);\n      return;\n    }\n    setAction(this.eventInfo, action.name, action.element);\n  }\n  getIsReplay() {\n    return getIsReplay(this.eventInfo);\n  }\n  setIsReplay(replay) {\n    setIsReplay(this.eventInfo, replay);\n  }\n  getResolved() {\n    return getResolved(this.eventInfo);\n  }\n  setResolved(resolved) {\n    setResolved(this.eventInfo, resolved);\n  }\n  clone() {\n    return new EventInfoWrapper(cloneEventInfo(this.eventInfo));\n  }\n}\n\n/**\n * Since maps from event to action are immutable we can use a single map\n * to represent the empty map.\n */\nconst EMPTY_ACTION_MAP = {};\n/**\n * This regular expression matches a semicolon.\n */\nconst REGEXP_SEMICOLON = /\\s*;\\s*/;\n/** If no event type is defined, defaults to `click`. */\nconst DEFAULT_EVENT_TYPE = EventType.CLICK;\n/** Resolves actions for Events. */\nclass ActionResolver {\n  a11yClickSupport = false;\n  clickModSupport = true;\n  syntheticMouseEventSupport;\n  updateEventInfoForA11yClick = undefined;\n  preventDefaultForA11yClick = undefined;\n  populateClickOnlyAction = undefined;\n  constructor({\n    syntheticMouseEventSupport = false,\n    clickModSupport = true\n  } = {}) {\n    this.syntheticMouseEventSupport = syntheticMouseEventSupport;\n    this.clickModSupport = clickModSupport;\n  }\n  resolveEventType(eventInfo) {\n    // We distinguish modified and plain clicks in order to support the\n    // default browser behavior of modified clicks on links; usually to\n    // open the URL of the link in new tab or new window on ctrl/cmd\n    // click. A DOM 'click' event is mapped to the jsaction 'click'\n    // event iff there is no modifier present on the event. If there is\n    // a modifier, it's mapped to 'clickmod' instead.\n    //\n    // It's allowed to omit the event in the jsaction attribute. In that\n    // case, 'click' is assumed. Thus the following two are equivalent:\n    //\n    //   <a href=\"someurl\" jsaction=\"gna.fu\">\n    //   <a href=\"someurl\" jsaction=\"click:gna.fu\">\n    //\n    // For unmodified clicks, EventContract invokes the jsaction\n    // 'gna.fu'. For modified clicks, EventContract won't find a\n    // suitable action and leave the event to be handled by the\n    // browser.\n    //\n    // In order to also invoke a jsaction handler for a modifier click,\n    // 'clickmod' needs to be used:\n    //\n    //   <a href=\"someurl\" jsaction=\"clickmod:gna.fu\">\n    //\n    // EventContract invokes the jsaction 'gna.fu' for modified\n    // clicks. Unmodified clicks are left to the browser.\n    //\n    // In order to set up the event contract to handle both clickonly and\n    // clickmod, only addEvent(EventType.CLICK) is necessary.\n    //\n    // In order to set up the event contract to handle click,\n    // addEvent() is necessary for CLICK, KEYDOWN, and KEYPRESS event types.  If\n    // a11y click support is enabled, addEvent() will set up the appropriate key\n    // event handler automatically.\n    if (this.clickModSupport && getEventType(eventInfo) === EventType.CLICK && isModifiedClickEvent(getEvent(eventInfo))) {\n      setEventType(eventInfo, EventType.CLICKMOD);\n    } else if (this.a11yClickSupport) {\n      this.updateEventInfoForA11yClick(eventInfo);\n    }\n  }\n  resolveAction(eventInfo) {\n    if (getResolved(eventInfo)) {\n      return;\n    }\n    this.populateAction(eventInfo, getTargetElement(eventInfo));\n    setResolved(eventInfo, true);\n  }\n  resolveParentAction(eventInfo) {\n    const action = getAction(eventInfo);\n    const actionElement = action && getActionElement(action);\n    unsetAction(eventInfo);\n    const parentNode = actionElement && this.getParentNode(actionElement);\n    if (!parentNode) {\n      return;\n    }\n    this.populateAction(eventInfo, parentNode);\n  }\n  /**\n   * Searches for a jsaction that the DOM event maps to and creates an\n   * object containing event information used for dispatching by\n   * jsaction.Dispatcher. This method populates the `action` and `actionElement`\n   * fields of the EventInfo object passed in by finding the first\n   * jsaction attribute above the target Node of the event, and below\n   * the container Node, that specifies a jsaction for the event\n   * type. If no such jsaction is found, then action is undefined.\n   *\n   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an\n   *    action is found on any `Element` in the path of the `Event`.\n   */\n  populateAction(eventInfo, currentTarget) {\n    let actionElement = currentTarget;\n    while (actionElement && actionElement !== getContainer(eventInfo)) {\n      if (actionElement.nodeType === Node.ELEMENT_NODE) {\n        this.populateActionOnElement(actionElement, eventInfo);\n      }\n      if (getAction(eventInfo)) {\n        // An event is handled by at most one jsaction. Thus we stop at the\n        // first matching jsaction specified in a jsaction attribute up the\n        // ancestor chain of the event target node.\n        break;\n      }\n      actionElement = this.getParentNode(actionElement);\n    }\n    const action = getAction(eventInfo);\n    if (!action) {\n      // No action found.\n      return;\n    }\n    if (this.a11yClickSupport) {\n      this.preventDefaultForA11yClick(eventInfo);\n    }\n    // We attempt to handle the mouseenter/mouseleave events here by\n    // detecting whether the mouseover/mouseout events correspond to\n    // entering/leaving an element.\n    if (this.syntheticMouseEventSupport) {\n      if (getEventType(eventInfo) === EventType.MOUSEENTER || getEventType(eventInfo) === EventType.MOUSELEAVE || getEventType(eventInfo) === EventType.POINTERENTER || getEventType(eventInfo) === EventType.POINTERLEAVE) {\n        // We attempt to handle the mouseenter/mouseleave events here by\n        // detecting whether the mouseover/mouseout events correspond to\n        // entering/leaving an element.\n        if (isMouseSpecialEvent(getEvent(eventInfo), getEventType(eventInfo), getActionElement(action))) {\n          // If both mouseover/mouseout and mouseenter/mouseleave events are\n          // enabled, two separate handlers for mouseover/mouseout are\n          // registered. Both handlers will see the same event instance\n          // so we create a copy to avoid interfering with the dispatching of\n          // the mouseover/mouseout event.\n          const copiedEvent = createMouseSpecialEvent(getEvent(eventInfo), getActionElement(action));\n          setEvent(eventInfo, copiedEvent);\n          // Since the mouseenter/mouseleave events do not bubble, the target\n          // of the event is technically the `actionElement` (the node with the\n          // `jsaction` attribute)\n          setTargetElement(eventInfo, getActionElement(action));\n        } else {\n          unsetAction(eventInfo);\n        }\n      }\n    }\n  }\n  /**\n   * Walk to the parent node, unless the node has a different owner in\n   * which case we walk to the owner. Attempt to walk to host of a\n   * shadow root if needed.\n   */\n  getParentNode(element) {\n    const owner = element[Property.OWNER];\n    if (owner) {\n      return owner;\n    }\n    const parentNode = element.parentNode;\n    if (parentNode?.nodeName === '#document-fragment') {\n      return parentNode?.host ?? null;\n    }\n    return parentNode;\n  }\n  /**\n   * Accesses the jsaction map on a node and retrieves the name of the\n   * action the given event is mapped to, if any. It parses the\n   * attribute value and stores it in a property on the node for\n   * subsequent retrieval without re-parsing and re-accessing the\n   * attribute.\n   *\n   * @param actionElement The DOM node to retrieve the jsaction map from.\n   * @param eventInfo `EventInfo` to set `action` and `actionElement` if an\n   *    action is found on the `actionElement`.\n   */\n  populateActionOnElement(actionElement, eventInfo) {\n    const actionMap = this.parseActions(actionElement);\n    const actionName = actionMap[getEventType(eventInfo)];\n    if (actionName !== undefined) {\n      setAction(eventInfo, actionName, actionElement);\n    }\n    if (this.a11yClickSupport) {\n      this.populateClickOnlyAction(actionElement, eventInfo, actionMap);\n    }\n  }\n  /**\n   * Parses and caches an element's jsaction element into a map.\n   *\n   * This is primarily for internal use.\n   *\n   * @param actionElement The DOM node to retrieve the jsaction map from.\n   * @return Map from event to qualified name of the jsaction bound to it.\n   */\n  parseActions(actionElement) {\n    let actionMap = get(actionElement);\n    if (!actionMap) {\n      const jsactionAttribute = actionElement.getAttribute(Attribute.JSACTION);\n      if (!jsactionAttribute) {\n        actionMap = EMPTY_ACTION_MAP;\n        set(actionElement, actionMap);\n      } else {\n        actionMap = getParsed(jsactionAttribute);\n        if (!actionMap) {\n          actionMap = {};\n          const values = jsactionAttribute.split(REGEXP_SEMICOLON);\n          for (let idx = 0; idx < values.length; idx++) {\n            const value = values[idx];\n            if (!value) {\n              continue;\n            }\n            const colon = value.indexOf(Char.EVENT_ACTION_SEPARATOR);\n            const hasColon = colon !== -1;\n            const type = hasColon ? value.substr(0, colon).trim() : DEFAULT_EVENT_TYPE;\n            const action = hasColon ? value.substr(colon + 1).trim() : value;\n            actionMap[type] = action;\n          }\n          setParsed(jsactionAttribute, actionMap);\n        }\n        set(actionElement, actionMap);\n      }\n    }\n    return actionMap;\n  }\n  addA11yClickSupport(updateEventInfoForA11yClick, preventDefaultForA11yClick, populateClickOnlyAction) {\n    this.a11yClickSupport = true;\n    this.updateEventInfoForA11yClick = updateEventInfoForA11yClick;\n    this.preventDefaultForA11yClick = preventDefaultForA11yClick;\n    this.populateClickOnlyAction = populateClickOnlyAction;\n  }\n}\n\n/**\n * @fileoverview An enum to control who can call certain jsaction APIs.\n */\nvar Restriction;\n(function (Restriction) {\n  Restriction[Restriction[\"I_AM_THE_JSACTION_FRAMEWORK\"] = 0] = \"I_AM_THE_JSACTION_FRAMEWORK\";\n})(Restriction || (Restriction = {}));\n\n/**\n * Receives a DOM event, determines the jsaction associated with the source\n * element of the DOM event, and invokes the handler associated with the\n * jsaction.\n */\nclass Dispatcher {\n  dispatchDelegate;\n  // The ActionResolver to use to resolve actions.\n  actionResolver;\n  /** The replayer function to be called when there are queued events. */\n  eventReplayer;\n  /** Whether the event replay is scheduled. */\n  eventReplayScheduled = false;\n  /** The queue of events. */\n  replayEventInfoWrappers = [];\n  /**\n   * Options are:\n   *   - `eventReplayer`: When the event contract dispatches replay events\n   *      to the Dispatcher, the Dispatcher collects them and in the next tick\n   *      dispatches them to the `eventReplayer`. Defaults to dispatching to `dispatchDelegate`.\n   * @param dispatchDelegate A function that should handle dispatching an `EventInfoWrapper` to handlers.\n   */\n  constructor(dispatchDelegate, {\n    actionResolver,\n    eventReplayer\n  } = {}) {\n    this.dispatchDelegate = dispatchDelegate;\n    this.actionResolver = actionResolver;\n    this.eventReplayer = eventReplayer;\n  }\n  /**\n   * Receives an event or the event queue from the EventContract. The event\n   * queue is copied and it attempts to replay.\n   * If event info is passed in it looks for an action handler that can handle\n   * the given event.  If there is no handler registered queues the event and\n   * checks if a loader is registered for the given namespace. If so, calls it.\n   *\n   * Alternatively, if in global dispatch mode, calls all registered global\n   * handlers for the appropriate event type.\n   *\n   * The three functionalities of this call are deliberately not split into\n   * three methods (and then declared as an abstract interface), because the\n   * interface is used by EventContract, which lives in a different jsbinary.\n   * Therefore the interface between the three is defined entirely in terms that\n   * are invariant under jscompiler processing (Function and Array, as opposed\n   * to a custom type with method names).\n   *\n   * @param eventInfo The info for the event that triggered this call or the\n   *     queue of events from EventContract.\n   */\n  dispatch(eventInfo) {\n    const eventInfoWrapper = new EventInfoWrapper(eventInfo);\n    this.actionResolver?.resolveEventType(eventInfo);\n    this.actionResolver?.resolveAction(eventInfo);\n    const action = eventInfoWrapper.getAction();\n    if (action && shouldPreventDefaultBeforeDispatching(action.element, eventInfoWrapper)) {\n      preventDefault(eventInfoWrapper.getEvent());\n    }\n    if (this.eventReplayer && eventInfoWrapper.getIsReplay()) {\n      this.scheduleEventInfoWrapperReplay(eventInfoWrapper);\n      return;\n    }\n    this.dispatchDelegate(eventInfoWrapper);\n  }\n  /**\n   * Schedules an `EventInfoWrapper` for replay. The replaying will happen in its own\n   * stack once the current flow cedes control. This is done to mimic\n   * browser event handling.\n   */\n  scheduleEventInfoWrapperReplay(eventInfoWrapper) {\n    this.replayEventInfoWrappers.push(eventInfoWrapper);\n    if (this.eventReplayScheduled) {\n      return;\n    }\n    this.eventReplayScheduled = true;\n    Promise.resolve().then(() => {\n      this.eventReplayScheduled = false;\n      this.eventReplayer(this.replayEventInfoWrappers);\n    });\n  }\n}\n/**\n * Creates an `EventReplayer` that calls the `replay` function for every `eventInfoWrapper` in\n * the queue.\n */\nfunction createEventReplayer(replay) {\n  return eventInfoWrappers => {\n    for (const eventInfoWrapper of eventInfoWrappers) {\n      replay(eventInfoWrapper);\n    }\n  };\n}\n/**\n * Returns true if the default action of this event should be prevented before\n * this event is dispatched.\n */\nfunction shouldPreventDefaultBeforeDispatching(actionElement, eventInfoWrapper) {\n  // Prevent browser from following <a> node links if a jsaction is present\n  // and we are dispatching the action now. Note that the targetElement may be\n  // a child of an anchor that has a jsaction attached. For that reason, we\n  // need to check the actionElement rather than the targetElement.\n  return actionElement.tagName === 'A' && (eventInfoWrapper.getEventType() === EventType.CLICK || eventInfoWrapper.getEventType() === EventType.CLICKMOD);\n}\n/**\n * Registers deferred functionality for an EventContract and a Jsaction\n * Dispatcher.\n */\nfunction registerDispatcher$2(eventContract, dispatcher) {\n  eventContract.ecrd(eventInfo => {\n    dispatcher.dispatch(eventInfo);\n  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);\n}\n\n/** An internal symbol used to indicate whether propagation should be stopped or not. */\nconst PROPAGATION_STOPPED_SYMBOL = Symbol.for('propagationStopped');\n/** Extra event phases beyond what the browser provides. */\nconst EventPhase = {\n  REPLAY: 101\n};\nconst PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS = ' Because event replay occurs after browser dispatch, `preventDefault` would have no ' + 'effect. You can check whether an event is being replayed by accessing the event phase: ' + '`event.eventPhase === EventPhase.REPLAY`.';\nconst PREVENT_DEFAULT_ERROR_MESSAGE = `\\`preventDefault\\` called during event replay.`;\nconst COMPOSED_PATH_ERROR_MESSAGE_DETAILS = ' Because event replay occurs after browser ' + 'dispatch, `composedPath()` will be empty. Iterate parent nodes from `event.target` or ' + '`event.currentTarget` if you need to check elements in the event path.';\nconst COMPOSED_PATH_ERROR_MESSAGE = `\\`composedPath\\` called during event replay.`;\n/**\n * A dispatcher that uses browser-based `Event` semantics, for example bubbling, `stopPropagation`,\n * `currentTarget`, etc.\n */\nclass EventDispatcher {\n  dispatchDelegate;\n  clickModSupport;\n  actionResolver;\n  dispatcher;\n  constructor(dispatchDelegate, clickModSupport = true) {\n    this.dispatchDelegate = dispatchDelegate;\n    this.clickModSupport = clickModSupport;\n    this.actionResolver = new ActionResolver({\n      clickModSupport\n    });\n    this.dispatcher = new Dispatcher(eventInfoWrapper => {\n      this.dispatchToDelegate(eventInfoWrapper);\n    }, {\n      actionResolver: this.actionResolver\n    });\n  }\n  /**\n   * The entrypoint for the `EventContract` dispatch.\n   */\n  dispatch(eventInfo) {\n    this.dispatcher.dispatch(eventInfo);\n  }\n  /** Internal method that does basic disaptching. */\n  dispatchToDelegate(eventInfoWrapper) {\n    if (eventInfoWrapper.getIsReplay()) {\n      prepareEventForReplay(eventInfoWrapper);\n    }\n    prepareEventForBubbling(eventInfoWrapper);\n    while (eventInfoWrapper.getAction()) {\n      prepareEventForDispatch(eventInfoWrapper);\n      // If this is a capture event, ONLY dispatch if the action element is the target.\n      if (isCaptureEventType(eventInfoWrapper.getEventType()) && eventInfoWrapper.getAction().element !== eventInfoWrapper.getTargetElement()) {\n        return;\n      }\n      this.dispatchDelegate(eventInfoWrapper.getEvent(), eventInfoWrapper.getAction().name);\n      if (propagationStopped(eventInfoWrapper)) {\n        return;\n      }\n      this.actionResolver.resolveParentAction(eventInfoWrapper.eventInfo);\n    }\n  }\n}\nfunction prepareEventForBubbling(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const originalStopPropagation = eventInfoWrapper.getEvent().stopPropagation.bind(event);\n  const stopPropagation = () => {\n    event[PROPAGATION_STOPPED_SYMBOL] = true;\n    originalStopPropagation();\n  };\n  patchEventInstance(event, 'stopPropagation', stopPropagation);\n  patchEventInstance(event, 'stopImmediatePropagation', stopPropagation);\n}\nfunction propagationStopped(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  return !!event[PROPAGATION_STOPPED_SYMBOL];\n}\nfunction prepareEventForReplay(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const target = eventInfoWrapper.getTargetElement();\n  const originalPreventDefault = event.preventDefault.bind(event);\n  patchEventInstance(event, 'target', target);\n  patchEventInstance(event, 'eventPhase', EventPhase.REPLAY);\n  patchEventInstance(event, 'preventDefault', () => {\n    originalPreventDefault();\n    throw new Error(PREVENT_DEFAULT_ERROR_MESSAGE + (ngDevMode ? PREVENT_DEFAULT_ERROR_MESSAGE_DETAILS : ''));\n  });\n  patchEventInstance(event, 'composedPath', () => {\n    throw new Error(COMPOSED_PATH_ERROR_MESSAGE + (ngDevMode ? COMPOSED_PATH_ERROR_MESSAGE_DETAILS : ''));\n  });\n}\nfunction prepareEventForDispatch(eventInfoWrapper) {\n  const event = eventInfoWrapper.getEvent();\n  const currentTarget = eventInfoWrapper.getAction()?.element;\n  if (currentTarget) {\n    patchEventInstance(event, 'currentTarget', currentTarget, {\n      // `currentTarget` is going to get reassigned every dispatch.\n      configurable: true\n    });\n  }\n}\n/**\n * Patch `Event` instance during non-standard `Event` dispatch. This patches just the `Event`\n * instance that the browser created, it does not patch global properties or methods.\n *\n * This is necessary because dispatching an `Event` outside of browser dispatch results in\n * incorrect properties and methods that need to be polyfilled or do not work.\n *\n * JSAction dispatch adds two extra \"phases\" to event dispatch:\n * 1. Event delegation - the event is being dispatched by a delegating event handler on a container\n *    (typically `window.document.documentElement`), to a delegated event handler on some child\n *    element. Certain `Event` properties will be unintuitive, such as `currentTarget`, which would\n *    be the container rather than the child element. Bubbling would also not work. In order to\n *    emulate the browser, these properties and methods on the `Event` are patched.\n * 2. Event replay - the event is being dispatched by the framework once the handlers have been\n *    loaded (during hydration, or late-loaded). Certain `Event` properties can be unset by the\n *    browser because the `Event` is no longer actively being dispatched, such as `target`. Other\n *    methods have no effect because the `Event` has already been dispatched, such as\n *    `preventDefault`. Bubbling would also not work. These properties and methods are patched,\n *    either to fill in information that the browser may have removed, or to throw errors in methods\n *    that no longer behave as expected.\n */\nfunction patchEventInstance(event, property, value, {\n  configurable = false\n} = {}) {\n  Object.defineProperty(event, property, {\n    value,\n    configurable\n  });\n}\n/**\n * Registers deferred functionality for an EventContract and a Jsaction\n * Dispatcher.\n */\nfunction registerDispatcher$1(eventContract, dispatcher) {\n  eventContract.ecrd(eventInfo => {\n    dispatcher.dispatch(eventInfo);\n  }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);\n}\n\n/**\n * EarlyEventContract intercepts events in the bubbling phase at the\n * boundary of the document body. This mapping will be passed to the\n * late-loaded EventContract.\n */\nclass EarlyEventContract {\n  dataContainer;\n  constructor(dataContainer = window, container = window.document.documentElement) {\n    this.dataContainer = dataContainer;\n    dataContainer._ejsa = createEarlyJsactionData(container);\n  }\n  /**\n   * Installs a list of event types for container .\n   */\n  addEvents(types, capture) {\n    addEvents(this.dataContainer._ejsa, types, capture);\n  }\n}\n/** Creates an `EarlyJsactionData` object. */\nfunction createEarlyJsactionData(container) {\n  const q = [];\n  const d = eventInfo => {\n    q.push(eventInfo);\n  };\n  const h = event => {\n    d(createEventInfoFromParameters(event.type, event, event.target, container, Date.now()));\n  };\n  return {\n    c: container,\n    q,\n    et: [],\n    etc: [],\n    d,\n    h\n  };\n}\n/** Add all the events to the container stored in the `EarlyJsactionData`. */\nfunction addEvents(earlyJsactionData, types, capture) {\n  for (let i = 0; i < types.length; i++) {\n    const eventType = types[i];\n    const eventTypes = capture ? earlyJsactionData.etc : earlyJsactionData.et;\n    eventTypes.push(eventType);\n    earlyJsactionData.c.addEventListener(eventType, earlyJsactionData.h, capture);\n  }\n}\n/** Get the queued `EventInfo` objects that were dispatched before a dispatcher was registered. */\nfunction getQueuedEventInfos(earlyJsactionData) {\n  return earlyJsactionData?.q ?? [];\n}\n/** Register a different dispatcher function on the `EarlyJsactionData`. */\nfunction registerDispatcher(earlyJsactionData, dispatcher) {\n  if (!earlyJsactionData) {\n    return;\n  }\n  earlyJsactionData.d = dispatcher;\n}\n/** Removes all event listener handlers. */\nfunction removeAllEventListeners(earlyJsactionData) {\n  if (!earlyJsactionData) {\n    return;\n  }\n  removeEventListeners(earlyJsactionData.c, earlyJsactionData.et, earlyJsactionData.h);\n  removeEventListeners(earlyJsactionData.c, earlyJsactionData.etc, earlyJsactionData.h, true);\n}\nfunction removeEventListeners(container, eventTypes, earlyEventHandler, capture) {\n  for (let i = 0; i < eventTypes.length; i++) {\n    container.removeEventListener(eventTypes[i], earlyEventHandler, /* useCapture */capture);\n  }\n}\n\n/**\n * @define Support for the non-bubbling mouseenter and mouseleave events.  This\n * flag can be overridden in a build rule.\n */\nconst MOUSE_SPECIAL_SUPPORT = false;\n\n/**\n * @fileoverview Implements the local event handling contract. This\n * allows DOM objects in a container that enters into this contract to\n * define event handlers which are executed in a local context.\n *\n * One EventContract instance can manage the contract for multiple\n * containers, which are added using the addContainer() method.\n *\n * Events can be registered using the addEvent() method.\n *\n * A Dispatcher is added using the registerDispatcher() method. Until there is\n * a dispatcher, events are queued. The idea is that the EventContract\n * class is inlined in the HTML of the top level page and instantiated\n * right after the start of <body>. The Dispatcher class is contained\n * in the external deferred js, and instantiated and registered with\n * EventContract when the external javascript in the page loads. The\n * external javascript will also register the jsaction handlers, which\n * then pick up the queued events at the time of registration.\n *\n * Since this class is meant to be inlined in the main page HTML, the\n * size of the binary compiled from this file MUST be kept as small as\n * possible and thus its dependencies to a minimum.\n */\n/**\n * EventContract intercepts events in the bubbling phase at the\n * boundary of a container element, and maps them to generic actions\n * which are specified using the custom jsaction attribute in\n * HTML. Behavior of the application is then specified in terms of\n * handler for such actions, cf. jsaction.Dispatcher in dispatcher.js.\n *\n * This has several benefits: (1) No DOM event handlers need to be\n * registered on the specific elements in the UI. (2) The set of\n * events that the application has to handle can be specified in terms\n * of the semantics of the application, rather than in terms of DOM\n * events. (3) Invocation of handlers can be delayed and handlers can\n * be delay loaded in a generic way.\n */\nclass EventContract {\n  static MOUSE_SPECIAL_SUPPORT = MOUSE_SPECIAL_SUPPORT;\n  containerManager;\n  /**\n   * The DOM events which this contract covers. Used to prevent double\n   * registration of event types. The value of the map is the\n   * internally created DOM event handler function that handles the\n   * DOM events. See addEvent().\n   *\n   */\n  eventHandlers = {};\n  browserEventTypeToExtraEventTypes = {};\n  /**\n   * The dispatcher function. Events are passed to this function for\n   * handling once it was set using the registerDispatcher() method. This is\n   * done because the function is passed from another jsbinary, so passing the\n   * instance and invoking the method here would require to leave the method\n   * unobfuscated.\n   */\n  dispatcher = null;\n  /**\n   * The list of suspended `EventInfo` that will be dispatched\n   * as soon as the `Dispatcher` is registered.\n   */\n  queuedEventInfos = [];\n  constructor(containerManager) {\n    this.containerManager = containerManager;\n  }\n  handleEvent(eventType, event, container) {\n    const eventInfo = createEventInfoFromParameters(/* eventType= */eventType, /* event= */event, /* targetElement= */event.target, /* container= */container, /* timestamp= */Date.now());\n    this.handleEventInfo(eventInfo);\n  }\n  /**\n   * Handle an `EventInfo`.\n   */\n  handleEventInfo(eventInfo) {\n    if (!this.dispatcher) {\n      // All events are queued when the dispatcher isn't yet loaded.\n      setIsReplay(eventInfo, true);\n      this.queuedEventInfos?.push(eventInfo);\n      return;\n    }\n    this.dispatcher(eventInfo);\n  }\n  /**\n   * Enables jsaction handlers to be called for the event type given by\n   * name.\n   *\n   * If the event is already registered, this does nothing.\n   *\n   * @param prefixedEventType If supplied, this event is used in\n   *     the actual browser event registration instead of the name that is\n   *     exposed to jsaction. Use this if you e.g. want users to be able\n   *     to subscribe to jsaction=\"transitionEnd:foo\" while the underlying\n   *     event is webkitTransitionEnd in one browser and mozTransitionEnd\n   *     in another.\n   *\n   * @param passive A boolean value that, if `true`, indicates that the event\n   *     handler will never call `preventDefault()`.\n   */\n  addEvent(eventType, prefixedEventType, passive) {\n    if (eventType in this.eventHandlers || !this.containerManager) {\n      return;\n    }\n    if (!EventContract.MOUSE_SPECIAL_SUPPORT && MOUSE_SPECIAL_EVENT_TYPES.indexOf(eventType) >= 0) {\n      return;\n    }\n    const eventHandler = (eventType, event, container) => {\n      this.handleEvent(eventType, event, container);\n    };\n    // Store the callback to allow us to replay events.\n    this.eventHandlers[eventType] = eventHandler;\n    const browserEventType = getBrowserEventType(prefixedEventType || eventType);\n    if (browserEventType !== eventType) {\n      const eventTypes = this.browserEventTypeToExtraEventTypes[browserEventType] || [];\n      eventTypes.push(eventType);\n      this.browserEventTypeToExtraEventTypes[browserEventType] = eventTypes;\n    }\n    this.containerManager.addEventListener(browserEventType, element => {\n      return event => {\n        eventHandler(eventType, event, element);\n      };\n    }, passive);\n  }\n  /**\n   * Gets the queued early events and replay them using the appropriate handler\n   * in the provided event contract. Once all the events are replayed, it cleans\n   * up the early contract.\n   */\n  replayEarlyEvents(earlyJsactionData = window._ejsa) {\n    // Check if the early contract is present and prevent calling this function\n    // more than once.\n    if (!earlyJsactionData) {\n      return;\n    }\n    // Replay the early contract events.\n    this.replayEarlyEventInfos(earlyJsactionData.q);\n    // Clean up the early contract.\n    removeAllEventListeners(earlyJsactionData);\n    delete window._ejsa;\n  }\n  /**\n   * Replays all the early `EventInfo` objects, dispatching them through the normal\n   * `EventContract` flow.\n   */\n  replayEarlyEventInfos(earlyEventInfos) {\n    for (let i = 0; i < earlyEventInfos.length; i++) {\n      const earlyEventInfo = earlyEventInfos[i];\n      const eventTypes = this.getEventTypesForBrowserEventType(earlyEventInfo.eventType);\n      for (let j = 0; j < eventTypes.length; j++) {\n        const eventInfo = cloneEventInfo(earlyEventInfo);\n        // EventInfo eventType maps to JSAction's internal event type,\n        // rather than the browser event type.\n        setEventType(eventInfo, eventTypes[j]);\n        this.handleEventInfo(eventInfo);\n      }\n    }\n  }\n  /**\n   * Returns all JSAction event types that have been registered for a given\n   * browser event type.\n   */\n  getEventTypesForBrowserEventType(browserEventType) {\n    const eventTypes = [];\n    if (this.eventHandlers[browserEventType]) {\n      eventTypes.push(browserEventType);\n    }\n    if (this.browserEventTypeToExtraEventTypes[browserEventType]) {\n      eventTypes.push(...this.browserEventTypeToExtraEventTypes[browserEventType]);\n    }\n    return eventTypes;\n  }\n  /**\n   * Returns the event handler function for a given event type.\n   */\n  handler(eventType) {\n    return this.eventHandlers[eventType];\n  }\n  /**\n   * Cleans up the event contract. This resets all of the `EventContract`'s\n   * internal state. Users are responsible for not using this `EventContract`\n   * after it has been cleaned up.\n   */\n  cleanUp() {\n    this.containerManager?.cleanUp();\n    this.containerManager = null;\n    this.eventHandlers = {};\n    this.browserEventTypeToExtraEventTypes = {};\n    this.dispatcher = null;\n    this.queuedEventInfos = [];\n  }\n  /**\n   * Register a dispatcher function. Event info of each event mapped to\n   * a jsaction is passed for handling to this callback. The queued\n   * events are passed as well to the dispatcher for later replaying\n   * once the dispatcher is registered. Clears the event queue to null.\n   *\n   * @param dispatcher The dispatcher function.\n   * @param restriction\n   */\n  registerDispatcher(dispatcher, restriction) {\n    this.ecrd(dispatcher, restriction);\n  }\n  /**\n   * Unrenamed alias for registerDispatcher. Necessary for any codebases that\n   * split the `EventContract` and `Dispatcher` code into different compilation\n   * units.\n   */\n  ecrd(dispatcher, restriction) {\n    this.dispatcher = dispatcher;\n    if (this.queuedEventInfos?.length) {\n      for (let i = 0; i < this.queuedEventInfos.length; i++) {\n        this.handleEventInfo(this.queuedEventInfos[i]);\n      }\n      this.queuedEventInfos = null;\n    }\n  }\n}\n\n/**\n * Creates an `EarlyJsactionData`, adds events to it, and populates it on a nested object on\n * the window.\n */\nfunction bootstrapAppScopedEarlyEventContract(container, appId, bubbleEventTypes, captureEventTypes, dataContainer = window) {\n  const earlyJsactionData = createEarlyJsactionData(container);\n  if (!dataContainer._ejsas) {\n    dataContainer._ejsas = {};\n  }\n  dataContainer._ejsas[appId] = earlyJsactionData;\n  addEvents(earlyJsactionData, bubbleEventTypes);\n  addEvents(earlyJsactionData, captureEventTypes, /* capture= */true);\n}\n/** Get the queued `EventInfo` objects that were dispatched before a dispatcher was registered. */\nfunction getAppScopedQueuedEventInfos(appId, dataContainer = window) {\n  return getQueuedEventInfos(dataContainer._ejsas?.[appId]);\n}\n/**\n * Registers a dispatcher function on the `EarlyJsactionData` present on the nested object on the\n * window.\n */\nfunction registerAppScopedDispatcher(restriction, appId, dispatcher, dataContainer = window) {\n  registerDispatcher(dataContainer._ejsas?.[appId], dispatcher);\n}\n/** Removes all event listener handlers. */\nfunction removeAllAppScopedEventListeners(appId, dataContainer = window) {\n  removeAllEventListeners(dataContainer._ejsas?.[appId]);\n}\n/** Clear the early event contract. */\nfunction clearAppScopedEarlyEventContract(appId, dataContainer = window) {\n  if (!dataContainer._ejsas) {\n    return;\n  }\n  dataContainer._ejsas[appId] = undefined;\n}\nexport { Attribute, EventContract, EventContractContainer, EventDispatcher, EventInfoWrapper, EventPhase, bootstrapAppScopedEarlyEventContract, clearAppScopedEarlyEventContract, getDefaulted as getActionCache, getAppScopedQueuedEventInfos, isCaptureEventType, isEarlyEventType, registerAppScopedDispatcher, registerDispatcher$1 as registerDispatcher, removeAllAppScopedEventListeners };\n"],
-  "mappings": "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",
-  "names": ["Subscription", "noop", "d", "b", "Subscriber", "ConsumerObserver", "SafeSubscriber", "input", "Observable", "d", "b", "OperatorSubscriber", "err", "d", "b", "ConnectableObservable", "d", "b", "Subject", "AnonymousSubject", "d", "b", "BehaviorSubject", "d", "b", "ReplaySubject", "d", "b", "AsyncSubject", "d", "b", "Action", "d", "b", "AsyncAction", "d", "b", "AsapAction", "Scheduler", "d", "b", "AsyncScheduler", "d", "b", "AsapScheduler", "d", "b", "QueueAction", "d", "b", "QueueScheduler", "d", "b", "AnimationFrameAction", "d", "b", "AnimationFrameScheduler", "d", "b", "VirtualTimeScheduler", "VirtualAction", "isPromise", "input", "input", "input", "v", "input", "input", "input", "input", "input", "input", "input", "input", "input", "throwError", "NotificationKind", "Notification", "map", "_i", "i", "sourceIndex", "remove", "_a", "merge", "i", "resource", "sourceIndex", "_a", "require_combineLatest", "require_concat", "handleError", "require_merge", "merge", "_a", "TimeInterval", "window", "window", "_a", "handleError", "window", "window", "handleError", "i", "require_zip", "exports", "require_partition", "require_race", "computed", "node", "Restriction", "name", "injectorProfiler", "InjectFlags", "input", "FactoryTarget", "R3TemplateDependencyKind", "ViewEncapsulation", "paramTypes", "paramAnnotations", "LContainerFlags", "store", "profiler", "CheckNoChangesMode", "isInI18nBlock", "location", "Attribute", "ChangeDetectionStrategy", "document", "NodeNavigationStep", "TracingAction", "AfterRenderPhase", "DeferDependenciesLoadingState", "DeferBlockState", "DeferBlockInternalState", "DeferBlockBehavior", "isRootView", "node", "HydrationStatus", "ViewEncapsulation", "SecurityContext", "input", "schemas", "InputFlags", "RendererStyleFlags2", "isComponent", "effect", "getInsertInFrontOfRNodeWithI18n", "processI18nInsertBefore", "isInlineTemplate", "TemplateRef", "_", "map", "input", "location", "ViewContainerRef", "i", "callback", "parentEnvInjector", "instance", "isStandaloneComponent", "cb", "tNode", "keyValueArraySet", "LocaleDataIndex", "plural", "I18nCreateOpCode", "lastNodeWasCreated", "changeMask", "value", "index", "substring", "remove", "inertBodyHelper", "hasBinding", "placeholder", "templateId", "isCloseTemplateTag", "output", "isComponent", "multiFactory", "i", "location", "moduleType", "modules", "importingModule", "proto", "type", "ngModuleDef", "MissingTranslationStrategy", "isPipe", "nativeNode", "index", "item", "map", "record", "defaultEquals", "activeConsumer", "SIGNAL", "setActiveConsumer", "activeConsumer", "REACTIVE_NODE", "consumerBeforeComputation", "setActiveConsumer", "consumerAfterComputation", "consumerIsLive", "producerRemoveLiveConsumerAtIndex", "producerRemoveLiveConsumerAtIndex", "assertProducerNode", "isConsumerNode", "assertConsumerNode", "consumerIsLive", "COMPUTED_NODE", "REACTIVE_NODE", "defaultEquals", "consumerBeforeComputation", "consumerAfterComputation", "SIGNAL_NODE", "REACTIVE_NODE", "defaultEquals", "NOOP_CLEANUP_FN", "WATCH_NODE", "REACTIVE_NODE", "i", "tNode", "console", "ERRORED", "UNSET", "COMPUTING", "effect", "ResourceStatus"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-QSAO6LAI.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-QSAO6LAI.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,21552 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  BrowserDomAdapter,
-  BrowserModule,
-  DOCUMENT,
-  DomRendererFactory2,
-  EVENT_MANAGER_PLUGINS,
-  EventManagerPlugin,
-  HTTP_ROOT_INTERCEPTOR_FNS,
-  NullViewportScroller,
-  PLATFORM_SERVER_ID,
-  PlatformLocation,
-  ViewportScroller,
-  XhrFactory,
-  getDOM,
-  setRootDomAdapter
-} from "./chunk-ZI5JGHU3.js";
-import {
-  ALLOW_MULTIPLE_PLATFORMS,
-  ANIMATION_MODULE_TYPE,
-  APP_ID,
-  ApplicationRef,
-  CSP_NONCE,
-  IS_HYDRATION_DOM_REUSE_ENABLED,
-  Inject,
-  Injectable,
-  InjectionToken,
-  Injector,
-  NgModule,
-  NgZone,
-  Optional,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  Renderer2,
-  RendererFactory2,
-  RuntimeError,
-  SSR_CONTENT_INTEGRITY_MARKER,
-  TESTABILITY,
-  Testability,
-  TransferState,
-  Version,
-  ViewEncapsulation,
-  annotateForHydration,
-  createPlatformFactory,
-  inject,
-  makeEnvironmentProviders,
-  platformCore,
-  require_cjs,
-  setClassMetadata,
-  setDocument,
-  startMeasuring,
-  stopMeasuring,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵinject
-} from "./chunk-PEAVEDUD.js";
-import {
-  __async,
-  __objRest,
-  __spreadValues,
-  __toESM
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/@angular/animations/fesm2022/animations.mjs
-var AnimationMetadataType;
-(function(AnimationMetadataType2) {
-  AnimationMetadataType2[AnimationMetadataType2["State"] = 0] = "State";
-  AnimationMetadataType2[AnimationMetadataType2["Transition"] = 1] = "Transition";
-  AnimationMetadataType2[AnimationMetadataType2["Sequence"] = 2] = "Sequence";
-  AnimationMetadataType2[AnimationMetadataType2["Group"] = 3] = "Group";
-  AnimationMetadataType2[AnimationMetadataType2["Animate"] = 4] = "Animate";
-  AnimationMetadataType2[AnimationMetadataType2["Keyframes"] = 5] = "Keyframes";
-  AnimationMetadataType2[AnimationMetadataType2["Style"] = 6] = "Style";
-  AnimationMetadataType2[AnimationMetadataType2["Trigger"] = 7] = "Trigger";
-  AnimationMetadataType2[AnimationMetadataType2["Reference"] = 8] = "Reference";
-  AnimationMetadataType2[AnimationMetadataType2["AnimateChild"] = 9] = "AnimateChild";
-  AnimationMetadataType2[AnimationMetadataType2["AnimateRef"] = 10] = "AnimateRef";
-  AnimationMetadataType2[AnimationMetadataType2["Query"] = 11] = "Query";
-  AnimationMetadataType2[AnimationMetadataType2["Stagger"] = 12] = "Stagger";
-})(AnimationMetadataType || (AnimationMetadataType = {}));
-var AUTO_STYLE = "*";
-function sequence(steps, options = null) {
-  return {
-    type: AnimationMetadataType.Sequence,
-    steps,
-    options
-  };
-}
-function style(tokens) {
-  return {
-    type: AnimationMetadataType.Style,
-    styles: tokens,
-    offset: null
-  };
-}
-var AnimationBuilder = class _AnimationBuilder {
-  static ɵfac = function AnimationBuilder_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _AnimationBuilder)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _AnimationBuilder,
-    factory: () => (() => inject(BrowserAnimationBuilder))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AnimationBuilder, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(BrowserAnimationBuilder)
-    }]
-  }], null, null);
-})();
-var AnimationFactory = class {
-};
-var BrowserAnimationBuilder = class _BrowserAnimationBuilder extends AnimationBuilder {
-  animationModuleType = inject(ANIMATION_MODULE_TYPE, {
-    optional: true
-  });
-  _nextAnimationId = 0;
-  _renderer;
-  constructor(rootRenderer, doc) {
-    super();
-    const typeData = {
-      id: "0",
-      encapsulation: ViewEncapsulation.None,
-      styles: [],
-      data: {
-        animation: []
-      }
-    };
-    this._renderer = rootRenderer.createRenderer(doc.body, typeData);
-    if (this.animationModuleType === null && !isAnimationRenderer(this._renderer)) {
-      throw new RuntimeError(3600, (typeof ngDevMode === "undefined" || ngDevMode) && "Angular detected that the `AnimationBuilder` was injected, but animation support was not enabled. Please make sure that you enable animations in your application by calling `provideAnimations()` or `provideAnimationsAsync()` function.");
-    }
-  }
-  build(animation) {
-    const id = this._nextAnimationId;
-    this._nextAnimationId++;
-    const entry = Array.isArray(animation) ? sequence(animation) : animation;
-    issueAnimationCommand(this._renderer, null, id, "register", [entry]);
-    return new BrowserAnimationFactory(id, this._renderer);
-  }
-  static ɵfac = function BrowserAnimationBuilder_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserAnimationBuilder)(ɵɵinject(RendererFactory2), ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _BrowserAnimationBuilder,
-    factory: _BrowserAnimationBuilder.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserAnimationBuilder, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: RendererFactory2
-  }, {
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var BrowserAnimationFactory = class extends AnimationFactory {
-  _id;
-  _renderer;
-  constructor(_id, _renderer) {
-    super();
-    this._id = _id;
-    this._renderer = _renderer;
-  }
-  create(element, options) {
-    return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);
-  }
-};
-var RendererAnimationPlayer = class {
-  id;
-  element;
-  _renderer;
-  parentPlayer = null;
-  _started = false;
-  constructor(id, element, options, _renderer) {
-    this.id = id;
-    this.element = element;
-    this._renderer = _renderer;
-    this._command("create", options);
-  }
-  _listen(eventName, callback) {
-    return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);
-  }
-  _command(command, ...args) {
-    issueAnimationCommand(this._renderer, this.element, this.id, command, args);
-  }
-  onDone(fn) {
-    this._listen("done", fn);
-  }
-  onStart(fn) {
-    this._listen("start", fn);
-  }
-  onDestroy(fn) {
-    this._listen("destroy", fn);
-  }
-  init() {
-    this._command("init");
-  }
-  hasStarted() {
-    return this._started;
-  }
-  play() {
-    this._command("play");
-    this._started = true;
-  }
-  pause() {
-    this._command("pause");
-  }
-  restart() {
-    this._command("restart");
-  }
-  finish() {
-    this._command("finish");
-  }
-  destroy() {
-    this._command("destroy");
-  }
-  reset() {
-    this._command("reset");
-    this._started = false;
-  }
-  setPosition(p) {
-    this._command("setPosition", p);
-  }
-  getPosition() {
-    return unwrapAnimationRenderer(this._renderer)?.engine?.players[this.id]?.getPosition() ?? 0;
-  }
-  totalTime = 0;
-};
-function issueAnimationCommand(renderer, element, id, command, args) {
-  renderer.setProperty(element, `@@${id}:${command}`, args);
-}
-function unwrapAnimationRenderer(renderer) {
-  const type = renderer.ɵtype;
-  if (type === 0) {
-    return renderer;
-  } else if (type === 1) {
-    return renderer.animationRenderer;
-  }
-  return null;
-}
-function isAnimationRenderer(renderer) {
-  const type = renderer.ɵtype;
-  return type === 0 || type === 1;
-}
-var NoopAnimationPlayer = class {
-  _onDoneFns = [];
-  _onStartFns = [];
-  _onDestroyFns = [];
-  _originalOnDoneFns = [];
-  _originalOnStartFns = [];
-  _started = false;
-  _destroyed = false;
-  _finished = false;
-  _position = 0;
-  parentPlayer = null;
-  totalTime;
-  constructor(duration = 0, delay = 0) {
-    this.totalTime = duration + delay;
-  }
-  _onFinish() {
-    if (!this._finished) {
-      this._finished = true;
-      this._onDoneFns.forEach((fn) => fn());
-      this._onDoneFns = [];
-    }
-  }
-  onStart(fn) {
-    this._originalOnStartFns.push(fn);
-    this._onStartFns.push(fn);
-  }
-  onDone(fn) {
-    this._originalOnDoneFns.push(fn);
-    this._onDoneFns.push(fn);
-  }
-  onDestroy(fn) {
-    this._onDestroyFns.push(fn);
-  }
-  hasStarted() {
-    return this._started;
-  }
-  init() {
-  }
-  play() {
-    if (!this.hasStarted()) {
-      this._onStart();
-      this.triggerMicrotask();
-    }
-    this._started = true;
-  }
-  /** @internal */
-  triggerMicrotask() {
-    queueMicrotask(() => this._onFinish());
-  }
-  _onStart() {
-    this._onStartFns.forEach((fn) => fn());
-    this._onStartFns = [];
-  }
-  pause() {
-  }
-  restart() {
-  }
-  finish() {
-    this._onFinish();
-  }
-  destroy() {
-    if (!this._destroyed) {
-      this._destroyed = true;
-      if (!this.hasStarted()) {
-        this._onStart();
-      }
-      this.finish();
-      this._onDestroyFns.forEach((fn) => fn());
-      this._onDestroyFns = [];
-    }
-  }
-  reset() {
-    this._started = false;
-    this._finished = false;
-    this._onStartFns = this._originalOnStartFns;
-    this._onDoneFns = this._originalOnDoneFns;
-  }
-  setPosition(position) {
-    this._position = this.totalTime ? position * this.totalTime : 1;
-  }
-  getPosition() {
-    return this.totalTime ? this._position / this.totalTime : 1;
-  }
-  /** @internal */
-  triggerCallback(phaseName) {
-    const methods = phaseName == "start" ? this._onStartFns : this._onDoneFns;
-    methods.forEach((fn) => fn());
-    methods.length = 0;
-  }
-};
-var AnimationGroupPlayer = class {
-  _onDoneFns = [];
-  _onStartFns = [];
-  _finished = false;
-  _started = false;
-  _destroyed = false;
-  _onDestroyFns = [];
-  parentPlayer = null;
-  totalTime = 0;
-  players;
-  constructor(_players) {
-    this.players = _players;
-    let doneCount = 0;
-    let destroyCount = 0;
-    let startCount = 0;
-    const total = this.players.length;
-    if (total == 0) {
-      queueMicrotask(() => this._onFinish());
-    } else {
-      this.players.forEach((player) => {
-        player.onDone(() => {
-          if (++doneCount == total) {
-            this._onFinish();
-          }
-        });
-        player.onDestroy(() => {
-          if (++destroyCount == total) {
-            this._onDestroy();
-          }
-        });
-        player.onStart(() => {
-          if (++startCount == total) {
-            this._onStart();
-          }
-        });
-      });
-    }
-    this.totalTime = this.players.reduce((time, player) => Math.max(time, player.totalTime), 0);
-  }
-  _onFinish() {
-    if (!this._finished) {
-      this._finished = true;
-      this._onDoneFns.forEach((fn) => fn());
-      this._onDoneFns = [];
-    }
-  }
-  init() {
-    this.players.forEach((player) => player.init());
-  }
-  onStart(fn) {
-    this._onStartFns.push(fn);
-  }
-  _onStart() {
-    if (!this.hasStarted()) {
-      this._started = true;
-      this._onStartFns.forEach((fn) => fn());
-      this._onStartFns = [];
-    }
-  }
-  onDone(fn) {
-    this._onDoneFns.push(fn);
-  }
-  onDestroy(fn) {
-    this._onDestroyFns.push(fn);
-  }
-  hasStarted() {
-    return this._started;
-  }
-  play() {
-    if (!this.parentPlayer) {
-      this.init();
-    }
-    this._onStart();
-    this.players.forEach((player) => player.play());
-  }
-  pause() {
-    this.players.forEach((player) => player.pause());
-  }
-  restart() {
-    this.players.forEach((player) => player.restart());
-  }
-  finish() {
-    this._onFinish();
-    this.players.forEach((player) => player.finish());
-  }
-  destroy() {
-    this._onDestroy();
-  }
-  _onDestroy() {
-    if (!this._destroyed) {
-      this._destroyed = true;
-      this._onFinish();
-      this.players.forEach((player) => player.destroy());
-      this._onDestroyFns.forEach((fn) => fn());
-      this._onDestroyFns = [];
-    }
-  }
-  reset() {
-    this.players.forEach((player) => player.reset());
-    this._destroyed = false;
-    this._finished = false;
-    this._started = false;
-  }
-  setPosition(p) {
-    const timeAtPosition = p * this.totalTime;
-    this.players.forEach((player) => {
-      const position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;
-      player.setPosition(position);
-    });
-  }
-  getPosition() {
-    const longestPlayer = this.players.reduce((longestSoFar, player) => {
-      const newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime;
-      return newPlayerIsLongest ? player : longestSoFar;
-    }, null);
-    return longestPlayer != null ? longestPlayer.getPosition() : 0;
-  }
-  beforeDestroy() {
-    this.players.forEach((player) => {
-      if (player.beforeDestroy) {
-        player.beforeDestroy();
-      }
-    });
-  }
-  /** @internal */
-  triggerCallback(phaseName) {
-    const methods = phaseName == "start" ? this._onStartFns : this._onDoneFns;
-    methods.forEach((fn) => fn());
-    methods.length = 0;
-  }
-};
-var ɵPRE_STYLE = "!";
-
-// node_modules/@angular/animations/fesm2022/browser.mjs
-var LINE_START = "\n - ";
-function invalidTimingValue(exp) {
-  return new RuntimeError(3e3, ngDevMode && `The provided timing value "${exp}" is invalid.`);
-}
-function negativeStepValue() {
-  return new RuntimeError(3100, ngDevMode && "Duration values below 0 are not allowed for this animation step.");
-}
-function negativeDelayValue() {
-  return new RuntimeError(3101, ngDevMode && "Delay values below 0 are not allowed for this animation step.");
-}
-function invalidStyleParams(varName) {
-  return new RuntimeError(3001, ngDevMode && `Unable to resolve the local animation param ${varName} in the given list of values`);
-}
-function invalidParamValue(varName) {
-  return new RuntimeError(3003, ngDevMode && `Please provide a value for the animation param ${varName}`);
-}
-function invalidNodeType(nodeType) {
-  return new RuntimeError(3004, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);
-}
-function invalidCssUnitValue(userProvidedProperty, value) {
-  return new RuntimeError(3005, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);
-}
-function invalidTrigger() {
-  return new RuntimeError(3006, ngDevMode && "animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))");
-}
-function invalidDefinition() {
-  return new RuntimeError(3007, ngDevMode && "only state() and transition() definitions can sit inside of a trigger()");
-}
-function invalidState(metadataName, missingSubs) {
-  return new RuntimeError(3008, ngDevMode && `state("${metadataName}", ...) must define default values for all the following style substitutions: ${missingSubs.join(", ")}`);
-}
-function invalidStyleValue(value) {
-  return new RuntimeError(3002, ngDevMode && `The provided style string value ${value} is not allowed.`);
-}
-function invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {
-  return new RuntimeError(3010, ngDevMode && `The CSS property "${prop}" that exists between the times of "${firstStart}ms" and "${firstEnd}ms" is also being animated in a parallel animation between the times of "${secondStart}ms" and "${secondEnd}ms"`);
-}
-function invalidKeyframes() {
-  return new RuntimeError(3011, ngDevMode && `keyframes() must be placed inside of a call to animate()`);
-}
-function invalidOffset() {
-  return new RuntimeError(3012, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);
-}
-function keyframeOffsetsOutOfOrder() {
-  return new RuntimeError(3200, ngDevMode && `Please ensure that all keyframe offsets are in order`);
-}
-function keyframesMissingOffsets() {
-  return new RuntimeError(3202, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);
-}
-function invalidStagger() {
-  return new RuntimeError(3013, ngDevMode && `stagger() can only be used inside of query()`);
-}
-function invalidQuery(selector) {
-  return new RuntimeError(3014, ngDevMode && `\`query("${selector}")\` returned zero elements. (Use \`query("${selector}", { optional: true })\` if you wish to allow this.)`);
-}
-function invalidExpression(expr) {
-  return new RuntimeError(3015, ngDevMode && `The provided transition expression "${expr}" is not supported`);
-}
-function invalidTransitionAlias(alias) {
-  return new RuntimeError(3016, ngDevMode && `The transition alias value "${alias}" is not supported`);
-}
-function triggerBuildFailed(name, errors) {
-  return new RuntimeError(3404, ngDevMode && `The animation trigger "${name}" has failed to build due to the following errors:
- - ${errors.map((err) => err.message).join("\n - ")}`);
-}
-function animationFailed(errors) {
-  return new RuntimeError(3502, ngDevMode && `Unable to animate due to the following errors:${LINE_START}${errors.map((err) => err.message).join(LINE_START)}`);
-}
-function registerFailed(errors) {
-  return new RuntimeError(3503, ngDevMode && `Unable to build the animation due to the following errors: ${errors.map((err) => err.message).join("\n")}`);
-}
-function missingOrDestroyedAnimation() {
-  return new RuntimeError(3300, ngDevMode && "The requested animation doesn't exist or has already been destroyed");
-}
-function createAnimationFailed(errors) {
-  return new RuntimeError(3504, ngDevMode && `Unable to create the animation due to the following errors:${errors.map((err) => err.message).join("\n")}`);
-}
-function missingPlayer(id) {
-  return new RuntimeError(3301, ngDevMode && `Unable to find the timeline player referenced by ${id}`);
-}
-function missingTrigger(phase, name) {
-  return new RuntimeError(3302, ngDevMode && `Unable to listen on the animation trigger event "${phase}" because the animation trigger "${name}" doesn't exist!`);
-}
-function missingEvent(name) {
-  return new RuntimeError(3303, ngDevMode && `Unable to listen on the animation trigger "${name}" because the provided event is undefined!`);
-}
-function unsupportedTriggerEvent(phase, name) {
-  return new RuntimeError(3400, ngDevMode && `The provided animation trigger event "${phase}" for the animation trigger "${name}" is not supported!`);
-}
-function unregisteredTrigger(name) {
-  return new RuntimeError(3401, ngDevMode && `The provided animation trigger "${name}" has not been registered!`);
-}
-function triggerTransitionsFailed(errors) {
-  return new RuntimeError(3402, ngDevMode && `Unable to process animations due to the following failed trigger transitions
- ${errors.map((err) => err.message).join("\n")}`);
-}
-function transitionFailed(name, errors) {
-  return new RuntimeError(3505, ngDevMode && `@${name} has failed due to:
- ${errors.map((err) => err.message).join("\n- ")}`);
-}
-var ANIMATABLE_PROP_SET = /* @__PURE__ */ new Set(["-moz-outline-radius", "-moz-outline-radius-bottomleft", "-moz-outline-radius-bottomright", "-moz-outline-radius-topleft", "-moz-outline-radius-topright", "-ms-grid-columns", "-ms-grid-rows", "-webkit-line-clamp", "-webkit-text-fill-color", "-webkit-text-stroke", "-webkit-text-stroke-color", "accent-color", "all", "backdrop-filter", "background", "background-color", "background-position", "background-size", "block-size", "border", "border-block-end", "border-block-end-color", "border-block-end-width", "border-block-start", "border-block-start-color", "border-block-start-width", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-width", "border-color", "border-end-end-radius", "border-end-start-radius", "border-image-outset", "border-image-slice", "border-image-width", "border-inline-end", "border-inline-end-color", "border-inline-end-width", "border-inline-start", "border-inline-start-color", "border-inline-start-width", "border-left", "border-left-color", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-width", "border-start-end-radius", "border-start-start-radius", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-width", "border-width", "bottom", "box-shadow", "caret-color", "clip", "clip-path", "color", "column-count", "column-gap", "column-rule", "column-rule-color", "column-rule-width", "column-width", "columns", "filter", "flex", "flex-basis", "flex-grow", "flex-shrink", "font", "font-size", "font-size-adjust", "font-stretch", "font-variation-settings", "font-weight", "gap", "grid-column-gap", "grid-gap", "grid-row-gap", "grid-template-columns", "grid-template-rows", "height", "inline-size", "input-security", "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", "inset-inline-end", "inset-inline-start", "left", "letter-spacing", "line-clamp", "line-height", "margin", "margin-block-end", "margin-block-start", "margin-bottom", "margin-inline-end", "margin-inline-start", "margin-left", "margin-right", "margin-top", "mask", "mask-border", "mask-position", "mask-size", "max-block-size", "max-height", "max-inline-size", "max-lines", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", "object-position", "offset", "offset-anchor", "offset-distance", "offset-path", "offset-position", "offset-rotate", "opacity", "order", "outline", "outline-color", "outline-offset", "outline-width", "padding", "padding-block-end", "padding-block-start", "padding-bottom", "padding-inline-end", "padding-inline-start", "padding-left", "padding-right", "padding-top", "perspective", "perspective-origin", "right", "rotate", "row-gap", "scale", "scroll-margin", "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", "scroll-snap-coordinate", "scroll-snap-destination", "scrollbar-color", "shape-image-threshold", "shape-margin", "shape-outside", "tab-size", "text-decoration", "text-decoration-color", "text-decoration-thickness", "text-emphasis", "text-emphasis-color", "text-indent", "text-shadow", "text-underline-offset", "top", "transform", "transform-origin", "translate", "vertical-align", "visibility", "width", "word-spacing", "z-index", "zoom"]);
-function optimizeGroupPlayer(players) {
-  switch (players.length) {
-    case 0:
-      return new NoopAnimationPlayer();
-    case 1:
-      return players[0];
-    default:
-      return new AnimationGroupPlayer(players);
-  }
-}
-function normalizeKeyframes$1(normalizer, keyframes, preStyles = /* @__PURE__ */ new Map(), postStyles = /* @__PURE__ */ new Map()) {
-  const errors = [];
-  const normalizedKeyframes = [];
-  let previousOffset = -1;
-  let previousKeyframe = null;
-  keyframes.forEach((kf) => {
-    const offset = kf.get("offset");
-    const isSameOffset = offset == previousOffset;
-    const normalizedKeyframe = isSameOffset && previousKeyframe || /* @__PURE__ */ new Map();
-    kf.forEach((val, prop) => {
-      let normalizedProp = prop;
-      let normalizedValue = val;
-      if (prop !== "offset") {
-        normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);
-        switch (normalizedValue) {
-          case ɵPRE_STYLE:
-            normalizedValue = preStyles.get(prop);
-            break;
-          case AUTO_STYLE:
-            normalizedValue = postStyles.get(prop);
-            break;
-          default:
-            normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
-            break;
-        }
-      }
-      normalizedKeyframe.set(normalizedProp, normalizedValue);
-    });
-    if (!isSameOffset) {
-      normalizedKeyframes.push(normalizedKeyframe);
-    }
-    previousKeyframe = normalizedKeyframe;
-    previousOffset = offset;
-  });
-  if (errors.length) {
-    throw animationFailed(errors);
-  }
-  return normalizedKeyframes;
-}
-function listenOnPlayer(player, eventName, event, callback) {
-  switch (eventName) {
-    case "start":
-      player.onStart(() => callback(event && copyAnimationEvent(event, "start", player)));
-      break;
-    case "done":
-      player.onDone(() => callback(event && copyAnimationEvent(event, "done", player)));
-      break;
-    case "destroy":
-      player.onDestroy(() => callback(event && copyAnimationEvent(event, "destroy", player)));
-      break;
-  }
-}
-function copyAnimationEvent(e, phaseName, player) {
-  const totalTime = player.totalTime;
-  const disabled = player.disabled ? true : false;
-  const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == void 0 ? e.totalTime : totalTime, disabled);
-  const data = e["_data"];
-  if (data != null) {
-    event["_data"] = data;
-  }
-  return event;
-}
-function makeAnimationEvent(element, triggerName, fromState, toState, phaseName = "", totalTime = 0, disabled) {
-  return {
-    element,
-    triggerName,
-    fromState,
-    toState,
-    phaseName,
-    totalTime,
-    disabled: !!disabled
-  };
-}
-function getOrSetDefaultValue(map, key, defaultValue) {
-  let value = map.get(key);
-  if (!value) {
-    map.set(key, value = defaultValue);
-  }
-  return value;
-}
-function parseTimelineCommand(command) {
-  const separatorPos = command.indexOf(":");
-  const id = command.substring(1, separatorPos);
-  const action = command.slice(separatorPos + 1);
-  return [id, action];
-}
-var documentElement = (() => typeof document === "undefined" ? null : document.documentElement)();
-function getParentElement(element) {
-  const parent = element.parentNode || element.host || null;
-  if (parent === documentElement) {
-    return null;
-  }
-  return parent;
-}
-function containsVendorPrefix(prop) {
-  return prop.substring(1, 6) == "ebkit";
-}
-var _CACHED_BODY = null;
-var _IS_WEBKIT = false;
-function validateStyleProperty(prop) {
-  if (!_CACHED_BODY) {
-    _CACHED_BODY = getBodyNode() || {};
-    _IS_WEBKIT = _CACHED_BODY.style ? "WebkitAppearance" in _CACHED_BODY.style : false;
-  }
-  let result = true;
-  if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {
-    result = prop in _CACHED_BODY.style;
-    if (!result && _IS_WEBKIT) {
-      const camelProp = "Webkit" + prop.charAt(0).toUpperCase() + prop.slice(1);
-      result = camelProp in _CACHED_BODY.style;
-    }
-  }
-  return result;
-}
-function validateWebAnimatableStyleProperty(prop) {
-  return ANIMATABLE_PROP_SET.has(prop);
-}
-function getBodyNode() {
-  if (typeof document != "undefined") {
-    return document.body;
-  }
-  return null;
-}
-function containsElement(elm1, elm2) {
-  while (elm2) {
-    if (elm2 === elm1) {
-      return true;
-    }
-    elm2 = getParentElement(elm2);
-  }
-  return false;
-}
-function invokeQuery(element, selector, multi) {
-  if (multi) {
-    return Array.from(element.querySelectorAll(selector));
-  }
-  const elem = element.querySelector(selector);
-  return elem ? [elem] : [];
-}
-var NoopAnimationDriver = class _NoopAnimationDriver {
-  /**
-   * @returns Whether `prop` is a valid CSS property
-   */
-  validateStyleProperty(prop) {
-    return validateStyleProperty(prop);
-  }
-  /**
-   *
-   * @returns Whether elm1 contains elm2.
-   */
-  containsElement(elm1, elm2) {
-    return containsElement(elm1, elm2);
-  }
-  /**
-   * @returns Rhe parent of the given element or `null` if the element is the `document`
-   */
-  getParentElement(element) {
-    return getParentElement(element);
-  }
-  /**
-   * @returns The result of the query selector on the element. The array will contain up to 1 item
-   *     if `multi` is  `false`.
-   */
-  query(element, selector, multi) {
-    return invokeQuery(element, selector, multi);
-  }
-  /**
-   * @returns The `defaultValue` or empty string
-   */
-  computeStyle(element, prop, defaultValue) {
-    return defaultValue || "";
-  }
-  /**
-   * @returns An `NoopAnimationPlayer`
-   */
-  animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {
-    return new NoopAnimationPlayer(duration, delay);
-  }
-  static ɵfac = function NoopAnimationDriver_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NoopAnimationDriver)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NoopAnimationDriver,
-    factory: _NoopAnimationDriver.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NoopAnimationDriver, [{
-    type: Injectable
-  }], null, null);
-})();
-var AnimationDriver = class {
-  /**
-   * @deprecated Use the NoopAnimationDriver class.
-   */
-  static NOOP = new NoopAnimationDriver();
-};
-var AnimationStyleNormalizer = class {
-};
-var ONE_SECOND = 1e3;
-var SUBSTITUTION_EXPR_START = "{{";
-var SUBSTITUTION_EXPR_END = "}}";
-var ENTER_CLASSNAME = "ng-enter";
-var LEAVE_CLASSNAME = "ng-leave";
-var NG_TRIGGER_CLASSNAME = "ng-trigger";
-var NG_TRIGGER_SELECTOR = ".ng-trigger";
-var NG_ANIMATING_CLASSNAME = "ng-animating";
-var NG_ANIMATING_SELECTOR = ".ng-animating";
-function resolveTimingValue(value) {
-  if (typeof value == "number") return value;
-  const matches = value.match(/^(-?[\.\d]+)(m?s)/);
-  if (!matches || matches.length < 2) return 0;
-  return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
-}
-function _convertTimeValueToMS(value, unit) {
-  switch (unit) {
-    case "s":
-      return value * ONE_SECOND;
-    default:
-      return value;
-  }
-}
-function resolveTiming(timings, errors, allowNegativeValues) {
-  return timings.hasOwnProperty("duration") ? timings : parseTimeExpression(timings, errors, allowNegativeValues);
-}
-function parseTimeExpression(exp, errors, allowNegativeValues) {
-  const regex = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;
-  let duration;
-  let delay = 0;
-  let easing = "";
-  if (typeof exp === "string") {
-    const matches = exp.match(regex);
-    if (matches === null) {
-      errors.push(invalidTimingValue(exp));
-      return {
-        duration: 0,
-        delay: 0,
-        easing: ""
-      };
-    }
-    duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
-    const delayMatch = matches[3];
-    if (delayMatch != null) {
-      delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);
-    }
-    const easingVal = matches[5];
-    if (easingVal) {
-      easing = easingVal;
-    }
-  } else {
-    duration = exp;
-  }
-  if (!allowNegativeValues) {
-    let containsErrors = false;
-    let startIndex = errors.length;
-    if (duration < 0) {
-      errors.push(negativeStepValue());
-      containsErrors = true;
-    }
-    if (delay < 0) {
-      errors.push(negativeDelayValue());
-      containsErrors = true;
-    }
-    if (containsErrors) {
-      errors.splice(startIndex, 0, invalidTimingValue(exp));
-    }
-  }
-  return {
-    duration,
-    delay,
-    easing
-  };
-}
-function normalizeKeyframes(keyframes) {
-  if (!keyframes.length) {
-    return [];
-  }
-  if (keyframes[0] instanceof Map) {
-    return keyframes;
-  }
-  return keyframes.map((kf) => new Map(Object.entries(kf)));
-}
-function setStyles(element, styles, formerStyles) {
-  styles.forEach((val, prop) => {
-    const camelProp = dashCaseToCamelCase(prop);
-    if (formerStyles && !formerStyles.has(prop)) {
-      formerStyles.set(prop, element.style[camelProp]);
-    }
-    element.style[camelProp] = val;
-  });
-}
-function eraseStyles(element, styles) {
-  styles.forEach((_, prop) => {
-    const camelProp = dashCaseToCamelCase(prop);
-    element.style[camelProp] = "";
-  });
-}
-function normalizeAnimationEntry(steps) {
-  if (Array.isArray(steps)) {
-    if (steps.length == 1) return steps[0];
-    return sequence(steps);
-  }
-  return steps;
-}
-function validateStyleParams(value, options, errors) {
-  const params = options.params || {};
-  const matches = extractStyleParams(value);
-  if (matches.length) {
-    matches.forEach((varName) => {
-      if (!params.hasOwnProperty(varName)) {
-        errors.push(invalidStyleParams(varName));
-      }
-    });
-  }
-}
-var PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\s*(.+?)\\s*${SUBSTITUTION_EXPR_END}`, "g");
-function extractStyleParams(value) {
-  let params = [];
-  if (typeof value === "string") {
-    let match;
-    while (match = PARAM_REGEX.exec(value)) {
-      params.push(match[1]);
-    }
-    PARAM_REGEX.lastIndex = 0;
-  }
-  return params;
-}
-function interpolateParams(value, params, errors) {
-  const original = `${value}`;
-  const str = original.replace(PARAM_REGEX, (_, varName) => {
-    let localVal = params[varName];
-    if (localVal == null) {
-      errors.push(invalidParamValue(varName));
-      localVal = "";
-    }
-    return localVal.toString();
-  });
-  return str == original ? value : str;
-}
-var DASH_CASE_REGEXP = /-+([a-z0-9])/g;
-function dashCaseToCamelCase(input) {
-  return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());
-}
-function camelCaseToDashCase(input) {
-  return input.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
-}
-function allowPreviousPlayerStylesMerge(duration, delay) {
-  return duration === 0 || delay === 0;
-}
-function balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {
-  if (previousStyles.size && keyframes.length) {
-    let startingKeyframe = keyframes[0];
-    let missingStyleProps = [];
-    previousStyles.forEach((val, prop) => {
-      if (!startingKeyframe.has(prop)) {
-        missingStyleProps.push(prop);
-      }
-      startingKeyframe.set(prop, val);
-    });
-    if (missingStyleProps.length) {
-      for (let i = 1; i < keyframes.length; i++) {
-        let kf = keyframes[i];
-        missingStyleProps.forEach((prop) => kf.set(prop, computeStyle(element, prop)));
-      }
-    }
-  }
-  return keyframes;
-}
-function visitDslNode(visitor, node, context) {
-  switch (node.type) {
-    case AnimationMetadataType.Trigger:
-      return visitor.visitTrigger(node, context);
-    case AnimationMetadataType.State:
-      return visitor.visitState(node, context);
-    case AnimationMetadataType.Transition:
-      return visitor.visitTransition(node, context);
-    case AnimationMetadataType.Sequence:
-      return visitor.visitSequence(node, context);
-    case AnimationMetadataType.Group:
-      return visitor.visitGroup(node, context);
-    case AnimationMetadataType.Animate:
-      return visitor.visitAnimate(node, context);
-    case AnimationMetadataType.Keyframes:
-      return visitor.visitKeyframes(node, context);
-    case AnimationMetadataType.Style:
-      return visitor.visitStyle(node, context);
-    case AnimationMetadataType.Reference:
-      return visitor.visitReference(node, context);
-    case AnimationMetadataType.AnimateChild:
-      return visitor.visitAnimateChild(node, context);
-    case AnimationMetadataType.AnimateRef:
-      return visitor.visitAnimateRef(node, context);
-    case AnimationMetadataType.Query:
-      return visitor.visitQuery(node, context);
-    case AnimationMetadataType.Stagger:
-      return visitor.visitStagger(node, context);
-    default:
-      throw invalidNodeType(node.type);
-  }
-}
-function computeStyle(element, prop) {
-  return window.getComputedStyle(element)[prop];
-}
-var DIMENSIONAL_PROP_SET = /* @__PURE__ */ new Set(["width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "left", "top", "bottom", "right", "fontSize", "outlineWidth", "outlineOffset", "paddingTop", "paddingLeft", "paddingBottom", "paddingRight", "marginTop", "marginLeft", "marginBottom", "marginRight", "borderRadius", "borderWidth", "borderTopWidth", "borderLeftWidth", "borderRightWidth", "borderBottomWidth", "textIndent", "perspective"]);
-var WebAnimationsStyleNormalizer = class extends AnimationStyleNormalizer {
-  normalizePropertyName(propertyName, errors) {
-    return dashCaseToCamelCase(propertyName);
-  }
-  normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {
-    let unit = "";
-    const strVal = value.toString().trim();
-    if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== "0") {
-      if (typeof value === "number") {
-        unit = "px";
-      } else {
-        const valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);
-        if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
-          errors.push(invalidCssUnitValue(userProvidedProperty, value));
-        }
-      }
-    }
-    return strVal + unit;
-  }
-};
-function createListOfWarnings(warnings) {
-  const LINE_START2 = "\n - ";
-  return `${LINE_START2}${warnings.filter(Boolean).map((warning) => warning).join(LINE_START2)}`;
-}
-function warnTriggerBuild(name, warnings) {
-  (typeof ngDevMode === "undefined" || ngDevMode) && console.warn(`The animation trigger "${name}" has built with the following warnings:${createListOfWarnings(warnings)}`);
-}
-function warnRegister(warnings) {
-  (typeof ngDevMode === "undefined" || ngDevMode) && console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);
-}
-function pushUnrecognizedPropertiesWarning(warnings, props) {
-  if (props.length) {
-    warnings.push(`The following provided properties are not recognized: ${props.join(", ")}`);
-  }
-}
-var ANY_STATE = "*";
-function parseTransitionExpr(transitionValue, errors) {
-  const expressions = [];
-  if (typeof transitionValue == "string") {
-    transitionValue.split(/\s*,\s*/).forEach((str) => parseInnerTransitionStr(str, expressions, errors));
-  } else {
-    expressions.push(transitionValue);
-  }
-  return expressions;
-}
-function parseInnerTransitionStr(eventStr, expressions, errors) {
-  if (eventStr[0] == ":") {
-    const result = parseAnimationAlias(eventStr, errors);
-    if (typeof result == "function") {
-      expressions.push(result);
-      return;
-    }
-    eventStr = result;
-  }
-  const match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);
-  if (match == null || match.length < 4) {
-    errors.push(invalidExpression(eventStr));
-    return expressions;
-  }
-  const fromState = match[1];
-  const separator = match[2];
-  const toState = match[3];
-  expressions.push(makeLambdaFromStates(fromState, toState));
-  const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;
-  if (separator[0] == "<" && !isFullAnyStateExpr) {
-    expressions.push(makeLambdaFromStates(toState, fromState));
-  }
-  return;
-}
-function parseAnimationAlias(alias, errors) {
-  switch (alias) {
-    case ":enter":
-      return "void => *";
-    case ":leave":
-      return "* => void";
-    case ":increment":
-      return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);
-    case ":decrement":
-      return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);
-    default:
-      errors.push(invalidTransitionAlias(alias));
-      return "* => *";
-  }
-}
-var TRUE_BOOLEAN_VALUES = /* @__PURE__ */ new Set(["true", "1"]);
-var FALSE_BOOLEAN_VALUES = /* @__PURE__ */ new Set(["false", "0"]);
-function makeLambdaFromStates(lhs, rhs) {
-  const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);
-  const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);
-  return (fromState, toState) => {
-    let lhsMatch = lhs == ANY_STATE || lhs == fromState;
-    let rhsMatch = rhs == ANY_STATE || rhs == toState;
-    if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === "boolean") {
-      lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);
-    }
-    if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === "boolean") {
-      rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);
-    }
-    return lhsMatch && rhsMatch;
-  };
-}
-var SELF_TOKEN = ":self";
-var SELF_TOKEN_REGEX = new RegExp(`s*${SELF_TOKEN}s*,?`, "g");
-function buildAnimationAst(driver, metadata, errors, warnings) {
-  return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);
-}
-var ROOT_SELECTOR = "";
-var AnimationAstBuilderVisitor = class {
-  _driver;
-  constructor(_driver) {
-    this._driver = _driver;
-  }
-  build(metadata, errors, warnings) {
-    const context = new AnimationAstBuilderContext(errors);
-    this._resetContextStyleTimingState(context);
-    const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      if (context.unsupportedCSSPropertiesFound.size) {
-        pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);
-      }
-    }
-    return ast;
-  }
-  _resetContextStyleTimingState(context) {
-    context.currentQuerySelector = ROOT_SELECTOR;
-    context.collectedStyles = /* @__PURE__ */ new Map();
-    context.collectedStyles.set(ROOT_SELECTOR, /* @__PURE__ */ new Map());
-    context.currentTime = 0;
-  }
-  visitTrigger(metadata, context) {
-    let queryCount = context.queryCount = 0;
-    let depCount = context.depCount = 0;
-    const states = [];
-    const transitions = [];
-    if (metadata.name.charAt(0) == "@") {
-      context.errors.push(invalidTrigger());
-    }
-    metadata.definitions.forEach((def) => {
-      this._resetContextStyleTimingState(context);
-      if (def.type == AnimationMetadataType.State) {
-        const stateDef = def;
-        const name = stateDef.name;
-        name.toString().split(/\s*,\s*/).forEach((n) => {
-          stateDef.name = n;
-          states.push(this.visitState(stateDef, context));
-        });
-        stateDef.name = name;
-      } else if (def.type == AnimationMetadataType.Transition) {
-        const transition = this.visitTransition(def, context);
-        queryCount += transition.queryCount;
-        depCount += transition.depCount;
-        transitions.push(transition);
-      } else {
-        context.errors.push(invalidDefinition());
-      }
-    });
-    return {
-      type: AnimationMetadataType.Trigger,
-      name: metadata.name,
-      states,
-      transitions,
-      queryCount,
-      depCount,
-      options: null
-    };
-  }
-  visitState(metadata, context) {
-    const styleAst = this.visitStyle(metadata.styles, context);
-    const astParams = metadata.options && metadata.options.params || null;
-    if (styleAst.containsDynamicStyles) {
-      const missingSubs = /* @__PURE__ */ new Set();
-      const params = astParams || {};
-      styleAst.styles.forEach((style2) => {
-        if (style2 instanceof Map) {
-          style2.forEach((value) => {
-            extractStyleParams(value).forEach((sub) => {
-              if (!params.hasOwnProperty(sub)) {
-                missingSubs.add(sub);
-              }
-            });
-          });
-        }
-      });
-      if (missingSubs.size) {
-        context.errors.push(invalidState(metadata.name, [...missingSubs.values()]));
-      }
-    }
-    return {
-      type: AnimationMetadataType.State,
-      name: metadata.name,
-      style: styleAst,
-      options: astParams ? {
-        params: astParams
-      } : null
-    };
-  }
-  visitTransition(metadata, context) {
-    context.queryCount = 0;
-    context.depCount = 0;
-    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
-    const matchers = parseTransitionExpr(metadata.expr, context.errors);
-    return {
-      type: AnimationMetadataType.Transition,
-      matchers,
-      animation,
-      queryCount: context.queryCount,
-      depCount: context.depCount,
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitSequence(metadata, context) {
-    return {
-      type: AnimationMetadataType.Sequence,
-      steps: metadata.steps.map((s) => visitDslNode(this, s, context)),
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitGroup(metadata, context) {
-    const currentTime = context.currentTime;
-    let furthestTime = 0;
-    const steps = metadata.steps.map((step) => {
-      context.currentTime = currentTime;
-      const innerAst = visitDslNode(this, step, context);
-      furthestTime = Math.max(furthestTime, context.currentTime);
-      return innerAst;
-    });
-    context.currentTime = furthestTime;
-    return {
-      type: AnimationMetadataType.Group,
-      steps,
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitAnimate(metadata, context) {
-    const timingAst = constructTimingAst(metadata.timings, context.errors);
-    context.currentAnimateTimings = timingAst;
-    let styleAst;
-    let styleMetadata = metadata.styles ? metadata.styles : style({});
-    if (styleMetadata.type == AnimationMetadataType.Keyframes) {
-      styleAst = this.visitKeyframes(styleMetadata, context);
-    } else {
-      let styleMetadata2 = metadata.styles;
-      let isEmpty = false;
-      if (!styleMetadata2) {
-        isEmpty = true;
-        const newStyleData = {};
-        if (timingAst.easing) {
-          newStyleData["easing"] = timingAst.easing;
-        }
-        styleMetadata2 = style(newStyleData);
-      }
-      context.currentTime += timingAst.duration + timingAst.delay;
-      const _styleAst = this.visitStyle(styleMetadata2, context);
-      _styleAst.isEmptyStep = isEmpty;
-      styleAst = _styleAst;
-    }
-    context.currentAnimateTimings = null;
-    return {
-      type: AnimationMetadataType.Animate,
-      timings: timingAst,
-      style: styleAst,
-      options: null
-    };
-  }
-  visitStyle(metadata, context) {
-    const ast = this._makeStyleAst(metadata, context);
-    this._validateStyleAst(ast, context);
-    return ast;
-  }
-  _makeStyleAst(metadata, context) {
-    const styles = [];
-    const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];
-    for (let styleTuple of metadataStyles) {
-      if (typeof styleTuple === "string") {
-        if (styleTuple === AUTO_STYLE) {
-          styles.push(styleTuple);
-        } else {
-          context.errors.push(invalidStyleValue(styleTuple));
-        }
-      } else {
-        styles.push(new Map(Object.entries(styleTuple)));
-      }
-    }
-    let containsDynamicStyles = false;
-    let collectedEasing = null;
-    styles.forEach((styleData) => {
-      if (styleData instanceof Map) {
-        if (styleData.has("easing")) {
-          collectedEasing = styleData.get("easing");
-          styleData.delete("easing");
-        }
-        if (!containsDynamicStyles) {
-          for (let value of styleData.values()) {
-            if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {
-              containsDynamicStyles = true;
-              break;
-            }
-          }
-        }
-      }
-    });
-    return {
-      type: AnimationMetadataType.Style,
-      styles,
-      easing: collectedEasing,
-      offset: metadata.offset,
-      containsDynamicStyles,
-      options: null
-    };
-  }
-  _validateStyleAst(ast, context) {
-    const timings = context.currentAnimateTimings;
-    let endTime = context.currentTime;
-    let startTime = context.currentTime;
-    if (timings && startTime > 0) {
-      startTime -= timings.duration + timings.delay;
-    }
-    ast.styles.forEach((tuple) => {
-      if (typeof tuple === "string") return;
-      tuple.forEach((value, prop) => {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          if (!this._driver.validateStyleProperty(prop)) {
-            tuple.delete(prop);
-            context.unsupportedCSSPropertiesFound.add(prop);
-            return;
-          }
-        }
-        const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);
-        const collectedEntry = collectedStyles.get(prop);
-        let updateCollectedStyle = true;
-        if (collectedEntry) {
-          if (startTime != endTime && startTime >= collectedEntry.startTime && endTime <= collectedEntry.endTime) {
-            context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));
-            updateCollectedStyle = false;
-          }
-          startTime = collectedEntry.startTime;
-        }
-        if (updateCollectedStyle) {
-          collectedStyles.set(prop, {
-            startTime,
-            endTime
-          });
-        }
-        if (context.options) {
-          validateStyleParams(value, context.options, context.errors);
-        }
-      });
-    });
-  }
-  visitKeyframes(metadata, context) {
-    const ast = {
-      type: AnimationMetadataType.Keyframes,
-      styles: [],
-      options: null
-    };
-    if (!context.currentAnimateTimings) {
-      context.errors.push(invalidKeyframes());
-      return ast;
-    }
-    const MAX_KEYFRAME_OFFSET = 1;
-    let totalKeyframesWithOffsets = 0;
-    const offsets = [];
-    let offsetsOutOfOrder = false;
-    let keyframesOutOfRange = false;
-    let previousOffset = 0;
-    const keyframes = metadata.steps.map((styles) => {
-      const style2 = this._makeStyleAst(styles, context);
-      let offsetVal = style2.offset != null ? style2.offset : consumeOffset(style2.styles);
-      let offset = 0;
-      if (offsetVal != null) {
-        totalKeyframesWithOffsets++;
-        offset = style2.offset = offsetVal;
-      }
-      keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;
-      offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;
-      previousOffset = offset;
-      offsets.push(offset);
-      return style2;
-    });
-    if (keyframesOutOfRange) {
-      context.errors.push(invalidOffset());
-    }
-    if (offsetsOutOfOrder) {
-      context.errors.push(keyframeOffsetsOutOfOrder());
-    }
-    const length = metadata.steps.length;
-    let generatedOffset = 0;
-    if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
-      context.errors.push(keyframesMissingOffsets());
-    } else if (totalKeyframesWithOffsets == 0) {
-      generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
-    }
-    const limit = length - 1;
-    const currentTime = context.currentTime;
-    const currentAnimateTimings = context.currentAnimateTimings;
-    const animateDuration = currentAnimateTimings.duration;
-    keyframes.forEach((kf, i) => {
-      const offset = generatedOffset > 0 ? i == limit ? 1 : generatedOffset * i : offsets[i];
-      const durationUpToThisFrame = offset * animateDuration;
-      context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;
-      currentAnimateTimings.duration = durationUpToThisFrame;
-      this._validateStyleAst(kf, context);
-      kf.offset = offset;
-      ast.styles.push(kf);
-    });
-    return ast;
-  }
-  visitReference(metadata, context) {
-    return {
-      type: AnimationMetadataType.Reference,
-      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitAnimateChild(metadata, context) {
-    context.depCount++;
-    return {
-      type: AnimationMetadataType.AnimateChild,
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitAnimateRef(metadata, context) {
-    return {
-      type: AnimationMetadataType.AnimateRef,
-      animation: this.visitReference(metadata.animation, context),
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitQuery(metadata, context) {
-    const parentSelector = context.currentQuerySelector;
-    const options = metadata.options || {};
-    context.queryCount++;
-    context.currentQuery = metadata;
-    const [selector, includeSelf] = normalizeSelector(metadata.selector);
-    context.currentQuerySelector = parentSelector.length ? parentSelector + " " + selector : selector;
-    getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, /* @__PURE__ */ new Map());
-    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
-    context.currentQuery = null;
-    context.currentQuerySelector = parentSelector;
-    return {
-      type: AnimationMetadataType.Query,
-      selector,
-      limit: options.limit || 0,
-      optional: !!options.optional,
-      includeSelf,
-      animation,
-      originalSelector: metadata.selector,
-      options: normalizeAnimationOptions(metadata.options)
-    };
-  }
-  visitStagger(metadata, context) {
-    if (!context.currentQuery) {
-      context.errors.push(invalidStagger());
-    }
-    const timings = metadata.timings === "full" ? {
-      duration: 0,
-      delay: 0,
-      easing: "full"
-    } : resolveTiming(metadata.timings, context.errors, true);
-    return {
-      type: AnimationMetadataType.Stagger,
-      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
-      timings,
-      options: null
-    };
-  }
-};
-function normalizeSelector(selector) {
-  const hasAmpersand = selector.split(/\s*,\s*/).find((token) => token == SELF_TOKEN) ? true : false;
-  if (hasAmpersand) {
-    selector = selector.replace(SELF_TOKEN_REGEX, "");
-  }
-  selector = selector.replace(/@\*/g, NG_TRIGGER_SELECTOR).replace(/@\w+/g, (match) => NG_TRIGGER_SELECTOR + "-" + match.slice(1)).replace(/:animating/g, NG_ANIMATING_SELECTOR);
-  return [selector, hasAmpersand];
-}
-function normalizeParams(obj) {
-  return obj ? __spreadValues({}, obj) : null;
-}
-var AnimationAstBuilderContext = class {
-  errors;
-  queryCount = 0;
-  depCount = 0;
-  currentTransition = null;
-  currentQuery = null;
-  currentQuerySelector = null;
-  currentAnimateTimings = null;
-  currentTime = 0;
-  collectedStyles = /* @__PURE__ */ new Map();
-  options = null;
-  unsupportedCSSPropertiesFound = /* @__PURE__ */ new Set();
-  constructor(errors) {
-    this.errors = errors;
-  }
-};
-function consumeOffset(styles) {
-  if (typeof styles == "string") return null;
-  let offset = null;
-  if (Array.isArray(styles)) {
-    styles.forEach((styleTuple) => {
-      if (styleTuple instanceof Map && styleTuple.has("offset")) {
-        const obj = styleTuple;
-        offset = parseFloat(obj.get("offset"));
-        obj.delete("offset");
-      }
-    });
-  } else if (styles instanceof Map && styles.has("offset")) {
-    const obj = styles;
-    offset = parseFloat(obj.get("offset"));
-    obj.delete("offset");
-  }
-  return offset;
-}
-function constructTimingAst(value, errors) {
-  if (value.hasOwnProperty("duration")) {
-    return value;
-  }
-  if (typeof value == "number") {
-    const duration = resolveTiming(value, errors).duration;
-    return makeTimingAst(duration, 0, "");
-  }
-  const strValue = value;
-  const isDynamic = strValue.split(/\s+/).some((v) => v.charAt(0) == "{" && v.charAt(1) == "{");
-  if (isDynamic) {
-    const ast = makeTimingAst(0, 0, "");
-    ast.dynamic = true;
-    ast.strValue = strValue;
-    return ast;
-  }
-  const timings = resolveTiming(strValue, errors);
-  return makeTimingAst(timings.duration, timings.delay, timings.easing);
-}
-function normalizeAnimationOptions(options) {
-  if (options) {
-    options = __spreadValues({}, options);
-    if (options["params"]) {
-      options["params"] = normalizeParams(options["params"]);
-    }
-  } else {
-    options = {};
-  }
-  return options;
-}
-function makeTimingAst(duration, delay, easing) {
-  return {
-    duration,
-    delay,
-    easing
-  };
-}
-function createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {
-  return {
-    type: 1,
-    element,
-    keyframes,
-    preStyleProps,
-    postStyleProps,
-    duration,
-    delay,
-    totalTime: duration + delay,
-    easing,
-    subTimeline
-  };
-}
-var ElementInstructionMap = class {
-  _map = /* @__PURE__ */ new Map();
-  get(element) {
-    return this._map.get(element) || [];
-  }
-  append(element, instructions) {
-    let existingInstructions = this._map.get(element);
-    if (!existingInstructions) {
-      this._map.set(element, existingInstructions = []);
-    }
-    existingInstructions.push(...instructions);
-  }
-  has(element) {
-    return this._map.has(element);
-  }
-  clear() {
-    this._map.clear();
-  }
-};
-var ONE_FRAME_IN_MILLISECONDS = 1;
-var ENTER_TOKEN = ":enter";
-var ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, "g");
-var LEAVE_TOKEN = ":leave";
-var LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, "g");
-function buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = /* @__PURE__ */ new Map(), finalStyles = /* @__PURE__ */ new Map(), options, subInstructions, errors = []) {
-  return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);
-}
-var AnimationTimelineBuilderVisitor = class {
-  buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {
-    subInstructions = subInstructions || new ElementInstructionMap();
-    const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);
-    context.options = options;
-    const delay = options.delay ? resolveTimingValue(options.delay) : 0;
-    context.currentTimeline.delayNextStep(delay);
-    context.currentTimeline.setStyles([startingStyles], null, context.errors, options);
-    visitDslNode(this, ast, context);
-    const timelines = context.timelines.filter((timeline) => timeline.containsAnimation());
-    if (timelines.length && finalStyles.size) {
-      let lastRootTimeline;
-      for (let i = timelines.length - 1; i >= 0; i--) {
-        const timeline = timelines[i];
-        if (timeline.element === rootElement) {
-          lastRootTimeline = timeline;
-          break;
-        }
-      }
-      if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {
-        lastRootTimeline.setStyles([finalStyles], null, context.errors, options);
-      }
-    }
-    return timelines.length ? timelines.map((timeline) => timeline.buildKeyframes()) : [createTimelineInstruction(rootElement, [], [], [], 0, delay, "", false)];
-  }
-  visitTrigger(ast, context) {
-  }
-  visitState(ast, context) {
-  }
-  visitTransition(ast, context) {
-  }
-  visitAnimateChild(ast, context) {
-    const elementInstructions = context.subInstructions.get(context.element);
-    if (elementInstructions) {
-      const innerContext = context.createSubContext(ast.options);
-      const startTime = context.currentTimeline.currentTime;
-      const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);
-      if (startTime != endTime) {
-        context.transformIntoNewTimeline(endTime);
-      }
-    }
-    context.previousNode = ast;
-  }
-  visitAnimateRef(ast, context) {
-    const innerContext = context.createSubContext(ast.options);
-    innerContext.transformIntoNewTimeline();
-    this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);
-    this.visitReference(ast.animation, innerContext);
-    context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);
-    context.previousNode = ast;
-  }
-  _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {
-    for (const animationRefOptions of animationsRefsOptions) {
-      const animationDelay = animationRefOptions?.delay;
-      if (animationDelay) {
-        const animationDelayValue = typeof animationDelay === "number" ? animationDelay : resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors));
-        innerContext.delayNextStep(animationDelayValue);
-      }
-    }
-  }
-  _visitSubInstructions(instructions, context, options) {
-    const startTime = context.currentTimeline.currentTime;
-    let furthestTime = startTime;
-    const duration = options.duration != null ? resolveTimingValue(options.duration) : null;
-    const delay = options.delay != null ? resolveTimingValue(options.delay) : null;
-    if (duration !== 0) {
-      instructions.forEach((instruction) => {
-        const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);
-        furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);
-      });
-    }
-    return furthestTime;
-  }
-  visitReference(ast, context) {
-    context.updateOptions(ast.options, true);
-    visitDslNode(this, ast.animation, context);
-    context.previousNode = ast;
-  }
-  visitSequence(ast, context) {
-    const subContextCount = context.subContextCount;
-    let ctx = context;
-    const options = ast.options;
-    if (options && (options.params || options.delay)) {
-      ctx = context.createSubContext(options);
-      ctx.transformIntoNewTimeline();
-      if (options.delay != null) {
-        if (ctx.previousNode.type == AnimationMetadataType.Style) {
-          ctx.currentTimeline.snapshotCurrentStyles();
-          ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-        }
-        const delay = resolveTimingValue(options.delay);
-        ctx.delayNextStep(delay);
-      }
-    }
-    if (ast.steps.length) {
-      ast.steps.forEach((s) => visitDslNode(this, s, ctx));
-      ctx.currentTimeline.applyStylesToKeyframe();
-      if (ctx.subContextCount > subContextCount) {
-        ctx.transformIntoNewTimeline();
-      }
-    }
-    context.previousNode = ast;
-  }
-  visitGroup(ast, context) {
-    const innerTimelines = [];
-    let furthestTime = context.currentTimeline.currentTime;
-    const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;
-    ast.steps.forEach((s) => {
-      const innerContext = context.createSubContext(ast.options);
-      if (delay) {
-        innerContext.delayNextStep(delay);
-      }
-      visitDslNode(this, s, innerContext);
-      furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);
-      innerTimelines.push(innerContext.currentTimeline);
-    });
-    innerTimelines.forEach((timeline) => context.currentTimeline.mergeTimelineCollectedStyles(timeline));
-    context.transformIntoNewTimeline(furthestTime);
-    context.previousNode = ast;
-  }
-  _visitTiming(ast, context) {
-    if (ast.dynamic) {
-      const strValue = ast.strValue;
-      const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;
-      return resolveTiming(timingValue, context.errors);
-    } else {
-      return {
-        duration: ast.duration,
-        delay: ast.delay,
-        easing: ast.easing
-      };
-    }
-  }
-  visitAnimate(ast, context) {
-    const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);
-    const timeline = context.currentTimeline;
-    if (timings.delay) {
-      context.incrementTime(timings.delay);
-      timeline.snapshotCurrentStyles();
-    }
-    const style2 = ast.style;
-    if (style2.type == AnimationMetadataType.Keyframes) {
-      this.visitKeyframes(style2, context);
-    } else {
-      context.incrementTime(timings.duration);
-      this.visitStyle(style2, context);
-      timeline.applyStylesToKeyframe();
-    }
-    context.currentAnimateTimings = null;
-    context.previousNode = ast;
-  }
-  visitStyle(ast, context) {
-    const timeline = context.currentTimeline;
-    const timings = context.currentAnimateTimings;
-    if (!timings && timeline.hasCurrentStyleProperties()) {
-      timeline.forwardFrame();
-    }
-    const easing = timings && timings.easing || ast.easing;
-    if (ast.isEmptyStep) {
-      timeline.applyEmptyStep(easing);
-    } else {
-      timeline.setStyles(ast.styles, easing, context.errors, context.options);
-    }
-    context.previousNode = ast;
-  }
-  visitKeyframes(ast, context) {
-    const currentAnimateTimings = context.currentAnimateTimings;
-    const startTime = context.currentTimeline.duration;
-    const duration = currentAnimateTimings.duration;
-    const innerContext = context.createSubContext();
-    const innerTimeline = innerContext.currentTimeline;
-    innerTimeline.easing = currentAnimateTimings.easing;
-    ast.styles.forEach((step) => {
-      const offset = step.offset || 0;
-      innerTimeline.forwardTime(offset * duration);
-      innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);
-      innerTimeline.applyStylesToKeyframe();
-    });
-    context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);
-    context.transformIntoNewTimeline(startTime + duration);
-    context.previousNode = ast;
-  }
-  visitQuery(ast, context) {
-    const startTime = context.currentTimeline.currentTime;
-    const options = ast.options || {};
-    const delay = options.delay ? resolveTimingValue(options.delay) : 0;
-    if (delay && (context.previousNode.type === AnimationMetadataType.Style || startTime == 0 && context.currentTimeline.hasCurrentStyleProperties())) {
-      context.currentTimeline.snapshotCurrentStyles();
-      context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-    }
-    let furthestTime = startTime;
-    const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);
-    context.currentQueryTotal = elms.length;
-    let sameElementTimeline = null;
-    elms.forEach((element, i) => {
-      context.currentQueryIndex = i;
-      const innerContext = context.createSubContext(ast.options, element);
-      if (delay) {
-        innerContext.delayNextStep(delay);
-      }
-      if (element === context.element) {
-        sameElementTimeline = innerContext.currentTimeline;
-      }
-      visitDslNode(this, ast.animation, innerContext);
-      innerContext.currentTimeline.applyStylesToKeyframe();
-      const endTime = innerContext.currentTimeline.currentTime;
-      furthestTime = Math.max(furthestTime, endTime);
-    });
-    context.currentQueryIndex = 0;
-    context.currentQueryTotal = 0;
-    context.transformIntoNewTimeline(furthestTime);
-    if (sameElementTimeline) {
-      context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);
-      context.currentTimeline.snapshotCurrentStyles();
-    }
-    context.previousNode = ast;
-  }
-  visitStagger(ast, context) {
-    const parentContext = context.parentContext;
-    const tl = context.currentTimeline;
-    const timings = ast.timings;
-    const duration = Math.abs(timings.duration);
-    const maxTime = duration * (context.currentQueryTotal - 1);
-    let delay = duration * context.currentQueryIndex;
-    let staggerTransformer = timings.duration < 0 ? "reverse" : timings.easing;
-    switch (staggerTransformer) {
-      case "reverse":
-        delay = maxTime - delay;
-        break;
-      case "full":
-        delay = parentContext.currentStaggerTime;
-        break;
-    }
-    const timeline = context.currentTimeline;
-    if (delay) {
-      timeline.delayNextStep(delay);
-    }
-    const startingTime = timeline.currentTime;
-    visitDslNode(this, ast.animation, context);
-    context.previousNode = ast;
-    parentContext.currentStaggerTime = tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime);
-  }
-};
-var DEFAULT_NOOP_PREVIOUS_NODE = {};
-var AnimationTimelineContext = class _AnimationTimelineContext {
-  _driver;
-  element;
-  subInstructions;
-  _enterClassName;
-  _leaveClassName;
-  errors;
-  timelines;
-  parentContext = null;
-  currentTimeline;
-  currentAnimateTimings = null;
-  previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-  subContextCount = 0;
-  options = {};
-  currentQueryIndex = 0;
-  currentQueryTotal = 0;
-  currentStaggerTime = 0;
-  constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {
-    this._driver = _driver;
-    this.element = element;
-    this.subInstructions = subInstructions;
-    this._enterClassName = _enterClassName;
-    this._leaveClassName = _leaveClassName;
-    this.errors = errors;
-    this.timelines = timelines;
-    this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);
-    timelines.push(this.currentTimeline);
-  }
-  get params() {
-    return this.options.params;
-  }
-  updateOptions(options, skipIfExists) {
-    if (!options) return;
-    const newOptions = options;
-    let optionsToUpdate = this.options;
-    if (newOptions.duration != null) {
-      optionsToUpdate.duration = resolveTimingValue(newOptions.duration);
-    }
-    if (newOptions.delay != null) {
-      optionsToUpdate.delay = resolveTimingValue(newOptions.delay);
-    }
-    const newParams = newOptions.params;
-    if (newParams) {
-      let paramsToUpdate = optionsToUpdate.params;
-      if (!paramsToUpdate) {
-        paramsToUpdate = this.options.params = {};
-      }
-      Object.keys(newParams).forEach((name) => {
-        if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {
-          paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);
-        }
-      });
-    }
-  }
-  _copyOptions() {
-    const options = {};
-    if (this.options) {
-      const oldParams = this.options.params;
-      if (oldParams) {
-        const params = options["params"] = {};
-        Object.keys(oldParams).forEach((name) => {
-          params[name] = oldParams[name];
-        });
-      }
-    }
-    return options;
-  }
-  createSubContext(options = null, element, newTime) {
-    const target = element || this.element;
-    const context = new _AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));
-    context.previousNode = this.previousNode;
-    context.currentAnimateTimings = this.currentAnimateTimings;
-    context.options = this._copyOptions();
-    context.updateOptions(options);
-    context.currentQueryIndex = this.currentQueryIndex;
-    context.currentQueryTotal = this.currentQueryTotal;
-    context.parentContext = this;
-    this.subContextCount++;
-    return context;
-  }
-  transformIntoNewTimeline(newTime) {
-    this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
-    this.currentTimeline = this.currentTimeline.fork(this.element, newTime);
-    this.timelines.push(this.currentTimeline);
-    return this.currentTimeline;
-  }
-  appendInstructionToTimeline(instruction, duration, delay) {
-    const updatedTimings = {
-      duration: duration != null ? duration : instruction.duration,
-      delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,
-      easing: ""
-    };
-    const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);
-    this.timelines.push(builder);
-    return updatedTimings;
-  }
-  incrementTime(time) {
-    this.currentTimeline.forwardTime(this.currentTimeline.duration + time);
-  }
-  delayNextStep(delay) {
-    if (delay > 0) {
-      this.currentTimeline.delayNextStep(delay);
-    }
-  }
-  invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {
-    let results = [];
-    if (includeSelf) {
-      results.push(this.element);
-    }
-    if (selector.length > 0) {
-      selector = selector.replace(ENTER_TOKEN_REGEX, "." + this._enterClassName);
-      selector = selector.replace(LEAVE_TOKEN_REGEX, "." + this._leaveClassName);
-      const multi = limit != 1;
-      let elements = this._driver.query(this.element, selector, multi);
-      if (limit !== 0) {
-        elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) : elements.slice(0, limit);
-      }
-      results.push(...elements);
-    }
-    if (!optional && results.length == 0) {
-      errors.push(invalidQuery(originalSelector));
-    }
-    return results;
-  }
-};
-var TimelineBuilder = class _TimelineBuilder {
-  _driver;
-  element;
-  startTime;
-  _elementTimelineStylesLookup;
-  duration = 0;
-  easing = null;
-  _previousKeyframe = /* @__PURE__ */ new Map();
-  _currentKeyframe = /* @__PURE__ */ new Map();
-  _keyframes = /* @__PURE__ */ new Map();
-  _styleSummary = /* @__PURE__ */ new Map();
-  _localTimelineStyles = /* @__PURE__ */ new Map();
-  _globalTimelineStyles;
-  _pendingStyles = /* @__PURE__ */ new Map();
-  _backFill = /* @__PURE__ */ new Map();
-  _currentEmptyStepKeyframe = null;
-  constructor(_driver, element, startTime, _elementTimelineStylesLookup) {
-    this._driver = _driver;
-    this.element = element;
-    this.startTime = startTime;
-    this._elementTimelineStylesLookup = _elementTimelineStylesLookup;
-    if (!this._elementTimelineStylesLookup) {
-      this._elementTimelineStylesLookup = /* @__PURE__ */ new Map();
-    }
-    this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);
-    if (!this._globalTimelineStyles) {
-      this._globalTimelineStyles = this._localTimelineStyles;
-      this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);
-    }
-    this._loadKeyframe();
-  }
-  containsAnimation() {
-    switch (this._keyframes.size) {
-      case 0:
-        return false;
-      case 1:
-        return this.hasCurrentStyleProperties();
-      default:
-        return true;
-    }
-  }
-  hasCurrentStyleProperties() {
-    return this._currentKeyframe.size > 0;
-  }
-  get currentTime() {
-    return this.startTime + this.duration;
-  }
-  delayNextStep(delay) {
-    const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;
-    if (this.duration || hasPreStyleStep) {
-      this.forwardTime(this.currentTime + delay);
-      if (hasPreStyleStep) {
-        this.snapshotCurrentStyles();
-      }
-    } else {
-      this.startTime += delay;
-    }
-  }
-  fork(element, currentTime) {
-    this.applyStylesToKeyframe();
-    return new _TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);
-  }
-  _loadKeyframe() {
-    if (this._currentKeyframe) {
-      this._previousKeyframe = this._currentKeyframe;
-    }
-    this._currentKeyframe = this._keyframes.get(this.duration);
-    if (!this._currentKeyframe) {
-      this._currentKeyframe = /* @__PURE__ */ new Map();
-      this._keyframes.set(this.duration, this._currentKeyframe);
-    }
-  }
-  forwardFrame() {
-    this.duration += ONE_FRAME_IN_MILLISECONDS;
-    this._loadKeyframe();
-  }
-  forwardTime(time) {
-    this.applyStylesToKeyframe();
-    this.duration = time;
-    this._loadKeyframe();
-  }
-  _updateStyle(prop, value) {
-    this._localTimelineStyles.set(prop, value);
-    this._globalTimelineStyles.set(prop, value);
-    this._styleSummary.set(prop, {
-      time: this.currentTime,
-      value
-    });
-  }
-  allowOnlyTimelineStyles() {
-    return this._currentEmptyStepKeyframe !== this._currentKeyframe;
-  }
-  applyEmptyStep(easing) {
-    if (easing) {
-      this._previousKeyframe.set("easing", easing);
-    }
-    for (let [prop, value] of this._globalTimelineStyles) {
-      this._backFill.set(prop, value || AUTO_STYLE);
-      this._currentKeyframe.set(prop, AUTO_STYLE);
-    }
-    this._currentEmptyStepKeyframe = this._currentKeyframe;
-  }
-  setStyles(input, easing, errors, options) {
-    if (easing) {
-      this._previousKeyframe.set("easing", easing);
-    }
-    const params = options && options.params || {};
-    const styles = flattenStyles(input, this._globalTimelineStyles);
-    for (let [prop, value] of styles) {
-      const val = interpolateParams(value, params, errors);
-      this._pendingStyles.set(prop, val);
-      if (!this._localTimelineStyles.has(prop)) {
-        this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? AUTO_STYLE);
-      }
-      this._updateStyle(prop, val);
-    }
-  }
-  applyStylesToKeyframe() {
-    if (this._pendingStyles.size == 0) return;
-    this._pendingStyles.forEach((val, prop) => {
-      this._currentKeyframe.set(prop, val);
-    });
-    this._pendingStyles.clear();
-    this._localTimelineStyles.forEach((val, prop) => {
-      if (!this._currentKeyframe.has(prop)) {
-        this._currentKeyframe.set(prop, val);
-      }
-    });
-  }
-  snapshotCurrentStyles() {
-    for (let [prop, val] of this._localTimelineStyles) {
-      this._pendingStyles.set(prop, val);
-      this._updateStyle(prop, val);
-    }
-  }
-  getFinalKeyframe() {
-    return this._keyframes.get(this.duration);
-  }
-  get properties() {
-    const properties = [];
-    for (let prop in this._currentKeyframe) {
-      properties.push(prop);
-    }
-    return properties;
-  }
-  mergeTimelineCollectedStyles(timeline) {
-    timeline._styleSummary.forEach((details1, prop) => {
-      const details0 = this._styleSummary.get(prop);
-      if (!details0 || details1.time > details0.time) {
-        this._updateStyle(prop, details1.value);
-      }
-    });
-  }
-  buildKeyframes() {
-    this.applyStylesToKeyframe();
-    const preStyleProps = /* @__PURE__ */ new Set();
-    const postStyleProps = /* @__PURE__ */ new Set();
-    const isEmpty = this._keyframes.size === 1 && this.duration === 0;
-    let finalKeyframes = [];
-    this._keyframes.forEach((keyframe, time) => {
-      const finalKeyframe = new Map([...this._backFill, ...keyframe]);
-      finalKeyframe.forEach((value, prop) => {
-        if (value === ɵPRE_STYLE) {
-          preStyleProps.add(prop);
-        } else if (value === AUTO_STYLE) {
-          postStyleProps.add(prop);
-        }
-      });
-      if (!isEmpty) {
-        finalKeyframe.set("offset", time / this.duration);
-      }
-      finalKeyframes.push(finalKeyframe);
-    });
-    const preProps = [...preStyleProps.values()];
-    const postProps = [...postStyleProps.values()];
-    if (isEmpty) {
-      const kf0 = finalKeyframes[0];
-      const kf1 = new Map(kf0);
-      kf0.set("offset", 0);
-      kf1.set("offset", 1);
-      finalKeyframes = [kf0, kf1];
-    }
-    return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);
-  }
-};
-var SubTimelineBuilder = class extends TimelineBuilder {
-  keyframes;
-  preStyleProps;
-  postStyleProps;
-  _stretchStartingKeyframe;
-  timings;
-  constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {
-    super(driver, element, timings.delay);
-    this.keyframes = keyframes;
-    this.preStyleProps = preStyleProps;
-    this.postStyleProps = postStyleProps;
-    this._stretchStartingKeyframe = _stretchStartingKeyframe;
-    this.timings = {
-      duration: timings.duration,
-      delay: timings.delay,
-      easing: timings.easing
-    };
-  }
-  containsAnimation() {
-    return this.keyframes.length > 1;
-  }
-  buildKeyframes() {
-    let keyframes = this.keyframes;
-    let {
-      delay,
-      duration,
-      easing
-    } = this.timings;
-    if (this._stretchStartingKeyframe && delay) {
-      const newKeyframes = [];
-      const totalTime = duration + delay;
-      const startingGap = delay / totalTime;
-      const newFirstKeyframe = new Map(keyframes[0]);
-      newFirstKeyframe.set("offset", 0);
-      newKeyframes.push(newFirstKeyframe);
-      const oldFirstKeyframe = new Map(keyframes[0]);
-      oldFirstKeyframe.set("offset", roundOffset(startingGap));
-      newKeyframes.push(oldFirstKeyframe);
-      const limit = keyframes.length - 1;
-      for (let i = 1; i <= limit; i++) {
-        let kf = new Map(keyframes[i]);
-        const oldOffset = kf.get("offset");
-        const timeAtKeyframe = delay + oldOffset * duration;
-        kf.set("offset", roundOffset(timeAtKeyframe / totalTime));
-        newKeyframes.push(kf);
-      }
-      duration = totalTime;
-      delay = 0;
-      easing = "";
-      keyframes = newKeyframes;
-    }
-    return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);
-  }
-};
-function roundOffset(offset, decimalPoints = 3) {
-  const mult = Math.pow(10, decimalPoints - 1);
-  return Math.round(offset * mult) / mult;
-}
-function flattenStyles(input, allStyles) {
-  const styles = /* @__PURE__ */ new Map();
-  let allProperties;
-  input.forEach((token) => {
-    if (token === "*") {
-      allProperties ??= allStyles.keys();
-      for (let prop of allProperties) {
-        styles.set(prop, AUTO_STYLE);
-      }
-    } else {
-      for (let [prop, val] of token) {
-        styles.set(prop, val);
-      }
-    }
-  });
-  return styles;
-}
-function createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {
-  return {
-    type: 0,
-    element,
-    triggerName,
-    isRemovalTransition,
-    fromState,
-    fromStyles,
-    toState,
-    toStyles,
-    timelines,
-    queriedElements,
-    preStyleProps,
-    postStyleProps,
-    totalTime,
-    errors
-  };
-}
-var EMPTY_OBJECT = {};
-var AnimationTransitionFactory = class {
-  _triggerName;
-  ast;
-  _stateStyles;
-  constructor(_triggerName, ast, _stateStyles) {
-    this._triggerName = _triggerName;
-    this.ast = ast;
-    this._stateStyles = _stateStyles;
-  }
-  match(currentState, nextState, element, params) {
-    return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);
-  }
-  buildStyles(stateName, params, errors) {
-    let styler = this._stateStyles.get("*");
-    if (stateName !== void 0) {
-      styler = this._stateStyles.get(stateName?.toString()) || styler;
-    }
-    return styler ? styler.buildStyles(params, errors) : /* @__PURE__ */ new Map();
-  }
-  build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {
-    const errors = [];
-    const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;
-    const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;
-    const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);
-    const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;
-    const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);
-    const queriedElements = /* @__PURE__ */ new Set();
-    const preStyleMap = /* @__PURE__ */ new Map();
-    const postStyleMap = /* @__PURE__ */ new Map();
-    const isRemoval = nextState === "void";
-    const animationOptions = {
-      params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),
-      delay: this.ast.options?.delay
-    };
-    const timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);
-    let totalTime = 0;
-    timelines.forEach((tl) => {
-      totalTime = Math.max(tl.duration + tl.delay, totalTime);
-    });
-    if (errors.length) {
-      return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);
-    }
-    timelines.forEach((tl) => {
-      const elm = tl.element;
-      const preProps = getOrSetDefaultValue(preStyleMap, elm, /* @__PURE__ */ new Set());
-      tl.preStyleProps.forEach((prop) => preProps.add(prop));
-      const postProps = getOrSetDefaultValue(postStyleMap, elm, /* @__PURE__ */ new Set());
-      tl.postStyleProps.forEach((prop) => postProps.add(prop));
-      if (elm !== element) {
-        queriedElements.add(elm);
-      }
-    });
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      checkNonAnimatableInTimelines(timelines, this._triggerName, driver);
-    }
-    return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, [...queriedElements.values()], preStyleMap, postStyleMap, totalTime);
-  }
-};
-function checkNonAnimatableInTimelines(timelines, triggerName, driver) {
-  if (!driver.validateAnimatableStyleProperty) {
-    return;
-  }
-  const allowedNonAnimatableProps = /* @__PURE__ */ new Set([
-    // 'easing' is a utility/synthetic prop we use to represent
-    // easing functions, it represents a property of the animation
-    // which is not animatable but different values can be used
-    // in different steps
-    "easing"
-  ]);
-  const invalidNonAnimatableProps = /* @__PURE__ */ new Set();
-  timelines.forEach(({
-    keyframes
-  }) => {
-    const nonAnimatablePropsInitialValues = /* @__PURE__ */ new Map();
-    keyframes.forEach((keyframe) => {
-      const entriesToCheck = Array.from(keyframe.entries()).filter(([prop]) => !allowedNonAnimatableProps.has(prop));
-      for (const [prop, value] of entriesToCheck) {
-        if (!driver.validateAnimatableStyleProperty(prop)) {
-          if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {
-            const propInitialValue = nonAnimatablePropsInitialValues.get(prop);
-            if (propInitialValue !== value) {
-              invalidNonAnimatableProps.add(prop);
-            }
-          } else {
-            nonAnimatablePropsInitialValues.set(prop, value);
-          }
-        }
-      }
-    });
-  });
-  if (invalidNonAnimatableProps.size > 0) {
-    console.warn(`Warning: The animation trigger "${triggerName}" is attempting to animate the following not animatable properties: ` + Array.from(invalidNonAnimatableProps).join(", ") + "\n(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)");
-  }
-}
-function oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {
-  return matchFns.some((fn) => fn(currentState, nextState, element, params));
-}
-function applyParamDefaults(userParams, defaults) {
-  const result = __spreadValues({}, defaults);
-  Object.entries(userParams).forEach(([key, value]) => {
-    if (value != null) {
-      result[key] = value;
-    }
-  });
-  return result;
-}
-var AnimationStateStyles = class {
-  styles;
-  defaultParams;
-  normalizer;
-  constructor(styles, defaultParams, normalizer) {
-    this.styles = styles;
-    this.defaultParams = defaultParams;
-    this.normalizer = normalizer;
-  }
-  buildStyles(params, errors) {
-    const finalStyles = /* @__PURE__ */ new Map();
-    const combinedParams = applyParamDefaults(params, this.defaultParams);
-    this.styles.styles.forEach((value) => {
-      if (typeof value !== "string") {
-        value.forEach((val, prop) => {
-          if (val) {
-            val = interpolateParams(val, combinedParams, errors);
-          }
-          const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);
-          val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);
-          finalStyles.set(prop, val);
-        });
-      }
-    });
-    return finalStyles;
-  }
-};
-function buildTrigger(name, ast, normalizer) {
-  return new AnimationTrigger(name, ast, normalizer);
-}
-var AnimationTrigger = class {
-  name;
-  ast;
-  _normalizer;
-  transitionFactories = [];
-  fallbackTransition;
-  states = /* @__PURE__ */ new Map();
-  constructor(name, ast, _normalizer) {
-    this.name = name;
-    this.ast = ast;
-    this._normalizer = _normalizer;
-    ast.states.forEach((ast2) => {
-      const defaultParams = ast2.options && ast2.options.params || {};
-      this.states.set(ast2.name, new AnimationStateStyles(ast2.style, defaultParams, _normalizer));
-    });
-    balanceProperties(this.states, "true", "1");
-    balanceProperties(this.states, "false", "0");
-    ast.transitions.forEach((ast2) => {
-      this.transitionFactories.push(new AnimationTransitionFactory(name, ast2, this.states));
-    });
-    this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);
-  }
-  get containsQueries() {
-    return this.ast.queryCount > 0;
-  }
-  matchTransition(currentState, nextState, element, params) {
-    const entry = this.transitionFactories.find((f) => f.match(currentState, nextState, element, params));
-    return entry || null;
-  }
-  matchStyles(currentState, params, errors) {
-    return this.fallbackTransition.buildStyles(currentState, params, errors);
-  }
-};
-function createFallbackTransition(triggerName, states, normalizer) {
-  const matchers = [(fromState, toState) => true];
-  const animation = {
-    type: AnimationMetadataType.Sequence,
-    steps: [],
-    options: null
-  };
-  const transition = {
-    type: AnimationMetadataType.Transition,
-    animation,
-    matchers,
-    options: null,
-    queryCount: 0,
-    depCount: 0
-  };
-  return new AnimationTransitionFactory(triggerName, transition, states);
-}
-function balanceProperties(stateMap, key1, key2) {
-  if (stateMap.has(key1)) {
-    if (!stateMap.has(key2)) {
-      stateMap.set(key2, stateMap.get(key1));
-    }
-  } else if (stateMap.has(key2)) {
-    stateMap.set(key1, stateMap.get(key2));
-  }
-}
-var EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();
-var TimelineAnimationEngine = class {
-  bodyNode;
-  _driver;
-  _normalizer;
-  _animations = /* @__PURE__ */ new Map();
-  _playersById = /* @__PURE__ */ new Map();
-  players = [];
-  constructor(bodyNode, _driver, _normalizer) {
-    this.bodyNode = bodyNode;
-    this._driver = _driver;
-    this._normalizer = _normalizer;
-  }
-  register(id, metadata) {
-    const errors = [];
-    const warnings = [];
-    const ast = buildAnimationAst(this._driver, metadata, errors, warnings);
-    if (errors.length) {
-      throw registerFailed(errors);
-    } else {
-      if (warnings.length) {
-        warnRegister(warnings);
-      }
-      this._animations.set(id, ast);
-    }
-  }
-  _buildPlayer(i, preStyles, postStyles) {
-    const element = i.element;
-    const keyframes = normalizeKeyframes$1(this._normalizer, i.keyframes, preStyles, postStyles);
-    return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);
-  }
-  create(id, element, options = {}) {
-    const errors = [];
-    const ast = this._animations.get(id);
-    let instructions;
-    const autoStylesMap = /* @__PURE__ */ new Map();
-    if (ast) {
-      instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, /* @__PURE__ */ new Map(), /* @__PURE__ */ new Map(), options, EMPTY_INSTRUCTION_MAP, errors);
-      instructions.forEach((inst) => {
-        const styles = getOrSetDefaultValue(autoStylesMap, inst.element, /* @__PURE__ */ new Map());
-        inst.postStyleProps.forEach((prop) => styles.set(prop, null));
-      });
-    } else {
-      errors.push(missingOrDestroyedAnimation());
-      instructions = [];
-    }
-    if (errors.length) {
-      throw createAnimationFailed(errors);
-    }
-    autoStylesMap.forEach((styles, element2) => {
-      styles.forEach((_, prop) => {
-        styles.set(prop, this._driver.computeStyle(element2, prop, AUTO_STYLE));
-      });
-    });
-    const players = instructions.map((i) => {
-      const styles = autoStylesMap.get(i.element);
-      return this._buildPlayer(i, /* @__PURE__ */ new Map(), styles);
-    });
-    const player = optimizeGroupPlayer(players);
-    this._playersById.set(id, player);
-    player.onDestroy(() => this.destroy(id));
-    this.players.push(player);
-    return player;
-  }
-  destroy(id) {
-    const player = this._getPlayer(id);
-    player.destroy();
-    this._playersById.delete(id);
-    const index = this.players.indexOf(player);
-    if (index >= 0) {
-      this.players.splice(index, 1);
-    }
-  }
-  _getPlayer(id) {
-    const player = this._playersById.get(id);
-    if (!player) {
-      throw missingPlayer(id);
-    }
-    return player;
-  }
-  listen(id, element, eventName, callback) {
-    const baseEvent = makeAnimationEvent(element, "", "", "");
-    listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);
-    return () => {
-    };
-  }
-  command(id, element, command, args) {
-    if (command == "register") {
-      this.register(id, args[0]);
-      return;
-    }
-    if (command == "create") {
-      const options = args[0] || {};
-      this.create(id, element, options);
-      return;
-    }
-    const player = this._getPlayer(id);
-    switch (command) {
-      case "play":
-        player.play();
-        break;
-      case "pause":
-        player.pause();
-        break;
-      case "reset":
-        player.reset();
-        break;
-      case "restart":
-        player.restart();
-        break;
-      case "finish":
-        player.finish();
-        break;
-      case "init":
-        player.init();
-        break;
-      case "setPosition":
-        player.setPosition(parseFloat(args[0]));
-        break;
-      case "destroy":
-        this.destroy(id);
-        break;
-    }
-  }
-};
-var QUEUED_CLASSNAME = "ng-animate-queued";
-var QUEUED_SELECTOR = ".ng-animate-queued";
-var DISABLED_CLASSNAME = "ng-animate-disabled";
-var DISABLED_SELECTOR = ".ng-animate-disabled";
-var STAR_CLASSNAME = "ng-star-inserted";
-var STAR_SELECTOR = ".ng-star-inserted";
-var EMPTY_PLAYER_ARRAY = [];
-var NULL_REMOVAL_STATE = {
-  namespaceId: "",
-  setForRemoval: false,
-  setForMove: false,
-  hasAnimation: false,
-  removedBeforeQueried: false
-};
-var NULL_REMOVED_QUERIED_STATE = {
-  namespaceId: "",
-  setForMove: false,
-  setForRemoval: false,
-  hasAnimation: false,
-  removedBeforeQueried: true
-};
-var REMOVAL_FLAG = "__ng_removed";
-var StateValue = class {
-  namespaceId;
-  value;
-  options;
-  get params() {
-    return this.options.params;
-  }
-  constructor(input, namespaceId = "") {
-    this.namespaceId = namespaceId;
-    const isObj = input && input.hasOwnProperty("value");
-    const value = isObj ? input["value"] : input;
-    this.value = normalizeTriggerValue(value);
-    if (isObj) {
-      const _a = input, {
-        value: value2
-      } = _a, options = __objRest(_a, [
-        "value"
-      ]);
-      this.options = options;
-    } else {
-      this.options = {};
-    }
-    if (!this.options.params) {
-      this.options.params = {};
-    }
-  }
-  absorbOptions(options) {
-    const newParams = options.params;
-    if (newParams) {
-      const oldParams = this.options.params;
-      Object.keys(newParams).forEach((prop) => {
-        if (oldParams[prop] == null) {
-          oldParams[prop] = newParams[prop];
-        }
-      });
-    }
-  }
-};
-var VOID_VALUE = "void";
-var DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);
-var AnimationTransitionNamespace = class {
-  id;
-  hostElement;
-  _engine;
-  players = [];
-  _triggers = /* @__PURE__ */ new Map();
-  _queue = [];
-  _elementListeners = /* @__PURE__ */ new Map();
-  _hostClassName;
-  constructor(id, hostElement, _engine) {
-    this.id = id;
-    this.hostElement = hostElement;
-    this._engine = _engine;
-    this._hostClassName = "ng-tns-" + id;
-    addClass(hostElement, this._hostClassName);
-  }
-  listen(element, name, phase, callback) {
-    if (!this._triggers.has(name)) {
-      throw missingTrigger(phase, name);
-    }
-    if (phase == null || phase.length == 0) {
-      throw missingEvent(name);
-    }
-    if (!isTriggerEventValid(phase)) {
-      throw unsupportedTriggerEvent(phase, name);
-    }
-    const listeners = getOrSetDefaultValue(this._elementListeners, element, []);
-    const data = {
-      name,
-      phase,
-      callback
-    };
-    listeners.push(data);
-    const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, /* @__PURE__ */ new Map());
-    if (!triggersWithStates.has(name)) {
-      addClass(element, NG_TRIGGER_CLASSNAME);
-      addClass(element, NG_TRIGGER_CLASSNAME + "-" + name);
-      triggersWithStates.set(name, DEFAULT_STATE_VALUE);
-    }
-    return () => {
-      this._engine.afterFlush(() => {
-        const index = listeners.indexOf(data);
-        if (index >= 0) {
-          listeners.splice(index, 1);
-        }
-        if (!this._triggers.has(name)) {
-          triggersWithStates.delete(name);
-        }
-      });
-    };
-  }
-  register(name, ast) {
-    if (this._triggers.has(name)) {
-      return false;
-    } else {
-      this._triggers.set(name, ast);
-      return true;
-    }
-  }
-  _getTrigger(name) {
-    const trigger = this._triggers.get(name);
-    if (!trigger) {
-      throw unregisteredTrigger(name);
-    }
-    return trigger;
-  }
-  trigger(element, triggerName, value, defaultToFallback = true) {
-    const trigger = this._getTrigger(triggerName);
-    const player = new TransitionAnimationPlayer(this.id, triggerName, element);
-    let triggersWithStates = this._engine.statesByElement.get(element);
-    if (!triggersWithStates) {
-      addClass(element, NG_TRIGGER_CLASSNAME);
-      addClass(element, NG_TRIGGER_CLASSNAME + "-" + triggerName);
-      this._engine.statesByElement.set(element, triggersWithStates = /* @__PURE__ */ new Map());
-    }
-    let fromState = triggersWithStates.get(triggerName);
-    const toState = new StateValue(value, this.id);
-    const isObj = value && value.hasOwnProperty("value");
-    if (!isObj && fromState) {
-      toState.absorbOptions(fromState.options);
-    }
-    triggersWithStates.set(triggerName, toState);
-    if (!fromState) {
-      fromState = DEFAULT_STATE_VALUE;
-    }
-    const isRemoval = toState.value === VOID_VALUE;
-    if (!isRemoval && fromState.value === toState.value) {
-      if (!objEquals(fromState.params, toState.params)) {
-        const errors = [];
-        const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);
-        const toStyles = trigger.matchStyles(toState.value, toState.params, errors);
-        if (errors.length) {
-          this._engine.reportError(errors);
-        } else {
-          this._engine.afterFlush(() => {
-            eraseStyles(element, fromStyles);
-            setStyles(element, toStyles);
-          });
-        }
-      }
-      return;
-    }
-    const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);
-    playersOnElement.forEach((player2) => {
-      if (player2.namespaceId == this.id && player2.triggerName == triggerName && player2.queued) {
-        player2.destroy();
-      }
-    });
-    let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);
-    let isFallbackTransition = false;
-    if (!transition) {
-      if (!defaultToFallback) return;
-      transition = trigger.fallbackTransition;
-      isFallbackTransition = true;
-    }
-    this._engine.totalQueuedPlayers++;
-    this._queue.push({
-      element,
-      triggerName,
-      transition,
-      fromState,
-      toState,
-      player,
-      isFallbackTransition
-    });
-    if (!isFallbackTransition) {
-      addClass(element, QUEUED_CLASSNAME);
-      player.onStart(() => {
-        removeClass(element, QUEUED_CLASSNAME);
-      });
-    }
-    player.onDone(() => {
-      let index = this.players.indexOf(player);
-      if (index >= 0) {
-        this.players.splice(index, 1);
-      }
-      const players = this._engine.playersByElement.get(element);
-      if (players) {
-        let index2 = players.indexOf(player);
-        if (index2 >= 0) {
-          players.splice(index2, 1);
-        }
-      }
-    });
-    this.players.push(player);
-    playersOnElement.push(player);
-    return player;
-  }
-  deregister(name) {
-    this._triggers.delete(name);
-    this._engine.statesByElement.forEach((stateMap) => stateMap.delete(name));
-    this._elementListeners.forEach((listeners, element) => {
-      this._elementListeners.set(element, listeners.filter((entry) => {
-        return entry.name != name;
-      }));
-    });
-  }
-  clearElementCache(element) {
-    this._engine.statesByElement.delete(element);
-    this._elementListeners.delete(element);
-    const elementPlayers = this._engine.playersByElement.get(element);
-    if (elementPlayers) {
-      elementPlayers.forEach((player) => player.destroy());
-      this._engine.playersByElement.delete(element);
-    }
-  }
-  _signalRemovalForInnerTriggers(rootElement, context) {
-    const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);
-    elements.forEach((elm) => {
-      if (elm[REMOVAL_FLAG]) return;
-      const namespaces = this._engine.fetchNamespacesByElement(elm);
-      if (namespaces.size) {
-        namespaces.forEach((ns) => ns.triggerLeaveAnimation(elm, context, false, true));
-      } else {
-        this.clearElementCache(elm);
-      }
-    });
-    this._engine.afterFlushAnimationsDone(() => elements.forEach((elm) => this.clearElementCache(elm)));
-  }
-  triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {
-    const triggerStates = this._engine.statesByElement.get(element);
-    const previousTriggersValues = /* @__PURE__ */ new Map();
-    if (triggerStates) {
-      const players = [];
-      triggerStates.forEach((state, triggerName) => {
-        previousTriggersValues.set(triggerName, state.value);
-        if (this._triggers.has(triggerName)) {
-          const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);
-          if (player) {
-            players.push(player);
-          }
-        }
-      });
-      if (players.length) {
-        this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);
-        if (destroyAfterComplete) {
-          optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));
-        }
-        return true;
-      }
-    }
-    return false;
-  }
-  prepareLeaveAnimationListeners(element) {
-    const listeners = this._elementListeners.get(element);
-    const elementStates = this._engine.statesByElement.get(element);
-    if (listeners && elementStates) {
-      const visitedTriggers = /* @__PURE__ */ new Set();
-      listeners.forEach((listener) => {
-        const triggerName = listener.name;
-        if (visitedTriggers.has(triggerName)) return;
-        visitedTriggers.add(triggerName);
-        const trigger = this._triggers.get(triggerName);
-        const transition = trigger.fallbackTransition;
-        const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;
-        const toState = new StateValue(VOID_VALUE);
-        const player = new TransitionAnimationPlayer(this.id, triggerName, element);
-        this._engine.totalQueuedPlayers++;
-        this._queue.push({
-          element,
-          triggerName,
-          transition,
-          fromState,
-          toState,
-          player,
-          isFallbackTransition: true
-        });
-      });
-    }
-  }
-  removeNode(element, context) {
-    const engine = this._engine;
-    if (element.childElementCount) {
-      this._signalRemovalForInnerTriggers(element, context);
-    }
-    if (this.triggerLeaveAnimation(element, context, true)) return;
-    let containsPotentialParentTransition = false;
-    if (engine.totalAnimations) {
-      const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];
-      if (currentPlayers && currentPlayers.length) {
-        containsPotentialParentTransition = true;
-      } else {
-        let parent = element;
-        while (parent = parent.parentNode) {
-          const triggers = engine.statesByElement.get(parent);
-          if (triggers) {
-            containsPotentialParentTransition = true;
-            break;
-          }
-        }
-      }
-    }
-    this.prepareLeaveAnimationListeners(element);
-    if (containsPotentialParentTransition) {
-      engine.markElementAsRemoved(this.id, element, false, context);
-    } else {
-      const removalFlag = element[REMOVAL_FLAG];
-      if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {
-        engine.afterFlush(() => this.clearElementCache(element));
-        engine.destroyInnerAnimations(element);
-        engine._onRemovalComplete(element, context);
-      }
-    }
-  }
-  insertNode(element, parent) {
-    addClass(element, this._hostClassName);
-  }
-  drainQueuedTransitions(microtaskId) {
-    const instructions = [];
-    this._queue.forEach((entry) => {
-      const player = entry.player;
-      if (player.destroyed) return;
-      const element = entry.element;
-      const listeners = this._elementListeners.get(element);
-      if (listeners) {
-        listeners.forEach((listener) => {
-          if (listener.name == entry.triggerName) {
-            const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);
-            baseEvent["_data"] = microtaskId;
-            listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);
-          }
-        });
-      }
-      if (player.markedForDestroy) {
-        this._engine.afterFlush(() => {
-          player.destroy();
-        });
-      } else {
-        instructions.push(entry);
-      }
-    });
-    this._queue = [];
-    return instructions.sort((a, b) => {
-      const d0 = a.transition.ast.depCount;
-      const d1 = b.transition.ast.depCount;
-      if (d0 == 0 || d1 == 0) {
-        return d0 - d1;
-      }
-      return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;
-    });
-  }
-  destroy(context) {
-    this.players.forEach((p) => p.destroy());
-    this._signalRemovalForInnerTriggers(this.hostElement, context);
-  }
-};
-var TransitionAnimationEngine = class {
-  bodyNode;
-  driver;
-  _normalizer;
-  players = [];
-  newHostElements = /* @__PURE__ */ new Map();
-  playersByElement = /* @__PURE__ */ new Map();
-  playersByQueriedElement = /* @__PURE__ */ new Map();
-  statesByElement = /* @__PURE__ */ new Map();
-  disabledNodes = /* @__PURE__ */ new Set();
-  totalAnimations = 0;
-  totalQueuedPlayers = 0;
-  _namespaceLookup = {};
-  _namespaceList = [];
-  _flushFns = [];
-  _whenQuietFns = [];
-  namespacesByHostElement = /* @__PURE__ */ new Map();
-  collectedEnterElements = [];
-  collectedLeaveElements = [];
-  // this method is designed to be overridden by the code that uses this engine
-  onRemovalComplete = (element, context) => {
-  };
-  /** @internal */
-  _onRemovalComplete(element, context) {
-    this.onRemovalComplete(element, context);
-  }
-  constructor(bodyNode, driver, _normalizer) {
-    this.bodyNode = bodyNode;
-    this.driver = driver;
-    this._normalizer = _normalizer;
-  }
-  get queuedPlayers() {
-    const players = [];
-    this._namespaceList.forEach((ns) => {
-      ns.players.forEach((player) => {
-        if (player.queued) {
-          players.push(player);
-        }
-      });
-    });
-    return players;
-  }
-  createNamespace(namespaceId, hostElement) {
-    const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);
-    if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {
-      this._balanceNamespaceList(ns, hostElement);
-    } else {
-      this.newHostElements.set(hostElement, ns);
-      this.collectEnterElement(hostElement);
-    }
-    return this._namespaceLookup[namespaceId] = ns;
-  }
-  _balanceNamespaceList(ns, hostElement) {
-    const namespaceList = this._namespaceList;
-    const namespacesByHostElement = this.namespacesByHostElement;
-    const limit = namespaceList.length - 1;
-    if (limit >= 0) {
-      let found = false;
-      let ancestor = this.driver.getParentElement(hostElement);
-      while (ancestor) {
-        const ancestorNs = namespacesByHostElement.get(ancestor);
-        if (ancestorNs) {
-          const index = namespaceList.indexOf(ancestorNs);
-          namespaceList.splice(index + 1, 0, ns);
-          found = true;
-          break;
-        }
-        ancestor = this.driver.getParentElement(ancestor);
-      }
-      if (!found) {
-        namespaceList.unshift(ns);
-      }
-    } else {
-      namespaceList.push(ns);
-    }
-    namespacesByHostElement.set(hostElement, ns);
-    return ns;
-  }
-  register(namespaceId, hostElement) {
-    let ns = this._namespaceLookup[namespaceId];
-    if (!ns) {
-      ns = this.createNamespace(namespaceId, hostElement);
-    }
-    return ns;
-  }
-  registerTrigger(namespaceId, name, trigger) {
-    let ns = this._namespaceLookup[namespaceId];
-    if (ns && ns.register(name, trigger)) {
-      this.totalAnimations++;
-    }
-  }
-  destroy(namespaceId, context) {
-    if (!namespaceId) return;
-    this.afterFlush(() => {
-    });
-    this.afterFlushAnimationsDone(() => {
-      const ns = this._fetchNamespace(namespaceId);
-      this.namespacesByHostElement.delete(ns.hostElement);
-      const index = this._namespaceList.indexOf(ns);
-      if (index >= 0) {
-        this._namespaceList.splice(index, 1);
-      }
-      ns.destroy(context);
-      delete this._namespaceLookup[namespaceId];
-    });
-  }
-  _fetchNamespace(id) {
-    return this._namespaceLookup[id];
-  }
-  fetchNamespacesByElement(element) {
-    const namespaces = /* @__PURE__ */ new Set();
-    const elementStates = this.statesByElement.get(element);
-    if (elementStates) {
-      for (let stateValue of elementStates.values()) {
-        if (stateValue.namespaceId) {
-          const ns = this._fetchNamespace(stateValue.namespaceId);
-          if (ns) {
-            namespaces.add(ns);
-          }
-        }
-      }
-    }
-    return namespaces;
-  }
-  trigger(namespaceId, element, name, value) {
-    if (isElementNode(element)) {
-      const ns = this._fetchNamespace(namespaceId);
-      if (ns) {
-        ns.trigger(element, name, value);
-        return true;
-      }
-    }
-    return false;
-  }
-  insertNode(namespaceId, element, parent, insertBefore) {
-    if (!isElementNode(element)) return;
-    const details = element[REMOVAL_FLAG];
-    if (details && details.setForRemoval) {
-      details.setForRemoval = false;
-      details.setForMove = true;
-      const index = this.collectedLeaveElements.indexOf(element);
-      if (index >= 0) {
-        this.collectedLeaveElements.splice(index, 1);
-      }
-    }
-    if (namespaceId) {
-      const ns = this._fetchNamespace(namespaceId);
-      if (ns) {
-        ns.insertNode(element, parent);
-      }
-    }
-    if (insertBefore) {
-      this.collectEnterElement(element);
-    }
-  }
-  collectEnterElement(element) {
-    this.collectedEnterElements.push(element);
-  }
-  markElementAsDisabled(element, value) {
-    if (value) {
-      if (!this.disabledNodes.has(element)) {
-        this.disabledNodes.add(element);
-        addClass(element, DISABLED_CLASSNAME);
-      }
-    } else if (this.disabledNodes.has(element)) {
-      this.disabledNodes.delete(element);
-      removeClass(element, DISABLED_CLASSNAME);
-    }
-  }
-  removeNode(namespaceId, element, context) {
-    if (isElementNode(element)) {
-      const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;
-      if (ns) {
-        ns.removeNode(element, context);
-      } else {
-        this.markElementAsRemoved(namespaceId, element, false, context);
-      }
-      const hostNS = this.namespacesByHostElement.get(element);
-      if (hostNS && hostNS.id !== namespaceId) {
-        hostNS.removeNode(element, context);
-      }
-    } else {
-      this._onRemovalComplete(element, context);
-    }
-  }
-  markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {
-    this.collectedLeaveElements.push(element);
-    element[REMOVAL_FLAG] = {
-      namespaceId,
-      setForRemoval: context,
-      hasAnimation,
-      removedBeforeQueried: false,
-      previousTriggersValues
-    };
-  }
-  listen(namespaceId, element, name, phase, callback) {
-    if (isElementNode(element)) {
-      return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);
-    }
-    return () => {
-    };
-  }
-  _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {
-    return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);
-  }
-  destroyInnerAnimations(containerElement) {
-    let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);
-    elements.forEach((element) => this.destroyActiveAnimationsForElement(element));
-    if (this.playersByQueriedElement.size == 0) return;
-    elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);
-    elements.forEach((element) => this.finishActiveQueriedAnimationOnElement(element));
-  }
-  destroyActiveAnimationsForElement(element) {
-    const players = this.playersByElement.get(element);
-    if (players) {
-      players.forEach((player) => {
-        if (player.queued) {
-          player.markedForDestroy = true;
-        } else {
-          player.destroy();
-        }
-      });
-    }
-  }
-  finishActiveQueriedAnimationOnElement(element) {
-    const players = this.playersByQueriedElement.get(element);
-    if (players) {
-      players.forEach((player) => player.finish());
-    }
-  }
-  whenRenderingDone() {
-    return new Promise((resolve) => {
-      if (this.players.length) {
-        return optimizeGroupPlayer(this.players).onDone(() => resolve());
-      } else {
-        resolve();
-      }
-    });
-  }
-  processLeaveNode(element) {
-    const details = element[REMOVAL_FLAG];
-    if (details && details.setForRemoval) {
-      element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;
-      if (details.namespaceId) {
-        this.destroyInnerAnimations(element);
-        const ns = this._fetchNamespace(details.namespaceId);
-        if (ns) {
-          ns.clearElementCache(element);
-        }
-      }
-      this._onRemovalComplete(element, details.setForRemoval);
-    }
-    if (element.classList?.contains(DISABLED_CLASSNAME)) {
-      this.markElementAsDisabled(element, false);
-    }
-    this.driver.query(element, DISABLED_SELECTOR, true).forEach((node) => {
-      this.markElementAsDisabled(node, false);
-    });
-  }
-  flush(microtaskId = -1) {
-    let players = [];
-    if (this.newHostElements.size) {
-      this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));
-      this.newHostElements.clear();
-    }
-    if (this.totalAnimations && this.collectedEnterElements.length) {
-      for (let i = 0; i < this.collectedEnterElements.length; i++) {
-        const elm = this.collectedEnterElements[i];
-        addClass(elm, STAR_CLASSNAME);
-      }
-    }
-    if (this._namespaceList.length && (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {
-      const cleanupFns = [];
-      try {
-        players = this._flushAnimations(cleanupFns, microtaskId);
-      } finally {
-        for (let i = 0; i < cleanupFns.length; i++) {
-          cleanupFns[i]();
-        }
-      }
-    } else {
-      for (let i = 0; i < this.collectedLeaveElements.length; i++) {
-        const element = this.collectedLeaveElements[i];
-        this.processLeaveNode(element);
-      }
-    }
-    this.totalQueuedPlayers = 0;
-    this.collectedEnterElements.length = 0;
-    this.collectedLeaveElements.length = 0;
-    this._flushFns.forEach((fn) => fn());
-    this._flushFns = [];
-    if (this._whenQuietFns.length) {
-      const quietFns = this._whenQuietFns;
-      this._whenQuietFns = [];
-      if (players.length) {
-        optimizeGroupPlayer(players).onDone(() => {
-          quietFns.forEach((fn) => fn());
-        });
-      } else {
-        quietFns.forEach((fn) => fn());
-      }
-    }
-  }
-  reportError(errors) {
-    throw triggerTransitionsFailed(errors);
-  }
-  _flushAnimations(cleanupFns, microtaskId) {
-    const subTimelines = new ElementInstructionMap();
-    const skippedPlayers = [];
-    const skippedPlayersMap = /* @__PURE__ */ new Map();
-    const queuedInstructions = [];
-    const queriedElements = /* @__PURE__ */ new Map();
-    const allPreStyleElements = /* @__PURE__ */ new Map();
-    const allPostStyleElements = /* @__PURE__ */ new Map();
-    const disabledElementsSet = /* @__PURE__ */ new Set();
-    this.disabledNodes.forEach((node) => {
-      disabledElementsSet.add(node);
-      const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);
-      for (let i2 = 0; i2 < nodesThatAreDisabled.length; i2++) {
-        disabledElementsSet.add(nodesThatAreDisabled[i2]);
-      }
-    });
-    const bodyNode = this.bodyNode;
-    const allTriggerElements = Array.from(this.statesByElement.keys());
-    const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);
-    const enterNodeMapIds = /* @__PURE__ */ new Map();
-    let i = 0;
-    enterNodeMap.forEach((nodes, root) => {
-      const className = ENTER_CLASSNAME + i++;
-      enterNodeMapIds.set(root, className);
-      nodes.forEach((node) => addClass(node, className));
-    });
-    const allLeaveNodes = [];
-    const mergedLeaveNodes = /* @__PURE__ */ new Set();
-    const leaveNodesWithoutAnimations = /* @__PURE__ */ new Set();
-    for (let i2 = 0; i2 < this.collectedLeaveElements.length; i2++) {
-      const element = this.collectedLeaveElements[i2];
-      const details = element[REMOVAL_FLAG];
-      if (details && details.setForRemoval) {
-        allLeaveNodes.push(element);
-        mergedLeaveNodes.add(element);
-        if (details.hasAnimation) {
-          this.driver.query(element, STAR_SELECTOR, true).forEach((elm) => mergedLeaveNodes.add(elm));
-        } else {
-          leaveNodesWithoutAnimations.add(element);
-        }
-      }
-    }
-    const leaveNodeMapIds = /* @__PURE__ */ new Map();
-    const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));
-    leaveNodeMap.forEach((nodes, root) => {
-      const className = LEAVE_CLASSNAME + i++;
-      leaveNodeMapIds.set(root, className);
-      nodes.forEach((node) => addClass(node, className));
-    });
-    cleanupFns.push(() => {
-      enterNodeMap.forEach((nodes, root) => {
-        const className = enterNodeMapIds.get(root);
-        nodes.forEach((node) => removeClass(node, className));
-      });
-      leaveNodeMap.forEach((nodes, root) => {
-        const className = leaveNodeMapIds.get(root);
-        nodes.forEach((node) => removeClass(node, className));
-      });
-      allLeaveNodes.forEach((element) => {
-        this.processLeaveNode(element);
-      });
-    });
-    const allPlayers = [];
-    const erroneousTransitions = [];
-    for (let i2 = this._namespaceList.length - 1; i2 >= 0; i2--) {
-      const ns = this._namespaceList[i2];
-      ns.drainQueuedTransitions(microtaskId).forEach((entry) => {
-        const player = entry.player;
-        const element = entry.element;
-        allPlayers.push(player);
-        if (this.collectedEnterElements.length) {
-          const details = element[REMOVAL_FLAG];
-          if (details && details.setForMove) {
-            if (details.previousTriggersValues && details.previousTriggersValues.has(entry.triggerName)) {
-              const previousValue = details.previousTriggersValues.get(entry.triggerName);
-              const triggersWithStates = this.statesByElement.get(entry.element);
-              if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {
-                const state = triggersWithStates.get(entry.triggerName);
-                state.value = previousValue;
-                triggersWithStates.set(entry.triggerName, state);
-              }
-            }
-            player.destroy();
-            return;
-          }
-        }
-        const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);
-        const leaveClassName = leaveNodeMapIds.get(element);
-        const enterClassName = enterNodeMapIds.get(element);
-        const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);
-        if (instruction.errors && instruction.errors.length) {
-          erroneousTransitions.push(instruction);
-          return;
-        }
-        if (nodeIsOrphaned) {
-          player.onStart(() => eraseStyles(element, instruction.fromStyles));
-          player.onDestroy(() => setStyles(element, instruction.toStyles));
-          skippedPlayers.push(player);
-          return;
-        }
-        if (entry.isFallbackTransition) {
-          player.onStart(() => eraseStyles(element, instruction.fromStyles));
-          player.onDestroy(() => setStyles(element, instruction.toStyles));
-          skippedPlayers.push(player);
-          return;
-        }
-        const timelines = [];
-        instruction.timelines.forEach((tl) => {
-          tl.stretchStartingKeyframe = true;
-          if (!this.disabledNodes.has(tl.element)) {
-            timelines.push(tl);
-          }
-        });
-        instruction.timelines = timelines;
-        subTimelines.append(element, instruction.timelines);
-        const tuple = {
-          instruction,
-          player,
-          element
-        };
-        queuedInstructions.push(tuple);
-        instruction.queriedElements.forEach((element2) => getOrSetDefaultValue(queriedElements, element2, []).push(player));
-        instruction.preStyleProps.forEach((stringMap, element2) => {
-          if (stringMap.size) {
-            let setVal = allPreStyleElements.get(element2);
-            if (!setVal) {
-              allPreStyleElements.set(element2, setVal = /* @__PURE__ */ new Set());
-            }
-            stringMap.forEach((_, prop) => setVal.add(prop));
-          }
-        });
-        instruction.postStyleProps.forEach((stringMap, element2) => {
-          let setVal = allPostStyleElements.get(element2);
-          if (!setVal) {
-            allPostStyleElements.set(element2, setVal = /* @__PURE__ */ new Set());
-          }
-          stringMap.forEach((_, prop) => setVal.add(prop));
-        });
-      });
-    }
-    if (erroneousTransitions.length) {
-      const errors = [];
-      erroneousTransitions.forEach((instruction) => {
-        errors.push(transitionFailed(instruction.triggerName, instruction.errors));
-      });
-      allPlayers.forEach((player) => player.destroy());
-      this.reportError(errors);
-    }
-    const allPreviousPlayersMap = /* @__PURE__ */ new Map();
-    const animationElementMap = /* @__PURE__ */ new Map();
-    queuedInstructions.forEach((entry) => {
-      const element = entry.element;
-      if (subTimelines.has(element)) {
-        animationElementMap.set(element, element);
-        this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);
-      }
-    });
-    skippedPlayers.forEach((player) => {
-      const element = player.element;
-      const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);
-      previousPlayers.forEach((prevPlayer) => {
-        getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);
-        prevPlayer.destroy();
-      });
-    });
-    const replaceNodes = allLeaveNodes.filter((node) => {
-      return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);
-    });
-    const postStylesMap = /* @__PURE__ */ new Map();
-    const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);
-    allLeaveQueriedNodes.forEach((node) => {
-      if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {
-        replaceNodes.push(node);
-      }
-    });
-    const preStylesMap = /* @__PURE__ */ new Map();
-    enterNodeMap.forEach((nodes, root) => {
-      cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);
-    });
-    replaceNodes.forEach((node) => {
-      const post = postStylesMap.get(node);
-      const pre = preStylesMap.get(node);
-      postStylesMap.set(node, new Map([...post?.entries() ?? [], ...pre?.entries() ?? []]));
-    });
-    const rootPlayers = [];
-    const subPlayers = [];
-    const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};
-    queuedInstructions.forEach((entry) => {
-      const {
-        element,
-        player,
-        instruction
-      } = entry;
-      if (subTimelines.has(element)) {
-        if (disabledElementsSet.has(element)) {
-          player.onDestroy(() => setStyles(element, instruction.toStyles));
-          player.disabled = true;
-          player.overrideTotalTime(instruction.totalTime);
-          skippedPlayers.push(player);
-          return;
-        }
-        let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;
-        if (animationElementMap.size > 1) {
-          let elm = element;
-          const parentsToAdd = [];
-          while (elm = elm.parentNode) {
-            const detectedParent = animationElementMap.get(elm);
-            if (detectedParent) {
-              parentWithAnimation = detectedParent;
-              break;
-            }
-            parentsToAdd.push(elm);
-          }
-          parentsToAdd.forEach((parent) => animationElementMap.set(parent, parentWithAnimation));
-        }
-        const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);
-        player.setRealPlayer(innerPlayer);
-        if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {
-          rootPlayers.push(player);
-        } else {
-          const parentPlayers = this.playersByElement.get(parentWithAnimation);
-          if (parentPlayers && parentPlayers.length) {
-            player.parentPlayer = optimizeGroupPlayer(parentPlayers);
-          }
-          skippedPlayers.push(player);
-        }
-      } else {
-        eraseStyles(element, instruction.fromStyles);
-        player.onDestroy(() => setStyles(element, instruction.toStyles));
-        subPlayers.push(player);
-        if (disabledElementsSet.has(element)) {
-          skippedPlayers.push(player);
-        }
-      }
-    });
-    subPlayers.forEach((player) => {
-      const playersForElement = skippedPlayersMap.get(player.element);
-      if (playersForElement && playersForElement.length) {
-        const innerPlayer = optimizeGroupPlayer(playersForElement);
-        player.setRealPlayer(innerPlayer);
-      }
-    });
-    skippedPlayers.forEach((player) => {
-      if (player.parentPlayer) {
-        player.syncPlayerEvents(player.parentPlayer);
-      } else {
-        player.destroy();
-      }
-    });
-    for (let i2 = 0; i2 < allLeaveNodes.length; i2++) {
-      const element = allLeaveNodes[i2];
-      const details = element[REMOVAL_FLAG];
-      removeClass(element, LEAVE_CLASSNAME);
-      if (details && details.hasAnimation) continue;
-      let players = [];
-      if (queriedElements.size) {
-        let queriedPlayerResults = queriedElements.get(element);
-        if (queriedPlayerResults && queriedPlayerResults.length) {
-          players.push(...queriedPlayerResults);
-        }
-        let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);
-        for (let j = 0; j < queriedInnerElements.length; j++) {
-          let queriedPlayers = queriedElements.get(queriedInnerElements[j]);
-          if (queriedPlayers && queriedPlayers.length) {
-            players.push(...queriedPlayers);
-          }
-        }
-      }
-      const activePlayers = players.filter((p) => !p.destroyed);
-      if (activePlayers.length) {
-        removeNodesAfterAnimationDone(this, element, activePlayers);
-      } else {
-        this.processLeaveNode(element);
-      }
-    }
-    allLeaveNodes.length = 0;
-    rootPlayers.forEach((player) => {
-      this.players.push(player);
-      player.onDone(() => {
-        player.destroy();
-        const index = this.players.indexOf(player);
-        this.players.splice(index, 1);
-      });
-      player.play();
-    });
-    return rootPlayers;
-  }
-  afterFlush(callback) {
-    this._flushFns.push(callback);
-  }
-  afterFlushAnimationsDone(callback) {
-    this._whenQuietFns.push(callback);
-  }
-  _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {
-    let players = [];
-    if (isQueriedElement) {
-      const queriedElementPlayers = this.playersByQueriedElement.get(element);
-      if (queriedElementPlayers) {
-        players = queriedElementPlayers;
-      }
-    } else {
-      const elementPlayers = this.playersByElement.get(element);
-      if (elementPlayers) {
-        const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;
-        elementPlayers.forEach((player) => {
-          if (player.queued) return;
-          if (!isRemovalAnimation && player.triggerName != triggerName) return;
-          players.push(player);
-        });
-      }
-    }
-    if (namespaceId || triggerName) {
-      players = players.filter((player) => {
-        if (namespaceId && namespaceId != player.namespaceId) return false;
-        if (triggerName && triggerName != player.triggerName) return false;
-        return true;
-      });
-    }
-    return players;
-  }
-  _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {
-    const triggerName = instruction.triggerName;
-    const rootElement = instruction.element;
-    const targetNameSpaceId = instruction.isRemovalTransition ? void 0 : namespaceId;
-    const targetTriggerName = instruction.isRemovalTransition ? void 0 : triggerName;
-    for (const timelineInstruction of instruction.timelines) {
-      const element = timelineInstruction.element;
-      const isQueriedElement = element !== rootElement;
-      const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);
-      const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);
-      previousPlayers.forEach((player) => {
-        const realPlayer = player.getRealPlayer();
-        if (realPlayer.beforeDestroy) {
-          realPlayer.beforeDestroy();
-        }
-        player.destroy();
-        players.push(player);
-      });
-    }
-    eraseStyles(rootElement, instruction.fromStyles);
-  }
-  _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {
-    const triggerName = instruction.triggerName;
-    const rootElement = instruction.element;
-    const allQueriedPlayers = [];
-    const allConsumedElements = /* @__PURE__ */ new Set();
-    const allSubElements = /* @__PURE__ */ new Set();
-    const allNewPlayers = instruction.timelines.map((timelineInstruction) => {
-      const element = timelineInstruction.element;
-      allConsumedElements.add(element);
-      const details = element[REMOVAL_FLAG];
-      if (details && details.removedBeforeQueried) return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);
-      const isQueriedElement = element !== rootElement;
-      const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map((p) => p.getRealPlayer())).filter((p) => {
-        const pp = p;
-        return pp.element ? pp.element === element : false;
-      });
-      const preStyles = preStylesMap.get(element);
-      const postStyles = postStylesMap.get(element);
-      const keyframes = normalizeKeyframes$1(this._normalizer, timelineInstruction.keyframes, preStyles, postStyles);
-      const player2 = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);
-      if (timelineInstruction.subTimeline && skippedPlayersMap) {
-        allSubElements.add(element);
-      }
-      if (isQueriedElement) {
-        const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);
-        wrappedPlayer.setRealPlayer(player2);
-        allQueriedPlayers.push(wrappedPlayer);
-      }
-      return player2;
-    });
-    allQueriedPlayers.forEach((player2) => {
-      getOrSetDefaultValue(this.playersByQueriedElement, player2.element, []).push(player2);
-      player2.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player2.element, player2));
-    });
-    allConsumedElements.forEach((element) => addClass(element, NG_ANIMATING_CLASSNAME));
-    const player = optimizeGroupPlayer(allNewPlayers);
-    player.onDestroy(() => {
-      allConsumedElements.forEach((element) => removeClass(element, NG_ANIMATING_CLASSNAME));
-      setStyles(rootElement, instruction.toStyles);
-    });
-    allSubElements.forEach((element) => {
-      getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);
-    });
-    return player;
-  }
-  _buildPlayer(instruction, keyframes, previousPlayers) {
-    if (keyframes.length > 0) {
-      return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);
-    }
-    return new NoopAnimationPlayer(instruction.duration, instruction.delay);
-  }
-};
-var TransitionAnimationPlayer = class {
-  namespaceId;
-  triggerName;
-  element;
-  _player = new NoopAnimationPlayer();
-  _containsRealPlayer = false;
-  _queuedCallbacks = /* @__PURE__ */ new Map();
-  destroyed = false;
-  parentPlayer = null;
-  markedForDestroy = false;
-  disabled = false;
-  queued = true;
-  totalTime = 0;
-  constructor(namespaceId, triggerName, element) {
-    this.namespaceId = namespaceId;
-    this.triggerName = triggerName;
-    this.element = element;
-  }
-  setRealPlayer(player) {
-    if (this._containsRealPlayer) return;
-    this._player = player;
-    this._queuedCallbacks.forEach((callbacks, phase) => {
-      callbacks.forEach((callback) => listenOnPlayer(player, phase, void 0, callback));
-    });
-    this._queuedCallbacks.clear();
-    this._containsRealPlayer = true;
-    this.overrideTotalTime(player.totalTime);
-    this.queued = false;
-  }
-  getRealPlayer() {
-    return this._player;
-  }
-  overrideTotalTime(totalTime) {
-    this.totalTime = totalTime;
-  }
-  syncPlayerEvents(player) {
-    const p = this._player;
-    if (p.triggerCallback) {
-      player.onStart(() => p.triggerCallback("start"));
-    }
-    player.onDone(() => this.finish());
-    player.onDestroy(() => this.destroy());
-  }
-  _queueEvent(name, callback) {
-    getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);
-  }
-  onDone(fn) {
-    if (this.queued) {
-      this._queueEvent("done", fn);
-    }
-    this._player.onDone(fn);
-  }
-  onStart(fn) {
-    if (this.queued) {
-      this._queueEvent("start", fn);
-    }
-    this._player.onStart(fn);
-  }
-  onDestroy(fn) {
-    if (this.queued) {
-      this._queueEvent("destroy", fn);
-    }
-    this._player.onDestroy(fn);
-  }
-  init() {
-    this._player.init();
-  }
-  hasStarted() {
-    return this.queued ? false : this._player.hasStarted();
-  }
-  play() {
-    !this.queued && this._player.play();
-  }
-  pause() {
-    !this.queued && this._player.pause();
-  }
-  restart() {
-    !this.queued && this._player.restart();
-  }
-  finish() {
-    this._player.finish();
-  }
-  destroy() {
-    this.destroyed = true;
-    this._player.destroy();
-  }
-  reset() {
-    !this.queued && this._player.reset();
-  }
-  setPosition(p) {
-    if (!this.queued) {
-      this._player.setPosition(p);
-    }
-  }
-  getPosition() {
-    return this.queued ? 0 : this._player.getPosition();
-  }
-  /** @internal */
-  triggerCallback(phaseName) {
-    const p = this._player;
-    if (p.triggerCallback) {
-      p.triggerCallback(phaseName);
-    }
-  }
-};
-function deleteOrUnsetInMap(map, key, value) {
-  let currentValues = map.get(key);
-  if (currentValues) {
-    if (currentValues.length) {
-      const index = currentValues.indexOf(value);
-      currentValues.splice(index, 1);
-    }
-    if (currentValues.length == 0) {
-      map.delete(key);
-    }
-  }
-  return currentValues;
-}
-function normalizeTriggerValue(value) {
-  return value != null ? value : null;
-}
-function isElementNode(node) {
-  return node && node["nodeType"] === 1;
-}
-function isTriggerEventValid(eventName) {
-  return eventName == "start" || eventName == "done";
-}
-function cloakElement(element, value) {
-  const oldValue = element.style.display;
-  element.style.display = value != null ? value : "none";
-  return oldValue;
-}
-function cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {
-  const cloakVals = [];
-  elements.forEach((element) => cloakVals.push(cloakElement(element)));
-  const failedElements = [];
-  elementPropsMap.forEach((props, element) => {
-    const styles = /* @__PURE__ */ new Map();
-    props.forEach((prop) => {
-      const value = driver.computeStyle(element, prop, defaultStyle);
-      styles.set(prop, value);
-      if (!value || value.length == 0) {
-        element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;
-        failedElements.push(element);
-      }
-    });
-    valuesMap.set(element, styles);
-  });
-  let i = 0;
-  elements.forEach((element) => cloakElement(element, cloakVals[i++]));
-  return failedElements;
-}
-function buildRootMap(roots, nodes) {
-  const rootMap = /* @__PURE__ */ new Map();
-  roots.forEach((root) => rootMap.set(root, []));
-  if (nodes.length == 0) return rootMap;
-  const NULL_NODE = 1;
-  const nodeSet = new Set(nodes);
-  const localRootMap = /* @__PURE__ */ new Map();
-  function getRoot(node) {
-    if (!node) return NULL_NODE;
-    let root = localRootMap.get(node);
-    if (root) return root;
-    const parent = node.parentNode;
-    if (rootMap.has(parent)) {
-      root = parent;
-    } else if (nodeSet.has(parent)) {
-      root = NULL_NODE;
-    } else {
-      root = getRoot(parent);
-    }
-    localRootMap.set(node, root);
-    return root;
-  }
-  nodes.forEach((node) => {
-    const root = getRoot(node);
-    if (root !== NULL_NODE) {
-      rootMap.get(root).push(node);
-    }
-  });
-  return rootMap;
-}
-function addClass(element, className) {
-  element.classList?.add(className);
-}
-function removeClass(element, className) {
-  element.classList?.remove(className);
-}
-function removeNodesAfterAnimationDone(engine, element, players) {
-  optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));
-}
-function flattenGroupPlayers(players) {
-  const finalPlayers = [];
-  _flattenGroupPlayersRecur(players, finalPlayers);
-  return finalPlayers;
-}
-function _flattenGroupPlayersRecur(players, finalPlayers) {
-  for (let i = 0; i < players.length; i++) {
-    const player = players[i];
-    if (player instanceof AnimationGroupPlayer) {
-      _flattenGroupPlayersRecur(player.players, finalPlayers);
-    } else {
-      finalPlayers.push(player);
-    }
-  }
-}
-function objEquals(a, b) {
-  const k1 = Object.keys(a);
-  const k2 = Object.keys(b);
-  if (k1.length != k2.length) return false;
-  for (let i = 0; i < k1.length; i++) {
-    const prop = k1[i];
-    if (!b.hasOwnProperty(prop) || a[prop] !== b[prop]) return false;
-  }
-  return true;
-}
-function replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {
-  const postEntry = allPostStyleElements.get(element);
-  if (!postEntry) return false;
-  let preEntry = allPreStyleElements.get(element);
-  if (preEntry) {
-    postEntry.forEach((data) => preEntry.add(data));
-  } else {
-    allPreStyleElements.set(element, postEntry);
-  }
-  allPostStyleElements.delete(element);
-  return true;
-}
-var AnimationEngine = class {
-  _driver;
-  _normalizer;
-  _transitionEngine;
-  _timelineEngine;
-  _triggerCache = {};
-  // this method is designed to be overridden by the code that uses this engine
-  onRemovalComplete = (element, context) => {
-  };
-  constructor(doc, _driver, _normalizer) {
-    this._driver = _driver;
-    this._normalizer = _normalizer;
-    this._transitionEngine = new TransitionAnimationEngine(doc.body, _driver, _normalizer);
-    this._timelineEngine = new TimelineAnimationEngine(doc.body, _driver, _normalizer);
-    this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);
-  }
-  registerTrigger(componentId, namespaceId, hostElement, name, metadata) {
-    const cacheKey = componentId + "-" + name;
-    let trigger = this._triggerCache[cacheKey];
-    if (!trigger) {
-      const errors = [];
-      const warnings = [];
-      const ast = buildAnimationAst(this._driver, metadata, errors, warnings);
-      if (errors.length) {
-        throw triggerBuildFailed(name, errors);
-      }
-      if (warnings.length) {
-        warnTriggerBuild(name, warnings);
-      }
-      trigger = buildTrigger(name, ast, this._normalizer);
-      this._triggerCache[cacheKey] = trigger;
-    }
-    this._transitionEngine.registerTrigger(namespaceId, name, trigger);
-  }
-  register(namespaceId, hostElement) {
-    this._transitionEngine.register(namespaceId, hostElement);
-  }
-  destroy(namespaceId, context) {
-    this._transitionEngine.destroy(namespaceId, context);
-  }
-  onInsert(namespaceId, element, parent, insertBefore) {
-    this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);
-  }
-  onRemove(namespaceId, element, context) {
-    this._transitionEngine.removeNode(namespaceId, element, context);
-  }
-  disableAnimations(element, disable) {
-    this._transitionEngine.markElementAsDisabled(element, disable);
-  }
-  process(namespaceId, element, property, value) {
-    if (property.charAt(0) == "@") {
-      const [id, action] = parseTimelineCommand(property);
-      const args = value;
-      this._timelineEngine.command(id, element, action, args);
-    } else {
-      this._transitionEngine.trigger(namespaceId, element, property, value);
-    }
-  }
-  listen(namespaceId, element, eventName, eventPhase, callback) {
-    if (eventName.charAt(0) == "@") {
-      const [id, action] = parseTimelineCommand(eventName);
-      return this._timelineEngine.listen(id, element, action, callback);
-    }
-    return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);
-  }
-  flush(microtaskId = -1) {
-    this._transitionEngine.flush(microtaskId);
-  }
-  get players() {
-    return [...this._transitionEngine.players, ...this._timelineEngine.players];
-  }
-  whenRenderingDone() {
-    return this._transitionEngine.whenRenderingDone();
-  }
-  afterFlushAnimationsDone(cb) {
-    this._transitionEngine.afterFlushAnimationsDone(cb);
-  }
-};
-function packageNonAnimatableStyles(element, styles) {
-  let startStyles = null;
-  let endStyles = null;
-  if (Array.isArray(styles) && styles.length) {
-    startStyles = filterNonAnimatableStyles(styles[0]);
-    if (styles.length > 1) {
-      endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);
-    }
-  } else if (styles instanceof Map) {
-    startStyles = filterNonAnimatableStyles(styles);
-  }
-  return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;
-}
-var SpecialCasedStyles = class _SpecialCasedStyles {
-  _element;
-  _startStyles;
-  _endStyles;
-  static initialStylesByElement = /* @__PURE__ */ new WeakMap();
-  _state = 0;
-  _initialStyles;
-  constructor(_element, _startStyles, _endStyles) {
-    this._element = _element;
-    this._startStyles = _startStyles;
-    this._endStyles = _endStyles;
-    let initialStyles = _SpecialCasedStyles.initialStylesByElement.get(_element);
-    if (!initialStyles) {
-      _SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = /* @__PURE__ */ new Map());
-    }
-    this._initialStyles = initialStyles;
-  }
-  start() {
-    if (this._state < 1) {
-      if (this._startStyles) {
-        setStyles(this._element, this._startStyles, this._initialStyles);
-      }
-      this._state = 1;
-    }
-  }
-  finish() {
-    this.start();
-    if (this._state < 2) {
-      setStyles(this._element, this._initialStyles);
-      if (this._endStyles) {
-        setStyles(this._element, this._endStyles);
-        this._endStyles = null;
-      }
-      this._state = 1;
-    }
-  }
-  destroy() {
-    this.finish();
-    if (this._state < 3) {
-      _SpecialCasedStyles.initialStylesByElement.delete(this._element);
-      if (this._startStyles) {
-        eraseStyles(this._element, this._startStyles);
-        this._endStyles = null;
-      }
-      if (this._endStyles) {
-        eraseStyles(this._element, this._endStyles);
-        this._endStyles = null;
-      }
-      setStyles(this._element, this._initialStyles);
-      this._state = 3;
-    }
-  }
-};
-function filterNonAnimatableStyles(styles) {
-  let result = null;
-  styles.forEach((val, prop) => {
-    if (isNonAnimatableStyle(prop)) {
-      result = result || /* @__PURE__ */ new Map();
-      result.set(prop, val);
-    }
-  });
-  return result;
-}
-function isNonAnimatableStyle(prop) {
-  return prop === "display" || prop === "position";
-}
-var WebAnimationsPlayer = class {
-  element;
-  keyframes;
-  options;
-  _specialStyles;
-  _onDoneFns = [];
-  _onStartFns = [];
-  _onDestroyFns = [];
-  _duration;
-  _delay;
-  _initialized = false;
-  _finished = false;
-  _started = false;
-  _destroyed = false;
-  _finalKeyframe;
-  // the following original fns are persistent copies of the _onStartFns and _onDoneFns
-  // and are used to reset the fns to their original values upon reset()
-  // (since the _onStartFns and _onDoneFns get deleted after they are called)
-  _originalOnDoneFns = [];
-  _originalOnStartFns = [];
-  // using non-null assertion because it's re(set) by init();
-  domPlayer;
-  time = 0;
-  parentPlayer = null;
-  currentSnapshot = /* @__PURE__ */ new Map();
-  constructor(element, keyframes, options, _specialStyles) {
-    this.element = element;
-    this.keyframes = keyframes;
-    this.options = options;
-    this._specialStyles = _specialStyles;
-    this._duration = options["duration"];
-    this._delay = options["delay"] || 0;
-    this.time = this._duration + this._delay;
-  }
-  _onFinish() {
-    if (!this._finished) {
-      this._finished = true;
-      this._onDoneFns.forEach((fn) => fn());
-      this._onDoneFns = [];
-    }
-  }
-  init() {
-    this._buildPlayer();
-    this._preparePlayerBeforeStart();
-  }
-  _buildPlayer() {
-    if (this._initialized) return;
-    this._initialized = true;
-    const keyframes = this.keyframes;
-    this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options);
-    this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : /* @__PURE__ */ new Map();
-    const onFinish = () => this._onFinish();
-    this.domPlayer.addEventListener("finish", onFinish);
-    this.onDestroy(() => {
-      this.domPlayer.removeEventListener("finish", onFinish);
-    });
-  }
-  _preparePlayerBeforeStart() {
-    if (this._delay) {
-      this._resetDomPlayerState();
-    } else {
-      this.domPlayer.pause();
-    }
-  }
-  _convertKeyframesToObject(keyframes) {
-    const kfs = [];
-    keyframes.forEach((frame) => {
-      kfs.push(Object.fromEntries(frame));
-    });
-    return kfs;
-  }
-  /** @internal */
-  _triggerWebAnimation(element, keyframes, options) {
-    return element.animate(this._convertKeyframesToObject(keyframes), options);
-  }
-  onStart(fn) {
-    this._originalOnStartFns.push(fn);
-    this._onStartFns.push(fn);
-  }
-  onDone(fn) {
-    this._originalOnDoneFns.push(fn);
-    this._onDoneFns.push(fn);
-  }
-  onDestroy(fn) {
-    this._onDestroyFns.push(fn);
-  }
-  play() {
-    this._buildPlayer();
-    if (!this.hasStarted()) {
-      this._onStartFns.forEach((fn) => fn());
-      this._onStartFns = [];
-      this._started = true;
-      if (this._specialStyles) {
-        this._specialStyles.start();
-      }
-    }
-    this.domPlayer.play();
-  }
-  pause() {
-    this.init();
-    this.domPlayer.pause();
-  }
-  finish() {
-    this.init();
-    if (this._specialStyles) {
-      this._specialStyles.finish();
-    }
-    this._onFinish();
-    this.domPlayer.finish();
-  }
-  reset() {
-    this._resetDomPlayerState();
-    this._destroyed = false;
-    this._finished = false;
-    this._started = false;
-    this._onStartFns = this._originalOnStartFns;
-    this._onDoneFns = this._originalOnDoneFns;
-  }
-  _resetDomPlayerState() {
-    if (this.domPlayer) {
-      this.domPlayer.cancel();
-    }
-  }
-  restart() {
-    this.reset();
-    this.play();
-  }
-  hasStarted() {
-    return this._started;
-  }
-  destroy() {
-    if (!this._destroyed) {
-      this._destroyed = true;
-      this._resetDomPlayerState();
-      this._onFinish();
-      if (this._specialStyles) {
-        this._specialStyles.destroy();
-      }
-      this._onDestroyFns.forEach((fn) => fn());
-      this._onDestroyFns = [];
-    }
-  }
-  setPosition(p) {
-    if (this.domPlayer === void 0) {
-      this.init();
-    }
-    this.domPlayer.currentTime = p * this.time;
-  }
-  getPosition() {
-    return +(this.domPlayer.currentTime ?? 0) / this.time;
-  }
-  get totalTime() {
-    return this._delay + this._duration;
-  }
-  beforeDestroy() {
-    const styles = /* @__PURE__ */ new Map();
-    if (this.hasStarted()) {
-      const finalKeyframe = this._finalKeyframe;
-      finalKeyframe.forEach((val, prop) => {
-        if (prop !== "offset") {
-          styles.set(prop, this._finished ? val : computeStyle(this.element, prop));
-        }
-      });
-    }
-    this.currentSnapshot = styles;
-  }
-  /** @internal */
-  triggerCallback(phaseName) {
-    const methods = phaseName === "start" ? this._onStartFns : this._onDoneFns;
-    methods.forEach((fn) => fn());
-    methods.length = 0;
-  }
-};
-var WebAnimationsDriver = class {
-  validateStyleProperty(prop) {
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      return validateStyleProperty(prop);
-    }
-    return true;
-  }
-  validateAnimatableStyleProperty(prop) {
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      const cssProp = camelCaseToDashCase(prop);
-      return validateWebAnimatableStyleProperty(cssProp);
-    }
-    return true;
-  }
-  containsElement(elm1, elm2) {
-    return containsElement(elm1, elm2);
-  }
-  getParentElement(element) {
-    return getParentElement(element);
-  }
-  query(element, selector, multi) {
-    return invokeQuery(element, selector, multi);
-  }
-  computeStyle(element, prop, defaultValue) {
-    return computeStyle(element, prop);
-  }
-  animate(element, keyframes, duration, delay, easing, previousPlayers = []) {
-    const fill = delay == 0 ? "both" : "forwards";
-    const playerOptions = {
-      duration,
-      delay,
-      fill
-    };
-    if (easing) {
-      playerOptions["easing"] = easing;
-    }
-    const previousStyles = /* @__PURE__ */ new Map();
-    const previousWebAnimationPlayers = previousPlayers.filter((player) => player instanceof WebAnimationsPlayer);
-    if (allowPreviousPlayerStylesMerge(duration, delay)) {
-      previousWebAnimationPlayers.forEach((player) => {
-        player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));
-      });
-    }
-    let _keyframes = normalizeKeyframes(keyframes).map((styles) => new Map(styles));
-    _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);
-    const specialStyles = packageNonAnimatableStyles(element, _keyframes);
-    return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);
-  }
-};
-var ANIMATION_PREFIX = "@";
-var DISABLE_ANIMATIONS_FLAG = "@.disabled";
-var BaseAnimationRenderer = class {
-  namespaceId;
-  delegate;
-  engine;
-  _onDestroy;
-  // We need to explicitly type this property because of an api-extractor bug
-  // See https://github.com/microsoft/rushstack/issues/4390
-  ɵtype = 0;
-  constructor(namespaceId, delegate, engine, _onDestroy) {
-    this.namespaceId = namespaceId;
-    this.delegate = delegate;
-    this.engine = engine;
-    this._onDestroy = _onDestroy;
-  }
-  get data() {
-    return this.delegate.data;
-  }
-  destroyNode(node) {
-    this.delegate.destroyNode?.(node);
-  }
-  destroy() {
-    this.engine.destroy(this.namespaceId, this.delegate);
-    this.engine.afterFlushAnimationsDone(() => {
-      queueMicrotask(() => {
-        this.delegate.destroy();
-      });
-    });
-    this._onDestroy?.();
-  }
-  createElement(name, namespace) {
-    return this.delegate.createElement(name, namespace);
-  }
-  createComment(value) {
-    return this.delegate.createComment(value);
-  }
-  createText(value) {
-    return this.delegate.createText(value);
-  }
-  appendChild(parent, newChild) {
-    this.delegate.appendChild(parent, newChild);
-    this.engine.onInsert(this.namespaceId, newChild, parent, false);
-  }
-  insertBefore(parent, newChild, refChild, isMove = true) {
-    this.delegate.insertBefore(parent, newChild, refChild);
-    this.engine.onInsert(this.namespaceId, newChild, parent, isMove);
-  }
-  removeChild(parent, oldChild, isHostElement) {
-    if (this.parentNode(oldChild)) {
-      this.engine.onRemove(this.namespaceId, oldChild, this.delegate);
-    }
-  }
-  selectRootElement(selectorOrNode, preserveContent) {
-    return this.delegate.selectRootElement(selectorOrNode, preserveContent);
-  }
-  parentNode(node) {
-    return this.delegate.parentNode(node);
-  }
-  nextSibling(node) {
-    return this.delegate.nextSibling(node);
-  }
-  setAttribute(el, name, value, namespace) {
-    this.delegate.setAttribute(el, name, value, namespace);
-  }
-  removeAttribute(el, name, namespace) {
-    this.delegate.removeAttribute(el, name, namespace);
-  }
-  addClass(el, name) {
-    this.delegate.addClass(el, name);
-  }
-  removeClass(el, name) {
-    this.delegate.removeClass(el, name);
-  }
-  setStyle(el, style2, value, flags) {
-    this.delegate.setStyle(el, style2, value, flags);
-  }
-  removeStyle(el, style2, flags) {
-    this.delegate.removeStyle(el, style2, flags);
-  }
-  setProperty(el, name, value) {
-    if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {
-      this.disableAnimations(el, !!value);
-    } else {
-      this.delegate.setProperty(el, name, value);
-    }
-  }
-  setValue(node, value) {
-    this.delegate.setValue(node, value);
-  }
-  listen(target, eventName, callback) {
-    return this.delegate.listen(target, eventName, callback);
-  }
-  disableAnimations(element, value) {
-    this.engine.disableAnimations(element, value);
-  }
-};
-var AnimationRenderer = class extends BaseAnimationRenderer {
-  factory;
-  constructor(factory, namespaceId, delegate, engine, onDestroy) {
-    super(namespaceId, delegate, engine, onDestroy);
-    this.factory = factory;
-    this.namespaceId = namespaceId;
-  }
-  setProperty(el, name, value) {
-    if (name.charAt(0) == ANIMATION_PREFIX) {
-      if (name.charAt(1) == "." && name == DISABLE_ANIMATIONS_FLAG) {
-        value = value === void 0 ? true : !!value;
-        this.disableAnimations(el, value);
-      } else {
-        this.engine.process(this.namespaceId, el, name.slice(1), value);
-      }
-    } else {
-      this.delegate.setProperty(el, name, value);
-    }
-  }
-  listen(target, eventName, callback) {
-    if (eventName.charAt(0) == ANIMATION_PREFIX) {
-      const element = resolveElementFromTarget(target);
-      let name = eventName.slice(1);
-      let phase = "";
-      if (name.charAt(0) != ANIMATION_PREFIX) {
-        [name, phase] = parseTriggerCallbackName(name);
-      }
-      return this.engine.listen(this.namespaceId, element, name, phase, (event) => {
-        const countId = event["_data"] || -1;
-        this.factory.scheduleListenerCallback(countId, callback, event);
-      });
-    }
-    return this.delegate.listen(target, eventName, callback);
-  }
-};
-function resolveElementFromTarget(target) {
-  switch (target) {
-    case "body":
-      return document.body;
-    case "document":
-      return document;
-    case "window":
-      return window;
-    default:
-      return target;
-  }
-}
-function parseTriggerCallbackName(triggerName) {
-  const dotIndex = triggerName.indexOf(".");
-  const trigger = triggerName.substring(0, dotIndex);
-  const phase = triggerName.slice(dotIndex + 1);
-  return [trigger, phase];
-}
-var AnimationRendererFactory = class {
-  delegate;
-  engine;
-  _zone;
-  _currentId = 0;
-  _microtaskId = 1;
-  _animationCallbacksBuffer = [];
-  _rendererCache = /* @__PURE__ */ new Map();
-  _cdRecurDepth = 0;
-  constructor(delegate, engine, _zone) {
-    this.delegate = delegate;
-    this.engine = engine;
-    this._zone = _zone;
-    engine.onRemovalComplete = (element, delegate2) => {
-      delegate2?.removeChild(null, element);
-    };
-  }
-  createRenderer(hostElement, type) {
-    const EMPTY_NAMESPACE_ID = "";
-    const delegate = this.delegate.createRenderer(hostElement, type);
-    if (!hostElement || !type?.data?.["animation"]) {
-      const cache = this._rendererCache;
-      let renderer = cache.get(delegate);
-      if (!renderer) {
-        const onRendererDestroy = () => cache.delete(delegate);
-        renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);
-        cache.set(delegate, renderer);
-      }
-      return renderer;
-    }
-    const componentId = type.id;
-    const namespaceId = type.id + "-" + this._currentId;
-    this._currentId++;
-    this.engine.register(namespaceId, hostElement);
-    const registerTrigger = (trigger) => {
-      if (Array.isArray(trigger)) {
-        trigger.forEach(registerTrigger);
-      } else {
-        this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);
-      }
-    };
-    const animationTriggers = type.data["animation"];
-    animationTriggers.forEach(registerTrigger);
-    return new AnimationRenderer(this, namespaceId, delegate, this.engine);
-  }
-  begin() {
-    this._cdRecurDepth++;
-    if (this.delegate.begin) {
-      this.delegate.begin();
-    }
-  }
-  _scheduleCountTask() {
-    queueMicrotask(() => {
-      this._microtaskId++;
-    });
-  }
-  /** @internal */
-  scheduleListenerCallback(count, fn, data) {
-    if (count >= 0 && count < this._microtaskId) {
-      this._zone.run(() => fn(data));
-      return;
-    }
-    const animationCallbacksBuffer = this._animationCallbacksBuffer;
-    if (animationCallbacksBuffer.length == 0) {
-      queueMicrotask(() => {
-        this._zone.run(() => {
-          animationCallbacksBuffer.forEach((tuple) => {
-            const [fn2, data2] = tuple;
-            fn2(data2);
-          });
-          this._animationCallbacksBuffer = [];
-        });
-      });
-    }
-    animationCallbacksBuffer.push([fn, data]);
-  }
-  end() {
-    this._cdRecurDepth--;
-    if (this._cdRecurDepth == 0) {
-      this._zone.runOutsideAngular(() => {
-        this._scheduleCountTask();
-        this.engine.flush(this._microtaskId);
-      });
-    }
-    if (this.delegate.end) {
-      this.delegate.end();
-    }
-  }
-  whenRenderingDone() {
-    return this.engine.whenRenderingDone();
-  }
-};
-
-// node_modules/@angular/platform-browser/fesm2022/animations.mjs
-var InjectableAnimationEngine = class _InjectableAnimationEngine extends AnimationEngine {
-  // The `ApplicationRef` is injected here explicitly to force the dependency ordering.
-  // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they
-  // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.
-  constructor(doc, driver, normalizer) {
-    super(doc, driver, normalizer);
-  }
-  ngOnDestroy() {
-    this.flush();
-  }
-  static ɵfac = function InjectableAnimationEngine_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _InjectableAnimationEngine)(ɵɵinject(DOCUMENT), ɵɵinject(AnimationDriver), ɵɵinject(AnimationStyleNormalizer));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _InjectableAnimationEngine,
-    factory: _InjectableAnimationEngine.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(InjectableAnimationEngine, [{
-    type: Injectable
-  }], () => [{
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: AnimationDriver
-  }, {
-    type: AnimationStyleNormalizer
-  }], null);
-})();
-function instantiateDefaultStyleNormalizer() {
-  return new WebAnimationsStyleNormalizer();
-}
-function instantiateRendererFactory(renderer, engine, zone) {
-  return new AnimationRendererFactory(renderer, engine, zone);
-}
-var SHARED_ANIMATION_PROVIDERS = [{
-  provide: AnimationStyleNormalizer,
-  useFactory: instantiateDefaultStyleNormalizer
-}, {
-  provide: AnimationEngine,
-  useClass: InjectableAnimationEngine
-}, {
-  provide: RendererFactory2,
-  useFactory: instantiateRendererFactory,
-  deps: [DomRendererFactory2, AnimationEngine, NgZone]
-}];
-var BROWSER_ANIMATIONS_PROVIDERS = [{
-  provide: AnimationDriver,
-  useFactory: () => new WebAnimationsDriver()
-}, {
-  provide: ANIMATION_MODULE_TYPE,
-  useValue: "BrowserAnimations"
-}, ...SHARED_ANIMATION_PROVIDERS];
-var BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{
-  provide: AnimationDriver,
-  useClass: NoopAnimationDriver
-}, {
-  provide: ANIMATION_MODULE_TYPE,
-  useValue: "NoopAnimations"
-}, ...SHARED_ANIMATION_PROVIDERS];
-var BrowserAnimationsModule = class _BrowserAnimationsModule {
-  /**
-   * Configures the module based on the specified object.
-   *
-   * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.
-   * @see {@link BrowserAnimationsModuleConfig}
-   *
-   * @usageNotes
-   * When registering the `BrowserAnimationsModule`, you can use the `withConfig`
-   * function as follows:
-   * ```
-   * @NgModule({
-   *   imports: [BrowserAnimationsModule.withConfig(config)]
-   * })
-   * class MyNgModule {}
-   * ```
-   */
-  static withConfig(config) {
-    return {
-      ngModule: _BrowserAnimationsModule,
-      providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS : BROWSER_ANIMATIONS_PROVIDERS
-    };
-  }
-  static ɵfac = function BrowserAnimationsModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserAnimationsModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _BrowserAnimationsModule,
-    exports: [BrowserModule]
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: BROWSER_ANIMATIONS_PROVIDERS,
-    imports: [BrowserModule]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserAnimationsModule, [{
-    type: NgModule,
-    args: [{
-      exports: [BrowserModule],
-      providers: BROWSER_ANIMATIONS_PROVIDERS
-    }]
-  }], null, null);
-})();
-var NoopAnimationsModule = class _NoopAnimationsModule {
-  static ɵfac = function NoopAnimationsModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NoopAnimationsModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _NoopAnimationsModule,
-    exports: [BrowserModule]
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,
-    imports: [BrowserModule]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NoopAnimationsModule, [{
-    type: NgModule,
-    args: [{
-      exports: [BrowserModule],
-      providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS
-    }]
-  }], null, null);
-})();
-function provideNoopAnimations() {
-  return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];
-}
-
-// node_modules/@angular/platform-server/fesm2022/platform-server.mjs
-var import_rxjs = __toESM(require_cjs(), 1);
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __commonJS = (cb, mod) => function __require() {
-  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = {
-    exports: {}
-  }).exports, mod), mod.exports;
-};
-var require_Event = __commonJS({
-  "external/npm/node_modules/domino/lib/Event.js"(exports, module) {
-    "use strict";
-    module.exports = Event;
-    Event.CAPTURING_PHASE = 1;
-    Event.AT_TARGET = 2;
-    Event.BUBBLING_PHASE = 3;
-    function Event(type, dictionary) {
-      this.type = "";
-      this.target = null;
-      this.currentTarget = null;
-      this.eventPhase = Event.AT_TARGET;
-      this.bubbles = false;
-      this.cancelable = false;
-      this.isTrusted = false;
-      this.defaultPrevented = false;
-      this.timeStamp = Date.now();
-      this._propagationStopped = false;
-      this._immediatePropagationStopped = false;
-      this._initialized = true;
-      this._dispatching = false;
-      if (type) this.type = type;
-      if (dictionary) {
-        for (var p in dictionary) {
-          this[p] = dictionary[p];
-        }
-      }
-    }
-    Event.prototype = Object.create(Object.prototype, {
-      constructor: {
-        value: Event
-      },
-      stopPropagation: {
-        value: function stopPropagation() {
-          this._propagationStopped = true;
-        }
-      },
-      stopImmediatePropagation: {
-        value: function stopImmediatePropagation() {
-          this._propagationStopped = true;
-          this._immediatePropagationStopped = true;
-        }
-      },
-      preventDefault: {
-        value: function preventDefault() {
-          if (this.cancelable) this.defaultPrevented = true;
-        }
-      },
-      initEvent: {
-        value: function initEvent(type, bubbles, cancelable) {
-          this._initialized = true;
-          if (this._dispatching) return;
-          this._propagationStopped = false;
-          this._immediatePropagationStopped = false;
-          this.defaultPrevented = false;
-          this.isTrusted = false;
-          this.target = null;
-          this.type = type;
-          this.bubbles = bubbles;
-          this.cancelable = cancelable;
-        }
-      }
-    });
-  }
-});
-var require_UIEvent = __commonJS({
-  "external/npm/node_modules/domino/lib/UIEvent.js"(exports, module) {
-    "use strict";
-    var Event = require_Event();
-    module.exports = UIEvent;
-    function UIEvent() {
-      Event.call(this);
-      this.view = null;
-      this.detail = 0;
-    }
-    UIEvent.prototype = Object.create(Event.prototype, {
-      constructor: {
-        value: UIEvent
-      },
-      initUIEvent: {
-        value: function(type, bubbles, cancelable, view, detail) {
-          this.initEvent(type, bubbles, cancelable);
-          this.view = view;
-          this.detail = detail;
-        }
-      }
-    });
-  }
-});
-var require_MouseEvent = __commonJS({
-  "external/npm/node_modules/domino/lib/MouseEvent.js"(exports, module) {
-    "use strict";
-    var UIEvent = require_UIEvent();
-    module.exports = MouseEvent;
-    function MouseEvent() {
-      UIEvent.call(this);
-      this.screenX = this.screenY = this.clientX = this.clientY = 0;
-      this.ctrlKey = this.altKey = this.shiftKey = this.metaKey = false;
-      this.button = 0;
-      this.buttons = 1;
-      this.relatedTarget = null;
-    }
-    MouseEvent.prototype = Object.create(UIEvent.prototype, {
-      constructor: {
-        value: MouseEvent
-      },
-      initMouseEvent: {
-        value: function(type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {
-          this.initEvent(type, bubbles, cancelable, view, detail);
-          this.screenX = screenX;
-          this.screenY = screenY;
-          this.clientX = clientX;
-          this.clientY = clientY;
-          this.ctrlKey = ctrlKey;
-          this.altKey = altKey;
-          this.shiftKey = shiftKey;
-          this.metaKey = metaKey;
-          this.button = button;
-          switch (button) {
-            case 0:
-              this.buttons = 1;
-              break;
-            case 1:
-              this.buttons = 4;
-              break;
-            case 2:
-              this.buttons = 2;
-              break;
-            default:
-              this.buttons = 0;
-              break;
-          }
-          this.relatedTarget = relatedTarget;
-        }
-      },
-      getModifierState: {
-        value: function(key) {
-          switch (key) {
-            case "Alt":
-              return this.altKey;
-            case "Control":
-              return this.ctrlKey;
-            case "Shift":
-              return this.shiftKey;
-            case "Meta":
-              return this.metaKey;
-            default:
-              return false;
-          }
-        }
-      }
-    });
-  }
-});
-var require_DOMException = __commonJS({
-  "external/npm/node_modules/domino/lib/DOMException.js"(exports, module) {
-    "use strict";
-    module.exports = DOMException;
-    var INDEX_SIZE_ERR = 1;
-    var HIERARCHY_REQUEST_ERR = 3;
-    var WRONG_DOCUMENT_ERR = 4;
-    var INVALID_CHARACTER_ERR = 5;
-    var NO_MODIFICATION_ALLOWED_ERR = 7;
-    var NOT_FOUND_ERR = 8;
-    var NOT_SUPPORTED_ERR = 9;
-    var INVALID_STATE_ERR = 11;
-    var SYNTAX_ERR = 12;
-    var INVALID_MODIFICATION_ERR = 13;
-    var NAMESPACE_ERR = 14;
-    var INVALID_ACCESS_ERR = 15;
-    var TYPE_MISMATCH_ERR = 17;
-    var SECURITY_ERR = 18;
-    var NETWORK_ERR = 19;
-    var ABORT_ERR = 20;
-    var URL_MISMATCH_ERR = 21;
-    var QUOTA_EXCEEDED_ERR = 22;
-    var TIMEOUT_ERR = 23;
-    var INVALID_NODE_TYPE_ERR = 24;
-    var DATA_CLONE_ERR = 25;
-    var names = [null, "INDEX_SIZE_ERR", null, "HIERARCHY_REQUEST_ERR", "WRONG_DOCUMENT_ERR", "INVALID_CHARACTER_ERR", null, "NO_MODIFICATION_ALLOWED_ERR", "NOT_FOUND_ERR", "NOT_SUPPORTED_ERR", "INUSE_ATTRIBUTE_ERR", "INVALID_STATE_ERR", "SYNTAX_ERR", "INVALID_MODIFICATION_ERR", "NAMESPACE_ERR", "INVALID_ACCESS_ERR", null, "TYPE_MISMATCH_ERR", "SECURITY_ERR", "NETWORK_ERR", "ABORT_ERR", "URL_MISMATCH_ERR", "QUOTA_EXCEEDED_ERR", "TIMEOUT_ERR", "INVALID_NODE_TYPE_ERR", "DATA_CLONE_ERR"];
-    var messages = [null, "INDEX_SIZE_ERR (1): the index is not in the allowed range", null, "HIERARCHY_REQUEST_ERR (3): the operation would yield an incorrect nodes model", "WRONG_DOCUMENT_ERR (4): the object is in the wrong Document, a call to importNode is required", "INVALID_CHARACTER_ERR (5): the string contains invalid characters", null, "NO_MODIFICATION_ALLOWED_ERR (7): the object can not be modified", "NOT_FOUND_ERR (8): the object can not be found here", "NOT_SUPPORTED_ERR (9): this operation is not supported", "INUSE_ATTRIBUTE_ERR (10): setAttributeNode called on owned Attribute", "INVALID_STATE_ERR (11): the object is in an invalid state", "SYNTAX_ERR (12): the string did not match the expected pattern", "INVALID_MODIFICATION_ERR (13): the object can not be modified in this way", "NAMESPACE_ERR (14): the operation is not allowed by Namespaces in XML", "INVALID_ACCESS_ERR (15): the object does not support the operation or argument", null, "TYPE_MISMATCH_ERR (17): the type of the object does not match the expected type", "SECURITY_ERR (18): the operation is insecure", "NETWORK_ERR (19): a network error occurred", "ABORT_ERR (20): the user aborted an operation", "URL_MISMATCH_ERR (21): the given URL does not match another URL", "QUOTA_EXCEEDED_ERR (22): the quota has been exceeded", "TIMEOUT_ERR (23): a timeout occurred", "INVALID_NODE_TYPE_ERR (24): the supplied node is invalid or has an invalid ancestor for this operation", "DATA_CLONE_ERR (25): the object can not be cloned."];
-    var constants = {
-      INDEX_SIZE_ERR,
-      DOMSTRING_SIZE_ERR: 2,
-      HIERARCHY_REQUEST_ERR,
-      WRONG_DOCUMENT_ERR,
-      INVALID_CHARACTER_ERR,
-      NO_DATA_ALLOWED_ERR: 6,
-      NO_MODIFICATION_ALLOWED_ERR,
-      NOT_FOUND_ERR,
-      NOT_SUPPORTED_ERR,
-      INUSE_ATTRIBUTE_ERR: 10,
-      INVALID_STATE_ERR,
-      SYNTAX_ERR,
-      INVALID_MODIFICATION_ERR,
-      NAMESPACE_ERR,
-      INVALID_ACCESS_ERR,
-      VALIDATION_ERR: 16,
-      TYPE_MISMATCH_ERR,
-      SECURITY_ERR,
-      NETWORK_ERR,
-      ABORT_ERR,
-      URL_MISMATCH_ERR,
-      QUOTA_EXCEEDED_ERR,
-      TIMEOUT_ERR,
-      INVALID_NODE_TYPE_ERR,
-      DATA_CLONE_ERR
-    };
-    function DOMException(code) {
-      Error.call(this);
-      Error.captureStackTrace(this, this.constructor);
-      this.code = code;
-      this.message = messages[code];
-      this.name = names[code];
-    }
-    DOMException.prototype.__proto__ = Error.prototype;
-    for (c in constants) {
-      v = {
-        value: constants[c]
-      };
-      Object.defineProperty(DOMException, c, v);
-      Object.defineProperty(DOMException.prototype, c, v);
-    }
-    var v;
-    var c;
-  }
-});
-var require_config = __commonJS({
-  "external/npm/node_modules/domino/lib/config.js"(exports) {
-    exports.isApiWritable = !globalThis.__domino_frozen__;
-  }
-});
-var require_utils = __commonJS({
-  "external/npm/node_modules/domino/lib/utils.js"(exports) {
-    "use strict";
-    var DOMException = require_DOMException();
-    var ERR = DOMException;
-    var isApiWritable = require_config().isApiWritable;
-    exports.NAMESPACE = {
-      HTML: "http://www.w3.org/1999/xhtml",
-      XML: "http://www.w3.org/XML/1998/namespace",
-      XMLNS: "http://www.w3.org/2000/xmlns/",
-      MATHML: "http://www.w3.org/1998/Math/MathML",
-      SVG: "http://www.w3.org/2000/svg",
-      XLINK: "http://www.w3.org/1999/xlink"
-    };
-    exports.IndexSizeError = function() {
-      throw new DOMException(ERR.INDEX_SIZE_ERR);
-    };
-    exports.HierarchyRequestError = function() {
-      throw new DOMException(ERR.HIERARCHY_REQUEST_ERR);
-    };
-    exports.WrongDocumentError = function() {
-      throw new DOMException(ERR.WRONG_DOCUMENT_ERR);
-    };
-    exports.InvalidCharacterError = function() {
-      throw new DOMException(ERR.INVALID_CHARACTER_ERR);
-    };
-    exports.NoModificationAllowedError = function() {
-      throw new DOMException(ERR.NO_MODIFICATION_ALLOWED_ERR);
-    };
-    exports.NotFoundError = function() {
-      throw new DOMException(ERR.NOT_FOUND_ERR);
-    };
-    exports.NotSupportedError = function() {
-      throw new DOMException(ERR.NOT_SUPPORTED_ERR);
-    };
-    exports.InvalidStateError = function() {
-      throw new DOMException(ERR.INVALID_STATE_ERR);
-    };
-    exports.SyntaxError = function() {
-      throw new DOMException(ERR.SYNTAX_ERR);
-    };
-    exports.InvalidModificationError = function() {
-      throw new DOMException(ERR.INVALID_MODIFICATION_ERR);
-    };
-    exports.NamespaceError = function() {
-      throw new DOMException(ERR.NAMESPACE_ERR);
-    };
-    exports.InvalidAccessError = function() {
-      throw new DOMException(ERR.INVALID_ACCESS_ERR);
-    };
-    exports.TypeMismatchError = function() {
-      throw new DOMException(ERR.TYPE_MISMATCH_ERR);
-    };
-    exports.SecurityError = function() {
-      throw new DOMException(ERR.SECURITY_ERR);
-    };
-    exports.NetworkError = function() {
-      throw new DOMException(ERR.NETWORK_ERR);
-    };
-    exports.AbortError = function() {
-      throw new DOMException(ERR.ABORT_ERR);
-    };
-    exports.UrlMismatchError = function() {
-      throw new DOMException(ERR.URL_MISMATCH_ERR);
-    };
-    exports.QuotaExceededError = function() {
-      throw new DOMException(ERR.QUOTA_EXCEEDED_ERR);
-    };
-    exports.TimeoutError = function() {
-      throw new DOMException(ERR.TIMEOUT_ERR);
-    };
-    exports.InvalidNodeTypeError = function() {
-      throw new DOMException(ERR.INVALID_NODE_TYPE_ERR);
-    };
-    exports.DataCloneError = function() {
-      throw new DOMException(ERR.DATA_CLONE_ERR);
-    };
-    exports.nyi = function() {
-      throw new Error("NotYetImplemented");
-    };
-    exports.shouldOverride = function() {
-      throw new Error("Abstract function; should be overriding in subclass.");
-    };
-    exports.assert = function(expr, msg) {
-      if (!expr) {
-        throw new Error("Assertion failed: " + (msg || "") + "\n" + new Error().stack);
-      }
-    };
-    exports.expose = function(src, c) {
-      for (var n in src) {
-        Object.defineProperty(c.prototype, n, {
-          value: src[n],
-          writable: isApiWritable
-        });
-      }
-    };
-    exports.merge = function(a, b) {
-      for (var n in b) {
-        a[n] = b[n];
-      }
-    };
-    exports.documentOrder = function(n, m) {
-      return 3 - (n.compareDocumentPosition(m) & 6);
-    };
-    exports.toASCIILowerCase = function(s) {
-      return s.replace(/[A-Z]+/g, function(c) {
-        return c.toLowerCase();
-      });
-    };
-    exports.toASCIIUpperCase = function(s) {
-      return s.replace(/[a-z]+/g, function(c) {
-        return c.toUpperCase();
-      });
-    };
-  }
-});
-var require_EventTarget = __commonJS({
-  "external/npm/node_modules/domino/lib/EventTarget.js"(exports, module) {
-    "use strict";
-    var Event = require_Event();
-    var MouseEvent = require_MouseEvent();
-    var utils = require_utils();
-    module.exports = EventTarget;
-    function EventTarget() {
-    }
-    EventTarget.prototype = {
-      addEventListener: function addEventListener(type, listener, capture) {
-        if (!listener) return;
-        if (capture === void 0) capture = false;
-        if (!this._listeners) this._listeners = /* @__PURE__ */ Object.create(null);
-        if (!this._listeners[type]) this._listeners[type] = [];
-        var list = this._listeners[type];
-        for (var i = 0, n = list.length; i < n; i++) {
-          var l = list[i];
-          if (l.listener === listener && l.capture === capture) return;
-        }
-        var obj = {
-          listener,
-          capture
-        };
-        if (typeof listener === "function") obj.f = listener;
-        list.push(obj);
-      },
-      removeEventListener: function removeEventListener(type, listener, capture) {
-        if (capture === void 0) capture = false;
-        if (this._listeners) {
-          var list = this._listeners[type];
-          if (list) {
-            for (var i = 0, n = list.length; i < n; i++) {
-              var l = list[i];
-              if (l.listener === listener && l.capture === capture) {
-                if (list.length === 1) {
-                  this._listeners[type] = void 0;
-                } else {
-                  list.splice(i, 1);
-                }
-                return;
-              }
-            }
-          }
-        }
-      },
-      dispatchEvent: function dispatchEvent(event) {
-        return this._dispatchEvent(event, false);
-      },
-      _dispatchEvent: function _dispatchEvent(event, trusted) {
-        if (typeof trusted !== "boolean") trusted = false;
-        function invoke(target, event2) {
-          var type = event2.type, phase = event2.eventPhase;
-          event2.currentTarget = target;
-          if (phase !== Event.CAPTURING_PHASE && target._handlers && target._handlers[type]) {
-            var handler = target._handlers[type];
-            var rv;
-            if (typeof handler === "function") {
-              rv = handler.call(event2.currentTarget, event2);
-            } else {
-              var f = handler.handleEvent;
-              if (typeof f !== "function") throw new TypeError("handleEvent property of event handler object isnot a function.");
-              rv = f.call(handler, event2);
-            }
-            switch (event2.type) {
-              case "mouseover":
-                if (rv === true) event2.preventDefault();
-                break;
-              case "beforeunload":
-              default:
-                if (rv === false) event2.preventDefault();
-                break;
-            }
-          }
-          var list = target._listeners && target._listeners[type];
-          if (!list) return;
-          list = list.slice();
-          for (var i2 = 0, n2 = list.length; i2 < n2; i2++) {
-            if (event2._immediatePropagationStopped) return;
-            var l = list[i2];
-            if (phase === Event.CAPTURING_PHASE && !l.capture || phase === Event.BUBBLING_PHASE && l.capture) continue;
-            if (l.f) {
-              l.f.call(event2.currentTarget, event2);
-            } else {
-              var fn = l.listener.handleEvent;
-              if (typeof fn !== "function") throw new TypeError("handleEvent property of event listener object is not a function.");
-              fn.call(l.listener, event2);
-            }
-          }
-        }
-        if (!event._initialized || event._dispatching) utils.InvalidStateError();
-        event.isTrusted = trusted;
-        event._dispatching = true;
-        event.target = this;
-        var ancestors = [];
-        for (var n = this.parentNode; n; n = n.parentNode) ancestors.push(n);
-        event.eventPhase = Event.CAPTURING_PHASE;
-        for (var i = ancestors.length - 1; i >= 0; i--) {
-          invoke(ancestors[i], event);
-          if (event._propagationStopped) break;
-        }
-        if (!event._propagationStopped) {
-          event.eventPhase = Event.AT_TARGET;
-          invoke(this, event);
-        }
-        if (event.bubbles && !event._propagationStopped) {
-          event.eventPhase = Event.BUBBLING_PHASE;
-          for (var ii = 0, nn = ancestors.length; ii < nn; ii++) {
-            invoke(ancestors[ii], event);
-            if (event._propagationStopped) break;
-          }
-        }
-        event._dispatching = false;
-        event.eventPhase = Event.AT_TARGET;
-        event.currentTarget = null;
-        if (trusted && !event.defaultPrevented && event instanceof MouseEvent) {
-          switch (event.type) {
-            case "mousedown":
-              this._armed = {
-                x: event.clientX,
-                y: event.clientY,
-                t: event.timeStamp
-              };
-              break;
-            case "mouseout":
-            case "mouseover":
-              this._armed = null;
-              break;
-            case "mouseup":
-              if (this._isClick(event)) this._doClick(event);
-              this._armed = null;
-              break;
-          }
-        }
-        return !event.defaultPrevented;
-      },
-      _isClick: function(event) {
-        return this._armed !== null && event.type === "mouseup" && event.isTrusted && event.button === 0 && event.timeStamp - this._armed.t < 1e3 && Math.abs(event.clientX - this._armed.x) < 10 && Math.abs(event.clientY - this._armed.Y) < 10;
-      },
-      _doClick: function(event) {
-        if (this._click_in_progress) return;
-        this._click_in_progress = true;
-        var activated = this;
-        while (activated && !activated._post_click_activation_steps) activated = activated.parentNode;
-        if (activated && activated._pre_click_activation_steps) {
-          activated._pre_click_activation_steps();
-        }
-        var click = this.ownerDocument.createEvent("MouseEvent");
-        click.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, event.screenX, event.screenY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, null);
-        var result = this._dispatchEvent(click, true);
-        if (activated) {
-          if (result) {
-            if (activated._post_click_activation_steps) activated._post_click_activation_steps(click);
-          } else {
-            if (activated._cancelled_activation_steps) activated._cancelled_activation_steps();
-          }
-        }
-      },
-      _setEventHandler: function _setEventHandler(type, handler) {
-        if (!this._handlers) this._handlers = /* @__PURE__ */ Object.create(null);
-        this._handlers[type] = handler;
-      },
-      _getEventHandler: function _getEventHandler(type) {
-        return this._handlers && this._handlers[type] || null;
-      }
-    };
-  }
-});
-var require_LinkedList = __commonJS({
-  "external/npm/node_modules/domino/lib/LinkedList.js"(exports, module) {
-    "use strict";
-    var utils = require_utils();
-    var LinkedList = module.exports = {
-      valid: function(a) {
-        utils.assert(a, "list falsy");
-        utils.assert(a._previousSibling, "previous falsy");
-        utils.assert(a._nextSibling, "next falsy");
-        return true;
-      },
-      insertBefore: function(a, b) {
-        utils.assert(LinkedList.valid(a) && LinkedList.valid(b));
-        var a_first = a, a_last = a._previousSibling;
-        var b_first = b, b_last = b._previousSibling;
-        a_first._previousSibling = b_last;
-        a_last._nextSibling = b_first;
-        b_last._nextSibling = a_first;
-        b_first._previousSibling = a_last;
-        utils.assert(LinkedList.valid(a) && LinkedList.valid(b));
-      },
-      replace: function(a, b) {
-        utils.assert(LinkedList.valid(a) && (b === null || LinkedList.valid(b)));
-        if (b !== null) {
-          LinkedList.insertBefore(b, a);
-        }
-        LinkedList.remove(a);
-        utils.assert(LinkedList.valid(a) && (b === null || LinkedList.valid(b)));
-      },
-      remove: function(a) {
-        utils.assert(LinkedList.valid(a));
-        var prev = a._previousSibling;
-        if (prev === a) {
-          return;
-        }
-        var next = a._nextSibling;
-        prev._nextSibling = next;
-        next._previousSibling = prev;
-        a._previousSibling = a._nextSibling = a;
-        utils.assert(LinkedList.valid(a));
-      }
-    };
-  }
-});
-var require_NodeUtils = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeUtils.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      serializeOne,
-      ɵescapeMatchingClosingTag: escapeMatchingClosingTag,
-      ɵescapeClosingCommentTag: escapeClosingCommentTag,
-      ɵescapeProcessingInstructionContent: escapeProcessingInstructionContent
-    };
-    var utils = require_utils();
-    var NAMESPACE = utils.NAMESPACE;
-    var hasRawContent = {
-      STYLE: true,
-      SCRIPT: true,
-      XMP: true,
-      IFRAME: true,
-      NOEMBED: true,
-      NOFRAMES: true,
-      PLAINTEXT: true
-    };
-    var emptyElements = {
-      area: true,
-      base: true,
-      basefont: true,
-      bgsound: true,
-      br: true,
-      col: true,
-      embed: true,
-      frame: true,
-      hr: true,
-      img: true,
-      input: true,
-      keygen: true,
-      link: true,
-      meta: true,
-      param: true,
-      source: true,
-      track: true,
-      wbr: true
-    };
-    var extraNewLine = {};
-    var ESCAPE_REGEXP = /[&<>\u00A0]/g;
-    var ESCAPE_ATTR_REGEXP = /[&"<>\u00A0]/g;
-    function escape(s) {
-      if (!ESCAPE_REGEXP.test(s)) {
-        return s;
-      }
-      return s.replace(ESCAPE_REGEXP, (c) => {
-        switch (c) {
-          case "&":
-            return "&amp;";
-          case "<":
-            return "&lt;";
-          case ">":
-            return "&gt;";
-          case " ":
-            return "&nbsp;";
-        }
-      });
-    }
-    function escapeAttr(s) {
-      if (!ESCAPE_ATTR_REGEXP.test(s)) {
-        return s;
-      }
-      return s.replace(ESCAPE_ATTR_REGEXP, (c) => {
-        switch (c) {
-          case "<":
-            return "&lt;";
-          case ">":
-            return "&gt;";
-          case "&":
-            return "&amp;";
-          case '"':
-            return "&quot;";
-          case " ":
-            return "&nbsp;";
-        }
-      });
-    }
-    function attrname(a) {
-      var ns = a.namespaceURI;
-      if (!ns) return a.localName;
-      if (ns === NAMESPACE.XML) return "xml:" + a.localName;
-      if (ns === NAMESPACE.XLINK) return "xlink:" + a.localName;
-      if (ns === NAMESPACE.XMLNS) {
-        if (a.localName === "xmlns") return "xmlns";
-        else return "xmlns:" + a.localName;
-      }
-      return a.name;
-    }
-    function escapeMatchingClosingTag(rawText, parentTag) {
-      const parentClosingTag = "</" + parentTag;
-      if (!rawText.toLowerCase().includes(parentClosingTag)) {
-        return rawText;
-      }
-      const result = [...rawText];
-      const matches = rawText.matchAll(new RegExp(parentClosingTag, "ig"));
-      for (const match of matches) {
-        result[match.index] = "&lt;";
-      }
-      return result.join("");
-    }
-    var CLOSING_COMMENT_REGEXP = /--!?>/;
-    function escapeClosingCommentTag(rawContent) {
-      if (!CLOSING_COMMENT_REGEXP.test(rawContent)) {
-        return rawContent;
-      }
-      return rawContent.replace(/(--\!?)>/g, "$1&gt;");
-    }
-    function escapeProcessingInstructionContent(rawContent) {
-      return rawContent.includes(">") ? rawContent.replaceAll(">", "&gt;") : rawContent;
-    }
-    function serializeOne(kid, parent) {
-      var s = "";
-      switch (kid.nodeType) {
-        case 1:
-          var ns = kid.namespaceURI;
-          var html = ns === NAMESPACE.HTML;
-          var tagname = html || ns === NAMESPACE.SVG || ns === NAMESPACE.MATHML ? kid.localName : kid.tagName;
-          s += "<" + tagname;
-          for (var j = 0, k = kid._numattrs; j < k; j++) {
-            var a = kid._attr(j);
-            s += " " + attrname(a);
-            if (a.value !== void 0) s += '="' + escapeAttr(a.value) + '"';
-          }
-          s += ">";
-          if (!(html && emptyElements[tagname])) {
-            var ss = kid.serialize();
-            if (hasRawContent[tagname.toUpperCase()]) {
-              ss = escapeMatchingClosingTag(ss, tagname);
-            }
-            if (html && extraNewLine[tagname] && ss.charAt(0) === "\n") s += "\n";
-            s += ss;
-            s += "</" + tagname + ">";
-          }
-          break;
-        case 3:
-        case 4:
-          var parenttag;
-          if (parent.nodeType === 1 && parent.namespaceURI === NAMESPACE.HTML) parenttag = parent.tagName;
-          else parenttag = "";
-          if (hasRawContent[parenttag] || parenttag === "NOSCRIPT" && parent.ownerDocument._scripting_enabled) {
-            s += kid.data;
-          } else {
-            s += escape(kid.data);
-          }
-          break;
-        case 8:
-          s += "<!--" + escapeClosingCommentTag(kid.data) + "-->";
-          break;
-        case 7:
-          const content = escapeProcessingInstructionContent(kid.data);
-          s += "<?" + kid.target + " " + content + "?>";
-          break;
-        case 10:
-          s += "<!DOCTYPE " + kid.name;
-          if (false) {
-            if (kid.publicID) {
-              s += ' PUBLIC "' + kid.publicId + '"';
-            }
-            if (kid.systemId) {
-              s += ' "' + kid.systemId + '"';
-            }
-          }
-          s += ">";
-          break;
-        default:
-          utils.InvalidStateError();
-      }
-      return s;
-    }
-  }
-});
-var require_Node = __commonJS({
-  "external/npm/node_modules/domino/lib/Node.js"(exports, module) {
-    "use strict";
-    module.exports = Node;
-    var EventTarget = require_EventTarget();
-    var LinkedList = require_LinkedList();
-    var NodeUtils = require_NodeUtils();
-    var utils = require_utils();
-    function Node() {
-      EventTarget.call(this);
-      this.parentNode = null;
-      this._nextSibling = this._previousSibling = this;
-      this._index = void 0;
-    }
-    var ELEMENT_NODE = Node.ELEMENT_NODE = 1;
-    var ATTRIBUTE_NODE = Node.ATTRIBUTE_NODE = 2;
-    var TEXT_NODE = Node.TEXT_NODE = 3;
-    var CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE = 4;
-    var ENTITY_REFERENCE_NODE = Node.ENTITY_REFERENCE_NODE = 5;
-    var ENTITY_NODE = Node.ENTITY_NODE = 6;
-    var PROCESSING_INSTRUCTION_NODE = Node.PROCESSING_INSTRUCTION_NODE = 7;
-    var COMMENT_NODE = Node.COMMENT_NODE = 8;
-    var DOCUMENT_NODE = Node.DOCUMENT_NODE = 9;
-    var DOCUMENT_TYPE_NODE = Node.DOCUMENT_TYPE_NODE = 10;
-    var DOCUMENT_FRAGMENT_NODE = Node.DOCUMENT_FRAGMENT_NODE = 11;
-    var NOTATION_NODE = Node.NOTATION_NODE = 12;
-    var DOCUMENT_POSITION_DISCONNECTED = Node.DOCUMENT_POSITION_DISCONNECTED = 1;
-    var DOCUMENT_POSITION_PRECEDING = Node.DOCUMENT_POSITION_PRECEDING = 2;
-    var DOCUMENT_POSITION_FOLLOWING = Node.DOCUMENT_POSITION_FOLLOWING = 4;
-    var DOCUMENT_POSITION_CONTAINS = Node.DOCUMENT_POSITION_CONTAINS = 8;
-    var DOCUMENT_POSITION_CONTAINED_BY = Node.DOCUMENT_POSITION_CONTAINED_BY = 16;
-    var DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32;
-    Node.prototype = Object.create(EventTarget.prototype, {
-      baseURI: {
-        get: utils.nyi
-      },
-      parentElement: {
-        get: function() {
-          return this.parentNode && this.parentNode.nodeType === ELEMENT_NODE ? this.parentNode : null;
-        }
-      },
-      hasChildNodes: {
-        value: utils.shouldOverride
-      },
-      firstChild: {
-        get: utils.shouldOverride
-      },
-      lastChild: {
-        get: utils.shouldOverride
-      },
-      isConnected: {
-        get: function() {
-          let node = this;
-          while (node != null) {
-            if (node.nodeType === Node.DOCUMENT_NODE) {
-              return true;
-            }
-            node = node.parentNode;
-            if (node != null && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
-              node = node.host;
-            }
-          }
-          return false;
-        }
-      },
-      previousSibling: {
-        get: function() {
-          var parent = this.parentNode;
-          if (!parent) return null;
-          if (this === parent.firstChild) return null;
-          return this._previousSibling;
-        }
-      },
-      nextSibling: {
-        get: function() {
-          var parent = this.parentNode, next = this._nextSibling;
-          if (!parent) return null;
-          if (next === parent.firstChild) return null;
-          return next;
-        }
-      },
-      textContent: {
-        get: function() {
-          return null;
-        },
-        set: function(v) {
-        }
-      },
-      innerText: {
-        get: function() {
-          return null;
-        },
-        set: function(v) {
-        }
-      },
-      _countChildrenOfType: {
-        value: function(type) {
-          var sum = 0;
-          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-            if (kid.nodeType === type) sum++;
-          }
-          return sum;
-        }
-      },
-      _ensureInsertValid: {
-        value: function _ensureInsertValid(node, child, isPreinsert) {
-          var parent = this, i, kid;
-          if (!node.nodeType) throw new TypeError("not a node");
-          switch (parent.nodeType) {
-            case DOCUMENT_NODE:
-            case DOCUMENT_FRAGMENT_NODE:
-            case ELEMENT_NODE:
-              break;
-            default:
-              utils.HierarchyRequestError();
-          }
-          if (node.isAncestor(parent)) utils.HierarchyRequestError();
-          if (child !== null || !isPreinsert) {
-            if (child.parentNode !== parent) utils.NotFoundError();
-          }
-          switch (node.nodeType) {
-            case DOCUMENT_FRAGMENT_NODE:
-            case DOCUMENT_TYPE_NODE:
-            case ELEMENT_NODE:
-            case TEXT_NODE:
-            case PROCESSING_INSTRUCTION_NODE:
-            case COMMENT_NODE:
-              break;
-            default:
-              utils.HierarchyRequestError();
-          }
-          if (parent.nodeType === DOCUMENT_NODE) {
-            switch (node.nodeType) {
-              case TEXT_NODE:
-                utils.HierarchyRequestError();
-                break;
-              case DOCUMENT_FRAGMENT_NODE:
-                if (node._countChildrenOfType(TEXT_NODE) > 0) utils.HierarchyRequestError();
-                switch (node._countChildrenOfType(ELEMENT_NODE)) {
-                  case 0:
-                    break;
-                  case 1:
-                    if (child !== null) {
-                      if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-                      for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {
-                        if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-                      }
-                    }
-                    i = parent._countChildrenOfType(ELEMENT_NODE);
-                    if (isPreinsert) {
-                      if (i > 0) utils.HierarchyRequestError();
-                    } else {
-                      if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();
-                    }
-                    break;
-                  default:
-                    utils.HierarchyRequestError();
-                }
-                break;
-              case ELEMENT_NODE:
-                if (child !== null) {
-                  if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-                  for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {
-                    if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-                  }
-                }
-                i = parent._countChildrenOfType(ELEMENT_NODE);
-                if (isPreinsert) {
-                  if (i > 0) utils.HierarchyRequestError();
-                } else {
-                  if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();
-                }
-                break;
-              case DOCUMENT_TYPE_NODE:
-                if (child === null) {
-                  if (parent._countChildrenOfType(ELEMENT_NODE)) utils.HierarchyRequestError();
-                } else {
-                  for (kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {
-                    if (kid === child) break;
-                    if (kid.nodeType === ELEMENT_NODE) utils.HierarchyRequestError();
-                  }
-                }
-                i = parent._countChildrenOfType(DOCUMENT_TYPE_NODE);
-                if (isPreinsert) {
-                  if (i > 0) utils.HierarchyRequestError();
-                } else {
-                  if (i > 1 || i === 1 && child.nodeType !== DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-                }
-                break;
-            }
-          } else {
-            if (node.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();
-          }
-        }
-      },
-      insertBefore: {
-        value: function insertBefore(node, child) {
-          var parent = this;
-          parent._ensureInsertValid(node, child, true);
-          var refChild = child;
-          if (refChild === node) {
-            refChild = node.nextSibling;
-          }
-          parent.doc.adoptNode(node);
-          node._insertOrReplace(parent, refChild, false);
-          return node;
-        }
-      },
-      appendChild: {
-        value: function(child) {
-          return this.insertBefore(child, null);
-        }
-      },
-      _appendChild: {
-        value: function(child) {
-          child._insertOrReplace(this, null, false);
-        }
-      },
-      removeChild: {
-        value: function removeChild(child) {
-          var parent = this;
-          if (!child.nodeType) throw new TypeError("not a node");
-          if (child.parentNode !== parent) utils.NotFoundError();
-          child.remove();
-          return child;
-        }
-      },
-      replaceChild: {
-        value: function replaceChild(node, child) {
-          var parent = this;
-          parent._ensureInsertValid(node, child, false);
-          if (node.doc !== parent.doc) {
-            parent.doc.adoptNode(node);
-          }
-          node._insertOrReplace(parent, child, true);
-          return child;
-        }
-      },
-      contains: {
-        value: function contains(node) {
-          if (node === null) {
-            return false;
-          }
-          if (this === node) {
-            return true;
-          }
-          return (this.compareDocumentPosition(node) & DOCUMENT_POSITION_CONTAINED_BY) !== 0;
-        }
-      },
-      compareDocumentPosition: {
-        value: function compareDocumentPosition(that) {
-          if (this === that) return 0;
-          if (this.doc !== that.doc || this.rooted !== that.rooted) return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
-          var these = [], those = [];
-          for (var n = this; n !== null; n = n.parentNode) these.push(n);
-          for (n = that; n !== null; n = n.parentNode) those.push(n);
-          these.reverse();
-          those.reverse();
-          if (these[0] !== those[0]) return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
-          n = Math.min(these.length, those.length);
-          for (var i = 1; i < n; i++) {
-            if (these[i] !== those[i]) {
-              if (these[i].index < those[i].index) return DOCUMENT_POSITION_FOLLOWING;
-              else return DOCUMENT_POSITION_PRECEDING;
-            }
-          }
-          if (these.length < those.length) return DOCUMENT_POSITION_FOLLOWING + DOCUMENT_POSITION_CONTAINED_BY;
-          else return DOCUMENT_POSITION_PRECEDING + DOCUMENT_POSITION_CONTAINS;
-        }
-      },
-      isSameNode: {
-        value: function isSameNode(node) {
-          return this === node;
-        }
-      },
-      isEqualNode: {
-        value: function isEqualNode(node) {
-          if (!node) return false;
-          if (node.nodeType !== this.nodeType) return false;
-          if (!this.isEqual(node)) return false;
-          for (var c1 = this.firstChild, c2 = node.firstChild; c1 && c2; c1 = c1.nextSibling, c2 = c2.nextSibling) {
-            if (!c1.isEqualNode(c2)) return false;
-          }
-          return c1 === null && c2 === null;
-        }
-      },
-      cloneNode: {
-        value: function(deep) {
-          var clone = this.clone();
-          if (deep) {
-            for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-              clone._appendChild(kid.cloneNode(true));
-            }
-          }
-          return clone;
-        }
-      },
-      lookupPrefix: {
-        value: function lookupPrefix(ns) {
-          var e;
-          if (ns === "" || ns === null || ns === void 0) return null;
-          switch (this.nodeType) {
-            case ELEMENT_NODE:
-              return this._lookupNamespacePrefix(ns, this);
-            case DOCUMENT_NODE:
-              e = this.documentElement;
-              return e ? e.lookupPrefix(ns) : null;
-            case ENTITY_NODE:
-            case NOTATION_NODE:
-            case DOCUMENT_FRAGMENT_NODE:
-            case DOCUMENT_TYPE_NODE:
-              return null;
-            case ATTRIBUTE_NODE:
-              e = this.ownerElement;
-              return e ? e.lookupPrefix(ns) : null;
-            default:
-              e = this.parentElement;
-              return e ? e.lookupPrefix(ns) : null;
-          }
-        }
-      },
-      lookupNamespaceURI: {
-        value: function lookupNamespaceURI(prefix) {
-          if (prefix === "" || prefix === void 0) {
-            prefix = null;
-          }
-          var e;
-          switch (this.nodeType) {
-            case ELEMENT_NODE:
-              return utils.shouldOverride();
-            case DOCUMENT_NODE:
-              e = this.documentElement;
-              return e ? e.lookupNamespaceURI(prefix) : null;
-            case ENTITY_NODE:
-            case NOTATION_NODE:
-            case DOCUMENT_TYPE_NODE:
-            case DOCUMENT_FRAGMENT_NODE:
-              return null;
-            case ATTRIBUTE_NODE:
-              e = this.ownerElement;
-              return e ? e.lookupNamespaceURI(prefix) : null;
-            default:
-              e = this.parentElement;
-              return e ? e.lookupNamespaceURI(prefix) : null;
-          }
-        }
-      },
-      isDefaultNamespace: {
-        value: function isDefaultNamespace(ns) {
-          if (ns === "" || ns === void 0) {
-            ns = null;
-          }
-          var defaultNamespace = this.lookupNamespaceURI(null);
-          return defaultNamespace === ns;
-        }
-      },
-      index: {
-        get: function() {
-          var parent = this.parentNode;
-          if (this === parent.firstChild) return 0;
-          var kids = parent.childNodes;
-          if (this._index === void 0 || kids[this._index] !== this) {
-            for (var i = 0; i < kids.length; i++) {
-              kids[i]._index = i;
-            }
-            utils.assert(kids[this._index] === this);
-          }
-          return this._index;
-        }
-      },
-      isAncestor: {
-        value: function(that) {
-          if (this.doc !== that.doc) return false;
-          if (this.rooted !== that.rooted) return false;
-          for (var e = that; e; e = e.parentNode) {
-            if (e === this) return true;
-          }
-          return false;
-        }
-      },
-      ensureSameDoc: {
-        value: function(that) {
-          if (that.ownerDocument === null) {
-            that.ownerDocument = this.doc;
-          } else if (that.ownerDocument !== this.doc) {
-            utils.WrongDocumentError();
-          }
-        }
-      },
-      removeChildren: {
-        value: utils.shouldOverride
-      },
-      _insertOrReplace: {
-        value: function _insertOrReplace(parent, before, isReplace) {
-          var child = this, before_index, i;
-          if (child.nodeType === DOCUMENT_FRAGMENT_NODE && child.rooted) {
-            utils.HierarchyRequestError();
-          }
-          if (parent._childNodes) {
-            before_index = before === null ? parent._childNodes.length : before.index;
-            if (child.parentNode === parent) {
-              var child_index = child.index;
-              if (child_index < before_index) {
-                before_index--;
-              }
-            }
-          }
-          if (isReplace) {
-            if (before.rooted) before.doc.mutateRemove(before);
-            before.parentNode = null;
-          }
-          var n = before;
-          if (n === null) {
-            n = parent.firstChild;
-          }
-          var bothRooted = child.rooted && parent.rooted;
-          if (child.nodeType === DOCUMENT_FRAGMENT_NODE) {
-            var spliceArgs = [0, isReplace ? 1 : 0], next;
-            for (var kid = child.firstChild; kid !== null; kid = next) {
-              next = kid.nextSibling;
-              spliceArgs.push(kid);
-              kid.parentNode = parent;
-            }
-            var len = spliceArgs.length;
-            if (isReplace) {
-              LinkedList.replace(n, len > 2 ? spliceArgs[2] : null);
-            } else if (len > 2 && n !== null) {
-              LinkedList.insertBefore(spliceArgs[2], n);
-            }
-            if (parent._childNodes) {
-              spliceArgs[0] = before === null ? parent._childNodes.length : before._index;
-              parent._childNodes.splice.apply(parent._childNodes, spliceArgs);
-              for (i = 2; i < len; i++) {
-                spliceArgs[i]._index = spliceArgs[0] + (i - 2);
-              }
-            } else if (parent._firstChild === before) {
-              if (len > 2) {
-                parent._firstChild = spliceArgs[2];
-              } else if (isReplace) {
-                parent._firstChild = null;
-              }
-            }
-            if (child._childNodes) {
-              child._childNodes.length = 0;
-            } else {
-              child._firstChild = null;
-            }
-            if (parent.rooted) {
-              parent.modify();
-              for (i = 2; i < len; i++) {
-                parent.doc.mutateInsert(spliceArgs[i]);
-              }
-            }
-          } else {
-            if (before === child) {
-              return;
-            }
-            if (bothRooted) {
-              child._remove();
-            } else if (child.parentNode) {
-              child.remove();
-            }
-            child.parentNode = parent;
-            if (isReplace) {
-              LinkedList.replace(n, child);
-              if (parent._childNodes) {
-                child._index = before_index;
-                parent._childNodes[before_index] = child;
-              } else if (parent._firstChild === before) {
-                parent._firstChild = child;
-              }
-            } else {
-              if (n !== null) {
-                LinkedList.insertBefore(child, n);
-              }
-              if (parent._childNodes) {
-                child._index = before_index;
-                parent._childNodes.splice(before_index, 0, child);
-              } else if (parent._firstChild === before) {
-                parent._firstChild = child;
-              }
-            }
-            if (bothRooted) {
-              parent.modify();
-              parent.doc.mutateMove(child);
-            } else if (parent.rooted) {
-              parent.modify();
-              parent.doc.mutateInsert(child);
-            }
-          }
-        }
-      },
-      lastModTime: {
-        get: function() {
-          if (!this._lastModTime) {
-            this._lastModTime = this.doc.modclock;
-          }
-          return this._lastModTime;
-        }
-      },
-      modify: {
-        value: function() {
-          if (this.doc.modclock) {
-            var time = ++this.doc.modclock;
-            for (var n = this; n; n = n.parentElement) {
-              if (n._lastModTime) {
-                n._lastModTime = time;
-              }
-            }
-          }
-        }
-      },
-      doc: {
-        get: function() {
-          return this.ownerDocument || this;
-        }
-      },
-      rooted: {
-        get: function() {
-          return !!this._nid;
-        }
-      },
-      normalize: {
-        value: function() {
-          var next;
-          for (var child = this.firstChild; child !== null; child = next) {
-            next = child.nextSibling;
-            if (child.normalize) {
-              child.normalize();
-            }
-            if (child.nodeType !== Node.TEXT_NODE) {
-              continue;
-            }
-            if (child.nodeValue === "") {
-              this.removeChild(child);
-              continue;
-            }
-            var prevChild = child.previousSibling;
-            if (prevChild === null) {
-              continue;
-            } else if (prevChild.nodeType === Node.TEXT_NODE) {
-              prevChild.appendData(child.nodeValue);
-              this.removeChild(child);
-            }
-          }
-        }
-      },
-      serialize: {
-        value: function() {
-          if (this._innerHTML) {
-            return this._innerHTML;
-          }
-          var s = "";
-          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-            s += NodeUtils.serializeOne(kid, this);
-          }
-          return s;
-        }
-      },
-      outerHTML: {
-        get: function() {
-          return NodeUtils.serializeOne(this, {
-            nodeType: 0
-          });
-        },
-        set: utils.nyi
-      },
-      ELEMENT_NODE: {
-        value: ELEMENT_NODE
-      },
-      ATTRIBUTE_NODE: {
-        value: ATTRIBUTE_NODE
-      },
-      TEXT_NODE: {
-        value: TEXT_NODE
-      },
-      CDATA_SECTION_NODE: {
-        value: CDATA_SECTION_NODE
-      },
-      ENTITY_REFERENCE_NODE: {
-        value: ENTITY_REFERENCE_NODE
-      },
-      ENTITY_NODE: {
-        value: ENTITY_NODE
-      },
-      PROCESSING_INSTRUCTION_NODE: {
-        value: PROCESSING_INSTRUCTION_NODE
-      },
-      COMMENT_NODE: {
-        value: COMMENT_NODE
-      },
-      DOCUMENT_NODE: {
-        value: DOCUMENT_NODE
-      },
-      DOCUMENT_TYPE_NODE: {
-        value: DOCUMENT_TYPE_NODE
-      },
-      DOCUMENT_FRAGMENT_NODE: {
-        value: DOCUMENT_FRAGMENT_NODE
-      },
-      NOTATION_NODE: {
-        value: NOTATION_NODE
-      },
-      DOCUMENT_POSITION_DISCONNECTED: {
-        value: DOCUMENT_POSITION_DISCONNECTED
-      },
-      DOCUMENT_POSITION_PRECEDING: {
-        value: DOCUMENT_POSITION_PRECEDING
-      },
-      DOCUMENT_POSITION_FOLLOWING: {
-        value: DOCUMENT_POSITION_FOLLOWING
-      },
-      DOCUMENT_POSITION_CONTAINS: {
-        value: DOCUMENT_POSITION_CONTAINS
-      },
-      DOCUMENT_POSITION_CONTAINED_BY: {
-        value: DOCUMENT_POSITION_CONTAINED_BY
-      },
-      DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: {
-        value: DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-      }
-    });
-  }
-});
-var require_NodeList_es6 = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeList.es6.js"(exports, module) {
-    "use strict";
-    module.exports = class NodeList extends Array {
-      constructor(a) {
-        super(a && a.length || 0);
-        if (a) {
-          for (var idx in a) {
-            this[idx] = a[idx];
-          }
-        }
-      }
-      item(i) {
-        return this[i] || null;
-      }
-    };
-  }
-});
-var require_NodeList_es5 = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeList.es5.js"(exports, module) {
-    "use strict";
-    function item(i) {
-      return this[i] || null;
-    }
-    function NodeList(a) {
-      if (!a) a = [];
-      a.item = item;
-      return a;
-    }
-    module.exports = NodeList;
-  }
-});
-var require_NodeList = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeList.js"(exports, module) {
-    "use strict";
-    var NodeList;
-    try {
-      NodeList = require_NodeList_es6();
-    } catch (e) {
-      NodeList = require_NodeList_es5();
-    }
-    module.exports = NodeList;
-  }
-});
-var require_ContainerNode = __commonJS({
-  "external/npm/node_modules/domino/lib/ContainerNode.js"(exports, module) {
-    "use strict";
-    module.exports = ContainerNode;
-    var Node = require_Node();
-    var NodeList = require_NodeList();
-    function ContainerNode() {
-      Node.call(this);
-      this._firstChild = this._childNodes = null;
-    }
-    ContainerNode.prototype = Object.create(Node.prototype, {
-      hasChildNodes: {
-        value: function() {
-          if (this._childNodes) {
-            return this._childNodes.length > 0;
-          }
-          return this._firstChild !== null;
-        }
-      },
-      childNodes: {
-        get: function() {
-          this._ensureChildNodes();
-          return this._childNodes;
-        }
-      },
-      firstChild: {
-        get: function() {
-          if (this._childNodes) {
-            return this._childNodes.length === 0 ? null : this._childNodes[0];
-          }
-          return this._firstChild;
-        }
-      },
-      lastChild: {
-        get: function() {
-          var kids = this._childNodes, first;
-          if (kids) {
-            return kids.length === 0 ? null : kids[kids.length - 1];
-          }
-          first = this._firstChild;
-          if (first === null) {
-            return null;
-          }
-          return first._previousSibling;
-        }
-      },
-      _ensureChildNodes: {
-        value: function() {
-          if (this._childNodes) {
-            return;
-          }
-          var first = this._firstChild, kid = first, childNodes = this._childNodes = new NodeList();
-          if (first) do {
-            childNodes.push(kid);
-            kid = kid._nextSibling;
-          } while (kid !== first);
-          this._firstChild = null;
-        }
-      },
-      removeChildren: {
-        value: function removeChildren() {
-          var root = this.rooted ? this.ownerDocument : null, next = this.firstChild, kid;
-          while (next !== null) {
-            kid = next;
-            next = kid.nextSibling;
-            if (root) root.mutateRemove(kid);
-            kid.parentNode = null;
-          }
-          if (this._childNodes) {
-            this._childNodes.length = 0;
-          } else {
-            this._firstChild = null;
-          }
-          this.modify();
-        }
-      }
-    });
-  }
-});
-var require_xmlnames = __commonJS({
-  "external/npm/node_modules/domino/lib/xmlnames.js"(exports) {
-    "use strict";
-    exports.isValidName = isValidName;
-    exports.isValidQName = isValidQName;
-    var simplename = /^[_:A-Za-z][-.:\w]+$/;
-    var simpleqname = /^([_A-Za-z][-.\w]+|[_A-Za-z][-.\w]+:[_A-Za-z][-.\w]+)$/;
-    var ncnamestartchars = "_A-Za-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�";
-    var ncnamechars = "-._A-Za-z0-9·À-ÖØ-öø-˿̀-ͽͿ-῿‌‍‿⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�";
-    var ncname = "[" + ncnamestartchars + "][" + ncnamechars + "]*";
-    var namestartchars = ncnamestartchars + ":";
-    var namechars = ncnamechars + ":";
-    var name = new RegExp("^[" + namestartchars + "][" + namechars + "]*$");
-    var qname = new RegExp("^(" + ncname + "|" + ncname + ":" + ncname + ")$");
-    var hassurrogates = /[\uD800-\uDB7F\uDC00-\uDFFF]/;
-    var surrogatechars = /[\uD800-\uDB7F\uDC00-\uDFFF]/g;
-    var surrogatepairs = /[\uD800-\uDB7F][\uDC00-\uDFFF]/g;
-    ncnamestartchars += "\uD800-󯰀-\uDFFF";
-    ncnamechars += "\uD800-󯰀-\uDFFF";
-    ncname = "[" + ncnamestartchars + "][" + ncnamechars + "]*";
-    namestartchars = ncnamestartchars + ":";
-    namechars = ncnamechars + ":";
-    var surrogatename = new RegExp("^[" + namestartchars + "][" + namechars + "]*$");
-    var surrogateqname = new RegExp("^(" + ncname + "|" + ncname + ":" + ncname + ")$");
-    function isValidName(s) {
-      if (simplename.test(s)) return true;
-      if (name.test(s)) return true;
-      if (!hassurrogates.test(s)) return false;
-      if (!surrogatename.test(s)) return false;
-      var chars = s.match(surrogatechars), pairs = s.match(surrogatepairs);
-      return pairs !== null && 2 * pairs.length === chars.length;
-    }
-    function isValidQName(s) {
-      if (simpleqname.test(s)) return true;
-      if (qname.test(s)) return true;
-      if (!hassurrogates.test(s)) return false;
-      if (!surrogateqname.test(s)) return false;
-      var chars = s.match(surrogatechars), pairs = s.match(surrogatepairs);
-      return pairs !== null && 2 * pairs.length === chars.length;
-    }
-  }
-});
-var require_attributes = __commonJS({
-  "external/npm/node_modules/domino/lib/attributes.js"(exports) {
-    "use strict";
-    var utils = require_utils();
-    exports.property = function(attr) {
-      if (Array.isArray(attr.type)) {
-        var valid = /* @__PURE__ */ Object.create(null);
-        attr.type.forEach(function(val) {
-          valid[val.value || val] = val.alias || val;
-        });
-        var missingValueDefault = attr.missing;
-        if (missingValueDefault === void 0) {
-          missingValueDefault = null;
-        }
-        var invalidValueDefault = attr.invalid;
-        if (invalidValueDefault === void 0) {
-          invalidValueDefault = missingValueDefault;
-        }
-        return {
-          get: function() {
-            var v = this._getattr(attr.name);
-            if (v === null) return missingValueDefault;
-            v = valid[v.toLowerCase()];
-            if (v !== void 0) return v;
-            if (invalidValueDefault !== null) return invalidValueDefault;
-            return v;
-          },
-          set: function(v) {
-            this._setattr(attr.name, v);
-          }
-        };
-      } else if (attr.type === Boolean) {
-        return {
-          get: function() {
-            return this.hasAttribute(attr.name);
-          },
-          set: function(v) {
-            if (v) {
-              this._setattr(attr.name, "");
-            } else {
-              this.removeAttribute(attr.name);
-            }
-          }
-        };
-      } else if (attr.type === Number || attr.type === "long" || attr.type === "unsigned long" || attr.type === "limited unsigned long with fallback") {
-        return numberPropDesc(attr);
-      } else if (!attr.type || attr.type === String) {
-        return {
-          get: function() {
-            return this._getattr(attr.name) || "";
-          },
-          set: function(v) {
-            if (attr.treatNullAsEmptyString && v === null) {
-              v = "";
-            }
-            this._setattr(attr.name, v);
-          }
-        };
-      } else if (typeof attr.type === "function") {
-        return attr.type(attr.name, attr);
-      }
-      throw new Error("Invalid attribute definition");
-    };
-    function numberPropDesc(a) {
-      var def;
-      if (typeof a.default === "function") {
-        def = a.default;
-      } else if (typeof a.default === "number") {
-        def = function() {
-          return a.default;
-        };
-      } else {
-        def = function() {
-          utils.assert(false, typeof a.default);
-        };
-      }
-      var unsigned_long = a.type === "unsigned long";
-      var signed_long = a.type === "long";
-      var unsigned_fallback = a.type === "limited unsigned long with fallback";
-      var min = a.min, max = a.max, setmin = a.setmin;
-      if (min === void 0) {
-        if (unsigned_long) min = 0;
-        if (signed_long) min = -2147483648;
-        if (unsigned_fallback) min = 1;
-      }
-      if (max === void 0) {
-        if (unsigned_long || signed_long || unsigned_fallback) max = 2147483647;
-      }
-      return {
-        get: function() {
-          var v = this._getattr(a.name);
-          var n = a.float ? parseFloat(v) : parseInt(v, 10);
-          if (v === null || !isFinite(n) || min !== void 0 && n < min || max !== void 0 && n > max) {
-            return def.call(this);
-          }
-          if (unsigned_long || signed_long || unsigned_fallback) {
-            if (!/^[ \t\n\f\r]*[-+]?[0-9]/.test(v)) {
-              return def.call(this);
-            }
-            n = n | 0;
-          }
-          return n;
-        },
-        set: function(v) {
-          if (!a.float) {
-            v = Math.floor(v);
-          }
-          if (setmin !== void 0 && v < setmin) {
-            utils.IndexSizeError(a.name + " set to " + v);
-          }
-          if (unsigned_long) {
-            v = v < 0 || v > 2147483647 ? def.call(this) : v | 0;
-          } else if (unsigned_fallback) {
-            v = v < 1 || v > 2147483647 ? def.call(this) : v | 0;
-          } else if (signed_long) {
-            v = v < -2147483648 || v > 2147483647 ? def.call(this) : v | 0;
-          }
-          this._setattr(a.name, String(v));
-        }
-      };
-    }
-    exports.registerChangeHandler = function(c, name, handler) {
-      var p = c.prototype;
-      if (!Object.prototype.hasOwnProperty.call(p, "_attributeChangeHandlers")) {
-        p._attributeChangeHandlers = Object.create(p._attributeChangeHandlers || null);
-      }
-      p._attributeChangeHandlers[name] = handler;
-    };
-  }
-});
-var require_FilteredElementList = __commonJS({
-  "external/npm/node_modules/domino/lib/FilteredElementList.js"(exports, module) {
-    "use strict";
-    module.exports = FilteredElementList;
-    var Node = require_Node();
-    function FilteredElementList(root, filter) {
-      this.root = root;
-      this.filter = filter;
-      this.lastModTime = root.lastModTime;
-      this.done = false;
-      this.cache = [];
-      this.traverse();
-    }
-    FilteredElementList.prototype = Object.create(Object.prototype, {
-      length: {
-        get: function() {
-          this.checkcache();
-          if (!this.done) this.traverse();
-          return this.cache.length;
-        }
-      },
-      item: {
-        value: function(n) {
-          this.checkcache();
-          if (!this.done && n >= this.cache.length) {
-            this.traverse();
-          }
-          return this.cache[n];
-        }
-      },
-      checkcache: {
-        value: function() {
-          if (this.lastModTime !== this.root.lastModTime) {
-            for (var i = this.cache.length - 1; i >= 0; i--) {
-              this[i] = void 0;
-            }
-            this.cache.length = 0;
-            this.done = false;
-            this.lastModTime = this.root.lastModTime;
-          }
-        }
-      },
-      traverse: {
-        value: function(n) {
-          if (n !== void 0) n++;
-          var elt;
-          while ((elt = this.next()) !== null) {
-            this[this.cache.length] = elt;
-            this.cache.push(elt);
-            if (n && this.cache.length === n) return;
-          }
-          this.done = true;
-        }
-      },
-      next: {
-        value: function() {
-          var start = this.cache.length === 0 ? this.root : this.cache[this.cache.length - 1];
-          var elt;
-          if (start.nodeType === Node.DOCUMENT_NODE) elt = start.documentElement;
-          else elt = start.nextElement(this.root);
-          while (elt) {
-            if (this.filter(elt)) {
-              return elt;
-            }
-            elt = elt.nextElement(this.root);
-          }
-          return null;
-        }
-      }
-    });
-  }
-});
-var require_DOMTokenList = __commonJS({
-  "external/npm/node_modules/domino/lib/DOMTokenList.js"(exports, module) {
-    "use strict";
-    var utils = require_utils();
-    module.exports = DOMTokenList;
-    function DOMTokenList(getter, setter) {
-      this._getString = getter;
-      this._setString = setter;
-      this._length = 0;
-      this._lastStringValue = "";
-      this._update();
-    }
-    Object.defineProperties(DOMTokenList.prototype, {
-      length: {
-        get: function() {
-          return this._length;
-        }
-      },
-      item: {
-        value: function(index) {
-          var list = getList(this);
-          if (index < 0 || index >= list.length) {
-            return null;
-          }
-          return list[index];
-        }
-      },
-      contains: {
-        value: function(token) {
-          token = String(token);
-          var list = getList(this);
-          return list.indexOf(token) > -1;
-        }
-      },
-      add: {
-        value: function() {
-          var list = getList(this);
-          for (var i = 0, len = arguments.length; i < len; i++) {
-            var token = handleErrors(arguments[i]);
-            if (list.indexOf(token) < 0) {
-              list.push(token);
-            }
-          }
-          this._update(list);
-        }
-      },
-      remove: {
-        value: function() {
-          var list = getList(this);
-          for (var i = 0, len = arguments.length; i < len; i++) {
-            var token = handleErrors(arguments[i]);
-            var index = list.indexOf(token);
-            if (index > -1) {
-              list.splice(index, 1);
-            }
-          }
-          this._update(list);
-        }
-      },
-      toggle: {
-        value: function toggle(token, force) {
-          token = handleErrors(token);
-          if (this.contains(token)) {
-            if (force === void 0 || force === false) {
-              this.remove(token);
-              return false;
-            }
-            return true;
-          } else {
-            if (force === void 0 || force === true) {
-              this.add(token);
-              return true;
-            }
-            return false;
-          }
-        }
-      },
-      replace: {
-        value: function replace(token, newToken) {
-          if (String(newToken) === "") {
-            utils.SyntaxError();
-          }
-          token = handleErrors(token);
-          newToken = handleErrors(newToken);
-          var list = getList(this);
-          var idx = list.indexOf(token);
-          if (idx < 0) {
-            return false;
-          }
-          var idx2 = list.indexOf(newToken);
-          if (idx2 < 0) {
-            list[idx] = newToken;
-          } else {
-            if (idx < idx2) {
-              list[idx] = newToken;
-              list.splice(idx2, 1);
-            } else {
-              list.splice(idx, 1);
-            }
-          }
-          this._update(list);
-          return true;
-        }
-      },
-      toString: {
-        value: function() {
-          return this._getString();
-        }
-      },
-      value: {
-        get: function() {
-          return this._getString();
-        },
-        set: function(v) {
-          this._setString(v);
-          this._update();
-        }
-      },
-      _update: {
-        value: function(list) {
-          if (list) {
-            fixIndex(this, list);
-            this._setString(list.join(" ").trim());
-          } else {
-            fixIndex(this, getList(this));
-          }
-          this._lastStringValue = this._getString();
-        }
-      }
-    });
-    function fixIndex(clist, list) {
-      var oldLength = clist._length;
-      var i;
-      clist._length = list.length;
-      for (i = 0; i < list.length; i++) {
-        clist[i] = list[i];
-      }
-      for (; i < oldLength; i++) {
-        clist[i] = void 0;
-      }
-    }
-    function handleErrors(token) {
-      token = String(token);
-      if (token === "") {
-        utils.SyntaxError();
-      }
-      if (/[ \t\r\n\f]/.test(token)) {
-        utils.InvalidCharacterError();
-      }
-      return token;
-    }
-    function toArray(clist) {
-      var length = clist._length;
-      var arr = Array(length);
-      for (var i = 0; i < length; i++) {
-        arr[i] = clist[i];
-      }
-      return arr;
-    }
-    function getList(clist) {
-      var strProp = clist._getString();
-      if (strProp === clist._lastStringValue) {
-        return toArray(clist);
-      }
-      var str = strProp.replace(/(^[ \t\r\n\f]+)|([ \t\r\n\f]+$)/g, "");
-      if (str === "") {
-        return [];
-      } else {
-        var seen = /* @__PURE__ */ Object.create(null);
-        return str.split(/[ \t\r\n\f]+/g).filter(function(n) {
-          var key = "$" + n;
-          if (seen[key]) {
-            return false;
-          }
-          seen[key] = true;
-          return true;
-        });
-      }
-    }
-  }
-});
-var require_select = __commonJS({
-  "external/npm/node_modules/domino/lib/select.js"(exports, module) {
-    "use strict";
-    var window2 = Object.create(null, {
-      location: {
-        get: function() {
-          throw new Error("window.location is not supported.");
-        }
-      }
-    });
-    var compareDocumentPosition = function(a, b) {
-      return a.compareDocumentPosition(b);
-    };
-    var order = function(a, b) {
-      return compareDocumentPosition(a, b) & 2 ? 1 : -1;
-    };
-    var next = function(el) {
-      while ((el = el.nextSibling) && el.nodeType !== 1) ;
-      return el;
-    };
-    var prev = function(el) {
-      while ((el = el.previousSibling) && el.nodeType !== 1) ;
-      return el;
-    };
-    var child = function(el) {
-      if (el = el.firstChild) {
-        while (el.nodeType !== 1 && (el = el.nextSibling)) ;
-      }
-      return el;
-    };
-    var lastChild = function(el) {
-      if (el = el.lastChild) {
-        while (el.nodeType !== 1 && (el = el.previousSibling)) ;
-      }
-      return el;
-    };
-    var parentIsElement = function(n) {
-      if (!n.parentNode) {
-        return false;
-      }
-      var nodeType = n.parentNode.nodeType;
-      return nodeType === 1 || nodeType === 9;
-    };
-    var unquote = function(str) {
-      if (!str) return str;
-      var ch = str[0];
-      if (ch === '"' || ch === "'") {
-        if (str[str.length - 1] === ch) {
-          str = str.slice(1, -1);
-        } else {
-          str = str.slice(1);
-        }
-        return str.replace(rules.str_escape, function(s) {
-          var m = /^\\(?:([0-9A-Fa-f]+)|([\r\n\f]+))/.exec(s);
-          if (!m) {
-            return s.slice(1);
-          }
-          if (m[2]) {
-            return "";
-          }
-          var cp = parseInt(m[1], 16);
-          return String.fromCodePoint ? String.fromCodePoint(cp) : String.fromCharCode(cp);
-        });
-      } else if (rules.ident.test(str)) {
-        return decodeid(str);
-      } else {
-        return str;
-      }
-    };
-    var decodeid = function(str) {
-      return str.replace(rules.escape, function(s) {
-        var m = /^\\([0-9A-Fa-f]+)/.exec(s);
-        if (!m) {
-          return s[1];
-        }
-        var cp = parseInt(m[1], 16);
-        return String.fromCodePoint ? String.fromCodePoint(cp) : String.fromCharCode(cp);
-      });
-    };
-    var indexOf = function() {
-      if (Array.prototype.indexOf) {
-        return Array.prototype.indexOf;
-      }
-      return function(obj, item) {
-        var i = this.length;
-        while (i--) {
-          if (this[i] === item) return i;
-        }
-        return -1;
-      };
-    }();
-    var makeInside = function(start, end) {
-      var regex = rules.inside.source.replace(/</g, start).replace(/>/g, end);
-      return new RegExp(regex);
-    };
-    var replace = function(regex, name, val) {
-      regex = regex.source;
-      regex = regex.replace(name, val.source || val);
-      return new RegExp(regex);
-    };
-    var truncateUrl = function(url, num) {
-      return url.replace(/^(?:\w+:\/\/|\/+)/, "").replace(/(?:\/+|\/*#.*?)$/, "").split("/", num).join("/");
-    };
-    var parseNth = function(param_, test) {
-      var param = param_.replace(/\s+/g, ""), cap;
-      if (param === "even") {
-        param = "2n+0";
-      } else if (param === "odd") {
-        param = "2n+1";
-      } else if (param.indexOf("n") === -1) {
-        param = "0n" + param;
-      }
-      cap = /^([+-])?(\d+)?n([+-])?(\d+)?$/.exec(param);
-      return {
-        group: cap[1] === "-" ? -(cap[2] || 1) : +(cap[2] || 1),
-        offset: cap[4] ? cap[3] === "-" ? -cap[4] : +cap[4] : 0
-      };
-    };
-    var nth = function(param_, test, last) {
-      var param = parseNth(param_), group = param.group, offset = param.offset, find2 = !last ? child : lastChild, advance = !last ? next : prev;
-      return function(el) {
-        if (!parentIsElement(el)) return;
-        var rel = find2(el.parentNode), pos = 0;
-        while (rel) {
-          if (test(rel, el)) pos++;
-          if (rel === el) {
-            pos -= offset;
-            return group && pos ? pos % group === 0 && pos < 0 === group < 0 : !pos;
-          }
-          rel = advance(rel);
-        }
-      };
-    };
-    var selectors = {
-      "*": function() {
-        if (false) {
-          return function(el) {
-            if (el.nodeType === 1) return true;
-          };
-        }
-        return function() {
-          return true;
-        };
-      }(),
-      "type": function(type) {
-        type = type.toLowerCase();
-        return function(el) {
-          return el.nodeName.toLowerCase() === type;
-        };
-      },
-      "attr": function(key, op, val, i) {
-        op = operators[op];
-        return function(el) {
-          var attr;
-          switch (key) {
-            case "for":
-              attr = el.htmlFor;
-              break;
-            case "class":
-              attr = el.className;
-              if (attr === "" && el.getAttribute("class") == null) {
-                attr = null;
-              }
-              break;
-            case "href":
-            case "src":
-              attr = el.getAttribute(key, 2);
-              break;
-            case "title":
-              attr = el.getAttribute("title") || null;
-              break;
-            case "id":
-            case "lang":
-            case "dir":
-            case "accessKey":
-            case "hidden":
-            case "tabIndex":
-            case "style":
-              if (el.getAttribute) {
-                attr = el.getAttribute(key);
-                break;
-              }
-            default:
-              if (el.hasAttribute && !el.hasAttribute(key)) {
-                break;
-              }
-              attr = el[key] != null ? el[key] : el.getAttribute && el.getAttribute(key);
-              break;
-          }
-          if (attr == null) return;
-          attr = attr + "";
-          if (i) {
-            attr = attr.toLowerCase();
-            val = val.toLowerCase();
-          }
-          return op(attr, val);
-        };
-      },
-      ":first-child": function(el) {
-        return !prev(el) && parentIsElement(el);
-      },
-      ":last-child": function(el) {
-        return !next(el) && parentIsElement(el);
-      },
-      ":only-child": function(el) {
-        return !prev(el) && !next(el) && parentIsElement(el);
-      },
-      ":nth-child": function(param, last) {
-        return nth(param, function() {
-          return true;
-        }, last);
-      },
-      ":nth-last-child": function(param) {
-        return selectors[":nth-child"](param, true);
-      },
-      ":root": function(el) {
-        return el.ownerDocument.documentElement === el;
-      },
-      ":empty": function(el) {
-        return !el.firstChild;
-      },
-      ":not": function(sel) {
-        var test = compileGroup(sel);
-        return function(el) {
-          return !test(el);
-        };
-      },
-      ":first-of-type": function(el) {
-        if (!parentIsElement(el)) return;
-        var type = el.nodeName;
-        while (el = prev(el)) {
-          if (el.nodeName === type) return;
-        }
-        return true;
-      },
-      ":last-of-type": function(el) {
-        if (!parentIsElement(el)) return;
-        var type = el.nodeName;
-        while (el = next(el)) {
-          if (el.nodeName === type) return;
-        }
-        return true;
-      },
-      ":only-of-type": function(el) {
-        return selectors[":first-of-type"](el) && selectors[":last-of-type"](el);
-      },
-      ":nth-of-type": function(param, last) {
-        return nth(param, function(rel, el) {
-          return rel.nodeName === el.nodeName;
-        }, last);
-      },
-      ":nth-last-of-type": function(param) {
-        return selectors[":nth-of-type"](param, true);
-      },
-      ":checked": function(el) {
-        return !!(el.checked || el.selected);
-      },
-      ":indeterminate": function(el) {
-        return !selectors[":checked"](el);
-      },
-      ":enabled": function(el) {
-        return !el.disabled && el.type !== "hidden";
-      },
-      ":disabled": function(el) {
-        return !!el.disabled;
-      },
-      ":target": function(el) {
-        return el.id === window2.location.hash.substring(1);
-      },
-      ":focus": function(el) {
-        return el === el.ownerDocument.activeElement;
-      },
-      ":is": function(sel) {
-        return compileGroup(sel);
-      },
-      ":matches": function(sel) {
-        return selectors[":is"](sel);
-      },
-      ":nth-match": function(param, last) {
-        var args = param.split(/\s*,\s*/), arg = args.shift(), test = compileGroup(args.join(","));
-        return nth(arg, test, last);
-      },
-      ":nth-last-match": function(param) {
-        return selectors[":nth-match"](param, true);
-      },
-      ":links-here": function(el) {
-        return el + "" === window2.location + "";
-      },
-      ":lang": function(param) {
-        return function(el) {
-          while (el) {
-            if (el.lang) return el.lang.indexOf(param) === 0;
-            el = el.parentNode;
-          }
-        };
-      },
-      ":dir": function(param) {
-        return function(el) {
-          while (el) {
-            if (el.dir) return el.dir === param;
-            el = el.parentNode;
-          }
-        };
-      },
-      ":scope": function(el, con) {
-        var context = con || el.ownerDocument;
-        if (context.nodeType === 9) {
-          return el === context.documentElement;
-        }
-        return el === context;
-      },
-      ":any-link": function(el) {
-        return typeof el.href === "string";
-      },
-      ":local-link": function(el) {
-        if (el.nodeName) {
-          return el.href && el.host === window2.location.host;
-        }
-        var param = +el + 1;
-        return function(el2) {
-          if (!el2.href) return;
-          var url = window2.location + "", href = el2 + "";
-          return truncateUrl(url, param) === truncateUrl(href, param);
-        };
-      },
-      ":default": function(el) {
-        return !!el.defaultSelected;
-      },
-      ":valid": function(el) {
-        return el.willValidate || el.validity && el.validity.valid;
-      },
-      ":invalid": function(el) {
-        return !selectors[":valid"](el);
-      },
-      ":in-range": function(el) {
-        return el.value > el.min && el.value <= el.max;
-      },
-      ":out-of-range": function(el) {
-        return !selectors[":in-range"](el);
-      },
-      ":required": function(el) {
-        return !!el.required;
-      },
-      ":optional": function(el) {
-        return !el.required;
-      },
-      ":read-only": function(el) {
-        if (el.readOnly) return true;
-        var attr = el.getAttribute("contenteditable"), prop = el.contentEditable, name = el.nodeName.toLowerCase();
-        name = name !== "input" && name !== "textarea";
-        return (name || el.disabled) && attr == null && prop !== "true";
-      },
-      ":read-write": function(el) {
-        return !selectors[":read-only"](el);
-      },
-      ":hover": function() {
-        throw new Error(":hover is not supported.");
-      },
-      ":active": function() {
-        throw new Error(":active is not supported.");
-      },
-      ":link": function() {
-        throw new Error(":link is not supported.");
-      },
-      ":visited": function() {
-        throw new Error(":visited is not supported.");
-      },
-      ":column": function() {
-        throw new Error(":column is not supported.");
-      },
-      ":nth-column": function() {
-        throw new Error(":nth-column is not supported.");
-      },
-      ":nth-last-column": function() {
-        throw new Error(":nth-last-column is not supported.");
-      },
-      ":current": function() {
-        throw new Error(":current is not supported.");
-      },
-      ":past": function() {
-        throw new Error(":past is not supported.");
-      },
-      ":future": function() {
-        throw new Error(":future is not supported.");
-      },
-      ":contains": function(param) {
-        return function(el) {
-          var text = el.innerText || el.textContent || el.value || "";
-          return text.indexOf(param) !== -1;
-        };
-      },
-      ":has": function(param) {
-        return function(el) {
-          return find(param, el).length > 0;
-        };
-      }
-    };
-    var operators = {
-      "-": function() {
-        return true;
-      },
-      "=": function(attr, val) {
-        return attr === val;
-      },
-      "*=": function(attr, val) {
-        return attr.indexOf(val) !== -1;
-      },
-      "~=": function(attr, val) {
-        var i, s, f, l;
-        for (s = 0; true; s = i + 1) {
-          i = attr.indexOf(val, s);
-          if (i === -1) return false;
-          f = attr[i - 1];
-          l = attr[i + val.length];
-          if ((!f || f === " ") && (!l || l === " ")) return true;
-        }
-      },
-      "|=": function(attr, val) {
-        var i = attr.indexOf(val), l;
-        if (i !== 0) return;
-        l = attr[i + val.length];
-        return l === "-" || !l;
-      },
-      "^=": function(attr, val) {
-        return attr.indexOf(val) === 0;
-      },
-      "$=": function(attr, val) {
-        var i = attr.lastIndexOf(val);
-        return i !== -1 && i + val.length === attr.length;
-      },
-      "!=": function(attr, val) {
-        return attr !== val;
-      }
-    };
-    var combinators = {
-      " ": function(test) {
-        return function(el) {
-          while (el = el.parentNode) {
-            if (test(el)) return el;
-          }
-        };
-      },
-      ">": function(test) {
-        return function(el) {
-          if (el = el.parentNode) {
-            return test(el) && el;
-          }
-        };
-      },
-      "+": function(test) {
-        return function(el) {
-          if (el = prev(el)) {
-            return test(el) && el;
-          }
-        };
-      },
-      "~": function(test) {
-        return function(el) {
-          while (el = prev(el)) {
-            if (test(el)) return el;
-          }
-        };
-      },
-      "noop": function(test) {
-        return function(el) {
-          return test(el) && el;
-        };
-      },
-      "ref": function(test, name) {
-        var node;
-        function ref(el) {
-          var doc = el.ownerDocument, nodes = doc.getElementsByTagName("*"), i = nodes.length;
-          while (i--) {
-            node = nodes[i];
-            if (ref.test(el)) {
-              node = null;
-              return true;
-            }
-          }
-          node = null;
-        }
-        ref.combinator = function(el) {
-          if (!node || !node.getAttribute) return;
-          var attr = node.getAttribute(name) || "";
-          if (attr[0] === "#") attr = attr.substring(1);
-          if (attr === el.id && test(node)) {
-            return node;
-          }
-        };
-        return ref;
-      }
-    };
-    var rules = {
-      escape: /\\(?:[^0-9A-Fa-f\r\n]|[0-9A-Fa-f]{1,6}[\r\n\t ]?)/g,
-      str_escape: /(escape)|\\(\n|\r\n?|\f)/g,
-      nonascii: /[\u00A0-\uFFFF]/,
-      cssid: /(?:(?!-?[0-9])(?:escape|nonascii|[-_a-zA-Z0-9])+)/,
-      qname: /^ *(cssid|\*)/,
-      simple: /^(?:([.#]cssid)|pseudo|attr)/,
-      ref: /^ *\/(cssid)\/ */,
-      combinator: /^(?: +([^ \w*.#\\]) +|( )+|([^ \w*.#\\]))(?! *$)/,
-      attr: /^\[(cssid)(?:([^\w]?=)(inside))?\]/,
-      pseudo: /^(:cssid)(?:\((inside)\))?/,
-      inside: /(?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|<[^"'>]*>|\\["'>]|[^"'>])*/,
-      ident: /^(cssid)$/
-    };
-    rules.cssid = replace(rules.cssid, "nonascii", rules.nonascii);
-    rules.cssid = replace(rules.cssid, "escape", rules.escape);
-    rules.qname = replace(rules.qname, "cssid", rules.cssid);
-    rules.simple = replace(rules.simple, "cssid", rules.cssid);
-    rules.ref = replace(rules.ref, "cssid", rules.cssid);
-    rules.attr = replace(rules.attr, "cssid", rules.cssid);
-    rules.pseudo = replace(rules.pseudo, "cssid", rules.cssid);
-    rules.inside = replace(rules.inside, `[^"'>]*`, rules.inside);
-    rules.attr = replace(rules.attr, "inside", makeInside("\\[", "\\]"));
-    rules.pseudo = replace(rules.pseudo, "inside", makeInside("\\(", "\\)"));
-    rules.simple = replace(rules.simple, "pseudo", rules.pseudo);
-    rules.simple = replace(rules.simple, "attr", rules.attr);
-    rules.ident = replace(rules.ident, "cssid", rules.cssid);
-    rules.str_escape = replace(rules.str_escape, "escape", rules.escape);
-    var compile = function(sel_) {
-      var sel = sel_.replace(/^\s+|\s+$/g, ""), test, filter = [], buff = [], subject, qname, cap, op, ref;
-      while (sel) {
-        if (cap = rules.qname.exec(sel)) {
-          sel = sel.substring(cap[0].length);
-          qname = decodeid(cap[1]);
-          buff.push(tok(qname, true));
-        } else if (cap = rules.simple.exec(sel)) {
-          sel = sel.substring(cap[0].length);
-          qname = "*";
-          buff.push(tok(qname, true));
-          buff.push(tok(cap));
-        } else {
-          throw new SyntaxError("Invalid selector.");
-        }
-        while (cap = rules.simple.exec(sel)) {
-          sel = sel.substring(cap[0].length);
-          buff.push(tok(cap));
-        }
-        if (sel[0] === "!") {
-          sel = sel.substring(1);
-          subject = makeSubject();
-          subject.qname = qname;
-          buff.push(subject.simple);
-        }
-        if (cap = rules.ref.exec(sel)) {
-          sel = sel.substring(cap[0].length);
-          ref = combinators.ref(makeSimple(buff), decodeid(cap[1]));
-          filter.push(ref.combinator);
-          buff = [];
-          continue;
-        }
-        if (cap = rules.combinator.exec(sel)) {
-          sel = sel.substring(cap[0].length);
-          op = cap[1] || cap[2] || cap[3];
-          if (op === ",") {
-            filter.push(combinators.noop(makeSimple(buff)));
-            break;
-          }
-        } else {
-          op = "noop";
-        }
-        if (!combinators[op]) {
-          throw new SyntaxError("Bad combinator.");
-        }
-        filter.push(combinators[op](makeSimple(buff)));
-        buff = [];
-      }
-      test = makeTest(filter);
-      test.qname = qname;
-      test.sel = sel;
-      if (subject) {
-        subject.lname = test.qname;
-        subject.test = test;
-        subject.qname = subject.qname;
-        subject.sel = test.sel;
-        test = subject;
-      }
-      if (ref) {
-        ref.test = test;
-        ref.qname = test.qname;
-        ref.sel = test.sel;
-        test = ref;
-      }
-      return test;
-    };
-    var tok = function(cap, qname) {
-      if (qname) {
-        return cap === "*" ? selectors["*"] : selectors.type(cap);
-      }
-      if (cap[1]) {
-        return cap[1][0] === "." ? selectors.attr("class", "~=", decodeid(cap[1].substring(1)), false) : selectors.attr("id", "=", decodeid(cap[1].substring(1)), false);
-      }
-      if (cap[2]) {
-        return cap[3] ? selectors[decodeid(cap[2])](unquote(cap[3])) : selectors[decodeid(cap[2])];
-      }
-      if (cap[4]) {
-        var value = cap[6];
-        var i = /["'\s]\s*I$/i.test(value);
-        if (i) {
-          value = value.replace(/\s*I$/i, "");
-        }
-        return selectors.attr(decodeid(cap[4]), cap[5] || "-", unquote(value), i);
-      }
-      throw new SyntaxError("Unknown Selector.");
-    };
-    var makeSimple = function(func) {
-      var l = func.length, i;
-      if (l < 2) return func[0];
-      return function(el) {
-        if (!el) return;
-        for (i = 0; i < l; i++) {
-          if (!func[i](el)) return;
-        }
-        return true;
-      };
-    };
-    var makeTest = function(func) {
-      if (func.length < 2) {
-        return function(el) {
-          return !!func[0](el);
-        };
-      }
-      return function(el) {
-        var i = func.length;
-        while (i--) {
-          if (!(el = func[i](el))) return;
-        }
-        return true;
-      };
-    };
-    var makeSubject = function() {
-      var target;
-      function subject(el) {
-        var node = el.ownerDocument, scope = node.getElementsByTagName(subject.lname), i = scope.length;
-        while (i--) {
-          if (subject.test(scope[i]) && target === el) {
-            target = null;
-            return true;
-          }
-        }
-        target = null;
-      }
-      subject.simple = function(el) {
-        target = el;
-        return true;
-      };
-      return subject;
-    };
-    var compileGroup = function(sel) {
-      var test = compile(sel), tests = [test];
-      while (test.sel) {
-        test = compile(test.sel);
-        tests.push(test);
-      }
-      if (tests.length < 2) return test;
-      return function(el) {
-        var l = tests.length, i = 0;
-        for (; i < l; i++) {
-          if (tests[i](el)) return true;
-        }
-      };
-    };
-    var find = function(sel, node) {
-      var results = [], test = compile(sel), scope = node.getElementsByTagName(test.qname), i = 0, el;
-      while (el = scope[i++]) {
-        if (test(el)) results.push(el);
-      }
-      if (test.sel) {
-        while (test.sel) {
-          test = compile(test.sel);
-          scope = node.getElementsByTagName(test.qname);
-          i = 0;
-          while (el = scope[i++]) {
-            if (test(el) && indexOf.call(results, el) === -1) {
-              results.push(el);
-            }
-          }
-        }
-        results.sort(order);
-      }
-      return results;
-    };
-    module.exports = exports = function(sel, context) {
-      var id, r;
-      if (context.nodeType !== 11 && sel.indexOf(" ") === -1) {
-        if (sel[0] === "#" && context.rooted && /^#[A-Z_][-A-Z0-9_]*$/i.test(sel)) {
-          if (context.doc._hasMultipleElementsWithId) {
-            id = sel.substring(1);
-            if (!context.doc._hasMultipleElementsWithId(id)) {
-              r = context.doc.getElementById(id);
-              return r ? [r] : [];
-            }
-          }
-        }
-        if (sel[0] === "." && /^\.\w+$/.test(sel)) {
-          return context.getElementsByClassName(sel.substring(1));
-        }
-        if (/^\w+$/.test(sel)) {
-          return context.getElementsByTagName(sel);
-        }
-      }
-      return find(sel, context);
-    };
-    exports.selectors = selectors;
-    exports.operators = operators;
-    exports.combinators = combinators;
-    exports.matches = function(el, sel) {
-      var test = {
-        sel
-      };
-      do {
-        test = compile(test.sel);
-        if (test(el)) {
-          return true;
-        }
-      } while (test.sel);
-      return false;
-    };
-  }
-});
-var require_ChildNode = __commonJS({
-  "external/npm/node_modules/domino/lib/ChildNode.js"(exports, module) {
-    "use strict";
-    var Node = require_Node();
-    var LinkedList = require_LinkedList();
-    var createDocumentFragmentFromArguments = function(document2, args) {
-      var docFrag = document2.createDocumentFragment();
-      for (var i = 0; i < args.length; i++) {
-        var argItem = args[i];
-        var isNode = argItem instanceof Node;
-        docFrag.appendChild(isNode ? argItem : document2.createTextNode(String(argItem)));
-      }
-      return docFrag;
-    };
-    var ChildNode = {
-      after: {
-        value: function after() {
-          var argArr = Array.prototype.slice.call(arguments);
-          var parentNode = this.parentNode, nextSibling = this.nextSibling;
-          if (parentNode === null) {
-            return;
-          }
-          while (nextSibling && argArr.some(function(v) {
-            return v === nextSibling;
-          })) nextSibling = nextSibling.nextSibling;
-          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);
-          parentNode.insertBefore(docFrag, nextSibling);
-        }
-      },
-      before: {
-        value: function before() {
-          var argArr = Array.prototype.slice.call(arguments);
-          var parentNode = this.parentNode, prevSibling = this.previousSibling;
-          if (parentNode === null) {
-            return;
-          }
-          while (prevSibling && argArr.some(function(v) {
-            return v === prevSibling;
-          })) prevSibling = prevSibling.previousSibling;
-          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);
-          var nextSibling = prevSibling ? prevSibling.nextSibling : parentNode.firstChild;
-          parentNode.insertBefore(docFrag, nextSibling);
-        }
-      },
-      remove: {
-        value: function remove() {
-          if (this.parentNode === null) return;
-          if (this.doc) {
-            this.doc._preremoveNodeIterators(this);
-            if (this.rooted) {
-              this.doc.mutateRemove(this);
-            }
-          }
-          this._remove();
-          this.parentNode = null;
-        }
-      },
-      _remove: {
-        value: function _remove() {
-          var parent = this.parentNode;
-          if (parent === null) return;
-          if (parent._childNodes) {
-            parent._childNodes.splice(this.index, 1);
-          } else if (parent._firstChild === this) {
-            if (this._nextSibling === this) {
-              parent._firstChild = null;
-            } else {
-              parent._firstChild = this._nextSibling;
-            }
-          }
-          LinkedList.remove(this);
-          parent.modify();
-        }
-      },
-      replaceWith: {
-        value: function replaceWith() {
-          var argArr = Array.prototype.slice.call(arguments);
-          var parentNode = this.parentNode, nextSibling = this.nextSibling;
-          if (parentNode === null) {
-            return;
-          }
-          while (nextSibling && argArr.some(function(v) {
-            return v === nextSibling;
-          })) nextSibling = nextSibling.nextSibling;
-          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);
-          if (this.parentNode === parentNode) {
-            parentNode.replaceChild(docFrag, this);
-          } else {
-            parentNode.insertBefore(docFrag, nextSibling);
-          }
-        }
-      }
-    };
-    module.exports = ChildNode;
-  }
-});
-var require_NonDocumentTypeChildNode = __commonJS({
-  "external/npm/node_modules/domino/lib/NonDocumentTypeChildNode.js"(exports, module) {
-    "use strict";
-    var Node = require_Node();
-    var NonDocumentTypeChildNode = {
-      nextElementSibling: {
-        get: function() {
-          if (this.parentNode) {
-            for (var kid = this.nextSibling; kid !== null; kid = kid.nextSibling) {
-              if (kid.nodeType === Node.ELEMENT_NODE) return kid;
-            }
-          }
-          return null;
-        }
-      },
-      previousElementSibling: {
-        get: function() {
-          if (this.parentNode) {
-            for (var kid = this.previousSibling; kid !== null; kid = kid.previousSibling) {
-              if (kid.nodeType === Node.ELEMENT_NODE) return kid;
-            }
-          }
-          return null;
-        }
-      }
-    };
-    module.exports = NonDocumentTypeChildNode;
-  }
-});
-var require_NamedNodeMap = __commonJS({
-  "external/npm/node_modules/domino/lib/NamedNodeMap.js"(exports, module) {
-    "use strict";
-    module.exports = NamedNodeMap;
-    var utils = require_utils();
-    function NamedNodeMap(element) {
-      this.element = element;
-    }
-    Object.defineProperties(NamedNodeMap.prototype, {
-      length: {
-        get: utils.shouldOverride
-      },
-      item: {
-        value: utils.shouldOverride
-      },
-      getNamedItem: {
-        value: function getNamedItem(qualifiedName) {
-          return this.element.getAttributeNode(qualifiedName);
-        }
-      },
-      getNamedItemNS: {
-        value: function getNamedItemNS(namespace, localName) {
-          return this.element.getAttributeNodeNS(namespace, localName);
-        }
-      },
-      setNamedItem: {
-        value: utils.nyi
-      },
-      setNamedItemNS: {
-        value: utils.nyi
-      },
-      removeNamedItem: {
-        value: function removeNamedItem(qualifiedName) {
-          var attr = this.element.getAttributeNode(qualifiedName);
-          if (attr) {
-            this.element.removeAttribute(qualifiedName);
-            return attr;
-          }
-          utils.NotFoundError();
-        }
-      },
-      removeNamedItemNS: {
-        value: function removeNamedItemNS(ns, lname) {
-          var attr = this.element.getAttributeNodeNS(ns, lname);
-          if (attr) {
-            this.element.removeAttributeNS(ns, lname);
-            return attr;
-          }
-          utils.NotFoundError();
-        }
-      }
-    });
-  }
-});
-var require_Element = __commonJS({
-  "external/npm/node_modules/domino/lib/Element.js"(exports, module) {
-    "use strict";
-    module.exports = Element;
-    var xml = require_xmlnames();
-    var utils = require_utils();
-    var NAMESPACE = utils.NAMESPACE;
-    var attributes = require_attributes();
-    var Node = require_Node();
-    var NodeList = require_NodeList();
-    var NodeUtils = require_NodeUtils();
-    var FilteredElementList = require_FilteredElementList();
-    var DOMException = require_DOMException();
-    var DOMTokenList = require_DOMTokenList();
-    var select = require_select();
-    var ContainerNode = require_ContainerNode();
-    var ChildNode = require_ChildNode();
-    var NonDocumentTypeChildNode = require_NonDocumentTypeChildNode();
-    var NamedNodeMap = require_NamedNodeMap();
-    var uppercaseCache = /* @__PURE__ */ Object.create(null);
-    function Element(doc, localName, namespaceURI, prefix) {
-      ContainerNode.call(this);
-      this.nodeType = Node.ELEMENT_NODE;
-      this.ownerDocument = doc;
-      this.localName = localName;
-      this.namespaceURI = namespaceURI;
-      this.prefix = prefix;
-      this._tagName = void 0;
-      this._attrsByQName = /* @__PURE__ */ Object.create(null);
-      this._attrsByLName = /* @__PURE__ */ Object.create(null);
-      this._attrKeys = [];
-    }
-    function recursiveGetText(node, a) {
-      if (node.nodeType === Node.TEXT_NODE) {
-        a.push(node._data);
-      } else {
-        for (var i = 0, n = node.childNodes.length; i < n; i++) recursiveGetText(node.childNodes[i], a);
-      }
-    }
-    Element.prototype = Object.create(ContainerNode.prototype, {
-      isHTML: {
-        get: function isHTML() {
-          return this.namespaceURI === NAMESPACE.HTML && this.ownerDocument.isHTML;
-        }
-      },
-      tagName: {
-        get: function tagName() {
-          if (this._tagName === void 0) {
-            var tn;
-            if (this.prefix === null) {
-              tn = this.localName;
-            } else {
-              tn = this.prefix + ":" + this.localName;
-            }
-            if (this.isHTML) {
-              var up = uppercaseCache[tn];
-              if (!up) {
-                uppercaseCache[tn] = up = utils.toASCIIUpperCase(tn);
-              }
-              tn = up;
-            }
-            this._tagName = tn;
-          }
-          return this._tagName;
-        }
-      },
-      nodeName: {
-        get: function() {
-          return this.tagName;
-        }
-      },
-      nodeValue: {
-        get: function() {
-          return null;
-        },
-        set: function() {
-        }
-      },
-      textContent: {
-        get: function() {
-          var strings = [];
-          recursiveGetText(this, strings);
-          return strings.join("");
-        },
-        set: function(newtext) {
-          this.removeChildren();
-          if (newtext !== null && newtext !== void 0 && newtext !== "") {
-            this._appendChild(this.ownerDocument.createTextNode(newtext));
-          }
-        }
-      },
-      innerText: {
-        get: function() {
-          var strings = [];
-          recursiveGetText(this, strings);
-          return strings.join("").replace(/[ \t\n\f\r]+/g, " ").trim();
-        },
-        set: function(newtext) {
-          this.removeChildren();
-          if (newtext !== null && newtext !== void 0 && newtext !== "") {
-            this._appendChild(this.ownerDocument.createTextNode(newtext));
-          }
-        }
-      },
-      innerHTML: {
-        get: function() {
-          return this.serialize();
-        },
-        set: utils.nyi
-      },
-      outerHTML: {
-        get: function() {
-          return NodeUtils.serializeOne(this, {
-            nodeType: 0
-          });
-        },
-        set: function(v) {
-          var document2 = this.ownerDocument;
-          var parent = this.parentNode;
-          if (parent === null) {
-            return;
-          }
-          if (parent.nodeType === Node.DOCUMENT_NODE) {
-            utils.NoModificationAllowedError();
-          }
-          if (parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
-            parent = parent.ownerDocument.createElement("body");
-          }
-          var parser = document2.implementation.mozHTMLParser(document2._address, parent);
-          parser.parse(v === null ? "" : String(v), true);
-          this.replaceWith(parser._asDocumentFragment());
-        }
-      },
-      _insertAdjacent: {
-        value: function _insertAdjacent(position, node) {
-          var first = false;
-          switch (position) {
-            case "beforebegin":
-              first = true;
-            case "afterend":
-              var parent = this.parentNode;
-              if (parent === null) {
-                return null;
-              }
-              return parent.insertBefore(node, first ? this : this.nextSibling);
-            case "afterbegin":
-              first = true;
-            case "beforeend":
-              return this.insertBefore(node, first ? this.firstChild : null);
-            default:
-              return utils.SyntaxError();
-          }
-        }
-      },
-      insertAdjacentElement: {
-        value: function insertAdjacentElement(position, element) {
-          if (element.nodeType !== Node.ELEMENT_NODE) {
-            throw new TypeError("not an element");
-          }
-          position = utils.toASCIILowerCase(String(position));
-          return this._insertAdjacent(position, element);
-        }
-      },
-      insertAdjacentText: {
-        value: function insertAdjacentText(position, data) {
-          var textNode = this.ownerDocument.createTextNode(data);
-          position = utils.toASCIILowerCase(String(position));
-          this._insertAdjacent(position, textNode);
-        }
-      },
-      insertAdjacentHTML: {
-        value: function insertAdjacentHTML(position, text) {
-          position = utils.toASCIILowerCase(String(position));
-          text = String(text);
-          var context;
-          switch (position) {
-            case "beforebegin":
-            case "afterend":
-              context = this.parentNode;
-              if (context === null || context.nodeType === Node.DOCUMENT_NODE) {
-                utils.NoModificationAllowedError();
-              }
-              break;
-            case "afterbegin":
-            case "beforeend":
-              context = this;
-              break;
-            default:
-              utils.SyntaxError();
-          }
-          if (!(context instanceof Element) || context.ownerDocument.isHTML && context.localName === "html" && context.namespaceURI === NAMESPACE.HTML) {
-            context = context.ownerDocument.createElementNS(NAMESPACE.HTML, "body");
-          }
-          var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, context);
-          parser.parse(text, true);
-          this._insertAdjacent(position, parser._asDocumentFragment());
-        }
-      },
-      children: {
-        get: function() {
-          if (!this._children) {
-            this._children = new ChildrenCollection(this);
-          }
-          return this._children;
-        }
-      },
-      attributes: {
-        get: function() {
-          if (!this._attributes) {
-            this._attributes = new AttributesArray(this);
-          }
-          return this._attributes;
-        }
-      },
-      firstElementChild: {
-        get: function() {
-          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-            if (kid.nodeType === Node.ELEMENT_NODE) return kid;
-          }
-          return null;
-        }
-      },
-      lastElementChild: {
-        get: function() {
-          for (var kid = this.lastChild; kid !== null; kid = kid.previousSibling) {
-            if (kid.nodeType === Node.ELEMENT_NODE) return kid;
-          }
-          return null;
-        }
-      },
-      childElementCount: {
-        get: function() {
-          return this.children.length;
-        }
-      },
-      nextElement: {
-        value: function(root) {
-          if (!root) root = this.ownerDocument.documentElement;
-          var next = this.firstElementChild;
-          if (!next) {
-            if (this === root) return null;
-            next = this.nextElementSibling;
-          }
-          if (next) return next;
-          for (var parent = this.parentElement; parent && parent !== root; parent = parent.parentElement) {
-            next = parent.nextElementSibling;
-            if (next) return next;
-          }
-          return null;
-        }
-      },
-      getElementsByTagName: {
-        value: function getElementsByTagName(lname) {
-          var filter;
-          if (!lname) return new NodeList();
-          if (lname === "*") filter = function() {
-            return true;
-          };
-          else if (this.isHTML) filter = htmlLocalNameElementFilter(lname);
-          else filter = localNameElementFilter(lname);
-          return new FilteredElementList(this, filter);
-        }
-      },
-      getElementsByTagNameNS: {
-        value: function getElementsByTagNameNS(ns, lname) {
-          var filter;
-          if (ns === "*" && lname === "*") filter = function() {
-            return true;
-          };
-          else if (ns === "*") filter = localNameElementFilter(lname);
-          else if (lname === "*") filter = namespaceElementFilter(ns);
-          else filter = namespaceLocalNameElementFilter(ns, lname);
-          return new FilteredElementList(this, filter);
-        }
-      },
-      getElementsByClassName: {
-        value: function getElementsByClassName(names) {
-          names = String(names).trim();
-          if (names === "") {
-            var result = new NodeList();
-            return result;
-          }
-          names = names.split(/[ \t\r\n\f]+/);
-          return new FilteredElementList(this, classNamesElementFilter(names));
-        }
-      },
-      getElementsByName: {
-        value: function getElementsByName(name) {
-          return new FilteredElementList(this, elementNameFilter(String(name)));
-        }
-      },
-      clone: {
-        value: function clone() {
-          var e;
-          if (this.namespaceURI !== NAMESPACE.HTML || this.prefix || !this.ownerDocument.isHTML) {
-            e = this.ownerDocument.createElementNS(this.namespaceURI, this.prefix !== null ? this.prefix + ":" + this.localName : this.localName);
-          } else {
-            e = this.ownerDocument.createElement(this.localName);
-          }
-          for (var i = 0, n = this._attrKeys.length; i < n; i++) {
-            var lname = this._attrKeys[i];
-            var a = this._attrsByLName[lname];
-            var b = a.cloneNode();
-            b._setOwnerElement(e);
-            e._attrsByLName[lname] = b;
-            e._addQName(b);
-          }
-          e._attrKeys = this._attrKeys.concat();
-          return e;
-        }
-      },
-      isEqual: {
-        value: function isEqual(that) {
-          if (this.localName !== that.localName || this.namespaceURI !== that.namespaceURI || this.prefix !== that.prefix || this._numattrs !== that._numattrs) return false;
-          for (var i = 0, n = this._numattrs; i < n; i++) {
-            var a = this._attr(i);
-            if (!that.hasAttributeNS(a.namespaceURI, a.localName)) return false;
-            if (that.getAttributeNS(a.namespaceURI, a.localName) !== a.value) return false;
-          }
-          return true;
-        }
-      },
-      _lookupNamespacePrefix: {
-        value: function _lookupNamespacePrefix(ns, originalElement) {
-          if (this.namespaceURI && this.namespaceURI === ns && this.prefix !== null && originalElement.lookupNamespaceURI(this.prefix) === ns) {
-            return this.prefix;
-          }
-          for (var i = 0, n = this._numattrs; i < n; i++) {
-            var a = this._attr(i);
-            if (a.prefix === "xmlns" && a.value === ns && originalElement.lookupNamespaceURI(a.localName) === ns) {
-              return a.localName;
-            }
-          }
-          var parent = this.parentElement;
-          return parent ? parent._lookupNamespacePrefix(ns, originalElement) : null;
-        }
-      },
-      lookupNamespaceURI: {
-        value: function lookupNamespaceURI(prefix) {
-          if (prefix === "" || prefix === void 0) {
-            prefix = null;
-          }
-          if (this.namespaceURI !== null && this.prefix === prefix) return this.namespaceURI;
-          for (var i = 0, n = this._numattrs; i < n; i++) {
-            var a = this._attr(i);
-            if (a.namespaceURI === NAMESPACE.XMLNS) {
-              if (a.prefix === "xmlns" && a.localName === prefix || prefix === null && a.prefix === null && a.localName === "xmlns") {
-                return a.value || null;
-              }
-            }
-          }
-          var parent = this.parentElement;
-          return parent ? parent.lookupNamespaceURI(prefix) : null;
-        }
-      },
-      getAttribute: {
-        value: function getAttribute(qname) {
-          var attr = this.getAttributeNode(qname);
-          return attr ? attr.value : null;
-        }
-      },
-      getAttributeNS: {
-        value: function getAttributeNS(ns, lname) {
-          var attr = this.getAttributeNodeNS(ns, lname);
-          return attr ? attr.value : null;
-        }
-      },
-      getAttributeNode: {
-        value: function getAttributeNode(qname) {
-          qname = String(qname);
-          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);
-          var attr = this._attrsByQName[qname];
-          if (!attr) return null;
-          if (Array.isArray(attr)) attr = attr[0];
-          return attr;
-        }
-      },
-      getAttributeNodeNS: {
-        value: function getAttributeNodeNS(ns, lname) {
-          ns = ns === void 0 || ns === null ? "" : String(ns);
-          lname = String(lname);
-          var attr = this._attrsByLName[ns + "|" + lname];
-          return attr ? attr : null;
-        }
-      },
-      hasAttribute: {
-        value: function hasAttribute(qname) {
-          qname = String(qname);
-          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);
-          return this._attrsByQName[qname] !== void 0;
-        }
-      },
-      hasAttributeNS: {
-        value: function hasAttributeNS(ns, lname) {
-          ns = ns === void 0 || ns === null ? "" : String(ns);
-          lname = String(lname);
-          var key = ns + "|" + lname;
-          return this._attrsByLName[key] !== void 0;
-        }
-      },
-      hasAttributes: {
-        value: function hasAttributes() {
-          return this._numattrs > 0;
-        }
-      },
-      toggleAttribute: {
-        value: function toggleAttribute(qname, force) {
-          qname = String(qname);
-          if (!xml.isValidName(qname)) utils.InvalidCharacterError();
-          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);
-          var a = this._attrsByQName[qname];
-          if (a === void 0) {
-            if (force === void 0 || force === true) {
-              this._setAttribute(qname, "");
-              return true;
-            }
-            return false;
-          } else {
-            if (force === void 0 || force === false) {
-              this.removeAttribute(qname);
-              return false;
-            }
-            return true;
-          }
-        }
-      },
-      _setAttribute: {
-        value: function _setAttribute(qname, value) {
-          var attr = this._attrsByQName[qname];
-          var isnew;
-          if (!attr) {
-            attr = this._newattr(qname);
-            isnew = true;
-          } else {
-            if (Array.isArray(attr)) attr = attr[0];
-          }
-          attr.value = value;
-          if (this._attributes) this._attributes[qname] = attr;
-          if (isnew && this._newattrhook) this._newattrhook(qname, value);
-        }
-      },
-      setAttribute: {
-        value: function setAttribute(qname, value) {
-          qname = String(qname);
-          if (!xml.isValidName(qname)) utils.InvalidCharacterError();
-          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);
-          this._setAttribute(qname, String(value));
-        }
-      },
-      _setAttributeNS: {
-        value: function _setAttributeNS(ns, qname, value) {
-          var pos = qname.indexOf(":"), prefix, lname;
-          if (pos < 0) {
-            prefix = null;
-            lname = qname;
-          } else {
-            prefix = qname.substring(0, pos);
-            lname = qname.substring(pos + 1);
-          }
-          if (ns === "" || ns === void 0) ns = null;
-          var key = (ns === null ? "" : ns) + "|" + lname;
-          var attr = this._attrsByLName[key];
-          var isnew;
-          if (!attr) {
-            attr = new Attr(this, lname, prefix, ns);
-            isnew = true;
-            this._attrsByLName[key] = attr;
-            if (this._attributes) {
-              this._attributes[this._attrKeys.length] = attr;
-            }
-            this._attrKeys.push(key);
-            this._addQName(attr);
-          } else if (false) {
-            if (attr.prefix !== prefix) {
-              this._removeQName(attr);
-              attr.prefix = prefix;
-              this._addQName(attr);
-            }
-          }
-          attr.value = value;
-          if (isnew && this._newattrhook) this._newattrhook(qname, value);
-        }
-      },
-      setAttributeNS: {
-        value: function setAttributeNS(ns, qname, value) {
-          ns = ns === null || ns === void 0 || ns === "" ? null : String(ns);
-          qname = String(qname);
-          if (!xml.isValidQName(qname)) utils.InvalidCharacterError();
-          var pos = qname.indexOf(":");
-          var prefix = pos < 0 ? null : qname.substring(0, pos);
-          if (prefix !== null && ns === null || prefix === "xml" && ns !== NAMESPACE.XML || (qname === "xmlns" || prefix === "xmlns") && ns !== NAMESPACE.XMLNS || ns === NAMESPACE.XMLNS && !(qname === "xmlns" || prefix === "xmlns")) utils.NamespaceError();
-          this._setAttributeNS(ns, qname, String(value));
-        }
-      },
-      setAttributeNode: {
-        value: function setAttributeNode(attr) {
-          if (attr.ownerElement !== null && attr.ownerElement !== this) {
-            throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);
-          }
-          var result = null;
-          var oldAttrs = this._attrsByQName[attr.name];
-          if (oldAttrs) {
-            if (!Array.isArray(oldAttrs)) {
-              oldAttrs = [oldAttrs];
-            }
-            if (oldAttrs.some(function(a) {
-              return a === attr;
-            })) {
-              return attr;
-            } else if (attr.ownerElement !== null) {
-              throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);
-            }
-            oldAttrs.forEach(function(a) {
-              this.removeAttributeNode(a);
-            }, this);
-            result = oldAttrs[0];
-          }
-          this.setAttributeNodeNS(attr);
-          return result;
-        }
-      },
-      setAttributeNodeNS: {
-        value: function setAttributeNodeNS(attr) {
-          if (attr.ownerElement !== null) {
-            throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);
-          }
-          var ns = attr.namespaceURI;
-          var key = (ns === null ? "" : ns) + "|" + attr.localName;
-          var oldAttr = this._attrsByLName[key];
-          if (oldAttr) {
-            this.removeAttributeNode(oldAttr);
-          }
-          attr._setOwnerElement(this);
-          this._attrsByLName[key] = attr;
-          if (this._attributes) {
-            this._attributes[this._attrKeys.length] = attr;
-          }
-          this._attrKeys.push(key);
-          this._addQName(attr);
-          if (this._newattrhook) this._newattrhook(attr.name, attr.value);
-          return oldAttr || null;
-        }
-      },
-      removeAttribute: {
-        value: function removeAttribute(qname) {
-          qname = String(qname);
-          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);
-          var attr = this._attrsByQName[qname];
-          if (!attr) return;
-          if (Array.isArray(attr)) {
-            if (attr.length > 2) {
-              attr = attr.shift();
-            } else {
-              this._attrsByQName[qname] = attr[1];
-              attr = attr[0];
-            }
-          } else {
-            this._attrsByQName[qname] = void 0;
-          }
-          var ns = attr.namespaceURI;
-          var key = (ns === null ? "" : ns) + "|" + attr.localName;
-          this._attrsByLName[key] = void 0;
-          var i = this._attrKeys.indexOf(key);
-          if (this._attributes) {
-            Array.prototype.splice.call(this._attributes, i, 1);
-            this._attributes[qname] = void 0;
-          }
-          this._attrKeys.splice(i, 1);
-          var onchange = attr.onchange;
-          attr._setOwnerElement(null);
-          if (onchange) {
-            onchange.call(attr, this, attr.localName, attr.value, null);
-          }
-          if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);
-        }
-      },
-      removeAttributeNS: {
-        value: function removeAttributeNS(ns, lname) {
-          ns = ns === void 0 || ns === null ? "" : String(ns);
-          lname = String(lname);
-          var key = ns + "|" + lname;
-          var attr = this._attrsByLName[key];
-          if (!attr) return;
-          this._attrsByLName[key] = void 0;
-          var i = this._attrKeys.indexOf(key);
-          if (this._attributes) {
-            Array.prototype.splice.call(this._attributes, i, 1);
-          }
-          this._attrKeys.splice(i, 1);
-          this._removeQName(attr);
-          var onchange = attr.onchange;
-          attr._setOwnerElement(null);
-          if (onchange) {
-            onchange.call(attr, this, attr.localName, attr.value, null);
-          }
-          if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);
-        }
-      },
-      removeAttributeNode: {
-        value: function removeAttributeNode(attr) {
-          var ns = attr.namespaceURI;
-          var key = (ns === null ? "" : ns) + "|" + attr.localName;
-          if (this._attrsByLName[key] !== attr) {
-            utils.NotFoundError();
-          }
-          this.removeAttributeNS(ns, attr.localName);
-          return attr;
-        }
-      },
-      getAttributeNames: {
-        value: function getAttributeNames() {
-          var elt = this;
-          return this._attrKeys.map(function(key) {
-            return elt._attrsByLName[key].name;
-          });
-        }
-      },
-      _getattr: {
-        value: function _getattr(qname) {
-          var attr = this._attrsByQName[qname];
-          return attr ? attr.value : null;
-        }
-      },
-      _setattr: {
-        value: function _setattr(qname, value) {
-          var attr = this._attrsByQName[qname];
-          var isnew;
-          if (!attr) {
-            attr = this._newattr(qname);
-            isnew = true;
-          }
-          attr.value = String(value);
-          if (this._attributes) this._attributes[qname] = attr;
-          if (isnew && this._newattrhook) this._newattrhook(qname, value);
-        }
-      },
-      _newattr: {
-        value: function _newattr(qname) {
-          var attr = new Attr(this, qname, null, null);
-          var key = "|" + qname;
-          this._attrsByQName[qname] = attr;
-          this._attrsByLName[key] = attr;
-          if (this._attributes) {
-            this._attributes[this._attrKeys.length] = attr;
-          }
-          this._attrKeys.push(key);
-          return attr;
-        }
-      },
-      _addQName: {
-        value: function(attr) {
-          var qname = attr.name;
-          var existing = this._attrsByQName[qname];
-          if (!existing) {
-            this._attrsByQName[qname] = attr;
-          } else if (Array.isArray(existing)) {
-            existing.push(attr);
-          } else {
-            this._attrsByQName[qname] = [existing, attr];
-          }
-          if (this._attributes) this._attributes[qname] = attr;
-        }
-      },
-      _removeQName: {
-        value: function(attr) {
-          var qname = attr.name;
-          var target = this._attrsByQName[qname];
-          if (Array.isArray(target)) {
-            var idx = target.indexOf(attr);
-            utils.assert(idx !== -1);
-            if (target.length === 2) {
-              this._attrsByQName[qname] = target[1 - idx];
-              if (this._attributes) {
-                this._attributes[qname] = this._attrsByQName[qname];
-              }
-            } else {
-              target.splice(idx, 1);
-              if (this._attributes && this._attributes[qname] === attr) {
-                this._attributes[qname] = target[0];
-              }
-            }
-          } else {
-            utils.assert(target === attr);
-            this._attrsByQName[qname] = void 0;
-            if (this._attributes) {
-              this._attributes[qname] = void 0;
-            }
-          }
-        }
-      },
-      _numattrs: {
-        get: function() {
-          return this._attrKeys.length;
-        }
-      },
-      _attr: {
-        value: function(n) {
-          return this._attrsByLName[this._attrKeys[n]];
-        }
-      },
-      id: attributes.property({
-        name: "id"
-      }),
-      className: attributes.property({
-        name: "class"
-      }),
-      classList: {
-        get: function() {
-          var self = this;
-          if (this._classList) {
-            return this._classList;
-          }
-          var dtlist = new DOMTokenList(function() {
-            return self.className || "";
-          }, function(v) {
-            self.className = v;
-          });
-          this._classList = dtlist;
-          return dtlist;
-        },
-        set: function(v) {
-          this.className = v;
-        }
-      },
-      matches: {
-        value: function(selector) {
-          return select.matches(this, selector);
-        }
-      },
-      closest: {
-        value: function(selector) {
-          var el = this;
-          do {
-            if (el.matches && el.matches(selector)) {
-              return el;
-            }
-            el = el.parentElement || el.parentNode;
-          } while (el !== null && el.nodeType === Node.ELEMENT_NODE);
-          return null;
-        }
-      },
-      querySelector: {
-        value: function(selector) {
-          return select(selector, this)[0];
-        }
-      },
-      querySelectorAll: {
-        value: function(selector) {
-          var nodes = select(selector, this);
-          return nodes.item ? nodes : new NodeList(nodes);
-        }
-      }
-    });
-    Object.defineProperties(Element.prototype, ChildNode);
-    Object.defineProperties(Element.prototype, NonDocumentTypeChildNode);
-    attributes.registerChangeHandler(Element, "id", function(element, lname, oldval, newval) {
-      if (element.rooted) {
-        if (oldval) {
-          element.ownerDocument.delId(oldval, element);
-        }
-        if (newval) {
-          element.ownerDocument.addId(newval, element);
-        }
-      }
-    });
-    attributes.registerChangeHandler(Element, "class", function(element, lname, oldval, newval) {
-      if (element._classList) {
-        element._classList._update();
-      }
-    });
-    function Attr(elt, lname, prefix, namespace, value) {
-      this.localName = lname;
-      this.prefix = prefix === null || prefix === "" ? null : "" + prefix;
-      this.namespaceURI = namespace === null || namespace === "" ? null : "" + namespace;
-      this.data = value;
-      this._setOwnerElement(elt);
-    }
-    Attr.prototype = Object.create(Object.prototype, {
-      ownerElement: {
-        get: function() {
-          return this._ownerElement;
-        }
-      },
-      _setOwnerElement: {
-        value: function _setOwnerElement(elt) {
-          this._ownerElement = elt;
-          if (this.prefix === null && this.namespaceURI === null && elt) {
-            this.onchange = elt._attributeChangeHandlers[this.localName];
-          } else {
-            this.onchange = null;
-          }
-        }
-      },
-      name: {
-        get: function() {
-          return this.prefix ? this.prefix + ":" + this.localName : this.localName;
-        }
-      },
-      specified: {
-        get: function() {
-          return true;
-        }
-      },
-      value: {
-        get: function() {
-          return this.data;
-        },
-        set: function(value) {
-          var oldval = this.data;
-          value = value === void 0 ? "" : value + "";
-          if (value === oldval) return;
-          this.data = value;
-          if (this.ownerElement) {
-            if (this.onchange) this.onchange(this.ownerElement, this.localName, oldval, value);
-            if (this.ownerElement.rooted) this.ownerElement.ownerDocument.mutateAttr(this, oldval);
-          }
-        }
-      },
-      cloneNode: {
-        value: function cloneNode(deep) {
-          return new Attr(null, this.localName, this.prefix, this.namespaceURI, this.data);
-        }
-      },
-      nodeType: {
-        get: function() {
-          return Node.ATTRIBUTE_NODE;
-        }
-      },
-      nodeName: {
-        get: function() {
-          return this.name;
-        }
-      },
-      nodeValue: {
-        get: function() {
-          return this.value;
-        },
-        set: function(v) {
-          this.value = v;
-        }
-      },
-      textContent: {
-        get: function() {
-          return this.value;
-        },
-        set: function(v) {
-          if (v === null || v === void 0) {
-            v = "";
-          }
-          this.value = v;
-        }
-      },
-      innerText: {
-        get: function() {
-          return this.value;
-        },
-        set: function(v) {
-          if (v === null || v === void 0) {
-            v = "";
-          }
-          this.value = v;
-        }
-      }
-    });
-    Element._Attr = Attr;
-    function AttributesArray(elt) {
-      NamedNodeMap.call(this, elt);
-      for (var name in elt._attrsByQName) {
-        this[name] = elt._attrsByQName[name];
-      }
-      for (var i = 0; i < elt._attrKeys.length; i++) {
-        this[i] = elt._attrsByLName[elt._attrKeys[i]];
-      }
-    }
-    AttributesArray.prototype = Object.create(NamedNodeMap.prototype, {
-      length: {
-        get: function() {
-          return this.element._attrKeys.length;
-        },
-        set: function() {
-        }
-      },
-      item: {
-        value: function(n) {
-          n = n >>> 0;
-          if (n >= this.length) {
-            return null;
-          }
-          return this.element._attrsByLName[this.element._attrKeys[n]];
-        }
-      }
-    });
-    var _a;
-    if ((_a = globalThis.Symbol) == null ? void 0 : _a.iterator) {
-      AttributesArray.prototype[globalThis.Symbol.iterator] = function() {
-        var i = 0, n = this.length, self = this;
-        return {
-          next: function() {
-            if (i < n) return {
-              value: self.item(i++)
-            };
-            return {
-              done: true
-            };
-          }
-        };
-      };
-    }
-    function ChildrenCollection(e) {
-      this.element = e;
-      this.updateCache();
-    }
-    ChildrenCollection.prototype = Object.create(Object.prototype, {
-      length: {
-        get: function() {
-          this.updateCache();
-          return this.childrenByNumber.length;
-        }
-      },
-      item: {
-        value: function item(n) {
-          this.updateCache();
-          return this.childrenByNumber[n] || null;
-        }
-      },
-      namedItem: {
-        value: function namedItem(name) {
-          this.updateCache();
-          return this.childrenByName[name] || null;
-        }
-      },
-      namedItems: {
-        get: function() {
-          this.updateCache();
-          return this.childrenByName;
-        }
-      },
-      updateCache: {
-        value: function updateCache() {
-          var namedElts = /^(a|applet|area|embed|form|frame|frameset|iframe|img|object)$/;
-          if (this.lastModTime !== this.element.lastModTime) {
-            this.lastModTime = this.element.lastModTime;
-            var n = this.childrenByNumber && this.childrenByNumber.length || 0;
-            for (var i = 0; i < n; i++) {
-              this[i] = void 0;
-            }
-            this.childrenByNumber = [];
-            this.childrenByName = /* @__PURE__ */ Object.create(null);
-            for (var c = this.element.firstChild; c !== null; c = c.nextSibling) {
-              if (c.nodeType === Node.ELEMENT_NODE) {
-                this[this.childrenByNumber.length] = c;
-                this.childrenByNumber.push(c);
-                var id = c.getAttribute("id");
-                if (id && !this.childrenByName[id]) this.childrenByName[id] = c;
-                var name = c.getAttribute("name");
-                if (name && this.element.namespaceURI === NAMESPACE.HTML && namedElts.test(this.element.localName) && !this.childrenByName[name]) this.childrenByName[id] = c;
-              }
-            }
-          }
-        }
-      }
-    });
-    function localNameElementFilter(lname) {
-      return function(e) {
-        return e.localName === lname;
-      };
-    }
-    function htmlLocalNameElementFilter(lname) {
-      var lclname = utils.toASCIILowerCase(lname);
-      if (lclname === lname) return localNameElementFilter(lname);
-      return function(e) {
-        return e.isHTML ? e.localName === lclname : e.localName === lname;
-      };
-    }
-    function namespaceElementFilter(ns) {
-      return function(e) {
-        return e.namespaceURI === ns;
-      };
-    }
-    function namespaceLocalNameElementFilter(ns, lname) {
-      return function(e) {
-        return e.namespaceURI === ns && e.localName === lname;
-      };
-    }
-    function classNamesElementFilter(names) {
-      return function(e) {
-        return names.every(function(n) {
-          return e.classList.contains(n);
-        });
-      };
-    }
-    function elementNameFilter(name) {
-      return function(e) {
-        if (e.namespaceURI !== NAMESPACE.HTML) {
-          return false;
-        }
-        return e.getAttribute("name") === name;
-      };
-    }
-  }
-});
-var require_Leaf = __commonJS({
-  "external/npm/node_modules/domino/lib/Leaf.js"(exports, module) {
-    "use strict";
-    module.exports = Leaf;
-    var Node = require_Node();
-    var NodeList = require_NodeList();
-    var utils = require_utils();
-    var HierarchyRequestError = utils.HierarchyRequestError;
-    var NotFoundError = utils.NotFoundError;
-    function Leaf() {
-      Node.call(this);
-    }
-    Leaf.prototype = Object.create(Node.prototype, {
-      hasChildNodes: {
-        value: function() {
-          return false;
-        }
-      },
-      firstChild: {
-        value: null
-      },
-      lastChild: {
-        value: null
-      },
-      insertBefore: {
-        value: function(node, child) {
-          if (!node.nodeType) throw new TypeError("not a node");
-          HierarchyRequestError();
-        }
-      },
-      replaceChild: {
-        value: function(node, child) {
-          if (!node.nodeType) throw new TypeError("not a node");
-          HierarchyRequestError();
-        }
-      },
-      removeChild: {
-        value: function(node) {
-          if (!node.nodeType) throw new TypeError("not a node");
-          NotFoundError();
-        }
-      },
-      removeChildren: {
-        value: function() {
-        }
-      },
-      childNodes: {
-        get: function() {
-          if (!this._childNodes) this._childNodes = new NodeList();
-          return this._childNodes;
-        }
-      }
-    });
-  }
-});
-var require_CharacterData = __commonJS({
-  "external/npm/node_modules/domino/lib/CharacterData.js"(exports, module) {
-    "use strict";
-    module.exports = CharacterData;
-    var Leaf = require_Leaf();
-    var utils = require_utils();
-    var ChildNode = require_ChildNode();
-    var NonDocumentTypeChildNode = require_NonDocumentTypeChildNode();
-    function CharacterData() {
-      Leaf.call(this);
-    }
-    CharacterData.prototype = Object.create(Leaf.prototype, {
-      substringData: {
-        value: function substringData(offset, count) {
-          if (arguments.length < 2) {
-            throw new TypeError("Not enough arguments");
-          }
-          offset = offset >>> 0;
-          count = count >>> 0;
-          if (offset > this.data.length || offset < 0 || count < 0) {
-            utils.IndexSizeError();
-          }
-          return this.data.substring(offset, offset + count);
-        }
-      },
-      appendData: {
-        value: function appendData(data) {
-          if (arguments.length < 1) {
-            throw new TypeError("Not enough arguments");
-          }
-          this.data += String(data);
-        }
-      },
-      insertData: {
-        value: function insertData(offset, data) {
-          return this.replaceData(offset, 0, data);
-        }
-      },
-      deleteData: {
-        value: function deleteData(offset, count) {
-          return this.replaceData(offset, count, "");
-        }
-      },
-      replaceData: {
-        value: function replaceData(offset, count, data) {
-          var curtext = this.data, len = curtext.length;
-          offset = offset >>> 0;
-          count = count >>> 0;
-          data = String(data);
-          if (offset > len || offset < 0) utils.IndexSizeError();
-          if (offset + count > len) count = len - offset;
-          var prefix = curtext.substring(0, offset), suffix = curtext.substring(offset + count);
-          this.data = prefix + data + suffix;
-        }
-      },
-      isEqual: {
-        value: function isEqual(n) {
-          return this._data === n._data;
-        }
-      },
-      length: {
-        get: function() {
-          return this.data.length;
-        }
-      }
-    });
-    Object.defineProperties(CharacterData.prototype, ChildNode);
-    Object.defineProperties(CharacterData.prototype, NonDocumentTypeChildNode);
-  }
-});
-var require_Text = __commonJS({
-  "external/npm/node_modules/domino/lib/Text.js"(exports, module) {
-    "use strict";
-    module.exports = Text;
-    var utils = require_utils();
-    var Node = require_Node();
-    var CharacterData = require_CharacterData();
-    function Text(doc, data) {
-      CharacterData.call(this);
-      this.nodeType = Node.TEXT_NODE;
-      this.ownerDocument = doc;
-      this._data = data;
-      this._index = void 0;
-    }
-    var nodeValue = {
-      get: function() {
-        return this._data;
-      },
-      set: function(v) {
-        if (v === null || v === void 0) {
-          v = "";
-        } else {
-          v = String(v);
-        }
-        if (v === this._data) return;
-        this._data = v;
-        if (this.rooted) this.ownerDocument.mutateValue(this);
-        if (this.parentNode && this.parentNode._textchangehook) this.parentNode._textchangehook(this);
-      }
-    };
-    Text.prototype = Object.create(CharacterData.prototype, {
-      nodeName: {
-        value: "#text"
-      },
-      nodeValue,
-      textContent: nodeValue,
-      innerText: nodeValue,
-      data: {
-        get: nodeValue.get,
-        set: function(v) {
-          nodeValue.set.call(this, v === null ? "" : String(v));
-        }
-      },
-      splitText: {
-        value: function splitText(offset) {
-          if (offset > this._data.length || offset < 0) utils.IndexSizeError();
-          var newdata = this._data.substring(offset), newnode = this.ownerDocument.createTextNode(newdata);
-          this.data = this.data.substring(0, offset);
-          var parent = this.parentNode;
-          if (parent !== null) parent.insertBefore(newnode, this.nextSibling);
-          return newnode;
-        }
-      },
-      wholeText: {
-        get: function wholeText() {
-          var result = this.textContent;
-          for (var next = this.nextSibling; next; next = next.nextSibling) {
-            if (next.nodeType !== Node.TEXT_NODE) {
-              break;
-            }
-            result += next.textContent;
-          }
-          return result;
-        }
-      },
-      replaceWholeText: {
-        value: utils.nyi
-      },
-      clone: {
-        value: function clone() {
-          return new Text(this.ownerDocument, this._data);
-        }
-      }
-    });
-  }
-});
-var require_Comment = __commonJS({
-  "external/npm/node_modules/domino/lib/Comment.js"(exports, module) {
-    "use strict";
-    module.exports = Comment;
-    var Node = require_Node();
-    var CharacterData = require_CharacterData();
-    function Comment(doc, data) {
-      CharacterData.call(this);
-      this.nodeType = Node.COMMENT_NODE;
-      this.ownerDocument = doc;
-      this._data = data;
-    }
-    var nodeValue = {
-      get: function() {
-        return this._data;
-      },
-      set: function(v) {
-        if (v === null || v === void 0) {
-          v = "";
-        } else {
-          v = String(v);
-        }
-        this._data = v;
-        if (this.rooted) this.ownerDocument.mutateValue(this);
-      }
-    };
-    Comment.prototype = Object.create(CharacterData.prototype, {
-      nodeName: {
-        value: "#comment"
-      },
-      nodeValue,
-      textContent: nodeValue,
-      innerText: nodeValue,
-      data: {
-        get: nodeValue.get,
-        set: function(v) {
-          nodeValue.set.call(this, v === null ? "" : String(v));
-        }
-      },
-      clone: {
-        value: function clone() {
-          return new Comment(this.ownerDocument, this._data);
-        }
-      }
-    });
-  }
-});
-var require_DocumentFragment = __commonJS({
-  "external/npm/node_modules/domino/lib/DocumentFragment.js"(exports, module) {
-    "use strict";
-    module.exports = DocumentFragment;
-    var Node = require_Node();
-    var NodeList = require_NodeList();
-    var ContainerNode = require_ContainerNode();
-    var Element = require_Element();
-    var select = require_select();
-    var utils = require_utils();
-    function DocumentFragment(doc) {
-      ContainerNode.call(this);
-      this.nodeType = Node.DOCUMENT_FRAGMENT_NODE;
-      this.ownerDocument = doc;
-    }
-    DocumentFragment.prototype = Object.create(ContainerNode.prototype, {
-      nodeName: {
-        value: "#document-fragment"
-      },
-      nodeValue: {
-        get: function() {
-          return null;
-        },
-        set: function() {
-        }
-      },
-      textContent: Object.getOwnPropertyDescriptor(Element.prototype, "textContent"),
-      innerText: Object.getOwnPropertyDescriptor(Element.prototype, "innerText"),
-      querySelector: {
-        value: function(selector) {
-          var nodes = this.querySelectorAll(selector);
-          return nodes.length ? nodes[0] : null;
-        }
-      },
-      querySelectorAll: {
-        value: function(selector) {
-          var context = Object.create(this);
-          context.isHTML = true;
-          context.getElementsByTagName = Element.prototype.getElementsByTagName;
-          context.nextElement = Object.getOwnPropertyDescriptor(Element.prototype, "firstElementChild").get;
-          var nodes = select(selector, context);
-          return nodes.item ? nodes : new NodeList(nodes);
-        }
-      },
-      clone: {
-        value: function clone() {
-          return new DocumentFragment(this.ownerDocument);
-        }
-      },
-      isEqual: {
-        value: function isEqual(n) {
-          return true;
-        }
-      },
-      innerHTML: {
-        get: function() {
-          return this.serialize();
-        },
-        set: utils.nyi
-      },
-      outerHTML: {
-        get: function() {
-          return this.serialize();
-        },
-        set: utils.nyi
-      }
-    });
-  }
-});
-var require_ProcessingInstruction = __commonJS({
-  "external/npm/node_modules/domino/lib/ProcessingInstruction.js"(exports, module) {
-    "use strict";
-    module.exports = ProcessingInstruction;
-    var Node = require_Node();
-    var CharacterData = require_CharacterData();
-    function ProcessingInstruction(doc, target, data) {
-      CharacterData.call(this);
-      this.nodeType = Node.PROCESSING_INSTRUCTION_NODE;
-      this.ownerDocument = doc;
-      this.target = target;
-      this._data = data;
-    }
-    var nodeValue = {
-      get: function() {
-        return this._data;
-      },
-      set: function(v) {
-        if (v === null || v === void 0) {
-          v = "";
-        } else {
-          v = String(v);
-        }
-        this._data = v;
-        if (this.rooted) this.ownerDocument.mutateValue(this);
-      }
-    };
-    ProcessingInstruction.prototype = Object.create(CharacterData.prototype, {
-      nodeName: {
-        get: function() {
-          return this.target;
-        }
-      },
-      nodeValue,
-      textContent: nodeValue,
-      innerText: nodeValue,
-      data: {
-        get: nodeValue.get,
-        set: function(v) {
-          nodeValue.set.call(this, v === null ? "" : String(v));
-        }
-      },
-      clone: {
-        value: function clone() {
-          return new ProcessingInstruction(this.ownerDocument, this.target, this._data);
-        }
-      },
-      isEqual: {
-        value: function isEqual(n) {
-          return this.target === n.target && this._data === n._data;
-        }
-      }
-    });
-  }
-});
-var require_NodeFilter = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeFilter.js"(exports, module) {
-    "use strict";
-    var NodeFilter = {
-      FILTER_ACCEPT: 1,
-      FILTER_REJECT: 2,
-      FILTER_SKIP: 3,
-      SHOW_ALL: 4294967295,
-      SHOW_ELEMENT: 1,
-      SHOW_ATTRIBUTE: 2,
-      SHOW_TEXT: 4,
-      SHOW_CDATA_SECTION: 8,
-      SHOW_ENTITY_REFERENCE: 16,
-      SHOW_ENTITY: 32,
-      SHOW_PROCESSING_INSTRUCTION: 64,
-      SHOW_COMMENT: 128,
-      SHOW_DOCUMENT: 256,
-      SHOW_DOCUMENT_TYPE: 512,
-      SHOW_DOCUMENT_FRAGMENT: 1024,
-      SHOW_NOTATION: 2048
-    };
-    module.exports = NodeFilter.constructor = NodeFilter.prototype = NodeFilter;
-  }
-});
-var require_NodeTraversal = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeTraversal.js"(exports, module) {
-    "use strict";
-    var NodeTraversal = module.exports = {
-      nextSkippingChildren,
-      nextAncestorSibling,
-      next,
-      previous,
-      deepLastChild
-    };
-    function nextSkippingChildren(node, stayWithin) {
-      if (node === stayWithin) {
-        return null;
-      }
-      if (node.nextSibling !== null) {
-        return node.nextSibling;
-      }
-      return nextAncestorSibling(node, stayWithin);
-    }
-    function nextAncestorSibling(node, stayWithin) {
-      for (node = node.parentNode; node !== null; node = node.parentNode) {
-        if (node === stayWithin) {
-          return null;
-        }
-        if (node.nextSibling !== null) {
-          return node.nextSibling;
-        }
-      }
-      return null;
-    }
-    function next(node, stayWithin) {
-      var n;
-      n = node.firstChild;
-      if (n !== null) {
-        return n;
-      }
-      if (node === stayWithin) {
-        return null;
-      }
-      n = node.nextSibling;
-      if (n !== null) {
-        return n;
-      }
-      return nextAncestorSibling(node, stayWithin);
-    }
-    function deepLastChild(node) {
-      while (node.lastChild) {
-        node = node.lastChild;
-      }
-      return node;
-    }
-    function previous(node, stayWithin) {
-      var p;
-      p = node.previousSibling;
-      if (p !== null) {
-        return deepLastChild(p);
-      }
-      p = node.parentNode;
-      if (p === stayWithin) {
-        return null;
-      }
-      return p;
-    }
-  }
-});
-var require_TreeWalker = __commonJS({
-  "external/npm/node_modules/domino/lib/TreeWalker.js"(exports, module) {
-    "use strict";
-    module.exports = TreeWalker;
-    var Node = require_Node();
-    var NodeFilter = require_NodeFilter();
-    var NodeTraversal = require_NodeTraversal();
-    var utils = require_utils();
-    var mapChild = {
-      first: "firstChild",
-      last: "lastChild",
-      next: "firstChild",
-      previous: "lastChild"
-    };
-    var mapSibling = {
-      first: "nextSibling",
-      last: "previousSibling",
-      next: "nextSibling",
-      previous: "previousSibling"
-    };
-    function traverseChildren(tw, type) {
-      var child, node, parent, result, sibling;
-      node = tw._currentNode[mapChild[type]];
-      while (node !== null) {
-        result = tw._internalFilter(node);
-        if (result === NodeFilter.FILTER_ACCEPT) {
-          tw._currentNode = node;
-          return node;
-        }
-        if (result === NodeFilter.FILTER_SKIP) {
-          child = node[mapChild[type]];
-          if (child !== null) {
-            node = child;
-            continue;
-          }
-        }
-        while (node !== null) {
-          sibling = node[mapSibling[type]];
-          if (sibling !== null) {
-            node = sibling;
-            break;
-          }
-          parent = node.parentNode;
-          if (parent === null || parent === tw.root || parent === tw._currentNode) {
-            return null;
-          } else {
-            node = parent;
-          }
-        }
-      }
-      return null;
-    }
-    function traverseSiblings(tw, type) {
-      var node, result, sibling;
-      node = tw._currentNode;
-      if (node === tw.root) {
-        return null;
-      }
-      while (true) {
-        sibling = node[mapSibling[type]];
-        while (sibling !== null) {
-          node = sibling;
-          result = tw._internalFilter(node);
-          if (result === NodeFilter.FILTER_ACCEPT) {
-            tw._currentNode = node;
-            return node;
-          }
-          sibling = node[mapChild[type]];
-          if (result === NodeFilter.FILTER_REJECT || sibling === null) {
-            sibling = node[mapSibling[type]];
-          }
-        }
-        node = node.parentNode;
-        if (node === null || node === tw.root) {
-          return null;
-        }
-        if (tw._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {
-          return null;
-        }
-      }
-    }
-    function TreeWalker(root, whatToShow, filter) {
-      if (!root || !root.nodeType) {
-        utils.NotSupportedError();
-      }
-      this._root = root;
-      this._whatToShow = Number(whatToShow) || 0;
-      this._filter = filter || null;
-      this._active = false;
-      this._currentNode = root;
-    }
-    Object.defineProperties(TreeWalker.prototype, {
-      root: {
-        get: function() {
-          return this._root;
-        }
-      },
-      whatToShow: {
-        get: function() {
-          return this._whatToShow;
-        }
-      },
-      filter: {
-        get: function() {
-          return this._filter;
-        }
-      },
-      currentNode: {
-        get: function currentNode() {
-          return this._currentNode;
-        },
-        set: function setCurrentNode(v) {
-          if (!(v instanceof Node)) {
-            throw new TypeError("Not a Node");
-          }
-          this._currentNode = v;
-        }
-      },
-      _internalFilter: {
-        value: function _internalFilter(node) {
-          var result, filter;
-          if (this._active) {
-            utils.InvalidStateError();
-          }
-          if (!(1 << node.nodeType - 1 & this._whatToShow)) {
-            return NodeFilter.FILTER_SKIP;
-          }
-          filter = this._filter;
-          if (filter === null) {
-            result = NodeFilter.FILTER_ACCEPT;
-          } else {
-            this._active = true;
-            try {
-              if (typeof filter === "function") {
-                result = filter(node);
-              } else {
-                result = filter.acceptNode(node);
-              }
-            } finally {
-              this._active = false;
-            }
-          }
-          return +result;
-        }
-      },
-      parentNode: {
-        value: function parentNode() {
-          var node = this._currentNode;
-          while (node !== this.root) {
-            node = node.parentNode;
-            if (node === null) {
-              return null;
-            }
-            if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {
-              this._currentNode = node;
-              return node;
-            }
-          }
-          return null;
-        }
-      },
-      firstChild: {
-        value: function firstChild() {
-          return traverseChildren(this, "first");
-        }
-      },
-      lastChild: {
-        value: function lastChild() {
-          return traverseChildren(this, "last");
-        }
-      },
-      previousSibling: {
-        value: function previousSibling() {
-          return traverseSiblings(this, "previous");
-        }
-      },
-      nextSibling: {
-        value: function nextSibling() {
-          return traverseSiblings(this, "next");
-        }
-      },
-      previousNode: {
-        value: function previousNode() {
-          var node, result, previousSibling, lastChild;
-          node = this._currentNode;
-          while (node !== this._root) {
-            for (previousSibling = node.previousSibling; previousSibling; previousSibling = node.previousSibling) {
-              node = previousSibling;
-              result = this._internalFilter(node);
-              if (result === NodeFilter.FILTER_REJECT) {
-                continue;
-              }
-              for (lastChild = node.lastChild; lastChild; lastChild = node.lastChild) {
-                node = lastChild;
-                result = this._internalFilter(node);
-                if (result === NodeFilter.FILTER_REJECT) {
-                  break;
-                }
-              }
-              if (result === NodeFilter.FILTER_ACCEPT) {
-                this._currentNode = node;
-                return node;
-              }
-            }
-            if (node === this.root || node.parentNode === null) {
-              return null;
-            }
-            node = node.parentNode;
-            if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {
-              this._currentNode = node;
-              return node;
-            }
-          }
-          return null;
-        }
-      },
-      nextNode: {
-        value: function nextNode() {
-          var node, result, firstChild, nextSibling;
-          node = this._currentNode;
-          result = NodeFilter.FILTER_ACCEPT;
-          CHILDREN: while (true) {
-            for (firstChild = node.firstChild; firstChild; firstChild = node.firstChild) {
-              node = firstChild;
-              result = this._internalFilter(node);
-              if (result === NodeFilter.FILTER_ACCEPT) {
-                this._currentNode = node;
-                return node;
-              } else if (result === NodeFilter.FILTER_REJECT) {
-                break;
-              }
-            }
-            for (nextSibling = NodeTraversal.nextSkippingChildren(node, this.root); nextSibling; nextSibling = NodeTraversal.nextSkippingChildren(node, this.root)) {
-              node = nextSibling;
-              result = this._internalFilter(node);
-              if (result === NodeFilter.FILTER_ACCEPT) {
-                this._currentNode = node;
-                return node;
-              } else if (result === NodeFilter.FILTER_SKIP) {
-                continue CHILDREN;
-              }
-            }
-            return null;
-          }
-        }
-      },
-      toString: {
-        value: function toString() {
-          return "[object TreeWalker]";
-        }
-      }
-    });
-  }
-});
-var require_NodeIterator = __commonJS({
-  "external/npm/node_modules/domino/lib/NodeIterator.js"(exports, module) {
-    "use strict";
-    module.exports = NodeIterator;
-    var NodeFilter = require_NodeFilter();
-    var NodeTraversal = require_NodeTraversal();
-    var utils = require_utils();
-    function move(node, stayWithin, directionIsNext) {
-      if (directionIsNext) {
-        return NodeTraversal.next(node, stayWithin);
-      } else {
-        if (node === stayWithin) {
-          return null;
-        }
-        return NodeTraversal.previous(node, null);
-      }
-    }
-    function isInclusiveAncestor(node, possibleChild) {
-      for (; possibleChild; possibleChild = possibleChild.parentNode) {
-        if (node === possibleChild) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function traverse(ni, directionIsNext) {
-      var node, beforeNode;
-      node = ni._referenceNode;
-      beforeNode = ni._pointerBeforeReferenceNode;
-      while (true) {
-        if (beforeNode === directionIsNext) {
-          beforeNode = !beforeNode;
-        } else {
-          node = move(node, ni._root, directionIsNext);
-          if (node === null) {
-            return null;
-          }
-        }
-        var result = ni._internalFilter(node);
-        if (result === NodeFilter.FILTER_ACCEPT) {
-          break;
-        }
-      }
-      ni._referenceNode = node;
-      ni._pointerBeforeReferenceNode = beforeNode;
-      return node;
-    }
-    function NodeIterator(root, whatToShow, filter) {
-      if (!root || !root.nodeType) {
-        utils.NotSupportedError();
-      }
-      this._root = root;
-      this._referenceNode = root;
-      this._pointerBeforeReferenceNode = true;
-      this._whatToShow = Number(whatToShow) || 0;
-      this._filter = filter || null;
-      this._active = false;
-      root.doc._attachNodeIterator(this);
-    }
-    Object.defineProperties(NodeIterator.prototype, {
-      root: {
-        get: function root() {
-          return this._root;
-        }
-      },
-      referenceNode: {
-        get: function referenceNode() {
-          return this._referenceNode;
-        }
-      },
-      pointerBeforeReferenceNode: {
-        get: function pointerBeforeReferenceNode() {
-          return this._pointerBeforeReferenceNode;
-        }
-      },
-      whatToShow: {
-        get: function whatToShow() {
-          return this._whatToShow;
-        }
-      },
-      filter: {
-        get: function filter() {
-          return this._filter;
-        }
-      },
-      _internalFilter: {
-        value: function _internalFilter(node) {
-          var result, filter;
-          if (this._active) {
-            utils.InvalidStateError();
-          }
-          if (!(1 << node.nodeType - 1 & this._whatToShow)) {
-            return NodeFilter.FILTER_SKIP;
-          }
-          filter = this._filter;
-          if (filter === null) {
-            result = NodeFilter.FILTER_ACCEPT;
-          } else {
-            this._active = true;
-            try {
-              if (typeof filter === "function") {
-                result = filter(node);
-              } else {
-                result = filter.acceptNode(node);
-              }
-            } finally {
-              this._active = false;
-            }
-          }
-          return +result;
-        }
-      },
-      _preremove: {
-        value: function _preremove(toBeRemovedNode) {
-          if (isInclusiveAncestor(toBeRemovedNode, this._root)) {
-            return;
-          }
-          if (!isInclusiveAncestor(toBeRemovedNode, this._referenceNode)) {
-            return;
-          }
-          if (this._pointerBeforeReferenceNode) {
-            var next = toBeRemovedNode;
-            while (next.lastChild) {
-              next = next.lastChild;
-            }
-            next = NodeTraversal.next(next, this.root);
-            if (next) {
-              this._referenceNode = next;
-              return;
-            }
-            this._pointerBeforeReferenceNode = false;
-          }
-          if (toBeRemovedNode.previousSibling === null) {
-            this._referenceNode = toBeRemovedNode.parentNode;
-          } else {
-            this._referenceNode = toBeRemovedNode.previousSibling;
-            var lastChild;
-            for (lastChild = this._referenceNode.lastChild; lastChild; lastChild = this._referenceNode.lastChild) {
-              this._referenceNode = lastChild;
-            }
-          }
-        }
-      },
-      nextNode: {
-        value: function nextNode() {
-          return traverse(this, true);
-        }
-      },
-      previousNode: {
-        value: function previousNode() {
-          return traverse(this, false);
-        }
-      },
-      detach: {
-        value: function detach() {
-        }
-      },
-      toString: {
-        value: function toString() {
-          return "[object NodeIterator]";
-        }
-      }
-    });
-  }
-});
-var require_URL = __commonJS({
-  "external/npm/node_modules/domino/lib/URL.js"(exports, module) {
-    "use strict";
-    module.exports = URL2;
-    function URL2(url) {
-      if (!url) return Object.create(URL2.prototype);
-      this.url = url.replace(/^[ \t\n\r\f]+|[ \t\n\r\f]+$/g, "");
-      var match = URL2.pattern.exec(this.url);
-      if (match) {
-        if (match[2]) this.scheme = match[2];
-        if (match[4]) {
-          var userinfo = match[4].match(URL2.userinfoPattern);
-          if (userinfo) {
-            this.username = userinfo[1];
-            this.password = userinfo[3];
-            match[4] = match[4].substring(userinfo[0].length);
-          }
-          if (match[4].match(URL2.portPattern)) {
-            var pos = match[4].lastIndexOf(":");
-            this.host = match[4].substring(0, pos);
-            this.port = match[4].substring(pos + 1);
-          } else {
-            this.host = match[4];
-          }
-        }
-        if (match[5]) this.path = match[5];
-        if (match[6]) this.query = match[7];
-        if (match[8]) this.fragment = match[9];
-      }
-    }
-    URL2.pattern = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/;
-    URL2.userinfoPattern = /^([^@:]*)(:([^@]*))?@/;
-    URL2.portPattern = /:\d+$/;
-    URL2.authorityPattern = /^[^:\/?#]+:\/\//;
-    URL2.hierarchyPattern = /^[^:\/?#]+:\//;
-    URL2.percentEncode = function percentEncode(s) {
-      var c = s.charCodeAt(0);
-      if (c < 256) return "%" + c.toString(16);
-      else throw Error("can't percent-encode codepoints > 255 yet");
-    };
-    URL2.prototype = {
-      constructor: URL2,
-      isAbsolute: function() {
-        return !!this.scheme;
-      },
-      isAuthorityBased: function() {
-        return URL2.authorityPattern.test(this.url);
-      },
-      isHierarchical: function() {
-        return URL2.hierarchyPattern.test(this.url);
-      },
-      toString: function() {
-        var s = "";
-        if (this.scheme !== void 0) s += this.scheme + ":";
-        if (this.isAbsolute()) {
-          s += "//";
-          if (this.username || this.password) {
-            s += this.username || "";
-            if (this.password) {
-              s += ":" + this.password;
-            }
-            s += "@";
-          }
-          if (this.host) {
-            s += this.host;
-          }
-        }
-        if (this.port !== void 0) s += ":" + this.port;
-        if (this.path !== void 0) s += this.path;
-        if (this.query !== void 0) s += "?" + this.query;
-        if (this.fragment !== void 0) s += "#" + this.fragment;
-        return s;
-      },
-      resolve: function(relative) {
-        var base = this;
-        var r = new URL2(relative);
-        var t = new URL2();
-        if (r.scheme !== void 0) {
-          t.scheme = r.scheme;
-          t.username = r.username;
-          t.password = r.password;
-          t.host = r.host;
-          t.port = r.port;
-          t.path = remove_dot_segments(r.path);
-          t.query = r.query;
-        } else {
-          t.scheme = base.scheme;
-          if (r.host !== void 0) {
-            t.username = r.username;
-            t.password = r.password;
-            t.host = r.host;
-            t.port = r.port;
-            t.path = remove_dot_segments(r.path);
-            t.query = r.query;
-          } else {
-            t.username = base.username;
-            t.password = base.password;
-            t.host = base.host;
-            t.port = base.port;
-            if (!r.path) {
-              t.path = base.path;
-              if (r.query !== void 0) t.query = r.query;
-              else t.query = base.query;
-            } else {
-              if (r.path.charAt(0) === "/") {
-                t.path = remove_dot_segments(r.path);
-              } else {
-                t.path = merge(base.path, r.path);
-                t.path = remove_dot_segments(t.path);
-              }
-              t.query = r.query;
-            }
-          }
-        }
-        t.fragment = r.fragment;
-        return t.toString();
-        function merge(basepath, refpath) {
-          if (base.host !== void 0 && !base.path) return "/" + refpath;
-          var lastslash = basepath.lastIndexOf("/");
-          if (lastslash === -1) return refpath;
-          else return basepath.substring(0, lastslash + 1) + refpath;
-        }
-        function remove_dot_segments(path) {
-          if (!path) return path;
-          var output = "";
-          while (path.length > 0) {
-            if (path === "." || path === "..") {
-              path = "";
-              break;
-            }
-            var twochars = path.substring(0, 2);
-            var threechars = path.substring(0, 3);
-            var fourchars = path.substring(0, 4);
-            if (threechars === "../") {
-              path = path.substring(3);
-            } else if (twochars === "./") {
-              path = path.substring(2);
-            } else if (threechars === "/./") {
-              path = "/" + path.substring(3);
-            } else if (twochars === "/." && path.length === 2) {
-              path = "/";
-            } else if (fourchars === "/../" || threechars === "/.." && path.length === 3) {
-              path = "/" + path.substring(4);
-              output = output.replace(/\/?[^\/]*$/, "");
-            } else {
-              var segment = path.match(/(\/?([^\/]*))/)[0];
-              output += segment;
-              path = path.substring(segment.length);
-            }
-          }
-          return output;
-        }
-      }
-    };
-  }
-});
-var require_CustomEvent = __commonJS({
-  "external/npm/node_modules/domino/lib/CustomEvent.js"(exports, module) {
-    "use strict";
-    module.exports = CustomEvent;
-    var Event = require_Event();
-    function CustomEvent(type, dictionary) {
-      Event.call(this, type, dictionary);
-    }
-    CustomEvent.prototype = Object.create(Event.prototype, {
-      constructor: {
-        value: CustomEvent
-      }
-    });
-  }
-});
-var require_events = __commonJS({
-  "external/npm/node_modules/domino/lib/events.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      Event: require_Event(),
-      UIEvent: require_UIEvent(),
-      MouseEvent: require_MouseEvent(),
-      CustomEvent: require_CustomEvent()
-    };
-  }
-});
-var require_style_parser = __commonJS({
-  "external/npm/node_modules/domino/lib/style_parser.js"(exports) {
-    "use strict";
-    Object.defineProperty(exports, "__esModule", {
-      value: true
-    });
-    exports.hyphenate = exports.parse = void 0;
-    function parse(value) {
-      const styles = [];
-      let i = 0;
-      let parenDepth = 0;
-      let quote = 0;
-      let valueStart = 0;
-      let propStart = 0;
-      let currentProp = null;
-      while (i < value.length) {
-        const token = value.charCodeAt(i++);
-        switch (token) {
-          case 40:
-            parenDepth++;
-            break;
-          case 41:
-            parenDepth--;
-            break;
-          case 39:
-            if (quote === 0) {
-              quote = 39;
-            } else if (quote === 39 && value.charCodeAt(i - 1) !== 92) {
-              quote = 0;
-            }
-            break;
-          case 34:
-            if (quote === 0) {
-              quote = 34;
-            } else if (quote === 34 && value.charCodeAt(i - 1) !== 92) {
-              quote = 0;
-            }
-            break;
-          case 58:
-            if (!currentProp && parenDepth === 0 && quote === 0) {
-              currentProp = hyphenate(value.substring(propStart, i - 1).trim());
-              valueStart = i;
-            }
-            break;
-          case 59:
-            if (currentProp && valueStart > 0 && parenDepth === 0 && quote === 0) {
-              const styleVal = value.substring(valueStart, i - 1).trim();
-              styles.push(currentProp, styleVal);
-              propStart = i;
-              valueStart = 0;
-              currentProp = null;
-            }
-            break;
-        }
-      }
-      if (currentProp && valueStart) {
-        const styleVal = value.slice(valueStart).trim();
-        styles.push(currentProp, styleVal);
-      }
-      return styles;
-    }
-    exports.parse = parse;
-    function hyphenate(value) {
-      return value.replace(/[a-z][A-Z]/g, (v) => {
-        return v.charAt(0) + "-" + v.charAt(1);
-      }).toLowerCase();
-    }
-    exports.hyphenate = hyphenate;
-  }
-});
-var require_CSSStyleDeclaration = __commonJS({
-  "external/npm/node_modules/domino/lib/CSSStyleDeclaration.js"(exports, module) {
-    "use strict";
-    var {
-      parse
-    } = require_style_parser();
-    module.exports = function(elt) {
-      const style2 = new CSSStyleDeclaration(elt);
-      const handler = {
-        get: function(target, property) {
-          return property in target ? target[property] : target.getPropertyValue(dasherizeProperty(property));
-        },
-        has: function(target, key) {
-          return true;
-        },
-        set: function(target, property, value) {
-          if (property in target) {
-            target[property] = value;
-          } else {
-            target.setProperty(dasherizeProperty(property), value != null ? value : void 0);
-          }
-          return true;
-        }
-      };
-      return new Proxy(style2, handler);
-    };
-    function dasherizeProperty(property) {
-      return property.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
-    }
-    function CSSStyleDeclaration(elt) {
-      this._element = elt;
-    }
-    var IMPORTANT_BANG = "!important";
-    function parseStyles(value) {
-      const result = {
-        property: {},
-        priority: {}
-      };
-      if (!value) {
-        return result;
-      }
-      const styleValues = parse(value);
-      if (styleValues.length < 2) {
-        return result;
-      }
-      for (let i = 0; i < styleValues.length; i += 2) {
-        const name = styleValues[i];
-        let value2 = styleValues[i + 1];
-        if (value2.endsWith(IMPORTANT_BANG)) {
-          result.priority[name] = "important";
-          value2 = value2.slice(0, -IMPORTANT_BANG.length).trim();
-        }
-        result.property[name] = value2;
-      }
-      return result;
-    }
-    var NO_CHANGE = {};
-    CSSStyleDeclaration.prototype = Object.create(Object.prototype, {
-      _parsed: {
-        get: function() {
-          if (!this._parsedStyles || this.cssText !== this._lastParsedText) {
-            var text = this.cssText;
-            this._parsedStyles = parseStyles(text);
-            this._lastParsedText = text;
-            delete this._names;
-          }
-          return this._parsedStyles;
-        }
-      },
-      _serialize: {
-        value: function() {
-          var styles = this._parsed;
-          var s = "";
-          for (var name in styles.property) {
-            if (s) s += " ";
-            s += name + ": " + styles.property[name];
-            if (styles.priority[name]) {
-              s += " !" + styles.priority[name];
-            }
-            s += ";";
-          }
-          this.cssText = s;
-          this._lastParsedText = s;
-          delete this._names;
-        }
-      },
-      cssText: {
-        get: function() {
-          return this._element.getAttribute("style");
-        },
-        set: function(value) {
-          this._element.setAttribute("style", value);
-        }
-      },
-      length: {
-        get: function() {
-          if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);
-          return this._names.length;
-        }
-      },
-      item: {
-        value: function(n) {
-          if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);
-          return this._names[n];
-        }
-      },
-      getPropertyValue: {
-        value: function(property) {
-          property = property.toLowerCase();
-          return this._parsed.property[property] || "";
-        }
-      },
-      getPropertyPriority: {
-        value: function(property) {
-          property = property.toLowerCase();
-          return this._parsed.priority[property] || "";
-        }
-      },
-      setProperty: {
-        value: function(property, value, priority) {
-          property = property.toLowerCase();
-          if (value === null || value === void 0) {
-            value = "";
-          }
-          if (priority === null || priority === void 0) {
-            priority = "";
-          }
-          if (value !== NO_CHANGE) {
-            value = "" + value;
-          }
-          value = value.trim();
-          if (value === "") {
-            this.removeProperty(property);
-            return;
-          }
-          if (priority !== "" && priority !== NO_CHANGE && !/^important$/i.test(priority)) {
-            return;
-          }
-          var styles = this._parsed;
-          if (value === NO_CHANGE) {
-            if (!styles.property[property]) {
-              return;
-            }
-            if (priority !== "") {
-              styles.priority[property] = "important";
-            } else {
-              delete styles.priority[property];
-            }
-          } else {
-            if (value.includes(";") && !value.includes("data:")) return;
-            var newprops = parseStyles(property + ":" + value);
-            if (Object.getOwnPropertyNames(newprops.property).length === 0) {
-              return;
-            }
-            if (Object.getOwnPropertyNames(newprops.priority).length !== 0) {
-              return;
-            }
-            for (var p in newprops.property) {
-              styles.property[p] = newprops.property[p];
-              if (priority === NO_CHANGE) {
-                continue;
-              } else if (priority !== "") {
-                styles.priority[p] = "important";
-              } else if (styles.priority[p]) {
-                delete styles.priority[p];
-              }
-            }
-          }
-          this._serialize();
-        }
-      },
-      setPropertyValue: {
-        value: function(property, value) {
-          return this.setProperty(property, value, NO_CHANGE);
-        }
-      },
-      setPropertyPriority: {
-        value: function(property, priority) {
-          return this.setProperty(property, NO_CHANGE, priority);
-        }
-      },
-      removeProperty: {
-        value: function(property) {
-          property = property.toLowerCase();
-          var styles = this._parsed;
-          if (property in styles.property) {
-            delete styles.property[property];
-            delete styles.priority[property];
-            this._serialize();
-          }
-        }
-      }
-    });
-  }
-});
-var require_URLUtils = __commonJS({
-  "external/npm/node_modules/domino/lib/URLUtils.js"(exports, module) {
-    "use strict";
-    var URL2 = require_URL();
-    module.exports = URLUtils;
-    function URLUtils() {
-    }
-    URLUtils.prototype = Object.create(Object.prototype, {
-      _url: {
-        get: function() {
-          return new URL2(this.href);
-        }
-      },
-      protocol: {
-        get: function() {
-          var url = this._url;
-          if (url && url.scheme) return url.scheme + ":";
-          else return ":";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute()) {
-            v = v.replace(/:+$/, "");
-            v = v.replace(/[^-+\.a-zA-Z0-9]/g, URL2.percentEncode);
-            if (v.length > 0) {
-              url.scheme = v;
-              output = url.toString();
-            }
-          }
-          this.href = output;
-        }
-      },
-      host: {
-        get: function() {
-          var url = this._url;
-          if (url.isAbsolute() && url.isAuthorityBased()) return url.host + (url.port ? ":" + url.port : "");
-          else return "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute() && url.isAuthorityBased()) {
-            v = v.replace(/[^-+\._~!$&'()*,;:=a-zA-Z0-9]/g, URL2.percentEncode);
-            if (v.length > 0) {
-              url.host = v;
-              delete url.port;
-              output = url.toString();
-            }
-          }
-          this.href = output;
-        }
-      },
-      hostname: {
-        get: function() {
-          var url = this._url;
-          if (url.isAbsolute() && url.isAuthorityBased()) return url.host;
-          else return "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute() && url.isAuthorityBased()) {
-            v = v.replace(/^\/+/, "");
-            v = v.replace(/[^-+\._~!$&'()*,;:=a-zA-Z0-9]/g, URL2.percentEncode);
-            if (v.length > 0) {
-              url.host = v;
-              output = url.toString();
-            }
-          }
-          this.href = output;
-        }
-      },
-      port: {
-        get: function() {
-          var url = this._url;
-          if (url.isAbsolute() && url.isAuthorityBased() && url.port !== void 0) return url.port;
-          else return "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute() && url.isAuthorityBased()) {
-            v = "" + v;
-            v = v.replace(/[^0-9].*$/, "");
-            v = v.replace(/^0+/, "");
-            if (v.length === 0) v = "0";
-            if (parseInt(v, 10) <= 65535) {
-              url.port = v;
-              output = url.toString();
-            }
-          }
-          this.href = output;
-        }
-      },
-      pathname: {
-        get: function() {
-          var url = this._url;
-          if (url.isAbsolute() && url.isHierarchical()) return url.path;
-          else return "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute() && url.isHierarchical()) {
-            if (v.charAt(0) !== "/") v = "/" + v;
-            v = v.replace(/[^-+\._~!$&'()*,;:=@\/a-zA-Z0-9]/g, URL2.percentEncode);
-            url.path = v;
-            output = url.toString();
-          }
-          this.href = output;
-        }
-      },
-      search: {
-        get: function() {
-          var url = this._url;
-          if (url.isAbsolute() && url.isHierarchical() && url.query !== void 0) return "?" + url.query;
-          else return "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute() && url.isHierarchical()) {
-            if (v.charAt(0) === "?") v = v.substring(1);
-            v = v.replace(/[^-+\._~!$&'()*,;:=@\/?a-zA-Z0-9]/g, URL2.percentEncode);
-            url.query = v;
-            output = url.toString();
-          }
-          this.href = output;
-        }
-      },
-      hash: {
-        get: function() {
-          var url = this._url;
-          if (url == null || url.fragment == null || url.fragment === "") {
-            return "";
-          } else {
-            return "#" + url.fragment;
-          }
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (v.charAt(0) === "#") v = v.substring(1);
-          v = v.replace(/[^-+\._~!$&'()*,;:=@\/?a-zA-Z0-9]/g, URL2.percentEncode);
-          url.fragment = v;
-          output = url.toString();
-          this.href = output;
-        }
-      },
-      username: {
-        get: function() {
-          var url = this._url;
-          return url.username || "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute()) {
-            v = v.replace(/[\x00-\x1F\x7F-\uFFFF "#<>?`\/@\\:]/g, URL2.percentEncode);
-            url.username = v;
-            output = url.toString();
-          }
-          this.href = output;
-        }
-      },
-      password: {
-        get: function() {
-          var url = this._url;
-          return url.password || "";
-        },
-        set: function(v) {
-          var output = this.href;
-          var url = new URL2(output);
-          if (url.isAbsolute()) {
-            if (v === "") {
-              url.password = null;
-            } else {
-              v = v.replace(/[\x00-\x1F\x7F-\uFFFF "#<>?`\/@\\]/g, URL2.percentEncode);
-              url.password = v;
-            }
-            output = url.toString();
-          }
-          this.href = output;
-        }
-      },
-      origin: {
-        get: function() {
-          var url = this._url;
-          if (url == null) {
-            return "";
-          }
-          var originForPort = function(defaultPort) {
-            var origin = [url.scheme, url.host, +url.port || defaultPort];
-            return origin[0] + "://" + origin[1] + (origin[2] === defaultPort ? "" : ":" + origin[2]);
-          };
-          switch (url.scheme) {
-            case "ftp":
-              return originForPort(21);
-            case "gopher":
-              return originForPort(70);
-            case "http":
-            case "ws":
-              return originForPort(80);
-            case "https":
-            case "wss":
-              return originForPort(443);
-            default:
-              return url.scheme + "://";
-          }
-        }
-      }
-    });
-    URLUtils._inherit = function(proto) {
-      Object.getOwnPropertyNames(URLUtils.prototype).forEach(function(p) {
-        if (p === "constructor" || p === "href") {
-          return;
-        }
-        var desc = Object.getOwnPropertyDescriptor(URLUtils.prototype, p);
-        Object.defineProperty(proto, p, desc);
-      });
-    };
-  }
-});
-var require_defineElement = __commonJS({
-  "external/npm/node_modules/domino/lib/defineElement.js"(exports, module) {
-    "use strict";
-    var attributes = require_attributes();
-    var isApiWritable = require_config().isApiWritable;
-    module.exports = function(spec, defaultConstructor, tagList, tagNameToImpl) {
-      var c = spec.ctor;
-      if (c) {
-        var props = spec.props || {};
-        if (spec.attributes) {
-          for (var n in spec.attributes) {
-            var attr = spec.attributes[n];
-            if (typeof attr !== "object" || Array.isArray(attr)) attr = {
-              type: attr
-            };
-            if (!attr.name) attr.name = n.toLowerCase();
-            props[n] = attributes.property(attr);
-          }
-        }
-        props.constructor = {
-          value: c,
-          writable: isApiWritable
-        };
-        c.prototype = Object.create((spec.superclass || defaultConstructor).prototype, props);
-        if (spec.events) {
-          addEventHandlers(c, spec.events);
-        }
-        tagList[spec.name] = c;
-      } else {
-        c = defaultConstructor;
-      }
-      (spec.tags || spec.tag && [spec.tag] || []).forEach(function(tag) {
-        tagNameToImpl[tag] = c;
-      });
-      return c;
-    };
-    function EventHandlerBuilder(body, document2, form, element) {
-      this.body = body;
-      this.document = document2;
-      this.form = form;
-      this.element = element;
-    }
-    EventHandlerBuilder.prototype.build = function() {
-      return () => {
-      };
-    };
-    function EventHandlerChangeHandler(elt, name, oldval, newval) {
-      var doc = elt.ownerDocument || /* @__PURE__ */ Object.create(null);
-      var form = elt.form || /* @__PURE__ */ Object.create(null);
-      elt[name] = new EventHandlerBuilder(newval, doc, form, elt).build();
-    }
-    function addEventHandlers(c, eventHandlerTypes) {
-      var p = c.prototype;
-      eventHandlerTypes.forEach(function(type) {
-        Object.defineProperty(p, "on" + type, {
-          get: function() {
-            return this._getEventHandler(type);
-          },
-          set: function(v) {
-            this._setEventHandler(type, v);
-          }
-        });
-        attributes.registerChangeHandler(c, "on" + type, EventHandlerChangeHandler);
-      });
-    }
-  }
-});
-var require_htmlelts = __commonJS({
-  "external/npm/node_modules/domino/lib/htmlelts.js"(exports) {
-    "use strict";
-    var Node = require_Node();
-    var Element = require_Element();
-    var CSSStyleDeclaration = require_CSSStyleDeclaration();
-    var utils = require_utils();
-    var URLUtils = require_URLUtils();
-    var defineElement = require_defineElement();
-    var htmlElements = exports.elements = {};
-    var htmlNameToImpl = /* @__PURE__ */ Object.create(null);
-    exports.createElement = function(doc, localName, prefix) {
-      var impl = htmlNameToImpl[localName] || HTMLUnknownElement;
-      return new impl(doc, localName, prefix);
-    };
-    function define(spec) {
-      return defineElement(spec, HTMLElement, htmlElements, htmlNameToImpl);
-    }
-    function URL2(attr) {
-      return {
-        get: function() {
-          var v = this._getattr(attr);
-          if (v === null) {
-            return "";
-          }
-          var url = this.doc._resolve(v);
-          return url === null ? v : url;
-        },
-        set: function(value) {
-          this._setattr(attr, value);
-        }
-      };
-    }
-    function CORS(attr) {
-      return {
-        get: function() {
-          var v = this._getattr(attr);
-          if (v === null) {
-            return null;
-          }
-          if (v.toLowerCase() === "use-credentials") {
-            return "use-credentials";
-          }
-          return "anonymous";
-        },
-        set: function(value) {
-          if (value === null || value === void 0) {
-            this.removeAttribute(attr);
-          } else {
-            this._setattr(attr, value);
-          }
-        }
-      };
-    }
-    var REFERRER = {
-      type: ["", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin", "unsafe-url"],
-      missing: ""
-    };
-    var focusableElements = {
-      "A": true,
-      "LINK": true,
-      "BUTTON": true,
-      "INPUT": true,
-      "SELECT": true,
-      "TEXTAREA": true,
-      "COMMAND": true
-    };
-    var HTMLFormElement = function(doc, localName, prefix) {
-      HTMLElement.call(this, doc, localName, prefix);
-      this._form = null;
-    };
-    var HTMLElement = exports.HTMLElement = define({
-      superclass: Element,
-      name: "HTMLElement",
-      ctor: function HTMLElement2(doc, localName, prefix) {
-        Element.call(this, doc, localName, utils.NAMESPACE.HTML, prefix);
-      },
-      props: {
-        dangerouslySetInnerHTML: {
-          set: function(v) {
-            this._innerHTML = v;
-          }
-        },
-        innerHTML: {
-          get: function() {
-            return this.serialize();
-          },
-          set: function(v) {
-            var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, this);
-            parser.parse(v === null ? "" : String(v), true);
-            var target = this instanceof htmlNameToImpl.template ? this.content : this;
-            while (target.hasChildNodes()) target.removeChild(target.firstChild);
-            target.appendChild(parser._asDocumentFragment());
-          }
-        },
-        style: {
-          get: function() {
-            if (!this._style) this._style = new CSSStyleDeclaration(this);
-            return this._style;
-          },
-          set: function(v) {
-            if (v === null || v === void 0) {
-              v = "";
-            }
-            this._setattr("style", String(v));
-          }
-        },
-        blur: {
-          value: function() {
-          }
-        },
-        focus: {
-          value: function() {
-          }
-        },
-        forceSpellCheck: {
-          value: function() {
-          }
-        },
-        click: {
-          value: function() {
-            if (this._click_in_progress) return;
-            this._click_in_progress = true;
-            try {
-              if (this._pre_click_activation_steps) this._pre_click_activation_steps();
-              var event = this.ownerDocument.createEvent("MouseEvent");
-              event.initMouseEvent("click", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
-              var success = this.dispatchEvent(event);
-              if (success) {
-                if (this._post_click_activation_steps) this._post_click_activation_steps(event);
-              } else {
-                if (this._cancelled_activation_steps) this._cancelled_activation_steps();
-              }
-            } finally {
-              this._click_in_progress = false;
-            }
-          }
-        },
-        submit: {
-          value: utils.nyi
-        }
-      },
-      attributes: {
-        title: String,
-        lang: String,
-        dir: {
-          type: ["ltr", "rtl", "auto"],
-          missing: ""
-        },
-        draggable: {
-          type: ["true", "false"],
-          treatNullAsEmptyString: true
-        },
-        spellcheck: {
-          type: ["true", "false"],
-          missing: ""
-        },
-        enterKeyHint: {
-          type: ["enter", "done", "go", "next", "previous", "search", "send"],
-          missing: ""
-        },
-        autoCapitalize: {
-          type: ["off", "on", "none", "sentences", "words", "characters"],
-          missing: ""
-        },
-        autoFocus: Boolean,
-        accessKey: String,
-        nonce: String,
-        hidden: Boolean,
-        translate: {
-          type: ["no", "yes"],
-          missing: ""
-        },
-        tabIndex: {
-          type: "long",
-          default: function() {
-            if (this.tagName in focusableElements || this.contentEditable) return 0;
-            else return -1;
-          }
-        }
-      },
-      events: ["abort", "canplay", "canplaythrough", "change", "click", "contextmenu", "cuechange", "dblclick", "drag", "dragend", "dragenter", "dragleave", "dragover", "dragstart", "drop", "durationchange", "emptied", "ended", "input", "invalid", "keydown", "keypress", "keyup", "loadeddata", "loadedmetadata", "loadstart", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup", "mousewheel", "pause", "play", "playing", "progress", "ratechange", "readystatechange", "reset", "seeked", "seeking", "select", "show", "stalled", "submit", "suspend", "timeupdate", "volumechange", "waiting", "blur", "error", "focus", "load", "scroll"]
-    });
-    var HTMLUnknownElement = define({
-      name: "HTMLUnknownElement",
-      ctor: function HTMLUnknownElement2(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    var formAssociatedProps = {
-      form: {
-        get: function() {
-          return this._form;
-        }
-      }
-    };
-    define({
-      tag: "a",
-      name: "HTMLAnchorElement",
-      ctor: function HTMLAnchorElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        _post_click_activation_steps: {
-          value: function(e) {
-            if (this.href) {
-              this.ownerDocument.defaultView.location = this.href;
-            }
-          }
-        }
-      },
-      attributes: {
-        href: URL2,
-        ping: String,
-        download: String,
-        target: String,
-        rel: String,
-        media: String,
-        hreflang: String,
-        type: String,
-        referrerPolicy: REFERRER,
-        coords: String,
-        charset: String,
-        name: String,
-        rev: String,
-        shape: String
-      }
-    });
-    URLUtils._inherit(htmlNameToImpl.a.prototype);
-    define({
-      tag: "area",
-      name: "HTMLAreaElement",
-      ctor: function HTMLAreaElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        alt: String,
-        target: String,
-        download: String,
-        rel: String,
-        media: String,
-        href: URL2,
-        hreflang: String,
-        type: String,
-        shape: String,
-        coords: String,
-        ping: String,
-        referrerPolicy: REFERRER,
-        noHref: Boolean
-      }
-    });
-    URLUtils._inherit(htmlNameToImpl.area.prototype);
-    define({
-      tag: "br",
-      name: "HTMLBRElement",
-      ctor: function HTMLBRElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        clear: String
-      }
-    });
-    define({
-      tag: "base",
-      name: "HTMLBaseElement",
-      ctor: function HTMLBaseElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        "target": String
-      }
-    });
-    define({
-      tag: "body",
-      name: "HTMLBodyElement",
-      ctor: function HTMLBodyElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      events: ["afterprint", "beforeprint", "beforeunload", "blur", "error", "focus", "hashchange", "load", "message", "offline", "online", "pagehide", "pageshow", "popstate", "resize", "scroll", "storage", "unload"],
-      attributes: {
-        text: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        link: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        vLink: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        aLink: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        bgColor: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        background: String
-      }
-    });
-    define({
-      tag: "button",
-      name: "HTMLButtonElement",
-      ctor: function HTMLButtonElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        name: String,
-        value: String,
-        disabled: Boolean,
-        autofocus: Boolean,
-        type: {
-          type: ["submit", "reset", "button", "menu"],
-          missing: "submit"
-        },
-        formTarget: String,
-        formAction: URL2,
-        formNoValidate: Boolean,
-        formMethod: {
-          type: ["get", "post", "dialog"],
-          invalid: "get",
-          missing: ""
-        },
-        formEnctype: {
-          type: ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"],
-          invalid: "application/x-www-form-urlencoded",
-          missing: ""
-        }
-      }
-    });
-    define({
-      tag: "dl",
-      name: "HTMLDListElement",
-      ctor: function HTMLDListElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        compact: Boolean
-      }
-    });
-    define({
-      tag: "data",
-      name: "HTMLDataElement",
-      ctor: function HTMLDataElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        value: String
-      }
-    });
-    define({
-      tag: "datalist",
-      name: "HTMLDataListElement",
-      ctor: function HTMLDataListElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "details",
-      name: "HTMLDetailsElement",
-      ctor: function HTMLDetailsElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        "open": Boolean
-      }
-    });
-    define({
-      tag: "div",
-      name: "HTMLDivElement",
-      ctor: function HTMLDivElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String
-      }
-    });
-    define({
-      tag: "embed",
-      name: "HTMLEmbedElement",
-      ctor: function HTMLEmbedElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        src: URL2,
-        type: String,
-        width: String,
-        height: String,
-        align: String,
-        name: String
-      }
-    });
-    define({
-      tag: "fieldset",
-      name: "HTMLFieldSetElement",
-      ctor: function HTMLFieldSetElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        disabled: Boolean,
-        name: String
-      }
-    });
-    define({
-      tag: "form",
-      name: "HTMLFormElement",
-      ctor: function HTMLFormElement2(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        action: String,
-        autocomplete: {
-          type: ["on", "off"],
-          missing: "on"
-        },
-        name: String,
-        acceptCharset: {
-          name: "accept-charset"
-        },
-        target: String,
-        noValidate: Boolean,
-        method: {
-          type: ["get", "post", "dialog"],
-          invalid: "get",
-          missing: "get"
-        },
-        enctype: {
-          type: ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"],
-          invalid: "application/x-www-form-urlencoded",
-          missing: "application/x-www-form-urlencoded"
-        },
-        encoding: {
-          name: "enctype",
-          type: ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"],
-          invalid: "application/x-www-form-urlencoded",
-          missing: "application/x-www-form-urlencoded"
-        }
-      }
-    });
-    define({
-      tag: "hr",
-      name: "HTMLHRElement",
-      ctor: function HTMLHRElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String,
-        color: String,
-        noShade: Boolean,
-        size: String,
-        width: String
-      }
-    });
-    define({
-      tag: "head",
-      name: "HTMLHeadElement",
-      ctor: function HTMLHeadElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tags: ["h1", "h2", "h3", "h4", "h5", "h6"],
-      name: "HTMLHeadingElement",
-      ctor: function HTMLHeadingElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String
-      }
-    });
-    define({
-      tag: "html",
-      name: "HTMLHtmlElement",
-      ctor: function HTMLHtmlElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        xmlns: URL2,
-        version: String
-      }
-    });
-    define({
-      tag: "iframe",
-      name: "HTMLIFrameElement",
-      ctor: function HTMLIFrameElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        src: URL2,
-        srcdoc: String,
-        name: String,
-        width: String,
-        height: String,
-        seamless: Boolean,
-        allow: Boolean,
-        allowFullscreen: Boolean,
-        allowUserMedia: Boolean,
-        allowPaymentRequest: Boolean,
-        referrerPolicy: REFERRER,
-        loading: {
-          type: ["eager", "lazy"],
-          treatNullAsEmptyString: true
-        },
-        align: String,
-        scrolling: String,
-        frameBorder: String,
-        longDesc: URL2,
-        marginHeight: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        marginWidth: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tag: "img",
-      name: "HTMLImageElement",
-      ctor: function HTMLImageElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        alt: String,
-        src: URL2,
-        srcset: String,
-        crossOrigin: CORS,
-        useMap: String,
-        isMap: Boolean,
-        sizes: String,
-        height: {
-          type: "unsigned long",
-          default: 0
-        },
-        width: {
-          type: "unsigned long",
-          default: 0
-        },
-        referrerPolicy: REFERRER,
-        loading: {
-          type: ["eager", "lazy"],
-          missing: ""
-        },
-        name: String,
-        lowsrc: URL2,
-        align: String,
-        hspace: {
-          type: "unsigned long",
-          default: 0
-        },
-        vspace: {
-          type: "unsigned long",
-          default: 0
-        },
-        longDesc: URL2,
-        border: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tag: "input",
-      name: "HTMLInputElement",
-      ctor: function HTMLInputElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        form: formAssociatedProps.form,
-        _post_click_activation_steps: {
-          value: function(e) {
-            if (this.type === "checkbox") {
-              this.checked = !this.checked;
-            } else if (this.type === "radio") {
-              var group = this.form.getElementsByName(this.name);
-              for (var i = group.length - 1; i >= 0; i--) {
-                var el = group[i];
-                el.checked = el === this;
-              }
-            }
-          }
-        }
-      },
-      attributes: {
-        name: String,
-        disabled: Boolean,
-        autofocus: Boolean,
-        accept: String,
-        alt: String,
-        max: String,
-        min: String,
-        pattern: String,
-        placeholder: String,
-        step: String,
-        dirName: String,
-        defaultValue: {
-          name: "value"
-        },
-        multiple: Boolean,
-        required: Boolean,
-        readOnly: Boolean,
-        checked: Boolean,
-        value: String,
-        src: URL2,
-        defaultChecked: {
-          name: "checked",
-          type: Boolean
-        },
-        size: {
-          type: "unsigned long",
-          default: 20,
-          min: 1,
-          setmin: 1
-        },
-        width: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: 0
-        },
-        height: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: 0
-        },
-        minLength: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: -1
-        },
-        maxLength: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: -1
-        },
-        autocomplete: String,
-        type: {
-          type: ["text", "hidden", "search", "tel", "url", "email", "password", "datetime", "date", "month", "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", "file", "submit", "image", "reset", "button"],
-          missing: "text"
-        },
-        formTarget: String,
-        formNoValidate: Boolean,
-        formMethod: {
-          type: ["get", "post"],
-          invalid: "get",
-          missing: ""
-        },
-        formEnctype: {
-          type: ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"],
-          invalid: "application/x-www-form-urlencoded",
-          missing: ""
-        },
-        inputMode: {
-          type: ["verbatim", "latin", "latin-name", "latin-prose", "full-width-latin", "kana", "kana-name", "katakana", "numeric", "tel", "email", "url"],
-          missing: ""
-        },
-        align: String,
-        useMap: String
-      }
-    });
-    define({
-      tag: "keygen",
-      name: "HTMLKeygenElement",
-      ctor: function HTMLKeygenElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        name: String,
-        disabled: Boolean,
-        autofocus: Boolean,
-        challenge: String,
-        keytype: {
-          type: ["rsa"],
-          missing: ""
-        }
-      }
-    });
-    define({
-      tag: "li",
-      name: "HTMLLIElement",
-      ctor: function HTMLLIElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        value: {
-          type: "long",
-          default: 0
-        },
-        type: String
-      }
-    });
-    define({
-      tag: "label",
-      name: "HTMLLabelElement",
-      ctor: function HTMLLabelElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        htmlFor: {
-          name: "for",
-          type: String
-        }
-      }
-    });
-    define({
-      tag: "legend",
-      name: "HTMLLegendElement",
-      ctor: function HTMLLegendElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String
-      }
-    });
-    define({
-      tag: "link",
-      name: "HTMLLinkElement",
-      ctor: function HTMLLinkElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        href: URL2,
-        rel: String,
-        media: String,
-        hreflang: String,
-        type: String,
-        crossOrigin: CORS,
-        nonce: String,
-        integrity: String,
-        referrerPolicy: REFERRER,
-        imageSizes: String,
-        imageSrcset: String,
-        charset: String,
-        rev: String,
-        target: String
-      }
-    });
-    define({
-      tag: "map",
-      name: "HTMLMapElement",
-      ctor: function HTMLMapElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        name: String
-      }
-    });
-    define({
-      tag: "menu",
-      name: "HTMLMenuElement",
-      ctor: function HTMLMenuElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        type: {
-          type: ["context", "popup", "toolbar"],
-          missing: "toolbar"
-        },
-        label: String,
-        compact: Boolean
-      }
-    });
-    define({
-      tag: "meta",
-      name: "HTMLMetaElement",
-      ctor: function HTMLMetaElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        name: String,
-        content: String,
-        httpEquiv: {
-          name: "http-equiv",
-          type: String
-        },
-        scheme: String
-      }
-    });
-    define({
-      tag: "meter",
-      name: "HTMLMeterElement",
-      ctor: function HTMLMeterElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps
-    });
-    define({
-      tags: ["ins", "del"],
-      name: "HTMLModElement",
-      ctor: function HTMLModElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        cite: URL2,
-        dateTime: String
-      }
-    });
-    define({
-      tag: "ol",
-      name: "HTMLOListElement",
-      ctor: function HTMLOListElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        _numitems: {
-          get: function() {
-            var items = 0;
-            this.childNodes.forEach(function(n) {
-              if (n.nodeType === Node.ELEMENT_NODE && n.tagName === "LI") items++;
-            });
-            return items;
-          }
-        }
-      },
-      attributes: {
-        type: String,
-        reversed: Boolean,
-        start: {
-          type: "long",
-          default: function() {
-            if (this.reversed) return this._numitems;
-            else return 1;
-          }
-        },
-        compact: Boolean
-      }
-    });
-    define({
-      tag: "object",
-      name: "HTMLObjectElement",
-      ctor: function HTMLObjectElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        data: URL2,
-        type: String,
-        name: String,
-        useMap: String,
-        typeMustMatch: Boolean,
-        width: String,
-        height: String,
-        align: String,
-        archive: String,
-        code: String,
-        declare: Boolean,
-        hspace: {
-          type: "unsigned long",
-          default: 0
-        },
-        standby: String,
-        vspace: {
-          type: "unsigned long",
-          default: 0
-        },
-        codeBase: URL2,
-        codeType: String,
-        border: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tag: "optgroup",
-      name: "HTMLOptGroupElement",
-      ctor: function HTMLOptGroupElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        disabled: Boolean,
-        label: String
-      }
-    });
-    define({
-      tag: "option",
-      name: "HTMLOptionElement",
-      ctor: function HTMLOptionElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        form: {
-          get: function() {
-            var p = this.parentNode;
-            while (p && p.nodeType === Node.ELEMENT_NODE) {
-              if (p.localName === "select") return p.form;
-              p = p.parentNode;
-            }
-          }
-        },
-        value: {
-          get: function() {
-            return this._getattr("value") || this.text;
-          },
-          set: function(v) {
-            this._setattr("value", v);
-          }
-        },
-        text: {
-          get: function() {
-            return this.textContent.replace(/[ \t\n\f\r]+/g, " ").trim();
-          },
-          set: function(v) {
-            this.textContent = v;
-          }
-        }
-      },
-      attributes: {
-        disabled: Boolean,
-        defaultSelected: {
-          name: "selected",
-          type: Boolean
-        },
-        label: String
-      }
-    });
-    define({
-      tag: "output",
-      name: "HTMLOutputElement",
-      ctor: function HTMLOutputElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        name: String
-      }
-    });
-    define({
-      tag: "p",
-      name: "HTMLParagraphElement",
-      ctor: function HTMLParagraphElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String
-      }
-    });
-    define({
-      tag: "param",
-      name: "HTMLParamElement",
-      ctor: function HTMLParamElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        name: String,
-        value: String,
-        type: String,
-        valueType: String
-      }
-    });
-    define({
-      tags: ["pre", "listing", "xmp"],
-      name: "HTMLPreElement",
-      ctor: function HTMLPreElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        width: {
-          type: "long",
-          default: 0
-        }
-      }
-    });
-    define({
-      tag: "progress",
-      name: "HTMLProgressElement",
-      ctor: function HTMLProgressElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: formAssociatedProps,
-      attributes: {
-        max: {
-          type: Number,
-          float: true,
-          default: 1,
-          min: 0
-        }
-      }
-    });
-    define({
-      tags: ["q", "blockquote"],
-      name: "HTMLQuoteElement",
-      ctor: function HTMLQuoteElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        cite: URL2
-      }
-    });
-    define({
-      tag: "script",
-      name: "HTMLScriptElement",
-      ctor: function HTMLScriptElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        text: {
-          get: function() {
-            var s = "";
-            for (var i = 0, n = this.childNodes.length; i < n; i++) {
-              var child = this.childNodes[i];
-              if (child.nodeType === Node.TEXT_NODE) s += child._data;
-            }
-            return s;
-          },
-          set: function(value) {
-            this.removeChildren();
-            if (value !== null && value !== "") {
-              this.appendChild(this.ownerDocument.createTextNode(value));
-            }
-          }
-        }
-      },
-      attributes: {
-        src: URL2,
-        type: String,
-        charset: String,
-        referrerPolicy: REFERRER,
-        defer: Boolean,
-        async: Boolean,
-        nomodule: Boolean,
-        crossOrigin: CORS,
-        nonce: String,
-        integrity: String
-      }
-    });
-    define({
-      tag: "select",
-      name: "HTMLSelectElement",
-      ctor: function HTMLSelectElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        form: formAssociatedProps.form,
-        options: {
-          get: function() {
-            return this.getElementsByTagName("option");
-          }
-        }
-      },
-      attributes: {
-        autocomplete: String,
-        name: String,
-        disabled: Boolean,
-        autofocus: Boolean,
-        multiple: Boolean,
-        required: Boolean,
-        size: {
-          type: "unsigned long",
-          default: 0
-        }
-      }
-    });
-    define({
-      tag: "span",
-      name: "HTMLSpanElement",
-      ctor: function HTMLSpanElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "style",
-      name: "HTMLStyleElement",
-      ctor: function HTMLStyleElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        media: String,
-        type: String,
-        scoped: Boolean
-      }
-    });
-    define({
-      tag: "caption",
-      name: "HTMLTableCaptionElement",
-      ctor: function HTMLTableCaptionElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        align: String
-      }
-    });
-    define({
-      name: "HTMLTableCellElement",
-      ctor: function HTMLTableCellElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        colSpan: {
-          type: "unsigned long",
-          default: 1
-        },
-        rowSpan: {
-          type: "unsigned long",
-          default: 1
-        },
-        scope: {
-          type: ["row", "col", "rowgroup", "colgroup"],
-          missing: ""
-        },
-        abbr: String,
-        align: String,
-        axis: String,
-        height: String,
-        width: String,
-        ch: {
-          name: "char",
-          type: String
-        },
-        chOff: {
-          name: "charoff",
-          type: String
-        },
-        noWrap: Boolean,
-        vAlign: String,
-        bgColor: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tags: ["col", "colgroup"],
-      name: "HTMLTableColElement",
-      ctor: function HTMLTableColElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        span: {
-          type: "limited unsigned long with fallback",
-          default: 1,
-          min: 1
-        },
-        align: String,
-        ch: {
-          name: "char",
-          type: String
-        },
-        chOff: {
-          name: "charoff",
-          type: String
-        },
-        vAlign: String,
-        width: String
-      }
-    });
-    define({
-      tag: "table",
-      name: "HTMLTableElement",
-      ctor: function HTMLTableElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        rows: {
-          get: function() {
-            return this.getElementsByTagName("tr");
-          }
-        }
-      },
-      attributes: {
-        align: String,
-        border: String,
-        frame: String,
-        rules: String,
-        summary: String,
-        width: String,
-        bgColor: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        cellPadding: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        cellSpacing: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tag: "template",
-      name: "HTMLTemplateElement",
-      ctor: function HTMLTemplateElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-        this._contentFragment = doc._templateDoc.createDocumentFragment();
-      },
-      props: {
-        content: {
-          get: function() {
-            return this._contentFragment;
-          }
-        },
-        serialize: {
-          value: function() {
-            return this.content.serialize();
-          }
-        }
-      }
-    });
-    define({
-      tag: "tr",
-      name: "HTMLTableRowElement",
-      ctor: function HTMLTableRowElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        cells: {
-          get: function() {
-            return this.querySelectorAll("td,th");
-          }
-        }
-      },
-      attributes: {
-        align: String,
-        ch: {
-          name: "char",
-          type: String
-        },
-        chOff: {
-          name: "charoff",
-          type: String
-        },
-        vAlign: String,
-        bgColor: {
-          type: String,
-          treatNullAsEmptyString: true
-        }
-      }
-    });
-    define({
-      tags: ["thead", "tfoot", "tbody"],
-      name: "HTMLTableSectionElement",
-      ctor: function HTMLTableSectionElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        rows: {
-          get: function() {
-            return this.getElementsByTagName("tr");
-          }
-        }
-      },
-      attributes: {
-        align: String,
-        ch: {
-          name: "char",
-          type: String
-        },
-        chOff: {
-          name: "charoff",
-          type: String
-        },
-        vAlign: String
-      }
-    });
-    define({
-      tag: "textarea",
-      name: "HTMLTextAreaElement",
-      ctor: function HTMLTextAreaElement(doc, localName, prefix) {
-        HTMLFormElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        form: formAssociatedProps.form,
-        type: {
-          get: function() {
-            return "textarea";
-          }
-        },
-        defaultValue: {
-          get: function() {
-            return this.textContent;
-          },
-          set: function(v) {
-            this.textContent = v;
-          }
-        },
-        value: {
-          get: function() {
-            return this.defaultValue;
-          },
-          set: function(v) {
-            this.defaultValue = v;
-          }
-        },
-        textLength: {
-          get: function() {
-            return this.value.length;
-          }
-        }
-      },
-      attributes: {
-        autocomplete: String,
-        name: String,
-        disabled: Boolean,
-        autofocus: Boolean,
-        placeholder: String,
-        wrap: String,
-        dirName: String,
-        required: Boolean,
-        readOnly: Boolean,
-        rows: {
-          type: "limited unsigned long with fallback",
-          default: 2
-        },
-        cols: {
-          type: "limited unsigned long with fallback",
-          default: 20
-        },
-        maxLength: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: -1
-        },
-        minLength: {
-          type: "unsigned long",
-          min: 0,
-          setmin: 0,
-          default: -1
-        },
-        inputMode: {
-          type: ["verbatim", "latin", "latin-name", "latin-prose", "full-width-latin", "kana", "kana-name", "katakana", "numeric", "tel", "email", "url"],
-          missing: ""
-        }
-      }
-    });
-    define({
-      tag: "time",
-      name: "HTMLTimeElement",
-      ctor: function HTMLTimeElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        dateTime: String,
-        pubDate: Boolean
-      }
-    });
-    define({
-      tag: "title",
-      name: "HTMLTitleElement",
-      ctor: function HTMLTitleElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        text: {
-          get: function() {
-            return this.textContent;
-          }
-        }
-      }
-    });
-    define({
-      tag: "ul",
-      name: "HTMLUListElement",
-      ctor: function HTMLUListElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        type: String,
-        compact: Boolean
-      }
-    });
-    define({
-      name: "HTMLMediaElement",
-      ctor: function HTMLMediaElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        src: URL2,
-        crossOrigin: CORS,
-        preload: {
-          type: ["metadata", "none", "auto", {
-            value: "",
-            alias: "auto"
-          }],
-          missing: "auto"
-        },
-        loop: Boolean,
-        autoplay: Boolean,
-        mediaGroup: String,
-        controls: Boolean,
-        defaultMuted: {
-          name: "muted",
-          type: Boolean
-        }
-      }
-    });
-    define({
-      name: "HTMLAudioElement",
-      tag: "audio",
-      superclass: htmlElements.HTMLMediaElement,
-      ctor: function HTMLAudioElement(doc, localName, prefix) {
-        htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      name: "HTMLVideoElement",
-      tag: "video",
-      superclass: htmlElements.HTMLMediaElement,
-      ctor: function HTMLVideoElement(doc, localName, prefix) {
-        htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        poster: URL2,
-        width: {
-          type: "unsigned long",
-          min: 0,
-          default: 0
-        },
-        height: {
-          type: "unsigned long",
-          min: 0,
-          default: 0
-        }
-      }
-    });
-    define({
-      tag: "td",
-      name: "HTMLTableDataCellElement",
-      superclass: htmlElements.HTMLTableCellElement,
-      ctor: function HTMLTableDataCellElement(doc, localName, prefix) {
-        htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "th",
-      name: "HTMLTableHeaderCellElement",
-      superclass: htmlElements.HTMLTableCellElement,
-      ctor: function HTMLTableHeaderCellElement(doc, localName, prefix) {
-        htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "frameset",
-      name: "HTMLFrameSetElement",
-      ctor: function HTMLFrameSetElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "frame",
-      name: "HTMLFrameElement",
-      ctor: function HTMLFrameElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      }
-    });
-    define({
-      tag: "canvas",
-      name: "HTMLCanvasElement",
-      ctor: function HTMLCanvasElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        getContext: {
-          value: utils.nyi
-        },
-        probablySupportsContext: {
-          value: utils.nyi
-        },
-        setContext: {
-          value: utils.nyi
-        },
-        transferControlToProxy: {
-          value: utils.nyi
-        },
-        toDataURL: {
-          value: utils.nyi
-        },
-        toBlob: {
-          value: utils.nyi
-        }
-      },
-      attributes: {
-        width: {
-          type: "unsigned long",
-          default: 300
-        },
-        height: {
-          type: "unsigned long",
-          default: 150
-        }
-      }
-    });
-    define({
-      tag: "dialog",
-      name: "HTMLDialogElement",
-      ctor: function HTMLDialogElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        show: {
-          value: utils.nyi
-        },
-        showModal: {
-          value: utils.nyi
-        },
-        close: {
-          value: utils.nyi
-        }
-      },
-      attributes: {
-        open: Boolean,
-        returnValue: String
-      }
-    });
-    define({
-      tag: "menuitem",
-      name: "HTMLMenuItemElement",
-      ctor: function HTMLMenuItemElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      props: {
-        _label: {
-          get: function() {
-            var val = this._getattr("label");
-            if (val !== null && val !== "") {
-              return val;
-            }
-            val = this.textContent;
-            return val.replace(/[ \t\n\f\r]+/g, " ").trim();
-          }
-        },
-        label: {
-          get: function() {
-            var val = this._getattr("label");
-            if (val !== null) {
-              return val;
-            }
-            return this._label;
-          },
-          set: function(v) {
-            this._setattr("label", v);
-          }
-        }
-      },
-      attributes: {
-        type: {
-          type: ["command", "checkbox", "radio"],
-          missing: "command"
-        },
-        icon: URL2,
-        disabled: Boolean,
-        checked: Boolean,
-        radiogroup: String,
-        default: Boolean
-      }
-    });
-    define({
-      tag: "source",
-      name: "HTMLSourceElement",
-      ctor: function HTMLSourceElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        srcset: String,
-        sizes: String,
-        media: String,
-        src: URL2,
-        type: String,
-        width: String,
-        height: String
-      }
-    });
-    define({
-      tag: "track",
-      name: "HTMLTrackElement",
-      ctor: function HTMLTrackElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        src: URL2,
-        srclang: String,
-        label: String,
-        default: Boolean,
-        kind: {
-          type: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
-          missing: "subtitles",
-          invalid: "metadata"
-        }
-      },
-      props: {
-        NONE: {
-          get: function() {
-            return 0;
-          }
-        },
-        LOADING: {
-          get: function() {
-            return 1;
-          }
-        },
-        LOADED: {
-          get: function() {
-            return 2;
-          }
-        },
-        ERROR: {
-          get: function() {
-            return 3;
-          }
-        },
-        readyState: {
-          get: utils.nyi
-        },
-        track: {
-          get: utils.nyi
-        }
-      }
-    });
-    define({
-      tag: "font",
-      name: "HTMLFontElement",
-      ctor: function HTMLFontElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        color: {
-          type: String,
-          treatNullAsEmptyString: true
-        },
-        face: {
-          type: String
-        },
-        size: {
-          type: String
-        }
-      }
-    });
-    define({
-      tag: "dir",
-      name: "HTMLDirectoryElement",
-      ctor: function HTMLDirectoryElement(doc, localName, prefix) {
-        HTMLElement.call(this, doc, localName, prefix);
-      },
-      attributes: {
-        compact: Boolean
-      }
-    });
-    define({
-      tags: ["abbr", "address", "article", "aside", "b", "bdi", "bdo", "cite", "content", "code", "dd", "dfn", "dt", "em", "figcaption", "figure", "footer", "header", "hgroup", "i", "kbd", "main", "mark", "nav", "noscript", "rb", "rp", "rt", "rtc", "ruby", "s", "samp", "section", "small", "strong", "sub", "summary", "sup", "u", "var", "wbr", "acronym", "basefont", "big", "center", "nobr", "noembed", "noframes", "plaintext", "strike", "tt"]
-    });
-  }
-});
-var require_svg = __commonJS({
-  "external/npm/node_modules/domino/lib/svg.js"(exports) {
-    "use strict";
-    var Element = require_Element();
-    var defineElement = require_defineElement();
-    var utils = require_utils();
-    var CSSStyleDeclaration = require_CSSStyleDeclaration();
-    var svgElements = exports.elements = {};
-    var svgNameToImpl = /* @__PURE__ */ Object.create(null);
-    exports.createElement = function(doc, localName, prefix) {
-      var impl = svgNameToImpl[localName] || SVGElement;
-      return new impl(doc, localName, prefix);
-    };
-    function define(spec) {
-      return defineElement(spec, SVGElement, svgElements, svgNameToImpl);
-    }
-    var SVGElement = define({
-      superclass: Element,
-      name: "SVGElement",
-      ctor: function SVGElement2(doc, localName, prefix) {
-        Element.call(this, doc, localName, utils.NAMESPACE.SVG, prefix);
-      },
-      props: {
-        style: {
-          get: function() {
-            if (!this._style) this._style = new CSSStyleDeclaration(this);
-            return this._style;
-          }
-        }
-      }
-    });
-    define({
-      name: "SVGSVGElement",
-      ctor: function SVGSVGElement(doc, localName, prefix) {
-        SVGElement.call(this, doc, localName, prefix);
-      },
-      tag: "svg",
-      props: {
-        createSVGRect: {
-          value: function() {
-            return exports.createElement(this.ownerDocument, "rect", null);
-          }
-        }
-      }
-    });
-    define({
-      tags: ["a", "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor", "animateMotion", "animateTransform", "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "ellipse", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignObject", "g", "glyph", "glyphRef", "hkern", "image", "line", "linearGradient", "marker", "mask", "metadata", "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "script", "set", "stop", "style", "switch", "symbol", "text", "textPath", "title", "tref", "tspan", "use", "view", "vkern"]
-    });
-  }
-});
-var require_MutationConstants = __commonJS({
-  "external/npm/node_modules/domino/lib/MutationConstants.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      VALUE: 1,
-      ATTR: 2,
-      REMOVE_ATTR: 3,
-      REMOVE: 4,
-      MOVE: 5,
-      INSERT: 6
-    };
-  }
-});
-var require_Document = __commonJS({
-  "external/npm/node_modules/domino/lib/Document.js"(exports, module) {
-    "use strict";
-    module.exports = Document2;
-    var Node = require_Node();
-    var NodeList = require_NodeList();
-    var ContainerNode = require_ContainerNode();
-    var Element = require_Element();
-    var Text = require_Text();
-    var Comment = require_Comment();
-    var Event = require_Event();
-    var DocumentFragment = require_DocumentFragment();
-    var ProcessingInstruction = require_ProcessingInstruction();
-    var DOMImplementation = require_DOMImplementation();
-    var TreeWalker = require_TreeWalker();
-    var NodeIterator = require_NodeIterator();
-    var NodeFilter = require_NodeFilter();
-    var URL2 = require_URL();
-    var select = require_select();
-    var events = require_events();
-    var xml = require_xmlnames();
-    var html = require_htmlelts();
-    var svg = require_svg();
-    var utils = require_utils();
-    var MUTATE = require_MutationConstants();
-    var NAMESPACE = utils.NAMESPACE;
-    var isApiWritable = require_config().isApiWritable;
-    function Document2(isHTML, address) {
-      ContainerNode.call(this);
-      this.nodeType = Node.DOCUMENT_NODE;
-      this.isHTML = isHTML;
-      this._address = address || "about:blank";
-      this.readyState = "loading";
-      this.implementation = new DOMImplementation(this);
-      this.ownerDocument = null;
-      this._contentType = isHTML ? "text/html" : "application/xml";
-      this.doctype = null;
-      this.documentElement = null;
-      this._templateDocCache = null;
-      this._nodeIterators = null;
-      this._nid = 1;
-      this._nextnid = 2;
-      this._nodes = [null, this];
-      this.byId = /* @__PURE__ */ Object.create(null);
-      this.modclock = 0;
-    }
-    var supportedEvents = {
-      event: "Event",
-      customevent: "CustomEvent",
-      uievent: "UIEvent",
-      mouseevent: "MouseEvent"
-    };
-    var replacementEvent = {
-      events: "event",
-      htmlevents: "event",
-      mouseevents: "mouseevent",
-      mutationevents: "mutationevent",
-      uievents: "uievent"
-    };
-    var mirrorAttr = function(f, name, defaultValue) {
-      return {
-        get: function() {
-          var o = f.call(this);
-          if (o) {
-            return o[name];
-          }
-          return defaultValue;
-        },
-        set: function(value) {
-          var o = f.call(this);
-          if (o) {
-            o[name] = value;
-          }
-        }
-      };
-    };
-    function validateAndExtract(namespace, qualifiedName) {
-      var prefix, localName, pos;
-      if (namespace === "") {
-        namespace = null;
-      }
-      if (!xml.isValidQName(qualifiedName)) {
-        utils.InvalidCharacterError();
-      }
-      prefix = null;
-      localName = qualifiedName;
-      pos = qualifiedName.indexOf(":");
-      if (pos >= 0) {
-        prefix = qualifiedName.substring(0, pos);
-        localName = qualifiedName.substring(pos + 1);
-      }
-      if (prefix !== null && namespace === null) {
-        utils.NamespaceError();
-      }
-      if (prefix === "xml" && namespace !== NAMESPACE.XML) {
-        utils.NamespaceError();
-      }
-      if ((prefix === "xmlns" || qualifiedName === "xmlns") && namespace !== NAMESPACE.XMLNS) {
-        utils.NamespaceError();
-      }
-      if (namespace === NAMESPACE.XMLNS && !(prefix === "xmlns" || qualifiedName === "xmlns")) {
-        utils.NamespaceError();
-      }
-      return {
-        namespace,
-        prefix,
-        localName
-      };
-    }
-    Document2.prototype = Object.create(ContainerNode.prototype, {
-      _setMutationHandler: {
-        value: function(handler) {
-          this.mutationHandler = handler;
-        }
-      },
-      _dispatchRendererEvent: {
-        value: function(targetNid, type, details) {
-          var target = this._nodes[targetNid];
-          if (!target) return;
-          target._dispatchEvent(new Event(type, details), true);
-        }
-      },
-      nodeName: {
-        value: "#document"
-      },
-      nodeValue: {
-        get: function() {
-          return null;
-        },
-        set: function() {
-        }
-      },
-      documentURI: {
-        get: function() {
-          return this._address;
-        },
-        set: utils.nyi
-      },
-      compatMode: {
-        get: function() {
-          return this._quirks ? "BackCompat" : "CSS1Compat";
-        }
-      },
-      createTextNode: {
-        value: function(data) {
-          return new Text(this, String(data));
-        }
-      },
-      createComment: {
-        value: function(data) {
-          return new Comment(this, data);
-        }
-      },
-      createDocumentFragment: {
-        value: function() {
-          return new DocumentFragment(this);
-        }
-      },
-      createProcessingInstruction: {
-        value: function(target, data) {
-          if (!xml.isValidName(target) || data.indexOf("?>") !== -1) utils.InvalidCharacterError();
-          return new ProcessingInstruction(this, target, data);
-        }
-      },
-      createAttribute: {
-        value: function(localName) {
-          localName = String(localName);
-          if (!xml.isValidName(localName)) utils.InvalidCharacterError();
-          if (this.isHTML) {
-            localName = utils.toASCIILowerCase(localName);
-          }
-          return new Element._Attr(null, localName, null, null, "");
-        }
-      },
-      createAttributeNS: {
-        value: function(namespace, qualifiedName) {
-          namespace = namespace === null || namespace === void 0 || namespace === "" ? null : String(namespace);
-          qualifiedName = String(qualifiedName);
-          var ve = validateAndExtract(namespace, qualifiedName);
-          return new Element._Attr(null, ve.localName, ve.prefix, ve.namespace, "");
-        }
-      },
-      createElement: {
-        value: function(localName) {
-          localName = String(localName);
-          if (!xml.isValidName(localName)) utils.InvalidCharacterError();
-          if (this.isHTML) {
-            if (/[A-Z]/.test(localName)) localName = utils.toASCIILowerCase(localName);
-            return html.createElement(this, localName, null);
-          } else if (this.contentType === "application/xhtml+xml") {
-            return html.createElement(this, localName, null);
-          } else {
-            return new Element(this, localName, null, null);
-          }
-        },
-        writable: isApiWritable
-      },
-      createElementNS: {
-        value: function(namespace, qualifiedName) {
-          namespace = namespace === null || namespace === void 0 || namespace === "" ? null : String(namespace);
-          qualifiedName = String(qualifiedName);
-          var ve = validateAndExtract(namespace, qualifiedName);
-          return this._createElementNS(ve.localName, ve.namespace, ve.prefix);
-        },
-        writable: isApiWritable
-      },
-      _createElementNS: {
-        value: function(localName, namespace, prefix) {
-          if (namespace === NAMESPACE.HTML) {
-            return html.createElement(this, localName, prefix);
-          } else if (namespace === NAMESPACE.SVG) {
-            return svg.createElement(this, localName, prefix);
-          }
-          return new Element(this, localName, namespace, prefix);
-        }
-      },
-      createEvent: {
-        value: function createEvent(interfaceName) {
-          interfaceName = interfaceName.toLowerCase();
-          var name = replacementEvent[interfaceName] || interfaceName;
-          var constructor = events[supportedEvents[name]];
-          if (constructor) {
-            var e = new constructor();
-            e._initialized = false;
-            return e;
-          } else {
-            utils.NotSupportedError();
-          }
-        }
-      },
-      createTreeWalker: {
-        value: function(root2, whatToShow, filter) {
-          if (!root2) {
-            throw new TypeError("root argument is required");
-          }
-          if (!(root2 instanceof Node)) {
-            throw new TypeError("root not a node");
-          }
-          whatToShow = whatToShow === void 0 ? NodeFilter.SHOW_ALL : +whatToShow;
-          filter = filter === void 0 ? null : filter;
-          return new TreeWalker(root2, whatToShow, filter);
-        }
-      },
-      createNodeIterator: {
-        value: function(root2, whatToShow, filter) {
-          if (!root2) {
-            throw new TypeError("root argument is required");
-          }
-          if (!(root2 instanceof Node)) {
-            throw new TypeError("root not a node");
-          }
-          whatToShow = whatToShow === void 0 ? NodeFilter.SHOW_ALL : +whatToShow;
-          filter = filter === void 0 ? null : filter;
-          return new NodeIterator(root2, whatToShow, filter);
-        }
-      },
-      _attachNodeIterator: {
-        value: function(ni) {
-          if (!this._nodeIterators) {
-            this._nodeIterators = [];
-          }
-          this._nodeIterators.push(ni);
-        }
-      },
-      _detachNodeIterator: {
-        value: function(ni) {
-          var idx = this._nodeIterators.indexOf(ni);
-          this._nodeIterators.splice(idx, 1);
-        }
-      },
-      _preremoveNodeIterators: {
-        value: function(toBeRemoved) {
-          if (this._nodeIterators) {
-            this._nodeIterators.forEach(function(ni) {
-              ni._preremove(toBeRemoved);
-            });
-          }
-        }
-      },
-      _updateDocTypeElement: {
-        value: function _updateDocTypeElement() {
-          this.doctype = this.documentElement = null;
-          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-            if (kid.nodeType === Node.DOCUMENT_TYPE_NODE) this.doctype = kid;
-            else if (kid.nodeType === Node.ELEMENT_NODE) this.documentElement = kid;
-          }
-        }
-      },
-      insertBefore: {
-        value: function insertBefore(child, refChild) {
-          Node.prototype.insertBefore.call(this, child, refChild);
-          this._updateDocTypeElement();
-          return child;
-        }
-      },
-      replaceChild: {
-        value: function replaceChild(node, child) {
-          Node.prototype.replaceChild.call(this, node, child);
-          this._updateDocTypeElement();
-          return child;
-        }
-      },
-      removeChild: {
-        value: function removeChild(child) {
-          Node.prototype.removeChild.call(this, child);
-          this._updateDocTypeElement();
-          return child;
-        }
-      },
-      getElementById: {
-        value: function(id) {
-          var n = this.byId[id];
-          if (!n) return null;
-          if (n instanceof MultiId) {
-            return n.getFirst();
-          }
-          return n;
-        }
-      },
-      _hasMultipleElementsWithId: {
-        value: function(id) {
-          return this.byId[id] instanceof MultiId;
-        }
-      },
-      getElementsByName: {
-        value: Element.prototype.getElementsByName
-      },
-      getElementsByTagName: {
-        value: Element.prototype.getElementsByTagName
-      },
-      getElementsByTagNameNS: {
-        value: Element.prototype.getElementsByTagNameNS
-      },
-      getElementsByClassName: {
-        value: Element.prototype.getElementsByClassName
-      },
-      adoptNode: {
-        value: function adoptNode(node) {
-          if (node.nodeType === Node.DOCUMENT_NODE) utils.NotSupportedError();
-          if (node.nodeType === Node.ATTRIBUTE_NODE) {
-            return node;
-          }
-          if (node.parentNode) node.parentNode.removeChild(node);
-          if (node.ownerDocument !== this) recursivelySetOwner(node, this);
-          return node;
-        }
-      },
-      importNode: {
-        value: function importNode(node, deep) {
-          return this.adoptNode(node.cloneNode(deep));
-        },
-        writable: isApiWritable
-      },
-      origin: {
-        get: function origin() {
-          return null;
-        }
-      },
-      characterSet: {
-        get: function characterSet() {
-          return "UTF-8";
-        }
-      },
-      contentType: {
-        get: function contentType() {
-          return this._contentType;
-        }
-      },
-      URL: {
-        get: function URL22() {
-          return this._address;
-        }
-      },
-      domain: {
-        get: utils.nyi,
-        set: utils.nyi
-      },
-      referrer: {
-        get: utils.nyi
-      },
-      cookie: {
-        get: utils.nyi,
-        set: utils.nyi
-      },
-      lastModified: {
-        get: utils.nyi
-      },
-      location: {
-        get: function() {
-          return this.defaultView ? this.defaultView.location : null;
-        },
-        set: utils.nyi
-      },
-      _titleElement: {
-        get: function() {
-          return this.getElementsByTagName("title").item(0) || null;
-        }
-      },
-      title: {
-        get: function() {
-          var elt = this._titleElement;
-          var value = elt ? elt.textContent : "";
-          return value.replace(/[ \t\n\r\f]+/g, " ").replace(/(^ )|( $)/g, "");
-        },
-        set: function(value) {
-          var elt = this._titleElement;
-          var head = this.head;
-          if (!elt && !head) {
-            return;
-          }
-          if (!elt) {
-            elt = this.createElement("title");
-            head.appendChild(elt);
-          }
-          elt.textContent = value;
-        }
-      },
-      dir: mirrorAttr(function() {
-        var htmlElement = this.documentElement;
-        if (htmlElement && htmlElement.tagName === "HTML") {
-          return htmlElement;
-        }
-      }, "dir", ""),
-      fgColor: mirrorAttr(function() {
-        return this.body;
-      }, "text", ""),
-      linkColor: mirrorAttr(function() {
-        return this.body;
-      }, "link", ""),
-      vlinkColor: mirrorAttr(function() {
-        return this.body;
-      }, "vLink", ""),
-      alinkColor: mirrorAttr(function() {
-        return this.body;
-      }, "aLink", ""),
-      bgColor: mirrorAttr(function() {
-        return this.body;
-      }, "bgColor", ""),
-      charset: {
-        get: function() {
-          return this.characterSet;
-        }
-      },
-      inputEncoding: {
-        get: function() {
-          return this.characterSet;
-        }
-      },
-      scrollingElement: {
-        get: function() {
-          return this._quirks ? this.body : this.documentElement;
-        }
-      },
-      body: {
-        get: function() {
-          return namedHTMLChild(this.documentElement, "body");
-        },
-        set: utils.nyi
-      },
-      head: {
-        get: function() {
-          return namedHTMLChild(this.documentElement, "head");
-        }
-      },
-      images: {
-        get: utils.nyi
-      },
-      embeds: {
-        get: utils.nyi
-      },
-      plugins: {
-        get: utils.nyi
-      },
-      links: {
-        get: utils.nyi
-      },
-      forms: {
-        get: utils.nyi
-      },
-      scripts: {
-        get: utils.nyi
-      },
-      applets: {
-        get: function() {
-          return [];
-        }
-      },
-      activeElement: {
-        get: function() {
-          return null;
-        }
-      },
-      innerHTML: {
-        get: function() {
-          return this.serialize();
-        },
-        set: utils.nyi
-      },
-      outerHTML: {
-        get: function() {
-          return this.serialize();
-        },
-        set: utils.nyi
-      },
-      write: {
-        value: function(args) {
-          if (!this.isHTML) utils.InvalidStateError();
-          if (!this._parser) return;
-          if (!this._parser) {
-          }
-          var s = arguments.join("");
-          this._parser.parse(s);
-        }
-      },
-      writeln: {
-        value: function writeln(args) {
-          this.write(Array.prototype.join.call(arguments, "") + "\n");
-        }
-      },
-      open: {
-        value: function() {
-          this.documentElement = null;
-        }
-      },
-      close: {
-        value: function() {
-          this.readyState = "interactive";
-          this._dispatchEvent(new Event("readystatechange"), true);
-          this._dispatchEvent(new Event("DOMContentLoaded"), true);
-          this.readyState = "complete";
-          this._dispatchEvent(new Event("readystatechange"), true);
-          if (this.defaultView) {
-            this.defaultView._dispatchEvent(new Event("load"), true);
-          }
-        }
-      },
-      clone: {
-        value: function clone() {
-          var d = new Document2(this.isHTML, this._address);
-          d._quirks = this._quirks;
-          d._contentType = this._contentType;
-          return d;
-        }
-      },
-      cloneNode: {
-        value: function cloneNode(deep) {
-          var clone = Node.prototype.cloneNode.call(this, false);
-          if (deep) {
-            for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {
-              clone._appendChild(clone.importNode(kid, true));
-            }
-          }
-          clone._updateDocTypeElement();
-          return clone;
-        }
-      },
-      isEqual: {
-        value: function isEqual(n) {
-          return true;
-        }
-      },
-      mutateValue: {
-        value: function(node) {
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.VALUE,
-              target: node,
-              data: node.data
-            });
-          }
-        }
-      },
-      mutateAttr: {
-        value: function(attr, oldval) {
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.ATTR,
-              target: attr.ownerElement,
-              attr
-            });
-          }
-        }
-      },
-      mutateRemoveAttr: {
-        value: function(attr) {
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.REMOVE_ATTR,
-              target: attr.ownerElement,
-              attr
-            });
-          }
-        }
-      },
-      mutateRemove: {
-        value: function(node) {
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.REMOVE,
-              target: node.parentNode,
-              node
-            });
-          }
-          recursivelyUproot(node);
-        }
-      },
-      mutateInsert: {
-        value: function(node) {
-          recursivelyRoot(node);
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.INSERT,
-              target: node.parentNode,
-              node
-            });
-          }
-        }
-      },
-      mutateMove: {
-        value: function(node) {
-          if (this.mutationHandler) {
-            this.mutationHandler({
-              type: MUTATE.MOVE,
-              target: node
-            });
-          }
-        }
-      },
-      addId: {
-        value: function addId(id, n) {
-          var val = this.byId[id];
-          if (!val) {
-            this.byId[id] = n;
-          } else {
-            if (!(val instanceof MultiId)) {
-              val = new MultiId(val);
-              this.byId[id] = val;
-            }
-            val.add(n);
-          }
-        }
-      },
-      delId: {
-        value: function delId(id, n) {
-          var val = this.byId[id];
-          utils.assert(val);
-          if (val instanceof MultiId) {
-            val.del(n);
-            if (val.length === 1) {
-              this.byId[id] = val.downgrade();
-            }
-          } else {
-            this.byId[id] = void 0;
-          }
-        }
-      },
-      _resolve: {
-        value: function(href) {
-          return new URL2(this._documentBaseURL).resolve(href);
-        }
-      },
-      _documentBaseURL: {
-        get: function() {
-          var url = this._address;
-          if (url === "about:blank") url = "/";
-          var base = this.querySelector("base[href]");
-          if (base) {
-            return new URL2(url).resolve(base.getAttribute("href"));
-          }
-          return url;
-        }
-      },
-      _templateDoc: {
-        get: function() {
-          if (!this._templateDocCache) {
-            var newDoc = new Document2(this.isHTML, this._address);
-            this._templateDocCache = newDoc._templateDocCache = newDoc;
-          }
-          return this._templateDocCache;
-        }
-      },
-      querySelector: {
-        value: function(selector) {
-          return select(selector, this)[0];
-        }
-      },
-      querySelectorAll: {
-        value: function(selector) {
-          var nodes = select(selector, this);
-          return nodes.item ? nodes : new NodeList(nodes);
-        }
-      }
-    });
-    var eventHandlerTypes = ["abort", "canplay", "canplaythrough", "change", "click", "contextmenu", "cuechange", "dblclick", "drag", "dragend", "dragenter", "dragleave", "dragover", "dragstart", "drop", "durationchange", "emptied", "ended", "input", "invalid", "keydown", "keypress", "keyup", "loadeddata", "loadedmetadata", "loadstart", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup", "mousewheel", "pause", "play", "playing", "progress", "ratechange", "readystatechange", "reset", "seeked", "seeking", "select", "show", "stalled", "submit", "suspend", "timeupdate", "volumechange", "waiting", "blur", "error", "focus", "load", "scroll"];
-    eventHandlerTypes.forEach(function(type) {
-      Object.defineProperty(Document2.prototype, "on" + type, {
-        get: function() {
-          return this._getEventHandler(type);
-        },
-        set: function(v) {
-          this._setEventHandler(type, v);
-        }
-      });
-    });
-    function namedHTMLChild(parent, name) {
-      if (parent && parent.isHTML) {
-        for (var kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {
-          if (kid.nodeType === Node.ELEMENT_NODE && kid.localName === name && kid.namespaceURI === NAMESPACE.HTML) {
-            return kid;
-          }
-        }
-      }
-      return null;
-    }
-    function root(n) {
-      n._nid = n.ownerDocument._nextnid++;
-      n.ownerDocument._nodes[n._nid] = n;
-      if (n.nodeType === Node.ELEMENT_NODE) {
-        var id = n.getAttribute("id");
-        if (id) n.ownerDocument.addId(id, n);
-        if (n._roothook) n._roothook();
-      }
-    }
-    function uproot(n) {
-      if (n.nodeType === Node.ELEMENT_NODE) {
-        var id = n.getAttribute("id");
-        if (id) n.ownerDocument.delId(id, n);
-      }
-      n.ownerDocument._nodes[n._nid] = void 0;
-      n._nid = void 0;
-    }
-    function recursivelyRoot(node) {
-      root(node);
-      if (node.nodeType === Node.ELEMENT_NODE) {
-        for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyRoot(kid);
-      }
-    }
-    function recursivelyUproot(node) {
-      uproot(node);
-      for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyUproot(kid);
-    }
-    function recursivelySetOwner(node, owner) {
-      node.ownerDocument = owner;
-      node._lastModTime = void 0;
-      if (Object.prototype.hasOwnProperty.call(node, "_tagName")) {
-        node._tagName = void 0;
-      }
-      for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelySetOwner(kid, owner);
-    }
-    function MultiId(node) {
-      this.nodes = /* @__PURE__ */ Object.create(null);
-      this.nodes[node._nid] = node;
-      this.length = 1;
-      this.firstNode = void 0;
-    }
-    MultiId.prototype.add = function(node) {
-      if (!this.nodes[node._nid]) {
-        this.nodes[node._nid] = node;
-        this.length++;
-        this.firstNode = void 0;
-      }
-    };
-    MultiId.prototype.del = function(node) {
-      if (this.nodes[node._nid]) {
-        delete this.nodes[node._nid];
-        this.length--;
-        this.firstNode = void 0;
-      }
-    };
-    MultiId.prototype.getFirst = function() {
-      if (!this.firstNode) {
-        var nid;
-        for (nid in this.nodes) {
-          if (this.firstNode === void 0 || this.firstNode.compareDocumentPosition(this.nodes[nid]) & Node.DOCUMENT_POSITION_PRECEDING) {
-            this.firstNode = this.nodes[nid];
-          }
-        }
-      }
-      return this.firstNode;
-    };
-    MultiId.prototype.downgrade = function() {
-      if (this.length === 1) {
-        var nid;
-        for (nid in this.nodes) {
-          return this.nodes[nid];
-        }
-      }
-      return this;
-    };
-  }
-});
-var require_DocumentType = __commonJS({
-  "external/npm/node_modules/domino/lib/DocumentType.js"(exports, module) {
-    "use strict";
-    module.exports = DocumentType;
-    var Node = require_Node();
-    var Leaf = require_Leaf();
-    var ChildNode = require_ChildNode();
-    function DocumentType(ownerDocument, name, publicId, systemId) {
-      Leaf.call(this);
-      this.nodeType = Node.DOCUMENT_TYPE_NODE;
-      this.ownerDocument = ownerDocument || null;
-      this.name = name;
-      this.publicId = publicId || "";
-      this.systemId = systemId || "";
-    }
-    DocumentType.prototype = Object.create(Leaf.prototype, {
-      nodeName: {
-        get: function() {
-          return this.name;
-        }
-      },
-      nodeValue: {
-        get: function() {
-          return null;
-        },
-        set: function() {
-        }
-      },
-      clone: {
-        value: function clone() {
-          return new DocumentType(this.ownerDocument, this.name, this.publicId, this.systemId);
-        }
-      },
-      isEqual: {
-        value: function isEqual(n) {
-          return this.name === n.name && this.publicId === n.publicId && this.systemId === n.systemId;
-        }
-      }
-    });
-    Object.defineProperties(DocumentType.prototype, ChildNode);
-  }
-});
-var require_HTMLParser = __commonJS({
-  "external/npm/node_modules/domino/lib/HTMLParser.js"(exports, module) {
-    "use strict";
-    module.exports = HTMLParser;
-    var Document2 = require_Document();
-    var DocumentType = require_DocumentType();
-    var Node = require_Node();
-    var NAMESPACE = require_utils().NAMESPACE;
-    var html = require_htmlelts();
-    var impl = html.elements;
-    var pushAll = Function.prototype.apply.bind(Array.prototype.push);
-    var EOF = -1;
-    var TEXT = 1;
-    var TAG = 2;
-    var ENDTAG = 3;
-    var COMMENT = 4;
-    var DOCTYPE = 5;
-    var NOATTRS = [];
-    var quirkyPublicIds = /^HTML$|^-\/\/W3O\/\/DTD W3 HTML Strict 3\.0\/\/EN\/\/$|^-\/W3C\/DTD HTML 4\.0 Transitional\/EN$|^\+\/\/Silmaril\/\/dtd html Pro v0r11 19970101\/\/|^-\/\/AdvaSoft Ltd\/\/DTD HTML 3\.0 asWedit \+ extensions\/\/|^-\/\/AS\/\/DTD HTML 3\.0 asWedit \+ extensions\/\/|^-\/\/IETF\/\/DTD HTML 2\.0 Level 1\/\/|^-\/\/IETF\/\/DTD HTML 2\.0 Level 2\/\/|^-\/\/IETF\/\/DTD HTML 2\.0 Strict Level 1\/\/|^-\/\/IETF\/\/DTD HTML 2\.0 Strict Level 2\/\/|^-\/\/IETF\/\/DTD HTML 2\.0 Strict\/\/|^-\/\/IETF\/\/DTD HTML 2\.0\/\/|^-\/\/IETF\/\/DTD HTML 2\.1E\/\/|^-\/\/IETF\/\/DTD HTML 3\.0\/\/|^-\/\/IETF\/\/DTD HTML 3\.2 Final\/\/|^-\/\/IETF\/\/DTD HTML 3\.2\/\/|^-\/\/IETF\/\/DTD HTML 3\/\/|^-\/\/IETF\/\/DTD HTML Level 0\/\/|^-\/\/IETF\/\/DTD HTML Level 1\/\/|^-\/\/IETF\/\/DTD HTML Level 2\/\/|^-\/\/IETF\/\/DTD HTML Level 3\/\/|^-\/\/IETF\/\/DTD HTML Strict Level 0\/\/|^-\/\/IETF\/\/DTD HTML Strict Level 1\/\/|^-\/\/IETF\/\/DTD HTML Strict Level 2\/\/|^-\/\/IETF\/\/DTD HTML Strict Level 3\/\/|^-\/\/IETF\/\/DTD HTML Strict\/\/|^-\/\/IETF\/\/DTD HTML\/\/|^-\/\/Metrius\/\/DTD Metrius Presentational\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 2\.0 HTML Strict\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 2\.0 HTML\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 2\.0 Tables\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 3\.0 HTML Strict\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 3\.0 HTML\/\/|^-\/\/Microsoft\/\/DTD Internet Explorer 3\.0 Tables\/\/|^-\/\/Netscape Comm\. Corp\.\/\/DTD HTML\/\/|^-\/\/Netscape Comm\. Corp\.\/\/DTD Strict HTML\/\/|^-\/\/O'Reilly and Associates\/\/DTD HTML 2\.0\/\/|^-\/\/O'Reilly and Associates\/\/DTD HTML Extended 1\.0\/\/|^-\/\/O'Reilly and Associates\/\/DTD HTML Extended Relaxed 1\.0\/\/|^-\/\/SoftQuad Software\/\/DTD HoTMetaL PRO 6\.0::19990601::extensions to HTML 4\.0\/\/|^-\/\/SoftQuad\/\/DTD HoTMetaL PRO 4\.0::19971010::extensions to HTML 4\.0\/\/|^-\/\/Spyglass\/\/DTD HTML 2\.0 Extended\/\/|^-\/\/SQ\/\/DTD HTML 2\.0 HoTMetaL \+ extensions\/\/|^-\/\/Sun Microsystems Corp\.\/\/DTD HotJava HTML\/\/|^-\/\/Sun Microsystems Corp\.\/\/DTD HotJava Strict HTML\/\/|^-\/\/W3C\/\/DTD HTML 3 1995-03-24\/\/|^-\/\/W3C\/\/DTD HTML 3\.2 Draft\/\/|^-\/\/W3C\/\/DTD HTML 3\.2 Final\/\/|^-\/\/W3C\/\/DTD HTML 3\.2\/\/|^-\/\/W3C\/\/DTD HTML 3\.2S Draft\/\/|^-\/\/W3C\/\/DTD HTML 4\.0 Frameset\/\/|^-\/\/W3C\/\/DTD HTML 4\.0 Transitional\/\/|^-\/\/W3C\/\/DTD HTML Experimental 19960712\/\/|^-\/\/W3C\/\/DTD HTML Experimental 970421\/\/|^-\/\/W3C\/\/DTD W3 HTML\/\/|^-\/\/W3O\/\/DTD W3 HTML 3\.0\/\/|^-\/\/WebTechs\/\/DTD Mozilla HTML 2\.0\/\/|^-\/\/WebTechs\/\/DTD Mozilla HTML\/\//i;
-    var quirkySystemId = "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd";
-    var conditionallyQuirkyPublicIds = /^-\/\/W3C\/\/DTD HTML 4\.01 Frameset\/\/|^-\/\/W3C\/\/DTD HTML 4\.01 Transitional\/\//i;
-    var limitedQuirkyPublicIds = /^-\/\/W3C\/\/DTD XHTML 1\.0 Frameset\/\/|^-\/\/W3C\/\/DTD XHTML 1\.0 Transitional\/\//i;
-    var specialSet = /* @__PURE__ */ Object.create(null);
-    specialSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "address": true,
-      "applet": true,
-      "area": true,
-      "article": true,
-      "aside": true,
-      "base": true,
-      "basefont": true,
-      "bgsound": true,
-      "blockquote": true,
-      "body": true,
-      "br": true,
-      "button": true,
-      "caption": true,
-      "center": true,
-      "col": true,
-      "colgroup": true,
-      "dd": true,
-      "details": true,
-      "dir": true,
-      "div": true,
-      "dl": true,
-      "dt": true,
-      "embed": true,
-      "fieldset": true,
-      "figcaption": true,
-      "figure": true,
-      "footer": true,
-      "form": true,
-      "frame": true,
-      "frameset": true,
-      "h1": true,
-      "h2": true,
-      "h3": true,
-      "h4": true,
-      "h5": true,
-      "h6": true,
-      "head": true,
-      "header": true,
-      "hgroup": true,
-      "hr": true,
-      "html": true,
-      "iframe": true,
-      "img": true,
-      "input": true,
-      "li": true,
-      "link": true,
-      "listing": true,
-      "main": true,
-      "marquee": true,
-      "menu": true,
-      "meta": true,
-      "nav": true,
-      "noembed": true,
-      "noframes": true,
-      "noscript": true,
-      "object": true,
-      "ol": true,
-      "p": true,
-      "param": true,
-      "plaintext": true,
-      "pre": true,
-      "script": true,
-      "section": true,
-      "select": true,
-      "source": true,
-      "style": true,
-      "summary": true,
-      "table": true,
-      "tbody": true,
-      "td": true,
-      "template": true,
-      "textarea": true,
-      "tfoot": true,
-      "th": true,
-      "thead": true,
-      "title": true,
-      "tr": true,
-      "track": true,
-      "ul": true,
-      "wbr": true,
-      "xmp": true
-    };
-    specialSet[NAMESPACE.SVG] = {
-      __proto__: null,
-      "foreignObject": true,
-      "desc": true,
-      "title": true
-    };
-    specialSet[NAMESPACE.MATHML] = {
-      __proto__: null,
-      "mi": true,
-      "mo": true,
-      "mn": true,
-      "ms": true,
-      "mtext": true,
-      "annotation-xml": true
-    };
-    var addressdivpSet = /* @__PURE__ */ Object.create(null);
-    addressdivpSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "address": true,
-      "div": true,
-      "p": true
-    };
-    var dddtSet = /* @__PURE__ */ Object.create(null);
-    dddtSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "dd": true,
-      "dt": true
-    };
-    var tablesectionrowSet = /* @__PURE__ */ Object.create(null);
-    tablesectionrowSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "table": true,
-      "thead": true,
-      "tbody": true,
-      "tfoot": true,
-      "tr": true
-    };
-    var impliedEndTagsSet = /* @__PURE__ */ Object.create(null);
-    impliedEndTagsSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "dd": true,
-      "dt": true,
-      "li": true,
-      "menuitem": true,
-      "optgroup": true,
-      "option": true,
-      "p": true,
-      "rb": true,
-      "rp": true,
-      "rt": true,
-      "rtc": true
-    };
-    var thoroughImpliedEndTagsSet = /* @__PURE__ */ Object.create(null);
-    thoroughImpliedEndTagsSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "caption": true,
-      "colgroup": true,
-      "dd": true,
-      "dt": true,
-      "li": true,
-      "optgroup": true,
-      "option": true,
-      "p": true,
-      "rb": true,
-      "rp": true,
-      "rt": true,
-      "rtc": true,
-      "tbody": true,
-      "td": true,
-      "tfoot": true,
-      "th": true,
-      "thead": true,
-      "tr": true
-    };
-    var tableContextSet = /* @__PURE__ */ Object.create(null);
-    tableContextSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "table": true,
-      "template": true,
-      "html": true
-    };
-    var tableBodyContextSet = /* @__PURE__ */ Object.create(null);
-    tableBodyContextSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "tbody": true,
-      "tfoot": true,
-      "thead": true,
-      "template": true,
-      "html": true
-    };
-    var tableRowContextSet = /* @__PURE__ */ Object.create(null);
-    tableRowContextSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "tr": true,
-      "template": true,
-      "html": true
-    };
-    var formassociatedSet = /* @__PURE__ */ Object.create(null);
-    formassociatedSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "button": true,
-      "fieldset": true,
-      "input": true,
-      "keygen": true,
-      "object": true,
-      "output": true,
-      "select": true,
-      "textarea": true,
-      "img": true
-    };
-    var inScopeSet = /* @__PURE__ */ Object.create(null);
-    inScopeSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "applet": true,
-      "caption": true,
-      "html": true,
-      "table": true,
-      "td": true,
-      "th": true,
-      "marquee": true,
-      "object": true,
-      "template": true
-    };
-    inScopeSet[NAMESPACE.MATHML] = {
-      __proto__: null,
-      "mi": true,
-      "mo": true,
-      "mn": true,
-      "ms": true,
-      "mtext": true,
-      "annotation-xml": true
-    };
-    inScopeSet[NAMESPACE.SVG] = {
-      __proto__: null,
-      "foreignObject": true,
-      "desc": true,
-      "title": true
-    };
-    var inListItemScopeSet = Object.create(inScopeSet);
-    inListItemScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);
-    inListItemScopeSet[NAMESPACE.HTML].ol = true;
-    inListItemScopeSet[NAMESPACE.HTML].ul = true;
-    var inButtonScopeSet = Object.create(inScopeSet);
-    inButtonScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);
-    inButtonScopeSet[NAMESPACE.HTML].button = true;
-    var inTableScopeSet = /* @__PURE__ */ Object.create(null);
-    inTableScopeSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "html": true,
-      "table": true,
-      "template": true
-    };
-    var invertedSelectScopeSet = /* @__PURE__ */ Object.create(null);
-    invertedSelectScopeSet[NAMESPACE.HTML] = {
-      __proto__: null,
-      "optgroup": true,
-      "option": true
-    };
-    var mathmlTextIntegrationPointSet = /* @__PURE__ */ Object.create(null);
-    mathmlTextIntegrationPointSet[NAMESPACE.MATHML] = {
-      __proto__: null,
-      mi: true,
-      mo: true,
-      mn: true,
-      ms: true,
-      mtext: true
-    };
-    var htmlIntegrationPointSet = /* @__PURE__ */ Object.create(null);
-    htmlIntegrationPointSet[NAMESPACE.SVG] = {
-      __proto__: null,
-      foreignObject: true,
-      desc: true,
-      title: true
-    };
-    var foreignAttributes = {
-      __proto__: null,
-      "xlink:actuate": NAMESPACE.XLINK,
-      "xlink:arcrole": NAMESPACE.XLINK,
-      "xlink:href": NAMESPACE.XLINK,
-      "xlink:role": NAMESPACE.XLINK,
-      "xlink:show": NAMESPACE.XLINK,
-      "xlink:title": NAMESPACE.XLINK,
-      "xlink:type": NAMESPACE.XLINK,
-      "xml:base": NAMESPACE.XML,
-      "xml:lang": NAMESPACE.XML,
-      "xml:space": NAMESPACE.XML,
-      "xmlns": NAMESPACE.XMLNS,
-      "xmlns:xlink": NAMESPACE.XMLNS
-    };
-    var svgAttrAdjustments = {
-      __proto__: null,
-      attributename: "attributeName",
-      attributetype: "attributeType",
-      basefrequency: "baseFrequency",
-      baseprofile: "baseProfile",
-      calcmode: "calcMode",
-      clippathunits: "clipPathUnits",
-      diffuseconstant: "diffuseConstant",
-      edgemode: "edgeMode",
-      filterunits: "filterUnits",
-      glyphref: "glyphRef",
-      gradienttransform: "gradientTransform",
-      gradientunits: "gradientUnits",
-      kernelmatrix: "kernelMatrix",
-      kernelunitlength: "kernelUnitLength",
-      keypoints: "keyPoints",
-      keysplines: "keySplines",
-      keytimes: "keyTimes",
-      lengthadjust: "lengthAdjust",
-      limitingconeangle: "limitingConeAngle",
-      markerheight: "markerHeight",
-      markerunits: "markerUnits",
-      markerwidth: "markerWidth",
-      maskcontentunits: "maskContentUnits",
-      maskunits: "maskUnits",
-      numoctaves: "numOctaves",
-      pathlength: "pathLength",
-      patterncontentunits: "patternContentUnits",
-      patterntransform: "patternTransform",
-      patternunits: "patternUnits",
-      pointsatx: "pointsAtX",
-      pointsaty: "pointsAtY",
-      pointsatz: "pointsAtZ",
-      preservealpha: "preserveAlpha",
-      preserveaspectratio: "preserveAspectRatio",
-      primitiveunits: "primitiveUnits",
-      refx: "refX",
-      refy: "refY",
-      repeatcount: "repeatCount",
-      repeatdur: "repeatDur",
-      requiredextensions: "requiredExtensions",
-      requiredfeatures: "requiredFeatures",
-      specularconstant: "specularConstant",
-      specularexponent: "specularExponent",
-      spreadmethod: "spreadMethod",
-      startoffset: "startOffset",
-      stddeviation: "stdDeviation",
-      stitchtiles: "stitchTiles",
-      surfacescale: "surfaceScale",
-      systemlanguage: "systemLanguage",
-      tablevalues: "tableValues",
-      targetx: "targetX",
-      targety: "targetY",
-      textlength: "textLength",
-      viewbox: "viewBox",
-      viewtarget: "viewTarget",
-      xchannelselector: "xChannelSelector",
-      ychannelselector: "yChannelSelector",
-      zoomandpan: "zoomAndPan"
-    };
-    var svgTagNameAdjustments = {
-      __proto__: null,
-      altglyph: "altGlyph",
-      altglyphdef: "altGlyphDef",
-      altglyphitem: "altGlyphItem",
-      animatecolor: "animateColor",
-      animatemotion: "animateMotion",
-      animatetransform: "animateTransform",
-      clippath: "clipPath",
-      feblend: "feBlend",
-      fecolormatrix: "feColorMatrix",
-      fecomponenttransfer: "feComponentTransfer",
-      fecomposite: "feComposite",
-      feconvolvematrix: "feConvolveMatrix",
-      fediffuselighting: "feDiffuseLighting",
-      fedisplacementmap: "feDisplacementMap",
-      fedistantlight: "feDistantLight",
-      feflood: "feFlood",
-      fefunca: "feFuncA",
-      fefuncb: "feFuncB",
-      fefuncg: "feFuncG",
-      fefuncr: "feFuncR",
-      fegaussianblur: "feGaussianBlur",
-      feimage: "feImage",
-      femerge: "feMerge",
-      femergenode: "feMergeNode",
-      femorphology: "feMorphology",
-      feoffset: "feOffset",
-      fepointlight: "fePointLight",
-      fespecularlighting: "feSpecularLighting",
-      fespotlight: "feSpotLight",
-      fetile: "feTile",
-      feturbulence: "feTurbulence",
-      foreignobject: "foreignObject",
-      glyphref: "glyphRef",
-      lineargradient: "linearGradient",
-      radialgradient: "radialGradient",
-      textpath: "textPath"
-    };
-    var numericCharRefReplacements = {
-      __proto__: null,
-      0: 65533,
-      128: 8364,
-      130: 8218,
-      131: 402,
-      132: 8222,
-      133: 8230,
-      134: 8224,
-      135: 8225,
-      136: 710,
-      137: 8240,
-      138: 352,
-      139: 8249,
-      140: 338,
-      142: 381,
-      145: 8216,
-      146: 8217,
-      147: 8220,
-      148: 8221,
-      149: 8226,
-      150: 8211,
-      151: 8212,
-      152: 732,
-      153: 8482,
-      154: 353,
-      155: 8250,
-      156: 339,
-      158: 382,
-      159: 376
-    };
-    var namedCharRefs = {
-      __proto__: null,
-      "AElig": 198,
-      "AElig;": 198,
-      "AMP": 38,
-      "AMP;": 38,
-      "Aacute": 193,
-      "Aacute;": 193,
-      "Abreve;": 258,
-      "Acirc": 194,
-      "Acirc;": 194,
-      "Acy;": 1040,
-      "Afr;": [55349, 56580],
-      "Agrave": 192,
-      "Agrave;": 192,
-      "Alpha;": 913,
-      "Amacr;": 256,
-      "And;": 10835,
-      "Aogon;": 260,
-      "Aopf;": [55349, 56632],
-      "ApplyFunction;": 8289,
-      "Aring": 197,
-      "Aring;": 197,
-      "Ascr;": [55349, 56476],
-      "Assign;": 8788,
-      "Atilde": 195,
-      "Atilde;": 195,
-      "Auml": 196,
-      "Auml;": 196,
-      "Backslash;": 8726,
-      "Barv;": 10983,
-      "Barwed;": 8966,
-      "Bcy;": 1041,
-      "Because;": 8757,
-      "Bernoullis;": 8492,
-      "Beta;": 914,
-      "Bfr;": [55349, 56581],
-      "Bopf;": [55349, 56633],
-      "Breve;": 728,
-      "Bscr;": 8492,
-      "Bumpeq;": 8782,
-      "CHcy;": 1063,
-      "COPY": 169,
-      "COPY;": 169,
-      "Cacute;": 262,
-      "Cap;": 8914,
-      "CapitalDifferentialD;": 8517,
-      "Cayleys;": 8493,
-      "Ccaron;": 268,
-      "Ccedil": 199,
-      "Ccedil;": 199,
-      "Ccirc;": 264,
-      "Cconint;": 8752,
-      "Cdot;": 266,
-      "Cedilla;": 184,
-      "CenterDot;": 183,
-      "Cfr;": 8493,
-      "Chi;": 935,
-      "CircleDot;": 8857,
-      "CircleMinus;": 8854,
-      "CirclePlus;": 8853,
-      "CircleTimes;": 8855,
-      "ClockwiseContourIntegral;": 8754,
-      "CloseCurlyDoubleQuote;": 8221,
-      "CloseCurlyQuote;": 8217,
-      "Colon;": 8759,
-      "Colone;": 10868,
-      "Congruent;": 8801,
-      "Conint;": 8751,
-      "ContourIntegral;": 8750,
-      "Copf;": 8450,
-      "Coproduct;": 8720,
-      "CounterClockwiseContourIntegral;": 8755,
-      "Cross;": 10799,
-      "Cscr;": [55349, 56478],
-      "Cup;": 8915,
-      "CupCap;": 8781,
-      "DD;": 8517,
-      "DDotrahd;": 10513,
-      "DJcy;": 1026,
-      "DScy;": 1029,
-      "DZcy;": 1039,
-      "Dagger;": 8225,
-      "Darr;": 8609,
-      "Dashv;": 10980,
-      "Dcaron;": 270,
-      "Dcy;": 1044,
-      "Del;": 8711,
-      "Delta;": 916,
-      "Dfr;": [55349, 56583],
-      "DiacriticalAcute;": 180,
-      "DiacriticalDot;": 729,
-      "DiacriticalDoubleAcute;": 733,
-      "DiacriticalGrave;": 96,
-      "DiacriticalTilde;": 732,
-      "Diamond;": 8900,
-      "DifferentialD;": 8518,
-      "Dopf;": [55349, 56635],
-      "Dot;": 168,
-      "DotDot;": 8412,
-      "DotEqual;": 8784,
-      "DoubleContourIntegral;": 8751,
-      "DoubleDot;": 168,
-      "DoubleDownArrow;": 8659,
-      "DoubleLeftArrow;": 8656,
-      "DoubleLeftRightArrow;": 8660,
-      "DoubleLeftTee;": 10980,
-      "DoubleLongLeftArrow;": 10232,
-      "DoubleLongLeftRightArrow;": 10234,
-      "DoubleLongRightArrow;": 10233,
-      "DoubleRightArrow;": 8658,
-      "DoubleRightTee;": 8872,
-      "DoubleUpArrow;": 8657,
-      "DoubleUpDownArrow;": 8661,
-      "DoubleVerticalBar;": 8741,
-      "DownArrow;": 8595,
-      "DownArrowBar;": 10515,
-      "DownArrowUpArrow;": 8693,
-      "DownBreve;": 785,
-      "DownLeftRightVector;": 10576,
-      "DownLeftTeeVector;": 10590,
-      "DownLeftVector;": 8637,
-      "DownLeftVectorBar;": 10582,
-      "DownRightTeeVector;": 10591,
-      "DownRightVector;": 8641,
-      "DownRightVectorBar;": 10583,
-      "DownTee;": 8868,
-      "DownTeeArrow;": 8615,
-      "Downarrow;": 8659,
-      "Dscr;": [55349, 56479],
-      "Dstrok;": 272,
-      "ENG;": 330,
-      "ETH": 208,
-      "ETH;": 208,
-      "Eacute": 201,
-      "Eacute;": 201,
-      "Ecaron;": 282,
-      "Ecirc": 202,
-      "Ecirc;": 202,
-      "Ecy;": 1069,
-      "Edot;": 278,
-      "Efr;": [55349, 56584],
-      "Egrave": 200,
-      "Egrave;": 200,
-      "Element;": 8712,
-      "Emacr;": 274,
-      "EmptySmallSquare;": 9723,
-      "EmptyVerySmallSquare;": 9643,
-      "Eogon;": 280,
-      "Eopf;": [55349, 56636],
-      "Epsilon;": 917,
-      "Equal;": 10869,
-      "EqualTilde;": 8770,
-      "Equilibrium;": 8652,
-      "Escr;": 8496,
-      "Esim;": 10867,
-      "Eta;": 919,
-      "Euml": 203,
-      "Euml;": 203,
-      "Exists;": 8707,
-      "ExponentialE;": 8519,
-      "Fcy;": 1060,
-      "Ffr;": [55349, 56585],
-      "FilledSmallSquare;": 9724,
-      "FilledVerySmallSquare;": 9642,
-      "Fopf;": [55349, 56637],
-      "ForAll;": 8704,
-      "Fouriertrf;": 8497,
-      "Fscr;": 8497,
-      "GJcy;": 1027,
-      "GT": 62,
-      "GT;": 62,
-      "Gamma;": 915,
-      "Gammad;": 988,
-      "Gbreve;": 286,
-      "Gcedil;": 290,
-      "Gcirc;": 284,
-      "Gcy;": 1043,
-      "Gdot;": 288,
-      "Gfr;": [55349, 56586],
-      "Gg;": 8921,
-      "Gopf;": [55349, 56638],
-      "GreaterEqual;": 8805,
-      "GreaterEqualLess;": 8923,
-      "GreaterFullEqual;": 8807,
-      "GreaterGreater;": 10914,
-      "GreaterLess;": 8823,
-      "GreaterSlantEqual;": 10878,
-      "GreaterTilde;": 8819,
-      "Gscr;": [55349, 56482],
-      "Gt;": 8811,
-      "HARDcy;": 1066,
-      "Hacek;": 711,
-      "Hat;": 94,
-      "Hcirc;": 292,
-      "Hfr;": 8460,
-      "HilbertSpace;": 8459,
-      "Hopf;": 8461,
-      "HorizontalLine;": 9472,
-      "Hscr;": 8459,
-      "Hstrok;": 294,
-      "HumpDownHump;": 8782,
-      "HumpEqual;": 8783,
-      "IEcy;": 1045,
-      "IJlig;": 306,
-      "IOcy;": 1025,
-      "Iacute": 205,
-      "Iacute;": 205,
-      "Icirc": 206,
-      "Icirc;": 206,
-      "Icy;": 1048,
-      "Idot;": 304,
-      "Ifr;": 8465,
-      "Igrave": 204,
-      "Igrave;": 204,
-      "Im;": 8465,
-      "Imacr;": 298,
-      "ImaginaryI;": 8520,
-      "Implies;": 8658,
-      "Int;": 8748,
-      "Integral;": 8747,
-      "Intersection;": 8898,
-      "InvisibleComma;": 8291,
-      "InvisibleTimes;": 8290,
-      "Iogon;": 302,
-      "Iopf;": [55349, 56640],
-      "Iota;": 921,
-      "Iscr;": 8464,
-      "Itilde;": 296,
-      "Iukcy;": 1030,
-      "Iuml": 207,
-      "Iuml;": 207,
-      "Jcirc;": 308,
-      "Jcy;": 1049,
-      "Jfr;": [55349, 56589],
-      "Jopf;": [55349, 56641],
-      "Jscr;": [55349, 56485],
-      "Jsercy;": 1032,
-      "Jukcy;": 1028,
-      "KHcy;": 1061,
-      "KJcy;": 1036,
-      "Kappa;": 922,
-      "Kcedil;": 310,
-      "Kcy;": 1050,
-      "Kfr;": [55349, 56590],
-      "Kopf;": [55349, 56642],
-      "Kscr;": [55349, 56486],
-      "LJcy;": 1033,
-      "LT": 60,
-      "LT;": 60,
-      "Lacute;": 313,
-      "Lambda;": 923,
-      "Lang;": 10218,
-      "Laplacetrf;": 8466,
-      "Larr;": 8606,
-      "Lcaron;": 317,
-      "Lcedil;": 315,
-      "Lcy;": 1051,
-      "LeftAngleBracket;": 10216,
-      "LeftArrow;": 8592,
-      "LeftArrowBar;": 8676,
-      "LeftArrowRightArrow;": 8646,
-      "LeftCeiling;": 8968,
-      "LeftDoubleBracket;": 10214,
-      "LeftDownTeeVector;": 10593,
-      "LeftDownVector;": 8643,
-      "LeftDownVectorBar;": 10585,
-      "LeftFloor;": 8970,
-      "LeftRightArrow;": 8596,
-      "LeftRightVector;": 10574,
-      "LeftTee;": 8867,
-      "LeftTeeArrow;": 8612,
-      "LeftTeeVector;": 10586,
-      "LeftTriangle;": 8882,
-      "LeftTriangleBar;": 10703,
-      "LeftTriangleEqual;": 8884,
-      "LeftUpDownVector;": 10577,
-      "LeftUpTeeVector;": 10592,
-      "LeftUpVector;": 8639,
-      "LeftUpVectorBar;": 10584,
-      "LeftVector;": 8636,
-      "LeftVectorBar;": 10578,
-      "Leftarrow;": 8656,
-      "Leftrightarrow;": 8660,
-      "LessEqualGreater;": 8922,
-      "LessFullEqual;": 8806,
-      "LessGreater;": 8822,
-      "LessLess;": 10913,
-      "LessSlantEqual;": 10877,
-      "LessTilde;": 8818,
-      "Lfr;": [55349, 56591],
-      "Ll;": 8920,
-      "Lleftarrow;": 8666,
-      "Lmidot;": 319,
-      "LongLeftArrow;": 10229,
-      "LongLeftRightArrow;": 10231,
-      "LongRightArrow;": 10230,
-      "Longleftarrow;": 10232,
-      "Longleftrightarrow;": 10234,
-      "Longrightarrow;": 10233,
-      "Lopf;": [55349, 56643],
-      "LowerLeftArrow;": 8601,
-      "LowerRightArrow;": 8600,
-      "Lscr;": 8466,
-      "Lsh;": 8624,
-      "Lstrok;": 321,
-      "Lt;": 8810,
-      "Map;": 10501,
-      "Mcy;": 1052,
-      "MediumSpace;": 8287,
-      "Mellintrf;": 8499,
-      "Mfr;": [55349, 56592],
-      "MinusPlus;": 8723,
-      "Mopf;": [55349, 56644],
-      "Mscr;": 8499,
-      "Mu;": 924,
-      "NJcy;": 1034,
-      "Nacute;": 323,
-      "Ncaron;": 327,
-      "Ncedil;": 325,
-      "Ncy;": 1053,
-      "NegativeMediumSpace;": 8203,
-      "NegativeThickSpace;": 8203,
-      "NegativeThinSpace;": 8203,
-      "NegativeVeryThinSpace;": 8203,
-      "NestedGreaterGreater;": 8811,
-      "NestedLessLess;": 8810,
-      "NewLine;": 10,
-      "Nfr;": [55349, 56593],
-      "NoBreak;": 8288,
-      "NonBreakingSpace;": 160,
-      "Nopf;": 8469,
-      "Not;": 10988,
-      "NotCongruent;": 8802,
-      "NotCupCap;": 8813,
-      "NotDoubleVerticalBar;": 8742,
-      "NotElement;": 8713,
-      "NotEqual;": 8800,
-      "NotEqualTilde;": [8770, 824],
-      "NotExists;": 8708,
-      "NotGreater;": 8815,
-      "NotGreaterEqual;": 8817,
-      "NotGreaterFullEqual;": [8807, 824],
-      "NotGreaterGreater;": [8811, 824],
-      "NotGreaterLess;": 8825,
-      "NotGreaterSlantEqual;": [10878, 824],
-      "NotGreaterTilde;": 8821,
-      "NotHumpDownHump;": [8782, 824],
-      "NotHumpEqual;": [8783, 824],
-      "NotLeftTriangle;": 8938,
-      "NotLeftTriangleBar;": [10703, 824],
-      "NotLeftTriangleEqual;": 8940,
-      "NotLess;": 8814,
-      "NotLessEqual;": 8816,
-      "NotLessGreater;": 8824,
-      "NotLessLess;": [8810, 824],
-      "NotLessSlantEqual;": [10877, 824],
-      "NotLessTilde;": 8820,
-      "NotNestedGreaterGreater;": [10914, 824],
-      "NotNestedLessLess;": [10913, 824],
-      "NotPrecedes;": 8832,
-      "NotPrecedesEqual;": [10927, 824],
-      "NotPrecedesSlantEqual;": 8928,
-      "NotReverseElement;": 8716,
-      "NotRightTriangle;": 8939,
-      "NotRightTriangleBar;": [10704, 824],
-      "NotRightTriangleEqual;": 8941,
-      "NotSquareSubset;": [8847, 824],
-      "NotSquareSubsetEqual;": 8930,
-      "NotSquareSuperset;": [8848, 824],
-      "NotSquareSupersetEqual;": 8931,
-      "NotSubset;": [8834, 8402],
-      "NotSubsetEqual;": 8840,
-      "NotSucceeds;": 8833,
-      "NotSucceedsEqual;": [10928, 824],
-      "NotSucceedsSlantEqual;": 8929,
-      "NotSucceedsTilde;": [8831, 824],
-      "NotSuperset;": [8835, 8402],
-      "NotSupersetEqual;": 8841,
-      "NotTilde;": 8769,
-      "NotTildeEqual;": 8772,
-      "NotTildeFullEqual;": 8775,
-      "NotTildeTilde;": 8777,
-      "NotVerticalBar;": 8740,
-      "Nscr;": [55349, 56489],
-      "Ntilde": 209,
-      "Ntilde;": 209,
-      "Nu;": 925,
-      "OElig;": 338,
-      "Oacute": 211,
-      "Oacute;": 211,
-      "Ocirc": 212,
-      "Ocirc;": 212,
-      "Ocy;": 1054,
-      "Odblac;": 336,
-      "Ofr;": [55349, 56594],
-      "Ograve": 210,
-      "Ograve;": 210,
-      "Omacr;": 332,
-      "Omega;": 937,
-      "Omicron;": 927,
-      "Oopf;": [55349, 56646],
-      "OpenCurlyDoubleQuote;": 8220,
-      "OpenCurlyQuote;": 8216,
-      "Or;": 10836,
-      "Oscr;": [55349, 56490],
-      "Oslash": 216,
-      "Oslash;": 216,
-      "Otilde": 213,
-      "Otilde;": 213,
-      "Otimes;": 10807,
-      "Ouml": 214,
-      "Ouml;": 214,
-      "OverBar;": 8254,
-      "OverBrace;": 9182,
-      "OverBracket;": 9140,
-      "OverParenthesis;": 9180,
-      "PartialD;": 8706,
-      "Pcy;": 1055,
-      "Pfr;": [55349, 56595],
-      "Phi;": 934,
-      "Pi;": 928,
-      "PlusMinus;": 177,
-      "Poincareplane;": 8460,
-      "Popf;": 8473,
-      "Pr;": 10939,
-      "Precedes;": 8826,
-      "PrecedesEqual;": 10927,
-      "PrecedesSlantEqual;": 8828,
-      "PrecedesTilde;": 8830,
-      "Prime;": 8243,
-      "Product;": 8719,
-      "Proportion;": 8759,
-      "Proportional;": 8733,
-      "Pscr;": [55349, 56491],
-      "Psi;": 936,
-      "QUOT": 34,
-      "QUOT;": 34,
-      "Qfr;": [55349, 56596],
-      "Qopf;": 8474,
-      "Qscr;": [55349, 56492],
-      "RBarr;": 10512,
-      "REG": 174,
-      "REG;": 174,
-      "Racute;": 340,
-      "Rang;": 10219,
-      "Rarr;": 8608,
-      "Rarrtl;": 10518,
-      "Rcaron;": 344,
-      "Rcedil;": 342,
-      "Rcy;": 1056,
-      "Re;": 8476,
-      "ReverseElement;": 8715,
-      "ReverseEquilibrium;": 8651,
-      "ReverseUpEquilibrium;": 10607,
-      "Rfr;": 8476,
-      "Rho;": 929,
-      "RightAngleBracket;": 10217,
-      "RightArrow;": 8594,
-      "RightArrowBar;": 8677,
-      "RightArrowLeftArrow;": 8644,
-      "RightCeiling;": 8969,
-      "RightDoubleBracket;": 10215,
-      "RightDownTeeVector;": 10589,
-      "RightDownVector;": 8642,
-      "RightDownVectorBar;": 10581,
-      "RightFloor;": 8971,
-      "RightTee;": 8866,
-      "RightTeeArrow;": 8614,
-      "RightTeeVector;": 10587,
-      "RightTriangle;": 8883,
-      "RightTriangleBar;": 10704,
-      "RightTriangleEqual;": 8885,
-      "RightUpDownVector;": 10575,
-      "RightUpTeeVector;": 10588,
-      "RightUpVector;": 8638,
-      "RightUpVectorBar;": 10580,
-      "RightVector;": 8640,
-      "RightVectorBar;": 10579,
-      "Rightarrow;": 8658,
-      "Ropf;": 8477,
-      "RoundImplies;": 10608,
-      "Rrightarrow;": 8667,
-      "Rscr;": 8475,
-      "Rsh;": 8625,
-      "RuleDelayed;": 10740,
-      "SHCHcy;": 1065,
-      "SHcy;": 1064,
-      "SOFTcy;": 1068,
-      "Sacute;": 346,
-      "Sc;": 10940,
-      "Scaron;": 352,
-      "Scedil;": 350,
-      "Scirc;": 348,
-      "Scy;": 1057,
-      "Sfr;": [55349, 56598],
-      "ShortDownArrow;": 8595,
-      "ShortLeftArrow;": 8592,
-      "ShortRightArrow;": 8594,
-      "ShortUpArrow;": 8593,
-      "Sigma;": 931,
-      "SmallCircle;": 8728,
-      "Sopf;": [55349, 56650],
-      "Sqrt;": 8730,
-      "Square;": 9633,
-      "SquareIntersection;": 8851,
-      "SquareSubset;": 8847,
-      "SquareSubsetEqual;": 8849,
-      "SquareSuperset;": 8848,
-      "SquareSupersetEqual;": 8850,
-      "SquareUnion;": 8852,
-      "Sscr;": [55349, 56494],
-      "Star;": 8902,
-      "Sub;": 8912,
-      "Subset;": 8912,
-      "SubsetEqual;": 8838,
-      "Succeeds;": 8827,
-      "SucceedsEqual;": 10928,
-      "SucceedsSlantEqual;": 8829,
-      "SucceedsTilde;": 8831,
-      "SuchThat;": 8715,
-      "Sum;": 8721,
-      "Sup;": 8913,
-      "Superset;": 8835,
-      "SupersetEqual;": 8839,
-      "Supset;": 8913,
-      "THORN": 222,
-      "THORN;": 222,
-      "TRADE;": 8482,
-      "TSHcy;": 1035,
-      "TScy;": 1062,
-      "Tab;": 9,
-      "Tau;": 932,
-      "Tcaron;": 356,
-      "Tcedil;": 354,
-      "Tcy;": 1058,
-      "Tfr;": [55349, 56599],
-      "Therefore;": 8756,
-      "Theta;": 920,
-      "ThickSpace;": [8287, 8202],
-      "ThinSpace;": 8201,
-      "Tilde;": 8764,
-      "TildeEqual;": 8771,
-      "TildeFullEqual;": 8773,
-      "TildeTilde;": 8776,
-      "Topf;": [55349, 56651],
-      "TripleDot;": 8411,
-      "Tscr;": [55349, 56495],
-      "Tstrok;": 358,
-      "Uacute": 218,
-      "Uacute;": 218,
-      "Uarr;": 8607,
-      "Uarrocir;": 10569,
-      "Ubrcy;": 1038,
-      "Ubreve;": 364,
-      "Ucirc": 219,
-      "Ucirc;": 219,
-      "Ucy;": 1059,
-      "Udblac;": 368,
-      "Ufr;": [55349, 56600],
-      "Ugrave": 217,
-      "Ugrave;": 217,
-      "Umacr;": 362,
-      "UnderBar;": 95,
-      "UnderBrace;": 9183,
-      "UnderBracket;": 9141,
-      "UnderParenthesis;": 9181,
-      "Union;": 8899,
-      "UnionPlus;": 8846,
-      "Uogon;": 370,
-      "Uopf;": [55349, 56652],
-      "UpArrow;": 8593,
-      "UpArrowBar;": 10514,
-      "UpArrowDownArrow;": 8645,
-      "UpDownArrow;": 8597,
-      "UpEquilibrium;": 10606,
-      "UpTee;": 8869,
-      "UpTeeArrow;": 8613,
-      "Uparrow;": 8657,
-      "Updownarrow;": 8661,
-      "UpperLeftArrow;": 8598,
-      "UpperRightArrow;": 8599,
-      "Upsi;": 978,
-      "Upsilon;": 933,
-      "Uring;": 366,
-      "Uscr;": [55349, 56496],
-      "Utilde;": 360,
-      "Uuml": 220,
-      "Uuml;": 220,
-      "VDash;": 8875,
-      "Vbar;": 10987,
-      "Vcy;": 1042,
-      "Vdash;": 8873,
-      "Vdashl;": 10982,
-      "Vee;": 8897,
-      "Verbar;": 8214,
-      "Vert;": 8214,
-      "VerticalBar;": 8739,
-      "VerticalLine;": 124,
-      "VerticalSeparator;": 10072,
-      "VerticalTilde;": 8768,
-      "VeryThinSpace;": 8202,
-      "Vfr;": [55349, 56601],
-      "Vopf;": [55349, 56653],
-      "Vscr;": [55349, 56497],
-      "Vvdash;": 8874,
-      "Wcirc;": 372,
-      "Wedge;": 8896,
-      "Wfr;": [55349, 56602],
-      "Wopf;": [55349, 56654],
-      "Wscr;": [55349, 56498],
-      "Xfr;": [55349, 56603],
-      "Xi;": 926,
-      "Xopf;": [55349, 56655],
-      "Xscr;": [55349, 56499],
-      "YAcy;": 1071,
-      "YIcy;": 1031,
-      "YUcy;": 1070,
-      "Yacute": 221,
-      "Yacute;": 221,
-      "Ycirc;": 374,
-      "Ycy;": 1067,
-      "Yfr;": [55349, 56604],
-      "Yopf;": [55349, 56656],
-      "Yscr;": [55349, 56500],
-      "Yuml;": 376,
-      "ZHcy;": 1046,
-      "Zacute;": 377,
-      "Zcaron;": 381,
-      "Zcy;": 1047,
-      "Zdot;": 379,
-      "ZeroWidthSpace;": 8203,
-      "Zeta;": 918,
-      "Zfr;": 8488,
-      "Zopf;": 8484,
-      "Zscr;": [55349, 56501],
-      "aacute": 225,
-      "aacute;": 225,
-      "abreve;": 259,
-      "ac;": 8766,
-      "acE;": [8766, 819],
-      "acd;": 8767,
-      "acirc": 226,
-      "acirc;": 226,
-      "acute": 180,
-      "acute;": 180,
-      "acy;": 1072,
-      "aelig": 230,
-      "aelig;": 230,
-      "af;": 8289,
-      "afr;": [55349, 56606],
-      "agrave": 224,
-      "agrave;": 224,
-      "alefsym;": 8501,
-      "aleph;": 8501,
-      "alpha;": 945,
-      "amacr;": 257,
-      "amalg;": 10815,
-      "amp": 38,
-      "amp;": 38,
-      "and;": 8743,
-      "andand;": 10837,
-      "andd;": 10844,
-      "andslope;": 10840,
-      "andv;": 10842,
-      "ang;": 8736,
-      "ange;": 10660,
-      "angle;": 8736,
-      "angmsd;": 8737,
-      "angmsdaa;": 10664,
-      "angmsdab;": 10665,
-      "angmsdac;": 10666,
-      "angmsdad;": 10667,
-      "angmsdae;": 10668,
-      "angmsdaf;": 10669,
-      "angmsdag;": 10670,
-      "angmsdah;": 10671,
-      "angrt;": 8735,
-      "angrtvb;": 8894,
-      "angrtvbd;": 10653,
-      "angsph;": 8738,
-      "angst;": 197,
-      "angzarr;": 9084,
-      "aogon;": 261,
-      "aopf;": [55349, 56658],
-      "ap;": 8776,
-      "apE;": 10864,
-      "apacir;": 10863,
-      "ape;": 8778,
-      "apid;": 8779,
-      "apos;": 39,
-      "approx;": 8776,
-      "approxeq;": 8778,
-      "aring": 229,
-      "aring;": 229,
-      "ascr;": [55349, 56502],
-      "ast;": 42,
-      "asymp;": 8776,
-      "asympeq;": 8781,
-      "atilde": 227,
-      "atilde;": 227,
-      "auml": 228,
-      "auml;": 228,
-      "awconint;": 8755,
-      "awint;": 10769,
-      "bNot;": 10989,
-      "backcong;": 8780,
-      "backepsilon;": 1014,
-      "backprime;": 8245,
-      "backsim;": 8765,
-      "backsimeq;": 8909,
-      "barvee;": 8893,
-      "barwed;": 8965,
-      "barwedge;": 8965,
-      "bbrk;": 9141,
-      "bbrktbrk;": 9142,
-      "bcong;": 8780,
-      "bcy;": 1073,
-      "bdquo;": 8222,
-      "becaus;": 8757,
-      "because;": 8757,
-      "bemptyv;": 10672,
-      "bepsi;": 1014,
-      "bernou;": 8492,
-      "beta;": 946,
-      "beth;": 8502,
-      "between;": 8812,
-      "bfr;": [55349, 56607],
-      "bigcap;": 8898,
-      "bigcirc;": 9711,
-      "bigcup;": 8899,
-      "bigodot;": 10752,
-      "bigoplus;": 10753,
-      "bigotimes;": 10754,
-      "bigsqcup;": 10758,
-      "bigstar;": 9733,
-      "bigtriangledown;": 9661,
-      "bigtriangleup;": 9651,
-      "biguplus;": 10756,
-      "bigvee;": 8897,
-      "bigwedge;": 8896,
-      "bkarow;": 10509,
-      "blacklozenge;": 10731,
-      "blacksquare;": 9642,
-      "blacktriangle;": 9652,
-      "blacktriangledown;": 9662,
-      "blacktriangleleft;": 9666,
-      "blacktriangleright;": 9656,
-      "blank;": 9251,
-      "blk12;": 9618,
-      "blk14;": 9617,
-      "blk34;": 9619,
-      "block;": 9608,
-      "bne;": [61, 8421],
-      "bnequiv;": [8801, 8421],
-      "bnot;": 8976,
-      "bopf;": [55349, 56659],
-      "bot;": 8869,
-      "bottom;": 8869,
-      "bowtie;": 8904,
-      "boxDL;": 9559,
-      "boxDR;": 9556,
-      "boxDl;": 9558,
-      "boxDr;": 9555,
-      "boxH;": 9552,
-      "boxHD;": 9574,
-      "boxHU;": 9577,
-      "boxHd;": 9572,
-      "boxHu;": 9575,
-      "boxUL;": 9565,
-      "boxUR;": 9562,
-      "boxUl;": 9564,
-      "boxUr;": 9561,
-      "boxV;": 9553,
-      "boxVH;": 9580,
-      "boxVL;": 9571,
-      "boxVR;": 9568,
-      "boxVh;": 9579,
-      "boxVl;": 9570,
-      "boxVr;": 9567,
-      "boxbox;": 10697,
-      "boxdL;": 9557,
-      "boxdR;": 9554,
-      "boxdl;": 9488,
-      "boxdr;": 9484,
-      "boxh;": 9472,
-      "boxhD;": 9573,
-      "boxhU;": 9576,
-      "boxhd;": 9516,
-      "boxhu;": 9524,
-      "boxminus;": 8863,
-      "boxplus;": 8862,
-      "boxtimes;": 8864,
-      "boxuL;": 9563,
-      "boxuR;": 9560,
-      "boxul;": 9496,
-      "boxur;": 9492,
-      "boxv;": 9474,
-      "boxvH;": 9578,
-      "boxvL;": 9569,
-      "boxvR;": 9566,
-      "boxvh;": 9532,
-      "boxvl;": 9508,
-      "boxvr;": 9500,
-      "bprime;": 8245,
-      "breve;": 728,
-      "brvbar": 166,
-      "brvbar;": 166,
-      "bscr;": [55349, 56503],
-      "bsemi;": 8271,
-      "bsim;": 8765,
-      "bsime;": 8909,
-      "bsol;": 92,
-      "bsolb;": 10693,
-      "bsolhsub;": 10184,
-      "bull;": 8226,
-      "bullet;": 8226,
-      "bump;": 8782,
-      "bumpE;": 10926,
-      "bumpe;": 8783,
-      "bumpeq;": 8783,
-      "cacute;": 263,
-      "cap;": 8745,
-      "capand;": 10820,
-      "capbrcup;": 10825,
-      "capcap;": 10827,
-      "capcup;": 10823,
-      "capdot;": 10816,
-      "caps;": [8745, 65024],
-      "caret;": 8257,
-      "caron;": 711,
-      "ccaps;": 10829,
-      "ccaron;": 269,
-      "ccedil": 231,
-      "ccedil;": 231,
-      "ccirc;": 265,
-      "ccups;": 10828,
-      "ccupssm;": 10832,
-      "cdot;": 267,
-      "cedil": 184,
-      "cedil;": 184,
-      "cemptyv;": 10674,
-      "cent": 162,
-      "cent;": 162,
-      "centerdot;": 183,
-      "cfr;": [55349, 56608],
-      "chcy;": 1095,
-      "check;": 10003,
-      "checkmark;": 10003,
-      "chi;": 967,
-      "cir;": 9675,
-      "cirE;": 10691,
-      "circ;": 710,
-      "circeq;": 8791,
-      "circlearrowleft;": 8634,
-      "circlearrowright;": 8635,
-      "circledR;": 174,
-      "circledS;": 9416,
-      "circledast;": 8859,
-      "circledcirc;": 8858,
-      "circleddash;": 8861,
-      "cire;": 8791,
-      "cirfnint;": 10768,
-      "cirmid;": 10991,
-      "cirscir;": 10690,
-      "clubs;": 9827,
-      "clubsuit;": 9827,
-      "colon;": 58,
-      "colone;": 8788,
-      "coloneq;": 8788,
-      "comma;": 44,
-      "commat;": 64,
-      "comp;": 8705,
-      "compfn;": 8728,
-      "complement;": 8705,
-      "complexes;": 8450,
-      "cong;": 8773,
-      "congdot;": 10861,
-      "conint;": 8750,
-      "copf;": [55349, 56660],
-      "coprod;": 8720,
-      "copy": 169,
-      "copy;": 169,
-      "copysr;": 8471,
-      "crarr;": 8629,
-      "cross;": 10007,
-      "cscr;": [55349, 56504],
-      "csub;": 10959,
-      "csube;": 10961,
-      "csup;": 10960,
-      "csupe;": 10962,
-      "ctdot;": 8943,
-      "cudarrl;": 10552,
-      "cudarrr;": 10549,
-      "cuepr;": 8926,
-      "cuesc;": 8927,
-      "cularr;": 8630,
-      "cularrp;": 10557,
-      "cup;": 8746,
-      "cupbrcap;": 10824,
-      "cupcap;": 10822,
-      "cupcup;": 10826,
-      "cupdot;": 8845,
-      "cupor;": 10821,
-      "cups;": [8746, 65024],
-      "curarr;": 8631,
-      "curarrm;": 10556,
-      "curlyeqprec;": 8926,
-      "curlyeqsucc;": 8927,
-      "curlyvee;": 8910,
-      "curlywedge;": 8911,
-      "curren": 164,
-      "curren;": 164,
-      "curvearrowleft;": 8630,
-      "curvearrowright;": 8631,
-      "cuvee;": 8910,
-      "cuwed;": 8911,
-      "cwconint;": 8754,
-      "cwint;": 8753,
-      "cylcty;": 9005,
-      "dArr;": 8659,
-      "dHar;": 10597,
-      "dagger;": 8224,
-      "daleth;": 8504,
-      "darr;": 8595,
-      "dash;": 8208,
-      "dashv;": 8867,
-      "dbkarow;": 10511,
-      "dblac;": 733,
-      "dcaron;": 271,
-      "dcy;": 1076,
-      "dd;": 8518,
-      "ddagger;": 8225,
-      "ddarr;": 8650,
-      "ddotseq;": 10871,
-      "deg": 176,
-      "deg;": 176,
-      "delta;": 948,
-      "demptyv;": 10673,
-      "dfisht;": 10623,
-      "dfr;": [55349, 56609],
-      "dharl;": 8643,
-      "dharr;": 8642,
-      "diam;": 8900,
-      "diamond;": 8900,
-      "diamondsuit;": 9830,
-      "diams;": 9830,
-      "die;": 168,
-      "digamma;": 989,
-      "disin;": 8946,
-      "div;": 247,
-      "divide": 247,
-      "divide;": 247,
-      "divideontimes;": 8903,
-      "divonx;": 8903,
-      "djcy;": 1106,
-      "dlcorn;": 8990,
-      "dlcrop;": 8973,
-      "dollar;": 36,
-      "dopf;": [55349, 56661],
-      "dot;": 729,
-      "doteq;": 8784,
-      "doteqdot;": 8785,
-      "dotminus;": 8760,
-      "dotplus;": 8724,
-      "dotsquare;": 8865,
-      "doublebarwedge;": 8966,
-      "downarrow;": 8595,
-      "downdownarrows;": 8650,
-      "downharpoonleft;": 8643,
-      "downharpoonright;": 8642,
-      "drbkarow;": 10512,
-      "drcorn;": 8991,
-      "drcrop;": 8972,
-      "dscr;": [55349, 56505],
-      "dscy;": 1109,
-      "dsol;": 10742,
-      "dstrok;": 273,
-      "dtdot;": 8945,
-      "dtri;": 9663,
-      "dtrif;": 9662,
-      "duarr;": 8693,
-      "duhar;": 10607,
-      "dwangle;": 10662,
-      "dzcy;": 1119,
-      "dzigrarr;": 10239,
-      "eDDot;": 10871,
-      "eDot;": 8785,
-      "eacute": 233,
-      "eacute;": 233,
-      "easter;": 10862,
-      "ecaron;": 283,
-      "ecir;": 8790,
-      "ecirc": 234,
-      "ecirc;": 234,
-      "ecolon;": 8789,
-      "ecy;": 1101,
-      "edot;": 279,
-      "ee;": 8519,
-      "efDot;": 8786,
-      "efr;": [55349, 56610],
-      "eg;": 10906,
-      "egrave": 232,
-      "egrave;": 232,
-      "egs;": 10902,
-      "egsdot;": 10904,
-      "el;": 10905,
-      "elinters;": 9191,
-      "ell;": 8467,
-      "els;": 10901,
-      "elsdot;": 10903,
-      "emacr;": 275,
-      "empty;": 8709,
-      "emptyset;": 8709,
-      "emptyv;": 8709,
-      "emsp13;": 8196,
-      "emsp14;": 8197,
-      "emsp;": 8195,
-      "eng;": 331,
-      "ensp;": 8194,
-      "eogon;": 281,
-      "eopf;": [55349, 56662],
-      "epar;": 8917,
-      "eparsl;": 10723,
-      "eplus;": 10865,
-      "epsi;": 949,
-      "epsilon;": 949,
-      "epsiv;": 1013,
-      "eqcirc;": 8790,
-      "eqcolon;": 8789,
-      "eqsim;": 8770,
-      "eqslantgtr;": 10902,
-      "eqslantless;": 10901,
-      "equals;": 61,
-      "equest;": 8799,
-      "equiv;": 8801,
-      "equivDD;": 10872,
-      "eqvparsl;": 10725,
-      "erDot;": 8787,
-      "erarr;": 10609,
-      "escr;": 8495,
-      "esdot;": 8784,
-      "esim;": 8770,
-      "eta;": 951,
-      "eth": 240,
-      "eth;": 240,
-      "euml": 235,
-      "euml;": 235,
-      "euro;": 8364,
-      "excl;": 33,
-      "exist;": 8707,
-      "expectation;": 8496,
-      "exponentiale;": 8519,
-      "fallingdotseq;": 8786,
-      "fcy;": 1092,
-      "female;": 9792,
-      "ffilig;": 64259,
-      "fflig;": 64256,
-      "ffllig;": 64260,
-      "ffr;": [55349, 56611],
-      "filig;": 64257,
-      "fjlig;": [102, 106],
-      "flat;": 9837,
-      "fllig;": 64258,
-      "fltns;": 9649,
-      "fnof;": 402,
-      "fopf;": [55349, 56663],
-      "forall;": 8704,
-      "fork;": 8916,
-      "forkv;": 10969,
-      "fpartint;": 10765,
-      "frac12": 189,
-      "frac12;": 189,
-      "frac13;": 8531,
-      "frac14": 188,
-      "frac14;": 188,
-      "frac15;": 8533,
-      "frac16;": 8537,
-      "frac18;": 8539,
-      "frac23;": 8532,
-      "frac25;": 8534,
-      "frac34": 190,
-      "frac34;": 190,
-      "frac35;": 8535,
-      "frac38;": 8540,
-      "frac45;": 8536,
-      "frac56;": 8538,
-      "frac58;": 8541,
-      "frac78;": 8542,
-      "frasl;": 8260,
-      "frown;": 8994,
-      "fscr;": [55349, 56507],
-      "gE;": 8807,
-      "gEl;": 10892,
-      "gacute;": 501,
-      "gamma;": 947,
-      "gammad;": 989,
-      "gap;": 10886,
-      "gbreve;": 287,
-      "gcirc;": 285,
-      "gcy;": 1075,
-      "gdot;": 289,
-      "ge;": 8805,
-      "gel;": 8923,
-      "geq;": 8805,
-      "geqq;": 8807,
-      "geqslant;": 10878,
-      "ges;": 10878,
-      "gescc;": 10921,
-      "gesdot;": 10880,
-      "gesdoto;": 10882,
-      "gesdotol;": 10884,
-      "gesl;": [8923, 65024],
-      "gesles;": 10900,
-      "gfr;": [55349, 56612],
-      "gg;": 8811,
-      "ggg;": 8921,
-      "gimel;": 8503,
-      "gjcy;": 1107,
-      "gl;": 8823,
-      "glE;": 10898,
-      "gla;": 10917,
-      "glj;": 10916,
-      "gnE;": 8809,
-      "gnap;": 10890,
-      "gnapprox;": 10890,
-      "gne;": 10888,
-      "gneq;": 10888,
-      "gneqq;": 8809,
-      "gnsim;": 8935,
-      "gopf;": [55349, 56664],
-      "grave;": 96,
-      "gscr;": 8458,
-      "gsim;": 8819,
-      "gsime;": 10894,
-      "gsiml;": 10896,
-      "gt": 62,
-      "gt;": 62,
-      "gtcc;": 10919,
-      "gtcir;": 10874,
-      "gtdot;": 8919,
-      "gtlPar;": 10645,
-      "gtquest;": 10876,
-      "gtrapprox;": 10886,
-      "gtrarr;": 10616,
-      "gtrdot;": 8919,
-      "gtreqless;": 8923,
-      "gtreqqless;": 10892,
-      "gtrless;": 8823,
-      "gtrsim;": 8819,
-      "gvertneqq;": [8809, 65024],
-      "gvnE;": [8809, 65024],
-      "hArr;": 8660,
-      "hairsp;": 8202,
-      "half;": 189,
-      "hamilt;": 8459,
-      "hardcy;": 1098,
-      "harr;": 8596,
-      "harrcir;": 10568,
-      "harrw;": 8621,
-      "hbar;": 8463,
-      "hcirc;": 293,
-      "hearts;": 9829,
-      "heartsuit;": 9829,
-      "hellip;": 8230,
-      "hercon;": 8889,
-      "hfr;": [55349, 56613],
-      "hksearow;": 10533,
-      "hkswarow;": 10534,
-      "hoarr;": 8703,
-      "homtht;": 8763,
-      "hookleftarrow;": 8617,
-      "hookrightarrow;": 8618,
-      "hopf;": [55349, 56665],
-      "horbar;": 8213,
-      "hscr;": [55349, 56509],
-      "hslash;": 8463,
-      "hstrok;": 295,
-      "hybull;": 8259,
-      "hyphen;": 8208,
-      "iacute": 237,
-      "iacute;": 237,
-      "ic;": 8291,
-      "icirc": 238,
-      "icirc;": 238,
-      "icy;": 1080,
-      "iecy;": 1077,
-      "iexcl": 161,
-      "iexcl;": 161,
-      "iff;": 8660,
-      "ifr;": [55349, 56614],
-      "igrave": 236,
-      "igrave;": 236,
-      "ii;": 8520,
-      "iiiint;": 10764,
-      "iiint;": 8749,
-      "iinfin;": 10716,
-      "iiota;": 8489,
-      "ijlig;": 307,
-      "imacr;": 299,
-      "image;": 8465,
-      "imagline;": 8464,
-      "imagpart;": 8465,
-      "imath;": 305,
-      "imof;": 8887,
-      "imped;": 437,
-      "in;": 8712,
-      "incare;": 8453,
-      "infin;": 8734,
-      "infintie;": 10717,
-      "inodot;": 305,
-      "int;": 8747,
-      "intcal;": 8890,
-      "integers;": 8484,
-      "intercal;": 8890,
-      "intlarhk;": 10775,
-      "intprod;": 10812,
-      "iocy;": 1105,
-      "iogon;": 303,
-      "iopf;": [55349, 56666],
-      "iota;": 953,
-      "iprod;": 10812,
-      "iquest": 191,
-      "iquest;": 191,
-      "iscr;": [55349, 56510],
-      "isin;": 8712,
-      "isinE;": 8953,
-      "isindot;": 8949,
-      "isins;": 8948,
-      "isinsv;": 8947,
-      "isinv;": 8712,
-      "it;": 8290,
-      "itilde;": 297,
-      "iukcy;": 1110,
-      "iuml": 239,
-      "iuml;": 239,
-      "jcirc;": 309,
-      "jcy;": 1081,
-      "jfr;": [55349, 56615],
-      "jmath;": 567,
-      "jopf;": [55349, 56667],
-      "jscr;": [55349, 56511],
-      "jsercy;": 1112,
-      "jukcy;": 1108,
-      "kappa;": 954,
-      "kappav;": 1008,
-      "kcedil;": 311,
-      "kcy;": 1082,
-      "kfr;": [55349, 56616],
-      "kgreen;": 312,
-      "khcy;": 1093,
-      "kjcy;": 1116,
-      "kopf;": [55349, 56668],
-      "kscr;": [55349, 56512],
-      "lAarr;": 8666,
-      "lArr;": 8656,
-      "lAtail;": 10523,
-      "lBarr;": 10510,
-      "lE;": 8806,
-      "lEg;": 10891,
-      "lHar;": 10594,
-      "lacute;": 314,
-      "laemptyv;": 10676,
-      "lagran;": 8466,
-      "lambda;": 955,
-      "lang;": 10216,
-      "langd;": 10641,
-      "langle;": 10216,
-      "lap;": 10885,
-      "laquo": 171,
-      "laquo;": 171,
-      "larr;": 8592,
-      "larrb;": 8676,
-      "larrbfs;": 10527,
-      "larrfs;": 10525,
-      "larrhk;": 8617,
-      "larrlp;": 8619,
-      "larrpl;": 10553,
-      "larrsim;": 10611,
-      "larrtl;": 8610,
-      "lat;": 10923,
-      "latail;": 10521,
-      "late;": 10925,
-      "lates;": [10925, 65024],
-      "lbarr;": 10508,
-      "lbbrk;": 10098,
-      "lbrace;": 123,
-      "lbrack;": 91,
-      "lbrke;": 10635,
-      "lbrksld;": 10639,
-      "lbrkslu;": 10637,
-      "lcaron;": 318,
-      "lcedil;": 316,
-      "lceil;": 8968,
-      "lcub;": 123,
-      "lcy;": 1083,
-      "ldca;": 10550,
-      "ldquo;": 8220,
-      "ldquor;": 8222,
-      "ldrdhar;": 10599,
-      "ldrushar;": 10571,
-      "ldsh;": 8626,
-      "le;": 8804,
-      "leftarrow;": 8592,
-      "leftarrowtail;": 8610,
-      "leftharpoondown;": 8637,
-      "leftharpoonup;": 8636,
-      "leftleftarrows;": 8647,
-      "leftrightarrow;": 8596,
-      "leftrightarrows;": 8646,
-      "leftrightharpoons;": 8651,
-      "leftrightsquigarrow;": 8621,
-      "leftthreetimes;": 8907,
-      "leg;": 8922,
-      "leq;": 8804,
-      "leqq;": 8806,
-      "leqslant;": 10877,
-      "les;": 10877,
-      "lescc;": 10920,
-      "lesdot;": 10879,
-      "lesdoto;": 10881,
-      "lesdotor;": 10883,
-      "lesg;": [8922, 65024],
-      "lesges;": 10899,
-      "lessapprox;": 10885,
-      "lessdot;": 8918,
-      "lesseqgtr;": 8922,
-      "lesseqqgtr;": 10891,
-      "lessgtr;": 8822,
-      "lesssim;": 8818,
-      "lfisht;": 10620,
-      "lfloor;": 8970,
-      "lfr;": [55349, 56617],
-      "lg;": 8822,
-      "lgE;": 10897,
-      "lhard;": 8637,
-      "lharu;": 8636,
-      "lharul;": 10602,
-      "lhblk;": 9604,
-      "ljcy;": 1113,
-      "ll;": 8810,
-      "llarr;": 8647,
-      "llcorner;": 8990,
-      "llhard;": 10603,
-      "lltri;": 9722,
-      "lmidot;": 320,
-      "lmoust;": 9136,
-      "lmoustache;": 9136,
-      "lnE;": 8808,
-      "lnap;": 10889,
-      "lnapprox;": 10889,
-      "lne;": 10887,
-      "lneq;": 10887,
-      "lneqq;": 8808,
-      "lnsim;": 8934,
-      "loang;": 10220,
-      "loarr;": 8701,
-      "lobrk;": 10214,
-      "longleftarrow;": 10229,
-      "longleftrightarrow;": 10231,
-      "longmapsto;": 10236,
-      "longrightarrow;": 10230,
-      "looparrowleft;": 8619,
-      "looparrowright;": 8620,
-      "lopar;": 10629,
-      "lopf;": [55349, 56669],
-      "loplus;": 10797,
-      "lotimes;": 10804,
-      "lowast;": 8727,
-      "lowbar;": 95,
-      "loz;": 9674,
-      "lozenge;": 9674,
-      "lozf;": 10731,
-      "lpar;": 40,
-      "lparlt;": 10643,
-      "lrarr;": 8646,
-      "lrcorner;": 8991,
-      "lrhar;": 8651,
-      "lrhard;": 10605,
-      "lrm;": 8206,
-      "lrtri;": 8895,
-      "lsaquo;": 8249,
-      "lscr;": [55349, 56513],
-      "lsh;": 8624,
-      "lsim;": 8818,
-      "lsime;": 10893,
-      "lsimg;": 10895,
-      "lsqb;": 91,
-      "lsquo;": 8216,
-      "lsquor;": 8218,
-      "lstrok;": 322,
-      "lt": 60,
-      "lt;": 60,
-      "ltcc;": 10918,
-      "ltcir;": 10873,
-      "ltdot;": 8918,
-      "lthree;": 8907,
-      "ltimes;": 8905,
-      "ltlarr;": 10614,
-      "ltquest;": 10875,
-      "ltrPar;": 10646,
-      "ltri;": 9667,
-      "ltrie;": 8884,
-      "ltrif;": 9666,
-      "lurdshar;": 10570,
-      "luruhar;": 10598,
-      "lvertneqq;": [8808, 65024],
-      "lvnE;": [8808, 65024],
-      "mDDot;": 8762,
-      "macr": 175,
-      "macr;": 175,
-      "male;": 9794,
-      "malt;": 10016,
-      "maltese;": 10016,
-      "map;": 8614,
-      "mapsto;": 8614,
-      "mapstodown;": 8615,
-      "mapstoleft;": 8612,
-      "mapstoup;": 8613,
-      "marker;": 9646,
-      "mcomma;": 10793,
-      "mcy;": 1084,
-      "mdash;": 8212,
-      "measuredangle;": 8737,
-      "mfr;": [55349, 56618],
-      "mho;": 8487,
-      "micro": 181,
-      "micro;": 181,
-      "mid;": 8739,
-      "midast;": 42,
-      "midcir;": 10992,
-      "middot": 183,
-      "middot;": 183,
-      "minus;": 8722,
-      "minusb;": 8863,
-      "minusd;": 8760,
-      "minusdu;": 10794,
-      "mlcp;": 10971,
-      "mldr;": 8230,
-      "mnplus;": 8723,
-      "models;": 8871,
-      "mopf;": [55349, 56670],
-      "mp;": 8723,
-      "mscr;": [55349, 56514],
-      "mstpos;": 8766,
-      "mu;": 956,
-      "multimap;": 8888,
-      "mumap;": 8888,
-      "nGg;": [8921, 824],
-      "nGt;": [8811, 8402],
-      "nGtv;": [8811, 824],
-      "nLeftarrow;": 8653,
-      "nLeftrightarrow;": 8654,
-      "nLl;": [8920, 824],
-      "nLt;": [8810, 8402],
-      "nLtv;": [8810, 824],
-      "nRightarrow;": 8655,
-      "nVDash;": 8879,
-      "nVdash;": 8878,
-      "nabla;": 8711,
-      "nacute;": 324,
-      "nang;": [8736, 8402],
-      "nap;": 8777,
-      "napE;": [10864, 824],
-      "napid;": [8779, 824],
-      "napos;": 329,
-      "napprox;": 8777,
-      "natur;": 9838,
-      "natural;": 9838,
-      "naturals;": 8469,
-      "nbsp": 160,
-      "nbsp;": 160,
-      "nbump;": [8782, 824],
-      "nbumpe;": [8783, 824],
-      "ncap;": 10819,
-      "ncaron;": 328,
-      "ncedil;": 326,
-      "ncong;": 8775,
-      "ncongdot;": [10861, 824],
-      "ncup;": 10818,
-      "ncy;": 1085,
-      "ndash;": 8211,
-      "ne;": 8800,
-      "neArr;": 8663,
-      "nearhk;": 10532,
-      "nearr;": 8599,
-      "nearrow;": 8599,
-      "nedot;": [8784, 824],
-      "nequiv;": 8802,
-      "nesear;": 10536,
-      "nesim;": [8770, 824],
-      "nexist;": 8708,
-      "nexists;": 8708,
-      "nfr;": [55349, 56619],
-      "ngE;": [8807, 824],
-      "nge;": 8817,
-      "ngeq;": 8817,
-      "ngeqq;": [8807, 824],
-      "ngeqslant;": [10878, 824],
-      "nges;": [10878, 824],
-      "ngsim;": 8821,
-      "ngt;": 8815,
-      "ngtr;": 8815,
-      "nhArr;": 8654,
-      "nharr;": 8622,
-      "nhpar;": 10994,
-      "ni;": 8715,
-      "nis;": 8956,
-      "nisd;": 8954,
-      "niv;": 8715,
-      "njcy;": 1114,
-      "nlArr;": 8653,
-      "nlE;": [8806, 824],
-      "nlarr;": 8602,
-      "nldr;": 8229,
-      "nle;": 8816,
-      "nleftarrow;": 8602,
-      "nleftrightarrow;": 8622,
-      "nleq;": 8816,
-      "nleqq;": [8806, 824],
-      "nleqslant;": [10877, 824],
-      "nles;": [10877, 824],
-      "nless;": 8814,
-      "nlsim;": 8820,
-      "nlt;": 8814,
-      "nltri;": 8938,
-      "nltrie;": 8940,
-      "nmid;": 8740,
-      "nopf;": [55349, 56671],
-      "not": 172,
-      "not;": 172,
-      "notin;": 8713,
-      "notinE;": [8953, 824],
-      "notindot;": [8949, 824],
-      "notinva;": 8713,
-      "notinvb;": 8951,
-      "notinvc;": 8950,
-      "notni;": 8716,
-      "notniva;": 8716,
-      "notnivb;": 8958,
-      "notnivc;": 8957,
-      "npar;": 8742,
-      "nparallel;": 8742,
-      "nparsl;": [11005, 8421],
-      "npart;": [8706, 824],
-      "npolint;": 10772,
-      "npr;": 8832,
-      "nprcue;": 8928,
-      "npre;": [10927, 824],
-      "nprec;": 8832,
-      "npreceq;": [10927, 824],
-      "nrArr;": 8655,
-      "nrarr;": 8603,
-      "nrarrc;": [10547, 824],
-      "nrarrw;": [8605, 824],
-      "nrightarrow;": 8603,
-      "nrtri;": 8939,
-      "nrtrie;": 8941,
-      "nsc;": 8833,
-      "nsccue;": 8929,
-      "nsce;": [10928, 824],
-      "nscr;": [55349, 56515],
-      "nshortmid;": 8740,
-      "nshortparallel;": 8742,
-      "nsim;": 8769,
-      "nsime;": 8772,
-      "nsimeq;": 8772,
-      "nsmid;": 8740,
-      "nspar;": 8742,
-      "nsqsube;": 8930,
-      "nsqsupe;": 8931,
-      "nsub;": 8836,
-      "nsubE;": [10949, 824],
-      "nsube;": 8840,
-      "nsubset;": [8834, 8402],
-      "nsubseteq;": 8840,
-      "nsubseteqq;": [10949, 824],
-      "nsucc;": 8833,
-      "nsucceq;": [10928, 824],
-      "nsup;": 8837,
-      "nsupE;": [10950, 824],
-      "nsupe;": 8841,
-      "nsupset;": [8835, 8402],
-      "nsupseteq;": 8841,
-      "nsupseteqq;": [10950, 824],
-      "ntgl;": 8825,
-      "ntilde": 241,
-      "ntilde;": 241,
-      "ntlg;": 8824,
-      "ntriangleleft;": 8938,
-      "ntrianglelefteq;": 8940,
-      "ntriangleright;": 8939,
-      "ntrianglerighteq;": 8941,
-      "nu;": 957,
-      "num;": 35,
-      "numero;": 8470,
-      "numsp;": 8199,
-      "nvDash;": 8877,
-      "nvHarr;": 10500,
-      "nvap;": [8781, 8402],
-      "nvdash;": 8876,
-      "nvge;": [8805, 8402],
-      "nvgt;": [62, 8402],
-      "nvinfin;": 10718,
-      "nvlArr;": 10498,
-      "nvle;": [8804, 8402],
-      "nvlt;": [60, 8402],
-      "nvltrie;": [8884, 8402],
-      "nvrArr;": 10499,
-      "nvrtrie;": [8885, 8402],
-      "nvsim;": [8764, 8402],
-      "nwArr;": 8662,
-      "nwarhk;": 10531,
-      "nwarr;": 8598,
-      "nwarrow;": 8598,
-      "nwnear;": 10535,
-      "oS;": 9416,
-      "oacute": 243,
-      "oacute;": 243,
-      "oast;": 8859,
-      "ocir;": 8858,
-      "ocirc": 244,
-      "ocirc;": 244,
-      "ocy;": 1086,
-      "odash;": 8861,
-      "odblac;": 337,
-      "odiv;": 10808,
-      "odot;": 8857,
-      "odsold;": 10684,
-      "oelig;": 339,
-      "ofcir;": 10687,
-      "ofr;": [55349, 56620],
-      "ogon;": 731,
-      "ograve": 242,
-      "ograve;": 242,
-      "ogt;": 10689,
-      "ohbar;": 10677,
-      "ohm;": 937,
-      "oint;": 8750,
-      "olarr;": 8634,
-      "olcir;": 10686,
-      "olcross;": 10683,
-      "oline;": 8254,
-      "olt;": 10688,
-      "omacr;": 333,
-      "omega;": 969,
-      "omicron;": 959,
-      "omid;": 10678,
-      "ominus;": 8854,
-      "oopf;": [55349, 56672],
-      "opar;": 10679,
-      "operp;": 10681,
-      "oplus;": 8853,
-      "or;": 8744,
-      "orarr;": 8635,
-      "ord;": 10845,
-      "order;": 8500,
-      "orderof;": 8500,
-      "ordf": 170,
-      "ordf;": 170,
-      "ordm": 186,
-      "ordm;": 186,
-      "origof;": 8886,
-      "oror;": 10838,
-      "orslope;": 10839,
-      "orv;": 10843,
-      "oscr;": 8500,
-      "oslash": 248,
-      "oslash;": 248,
-      "osol;": 8856,
-      "otilde": 245,
-      "otilde;": 245,
-      "otimes;": 8855,
-      "otimesas;": 10806,
-      "ouml": 246,
-      "ouml;": 246,
-      "ovbar;": 9021,
-      "par;": 8741,
-      "para": 182,
-      "para;": 182,
-      "parallel;": 8741,
-      "parsim;": 10995,
-      "parsl;": 11005,
-      "part;": 8706,
-      "pcy;": 1087,
-      "percnt;": 37,
-      "period;": 46,
-      "permil;": 8240,
-      "perp;": 8869,
-      "pertenk;": 8241,
-      "pfr;": [55349, 56621],
-      "phi;": 966,
-      "phiv;": 981,
-      "phmmat;": 8499,
-      "phone;": 9742,
-      "pi;": 960,
-      "pitchfork;": 8916,
-      "piv;": 982,
-      "planck;": 8463,
-      "planckh;": 8462,
-      "plankv;": 8463,
-      "plus;": 43,
-      "plusacir;": 10787,
-      "plusb;": 8862,
-      "pluscir;": 10786,
-      "plusdo;": 8724,
-      "plusdu;": 10789,
-      "pluse;": 10866,
-      "plusmn": 177,
-      "plusmn;": 177,
-      "plussim;": 10790,
-      "plustwo;": 10791,
-      "pm;": 177,
-      "pointint;": 10773,
-      "popf;": [55349, 56673],
-      "pound": 163,
-      "pound;": 163,
-      "pr;": 8826,
-      "prE;": 10931,
-      "prap;": 10935,
-      "prcue;": 8828,
-      "pre;": 10927,
-      "prec;": 8826,
-      "precapprox;": 10935,
-      "preccurlyeq;": 8828,
-      "preceq;": 10927,
-      "precnapprox;": 10937,
-      "precneqq;": 10933,
-      "precnsim;": 8936,
-      "precsim;": 8830,
-      "prime;": 8242,
-      "primes;": 8473,
-      "prnE;": 10933,
-      "prnap;": 10937,
-      "prnsim;": 8936,
-      "prod;": 8719,
-      "profalar;": 9006,
-      "profline;": 8978,
-      "profsurf;": 8979,
-      "prop;": 8733,
-      "propto;": 8733,
-      "prsim;": 8830,
-      "prurel;": 8880,
-      "pscr;": [55349, 56517],
-      "psi;": 968,
-      "puncsp;": 8200,
-      "qfr;": [55349, 56622],
-      "qint;": 10764,
-      "qopf;": [55349, 56674],
-      "qprime;": 8279,
-      "qscr;": [55349, 56518],
-      "quaternions;": 8461,
-      "quatint;": 10774,
-      "quest;": 63,
-      "questeq;": 8799,
-      "quot": 34,
-      "quot;": 34,
-      "rAarr;": 8667,
-      "rArr;": 8658,
-      "rAtail;": 10524,
-      "rBarr;": 10511,
-      "rHar;": 10596,
-      "race;": [8765, 817],
-      "racute;": 341,
-      "radic;": 8730,
-      "raemptyv;": 10675,
-      "rang;": 10217,
-      "rangd;": 10642,
-      "range;": 10661,
-      "rangle;": 10217,
-      "raquo": 187,
-      "raquo;": 187,
-      "rarr;": 8594,
-      "rarrap;": 10613,
-      "rarrb;": 8677,
-      "rarrbfs;": 10528,
-      "rarrc;": 10547,
-      "rarrfs;": 10526,
-      "rarrhk;": 8618,
-      "rarrlp;": 8620,
-      "rarrpl;": 10565,
-      "rarrsim;": 10612,
-      "rarrtl;": 8611,
-      "rarrw;": 8605,
-      "ratail;": 10522,
-      "ratio;": 8758,
-      "rationals;": 8474,
-      "rbarr;": 10509,
-      "rbbrk;": 10099,
-      "rbrace;": 125,
-      "rbrack;": 93,
-      "rbrke;": 10636,
-      "rbrksld;": 10638,
-      "rbrkslu;": 10640,
-      "rcaron;": 345,
-      "rcedil;": 343,
-      "rceil;": 8969,
-      "rcub;": 125,
-      "rcy;": 1088,
-      "rdca;": 10551,
-      "rdldhar;": 10601,
-      "rdquo;": 8221,
-      "rdquor;": 8221,
-      "rdsh;": 8627,
-      "real;": 8476,
-      "realine;": 8475,
-      "realpart;": 8476,
-      "reals;": 8477,
-      "rect;": 9645,
-      "reg": 174,
-      "reg;": 174,
-      "rfisht;": 10621,
-      "rfloor;": 8971,
-      "rfr;": [55349, 56623],
-      "rhard;": 8641,
-      "rharu;": 8640,
-      "rharul;": 10604,
-      "rho;": 961,
-      "rhov;": 1009,
-      "rightarrow;": 8594,
-      "rightarrowtail;": 8611,
-      "rightharpoondown;": 8641,
-      "rightharpoonup;": 8640,
-      "rightleftarrows;": 8644,
-      "rightleftharpoons;": 8652,
-      "rightrightarrows;": 8649,
-      "rightsquigarrow;": 8605,
-      "rightthreetimes;": 8908,
-      "ring;": 730,
-      "risingdotseq;": 8787,
-      "rlarr;": 8644,
-      "rlhar;": 8652,
-      "rlm;": 8207,
-      "rmoust;": 9137,
-      "rmoustache;": 9137,
-      "rnmid;": 10990,
-      "roang;": 10221,
-      "roarr;": 8702,
-      "robrk;": 10215,
-      "ropar;": 10630,
-      "ropf;": [55349, 56675],
-      "roplus;": 10798,
-      "rotimes;": 10805,
-      "rpar;": 41,
-      "rpargt;": 10644,
-      "rppolint;": 10770,
-      "rrarr;": 8649,
-      "rsaquo;": 8250,
-      "rscr;": [55349, 56519],
-      "rsh;": 8625,
-      "rsqb;": 93,
-      "rsquo;": 8217,
-      "rsquor;": 8217,
-      "rthree;": 8908,
-      "rtimes;": 8906,
-      "rtri;": 9657,
-      "rtrie;": 8885,
-      "rtrif;": 9656,
-      "rtriltri;": 10702,
-      "ruluhar;": 10600,
-      "rx;": 8478,
-      "sacute;": 347,
-      "sbquo;": 8218,
-      "sc;": 8827,
-      "scE;": 10932,
-      "scap;": 10936,
-      "scaron;": 353,
-      "sccue;": 8829,
-      "sce;": 10928,
-      "scedil;": 351,
-      "scirc;": 349,
-      "scnE;": 10934,
-      "scnap;": 10938,
-      "scnsim;": 8937,
-      "scpolint;": 10771,
-      "scsim;": 8831,
-      "scy;": 1089,
-      "sdot;": 8901,
-      "sdotb;": 8865,
-      "sdote;": 10854,
-      "seArr;": 8664,
-      "searhk;": 10533,
-      "searr;": 8600,
-      "searrow;": 8600,
-      "sect": 167,
-      "sect;": 167,
-      "semi;": 59,
-      "seswar;": 10537,
-      "setminus;": 8726,
-      "setmn;": 8726,
-      "sext;": 10038,
-      "sfr;": [55349, 56624],
-      "sfrown;": 8994,
-      "sharp;": 9839,
-      "shchcy;": 1097,
-      "shcy;": 1096,
-      "shortmid;": 8739,
-      "shortparallel;": 8741,
-      "shy": 173,
-      "shy;": 173,
-      "sigma;": 963,
-      "sigmaf;": 962,
-      "sigmav;": 962,
-      "sim;": 8764,
-      "simdot;": 10858,
-      "sime;": 8771,
-      "simeq;": 8771,
-      "simg;": 10910,
-      "simgE;": 10912,
-      "siml;": 10909,
-      "simlE;": 10911,
-      "simne;": 8774,
-      "simplus;": 10788,
-      "simrarr;": 10610,
-      "slarr;": 8592,
-      "smallsetminus;": 8726,
-      "smashp;": 10803,
-      "smeparsl;": 10724,
-      "smid;": 8739,
-      "smile;": 8995,
-      "smt;": 10922,
-      "smte;": 10924,
-      "smtes;": [10924, 65024],
-      "softcy;": 1100,
-      "sol;": 47,
-      "solb;": 10692,
-      "solbar;": 9023,
-      "sopf;": [55349, 56676],
-      "spades;": 9824,
-      "spadesuit;": 9824,
-      "spar;": 8741,
-      "sqcap;": 8851,
-      "sqcaps;": [8851, 65024],
-      "sqcup;": 8852,
-      "sqcups;": [8852, 65024],
-      "sqsub;": 8847,
-      "sqsube;": 8849,
-      "sqsubset;": 8847,
-      "sqsubseteq;": 8849,
-      "sqsup;": 8848,
-      "sqsupe;": 8850,
-      "sqsupset;": 8848,
-      "sqsupseteq;": 8850,
-      "squ;": 9633,
-      "square;": 9633,
-      "squarf;": 9642,
-      "squf;": 9642,
-      "srarr;": 8594,
-      "sscr;": [55349, 56520],
-      "ssetmn;": 8726,
-      "ssmile;": 8995,
-      "sstarf;": 8902,
-      "star;": 9734,
-      "starf;": 9733,
-      "straightepsilon;": 1013,
-      "straightphi;": 981,
-      "strns;": 175,
-      "sub;": 8834,
-      "subE;": 10949,
-      "subdot;": 10941,
-      "sube;": 8838,
-      "subedot;": 10947,
-      "submult;": 10945,
-      "subnE;": 10955,
-      "subne;": 8842,
-      "subplus;": 10943,
-      "subrarr;": 10617,
-      "subset;": 8834,
-      "subseteq;": 8838,
-      "subseteqq;": 10949,
-      "subsetneq;": 8842,
-      "subsetneqq;": 10955,
-      "subsim;": 10951,
-      "subsub;": 10965,
-      "subsup;": 10963,
-      "succ;": 8827,
-      "succapprox;": 10936,
-      "succcurlyeq;": 8829,
-      "succeq;": 10928,
-      "succnapprox;": 10938,
-      "succneqq;": 10934,
-      "succnsim;": 8937,
-      "succsim;": 8831,
-      "sum;": 8721,
-      "sung;": 9834,
-      "sup1": 185,
-      "sup1;": 185,
-      "sup2": 178,
-      "sup2;": 178,
-      "sup3": 179,
-      "sup3;": 179,
-      "sup;": 8835,
-      "supE;": 10950,
-      "supdot;": 10942,
-      "supdsub;": 10968,
-      "supe;": 8839,
-      "supedot;": 10948,
-      "suphsol;": 10185,
-      "suphsub;": 10967,
-      "suplarr;": 10619,
-      "supmult;": 10946,
-      "supnE;": 10956,
-      "supne;": 8843,
-      "supplus;": 10944,
-      "supset;": 8835,
-      "supseteq;": 8839,
-      "supseteqq;": 10950,
-      "supsetneq;": 8843,
-      "supsetneqq;": 10956,
-      "supsim;": 10952,
-      "supsub;": 10964,
-      "supsup;": 10966,
-      "swArr;": 8665,
-      "swarhk;": 10534,
-      "swarr;": 8601,
-      "swarrow;": 8601,
-      "swnwar;": 10538,
-      "szlig": 223,
-      "szlig;": 223,
-      "target;": 8982,
-      "tau;": 964,
-      "tbrk;": 9140,
-      "tcaron;": 357,
-      "tcedil;": 355,
-      "tcy;": 1090,
-      "tdot;": 8411,
-      "telrec;": 8981,
-      "tfr;": [55349, 56625],
-      "there4;": 8756,
-      "therefore;": 8756,
-      "theta;": 952,
-      "thetasym;": 977,
-      "thetav;": 977,
-      "thickapprox;": 8776,
-      "thicksim;": 8764,
-      "thinsp;": 8201,
-      "thkap;": 8776,
-      "thksim;": 8764,
-      "thorn": 254,
-      "thorn;": 254,
-      "tilde;": 732,
-      "times": 215,
-      "times;": 215,
-      "timesb;": 8864,
-      "timesbar;": 10801,
-      "timesd;": 10800,
-      "tint;": 8749,
-      "toea;": 10536,
-      "top;": 8868,
-      "topbot;": 9014,
-      "topcir;": 10993,
-      "topf;": [55349, 56677],
-      "topfork;": 10970,
-      "tosa;": 10537,
-      "tprime;": 8244,
-      "trade;": 8482,
-      "triangle;": 9653,
-      "triangledown;": 9663,
-      "triangleleft;": 9667,
-      "trianglelefteq;": 8884,
-      "triangleq;": 8796,
-      "triangleright;": 9657,
-      "trianglerighteq;": 8885,
-      "tridot;": 9708,
-      "trie;": 8796,
-      "triminus;": 10810,
-      "triplus;": 10809,
-      "trisb;": 10701,
-      "tritime;": 10811,
-      "trpezium;": 9186,
-      "tscr;": [55349, 56521],
-      "tscy;": 1094,
-      "tshcy;": 1115,
-      "tstrok;": 359,
-      "twixt;": 8812,
-      "twoheadleftarrow;": 8606,
-      "twoheadrightarrow;": 8608,
-      "uArr;": 8657,
-      "uHar;": 10595,
-      "uacute": 250,
-      "uacute;": 250,
-      "uarr;": 8593,
-      "ubrcy;": 1118,
-      "ubreve;": 365,
-      "ucirc": 251,
-      "ucirc;": 251,
-      "ucy;": 1091,
-      "udarr;": 8645,
-      "udblac;": 369,
-      "udhar;": 10606,
-      "ufisht;": 10622,
-      "ufr;": [55349, 56626],
-      "ugrave": 249,
-      "ugrave;": 249,
-      "uharl;": 8639,
-      "uharr;": 8638,
-      "uhblk;": 9600,
-      "ulcorn;": 8988,
-      "ulcorner;": 8988,
-      "ulcrop;": 8975,
-      "ultri;": 9720,
-      "umacr;": 363,
-      "uml": 168,
-      "uml;": 168,
-      "uogon;": 371,
-      "uopf;": [55349, 56678],
-      "uparrow;": 8593,
-      "updownarrow;": 8597,
-      "upharpoonleft;": 8639,
-      "upharpoonright;": 8638,
-      "uplus;": 8846,
-      "upsi;": 965,
-      "upsih;": 978,
-      "upsilon;": 965,
-      "upuparrows;": 8648,
-      "urcorn;": 8989,
-      "urcorner;": 8989,
-      "urcrop;": 8974,
-      "uring;": 367,
-      "urtri;": 9721,
-      "uscr;": [55349, 56522],
-      "utdot;": 8944,
-      "utilde;": 361,
-      "utri;": 9653,
-      "utrif;": 9652,
-      "uuarr;": 8648,
-      "uuml": 252,
-      "uuml;": 252,
-      "uwangle;": 10663,
-      "vArr;": 8661,
-      "vBar;": 10984,
-      "vBarv;": 10985,
-      "vDash;": 8872,
-      "vangrt;": 10652,
-      "varepsilon;": 1013,
-      "varkappa;": 1008,
-      "varnothing;": 8709,
-      "varphi;": 981,
-      "varpi;": 982,
-      "varpropto;": 8733,
-      "varr;": 8597,
-      "varrho;": 1009,
-      "varsigma;": 962,
-      "varsubsetneq;": [8842, 65024],
-      "varsubsetneqq;": [10955, 65024],
-      "varsupsetneq;": [8843, 65024],
-      "varsupsetneqq;": [10956, 65024],
-      "vartheta;": 977,
-      "vartriangleleft;": 8882,
-      "vartriangleright;": 8883,
-      "vcy;": 1074,
-      "vdash;": 8866,
-      "vee;": 8744,
-      "veebar;": 8891,
-      "veeeq;": 8794,
-      "vellip;": 8942,
-      "verbar;": 124,
-      "vert;": 124,
-      "vfr;": [55349, 56627],
-      "vltri;": 8882,
-      "vnsub;": [8834, 8402],
-      "vnsup;": [8835, 8402],
-      "vopf;": [55349, 56679],
-      "vprop;": 8733,
-      "vrtri;": 8883,
-      "vscr;": [55349, 56523],
-      "vsubnE;": [10955, 65024],
-      "vsubne;": [8842, 65024],
-      "vsupnE;": [10956, 65024],
-      "vsupne;": [8843, 65024],
-      "vzigzag;": 10650,
-      "wcirc;": 373,
-      "wedbar;": 10847,
-      "wedge;": 8743,
-      "wedgeq;": 8793,
-      "weierp;": 8472,
-      "wfr;": [55349, 56628],
-      "wopf;": [55349, 56680],
-      "wp;": 8472,
-      "wr;": 8768,
-      "wreath;": 8768,
-      "wscr;": [55349, 56524],
-      "xcap;": 8898,
-      "xcirc;": 9711,
-      "xcup;": 8899,
-      "xdtri;": 9661,
-      "xfr;": [55349, 56629],
-      "xhArr;": 10234,
-      "xharr;": 10231,
-      "xi;": 958,
-      "xlArr;": 10232,
-      "xlarr;": 10229,
-      "xmap;": 10236,
-      "xnis;": 8955,
-      "xodot;": 10752,
-      "xopf;": [55349, 56681],
-      "xoplus;": 10753,
-      "xotime;": 10754,
-      "xrArr;": 10233,
-      "xrarr;": 10230,
-      "xscr;": [55349, 56525],
-      "xsqcup;": 10758,
-      "xuplus;": 10756,
-      "xutri;": 9651,
-      "xvee;": 8897,
-      "xwedge;": 8896,
-      "yacute": 253,
-      "yacute;": 253,
-      "yacy;": 1103,
-      "ycirc;": 375,
-      "ycy;": 1099,
-      "yen": 165,
-      "yen;": 165,
-      "yfr;": [55349, 56630],
-      "yicy;": 1111,
-      "yopf;": [55349, 56682],
-      "yscr;": [55349, 56526],
-      "yucy;": 1102,
-      "yuml": 255,
-      "yuml;": 255,
-      "zacute;": 378,
-      "zcaron;": 382,
-      "zcy;": 1079,
-      "zdot;": 380,
-      "zeetrf;": 8488,
-      "zeta;": 950,
-      "zfr;": [55349, 56631],
-      "zhcy;": 1078,
-      "zigrarr;": 8669,
-      "zopf;": [55349, 56683],
-      "zscr;": [55349, 56527],
-      "zwj;": 8205,
-      "zwnj;": 8204
-    };
-    var NAMEDCHARREF = /(A(?:Elig;?|MP;?|acute;?|breve;|c(?:irc;?|y;)|fr;|grave;?|lpha;|macr;|nd;|o(?:gon;|pf;)|pplyFunction;|ring;?|s(?:cr;|sign;)|tilde;?|uml;?)|B(?:a(?:ckslash;|r(?:v;|wed;))|cy;|e(?:cause;|rnoullis;|ta;)|fr;|opf;|reve;|scr;|umpeq;)|C(?:Hcy;|OPY;?|a(?:cute;|p(?:;|italDifferentialD;)|yleys;)|c(?:aron;|edil;?|irc;|onint;)|dot;|e(?:dilla;|nterDot;)|fr;|hi;|ircle(?:Dot;|Minus;|Plus;|Times;)|lo(?:ckwiseContourIntegral;|seCurly(?:DoubleQuote;|Quote;))|o(?:lon(?:;|e;)|n(?:gruent;|int;|tourIntegral;)|p(?:f;|roduct;)|unterClockwiseContourIntegral;)|ross;|scr;|up(?:;|Cap;))|D(?:D(?:;|otrahd;)|Jcy;|Scy;|Zcy;|a(?:gger;|rr;|shv;)|c(?:aron;|y;)|el(?:;|ta;)|fr;|i(?:a(?:critical(?:Acute;|Do(?:t;|ubleAcute;)|Grave;|Tilde;)|mond;)|fferentialD;)|o(?:pf;|t(?:;|Dot;|Equal;)|uble(?:ContourIntegral;|Do(?:t;|wnArrow;)|L(?:eft(?:Arrow;|RightArrow;|Tee;)|ong(?:Left(?:Arrow;|RightArrow;)|RightArrow;))|Right(?:Arrow;|Tee;)|Up(?:Arrow;|DownArrow;)|VerticalBar;)|wn(?:Arrow(?:;|Bar;|UpArrow;)|Breve;|Left(?:RightVector;|TeeVector;|Vector(?:;|Bar;))|Right(?:TeeVector;|Vector(?:;|Bar;))|Tee(?:;|Arrow;)|arrow;))|s(?:cr;|trok;))|E(?:NG;|TH;?|acute;?|c(?:aron;|irc;?|y;)|dot;|fr;|grave;?|lement;|m(?:acr;|pty(?:SmallSquare;|VerySmallSquare;))|o(?:gon;|pf;)|psilon;|qu(?:al(?:;|Tilde;)|ilibrium;)|s(?:cr;|im;)|ta;|uml;?|x(?:ists;|ponentialE;))|F(?:cy;|fr;|illed(?:SmallSquare;|VerySmallSquare;)|o(?:pf;|rAll;|uriertrf;)|scr;)|G(?:Jcy;|T;?|amma(?:;|d;)|breve;|c(?:edil;|irc;|y;)|dot;|fr;|g;|opf;|reater(?:Equal(?:;|Less;)|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|scr;|t;)|H(?:ARDcy;|a(?:cek;|t;)|circ;|fr;|ilbertSpace;|o(?:pf;|rizontalLine;)|s(?:cr;|trok;)|ump(?:DownHump;|Equal;))|I(?:Ecy;|Jlig;|Ocy;|acute;?|c(?:irc;?|y;)|dot;|fr;|grave;?|m(?:;|a(?:cr;|ginaryI;)|plies;)|n(?:t(?:;|e(?:gral;|rsection;))|visible(?:Comma;|Times;))|o(?:gon;|pf;|ta;)|scr;|tilde;|u(?:kcy;|ml;?))|J(?:c(?:irc;|y;)|fr;|opf;|s(?:cr;|ercy;)|ukcy;)|K(?:Hcy;|Jcy;|appa;|c(?:edil;|y;)|fr;|opf;|scr;)|L(?:Jcy;|T;?|a(?:cute;|mbda;|ng;|placetrf;|rr;)|c(?:aron;|edil;|y;)|e(?:ft(?:A(?:ngleBracket;|rrow(?:;|Bar;|RightArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|Right(?:Arrow;|Vector;)|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;|rightarrow;)|ss(?:EqualGreater;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;))|fr;|l(?:;|eftarrow;)|midot;|o(?:ng(?:Left(?:Arrow;|RightArrow;)|RightArrow;|left(?:arrow;|rightarrow;)|rightarrow;)|pf;|wer(?:LeftArrow;|RightArrow;))|s(?:cr;|h;|trok;)|t;)|M(?:ap;|cy;|e(?:diumSpace;|llintrf;)|fr;|inusPlus;|opf;|scr;|u;)|N(?:Jcy;|acute;|c(?:aron;|edil;|y;)|e(?:gative(?:MediumSpace;|Thi(?:ckSpace;|nSpace;)|VeryThinSpace;)|sted(?:GreaterGreater;|LessLess;)|wLine;)|fr;|o(?:Break;|nBreakingSpace;|pf;|t(?:;|C(?:ongruent;|upCap;)|DoubleVerticalBar;|E(?:lement;|qual(?:;|Tilde;)|xists;)|Greater(?:;|Equal;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|Hump(?:DownHump;|Equal;)|Le(?:ftTriangle(?:;|Bar;|Equal;)|ss(?:;|Equal;|Greater;|Less;|SlantEqual;|Tilde;))|Nested(?:GreaterGreater;|LessLess;)|Precedes(?:;|Equal;|SlantEqual;)|R(?:everseElement;|ightTriangle(?:;|Bar;|Equal;))|S(?:quareSu(?:bset(?:;|Equal;)|perset(?:;|Equal;))|u(?:bset(?:;|Equal;)|cceeds(?:;|Equal;|SlantEqual;|Tilde;)|perset(?:;|Equal;)))|Tilde(?:;|Equal;|FullEqual;|Tilde;)|VerticalBar;))|scr;|tilde;?|u;)|O(?:Elig;|acute;?|c(?:irc;?|y;)|dblac;|fr;|grave;?|m(?:acr;|ega;|icron;)|opf;|penCurly(?:DoubleQuote;|Quote;)|r;|s(?:cr;|lash;?)|ti(?:lde;?|mes;)|uml;?|ver(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;))|P(?:artialD;|cy;|fr;|hi;|i;|lusMinus;|o(?:incareplane;|pf;)|r(?:;|ecedes(?:;|Equal;|SlantEqual;|Tilde;)|ime;|o(?:duct;|portion(?:;|al;)))|s(?:cr;|i;))|Q(?:UOT;?|fr;|opf;|scr;)|R(?:Barr;|EG;?|a(?:cute;|ng;|rr(?:;|tl;))|c(?:aron;|edil;|y;)|e(?:;|verse(?:E(?:lement;|quilibrium;)|UpEquilibrium;))|fr;|ho;|ight(?:A(?:ngleBracket;|rrow(?:;|Bar;|LeftArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;)|o(?:pf;|undImplies;)|rightarrow;|s(?:cr;|h;)|uleDelayed;)|S(?:H(?:CHcy;|cy;)|OFTcy;|acute;|c(?:;|aron;|edil;|irc;|y;)|fr;|hort(?:DownArrow;|LeftArrow;|RightArrow;|UpArrow;)|igma;|mallCircle;|opf;|q(?:rt;|uare(?:;|Intersection;|Su(?:bset(?:;|Equal;)|perset(?:;|Equal;))|Union;))|scr;|tar;|u(?:b(?:;|set(?:;|Equal;))|c(?:ceeds(?:;|Equal;|SlantEqual;|Tilde;)|hThat;)|m;|p(?:;|erset(?:;|Equal;)|set;)))|T(?:HORN;?|RADE;|S(?:Hcy;|cy;)|a(?:b;|u;)|c(?:aron;|edil;|y;)|fr;|h(?:e(?:refore;|ta;)|i(?:ckSpace;|nSpace;))|ilde(?:;|Equal;|FullEqual;|Tilde;)|opf;|ripleDot;|s(?:cr;|trok;))|U(?:a(?:cute;?|rr(?:;|ocir;))|br(?:cy;|eve;)|c(?:irc;?|y;)|dblac;|fr;|grave;?|macr;|n(?:der(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;)|ion(?:;|Plus;))|o(?:gon;|pf;)|p(?:Arrow(?:;|Bar;|DownArrow;)|DownArrow;|Equilibrium;|Tee(?:;|Arrow;)|arrow;|downarrow;|per(?:LeftArrow;|RightArrow;)|si(?:;|lon;))|ring;|scr;|tilde;|uml;?)|V(?:Dash;|bar;|cy;|dash(?:;|l;)|e(?:e;|r(?:bar;|t(?:;|ical(?:Bar;|Line;|Separator;|Tilde;))|yThinSpace;))|fr;|opf;|scr;|vdash;)|W(?:circ;|edge;|fr;|opf;|scr;)|X(?:fr;|i;|opf;|scr;)|Y(?:Acy;|Icy;|Ucy;|acute;?|c(?:irc;|y;)|fr;|opf;|scr;|uml;)|Z(?:Hcy;|acute;|c(?:aron;|y;)|dot;|e(?:roWidthSpace;|ta;)|fr;|opf;|scr;)|a(?:acute;?|breve;|c(?:;|E;|d;|irc;?|ute;?|y;)|elig;?|f(?:;|r;)|grave;?|l(?:e(?:fsym;|ph;)|pha;)|m(?:a(?:cr;|lg;)|p;?)|n(?:d(?:;|and;|d;|slope;|v;)|g(?:;|e;|le;|msd(?:;|a(?:a;|b;|c;|d;|e;|f;|g;|h;))|rt(?:;|vb(?:;|d;))|s(?:ph;|t;)|zarr;))|o(?:gon;|pf;)|p(?:;|E;|acir;|e;|id;|os;|prox(?:;|eq;))|ring;?|s(?:cr;|t;|ymp(?:;|eq;))|tilde;?|uml;?|w(?:conint;|int;))|b(?:Not;|a(?:ck(?:cong;|epsilon;|prime;|sim(?:;|eq;))|r(?:vee;|wed(?:;|ge;)))|brk(?:;|tbrk;)|c(?:ong;|y;)|dquo;|e(?:caus(?:;|e;)|mptyv;|psi;|rnou;|t(?:a;|h;|ween;))|fr;|ig(?:c(?:ap;|irc;|up;)|o(?:dot;|plus;|times;)|s(?:qcup;|tar;)|triangle(?:down;|up;)|uplus;|vee;|wedge;)|karow;|l(?:a(?:ck(?:lozenge;|square;|triangle(?:;|down;|left;|right;))|nk;)|k(?:1(?:2;|4;)|34;)|ock;)|n(?:e(?:;|quiv;)|ot;)|o(?:pf;|t(?:;|tom;)|wtie;|x(?:D(?:L;|R;|l;|r;)|H(?:;|D;|U;|d;|u;)|U(?:L;|R;|l;|r;)|V(?:;|H;|L;|R;|h;|l;|r;)|box;|d(?:L;|R;|l;|r;)|h(?:;|D;|U;|d;|u;)|minus;|plus;|times;|u(?:L;|R;|l;|r;)|v(?:;|H;|L;|R;|h;|l;|r;)))|prime;|r(?:eve;|vbar;?)|s(?:cr;|emi;|im(?:;|e;)|ol(?:;|b;|hsub;))|u(?:ll(?:;|et;)|mp(?:;|E;|e(?:;|q;))))|c(?:a(?:cute;|p(?:;|and;|brcup;|c(?:ap;|up;)|dot;|s;)|r(?:et;|on;))|c(?:a(?:ps;|ron;)|edil;?|irc;|ups(?:;|sm;))|dot;|e(?:dil;?|mptyv;|nt(?:;|erdot;|))|fr;|h(?:cy;|eck(?:;|mark;)|i;)|ir(?:;|E;|c(?:;|eq;|le(?:arrow(?:left;|right;)|d(?:R;|S;|ast;|circ;|dash;)))|e;|fnint;|mid;|scir;)|lubs(?:;|uit;)|o(?:lon(?:;|e(?:;|q;))|m(?:ma(?:;|t;)|p(?:;|fn;|le(?:ment;|xes;)))|n(?:g(?:;|dot;)|int;)|p(?:f;|rod;|y(?:;|sr;|)))|r(?:arr;|oss;)|s(?:cr;|u(?:b(?:;|e;)|p(?:;|e;)))|tdot;|u(?:darr(?:l;|r;)|e(?:pr;|sc;)|larr(?:;|p;)|p(?:;|brcap;|c(?:ap;|up;)|dot;|or;|s;)|r(?:arr(?:;|m;)|ly(?:eq(?:prec;|succ;)|vee;|wedge;)|ren;?|vearrow(?:left;|right;))|vee;|wed;)|w(?:conint;|int;)|ylcty;)|d(?:Arr;|Har;|a(?:gger;|leth;|rr;|sh(?:;|v;))|b(?:karow;|lac;)|c(?:aron;|y;)|d(?:;|a(?:gger;|rr;)|otseq;)|e(?:g;?|lta;|mptyv;)|f(?:isht;|r;)|har(?:l;|r;)|i(?:am(?:;|ond(?:;|suit;)|s;)|e;|gamma;|sin;|v(?:;|ide(?:;|ontimes;|)|onx;))|jcy;|lc(?:orn;|rop;)|o(?:llar;|pf;|t(?:;|eq(?:;|dot;)|minus;|plus;|square;)|ublebarwedge;|wn(?:arrow;|downarrows;|harpoon(?:left;|right;)))|r(?:bkarow;|c(?:orn;|rop;))|s(?:c(?:r;|y;)|ol;|trok;)|t(?:dot;|ri(?:;|f;))|u(?:arr;|har;)|wangle;|z(?:cy;|igrarr;))|e(?:D(?:Dot;|ot;)|a(?:cute;?|ster;)|c(?:aron;|ir(?:;|c;?)|olon;|y;)|dot;|e;|f(?:Dot;|r;)|g(?:;|rave;?|s(?:;|dot;))|l(?:;|inters;|l;|s(?:;|dot;))|m(?:acr;|pty(?:;|set;|v;)|sp(?:1(?:3;|4;)|;))|n(?:g;|sp;)|o(?:gon;|pf;)|p(?:ar(?:;|sl;)|lus;|si(?:;|lon;|v;))|q(?:c(?:irc;|olon;)|s(?:im;|lant(?:gtr;|less;))|u(?:als;|est;|iv(?:;|DD;))|vparsl;)|r(?:Dot;|arr;)|s(?:cr;|dot;|im;)|t(?:a;|h;?)|u(?:ml;?|ro;)|x(?:cl;|ist;|p(?:ectation;|onentiale;)))|f(?:allingdotseq;|cy;|emale;|f(?:ilig;|l(?:ig;|lig;)|r;)|ilig;|jlig;|l(?:at;|lig;|tns;)|nof;|o(?:pf;|r(?:all;|k(?:;|v;)))|partint;|r(?:a(?:c(?:1(?:2;?|3;|4;?|5;|6;|8;)|2(?:3;|5;)|3(?:4;?|5;|8;)|45;|5(?:6;|8;)|78;)|sl;)|own;)|scr;)|g(?:E(?:;|l;)|a(?:cute;|mma(?:;|d;)|p;)|breve;|c(?:irc;|y;)|dot;|e(?:;|l;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|l;))|l(?:;|es;)))|fr;|g(?:;|g;)|imel;|jcy;|l(?:;|E;|a;|j;)|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|opf;|rave;|s(?:cr;|im(?:;|e;|l;))|t(?:;|c(?:c;|ir;)|dot;|lPar;|quest;|r(?:a(?:pprox;|rr;)|dot;|eq(?:less;|qless;)|less;|sim;)|)|v(?:ertneqq;|nE;))|h(?:Arr;|a(?:irsp;|lf;|milt;|r(?:dcy;|r(?:;|cir;|w;)))|bar;|circ;|e(?:arts(?:;|uit;)|llip;|rcon;)|fr;|ks(?:earow;|warow;)|o(?:arr;|mtht;|ok(?:leftarrow;|rightarrow;)|pf;|rbar;)|s(?:cr;|lash;|trok;)|y(?:bull;|phen;))|i(?:acute;?|c(?:;|irc;?|y;)|e(?:cy;|xcl;?)|f(?:f;|r;)|grave;?|i(?:;|i(?:int;|nt;)|nfin;|ota;)|jlig;|m(?:a(?:cr;|g(?:e;|line;|part;)|th;)|of;|ped;)|n(?:;|care;|fin(?:;|tie;)|odot;|t(?:;|cal;|e(?:gers;|rcal;)|larhk;|prod;))|o(?:cy;|gon;|pf;|ta;)|prod;|quest;?|s(?:cr;|in(?:;|E;|dot;|s(?:;|v;)|v;))|t(?:;|ilde;)|u(?:kcy;|ml;?))|j(?:c(?:irc;|y;)|fr;|math;|opf;|s(?:cr;|ercy;)|ukcy;)|k(?:appa(?:;|v;)|c(?:edil;|y;)|fr;|green;|hcy;|jcy;|opf;|scr;)|l(?:A(?:arr;|rr;|tail;)|Barr;|E(?:;|g;)|Har;|a(?:cute;|emptyv;|gran;|mbda;|ng(?:;|d;|le;)|p;|quo;?|rr(?:;|b(?:;|fs;)|fs;|hk;|lp;|pl;|sim;|tl;)|t(?:;|ail;|e(?:;|s;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|quo(?:;|r;)|r(?:dhar;|ushar;)|sh;)|e(?:;|ft(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|leftarrows;|right(?:arrow(?:;|s;)|harpoons;|squigarrow;)|threetimes;)|g;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|r;))|g(?:;|es;)|s(?:approx;|dot;|eq(?:gtr;|qgtr;)|gtr;|sim;)))|f(?:isht;|loor;|r;)|g(?:;|E;)|h(?:ar(?:d;|u(?:;|l;))|blk;)|jcy;|l(?:;|arr;|corner;|hard;|tri;)|m(?:idot;|oust(?:;|ache;))|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|o(?:a(?:ng;|rr;)|brk;|ng(?:left(?:arrow;|rightarrow;)|mapsto;|rightarrow;)|oparrow(?:left;|right;)|p(?:ar;|f;|lus;)|times;|w(?:ast;|bar;)|z(?:;|enge;|f;))|par(?:;|lt;)|r(?:arr;|corner;|har(?:;|d;)|m;|tri;)|s(?:aquo;|cr;|h;|im(?:;|e;|g;)|q(?:b;|uo(?:;|r;))|trok;)|t(?:;|c(?:c;|ir;)|dot;|hree;|imes;|larr;|quest;|r(?:Par;|i(?:;|e;|f;))|)|ur(?:dshar;|uhar;)|v(?:ertneqq;|nE;))|m(?:DDot;|a(?:cr;?|l(?:e;|t(?:;|ese;))|p(?:;|sto(?:;|down;|left;|up;))|rker;)|c(?:omma;|y;)|dash;|easuredangle;|fr;|ho;|i(?:cro;?|d(?:;|ast;|cir;|dot;?)|nus(?:;|b;|d(?:;|u;)))|l(?:cp;|dr;)|nplus;|o(?:dels;|pf;)|p;|s(?:cr;|tpos;)|u(?:;|ltimap;|map;))|n(?:G(?:g;|t(?:;|v;))|L(?:eft(?:arrow;|rightarrow;)|l;|t(?:;|v;))|Rightarrow;|V(?:Dash;|dash;)|a(?:bla;|cute;|ng;|p(?:;|E;|id;|os;|prox;)|tur(?:;|al(?:;|s;)))|b(?:sp;?|ump(?:;|e;))|c(?:a(?:p;|ron;)|edil;|ong(?:;|dot;)|up;|y;)|dash;|e(?:;|Arr;|ar(?:hk;|r(?:;|ow;))|dot;|quiv;|s(?:ear;|im;)|xist(?:;|s;))|fr;|g(?:E;|e(?:;|q(?:;|q;|slant;)|s;)|sim;|t(?:;|r;))|h(?:Arr;|arr;|par;)|i(?:;|s(?:;|d;)|v;)|jcy;|l(?:Arr;|E;|arr;|dr;|e(?:;|ft(?:arrow;|rightarrow;)|q(?:;|q;|slant;)|s(?:;|s;))|sim;|t(?:;|ri(?:;|e;)))|mid;|o(?:pf;|t(?:;|in(?:;|E;|dot;|v(?:a;|b;|c;))|ni(?:;|v(?:a;|b;|c;))|))|p(?:ar(?:;|allel;|sl;|t;)|olint;|r(?:;|cue;|e(?:;|c(?:;|eq;))))|r(?:Arr;|arr(?:;|c;|w;)|ightarrow;|tri(?:;|e;))|s(?:c(?:;|cue;|e;|r;)|hort(?:mid;|parallel;)|im(?:;|e(?:;|q;))|mid;|par;|qsu(?:be;|pe;)|u(?:b(?:;|E;|e;|set(?:;|eq(?:;|q;)))|cc(?:;|eq;)|p(?:;|E;|e;|set(?:;|eq(?:;|q;)))))|t(?:gl;|ilde;?|lg;|riangle(?:left(?:;|eq;)|right(?:;|eq;)))|u(?:;|m(?:;|ero;|sp;))|v(?:Dash;|Harr;|ap;|dash;|g(?:e;|t;)|infin;|l(?:Arr;|e;|t(?:;|rie;))|r(?:Arr;|trie;)|sim;)|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|near;))|o(?:S;|a(?:cute;?|st;)|c(?:ir(?:;|c;?)|y;)|d(?:ash;|blac;|iv;|ot;|sold;)|elig;|f(?:cir;|r;)|g(?:on;|rave;?|t;)|h(?:bar;|m;)|int;|l(?:arr;|c(?:ir;|ross;)|ine;|t;)|m(?:acr;|ega;|i(?:cron;|d;|nus;))|opf;|p(?:ar;|erp;|lus;)|r(?:;|arr;|d(?:;|er(?:;|of;)|f;?|m;?)|igof;|or;|slope;|v;)|s(?:cr;|lash;?|ol;)|ti(?:lde;?|mes(?:;|as;))|uml;?|vbar;)|p(?:ar(?:;|a(?:;|llel;|)|s(?:im;|l;)|t;)|cy;|er(?:cnt;|iod;|mil;|p;|tenk;)|fr;|h(?:i(?:;|v;)|mmat;|one;)|i(?:;|tchfork;|v;)|l(?:an(?:ck(?:;|h;)|kv;)|us(?:;|acir;|b;|cir;|d(?:o;|u;)|e;|mn;?|sim;|two;))|m;|o(?:intint;|pf;|und;?)|r(?:;|E;|ap;|cue;|e(?:;|c(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;))|ime(?:;|s;)|n(?:E;|ap;|sim;)|o(?:d;|f(?:alar;|line;|surf;)|p(?:;|to;))|sim;|urel;)|s(?:cr;|i;)|uncsp;)|q(?:fr;|int;|opf;|prime;|scr;|u(?:at(?:ernions;|int;)|est(?:;|eq;)|ot;?))|r(?:A(?:arr;|rr;|tail;)|Barr;|Har;|a(?:c(?:e;|ute;)|dic;|emptyv;|ng(?:;|d;|e;|le;)|quo;?|rr(?:;|ap;|b(?:;|fs;)|c;|fs;|hk;|lp;|pl;|sim;|tl;|w;)|t(?:ail;|io(?:;|nals;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|ldhar;|quo(?:;|r;)|sh;)|e(?:al(?:;|ine;|part;|s;)|ct;|g;?)|f(?:isht;|loor;|r;)|h(?:ar(?:d;|u(?:;|l;))|o(?:;|v;))|i(?:ght(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|left(?:arrows;|harpoons;)|rightarrows;|squigarrow;|threetimes;)|ng;|singdotseq;)|l(?:arr;|har;|m;)|moust(?:;|ache;)|nmid;|o(?:a(?:ng;|rr;)|brk;|p(?:ar;|f;|lus;)|times;)|p(?:ar(?:;|gt;)|polint;)|rarr;|s(?:aquo;|cr;|h;|q(?:b;|uo(?:;|r;)))|t(?:hree;|imes;|ri(?:;|e;|f;|ltri;))|uluhar;|x;)|s(?:acute;|bquo;|c(?:;|E;|a(?:p;|ron;)|cue;|e(?:;|dil;)|irc;|n(?:E;|ap;|sim;)|polint;|sim;|y;)|dot(?:;|b;|e;)|e(?:Arr;|ar(?:hk;|r(?:;|ow;))|ct;?|mi;|swar;|tm(?:inus;|n;)|xt;)|fr(?:;|own;)|h(?:arp;|c(?:hcy;|y;)|ort(?:mid;|parallel;)|y;?)|i(?:gma(?:;|f;|v;)|m(?:;|dot;|e(?:;|q;)|g(?:;|E;)|l(?:;|E;)|ne;|plus;|rarr;))|larr;|m(?:a(?:llsetminus;|shp;)|eparsl;|i(?:d;|le;)|t(?:;|e(?:;|s;)))|o(?:ftcy;|l(?:;|b(?:;|ar;))|pf;)|pa(?:des(?:;|uit;)|r;)|q(?:c(?:ap(?:;|s;)|up(?:;|s;))|su(?:b(?:;|e;|set(?:;|eq;))|p(?:;|e;|set(?:;|eq;)))|u(?:;|ar(?:e;|f;)|f;))|rarr;|s(?:cr;|etmn;|mile;|tarf;)|t(?:ar(?:;|f;)|r(?:aight(?:epsilon;|phi;)|ns;))|u(?:b(?:;|E;|dot;|e(?:;|dot;)|mult;|n(?:E;|e;)|plus;|rarr;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;)))|cc(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;)|m;|ng;|p(?:1;?|2;?|3;?|;|E;|d(?:ot;|sub;)|e(?:;|dot;)|hs(?:ol;|ub;)|larr;|mult;|n(?:E;|e;)|plus;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;))))|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|nwar;)|zlig;?)|t(?:a(?:rget;|u;)|brk;|c(?:aron;|edil;|y;)|dot;|elrec;|fr;|h(?:e(?:re(?:4;|fore;)|ta(?:;|sym;|v;))|i(?:ck(?:approx;|sim;)|nsp;)|k(?:ap;|sim;)|orn;?)|i(?:lde;|mes(?:;|b(?:;|ar;)|d;|)|nt;)|o(?:ea;|p(?:;|bot;|cir;|f(?:;|ork;))|sa;)|prime;|r(?:ade;|i(?:angle(?:;|down;|left(?:;|eq;)|q;|right(?:;|eq;))|dot;|e;|minus;|plus;|sb;|time;)|pezium;)|s(?:c(?:r;|y;)|hcy;|trok;)|w(?:ixt;|ohead(?:leftarrow;|rightarrow;)))|u(?:Arr;|Har;|a(?:cute;?|rr;)|br(?:cy;|eve;)|c(?:irc;?|y;)|d(?:arr;|blac;|har;)|f(?:isht;|r;)|grave;?|h(?:ar(?:l;|r;)|blk;)|l(?:c(?:orn(?:;|er;)|rop;)|tri;)|m(?:acr;|l;?)|o(?:gon;|pf;)|p(?:arrow;|downarrow;|harpoon(?:left;|right;)|lus;|si(?:;|h;|lon;)|uparrows;)|r(?:c(?:orn(?:;|er;)|rop;)|ing;|tri;)|scr;|t(?:dot;|ilde;|ri(?:;|f;))|u(?:arr;|ml;?)|wangle;)|v(?:Arr;|Bar(?:;|v;)|Dash;|a(?:ngrt;|r(?:epsilon;|kappa;|nothing;|p(?:hi;|i;|ropto;)|r(?:;|ho;)|s(?:igma;|u(?:bsetneq(?:;|q;)|psetneq(?:;|q;)))|t(?:heta;|riangle(?:left;|right;))))|cy;|dash;|e(?:e(?:;|bar;|eq;)|llip;|r(?:bar;|t;))|fr;|ltri;|nsu(?:b;|p;)|opf;|prop;|rtri;|s(?:cr;|u(?:bn(?:E;|e;)|pn(?:E;|e;)))|zigzag;)|w(?:circ;|e(?:d(?:bar;|ge(?:;|q;))|ierp;)|fr;|opf;|p;|r(?:;|eath;)|scr;)|x(?:c(?:ap;|irc;|up;)|dtri;|fr;|h(?:Arr;|arr;)|i;|l(?:Arr;|arr;)|map;|nis;|o(?:dot;|p(?:f;|lus;)|time;)|r(?:Arr;|arr;)|s(?:cr;|qcup;)|u(?:plus;|tri;)|vee;|wedge;)|y(?:ac(?:ute;?|y;)|c(?:irc;|y;)|en;?|fr;|icy;|opf;|scr;|u(?:cy;|ml;?))|z(?:acute;|c(?:aron;|y;)|dot;|e(?:etrf;|ta;)|fr;|hcy;|igrarr;|opf;|scr;|w(?:j;|nj;)))|[\s\S]/g;
-    var NAMEDCHARREF_MAXLEN = 32;
-    var DBLQUOTEATTRVAL = /[^\r"&\u0000]+/g;
-    var SINGLEQUOTEATTRVAL = /[^\r'&\u0000]+/g;
-    var UNQUOTEDATTRVAL = /[^\r\t\n\f &>\u0000]+/g;
-    var TAGNAME = /[^\r\t\n\f \/>A-Z\u0000]+/g;
-    var ATTRNAME = /[^\r\t\n\f \/=>A-Z\u0000]+/g;
-    var CDATATEXT = /[^\]\r\u0000\uffff]*/g;
-    var DATATEXT = /[^&<\r\u0000\uffff]*/g;
-    var RAWTEXT = /[^<\r\u0000\uffff]*/g;
-    var PLAINTEXT = /[^\r\u0000\uffff]*/g;
-    var SIMPLETAG = /(?:(\/)?([a-z]+)>)|[\s\S]/g;
-    var SIMPLEATTR = /(?:([-a-z]+)[ \t\n\f]*=[ \t\n\f]*('[^'&\r\u0000]*'|"[^"&\r\u0000]*"|[^\t\n\r\f "&'\u0000>][^&> \t\n\r\f\u0000]*[ \t\n\f]))|[\s\S]/g;
-    var NONWS = /[^\x09\x0A\x0C\x0D\x20]/;
-    var ALLNONWS = /[^\x09\x0A\x0C\x0D\x20]/g;
-    var NONWSNONNUL = /[^\x00\x09\x0A\x0C\x0D\x20]/;
-    var LEADINGWS = /^[\x09\x0A\x0C\x0D\x20]+/;
-    var NULCHARS = /\x00/g;
-    function buf2str(buf) {
-      var CHUNKSIZE = 16384;
-      if (buf.length < CHUNKSIZE) {
-        return String.fromCharCode.apply(String, buf);
-      }
-      var result = "";
-      for (var i = 0; i < buf.length; i += CHUNKSIZE) {
-        result += String.fromCharCode.apply(String, buf.slice(i, i + CHUNKSIZE));
-      }
-      return result;
-    }
-    function str2buf(s) {
-      var result = [];
-      for (var i = 0; i < s.length; i++) {
-        result[i] = s.charCodeAt(i);
-      }
-      return result;
-    }
-    function isA(elt, set) {
-      if (typeof set === "string") {
-        return elt.namespaceURI === NAMESPACE.HTML && elt.localName === set;
-      }
-      var tagnames = set[elt.namespaceURI];
-      return tagnames && tagnames[elt.localName];
-    }
-    function isMathmlTextIntegrationPoint(n) {
-      return isA(n, mathmlTextIntegrationPointSet);
-    }
-    function isHTMLIntegrationPoint(n) {
-      if (isA(n, htmlIntegrationPointSet)) return true;
-      if (n.namespaceURI === NAMESPACE.MATHML && n.localName === "annotation-xml") {
-        var encoding = n.getAttribute("encoding");
-        if (encoding) encoding = encoding.toLowerCase();
-        if (encoding === "text/html" || encoding === "application/xhtml+xml") return true;
-      }
-      return false;
-    }
-    function adjustSVGTagName(name) {
-      if (name in svgTagNameAdjustments) return svgTagNameAdjustments[name];
-      else return name;
-    }
-    function adjustSVGAttributes(attrs) {
-      for (var i = 0, n = attrs.length; i < n; i++) {
-        if (attrs[i][0] in svgAttrAdjustments) {
-          attrs[i][0] = svgAttrAdjustments[attrs[i][0]];
-        }
-      }
-    }
-    function adjustMathMLAttributes(attrs) {
-      for (var i = 0, n = attrs.length; i < n; i++) {
-        if (attrs[i][0] === "definitionurl") {
-          attrs[i][0] = "definitionURL";
-          break;
-        }
-      }
-    }
-    function adjustForeignAttributes(attrs) {
-      for (var i = 0, n = attrs.length; i < n; i++) {
-        if (attrs[i][0] in foreignAttributes) {
-          attrs[i].push(foreignAttributes[attrs[i][0]]);
-        }
-      }
-    }
-    function transferAttributes(attrs, elt) {
-      for (var i = 0, n = attrs.length; i < n; i++) {
-        var name = attrs[i][0], value = attrs[i][1];
-        if (elt.hasAttribute(name)) continue;
-        elt._setAttribute(name, value);
-      }
-    }
-    HTMLParser.ElementStack = function ElementStack() {
-      this.elements = [];
-      this.top = null;
-    };
-    HTMLParser.ElementStack.prototype.push = function(e) {
-      this.elements.push(e);
-      this.top = e;
-    };
-    HTMLParser.ElementStack.prototype.pop = function(e) {
-      this.elements.pop();
-      this.top = this.elements[this.elements.length - 1];
-    };
-    HTMLParser.ElementStack.prototype.popTag = function(tag) {
-      for (var i = this.elements.length - 1; i > 0; i--) {
-        var e = this.elements[i];
-        if (isA(e, tag)) break;
-      }
-      this.elements.length = i;
-      this.top = this.elements[i - 1];
-    };
-    HTMLParser.ElementStack.prototype.popElementType = function(type) {
-      for (var i = this.elements.length - 1; i > 0; i--) {
-        if (this.elements[i] instanceof type) break;
-      }
-      this.elements.length = i;
-      this.top = this.elements[i - 1];
-    };
-    HTMLParser.ElementStack.prototype.popElement = function(e) {
-      for (var i = this.elements.length - 1; i > 0; i--) {
-        if (this.elements[i] === e) break;
-      }
-      this.elements.length = i;
-      this.top = this.elements[i - 1];
-    };
-    HTMLParser.ElementStack.prototype.removeElement = function(e) {
-      if (this.top === e) this.pop();
-      else {
-        var idx = this.elements.lastIndexOf(e);
-        if (idx !== -1) this.elements.splice(idx, 1);
-      }
-    };
-    HTMLParser.ElementStack.prototype.clearToContext = function(set) {
-      for (var i = this.elements.length - 1; i > 0; i--) {
-        if (isA(this.elements[i], set)) break;
-      }
-      this.elements.length = i + 1;
-      this.top = this.elements[i];
-    };
-    HTMLParser.ElementStack.prototype.contains = function(tag) {
-      return this.inSpecificScope(tag, /* @__PURE__ */ Object.create(null));
-    };
-    HTMLParser.ElementStack.prototype.inSpecificScope = function(tag, set) {
-      for (var i = this.elements.length - 1; i >= 0; i--) {
-        var elt = this.elements[i];
-        if (isA(elt, tag)) return true;
-        if (isA(elt, set)) return false;
-      }
-      return false;
-    };
-    HTMLParser.ElementStack.prototype.elementInSpecificScope = function(target, set) {
-      for (var i = this.elements.length - 1; i >= 0; i--) {
-        var elt = this.elements[i];
-        if (elt === target) return true;
-        if (isA(elt, set)) return false;
-      }
-      return false;
-    };
-    HTMLParser.ElementStack.prototype.elementTypeInSpecificScope = function(target, set) {
-      for (var i = this.elements.length - 1; i >= 0; i--) {
-        var elt = this.elements[i];
-        if (elt instanceof target) return true;
-        if (isA(elt, set)) return false;
-      }
-      return false;
-    };
-    HTMLParser.ElementStack.prototype.inScope = function(tag) {
-      return this.inSpecificScope(tag, inScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.elementInScope = function(e) {
-      return this.elementInSpecificScope(e, inScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.elementTypeInScope = function(type) {
-      return this.elementTypeInSpecificScope(type, inScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.inButtonScope = function(tag) {
-      return this.inSpecificScope(tag, inButtonScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.inListItemScope = function(tag) {
-      return this.inSpecificScope(tag, inListItemScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.inTableScope = function(tag) {
-      return this.inSpecificScope(tag, inTableScopeSet);
-    };
-    HTMLParser.ElementStack.prototype.inSelectScope = function(tag) {
-      for (var i = this.elements.length - 1; i >= 0; i--) {
-        var elt = this.elements[i];
-        if (elt.namespaceURI !== NAMESPACE.HTML) return false;
-        var localname = elt.localName;
-        if (localname === tag) return true;
-        if (localname !== "optgroup" && localname !== "option") return false;
-      }
-      return false;
-    };
-    HTMLParser.ElementStack.prototype.generateImpliedEndTags = function(butnot, thorough) {
-      var endTagSet = thorough ? thoroughImpliedEndTagsSet : impliedEndTagsSet;
-      for (var i = this.elements.length - 1; i >= 0; i--) {
-        var e = this.elements[i];
-        if (butnot && isA(e, butnot)) break;
-        if (!isA(this.elements[i], endTagSet)) break;
-      }
-      this.elements.length = i + 1;
-      this.top = this.elements[i];
-    };
-    HTMLParser.ActiveFormattingElements = function AFE() {
-      this.list = [];
-      this.attrs = [];
-    };
-    HTMLParser.ActiveFormattingElements.prototype.MARKER = {
-      localName: "|"
-    };
-    HTMLParser.ActiveFormattingElements.prototype.insertMarker = function() {
-      this.list.push(this.MARKER);
-      this.attrs.push(this.MARKER);
-    };
-    HTMLParser.ActiveFormattingElements.prototype.push = function(elt, attrs) {
-      var count = 0;
-      for (var i = this.list.length - 1; i >= 0; i--) {
-        if (this.list[i] === this.MARKER) break;
-        if (equal(elt, this.list[i], this.attrs[i])) {
-          count++;
-          if (count === 3) {
-            this.list.splice(i, 1);
-            this.attrs.splice(i, 1);
-            break;
-          }
-        }
-      }
-      this.list.push(elt);
-      var attrcopy = [];
-      for (var ii = 0; ii < attrs.length; ii++) {
-        attrcopy[ii] = attrs[ii];
-      }
-      this.attrs.push(attrcopy);
-      function equal(newelt, oldelt, oldattrs) {
-        if (newelt.localName !== oldelt.localName) return false;
-        if (newelt._numattrs !== oldattrs.length) return false;
-        for (var i2 = 0, n = oldattrs.length; i2 < n; i2++) {
-          var oldname = oldattrs[i2][0];
-          var oldval = oldattrs[i2][1];
-          if (!newelt.hasAttribute(oldname)) return false;
-          if (newelt.getAttribute(oldname) !== oldval) return false;
-        }
-        return true;
-      }
-    };
-    HTMLParser.ActiveFormattingElements.prototype.clearToMarker = function() {
-      for (var i = this.list.length - 1; i >= 0; i--) {
-        if (this.list[i] === this.MARKER) break;
-      }
-      if (i < 0) i = 0;
-      this.list.length = i;
-      this.attrs.length = i;
-    };
-    HTMLParser.ActiveFormattingElements.prototype.findElementByTag = function(tag) {
-      for (var i = this.list.length - 1; i >= 0; i--) {
-        var elt = this.list[i];
-        if (elt === this.MARKER) break;
-        if (elt.localName === tag) return elt;
-      }
-      return null;
-    };
-    HTMLParser.ActiveFormattingElements.prototype.indexOf = function(e) {
-      return this.list.lastIndexOf(e);
-    };
-    HTMLParser.ActiveFormattingElements.prototype.remove = function(e) {
-      var idx = this.list.lastIndexOf(e);
-      if (idx !== -1) {
-        this.list.splice(idx, 1);
-        this.attrs.splice(idx, 1);
-      }
-    };
-    HTMLParser.ActiveFormattingElements.prototype.replace = function(a, b, attrs) {
-      var idx = this.list.lastIndexOf(a);
-      if (idx !== -1) {
-        this.list[idx] = b;
-        this.attrs[idx] = attrs;
-      }
-    };
-    HTMLParser.ActiveFormattingElements.prototype.insertAfter = function(a, b) {
-      var idx = this.list.lastIndexOf(a);
-      if (idx !== -1) {
-        this.list.splice(idx, 0, b);
-        this.attrs.splice(idx, 0, b);
-      }
-    };
-    function HTMLParser(address, fragmentContext, options) {
-      var chars = null;
-      var numchars = 0;
-      var nextchar = 0;
-      var input_complete = false;
-      var scanner_skip_newline = false;
-      var reentrant_invocations = 0;
-      var saved_scanner_state = [];
-      var leftovers = "";
-      var first_batch = true;
-      var paused = 0;
-      var tokenizer = data_state;
-      var return_state;
-      var character_reference_code;
-      var tagnamebuf = "";
-      var lasttagname = "";
-      var tempbuf = [];
-      var attrnamebuf = "";
-      var attrvaluebuf = "";
-      var commentbuf = [];
-      var doctypenamebuf = [];
-      var doctypepublicbuf = [];
-      var doctypesystembuf = [];
-      var attributes = [];
-      var is_end_tag = false;
-      var parser = initial_mode;
-      var originalInsertionMode = null;
-      var templateInsertionModes = [];
-      var stack = new HTMLParser.ElementStack();
-      var afe = new HTMLParser.ActiveFormattingElements();
-      var fragment = fragmentContext !== void 0;
-      var head_element_pointer = null;
-      var form_element_pointer = null;
-      var scripting_enabled = true;
-      if (fragmentContext) {
-        scripting_enabled = fragmentContext.ownerDocument._scripting_enabled;
-      }
-      if (options && options.scripting_enabled === false) scripting_enabled = false;
-      var frameset_ok = true;
-      var force_quirks = false;
-      var pending_table_text;
-      var text_integration_mode;
-      var textrun = [];
-      var textIncludesNUL = false;
-      var ignore_linefeed = false;
-      var htmlparser = {
-        document: function() {
-          return doc;
-        },
-        _asDocumentFragment: function() {
-          var frag = doc.createDocumentFragment();
-          var root2 = doc.firstChild;
-          while (root2.hasChildNodes()) {
-            frag.appendChild(root2.firstChild);
-          }
-          return frag;
-        },
-        pause: function() {
-          paused++;
-        },
-        resume: function() {
-          paused--;
-          this.parse("");
-        },
-        parse: function(s, end, shouldPauseFunc) {
-          var moreToDo;
-          if (paused > 0) {
-            leftovers += s;
-            return true;
-          }
-          if (reentrant_invocations === 0) {
-            if (leftovers) {
-              s = leftovers + s;
-              leftovers = "";
-            }
-            if (end) {
-              s += "￿";
-              input_complete = true;
-            }
-            chars = s;
-            numchars = s.length;
-            nextchar = 0;
-            if (first_batch) {
-              first_batch = false;
-              if (chars.charCodeAt(0) === 65279) nextchar = 1;
-            }
-            reentrant_invocations++;
-            moreToDo = scanChars(shouldPauseFunc);
-            leftovers = chars.substring(nextchar, numchars);
-            reentrant_invocations--;
-          } else {
-            reentrant_invocations++;
-            saved_scanner_state.push(chars, numchars, nextchar);
-            chars = s;
-            numchars = s.length;
-            nextchar = 0;
-            scanChars();
-            moreToDo = false;
-            leftovers = chars.substring(nextchar, numchars);
-            nextchar = saved_scanner_state.pop();
-            numchars = saved_scanner_state.pop();
-            chars = saved_scanner_state.pop();
-            if (leftovers) {
-              chars = leftovers + chars.substring(nextchar);
-              numchars = chars.length;
-              nextchar = 0;
-              leftovers = "";
-            }
-            reentrant_invocations--;
-          }
-          return moreToDo;
-        }
-      };
-      var doc = new Document2(true, address);
-      doc._parser = htmlparser;
-      doc._scripting_enabled = scripting_enabled;
-      if (fragmentContext) {
-        if (fragmentContext.ownerDocument._quirks) doc._quirks = true;
-        if (fragmentContext.ownerDocument._limitedQuirks) doc._limitedQuirks = true;
-        if (fragmentContext.namespaceURI === NAMESPACE.HTML) {
-          switch (fragmentContext.localName) {
-            case "title":
-            case "textarea":
-              tokenizer = rcdata_state;
-              break;
-            case "style":
-            case "xmp":
-            case "iframe":
-            case "noembed":
-            case "noframes":
-            case "script":
-            case "plaintext":
-              tokenizer = plaintext_state;
-              break;
-          }
-        }
-        var root = doc.createElement("html");
-        doc._appendChild(root);
-        stack.push(root);
-        if (fragmentContext instanceof impl.HTMLTemplateElement) {
-          templateInsertionModes.push(in_template_mode);
-        }
-        resetInsertionMode();
-        for (var e = fragmentContext; e !== null; e = e.parentElement) {
-          if (e instanceof impl.HTMLFormElement) {
-            form_element_pointer = e;
-            break;
-          }
-        }
-      }
-      function scanChars(shouldPauseFunc) {
-        var codepoint, s, pattern, eof;
-        while (nextchar < numchars) {
-          if (paused > 0 || shouldPauseFunc && shouldPauseFunc()) {
-            return true;
-          }
-          switch (typeof tokenizer.lookahead) {
-            case "undefined":
-              codepoint = chars.charCodeAt(nextchar++);
-              if (scanner_skip_newline) {
-                scanner_skip_newline = false;
-                if (codepoint === 10) {
-                  nextchar++;
-                  continue;
-                }
-              }
-              switch (codepoint) {
-                case 13:
-                  if (nextchar < numchars) {
-                    if (chars.charCodeAt(nextchar) === 10) nextchar++;
-                  } else {
-                    scanner_skip_newline = true;
-                  }
-                  tokenizer(10);
-                  break;
-                case 65535:
-                  if (input_complete && nextchar === numchars) {
-                    tokenizer(EOF);
-                    break;
-                  }
-                default:
-                  tokenizer(codepoint);
-                  break;
-              }
-              break;
-            case "number":
-              codepoint = chars.charCodeAt(nextchar);
-              var n = tokenizer.lookahead;
-              var needsString = true;
-              if (n < 0) {
-                needsString = false;
-                n = -n;
-              }
-              if (n < numchars - nextchar) {
-                s = needsString ? chars.substring(nextchar, nextchar + n) : null;
-                eof = false;
-              } else {
-                if (input_complete) {
-                  s = needsString ? chars.substring(nextchar, numchars) : null;
-                  eof = true;
-                  if (codepoint === 65535 && nextchar === numchars - 1) codepoint = EOF;
-                } else {
-                  return true;
-                }
-              }
-              tokenizer(codepoint, s, eof);
-              break;
-            case "string":
-              codepoint = chars.charCodeAt(nextchar);
-              pattern = tokenizer.lookahead;
-              var pos = chars.indexOf(pattern, nextchar);
-              if (pos !== -1) {
-                s = chars.substring(nextchar, pos + pattern.length);
-                eof = false;
-              } else {
-                if (!input_complete) return true;
-                s = chars.substring(nextchar, numchars);
-                if (codepoint === 65535 && nextchar === numchars - 1) codepoint = EOF;
-                eof = true;
-              }
-              tokenizer(codepoint, s, eof);
-              break;
-          }
-        }
-        return false;
-      }
-      function addAttribute(name, value) {
-        for (var i = 0; i < attributes.length; i++) {
-          if (attributes[i][0] === name) return;
-        }
-        if (value !== void 0) {
-          attributes.push([name, value]);
-        } else {
-          attributes.push([name]);
-        }
-      }
-      function handleSimpleAttribute() {
-        SIMPLEATTR.lastIndex = nextchar - 1;
-        var matched = SIMPLEATTR.exec(chars);
-        if (!matched) throw new Error("should never happen");
-        var name = matched[1];
-        if (!name) return false;
-        var value = matched[2];
-        var len = value.length;
-        switch (value[0]) {
-          case '"':
-          case "'":
-            value = value.substring(1, len - 1);
-            nextchar += matched[0].length - 1;
-            tokenizer = after_attribute_value_quoted_state;
-            break;
-          default:
-            tokenizer = before_attribute_name_state;
-            nextchar += matched[0].length - 1;
-            value = value.substring(0, len - 1);
-            break;
-        }
-        for (var i = 0; i < attributes.length; i++) {
-          if (attributes[i][0] === name) return true;
-        }
-        attributes.push([name, value]);
-        return true;
-      }
-      function beginTagName() {
-        is_end_tag = false;
-        tagnamebuf = "";
-        attributes.length = 0;
-      }
-      function beginEndTagName() {
-        is_end_tag = true;
-        tagnamebuf = "";
-        attributes.length = 0;
-      }
-      function beginTempBuf() {
-        tempbuf.length = 0;
-      }
-      function beginAttrName() {
-        attrnamebuf = "";
-      }
-      function beginAttrValue() {
-        attrvaluebuf = "";
-      }
-      function beginComment() {
-        commentbuf.length = 0;
-      }
-      function beginDoctype() {
-        doctypenamebuf.length = 0;
-        doctypepublicbuf = null;
-        doctypesystembuf = null;
-      }
-      function beginDoctypePublicId() {
-        doctypepublicbuf = [];
-      }
-      function beginDoctypeSystemId() {
-        doctypesystembuf = [];
-      }
-      function forcequirks() {
-        force_quirks = true;
-      }
-      function cdataAllowed() {
-        return stack.top && stack.top.namespaceURI !== "http://www.w3.org/1999/xhtml";
-      }
-      function appropriateEndTag(buf) {
-        return lasttagname === buf;
-      }
-      function flushText() {
-        if (textrun.length > 0) {
-          var s = buf2str(textrun);
-          textrun.length = 0;
-          if (ignore_linefeed) {
-            ignore_linefeed = false;
-            if (s[0] === "\n") s = s.substring(1);
-            if (s.length === 0) return;
-          }
-          insertToken(TEXT, s);
-          textIncludesNUL = false;
-        }
-        ignore_linefeed = false;
-      }
-      function getMatchingChars(pattern) {
-        pattern.lastIndex = nextchar - 1;
-        var match = pattern.exec(chars);
-        if (match && match.index === nextchar - 1) {
-          match = match[0];
-          nextchar += match.length - 1;
-          if (input_complete && nextchar === numchars) {
-            match = match.slice(0, -1);
-            nextchar--;
-          }
-          return match;
-        } else {
-          throw new Error("should never happen");
-        }
-      }
-      function emitCharsWhile(pattern) {
-        pattern.lastIndex = nextchar - 1;
-        var match = pattern.exec(chars)[0];
-        if (!match) return false;
-        emitCharString(match);
-        nextchar += match.length - 1;
-        return true;
-      }
-      function emitCharString(s) {
-        if (textrun.length > 0) flushText();
-        if (ignore_linefeed) {
-          ignore_linefeed = false;
-          if (s[0] === "\n") s = s.substring(1);
-          if (s.length === 0) return;
-        }
-        insertToken(TEXT, s);
-      }
-      function emitTag() {
-        if (is_end_tag) insertToken(ENDTAG, tagnamebuf);
-        else {
-          var tagname = tagnamebuf;
-          tagnamebuf = "";
-          lasttagname = tagname;
-          insertToken(TAG, tagname, attributes);
-        }
-      }
-      function emitSimpleTag() {
-        if (nextchar === numchars) {
-          return false;
-        }
-        SIMPLETAG.lastIndex = nextchar;
-        var matched = SIMPLETAG.exec(chars);
-        if (!matched) throw new Error("should never happen");
-        var tagname = matched[2];
-        if (!tagname) return false;
-        var endtag = matched[1];
-        if (endtag) {
-          nextchar += tagname.length + 2;
-          insertToken(ENDTAG, tagname);
-        } else {
-          nextchar += tagname.length + 1;
-          lasttagname = tagname;
-          insertToken(TAG, tagname, NOATTRS);
-        }
-        return true;
-      }
-      function emitSelfClosingTag() {
-        if (is_end_tag) insertToken(ENDTAG, tagnamebuf, null, true);
-        else {
-          insertToken(TAG, tagnamebuf, attributes, true);
-        }
-      }
-      function emitDoctype() {
-        insertToken(DOCTYPE, buf2str(doctypenamebuf), doctypepublicbuf ? buf2str(doctypepublicbuf) : void 0, doctypesystembuf ? buf2str(doctypesystembuf) : void 0);
-      }
-      function emitEOF() {
-        flushText();
-        parser(EOF);
-        doc.modclock = 1;
-      }
-      var insertToken = htmlparser.insertToken = function insertToken2(t, value, arg3, arg4) {
-        flushText();
-        var current = stack.top;
-        if (!current || current.namespaceURI === NAMESPACE.HTML) {
-          parser(t, value, arg3, arg4);
-        } else {
-          if (t !== TAG && t !== TEXT) {
-            insertForeignToken(t, value, arg3, arg4);
-          } else {
-            if (isMathmlTextIntegrationPoint(current) && (t === TEXT || t === TAG && value !== "mglyph" && value !== "malignmark") || t === TAG && value === "svg" && current.namespaceURI === NAMESPACE.MATHML && current.localName === "annotation-xml" || isHTMLIntegrationPoint(current)) {
-              text_integration_mode = true;
-              parser(t, value, arg3, arg4);
-              text_integration_mode = false;
-            } else {
-              insertForeignToken(t, value, arg3, arg4);
-            }
-          }
-        }
-      };
-      function insertComment(data) {
-        var parent = stack.top;
-        if (foster_parent_mode && isA(parent, tablesectionrowSet)) {
-          fosterParent(function(doc2) {
-            return doc2.createComment(data);
-          });
-        } else {
-          if (parent instanceof impl.HTMLTemplateElement) {
-            parent = parent.content;
-          }
-          parent._appendChild(parent.ownerDocument.createComment(data));
-        }
-      }
-      function insertText(s) {
-        var parent = stack.top;
-        if (foster_parent_mode && isA(parent, tablesectionrowSet)) {
-          fosterParent(function(doc2) {
-            return doc2.createTextNode(s);
-          });
-        } else {
-          if (parent instanceof impl.HTMLTemplateElement) {
-            parent = parent.content;
-          }
-          var lastChild = parent.lastChild;
-          if (lastChild && lastChild.nodeType === Node.TEXT_NODE) {
-            lastChild.appendData(s);
-          } else {
-            parent._appendChild(parent.ownerDocument.createTextNode(s));
-          }
-        }
-      }
-      function createHTMLElt(doc2, name, attrs) {
-        var elt = html.createElement(doc2, name, null);
-        if (attrs) {
-          for (var i = 0, n = attrs.length; i < n; i++) {
-            elt._setAttribute(attrs[i][0], attrs[i][1]);
-          }
-        }
-        return elt;
-      }
-      var foster_parent_mode = false;
-      function insertHTMLElement(name, attrs) {
-        var elt = insertElement(function(doc2) {
-          return createHTMLElt(doc2, name, attrs);
-        });
-        if (isA(elt, formassociatedSet)) {
-          elt._form = form_element_pointer;
-        }
-        return elt;
-      }
-      function insertElement(eltFunc) {
-        var elt;
-        if (foster_parent_mode && isA(stack.top, tablesectionrowSet)) {
-          elt = fosterParent(eltFunc);
-        } else if (stack.top instanceof impl.HTMLTemplateElement) {
-          elt = eltFunc(stack.top.content.ownerDocument);
-          stack.top.content._appendChild(elt);
-        } else {
-          elt = eltFunc(stack.top.ownerDocument);
-          stack.top._appendChild(elt);
-        }
-        stack.push(elt);
-        return elt;
-      }
-      function insertForeignElement(name, attrs, ns) {
-        return insertElement(function(doc2) {
-          var elt = doc2._createElementNS(name, ns, null);
-          if (attrs) {
-            for (var i = 0, n = attrs.length; i < n; i++) {
-              var attr = attrs[i];
-              if (attr.length === 2) elt._setAttribute(attr[0], attr[1]);
-              else {
-                elt._setAttributeNS(attr[2], attr[0], attr[1]);
-              }
-            }
-          }
-          return elt;
-        });
-      }
-      function lastElementOfType(type) {
-        for (var i = stack.elements.length - 1; i >= 0; i--) {
-          if (stack.elements[i] instanceof type) {
-            return i;
-          }
-        }
-        return -1;
-      }
-      function fosterParent(eltFunc) {
-        var parent, before, lastTable = -1, lastTemplate = -1, elt;
-        lastTable = lastElementOfType(impl.HTMLTableElement);
-        lastTemplate = lastElementOfType(impl.HTMLTemplateElement);
-        if (lastTemplate >= 0 && (lastTable < 0 || lastTemplate > lastTable)) {
-          parent = stack.elements[lastTemplate];
-        } else if (lastTable >= 0) {
-          parent = stack.elements[lastTable].parentNode;
-          if (parent) {
-            before = stack.elements[lastTable];
-          } else {
-            parent = stack.elements[lastTable - 1];
-          }
-        }
-        if (!parent) parent = stack.elements[0];
-        if (parent instanceof impl.HTMLTemplateElement) {
-          parent = parent.content;
-        }
-        elt = eltFunc(parent.ownerDocument);
-        if (elt.nodeType === Node.TEXT_NODE) {
-          var prev;
-          if (before) prev = before.previousSibling;
-          else prev = parent.lastChild;
-          if (prev && prev.nodeType === Node.TEXT_NODE) {
-            prev.appendData(elt.data);
-            return elt;
-          }
-        }
-        if (before) parent.insertBefore(elt, before);
-        else parent._appendChild(elt);
-        return elt;
-      }
-      function resetInsertionMode() {
-        var last = false;
-        for (var i = stack.elements.length - 1; i >= 0; i--) {
-          var node = stack.elements[i];
-          if (i === 0) {
-            last = true;
-            if (fragment) {
-              node = fragmentContext;
-            }
-          }
-          if (node.namespaceURI === NAMESPACE.HTML) {
-            var tag = node.localName;
-            switch (tag) {
-              case "select":
-                for (var j = i; j > 0; ) {
-                  var ancestor = stack.elements[--j];
-                  if (ancestor instanceof impl.HTMLTemplateElement) {
-                    break;
-                  } else if (ancestor instanceof impl.HTMLTableElement) {
-                    parser = in_select_in_table_mode;
-                    return;
-                  }
-                }
-                parser = in_select_mode;
-                return;
-              case "tr":
-                parser = in_row_mode;
-                return;
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                parser = in_table_body_mode;
-                return;
-              case "caption":
-                parser = in_caption_mode;
-                return;
-              case "colgroup":
-                parser = in_column_group_mode;
-                return;
-              case "table":
-                parser = in_table_mode;
-                return;
-              case "template":
-                parser = templateInsertionModes[templateInsertionModes.length - 1];
-                return;
-              case "body":
-                parser = in_body_mode;
-                return;
-              case "frameset":
-                parser = in_frameset_mode;
-                return;
-              case "html":
-                if (head_element_pointer === null) {
-                  parser = before_head_mode;
-                } else {
-                  parser = after_head_mode;
-                }
-                return;
-              default:
-                if (!last) {
-                  if (tag === "head") {
-                    parser = in_head_mode;
-                    return;
-                  }
-                  if (tag === "td" || tag === "th") {
-                    parser = in_cell_mode;
-                    return;
-                  }
-                }
-            }
-          }
-          if (last) {
-            parser = in_body_mode;
-            return;
-          }
-        }
-      }
-      function parseRawText(name, attrs) {
-        insertHTMLElement(name, attrs);
-        tokenizer = rawtext_state;
-        originalInsertionMode = parser;
-        parser = text_mode;
-      }
-      function parseRCDATA(name, attrs) {
-        insertHTMLElement(name, attrs);
-        tokenizer = rcdata_state;
-        originalInsertionMode = parser;
-        parser = text_mode;
-      }
-      function afeclone(doc2, i) {
-        return {
-          elt: createHTMLElt(doc2, afe.list[i].localName, afe.attrs[i]),
-          attrs: afe.attrs[i]
-        };
-      }
-      function afereconstruct() {
-        if (afe.list.length === 0) return;
-        var entry = afe.list[afe.list.length - 1];
-        if (entry === afe.MARKER) return;
-        if (stack.elements.lastIndexOf(entry) !== -1) return;
-        for (var i = afe.list.length - 2; i >= 0; i--) {
-          entry = afe.list[i];
-          if (entry === afe.MARKER) break;
-          if (stack.elements.lastIndexOf(entry) !== -1) break;
-        }
-        for (i = i + 1; i < afe.list.length; i++) {
-          var newelt = insertElement(function(doc2) {
-            return afeclone(doc2, i).elt;
-          });
-          afe.list[i] = newelt;
-        }
-      }
-      var BOOKMARK = {
-        localName: "BM"
-      };
-      function adoptionAgency(tag) {
-        if (isA(stack.top, tag) && afe.indexOf(stack.top) === -1) {
-          stack.pop();
-          return true;
-        }
-        var outer = 0;
-        while (outer < 8) {
-          outer++;
-          var fmtelt = afe.findElementByTag(tag);
-          if (!fmtelt) {
-            return false;
-          }
-          var index = stack.elements.lastIndexOf(fmtelt);
-          if (index === -1) {
-            afe.remove(fmtelt);
-            return true;
-          }
-          if (!stack.elementInScope(fmtelt)) {
-            return true;
-          }
-          var furthestblock = null, furthestblockindex;
-          for (var i = index + 1; i < stack.elements.length; i++) {
-            if (isA(stack.elements[i], specialSet)) {
-              furthestblock = stack.elements[i];
-              furthestblockindex = i;
-              break;
-            }
-          }
-          if (!furthestblock) {
-            stack.popElement(fmtelt);
-            afe.remove(fmtelt);
-            return true;
-          } else {
-            var ancestor = stack.elements[index - 1];
-            afe.insertAfter(fmtelt, BOOKMARK);
-            var node = furthestblock;
-            var lastnode = furthestblock;
-            var nodeindex = furthestblockindex;
-            var nodeafeindex;
-            var inner = 0;
-            while (true) {
-              inner++;
-              node = stack.elements[--nodeindex];
-              if (node === fmtelt) break;
-              nodeafeindex = afe.indexOf(node);
-              if (inner > 3 && nodeafeindex !== -1) {
-                afe.remove(node);
-                nodeafeindex = -1;
-              }
-              if (nodeafeindex === -1) {
-                stack.removeElement(node);
-                continue;
-              }
-              var newelt = afeclone(ancestor.ownerDocument, nodeafeindex);
-              afe.replace(node, newelt.elt, newelt.attrs);
-              stack.elements[nodeindex] = newelt.elt;
-              node = newelt.elt;
-              if (lastnode === furthestblock) {
-                afe.remove(BOOKMARK);
-                afe.insertAfter(newelt.elt, BOOKMARK);
-              }
-              node._appendChild(lastnode);
-              lastnode = node;
-            }
-            if (foster_parent_mode && isA(ancestor, tablesectionrowSet)) {
-              fosterParent(function() {
-                return lastnode;
-              });
-            } else if (ancestor instanceof impl.HTMLTemplateElement) {
-              ancestor.content._appendChild(lastnode);
-            } else {
-              ancestor._appendChild(lastnode);
-            }
-            var newelt2 = afeclone(furthestblock.ownerDocument, afe.indexOf(fmtelt));
-            while (furthestblock.hasChildNodes()) {
-              newelt2.elt._appendChild(furthestblock.firstChild);
-            }
-            furthestblock._appendChild(newelt2.elt);
-            afe.remove(fmtelt);
-            afe.replace(BOOKMARK, newelt2.elt, newelt2.attrs);
-            stack.removeElement(fmtelt);
-            var pos = stack.elements.lastIndexOf(furthestblock);
-            stack.elements.splice(pos + 1, 0, newelt2.elt);
-          }
-        }
-        return true;
-      }
-      function handleScriptEnd() {
-        stack.pop();
-        parser = originalInsertionMode;
-        return;
-      }
-      function stopParsing() {
-        delete doc._parser;
-        stack.elements.length = 0;
-        if (doc.defaultView) {
-          doc.defaultView.dispatchEvent(new impl.Event("load", {}));
-        }
-      }
-      function reconsume(c, new_state) {
-        tokenizer = new_state;
-        nextchar--;
-      }
-      function data_state(c) {
-        switch (c) {
-          case 38:
-            return_state = data_state;
-            tokenizer = character_reference_state;
-            break;
-          case 60:
-            if (emitSimpleTag()) break;
-            tokenizer = tag_open_state;
-            break;
-          case 0:
-            textrun.push(c);
-            textIncludesNUL = true;
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            emitCharsWhile(DATATEXT) || textrun.push(c);
-            break;
-        }
-      }
-      function rcdata_state(c) {
-        switch (c) {
-          case 38:
-            return_state = rcdata_state;
-            tokenizer = character_reference_state;
-            break;
-          case 60:
-            tokenizer = rcdata_less_than_sign_state;
-            break;
-          case 0:
-            textrun.push(65533);
-            textIncludesNUL = true;
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            textrun.push(c);
-            break;
-        }
-      }
-      function rawtext_state(c) {
-        switch (c) {
-          case 60:
-            tokenizer = rawtext_less_than_sign_state;
-            break;
-          case 0:
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            emitCharsWhile(RAWTEXT) || textrun.push(c);
-            break;
-        }
-      }
-      function script_data_state(c) {
-        switch (c) {
-          case 60:
-            tokenizer = script_data_less_than_sign_state;
-            break;
-          case 0:
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            emitCharsWhile(RAWTEXT) || textrun.push(c);
-            break;
-        }
-      }
-      function plaintext_state(c) {
-        switch (c) {
-          case 0:
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            emitCharsWhile(PLAINTEXT) || textrun.push(c);
-            break;
-        }
-      }
-      function tag_open_state(c) {
-        switch (c) {
-          case 33:
-            tokenizer = markup_declaration_open_state;
-            break;
-          case 47:
-            tokenizer = end_tag_open_state;
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginTagName();
-            reconsume(c, tag_name_state);
-            break;
-          case 63:
-            reconsume(c, bogus_comment_state);
-            break;
-          default:
-            textrun.push(60);
-            reconsume(c, data_state);
-            break;
-        }
-      }
-      function end_tag_open_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginEndTagName();
-            reconsume(c, tag_name_state);
-            break;
-          case 62:
-            tokenizer = data_state;
-            break;
-          case -1:
-            textrun.push(60);
-            textrun.push(47);
-            emitEOF();
-            break;
-          default:
-            reconsume(c, bogus_comment_state);
-            break;
-        }
-      }
-      function tag_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = before_attribute_name_state;
-            break;
-          case 47:
-            tokenizer = self_closing_start_tag_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitTag();
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tagnamebuf += String.fromCharCode(c + 32);
-            break;
-          case 0:
-            tagnamebuf += String.fromCharCode(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            tagnamebuf += getMatchingChars(TAGNAME);
-            break;
-        }
-      }
-      function rcdata_less_than_sign_state(c) {
-        if (c === 47) {
-          beginTempBuf();
-          tokenizer = rcdata_end_tag_open_state;
-        } else {
-          textrun.push(60);
-          reconsume(c, rcdata_state);
-        }
-      }
-      function rcdata_end_tag_open_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginEndTagName();
-            reconsume(c, rcdata_end_tag_name_state);
-            break;
-          default:
-            textrun.push(60);
-            textrun.push(47);
-            reconsume(c, rcdata_state);
-            break;
-        }
-      }
-      function rcdata_end_tag_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = before_attribute_name_state;
-              return;
-            }
-            break;
-          case 47:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = self_closing_start_tag_state;
-              return;
-            }
-            break;
-          case 62:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = data_state;
-              emitTag();
-              return;
-            }
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tagnamebuf += String.fromCharCode(c + 32);
-            tempbuf.push(c);
-            return;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tagnamebuf += String.fromCharCode(c);
-            tempbuf.push(c);
-            return;
-          default:
-            break;
-        }
-        textrun.push(60);
-        textrun.push(47);
-        pushAll(textrun, tempbuf);
-        reconsume(c, rcdata_state);
-      }
-      function rawtext_less_than_sign_state(c) {
-        if (c === 47) {
-          beginTempBuf();
-          tokenizer = rawtext_end_tag_open_state;
-        } else {
-          textrun.push(60);
-          reconsume(c, rawtext_state);
-        }
-      }
-      function rawtext_end_tag_open_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginEndTagName();
-            reconsume(c, rawtext_end_tag_name_state);
-            break;
-          default:
-            textrun.push(60);
-            textrun.push(47);
-            reconsume(c, rawtext_state);
-            break;
-        }
-      }
-      function rawtext_end_tag_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = before_attribute_name_state;
-              return;
-            }
-            break;
-          case 47:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = self_closing_start_tag_state;
-              return;
-            }
-            break;
-          case 62:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = data_state;
-              emitTag();
-              return;
-            }
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tagnamebuf += String.fromCharCode(c + 32);
-            tempbuf.push(c);
-            return;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tagnamebuf += String.fromCharCode(c);
-            tempbuf.push(c);
-            return;
-          default:
-            break;
-        }
-        textrun.push(60);
-        textrun.push(47);
-        pushAll(textrun, tempbuf);
-        reconsume(c, rawtext_state);
-      }
-      function script_data_less_than_sign_state(c) {
-        switch (c) {
-          case 47:
-            beginTempBuf();
-            tokenizer = script_data_end_tag_open_state;
-            break;
-          case 33:
-            tokenizer = script_data_escape_start_state;
-            textrun.push(60);
-            textrun.push(33);
-            break;
-          default:
-            textrun.push(60);
-            reconsume(c, script_data_state);
-            break;
-        }
-      }
-      function script_data_end_tag_open_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginEndTagName();
-            reconsume(c, script_data_end_tag_name_state);
-            break;
-          default:
-            textrun.push(60);
-            textrun.push(47);
-            reconsume(c, script_data_state);
-            break;
-        }
-      }
-      function script_data_end_tag_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = before_attribute_name_state;
-              return;
-            }
-            break;
-          case 47:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = self_closing_start_tag_state;
-              return;
-            }
-            break;
-          case 62:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = data_state;
-              emitTag();
-              return;
-            }
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tagnamebuf += String.fromCharCode(c + 32);
-            tempbuf.push(c);
-            return;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tagnamebuf += String.fromCharCode(c);
-            tempbuf.push(c);
-            return;
-          default:
-            break;
-        }
-        textrun.push(60);
-        textrun.push(47);
-        pushAll(textrun, tempbuf);
-        reconsume(c, script_data_state);
-      }
-      function script_data_escape_start_state(c) {
-        if (c === 45) {
-          tokenizer = script_data_escape_start_dash_state;
-          textrun.push(45);
-        } else {
-          reconsume(c, script_data_state);
-        }
-      }
-      function script_data_escape_start_dash_state(c) {
-        if (c === 45) {
-          tokenizer = script_data_escaped_dash_dash_state;
-          textrun.push(45);
-        } else {
-          reconsume(c, script_data_state);
-        }
-      }
-      function script_data_escaped_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = script_data_escaped_dash_state;
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_escaped_less_than_sign_state;
-            break;
-          case 0:
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_escaped_dash_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = script_data_escaped_dash_dash_state;
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_escaped_less_than_sign_state;
-            break;
-          case 0:
-            tokenizer = script_data_escaped_state;
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            tokenizer = script_data_escaped_state;
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_escaped_dash_dash_state(c) {
-        switch (c) {
-          case 45:
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_escaped_less_than_sign_state;
-            break;
-          case 62:
-            tokenizer = script_data_state;
-            textrun.push(62);
-            break;
-          case 0:
-            tokenizer = script_data_escaped_state;
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            tokenizer = script_data_escaped_state;
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_escaped_less_than_sign_state(c) {
-        switch (c) {
-          case 47:
-            beginTempBuf();
-            tokenizer = script_data_escaped_end_tag_open_state;
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginTempBuf();
-            textrun.push(60);
-            reconsume(c, script_data_double_escape_start_state);
-            break;
-          default:
-            textrun.push(60);
-            reconsume(c, script_data_escaped_state);
-            break;
-        }
-      }
-      function script_data_escaped_end_tag_open_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            beginEndTagName();
-            reconsume(c, script_data_escaped_end_tag_name_state);
-            break;
-          default:
-            textrun.push(60);
-            textrun.push(47);
-            reconsume(c, script_data_escaped_state);
-            break;
-        }
-      }
-      function script_data_escaped_end_tag_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = before_attribute_name_state;
-              return;
-            }
-            break;
-          case 47:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = self_closing_start_tag_state;
-              return;
-            }
-            break;
-          case 62:
-            if (appropriateEndTag(tagnamebuf)) {
-              tokenizer = data_state;
-              emitTag();
-              return;
-            }
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tagnamebuf += String.fromCharCode(c + 32);
-            tempbuf.push(c);
-            return;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tagnamebuf += String.fromCharCode(c);
-            tempbuf.push(c);
-            return;
-          default:
-            break;
-        }
-        textrun.push(60);
-        textrun.push(47);
-        pushAll(textrun, tempbuf);
-        reconsume(c, script_data_escaped_state);
-      }
-      function script_data_double_escape_start_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-          case 47:
-          case 62:
-            if (buf2str(tempbuf) === "script") {
-              tokenizer = script_data_double_escaped_state;
-            } else {
-              tokenizer = script_data_escaped_state;
-            }
-            textrun.push(c);
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tempbuf.push(c + 32);
-            textrun.push(c);
-            break;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tempbuf.push(c);
-            textrun.push(c);
-            break;
-          default:
-            reconsume(c, script_data_escaped_state);
-            break;
-        }
-      }
-      function script_data_double_escaped_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = script_data_double_escaped_dash_state;
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_double_escaped_less_than_sign_state;
-            textrun.push(60);
-            break;
-          case 0:
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_double_escaped_dash_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = script_data_double_escaped_dash_dash_state;
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_double_escaped_less_than_sign_state;
-            textrun.push(60);
-            break;
-          case 0:
-            tokenizer = script_data_double_escaped_state;
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            tokenizer = script_data_double_escaped_state;
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_double_escaped_dash_dash_state(c) {
-        switch (c) {
-          case 45:
-            textrun.push(45);
-            break;
-          case 60:
-            tokenizer = script_data_double_escaped_less_than_sign_state;
-            textrun.push(60);
-            break;
-          case 62:
-            tokenizer = script_data_state;
-            textrun.push(62);
-            break;
-          case 0:
-            tokenizer = script_data_double_escaped_state;
-            textrun.push(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            tokenizer = script_data_double_escaped_state;
-            textrun.push(c);
-            break;
-        }
-      }
-      function script_data_double_escaped_less_than_sign_state(c) {
-        if (c === 47) {
-          beginTempBuf();
-          tokenizer = script_data_double_escape_end_state;
-          textrun.push(47);
-        } else {
-          reconsume(c, script_data_double_escaped_state);
-        }
-      }
-      function script_data_double_escape_end_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-          case 47:
-          case 62:
-            if (buf2str(tempbuf) === "script") {
-              tokenizer = script_data_escaped_state;
-            } else {
-              tokenizer = script_data_double_escaped_state;
-            }
-            textrun.push(c);
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            tempbuf.push(c + 32);
-            textrun.push(c);
-            break;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-          case 103:
-          case 104:
-          case 105:
-          case 106:
-          case 107:
-          case 108:
-          case 109:
-          case 110:
-          case 111:
-          case 112:
-          case 113:
-          case 114:
-          case 115:
-          case 116:
-          case 117:
-          case 118:
-          case 119:
-          case 120:
-          case 121:
-          case 122:
-            tempbuf.push(c);
-            textrun.push(c);
-            break;
-          default:
-            reconsume(c, script_data_double_escaped_state);
-            break;
-        }
-      }
-      function before_attribute_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 47:
-            tokenizer = self_closing_start_tag_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitTag();
-            break;
-          case -1:
-            emitEOF();
-            break;
-          case 61:
-            beginAttrName();
-            attrnamebuf += String.fromCharCode(c);
-            tokenizer = attribute_name_state;
-            break;
-          default:
-            if (handleSimpleAttribute()) break;
-            beginAttrName();
-            reconsume(c, attribute_name_state);
-            break;
-        }
-      }
-      function attribute_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-          case 47:
-          case 62:
-          case -1:
-            reconsume(c, after_attribute_name_state);
-            break;
-          case 61:
-            tokenizer = before_attribute_value_state;
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            attrnamebuf += String.fromCharCode(c + 32);
-            break;
-          case 0:
-            attrnamebuf += String.fromCharCode(65533);
-            break;
-          case 34:
-          case 39:
-          case 60:
-          default:
-            attrnamebuf += getMatchingChars(ATTRNAME);
-            break;
-        }
-      }
-      function after_attribute_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 47:
-            addAttribute(attrnamebuf);
-            tokenizer = self_closing_start_tag_state;
-            break;
-          case 61:
-            tokenizer = before_attribute_value_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            addAttribute(attrnamebuf);
-            emitTag();
-            break;
-          case -1:
-            addAttribute(attrnamebuf);
-            emitEOF();
-            break;
-          default:
-            addAttribute(attrnamebuf);
-            beginAttrName();
-            reconsume(c, attribute_name_state);
-            break;
-        }
-      }
-      function before_attribute_value_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 34:
-            beginAttrValue();
-            tokenizer = attribute_value_double_quoted_state;
-            break;
-          case 39:
-            beginAttrValue();
-            tokenizer = attribute_value_single_quoted_state;
-            break;
-          case 62:
-          default:
-            beginAttrValue();
-            reconsume(c, attribute_value_unquoted_state);
-            break;
-        }
-      }
-      function attribute_value_double_quoted_state(c) {
-        switch (c) {
-          case 34:
-            addAttribute(attrnamebuf, attrvaluebuf);
-            tokenizer = after_attribute_value_quoted_state;
-            break;
-          case 38:
-            return_state = attribute_value_double_quoted_state;
-            tokenizer = character_reference_state;
-            break;
-          case 0:
-            attrvaluebuf += String.fromCharCode(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          case 10:
-            attrvaluebuf += String.fromCharCode(c);
-            break;
-          default:
-            attrvaluebuf += getMatchingChars(DBLQUOTEATTRVAL);
-            break;
-        }
-      }
-      function attribute_value_single_quoted_state(c) {
-        switch (c) {
-          case 39:
-            addAttribute(attrnamebuf, attrvaluebuf);
-            tokenizer = after_attribute_value_quoted_state;
-            break;
-          case 38:
-            return_state = attribute_value_single_quoted_state;
-            tokenizer = character_reference_state;
-            break;
-          case 0:
-            attrvaluebuf += String.fromCharCode(65533);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          case 10:
-            attrvaluebuf += String.fromCharCode(c);
-            break;
-          default:
-            attrvaluebuf += getMatchingChars(SINGLEQUOTEATTRVAL);
-            break;
-        }
-      }
-      function attribute_value_unquoted_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            addAttribute(attrnamebuf, attrvaluebuf);
-            tokenizer = before_attribute_name_state;
-            break;
-          case 38:
-            return_state = attribute_value_unquoted_state;
-            tokenizer = character_reference_state;
-            break;
-          case 62:
-            addAttribute(attrnamebuf, attrvaluebuf);
-            tokenizer = data_state;
-            emitTag();
-            break;
-          case 0:
-            attrvaluebuf += String.fromCharCode(65533);
-            break;
-          case -1:
-            nextchar--;
-            tokenizer = data_state;
-            break;
-          case 34:
-          case 39:
-          case 60:
-          case 61:
-          case 96:
-          default:
-            attrvaluebuf += getMatchingChars(UNQUOTEDATTRVAL);
-            break;
-        }
-      }
-      function after_attribute_value_quoted_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = before_attribute_name_state;
-            break;
-          case 47:
-            tokenizer = self_closing_start_tag_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitTag();
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            reconsume(c, before_attribute_name_state);
-            break;
-        }
-      }
-      function self_closing_start_tag_state(c) {
-        switch (c) {
-          case 62:
-            tokenizer = data_state;
-            emitSelfClosingTag(true);
-            break;
-          case -1:
-            emitEOF();
-            break;
-          default:
-            reconsume(c, before_attribute_name_state);
-            break;
-        }
-      }
-      function bogus_comment_state(c, lookahead, eof) {
-        var len = lookahead.length;
-        if (eof) {
-          nextchar += len - 1;
-        } else {
-          nextchar += len;
-        }
-        var comment = lookahead.substring(0, len - 1);
-        comment = comment.replace(/\u0000/g, "�");
-        comment = comment.replace(/\u000D\u000A/g, "\n");
-        comment = comment.replace(/\u000D/g, "\n");
-        insertToken(COMMENT, comment);
-        tokenizer = data_state;
-      }
-      bogus_comment_state.lookahead = ">";
-      function markup_declaration_open_state(c, lookahead, eof) {
-        if (lookahead[0] === "-" && lookahead[1] === "-") {
-          nextchar += 2;
-          beginComment();
-          tokenizer = comment_start_state;
-          return;
-        }
-        if (lookahead.toUpperCase() === "DOCTYPE") {
-          nextchar += 7;
-          tokenizer = doctype_state;
-        } else if (lookahead === "[CDATA[" && cdataAllowed()) {
-          nextchar += 7;
-          tokenizer = cdata_section_state;
-        } else {
-          tokenizer = bogus_comment_state;
-        }
-      }
-      markup_declaration_open_state.lookahead = 7;
-      function comment_start_state(c) {
-        beginComment();
-        switch (c) {
-          case 45:
-            tokenizer = comment_start_dash_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            insertToken(COMMENT, buf2str(commentbuf));
-            break;
-          default:
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_start_dash_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = comment_end_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            insertToken(COMMENT, buf2str(commentbuf));
-            break;
-          case -1:
-            insertToken(COMMENT, buf2str(commentbuf));
-            emitEOF();
-            break;
-          default:
-            commentbuf.push(45);
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_state(c) {
-        switch (c) {
-          case 60:
-            commentbuf.push(c);
-            tokenizer = comment_less_than_sign_state;
-            break;
-          case 45:
-            tokenizer = comment_end_dash_state;
-            break;
-          case 0:
-            commentbuf.push(65533);
-            break;
-          case -1:
-            insertToken(COMMENT, buf2str(commentbuf));
-            emitEOF();
-            break;
-          default:
-            commentbuf.push(c);
-            break;
-        }
-      }
-      function comment_less_than_sign_state(c) {
-        switch (c) {
-          case 33:
-            commentbuf.push(c);
-            tokenizer = comment_less_than_sign_bang_state;
-            break;
-          case 60:
-            commentbuf.push(c);
-            break;
-          default:
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_less_than_sign_bang_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = comment_less_than_sign_bang_dash_state;
-            break;
-          default:
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_less_than_sign_bang_dash_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = comment_less_than_sign_bang_dash_dash_state;
-            break;
-          default:
-            reconsume(c, comment_end_dash_state);
-            break;
-        }
-      }
-      function comment_less_than_sign_bang_dash_dash_state(c) {
-        switch (c) {
-          case 62:
-          case -1:
-            reconsume(c, comment_end_state);
-            break;
-          default:
-            reconsume(c, comment_end_state);
-            break;
-        }
-      }
-      function comment_end_dash_state(c) {
-        switch (c) {
-          case 45:
-            tokenizer = comment_end_state;
-            break;
-          case -1:
-            insertToken(COMMENT, buf2str(commentbuf));
-            emitEOF();
-            break;
-          default:
-            commentbuf.push(45);
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_end_state(c) {
-        switch (c) {
-          case 62:
-            tokenizer = data_state;
-            insertToken(COMMENT, buf2str(commentbuf));
-            break;
-          case 33:
-            tokenizer = comment_end_bang_state;
-            break;
-          case 45:
-            commentbuf.push(45);
-            break;
-          case -1:
-            insertToken(COMMENT, buf2str(commentbuf));
-            emitEOF();
-            break;
-          default:
-            commentbuf.push(45);
-            commentbuf.push(45);
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function comment_end_bang_state(c) {
-        switch (c) {
-          case 45:
-            commentbuf.push(45);
-            commentbuf.push(45);
-            commentbuf.push(33);
-            tokenizer = comment_end_dash_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            insertToken(COMMENT, buf2str(commentbuf));
-            break;
-          case -1:
-            insertToken(COMMENT, buf2str(commentbuf));
-            emitEOF();
-            break;
-          default:
-            commentbuf.push(45);
-            commentbuf.push(45);
-            commentbuf.push(33);
-            reconsume(c, comment_state);
-            break;
-        }
-      }
-      function doctype_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = before_doctype_name_state;
-            break;
-          case -1:
-            beginDoctype();
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            reconsume(c, before_doctype_name_state);
-            break;
-        }
-      }
-      function before_doctype_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            beginDoctype();
-            doctypenamebuf.push(c + 32);
-            tokenizer = doctype_name_state;
-            break;
-          case 0:
-            beginDoctype();
-            doctypenamebuf.push(65533);
-            tokenizer = doctype_name_state;
-            break;
-          case 62:
-            beginDoctype();
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            beginDoctype();
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            beginDoctype();
-            doctypenamebuf.push(c);
-            tokenizer = doctype_name_state;
-            break;
-        }
-      }
-      function doctype_name_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = after_doctype_name_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 71:
-          case 72:
-          case 73:
-          case 74:
-          case 75:
-          case 76:
-          case 77:
-          case 78:
-          case 79:
-          case 80:
-          case 81:
-          case 82:
-          case 83:
-          case 84:
-          case 85:
-          case 86:
-          case 87:
-          case 88:
-          case 89:
-          case 90:
-            doctypenamebuf.push(c + 32);
-            break;
-          case 0:
-            doctypenamebuf.push(65533);
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            doctypenamebuf.push(c);
-            break;
-        }
-      }
-      function after_doctype_name_state(c, lookahead, eof) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            nextchar += 1;
-            break;
-          case 62:
-            tokenizer = data_state;
-            nextchar += 1;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            lookahead = lookahead.toUpperCase();
-            if (lookahead === "PUBLIC") {
-              nextchar += 6;
-              tokenizer = after_doctype_public_keyword_state;
-            } else if (lookahead === "SYSTEM") {
-              nextchar += 6;
-              tokenizer = after_doctype_system_keyword_state;
-            } else {
-              forcequirks();
-              tokenizer = bogus_doctype_state;
-            }
-            break;
-        }
-      }
-      after_doctype_name_state.lookahead = 6;
-      function after_doctype_public_keyword_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = before_doctype_public_identifier_state;
-            break;
-          case 34:
-            beginDoctypePublicId();
-            tokenizer = doctype_public_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypePublicId();
-            tokenizer = doctype_public_identifier_single_quoted_state;
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function before_doctype_public_identifier_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 34:
-            beginDoctypePublicId();
-            tokenizer = doctype_public_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypePublicId();
-            tokenizer = doctype_public_identifier_single_quoted_state;
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function doctype_public_identifier_double_quoted_state(c) {
-        switch (c) {
-          case 34:
-            tokenizer = after_doctype_public_identifier_state;
-            break;
-          case 0:
-            doctypepublicbuf.push(65533);
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            doctypepublicbuf.push(c);
-            break;
-        }
-      }
-      function doctype_public_identifier_single_quoted_state(c) {
-        switch (c) {
-          case 39:
-            tokenizer = after_doctype_public_identifier_state;
-            break;
-          case 0:
-            doctypepublicbuf.push(65533);
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            doctypepublicbuf.push(c);
-            break;
-        }
-      }
-      function after_doctype_public_identifier_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = between_doctype_public_and_system_identifiers_state;
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case 34:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_single_quoted_state;
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function between_doctype_public_and_system_identifiers_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case 34:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_single_quoted_state;
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function after_doctype_system_keyword_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            tokenizer = before_doctype_system_identifier_state;
-            break;
-          case 34:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_single_quoted_state;
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function before_doctype_system_identifier_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 34:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_double_quoted_state;
-            break;
-          case 39:
-            beginDoctypeSystemId();
-            tokenizer = doctype_system_identifier_single_quoted_state;
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            forcequirks();
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function doctype_system_identifier_double_quoted_state(c) {
-        switch (c) {
-          case 34:
-            tokenizer = after_doctype_system_identifier_state;
-            break;
-          case 0:
-            doctypesystembuf.push(65533);
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            doctypesystembuf.push(c);
-            break;
-        }
-      }
-      function doctype_system_identifier_single_quoted_state(c) {
-        switch (c) {
-          case 39:
-            tokenizer = after_doctype_system_identifier_state;
-            break;
-          case 0:
-            doctypesystembuf.push(65533);
-            break;
-          case 62:
-            forcequirks();
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            doctypesystembuf.push(c);
-            break;
-        }
-      }
-      function after_doctype_system_identifier_state(c) {
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-            break;
-          case 62:
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            forcequirks();
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            tokenizer = bogus_doctype_state;
-            break;
-        }
-      }
-      function bogus_doctype_state(c) {
-        switch (c) {
-          case 62:
-            tokenizer = data_state;
-            emitDoctype();
-            break;
-          case -1:
-            emitDoctype();
-            emitEOF();
-            break;
-          default:
-            break;
-        }
-      }
-      function cdata_section_state(c) {
-        switch (c) {
-          case 93:
-            tokenizer = cdata_section_bracket_state;
-            break;
-          case -1:
-            emitEOF();
-            break;
-          case 0:
-            textIncludesNUL = true;
-          default:
-            emitCharsWhile(CDATATEXT) || textrun.push(c);
-            break;
-        }
-      }
-      function cdata_section_bracket_state(c) {
-        switch (c) {
-          case 93:
-            tokenizer = cdata_section_end_state;
-            break;
-          default:
-            textrun.push(93);
-            reconsume(c, cdata_section_state);
-            break;
-        }
-      }
-      function cdata_section_end_state(c) {
-        switch (c) {
-          case 93:
-            textrun.push(93);
-            break;
-          case 62:
-            flushText();
-            tokenizer = data_state;
-            break;
-          default:
-            textrun.push(93);
-            textrun.push(93);
-            reconsume(c, cdata_section_state);
-            break;
-        }
-      }
-      function character_reference_state(c) {
-        beginTempBuf();
-        tempbuf.push(38);
-        switch (c) {
-          case 9:
-          case 10:
-          case 12:
-          case 32:
-          case 60:
-          case 38:
-          case -1:
-            reconsume(c, character_reference_end_state);
-            break;
-          case 35:
-            tempbuf.push(c);
-            tokenizer = numeric_character_reference_state;
-            break;
-          default:
-            reconsume(c, named_character_reference_state);
-            break;
-        }
-      }
-      function named_character_reference_state(c) {
-        NAMEDCHARREF.lastIndex = nextchar;
-        var matched = NAMEDCHARREF.exec(chars);
-        if (!matched) throw new Error("should never happen");
-        var name = matched[1];
-        if (!name) {
-          tokenizer = character_reference_end_state;
-          return;
-        }
-        nextchar += name.length;
-        pushAll(tempbuf, str2buf(name));
-        switch (return_state) {
-          case attribute_value_double_quoted_state:
-          case attribute_value_single_quoted_state:
-          case attribute_value_unquoted_state:
-            if (name[name.length - 1] !== ";") {
-              if (/[=A-Za-z0-9]/.test(chars[nextchar])) {
-                tokenizer = character_reference_end_state;
-                return;
-              }
-            }
-            break;
-          default:
-            break;
-        }
-        beginTempBuf();
-        var rv = namedCharRefs[name];
-        if (typeof rv === "number") {
-          tempbuf.push(rv);
-        } else {
-          pushAll(tempbuf, rv);
-        }
-        tokenizer = character_reference_end_state;
-      }
-      named_character_reference_state.lookahead = -NAMEDCHARREF_MAXLEN;
-      function numeric_character_reference_state(c) {
-        character_reference_code = 0;
-        switch (c) {
-          case 120:
-          case 88:
-            tempbuf.push(c);
-            tokenizer = hexadecimal_character_reference_start_state;
-            break;
-          default:
-            reconsume(c, decimal_character_reference_start_state);
-            break;
-        }
-      }
-      function hexadecimal_character_reference_start_state(c) {
-        switch (c) {
-          case 48:
-          case 49:
-          case 50:
-          case 51:
-          case 52:
-          case 53:
-          case 54:
-          case 55:
-          case 56:
-          case 57:
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-            reconsume(c, hexadecimal_character_reference_state);
-            break;
-          default:
-            reconsume(c, character_reference_end_state);
-            break;
-        }
-      }
-      function decimal_character_reference_start_state(c) {
-        switch (c) {
-          case 48:
-          case 49:
-          case 50:
-          case 51:
-          case 52:
-          case 53:
-          case 54:
-          case 55:
-          case 56:
-          case 57:
-            reconsume(c, decimal_character_reference_state);
-            break;
-          default:
-            reconsume(c, character_reference_end_state);
-            break;
-        }
-      }
-      function hexadecimal_character_reference_state(c) {
-        switch (c) {
-          case 65:
-          case 66:
-          case 67:
-          case 68:
-          case 69:
-          case 70:
-            character_reference_code *= 16;
-            character_reference_code += c - 55;
-            break;
-          case 97:
-          case 98:
-          case 99:
-          case 100:
-          case 101:
-          case 102:
-            character_reference_code *= 16;
-            character_reference_code += c - 87;
-            break;
-          case 48:
-          case 49:
-          case 50:
-          case 51:
-          case 52:
-          case 53:
-          case 54:
-          case 55:
-          case 56:
-          case 57:
-            character_reference_code *= 16;
-            character_reference_code += c - 48;
-            break;
-          case 59:
-            tokenizer = numeric_character_reference_end_state;
-            break;
-          default:
-            reconsume(c, numeric_character_reference_end_state);
-            break;
-        }
-      }
-      function decimal_character_reference_state(c) {
-        switch (c) {
-          case 48:
-          case 49:
-          case 50:
-          case 51:
-          case 52:
-          case 53:
-          case 54:
-          case 55:
-          case 56:
-          case 57:
-            character_reference_code *= 10;
-            character_reference_code += c - 48;
-            break;
-          case 59:
-            tokenizer = numeric_character_reference_end_state;
-            break;
-          default:
-            reconsume(c, numeric_character_reference_end_state);
-            break;
-        }
-      }
-      function numeric_character_reference_end_state(c) {
-        if (character_reference_code in numericCharRefReplacements) {
-          character_reference_code = numericCharRefReplacements[character_reference_code];
-        } else if (character_reference_code > 1114111 || character_reference_code >= 55296 && character_reference_code < 57344) {
-          character_reference_code = 65533;
-        }
-        beginTempBuf();
-        if (character_reference_code <= 65535) {
-          tempbuf.push(character_reference_code);
-        } else {
-          character_reference_code = character_reference_code - 65536;
-          tempbuf.push(55296 + (character_reference_code >> 10));
-          tempbuf.push(56320 + (character_reference_code & 1023));
-        }
-        reconsume(c, character_reference_end_state);
-      }
-      function character_reference_end_state(c) {
-        switch (return_state) {
-          case attribute_value_double_quoted_state:
-          case attribute_value_single_quoted_state:
-          case attribute_value_unquoted_state:
-            attrvaluebuf += buf2str(tempbuf);
-            break;
-          default:
-            pushAll(textrun, tempbuf);
-            break;
-        }
-        reconsume(c, return_state);
-      }
-      function initial_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            value = value.replace(LEADINGWS, "");
-            if (value.length === 0) return;
-            break;
-          case 4:
-            doc._appendChild(doc.createComment(value));
-            return;
-          case 5:
-            var name = value;
-            var publicid = arg3;
-            var systemid = arg4;
-            doc.appendChild(new DocumentType(doc, name, publicid, systemid));
-            if (force_quirks || name.toLowerCase() !== "html" || quirkyPublicIds.test(publicid) || systemid && systemid.toLowerCase() === quirkySystemId || systemid === void 0 && conditionallyQuirkyPublicIds.test(publicid)) doc._quirks = true;
-            else if (limitedQuirkyPublicIds.test(publicid) || systemid !== void 0 && conditionallyQuirkyPublicIds.test(publicid)) doc._limitedQuirks = true;
-            parser = before_html_mode;
-            return;
-        }
-        doc._quirks = true;
-        parser = before_html_mode;
-        parser(t, value, arg3, arg4);
-      }
-      function before_html_mode(t, value, arg3, arg4) {
-        var elt;
-        switch (t) {
-          case 1:
-            value = value.replace(LEADINGWS, "");
-            if (value.length === 0) return;
-            break;
-          case 5:
-            return;
-          case 4:
-            doc._appendChild(doc.createComment(value));
-            return;
-          case 2:
-            if (value === "html") {
-              elt = createHTMLElt(doc, value, arg3);
-              stack.push(elt);
-              doc.appendChild(elt);
-              parser = before_head_mode;
-              return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "html":
-              case "head":
-              case "body":
-              case "br":
-                break;
-              default:
-                return;
-            }
-        }
-        elt = createHTMLElt(doc, "html", null);
-        stack.push(elt);
-        doc.appendChild(elt);
-        parser = before_head_mode;
-        parser(t, value, arg3, arg4);
-      }
-      function before_head_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            value = value.replace(LEADINGWS, "");
-            if (value.length === 0) return;
-            break;
-          case 5:
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "head":
-                var elt = insertHTMLElement(value, arg3);
-                head_element_pointer = elt;
-                parser = in_head_mode;
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "html":
-              case "head":
-              case "body":
-              case "br":
-                break;
-              default:
-                return;
-            }
-        }
-        before_head_mode(TAG, "head", null);
-        parser(t, value, arg3, arg4);
-      }
-      function in_head_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            var ws = value.match(LEADINGWS);
-            if (ws) {
-              insertText(ws[0]);
-              value = value.substring(ws[0].length);
-            }
-            if (value.length === 0) return;
-            break;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "meta":
-              case "base":
-              case "basefont":
-              case "bgsound":
-              case "link":
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                return;
-              case "title":
-                parseRCDATA(value, arg3);
-                return;
-              case "noscript":
-                if (!scripting_enabled) {
-                  insertHTMLElement(value, arg3);
-                  parser = in_head_noscript_mode;
-                  return;
-                }
-              case "noframes":
-              case "style":
-                parseRawText(value, arg3);
-                return;
-              case "script":
-                insertElement(function(doc2) {
-                  var elt = createHTMLElt(doc2, value, arg3);
-                  elt._parser_inserted = true;
-                  elt._force_async = false;
-                  if (fragment) elt._already_started = true;
-                  flushText();
-                  return elt;
-                });
-                tokenizer = script_data_state;
-                originalInsertionMode = parser;
-                parser = text_mode;
-                return;
-              case "template":
-                insertHTMLElement(value, arg3);
-                afe.insertMarker();
-                frameset_ok = false;
-                parser = in_template_mode;
-                templateInsertionModes.push(parser);
-                return;
-              case "head":
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "head":
-                stack.pop();
-                parser = after_head_mode;
-                return;
-              case "body":
-              case "html":
-              case "br":
-                break;
-              case "template":
-                if (!stack.contains("template")) {
-                  return;
-                }
-                stack.generateImpliedEndTags(null, "thorough");
-                stack.popTag("template");
-                afe.clearToMarker();
-                templateInsertionModes.pop();
-                resetInsertionMode();
-                return;
-              default:
-                return;
-            }
-            break;
-        }
-        in_head_mode(ENDTAG, "head", null);
-        parser(t, value, arg3, arg4);
-      }
-      function in_head_noscript_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 5:
-            return;
-          case 4:
-            in_head_mode(t, value);
-            return;
-          case 1:
-            var ws = value.match(LEADINGWS);
-            if (ws) {
-              in_head_mode(t, ws[0]);
-              value = value.substring(ws[0].length);
-            }
-            if (value.length === 0) return;
-            break;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "basefont":
-              case "bgsound":
-              case "link":
-              case "meta":
-              case "noframes":
-              case "style":
-                in_head_mode(t, value, arg3);
-                return;
-              case "head":
-              case "noscript":
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "noscript":
-                stack.pop();
-                parser = in_head_mode;
-                return;
-              case "br":
-                break;
-              default:
-                return;
-            }
-            break;
-        }
-        in_head_noscript_mode(ENDTAG, "noscript", null);
-        parser(t, value, arg3, arg4);
-      }
-      function after_head_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            var ws = value.match(LEADINGWS);
-            if (ws) {
-              insertText(ws[0]);
-              value = value.substring(ws[0].length);
-            }
-            if (value.length === 0) return;
-            break;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "body":
-                insertHTMLElement(value, arg3);
-                frameset_ok = false;
-                parser = in_body_mode;
-                return;
-              case "frameset":
-                insertHTMLElement(value, arg3);
-                parser = in_frameset_mode;
-                return;
-              case "base":
-              case "basefont":
-              case "bgsound":
-              case "link":
-              case "meta":
-              case "noframes":
-              case "script":
-              case "style":
-              case "template":
-              case "title":
-                stack.push(head_element_pointer);
-                in_head_mode(TAG, value, arg3);
-                stack.removeElement(head_element_pointer);
-                return;
-              case "head":
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "template":
-                return in_head_mode(t, value, arg3, arg4);
-              case "body":
-              case "html":
-              case "br":
-                break;
-              default:
-                return;
-            }
-            break;
-        }
-        after_head_mode(TAG, "body", null);
-        frameset_ok = true;
-        parser(t, value, arg3, arg4);
-      }
-      function in_body_mode(t, value, arg3, arg4) {
-        var body, i, node, elt;
-        switch (t) {
-          case 1:
-            if (textIncludesNUL) {
-              value = value.replace(NULCHARS, "");
-              if (value.length === 0) return;
-            }
-            if (frameset_ok && NONWS.test(value)) frameset_ok = false;
-            afereconstruct();
-            insertText(value);
-            return;
-          case 5:
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case -1:
-            if (templateInsertionModes.length) {
-              return in_template_mode(t);
-            }
-            stopParsing();
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                if (stack.contains("template")) {
-                  return;
-                }
-                transferAttributes(arg3, stack.elements[0]);
-                return;
-              case "base":
-              case "basefont":
-              case "bgsound":
-              case "link":
-              case "meta":
-              case "noframes":
-              case "script":
-              case "style":
-              case "template":
-              case "title":
-                in_head_mode(TAG, value, arg3);
-                return;
-              case "body":
-                body = stack.elements[1];
-                if (!body || !(body instanceof impl.HTMLBodyElement) || stack.contains("template")) return;
-                frameset_ok = false;
-                transferAttributes(arg3, body);
-                return;
-              case "frameset":
-                if (!frameset_ok) return;
-                body = stack.elements[1];
-                if (!body || !(body instanceof impl.HTMLBodyElement)) return;
-                if (body.parentNode) body.parentNode.removeChild(body);
-                while (!(stack.top instanceof impl.HTMLHtmlElement)) stack.pop();
-                insertHTMLElement(value, arg3);
-                parser = in_frameset_mode;
-                return;
-              case "address":
-              case "article":
-              case "aside":
-              case "blockquote":
-              case "center":
-              case "details":
-              case "dialog":
-              case "dir":
-              case "div":
-              case "dl":
-              case "fieldset":
-              case "figcaption":
-              case "figure":
-              case "footer":
-              case "header":
-              case "hgroup":
-              case "main":
-              case "nav":
-              case "ol":
-              case "p":
-              case "section":
-              case "summary":
-              case "ul":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                insertHTMLElement(value, arg3);
-                return;
-              case "menu":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                if (isA(stack.top, "menuitem")) {
-                  stack.pop();
-                }
-                insertHTMLElement(value, arg3);
-                return;
-              case "h1":
-              case "h2":
-              case "h3":
-              case "h4":
-              case "h5":
-              case "h6":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                if (stack.top instanceof impl.HTMLHeadingElement) stack.pop();
-                insertHTMLElement(value, arg3);
-                return;
-              case "pre":
-              case "listing":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                insertHTMLElement(value, arg3);
-                ignore_linefeed = true;
-                frameset_ok = false;
-                return;
-              case "form":
-                if (form_element_pointer && !stack.contains("template")) return;
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                elt = insertHTMLElement(value, arg3);
-                if (!stack.contains("template")) form_element_pointer = elt;
-                return;
-              case "li":
-                frameset_ok = false;
-                for (i = stack.elements.length - 1; i >= 0; i--) {
-                  node = stack.elements[i];
-                  if (node instanceof impl.HTMLLIElement) {
-                    in_body_mode(ENDTAG, "li");
-                    break;
-                  }
-                  if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;
-                }
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                insertHTMLElement(value, arg3);
-                return;
-              case "dd":
-              case "dt":
-                frameset_ok = false;
-                for (i = stack.elements.length - 1; i >= 0; i--) {
-                  node = stack.elements[i];
-                  if (isA(node, dddtSet)) {
-                    in_body_mode(ENDTAG, node.localName);
-                    break;
-                  }
-                  if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;
-                }
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                insertHTMLElement(value, arg3);
-                return;
-              case "plaintext":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                insertHTMLElement(value, arg3);
-                tokenizer = plaintext_state;
-                return;
-              case "button":
-                if (stack.inScope("button")) {
-                  in_body_mode(ENDTAG, "button");
-                  parser(t, value, arg3, arg4);
-                } else {
-                  afereconstruct();
-                  insertHTMLElement(value, arg3);
-                  frameset_ok = false;
-                }
-                return;
-              case "a":
-                var activeElement = afe.findElementByTag("a");
-                if (activeElement) {
-                  in_body_mode(ENDTAG, value);
-                  afe.remove(activeElement);
-                  stack.removeElement(activeElement);
-                }
-              case "b":
-              case "big":
-              case "code":
-              case "em":
-              case "font":
-              case "i":
-              case "s":
-              case "small":
-              case "strike":
-              case "strong":
-              case "tt":
-              case "u":
-                afereconstruct();
-                afe.push(insertHTMLElement(value, arg3), arg3);
-                return;
-              case "nobr":
-                afereconstruct();
-                if (stack.inScope(value)) {
-                  in_body_mode(ENDTAG, value);
-                  afereconstruct();
-                }
-                afe.push(insertHTMLElement(value, arg3), arg3);
-                return;
-              case "applet":
-              case "marquee":
-              case "object":
-                afereconstruct();
-                insertHTMLElement(value, arg3);
-                afe.insertMarker();
-                frameset_ok = false;
-                return;
-              case "table":
-                if (!doc._quirks && stack.inButtonScope("p")) {
-                  in_body_mode(ENDTAG, "p");
-                }
-                insertHTMLElement(value, arg3);
-                frameset_ok = false;
-                parser = in_table_mode;
-                return;
-              case "area":
-              case "br":
-              case "embed":
-              case "img":
-              case "keygen":
-              case "wbr":
-                afereconstruct();
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                frameset_ok = false;
-                return;
-              case "input":
-                afereconstruct();
-                elt = insertHTMLElement(value, arg3);
-                stack.pop();
-                var type = elt.getAttribute("type");
-                if (!type || type.toLowerCase() !== "hidden") frameset_ok = false;
-                return;
-              case "param":
-              case "source":
-              case "track":
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                return;
-              case "hr":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                if (isA(stack.top, "menuitem")) {
-                  stack.pop();
-                }
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                frameset_ok = false;
-                return;
-              case "image":
-                in_body_mode(TAG, "img", arg3, arg4);
-                return;
-              case "textarea":
-                insertHTMLElement(value, arg3);
-                ignore_linefeed = true;
-                frameset_ok = false;
-                tokenizer = rcdata_state;
-                originalInsertionMode = parser;
-                parser = text_mode;
-                return;
-              case "xmp":
-                if (stack.inButtonScope("p")) in_body_mode(ENDTAG, "p");
-                afereconstruct();
-                frameset_ok = false;
-                parseRawText(value, arg3);
-                return;
-              case "iframe":
-                frameset_ok = false;
-                parseRawText(value, arg3);
-                return;
-              case "noembed":
-                parseRawText(value, arg3);
-                return;
-              case "select":
-                afereconstruct();
-                insertHTMLElement(value, arg3);
-                frameset_ok = false;
-                if (parser === in_table_mode || parser === in_caption_mode || parser === in_table_body_mode || parser === in_row_mode || parser === in_cell_mode) parser = in_select_in_table_mode;
-                else parser = in_select_mode;
-                return;
-              case "optgroup":
-              case "option":
-                if (stack.top instanceof impl.HTMLOptionElement) {
-                  in_body_mode(ENDTAG, "option");
-                }
-                afereconstruct();
-                insertHTMLElement(value, arg3);
-                return;
-              case "menuitem":
-                if (isA(stack.top, "menuitem")) {
-                  stack.pop();
-                }
-                afereconstruct();
-                insertHTMLElement(value, arg3);
-                return;
-              case "rb":
-              case "rtc":
-                if (stack.inScope("ruby")) {
-                  stack.generateImpliedEndTags();
-                }
-                insertHTMLElement(value, arg3);
-                return;
-              case "rp":
-              case "rt":
-                if (stack.inScope("ruby")) {
-                  stack.generateImpliedEndTags("rtc");
-                }
-                insertHTMLElement(value, arg3);
-                return;
-              case "math":
-                afereconstruct();
-                adjustMathMLAttributes(arg3);
-                adjustForeignAttributes(arg3);
-                insertForeignElement(value, arg3, NAMESPACE.MATHML);
-                if (arg4) stack.pop();
-                return;
-              case "svg":
-                afereconstruct();
-                adjustSVGAttributes(arg3);
-                adjustForeignAttributes(arg3);
-                insertForeignElement(value, arg3, NAMESPACE.SVG);
-                if (arg4) stack.pop();
-                return;
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "frame":
-              case "head":
-              case "tbody":
-              case "td":
-              case "tfoot":
-              case "th":
-              case "thead":
-              case "tr":
-                return;
-            }
-            afereconstruct();
-            insertHTMLElement(value, arg3);
-            return;
-          case 3:
-            switch (value) {
-              case "template":
-                in_head_mode(ENDTAG, value, arg3);
-                return;
-              case "body":
-                if (!stack.inScope("body")) return;
-                parser = after_body_mode;
-                return;
-              case "html":
-                if (!stack.inScope("body")) return;
-                parser = after_body_mode;
-                parser(t, value, arg3);
-                return;
-              case "address":
-              case "article":
-              case "aside":
-              case "blockquote":
-              case "button":
-              case "center":
-              case "details":
-              case "dialog":
-              case "dir":
-              case "div":
-              case "dl":
-              case "fieldset":
-              case "figcaption":
-              case "figure":
-              case "footer":
-              case "header":
-              case "hgroup":
-              case "listing":
-              case "main":
-              case "menu":
-              case "nav":
-              case "ol":
-              case "pre":
-              case "section":
-              case "summary":
-              case "ul":
-                if (!stack.inScope(value)) return;
-                stack.generateImpliedEndTags();
-                stack.popTag(value);
-                return;
-              case "form":
-                if (!stack.contains("template")) {
-                  var openform = form_element_pointer;
-                  form_element_pointer = null;
-                  if (!openform || !stack.elementInScope(openform)) return;
-                  stack.generateImpliedEndTags();
-                  stack.removeElement(openform);
-                } else {
-                  if (!stack.inScope("form")) return;
-                  stack.generateImpliedEndTags();
-                  stack.popTag("form");
-                }
-                return;
-              case "p":
-                if (!stack.inButtonScope(value)) {
-                  in_body_mode(TAG, value, null);
-                  parser(t, value, arg3, arg4);
-                } else {
-                  stack.generateImpliedEndTags(value);
-                  stack.popTag(value);
-                }
-                return;
-              case "li":
-                if (!stack.inListItemScope(value)) return;
-                stack.generateImpliedEndTags(value);
-                stack.popTag(value);
-                return;
-              case "dd":
-              case "dt":
-                if (!stack.inScope(value)) return;
-                stack.generateImpliedEndTags(value);
-                stack.popTag(value);
-                return;
-              case "h1":
-              case "h2":
-              case "h3":
-              case "h4":
-              case "h5":
-              case "h6":
-                if (!stack.elementTypeInScope(impl.HTMLHeadingElement)) return;
-                stack.generateImpliedEndTags();
-                stack.popElementType(impl.HTMLHeadingElement);
-                return;
-              case "sarcasm":
-                break;
-              case "a":
-              case "b":
-              case "big":
-              case "code":
-              case "em":
-              case "font":
-              case "i":
-              case "nobr":
-              case "s":
-              case "small":
-              case "strike":
-              case "strong":
-              case "tt":
-              case "u":
-                var result = adoptionAgency(value);
-                if (result) return;
-                break;
-              case "applet":
-              case "marquee":
-              case "object":
-                if (!stack.inScope(value)) return;
-                stack.generateImpliedEndTags();
-                stack.popTag(value);
-                afe.clearToMarker();
-                return;
-              case "br":
-                in_body_mode(TAG, value, null);
-                return;
-            }
-            for (i = stack.elements.length - 1; i >= 0; i--) {
-              node = stack.elements[i];
-              if (isA(node, value)) {
-                stack.generateImpliedEndTags(value);
-                stack.popElement(node);
-                break;
-              } else if (isA(node, specialSet)) {
-                return;
-              }
-            }
-            return;
-        }
-      }
-      function text_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            insertText(value);
-            return;
-          case -1:
-            if (stack.top instanceof impl.HTMLScriptElement) stack.top._already_started = true;
-            stack.pop();
-            parser = originalInsertionMode;
-            parser(t);
-            return;
-          case 3:
-            if (value === "script") {
-              handleScriptEnd();
-            } else {
-              stack.pop();
-              parser = originalInsertionMode;
-            }
-            return;
-          default:
-            return;
-        }
-      }
-      function in_table_mode(t, value, arg3, arg4) {
-        function getTypeAttr(attrs) {
-          for (var i = 0, n = attrs.length; i < n; i++) {
-            if (attrs[i][0] === "type") return attrs[i][1].toLowerCase();
-          }
-          return null;
-        }
-        switch (t) {
-          case 1:
-            if (text_integration_mode) {
-              in_body_mode(t, value, arg3, arg4);
-              return;
-            } else if (isA(stack.top, tablesectionrowSet)) {
-              pending_table_text = [];
-              originalInsertionMode = parser;
-              parser = in_table_text_mode;
-              parser(t, value, arg3, arg4);
-              return;
-            }
-            break;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case 2:
-            switch (value) {
-              case "caption":
-                stack.clearToContext(tableContextSet);
-                afe.insertMarker();
-                insertHTMLElement(value, arg3);
-                parser = in_caption_mode;
-                return;
-              case "colgroup":
-                stack.clearToContext(tableContextSet);
-                insertHTMLElement(value, arg3);
-                parser = in_column_group_mode;
-                return;
-              case "col":
-                in_table_mode(TAG, "colgroup", null);
-                parser(t, value, arg3, arg4);
-                return;
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                stack.clearToContext(tableContextSet);
-                insertHTMLElement(value, arg3);
-                parser = in_table_body_mode;
-                return;
-              case "td":
-              case "th":
-              case "tr":
-                in_table_mode(TAG, "tbody", null);
-                parser(t, value, arg3, arg4);
-                return;
-              case "table":
-                if (!stack.inTableScope(value)) {
-                  return;
-                }
-                in_table_mode(ENDTAG, value);
-                parser(t, value, arg3, arg4);
-                return;
-              case "style":
-              case "script":
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-              case "input":
-                var type = getTypeAttr(arg3);
-                if (type !== "hidden") break;
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                return;
-              case "form":
-                if (form_element_pointer || stack.contains("template")) return;
-                form_element_pointer = insertHTMLElement(value, arg3);
-                stack.popElement(form_element_pointer);
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "table":
-                if (!stack.inTableScope(value)) return;
-                stack.popTag(value);
-                resetInsertionMode();
-                return;
-              case "body":
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "html":
-              case "tbody":
-              case "td":
-              case "tfoot":
-              case "th":
-              case "thead":
-              case "tr":
-                return;
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case -1:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-        }
-        foster_parent_mode = true;
-        in_body_mode(t, value, arg3, arg4);
-        foster_parent_mode = false;
-      }
-      function in_table_text_mode(t, value, arg3, arg4) {
-        if (t === TEXT) {
-          if (textIncludesNUL) {
-            value = value.replace(NULCHARS, "");
-            if (value.length === 0) return;
-          }
-          pending_table_text.push(value);
-        } else {
-          var s = pending_table_text.join("");
-          pending_table_text.length = 0;
-          if (NONWS.test(s)) {
-            foster_parent_mode = true;
-            in_body_mode(TEXT, s);
-            foster_parent_mode = false;
-          } else {
-            insertText(s);
-          }
-          parser = originalInsertionMode;
-          parser(t, value, arg3, arg4);
-        }
-      }
-      function in_caption_mode(t, value, arg3, arg4) {
-        function end_caption() {
-          if (!stack.inTableScope("caption")) return false;
-          stack.generateImpliedEndTags();
-          stack.popTag("caption");
-          afe.clearToMarker();
-          parser = in_table_mode;
-          return true;
-        }
-        switch (t) {
-          case 2:
-            switch (value) {
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "tbody":
-              case "td":
-              case "tfoot":
-              case "th":
-              case "thead":
-              case "tr":
-                if (end_caption()) parser(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "caption":
-                end_caption();
-                return;
-              case "table":
-                if (end_caption()) parser(t, value, arg3, arg4);
-                return;
-              case "body":
-              case "col":
-              case "colgroup":
-              case "html":
-              case "tbody":
-              case "td":
-              case "tfoot":
-              case "th":
-              case "thead":
-              case "tr":
-                return;
-            }
-            break;
-        }
-        in_body_mode(t, value, arg3, arg4);
-      }
-      function in_column_group_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            var ws = value.match(LEADINGWS);
-            if (ws) {
-              insertText(ws[0]);
-              value = value.substring(ws[0].length);
-            }
-            if (value.length === 0) return;
-            break;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "col":
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                return;
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "colgroup":
-                if (!isA(stack.top, "colgroup")) {
-                  return;
-                }
-                stack.pop();
-                parser = in_table_mode;
-                return;
-              case "col":
-                return;
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case -1:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-        }
-        if (!isA(stack.top, "colgroup")) {
-          return;
-        }
-        in_column_group_mode(ENDTAG, "colgroup");
-        parser(t, value, arg3, arg4);
-      }
-      function in_table_body_mode(t, value, arg3, arg4) {
-        function endsect() {
-          if (!stack.inTableScope("tbody") && !stack.inTableScope("thead") && !stack.inTableScope("tfoot")) return;
-          stack.clearToContext(tableBodyContextSet);
-          in_table_body_mode(ENDTAG, stack.top.localName, null);
-          parser(t, value, arg3, arg4);
-        }
-        switch (t) {
-          case 2:
-            switch (value) {
-              case "tr":
-                stack.clearToContext(tableBodyContextSet);
-                insertHTMLElement(value, arg3);
-                parser = in_row_mode;
-                return;
-              case "th":
-              case "td":
-                in_table_body_mode(TAG, "tr", null);
-                parser(t, value, arg3, arg4);
-                return;
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                endsect();
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "table":
-                endsect();
-                return;
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                if (stack.inTableScope(value)) {
-                  stack.clearToContext(tableBodyContextSet);
-                  stack.pop();
-                  parser = in_table_mode;
-                }
-                return;
-              case "body":
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "html":
-              case "td":
-              case "th":
-              case "tr":
-                return;
-            }
-            break;
-        }
-        in_table_mode(t, value, arg3, arg4);
-      }
-      function in_row_mode(t, value, arg3, arg4) {
-        function endrow() {
-          if (!stack.inTableScope("tr")) return false;
-          stack.clearToContext(tableRowContextSet);
-          stack.pop();
-          parser = in_table_body_mode;
-          return true;
-        }
-        switch (t) {
-          case 2:
-            switch (value) {
-              case "th":
-              case "td":
-                stack.clearToContext(tableRowContextSet);
-                insertHTMLElement(value, arg3);
-                parser = in_cell_mode;
-                afe.insertMarker();
-                return;
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "tbody":
-              case "tfoot":
-              case "thead":
-              case "tr":
-                if (endrow()) parser(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "tr":
-                endrow();
-                return;
-              case "table":
-                if (endrow()) parser(t, value, arg3, arg4);
-                return;
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                if (stack.inTableScope(value)) {
-                  if (endrow()) parser(t, value, arg3, arg4);
-                }
-                return;
-              case "body":
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "html":
-              case "td":
-              case "th":
-                return;
-            }
-            break;
-        }
-        in_table_mode(t, value, arg3, arg4);
-      }
-      function in_cell_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 2:
-            switch (value) {
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "tbody":
-              case "td":
-              case "tfoot":
-              case "th":
-              case "thead":
-              case "tr":
-                if (stack.inTableScope("td")) {
-                  in_cell_mode(ENDTAG, "td");
-                  parser(t, value, arg3, arg4);
-                } else if (stack.inTableScope("th")) {
-                  in_cell_mode(ENDTAG, "th");
-                  parser(t, value, arg3, arg4);
-                }
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "td":
-              case "th":
-                if (!stack.inTableScope(value)) return;
-                stack.generateImpliedEndTags();
-                stack.popTag(value);
-                afe.clearToMarker();
-                parser = in_row_mode;
-                return;
-              case "body":
-              case "caption":
-              case "col":
-              case "colgroup":
-              case "html":
-                return;
-              case "table":
-              case "tbody":
-              case "tfoot":
-              case "thead":
-              case "tr":
-                if (!stack.inTableScope(value)) return;
-                in_cell_mode(ENDTAG, stack.inTableScope("td") ? "td" : "th");
-                parser(t, value, arg3, arg4);
-                return;
-            }
-            break;
-        }
-        in_body_mode(t, value, arg3, arg4);
-      }
-      function in_select_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            if (textIncludesNUL) {
-              value = value.replace(NULCHARS, "");
-              if (value.length === 0) return;
-            }
-            insertText(value);
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case -1:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "option":
-                if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, value);
-                insertHTMLElement(value, arg3);
-                return;
-              case "optgroup":
-                if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, "option");
-                if (stack.top instanceof impl.HTMLOptGroupElement) in_select_mode(ENDTAG, value);
-                insertHTMLElement(value, arg3);
-                return;
-              case "select":
-                in_select_mode(ENDTAG, value);
-                return;
-              case "input":
-              case "keygen":
-              case "textarea":
-                if (!stack.inSelectScope("select")) return;
-                in_select_mode(ENDTAG, "select");
-                parser(t, value, arg3, arg4);
-                return;
-              case "script":
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            switch (value) {
-              case "optgroup":
-                if (stack.top instanceof impl.HTMLOptionElement && stack.elements[stack.elements.length - 2] instanceof impl.HTMLOptGroupElement) {
-                  in_select_mode(ENDTAG, "option");
-                }
-                if (stack.top instanceof impl.HTMLOptGroupElement) stack.pop();
-                return;
-              case "option":
-                if (stack.top instanceof impl.HTMLOptionElement) stack.pop();
-                return;
-              case "select":
-                if (!stack.inSelectScope(value)) return;
-                stack.popTag(value);
-                resetInsertionMode();
-                return;
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-        }
-      }
-      function in_select_in_table_mode(t, value, arg3, arg4) {
-        switch (value) {
-          case "caption":
-          case "table":
-          case "tbody":
-          case "tfoot":
-          case "thead":
-          case "tr":
-          case "td":
-          case "th":
-            switch (t) {
-              case 2:
-                in_select_in_table_mode(ENDTAG, "select");
-                parser(t, value, arg3, arg4);
-                return;
-              case 3:
-                if (stack.inTableScope(value)) {
-                  in_select_in_table_mode(ENDTAG, "select");
-                  parser(t, value, arg3, arg4);
-                }
-                return;
-            }
-        }
-        in_select_mode(t, value, arg3, arg4);
-      }
-      function in_template_mode(t, value, arg3, arg4) {
-        function switchModeAndReprocess(mode) {
-          parser = mode;
-          templateInsertionModes[templateInsertionModes.length - 1] = parser;
-          parser(t, value, arg3, arg4);
-        }
-        switch (t) {
-          case 1:
-          case 4:
-          case 5:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-          case -1:
-            if (!stack.contains("template")) {
-              stopParsing();
-            } else {
-              stack.popTag("template");
-              afe.clearToMarker();
-              templateInsertionModes.pop();
-              resetInsertionMode();
-              parser(t, value, arg3, arg4);
-            }
-            return;
-          case 2:
-            switch (value) {
-              case "base":
-              case "basefont":
-              case "bgsound":
-              case "link":
-              case "meta":
-              case "noframes":
-              case "script":
-              case "style":
-              case "template":
-              case "title":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-              case "caption":
-              case "colgroup":
-              case "tbody":
-              case "tfoot":
-              case "thead":
-                switchModeAndReprocess(in_table_mode);
-                return;
-              case "col":
-                switchModeAndReprocess(in_column_group_mode);
-                return;
-              case "tr":
-                switchModeAndReprocess(in_table_body_mode);
-                return;
-              case "td":
-              case "th":
-                switchModeAndReprocess(in_row_mode);
-                return;
-            }
-            switchModeAndReprocess(in_body_mode);
-            return;
-          case 3:
-            switch (value) {
-              case "template":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-              default:
-                return;
-            }
-        }
-      }
-      function after_body_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            if (NONWS.test(value)) break;
-            in_body_mode(t, value);
-            return;
-          case 4:
-            stack.elements[0]._appendChild(doc.createComment(value));
-            return;
-          case 5:
-            return;
-          case -1:
-            stopParsing();
-            return;
-          case 2:
-            if (value === "html") {
-              in_body_mode(t, value, arg3, arg4);
-              return;
-            }
-            break;
-          case 3:
-            if (value === "html") {
-              if (fragment) return;
-              parser = after_after_body_mode;
-              return;
-            }
-            break;
-        }
-        parser = in_body_mode;
-        parser(t, value, arg3, arg4);
-      }
-      function in_frameset_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            value = value.replace(ALLNONWS, "");
-            if (value.length > 0) insertText(value);
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case -1:
-            stopParsing();
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "frameset":
-                insertHTMLElement(value, arg3);
-                return;
-              case "frame":
-                insertHTMLElement(value, arg3);
-                stack.pop();
-                return;
-              case "noframes":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            if (value === "frameset") {
-              if (fragment && stack.top instanceof impl.HTMLHtmlElement) return;
-              stack.pop();
-              if (!fragment && !(stack.top instanceof impl.HTMLFrameSetElement)) parser = after_frameset_mode;
-              return;
-            }
-            break;
-        }
-      }
-      function after_frameset_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            value = value.replace(ALLNONWS, "");
-            if (value.length > 0) insertText(value);
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case -1:
-            stopParsing();
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "noframes":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-          case 3:
-            if (value === "html") {
-              parser = after_after_frameset_mode;
-              return;
-            }
-            break;
-        }
-      }
-      function after_after_body_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            if (NONWS.test(value)) break;
-            in_body_mode(t, value, arg3, arg4);
-            return;
-          case 4:
-            doc._appendChild(doc.createComment(value));
-            return;
-          case 5:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-          case -1:
-            stopParsing();
-            return;
-          case 2:
-            if (value === "html") {
-              in_body_mode(t, value, arg3, arg4);
-              return;
-            }
-            break;
-        }
-        parser = in_body_mode;
-        parser(t, value, arg3, arg4);
-      }
-      function after_after_frameset_mode(t, value, arg3, arg4) {
-        switch (t) {
-          case 1:
-            value = value.replace(ALLNONWS, "");
-            if (value.length > 0) in_body_mode(t, value, arg3, arg4);
-            return;
-          case 4:
-            doc._appendChild(doc.createComment(value));
-            return;
-          case 5:
-            in_body_mode(t, value, arg3, arg4);
-            return;
-          case -1:
-            stopParsing();
-            return;
-          case 2:
-            switch (value) {
-              case "html":
-                in_body_mode(t, value, arg3, arg4);
-                return;
-              case "noframes":
-                in_head_mode(t, value, arg3, arg4);
-                return;
-            }
-            break;
-        }
-      }
-      function insertForeignToken(t, value, arg3, arg4) {
-        function isHTMLFont(attrs) {
-          for (var i2 = 0, n = attrs.length; i2 < n; i2++) {
-            switch (attrs[i2][0]) {
-              case "color":
-              case "face":
-              case "size":
-                return true;
-            }
-          }
-          return false;
-        }
-        var current;
-        switch (t) {
-          case 1:
-            if (frameset_ok && NONWSNONNUL.test(value)) frameset_ok = false;
-            if (textIncludesNUL) {
-              value = value.replace(NULCHARS, "�");
-            }
-            insertText(value);
-            return;
-          case 4:
-            insertComment(value);
-            return;
-          case 5:
-            return;
-          case 2:
-            switch (value) {
-              case "font":
-                if (!isHTMLFont(arg3)) break;
-              case "b":
-              case "big":
-              case "blockquote":
-              case "body":
-              case "br":
-              case "center":
-              case "code":
-              case "dd":
-              case "div":
-              case "dl":
-              case "dt":
-              case "em":
-              case "embed":
-              case "h1":
-              case "h2":
-              case "h3":
-              case "h4":
-              case "h5":
-              case "h6":
-              case "head":
-              case "hr":
-              case "i":
-              case "img":
-              case "li":
-              case "listing":
-              case "menu":
-              case "meta":
-              case "nobr":
-              case "ol":
-              case "p":
-              case "pre":
-              case "ruby":
-              case "s":
-              case "small":
-              case "span":
-              case "strong":
-              case "strike":
-              case "sub":
-              case "sup":
-              case "table":
-              case "tt":
-              case "u":
-              case "ul":
-              case "var":
-                if (fragment) {
-                  break;
-                }
-                do {
-                  stack.pop();
-                  current = stack.top;
-                } while (current.namespaceURI !== NAMESPACE.HTML && !isMathmlTextIntegrationPoint(current) && !isHTMLIntegrationPoint(current));
-                insertToken(t, value, arg3, arg4);
-                return;
-            }
-            current = stack.elements.length === 1 && fragment ? fragmentContext : stack.top;
-            if (current.namespaceURI === NAMESPACE.MATHML) {
-              adjustMathMLAttributes(arg3);
-            } else if (current.namespaceURI === NAMESPACE.SVG) {
-              value = adjustSVGTagName(value);
-              adjustSVGAttributes(arg3);
-            }
-            adjustForeignAttributes(arg3);
-            insertForeignElement(value, arg3, current.namespaceURI);
-            if (arg4) {
-              if (value === "script" && current.namespaceURI === NAMESPACE.SVG) {
-              }
-              stack.pop();
-            }
-            return;
-          case 3:
-            current = stack.top;
-            if (value === "script" && current.namespaceURI === NAMESPACE.SVG && current.localName === "script") {
-              stack.pop();
-            } else {
-              var i = stack.elements.length - 1;
-              var node = stack.elements[i];
-              for (; ; ) {
-                if (node.localName.toLowerCase() === value) {
-                  stack.popElement(node);
-                  break;
-                }
-                node = stack.elements[--i];
-                if (node.namespaceURI !== NAMESPACE.HTML) continue;
-                parser(t, value, arg3, arg4);
-                break;
-              }
-            }
-            return;
-        }
-      }
-      htmlparser.testTokenizer = function(input, initialState, lastStartTag, charbychar) {
-        var tokens = [];
-        switch (initialState) {
-          case "PCDATA state":
-            tokenizer = data_state;
-            break;
-          case "RCDATA state":
-            tokenizer = rcdata_state;
-            break;
-          case "RAWTEXT state":
-            tokenizer = rawtext_state;
-            break;
-          case "PLAINTEXT state":
-            tokenizer = plaintext_state;
-            break;
-        }
-        if (lastStartTag) {
-          lasttagname = lastStartTag;
-        }
-        insertToken = function(t, value, arg3, arg4) {
-          flushText();
-          switch (t) {
-            case 1:
-              if (tokens.length > 0 && tokens[tokens.length - 1][0] === "Character") {
-                tokens[tokens.length - 1][1] += value;
-              } else tokens.push(["Character", value]);
-              break;
-            case 4:
-              tokens.push(["Comment", value]);
-              break;
-            case 5:
-              tokens.push(["DOCTYPE", value, arg3 === void 0 ? null : arg3, arg4 === void 0 ? null : arg4, !force_quirks]);
-              break;
-            case 2:
-              var attrs = /* @__PURE__ */ Object.create(null);
-              for (var i2 = 0; i2 < arg3.length; i2++) {
-                var a = arg3[i2];
-                if (a.length === 1) {
-                  attrs[a[0]] = "";
-                } else {
-                  attrs[a[0]] = a[1];
-                }
-              }
-              var token = ["StartTag", value, attrs];
-              if (arg4) token.push(true);
-              tokens.push(token);
-              break;
-            case 3:
-              tokens.push(["EndTag", value]);
-              break;
-            case -1:
-              break;
-          }
-        };
-        if (!charbychar) {
-          this.parse(input, true);
-        } else {
-          for (var i = 0; i < input.length; i++) {
-            this.parse(input[i]);
-          }
-          this.parse("", true);
-        }
-        return tokens;
-      };
-      return htmlparser;
-    }
-  }
-});
-var require_DOMImplementation = __commonJS({
-  "external/npm/node_modules/domino/lib/DOMImplementation.js"(exports, module) {
-    "use strict";
-    module.exports = DOMImplementation;
-    var Document2 = require_Document();
-    var DocumentType = require_DocumentType();
-    var HTMLParser = require_HTMLParser();
-    var utils = require_utils();
-    var xml = require_xmlnames();
-    function DOMImplementation(contextObject) {
-      this.contextObject = contextObject;
-    }
-    var supportedFeatures = {
-      "xml": {
-        "": true,
-        "1.0": true,
-        "2.0": true
-      },
-      "core": {
-        "": true,
-        "2.0": true
-      },
-      "html": {
-        "": true,
-        "1.0": true,
-        "2.0": true
-      },
-      "xhtml": {
-        "": true,
-        "1.0": true,
-        "2.0": true
-      }
-    };
-    DOMImplementation.prototype = {
-      hasFeature: function hasFeature(feature, version) {
-        var f = supportedFeatures[(feature || "").toLowerCase()];
-        return f && f[version || ""] || false;
-      },
-      createDocumentType: function createDocumentType(qualifiedName, publicId, systemId) {
-        if (!xml.isValidQName(qualifiedName)) utils.InvalidCharacterError();
-        return new DocumentType(this.contextObject, qualifiedName, publicId, systemId);
-      },
-      createDocument: function createDocument(namespace, qualifiedName, doctype) {
-        var d = new Document2(false, null);
-        var e;
-        if (qualifiedName) e = d.createElementNS(namespace, qualifiedName);
-        else e = null;
-        if (doctype) {
-          d.appendChild(doctype);
-        }
-        if (e) d.appendChild(e);
-        if (namespace === utils.NAMESPACE.HTML) {
-          d._contentType = "application/xhtml+xml";
-        } else if (namespace === utils.NAMESPACE.SVG) {
-          d._contentType = "image/svg+xml";
-        } else {
-          d._contentType = "application/xml";
-        }
-        return d;
-      },
-      createHTMLDocument: function createHTMLDocument(titleText) {
-        var d = new Document2(true, null);
-        d.appendChild(new DocumentType(d, "html"));
-        var html = d.createElement("html");
-        d.appendChild(html);
-        var head = d.createElement("head");
-        html.appendChild(head);
-        if (titleText !== void 0) {
-          var title = d.createElement("title");
-          head.appendChild(title);
-          title.appendChild(d.createTextNode(titleText));
-        }
-        html.appendChild(d.createElement("body"));
-        d.modclock = 1;
-        return d;
-      },
-      mozSetOutputMutationHandler: function(doc, handler) {
-        doc.mutationHandler = handler;
-      },
-      mozGetInputMutationHandler: function(doc) {
-        utils.nyi();
-      },
-      mozHTMLParser: HTMLParser
-    };
-  }
-});
-var require_Location = __commonJS({
-  "external/npm/node_modules/domino/lib/Location.js"(exports, module) {
-    "use strict";
-    var URL2 = require_URL();
-    var URLUtils = require_URLUtils();
-    module.exports = Location;
-    function Location(window2, href) {
-      this._window = window2;
-      this._href = href;
-    }
-    Location.prototype = Object.create(URLUtils.prototype, {
-      constructor: {
-        value: Location
-      },
-      href: {
-        get: function() {
-          return this._href;
-        },
-        set: function(v) {
-          this.assign(v);
-        }
-      },
-      assign: {
-        value: function(url) {
-          var current = new URL2(this._href);
-          var newurl = current.resolve(url);
-          this._href = newurl;
-        }
-      },
-      replace: {
-        value: function(url) {
-          this.assign(url);
-        }
-      },
-      reload: {
-        value: function() {
-          this.assign(this.href);
-        }
-      },
-      toString: {
-        value: function() {
-          return this.href;
-        }
-      }
-    });
-  }
-});
-var require_NavigatorID = __commonJS({
-  "external/npm/node_modules/domino/lib/NavigatorID.js"(exports, module) {
-    "use strict";
-    var NavigatorID = Object.create(null, {
-      appCodeName: {
-        value: "Mozilla"
-      },
-      appName: {
-        value: "Netscape"
-      },
-      appVersion: {
-        value: "4.0"
-      },
-      platform: {
-        value: ""
-      },
-      product: {
-        value: "Gecko"
-      },
-      productSub: {
-        value: "20100101"
-      },
-      userAgent: {
-        value: ""
-      },
-      vendor: {
-        value: ""
-      },
-      vendorSub: {
-        value: ""
-      },
-      taintEnabled: {
-        value: function() {
-          return false;
-        }
-      }
-    });
-    module.exports = NavigatorID;
-  }
-});
-var require_WindowTimers = __commonJS({
-  "external/npm/node_modules/domino/lib/WindowTimers.js"(exports, module) {
-    "use strict";
-    var WindowTimers = {
-      setTimeout,
-      clearTimeout,
-      setInterval,
-      clearInterval
-    };
-    module.exports = WindowTimers;
-  }
-});
-var require_impl = __commonJS({
-  "external/npm/node_modules/domino/lib/impl.js"(exports, module) {
-    "use strict";
-    var utils = require_utils();
-    exports = module.exports = {
-      CSSStyleDeclaration: require_CSSStyleDeclaration(),
-      CharacterData: require_CharacterData(),
-      Comment: require_Comment(),
-      DOMException: require_DOMException(),
-      DOMImplementation: require_DOMImplementation(),
-      DOMTokenList: require_DOMTokenList(),
-      Document: require_Document(),
-      DocumentFragment: require_DocumentFragment(),
-      DocumentType: require_DocumentType(),
-      Element: require_Element(),
-      HTMLParser: require_HTMLParser(),
-      NamedNodeMap: require_NamedNodeMap(),
-      Node: require_Node(),
-      NodeList: require_NodeList(),
-      NodeFilter: require_NodeFilter(),
-      ProcessingInstruction: require_ProcessingInstruction(),
-      Text: require_Text(),
-      Window: require_Window()
-    };
-    utils.merge(exports, require_events());
-    utils.merge(exports, require_htmlelts().elements);
-    utils.merge(exports, require_svg().elements);
-  }
-});
-var require_Window = __commonJS({
-  "external/npm/node_modules/domino/lib/Window.js"(exports, module) {
-    "use strict";
-    var DOMImplementation = require_DOMImplementation();
-    var EventTarget = require_EventTarget();
-    var Location = require_Location();
-    var utils = require_utils();
-    module.exports = Window;
-    function Window(document2) {
-      this.document = document2 || new DOMImplementation(null).createHTMLDocument("");
-      this.document._scripting_enabled = true;
-      this.document.defaultView = this;
-      this.location = new Location(this, this.document._address || "about:blank");
-    }
-    Window.prototype = Object.create(EventTarget.prototype, {
-      console: {
-        value: console
-      },
-      history: {
-        value: {
-          back: utils.nyi,
-          forward: utils.nyi,
-          go: utils.nyi
-        }
-      },
-      navigator: {
-        value: require_NavigatorID()
-      },
-      window: {
-        get: function() {
-          return this;
-        }
-      },
-      self: {
-        get: function() {
-          return this;
-        }
-      },
-      frames: {
-        get: function() {
-          return this;
-        }
-      },
-      parent: {
-        get: function() {
-          return this;
-        }
-      },
-      top: {
-        get: function() {
-          return this;
-        }
-      },
-      length: {
-        value: 0
-      },
-      frameElement: {
-        value: null
-      },
-      opener: {
-        value: null
-      },
-      onload: {
-        get: function() {
-          return this._getEventHandler("load");
-        },
-        set: function(v) {
-          this._setEventHandler("load", v);
-        }
-      },
-      getComputedStyle: {
-        value: function getComputedStyle(elt) {
-          return elt.style;
-        }
-      }
-    });
-    utils.expose(require_WindowTimers(), Window);
-    utils.expose(require_impl(), Window);
-  }
-});
-var require_lib = __commonJS({
-  "external/npm/node_modules/domino/lib/index.js"(exports) {
-    var DOMImplementation = require_DOMImplementation();
-    var HTMLParser = require_HTMLParser();
-    var Window = require_Window();
-    var impl = require_impl();
-    exports.createDOMImplementation = function() {
-      return new DOMImplementation(null);
-    };
-    exports.createDocument = function(html, force) {
-      if (html || force) {
-        var parser = new HTMLParser();
-        parser.parse(html || "", true);
-        return parser.document();
-      }
-      return new DOMImplementation(null).createHTMLDocument("");
-    };
-    exports.createIncrementalHTMLParser = function() {
-      var parser = new HTMLParser();
-      return {
-        write: function(s) {
-          if (s.length > 0) {
-            parser.parse(s, false, function() {
-              return true;
-            });
-          }
-        },
-        end: function(s) {
-          parser.parse(s || "", true, function() {
-            return true;
-          });
-        },
-        process: function(shouldPauseFunc) {
-          return parser.parse("", false, shouldPauseFunc);
-        },
-        document: function() {
-          return parser.document();
-        }
-      };
-    };
-    exports.createWindow = function(html, address) {
-      var document2 = exports.createDocument(html);
-      if (address !== void 0) {
-        document2._address = address;
-      }
-      return new impl.Window(document2);
-    };
-    exports.impl = impl;
-  }
-});
-var domino = require_lib();
-function setDomTypes() {
-  Object.assign(globalThis, domino.impl);
-  globalThis["KeyboardEvent"] = domino.impl.Event;
-}
-function parseDocument(html, url = "/") {
-  let window2 = domino.createWindow(html, url);
-  let doc = window2.document;
-  return doc;
-}
-function serializeDocument(doc) {
-  return doc.serialize();
-}
-var DominoAdapter = class _DominoAdapter extends BrowserDomAdapter {
-  static makeCurrent() {
-    setDomTypes();
-    setRootDomAdapter(new _DominoAdapter());
-  }
-  supportsDOMEvents = false;
-  static defaultDoc;
-  createHtmlDocument() {
-    return parseDocument("<html><head><title>fakeTitle</title></head><body></body></html>");
-  }
-  getDefaultDocument() {
-    if (!_DominoAdapter.defaultDoc) {
-      _DominoAdapter.defaultDoc = domino.createDocument();
-    }
-    return _DominoAdapter.defaultDoc;
-  }
-  isElementNode(node) {
-    return node ? node.nodeType === _DominoAdapter.defaultDoc.ELEMENT_NODE : false;
-  }
-  isShadowRoot(node) {
-    return node.shadowRoot == node;
-  }
-  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */
-  getGlobalEventTarget(doc, target) {
-    if (target === "window") {
-      return doc.defaultView;
-    }
-    if (target === "document") {
-      return doc;
-    }
-    if (target === "body") {
-      return doc.body;
-    }
-    return null;
-  }
-  getBaseHref(doc) {
-    return doc.documentElement.querySelector("base")?.getAttribute("href") || "";
-  }
-  dispatchEvent(el, evt) {
-    el.dispatchEvent(evt);
-    const doc = el.ownerDocument || el;
-    const win = doc.defaultView;
-    if (win) {
-      win.dispatchEvent(evt);
-    }
-  }
-  getUserAgent() {
-    return "Fake user agent";
-  }
-  getCookie(name) {
-    throw new Error("getCookie has not been implemented");
-  }
-};
-var INITIAL_CONFIG = new InjectionToken("Server.INITIAL_CONFIG");
-var BEFORE_APP_SERIALIZED = new InjectionToken("Server.RENDER_MODULE_HOOK");
-var ENABLE_DOM_EMULATION = new InjectionToken("ENABLE_DOM_EMULATION");
-var PlatformState = class _PlatformState {
-  _doc;
-  /* @internal */
-  _enableDomEmulation = enableDomEmulation(inject(Injector));
-  constructor(_doc) {
-    this._doc = _doc;
-  }
-  /**
-   * Renders the current state of the platform to string.
-   */
-  renderToString() {
-    if (ngDevMode && !this._enableDomEmulation && !window?.document) {
-      throw new Error("Disabled DOM emulation should only run in browser environments");
-    }
-    const measuringLabel = "renderToString";
-    startMeasuring(measuringLabel);
-    const rendered = this._enableDomEmulation ? serializeDocument(this._doc) : (
-      // In the case we run/test the platform-server in a browser environment
-      this._doc.documentElement.outerHTML
-    );
-    stopMeasuring(measuringLabel);
-    return rendered;
-  }
-  /**
-   * Returns the current DOM state.
-   */
-  getDocument() {
-    return this._doc;
-  }
-  static ɵfac = function PlatformState_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformState)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformState,
-    factory: _PlatformState.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformState, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function enableDomEmulation(injector) {
-  return injector.get(ENABLE_DOM_EMULATION, true);
-}
-var ServerXhr = class _ServerXhr {
-  xhrImpl;
-  // The `xhr2` dependency has a side-effect of accessing and modifying a
-  // global scope. Loading `xhr2` dynamically allows us to delay the loading
-  // and start the process once the global scope is established by the underlying
-  // server platform (via shims, etc).
-  ɵloadImpl() {
-    return __async(this, null, function* () {
-      if (!this.xhrImpl) {
-        const {
-          default: xhr
-        } = yield import("./xhr2-TXIMV6CV.js");
-        this.xhrImpl = xhr;
-      }
-    });
-  }
-  build() {
-    const impl = this.xhrImpl;
-    if (!impl) {
-      throw new Error("Unexpected state in ServerXhr: XHR implementation is not loaded.");
-    }
-    return new impl.XMLHttpRequest();
-  }
-  static ɵfac = function ServerXhr_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ServerXhr)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ServerXhr,
-    factory: _ServerXhr.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ServerXhr, [{
-    type: Injectable
-  }], null, null);
-})();
-function relativeUrlsTransformerInterceptorFn(request, next) {
-  const platformLocation = inject(PlatformLocation);
-  const {
-    href,
-    protocol,
-    hostname,
-    port
-  } = platformLocation;
-  if (!protocol.startsWith("http")) {
-    return next(request);
-  }
-  let urlPrefix = `${protocol}//${hostname}`;
-  if (port) {
-    urlPrefix += `:${port}`;
-  }
-  const baseHref = platformLocation.getBaseHrefFromDOM() || href;
-  const baseUrl = new URL(baseHref, urlPrefix);
-  const newUrl = new URL(request.url, baseUrl).toString();
-  return next(request.clone({
-    url: newUrl
-  }));
-}
-var SERVER_HTTP_PROVIDERS = [{
-  provide: XhrFactory,
-  useClass: ServerXhr
-}, {
-  provide: HTTP_ROOT_INTERCEPTOR_FNS,
-  useValue: relativeUrlsTransformerInterceptorFn,
-  multi: true
-}];
-var RESOLVE_PROTOCOL = "resolve:";
-function parseUrl(urlStr) {
-  const {
-    hostname,
-    protocol,
-    port,
-    pathname,
-    search,
-    hash
-  } = new URL(urlStr, RESOLVE_PROTOCOL + "//");
-  return {
-    hostname,
-    protocol: protocol === RESOLVE_PROTOCOL ? "" : protocol,
-    port,
-    pathname,
-    search,
-    hash
-  };
-}
-var ServerPlatformLocation = class _ServerPlatformLocation {
-  _doc;
-  href = "/";
-  hostname = "/";
-  protocol = "/";
-  port = "/";
-  pathname = "/";
-  search = "";
-  hash = "";
-  _hashUpdate = new import_rxjs.Subject();
-  constructor(_doc, _config) {
-    this._doc = _doc;
-    const config = _config;
-    if (!config) {
-      return;
-    }
-    if (config.url) {
-      const url = parseUrl(config.url);
-      this.protocol = url.protocol;
-      this.hostname = url.hostname;
-      this.port = url.port;
-      this.pathname = url.pathname;
-      this.search = url.search;
-      this.hash = url.hash;
-      this.href = _doc.location.href;
-    }
-  }
-  getBaseHrefFromDOM() {
-    return getDOM().getBaseHref(this._doc);
-  }
-  onPopState(fn) {
-    return () => {
-    };
-  }
-  onHashChange(fn) {
-    const subscription = this._hashUpdate.subscribe(fn);
-    return () => subscription.unsubscribe();
-  }
-  get url() {
-    return `${this.pathname}${this.search}${this.hash}`;
-  }
-  setHash(value, oldUrl) {
-    if (this.hash === value) {
-      return;
-    }
-    this.hash = value;
-    const newUrl = this.url;
-    queueMicrotask(() => this._hashUpdate.next({
-      type: "hashchange",
-      state: null,
-      oldUrl,
-      newUrl
-    }));
-  }
-  replaceState(state, title, newUrl) {
-    const oldUrl = this.url;
-    const parsedUrl = parseUrl(newUrl);
-    this.pathname = parsedUrl.pathname;
-    this.search = parsedUrl.search;
-    this.setHash(parsedUrl.hash, oldUrl);
-  }
-  pushState(state, title, newUrl) {
-    this.replaceState(state, title, newUrl);
-  }
-  forward() {
-    throw new Error("Not implemented");
-  }
-  back() {
-    throw new Error("Not implemented");
-  }
-  // History API isn't available on server, therefore return undefined
-  getState() {
-    return void 0;
-  }
-  static ɵfac = function ServerPlatformLocation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ServerPlatformLocation)(ɵɵinject(DOCUMENT), ɵɵinject(INITIAL_CONFIG, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ServerPlatformLocation,
-    factory: _ServerPlatformLocation.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ServerPlatformLocation, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [INITIAL_CONFIG]
-    }]
-  }], null);
-})();
-var ServerEventManagerPlugin = class _ServerEventManagerPlugin extends EventManagerPlugin {
-  doc;
-  constructor(doc) {
-    super(doc);
-    this.doc = doc;
-  }
-  // Handle all events on the server.
-  supports(eventName) {
-    return true;
-  }
-  addEventListener(element, eventName, handler) {
-    return getDOM().onAndCancel(element, eventName, handler);
-  }
-  static ɵfac = function ServerEventManagerPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ServerEventManagerPlugin)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _ServerEventManagerPlugin,
-    factory: _ServerEventManagerPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ServerEventManagerPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var TRANSFER_STATE_SERIALIZED_FOR_APPID = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "TRANSFER_STATE_SERIALIZED_FOR_APPID" : "", {
-  providedIn: "platform",
-  factory: () => /* @__PURE__ */ new Set()
-});
-var TRANSFER_STATE_SERIALIZATION_PROVIDERS = [{
-  provide: BEFORE_APP_SERIALIZED,
-  useFactory: serializeTransferStateFactory,
-  multi: true
-}];
-function createScript(doc, textContent, nonce) {
-  const script = doc.createElement("script");
-  script.textContent = textContent;
-  if (nonce) {
-    script.setAttribute("nonce", nonce);
-  }
-  return script;
-}
-function warnIfStateTransferHappened(injector) {
-  const appId = injector.get(APP_ID);
-  const appIdsWithTransferStateSerialized = injector.get(TRANSFER_STATE_SERIALIZED_FOR_APPID);
-  if (appIdsWithTransferStateSerialized.has(appId)) {
-    console.warn(`Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.
-
-This can happen if the server providers have been provided more than once using different mechanisms. For example:
-
-  imports: [ServerModule], // Registers server providers
-  providers: [provideServerRendering()] // Also registers server providers
-
-To fix this, ensure that the \`provideServerRendering()\` function is the only provider used and remove the other(s).`);
-  }
-  appIdsWithTransferStateSerialized.add(appId);
-}
-function serializeTransferStateFactory() {
-  const doc = inject(DOCUMENT);
-  const appId = inject(APP_ID);
-  const transferStore = inject(TransferState);
-  const injector = inject(Injector);
-  return () => {
-    const measuringLabel = "serializeTransferStateFactory";
-    startMeasuring(measuringLabel);
-    const content = transferStore.toJson();
-    if (transferStore.isEmpty) {
-      return;
-    }
-    if (typeof ngDevMode !== "undefined" && ngDevMode) {
-      warnIfStateTransferHappened(injector);
-    }
-    const script = createScript(
-      doc,
-      content,
-      /**
-       * `nonce` is not required for 'application/json'
-       * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type
-       */
-      null
-    );
-    script.id = appId + "-state";
-    script.setAttribute("type", "application/json");
-    doc.body.appendChild(script);
-    stopMeasuring(measuringLabel);
-  };
-}
-var INTERNAL_SERVER_PLATFORM_PROVIDERS = [
-  {
-    provide: DOCUMENT,
-    useFactory: _document,
-    deps: [Injector]
-  },
-  {
-    provide: PLATFORM_ID,
-    useValue: PLATFORM_SERVER_ID
-  },
-  {
-    provide: PLATFORM_INITIALIZER,
-    useFactory: initDominoAdapter,
-    multi: true,
-    deps: [Injector]
-  },
-  {
-    provide: PlatformLocation,
-    useClass: ServerPlatformLocation,
-    deps: [DOCUMENT, [Optional, INITIAL_CONFIG]]
-  },
-  {
-    provide: PlatformState,
-    deps: [DOCUMENT]
-  },
-  // Add special provider that allows multiple instances of platformServer* to be created.
-  {
-    provide: ALLOW_MULTIPLE_PLATFORMS,
-    useValue: true
-  }
-];
-function initDominoAdapter(injector) {
-  const _enableDomEmulation = enableDomEmulation(injector);
-  return () => {
-    if (_enableDomEmulation) {
-      DominoAdapter.makeCurrent();
-    } else {
-      BrowserDomAdapter.makeCurrent();
-    }
-  };
-}
-var SERVER_RENDER_PROVIDERS = [{
-  provide: EVENT_MANAGER_PLUGINS,
-  multi: true,
-  useClass: ServerEventManagerPlugin
-}];
-var PLATFORM_SERVER_PROVIDERS = [
-  TRANSFER_STATE_SERIALIZATION_PROVIDERS,
-  SERVER_RENDER_PROVIDERS,
-  SERVER_HTTP_PROVIDERS,
-  {
-    provide: Testability,
-    useValue: null
-  },
-  // Keep for backwards-compatibility.
-  {
-    provide: TESTABILITY,
-    useValue: null
-  },
-  {
-    provide: ViewportScroller,
-    useClass: NullViewportScroller
-  }
-];
-var ServerModule = class _ServerModule {
-  static ɵfac = function ServerModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _ServerModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _ServerModule,
-    imports: [NoopAnimationsModule],
-    exports: [BrowserModule]
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: PLATFORM_SERVER_PROVIDERS,
-    imports: [NoopAnimationsModule, BrowserModule]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ServerModule, [{
-    type: NgModule,
-    args: [{
-      exports: [BrowserModule],
-      imports: [NoopAnimationsModule],
-      providers: PLATFORM_SERVER_PROVIDERS
-    }]
-  }], null, null);
-})();
-function _document(injector) {
-  const config = injector.get(INITIAL_CONFIG, null);
-  const _enableDomEmulation = enableDomEmulation(injector);
-  let document2;
-  if (config && config.document) {
-    document2 = typeof config.document === "string" ? _enableDomEmulation ? parseDocument(config.document, config.url) : window.document : config.document;
-  } else {
-    document2 = getDOM().createHtmlDocument();
-  }
-  setDocument(document2);
-  return document2;
-}
-function platformServer(extraProviders) {
-  if (false) {
-    globalThis["ngServerMode"] = true;
-  }
-  const platform = createPlatformFactory(platformCore, "server", INTERNAL_SERVER_PLATFORM_PROVIDERS)(extraProviders);
-  platform.onDestroy(() => {
-    globalThis["ngServerMode"] = void 0;
-  });
-  return platform;
-}
-function provideServerRendering() {
-  if (false) {
-    globalThis["ngServerMode"] = true;
-  }
-  return makeEnvironmentProviders([provideNoopAnimations(), ...PLATFORM_SERVER_PROVIDERS]);
-}
-var EVENT_DISPATCH_SCRIPT_ID = "ng-event-dispatch-contract";
-function createServerPlatform(options) {
-  const extraProviders = options.platformProviders ?? [];
-  const measuringLabel = "createServerPlatform";
-  startMeasuring(measuringLabel);
-  const platform = platformServer([{
-    provide: INITIAL_CONFIG,
-    useValue: {
-      document: options.document,
-      url: options.url
-    }
-  }, extraProviders]);
-  stopMeasuring(measuringLabel);
-  return platform;
-}
-function findEventDispatchScript(doc) {
-  return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);
-}
-function removeEventDispatchScript(doc) {
-  findEventDispatchScript(doc)?.remove();
-}
-function prepareForHydration(platformState, applicationRef) {
-  const measuringLabel = "prepareForHydration";
-  startMeasuring(measuringLabel);
-  const environmentInjector = applicationRef.injector;
-  const doc = platformState.getDocument();
-  if (!environmentInjector.get(IS_HYDRATION_DOM_REUSE_ENABLED, false)) {
-    removeEventDispatchScript(doc);
-    return;
-  }
-  appendSsrContentIntegrityMarker(doc);
-  const eventTypesToReplay = annotateForHydration(applicationRef, doc);
-  if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {
-    insertEventRecordScript(environmentInjector.get(APP_ID), doc, eventTypesToReplay, environmentInjector.get(CSP_NONCE, null));
-  } else {
-    removeEventDispatchScript(doc);
-  }
-  stopMeasuring(measuringLabel);
-}
-function appendSsrContentIntegrityMarker(doc) {
-  const comment = doc.createComment(SSR_CONTENT_INTEGRITY_MARKER);
-  doc.body.firstChild ? doc.body.insertBefore(comment, doc.body.firstChild) : doc.body.append(comment);
-}
-function appendServerContextInfo(applicationRef) {
-  const injector = applicationRef.injector;
-  let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));
-  applicationRef.components.forEach((componentRef) => {
-    const renderer = componentRef.injector.get(Renderer2);
-    const element = componentRef.location.nativeElement;
-    if (element) {
-      renderer.setAttribute(element, "ng-server-context", serverContext);
-    }
-  });
-}
-function insertEventRecordScript(appId, doc, eventTypesToReplay, nonce) {
-  const measuringLabel = "insertEventRecordScript";
-  startMeasuring(measuringLabel);
-  const {
-    regular,
-    capture
-  } = eventTypesToReplay;
-  const eventDispatchScript = findEventDispatchScript(doc);
-  if (eventDispatchScript) {
-    const replayScriptContents = `window.__jsaction_bootstrap(document.body,"${appId}",${JSON.stringify(Array.from(regular))},${JSON.stringify(Array.from(capture))});`;
-    const replayScript = createScript(doc, replayScriptContents, nonce);
-    eventDispatchScript.after(replayScript);
-  }
-  stopMeasuring(measuringLabel);
-}
-function _render(platformRef, applicationRef) {
-  return __async(this, null, function* () {
-    const measuringLabel = "whenStable";
-    startMeasuring(measuringLabel);
-    yield applicationRef.whenStable();
-    stopMeasuring(measuringLabel);
-    const platformState = platformRef.injector.get(PlatformState);
-    prepareForHydration(platformState, applicationRef);
-    const environmentInjector = applicationRef.injector;
-    const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);
-    if (callbacks) {
-      const asyncCallbacks = [];
-      for (const callback of callbacks) {
-        try {
-          const callbackResult = callback();
-          if (callbackResult) {
-            asyncCallbacks.push(callbackResult);
-          }
-        } catch (e) {
-          console.warn("Ignoring BEFORE_APP_SERIALIZED Exception: ", e);
-        }
-      }
-      if (asyncCallbacks.length) {
-        for (const result of yield Promise.allSettled(asyncCallbacks)) {
-          if (result.status === "rejected") {
-            console.warn("Ignoring BEFORE_APP_SERIALIZED Exception: ", result.reason);
-          }
-        }
-      }
-    }
-    appendServerContextInfo(applicationRef);
-    return platformState.renderToString();
-  });
-}
-function asyncDestroyPlatform(platformRef) {
-  return new Promise((resolve) => {
-    setTimeout(() => {
-      platformRef.destroy();
-      resolve();
-    }, 0);
-  });
-}
-var DEFAULT_SERVER_CONTEXT = "other";
-var SERVER_CONTEXT = new InjectionToken("SERVER_CONTEXT");
-function sanitizeServerContext(serverContext) {
-  const context = serverContext.replace(/[^a-zA-Z0-9\-]/g, "");
-  return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;
-}
-function renderModule(moduleType, options) {
-  return __async(this, null, function* () {
-    const {
-      document: document2,
-      url,
-      extraProviders: platformProviders
-    } = options;
-    const platformRef = createServerPlatform({
-      document: document2,
-      url,
-      platformProviders
-    });
-    try {
-      const moduleRef = yield platformRef.bootstrapModule(moduleType);
-      const applicationRef = moduleRef.injector.get(ApplicationRef);
-      return yield _render(platformRef, applicationRef);
-    } finally {
-      yield asyncDestroyPlatform(platformRef);
-    }
-  });
-}
-function renderApplication(bootstrap, options) {
-  return __async(this, null, function* () {
-    const renderAppLabel = "renderApplication";
-    const bootstrapLabel = "bootstrap";
-    const _renderLabel = "_render";
-    startMeasuring(renderAppLabel);
-    const platformRef = createServerPlatform(options);
-    try {
-      startMeasuring(bootstrapLabel);
-      const applicationRef = yield bootstrap();
-      stopMeasuring(bootstrapLabel);
-      startMeasuring(_renderLabel);
-      const rendered = yield _render(platformRef, applicationRef);
-      stopMeasuring(_renderLabel);
-      return rendered;
-    } finally {
-      yield asyncDestroyPlatform(platformRef);
-      stopMeasuring(renderAppLabel);
-    }
-  });
-}
-var VERSION = new Version("19.0.5");
-
-export {
-  INITIAL_CONFIG,
-  BEFORE_APP_SERIALIZED,
-  ENABLE_DOM_EMULATION,
-  PlatformState,
-  INTERNAL_SERVER_PLATFORM_PROVIDERS,
-  SERVER_RENDER_PROVIDERS,
-  ServerModule,
-  platformServer,
-  provideServerRendering,
-  SERVER_CONTEXT,
-  renderModule,
-  renderApplication,
-  VERSION
-};
-/*! Bundled license information:
-
-@angular/animations/fesm2022/animations.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/animations/fesm2022/browser.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/platform-browser/fesm2022/animations.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/platform-server/fesm2022/platform-server.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-*/
-//# sourceMappingURL=chunk-QSAO6LAI.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-QSAO6LAI.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-QSAO6LAI.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/animations/fesm2022/animations.mjs", "../../../../../../node_modules/@angular/animations/fesm2022/browser.mjs", "../../../../../../node_modules/@angular/platform-browser/fesm2022/animations.mjs", "../../../../../../node_modules/@angular/platform-server/fesm2022/platform-server.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, ANIMATION_MODULE_TYPE, ViewEncapsulation, ɵRuntimeError, Inject } from '@angular/core';\n\n/**\n * @description Constants for the categories of parameters that can be defined for animations.\n *\n * A corresponding function defines a set of parameters for each category, and\n * collects them into a corresponding `AnimationMetadata` object.\n *\n * @publicApi\n */\nvar AnimationMetadataType;\n(function (AnimationMetadataType) {\n  /**\n   * Associates a named animation state with a set of CSS styles.\n   * See [`state()`](api/animations/state)\n   */\n  AnimationMetadataType[AnimationMetadataType[\"State\"] = 0] = \"State\";\n  /**\n   * Data for a transition from one animation state to another.\n   * See `transition()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Transition\"] = 1] = \"Transition\";\n  /**\n   * Contains a set of animation steps.\n   * See `sequence()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Sequence\"] = 2] = \"Sequence\";\n  /**\n   * Contains a set of animation steps.\n   * See `{@link animations/group group()}`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Group\"] = 3] = \"Group\";\n  /**\n   * Contains an animation step.\n   * See `animate()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Animate\"] = 4] = \"Animate\";\n  /**\n   * Contains a set of animation steps.\n   * See `keyframes()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Keyframes\"] = 5] = \"Keyframes\";\n  /**\n   * Contains a set of CSS property-value pairs into a named style.\n   * See `style()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Style\"] = 6] = \"Style\";\n  /**\n   * Associates an animation with an entry trigger that can be attached to an element.\n   * See `trigger()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Trigger\"] = 7] = \"Trigger\";\n  /**\n   * Contains a re-usable animation.\n   * See `animation()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Reference\"] = 8] = \"Reference\";\n  /**\n   * Contains data to use in executing child animations returned by a query.\n   * See `animateChild()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"AnimateChild\"] = 9] = \"AnimateChild\";\n  /**\n   * Contains animation parameters for a re-usable animation.\n   * See `useAnimation()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"AnimateRef\"] = 10] = \"AnimateRef\";\n  /**\n   * Contains child-animation query data.\n   * See `query()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Query\"] = 11] = \"Query\";\n  /**\n   * Contains data for staggering an animation sequence.\n   * See `stagger()`\n   */\n  AnimationMetadataType[AnimationMetadataType[\"Stagger\"] = 12] = \"Stagger\";\n})(AnimationMetadataType || (AnimationMetadataType = {}));\n/**\n * Specifies automatic styling.\n *\n * @publicApi\n */\nconst AUTO_STYLE = '*';\n/**\n * Creates a named animation trigger, containing a  list of [`state()`](api/animations/state)\n * and `transition()` entries to be evaluated when the expression\n * bound to the trigger changes.\n *\n * @param name An identifying string.\n * @param definitions  An animation definition object, containing an array of\n * [`state()`](api/animations/state) and `transition()` declarations.\n *\n * @return An object that encapsulates the trigger data.\n *\n * @usageNotes\n * Define an animation trigger in the `animations` section of `@Component` metadata.\n * In the template, reference the trigger by name and bind it to a trigger expression that\n * evaluates to a defined animation state, using the following format:\n *\n * `[@triggerName]=\"expression\"`\n *\n * Animation trigger bindings convert all values to strings, and then match the\n * previous and current values against any linked transitions.\n * Booleans can be specified as `1` or `true` and `0` or `false`.\n *\n * ### Usage Example\n *\n * The following example creates an animation trigger reference based on the provided\n * name value.\n * The provided animation value is expected to be an array consisting of state and\n * transition declarations.\n *\n * ```ts\n * @Component({\n *   selector: \"my-component\",\n *   templateUrl: \"my-component-tpl.html\",\n *   animations: [\n *     trigger(\"myAnimationTrigger\", [\n *       state(...),\n *       state(...),\n *       transition(...),\n *       transition(...)\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   myStatusExp = \"something\";\n * }\n * ```\n *\n * The template associated with this component makes use of the defined trigger\n * by binding to an element within its template code.\n *\n * ```html\n * <!-- somewhere inside of my-component-tpl.html -->\n * <div [@myAnimationTrigger]=\"myStatusExp\">...</div>\n * ```\n *\n * ### Using an inline function\n * The `transition` animation method also supports reading an inline function which can decide\n * if its associated animation should be run.\n *\n * ```ts\n * // this method is run each time the `myAnimationTrigger` trigger value changes.\n * function myInlineMatcherFn(fromState: string, toState: string, element: any, params: {[key:\n string]: any}): boolean {\n *   // notice that `element` and `params` are also available here\n *   return toState == 'yes-please-animate';\n * }\n *\n * @Component({\n *   selector: 'my-component',\n *   templateUrl: 'my-component-tpl.html',\n *   animations: [\n *     trigger('myAnimationTrigger', [\n *       transition(myInlineMatcherFn, [\n *         // the animation sequence code\n *       ]),\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   myStatusExp = \"yes-please-animate\";\n * }\n * ```\n *\n * ### Disabling Animations\n * When true, the special animation control binding `@.disabled` binding prevents\n * all animations from rendering.\n * Place the  `@.disabled` binding on an element to disable\n * animations on the element itself, as well as any inner animation triggers\n * within the element.\n *\n * The following example shows how to use this feature:\n *\n * ```angular-ts\n * @Component({\n *   selector: 'my-component',\n *   template: `\n *     <div [@.disabled]=\"isDisabled\">\n *       <div [@childAnimation]=\"exp\"></div>\n *     </div>\n *   `,\n *   animations: [\n *     trigger(\"childAnimation\", [\n *       // ...\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   isDisabled = true;\n *   exp = '...';\n * }\n * ```\n *\n * When `@.disabled` is true, it prevents the `@childAnimation` trigger from animating,\n * along with any inner animations.\n *\n * ### Disable animations application-wide\n * When an area of the template is set to have animations disabled,\n * **all** inner components have their animations disabled as well.\n * This means that you can disable all animations for an app\n * by placing a host binding set on `@.disabled` on the topmost Angular component.\n *\n * ```ts\n * import {Component, HostBinding} from '@angular/core';\n *\n * @Component({\n *   selector: 'app-component',\n *   templateUrl: 'app.component.html',\n * })\n * class AppComponent {\n *   @HostBinding('@.disabled')\n *   public animationsDisabled = true;\n * }\n * ```\n *\n * ### Overriding disablement of inner animations\n * Despite inner animations being disabled, a parent animation can `query()`\n * for inner elements located in disabled areas of the template and still animate\n * them if needed. This is also the case for when a sub animation is\n * queried by a parent and then later animated using `animateChild()`.\n *\n * ### Detecting when an animation is disabled\n * If a region of the DOM (or the entire application) has its animations disabled, the animation\n * trigger callbacks still fire, but for zero seconds. When the callback fires, it provides\n * an instance of an `AnimationEvent`. If animations are disabled,\n * the `.disabled` flag on the event is true.\n *\n * @publicApi\n */\nfunction trigger(name, definitions) {\n  return {\n    type: AnimationMetadataType.Trigger,\n    name,\n    definitions,\n    options: {}\n  };\n}\n/**\n * Defines an animation step that combines styling information with timing information.\n *\n * @param timings Sets `AnimateTimings` for the parent animation.\n * A string in the format \"duration [delay] [easing]\".\n *  - Duration and delay are expressed as a number and optional time unit,\n * such as \"1s\" or \"10ms\" for one second and 10 milliseconds, respectively.\n * The default unit is milliseconds.\n *  - The easing value controls how the animation accelerates and decelerates\n * during its runtime. Value is one of  `ease`, `ease-in`, `ease-out`,\n * `ease-in-out`, or a `cubic-bezier()` function call.\n * If not supplied, no easing is applied.\n *\n * For example, the string \"1s 100ms ease-out\" specifies a duration of\n * 1000 milliseconds, and delay of 100 ms, and the \"ease-out\" easing style,\n * which decelerates near the end of the duration.\n * @param styles Sets AnimationStyles for the parent animation.\n * A function call to either `style()` or `keyframes()`\n * that returns a collection of CSS style entries to be applied to the parent animation.\n * When null, uses the styles from the destination state.\n * This is useful when describing an animation step that will complete an animation;\n * see \"Animating to the final state\" in `transitions()`.\n * @returns An object that encapsulates the animation step.\n *\n * @usageNotes\n * Call within an animation `sequence()`, `{@link animations/group group()}`, or\n * `transition()` call to specify an animation step\n * that applies given style data to the parent animation for a given amount of time.\n *\n * ### Syntax Examples\n * **Timing examples**\n *\n * The following examples show various `timings` specifications.\n * - `animate(500)` : Duration is 500 milliseconds.\n * - `animate(\"1s\")` : Duration is 1000 milliseconds.\n * - `animate(\"100ms 0.5s\")` : Duration is 100 milliseconds, delay is 500 milliseconds.\n * - `animate(\"5s ease-in\")` : Duration is 5000 milliseconds, easing in.\n * - `animate(\"5s 10ms cubic-bezier(.17,.67,.88,.1)\")` : Duration is 5000 milliseconds, delay is 10\n * milliseconds, easing according to a bezier curve.\n *\n * **Style examples**\n *\n * The following example calls `style()` to set a single CSS style.\n * ```ts\n * animate(500, style({ background: \"red\" }))\n * ```\n * The following example calls `keyframes()` to set a CSS style\n * to different values for successive keyframes.\n * ```ts\n * animate(500, keyframes(\n *  [\n *   style({ background: \"blue\" }),\n *   style({ background: \"red\" })\n *  ])\n * ```\n *\n * @publicApi\n */\nfunction animate(timings, styles = null) {\n  return {\n    type: AnimationMetadataType.Animate,\n    styles,\n    timings\n  };\n}\n/**\n * @description Defines a list of animation steps to be run in parallel.\n *\n * @param steps An array of animation step objects.\n * - When steps are defined by `style()` or `animate()`\n * function calls, each call within the group is executed instantly.\n * - To specify offset styles to be applied at a later time, define steps with\n * `keyframes()`, or use `animate()` calls with a delay value.\n * For example:\n *\n * ```ts\n * group([\n *   animate(\"1s\", style({ background: \"black\" })),\n *   animate(\"2s\", style({ color: \"white\" }))\n * ])\n * ```\n *\n * @param options An options object containing a delay and\n * developer-defined parameters that provide styling defaults and\n * can be overridden on invocation.\n *\n * @return An object that encapsulates the group data.\n *\n * @usageNotes\n * Grouped animations are useful when a series of styles must be\n * animated at different starting times and closed off at different ending times.\n *\n * When called within a `sequence()` or a\n * `transition()` call, does not continue to the next\n * instruction until all of the inner animation steps have completed.\n *\n * @publicApi\n */\nfunction group(steps, options = null) {\n  return {\n    type: AnimationMetadataType.Group,\n    steps,\n    options\n  };\n}\n/**\n * Defines a list of animation steps to be run sequentially, one by one.\n *\n * @param steps An array of animation step objects.\n * - Steps defined by `style()` calls apply the styling data immediately.\n * - Steps defined by `animate()` calls apply the styling data over time\n *   as specified by the timing data.\n *\n * ```ts\n * sequence([\n *   style({ opacity: 0 }),\n *   animate(\"1s\", style({ opacity: 1 }))\n * ])\n * ```\n *\n * @param options An options object containing a delay and\n * developer-defined parameters that provide styling defaults and\n * can be overridden on invocation.\n *\n * @return An object that encapsulates the sequence data.\n *\n * @usageNotes\n * When you pass an array of steps to a\n * `transition()` call, the steps run sequentially by default.\n * Compare this to the `{@link animations/group group()}` call, which runs animation steps in\n *parallel.\n *\n * When a sequence is used within a `{@link animations/group group()}` or a `transition()` call,\n * execution continues to the next instruction only after each of the inner animation\n * steps have completed.\n *\n * @publicApi\n **/\nfunction sequence(steps, options = null) {\n  return {\n    type: AnimationMetadataType.Sequence,\n    steps,\n    options\n  };\n}\n/**\n * Declares a key/value object containing CSS properties/styles that\n * can then be used for an animation [`state`](api/animations/state), within an animation\n *`sequence`, or as styling data for calls to `animate()` and `keyframes()`.\n *\n * @param tokens A set of CSS styles or HTML styles associated with an animation state.\n * The value can be any of the following:\n * - A key-value style pair associating a CSS property with a value.\n * - An array of key-value style pairs.\n * - An asterisk (*), to use auto-styling, where styles are derived from the element\n * being animated and applied to the animation when it starts.\n *\n * Auto-styling can be used to define a state that depends on layout or other\n * environmental factors.\n *\n * @return An object that encapsulates the style data.\n *\n * @usageNotes\n * The following examples create animation styles that collect a set of\n * CSS property values:\n *\n * ```ts\n * // string values for CSS properties\n * style({ background: \"red\", color: \"blue\" })\n *\n * // numerical pixel values\n * style({ width: 100, height: 0 })\n * ```\n *\n * The following example uses auto-styling to allow an element to animate from\n * a height of 0 up to its full height:\n *\n * ```ts\n * style({ height: 0 }),\n * animate(\"1s\", style({ height: \"*\" }))\n * ```\n *\n * @publicApi\n **/\nfunction style(tokens) {\n  return {\n    type: AnimationMetadataType.Style,\n    styles: tokens,\n    offset: null\n  };\n}\n/**\n * Declares an animation state within a trigger attached to an element.\n *\n * @param name One or more names for the defined state in a comma-separated string.\n * The following reserved state names can be supplied to define a style for specific use\n * cases:\n *\n * - `void` You can associate styles with this name to be used when\n * the element is detached from the application. For example, when an `ngIf` evaluates\n * to false, the state of the associated element is void.\n *  - `*` (asterisk) Indicates the default state. You can associate styles with this name\n * to be used as the fallback when the state that is being animated is not declared\n * within the trigger.\n *\n * @param styles A set of CSS styles associated with this state, created using the\n * `style()` function.\n * This set of styles persists on the element once the state has been reached.\n * @param options Parameters that can be passed to the state when it is invoked.\n * 0 or more key-value pairs.\n * @return An object that encapsulates the new state data.\n *\n * @usageNotes\n * Use the `trigger()` function to register states to an animation trigger.\n * Use the `transition()` function to animate between states.\n * When a state is active within a component, its associated styles persist on the element,\n * even when the animation ends.\n *\n * @publicApi\n **/\nfunction state(name, styles, options) {\n  return {\n    type: AnimationMetadataType.State,\n    name,\n    styles,\n    options\n  };\n}\n/**\n * Defines a set of animation styles, associating each style with an optional `offset` value.\n *\n * @param steps A set of animation styles with optional offset data.\n * The optional `offset` value for a style specifies a percentage of the total animation\n * time at which that style is applied.\n * @returns An object that encapsulates the keyframes data.\n *\n * @usageNotes\n * Use with the `animate()` call. Instead of applying animations\n * from the current state\n * to the destination state, keyframes describe how each style entry is applied and at what point\n * within the animation arc.\n * Compare [CSS Keyframe Animations](https://www.w3schools.com/css/css3_animations.asp).\n *\n * ### Usage\n *\n * In the following example, the offset values describe\n * when each `backgroundColor` value is applied. The color is red at the start, and changes to\n * blue when 20% of the total time has elapsed.\n *\n * ```ts\n * // the provided offset values\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\", offset: 0 }),\n *   style({ backgroundColor: \"blue\", offset: 0.2 }),\n *   style({ backgroundColor: \"orange\", offset: 0.3 }),\n *   style({ backgroundColor: \"black\", offset: 1 })\n * ]))\n * ```\n *\n * If there are no `offset` values specified in the style entries, the offsets\n * are calculated automatically.\n *\n * ```ts\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\" }) // offset = 0\n *   style({ backgroundColor: \"blue\" }) // offset = 0.33\n *   style({ backgroundColor: \"orange\" }) // offset = 0.66\n *   style({ backgroundColor: \"black\" }) // offset = 1\n * ]))\n *```\n\n * @publicApi\n */\nfunction keyframes(steps) {\n  return {\n    type: AnimationMetadataType.Keyframes,\n    steps\n  };\n}\n/**\n * Declares an animation transition which is played when a certain specified condition is met.\n *\n * @param stateChangeExpr A string with a specific format or a function that specifies when the\n * animation transition should occur (see [State Change Expression](#state-change-expression)).\n *\n * @param steps One or more animation objects that represent the animation's instructions.\n *\n * @param options An options object that can be used to specify a delay for the animation or provide\n * custom parameters for it.\n *\n * @returns An object that encapsulates the transition data.\n *\n * @usageNotes\n *\n * ### State Change Expression\n *\n * The State Change Expression instructs Angular when to run the transition's animations, it can\n *either be\n *  - a string with a specific syntax\n *  - or a function that compares the previous and current state (value of the expression bound to\n *    the element's trigger) and returns `true` if the transition should occur or `false` otherwise\n *\n * The string format can be:\n *  - `fromState => toState`, which indicates that the transition's animations should occur then the\n *    expression bound to the trigger's element goes from `fromState` to `toState`\n *\n *    _Example:_\n *      ```ts\n *        transition('open => closed', animate('.5s ease-out', style({ height: 0 }) ))\n *      ```\n *\n *  - `fromState <=> toState`, which indicates that the transition's animations should occur then\n *    the expression bound to the trigger's element goes from `fromState` to `toState` or vice versa\n *\n *    _Example:_\n *      ```ts\n *        transition('enabled <=> disabled', animate('1s cubic-bezier(0.8,0.3,0,1)'))\n *      ```\n *\n *  - `:enter`/`:leave`, which indicates that the transition's animations should occur when the\n *    element enters or exists the DOM\n *\n *    _Example:_\n *      ```ts\n *        transition(':enter', [\n *          style({ opacity: 0 }),\n *          animate('500ms', style({ opacity: 1 }))\n *        ])\n *      ```\n *\n *  - `:increment`/`:decrement`, which indicates that the transition's animations should occur when\n *    the numerical expression bound to the trigger's element has increased in value or decreased\n *\n *    _Example:_\n *      ```ts\n *        transition(':increment', query('@counter', animateChild()))\n *      ```\n *\n *  - a sequence of any of the above divided by commas, which indicates that transition's animations\n *    should occur whenever one of the state change expressions matches\n *\n *    _Example:_\n *      ```ts\n *        transition(':increment, * => enabled, :enter', animate('1s ease', keyframes([\n *          style({ transform: 'scale(1)', offset: 0}),\n *          style({ transform: 'scale(1.1)', offset: 0.7}),\n *          style({ transform: 'scale(1)', offset: 1})\n *        ]))),\n *      ```\n *\n * Also note that in such context:\n *  - `void` can be used to indicate the absence of the element\n *  - asterisks can be used as wildcards that match any state\n *  - (as a consequence of the above, `void => *` is equivalent to `:enter` and `* => void` is\n *    equivalent to `:leave`)\n *  - `true` and `false` also match expression values of `1` and `0` respectively (but do not match\n *    _truthy_ and _falsy_ values)\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n *  Be careful about entering end leaving elements as their transitions present a common\n *  pitfall for developers.\n *\n *  Note that when an element with a trigger enters the DOM its `:enter` transition always\n *  gets executed, but its `:leave` transition will not be executed if the element is removed\n *  alongside its parent (as it will be removed \"without warning\" before its transition has\n *  a chance to be executed, the only way that such transition can occur is if the element\n *  is exiting the DOM on its own).\n *\n *\n * </div>\n *\n * ### Animating to a Final State\n *\n * If the final step in a transition is a call to `animate()` that uses a timing value\n * with no `style` data, that step is automatically considered the final animation arc,\n * for the element to reach the final state, in such case Angular automatically adds or removes\n * CSS styles to ensure that the element is in the correct final state.\n *\n *\n * ### Usage Examples\n *\n *  - Transition animations applied based on\n *    the trigger's expression value\n *\n *   ```html\n *   <div [@myAnimationTrigger]=\"myStatusExp\">\n *    ...\n *   </div>\n *   ```\n *\n *   ```ts\n *   trigger(\"myAnimationTrigger\", [\n *     ..., // states\n *     transition(\"on => off, open => closed\", animate(500)),\n *     transition(\"* <=> error\", query('.indicator', animateChild()))\n *   ])\n *   ```\n *\n *  - Transition animations applied based on custom logic dependent\n *    on the trigger's expression value and provided parameters\n *\n *    ```html\n *    <div [@myAnimationTrigger]=\"{\n *     value: stepName,\n *     params: { target: currentTarget }\n *    }\">\n *     ...\n *    </div>\n *    ```\n *\n *    ```ts\n *    trigger(\"myAnimationTrigger\", [\n *      ..., // states\n *      transition(\n *        (fromState, toState, _element, params) =>\n *          ['firststep', 'laststep'].includes(fromState.toLowerCase())\n *          && toState === params?.['target'],\n *        animate('1s')\n *      )\n *    ])\n *    ```\n *\n * @publicApi\n **/\nfunction transition(stateChangeExpr, steps, options = null) {\n  return {\n    type: AnimationMetadataType.Transition,\n    expr: stateChangeExpr,\n    animation: steps,\n    options\n  };\n}\n/**\n * Produces a reusable animation that can be invoked in another animation or sequence,\n * by calling the `useAnimation()` function.\n *\n * @param steps One or more animation objects, as returned by the `animate()`\n * or `sequence()` function, that form a transformation from one state to another.\n * A sequence is used by default when you pass an array.\n * @param options An options object that can contain a delay value for the start of the\n * animation, and additional developer-defined parameters.\n * Provided values for additional parameters are used as defaults,\n * and override values can be passed to the caller on invocation.\n * @returns An object that encapsulates the animation data.\n *\n * @usageNotes\n * The following example defines a reusable animation, providing some default parameter\n * values.\n *\n * ```ts\n * var fadeAnimation = animation([\n *   style({ opacity: '{{ start }}' }),\n *   animate('{{ time }}',\n *   style({ opacity: '{{ end }}'}))\n *   ],\n *   { params: { time: '1000ms', start: 0, end: 1 }});\n * ```\n *\n * The following invokes the defined animation with a call to `useAnimation()`,\n * passing in override parameter values.\n *\n * ```js\n * useAnimation(fadeAnimation, {\n *   params: {\n *     time: '2s',\n *     start: 1,\n *     end: 0\n *   }\n * })\n * ```\n *\n * If any of the passed-in parameter values are missing from this call,\n * the default values are used. If one or more parameter values are missing before a step is\n * animated, `useAnimation()` throws an error.\n *\n * @publicApi\n */\nfunction animation(steps, options = null) {\n  return {\n    type: AnimationMetadataType.Reference,\n    animation: steps,\n    options\n  };\n}\n/**\n * Executes a queried inner animation element within an animation sequence.\n *\n * @param options An options object that can contain a delay value for the start of the\n * animation, and additional override values for developer-defined parameters.\n * @return An object that encapsulates the child animation data.\n *\n * @usageNotes\n * Each time an animation is triggered in Angular, the parent animation\n * has priority and any child animations are blocked. In order\n * for a child animation to run, the parent animation must query each of the elements\n * containing child animations, and run them using this function.\n *\n * Note that this feature is designed to be used with `query()` and it will only work\n * with animations that are assigned using the Angular animation library. CSS keyframes\n * and transitions are not handled by this API.\n *\n * @publicApi\n */\nfunction animateChild(options = null) {\n  return {\n    type: AnimationMetadataType.AnimateChild,\n    options\n  };\n}\n/**\n * Starts a reusable animation that is created using the `animation()` function.\n *\n * @param animation The reusable animation to start.\n * @param options An options object that can contain a delay value for the start of\n * the animation, and additional override values for developer-defined parameters.\n * @return An object that contains the animation parameters.\n *\n * @publicApi\n */\nfunction useAnimation(animation, options = null) {\n  return {\n    type: AnimationMetadataType.AnimateRef,\n    animation,\n    options\n  };\n}\n/**\n * Finds one or more inner elements within the current element that is\n * being animated within a sequence. Use with `animate()`.\n *\n * @param selector The element to query, or a set of elements that contain Angular-specific\n * characteristics, specified with one or more of the following tokens.\n *  - `query(\":enter\")` or `query(\":leave\")` : Query for newly inserted/removed elements (not\n *     all elements can be queried via these tokens, see\n *     [Entering and Leaving Elements](#entering-and-leaving-elements))\n *  - `query(\":animating\")` : Query all currently animating elements.\n *  - `query(\"@triggerName\")` : Query elements that contain an animation trigger.\n *  - `query(\"@*\")` : Query all elements that contain an animation triggers.\n *  - `query(\":self\")` : Include the current element into the animation sequence.\n *\n * @param animation One or more animation steps to apply to the queried element or elements.\n * An array is treated as an animation sequence.\n * @param options An options object. Use the 'limit' field to limit the total number of\n * items to collect.\n * @return An object that encapsulates the query data.\n *\n * @usageNotes\n *\n * ### Multiple Tokens\n *\n * Tokens can be merged into a combined query selector string. For example:\n *\n * ```ts\n *  query(':self, .record:enter, .record:leave, @subTrigger', [...])\n * ```\n *\n * The `query()` function collects multiple elements and works internally by using\n * `element.querySelectorAll`. Use the `limit` field of an options object to limit\n * the total number of items to be collected. For example:\n *\n * ```js\n * query('div', [\n *   animate(...),\n *   animate(...)\n * ], { limit: 1 })\n * ```\n *\n * By default, throws an error when zero items are found. Set the\n * `optional` flag to ignore this error. For example:\n *\n * ```js\n * query('.some-element-that-may-not-be-there', [\n *   animate(...),\n *   animate(...)\n * ], { optional: true })\n * ```\n *\n * ### Entering and Leaving Elements\n *\n * Not all elements can be queried via the `:enter` and `:leave` tokens, the only ones\n * that can are those that Angular assumes can enter/leave based on their own logic\n * (if their insertion/removal is simply a consequence of that of their parent they\n * should be queried via a different token in their parent's `:enter`/`:leave` transitions).\n *\n * The only elements Angular assumes can enter/leave based on their own logic (thus the only\n * ones that can be queried via the `:enter` and `:leave` tokens) are:\n *  - Those inserted dynamically (via `ViewContainerRef`)\n *  - Those that have a structural directive (which, under the hood, are a subset of the above ones)\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n *  Note that elements will be successfully queried via `:enter`/`:leave` even if their\n *  insertion/removal is not done manually via `ViewContainerRef`or caused by their structural\n *  directive (e.g. they enter/exit alongside their parent).\n *\n * </div>\n *\n * <div class=\"docs-alert docs-alert-important\">\n *\n *  There is an exception to what previously mentioned, besides elements entering/leaving based on\n *  their own logic, elements with an animation trigger can always be queried via `:leave` when\n * their parent is also leaving.\n *\n * </div>\n *\n * ### Usage Example\n *\n * The following example queries for inner elements and animates them\n * individually using `animate()`.\n *\n * ```angular-ts\n * @Component({\n *   selector: 'inner',\n *   template: `\n *     <div [@queryAnimation]=\"exp\">\n *       <h1>Title</h1>\n *       <div class=\"content\">\n *         Blah blah blah\n *       </div>\n *     </div>\n *   `,\n *   animations: [\n *    trigger('queryAnimation', [\n *      transition('* => goAnimate', [\n *        // hide the inner elements\n *        query('h1', style({ opacity: 0 })),\n *        query('.content', style({ opacity: 0 })),\n *\n *        // animate the inner elements in, one by one\n *        query('h1', animate(1000, style({ opacity: 1 }))),\n *        query('.content', animate(1000, style({ opacity: 1 }))),\n *      ])\n *    ])\n *  ]\n * })\n * class Cmp {\n *   exp = '';\n *\n *   goAnimate() {\n *     this.exp = 'goAnimate';\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nfunction query(selector, animation, options = null) {\n  return {\n    type: AnimationMetadataType.Query,\n    selector,\n    animation,\n    options\n  };\n}\n/**\n * Use within an animation `query()` call to issue a timing gap after\n * each queried item is animated.\n *\n * @param timings A delay value.\n * @param animation One ore more animation steps.\n * @returns An object that encapsulates the stagger data.\n *\n * @usageNotes\n * In the following example, a container element wraps a list of items stamped out\n * by an `ngFor`. The container element contains an animation trigger that will later be set\n * to query for each of the inner items.\n *\n * Each time items are added, the opacity fade-in animation runs,\n * and each removed item is faded out.\n * When either of these animations occur, the stagger effect is\n * applied after each item's animation is started.\n *\n * ```html\n * <!-- list.component.html -->\n * <button (click)=\"toggle()\">Show / Hide Items</button>\n * <hr />\n * <div [@listAnimation]=\"items.length\">\n *   <div *ngFor=\"let item of items\">\n *     {{ item }}\n *   </div>\n * </div>\n * ```\n *\n * Here is the component code:\n *\n * ```ts\n * import {trigger, transition, style, animate, query, stagger} from '@angular/animations';\n * @Component({\n *   templateUrl: 'list.component.html',\n *   animations: [\n *     trigger('listAnimation', [\n *     ...\n *     ])\n *   ]\n * })\n * class ListComponent {\n *   items = [];\n *\n *   showItems() {\n *     this.items = [0,1,2,3,4];\n *   }\n *\n *   hideItems() {\n *     this.items = [];\n *   }\n *\n *   toggle() {\n *     this.items.length ? this.hideItems() : this.showItems();\n *    }\n *  }\n * ```\n *\n * Here is the animation trigger code:\n *\n * ```ts\n * trigger('listAnimation', [\n *   transition('* => *', [ // each time the binding value changes\n *     query(':leave', [\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 0 }))\n *       ])\n *     ]),\n *     query(':enter', [\n *       style({ opacity: 0 }),\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 1 }))\n *       ])\n *     ])\n *   ])\n * ])\n * ```\n *\n * @publicApi\n */\nfunction stagger(timings, animation) {\n  return {\n    type: AnimationMetadataType.Stagger,\n    timings,\n    animation\n  };\n}\n\n/**\n * An injectable service that produces an animation sequence programmatically within an\n * Angular component or directive.\n * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`.\n *\n * @usageNotes\n *\n * To use this service, add it to your component or directive as a dependency.\n * The service is instantiated along with your component.\n *\n * Apps do not typically need to create their own animation players, but if you\n * do need to, follow these steps:\n *\n * 1. Use the <code>[AnimationBuilder.build](api/animations/AnimationBuilder#build)()</code> method\n * to create a programmatic animation. The method returns an `AnimationFactory` instance.\n *\n * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element.\n *\n * 3. Use the player object to control the animation programmatically.\n *\n * For example:\n *\n * ```ts\n * // import the service from BrowserAnimationsModule\n * import {AnimationBuilder} from '@angular/animations';\n * // require the service as a dependency\n * class MyCmp {\n *   constructor(private _builder: AnimationBuilder) {}\n *\n *   makeAnimation(element: any) {\n *     // first define a reusable animation\n *     const myAnimation = this._builder.build([\n *       style({ width: 0 }),\n *       animate(1000, style({ width: '100px' }))\n *     ]);\n *\n *     // use the returned factory object to create a player\n *     const player = myAnimation.create(element);\n *\n *     player.play();\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nclass AnimationBuilder {\n  static ɵfac = function AnimationBuilder_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || AnimationBuilder)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: AnimationBuilder,\n    factory: () => (() => inject(BrowserAnimationBuilder))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AnimationBuilder, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(BrowserAnimationBuilder)\n    }]\n  }], null, null);\n})();\n/**\n * A factory object returned from the\n * <code>[AnimationBuilder.build](api/animations/AnimationBuilder#build)()</code>\n * method.\n *\n * @publicApi\n */\nclass AnimationFactory {}\nclass BrowserAnimationBuilder extends AnimationBuilder {\n  animationModuleType = inject(ANIMATION_MODULE_TYPE, {\n    optional: true\n  });\n  _nextAnimationId = 0;\n  _renderer;\n  constructor(rootRenderer, doc) {\n    super();\n    const typeData = {\n      id: '0',\n      encapsulation: ViewEncapsulation.None,\n      styles: [],\n      data: {\n        animation: []\n      }\n    };\n    this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n    if (this.animationModuleType === null && !isAnimationRenderer(this._renderer)) {\n      // We only support AnimationRenderer & DynamicDelegationRenderer for this AnimationBuilder\n      throw new ɵRuntimeError(3600 /* RuntimeErrorCode.BROWSER_ANIMATION_BUILDER_INJECTED_WITHOUT_ANIMATIONS */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Angular detected that the `AnimationBuilder` was injected, but animation support was not enabled. ' + 'Please make sure that you enable animations in your application by calling `provideAnimations()` or `provideAnimationsAsync()` function.');\n    }\n  }\n  build(animation) {\n    const id = this._nextAnimationId;\n    this._nextAnimationId++;\n    const entry = Array.isArray(animation) ? sequence(animation) : animation;\n    issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n    return new BrowserAnimationFactory(id, this._renderer);\n  }\n  static ɵfac = function BrowserAnimationBuilder_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserAnimationBuilder)(i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: BrowserAnimationBuilder,\n    factory: BrowserAnimationBuilder.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserAnimationBuilder, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: i0.RendererFactory2\n  }, {\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\nclass BrowserAnimationFactory extends AnimationFactory {\n  _id;\n  _renderer;\n  constructor(_id, _renderer) {\n    super();\n    this._id = _id;\n    this._renderer = _renderer;\n  }\n  create(element, options) {\n    return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n  }\n}\nclass RendererAnimationPlayer {\n  id;\n  element;\n  _renderer;\n  parentPlayer = null;\n  _started = false;\n  constructor(id, element, options, _renderer) {\n    this.id = id;\n    this.element = element;\n    this._renderer = _renderer;\n    this._command('create', options);\n  }\n  _listen(eventName, callback) {\n    return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n  }\n  _command(command, ...args) {\n    issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n  }\n  onDone(fn) {\n    this._listen('done', fn);\n  }\n  onStart(fn) {\n    this._listen('start', fn);\n  }\n  onDestroy(fn) {\n    this._listen('destroy', fn);\n  }\n  init() {\n    this._command('init');\n  }\n  hasStarted() {\n    return this._started;\n  }\n  play() {\n    this._command('play');\n    this._started = true;\n  }\n  pause() {\n    this._command('pause');\n  }\n  restart() {\n    this._command('restart');\n  }\n  finish() {\n    this._command('finish');\n  }\n  destroy() {\n    this._command('destroy');\n  }\n  reset() {\n    this._command('reset');\n    this._started = false;\n  }\n  setPosition(p) {\n    this._command('setPosition', p);\n  }\n  getPosition() {\n    return unwrapAnimationRenderer(this._renderer)?.engine?.players[this.id]?.getPosition() ?? 0;\n  }\n  totalTime = 0;\n}\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n  renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n/**\n * The following 2 methods cannot reference their correct types (AnimationRenderer &\n * DynamicDelegationRenderer) since this would introduce a import cycle.\n */\nfunction unwrapAnimationRenderer(renderer) {\n  const type = renderer.ɵtype;\n  if (type === 0 /* AnimationRendererType.Regular */) {\n    return renderer;\n  } else if (type === 1 /* AnimationRendererType.Delegated */) {\n    return renderer.animationRenderer;\n  }\n  return null;\n}\nfunction isAnimationRenderer(renderer) {\n  const type = renderer.ɵtype;\n  return type === 0 /* AnimationRendererType.Regular */ || type === 1 /* AnimationRendererType.Delegated */;\n}\n\n/**\n * An empty programmatic controller for reusable animations.\n * Used internally when animations are disabled, to avoid\n * checking for the null case when an animation player is expected.\n *\n * @see {@link animate}\n * @see {@link AnimationPlayer}\n *\n * @publicApi\n */\nclass NoopAnimationPlayer {\n  _onDoneFns = [];\n  _onStartFns = [];\n  _onDestroyFns = [];\n  _originalOnDoneFns = [];\n  _originalOnStartFns = [];\n  _started = false;\n  _destroyed = false;\n  _finished = false;\n  _position = 0;\n  parentPlayer = null;\n  totalTime;\n  constructor(duration = 0, delay = 0) {\n    this.totalTime = duration + delay;\n  }\n  _onFinish() {\n    if (!this._finished) {\n      this._finished = true;\n      this._onDoneFns.forEach(fn => fn());\n      this._onDoneFns = [];\n    }\n  }\n  onStart(fn) {\n    this._originalOnStartFns.push(fn);\n    this._onStartFns.push(fn);\n  }\n  onDone(fn) {\n    this._originalOnDoneFns.push(fn);\n    this._onDoneFns.push(fn);\n  }\n  onDestroy(fn) {\n    this._onDestroyFns.push(fn);\n  }\n  hasStarted() {\n    return this._started;\n  }\n  init() {}\n  play() {\n    if (!this.hasStarted()) {\n      this._onStart();\n      this.triggerMicrotask();\n    }\n    this._started = true;\n  }\n  /** @internal */\n  triggerMicrotask() {\n    queueMicrotask(() => this._onFinish());\n  }\n  _onStart() {\n    this._onStartFns.forEach(fn => fn());\n    this._onStartFns = [];\n  }\n  pause() {}\n  restart() {}\n  finish() {\n    this._onFinish();\n  }\n  destroy() {\n    if (!this._destroyed) {\n      this._destroyed = true;\n      if (!this.hasStarted()) {\n        this._onStart();\n      }\n      this.finish();\n      this._onDestroyFns.forEach(fn => fn());\n      this._onDestroyFns = [];\n    }\n  }\n  reset() {\n    this._started = false;\n    this._finished = false;\n    this._onStartFns = this._originalOnStartFns;\n    this._onDoneFns = this._originalOnDoneFns;\n  }\n  setPosition(position) {\n    this._position = this.totalTime ? position * this.totalTime : 1;\n  }\n  getPosition() {\n    return this.totalTime ? this._position / this.totalTime : 1;\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n    methods.forEach(fn => fn());\n    methods.length = 0;\n  }\n}\n\n/**\n * A programmatic controller for a group of reusable animations.\n * Used internally to control animations.\n *\n * @see {@link AnimationPlayer}\n * @see {@link animations/group group}\n *\n */\nclass AnimationGroupPlayer {\n  _onDoneFns = [];\n  _onStartFns = [];\n  _finished = false;\n  _started = false;\n  _destroyed = false;\n  _onDestroyFns = [];\n  parentPlayer = null;\n  totalTime = 0;\n  players;\n  constructor(_players) {\n    this.players = _players;\n    let doneCount = 0;\n    let destroyCount = 0;\n    let startCount = 0;\n    const total = this.players.length;\n    if (total == 0) {\n      queueMicrotask(() => this._onFinish());\n    } else {\n      this.players.forEach(player => {\n        player.onDone(() => {\n          if (++doneCount == total) {\n            this._onFinish();\n          }\n        });\n        player.onDestroy(() => {\n          if (++destroyCount == total) {\n            this._onDestroy();\n          }\n        });\n        player.onStart(() => {\n          if (++startCount == total) {\n            this._onStart();\n          }\n        });\n      });\n    }\n    this.totalTime = this.players.reduce((time, player) => Math.max(time, player.totalTime), 0);\n  }\n  _onFinish() {\n    if (!this._finished) {\n      this._finished = true;\n      this._onDoneFns.forEach(fn => fn());\n      this._onDoneFns = [];\n    }\n  }\n  init() {\n    this.players.forEach(player => player.init());\n  }\n  onStart(fn) {\n    this._onStartFns.push(fn);\n  }\n  _onStart() {\n    if (!this.hasStarted()) {\n      this._started = true;\n      this._onStartFns.forEach(fn => fn());\n      this._onStartFns = [];\n    }\n  }\n  onDone(fn) {\n    this._onDoneFns.push(fn);\n  }\n  onDestroy(fn) {\n    this._onDestroyFns.push(fn);\n  }\n  hasStarted() {\n    return this._started;\n  }\n  play() {\n    if (!this.parentPlayer) {\n      this.init();\n    }\n    this._onStart();\n    this.players.forEach(player => player.play());\n  }\n  pause() {\n    this.players.forEach(player => player.pause());\n  }\n  restart() {\n    this.players.forEach(player => player.restart());\n  }\n  finish() {\n    this._onFinish();\n    this.players.forEach(player => player.finish());\n  }\n  destroy() {\n    this._onDestroy();\n  }\n  _onDestroy() {\n    if (!this._destroyed) {\n      this._destroyed = true;\n      this._onFinish();\n      this.players.forEach(player => player.destroy());\n      this._onDestroyFns.forEach(fn => fn());\n      this._onDestroyFns = [];\n    }\n  }\n  reset() {\n    this.players.forEach(player => player.reset());\n    this._destroyed = false;\n    this._finished = false;\n    this._started = false;\n  }\n  setPosition(p) {\n    const timeAtPosition = p * this.totalTime;\n    this.players.forEach(player => {\n      const position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;\n      player.setPosition(position);\n    });\n  }\n  getPosition() {\n    const longestPlayer = this.players.reduce((longestSoFar, player) => {\n      const newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime;\n      return newPlayerIsLongest ? player : longestSoFar;\n    }, null);\n    return longestPlayer != null ? longestPlayer.getPosition() : 0;\n  }\n  beforeDestroy() {\n    this.players.forEach(player => {\n      if (player.beforeDestroy) {\n        player.beforeDestroy();\n      }\n    });\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n    methods.forEach(fn => fn());\n    methods.length = 0;\n  }\n}\nconst ɵPRE_STYLE = '!';\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AUTO_STYLE, AnimationBuilder, AnimationFactory, AnimationMetadataType, NoopAnimationPlayer, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, AnimationGroupPlayer as ɵAnimationGroupPlayer, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, ɵPRE_STYLE };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, AnimationMetadataType, style } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError, Injectable } from '@angular/core';\nconst LINE_START = '\\n - ';\nfunction invalidTimingValue(exp) {\n  return new ɵRuntimeError(3000 /* RuntimeErrorCode.INVALID_TIMING_VALUE */, ngDevMode && `The provided timing value \"${exp}\" is invalid.`);\n}\nfunction negativeStepValue() {\n  return new ɵRuntimeError(3100 /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');\n}\nfunction negativeDelayValue() {\n  return new ɵRuntimeError(3101 /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');\n}\nfunction invalidStyleParams(varName) {\n  return new ɵRuntimeError(3001 /* RuntimeErrorCode.INVALID_STYLE_PARAMS */, ngDevMode && `Unable to resolve the local animation param ${varName} in the given list of values`);\n}\nfunction invalidParamValue(varName) {\n  return new ɵRuntimeError(3003 /* RuntimeErrorCode.INVALID_PARAM_VALUE */, ngDevMode && `Please provide a value for the animation param ${varName}`);\n}\nfunction invalidNodeType(nodeType) {\n  return new ɵRuntimeError(3004 /* RuntimeErrorCode.INVALID_NODE_TYPE */, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);\n}\nfunction invalidCssUnitValue(userProvidedProperty, value) {\n  return new ɵRuntimeError(3005 /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n}\nfunction invalidTrigger() {\n  return new ɵRuntimeError(3006 /* RuntimeErrorCode.INVALID_TRIGGER */, ngDevMode && \"animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))\");\n}\nfunction invalidDefinition() {\n  return new ɵRuntimeError(3007 /* RuntimeErrorCode.INVALID_DEFINITION */, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');\n}\nfunction invalidState(metadataName, missingSubs) {\n  return new ɵRuntimeError(3008 /* RuntimeErrorCode.INVALID_STATE */, ngDevMode && `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);\n}\nfunction invalidStyleValue(value) {\n  return new ɵRuntimeError(3002 /* RuntimeErrorCode.INVALID_STYLE_VALUE */, ngDevMode && `The provided style string value ${value} is not allowed.`);\n}\nfunction invalidProperty(prop) {\n  return new ɵRuntimeError(3009 /* RuntimeErrorCode.INVALID_PROPERTY */, ngDevMode && `The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n}\nfunction invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {\n  return new ɵRuntimeError(3010 /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */, ngDevMode && `The CSS property \"${prop}\" that exists between the times of \"${firstStart}ms\" and \"${firstEnd}ms\" is also being animated in a parallel animation between the times of \"${secondStart}ms\" and \"${secondEnd}ms\"`);\n}\nfunction invalidKeyframes() {\n  return new ɵRuntimeError(3011 /* RuntimeErrorCode.INVALID_KEYFRAMES */, ngDevMode && `keyframes() must be placed inside of a call to animate()`);\n}\nfunction invalidOffset() {\n  return new ɵRuntimeError(3012 /* RuntimeErrorCode.INVALID_OFFSET */, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);\n}\nfunction keyframeOffsetsOutOfOrder() {\n  return new ɵRuntimeError(3200 /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */, ngDevMode && `Please ensure that all keyframe offsets are in order`);\n}\nfunction keyframesMissingOffsets() {\n  return new ɵRuntimeError(3202 /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);\n}\nfunction invalidStagger() {\n  return new ɵRuntimeError(3013 /* RuntimeErrorCode.INVALID_STAGGER */, ngDevMode && `stagger() can only be used inside of query()`);\n}\nfunction invalidQuery(selector) {\n  return new ɵRuntimeError(3014 /* RuntimeErrorCode.INVALID_QUERY */, ngDevMode && `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`);\n}\nfunction invalidExpression(expr) {\n  return new ɵRuntimeError(3015 /* RuntimeErrorCode.INVALID_EXPRESSION */, ngDevMode && `The provided transition expression \"${expr}\" is not supported`);\n}\nfunction invalidTransitionAlias(alias) {\n  return new ɵRuntimeError(3016 /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */, ngDevMode && `The transition alias value \"${alias}\" is not supported`);\n}\nfunction validationFailed(errors) {\n  return new ɵRuntimeError(3500 /* RuntimeErrorCode.VALIDATION_FAILED */, ngDevMode && `animation validation failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction buildingFailed(errors) {\n  return new ɵRuntimeError(3501 /* RuntimeErrorCode.BUILDING_FAILED */, ngDevMode && `animation building failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerBuildFailed(name, errors) {\n  return new ɵRuntimeError(3404 /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */, ngDevMode && `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors.map(err => err.message).join('\\n - ')}`);\n}\nfunction animationFailed(errors) {\n  return new ɵRuntimeError(3502 /* RuntimeErrorCode.ANIMATION_FAILED */, ngDevMode && `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction registerFailed(errors) {\n  return new ɵRuntimeError(3503 /* RuntimeErrorCode.REGISTRATION_FAILED */, ngDevMode && `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingOrDestroyedAnimation() {\n  return new ɵRuntimeError(3300 /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */, ngDevMode && \"The requested animation doesn't exist or has already been destroyed\");\n}\nfunction createAnimationFailed(errors) {\n  return new ɵRuntimeError(3504 /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */, ngDevMode && `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingPlayer(id) {\n  return new ɵRuntimeError(3301 /* RuntimeErrorCode.MISSING_PLAYER */, ngDevMode && `Unable to find the timeline player referenced by ${id}`);\n}\nfunction missingTrigger(phase, name) {\n  return new ɵRuntimeError(3302 /* RuntimeErrorCode.MISSING_TRIGGER */, ngDevMode && `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n}\nfunction missingEvent(name) {\n  return new ɵRuntimeError(3303 /* RuntimeErrorCode.MISSING_EVENT */, ngDevMode && `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n}\nfunction unsupportedTriggerEvent(phase, name) {\n  return new ɵRuntimeError(3400 /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */, ngDevMode && `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n}\nfunction unregisteredTrigger(name) {\n  return new ɵRuntimeError(3401 /* RuntimeErrorCode.UNREGISTERED_TRIGGER */, ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`);\n}\nfunction triggerTransitionsFailed(errors) {\n  return new ɵRuntimeError(3402 /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */, ngDevMode && `Unable to process animations due to the following failed trigger transitions\\n ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerParsingFailed(name, errors) {\n  return new ɵRuntimeError(3403 /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */, ngDevMode && `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction transitionFailed(name, errors) {\n  return new ɵRuntimeError(3505 /* RuntimeErrorCode.TRANSITION_FAILED */, ngDevMode && `@${name} has failed due to:\\n ${errors.map(err => err.message).join('\\n- ')}`);\n}\n\n/**\n * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nconst ANIMATABLE_PROP_SET = new Set(['-moz-outline-radius', '-moz-outline-radius-bottomleft', '-moz-outline-radius-bottomright', '-moz-outline-radius-topleft', '-moz-outline-radius-topright', '-ms-grid-columns', '-ms-grid-rows', '-webkit-line-clamp', '-webkit-text-fill-color', '-webkit-text-stroke', '-webkit-text-stroke-color', 'accent-color', 'all', 'backdrop-filter', 'background', 'background-color', 'background-position', 'background-size', 'block-size', 'border', 'border-block-end', 'border-block-end-color', 'border-block-end-width', 'border-block-start', 'border-block-start-color', 'border-block-start-width', 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', 'border-bottom-right-radius', 'border-bottom-width', 'border-color', 'border-end-end-radius', 'border-end-start-radius', 'border-image-outset', 'border-image-slice', 'border-image-width', 'border-inline-end', 'border-inline-end-color', 'border-inline-end-width', 'border-inline-start', 'border-inline-start-color', 'border-inline-start-width', 'border-left', 'border-left-color', 'border-left-width', 'border-radius', 'border-right', 'border-right-color', 'border-right-width', 'border-start-end-radius', 'border-start-start-radius', 'border-top', 'border-top-color', 'border-top-left-radius', 'border-top-right-radius', 'border-top-width', 'border-width', 'bottom', 'box-shadow', 'caret-color', 'clip', 'clip-path', 'color', 'column-count', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', 'column-width', 'columns', 'filter', 'flex', 'flex-basis', 'flex-grow', 'flex-shrink', 'font', 'font-size', 'font-size-adjust', 'font-stretch', 'font-variation-settings', 'font-weight', 'gap', 'grid-column-gap', 'grid-gap', 'grid-row-gap', 'grid-template-columns', 'grid-template-rows', 'height', 'inline-size', 'input-security', 'inset', 'inset-block', 'inset-block-end', 'inset-block-start', 'inset-inline', 'inset-inline-end', 'inset-inline-start', 'left', 'letter-spacing', 'line-clamp', 'line-height', 'margin', 'margin-block-end', 'margin-block-start', 'margin-bottom', 'margin-inline-end', 'margin-inline-start', 'margin-left', 'margin-right', 'margin-top', 'mask', 'mask-border', 'mask-position', 'mask-size', 'max-block-size', 'max-height', 'max-inline-size', 'max-lines', 'max-width', 'min-block-size', 'min-height', 'min-inline-size', 'min-width', 'object-position', 'offset', 'offset-anchor', 'offset-distance', 'offset-path', 'offset-position', 'offset-rotate', 'opacity', 'order', 'outline', 'outline-color', 'outline-offset', 'outline-width', 'padding', 'padding-block-end', 'padding-block-start', 'padding-bottom', 'padding-inline-end', 'padding-inline-start', 'padding-left', 'padding-right', 'padding-top', 'perspective', 'perspective-origin', 'right', 'rotate', 'row-gap', 'scale', 'scroll-margin', 'scroll-margin-block', 'scroll-margin-block-end', 'scroll-margin-block-start', 'scroll-margin-bottom', 'scroll-margin-inline', 'scroll-margin-inline-end', 'scroll-margin-inline-start', 'scroll-margin-left', 'scroll-margin-right', 'scroll-margin-top', 'scroll-padding', 'scroll-padding-block', 'scroll-padding-block-end', 'scroll-padding-block-start', 'scroll-padding-bottom', 'scroll-padding-inline', 'scroll-padding-inline-end', 'scroll-padding-inline-start', 'scroll-padding-left', 'scroll-padding-right', 'scroll-padding-top', 'scroll-snap-coordinate', 'scroll-snap-destination', 'scrollbar-color', 'shape-image-threshold', 'shape-margin', 'shape-outside', 'tab-size', 'text-decoration', 'text-decoration-color', 'text-decoration-thickness', 'text-emphasis', 'text-emphasis-color', 'text-indent', 'text-shadow', 'text-underline-offset', 'top', 'transform', 'transform-origin', 'translate', 'vertical-align', 'visibility', 'width', 'word-spacing', 'z-index', 'zoom']);\nfunction optimizeGroupPlayer(players) {\n  switch (players.length) {\n    case 0:\n      return new NoopAnimationPlayer();\n    case 1:\n      return players[0];\n    default:\n      return new ɵAnimationGroupPlayer(players);\n  }\n}\nfunction normalizeKeyframes$1(normalizer, keyframes, preStyles = new Map(), postStyles = new Map()) {\n  const errors = [];\n  const normalizedKeyframes = [];\n  let previousOffset = -1;\n  let previousKeyframe = null;\n  keyframes.forEach(kf => {\n    const offset = kf.get('offset');\n    const isSameOffset = offset == previousOffset;\n    const normalizedKeyframe = isSameOffset && previousKeyframe || new Map();\n    kf.forEach((val, prop) => {\n      let normalizedProp = prop;\n      let normalizedValue = val;\n      if (prop !== 'offset') {\n        normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n        switch (normalizedValue) {\n          case ɵPRE_STYLE:\n            normalizedValue = preStyles.get(prop);\n            break;\n          case AUTO_STYLE:\n            normalizedValue = postStyles.get(prop);\n            break;\n          default:\n            normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n            break;\n        }\n      }\n      normalizedKeyframe.set(normalizedProp, normalizedValue);\n    });\n    if (!isSameOffset) {\n      normalizedKeyframes.push(normalizedKeyframe);\n    }\n    previousKeyframe = normalizedKeyframe;\n    previousOffset = offset;\n  });\n  if (errors.length) {\n    throw animationFailed(errors);\n  }\n  return normalizedKeyframes;\n}\nfunction listenOnPlayer(player, eventName, event, callback) {\n  switch (eventName) {\n    case 'start':\n      player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n      break;\n    case 'done':\n      player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n      break;\n    case 'destroy':\n      player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n      break;\n  }\n}\nfunction copyAnimationEvent(e, phaseName, player) {\n  const totalTime = player.totalTime;\n  const disabled = player.disabled ? true : false;\n  const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n  const data = e['_data'];\n  if (data != null) {\n    event['_data'] = data;\n  }\n  return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n  return {\n    element,\n    triggerName,\n    fromState,\n    toState,\n    phaseName,\n    totalTime,\n    disabled: !!disabled\n  };\n}\nfunction getOrSetDefaultValue(map, key, defaultValue) {\n  let value = map.get(key);\n  if (!value) {\n    map.set(key, value = defaultValue);\n  }\n  return value;\n}\nfunction parseTimelineCommand(command) {\n  const separatorPos = command.indexOf(':');\n  const id = command.substring(1, separatorPos);\n  const action = command.slice(separatorPos + 1);\n  return [id, action];\n}\nconst documentElement = /* @__PURE__ */(() => typeof document === 'undefined' ? null : document.documentElement)();\nfunction getParentElement(element) {\n  const parent = element.parentNode || element.host || null; // consider host to support shadow DOM\n  if (parent === documentElement) {\n    return null;\n  }\n  return parent;\n}\nfunction containsVendorPrefix(prop) {\n  // Webkit is the only real popular vendor prefix nowadays\n  // cc: http://shouldiprefix.com/\n  return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nlet _CACHED_BODY = null;\nlet _IS_WEBKIT = false;\nfunction validateStyleProperty(prop) {\n  if (!_CACHED_BODY) {\n    _CACHED_BODY = getBodyNode() || {};\n    _IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;\n  }\n  let result = true;\n  if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {\n    result = prop in _CACHED_BODY.style;\n    if (!result && _IS_WEBKIT) {\n      const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n      result = camelProp in _CACHED_BODY.style;\n    }\n  }\n  return result;\n}\nfunction validateWebAnimatableStyleProperty(prop) {\n  return ANIMATABLE_PROP_SET.has(prop);\n}\nfunction getBodyNode() {\n  if (typeof document != 'undefined') {\n    return document.body;\n  }\n  return null;\n}\nfunction containsElement(elm1, elm2) {\n  while (elm2) {\n    if (elm2 === elm1) {\n      return true;\n    }\n    elm2 = getParentElement(elm2);\n  }\n  return false;\n}\nfunction invokeQuery(element, selector, multi) {\n  if (multi) {\n    return Array.from(element.querySelectorAll(selector));\n  }\n  const elem = element.querySelector(selector);\n  return elem ? [elem] : [];\n}\nfunction hypenatePropsKeys(original) {\n  const newMap = new Map();\n  original.forEach((val, prop) => {\n    const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n    newMap.set(newProp, val);\n  });\n  return newMap;\n}\n\n/**\n * @publicApi\n *\n * `AnimationDriver` implentation for Noop animations\n */\nclass NoopAnimationDriver {\n  /**\n   * @returns Whether `prop` is a valid CSS property\n   */\n  validateStyleProperty(prop) {\n    return validateStyleProperty(prop);\n  }\n  /**\n   *\n   * @returns Whether elm1 contains elm2.\n   */\n  containsElement(elm1, elm2) {\n    return containsElement(elm1, elm2);\n  }\n  /**\n   * @returns Rhe parent of the given element or `null` if the element is the `document`\n   */\n  getParentElement(element) {\n    return getParentElement(element);\n  }\n  /**\n   * @returns The result of the query selector on the element. The array will contain up to 1 item\n   *     if `multi` is  `false`.\n   */\n  query(element, selector, multi) {\n    return invokeQuery(element, selector, multi);\n  }\n  /**\n   * @returns The `defaultValue` or empty string\n   */\n  computeStyle(element, prop, defaultValue) {\n    return defaultValue || '';\n  }\n  /**\n   * @returns An `NoopAnimationPlayer`\n   */\n  animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n    return new NoopAnimationPlayer(duration, delay);\n  }\n  static ɵfac = function NoopAnimationDriver_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NoopAnimationDriver)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NoopAnimationDriver,\n    factory: NoopAnimationDriver.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NoopAnimationDriver, [{\n    type: Injectable\n  }], null, null);\n})();\n/**\n * @publicApi\n */\nclass AnimationDriver {\n  /**\n   * @deprecated Use the NoopAnimationDriver class.\n   */\n  static NOOP = new NoopAnimationDriver();\n}\nclass AnimationStyleNormalizer {}\nclass NoopAnimationStyleNormalizer {\n  normalizePropertyName(propertyName, errors) {\n    return propertyName;\n  }\n  normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n    return value;\n  }\n}\nconst ONE_SECOND = 1000;\nconst SUBSTITUTION_EXPR_START = '{{';\nconst SUBSTITUTION_EXPR_END = '}}';\nconst ENTER_CLASSNAME = 'ng-enter';\nconst LEAVE_CLASSNAME = 'ng-leave';\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n  if (typeof value == 'number') return value;\n  const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n  if (!matches || matches.length < 2) return 0;\n  return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n  switch (unit) {\n    case 's':\n      return value * ONE_SECOND;\n    default:\n      // ms or something else\n      return value;\n  }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n  return timings.hasOwnProperty('duration') ? timings : parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n  const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n  let duration;\n  let delay = 0;\n  let easing = '';\n  if (typeof exp === 'string') {\n    const matches = exp.match(regex);\n    if (matches === null) {\n      errors.push(invalidTimingValue(exp));\n      return {\n        duration: 0,\n        delay: 0,\n        easing: ''\n      };\n    }\n    duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n    const delayMatch = matches[3];\n    if (delayMatch != null) {\n      delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n    }\n    const easingVal = matches[5];\n    if (easingVal) {\n      easing = easingVal;\n    }\n  } else {\n    duration = exp;\n  }\n  if (!allowNegativeValues) {\n    let containsErrors = false;\n    let startIndex = errors.length;\n    if (duration < 0) {\n      errors.push(negativeStepValue());\n      containsErrors = true;\n    }\n    if (delay < 0) {\n      errors.push(negativeDelayValue());\n      containsErrors = true;\n    }\n    if (containsErrors) {\n      errors.splice(startIndex, 0, invalidTimingValue(exp));\n    }\n  }\n  return {\n    duration,\n    delay,\n    easing\n  };\n}\nfunction normalizeKeyframes(keyframes) {\n  if (!keyframes.length) {\n    return [];\n  }\n  if (keyframes[0] instanceof Map) {\n    return keyframes;\n  }\n  return keyframes.map(kf => new Map(Object.entries(kf)));\n}\nfunction normalizeStyles(styles) {\n  return Array.isArray(styles) ? new Map(...styles) : new Map(styles);\n}\nfunction setStyles(element, styles, formerStyles) {\n  styles.forEach((val, prop) => {\n    const camelProp = dashCaseToCamelCase(prop);\n    if (formerStyles && !formerStyles.has(prop)) {\n      formerStyles.set(prop, element.style[camelProp]);\n    }\n    element.style[camelProp] = val;\n  });\n}\nfunction eraseStyles(element, styles) {\n  styles.forEach((_, prop) => {\n    const camelProp = dashCaseToCamelCase(prop);\n    element.style[camelProp] = '';\n  });\n}\nfunction normalizeAnimationEntry(steps) {\n  if (Array.isArray(steps)) {\n    if (steps.length == 1) return steps[0];\n    return sequence(steps);\n  }\n  return steps;\n}\nfunction validateStyleParams(value, options, errors) {\n  const params = options.params || {};\n  const matches = extractStyleParams(value);\n  if (matches.length) {\n    matches.forEach(varName => {\n      if (!params.hasOwnProperty(varName)) {\n        errors.push(invalidStyleParams(varName));\n      }\n    });\n  }\n}\nconst PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\nfunction extractStyleParams(value) {\n  let params = [];\n  if (typeof value === 'string') {\n    let match;\n    while (match = PARAM_REGEX.exec(value)) {\n      params.push(match[1]);\n    }\n    PARAM_REGEX.lastIndex = 0;\n  }\n  return params;\n}\nfunction interpolateParams(value, params, errors) {\n  const original = `${value}`;\n  const str = original.replace(PARAM_REGEX, (_, varName) => {\n    let localVal = params[varName];\n    // this means that the value was never overridden by the data passed in by the user\n    if (localVal == null) {\n      errors.push(invalidParamValue(varName));\n      localVal = '';\n    }\n    return localVal.toString();\n  });\n  // we do this to assert that numeric values stay as they are\n  return str == original ? value : str;\n}\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n  return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());\n}\nfunction camelCaseToDashCase(input) {\n  return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n  return duration === 0 || delay === 0;\n}\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n  if (previousStyles.size && keyframes.length) {\n    let startingKeyframe = keyframes[0];\n    let missingStyleProps = [];\n    previousStyles.forEach((val, prop) => {\n      if (!startingKeyframe.has(prop)) {\n        missingStyleProps.push(prop);\n      }\n      startingKeyframe.set(prop, val);\n    });\n    if (missingStyleProps.length) {\n      for (let i = 1; i < keyframes.length; i++) {\n        let kf = keyframes[i];\n        missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop)));\n      }\n    }\n  }\n  return keyframes;\n}\nfunction visitDslNode(visitor, node, context) {\n  switch (node.type) {\n    case AnimationMetadataType.Trigger:\n      return visitor.visitTrigger(node, context);\n    case AnimationMetadataType.State:\n      return visitor.visitState(node, context);\n    case AnimationMetadataType.Transition:\n      return visitor.visitTransition(node, context);\n    case AnimationMetadataType.Sequence:\n      return visitor.visitSequence(node, context);\n    case AnimationMetadataType.Group:\n      return visitor.visitGroup(node, context);\n    case AnimationMetadataType.Animate:\n      return visitor.visitAnimate(node, context);\n    case AnimationMetadataType.Keyframes:\n      return visitor.visitKeyframes(node, context);\n    case AnimationMetadataType.Style:\n      return visitor.visitStyle(node, context);\n    case AnimationMetadataType.Reference:\n      return visitor.visitReference(node, context);\n    case AnimationMetadataType.AnimateChild:\n      return visitor.visitAnimateChild(node, context);\n    case AnimationMetadataType.AnimateRef:\n      return visitor.visitAnimateRef(node, context);\n    case AnimationMetadataType.Query:\n      return visitor.visitQuery(node, context);\n    case AnimationMetadataType.Stagger:\n      return visitor.visitStagger(node, context);\n    default:\n      throw invalidNodeType(node.type);\n  }\n}\nfunction computeStyle(element, prop) {\n  return window.getComputedStyle(element)[prop];\n}\nconst DIMENSIONAL_PROP_SET = new Set(['width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'left', 'top', 'bottom', 'right', 'fontSize', 'outlineWidth', 'outlineOffset', 'paddingTop', 'paddingLeft', 'paddingBottom', 'paddingRight', 'marginTop', 'marginLeft', 'marginBottom', 'marginRight', 'borderRadius', 'borderWidth', 'borderTopWidth', 'borderLeftWidth', 'borderRightWidth', 'borderBottomWidth', 'textIndent', 'perspective']);\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n  normalizePropertyName(propertyName, errors) {\n    return dashCaseToCamelCase(propertyName);\n  }\n  normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n    let unit = '';\n    const strVal = value.toString().trim();\n    if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') {\n      if (typeof value === 'number') {\n        unit = 'px';\n      } else {\n        const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n        if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n          errors.push(invalidCssUnitValue(userProvidedProperty, value));\n        }\n      }\n    }\n    return strVal + unit;\n  }\n}\nfunction createListOfWarnings(warnings) {\n  const LINE_START = '\\n - ';\n  return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`;\n}\nfunction warnValidation(warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnTriggerBuild(name, warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`The animation trigger \"${name}\" has built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnRegister(warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction triggerParsingWarnings(name, warnings) {\n  (typeof ngDevMode === 'undefined' || ngDevMode) && console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction pushUnrecognizedPropertiesWarning(warnings, props) {\n  if (props.length) {\n    warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`);\n  }\n}\nconst ANY_STATE = '*';\nfunction parseTransitionExpr(transitionValue, errors) {\n  const expressions = [];\n  if (typeof transitionValue == 'string') {\n    transitionValue.split(/\\s*,\\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors));\n  } else {\n    expressions.push(transitionValue);\n  }\n  return expressions;\n}\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n  if (eventStr[0] == ':') {\n    const result = parseAnimationAlias(eventStr, errors);\n    if (typeof result == 'function') {\n      expressions.push(result);\n      return;\n    }\n    eventStr = result;\n  }\n  const match = eventStr.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);\n  if (match == null || match.length < 4) {\n    errors.push(invalidExpression(eventStr));\n    return expressions;\n  }\n  const fromState = match[1];\n  const separator = match[2];\n  const toState = match[3];\n  expressions.push(makeLambdaFromStates(fromState, toState));\n  const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n  if (separator[0] == '<' && !isFullAnyStateExpr) {\n    expressions.push(makeLambdaFromStates(toState, fromState));\n  }\n  return;\n}\nfunction parseAnimationAlias(alias, errors) {\n  switch (alias) {\n    case ':enter':\n      return 'void => *';\n    case ':leave':\n      return '* => void';\n    case ':increment':\n      return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);\n    case ':decrement':\n      return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);\n    default:\n      errors.push(invalidTransitionAlias(alias));\n      return '* => *';\n  }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nconst TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nconst FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\nfunction makeLambdaFromStates(lhs, rhs) {\n  const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n  const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n  return (fromState, toState) => {\n    let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n    let rhsMatch = rhs == ANY_STATE || rhs == toState;\n    if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n      lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n    }\n    if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n      rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n    }\n    return lhsMatch && rhsMatch;\n  };\n}\nconst SELF_TOKEN = ':self';\nconst SELF_TOKEN_REGEX = new RegExp(`s*${SELF_TOKEN}s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n *   - No offsets are used at all\n *   - Each style() entry contains an offset value\n *   - Each offset is between 0 and 1\n *   - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\nfunction buildAnimationAst(driver, metadata, errors, warnings) {\n  return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);\n}\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n  _driver;\n  constructor(_driver) {\n    this._driver = _driver;\n  }\n  build(metadata, errors, warnings) {\n    const context = new AnimationAstBuilderContext(errors);\n    this._resetContextStyleTimingState(context);\n    const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (context.unsupportedCSSPropertiesFound.size) {\n        pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);\n      }\n    }\n    return ast;\n  }\n  _resetContextStyleTimingState(context) {\n    context.currentQuerySelector = ROOT_SELECTOR;\n    context.collectedStyles = new Map();\n    context.collectedStyles.set(ROOT_SELECTOR, new Map());\n    context.currentTime = 0;\n  }\n  visitTrigger(metadata, context) {\n    let queryCount = context.queryCount = 0;\n    let depCount = context.depCount = 0;\n    const states = [];\n    const transitions = [];\n    if (metadata.name.charAt(0) == '@') {\n      context.errors.push(invalidTrigger());\n    }\n    metadata.definitions.forEach(def => {\n      this._resetContextStyleTimingState(context);\n      if (def.type == AnimationMetadataType.State) {\n        const stateDef = def;\n        const name = stateDef.name;\n        name.toString().split(/\\s*,\\s*/).forEach(n => {\n          stateDef.name = n;\n          states.push(this.visitState(stateDef, context));\n        });\n        stateDef.name = name;\n      } else if (def.type == AnimationMetadataType.Transition) {\n        const transition = this.visitTransition(def, context);\n        queryCount += transition.queryCount;\n        depCount += transition.depCount;\n        transitions.push(transition);\n      } else {\n        context.errors.push(invalidDefinition());\n      }\n    });\n    return {\n      type: AnimationMetadataType.Trigger,\n      name: metadata.name,\n      states,\n      transitions,\n      queryCount,\n      depCount,\n      options: null\n    };\n  }\n  visitState(metadata, context) {\n    const styleAst = this.visitStyle(metadata.styles, context);\n    const astParams = metadata.options && metadata.options.params || null;\n    if (styleAst.containsDynamicStyles) {\n      const missingSubs = new Set();\n      const params = astParams || {};\n      styleAst.styles.forEach(style => {\n        if (style instanceof Map) {\n          style.forEach(value => {\n            extractStyleParams(value).forEach(sub => {\n              if (!params.hasOwnProperty(sub)) {\n                missingSubs.add(sub);\n              }\n            });\n          });\n        }\n      });\n      if (missingSubs.size) {\n        context.errors.push(invalidState(metadata.name, [...missingSubs.values()]));\n      }\n    }\n    return {\n      type: AnimationMetadataType.State,\n      name: metadata.name,\n      style: styleAst,\n      options: astParams ? {\n        params: astParams\n      } : null\n    };\n  }\n  visitTransition(metadata, context) {\n    context.queryCount = 0;\n    context.depCount = 0;\n    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n    const matchers = parseTransitionExpr(metadata.expr, context.errors);\n    return {\n      type: AnimationMetadataType.Transition,\n      matchers,\n      animation,\n      queryCount: context.queryCount,\n      depCount: context.depCount,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitSequence(metadata, context) {\n    return {\n      type: AnimationMetadataType.Sequence,\n      steps: metadata.steps.map(s => visitDslNode(this, s, context)),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitGroup(metadata, context) {\n    const currentTime = context.currentTime;\n    let furthestTime = 0;\n    const steps = metadata.steps.map(step => {\n      context.currentTime = currentTime;\n      const innerAst = visitDslNode(this, step, context);\n      furthestTime = Math.max(furthestTime, context.currentTime);\n      return innerAst;\n    });\n    context.currentTime = furthestTime;\n    return {\n      type: AnimationMetadataType.Group,\n      steps,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimate(metadata, context) {\n    const timingAst = constructTimingAst(metadata.timings, context.errors);\n    context.currentAnimateTimings = timingAst;\n    let styleAst;\n    let styleMetadata = metadata.styles ? metadata.styles : style({});\n    if (styleMetadata.type == AnimationMetadataType.Keyframes) {\n      styleAst = this.visitKeyframes(styleMetadata, context);\n    } else {\n      let styleMetadata = metadata.styles;\n      let isEmpty = false;\n      if (!styleMetadata) {\n        isEmpty = true;\n        const newStyleData = {};\n        if (timingAst.easing) {\n          newStyleData['easing'] = timingAst.easing;\n        }\n        styleMetadata = style(newStyleData);\n      }\n      context.currentTime += timingAst.duration + timingAst.delay;\n      const _styleAst = this.visitStyle(styleMetadata, context);\n      _styleAst.isEmptyStep = isEmpty;\n      styleAst = _styleAst;\n    }\n    context.currentAnimateTimings = null;\n    return {\n      type: AnimationMetadataType.Animate,\n      timings: timingAst,\n      style: styleAst,\n      options: null\n    };\n  }\n  visitStyle(metadata, context) {\n    const ast = this._makeStyleAst(metadata, context);\n    this._validateStyleAst(ast, context);\n    return ast;\n  }\n  _makeStyleAst(metadata, context) {\n    const styles = [];\n    const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];\n    for (let styleTuple of metadataStyles) {\n      if (typeof styleTuple === 'string') {\n        if (styleTuple === AUTO_STYLE) {\n          styles.push(styleTuple);\n        } else {\n          context.errors.push(invalidStyleValue(styleTuple));\n        }\n      } else {\n        styles.push(new Map(Object.entries(styleTuple)));\n      }\n    }\n    let containsDynamicStyles = false;\n    let collectedEasing = null;\n    styles.forEach(styleData => {\n      if (styleData instanceof Map) {\n        if (styleData.has('easing')) {\n          collectedEasing = styleData.get('easing');\n          styleData.delete('easing');\n        }\n        if (!containsDynamicStyles) {\n          for (let value of styleData.values()) {\n            if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n              containsDynamicStyles = true;\n              break;\n            }\n          }\n        }\n      }\n    });\n    return {\n      type: AnimationMetadataType.Style,\n      styles,\n      easing: collectedEasing,\n      offset: metadata.offset,\n      containsDynamicStyles,\n      options: null\n    };\n  }\n  _validateStyleAst(ast, context) {\n    const timings = context.currentAnimateTimings;\n    let endTime = context.currentTime;\n    let startTime = context.currentTime;\n    if (timings && startTime > 0) {\n      startTime -= timings.duration + timings.delay;\n    }\n    ast.styles.forEach(tuple => {\n      if (typeof tuple === 'string') return;\n      tuple.forEach((value, prop) => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          if (!this._driver.validateStyleProperty(prop)) {\n            tuple.delete(prop);\n            context.unsupportedCSSPropertiesFound.add(prop);\n            return;\n          }\n        }\n        // This is guaranteed to have a defined Map at this querySelector location making it\n        // safe to add the assertion here. It is set as a default empty map in prior methods.\n        const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);\n        const collectedEntry = collectedStyles.get(prop);\n        let updateCollectedStyle = true;\n        if (collectedEntry) {\n          if (startTime != endTime && startTime >= collectedEntry.startTime && endTime <= collectedEntry.endTime) {\n            context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));\n            updateCollectedStyle = false;\n          }\n          // we always choose the smaller start time value since we\n          // want to have a record of the entire animation window where\n          // the style property is being animated in between\n          startTime = collectedEntry.startTime;\n        }\n        if (updateCollectedStyle) {\n          collectedStyles.set(prop, {\n            startTime,\n            endTime\n          });\n        }\n        if (context.options) {\n          validateStyleParams(value, context.options, context.errors);\n        }\n      });\n    });\n  }\n  visitKeyframes(metadata, context) {\n    const ast = {\n      type: AnimationMetadataType.Keyframes,\n      styles: [],\n      options: null\n    };\n    if (!context.currentAnimateTimings) {\n      context.errors.push(invalidKeyframes());\n      return ast;\n    }\n    const MAX_KEYFRAME_OFFSET = 1;\n    let totalKeyframesWithOffsets = 0;\n    const offsets = [];\n    let offsetsOutOfOrder = false;\n    let keyframesOutOfRange = false;\n    let previousOffset = 0;\n    const keyframes = metadata.steps.map(styles => {\n      const style = this._makeStyleAst(styles, context);\n      let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n      let offset = 0;\n      if (offsetVal != null) {\n        totalKeyframesWithOffsets++;\n        offset = style.offset = offsetVal;\n      }\n      keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n      offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n      previousOffset = offset;\n      offsets.push(offset);\n      return style;\n    });\n    if (keyframesOutOfRange) {\n      context.errors.push(invalidOffset());\n    }\n    if (offsetsOutOfOrder) {\n      context.errors.push(keyframeOffsetsOutOfOrder());\n    }\n    const length = metadata.steps.length;\n    let generatedOffset = 0;\n    if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n      context.errors.push(keyframesMissingOffsets());\n    } else if (totalKeyframesWithOffsets == 0) {\n      generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n    }\n    const limit = length - 1;\n    const currentTime = context.currentTime;\n    const currentAnimateTimings = context.currentAnimateTimings;\n    const animateDuration = currentAnimateTimings.duration;\n    keyframes.forEach((kf, i) => {\n      const offset = generatedOffset > 0 ? i == limit ? 1 : generatedOffset * i : offsets[i];\n      const durationUpToThisFrame = offset * animateDuration;\n      context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n      currentAnimateTimings.duration = durationUpToThisFrame;\n      this._validateStyleAst(kf, context);\n      kf.offset = offset;\n      ast.styles.push(kf);\n    });\n    return ast;\n  }\n  visitReference(metadata, context) {\n    return {\n      type: AnimationMetadataType.Reference,\n      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimateChild(metadata, context) {\n    context.depCount++;\n    return {\n      type: AnimationMetadataType.AnimateChild,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitAnimateRef(metadata, context) {\n    return {\n      type: AnimationMetadataType.AnimateRef,\n      animation: this.visitReference(metadata.animation, context),\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitQuery(metadata, context) {\n    const parentSelector = context.currentQuerySelector;\n    const options = metadata.options || {};\n    context.queryCount++;\n    context.currentQuery = metadata;\n    const [selector, includeSelf] = normalizeSelector(metadata.selector);\n    context.currentQuerySelector = parentSelector.length ? parentSelector + ' ' + selector : selector;\n    getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map());\n    const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n    context.currentQuery = null;\n    context.currentQuerySelector = parentSelector;\n    return {\n      type: AnimationMetadataType.Query,\n      selector,\n      limit: options.limit || 0,\n      optional: !!options.optional,\n      includeSelf,\n      animation,\n      originalSelector: metadata.selector,\n      options: normalizeAnimationOptions(metadata.options)\n    };\n  }\n  visitStagger(metadata, context) {\n    if (!context.currentQuery) {\n      context.errors.push(invalidStagger());\n    }\n    const timings = metadata.timings === 'full' ? {\n      duration: 0,\n      delay: 0,\n      easing: 'full'\n    } : resolveTiming(metadata.timings, context.errors, true);\n    return {\n      type: AnimationMetadataType.Stagger,\n      animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n      timings,\n      options: null\n    };\n  }\n}\nfunction normalizeSelector(selector) {\n  const hasAmpersand = selector.split(/\\s*,\\s*/).find(token => token == SELF_TOKEN) ? true : false;\n  if (hasAmpersand) {\n    selector = selector.replace(SELF_TOKEN_REGEX, '');\n  }\n  // Note: the :enter and :leave aren't normalized here since those\n  // selectors are filled in at runtime during timeline building\n  selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR).replace(/@\\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.slice(1)).replace(/:animating/g, NG_ANIMATING_SELECTOR);\n  return [selector, hasAmpersand];\n}\nfunction normalizeParams(obj) {\n  return obj ? {\n    ...obj\n  } : null;\n}\nclass AnimationAstBuilderContext {\n  errors;\n  queryCount = 0;\n  depCount = 0;\n  currentTransition = null;\n  currentQuery = null;\n  currentQuerySelector = null;\n  currentAnimateTimings = null;\n  currentTime = 0;\n  collectedStyles = new Map();\n  options = null;\n  unsupportedCSSPropertiesFound = new Set();\n  constructor(errors) {\n    this.errors = errors;\n  }\n}\nfunction consumeOffset(styles) {\n  if (typeof styles == 'string') return null;\n  let offset = null;\n  if (Array.isArray(styles)) {\n    styles.forEach(styleTuple => {\n      if (styleTuple instanceof Map && styleTuple.has('offset')) {\n        const obj = styleTuple;\n        offset = parseFloat(obj.get('offset'));\n        obj.delete('offset');\n      }\n    });\n  } else if (styles instanceof Map && styles.has('offset')) {\n    const obj = styles;\n    offset = parseFloat(obj.get('offset'));\n    obj.delete('offset');\n  }\n  return offset;\n}\nfunction constructTimingAst(value, errors) {\n  if (value.hasOwnProperty('duration')) {\n    return value;\n  }\n  if (typeof value == 'number') {\n    const duration = resolveTiming(value, errors).duration;\n    return makeTimingAst(duration, 0, '');\n  }\n  const strValue = value;\n  const isDynamic = strValue.split(/\\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{');\n  if (isDynamic) {\n    const ast = makeTimingAst(0, 0, '');\n    ast.dynamic = true;\n    ast.strValue = strValue;\n    return ast;\n  }\n  const timings = resolveTiming(strValue, errors);\n  return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\nfunction normalizeAnimationOptions(options) {\n  if (options) {\n    options = {\n      ...options\n    };\n    if (options['params']) {\n      options['params'] = normalizeParams(options['params']);\n    }\n  } else {\n    options = {};\n  }\n  return options;\n}\nfunction makeTimingAst(duration, delay, easing) {\n  return {\n    duration,\n    delay,\n    easing\n  };\n}\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n  return {\n    type: 1 /* AnimationTransitionInstructionType.TimelineAnimation */,\n    element,\n    keyframes,\n    preStyleProps,\n    postStyleProps,\n    duration,\n    delay,\n    totalTime: duration + delay,\n    easing,\n    subTimeline\n  };\n}\nclass ElementInstructionMap {\n  _map = new Map();\n  get(element) {\n    return this._map.get(element) || [];\n  }\n  append(element, instructions) {\n    let existingInstructions = this._map.get(element);\n    if (!existingInstructions) {\n      this._map.set(element, existingInstructions = []);\n    }\n    existingInstructions.push(...instructions);\n  }\n  has(element) {\n    return this._map.has(element);\n  }\n  clear() {\n    this._map.clear();\n  }\n}\nconst ONE_FRAME_IN_MILLISECONDS = 1;\nconst ENTER_TOKEN = ':enter';\nconst ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nconst LEAVE_TOKEN = ':leave';\nconst LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```ts\n * sequence([\n *   style({ opacity: 0 }),\n *   animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```ts\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergeSort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```ts\n * sequence([\n *   style({ width: 0 }),\n *   animate(1000, style({ width: 100 })),\n *   animate(1000, style({ width: 200 })),\n *   animate(1000, style({ width: 300 }))\n *   animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill map.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) {\n  return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n  buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n    subInstructions = subInstructions || new ElementInstructionMap();\n    const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n    context.options = options;\n    const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n    context.currentTimeline.delayNextStep(delay);\n    context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n    visitDslNode(this, ast, context);\n    // this checks to see if an actual animation happened\n    const timelines = context.timelines.filter(timeline => timeline.containsAnimation());\n    // note: we just want to apply the final styles for the rootElement, so we do not\n    //       just apply the styles to the last timeline but the last timeline which\n    //       element is the root one (basically `*`-styles are replaced with the actual\n    //       state style values only for the root element)\n    if (timelines.length && finalStyles.size) {\n      let lastRootTimeline;\n      for (let i = timelines.length - 1; i >= 0; i--) {\n        const timeline = timelines[i];\n        if (timeline.element === rootElement) {\n          lastRootTimeline = timeline;\n          break;\n        }\n      }\n      if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {\n        lastRootTimeline.setStyles([finalStyles], null, context.errors, options);\n      }\n    }\n    return timelines.length ? timelines.map(timeline => timeline.buildKeyframes()) : [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];\n  }\n  visitTrigger(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitState(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitTransition(ast, context) {\n    // these values are not visited in this AST\n  }\n  visitAnimateChild(ast, context) {\n    const elementInstructions = context.subInstructions.get(context.element);\n    if (elementInstructions) {\n      const innerContext = context.createSubContext(ast.options);\n      const startTime = context.currentTimeline.currentTime;\n      const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);\n      if (startTime != endTime) {\n        // we do this on the upper context because we created a sub context for\n        // the sub child animations\n        context.transformIntoNewTimeline(endTime);\n      }\n    }\n    context.previousNode = ast;\n  }\n  visitAnimateRef(ast, context) {\n    const innerContext = context.createSubContext(ast.options);\n    innerContext.transformIntoNewTimeline();\n    this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);\n    this.visitReference(ast.animation, innerContext);\n    context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n    context.previousNode = ast;\n  }\n  _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {\n    for (const animationRefOptions of animationsRefsOptions) {\n      const animationDelay = animationRefOptions?.delay;\n      if (animationDelay) {\n        const animationDelayValue = typeof animationDelay === 'number' ? animationDelay : resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors));\n        innerContext.delayNextStep(animationDelayValue);\n      }\n    }\n  }\n  _visitSubInstructions(instructions, context, options) {\n    const startTime = context.currentTimeline.currentTime;\n    let furthestTime = startTime;\n    // this is a special-case for when a user wants to skip a sub\n    // animation from being fired entirely.\n    const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n    const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n    if (duration !== 0) {\n      instructions.forEach(instruction => {\n        const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n        furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n      });\n    }\n    return furthestTime;\n  }\n  visitReference(ast, context) {\n    context.updateOptions(ast.options, true);\n    visitDslNode(this, ast.animation, context);\n    context.previousNode = ast;\n  }\n  visitSequence(ast, context) {\n    const subContextCount = context.subContextCount;\n    let ctx = context;\n    const options = ast.options;\n    if (options && (options.params || options.delay)) {\n      ctx = context.createSubContext(options);\n      ctx.transformIntoNewTimeline();\n      if (options.delay != null) {\n        if (ctx.previousNode.type == AnimationMetadataType.Style) {\n          ctx.currentTimeline.snapshotCurrentStyles();\n          ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        }\n        const delay = resolveTimingValue(options.delay);\n        ctx.delayNextStep(delay);\n      }\n    }\n    if (ast.steps.length) {\n      ast.steps.forEach(s => visitDslNode(this, s, ctx));\n      // this is here just in case the inner steps only contain or end with a style() call\n      ctx.currentTimeline.applyStylesToKeyframe();\n      // this means that some animation function within the sequence\n      // ended up creating a sub timeline (which means the current\n      // timeline cannot overlap with the contents of the sequence)\n      if (ctx.subContextCount > subContextCount) {\n        ctx.transformIntoNewTimeline();\n      }\n    }\n    context.previousNode = ast;\n  }\n  visitGroup(ast, context) {\n    const innerTimelines = [];\n    let furthestTime = context.currentTimeline.currentTime;\n    const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n    ast.steps.forEach(s => {\n      const innerContext = context.createSubContext(ast.options);\n      if (delay) {\n        innerContext.delayNextStep(delay);\n      }\n      visitDslNode(this, s, innerContext);\n      furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n      innerTimelines.push(innerContext.currentTimeline);\n    });\n    // this operation is run after the AST loop because otherwise\n    // if the parent timeline's collected styles were updated then\n    // it would pass in invalid data into the new-to-be forked items\n    innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline));\n    context.transformIntoNewTimeline(furthestTime);\n    context.previousNode = ast;\n  }\n  _visitTiming(ast, context) {\n    if (ast.dynamic) {\n      const strValue = ast.strValue;\n      const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n      return resolveTiming(timingValue, context.errors);\n    } else {\n      return {\n        duration: ast.duration,\n        delay: ast.delay,\n        easing: ast.easing\n      };\n    }\n  }\n  visitAnimate(ast, context) {\n    const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n    const timeline = context.currentTimeline;\n    if (timings.delay) {\n      context.incrementTime(timings.delay);\n      timeline.snapshotCurrentStyles();\n    }\n    const style = ast.style;\n    if (style.type == AnimationMetadataType.Keyframes) {\n      this.visitKeyframes(style, context);\n    } else {\n      context.incrementTime(timings.duration);\n      this.visitStyle(style, context);\n      timeline.applyStylesToKeyframe();\n    }\n    context.currentAnimateTimings = null;\n    context.previousNode = ast;\n  }\n  visitStyle(ast, context) {\n    const timeline = context.currentTimeline;\n    const timings = context.currentAnimateTimings;\n    // this is a special case for when a style() call\n    // directly follows  an animate() call (but not inside of an animate() call)\n    if (!timings && timeline.hasCurrentStyleProperties()) {\n      timeline.forwardFrame();\n    }\n    const easing = timings && timings.easing || ast.easing;\n    if (ast.isEmptyStep) {\n      timeline.applyEmptyStep(easing);\n    } else {\n      timeline.setStyles(ast.styles, easing, context.errors, context.options);\n    }\n    context.previousNode = ast;\n  }\n  visitKeyframes(ast, context) {\n    const currentAnimateTimings = context.currentAnimateTimings;\n    const startTime = context.currentTimeline.duration;\n    const duration = currentAnimateTimings.duration;\n    const innerContext = context.createSubContext();\n    const innerTimeline = innerContext.currentTimeline;\n    innerTimeline.easing = currentAnimateTimings.easing;\n    ast.styles.forEach(step => {\n      const offset = step.offset || 0;\n      innerTimeline.forwardTime(offset * duration);\n      innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n      innerTimeline.applyStylesToKeyframe();\n    });\n    // this will ensure that the parent timeline gets all the styles from\n    // the child even if the new timeline below is not used\n    context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n    // we do this because the window between this timeline and the sub timeline\n    // should ensure that the styles within are exactly the same as they were before\n    context.transformIntoNewTimeline(startTime + duration);\n    context.previousNode = ast;\n  }\n  visitQuery(ast, context) {\n    // in the event that the first step before this is a style step we need\n    // to ensure the styles are applied before the children are animated\n    const startTime = context.currentTimeline.currentTime;\n    const options = ast.options || {};\n    const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n    if (delay && (context.previousNode.type === AnimationMetadataType.Style || startTime == 0 && context.currentTimeline.hasCurrentStyleProperties())) {\n      context.currentTimeline.snapshotCurrentStyles();\n      context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n    }\n    let furthestTime = startTime;\n    const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n    context.currentQueryTotal = elms.length;\n    let sameElementTimeline = null;\n    elms.forEach((element, i) => {\n      context.currentQueryIndex = i;\n      const innerContext = context.createSubContext(ast.options, element);\n      if (delay) {\n        innerContext.delayNextStep(delay);\n      }\n      if (element === context.element) {\n        sameElementTimeline = innerContext.currentTimeline;\n      }\n      visitDslNode(this, ast.animation, innerContext);\n      // this is here just incase the inner steps only contain or end\n      // with a style() call (which is here to signal that this is a preparatory\n      // call to style an element before it is animated again)\n      innerContext.currentTimeline.applyStylesToKeyframe();\n      const endTime = innerContext.currentTimeline.currentTime;\n      furthestTime = Math.max(furthestTime, endTime);\n    });\n    context.currentQueryIndex = 0;\n    context.currentQueryTotal = 0;\n    context.transformIntoNewTimeline(furthestTime);\n    if (sameElementTimeline) {\n      context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n      context.currentTimeline.snapshotCurrentStyles();\n    }\n    context.previousNode = ast;\n  }\n  visitStagger(ast, context) {\n    const parentContext = context.parentContext;\n    const tl = context.currentTimeline;\n    const timings = ast.timings;\n    const duration = Math.abs(timings.duration);\n    const maxTime = duration * (context.currentQueryTotal - 1);\n    let delay = duration * context.currentQueryIndex;\n    let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n    switch (staggerTransformer) {\n      case 'reverse':\n        delay = maxTime - delay;\n        break;\n      case 'full':\n        delay = parentContext.currentStaggerTime;\n        break;\n    }\n    const timeline = context.currentTimeline;\n    if (delay) {\n      timeline.delayNextStep(delay);\n    }\n    const startingTime = timeline.currentTime;\n    visitDslNode(this, ast.animation, context);\n    context.previousNode = ast;\n    // time = duration + delay\n    // the reason why this computation is so complex is because\n    // the inner timeline may either have a delay value or a stretched\n    // keyframe depending on if a subtimeline is not used or is used.\n    parentContext.currentStaggerTime = tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime);\n  }\n}\nconst DEFAULT_NOOP_PREVIOUS_NODE = {};\nclass AnimationTimelineContext {\n  _driver;\n  element;\n  subInstructions;\n  _enterClassName;\n  _leaveClassName;\n  errors;\n  timelines;\n  parentContext = null;\n  currentTimeline;\n  currentAnimateTimings = null;\n  previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n  subContextCount = 0;\n  options = {};\n  currentQueryIndex = 0;\n  currentQueryTotal = 0;\n  currentStaggerTime = 0;\n  constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n    this._driver = _driver;\n    this.element = element;\n    this.subInstructions = subInstructions;\n    this._enterClassName = _enterClassName;\n    this._leaveClassName = _leaveClassName;\n    this.errors = errors;\n    this.timelines = timelines;\n    this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n    timelines.push(this.currentTimeline);\n  }\n  get params() {\n    return this.options.params;\n  }\n  updateOptions(options, skipIfExists) {\n    if (!options) return;\n    const newOptions = options;\n    let optionsToUpdate = this.options;\n    // NOTE: this will get patched up when other animation methods support duration overrides\n    if (newOptions.duration != null) {\n      optionsToUpdate.duration = resolveTimingValue(newOptions.duration);\n    }\n    if (newOptions.delay != null) {\n      optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n    }\n    const newParams = newOptions.params;\n    if (newParams) {\n      let paramsToUpdate = optionsToUpdate.params;\n      if (!paramsToUpdate) {\n        paramsToUpdate = this.options.params = {};\n      }\n      Object.keys(newParams).forEach(name => {\n        if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n          paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n        }\n      });\n    }\n  }\n  _copyOptions() {\n    const options = {};\n    if (this.options) {\n      const oldParams = this.options.params;\n      if (oldParams) {\n        const params = options['params'] = {};\n        Object.keys(oldParams).forEach(name => {\n          params[name] = oldParams[name];\n        });\n      }\n    }\n    return options;\n  }\n  createSubContext(options = null, element, newTime) {\n    const target = element || this.element;\n    const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n    context.previousNode = this.previousNode;\n    context.currentAnimateTimings = this.currentAnimateTimings;\n    context.options = this._copyOptions();\n    context.updateOptions(options);\n    context.currentQueryIndex = this.currentQueryIndex;\n    context.currentQueryTotal = this.currentQueryTotal;\n    context.parentContext = this;\n    this.subContextCount++;\n    return context;\n  }\n  transformIntoNewTimeline(newTime) {\n    this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n    this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n    this.timelines.push(this.currentTimeline);\n    return this.currentTimeline;\n  }\n  appendInstructionToTimeline(instruction, duration, delay) {\n    const updatedTimings = {\n      duration: duration != null ? duration : instruction.duration,\n      delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n      easing: ''\n    };\n    const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n    this.timelines.push(builder);\n    return updatedTimings;\n  }\n  incrementTime(time) {\n    this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n  }\n  delayNextStep(delay) {\n    // negative delays are not yet supported\n    if (delay > 0) {\n      this.currentTimeline.delayNextStep(delay);\n    }\n  }\n  invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n    let results = [];\n    if (includeSelf) {\n      results.push(this.element);\n    }\n    if (selector.length > 0) {\n      // only if :self is used then the selector can be empty\n      selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n      selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n      const multi = limit != 1;\n      let elements = this._driver.query(this.element, selector, multi);\n      if (limit !== 0) {\n        elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) : elements.slice(0, limit);\n      }\n      results.push(...elements);\n    }\n    if (!optional && results.length == 0) {\n      errors.push(invalidQuery(originalSelector));\n    }\n    return results;\n  }\n}\nclass TimelineBuilder {\n  _driver;\n  element;\n  startTime;\n  _elementTimelineStylesLookup;\n  duration = 0;\n  easing = null;\n  _previousKeyframe = new Map();\n  _currentKeyframe = new Map();\n  _keyframes = new Map();\n  _styleSummary = new Map();\n  _localTimelineStyles = new Map();\n  _globalTimelineStyles;\n  _pendingStyles = new Map();\n  _backFill = new Map();\n  _currentEmptyStepKeyframe = null;\n  constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n    this._driver = _driver;\n    this.element = element;\n    this.startTime = startTime;\n    this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n    if (!this._elementTimelineStylesLookup) {\n      this._elementTimelineStylesLookup = new Map();\n    }\n    this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);\n    if (!this._globalTimelineStyles) {\n      this._globalTimelineStyles = this._localTimelineStyles;\n      this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n    }\n    this._loadKeyframe();\n  }\n  containsAnimation() {\n    switch (this._keyframes.size) {\n      case 0:\n        return false;\n      case 1:\n        return this.hasCurrentStyleProperties();\n      default:\n        return true;\n    }\n  }\n  hasCurrentStyleProperties() {\n    return this._currentKeyframe.size > 0;\n  }\n  get currentTime() {\n    return this.startTime + this.duration;\n  }\n  delayNextStep(delay) {\n    // in the event that a style() step is placed right before a stagger()\n    // and that style() step is the very first style() value in the animation\n    // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n    // properly applies the style() values to work with the stagger...\n    const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;\n    if (this.duration || hasPreStyleStep) {\n      this.forwardTime(this.currentTime + delay);\n      if (hasPreStyleStep) {\n        this.snapshotCurrentStyles();\n      }\n    } else {\n      this.startTime += delay;\n    }\n  }\n  fork(element, currentTime) {\n    this.applyStylesToKeyframe();\n    return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n  }\n  _loadKeyframe() {\n    if (this._currentKeyframe) {\n      this._previousKeyframe = this._currentKeyframe;\n    }\n    this._currentKeyframe = this._keyframes.get(this.duration);\n    if (!this._currentKeyframe) {\n      this._currentKeyframe = new Map();\n      this._keyframes.set(this.duration, this._currentKeyframe);\n    }\n  }\n  forwardFrame() {\n    this.duration += ONE_FRAME_IN_MILLISECONDS;\n    this._loadKeyframe();\n  }\n  forwardTime(time) {\n    this.applyStylesToKeyframe();\n    this.duration = time;\n    this._loadKeyframe();\n  }\n  _updateStyle(prop, value) {\n    this._localTimelineStyles.set(prop, value);\n    this._globalTimelineStyles.set(prop, value);\n    this._styleSummary.set(prop, {\n      time: this.currentTime,\n      value\n    });\n  }\n  allowOnlyTimelineStyles() {\n    return this._currentEmptyStepKeyframe !== this._currentKeyframe;\n  }\n  applyEmptyStep(easing) {\n    if (easing) {\n      this._previousKeyframe.set('easing', easing);\n    }\n    // special case for animate(duration):\n    // all missing styles are filled with a `*` value then\n    // if any destination styles are filled in later on the same\n    // keyframe then they will override the overridden styles\n    // We use `_globalTimelineStyles` here because there may be\n    // styles in previous keyframes that are not present in this timeline\n    for (let [prop, value] of this._globalTimelineStyles) {\n      this._backFill.set(prop, value || AUTO_STYLE);\n      this._currentKeyframe.set(prop, AUTO_STYLE);\n    }\n    this._currentEmptyStepKeyframe = this._currentKeyframe;\n  }\n  setStyles(input, easing, errors, options) {\n    if (easing) {\n      this._previousKeyframe.set('easing', easing);\n    }\n    const params = options && options.params || {};\n    const styles = flattenStyles(input, this._globalTimelineStyles);\n    for (let [prop, value] of styles) {\n      const val = interpolateParams(value, params, errors);\n      this._pendingStyles.set(prop, val);\n      if (!this._localTimelineStyles.has(prop)) {\n        this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? AUTO_STYLE);\n      }\n      this._updateStyle(prop, val);\n    }\n  }\n  applyStylesToKeyframe() {\n    if (this._pendingStyles.size == 0) return;\n    this._pendingStyles.forEach((val, prop) => {\n      this._currentKeyframe.set(prop, val);\n    });\n    this._pendingStyles.clear();\n    this._localTimelineStyles.forEach((val, prop) => {\n      if (!this._currentKeyframe.has(prop)) {\n        this._currentKeyframe.set(prop, val);\n      }\n    });\n  }\n  snapshotCurrentStyles() {\n    for (let [prop, val] of this._localTimelineStyles) {\n      this._pendingStyles.set(prop, val);\n      this._updateStyle(prop, val);\n    }\n  }\n  getFinalKeyframe() {\n    return this._keyframes.get(this.duration);\n  }\n  get properties() {\n    const properties = [];\n    for (let prop in this._currentKeyframe) {\n      properties.push(prop);\n    }\n    return properties;\n  }\n  mergeTimelineCollectedStyles(timeline) {\n    timeline._styleSummary.forEach((details1, prop) => {\n      const details0 = this._styleSummary.get(prop);\n      if (!details0 || details1.time > details0.time) {\n        this._updateStyle(prop, details1.value);\n      }\n    });\n  }\n  buildKeyframes() {\n    this.applyStylesToKeyframe();\n    const preStyleProps = new Set();\n    const postStyleProps = new Set();\n    const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n    let finalKeyframes = [];\n    this._keyframes.forEach((keyframe, time) => {\n      const finalKeyframe = new Map([...this._backFill, ...keyframe]);\n      finalKeyframe.forEach((value, prop) => {\n        if (value === ɵPRE_STYLE) {\n          preStyleProps.add(prop);\n        } else if (value === AUTO_STYLE) {\n          postStyleProps.add(prop);\n        }\n      });\n      if (!isEmpty) {\n        finalKeyframe.set('offset', time / this.duration);\n      }\n      finalKeyframes.push(finalKeyframe);\n    });\n    const preProps = [...preStyleProps.values()];\n    const postProps = [...postStyleProps.values()];\n    // special case for a 0-second animation (which is designed just to place styles onscreen)\n    if (isEmpty) {\n      const kf0 = finalKeyframes[0];\n      const kf1 = new Map(kf0);\n      kf0.set('offset', 0);\n      kf1.set('offset', 1);\n      finalKeyframes = [kf0, kf1];\n    }\n    return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n  }\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n  keyframes;\n  preStyleProps;\n  postStyleProps;\n  _stretchStartingKeyframe;\n  timings;\n  constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n    super(driver, element, timings.delay);\n    this.keyframes = keyframes;\n    this.preStyleProps = preStyleProps;\n    this.postStyleProps = postStyleProps;\n    this._stretchStartingKeyframe = _stretchStartingKeyframe;\n    this.timings = {\n      duration: timings.duration,\n      delay: timings.delay,\n      easing: timings.easing\n    };\n  }\n  containsAnimation() {\n    return this.keyframes.length > 1;\n  }\n  buildKeyframes() {\n    let keyframes = this.keyframes;\n    let {\n      delay,\n      duration,\n      easing\n    } = this.timings;\n    if (this._stretchStartingKeyframe && delay) {\n      const newKeyframes = [];\n      const totalTime = duration + delay;\n      const startingGap = delay / totalTime;\n      // the original starting keyframe now starts once the delay is done\n      const newFirstKeyframe = new Map(keyframes[0]);\n      newFirstKeyframe.set('offset', 0);\n      newKeyframes.push(newFirstKeyframe);\n      const oldFirstKeyframe = new Map(keyframes[0]);\n      oldFirstKeyframe.set('offset', roundOffset(startingGap));\n      newKeyframes.push(oldFirstKeyframe);\n      /*\n        When the keyframe is stretched then it means that the delay before the animation\n        starts is gone. Instead the first keyframe is placed at the start of the animation\n        and it is then copied to where it starts when the original delay is over. This basically\n        means nothing animates during that delay, but the styles are still rendered. For this\n        to work the original offset values that exist in the original keyframes must be \"warped\"\n        so that they can take the new keyframe + delay into account.\n               delay=1000, duration=1000, keyframes = 0 .5 1\n               turns into\n               delay=0, duration=2000, keyframes = 0 .33 .66 1\n       */\n      // offsets between 1 ... n -1 are all warped by the keyframe stretch\n      const limit = keyframes.length - 1;\n      for (let i = 1; i <= limit; i++) {\n        let kf = new Map(keyframes[i]);\n        const oldOffset = kf.get('offset');\n        const timeAtKeyframe = delay + oldOffset * duration;\n        kf.set('offset', roundOffset(timeAtKeyframe / totalTime));\n        newKeyframes.push(kf);\n      }\n      // the new starting keyframe should be added at the start\n      duration = totalTime;\n      delay = 0;\n      easing = '';\n      keyframes = newKeyframes;\n    }\n    return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n  }\n}\nfunction roundOffset(offset, decimalPoints = 3) {\n  const mult = Math.pow(10, decimalPoints - 1);\n  return Math.round(offset * mult) / mult;\n}\nfunction flattenStyles(input, allStyles) {\n  const styles = new Map();\n  let allProperties;\n  input.forEach(token => {\n    if (token === '*') {\n      allProperties ??= allStyles.keys();\n      for (let prop of allProperties) {\n        styles.set(prop, AUTO_STYLE);\n      }\n    } else {\n      for (let [prop, val] of token) {\n        styles.set(prop, val);\n      }\n    }\n  });\n  return styles;\n}\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n  return {\n    type: 0 /* AnimationTransitionInstructionType.TransitionAnimation */,\n    element,\n    triggerName,\n    isRemovalTransition,\n    fromState,\n    fromStyles,\n    toState,\n    toStyles,\n    timelines,\n    queriedElements,\n    preStyleProps,\n    postStyleProps,\n    totalTime,\n    errors\n  };\n}\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n  _triggerName;\n  ast;\n  _stateStyles;\n  constructor(_triggerName, ast, _stateStyles) {\n    this._triggerName = _triggerName;\n    this.ast = ast;\n    this._stateStyles = _stateStyles;\n  }\n  match(currentState, nextState, element, params) {\n    return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n  }\n  buildStyles(stateName, params, errors) {\n    let styler = this._stateStyles.get('*');\n    if (stateName !== undefined) {\n      styler = this._stateStyles.get(stateName?.toString()) || styler;\n    }\n    return styler ? styler.buildStyles(params, errors) : new Map();\n  }\n  build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n    const errors = [];\n    const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n    const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n    const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n    const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n    const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n    const queriedElements = new Set();\n    const preStyleMap = new Map();\n    const postStyleMap = new Map();\n    const isRemoval = nextState === 'void';\n    const animationOptions = {\n      params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),\n      delay: this.ast.options?.delay\n    };\n    const timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n    let totalTime = 0;\n    timelines.forEach(tl => {\n      totalTime = Math.max(tl.duration + tl.delay, totalTime);\n    });\n    if (errors.length) {\n      return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n    }\n    timelines.forEach(tl => {\n      const elm = tl.element;\n      const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set());\n      tl.preStyleProps.forEach(prop => preProps.add(prop));\n      const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set());\n      tl.postStyleProps.forEach(prop => postProps.add(prop));\n      if (elm !== element) {\n        queriedElements.add(elm);\n      }\n    });\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      checkNonAnimatableInTimelines(timelines, this._triggerName, driver);\n    }\n    return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, [...queriedElements.values()], preStyleMap, postStyleMap, totalTime);\n  }\n}\n/**\n * Checks inside a set of timelines if they try to animate a css property which is not considered\n * animatable, in that case it prints a warning on the console.\n * Besides that the function doesn't have any other effect.\n *\n * Note: this check is done here after the timelines are built instead of doing on a lower level so\n * that we can make sure that the warning appears only once per instruction (we can aggregate here\n * all the issues instead of finding them separately).\n *\n * @param timelines The built timelines for the current instruction.\n * @param triggerName The name of the trigger for the current instruction.\n * @param driver Animation driver used to perform the check.\n *\n */\nfunction checkNonAnimatableInTimelines(timelines, triggerName, driver) {\n  if (!driver.validateAnimatableStyleProperty) {\n    return;\n  }\n  const allowedNonAnimatableProps = new Set([\n  // 'easing' is a utility/synthetic prop we use to represent\n  // easing functions, it represents a property of the animation\n  // which is not animatable but different values can be used\n  // in different steps\n  'easing']);\n  const invalidNonAnimatableProps = new Set();\n  timelines.forEach(({\n    keyframes\n  }) => {\n    const nonAnimatablePropsInitialValues = new Map();\n    keyframes.forEach(keyframe => {\n      const entriesToCheck = Array.from(keyframe.entries()).filter(([prop]) => !allowedNonAnimatableProps.has(prop));\n      for (const [prop, value] of entriesToCheck) {\n        if (!driver.validateAnimatableStyleProperty(prop)) {\n          if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {\n            const propInitialValue = nonAnimatablePropsInitialValues.get(prop);\n            if (propInitialValue !== value) {\n              invalidNonAnimatableProps.add(prop);\n            }\n          } else {\n            nonAnimatablePropsInitialValues.set(prop, value);\n          }\n        }\n      }\n    });\n  });\n  if (invalidNonAnimatableProps.size > 0) {\n    console.warn(`Warning: The animation trigger \"${triggerName}\" is attempting to animate the following` + ' not animatable properties: ' + Array.from(invalidNonAnimatableProps).join(', ') + '\\n' + '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)');\n  }\n}\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n  return matchFns.some(fn => fn(currentState, nextState, element, params));\n}\nfunction applyParamDefaults(userParams, defaults) {\n  const result = {\n    ...defaults\n  };\n  Object.entries(userParams).forEach(([key, value]) => {\n    if (value != null) {\n      result[key] = value;\n    }\n  });\n  return result;\n}\nclass AnimationStateStyles {\n  styles;\n  defaultParams;\n  normalizer;\n  constructor(styles, defaultParams, normalizer) {\n    this.styles = styles;\n    this.defaultParams = defaultParams;\n    this.normalizer = normalizer;\n  }\n  buildStyles(params, errors) {\n    const finalStyles = new Map();\n    const combinedParams = applyParamDefaults(params, this.defaultParams);\n    this.styles.styles.forEach(value => {\n      if (typeof value !== 'string') {\n        value.forEach((val, prop) => {\n          if (val) {\n            val = interpolateParams(val, combinedParams, errors);\n          }\n          const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);\n          val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);\n          finalStyles.set(prop, val);\n        });\n      }\n    });\n    return finalStyles;\n  }\n}\nfunction buildTrigger(name, ast, normalizer) {\n  return new AnimationTrigger(name, ast, normalizer);\n}\nclass AnimationTrigger {\n  name;\n  ast;\n  _normalizer;\n  transitionFactories = [];\n  fallbackTransition;\n  states = new Map();\n  constructor(name, ast, _normalizer) {\n    this.name = name;\n    this.ast = ast;\n    this._normalizer = _normalizer;\n    ast.states.forEach(ast => {\n      const defaultParams = ast.options && ast.options.params || {};\n      this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer));\n    });\n    balanceProperties(this.states, 'true', '1');\n    balanceProperties(this.states, 'false', '0');\n    ast.transitions.forEach(ast => {\n      this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n    });\n    this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);\n  }\n  get containsQueries() {\n    return this.ast.queryCount > 0;\n  }\n  matchTransition(currentState, nextState, element, params) {\n    const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params));\n    return entry || null;\n  }\n  matchStyles(currentState, params, errors) {\n    return this.fallbackTransition.buildStyles(currentState, params, errors);\n  }\n}\nfunction createFallbackTransition(triggerName, states, normalizer) {\n  const matchers = [(fromState, toState) => true];\n  const animation = {\n    type: AnimationMetadataType.Sequence,\n    steps: [],\n    options: null\n  };\n  const transition = {\n    type: AnimationMetadataType.Transition,\n    animation,\n    matchers,\n    options: null,\n    queryCount: 0,\n    depCount: 0\n  };\n  return new AnimationTransitionFactory(triggerName, transition, states);\n}\nfunction balanceProperties(stateMap, key1, key2) {\n  if (stateMap.has(key1)) {\n    if (!stateMap.has(key2)) {\n      stateMap.set(key2, stateMap.get(key1));\n    }\n  } else if (stateMap.has(key2)) {\n    stateMap.set(key1, stateMap.get(key2));\n  }\n}\nconst EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nclass TimelineAnimationEngine {\n  bodyNode;\n  _driver;\n  _normalizer;\n  _animations = new Map();\n  _playersById = new Map();\n  players = [];\n  constructor(bodyNode, _driver, _normalizer) {\n    this.bodyNode = bodyNode;\n    this._driver = _driver;\n    this._normalizer = _normalizer;\n  }\n  register(id, metadata) {\n    const errors = [];\n    const warnings = [];\n    const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n    if (errors.length) {\n      throw registerFailed(errors);\n    } else {\n      if (warnings.length) {\n        warnRegister(warnings);\n      }\n      this._animations.set(id, ast);\n    }\n  }\n  _buildPlayer(i, preStyles, postStyles) {\n    const element = i.element;\n    const keyframes = normalizeKeyframes$1(this._normalizer, i.keyframes, preStyles, postStyles);\n    return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n  }\n  create(id, element, options = {}) {\n    const errors = [];\n    const ast = this._animations.get(id);\n    let instructions;\n    const autoStylesMap = new Map();\n    if (ast) {\n      instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors);\n      instructions.forEach(inst => {\n        const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map());\n        inst.postStyleProps.forEach(prop => styles.set(prop, null));\n      });\n    } else {\n      errors.push(missingOrDestroyedAnimation());\n      instructions = [];\n    }\n    if (errors.length) {\n      throw createAnimationFailed(errors);\n    }\n    autoStylesMap.forEach((styles, element) => {\n      styles.forEach((_, prop) => {\n        styles.set(prop, this._driver.computeStyle(element, prop, AUTO_STYLE));\n      });\n    });\n    const players = instructions.map(i => {\n      const styles = autoStylesMap.get(i.element);\n      return this._buildPlayer(i, new Map(), styles);\n    });\n    const player = optimizeGroupPlayer(players);\n    this._playersById.set(id, player);\n    player.onDestroy(() => this.destroy(id));\n    this.players.push(player);\n    return player;\n  }\n  destroy(id) {\n    const player = this._getPlayer(id);\n    player.destroy();\n    this._playersById.delete(id);\n    const index = this.players.indexOf(player);\n    if (index >= 0) {\n      this.players.splice(index, 1);\n    }\n  }\n  _getPlayer(id) {\n    const player = this._playersById.get(id);\n    if (!player) {\n      throw missingPlayer(id);\n    }\n    return player;\n  }\n  listen(id, element, eventName, callback) {\n    // triggerName, fromState, toState are all ignored for timeline animations\n    const baseEvent = makeAnimationEvent(element, '', '', '');\n    listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n    return () => {};\n  }\n  command(id, element, command, args) {\n    if (command == 'register') {\n      this.register(id, args[0]);\n      return;\n    }\n    if (command == 'create') {\n      const options = args[0] || {};\n      this.create(id, element, options);\n      return;\n    }\n    const player = this._getPlayer(id);\n    switch (command) {\n      case 'play':\n        player.play();\n        break;\n      case 'pause':\n        player.pause();\n        break;\n      case 'reset':\n        player.reset();\n        break;\n      case 'restart':\n        player.restart();\n        break;\n      case 'finish':\n        player.finish();\n        break;\n      case 'init':\n        player.init();\n        break;\n      case 'setPosition':\n        player.setPosition(parseFloat(args[0]));\n        break;\n      case 'destroy':\n        this.destroy(id);\n        break;\n    }\n  }\n}\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\nconst QUEUED_SELECTOR = '.ng-animate-queued';\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\nconst STAR_CLASSNAME = 'ng-star-inserted';\nconst STAR_SELECTOR = '.ng-star-inserted';\nconst EMPTY_PLAYER_ARRAY = [];\nconst NULL_REMOVAL_STATE = {\n  namespaceId: '',\n  setForRemoval: false,\n  setForMove: false,\n  hasAnimation: false,\n  removedBeforeQueried: false\n};\nconst NULL_REMOVED_QUERIED_STATE = {\n  namespaceId: '',\n  setForMove: false,\n  setForRemoval: false,\n  hasAnimation: false,\n  removedBeforeQueried: true\n};\nconst REMOVAL_FLAG = '__ng_removed';\nclass StateValue {\n  namespaceId;\n  value;\n  options;\n  get params() {\n    return this.options.params;\n  }\n  constructor(input, namespaceId = '') {\n    this.namespaceId = namespaceId;\n    const isObj = input && input.hasOwnProperty('value');\n    const value = isObj ? input['value'] : input;\n    this.value = normalizeTriggerValue(value);\n    if (isObj) {\n      // we drop the value property from options.\n      const {\n        value,\n        ...options\n      } = input;\n      this.options = options;\n    } else {\n      this.options = {};\n    }\n    if (!this.options.params) {\n      this.options.params = {};\n    }\n  }\n  absorbOptions(options) {\n    const newParams = options.params;\n    if (newParams) {\n      const oldParams = this.options.params;\n      Object.keys(newParams).forEach(prop => {\n        if (oldParams[prop] == null) {\n          oldParams[prop] = newParams[prop];\n        }\n      });\n    }\n  }\n}\nconst VOID_VALUE = 'void';\nconst DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n  id;\n  hostElement;\n  _engine;\n  players = [];\n  _triggers = new Map();\n  _queue = [];\n  _elementListeners = new Map();\n  _hostClassName;\n  constructor(id, hostElement, _engine) {\n    this.id = id;\n    this.hostElement = hostElement;\n    this._engine = _engine;\n    this._hostClassName = 'ng-tns-' + id;\n    addClass(hostElement, this._hostClassName);\n  }\n  listen(element, name, phase, callback) {\n    if (!this._triggers.has(name)) {\n      throw missingTrigger(phase, name);\n    }\n    if (phase == null || phase.length == 0) {\n      throw missingEvent(name);\n    }\n    if (!isTriggerEventValid(phase)) {\n      throw unsupportedTriggerEvent(phase, name);\n    }\n    const listeners = getOrSetDefaultValue(this._elementListeners, element, []);\n    const data = {\n      name,\n      phase,\n      callback\n    };\n    listeners.push(data);\n    const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map());\n    if (!triggersWithStates.has(name)) {\n      addClass(element, NG_TRIGGER_CLASSNAME);\n      addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n      triggersWithStates.set(name, DEFAULT_STATE_VALUE);\n    }\n    return () => {\n      // the event listener is removed AFTER the flush has occurred such\n      // that leave animations callbacks can fire (otherwise if the node\n      // is removed in between then the listeners would be deregistered)\n      this._engine.afterFlush(() => {\n        const index = listeners.indexOf(data);\n        if (index >= 0) {\n          listeners.splice(index, 1);\n        }\n        if (!this._triggers.has(name)) {\n          triggersWithStates.delete(name);\n        }\n      });\n    };\n  }\n  register(name, ast) {\n    if (this._triggers.has(name)) {\n      // throw\n      return false;\n    } else {\n      this._triggers.set(name, ast);\n      return true;\n    }\n  }\n  _getTrigger(name) {\n    const trigger = this._triggers.get(name);\n    if (!trigger) {\n      throw unregisteredTrigger(name);\n    }\n    return trigger;\n  }\n  trigger(element, triggerName, value, defaultToFallback = true) {\n    const trigger = this._getTrigger(triggerName);\n    const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n    let triggersWithStates = this._engine.statesByElement.get(element);\n    if (!triggersWithStates) {\n      addClass(element, NG_TRIGGER_CLASSNAME);\n      addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n      this._engine.statesByElement.set(element, triggersWithStates = new Map());\n    }\n    let fromState = triggersWithStates.get(triggerName);\n    const toState = new StateValue(value, this.id);\n    const isObj = value && value.hasOwnProperty('value');\n    if (!isObj && fromState) {\n      toState.absorbOptions(fromState.options);\n    }\n    triggersWithStates.set(triggerName, toState);\n    if (!fromState) {\n      fromState = DEFAULT_STATE_VALUE;\n    }\n    const isRemoval = toState.value === VOID_VALUE;\n    // normally this isn't reached by here, however, if an object expression\n    // is passed in then it may be a new object each time. Comparing the value\n    // is important since that will stay the same despite there being a new object.\n    // The removal arc here is special cased because the same element is triggered\n    // twice in the event that it contains animations on the outer/inner portions\n    // of the host container\n    if (!isRemoval && fromState.value === toState.value) {\n      // this means that despite the value not changing, some inner params\n      // have changed which means that the animation final styles need to be applied\n      if (!objEquals(fromState.params, toState.params)) {\n        const errors = [];\n        const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n        const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n        if (errors.length) {\n          this._engine.reportError(errors);\n        } else {\n          this._engine.afterFlush(() => {\n            eraseStyles(element, fromStyles);\n            setStyles(element, toStyles);\n          });\n        }\n      }\n      return;\n    }\n    const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);\n    playersOnElement.forEach(player => {\n      // only remove the player if it is queued on the EXACT same trigger/namespace\n      // we only also deal with queued players here because if the animation has\n      // started then we want to keep the player alive until the flush happens\n      // (which is where the previousPlayers are passed into the new player)\n      if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n        player.destroy();\n      }\n    });\n    let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n    let isFallbackTransition = false;\n    if (!transition) {\n      if (!defaultToFallback) return;\n      transition = trigger.fallbackTransition;\n      isFallbackTransition = true;\n    }\n    this._engine.totalQueuedPlayers++;\n    this._queue.push({\n      element,\n      triggerName,\n      transition,\n      fromState,\n      toState,\n      player,\n      isFallbackTransition\n    });\n    if (!isFallbackTransition) {\n      addClass(element, QUEUED_CLASSNAME);\n      player.onStart(() => {\n        removeClass(element, QUEUED_CLASSNAME);\n      });\n    }\n    player.onDone(() => {\n      let index = this.players.indexOf(player);\n      if (index >= 0) {\n        this.players.splice(index, 1);\n      }\n      const players = this._engine.playersByElement.get(element);\n      if (players) {\n        let index = players.indexOf(player);\n        if (index >= 0) {\n          players.splice(index, 1);\n        }\n      }\n    });\n    this.players.push(player);\n    playersOnElement.push(player);\n    return player;\n  }\n  deregister(name) {\n    this._triggers.delete(name);\n    this._engine.statesByElement.forEach(stateMap => stateMap.delete(name));\n    this._elementListeners.forEach((listeners, element) => {\n      this._elementListeners.set(element, listeners.filter(entry => {\n        return entry.name != name;\n      }));\n    });\n  }\n  clearElementCache(element) {\n    this._engine.statesByElement.delete(element);\n    this._elementListeners.delete(element);\n    const elementPlayers = this._engine.playersByElement.get(element);\n    if (elementPlayers) {\n      elementPlayers.forEach(player => player.destroy());\n      this._engine.playersByElement.delete(element);\n    }\n  }\n  _signalRemovalForInnerTriggers(rootElement, context) {\n    const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n    // emulate a leave animation for all inner nodes within this node.\n    // If there are no animations found for any of the nodes then clear the cache\n    // for the element.\n    elements.forEach(elm => {\n      // this means that an inner remove() operation has already kicked off\n      // the animation on this element...\n      if (elm[REMOVAL_FLAG]) return;\n      const namespaces = this._engine.fetchNamespacesByElement(elm);\n      if (namespaces.size) {\n        namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true));\n      } else {\n        this.clearElementCache(elm);\n      }\n    });\n    // If the child elements were removed along with the parent, their animations might not\n    // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n    this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm)));\n  }\n  triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n    const triggerStates = this._engine.statesByElement.get(element);\n    const previousTriggersValues = new Map();\n    if (triggerStates) {\n      const players = [];\n      triggerStates.forEach((state, triggerName) => {\n        previousTriggersValues.set(triggerName, state.value);\n        // this check is here in the event that an element is removed\n        // twice (both on the host level and the component level)\n        if (this._triggers.has(triggerName)) {\n          const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n          if (player) {\n            players.push(player);\n          }\n        }\n      });\n      if (players.length) {\n        this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);\n        if (destroyAfterComplete) {\n          optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n  prepareLeaveAnimationListeners(element) {\n    const listeners = this._elementListeners.get(element);\n    const elementStates = this._engine.statesByElement.get(element);\n    // if this statement fails then it means that the element was picked up\n    // by an earlier flush (or there are no listeners at all to track the leave).\n    if (listeners && elementStates) {\n      const visitedTriggers = new Set();\n      listeners.forEach(listener => {\n        const triggerName = listener.name;\n        if (visitedTriggers.has(triggerName)) return;\n        visitedTriggers.add(triggerName);\n        const trigger = this._triggers.get(triggerName);\n        const transition = trigger.fallbackTransition;\n        const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;\n        const toState = new StateValue(VOID_VALUE);\n        const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n        this._engine.totalQueuedPlayers++;\n        this._queue.push({\n          element,\n          triggerName,\n          transition,\n          fromState,\n          toState,\n          player,\n          isFallbackTransition: true\n        });\n      });\n    }\n  }\n  removeNode(element, context) {\n    const engine = this._engine;\n    if (element.childElementCount) {\n      this._signalRemovalForInnerTriggers(element, context);\n    }\n    // this means that a * => VOID animation was detected and kicked off\n    if (this.triggerLeaveAnimation(element, context, true)) return;\n    // find the player that is animating and make sure that the\n    // removal is delayed until that player has completed\n    let containsPotentialParentTransition = false;\n    if (engine.totalAnimations) {\n      const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n      // when this `if statement` does not continue forward it means that\n      // a previous animation query has selected the current element and\n      // is animating it. In this situation want to continue forwards and\n      // allow the element to be queued up for animation later.\n      if (currentPlayers && currentPlayers.length) {\n        containsPotentialParentTransition = true;\n      } else {\n        let parent = element;\n        while (parent = parent.parentNode) {\n          const triggers = engine.statesByElement.get(parent);\n          if (triggers) {\n            containsPotentialParentTransition = true;\n            break;\n          }\n        }\n      }\n    }\n    // at this stage we know that the element will either get removed\n    // during flush or will be picked up by a parent query. Either way\n    // we need to fire the listeners for this element when it DOES get\n    // removed (once the query parent animation is done or after flush)\n    this.prepareLeaveAnimationListeners(element);\n    // whether or not a parent has an animation we need to delay the deferral of the leave\n    // operation until we have more information (which we do after flush() has been called)\n    if (containsPotentialParentTransition) {\n      engine.markElementAsRemoved(this.id, element, false, context);\n    } else {\n      const removalFlag = element[REMOVAL_FLAG];\n      if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n        // we do this after the flush has occurred such\n        // that the callbacks can be fired\n        engine.afterFlush(() => this.clearElementCache(element));\n        engine.destroyInnerAnimations(element);\n        engine._onRemovalComplete(element, context);\n      }\n    }\n  }\n  insertNode(element, parent) {\n    addClass(element, this._hostClassName);\n  }\n  drainQueuedTransitions(microtaskId) {\n    const instructions = [];\n    this._queue.forEach(entry => {\n      const player = entry.player;\n      if (player.destroyed) return;\n      const element = entry.element;\n      const listeners = this._elementListeners.get(element);\n      if (listeners) {\n        listeners.forEach(listener => {\n          if (listener.name == entry.triggerName) {\n            const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n            baseEvent['_data'] = microtaskId;\n            listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n          }\n        });\n      }\n      if (player.markedForDestroy) {\n        this._engine.afterFlush(() => {\n          // now we can destroy the element properly since the event listeners have\n          // been bound to the player\n          player.destroy();\n        });\n      } else {\n        instructions.push(entry);\n      }\n    });\n    this._queue = [];\n    return instructions.sort((a, b) => {\n      // if depCount == 0 them move to front\n      // otherwise if a contains b then move back\n      const d0 = a.transition.ast.depCount;\n      const d1 = b.transition.ast.depCount;\n      if (d0 == 0 || d1 == 0) {\n        return d0 - d1;\n      }\n      return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n    });\n  }\n  destroy(context) {\n    this.players.forEach(p => p.destroy());\n    this._signalRemovalForInnerTriggers(this.hostElement, context);\n  }\n}\nclass TransitionAnimationEngine {\n  bodyNode;\n  driver;\n  _normalizer;\n  players = [];\n  newHostElements = new Map();\n  playersByElement = new Map();\n  playersByQueriedElement = new Map();\n  statesByElement = new Map();\n  disabledNodes = new Set();\n  totalAnimations = 0;\n  totalQueuedPlayers = 0;\n  _namespaceLookup = {};\n  _namespaceList = [];\n  _flushFns = [];\n  _whenQuietFns = [];\n  namespacesByHostElement = new Map();\n  collectedEnterElements = [];\n  collectedLeaveElements = [];\n  // this method is designed to be overridden by the code that uses this engine\n  onRemovalComplete = (element, context) => {};\n  /** @internal */\n  _onRemovalComplete(element, context) {\n    this.onRemovalComplete(element, context);\n  }\n  constructor(bodyNode, driver, _normalizer) {\n    this.bodyNode = bodyNode;\n    this.driver = driver;\n    this._normalizer = _normalizer;\n  }\n  get queuedPlayers() {\n    const players = [];\n    this._namespaceList.forEach(ns => {\n      ns.players.forEach(player => {\n        if (player.queued) {\n          players.push(player);\n        }\n      });\n    });\n    return players;\n  }\n  createNamespace(namespaceId, hostElement) {\n    const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n    if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {\n      this._balanceNamespaceList(ns, hostElement);\n    } else {\n      // defer this later until flush during when the host element has\n      // been inserted so that we know exactly where to place it in\n      // the namespace list\n      this.newHostElements.set(hostElement, ns);\n      // given that this host element is a part of the animation code, it\n      // may or may not be inserted by a parent node that is of an\n      // animation renderer type. If this happens then we can still have\n      // access to this item when we query for :enter nodes. If the parent\n      // is a renderer then the set data-structure will normalize the entry\n      this.collectEnterElement(hostElement);\n    }\n    return this._namespaceLookup[namespaceId] = ns;\n  }\n  _balanceNamespaceList(ns, hostElement) {\n    const namespaceList = this._namespaceList;\n    const namespacesByHostElement = this.namespacesByHostElement;\n    const limit = namespaceList.length - 1;\n    if (limit >= 0) {\n      let found = false;\n      // Find the closest ancestor with an existing namespace so we can then insert `ns` after it,\n      // establishing a top-down ordering of namespaces in `this._namespaceList`.\n      let ancestor = this.driver.getParentElement(hostElement);\n      while (ancestor) {\n        const ancestorNs = namespacesByHostElement.get(ancestor);\n        if (ancestorNs) {\n          // An animation namespace has been registered for this ancestor, so we insert `ns`\n          // right after it to establish top-down ordering of animation namespaces.\n          const index = namespaceList.indexOf(ancestorNs);\n          namespaceList.splice(index + 1, 0, ns);\n          found = true;\n          break;\n        }\n        ancestor = this.driver.getParentElement(ancestor);\n      }\n      if (!found) {\n        // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to\n        // ensure that any existing descendants are ordered after `ns`, retaining the desired\n        // top-down ordering.\n        namespaceList.unshift(ns);\n      }\n    } else {\n      namespaceList.push(ns);\n    }\n    namespacesByHostElement.set(hostElement, ns);\n    return ns;\n  }\n  register(namespaceId, hostElement) {\n    let ns = this._namespaceLookup[namespaceId];\n    if (!ns) {\n      ns = this.createNamespace(namespaceId, hostElement);\n    }\n    return ns;\n  }\n  registerTrigger(namespaceId, name, trigger) {\n    let ns = this._namespaceLookup[namespaceId];\n    if (ns && ns.register(name, trigger)) {\n      this.totalAnimations++;\n    }\n  }\n  destroy(namespaceId, context) {\n    if (!namespaceId) return;\n    this.afterFlush(() => {});\n    this.afterFlushAnimationsDone(() => {\n      const ns = this._fetchNamespace(namespaceId);\n      this.namespacesByHostElement.delete(ns.hostElement);\n      const index = this._namespaceList.indexOf(ns);\n      if (index >= 0) {\n        this._namespaceList.splice(index, 1);\n      }\n      ns.destroy(context);\n      delete this._namespaceLookup[namespaceId];\n    });\n  }\n  _fetchNamespace(id) {\n    return this._namespaceLookup[id];\n  }\n  fetchNamespacesByElement(element) {\n    // normally there should only be one namespace per element, however\n    // if @triggers are placed on both the component element and then\n    // its host element (within the component code) then there will be\n    // two namespaces returned. We use a set here to simply deduplicate\n    // the namespaces in case (for the reason described above) there are multiple triggers\n    const namespaces = new Set();\n    const elementStates = this.statesByElement.get(element);\n    if (elementStates) {\n      for (let stateValue of elementStates.values()) {\n        if (stateValue.namespaceId) {\n          const ns = this._fetchNamespace(stateValue.namespaceId);\n          if (ns) {\n            namespaces.add(ns);\n          }\n        }\n      }\n    }\n    return namespaces;\n  }\n  trigger(namespaceId, element, name, value) {\n    if (isElementNode(element)) {\n      const ns = this._fetchNamespace(namespaceId);\n      if (ns) {\n        ns.trigger(element, name, value);\n        return true;\n      }\n    }\n    return false;\n  }\n  insertNode(namespaceId, element, parent, insertBefore) {\n    if (!isElementNode(element)) return;\n    // special case for when an element is removed and reinserted (move operation)\n    // when this occurs we do not want to use the element for deletion later\n    const details = element[REMOVAL_FLAG];\n    if (details && details.setForRemoval) {\n      details.setForRemoval = false;\n      details.setForMove = true;\n      const index = this.collectedLeaveElements.indexOf(element);\n      if (index >= 0) {\n        this.collectedLeaveElements.splice(index, 1);\n      }\n    }\n    // in the event that the namespaceId is blank then the caller\n    // code does not contain any animation code in it, but it is\n    // just being called so that the node is marked as being inserted\n    if (namespaceId) {\n      const ns = this._fetchNamespace(namespaceId);\n      // This if-statement is a workaround for router issue #21947.\n      // The router sometimes hits a race condition where while a route\n      // is being instantiated a new navigation arrives, triggering leave\n      // animation of DOM that has not been fully initialized, until this\n      // is resolved, we need to handle the scenario when DOM is not in a\n      // consistent state during the animation.\n      if (ns) {\n        ns.insertNode(element, parent);\n      }\n    }\n    // only *directives and host elements are inserted before\n    if (insertBefore) {\n      this.collectEnterElement(element);\n    }\n  }\n  collectEnterElement(element) {\n    this.collectedEnterElements.push(element);\n  }\n  markElementAsDisabled(element, value) {\n    if (value) {\n      if (!this.disabledNodes.has(element)) {\n        this.disabledNodes.add(element);\n        addClass(element, DISABLED_CLASSNAME);\n      }\n    } else if (this.disabledNodes.has(element)) {\n      this.disabledNodes.delete(element);\n      removeClass(element, DISABLED_CLASSNAME);\n    }\n  }\n  removeNode(namespaceId, element, context) {\n    if (isElementNode(element)) {\n      const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n      if (ns) {\n        ns.removeNode(element, context);\n      } else {\n        this.markElementAsRemoved(namespaceId, element, false, context);\n      }\n      const hostNS = this.namespacesByHostElement.get(element);\n      if (hostNS && hostNS.id !== namespaceId) {\n        hostNS.removeNode(element, context);\n      }\n    } else {\n      this._onRemovalComplete(element, context);\n    }\n  }\n  markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {\n    this.collectedLeaveElements.push(element);\n    element[REMOVAL_FLAG] = {\n      namespaceId,\n      setForRemoval: context,\n      hasAnimation,\n      removedBeforeQueried: false,\n      previousTriggersValues\n    };\n  }\n  listen(namespaceId, element, name, phase, callback) {\n    if (isElementNode(element)) {\n      return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n    }\n    return () => {};\n  }\n  _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n    return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n  }\n  destroyInnerAnimations(containerElement) {\n    let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n    elements.forEach(element => this.destroyActiveAnimationsForElement(element));\n    if (this.playersByQueriedElement.size == 0) return;\n    elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n    elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element));\n  }\n  destroyActiveAnimationsForElement(element) {\n    const players = this.playersByElement.get(element);\n    if (players) {\n      players.forEach(player => {\n        // special case for when an element is set for destruction, but hasn't started.\n        // in this situation we want to delay the destruction until the flush occurs\n        // so that any event listeners attached to the player are triggered.\n        if (player.queued) {\n          player.markedForDestroy = true;\n        } else {\n          player.destroy();\n        }\n      });\n    }\n  }\n  finishActiveQueriedAnimationOnElement(element) {\n    const players = this.playersByQueriedElement.get(element);\n    if (players) {\n      players.forEach(player => player.finish());\n    }\n  }\n  whenRenderingDone() {\n    return new Promise(resolve => {\n      if (this.players.length) {\n        return optimizeGroupPlayer(this.players).onDone(() => resolve());\n      } else {\n        resolve();\n      }\n    });\n  }\n  processLeaveNode(element) {\n    const details = element[REMOVAL_FLAG];\n    if (details && details.setForRemoval) {\n      // this will prevent it from removing it twice\n      element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n      if (details.namespaceId) {\n        this.destroyInnerAnimations(element);\n        const ns = this._fetchNamespace(details.namespaceId);\n        if (ns) {\n          ns.clearElementCache(element);\n        }\n      }\n      this._onRemovalComplete(element, details.setForRemoval);\n    }\n    if (element.classList?.contains(DISABLED_CLASSNAME)) {\n      this.markElementAsDisabled(element, false);\n    }\n    this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {\n      this.markElementAsDisabled(node, false);\n    });\n  }\n  flush(microtaskId = -1) {\n    let players = [];\n    if (this.newHostElements.size) {\n      this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));\n      this.newHostElements.clear();\n    }\n    if (this.totalAnimations && this.collectedEnterElements.length) {\n      for (let i = 0; i < this.collectedEnterElements.length; i++) {\n        const elm = this.collectedEnterElements[i];\n        addClass(elm, STAR_CLASSNAME);\n      }\n    }\n    if (this._namespaceList.length && (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n      const cleanupFns = [];\n      try {\n        players = this._flushAnimations(cleanupFns, microtaskId);\n      } finally {\n        for (let i = 0; i < cleanupFns.length; i++) {\n          cleanupFns[i]();\n        }\n      }\n    } else {\n      for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n        const element = this.collectedLeaveElements[i];\n        this.processLeaveNode(element);\n      }\n    }\n    this.totalQueuedPlayers = 0;\n    this.collectedEnterElements.length = 0;\n    this.collectedLeaveElements.length = 0;\n    this._flushFns.forEach(fn => fn());\n    this._flushFns = [];\n    if (this._whenQuietFns.length) {\n      // we move these over to a variable so that\n      // if any new callbacks are registered in another\n      // flush they do not populate the existing set\n      const quietFns = this._whenQuietFns;\n      this._whenQuietFns = [];\n      if (players.length) {\n        optimizeGroupPlayer(players).onDone(() => {\n          quietFns.forEach(fn => fn());\n        });\n      } else {\n        quietFns.forEach(fn => fn());\n      }\n    }\n  }\n  reportError(errors) {\n    throw triggerTransitionsFailed(errors);\n  }\n  _flushAnimations(cleanupFns, microtaskId) {\n    const subTimelines = new ElementInstructionMap();\n    const skippedPlayers = [];\n    const skippedPlayersMap = new Map();\n    const queuedInstructions = [];\n    const queriedElements = new Map();\n    const allPreStyleElements = new Map();\n    const allPostStyleElements = new Map();\n    const disabledElementsSet = new Set();\n    this.disabledNodes.forEach(node => {\n      disabledElementsSet.add(node);\n      const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n      for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n        disabledElementsSet.add(nodesThatAreDisabled[i]);\n      }\n    });\n    const bodyNode = this.bodyNode;\n    const allTriggerElements = Array.from(this.statesByElement.keys());\n    const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n    // this must occur before the instructions are built below such that\n    // the :enter queries match the elements (since the timeline queries\n    // are fired during instruction building).\n    const enterNodeMapIds = new Map();\n    let i = 0;\n    enterNodeMap.forEach((nodes, root) => {\n      const className = ENTER_CLASSNAME + i++;\n      enterNodeMapIds.set(root, className);\n      nodes.forEach(node => addClass(node, className));\n    });\n    const allLeaveNodes = [];\n    const mergedLeaveNodes = new Set();\n    const leaveNodesWithoutAnimations = new Set();\n    for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n      const element = this.collectedLeaveElements[i];\n      const details = element[REMOVAL_FLAG];\n      if (details && details.setForRemoval) {\n        allLeaveNodes.push(element);\n        mergedLeaveNodes.add(element);\n        if (details.hasAnimation) {\n          this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm));\n        } else {\n          leaveNodesWithoutAnimations.add(element);\n        }\n      }\n    }\n    const leaveNodeMapIds = new Map();\n    const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n    leaveNodeMap.forEach((nodes, root) => {\n      const className = LEAVE_CLASSNAME + i++;\n      leaveNodeMapIds.set(root, className);\n      nodes.forEach(node => addClass(node, className));\n    });\n    cleanupFns.push(() => {\n      enterNodeMap.forEach((nodes, root) => {\n        const className = enterNodeMapIds.get(root);\n        nodes.forEach(node => removeClass(node, className));\n      });\n      leaveNodeMap.forEach((nodes, root) => {\n        const className = leaveNodeMapIds.get(root);\n        nodes.forEach(node => removeClass(node, className));\n      });\n      allLeaveNodes.forEach(element => {\n        this.processLeaveNode(element);\n      });\n    });\n    const allPlayers = [];\n    const erroneousTransitions = [];\n    for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n      const ns = this._namespaceList[i];\n      ns.drainQueuedTransitions(microtaskId).forEach(entry => {\n        const player = entry.player;\n        const element = entry.element;\n        allPlayers.push(player);\n        if (this.collectedEnterElements.length) {\n          const details = element[REMOVAL_FLAG];\n          // animations for move operations (elements being removed and reinserted,\n          // e.g. when the order of an *ngFor list changes) are currently not supported\n          if (details && details.setForMove) {\n            if (details.previousTriggersValues && details.previousTriggersValues.has(entry.triggerName)) {\n              const previousValue = details.previousTriggersValues.get(entry.triggerName);\n              // we need to restore the previous trigger value since the element has\n              // only been moved and hasn't actually left the DOM\n              const triggersWithStates = this.statesByElement.get(entry.element);\n              if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {\n                const state = triggersWithStates.get(entry.triggerName);\n                state.value = previousValue;\n                triggersWithStates.set(entry.triggerName, state);\n              }\n            }\n            player.destroy();\n            return;\n          }\n        }\n        const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n        const leaveClassName = leaveNodeMapIds.get(element);\n        const enterClassName = enterNodeMapIds.get(element);\n        const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);\n        if (instruction.errors && instruction.errors.length) {\n          erroneousTransitions.push(instruction);\n          return;\n        }\n        // even though the element may not be in the DOM, it may still\n        // be added at a later point (due to the mechanics of content\n        // projection and/or dynamic component insertion) therefore it's\n        // important to still style the element.\n        if (nodeIsOrphaned) {\n          player.onStart(() => eraseStyles(element, instruction.fromStyles));\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          skippedPlayers.push(player);\n          return;\n        }\n        // if an unmatched transition is queued and ready to go\n        // then it SHOULD NOT render an animation and cancel the\n        // previously running animations.\n        if (entry.isFallbackTransition) {\n          player.onStart(() => eraseStyles(element, instruction.fromStyles));\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          skippedPlayers.push(player);\n          return;\n        }\n        // this means that if a parent animation uses this animation as a sub-trigger\n        // then it will instruct the timeline builder not to add a player delay, but\n        // instead stretch the first keyframe gap until the animation starts. This is\n        // important in order to prevent extra initialization styles from being\n        // required by the user for the animation.\n        const timelines = [];\n        instruction.timelines.forEach(tl => {\n          tl.stretchStartingKeyframe = true;\n          if (!this.disabledNodes.has(tl.element)) {\n            timelines.push(tl);\n          }\n        });\n        instruction.timelines = timelines;\n        subTimelines.append(element, instruction.timelines);\n        const tuple = {\n          instruction,\n          player,\n          element\n        };\n        queuedInstructions.push(tuple);\n        instruction.queriedElements.forEach(element => getOrSetDefaultValue(queriedElements, element, []).push(player));\n        instruction.preStyleProps.forEach((stringMap, element) => {\n          if (stringMap.size) {\n            let setVal = allPreStyleElements.get(element);\n            if (!setVal) {\n              allPreStyleElements.set(element, setVal = new Set());\n            }\n            stringMap.forEach((_, prop) => setVal.add(prop));\n          }\n        });\n        instruction.postStyleProps.forEach((stringMap, element) => {\n          let setVal = allPostStyleElements.get(element);\n          if (!setVal) {\n            allPostStyleElements.set(element, setVal = new Set());\n          }\n          stringMap.forEach((_, prop) => setVal.add(prop));\n        });\n      });\n    }\n    if (erroneousTransitions.length) {\n      const errors = [];\n      erroneousTransitions.forEach(instruction => {\n        errors.push(transitionFailed(instruction.triggerName, instruction.errors));\n      });\n      allPlayers.forEach(player => player.destroy());\n      this.reportError(errors);\n    }\n    const allPreviousPlayersMap = new Map();\n    // this map tells us which element in the DOM tree is contained by\n    // which animation. Further down this map will get populated once\n    // the players are built and in doing so we can use it to efficiently\n    // figure out if a sub player is skipped due to a parent player having priority.\n    const animationElementMap = new Map();\n    queuedInstructions.forEach(entry => {\n      const element = entry.element;\n      if (subTimelines.has(element)) {\n        animationElementMap.set(element, element);\n        this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n      }\n    });\n    skippedPlayers.forEach(player => {\n      const element = player.element;\n      const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n      previousPlayers.forEach(prevPlayer => {\n        getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);\n        prevPlayer.destroy();\n      });\n    });\n    // this is a special case for nodes that will be removed either by\n    // having their own leave animations or by being queried in a container\n    // that will be removed once a parent animation is complete. The idea\n    // here is that * styles must be identical to ! styles because of\n    // backwards compatibility (* is also filled in by default in many places).\n    // Otherwise * styles will return an empty value or \"auto\" since the element\n    // passed to getComputedStyle will not be visible (since * === destination)\n    const replaceNodes = allLeaveNodes.filter(node => {\n      return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n    });\n    // POST STAGE: fill the * styles\n    const postStylesMap = new Map();\n    const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n    allLeaveQueriedNodes.forEach(node => {\n      if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n        replaceNodes.push(node);\n      }\n    });\n    // PRE STAGE: fill the ! styles\n    const preStylesMap = new Map();\n    enterNodeMap.forEach((nodes, root) => {\n      cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n    });\n    replaceNodes.forEach(node => {\n      const post = postStylesMap.get(node);\n      const pre = preStylesMap.get(node);\n      postStylesMap.set(node, new Map([...(post?.entries() ?? []), ...(pre?.entries() ?? [])]));\n    });\n    const rootPlayers = [];\n    const subPlayers = [];\n    const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n    queuedInstructions.forEach(entry => {\n      const {\n        element,\n        player,\n        instruction\n      } = entry;\n      // this means that it was never consumed by a parent animation which\n      // means that it is independent and therefore should be set for animation\n      if (subTimelines.has(element)) {\n        if (disabledElementsSet.has(element)) {\n          player.onDestroy(() => setStyles(element, instruction.toStyles));\n          player.disabled = true;\n          player.overrideTotalTime(instruction.totalTime);\n          skippedPlayers.push(player);\n          return;\n        }\n        // this will flow up the DOM and query the map to figure out\n        // if a parent animation has priority over it. In the situation\n        // that a parent is detected then it will cancel the loop. If\n        // nothing is detected, or it takes a few hops to find a parent,\n        // then it will fill in the missing nodes and signal them as having\n        // a detected parent (or a NO_PARENT value via a special constant).\n        let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n        if (animationElementMap.size > 1) {\n          let elm = element;\n          const parentsToAdd = [];\n          while (elm = elm.parentNode) {\n            const detectedParent = animationElementMap.get(elm);\n            if (detectedParent) {\n              parentWithAnimation = detectedParent;\n              break;\n            }\n            parentsToAdd.push(elm);\n          }\n          parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation));\n        }\n        const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n        player.setRealPlayer(innerPlayer);\n        if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n          rootPlayers.push(player);\n        } else {\n          const parentPlayers = this.playersByElement.get(parentWithAnimation);\n          if (parentPlayers && parentPlayers.length) {\n            player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n          }\n          skippedPlayers.push(player);\n        }\n      } else {\n        eraseStyles(element, instruction.fromStyles);\n        player.onDestroy(() => setStyles(element, instruction.toStyles));\n        // there still might be a ancestor player animating this\n        // element therefore we will still add it as a sub player\n        // even if its animation may be disabled\n        subPlayers.push(player);\n        if (disabledElementsSet.has(element)) {\n          skippedPlayers.push(player);\n        }\n      }\n    });\n    // find all of the sub players' corresponding inner animation players\n    subPlayers.forEach(player => {\n      // even if no players are found for a sub animation it\n      // will still complete itself after the next tick since it's Noop\n      const playersForElement = skippedPlayersMap.get(player.element);\n      if (playersForElement && playersForElement.length) {\n        const innerPlayer = optimizeGroupPlayer(playersForElement);\n        player.setRealPlayer(innerPlayer);\n      }\n    });\n    // the reason why we don't actually play the animation is\n    // because all that a skipped player is designed to do is to\n    // fire the start/done transition callback events\n    skippedPlayers.forEach(player => {\n      if (player.parentPlayer) {\n        player.syncPlayerEvents(player.parentPlayer);\n      } else {\n        player.destroy();\n      }\n    });\n    // run through all of the queued removals and see if they\n    // were picked up by a query. If not then perform the removal\n    // operation right away unless a parent animation is ongoing.\n    for (let i = 0; i < allLeaveNodes.length; i++) {\n      const element = allLeaveNodes[i];\n      const details = element[REMOVAL_FLAG];\n      removeClass(element, LEAVE_CLASSNAME);\n      // this means the element has a removal animation that is being\n      // taken care of and therefore the inner elements will hang around\n      // until that animation is over (or the parent queried animation)\n      if (details && details.hasAnimation) continue;\n      let players = [];\n      // if this element is queried or if it contains queried children\n      // then we want for the element not to be removed from the page\n      // until the queried animations have finished\n      if (queriedElements.size) {\n        let queriedPlayerResults = queriedElements.get(element);\n        if (queriedPlayerResults && queriedPlayerResults.length) {\n          players.push(...queriedPlayerResults);\n        }\n        let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n        for (let j = 0; j < queriedInnerElements.length; j++) {\n          let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n          if (queriedPlayers && queriedPlayers.length) {\n            players.push(...queriedPlayers);\n          }\n        }\n      }\n      const activePlayers = players.filter(p => !p.destroyed);\n      if (activePlayers.length) {\n        removeNodesAfterAnimationDone(this, element, activePlayers);\n      } else {\n        this.processLeaveNode(element);\n      }\n    }\n    // this is required so the cleanup method doesn't remove them\n    allLeaveNodes.length = 0;\n    rootPlayers.forEach(player => {\n      this.players.push(player);\n      player.onDone(() => {\n        player.destroy();\n        const index = this.players.indexOf(player);\n        this.players.splice(index, 1);\n      });\n      player.play();\n    });\n    return rootPlayers;\n  }\n  afterFlush(callback) {\n    this._flushFns.push(callback);\n  }\n  afterFlushAnimationsDone(callback) {\n    this._whenQuietFns.push(callback);\n  }\n  _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n    let players = [];\n    if (isQueriedElement) {\n      const queriedElementPlayers = this.playersByQueriedElement.get(element);\n      if (queriedElementPlayers) {\n        players = queriedElementPlayers;\n      }\n    } else {\n      const elementPlayers = this.playersByElement.get(element);\n      if (elementPlayers) {\n        const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n        elementPlayers.forEach(player => {\n          if (player.queued) return;\n          if (!isRemovalAnimation && player.triggerName != triggerName) return;\n          players.push(player);\n        });\n      }\n    }\n    if (namespaceId || triggerName) {\n      players = players.filter(player => {\n        if (namespaceId && namespaceId != player.namespaceId) return false;\n        if (triggerName && triggerName != player.triggerName) return false;\n        return true;\n      });\n    }\n    return players;\n  }\n  _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n    const triggerName = instruction.triggerName;\n    const rootElement = instruction.element;\n    // when a removal animation occurs, ALL previous players are collected\n    // and destroyed (even if they are outside of the current namespace)\n    const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n    const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n    for (const timelineInstruction of instruction.timelines) {\n      const element = timelineInstruction.element;\n      const isQueriedElement = element !== rootElement;\n      const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);\n      const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n      previousPlayers.forEach(player => {\n        const realPlayer = player.getRealPlayer();\n        if (realPlayer.beforeDestroy) {\n          realPlayer.beforeDestroy();\n        }\n        player.destroy();\n        players.push(player);\n      });\n    }\n    // this needs to be done so that the PRE/POST styles can be\n    // computed properly without interfering with the previous animation\n    eraseStyles(rootElement, instruction.fromStyles);\n  }\n  _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n    const triggerName = instruction.triggerName;\n    const rootElement = instruction.element;\n    // we first run this so that the previous animation player\n    // data can be passed into the successive animation players\n    const allQueriedPlayers = [];\n    const allConsumedElements = new Set();\n    const allSubElements = new Set();\n    const allNewPlayers = instruction.timelines.map(timelineInstruction => {\n      const element = timelineInstruction.element;\n      allConsumedElements.add(element);\n      // FIXME (matsko): make sure to-be-removed animations are removed properly\n      const details = element[REMOVAL_FLAG];\n      if (details && details.removedBeforeQueried) return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n      const isQueriedElement = element !== rootElement;\n      const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map(p => p.getRealPlayer())).filter(p => {\n        // the `element` is not apart of the AnimationPlayer definition, but\n        // Mock/WebAnimations\n        // use the element within their implementation. This will be added in Angular5 to\n        // AnimationPlayer\n        const pp = p;\n        return pp.element ? pp.element === element : false;\n      });\n      const preStyles = preStylesMap.get(element);\n      const postStyles = postStylesMap.get(element);\n      const keyframes = normalizeKeyframes$1(this._normalizer, timelineInstruction.keyframes, preStyles, postStyles);\n      const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n      // this means that this particular player belongs to a sub trigger. It is\n      // important that we match this player up with the corresponding (@trigger.listener)\n      if (timelineInstruction.subTimeline && skippedPlayersMap) {\n        allSubElements.add(element);\n      }\n      if (isQueriedElement) {\n        const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n        wrappedPlayer.setRealPlayer(player);\n        allQueriedPlayers.push(wrappedPlayer);\n      }\n      return player;\n    });\n    allQueriedPlayers.forEach(player => {\n      getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player);\n      player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));\n    });\n    allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME));\n    const player = optimizeGroupPlayer(allNewPlayers);\n    player.onDestroy(() => {\n      allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME));\n      setStyles(rootElement, instruction.toStyles);\n    });\n    // this basically makes all of the callbacks for sub element animations\n    // be dependent on the upper players for when they finish\n    allSubElements.forEach(element => {\n      getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);\n    });\n    return player;\n  }\n  _buildPlayer(instruction, keyframes, previousPlayers) {\n    if (keyframes.length > 0) {\n      return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n    }\n    // special case for when an empty transition|definition is provided\n    // ... there is no point in rendering an empty animation\n    return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n  }\n}\nclass TransitionAnimationPlayer {\n  namespaceId;\n  triggerName;\n  element;\n  _player = new NoopAnimationPlayer();\n  _containsRealPlayer = false;\n  _queuedCallbacks = new Map();\n  destroyed = false;\n  parentPlayer = null;\n  markedForDestroy = false;\n  disabled = false;\n  queued = true;\n  totalTime = 0;\n  constructor(namespaceId, triggerName, element) {\n    this.namespaceId = namespaceId;\n    this.triggerName = triggerName;\n    this.element = element;\n  }\n  setRealPlayer(player) {\n    if (this._containsRealPlayer) return;\n    this._player = player;\n    this._queuedCallbacks.forEach((callbacks, phase) => {\n      callbacks.forEach(callback => listenOnPlayer(player, phase, undefined, callback));\n    });\n    this._queuedCallbacks.clear();\n    this._containsRealPlayer = true;\n    this.overrideTotalTime(player.totalTime);\n    this.queued = false;\n  }\n  getRealPlayer() {\n    return this._player;\n  }\n  overrideTotalTime(totalTime) {\n    this.totalTime = totalTime;\n  }\n  syncPlayerEvents(player) {\n    const p = this._player;\n    if (p.triggerCallback) {\n      player.onStart(() => p.triggerCallback('start'));\n    }\n    player.onDone(() => this.finish());\n    player.onDestroy(() => this.destroy());\n  }\n  _queueEvent(name, callback) {\n    getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);\n  }\n  onDone(fn) {\n    if (this.queued) {\n      this._queueEvent('done', fn);\n    }\n    this._player.onDone(fn);\n  }\n  onStart(fn) {\n    if (this.queued) {\n      this._queueEvent('start', fn);\n    }\n    this._player.onStart(fn);\n  }\n  onDestroy(fn) {\n    if (this.queued) {\n      this._queueEvent('destroy', fn);\n    }\n    this._player.onDestroy(fn);\n  }\n  init() {\n    this._player.init();\n  }\n  hasStarted() {\n    return this.queued ? false : this._player.hasStarted();\n  }\n  play() {\n    !this.queued && this._player.play();\n  }\n  pause() {\n    !this.queued && this._player.pause();\n  }\n  restart() {\n    !this.queued && this._player.restart();\n  }\n  finish() {\n    this._player.finish();\n  }\n  destroy() {\n    this.destroyed = true;\n    this._player.destroy();\n  }\n  reset() {\n    !this.queued && this._player.reset();\n  }\n  setPosition(p) {\n    if (!this.queued) {\n      this._player.setPosition(p);\n    }\n  }\n  getPosition() {\n    return this.queued ? 0 : this._player.getPosition();\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const p = this._player;\n    if (p.triggerCallback) {\n      p.triggerCallback(phaseName);\n    }\n  }\n}\nfunction deleteOrUnsetInMap(map, key, value) {\n  let currentValues = map.get(key);\n  if (currentValues) {\n    if (currentValues.length) {\n      const index = currentValues.indexOf(value);\n      currentValues.splice(index, 1);\n    }\n    if (currentValues.length == 0) {\n      map.delete(key);\n    }\n  }\n  return currentValues;\n}\nfunction normalizeTriggerValue(value) {\n  // we use `!= null` here because it's the most simple\n  // way to test against a \"falsy\" value without mixing\n  // in empty strings or a zero value. DO NOT OPTIMIZE.\n  return value != null ? value : null;\n}\nfunction isElementNode(node) {\n  return node && node['nodeType'] === 1;\n}\nfunction isTriggerEventValid(eventName) {\n  return eventName == 'start' || eventName == 'done';\n}\nfunction cloakElement(element, value) {\n  const oldValue = element.style.display;\n  element.style.display = value != null ? value : 'none';\n  return oldValue;\n}\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n  const cloakVals = [];\n  elements.forEach(element => cloakVals.push(cloakElement(element)));\n  const failedElements = [];\n  elementPropsMap.forEach((props, element) => {\n    const styles = new Map();\n    props.forEach(prop => {\n      const value = driver.computeStyle(element, prop, defaultStyle);\n      styles.set(prop, value);\n      // there is no easy way to detect this because a sub element could be removed\n      // by a parent animation element being detached.\n      if (!value || value.length == 0) {\n        element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n        failedElements.push(element);\n      }\n    });\n    valuesMap.set(element, styles);\n  });\n  // we use a index variable here since Set.forEach(a, i) does not return\n  // an index value for the closure (but instead just the value)\n  let i = 0;\n  elements.forEach(element => cloakElement(element, cloakVals[i++]));\n  return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\nfunction buildRootMap(roots, nodes) {\n  const rootMap = new Map();\n  roots.forEach(root => rootMap.set(root, []));\n  if (nodes.length == 0) return rootMap;\n  const NULL_NODE = 1;\n  const nodeSet = new Set(nodes);\n  const localRootMap = new Map();\n  function getRoot(node) {\n    if (!node) return NULL_NODE;\n    let root = localRootMap.get(node);\n    if (root) return root;\n    const parent = node.parentNode;\n    if (rootMap.has(parent)) {\n      // ngIf inside @trigger\n      root = parent;\n    } else if (nodeSet.has(parent)) {\n      // ngIf inside ngIf\n      root = NULL_NODE;\n    } else {\n      // recurse upwards\n      root = getRoot(parent);\n    }\n    localRootMap.set(node, root);\n    return root;\n  }\n  nodes.forEach(node => {\n    const root = getRoot(node);\n    if (root !== NULL_NODE) {\n      rootMap.get(root).push(node);\n    }\n  });\n  return rootMap;\n}\nfunction addClass(element, className) {\n  element.classList?.add(className);\n}\nfunction removeClass(element, className) {\n  element.classList?.remove(className);\n}\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n  optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));\n}\nfunction flattenGroupPlayers(players) {\n  const finalPlayers = [];\n  _flattenGroupPlayersRecur(players, finalPlayers);\n  return finalPlayers;\n}\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n  for (let i = 0; i < players.length; i++) {\n    const player = players[i];\n    if (player instanceof ɵAnimationGroupPlayer) {\n      _flattenGroupPlayersRecur(player.players, finalPlayers);\n    } else {\n      finalPlayers.push(player);\n    }\n  }\n}\nfunction objEquals(a, b) {\n  const k1 = Object.keys(a);\n  const k2 = Object.keys(b);\n  if (k1.length != k2.length) return false;\n  for (let i = 0; i < k1.length; i++) {\n    const prop = k1[i];\n    if (!b.hasOwnProperty(prop) || a[prop] !== b[prop]) return false;\n  }\n  return true;\n}\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n  const postEntry = allPostStyleElements.get(element);\n  if (!postEntry) return false;\n  let preEntry = allPreStyleElements.get(element);\n  if (preEntry) {\n    postEntry.forEach(data => preEntry.add(data));\n  } else {\n    allPreStyleElements.set(element, postEntry);\n  }\n  allPostStyleElements.delete(element);\n  return true;\n}\nclass AnimationEngine {\n  _driver;\n  _normalizer;\n  _transitionEngine;\n  _timelineEngine;\n  _triggerCache = {};\n  // this method is designed to be overridden by the code that uses this engine\n  onRemovalComplete = (element, context) => {};\n  constructor(doc, _driver, _normalizer) {\n    this._driver = _driver;\n    this._normalizer = _normalizer;\n    this._transitionEngine = new TransitionAnimationEngine(doc.body, _driver, _normalizer);\n    this._timelineEngine = new TimelineAnimationEngine(doc.body, _driver, _normalizer);\n    this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);\n  }\n  registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n    const cacheKey = componentId + '-' + name;\n    let trigger = this._triggerCache[cacheKey];\n    if (!trigger) {\n      const errors = [];\n      const warnings = [];\n      const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n      if (errors.length) {\n        throw triggerBuildFailed(name, errors);\n      }\n      if (warnings.length) {\n        warnTriggerBuild(name, warnings);\n      }\n      trigger = buildTrigger(name, ast, this._normalizer);\n      this._triggerCache[cacheKey] = trigger;\n    }\n    this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n  }\n  register(namespaceId, hostElement) {\n    this._transitionEngine.register(namespaceId, hostElement);\n  }\n  destroy(namespaceId, context) {\n    this._transitionEngine.destroy(namespaceId, context);\n  }\n  onInsert(namespaceId, element, parent, insertBefore) {\n    this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n  }\n  onRemove(namespaceId, element, context) {\n    this._transitionEngine.removeNode(namespaceId, element, context);\n  }\n  disableAnimations(element, disable) {\n    this._transitionEngine.markElementAsDisabled(element, disable);\n  }\n  process(namespaceId, element, property, value) {\n    if (property.charAt(0) == '@') {\n      const [id, action] = parseTimelineCommand(property);\n      const args = value;\n      this._timelineEngine.command(id, element, action, args);\n    } else {\n      this._transitionEngine.trigger(namespaceId, element, property, value);\n    }\n  }\n  listen(namespaceId, element, eventName, eventPhase, callback) {\n    // @@listen\n    if (eventName.charAt(0) == '@') {\n      const [id, action] = parseTimelineCommand(eventName);\n      return this._timelineEngine.listen(id, element, action, callback);\n    }\n    return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n  }\n  flush(microtaskId = -1) {\n    this._transitionEngine.flush(microtaskId);\n  }\n  get players() {\n    return [...this._transitionEngine.players, ...this._timelineEngine.players];\n  }\n  whenRenderingDone() {\n    return this._transitionEngine.whenRenderingDone();\n  }\n  afterFlushAnimationsDone(cb) {\n    this._transitionEngine.afterFlushAnimationsDone(cb);\n  }\n}\n\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n  let startStyles = null;\n  let endStyles = null;\n  if (Array.isArray(styles) && styles.length) {\n    startStyles = filterNonAnimatableStyles(styles[0]);\n    if (styles.length > 1) {\n      endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n    }\n  } else if (styles instanceof Map) {\n    startStyles = filterNonAnimatableStyles(styles);\n  }\n  return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n  _element;\n  _startStyles;\n  _endStyles;\n  static initialStylesByElement = /* @__PURE__ */new WeakMap();\n  _state = 0 /* SpecialCasedStylesState.Pending */;\n  _initialStyles;\n  constructor(_element, _startStyles, _endStyles) {\n    this._element = _element;\n    this._startStyles = _startStyles;\n    this._endStyles = _endStyles;\n    let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n    if (!initialStyles) {\n      SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = new Map());\n    }\n    this._initialStyles = initialStyles;\n  }\n  start() {\n    if (this._state < 1 /* SpecialCasedStylesState.Started */) {\n      if (this._startStyles) {\n        setStyles(this._element, this._startStyles, this._initialStyles);\n      }\n      this._state = 1 /* SpecialCasedStylesState.Started */;\n    }\n  }\n  finish() {\n    this.start();\n    if (this._state < 2 /* SpecialCasedStylesState.Finished */) {\n      setStyles(this._element, this._initialStyles);\n      if (this._endStyles) {\n        setStyles(this._element, this._endStyles);\n        this._endStyles = null;\n      }\n      this._state = 1 /* SpecialCasedStylesState.Started */;\n    }\n  }\n  destroy() {\n    this.finish();\n    if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {\n      SpecialCasedStyles.initialStylesByElement.delete(this._element);\n      if (this._startStyles) {\n        eraseStyles(this._element, this._startStyles);\n        this._endStyles = null;\n      }\n      if (this._endStyles) {\n        eraseStyles(this._element, this._endStyles);\n        this._endStyles = null;\n      }\n      setStyles(this._element, this._initialStyles);\n      this._state = 3 /* SpecialCasedStylesState.Destroyed */;\n    }\n  }\n}\nfunction filterNonAnimatableStyles(styles) {\n  let result = null;\n  styles.forEach((val, prop) => {\n    if (isNonAnimatableStyle(prop)) {\n      result = result || new Map();\n      result.set(prop, val);\n    }\n  });\n  return result;\n}\nfunction isNonAnimatableStyle(prop) {\n  return prop === 'display' || prop === 'position';\n}\nclass WebAnimationsPlayer {\n  element;\n  keyframes;\n  options;\n  _specialStyles;\n  _onDoneFns = [];\n  _onStartFns = [];\n  _onDestroyFns = [];\n  _duration;\n  _delay;\n  _initialized = false;\n  _finished = false;\n  _started = false;\n  _destroyed = false;\n  _finalKeyframe;\n  // the following original fns are persistent copies of the _onStartFns and _onDoneFns\n  // and are used to reset the fns to their original values upon reset()\n  // (since the _onStartFns and _onDoneFns get deleted after they are called)\n  _originalOnDoneFns = [];\n  _originalOnStartFns = [];\n  // using non-null assertion because it's re(set) by init();\n  domPlayer;\n  time = 0;\n  parentPlayer = null;\n  currentSnapshot = new Map();\n  constructor(element, keyframes, options, _specialStyles) {\n    this.element = element;\n    this.keyframes = keyframes;\n    this.options = options;\n    this._specialStyles = _specialStyles;\n    this._duration = options['duration'];\n    this._delay = options['delay'] || 0;\n    this.time = this._duration + this._delay;\n  }\n  _onFinish() {\n    if (!this._finished) {\n      this._finished = true;\n      this._onDoneFns.forEach(fn => fn());\n      this._onDoneFns = [];\n    }\n  }\n  init() {\n    this._buildPlayer();\n    this._preparePlayerBeforeStart();\n  }\n  _buildPlayer() {\n    if (this._initialized) return;\n    this._initialized = true;\n    const keyframes = this.keyframes;\n    // @ts-expect-error overwriting a readonly property\n    this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options);\n    this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map();\n    const onFinish = () => this._onFinish();\n    this.domPlayer.addEventListener('finish', onFinish);\n    this.onDestroy(() => {\n      // We must remove the `finish` event listener once an animation has completed all its\n      // iterations. This action is necessary to prevent a memory leak since the listener captures\n      // `this`, creating a closure that prevents `this` from being garbage collected.\n      this.domPlayer.removeEventListener('finish', onFinish);\n    });\n  }\n  _preparePlayerBeforeStart() {\n    // this is required so that the player doesn't start to animate right away\n    if (this._delay) {\n      this._resetDomPlayerState();\n    } else {\n      this.domPlayer.pause();\n    }\n  }\n  _convertKeyframesToObject(keyframes) {\n    const kfs = [];\n    keyframes.forEach(frame => {\n      kfs.push(Object.fromEntries(frame));\n    });\n    return kfs;\n  }\n  /** @internal */\n  _triggerWebAnimation(element, keyframes, options) {\n    return element.animate(this._convertKeyframesToObject(keyframes), options);\n  }\n  onStart(fn) {\n    this._originalOnStartFns.push(fn);\n    this._onStartFns.push(fn);\n  }\n  onDone(fn) {\n    this._originalOnDoneFns.push(fn);\n    this._onDoneFns.push(fn);\n  }\n  onDestroy(fn) {\n    this._onDestroyFns.push(fn);\n  }\n  play() {\n    this._buildPlayer();\n    if (!this.hasStarted()) {\n      this._onStartFns.forEach(fn => fn());\n      this._onStartFns = [];\n      this._started = true;\n      if (this._specialStyles) {\n        this._specialStyles.start();\n      }\n    }\n    this.domPlayer.play();\n  }\n  pause() {\n    this.init();\n    this.domPlayer.pause();\n  }\n  finish() {\n    this.init();\n    if (this._specialStyles) {\n      this._specialStyles.finish();\n    }\n    this._onFinish();\n    this.domPlayer.finish();\n  }\n  reset() {\n    this._resetDomPlayerState();\n    this._destroyed = false;\n    this._finished = false;\n    this._started = false;\n    this._onStartFns = this._originalOnStartFns;\n    this._onDoneFns = this._originalOnDoneFns;\n  }\n  _resetDomPlayerState() {\n    if (this.domPlayer) {\n      this.domPlayer.cancel();\n    }\n  }\n  restart() {\n    this.reset();\n    this.play();\n  }\n  hasStarted() {\n    return this._started;\n  }\n  destroy() {\n    if (!this._destroyed) {\n      this._destroyed = true;\n      this._resetDomPlayerState();\n      this._onFinish();\n      if (this._specialStyles) {\n        this._specialStyles.destroy();\n      }\n      this._onDestroyFns.forEach(fn => fn());\n      this._onDestroyFns = [];\n    }\n  }\n  setPosition(p) {\n    if (this.domPlayer === undefined) {\n      this.init();\n    }\n    this.domPlayer.currentTime = p * this.time;\n  }\n  getPosition() {\n    // tsc is complaining with TS2362 without the conversion to number\n    return +(this.domPlayer.currentTime ?? 0) / this.time;\n  }\n  get totalTime() {\n    return this._delay + this._duration;\n  }\n  beforeDestroy() {\n    const styles = new Map();\n    if (this.hasStarted()) {\n      // note: this code is invoked only when the `play` function was called prior to this\n      // (thus `hasStarted` returns true), this implies that the code that initializes\n      // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here\n      const finalKeyframe = this._finalKeyframe;\n      finalKeyframe.forEach((val, prop) => {\n        if (prop !== 'offset') {\n          styles.set(prop, this._finished ? val : computeStyle(this.element, prop));\n        }\n      });\n    }\n    this.currentSnapshot = styles;\n  }\n  /** @internal */\n  triggerCallback(phaseName) {\n    const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns;\n    methods.forEach(fn => fn());\n    methods.length = 0;\n  }\n}\nclass WebAnimationsDriver {\n  validateStyleProperty(prop) {\n    // Perform actual validation in dev mode only, in prod mode this check is a noop.\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      return validateStyleProperty(prop);\n    }\n    return true;\n  }\n  validateAnimatableStyleProperty(prop) {\n    // Perform actual validation in dev mode only, in prod mode this check is a noop.\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const cssProp = camelCaseToDashCase(prop);\n      return validateWebAnimatableStyleProperty(cssProp);\n    }\n    return true;\n  }\n  containsElement(elm1, elm2) {\n    return containsElement(elm1, elm2);\n  }\n  getParentElement(element) {\n    return getParentElement(element);\n  }\n  query(element, selector, multi) {\n    return invokeQuery(element, selector, multi);\n  }\n  computeStyle(element, prop, defaultValue) {\n    return computeStyle(element, prop);\n  }\n  animate(element, keyframes, duration, delay, easing, previousPlayers = []) {\n    const fill = delay == 0 ? 'both' : 'forwards';\n    const playerOptions = {\n      duration,\n      delay,\n      fill\n    };\n    // we check for this to avoid having a null|undefined value be present\n    // for the easing (which results in an error for certain browsers #9752)\n    if (easing) {\n      playerOptions['easing'] = easing;\n    }\n    const previousStyles = new Map();\n    const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer);\n    if (allowPreviousPlayerStylesMerge(duration, delay)) {\n      previousWebAnimationPlayers.forEach(player => {\n        player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));\n      });\n    }\n    let _keyframes = normalizeKeyframes(keyframes).map(styles => new Map(styles));\n    _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);\n    const specialStyles = packageNonAnimatableStyles(element, _keyframes);\n    return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);\n  }\n}\nfunction createEngine(type, doc) {\n  // TODO: find a way to make this tree shakable.\n  if (type === 'noop') {\n    return new AnimationEngine(doc, new NoopAnimationDriver(), new NoopAnimationStyleNormalizer());\n  }\n  return new AnimationEngine(doc, new WebAnimationsDriver(), new WebAnimationsStyleNormalizer());\n}\nclass Animation {\n  _driver;\n  _animationAst;\n  constructor(_driver, input) {\n    this._driver = _driver;\n    const errors = [];\n    const warnings = [];\n    const ast = buildAnimationAst(_driver, input, errors, warnings);\n    if (errors.length) {\n      throw validationFailed(errors);\n    }\n    if (warnings.length) {\n      warnValidation(warnings);\n    }\n    this._animationAst = ast;\n  }\n  buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n    const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : startingStyles;\n    const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : destinationStyles;\n    const errors = [];\n    subInstructions = subInstructions || new ElementInstructionMap();\n    const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n    if (errors.length) {\n      throw buildingFailed(errors);\n    }\n    return result;\n  }\n}\nconst ANIMATION_PREFIX = '@';\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\nclass BaseAnimationRenderer {\n  namespaceId;\n  delegate;\n  engine;\n  _onDestroy;\n  // We need to explicitly type this property because of an api-extractor bug\n  // See https://github.com/microsoft/rushstack/issues/4390\n  ɵtype = 0 /* AnimationRendererType.Regular */;\n  constructor(namespaceId, delegate, engine, _onDestroy) {\n    this.namespaceId = namespaceId;\n    this.delegate = delegate;\n    this.engine = engine;\n    this._onDestroy = _onDestroy;\n  }\n  get data() {\n    return this.delegate.data;\n  }\n  destroyNode(node) {\n    this.delegate.destroyNode?.(node);\n  }\n  destroy() {\n    this.engine.destroy(this.namespaceId, this.delegate);\n    this.engine.afterFlushAnimationsDone(() => {\n      // Call the renderer destroy method after the animations has finished as otherwise\n      // styles will be removed too early which will cause an unstyled animation.\n      queueMicrotask(() => {\n        this.delegate.destroy();\n      });\n    });\n    this._onDestroy?.();\n  }\n  createElement(name, namespace) {\n    return this.delegate.createElement(name, namespace);\n  }\n  createComment(value) {\n    return this.delegate.createComment(value);\n  }\n  createText(value) {\n    return this.delegate.createText(value);\n  }\n  appendChild(parent, newChild) {\n    this.delegate.appendChild(parent, newChild);\n    this.engine.onInsert(this.namespaceId, newChild, parent, false);\n  }\n  insertBefore(parent, newChild, refChild, isMove = true) {\n    this.delegate.insertBefore(parent, newChild, refChild);\n    // If `isMove` true than we should animate this insert.\n    this.engine.onInsert(this.namespaceId, newChild, parent, isMove);\n  }\n  removeChild(parent, oldChild, isHostElement) {\n    // Prior to the changes in #57203, this method wasn't being called at all by `core` if the child\n    // doesn't have a parent. There appears to be some animation-specific downstream logic that\n    // depends on the null check happening before the animation engine. This check keeps the old\n    // behavior while allowing `core` to not have to check for the parent element anymore.\n    if (this.parentNode(oldChild)) {\n      this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    }\n  }\n  selectRootElement(selectorOrNode, preserveContent) {\n    return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n  }\n  parentNode(node) {\n    return this.delegate.parentNode(node);\n  }\n  nextSibling(node) {\n    return this.delegate.nextSibling(node);\n  }\n  setAttribute(el, name, value, namespace) {\n    this.delegate.setAttribute(el, name, value, namespace);\n  }\n  removeAttribute(el, name, namespace) {\n    this.delegate.removeAttribute(el, name, namespace);\n  }\n  addClass(el, name) {\n    this.delegate.addClass(el, name);\n  }\n  removeClass(el, name) {\n    this.delegate.removeClass(el, name);\n  }\n  setStyle(el, style, value, flags) {\n    this.delegate.setStyle(el, style, value, flags);\n  }\n  removeStyle(el, style, flags) {\n    this.delegate.removeStyle(el, style, flags);\n  }\n  setProperty(el, name, value) {\n    if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n      this.disableAnimations(el, !!value);\n    } else {\n      this.delegate.setProperty(el, name, value);\n    }\n  }\n  setValue(node, value) {\n    this.delegate.setValue(node, value);\n  }\n  listen(target, eventName, callback) {\n    return this.delegate.listen(target, eventName, callback);\n  }\n  disableAnimations(element, value) {\n    this.engine.disableAnimations(element, value);\n  }\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n  factory;\n  constructor(factory, namespaceId, delegate, engine, onDestroy) {\n    super(namespaceId, delegate, engine, onDestroy);\n    this.factory = factory;\n    this.namespaceId = namespaceId;\n  }\n  setProperty(el, name, value) {\n    if (name.charAt(0) == ANIMATION_PREFIX) {\n      if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n        value = value === undefined ? true : !!value;\n        this.disableAnimations(el, value);\n      } else {\n        this.engine.process(this.namespaceId, el, name.slice(1), value);\n      }\n    } else {\n      this.delegate.setProperty(el, name, value);\n    }\n  }\n  listen(target, eventName, callback) {\n    if (eventName.charAt(0) == ANIMATION_PREFIX) {\n      const element = resolveElementFromTarget(target);\n      let name = eventName.slice(1);\n      let phase = '';\n      // @listener.phase is for trigger animation callbacks\n      // @@listener is for animation builder callbacks\n      if (name.charAt(0) != ANIMATION_PREFIX) {\n        [name, phase] = parseTriggerCallbackName(name);\n      }\n      return this.engine.listen(this.namespaceId, element, name, phase, event => {\n        const countId = event['_data'] || -1;\n        this.factory.scheduleListenerCallback(countId, callback, event);\n      });\n    }\n    return this.delegate.listen(target, eventName, callback);\n  }\n}\nfunction resolveElementFromTarget(target) {\n  switch (target) {\n    case 'body':\n      return document.body;\n    case 'document':\n      return document;\n    case 'window':\n      return window;\n    default:\n      return target;\n  }\n}\nfunction parseTriggerCallbackName(triggerName) {\n  const dotIndex = triggerName.indexOf('.');\n  const trigger = triggerName.substring(0, dotIndex);\n  const phase = triggerName.slice(dotIndex + 1);\n  return [trigger, phase];\n}\nclass AnimationRendererFactory {\n  delegate;\n  engine;\n  _zone;\n  _currentId = 0;\n  _microtaskId = 1;\n  _animationCallbacksBuffer = [];\n  _rendererCache = new Map();\n  _cdRecurDepth = 0;\n  constructor(delegate, engine, _zone) {\n    this.delegate = delegate;\n    this.engine = engine;\n    this._zone = _zone;\n    engine.onRemovalComplete = (element, delegate) => {\n      delegate?.removeChild(null, element);\n    };\n  }\n  createRenderer(hostElement, type) {\n    const EMPTY_NAMESPACE_ID = '';\n    // cache the delegates to find out which cached delegate can\n    // be used by which cached renderer\n    const delegate = this.delegate.createRenderer(hostElement, type);\n    if (!hostElement || !type?.data?.['animation']) {\n      const cache = this._rendererCache;\n      let renderer = cache.get(delegate);\n      if (!renderer) {\n        // Ensure that the renderer is removed from the cache on destroy\n        // since it may contain references to detached DOM nodes.\n        const onRendererDestroy = () => cache.delete(delegate);\n        renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);\n        // only cache this result when the base renderer is used\n        cache.set(delegate, renderer);\n      }\n      return renderer;\n    }\n    const componentId = type.id;\n    const namespaceId = type.id + '-' + this._currentId;\n    this._currentId++;\n    this.engine.register(namespaceId, hostElement);\n    const registerTrigger = trigger => {\n      if (Array.isArray(trigger)) {\n        trigger.forEach(registerTrigger);\n      } else {\n        this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n      }\n    };\n    const animationTriggers = type.data['animation'];\n    animationTriggers.forEach(registerTrigger);\n    return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n  }\n  begin() {\n    this._cdRecurDepth++;\n    if (this.delegate.begin) {\n      this.delegate.begin();\n    }\n  }\n  _scheduleCountTask() {\n    queueMicrotask(() => {\n      this._microtaskId++;\n    });\n  }\n  /** @internal */\n  scheduleListenerCallback(count, fn, data) {\n    if (count >= 0 && count < this._microtaskId) {\n      this._zone.run(() => fn(data));\n      return;\n    }\n    const animationCallbacksBuffer = this._animationCallbacksBuffer;\n    if (animationCallbacksBuffer.length == 0) {\n      queueMicrotask(() => {\n        this._zone.run(() => {\n          animationCallbacksBuffer.forEach(tuple => {\n            const [fn, data] = tuple;\n            fn(data);\n          });\n          this._animationCallbacksBuffer = [];\n        });\n      });\n    }\n    animationCallbacksBuffer.push([fn, data]);\n  }\n  end() {\n    this._cdRecurDepth--;\n    // this is to prevent animations from running twice when an inner\n    // component does CD when a parent component instead has inserted it\n    if (this._cdRecurDepth == 0) {\n      this._zone.runOutsideAngular(() => {\n        this._scheduleCountTask();\n        this.engine.flush(this._microtaskId);\n      });\n    }\n    if (this.delegate.end) {\n      this.delegate.end();\n    }\n  }\n  whenRenderingDone() {\n    return this.engine.whenRenderingDone();\n  }\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, NoopAnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, BaseAnimationRenderer as ɵBaseAnimationRenderer, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, camelCaseToDashCase as ɵcamelCaseToDashCase, containsElement as ɵcontainsElement, createEngine as ɵcreateEngine, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty, validateWebAnimatableStyleProperty as ɵvalidateWebAnimatableStyleProperty };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE, NgModule, ɵperformanceMarkFeature } from '@angular/core';\nexport { ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport * as i1 from '@angular/animations/browser';\nimport { ɵAnimationEngine, ɵWebAnimationsStyleNormalizer, ɵAnimationRendererFactory, ɵAnimationStyleNormalizer, AnimationDriver, ɵWebAnimationsDriver, NoopAnimationDriver } from '@angular/animations/browser';\nimport { DOCUMENT } from '@angular/common';\nclass InjectableAnimationEngine extends ɵAnimationEngine {\n  // The `ApplicationRef` is injected here explicitly to force the dependency ordering.\n  // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they\n  // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.\n  constructor(doc, driver, normalizer) {\n    super(doc, driver, normalizer);\n  }\n  ngOnDestroy() {\n    this.flush();\n  }\n  static ɵfac = function InjectableAnimationEngine_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || InjectableAnimationEngine)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1.AnimationDriver), i0.ɵɵinject(i1.ɵAnimationStyleNormalizer));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: InjectableAnimationEngine,\n    factory: InjectableAnimationEngine.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(InjectableAnimationEngine, [{\n    type: Injectable\n  }], () => [{\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: i1.AnimationDriver\n  }, {\n    type: i1.ɵAnimationStyleNormalizer\n  }], null);\n})();\nfunction instantiateDefaultStyleNormalizer() {\n  return new ɵWebAnimationsStyleNormalizer();\n}\nfunction instantiateRendererFactory(renderer, engine, zone) {\n  return new ɵAnimationRendererFactory(renderer, engine, zone);\n}\nconst SHARED_ANIMATION_PROVIDERS = [{\n  provide: ɵAnimationStyleNormalizer,\n  useFactory: instantiateDefaultStyleNormalizer\n}, {\n  provide: ɵAnimationEngine,\n  useClass: InjectableAnimationEngine\n}, {\n  provide: RendererFactory2,\n  useFactory: instantiateRendererFactory,\n  deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n}];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [{\n  provide: AnimationDriver,\n  useFactory: () => new ɵWebAnimationsDriver()\n}, {\n  provide: ANIMATION_MODULE_TYPE,\n  useValue: 'BrowserAnimations'\n}, ...SHARED_ANIMATION_PROVIDERS];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{\n  provide: AnimationDriver,\n  useClass: NoopAnimationDriver\n}, {\n  provide: ANIMATION_MODULE_TYPE,\n  useValue: 'NoopAnimations'\n}, ...SHARED_ANIMATION_PROVIDERS];\n\n/**\n * Exports `BrowserModule` with additional dependency-injection providers\n * for use with animations. See [Animations](guide/animations).\n * @publicApi\n */\nclass BrowserAnimationsModule {\n  /**\n   * Configures the module based on the specified object.\n   *\n   * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.\n   * @see {@link BrowserAnimationsModuleConfig}\n   *\n   * @usageNotes\n   * When registering the `BrowserAnimationsModule`, you can use the `withConfig`\n   * function as follows:\n   * ```\n   * @NgModule({\n   *   imports: [BrowserAnimationsModule.withConfig(config)]\n   * })\n   * class MyNgModule {}\n   * ```\n   */\n  static withConfig(config) {\n    return {\n      ngModule: BrowserAnimationsModule,\n      providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS : BROWSER_ANIMATIONS_PROVIDERS\n    };\n  }\n  static ɵfac = function BrowserAnimationsModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserAnimationsModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: BrowserAnimationsModule,\n    exports: [BrowserModule]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: BROWSER_ANIMATIONS_PROVIDERS,\n    imports: [BrowserModule]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserAnimationsModule, [{\n    type: NgModule,\n    args: [{\n      exports: [BrowserModule],\n      providers: BROWSER_ANIMATIONS_PROVIDERS\n    }]\n  }], null, null);\n})();\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```ts\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideAnimations()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideAnimations() {\n  ɵperformanceMarkFeature('NgEagerAnimations');\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideAnimations` call results in app code.\n  return [...BROWSER_ANIMATIONS_PROVIDERS];\n}\n/**\n * A null player that must be imported to allow disabling of animations.\n * @publicApi\n */\nclass NoopAnimationsModule {\n  static ɵfac = function NoopAnimationsModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NoopAnimationsModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: NoopAnimationsModule,\n    exports: [BrowserModule]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n    imports: [BrowserModule]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NoopAnimationsModule, [{\n    type: NgModule,\n    args: [{\n      exports: [BrowserModule],\n      providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS\n    }]\n  }], null, null);\n})();\n/**\n * Returns the set of dependency-injection providers\n * to disable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function, but you need to disable animations\n * (for example, when running tests).\n *\n * ```ts\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *     provideNoopAnimations()\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nfunction provideNoopAnimations() {\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideNoopAnimations` call results in app code.\n  return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];\n}\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserAnimationsModule, NoopAnimationsModule, provideAnimations, provideNoopAnimations, InjectableAnimationEngine as ɵInjectableAnimationEngine };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵsetRootDomAdapter, DOCUMENT, PlatformLocation, XhrFactory, ɵgetDOM, ɵPLATFORM_SERVER_ID, ViewportScroller, ɵNullViewportScroller } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, Injector, ɵstartMeasuring, ɵstopMeasuring, Injectable, Inject, Optional, APP_ID, TransferState, PLATFORM_ID, PLATFORM_INITIALIZER, ɵALLOW_MULTIPLE_PLATFORMS, Testability, ɵTESTABILITY, NgModule, ɵsetDocument, createPlatformFactory, platformCore, makeEnvironmentProviders, ɵIS_HYDRATION_DOM_REUSE_ENABLED, ɵannotateForHydration, CSP_NONCE, ɵSSR_CONTENT_INTEGRITY_MARKER, Renderer2, ApplicationRef, Version } from '@angular/core';\nimport { ɵBrowserDomAdapter, EventManagerPlugin, EVENT_MANAGER_PLUGINS, BrowserModule } from '@angular/platform-browser';\nimport { NoopAnimationsModule, provideNoopAnimations } from '@angular/platform-browser/animations';\nimport { ɵHTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';\nimport { Subject } from 'rxjs';\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = {\n    exports: {}\n  }).exports, mod), mod.exports;\n};\n\n// external/npm/node_modules/domino/lib/Event.js\nvar require_Event = __commonJS({\n  \"external/npm/node_modules/domino/lib/Event.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Event;\n    Event.CAPTURING_PHASE = 1;\n    Event.AT_TARGET = 2;\n    Event.BUBBLING_PHASE = 3;\n    function Event(type, dictionary) {\n      this.type = \"\";\n      this.target = null;\n      this.currentTarget = null;\n      this.eventPhase = Event.AT_TARGET;\n      this.bubbles = false;\n      this.cancelable = false;\n      this.isTrusted = false;\n      this.defaultPrevented = false;\n      this.timeStamp = Date.now();\n      this._propagationStopped = false;\n      this._immediatePropagationStopped = false;\n      this._initialized = true;\n      this._dispatching = false;\n      if (type) this.type = type;\n      if (dictionary) {\n        for (var p in dictionary) {\n          this[p] = dictionary[p];\n        }\n      }\n    }\n    Event.prototype = Object.create(Object.prototype, {\n      constructor: {\n        value: Event\n      },\n      stopPropagation: {\n        value: function stopPropagation() {\n          this._propagationStopped = true;\n        }\n      },\n      stopImmediatePropagation: {\n        value: function stopImmediatePropagation() {\n          this._propagationStopped = true;\n          this._immediatePropagationStopped = true;\n        }\n      },\n      preventDefault: {\n        value: function preventDefault() {\n          if (this.cancelable) this.defaultPrevented = true;\n        }\n      },\n      initEvent: {\n        value: function initEvent(type, bubbles, cancelable) {\n          this._initialized = true;\n          if (this._dispatching) return;\n          this._propagationStopped = false;\n          this._immediatePropagationStopped = false;\n          this.defaultPrevented = false;\n          this.isTrusted = false;\n          this.target = null;\n          this.type = type;\n          this.bubbles = bubbles;\n          this.cancelable = cancelable;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/UIEvent.js\nvar require_UIEvent = __commonJS({\n  \"external/npm/node_modules/domino/lib/UIEvent.js\"(exports, module) {\n    \"use strict\";\n\n    var Event = require_Event();\n    module.exports = UIEvent;\n    function UIEvent() {\n      Event.call(this);\n      this.view = null;\n      this.detail = 0;\n    }\n    UIEvent.prototype = Object.create(Event.prototype, {\n      constructor: {\n        value: UIEvent\n      },\n      initUIEvent: {\n        value: function (type, bubbles, cancelable, view, detail) {\n          this.initEvent(type, bubbles, cancelable);\n          this.view = view;\n          this.detail = detail;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/MouseEvent.js\nvar require_MouseEvent = __commonJS({\n  \"external/npm/node_modules/domino/lib/MouseEvent.js\"(exports, module) {\n    \"use strict\";\n\n    var UIEvent = require_UIEvent();\n    module.exports = MouseEvent;\n    function MouseEvent() {\n      UIEvent.call(this);\n      this.screenX = this.screenY = this.clientX = this.clientY = 0;\n      this.ctrlKey = this.altKey = this.shiftKey = this.metaKey = false;\n      this.button = 0;\n      this.buttons = 1;\n      this.relatedTarget = null;\n    }\n    MouseEvent.prototype = Object.create(UIEvent.prototype, {\n      constructor: {\n        value: MouseEvent\n      },\n      initMouseEvent: {\n        value: function (type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {\n          this.initEvent(type, bubbles, cancelable, view, detail);\n          this.screenX = screenX;\n          this.screenY = screenY;\n          this.clientX = clientX;\n          this.clientY = clientY;\n          this.ctrlKey = ctrlKey;\n          this.altKey = altKey;\n          this.shiftKey = shiftKey;\n          this.metaKey = metaKey;\n          this.button = button;\n          switch (button) {\n            case 0:\n              this.buttons = 1;\n              break;\n            case 1:\n              this.buttons = 4;\n              break;\n            case 2:\n              this.buttons = 2;\n              break;\n            default:\n              this.buttons = 0;\n              break;\n          }\n          this.relatedTarget = relatedTarget;\n        }\n      },\n      getModifierState: {\n        value: function (key) {\n          switch (key) {\n            case \"Alt\":\n              return this.altKey;\n            case \"Control\":\n              return this.ctrlKey;\n            case \"Shift\":\n              return this.shiftKey;\n            case \"Meta\":\n              return this.metaKey;\n            default:\n              return false;\n          }\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/DOMException.js\nvar require_DOMException = __commonJS({\n  \"external/npm/node_modules/domino/lib/DOMException.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = DOMException;\n    var INDEX_SIZE_ERR = 1;\n    var HIERARCHY_REQUEST_ERR = 3;\n    var WRONG_DOCUMENT_ERR = 4;\n    var INVALID_CHARACTER_ERR = 5;\n    var NO_MODIFICATION_ALLOWED_ERR = 7;\n    var NOT_FOUND_ERR = 8;\n    var NOT_SUPPORTED_ERR = 9;\n    var INVALID_STATE_ERR = 11;\n    var SYNTAX_ERR = 12;\n    var INVALID_MODIFICATION_ERR = 13;\n    var NAMESPACE_ERR = 14;\n    var INVALID_ACCESS_ERR = 15;\n    var TYPE_MISMATCH_ERR = 17;\n    var SECURITY_ERR = 18;\n    var NETWORK_ERR = 19;\n    var ABORT_ERR = 20;\n    var URL_MISMATCH_ERR = 21;\n    var QUOTA_EXCEEDED_ERR = 22;\n    var TIMEOUT_ERR = 23;\n    var INVALID_NODE_TYPE_ERR = 24;\n    var DATA_CLONE_ERR = 25;\n    var names = [null, \"INDEX_SIZE_ERR\", null, \"HIERARCHY_REQUEST_ERR\", \"WRONG_DOCUMENT_ERR\", \"INVALID_CHARACTER_ERR\", null, \"NO_MODIFICATION_ALLOWED_ERR\", \"NOT_FOUND_ERR\", \"NOT_SUPPORTED_ERR\", \"INUSE_ATTRIBUTE_ERR\", \"INVALID_STATE_ERR\", \"SYNTAX_ERR\", \"INVALID_MODIFICATION_ERR\", \"NAMESPACE_ERR\", \"INVALID_ACCESS_ERR\", null, \"TYPE_MISMATCH_ERR\", \"SECURITY_ERR\", \"NETWORK_ERR\", \"ABORT_ERR\", \"URL_MISMATCH_ERR\", \"QUOTA_EXCEEDED_ERR\", \"TIMEOUT_ERR\", \"INVALID_NODE_TYPE_ERR\", \"DATA_CLONE_ERR\"];\n    var messages = [null, \"INDEX_SIZE_ERR (1): the index is not in the allowed range\", null, \"HIERARCHY_REQUEST_ERR (3): the operation would yield an incorrect nodes model\", \"WRONG_DOCUMENT_ERR (4): the object is in the wrong Document, a call to importNode is required\", \"INVALID_CHARACTER_ERR (5): the string contains invalid characters\", null, \"NO_MODIFICATION_ALLOWED_ERR (7): the object can not be modified\", \"NOT_FOUND_ERR (8): the object can not be found here\", \"NOT_SUPPORTED_ERR (9): this operation is not supported\", \"INUSE_ATTRIBUTE_ERR (10): setAttributeNode called on owned Attribute\", \"INVALID_STATE_ERR (11): the object is in an invalid state\", \"SYNTAX_ERR (12): the string did not match the expected pattern\", \"INVALID_MODIFICATION_ERR (13): the object can not be modified in this way\", \"NAMESPACE_ERR (14): the operation is not allowed by Namespaces in XML\", \"INVALID_ACCESS_ERR (15): the object does not support the operation or argument\", null, \"TYPE_MISMATCH_ERR (17): the type of the object does not match the expected type\", \"SECURITY_ERR (18): the operation is insecure\", \"NETWORK_ERR (19): a network error occurred\", \"ABORT_ERR (20): the user aborted an operation\", \"URL_MISMATCH_ERR (21): the given URL does not match another URL\", \"QUOTA_EXCEEDED_ERR (22): the quota has been exceeded\", \"TIMEOUT_ERR (23): a timeout occurred\", \"INVALID_NODE_TYPE_ERR (24): the supplied node is invalid or has an invalid ancestor for this operation\", \"DATA_CLONE_ERR (25): the object can not be cloned.\"];\n    var constants = {\n      INDEX_SIZE_ERR,\n      DOMSTRING_SIZE_ERR: 2,\n      HIERARCHY_REQUEST_ERR,\n      WRONG_DOCUMENT_ERR,\n      INVALID_CHARACTER_ERR,\n      NO_DATA_ALLOWED_ERR: 6,\n      NO_MODIFICATION_ALLOWED_ERR,\n      NOT_FOUND_ERR,\n      NOT_SUPPORTED_ERR,\n      INUSE_ATTRIBUTE_ERR: 10,\n      INVALID_STATE_ERR,\n      SYNTAX_ERR,\n      INVALID_MODIFICATION_ERR,\n      NAMESPACE_ERR,\n      INVALID_ACCESS_ERR,\n      VALIDATION_ERR: 16,\n      TYPE_MISMATCH_ERR,\n      SECURITY_ERR,\n      NETWORK_ERR,\n      ABORT_ERR,\n      URL_MISMATCH_ERR,\n      QUOTA_EXCEEDED_ERR,\n      TIMEOUT_ERR,\n      INVALID_NODE_TYPE_ERR,\n      DATA_CLONE_ERR\n    };\n    function DOMException(code) {\n      Error.call(this);\n      Error.captureStackTrace(this, this.constructor);\n      this.code = code;\n      this.message = messages[code];\n      this.name = names[code];\n    }\n    DOMException.prototype.__proto__ = Error.prototype;\n    for (c in constants) {\n      v = {\n        value: constants[c]\n      };\n      Object.defineProperty(DOMException, c, v);\n      Object.defineProperty(DOMException.prototype, c, v);\n    }\n    var v;\n    var c;\n  }\n});\n\n// external/npm/node_modules/domino/lib/config.js\nvar require_config = __commonJS({\n  \"external/npm/node_modules/domino/lib/config.js\"(exports) {\n    exports.isApiWritable = !globalThis.__domino_frozen__;\n  }\n});\n\n// external/npm/node_modules/domino/lib/utils.js\nvar require_utils = __commonJS({\n  \"external/npm/node_modules/domino/lib/utils.js\"(exports) {\n    \"use strict\";\n\n    var DOMException = require_DOMException();\n    var ERR = DOMException;\n    var isApiWritable = require_config().isApiWritable;\n    exports.NAMESPACE = {\n      HTML: \"http://www.w3.org/1999/xhtml\",\n      XML: \"http://www.w3.org/XML/1998/namespace\",\n      XMLNS: \"http://www.w3.org/2000/xmlns/\",\n      MATHML: \"http://www.w3.org/1998/Math/MathML\",\n      SVG: \"http://www.w3.org/2000/svg\",\n      XLINK: \"http://www.w3.org/1999/xlink\"\n    };\n    exports.IndexSizeError = function () {\n      throw new DOMException(ERR.INDEX_SIZE_ERR);\n    };\n    exports.HierarchyRequestError = function () {\n      throw new DOMException(ERR.HIERARCHY_REQUEST_ERR);\n    };\n    exports.WrongDocumentError = function () {\n      throw new DOMException(ERR.WRONG_DOCUMENT_ERR);\n    };\n    exports.InvalidCharacterError = function () {\n      throw new DOMException(ERR.INVALID_CHARACTER_ERR);\n    };\n    exports.NoModificationAllowedError = function () {\n      throw new DOMException(ERR.NO_MODIFICATION_ALLOWED_ERR);\n    };\n    exports.NotFoundError = function () {\n      throw new DOMException(ERR.NOT_FOUND_ERR);\n    };\n    exports.NotSupportedError = function () {\n      throw new DOMException(ERR.NOT_SUPPORTED_ERR);\n    };\n    exports.InvalidStateError = function () {\n      throw new DOMException(ERR.INVALID_STATE_ERR);\n    };\n    exports.SyntaxError = function () {\n      throw new DOMException(ERR.SYNTAX_ERR);\n    };\n    exports.InvalidModificationError = function () {\n      throw new DOMException(ERR.INVALID_MODIFICATION_ERR);\n    };\n    exports.NamespaceError = function () {\n      throw new DOMException(ERR.NAMESPACE_ERR);\n    };\n    exports.InvalidAccessError = function () {\n      throw new DOMException(ERR.INVALID_ACCESS_ERR);\n    };\n    exports.TypeMismatchError = function () {\n      throw new DOMException(ERR.TYPE_MISMATCH_ERR);\n    };\n    exports.SecurityError = function () {\n      throw new DOMException(ERR.SECURITY_ERR);\n    };\n    exports.NetworkError = function () {\n      throw new DOMException(ERR.NETWORK_ERR);\n    };\n    exports.AbortError = function () {\n      throw new DOMException(ERR.ABORT_ERR);\n    };\n    exports.UrlMismatchError = function () {\n      throw new DOMException(ERR.URL_MISMATCH_ERR);\n    };\n    exports.QuotaExceededError = function () {\n      throw new DOMException(ERR.QUOTA_EXCEEDED_ERR);\n    };\n    exports.TimeoutError = function () {\n      throw new DOMException(ERR.TIMEOUT_ERR);\n    };\n    exports.InvalidNodeTypeError = function () {\n      throw new DOMException(ERR.INVALID_NODE_TYPE_ERR);\n    };\n    exports.DataCloneError = function () {\n      throw new DOMException(ERR.DATA_CLONE_ERR);\n    };\n    exports.nyi = function () {\n      throw new Error(\"NotYetImplemented\");\n    };\n    exports.shouldOverride = function () {\n      throw new Error(\"Abstract function; should be overriding in subclass.\");\n    };\n    exports.assert = function (expr, msg) {\n      if (!expr) {\n        throw new Error(\"Assertion failed: \" + (msg || \"\") + \"\\n\" + new Error().stack);\n      }\n    };\n    exports.expose = function (src, c) {\n      for (var n in src) {\n        Object.defineProperty(c.prototype, n, {\n          value: src[n],\n          writable: isApiWritable\n        });\n      }\n    };\n    exports.merge = function (a, b) {\n      for (var n in b) {\n        a[n] = b[n];\n      }\n    };\n    exports.documentOrder = function (n, m) {\n      return 3 - (n.compareDocumentPosition(m) & 6);\n    };\n    exports.toASCIILowerCase = function (s) {\n      return s.replace(/[A-Z]+/g, function (c) {\n        return c.toLowerCase();\n      });\n    };\n    exports.toASCIIUpperCase = function (s) {\n      return s.replace(/[a-z]+/g, function (c) {\n        return c.toUpperCase();\n      });\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/EventTarget.js\nvar require_EventTarget = __commonJS({\n  \"external/npm/node_modules/domino/lib/EventTarget.js\"(exports, module) {\n    \"use strict\";\n\n    var Event = require_Event();\n    var MouseEvent = require_MouseEvent();\n    var utils = require_utils();\n    module.exports = EventTarget;\n    function EventTarget() {}\n    EventTarget.prototype = {\n      addEventListener: function addEventListener(type, listener, capture) {\n        if (!listener) return;\n        if (capture === void 0) capture = false;\n        if (!this._listeners) this._listeners = /* @__PURE__ */Object.create(null);\n        if (!this._listeners[type]) this._listeners[type] = [];\n        var list = this._listeners[type];\n        for (var i = 0, n = list.length; i < n; i++) {\n          var l = list[i];\n          if (l.listener === listener && l.capture === capture) return;\n        }\n        var obj = {\n          listener,\n          capture\n        };\n        if (typeof listener === \"function\") obj.f = listener;\n        list.push(obj);\n      },\n      removeEventListener: function removeEventListener(type, listener, capture) {\n        if (capture === void 0) capture = false;\n        if (this._listeners) {\n          var list = this._listeners[type];\n          if (list) {\n            for (var i = 0, n = list.length; i < n; i++) {\n              var l = list[i];\n              if (l.listener === listener && l.capture === capture) {\n                if (list.length === 1) {\n                  this._listeners[type] = void 0;\n                } else {\n                  list.splice(i, 1);\n                }\n                return;\n              }\n            }\n          }\n        }\n      },\n      dispatchEvent: function dispatchEvent(event) {\n        return this._dispatchEvent(event, false);\n      },\n      _dispatchEvent: function _dispatchEvent(event, trusted) {\n        if (typeof trusted !== \"boolean\") trusted = false;\n        function invoke(target, event2) {\n          var type = event2.type,\n            phase = event2.eventPhase;\n          event2.currentTarget = target;\n          if (phase !== Event.CAPTURING_PHASE && target._handlers && target._handlers[type]) {\n            var handler = target._handlers[type];\n            var rv;\n            if (typeof handler === \"function\") {\n              rv = handler.call(event2.currentTarget, event2);\n            } else {\n              var f = handler.handleEvent;\n              if (typeof f !== \"function\") throw new TypeError(\"handleEvent property of event handler object isnot a function.\");\n              rv = f.call(handler, event2);\n            }\n            switch (event2.type) {\n              case \"mouseover\":\n                if (rv === true) event2.preventDefault();\n                break;\n              case \"beforeunload\":\n              default:\n                if (rv === false) event2.preventDefault();\n                break;\n            }\n          }\n          var list = target._listeners && target._listeners[type];\n          if (!list) return;\n          list = list.slice();\n          for (var i2 = 0, n2 = list.length; i2 < n2; i2++) {\n            if (event2._immediatePropagationStopped) return;\n            var l = list[i2];\n            if (phase === Event.CAPTURING_PHASE && !l.capture || phase === Event.BUBBLING_PHASE && l.capture) continue;\n            if (l.f) {\n              l.f.call(event2.currentTarget, event2);\n            } else {\n              var fn = l.listener.handleEvent;\n              if (typeof fn !== \"function\") throw new TypeError(\"handleEvent property of event listener object is not a function.\");\n              fn.call(l.listener, event2);\n            }\n          }\n        }\n        if (!event._initialized || event._dispatching) utils.InvalidStateError();\n        event.isTrusted = trusted;\n        event._dispatching = true;\n        event.target = this;\n        var ancestors = [];\n        for (var n = this.parentNode; n; n = n.parentNode) ancestors.push(n);\n        event.eventPhase = Event.CAPTURING_PHASE;\n        for (var i = ancestors.length - 1; i >= 0; i--) {\n          invoke(ancestors[i], event);\n          if (event._propagationStopped) break;\n        }\n        if (!event._propagationStopped) {\n          event.eventPhase = Event.AT_TARGET;\n          invoke(this, event);\n        }\n        if (event.bubbles && !event._propagationStopped) {\n          event.eventPhase = Event.BUBBLING_PHASE;\n          for (var ii = 0, nn = ancestors.length; ii < nn; ii++) {\n            invoke(ancestors[ii], event);\n            if (event._propagationStopped) break;\n          }\n        }\n        event._dispatching = false;\n        event.eventPhase = Event.AT_TARGET;\n        event.currentTarget = null;\n        if (trusted && !event.defaultPrevented && event instanceof MouseEvent) {\n          switch (event.type) {\n            case \"mousedown\":\n              this._armed = {\n                x: event.clientX,\n                y: event.clientY,\n                t: event.timeStamp\n              };\n              break;\n            case \"mouseout\":\n            case \"mouseover\":\n              this._armed = null;\n              break;\n            case \"mouseup\":\n              if (this._isClick(event)) this._doClick(event);\n              this._armed = null;\n              break;\n          }\n        }\n        return !event.defaultPrevented;\n      },\n      _isClick: function (event) {\n        return this._armed !== null && event.type === \"mouseup\" && event.isTrusted && event.button === 0 && event.timeStamp - this._armed.t < 1e3 && Math.abs(event.clientX - this._armed.x) < 10 && Math.abs(event.clientY - this._armed.Y) < 10;\n      },\n      _doClick: function (event) {\n        if (this._click_in_progress) return;\n        this._click_in_progress = true;\n        var activated = this;\n        while (activated && !activated._post_click_activation_steps) activated = activated.parentNode;\n        if (activated && activated._pre_click_activation_steps) {\n          activated._pre_click_activation_steps();\n        }\n        var click = this.ownerDocument.createEvent(\"MouseEvent\");\n        click.initMouseEvent(\"click\", true, true, this.ownerDocument.defaultView, 1, event.screenX, event.screenY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, null);\n        var result = this._dispatchEvent(click, true);\n        if (activated) {\n          if (result) {\n            if (activated._post_click_activation_steps) activated._post_click_activation_steps(click);\n          } else {\n            if (activated._cancelled_activation_steps) activated._cancelled_activation_steps();\n          }\n        }\n      },\n      _setEventHandler: function _setEventHandler(type, handler) {\n        if (!this._handlers) this._handlers = /* @__PURE__ */Object.create(null);\n        this._handlers[type] = handler;\n      },\n      _getEventHandler: function _getEventHandler(type) {\n        return this._handlers && this._handlers[type] || null;\n      }\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/LinkedList.js\nvar require_LinkedList = __commonJS({\n  \"external/npm/node_modules/domino/lib/LinkedList.js\"(exports, module) {\n    \"use strict\";\n\n    var utils = require_utils();\n    var LinkedList = module.exports = {\n      valid: function (a) {\n        utils.assert(a, \"list falsy\");\n        utils.assert(a._previousSibling, \"previous falsy\");\n        utils.assert(a._nextSibling, \"next falsy\");\n        return true;\n      },\n      insertBefore: function (a, b) {\n        utils.assert(LinkedList.valid(a) && LinkedList.valid(b));\n        var a_first = a,\n          a_last = a._previousSibling;\n        var b_first = b,\n          b_last = b._previousSibling;\n        a_first._previousSibling = b_last;\n        a_last._nextSibling = b_first;\n        b_last._nextSibling = a_first;\n        b_first._previousSibling = a_last;\n        utils.assert(LinkedList.valid(a) && LinkedList.valid(b));\n      },\n      replace: function (a, b) {\n        utils.assert(LinkedList.valid(a) && (b === null || LinkedList.valid(b)));\n        if (b !== null) {\n          LinkedList.insertBefore(b, a);\n        }\n        LinkedList.remove(a);\n        utils.assert(LinkedList.valid(a) && (b === null || LinkedList.valid(b)));\n      },\n      remove: function (a) {\n        utils.assert(LinkedList.valid(a));\n        var prev = a._previousSibling;\n        if (prev === a) {\n          return;\n        }\n        var next = a._nextSibling;\n        prev._nextSibling = next;\n        next._previousSibling = prev;\n        a._previousSibling = a._nextSibling = a;\n        utils.assert(LinkedList.valid(a));\n      }\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeUtils.js\nvar require_NodeUtils = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeUtils.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = {\n      serializeOne,\n      ɵescapeMatchingClosingTag: escapeMatchingClosingTag,\n      ɵescapeClosingCommentTag: escapeClosingCommentTag,\n      ɵescapeProcessingInstructionContent: escapeProcessingInstructionContent\n    };\n    var utils = require_utils();\n    var NAMESPACE = utils.NAMESPACE;\n    var hasRawContent = {\n      STYLE: true,\n      SCRIPT: true,\n      XMP: true,\n      IFRAME: true,\n      NOEMBED: true,\n      NOFRAMES: true,\n      PLAINTEXT: true\n    };\n    var emptyElements = {\n      area: true,\n      base: true,\n      basefont: true,\n      bgsound: true,\n      br: true,\n      col: true,\n      embed: true,\n      frame: true,\n      hr: true,\n      img: true,\n      input: true,\n      keygen: true,\n      link: true,\n      meta: true,\n      param: true,\n      source: true,\n      track: true,\n      wbr: true\n    };\n    var extraNewLine = {};\n    var ESCAPE_REGEXP = /[&<>\\u00A0]/g;\n    var ESCAPE_ATTR_REGEXP = /[&\"<>\\u00A0]/g;\n    function escape(s) {\n      if (!ESCAPE_REGEXP.test(s)) {\n        return s;\n      }\n      return s.replace(ESCAPE_REGEXP, c => {\n        switch (c) {\n          case \"&\":\n            return \"&amp;\";\n          case \"<\":\n            return \"&lt;\";\n          case \">\":\n            return \"&gt;\";\n          case \"\\xA0\":\n            return \"&nbsp;\";\n        }\n      });\n    }\n    function escapeAttr(s) {\n      if (!ESCAPE_ATTR_REGEXP.test(s)) {\n        return s;\n      }\n      return s.replace(ESCAPE_ATTR_REGEXP, c => {\n        switch (c) {\n          case \"<\":\n            return \"&lt;\";\n          case \">\":\n            return \"&gt;\";\n          case \"&\":\n            return \"&amp;\";\n          case '\"':\n            return \"&quot;\";\n          case \"\\xA0\":\n            return \"&nbsp;\";\n        }\n      });\n    }\n    function attrname(a) {\n      var ns = a.namespaceURI;\n      if (!ns) return a.localName;\n      if (ns === NAMESPACE.XML) return \"xml:\" + a.localName;\n      if (ns === NAMESPACE.XLINK) return \"xlink:\" + a.localName;\n      if (ns === NAMESPACE.XMLNS) {\n        if (a.localName === \"xmlns\") return \"xmlns\";else return \"xmlns:\" + a.localName;\n      }\n      return a.name;\n    }\n    function escapeMatchingClosingTag(rawText, parentTag) {\n      const parentClosingTag = \"</\" + parentTag;\n      if (!rawText.toLowerCase().includes(parentClosingTag)) {\n        return rawText;\n      }\n      const result = [...rawText];\n      const matches = rawText.matchAll(new RegExp(parentClosingTag, \"ig\"));\n      for (const match of matches) {\n        result[match.index] = \"&lt;\";\n      }\n      return result.join(\"\");\n    }\n    var CLOSING_COMMENT_REGEXP = /--!?>/;\n    function escapeClosingCommentTag(rawContent) {\n      if (!CLOSING_COMMENT_REGEXP.test(rawContent)) {\n        return rawContent;\n      }\n      return rawContent.replace(/(--\\!?)>/g, \"$1&gt;\");\n    }\n    function escapeProcessingInstructionContent(rawContent) {\n      return rawContent.includes(\">\") ? rawContent.replaceAll(\">\", \"&gt;\") : rawContent;\n    }\n    function serializeOne(kid, parent) {\n      var s = \"\";\n      switch (kid.nodeType) {\n        case 1:\n          var ns = kid.namespaceURI;\n          var html = ns === NAMESPACE.HTML;\n          var tagname = html || ns === NAMESPACE.SVG || ns === NAMESPACE.MATHML ? kid.localName : kid.tagName;\n          s += \"<\" + tagname;\n          for (var j = 0, k = kid._numattrs; j < k; j++) {\n            var a = kid._attr(j);\n            s += \" \" + attrname(a);\n            if (a.value !== void 0) s += '=\"' + escapeAttr(a.value) + '\"';\n          }\n          s += \">\";\n          if (!(html && emptyElements[tagname])) {\n            var ss = kid.serialize();\n            if (hasRawContent[tagname.toUpperCase()]) {\n              ss = escapeMatchingClosingTag(ss, tagname);\n            }\n            if (html && extraNewLine[tagname] && ss.charAt(0) === \"\\n\") s += \"\\n\";\n            s += ss;\n            s += \"</\" + tagname + \">\";\n          }\n          break;\n        case 3:\n        case 4:\n          var parenttag;\n          if (parent.nodeType === 1 && parent.namespaceURI === NAMESPACE.HTML) parenttag = parent.tagName;else parenttag = \"\";\n          if (hasRawContent[parenttag] || parenttag === \"NOSCRIPT\" && parent.ownerDocument._scripting_enabled) {\n            s += kid.data;\n          } else {\n            s += escape(kid.data);\n          }\n          break;\n        case 8:\n          s += \"<!--\" + escapeClosingCommentTag(kid.data) + \"-->\";\n          break;\n        case 7:\n          const content = escapeProcessingInstructionContent(kid.data);\n          s += \"<?\" + kid.target + \" \" + content + \"?>\";\n          break;\n        case 10:\n          s += \"<!DOCTYPE \" + kid.name;\n          if (false) {\n            if (kid.publicID) {\n              s += ' PUBLIC \"' + kid.publicId + '\"';\n            }\n            if (kid.systemId) {\n              s += ' \"' + kid.systemId + '\"';\n            }\n          }\n          s += \">\";\n          break;\n        default:\n          utils.InvalidStateError();\n      }\n      return s;\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/Node.js\nvar require_Node = __commonJS({\n  \"external/npm/node_modules/domino/lib/Node.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Node;\n    var EventTarget = require_EventTarget();\n    var LinkedList = require_LinkedList();\n    var NodeUtils = require_NodeUtils();\n    var utils = require_utils();\n    function Node() {\n      EventTarget.call(this);\n      this.parentNode = null;\n      this._nextSibling = this._previousSibling = this;\n      this._index = void 0;\n    }\n    var ELEMENT_NODE = Node.ELEMENT_NODE = 1;\n    var ATTRIBUTE_NODE = Node.ATTRIBUTE_NODE = 2;\n    var TEXT_NODE = Node.TEXT_NODE = 3;\n    var CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE = 4;\n    var ENTITY_REFERENCE_NODE = Node.ENTITY_REFERENCE_NODE = 5;\n    var ENTITY_NODE = Node.ENTITY_NODE = 6;\n    var PROCESSING_INSTRUCTION_NODE = Node.PROCESSING_INSTRUCTION_NODE = 7;\n    var COMMENT_NODE = Node.COMMENT_NODE = 8;\n    var DOCUMENT_NODE = Node.DOCUMENT_NODE = 9;\n    var DOCUMENT_TYPE_NODE = Node.DOCUMENT_TYPE_NODE = 10;\n    var DOCUMENT_FRAGMENT_NODE = Node.DOCUMENT_FRAGMENT_NODE = 11;\n    var NOTATION_NODE = Node.NOTATION_NODE = 12;\n    var DOCUMENT_POSITION_DISCONNECTED = Node.DOCUMENT_POSITION_DISCONNECTED = 1;\n    var DOCUMENT_POSITION_PRECEDING = Node.DOCUMENT_POSITION_PRECEDING = 2;\n    var DOCUMENT_POSITION_FOLLOWING = Node.DOCUMENT_POSITION_FOLLOWING = 4;\n    var DOCUMENT_POSITION_CONTAINS = Node.DOCUMENT_POSITION_CONTAINS = 8;\n    var DOCUMENT_POSITION_CONTAINED_BY = Node.DOCUMENT_POSITION_CONTAINED_BY = 16;\n    var DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32;\n    Node.prototype = Object.create(EventTarget.prototype, {\n      baseURI: {\n        get: utils.nyi\n      },\n      parentElement: {\n        get: function () {\n          return this.parentNode && this.parentNode.nodeType === ELEMENT_NODE ? this.parentNode : null;\n        }\n      },\n      hasChildNodes: {\n        value: utils.shouldOverride\n      },\n      firstChild: {\n        get: utils.shouldOverride\n      },\n      lastChild: {\n        get: utils.shouldOverride\n      },\n      isConnected: {\n        get: function () {\n          let node = this;\n          while (node != null) {\n            if (node.nodeType === Node.DOCUMENT_NODE) {\n              return true;\n            }\n            node = node.parentNode;\n            if (node != null && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n              node = node.host;\n            }\n          }\n          return false;\n        }\n      },\n      previousSibling: {\n        get: function () {\n          var parent = this.parentNode;\n          if (!parent) return null;\n          if (this === parent.firstChild) return null;\n          return this._previousSibling;\n        }\n      },\n      nextSibling: {\n        get: function () {\n          var parent = this.parentNode,\n            next = this._nextSibling;\n          if (!parent) return null;\n          if (next === parent.firstChild) return null;\n          return next;\n        }\n      },\n      textContent: {\n        get: function () {\n          return null;\n        },\n        set: function (v) {}\n      },\n      innerText: {\n        get: function () {\n          return null;\n        },\n        set: function (v) {}\n      },\n      _countChildrenOfType: {\n        value: function (type) {\n          var sum = 0;\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            if (kid.nodeType === type) sum++;\n          }\n          return sum;\n        }\n      },\n      _ensureInsertValid: {\n        value: function _ensureInsertValid(node, child, isPreinsert) {\n          var parent = this,\n            i,\n            kid;\n          if (!node.nodeType) throw new TypeError(\"not a node\");\n          switch (parent.nodeType) {\n            case DOCUMENT_NODE:\n            case DOCUMENT_FRAGMENT_NODE:\n            case ELEMENT_NODE:\n              break;\n            default:\n              utils.HierarchyRequestError();\n          }\n          if (node.isAncestor(parent)) utils.HierarchyRequestError();\n          if (child !== null || !isPreinsert) {\n            if (child.parentNode !== parent) utils.NotFoundError();\n          }\n          switch (node.nodeType) {\n            case DOCUMENT_FRAGMENT_NODE:\n            case DOCUMENT_TYPE_NODE:\n            case ELEMENT_NODE:\n            case TEXT_NODE:\n            case PROCESSING_INSTRUCTION_NODE:\n            case COMMENT_NODE:\n              break;\n            default:\n              utils.HierarchyRequestError();\n          }\n          if (parent.nodeType === DOCUMENT_NODE) {\n            switch (node.nodeType) {\n              case TEXT_NODE:\n                utils.HierarchyRequestError();\n                break;\n              case DOCUMENT_FRAGMENT_NODE:\n                if (node._countChildrenOfType(TEXT_NODE) > 0) utils.HierarchyRequestError();\n                switch (node._countChildrenOfType(ELEMENT_NODE)) {\n                  case 0:\n                    break;\n                  case 1:\n                    if (child !== null) {\n                      if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                      for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {\n                        if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                      }\n                    }\n                    i = parent._countChildrenOfType(ELEMENT_NODE);\n                    if (isPreinsert) {\n                      if (i > 0) utils.HierarchyRequestError();\n                    } else {\n                      if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();\n                    }\n                    break;\n                  default:\n                    utils.HierarchyRequestError();\n                }\n                break;\n              case ELEMENT_NODE:\n                if (child !== null) {\n                  if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                  for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {\n                    if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                  }\n                }\n                i = parent._countChildrenOfType(ELEMENT_NODE);\n                if (isPreinsert) {\n                  if (i > 0) utils.HierarchyRequestError();\n                } else {\n                  if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();\n                }\n                break;\n              case DOCUMENT_TYPE_NODE:\n                if (child === null) {\n                  if (parent._countChildrenOfType(ELEMENT_NODE)) utils.HierarchyRequestError();\n                } else {\n                  for (kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {\n                    if (kid === child) break;\n                    if (kid.nodeType === ELEMENT_NODE) utils.HierarchyRequestError();\n                  }\n                }\n                i = parent._countChildrenOfType(DOCUMENT_TYPE_NODE);\n                if (isPreinsert) {\n                  if (i > 0) utils.HierarchyRequestError();\n                } else {\n                  if (i > 1 || i === 1 && child.nodeType !== DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                }\n                break;\n            }\n          } else {\n            if (node.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n          }\n        }\n      },\n      insertBefore: {\n        value: function insertBefore(node, child) {\n          var parent = this;\n          parent._ensureInsertValid(node, child, true);\n          var refChild = child;\n          if (refChild === node) {\n            refChild = node.nextSibling;\n          }\n          parent.doc.adoptNode(node);\n          node._insertOrReplace(parent, refChild, false);\n          return node;\n        }\n      },\n      appendChild: {\n        value: function (child) {\n          return this.insertBefore(child, null);\n        }\n      },\n      _appendChild: {\n        value: function (child) {\n          child._insertOrReplace(this, null, false);\n        }\n      },\n      removeChild: {\n        value: function removeChild(child) {\n          var parent = this;\n          if (!child.nodeType) throw new TypeError(\"not a node\");\n          if (child.parentNode !== parent) utils.NotFoundError();\n          child.remove();\n          return child;\n        }\n      },\n      replaceChild: {\n        value: function replaceChild(node, child) {\n          var parent = this;\n          parent._ensureInsertValid(node, child, false);\n          if (node.doc !== parent.doc) {\n            parent.doc.adoptNode(node);\n          }\n          node._insertOrReplace(parent, child, true);\n          return child;\n        }\n      },\n      contains: {\n        value: function contains(node) {\n          if (node === null) {\n            return false;\n          }\n          if (this === node) {\n            return true;\n          }\n          return (this.compareDocumentPosition(node) & DOCUMENT_POSITION_CONTAINED_BY) !== 0;\n        }\n      },\n      compareDocumentPosition: {\n        value: function compareDocumentPosition(that) {\n          if (this === that) return 0;\n          if (this.doc !== that.doc || this.rooted !== that.rooted) return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n          var these = [],\n            those = [];\n          for (var n = this; n !== null; n = n.parentNode) these.push(n);\n          for (n = that; n !== null; n = n.parentNode) those.push(n);\n          these.reverse();\n          those.reverse();\n          if (these[0] !== those[0]) return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n          n = Math.min(these.length, those.length);\n          for (var i = 1; i < n; i++) {\n            if (these[i] !== those[i]) {\n              if (these[i].index < those[i].index) return DOCUMENT_POSITION_FOLLOWING;else return DOCUMENT_POSITION_PRECEDING;\n            }\n          }\n          if (these.length < those.length) return DOCUMENT_POSITION_FOLLOWING + DOCUMENT_POSITION_CONTAINED_BY;else return DOCUMENT_POSITION_PRECEDING + DOCUMENT_POSITION_CONTAINS;\n        }\n      },\n      isSameNode: {\n        value: function isSameNode(node) {\n          return this === node;\n        }\n      },\n      isEqualNode: {\n        value: function isEqualNode(node) {\n          if (!node) return false;\n          if (node.nodeType !== this.nodeType) return false;\n          if (!this.isEqual(node)) return false;\n          for (var c1 = this.firstChild, c2 = node.firstChild; c1 && c2; c1 = c1.nextSibling, c2 = c2.nextSibling) {\n            if (!c1.isEqualNode(c2)) return false;\n          }\n          return c1 === null && c2 === null;\n        }\n      },\n      cloneNode: {\n        value: function (deep) {\n          var clone = this.clone();\n          if (deep) {\n            for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n              clone._appendChild(kid.cloneNode(true));\n            }\n          }\n          return clone;\n        }\n      },\n      lookupPrefix: {\n        value: function lookupPrefix(ns) {\n          var e;\n          if (ns === \"\" || ns === null || ns === void 0) return null;\n          switch (this.nodeType) {\n            case ELEMENT_NODE:\n              return this._lookupNamespacePrefix(ns, this);\n            case DOCUMENT_NODE:\n              e = this.documentElement;\n              return e ? e.lookupPrefix(ns) : null;\n            case ENTITY_NODE:\n            case NOTATION_NODE:\n            case DOCUMENT_FRAGMENT_NODE:\n            case DOCUMENT_TYPE_NODE:\n              return null;\n            case ATTRIBUTE_NODE:\n              e = this.ownerElement;\n              return e ? e.lookupPrefix(ns) : null;\n            default:\n              e = this.parentElement;\n              return e ? e.lookupPrefix(ns) : null;\n          }\n        }\n      },\n      lookupNamespaceURI: {\n        value: function lookupNamespaceURI(prefix) {\n          if (prefix === \"\" || prefix === void 0) {\n            prefix = null;\n          }\n          var e;\n          switch (this.nodeType) {\n            case ELEMENT_NODE:\n              return utils.shouldOverride();\n            case DOCUMENT_NODE:\n              e = this.documentElement;\n              return e ? e.lookupNamespaceURI(prefix) : null;\n            case ENTITY_NODE:\n            case NOTATION_NODE:\n            case DOCUMENT_TYPE_NODE:\n            case DOCUMENT_FRAGMENT_NODE:\n              return null;\n            case ATTRIBUTE_NODE:\n              e = this.ownerElement;\n              return e ? e.lookupNamespaceURI(prefix) : null;\n            default:\n              e = this.parentElement;\n              return e ? e.lookupNamespaceURI(prefix) : null;\n          }\n        }\n      },\n      isDefaultNamespace: {\n        value: function isDefaultNamespace(ns) {\n          if (ns === \"\" || ns === void 0) {\n            ns = null;\n          }\n          var defaultNamespace = this.lookupNamespaceURI(null);\n          return defaultNamespace === ns;\n        }\n      },\n      index: {\n        get: function () {\n          var parent = this.parentNode;\n          if (this === parent.firstChild) return 0;\n          var kids = parent.childNodes;\n          if (this._index === void 0 || kids[this._index] !== this) {\n            for (var i = 0; i < kids.length; i++) {\n              kids[i]._index = i;\n            }\n            utils.assert(kids[this._index] === this);\n          }\n          return this._index;\n        }\n      },\n      isAncestor: {\n        value: function (that) {\n          if (this.doc !== that.doc) return false;\n          if (this.rooted !== that.rooted) return false;\n          for (var e = that; e; e = e.parentNode) {\n            if (e === this) return true;\n          }\n          return false;\n        }\n      },\n      ensureSameDoc: {\n        value: function (that) {\n          if (that.ownerDocument === null) {\n            that.ownerDocument = this.doc;\n          } else if (that.ownerDocument !== this.doc) {\n            utils.WrongDocumentError();\n          }\n        }\n      },\n      removeChildren: {\n        value: utils.shouldOverride\n      },\n      _insertOrReplace: {\n        value: function _insertOrReplace(parent, before, isReplace) {\n          var child = this,\n            before_index,\n            i;\n          if (child.nodeType === DOCUMENT_FRAGMENT_NODE && child.rooted) {\n            utils.HierarchyRequestError();\n          }\n          if (parent._childNodes) {\n            before_index = before === null ? parent._childNodes.length : before.index;\n            if (child.parentNode === parent) {\n              var child_index = child.index;\n              if (child_index < before_index) {\n                before_index--;\n              }\n            }\n          }\n          if (isReplace) {\n            if (before.rooted) before.doc.mutateRemove(before);\n            before.parentNode = null;\n          }\n          var n = before;\n          if (n === null) {\n            n = parent.firstChild;\n          }\n          var bothRooted = child.rooted && parent.rooted;\n          if (child.nodeType === DOCUMENT_FRAGMENT_NODE) {\n            var spliceArgs = [0, isReplace ? 1 : 0],\n              next;\n            for (var kid = child.firstChild; kid !== null; kid = next) {\n              next = kid.nextSibling;\n              spliceArgs.push(kid);\n              kid.parentNode = parent;\n            }\n            var len = spliceArgs.length;\n            if (isReplace) {\n              LinkedList.replace(n, len > 2 ? spliceArgs[2] : null);\n            } else if (len > 2 && n !== null) {\n              LinkedList.insertBefore(spliceArgs[2], n);\n            }\n            if (parent._childNodes) {\n              spliceArgs[0] = before === null ? parent._childNodes.length : before._index;\n              parent._childNodes.splice.apply(parent._childNodes, spliceArgs);\n              for (i = 2; i < len; i++) {\n                spliceArgs[i]._index = spliceArgs[0] + (i - 2);\n              }\n            } else if (parent._firstChild === before) {\n              if (len > 2) {\n                parent._firstChild = spliceArgs[2];\n              } else if (isReplace) {\n                parent._firstChild = null;\n              }\n            }\n            if (child._childNodes) {\n              child._childNodes.length = 0;\n            } else {\n              child._firstChild = null;\n            }\n            if (parent.rooted) {\n              parent.modify();\n              for (i = 2; i < len; i++) {\n                parent.doc.mutateInsert(spliceArgs[i]);\n              }\n            }\n          } else {\n            if (before === child) {\n              return;\n            }\n            if (bothRooted) {\n              child._remove();\n            } else if (child.parentNode) {\n              child.remove();\n            }\n            child.parentNode = parent;\n            if (isReplace) {\n              LinkedList.replace(n, child);\n              if (parent._childNodes) {\n                child._index = before_index;\n                parent._childNodes[before_index] = child;\n              } else if (parent._firstChild === before) {\n                parent._firstChild = child;\n              }\n            } else {\n              if (n !== null) {\n                LinkedList.insertBefore(child, n);\n              }\n              if (parent._childNodes) {\n                child._index = before_index;\n                parent._childNodes.splice(before_index, 0, child);\n              } else if (parent._firstChild === before) {\n                parent._firstChild = child;\n              }\n            }\n            if (bothRooted) {\n              parent.modify();\n              parent.doc.mutateMove(child);\n            } else if (parent.rooted) {\n              parent.modify();\n              parent.doc.mutateInsert(child);\n            }\n          }\n        }\n      },\n      lastModTime: {\n        get: function () {\n          if (!this._lastModTime) {\n            this._lastModTime = this.doc.modclock;\n          }\n          return this._lastModTime;\n        }\n      },\n      modify: {\n        value: function () {\n          if (this.doc.modclock) {\n            var time = ++this.doc.modclock;\n            for (var n = this; n; n = n.parentElement) {\n              if (n._lastModTime) {\n                n._lastModTime = time;\n              }\n            }\n          }\n        }\n      },\n      doc: {\n        get: function () {\n          return this.ownerDocument || this;\n        }\n      },\n      rooted: {\n        get: function () {\n          return !!this._nid;\n        }\n      },\n      normalize: {\n        value: function () {\n          var next;\n          for (var child = this.firstChild; child !== null; child = next) {\n            next = child.nextSibling;\n            if (child.normalize) {\n              child.normalize();\n            }\n            if (child.nodeType !== Node.TEXT_NODE) {\n              continue;\n            }\n            if (child.nodeValue === \"\") {\n              this.removeChild(child);\n              continue;\n            }\n            var prevChild = child.previousSibling;\n            if (prevChild === null) {\n              continue;\n            } else if (prevChild.nodeType === Node.TEXT_NODE) {\n              prevChild.appendData(child.nodeValue);\n              this.removeChild(child);\n            }\n          }\n        }\n      },\n      serialize: {\n        value: function () {\n          if (this._innerHTML) {\n            return this._innerHTML;\n          }\n          var s = \"\";\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            s += NodeUtils.serializeOne(kid, this);\n          }\n          return s;\n        }\n      },\n      outerHTML: {\n        get: function () {\n          return NodeUtils.serializeOne(this, {\n            nodeType: 0\n          });\n        },\n        set: utils.nyi\n      },\n      ELEMENT_NODE: {\n        value: ELEMENT_NODE\n      },\n      ATTRIBUTE_NODE: {\n        value: ATTRIBUTE_NODE\n      },\n      TEXT_NODE: {\n        value: TEXT_NODE\n      },\n      CDATA_SECTION_NODE: {\n        value: CDATA_SECTION_NODE\n      },\n      ENTITY_REFERENCE_NODE: {\n        value: ENTITY_REFERENCE_NODE\n      },\n      ENTITY_NODE: {\n        value: ENTITY_NODE\n      },\n      PROCESSING_INSTRUCTION_NODE: {\n        value: PROCESSING_INSTRUCTION_NODE\n      },\n      COMMENT_NODE: {\n        value: COMMENT_NODE\n      },\n      DOCUMENT_NODE: {\n        value: DOCUMENT_NODE\n      },\n      DOCUMENT_TYPE_NODE: {\n        value: DOCUMENT_TYPE_NODE\n      },\n      DOCUMENT_FRAGMENT_NODE: {\n        value: DOCUMENT_FRAGMENT_NODE\n      },\n      NOTATION_NODE: {\n        value: NOTATION_NODE\n      },\n      DOCUMENT_POSITION_DISCONNECTED: {\n        value: DOCUMENT_POSITION_DISCONNECTED\n      },\n      DOCUMENT_POSITION_PRECEDING: {\n        value: DOCUMENT_POSITION_PRECEDING\n      },\n      DOCUMENT_POSITION_FOLLOWING: {\n        value: DOCUMENT_POSITION_FOLLOWING\n      },\n      DOCUMENT_POSITION_CONTAINS: {\n        value: DOCUMENT_POSITION_CONTAINS\n      },\n      DOCUMENT_POSITION_CONTAINED_BY: {\n        value: DOCUMENT_POSITION_CONTAINED_BY\n      },\n      DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: {\n        value: DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeList.es6.js\nvar require_NodeList_es6 = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeList.es6.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = class NodeList extends Array {\n      constructor(a) {\n        super(a && a.length || 0);\n        if (a) {\n          for (var idx in a) {\n            this[idx] = a[idx];\n          }\n        }\n      }\n      item(i) {\n        return this[i] || null;\n      }\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeList.es5.js\nvar require_NodeList_es5 = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeList.es5.js\"(exports, module) {\n    \"use strict\";\n\n    function item(i) {\n      return this[i] || null;\n    }\n    function NodeList(a) {\n      if (!a) a = [];\n      a.item = item;\n      return a;\n    }\n    module.exports = NodeList;\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeList.js\nvar require_NodeList = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeList.js\"(exports, module) {\n    \"use strict\";\n\n    var NodeList;\n    try {\n      NodeList = require_NodeList_es6();\n    } catch (e) {\n      NodeList = require_NodeList_es5();\n    }\n    module.exports = NodeList;\n  }\n});\n\n// external/npm/node_modules/domino/lib/ContainerNode.js\nvar require_ContainerNode = __commonJS({\n  \"external/npm/node_modules/domino/lib/ContainerNode.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = ContainerNode;\n    var Node = require_Node();\n    var NodeList = require_NodeList();\n    function ContainerNode() {\n      Node.call(this);\n      this._firstChild = this._childNodes = null;\n    }\n    ContainerNode.prototype = Object.create(Node.prototype, {\n      hasChildNodes: {\n        value: function () {\n          if (this._childNodes) {\n            return this._childNodes.length > 0;\n          }\n          return this._firstChild !== null;\n        }\n      },\n      childNodes: {\n        get: function () {\n          this._ensureChildNodes();\n          return this._childNodes;\n        }\n      },\n      firstChild: {\n        get: function () {\n          if (this._childNodes) {\n            return this._childNodes.length === 0 ? null : this._childNodes[0];\n          }\n          return this._firstChild;\n        }\n      },\n      lastChild: {\n        get: function () {\n          var kids = this._childNodes,\n            first;\n          if (kids) {\n            return kids.length === 0 ? null : kids[kids.length - 1];\n          }\n          first = this._firstChild;\n          if (first === null) {\n            return null;\n          }\n          return first._previousSibling;\n        }\n      },\n      _ensureChildNodes: {\n        value: function () {\n          if (this._childNodes) {\n            return;\n          }\n          var first = this._firstChild,\n            kid = first,\n            childNodes = this._childNodes = new NodeList();\n          if (first) do {\n            childNodes.push(kid);\n            kid = kid._nextSibling;\n          } while (kid !== first);\n          this._firstChild = null;\n        }\n      },\n      removeChildren: {\n        value: function removeChildren() {\n          var root = this.rooted ? this.ownerDocument : null,\n            next = this.firstChild,\n            kid;\n          while (next !== null) {\n            kid = next;\n            next = kid.nextSibling;\n            if (root) root.mutateRemove(kid);\n            kid.parentNode = null;\n          }\n          if (this._childNodes) {\n            this._childNodes.length = 0;\n          } else {\n            this._firstChild = null;\n          }\n          this.modify();\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/xmlnames.js\nvar require_xmlnames = __commonJS({\n  \"external/npm/node_modules/domino/lib/xmlnames.js\"(exports) {\n    \"use strict\";\n\n    exports.isValidName = isValidName;\n    exports.isValidQName = isValidQName;\n    var simplename = /^[_:A-Za-z][-.:\\w]+$/;\n    var simpleqname = /^([_A-Za-z][-.\\w]+|[_A-Za-z][-.\\w]+:[_A-Za-z][-.\\w]+)$/;\n    var ncnamestartchars = \"_A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\";\n    var ncnamechars = \"-._A-Za-z0-9\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\";\n    var ncname = \"[\" + ncnamestartchars + \"][\" + ncnamechars + \"]*\";\n    var namestartchars = ncnamestartchars + \":\";\n    var namechars = ncnamechars + \":\";\n    var name = new RegExp(\"^[\" + namestartchars + \"][\" + namechars + \"]*$\");\n    var qname = new RegExp(\"^(\" + ncname + \"|\" + ncname + \":\" + ncname + \")$\");\n    var hassurrogates = /[\\uD800-\\uDB7F\\uDC00-\\uDFFF]/;\n    var surrogatechars = /[\\uD800-\\uDB7F\\uDC00-\\uDFFF]/g;\n    var surrogatepairs = /[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/g;\n    ncnamestartchars += \"\\uD800-\\u{EFC00}-\\uDFFF\";\n    ncnamechars += \"\\uD800-\\u{EFC00}-\\uDFFF\";\n    ncname = \"[\" + ncnamestartchars + \"][\" + ncnamechars + \"]*\";\n    namestartchars = ncnamestartchars + \":\";\n    namechars = ncnamechars + \":\";\n    var surrogatename = new RegExp(\"^[\" + namestartchars + \"][\" + namechars + \"]*$\");\n    var surrogateqname = new RegExp(\"^(\" + ncname + \"|\" + ncname + \":\" + ncname + \")$\");\n    function isValidName(s) {\n      if (simplename.test(s)) return true;\n      if (name.test(s)) return true;\n      if (!hassurrogates.test(s)) return false;\n      if (!surrogatename.test(s)) return false;\n      var chars = s.match(surrogatechars),\n        pairs = s.match(surrogatepairs);\n      return pairs !== null && 2 * pairs.length === chars.length;\n    }\n    function isValidQName(s) {\n      if (simpleqname.test(s)) return true;\n      if (qname.test(s)) return true;\n      if (!hassurrogates.test(s)) return false;\n      if (!surrogateqname.test(s)) return false;\n      var chars = s.match(surrogatechars),\n        pairs = s.match(surrogatepairs);\n      return pairs !== null && 2 * pairs.length === chars.length;\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/attributes.js\nvar require_attributes = __commonJS({\n  \"external/npm/node_modules/domino/lib/attributes.js\"(exports) {\n    \"use strict\";\n\n    var utils = require_utils();\n    exports.property = function (attr) {\n      if (Array.isArray(attr.type)) {\n        var valid = /* @__PURE__ */Object.create(null);\n        attr.type.forEach(function (val) {\n          valid[val.value || val] = val.alias || val;\n        });\n        var missingValueDefault = attr.missing;\n        if (missingValueDefault === void 0) {\n          missingValueDefault = null;\n        }\n        var invalidValueDefault = attr.invalid;\n        if (invalidValueDefault === void 0) {\n          invalidValueDefault = missingValueDefault;\n        }\n        return {\n          get: function () {\n            var v = this._getattr(attr.name);\n            if (v === null) return missingValueDefault;\n            v = valid[v.toLowerCase()];\n            if (v !== void 0) return v;\n            if (invalidValueDefault !== null) return invalidValueDefault;\n            return v;\n          },\n          set: function (v) {\n            this._setattr(attr.name, v);\n          }\n        };\n      } else if (attr.type === Boolean) {\n        return {\n          get: function () {\n            return this.hasAttribute(attr.name);\n          },\n          set: function (v) {\n            if (v) {\n              this._setattr(attr.name, \"\");\n            } else {\n              this.removeAttribute(attr.name);\n            }\n          }\n        };\n      } else if (attr.type === Number || attr.type === \"long\" || attr.type === \"unsigned long\" || attr.type === \"limited unsigned long with fallback\") {\n        return numberPropDesc(attr);\n      } else if (!attr.type || attr.type === String) {\n        return {\n          get: function () {\n            return this._getattr(attr.name) || \"\";\n          },\n          set: function (v) {\n            if (attr.treatNullAsEmptyString && v === null) {\n              v = \"\";\n            }\n            this._setattr(attr.name, v);\n          }\n        };\n      } else if (typeof attr.type === \"function\") {\n        return attr.type(attr.name, attr);\n      }\n      throw new Error(\"Invalid attribute definition\");\n    };\n    function numberPropDesc(a) {\n      var def;\n      if (typeof a.default === \"function\") {\n        def = a.default;\n      } else if (typeof a.default === \"number\") {\n        def = function () {\n          return a.default;\n        };\n      } else {\n        def = function () {\n          utils.assert(false, typeof a.default);\n        };\n      }\n      var unsigned_long = a.type === \"unsigned long\";\n      var signed_long = a.type === \"long\";\n      var unsigned_fallback = a.type === \"limited unsigned long with fallback\";\n      var min = a.min,\n        max = a.max,\n        setmin = a.setmin;\n      if (min === void 0) {\n        if (unsigned_long) min = 0;\n        if (signed_long) min = -2147483648;\n        if (unsigned_fallback) min = 1;\n      }\n      if (max === void 0) {\n        if (unsigned_long || signed_long || unsigned_fallback) max = 2147483647;\n      }\n      return {\n        get: function () {\n          var v = this._getattr(a.name);\n          var n = a.float ? parseFloat(v) : parseInt(v, 10);\n          if (v === null || !isFinite(n) || min !== void 0 && n < min || max !== void 0 && n > max) {\n            return def.call(this);\n          }\n          if (unsigned_long || signed_long || unsigned_fallback) {\n            if (!/^[ \\t\\n\\f\\r]*[-+]?[0-9]/.test(v)) {\n              return def.call(this);\n            }\n            n = n | 0;\n          }\n          return n;\n        },\n        set: function (v) {\n          if (!a.float) {\n            v = Math.floor(v);\n          }\n          if (setmin !== void 0 && v < setmin) {\n            utils.IndexSizeError(a.name + \" set to \" + v);\n          }\n          if (unsigned_long) {\n            v = v < 0 || v > 2147483647 ? def.call(this) : v | 0;\n          } else if (unsigned_fallback) {\n            v = v < 1 || v > 2147483647 ? def.call(this) : v | 0;\n          } else if (signed_long) {\n            v = v < -2147483648 || v > 2147483647 ? def.call(this) : v | 0;\n          }\n          this._setattr(a.name, String(v));\n        }\n      };\n    }\n    exports.registerChangeHandler = function (c, name, handler) {\n      var p = c.prototype;\n      if (!Object.prototype.hasOwnProperty.call(p, \"_attributeChangeHandlers\")) {\n        p._attributeChangeHandlers = Object.create(p._attributeChangeHandlers || null);\n      }\n      p._attributeChangeHandlers[name] = handler;\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/FilteredElementList.js\nvar require_FilteredElementList = __commonJS({\n  \"external/npm/node_modules/domino/lib/FilteredElementList.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = FilteredElementList;\n    var Node = require_Node();\n    function FilteredElementList(root, filter) {\n      this.root = root;\n      this.filter = filter;\n      this.lastModTime = root.lastModTime;\n      this.done = false;\n      this.cache = [];\n      this.traverse();\n    }\n    FilteredElementList.prototype = Object.create(Object.prototype, {\n      length: {\n        get: function () {\n          this.checkcache();\n          if (!this.done) this.traverse();\n          return this.cache.length;\n        }\n      },\n      item: {\n        value: function (n) {\n          this.checkcache();\n          if (!this.done && n >= this.cache.length) {\n            this.traverse();\n          }\n          return this.cache[n];\n        }\n      },\n      checkcache: {\n        value: function () {\n          if (this.lastModTime !== this.root.lastModTime) {\n            for (var i = this.cache.length - 1; i >= 0; i--) {\n              this[i] = void 0;\n            }\n            this.cache.length = 0;\n            this.done = false;\n            this.lastModTime = this.root.lastModTime;\n          }\n        }\n      },\n      traverse: {\n        value: function (n) {\n          if (n !== void 0) n++;\n          var elt;\n          while ((elt = this.next()) !== null) {\n            this[this.cache.length] = elt;\n            this.cache.push(elt);\n            if (n && this.cache.length === n) return;\n          }\n          this.done = true;\n        }\n      },\n      next: {\n        value: function () {\n          var start = this.cache.length === 0 ? this.root : this.cache[this.cache.length - 1];\n          var elt;\n          if (start.nodeType === Node.DOCUMENT_NODE) elt = start.documentElement;else elt = start.nextElement(this.root);\n          while (elt) {\n            if (this.filter(elt)) {\n              return elt;\n            }\n            elt = elt.nextElement(this.root);\n          }\n          return null;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/DOMTokenList.js\nvar require_DOMTokenList = __commonJS({\n  \"external/npm/node_modules/domino/lib/DOMTokenList.js\"(exports, module) {\n    \"use strict\";\n\n    var utils = require_utils();\n    module.exports = DOMTokenList;\n    function DOMTokenList(getter, setter) {\n      this._getString = getter;\n      this._setString = setter;\n      this._length = 0;\n      this._lastStringValue = \"\";\n      this._update();\n    }\n    Object.defineProperties(DOMTokenList.prototype, {\n      length: {\n        get: function () {\n          return this._length;\n        }\n      },\n      item: {\n        value: function (index) {\n          var list = getList(this);\n          if (index < 0 || index >= list.length) {\n            return null;\n          }\n          return list[index];\n        }\n      },\n      contains: {\n        value: function (token) {\n          token = String(token);\n          var list = getList(this);\n          return list.indexOf(token) > -1;\n        }\n      },\n      add: {\n        value: function () {\n          var list = getList(this);\n          for (var i = 0, len = arguments.length; i < len; i++) {\n            var token = handleErrors(arguments[i]);\n            if (list.indexOf(token) < 0) {\n              list.push(token);\n            }\n          }\n          this._update(list);\n        }\n      },\n      remove: {\n        value: function () {\n          var list = getList(this);\n          for (var i = 0, len = arguments.length; i < len; i++) {\n            var token = handleErrors(arguments[i]);\n            var index = list.indexOf(token);\n            if (index > -1) {\n              list.splice(index, 1);\n            }\n          }\n          this._update(list);\n        }\n      },\n      toggle: {\n        value: function toggle(token, force) {\n          token = handleErrors(token);\n          if (this.contains(token)) {\n            if (force === void 0 || force === false) {\n              this.remove(token);\n              return false;\n            }\n            return true;\n          } else {\n            if (force === void 0 || force === true) {\n              this.add(token);\n              return true;\n            }\n            return false;\n          }\n        }\n      },\n      replace: {\n        value: function replace(token, newToken) {\n          if (String(newToken) === \"\") {\n            utils.SyntaxError();\n          }\n          token = handleErrors(token);\n          newToken = handleErrors(newToken);\n          var list = getList(this);\n          var idx = list.indexOf(token);\n          if (idx < 0) {\n            return false;\n          }\n          var idx2 = list.indexOf(newToken);\n          if (idx2 < 0) {\n            list[idx] = newToken;\n          } else {\n            if (idx < idx2) {\n              list[idx] = newToken;\n              list.splice(idx2, 1);\n            } else {\n              list.splice(idx, 1);\n            }\n          }\n          this._update(list);\n          return true;\n        }\n      },\n      toString: {\n        value: function () {\n          return this._getString();\n        }\n      },\n      value: {\n        get: function () {\n          return this._getString();\n        },\n        set: function (v) {\n          this._setString(v);\n          this._update();\n        }\n      },\n      _update: {\n        value: function (list) {\n          if (list) {\n            fixIndex(this, list);\n            this._setString(list.join(\" \").trim());\n          } else {\n            fixIndex(this, getList(this));\n          }\n          this._lastStringValue = this._getString();\n        }\n      }\n    });\n    function fixIndex(clist, list) {\n      var oldLength = clist._length;\n      var i;\n      clist._length = list.length;\n      for (i = 0; i < list.length; i++) {\n        clist[i] = list[i];\n      }\n      for (; i < oldLength; i++) {\n        clist[i] = void 0;\n      }\n    }\n    function handleErrors(token) {\n      token = String(token);\n      if (token === \"\") {\n        utils.SyntaxError();\n      }\n      if (/[ \\t\\r\\n\\f]/.test(token)) {\n        utils.InvalidCharacterError();\n      }\n      return token;\n    }\n    function toArray(clist) {\n      var length = clist._length;\n      var arr = Array(length);\n      for (var i = 0; i < length; i++) {\n        arr[i] = clist[i];\n      }\n      return arr;\n    }\n    function getList(clist) {\n      var strProp = clist._getString();\n      if (strProp === clist._lastStringValue) {\n        return toArray(clist);\n      }\n      var str = strProp.replace(/(^[ \\t\\r\\n\\f]+)|([ \\t\\r\\n\\f]+$)/g, \"\");\n      if (str === \"\") {\n        return [];\n      } else {\n        var seen = /* @__PURE__ */Object.create(null);\n        return str.split(/[ \\t\\r\\n\\f]+/g).filter(function (n) {\n          var key = \"$\" + n;\n          if (seen[key]) {\n            return false;\n          }\n          seen[key] = true;\n          return true;\n        });\n      }\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/select.js\nvar require_select = __commonJS({\n  \"external/npm/node_modules/domino/lib/select.js\"(exports, module) {\n    \"use strict\";\n\n    var window = Object.create(null, {\n      location: {\n        get: function () {\n          throw new Error(\"window.location is not supported.\");\n        }\n      }\n    });\n    var compareDocumentPosition = function (a, b) {\n      return a.compareDocumentPosition(b);\n    };\n    var order = function (a, b) {\n      return compareDocumentPosition(a, b) & 2 ? 1 : -1;\n    };\n    var next = function (el) {\n      while ((el = el.nextSibling) && el.nodeType !== 1);\n      return el;\n    };\n    var prev = function (el) {\n      while ((el = el.previousSibling) && el.nodeType !== 1);\n      return el;\n    };\n    var child = function (el) {\n      if (el = el.firstChild) {\n        while (el.nodeType !== 1 && (el = el.nextSibling));\n      }\n      return el;\n    };\n    var lastChild = function (el) {\n      if (el = el.lastChild) {\n        while (el.nodeType !== 1 && (el = el.previousSibling));\n      }\n      return el;\n    };\n    var parentIsElement = function (n) {\n      if (!n.parentNode) {\n        return false;\n      }\n      var nodeType = n.parentNode.nodeType;\n      return nodeType === 1 || nodeType === 9;\n    };\n    var unquote = function (str) {\n      if (!str) return str;\n      var ch = str[0];\n      if (ch === '\"' || ch === \"'\") {\n        if (str[str.length - 1] === ch) {\n          str = str.slice(1, -1);\n        } else {\n          str = str.slice(1);\n        }\n        return str.replace(rules.str_escape, function (s) {\n          var m = /^\\\\(?:([0-9A-Fa-f]+)|([\\r\\n\\f]+))/.exec(s);\n          if (!m) {\n            return s.slice(1);\n          }\n          if (m[2]) {\n            return \"\";\n          }\n          var cp = parseInt(m[1], 16);\n          return String.fromCodePoint ? String.fromCodePoint(cp) : String.fromCharCode(cp);\n        });\n      } else if (rules.ident.test(str)) {\n        return decodeid(str);\n      } else {\n        return str;\n      }\n    };\n    var decodeid = function (str) {\n      return str.replace(rules.escape, function (s) {\n        var m = /^\\\\([0-9A-Fa-f]+)/.exec(s);\n        if (!m) {\n          return s[1];\n        }\n        var cp = parseInt(m[1], 16);\n        return String.fromCodePoint ? String.fromCodePoint(cp) : String.fromCharCode(cp);\n      });\n    };\n    var indexOf = function () {\n      if (Array.prototype.indexOf) {\n        return Array.prototype.indexOf;\n      }\n      return function (obj, item) {\n        var i = this.length;\n        while (i--) {\n          if (this[i] === item) return i;\n        }\n        return -1;\n      };\n    }();\n    var makeInside = function (start, end) {\n      var regex = rules.inside.source.replace(/</g, start).replace(/>/g, end);\n      return new RegExp(regex);\n    };\n    var replace = function (regex, name, val) {\n      regex = regex.source;\n      regex = regex.replace(name, val.source || val);\n      return new RegExp(regex);\n    };\n    var truncateUrl = function (url, num) {\n      return url.replace(/^(?:\\w+:\\/\\/|\\/+)/, \"\").replace(/(?:\\/+|\\/*#.*?)$/, \"\").split(\"/\", num).join(\"/\");\n    };\n    var parseNth = function (param_, test) {\n      var param = param_.replace(/\\s+/g, \"\"),\n        cap;\n      if (param === \"even\") {\n        param = \"2n+0\";\n      } else if (param === \"odd\") {\n        param = \"2n+1\";\n      } else if (param.indexOf(\"n\") === -1) {\n        param = \"0n\" + param;\n      }\n      cap = /^([+-])?(\\d+)?n([+-])?(\\d+)?$/.exec(param);\n      return {\n        group: cap[1] === \"-\" ? -(cap[2] || 1) : +(cap[2] || 1),\n        offset: cap[4] ? cap[3] === \"-\" ? -cap[4] : +cap[4] : 0\n      };\n    };\n    var nth = function (param_, test, last) {\n      var param = parseNth(param_),\n        group = param.group,\n        offset = param.offset,\n        find2 = !last ? child : lastChild,\n        advance = !last ? next : prev;\n      return function (el) {\n        if (!parentIsElement(el)) return;\n        var rel = find2(el.parentNode),\n          pos = 0;\n        while (rel) {\n          if (test(rel, el)) pos++;\n          if (rel === el) {\n            pos -= offset;\n            return group && pos ? pos % group === 0 && pos < 0 === group < 0 : !pos;\n          }\n          rel = advance(rel);\n        }\n      };\n    };\n    var selectors = {\n      \"*\": function () {\n        if (false) {\n          return function (el) {\n            if (el.nodeType === 1) return true;\n          };\n        }\n        return function () {\n          return true;\n        };\n      }(),\n      \"type\": function (type) {\n        type = type.toLowerCase();\n        return function (el) {\n          return el.nodeName.toLowerCase() === type;\n        };\n      },\n      \"attr\": function (key, op, val, i) {\n        op = operators[op];\n        return function (el) {\n          var attr;\n          switch (key) {\n            case \"for\":\n              attr = el.htmlFor;\n              break;\n            case \"class\":\n              attr = el.className;\n              if (attr === \"\" && el.getAttribute(\"class\") == null) {\n                attr = null;\n              }\n              break;\n            case \"href\":\n            case \"src\":\n              attr = el.getAttribute(key, 2);\n              break;\n            case \"title\":\n              attr = el.getAttribute(\"title\") || null;\n              break;\n            case \"id\":\n            case \"lang\":\n            case \"dir\":\n            case \"accessKey\":\n            case \"hidden\":\n            case \"tabIndex\":\n            case \"style\":\n              if (el.getAttribute) {\n                attr = el.getAttribute(key);\n                break;\n              }\n            default:\n              if (el.hasAttribute && !el.hasAttribute(key)) {\n                break;\n              }\n              attr = el[key] != null ? el[key] : el.getAttribute && el.getAttribute(key);\n              break;\n          }\n          if (attr == null) return;\n          attr = attr + \"\";\n          if (i) {\n            attr = attr.toLowerCase();\n            val = val.toLowerCase();\n          }\n          return op(attr, val);\n        };\n      },\n      \":first-child\": function (el) {\n        return !prev(el) && parentIsElement(el);\n      },\n      \":last-child\": function (el) {\n        return !next(el) && parentIsElement(el);\n      },\n      \":only-child\": function (el) {\n        return !prev(el) && !next(el) && parentIsElement(el);\n      },\n      \":nth-child\": function (param, last) {\n        return nth(param, function () {\n          return true;\n        }, last);\n      },\n      \":nth-last-child\": function (param) {\n        return selectors[\":nth-child\"](param, true);\n      },\n      \":root\": function (el) {\n        return el.ownerDocument.documentElement === el;\n      },\n      \":empty\": function (el) {\n        return !el.firstChild;\n      },\n      \":not\": function (sel) {\n        var test = compileGroup(sel);\n        return function (el) {\n          return !test(el);\n        };\n      },\n      \":first-of-type\": function (el) {\n        if (!parentIsElement(el)) return;\n        var type = el.nodeName;\n        while (el = prev(el)) {\n          if (el.nodeName === type) return;\n        }\n        return true;\n      },\n      \":last-of-type\": function (el) {\n        if (!parentIsElement(el)) return;\n        var type = el.nodeName;\n        while (el = next(el)) {\n          if (el.nodeName === type) return;\n        }\n        return true;\n      },\n      \":only-of-type\": function (el) {\n        return selectors[\":first-of-type\"](el) && selectors[\":last-of-type\"](el);\n      },\n      \":nth-of-type\": function (param, last) {\n        return nth(param, function (rel, el) {\n          return rel.nodeName === el.nodeName;\n        }, last);\n      },\n      \":nth-last-of-type\": function (param) {\n        return selectors[\":nth-of-type\"](param, true);\n      },\n      \":checked\": function (el) {\n        return !!(el.checked || el.selected);\n      },\n      \":indeterminate\": function (el) {\n        return !selectors[\":checked\"](el);\n      },\n      \":enabled\": function (el) {\n        return !el.disabled && el.type !== \"hidden\";\n      },\n      \":disabled\": function (el) {\n        return !!el.disabled;\n      },\n      \":target\": function (el) {\n        return el.id === window.location.hash.substring(1);\n      },\n      \":focus\": function (el) {\n        return el === el.ownerDocument.activeElement;\n      },\n      \":is\": function (sel) {\n        return compileGroup(sel);\n      },\n      \":matches\": function (sel) {\n        return selectors[\":is\"](sel);\n      },\n      \":nth-match\": function (param, last) {\n        var args = param.split(/\\s*,\\s*/),\n          arg = args.shift(),\n          test = compileGroup(args.join(\",\"));\n        return nth(arg, test, last);\n      },\n      \":nth-last-match\": function (param) {\n        return selectors[\":nth-match\"](param, true);\n      },\n      \":links-here\": function (el) {\n        return el + \"\" === window.location + \"\";\n      },\n      \":lang\": function (param) {\n        return function (el) {\n          while (el) {\n            if (el.lang) return el.lang.indexOf(param) === 0;\n            el = el.parentNode;\n          }\n        };\n      },\n      \":dir\": function (param) {\n        return function (el) {\n          while (el) {\n            if (el.dir) return el.dir === param;\n            el = el.parentNode;\n          }\n        };\n      },\n      \":scope\": function (el, con) {\n        var context = con || el.ownerDocument;\n        if (context.nodeType === 9) {\n          return el === context.documentElement;\n        }\n        return el === context;\n      },\n      \":any-link\": function (el) {\n        return typeof el.href === \"string\";\n      },\n      \":local-link\": function (el) {\n        if (el.nodeName) {\n          return el.href && el.host === window.location.host;\n        }\n        var param = +el + 1;\n        return function (el2) {\n          if (!el2.href) return;\n          var url = window.location + \"\",\n            href = el2 + \"\";\n          return truncateUrl(url, param) === truncateUrl(href, param);\n        };\n      },\n      \":default\": function (el) {\n        return !!el.defaultSelected;\n      },\n      \":valid\": function (el) {\n        return el.willValidate || el.validity && el.validity.valid;\n      },\n      \":invalid\": function (el) {\n        return !selectors[\":valid\"](el);\n      },\n      \":in-range\": function (el) {\n        return el.value > el.min && el.value <= el.max;\n      },\n      \":out-of-range\": function (el) {\n        return !selectors[\":in-range\"](el);\n      },\n      \":required\": function (el) {\n        return !!el.required;\n      },\n      \":optional\": function (el) {\n        return !el.required;\n      },\n      \":read-only\": function (el) {\n        if (el.readOnly) return true;\n        var attr = el.getAttribute(\"contenteditable\"),\n          prop = el.contentEditable,\n          name = el.nodeName.toLowerCase();\n        name = name !== \"input\" && name !== \"textarea\";\n        return (name || el.disabled) && attr == null && prop !== \"true\";\n      },\n      \":read-write\": function (el) {\n        return !selectors[\":read-only\"](el);\n      },\n      \":hover\": function () {\n        throw new Error(\":hover is not supported.\");\n      },\n      \":active\": function () {\n        throw new Error(\":active is not supported.\");\n      },\n      \":link\": function () {\n        throw new Error(\":link is not supported.\");\n      },\n      \":visited\": function () {\n        throw new Error(\":visited is not supported.\");\n      },\n      \":column\": function () {\n        throw new Error(\":column is not supported.\");\n      },\n      \":nth-column\": function () {\n        throw new Error(\":nth-column is not supported.\");\n      },\n      \":nth-last-column\": function () {\n        throw new Error(\":nth-last-column is not supported.\");\n      },\n      \":current\": function () {\n        throw new Error(\":current is not supported.\");\n      },\n      \":past\": function () {\n        throw new Error(\":past is not supported.\");\n      },\n      \":future\": function () {\n        throw new Error(\":future is not supported.\");\n      },\n      \":contains\": function (param) {\n        return function (el) {\n          var text = el.innerText || el.textContent || el.value || \"\";\n          return text.indexOf(param) !== -1;\n        };\n      },\n      \":has\": function (param) {\n        return function (el) {\n          return find(param, el).length > 0;\n        };\n      }\n    };\n    var operators = {\n      \"-\": function () {\n        return true;\n      },\n      \"=\": function (attr, val) {\n        return attr === val;\n      },\n      \"*=\": function (attr, val) {\n        return attr.indexOf(val) !== -1;\n      },\n      \"~=\": function (attr, val) {\n        var i, s, f, l;\n        for (s = 0; true; s = i + 1) {\n          i = attr.indexOf(val, s);\n          if (i === -1) return false;\n          f = attr[i - 1];\n          l = attr[i + val.length];\n          if ((!f || f === \" \") && (!l || l === \" \")) return true;\n        }\n      },\n      \"|=\": function (attr, val) {\n        var i = attr.indexOf(val),\n          l;\n        if (i !== 0) return;\n        l = attr[i + val.length];\n        return l === \"-\" || !l;\n      },\n      \"^=\": function (attr, val) {\n        return attr.indexOf(val) === 0;\n      },\n      \"$=\": function (attr, val) {\n        var i = attr.lastIndexOf(val);\n        return i !== -1 && i + val.length === attr.length;\n      },\n      \"!=\": function (attr, val) {\n        return attr !== val;\n      }\n    };\n    var combinators = {\n      \" \": function (test) {\n        return function (el) {\n          while (el = el.parentNode) {\n            if (test(el)) return el;\n          }\n        };\n      },\n      \">\": function (test) {\n        return function (el) {\n          if (el = el.parentNode) {\n            return test(el) && el;\n          }\n        };\n      },\n      \"+\": function (test) {\n        return function (el) {\n          if (el = prev(el)) {\n            return test(el) && el;\n          }\n        };\n      },\n      \"~\": function (test) {\n        return function (el) {\n          while (el = prev(el)) {\n            if (test(el)) return el;\n          }\n        };\n      },\n      \"noop\": function (test) {\n        return function (el) {\n          return test(el) && el;\n        };\n      },\n      \"ref\": function (test, name) {\n        var node;\n        function ref(el) {\n          var doc = el.ownerDocument,\n            nodes = doc.getElementsByTagName(\"*\"),\n            i = nodes.length;\n          while (i--) {\n            node = nodes[i];\n            if (ref.test(el)) {\n              node = null;\n              return true;\n            }\n          }\n          node = null;\n        }\n        ref.combinator = function (el) {\n          if (!node || !node.getAttribute) return;\n          var attr = node.getAttribute(name) || \"\";\n          if (attr[0] === \"#\") attr = attr.substring(1);\n          if (attr === el.id && test(node)) {\n            return node;\n          }\n        };\n        return ref;\n      }\n    };\n    var rules = {\n      escape: /\\\\(?:[^0-9A-Fa-f\\r\\n]|[0-9A-Fa-f]{1,6}[\\r\\n\\t ]?)/g,\n      str_escape: /(escape)|\\\\(\\n|\\r\\n?|\\f)/g,\n      nonascii: /[\\u00A0-\\uFFFF]/,\n      cssid: /(?:(?!-?[0-9])(?:escape|nonascii|[-_a-zA-Z0-9])+)/,\n      qname: /^ *(cssid|\\*)/,\n      simple: /^(?:([.#]cssid)|pseudo|attr)/,\n      ref: /^ *\\/(cssid)\\/ */,\n      combinator: /^(?: +([^ \\w*.#\\\\]) +|( )+|([^ \\w*.#\\\\]))(?! *$)/,\n      attr: /^\\[(cssid)(?:([^\\w]?=)(inside))?\\]/,\n      pseudo: /^(:cssid)(?:\\((inside)\\))?/,\n      inside: /(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|<[^\"'>]*>|\\\\[\"'>]|[^\"'>])*/,\n      ident: /^(cssid)$/\n    };\n    rules.cssid = replace(rules.cssid, \"nonascii\", rules.nonascii);\n    rules.cssid = replace(rules.cssid, \"escape\", rules.escape);\n    rules.qname = replace(rules.qname, \"cssid\", rules.cssid);\n    rules.simple = replace(rules.simple, \"cssid\", rules.cssid);\n    rules.ref = replace(rules.ref, \"cssid\", rules.cssid);\n    rules.attr = replace(rules.attr, \"cssid\", rules.cssid);\n    rules.pseudo = replace(rules.pseudo, \"cssid\", rules.cssid);\n    rules.inside = replace(rules.inside, `[^\"'>]*`, rules.inside);\n    rules.attr = replace(rules.attr, \"inside\", makeInside(\"\\\\[\", \"\\\\]\"));\n    rules.pseudo = replace(rules.pseudo, \"inside\", makeInside(\"\\\\(\", \"\\\\)\"));\n    rules.simple = replace(rules.simple, \"pseudo\", rules.pseudo);\n    rules.simple = replace(rules.simple, \"attr\", rules.attr);\n    rules.ident = replace(rules.ident, \"cssid\", rules.cssid);\n    rules.str_escape = replace(rules.str_escape, \"escape\", rules.escape);\n    var compile = function (sel_) {\n      var sel = sel_.replace(/^\\s+|\\s+$/g, \"\"),\n        test,\n        filter = [],\n        buff = [],\n        subject,\n        qname,\n        cap,\n        op,\n        ref;\n      while (sel) {\n        if (cap = rules.qname.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          qname = decodeid(cap[1]);\n          buff.push(tok(qname, true));\n        } else if (cap = rules.simple.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          qname = \"*\";\n          buff.push(tok(qname, true));\n          buff.push(tok(cap));\n        } else {\n          throw new SyntaxError(\"Invalid selector.\");\n        }\n        while (cap = rules.simple.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          buff.push(tok(cap));\n        }\n        if (sel[0] === \"!\") {\n          sel = sel.substring(1);\n          subject = makeSubject();\n          subject.qname = qname;\n          buff.push(subject.simple);\n        }\n        if (cap = rules.ref.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          ref = combinators.ref(makeSimple(buff), decodeid(cap[1]));\n          filter.push(ref.combinator);\n          buff = [];\n          continue;\n        }\n        if (cap = rules.combinator.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          op = cap[1] || cap[2] || cap[3];\n          if (op === \",\") {\n            filter.push(combinators.noop(makeSimple(buff)));\n            break;\n          }\n        } else {\n          op = \"noop\";\n        }\n        if (!combinators[op]) {\n          throw new SyntaxError(\"Bad combinator.\");\n        }\n        filter.push(combinators[op](makeSimple(buff)));\n        buff = [];\n      }\n      test = makeTest(filter);\n      test.qname = qname;\n      test.sel = sel;\n      if (subject) {\n        subject.lname = test.qname;\n        subject.test = test;\n        subject.qname = subject.qname;\n        subject.sel = test.sel;\n        test = subject;\n      }\n      if (ref) {\n        ref.test = test;\n        ref.qname = test.qname;\n        ref.sel = test.sel;\n        test = ref;\n      }\n      return test;\n    };\n    var tok = function (cap, qname) {\n      if (qname) {\n        return cap === \"*\" ? selectors[\"*\"] : selectors.type(cap);\n      }\n      if (cap[1]) {\n        return cap[1][0] === \".\" ? selectors.attr(\"class\", \"~=\", decodeid(cap[1].substring(1)), false) : selectors.attr(\"id\", \"=\", decodeid(cap[1].substring(1)), false);\n      }\n      if (cap[2]) {\n        return cap[3] ? selectors[decodeid(cap[2])](unquote(cap[3])) : selectors[decodeid(cap[2])];\n      }\n      if (cap[4]) {\n        var value = cap[6];\n        var i = /[\"'\\s]\\s*I$/i.test(value);\n        if (i) {\n          value = value.replace(/\\s*I$/i, \"\");\n        }\n        return selectors.attr(decodeid(cap[4]), cap[5] || \"-\", unquote(value), i);\n      }\n      throw new SyntaxError(\"Unknown Selector.\");\n    };\n    var makeSimple = function (func) {\n      var l = func.length,\n        i;\n      if (l < 2) return func[0];\n      return function (el) {\n        if (!el) return;\n        for (i = 0; i < l; i++) {\n          if (!func[i](el)) return;\n        }\n        return true;\n      };\n    };\n    var makeTest = function (func) {\n      if (func.length < 2) {\n        return function (el) {\n          return !!func[0](el);\n        };\n      }\n      return function (el) {\n        var i = func.length;\n        while (i--) {\n          if (!(el = func[i](el))) return;\n        }\n        return true;\n      };\n    };\n    var makeSubject = function () {\n      var target;\n      function subject(el) {\n        var node = el.ownerDocument,\n          scope = node.getElementsByTagName(subject.lname),\n          i = scope.length;\n        while (i--) {\n          if (subject.test(scope[i]) && target === el) {\n            target = null;\n            return true;\n          }\n        }\n        target = null;\n      }\n      subject.simple = function (el) {\n        target = el;\n        return true;\n      };\n      return subject;\n    };\n    var compileGroup = function (sel) {\n      var test = compile(sel),\n        tests = [test];\n      while (test.sel) {\n        test = compile(test.sel);\n        tests.push(test);\n      }\n      if (tests.length < 2) return test;\n      return function (el) {\n        var l = tests.length,\n          i = 0;\n        for (; i < l; i++) {\n          if (tests[i](el)) return true;\n        }\n      };\n    };\n    var find = function (sel, node) {\n      var results = [],\n        test = compile(sel),\n        scope = node.getElementsByTagName(test.qname),\n        i = 0,\n        el;\n      while (el = scope[i++]) {\n        if (test(el)) results.push(el);\n      }\n      if (test.sel) {\n        while (test.sel) {\n          test = compile(test.sel);\n          scope = node.getElementsByTagName(test.qname);\n          i = 0;\n          while (el = scope[i++]) {\n            if (test(el) && indexOf.call(results, el) === -1) {\n              results.push(el);\n            }\n          }\n        }\n        results.sort(order);\n      }\n      return results;\n    };\n    module.exports = exports = function (sel, context) {\n      var id, r;\n      if (context.nodeType !== 11 && sel.indexOf(\" \") === -1) {\n        if (sel[0] === \"#\" && context.rooted && /^#[A-Z_][-A-Z0-9_]*$/i.test(sel)) {\n          if (context.doc._hasMultipleElementsWithId) {\n            id = sel.substring(1);\n            if (!context.doc._hasMultipleElementsWithId(id)) {\n              r = context.doc.getElementById(id);\n              return r ? [r] : [];\n            }\n          }\n        }\n        if (sel[0] === \".\" && /^\\.\\w+$/.test(sel)) {\n          return context.getElementsByClassName(sel.substring(1));\n        }\n        if (/^\\w+$/.test(sel)) {\n          return context.getElementsByTagName(sel);\n        }\n      }\n      return find(sel, context);\n    };\n    exports.selectors = selectors;\n    exports.operators = operators;\n    exports.combinators = combinators;\n    exports.matches = function (el, sel) {\n      var test = {\n        sel\n      };\n      do {\n        test = compile(test.sel);\n        if (test(el)) {\n          return true;\n        }\n      } while (test.sel);\n      return false;\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/ChildNode.js\nvar require_ChildNode = __commonJS({\n  \"external/npm/node_modules/domino/lib/ChildNode.js\"(exports, module) {\n    \"use strict\";\n\n    var Node = require_Node();\n    var LinkedList = require_LinkedList();\n    var createDocumentFragmentFromArguments = function (document, args) {\n      var docFrag = document.createDocumentFragment();\n      for (var i = 0; i < args.length; i++) {\n        var argItem = args[i];\n        var isNode = argItem instanceof Node;\n        docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n      }\n      return docFrag;\n    };\n    var ChildNode = {\n      after: {\n        value: function after() {\n          var argArr = Array.prototype.slice.call(arguments);\n          var parentNode = this.parentNode,\n            nextSibling = this.nextSibling;\n          if (parentNode === null) {\n            return;\n          }\n          while (nextSibling && argArr.some(function (v) {\n            return v === nextSibling;\n          })) nextSibling = nextSibling.nextSibling;\n          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n          parentNode.insertBefore(docFrag, nextSibling);\n        }\n      },\n      before: {\n        value: function before() {\n          var argArr = Array.prototype.slice.call(arguments);\n          var parentNode = this.parentNode,\n            prevSibling = this.previousSibling;\n          if (parentNode === null) {\n            return;\n          }\n          while (prevSibling && argArr.some(function (v) {\n            return v === prevSibling;\n          })) prevSibling = prevSibling.previousSibling;\n          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n          var nextSibling = prevSibling ? prevSibling.nextSibling : parentNode.firstChild;\n          parentNode.insertBefore(docFrag, nextSibling);\n        }\n      },\n      remove: {\n        value: function remove() {\n          if (this.parentNode === null) return;\n          if (this.doc) {\n            this.doc._preremoveNodeIterators(this);\n            if (this.rooted) {\n              this.doc.mutateRemove(this);\n            }\n          }\n          this._remove();\n          this.parentNode = null;\n        }\n      },\n      _remove: {\n        value: function _remove() {\n          var parent = this.parentNode;\n          if (parent === null) return;\n          if (parent._childNodes) {\n            parent._childNodes.splice(this.index, 1);\n          } else if (parent._firstChild === this) {\n            if (this._nextSibling === this) {\n              parent._firstChild = null;\n            } else {\n              parent._firstChild = this._nextSibling;\n            }\n          }\n          LinkedList.remove(this);\n          parent.modify();\n        }\n      },\n      replaceWith: {\n        value: function replaceWith() {\n          var argArr = Array.prototype.slice.call(arguments);\n          var parentNode = this.parentNode,\n            nextSibling = this.nextSibling;\n          if (parentNode === null) {\n            return;\n          }\n          while (nextSibling && argArr.some(function (v) {\n            return v === nextSibling;\n          })) nextSibling = nextSibling.nextSibling;\n          var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n          if (this.parentNode === parentNode) {\n            parentNode.replaceChild(docFrag, this);\n          } else {\n            parentNode.insertBefore(docFrag, nextSibling);\n          }\n        }\n      }\n    };\n    module.exports = ChildNode;\n  }\n});\n\n// external/npm/node_modules/domino/lib/NonDocumentTypeChildNode.js\nvar require_NonDocumentTypeChildNode = __commonJS({\n  \"external/npm/node_modules/domino/lib/NonDocumentTypeChildNode.js\"(exports, module) {\n    \"use strict\";\n\n    var Node = require_Node();\n    var NonDocumentTypeChildNode = {\n      nextElementSibling: {\n        get: function () {\n          if (this.parentNode) {\n            for (var kid = this.nextSibling; kid !== null; kid = kid.nextSibling) {\n              if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n            }\n          }\n          return null;\n        }\n      },\n      previousElementSibling: {\n        get: function () {\n          if (this.parentNode) {\n            for (var kid = this.previousSibling; kid !== null; kid = kid.previousSibling) {\n              if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n            }\n          }\n          return null;\n        }\n      }\n    };\n    module.exports = NonDocumentTypeChildNode;\n  }\n});\n\n// external/npm/node_modules/domino/lib/NamedNodeMap.js\nvar require_NamedNodeMap = __commonJS({\n  \"external/npm/node_modules/domino/lib/NamedNodeMap.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = NamedNodeMap;\n    var utils = require_utils();\n    function NamedNodeMap(element) {\n      this.element = element;\n    }\n    Object.defineProperties(NamedNodeMap.prototype, {\n      length: {\n        get: utils.shouldOverride\n      },\n      item: {\n        value: utils.shouldOverride\n      },\n      getNamedItem: {\n        value: function getNamedItem(qualifiedName) {\n          return this.element.getAttributeNode(qualifiedName);\n        }\n      },\n      getNamedItemNS: {\n        value: function getNamedItemNS(namespace, localName) {\n          return this.element.getAttributeNodeNS(namespace, localName);\n        }\n      },\n      setNamedItem: {\n        value: utils.nyi\n      },\n      setNamedItemNS: {\n        value: utils.nyi\n      },\n      removeNamedItem: {\n        value: function removeNamedItem(qualifiedName) {\n          var attr = this.element.getAttributeNode(qualifiedName);\n          if (attr) {\n            this.element.removeAttribute(qualifiedName);\n            return attr;\n          }\n          utils.NotFoundError();\n        }\n      },\n      removeNamedItemNS: {\n        value: function removeNamedItemNS(ns, lname) {\n          var attr = this.element.getAttributeNodeNS(ns, lname);\n          if (attr) {\n            this.element.removeAttributeNS(ns, lname);\n            return attr;\n          }\n          utils.NotFoundError();\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/Element.js\nvar require_Element = __commonJS({\n  \"external/npm/node_modules/domino/lib/Element.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Element;\n    var xml = require_xmlnames();\n    var utils = require_utils();\n    var NAMESPACE = utils.NAMESPACE;\n    var attributes = require_attributes();\n    var Node = require_Node();\n    var NodeList = require_NodeList();\n    var NodeUtils = require_NodeUtils();\n    var FilteredElementList = require_FilteredElementList();\n    var DOMException = require_DOMException();\n    var DOMTokenList = require_DOMTokenList();\n    var select = require_select();\n    var ContainerNode = require_ContainerNode();\n    var ChildNode = require_ChildNode();\n    var NonDocumentTypeChildNode = require_NonDocumentTypeChildNode();\n    var NamedNodeMap = require_NamedNodeMap();\n    var uppercaseCache = /* @__PURE__ */Object.create(null);\n    function Element(doc, localName, namespaceURI, prefix) {\n      ContainerNode.call(this);\n      this.nodeType = Node.ELEMENT_NODE;\n      this.ownerDocument = doc;\n      this.localName = localName;\n      this.namespaceURI = namespaceURI;\n      this.prefix = prefix;\n      this._tagName = void 0;\n      this._attrsByQName = /* @__PURE__ */Object.create(null);\n      this._attrsByLName = /* @__PURE__ */Object.create(null);\n      this._attrKeys = [];\n    }\n    function recursiveGetText(node, a) {\n      if (node.nodeType === Node.TEXT_NODE) {\n        a.push(node._data);\n      } else {\n        for (var i = 0, n = node.childNodes.length; i < n; i++) recursiveGetText(node.childNodes[i], a);\n      }\n    }\n    Element.prototype = Object.create(ContainerNode.prototype, {\n      isHTML: {\n        get: function isHTML() {\n          return this.namespaceURI === NAMESPACE.HTML && this.ownerDocument.isHTML;\n        }\n      },\n      tagName: {\n        get: function tagName() {\n          if (this._tagName === void 0) {\n            var tn;\n            if (this.prefix === null) {\n              tn = this.localName;\n            } else {\n              tn = this.prefix + \":\" + this.localName;\n            }\n            if (this.isHTML) {\n              var up = uppercaseCache[tn];\n              if (!up) {\n                uppercaseCache[tn] = up = utils.toASCIIUpperCase(tn);\n              }\n              tn = up;\n            }\n            this._tagName = tn;\n          }\n          return this._tagName;\n        }\n      },\n      nodeName: {\n        get: function () {\n          return this.tagName;\n        }\n      },\n      nodeValue: {\n        get: function () {\n          return null;\n        },\n        set: function () {}\n      },\n      textContent: {\n        get: function () {\n          var strings = [];\n          recursiveGetText(this, strings);\n          return strings.join(\"\");\n        },\n        set: function (newtext) {\n          this.removeChildren();\n          if (newtext !== null && newtext !== void 0 && newtext !== \"\") {\n            this._appendChild(this.ownerDocument.createTextNode(newtext));\n          }\n        }\n      },\n      innerText: {\n        get: function () {\n          var strings = [];\n          recursiveGetText(this, strings);\n          return strings.join(\"\").replace(/[ \\t\\n\\f\\r]+/g, \" \").trim();\n        },\n        set: function (newtext) {\n          this.removeChildren();\n          if (newtext !== null && newtext !== void 0 && newtext !== \"\") {\n            this._appendChild(this.ownerDocument.createTextNode(newtext));\n          }\n        }\n      },\n      innerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: utils.nyi\n      },\n      outerHTML: {\n        get: function () {\n          return NodeUtils.serializeOne(this, {\n            nodeType: 0\n          });\n        },\n        set: function (v) {\n          var document = this.ownerDocument;\n          var parent = this.parentNode;\n          if (parent === null) {\n            return;\n          }\n          if (parent.nodeType === Node.DOCUMENT_NODE) {\n            utils.NoModificationAllowedError();\n          }\n          if (parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            parent = parent.ownerDocument.createElement(\"body\");\n          }\n          var parser = document.implementation.mozHTMLParser(document._address, parent);\n          parser.parse(v === null ? \"\" : String(v), true);\n          this.replaceWith(parser._asDocumentFragment());\n        }\n      },\n      _insertAdjacent: {\n        value: function _insertAdjacent(position, node) {\n          var first = false;\n          switch (position) {\n            case \"beforebegin\":\n              first = true;\n            case \"afterend\":\n              var parent = this.parentNode;\n              if (parent === null) {\n                return null;\n              }\n              return parent.insertBefore(node, first ? this : this.nextSibling);\n            case \"afterbegin\":\n              first = true;\n            case \"beforeend\":\n              return this.insertBefore(node, first ? this.firstChild : null);\n            default:\n              return utils.SyntaxError();\n          }\n        }\n      },\n      insertAdjacentElement: {\n        value: function insertAdjacentElement(position, element) {\n          if (element.nodeType !== Node.ELEMENT_NODE) {\n            throw new TypeError(\"not an element\");\n          }\n          position = utils.toASCIILowerCase(String(position));\n          return this._insertAdjacent(position, element);\n        }\n      },\n      insertAdjacentText: {\n        value: function insertAdjacentText(position, data) {\n          var textNode = this.ownerDocument.createTextNode(data);\n          position = utils.toASCIILowerCase(String(position));\n          this._insertAdjacent(position, textNode);\n        }\n      },\n      insertAdjacentHTML: {\n        value: function insertAdjacentHTML(position, text) {\n          position = utils.toASCIILowerCase(String(position));\n          text = String(text);\n          var context;\n          switch (position) {\n            case \"beforebegin\":\n            case \"afterend\":\n              context = this.parentNode;\n              if (context === null || context.nodeType === Node.DOCUMENT_NODE) {\n                utils.NoModificationAllowedError();\n              }\n              break;\n            case \"afterbegin\":\n            case \"beforeend\":\n              context = this;\n              break;\n            default:\n              utils.SyntaxError();\n          }\n          if (!(context instanceof Element) || context.ownerDocument.isHTML && context.localName === \"html\" && context.namespaceURI === NAMESPACE.HTML) {\n            context = context.ownerDocument.createElementNS(NAMESPACE.HTML, \"body\");\n          }\n          var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, context);\n          parser.parse(text, true);\n          this._insertAdjacent(position, parser._asDocumentFragment());\n        }\n      },\n      children: {\n        get: function () {\n          if (!this._children) {\n            this._children = new ChildrenCollection(this);\n          }\n          return this._children;\n        }\n      },\n      attributes: {\n        get: function () {\n          if (!this._attributes) {\n            this._attributes = new AttributesArray(this);\n          }\n          return this._attributes;\n        }\n      },\n      firstElementChild: {\n        get: function () {\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n          }\n          return null;\n        }\n      },\n      lastElementChild: {\n        get: function () {\n          for (var kid = this.lastChild; kid !== null; kid = kid.previousSibling) {\n            if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n          }\n          return null;\n        }\n      },\n      childElementCount: {\n        get: function () {\n          return this.children.length;\n        }\n      },\n      nextElement: {\n        value: function (root) {\n          if (!root) root = this.ownerDocument.documentElement;\n          var next = this.firstElementChild;\n          if (!next) {\n            if (this === root) return null;\n            next = this.nextElementSibling;\n          }\n          if (next) return next;\n          for (var parent = this.parentElement; parent && parent !== root; parent = parent.parentElement) {\n            next = parent.nextElementSibling;\n            if (next) return next;\n          }\n          return null;\n        }\n      },\n      getElementsByTagName: {\n        value: function getElementsByTagName(lname) {\n          var filter;\n          if (!lname) return new NodeList();\n          if (lname === \"*\") filter = function () {\n            return true;\n          };else if (this.isHTML) filter = htmlLocalNameElementFilter(lname);else filter = localNameElementFilter(lname);\n          return new FilteredElementList(this, filter);\n        }\n      },\n      getElementsByTagNameNS: {\n        value: function getElementsByTagNameNS(ns, lname) {\n          var filter;\n          if (ns === \"*\" && lname === \"*\") filter = function () {\n            return true;\n          };else if (ns === \"*\") filter = localNameElementFilter(lname);else if (lname === \"*\") filter = namespaceElementFilter(ns);else filter = namespaceLocalNameElementFilter(ns, lname);\n          return new FilteredElementList(this, filter);\n        }\n      },\n      getElementsByClassName: {\n        value: function getElementsByClassName(names) {\n          names = String(names).trim();\n          if (names === \"\") {\n            var result = new NodeList();\n            return result;\n          }\n          names = names.split(/[ \\t\\r\\n\\f]+/);\n          return new FilteredElementList(this, classNamesElementFilter(names));\n        }\n      },\n      getElementsByName: {\n        value: function getElementsByName(name) {\n          return new FilteredElementList(this, elementNameFilter(String(name)));\n        }\n      },\n      clone: {\n        value: function clone() {\n          var e;\n          if (this.namespaceURI !== NAMESPACE.HTML || this.prefix || !this.ownerDocument.isHTML) {\n            e = this.ownerDocument.createElementNS(this.namespaceURI, this.prefix !== null ? this.prefix + \":\" + this.localName : this.localName);\n          } else {\n            e = this.ownerDocument.createElement(this.localName);\n          }\n          for (var i = 0, n = this._attrKeys.length; i < n; i++) {\n            var lname = this._attrKeys[i];\n            var a = this._attrsByLName[lname];\n            var b = a.cloneNode();\n            b._setOwnerElement(e);\n            e._attrsByLName[lname] = b;\n            e._addQName(b);\n          }\n          e._attrKeys = this._attrKeys.concat();\n          return e;\n        }\n      },\n      isEqual: {\n        value: function isEqual(that) {\n          if (this.localName !== that.localName || this.namespaceURI !== that.namespaceURI || this.prefix !== that.prefix || this._numattrs !== that._numattrs) return false;\n          for (var i = 0, n = this._numattrs; i < n; i++) {\n            var a = this._attr(i);\n            if (!that.hasAttributeNS(a.namespaceURI, a.localName)) return false;\n            if (that.getAttributeNS(a.namespaceURI, a.localName) !== a.value) return false;\n          }\n          return true;\n        }\n      },\n      _lookupNamespacePrefix: {\n        value: function _lookupNamespacePrefix(ns, originalElement) {\n          if (this.namespaceURI && this.namespaceURI === ns && this.prefix !== null && originalElement.lookupNamespaceURI(this.prefix) === ns) {\n            return this.prefix;\n          }\n          for (var i = 0, n = this._numattrs; i < n; i++) {\n            var a = this._attr(i);\n            if (a.prefix === \"xmlns\" && a.value === ns && originalElement.lookupNamespaceURI(a.localName) === ns) {\n              return a.localName;\n            }\n          }\n          var parent = this.parentElement;\n          return parent ? parent._lookupNamespacePrefix(ns, originalElement) : null;\n        }\n      },\n      lookupNamespaceURI: {\n        value: function lookupNamespaceURI(prefix) {\n          if (prefix === \"\" || prefix === void 0) {\n            prefix = null;\n          }\n          if (this.namespaceURI !== null && this.prefix === prefix) return this.namespaceURI;\n          for (var i = 0, n = this._numattrs; i < n; i++) {\n            var a = this._attr(i);\n            if (a.namespaceURI === NAMESPACE.XMLNS) {\n              if (a.prefix === \"xmlns\" && a.localName === prefix || prefix === null && a.prefix === null && a.localName === \"xmlns\") {\n                return a.value || null;\n              }\n            }\n          }\n          var parent = this.parentElement;\n          return parent ? parent.lookupNamespaceURI(prefix) : null;\n        }\n      },\n      getAttribute: {\n        value: function getAttribute(qname) {\n          var attr = this.getAttributeNode(qname);\n          return attr ? attr.value : null;\n        }\n      },\n      getAttributeNS: {\n        value: function getAttributeNS(ns, lname) {\n          var attr = this.getAttributeNodeNS(ns, lname);\n          return attr ? attr.value : null;\n        }\n      },\n      getAttributeNode: {\n        value: function getAttributeNode(qname) {\n          qname = String(qname);\n          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n          var attr = this._attrsByQName[qname];\n          if (!attr) return null;\n          if (Array.isArray(attr)) attr = attr[0];\n          return attr;\n        }\n      },\n      getAttributeNodeNS: {\n        value: function getAttributeNodeNS(ns, lname) {\n          ns = ns === void 0 || ns === null ? \"\" : String(ns);\n          lname = String(lname);\n          var attr = this._attrsByLName[ns + \"|\" + lname];\n          return attr ? attr : null;\n        }\n      },\n      hasAttribute: {\n        value: function hasAttribute(qname) {\n          qname = String(qname);\n          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n          return this._attrsByQName[qname] !== void 0;\n        }\n      },\n      hasAttributeNS: {\n        value: function hasAttributeNS(ns, lname) {\n          ns = ns === void 0 || ns === null ? \"\" : String(ns);\n          lname = String(lname);\n          var key = ns + \"|\" + lname;\n          return this._attrsByLName[key] !== void 0;\n        }\n      },\n      hasAttributes: {\n        value: function hasAttributes() {\n          return this._numattrs > 0;\n        }\n      },\n      toggleAttribute: {\n        value: function toggleAttribute(qname, force) {\n          qname = String(qname);\n          if (!xml.isValidName(qname)) utils.InvalidCharacterError();\n          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n          var a = this._attrsByQName[qname];\n          if (a === void 0) {\n            if (force === void 0 || force === true) {\n              this._setAttribute(qname, \"\");\n              return true;\n            }\n            return false;\n          } else {\n            if (force === void 0 || force === false) {\n              this.removeAttribute(qname);\n              return false;\n            }\n            return true;\n          }\n        }\n      },\n      _setAttribute: {\n        value: function _setAttribute(qname, value) {\n          var attr = this._attrsByQName[qname];\n          var isnew;\n          if (!attr) {\n            attr = this._newattr(qname);\n            isnew = true;\n          } else {\n            if (Array.isArray(attr)) attr = attr[0];\n          }\n          attr.value = value;\n          if (this._attributes) this._attributes[qname] = attr;\n          if (isnew && this._newattrhook) this._newattrhook(qname, value);\n        }\n      },\n      setAttribute: {\n        value: function setAttribute(qname, value) {\n          qname = String(qname);\n          if (!xml.isValidName(qname)) utils.InvalidCharacterError();\n          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n          this._setAttribute(qname, String(value));\n        }\n      },\n      _setAttributeNS: {\n        value: function _setAttributeNS(ns, qname, value) {\n          var pos = qname.indexOf(\":\"),\n            prefix,\n            lname;\n          if (pos < 0) {\n            prefix = null;\n            lname = qname;\n          } else {\n            prefix = qname.substring(0, pos);\n            lname = qname.substring(pos + 1);\n          }\n          if (ns === \"\" || ns === void 0) ns = null;\n          var key = (ns === null ? \"\" : ns) + \"|\" + lname;\n          var attr = this._attrsByLName[key];\n          var isnew;\n          if (!attr) {\n            attr = new Attr(this, lname, prefix, ns);\n            isnew = true;\n            this._attrsByLName[key] = attr;\n            if (this._attributes) {\n              this._attributes[this._attrKeys.length] = attr;\n            }\n            this._attrKeys.push(key);\n            this._addQName(attr);\n          } else if (false) {\n            if (attr.prefix !== prefix) {\n              this._removeQName(attr);\n              attr.prefix = prefix;\n              this._addQName(attr);\n            }\n          }\n          attr.value = value;\n          if (isnew && this._newattrhook) this._newattrhook(qname, value);\n        }\n      },\n      setAttributeNS: {\n        value: function setAttributeNS(ns, qname, value) {\n          ns = ns === null || ns === void 0 || ns === \"\" ? null : String(ns);\n          qname = String(qname);\n          if (!xml.isValidQName(qname)) utils.InvalidCharacterError();\n          var pos = qname.indexOf(\":\");\n          var prefix = pos < 0 ? null : qname.substring(0, pos);\n          if (prefix !== null && ns === null || prefix === \"xml\" && ns !== NAMESPACE.XML || (qname === \"xmlns\" || prefix === \"xmlns\") && ns !== NAMESPACE.XMLNS || ns === NAMESPACE.XMLNS && !(qname === \"xmlns\" || prefix === \"xmlns\")) utils.NamespaceError();\n          this._setAttributeNS(ns, qname, String(value));\n        }\n      },\n      setAttributeNode: {\n        value: function setAttributeNode(attr) {\n          if (attr.ownerElement !== null && attr.ownerElement !== this) {\n            throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n          }\n          var result = null;\n          var oldAttrs = this._attrsByQName[attr.name];\n          if (oldAttrs) {\n            if (!Array.isArray(oldAttrs)) {\n              oldAttrs = [oldAttrs];\n            }\n            if (oldAttrs.some(function (a) {\n              return a === attr;\n            })) {\n              return attr;\n            } else if (attr.ownerElement !== null) {\n              throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n            }\n            oldAttrs.forEach(function (a) {\n              this.removeAttributeNode(a);\n            }, this);\n            result = oldAttrs[0];\n          }\n          this.setAttributeNodeNS(attr);\n          return result;\n        }\n      },\n      setAttributeNodeNS: {\n        value: function setAttributeNodeNS(attr) {\n          if (attr.ownerElement !== null) {\n            throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n          }\n          var ns = attr.namespaceURI;\n          var key = (ns === null ? \"\" : ns) + \"|\" + attr.localName;\n          var oldAttr = this._attrsByLName[key];\n          if (oldAttr) {\n            this.removeAttributeNode(oldAttr);\n          }\n          attr._setOwnerElement(this);\n          this._attrsByLName[key] = attr;\n          if (this._attributes) {\n            this._attributes[this._attrKeys.length] = attr;\n          }\n          this._attrKeys.push(key);\n          this._addQName(attr);\n          if (this._newattrhook) this._newattrhook(attr.name, attr.value);\n          return oldAttr || null;\n        }\n      },\n      removeAttribute: {\n        value: function removeAttribute(qname) {\n          qname = String(qname);\n          if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n          var attr = this._attrsByQName[qname];\n          if (!attr) return;\n          if (Array.isArray(attr)) {\n            if (attr.length > 2) {\n              attr = attr.shift();\n            } else {\n              this._attrsByQName[qname] = attr[1];\n              attr = attr[0];\n            }\n          } else {\n            this._attrsByQName[qname] = void 0;\n          }\n          var ns = attr.namespaceURI;\n          var key = (ns === null ? \"\" : ns) + \"|\" + attr.localName;\n          this._attrsByLName[key] = void 0;\n          var i = this._attrKeys.indexOf(key);\n          if (this._attributes) {\n            Array.prototype.splice.call(this._attributes, i, 1);\n            this._attributes[qname] = void 0;\n          }\n          this._attrKeys.splice(i, 1);\n          var onchange = attr.onchange;\n          attr._setOwnerElement(null);\n          if (onchange) {\n            onchange.call(attr, this, attr.localName, attr.value, null);\n          }\n          if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);\n        }\n      },\n      removeAttributeNS: {\n        value: function removeAttributeNS(ns, lname) {\n          ns = ns === void 0 || ns === null ? \"\" : String(ns);\n          lname = String(lname);\n          var key = ns + \"|\" + lname;\n          var attr = this._attrsByLName[key];\n          if (!attr) return;\n          this._attrsByLName[key] = void 0;\n          var i = this._attrKeys.indexOf(key);\n          if (this._attributes) {\n            Array.prototype.splice.call(this._attributes, i, 1);\n          }\n          this._attrKeys.splice(i, 1);\n          this._removeQName(attr);\n          var onchange = attr.onchange;\n          attr._setOwnerElement(null);\n          if (onchange) {\n            onchange.call(attr, this, attr.localName, attr.value, null);\n          }\n          if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);\n        }\n      },\n      removeAttributeNode: {\n        value: function removeAttributeNode(attr) {\n          var ns = attr.namespaceURI;\n          var key = (ns === null ? \"\" : ns) + \"|\" + attr.localName;\n          if (this._attrsByLName[key] !== attr) {\n            utils.NotFoundError();\n          }\n          this.removeAttributeNS(ns, attr.localName);\n          return attr;\n        }\n      },\n      getAttributeNames: {\n        value: function getAttributeNames() {\n          var elt = this;\n          return this._attrKeys.map(function (key) {\n            return elt._attrsByLName[key].name;\n          });\n        }\n      },\n      _getattr: {\n        value: function _getattr(qname) {\n          var attr = this._attrsByQName[qname];\n          return attr ? attr.value : null;\n        }\n      },\n      _setattr: {\n        value: function _setattr(qname, value) {\n          var attr = this._attrsByQName[qname];\n          var isnew;\n          if (!attr) {\n            attr = this._newattr(qname);\n            isnew = true;\n          }\n          attr.value = String(value);\n          if (this._attributes) this._attributes[qname] = attr;\n          if (isnew && this._newattrhook) this._newattrhook(qname, value);\n        }\n      },\n      _newattr: {\n        value: function _newattr(qname) {\n          var attr = new Attr(this, qname, null, null);\n          var key = \"|\" + qname;\n          this._attrsByQName[qname] = attr;\n          this._attrsByLName[key] = attr;\n          if (this._attributes) {\n            this._attributes[this._attrKeys.length] = attr;\n          }\n          this._attrKeys.push(key);\n          return attr;\n        }\n      },\n      _addQName: {\n        value: function (attr) {\n          var qname = attr.name;\n          var existing = this._attrsByQName[qname];\n          if (!existing) {\n            this._attrsByQName[qname] = attr;\n          } else if (Array.isArray(existing)) {\n            existing.push(attr);\n          } else {\n            this._attrsByQName[qname] = [existing, attr];\n          }\n          if (this._attributes) this._attributes[qname] = attr;\n        }\n      },\n      _removeQName: {\n        value: function (attr) {\n          var qname = attr.name;\n          var target = this._attrsByQName[qname];\n          if (Array.isArray(target)) {\n            var idx = target.indexOf(attr);\n            utils.assert(idx !== -1);\n            if (target.length === 2) {\n              this._attrsByQName[qname] = target[1 - idx];\n              if (this._attributes) {\n                this._attributes[qname] = this._attrsByQName[qname];\n              }\n            } else {\n              target.splice(idx, 1);\n              if (this._attributes && this._attributes[qname] === attr) {\n                this._attributes[qname] = target[0];\n              }\n            }\n          } else {\n            utils.assert(target === attr);\n            this._attrsByQName[qname] = void 0;\n            if (this._attributes) {\n              this._attributes[qname] = void 0;\n            }\n          }\n        }\n      },\n      _numattrs: {\n        get: function () {\n          return this._attrKeys.length;\n        }\n      },\n      _attr: {\n        value: function (n) {\n          return this._attrsByLName[this._attrKeys[n]];\n        }\n      },\n      id: attributes.property({\n        name: \"id\"\n      }),\n      className: attributes.property({\n        name: \"class\"\n      }),\n      classList: {\n        get: function () {\n          var self = this;\n          if (this._classList) {\n            return this._classList;\n          }\n          var dtlist = new DOMTokenList(function () {\n            return self.className || \"\";\n          }, function (v) {\n            self.className = v;\n          });\n          this._classList = dtlist;\n          return dtlist;\n        },\n        set: function (v) {\n          this.className = v;\n        }\n      },\n      matches: {\n        value: function (selector) {\n          return select.matches(this, selector);\n        }\n      },\n      closest: {\n        value: function (selector) {\n          var el = this;\n          do {\n            if (el.matches && el.matches(selector)) {\n              return el;\n            }\n            el = el.parentElement || el.parentNode;\n          } while (el !== null && el.nodeType === Node.ELEMENT_NODE);\n          return null;\n        }\n      },\n      querySelector: {\n        value: function (selector) {\n          return select(selector, this)[0];\n        }\n      },\n      querySelectorAll: {\n        value: function (selector) {\n          var nodes = select(selector, this);\n          return nodes.item ? nodes : new NodeList(nodes);\n        }\n      }\n    });\n    Object.defineProperties(Element.prototype, ChildNode);\n    Object.defineProperties(Element.prototype, NonDocumentTypeChildNode);\n    attributes.registerChangeHandler(Element, \"id\", function (element, lname, oldval, newval) {\n      if (element.rooted) {\n        if (oldval) {\n          element.ownerDocument.delId(oldval, element);\n        }\n        if (newval) {\n          element.ownerDocument.addId(newval, element);\n        }\n      }\n    });\n    attributes.registerChangeHandler(Element, \"class\", function (element, lname, oldval, newval) {\n      if (element._classList) {\n        element._classList._update();\n      }\n    });\n    function Attr(elt, lname, prefix, namespace, value) {\n      this.localName = lname;\n      this.prefix = prefix === null || prefix === \"\" ? null : \"\" + prefix;\n      this.namespaceURI = namespace === null || namespace === \"\" ? null : \"\" + namespace;\n      this.data = value;\n      this._setOwnerElement(elt);\n    }\n    Attr.prototype = Object.create(Object.prototype, {\n      ownerElement: {\n        get: function () {\n          return this._ownerElement;\n        }\n      },\n      _setOwnerElement: {\n        value: function _setOwnerElement(elt) {\n          this._ownerElement = elt;\n          if (this.prefix === null && this.namespaceURI === null && elt) {\n            this.onchange = elt._attributeChangeHandlers[this.localName];\n          } else {\n            this.onchange = null;\n          }\n        }\n      },\n      name: {\n        get: function () {\n          return this.prefix ? this.prefix + \":\" + this.localName : this.localName;\n        }\n      },\n      specified: {\n        get: function () {\n          return true;\n        }\n      },\n      value: {\n        get: function () {\n          return this.data;\n        },\n        set: function (value) {\n          var oldval = this.data;\n          value = value === void 0 ? \"\" : value + \"\";\n          if (value === oldval) return;\n          this.data = value;\n          if (this.ownerElement) {\n            if (this.onchange) this.onchange(this.ownerElement, this.localName, oldval, value);\n            if (this.ownerElement.rooted) this.ownerElement.ownerDocument.mutateAttr(this, oldval);\n          }\n        }\n      },\n      cloneNode: {\n        value: function cloneNode(deep) {\n          return new Attr(null, this.localName, this.prefix, this.namespaceURI, this.data);\n        }\n      },\n      nodeType: {\n        get: function () {\n          return Node.ATTRIBUTE_NODE;\n        }\n      },\n      nodeName: {\n        get: function () {\n          return this.name;\n        }\n      },\n      nodeValue: {\n        get: function () {\n          return this.value;\n        },\n        set: function (v) {\n          this.value = v;\n        }\n      },\n      textContent: {\n        get: function () {\n          return this.value;\n        },\n        set: function (v) {\n          if (v === null || v === void 0) {\n            v = \"\";\n          }\n          this.value = v;\n        }\n      },\n      innerText: {\n        get: function () {\n          return this.value;\n        },\n        set: function (v) {\n          if (v === null || v === void 0) {\n            v = \"\";\n          }\n          this.value = v;\n        }\n      }\n    });\n    Element._Attr = Attr;\n    function AttributesArray(elt) {\n      NamedNodeMap.call(this, elt);\n      for (var name in elt._attrsByQName) {\n        this[name] = elt._attrsByQName[name];\n      }\n      for (var i = 0; i < elt._attrKeys.length; i++) {\n        this[i] = elt._attrsByLName[elt._attrKeys[i]];\n      }\n    }\n    AttributesArray.prototype = Object.create(NamedNodeMap.prototype, {\n      length: {\n        get: function () {\n          return this.element._attrKeys.length;\n        },\n        set: function () {}\n      },\n      item: {\n        value: function (n) {\n          n = n >>> 0;\n          if (n >= this.length) {\n            return null;\n          }\n          return this.element._attrsByLName[this.element._attrKeys[n]];\n        }\n      }\n    });\n    var _a;\n    if ((_a = globalThis.Symbol) == null ? void 0 : _a.iterator) {\n      AttributesArray.prototype[globalThis.Symbol.iterator] = function () {\n        var i = 0,\n          n = this.length,\n          self = this;\n        return {\n          next: function () {\n            if (i < n) return {\n              value: self.item(i++)\n            };\n            return {\n              done: true\n            };\n          }\n        };\n      };\n    }\n    function ChildrenCollection(e) {\n      this.element = e;\n      this.updateCache();\n    }\n    ChildrenCollection.prototype = Object.create(Object.prototype, {\n      length: {\n        get: function () {\n          this.updateCache();\n          return this.childrenByNumber.length;\n        }\n      },\n      item: {\n        value: function item(n) {\n          this.updateCache();\n          return this.childrenByNumber[n] || null;\n        }\n      },\n      namedItem: {\n        value: function namedItem(name) {\n          this.updateCache();\n          return this.childrenByName[name] || null;\n        }\n      },\n      namedItems: {\n        get: function () {\n          this.updateCache();\n          return this.childrenByName;\n        }\n      },\n      updateCache: {\n        value: function updateCache() {\n          var namedElts = /^(a|applet|area|embed|form|frame|frameset|iframe|img|object)$/;\n          if (this.lastModTime !== this.element.lastModTime) {\n            this.lastModTime = this.element.lastModTime;\n            var n = this.childrenByNumber && this.childrenByNumber.length || 0;\n            for (var i = 0; i < n; i++) {\n              this[i] = void 0;\n            }\n            this.childrenByNumber = [];\n            this.childrenByName = /* @__PURE__ */Object.create(null);\n            for (var c = this.element.firstChild; c !== null; c = c.nextSibling) {\n              if (c.nodeType === Node.ELEMENT_NODE) {\n                this[this.childrenByNumber.length] = c;\n                this.childrenByNumber.push(c);\n                var id = c.getAttribute(\"id\");\n                if (id && !this.childrenByName[id]) this.childrenByName[id] = c;\n                var name = c.getAttribute(\"name\");\n                if (name && this.element.namespaceURI === NAMESPACE.HTML && namedElts.test(this.element.localName) && !this.childrenByName[name]) this.childrenByName[id] = c;\n              }\n            }\n          }\n        }\n      }\n    });\n    function localNameElementFilter(lname) {\n      return function (e) {\n        return e.localName === lname;\n      };\n    }\n    function htmlLocalNameElementFilter(lname) {\n      var lclname = utils.toASCIILowerCase(lname);\n      if (lclname === lname) return localNameElementFilter(lname);\n      return function (e) {\n        return e.isHTML ? e.localName === lclname : e.localName === lname;\n      };\n    }\n    function namespaceElementFilter(ns) {\n      return function (e) {\n        return e.namespaceURI === ns;\n      };\n    }\n    function namespaceLocalNameElementFilter(ns, lname) {\n      return function (e) {\n        return e.namespaceURI === ns && e.localName === lname;\n      };\n    }\n    function classNamesElementFilter(names) {\n      return function (e) {\n        return names.every(function (n) {\n          return e.classList.contains(n);\n        });\n      };\n    }\n    function elementNameFilter(name) {\n      return function (e) {\n        if (e.namespaceURI !== NAMESPACE.HTML) {\n          return false;\n        }\n        return e.getAttribute(\"name\") === name;\n      };\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/Leaf.js\nvar require_Leaf = __commonJS({\n  \"external/npm/node_modules/domino/lib/Leaf.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Leaf;\n    var Node = require_Node();\n    var NodeList = require_NodeList();\n    var utils = require_utils();\n    var HierarchyRequestError = utils.HierarchyRequestError;\n    var NotFoundError = utils.NotFoundError;\n    function Leaf() {\n      Node.call(this);\n    }\n    Leaf.prototype = Object.create(Node.prototype, {\n      hasChildNodes: {\n        value: function () {\n          return false;\n        }\n      },\n      firstChild: {\n        value: null\n      },\n      lastChild: {\n        value: null\n      },\n      insertBefore: {\n        value: function (node, child) {\n          if (!node.nodeType) throw new TypeError(\"not a node\");\n          HierarchyRequestError();\n        }\n      },\n      replaceChild: {\n        value: function (node, child) {\n          if (!node.nodeType) throw new TypeError(\"not a node\");\n          HierarchyRequestError();\n        }\n      },\n      removeChild: {\n        value: function (node) {\n          if (!node.nodeType) throw new TypeError(\"not a node\");\n          NotFoundError();\n        }\n      },\n      removeChildren: {\n        value: function () {}\n      },\n      childNodes: {\n        get: function () {\n          if (!this._childNodes) this._childNodes = new NodeList();\n          return this._childNodes;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/CharacterData.js\nvar require_CharacterData = __commonJS({\n  \"external/npm/node_modules/domino/lib/CharacterData.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = CharacterData;\n    var Leaf = require_Leaf();\n    var utils = require_utils();\n    var ChildNode = require_ChildNode();\n    var NonDocumentTypeChildNode = require_NonDocumentTypeChildNode();\n    function CharacterData() {\n      Leaf.call(this);\n    }\n    CharacterData.prototype = Object.create(Leaf.prototype, {\n      substringData: {\n        value: function substringData(offset, count) {\n          if (arguments.length < 2) {\n            throw new TypeError(\"Not enough arguments\");\n          }\n          offset = offset >>> 0;\n          count = count >>> 0;\n          if (offset > this.data.length || offset < 0 || count < 0) {\n            utils.IndexSizeError();\n          }\n          return this.data.substring(offset, offset + count);\n        }\n      },\n      appendData: {\n        value: function appendData(data) {\n          if (arguments.length < 1) {\n            throw new TypeError(\"Not enough arguments\");\n          }\n          this.data += String(data);\n        }\n      },\n      insertData: {\n        value: function insertData(offset, data) {\n          return this.replaceData(offset, 0, data);\n        }\n      },\n      deleteData: {\n        value: function deleteData(offset, count) {\n          return this.replaceData(offset, count, \"\");\n        }\n      },\n      replaceData: {\n        value: function replaceData(offset, count, data) {\n          var curtext = this.data,\n            len = curtext.length;\n          offset = offset >>> 0;\n          count = count >>> 0;\n          data = String(data);\n          if (offset > len || offset < 0) utils.IndexSizeError();\n          if (offset + count > len) count = len - offset;\n          var prefix = curtext.substring(0, offset),\n            suffix = curtext.substring(offset + count);\n          this.data = prefix + data + suffix;\n        }\n      },\n      isEqual: {\n        value: function isEqual(n) {\n          return this._data === n._data;\n        }\n      },\n      length: {\n        get: function () {\n          return this.data.length;\n        }\n      }\n    });\n    Object.defineProperties(CharacterData.prototype, ChildNode);\n    Object.defineProperties(CharacterData.prototype, NonDocumentTypeChildNode);\n  }\n});\n\n// external/npm/node_modules/domino/lib/Text.js\nvar require_Text = __commonJS({\n  \"external/npm/node_modules/domino/lib/Text.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Text;\n    var utils = require_utils();\n    var Node = require_Node();\n    var CharacterData = require_CharacterData();\n    function Text(doc, data) {\n      CharacterData.call(this);\n      this.nodeType = Node.TEXT_NODE;\n      this.ownerDocument = doc;\n      this._data = data;\n      this._index = void 0;\n    }\n    var nodeValue = {\n      get: function () {\n        return this._data;\n      },\n      set: function (v) {\n        if (v === null || v === void 0) {\n          v = \"\";\n        } else {\n          v = String(v);\n        }\n        if (v === this._data) return;\n        this._data = v;\n        if (this.rooted) this.ownerDocument.mutateValue(this);\n        if (this.parentNode && this.parentNode._textchangehook) this.parentNode._textchangehook(this);\n      }\n    };\n    Text.prototype = Object.create(CharacterData.prototype, {\n      nodeName: {\n        value: \"#text\"\n      },\n      nodeValue,\n      textContent: nodeValue,\n      innerText: nodeValue,\n      data: {\n        get: nodeValue.get,\n        set: function (v) {\n          nodeValue.set.call(this, v === null ? \"\" : String(v));\n        }\n      },\n      splitText: {\n        value: function splitText(offset) {\n          if (offset > this._data.length || offset < 0) utils.IndexSizeError();\n          var newdata = this._data.substring(offset),\n            newnode = this.ownerDocument.createTextNode(newdata);\n          this.data = this.data.substring(0, offset);\n          var parent = this.parentNode;\n          if (parent !== null) parent.insertBefore(newnode, this.nextSibling);\n          return newnode;\n        }\n      },\n      wholeText: {\n        get: function wholeText() {\n          var result = this.textContent;\n          for (var next = this.nextSibling; next; next = next.nextSibling) {\n            if (next.nodeType !== Node.TEXT_NODE) {\n              break;\n            }\n            result += next.textContent;\n          }\n          return result;\n        }\n      },\n      replaceWholeText: {\n        value: utils.nyi\n      },\n      clone: {\n        value: function clone() {\n          return new Text(this.ownerDocument, this._data);\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/Comment.js\nvar require_Comment = __commonJS({\n  \"external/npm/node_modules/domino/lib/Comment.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Comment;\n    var Node = require_Node();\n    var CharacterData = require_CharacterData();\n    function Comment(doc, data) {\n      CharacterData.call(this);\n      this.nodeType = Node.COMMENT_NODE;\n      this.ownerDocument = doc;\n      this._data = data;\n    }\n    var nodeValue = {\n      get: function () {\n        return this._data;\n      },\n      set: function (v) {\n        if (v === null || v === void 0) {\n          v = \"\";\n        } else {\n          v = String(v);\n        }\n        this._data = v;\n        if (this.rooted) this.ownerDocument.mutateValue(this);\n      }\n    };\n    Comment.prototype = Object.create(CharacterData.prototype, {\n      nodeName: {\n        value: \"#comment\"\n      },\n      nodeValue,\n      textContent: nodeValue,\n      innerText: nodeValue,\n      data: {\n        get: nodeValue.get,\n        set: function (v) {\n          nodeValue.set.call(this, v === null ? \"\" : String(v));\n        }\n      },\n      clone: {\n        value: function clone() {\n          return new Comment(this.ownerDocument, this._data);\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/DocumentFragment.js\nvar require_DocumentFragment = __commonJS({\n  \"external/npm/node_modules/domino/lib/DocumentFragment.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = DocumentFragment;\n    var Node = require_Node();\n    var NodeList = require_NodeList();\n    var ContainerNode = require_ContainerNode();\n    var Element = require_Element();\n    var select = require_select();\n    var utils = require_utils();\n    function DocumentFragment(doc) {\n      ContainerNode.call(this);\n      this.nodeType = Node.DOCUMENT_FRAGMENT_NODE;\n      this.ownerDocument = doc;\n    }\n    DocumentFragment.prototype = Object.create(ContainerNode.prototype, {\n      nodeName: {\n        value: \"#document-fragment\"\n      },\n      nodeValue: {\n        get: function () {\n          return null;\n        },\n        set: function () {}\n      },\n      textContent: Object.getOwnPropertyDescriptor(Element.prototype, \"textContent\"),\n      innerText: Object.getOwnPropertyDescriptor(Element.prototype, \"innerText\"),\n      querySelector: {\n        value: function (selector) {\n          var nodes = this.querySelectorAll(selector);\n          return nodes.length ? nodes[0] : null;\n        }\n      },\n      querySelectorAll: {\n        value: function (selector) {\n          var context = Object.create(this);\n          context.isHTML = true;\n          context.getElementsByTagName = Element.prototype.getElementsByTagName;\n          context.nextElement = Object.getOwnPropertyDescriptor(Element.prototype, \"firstElementChild\").get;\n          var nodes = select(selector, context);\n          return nodes.item ? nodes : new NodeList(nodes);\n        }\n      },\n      clone: {\n        value: function clone() {\n          return new DocumentFragment(this.ownerDocument);\n        }\n      },\n      isEqual: {\n        value: function isEqual(n) {\n          return true;\n        }\n      },\n      innerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: utils.nyi\n      },\n      outerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: utils.nyi\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/ProcessingInstruction.js\nvar require_ProcessingInstruction = __commonJS({\n  \"external/npm/node_modules/domino/lib/ProcessingInstruction.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = ProcessingInstruction;\n    var Node = require_Node();\n    var CharacterData = require_CharacterData();\n    function ProcessingInstruction(doc, target, data) {\n      CharacterData.call(this);\n      this.nodeType = Node.PROCESSING_INSTRUCTION_NODE;\n      this.ownerDocument = doc;\n      this.target = target;\n      this._data = data;\n    }\n    var nodeValue = {\n      get: function () {\n        return this._data;\n      },\n      set: function (v) {\n        if (v === null || v === void 0) {\n          v = \"\";\n        } else {\n          v = String(v);\n        }\n        this._data = v;\n        if (this.rooted) this.ownerDocument.mutateValue(this);\n      }\n    };\n    ProcessingInstruction.prototype = Object.create(CharacterData.prototype, {\n      nodeName: {\n        get: function () {\n          return this.target;\n        }\n      },\n      nodeValue,\n      textContent: nodeValue,\n      innerText: nodeValue,\n      data: {\n        get: nodeValue.get,\n        set: function (v) {\n          nodeValue.set.call(this, v === null ? \"\" : String(v));\n        }\n      },\n      clone: {\n        value: function clone() {\n          return new ProcessingInstruction(this.ownerDocument, this.target, this._data);\n        }\n      },\n      isEqual: {\n        value: function isEqual(n) {\n          return this.target === n.target && this._data === n._data;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeFilter.js\nvar require_NodeFilter = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeFilter.js\"(exports, module) {\n    \"use strict\";\n\n    var NodeFilter = {\n      FILTER_ACCEPT: 1,\n      FILTER_REJECT: 2,\n      FILTER_SKIP: 3,\n      SHOW_ALL: 4294967295,\n      SHOW_ELEMENT: 1,\n      SHOW_ATTRIBUTE: 2,\n      SHOW_TEXT: 4,\n      SHOW_CDATA_SECTION: 8,\n      SHOW_ENTITY_REFERENCE: 16,\n      SHOW_ENTITY: 32,\n      SHOW_PROCESSING_INSTRUCTION: 64,\n      SHOW_COMMENT: 128,\n      SHOW_DOCUMENT: 256,\n      SHOW_DOCUMENT_TYPE: 512,\n      SHOW_DOCUMENT_FRAGMENT: 1024,\n      SHOW_NOTATION: 2048\n    };\n    module.exports = NodeFilter.constructor = NodeFilter.prototype = NodeFilter;\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeTraversal.js\nvar require_NodeTraversal = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeTraversal.js\"(exports, module) {\n    \"use strict\";\n\n    var NodeTraversal = module.exports = {\n      nextSkippingChildren,\n      nextAncestorSibling,\n      next,\n      previous,\n      deepLastChild\n    };\n    function nextSkippingChildren(node, stayWithin) {\n      if (node === stayWithin) {\n        return null;\n      }\n      if (node.nextSibling !== null) {\n        return node.nextSibling;\n      }\n      return nextAncestorSibling(node, stayWithin);\n    }\n    function nextAncestorSibling(node, stayWithin) {\n      for (node = node.parentNode; node !== null; node = node.parentNode) {\n        if (node === stayWithin) {\n          return null;\n        }\n        if (node.nextSibling !== null) {\n          return node.nextSibling;\n        }\n      }\n      return null;\n    }\n    function next(node, stayWithin) {\n      var n;\n      n = node.firstChild;\n      if (n !== null) {\n        return n;\n      }\n      if (node === stayWithin) {\n        return null;\n      }\n      n = node.nextSibling;\n      if (n !== null) {\n        return n;\n      }\n      return nextAncestorSibling(node, stayWithin);\n    }\n    function deepLastChild(node) {\n      while (node.lastChild) {\n        node = node.lastChild;\n      }\n      return node;\n    }\n    function previous(node, stayWithin) {\n      var p;\n      p = node.previousSibling;\n      if (p !== null) {\n        return deepLastChild(p);\n      }\n      p = node.parentNode;\n      if (p === stayWithin) {\n        return null;\n      }\n      return p;\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/TreeWalker.js\nvar require_TreeWalker = __commonJS({\n  \"external/npm/node_modules/domino/lib/TreeWalker.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = TreeWalker;\n    var Node = require_Node();\n    var NodeFilter = require_NodeFilter();\n    var NodeTraversal = require_NodeTraversal();\n    var utils = require_utils();\n    var mapChild = {\n      first: \"firstChild\",\n      last: \"lastChild\",\n      next: \"firstChild\",\n      previous: \"lastChild\"\n    };\n    var mapSibling = {\n      first: \"nextSibling\",\n      last: \"previousSibling\",\n      next: \"nextSibling\",\n      previous: \"previousSibling\"\n    };\n    function traverseChildren(tw, type) {\n      var child, node, parent, result, sibling;\n      node = tw._currentNode[mapChild[type]];\n      while (node !== null) {\n        result = tw._internalFilter(node);\n        if (result === NodeFilter.FILTER_ACCEPT) {\n          tw._currentNode = node;\n          return node;\n        }\n        if (result === NodeFilter.FILTER_SKIP) {\n          child = node[mapChild[type]];\n          if (child !== null) {\n            node = child;\n            continue;\n          }\n        }\n        while (node !== null) {\n          sibling = node[mapSibling[type]];\n          if (sibling !== null) {\n            node = sibling;\n            break;\n          }\n          parent = node.parentNode;\n          if (parent === null || parent === tw.root || parent === tw._currentNode) {\n            return null;\n          } else {\n            node = parent;\n          }\n        }\n      }\n      return null;\n    }\n    function traverseSiblings(tw, type) {\n      var node, result, sibling;\n      node = tw._currentNode;\n      if (node === tw.root) {\n        return null;\n      }\n      while (true) {\n        sibling = node[mapSibling[type]];\n        while (sibling !== null) {\n          node = sibling;\n          result = tw._internalFilter(node);\n          if (result === NodeFilter.FILTER_ACCEPT) {\n            tw._currentNode = node;\n            return node;\n          }\n          sibling = node[mapChild[type]];\n          if (result === NodeFilter.FILTER_REJECT || sibling === null) {\n            sibling = node[mapSibling[type]];\n          }\n        }\n        node = node.parentNode;\n        if (node === null || node === tw.root) {\n          return null;\n        }\n        if (tw._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n          return null;\n        }\n      }\n    }\n    function TreeWalker(root, whatToShow, filter) {\n      if (!root || !root.nodeType) {\n        utils.NotSupportedError();\n      }\n      this._root = root;\n      this._whatToShow = Number(whatToShow) || 0;\n      this._filter = filter || null;\n      this._active = false;\n      this._currentNode = root;\n    }\n    Object.defineProperties(TreeWalker.prototype, {\n      root: {\n        get: function () {\n          return this._root;\n        }\n      },\n      whatToShow: {\n        get: function () {\n          return this._whatToShow;\n        }\n      },\n      filter: {\n        get: function () {\n          return this._filter;\n        }\n      },\n      currentNode: {\n        get: function currentNode() {\n          return this._currentNode;\n        },\n        set: function setCurrentNode(v) {\n          if (!(v instanceof Node)) {\n            throw new TypeError(\"Not a Node\");\n          }\n          this._currentNode = v;\n        }\n      },\n      _internalFilter: {\n        value: function _internalFilter(node) {\n          var result, filter;\n          if (this._active) {\n            utils.InvalidStateError();\n          }\n          if (!(1 << node.nodeType - 1 & this._whatToShow)) {\n            return NodeFilter.FILTER_SKIP;\n          }\n          filter = this._filter;\n          if (filter === null) {\n            result = NodeFilter.FILTER_ACCEPT;\n          } else {\n            this._active = true;\n            try {\n              if (typeof filter === \"function\") {\n                result = filter(node);\n              } else {\n                result = filter.acceptNode(node);\n              }\n            } finally {\n              this._active = false;\n            }\n          }\n          return +result;\n        }\n      },\n      parentNode: {\n        value: function parentNode() {\n          var node = this._currentNode;\n          while (node !== this.root) {\n            node = node.parentNode;\n            if (node === null) {\n              return null;\n            }\n            if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n              this._currentNode = node;\n              return node;\n            }\n          }\n          return null;\n        }\n      },\n      firstChild: {\n        value: function firstChild() {\n          return traverseChildren(this, \"first\");\n        }\n      },\n      lastChild: {\n        value: function lastChild() {\n          return traverseChildren(this, \"last\");\n        }\n      },\n      previousSibling: {\n        value: function previousSibling() {\n          return traverseSiblings(this, \"previous\");\n        }\n      },\n      nextSibling: {\n        value: function nextSibling() {\n          return traverseSiblings(this, \"next\");\n        }\n      },\n      previousNode: {\n        value: function previousNode() {\n          var node, result, previousSibling, lastChild;\n          node = this._currentNode;\n          while (node !== this._root) {\n            for (previousSibling = node.previousSibling; previousSibling; previousSibling = node.previousSibling) {\n              node = previousSibling;\n              result = this._internalFilter(node);\n              if (result === NodeFilter.FILTER_REJECT) {\n                continue;\n              }\n              for (lastChild = node.lastChild; lastChild; lastChild = node.lastChild) {\n                node = lastChild;\n                result = this._internalFilter(node);\n                if (result === NodeFilter.FILTER_REJECT) {\n                  break;\n                }\n              }\n              if (result === NodeFilter.FILTER_ACCEPT) {\n                this._currentNode = node;\n                return node;\n              }\n            }\n            if (node === this.root || node.parentNode === null) {\n              return null;\n            }\n            node = node.parentNode;\n            if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n              this._currentNode = node;\n              return node;\n            }\n          }\n          return null;\n        }\n      },\n      nextNode: {\n        value: function nextNode() {\n          var node, result, firstChild, nextSibling;\n          node = this._currentNode;\n          result = NodeFilter.FILTER_ACCEPT;\n          CHILDREN: while (true) {\n            for (firstChild = node.firstChild; firstChild; firstChild = node.firstChild) {\n              node = firstChild;\n              result = this._internalFilter(node);\n              if (result === NodeFilter.FILTER_ACCEPT) {\n                this._currentNode = node;\n                return node;\n              } else if (result === NodeFilter.FILTER_REJECT) {\n                break;\n              }\n            }\n            for (nextSibling = NodeTraversal.nextSkippingChildren(node, this.root); nextSibling; nextSibling = NodeTraversal.nextSkippingChildren(node, this.root)) {\n              node = nextSibling;\n              result = this._internalFilter(node);\n              if (result === NodeFilter.FILTER_ACCEPT) {\n                this._currentNode = node;\n                return node;\n              } else if (result === NodeFilter.FILTER_SKIP) {\n                continue CHILDREN;\n              }\n            }\n            return null;\n          }\n        }\n      },\n      toString: {\n        value: function toString() {\n          return \"[object TreeWalker]\";\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/NodeIterator.js\nvar require_NodeIterator = __commonJS({\n  \"external/npm/node_modules/domino/lib/NodeIterator.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = NodeIterator;\n    var NodeFilter = require_NodeFilter();\n    var NodeTraversal = require_NodeTraversal();\n    var utils = require_utils();\n    function move(node, stayWithin, directionIsNext) {\n      if (directionIsNext) {\n        return NodeTraversal.next(node, stayWithin);\n      } else {\n        if (node === stayWithin) {\n          return null;\n        }\n        return NodeTraversal.previous(node, null);\n      }\n    }\n    function isInclusiveAncestor(node, possibleChild) {\n      for (; possibleChild; possibleChild = possibleChild.parentNode) {\n        if (node === possibleChild) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function traverse(ni, directionIsNext) {\n      var node, beforeNode;\n      node = ni._referenceNode;\n      beforeNode = ni._pointerBeforeReferenceNode;\n      while (true) {\n        if (beforeNode === directionIsNext) {\n          beforeNode = !beforeNode;\n        } else {\n          node = move(node, ni._root, directionIsNext);\n          if (node === null) {\n            return null;\n          }\n        }\n        var result = ni._internalFilter(node);\n        if (result === NodeFilter.FILTER_ACCEPT) {\n          break;\n        }\n      }\n      ni._referenceNode = node;\n      ni._pointerBeforeReferenceNode = beforeNode;\n      return node;\n    }\n    function NodeIterator(root, whatToShow, filter) {\n      if (!root || !root.nodeType) {\n        utils.NotSupportedError();\n      }\n      this._root = root;\n      this._referenceNode = root;\n      this._pointerBeforeReferenceNode = true;\n      this._whatToShow = Number(whatToShow) || 0;\n      this._filter = filter || null;\n      this._active = false;\n      root.doc._attachNodeIterator(this);\n    }\n    Object.defineProperties(NodeIterator.prototype, {\n      root: {\n        get: function root() {\n          return this._root;\n        }\n      },\n      referenceNode: {\n        get: function referenceNode() {\n          return this._referenceNode;\n        }\n      },\n      pointerBeforeReferenceNode: {\n        get: function pointerBeforeReferenceNode() {\n          return this._pointerBeforeReferenceNode;\n        }\n      },\n      whatToShow: {\n        get: function whatToShow() {\n          return this._whatToShow;\n        }\n      },\n      filter: {\n        get: function filter() {\n          return this._filter;\n        }\n      },\n      _internalFilter: {\n        value: function _internalFilter(node) {\n          var result, filter;\n          if (this._active) {\n            utils.InvalidStateError();\n          }\n          if (!(1 << node.nodeType - 1 & this._whatToShow)) {\n            return NodeFilter.FILTER_SKIP;\n          }\n          filter = this._filter;\n          if (filter === null) {\n            result = NodeFilter.FILTER_ACCEPT;\n          } else {\n            this._active = true;\n            try {\n              if (typeof filter === \"function\") {\n                result = filter(node);\n              } else {\n                result = filter.acceptNode(node);\n              }\n            } finally {\n              this._active = false;\n            }\n          }\n          return +result;\n        }\n      },\n      _preremove: {\n        value: function _preremove(toBeRemovedNode) {\n          if (isInclusiveAncestor(toBeRemovedNode, this._root)) {\n            return;\n          }\n          if (!isInclusiveAncestor(toBeRemovedNode, this._referenceNode)) {\n            return;\n          }\n          if (this._pointerBeforeReferenceNode) {\n            var next = toBeRemovedNode;\n            while (next.lastChild) {\n              next = next.lastChild;\n            }\n            next = NodeTraversal.next(next, this.root);\n            if (next) {\n              this._referenceNode = next;\n              return;\n            }\n            this._pointerBeforeReferenceNode = false;\n          }\n          if (toBeRemovedNode.previousSibling === null) {\n            this._referenceNode = toBeRemovedNode.parentNode;\n          } else {\n            this._referenceNode = toBeRemovedNode.previousSibling;\n            var lastChild;\n            for (lastChild = this._referenceNode.lastChild; lastChild; lastChild = this._referenceNode.lastChild) {\n              this._referenceNode = lastChild;\n            }\n          }\n        }\n      },\n      nextNode: {\n        value: function nextNode() {\n          return traverse(this, true);\n        }\n      },\n      previousNode: {\n        value: function previousNode() {\n          return traverse(this, false);\n        }\n      },\n      detach: {\n        value: function detach() {}\n      },\n      toString: {\n        value: function toString() {\n          return \"[object NodeIterator]\";\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/URL.js\nvar require_URL = __commonJS({\n  \"external/npm/node_modules/domino/lib/URL.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = URL;\n    function URL(url) {\n      if (!url) return Object.create(URL.prototype);\n      this.url = url.replace(/^[ \\t\\n\\r\\f]+|[ \\t\\n\\r\\f]+$/g, \"\");\n      var match = URL.pattern.exec(this.url);\n      if (match) {\n        if (match[2]) this.scheme = match[2];\n        if (match[4]) {\n          var userinfo = match[4].match(URL.userinfoPattern);\n          if (userinfo) {\n            this.username = userinfo[1];\n            this.password = userinfo[3];\n            match[4] = match[4].substring(userinfo[0].length);\n          }\n          if (match[4].match(URL.portPattern)) {\n            var pos = match[4].lastIndexOf(\":\");\n            this.host = match[4].substring(0, pos);\n            this.port = match[4].substring(pos + 1);\n          } else {\n            this.host = match[4];\n          }\n        }\n        if (match[5]) this.path = match[5];\n        if (match[6]) this.query = match[7];\n        if (match[8]) this.fragment = match[9];\n      }\n    }\n    URL.pattern = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/;\n    URL.userinfoPattern = /^([^@:]*)(:([^@]*))?@/;\n    URL.portPattern = /:\\d+$/;\n    URL.authorityPattern = /^[^:\\/?#]+:\\/\\//;\n    URL.hierarchyPattern = /^[^:\\/?#]+:\\//;\n    URL.percentEncode = function percentEncode(s) {\n      var c = s.charCodeAt(0);\n      if (c < 256) return \"%\" + c.toString(16);else throw Error(\"can't percent-encode codepoints > 255 yet\");\n    };\n    URL.prototype = {\n      constructor: URL,\n      isAbsolute: function () {\n        return !!this.scheme;\n      },\n      isAuthorityBased: function () {\n        return URL.authorityPattern.test(this.url);\n      },\n      isHierarchical: function () {\n        return URL.hierarchyPattern.test(this.url);\n      },\n      toString: function () {\n        var s = \"\";\n        if (this.scheme !== void 0) s += this.scheme + \":\";\n        if (this.isAbsolute()) {\n          s += \"//\";\n          if (this.username || this.password) {\n            s += this.username || \"\";\n            if (this.password) {\n              s += \":\" + this.password;\n            }\n            s += \"@\";\n          }\n          if (this.host) {\n            s += this.host;\n          }\n        }\n        if (this.port !== void 0) s += \":\" + this.port;\n        if (this.path !== void 0) s += this.path;\n        if (this.query !== void 0) s += \"?\" + this.query;\n        if (this.fragment !== void 0) s += \"#\" + this.fragment;\n        return s;\n      },\n      resolve: function (relative) {\n        var base = this;\n        var r = new URL(relative);\n        var t = new URL();\n        if (r.scheme !== void 0) {\n          t.scheme = r.scheme;\n          t.username = r.username;\n          t.password = r.password;\n          t.host = r.host;\n          t.port = r.port;\n          t.path = remove_dot_segments(r.path);\n          t.query = r.query;\n        } else {\n          t.scheme = base.scheme;\n          if (r.host !== void 0) {\n            t.username = r.username;\n            t.password = r.password;\n            t.host = r.host;\n            t.port = r.port;\n            t.path = remove_dot_segments(r.path);\n            t.query = r.query;\n          } else {\n            t.username = base.username;\n            t.password = base.password;\n            t.host = base.host;\n            t.port = base.port;\n            if (!r.path) {\n              t.path = base.path;\n              if (r.query !== void 0) t.query = r.query;else t.query = base.query;\n            } else {\n              if (r.path.charAt(0) === \"/\") {\n                t.path = remove_dot_segments(r.path);\n              } else {\n                t.path = merge(base.path, r.path);\n                t.path = remove_dot_segments(t.path);\n              }\n              t.query = r.query;\n            }\n          }\n        }\n        t.fragment = r.fragment;\n        return t.toString();\n        function merge(basepath, refpath) {\n          if (base.host !== void 0 && !base.path) return \"/\" + refpath;\n          var lastslash = basepath.lastIndexOf(\"/\");\n          if (lastslash === -1) return refpath;else return basepath.substring(0, lastslash + 1) + refpath;\n        }\n        function remove_dot_segments(path) {\n          if (!path) return path;\n          var output = \"\";\n          while (path.length > 0) {\n            if (path === \".\" || path === \"..\") {\n              path = \"\";\n              break;\n            }\n            var twochars = path.substring(0, 2);\n            var threechars = path.substring(0, 3);\n            var fourchars = path.substring(0, 4);\n            if (threechars === \"../\") {\n              path = path.substring(3);\n            } else if (twochars === \"./\") {\n              path = path.substring(2);\n            } else if (threechars === \"/./\") {\n              path = \"/\" + path.substring(3);\n            } else if (twochars === \"/.\" && path.length === 2) {\n              path = \"/\";\n            } else if (fourchars === \"/../\" || threechars === \"/..\" && path.length === 3) {\n              path = \"/\" + path.substring(4);\n              output = output.replace(/\\/?[^\\/]*$/, \"\");\n            } else {\n              var segment = path.match(/(\\/?([^\\/]*))/)[0];\n              output += segment;\n              path = path.substring(segment.length);\n            }\n          }\n          return output;\n        }\n      }\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/CustomEvent.js\nvar require_CustomEvent = __commonJS({\n  \"external/npm/node_modules/domino/lib/CustomEvent.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = CustomEvent;\n    var Event = require_Event();\n    function CustomEvent(type, dictionary) {\n      Event.call(this, type, dictionary);\n    }\n    CustomEvent.prototype = Object.create(Event.prototype, {\n      constructor: {\n        value: CustomEvent\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/events.js\nvar require_events = __commonJS({\n  \"external/npm/node_modules/domino/lib/events.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = {\n      Event: require_Event(),\n      UIEvent: require_UIEvent(),\n      MouseEvent: require_MouseEvent(),\n      CustomEvent: require_CustomEvent()\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/style_parser.js\nvar require_style_parser = __commonJS({\n  \"external/npm/node_modules/domino/lib/style_parser.js\"(exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n      value: true\n    });\n    exports.hyphenate = exports.parse = void 0;\n    function parse(value) {\n      const styles = [];\n      let i = 0;\n      let parenDepth = 0;\n      let quote = 0;\n      let valueStart = 0;\n      let propStart = 0;\n      let currentProp = null;\n      while (i < value.length) {\n        const token = value.charCodeAt(i++);\n        switch (token) {\n          case 40:\n            parenDepth++;\n            break;\n          case 41:\n            parenDepth--;\n            break;\n          case 39:\n            if (quote === 0) {\n              quote = 39;\n            } else if (quote === 39 && value.charCodeAt(i - 1) !== 92) {\n              quote = 0;\n            }\n            break;\n          case 34:\n            if (quote === 0) {\n              quote = 34;\n            } else if (quote === 34 && value.charCodeAt(i - 1) !== 92) {\n              quote = 0;\n            }\n            break;\n          case 58:\n            if (!currentProp && parenDepth === 0 && quote === 0) {\n              currentProp = hyphenate(value.substring(propStart, i - 1).trim());\n              valueStart = i;\n            }\n            break;\n          case 59:\n            if (currentProp && valueStart > 0 && parenDepth === 0 && quote === 0) {\n              const styleVal = value.substring(valueStart, i - 1).trim();\n              styles.push(currentProp, styleVal);\n              propStart = i;\n              valueStart = 0;\n              currentProp = null;\n            }\n            break;\n        }\n      }\n      if (currentProp && valueStart) {\n        const styleVal = value.slice(valueStart).trim();\n        styles.push(currentProp, styleVal);\n      }\n      return styles;\n    }\n    exports.parse = parse;\n    function hyphenate(value) {\n      return value.replace(/[a-z][A-Z]/g, v => {\n        return v.charAt(0) + \"-\" + v.charAt(1);\n      }).toLowerCase();\n    }\n    exports.hyphenate = hyphenate;\n  }\n});\n\n// external/npm/node_modules/domino/lib/CSSStyleDeclaration.js\nvar require_CSSStyleDeclaration = __commonJS({\n  \"external/npm/node_modules/domino/lib/CSSStyleDeclaration.js\"(exports, module) {\n    \"use strict\";\n\n    var {\n      parse\n    } = require_style_parser();\n    module.exports = function (elt) {\n      const style = new CSSStyleDeclaration(elt);\n      const handler = {\n        get: function (target, property) {\n          return property in target ? target[property] : target.getPropertyValue(dasherizeProperty(property));\n        },\n        has: function (target, key) {\n          return true;\n        },\n        set: function (target, property, value) {\n          if (property in target) {\n            target[property] = value;\n          } else {\n            target.setProperty(dasherizeProperty(property), value != null ? value : void 0);\n          }\n          return true;\n        }\n      };\n      return new Proxy(style, handler);\n    };\n    function dasherizeProperty(property) {\n      return property.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n    }\n    function CSSStyleDeclaration(elt) {\n      this._element = elt;\n    }\n    var IMPORTANT_BANG = \"!important\";\n    function parseStyles(value) {\n      const result = {\n        property: {},\n        priority: {}\n      };\n      if (!value) {\n        return result;\n      }\n      const styleValues = parse(value);\n      if (styleValues.length < 2) {\n        return result;\n      }\n      for (let i = 0; i < styleValues.length; i += 2) {\n        const name = styleValues[i];\n        let value2 = styleValues[i + 1];\n        if (value2.endsWith(IMPORTANT_BANG)) {\n          result.priority[name] = \"important\";\n          value2 = value2.slice(0, -IMPORTANT_BANG.length).trim();\n        }\n        result.property[name] = value2;\n      }\n      return result;\n    }\n    var NO_CHANGE = {};\n    CSSStyleDeclaration.prototype = Object.create(Object.prototype, {\n      _parsed: {\n        get: function () {\n          if (!this._parsedStyles || this.cssText !== this._lastParsedText) {\n            var text = this.cssText;\n            this._parsedStyles = parseStyles(text);\n            this._lastParsedText = text;\n            delete this._names;\n          }\n          return this._parsedStyles;\n        }\n      },\n      _serialize: {\n        value: function () {\n          var styles = this._parsed;\n          var s = \"\";\n          for (var name in styles.property) {\n            if (s) s += \" \";\n            s += name + \": \" + styles.property[name];\n            if (styles.priority[name]) {\n              s += \" !\" + styles.priority[name];\n            }\n            s += \";\";\n          }\n          this.cssText = s;\n          this._lastParsedText = s;\n          delete this._names;\n        }\n      },\n      cssText: {\n        get: function () {\n          return this._element.getAttribute(\"style\");\n        },\n        set: function (value) {\n          this._element.setAttribute(\"style\", value);\n        }\n      },\n      length: {\n        get: function () {\n          if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);\n          return this._names.length;\n        }\n      },\n      item: {\n        value: function (n) {\n          if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);\n          return this._names[n];\n        }\n      },\n      getPropertyValue: {\n        value: function (property) {\n          property = property.toLowerCase();\n          return this._parsed.property[property] || \"\";\n        }\n      },\n      getPropertyPriority: {\n        value: function (property) {\n          property = property.toLowerCase();\n          return this._parsed.priority[property] || \"\";\n        }\n      },\n      setProperty: {\n        value: function (property, value, priority) {\n          property = property.toLowerCase();\n          if (value === null || value === void 0) {\n            value = \"\";\n          }\n          if (priority === null || priority === void 0) {\n            priority = \"\";\n          }\n          if (value !== NO_CHANGE) {\n            value = \"\" + value;\n          }\n          value = value.trim();\n          if (value === \"\") {\n            this.removeProperty(property);\n            return;\n          }\n          if (priority !== \"\" && priority !== NO_CHANGE && !/^important$/i.test(priority)) {\n            return;\n          }\n          var styles = this._parsed;\n          if (value === NO_CHANGE) {\n            if (!styles.property[property]) {\n              return;\n            }\n            if (priority !== \"\") {\n              styles.priority[property] = \"important\";\n            } else {\n              delete styles.priority[property];\n            }\n          } else {\n            if (value.includes(\";\") && !value.includes(\"data:\")) return;\n            var newprops = parseStyles(property + \":\" + value);\n            if (Object.getOwnPropertyNames(newprops.property).length === 0) {\n              return;\n            }\n            if (Object.getOwnPropertyNames(newprops.priority).length !== 0) {\n              return;\n            }\n            for (var p in newprops.property) {\n              styles.property[p] = newprops.property[p];\n              if (priority === NO_CHANGE) {\n                continue;\n              } else if (priority !== \"\") {\n                styles.priority[p] = \"important\";\n              } else if (styles.priority[p]) {\n                delete styles.priority[p];\n              }\n            }\n          }\n          this._serialize();\n        }\n      },\n      setPropertyValue: {\n        value: function (property, value) {\n          return this.setProperty(property, value, NO_CHANGE);\n        }\n      },\n      setPropertyPriority: {\n        value: function (property, priority) {\n          return this.setProperty(property, NO_CHANGE, priority);\n        }\n      },\n      removeProperty: {\n        value: function (property) {\n          property = property.toLowerCase();\n          var styles = this._parsed;\n          if (property in styles.property) {\n            delete styles.property[property];\n            delete styles.priority[property];\n            this._serialize();\n          }\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/URLUtils.js\nvar require_URLUtils = __commonJS({\n  \"external/npm/node_modules/domino/lib/URLUtils.js\"(exports, module) {\n    \"use strict\";\n\n    var URL = require_URL();\n    module.exports = URLUtils;\n    function URLUtils() {}\n    URLUtils.prototype = Object.create(Object.prototype, {\n      _url: {\n        get: function () {\n          return new URL(this.href);\n        }\n      },\n      protocol: {\n        get: function () {\n          var url = this._url;\n          if (url && url.scheme) return url.scheme + \":\";else return \":\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute()) {\n            v = v.replace(/:+$/, \"\");\n            v = v.replace(/[^-+\\.a-zA-Z0-9]/g, URL.percentEncode);\n            if (v.length > 0) {\n              url.scheme = v;\n              output = url.toString();\n            }\n          }\n          this.href = output;\n        }\n      },\n      host: {\n        get: function () {\n          var url = this._url;\n          if (url.isAbsolute() && url.isAuthorityBased()) return url.host + (url.port ? \":\" + url.port : \"\");else return \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute() && url.isAuthorityBased()) {\n            v = v.replace(/[^-+\\._~!$&'()*,;:=a-zA-Z0-9]/g, URL.percentEncode);\n            if (v.length > 0) {\n              url.host = v;\n              delete url.port;\n              output = url.toString();\n            }\n          }\n          this.href = output;\n        }\n      },\n      hostname: {\n        get: function () {\n          var url = this._url;\n          if (url.isAbsolute() && url.isAuthorityBased()) return url.host;else return \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute() && url.isAuthorityBased()) {\n            v = v.replace(/^\\/+/, \"\");\n            v = v.replace(/[^-+\\._~!$&'()*,;:=a-zA-Z0-9]/g, URL.percentEncode);\n            if (v.length > 0) {\n              url.host = v;\n              output = url.toString();\n            }\n          }\n          this.href = output;\n        }\n      },\n      port: {\n        get: function () {\n          var url = this._url;\n          if (url.isAbsolute() && url.isAuthorityBased() && url.port !== void 0) return url.port;else return \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute() && url.isAuthorityBased()) {\n            v = \"\" + v;\n            v = v.replace(/[^0-9].*$/, \"\");\n            v = v.replace(/^0+/, \"\");\n            if (v.length === 0) v = \"0\";\n            if (parseInt(v, 10) <= 65535) {\n              url.port = v;\n              output = url.toString();\n            }\n          }\n          this.href = output;\n        }\n      },\n      pathname: {\n        get: function () {\n          var url = this._url;\n          if (url.isAbsolute() && url.isHierarchical()) return url.path;else return \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute() && url.isHierarchical()) {\n            if (v.charAt(0) !== \"/\") v = \"/\" + v;\n            v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/a-zA-Z0-9]/g, URL.percentEncode);\n            url.path = v;\n            output = url.toString();\n          }\n          this.href = output;\n        }\n      },\n      search: {\n        get: function () {\n          var url = this._url;\n          if (url.isAbsolute() && url.isHierarchical() && url.query !== void 0) return \"?\" + url.query;else return \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute() && url.isHierarchical()) {\n            if (v.charAt(0) === \"?\") v = v.substring(1);\n            v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/?a-zA-Z0-9]/g, URL.percentEncode);\n            url.query = v;\n            output = url.toString();\n          }\n          this.href = output;\n        }\n      },\n      hash: {\n        get: function () {\n          var url = this._url;\n          if (url == null || url.fragment == null || url.fragment === \"\") {\n            return \"\";\n          } else {\n            return \"#\" + url.fragment;\n          }\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (v.charAt(0) === \"#\") v = v.substring(1);\n          v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/?a-zA-Z0-9]/g, URL.percentEncode);\n          url.fragment = v;\n          output = url.toString();\n          this.href = output;\n        }\n      },\n      username: {\n        get: function () {\n          var url = this._url;\n          return url.username || \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute()) {\n            v = v.replace(/[\\x00-\\x1F\\x7F-\\uFFFF \"#<>?`\\/@\\\\:]/g, URL.percentEncode);\n            url.username = v;\n            output = url.toString();\n          }\n          this.href = output;\n        }\n      },\n      password: {\n        get: function () {\n          var url = this._url;\n          return url.password || \"\";\n        },\n        set: function (v) {\n          var output = this.href;\n          var url = new URL(output);\n          if (url.isAbsolute()) {\n            if (v === \"\") {\n              url.password = null;\n            } else {\n              v = v.replace(/[\\x00-\\x1F\\x7F-\\uFFFF \"#<>?`\\/@\\\\]/g, URL.percentEncode);\n              url.password = v;\n            }\n            output = url.toString();\n          }\n          this.href = output;\n        }\n      },\n      origin: {\n        get: function () {\n          var url = this._url;\n          if (url == null) {\n            return \"\";\n          }\n          var originForPort = function (defaultPort) {\n            var origin = [url.scheme, url.host, +url.port || defaultPort];\n            return origin[0] + \"://\" + origin[1] + (origin[2] === defaultPort ? \"\" : \":\" + origin[2]);\n          };\n          switch (url.scheme) {\n            case \"ftp\":\n              return originForPort(21);\n            case \"gopher\":\n              return originForPort(70);\n            case \"http\":\n            case \"ws\":\n              return originForPort(80);\n            case \"https\":\n            case \"wss\":\n              return originForPort(443);\n            default:\n              return url.scheme + \"://\";\n          }\n        }\n      }\n    });\n    URLUtils._inherit = function (proto) {\n      Object.getOwnPropertyNames(URLUtils.prototype).forEach(function (p) {\n        if (p === \"constructor\" || p === \"href\") {\n          return;\n        }\n        var desc = Object.getOwnPropertyDescriptor(URLUtils.prototype, p);\n        Object.defineProperty(proto, p, desc);\n      });\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/defineElement.js\nvar require_defineElement = __commonJS({\n  \"external/npm/node_modules/domino/lib/defineElement.js\"(exports, module) {\n    \"use strict\";\n\n    var attributes = require_attributes();\n    var isApiWritable = require_config().isApiWritable;\n    module.exports = function (spec, defaultConstructor, tagList, tagNameToImpl) {\n      var c = spec.ctor;\n      if (c) {\n        var props = spec.props || {};\n        if (spec.attributes) {\n          for (var n in spec.attributes) {\n            var attr = spec.attributes[n];\n            if (typeof attr !== \"object\" || Array.isArray(attr)) attr = {\n              type: attr\n            };\n            if (!attr.name) attr.name = n.toLowerCase();\n            props[n] = attributes.property(attr);\n          }\n        }\n        props.constructor = {\n          value: c,\n          writable: isApiWritable\n        };\n        c.prototype = Object.create((spec.superclass || defaultConstructor).prototype, props);\n        if (spec.events) {\n          addEventHandlers(c, spec.events);\n        }\n        tagList[spec.name] = c;\n      } else {\n        c = defaultConstructor;\n      }\n      (spec.tags || spec.tag && [spec.tag] || []).forEach(function (tag) {\n        tagNameToImpl[tag] = c;\n      });\n      return c;\n    };\n    function EventHandlerBuilder(body, document, form, element) {\n      this.body = body;\n      this.document = document;\n      this.form = form;\n      this.element = element;\n    }\n    EventHandlerBuilder.prototype.build = function () {\n      return () => {};\n    };\n    function EventHandlerChangeHandler(elt, name, oldval, newval) {\n      var doc = elt.ownerDocument || /* @__PURE__ */Object.create(null);\n      var form = elt.form || /* @__PURE__ */Object.create(null);\n      elt[name] = new EventHandlerBuilder(newval, doc, form, elt).build();\n    }\n    function addEventHandlers(c, eventHandlerTypes) {\n      var p = c.prototype;\n      eventHandlerTypes.forEach(function (type) {\n        Object.defineProperty(p, \"on\" + type, {\n          get: function () {\n            return this._getEventHandler(type);\n          },\n          set: function (v) {\n            this._setEventHandler(type, v);\n          }\n        });\n        attributes.registerChangeHandler(c, \"on\" + type, EventHandlerChangeHandler);\n      });\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/htmlelts.js\nvar require_htmlelts = __commonJS({\n  \"external/npm/node_modules/domino/lib/htmlelts.js\"(exports) {\n    \"use strict\";\n\n    var Node = require_Node();\n    var Element = require_Element();\n    var CSSStyleDeclaration = require_CSSStyleDeclaration();\n    var utils = require_utils();\n    var URLUtils = require_URLUtils();\n    var defineElement = require_defineElement();\n    var htmlElements = exports.elements = {};\n    var htmlNameToImpl = /* @__PURE__ */Object.create(null);\n    exports.createElement = function (doc, localName, prefix) {\n      var impl = htmlNameToImpl[localName] || HTMLUnknownElement;\n      return new impl(doc, localName, prefix);\n    };\n    function define(spec) {\n      return defineElement(spec, HTMLElement, htmlElements, htmlNameToImpl);\n    }\n    function URL(attr) {\n      return {\n        get: function () {\n          var v = this._getattr(attr);\n          if (v === null) {\n            return \"\";\n          }\n          var url = this.doc._resolve(v);\n          return url === null ? v : url;\n        },\n        set: function (value) {\n          this._setattr(attr, value);\n        }\n      };\n    }\n    function CORS(attr) {\n      return {\n        get: function () {\n          var v = this._getattr(attr);\n          if (v === null) {\n            return null;\n          }\n          if (v.toLowerCase() === \"use-credentials\") {\n            return \"use-credentials\";\n          }\n          return \"anonymous\";\n        },\n        set: function (value) {\n          if (value === null || value === void 0) {\n            this.removeAttribute(attr);\n          } else {\n            this._setattr(attr, value);\n          }\n        }\n      };\n    }\n    var REFERRER = {\n      type: [\"\", \"no-referrer\", \"no-referrer-when-downgrade\", \"same-origin\", \"origin\", \"strict-origin\", \"origin-when-cross-origin\", \"strict-origin-when-cross-origin\", \"unsafe-url\"],\n      missing: \"\"\n    };\n    var focusableElements = {\n      \"A\": true,\n      \"LINK\": true,\n      \"BUTTON\": true,\n      \"INPUT\": true,\n      \"SELECT\": true,\n      \"TEXTAREA\": true,\n      \"COMMAND\": true\n    };\n    var HTMLFormElement = function (doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n      this._form = null;\n    };\n    var HTMLElement = exports.HTMLElement = define({\n      superclass: Element,\n      name: \"HTMLElement\",\n      ctor: function HTMLElement2(doc, localName, prefix) {\n        Element.call(this, doc, localName, utils.NAMESPACE.HTML, prefix);\n      },\n      props: {\n        dangerouslySetInnerHTML: {\n          set: function (v) {\n            this._innerHTML = v;\n          }\n        },\n        innerHTML: {\n          get: function () {\n            return this.serialize();\n          },\n          set: function (v) {\n            var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, this);\n            parser.parse(v === null ? \"\" : String(v), true);\n            var target = this instanceof htmlNameToImpl.template ? this.content : this;\n            while (target.hasChildNodes()) target.removeChild(target.firstChild);\n            target.appendChild(parser._asDocumentFragment());\n          }\n        },\n        style: {\n          get: function () {\n            if (!this._style) this._style = new CSSStyleDeclaration(this);\n            return this._style;\n          },\n          set: function (v) {\n            if (v === null || v === void 0) {\n              v = \"\";\n            }\n            this._setattr(\"style\", String(v));\n          }\n        },\n        blur: {\n          value: function () {}\n        },\n        focus: {\n          value: function () {}\n        },\n        forceSpellCheck: {\n          value: function () {}\n        },\n        click: {\n          value: function () {\n            if (this._click_in_progress) return;\n            this._click_in_progress = true;\n            try {\n              if (this._pre_click_activation_steps) this._pre_click_activation_steps();\n              var event = this.ownerDocument.createEvent(\"MouseEvent\");\n              event.initMouseEvent(\"click\", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);\n              var success = this.dispatchEvent(event);\n              if (success) {\n                if (this._post_click_activation_steps) this._post_click_activation_steps(event);\n              } else {\n                if (this._cancelled_activation_steps) this._cancelled_activation_steps();\n              }\n            } finally {\n              this._click_in_progress = false;\n            }\n          }\n        },\n        submit: {\n          value: utils.nyi\n        }\n      },\n      attributes: {\n        title: String,\n        lang: String,\n        dir: {\n          type: [\"ltr\", \"rtl\", \"auto\"],\n          missing: \"\"\n        },\n        draggable: {\n          type: [\"true\", \"false\"],\n          treatNullAsEmptyString: true\n        },\n        spellcheck: {\n          type: [\"true\", \"false\"],\n          missing: \"\"\n        },\n        enterKeyHint: {\n          type: [\"enter\", \"done\", \"go\", \"next\", \"previous\", \"search\", \"send\"],\n          missing: \"\"\n        },\n        autoCapitalize: {\n          type: [\"off\", \"on\", \"none\", \"sentences\", \"words\", \"characters\"],\n          missing: \"\"\n        },\n        autoFocus: Boolean,\n        accessKey: String,\n        nonce: String,\n        hidden: Boolean,\n        translate: {\n          type: [\"no\", \"yes\"],\n          missing: \"\"\n        },\n        tabIndex: {\n          type: \"long\",\n          default: function () {\n            if (this.tagName in focusableElements || this.contentEditable) return 0;else return -1;\n          }\n        }\n      },\n      events: [\"abort\", \"canplay\", \"canplaythrough\", \"change\", \"click\", \"contextmenu\", \"cuechange\", \"dblclick\", \"drag\", \"dragend\", \"dragenter\", \"dragleave\", \"dragover\", \"dragstart\", \"drop\", \"durationchange\", \"emptied\", \"ended\", \"input\", \"invalid\", \"keydown\", \"keypress\", \"keyup\", \"loadeddata\", \"loadedmetadata\", \"loadstart\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"mousewheel\", \"pause\", \"play\", \"playing\", \"progress\", \"ratechange\", \"readystatechange\", \"reset\", \"seeked\", \"seeking\", \"select\", \"show\", \"stalled\", \"submit\", \"suspend\", \"timeupdate\", \"volumechange\", \"waiting\", \"blur\", \"error\", \"focus\", \"load\", \"scroll\"]\n    });\n    var HTMLUnknownElement = define({\n      name: \"HTMLUnknownElement\",\n      ctor: function HTMLUnknownElement2(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    var formAssociatedProps = {\n      form: {\n        get: function () {\n          return this._form;\n        }\n      }\n    };\n    define({\n      tag: \"a\",\n      name: \"HTMLAnchorElement\",\n      ctor: function HTMLAnchorElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        _post_click_activation_steps: {\n          value: function (e) {\n            if (this.href) {\n              this.ownerDocument.defaultView.location = this.href;\n            }\n          }\n        }\n      },\n      attributes: {\n        href: URL,\n        ping: String,\n        download: String,\n        target: String,\n        rel: String,\n        media: String,\n        hreflang: String,\n        type: String,\n        referrerPolicy: REFERRER,\n        coords: String,\n        charset: String,\n        name: String,\n        rev: String,\n        shape: String\n      }\n    });\n    URLUtils._inherit(htmlNameToImpl.a.prototype);\n    define({\n      tag: \"area\",\n      name: \"HTMLAreaElement\",\n      ctor: function HTMLAreaElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        alt: String,\n        target: String,\n        download: String,\n        rel: String,\n        media: String,\n        href: URL,\n        hreflang: String,\n        type: String,\n        shape: String,\n        coords: String,\n        ping: String,\n        referrerPolicy: REFERRER,\n        noHref: Boolean\n      }\n    });\n    URLUtils._inherit(htmlNameToImpl.area.prototype);\n    define({\n      tag: \"br\",\n      name: \"HTMLBRElement\",\n      ctor: function HTMLBRElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        clear: String\n      }\n    });\n    define({\n      tag: \"base\",\n      name: \"HTMLBaseElement\",\n      ctor: function HTMLBaseElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        \"target\": String\n      }\n    });\n    define({\n      tag: \"body\",\n      name: \"HTMLBodyElement\",\n      ctor: function HTMLBodyElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      events: [\"afterprint\", \"beforeprint\", \"beforeunload\", \"blur\", \"error\", \"focus\", \"hashchange\", \"load\", \"message\", \"offline\", \"online\", \"pagehide\", \"pageshow\", \"popstate\", \"resize\", \"scroll\", \"storage\", \"unload\"],\n      attributes: {\n        text: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        link: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        vLink: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        aLink: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        bgColor: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        background: String\n      }\n    });\n    define({\n      tag: \"button\",\n      name: \"HTMLButtonElement\",\n      ctor: function HTMLButtonElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        name: String,\n        value: String,\n        disabled: Boolean,\n        autofocus: Boolean,\n        type: {\n          type: [\"submit\", \"reset\", \"button\", \"menu\"],\n          missing: \"submit\"\n        },\n        formTarget: String,\n        formAction: URL,\n        formNoValidate: Boolean,\n        formMethod: {\n          type: [\"get\", \"post\", \"dialog\"],\n          invalid: \"get\",\n          missing: \"\"\n        },\n        formEnctype: {\n          type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n          invalid: \"application/x-www-form-urlencoded\",\n          missing: \"\"\n        }\n      }\n    });\n    define({\n      tag: \"dl\",\n      name: \"HTMLDListElement\",\n      ctor: function HTMLDListElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        compact: Boolean\n      }\n    });\n    define({\n      tag: \"data\",\n      name: \"HTMLDataElement\",\n      ctor: function HTMLDataElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        value: String\n      }\n    });\n    define({\n      tag: \"datalist\",\n      name: \"HTMLDataListElement\",\n      ctor: function HTMLDataListElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"details\",\n      name: \"HTMLDetailsElement\",\n      ctor: function HTMLDetailsElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        \"open\": Boolean\n      }\n    });\n    define({\n      tag: \"div\",\n      name: \"HTMLDivElement\",\n      ctor: function HTMLDivElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String\n      }\n    });\n    define({\n      tag: \"embed\",\n      name: \"HTMLEmbedElement\",\n      ctor: function HTMLEmbedElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        src: URL,\n        type: String,\n        width: String,\n        height: String,\n        align: String,\n        name: String\n      }\n    });\n    define({\n      tag: \"fieldset\",\n      name: \"HTMLFieldSetElement\",\n      ctor: function HTMLFieldSetElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        disabled: Boolean,\n        name: String\n      }\n    });\n    define({\n      tag: \"form\",\n      name: \"HTMLFormElement\",\n      ctor: function HTMLFormElement2(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        action: String,\n        autocomplete: {\n          type: [\"on\", \"off\"],\n          missing: \"on\"\n        },\n        name: String,\n        acceptCharset: {\n          name: \"accept-charset\"\n        },\n        target: String,\n        noValidate: Boolean,\n        method: {\n          type: [\"get\", \"post\", \"dialog\"],\n          invalid: \"get\",\n          missing: \"get\"\n        },\n        enctype: {\n          type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n          invalid: \"application/x-www-form-urlencoded\",\n          missing: \"application/x-www-form-urlencoded\"\n        },\n        encoding: {\n          name: \"enctype\",\n          type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n          invalid: \"application/x-www-form-urlencoded\",\n          missing: \"application/x-www-form-urlencoded\"\n        }\n      }\n    });\n    define({\n      tag: \"hr\",\n      name: \"HTMLHRElement\",\n      ctor: function HTMLHRElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String,\n        color: String,\n        noShade: Boolean,\n        size: String,\n        width: String\n      }\n    });\n    define({\n      tag: \"head\",\n      name: \"HTMLHeadElement\",\n      ctor: function HTMLHeadElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tags: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n      name: \"HTMLHeadingElement\",\n      ctor: function HTMLHeadingElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String\n      }\n    });\n    define({\n      tag: \"html\",\n      name: \"HTMLHtmlElement\",\n      ctor: function HTMLHtmlElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        xmlns: URL,\n        version: String\n      }\n    });\n    define({\n      tag: \"iframe\",\n      name: \"HTMLIFrameElement\",\n      ctor: function HTMLIFrameElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        src: URL,\n        srcdoc: String,\n        name: String,\n        width: String,\n        height: String,\n        seamless: Boolean,\n        allow: Boolean,\n        allowFullscreen: Boolean,\n        allowUserMedia: Boolean,\n        allowPaymentRequest: Boolean,\n        referrerPolicy: REFERRER,\n        loading: {\n          type: [\"eager\", \"lazy\"],\n          treatNullAsEmptyString: true\n        },\n        align: String,\n        scrolling: String,\n        frameBorder: String,\n        longDesc: URL,\n        marginHeight: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        marginWidth: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tag: \"img\",\n      name: \"HTMLImageElement\",\n      ctor: function HTMLImageElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        alt: String,\n        src: URL,\n        srcset: String,\n        crossOrigin: CORS,\n        useMap: String,\n        isMap: Boolean,\n        sizes: String,\n        height: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        width: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        referrerPolicy: REFERRER,\n        loading: {\n          type: [\"eager\", \"lazy\"],\n          missing: \"\"\n        },\n        name: String,\n        lowsrc: URL,\n        align: String,\n        hspace: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        vspace: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        longDesc: URL,\n        border: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tag: \"input\",\n      name: \"HTMLInputElement\",\n      ctor: function HTMLInputElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        form: formAssociatedProps.form,\n        _post_click_activation_steps: {\n          value: function (e) {\n            if (this.type === \"checkbox\") {\n              this.checked = !this.checked;\n            } else if (this.type === \"radio\") {\n              var group = this.form.getElementsByName(this.name);\n              for (var i = group.length - 1; i >= 0; i--) {\n                var el = group[i];\n                el.checked = el === this;\n              }\n            }\n          }\n        }\n      },\n      attributes: {\n        name: String,\n        disabled: Boolean,\n        autofocus: Boolean,\n        accept: String,\n        alt: String,\n        max: String,\n        min: String,\n        pattern: String,\n        placeholder: String,\n        step: String,\n        dirName: String,\n        defaultValue: {\n          name: \"value\"\n        },\n        multiple: Boolean,\n        required: Boolean,\n        readOnly: Boolean,\n        checked: Boolean,\n        value: String,\n        src: URL,\n        defaultChecked: {\n          name: \"checked\",\n          type: Boolean\n        },\n        size: {\n          type: \"unsigned long\",\n          default: 20,\n          min: 1,\n          setmin: 1\n        },\n        width: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: 0\n        },\n        height: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: 0\n        },\n        minLength: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: -1\n        },\n        maxLength: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: -1\n        },\n        autocomplete: String,\n        type: {\n          type: [\"text\", \"hidden\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\", \"file\", \"submit\", \"image\", \"reset\", \"button\"],\n          missing: \"text\"\n        },\n        formTarget: String,\n        formNoValidate: Boolean,\n        formMethod: {\n          type: [\"get\", \"post\"],\n          invalid: \"get\",\n          missing: \"\"\n        },\n        formEnctype: {\n          type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n          invalid: \"application/x-www-form-urlencoded\",\n          missing: \"\"\n        },\n        inputMode: {\n          type: [\"verbatim\", \"latin\", \"latin-name\", \"latin-prose\", \"full-width-latin\", \"kana\", \"kana-name\", \"katakana\", \"numeric\", \"tel\", \"email\", \"url\"],\n          missing: \"\"\n        },\n        align: String,\n        useMap: String\n      }\n    });\n    define({\n      tag: \"keygen\",\n      name: \"HTMLKeygenElement\",\n      ctor: function HTMLKeygenElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        name: String,\n        disabled: Boolean,\n        autofocus: Boolean,\n        challenge: String,\n        keytype: {\n          type: [\"rsa\"],\n          missing: \"\"\n        }\n      }\n    });\n    define({\n      tag: \"li\",\n      name: \"HTMLLIElement\",\n      ctor: function HTMLLIElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        value: {\n          type: \"long\",\n          default: 0\n        },\n        type: String\n      }\n    });\n    define({\n      tag: \"label\",\n      name: \"HTMLLabelElement\",\n      ctor: function HTMLLabelElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        htmlFor: {\n          name: \"for\",\n          type: String\n        }\n      }\n    });\n    define({\n      tag: \"legend\",\n      name: \"HTMLLegendElement\",\n      ctor: function HTMLLegendElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String\n      }\n    });\n    define({\n      tag: \"link\",\n      name: \"HTMLLinkElement\",\n      ctor: function HTMLLinkElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        href: URL,\n        rel: String,\n        media: String,\n        hreflang: String,\n        type: String,\n        crossOrigin: CORS,\n        nonce: String,\n        integrity: String,\n        referrerPolicy: REFERRER,\n        imageSizes: String,\n        imageSrcset: String,\n        charset: String,\n        rev: String,\n        target: String\n      }\n    });\n    define({\n      tag: \"map\",\n      name: \"HTMLMapElement\",\n      ctor: function HTMLMapElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        name: String\n      }\n    });\n    define({\n      tag: \"menu\",\n      name: \"HTMLMenuElement\",\n      ctor: function HTMLMenuElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        type: {\n          type: [\"context\", \"popup\", \"toolbar\"],\n          missing: \"toolbar\"\n        },\n        label: String,\n        compact: Boolean\n      }\n    });\n    define({\n      tag: \"meta\",\n      name: \"HTMLMetaElement\",\n      ctor: function HTMLMetaElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        name: String,\n        content: String,\n        httpEquiv: {\n          name: \"http-equiv\",\n          type: String\n        },\n        scheme: String\n      }\n    });\n    define({\n      tag: \"meter\",\n      name: \"HTMLMeterElement\",\n      ctor: function HTMLMeterElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps\n    });\n    define({\n      tags: [\"ins\", \"del\"],\n      name: \"HTMLModElement\",\n      ctor: function HTMLModElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        cite: URL,\n        dateTime: String\n      }\n    });\n    define({\n      tag: \"ol\",\n      name: \"HTMLOListElement\",\n      ctor: function HTMLOListElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        _numitems: {\n          get: function () {\n            var items = 0;\n            this.childNodes.forEach(function (n) {\n              if (n.nodeType === Node.ELEMENT_NODE && n.tagName === \"LI\") items++;\n            });\n            return items;\n          }\n        }\n      },\n      attributes: {\n        type: String,\n        reversed: Boolean,\n        start: {\n          type: \"long\",\n          default: function () {\n            if (this.reversed) return this._numitems;else return 1;\n          }\n        },\n        compact: Boolean\n      }\n    });\n    define({\n      tag: \"object\",\n      name: \"HTMLObjectElement\",\n      ctor: function HTMLObjectElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        data: URL,\n        type: String,\n        name: String,\n        useMap: String,\n        typeMustMatch: Boolean,\n        width: String,\n        height: String,\n        align: String,\n        archive: String,\n        code: String,\n        declare: Boolean,\n        hspace: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        standby: String,\n        vspace: {\n          type: \"unsigned long\",\n          default: 0\n        },\n        codeBase: URL,\n        codeType: String,\n        border: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tag: \"optgroup\",\n      name: \"HTMLOptGroupElement\",\n      ctor: function HTMLOptGroupElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        disabled: Boolean,\n        label: String\n      }\n    });\n    define({\n      tag: \"option\",\n      name: \"HTMLOptionElement\",\n      ctor: function HTMLOptionElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        form: {\n          get: function () {\n            var p = this.parentNode;\n            while (p && p.nodeType === Node.ELEMENT_NODE) {\n              if (p.localName === \"select\") return p.form;\n              p = p.parentNode;\n            }\n          }\n        },\n        value: {\n          get: function () {\n            return this._getattr(\"value\") || this.text;\n          },\n          set: function (v) {\n            this._setattr(\"value\", v);\n          }\n        },\n        text: {\n          get: function () {\n            return this.textContent.replace(/[ \\t\\n\\f\\r]+/g, \" \").trim();\n          },\n          set: function (v) {\n            this.textContent = v;\n          }\n        }\n      },\n      attributes: {\n        disabled: Boolean,\n        defaultSelected: {\n          name: \"selected\",\n          type: Boolean\n        },\n        label: String\n      }\n    });\n    define({\n      tag: \"output\",\n      name: \"HTMLOutputElement\",\n      ctor: function HTMLOutputElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        name: String\n      }\n    });\n    define({\n      tag: \"p\",\n      name: \"HTMLParagraphElement\",\n      ctor: function HTMLParagraphElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String\n      }\n    });\n    define({\n      tag: \"param\",\n      name: \"HTMLParamElement\",\n      ctor: function HTMLParamElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        name: String,\n        value: String,\n        type: String,\n        valueType: String\n      }\n    });\n    define({\n      tags: [\"pre\", \"listing\", \"xmp\"],\n      name: \"HTMLPreElement\",\n      ctor: function HTMLPreElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        width: {\n          type: \"long\",\n          default: 0\n        }\n      }\n    });\n    define({\n      tag: \"progress\",\n      name: \"HTMLProgressElement\",\n      ctor: function HTMLProgressElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: formAssociatedProps,\n      attributes: {\n        max: {\n          type: Number,\n          float: true,\n          default: 1,\n          min: 0\n        }\n      }\n    });\n    define({\n      tags: [\"q\", \"blockquote\"],\n      name: \"HTMLQuoteElement\",\n      ctor: function HTMLQuoteElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        cite: URL\n      }\n    });\n    define({\n      tag: \"script\",\n      name: \"HTMLScriptElement\",\n      ctor: function HTMLScriptElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        text: {\n          get: function () {\n            var s = \"\";\n            for (var i = 0, n = this.childNodes.length; i < n; i++) {\n              var child = this.childNodes[i];\n              if (child.nodeType === Node.TEXT_NODE) s += child._data;\n            }\n            return s;\n          },\n          set: function (value) {\n            this.removeChildren();\n            if (value !== null && value !== \"\") {\n              this.appendChild(this.ownerDocument.createTextNode(value));\n            }\n          }\n        }\n      },\n      attributes: {\n        src: URL,\n        type: String,\n        charset: String,\n        referrerPolicy: REFERRER,\n        defer: Boolean,\n        async: Boolean,\n        nomodule: Boolean,\n        crossOrigin: CORS,\n        nonce: String,\n        integrity: String\n      }\n    });\n    define({\n      tag: \"select\",\n      name: \"HTMLSelectElement\",\n      ctor: function HTMLSelectElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        form: formAssociatedProps.form,\n        options: {\n          get: function () {\n            return this.getElementsByTagName(\"option\");\n          }\n        }\n      },\n      attributes: {\n        autocomplete: String,\n        name: String,\n        disabled: Boolean,\n        autofocus: Boolean,\n        multiple: Boolean,\n        required: Boolean,\n        size: {\n          type: \"unsigned long\",\n          default: 0\n        }\n      }\n    });\n    define({\n      tag: \"span\",\n      name: \"HTMLSpanElement\",\n      ctor: function HTMLSpanElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"style\",\n      name: \"HTMLStyleElement\",\n      ctor: function HTMLStyleElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        media: String,\n        type: String,\n        scoped: Boolean\n      }\n    });\n    define({\n      tag: \"caption\",\n      name: \"HTMLTableCaptionElement\",\n      ctor: function HTMLTableCaptionElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        align: String\n      }\n    });\n    define({\n      name: \"HTMLTableCellElement\",\n      ctor: function HTMLTableCellElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        colSpan: {\n          type: \"unsigned long\",\n          default: 1\n        },\n        rowSpan: {\n          type: \"unsigned long\",\n          default: 1\n        },\n        scope: {\n          type: [\"row\", \"col\", \"rowgroup\", \"colgroup\"],\n          missing: \"\"\n        },\n        abbr: String,\n        align: String,\n        axis: String,\n        height: String,\n        width: String,\n        ch: {\n          name: \"char\",\n          type: String\n        },\n        chOff: {\n          name: \"charoff\",\n          type: String\n        },\n        noWrap: Boolean,\n        vAlign: String,\n        bgColor: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tags: [\"col\", \"colgroup\"],\n      name: \"HTMLTableColElement\",\n      ctor: function HTMLTableColElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        span: {\n          type: \"limited unsigned long with fallback\",\n          default: 1,\n          min: 1\n        },\n        align: String,\n        ch: {\n          name: \"char\",\n          type: String\n        },\n        chOff: {\n          name: \"charoff\",\n          type: String\n        },\n        vAlign: String,\n        width: String\n      }\n    });\n    define({\n      tag: \"table\",\n      name: \"HTMLTableElement\",\n      ctor: function HTMLTableElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        rows: {\n          get: function () {\n            return this.getElementsByTagName(\"tr\");\n          }\n        }\n      },\n      attributes: {\n        align: String,\n        border: String,\n        frame: String,\n        rules: String,\n        summary: String,\n        width: String,\n        bgColor: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        cellPadding: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        cellSpacing: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tag: \"template\",\n      name: \"HTMLTemplateElement\",\n      ctor: function HTMLTemplateElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n        this._contentFragment = doc._templateDoc.createDocumentFragment();\n      },\n      props: {\n        content: {\n          get: function () {\n            return this._contentFragment;\n          }\n        },\n        serialize: {\n          value: function () {\n            return this.content.serialize();\n          }\n        }\n      }\n    });\n    define({\n      tag: \"tr\",\n      name: \"HTMLTableRowElement\",\n      ctor: function HTMLTableRowElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        cells: {\n          get: function () {\n            return this.querySelectorAll(\"td,th\");\n          }\n        }\n      },\n      attributes: {\n        align: String,\n        ch: {\n          name: \"char\",\n          type: String\n        },\n        chOff: {\n          name: \"charoff\",\n          type: String\n        },\n        vAlign: String,\n        bgColor: {\n          type: String,\n          treatNullAsEmptyString: true\n        }\n      }\n    });\n    define({\n      tags: [\"thead\", \"tfoot\", \"tbody\"],\n      name: \"HTMLTableSectionElement\",\n      ctor: function HTMLTableSectionElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        rows: {\n          get: function () {\n            return this.getElementsByTagName(\"tr\");\n          }\n        }\n      },\n      attributes: {\n        align: String,\n        ch: {\n          name: \"char\",\n          type: String\n        },\n        chOff: {\n          name: \"charoff\",\n          type: String\n        },\n        vAlign: String\n      }\n    });\n    define({\n      tag: \"textarea\",\n      name: \"HTMLTextAreaElement\",\n      ctor: function HTMLTextAreaElement(doc, localName, prefix) {\n        HTMLFormElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        form: formAssociatedProps.form,\n        type: {\n          get: function () {\n            return \"textarea\";\n          }\n        },\n        defaultValue: {\n          get: function () {\n            return this.textContent;\n          },\n          set: function (v) {\n            this.textContent = v;\n          }\n        },\n        value: {\n          get: function () {\n            return this.defaultValue;\n          },\n          set: function (v) {\n            this.defaultValue = v;\n          }\n        },\n        textLength: {\n          get: function () {\n            return this.value.length;\n          }\n        }\n      },\n      attributes: {\n        autocomplete: String,\n        name: String,\n        disabled: Boolean,\n        autofocus: Boolean,\n        placeholder: String,\n        wrap: String,\n        dirName: String,\n        required: Boolean,\n        readOnly: Boolean,\n        rows: {\n          type: \"limited unsigned long with fallback\",\n          default: 2\n        },\n        cols: {\n          type: \"limited unsigned long with fallback\",\n          default: 20\n        },\n        maxLength: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: -1\n        },\n        minLength: {\n          type: \"unsigned long\",\n          min: 0,\n          setmin: 0,\n          default: -1\n        },\n        inputMode: {\n          type: [\"verbatim\", \"latin\", \"latin-name\", \"latin-prose\", \"full-width-latin\", \"kana\", \"kana-name\", \"katakana\", \"numeric\", \"tel\", \"email\", \"url\"],\n          missing: \"\"\n        }\n      }\n    });\n    define({\n      tag: \"time\",\n      name: \"HTMLTimeElement\",\n      ctor: function HTMLTimeElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        dateTime: String,\n        pubDate: Boolean\n      }\n    });\n    define({\n      tag: \"title\",\n      name: \"HTMLTitleElement\",\n      ctor: function HTMLTitleElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        text: {\n          get: function () {\n            return this.textContent;\n          }\n        }\n      }\n    });\n    define({\n      tag: \"ul\",\n      name: \"HTMLUListElement\",\n      ctor: function HTMLUListElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        type: String,\n        compact: Boolean\n      }\n    });\n    define({\n      name: \"HTMLMediaElement\",\n      ctor: function HTMLMediaElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        src: URL,\n        crossOrigin: CORS,\n        preload: {\n          type: [\"metadata\", \"none\", \"auto\", {\n            value: \"\",\n            alias: \"auto\"\n          }],\n          missing: \"auto\"\n        },\n        loop: Boolean,\n        autoplay: Boolean,\n        mediaGroup: String,\n        controls: Boolean,\n        defaultMuted: {\n          name: \"muted\",\n          type: Boolean\n        }\n      }\n    });\n    define({\n      name: \"HTMLAudioElement\",\n      tag: \"audio\",\n      superclass: htmlElements.HTMLMediaElement,\n      ctor: function HTMLAudioElement(doc, localName, prefix) {\n        htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      name: \"HTMLVideoElement\",\n      tag: \"video\",\n      superclass: htmlElements.HTMLMediaElement,\n      ctor: function HTMLVideoElement(doc, localName, prefix) {\n        htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        poster: URL,\n        width: {\n          type: \"unsigned long\",\n          min: 0,\n          default: 0\n        },\n        height: {\n          type: \"unsigned long\",\n          min: 0,\n          default: 0\n        }\n      }\n    });\n    define({\n      tag: \"td\",\n      name: \"HTMLTableDataCellElement\",\n      superclass: htmlElements.HTMLTableCellElement,\n      ctor: function HTMLTableDataCellElement(doc, localName, prefix) {\n        htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"th\",\n      name: \"HTMLTableHeaderCellElement\",\n      superclass: htmlElements.HTMLTableCellElement,\n      ctor: function HTMLTableHeaderCellElement(doc, localName, prefix) {\n        htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"frameset\",\n      name: \"HTMLFrameSetElement\",\n      ctor: function HTMLFrameSetElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"frame\",\n      name: \"HTMLFrameElement\",\n      ctor: function HTMLFrameElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      }\n    });\n    define({\n      tag: \"canvas\",\n      name: \"HTMLCanvasElement\",\n      ctor: function HTMLCanvasElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        getContext: {\n          value: utils.nyi\n        },\n        probablySupportsContext: {\n          value: utils.nyi\n        },\n        setContext: {\n          value: utils.nyi\n        },\n        transferControlToProxy: {\n          value: utils.nyi\n        },\n        toDataURL: {\n          value: utils.nyi\n        },\n        toBlob: {\n          value: utils.nyi\n        }\n      },\n      attributes: {\n        width: {\n          type: \"unsigned long\",\n          default: 300\n        },\n        height: {\n          type: \"unsigned long\",\n          default: 150\n        }\n      }\n    });\n    define({\n      tag: \"dialog\",\n      name: \"HTMLDialogElement\",\n      ctor: function HTMLDialogElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        show: {\n          value: utils.nyi\n        },\n        showModal: {\n          value: utils.nyi\n        },\n        close: {\n          value: utils.nyi\n        }\n      },\n      attributes: {\n        open: Boolean,\n        returnValue: String\n      }\n    });\n    define({\n      tag: \"menuitem\",\n      name: \"HTMLMenuItemElement\",\n      ctor: function HTMLMenuItemElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      props: {\n        _label: {\n          get: function () {\n            var val = this._getattr(\"label\");\n            if (val !== null && val !== \"\") {\n              return val;\n            }\n            val = this.textContent;\n            return val.replace(/[ \\t\\n\\f\\r]+/g, \" \").trim();\n          }\n        },\n        label: {\n          get: function () {\n            var val = this._getattr(\"label\");\n            if (val !== null) {\n              return val;\n            }\n            return this._label;\n          },\n          set: function (v) {\n            this._setattr(\"label\", v);\n          }\n        }\n      },\n      attributes: {\n        type: {\n          type: [\"command\", \"checkbox\", \"radio\"],\n          missing: \"command\"\n        },\n        icon: URL,\n        disabled: Boolean,\n        checked: Boolean,\n        radiogroup: String,\n        default: Boolean\n      }\n    });\n    define({\n      tag: \"source\",\n      name: \"HTMLSourceElement\",\n      ctor: function HTMLSourceElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        srcset: String,\n        sizes: String,\n        media: String,\n        src: URL,\n        type: String,\n        width: String,\n        height: String\n      }\n    });\n    define({\n      tag: \"track\",\n      name: \"HTMLTrackElement\",\n      ctor: function HTMLTrackElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        src: URL,\n        srclang: String,\n        label: String,\n        default: Boolean,\n        kind: {\n          type: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n          missing: \"subtitles\",\n          invalid: \"metadata\"\n        }\n      },\n      props: {\n        NONE: {\n          get: function () {\n            return 0;\n          }\n        },\n        LOADING: {\n          get: function () {\n            return 1;\n          }\n        },\n        LOADED: {\n          get: function () {\n            return 2;\n          }\n        },\n        ERROR: {\n          get: function () {\n            return 3;\n          }\n        },\n        readyState: {\n          get: utils.nyi\n        },\n        track: {\n          get: utils.nyi\n        }\n      }\n    });\n    define({\n      tag: \"font\",\n      name: \"HTMLFontElement\",\n      ctor: function HTMLFontElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        color: {\n          type: String,\n          treatNullAsEmptyString: true\n        },\n        face: {\n          type: String\n        },\n        size: {\n          type: String\n        }\n      }\n    });\n    define({\n      tag: \"dir\",\n      name: \"HTMLDirectoryElement\",\n      ctor: function HTMLDirectoryElement(doc, localName, prefix) {\n        HTMLElement.call(this, doc, localName, prefix);\n      },\n      attributes: {\n        compact: Boolean\n      }\n    });\n    define({\n      tags: [\"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"cite\", \"content\", \"code\", \"dd\", \"dfn\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\", \"header\", \"hgroup\", \"i\", \"kbd\", \"main\", \"mark\", \"nav\", \"noscript\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"section\", \"small\", \"strong\", \"sub\", \"summary\", \"sup\", \"u\", \"var\", \"wbr\", \"acronym\", \"basefont\", \"big\", \"center\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"strike\", \"tt\"]\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/svg.js\nvar require_svg = __commonJS({\n  \"external/npm/node_modules/domino/lib/svg.js\"(exports) {\n    \"use strict\";\n\n    var Element = require_Element();\n    var defineElement = require_defineElement();\n    var utils = require_utils();\n    var CSSStyleDeclaration = require_CSSStyleDeclaration();\n    var svgElements = exports.elements = {};\n    var svgNameToImpl = /* @__PURE__ */Object.create(null);\n    exports.createElement = function (doc, localName, prefix) {\n      var impl = svgNameToImpl[localName] || SVGElement;\n      return new impl(doc, localName, prefix);\n    };\n    function define(spec) {\n      return defineElement(spec, SVGElement, svgElements, svgNameToImpl);\n    }\n    var SVGElement = define({\n      superclass: Element,\n      name: \"SVGElement\",\n      ctor: function SVGElement2(doc, localName, prefix) {\n        Element.call(this, doc, localName, utils.NAMESPACE.SVG, prefix);\n      },\n      props: {\n        style: {\n          get: function () {\n            if (!this._style) this._style = new CSSStyleDeclaration(this);\n            return this._style;\n          }\n        }\n      }\n    });\n    define({\n      name: \"SVGSVGElement\",\n      ctor: function SVGSVGElement(doc, localName, prefix) {\n        SVGElement.call(this, doc, localName, prefix);\n      },\n      tag: \"svg\",\n      props: {\n        createSVGRect: {\n          value: function () {\n            return exports.createElement(this.ownerDocument, \"rect\", null);\n          }\n        }\n      }\n    });\n    define({\n      tags: [\"a\", \"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\", \"script\", \"set\", \"stop\", \"style\", \"switch\", \"symbol\", \"text\", \"textPath\", \"title\", \"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/MutationConstants.js\nvar require_MutationConstants = __commonJS({\n  \"external/npm/node_modules/domino/lib/MutationConstants.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = {\n      VALUE: 1,\n      ATTR: 2,\n      REMOVE_ATTR: 3,\n      REMOVE: 4,\n      MOVE: 5,\n      INSERT: 6\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/Document.js\nvar require_Document = __commonJS({\n  \"external/npm/node_modules/domino/lib/Document.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = Document;\n    var Node = require_Node();\n    var NodeList = require_NodeList();\n    var ContainerNode = require_ContainerNode();\n    var Element = require_Element();\n    var Text = require_Text();\n    var Comment = require_Comment();\n    var Event = require_Event();\n    var DocumentFragment = require_DocumentFragment();\n    var ProcessingInstruction = require_ProcessingInstruction();\n    var DOMImplementation = require_DOMImplementation();\n    var TreeWalker = require_TreeWalker();\n    var NodeIterator = require_NodeIterator();\n    var NodeFilter = require_NodeFilter();\n    var URL = require_URL();\n    var select = require_select();\n    var events = require_events();\n    var xml = require_xmlnames();\n    var html = require_htmlelts();\n    var svg = require_svg();\n    var utils = require_utils();\n    var MUTATE = require_MutationConstants();\n    var NAMESPACE = utils.NAMESPACE;\n    var isApiWritable = require_config().isApiWritable;\n    function Document(isHTML, address) {\n      ContainerNode.call(this);\n      this.nodeType = Node.DOCUMENT_NODE;\n      this.isHTML = isHTML;\n      this._address = address || \"about:blank\";\n      this.readyState = \"loading\";\n      this.implementation = new DOMImplementation(this);\n      this.ownerDocument = null;\n      this._contentType = isHTML ? \"text/html\" : \"application/xml\";\n      this.doctype = null;\n      this.documentElement = null;\n      this._templateDocCache = null;\n      this._nodeIterators = null;\n      this._nid = 1;\n      this._nextnid = 2;\n      this._nodes = [null, this];\n      this.byId = /* @__PURE__ */Object.create(null);\n      this.modclock = 0;\n    }\n    var supportedEvents = {\n      event: \"Event\",\n      customevent: \"CustomEvent\",\n      uievent: \"UIEvent\",\n      mouseevent: \"MouseEvent\"\n    };\n    var replacementEvent = {\n      events: \"event\",\n      htmlevents: \"event\",\n      mouseevents: \"mouseevent\",\n      mutationevents: \"mutationevent\",\n      uievents: \"uievent\"\n    };\n    var mirrorAttr = function (f, name, defaultValue) {\n      return {\n        get: function () {\n          var o = f.call(this);\n          if (o) {\n            return o[name];\n          }\n          return defaultValue;\n        },\n        set: function (value) {\n          var o = f.call(this);\n          if (o) {\n            o[name] = value;\n          }\n        }\n      };\n    };\n    function validateAndExtract(namespace, qualifiedName) {\n      var prefix, localName, pos;\n      if (namespace === \"\") {\n        namespace = null;\n      }\n      if (!xml.isValidQName(qualifiedName)) {\n        utils.InvalidCharacterError();\n      }\n      prefix = null;\n      localName = qualifiedName;\n      pos = qualifiedName.indexOf(\":\");\n      if (pos >= 0) {\n        prefix = qualifiedName.substring(0, pos);\n        localName = qualifiedName.substring(pos + 1);\n      }\n      if (prefix !== null && namespace === null) {\n        utils.NamespaceError();\n      }\n      if (prefix === \"xml\" && namespace !== NAMESPACE.XML) {\n        utils.NamespaceError();\n      }\n      if ((prefix === \"xmlns\" || qualifiedName === \"xmlns\") && namespace !== NAMESPACE.XMLNS) {\n        utils.NamespaceError();\n      }\n      if (namespace === NAMESPACE.XMLNS && !(prefix === \"xmlns\" || qualifiedName === \"xmlns\")) {\n        utils.NamespaceError();\n      }\n      return {\n        namespace,\n        prefix,\n        localName\n      };\n    }\n    Document.prototype = Object.create(ContainerNode.prototype, {\n      _setMutationHandler: {\n        value: function (handler) {\n          this.mutationHandler = handler;\n        }\n      },\n      _dispatchRendererEvent: {\n        value: function (targetNid, type, details) {\n          var target = this._nodes[targetNid];\n          if (!target) return;\n          target._dispatchEvent(new Event(type, details), true);\n        }\n      },\n      nodeName: {\n        value: \"#document\"\n      },\n      nodeValue: {\n        get: function () {\n          return null;\n        },\n        set: function () {}\n      },\n      documentURI: {\n        get: function () {\n          return this._address;\n        },\n        set: utils.nyi\n      },\n      compatMode: {\n        get: function () {\n          return this._quirks ? \"BackCompat\" : \"CSS1Compat\";\n        }\n      },\n      createTextNode: {\n        value: function (data) {\n          return new Text(this, String(data));\n        }\n      },\n      createComment: {\n        value: function (data) {\n          return new Comment(this, data);\n        }\n      },\n      createDocumentFragment: {\n        value: function () {\n          return new DocumentFragment(this);\n        }\n      },\n      createProcessingInstruction: {\n        value: function (target, data) {\n          if (!xml.isValidName(target) || data.indexOf(\"?>\") !== -1) utils.InvalidCharacterError();\n          return new ProcessingInstruction(this, target, data);\n        }\n      },\n      createAttribute: {\n        value: function (localName) {\n          localName = String(localName);\n          if (!xml.isValidName(localName)) utils.InvalidCharacterError();\n          if (this.isHTML) {\n            localName = utils.toASCIILowerCase(localName);\n          }\n          return new Element._Attr(null, localName, null, null, \"\");\n        }\n      },\n      createAttributeNS: {\n        value: function (namespace, qualifiedName) {\n          namespace = namespace === null || namespace === void 0 || namespace === \"\" ? null : String(namespace);\n          qualifiedName = String(qualifiedName);\n          var ve = validateAndExtract(namespace, qualifiedName);\n          return new Element._Attr(null, ve.localName, ve.prefix, ve.namespace, \"\");\n        }\n      },\n      createElement: {\n        value: function (localName) {\n          localName = String(localName);\n          if (!xml.isValidName(localName)) utils.InvalidCharacterError();\n          if (this.isHTML) {\n            if (/[A-Z]/.test(localName)) localName = utils.toASCIILowerCase(localName);\n            return html.createElement(this, localName, null);\n          } else if (this.contentType === \"application/xhtml+xml\") {\n            return html.createElement(this, localName, null);\n          } else {\n            return new Element(this, localName, null, null);\n          }\n        },\n        writable: isApiWritable\n      },\n      createElementNS: {\n        value: function (namespace, qualifiedName) {\n          namespace = namespace === null || namespace === void 0 || namespace === \"\" ? null : String(namespace);\n          qualifiedName = String(qualifiedName);\n          var ve = validateAndExtract(namespace, qualifiedName);\n          return this._createElementNS(ve.localName, ve.namespace, ve.prefix);\n        },\n        writable: isApiWritable\n      },\n      _createElementNS: {\n        value: function (localName, namespace, prefix) {\n          if (namespace === NAMESPACE.HTML) {\n            return html.createElement(this, localName, prefix);\n          } else if (namespace === NAMESPACE.SVG) {\n            return svg.createElement(this, localName, prefix);\n          }\n          return new Element(this, localName, namespace, prefix);\n        }\n      },\n      createEvent: {\n        value: function createEvent(interfaceName) {\n          interfaceName = interfaceName.toLowerCase();\n          var name = replacementEvent[interfaceName] || interfaceName;\n          var constructor = events[supportedEvents[name]];\n          if (constructor) {\n            var e = new constructor();\n            e._initialized = false;\n            return e;\n          } else {\n            utils.NotSupportedError();\n          }\n        }\n      },\n      createTreeWalker: {\n        value: function (root2, whatToShow, filter) {\n          if (!root2) {\n            throw new TypeError(\"root argument is required\");\n          }\n          if (!(root2 instanceof Node)) {\n            throw new TypeError(\"root not a node\");\n          }\n          whatToShow = whatToShow === void 0 ? NodeFilter.SHOW_ALL : +whatToShow;\n          filter = filter === void 0 ? null : filter;\n          return new TreeWalker(root2, whatToShow, filter);\n        }\n      },\n      createNodeIterator: {\n        value: function (root2, whatToShow, filter) {\n          if (!root2) {\n            throw new TypeError(\"root argument is required\");\n          }\n          if (!(root2 instanceof Node)) {\n            throw new TypeError(\"root not a node\");\n          }\n          whatToShow = whatToShow === void 0 ? NodeFilter.SHOW_ALL : +whatToShow;\n          filter = filter === void 0 ? null : filter;\n          return new NodeIterator(root2, whatToShow, filter);\n        }\n      },\n      _attachNodeIterator: {\n        value: function (ni) {\n          if (!this._nodeIterators) {\n            this._nodeIterators = [];\n          }\n          this._nodeIterators.push(ni);\n        }\n      },\n      _detachNodeIterator: {\n        value: function (ni) {\n          var idx = this._nodeIterators.indexOf(ni);\n          this._nodeIterators.splice(idx, 1);\n        }\n      },\n      _preremoveNodeIterators: {\n        value: function (toBeRemoved) {\n          if (this._nodeIterators) {\n            this._nodeIterators.forEach(function (ni) {\n              ni._preremove(toBeRemoved);\n            });\n          }\n        }\n      },\n      _updateDocTypeElement: {\n        value: function _updateDocTypeElement() {\n          this.doctype = this.documentElement = null;\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            if (kid.nodeType === Node.DOCUMENT_TYPE_NODE) this.doctype = kid;else if (kid.nodeType === Node.ELEMENT_NODE) this.documentElement = kid;\n          }\n        }\n      },\n      insertBefore: {\n        value: function insertBefore(child, refChild) {\n          Node.prototype.insertBefore.call(this, child, refChild);\n          this._updateDocTypeElement();\n          return child;\n        }\n      },\n      replaceChild: {\n        value: function replaceChild(node, child) {\n          Node.prototype.replaceChild.call(this, node, child);\n          this._updateDocTypeElement();\n          return child;\n        }\n      },\n      removeChild: {\n        value: function removeChild(child) {\n          Node.prototype.removeChild.call(this, child);\n          this._updateDocTypeElement();\n          return child;\n        }\n      },\n      getElementById: {\n        value: function (id) {\n          var n = this.byId[id];\n          if (!n) return null;\n          if (n instanceof MultiId) {\n            return n.getFirst();\n          }\n          return n;\n        }\n      },\n      _hasMultipleElementsWithId: {\n        value: function (id) {\n          return this.byId[id] instanceof MultiId;\n        }\n      },\n      getElementsByName: {\n        value: Element.prototype.getElementsByName\n      },\n      getElementsByTagName: {\n        value: Element.prototype.getElementsByTagName\n      },\n      getElementsByTagNameNS: {\n        value: Element.prototype.getElementsByTagNameNS\n      },\n      getElementsByClassName: {\n        value: Element.prototype.getElementsByClassName\n      },\n      adoptNode: {\n        value: function adoptNode(node) {\n          if (node.nodeType === Node.DOCUMENT_NODE) utils.NotSupportedError();\n          if (node.nodeType === Node.ATTRIBUTE_NODE) {\n            return node;\n          }\n          if (node.parentNode) node.parentNode.removeChild(node);\n          if (node.ownerDocument !== this) recursivelySetOwner(node, this);\n          return node;\n        }\n      },\n      importNode: {\n        value: function importNode(node, deep) {\n          return this.adoptNode(node.cloneNode(deep));\n        },\n        writable: isApiWritable\n      },\n      origin: {\n        get: function origin() {\n          return null;\n        }\n      },\n      characterSet: {\n        get: function characterSet() {\n          return \"UTF-8\";\n        }\n      },\n      contentType: {\n        get: function contentType() {\n          return this._contentType;\n        }\n      },\n      URL: {\n        get: function URL2() {\n          return this._address;\n        }\n      },\n      domain: {\n        get: utils.nyi,\n        set: utils.nyi\n      },\n      referrer: {\n        get: utils.nyi\n      },\n      cookie: {\n        get: utils.nyi,\n        set: utils.nyi\n      },\n      lastModified: {\n        get: utils.nyi\n      },\n      location: {\n        get: function () {\n          return this.defaultView ? this.defaultView.location : null;\n        },\n        set: utils.nyi\n      },\n      _titleElement: {\n        get: function () {\n          return this.getElementsByTagName(\"title\").item(0) || null;\n        }\n      },\n      title: {\n        get: function () {\n          var elt = this._titleElement;\n          var value = elt ? elt.textContent : \"\";\n          return value.replace(/[ \\t\\n\\r\\f]+/g, \" \").replace(/(^ )|( $)/g, \"\");\n        },\n        set: function (value) {\n          var elt = this._titleElement;\n          var head = this.head;\n          if (!elt && !head) {\n            return;\n          }\n          if (!elt) {\n            elt = this.createElement(\"title\");\n            head.appendChild(elt);\n          }\n          elt.textContent = value;\n        }\n      },\n      dir: mirrorAttr(function () {\n        var htmlElement = this.documentElement;\n        if (htmlElement && htmlElement.tagName === \"HTML\") {\n          return htmlElement;\n        }\n      }, \"dir\", \"\"),\n      fgColor: mirrorAttr(function () {\n        return this.body;\n      }, \"text\", \"\"),\n      linkColor: mirrorAttr(function () {\n        return this.body;\n      }, \"link\", \"\"),\n      vlinkColor: mirrorAttr(function () {\n        return this.body;\n      }, \"vLink\", \"\"),\n      alinkColor: mirrorAttr(function () {\n        return this.body;\n      }, \"aLink\", \"\"),\n      bgColor: mirrorAttr(function () {\n        return this.body;\n      }, \"bgColor\", \"\"),\n      charset: {\n        get: function () {\n          return this.characterSet;\n        }\n      },\n      inputEncoding: {\n        get: function () {\n          return this.characterSet;\n        }\n      },\n      scrollingElement: {\n        get: function () {\n          return this._quirks ? this.body : this.documentElement;\n        }\n      },\n      body: {\n        get: function () {\n          return namedHTMLChild(this.documentElement, \"body\");\n        },\n        set: utils.nyi\n      },\n      head: {\n        get: function () {\n          return namedHTMLChild(this.documentElement, \"head\");\n        }\n      },\n      images: {\n        get: utils.nyi\n      },\n      embeds: {\n        get: utils.nyi\n      },\n      plugins: {\n        get: utils.nyi\n      },\n      links: {\n        get: utils.nyi\n      },\n      forms: {\n        get: utils.nyi\n      },\n      scripts: {\n        get: utils.nyi\n      },\n      applets: {\n        get: function () {\n          return [];\n        }\n      },\n      activeElement: {\n        get: function () {\n          return null;\n        }\n      },\n      innerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: utils.nyi\n      },\n      outerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: utils.nyi\n      },\n      write: {\n        value: function (args) {\n          if (!this.isHTML) utils.InvalidStateError();\n          if (!this._parser) return;\n          if (!this._parser) {}\n          var s = arguments.join(\"\");\n          this._parser.parse(s);\n        }\n      },\n      writeln: {\n        value: function writeln(args) {\n          this.write(Array.prototype.join.call(arguments, \"\") + \"\\n\");\n        }\n      },\n      open: {\n        value: function () {\n          this.documentElement = null;\n        }\n      },\n      close: {\n        value: function () {\n          this.readyState = \"interactive\";\n          this._dispatchEvent(new Event(\"readystatechange\"), true);\n          this._dispatchEvent(new Event(\"DOMContentLoaded\"), true);\n          this.readyState = \"complete\";\n          this._dispatchEvent(new Event(\"readystatechange\"), true);\n          if (this.defaultView) {\n            this.defaultView._dispatchEvent(new Event(\"load\"), true);\n          }\n        }\n      },\n      clone: {\n        value: function clone() {\n          var d = new Document(this.isHTML, this._address);\n          d._quirks = this._quirks;\n          d._contentType = this._contentType;\n          return d;\n        }\n      },\n      cloneNode: {\n        value: function cloneNode(deep) {\n          var clone = Node.prototype.cloneNode.call(this, false);\n          if (deep) {\n            for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n              clone._appendChild(clone.importNode(kid, true));\n            }\n          }\n          clone._updateDocTypeElement();\n          return clone;\n        }\n      },\n      isEqual: {\n        value: function isEqual(n) {\n          return true;\n        }\n      },\n      mutateValue: {\n        value: function (node) {\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.VALUE,\n              target: node,\n              data: node.data\n            });\n          }\n        }\n      },\n      mutateAttr: {\n        value: function (attr, oldval) {\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.ATTR,\n              target: attr.ownerElement,\n              attr\n            });\n          }\n        }\n      },\n      mutateRemoveAttr: {\n        value: function (attr) {\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.REMOVE_ATTR,\n              target: attr.ownerElement,\n              attr\n            });\n          }\n        }\n      },\n      mutateRemove: {\n        value: function (node) {\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.REMOVE,\n              target: node.parentNode,\n              node\n            });\n          }\n          recursivelyUproot(node);\n        }\n      },\n      mutateInsert: {\n        value: function (node) {\n          recursivelyRoot(node);\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.INSERT,\n              target: node.parentNode,\n              node\n            });\n          }\n        }\n      },\n      mutateMove: {\n        value: function (node) {\n          if (this.mutationHandler) {\n            this.mutationHandler({\n              type: MUTATE.MOVE,\n              target: node\n            });\n          }\n        }\n      },\n      addId: {\n        value: function addId(id, n) {\n          var val = this.byId[id];\n          if (!val) {\n            this.byId[id] = n;\n          } else {\n            if (!(val instanceof MultiId)) {\n              val = new MultiId(val);\n              this.byId[id] = val;\n            }\n            val.add(n);\n          }\n        }\n      },\n      delId: {\n        value: function delId(id, n) {\n          var val = this.byId[id];\n          utils.assert(val);\n          if (val instanceof MultiId) {\n            val.del(n);\n            if (val.length === 1) {\n              this.byId[id] = val.downgrade();\n            }\n          } else {\n            this.byId[id] = void 0;\n          }\n        }\n      },\n      _resolve: {\n        value: function (href) {\n          return new URL(this._documentBaseURL).resolve(href);\n        }\n      },\n      _documentBaseURL: {\n        get: function () {\n          var url = this._address;\n          if (url === \"about:blank\") url = \"/\";\n          var base = this.querySelector(\"base[href]\");\n          if (base) {\n            return new URL(url).resolve(base.getAttribute(\"href\"));\n          }\n          return url;\n        }\n      },\n      _templateDoc: {\n        get: function () {\n          if (!this._templateDocCache) {\n            var newDoc = new Document(this.isHTML, this._address);\n            this._templateDocCache = newDoc._templateDocCache = newDoc;\n          }\n          return this._templateDocCache;\n        }\n      },\n      querySelector: {\n        value: function (selector) {\n          return select(selector, this)[0];\n        }\n      },\n      querySelectorAll: {\n        value: function (selector) {\n          var nodes = select(selector, this);\n          return nodes.item ? nodes : new NodeList(nodes);\n        }\n      }\n    });\n    var eventHandlerTypes = [\"abort\", \"canplay\", \"canplaythrough\", \"change\", \"click\", \"contextmenu\", \"cuechange\", \"dblclick\", \"drag\", \"dragend\", \"dragenter\", \"dragleave\", \"dragover\", \"dragstart\", \"drop\", \"durationchange\", \"emptied\", \"ended\", \"input\", \"invalid\", \"keydown\", \"keypress\", \"keyup\", \"loadeddata\", \"loadedmetadata\", \"loadstart\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"mousewheel\", \"pause\", \"play\", \"playing\", \"progress\", \"ratechange\", \"readystatechange\", \"reset\", \"seeked\", \"seeking\", \"select\", \"show\", \"stalled\", \"submit\", \"suspend\", \"timeupdate\", \"volumechange\", \"waiting\", \"blur\", \"error\", \"focus\", \"load\", \"scroll\"];\n    eventHandlerTypes.forEach(function (type) {\n      Object.defineProperty(Document.prototype, \"on\" + type, {\n        get: function () {\n          return this._getEventHandler(type);\n        },\n        set: function (v) {\n          this._setEventHandler(type, v);\n        }\n      });\n    });\n    function namedHTMLChild(parent, name) {\n      if (parent && parent.isHTML) {\n        for (var kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {\n          if (kid.nodeType === Node.ELEMENT_NODE && kid.localName === name && kid.namespaceURI === NAMESPACE.HTML) {\n            return kid;\n          }\n        }\n      }\n      return null;\n    }\n    function root(n) {\n      n._nid = n.ownerDocument._nextnid++;\n      n.ownerDocument._nodes[n._nid] = n;\n      if (n.nodeType === Node.ELEMENT_NODE) {\n        var id = n.getAttribute(\"id\");\n        if (id) n.ownerDocument.addId(id, n);\n        if (n._roothook) n._roothook();\n      }\n    }\n    function uproot(n) {\n      if (n.nodeType === Node.ELEMENT_NODE) {\n        var id = n.getAttribute(\"id\");\n        if (id) n.ownerDocument.delId(id, n);\n      }\n      n.ownerDocument._nodes[n._nid] = void 0;\n      n._nid = void 0;\n    }\n    function recursivelyRoot(node) {\n      root(node);\n      if (node.nodeType === Node.ELEMENT_NODE) {\n        for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyRoot(kid);\n      }\n    }\n    function recursivelyUproot(node) {\n      uproot(node);\n      for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyUproot(kid);\n    }\n    function recursivelySetOwner(node, owner) {\n      node.ownerDocument = owner;\n      node._lastModTime = void 0;\n      if (Object.prototype.hasOwnProperty.call(node, \"_tagName\")) {\n        node._tagName = void 0;\n      }\n      for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelySetOwner(kid, owner);\n    }\n    function MultiId(node) {\n      this.nodes = /* @__PURE__ */Object.create(null);\n      this.nodes[node._nid] = node;\n      this.length = 1;\n      this.firstNode = void 0;\n    }\n    MultiId.prototype.add = function (node) {\n      if (!this.nodes[node._nid]) {\n        this.nodes[node._nid] = node;\n        this.length++;\n        this.firstNode = void 0;\n      }\n    };\n    MultiId.prototype.del = function (node) {\n      if (this.nodes[node._nid]) {\n        delete this.nodes[node._nid];\n        this.length--;\n        this.firstNode = void 0;\n      }\n    };\n    MultiId.prototype.getFirst = function () {\n      if (!this.firstNode) {\n        var nid;\n        for (nid in this.nodes) {\n          if (this.firstNode === void 0 || this.firstNode.compareDocumentPosition(this.nodes[nid]) & Node.DOCUMENT_POSITION_PRECEDING) {\n            this.firstNode = this.nodes[nid];\n          }\n        }\n      }\n      return this.firstNode;\n    };\n    MultiId.prototype.downgrade = function () {\n      if (this.length === 1) {\n        var nid;\n        for (nid in this.nodes) {\n          return this.nodes[nid];\n        }\n      }\n      return this;\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/DocumentType.js\nvar require_DocumentType = __commonJS({\n  \"external/npm/node_modules/domino/lib/DocumentType.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = DocumentType;\n    var Node = require_Node();\n    var Leaf = require_Leaf();\n    var ChildNode = require_ChildNode();\n    function DocumentType(ownerDocument, name, publicId, systemId) {\n      Leaf.call(this);\n      this.nodeType = Node.DOCUMENT_TYPE_NODE;\n      this.ownerDocument = ownerDocument || null;\n      this.name = name;\n      this.publicId = publicId || \"\";\n      this.systemId = systemId || \"\";\n    }\n    DocumentType.prototype = Object.create(Leaf.prototype, {\n      nodeName: {\n        get: function () {\n          return this.name;\n        }\n      },\n      nodeValue: {\n        get: function () {\n          return null;\n        },\n        set: function () {}\n      },\n      clone: {\n        value: function clone() {\n          return new DocumentType(this.ownerDocument, this.name, this.publicId, this.systemId);\n        }\n      },\n      isEqual: {\n        value: function isEqual(n) {\n          return this.name === n.name && this.publicId === n.publicId && this.systemId === n.systemId;\n        }\n      }\n    });\n    Object.defineProperties(DocumentType.prototype, ChildNode);\n  }\n});\n\n// external/npm/node_modules/domino/lib/HTMLParser.js\nvar require_HTMLParser = __commonJS({\n  \"external/npm/node_modules/domino/lib/HTMLParser.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = HTMLParser;\n    var Document = require_Document();\n    var DocumentType = require_DocumentType();\n    var Node = require_Node();\n    var NAMESPACE = require_utils().NAMESPACE;\n    var html = require_htmlelts();\n    var impl = html.elements;\n    var pushAll = Function.prototype.apply.bind(Array.prototype.push);\n    var EOF = -1;\n    var TEXT = 1;\n    var TAG = 2;\n    var ENDTAG = 3;\n    var COMMENT = 4;\n    var DOCTYPE = 5;\n    var NOATTRS = [];\n    var quirkyPublicIds = /^HTML$|^-\\/\\/W3O\\/\\/DTD W3 HTML Strict 3\\.0\\/\\/EN\\/\\/$|^-\\/W3C\\/DTD HTML 4\\.0 Transitional\\/EN$|^\\+\\/\\/Silmaril\\/\\/dtd html Pro v0r11 19970101\\/\\/|^-\\/\\/AdvaSoft Ltd\\/\\/DTD HTML 3\\.0 asWedit \\+ extensions\\/\\/|^-\\/\\/AS\\/\\/DTD HTML 3\\.0 asWedit \\+ extensions\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.1E\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.2 Final\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML\\/\\/|^-\\/\\/Metrius\\/\\/DTD Metrius Presentational\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 HTML Strict\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 HTML\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 Tables\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 HTML Strict\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 HTML\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 Tables\\/\\/|^-\\/\\/Netscape Comm\\. Corp\\.\\/\\/DTD HTML\\/\\/|^-\\/\\/Netscape Comm\\. Corp\\.\\/\\/DTD Strict HTML\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML 2\\.0\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML Extended 1\\.0\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML Extended Relaxed 1\\.0\\/\\/|^-\\/\\/SoftQuad Software\\/\\/DTD HoTMetaL PRO 6\\.0::19990601::extensions to HTML 4\\.0\\/\\/|^-\\/\\/SoftQuad\\/\\/DTD HoTMetaL PRO 4\\.0::19971010::extensions to HTML 4\\.0\\/\\/|^-\\/\\/Spyglass\\/\\/DTD HTML 2\\.0 Extended\\/\\/|^-\\/\\/SQ\\/\\/DTD HTML 2\\.0 HoTMetaL \\+ extensions\\/\\/|^-\\/\\/Sun Microsystems Corp\\.\\/\\/DTD HotJava HTML\\/\\/|^-\\/\\/Sun Microsystems Corp\\.\\/\\/DTD HotJava Strict HTML\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3 1995-03-24\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2 Draft\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2 Final\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2S Draft\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.0 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.0 Transitional\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML Experimental 19960712\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML Experimental 970421\\/\\/|^-\\/\\/W3C\\/\\/DTD W3 HTML\\/\\/|^-\\/\\/W3O\\/\\/DTD W3 HTML 3\\.0\\/\\/|^-\\/\\/WebTechs\\/\\/DTD Mozilla HTML 2\\.0\\/\\/|^-\\/\\/WebTechs\\/\\/DTD Mozilla HTML\\/\\//i;\n    var quirkySystemId = \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\";\n    var conditionallyQuirkyPublicIds = /^-\\/\\/W3C\\/\\/DTD HTML 4\\.01 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.01 Transitional\\/\\//i;\n    var limitedQuirkyPublicIds = /^-\\/\\/W3C\\/\\/DTD XHTML 1\\.0 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD XHTML 1\\.0 Transitional\\/\\//i;\n    var specialSet = /* @__PURE__ */Object.create(null);\n    specialSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"address\": true,\n      \"applet\": true,\n      \"area\": true,\n      \"article\": true,\n      \"aside\": true,\n      \"base\": true,\n      \"basefont\": true,\n      \"bgsound\": true,\n      \"blockquote\": true,\n      \"body\": true,\n      \"br\": true,\n      \"button\": true,\n      \"caption\": true,\n      \"center\": true,\n      \"col\": true,\n      \"colgroup\": true,\n      \"dd\": true,\n      \"details\": true,\n      \"dir\": true,\n      \"div\": true,\n      \"dl\": true,\n      \"dt\": true,\n      \"embed\": true,\n      \"fieldset\": true,\n      \"figcaption\": true,\n      \"figure\": true,\n      \"footer\": true,\n      \"form\": true,\n      \"frame\": true,\n      \"frameset\": true,\n      \"h1\": true,\n      \"h2\": true,\n      \"h3\": true,\n      \"h4\": true,\n      \"h5\": true,\n      \"h6\": true,\n      \"head\": true,\n      \"header\": true,\n      \"hgroup\": true,\n      \"hr\": true,\n      \"html\": true,\n      \"iframe\": true,\n      \"img\": true,\n      \"input\": true,\n      \"li\": true,\n      \"link\": true,\n      \"listing\": true,\n      \"main\": true,\n      \"marquee\": true,\n      \"menu\": true,\n      \"meta\": true,\n      \"nav\": true,\n      \"noembed\": true,\n      \"noframes\": true,\n      \"noscript\": true,\n      \"object\": true,\n      \"ol\": true,\n      \"p\": true,\n      \"param\": true,\n      \"plaintext\": true,\n      \"pre\": true,\n      \"script\": true,\n      \"section\": true,\n      \"select\": true,\n      \"source\": true,\n      \"style\": true,\n      \"summary\": true,\n      \"table\": true,\n      \"tbody\": true,\n      \"td\": true,\n      \"template\": true,\n      \"textarea\": true,\n      \"tfoot\": true,\n      \"th\": true,\n      \"thead\": true,\n      \"title\": true,\n      \"tr\": true,\n      \"track\": true,\n      \"ul\": true,\n      \"wbr\": true,\n      \"xmp\": true\n    };\n    specialSet[NAMESPACE.SVG] = {\n      __proto__: null,\n      \"foreignObject\": true,\n      \"desc\": true,\n      \"title\": true\n    };\n    specialSet[NAMESPACE.MATHML] = {\n      __proto__: null,\n      \"mi\": true,\n      \"mo\": true,\n      \"mn\": true,\n      \"ms\": true,\n      \"mtext\": true,\n      \"annotation-xml\": true\n    };\n    var addressdivpSet = /* @__PURE__ */Object.create(null);\n    addressdivpSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"address\": true,\n      \"div\": true,\n      \"p\": true\n    };\n    var dddtSet = /* @__PURE__ */Object.create(null);\n    dddtSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"dd\": true,\n      \"dt\": true\n    };\n    var tablesectionrowSet = /* @__PURE__ */Object.create(null);\n    tablesectionrowSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"table\": true,\n      \"thead\": true,\n      \"tbody\": true,\n      \"tfoot\": true,\n      \"tr\": true\n    };\n    var impliedEndTagsSet = /* @__PURE__ */Object.create(null);\n    impliedEndTagsSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"dd\": true,\n      \"dt\": true,\n      \"li\": true,\n      \"menuitem\": true,\n      \"optgroup\": true,\n      \"option\": true,\n      \"p\": true,\n      \"rb\": true,\n      \"rp\": true,\n      \"rt\": true,\n      \"rtc\": true\n    };\n    var thoroughImpliedEndTagsSet = /* @__PURE__ */Object.create(null);\n    thoroughImpliedEndTagsSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"caption\": true,\n      \"colgroup\": true,\n      \"dd\": true,\n      \"dt\": true,\n      \"li\": true,\n      \"optgroup\": true,\n      \"option\": true,\n      \"p\": true,\n      \"rb\": true,\n      \"rp\": true,\n      \"rt\": true,\n      \"rtc\": true,\n      \"tbody\": true,\n      \"td\": true,\n      \"tfoot\": true,\n      \"th\": true,\n      \"thead\": true,\n      \"tr\": true\n    };\n    var tableContextSet = /* @__PURE__ */Object.create(null);\n    tableContextSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"table\": true,\n      \"template\": true,\n      \"html\": true\n    };\n    var tableBodyContextSet = /* @__PURE__ */Object.create(null);\n    tableBodyContextSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"tbody\": true,\n      \"tfoot\": true,\n      \"thead\": true,\n      \"template\": true,\n      \"html\": true\n    };\n    var tableRowContextSet = /* @__PURE__ */Object.create(null);\n    tableRowContextSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"tr\": true,\n      \"template\": true,\n      \"html\": true\n    };\n    var formassociatedSet = /* @__PURE__ */Object.create(null);\n    formassociatedSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"button\": true,\n      \"fieldset\": true,\n      \"input\": true,\n      \"keygen\": true,\n      \"object\": true,\n      \"output\": true,\n      \"select\": true,\n      \"textarea\": true,\n      \"img\": true\n    };\n    var inScopeSet = /* @__PURE__ */Object.create(null);\n    inScopeSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"applet\": true,\n      \"caption\": true,\n      \"html\": true,\n      \"table\": true,\n      \"td\": true,\n      \"th\": true,\n      \"marquee\": true,\n      \"object\": true,\n      \"template\": true\n    };\n    inScopeSet[NAMESPACE.MATHML] = {\n      __proto__: null,\n      \"mi\": true,\n      \"mo\": true,\n      \"mn\": true,\n      \"ms\": true,\n      \"mtext\": true,\n      \"annotation-xml\": true\n    };\n    inScopeSet[NAMESPACE.SVG] = {\n      __proto__: null,\n      \"foreignObject\": true,\n      \"desc\": true,\n      \"title\": true\n    };\n    var inListItemScopeSet = Object.create(inScopeSet);\n    inListItemScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);\n    inListItemScopeSet[NAMESPACE.HTML].ol = true;\n    inListItemScopeSet[NAMESPACE.HTML].ul = true;\n    var inButtonScopeSet = Object.create(inScopeSet);\n    inButtonScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);\n    inButtonScopeSet[NAMESPACE.HTML].button = true;\n    var inTableScopeSet = /* @__PURE__ */Object.create(null);\n    inTableScopeSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"html\": true,\n      \"table\": true,\n      \"template\": true\n    };\n    var invertedSelectScopeSet = /* @__PURE__ */Object.create(null);\n    invertedSelectScopeSet[NAMESPACE.HTML] = {\n      __proto__: null,\n      \"optgroup\": true,\n      \"option\": true\n    };\n    var mathmlTextIntegrationPointSet = /* @__PURE__ */Object.create(null);\n    mathmlTextIntegrationPointSet[NAMESPACE.MATHML] = {\n      __proto__: null,\n      mi: true,\n      mo: true,\n      mn: true,\n      ms: true,\n      mtext: true\n    };\n    var htmlIntegrationPointSet = /* @__PURE__ */Object.create(null);\n    htmlIntegrationPointSet[NAMESPACE.SVG] = {\n      __proto__: null,\n      foreignObject: true,\n      desc: true,\n      title: true\n    };\n    var foreignAttributes = {\n      __proto__: null,\n      \"xlink:actuate\": NAMESPACE.XLINK,\n      \"xlink:arcrole\": NAMESPACE.XLINK,\n      \"xlink:href\": NAMESPACE.XLINK,\n      \"xlink:role\": NAMESPACE.XLINK,\n      \"xlink:show\": NAMESPACE.XLINK,\n      \"xlink:title\": NAMESPACE.XLINK,\n      \"xlink:type\": NAMESPACE.XLINK,\n      \"xml:base\": NAMESPACE.XML,\n      \"xml:lang\": NAMESPACE.XML,\n      \"xml:space\": NAMESPACE.XML,\n      \"xmlns\": NAMESPACE.XMLNS,\n      \"xmlns:xlink\": NAMESPACE.XMLNS\n    };\n    var svgAttrAdjustments = {\n      __proto__: null,\n      attributename: \"attributeName\",\n      attributetype: \"attributeType\",\n      basefrequency: \"baseFrequency\",\n      baseprofile: \"baseProfile\",\n      calcmode: \"calcMode\",\n      clippathunits: \"clipPathUnits\",\n      diffuseconstant: \"diffuseConstant\",\n      edgemode: \"edgeMode\",\n      filterunits: \"filterUnits\",\n      glyphref: \"glyphRef\",\n      gradienttransform: \"gradientTransform\",\n      gradientunits: \"gradientUnits\",\n      kernelmatrix: \"kernelMatrix\",\n      kernelunitlength: \"kernelUnitLength\",\n      keypoints: \"keyPoints\",\n      keysplines: \"keySplines\",\n      keytimes: \"keyTimes\",\n      lengthadjust: \"lengthAdjust\",\n      limitingconeangle: \"limitingConeAngle\",\n      markerheight: \"markerHeight\",\n      markerunits: \"markerUnits\",\n      markerwidth: \"markerWidth\",\n      maskcontentunits: \"maskContentUnits\",\n      maskunits: \"maskUnits\",\n      numoctaves: \"numOctaves\",\n      pathlength: \"pathLength\",\n      patterncontentunits: \"patternContentUnits\",\n      patterntransform: \"patternTransform\",\n      patternunits: \"patternUnits\",\n      pointsatx: \"pointsAtX\",\n      pointsaty: \"pointsAtY\",\n      pointsatz: \"pointsAtZ\",\n      preservealpha: \"preserveAlpha\",\n      preserveaspectratio: \"preserveAspectRatio\",\n      primitiveunits: \"primitiveUnits\",\n      refx: \"refX\",\n      refy: \"refY\",\n      repeatcount: \"repeatCount\",\n      repeatdur: \"repeatDur\",\n      requiredextensions: \"requiredExtensions\",\n      requiredfeatures: \"requiredFeatures\",\n      specularconstant: \"specularConstant\",\n      specularexponent: \"specularExponent\",\n      spreadmethod: \"spreadMethod\",\n      startoffset: \"startOffset\",\n      stddeviation: \"stdDeviation\",\n      stitchtiles: \"stitchTiles\",\n      surfacescale: \"surfaceScale\",\n      systemlanguage: \"systemLanguage\",\n      tablevalues: \"tableValues\",\n      targetx: \"targetX\",\n      targety: \"targetY\",\n      textlength: \"textLength\",\n      viewbox: \"viewBox\",\n      viewtarget: \"viewTarget\",\n      xchannelselector: \"xChannelSelector\",\n      ychannelselector: \"yChannelSelector\",\n      zoomandpan: \"zoomAndPan\"\n    };\n    var svgTagNameAdjustments = {\n      __proto__: null,\n      altglyph: \"altGlyph\",\n      altglyphdef: \"altGlyphDef\",\n      altglyphitem: \"altGlyphItem\",\n      animatecolor: \"animateColor\",\n      animatemotion: \"animateMotion\",\n      animatetransform: \"animateTransform\",\n      clippath: \"clipPath\",\n      feblend: \"feBlend\",\n      fecolormatrix: \"feColorMatrix\",\n      fecomponenttransfer: \"feComponentTransfer\",\n      fecomposite: \"feComposite\",\n      feconvolvematrix: \"feConvolveMatrix\",\n      fediffuselighting: \"feDiffuseLighting\",\n      fedisplacementmap: \"feDisplacementMap\",\n      fedistantlight: \"feDistantLight\",\n      feflood: \"feFlood\",\n      fefunca: \"feFuncA\",\n      fefuncb: \"feFuncB\",\n      fefuncg: \"feFuncG\",\n      fefuncr: \"feFuncR\",\n      fegaussianblur: \"feGaussianBlur\",\n      feimage: \"feImage\",\n      femerge: \"feMerge\",\n      femergenode: \"feMergeNode\",\n      femorphology: \"feMorphology\",\n      feoffset: \"feOffset\",\n      fepointlight: \"fePointLight\",\n      fespecularlighting: \"feSpecularLighting\",\n      fespotlight: \"feSpotLight\",\n      fetile: \"feTile\",\n      feturbulence: \"feTurbulence\",\n      foreignobject: \"foreignObject\",\n      glyphref: \"glyphRef\",\n      lineargradient: \"linearGradient\",\n      radialgradient: \"radialGradient\",\n      textpath: \"textPath\"\n    };\n    var numericCharRefReplacements = {\n      __proto__: null,\n      0: 65533,\n      128: 8364,\n      130: 8218,\n      131: 402,\n      132: 8222,\n      133: 8230,\n      134: 8224,\n      135: 8225,\n      136: 710,\n      137: 8240,\n      138: 352,\n      139: 8249,\n      140: 338,\n      142: 381,\n      145: 8216,\n      146: 8217,\n      147: 8220,\n      148: 8221,\n      149: 8226,\n      150: 8211,\n      151: 8212,\n      152: 732,\n      153: 8482,\n      154: 353,\n      155: 8250,\n      156: 339,\n      158: 382,\n      159: 376\n    };\n    var namedCharRefs = {\n      __proto__: null,\n      \"AElig\": 198,\n      \"AElig;\": 198,\n      \"AMP\": 38,\n      \"AMP;\": 38,\n      \"Aacute\": 193,\n      \"Aacute;\": 193,\n      \"Abreve;\": 258,\n      \"Acirc\": 194,\n      \"Acirc;\": 194,\n      \"Acy;\": 1040,\n      \"Afr;\": [55349, 56580],\n      \"Agrave\": 192,\n      \"Agrave;\": 192,\n      \"Alpha;\": 913,\n      \"Amacr;\": 256,\n      \"And;\": 10835,\n      \"Aogon;\": 260,\n      \"Aopf;\": [55349, 56632],\n      \"ApplyFunction;\": 8289,\n      \"Aring\": 197,\n      \"Aring;\": 197,\n      \"Ascr;\": [55349, 56476],\n      \"Assign;\": 8788,\n      \"Atilde\": 195,\n      \"Atilde;\": 195,\n      \"Auml\": 196,\n      \"Auml;\": 196,\n      \"Backslash;\": 8726,\n      \"Barv;\": 10983,\n      \"Barwed;\": 8966,\n      \"Bcy;\": 1041,\n      \"Because;\": 8757,\n      \"Bernoullis;\": 8492,\n      \"Beta;\": 914,\n      \"Bfr;\": [55349, 56581],\n      \"Bopf;\": [55349, 56633],\n      \"Breve;\": 728,\n      \"Bscr;\": 8492,\n      \"Bumpeq;\": 8782,\n      \"CHcy;\": 1063,\n      \"COPY\": 169,\n      \"COPY;\": 169,\n      \"Cacute;\": 262,\n      \"Cap;\": 8914,\n      \"CapitalDifferentialD;\": 8517,\n      \"Cayleys;\": 8493,\n      \"Ccaron;\": 268,\n      \"Ccedil\": 199,\n      \"Ccedil;\": 199,\n      \"Ccirc;\": 264,\n      \"Cconint;\": 8752,\n      \"Cdot;\": 266,\n      \"Cedilla;\": 184,\n      \"CenterDot;\": 183,\n      \"Cfr;\": 8493,\n      \"Chi;\": 935,\n      \"CircleDot;\": 8857,\n      \"CircleMinus;\": 8854,\n      \"CirclePlus;\": 8853,\n      \"CircleTimes;\": 8855,\n      \"ClockwiseContourIntegral;\": 8754,\n      \"CloseCurlyDoubleQuote;\": 8221,\n      \"CloseCurlyQuote;\": 8217,\n      \"Colon;\": 8759,\n      \"Colone;\": 10868,\n      \"Congruent;\": 8801,\n      \"Conint;\": 8751,\n      \"ContourIntegral;\": 8750,\n      \"Copf;\": 8450,\n      \"Coproduct;\": 8720,\n      \"CounterClockwiseContourIntegral;\": 8755,\n      \"Cross;\": 10799,\n      \"Cscr;\": [55349, 56478],\n      \"Cup;\": 8915,\n      \"CupCap;\": 8781,\n      \"DD;\": 8517,\n      \"DDotrahd;\": 10513,\n      \"DJcy;\": 1026,\n      \"DScy;\": 1029,\n      \"DZcy;\": 1039,\n      \"Dagger;\": 8225,\n      \"Darr;\": 8609,\n      \"Dashv;\": 10980,\n      \"Dcaron;\": 270,\n      \"Dcy;\": 1044,\n      \"Del;\": 8711,\n      \"Delta;\": 916,\n      \"Dfr;\": [55349, 56583],\n      \"DiacriticalAcute;\": 180,\n      \"DiacriticalDot;\": 729,\n      \"DiacriticalDoubleAcute;\": 733,\n      \"DiacriticalGrave;\": 96,\n      \"DiacriticalTilde;\": 732,\n      \"Diamond;\": 8900,\n      \"DifferentialD;\": 8518,\n      \"Dopf;\": [55349, 56635],\n      \"Dot;\": 168,\n      \"DotDot;\": 8412,\n      \"DotEqual;\": 8784,\n      \"DoubleContourIntegral;\": 8751,\n      \"DoubleDot;\": 168,\n      \"DoubleDownArrow;\": 8659,\n      \"DoubleLeftArrow;\": 8656,\n      \"DoubleLeftRightArrow;\": 8660,\n      \"DoubleLeftTee;\": 10980,\n      \"DoubleLongLeftArrow;\": 10232,\n      \"DoubleLongLeftRightArrow;\": 10234,\n      \"DoubleLongRightArrow;\": 10233,\n      \"DoubleRightArrow;\": 8658,\n      \"DoubleRightTee;\": 8872,\n      \"DoubleUpArrow;\": 8657,\n      \"DoubleUpDownArrow;\": 8661,\n      \"DoubleVerticalBar;\": 8741,\n      \"DownArrow;\": 8595,\n      \"DownArrowBar;\": 10515,\n      \"DownArrowUpArrow;\": 8693,\n      \"DownBreve;\": 785,\n      \"DownLeftRightVector;\": 10576,\n      \"DownLeftTeeVector;\": 10590,\n      \"DownLeftVector;\": 8637,\n      \"DownLeftVectorBar;\": 10582,\n      \"DownRightTeeVector;\": 10591,\n      \"DownRightVector;\": 8641,\n      \"DownRightVectorBar;\": 10583,\n      \"DownTee;\": 8868,\n      \"DownTeeArrow;\": 8615,\n      \"Downarrow;\": 8659,\n      \"Dscr;\": [55349, 56479],\n      \"Dstrok;\": 272,\n      \"ENG;\": 330,\n      \"ETH\": 208,\n      \"ETH;\": 208,\n      \"Eacute\": 201,\n      \"Eacute;\": 201,\n      \"Ecaron;\": 282,\n      \"Ecirc\": 202,\n      \"Ecirc;\": 202,\n      \"Ecy;\": 1069,\n      \"Edot;\": 278,\n      \"Efr;\": [55349, 56584],\n      \"Egrave\": 200,\n      \"Egrave;\": 200,\n      \"Element;\": 8712,\n      \"Emacr;\": 274,\n      \"EmptySmallSquare;\": 9723,\n      \"EmptyVerySmallSquare;\": 9643,\n      \"Eogon;\": 280,\n      \"Eopf;\": [55349, 56636],\n      \"Epsilon;\": 917,\n      \"Equal;\": 10869,\n      \"EqualTilde;\": 8770,\n      \"Equilibrium;\": 8652,\n      \"Escr;\": 8496,\n      \"Esim;\": 10867,\n      \"Eta;\": 919,\n      \"Euml\": 203,\n      \"Euml;\": 203,\n      \"Exists;\": 8707,\n      \"ExponentialE;\": 8519,\n      \"Fcy;\": 1060,\n      \"Ffr;\": [55349, 56585],\n      \"FilledSmallSquare;\": 9724,\n      \"FilledVerySmallSquare;\": 9642,\n      \"Fopf;\": [55349, 56637],\n      \"ForAll;\": 8704,\n      \"Fouriertrf;\": 8497,\n      \"Fscr;\": 8497,\n      \"GJcy;\": 1027,\n      \"GT\": 62,\n      \"GT;\": 62,\n      \"Gamma;\": 915,\n      \"Gammad;\": 988,\n      \"Gbreve;\": 286,\n      \"Gcedil;\": 290,\n      \"Gcirc;\": 284,\n      \"Gcy;\": 1043,\n      \"Gdot;\": 288,\n      \"Gfr;\": [55349, 56586],\n      \"Gg;\": 8921,\n      \"Gopf;\": [55349, 56638],\n      \"GreaterEqual;\": 8805,\n      \"GreaterEqualLess;\": 8923,\n      \"GreaterFullEqual;\": 8807,\n      \"GreaterGreater;\": 10914,\n      \"GreaterLess;\": 8823,\n      \"GreaterSlantEqual;\": 10878,\n      \"GreaterTilde;\": 8819,\n      \"Gscr;\": [55349, 56482],\n      \"Gt;\": 8811,\n      \"HARDcy;\": 1066,\n      \"Hacek;\": 711,\n      \"Hat;\": 94,\n      \"Hcirc;\": 292,\n      \"Hfr;\": 8460,\n      \"HilbertSpace;\": 8459,\n      \"Hopf;\": 8461,\n      \"HorizontalLine;\": 9472,\n      \"Hscr;\": 8459,\n      \"Hstrok;\": 294,\n      \"HumpDownHump;\": 8782,\n      \"HumpEqual;\": 8783,\n      \"IEcy;\": 1045,\n      \"IJlig;\": 306,\n      \"IOcy;\": 1025,\n      \"Iacute\": 205,\n      \"Iacute;\": 205,\n      \"Icirc\": 206,\n      \"Icirc;\": 206,\n      \"Icy;\": 1048,\n      \"Idot;\": 304,\n      \"Ifr;\": 8465,\n      \"Igrave\": 204,\n      \"Igrave;\": 204,\n      \"Im;\": 8465,\n      \"Imacr;\": 298,\n      \"ImaginaryI;\": 8520,\n      \"Implies;\": 8658,\n      \"Int;\": 8748,\n      \"Integral;\": 8747,\n      \"Intersection;\": 8898,\n      \"InvisibleComma;\": 8291,\n      \"InvisibleTimes;\": 8290,\n      \"Iogon;\": 302,\n      \"Iopf;\": [55349, 56640],\n      \"Iota;\": 921,\n      \"Iscr;\": 8464,\n      \"Itilde;\": 296,\n      \"Iukcy;\": 1030,\n      \"Iuml\": 207,\n      \"Iuml;\": 207,\n      \"Jcirc;\": 308,\n      \"Jcy;\": 1049,\n      \"Jfr;\": [55349, 56589],\n      \"Jopf;\": [55349, 56641],\n      \"Jscr;\": [55349, 56485],\n      \"Jsercy;\": 1032,\n      \"Jukcy;\": 1028,\n      \"KHcy;\": 1061,\n      \"KJcy;\": 1036,\n      \"Kappa;\": 922,\n      \"Kcedil;\": 310,\n      \"Kcy;\": 1050,\n      \"Kfr;\": [55349, 56590],\n      \"Kopf;\": [55349, 56642],\n      \"Kscr;\": [55349, 56486],\n      \"LJcy;\": 1033,\n      \"LT\": 60,\n      \"LT;\": 60,\n      \"Lacute;\": 313,\n      \"Lambda;\": 923,\n      \"Lang;\": 10218,\n      \"Laplacetrf;\": 8466,\n      \"Larr;\": 8606,\n      \"Lcaron;\": 317,\n      \"Lcedil;\": 315,\n      \"Lcy;\": 1051,\n      \"LeftAngleBracket;\": 10216,\n      \"LeftArrow;\": 8592,\n      \"LeftArrowBar;\": 8676,\n      \"LeftArrowRightArrow;\": 8646,\n      \"LeftCeiling;\": 8968,\n      \"LeftDoubleBracket;\": 10214,\n      \"LeftDownTeeVector;\": 10593,\n      \"LeftDownVector;\": 8643,\n      \"LeftDownVectorBar;\": 10585,\n      \"LeftFloor;\": 8970,\n      \"LeftRightArrow;\": 8596,\n      \"LeftRightVector;\": 10574,\n      \"LeftTee;\": 8867,\n      \"LeftTeeArrow;\": 8612,\n      \"LeftTeeVector;\": 10586,\n      \"LeftTriangle;\": 8882,\n      \"LeftTriangleBar;\": 10703,\n      \"LeftTriangleEqual;\": 8884,\n      \"LeftUpDownVector;\": 10577,\n      \"LeftUpTeeVector;\": 10592,\n      \"LeftUpVector;\": 8639,\n      \"LeftUpVectorBar;\": 10584,\n      \"LeftVector;\": 8636,\n      \"LeftVectorBar;\": 10578,\n      \"Leftarrow;\": 8656,\n      \"Leftrightarrow;\": 8660,\n      \"LessEqualGreater;\": 8922,\n      \"LessFullEqual;\": 8806,\n      \"LessGreater;\": 8822,\n      \"LessLess;\": 10913,\n      \"LessSlantEqual;\": 10877,\n      \"LessTilde;\": 8818,\n      \"Lfr;\": [55349, 56591],\n      \"Ll;\": 8920,\n      \"Lleftarrow;\": 8666,\n      \"Lmidot;\": 319,\n      \"LongLeftArrow;\": 10229,\n      \"LongLeftRightArrow;\": 10231,\n      \"LongRightArrow;\": 10230,\n      \"Longleftarrow;\": 10232,\n      \"Longleftrightarrow;\": 10234,\n      \"Longrightarrow;\": 10233,\n      \"Lopf;\": [55349, 56643],\n      \"LowerLeftArrow;\": 8601,\n      \"LowerRightArrow;\": 8600,\n      \"Lscr;\": 8466,\n      \"Lsh;\": 8624,\n      \"Lstrok;\": 321,\n      \"Lt;\": 8810,\n      \"Map;\": 10501,\n      \"Mcy;\": 1052,\n      \"MediumSpace;\": 8287,\n      \"Mellintrf;\": 8499,\n      \"Mfr;\": [55349, 56592],\n      \"MinusPlus;\": 8723,\n      \"Mopf;\": [55349, 56644],\n      \"Mscr;\": 8499,\n      \"Mu;\": 924,\n      \"NJcy;\": 1034,\n      \"Nacute;\": 323,\n      \"Ncaron;\": 327,\n      \"Ncedil;\": 325,\n      \"Ncy;\": 1053,\n      \"NegativeMediumSpace;\": 8203,\n      \"NegativeThickSpace;\": 8203,\n      \"NegativeThinSpace;\": 8203,\n      \"NegativeVeryThinSpace;\": 8203,\n      \"NestedGreaterGreater;\": 8811,\n      \"NestedLessLess;\": 8810,\n      \"NewLine;\": 10,\n      \"Nfr;\": [55349, 56593],\n      \"NoBreak;\": 8288,\n      \"NonBreakingSpace;\": 160,\n      \"Nopf;\": 8469,\n      \"Not;\": 10988,\n      \"NotCongruent;\": 8802,\n      \"NotCupCap;\": 8813,\n      \"NotDoubleVerticalBar;\": 8742,\n      \"NotElement;\": 8713,\n      \"NotEqual;\": 8800,\n      \"NotEqualTilde;\": [8770, 824],\n      \"NotExists;\": 8708,\n      \"NotGreater;\": 8815,\n      \"NotGreaterEqual;\": 8817,\n      \"NotGreaterFullEqual;\": [8807, 824],\n      \"NotGreaterGreater;\": [8811, 824],\n      \"NotGreaterLess;\": 8825,\n      \"NotGreaterSlantEqual;\": [10878, 824],\n      \"NotGreaterTilde;\": 8821,\n      \"NotHumpDownHump;\": [8782, 824],\n      \"NotHumpEqual;\": [8783, 824],\n      \"NotLeftTriangle;\": 8938,\n      \"NotLeftTriangleBar;\": [10703, 824],\n      \"NotLeftTriangleEqual;\": 8940,\n      \"NotLess;\": 8814,\n      \"NotLessEqual;\": 8816,\n      \"NotLessGreater;\": 8824,\n      \"NotLessLess;\": [8810, 824],\n      \"NotLessSlantEqual;\": [10877, 824],\n      \"NotLessTilde;\": 8820,\n      \"NotNestedGreaterGreater;\": [10914, 824],\n      \"NotNestedLessLess;\": [10913, 824],\n      \"NotPrecedes;\": 8832,\n      \"NotPrecedesEqual;\": [10927, 824],\n      \"NotPrecedesSlantEqual;\": 8928,\n      \"NotReverseElement;\": 8716,\n      \"NotRightTriangle;\": 8939,\n      \"NotRightTriangleBar;\": [10704, 824],\n      \"NotRightTriangleEqual;\": 8941,\n      \"NotSquareSubset;\": [8847, 824],\n      \"NotSquareSubsetEqual;\": 8930,\n      \"NotSquareSuperset;\": [8848, 824],\n      \"NotSquareSupersetEqual;\": 8931,\n      \"NotSubset;\": [8834, 8402],\n      \"NotSubsetEqual;\": 8840,\n      \"NotSucceeds;\": 8833,\n      \"NotSucceedsEqual;\": [10928, 824],\n      \"NotSucceedsSlantEqual;\": 8929,\n      \"NotSucceedsTilde;\": [8831, 824],\n      \"NotSuperset;\": [8835, 8402],\n      \"NotSupersetEqual;\": 8841,\n      \"NotTilde;\": 8769,\n      \"NotTildeEqual;\": 8772,\n      \"NotTildeFullEqual;\": 8775,\n      \"NotTildeTilde;\": 8777,\n      \"NotVerticalBar;\": 8740,\n      \"Nscr;\": [55349, 56489],\n      \"Ntilde\": 209,\n      \"Ntilde;\": 209,\n      \"Nu;\": 925,\n      \"OElig;\": 338,\n      \"Oacute\": 211,\n      \"Oacute;\": 211,\n      \"Ocirc\": 212,\n      \"Ocirc;\": 212,\n      \"Ocy;\": 1054,\n      \"Odblac;\": 336,\n      \"Ofr;\": [55349, 56594],\n      \"Ograve\": 210,\n      \"Ograve;\": 210,\n      \"Omacr;\": 332,\n      \"Omega;\": 937,\n      \"Omicron;\": 927,\n      \"Oopf;\": [55349, 56646],\n      \"OpenCurlyDoubleQuote;\": 8220,\n      \"OpenCurlyQuote;\": 8216,\n      \"Or;\": 10836,\n      \"Oscr;\": [55349, 56490],\n      \"Oslash\": 216,\n      \"Oslash;\": 216,\n      \"Otilde\": 213,\n      \"Otilde;\": 213,\n      \"Otimes;\": 10807,\n      \"Ouml\": 214,\n      \"Ouml;\": 214,\n      \"OverBar;\": 8254,\n      \"OverBrace;\": 9182,\n      \"OverBracket;\": 9140,\n      \"OverParenthesis;\": 9180,\n      \"PartialD;\": 8706,\n      \"Pcy;\": 1055,\n      \"Pfr;\": [55349, 56595],\n      \"Phi;\": 934,\n      \"Pi;\": 928,\n      \"PlusMinus;\": 177,\n      \"Poincareplane;\": 8460,\n      \"Popf;\": 8473,\n      \"Pr;\": 10939,\n      \"Precedes;\": 8826,\n      \"PrecedesEqual;\": 10927,\n      \"PrecedesSlantEqual;\": 8828,\n      \"PrecedesTilde;\": 8830,\n      \"Prime;\": 8243,\n      \"Product;\": 8719,\n      \"Proportion;\": 8759,\n      \"Proportional;\": 8733,\n      \"Pscr;\": [55349, 56491],\n      \"Psi;\": 936,\n      \"QUOT\": 34,\n      \"QUOT;\": 34,\n      \"Qfr;\": [55349, 56596],\n      \"Qopf;\": 8474,\n      \"Qscr;\": [55349, 56492],\n      \"RBarr;\": 10512,\n      \"REG\": 174,\n      \"REG;\": 174,\n      \"Racute;\": 340,\n      \"Rang;\": 10219,\n      \"Rarr;\": 8608,\n      \"Rarrtl;\": 10518,\n      \"Rcaron;\": 344,\n      \"Rcedil;\": 342,\n      \"Rcy;\": 1056,\n      \"Re;\": 8476,\n      \"ReverseElement;\": 8715,\n      \"ReverseEquilibrium;\": 8651,\n      \"ReverseUpEquilibrium;\": 10607,\n      \"Rfr;\": 8476,\n      \"Rho;\": 929,\n      \"RightAngleBracket;\": 10217,\n      \"RightArrow;\": 8594,\n      \"RightArrowBar;\": 8677,\n      \"RightArrowLeftArrow;\": 8644,\n      \"RightCeiling;\": 8969,\n      \"RightDoubleBracket;\": 10215,\n      \"RightDownTeeVector;\": 10589,\n      \"RightDownVector;\": 8642,\n      \"RightDownVectorBar;\": 10581,\n      \"RightFloor;\": 8971,\n      \"RightTee;\": 8866,\n      \"RightTeeArrow;\": 8614,\n      \"RightTeeVector;\": 10587,\n      \"RightTriangle;\": 8883,\n      \"RightTriangleBar;\": 10704,\n      \"RightTriangleEqual;\": 8885,\n      \"RightUpDownVector;\": 10575,\n      \"RightUpTeeVector;\": 10588,\n      \"RightUpVector;\": 8638,\n      \"RightUpVectorBar;\": 10580,\n      \"RightVector;\": 8640,\n      \"RightVectorBar;\": 10579,\n      \"Rightarrow;\": 8658,\n      \"Ropf;\": 8477,\n      \"RoundImplies;\": 10608,\n      \"Rrightarrow;\": 8667,\n      \"Rscr;\": 8475,\n      \"Rsh;\": 8625,\n      \"RuleDelayed;\": 10740,\n      \"SHCHcy;\": 1065,\n      \"SHcy;\": 1064,\n      \"SOFTcy;\": 1068,\n      \"Sacute;\": 346,\n      \"Sc;\": 10940,\n      \"Scaron;\": 352,\n      \"Scedil;\": 350,\n      \"Scirc;\": 348,\n      \"Scy;\": 1057,\n      \"Sfr;\": [55349, 56598],\n      \"ShortDownArrow;\": 8595,\n      \"ShortLeftArrow;\": 8592,\n      \"ShortRightArrow;\": 8594,\n      \"ShortUpArrow;\": 8593,\n      \"Sigma;\": 931,\n      \"SmallCircle;\": 8728,\n      \"Sopf;\": [55349, 56650],\n      \"Sqrt;\": 8730,\n      \"Square;\": 9633,\n      \"SquareIntersection;\": 8851,\n      \"SquareSubset;\": 8847,\n      \"SquareSubsetEqual;\": 8849,\n      \"SquareSuperset;\": 8848,\n      \"SquareSupersetEqual;\": 8850,\n      \"SquareUnion;\": 8852,\n      \"Sscr;\": [55349, 56494],\n      \"Star;\": 8902,\n      \"Sub;\": 8912,\n      \"Subset;\": 8912,\n      \"SubsetEqual;\": 8838,\n      \"Succeeds;\": 8827,\n      \"SucceedsEqual;\": 10928,\n      \"SucceedsSlantEqual;\": 8829,\n      \"SucceedsTilde;\": 8831,\n      \"SuchThat;\": 8715,\n      \"Sum;\": 8721,\n      \"Sup;\": 8913,\n      \"Superset;\": 8835,\n      \"SupersetEqual;\": 8839,\n      \"Supset;\": 8913,\n      \"THORN\": 222,\n      \"THORN;\": 222,\n      \"TRADE;\": 8482,\n      \"TSHcy;\": 1035,\n      \"TScy;\": 1062,\n      \"Tab;\": 9,\n      \"Tau;\": 932,\n      \"Tcaron;\": 356,\n      \"Tcedil;\": 354,\n      \"Tcy;\": 1058,\n      \"Tfr;\": [55349, 56599],\n      \"Therefore;\": 8756,\n      \"Theta;\": 920,\n      \"ThickSpace;\": [8287, 8202],\n      \"ThinSpace;\": 8201,\n      \"Tilde;\": 8764,\n      \"TildeEqual;\": 8771,\n      \"TildeFullEqual;\": 8773,\n      \"TildeTilde;\": 8776,\n      \"Topf;\": [55349, 56651],\n      \"TripleDot;\": 8411,\n      \"Tscr;\": [55349, 56495],\n      \"Tstrok;\": 358,\n      \"Uacute\": 218,\n      \"Uacute;\": 218,\n      \"Uarr;\": 8607,\n      \"Uarrocir;\": 10569,\n      \"Ubrcy;\": 1038,\n      \"Ubreve;\": 364,\n      \"Ucirc\": 219,\n      \"Ucirc;\": 219,\n      \"Ucy;\": 1059,\n      \"Udblac;\": 368,\n      \"Ufr;\": [55349, 56600],\n      \"Ugrave\": 217,\n      \"Ugrave;\": 217,\n      \"Umacr;\": 362,\n      \"UnderBar;\": 95,\n      \"UnderBrace;\": 9183,\n      \"UnderBracket;\": 9141,\n      \"UnderParenthesis;\": 9181,\n      \"Union;\": 8899,\n      \"UnionPlus;\": 8846,\n      \"Uogon;\": 370,\n      \"Uopf;\": [55349, 56652],\n      \"UpArrow;\": 8593,\n      \"UpArrowBar;\": 10514,\n      \"UpArrowDownArrow;\": 8645,\n      \"UpDownArrow;\": 8597,\n      \"UpEquilibrium;\": 10606,\n      \"UpTee;\": 8869,\n      \"UpTeeArrow;\": 8613,\n      \"Uparrow;\": 8657,\n      \"Updownarrow;\": 8661,\n      \"UpperLeftArrow;\": 8598,\n      \"UpperRightArrow;\": 8599,\n      \"Upsi;\": 978,\n      \"Upsilon;\": 933,\n      \"Uring;\": 366,\n      \"Uscr;\": [55349, 56496],\n      \"Utilde;\": 360,\n      \"Uuml\": 220,\n      \"Uuml;\": 220,\n      \"VDash;\": 8875,\n      \"Vbar;\": 10987,\n      \"Vcy;\": 1042,\n      \"Vdash;\": 8873,\n      \"Vdashl;\": 10982,\n      \"Vee;\": 8897,\n      \"Verbar;\": 8214,\n      \"Vert;\": 8214,\n      \"VerticalBar;\": 8739,\n      \"VerticalLine;\": 124,\n      \"VerticalSeparator;\": 10072,\n      \"VerticalTilde;\": 8768,\n      \"VeryThinSpace;\": 8202,\n      \"Vfr;\": [55349, 56601],\n      \"Vopf;\": [55349, 56653],\n      \"Vscr;\": [55349, 56497],\n      \"Vvdash;\": 8874,\n      \"Wcirc;\": 372,\n      \"Wedge;\": 8896,\n      \"Wfr;\": [55349, 56602],\n      \"Wopf;\": [55349, 56654],\n      \"Wscr;\": [55349, 56498],\n      \"Xfr;\": [55349, 56603],\n      \"Xi;\": 926,\n      \"Xopf;\": [55349, 56655],\n      \"Xscr;\": [55349, 56499],\n      \"YAcy;\": 1071,\n      \"YIcy;\": 1031,\n      \"YUcy;\": 1070,\n      \"Yacute\": 221,\n      \"Yacute;\": 221,\n      \"Ycirc;\": 374,\n      \"Ycy;\": 1067,\n      \"Yfr;\": [55349, 56604],\n      \"Yopf;\": [55349, 56656],\n      \"Yscr;\": [55349, 56500],\n      \"Yuml;\": 376,\n      \"ZHcy;\": 1046,\n      \"Zacute;\": 377,\n      \"Zcaron;\": 381,\n      \"Zcy;\": 1047,\n      \"Zdot;\": 379,\n      \"ZeroWidthSpace;\": 8203,\n      \"Zeta;\": 918,\n      \"Zfr;\": 8488,\n      \"Zopf;\": 8484,\n      \"Zscr;\": [55349, 56501],\n      \"aacute\": 225,\n      \"aacute;\": 225,\n      \"abreve;\": 259,\n      \"ac;\": 8766,\n      \"acE;\": [8766, 819],\n      \"acd;\": 8767,\n      \"acirc\": 226,\n      \"acirc;\": 226,\n      \"acute\": 180,\n      \"acute;\": 180,\n      \"acy;\": 1072,\n      \"aelig\": 230,\n      \"aelig;\": 230,\n      \"af;\": 8289,\n      \"afr;\": [55349, 56606],\n      \"agrave\": 224,\n      \"agrave;\": 224,\n      \"alefsym;\": 8501,\n      \"aleph;\": 8501,\n      \"alpha;\": 945,\n      \"amacr;\": 257,\n      \"amalg;\": 10815,\n      \"amp\": 38,\n      \"amp;\": 38,\n      \"and;\": 8743,\n      \"andand;\": 10837,\n      \"andd;\": 10844,\n      \"andslope;\": 10840,\n      \"andv;\": 10842,\n      \"ang;\": 8736,\n      \"ange;\": 10660,\n      \"angle;\": 8736,\n      \"angmsd;\": 8737,\n      \"angmsdaa;\": 10664,\n      \"angmsdab;\": 10665,\n      \"angmsdac;\": 10666,\n      \"angmsdad;\": 10667,\n      \"angmsdae;\": 10668,\n      \"angmsdaf;\": 10669,\n      \"angmsdag;\": 10670,\n      \"angmsdah;\": 10671,\n      \"angrt;\": 8735,\n      \"angrtvb;\": 8894,\n      \"angrtvbd;\": 10653,\n      \"angsph;\": 8738,\n      \"angst;\": 197,\n      \"angzarr;\": 9084,\n      \"aogon;\": 261,\n      \"aopf;\": [55349, 56658],\n      \"ap;\": 8776,\n      \"apE;\": 10864,\n      \"apacir;\": 10863,\n      \"ape;\": 8778,\n      \"apid;\": 8779,\n      \"apos;\": 39,\n      \"approx;\": 8776,\n      \"approxeq;\": 8778,\n      \"aring\": 229,\n      \"aring;\": 229,\n      \"ascr;\": [55349, 56502],\n      \"ast;\": 42,\n      \"asymp;\": 8776,\n      \"asympeq;\": 8781,\n      \"atilde\": 227,\n      \"atilde;\": 227,\n      \"auml\": 228,\n      \"auml;\": 228,\n      \"awconint;\": 8755,\n      \"awint;\": 10769,\n      \"bNot;\": 10989,\n      \"backcong;\": 8780,\n      \"backepsilon;\": 1014,\n      \"backprime;\": 8245,\n      \"backsim;\": 8765,\n      \"backsimeq;\": 8909,\n      \"barvee;\": 8893,\n      \"barwed;\": 8965,\n      \"barwedge;\": 8965,\n      \"bbrk;\": 9141,\n      \"bbrktbrk;\": 9142,\n      \"bcong;\": 8780,\n      \"bcy;\": 1073,\n      \"bdquo;\": 8222,\n      \"becaus;\": 8757,\n      \"because;\": 8757,\n      \"bemptyv;\": 10672,\n      \"bepsi;\": 1014,\n      \"bernou;\": 8492,\n      \"beta;\": 946,\n      \"beth;\": 8502,\n      \"between;\": 8812,\n      \"bfr;\": [55349, 56607],\n      \"bigcap;\": 8898,\n      \"bigcirc;\": 9711,\n      \"bigcup;\": 8899,\n      \"bigodot;\": 10752,\n      \"bigoplus;\": 10753,\n      \"bigotimes;\": 10754,\n      \"bigsqcup;\": 10758,\n      \"bigstar;\": 9733,\n      \"bigtriangledown;\": 9661,\n      \"bigtriangleup;\": 9651,\n      \"biguplus;\": 10756,\n      \"bigvee;\": 8897,\n      \"bigwedge;\": 8896,\n      \"bkarow;\": 10509,\n      \"blacklozenge;\": 10731,\n      \"blacksquare;\": 9642,\n      \"blacktriangle;\": 9652,\n      \"blacktriangledown;\": 9662,\n      \"blacktriangleleft;\": 9666,\n      \"blacktriangleright;\": 9656,\n      \"blank;\": 9251,\n      \"blk12;\": 9618,\n      \"blk14;\": 9617,\n      \"blk34;\": 9619,\n      \"block;\": 9608,\n      \"bne;\": [61, 8421],\n      \"bnequiv;\": [8801, 8421],\n      \"bnot;\": 8976,\n      \"bopf;\": [55349, 56659],\n      \"bot;\": 8869,\n      \"bottom;\": 8869,\n      \"bowtie;\": 8904,\n      \"boxDL;\": 9559,\n      \"boxDR;\": 9556,\n      \"boxDl;\": 9558,\n      \"boxDr;\": 9555,\n      \"boxH;\": 9552,\n      \"boxHD;\": 9574,\n      \"boxHU;\": 9577,\n      \"boxHd;\": 9572,\n      \"boxHu;\": 9575,\n      \"boxUL;\": 9565,\n      \"boxUR;\": 9562,\n      \"boxUl;\": 9564,\n      \"boxUr;\": 9561,\n      \"boxV;\": 9553,\n      \"boxVH;\": 9580,\n      \"boxVL;\": 9571,\n      \"boxVR;\": 9568,\n      \"boxVh;\": 9579,\n      \"boxVl;\": 9570,\n      \"boxVr;\": 9567,\n      \"boxbox;\": 10697,\n      \"boxdL;\": 9557,\n      \"boxdR;\": 9554,\n      \"boxdl;\": 9488,\n      \"boxdr;\": 9484,\n      \"boxh;\": 9472,\n      \"boxhD;\": 9573,\n      \"boxhU;\": 9576,\n      \"boxhd;\": 9516,\n      \"boxhu;\": 9524,\n      \"boxminus;\": 8863,\n      \"boxplus;\": 8862,\n      \"boxtimes;\": 8864,\n      \"boxuL;\": 9563,\n      \"boxuR;\": 9560,\n      \"boxul;\": 9496,\n      \"boxur;\": 9492,\n      \"boxv;\": 9474,\n      \"boxvH;\": 9578,\n      \"boxvL;\": 9569,\n      \"boxvR;\": 9566,\n      \"boxvh;\": 9532,\n      \"boxvl;\": 9508,\n      \"boxvr;\": 9500,\n      \"bprime;\": 8245,\n      \"breve;\": 728,\n      \"brvbar\": 166,\n      \"brvbar;\": 166,\n      \"bscr;\": [55349, 56503],\n      \"bsemi;\": 8271,\n      \"bsim;\": 8765,\n      \"bsime;\": 8909,\n      \"bsol;\": 92,\n      \"bsolb;\": 10693,\n      \"bsolhsub;\": 10184,\n      \"bull;\": 8226,\n      \"bullet;\": 8226,\n      \"bump;\": 8782,\n      \"bumpE;\": 10926,\n      \"bumpe;\": 8783,\n      \"bumpeq;\": 8783,\n      \"cacute;\": 263,\n      \"cap;\": 8745,\n      \"capand;\": 10820,\n      \"capbrcup;\": 10825,\n      \"capcap;\": 10827,\n      \"capcup;\": 10823,\n      \"capdot;\": 10816,\n      \"caps;\": [8745, 65024],\n      \"caret;\": 8257,\n      \"caron;\": 711,\n      \"ccaps;\": 10829,\n      \"ccaron;\": 269,\n      \"ccedil\": 231,\n      \"ccedil;\": 231,\n      \"ccirc;\": 265,\n      \"ccups;\": 10828,\n      \"ccupssm;\": 10832,\n      \"cdot;\": 267,\n      \"cedil\": 184,\n      \"cedil;\": 184,\n      \"cemptyv;\": 10674,\n      \"cent\": 162,\n      \"cent;\": 162,\n      \"centerdot;\": 183,\n      \"cfr;\": [55349, 56608],\n      \"chcy;\": 1095,\n      \"check;\": 10003,\n      \"checkmark;\": 10003,\n      \"chi;\": 967,\n      \"cir;\": 9675,\n      \"cirE;\": 10691,\n      \"circ;\": 710,\n      \"circeq;\": 8791,\n      \"circlearrowleft;\": 8634,\n      \"circlearrowright;\": 8635,\n      \"circledR;\": 174,\n      \"circledS;\": 9416,\n      \"circledast;\": 8859,\n      \"circledcirc;\": 8858,\n      \"circleddash;\": 8861,\n      \"cire;\": 8791,\n      \"cirfnint;\": 10768,\n      \"cirmid;\": 10991,\n      \"cirscir;\": 10690,\n      \"clubs;\": 9827,\n      \"clubsuit;\": 9827,\n      \"colon;\": 58,\n      \"colone;\": 8788,\n      \"coloneq;\": 8788,\n      \"comma;\": 44,\n      \"commat;\": 64,\n      \"comp;\": 8705,\n      \"compfn;\": 8728,\n      \"complement;\": 8705,\n      \"complexes;\": 8450,\n      \"cong;\": 8773,\n      \"congdot;\": 10861,\n      \"conint;\": 8750,\n      \"copf;\": [55349, 56660],\n      \"coprod;\": 8720,\n      \"copy\": 169,\n      \"copy;\": 169,\n      \"copysr;\": 8471,\n      \"crarr;\": 8629,\n      \"cross;\": 10007,\n      \"cscr;\": [55349, 56504],\n      \"csub;\": 10959,\n      \"csube;\": 10961,\n      \"csup;\": 10960,\n      \"csupe;\": 10962,\n      \"ctdot;\": 8943,\n      \"cudarrl;\": 10552,\n      \"cudarrr;\": 10549,\n      \"cuepr;\": 8926,\n      \"cuesc;\": 8927,\n      \"cularr;\": 8630,\n      \"cularrp;\": 10557,\n      \"cup;\": 8746,\n      \"cupbrcap;\": 10824,\n      \"cupcap;\": 10822,\n      \"cupcup;\": 10826,\n      \"cupdot;\": 8845,\n      \"cupor;\": 10821,\n      \"cups;\": [8746, 65024],\n      \"curarr;\": 8631,\n      \"curarrm;\": 10556,\n      \"curlyeqprec;\": 8926,\n      \"curlyeqsucc;\": 8927,\n      \"curlyvee;\": 8910,\n      \"curlywedge;\": 8911,\n      \"curren\": 164,\n      \"curren;\": 164,\n      \"curvearrowleft;\": 8630,\n      \"curvearrowright;\": 8631,\n      \"cuvee;\": 8910,\n      \"cuwed;\": 8911,\n      \"cwconint;\": 8754,\n      \"cwint;\": 8753,\n      \"cylcty;\": 9005,\n      \"dArr;\": 8659,\n      \"dHar;\": 10597,\n      \"dagger;\": 8224,\n      \"daleth;\": 8504,\n      \"darr;\": 8595,\n      \"dash;\": 8208,\n      \"dashv;\": 8867,\n      \"dbkarow;\": 10511,\n      \"dblac;\": 733,\n      \"dcaron;\": 271,\n      \"dcy;\": 1076,\n      \"dd;\": 8518,\n      \"ddagger;\": 8225,\n      \"ddarr;\": 8650,\n      \"ddotseq;\": 10871,\n      \"deg\": 176,\n      \"deg;\": 176,\n      \"delta;\": 948,\n      \"demptyv;\": 10673,\n      \"dfisht;\": 10623,\n      \"dfr;\": [55349, 56609],\n      \"dharl;\": 8643,\n      \"dharr;\": 8642,\n      \"diam;\": 8900,\n      \"diamond;\": 8900,\n      \"diamondsuit;\": 9830,\n      \"diams;\": 9830,\n      \"die;\": 168,\n      \"digamma;\": 989,\n      \"disin;\": 8946,\n      \"div;\": 247,\n      \"divide\": 247,\n      \"divide;\": 247,\n      \"divideontimes;\": 8903,\n      \"divonx;\": 8903,\n      \"djcy;\": 1106,\n      \"dlcorn;\": 8990,\n      \"dlcrop;\": 8973,\n      \"dollar;\": 36,\n      \"dopf;\": [55349, 56661],\n      \"dot;\": 729,\n      \"doteq;\": 8784,\n      \"doteqdot;\": 8785,\n      \"dotminus;\": 8760,\n      \"dotplus;\": 8724,\n      \"dotsquare;\": 8865,\n      \"doublebarwedge;\": 8966,\n      \"downarrow;\": 8595,\n      \"downdownarrows;\": 8650,\n      \"downharpoonleft;\": 8643,\n      \"downharpoonright;\": 8642,\n      \"drbkarow;\": 10512,\n      \"drcorn;\": 8991,\n      \"drcrop;\": 8972,\n      \"dscr;\": [55349, 56505],\n      \"dscy;\": 1109,\n      \"dsol;\": 10742,\n      \"dstrok;\": 273,\n      \"dtdot;\": 8945,\n      \"dtri;\": 9663,\n      \"dtrif;\": 9662,\n      \"duarr;\": 8693,\n      \"duhar;\": 10607,\n      \"dwangle;\": 10662,\n      \"dzcy;\": 1119,\n      \"dzigrarr;\": 10239,\n      \"eDDot;\": 10871,\n      \"eDot;\": 8785,\n      \"eacute\": 233,\n      \"eacute;\": 233,\n      \"easter;\": 10862,\n      \"ecaron;\": 283,\n      \"ecir;\": 8790,\n      \"ecirc\": 234,\n      \"ecirc;\": 234,\n      \"ecolon;\": 8789,\n      \"ecy;\": 1101,\n      \"edot;\": 279,\n      \"ee;\": 8519,\n      \"efDot;\": 8786,\n      \"efr;\": [55349, 56610],\n      \"eg;\": 10906,\n      \"egrave\": 232,\n      \"egrave;\": 232,\n      \"egs;\": 10902,\n      \"egsdot;\": 10904,\n      \"el;\": 10905,\n      \"elinters;\": 9191,\n      \"ell;\": 8467,\n      \"els;\": 10901,\n      \"elsdot;\": 10903,\n      \"emacr;\": 275,\n      \"empty;\": 8709,\n      \"emptyset;\": 8709,\n      \"emptyv;\": 8709,\n      \"emsp13;\": 8196,\n      \"emsp14;\": 8197,\n      \"emsp;\": 8195,\n      \"eng;\": 331,\n      \"ensp;\": 8194,\n      \"eogon;\": 281,\n      \"eopf;\": [55349, 56662],\n      \"epar;\": 8917,\n      \"eparsl;\": 10723,\n      \"eplus;\": 10865,\n      \"epsi;\": 949,\n      \"epsilon;\": 949,\n      \"epsiv;\": 1013,\n      \"eqcirc;\": 8790,\n      \"eqcolon;\": 8789,\n      \"eqsim;\": 8770,\n      \"eqslantgtr;\": 10902,\n      \"eqslantless;\": 10901,\n      \"equals;\": 61,\n      \"equest;\": 8799,\n      \"equiv;\": 8801,\n      \"equivDD;\": 10872,\n      \"eqvparsl;\": 10725,\n      \"erDot;\": 8787,\n      \"erarr;\": 10609,\n      \"escr;\": 8495,\n      \"esdot;\": 8784,\n      \"esim;\": 8770,\n      \"eta;\": 951,\n      \"eth\": 240,\n      \"eth;\": 240,\n      \"euml\": 235,\n      \"euml;\": 235,\n      \"euro;\": 8364,\n      \"excl;\": 33,\n      \"exist;\": 8707,\n      \"expectation;\": 8496,\n      \"exponentiale;\": 8519,\n      \"fallingdotseq;\": 8786,\n      \"fcy;\": 1092,\n      \"female;\": 9792,\n      \"ffilig;\": 64259,\n      \"fflig;\": 64256,\n      \"ffllig;\": 64260,\n      \"ffr;\": [55349, 56611],\n      \"filig;\": 64257,\n      \"fjlig;\": [102, 106],\n      \"flat;\": 9837,\n      \"fllig;\": 64258,\n      \"fltns;\": 9649,\n      \"fnof;\": 402,\n      \"fopf;\": [55349, 56663],\n      \"forall;\": 8704,\n      \"fork;\": 8916,\n      \"forkv;\": 10969,\n      \"fpartint;\": 10765,\n      \"frac12\": 189,\n      \"frac12;\": 189,\n      \"frac13;\": 8531,\n      \"frac14\": 188,\n      \"frac14;\": 188,\n      \"frac15;\": 8533,\n      \"frac16;\": 8537,\n      \"frac18;\": 8539,\n      \"frac23;\": 8532,\n      \"frac25;\": 8534,\n      \"frac34\": 190,\n      \"frac34;\": 190,\n      \"frac35;\": 8535,\n      \"frac38;\": 8540,\n      \"frac45;\": 8536,\n      \"frac56;\": 8538,\n      \"frac58;\": 8541,\n      \"frac78;\": 8542,\n      \"frasl;\": 8260,\n      \"frown;\": 8994,\n      \"fscr;\": [55349, 56507],\n      \"gE;\": 8807,\n      \"gEl;\": 10892,\n      \"gacute;\": 501,\n      \"gamma;\": 947,\n      \"gammad;\": 989,\n      \"gap;\": 10886,\n      \"gbreve;\": 287,\n      \"gcirc;\": 285,\n      \"gcy;\": 1075,\n      \"gdot;\": 289,\n      \"ge;\": 8805,\n      \"gel;\": 8923,\n      \"geq;\": 8805,\n      \"geqq;\": 8807,\n      \"geqslant;\": 10878,\n      \"ges;\": 10878,\n      \"gescc;\": 10921,\n      \"gesdot;\": 10880,\n      \"gesdoto;\": 10882,\n      \"gesdotol;\": 10884,\n      \"gesl;\": [8923, 65024],\n      \"gesles;\": 10900,\n      \"gfr;\": [55349, 56612],\n      \"gg;\": 8811,\n      \"ggg;\": 8921,\n      \"gimel;\": 8503,\n      \"gjcy;\": 1107,\n      \"gl;\": 8823,\n      \"glE;\": 10898,\n      \"gla;\": 10917,\n      \"glj;\": 10916,\n      \"gnE;\": 8809,\n      \"gnap;\": 10890,\n      \"gnapprox;\": 10890,\n      \"gne;\": 10888,\n      \"gneq;\": 10888,\n      \"gneqq;\": 8809,\n      \"gnsim;\": 8935,\n      \"gopf;\": [55349, 56664],\n      \"grave;\": 96,\n      \"gscr;\": 8458,\n      \"gsim;\": 8819,\n      \"gsime;\": 10894,\n      \"gsiml;\": 10896,\n      \"gt\": 62,\n      \"gt;\": 62,\n      \"gtcc;\": 10919,\n      \"gtcir;\": 10874,\n      \"gtdot;\": 8919,\n      \"gtlPar;\": 10645,\n      \"gtquest;\": 10876,\n      \"gtrapprox;\": 10886,\n      \"gtrarr;\": 10616,\n      \"gtrdot;\": 8919,\n      \"gtreqless;\": 8923,\n      \"gtreqqless;\": 10892,\n      \"gtrless;\": 8823,\n      \"gtrsim;\": 8819,\n      \"gvertneqq;\": [8809, 65024],\n      \"gvnE;\": [8809, 65024],\n      \"hArr;\": 8660,\n      \"hairsp;\": 8202,\n      \"half;\": 189,\n      \"hamilt;\": 8459,\n      \"hardcy;\": 1098,\n      \"harr;\": 8596,\n      \"harrcir;\": 10568,\n      \"harrw;\": 8621,\n      \"hbar;\": 8463,\n      \"hcirc;\": 293,\n      \"hearts;\": 9829,\n      \"heartsuit;\": 9829,\n      \"hellip;\": 8230,\n      \"hercon;\": 8889,\n      \"hfr;\": [55349, 56613],\n      \"hksearow;\": 10533,\n      \"hkswarow;\": 10534,\n      \"hoarr;\": 8703,\n      \"homtht;\": 8763,\n      \"hookleftarrow;\": 8617,\n      \"hookrightarrow;\": 8618,\n      \"hopf;\": [55349, 56665],\n      \"horbar;\": 8213,\n      \"hscr;\": [55349, 56509],\n      \"hslash;\": 8463,\n      \"hstrok;\": 295,\n      \"hybull;\": 8259,\n      \"hyphen;\": 8208,\n      \"iacute\": 237,\n      \"iacute;\": 237,\n      \"ic;\": 8291,\n      \"icirc\": 238,\n      \"icirc;\": 238,\n      \"icy;\": 1080,\n      \"iecy;\": 1077,\n      \"iexcl\": 161,\n      \"iexcl;\": 161,\n      \"iff;\": 8660,\n      \"ifr;\": [55349, 56614],\n      \"igrave\": 236,\n      \"igrave;\": 236,\n      \"ii;\": 8520,\n      \"iiiint;\": 10764,\n      \"iiint;\": 8749,\n      \"iinfin;\": 10716,\n      \"iiota;\": 8489,\n      \"ijlig;\": 307,\n      \"imacr;\": 299,\n      \"image;\": 8465,\n      \"imagline;\": 8464,\n      \"imagpart;\": 8465,\n      \"imath;\": 305,\n      \"imof;\": 8887,\n      \"imped;\": 437,\n      \"in;\": 8712,\n      \"incare;\": 8453,\n      \"infin;\": 8734,\n      \"infintie;\": 10717,\n      \"inodot;\": 305,\n      \"int;\": 8747,\n      \"intcal;\": 8890,\n      \"integers;\": 8484,\n      \"intercal;\": 8890,\n      \"intlarhk;\": 10775,\n      \"intprod;\": 10812,\n      \"iocy;\": 1105,\n      \"iogon;\": 303,\n      \"iopf;\": [55349, 56666],\n      \"iota;\": 953,\n      \"iprod;\": 10812,\n      \"iquest\": 191,\n      \"iquest;\": 191,\n      \"iscr;\": [55349, 56510],\n      \"isin;\": 8712,\n      \"isinE;\": 8953,\n      \"isindot;\": 8949,\n      \"isins;\": 8948,\n      \"isinsv;\": 8947,\n      \"isinv;\": 8712,\n      \"it;\": 8290,\n      \"itilde;\": 297,\n      \"iukcy;\": 1110,\n      \"iuml\": 239,\n      \"iuml;\": 239,\n      \"jcirc;\": 309,\n      \"jcy;\": 1081,\n      \"jfr;\": [55349, 56615],\n      \"jmath;\": 567,\n      \"jopf;\": [55349, 56667],\n      \"jscr;\": [55349, 56511],\n      \"jsercy;\": 1112,\n      \"jukcy;\": 1108,\n      \"kappa;\": 954,\n      \"kappav;\": 1008,\n      \"kcedil;\": 311,\n      \"kcy;\": 1082,\n      \"kfr;\": [55349, 56616],\n      \"kgreen;\": 312,\n      \"khcy;\": 1093,\n      \"kjcy;\": 1116,\n      \"kopf;\": [55349, 56668],\n      \"kscr;\": [55349, 56512],\n      \"lAarr;\": 8666,\n      \"lArr;\": 8656,\n      \"lAtail;\": 10523,\n      \"lBarr;\": 10510,\n      \"lE;\": 8806,\n      \"lEg;\": 10891,\n      \"lHar;\": 10594,\n      \"lacute;\": 314,\n      \"laemptyv;\": 10676,\n      \"lagran;\": 8466,\n      \"lambda;\": 955,\n      \"lang;\": 10216,\n      \"langd;\": 10641,\n      \"langle;\": 10216,\n      \"lap;\": 10885,\n      \"laquo\": 171,\n      \"laquo;\": 171,\n      \"larr;\": 8592,\n      \"larrb;\": 8676,\n      \"larrbfs;\": 10527,\n      \"larrfs;\": 10525,\n      \"larrhk;\": 8617,\n      \"larrlp;\": 8619,\n      \"larrpl;\": 10553,\n      \"larrsim;\": 10611,\n      \"larrtl;\": 8610,\n      \"lat;\": 10923,\n      \"latail;\": 10521,\n      \"late;\": 10925,\n      \"lates;\": [10925, 65024],\n      \"lbarr;\": 10508,\n      \"lbbrk;\": 10098,\n      \"lbrace;\": 123,\n      \"lbrack;\": 91,\n      \"lbrke;\": 10635,\n      \"lbrksld;\": 10639,\n      \"lbrkslu;\": 10637,\n      \"lcaron;\": 318,\n      \"lcedil;\": 316,\n      \"lceil;\": 8968,\n      \"lcub;\": 123,\n      \"lcy;\": 1083,\n      \"ldca;\": 10550,\n      \"ldquo;\": 8220,\n      \"ldquor;\": 8222,\n      \"ldrdhar;\": 10599,\n      \"ldrushar;\": 10571,\n      \"ldsh;\": 8626,\n      \"le;\": 8804,\n      \"leftarrow;\": 8592,\n      \"leftarrowtail;\": 8610,\n      \"leftharpoondown;\": 8637,\n      \"leftharpoonup;\": 8636,\n      \"leftleftarrows;\": 8647,\n      \"leftrightarrow;\": 8596,\n      \"leftrightarrows;\": 8646,\n      \"leftrightharpoons;\": 8651,\n      \"leftrightsquigarrow;\": 8621,\n      \"leftthreetimes;\": 8907,\n      \"leg;\": 8922,\n      \"leq;\": 8804,\n      \"leqq;\": 8806,\n      \"leqslant;\": 10877,\n      \"les;\": 10877,\n      \"lescc;\": 10920,\n      \"lesdot;\": 10879,\n      \"lesdoto;\": 10881,\n      \"lesdotor;\": 10883,\n      \"lesg;\": [8922, 65024],\n      \"lesges;\": 10899,\n      \"lessapprox;\": 10885,\n      \"lessdot;\": 8918,\n      \"lesseqgtr;\": 8922,\n      \"lesseqqgtr;\": 10891,\n      \"lessgtr;\": 8822,\n      \"lesssim;\": 8818,\n      \"lfisht;\": 10620,\n      \"lfloor;\": 8970,\n      \"lfr;\": [55349, 56617],\n      \"lg;\": 8822,\n      \"lgE;\": 10897,\n      \"lhard;\": 8637,\n      \"lharu;\": 8636,\n      \"lharul;\": 10602,\n      \"lhblk;\": 9604,\n      \"ljcy;\": 1113,\n      \"ll;\": 8810,\n      \"llarr;\": 8647,\n      \"llcorner;\": 8990,\n      \"llhard;\": 10603,\n      \"lltri;\": 9722,\n      \"lmidot;\": 320,\n      \"lmoust;\": 9136,\n      \"lmoustache;\": 9136,\n      \"lnE;\": 8808,\n      \"lnap;\": 10889,\n      \"lnapprox;\": 10889,\n      \"lne;\": 10887,\n      \"lneq;\": 10887,\n      \"lneqq;\": 8808,\n      \"lnsim;\": 8934,\n      \"loang;\": 10220,\n      \"loarr;\": 8701,\n      \"lobrk;\": 10214,\n      \"longleftarrow;\": 10229,\n      \"longleftrightarrow;\": 10231,\n      \"longmapsto;\": 10236,\n      \"longrightarrow;\": 10230,\n      \"looparrowleft;\": 8619,\n      \"looparrowright;\": 8620,\n      \"lopar;\": 10629,\n      \"lopf;\": [55349, 56669],\n      \"loplus;\": 10797,\n      \"lotimes;\": 10804,\n      \"lowast;\": 8727,\n      \"lowbar;\": 95,\n      \"loz;\": 9674,\n      \"lozenge;\": 9674,\n      \"lozf;\": 10731,\n      \"lpar;\": 40,\n      \"lparlt;\": 10643,\n      \"lrarr;\": 8646,\n      \"lrcorner;\": 8991,\n      \"lrhar;\": 8651,\n      \"lrhard;\": 10605,\n      \"lrm;\": 8206,\n      \"lrtri;\": 8895,\n      \"lsaquo;\": 8249,\n      \"lscr;\": [55349, 56513],\n      \"lsh;\": 8624,\n      \"lsim;\": 8818,\n      \"lsime;\": 10893,\n      \"lsimg;\": 10895,\n      \"lsqb;\": 91,\n      \"lsquo;\": 8216,\n      \"lsquor;\": 8218,\n      \"lstrok;\": 322,\n      \"lt\": 60,\n      \"lt;\": 60,\n      \"ltcc;\": 10918,\n      \"ltcir;\": 10873,\n      \"ltdot;\": 8918,\n      \"lthree;\": 8907,\n      \"ltimes;\": 8905,\n      \"ltlarr;\": 10614,\n      \"ltquest;\": 10875,\n      \"ltrPar;\": 10646,\n      \"ltri;\": 9667,\n      \"ltrie;\": 8884,\n      \"ltrif;\": 9666,\n      \"lurdshar;\": 10570,\n      \"luruhar;\": 10598,\n      \"lvertneqq;\": [8808, 65024],\n      \"lvnE;\": [8808, 65024],\n      \"mDDot;\": 8762,\n      \"macr\": 175,\n      \"macr;\": 175,\n      \"male;\": 9794,\n      \"malt;\": 10016,\n      \"maltese;\": 10016,\n      \"map;\": 8614,\n      \"mapsto;\": 8614,\n      \"mapstodown;\": 8615,\n      \"mapstoleft;\": 8612,\n      \"mapstoup;\": 8613,\n      \"marker;\": 9646,\n      \"mcomma;\": 10793,\n      \"mcy;\": 1084,\n      \"mdash;\": 8212,\n      \"measuredangle;\": 8737,\n      \"mfr;\": [55349, 56618],\n      \"mho;\": 8487,\n      \"micro\": 181,\n      \"micro;\": 181,\n      \"mid;\": 8739,\n      \"midast;\": 42,\n      \"midcir;\": 10992,\n      \"middot\": 183,\n      \"middot;\": 183,\n      \"minus;\": 8722,\n      \"minusb;\": 8863,\n      \"minusd;\": 8760,\n      \"minusdu;\": 10794,\n      \"mlcp;\": 10971,\n      \"mldr;\": 8230,\n      \"mnplus;\": 8723,\n      \"models;\": 8871,\n      \"mopf;\": [55349, 56670],\n      \"mp;\": 8723,\n      \"mscr;\": [55349, 56514],\n      \"mstpos;\": 8766,\n      \"mu;\": 956,\n      \"multimap;\": 8888,\n      \"mumap;\": 8888,\n      \"nGg;\": [8921, 824],\n      \"nGt;\": [8811, 8402],\n      \"nGtv;\": [8811, 824],\n      \"nLeftarrow;\": 8653,\n      \"nLeftrightarrow;\": 8654,\n      \"nLl;\": [8920, 824],\n      \"nLt;\": [8810, 8402],\n      \"nLtv;\": [8810, 824],\n      \"nRightarrow;\": 8655,\n      \"nVDash;\": 8879,\n      \"nVdash;\": 8878,\n      \"nabla;\": 8711,\n      \"nacute;\": 324,\n      \"nang;\": [8736, 8402],\n      \"nap;\": 8777,\n      \"napE;\": [10864, 824],\n      \"napid;\": [8779, 824],\n      \"napos;\": 329,\n      \"napprox;\": 8777,\n      \"natur;\": 9838,\n      \"natural;\": 9838,\n      \"naturals;\": 8469,\n      \"nbsp\": 160,\n      \"nbsp;\": 160,\n      \"nbump;\": [8782, 824],\n      \"nbumpe;\": [8783, 824],\n      \"ncap;\": 10819,\n      \"ncaron;\": 328,\n      \"ncedil;\": 326,\n      \"ncong;\": 8775,\n      \"ncongdot;\": [10861, 824],\n      \"ncup;\": 10818,\n      \"ncy;\": 1085,\n      \"ndash;\": 8211,\n      \"ne;\": 8800,\n      \"neArr;\": 8663,\n      \"nearhk;\": 10532,\n      \"nearr;\": 8599,\n      \"nearrow;\": 8599,\n      \"nedot;\": [8784, 824],\n      \"nequiv;\": 8802,\n      \"nesear;\": 10536,\n      \"nesim;\": [8770, 824],\n      \"nexist;\": 8708,\n      \"nexists;\": 8708,\n      \"nfr;\": [55349, 56619],\n      \"ngE;\": [8807, 824],\n      \"nge;\": 8817,\n      \"ngeq;\": 8817,\n      \"ngeqq;\": [8807, 824],\n      \"ngeqslant;\": [10878, 824],\n      \"nges;\": [10878, 824],\n      \"ngsim;\": 8821,\n      \"ngt;\": 8815,\n      \"ngtr;\": 8815,\n      \"nhArr;\": 8654,\n      \"nharr;\": 8622,\n      \"nhpar;\": 10994,\n      \"ni;\": 8715,\n      \"nis;\": 8956,\n      \"nisd;\": 8954,\n      \"niv;\": 8715,\n      \"njcy;\": 1114,\n      \"nlArr;\": 8653,\n      \"nlE;\": [8806, 824],\n      \"nlarr;\": 8602,\n      \"nldr;\": 8229,\n      \"nle;\": 8816,\n      \"nleftarrow;\": 8602,\n      \"nleftrightarrow;\": 8622,\n      \"nleq;\": 8816,\n      \"nleqq;\": [8806, 824],\n      \"nleqslant;\": [10877, 824],\n      \"nles;\": [10877, 824],\n      \"nless;\": 8814,\n      \"nlsim;\": 8820,\n      \"nlt;\": 8814,\n      \"nltri;\": 8938,\n      \"nltrie;\": 8940,\n      \"nmid;\": 8740,\n      \"nopf;\": [55349, 56671],\n      \"not\": 172,\n      \"not;\": 172,\n      \"notin;\": 8713,\n      \"notinE;\": [8953, 824],\n      \"notindot;\": [8949, 824],\n      \"notinva;\": 8713,\n      \"notinvb;\": 8951,\n      \"notinvc;\": 8950,\n      \"notni;\": 8716,\n      \"notniva;\": 8716,\n      \"notnivb;\": 8958,\n      \"notnivc;\": 8957,\n      \"npar;\": 8742,\n      \"nparallel;\": 8742,\n      \"nparsl;\": [11005, 8421],\n      \"npart;\": [8706, 824],\n      \"npolint;\": 10772,\n      \"npr;\": 8832,\n      \"nprcue;\": 8928,\n      \"npre;\": [10927, 824],\n      \"nprec;\": 8832,\n      \"npreceq;\": [10927, 824],\n      \"nrArr;\": 8655,\n      \"nrarr;\": 8603,\n      \"nrarrc;\": [10547, 824],\n      \"nrarrw;\": [8605, 824],\n      \"nrightarrow;\": 8603,\n      \"nrtri;\": 8939,\n      \"nrtrie;\": 8941,\n      \"nsc;\": 8833,\n      \"nsccue;\": 8929,\n      \"nsce;\": [10928, 824],\n      \"nscr;\": [55349, 56515],\n      \"nshortmid;\": 8740,\n      \"nshortparallel;\": 8742,\n      \"nsim;\": 8769,\n      \"nsime;\": 8772,\n      \"nsimeq;\": 8772,\n      \"nsmid;\": 8740,\n      \"nspar;\": 8742,\n      \"nsqsube;\": 8930,\n      \"nsqsupe;\": 8931,\n      \"nsub;\": 8836,\n      \"nsubE;\": [10949, 824],\n      \"nsube;\": 8840,\n      \"nsubset;\": [8834, 8402],\n      \"nsubseteq;\": 8840,\n      \"nsubseteqq;\": [10949, 824],\n      \"nsucc;\": 8833,\n      \"nsucceq;\": [10928, 824],\n      \"nsup;\": 8837,\n      \"nsupE;\": [10950, 824],\n      \"nsupe;\": 8841,\n      \"nsupset;\": [8835, 8402],\n      \"nsupseteq;\": 8841,\n      \"nsupseteqq;\": [10950, 824],\n      \"ntgl;\": 8825,\n      \"ntilde\": 241,\n      \"ntilde;\": 241,\n      \"ntlg;\": 8824,\n      \"ntriangleleft;\": 8938,\n      \"ntrianglelefteq;\": 8940,\n      \"ntriangleright;\": 8939,\n      \"ntrianglerighteq;\": 8941,\n      \"nu;\": 957,\n      \"num;\": 35,\n      \"numero;\": 8470,\n      \"numsp;\": 8199,\n      \"nvDash;\": 8877,\n      \"nvHarr;\": 10500,\n      \"nvap;\": [8781, 8402],\n      \"nvdash;\": 8876,\n      \"nvge;\": [8805, 8402],\n      \"nvgt;\": [62, 8402],\n      \"nvinfin;\": 10718,\n      \"nvlArr;\": 10498,\n      \"nvle;\": [8804, 8402],\n      \"nvlt;\": [60, 8402],\n      \"nvltrie;\": [8884, 8402],\n      \"nvrArr;\": 10499,\n      \"nvrtrie;\": [8885, 8402],\n      \"nvsim;\": [8764, 8402],\n      \"nwArr;\": 8662,\n      \"nwarhk;\": 10531,\n      \"nwarr;\": 8598,\n      \"nwarrow;\": 8598,\n      \"nwnear;\": 10535,\n      \"oS;\": 9416,\n      \"oacute\": 243,\n      \"oacute;\": 243,\n      \"oast;\": 8859,\n      \"ocir;\": 8858,\n      \"ocirc\": 244,\n      \"ocirc;\": 244,\n      \"ocy;\": 1086,\n      \"odash;\": 8861,\n      \"odblac;\": 337,\n      \"odiv;\": 10808,\n      \"odot;\": 8857,\n      \"odsold;\": 10684,\n      \"oelig;\": 339,\n      \"ofcir;\": 10687,\n      \"ofr;\": [55349, 56620],\n      \"ogon;\": 731,\n      \"ograve\": 242,\n      \"ograve;\": 242,\n      \"ogt;\": 10689,\n      \"ohbar;\": 10677,\n      \"ohm;\": 937,\n      \"oint;\": 8750,\n      \"olarr;\": 8634,\n      \"olcir;\": 10686,\n      \"olcross;\": 10683,\n      \"oline;\": 8254,\n      \"olt;\": 10688,\n      \"omacr;\": 333,\n      \"omega;\": 969,\n      \"omicron;\": 959,\n      \"omid;\": 10678,\n      \"ominus;\": 8854,\n      \"oopf;\": [55349, 56672],\n      \"opar;\": 10679,\n      \"operp;\": 10681,\n      \"oplus;\": 8853,\n      \"or;\": 8744,\n      \"orarr;\": 8635,\n      \"ord;\": 10845,\n      \"order;\": 8500,\n      \"orderof;\": 8500,\n      \"ordf\": 170,\n      \"ordf;\": 170,\n      \"ordm\": 186,\n      \"ordm;\": 186,\n      \"origof;\": 8886,\n      \"oror;\": 10838,\n      \"orslope;\": 10839,\n      \"orv;\": 10843,\n      \"oscr;\": 8500,\n      \"oslash\": 248,\n      \"oslash;\": 248,\n      \"osol;\": 8856,\n      \"otilde\": 245,\n      \"otilde;\": 245,\n      \"otimes;\": 8855,\n      \"otimesas;\": 10806,\n      \"ouml\": 246,\n      \"ouml;\": 246,\n      \"ovbar;\": 9021,\n      \"par;\": 8741,\n      \"para\": 182,\n      \"para;\": 182,\n      \"parallel;\": 8741,\n      \"parsim;\": 10995,\n      \"parsl;\": 11005,\n      \"part;\": 8706,\n      \"pcy;\": 1087,\n      \"percnt;\": 37,\n      \"period;\": 46,\n      \"permil;\": 8240,\n      \"perp;\": 8869,\n      \"pertenk;\": 8241,\n      \"pfr;\": [55349, 56621],\n      \"phi;\": 966,\n      \"phiv;\": 981,\n      \"phmmat;\": 8499,\n      \"phone;\": 9742,\n      \"pi;\": 960,\n      \"pitchfork;\": 8916,\n      \"piv;\": 982,\n      \"planck;\": 8463,\n      \"planckh;\": 8462,\n      \"plankv;\": 8463,\n      \"plus;\": 43,\n      \"plusacir;\": 10787,\n      \"plusb;\": 8862,\n      \"pluscir;\": 10786,\n      \"plusdo;\": 8724,\n      \"plusdu;\": 10789,\n      \"pluse;\": 10866,\n      \"plusmn\": 177,\n      \"plusmn;\": 177,\n      \"plussim;\": 10790,\n      \"plustwo;\": 10791,\n      \"pm;\": 177,\n      \"pointint;\": 10773,\n      \"popf;\": [55349, 56673],\n      \"pound\": 163,\n      \"pound;\": 163,\n      \"pr;\": 8826,\n      \"prE;\": 10931,\n      \"prap;\": 10935,\n      \"prcue;\": 8828,\n      \"pre;\": 10927,\n      \"prec;\": 8826,\n      \"precapprox;\": 10935,\n      \"preccurlyeq;\": 8828,\n      \"preceq;\": 10927,\n      \"precnapprox;\": 10937,\n      \"precneqq;\": 10933,\n      \"precnsim;\": 8936,\n      \"precsim;\": 8830,\n      \"prime;\": 8242,\n      \"primes;\": 8473,\n      \"prnE;\": 10933,\n      \"prnap;\": 10937,\n      \"prnsim;\": 8936,\n      \"prod;\": 8719,\n      \"profalar;\": 9006,\n      \"profline;\": 8978,\n      \"profsurf;\": 8979,\n      \"prop;\": 8733,\n      \"propto;\": 8733,\n      \"prsim;\": 8830,\n      \"prurel;\": 8880,\n      \"pscr;\": [55349, 56517],\n      \"psi;\": 968,\n      \"puncsp;\": 8200,\n      \"qfr;\": [55349, 56622],\n      \"qint;\": 10764,\n      \"qopf;\": [55349, 56674],\n      \"qprime;\": 8279,\n      \"qscr;\": [55349, 56518],\n      \"quaternions;\": 8461,\n      \"quatint;\": 10774,\n      \"quest;\": 63,\n      \"questeq;\": 8799,\n      \"quot\": 34,\n      \"quot;\": 34,\n      \"rAarr;\": 8667,\n      \"rArr;\": 8658,\n      \"rAtail;\": 10524,\n      \"rBarr;\": 10511,\n      \"rHar;\": 10596,\n      \"race;\": [8765, 817],\n      \"racute;\": 341,\n      \"radic;\": 8730,\n      \"raemptyv;\": 10675,\n      \"rang;\": 10217,\n      \"rangd;\": 10642,\n      \"range;\": 10661,\n      \"rangle;\": 10217,\n      \"raquo\": 187,\n      \"raquo;\": 187,\n      \"rarr;\": 8594,\n      \"rarrap;\": 10613,\n      \"rarrb;\": 8677,\n      \"rarrbfs;\": 10528,\n      \"rarrc;\": 10547,\n      \"rarrfs;\": 10526,\n      \"rarrhk;\": 8618,\n      \"rarrlp;\": 8620,\n      \"rarrpl;\": 10565,\n      \"rarrsim;\": 10612,\n      \"rarrtl;\": 8611,\n      \"rarrw;\": 8605,\n      \"ratail;\": 10522,\n      \"ratio;\": 8758,\n      \"rationals;\": 8474,\n      \"rbarr;\": 10509,\n      \"rbbrk;\": 10099,\n      \"rbrace;\": 125,\n      \"rbrack;\": 93,\n      \"rbrke;\": 10636,\n      \"rbrksld;\": 10638,\n      \"rbrkslu;\": 10640,\n      \"rcaron;\": 345,\n      \"rcedil;\": 343,\n      \"rceil;\": 8969,\n      \"rcub;\": 125,\n      \"rcy;\": 1088,\n      \"rdca;\": 10551,\n      \"rdldhar;\": 10601,\n      \"rdquo;\": 8221,\n      \"rdquor;\": 8221,\n      \"rdsh;\": 8627,\n      \"real;\": 8476,\n      \"realine;\": 8475,\n      \"realpart;\": 8476,\n      \"reals;\": 8477,\n      \"rect;\": 9645,\n      \"reg\": 174,\n      \"reg;\": 174,\n      \"rfisht;\": 10621,\n      \"rfloor;\": 8971,\n      \"rfr;\": [55349, 56623],\n      \"rhard;\": 8641,\n      \"rharu;\": 8640,\n      \"rharul;\": 10604,\n      \"rho;\": 961,\n      \"rhov;\": 1009,\n      \"rightarrow;\": 8594,\n      \"rightarrowtail;\": 8611,\n      \"rightharpoondown;\": 8641,\n      \"rightharpoonup;\": 8640,\n      \"rightleftarrows;\": 8644,\n      \"rightleftharpoons;\": 8652,\n      \"rightrightarrows;\": 8649,\n      \"rightsquigarrow;\": 8605,\n      \"rightthreetimes;\": 8908,\n      \"ring;\": 730,\n      \"risingdotseq;\": 8787,\n      \"rlarr;\": 8644,\n      \"rlhar;\": 8652,\n      \"rlm;\": 8207,\n      \"rmoust;\": 9137,\n      \"rmoustache;\": 9137,\n      \"rnmid;\": 10990,\n      \"roang;\": 10221,\n      \"roarr;\": 8702,\n      \"robrk;\": 10215,\n      \"ropar;\": 10630,\n      \"ropf;\": [55349, 56675],\n      \"roplus;\": 10798,\n      \"rotimes;\": 10805,\n      \"rpar;\": 41,\n      \"rpargt;\": 10644,\n      \"rppolint;\": 10770,\n      \"rrarr;\": 8649,\n      \"rsaquo;\": 8250,\n      \"rscr;\": [55349, 56519],\n      \"rsh;\": 8625,\n      \"rsqb;\": 93,\n      \"rsquo;\": 8217,\n      \"rsquor;\": 8217,\n      \"rthree;\": 8908,\n      \"rtimes;\": 8906,\n      \"rtri;\": 9657,\n      \"rtrie;\": 8885,\n      \"rtrif;\": 9656,\n      \"rtriltri;\": 10702,\n      \"ruluhar;\": 10600,\n      \"rx;\": 8478,\n      \"sacute;\": 347,\n      \"sbquo;\": 8218,\n      \"sc;\": 8827,\n      \"scE;\": 10932,\n      \"scap;\": 10936,\n      \"scaron;\": 353,\n      \"sccue;\": 8829,\n      \"sce;\": 10928,\n      \"scedil;\": 351,\n      \"scirc;\": 349,\n      \"scnE;\": 10934,\n      \"scnap;\": 10938,\n      \"scnsim;\": 8937,\n      \"scpolint;\": 10771,\n      \"scsim;\": 8831,\n      \"scy;\": 1089,\n      \"sdot;\": 8901,\n      \"sdotb;\": 8865,\n      \"sdote;\": 10854,\n      \"seArr;\": 8664,\n      \"searhk;\": 10533,\n      \"searr;\": 8600,\n      \"searrow;\": 8600,\n      \"sect\": 167,\n      \"sect;\": 167,\n      \"semi;\": 59,\n      \"seswar;\": 10537,\n      \"setminus;\": 8726,\n      \"setmn;\": 8726,\n      \"sext;\": 10038,\n      \"sfr;\": [55349, 56624],\n      \"sfrown;\": 8994,\n      \"sharp;\": 9839,\n      \"shchcy;\": 1097,\n      \"shcy;\": 1096,\n      \"shortmid;\": 8739,\n      \"shortparallel;\": 8741,\n      \"shy\": 173,\n      \"shy;\": 173,\n      \"sigma;\": 963,\n      \"sigmaf;\": 962,\n      \"sigmav;\": 962,\n      \"sim;\": 8764,\n      \"simdot;\": 10858,\n      \"sime;\": 8771,\n      \"simeq;\": 8771,\n      \"simg;\": 10910,\n      \"simgE;\": 10912,\n      \"siml;\": 10909,\n      \"simlE;\": 10911,\n      \"simne;\": 8774,\n      \"simplus;\": 10788,\n      \"simrarr;\": 10610,\n      \"slarr;\": 8592,\n      \"smallsetminus;\": 8726,\n      \"smashp;\": 10803,\n      \"smeparsl;\": 10724,\n      \"smid;\": 8739,\n      \"smile;\": 8995,\n      \"smt;\": 10922,\n      \"smte;\": 10924,\n      \"smtes;\": [10924, 65024],\n      \"softcy;\": 1100,\n      \"sol;\": 47,\n      \"solb;\": 10692,\n      \"solbar;\": 9023,\n      \"sopf;\": [55349, 56676],\n      \"spades;\": 9824,\n      \"spadesuit;\": 9824,\n      \"spar;\": 8741,\n      \"sqcap;\": 8851,\n      \"sqcaps;\": [8851, 65024],\n      \"sqcup;\": 8852,\n      \"sqcups;\": [8852, 65024],\n      \"sqsub;\": 8847,\n      \"sqsube;\": 8849,\n      \"sqsubset;\": 8847,\n      \"sqsubseteq;\": 8849,\n      \"sqsup;\": 8848,\n      \"sqsupe;\": 8850,\n      \"sqsupset;\": 8848,\n      \"sqsupseteq;\": 8850,\n      \"squ;\": 9633,\n      \"square;\": 9633,\n      \"squarf;\": 9642,\n      \"squf;\": 9642,\n      \"srarr;\": 8594,\n      \"sscr;\": [55349, 56520],\n      \"ssetmn;\": 8726,\n      \"ssmile;\": 8995,\n      \"sstarf;\": 8902,\n      \"star;\": 9734,\n      \"starf;\": 9733,\n      \"straightepsilon;\": 1013,\n      \"straightphi;\": 981,\n      \"strns;\": 175,\n      \"sub;\": 8834,\n      \"subE;\": 10949,\n      \"subdot;\": 10941,\n      \"sube;\": 8838,\n      \"subedot;\": 10947,\n      \"submult;\": 10945,\n      \"subnE;\": 10955,\n      \"subne;\": 8842,\n      \"subplus;\": 10943,\n      \"subrarr;\": 10617,\n      \"subset;\": 8834,\n      \"subseteq;\": 8838,\n      \"subseteqq;\": 10949,\n      \"subsetneq;\": 8842,\n      \"subsetneqq;\": 10955,\n      \"subsim;\": 10951,\n      \"subsub;\": 10965,\n      \"subsup;\": 10963,\n      \"succ;\": 8827,\n      \"succapprox;\": 10936,\n      \"succcurlyeq;\": 8829,\n      \"succeq;\": 10928,\n      \"succnapprox;\": 10938,\n      \"succneqq;\": 10934,\n      \"succnsim;\": 8937,\n      \"succsim;\": 8831,\n      \"sum;\": 8721,\n      \"sung;\": 9834,\n      \"sup1\": 185,\n      \"sup1;\": 185,\n      \"sup2\": 178,\n      \"sup2;\": 178,\n      \"sup3\": 179,\n      \"sup3;\": 179,\n      \"sup;\": 8835,\n      \"supE;\": 10950,\n      \"supdot;\": 10942,\n      \"supdsub;\": 10968,\n      \"supe;\": 8839,\n      \"supedot;\": 10948,\n      \"suphsol;\": 10185,\n      \"suphsub;\": 10967,\n      \"suplarr;\": 10619,\n      \"supmult;\": 10946,\n      \"supnE;\": 10956,\n      \"supne;\": 8843,\n      \"supplus;\": 10944,\n      \"supset;\": 8835,\n      \"supseteq;\": 8839,\n      \"supseteqq;\": 10950,\n      \"supsetneq;\": 8843,\n      \"supsetneqq;\": 10956,\n      \"supsim;\": 10952,\n      \"supsub;\": 10964,\n      \"supsup;\": 10966,\n      \"swArr;\": 8665,\n      \"swarhk;\": 10534,\n      \"swarr;\": 8601,\n      \"swarrow;\": 8601,\n      \"swnwar;\": 10538,\n      \"szlig\": 223,\n      \"szlig;\": 223,\n      \"target;\": 8982,\n      \"tau;\": 964,\n      \"tbrk;\": 9140,\n      \"tcaron;\": 357,\n      \"tcedil;\": 355,\n      \"tcy;\": 1090,\n      \"tdot;\": 8411,\n      \"telrec;\": 8981,\n      \"tfr;\": [55349, 56625],\n      \"there4;\": 8756,\n      \"therefore;\": 8756,\n      \"theta;\": 952,\n      \"thetasym;\": 977,\n      \"thetav;\": 977,\n      \"thickapprox;\": 8776,\n      \"thicksim;\": 8764,\n      \"thinsp;\": 8201,\n      \"thkap;\": 8776,\n      \"thksim;\": 8764,\n      \"thorn\": 254,\n      \"thorn;\": 254,\n      \"tilde;\": 732,\n      \"times\": 215,\n      \"times;\": 215,\n      \"timesb;\": 8864,\n      \"timesbar;\": 10801,\n      \"timesd;\": 10800,\n      \"tint;\": 8749,\n      \"toea;\": 10536,\n      \"top;\": 8868,\n      \"topbot;\": 9014,\n      \"topcir;\": 10993,\n      \"topf;\": [55349, 56677],\n      \"topfork;\": 10970,\n      \"tosa;\": 10537,\n      \"tprime;\": 8244,\n      \"trade;\": 8482,\n      \"triangle;\": 9653,\n      \"triangledown;\": 9663,\n      \"triangleleft;\": 9667,\n      \"trianglelefteq;\": 8884,\n      \"triangleq;\": 8796,\n      \"triangleright;\": 9657,\n      \"trianglerighteq;\": 8885,\n      \"tridot;\": 9708,\n      \"trie;\": 8796,\n      \"triminus;\": 10810,\n      \"triplus;\": 10809,\n      \"trisb;\": 10701,\n      \"tritime;\": 10811,\n      \"trpezium;\": 9186,\n      \"tscr;\": [55349, 56521],\n      \"tscy;\": 1094,\n      \"tshcy;\": 1115,\n      \"tstrok;\": 359,\n      \"twixt;\": 8812,\n      \"twoheadleftarrow;\": 8606,\n      \"twoheadrightarrow;\": 8608,\n      \"uArr;\": 8657,\n      \"uHar;\": 10595,\n      \"uacute\": 250,\n      \"uacute;\": 250,\n      \"uarr;\": 8593,\n      \"ubrcy;\": 1118,\n      \"ubreve;\": 365,\n      \"ucirc\": 251,\n      \"ucirc;\": 251,\n      \"ucy;\": 1091,\n      \"udarr;\": 8645,\n      \"udblac;\": 369,\n      \"udhar;\": 10606,\n      \"ufisht;\": 10622,\n      \"ufr;\": [55349, 56626],\n      \"ugrave\": 249,\n      \"ugrave;\": 249,\n      \"uharl;\": 8639,\n      \"uharr;\": 8638,\n      \"uhblk;\": 9600,\n      \"ulcorn;\": 8988,\n      \"ulcorner;\": 8988,\n      \"ulcrop;\": 8975,\n      \"ultri;\": 9720,\n      \"umacr;\": 363,\n      \"uml\": 168,\n      \"uml;\": 168,\n      \"uogon;\": 371,\n      \"uopf;\": [55349, 56678],\n      \"uparrow;\": 8593,\n      \"updownarrow;\": 8597,\n      \"upharpoonleft;\": 8639,\n      \"upharpoonright;\": 8638,\n      \"uplus;\": 8846,\n      \"upsi;\": 965,\n      \"upsih;\": 978,\n      \"upsilon;\": 965,\n      \"upuparrows;\": 8648,\n      \"urcorn;\": 8989,\n      \"urcorner;\": 8989,\n      \"urcrop;\": 8974,\n      \"uring;\": 367,\n      \"urtri;\": 9721,\n      \"uscr;\": [55349, 56522],\n      \"utdot;\": 8944,\n      \"utilde;\": 361,\n      \"utri;\": 9653,\n      \"utrif;\": 9652,\n      \"uuarr;\": 8648,\n      \"uuml\": 252,\n      \"uuml;\": 252,\n      \"uwangle;\": 10663,\n      \"vArr;\": 8661,\n      \"vBar;\": 10984,\n      \"vBarv;\": 10985,\n      \"vDash;\": 8872,\n      \"vangrt;\": 10652,\n      \"varepsilon;\": 1013,\n      \"varkappa;\": 1008,\n      \"varnothing;\": 8709,\n      \"varphi;\": 981,\n      \"varpi;\": 982,\n      \"varpropto;\": 8733,\n      \"varr;\": 8597,\n      \"varrho;\": 1009,\n      \"varsigma;\": 962,\n      \"varsubsetneq;\": [8842, 65024],\n      \"varsubsetneqq;\": [10955, 65024],\n      \"varsupsetneq;\": [8843, 65024],\n      \"varsupsetneqq;\": [10956, 65024],\n      \"vartheta;\": 977,\n      \"vartriangleleft;\": 8882,\n      \"vartriangleright;\": 8883,\n      \"vcy;\": 1074,\n      \"vdash;\": 8866,\n      \"vee;\": 8744,\n      \"veebar;\": 8891,\n      \"veeeq;\": 8794,\n      \"vellip;\": 8942,\n      \"verbar;\": 124,\n      \"vert;\": 124,\n      \"vfr;\": [55349, 56627],\n      \"vltri;\": 8882,\n      \"vnsub;\": [8834, 8402],\n      \"vnsup;\": [8835, 8402],\n      \"vopf;\": [55349, 56679],\n      \"vprop;\": 8733,\n      \"vrtri;\": 8883,\n      \"vscr;\": [55349, 56523],\n      \"vsubnE;\": [10955, 65024],\n      \"vsubne;\": [8842, 65024],\n      \"vsupnE;\": [10956, 65024],\n      \"vsupne;\": [8843, 65024],\n      \"vzigzag;\": 10650,\n      \"wcirc;\": 373,\n      \"wedbar;\": 10847,\n      \"wedge;\": 8743,\n      \"wedgeq;\": 8793,\n      \"weierp;\": 8472,\n      \"wfr;\": [55349, 56628],\n      \"wopf;\": [55349, 56680],\n      \"wp;\": 8472,\n      \"wr;\": 8768,\n      \"wreath;\": 8768,\n      \"wscr;\": [55349, 56524],\n      \"xcap;\": 8898,\n      \"xcirc;\": 9711,\n      \"xcup;\": 8899,\n      \"xdtri;\": 9661,\n      \"xfr;\": [55349, 56629],\n      \"xhArr;\": 10234,\n      \"xharr;\": 10231,\n      \"xi;\": 958,\n      \"xlArr;\": 10232,\n      \"xlarr;\": 10229,\n      \"xmap;\": 10236,\n      \"xnis;\": 8955,\n      \"xodot;\": 10752,\n      \"xopf;\": [55349, 56681],\n      \"xoplus;\": 10753,\n      \"xotime;\": 10754,\n      \"xrArr;\": 10233,\n      \"xrarr;\": 10230,\n      \"xscr;\": [55349, 56525],\n      \"xsqcup;\": 10758,\n      \"xuplus;\": 10756,\n      \"xutri;\": 9651,\n      \"xvee;\": 8897,\n      \"xwedge;\": 8896,\n      \"yacute\": 253,\n      \"yacute;\": 253,\n      \"yacy;\": 1103,\n      \"ycirc;\": 375,\n      \"ycy;\": 1099,\n      \"yen\": 165,\n      \"yen;\": 165,\n      \"yfr;\": [55349, 56630],\n      \"yicy;\": 1111,\n      \"yopf;\": [55349, 56682],\n      \"yscr;\": [55349, 56526],\n      \"yucy;\": 1102,\n      \"yuml\": 255,\n      \"yuml;\": 255,\n      \"zacute;\": 378,\n      \"zcaron;\": 382,\n      \"zcy;\": 1079,\n      \"zdot;\": 380,\n      \"zeetrf;\": 8488,\n      \"zeta;\": 950,\n      \"zfr;\": [55349, 56631],\n      \"zhcy;\": 1078,\n      \"zigrarr;\": 8669,\n      \"zopf;\": [55349, 56683],\n      \"zscr;\": [55349, 56527],\n      \"zwj;\": 8205,\n      \"zwnj;\": 8204\n    };\n    var NAMEDCHARREF = /(A(?:Elig;?|MP;?|acute;?|breve;|c(?:irc;?|y;)|fr;|grave;?|lpha;|macr;|nd;|o(?:gon;|pf;)|pplyFunction;|ring;?|s(?:cr;|sign;)|tilde;?|uml;?)|B(?:a(?:ckslash;|r(?:v;|wed;))|cy;|e(?:cause;|rnoullis;|ta;)|fr;|opf;|reve;|scr;|umpeq;)|C(?:Hcy;|OPY;?|a(?:cute;|p(?:;|italDifferentialD;)|yleys;)|c(?:aron;|edil;?|irc;|onint;)|dot;|e(?:dilla;|nterDot;)|fr;|hi;|ircle(?:Dot;|Minus;|Plus;|Times;)|lo(?:ckwiseContourIntegral;|seCurly(?:DoubleQuote;|Quote;))|o(?:lon(?:;|e;)|n(?:gruent;|int;|tourIntegral;)|p(?:f;|roduct;)|unterClockwiseContourIntegral;)|ross;|scr;|up(?:;|Cap;))|D(?:D(?:;|otrahd;)|Jcy;|Scy;|Zcy;|a(?:gger;|rr;|shv;)|c(?:aron;|y;)|el(?:;|ta;)|fr;|i(?:a(?:critical(?:Acute;|Do(?:t;|ubleAcute;)|Grave;|Tilde;)|mond;)|fferentialD;)|o(?:pf;|t(?:;|Dot;|Equal;)|uble(?:ContourIntegral;|Do(?:t;|wnArrow;)|L(?:eft(?:Arrow;|RightArrow;|Tee;)|ong(?:Left(?:Arrow;|RightArrow;)|RightArrow;))|Right(?:Arrow;|Tee;)|Up(?:Arrow;|DownArrow;)|VerticalBar;)|wn(?:Arrow(?:;|Bar;|UpArrow;)|Breve;|Left(?:RightVector;|TeeVector;|Vector(?:;|Bar;))|Right(?:TeeVector;|Vector(?:;|Bar;))|Tee(?:;|Arrow;)|arrow;))|s(?:cr;|trok;))|E(?:NG;|TH;?|acute;?|c(?:aron;|irc;?|y;)|dot;|fr;|grave;?|lement;|m(?:acr;|pty(?:SmallSquare;|VerySmallSquare;))|o(?:gon;|pf;)|psilon;|qu(?:al(?:;|Tilde;)|ilibrium;)|s(?:cr;|im;)|ta;|uml;?|x(?:ists;|ponentialE;))|F(?:cy;|fr;|illed(?:SmallSquare;|VerySmallSquare;)|o(?:pf;|rAll;|uriertrf;)|scr;)|G(?:Jcy;|T;?|amma(?:;|d;)|breve;|c(?:edil;|irc;|y;)|dot;|fr;|g;|opf;|reater(?:Equal(?:;|Less;)|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|scr;|t;)|H(?:ARDcy;|a(?:cek;|t;)|circ;|fr;|ilbertSpace;|o(?:pf;|rizontalLine;)|s(?:cr;|trok;)|ump(?:DownHump;|Equal;))|I(?:Ecy;|Jlig;|Ocy;|acute;?|c(?:irc;?|y;)|dot;|fr;|grave;?|m(?:;|a(?:cr;|ginaryI;)|plies;)|n(?:t(?:;|e(?:gral;|rsection;))|visible(?:Comma;|Times;))|o(?:gon;|pf;|ta;)|scr;|tilde;|u(?:kcy;|ml;?))|J(?:c(?:irc;|y;)|fr;|opf;|s(?:cr;|ercy;)|ukcy;)|K(?:Hcy;|Jcy;|appa;|c(?:edil;|y;)|fr;|opf;|scr;)|L(?:Jcy;|T;?|a(?:cute;|mbda;|ng;|placetrf;|rr;)|c(?:aron;|edil;|y;)|e(?:ft(?:A(?:ngleBracket;|rrow(?:;|Bar;|RightArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|Right(?:Arrow;|Vector;)|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;|rightarrow;)|ss(?:EqualGreater;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;))|fr;|l(?:;|eftarrow;)|midot;|o(?:ng(?:Left(?:Arrow;|RightArrow;)|RightArrow;|left(?:arrow;|rightarrow;)|rightarrow;)|pf;|wer(?:LeftArrow;|RightArrow;))|s(?:cr;|h;|trok;)|t;)|M(?:ap;|cy;|e(?:diumSpace;|llintrf;)|fr;|inusPlus;|opf;|scr;|u;)|N(?:Jcy;|acute;|c(?:aron;|edil;|y;)|e(?:gative(?:MediumSpace;|Thi(?:ckSpace;|nSpace;)|VeryThinSpace;)|sted(?:GreaterGreater;|LessLess;)|wLine;)|fr;|o(?:Break;|nBreakingSpace;|pf;|t(?:;|C(?:ongruent;|upCap;)|DoubleVerticalBar;|E(?:lement;|qual(?:;|Tilde;)|xists;)|Greater(?:;|Equal;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|Hump(?:DownHump;|Equal;)|Le(?:ftTriangle(?:;|Bar;|Equal;)|ss(?:;|Equal;|Greater;|Less;|SlantEqual;|Tilde;))|Nested(?:GreaterGreater;|LessLess;)|Precedes(?:;|Equal;|SlantEqual;)|R(?:everseElement;|ightTriangle(?:;|Bar;|Equal;))|S(?:quareSu(?:bset(?:;|Equal;)|perset(?:;|Equal;))|u(?:bset(?:;|Equal;)|cceeds(?:;|Equal;|SlantEqual;|Tilde;)|perset(?:;|Equal;)))|Tilde(?:;|Equal;|FullEqual;|Tilde;)|VerticalBar;))|scr;|tilde;?|u;)|O(?:Elig;|acute;?|c(?:irc;?|y;)|dblac;|fr;|grave;?|m(?:acr;|ega;|icron;)|opf;|penCurly(?:DoubleQuote;|Quote;)|r;|s(?:cr;|lash;?)|ti(?:lde;?|mes;)|uml;?|ver(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;))|P(?:artialD;|cy;|fr;|hi;|i;|lusMinus;|o(?:incareplane;|pf;)|r(?:;|ecedes(?:;|Equal;|SlantEqual;|Tilde;)|ime;|o(?:duct;|portion(?:;|al;)))|s(?:cr;|i;))|Q(?:UOT;?|fr;|opf;|scr;)|R(?:Barr;|EG;?|a(?:cute;|ng;|rr(?:;|tl;))|c(?:aron;|edil;|y;)|e(?:;|verse(?:E(?:lement;|quilibrium;)|UpEquilibrium;))|fr;|ho;|ight(?:A(?:ngleBracket;|rrow(?:;|Bar;|LeftArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;)|o(?:pf;|undImplies;)|rightarrow;|s(?:cr;|h;)|uleDelayed;)|S(?:H(?:CHcy;|cy;)|OFTcy;|acute;|c(?:;|aron;|edil;|irc;|y;)|fr;|hort(?:DownArrow;|LeftArrow;|RightArrow;|UpArrow;)|igma;|mallCircle;|opf;|q(?:rt;|uare(?:;|Intersection;|Su(?:bset(?:;|Equal;)|perset(?:;|Equal;))|Union;))|scr;|tar;|u(?:b(?:;|set(?:;|Equal;))|c(?:ceeds(?:;|Equal;|SlantEqual;|Tilde;)|hThat;)|m;|p(?:;|erset(?:;|Equal;)|set;)))|T(?:HORN;?|RADE;|S(?:Hcy;|cy;)|a(?:b;|u;)|c(?:aron;|edil;|y;)|fr;|h(?:e(?:refore;|ta;)|i(?:ckSpace;|nSpace;))|ilde(?:;|Equal;|FullEqual;|Tilde;)|opf;|ripleDot;|s(?:cr;|trok;))|U(?:a(?:cute;?|rr(?:;|ocir;))|br(?:cy;|eve;)|c(?:irc;?|y;)|dblac;|fr;|grave;?|macr;|n(?:der(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;)|ion(?:;|Plus;))|o(?:gon;|pf;)|p(?:Arrow(?:;|Bar;|DownArrow;)|DownArrow;|Equilibrium;|Tee(?:;|Arrow;)|arrow;|downarrow;|per(?:LeftArrow;|RightArrow;)|si(?:;|lon;))|ring;|scr;|tilde;|uml;?)|V(?:Dash;|bar;|cy;|dash(?:;|l;)|e(?:e;|r(?:bar;|t(?:;|ical(?:Bar;|Line;|Separator;|Tilde;))|yThinSpace;))|fr;|opf;|scr;|vdash;)|W(?:circ;|edge;|fr;|opf;|scr;)|X(?:fr;|i;|opf;|scr;)|Y(?:Acy;|Icy;|Ucy;|acute;?|c(?:irc;|y;)|fr;|opf;|scr;|uml;)|Z(?:Hcy;|acute;|c(?:aron;|y;)|dot;|e(?:roWidthSpace;|ta;)|fr;|opf;|scr;)|a(?:acute;?|breve;|c(?:;|E;|d;|irc;?|ute;?|y;)|elig;?|f(?:;|r;)|grave;?|l(?:e(?:fsym;|ph;)|pha;)|m(?:a(?:cr;|lg;)|p;?)|n(?:d(?:;|and;|d;|slope;|v;)|g(?:;|e;|le;|msd(?:;|a(?:a;|b;|c;|d;|e;|f;|g;|h;))|rt(?:;|vb(?:;|d;))|s(?:ph;|t;)|zarr;))|o(?:gon;|pf;)|p(?:;|E;|acir;|e;|id;|os;|prox(?:;|eq;))|ring;?|s(?:cr;|t;|ymp(?:;|eq;))|tilde;?|uml;?|w(?:conint;|int;))|b(?:Not;|a(?:ck(?:cong;|epsilon;|prime;|sim(?:;|eq;))|r(?:vee;|wed(?:;|ge;)))|brk(?:;|tbrk;)|c(?:ong;|y;)|dquo;|e(?:caus(?:;|e;)|mptyv;|psi;|rnou;|t(?:a;|h;|ween;))|fr;|ig(?:c(?:ap;|irc;|up;)|o(?:dot;|plus;|times;)|s(?:qcup;|tar;)|triangle(?:down;|up;)|uplus;|vee;|wedge;)|karow;|l(?:a(?:ck(?:lozenge;|square;|triangle(?:;|down;|left;|right;))|nk;)|k(?:1(?:2;|4;)|34;)|ock;)|n(?:e(?:;|quiv;)|ot;)|o(?:pf;|t(?:;|tom;)|wtie;|x(?:D(?:L;|R;|l;|r;)|H(?:;|D;|U;|d;|u;)|U(?:L;|R;|l;|r;)|V(?:;|H;|L;|R;|h;|l;|r;)|box;|d(?:L;|R;|l;|r;)|h(?:;|D;|U;|d;|u;)|minus;|plus;|times;|u(?:L;|R;|l;|r;)|v(?:;|H;|L;|R;|h;|l;|r;)))|prime;|r(?:eve;|vbar;?)|s(?:cr;|emi;|im(?:;|e;)|ol(?:;|b;|hsub;))|u(?:ll(?:;|et;)|mp(?:;|E;|e(?:;|q;))))|c(?:a(?:cute;|p(?:;|and;|brcup;|c(?:ap;|up;)|dot;|s;)|r(?:et;|on;))|c(?:a(?:ps;|ron;)|edil;?|irc;|ups(?:;|sm;))|dot;|e(?:dil;?|mptyv;|nt(?:;|erdot;|))|fr;|h(?:cy;|eck(?:;|mark;)|i;)|ir(?:;|E;|c(?:;|eq;|le(?:arrow(?:left;|right;)|d(?:R;|S;|ast;|circ;|dash;)))|e;|fnint;|mid;|scir;)|lubs(?:;|uit;)|o(?:lon(?:;|e(?:;|q;))|m(?:ma(?:;|t;)|p(?:;|fn;|le(?:ment;|xes;)))|n(?:g(?:;|dot;)|int;)|p(?:f;|rod;|y(?:;|sr;|)))|r(?:arr;|oss;)|s(?:cr;|u(?:b(?:;|e;)|p(?:;|e;)))|tdot;|u(?:darr(?:l;|r;)|e(?:pr;|sc;)|larr(?:;|p;)|p(?:;|brcap;|c(?:ap;|up;)|dot;|or;|s;)|r(?:arr(?:;|m;)|ly(?:eq(?:prec;|succ;)|vee;|wedge;)|ren;?|vearrow(?:left;|right;))|vee;|wed;)|w(?:conint;|int;)|ylcty;)|d(?:Arr;|Har;|a(?:gger;|leth;|rr;|sh(?:;|v;))|b(?:karow;|lac;)|c(?:aron;|y;)|d(?:;|a(?:gger;|rr;)|otseq;)|e(?:g;?|lta;|mptyv;)|f(?:isht;|r;)|har(?:l;|r;)|i(?:am(?:;|ond(?:;|suit;)|s;)|e;|gamma;|sin;|v(?:;|ide(?:;|ontimes;|)|onx;))|jcy;|lc(?:orn;|rop;)|o(?:llar;|pf;|t(?:;|eq(?:;|dot;)|minus;|plus;|square;)|ublebarwedge;|wn(?:arrow;|downarrows;|harpoon(?:left;|right;)))|r(?:bkarow;|c(?:orn;|rop;))|s(?:c(?:r;|y;)|ol;|trok;)|t(?:dot;|ri(?:;|f;))|u(?:arr;|har;)|wangle;|z(?:cy;|igrarr;))|e(?:D(?:Dot;|ot;)|a(?:cute;?|ster;)|c(?:aron;|ir(?:;|c;?)|olon;|y;)|dot;|e;|f(?:Dot;|r;)|g(?:;|rave;?|s(?:;|dot;))|l(?:;|inters;|l;|s(?:;|dot;))|m(?:acr;|pty(?:;|set;|v;)|sp(?:1(?:3;|4;)|;))|n(?:g;|sp;)|o(?:gon;|pf;)|p(?:ar(?:;|sl;)|lus;|si(?:;|lon;|v;))|q(?:c(?:irc;|olon;)|s(?:im;|lant(?:gtr;|less;))|u(?:als;|est;|iv(?:;|DD;))|vparsl;)|r(?:Dot;|arr;)|s(?:cr;|dot;|im;)|t(?:a;|h;?)|u(?:ml;?|ro;)|x(?:cl;|ist;|p(?:ectation;|onentiale;)))|f(?:allingdotseq;|cy;|emale;|f(?:ilig;|l(?:ig;|lig;)|r;)|ilig;|jlig;|l(?:at;|lig;|tns;)|nof;|o(?:pf;|r(?:all;|k(?:;|v;)))|partint;|r(?:a(?:c(?:1(?:2;?|3;|4;?|5;|6;|8;)|2(?:3;|5;)|3(?:4;?|5;|8;)|45;|5(?:6;|8;)|78;)|sl;)|own;)|scr;)|g(?:E(?:;|l;)|a(?:cute;|mma(?:;|d;)|p;)|breve;|c(?:irc;|y;)|dot;|e(?:;|l;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|l;))|l(?:;|es;)))|fr;|g(?:;|g;)|imel;|jcy;|l(?:;|E;|a;|j;)|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|opf;|rave;|s(?:cr;|im(?:;|e;|l;))|t(?:;|c(?:c;|ir;)|dot;|lPar;|quest;|r(?:a(?:pprox;|rr;)|dot;|eq(?:less;|qless;)|less;|sim;)|)|v(?:ertneqq;|nE;))|h(?:Arr;|a(?:irsp;|lf;|milt;|r(?:dcy;|r(?:;|cir;|w;)))|bar;|circ;|e(?:arts(?:;|uit;)|llip;|rcon;)|fr;|ks(?:earow;|warow;)|o(?:arr;|mtht;|ok(?:leftarrow;|rightarrow;)|pf;|rbar;)|s(?:cr;|lash;|trok;)|y(?:bull;|phen;))|i(?:acute;?|c(?:;|irc;?|y;)|e(?:cy;|xcl;?)|f(?:f;|r;)|grave;?|i(?:;|i(?:int;|nt;)|nfin;|ota;)|jlig;|m(?:a(?:cr;|g(?:e;|line;|part;)|th;)|of;|ped;)|n(?:;|care;|fin(?:;|tie;)|odot;|t(?:;|cal;|e(?:gers;|rcal;)|larhk;|prod;))|o(?:cy;|gon;|pf;|ta;)|prod;|quest;?|s(?:cr;|in(?:;|E;|dot;|s(?:;|v;)|v;))|t(?:;|ilde;)|u(?:kcy;|ml;?))|j(?:c(?:irc;|y;)|fr;|math;|opf;|s(?:cr;|ercy;)|ukcy;)|k(?:appa(?:;|v;)|c(?:edil;|y;)|fr;|green;|hcy;|jcy;|opf;|scr;)|l(?:A(?:arr;|rr;|tail;)|Barr;|E(?:;|g;)|Har;|a(?:cute;|emptyv;|gran;|mbda;|ng(?:;|d;|le;)|p;|quo;?|rr(?:;|b(?:;|fs;)|fs;|hk;|lp;|pl;|sim;|tl;)|t(?:;|ail;|e(?:;|s;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|quo(?:;|r;)|r(?:dhar;|ushar;)|sh;)|e(?:;|ft(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|leftarrows;|right(?:arrow(?:;|s;)|harpoons;|squigarrow;)|threetimes;)|g;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|r;))|g(?:;|es;)|s(?:approx;|dot;|eq(?:gtr;|qgtr;)|gtr;|sim;)))|f(?:isht;|loor;|r;)|g(?:;|E;)|h(?:ar(?:d;|u(?:;|l;))|blk;)|jcy;|l(?:;|arr;|corner;|hard;|tri;)|m(?:idot;|oust(?:;|ache;))|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|o(?:a(?:ng;|rr;)|brk;|ng(?:left(?:arrow;|rightarrow;)|mapsto;|rightarrow;)|oparrow(?:left;|right;)|p(?:ar;|f;|lus;)|times;|w(?:ast;|bar;)|z(?:;|enge;|f;))|par(?:;|lt;)|r(?:arr;|corner;|har(?:;|d;)|m;|tri;)|s(?:aquo;|cr;|h;|im(?:;|e;|g;)|q(?:b;|uo(?:;|r;))|trok;)|t(?:;|c(?:c;|ir;)|dot;|hree;|imes;|larr;|quest;|r(?:Par;|i(?:;|e;|f;))|)|ur(?:dshar;|uhar;)|v(?:ertneqq;|nE;))|m(?:DDot;|a(?:cr;?|l(?:e;|t(?:;|ese;))|p(?:;|sto(?:;|down;|left;|up;))|rker;)|c(?:omma;|y;)|dash;|easuredangle;|fr;|ho;|i(?:cro;?|d(?:;|ast;|cir;|dot;?)|nus(?:;|b;|d(?:;|u;)))|l(?:cp;|dr;)|nplus;|o(?:dels;|pf;)|p;|s(?:cr;|tpos;)|u(?:;|ltimap;|map;))|n(?:G(?:g;|t(?:;|v;))|L(?:eft(?:arrow;|rightarrow;)|l;|t(?:;|v;))|Rightarrow;|V(?:Dash;|dash;)|a(?:bla;|cute;|ng;|p(?:;|E;|id;|os;|prox;)|tur(?:;|al(?:;|s;)))|b(?:sp;?|ump(?:;|e;))|c(?:a(?:p;|ron;)|edil;|ong(?:;|dot;)|up;|y;)|dash;|e(?:;|Arr;|ar(?:hk;|r(?:;|ow;))|dot;|quiv;|s(?:ear;|im;)|xist(?:;|s;))|fr;|g(?:E;|e(?:;|q(?:;|q;|slant;)|s;)|sim;|t(?:;|r;))|h(?:Arr;|arr;|par;)|i(?:;|s(?:;|d;)|v;)|jcy;|l(?:Arr;|E;|arr;|dr;|e(?:;|ft(?:arrow;|rightarrow;)|q(?:;|q;|slant;)|s(?:;|s;))|sim;|t(?:;|ri(?:;|e;)))|mid;|o(?:pf;|t(?:;|in(?:;|E;|dot;|v(?:a;|b;|c;))|ni(?:;|v(?:a;|b;|c;))|))|p(?:ar(?:;|allel;|sl;|t;)|olint;|r(?:;|cue;|e(?:;|c(?:;|eq;))))|r(?:Arr;|arr(?:;|c;|w;)|ightarrow;|tri(?:;|e;))|s(?:c(?:;|cue;|e;|r;)|hort(?:mid;|parallel;)|im(?:;|e(?:;|q;))|mid;|par;|qsu(?:be;|pe;)|u(?:b(?:;|E;|e;|set(?:;|eq(?:;|q;)))|cc(?:;|eq;)|p(?:;|E;|e;|set(?:;|eq(?:;|q;)))))|t(?:gl;|ilde;?|lg;|riangle(?:left(?:;|eq;)|right(?:;|eq;)))|u(?:;|m(?:;|ero;|sp;))|v(?:Dash;|Harr;|ap;|dash;|g(?:e;|t;)|infin;|l(?:Arr;|e;|t(?:;|rie;))|r(?:Arr;|trie;)|sim;)|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|near;))|o(?:S;|a(?:cute;?|st;)|c(?:ir(?:;|c;?)|y;)|d(?:ash;|blac;|iv;|ot;|sold;)|elig;|f(?:cir;|r;)|g(?:on;|rave;?|t;)|h(?:bar;|m;)|int;|l(?:arr;|c(?:ir;|ross;)|ine;|t;)|m(?:acr;|ega;|i(?:cron;|d;|nus;))|opf;|p(?:ar;|erp;|lus;)|r(?:;|arr;|d(?:;|er(?:;|of;)|f;?|m;?)|igof;|or;|slope;|v;)|s(?:cr;|lash;?|ol;)|ti(?:lde;?|mes(?:;|as;))|uml;?|vbar;)|p(?:ar(?:;|a(?:;|llel;|)|s(?:im;|l;)|t;)|cy;|er(?:cnt;|iod;|mil;|p;|tenk;)|fr;|h(?:i(?:;|v;)|mmat;|one;)|i(?:;|tchfork;|v;)|l(?:an(?:ck(?:;|h;)|kv;)|us(?:;|acir;|b;|cir;|d(?:o;|u;)|e;|mn;?|sim;|two;))|m;|o(?:intint;|pf;|und;?)|r(?:;|E;|ap;|cue;|e(?:;|c(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;))|ime(?:;|s;)|n(?:E;|ap;|sim;)|o(?:d;|f(?:alar;|line;|surf;)|p(?:;|to;))|sim;|urel;)|s(?:cr;|i;)|uncsp;)|q(?:fr;|int;|opf;|prime;|scr;|u(?:at(?:ernions;|int;)|est(?:;|eq;)|ot;?))|r(?:A(?:arr;|rr;|tail;)|Barr;|Har;|a(?:c(?:e;|ute;)|dic;|emptyv;|ng(?:;|d;|e;|le;)|quo;?|rr(?:;|ap;|b(?:;|fs;)|c;|fs;|hk;|lp;|pl;|sim;|tl;|w;)|t(?:ail;|io(?:;|nals;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|ldhar;|quo(?:;|r;)|sh;)|e(?:al(?:;|ine;|part;|s;)|ct;|g;?)|f(?:isht;|loor;|r;)|h(?:ar(?:d;|u(?:;|l;))|o(?:;|v;))|i(?:ght(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|left(?:arrows;|harpoons;)|rightarrows;|squigarrow;|threetimes;)|ng;|singdotseq;)|l(?:arr;|har;|m;)|moust(?:;|ache;)|nmid;|o(?:a(?:ng;|rr;)|brk;|p(?:ar;|f;|lus;)|times;)|p(?:ar(?:;|gt;)|polint;)|rarr;|s(?:aquo;|cr;|h;|q(?:b;|uo(?:;|r;)))|t(?:hree;|imes;|ri(?:;|e;|f;|ltri;))|uluhar;|x;)|s(?:acute;|bquo;|c(?:;|E;|a(?:p;|ron;)|cue;|e(?:;|dil;)|irc;|n(?:E;|ap;|sim;)|polint;|sim;|y;)|dot(?:;|b;|e;)|e(?:Arr;|ar(?:hk;|r(?:;|ow;))|ct;?|mi;|swar;|tm(?:inus;|n;)|xt;)|fr(?:;|own;)|h(?:arp;|c(?:hcy;|y;)|ort(?:mid;|parallel;)|y;?)|i(?:gma(?:;|f;|v;)|m(?:;|dot;|e(?:;|q;)|g(?:;|E;)|l(?:;|E;)|ne;|plus;|rarr;))|larr;|m(?:a(?:llsetminus;|shp;)|eparsl;|i(?:d;|le;)|t(?:;|e(?:;|s;)))|o(?:ftcy;|l(?:;|b(?:;|ar;))|pf;)|pa(?:des(?:;|uit;)|r;)|q(?:c(?:ap(?:;|s;)|up(?:;|s;))|su(?:b(?:;|e;|set(?:;|eq;))|p(?:;|e;|set(?:;|eq;)))|u(?:;|ar(?:e;|f;)|f;))|rarr;|s(?:cr;|etmn;|mile;|tarf;)|t(?:ar(?:;|f;)|r(?:aight(?:epsilon;|phi;)|ns;))|u(?:b(?:;|E;|dot;|e(?:;|dot;)|mult;|n(?:E;|e;)|plus;|rarr;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;)))|cc(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;)|m;|ng;|p(?:1;?|2;?|3;?|;|E;|d(?:ot;|sub;)|e(?:;|dot;)|hs(?:ol;|ub;)|larr;|mult;|n(?:E;|e;)|plus;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;))))|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|nwar;)|zlig;?)|t(?:a(?:rget;|u;)|brk;|c(?:aron;|edil;|y;)|dot;|elrec;|fr;|h(?:e(?:re(?:4;|fore;)|ta(?:;|sym;|v;))|i(?:ck(?:approx;|sim;)|nsp;)|k(?:ap;|sim;)|orn;?)|i(?:lde;|mes(?:;|b(?:;|ar;)|d;|)|nt;)|o(?:ea;|p(?:;|bot;|cir;|f(?:;|ork;))|sa;)|prime;|r(?:ade;|i(?:angle(?:;|down;|left(?:;|eq;)|q;|right(?:;|eq;))|dot;|e;|minus;|plus;|sb;|time;)|pezium;)|s(?:c(?:r;|y;)|hcy;|trok;)|w(?:ixt;|ohead(?:leftarrow;|rightarrow;)))|u(?:Arr;|Har;|a(?:cute;?|rr;)|br(?:cy;|eve;)|c(?:irc;?|y;)|d(?:arr;|blac;|har;)|f(?:isht;|r;)|grave;?|h(?:ar(?:l;|r;)|blk;)|l(?:c(?:orn(?:;|er;)|rop;)|tri;)|m(?:acr;|l;?)|o(?:gon;|pf;)|p(?:arrow;|downarrow;|harpoon(?:left;|right;)|lus;|si(?:;|h;|lon;)|uparrows;)|r(?:c(?:orn(?:;|er;)|rop;)|ing;|tri;)|scr;|t(?:dot;|ilde;|ri(?:;|f;))|u(?:arr;|ml;?)|wangle;)|v(?:Arr;|Bar(?:;|v;)|Dash;|a(?:ngrt;|r(?:epsilon;|kappa;|nothing;|p(?:hi;|i;|ropto;)|r(?:;|ho;)|s(?:igma;|u(?:bsetneq(?:;|q;)|psetneq(?:;|q;)))|t(?:heta;|riangle(?:left;|right;))))|cy;|dash;|e(?:e(?:;|bar;|eq;)|llip;|r(?:bar;|t;))|fr;|ltri;|nsu(?:b;|p;)|opf;|prop;|rtri;|s(?:cr;|u(?:bn(?:E;|e;)|pn(?:E;|e;)))|zigzag;)|w(?:circ;|e(?:d(?:bar;|ge(?:;|q;))|ierp;)|fr;|opf;|p;|r(?:;|eath;)|scr;)|x(?:c(?:ap;|irc;|up;)|dtri;|fr;|h(?:Arr;|arr;)|i;|l(?:Arr;|arr;)|map;|nis;|o(?:dot;|p(?:f;|lus;)|time;)|r(?:Arr;|arr;)|s(?:cr;|qcup;)|u(?:plus;|tri;)|vee;|wedge;)|y(?:ac(?:ute;?|y;)|c(?:irc;|y;)|en;?|fr;|icy;|opf;|scr;|u(?:cy;|ml;?))|z(?:acute;|c(?:aron;|y;)|dot;|e(?:etrf;|ta;)|fr;|hcy;|igrarr;|opf;|scr;|w(?:j;|nj;)))|[\\s\\S]/g;\n    var NAMEDCHARREF_MAXLEN = 32;\n    var DBLQUOTEATTRVAL = /[^\\r\"&\\u0000]+/g;\n    var SINGLEQUOTEATTRVAL = /[^\\r'&\\u0000]+/g;\n    var UNQUOTEDATTRVAL = /[^\\r\\t\\n\\f &>\\u0000]+/g;\n    var TAGNAME = /[^\\r\\t\\n\\f \\/>A-Z\\u0000]+/g;\n    var ATTRNAME = /[^\\r\\t\\n\\f \\/=>A-Z\\u0000]+/g;\n    var CDATATEXT = /[^\\]\\r\\u0000\\uffff]*/g;\n    var DATATEXT = /[^&<\\r\\u0000\\uffff]*/g;\n    var RAWTEXT = /[^<\\r\\u0000\\uffff]*/g;\n    var PLAINTEXT = /[^\\r\\u0000\\uffff]*/g;\n    var SIMPLETAG = /(?:(\\/)?([a-z]+)>)|[\\s\\S]/g;\n    var SIMPLEATTR = /(?:([-a-z]+)[ \\t\\n\\f]*=[ \\t\\n\\f]*('[^'&\\r\\u0000]*'|\"[^\"&\\r\\u0000]*\"|[^\\t\\n\\r\\f \"&'\\u0000>][^&> \\t\\n\\r\\f\\u0000]*[ \\t\\n\\f]))|[\\s\\S]/g;\n    var NONWS = /[^\\x09\\x0A\\x0C\\x0D\\x20]/;\n    var ALLNONWS = /[^\\x09\\x0A\\x0C\\x0D\\x20]/g;\n    var NONWSNONNUL = /[^\\x00\\x09\\x0A\\x0C\\x0D\\x20]/;\n    var LEADINGWS = /^[\\x09\\x0A\\x0C\\x0D\\x20]+/;\n    var NULCHARS = /\\x00/g;\n    function buf2str(buf) {\n      var CHUNKSIZE = 16384;\n      if (buf.length < CHUNKSIZE) {\n        return String.fromCharCode.apply(String, buf);\n      }\n      var result = \"\";\n      for (var i = 0; i < buf.length; i += CHUNKSIZE) {\n        result += String.fromCharCode.apply(String, buf.slice(i, i + CHUNKSIZE));\n      }\n      return result;\n    }\n    function str2buf(s) {\n      var result = [];\n      for (var i = 0; i < s.length; i++) {\n        result[i] = s.charCodeAt(i);\n      }\n      return result;\n    }\n    function isA(elt, set) {\n      if (typeof set === \"string\") {\n        return elt.namespaceURI === NAMESPACE.HTML && elt.localName === set;\n      }\n      var tagnames = set[elt.namespaceURI];\n      return tagnames && tagnames[elt.localName];\n    }\n    function isMathmlTextIntegrationPoint(n) {\n      return isA(n, mathmlTextIntegrationPointSet);\n    }\n    function isHTMLIntegrationPoint(n) {\n      if (isA(n, htmlIntegrationPointSet)) return true;\n      if (n.namespaceURI === NAMESPACE.MATHML && n.localName === \"annotation-xml\") {\n        var encoding = n.getAttribute(\"encoding\");\n        if (encoding) encoding = encoding.toLowerCase();\n        if (encoding === \"text/html\" || encoding === \"application/xhtml+xml\") return true;\n      }\n      return false;\n    }\n    function adjustSVGTagName(name) {\n      if (name in svgTagNameAdjustments) return svgTagNameAdjustments[name];else return name;\n    }\n    function adjustSVGAttributes(attrs) {\n      for (var i = 0, n = attrs.length; i < n; i++) {\n        if (attrs[i][0] in svgAttrAdjustments) {\n          attrs[i][0] = svgAttrAdjustments[attrs[i][0]];\n        }\n      }\n    }\n    function adjustMathMLAttributes(attrs) {\n      for (var i = 0, n = attrs.length; i < n; i++) {\n        if (attrs[i][0] === \"definitionurl\") {\n          attrs[i][0] = \"definitionURL\";\n          break;\n        }\n      }\n    }\n    function adjustForeignAttributes(attrs) {\n      for (var i = 0, n = attrs.length; i < n; i++) {\n        if (attrs[i][0] in foreignAttributes) {\n          attrs[i].push(foreignAttributes[attrs[i][0]]);\n        }\n      }\n    }\n    function transferAttributes(attrs, elt) {\n      for (var i = 0, n = attrs.length; i < n; i++) {\n        var name = attrs[i][0],\n          value = attrs[i][1];\n        if (elt.hasAttribute(name)) continue;\n        elt._setAttribute(name, value);\n      }\n    }\n    HTMLParser.ElementStack = function ElementStack() {\n      this.elements = [];\n      this.top = null;\n    };\n    HTMLParser.ElementStack.prototype.push = function (e) {\n      this.elements.push(e);\n      this.top = e;\n    };\n    HTMLParser.ElementStack.prototype.pop = function (e) {\n      this.elements.pop();\n      this.top = this.elements[this.elements.length - 1];\n    };\n    HTMLParser.ElementStack.prototype.popTag = function (tag) {\n      for (var i = this.elements.length - 1; i > 0; i--) {\n        var e = this.elements[i];\n        if (isA(e, tag)) break;\n      }\n      this.elements.length = i;\n      this.top = this.elements[i - 1];\n    };\n    HTMLParser.ElementStack.prototype.popElementType = function (type) {\n      for (var i = this.elements.length - 1; i > 0; i--) {\n        if (this.elements[i] instanceof type) break;\n      }\n      this.elements.length = i;\n      this.top = this.elements[i - 1];\n    };\n    HTMLParser.ElementStack.prototype.popElement = function (e) {\n      for (var i = this.elements.length - 1; i > 0; i--) {\n        if (this.elements[i] === e) break;\n      }\n      this.elements.length = i;\n      this.top = this.elements[i - 1];\n    };\n    HTMLParser.ElementStack.prototype.removeElement = function (e) {\n      if (this.top === e) this.pop();else {\n        var idx = this.elements.lastIndexOf(e);\n        if (idx !== -1) this.elements.splice(idx, 1);\n      }\n    };\n    HTMLParser.ElementStack.prototype.clearToContext = function (set) {\n      for (var i = this.elements.length - 1; i > 0; i--) {\n        if (isA(this.elements[i], set)) break;\n      }\n      this.elements.length = i + 1;\n      this.top = this.elements[i];\n    };\n    HTMLParser.ElementStack.prototype.contains = function (tag) {\n      return this.inSpecificScope(tag, /* @__PURE__ */Object.create(null));\n    };\n    HTMLParser.ElementStack.prototype.inSpecificScope = function (tag, set) {\n      for (var i = this.elements.length - 1; i >= 0; i--) {\n        var elt = this.elements[i];\n        if (isA(elt, tag)) return true;\n        if (isA(elt, set)) return false;\n      }\n      return false;\n    };\n    HTMLParser.ElementStack.prototype.elementInSpecificScope = function (target, set) {\n      for (var i = this.elements.length - 1; i >= 0; i--) {\n        var elt = this.elements[i];\n        if (elt === target) return true;\n        if (isA(elt, set)) return false;\n      }\n      return false;\n    };\n    HTMLParser.ElementStack.prototype.elementTypeInSpecificScope = function (target, set) {\n      for (var i = this.elements.length - 1; i >= 0; i--) {\n        var elt = this.elements[i];\n        if (elt instanceof target) return true;\n        if (isA(elt, set)) return false;\n      }\n      return false;\n    };\n    HTMLParser.ElementStack.prototype.inScope = function (tag) {\n      return this.inSpecificScope(tag, inScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.elementInScope = function (e) {\n      return this.elementInSpecificScope(e, inScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.elementTypeInScope = function (type) {\n      return this.elementTypeInSpecificScope(type, inScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.inButtonScope = function (tag) {\n      return this.inSpecificScope(tag, inButtonScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.inListItemScope = function (tag) {\n      return this.inSpecificScope(tag, inListItemScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.inTableScope = function (tag) {\n      return this.inSpecificScope(tag, inTableScopeSet);\n    };\n    HTMLParser.ElementStack.prototype.inSelectScope = function (tag) {\n      for (var i = this.elements.length - 1; i >= 0; i--) {\n        var elt = this.elements[i];\n        if (elt.namespaceURI !== NAMESPACE.HTML) return false;\n        var localname = elt.localName;\n        if (localname === tag) return true;\n        if (localname !== \"optgroup\" && localname !== \"option\") return false;\n      }\n      return false;\n    };\n    HTMLParser.ElementStack.prototype.generateImpliedEndTags = function (butnot, thorough) {\n      var endTagSet = thorough ? thoroughImpliedEndTagsSet : impliedEndTagsSet;\n      for (var i = this.elements.length - 1; i >= 0; i--) {\n        var e = this.elements[i];\n        if (butnot && isA(e, butnot)) break;\n        if (!isA(this.elements[i], endTagSet)) break;\n      }\n      this.elements.length = i + 1;\n      this.top = this.elements[i];\n    };\n    HTMLParser.ActiveFormattingElements = function AFE() {\n      this.list = [];\n      this.attrs = [];\n    };\n    HTMLParser.ActiveFormattingElements.prototype.MARKER = {\n      localName: \"|\"\n    };\n    HTMLParser.ActiveFormattingElements.prototype.insertMarker = function () {\n      this.list.push(this.MARKER);\n      this.attrs.push(this.MARKER);\n    };\n    HTMLParser.ActiveFormattingElements.prototype.push = function (elt, attrs) {\n      var count = 0;\n      for (var i = this.list.length - 1; i >= 0; i--) {\n        if (this.list[i] === this.MARKER) break;\n        if (equal(elt, this.list[i], this.attrs[i])) {\n          count++;\n          if (count === 3) {\n            this.list.splice(i, 1);\n            this.attrs.splice(i, 1);\n            break;\n          }\n        }\n      }\n      this.list.push(elt);\n      var attrcopy = [];\n      for (var ii = 0; ii < attrs.length; ii++) {\n        attrcopy[ii] = attrs[ii];\n      }\n      this.attrs.push(attrcopy);\n      function equal(newelt, oldelt, oldattrs) {\n        if (newelt.localName !== oldelt.localName) return false;\n        if (newelt._numattrs !== oldattrs.length) return false;\n        for (var i2 = 0, n = oldattrs.length; i2 < n; i2++) {\n          var oldname = oldattrs[i2][0];\n          var oldval = oldattrs[i2][1];\n          if (!newelt.hasAttribute(oldname)) return false;\n          if (newelt.getAttribute(oldname) !== oldval) return false;\n        }\n        return true;\n      }\n    };\n    HTMLParser.ActiveFormattingElements.prototype.clearToMarker = function () {\n      for (var i = this.list.length - 1; i >= 0; i--) {\n        if (this.list[i] === this.MARKER) break;\n      }\n      if (i < 0) i = 0;\n      this.list.length = i;\n      this.attrs.length = i;\n    };\n    HTMLParser.ActiveFormattingElements.prototype.findElementByTag = function (tag) {\n      for (var i = this.list.length - 1; i >= 0; i--) {\n        var elt = this.list[i];\n        if (elt === this.MARKER) break;\n        if (elt.localName === tag) return elt;\n      }\n      return null;\n    };\n    HTMLParser.ActiveFormattingElements.prototype.indexOf = function (e) {\n      return this.list.lastIndexOf(e);\n    };\n    HTMLParser.ActiveFormattingElements.prototype.remove = function (e) {\n      var idx = this.list.lastIndexOf(e);\n      if (idx !== -1) {\n        this.list.splice(idx, 1);\n        this.attrs.splice(idx, 1);\n      }\n    };\n    HTMLParser.ActiveFormattingElements.prototype.replace = function (a, b, attrs) {\n      var idx = this.list.lastIndexOf(a);\n      if (idx !== -1) {\n        this.list[idx] = b;\n        this.attrs[idx] = attrs;\n      }\n    };\n    HTMLParser.ActiveFormattingElements.prototype.insertAfter = function (a, b) {\n      var idx = this.list.lastIndexOf(a);\n      if (idx !== -1) {\n        this.list.splice(idx, 0, b);\n        this.attrs.splice(idx, 0, b);\n      }\n    };\n    function HTMLParser(address, fragmentContext, options) {\n      var chars = null;\n      var numchars = 0;\n      var nextchar = 0;\n      var input_complete = false;\n      var scanner_skip_newline = false;\n      var reentrant_invocations = 0;\n      var saved_scanner_state = [];\n      var leftovers = \"\";\n      var first_batch = true;\n      var paused = 0;\n      var tokenizer = data_state;\n      var return_state;\n      var character_reference_code;\n      var tagnamebuf = \"\";\n      var lasttagname = \"\";\n      var tempbuf = [];\n      var attrnamebuf = \"\";\n      var attrvaluebuf = \"\";\n      var commentbuf = [];\n      var doctypenamebuf = [];\n      var doctypepublicbuf = [];\n      var doctypesystembuf = [];\n      var attributes = [];\n      var is_end_tag = false;\n      var parser = initial_mode;\n      var originalInsertionMode = null;\n      var templateInsertionModes = [];\n      var stack = new HTMLParser.ElementStack();\n      var afe = new HTMLParser.ActiveFormattingElements();\n      var fragment = fragmentContext !== void 0;\n      var head_element_pointer = null;\n      var form_element_pointer = null;\n      var scripting_enabled = true;\n      if (fragmentContext) {\n        scripting_enabled = fragmentContext.ownerDocument._scripting_enabled;\n      }\n      if (options && options.scripting_enabled === false) scripting_enabled = false;\n      var frameset_ok = true;\n      var force_quirks = false;\n      var pending_table_text;\n      var text_integration_mode;\n      var textrun = [];\n      var textIncludesNUL = false;\n      var ignore_linefeed = false;\n      var htmlparser = {\n        document: function () {\n          return doc;\n        },\n        _asDocumentFragment: function () {\n          var frag = doc.createDocumentFragment();\n          var root2 = doc.firstChild;\n          while (root2.hasChildNodes()) {\n            frag.appendChild(root2.firstChild);\n          }\n          return frag;\n        },\n        pause: function () {\n          paused++;\n        },\n        resume: function () {\n          paused--;\n          this.parse(\"\");\n        },\n        parse: function (s, end, shouldPauseFunc) {\n          var moreToDo;\n          if (paused > 0) {\n            leftovers += s;\n            return true;\n          }\n          if (reentrant_invocations === 0) {\n            if (leftovers) {\n              s = leftovers + s;\n              leftovers = \"\";\n            }\n            if (end) {\n              s += \"\\uFFFF\";\n              input_complete = true;\n            }\n            chars = s;\n            numchars = s.length;\n            nextchar = 0;\n            if (first_batch) {\n              first_batch = false;\n              if (chars.charCodeAt(0) === 65279) nextchar = 1;\n            }\n            reentrant_invocations++;\n            moreToDo = scanChars(shouldPauseFunc);\n            leftovers = chars.substring(nextchar, numchars);\n            reentrant_invocations--;\n          } else {\n            reentrant_invocations++;\n            saved_scanner_state.push(chars, numchars, nextchar);\n            chars = s;\n            numchars = s.length;\n            nextchar = 0;\n            scanChars();\n            moreToDo = false;\n            leftovers = chars.substring(nextchar, numchars);\n            nextchar = saved_scanner_state.pop();\n            numchars = saved_scanner_state.pop();\n            chars = saved_scanner_state.pop();\n            if (leftovers) {\n              chars = leftovers + chars.substring(nextchar);\n              numchars = chars.length;\n              nextchar = 0;\n              leftovers = \"\";\n            }\n            reentrant_invocations--;\n          }\n          return moreToDo;\n        }\n      };\n      var doc = new Document(true, address);\n      doc._parser = htmlparser;\n      doc._scripting_enabled = scripting_enabled;\n      if (fragmentContext) {\n        if (fragmentContext.ownerDocument._quirks) doc._quirks = true;\n        if (fragmentContext.ownerDocument._limitedQuirks) doc._limitedQuirks = true;\n        if (fragmentContext.namespaceURI === NAMESPACE.HTML) {\n          switch (fragmentContext.localName) {\n            case \"title\":\n            case \"textarea\":\n              tokenizer = rcdata_state;\n              break;\n            case \"style\":\n            case \"xmp\":\n            case \"iframe\":\n            case \"noembed\":\n            case \"noframes\":\n            case \"script\":\n            case \"plaintext\":\n              tokenizer = plaintext_state;\n              break;\n          }\n        }\n        var root = doc.createElement(\"html\");\n        doc._appendChild(root);\n        stack.push(root);\n        if (fragmentContext instanceof impl.HTMLTemplateElement) {\n          templateInsertionModes.push(in_template_mode);\n        }\n        resetInsertionMode();\n        for (var e = fragmentContext; e !== null; e = e.parentElement) {\n          if (e instanceof impl.HTMLFormElement) {\n            form_element_pointer = e;\n            break;\n          }\n        }\n      }\n      function scanChars(shouldPauseFunc) {\n        var codepoint, s, pattern, eof;\n        while (nextchar < numchars) {\n          if (paused > 0 || shouldPauseFunc && shouldPauseFunc()) {\n            return true;\n          }\n          switch (typeof tokenizer.lookahead) {\n            case \"undefined\":\n              codepoint = chars.charCodeAt(nextchar++);\n              if (scanner_skip_newline) {\n                scanner_skip_newline = false;\n                if (codepoint === 10) {\n                  nextchar++;\n                  continue;\n                }\n              }\n              switch (codepoint) {\n                case 13:\n                  if (nextchar < numchars) {\n                    if (chars.charCodeAt(nextchar) === 10) nextchar++;\n                  } else {\n                    scanner_skip_newline = true;\n                  }\n                  tokenizer(10);\n                  break;\n                case 65535:\n                  if (input_complete && nextchar === numchars) {\n                    tokenizer(EOF);\n                    break;\n                  }\n                default:\n                  tokenizer(codepoint);\n                  break;\n              }\n              break;\n            case \"number\":\n              codepoint = chars.charCodeAt(nextchar);\n              var n = tokenizer.lookahead;\n              var needsString = true;\n              if (n < 0) {\n                needsString = false;\n                n = -n;\n              }\n              if (n < numchars - nextchar) {\n                s = needsString ? chars.substring(nextchar, nextchar + n) : null;\n                eof = false;\n              } else {\n                if (input_complete) {\n                  s = needsString ? chars.substring(nextchar, numchars) : null;\n                  eof = true;\n                  if (codepoint === 65535 && nextchar === numchars - 1) codepoint = EOF;\n                } else {\n                  return true;\n                }\n              }\n              tokenizer(codepoint, s, eof);\n              break;\n            case \"string\":\n              codepoint = chars.charCodeAt(nextchar);\n              pattern = tokenizer.lookahead;\n              var pos = chars.indexOf(pattern, nextchar);\n              if (pos !== -1) {\n                s = chars.substring(nextchar, pos + pattern.length);\n                eof = false;\n              } else {\n                if (!input_complete) return true;\n                s = chars.substring(nextchar, numchars);\n                if (codepoint === 65535 && nextchar === numchars - 1) codepoint = EOF;\n                eof = true;\n              }\n              tokenizer(codepoint, s, eof);\n              break;\n          }\n        }\n        return false;\n      }\n      function addAttribute(name, value) {\n        for (var i = 0; i < attributes.length; i++) {\n          if (attributes[i][0] === name) return;\n        }\n        if (value !== void 0) {\n          attributes.push([name, value]);\n        } else {\n          attributes.push([name]);\n        }\n      }\n      function handleSimpleAttribute() {\n        SIMPLEATTR.lastIndex = nextchar - 1;\n        var matched = SIMPLEATTR.exec(chars);\n        if (!matched) throw new Error(\"should never happen\");\n        var name = matched[1];\n        if (!name) return false;\n        var value = matched[2];\n        var len = value.length;\n        switch (value[0]) {\n          case '\"':\n          case \"'\":\n            value = value.substring(1, len - 1);\n            nextchar += matched[0].length - 1;\n            tokenizer = after_attribute_value_quoted_state;\n            break;\n          default:\n            tokenizer = before_attribute_name_state;\n            nextchar += matched[0].length - 1;\n            value = value.substring(0, len - 1);\n            break;\n        }\n        for (var i = 0; i < attributes.length; i++) {\n          if (attributes[i][0] === name) return true;\n        }\n        attributes.push([name, value]);\n        return true;\n      }\n      function beginTagName() {\n        is_end_tag = false;\n        tagnamebuf = \"\";\n        attributes.length = 0;\n      }\n      function beginEndTagName() {\n        is_end_tag = true;\n        tagnamebuf = \"\";\n        attributes.length = 0;\n      }\n      function beginTempBuf() {\n        tempbuf.length = 0;\n      }\n      function beginAttrName() {\n        attrnamebuf = \"\";\n      }\n      function beginAttrValue() {\n        attrvaluebuf = \"\";\n      }\n      function beginComment() {\n        commentbuf.length = 0;\n      }\n      function beginDoctype() {\n        doctypenamebuf.length = 0;\n        doctypepublicbuf = null;\n        doctypesystembuf = null;\n      }\n      function beginDoctypePublicId() {\n        doctypepublicbuf = [];\n      }\n      function beginDoctypeSystemId() {\n        doctypesystembuf = [];\n      }\n      function forcequirks() {\n        force_quirks = true;\n      }\n      function cdataAllowed() {\n        return stack.top && stack.top.namespaceURI !== \"http://www.w3.org/1999/xhtml\";\n      }\n      function appropriateEndTag(buf) {\n        return lasttagname === buf;\n      }\n      function flushText() {\n        if (textrun.length > 0) {\n          var s = buf2str(textrun);\n          textrun.length = 0;\n          if (ignore_linefeed) {\n            ignore_linefeed = false;\n            if (s[0] === \"\\n\") s = s.substring(1);\n            if (s.length === 0) return;\n          }\n          insertToken(TEXT, s);\n          textIncludesNUL = false;\n        }\n        ignore_linefeed = false;\n      }\n      function getMatchingChars(pattern) {\n        pattern.lastIndex = nextchar - 1;\n        var match = pattern.exec(chars);\n        if (match && match.index === nextchar - 1) {\n          match = match[0];\n          nextchar += match.length - 1;\n          if (input_complete && nextchar === numchars) {\n            match = match.slice(0, -1);\n            nextchar--;\n          }\n          return match;\n        } else {\n          throw new Error(\"should never happen\");\n        }\n      }\n      function emitCharsWhile(pattern) {\n        pattern.lastIndex = nextchar - 1;\n        var match = pattern.exec(chars)[0];\n        if (!match) return false;\n        emitCharString(match);\n        nextchar += match.length - 1;\n        return true;\n      }\n      function emitCharString(s) {\n        if (textrun.length > 0) flushText();\n        if (ignore_linefeed) {\n          ignore_linefeed = false;\n          if (s[0] === \"\\n\") s = s.substring(1);\n          if (s.length === 0) return;\n        }\n        insertToken(TEXT, s);\n      }\n      function emitTag() {\n        if (is_end_tag) insertToken(ENDTAG, tagnamebuf);else {\n          var tagname = tagnamebuf;\n          tagnamebuf = \"\";\n          lasttagname = tagname;\n          insertToken(TAG, tagname, attributes);\n        }\n      }\n      function emitSimpleTag() {\n        if (nextchar === numchars) {\n          return false;\n        }\n        SIMPLETAG.lastIndex = nextchar;\n        var matched = SIMPLETAG.exec(chars);\n        if (!matched) throw new Error(\"should never happen\");\n        var tagname = matched[2];\n        if (!tagname) return false;\n        var endtag = matched[1];\n        if (endtag) {\n          nextchar += tagname.length + 2;\n          insertToken(ENDTAG, tagname);\n        } else {\n          nextchar += tagname.length + 1;\n          lasttagname = tagname;\n          insertToken(TAG, tagname, NOATTRS);\n        }\n        return true;\n      }\n      function emitSelfClosingTag() {\n        if (is_end_tag) insertToken(ENDTAG, tagnamebuf, null, true);else {\n          insertToken(TAG, tagnamebuf, attributes, true);\n        }\n      }\n      function emitDoctype() {\n        insertToken(DOCTYPE, buf2str(doctypenamebuf), doctypepublicbuf ? buf2str(doctypepublicbuf) : void 0, doctypesystembuf ? buf2str(doctypesystembuf) : void 0);\n      }\n      function emitEOF() {\n        flushText();\n        parser(EOF);\n        doc.modclock = 1;\n      }\n      var insertToken = htmlparser.insertToken = function insertToken2(t, value, arg3, arg4) {\n        flushText();\n        var current = stack.top;\n        if (!current || current.namespaceURI === NAMESPACE.HTML) {\n          parser(t, value, arg3, arg4);\n        } else {\n          if (t !== TAG && t !== TEXT) {\n            insertForeignToken(t, value, arg3, arg4);\n          } else {\n            if (isMathmlTextIntegrationPoint(current) && (t === TEXT || t === TAG && value !== \"mglyph\" && value !== \"malignmark\") || t === TAG && value === \"svg\" && current.namespaceURI === NAMESPACE.MATHML && current.localName === \"annotation-xml\" || isHTMLIntegrationPoint(current)) {\n              text_integration_mode = true;\n              parser(t, value, arg3, arg4);\n              text_integration_mode = false;\n            } else {\n              insertForeignToken(t, value, arg3, arg4);\n            }\n          }\n        }\n      };\n      function insertComment(data) {\n        var parent = stack.top;\n        if (foster_parent_mode && isA(parent, tablesectionrowSet)) {\n          fosterParent(function (doc2) {\n            return doc2.createComment(data);\n          });\n        } else {\n          if (parent instanceof impl.HTMLTemplateElement) {\n            parent = parent.content;\n          }\n          parent._appendChild(parent.ownerDocument.createComment(data));\n        }\n      }\n      function insertText(s) {\n        var parent = stack.top;\n        if (foster_parent_mode && isA(parent, tablesectionrowSet)) {\n          fosterParent(function (doc2) {\n            return doc2.createTextNode(s);\n          });\n        } else {\n          if (parent instanceof impl.HTMLTemplateElement) {\n            parent = parent.content;\n          }\n          var lastChild = parent.lastChild;\n          if (lastChild && lastChild.nodeType === Node.TEXT_NODE) {\n            lastChild.appendData(s);\n          } else {\n            parent._appendChild(parent.ownerDocument.createTextNode(s));\n          }\n        }\n      }\n      function createHTMLElt(doc2, name, attrs) {\n        var elt = html.createElement(doc2, name, null);\n        if (attrs) {\n          for (var i = 0, n = attrs.length; i < n; i++) {\n            elt._setAttribute(attrs[i][0], attrs[i][1]);\n          }\n        }\n        return elt;\n      }\n      var foster_parent_mode = false;\n      function insertHTMLElement(name, attrs) {\n        var elt = insertElement(function (doc2) {\n          return createHTMLElt(doc2, name, attrs);\n        });\n        if (isA(elt, formassociatedSet)) {\n          elt._form = form_element_pointer;\n        }\n        return elt;\n      }\n      function insertElement(eltFunc) {\n        var elt;\n        if (foster_parent_mode && isA(stack.top, tablesectionrowSet)) {\n          elt = fosterParent(eltFunc);\n        } else if (stack.top instanceof impl.HTMLTemplateElement) {\n          elt = eltFunc(stack.top.content.ownerDocument);\n          stack.top.content._appendChild(elt);\n        } else {\n          elt = eltFunc(stack.top.ownerDocument);\n          stack.top._appendChild(elt);\n        }\n        stack.push(elt);\n        return elt;\n      }\n      function insertForeignElement(name, attrs, ns) {\n        return insertElement(function (doc2) {\n          var elt = doc2._createElementNS(name, ns, null);\n          if (attrs) {\n            for (var i = 0, n = attrs.length; i < n; i++) {\n              var attr = attrs[i];\n              if (attr.length === 2) elt._setAttribute(attr[0], attr[1]);else {\n                elt._setAttributeNS(attr[2], attr[0], attr[1]);\n              }\n            }\n          }\n          return elt;\n        });\n      }\n      function lastElementOfType(type) {\n        for (var i = stack.elements.length - 1; i >= 0; i--) {\n          if (stack.elements[i] instanceof type) {\n            return i;\n          }\n        }\n        return -1;\n      }\n      function fosterParent(eltFunc) {\n        var parent,\n          before,\n          lastTable = -1,\n          lastTemplate = -1,\n          elt;\n        lastTable = lastElementOfType(impl.HTMLTableElement);\n        lastTemplate = lastElementOfType(impl.HTMLTemplateElement);\n        if (lastTemplate >= 0 && (lastTable < 0 || lastTemplate > lastTable)) {\n          parent = stack.elements[lastTemplate];\n        } else if (lastTable >= 0) {\n          parent = stack.elements[lastTable].parentNode;\n          if (parent) {\n            before = stack.elements[lastTable];\n          } else {\n            parent = stack.elements[lastTable - 1];\n          }\n        }\n        if (!parent) parent = stack.elements[0];\n        if (parent instanceof impl.HTMLTemplateElement) {\n          parent = parent.content;\n        }\n        elt = eltFunc(parent.ownerDocument);\n        if (elt.nodeType === Node.TEXT_NODE) {\n          var prev;\n          if (before) prev = before.previousSibling;else prev = parent.lastChild;\n          if (prev && prev.nodeType === Node.TEXT_NODE) {\n            prev.appendData(elt.data);\n            return elt;\n          }\n        }\n        if (before) parent.insertBefore(elt, before);else parent._appendChild(elt);\n        return elt;\n      }\n      function resetInsertionMode() {\n        var last = false;\n        for (var i = stack.elements.length - 1; i >= 0; i--) {\n          var node = stack.elements[i];\n          if (i === 0) {\n            last = true;\n            if (fragment) {\n              node = fragmentContext;\n            }\n          }\n          if (node.namespaceURI === NAMESPACE.HTML) {\n            var tag = node.localName;\n            switch (tag) {\n              case \"select\":\n                for (var j = i; j > 0;) {\n                  var ancestor = stack.elements[--j];\n                  if (ancestor instanceof impl.HTMLTemplateElement) {\n                    break;\n                  } else if (ancestor instanceof impl.HTMLTableElement) {\n                    parser = in_select_in_table_mode;\n                    return;\n                  }\n                }\n                parser = in_select_mode;\n                return;\n              case \"tr\":\n                parser = in_row_mode;\n                return;\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                parser = in_table_body_mode;\n                return;\n              case \"caption\":\n                parser = in_caption_mode;\n                return;\n              case \"colgroup\":\n                parser = in_column_group_mode;\n                return;\n              case \"table\":\n                parser = in_table_mode;\n                return;\n              case \"template\":\n                parser = templateInsertionModes[templateInsertionModes.length - 1];\n                return;\n              case \"body\":\n                parser = in_body_mode;\n                return;\n              case \"frameset\":\n                parser = in_frameset_mode;\n                return;\n              case \"html\":\n                if (head_element_pointer === null) {\n                  parser = before_head_mode;\n                } else {\n                  parser = after_head_mode;\n                }\n                return;\n              default:\n                if (!last) {\n                  if (tag === \"head\") {\n                    parser = in_head_mode;\n                    return;\n                  }\n                  if (tag === \"td\" || tag === \"th\") {\n                    parser = in_cell_mode;\n                    return;\n                  }\n                }\n            }\n          }\n          if (last) {\n            parser = in_body_mode;\n            return;\n          }\n        }\n      }\n      function parseRawText(name, attrs) {\n        insertHTMLElement(name, attrs);\n        tokenizer = rawtext_state;\n        originalInsertionMode = parser;\n        parser = text_mode;\n      }\n      function parseRCDATA(name, attrs) {\n        insertHTMLElement(name, attrs);\n        tokenizer = rcdata_state;\n        originalInsertionMode = parser;\n        parser = text_mode;\n      }\n      function afeclone(doc2, i) {\n        return {\n          elt: createHTMLElt(doc2, afe.list[i].localName, afe.attrs[i]),\n          attrs: afe.attrs[i]\n        };\n      }\n      function afereconstruct() {\n        if (afe.list.length === 0) return;\n        var entry = afe.list[afe.list.length - 1];\n        if (entry === afe.MARKER) return;\n        if (stack.elements.lastIndexOf(entry) !== -1) return;\n        for (var i = afe.list.length - 2; i >= 0; i--) {\n          entry = afe.list[i];\n          if (entry === afe.MARKER) break;\n          if (stack.elements.lastIndexOf(entry) !== -1) break;\n        }\n        for (i = i + 1; i < afe.list.length; i++) {\n          var newelt = insertElement(function (doc2) {\n            return afeclone(doc2, i).elt;\n          });\n          afe.list[i] = newelt;\n        }\n      }\n      var BOOKMARK = {\n        localName: \"BM\"\n      };\n      function adoptionAgency(tag) {\n        if (isA(stack.top, tag) && afe.indexOf(stack.top) === -1) {\n          stack.pop();\n          return true;\n        }\n        var outer = 0;\n        while (outer < 8) {\n          outer++;\n          var fmtelt = afe.findElementByTag(tag);\n          if (!fmtelt) {\n            return false;\n          }\n          var index = stack.elements.lastIndexOf(fmtelt);\n          if (index === -1) {\n            afe.remove(fmtelt);\n            return true;\n          }\n          if (!stack.elementInScope(fmtelt)) {\n            return true;\n          }\n          var furthestblock = null,\n            furthestblockindex;\n          for (var i = index + 1; i < stack.elements.length; i++) {\n            if (isA(stack.elements[i], specialSet)) {\n              furthestblock = stack.elements[i];\n              furthestblockindex = i;\n              break;\n            }\n          }\n          if (!furthestblock) {\n            stack.popElement(fmtelt);\n            afe.remove(fmtelt);\n            return true;\n          } else {\n            var ancestor = stack.elements[index - 1];\n            afe.insertAfter(fmtelt, BOOKMARK);\n            var node = furthestblock;\n            var lastnode = furthestblock;\n            var nodeindex = furthestblockindex;\n            var nodeafeindex;\n            var inner = 0;\n            while (true) {\n              inner++;\n              node = stack.elements[--nodeindex];\n              if (node === fmtelt) break;\n              nodeafeindex = afe.indexOf(node);\n              if (inner > 3 && nodeafeindex !== -1) {\n                afe.remove(node);\n                nodeafeindex = -1;\n              }\n              if (nodeafeindex === -1) {\n                stack.removeElement(node);\n                continue;\n              }\n              var newelt = afeclone(ancestor.ownerDocument, nodeafeindex);\n              afe.replace(node, newelt.elt, newelt.attrs);\n              stack.elements[nodeindex] = newelt.elt;\n              node = newelt.elt;\n              if (lastnode === furthestblock) {\n                afe.remove(BOOKMARK);\n                afe.insertAfter(newelt.elt, BOOKMARK);\n              }\n              node._appendChild(lastnode);\n              lastnode = node;\n            }\n            if (foster_parent_mode && isA(ancestor, tablesectionrowSet)) {\n              fosterParent(function () {\n                return lastnode;\n              });\n            } else if (ancestor instanceof impl.HTMLTemplateElement) {\n              ancestor.content._appendChild(lastnode);\n            } else {\n              ancestor._appendChild(lastnode);\n            }\n            var newelt2 = afeclone(furthestblock.ownerDocument, afe.indexOf(fmtelt));\n            while (furthestblock.hasChildNodes()) {\n              newelt2.elt._appendChild(furthestblock.firstChild);\n            }\n            furthestblock._appendChild(newelt2.elt);\n            afe.remove(fmtelt);\n            afe.replace(BOOKMARK, newelt2.elt, newelt2.attrs);\n            stack.removeElement(fmtelt);\n            var pos = stack.elements.lastIndexOf(furthestblock);\n            stack.elements.splice(pos + 1, 0, newelt2.elt);\n          }\n        }\n        return true;\n      }\n      function handleScriptEnd() {\n        stack.pop();\n        parser = originalInsertionMode;\n        return;\n      }\n      function stopParsing() {\n        delete doc._parser;\n        stack.elements.length = 0;\n        if (doc.defaultView) {\n          doc.defaultView.dispatchEvent(new impl.Event(\"load\", {}));\n        }\n      }\n      function reconsume(c, new_state) {\n        tokenizer = new_state;\n        nextchar--;\n      }\n      function data_state(c) {\n        switch (c) {\n          case 38:\n            return_state = data_state;\n            tokenizer = character_reference_state;\n            break;\n          case 60:\n            if (emitSimpleTag()) break;\n            tokenizer = tag_open_state;\n            break;\n          case 0:\n            textrun.push(c);\n            textIncludesNUL = true;\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            emitCharsWhile(DATATEXT) || textrun.push(c);\n            break;\n        }\n      }\n      function rcdata_state(c) {\n        switch (c) {\n          case 38:\n            return_state = rcdata_state;\n            tokenizer = character_reference_state;\n            break;\n          case 60:\n            tokenizer = rcdata_less_than_sign_state;\n            break;\n          case 0:\n            textrun.push(65533);\n            textIncludesNUL = true;\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            textrun.push(c);\n            break;\n        }\n      }\n      function rawtext_state(c) {\n        switch (c) {\n          case 60:\n            tokenizer = rawtext_less_than_sign_state;\n            break;\n          case 0:\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            emitCharsWhile(RAWTEXT) || textrun.push(c);\n            break;\n        }\n      }\n      function script_data_state(c) {\n        switch (c) {\n          case 60:\n            tokenizer = script_data_less_than_sign_state;\n            break;\n          case 0:\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            emitCharsWhile(RAWTEXT) || textrun.push(c);\n            break;\n        }\n      }\n      function plaintext_state(c) {\n        switch (c) {\n          case 0:\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            emitCharsWhile(PLAINTEXT) || textrun.push(c);\n            break;\n        }\n      }\n      function tag_open_state(c) {\n        switch (c) {\n          case 33:\n            tokenizer = markup_declaration_open_state;\n            break;\n          case 47:\n            tokenizer = end_tag_open_state;\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginTagName();\n            reconsume(c, tag_name_state);\n            break;\n          case 63:\n            reconsume(c, bogus_comment_state);\n            break;\n          default:\n            textrun.push(60);\n            reconsume(c, data_state);\n            break;\n        }\n      }\n      function end_tag_open_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginEndTagName();\n            reconsume(c, tag_name_state);\n            break;\n          case 62:\n            tokenizer = data_state;\n            break;\n          case -1:\n            textrun.push(60);\n            textrun.push(47);\n            emitEOF();\n            break;\n          default:\n            reconsume(c, bogus_comment_state);\n            break;\n        }\n      }\n      function tag_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = before_attribute_name_state;\n            break;\n          case 47:\n            tokenizer = self_closing_start_tag_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitTag();\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tagnamebuf += String.fromCharCode(c + 32);\n            break;\n          case 0:\n            tagnamebuf += String.fromCharCode(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            tagnamebuf += getMatchingChars(TAGNAME);\n            break;\n        }\n      }\n      function rcdata_less_than_sign_state(c) {\n        if (c === 47) {\n          beginTempBuf();\n          tokenizer = rcdata_end_tag_open_state;\n        } else {\n          textrun.push(60);\n          reconsume(c, rcdata_state);\n        }\n      }\n      function rcdata_end_tag_open_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginEndTagName();\n            reconsume(c, rcdata_end_tag_name_state);\n            break;\n          default:\n            textrun.push(60);\n            textrun.push(47);\n            reconsume(c, rcdata_state);\n            break;\n        }\n      }\n      function rcdata_end_tag_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = before_attribute_name_state;\n              return;\n            }\n            break;\n          case 47:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = self_closing_start_tag_state;\n              return;\n            }\n            break;\n          case 62:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = data_state;\n              emitTag();\n              return;\n            }\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tagnamebuf += String.fromCharCode(c + 32);\n            tempbuf.push(c);\n            return;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tagnamebuf += String.fromCharCode(c);\n            tempbuf.push(c);\n            return;\n          default:\n            break;\n        }\n        textrun.push(60);\n        textrun.push(47);\n        pushAll(textrun, tempbuf);\n        reconsume(c, rcdata_state);\n      }\n      function rawtext_less_than_sign_state(c) {\n        if (c === 47) {\n          beginTempBuf();\n          tokenizer = rawtext_end_tag_open_state;\n        } else {\n          textrun.push(60);\n          reconsume(c, rawtext_state);\n        }\n      }\n      function rawtext_end_tag_open_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginEndTagName();\n            reconsume(c, rawtext_end_tag_name_state);\n            break;\n          default:\n            textrun.push(60);\n            textrun.push(47);\n            reconsume(c, rawtext_state);\n            break;\n        }\n      }\n      function rawtext_end_tag_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = before_attribute_name_state;\n              return;\n            }\n            break;\n          case 47:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = self_closing_start_tag_state;\n              return;\n            }\n            break;\n          case 62:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = data_state;\n              emitTag();\n              return;\n            }\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tagnamebuf += String.fromCharCode(c + 32);\n            tempbuf.push(c);\n            return;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tagnamebuf += String.fromCharCode(c);\n            tempbuf.push(c);\n            return;\n          default:\n            break;\n        }\n        textrun.push(60);\n        textrun.push(47);\n        pushAll(textrun, tempbuf);\n        reconsume(c, rawtext_state);\n      }\n      function script_data_less_than_sign_state(c) {\n        switch (c) {\n          case 47:\n            beginTempBuf();\n            tokenizer = script_data_end_tag_open_state;\n            break;\n          case 33:\n            tokenizer = script_data_escape_start_state;\n            textrun.push(60);\n            textrun.push(33);\n            break;\n          default:\n            textrun.push(60);\n            reconsume(c, script_data_state);\n            break;\n        }\n      }\n      function script_data_end_tag_open_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginEndTagName();\n            reconsume(c, script_data_end_tag_name_state);\n            break;\n          default:\n            textrun.push(60);\n            textrun.push(47);\n            reconsume(c, script_data_state);\n            break;\n        }\n      }\n      function script_data_end_tag_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = before_attribute_name_state;\n              return;\n            }\n            break;\n          case 47:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = self_closing_start_tag_state;\n              return;\n            }\n            break;\n          case 62:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = data_state;\n              emitTag();\n              return;\n            }\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tagnamebuf += String.fromCharCode(c + 32);\n            tempbuf.push(c);\n            return;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tagnamebuf += String.fromCharCode(c);\n            tempbuf.push(c);\n            return;\n          default:\n            break;\n        }\n        textrun.push(60);\n        textrun.push(47);\n        pushAll(textrun, tempbuf);\n        reconsume(c, script_data_state);\n      }\n      function script_data_escape_start_state(c) {\n        if (c === 45) {\n          tokenizer = script_data_escape_start_dash_state;\n          textrun.push(45);\n        } else {\n          reconsume(c, script_data_state);\n        }\n      }\n      function script_data_escape_start_dash_state(c) {\n        if (c === 45) {\n          tokenizer = script_data_escaped_dash_dash_state;\n          textrun.push(45);\n        } else {\n          reconsume(c, script_data_state);\n        }\n      }\n      function script_data_escaped_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = script_data_escaped_dash_state;\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_escaped_less_than_sign_state;\n            break;\n          case 0:\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_escaped_dash_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = script_data_escaped_dash_dash_state;\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_escaped_less_than_sign_state;\n            break;\n          case 0:\n            tokenizer = script_data_escaped_state;\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            tokenizer = script_data_escaped_state;\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_escaped_dash_dash_state(c) {\n        switch (c) {\n          case 45:\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_escaped_less_than_sign_state;\n            break;\n          case 62:\n            tokenizer = script_data_state;\n            textrun.push(62);\n            break;\n          case 0:\n            tokenizer = script_data_escaped_state;\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            tokenizer = script_data_escaped_state;\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_escaped_less_than_sign_state(c) {\n        switch (c) {\n          case 47:\n            beginTempBuf();\n            tokenizer = script_data_escaped_end_tag_open_state;\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginTempBuf();\n            textrun.push(60);\n            reconsume(c, script_data_double_escape_start_state);\n            break;\n          default:\n            textrun.push(60);\n            reconsume(c, script_data_escaped_state);\n            break;\n        }\n      }\n      function script_data_escaped_end_tag_open_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            beginEndTagName();\n            reconsume(c, script_data_escaped_end_tag_name_state);\n            break;\n          default:\n            textrun.push(60);\n            textrun.push(47);\n            reconsume(c, script_data_escaped_state);\n            break;\n        }\n      }\n      function script_data_escaped_end_tag_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = before_attribute_name_state;\n              return;\n            }\n            break;\n          case 47:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = self_closing_start_tag_state;\n              return;\n            }\n            break;\n          case 62:\n            if (appropriateEndTag(tagnamebuf)) {\n              tokenizer = data_state;\n              emitTag();\n              return;\n            }\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tagnamebuf += String.fromCharCode(c + 32);\n            tempbuf.push(c);\n            return;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tagnamebuf += String.fromCharCode(c);\n            tempbuf.push(c);\n            return;\n          default:\n            break;\n        }\n        textrun.push(60);\n        textrun.push(47);\n        pushAll(textrun, tempbuf);\n        reconsume(c, script_data_escaped_state);\n      }\n      function script_data_double_escape_start_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n          case 47:\n          case 62:\n            if (buf2str(tempbuf) === \"script\") {\n              tokenizer = script_data_double_escaped_state;\n            } else {\n              tokenizer = script_data_escaped_state;\n            }\n            textrun.push(c);\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tempbuf.push(c + 32);\n            textrun.push(c);\n            break;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tempbuf.push(c);\n            textrun.push(c);\n            break;\n          default:\n            reconsume(c, script_data_escaped_state);\n            break;\n        }\n      }\n      function script_data_double_escaped_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = script_data_double_escaped_dash_state;\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_double_escaped_less_than_sign_state;\n            textrun.push(60);\n            break;\n          case 0:\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_double_escaped_dash_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = script_data_double_escaped_dash_dash_state;\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_double_escaped_less_than_sign_state;\n            textrun.push(60);\n            break;\n          case 0:\n            tokenizer = script_data_double_escaped_state;\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            tokenizer = script_data_double_escaped_state;\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_double_escaped_dash_dash_state(c) {\n        switch (c) {\n          case 45:\n            textrun.push(45);\n            break;\n          case 60:\n            tokenizer = script_data_double_escaped_less_than_sign_state;\n            textrun.push(60);\n            break;\n          case 62:\n            tokenizer = script_data_state;\n            textrun.push(62);\n            break;\n          case 0:\n            tokenizer = script_data_double_escaped_state;\n            textrun.push(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            tokenizer = script_data_double_escaped_state;\n            textrun.push(c);\n            break;\n        }\n      }\n      function script_data_double_escaped_less_than_sign_state(c) {\n        if (c === 47) {\n          beginTempBuf();\n          tokenizer = script_data_double_escape_end_state;\n          textrun.push(47);\n        } else {\n          reconsume(c, script_data_double_escaped_state);\n        }\n      }\n      function script_data_double_escape_end_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n          case 47:\n          case 62:\n            if (buf2str(tempbuf) === \"script\") {\n              tokenizer = script_data_escaped_state;\n            } else {\n              tokenizer = script_data_double_escaped_state;\n            }\n            textrun.push(c);\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            tempbuf.push(c + 32);\n            textrun.push(c);\n            break;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n          case 103:\n          case 104:\n          case 105:\n          case 106:\n          case 107:\n          case 108:\n          case 109:\n          case 110:\n          case 111:\n          case 112:\n          case 113:\n          case 114:\n          case 115:\n          case 116:\n          case 117:\n          case 118:\n          case 119:\n          case 120:\n          case 121:\n          case 122:\n            tempbuf.push(c);\n            textrun.push(c);\n            break;\n          default:\n            reconsume(c, script_data_double_escaped_state);\n            break;\n        }\n      }\n      function before_attribute_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 47:\n            tokenizer = self_closing_start_tag_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitTag();\n            break;\n          case -1:\n            emitEOF();\n            break;\n          case 61:\n            beginAttrName();\n            attrnamebuf += String.fromCharCode(c);\n            tokenizer = attribute_name_state;\n            break;\n          default:\n            if (handleSimpleAttribute()) break;\n            beginAttrName();\n            reconsume(c, attribute_name_state);\n            break;\n        }\n      }\n      function attribute_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n          case 47:\n          case 62:\n          case -1:\n            reconsume(c, after_attribute_name_state);\n            break;\n          case 61:\n            tokenizer = before_attribute_value_state;\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            attrnamebuf += String.fromCharCode(c + 32);\n            break;\n          case 0:\n            attrnamebuf += String.fromCharCode(65533);\n            break;\n          case 34:\n          case 39:\n          case 60:\n          default:\n            attrnamebuf += getMatchingChars(ATTRNAME);\n            break;\n        }\n      }\n      function after_attribute_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 47:\n            addAttribute(attrnamebuf);\n            tokenizer = self_closing_start_tag_state;\n            break;\n          case 61:\n            tokenizer = before_attribute_value_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            addAttribute(attrnamebuf);\n            emitTag();\n            break;\n          case -1:\n            addAttribute(attrnamebuf);\n            emitEOF();\n            break;\n          default:\n            addAttribute(attrnamebuf);\n            beginAttrName();\n            reconsume(c, attribute_name_state);\n            break;\n        }\n      }\n      function before_attribute_value_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 34:\n            beginAttrValue();\n            tokenizer = attribute_value_double_quoted_state;\n            break;\n          case 39:\n            beginAttrValue();\n            tokenizer = attribute_value_single_quoted_state;\n            break;\n          case 62:\n          default:\n            beginAttrValue();\n            reconsume(c, attribute_value_unquoted_state);\n            break;\n        }\n      }\n      function attribute_value_double_quoted_state(c) {\n        switch (c) {\n          case 34:\n            addAttribute(attrnamebuf, attrvaluebuf);\n            tokenizer = after_attribute_value_quoted_state;\n            break;\n          case 38:\n            return_state = attribute_value_double_quoted_state;\n            tokenizer = character_reference_state;\n            break;\n          case 0:\n            attrvaluebuf += String.fromCharCode(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          case 10:\n            attrvaluebuf += String.fromCharCode(c);\n            break;\n          default:\n            attrvaluebuf += getMatchingChars(DBLQUOTEATTRVAL);\n            break;\n        }\n      }\n      function attribute_value_single_quoted_state(c) {\n        switch (c) {\n          case 39:\n            addAttribute(attrnamebuf, attrvaluebuf);\n            tokenizer = after_attribute_value_quoted_state;\n            break;\n          case 38:\n            return_state = attribute_value_single_quoted_state;\n            tokenizer = character_reference_state;\n            break;\n          case 0:\n            attrvaluebuf += String.fromCharCode(65533);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          case 10:\n            attrvaluebuf += String.fromCharCode(c);\n            break;\n          default:\n            attrvaluebuf += getMatchingChars(SINGLEQUOTEATTRVAL);\n            break;\n        }\n      }\n      function attribute_value_unquoted_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            addAttribute(attrnamebuf, attrvaluebuf);\n            tokenizer = before_attribute_name_state;\n            break;\n          case 38:\n            return_state = attribute_value_unquoted_state;\n            tokenizer = character_reference_state;\n            break;\n          case 62:\n            addAttribute(attrnamebuf, attrvaluebuf);\n            tokenizer = data_state;\n            emitTag();\n            break;\n          case 0:\n            attrvaluebuf += String.fromCharCode(65533);\n            break;\n          case -1:\n            nextchar--;\n            tokenizer = data_state;\n            break;\n          case 34:\n          case 39:\n          case 60:\n          case 61:\n          case 96:\n          default:\n            attrvaluebuf += getMatchingChars(UNQUOTEDATTRVAL);\n            break;\n        }\n      }\n      function after_attribute_value_quoted_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = before_attribute_name_state;\n            break;\n          case 47:\n            tokenizer = self_closing_start_tag_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitTag();\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            reconsume(c, before_attribute_name_state);\n            break;\n        }\n      }\n      function self_closing_start_tag_state(c) {\n        switch (c) {\n          case 62:\n            tokenizer = data_state;\n            emitSelfClosingTag(true);\n            break;\n          case -1:\n            emitEOF();\n            break;\n          default:\n            reconsume(c, before_attribute_name_state);\n            break;\n        }\n      }\n      function bogus_comment_state(c, lookahead, eof) {\n        var len = lookahead.length;\n        if (eof) {\n          nextchar += len - 1;\n        } else {\n          nextchar += len;\n        }\n        var comment = lookahead.substring(0, len - 1);\n        comment = comment.replace(/\\u0000/g, \"\\uFFFD\");\n        comment = comment.replace(/\\u000D\\u000A/g, \"\\n\");\n        comment = comment.replace(/\\u000D/g, \"\\n\");\n        insertToken(COMMENT, comment);\n        tokenizer = data_state;\n      }\n      bogus_comment_state.lookahead = \">\";\n      function markup_declaration_open_state(c, lookahead, eof) {\n        if (lookahead[0] === \"-\" && lookahead[1] === \"-\") {\n          nextchar += 2;\n          beginComment();\n          tokenizer = comment_start_state;\n          return;\n        }\n        if (lookahead.toUpperCase() === \"DOCTYPE\") {\n          nextchar += 7;\n          tokenizer = doctype_state;\n        } else if (lookahead === \"[CDATA[\" && cdataAllowed()) {\n          nextchar += 7;\n          tokenizer = cdata_section_state;\n        } else {\n          tokenizer = bogus_comment_state;\n        }\n      }\n      markup_declaration_open_state.lookahead = 7;\n      function comment_start_state(c) {\n        beginComment();\n        switch (c) {\n          case 45:\n            tokenizer = comment_start_dash_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            insertToken(COMMENT, buf2str(commentbuf));\n            break;\n          default:\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_start_dash_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = comment_end_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            insertToken(COMMENT, buf2str(commentbuf));\n            break;\n          case -1:\n            insertToken(COMMENT, buf2str(commentbuf));\n            emitEOF();\n            break;\n          default:\n            commentbuf.push(45);\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_state(c) {\n        switch (c) {\n          case 60:\n            commentbuf.push(c);\n            tokenizer = comment_less_than_sign_state;\n            break;\n          case 45:\n            tokenizer = comment_end_dash_state;\n            break;\n          case 0:\n            commentbuf.push(65533);\n            break;\n          case -1:\n            insertToken(COMMENT, buf2str(commentbuf));\n            emitEOF();\n            break;\n          default:\n            commentbuf.push(c);\n            break;\n        }\n      }\n      function comment_less_than_sign_state(c) {\n        switch (c) {\n          case 33:\n            commentbuf.push(c);\n            tokenizer = comment_less_than_sign_bang_state;\n            break;\n          case 60:\n            commentbuf.push(c);\n            break;\n          default:\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_less_than_sign_bang_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = comment_less_than_sign_bang_dash_state;\n            break;\n          default:\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_less_than_sign_bang_dash_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = comment_less_than_sign_bang_dash_dash_state;\n            break;\n          default:\n            reconsume(c, comment_end_dash_state);\n            break;\n        }\n      }\n      function comment_less_than_sign_bang_dash_dash_state(c) {\n        switch (c) {\n          case 62:\n          case -1:\n            reconsume(c, comment_end_state);\n            break;\n          default:\n            reconsume(c, comment_end_state);\n            break;\n        }\n      }\n      function comment_end_dash_state(c) {\n        switch (c) {\n          case 45:\n            tokenizer = comment_end_state;\n            break;\n          case -1:\n            insertToken(COMMENT, buf2str(commentbuf));\n            emitEOF();\n            break;\n          default:\n            commentbuf.push(45);\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_end_state(c) {\n        switch (c) {\n          case 62:\n            tokenizer = data_state;\n            insertToken(COMMENT, buf2str(commentbuf));\n            break;\n          case 33:\n            tokenizer = comment_end_bang_state;\n            break;\n          case 45:\n            commentbuf.push(45);\n            break;\n          case -1:\n            insertToken(COMMENT, buf2str(commentbuf));\n            emitEOF();\n            break;\n          default:\n            commentbuf.push(45);\n            commentbuf.push(45);\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function comment_end_bang_state(c) {\n        switch (c) {\n          case 45:\n            commentbuf.push(45);\n            commentbuf.push(45);\n            commentbuf.push(33);\n            tokenizer = comment_end_dash_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            insertToken(COMMENT, buf2str(commentbuf));\n            break;\n          case -1:\n            insertToken(COMMENT, buf2str(commentbuf));\n            emitEOF();\n            break;\n          default:\n            commentbuf.push(45);\n            commentbuf.push(45);\n            commentbuf.push(33);\n            reconsume(c, comment_state);\n            break;\n        }\n      }\n      function doctype_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = before_doctype_name_state;\n            break;\n          case -1:\n            beginDoctype();\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            reconsume(c, before_doctype_name_state);\n            break;\n        }\n      }\n      function before_doctype_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            beginDoctype();\n            doctypenamebuf.push(c + 32);\n            tokenizer = doctype_name_state;\n            break;\n          case 0:\n            beginDoctype();\n            doctypenamebuf.push(65533);\n            tokenizer = doctype_name_state;\n            break;\n          case 62:\n            beginDoctype();\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            beginDoctype();\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            beginDoctype();\n            doctypenamebuf.push(c);\n            tokenizer = doctype_name_state;\n            break;\n        }\n      }\n      function doctype_name_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = after_doctype_name_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 71:\n          case 72:\n          case 73:\n          case 74:\n          case 75:\n          case 76:\n          case 77:\n          case 78:\n          case 79:\n          case 80:\n          case 81:\n          case 82:\n          case 83:\n          case 84:\n          case 85:\n          case 86:\n          case 87:\n          case 88:\n          case 89:\n          case 90:\n            doctypenamebuf.push(c + 32);\n            break;\n          case 0:\n            doctypenamebuf.push(65533);\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            doctypenamebuf.push(c);\n            break;\n        }\n      }\n      function after_doctype_name_state(c, lookahead, eof) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            nextchar += 1;\n            break;\n          case 62:\n            tokenizer = data_state;\n            nextchar += 1;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            lookahead = lookahead.toUpperCase();\n            if (lookahead === \"PUBLIC\") {\n              nextchar += 6;\n              tokenizer = after_doctype_public_keyword_state;\n            } else if (lookahead === \"SYSTEM\") {\n              nextchar += 6;\n              tokenizer = after_doctype_system_keyword_state;\n            } else {\n              forcequirks();\n              tokenizer = bogus_doctype_state;\n            }\n            break;\n        }\n      }\n      after_doctype_name_state.lookahead = 6;\n      function after_doctype_public_keyword_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = before_doctype_public_identifier_state;\n            break;\n          case 34:\n            beginDoctypePublicId();\n            tokenizer = doctype_public_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypePublicId();\n            tokenizer = doctype_public_identifier_single_quoted_state;\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function before_doctype_public_identifier_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 34:\n            beginDoctypePublicId();\n            tokenizer = doctype_public_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypePublicId();\n            tokenizer = doctype_public_identifier_single_quoted_state;\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function doctype_public_identifier_double_quoted_state(c) {\n        switch (c) {\n          case 34:\n            tokenizer = after_doctype_public_identifier_state;\n            break;\n          case 0:\n            doctypepublicbuf.push(65533);\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            doctypepublicbuf.push(c);\n            break;\n        }\n      }\n      function doctype_public_identifier_single_quoted_state(c) {\n        switch (c) {\n          case 39:\n            tokenizer = after_doctype_public_identifier_state;\n            break;\n          case 0:\n            doctypepublicbuf.push(65533);\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            doctypepublicbuf.push(c);\n            break;\n        }\n      }\n      function after_doctype_public_identifier_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = between_doctype_public_and_system_identifiers_state;\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case 34:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_single_quoted_state;\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function between_doctype_public_and_system_identifiers_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case 34:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_single_quoted_state;\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function after_doctype_system_keyword_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            tokenizer = before_doctype_system_identifier_state;\n            break;\n          case 34:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_single_quoted_state;\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function before_doctype_system_identifier_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 34:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_double_quoted_state;\n            break;\n          case 39:\n            beginDoctypeSystemId();\n            tokenizer = doctype_system_identifier_single_quoted_state;\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function doctype_system_identifier_double_quoted_state(c) {\n        switch (c) {\n          case 34:\n            tokenizer = after_doctype_system_identifier_state;\n            break;\n          case 0:\n            doctypesystembuf.push(65533);\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            doctypesystembuf.push(c);\n            break;\n        }\n      }\n      function doctype_system_identifier_single_quoted_state(c) {\n        switch (c) {\n          case 39:\n            tokenizer = after_doctype_system_identifier_state;\n            break;\n          case 0:\n            doctypesystembuf.push(65533);\n            break;\n          case 62:\n            forcequirks();\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            doctypesystembuf.push(c);\n            break;\n        }\n      }\n      function after_doctype_system_identifier_state(c) {\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n            break;\n          case 62:\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            forcequirks();\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            tokenizer = bogus_doctype_state;\n            break;\n        }\n      }\n      function bogus_doctype_state(c) {\n        switch (c) {\n          case 62:\n            tokenizer = data_state;\n            emitDoctype();\n            break;\n          case -1:\n            emitDoctype();\n            emitEOF();\n            break;\n          default:\n            break;\n        }\n      }\n      function cdata_section_state(c) {\n        switch (c) {\n          case 93:\n            tokenizer = cdata_section_bracket_state;\n            break;\n          case -1:\n            emitEOF();\n            break;\n          case 0:\n            textIncludesNUL = true;\n          default:\n            emitCharsWhile(CDATATEXT) || textrun.push(c);\n            break;\n        }\n      }\n      function cdata_section_bracket_state(c) {\n        switch (c) {\n          case 93:\n            tokenizer = cdata_section_end_state;\n            break;\n          default:\n            textrun.push(93);\n            reconsume(c, cdata_section_state);\n            break;\n        }\n      }\n      function cdata_section_end_state(c) {\n        switch (c) {\n          case 93:\n            textrun.push(93);\n            break;\n          case 62:\n            flushText();\n            tokenizer = data_state;\n            break;\n          default:\n            textrun.push(93);\n            textrun.push(93);\n            reconsume(c, cdata_section_state);\n            break;\n        }\n      }\n      function character_reference_state(c) {\n        beginTempBuf();\n        tempbuf.push(38);\n        switch (c) {\n          case 9:\n          case 10:\n          case 12:\n          case 32:\n          case 60:\n          case 38:\n          case -1:\n            reconsume(c, character_reference_end_state);\n            break;\n          case 35:\n            tempbuf.push(c);\n            tokenizer = numeric_character_reference_state;\n            break;\n          default:\n            reconsume(c, named_character_reference_state);\n            break;\n        }\n      }\n      function named_character_reference_state(c) {\n        NAMEDCHARREF.lastIndex = nextchar;\n        var matched = NAMEDCHARREF.exec(chars);\n        if (!matched) throw new Error(\"should never happen\");\n        var name = matched[1];\n        if (!name) {\n          tokenizer = character_reference_end_state;\n          return;\n        }\n        nextchar += name.length;\n        pushAll(tempbuf, str2buf(name));\n        switch (return_state) {\n          case attribute_value_double_quoted_state:\n          case attribute_value_single_quoted_state:\n          case attribute_value_unquoted_state:\n            if (name[name.length - 1] !== \";\") {\n              if (/[=A-Za-z0-9]/.test(chars[nextchar])) {\n                tokenizer = character_reference_end_state;\n                return;\n              }\n            }\n            break;\n          default:\n            break;\n        }\n        beginTempBuf();\n        var rv = namedCharRefs[name];\n        if (typeof rv === \"number\") {\n          tempbuf.push(rv);\n        } else {\n          pushAll(tempbuf, rv);\n        }\n        tokenizer = character_reference_end_state;\n      }\n      named_character_reference_state.lookahead = -NAMEDCHARREF_MAXLEN;\n      function numeric_character_reference_state(c) {\n        character_reference_code = 0;\n        switch (c) {\n          case 120:\n          case 88:\n            tempbuf.push(c);\n            tokenizer = hexadecimal_character_reference_start_state;\n            break;\n          default:\n            reconsume(c, decimal_character_reference_start_state);\n            break;\n        }\n      }\n      function hexadecimal_character_reference_start_state(c) {\n        switch (c) {\n          case 48:\n          case 49:\n          case 50:\n          case 51:\n          case 52:\n          case 53:\n          case 54:\n          case 55:\n          case 56:\n          case 57:\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n            reconsume(c, hexadecimal_character_reference_state);\n            break;\n          default:\n            reconsume(c, character_reference_end_state);\n            break;\n        }\n      }\n      function decimal_character_reference_start_state(c) {\n        switch (c) {\n          case 48:\n          case 49:\n          case 50:\n          case 51:\n          case 52:\n          case 53:\n          case 54:\n          case 55:\n          case 56:\n          case 57:\n            reconsume(c, decimal_character_reference_state);\n            break;\n          default:\n            reconsume(c, character_reference_end_state);\n            break;\n        }\n      }\n      function hexadecimal_character_reference_state(c) {\n        switch (c) {\n          case 65:\n          case 66:\n          case 67:\n          case 68:\n          case 69:\n          case 70:\n            character_reference_code *= 16;\n            character_reference_code += c - 55;\n            break;\n          case 97:\n          case 98:\n          case 99:\n          case 100:\n          case 101:\n          case 102:\n            character_reference_code *= 16;\n            character_reference_code += c - 87;\n            break;\n          case 48:\n          case 49:\n          case 50:\n          case 51:\n          case 52:\n          case 53:\n          case 54:\n          case 55:\n          case 56:\n          case 57:\n            character_reference_code *= 16;\n            character_reference_code += c - 48;\n            break;\n          case 59:\n            tokenizer = numeric_character_reference_end_state;\n            break;\n          default:\n            reconsume(c, numeric_character_reference_end_state);\n            break;\n        }\n      }\n      function decimal_character_reference_state(c) {\n        switch (c) {\n          case 48:\n          case 49:\n          case 50:\n          case 51:\n          case 52:\n          case 53:\n          case 54:\n          case 55:\n          case 56:\n          case 57:\n            character_reference_code *= 10;\n            character_reference_code += c - 48;\n            break;\n          case 59:\n            tokenizer = numeric_character_reference_end_state;\n            break;\n          default:\n            reconsume(c, numeric_character_reference_end_state);\n            break;\n        }\n      }\n      function numeric_character_reference_end_state(c) {\n        if (character_reference_code in numericCharRefReplacements) {\n          character_reference_code = numericCharRefReplacements[character_reference_code];\n        } else if (character_reference_code > 1114111 || character_reference_code >= 55296 && character_reference_code < 57344) {\n          character_reference_code = 65533;\n        }\n        beginTempBuf();\n        if (character_reference_code <= 65535) {\n          tempbuf.push(character_reference_code);\n        } else {\n          character_reference_code = character_reference_code - 65536;\n          tempbuf.push(55296 + (character_reference_code >> 10));\n          tempbuf.push(56320 + (character_reference_code & 1023));\n        }\n        reconsume(c, character_reference_end_state);\n      }\n      function character_reference_end_state(c) {\n        switch (return_state) {\n          case attribute_value_double_quoted_state:\n          case attribute_value_single_quoted_state:\n          case attribute_value_unquoted_state:\n            attrvaluebuf += buf2str(tempbuf);\n            break;\n          default:\n            pushAll(textrun, tempbuf);\n            break;\n        }\n        reconsume(c, return_state);\n      }\n      function initial_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            value = value.replace(LEADINGWS, \"\");\n            if (value.length === 0) return;\n            break;\n          case 4:\n            doc._appendChild(doc.createComment(value));\n            return;\n          case 5:\n            var name = value;\n            var publicid = arg3;\n            var systemid = arg4;\n            doc.appendChild(new DocumentType(doc, name, publicid, systemid));\n            if (force_quirks || name.toLowerCase() !== \"html\" || quirkyPublicIds.test(publicid) || systemid && systemid.toLowerCase() === quirkySystemId || systemid === void 0 && conditionallyQuirkyPublicIds.test(publicid)) doc._quirks = true;else if (limitedQuirkyPublicIds.test(publicid) || systemid !== void 0 && conditionallyQuirkyPublicIds.test(publicid)) doc._limitedQuirks = true;\n            parser = before_html_mode;\n            return;\n        }\n        doc._quirks = true;\n        parser = before_html_mode;\n        parser(t, value, arg3, arg4);\n      }\n      function before_html_mode(t, value, arg3, arg4) {\n        var elt;\n        switch (t) {\n          case 1:\n            value = value.replace(LEADINGWS, \"\");\n            if (value.length === 0) return;\n            break;\n          case 5:\n            return;\n          case 4:\n            doc._appendChild(doc.createComment(value));\n            return;\n          case 2:\n            if (value === \"html\") {\n              elt = createHTMLElt(doc, value, arg3);\n              stack.push(elt);\n              doc.appendChild(elt);\n              parser = before_head_mode;\n              return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"html\":\n              case \"head\":\n              case \"body\":\n              case \"br\":\n                break;\n              default:\n                return;\n            }\n        }\n        elt = createHTMLElt(doc, \"html\", null);\n        stack.push(elt);\n        doc.appendChild(elt);\n        parser = before_head_mode;\n        parser(t, value, arg3, arg4);\n      }\n      function before_head_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            value = value.replace(LEADINGWS, \"\");\n            if (value.length === 0) return;\n            break;\n          case 5:\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"head\":\n                var elt = insertHTMLElement(value, arg3);\n                head_element_pointer = elt;\n                parser = in_head_mode;\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"html\":\n              case \"head\":\n              case \"body\":\n              case \"br\":\n                break;\n              default:\n                return;\n            }\n        }\n        before_head_mode(TAG, \"head\", null);\n        parser(t, value, arg3, arg4);\n      }\n      function in_head_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            var ws = value.match(LEADINGWS);\n            if (ws) {\n              insertText(ws[0]);\n              value = value.substring(ws[0].length);\n            }\n            if (value.length === 0) return;\n            break;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"meta\":\n              case \"base\":\n              case \"basefont\":\n              case \"bgsound\":\n              case \"link\":\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                return;\n              case \"title\":\n                parseRCDATA(value, arg3);\n                return;\n              case \"noscript\":\n                if (!scripting_enabled) {\n                  insertHTMLElement(value, arg3);\n                  parser = in_head_noscript_mode;\n                  return;\n                }\n              case \"noframes\":\n              case \"style\":\n                parseRawText(value, arg3);\n                return;\n              case \"script\":\n                insertElement(function (doc2) {\n                  var elt = createHTMLElt(doc2, value, arg3);\n                  elt._parser_inserted = true;\n                  elt._force_async = false;\n                  if (fragment) elt._already_started = true;\n                  flushText();\n                  return elt;\n                });\n                tokenizer = script_data_state;\n                originalInsertionMode = parser;\n                parser = text_mode;\n                return;\n              case \"template\":\n                insertHTMLElement(value, arg3);\n                afe.insertMarker();\n                frameset_ok = false;\n                parser = in_template_mode;\n                templateInsertionModes.push(parser);\n                return;\n              case \"head\":\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"head\":\n                stack.pop();\n                parser = after_head_mode;\n                return;\n              case \"body\":\n              case \"html\":\n              case \"br\":\n                break;\n              case \"template\":\n                if (!stack.contains(\"template\")) {\n                  return;\n                }\n                stack.generateImpliedEndTags(null, \"thorough\");\n                stack.popTag(\"template\");\n                afe.clearToMarker();\n                templateInsertionModes.pop();\n                resetInsertionMode();\n                return;\n              default:\n                return;\n            }\n            break;\n        }\n        in_head_mode(ENDTAG, \"head\", null);\n        parser(t, value, arg3, arg4);\n      }\n      function in_head_noscript_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 5:\n            return;\n          case 4:\n            in_head_mode(t, value);\n            return;\n          case 1:\n            var ws = value.match(LEADINGWS);\n            if (ws) {\n              in_head_mode(t, ws[0]);\n              value = value.substring(ws[0].length);\n            }\n            if (value.length === 0) return;\n            break;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"basefont\":\n              case \"bgsound\":\n              case \"link\":\n              case \"meta\":\n              case \"noframes\":\n              case \"style\":\n                in_head_mode(t, value, arg3);\n                return;\n              case \"head\":\n              case \"noscript\":\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"noscript\":\n                stack.pop();\n                parser = in_head_mode;\n                return;\n              case \"br\":\n                break;\n              default:\n                return;\n            }\n            break;\n        }\n        in_head_noscript_mode(ENDTAG, \"noscript\", null);\n        parser(t, value, arg3, arg4);\n      }\n      function after_head_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            var ws = value.match(LEADINGWS);\n            if (ws) {\n              insertText(ws[0]);\n              value = value.substring(ws[0].length);\n            }\n            if (value.length === 0) return;\n            break;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"body\":\n                insertHTMLElement(value, arg3);\n                frameset_ok = false;\n                parser = in_body_mode;\n                return;\n              case \"frameset\":\n                insertHTMLElement(value, arg3);\n                parser = in_frameset_mode;\n                return;\n              case \"base\":\n              case \"basefont\":\n              case \"bgsound\":\n              case \"link\":\n              case \"meta\":\n              case \"noframes\":\n              case \"script\":\n              case \"style\":\n              case \"template\":\n              case \"title\":\n                stack.push(head_element_pointer);\n                in_head_mode(TAG, value, arg3);\n                stack.removeElement(head_element_pointer);\n                return;\n              case \"head\":\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"template\":\n                return in_head_mode(t, value, arg3, arg4);\n              case \"body\":\n              case \"html\":\n              case \"br\":\n                break;\n              default:\n                return;\n            }\n            break;\n        }\n        after_head_mode(TAG, \"body\", null);\n        frameset_ok = true;\n        parser(t, value, arg3, arg4);\n      }\n      function in_body_mode(t, value, arg3, arg4) {\n        var body, i, node, elt;\n        switch (t) {\n          case 1:\n            if (textIncludesNUL) {\n              value = value.replace(NULCHARS, \"\");\n              if (value.length === 0) return;\n            }\n            if (frameset_ok && NONWS.test(value)) frameset_ok = false;\n            afereconstruct();\n            insertText(value);\n            return;\n          case 5:\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case -1:\n            if (templateInsertionModes.length) {\n              return in_template_mode(t);\n            }\n            stopParsing();\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                if (stack.contains(\"template\")) {\n                  return;\n                }\n                transferAttributes(arg3, stack.elements[0]);\n                return;\n              case \"base\":\n              case \"basefont\":\n              case \"bgsound\":\n              case \"link\":\n              case \"meta\":\n              case \"noframes\":\n              case \"script\":\n              case \"style\":\n              case \"template\":\n              case \"title\":\n                in_head_mode(TAG, value, arg3);\n                return;\n              case \"body\":\n                body = stack.elements[1];\n                if (!body || !(body instanceof impl.HTMLBodyElement) || stack.contains(\"template\")) return;\n                frameset_ok = false;\n                transferAttributes(arg3, body);\n                return;\n              case \"frameset\":\n                if (!frameset_ok) return;\n                body = stack.elements[1];\n                if (!body || !(body instanceof impl.HTMLBodyElement)) return;\n                if (body.parentNode) body.parentNode.removeChild(body);\n                while (!(stack.top instanceof impl.HTMLHtmlElement)) stack.pop();\n                insertHTMLElement(value, arg3);\n                parser = in_frameset_mode;\n                return;\n              case \"address\":\n              case \"article\":\n              case \"aside\":\n              case \"blockquote\":\n              case \"center\":\n              case \"details\":\n              case \"dialog\":\n              case \"dir\":\n              case \"div\":\n              case \"dl\":\n              case \"fieldset\":\n              case \"figcaption\":\n              case \"figure\":\n              case \"footer\":\n              case \"header\":\n              case \"hgroup\":\n              case \"main\":\n              case \"nav\":\n              case \"ol\":\n              case \"p\":\n              case \"section\":\n              case \"summary\":\n              case \"ul\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                insertHTMLElement(value, arg3);\n                return;\n              case \"menu\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                if (isA(stack.top, \"menuitem\")) {\n                  stack.pop();\n                }\n                insertHTMLElement(value, arg3);\n                return;\n              case \"h1\":\n              case \"h2\":\n              case \"h3\":\n              case \"h4\":\n              case \"h5\":\n              case \"h6\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                if (stack.top instanceof impl.HTMLHeadingElement) stack.pop();\n                insertHTMLElement(value, arg3);\n                return;\n              case \"pre\":\n              case \"listing\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                insertHTMLElement(value, arg3);\n                ignore_linefeed = true;\n                frameset_ok = false;\n                return;\n              case \"form\":\n                if (form_element_pointer && !stack.contains(\"template\")) return;\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                elt = insertHTMLElement(value, arg3);\n                if (!stack.contains(\"template\")) form_element_pointer = elt;\n                return;\n              case \"li\":\n                frameset_ok = false;\n                for (i = stack.elements.length - 1; i >= 0; i--) {\n                  node = stack.elements[i];\n                  if (node instanceof impl.HTMLLIElement) {\n                    in_body_mode(ENDTAG, \"li\");\n                    break;\n                  }\n                  if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;\n                }\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                insertHTMLElement(value, arg3);\n                return;\n              case \"dd\":\n              case \"dt\":\n                frameset_ok = false;\n                for (i = stack.elements.length - 1; i >= 0; i--) {\n                  node = stack.elements[i];\n                  if (isA(node, dddtSet)) {\n                    in_body_mode(ENDTAG, node.localName);\n                    break;\n                  }\n                  if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;\n                }\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                insertHTMLElement(value, arg3);\n                return;\n              case \"plaintext\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                insertHTMLElement(value, arg3);\n                tokenizer = plaintext_state;\n                return;\n              case \"button\":\n                if (stack.inScope(\"button\")) {\n                  in_body_mode(ENDTAG, \"button\");\n                  parser(t, value, arg3, arg4);\n                } else {\n                  afereconstruct();\n                  insertHTMLElement(value, arg3);\n                  frameset_ok = false;\n                }\n                return;\n              case \"a\":\n                var activeElement = afe.findElementByTag(\"a\");\n                if (activeElement) {\n                  in_body_mode(ENDTAG, value);\n                  afe.remove(activeElement);\n                  stack.removeElement(activeElement);\n                }\n              case \"b\":\n              case \"big\":\n              case \"code\":\n              case \"em\":\n              case \"font\":\n              case \"i\":\n              case \"s\":\n              case \"small\":\n              case \"strike\":\n              case \"strong\":\n              case \"tt\":\n              case \"u\":\n                afereconstruct();\n                afe.push(insertHTMLElement(value, arg3), arg3);\n                return;\n              case \"nobr\":\n                afereconstruct();\n                if (stack.inScope(value)) {\n                  in_body_mode(ENDTAG, value);\n                  afereconstruct();\n                }\n                afe.push(insertHTMLElement(value, arg3), arg3);\n                return;\n              case \"applet\":\n              case \"marquee\":\n              case \"object\":\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                afe.insertMarker();\n                frameset_ok = false;\n                return;\n              case \"table\":\n                if (!doc._quirks && stack.inButtonScope(\"p\")) {\n                  in_body_mode(ENDTAG, \"p\");\n                }\n                insertHTMLElement(value, arg3);\n                frameset_ok = false;\n                parser = in_table_mode;\n                return;\n              case \"area\":\n              case \"br\":\n              case \"embed\":\n              case \"img\":\n              case \"keygen\":\n              case \"wbr\":\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                frameset_ok = false;\n                return;\n              case \"input\":\n                afereconstruct();\n                elt = insertHTMLElement(value, arg3);\n                stack.pop();\n                var type = elt.getAttribute(\"type\");\n                if (!type || type.toLowerCase() !== \"hidden\") frameset_ok = false;\n                return;\n              case \"param\":\n              case \"source\":\n              case \"track\":\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                return;\n              case \"hr\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                if (isA(stack.top, \"menuitem\")) {\n                  stack.pop();\n                }\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                frameset_ok = false;\n                return;\n              case \"image\":\n                in_body_mode(TAG, \"img\", arg3, arg4);\n                return;\n              case \"textarea\":\n                insertHTMLElement(value, arg3);\n                ignore_linefeed = true;\n                frameset_ok = false;\n                tokenizer = rcdata_state;\n                originalInsertionMode = parser;\n                parser = text_mode;\n                return;\n              case \"xmp\":\n                if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n                afereconstruct();\n                frameset_ok = false;\n                parseRawText(value, arg3);\n                return;\n              case \"iframe\":\n                frameset_ok = false;\n                parseRawText(value, arg3);\n                return;\n              case \"noembed\":\n                parseRawText(value, arg3);\n                return;\n              case \"select\":\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                frameset_ok = false;\n                if (parser === in_table_mode || parser === in_caption_mode || parser === in_table_body_mode || parser === in_row_mode || parser === in_cell_mode) parser = in_select_in_table_mode;else parser = in_select_mode;\n                return;\n              case \"optgroup\":\n              case \"option\":\n                if (stack.top instanceof impl.HTMLOptionElement) {\n                  in_body_mode(ENDTAG, \"option\");\n                }\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                return;\n              case \"menuitem\":\n                if (isA(stack.top, \"menuitem\")) {\n                  stack.pop();\n                }\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                return;\n              case \"rb\":\n              case \"rtc\":\n                if (stack.inScope(\"ruby\")) {\n                  stack.generateImpliedEndTags();\n                }\n                insertHTMLElement(value, arg3);\n                return;\n              case \"rp\":\n              case \"rt\":\n                if (stack.inScope(\"ruby\")) {\n                  stack.generateImpliedEndTags(\"rtc\");\n                }\n                insertHTMLElement(value, arg3);\n                return;\n              case \"math\":\n                afereconstruct();\n                adjustMathMLAttributes(arg3);\n                adjustForeignAttributes(arg3);\n                insertForeignElement(value, arg3, NAMESPACE.MATHML);\n                if (arg4) stack.pop();\n                return;\n              case \"svg\":\n                afereconstruct();\n                adjustSVGAttributes(arg3);\n                adjustForeignAttributes(arg3);\n                insertForeignElement(value, arg3, NAMESPACE.SVG);\n                if (arg4) stack.pop();\n                return;\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"frame\":\n              case \"head\":\n              case \"tbody\":\n              case \"td\":\n              case \"tfoot\":\n              case \"th\":\n              case \"thead\":\n              case \"tr\":\n                return;\n            }\n            afereconstruct();\n            insertHTMLElement(value, arg3);\n            return;\n          case 3:\n            switch (value) {\n              case \"template\":\n                in_head_mode(ENDTAG, value, arg3);\n                return;\n              case \"body\":\n                if (!stack.inScope(\"body\")) return;\n                parser = after_body_mode;\n                return;\n              case \"html\":\n                if (!stack.inScope(\"body\")) return;\n                parser = after_body_mode;\n                parser(t, value, arg3);\n                return;\n              case \"address\":\n              case \"article\":\n              case \"aside\":\n              case \"blockquote\":\n              case \"button\":\n              case \"center\":\n              case \"details\":\n              case \"dialog\":\n              case \"dir\":\n              case \"div\":\n              case \"dl\":\n              case \"fieldset\":\n              case \"figcaption\":\n              case \"figure\":\n              case \"footer\":\n              case \"header\":\n              case \"hgroup\":\n              case \"listing\":\n              case \"main\":\n              case \"menu\":\n              case \"nav\":\n              case \"ol\":\n              case \"pre\":\n              case \"section\":\n              case \"summary\":\n              case \"ul\":\n                if (!stack.inScope(value)) return;\n                stack.generateImpliedEndTags();\n                stack.popTag(value);\n                return;\n              case \"form\":\n                if (!stack.contains(\"template\")) {\n                  var openform = form_element_pointer;\n                  form_element_pointer = null;\n                  if (!openform || !stack.elementInScope(openform)) return;\n                  stack.generateImpliedEndTags();\n                  stack.removeElement(openform);\n                } else {\n                  if (!stack.inScope(\"form\")) return;\n                  stack.generateImpliedEndTags();\n                  stack.popTag(\"form\");\n                }\n                return;\n              case \"p\":\n                if (!stack.inButtonScope(value)) {\n                  in_body_mode(TAG, value, null);\n                  parser(t, value, arg3, arg4);\n                } else {\n                  stack.generateImpliedEndTags(value);\n                  stack.popTag(value);\n                }\n                return;\n              case \"li\":\n                if (!stack.inListItemScope(value)) return;\n                stack.generateImpliedEndTags(value);\n                stack.popTag(value);\n                return;\n              case \"dd\":\n              case \"dt\":\n                if (!stack.inScope(value)) return;\n                stack.generateImpliedEndTags(value);\n                stack.popTag(value);\n                return;\n              case \"h1\":\n              case \"h2\":\n              case \"h3\":\n              case \"h4\":\n              case \"h5\":\n              case \"h6\":\n                if (!stack.elementTypeInScope(impl.HTMLHeadingElement)) return;\n                stack.generateImpliedEndTags();\n                stack.popElementType(impl.HTMLHeadingElement);\n                return;\n              case \"sarcasm\":\n                break;\n              case \"a\":\n              case \"b\":\n              case \"big\":\n              case \"code\":\n              case \"em\":\n              case \"font\":\n              case \"i\":\n              case \"nobr\":\n              case \"s\":\n              case \"small\":\n              case \"strike\":\n              case \"strong\":\n              case \"tt\":\n              case \"u\":\n                var result = adoptionAgency(value);\n                if (result) return;\n                break;\n              case \"applet\":\n              case \"marquee\":\n              case \"object\":\n                if (!stack.inScope(value)) return;\n                stack.generateImpliedEndTags();\n                stack.popTag(value);\n                afe.clearToMarker();\n                return;\n              case \"br\":\n                in_body_mode(TAG, value, null);\n                return;\n            }\n            for (i = stack.elements.length - 1; i >= 0; i--) {\n              node = stack.elements[i];\n              if (isA(node, value)) {\n                stack.generateImpliedEndTags(value);\n                stack.popElement(node);\n                break;\n              } else if (isA(node, specialSet)) {\n                return;\n              }\n            }\n            return;\n        }\n      }\n      function text_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            insertText(value);\n            return;\n          case -1:\n            if (stack.top instanceof impl.HTMLScriptElement) stack.top._already_started = true;\n            stack.pop();\n            parser = originalInsertionMode;\n            parser(t);\n            return;\n          case 3:\n            if (value === \"script\") {\n              handleScriptEnd();\n            } else {\n              stack.pop();\n              parser = originalInsertionMode;\n            }\n            return;\n          default:\n            return;\n        }\n      }\n      function in_table_mode(t, value, arg3, arg4) {\n        function getTypeAttr(attrs) {\n          for (var i = 0, n = attrs.length; i < n; i++) {\n            if (attrs[i][0] === \"type\") return attrs[i][1].toLowerCase();\n          }\n          return null;\n        }\n        switch (t) {\n          case 1:\n            if (text_integration_mode) {\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            } else if (isA(stack.top, tablesectionrowSet)) {\n              pending_table_text = [];\n              originalInsertionMode = parser;\n              parser = in_table_text_mode;\n              parser(t, value, arg3, arg4);\n              return;\n            }\n            break;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case 2:\n            switch (value) {\n              case \"caption\":\n                stack.clearToContext(tableContextSet);\n                afe.insertMarker();\n                insertHTMLElement(value, arg3);\n                parser = in_caption_mode;\n                return;\n              case \"colgroup\":\n                stack.clearToContext(tableContextSet);\n                insertHTMLElement(value, arg3);\n                parser = in_column_group_mode;\n                return;\n              case \"col\":\n                in_table_mode(TAG, \"colgroup\", null);\n                parser(t, value, arg3, arg4);\n                return;\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                stack.clearToContext(tableContextSet);\n                insertHTMLElement(value, arg3);\n                parser = in_table_body_mode;\n                return;\n              case \"td\":\n              case \"th\":\n              case \"tr\":\n                in_table_mode(TAG, \"tbody\", null);\n                parser(t, value, arg3, arg4);\n                return;\n              case \"table\":\n                if (!stack.inTableScope(value)) {\n                  return;\n                }\n                in_table_mode(ENDTAG, value);\n                parser(t, value, arg3, arg4);\n                return;\n              case \"style\":\n              case \"script\":\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n              case \"input\":\n                var type = getTypeAttr(arg3);\n                if (type !== \"hidden\") break;\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                return;\n              case \"form\":\n                if (form_element_pointer || stack.contains(\"template\")) return;\n                form_element_pointer = insertHTMLElement(value, arg3);\n                stack.popElement(form_element_pointer);\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"table\":\n                if (!stack.inTableScope(value)) return;\n                stack.popTag(value);\n                resetInsertionMode();\n                return;\n              case \"body\":\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"html\":\n              case \"tbody\":\n              case \"td\":\n              case \"tfoot\":\n              case \"th\":\n              case \"thead\":\n              case \"tr\":\n                return;\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case -1:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n        }\n        foster_parent_mode = true;\n        in_body_mode(t, value, arg3, arg4);\n        foster_parent_mode = false;\n      }\n      function in_table_text_mode(t, value, arg3, arg4) {\n        if (t === TEXT) {\n          if (textIncludesNUL) {\n            value = value.replace(NULCHARS, \"\");\n            if (value.length === 0) return;\n          }\n          pending_table_text.push(value);\n        } else {\n          var s = pending_table_text.join(\"\");\n          pending_table_text.length = 0;\n          if (NONWS.test(s)) {\n            foster_parent_mode = true;\n            in_body_mode(TEXT, s);\n            foster_parent_mode = false;\n          } else {\n            insertText(s);\n          }\n          parser = originalInsertionMode;\n          parser(t, value, arg3, arg4);\n        }\n      }\n      function in_caption_mode(t, value, arg3, arg4) {\n        function end_caption() {\n          if (!stack.inTableScope(\"caption\")) return false;\n          stack.generateImpliedEndTags();\n          stack.popTag(\"caption\");\n          afe.clearToMarker();\n          parser = in_table_mode;\n          return true;\n        }\n        switch (t) {\n          case 2:\n            switch (value) {\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"tbody\":\n              case \"td\":\n              case \"tfoot\":\n              case \"th\":\n              case \"thead\":\n              case \"tr\":\n                if (end_caption()) parser(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"caption\":\n                end_caption();\n                return;\n              case \"table\":\n                if (end_caption()) parser(t, value, arg3, arg4);\n                return;\n              case \"body\":\n              case \"col\":\n              case \"colgroup\":\n              case \"html\":\n              case \"tbody\":\n              case \"td\":\n              case \"tfoot\":\n              case \"th\":\n              case \"thead\":\n              case \"tr\":\n                return;\n            }\n            break;\n        }\n        in_body_mode(t, value, arg3, arg4);\n      }\n      function in_column_group_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            var ws = value.match(LEADINGWS);\n            if (ws) {\n              insertText(ws[0]);\n              value = value.substring(ws[0].length);\n            }\n            if (value.length === 0) return;\n            break;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"col\":\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                return;\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"colgroup\":\n                if (!isA(stack.top, \"colgroup\")) {\n                  return;\n                }\n                stack.pop();\n                parser = in_table_mode;\n                return;\n              case \"col\":\n                return;\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case -1:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n        }\n        if (!isA(stack.top, \"colgroup\")) {\n          return;\n        }\n        in_column_group_mode(ENDTAG, \"colgroup\");\n        parser(t, value, arg3, arg4);\n      }\n      function in_table_body_mode(t, value, arg3, arg4) {\n        function endsect() {\n          if (!stack.inTableScope(\"tbody\") && !stack.inTableScope(\"thead\") && !stack.inTableScope(\"tfoot\")) return;\n          stack.clearToContext(tableBodyContextSet);\n          in_table_body_mode(ENDTAG, stack.top.localName, null);\n          parser(t, value, arg3, arg4);\n        }\n        switch (t) {\n          case 2:\n            switch (value) {\n              case \"tr\":\n                stack.clearToContext(tableBodyContextSet);\n                insertHTMLElement(value, arg3);\n                parser = in_row_mode;\n                return;\n              case \"th\":\n              case \"td\":\n                in_table_body_mode(TAG, \"tr\", null);\n                parser(t, value, arg3, arg4);\n                return;\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                endsect();\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"table\":\n                endsect();\n                return;\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                if (stack.inTableScope(value)) {\n                  stack.clearToContext(tableBodyContextSet);\n                  stack.pop();\n                  parser = in_table_mode;\n                }\n                return;\n              case \"body\":\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"html\":\n              case \"td\":\n              case \"th\":\n              case \"tr\":\n                return;\n            }\n            break;\n        }\n        in_table_mode(t, value, arg3, arg4);\n      }\n      function in_row_mode(t, value, arg3, arg4) {\n        function endrow() {\n          if (!stack.inTableScope(\"tr\")) return false;\n          stack.clearToContext(tableRowContextSet);\n          stack.pop();\n          parser = in_table_body_mode;\n          return true;\n        }\n        switch (t) {\n          case 2:\n            switch (value) {\n              case \"th\":\n              case \"td\":\n                stack.clearToContext(tableRowContextSet);\n                insertHTMLElement(value, arg3);\n                parser = in_cell_mode;\n                afe.insertMarker();\n                return;\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n              case \"tr\":\n                if (endrow()) parser(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"tr\":\n                endrow();\n                return;\n              case \"table\":\n                if (endrow()) parser(t, value, arg3, arg4);\n                return;\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                if (stack.inTableScope(value)) {\n                  if (endrow()) parser(t, value, arg3, arg4);\n                }\n                return;\n              case \"body\":\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"html\":\n              case \"td\":\n              case \"th\":\n                return;\n            }\n            break;\n        }\n        in_table_mode(t, value, arg3, arg4);\n      }\n      function in_cell_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 2:\n            switch (value) {\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"tbody\":\n              case \"td\":\n              case \"tfoot\":\n              case \"th\":\n              case \"thead\":\n              case \"tr\":\n                if (stack.inTableScope(\"td\")) {\n                  in_cell_mode(ENDTAG, \"td\");\n                  parser(t, value, arg3, arg4);\n                } else if (stack.inTableScope(\"th\")) {\n                  in_cell_mode(ENDTAG, \"th\");\n                  parser(t, value, arg3, arg4);\n                }\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"td\":\n              case \"th\":\n                if (!stack.inTableScope(value)) return;\n                stack.generateImpliedEndTags();\n                stack.popTag(value);\n                afe.clearToMarker();\n                parser = in_row_mode;\n                return;\n              case \"body\":\n              case \"caption\":\n              case \"col\":\n              case \"colgroup\":\n              case \"html\":\n                return;\n              case \"table\":\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n              case \"tr\":\n                if (!stack.inTableScope(value)) return;\n                in_cell_mode(ENDTAG, stack.inTableScope(\"td\") ? \"td\" : \"th\");\n                parser(t, value, arg3, arg4);\n                return;\n            }\n            break;\n        }\n        in_body_mode(t, value, arg3, arg4);\n      }\n      function in_select_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            if (textIncludesNUL) {\n              value = value.replace(NULCHARS, \"\");\n              if (value.length === 0) return;\n            }\n            insertText(value);\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case -1:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"option\":\n                if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, value);\n                insertHTMLElement(value, arg3);\n                return;\n              case \"optgroup\":\n                if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, \"option\");\n                if (stack.top instanceof impl.HTMLOptGroupElement) in_select_mode(ENDTAG, value);\n                insertHTMLElement(value, arg3);\n                return;\n              case \"select\":\n                in_select_mode(ENDTAG, value);\n                return;\n              case \"input\":\n              case \"keygen\":\n              case \"textarea\":\n                if (!stack.inSelectScope(\"select\")) return;\n                in_select_mode(ENDTAG, \"select\");\n                parser(t, value, arg3, arg4);\n                return;\n              case \"script\":\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            switch (value) {\n              case \"optgroup\":\n                if (stack.top instanceof impl.HTMLOptionElement && stack.elements[stack.elements.length - 2] instanceof impl.HTMLOptGroupElement) {\n                  in_select_mode(ENDTAG, \"option\");\n                }\n                if (stack.top instanceof impl.HTMLOptGroupElement) stack.pop();\n                return;\n              case \"option\":\n                if (stack.top instanceof impl.HTMLOptionElement) stack.pop();\n                return;\n              case \"select\":\n                if (!stack.inSelectScope(value)) return;\n                stack.popTag(value);\n                resetInsertionMode();\n                return;\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n        }\n      }\n      function in_select_in_table_mode(t, value, arg3, arg4) {\n        switch (value) {\n          case \"caption\":\n          case \"table\":\n          case \"tbody\":\n          case \"tfoot\":\n          case \"thead\":\n          case \"tr\":\n          case \"td\":\n          case \"th\":\n            switch (t) {\n              case 2:\n                in_select_in_table_mode(ENDTAG, \"select\");\n                parser(t, value, arg3, arg4);\n                return;\n              case 3:\n                if (stack.inTableScope(value)) {\n                  in_select_in_table_mode(ENDTAG, \"select\");\n                  parser(t, value, arg3, arg4);\n                }\n                return;\n            }\n        }\n        in_select_mode(t, value, arg3, arg4);\n      }\n      function in_template_mode(t, value, arg3, arg4) {\n        function switchModeAndReprocess(mode) {\n          parser = mode;\n          templateInsertionModes[templateInsertionModes.length - 1] = parser;\n          parser(t, value, arg3, arg4);\n        }\n        switch (t) {\n          case 1:\n          case 4:\n          case 5:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          case -1:\n            if (!stack.contains(\"template\")) {\n              stopParsing();\n            } else {\n              stack.popTag(\"template\");\n              afe.clearToMarker();\n              templateInsertionModes.pop();\n              resetInsertionMode();\n              parser(t, value, arg3, arg4);\n            }\n            return;\n          case 2:\n            switch (value) {\n              case \"base\":\n              case \"basefont\":\n              case \"bgsound\":\n              case \"link\":\n              case \"meta\":\n              case \"noframes\":\n              case \"script\":\n              case \"style\":\n              case \"template\":\n              case \"title\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n              case \"caption\":\n              case \"colgroup\":\n              case \"tbody\":\n              case \"tfoot\":\n              case \"thead\":\n                switchModeAndReprocess(in_table_mode);\n                return;\n              case \"col\":\n                switchModeAndReprocess(in_column_group_mode);\n                return;\n              case \"tr\":\n                switchModeAndReprocess(in_table_body_mode);\n                return;\n              case \"td\":\n              case \"th\":\n                switchModeAndReprocess(in_row_mode);\n                return;\n            }\n            switchModeAndReprocess(in_body_mode);\n            return;\n          case 3:\n            switch (value) {\n              case \"template\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n              default:\n                return;\n            }\n        }\n      }\n      function after_body_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            if (NONWS.test(value)) break;\n            in_body_mode(t, value);\n            return;\n          case 4:\n            stack.elements[0]._appendChild(doc.createComment(value));\n            return;\n          case 5:\n            return;\n          case -1:\n            stopParsing();\n            return;\n          case 2:\n            if (value === \"html\") {\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            }\n            break;\n          case 3:\n            if (value === \"html\") {\n              if (fragment) return;\n              parser = after_after_body_mode;\n              return;\n            }\n            break;\n        }\n        parser = in_body_mode;\n        parser(t, value, arg3, arg4);\n      }\n      function in_frameset_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            value = value.replace(ALLNONWS, \"\");\n            if (value.length > 0) insertText(value);\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case -1:\n            stopParsing();\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"frameset\":\n                insertHTMLElement(value, arg3);\n                return;\n              case \"frame\":\n                insertHTMLElement(value, arg3);\n                stack.pop();\n                return;\n              case \"noframes\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            if (value === \"frameset\") {\n              if (fragment && stack.top instanceof impl.HTMLHtmlElement) return;\n              stack.pop();\n              if (!fragment && !(stack.top instanceof impl.HTMLFrameSetElement)) parser = after_frameset_mode;\n              return;\n            }\n            break;\n        }\n      }\n      function after_frameset_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            value = value.replace(ALLNONWS, \"\");\n            if (value.length > 0) insertText(value);\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case -1:\n            stopParsing();\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"noframes\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n          case 3:\n            if (value === \"html\") {\n              parser = after_after_frameset_mode;\n              return;\n            }\n            break;\n        }\n      }\n      function after_after_body_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            if (NONWS.test(value)) break;\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          case 4:\n            doc._appendChild(doc.createComment(value));\n            return;\n          case 5:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          case -1:\n            stopParsing();\n            return;\n          case 2:\n            if (value === \"html\") {\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            }\n            break;\n        }\n        parser = in_body_mode;\n        parser(t, value, arg3, arg4);\n      }\n      function after_after_frameset_mode(t, value, arg3, arg4) {\n        switch (t) {\n          case 1:\n            value = value.replace(ALLNONWS, \"\");\n            if (value.length > 0) in_body_mode(t, value, arg3, arg4);\n            return;\n          case 4:\n            doc._appendChild(doc.createComment(value));\n            return;\n          case 5:\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          case -1:\n            stopParsing();\n            return;\n          case 2:\n            switch (value) {\n              case \"html\":\n                in_body_mode(t, value, arg3, arg4);\n                return;\n              case \"noframes\":\n                in_head_mode(t, value, arg3, arg4);\n                return;\n            }\n            break;\n        }\n      }\n      function insertForeignToken(t, value, arg3, arg4) {\n        function isHTMLFont(attrs) {\n          for (var i2 = 0, n = attrs.length; i2 < n; i2++) {\n            switch (attrs[i2][0]) {\n              case \"color\":\n              case \"face\":\n              case \"size\":\n                return true;\n            }\n          }\n          return false;\n        }\n        var current;\n        switch (t) {\n          case 1:\n            if (frameset_ok && NONWSNONNUL.test(value)) frameset_ok = false;\n            if (textIncludesNUL) {\n              value = value.replace(NULCHARS, \"\\uFFFD\");\n            }\n            insertText(value);\n            return;\n          case 4:\n            insertComment(value);\n            return;\n          case 5:\n            return;\n          case 2:\n            switch (value) {\n              case \"font\":\n                if (!isHTMLFont(arg3)) break;\n              case \"b\":\n              case \"big\":\n              case \"blockquote\":\n              case \"body\":\n              case \"br\":\n              case \"center\":\n              case \"code\":\n              case \"dd\":\n              case \"div\":\n              case \"dl\":\n              case \"dt\":\n              case \"em\":\n              case \"embed\":\n              case \"h1\":\n              case \"h2\":\n              case \"h3\":\n              case \"h4\":\n              case \"h5\":\n              case \"h6\":\n              case \"head\":\n              case \"hr\":\n              case \"i\":\n              case \"img\":\n              case \"li\":\n              case \"listing\":\n              case \"menu\":\n              case \"meta\":\n              case \"nobr\":\n              case \"ol\":\n              case \"p\":\n              case \"pre\":\n              case \"ruby\":\n              case \"s\":\n              case \"small\":\n              case \"span\":\n              case \"strong\":\n              case \"strike\":\n              case \"sub\":\n              case \"sup\":\n              case \"table\":\n              case \"tt\":\n              case \"u\":\n              case \"ul\":\n              case \"var\":\n                if (fragment) {\n                  break;\n                }\n                do {\n                  stack.pop();\n                  current = stack.top;\n                } while (current.namespaceURI !== NAMESPACE.HTML && !isMathmlTextIntegrationPoint(current) && !isHTMLIntegrationPoint(current));\n                insertToken(t, value, arg3, arg4);\n                return;\n            }\n            current = stack.elements.length === 1 && fragment ? fragmentContext : stack.top;\n            if (current.namespaceURI === NAMESPACE.MATHML) {\n              adjustMathMLAttributes(arg3);\n            } else if (current.namespaceURI === NAMESPACE.SVG) {\n              value = adjustSVGTagName(value);\n              adjustSVGAttributes(arg3);\n            }\n            adjustForeignAttributes(arg3);\n            insertForeignElement(value, arg3, current.namespaceURI);\n            if (arg4) {\n              if (value === \"script\" && current.namespaceURI === NAMESPACE.SVG) {}\n              stack.pop();\n            }\n            return;\n          case 3:\n            current = stack.top;\n            if (value === \"script\" && current.namespaceURI === NAMESPACE.SVG && current.localName === \"script\") {\n              stack.pop();\n            } else {\n              var i = stack.elements.length - 1;\n              var node = stack.elements[i];\n              for (;;) {\n                if (node.localName.toLowerCase() === value) {\n                  stack.popElement(node);\n                  break;\n                }\n                node = stack.elements[--i];\n                if (node.namespaceURI !== NAMESPACE.HTML) continue;\n                parser(t, value, arg3, arg4);\n                break;\n              }\n            }\n            return;\n        }\n      }\n      htmlparser.testTokenizer = function (input, initialState, lastStartTag, charbychar) {\n        var tokens = [];\n        switch (initialState) {\n          case \"PCDATA state\":\n            tokenizer = data_state;\n            break;\n          case \"RCDATA state\":\n            tokenizer = rcdata_state;\n            break;\n          case \"RAWTEXT state\":\n            tokenizer = rawtext_state;\n            break;\n          case \"PLAINTEXT state\":\n            tokenizer = plaintext_state;\n            break;\n        }\n        if (lastStartTag) {\n          lasttagname = lastStartTag;\n        }\n        insertToken = function (t, value, arg3, arg4) {\n          flushText();\n          switch (t) {\n            case 1:\n              if (tokens.length > 0 && tokens[tokens.length - 1][0] === \"Character\") {\n                tokens[tokens.length - 1][1] += value;\n              } else tokens.push([\"Character\", value]);\n              break;\n            case 4:\n              tokens.push([\"Comment\", value]);\n              break;\n            case 5:\n              tokens.push([\"DOCTYPE\", value, arg3 === void 0 ? null : arg3, arg4 === void 0 ? null : arg4, !force_quirks]);\n              break;\n            case 2:\n              var attrs = /* @__PURE__ */Object.create(null);\n              for (var i2 = 0; i2 < arg3.length; i2++) {\n                var a = arg3[i2];\n                if (a.length === 1) {\n                  attrs[a[0]] = \"\";\n                } else {\n                  attrs[a[0]] = a[1];\n                }\n              }\n              var token = [\"StartTag\", value, attrs];\n              if (arg4) token.push(true);\n              tokens.push(token);\n              break;\n            case 3:\n              tokens.push([\"EndTag\", value]);\n              break;\n            case -1:\n              break;\n          }\n        };\n        if (!charbychar) {\n          this.parse(input, true);\n        } else {\n          for (var i = 0; i < input.length; i++) {\n            this.parse(input[i]);\n          }\n          this.parse(\"\", true);\n        }\n        return tokens;\n      };\n      return htmlparser;\n    }\n  }\n});\n\n// external/npm/node_modules/domino/lib/DOMImplementation.js\nvar require_DOMImplementation = __commonJS({\n  \"external/npm/node_modules/domino/lib/DOMImplementation.js\"(exports, module) {\n    \"use strict\";\n\n    module.exports = DOMImplementation;\n    var Document = require_Document();\n    var DocumentType = require_DocumentType();\n    var HTMLParser = require_HTMLParser();\n    var utils = require_utils();\n    var xml = require_xmlnames();\n    function DOMImplementation(contextObject) {\n      this.contextObject = contextObject;\n    }\n    var supportedFeatures = {\n      \"xml\": {\n        \"\": true,\n        \"1.0\": true,\n        \"2.0\": true\n      },\n      \"core\": {\n        \"\": true,\n        \"2.0\": true\n      },\n      \"html\": {\n        \"\": true,\n        \"1.0\": true,\n        \"2.0\": true\n      },\n      \"xhtml\": {\n        \"\": true,\n        \"1.0\": true,\n        \"2.0\": true\n      }\n    };\n    DOMImplementation.prototype = {\n      hasFeature: function hasFeature(feature, version) {\n        var f = supportedFeatures[(feature || \"\").toLowerCase()];\n        return f && f[version || \"\"] || false;\n      },\n      createDocumentType: function createDocumentType(qualifiedName, publicId, systemId) {\n        if (!xml.isValidQName(qualifiedName)) utils.InvalidCharacterError();\n        return new DocumentType(this.contextObject, qualifiedName, publicId, systemId);\n      },\n      createDocument: function createDocument(namespace, qualifiedName, doctype) {\n        var d = new Document(false, null);\n        var e;\n        if (qualifiedName) e = d.createElementNS(namespace, qualifiedName);else e = null;\n        if (doctype) {\n          d.appendChild(doctype);\n        }\n        if (e) d.appendChild(e);\n        if (namespace === utils.NAMESPACE.HTML) {\n          d._contentType = \"application/xhtml+xml\";\n        } else if (namespace === utils.NAMESPACE.SVG) {\n          d._contentType = \"image/svg+xml\";\n        } else {\n          d._contentType = \"application/xml\";\n        }\n        return d;\n      },\n      createHTMLDocument: function createHTMLDocument(titleText) {\n        var d = new Document(true, null);\n        d.appendChild(new DocumentType(d, \"html\"));\n        var html = d.createElement(\"html\");\n        d.appendChild(html);\n        var head = d.createElement(\"head\");\n        html.appendChild(head);\n        if (titleText !== void 0) {\n          var title = d.createElement(\"title\");\n          head.appendChild(title);\n          title.appendChild(d.createTextNode(titleText));\n        }\n        html.appendChild(d.createElement(\"body\"));\n        d.modclock = 1;\n        return d;\n      },\n      mozSetOutputMutationHandler: function (doc, handler) {\n        doc.mutationHandler = handler;\n      },\n      mozGetInputMutationHandler: function (doc) {\n        utils.nyi();\n      },\n      mozHTMLParser: HTMLParser\n    };\n  }\n});\n\n// external/npm/node_modules/domino/lib/Location.js\nvar require_Location = __commonJS({\n  \"external/npm/node_modules/domino/lib/Location.js\"(exports, module) {\n    \"use strict\";\n\n    var URL = require_URL();\n    var URLUtils = require_URLUtils();\n    module.exports = Location;\n    function Location(window, href) {\n      this._window = window;\n      this._href = href;\n    }\n    Location.prototype = Object.create(URLUtils.prototype, {\n      constructor: {\n        value: Location\n      },\n      href: {\n        get: function () {\n          return this._href;\n        },\n        set: function (v) {\n          this.assign(v);\n        }\n      },\n      assign: {\n        value: function (url) {\n          var current = new URL(this._href);\n          var newurl = current.resolve(url);\n          this._href = newurl;\n        }\n      },\n      replace: {\n        value: function (url) {\n          this.assign(url);\n        }\n      },\n      reload: {\n        value: function () {\n          this.assign(this.href);\n        }\n      },\n      toString: {\n        value: function () {\n          return this.href;\n        }\n      }\n    });\n  }\n});\n\n// external/npm/node_modules/domino/lib/NavigatorID.js\nvar require_NavigatorID = __commonJS({\n  \"external/npm/node_modules/domino/lib/NavigatorID.js\"(exports, module) {\n    \"use strict\";\n\n    var NavigatorID = Object.create(null, {\n      appCodeName: {\n        value: \"Mozilla\"\n      },\n      appName: {\n        value: \"Netscape\"\n      },\n      appVersion: {\n        value: \"4.0\"\n      },\n      platform: {\n        value: \"\"\n      },\n      product: {\n        value: \"Gecko\"\n      },\n      productSub: {\n        value: \"20100101\"\n      },\n      userAgent: {\n        value: \"\"\n      },\n      vendor: {\n        value: \"\"\n      },\n      vendorSub: {\n        value: \"\"\n      },\n      taintEnabled: {\n        value: function () {\n          return false;\n        }\n      }\n    });\n    module.exports = NavigatorID;\n  }\n});\n\n// external/npm/node_modules/domino/lib/WindowTimers.js\nvar require_WindowTimers = __commonJS({\n  \"external/npm/node_modules/domino/lib/WindowTimers.js\"(exports, module) {\n    \"use strict\";\n\n    var WindowTimers = {\n      setTimeout,\n      clearTimeout,\n      setInterval,\n      clearInterval\n    };\n    module.exports = WindowTimers;\n  }\n});\n\n// external/npm/node_modules/domino/lib/impl.js\nvar require_impl = __commonJS({\n  \"external/npm/node_modules/domino/lib/impl.js\"(exports, module) {\n    \"use strict\";\n\n    var utils = require_utils();\n    exports = module.exports = {\n      CSSStyleDeclaration: require_CSSStyleDeclaration(),\n      CharacterData: require_CharacterData(),\n      Comment: require_Comment(),\n      DOMException: require_DOMException(),\n      DOMImplementation: require_DOMImplementation(),\n      DOMTokenList: require_DOMTokenList(),\n      Document: require_Document(),\n      DocumentFragment: require_DocumentFragment(),\n      DocumentType: require_DocumentType(),\n      Element: require_Element(),\n      HTMLParser: require_HTMLParser(),\n      NamedNodeMap: require_NamedNodeMap(),\n      Node: require_Node(),\n      NodeList: require_NodeList(),\n      NodeFilter: require_NodeFilter(),\n      ProcessingInstruction: require_ProcessingInstruction(),\n      Text: require_Text(),\n      Window: require_Window()\n    };\n    utils.merge(exports, require_events());\n    utils.merge(exports, require_htmlelts().elements);\n    utils.merge(exports, require_svg().elements);\n  }\n});\n\n// external/npm/node_modules/domino/lib/Window.js\nvar require_Window = __commonJS({\n  \"external/npm/node_modules/domino/lib/Window.js\"(exports, module) {\n    \"use strict\";\n\n    var DOMImplementation = require_DOMImplementation();\n    var EventTarget = require_EventTarget();\n    var Location = require_Location();\n    var utils = require_utils();\n    module.exports = Window;\n    function Window(document) {\n      this.document = document || new DOMImplementation(null).createHTMLDocument(\"\");\n      this.document._scripting_enabled = true;\n      this.document.defaultView = this;\n      this.location = new Location(this, this.document._address || \"about:blank\");\n    }\n    Window.prototype = Object.create(EventTarget.prototype, {\n      console: {\n        value: console\n      },\n      history: {\n        value: {\n          back: utils.nyi,\n          forward: utils.nyi,\n          go: utils.nyi\n        }\n      },\n      navigator: {\n        value: require_NavigatorID()\n      },\n      window: {\n        get: function () {\n          return this;\n        }\n      },\n      self: {\n        get: function () {\n          return this;\n        }\n      },\n      frames: {\n        get: function () {\n          return this;\n        }\n      },\n      parent: {\n        get: function () {\n          return this;\n        }\n      },\n      top: {\n        get: function () {\n          return this;\n        }\n      },\n      length: {\n        value: 0\n      },\n      frameElement: {\n        value: null\n      },\n      opener: {\n        value: null\n      },\n      onload: {\n        get: function () {\n          return this._getEventHandler(\"load\");\n        },\n        set: function (v) {\n          this._setEventHandler(\"load\", v);\n        }\n      },\n      getComputedStyle: {\n        value: function getComputedStyle(elt) {\n          return elt.style;\n        }\n      }\n    });\n    utils.expose(require_WindowTimers(), Window);\n    utils.expose(require_impl(), Window);\n  }\n});\n\n// external/npm/node_modules/domino/lib/index.js\nvar require_lib = __commonJS({\n  \"external/npm/node_modules/domino/lib/index.js\"(exports) {\n    var DOMImplementation = require_DOMImplementation();\n    var HTMLParser = require_HTMLParser();\n    var Window = require_Window();\n    var impl = require_impl();\n    exports.createDOMImplementation = function () {\n      return new DOMImplementation(null);\n    };\n    exports.createDocument = function (html, force) {\n      if (html || force) {\n        var parser = new HTMLParser();\n        parser.parse(html || \"\", true);\n        return parser.document();\n      }\n      return new DOMImplementation(null).createHTMLDocument(\"\");\n    };\n    exports.createIncrementalHTMLParser = function () {\n      var parser = new HTMLParser();\n      return {\n        write: function (s) {\n          if (s.length > 0) {\n            parser.parse(s, false, function () {\n              return true;\n            });\n          }\n        },\n        end: function (s) {\n          parser.parse(s || \"\", true, function () {\n            return true;\n          });\n        },\n        process: function (shouldPauseFunc) {\n          return parser.parse(\"\", false, shouldPauseFunc);\n        },\n        document: function () {\n          return parser.document();\n        }\n      };\n    };\n    exports.createWindow = function (html, address) {\n      var document = exports.createDocument(html);\n      if (address !== void 0) {\n        document._address = address;\n      }\n      return new impl.Window(document);\n    };\n    exports.impl = impl;\n  }\n});\nvar domino = require_lib();\nfunction setDomTypes() {\n  // Make all Domino types available in the global env.\n  // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n  Object.assign(globalThis, domino.impl);\n  globalThis['KeyboardEvent'] = domino.impl.Event;\n}\n/**\n * Parses a document string to a Document object.\n */\nfunction parseDocument(html, url = '/') {\n  let window = domino.createWindow(html, url);\n  let doc = window.document;\n  return doc;\n}\n/**\n * Serializes a document to string.\n */\nfunction serializeDocument(doc) {\n  return doc.serialize();\n}\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nclass DominoAdapter extends ɵBrowserDomAdapter {\n  static makeCurrent() {\n    setDomTypes();\n    ɵsetRootDomAdapter(new DominoAdapter());\n  }\n  supportsDOMEvents = false;\n  static defaultDoc;\n  createHtmlDocument() {\n    return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n  }\n  getDefaultDocument() {\n    if (!DominoAdapter.defaultDoc) {\n      DominoAdapter.defaultDoc = domino.createDocument();\n    }\n    return DominoAdapter.defaultDoc;\n  }\n  isElementNode(node) {\n    return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n  }\n  isShadowRoot(node) {\n    return node.shadowRoot == node;\n  }\n  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n  getGlobalEventTarget(doc, target) {\n    if (target === 'window') {\n      return doc.defaultView;\n    }\n    if (target === 'document') {\n      return doc;\n    }\n    if (target === 'body') {\n      return doc.body;\n    }\n    return null;\n  }\n  getBaseHref(doc) {\n    // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n    return doc.documentElement.querySelector('base')?.getAttribute('href') || '';\n  }\n  dispatchEvent(el, evt) {\n    el.dispatchEvent(evt);\n    // Dispatch the event to the window also.\n    const doc = el.ownerDocument || el;\n    const win = doc.defaultView;\n    if (win) {\n      win.dispatchEvent(evt);\n    }\n  }\n  getUserAgent() {\n    return 'Fake user agent';\n  }\n  getCookie(name) {\n    throw new Error('getCookie has not been implemented');\n  }\n}\n\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nconst INITIAL_CONFIG = new InjectionToken('Server.INITIAL_CONFIG');\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nconst BEFORE_APP_SERIALIZED = new InjectionToken('Server.RENDER_MODULE_HOOK');\nconst ENABLE_DOM_EMULATION = new InjectionToken('ENABLE_DOM_EMULATION');\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\nclass PlatformState {\n  _doc;\n  /* @internal */\n  _enableDomEmulation = enableDomEmulation(inject(Injector));\n  constructor(_doc) {\n    this._doc = _doc;\n  }\n  /**\n   * Renders the current state of the platform to string.\n   */\n  renderToString() {\n    if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n      throw new Error('Disabled DOM emulation should only run in browser environments');\n    }\n    const measuringLabel = 'renderToString';\n    ɵstartMeasuring(measuringLabel);\n    const rendered = this._enableDomEmulation ? serializeDocument(this._doc) :\n    // In the case we run/test the platform-server in a browser environment\n    this._doc.documentElement.outerHTML;\n    ɵstopMeasuring(measuringLabel);\n    return rendered;\n  }\n  /**\n   * Returns the current DOM state.\n   */\n  getDocument() {\n    return this._doc;\n  }\n  static ɵfac = function PlatformState_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformState)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PlatformState,\n    factory: PlatformState.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PlatformState, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\nfunction enableDomEmulation(injector) {\n  return injector.get(ENABLE_DOM_EMULATION, true);\n}\nclass ServerXhr {\n  xhrImpl;\n  // The `xhr2` dependency has a side-effect of accessing and modifying a\n  // global scope. Loading `xhr2` dynamically allows us to delay the loading\n  // and start the process once the global scope is established by the underlying\n  // server platform (via shims, etc).\n  async ɵloadImpl() {\n    if (!this.xhrImpl) {\n      const {\n        default: xhr\n      } = await import('xhr2');\n      this.xhrImpl = xhr;\n    }\n  }\n  build() {\n    const impl = this.xhrImpl;\n    if (!impl) {\n      throw new Error('Unexpected state in ServerXhr: XHR implementation is not loaded.');\n    }\n    return new impl.XMLHttpRequest();\n  }\n  static ɵfac = function ServerXhr_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ServerXhr)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: ServerXhr,\n    factory: ServerXhr.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ServerXhr, [{\n    type: Injectable\n  }], null, null);\n})();\nfunction relativeUrlsTransformerInterceptorFn(request, next) {\n  const platformLocation = inject(PlatformLocation);\n  const {\n    href,\n    protocol,\n    hostname,\n    port\n  } = platformLocation;\n  if (!protocol.startsWith('http')) {\n    return next(request);\n  }\n  let urlPrefix = `${protocol}//${hostname}`;\n  if (port) {\n    urlPrefix += `:${port}`;\n  }\n  const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n  const baseUrl = new URL(baseHref, urlPrefix);\n  const newUrl = new URL(request.url, baseUrl).toString();\n  return next(request.clone({\n    url: newUrl\n  }));\n}\nconst SERVER_HTTP_PROVIDERS = [{\n  provide: XhrFactory,\n  useClass: ServerXhr\n}, {\n  provide: ɵHTTP_ROOT_INTERCEPTOR_FNS,\n  useValue: relativeUrlsTransformerInterceptorFn,\n  multi: true\n}];\nconst RESOLVE_PROTOCOL = 'resolve:';\nfunction parseUrl(urlStr) {\n  const {\n    hostname,\n    protocol,\n    port,\n    pathname,\n    search,\n    hash\n  } = new URL(urlStr, RESOLVE_PROTOCOL + '//');\n  return {\n    hostname,\n    protocol: protocol === RESOLVE_PROTOCOL ? '' : protocol,\n    port,\n    pathname,\n    search,\n    hash\n  };\n}\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\nclass ServerPlatformLocation {\n  _doc;\n  href = '/';\n  hostname = '/';\n  protocol = '/';\n  port = '/';\n  pathname = '/';\n  search = '';\n  hash = '';\n  _hashUpdate = new Subject();\n  constructor(_doc, _config) {\n    this._doc = _doc;\n    const config = _config;\n    if (!config) {\n      return;\n    }\n    if (config.url) {\n      const url = parseUrl(config.url);\n      this.protocol = url.protocol;\n      this.hostname = url.hostname;\n      this.port = url.port;\n      this.pathname = url.pathname;\n      this.search = url.search;\n      this.hash = url.hash;\n      this.href = _doc.location.href;\n    }\n  }\n  getBaseHrefFromDOM() {\n    return ɵgetDOM().getBaseHref(this._doc);\n  }\n  onPopState(fn) {\n    // No-op: a state stack is not implemented, so\n    // no events will ever come.\n    return () => {};\n  }\n  onHashChange(fn) {\n    const subscription = this._hashUpdate.subscribe(fn);\n    return () => subscription.unsubscribe();\n  }\n  get url() {\n    return `${this.pathname}${this.search}${this.hash}`;\n  }\n  setHash(value, oldUrl) {\n    if (this.hash === value) {\n      // Don't fire events if the hash has not changed.\n      return;\n    }\n    this.hash = value;\n    const newUrl = this.url;\n    queueMicrotask(() => this._hashUpdate.next({\n      type: 'hashchange',\n      state: null,\n      oldUrl,\n      newUrl\n    }));\n  }\n  replaceState(state, title, newUrl) {\n    const oldUrl = this.url;\n    const parsedUrl = parseUrl(newUrl);\n    this.pathname = parsedUrl.pathname;\n    this.search = parsedUrl.search;\n    this.setHash(parsedUrl.hash, oldUrl);\n  }\n  pushState(state, title, newUrl) {\n    this.replaceState(state, title, newUrl);\n  }\n  forward() {\n    throw new Error('Not implemented');\n  }\n  back() {\n    throw new Error('Not implemented');\n  }\n  // History API isn't available on server, therefore return undefined\n  getState() {\n    return undefined;\n  }\n  static ɵfac = function ServerPlatformLocation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ServerPlatformLocation)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(INITIAL_CONFIG, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: ServerPlatformLocation,\n    factory: ServerPlatformLocation.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ServerPlatformLocation, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [INITIAL_CONFIG]\n    }]\n  }], null);\n})();\nclass ServerEventManagerPlugin extends EventManagerPlugin {\n  doc;\n  constructor(doc) {\n    super(doc);\n    this.doc = doc;\n  }\n  // Handle all events on the server.\n  supports(eventName) {\n    return true;\n  }\n  addEventListener(element, eventName, handler) {\n    return ɵgetDOM().onAndCancel(element, eventName, handler);\n  }\n  static ɵfac = function ServerEventManagerPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ServerEventManagerPlugin)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: ServerEventManagerPlugin,\n    factory: ServerEventManagerPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ServerEventManagerPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n// Tracks whether the server-side application state for a given app ID has been serialized already.\nconst TRANSFER_STATE_SERIALIZED_FOR_APPID = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_SERIALIZED_FOR_APPID' : '', {\n  providedIn: 'platform',\n  factory: () => new Set()\n});\nconst TRANSFER_STATE_SERIALIZATION_PROVIDERS = [{\n  provide: BEFORE_APP_SERIALIZED,\n  useFactory: serializeTransferStateFactory,\n  multi: true\n}];\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nfunction createScript(doc, textContent, nonce) {\n  const script = doc.createElement('script');\n  script.textContent = textContent;\n  if (nonce) {\n    script.setAttribute('nonce', nonce);\n  }\n  return script;\n}\nfunction warnIfStateTransferHappened(injector) {\n  const appId = injector.get(APP_ID);\n  const appIdsWithTransferStateSerialized = injector.get(TRANSFER_STATE_SERIALIZED_FOR_APPID);\n  if (appIdsWithTransferStateSerialized.has(appId)) {\n    console.warn(`Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` + `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` + `  imports: [ServerModule], // Registers server providers\\n` + `  providers: [provideServerRendering()] // Also registers server providers\\n\\n` + `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`);\n  }\n  appIdsWithTransferStateSerialized.add(appId);\n}\nfunction serializeTransferStateFactory() {\n  const doc = inject(DOCUMENT);\n  const appId = inject(APP_ID);\n  const transferStore = inject(TransferState);\n  const injector = inject(Injector);\n  return () => {\n    const measuringLabel = 'serializeTransferStateFactory';\n    ɵstartMeasuring(measuringLabel);\n    // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n    // These callbacks can be used to provide the value for a given key.\n    const content = transferStore.toJson();\n    if (transferStore.isEmpty) {\n      // The state is empty, nothing to transfer,\n      // avoid creating an extra `<script>` tag in this case.\n      return;\n    }\n    if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n      warnIfStateTransferHappened(injector);\n    }\n    const script = createScript(doc, content,\n    /**\n     * `nonce` is not required for 'application/json'\n     * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n     */\n    null);\n    script.id = appId + '-state';\n    script.setAttribute('type', 'application/json');\n    // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n    // bundles are always `type=\"module\"`. These are deferred by default and cause the\n    // transfer data to be queried only after the browser has finished parsing the DOM.\n    doc.body.appendChild(script);\n    ɵstopMeasuring(measuringLabel);\n  };\n}\nconst INTERNAL_SERVER_PLATFORM_PROVIDERS = [{\n  provide: DOCUMENT,\n  useFactory: _document,\n  deps: [Injector]\n}, {\n  provide: PLATFORM_ID,\n  useValue: ɵPLATFORM_SERVER_ID\n}, {\n  provide: PLATFORM_INITIALIZER,\n  useFactory: initDominoAdapter,\n  multi: true,\n  deps: [Injector]\n}, {\n  provide: PlatformLocation,\n  useClass: ServerPlatformLocation,\n  deps: [DOCUMENT, [Optional, INITIAL_CONFIG]]\n}, {\n  provide: PlatformState,\n  deps: [DOCUMENT]\n},\n// Add special provider that allows multiple instances of platformServer* to be created.\n{\n  provide: ɵALLOW_MULTIPLE_PLATFORMS,\n  useValue: true\n}];\nfunction initDominoAdapter(injector) {\n  const _enableDomEmulation = enableDomEmulation(injector);\n  return () => {\n    if (_enableDomEmulation) {\n      DominoAdapter.makeCurrent();\n    } else {\n      ɵBrowserDomAdapter.makeCurrent();\n    }\n  };\n}\nconst SERVER_RENDER_PROVIDERS = [{\n  provide: EVENT_MANAGER_PLUGINS,\n  multi: true,\n  useClass: ServerEventManagerPlugin\n}];\nconst PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVER_RENDER_PROVIDERS, SERVER_HTTP_PROVIDERS, {\n  provide: Testability,\n  useValue: null\n},\n// Keep for backwards-compatibility.\n{\n  provide: ɵTESTABILITY,\n  useValue: null\n}, {\n  provide: ViewportScroller,\n  useClass: ɵNullViewportScroller\n}];\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\nclass ServerModule {\n  static ɵfac = function ServerModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || ServerModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: ServerModule,\n    imports: [NoopAnimationsModule],\n    exports: [BrowserModule]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: PLATFORM_SERVER_PROVIDERS,\n    imports: [NoopAnimationsModule, BrowserModule]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(ServerModule, [{\n    type: NgModule,\n    args: [{\n      exports: [BrowserModule],\n      imports: [NoopAnimationsModule],\n      providers: PLATFORM_SERVER_PROVIDERS\n    }]\n  }], null, null);\n})();\nfunction _document(injector) {\n  const config = injector.get(INITIAL_CONFIG, null);\n  const _enableDomEmulation = enableDomEmulation(injector);\n  let document;\n  if (config && config.document) {\n    document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url) : window.document : config.document;\n  } else {\n    document = ɵgetDOM().createHtmlDocument();\n  }\n  // Tell ivy about the global document\n  ɵsetDocument(document);\n  return document;\n}\n/**\n * @publicApi\n */\nfunction platformServer(extraProviders) {\n  if (typeof ngServerMode === 'undefined') {\n    globalThis['ngServerMode'] = true;\n  }\n  const platform = createPlatformFactory(platformCore, 'server', INTERNAL_SERVER_PLATFORM_PROVIDERS)(extraProviders);\n  platform.onDestroy(() => {\n    globalThis['ngServerMode'] = undefined;\n  });\n  return platform;\n}\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nfunction provideServerRendering() {\n  if (typeof ngServerMode === 'undefined') {\n    globalThis['ngServerMode'] = true;\n  }\n  return makeEnvironmentProviders([provideNoopAnimations(), ...PLATFORM_SERVER_PROVIDERS]);\n}\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nconst EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options) {\n  const extraProviders = options.platformProviders ?? [];\n  const measuringLabel = 'createServerPlatform';\n  ɵstartMeasuring(measuringLabel);\n  const platform = platformServer([{\n    provide: INITIAL_CONFIG,\n    useValue: {\n      document: options.document,\n      url: options.url\n    }\n  }, extraProviders]);\n  ɵstopMeasuring(measuringLabel);\n  return platform;\n}\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc) {\n  return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc) {\n  findEventDispatchScript(doc)?.remove();\n}\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState, applicationRef) {\n  const measuringLabel = 'prepareForHydration';\n  ɵstartMeasuring(measuringLabel);\n  const environmentInjector = applicationRef.injector;\n  const doc = platformState.getDocument();\n  if (!environmentInjector.get(ɵIS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n    // Hydration is diabled, remove inlined event dispatch script.\n    // (which was injected by the build process) from the HTML.\n    removeEventDispatchScript(doc);\n    return;\n  }\n  appendSsrContentIntegrityMarker(doc);\n  const eventTypesToReplay = ɵannotateForHydration(applicationRef, doc);\n  if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n    insertEventRecordScript(environmentInjector.get(APP_ID), doc, eventTypesToReplay, environmentInjector.get(CSP_NONCE, null));\n  } else {\n    // No events to replay, we should remove inlined event dispatch script\n    // (which was injected by the build process) from the HTML.\n    removeEventDispatchScript(doc);\n  }\n  ɵstopMeasuring(measuringLabel);\n}\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc) {\n  // Adding a ng hydration marker comment\n  const comment = doc.createComment(ɵSSR_CONTENT_INTEGRITY_MARKER);\n  doc.body.firstChild ? doc.body.insertBefore(comment, doc.body.firstChild) : doc.body.append(comment);\n}\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef) {\n  const injector = applicationRef.injector;\n  let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n  applicationRef.components.forEach(componentRef => {\n    const renderer = componentRef.injector.get(Renderer2);\n    const element = componentRef.location.nativeElement;\n    if (element) {\n      renderer.setAttribute(element, 'ng-server-context', serverContext);\n    }\n  });\n}\nfunction insertEventRecordScript(appId, doc, eventTypesToReplay, nonce) {\n  const measuringLabel = 'insertEventRecordScript';\n  ɵstartMeasuring(measuringLabel);\n  const {\n    regular,\n    capture\n  } = eventTypesToReplay;\n  const eventDispatchScript = findEventDispatchScript(doc);\n  // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n  if (eventDispatchScript) {\n    // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n    const replayScriptContents = `window.__jsaction_bootstrap(` + `document.body,` + `\"${appId}\",` + `${JSON.stringify(Array.from(regular))},` + `${JSON.stringify(Array.from(capture))}` + `);`;\n    const replayScript = createScript(doc, replayScriptContents, nonce);\n    // Insert replay script right after inlined event dispatch script, since it\n    // relies on `__jsaction_bootstrap` to be defined in the global scope.\n    eventDispatchScript.after(replayScript);\n  }\n  ɵstopMeasuring(measuringLabel);\n}\nasync function _render(platformRef, applicationRef) {\n  const measuringLabel = 'whenStable';\n  ɵstartMeasuring(measuringLabel);\n  // Block until application is stable.\n  await applicationRef.whenStable();\n  ɵstopMeasuring(measuringLabel);\n  const platformState = platformRef.injector.get(PlatformState);\n  prepareForHydration(platformState, applicationRef);\n  // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n  const environmentInjector = applicationRef.injector;\n  const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n  if (callbacks) {\n    const asyncCallbacks = [];\n    for (const callback of callbacks) {\n      try {\n        const callbackResult = callback();\n        if (callbackResult) {\n          asyncCallbacks.push(callbackResult);\n        }\n      } catch (e) {\n        // Ignore exceptions.\n        console.warn('Ignoring BEFORE_APP_SERIALIZED Exception: ', e);\n      }\n    }\n    if (asyncCallbacks.length) {\n      for (const result of await Promise.allSettled(asyncCallbacks)) {\n        if (result.status === 'rejected') {\n          console.warn('Ignoring BEFORE_APP_SERIALIZED Exception: ', result.reason);\n        }\n      }\n    }\n  }\n  appendServerContextInfo(applicationRef);\n  return platformState.renderToString();\n}\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef) {\n  return new Promise(resolve => {\n    setTimeout(() => {\n      platformRef.destroy();\n      resolve();\n    }, 0);\n  });\n}\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nconst SERVER_CONTEXT = new InjectionToken('SERVER_CONTEXT');\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext) {\n  const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n  return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n *  - `document` - the document of the page to render, either as an HTML string or\n *                 as a reference to the `document` instance.\n *  - `url` - the URL for the current render request.\n *  - `extraProviders` - set of platform level providers for the current render request.\n *\n * @publicApi\n */\nasync function renderModule(moduleType, options) {\n  const {\n    document,\n    url,\n    extraProviders: platformProviders\n  } = options;\n  const platformRef = createServerPlatform({\n    document,\n    url,\n    platformProviders\n  });\n  try {\n    const moduleRef = await platformRef.bootstrapModule(moduleType);\n    const applicationRef = moduleRef.injector.get(ApplicationRef);\n    return await _render(platformRef, applicationRef);\n  } finally {\n    await asyncDestroyPlatform(platformRef);\n  }\n}\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n\n * ```ts\n * const bootstrap = () => bootstrapApplication(RootComponent, appConfig);\n * const output: string = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n *     instance once resolved.\n * @param options Additional configuration for the render operation:\n *  - `document` - the document of the page to render, either as an HTML string or\n *                 as a reference to the `document` instance.\n *  - `url` - the URL for the current render request.\n *  - `platformProviders` - the platform level providers for the current render request.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nasync function renderApplication(bootstrap, options) {\n  const renderAppLabel = 'renderApplication';\n  const bootstrapLabel = 'bootstrap';\n  const _renderLabel = '_render';\n  ɵstartMeasuring(renderAppLabel);\n  const platformRef = createServerPlatform(options);\n  try {\n    ɵstartMeasuring(bootstrapLabel);\n    const applicationRef = await bootstrap();\n    ɵstopMeasuring(bootstrapLabel);\n    ɵstartMeasuring(_renderLabel);\n    const rendered = await _render(platformRef, applicationRef);\n    ɵstopMeasuring(_renderLabel);\n    return rendered;\n  } finally {\n    await asyncDestroyPlatform(platformRef);\n    ɵstopMeasuring(renderAppLabel);\n  }\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/// <reference types=\"node\" />\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, ServerModule, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, ENABLE_DOM_EMULATION as ɵENABLE_DOM_EMULATION, INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_CONTEXT as ɵSERVER_CONTEXT, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS };\n"],
-  "mappings": "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",
-  "names": ["AnimationMetadataType", "LINE_START", "style", "styleMetadata", "ast", "element", "value", "player", "index", "i", "style", "delegate", "fn", "data", "window", "document", "URL", "style", "Document", "URL2"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-YHCV7DAQ.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-YHCV7DAQ.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,147 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-var __create = Object.create;
-var __defProp = Object.defineProperty;
-var __defProps = Object.defineProperties;
-var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
-var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __getOwnPropSymbols = Object.getOwnPropertySymbols;
-var __getProtoOf = Object.getPrototypeOf;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __propIsEnum = Object.prototype.propertyIsEnumerable;
-var __reflectGet = Reflect.get;
-var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
-var __typeError = (msg) => {
-  throw TypeError(msg);
-};
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues = (a, b) => {
-  for (var prop in b ||= {})
-    if (__hasOwnProp.call(b, prop))
-      __defNormalProp(a, prop, b[prop]);
-  if (__getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(b)) {
-      if (__propIsEnum.call(b, prop))
-        __defNormalProp(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
-var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
-  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
-}) : x)(function(x) {
-  if (typeof require !== "undefined") return require.apply(this, arguments);
-  throw Error('Dynamic require of "' + x + '" is not supported');
-});
-var __objRest = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-var __commonJS = (cb, mod) => function __require2() {
-  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
-};
-var __copyProps = (to, from, except, desc) => {
-  if (from && typeof from === "object" || typeof from === "function") {
-    for (let key of __getOwnPropNames(from))
-      if (!__hasOwnProp.call(to, key) && key !== except)
-        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
-  }
-  return to;
-};
-var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
-  // If the importer is in node compatibility mode or this is not an ESM
-  // file that has been converted to a CommonJS file using a Babel-
-  // compatible transform (i.e. "__esModule" has not been set), then set
-  // "default" to the CommonJS "module.exports" for node compatibility.
-  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
-  mod
-));
-var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
-var __async = (__this, __arguments, generator) => {
-  return new Promise((resolve, reject) => {
-    var fulfilled = (value) => {
-      try {
-        step(generator.next(value));
-      } catch (e) {
-        reject(e);
-      }
-    };
-    var rejected = (value) => {
-      try {
-        step(generator.throw(value));
-      } catch (e) {
-        reject(e);
-      }
-    };
-    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
-    step((generator = generator.apply(__this, __arguments)).next());
-  });
-};
-var __await = function(promise, isYieldStar) {
-  this[0] = promise;
-  this[1] = isYieldStar;
-};
-var __asyncGenerator = (__this, __arguments, generator) => {
-  var resume = (k, v, yes, no) => {
-    try {
-      var x = generator[k](v), isAwait = (v = x.value) instanceof __await, done = x.done;
-      Promise.resolve(isAwait ? v[0] : v).then((y) => isAwait ? resume(k === "return" ? k : "next", v[1] ? { done: y.done, value: y.value } : y, yes, no) : yes({ value: y, done })).catch((e) => resume("throw", e, yes, no));
-    } catch (e) {
-      no(e);
-    }
-  }, method = (k) => it[k] = (x) => new Promise((yes, no) => resume(k, x, yes, no)), it = {};
-  return generator = generator.apply(__this, __arguments), it[__knownSymbol("asyncIterator")] = () => it, method("next"), method("throw"), method("return"), it;
-};
-var __yieldStar = (value) => {
-  var obj = value[__knownSymbol("asyncIterator")], isAwait = false, method, it = {};
-  if (obj == null) {
-    obj = value[__knownSymbol("iterator")]();
-    method = (k) => it[k] = (x) => obj[k](x);
-  } else {
-    obj = obj.call(value);
-    method = (k) => it[k] = (v) => {
-      if (isAwait) {
-        isAwait = false;
-        if (k === "throw") throw v;
-        return v;
-      }
-      isAwait = true;
-      return {
-        done: false,
-        value: new __await(new Promise((resolve) => {
-          var x = obj[k](v);
-          if (!(x instanceof Object)) __typeError("Object expected");
-          resolve(x);
-        }), 1)
-      };
-    };
-  }
-  return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => {
-    throw x;
-  }, "return" in obj && method("return"), it;
-};
-var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
-
-export {
-  __spreadValues,
-  __spreadProps,
-  __require,
-  __objRest,
-  __commonJS,
-  __toESM,
-  __superGet,
-  __async,
-  __await,
-  __asyncGenerator,
-  __yieldStar,
-  __forAwait
-};
-//# sourceMappingURL=chunk-YHCV7DAQ.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-YHCV7DAQ.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-YHCV7DAQ.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": [],
-  "sourcesContent": [],
-  "mappings": "",
-  "names": []
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-ZI5JGHU3.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-ZI5JGHU3.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,9238 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  APP_BOOTSTRAP_LISTENER,
-  APP_ID,
-  ApplicationModule,
-  ApplicationRef,
-  Attribute,
-  CSP_NONCE,
-  ChangeDetectorRef,
-  Console,
-  DEFAULT_CURRENCY_CODE,
-  Directive,
-  ENVIRONMENT_INITIALIZER,
-  ElementRef,
-  EnvironmentInjector,
-  ErrorHandler,
-  Host,
-  IMAGE_CONFIG,
-  IMAGE_CONFIG_DEFAULTS,
-  INJECTOR_SCOPE,
-  Inject,
-  Injectable,
-  InjectionToken,
-  Injector,
-  Input,
-  IterableDiffers,
-  KeyValueDiffers,
-  LOCALE_ID,
-  LocaleDataIndex,
-  NgModule,
-  NgModuleRef$1,
-  NgZone,
-  Optional,
-  PLATFORM_ID,
-  PLATFORM_INITIALIZER,
-  PendingTasksInternal,
-  Pipe,
-  Renderer2,
-  RendererFactory2,
-  RendererStyleFlags2,
-  RuntimeError,
-  SecurityContext,
-  SkipSelf,
-  TESTABILITY,
-  TESTABILITY_GETTER,
-  TemplateRef,
-  Testability,
-  TestabilityRegistry,
-  TransferState,
-  Version,
-  ViewContainerRef,
-  ViewEncapsulation,
-  XSS_SECURITY_URL,
-  ZONELESS_ENABLED,
-  _global,
-  _sanitizeHtml,
-  _sanitizeUrl,
-  allowSanitizationBypassAndThrow,
-  booleanAttribute,
-  bypassSanitizationTrustHtml,
-  bypassSanitizationTrustResourceUrl,
-  bypassSanitizationTrustScript,
-  bypassSanitizationTrustStyle,
-  bypassSanitizationTrustUrl,
-  createNgModule,
-  createPlatformFactory,
-  findLocaleData,
-  formatRuntimeError,
-  forwardRef,
-  getLocalePluralCase,
-  inject,
-  internalCreateApplication,
-  isPromise,
-  isSubscribable,
-  makeEnvironmentProviders,
-  makeStateKey,
-  numberAttribute,
-  performanceMarkFeature,
-  platformCore,
-  require_cjs,
-  require_operators,
-  runInInjectionContext,
-  setClassMetadata,
-  setDocument,
-  stringify,
-  truncateMiddle,
-  untracked,
-  unwrapSafeValue,
-  withDomHydration,
-  withEventReplay,
-  withI18nSupport,
-  withIncrementalHydration,
-  ɵɵInputTransformsFeature,
-  ɵɵNgOnChangesFeature,
-  ɵɵdefineDirective,
-  ɵɵdefineInjectable,
-  ɵɵdefineInjector,
-  ɵɵdefineNgModule,
-  ɵɵdefinePipe,
-  ɵɵdirectiveInject,
-  ɵɵinject,
-  ɵɵinjectAttribute,
-  ɵɵstyleProp
-} from "./chunk-PEAVEDUD.js";
-import {
-  __async,
-  __objRest,
-  __spreadProps,
-  __spreadValues,
-  __toESM
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/@angular/common/fesm2022/common.mjs
-var import_rxjs = __toESM(require_cjs(), 1);
-var _DOM = null;
-function getDOM() {
-  return _DOM;
-}
-function setRootDomAdapter(adapter) {
-  _DOM ??= adapter;
-}
-var DomAdapter = class {
-};
-var PlatformNavigation = class _PlatformNavigation {
-  static ɵfac = function PlatformNavigation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformNavigation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformNavigation,
-    factory: () => (() => window.navigation)(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformNavigation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => window.navigation
-    }]
-  }], null, null);
-})();
-var DOCUMENT = new InjectionToken(ngDevMode ? "DocumentToken" : "");
-var PlatformLocation = class _PlatformLocation {
-  historyGo(relativePosition) {
-    throw new Error(ngDevMode ? "Not implemented" : "");
-  }
-  static ɵfac = function PlatformLocation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PlatformLocation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PlatformLocation,
-    factory: () => (() => inject(BrowserPlatformLocation))(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformLocation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => inject(BrowserPlatformLocation)
-    }]
-  }], null, null);
-})();
-var LOCATION_INITIALIZED = new InjectionToken(ngDevMode ? "Location Initialized" : "");
-var BrowserPlatformLocation = class _BrowserPlatformLocation extends PlatformLocation {
-  _location;
-  _history;
-  _doc = inject(DOCUMENT);
-  constructor() {
-    super();
-    this._location = window.location;
-    this._history = window.history;
-  }
-  getBaseHrefFromDOM() {
-    return getDOM().getBaseHref(this._doc);
-  }
-  onPopState(fn) {
-    const window2 = getDOM().getGlobalEventTarget(this._doc, "window");
-    window2.addEventListener("popstate", fn, false);
-    return () => window2.removeEventListener("popstate", fn);
-  }
-  onHashChange(fn) {
-    const window2 = getDOM().getGlobalEventTarget(this._doc, "window");
-    window2.addEventListener("hashchange", fn, false);
-    return () => window2.removeEventListener("hashchange", fn);
-  }
-  get href() {
-    return this._location.href;
-  }
-  get protocol() {
-    return this._location.protocol;
-  }
-  get hostname() {
-    return this._location.hostname;
-  }
-  get port() {
-    return this._location.port;
-  }
-  get pathname() {
-    return this._location.pathname;
-  }
-  get search() {
-    return this._location.search;
-  }
-  get hash() {
-    return this._location.hash;
-  }
-  set pathname(newPath) {
-    this._location.pathname = newPath;
-  }
-  pushState(state, title, url) {
-    this._history.pushState(state, title, url);
-  }
-  replaceState(state, title, url) {
-    this._history.replaceState(state, title, url);
-  }
-  forward() {
-    this._history.forward();
-  }
-  back() {
-    this._history.back();
-  }
-  historyGo(relativePosition = 0) {
-    this._history.go(relativePosition);
-  }
-  getState() {
-    return this._history.state;
-  }
-  static ɵfac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserPlatformLocation)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _BrowserPlatformLocation,
-    factory: () => (() => new _BrowserPlatformLocation())(),
-    providedIn: "platform"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserPlatformLocation, [{
-    type: Injectable,
-    args: [{
-      providedIn: "platform",
-      useFactory: () => new BrowserPlatformLocation()
-    }]
-  }], () => [], null);
-})();
-function joinWithSlash(start, end) {
-  if (start.length == 0) {
-    return end;
-  }
-  if (end.length == 0) {
-    return start;
-  }
-  let slashes = 0;
-  if (start.endsWith("/")) {
-    slashes++;
-  }
-  if (end.startsWith("/")) {
-    slashes++;
-  }
-  if (slashes == 2) {
-    return start + end.substring(1);
-  }
-  if (slashes == 1) {
-    return start + end;
-  }
-  return start + "/" + end;
-}
-function stripTrailingSlash(url) {
-  const match = url.match(/#|\?|$/);
-  const pathEndIdx = match && match.index || url.length;
-  const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === "/" ? 1 : 0);
-  return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);
-}
-function normalizeQueryParams(params) {
-  return params && params[0] !== "?" ? "?" + params : params;
-}
-var LocationStrategy = class _LocationStrategy {
-  historyGo(relativePosition) {
-    throw new Error(ngDevMode ? "Not implemented" : "");
-  }
-  static ɵfac = function LocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LocationStrategy)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _LocationStrategy,
-    factory: () => (() => inject(PathLocationStrategy))(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LocationStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: () => inject(PathLocationStrategy)
-    }]
-  }], null, null);
-})();
-var APP_BASE_HREF = new InjectionToken(ngDevMode ? "appBaseHref" : "");
-var PathLocationStrategy = class _PathLocationStrategy extends LocationStrategy {
-  _platformLocation;
-  _baseHref;
-  _removeListenerFns = [];
-  constructor(_platformLocation, href) {
-    super();
-    this._platformLocation = _platformLocation;
-    this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? "";
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    while (this._removeListenerFns.length) {
-      this._removeListenerFns.pop()();
-    }
-  }
-  onPopState(fn) {
-    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
-  }
-  getBaseHref() {
-    return this._baseHref;
-  }
-  prepareExternalUrl(internal) {
-    return joinWithSlash(this._baseHref, internal);
-  }
-  path(includeHash = false) {
-    const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);
-    const hash = this._platformLocation.hash;
-    return hash && includeHash ? `${pathname}${hash}` : pathname;
-  }
-  pushState(state, title, url, queryParams) {
-    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
-    this._platformLocation.pushState(state, title, externalUrl);
-  }
-  replaceState(state, title, url, queryParams) {
-    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));
-    this._platformLocation.replaceState(state, title, externalUrl);
-  }
-  forward() {
-    this._platformLocation.forward();
-  }
-  back() {
-    this._platformLocation.back();
-  }
-  getState() {
-    return this._platformLocation.getState();
-  }
-  historyGo(relativePosition = 0) {
-    this._platformLocation.historyGo?.(relativePosition);
-  }
-  static ɵfac = function PathLocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PathLocationStrategy)(ɵɵinject(PlatformLocation), ɵɵinject(APP_BASE_HREF, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PathLocationStrategy,
-    factory: _PathLocationStrategy.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PathLocationStrategy, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: PlatformLocation
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [APP_BASE_HREF]
-    }]
-  }], null);
-})();
-var HashLocationStrategy = class _HashLocationStrategy extends LocationStrategy {
-  _platformLocation;
-  _baseHref = "";
-  _removeListenerFns = [];
-  constructor(_platformLocation, _baseHref) {
-    super();
-    this._platformLocation = _platformLocation;
-    if (_baseHref != null) {
-      this._baseHref = _baseHref;
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    while (this._removeListenerFns.length) {
-      this._removeListenerFns.pop()();
-    }
-  }
-  onPopState(fn) {
-    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));
-  }
-  getBaseHref() {
-    return this._baseHref;
-  }
-  path(includeHash = false) {
-    const path = this._platformLocation.hash ?? "#";
-    return path.length > 0 ? path.substring(1) : path;
-  }
-  prepareExternalUrl(internal) {
-    const url = joinWithSlash(this._baseHref, internal);
-    return url.length > 0 ? "#" + url : url;
-  }
-  pushState(state, title, path, queryParams) {
-    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
-    if (url.length == 0) {
-      url = this._platformLocation.pathname;
-    }
-    this._platformLocation.pushState(state, title, url);
-  }
-  replaceState(state, title, path, queryParams) {
-    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));
-    if (url.length == 0) {
-      url = this._platformLocation.pathname;
-    }
-    this._platformLocation.replaceState(state, title, url);
-  }
-  forward() {
-    this._platformLocation.forward();
-  }
-  back() {
-    this._platformLocation.back();
-  }
-  getState() {
-    return this._platformLocation.getState();
-  }
-  historyGo(relativePosition = 0) {
-    this._platformLocation.historyGo?.(relativePosition);
-  }
-  static ɵfac = function HashLocationStrategy_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HashLocationStrategy)(ɵɵinject(PlatformLocation), ɵɵinject(APP_BASE_HREF, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HashLocationStrategy,
-    factory: _HashLocationStrategy.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HashLocationStrategy, [{
-    type: Injectable
-  }], () => [{
-    type: PlatformLocation
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [APP_BASE_HREF]
-    }]
-  }], null);
-})();
-var Location = class _Location {
-  /** @internal */
-  _subject = new import_rxjs.Subject();
-  /** @internal */
-  _basePath;
-  /** @internal */
-  _locationStrategy;
-  /** @internal */
-  _urlChangeListeners = [];
-  /** @internal */
-  _urlChangeSubscription = null;
-  constructor(locationStrategy) {
-    this._locationStrategy = locationStrategy;
-    const baseHref = this._locationStrategy.getBaseHref();
-    this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));
-    this._locationStrategy.onPopState((ev) => {
-      this._subject.next({
-        "url": this.path(true),
-        "pop": true,
-        "state": ev.state,
-        "type": ev.type
-      });
-    });
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this._urlChangeSubscription?.unsubscribe();
-    this._urlChangeListeners = [];
-  }
-  /**
-   * Normalizes the URL path for this location.
-   *
-   * @param includeHash True to include an anchor fragment in the path.
-   *
-   * @returns The normalized URL path.
-   */
-  // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
-  // removed.
-  path(includeHash = false) {
-    return this.normalize(this._locationStrategy.path(includeHash));
-  }
-  /**
-   * Reports the current state of the location history.
-   * @returns The current value of the `history.state` object.
-   */
-  getState() {
-    return this._locationStrategy.getState();
-  }
-  /**
-   * Normalizes the given path and compares to the current normalized path.
-   *
-   * @param path The given URL path.
-   * @param query Query parameters.
-   *
-   * @returns True if the given URL path is equal to the current normalized path, false
-   * otherwise.
-   */
-  isCurrentPathEqualTo(path, query = "") {
-    return this.path() == this.normalize(path + normalizeQueryParams(query));
-  }
-  /**
-   * Normalizes a URL path by stripping any trailing slashes.
-   *
-   * @param url String representing a URL.
-   *
-   * @returns The normalized URL string.
-   */
-  normalize(url) {
-    return _Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));
-  }
-  /**
-   * Normalizes an external URL path.
-   * If the given URL doesn't begin with a leading slash (`'/'`), adds one
-   * before normalizing. Adds a hash if `HashLocationStrategy` is
-   * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
-   *
-   * @param url String representing a URL.
-   *
-   * @returns  A normalized platform-specific URL.
-   */
-  prepareExternalUrl(url) {
-    if (url && url[0] !== "/") {
-      url = "/" + url;
-    }
-    return this._locationStrategy.prepareExternalUrl(url);
-  }
-  // TODO: rename this method to pushState
-  /**
-   * Changes the browser's URL to a normalized version of a given URL, and pushes a
-   * new item onto the platform's history.
-   *
-   * @param path  URL path to normalize.
-   * @param query Query parameters.
-   * @param state Location history state.
-   *
-   */
-  go(path, query = "", state = null) {
-    this._locationStrategy.pushState(state, "", path, query);
-    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
-  }
-  /**
-   * Changes the browser's URL to a normalized version of the given URL, and replaces
-   * the top item on the platform's history stack.
-   *
-   * @param path  URL path to normalize.
-   * @param query Query parameters.
-   * @param state Location history state.
-   */
-  replaceState(path, query = "", state = null) {
-    this._locationStrategy.replaceState(state, "", path, query);
-    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
-  }
-  /**
-   * Navigates forward in the platform's history.
-   */
-  forward() {
-    this._locationStrategy.forward();
-  }
-  /**
-   * Navigates back in the platform's history.
-   */
-  back() {
-    this._locationStrategy.back();
-  }
-  /**
-   * Navigate to a specific page from session history, identified by its relative position to the
-   * current page.
-   *
-   * @param relativePosition  Position of the target page in the history relative to the current
-   *     page.
-   * A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)`
-   * moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go
-   * beyond what's stored in the history session, we stay in the current page. Same behaviour occurs
-   * when `relativePosition` equals 0.
-   * @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history
-   */
-  historyGo(relativePosition = 0) {
-    this._locationStrategy.historyGo?.(relativePosition);
-  }
-  /**
-   * Registers a URL change listener. Use to catch updates performed by the Angular
-   * framework that are not detectible through "popstate" or "hashchange" events.
-   *
-   * @param fn The change handler function, which take a URL and a location history state.
-   * @returns A function that, when executed, unregisters a URL change listener.
-   */
-  onUrlChange(fn) {
-    this._urlChangeListeners.push(fn);
-    this._urlChangeSubscription ??= this.subscribe((v) => {
-      this._notifyUrlChangeListeners(v.url, v.state);
-    });
-    return () => {
-      const fnIndex = this._urlChangeListeners.indexOf(fn);
-      this._urlChangeListeners.splice(fnIndex, 1);
-      if (this._urlChangeListeners.length === 0) {
-        this._urlChangeSubscription?.unsubscribe();
-        this._urlChangeSubscription = null;
-      }
-    };
-  }
-  /** @internal */
-  _notifyUrlChangeListeners(url = "", state) {
-    this._urlChangeListeners.forEach((fn) => fn(url, state));
-  }
-  /**
-   * Subscribes to the platform's `popState` events.
-   *
-   * Note: `Location.go()` does not trigger the `popState` event in the browser. Use
-   * `Location.onUrlChange()` to subscribe to URL changes instead.
-   *
-   * @param value Event that is triggered when the state history changes.
-   * @param exception The exception to throw.
-   *
-   * @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate)
-   *
-   * @returns Subscribed events.
-   */
-  subscribe(onNext, onThrow, onReturn) {
-    return this._subject.subscribe({
-      next: onNext,
-      error: onThrow ?? void 0,
-      complete: onReturn ?? void 0
-    });
-  }
-  /**
-   * Normalizes URL parameters by prepending with `?` if needed.
-   *
-   * @param  params String of URL parameters.
-   *
-   * @returns The normalized URL parameters string.
-   */
-  static normalizeQueryParams = normalizeQueryParams;
-  /**
-   * Joins two parts of a URL with a slash if needed.
-   *
-   * @param start  URL string
-   * @param end    URL string
-   *
-   *
-   * @returns The joined URL string.
-   */
-  static joinWithSlash = joinWithSlash;
-  /**
-   * Removes a trailing slash from a URL string if needed.
-   * Looks for the first occurrence of either `#`, `?`, or the end of the
-   * line as `/` characters and removes the trailing slash if one exists.
-   *
-   * @param url URL string.
-   *
-   * @returns The URL string, modified if needed.
-   */
-  static stripTrailingSlash = stripTrailingSlash;
-  static ɵfac = function Location_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Location)(ɵɵinject(LocationStrategy));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Location,
-    factory: () => createLocation(),
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Location, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      // See #23917
-      useFactory: createLocation
-    }]
-  }], () => [{
-    type: LocationStrategy
-  }], null);
-})();
-function createLocation() {
-  return new Location(ɵɵinject(LocationStrategy));
-}
-function _stripBasePath(basePath, url) {
-  if (!basePath || !url.startsWith(basePath)) {
-    return url;
-  }
-  const strippedUrl = url.substring(basePath.length);
-  if (strippedUrl === "" || ["/", ";", "?", "#"].includes(strippedUrl[0])) {
-    return strippedUrl;
-  }
-  return url;
-}
-function _stripIndexHtml(url) {
-  return url.replace(/\/index.html$/, "");
-}
-function _stripOrigin(baseHref) {
-  const isAbsoluteUrl2 = new RegExp("^(https?:)?//").test(baseHref);
-  if (isAbsoluteUrl2) {
-    const [, pathname] = baseHref.split(/\/\/[^\/]+/);
-    return pathname;
-  }
-  return baseHref;
-}
-var CURRENCIES_EN = {
-  "ADP": [void 0, void 0, 0],
-  "AFN": [void 0, "؋", 0],
-  "ALL": [void 0, void 0, 0],
-  "AMD": [void 0, "֏", 2],
-  "AOA": [void 0, "Kz"],
-  "ARS": [void 0, "$"],
-  "AUD": ["A$", "$"],
-  "AZN": [void 0, "₼"],
-  "BAM": [void 0, "KM"],
-  "BBD": [void 0, "$"],
-  "BDT": [void 0, "৳"],
-  "BHD": [void 0, void 0, 3],
-  "BIF": [void 0, void 0, 0],
-  "BMD": [void 0, "$"],
-  "BND": [void 0, "$"],
-  "BOB": [void 0, "Bs"],
-  "BRL": ["R$"],
-  "BSD": [void 0, "$"],
-  "BWP": [void 0, "P"],
-  "BYN": [void 0, void 0, 2],
-  "BYR": [void 0, void 0, 0],
-  "BZD": [void 0, "$"],
-  "CAD": ["CA$", "$", 2],
-  "CHF": [void 0, void 0, 2],
-  "CLF": [void 0, void 0, 4],
-  "CLP": [void 0, "$", 0],
-  "CNY": ["CN¥", "¥"],
-  "COP": [void 0, "$", 2],
-  "CRC": [void 0, "₡", 2],
-  "CUC": [void 0, "$"],
-  "CUP": [void 0, "$"],
-  "CZK": [void 0, "Kč", 2],
-  "DJF": [void 0, void 0, 0],
-  "DKK": [void 0, "kr", 2],
-  "DOP": [void 0, "$"],
-  "EGP": [void 0, "E£"],
-  "ESP": [void 0, "₧", 0],
-  "EUR": ["€"],
-  "FJD": [void 0, "$"],
-  "FKP": [void 0, "£"],
-  "GBP": ["£"],
-  "GEL": [void 0, "₾"],
-  "GHS": [void 0, "GH₵"],
-  "GIP": [void 0, "£"],
-  "GNF": [void 0, "FG", 0],
-  "GTQ": [void 0, "Q"],
-  "GYD": [void 0, "$", 2],
-  "HKD": ["HK$", "$"],
-  "HNL": [void 0, "L"],
-  "HRK": [void 0, "kn"],
-  "HUF": [void 0, "Ft", 2],
-  "IDR": [void 0, "Rp", 2],
-  "ILS": ["₪"],
-  "INR": ["₹"],
-  "IQD": [void 0, void 0, 0],
-  "IRR": [void 0, void 0, 0],
-  "ISK": [void 0, "kr", 0],
-  "ITL": [void 0, void 0, 0],
-  "JMD": [void 0, "$"],
-  "JOD": [void 0, void 0, 3],
-  "JPY": ["¥", void 0, 0],
-  "KHR": [void 0, "៛"],
-  "KMF": [void 0, "CF", 0],
-  "KPW": [void 0, "₩", 0],
-  "KRW": ["₩", void 0, 0],
-  "KWD": [void 0, void 0, 3],
-  "KYD": [void 0, "$"],
-  "KZT": [void 0, "₸"],
-  "LAK": [void 0, "₭", 0],
-  "LBP": [void 0, "L£", 0],
-  "LKR": [void 0, "Rs"],
-  "LRD": [void 0, "$"],
-  "LTL": [void 0, "Lt"],
-  "LUF": [void 0, void 0, 0],
-  "LVL": [void 0, "Ls"],
-  "LYD": [void 0, void 0, 3],
-  "MGA": [void 0, "Ar", 0],
-  "MGF": [void 0, void 0, 0],
-  "MMK": [void 0, "K", 0],
-  "MNT": [void 0, "₮", 2],
-  "MRO": [void 0, void 0, 0],
-  "MUR": [void 0, "Rs", 2],
-  "MXN": ["MX$", "$"],
-  "MYR": [void 0, "RM"],
-  "NAD": [void 0, "$"],
-  "NGN": [void 0, "₦"],
-  "NIO": [void 0, "C$"],
-  "NOK": [void 0, "kr", 2],
-  "NPR": [void 0, "Rs"],
-  "NZD": ["NZ$", "$"],
-  "OMR": [void 0, void 0, 3],
-  "PHP": ["₱"],
-  "PKR": [void 0, "Rs", 2],
-  "PLN": [void 0, "zł"],
-  "PYG": [void 0, "₲", 0],
-  "RON": [void 0, "lei"],
-  "RSD": [void 0, void 0, 0],
-  "RUB": [void 0, "₽"],
-  "RWF": [void 0, "RF", 0],
-  "SBD": [void 0, "$"],
-  "SEK": [void 0, "kr", 2],
-  "SGD": [void 0, "$"],
-  "SHP": [void 0, "£"],
-  "SLE": [void 0, void 0, 2],
-  "SLL": [void 0, void 0, 0],
-  "SOS": [void 0, void 0, 0],
-  "SRD": [void 0, "$"],
-  "SSP": [void 0, "£"],
-  "STD": [void 0, void 0, 0],
-  "STN": [void 0, "Db"],
-  "SYP": [void 0, "£", 0],
-  "THB": [void 0, "฿"],
-  "TMM": [void 0, void 0, 0],
-  "TND": [void 0, void 0, 3],
-  "TOP": [void 0, "T$"],
-  "TRL": [void 0, void 0, 0],
-  "TRY": [void 0, "₺"],
-  "TTD": [void 0, "$"],
-  "TWD": ["NT$", "$", 2],
-  "TZS": [void 0, void 0, 2],
-  "UAH": [void 0, "₴"],
-  "UGX": [void 0, void 0, 0],
-  "USD": ["$"],
-  "UYI": [void 0, void 0, 0],
-  "UYU": [void 0, "$"],
-  "UYW": [void 0, void 0, 4],
-  "UZS": [void 0, void 0, 2],
-  "VEF": [void 0, "Bs", 2],
-  "VND": ["₫", void 0, 0],
-  "VUV": [void 0, void 0, 0],
-  "XAF": ["FCFA", void 0, 0],
-  "XCD": ["EC$", "$"],
-  "XOF": ["F CFA", void 0, 0],
-  "XPF": ["CFPF", void 0, 0],
-  "XXX": ["¤"],
-  "YER": [void 0, void 0, 0],
-  "ZAR": [void 0, "R"],
-  "ZMK": [void 0, void 0, 0],
-  "ZMW": [void 0, "ZK"],
-  "ZWD": [void 0, void 0, 0]
-};
-var NumberFormatStyle;
-(function(NumberFormatStyle2) {
-  NumberFormatStyle2[NumberFormatStyle2["Decimal"] = 0] = "Decimal";
-  NumberFormatStyle2[NumberFormatStyle2["Percent"] = 1] = "Percent";
-  NumberFormatStyle2[NumberFormatStyle2["Currency"] = 2] = "Currency";
-  NumberFormatStyle2[NumberFormatStyle2["Scientific"] = 3] = "Scientific";
-})(NumberFormatStyle || (NumberFormatStyle = {}));
-var Plural;
-(function(Plural2) {
-  Plural2[Plural2["Zero"] = 0] = "Zero";
-  Plural2[Plural2["One"] = 1] = "One";
-  Plural2[Plural2["Two"] = 2] = "Two";
-  Plural2[Plural2["Few"] = 3] = "Few";
-  Plural2[Plural2["Many"] = 4] = "Many";
-  Plural2[Plural2["Other"] = 5] = "Other";
-})(Plural || (Plural = {}));
-var FormStyle;
-(function(FormStyle2) {
-  FormStyle2[FormStyle2["Format"] = 0] = "Format";
-  FormStyle2[FormStyle2["Standalone"] = 1] = "Standalone";
-})(FormStyle || (FormStyle = {}));
-var TranslationWidth;
-(function(TranslationWidth2) {
-  TranslationWidth2[TranslationWidth2["Narrow"] = 0] = "Narrow";
-  TranslationWidth2[TranslationWidth2["Abbreviated"] = 1] = "Abbreviated";
-  TranslationWidth2[TranslationWidth2["Wide"] = 2] = "Wide";
-  TranslationWidth2[TranslationWidth2["Short"] = 3] = "Short";
-})(TranslationWidth || (TranslationWidth = {}));
-var FormatWidth;
-(function(FormatWidth2) {
-  FormatWidth2[FormatWidth2["Short"] = 0] = "Short";
-  FormatWidth2[FormatWidth2["Medium"] = 1] = "Medium";
-  FormatWidth2[FormatWidth2["Long"] = 2] = "Long";
-  FormatWidth2[FormatWidth2["Full"] = 3] = "Full";
-})(FormatWidth || (FormatWidth = {}));
-var NumberSymbol = {
-  /**
-   * Decimal separator.
-   * For `en-US`, the dot character.
-   * Example: 2,345`.`67
-   */
-  Decimal: 0,
-  /**
-   * Grouping separator, typically for thousands.
-   * For `en-US`, the comma character.
-   * Example: 2`,`345.67
-   */
-  Group: 1,
-  /**
-   * List-item separator.
-   * Example: "one, two, and three"
-   */
-  List: 2,
-  /**
-   * Sign for percentage (out of 100).
-   * Example: 23.4%
-   */
-  PercentSign: 3,
-  /**
-   * Sign for positive numbers.
-   * Example: +23
-   */
-  PlusSign: 4,
-  /**
-   * Sign for negative numbers.
-   * Example: -23
-   */
-  MinusSign: 5,
-  /**
-   * Computer notation for exponential value (n times a power of 10).
-   * Example: 1.2E3
-   */
-  Exponential: 6,
-  /**
-   * Human-readable format of exponential.
-   * Example: 1.2x103
-   */
-  SuperscriptingExponent: 7,
-  /**
-   * Sign for permille (out of 1000).
-   * Example: 23.4‰
-   */
-  PerMille: 8,
-  /**
-   * Infinity, can be used with plus and minus.
-   * Example: ∞, +∞, -∞
-   */
-  Infinity: 9,
-  /**
-   * Not a number.
-   * Example: NaN
-   */
-  NaN: 10,
-  /**
-   * Symbol used between time units.
-   * Example: 10:52
-   */
-  TimeSeparator: 11,
-  /**
-   * Decimal separator for currency values (fallback to `Decimal`).
-   * Example: $2,345.67
-   */
-  CurrencyDecimal: 12,
-  /**
-   * Group separator for currency values (fallback to `Group`).
-   * Example: $2,345.67
-   */
-  CurrencyGroup: 13
-};
-var WeekDay;
-(function(WeekDay2) {
-  WeekDay2[WeekDay2["Sunday"] = 0] = "Sunday";
-  WeekDay2[WeekDay2["Monday"] = 1] = "Monday";
-  WeekDay2[WeekDay2["Tuesday"] = 2] = "Tuesday";
-  WeekDay2[WeekDay2["Wednesday"] = 3] = "Wednesday";
-  WeekDay2[WeekDay2["Thursday"] = 4] = "Thursday";
-  WeekDay2[WeekDay2["Friday"] = 5] = "Friday";
-  WeekDay2[WeekDay2["Saturday"] = 6] = "Saturday";
-})(WeekDay || (WeekDay = {}));
-function getLocaleId(locale) {
-  return findLocaleData(locale)[LocaleDataIndex.LocaleId];
-}
-function getLocaleDayPeriods(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const amPmData = [data[LocaleDataIndex.DayPeriodsFormat], data[LocaleDataIndex.DayPeriodsStandalone]];
-  const amPm = getLastDefinedValue(amPmData, formStyle);
-  return getLastDefinedValue(amPm, width);
-}
-function getLocaleDayNames(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const daysData = [data[LocaleDataIndex.DaysFormat], data[LocaleDataIndex.DaysStandalone]];
-  const days = getLastDefinedValue(daysData, formStyle);
-  return getLastDefinedValue(days, width);
-}
-function getLocaleMonthNames(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  const monthsData = [data[LocaleDataIndex.MonthsFormat], data[LocaleDataIndex.MonthsStandalone]];
-  const months = getLastDefinedValue(monthsData, formStyle);
-  return getLastDefinedValue(months, width);
-}
-function getLocaleEraNames(locale, width) {
-  const data = findLocaleData(locale);
-  const erasData = data[LocaleDataIndex.Eras];
-  return getLastDefinedValue(erasData, width);
-}
-function getLocaleDateFormat(locale, width) {
-  const data = findLocaleData(locale);
-  return getLastDefinedValue(data[LocaleDataIndex.DateFormat], width);
-}
-function getLocaleTimeFormat(locale, width) {
-  const data = findLocaleData(locale);
-  return getLastDefinedValue(data[LocaleDataIndex.TimeFormat], width);
-}
-function getLocaleDateTimeFormat(locale, width) {
-  const data = findLocaleData(locale);
-  const dateTimeFormatData = data[LocaleDataIndex.DateTimeFormat];
-  return getLastDefinedValue(dateTimeFormatData, width);
-}
-function getLocaleNumberSymbol(locale, symbol) {
-  const data = findLocaleData(locale);
-  const res = data[LocaleDataIndex.NumberSymbols][symbol];
-  if (typeof res === "undefined") {
-    if (symbol === NumberSymbol.CurrencyDecimal) {
-      return data[LocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];
-    } else if (symbol === NumberSymbol.CurrencyGroup) {
-      return data[LocaleDataIndex.NumberSymbols][NumberSymbol.Group];
-    }
-  }
-  return res;
-}
-function getLocaleNumberFormat(locale, type) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.NumberFormats][type];
-}
-function getLocaleCurrencies(locale) {
-  const data = findLocaleData(locale);
-  return data[LocaleDataIndex.Currencies];
-}
-var getLocalePluralCase2 = getLocalePluralCase;
-function checkFullData(data) {
-  if (!data[LocaleDataIndex.ExtraData]) {
-    throw new Error(`Missing extra locale data for the locale "${data[LocaleDataIndex.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`);
-  }
-}
-function getLocaleExtraDayPeriodRules(locale) {
-  const data = findLocaleData(locale);
-  checkFullData(data);
-  const rules = data[LocaleDataIndex.ExtraData][
-    2
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodsRules */
-  ] || [];
-  return rules.map((rule) => {
-    if (typeof rule === "string") {
-      return extractTime(rule);
-    }
-    return [extractTime(rule[0]), extractTime(rule[1])];
-  });
-}
-function getLocaleExtraDayPeriods(locale, formStyle, width) {
-  const data = findLocaleData(locale);
-  checkFullData(data);
-  const dayPeriodsData = [data[LocaleDataIndex.ExtraData][
-    0
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodFormats */
-  ], data[LocaleDataIndex.ExtraData][
-    1
-    /* ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone */
-  ]];
-  const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
-  return getLastDefinedValue(dayPeriods, width) || [];
-}
-function getLastDefinedValue(data, index) {
-  for (let i = index; i > -1; i--) {
-    if (typeof data[i] !== "undefined") {
-      return data[i];
-    }
-  }
-  throw new Error("Locale data API: locale data undefined");
-}
-function extractTime(time) {
-  const [h, m] = time.split(":");
-  return {
-    hours: +h,
-    minutes: +m
-  };
-}
-function getCurrencySymbol(code, format, locale = "en") {
-  const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
-  const symbolNarrow = currency[
-    1
-    /* ɵCurrencyIndex.SymbolNarrow */
-  ];
-  if (format === "narrow" && typeof symbolNarrow === "string") {
-    return symbolNarrow;
-  }
-  return currency[
-    0
-    /* ɵCurrencyIndex.Symbol */
-  ] || code;
-}
-var DEFAULT_NB_OF_CURRENCY_DIGITS = 2;
-function getNumberOfCurrencyDigits(code) {
-  let digits;
-  const currency = CURRENCIES_EN[code];
-  if (currency) {
-    digits = currency[
-      2
-      /* ɵCurrencyIndex.NbOfDigits */
-    ];
-  }
-  return typeof digits === "number" ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
-}
-var ISO8601_DATE_REGEX = /^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
-var NAMED_FORMATS = {};
-var DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
-var ZoneWidth;
-(function(ZoneWidth2) {
-  ZoneWidth2[ZoneWidth2["Short"] = 0] = "Short";
-  ZoneWidth2[ZoneWidth2["ShortGMT"] = 1] = "ShortGMT";
-  ZoneWidth2[ZoneWidth2["Long"] = 2] = "Long";
-  ZoneWidth2[ZoneWidth2["Extended"] = 3] = "Extended";
-})(ZoneWidth || (ZoneWidth = {}));
-var DateType;
-(function(DateType2) {
-  DateType2[DateType2["FullYear"] = 0] = "FullYear";
-  DateType2[DateType2["Month"] = 1] = "Month";
-  DateType2[DateType2["Date"] = 2] = "Date";
-  DateType2[DateType2["Hours"] = 3] = "Hours";
-  DateType2[DateType2["Minutes"] = 4] = "Minutes";
-  DateType2[DateType2["Seconds"] = 5] = "Seconds";
-  DateType2[DateType2["FractionalSeconds"] = 6] = "FractionalSeconds";
-  DateType2[DateType2["Day"] = 7] = "Day";
-})(DateType || (DateType = {}));
-var TranslationType;
-(function(TranslationType2) {
-  TranslationType2[TranslationType2["DayPeriods"] = 0] = "DayPeriods";
-  TranslationType2[TranslationType2["Days"] = 1] = "Days";
-  TranslationType2[TranslationType2["Months"] = 2] = "Months";
-  TranslationType2[TranslationType2["Eras"] = 3] = "Eras";
-})(TranslationType || (TranslationType = {}));
-function formatDate(value, format, locale, timezone) {
-  let date = toDate(value);
-  const namedFormat = getNamedFormat(locale, format);
-  format = namedFormat || format;
-  let parts = [];
-  let match;
-  while (format) {
-    match = DATE_FORMATS_SPLIT.exec(format);
-    if (match) {
-      parts = parts.concat(match.slice(1));
-      const part = parts.pop();
-      if (!part) {
-        break;
-      }
-      format = part;
-    } else {
-      parts.push(format);
-      break;
-    }
-  }
-  let dateTimezoneOffset = date.getTimezoneOffset();
-  if (timezone) {
-    dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
-    date = convertTimezoneToLocal(date, timezone, true);
-  }
-  let text = "";
-  parts.forEach((value2) => {
-    const dateFormatter = getDateFormatter(value2);
-    text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value2 === "''" ? "'" : value2.replace(/(^'|'$)/g, "").replace(/''/g, "'");
-  });
-  return text;
-}
-function createDate(year, month, date) {
-  const newDate = /* @__PURE__ */ new Date(0);
-  newDate.setFullYear(year, month, date);
-  newDate.setHours(0, 0, 0);
-  return newDate;
-}
-function getNamedFormat(locale, format) {
-  const localeId = getLocaleId(locale);
-  NAMED_FORMATS[localeId] ??= {};
-  if (NAMED_FORMATS[localeId][format]) {
-    return NAMED_FORMATS[localeId][format];
-  }
-  let formatValue = "";
-  switch (format) {
-    case "shortDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
-      break;
-    case "mediumDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
-      break;
-    case "longDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
-      break;
-    case "fullDate":
-      formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
-      break;
-    case "shortTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
-      break;
-    case "mediumTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
-      break;
-    case "longTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
-      break;
-    case "fullTime":
-      formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
-      break;
-    case "short":
-      const shortTime = getNamedFormat(locale, "shortTime");
-      const shortDate = getNamedFormat(locale, "shortDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
-      break;
-    case "medium":
-      const mediumTime = getNamedFormat(locale, "mediumTime");
-      const mediumDate = getNamedFormat(locale, "mediumDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
-      break;
-    case "long":
-      const longTime = getNamedFormat(locale, "longTime");
-      const longDate = getNamedFormat(locale, "longDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
-      break;
-    case "full":
-      const fullTime = getNamedFormat(locale, "fullTime");
-      const fullDate = getNamedFormat(locale, "fullDate");
-      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
-      break;
-  }
-  if (formatValue) {
-    NAMED_FORMATS[localeId][format] = formatValue;
-  }
-  return formatValue;
-}
-function formatDateTime(str, opt_values) {
-  if (opt_values) {
-    str = str.replace(/\{([^}]+)}/g, function(match, key) {
-      return opt_values != null && key in opt_values ? opt_values[key] : match;
-    });
-  }
-  return str;
-}
-function padNumber(num, digits, minusSign = "-", trim, negWrap) {
-  let neg = "";
-  if (num < 0 || negWrap && num <= 0) {
-    if (negWrap) {
-      num = -num + 1;
-    } else {
-      num = -num;
-      neg = minusSign;
-    }
-  }
-  let strNum = String(num);
-  while (strNum.length < digits) {
-    strNum = "0" + strNum;
-  }
-  if (trim) {
-    strNum = strNum.slice(strNum.length - digits);
-  }
-  return neg + strNum;
-}
-function formatFractionalSeconds(milliseconds, digits) {
-  const strMs = padNumber(milliseconds, 3);
-  return strMs.substring(0, digits);
-}
-function dateGetter(name, size, offset = 0, trim = false, negWrap = false) {
-  return function(date, locale) {
-    let part = getDatePart(name, date);
-    if (offset > 0 || part > -offset) {
-      part += offset;
-    }
-    if (name === DateType.Hours) {
-      if (part === 0 && offset === -12) {
-        part = 12;
-      }
-    } else if (name === DateType.FractionalSeconds) {
-      return formatFractionalSeconds(part, size);
-    }
-    const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
-    return padNumber(part, size, localeMinus, trim, negWrap);
-  };
-}
-function getDatePart(part, date) {
-  switch (part) {
-    case DateType.FullYear:
-      return date.getFullYear();
-    case DateType.Month:
-      return date.getMonth();
-    case DateType.Date:
-      return date.getDate();
-    case DateType.Hours:
-      return date.getHours();
-    case DateType.Minutes:
-      return date.getMinutes();
-    case DateType.Seconds:
-      return date.getSeconds();
-    case DateType.FractionalSeconds:
-      return date.getMilliseconds();
-    case DateType.Day:
-      return date.getDay();
-    default:
-      throw new Error(`Unknown DateType value "${part}".`);
-  }
-}
-function dateStrGetter(name, width, form = FormStyle.Format, extended = false) {
-  return function(date, locale) {
-    return getDateTranslation(date, locale, name, width, form, extended);
-  };
-}
-function getDateTranslation(date, locale, name, width, form, extended) {
-  switch (name) {
-    case TranslationType.Months:
-      return getLocaleMonthNames(locale, form, width)[date.getMonth()];
-    case TranslationType.Days:
-      return getLocaleDayNames(locale, form, width)[date.getDay()];
-    case TranslationType.DayPeriods:
-      const currentHours = date.getHours();
-      const currentMinutes = date.getMinutes();
-      if (extended) {
-        const rules = getLocaleExtraDayPeriodRules(locale);
-        const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);
-        const index = rules.findIndex((rule) => {
-          if (Array.isArray(rule)) {
-            const [from2, to] = rule;
-            const afterFrom = currentHours >= from2.hours && currentMinutes >= from2.minutes;
-            const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;
-            if (from2.hours < to.hours) {
-              if (afterFrom && beforeTo) {
-                return true;
-              }
-            } else if (afterFrom || beforeTo) {
-              return true;
-            }
-          } else {
-            if (rule.hours === currentHours && rule.minutes === currentMinutes) {
-              return true;
-            }
-          }
-          return false;
-        });
-        if (index !== -1) {
-          return dayPeriods[index];
-        }
-      }
-      return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];
-    case TranslationType.Eras:
-      return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];
-    default:
-      const unexpected = name;
-      throw new Error(`unexpected translation type ${unexpected}`);
-  }
-}
-function timeZoneGetter(width) {
-  return function(date, locale, offset) {
-    const zone = -1 * offset;
-    const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
-    const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);
-    switch (width) {
-      case ZoneWidth.Short:
-        return (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);
-      case ZoneWidth.ShortGMT:
-        return "GMT" + (zone >= 0 ? "+" : "") + padNumber(hours, 1, minusSign);
-      case ZoneWidth.Long:
-        return "GMT" + (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + ":" + padNumber(Math.abs(zone % 60), 2, minusSign);
-      case ZoneWidth.Extended:
-        if (offset === 0) {
-          return "Z";
-        } else {
-          return (zone >= 0 ? "+" : "") + padNumber(hours, 2, minusSign) + ":" + padNumber(Math.abs(zone % 60), 2, minusSign);
-        }
-      default:
-        throw new Error(`Unknown zone width "${width}"`);
-    }
-  };
-}
-var JANUARY = 0;
-var THURSDAY = 4;
-function getFirstThursdayOfYear(year) {
-  const firstDayOfYear = createDate(year, JANUARY, 1).getDay();
-  return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
-}
-function getThursdayThisIsoWeek(datetime) {
-  const currentDay = datetime.getDay();
-  const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;
-  return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);
-}
-function weekGetter(size, monthBased = false) {
-  return function(date, locale) {
-    let result;
-    if (monthBased) {
-      const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
-      const today = date.getDate();
-      result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
-    } else {
-      const thisThurs = getThursdayThisIsoWeek(date);
-      const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());
-      const diff = thisThurs.getTime() - firstThurs.getTime();
-      result = 1 + Math.round(diff / 6048e5);
-    }
-    return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  };
-}
-function weekNumberingYearGetter(size, trim = false) {
-  return function(date, locale) {
-    const thisThurs = getThursdayThisIsoWeek(date);
-    const weekNumberingYear = thisThurs.getFullYear();
-    return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);
-  };
-}
-var DATE_FORMATS = {};
-function getDateFormatter(format) {
-  if (DATE_FORMATS[format]) {
-    return DATE_FORMATS[format];
-  }
-  let formatter;
-  switch (format) {
-    case "G":
-    case "GG":
-    case "GGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);
-      break;
-    case "GGGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);
-      break;
-    case "GGGGG":
-      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);
-      break;
-    case "y":
-      formatter = dateGetter(DateType.FullYear, 1, 0, false, true);
-      break;
-    case "yy":
-      formatter = dateGetter(DateType.FullYear, 2, 0, true, true);
-      break;
-    case "yyy":
-      formatter = dateGetter(DateType.FullYear, 3, 0, false, true);
-      break;
-    case "yyyy":
-      formatter = dateGetter(DateType.FullYear, 4, 0, false, true);
-      break;
-    case "Y":
-      formatter = weekNumberingYearGetter(1);
-      break;
-    case "YY":
-      formatter = weekNumberingYearGetter(2, true);
-      break;
-    case "YYY":
-      formatter = weekNumberingYearGetter(3);
-      break;
-    case "YYYY":
-      formatter = weekNumberingYearGetter(4);
-      break;
-    case "M":
-    case "L":
-      formatter = dateGetter(DateType.Month, 1, 1);
-      break;
-    case "MM":
-    case "LL":
-      formatter = dateGetter(DateType.Month, 2, 1);
-      break;
-    case "MMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);
-      break;
-    case "MMMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);
-      break;
-    case "MMMMM":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);
-      break;
-    case "LLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);
-      break;
-    case "LLLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);
-      break;
-    case "LLLLL":
-      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);
-      break;
-    case "w":
-      formatter = weekGetter(1);
-      break;
-    case "ww":
-      formatter = weekGetter(2);
-      break;
-    case "W":
-      formatter = weekGetter(1, true);
-      break;
-    case "d":
-      formatter = dateGetter(DateType.Date, 1);
-      break;
-    case "dd":
-      formatter = dateGetter(DateType.Date, 2);
-      break;
-    case "c":
-    case "cc":
-      formatter = dateGetter(DateType.Day, 1);
-      break;
-    case "ccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone);
-      break;
-    case "cccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone);
-      break;
-    case "ccccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone);
-      break;
-    case "cccccc":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone);
-      break;
-    case "E":
-    case "EE":
-    case "EEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);
-      break;
-    case "EEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);
-      break;
-    case "EEEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);
-      break;
-    case "EEEEEE":
-      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);
-      break;
-    case "a":
-    case "aa":
-    case "aaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);
-      break;
-    case "aaaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);
-      break;
-    case "aaaaa":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);
-      break;
-    case "b":
-    case "bb":
-    case "bbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
-      break;
-    case "bbbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);
-      break;
-    case "bbbbb":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);
-      break;
-    case "B":
-    case "BB":
-    case "BBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);
-      break;
-    case "BBBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);
-      break;
-    case "BBBBB":
-      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);
-      break;
-    case "h":
-      formatter = dateGetter(DateType.Hours, 1, -12);
-      break;
-    case "hh":
-      formatter = dateGetter(DateType.Hours, 2, -12);
-      break;
-    case "H":
-      formatter = dateGetter(DateType.Hours, 1);
-      break;
-    case "HH":
-      formatter = dateGetter(DateType.Hours, 2);
-      break;
-    case "m":
-      formatter = dateGetter(DateType.Minutes, 1);
-      break;
-    case "mm":
-      formatter = dateGetter(DateType.Minutes, 2);
-      break;
-    case "s":
-      formatter = dateGetter(DateType.Seconds, 1);
-      break;
-    case "ss":
-      formatter = dateGetter(DateType.Seconds, 2);
-      break;
-    case "S":
-      formatter = dateGetter(DateType.FractionalSeconds, 1);
-      break;
-    case "SS":
-      formatter = dateGetter(DateType.FractionalSeconds, 2);
-      break;
-    case "SSS":
-      formatter = dateGetter(DateType.FractionalSeconds, 3);
-      break;
-    case "Z":
-    case "ZZ":
-    case "ZZZ":
-      formatter = timeZoneGetter(ZoneWidth.Short);
-      break;
-    case "ZZZZZ":
-      formatter = timeZoneGetter(ZoneWidth.Extended);
-      break;
-    case "O":
-    case "OO":
-    case "OOO":
-    case "z":
-    case "zz":
-    case "zzz":
-      formatter = timeZoneGetter(ZoneWidth.ShortGMT);
-      break;
-    case "OOOO":
-    case "ZZZZ":
-    case "zzzz":
-      formatter = timeZoneGetter(ZoneWidth.Long);
-      break;
-    default:
-      return null;
-  }
-  DATE_FORMATS[format] = formatter;
-  return formatter;
-}
-function timezoneToOffset(timezone, fallback) {
-  timezone = timezone.replace(/:/g, "");
-  const requestedTimezoneOffset = Date.parse("Jan 01, 1970 00:00:00 " + timezone) / 6e4;
-  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
-}
-function addDateMinutes(date, minutes) {
-  date = new Date(date.getTime());
-  date.setMinutes(date.getMinutes() + minutes);
-  return date;
-}
-function convertTimezoneToLocal(date, timezone, reverse) {
-  const reverseValue = reverse ? -1 : 1;
-  const dateTimezoneOffset = date.getTimezoneOffset();
-  const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
-  return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
-}
-function toDate(value) {
-  if (isDate(value)) {
-    return value;
-  }
-  if (typeof value === "number" && !isNaN(value)) {
-    return new Date(value);
-  }
-  if (typeof value === "string") {
-    value = value.trim();
-    if (/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(value)) {
-      const [y, m = 1, d = 1] = value.split("-").map((val) => +val);
-      return createDate(y, m - 1, d);
-    }
-    const parsedNb = parseFloat(value);
-    if (!isNaN(value - parsedNb)) {
-      return new Date(parsedNb);
-    }
-    let match;
-    if (match = value.match(ISO8601_DATE_REGEX)) {
-      return isoStringToDate(match);
-    }
-  }
-  const date = new Date(value);
-  if (!isDate(date)) {
-    throw new Error(`Unable to convert "${value}" into a date`);
-  }
-  return date;
-}
-function isoStringToDate(match) {
-  const date = /* @__PURE__ */ new Date(0);
-  let tzHour = 0;
-  let tzMin = 0;
-  const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
-  const timeSetter = match[8] ? date.setUTCHours : date.setHours;
-  if (match[9]) {
-    tzHour = Number(match[9] + match[10]);
-    tzMin = Number(match[9] + match[11]);
-  }
-  dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));
-  const h = Number(match[4] || 0) - tzHour;
-  const m = Number(match[5] || 0) - tzMin;
-  const s = Number(match[6] || 0);
-  const ms = Math.floor(parseFloat("0." + (match[7] || 0)) * 1e3);
-  timeSetter.call(date, h, m, s, ms);
-  return date;
-}
-function isDate(value) {
-  return value instanceof Date && !isNaN(value.valueOf());
-}
-var NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
-var MAX_DIGITS = 22;
-var DECIMAL_SEP = ".";
-var ZERO_CHAR = "0";
-var PATTERN_SEP = ";";
-var GROUP_SEP = ",";
-var DIGIT_CHAR = "#";
-var CURRENCY_CHAR = "¤";
-var PERCENT_CHAR = "%";
-function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {
-  let formattedText = "";
-  let isZero = false;
-  if (!isFinite(value)) {
-    formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
-  } else {
-    let parsedNumber = parseNumber(value);
-    if (isPercent) {
-      parsedNumber = toPercent(parsedNumber);
-    }
-    let minInt = pattern.minInt;
-    let minFraction = pattern.minFrac;
-    let maxFraction = pattern.maxFrac;
-    if (digitsInfo) {
-      const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
-      if (parts === null) {
-        throw new Error(`${digitsInfo} is not a valid digit info`);
-      }
-      const minIntPart = parts[1];
-      const minFractionPart = parts[3];
-      const maxFractionPart = parts[5];
-      if (minIntPart != null) {
-        minInt = parseIntAutoRadix(minIntPart);
-      }
-      if (minFractionPart != null) {
-        minFraction = parseIntAutoRadix(minFractionPart);
-      }
-      if (maxFractionPart != null) {
-        maxFraction = parseIntAutoRadix(maxFractionPart);
-      } else if (minFractionPart != null && minFraction > maxFraction) {
-        maxFraction = minFraction;
-      }
-    }
-    roundNumber(parsedNumber, minFraction, maxFraction);
-    let digits = parsedNumber.digits;
-    let integerLen = parsedNumber.integerLen;
-    const exponent = parsedNumber.exponent;
-    let decimals = [];
-    isZero = digits.every((d) => !d);
-    for (; integerLen < minInt; integerLen++) {
-      digits.unshift(0);
-    }
-    for (; integerLen < 0; integerLen++) {
-      digits.unshift(0);
-    }
-    if (integerLen > 0) {
-      decimals = digits.splice(integerLen, digits.length);
-    } else {
-      decimals = digits;
-      digits = [0];
-    }
-    const groups = [];
-    if (digits.length >= pattern.lgSize) {
-      groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(""));
-    }
-    while (digits.length > pattern.gSize) {
-      groups.unshift(digits.splice(-pattern.gSize, digits.length).join(""));
-    }
-    if (digits.length) {
-      groups.unshift(digits.join(""));
-    }
-    formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));
-    if (decimals.length) {
-      formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join("");
-    }
-    if (exponent) {
-      formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + "+" + exponent;
-    }
-  }
-  if (value < 0 && !isZero) {
-    formattedText = pattern.negPre + formattedText + pattern.negSuf;
-  } else {
-    formattedText = pattern.posPre + formattedText + pattern.posSuf;
-  }
-  return formattedText;
-}
-function formatCurrency(value, locale, currency, currencyCode, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);
-  pattern.maxFrac = pattern.minFrac;
-  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);
-  return res.replace(CURRENCY_CHAR, currency).replace(CURRENCY_CHAR, "").trim();
-}
-function formatPercent(value, locale, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);
-  return res.replace(new RegExp(PERCENT_CHAR, "g"), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
-}
-function formatNumber(value, locale, digitsInfo) {
-  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);
-  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
-  return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);
-}
-function parseNumberFormat(format, minusSign = "-") {
-  const p = {
-    minInt: 1,
-    minFrac: 0,
-    maxFrac: 0,
-    posPre: "",
-    posSuf: "",
-    negPre: "",
-    negSuf: "",
-    gSize: 0,
-    lgSize: 0
-  };
-  const patternParts = format.split(PATTERN_SEP);
-  const positive = patternParts[0];
-  const negative = patternParts[1];
-  const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)], integer = positiveParts[0], fraction = positiveParts[1] || "";
-  p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));
-  for (let i = 0; i < fraction.length; i++) {
-    const ch = fraction.charAt(i);
-    if (ch === ZERO_CHAR) {
-      p.minFrac = p.maxFrac = i + 1;
-    } else if (ch === DIGIT_CHAR) {
-      p.maxFrac = i + 1;
-    } else {
-      p.posSuf += ch;
-    }
-  }
-  const groups = integer.split(GROUP_SEP);
-  p.gSize = groups[1] ? groups[1].length : 0;
-  p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;
-  if (negative) {
-    const trunkLen = positive.length - p.posPre.length - p.posSuf.length, pos = negative.indexOf(DIGIT_CHAR);
-    p.negPre = negative.substring(0, pos).replace(/'/g, "");
-    p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, "");
-  } else {
-    p.negPre = minusSign + p.posPre;
-    p.negSuf = p.posSuf;
-  }
-  return p;
-}
-function toPercent(parsedNumber) {
-  if (parsedNumber.digits[0] === 0) {
-    return parsedNumber;
-  }
-  const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;
-  if (parsedNumber.exponent) {
-    parsedNumber.exponent += 2;
-  } else {
-    if (fractionLen === 0) {
-      parsedNumber.digits.push(0, 0);
-    } else if (fractionLen === 1) {
-      parsedNumber.digits.push(0);
-    }
-    parsedNumber.integerLen += 2;
-  }
-  return parsedNumber;
-}
-function parseNumber(num) {
-  let numStr = Math.abs(num) + "";
-  let exponent = 0, digits, integerLen;
-  let i, j, zeros;
-  if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
-    numStr = numStr.replace(DECIMAL_SEP, "");
-  }
-  if ((i = numStr.search(/e/i)) > 0) {
-    if (integerLen < 0) integerLen = i;
-    integerLen += +numStr.slice(i + 1);
-    numStr = numStr.substring(0, i);
-  } else if (integerLen < 0) {
-    integerLen = numStr.length;
-  }
-  for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {
-  }
-  if (i === (zeros = numStr.length)) {
-    digits = [0];
-    integerLen = 1;
-  } else {
-    zeros--;
-    while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;
-    integerLen -= i;
-    digits = [];
-    for (j = 0; i <= zeros; i++, j++) {
-      digits[j] = Number(numStr.charAt(i));
-    }
-  }
-  if (integerLen > MAX_DIGITS) {
-    digits = digits.splice(0, MAX_DIGITS - 1);
-    exponent = integerLen - 1;
-    integerLen = 1;
-  }
-  return {
-    digits,
-    exponent,
-    integerLen
-  };
-}
-function roundNumber(parsedNumber, minFrac, maxFrac) {
-  if (minFrac > maxFrac) {
-    throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);
-  }
-  let digits = parsedNumber.digits;
-  let fractionLen = digits.length - parsedNumber.integerLen;
-  const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);
-  let roundAt = fractionSize + parsedNumber.integerLen;
-  let digit = digits[roundAt];
-  if (roundAt > 0) {
-    digits.splice(Math.max(parsedNumber.integerLen, roundAt));
-    for (let j = roundAt; j < digits.length; j++) {
-      digits[j] = 0;
-    }
-  } else {
-    fractionLen = Math.max(0, fractionLen);
-    parsedNumber.integerLen = 1;
-    digits.length = Math.max(1, roundAt = fractionSize + 1);
-    digits[0] = 0;
-    for (let i = 1; i < roundAt; i++) digits[i] = 0;
-  }
-  if (digit >= 5) {
-    if (roundAt - 1 < 0) {
-      for (let k = 0; k > roundAt; k--) {
-        digits.unshift(0);
-        parsedNumber.integerLen++;
-      }
-      digits.unshift(1);
-      parsedNumber.integerLen++;
-    } else {
-      digits[roundAt - 1]++;
-    }
-  }
-  for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);
-  let dropTrailingZeros = fractionSize !== 0;
-  const minLen = minFrac + parsedNumber.integerLen;
-  const carry = digits.reduceRight(function(carry2, d, i, digits2) {
-    d = d + carry2;
-    digits2[i] = d < 10 ? d : d - 10;
-    if (dropTrailingZeros) {
-      if (digits2[i] === 0 && i >= minLen) {
-        digits2.pop();
-      } else {
-        dropTrailingZeros = false;
-      }
-    }
-    return d >= 10 ? 1 : 0;
-  }, 0);
-  if (carry) {
-    digits.unshift(carry);
-    parsedNumber.integerLen++;
-  }
-}
-function parseIntAutoRadix(text) {
-  const result = parseInt(text);
-  if (isNaN(result)) {
-    throw new Error("Invalid integer literal when parsing " + text);
-  }
-  return result;
-}
-var NgLocalization = class _NgLocalization {
-  static ɵfac = function NgLocalization_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgLocalization)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgLocalization,
-    factory: function NgLocalization_Factory(__ngFactoryType__) {
-      let __ngConditionalFactory__ = null;
-      if (__ngFactoryType__) {
-        __ngConditionalFactory__ = new __ngFactoryType__();
-      } else {
-        __ngConditionalFactory__ = ((locale) => new NgLocaleLocalization(locale))(ɵɵinject(LOCALE_ID));
-      }
-      return __ngConditionalFactory__;
-    },
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgLocalization, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useFactory: (locale) => new NgLocaleLocalization(locale),
-      deps: [LOCALE_ID]
-    }]
-  }], null, null);
-})();
-function getPluralCategory(value, cases, ngLocalization, locale) {
-  let key = `=${value}`;
-  if (cases.indexOf(key) > -1) {
-    return key;
-  }
-  key = ngLocalization.getPluralCategory(value, locale);
-  if (cases.indexOf(key) > -1) {
-    return key;
-  }
-  if (cases.indexOf("other") > -1) {
-    return "other";
-  }
-  throw new Error(`No plural message found for value "${value}"`);
-}
-var NgLocaleLocalization = class _NgLocaleLocalization extends NgLocalization {
-  locale;
-  constructor(locale) {
-    super();
-    this.locale = locale;
-  }
-  getPluralCategory(value, locale) {
-    const plural = getLocalePluralCase2(locale || this.locale)(value);
-    switch (plural) {
-      case Plural.Zero:
-        return "zero";
-      case Plural.One:
-        return "one";
-      case Plural.Two:
-        return "two";
-      case Plural.Few:
-        return "few";
-      case Plural.Many:
-        return "many";
-      default:
-        return "other";
-    }
-  }
-  static ɵfac = function NgLocaleLocalization_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgLocaleLocalization)(ɵɵinject(LOCALE_ID));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _NgLocaleLocalization,
-    factory: _NgLocaleLocalization.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgLocaleLocalization, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-function parseCookieValue(cookieStr, name) {
-  name = encodeURIComponent(name);
-  for (const cookie of cookieStr.split(";")) {
-    const eqIndex = cookie.indexOf("=");
-    const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ""] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];
-    if (cookieName.trim() === name) {
-      return decodeURIComponent(cookieValue);
-    }
-  }
-  return null;
-}
-var WS_REGEXP = /\s+/;
-var EMPTY_ARRAY = [];
-var NgClass = class _NgClass {
-  _ngEl;
-  _renderer;
-  initialClasses = EMPTY_ARRAY;
-  rawClass;
-  stateMap = /* @__PURE__ */ new Map();
-  constructor(_ngEl, _renderer) {
-    this._ngEl = _ngEl;
-    this._renderer = _renderer;
-  }
-  set klass(value) {
-    this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;
-  }
-  set ngClass(value) {
-    this.rawClass = typeof value === "string" ? value.trim().split(WS_REGEXP) : value;
-  }
-  /*
-  The NgClass directive uses the custom change detection algorithm for its inputs. The custom
-  algorithm is necessary since inputs are represented as complex object or arrays that need to be
-  deeply-compared.
-     This algorithm is perf-sensitive since NgClass is used very frequently and its poor performance
-  might negatively impact runtime performance of the entire change detection cycle. The design of
-  this algorithm is making sure that:
-  - there is no unnecessary DOM manipulation (CSS classes are added / removed from the DOM only when
-  needed), even if references to bound objects change;
-  - there is no memory allocation if nothing changes (even relatively modest memory allocation
-  during the change detection cycle can result in GC pauses for some of the CD cycles).
-     The algorithm works by iterating over the set of bound classes, staring with [class] binding and
-  then going over [ngClass] binding. For each CSS class name:
-  - check if it was seen before (this information is tracked in the state map) and if its value
-  changed;
-  - mark it as "touched" - names that are not marked are not present in the latest set of binding
-  and we can remove such class name from the internal data structures;
-     After iteration over all the CSS class names we've got data structure with all the information
-  necessary to synchronize changes to the DOM - it is enough to iterate over the state map, flush
-  changes to the DOM and reset internal data structures so those are ready for the next change
-  detection cycle.
-   */
-  ngDoCheck() {
-    for (const klass of this.initialClasses) {
-      this._updateState(klass, true);
-    }
-    const rawClass = this.rawClass;
-    if (Array.isArray(rawClass) || rawClass instanceof Set) {
-      for (const klass of rawClass) {
-        this._updateState(klass, true);
-      }
-    } else if (rawClass != null) {
-      for (const klass of Object.keys(rawClass)) {
-        this._updateState(klass, Boolean(rawClass[klass]));
-      }
-    }
-    this._applyStateDiff();
-  }
-  _updateState(klass, nextEnabled) {
-    const state = this.stateMap.get(klass);
-    if (state !== void 0) {
-      if (state.enabled !== nextEnabled) {
-        state.changed = true;
-        state.enabled = nextEnabled;
-      }
-      state.touched = true;
-    } else {
-      this.stateMap.set(klass, {
-        enabled: nextEnabled,
-        changed: true,
-        touched: true
-      });
-    }
-  }
-  _applyStateDiff() {
-    for (const stateEntry of this.stateMap) {
-      const klass = stateEntry[0];
-      const state = stateEntry[1];
-      if (state.changed) {
-        this._toggleClass(klass, state.enabled);
-        state.changed = false;
-      } else if (!state.touched) {
-        if (state.enabled) {
-          this._toggleClass(klass, false);
-        }
-        this.stateMap.delete(klass);
-      }
-      state.touched = false;
-    }
-  }
-  _toggleClass(klass, enabled) {
-    if (ngDevMode) {
-      if (typeof klass !== "string") {
-        throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${stringify(klass)}`);
-      }
-    }
-    klass = klass.trim();
-    if (klass.length > 0) {
-      klass.split(WS_REGEXP).forEach((klass2) => {
-        if (enabled) {
-          this._renderer.addClass(this._ngEl.nativeElement, klass2);
-        } else {
-          this._renderer.removeClass(this._ngEl.nativeElement, klass2);
-        }
-      });
-    }
-  }
-  static ɵfac = function NgClass_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgClass)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgClass,
-    selectors: [["", "ngClass", ""]],
-    inputs: {
-      klass: [0, "class", "klass"],
-      ngClass: "ngClass"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgClass, [{
-    type: Directive,
-    args: [{
-      selector: "[ngClass]"
-    }]
-  }], () => [{
-    type: ElementRef
-  }, {
-    type: Renderer2
-  }], {
-    klass: [{
-      type: Input,
-      args: ["class"]
-    }],
-    ngClass: [{
-      type: Input,
-      args: ["ngClass"]
-    }]
-  });
-})();
-var NgComponentOutlet = class _NgComponentOutlet {
-  _viewContainerRef;
-  ngComponentOutlet = null;
-  ngComponentOutletInputs;
-  ngComponentOutletInjector;
-  ngComponentOutletContent;
-  ngComponentOutletNgModule;
-  /**
-   * @deprecated This input is deprecated, use `ngComponentOutletNgModule` instead.
-   */
-  ngComponentOutletNgModuleFactory;
-  _componentRef;
-  _moduleRef;
-  /**
-   * A helper data structure that allows us to track inputs that were part of the
-   * ngComponentOutletInputs expression. Tracking inputs is necessary for proper removal of ones
-   * that are no longer referenced.
-   */
-  _inputsUsed = /* @__PURE__ */ new Map();
-  constructor(_viewContainerRef) {
-    this._viewContainerRef = _viewContainerRef;
-  }
-  _needToReCreateNgModuleInstance(changes) {
-    return changes["ngComponentOutletNgModule"] !== void 0 || changes["ngComponentOutletNgModuleFactory"] !== void 0;
-  }
-  _needToReCreateComponentInstance(changes) {
-    return changes["ngComponentOutlet"] !== void 0 || changes["ngComponentOutletContent"] !== void 0 || changes["ngComponentOutletInjector"] !== void 0 || this._needToReCreateNgModuleInstance(changes);
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (this._needToReCreateComponentInstance(changes)) {
-      this._viewContainerRef.clear();
-      this._inputsUsed.clear();
-      this._componentRef = void 0;
-      if (this.ngComponentOutlet) {
-        const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;
-        if (this._needToReCreateNgModuleInstance(changes)) {
-          this._moduleRef?.destroy();
-          if (this.ngComponentOutletNgModule) {
-            this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));
-          } else if (this.ngComponentOutletNgModuleFactory) {
-            this._moduleRef = this.ngComponentOutletNgModuleFactory.create(getParentInjector(injector));
-          } else {
-            this._moduleRef = void 0;
-          }
-        }
-        this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {
-          injector,
-          ngModuleRef: this._moduleRef,
-          projectableNodes: this.ngComponentOutletContent
-        });
-      }
-    }
-  }
-  /** @nodoc */
-  ngDoCheck() {
-    if (this._componentRef) {
-      if (this.ngComponentOutletInputs) {
-        for (const inputName of Object.keys(this.ngComponentOutletInputs)) {
-          this._inputsUsed.set(inputName, true);
-        }
-      }
-      this._applyInputStateDiff(this._componentRef);
-    }
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    this._moduleRef?.destroy();
-  }
-  _applyInputStateDiff(componentRef) {
-    for (const [inputName, touched] of this._inputsUsed) {
-      if (!touched) {
-        componentRef.setInput(inputName, void 0);
-        this._inputsUsed.delete(inputName);
-      } else {
-        componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);
-        this._inputsUsed.set(inputName, false);
-      }
-    }
-  }
-  static ɵfac = function NgComponentOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgComponentOutlet)(ɵɵdirectiveInject(ViewContainerRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgComponentOutlet,
-    selectors: [["", "ngComponentOutlet", ""]],
-    inputs: {
-      ngComponentOutlet: "ngComponentOutlet",
-      ngComponentOutletInputs: "ngComponentOutletInputs",
-      ngComponentOutletInjector: "ngComponentOutletInjector",
-      ngComponentOutletContent: "ngComponentOutletContent",
-      ngComponentOutletNgModule: "ngComponentOutletNgModule",
-      ngComponentOutletNgModuleFactory: "ngComponentOutletNgModuleFactory"
-    },
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgComponentOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "[ngComponentOutlet]",
-      standalone: true
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }], {
-    ngComponentOutlet: [{
-      type: Input
-    }],
-    ngComponentOutletInputs: [{
-      type: Input
-    }],
-    ngComponentOutletInjector: [{
-      type: Input
-    }],
-    ngComponentOutletContent: [{
-      type: Input
-    }],
-    ngComponentOutletNgModule: [{
-      type: Input
-    }],
-    ngComponentOutletNgModuleFactory: [{
-      type: Input
-    }]
-  });
-})();
-function getParentInjector(injector) {
-  const parentNgModule = injector.get(NgModuleRef$1);
-  return parentNgModule.injector;
-}
-var NgForOfContext = class {
-  $implicit;
-  ngForOf;
-  index;
-  count;
-  constructor($implicit, ngForOf, index, count) {
-    this.$implicit = $implicit;
-    this.ngForOf = ngForOf;
-    this.index = index;
-    this.count = count;
-  }
-  // Indicates whether this is the first item in the collection.
-  get first() {
-    return this.index === 0;
-  }
-  // Indicates whether this is the last item in the collection.
-  get last() {
-    return this.index === this.count - 1;
-  }
-  // Indicates whether an index of this item in the collection is even.
-  get even() {
-    return this.index % 2 === 0;
-  }
-  // Indicates whether an index of this item in the collection is odd.
-  get odd() {
-    return !this.even;
-  }
-};
-var NgForOf = class _NgForOf {
-  _viewContainer;
-  _template;
-  _differs;
-  /**
-   * The value of the iterable expression, which can be used as a
-   * [template input variable](guide/directives/structural-directives#shorthand).
-   */
-  set ngForOf(ngForOf) {
-    this._ngForOf = ngForOf;
-    this._ngForOfDirty = true;
-  }
-  /**
-   * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable.
-   *
-   * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object
-   * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)
-   * as the key.
-   *
-   * `NgForOf` uses the computed key to associate items in an iterable with DOM elements
-   * it produces for these items.
-   *
-   * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an
-   * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a
-   * primary key), and this iterable could be updated with new object instances that still
-   * represent the same underlying entity (for example, when data is re-fetched from the server,
-   * and the iterable is recreated and re-rendered, but most of the data is still the same).
-   *
-   * @see {@link TrackByFunction}
-   */
-  set ngForTrackBy(fn) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && fn != null && typeof fn !== "function") {
-      console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. See https://angular.io/api/common/NgForOf#change-propagation for more information.`);
-    }
-    this._trackByFn = fn;
-  }
-  get ngForTrackBy() {
-    return this._trackByFn;
-  }
-  _ngForOf = null;
-  _ngForOfDirty = true;
-  _differ = null;
-  // TODO(issue/24571): remove '!'
-  // waiting for microsoft/typescript#43662 to allow the return type `TrackByFunction|undefined` for
-  // the getter
-  _trackByFn;
-  constructor(_viewContainer, _template, _differs) {
-    this._viewContainer = _viewContainer;
-    this._template = _template;
-    this._differs = _differs;
-  }
-  /**
-   * A reference to the template that is stamped out for each item in the iterable.
-   * @see [template reference variable](guide/templates/variables#template-reference-variables)
-   */
-  set ngForTemplate(value) {
-    if (value) {
-      this._template = value;
-    }
-  }
-  /**
-   * Applies the changes when needed.
-   * @nodoc
-   */
-  ngDoCheck() {
-    if (this._ngForOfDirty) {
-      this._ngForOfDirty = false;
-      const value = this._ngForOf;
-      if (!this._differ && value) {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          try {
-            this._differ = this._differs.find(value).create(this.ngForTrackBy);
-          } catch {
-            let errorMessage = `Cannot find a differ supporting object '${value}' of type '${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;
-            if (typeof value === "object") {
-              errorMessage += " Did you mean to use the keyvalue pipe?";
-            }
-            throw new RuntimeError(-2200, errorMessage);
-          }
-        } else {
-          this._differ = this._differs.find(value).create(this.ngForTrackBy);
-        }
-      }
-    }
-    if (this._differ) {
-      const changes = this._differ.diff(this._ngForOf);
-      if (changes) this._applyChanges(changes);
-    }
-  }
-  _applyChanges(changes) {
-    const viewContainer = this._viewContainer;
-    changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {
-      if (item.previousIndex == null) {
-        viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? void 0 : currentIndex);
-      } else if (currentIndex == null) {
-        viewContainer.remove(adjustedPreviousIndex === null ? void 0 : adjustedPreviousIndex);
-      } else if (adjustedPreviousIndex !== null) {
-        const view = viewContainer.get(adjustedPreviousIndex);
-        viewContainer.move(view, currentIndex);
-        applyViewChange(view, item);
-      }
-    });
-    for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {
-      const viewRef = viewContainer.get(i);
-      const context = viewRef.context;
-      context.index = i;
-      context.count = ilen;
-      context.ngForOf = this._ngForOf;
-    }
-    changes.forEachIdentityChange((record) => {
-      const viewRef = viewContainer.get(record.currentIndex);
-      applyViewChange(viewRef, record);
-    });
-  }
-  /**
-   * Asserts the correct type of the context for the template that `NgForOf` will render.
-   *
-   * The presence of this method is a signal to the Ivy template type-check compiler that the
-   * `NgForOf` structural directive renders its template with a specific context type.
-   */
-  static ngTemplateContextGuard(dir, ctx) {
-    return true;
-  }
-  static ɵfac = function NgForOf_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgForOf)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(IterableDiffers));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgForOf,
-    selectors: [["", "ngFor", "", "ngForOf", ""]],
-    inputs: {
-      ngForOf: "ngForOf",
-      ngForTrackBy: "ngForTrackBy",
-      ngForTemplate: "ngForTemplate"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgForOf, [{
-    type: Directive,
-    args: [{
-      selector: "[ngFor][ngForOf]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: IterableDiffers
-  }], {
-    ngForOf: [{
-      type: Input
-    }],
-    ngForTrackBy: [{
-      type: Input
-    }],
-    ngForTemplate: [{
-      type: Input
-    }]
-  });
-})();
-function applyViewChange(view, record) {
-  view.context.$implicit = record.item;
-}
-function getTypeName(type) {
-  return type["name"] || typeof type;
-}
-var NgIf = class _NgIf {
-  _viewContainer;
-  _context = new NgIfContext();
-  _thenTemplateRef = null;
-  _elseTemplateRef = null;
-  _thenViewRef = null;
-  _elseViewRef = null;
-  constructor(_viewContainer, templateRef) {
-    this._viewContainer = _viewContainer;
-    this._thenTemplateRef = templateRef;
-  }
-  /**
-   * The Boolean expression to evaluate as the condition for showing a template.
-   */
-  set ngIf(condition) {
-    this._context.$implicit = this._context.ngIf = condition;
-    this._updateView();
-  }
-  /**
-   * A template to show if the condition expression evaluates to true.
-   */
-  set ngIfThen(templateRef) {
-    assertTemplate("ngIfThen", templateRef);
-    this._thenTemplateRef = templateRef;
-    this._thenViewRef = null;
-    this._updateView();
-  }
-  /**
-   * A template to show if the condition expression evaluates to false.
-   */
-  set ngIfElse(templateRef) {
-    assertTemplate("ngIfElse", templateRef);
-    this._elseTemplateRef = templateRef;
-    this._elseViewRef = null;
-    this._updateView();
-  }
-  _updateView() {
-    if (this._context.$implicit) {
-      if (!this._thenViewRef) {
-        this._viewContainer.clear();
-        this._elseViewRef = null;
-        if (this._thenTemplateRef) {
-          this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
-        }
-      }
-    } else {
-      if (!this._elseViewRef) {
-        this._viewContainer.clear();
-        this._thenViewRef = null;
-        if (this._elseTemplateRef) {
-          this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
-        }
-      }
-    }
-  }
-  /** @internal */
-  static ngIfUseIfTypeGuard;
-  /**
-   * Assert the correct type of the expression bound to the `ngIf` input within the template.
-   *
-   * The presence of this static field is a signal to the Ivy template type check compiler that
-   * when the `NgIf` structural directive renders its template, the type of the expression bound
-   * to `ngIf` should be narrowed in some way. For `NgIf`, the binding expression itself is used to
-   * narrow its type, which allows the strictNullChecks feature of TypeScript to work with `NgIf`.
-   */
-  static ngTemplateGuard_ngIf;
-  /**
-   * Asserts the correct type of the context for the template that `NgIf` will render.
-   *
-   * The presence of this method is a signal to the Ivy template type-check compiler that the
-   * `NgIf` structural directive renders its template with a specific context type.
-   */
-  static ngTemplateContextGuard(dir, ctx) {
-    return true;
-  }
-  static ɵfac = function NgIf_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgIf)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgIf,
-    selectors: [["", "ngIf", ""]],
-    inputs: {
-      ngIf: "ngIf",
-      ngIfThen: "ngIfThen",
-      ngIfElse: "ngIfElse"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgIf, [{
-    type: Directive,
-    args: [{
-      selector: "[ngIf]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }], {
-    ngIf: [{
-      type: Input
-    }],
-    ngIfThen: [{
-      type: Input
-    }],
-    ngIfElse: [{
-      type: Input
-    }]
-  });
-})();
-var NgIfContext = class {
-  $implicit = null;
-  ngIf = null;
-};
-function assertTemplate(property, templateRef) {
-  const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
-  if (!isTemplateRefOrNull) {
-    throw new Error(`${property} must be a TemplateRef, but received '${stringify(templateRef)}'.`);
-  }
-}
-var SwitchView = class {
-  _viewContainerRef;
-  _templateRef;
-  _created = false;
-  constructor(_viewContainerRef, _templateRef) {
-    this._viewContainerRef = _viewContainerRef;
-    this._templateRef = _templateRef;
-  }
-  create() {
-    this._created = true;
-    this._viewContainerRef.createEmbeddedView(this._templateRef);
-  }
-  destroy() {
-    this._created = false;
-    this._viewContainerRef.clear();
-  }
-  enforceState(created) {
-    if (created && !this._created) {
-      this.create();
-    } else if (!created && this._created) {
-      this.destroy();
-    }
-  }
-};
-var NgSwitch = class _NgSwitch {
-  _defaultViews = [];
-  _defaultUsed = false;
-  _caseCount = 0;
-  _lastCaseCheckIndex = 0;
-  _lastCasesMatched = false;
-  _ngSwitch;
-  set ngSwitch(newValue) {
-    this._ngSwitch = newValue;
-    if (this._caseCount === 0) {
-      this._updateDefaultCases(true);
-    }
-  }
-  /** @internal */
-  _addCase() {
-    return this._caseCount++;
-  }
-  /** @internal */
-  _addDefault(view) {
-    this._defaultViews.push(view);
-  }
-  /** @internal */
-  _matchCase(value) {
-    const matched = value === this._ngSwitch;
-    this._lastCasesMatched ||= matched;
-    this._lastCaseCheckIndex++;
-    if (this._lastCaseCheckIndex === this._caseCount) {
-      this._updateDefaultCases(!this._lastCasesMatched);
-      this._lastCaseCheckIndex = 0;
-      this._lastCasesMatched = false;
-    }
-    return matched;
-  }
-  _updateDefaultCases(useDefault) {
-    if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {
-      this._defaultUsed = useDefault;
-      for (const defaultView of this._defaultViews) {
-        defaultView.enforceState(useDefault);
-      }
-    }
-  }
-  static ɵfac = function NgSwitch_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitch)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitch,
-    selectors: [["", "ngSwitch", ""]],
-    inputs: {
-      ngSwitch: "ngSwitch"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitch, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitch]"
-    }]
-  }], null, {
-    ngSwitch: [{
-      type: Input
-    }]
-  });
-})();
-var NgSwitchCase = class _NgSwitchCase {
-  ngSwitch;
-  _view;
-  /**
-   * Stores the HTML template to be selected on match.
-   */
-  ngSwitchCase;
-  constructor(viewContainer, templateRef, ngSwitch) {
-    this.ngSwitch = ngSwitch;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !ngSwitch) {
-      throwNgSwitchProviderNotFoundError("ngSwitchCase", "NgSwitchCase");
-    }
-    ngSwitch._addCase();
-    this._view = new SwitchView(viewContainer, templateRef);
-  }
-  /**
-   * Performs case matching. For internal use only.
-   * @nodoc
-   */
-  ngDoCheck() {
-    this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));
-  }
-  static ɵfac = function NgSwitchCase_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitchCase)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(NgSwitch, 9));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitchCase,
-    selectors: [["", "ngSwitchCase", ""]],
-    inputs: {
-      ngSwitchCase: "ngSwitchCase"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitchCase, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitchCase]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: NgSwitch,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Host
-    }]
-  }], {
-    ngSwitchCase: [{
-      type: Input
-    }]
-  });
-})();
-var NgSwitchDefault = class _NgSwitchDefault {
-  constructor(viewContainer, templateRef, ngSwitch) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !ngSwitch) {
-      throwNgSwitchProviderNotFoundError("ngSwitchDefault", "NgSwitchDefault");
-    }
-    ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
-  }
-  static ɵfac = function NgSwitchDefault_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgSwitchDefault)(ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(NgSwitch, 9));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgSwitchDefault,
-    selectors: [["", "ngSwitchDefault", ""]]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSwitchDefault, [{
-    type: Directive,
-    args: [{
-      selector: "[ngSwitchDefault]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }, {
-    type: TemplateRef
-  }, {
-    type: NgSwitch,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Host
-    }]
-  }], null);
-})();
-function throwNgSwitchProviderNotFoundError(attrName, directiveName) {
-  throw new RuntimeError(2e3, `An element with the "${attrName}" attribute (matching the "${directiveName}" directive) must be located inside an element with the "ngSwitch" attribute (matching "NgSwitch" directive)`);
-}
-var NgPlural = class _NgPlural {
-  _localization;
-  _activeView;
-  _caseViews = {};
-  constructor(_localization) {
-    this._localization = _localization;
-  }
-  set ngPlural(value) {
-    this._updateView(value);
-  }
-  addCase(value, switchView) {
-    this._caseViews[value] = switchView;
-  }
-  _updateView(switchValue) {
-    this._clearViews();
-    const cases = Object.keys(this._caseViews);
-    const key = getPluralCategory(switchValue, cases, this._localization);
-    this._activateView(this._caseViews[key]);
-  }
-  _clearViews() {
-    if (this._activeView) this._activeView.destroy();
-  }
-  _activateView(view) {
-    if (view) {
-      this._activeView = view;
-      this._activeView.create();
-    }
-  }
-  static ɵfac = function NgPlural_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgPlural)(ɵɵdirectiveInject(NgLocalization));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgPlural,
-    selectors: [["", "ngPlural", ""]],
-    inputs: {
-      ngPlural: "ngPlural"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgPlural, [{
-    type: Directive,
-    args: [{
-      selector: "[ngPlural]"
-    }]
-  }], () => [{
-    type: NgLocalization
-  }], {
-    ngPlural: [{
-      type: Input
-    }]
-  });
-})();
-var NgPluralCase = class _NgPluralCase {
-  value;
-  constructor(value, template, viewContainer, ngPlural) {
-    this.value = value;
-    const isANumber = !isNaN(Number(value));
-    ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));
-  }
-  static ɵfac = function NgPluralCase_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgPluralCase)(ɵɵinjectAttribute("ngPluralCase"), ɵɵdirectiveInject(TemplateRef), ɵɵdirectiveInject(ViewContainerRef), ɵɵdirectiveInject(NgPlural, 1));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgPluralCase,
-    selectors: [["", "ngPluralCase", ""]]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgPluralCase, [{
-    type: Directive,
-    args: [{
-      selector: "[ngPluralCase]"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Attribute,
-      args: ["ngPluralCase"]
-    }]
-  }, {
-    type: TemplateRef
-  }, {
-    type: ViewContainerRef
-  }, {
-    type: NgPlural,
-    decorators: [{
-      type: Host
-    }]
-  }], null);
-})();
-var NgStyle = class _NgStyle {
-  _ngEl;
-  _differs;
-  _renderer;
-  _ngStyle = null;
-  _differ = null;
-  constructor(_ngEl, _differs, _renderer) {
-    this._ngEl = _ngEl;
-    this._differs = _differs;
-    this._renderer = _renderer;
-  }
-  set ngStyle(values) {
-    this._ngStyle = values;
-    if (!this._differ && values) {
-      this._differ = this._differs.find(values).create();
-    }
-  }
-  ngDoCheck() {
-    if (this._differ) {
-      const changes = this._differ.diff(this._ngStyle);
-      if (changes) {
-        this._applyChanges(changes);
-      }
-    }
-  }
-  _setStyle(nameAndUnit, value) {
-    const [name, unit] = nameAndUnit.split(".");
-    const flags = name.indexOf("-") === -1 ? void 0 : RendererStyleFlags2.DashCase;
-    if (value != null) {
-      this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);
-    } else {
-      this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);
-    }
-  }
-  _applyChanges(changes) {
-    changes.forEachRemovedItem((record) => this._setStyle(record.key, null));
-    changes.forEachAddedItem((record) => this._setStyle(record.key, record.currentValue));
-    changes.forEachChangedItem((record) => this._setStyle(record.key, record.currentValue));
-  }
-  static ɵfac = function NgStyle_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgStyle)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(KeyValueDiffers), ɵɵdirectiveInject(Renderer2));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgStyle,
-    selectors: [["", "ngStyle", ""]],
-    inputs: {
-      ngStyle: "ngStyle"
-    }
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgStyle, [{
-    type: Directive,
-    args: [{
-      selector: "[ngStyle]"
-    }]
-  }], () => [{
-    type: ElementRef
-  }, {
-    type: KeyValueDiffers
-  }, {
-    type: Renderer2
-  }], {
-    ngStyle: [{
-      type: Input,
-      args: ["ngStyle"]
-    }]
-  });
-})();
-var NgTemplateOutlet = class _NgTemplateOutlet {
-  _viewContainerRef;
-  _viewRef = null;
-  /**
-   * A context object to attach to the {@link EmbeddedViewRef}. This should be an
-   * object, the object's keys will be available for binding by the local template `let`
-   * declarations.
-   * Using the key `$implicit` in the context object will set its value as default.
-   */
-  ngTemplateOutletContext = null;
-  /**
-   * A string defining the template reference and optionally the context object for the template.
-   */
-  ngTemplateOutlet = null;
-  /** Injector to be used within the embedded view. */
-  ngTemplateOutletInjector = null;
-  constructor(_viewContainerRef) {
-    this._viewContainerRef = _viewContainerRef;
-  }
-  ngOnChanges(changes) {
-    if (this._shouldRecreateView(changes)) {
-      const viewContainerRef = this._viewContainerRef;
-      if (this._viewRef) {
-        viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
-      }
-      if (!this.ngTemplateOutlet) {
-        this._viewRef = null;
-        return;
-      }
-      const viewContext = this._createContextForwardProxy();
-      this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {
-        injector: this.ngTemplateOutletInjector ?? void 0
-      });
-    }
-  }
-  /**
-   * We need to re-create existing embedded view if either is true:
-   * - the outlet changed.
-   * - the injector changed.
-   */
-  _shouldRecreateView(changes) {
-    return !!changes["ngTemplateOutlet"] || !!changes["ngTemplateOutletInjector"];
-  }
-  /**
-   * For a given outlet instance, we create a proxy object that delegates
-   * to the user-specified context. This allows changing, or swapping out
-   * the context object completely without having to destroy/re-create the view.
-   */
-  _createContextForwardProxy() {
-    return new Proxy({}, {
-      set: (_target, prop, newValue) => {
-        if (!this.ngTemplateOutletContext) {
-          return false;
-        }
-        return Reflect.set(this.ngTemplateOutletContext, prop, newValue);
-      },
-      get: (_target, prop, receiver) => {
-        if (!this.ngTemplateOutletContext) {
-          return void 0;
-        }
-        return Reflect.get(this.ngTemplateOutletContext, prop, receiver);
-      }
-    });
-  }
-  static ɵfac = function NgTemplateOutlet_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgTemplateOutlet)(ɵɵdirectiveInject(ViewContainerRef));
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgTemplateOutlet,
-    selectors: [["", "ngTemplateOutlet", ""]],
-    inputs: {
-      ngTemplateOutletContext: "ngTemplateOutletContext",
-      ngTemplateOutlet: "ngTemplateOutlet",
-      ngTemplateOutletInjector: "ngTemplateOutletInjector"
-    },
-    features: [ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgTemplateOutlet, [{
-    type: Directive,
-    args: [{
-      selector: "[ngTemplateOutlet]"
-    }]
-  }], () => [{
-    type: ViewContainerRef
-  }], {
-    ngTemplateOutletContext: [{
-      type: Input
-    }],
-    ngTemplateOutlet: [{
-      type: Input
-    }],
-    ngTemplateOutletInjector: [{
-      type: Input
-    }]
-  });
-})();
-var COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];
-function invalidPipeArgumentError(type, value) {
-  return new RuntimeError(2100, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${stringify(type)}'`);
-}
-var SubscribableStrategy = class {
-  createSubscription(async, updateLatestValue) {
-    return untracked(() => async.subscribe({
-      next: updateLatestValue,
-      error: (e) => {
-        throw e;
-      }
-    }));
-  }
-  dispose(subscription) {
-    untracked(() => subscription.unsubscribe());
-  }
-};
-var PromiseStrategy = class {
-  createSubscription(async, updateLatestValue) {
-    return async.then(updateLatestValue, (e) => {
-      throw e;
-    });
-  }
-  dispose(subscription) {
-  }
-};
-var _promiseStrategy = new PromiseStrategy();
-var _subscribableStrategy = new SubscribableStrategy();
-var AsyncPipe = class _AsyncPipe {
-  _ref;
-  _latestValue = null;
-  markForCheckOnValueUpdate = true;
-  _subscription = null;
-  _obj = null;
-  _strategy = null;
-  constructor(ref) {
-    this._ref = ref;
-  }
-  ngOnDestroy() {
-    if (this._subscription) {
-      this._dispose();
-    }
-    this._ref = null;
-  }
-  transform(obj) {
-    if (!this._obj) {
-      if (obj) {
-        try {
-          this.markForCheckOnValueUpdate = false;
-          this._subscribe(obj);
-        } finally {
-          this.markForCheckOnValueUpdate = true;
-        }
-      }
-      return this._latestValue;
-    }
-    if (obj !== this._obj) {
-      this._dispose();
-      return this.transform(obj);
-    }
-    return this._latestValue;
-  }
-  _subscribe(obj) {
-    this._obj = obj;
-    this._strategy = this._selectStrategy(obj);
-    this._subscription = this._strategy.createSubscription(obj, (value) => this._updateLatestValue(obj, value));
-  }
-  _selectStrategy(obj) {
-    if (isPromise(obj)) {
-      return _promiseStrategy;
-    }
-    if (isSubscribable(obj)) {
-      return _subscribableStrategy;
-    }
-    throw invalidPipeArgumentError(_AsyncPipe, obj);
-  }
-  _dispose() {
-    this._strategy.dispose(this._subscription);
-    this._latestValue = null;
-    this._subscription = null;
-    this._obj = null;
-  }
-  _updateLatestValue(async, value) {
-    if (async === this._obj) {
-      this._latestValue = value;
-      if (this.markForCheckOnValueUpdate) {
-        this._ref?.markForCheck();
-      }
-    }
-  }
-  static ɵfac = function AsyncPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _AsyncPipe)(ɵɵdirectiveInject(ChangeDetectorRef, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "async",
-    type: _AsyncPipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AsyncPipe, [{
-    type: Pipe,
-    args: [{
-      name: "async",
-      pure: false
-    }]
-  }], () => [{
-    type: ChangeDetectorRef
-  }], null);
-})();
-var LowerCasePipe = class _LowerCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_LowerCasePipe, value);
-    }
-    return value.toLowerCase();
-  }
-  static ɵfac = function LowerCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LowerCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "lowercase",
-    type: _LowerCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LowerCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "lowercase"
-    }]
-  }], null, null);
-})();
-var unicodeWordMatch = /(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;
-var TitleCasePipe = class _TitleCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_TitleCasePipe, value);
-    }
-    return value.replace(unicodeWordMatch, (txt) => txt[0].toUpperCase() + txt.slice(1).toLowerCase());
-  }
-  static ɵfac = function TitleCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _TitleCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "titlecase",
-    type: _TitleCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TitleCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "titlecase"
-    }]
-  }], null, null);
-})();
-var UpperCasePipe = class _UpperCasePipe {
-  transform(value) {
-    if (value == null) return null;
-    if (typeof value !== "string") {
-      throw invalidPipeArgumentError(_UpperCasePipe, value);
-    }
-    return value.toUpperCase();
-  }
-  static ɵfac = function UpperCasePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _UpperCasePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "uppercase",
-    type: _UpperCasePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UpperCasePipe, [{
-    type: Pipe,
-    args: [{
-      name: "uppercase"
-    }]
-  }], null, null);
-})();
-var DEFAULT_DATE_FORMAT = "mediumDate";
-var DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken(ngDevMode ? "DATE_PIPE_DEFAULT_TIMEZONE" : "");
-var DATE_PIPE_DEFAULT_OPTIONS = new InjectionToken(ngDevMode ? "DATE_PIPE_DEFAULT_OPTIONS" : "");
-var DatePipe = class _DatePipe {
-  locale;
-  defaultTimezone;
-  defaultOptions;
-  constructor(locale, defaultTimezone, defaultOptions) {
-    this.locale = locale;
-    this.defaultTimezone = defaultTimezone;
-    this.defaultOptions = defaultOptions;
-  }
-  transform(value, format, timezone, locale) {
-    if (value == null || value === "" || value !== value) return null;
-    try {
-      const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;
-      const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? void 0;
-      return formatDate(value, _format, locale || this.locale, _timezone);
-    } catch (error) {
-      throw invalidPipeArgumentError(_DatePipe, error.message);
-    }
-  }
-  static ɵfac = function DatePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DatePipe)(ɵɵdirectiveInject(LOCALE_ID, 16), ɵɵdirectiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), ɵɵdirectiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "date",
-    type: _DatePipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DatePipe, [{
-    type: Pipe,
-    args: [{
-      name: "date"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DATE_PIPE_DEFAULT_TIMEZONE]
-    }, {
-      type: Optional
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DATE_PIPE_DEFAULT_OPTIONS]
-    }, {
-      type: Optional
-    }]
-  }], null);
-})();
-var _INTERPOLATION_REGEXP = /#/g;
-var I18nPluralPipe = class _I18nPluralPipe {
-  _localization;
-  constructor(_localization) {
-    this._localization = _localization;
-  }
-  /**
-   * @param value the number to be formatted
-   * @param pluralMap an object that mimics the ICU format, see
-   * https://unicode-org.github.io/icu/userguide/format_parse/messages/.
-   * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by
-   * default).
-   */
-  transform(value, pluralMap, locale) {
-    if (value == null) return "";
-    if (typeof pluralMap !== "object" || pluralMap === null) {
-      throw invalidPipeArgumentError(_I18nPluralPipe, pluralMap);
-    }
-    const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
-    return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
-  }
-  static ɵfac = function I18nPluralPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _I18nPluralPipe)(ɵɵdirectiveInject(NgLocalization, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "i18nPlural",
-    type: _I18nPluralPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(I18nPluralPipe, [{
-    type: Pipe,
-    args: [{
-      name: "i18nPlural"
-    }]
-  }], () => [{
-    type: NgLocalization
-  }], null);
-})();
-var I18nSelectPipe = class _I18nSelectPipe {
-  /**
-   * @param value a string to be internationalized.
-   * @param mapping an object that indicates the text that should be displayed
-   * for different values of the provided `value`.
-   */
-  transform(value, mapping) {
-    if (value == null) return "";
-    if (typeof mapping !== "object" || typeof value !== "string") {
-      throw invalidPipeArgumentError(_I18nSelectPipe, mapping);
-    }
-    if (mapping.hasOwnProperty(value)) {
-      return mapping[value];
-    }
-    if (mapping.hasOwnProperty("other")) {
-      return mapping["other"];
-    }
-    return "";
-  }
-  static ɵfac = function I18nSelectPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _I18nSelectPipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "i18nSelect",
-    type: _I18nSelectPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(I18nSelectPipe, [{
-    type: Pipe,
-    args: [{
-      name: "i18nSelect"
-    }]
-  }], null, null);
-})();
-var JsonPipe = class _JsonPipe {
-  /**
-   * @param value A value of any type to convert into a JSON-format string.
-   */
-  transform(value) {
-    return JSON.stringify(value, null, 2);
-  }
-  static ɵfac = function JsonPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonPipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "json",
-    type: _JsonPipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonPipe, [{
-    type: Pipe,
-    args: [{
-      name: "json",
-      pure: false
-    }]
-  }], null, null);
-})();
-function makeKeyValuePair(key, value) {
-  return {
-    key,
-    value
-  };
-}
-var KeyValuePipe = class _KeyValuePipe {
-  differs;
-  constructor(differs) {
-    this.differs = differs;
-  }
-  differ;
-  keyValues = [];
-  compareFn = defaultComparator;
-  transform(input, compareFn = defaultComparator) {
-    if (!input || !(input instanceof Map) && typeof input !== "object") {
-      return null;
-    }
-    this.differ ??= this.differs.find(input).create();
-    const differChanges = this.differ.diff(input);
-    const compareFnChanged = compareFn !== this.compareFn;
-    if (differChanges) {
-      this.keyValues = [];
-      differChanges.forEachItem((r) => {
-        this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));
-      });
-    }
-    if (differChanges || compareFnChanged) {
-      if (compareFn) {
-        this.keyValues.sort(compareFn);
-      }
-      this.compareFn = compareFn;
-    }
-    return this.keyValues;
-  }
-  static ɵfac = function KeyValuePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _KeyValuePipe)(ɵɵdirectiveInject(KeyValueDiffers, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "keyvalue",
-    type: _KeyValuePipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(KeyValuePipe, [{
-    type: Pipe,
-    args: [{
-      name: "keyvalue",
-      pure: false
-    }]
-  }], () => [{
-    type: KeyValueDiffers
-  }], null);
-})();
-function defaultComparator(keyValueA, keyValueB) {
-  const a = keyValueA.key;
-  const b = keyValueB.key;
-  if (a === b) return 0;
-  if (a === void 0) return 1;
-  if (b === void 0) return -1;
-  if (a === null) return 1;
-  if (b === null) return -1;
-  if (typeof a == "string" && typeof b == "string") {
-    return a < b ? -1 : 1;
-  }
-  if (typeof a == "number" && typeof b == "number") {
-    return a - b;
-  }
-  if (typeof a == "boolean" && typeof b == "boolean") {
-    return a < b ? -1 : 1;
-  }
-  const aString = String(a);
-  const bString = String(b);
-  return aString == bString ? 0 : aString < bString ? -1 : 1;
-}
-var DecimalPipe = class _DecimalPipe {
-  _locale;
-  constructor(_locale) {
-    this._locale = _locale;
-  }
-  transform(value, digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    try {
-      const num = strToNumber(value);
-      return formatNumber(num, locale, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_DecimalPipe, error.message);
-    }
-  }
-  static ɵfac = function DecimalPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DecimalPipe)(ɵɵdirectiveInject(LOCALE_ID, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "number",
-    type: _DecimalPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DecimalPipe, [{
-    type: Pipe,
-    args: [{
-      name: "number"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-var PercentPipe = class _PercentPipe {
-  _locale;
-  constructor(_locale) {
-    this._locale = _locale;
-  }
-  /**
-   *
-   * @param value The number to be formatted as a percentage.
-   * @param digitsInfo Decimal representation options, specified by a string
-   * in the following format:<br>
-   * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.
-   *   - `minIntegerDigits`: The minimum number of integer digits before the decimal point.
-   * Default is `1`.
-   *   - `minFractionDigits`: The minimum number of digits after the decimal point.
-   * Default is `0`.
-   *   - `maxFractionDigits`: The maximum number of digits after the decimal point.
-   * Default is `0`.
-   * @param locale A locale code for the locale format rules to use.
-   * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.
-   * See [Setting your app locale](guide/i18n/locale-id).
-   */
-  transform(value, digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    try {
-      const num = strToNumber(value);
-      return formatPercent(num, locale, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_PercentPipe, error.message);
-    }
-  }
-  static ɵfac = function PercentPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PercentPipe)(ɵɵdirectiveInject(LOCALE_ID, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "percent",
-    type: _PercentPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PercentPipe, [{
-    type: Pipe,
-    args: [{
-      name: "percent"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }], null);
-})();
-var CurrencyPipe = class _CurrencyPipe {
-  _locale;
-  _defaultCurrencyCode;
-  constructor(_locale, _defaultCurrencyCode = "USD") {
-    this._locale = _locale;
-    this._defaultCurrencyCode = _defaultCurrencyCode;
-  }
-  transform(value, currencyCode = this._defaultCurrencyCode, display = "symbol", digitsInfo, locale) {
-    if (!isValue(value)) return null;
-    locale ||= this._locale;
-    if (typeof display === "boolean") {
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && console && console.warn) {
-        console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are "code", "symbol" or "symbol-narrow".`);
-      }
-      display = display ? "symbol" : "code";
-    }
-    let currency = currencyCode || this._defaultCurrencyCode;
-    if (display !== "code") {
-      if (display === "symbol" || display === "symbol-narrow") {
-        currency = getCurrencySymbol(currency, display === "symbol" ? "wide" : "narrow", locale);
-      } else {
-        currency = display;
-      }
-    }
-    try {
-      const num = strToNumber(value);
-      return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
-    } catch (error) {
-      throw invalidPipeArgumentError(_CurrencyPipe, error.message);
-    }
-  }
-  static ɵfac = function CurrencyPipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _CurrencyPipe)(ɵɵdirectiveInject(LOCALE_ID, 16), ɵɵdirectiveInject(DEFAULT_CURRENCY_CODE, 16));
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "currency",
-    type: _CurrencyPipe,
-    pure: true
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CurrencyPipe, [{
-    type: Pipe,
-    args: [{
-      name: "currency"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [LOCALE_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DEFAULT_CURRENCY_CODE]
-    }]
-  }], null);
-})();
-function isValue(value) {
-  return !(value == null || value === "" || value !== value);
-}
-function strToNumber(value) {
-  if (typeof value === "string" && !isNaN(Number(value) - parseFloat(value))) {
-    return Number(value);
-  }
-  if (typeof value !== "number") {
-    throw new Error(`${value} is not a number`);
-  }
-  return value;
-}
-var SlicePipe = class _SlicePipe {
-  transform(value, start, end) {
-    if (value == null) return null;
-    if (!this.supports(value)) {
-      throw invalidPipeArgumentError(_SlicePipe, value);
-    }
-    return value.slice(start, end);
-  }
-  supports(obj) {
-    return typeof obj === "string" || Array.isArray(obj);
-  }
-  static ɵfac = function SlicePipe_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _SlicePipe)();
-  };
-  static ɵpipe = ɵɵdefinePipe({
-    name: "slice",
-    type: _SlicePipe,
-    pure: false
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SlicePipe, [{
-    type: Pipe,
-    args: [{
-      name: "slice",
-      pure: false
-    }]
-  }], null, null);
-})();
-var COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];
-var CommonModule = class _CommonModule {
-  static ɵfac = function CommonModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _CommonModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _CommonModule,
-    imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],
-    exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]
-  });
-  static ɵinj = ɵɵdefineInjector({});
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CommonModule, [{
-    type: NgModule,
-    args: [{
-      imports: [COMMON_DIRECTIVES, COMMON_PIPES],
-      exports: [COMMON_DIRECTIVES, COMMON_PIPES]
-    }]
-  }], null, null);
-})();
-var PLATFORM_BROWSER_ID = "browser";
-var PLATFORM_SERVER_ID = "server";
-function isPlatformBrowser(platformId) {
-  return platformId === PLATFORM_BROWSER_ID;
-}
-function isPlatformServer(platformId) {
-  return platformId === PLATFORM_SERVER_ID;
-}
-var VERSION = new Version("19.0.5");
-var ViewportScroller = class _ViewportScroller {
-  // De-sugared tree-shakable injection
-  // See #23917
-  /** @nocollapse */
-  static ɵprov = (
-    /** @pureOrBreakMyCode */
-    ɵɵdefineInjectable({
-      token: _ViewportScroller,
-      providedIn: "root",
-      factory: () => isPlatformBrowser(inject(PLATFORM_ID)) ? new BrowserViewportScroller(inject(DOCUMENT), window) : new NullViewportScroller()
-    })
-  );
-};
-var BrowserViewportScroller = class {
-  document;
-  window;
-  offset = () => [0, 0];
-  constructor(document2, window2) {
-    this.document = document2;
-    this.window = window2;
-  }
-  /**
-   * Configures the top offset used when scrolling to an anchor.
-   * @param offset A position in screen coordinates (a tuple with x and y values)
-   * or a function that returns the top offset position.
-   *
-   */
-  setOffset(offset) {
-    if (Array.isArray(offset)) {
-      this.offset = () => offset;
-    } else {
-      this.offset = offset;
-    }
-  }
-  /**
-   * Retrieves the current scroll position.
-   * @returns The position in screen coordinates.
-   */
-  getScrollPosition() {
-    return [this.window.scrollX, this.window.scrollY];
-  }
-  /**
-   * Sets the scroll position.
-   * @param position The new position in screen coordinates.
-   */
-  scrollToPosition(position) {
-    this.window.scrollTo(position[0], position[1]);
-  }
-  /**
-   * Scrolls to an element and attempts to focus the element.
-   *
-   * Note that the function name here is misleading in that the target string may be an ID for a
-   * non-anchor element.
-   *
-   * @param target The ID of an element or name of the anchor.
-   *
-   * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document
-   * @see https://html.spec.whatwg.org/#scroll-to-fragid
-   */
-  scrollToAnchor(target) {
-    const elSelected = findAnchorFromDocument(this.document, target);
-    if (elSelected) {
-      this.scrollToElement(elSelected);
-      elSelected.focus();
-    }
-  }
-  /**
-   * Disables automatic scroll restoration provided by the browser.
-   */
-  setHistoryScrollRestoration(scrollRestoration) {
-    this.window.history.scrollRestoration = scrollRestoration;
-  }
-  /**
-   * Scrolls to an element using the native offset and the specified offset set on this scroller.
-   *
-   * The offset can be used when we know that there is a floating header and scrolling naively to an
-   * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.
-   */
-  scrollToElement(el) {
-    const rect = el.getBoundingClientRect();
-    const left = rect.left + this.window.pageXOffset;
-    const top = rect.top + this.window.pageYOffset;
-    const offset = this.offset();
-    this.window.scrollTo(left - offset[0], top - offset[1]);
-  }
-};
-function findAnchorFromDocument(document2, target) {
-  const documentResult = document2.getElementById(target) || document2.getElementsByName(target)[0];
-  if (documentResult) {
-    return documentResult;
-  }
-  if (typeof document2.createTreeWalker === "function" && document2.body && typeof document2.body.attachShadow === "function") {
-    const treeWalker = document2.createTreeWalker(document2.body, NodeFilter.SHOW_ELEMENT);
-    let currentNode = treeWalker.currentNode;
-    while (currentNode) {
-      const shadowRoot = currentNode.shadowRoot;
-      if (shadowRoot) {
-        const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name="${target}"]`);
-        if (result) {
-          return result;
-        }
-      }
-      currentNode = treeWalker.nextNode();
-    }
-  }
-  return null;
-}
-var NullViewportScroller = class {
-  /**
-   * Empty implementation
-   */
-  setOffset(offset) {
-  }
-  /**
-   * Empty implementation
-   */
-  getScrollPosition() {
-    return [0, 0];
-  }
-  /**
-   * Empty implementation
-   */
-  scrollToPosition(position) {
-  }
-  /**
-   * Empty implementation
-   */
-  scrollToAnchor(anchor) {
-  }
-  /**
-   * Empty implementation
-   */
-  setHistoryScrollRestoration(scrollRestoration) {
-  }
-};
-var XhrFactory = class {
-};
-var PLACEHOLDER_QUALITY = "20";
-function getUrl(src, win) {
-  return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);
-}
-function isAbsoluteUrl(src) {
-  return /^https?:\/\//.test(src);
-}
-function extractHostname(url) {
-  return isAbsoluteUrl(url) ? new URL(url).hostname : url;
-}
-function isValidPath(path) {
-  const isString = typeof path === "string";
-  if (!isString || path.trim() === "") {
-    return false;
-  }
-  try {
-    const url = new URL(path);
-    return true;
-  } catch {
-    return false;
-  }
-}
-function normalizePath(path) {
-  return path.endsWith("/") ? path.slice(0, -1) : path;
-}
-function normalizeSrc(src) {
-  return src.startsWith("/") ? src.slice(1) : src;
-}
-var noopImageLoader = (config) => config.src;
-var IMAGE_LOADER = new InjectionToken(ngDevMode ? "ImageLoader" : "", {
-  providedIn: "root",
-  factory: () => noopImageLoader
-});
-function createImageLoader(buildUrlFn, exampleUrls) {
-  return function provideImageLoader(path) {
-    if (!isValidPath(path)) {
-      throwInvalidPathError(path, exampleUrls || []);
-    }
-    path = normalizePath(path);
-    const loaderFn = (config) => {
-      if (isAbsoluteUrl(config.src)) {
-        throwUnexpectedAbsoluteUrlError(path, config.src);
-      }
-      return buildUrlFn(path, __spreadProps(__spreadValues({}, config), {
-        src: normalizeSrc(config.src)
-      }));
-    };
-    const providers = [{
-      provide: IMAGE_LOADER,
-      useValue: loaderFn
-    }];
-    return providers;
-  };
-}
-function throwInvalidPathError(path, exampleUrls) {
-  throw new RuntimeError(2959, ngDevMode && `Image loader has detected an invalid path (\`${path}\`). To fix this, supply a path using one of the following formats: ${exampleUrls.join(" or ")}`);
-}
-function throwUnexpectedAbsoluteUrlError(path, url) {
-  throw new RuntimeError(2959, ngDevMode && `Image loader has detected a \`<img>\` tag with an invalid \`ngSrc\` attribute: ${url}. This image loader expects \`ngSrc\` to be a relative URL - however the provided value is an absolute URL. To fix this, provide \`ngSrc\` as a path relative to the base URL configured for this loader (\`${path}\`).`);
-}
-var provideCloudflareLoader = createImageLoader(createCloudflareUrl, ngDevMode ? ["https://<ZONE>/cdn-cgi/image/<OPTIONS>/<SOURCE-IMAGE>"] : void 0);
-function createCloudflareUrl(path, config) {
-  let params = `format=auto`;
-  if (config.width) {
-    params += `,width=${config.width}`;
-  }
-  if (config.isPlaceholder) {
-    params += `,quality=${PLACEHOLDER_QUALITY}`;
-  }
-  return `${path}/cdn-cgi/image/${params}/${config.src}`;
-}
-var cloudinaryLoaderInfo = {
-  name: "Cloudinary",
-  testUrl: isCloudinaryUrl
-};
-var CLOUDINARY_LOADER_REGEX = /https?\:\/\/[^\/]+\.cloudinary\.com\/.+/;
-function isCloudinaryUrl(url) {
-  return CLOUDINARY_LOADER_REGEX.test(url);
-}
-var provideCloudinaryLoader = createImageLoader(createCloudinaryUrl, ngDevMode ? ["https://res.cloudinary.com/mysite", "https://mysite.cloudinary.com", "https://subdomain.mysite.com"] : void 0);
-function createCloudinaryUrl(path, config) {
-  const quality = config.isPlaceholder ? "q_auto:low" : "q_auto";
-  let params = `f_auto,${quality}`;
-  if (config.width) {
-    params += `,w_${config.width}`;
-  }
-  if (config.loaderParams?.["rounded"]) {
-    params += `,r_max`;
-  }
-  return `${path}/image/upload/${params}/${config.src}`;
-}
-var imageKitLoaderInfo = {
-  name: "ImageKit",
-  testUrl: isImageKitUrl
-};
-var IMAGE_KIT_LOADER_REGEX = /https?\:\/\/[^\/]+\.imagekit\.io\/.+/;
-function isImageKitUrl(url) {
-  return IMAGE_KIT_LOADER_REGEX.test(url);
-}
-var provideImageKitLoader = createImageLoader(createImagekitUrl, ngDevMode ? ["https://ik.imagekit.io/mysite", "https://subdomain.mysite.com"] : void 0);
-function createImagekitUrl(path, config) {
-  const {
-    src,
-    width
-  } = config;
-  const params = [];
-  if (width) {
-    params.push(`w-${width}`);
-  }
-  if (config.isPlaceholder) {
-    params.push(`q-${PLACEHOLDER_QUALITY}`);
-  }
-  const urlSegments = params.length ? [path, `tr:${params.join(",")}`, src] : [path, src];
-  const url = new URL(urlSegments.join("/"));
-  return url.href;
-}
-var imgixLoaderInfo = {
-  name: "Imgix",
-  testUrl: isImgixUrl
-};
-var IMGIX_LOADER_REGEX = /https?\:\/\/[^\/]+\.imgix\.net\/.+/;
-function isImgixUrl(url) {
-  return IMGIX_LOADER_REGEX.test(url);
-}
-var provideImgixLoader = createImageLoader(createImgixUrl, ngDevMode ? ["https://somepath.imgix.net/"] : void 0);
-function createImgixUrl(path, config) {
-  const url = new URL(`${path}/${config.src}`);
-  url.searchParams.set("auto", "format");
-  if (config.width) {
-    url.searchParams.set("w", config.width.toString());
-  }
-  if (config.isPlaceholder) {
-    url.searchParams.set("q", PLACEHOLDER_QUALITY);
-  }
-  return url.href;
-}
-var netlifyLoaderInfo = {
-  name: "Netlify",
-  testUrl: isNetlifyUrl
-};
-var NETLIFY_LOADER_REGEX = /https?\:\/\/[^\/]+\.netlify\.app\/.+/;
-function isNetlifyUrl(url) {
-  return NETLIFY_LOADER_REGEX.test(url);
-}
-function imgDirectiveDetails(ngSrc, includeNgSrc = true) {
-  const ngSrcInfo = includeNgSrc ? `(activated on an <img> element with the \`ngSrc="${ngSrc}"\`) ` : "";
-  return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;
-}
-function assertDevMode(checkName) {
-  if (!ngDevMode) {
-    throw new RuntimeError(2958, `Unexpected invocation of the ${checkName} in the prod mode. Please make sure that the prod mode is enabled for production builds.`);
-  }
-}
-var LCPImageObserver = class _LCPImageObserver {
-  // Map of full image URLs -> original `ngSrc` values.
-  images = /* @__PURE__ */ new Map();
-  window = null;
-  observer = null;
-  constructor() {
-    const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
-    assertDevMode("LCP checker");
-    const win = inject(DOCUMENT).defaultView;
-    if (isBrowser && typeof PerformanceObserver !== "undefined") {
-      this.window = win;
-      this.observer = this.initPerformanceObserver();
-    }
-  }
-  /**
-   * Inits PerformanceObserver and subscribes to LCP events.
-   * Based on https://web.dev/lcp/#measure-lcp-in-javascript
-   */
-  initPerformanceObserver() {
-    const observer = new PerformanceObserver((entryList) => {
-      const entries = entryList.getEntries();
-      if (entries.length === 0) return;
-      const lcpElement = entries[entries.length - 1];
-      const imgSrc = lcpElement.element?.src ?? "";
-      if (imgSrc.startsWith("data:") || imgSrc.startsWith("blob:")) return;
-      const img = this.images.get(imgSrc);
-      if (!img) return;
-      if (!img.priority && !img.alreadyWarnedPriority) {
-        img.alreadyWarnedPriority = true;
-        logMissingPriorityError(imgSrc);
-      }
-      if (img.modified && !img.alreadyWarnedModified) {
-        img.alreadyWarnedModified = true;
-        logModifiedWarning(imgSrc);
-      }
-    });
-    observer.observe({
-      type: "largest-contentful-paint",
-      buffered: true
-    });
-    return observer;
-  }
-  registerImage(rewrittenSrc, originalNgSrc, isPriority) {
-    if (!this.observer) return;
-    const newObservedImageState = {
-      priority: isPriority,
-      modified: false,
-      alreadyWarnedModified: false,
-      alreadyWarnedPriority: false
-    };
-    this.images.set(getUrl(rewrittenSrc, this.window).href, newObservedImageState);
-  }
-  unregisterImage(rewrittenSrc) {
-    if (!this.observer) return;
-    this.images.delete(getUrl(rewrittenSrc, this.window).href);
-  }
-  updateImage(originalSrc, newSrc) {
-    if (!this.observer) return;
-    const originalUrl = getUrl(originalSrc, this.window).href;
-    const img = this.images.get(originalUrl);
-    if (img) {
-      img.modified = true;
-      this.images.set(getUrl(newSrc, this.window).href, img);
-      this.images.delete(originalUrl);
-    }
-  }
-  ngOnDestroy() {
-    if (!this.observer) return;
-    this.observer.disconnect();
-    this.images.clear();
-  }
-  static ɵfac = function LCPImageObserver_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _LCPImageObserver)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _LCPImageObserver,
-    factory: _LCPImageObserver.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(LCPImageObserver, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function logMissingPriorityError(ngSrc) {
-  const directiveDetails = imgDirectiveDetails(ngSrc);
-  console.error(formatRuntimeError(2955, `${directiveDetails} this image is the Largest Contentful Paint (LCP) element but was not marked "priority". This image should be marked "priority" in order to prioritize its loading. To fix this, add the "priority" attribute.`));
-}
-function logModifiedWarning(ngSrc) {
-  const directiveDetails = imgDirectiveDetails(ngSrc);
-  console.warn(formatRuntimeError(2964, `${directiveDetails} this image is the Largest Contentful Paint (LCP) element and has had its "ngSrc" attribute modified. This can cause slower loading performance. It is recommended not to modify the "ngSrc" property on any image which could be the LCP element.`));
-}
-var INTERNAL_PRECONNECT_CHECK_BLOCKLIST = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "0.0.0.0"]);
-var PRECONNECT_CHECK_BLOCKLIST = new InjectionToken(ngDevMode ? "PRECONNECT_CHECK_BLOCKLIST" : "");
-var PreconnectLinkChecker = class _PreconnectLinkChecker {
-  document = inject(DOCUMENT);
-  isServer = isPlatformServer(inject(PLATFORM_ID));
-  /**
-   * Set of <link rel="preconnect"> tags found on this page.
-   * The `null` value indicates that there was no DOM query operation performed.
-   */
-  preconnectLinks = null;
-  /*
-   * Keep track of all already seen origin URLs to avoid repeating the same check.
-   */
-  alreadySeen = /* @__PURE__ */ new Set();
-  window = null;
-  blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);
-  constructor() {
-    assertDevMode("preconnect link checker");
-    const win = this.document.defaultView;
-    if (typeof win !== "undefined") {
-      this.window = win;
-    }
-    const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {
-      optional: true
-    });
-    if (blocklist) {
-      this.populateBlocklist(blocklist);
-    }
-  }
-  populateBlocklist(origins) {
-    if (Array.isArray(origins)) {
-      deepForEach(origins, (origin) => {
-        this.blocklist.add(extractHostname(origin));
-      });
-    } else {
-      this.blocklist.add(extractHostname(origins));
-    }
-  }
-  /**
-   * Checks that a preconnect resource hint exists in the head for the
-   * given src.
-   *
-   * @param rewrittenSrc src formatted with loader
-   * @param originalNgSrc ngSrc value
-   */
-  assertPreconnect(rewrittenSrc, originalNgSrc) {
-    if (this.isServer) return;
-    const imgUrl = getUrl(rewrittenSrc, this.window);
-    if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;
-    this.alreadySeen.add(imgUrl.origin);
-    this.preconnectLinks ??= this.queryPreconnectLinks();
-    if (!this.preconnectLinks.has(imgUrl.origin)) {
-      console.warn(formatRuntimeError(2956, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this image. Preconnecting to the origin(s) that serve priority images ensures that these images are delivered as soon as possible. To fix this, please add the following element into the <head> of the document:
-  <link rel="preconnect" href="${imgUrl.origin}">`));
-    }
-  }
-  queryPreconnectLinks() {
-    const preconnectUrls = /* @__PURE__ */ new Set();
-    const selector = "link[rel=preconnect]";
-    const links = Array.from(this.document.querySelectorAll(selector));
-    for (let link of links) {
-      const url = getUrl(link.href, this.window);
-      preconnectUrls.add(url.origin);
-    }
-    return preconnectUrls;
-  }
-  ngOnDestroy() {
-    this.preconnectLinks?.clear();
-    this.alreadySeen.clear();
-  }
-  static ɵfac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreconnectLinkChecker)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreconnectLinkChecker,
-    factory: _PreconnectLinkChecker.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreconnectLinkChecker, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [], null);
-})();
-function deepForEach(input, fn) {
-  for (let value of input) {
-    Array.isArray(value) ? deepForEach(value, fn) : fn(value);
-  }
-}
-var DEFAULT_PRELOADED_IMAGES_LIMIT = 5;
-var PRELOADED_IMAGES = new InjectionToken("NG_OPTIMIZED_PRELOADED_IMAGES", {
-  providedIn: "root",
-  factory: () => /* @__PURE__ */ new Set()
-});
-var PreloadLinkCreator = class _PreloadLinkCreator {
-  preloadedImages = inject(PRELOADED_IMAGES);
-  document = inject(DOCUMENT);
-  /**
-   * @description Add a preload `<link>` to the `<head>` of the `index.html` that is served from the
-   * server while using Angular Universal and SSR to kick off image loads for high priority images.
-   *
-   * The `sizes` (passed in from the user) and `srcset` (parsed and formatted from `ngSrcset`)
-   * properties used to set the corresponding attributes, `imagesizes` and `imagesrcset`
-   * respectively, on the preload `<link>` tag so that the correctly sized image is preloaded from
-   * the CDN.
-   *
-   * {@link https://web.dev/preload-responsive-images/#imagesrcset-and-imagesizes}
-   *
-   * @param renderer The `Renderer2` passed in from the directive
-   * @param src The original src of the image that is set on the `ngSrc` input.
-   * @param srcset The parsed and formatted srcset created from the `ngSrcset` input
-   * @param sizes The value of the `sizes` attribute passed in to the `<img>` tag
-   */
-  createPreloadLinkTag(renderer, src, srcset, sizes) {
-    if (ngDevMode) {
-      if (this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {
-        throw new RuntimeError(2961, ngDevMode && `The \`NgOptimizedImage\` directive has detected that more than ${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. This might negatively affect an overall performance of the page. To fix this, remove the "priority" attribute from images with less priority.`);
-      }
-    }
-    if (this.preloadedImages.has(src)) {
-      return;
-    }
-    this.preloadedImages.add(src);
-    const preload = renderer.createElement("link");
-    renderer.setAttribute(preload, "as", "image");
-    renderer.setAttribute(preload, "href", src);
-    renderer.setAttribute(preload, "rel", "preload");
-    renderer.setAttribute(preload, "fetchpriority", "high");
-    if (sizes) {
-      renderer.setAttribute(preload, "imageSizes", sizes);
-    }
-    if (srcset) {
-      renderer.setAttribute(preload, "imageSrcset", srcset);
-    }
-    renderer.appendChild(this.document.head, preload);
-  }
-  static ɵfac = function PreloadLinkCreator_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _PreloadLinkCreator)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _PreloadLinkCreator,
-    factory: _PreloadLinkCreator.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PreloadLinkCreator, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], null, null);
-})();
-var BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;
-var VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\s*\d+w\s*(,|$)){1,})$/;
-var VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\s*\d+(\.\d+)?x\s*(,|$)){1,})$/;
-var ABSOLUTE_SRCSET_DENSITY_CAP = 3;
-var RECOMMENDED_SRCSET_DENSITY_CAP = 2;
-var DENSITY_SRCSET_MULTIPLIERS = [1, 2];
-var VIEWPORT_BREAKPOINT_CUTOFF = 640;
-var ASPECT_RATIO_TOLERANCE = 0.1;
-var OVERSIZED_IMAGE_TOLERANCE = 1e3;
-var FIXED_SRCSET_WIDTH_LIMIT = 1920;
-var FIXED_SRCSET_HEIGHT_LIMIT = 1080;
-var PLACEHOLDER_BLUR_AMOUNT = 15;
-var PLACEHOLDER_DIMENSION_LIMIT = 1e3;
-var DATA_URL_WARN_LIMIT = 4e3;
-var DATA_URL_ERROR_LIMIT = 1e4;
-var BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];
-var PRIORITY_COUNT_THRESHOLD = 10;
-var IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
-var NgOptimizedImage = class _NgOptimizedImage {
-  imageLoader = inject(IMAGE_LOADER);
-  config = processConfig(inject(IMAGE_CONFIG));
-  renderer = inject(Renderer2);
-  imgElement = inject(ElementRef).nativeElement;
-  injector = inject(Injector);
-  isServer = isPlatformServer(inject(PLATFORM_ID));
-  preloadLinkCreator = inject(PreloadLinkCreator);
-  // a LCP image observer - should be injected only in the dev mode
-  lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;
-  /**
-   * Calculate the rewritten `src` once and store it.
-   * This is needed to avoid repetitive calculations and make sure the directive cleanup in the
-   * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other
-   * instance that might be already destroyed).
-   */
-  _renderedSrc = null;
-  /**
-   * Name of the source image.
-   * Image name will be processed by the image loader and the final URL will be applied as the `src`
-   * property of the image.
-   */
-  ngSrc;
-  /**
-   * A comma separated list of width or density descriptors.
-   * The image name will be taken from `ngSrc` and combined with the list of width or density
-   * descriptors to generate the final `srcset` property of the image.
-   *
-   * Example:
-   * ```
-   * <img ngSrc="hello.jpg" ngSrcset="100w, 200w" />  =>
-   * <img src="path/hello.jpg" srcset="path/hello.jpg?w=100 100w, path/hello.jpg?w=200 200w" />
-   * ```
-   */
-  ngSrcset;
-  /**
-   * The base `sizes` attribute passed through to the `<img>` element.
-   * Providing sizes causes the image to create an automatic responsive srcset.
-   */
-  sizes;
-  /**
-   * For responsive images: the intrinsic width of the image in pixels.
-   * For fixed size images: the desired rendered width of the image in pixels.
-   */
-  width;
-  /**
-   * For responsive images: the intrinsic height of the image in pixels.
-   * For fixed size images: the desired rendered height of the image in pixels.
-   */
-  height;
-  /**
-   * The desired loading behavior (lazy, eager, or auto). Defaults to `lazy`,
-   * which is recommended for most images.
-   *
-   * Warning: Setting images as loading="eager" or loading="auto" marks them
-   * as non-priority images and can hurt loading performance. For images which
-   * may be the LCP element, use the `priority` attribute instead of `loading`.
-   */
-  loading;
-  /**
-   * Indicates whether this image should have a high priority.
-   */
-  priority = false;
-  /**
-   * Data to pass through to custom loaders.
-   */
-  loaderParams;
-  /**
-   * Disables automatic srcset generation for this image.
-   */
-  disableOptimizedSrcset = false;
-  /**
-   * Sets the image to "fill mode", which eliminates the height/width requirement and adds
-   * styles such that the image fills its containing element.
-   */
-  fill = false;
-  /**
-   * A URL or data URL for an image to be used as a placeholder while this image loads.
-   */
-  placeholder;
-  /**
-   * Configuration object for placeholder settings. Options:
-   *   * blur: Setting this to false disables the automatic CSS blur.
-   */
-  placeholderConfig;
-  /**
-   * Value of the `src` attribute if set on the host `<img>` element.
-   * This input is exclusively read to assert that `src` is not set in conflict
-   * with `ngSrc` and that images don't start to load until a lazy loading strategy is set.
-   * @internal
-   */
-  src;
-  /**
-   * Value of the `srcset` attribute if set on the host `<img>` element.
-   * This input is exclusively read to assert that `srcset` is not set in conflict
-   * with `ngSrcset` and that images don't start to load until a lazy loading strategy is set.
-   * @internal
-   */
-  srcset;
-  /** @nodoc */
-  ngOnInit() {
-    performanceMarkFeature("NgOptimizedImage");
-    if (ngDevMode) {
-      const ngZone = this.injector.get(NgZone);
-      assertNonEmptyInput(this, "ngSrc", this.ngSrc);
-      assertValidNgSrcset(this, this.ngSrcset);
-      assertNoConflictingSrc(this);
-      if (this.ngSrcset) {
-        assertNoConflictingSrcset(this);
-      }
-      assertNotBase64Image(this);
-      assertNotBlobUrl(this);
-      if (this.fill) {
-        assertEmptyWidthAndHeight(this);
-        ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));
-      } else {
-        assertNonEmptyWidthAndHeight(this);
-        if (this.height !== void 0) {
-          assertGreaterThanZero(this, this.height, "height");
-        }
-        if (this.width !== void 0) {
-          assertGreaterThanZero(this, this.width, "width");
-        }
-        ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));
-      }
-      assertValidLoadingInput(this);
-      if (!this.ngSrcset) {
-        assertNoComplexSizes(this);
-      }
-      assertValidPlaceholder(this, this.imageLoader);
-      assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);
-      assertNoNgSrcsetWithoutLoader(this, this.imageLoader);
-      assertNoLoaderParamsWithoutLoader(this, this.imageLoader);
-      if (this.lcpObserver !== null) {
-        const ngZone2 = this.injector.get(NgZone);
-        ngZone2.runOutsideAngular(() => {
-          this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);
-        });
-      }
-      if (this.priority) {
-        const checker = this.injector.get(PreconnectLinkChecker);
-        checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);
-        if (!this.isServer) {
-          const applicationRef = this.injector.get(ApplicationRef);
-          assetPriorityCountBelowThreshold(applicationRef);
-        }
-      }
-    }
-    if (this.placeholder) {
-      this.removePlaceholderOnLoad(this.imgElement);
-    }
-    this.setHostAttributes();
-  }
-  setHostAttributes() {
-    if (this.fill) {
-      this.sizes ||= "100vw";
-    } else {
-      this.setHostAttribute("width", this.width.toString());
-      this.setHostAttribute("height", this.height.toString());
-    }
-    this.setHostAttribute("loading", this.getLoadingBehavior());
-    this.setHostAttribute("fetchpriority", this.getFetchPriority());
-    this.setHostAttribute("ng-img", "true");
-    const rewrittenSrcset = this.updateSrcAndSrcset();
-    if (this.sizes) {
-      if (this.getLoadingBehavior() === "lazy") {
-        this.setHostAttribute("sizes", "auto, " + this.sizes);
-      } else {
-        this.setHostAttribute("sizes", this.sizes);
-      }
-    } else {
-      if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === "lazy") {
-        this.setHostAttribute("sizes", "auto, 100vw");
-      }
-    }
-    if (this.isServer && this.priority) {
-      this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);
-    }
-  }
-  /** @nodoc */
-  ngOnChanges(changes) {
-    if (ngDevMode) {
-      assertNoPostInitInputChange(this, changes, ["ngSrcset", "width", "height", "priority", "fill", "loading", "sizes", "loaderParams", "disableOptimizedSrcset"]);
-    }
-    if (changes["ngSrc"] && !changes["ngSrc"].isFirstChange()) {
-      const oldSrc = this._renderedSrc;
-      this.updateSrcAndSrcset(true);
-      const newSrc = this._renderedSrc;
-      if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {
-        const ngZone = this.injector.get(NgZone);
-        ngZone.runOutsideAngular(() => {
-          this.lcpObserver?.updateImage(oldSrc, newSrc);
-        });
-      }
-    }
-    if (ngDevMode && changes["placeholder"]?.currentValue && !this.isServer) {
-      assertPlaceholderDimensions(this, this.imgElement);
-    }
-  }
-  callImageLoader(configWithoutCustomParams) {
-    let augmentedConfig = configWithoutCustomParams;
-    if (this.loaderParams) {
-      augmentedConfig.loaderParams = this.loaderParams;
-    }
-    return this.imageLoader(augmentedConfig);
-  }
-  getLoadingBehavior() {
-    if (!this.priority && this.loading !== void 0) {
-      return this.loading;
-    }
-    return this.priority ? "eager" : "lazy";
-  }
-  getFetchPriority() {
-    return this.priority ? "high" : "auto";
-  }
-  getRewrittenSrc() {
-    if (!this._renderedSrc) {
-      const imgConfig = {
-        src: this.ngSrc
-      };
-      this._renderedSrc = this.callImageLoader(imgConfig);
-    }
-    return this._renderedSrc;
-  }
-  getRewrittenSrcset() {
-    const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);
-    const finalSrcs = this.ngSrcset.split(",").filter((src) => src !== "").map((srcStr) => {
-      srcStr = srcStr.trim();
-      const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;
-      return `${this.callImageLoader({
-        src: this.ngSrc,
-        width
-      })} ${srcStr}`;
-    });
-    return finalSrcs.join(", ");
-  }
-  getAutomaticSrcset() {
-    if (this.sizes) {
-      return this.getResponsiveSrcset();
-    } else {
-      return this.getFixedSrcset();
-    }
-  }
-  getResponsiveSrcset() {
-    const {
-      breakpoints
-    } = this.config;
-    let filteredBreakpoints = breakpoints;
-    if (this.sizes?.trim() === "100vw") {
-      filteredBreakpoints = breakpoints.filter((bp) => bp >= VIEWPORT_BREAKPOINT_CUTOFF);
-    }
-    const finalSrcs = filteredBreakpoints.map((bp) => `${this.callImageLoader({
-      src: this.ngSrc,
-      width: bp
-    })} ${bp}w`);
-    return finalSrcs.join(", ");
-  }
-  updateSrcAndSrcset(forceSrcRecalc = false) {
-    if (forceSrcRecalc) {
-      this._renderedSrc = null;
-    }
-    const rewrittenSrc = this.getRewrittenSrc();
-    this.setHostAttribute("src", rewrittenSrc);
-    let rewrittenSrcset = void 0;
-    if (this.ngSrcset) {
-      rewrittenSrcset = this.getRewrittenSrcset();
-    } else if (this.shouldGenerateAutomaticSrcset()) {
-      rewrittenSrcset = this.getAutomaticSrcset();
-    }
-    if (rewrittenSrcset) {
-      this.setHostAttribute("srcset", rewrittenSrcset);
-    }
-    return rewrittenSrcset;
-  }
-  getFixedSrcset() {
-    const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map((multiplier) => `${this.callImageLoader({
-      src: this.ngSrc,
-      width: this.width * multiplier
-    })} ${multiplier}x`);
-    return finalSrcs.join(", ");
-  }
-  shouldGenerateAutomaticSrcset() {
-    let oversizedImage = false;
-    if (!this.sizes) {
-      oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;
-    }
-    return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;
-  }
-  /**
-   * Returns an image url formatted for use with the CSS background-image property. Expects one of:
-   * * A base64 encoded image, which is wrapped and passed through.
-   * * A boolean. If true, calls the image loader to generate a small placeholder url.
-   */
-  generatePlaceholder(placeholderInput) {
-    const {
-      placeholderResolution
-    } = this.config;
-    if (placeholderInput === true) {
-      return `url(${this.callImageLoader({
-        src: this.ngSrc,
-        width: placeholderResolution,
-        isPlaceholder: true
-      })})`;
-    } else if (typeof placeholderInput === "string") {
-      return `url(${placeholderInput})`;
-    }
-    return null;
-  }
-  /**
-   * Determines if blur should be applied, based on an optional boolean
-   * property `blur` within the optional configuration object `placeholderConfig`.
-   */
-  shouldBlurPlaceholder(placeholderConfig) {
-    if (!placeholderConfig || !placeholderConfig.hasOwnProperty("blur")) {
-      return true;
-    }
-    return Boolean(placeholderConfig.blur);
-  }
-  removePlaceholderOnLoad(img) {
-    const callback = () => {
-      const changeDetectorRef = this.injector.get(ChangeDetectorRef);
-      removeLoadListenerFn();
-      removeErrorListenerFn();
-      this.placeholder = false;
-      changeDetectorRef.markForCheck();
-    };
-    const removeLoadListenerFn = this.renderer.listen(img, "load", callback);
-    const removeErrorListenerFn = this.renderer.listen(img, "error", callback);
-    callOnLoadIfImageIsLoaded(img, callback);
-  }
-  /** @nodoc */
-  ngOnDestroy() {
-    if (ngDevMode) {
-      if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {
-        this.lcpObserver.unregisterImage(this._renderedSrc);
-      }
-    }
-  }
-  setHostAttribute(name, value) {
-    this.renderer.setAttribute(this.imgElement, name, value);
-  }
-  static ɵfac = function NgOptimizedImage_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _NgOptimizedImage)();
-  };
-  static ɵdir = ɵɵdefineDirective({
-    type: _NgOptimizedImage,
-    selectors: [["img", "ngSrc", ""]],
-    hostVars: 18,
-    hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {
-      if (rf & 2) {
-        ɵɵstyleProp("position", ctx.fill ? "absolute" : null)("width", ctx.fill ? "100%" : null)("height", ctx.fill ? "100%" : null)("inset", ctx.fill ? "0" : null)("background-size", ctx.placeholder ? "cover" : null)("background-position", ctx.placeholder ? "50% 50%" : null)("background-repeat", ctx.placeholder ? "no-repeat" : null)("background-image", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)("filter", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? "blur(15px)" : null);
-      }
-    },
-    inputs: {
-      ngSrc: [2, "ngSrc", "ngSrc", unwrapSafeUrl],
-      ngSrcset: "ngSrcset",
-      sizes: "sizes",
-      width: [2, "width", "width", numberAttribute],
-      height: [2, "height", "height", numberAttribute],
-      loading: "loading",
-      priority: [2, "priority", "priority", booleanAttribute],
-      loaderParams: "loaderParams",
-      disableOptimizedSrcset: [2, "disableOptimizedSrcset", "disableOptimizedSrcset", booleanAttribute],
-      fill: [2, "fill", "fill", booleanAttribute],
-      placeholder: [2, "placeholder", "placeholder", booleanOrUrlAttribute],
-      placeholderConfig: "placeholderConfig",
-      src: "src",
-      srcset: "srcset"
-    },
-    features: [ɵɵInputTransformsFeature, ɵɵNgOnChangesFeature]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgOptimizedImage, [{
-    type: Directive,
-    args: [{
-      selector: "img[ngSrc]",
-      host: {
-        "[style.position]": 'fill ? "absolute" : null',
-        "[style.width]": 'fill ? "100%" : null',
-        "[style.height]": 'fill ? "100%" : null',
-        "[style.inset]": 'fill ? "0" : null',
-        "[style.background-size]": 'placeholder ? "cover" : null',
-        "[style.background-position]": 'placeholder ? "50% 50%" : null',
-        "[style.background-repeat]": 'placeholder ? "no-repeat" : null',
-        "[style.background-image]": "placeholder ? generatePlaceholder(placeholder) : null",
-        "[style.filter]": `placeholder && shouldBlurPlaceholder(placeholderConfig) ? "blur(${PLACEHOLDER_BLUR_AMOUNT}px)" : null`
-      }
-    }]
-  }], null, {
-    ngSrc: [{
-      type: Input,
-      args: [{
-        required: true,
-        transform: unwrapSafeUrl
-      }]
-    }],
-    ngSrcset: [{
-      type: Input
-    }],
-    sizes: [{
-      type: Input
-    }],
-    width: [{
-      type: Input,
-      args: [{
-        transform: numberAttribute
-      }]
-    }],
-    height: [{
-      type: Input,
-      args: [{
-        transform: numberAttribute
-      }]
-    }],
-    loading: [{
-      type: Input
-    }],
-    priority: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    loaderParams: [{
-      type: Input
-    }],
-    disableOptimizedSrcset: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    fill: [{
-      type: Input,
-      args: [{
-        transform: booleanAttribute
-      }]
-    }],
-    placeholder: [{
-      type: Input,
-      args: [{
-        transform: booleanOrUrlAttribute
-      }]
-    }],
-    placeholderConfig: [{
-      type: Input
-    }],
-    src: [{
-      type: Input
-    }],
-    srcset: [{
-      type: Input
-    }]
-  });
-})();
-function processConfig(config) {
-  let sortedBreakpoints = {};
-  if (config.breakpoints) {
-    sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);
-  }
-  return Object.assign({}, IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);
-}
-function assertNoConflictingSrc(dir) {
-  if (dir.src) {
-    throw new RuntimeError(2950, `${imgDirectiveDetails(dir.ngSrc)} both \`src\` and \`ngSrc\` have been set. Supplying both of these attributes breaks lazy loading. The NgOptimizedImage directive sets \`src\` itself based on the value of \`ngSrc\`. To fix this, please remove the \`src\` attribute.`);
-  }
-}
-function assertNoConflictingSrcset(dir) {
-  if (dir.srcset) {
-    throw new RuntimeError(2951, `${imgDirectiveDetails(dir.ngSrc)} both \`srcset\` and \`ngSrcset\` have been set. Supplying both of these attributes breaks lazy loading. The NgOptimizedImage directive sets \`srcset\` itself based on the value of \`ngSrcset\`. To fix this, please remove the \`srcset\` attribute.`);
-  }
-}
-function assertNotBase64Image(dir) {
-  let ngSrc = dir.ngSrc.trim();
-  if (ngSrc.startsWith("data:")) {
-    if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {
-      ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + "...";
-    }
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`ngSrc\` is a Base64-encoded string (${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. To fix this, disable the NgOptimizedImage directive for this element by removing \`ngSrc\` and using a standard \`src\` attribute instead.`);
-  }
-}
-function assertNoComplexSizes(dir) {
-  let sizes = dir.sizes;
-  if (sizes?.match(/((\)|,)\s|^)\d+px/)) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`sizes\` was set to a string including pixel values. For automatic \`srcset\` generation, \`sizes\` must only include responsive values, such as \`sizes="50vw"\` or \`sizes="(min-width: 768px) 50vw, 100vw"\`. To fix this, modify the \`sizes\` attribute, or provide your own \`ngSrcset\` value directly.`);
-  }
-}
-function assertValidPlaceholder(dir, imageLoader) {
-  assertNoPlaceholderConfigWithoutPlaceholder(dir);
-  assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);
-  assertNoOversizedDataUrl(dir);
-}
-function assertNoPlaceholderConfigWithoutPlaceholder(dir) {
-  if (dir.placeholderConfig && !dir.placeholder) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc, false)} \`placeholderConfig\` options were provided for an image that does not use the \`placeholder\` attribute, and will have no effect.`);
-  }
-}
-function assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {
-  if (dir.placeholder === true && imageLoader === noopImageLoader) {
-    throw new RuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to true but no image loader is configured (i.e. the default one is being used), which would result in the same image being used for the primary image and its placeholder. To fix this, provide a loader or remove the \`placeholder\` attribute from the image.`);
-  }
-}
-function assertNoOversizedDataUrl(dir) {
-  if (dir.placeholder && typeof dir.placeholder === "string" && dir.placeholder.startsWith("data:")) {
-    if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {
-      throw new RuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders directly increase the bundle size of Angular and hurt page load performance. To fix this, generate a smaller data URL placeholder.`);
-    }
-    if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {
-      console.warn(formatRuntimeError(2965, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders directly increase the bundle size of Angular and hurt page load performance. For better loading performance, generate a smaller data URL placeholder.`));
-    }
-  }
-}
-function assertNotBlobUrl(dir) {
-  const ngSrc = dir.ngSrc.trim();
-  if (ngSrc.startsWith("blob:")) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrc\` was set to a blob URL (${ngSrc}). Blob URLs are not supported by the NgOptimizedImage directive. To fix this, disable the NgOptimizedImage directive for this element by removing \`ngSrc\` and using a regular \`src\` attribute instead.`);
-  }
-}
-function assertNonEmptyInput(dir, name, value) {
-  const isString = typeof value === "string";
-  const isEmptyString = isString && value.trim() === "";
-  if (!isString || isEmptyString) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`${name}\` has an invalid value (\`${value}\`). To fix this, change the value to a non-empty string.`);
-  }
-}
-function assertValidNgSrcset(dir, value) {
-  if (value == null) return;
-  assertNonEmptyInput(dir, "ngSrcset", value);
-  const stringVal = value;
-  const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);
-  const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);
-  if (isValidDensityDescriptor) {
-    assertUnderDensityCap(dir, stringVal);
-  }
-  const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;
-  if (!isValidSrcset) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrcset\` has an invalid value (\`${value}\`). To fix this, supply \`ngSrcset\` using a comma-separated list of one or more width descriptors (e.g. "100w, 200w") or density descriptors (e.g. "1x, 2x").`);
-  }
-}
-function assertUnderDensityCap(dir, value) {
-  const underDensityCap = value.split(",").every((num) => num === "" || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);
-  if (!underDensityCap) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` contains an unsupported image density:\`${value}\`. NgOptimizedImage generally recommends a max image density of ${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for most use cases. Images that will be pinch-zoomed are typically the primary use case for ${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);
-  }
-}
-function postInitInputChangeError(dir, inputName) {
-  let reason;
-  if (inputName === "width" || inputName === "height") {
-    reason = `Changing \`${inputName}\` may result in different attribute value applied to the underlying image element and cause layout shifts on a page.`;
-  } else {
-    reason = `Changing the \`${inputName}\` would have no effect on the underlying image element, because the resource loading has already occurred.`;
-  }
-  return new RuntimeError(2953, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` was updated after initialization. The NgOptimizedImage directive will not react to this input change. ${reason} To fix this, either switch \`${inputName}\` to a static value or wrap the image element in an @if that is gated on the necessary value.`);
-}
-function assertNoPostInitInputChange(dir, changes, inputs) {
-  inputs.forEach((input) => {
-    const isUpdated = changes.hasOwnProperty(input);
-    if (isUpdated && !changes[input].isFirstChange()) {
-      if (input === "ngSrc") {
-        dir = {
-          ngSrc: changes[input].previousValue
-        };
-      }
-      throw postInitInputChangeError(dir, input);
-    }
-  });
-}
-function assertGreaterThanZero(dir, inputValue, inputName) {
-  const validNumber = typeof inputValue === "number" && inputValue > 0;
-  const validString = typeof inputValue === "string" && /^\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;
-  if (!validNumber && !validString) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` has an invalid value. To fix this, provide \`${inputName}\` as a number greater than 0.`);
-  }
-}
-function assertNoImageDistortion(dir, img, renderer) {
-  const callback = () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-    const computedStyle = window.getComputedStyle(img);
-    let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-    let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-    const boxSizing = computedStyle.getPropertyValue("box-sizing");
-    if (boxSizing === "border-box") {
-      const paddingTop = computedStyle.getPropertyValue("padding-top");
-      const paddingRight = computedStyle.getPropertyValue("padding-right");
-      const paddingBottom = computedStyle.getPropertyValue("padding-bottom");
-      const paddingLeft = computedStyle.getPropertyValue("padding-left");
-      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
-      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
-    }
-    const renderedAspectRatio = renderedWidth / renderedHeight;
-    const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;
-    const intrinsicWidth = img.naturalWidth;
-    const intrinsicHeight = img.naturalHeight;
-    const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;
-    const suppliedWidth = dir.width;
-    const suppliedHeight = dir.height;
-    const suppliedAspectRatio = suppliedWidth / suppliedHeight;
-    const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;
-    const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;
-    if (inaccurateDimensions) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match the aspect ratio indicated by the width and height attributes. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h (aspect-ratio: ${round(intrinsicAspectRatio)}). 
-Supplied width and height attributes: ${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). 
-To fix this, update the width and height attributes.`));
-    } else if (stylingDistortion) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image does not match the image's intrinsic aspect ratio. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h (aspect-ratio: ${round(intrinsicAspectRatio)}). 
-Rendered image size: ${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ${round(renderedAspectRatio)}). 
-This issue can occur if "width" and "height" attributes are added to an image without updating the corresponding image styling. To fix this, adjust image styling. In most cases, adding "height: auto" or "width: auto" to the image styling will fix this issue.`));
-    } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {
-      const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;
-      const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;
-      const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
-      const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
-      if (oversizedWidth || oversizedHeight) {
-        console.warn(formatRuntimeError(2960, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly larger than necessary. 
-Rendered image size: ${renderedWidth}w x ${renderedHeight}h. 
-Intrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. 
-Recommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. 
-Note: Recommended intrinsic image size is calculated assuming a maximum DPR of ${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image or consider using the "ngSrcset" and "sizes" attributes.`));
-      }
-    }
-  };
-  const removeLoadListenerFn = renderer.listen(img, "load", callback);
-  const removeErrorListenerFn = renderer.listen(img, "error", () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-  });
-  callOnLoadIfImageIsLoaded(img, callback);
-}
-function assertNonEmptyWidthAndHeight(dir) {
-  let missingAttributes = [];
-  if (dir.width === void 0) missingAttributes.push("width");
-  if (dir.height === void 0) missingAttributes.push("height");
-  if (missingAttributes.length > 0) {
-    throw new RuntimeError(2954, `${imgDirectiveDetails(dir.ngSrc)} these required attributes are missing: ${missingAttributes.map((attr) => `"${attr}"`).join(", ")}. Including "width" and "height" attributes will prevent image-related layout shifts. To fix this, include "width" and "height" attributes on the image tag or turn on "fill" mode with the \`fill\` attribute.`);
-  }
-}
-function assertEmptyWidthAndHeight(dir) {
-  if (dir.width || dir.height) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the attributes \`height\` and/or \`width\` are present along with the \`fill\` attribute. Because \`fill\` mode causes an image to fill its containing element, the size attributes have no effect and should be removed.`);
-  }
-}
-function assertNonZeroRenderedHeight(dir, img, renderer) {
-  const callback = () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-    const renderedHeight = img.clientHeight;
-    if (dir.fill && renderedHeight === 0) {
-      console.warn(formatRuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. This is likely because the containing element does not have the CSS 'position' property set to one of the following: "relative", "fixed", or "absolute". To fix this problem, make sure the container element has the CSS 'position' property defined and the height of the element is not zero.`));
-    }
-  };
-  const removeLoadListenerFn = renderer.listen(img, "load", callback);
-  const removeErrorListenerFn = renderer.listen(img, "error", () => {
-    removeLoadListenerFn();
-    removeErrorListenerFn();
-  });
-  callOnLoadIfImageIsLoaded(img, callback);
-}
-function assertValidLoadingInput(dir) {
-  if (dir.loading && dir.priority) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute was used on an image that was marked "priority". Setting \`loading\` on priority images is not allowed because these images will always be eagerly loaded. To fix this, remove the “loading” attribute from the priority image.`);
-  }
-  const validInputs = ["auto", "eager", "lazy"];
-  if (typeof dir.loading === "string" && !validInputs.includes(dir.loading)) {
-    throw new RuntimeError(2952, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute has an invalid value (\`${dir.loading}\`). To fix this, provide a valid value ("lazy", "eager", or "auto").`);
-  }
-}
-function assertNotMissingBuiltInLoader(ngSrc, imageLoader) {
-  if (imageLoader === noopImageLoader) {
-    let builtInLoaderName = "";
-    for (const loader of BUILT_IN_LOADERS) {
-      if (loader.testUrl(ngSrc)) {
-        builtInLoaderName = loader.name;
-        break;
-      }
-    }
-    if (builtInLoaderName) {
-      console.warn(formatRuntimeError(2962, `NgOptimizedImage: It looks like your images may be hosted on the ${builtInLoaderName} CDN, but your app is not using Angular's built-in loader for that CDN. We recommend switching to use the built-in by calling \`provide${builtInLoaderName}Loader()\` in your \`providers\` and passing it your instance's base URL. If you don't want to use the built-in loader, define a custom loader function using IMAGE_LOADER to silence this warning.`));
-    }
-  }
-}
-function assertNoNgSrcsetWithoutLoader(dir, imageLoader) {
-  if (dir.ngSrcset && imageLoader === noopImageLoader) {
-    console.warn(formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` attribute is present but no image loader is configured (i.e. the default one is being used), which would result in the same image being used for all configured sizes. To fix this, provide a loader or remove the \`ngSrcset\` attribute from the image.`));
-  }
-}
-function assertNoLoaderParamsWithoutLoader(dir, imageLoader) {
-  if (dir.loaderParams && imageLoader === noopImageLoader) {
-    console.warn(formatRuntimeError(2963, `${imgDirectiveDetails(dir.ngSrc)} the \`loaderParams\` attribute is present but no image loader is configured (i.e. the default one is being used), which means that the loaderParams data will not be consumed and will not affect the URL. To fix this, provide a custom loader or remove the \`loaderParams\` attribute from the image.`));
-  }
-}
-function assetPriorityCountBelowThreshold(appRef) {
-  return __async(this, null, function* () {
-    if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {
-      IMGS_WITH_PRIORITY_ATTR_COUNT++;
-      yield appRef.whenStable();
-      if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {
-        console.warn(formatRuntimeError(2966, `NgOptimizedImage: The "priority" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). Marking too many images as "high" priority can hurt your application's LCP (https://web.dev/lcp). "Priority" should only be set on the image expected to be the page's LCP element.`));
-      }
-    } else {
-      IMGS_WITH_PRIORITY_ATTR_COUNT++;
-    }
-  });
-}
-function assertPlaceholderDimensions(dir, imgElement) {
-  const computedStyle = window.getComputedStyle(imgElement);
-  let renderedWidth = parseFloat(computedStyle.getPropertyValue("width"));
-  let renderedHeight = parseFloat(computedStyle.getPropertyValue("height"));
-  if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {
-    console.warn(formatRuntimeError(2967, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. To fix this, use a smaller image as a placeholder.`));
-  }
-}
-function callOnLoadIfImageIsLoaded(img, callback) {
-  if (img.complete && img.naturalWidth) {
-    callback();
-  }
-}
-function round(input) {
-  return Number.isInteger(input) ? input : input.toFixed(2);
-}
-function unwrapSafeUrl(value) {
-  if (typeof value === "string") {
-    return value;
-  }
-  return unwrapSafeValue(value);
-}
-function booleanOrUrlAttribute(value) {
-  if (typeof value === "string" && value !== "true" && value !== "false" && value !== "") {
-    return value;
-  }
-  return booleanAttribute(value);
-}
-
-// node_modules/@angular/common/fesm2022/http.mjs
-var import_rxjs2 = __toESM(require_cjs(), 1);
-var import_operators = __toESM(require_operators(), 1);
-var HttpHandler = class {
-};
-var HttpBackend = class {
-};
-var HttpHeaders = class _HttpHeaders {
-  /**
-   * Internal map of lowercase header names to values.
-   */
-  // TODO(issue/24571): remove '!'.
-  headers;
-  /**
-   * Internal map of lowercased header names to the normalized
-   * form of the name (the form seen first).
-   */
-  normalizedNames = /* @__PURE__ */ new Map();
-  /**
-   * Complete the lazy initialization of this object (needed before reading).
-   */
-  lazyInit;
-  /**
-   * Queued updates to be materialized the next initialization.
-   */
-  lazyUpdate = null;
-  /**  Constructs a new HTTP header object with the given values.*/
-  constructor(headers) {
-    if (!headers) {
-      this.headers = /* @__PURE__ */ new Map();
-    } else if (typeof headers === "string") {
-      this.lazyInit = () => {
-        this.headers = /* @__PURE__ */ new Map();
-        headers.split("\n").forEach((line) => {
-          const index = line.indexOf(":");
-          if (index > 0) {
-            const name = line.slice(0, index);
-            const value = line.slice(index + 1).trim();
-            this.addHeaderEntry(name, value);
-          }
-        });
-      };
-    } else if (typeof Headers !== "undefined" && headers instanceof Headers) {
-      this.headers = /* @__PURE__ */ new Map();
-      headers.forEach((value, name) => {
-        this.addHeaderEntry(name, value);
-      });
-    } else {
-      this.lazyInit = () => {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          assertValidHeaders(headers);
-        }
-        this.headers = /* @__PURE__ */ new Map();
-        Object.entries(headers).forEach(([name, values]) => {
-          this.setHeaderEntries(name, values);
-        });
-      };
-    }
-  }
-  /**
-   * Checks for existence of a given header.
-   *
-   * @param name The header name to check for existence.
-   *
-   * @returns True if the header exists, false otherwise.
-   */
-  has(name) {
-    this.init();
-    return this.headers.has(name.toLowerCase());
-  }
-  /**
-   * Retrieves the first value of a given header.
-   *
-   * @param name The header name.
-   *
-   * @returns The value string if the header exists, null otherwise
-   */
-  get(name) {
-    this.init();
-    const values = this.headers.get(name.toLowerCase());
-    return values && values.length > 0 ? values[0] : null;
-  }
-  /**
-   * Retrieves the names of the headers.
-   *
-   * @returns A list of header names.
-   */
-  keys() {
-    this.init();
-    return Array.from(this.normalizedNames.values());
-  }
-  /**
-   * Retrieves a list of values for a given header.
-   *
-   * @param name The header name from which to retrieve values.
-   *
-   * @returns A string of values if the header exists, null otherwise.
-   */
-  getAll(name) {
-    this.init();
-    return this.headers.get(name.toLowerCase()) || null;
-  }
-  /**
-   * Appends a new value to the existing set of values for a header
-   * and returns them in a clone of the original instance.
-   *
-   * @param name The header name for which to append the values.
-   * @param value The value to append.
-   *
-   * @returns A clone of the HTTP headers object with the value appended to the given header.
-   */
-  append(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "a"
-    });
-  }
-  /**
-   * Sets or modifies a value for a given header in a clone of the original instance.
-   * If the header already exists, its value is replaced with the given value
-   * in the returned object.
-   *
-   * @param name The header name.
-   * @param value The value or values to set or override for the given header.
-   *
-   * @returns A clone of the HTTP headers object with the newly set header value.
-   */
-  set(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "s"
-    });
-  }
-  /**
-   * Deletes values for a given header in a clone of the original instance.
-   *
-   * @param name The header name.
-   * @param value The value or values to delete for the given header.
-   *
-   * @returns A clone of the HTTP headers object with the given value deleted.
-   */
-  delete(name, value) {
-    return this.clone({
-      name,
-      value,
-      op: "d"
-    });
-  }
-  maybeSetNormalizedName(name, lcName) {
-    if (!this.normalizedNames.has(lcName)) {
-      this.normalizedNames.set(lcName, name);
-    }
-  }
-  init() {
-    if (!!this.lazyInit) {
-      if (this.lazyInit instanceof _HttpHeaders) {
-        this.copyFrom(this.lazyInit);
-      } else {
-        this.lazyInit();
-      }
-      this.lazyInit = null;
-      if (!!this.lazyUpdate) {
-        this.lazyUpdate.forEach((update) => this.applyUpdate(update));
-        this.lazyUpdate = null;
-      }
-    }
-  }
-  copyFrom(other) {
-    other.init();
-    Array.from(other.headers.keys()).forEach((key) => {
-      this.headers.set(key, other.headers.get(key));
-      this.normalizedNames.set(key, other.normalizedNames.get(key));
-    });
-  }
-  clone(update) {
-    const clone = new _HttpHeaders();
-    clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof _HttpHeaders ? this.lazyInit : this;
-    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);
-    return clone;
-  }
-  applyUpdate(update) {
-    const key = update.name.toLowerCase();
-    switch (update.op) {
-      case "a":
-      case "s":
-        let value = update.value;
-        if (typeof value === "string") {
-          value = [value];
-        }
-        if (value.length === 0) {
-          return;
-        }
-        this.maybeSetNormalizedName(update.name, key);
-        const base = (update.op === "a" ? this.headers.get(key) : void 0) || [];
-        base.push(...value);
-        this.headers.set(key, base);
-        break;
-      case "d":
-        const toDelete = update.value;
-        if (!toDelete) {
-          this.headers.delete(key);
-          this.normalizedNames.delete(key);
-        } else {
-          let existing = this.headers.get(key);
-          if (!existing) {
-            return;
-          }
-          existing = existing.filter((value2) => toDelete.indexOf(value2) === -1);
-          if (existing.length === 0) {
-            this.headers.delete(key);
-            this.normalizedNames.delete(key);
-          } else {
-            this.headers.set(key, existing);
-          }
-        }
-        break;
-    }
-  }
-  addHeaderEntry(name, value) {
-    const key = name.toLowerCase();
-    this.maybeSetNormalizedName(name, key);
-    if (this.headers.has(key)) {
-      this.headers.get(key).push(value);
-    } else {
-      this.headers.set(key, [value]);
-    }
-  }
-  setHeaderEntries(name, values) {
-    const headerValues = (Array.isArray(values) ? values : [values]).map((value) => value.toString());
-    const key = name.toLowerCase();
-    this.headers.set(key, headerValues);
-    this.maybeSetNormalizedName(name, key);
-  }
-  /**
-   * @internal
-   */
-  forEach(fn) {
-    this.init();
-    Array.from(this.normalizedNames.keys()).forEach((key) => fn(this.normalizedNames.get(key), this.headers.get(key)));
-  }
-};
-function assertValidHeaders(headers) {
-  for (const [key, value] of Object.entries(headers)) {
-    if (!(typeof value === "string" || typeof value === "number") && !Array.isArray(value)) {
-      throw new Error(`Unexpected value of the \`${key}\` header provided. Expecting either a string, a number or an array, but got: \`${value}\`.`);
-    }
-  }
-}
-var HttpUrlEncodingCodec = class {
-  /**
-   * Encodes a key name for a URL parameter or query-string.
-   * @param key The key name.
-   * @returns The encoded key name.
-   */
-  encodeKey(key) {
-    return standardEncoding(key);
-  }
-  /**
-   * Encodes the value of a URL parameter or query-string.
-   * @param value The value.
-   * @returns The encoded value.
-   */
-  encodeValue(value) {
-    return standardEncoding(value);
-  }
-  /**
-   * Decodes an encoded URL parameter or query-string key.
-   * @param key The encoded key name.
-   * @returns The decoded key name.
-   */
-  decodeKey(key) {
-    return decodeURIComponent(key);
-  }
-  /**
-   * Decodes an encoded URL parameter or query-string value.
-   * @param value The encoded value.
-   * @returns The decoded value.
-   */
-  decodeValue(value) {
-    return decodeURIComponent(value);
-  }
-};
-function paramParser(rawParams, codec) {
-  const map2 = /* @__PURE__ */ new Map();
-  if (rawParams.length > 0) {
-    const params = rawParams.replace(/^\?/, "").split("&");
-    params.forEach((param) => {
-      const eqIdx = param.indexOf("=");
-      const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ""] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];
-      const list = map2.get(key) || [];
-      list.push(val);
-      map2.set(key, list);
-    });
-  }
-  return map2;
-}
-var STANDARD_ENCODING_REGEX = /%(\d[a-f0-9])/gi;
-var STANDARD_ENCODING_REPLACEMENTS = {
-  "40": "@",
-  "3A": ":",
-  "24": "$",
-  "2C": ",",
-  "3B": ";",
-  "3D": "=",
-  "3F": "?",
-  "2F": "/"
-};
-function standardEncoding(v) {
-  return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);
-}
-function valueToString(value) {
-  return `${value}`;
-}
-var HttpParams = class _HttpParams {
-  map;
-  encoder;
-  updates = null;
-  cloneFrom = null;
-  constructor(options = {}) {
-    this.encoder = options.encoder || new HttpUrlEncodingCodec();
-    if (!!options.fromString) {
-      if (!!options.fromObject) {
-        throw new Error(`Cannot specify both fromString and fromObject.`);
-      }
-      this.map = paramParser(options.fromString, this.encoder);
-    } else if (!!options.fromObject) {
-      this.map = /* @__PURE__ */ new Map();
-      Object.keys(options.fromObject).forEach((key) => {
-        const value = options.fromObject[key];
-        const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];
-        this.map.set(key, values);
-      });
-    } else {
-      this.map = null;
-    }
-  }
-  /**
-   * Reports whether the body includes one or more values for a given parameter.
-   * @param param The parameter name.
-   * @returns True if the parameter has one or more values,
-   * false if it has no value or is not present.
-   */
-  has(param) {
-    this.init();
-    return this.map.has(param);
-  }
-  /**
-   * Retrieves the first value for a parameter.
-   * @param param The parameter name.
-   * @returns The first value of the given parameter,
-   * or `null` if the parameter is not present.
-   */
-  get(param) {
-    this.init();
-    const res = this.map.get(param);
-    return !!res ? res[0] : null;
-  }
-  /**
-   * Retrieves all values for a  parameter.
-   * @param param The parameter name.
-   * @returns All values in a string array,
-   * or `null` if the parameter not present.
-   */
-  getAll(param) {
-    this.init();
-    return this.map.get(param) || null;
-  }
-  /**
-   * Retrieves all the parameters for this body.
-   * @returns The parameter names in a string array.
-   */
-  keys() {
-    this.init();
-    return Array.from(this.map.keys());
-  }
-  /**
-   * Appends a new value to existing values for a parameter.
-   * @param param The parameter name.
-   * @param value The new value to add.
-   * @return A new body with the appended value.
-   */
-  append(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "a"
-    });
-  }
-  /**
-   * Constructs a new body with appended values for the given parameter name.
-   * @param params parameters and values
-   * @return A new body with the new value.
-   */
-  appendAll(params) {
-    const updates = [];
-    Object.keys(params).forEach((param) => {
-      const value = params[param];
-      if (Array.isArray(value)) {
-        value.forEach((_value) => {
-          updates.push({
-            param,
-            value: _value,
-            op: "a"
-          });
-        });
-      } else {
-        updates.push({
-          param,
-          value,
-          op: "a"
-        });
-      }
-    });
-    return this.clone(updates);
-  }
-  /**
-   * Replaces the value for a parameter.
-   * @param param The parameter name.
-   * @param value The new value.
-   * @return A new body with the new value.
-   */
-  set(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "s"
-    });
-  }
-  /**
-   * Removes a given value or all values from a parameter.
-   * @param param The parameter name.
-   * @param value The value to remove, if provided.
-   * @return A new body with the given value removed, or with all values
-   * removed if no value is specified.
-   */
-  delete(param, value) {
-    return this.clone({
-      param,
-      value,
-      op: "d"
-    });
-  }
-  /**
-   * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are
-   * separated by `&`s.
-   */
-  toString() {
-    this.init();
-    return this.keys().map((key) => {
-      const eKey = this.encoder.encodeKey(key);
-      return this.map.get(key).map((value) => eKey + "=" + this.encoder.encodeValue(value)).join("&");
-    }).filter((param) => param !== "").join("&");
-  }
-  clone(update) {
-    const clone = new _HttpParams({
-      encoder: this.encoder
-    });
-    clone.cloneFrom = this.cloneFrom || this;
-    clone.updates = (this.updates || []).concat(update);
-    return clone;
-  }
-  init() {
-    if (this.map === null) {
-      this.map = /* @__PURE__ */ new Map();
-    }
-    if (this.cloneFrom !== null) {
-      this.cloneFrom.init();
-      this.cloneFrom.keys().forEach((key) => this.map.set(key, this.cloneFrom.map.get(key)));
-      this.updates.forEach((update) => {
-        switch (update.op) {
-          case "a":
-          case "s":
-            const base = (update.op === "a" ? this.map.get(update.param) : void 0) || [];
-            base.push(valueToString(update.value));
-            this.map.set(update.param, base);
-            break;
-          case "d":
-            if (update.value !== void 0) {
-              let base2 = this.map.get(update.param) || [];
-              const idx = base2.indexOf(valueToString(update.value));
-              if (idx !== -1) {
-                base2.splice(idx, 1);
-              }
-              if (base2.length > 0) {
-                this.map.set(update.param, base2);
-              } else {
-                this.map.delete(update.param);
-              }
-            } else {
-              this.map.delete(update.param);
-              break;
-            }
-        }
-      });
-      this.cloneFrom = this.updates = null;
-    }
-  }
-};
-var HttpContext = class {
-  map = /* @__PURE__ */ new Map();
-  /**
-   * Store a value in the context. If a value is already present it will be overwritten.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   * @param value The value to store.
-   *
-   * @returns A reference to itself for easy chaining.
-   */
-  set(token, value) {
-    this.map.set(token, value);
-    return this;
-  }
-  /**
-   * Retrieve the value associated with the given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns The stored value or default if one is defined.
-   */
-  get(token) {
-    if (!this.map.has(token)) {
-      this.map.set(token, token.defaultValue());
-    }
-    return this.map.get(token);
-  }
-  /**
-   * Delete the value associated with the given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns A reference to itself for easy chaining.
-   */
-  delete(token) {
-    this.map.delete(token);
-    return this;
-  }
-  /**
-   * Checks for existence of a given token.
-   *
-   * @param token The reference to an instance of `HttpContextToken`.
-   *
-   * @returns True if the token exists, false otherwise.
-   */
-  has(token) {
-    return this.map.has(token);
-  }
-  /**
-   * @returns a list of tokens currently stored in the context.
-   */
-  keys() {
-    return this.map.keys();
-  }
-};
-function mightHaveBody(method) {
-  switch (method) {
-    case "DELETE":
-    case "GET":
-    case "HEAD":
-    case "OPTIONS":
-    case "JSONP":
-      return false;
-    default:
-      return true;
-  }
-}
-function isArrayBuffer(value) {
-  return typeof ArrayBuffer !== "undefined" && value instanceof ArrayBuffer;
-}
-function isBlob(value) {
-  return typeof Blob !== "undefined" && value instanceof Blob;
-}
-function isFormData(value) {
-  return typeof FormData !== "undefined" && value instanceof FormData;
-}
-function isUrlSearchParams(value) {
-  return typeof URLSearchParams !== "undefined" && value instanceof URLSearchParams;
-}
-var HttpRequest = class _HttpRequest {
-  url;
-  /**
-   * The request body, or `null` if one isn't set.
-   *
-   * Bodies are not enforced to be immutable, as they can include a reference to any
-   * user-defined data type. However, interceptors should take care to preserve
-   * idempotence by treating them as such.
-   */
-  body = null;
-  /**
-   * Outgoing headers for this request.
-   */
-  // TODO(issue/24571): remove '!'.
-  headers;
-  /**
-   * Shared and mutable context that can be used by interceptors
-   */
-  context;
-  /**
-   * Whether this request should be made in a way that exposes progress events.
-   *
-   * Progress events are expensive (change detection runs on each event) and so
-   * they should only be requested if the consumer intends to monitor them.
-   *
-   * Note: The `FetchBackend` doesn't support progress report on uploads.
-   */
-  reportProgress = false;
-  /**
-   * Whether this request should be sent with outgoing credentials (cookies).
-   */
-  withCredentials = false;
-  /**
-   * The expected response type of the server.
-   *
-   * This is used to parse the response appropriately before returning it to
-   * the requestee.
-   */
-  responseType = "json";
-  /**
-   * The outgoing HTTP request method.
-   */
-  method;
-  /**
-   * Outgoing URL parameters.
-   *
-   * To pass a string representation of HTTP parameters in the URL-query-string format,
-   * the `HttpParamsOptions`' `fromString` may be used. For example:
-   *
-   * ```
-   * new HttpParams({fromString: 'angular=awesome'})
-   * ```
-   */
-  // TODO(issue/24571): remove '!'.
-  params;
-  /**
-   * The outgoing URL with all URL parameters set.
-   */
-  urlWithParams;
-  /**
-   * The HttpTransferCache option for the request
-   */
-  transferCache;
-  constructor(method, url, third, fourth) {
-    this.url = url;
-    this.method = method.toUpperCase();
-    let options;
-    if (mightHaveBody(this.method) || !!fourth) {
-      this.body = third !== void 0 ? third : null;
-      options = fourth;
-    } else {
-      options = third;
-    }
-    if (options) {
-      this.reportProgress = !!options.reportProgress;
-      this.withCredentials = !!options.withCredentials;
-      if (!!options.responseType) {
-        this.responseType = options.responseType;
-      }
-      if (!!options.headers) {
-        this.headers = options.headers;
-      }
-      if (!!options.context) {
-        this.context = options.context;
-      }
-      if (!!options.params) {
-        this.params = options.params;
-      }
-      this.transferCache = options.transferCache;
-    }
-    this.headers ??= new HttpHeaders();
-    this.context ??= new HttpContext();
-    if (!this.params) {
-      this.params = new HttpParams();
-      this.urlWithParams = url;
-    } else {
-      const params = this.params.toString();
-      if (params.length === 0) {
-        this.urlWithParams = url;
-      } else {
-        const qIdx = url.indexOf("?");
-        const sep = qIdx === -1 ? "?" : qIdx < url.length - 1 ? "&" : "";
-        this.urlWithParams = url + sep + params;
-      }
-    }
-  }
-  /**
-   * Transform the free-form body into a serialized format suitable for
-   * transmission to the server.
-   */
-  serializeBody() {
-    if (this.body === null) {
-      return null;
-    }
-    if (typeof this.body === "string" || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {
-      return this.body;
-    }
-    if (this.body instanceof HttpParams) {
-      return this.body.toString();
-    }
-    if (typeof this.body === "object" || typeof this.body === "boolean" || Array.isArray(this.body)) {
-      return JSON.stringify(this.body);
-    }
-    return this.body.toString();
-  }
-  /**
-   * Examine the body and attempt to infer an appropriate MIME type
-   * for it.
-   *
-   * If no such type can be inferred, this method will return `null`.
-   */
-  detectContentTypeHeader() {
-    if (this.body === null) {
-      return null;
-    }
-    if (isFormData(this.body)) {
-      return null;
-    }
-    if (isBlob(this.body)) {
-      return this.body.type || null;
-    }
-    if (isArrayBuffer(this.body)) {
-      return null;
-    }
-    if (typeof this.body === "string") {
-      return "text/plain";
-    }
-    if (this.body instanceof HttpParams) {
-      return "application/x-www-form-urlencoded;charset=UTF-8";
-    }
-    if (typeof this.body === "object" || typeof this.body === "number" || typeof this.body === "boolean") {
-      return "application/json";
-    }
-    return null;
-  }
-  clone(update = {}) {
-    const method = update.method || this.method;
-    const url = update.url || this.url;
-    const responseType = update.responseType || this.responseType;
-    const transferCache = update.transferCache ?? this.transferCache;
-    const body = update.body !== void 0 ? update.body : this.body;
-    const withCredentials = update.withCredentials ?? this.withCredentials;
-    const reportProgress = update.reportProgress ?? this.reportProgress;
-    let headers = update.headers || this.headers;
-    let params = update.params || this.params;
-    const context = update.context ?? this.context;
-    if (update.setHeaders !== void 0) {
-      headers = Object.keys(update.setHeaders).reduce((headers2, name) => headers2.set(name, update.setHeaders[name]), headers);
-    }
-    if (update.setParams) {
-      params = Object.keys(update.setParams).reduce((params2, param) => params2.set(param, update.setParams[param]), params);
-    }
-    return new _HttpRequest(method, url, body, {
-      params,
-      headers,
-      context,
-      reportProgress,
-      responseType,
-      withCredentials,
-      transferCache
-    });
-  }
-};
-var HttpEventType;
-(function(HttpEventType2) {
-  HttpEventType2[HttpEventType2["Sent"] = 0] = "Sent";
-  HttpEventType2[HttpEventType2["UploadProgress"] = 1] = "UploadProgress";
-  HttpEventType2[HttpEventType2["ResponseHeader"] = 2] = "ResponseHeader";
-  HttpEventType2[HttpEventType2["DownloadProgress"] = 3] = "DownloadProgress";
-  HttpEventType2[HttpEventType2["Response"] = 4] = "Response";
-  HttpEventType2[HttpEventType2["User"] = 5] = "User";
-})(HttpEventType || (HttpEventType = {}));
-var HttpResponseBase = class {
-  /**
-   * All response headers.
-   */
-  headers;
-  /**
-   * Response status code.
-   */
-  status;
-  /**
-   * Textual description of response status code, defaults to OK.
-   *
-   * Do not depend on this.
-   */
-  statusText;
-  /**
-   * URL of the resource retrieved, or null if not available.
-   */
-  url;
-  /**
-   * Whether the status code falls in the 2xx range.
-   */
-  ok;
-  /**
-   * Type of the response, narrowed to either the full response or the header.
-   */
-  // TODO(issue/24571): remove '!'.
-  type;
-  /**
-   * Super-constructor for all responses.
-   *
-   * The single parameter accepted is an initialization hash. Any properties
-   * of the response passed there will override the default values.
-   */
-  constructor(init, defaultStatus = 200, defaultStatusText = "OK") {
-    this.headers = init.headers || new HttpHeaders();
-    this.status = init.status !== void 0 ? init.status : defaultStatus;
-    this.statusText = init.statusText || defaultStatusText;
-    this.url = init.url || null;
-    this.ok = this.status >= 200 && this.status < 300;
-  }
-};
-var HttpHeaderResponse = class _HttpHeaderResponse extends HttpResponseBase {
-  /**
-   * Create a new `HttpHeaderResponse` with the given parameters.
-   */
-  constructor(init = {}) {
-    super(init);
-  }
-  type = HttpEventType.ResponseHeader;
-  /**
-   * Copy this `HttpHeaderResponse`, overriding its contents with the
-   * given parameter hash.
-   */
-  clone(update = {}) {
-    return new _HttpHeaderResponse({
-      headers: update.headers || this.headers,
-      status: update.status !== void 0 ? update.status : this.status,
-      statusText: update.statusText || this.statusText,
-      url: update.url || this.url || void 0
-    });
-  }
-};
-var HttpResponse = class _HttpResponse extends HttpResponseBase {
-  /**
-   * The response body, or `null` if one was not returned.
-   */
-  body;
-  /**
-   * Construct a new `HttpResponse`.
-   */
-  constructor(init = {}) {
-    super(init);
-    this.body = init.body !== void 0 ? init.body : null;
-  }
-  type = HttpEventType.Response;
-  clone(update = {}) {
-    return new _HttpResponse({
-      body: update.body !== void 0 ? update.body : this.body,
-      headers: update.headers || this.headers,
-      status: update.status !== void 0 ? update.status : this.status,
-      statusText: update.statusText || this.statusText,
-      url: update.url || this.url || void 0
-    });
-  }
-};
-var HttpErrorResponse = class extends HttpResponseBase {
-  name = "HttpErrorResponse";
-  message;
-  error;
-  /**
-   * Errors are never okay, even when the status code is in the 2xx success range.
-   */
-  ok = false;
-  constructor(init) {
-    super(init, 0, "Unknown Error");
-    if (this.status >= 200 && this.status < 300) {
-      this.message = `Http failure during parsing for ${init.url || "(unknown url)"}`;
-    } else {
-      this.message = `Http failure response for ${init.url || "(unknown url)"}: ${init.status} ${init.statusText}`;
-    }
-    this.error = init.error || null;
-  }
-};
-var HTTP_STATUS_CODE_OK = 200;
-var HTTP_STATUS_CODE_NO_CONTENT = 204;
-var HttpStatusCode;
-(function(HttpStatusCode2) {
-  HttpStatusCode2[HttpStatusCode2["Continue"] = 100] = "Continue";
-  HttpStatusCode2[HttpStatusCode2["SwitchingProtocols"] = 101] = "SwitchingProtocols";
-  HttpStatusCode2[HttpStatusCode2["Processing"] = 102] = "Processing";
-  HttpStatusCode2[HttpStatusCode2["EarlyHints"] = 103] = "EarlyHints";
-  HttpStatusCode2[HttpStatusCode2["Ok"] = 200] = "Ok";
-  HttpStatusCode2[HttpStatusCode2["Created"] = 201] = "Created";
-  HttpStatusCode2[HttpStatusCode2["Accepted"] = 202] = "Accepted";
-  HttpStatusCode2[HttpStatusCode2["NonAuthoritativeInformation"] = 203] = "NonAuthoritativeInformation";
-  HttpStatusCode2[HttpStatusCode2["NoContent"] = 204] = "NoContent";
-  HttpStatusCode2[HttpStatusCode2["ResetContent"] = 205] = "ResetContent";
-  HttpStatusCode2[HttpStatusCode2["PartialContent"] = 206] = "PartialContent";
-  HttpStatusCode2[HttpStatusCode2["MultiStatus"] = 207] = "MultiStatus";
-  HttpStatusCode2[HttpStatusCode2["AlreadyReported"] = 208] = "AlreadyReported";
-  HttpStatusCode2[HttpStatusCode2["ImUsed"] = 226] = "ImUsed";
-  HttpStatusCode2[HttpStatusCode2["MultipleChoices"] = 300] = "MultipleChoices";
-  HttpStatusCode2[HttpStatusCode2["MovedPermanently"] = 301] = "MovedPermanently";
-  HttpStatusCode2[HttpStatusCode2["Found"] = 302] = "Found";
-  HttpStatusCode2[HttpStatusCode2["SeeOther"] = 303] = "SeeOther";
-  HttpStatusCode2[HttpStatusCode2["NotModified"] = 304] = "NotModified";
-  HttpStatusCode2[HttpStatusCode2["UseProxy"] = 305] = "UseProxy";
-  HttpStatusCode2[HttpStatusCode2["Unused"] = 306] = "Unused";
-  HttpStatusCode2[HttpStatusCode2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
-  HttpStatusCode2[HttpStatusCode2["PermanentRedirect"] = 308] = "PermanentRedirect";
-  HttpStatusCode2[HttpStatusCode2["BadRequest"] = 400] = "BadRequest";
-  HttpStatusCode2[HttpStatusCode2["Unauthorized"] = 401] = "Unauthorized";
-  HttpStatusCode2[HttpStatusCode2["PaymentRequired"] = 402] = "PaymentRequired";
-  HttpStatusCode2[HttpStatusCode2["Forbidden"] = 403] = "Forbidden";
-  HttpStatusCode2[HttpStatusCode2["NotFound"] = 404] = "NotFound";
-  HttpStatusCode2[HttpStatusCode2["MethodNotAllowed"] = 405] = "MethodNotAllowed";
-  HttpStatusCode2[HttpStatusCode2["NotAcceptable"] = 406] = "NotAcceptable";
-  HttpStatusCode2[HttpStatusCode2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
-  HttpStatusCode2[HttpStatusCode2["RequestTimeout"] = 408] = "RequestTimeout";
-  HttpStatusCode2[HttpStatusCode2["Conflict"] = 409] = "Conflict";
-  HttpStatusCode2[HttpStatusCode2["Gone"] = 410] = "Gone";
-  HttpStatusCode2[HttpStatusCode2["LengthRequired"] = 411] = "LengthRequired";
-  HttpStatusCode2[HttpStatusCode2["PreconditionFailed"] = 412] = "PreconditionFailed";
-  HttpStatusCode2[HttpStatusCode2["PayloadTooLarge"] = 413] = "PayloadTooLarge";
-  HttpStatusCode2[HttpStatusCode2["UriTooLong"] = 414] = "UriTooLong";
-  HttpStatusCode2[HttpStatusCode2["UnsupportedMediaType"] = 415] = "UnsupportedMediaType";
-  HttpStatusCode2[HttpStatusCode2["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
-  HttpStatusCode2[HttpStatusCode2["ExpectationFailed"] = 417] = "ExpectationFailed";
-  HttpStatusCode2[HttpStatusCode2["ImATeapot"] = 418] = "ImATeapot";
-  HttpStatusCode2[HttpStatusCode2["MisdirectedRequest"] = 421] = "MisdirectedRequest";
-  HttpStatusCode2[HttpStatusCode2["UnprocessableEntity"] = 422] = "UnprocessableEntity";
-  HttpStatusCode2[HttpStatusCode2["Locked"] = 423] = "Locked";
-  HttpStatusCode2[HttpStatusCode2["FailedDependency"] = 424] = "FailedDependency";
-  HttpStatusCode2[HttpStatusCode2["TooEarly"] = 425] = "TooEarly";
-  HttpStatusCode2[HttpStatusCode2["UpgradeRequired"] = 426] = "UpgradeRequired";
-  HttpStatusCode2[HttpStatusCode2["PreconditionRequired"] = 428] = "PreconditionRequired";
-  HttpStatusCode2[HttpStatusCode2["TooManyRequests"] = 429] = "TooManyRequests";
-  HttpStatusCode2[HttpStatusCode2["RequestHeaderFieldsTooLarge"] = 431] = "RequestHeaderFieldsTooLarge";
-  HttpStatusCode2[HttpStatusCode2["UnavailableForLegalReasons"] = 451] = "UnavailableForLegalReasons";
-  HttpStatusCode2[HttpStatusCode2["InternalServerError"] = 500] = "InternalServerError";
-  HttpStatusCode2[HttpStatusCode2["NotImplemented"] = 501] = "NotImplemented";
-  HttpStatusCode2[HttpStatusCode2["BadGateway"] = 502] = "BadGateway";
-  HttpStatusCode2[HttpStatusCode2["ServiceUnavailable"] = 503] = "ServiceUnavailable";
-  HttpStatusCode2[HttpStatusCode2["GatewayTimeout"] = 504] = "GatewayTimeout";
-  HttpStatusCode2[HttpStatusCode2["HttpVersionNotSupported"] = 505] = "HttpVersionNotSupported";
-  HttpStatusCode2[HttpStatusCode2["VariantAlsoNegotiates"] = 506] = "VariantAlsoNegotiates";
-  HttpStatusCode2[HttpStatusCode2["InsufficientStorage"] = 507] = "InsufficientStorage";
-  HttpStatusCode2[HttpStatusCode2["LoopDetected"] = 508] = "LoopDetected";
-  HttpStatusCode2[HttpStatusCode2["NotExtended"] = 510] = "NotExtended";
-  HttpStatusCode2[HttpStatusCode2["NetworkAuthenticationRequired"] = 511] = "NetworkAuthenticationRequired";
-})(HttpStatusCode || (HttpStatusCode = {}));
-function addBody(options, body) {
-  return {
-    body,
-    headers: options.headers,
-    context: options.context,
-    observe: options.observe,
-    params: options.params,
-    reportProgress: options.reportProgress,
-    responseType: options.responseType,
-    withCredentials: options.withCredentials,
-    transferCache: options.transferCache
-  };
-}
-var HttpClient = class _HttpClient {
-  handler;
-  constructor(handler) {
-    this.handler = handler;
-  }
-  /**
-   * Constructs an observable for a generic HTTP request that, when subscribed,
-   * fires the request through the chain of registered interceptors and on to the
-   * server.
-   *
-   * You can pass an `HttpRequest` directly as the only parameter. In this case,
-   * the call returns an observable of the raw `HttpEvent` stream.
-   *
-   * Alternatively you can pass an HTTP method as the first parameter,
-   * a URL string as the second, and an options hash containing the request body as the third.
-   * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the
-   * type of returned observable.
-   *   * The `responseType` value determines how a successful response body is parsed.
-   *   * If `responseType` is the default `json`, you can pass a type interface for the resulting
-   * object as a type parameter to the call.
-   *
-   * The `observe` value determines the return type, according to what you are interested in
-   * observing.
-   *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including
-   * progress events by default.
-   *   * An `observe` value of response returns an observable of `HttpResponse<T>`,
-   * where the `T` parameter depends on the `responseType` and any optionally provided type
-   * parameter.
-   *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.
-   *
-   */
-  request(first, url, options = {}) {
-    let req;
-    if (first instanceof HttpRequest) {
-      req = first;
-    } else {
-      let headers = void 0;
-      if (options.headers instanceof HttpHeaders) {
-        headers = options.headers;
-      } else {
-        headers = new HttpHeaders(options.headers);
-      }
-      let params = void 0;
-      if (!!options.params) {
-        if (options.params instanceof HttpParams) {
-          params = options.params;
-        } else {
-          params = new HttpParams({
-            fromObject: options.params
-          });
-        }
-      }
-      req = new HttpRequest(first, url, options.body !== void 0 ? options.body : null, {
-        headers,
-        context: options.context,
-        params,
-        reportProgress: options.reportProgress,
-        // By default, JSON is assumed to be returned for all calls.
-        responseType: options.responseType || "json",
-        withCredentials: options.withCredentials,
-        transferCache: options.transferCache
-      });
-    }
-    const events$ = (0, import_rxjs2.of)(req).pipe((0, import_operators.concatMap)((req2) => this.handler.handle(req2)));
-    if (first instanceof HttpRequest || options.observe === "events") {
-      return events$;
-    }
-    const res$ = events$.pipe((0, import_operators.filter)((event) => event instanceof HttpResponse));
-    switch (options.observe || "body") {
-      case "body":
-        switch (req.responseType) {
-          case "arraybuffer":
-            return res$.pipe((0, import_operators.map)((res) => {
-              if (res.body !== null && !(res.body instanceof ArrayBuffer)) {
-                throw new Error("Response is not an ArrayBuffer.");
-              }
-              return res.body;
-            }));
-          case "blob":
-            return res$.pipe((0, import_operators.map)((res) => {
-              if (res.body !== null && !(res.body instanceof Blob)) {
-                throw new Error("Response is not a Blob.");
-              }
-              return res.body;
-            }));
-          case "text":
-            return res$.pipe((0, import_operators.map)((res) => {
-              if (res.body !== null && typeof res.body !== "string") {
-                throw new Error("Response is not a string.");
-              }
-              return res.body;
-            }));
-          case "json":
-          default:
-            return res$.pipe((0, import_operators.map)((res) => res.body));
-        }
-      case "response":
-        return res$;
-      default:
-        throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);
-    }
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `DELETE` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   *
-   * @param url     The endpoint URL.
-   * @param options The HTTP options to send with the request.
-   *
-   */
-  delete(url, options = {}) {
-    return this.request("DELETE", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `GET` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   */
-  get(url, options = {}) {
-    return this.request("GET", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `HEAD` request to execute on the server. The `HEAD` method returns
-   * meta information about the resource without transferring the
-   * resource itself. See the individual overloads for
-   * details on the return type.
-   */
-  head(url, options = {}) {
-    return this.request("HEAD", url, options);
-  }
-  /**
-   * Constructs an `Observable` that, when subscribed, causes a request with the special method
-   * `JSONP` to be dispatched via the interceptor pipeline.
-   * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain
-   * API endpoints that don't support newer,
-   * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.
-   * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the
-   * requests even if the API endpoint is not located on the same domain (origin) as the client-side
-   * application making the request.
-   * The endpoint API must support JSONP callback for JSONP requests to work.
-   * The resource API returns the JSON response wrapped in a callback function.
-   * You can pass the callback function name as one of the query parameters.
-   * Note that JSONP requests can only be used with `GET` requests.
-   *
-   * @param url The resource URL.
-   * @param callbackParam The callback function name.
-   *
-   */
-  jsonp(url, callbackParam) {
-    return this.request("JSONP", url, {
-      params: new HttpParams().append(callbackParam, "JSONP_CALLBACK"),
-      observe: "body",
-      responseType: "json"
-    });
-  }
-  /**
-   * Constructs an `Observable` that, when subscribed, causes the configured
-   * `OPTIONS` request to execute on the server. This method allows the client
-   * to determine the supported HTTP methods and other capabilities of an endpoint,
-   * without implying a resource action. See the individual overloads for
-   * details on the return type.
-   */
-  options(url, options = {}) {
-    return this.request("OPTIONS", url, options);
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `PATCH` request to execute on the server. See the individual overloads for
-   * details on the return type.
-   */
-  patch(url, body, options = {}) {
-    return this.request("PATCH", url, addBody(options, body));
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `POST` request to execute on the server. The server responds with the location of
-   * the replaced resource. See the individual overloads for
-   * details on the return type.
-   */
-  post(url, body, options = {}) {
-    return this.request("POST", url, addBody(options, body));
-  }
-  /**
-   * Constructs an observable that, when subscribed, causes the configured
-   * `PUT` request to execute on the server. The `PUT` method replaces an existing resource
-   * with a new set of values.
-   * See the individual overloads for details on the return type.
-   */
-  put(url, body, options = {}) {
-    return this.request("PUT", url, addBody(options, body));
-  }
-  static ɵfac = function HttpClient_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClient)(ɵɵinject(HttpHandler));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpClient,
-    factory: _HttpClient.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClient, [{
-    type: Injectable
-  }], () => [{
-    type: HttpHandler
-  }], null);
-})();
-var XSSI_PREFIX$1 = /^\)\]\}',?\n/;
-var REQUEST_URL_HEADER = `X-Request-URL`;
-function getResponseUrl$1(response) {
-  if (response.url) {
-    return response.url;
-  }
-  const xRequestUrl = REQUEST_URL_HEADER.toLocaleLowerCase();
-  return response.headers.get(xRequestUrl);
-}
-var FetchBackend = class _FetchBackend {
-  // We use an arrow function to always reference the current global implementation of `fetch`.
-  // This is helpful for cases when the global `fetch` implementation is modified by external code,
-  // see https://github.com/angular/angular/issues/57527.
-  fetchImpl = inject(FetchFactory, {
-    optional: true
-  })?.fetch ?? ((...args) => globalThis.fetch(...args));
-  ngZone = inject(NgZone);
-  handle(request) {
-    return new import_rxjs2.Observable((observer) => {
-      const aborter = new AbortController();
-      this.doRequest(request, aborter.signal, observer).then(noop, (error) => observer.error(new HttpErrorResponse({
-        error
-      })));
-      return () => aborter.abort();
-    });
-  }
-  doRequest(request, signal, observer) {
-    return __async(this, null, function* () {
-      const init = this.createRequestInit(request);
-      let response;
-      try {
-        const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, __spreadValues({
-          signal
-        }, init)));
-        silenceSuperfluousUnhandledPromiseRejection(fetchPromise);
-        observer.next({
-          type: HttpEventType.Sent
-        });
-        response = yield fetchPromise;
-      } catch (error) {
-        observer.error(new HttpErrorResponse({
-          error,
-          status: error.status ?? 0,
-          statusText: error.statusText,
-          url: request.urlWithParams,
-          headers: error.headers
-        }));
-        return;
-      }
-      const headers = new HttpHeaders(response.headers);
-      const statusText = response.statusText;
-      const url = getResponseUrl$1(response) ?? request.urlWithParams;
-      let status = response.status;
-      let body = null;
-      if (request.reportProgress) {
-        observer.next(new HttpHeaderResponse({
-          headers,
-          status,
-          statusText,
-          url
-        }));
-      }
-      if (response.body) {
-        const contentLength = response.headers.get("content-length");
-        const chunks = [];
-        const reader = response.body.getReader();
-        let receivedLength = 0;
-        let decoder;
-        let partialText;
-        const reqZone = typeof Zone !== "undefined" && Zone.current;
-        yield this.ngZone.runOutsideAngular(() => __async(this, null, function* () {
-          while (true) {
-            const {
-              done,
-              value
-            } = yield reader.read();
-            if (done) {
-              break;
-            }
-            chunks.push(value);
-            receivedLength += value.length;
-            if (request.reportProgress) {
-              partialText = request.responseType === "text" ? (partialText ?? "") + (decoder ??= new TextDecoder()).decode(value, {
-                stream: true
-              }) : void 0;
-              const reportProgress = () => observer.next({
-                type: HttpEventType.DownloadProgress,
-                total: contentLength ? +contentLength : void 0,
-                loaded: receivedLength,
-                partialText
-              });
-              reqZone ? reqZone.run(reportProgress) : reportProgress();
-            }
-          }
-        }));
-        const chunksAll = this.concatChunks(chunks, receivedLength);
-        try {
-          const contentType = response.headers.get("Content-Type") ?? "";
-          body = this.parseBody(request, chunksAll, contentType);
-        } catch (error) {
-          observer.error(new HttpErrorResponse({
-            error,
-            headers: new HttpHeaders(response.headers),
-            status: response.status,
-            statusText: response.statusText,
-            url: getResponseUrl$1(response) ?? request.urlWithParams
-          }));
-          return;
-        }
-      }
-      if (status === 0) {
-        status = body ? HTTP_STATUS_CODE_OK : 0;
-      }
-      const ok = status >= 200 && status < 300;
-      if (ok) {
-        observer.next(new HttpResponse({
-          body,
-          headers,
-          status,
-          statusText,
-          url
-        }));
-        observer.complete();
-      } else {
-        observer.error(new HttpErrorResponse({
-          error: body,
-          headers,
-          status,
-          statusText,
-          url
-        }));
-      }
-    });
-  }
-  parseBody(request, binContent, contentType) {
-    switch (request.responseType) {
-      case "json":
-        const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, "");
-        return text === "" ? null : JSON.parse(text);
-      case "text":
-        return new TextDecoder().decode(binContent);
-      case "blob":
-        return new Blob([binContent], {
-          type: contentType
-        });
-      case "arraybuffer":
-        return binContent.buffer;
-    }
-  }
-  createRequestInit(req) {
-    const headers = {};
-    const credentials = req.withCredentials ? "include" : void 0;
-    req.headers.forEach((name, values) => headers[name] = values.join(","));
-    if (!req.headers.has("Accept")) {
-      headers["Accept"] = "application/json, text/plain, */*";
-    }
-    if (!req.headers.has("Content-Type")) {
-      const detectedType = req.detectContentTypeHeader();
-      if (detectedType !== null) {
-        headers["Content-Type"] = detectedType;
-      }
-    }
-    return {
-      body: req.serializeBody(),
-      method: req.method,
-      headers,
-      credentials
-    };
-  }
-  concatChunks(chunks, totalLength) {
-    const chunksAll = new Uint8Array(totalLength);
-    let position = 0;
-    for (const chunk of chunks) {
-      chunksAll.set(chunk, position);
-      position += chunk.length;
-    }
-    return chunksAll;
-  }
-  static ɵfac = function FetchBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _FetchBackend)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _FetchBackend,
-    factory: _FetchBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FetchBackend, [{
-    type: Injectable
-  }], null, null);
-})();
-var FetchFactory = class {
-};
-function noop() {
-}
-function silenceSuperfluousUnhandledPromiseRejection(promise) {
-  promise.then(noop, noop);
-}
-function interceptorChainEndFn(req, finalHandlerFn) {
-  return finalHandlerFn(req);
-}
-function adaptLegacyInterceptorToChain(chainTailFn, interceptor) {
-  return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {
-    handle: (downstreamRequest) => chainTailFn(downstreamRequest, finalHandlerFn)
-  });
-}
-function chainedInterceptorFn(chainTailFn, interceptorFn, injector) {
-  return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, (downstreamRequest) => chainTailFn(downstreamRequest, finalHandlerFn)));
-}
-var HTTP_INTERCEPTORS = new InjectionToken(ngDevMode ? "HTTP_INTERCEPTORS" : "");
-var HTTP_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? "HTTP_INTERCEPTOR_FNS" : "");
-var HTTP_ROOT_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? "HTTP_ROOT_INTERCEPTOR_FNS" : "");
-var REQUESTS_CONTRIBUTE_TO_STABILITY = new InjectionToken(ngDevMode ? "REQUESTS_CONTRIBUTE_TO_STABILITY" : "", {
-  providedIn: "root",
-  factory: () => true
-});
-function legacyInterceptorFnFactory() {
-  let chain = null;
-  return (req, handler) => {
-    if (chain === null) {
-      const interceptors = inject(HTTP_INTERCEPTORS, {
-        optional: true
-      }) ?? [];
-      chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);
-    }
-    const pendingTasks = inject(PendingTasksInternal);
-    const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);
-    if (contributeToStability) {
-      const taskId = pendingTasks.add();
-      return chain(req, handler).pipe((0, import_operators.finalize)(() => pendingTasks.remove(taskId)));
-    } else {
-      return chain(req, handler);
-    }
-  };
-}
-var fetchBackendWarningDisplayed = false;
-var HttpInterceptorHandler = class _HttpInterceptorHandler extends HttpHandler {
-  backend;
-  injector;
-  chain = null;
-  pendingTasks = inject(PendingTasksInternal);
-  contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);
-  constructor(backend, injector) {
-    super();
-    this.backend = backend;
-    this.injector = injector;
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && !fetchBackendWarningDisplayed) {
-      const isServer = isPlatformServer(injector.get(PLATFORM_ID));
-      const isTestingBackend = this.backend.isTestingBackend;
-      if (isServer && !(this.backend instanceof FetchBackend) && !isTestingBackend) {
-        fetchBackendWarningDisplayed = true;
-        injector.get(Console).warn(formatRuntimeError(2801, "Angular detected that `HttpClient` is not configured to use `fetch` APIs. It's strongly recommended to enable `fetch` for applications that use Server-Side Rendering for better performance and compatibility. To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` call at the root of the application."));
-      }
-    }
-  }
-  handle(initialRequest) {
-    if (this.chain === null) {
-      const dedupedInterceptorFns = Array.from(/* @__PURE__ */ new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));
-      this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);
-    }
-    if (this.contributeToStability) {
-      const taskId = this.pendingTasks.add();
-      return this.chain(initialRequest, (downstreamRequest) => this.backend.handle(downstreamRequest)).pipe((0, import_operators.finalize)(() => this.pendingTasks.remove(taskId)));
-    } else {
-      return this.chain(initialRequest, (downstreamRequest) => this.backend.handle(downstreamRequest));
-    }
-  }
-  static ɵfac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpInterceptorHandler)(ɵɵinject(HttpBackend), ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpInterceptorHandler,
-    factory: _HttpInterceptorHandler.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpInterceptorHandler, [{
-    type: Injectable
-  }], () => [{
-    type: HttpBackend
-  }, {
-    type: EnvironmentInjector
-  }], null);
-})();
-var nextRequestId = 0;
-var foreignDocument;
-var JSONP_ERR_NO_CALLBACK = "JSONP injected script did not invoke callback.";
-var JSONP_ERR_WRONG_METHOD = "JSONP requests must use JSONP request method.";
-var JSONP_ERR_WRONG_RESPONSE_TYPE = "JSONP requests must use Json response type.";
-var JSONP_ERR_HEADERS_NOT_SUPPORTED = "JSONP requests do not support headers.";
-var JsonpCallbackContext = class {
-};
-function jsonpCallbackContext() {
-  if (typeof window === "object") {
-    return window;
-  }
-  return {};
-}
-var JsonpClientBackend = class _JsonpClientBackend {
-  callbackMap;
-  document;
-  /**
-   * A resolved promise that can be used to schedule microtasks in the event handlers.
-   */
-  resolvedPromise = Promise.resolve();
-  constructor(callbackMap, document2) {
-    this.callbackMap = callbackMap;
-    this.document = document2;
-  }
-  /**
-   * Get the name of the next callback method, by incrementing the global `nextRequestId`.
-   */
-  nextCallback() {
-    return `ng_jsonp_callback_${nextRequestId++}`;
-  }
-  /**
-   * Processes a JSONP request and returns an event stream of the results.
-   * @param req The request object.
-   * @returns An observable of the response events.
-   *
-   */
-  handle(req) {
-    if (req.method !== "JSONP") {
-      throw new Error(JSONP_ERR_WRONG_METHOD);
-    } else if (req.responseType !== "json") {
-      throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);
-    }
-    if (req.headers.keys().length > 0) {
-      throw new Error(JSONP_ERR_HEADERS_NOT_SUPPORTED);
-    }
-    return new import_rxjs2.Observable((observer) => {
-      const callback = this.nextCallback();
-      const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);
-      const node = this.document.createElement("script");
-      node.src = url;
-      let body = null;
-      let finished = false;
-      this.callbackMap[callback] = (data) => {
-        delete this.callbackMap[callback];
-        body = data;
-        finished = true;
-      };
-      const cleanup = () => {
-        node.removeEventListener("load", onLoad);
-        node.removeEventListener("error", onError);
-        node.remove();
-        delete this.callbackMap[callback];
-      };
-      const onLoad = (event) => {
-        this.resolvedPromise.then(() => {
-          cleanup();
-          if (!finished) {
-            observer.error(new HttpErrorResponse({
-              url,
-              status: 0,
-              statusText: "JSONP Error",
-              error: new Error(JSONP_ERR_NO_CALLBACK)
-            }));
-            return;
-          }
-          observer.next(new HttpResponse({
-            body,
-            status: HTTP_STATUS_CODE_OK,
-            statusText: "OK",
-            url
-          }));
-          observer.complete();
-        });
-      };
-      const onError = (error) => {
-        cleanup();
-        observer.error(new HttpErrorResponse({
-          error,
-          status: 0,
-          statusText: "JSONP Error",
-          url
-        }));
-      };
-      node.addEventListener("load", onLoad);
-      node.addEventListener("error", onError);
-      this.document.body.appendChild(node);
-      observer.next({
-        type: HttpEventType.Sent
-      });
-      return () => {
-        if (!finished) {
-          this.removeListeners(node);
-        }
-        cleanup();
-      };
-    });
-  }
-  removeListeners(script) {
-    foreignDocument ??= this.document.implementation.createHTMLDocument();
-    foreignDocument.adoptNode(script);
-  }
-  static ɵfac = function JsonpClientBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonpClientBackend)(ɵɵinject(JsonpCallbackContext), ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _JsonpClientBackend,
-    factory: _JsonpClientBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonpClientBackend, [{
-    type: Injectable
-  }], () => [{
-    type: JsonpCallbackContext
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function jsonpInterceptorFn(req, next) {
-  if (req.method === "JSONP") {
-    return inject(JsonpClientBackend).handle(req);
-  }
-  return next(req);
-}
-var JsonpInterceptor = class _JsonpInterceptor {
-  injector;
-  constructor(injector) {
-    this.injector = injector;
-  }
-  /**
-   * Identifies and handles a given JSONP request.
-   * @param initialRequest The outgoing request object to handle.
-   * @param next The next interceptor in the chain, or the backend
-   * if no interceptors remain in the chain.
-   * @returns An observable of the event stream.
-   */
-  intercept(initialRequest, next) {
-    return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)));
-  }
-  static ɵfac = function JsonpInterceptor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _JsonpInterceptor)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _JsonpInterceptor,
-    factory: _JsonpInterceptor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(JsonpInterceptor, [{
-    type: Injectable
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var XSSI_PREFIX = /^\)\]\}',?\n/;
-function getResponseUrl(xhr) {
-  if ("responseURL" in xhr && xhr.responseURL) {
-    return xhr.responseURL;
-  }
-  if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
-    return xhr.getResponseHeader("X-Request-URL");
-  }
-  return null;
-}
-var HttpXhrBackend = class _HttpXhrBackend {
-  xhrFactory;
-  constructor(xhrFactory) {
-    this.xhrFactory = xhrFactory;
-  }
-  /**
-   * Processes a request and returns a stream of response events.
-   * @param req The request object.
-   * @returns An observable of the response events.
-   */
-  handle(req) {
-    if (req.method === "JSONP") {
-      throw new RuntimeError(-2800, (typeof ngDevMode === "undefined" || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \`withJsonpSupport()\` call (if \`provideHttpClient()\` is used) or import the \`HttpClientJsonpModule\` in the root NgModule.`);
-    }
-    const xhrFactory = this.xhrFactory;
-    const source = xhrFactory.ɵloadImpl ? (0, import_rxjs2.from)(xhrFactory.ɵloadImpl()) : (0, import_rxjs2.of)(null);
-    return source.pipe((0, import_operators.switchMap)(() => {
-      return new import_rxjs2.Observable((observer) => {
-        const xhr = xhrFactory.build();
-        xhr.open(req.method, req.urlWithParams);
-        if (req.withCredentials) {
-          xhr.withCredentials = true;
-        }
-        req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(",")));
-        if (!req.headers.has("Accept")) {
-          xhr.setRequestHeader("Accept", "application/json, text/plain, */*");
-        }
-        if (!req.headers.has("Content-Type")) {
-          const detectedType = req.detectContentTypeHeader();
-          if (detectedType !== null) {
-            xhr.setRequestHeader("Content-Type", detectedType);
-          }
-        }
-        if (req.responseType) {
-          const responseType = req.responseType.toLowerCase();
-          xhr.responseType = responseType !== "json" ? responseType : "text";
-        }
-        const reqBody = req.serializeBody();
-        let headerResponse = null;
-        const partialFromXhr = () => {
-          if (headerResponse !== null) {
-            return headerResponse;
-          }
-          const statusText = xhr.statusText || "OK";
-          const headers = new HttpHeaders(xhr.getAllResponseHeaders());
-          const url = getResponseUrl(xhr) || req.url;
-          headerResponse = new HttpHeaderResponse({
-            headers,
-            status: xhr.status,
-            statusText,
-            url
-          });
-          return headerResponse;
-        };
-        const onLoad = () => {
-          let {
-            headers,
-            status,
-            statusText,
-            url
-          } = partialFromXhr();
-          let body = null;
-          if (status !== HTTP_STATUS_CODE_NO_CONTENT) {
-            body = typeof xhr.response === "undefined" ? xhr.responseText : xhr.response;
-          }
-          if (status === 0) {
-            status = !!body ? HTTP_STATUS_CODE_OK : 0;
-          }
-          let ok = status >= 200 && status < 300;
-          if (req.responseType === "json" && typeof body === "string") {
-            const originalBody = body;
-            body = body.replace(XSSI_PREFIX, "");
-            try {
-              body = body !== "" ? JSON.parse(body) : null;
-            } catch (error) {
-              body = originalBody;
-              if (ok) {
-                ok = false;
-                body = {
-                  error,
-                  text: body
-                };
-              }
-            }
-          }
-          if (ok) {
-            observer.next(new HttpResponse({
-              body,
-              headers,
-              status,
-              statusText,
-              url: url || void 0
-            }));
-            observer.complete();
-          } else {
-            observer.error(new HttpErrorResponse({
-              // The error in this case is the response body (error from the server).
-              error: body,
-              headers,
-              status,
-              statusText,
-              url: url || void 0
-            }));
-          }
-        };
-        const onError = (error) => {
-          const {
-            url
-          } = partialFromXhr();
-          const res = new HttpErrorResponse({
-            error,
-            status: xhr.status || 0,
-            statusText: xhr.statusText || "Unknown Error",
-            url: url || void 0
-          });
-          observer.error(res);
-        };
-        let sentHeaders = false;
-        const onDownProgress = (event) => {
-          if (!sentHeaders) {
-            observer.next(partialFromXhr());
-            sentHeaders = true;
-          }
-          let progressEvent = {
-            type: HttpEventType.DownloadProgress,
-            loaded: event.loaded
-          };
-          if (event.lengthComputable) {
-            progressEvent.total = event.total;
-          }
-          if (req.responseType === "text" && !!xhr.responseText) {
-            progressEvent.partialText = xhr.responseText;
-          }
-          observer.next(progressEvent);
-        };
-        const onUpProgress = (event) => {
-          let progress = {
-            type: HttpEventType.UploadProgress,
-            loaded: event.loaded
-          };
-          if (event.lengthComputable) {
-            progress.total = event.total;
-          }
-          observer.next(progress);
-        };
-        xhr.addEventListener("load", onLoad);
-        xhr.addEventListener("error", onError);
-        xhr.addEventListener("timeout", onError);
-        xhr.addEventListener("abort", onError);
-        if (req.reportProgress) {
-          xhr.addEventListener("progress", onDownProgress);
-          if (reqBody !== null && xhr.upload) {
-            xhr.upload.addEventListener("progress", onUpProgress);
-          }
-        }
-        xhr.send(reqBody);
-        observer.next({
-          type: HttpEventType.Sent
-        });
-        return () => {
-          xhr.removeEventListener("error", onError);
-          xhr.removeEventListener("abort", onError);
-          xhr.removeEventListener("load", onLoad);
-          xhr.removeEventListener("timeout", onError);
-          if (req.reportProgress) {
-            xhr.removeEventListener("progress", onDownProgress);
-            if (reqBody !== null && xhr.upload) {
-              xhr.upload.removeEventListener("progress", onUpProgress);
-            }
-          }
-          if (xhr.readyState !== xhr.DONE) {
-            xhr.abort();
-          }
-        };
-      });
-    }));
-  }
-  static ɵfac = function HttpXhrBackend_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXhrBackend)(ɵɵinject(XhrFactory));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXhrBackend,
-    factory: _HttpXhrBackend.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXhrBackend, [{
-    type: Injectable
-  }], () => [{
-    type: XhrFactory
-  }], null);
-})();
-var XSRF_ENABLED = new InjectionToken(ngDevMode ? "XSRF_ENABLED" : "");
-var XSRF_DEFAULT_COOKIE_NAME = "XSRF-TOKEN";
-var XSRF_COOKIE_NAME = new InjectionToken(ngDevMode ? "XSRF_COOKIE_NAME" : "", {
-  providedIn: "root",
-  factory: () => XSRF_DEFAULT_COOKIE_NAME
-});
-var XSRF_DEFAULT_HEADER_NAME = "X-XSRF-TOKEN";
-var XSRF_HEADER_NAME = new InjectionToken(ngDevMode ? "XSRF_HEADER_NAME" : "", {
-  providedIn: "root",
-  factory: () => XSRF_DEFAULT_HEADER_NAME
-});
-var HttpXsrfTokenExtractor = class {
-};
-var HttpXsrfCookieExtractor = class _HttpXsrfCookieExtractor {
-  doc;
-  platform;
-  cookieName;
-  lastCookieString = "";
-  lastToken = null;
-  /**
-   * @internal for testing
-   */
-  parseCount = 0;
-  constructor(doc, platform, cookieName) {
-    this.doc = doc;
-    this.platform = platform;
-    this.cookieName = cookieName;
-  }
-  getToken() {
-    if (this.platform === "server") {
-      return null;
-    }
-    const cookieString = this.doc.cookie || "";
-    if (cookieString !== this.lastCookieString) {
-      this.parseCount++;
-      this.lastToken = parseCookieValue(cookieString, this.cookieName);
-      this.lastCookieString = cookieString;
-    }
-    return this.lastToken;
-  }
-  static ɵfac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXsrfCookieExtractor)(ɵɵinject(DOCUMENT), ɵɵinject(PLATFORM_ID), ɵɵinject(XSRF_COOKIE_NAME));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXsrfCookieExtractor,
-    factory: _HttpXsrfCookieExtractor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXsrfCookieExtractor, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [XSRF_COOKIE_NAME]
-    }]
-  }], null);
-})();
-function xsrfInterceptorFn(req, next) {
-  const lcUrl = req.url.toLowerCase();
-  if (!inject(XSRF_ENABLED) || req.method === "GET" || req.method === "HEAD" || lcUrl.startsWith("http://") || lcUrl.startsWith("https://")) {
-    return next(req);
-  }
-  const token = inject(HttpXsrfTokenExtractor).getToken();
-  const headerName = inject(XSRF_HEADER_NAME);
-  if (token != null && !req.headers.has(headerName)) {
-    req = req.clone({
-      headers: req.headers.set(headerName, token)
-    });
-  }
-  return next(req);
-}
-var HttpXsrfInterceptor = class _HttpXsrfInterceptor {
-  injector;
-  constructor(injector) {
-    this.injector = injector;
-  }
-  intercept(initialRequest, next) {
-    return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)));
-  }
-  static ɵfac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpXsrfInterceptor)(ɵɵinject(EnvironmentInjector));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HttpXsrfInterceptor,
-    factory: _HttpXsrfInterceptor.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpXsrfInterceptor, [{
-    type: Injectable
-  }], () => [{
-    type: EnvironmentInjector
-  }], null);
-})();
-var HttpFeatureKind;
-(function(HttpFeatureKind2) {
-  HttpFeatureKind2[HttpFeatureKind2["Interceptors"] = 0] = "Interceptors";
-  HttpFeatureKind2[HttpFeatureKind2["LegacyInterceptors"] = 1] = "LegacyInterceptors";
-  HttpFeatureKind2[HttpFeatureKind2["CustomXsrfConfiguration"] = 2] = "CustomXsrfConfiguration";
-  HttpFeatureKind2[HttpFeatureKind2["NoXsrfProtection"] = 3] = "NoXsrfProtection";
-  HttpFeatureKind2[HttpFeatureKind2["JsonpSupport"] = 4] = "JsonpSupport";
-  HttpFeatureKind2[HttpFeatureKind2["RequestsMadeViaParent"] = 5] = "RequestsMadeViaParent";
-  HttpFeatureKind2[HttpFeatureKind2["Fetch"] = 6] = "Fetch";
-})(HttpFeatureKind || (HttpFeatureKind = {}));
-function makeHttpFeature(kind, providers) {
-  return {
-    ɵkind: kind,
-    ɵproviders: providers
-  };
-}
-function provideHttpClient(...features) {
-  if (ngDevMode) {
-    const featureKinds = new Set(features.map((f) => f.ɵkind));
-    if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {
-      throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : "");
-    }
-  }
-  const providers = [HttpClient, HttpXhrBackend, HttpInterceptorHandler, {
-    provide: HttpHandler,
-    useExisting: HttpInterceptorHandler
-  }, {
-    provide: HttpBackend,
-    useFactory: () => {
-      return inject(FetchBackend, {
-        optional: true
-      }) ?? inject(HttpXhrBackend);
-    }
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useValue: xsrfInterceptorFn,
-    multi: true
-  }, {
-    provide: XSRF_ENABLED,
-    useValue: true
-  }, {
-    provide: HttpXsrfTokenExtractor,
-    useClass: HttpXsrfCookieExtractor
-  }];
-  for (const feature of features) {
-    providers.push(...feature.ɵproviders);
-  }
-  return makeEnvironmentProviders(providers);
-}
-var LEGACY_INTERCEPTOR_FN = new InjectionToken(ngDevMode ? "LEGACY_INTERCEPTOR_FN" : "");
-function withInterceptorsFromDi() {
-  return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{
-    provide: LEGACY_INTERCEPTOR_FN,
-    useFactory: legacyInterceptorFnFactory
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useExisting: LEGACY_INTERCEPTOR_FN,
-    multi: true
-  }]);
-}
-function withXsrfConfiguration({
-  cookieName,
-  headerName
-}) {
-  const providers = [];
-  if (cookieName !== void 0) {
-    providers.push({
-      provide: XSRF_COOKIE_NAME,
-      useValue: cookieName
-    });
-  }
-  if (headerName !== void 0) {
-    providers.push({
-      provide: XSRF_HEADER_NAME,
-      useValue: headerName
-    });
-  }
-  return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);
-}
-function withNoXsrfProtection() {
-  return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{
-    provide: XSRF_ENABLED,
-    useValue: false
-  }]);
-}
-function withJsonpSupport() {
-  return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {
-    provide: JsonpCallbackContext,
-    useFactory: jsonpCallbackContext
-  }, {
-    provide: HTTP_INTERCEPTOR_FNS,
-    useValue: jsonpInterceptorFn,
-    multi: true
-  }]);
-}
-var HttpClientXsrfModule = class _HttpClientXsrfModule {
-  /**
-   * Disable the default XSRF protection.
-   */
-  static disable() {
-    return {
-      ngModule: _HttpClientXsrfModule,
-      providers: [withNoXsrfProtection().ɵproviders]
-    };
-  }
-  /**
-   * Configure XSRF protection.
-   * @param options An object that can specify either or both
-   * cookie name or header name.
-   * - Cookie name default is `XSRF-TOKEN`.
-   * - Header name default is `X-XSRF-TOKEN`.
-   *
-   */
-  static withOptions(options = {}) {
-    return {
-      ngModule: _HttpClientXsrfModule,
-      providers: withXsrfConfiguration(options).ɵproviders
-    };
-  }
-  static ɵfac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientXsrfModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientXsrfModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [HttpXsrfInterceptor, {
-      provide: HTTP_INTERCEPTORS,
-      useExisting: HttpXsrfInterceptor,
-      multi: true
-    }, {
-      provide: HttpXsrfTokenExtractor,
-      useClass: HttpXsrfCookieExtractor
-    }, withXsrfConfiguration({
-      cookieName: XSRF_DEFAULT_COOKIE_NAME,
-      headerName: XSRF_DEFAULT_HEADER_NAME
-    }).ɵproviders, {
-      provide: XSRF_ENABLED,
-      useValue: true
-    }]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientXsrfModule, [{
-    type: NgModule,
-    args: [{
-      providers: [HttpXsrfInterceptor, {
-        provide: HTTP_INTERCEPTORS,
-        useExisting: HttpXsrfInterceptor,
-        multi: true
-      }, {
-        provide: HttpXsrfTokenExtractor,
-        useClass: HttpXsrfCookieExtractor
-      }, withXsrfConfiguration({
-        cookieName: XSRF_DEFAULT_COOKIE_NAME,
-        headerName: XSRF_DEFAULT_HEADER_NAME
-      }).ɵproviders, {
-        provide: XSRF_ENABLED,
-        useValue: true
-      }]
-    }]
-  }], null, null);
-})();
-var HttpClientModule = class _HttpClientModule {
-  static ɵfac = function HttpClientModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [provideHttpClient(withInterceptorsFromDi())]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientModule, [{
-    type: NgModule,
-    args: [{
-      /**
-       * Configures the dependency injector where it is imported
-       * with supporting services for HTTP communications.
-       */
-      providers: [provideHttpClient(withInterceptorsFromDi())]
-    }]
-  }], null, null);
-})();
-var HttpClientJsonpModule = class _HttpClientJsonpModule {
-  static ɵfac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HttpClientJsonpModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HttpClientJsonpModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [withJsonpSupport().ɵproviders]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HttpClientJsonpModule, [{
-    type: NgModule,
-    args: [{
-      providers: [withJsonpSupport().ɵproviders]
-    }]
-  }], null, null);
-})();
-var HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken(ngDevMode ? "HTTP_TRANSFER_CACHE_ORIGIN_MAP" : "");
-var BODY = "b";
-var HEADERS = "h";
-var STATUS = "s";
-var STATUS_TEXT = "st";
-var REQ_URL = "u";
-var RESPONSE_TYPE = "rt";
-var CACHE_OPTIONS = new InjectionToken(ngDevMode ? "HTTP_TRANSFER_STATE_CACHE_OPTIONS" : "");
-var ALLOWED_METHODS = ["GET", "HEAD"];
-function transferCacheInterceptorFn(req, next) {
-  const _a = inject(CACHE_OPTIONS), {
-    isCacheActive
-  } = _a, globalOptions = __objRest(_a, [
-    "isCacheActive"
-  ]);
-  const {
-    transferCache: requestOptions,
-    method: requestMethod
-  } = req;
-  if (!isCacheActive || requestOptions === false || // POST requests are allowed either globally or at request level
-  requestMethod === "POST" && !globalOptions.includePostRequests && !requestOptions || requestMethod !== "POST" && !ALLOWED_METHODS.includes(requestMethod) || // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey
-  !globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req) || globalOptions.filter?.(req) === false) {
-    return next(req);
-  }
-  const transferState = inject(TransferState);
-  const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {
-    optional: true
-  });
-  const isServer = isPlatformServer(inject(PLATFORM_ID));
-  if (originMap && !isServer) {
-    throw new RuntimeError(2803, ngDevMode && "Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and present in the client side code. Please ensure that this token is only provided in the server code of the application.");
-  }
-  const requestUrl = isServer && originMap ? mapRequestOriginUrl(req.url, originMap) : req.url;
-  const storeKey = makeCacheKey(req, requestUrl);
-  const response = transferState.get(storeKey, null);
-  let headersToInclude = globalOptions.includeHeaders;
-  if (typeof requestOptions === "object" && requestOptions.includeHeaders) {
-    headersToInclude = requestOptions.includeHeaders;
-  }
-  if (response) {
-    const {
-      [BODY]: undecodedBody,
-      [RESPONSE_TYPE]: responseType,
-      [HEADERS]: httpHeaders,
-      [STATUS]: status,
-      [STATUS_TEXT]: statusText,
-      [REQ_URL]: url
-    } = response;
-    let body = undecodedBody;
-    switch (responseType) {
-      case "arraybuffer":
-        body = new TextEncoder().encode(undecodedBody).buffer;
-        break;
-      case "blob":
-        body = new Blob([undecodedBody]);
-        break;
-    }
-    let headers = new HttpHeaders(httpHeaders);
-    if (typeof ngDevMode === "undefined" || ngDevMode) {
-      headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);
-    }
-    return (0, import_rxjs2.of)(new HttpResponse({
-      body,
-      headers,
-      status,
-      statusText,
-      url
-    }));
-  }
-  return next(req).pipe((0, import_operators.tap)((event) => {
-    if (event instanceof HttpResponse && isServer) {
-      transferState.set(storeKey, {
-        [BODY]: event.body,
-        [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),
-        [STATUS]: event.status,
-        [STATUS_TEXT]: event.statusText,
-        [REQ_URL]: requestUrl,
-        [RESPONSE_TYPE]: req.responseType
-      });
-    }
-  }));
-}
-function hasAuthHeaders(req) {
-  return req.headers.has("authorization") || req.headers.has("proxy-authorization");
-}
-function getFilteredHeaders(headers, includeHeaders) {
-  if (!includeHeaders) {
-    return {};
-  }
-  const headersMap = {};
-  for (const key of includeHeaders) {
-    const values = headers.getAll(key);
-    if (values !== null) {
-      headersMap[key] = values;
-    }
-  }
-  return headersMap;
-}
-function sortAndConcatParams(params) {
-  return [...params.keys()].sort().map((k) => `${k}=${params.getAll(k)}`).join("&");
-}
-function makeCacheKey(request, mappedRequestUrl) {
-  const {
-    params,
-    method,
-    responseType
-  } = request;
-  const encodedParams = sortAndConcatParams(params);
-  let serializedBody = request.serializeBody();
-  if (serializedBody instanceof URLSearchParams) {
-    serializedBody = sortAndConcatParams(serializedBody);
-  } else if (typeof serializedBody !== "string") {
-    serializedBody = "";
-  }
-  const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join("|");
-  const hash = generateHash(key);
-  return makeStateKey(hash);
-}
-function generateHash(value) {
-  let hash = 0;
-  for (const char of value) {
-    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;
-  }
-  hash += 2147483647 + 1;
-  return hash.toString();
-}
-function withHttpTransferCache(cacheOptions) {
-  return [{
-    provide: CACHE_OPTIONS,
-    useFactory: () => {
-      performanceMarkFeature("NgHttpTransferCache");
-      return __spreadValues({
-        isCacheActive: true
-      }, cacheOptions);
-    }
-  }, {
-    provide: HTTP_ROOT_INTERCEPTOR_FNS,
-    useValue: transferCacheInterceptorFn,
-    multi: true,
-    deps: [TransferState, CACHE_OPTIONS]
-  }, {
-    provide: APP_BOOTSTRAP_LISTENER,
-    multi: true,
-    useFactory: () => {
-      const appRef = inject(ApplicationRef);
-      const cacheState = inject(CACHE_OPTIONS);
-      return () => {
-        appRef.whenStable().then(() => {
-          cacheState.isCacheActive = false;
-        });
-      };
-    }
-  }];
-}
-function appendMissingHeadersDetection(url, headers, headersToInclude) {
-  const warningProduced = /* @__PURE__ */ new Set();
-  return new Proxy(headers, {
-    get(target, prop) {
-      const value = Reflect.get(target, prop);
-      const methods = /* @__PURE__ */ new Set(["get", "has", "getAll"]);
-      if (typeof value !== "function" || !methods.has(prop)) {
-        return value;
-      }
-      return (headerName) => {
-        const key = (prop + ":" + headerName).toLowerCase();
-        if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {
-          warningProduced.add(key);
-          const truncatedUrl = truncateMiddle(url);
-          console.warn(formatRuntimeError(2802, `Angular detected that the \`${headerName}\` header is accessed, but the value of the header was not transferred from the server to the client by the HttpTransferCache. To include the value of the \`${headerName}\` header for the \`${truncatedUrl}\` request, use the \`includeHeaders\` list. The \`includeHeaders\` can be defined either on a request level by adding the \`transferCache\` parameter, or on an application level by adding the \`httpCacheTransfer.includeHeaders\` argument to the \`provideClientHydration()\` call. `));
-        }
-        return value.apply(target, [headerName]);
-      };
-    }
-  });
-}
-function mapRequestOriginUrl(url, originMap) {
-  const origin = new URL(url, "resolve://").origin;
-  const mappedOrigin = originMap[origin];
-  if (!mappedOrigin) {
-    return url;
-  }
-  if (typeof ngDevMode === "undefined" || ngDevMode) {
-    verifyMappedOrigin(mappedOrigin);
-  }
-  return url.replace(origin, mappedOrigin);
-}
-function verifyMappedOrigin(url) {
-  if (new URL(url, "resolve://").pathname !== "/") {
-    throw new RuntimeError(2804, `Angular detected a URL with a path segment in the value provided for the \`HTTP_TRANSFER_CACHE_ORIGIN_MAP\` token: ${url}. The map should only contain origins without any other segments.`);
-  }
-}
-
-// node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs
-var GenericBrowserDomAdapter = class extends DomAdapter {
-  supportsDOMEvents = true;
-};
-var BrowserDomAdapter = class _BrowserDomAdapter extends GenericBrowserDomAdapter {
-  static makeCurrent() {
-    setRootDomAdapter(new _BrowserDomAdapter());
-  }
-  onAndCancel(el, evt, listener) {
-    el.addEventListener(evt, listener);
-    return () => {
-      el.removeEventListener(evt, listener);
-    };
-  }
-  dispatchEvent(el, evt) {
-    el.dispatchEvent(evt);
-  }
-  remove(node) {
-    node.remove();
-  }
-  createElement(tagName, doc) {
-    doc = doc || this.getDefaultDocument();
-    return doc.createElement(tagName);
-  }
-  createHtmlDocument() {
-    return document.implementation.createHTMLDocument("fakeTitle");
-  }
-  getDefaultDocument() {
-    return document;
-  }
-  isElementNode(node) {
-    return node.nodeType === Node.ELEMENT_NODE;
-  }
-  isShadowRoot(node) {
-    return node instanceof DocumentFragment;
-  }
-  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */
-  getGlobalEventTarget(doc, target) {
-    if (target === "window") {
-      return window;
-    }
-    if (target === "document") {
-      return doc;
-    }
-    if (target === "body") {
-      return doc.body;
-    }
-    return null;
-  }
-  getBaseHref(doc) {
-    const href = getBaseElementHref();
-    return href == null ? null : relativePath(href);
-  }
-  resetBaseElement() {
-    baseElement = null;
-  }
-  getUserAgent() {
-    return window.navigator.userAgent;
-  }
-  getCookie(name) {
-    return parseCookieValue(document.cookie, name);
-  }
-};
-var baseElement = null;
-function getBaseElementHref() {
-  baseElement = baseElement || document.querySelector("base");
-  return baseElement ? baseElement.getAttribute("href") : null;
-}
-function relativePath(url) {
-  return new URL(url, document.baseURI).pathname;
-}
-var BrowserGetTestability = class {
-  addToWindow(registry) {
-    _global["getAngularTestability"] = (elem, findInAncestors = true) => {
-      const testability = registry.findTestabilityInTree(elem, findInAncestors);
-      if (testability == null) {
-        throw new RuntimeError(5103, (typeof ngDevMode === "undefined" || ngDevMode) && "Could not find testability for element.");
-      }
-      return testability;
-    };
-    _global["getAllAngularTestabilities"] = () => registry.getAllTestabilities();
-    _global["getAllAngularRootElements"] = () => registry.getAllRootElements();
-    const whenAllStable = (callback) => {
-      const testabilities = _global["getAllAngularTestabilities"]();
-      let count = testabilities.length;
-      const decrement = function() {
-        count--;
-        if (count == 0) {
-          callback();
-        }
-      };
-      testabilities.forEach((testability) => {
-        testability.whenStable(decrement);
-      });
-    };
-    if (!_global["frameworkStabilizers"]) {
-      _global["frameworkStabilizers"] = [];
-    }
-    _global["frameworkStabilizers"].push(whenAllStable);
-  }
-  findTestabilityInTree(registry, elem, findInAncestors) {
-    if (elem == null) {
-      return null;
-    }
-    const t = registry.getTestability(elem);
-    if (t != null) {
-      return t;
-    } else if (!findInAncestors) {
-      return null;
-    }
-    if (getDOM().isShadowRoot(elem)) {
-      return this.findTestabilityInTree(registry, elem.host, true);
-    }
-    return this.findTestabilityInTree(registry, elem.parentElement, true);
-  }
-};
-var BrowserXhr = class _BrowserXhr {
-  build() {
-    return new XMLHttpRequest();
-  }
-  static ɵfac = function BrowserXhr_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserXhr)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _BrowserXhr,
-    factory: _BrowserXhr.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserXhr, [{
-    type: Injectable
-  }], null, null);
-})();
-var EVENT_MANAGER_PLUGINS = new InjectionToken(ngDevMode ? "EventManagerPlugins" : "");
-var EventManager = class _EventManager {
-  _zone;
-  _plugins;
-  _eventNameToPlugin = /* @__PURE__ */ new Map();
-  /**
-   * Initializes an instance of the event-manager service.
-   */
-  constructor(plugins, _zone) {
-    this._zone = _zone;
-    plugins.forEach((plugin) => {
-      plugin.manager = this;
-    });
-    this._plugins = plugins.slice().reverse();
-  }
-  /**
-   * Registers a handler for a specific element and event.
-   *
-   * @param element The HTML element to receive event notifications.
-   * @param eventName The name of the event to listen for.
-   * @param handler A function to call when the notification occurs. Receives the
-   * event object as an argument.
-   * @returns  A callback function that can be used to remove the handler.
-   */
-  addEventListener(element, eventName, handler) {
-    const plugin = this._findPluginFor(eventName);
-    return plugin.addEventListener(element, eventName, handler);
-  }
-  /**
-   * Retrieves the compilation zone in which event listeners are registered.
-   */
-  getZone() {
-    return this._zone;
-  }
-  /** @internal */
-  _findPluginFor(eventName) {
-    let plugin = this._eventNameToPlugin.get(eventName);
-    if (plugin) {
-      return plugin;
-    }
-    const plugins = this._plugins;
-    plugin = plugins.find((plugin2) => plugin2.supports(eventName));
-    if (!plugin) {
-      throw new RuntimeError(5101, (typeof ngDevMode === "undefined" || ngDevMode) && `No event manager plugin found for event ${eventName}`);
-    }
-    this._eventNameToPlugin.set(eventName, plugin);
-    return plugin;
-  }
-  static ɵfac = function EventManager_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _EventManager)(ɵɵinject(EVENT_MANAGER_PLUGINS), ɵɵinject(NgZone));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _EventManager,
-    factory: _EventManager.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(EventManager, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [EVENT_MANAGER_PLUGINS]
-    }]
-  }, {
-    type: NgZone
-  }], null);
-})();
-var EventManagerPlugin = class {
-  _doc;
-  // TODO: remove (has some usage in G3)
-  constructor(_doc) {
-    this._doc = _doc;
-  }
-  // Using non-null assertion because it's set by EventManager's constructor
-  manager;
-};
-var APP_ID_ATTRIBUTE_NAME = "ng-app-id";
-function removeElements(elements) {
-  for (const element of elements) {
-    element.remove();
-  }
-}
-function createStyleElement(style, doc) {
-  const styleElement = doc.createElement("style");
-  styleElement.textContent = style;
-  return styleElement;
-}
-function addServerStyles(doc, appId, inline, external) {
-  const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}="${appId}"],link[${APP_ID_ATTRIBUTE_NAME}="${appId}"]`);
-  if (elements) {
-    for (const styleElement of elements) {
-      styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);
-      if (styleElement instanceof HTMLLinkElement) {
-        external.set(styleElement.href.slice(styleElement.href.lastIndexOf("/") + 1), {
-          usage: 0,
-          elements: [styleElement]
-        });
-      } else if (styleElement.textContent) {
-        inline.set(styleElement.textContent, {
-          usage: 0,
-          elements: [styleElement]
-        });
-      }
-    }
-  }
-}
-function createLinkElement(url, doc) {
-  const linkElement = doc.createElement("link");
-  linkElement.setAttribute("rel", "stylesheet");
-  linkElement.setAttribute("href", url);
-  return linkElement;
-}
-var SharedStylesHost = class _SharedStylesHost {
-  doc;
-  appId;
-  nonce;
-  /**
-   * Provides usage information for active inline style content and associated HTML <style> elements.
-   * Embedded styles typically originate from the `styles` metadata of a rendered component.
-   */
-  inline = /* @__PURE__ */ new Map();
-  /**
-   * Provides usage information for active external style URLs and the associated HTML <link> elements.
-   * External styles typically originate from the `ɵɵExternalStylesFeature` of a rendered component.
-   */
-  external = /* @__PURE__ */ new Map();
-  /**
-   * Set of host DOM nodes that will have styles attached.
-   */
-  hosts = /* @__PURE__ */ new Set();
-  /**
-   * Whether the application code is currently executing on a server.
-   */
-  isServer;
-  constructor(doc, appId, nonce, platformId = {}) {
-    this.doc = doc;
-    this.appId = appId;
-    this.nonce = nonce;
-    this.isServer = isPlatformServer(platformId);
-    addServerStyles(doc, appId, this.inline, this.external);
-    this.hosts.add(doc.head);
-  }
-  /**
-   * Adds embedded styles to the DOM via HTML `style` elements.
-   * @param styles An array of style content strings.
-   */
-  addStyles(styles, urls) {
-    for (const value of styles) {
-      this.addUsage(value, this.inline, createStyleElement);
-    }
-    urls?.forEach((value) => this.addUsage(value, this.external, createLinkElement));
-  }
-  /**
-   * Removes embedded styles from the DOM that were added as HTML `style` elements.
-   * @param styles An array of style content strings.
-   */
-  removeStyles(styles, urls) {
-    for (const value of styles) {
-      this.removeUsage(value, this.inline);
-    }
-    urls?.forEach((value) => this.removeUsage(value, this.external));
-  }
-  addUsage(value, usages, creator) {
-    const record = usages.get(value);
-    if (record) {
-      if ((typeof ngDevMode === "undefined" || ngDevMode) && record.usage === 0) {
-        record.elements.forEach((element) => element.setAttribute("ng-style-reused", ""));
-      }
-      record.usage++;
-    } else {
-      usages.set(value, {
-        usage: 1,
-        elements: [...this.hosts].map((host) => this.addElement(host, creator(value, this.doc)))
-      });
-    }
-  }
-  removeUsage(value, usages) {
-    const record = usages.get(value);
-    if (record) {
-      record.usage--;
-      if (record.usage <= 0) {
-        removeElements(record.elements);
-        usages.delete(value);
-      }
-    }
-  }
-  ngOnDestroy() {
-    for (const [, {
-      elements
-    }] of [...this.inline, ...this.external]) {
-      removeElements(elements);
-    }
-    this.hosts.clear();
-  }
-  /**
-   * Adds a host node to the set of style hosts and adds all existing style usage to
-   * the newly added host node.
-   *
-   * This is currently only used for Shadow DOM encapsulation mode.
-   */
-  addHost(hostNode) {
-    this.hosts.add(hostNode);
-    for (const [style, {
-      elements
-    }] of this.inline) {
-      elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));
-    }
-    for (const [url, {
-      elements
-    }] of this.external) {
-      elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));
-    }
-  }
-  removeHost(hostNode) {
-    this.hosts.delete(hostNode);
-  }
-  addElement(host, element) {
-    if (this.nonce) {
-      element.setAttribute("nonce", this.nonce);
-    }
-    if (this.isServer) {
-      element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);
-    }
-    return host.appendChild(element);
-  }
-  static ɵfac = function SharedStylesHost_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _SharedStylesHost)(ɵɵinject(DOCUMENT), ɵɵinject(APP_ID), ɵɵinject(CSP_NONCE, 8), ɵɵinject(PLATFORM_ID));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _SharedStylesHost,
-    factory: _SharedStylesHost.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SharedStylesHost, [{
-    type: Injectable
-  }], () => [{
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [APP_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [CSP_NONCE]
-    }, {
-      type: Optional
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }], null);
-})();
-var NAMESPACE_URIS = {
-  "svg": "http://www.w3.org/2000/svg",
-  "xhtml": "http://www.w3.org/1999/xhtml",
-  "xlink": "http://www.w3.org/1999/xlink",
-  "xml": "http://www.w3.org/XML/1998/namespace",
-  "xmlns": "http://www.w3.org/2000/xmlns/",
-  "math": "http://www.w3.org/1998/Math/MathML"
-};
-var COMPONENT_REGEX = /%COMP%/g;
-var COMPONENT_VARIABLE = "%COMP%";
-var HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;
-var CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;
-var REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;
-var REMOVE_STYLES_ON_COMPONENT_DESTROY = new InjectionToken(ngDevMode ? "RemoveStylesOnCompDestroy" : "", {
-  providedIn: "root",
-  factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT
-});
-function shimContentAttribute(componentShortId) {
-  return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
-}
-function shimHostAttribute(componentShortId) {
-  return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
-}
-function shimStylesContent(compId, styles) {
-  return styles.map((s) => s.replace(COMPONENT_REGEX, compId));
-}
-var DomRendererFactory2 = class _DomRendererFactory2 {
-  eventManager;
-  sharedStylesHost;
-  appId;
-  removeStylesOnCompDestroy;
-  doc;
-  platformId;
-  ngZone;
-  nonce;
-  rendererByCompId = /* @__PURE__ */ new Map();
-  defaultRenderer;
-  platformIsServer;
-  constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, platformId, ngZone, nonce = null) {
-    this.eventManager = eventManager;
-    this.sharedStylesHost = sharedStylesHost;
-    this.appId = appId;
-    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
-    this.doc = doc;
-    this.platformId = platformId;
-    this.ngZone = ngZone;
-    this.nonce = nonce;
-    this.platformIsServer = isPlatformServer(platformId);
-    this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.platformIsServer);
-  }
-  createRenderer(element, type) {
-    if (!element || !type) {
-      return this.defaultRenderer;
-    }
-    if (this.platformIsServer && type.encapsulation === ViewEncapsulation.ShadowDom) {
-      type = __spreadProps(__spreadValues({}, type), {
-        encapsulation: ViewEncapsulation.Emulated
-      });
-    }
-    const renderer = this.getOrCreateRenderer(element, type);
-    if (renderer instanceof EmulatedEncapsulationDomRenderer2) {
-      renderer.applyToHost(element);
-    } else if (renderer instanceof NoneEncapsulationDomRenderer) {
-      renderer.applyStyles();
-    }
-    return renderer;
-  }
-  getOrCreateRenderer(element, type) {
-    const rendererByCompId = this.rendererByCompId;
-    let renderer = rendererByCompId.get(type.id);
-    if (!renderer) {
-      const doc = this.doc;
-      const ngZone = this.ngZone;
-      const eventManager = this.eventManager;
-      const sharedStylesHost = this.sharedStylesHost;
-      const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;
-      const platformIsServer = this.platformIsServer;
-      switch (type.encapsulation) {
-        case ViewEncapsulation.Emulated:
-          renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);
-          break;
-        case ViewEncapsulation.ShadowDom:
-          return new ShadowDomRenderer(eventManager, sharedStylesHost, element, type, doc, ngZone, this.nonce, platformIsServer);
-        default:
-          renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);
-          break;
-      }
-      rendererByCompId.set(type.id, renderer);
-    }
-    return renderer;
-  }
-  ngOnDestroy() {
-    this.rendererByCompId.clear();
-  }
-  static ɵfac = function DomRendererFactory2_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomRendererFactory2)(ɵɵinject(EventManager), ɵɵinject(SharedStylesHost), ɵɵinject(APP_ID), ɵɵinject(REMOVE_STYLES_ON_COMPONENT_DESTROY), ɵɵinject(DOCUMENT), ɵɵinject(PLATFORM_ID), ɵɵinject(NgZone), ɵɵinject(CSP_NONCE));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomRendererFactory2,
-    factory: _DomRendererFactory2.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomRendererFactory2, [{
-    type: Injectable
-  }], () => [{
-    type: EventManager
-  }, {
-    type: SharedStylesHost
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [APP_ID]
-    }]
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [REMOVE_STYLES_ON_COMPONENT_DESTROY]
-    }]
-  }, {
-    type: Document,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: Object,
-    decorators: [{
-      type: Inject,
-      args: [PLATFORM_ID]
-    }]
-  }, {
-    type: NgZone
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [CSP_NONCE]
-    }]
-  }], null);
-})();
-var DefaultDomRenderer2 = class {
-  eventManager;
-  doc;
-  ngZone;
-  platformIsServer;
-  data = /* @__PURE__ */ Object.create(null);
-  /**
-   * By default this renderer throws when encountering synthetic properties
-   * This can be disabled for example by the AsyncAnimationRendererFactory
-   */
-  throwOnSyntheticProps = true;
-  constructor(eventManager, doc, ngZone, platformIsServer) {
-    this.eventManager = eventManager;
-    this.doc = doc;
-    this.ngZone = ngZone;
-    this.platformIsServer = platformIsServer;
-  }
-  destroy() {
-  }
-  destroyNode = null;
-  createElement(name, namespace) {
-    if (namespace) {
-      return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);
-    }
-    return this.doc.createElement(name);
-  }
-  createComment(value) {
-    return this.doc.createComment(value);
-  }
-  createText(value) {
-    return this.doc.createTextNode(value);
-  }
-  appendChild(parent, newChild) {
-    const targetParent = isTemplateNode(parent) ? parent.content : parent;
-    targetParent.appendChild(newChild);
-  }
-  insertBefore(parent, newChild, refChild) {
-    if (parent) {
-      const targetParent = isTemplateNode(parent) ? parent.content : parent;
-      targetParent.insertBefore(newChild, refChild);
-    }
-  }
-  removeChild(_parent, oldChild) {
-    oldChild.remove();
-  }
-  selectRootElement(selectorOrNode, preserveContent) {
-    let el = typeof selectorOrNode === "string" ? this.doc.querySelector(selectorOrNode) : selectorOrNode;
-    if (!el) {
-      throw new RuntimeError(-5104, (typeof ngDevMode === "undefined" || ngDevMode) && `The selector "${selectorOrNode}" did not match any elements`);
-    }
-    if (!preserveContent) {
-      el.textContent = "";
-    }
-    return el;
-  }
-  parentNode(node) {
-    return node.parentNode;
-  }
-  nextSibling(node) {
-    return node.nextSibling;
-  }
-  setAttribute(el, name, value, namespace) {
-    if (namespace) {
-      name = namespace + ":" + name;
-      const namespaceUri = NAMESPACE_URIS[namespace];
-      if (namespaceUri) {
-        el.setAttributeNS(namespaceUri, name, value);
-      } else {
-        el.setAttribute(name, value);
-      }
-    } else {
-      el.setAttribute(name, value);
-    }
-  }
-  removeAttribute(el, name, namespace) {
-    if (namespace) {
-      const namespaceUri = NAMESPACE_URIS[namespace];
-      if (namespaceUri) {
-        el.removeAttributeNS(namespaceUri, name);
-      } else {
-        el.removeAttribute(`${namespace}:${name}`);
-      }
-    } else {
-      el.removeAttribute(name);
-    }
-  }
-  addClass(el, name) {
-    el.classList.add(name);
-  }
-  removeClass(el, name) {
-    el.classList.remove(name);
-  }
-  setStyle(el, style, value, flags) {
-    if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {
-      el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? "important" : "");
-    } else {
-      el.style[style] = value;
-    }
-  }
-  removeStyle(el, style, flags) {
-    if (flags & RendererStyleFlags2.DashCase) {
-      el.style.removeProperty(style);
-    } else {
-      el.style[style] = "";
-    }
-  }
-  setProperty(el, name, value) {
-    if (el == null) {
-      return;
-    }
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, "property");
-    el[name] = value;
-  }
-  setValue(node, value) {
-    node.nodeValue = value;
-  }
-  listen(target, event, callback) {
-    (typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, "listener");
-    if (typeof target === "string") {
-      target = getDOM().getGlobalEventTarget(this.doc, target);
-      if (!target) {
-        throw new Error(`Unsupported event target ${target} for event ${event}`);
-      }
-    }
-    return this.eventManager.addEventListener(target, event, this.decoratePreventDefault(callback));
-  }
-  decoratePreventDefault(eventHandler) {
-    return (event) => {
-      if (event === "__ngUnwrap__") {
-        return eventHandler;
-      }
-      const allowDefaultBehavior = this.platformIsServer ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);
-      if (allowDefaultBehavior === false) {
-        event.preventDefault();
-      }
-      return void 0;
-    };
-  }
-};
-var AT_CHARCODE = (() => "@".charCodeAt(0))();
-function checkNoSyntheticProp(name, nameKind) {
-  if (name.charCodeAt(0) === AT_CHARCODE) {
-    throw new RuntimeError(5105, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:
-  - Either \`BrowserAnimationsModule\` or \`NoopAnimationsModule\` are imported in your application.
-  - There is corresponding configuration for the animation named \`${name}\` defined in the \`animations\` field of the \`@Component\` decorator (see https://angular.io/api/core/Component#animations).`);
-  }
-}
-function isTemplateNode(node) {
-  return node.tagName === "TEMPLATE" && node.content !== void 0;
-}
-var ShadowDomRenderer = class extends DefaultDomRenderer2 {
-  sharedStylesHost;
-  hostEl;
-  shadowRoot;
-  constructor(eventManager, sharedStylesHost, hostEl, component, doc, ngZone, nonce, platformIsServer) {
-    super(eventManager, doc, ngZone, platformIsServer);
-    this.sharedStylesHost = sharedStylesHost;
-    this.hostEl = hostEl;
-    this.shadowRoot = hostEl.attachShadow({
-      mode: "open"
-    });
-    this.sharedStylesHost.addHost(this.shadowRoot);
-    const styles = shimStylesContent(component.id, component.styles);
-    for (const style of styles) {
-      const styleEl = document.createElement("style");
-      if (nonce) {
-        styleEl.setAttribute("nonce", nonce);
-      }
-      styleEl.textContent = style;
-      this.shadowRoot.appendChild(styleEl);
-    }
-    const styleUrls = component.getExternalStyles?.();
-    if (styleUrls) {
-      for (const styleUrl of styleUrls) {
-        const linkEl = createLinkElement(styleUrl, doc);
-        if (nonce) {
-          linkEl.setAttribute("nonce", nonce);
-        }
-        this.shadowRoot.appendChild(linkEl);
-      }
-    }
-  }
-  nodeOrShadowRoot(node) {
-    return node === this.hostEl ? this.shadowRoot : node;
-  }
-  appendChild(parent, newChild) {
-    return super.appendChild(this.nodeOrShadowRoot(parent), newChild);
-  }
-  insertBefore(parent, newChild, refChild) {
-    return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);
-  }
-  removeChild(_parent, oldChild) {
-    return super.removeChild(null, oldChild);
-  }
-  parentNode(node) {
-    return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));
-  }
-  destroy() {
-    this.sharedStylesHost.removeHost(this.shadowRoot);
-  }
-};
-var NoneEncapsulationDomRenderer = class extends DefaultDomRenderer2 {
-  sharedStylesHost;
-  removeStylesOnCompDestroy;
-  styles;
-  styleUrls;
-  constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId) {
-    super(eventManager, doc, ngZone, platformIsServer);
-    this.sharedStylesHost = sharedStylesHost;
-    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
-    this.styles = compId ? shimStylesContent(compId, component.styles) : component.styles;
-    this.styleUrls = component.getExternalStyles?.(compId);
-  }
-  applyStyles() {
-    this.sharedStylesHost.addStyles(this.styles, this.styleUrls);
-  }
-  destroy() {
-    if (!this.removeStylesOnCompDestroy) {
-      return;
-    }
-    this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);
-  }
-};
-var EmulatedEncapsulationDomRenderer2 = class extends NoneEncapsulationDomRenderer {
-  contentAttr;
-  hostAttr;
-  constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer) {
-    const compId = appId + "-" + component.id;
-    super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId);
-    this.contentAttr = shimContentAttribute(compId);
-    this.hostAttr = shimHostAttribute(compId);
-  }
-  applyToHost(element) {
-    this.applyStyles();
-    this.setAttribute(element, this.hostAttr, "");
-  }
-  createElement(parent, name) {
-    const el = super.createElement(parent, name);
-    super.setAttribute(el, this.contentAttr, "");
-    return el;
-  }
-};
-var DomEventsPlugin = class _DomEventsPlugin extends EventManagerPlugin {
-  constructor(doc) {
-    super(doc);
-  }
-  // This plugin should come last in the list of plugins, because it accepts all
-  // events.
-  supports(eventName) {
-    return true;
-  }
-  addEventListener(element, eventName, handler) {
-    element.addEventListener(eventName, handler, false);
-    return () => this.removeEventListener(element, eventName, handler);
-  }
-  removeEventListener(target, eventName, callback) {
-    return target.removeEventListener(eventName, callback);
-  }
-  static ɵfac = function DomEventsPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomEventsPlugin)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomEventsPlugin,
-    factory: _DomEventsPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomEventsPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var MODIFIER_KEYS = ["alt", "control", "meta", "shift"];
-var _keyMap = {
-  "\b": "Backspace",
-  "	": "Tab",
-  "": "Delete",
-  "\x1B": "Escape",
-  "Del": "Delete",
-  "Esc": "Escape",
-  "Left": "ArrowLeft",
-  "Right": "ArrowRight",
-  "Up": "ArrowUp",
-  "Down": "ArrowDown",
-  "Menu": "ContextMenu",
-  "Scroll": "ScrollLock",
-  "Win": "OS"
-};
-var MODIFIER_KEY_GETTERS = {
-  "alt": (event) => event.altKey,
-  "control": (event) => event.ctrlKey,
-  "meta": (event) => event.metaKey,
-  "shift": (event) => event.shiftKey
-};
-var KeyEventsPlugin = class _KeyEventsPlugin extends EventManagerPlugin {
-  /**
-   * Initializes an instance of the browser plug-in.
-   * @param doc The document in which key events will be detected.
-   */
-  constructor(doc) {
-    super(doc);
-  }
-  /**
-   * Reports whether a named key event is supported.
-   * @param eventName The event name to query.
-   * @return True if the named key event is supported.
-   */
-  supports(eventName) {
-    return _KeyEventsPlugin.parseEventName(eventName) != null;
-  }
-  /**
-   * Registers a handler for a specific element and key event.
-   * @param element The HTML element to receive event notifications.
-   * @param eventName The name of the key event to listen for.
-   * @param handler A function to call when the notification occurs. Receives the
-   * event object as an argument.
-   * @returns The key event that was registered.
-   */
-  addEventListener(element, eventName, handler) {
-    const parsedEvent = _KeyEventsPlugin.parseEventName(eventName);
-    const outsideHandler = _KeyEventsPlugin.eventCallback(parsedEvent["fullKey"], handler, this.manager.getZone());
-    return this.manager.getZone().runOutsideAngular(() => {
-      return getDOM().onAndCancel(element, parsedEvent["domEventName"], outsideHandler);
-    });
-  }
-  /**
-   * Parses the user provided full keyboard event definition and normalizes it for
-   * later internal use. It ensures the string is all lowercase, converts special
-   * characters to a standard spelling, and orders all the values consistently.
-   *
-   * @param eventName The name of the key event to listen for.
-   * @returns an object with the full, normalized string, and the dom event name
-   * or null in the case when the event doesn't match a keyboard event.
-   */
-  static parseEventName(eventName) {
-    const parts = eventName.toLowerCase().split(".");
-    const domEventName = parts.shift();
-    if (parts.length === 0 || !(domEventName === "keydown" || domEventName === "keyup")) {
-      return null;
-    }
-    const key = _KeyEventsPlugin._normalizeKey(parts.pop());
-    let fullKey = "";
-    let codeIX = parts.indexOf("code");
-    if (codeIX > -1) {
-      parts.splice(codeIX, 1);
-      fullKey = "code.";
-    }
-    MODIFIER_KEYS.forEach((modifierName) => {
-      const index = parts.indexOf(modifierName);
-      if (index > -1) {
-        parts.splice(index, 1);
-        fullKey += modifierName + ".";
-      }
-    });
-    fullKey += key;
-    if (parts.length != 0 || key.length === 0) {
-      return null;
-    }
-    const result = {};
-    result["domEventName"] = domEventName;
-    result["fullKey"] = fullKey;
-    return result;
-  }
-  /**
-   * Determines whether the actual keys pressed match the configured key code string.
-   * The `fullKeyCode` event is normalized in the `parseEventName` method when the
-   * event is attached to the DOM during the `addEventListener` call. This is unseen
-   * by the end user and is normalized for internal consistency and parsing.
-   *
-   * @param event The keyboard event.
-   * @param fullKeyCode The normalized user defined expected key event string
-   * @returns boolean.
-   */
-  static matchEventFullKeyCode(event, fullKeyCode) {
-    let keycode = _keyMap[event.key] || event.key;
-    let key = "";
-    if (fullKeyCode.indexOf("code.") > -1) {
-      keycode = event.code;
-      key = "code.";
-    }
-    if (keycode == null || !keycode) return false;
-    keycode = keycode.toLowerCase();
-    if (keycode === " ") {
-      keycode = "space";
-    } else if (keycode === ".") {
-      keycode = "dot";
-    }
-    MODIFIER_KEYS.forEach((modifierName) => {
-      if (modifierName !== keycode) {
-        const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];
-        if (modifierGetter(event)) {
-          key += modifierName + ".";
-        }
-      }
-    });
-    key += keycode;
-    return key === fullKeyCode;
-  }
-  /**
-   * Configures a handler callback for a key event.
-   * @param fullKey The event name that combines all simultaneous keystrokes.
-   * @param handler The function that responds to the key event.
-   * @param zone The zone in which the event occurred.
-   * @returns A callback function.
-   */
-  static eventCallback(fullKey, handler, zone) {
-    return (event) => {
-      if (_KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {
-        zone.runGuarded(() => handler(event));
-      }
-    };
-  }
-  /** @internal */
-  static _normalizeKey(keyName) {
-    return keyName === "esc" ? "escape" : keyName;
-  }
-  static ɵfac = function KeyEventsPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _KeyEventsPlugin)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _KeyEventsPlugin,
-    factory: _KeyEventsPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(KeyEventsPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function bootstrapApplication(rootComponent, options) {
-  return internalCreateApplication(__spreadValues({
-    rootComponent
-  }, createProvidersConfig(options)));
-}
-function createApplication(options) {
-  return internalCreateApplication(createProvidersConfig(options));
-}
-function createProvidersConfig(options) {
-  return {
-    appProviders: [...BROWSER_MODULE_PROVIDERS, ...options?.providers ?? []],
-    platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS
-  };
-}
-function provideProtractorTestingSupport() {
-  return [...TESTABILITY_PROVIDERS];
-}
-function initDomAdapter() {
-  BrowserDomAdapter.makeCurrent();
-}
-function errorHandler() {
-  return new ErrorHandler();
-}
-function _document() {
-  setDocument(document);
-  return document;
-}
-var INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{
-  provide: PLATFORM_ID,
-  useValue: PLATFORM_BROWSER_ID
-}, {
-  provide: PLATFORM_INITIALIZER,
-  useValue: initDomAdapter,
-  multi: true
-}, {
-  provide: DOCUMENT,
-  useFactory: _document,
-  deps: []
-}];
-var platformBrowser = createPlatformFactory(platformCore, "browser", INTERNAL_BROWSER_PLATFORM_PROVIDERS);
-var BROWSER_MODULE_PROVIDERS_MARKER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "BrowserModule Providers Marker" : "");
-var TESTABILITY_PROVIDERS = [{
-  provide: TESTABILITY_GETTER,
-  useClass: BrowserGetTestability,
-  deps: []
-}, {
-  provide: TESTABILITY,
-  useClass: Testability,
-  deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
-}, {
-  provide: Testability,
-  // Also provide as `Testability` for backwards-compatibility.
-  useClass: Testability,
-  deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
-}];
-var BROWSER_MODULE_PROVIDERS = [{
-  provide: INJECTOR_SCOPE,
-  useValue: "root"
-}, {
-  provide: ErrorHandler,
-  useFactory: errorHandler,
-  deps: []
-}, {
-  provide: EVENT_MANAGER_PLUGINS,
-  useClass: DomEventsPlugin,
-  multi: true,
-  deps: [DOCUMENT, NgZone, PLATFORM_ID]
-}, {
-  provide: EVENT_MANAGER_PLUGINS,
-  useClass: KeyEventsPlugin,
-  multi: true,
-  deps: [DOCUMENT]
-}, DomRendererFactory2, SharedStylesHost, EventManager, {
-  provide: RendererFactory2,
-  useExisting: DomRendererFactory2
-}, {
-  provide: XhrFactory,
-  useClass: BrowserXhr,
-  deps: []
-}, typeof ngDevMode === "undefined" || ngDevMode ? {
-  provide: BROWSER_MODULE_PROVIDERS_MARKER,
-  useValue: true
-} : []];
-var BrowserModule = class _BrowserModule {
-  constructor(providersAlreadyPresent) {
-    if ((typeof ngDevMode === "undefined" || ngDevMode) && providersAlreadyPresent) {
-      throw new RuntimeError(5100, `Providers from the \`BrowserModule\` have already been loaded. If you need access to common directives such as NgIf and NgFor, import the \`CommonModule\` instead.`);
-    }
-  }
-  static ɵfac = function BrowserModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _BrowserModule)(ɵɵinject(BROWSER_MODULE_PROVIDERS_MARKER, 12));
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _BrowserModule,
-    exports: [CommonModule, ApplicationModule]
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
-    imports: [CommonModule, ApplicationModule]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserModule, [{
-    type: NgModule,
-    args: [{
-      providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
-      exports: [CommonModule, ApplicationModule]
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: SkipSelf
-    }, {
-      type: Inject,
-      args: [BROWSER_MODULE_PROVIDERS_MARKER]
-    }]
-  }], null);
-})();
-var Meta = class _Meta {
-  _doc;
-  _dom;
-  constructor(_doc) {
-    this._doc = _doc;
-    this._dom = getDOM();
-  }
-  /**
-   * Retrieves or creates a specific `<meta>` tag element in the current HTML document.
-   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
-   * values in the provided tag definition, and verifies that all other attribute values are equal.
-   * If an existing element is found, it is returned and is not modified in any way.
-   * @param tag The definition of a `<meta>` element to match or create.
-   * @param forceCreation True to create a new element without checking whether one already exists.
-   * @returns The existing element with the same attributes and values if found,
-   * the new element if no match is found, or `null` if the tag parameter is not defined.
-   */
-  addTag(tag, forceCreation = false) {
-    if (!tag) return null;
-    return this._getOrCreateElement(tag, forceCreation);
-  }
-  /**
-   * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.
-   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
-   * values in the provided tag definition, and verifies that all other attribute values are equal.
-   * @param tags An array of tag definitions to match or create.
-   * @param forceCreation True to create new elements without checking whether they already exist.
-   * @returns The matching elements if found, or the new elements.
-   */
-  addTags(tags, forceCreation = false) {
-    if (!tags) return [];
-    return tags.reduce((result, tag) => {
-      if (tag) {
-        result.push(this._getOrCreateElement(tag, forceCreation));
-      }
-      return result;
-    }, []);
-  }
-  /**
-   * Retrieves a `<meta>` tag element in the current HTML document.
-   * @param attrSelector The tag attribute and value to match against, in the format
-   * `"tag_attribute='value string'"`.
-   * @returns The matching element, if any.
-   */
-  getTag(attrSelector) {
-    if (!attrSelector) return null;
-    return this._doc.querySelector(`meta[${attrSelector}]`) || null;
-  }
-  /**
-   * Retrieves a set of `<meta>` tag elements in the current HTML document.
-   * @param attrSelector The tag attribute and value to match against, in the format
-   * `"tag_attribute='value string'"`.
-   * @returns The matching elements, if any.
-   */
-  getTags(attrSelector) {
-    if (!attrSelector) return [];
-    const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);
-    return list ? [].slice.call(list) : [];
-  }
-  /**
-   * Modifies an existing `<meta>` tag element in the current HTML document.
-   * @param tag The tag description with which to replace the existing tag content.
-   * @param selector A tag attribute and value to match against, to identify
-   * an existing tag. A string in the format `"tag_attribute=`value string`"`.
-   * If not supplied, matches a tag with the same `name` or `property` attribute value as the
-   * replacement tag.
-   * @return The modified element.
-   */
-  updateTag(tag, selector) {
-    if (!tag) return null;
-    selector = selector || this._parseSelector(tag);
-    const meta = this.getTag(selector);
-    if (meta) {
-      return this._setMetaElementAttributes(tag, meta);
-    }
-    return this._getOrCreateElement(tag, true);
-  }
-  /**
-   * Removes an existing `<meta>` tag element from the current HTML document.
-   * @param attrSelector A tag attribute and value to match against, to identify
-   * an existing tag. A string in the format `"tag_attribute=`value string`"`.
-   */
-  removeTag(attrSelector) {
-    this.removeTagElement(this.getTag(attrSelector));
-  }
-  /**
-   * Removes an existing `<meta>` tag element from the current HTML document.
-   * @param meta The tag definition to match against to identify an existing tag.
-   */
-  removeTagElement(meta) {
-    if (meta) {
-      this._dom.remove(meta);
-    }
-  }
-  _getOrCreateElement(meta, forceCreation = false) {
-    if (!forceCreation) {
-      const selector = this._parseSelector(meta);
-      const elem = this.getTags(selector).filter((elem2) => this._containsAttributes(meta, elem2))[0];
-      if (elem !== void 0) return elem;
-    }
-    const element = this._dom.createElement("meta");
-    this._setMetaElementAttributes(meta, element);
-    const head = this._doc.getElementsByTagName("head")[0];
-    head.appendChild(element);
-    return element;
-  }
-  _setMetaElementAttributes(tag, el) {
-    Object.keys(tag).forEach((prop) => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));
-    return el;
-  }
-  _parseSelector(tag) {
-    const attr = tag.name ? "name" : "property";
-    return `${attr}="${tag[attr]}"`;
-  }
-  _containsAttributes(tag, elem) {
-    return Object.keys(tag).every((key) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
-  }
-  _getMetaKeyMap(prop) {
-    return META_KEYS_MAP[prop] || prop;
-  }
-  static ɵfac = function Meta_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Meta)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Meta,
-    factory: _Meta.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Meta, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var META_KEYS_MAP = {
-  httpEquiv: "http-equiv"
-};
-var Title = class _Title {
-  _doc;
-  constructor(_doc) {
-    this._doc = _doc;
-  }
-  /**
-   * Get the title of the current HTML document.
-   */
-  getTitle() {
-    return this._doc.title;
-  }
-  /**
-   * Set the title of the current HTML document.
-   * @param newTitle
-   */
-  setTitle(newTitle) {
-    this._doc.title = newTitle || "";
-  }
-  static ɵfac = function Title_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _Title)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _Title,
-    factory: _Title.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Title, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-function exportNgVar(name, value) {
-  if (typeof COMPILED === "undefined" || !COMPILED) {
-    const ng = _global["ng"] = _global["ng"] || {};
-    ng[name] = value;
-  }
-}
-var ChangeDetectionPerfRecord = class {
-  msPerTick;
-  numTicks;
-  constructor(msPerTick, numTicks) {
-    this.msPerTick = msPerTick;
-    this.numTicks = numTicks;
-  }
-};
-var AngularProfiler = class {
-  appRef;
-  constructor(ref) {
-    this.appRef = ref.injector.get(ApplicationRef);
-  }
-  // tslint:disable:no-console
-  /**
-   * Exercises change detection in a loop and then prints the average amount of
-   * time in milliseconds how long a single round of change detection takes for
-   * the current state of the UI. It runs a minimum of 5 rounds for a minimum
-   * of 500 milliseconds.
-   *
-   * Optionally, a user may pass a `config` parameter containing a map of
-   * options. Supported options are:
-   *
-   * `record` (boolean) - causes the profiler to record a CPU profile while
-   * it exercises the change detector. Example:
-   *
-   * ```
-   * ng.profiler.timeChangeDetection({record: true})
-   * ```
-   */
-  timeChangeDetection(config) {
-    const record = config && config["record"];
-    const profileName = "Change Detection";
-    if (record && "profile" in console && typeof console.profile === "function") {
-      console.profile(profileName);
-    }
-    const start = performance.now();
-    let numTicks = 0;
-    while (numTicks < 5 || performance.now() - start < 500) {
-      this.appRef.tick();
-      numTicks++;
-    }
-    const end = performance.now();
-    if (record && "profileEnd" in console && typeof console.profileEnd === "function") {
-      console.profileEnd(profileName);
-    }
-    const msPerTick = (end - start) / numTicks;
-    console.log(`ran ${numTicks} change detection cycles`);
-    console.log(`${msPerTick.toFixed(2)} ms per check`);
-    return new ChangeDetectionPerfRecord(msPerTick, numTicks);
-  }
-};
-var PROFILER_GLOBAL_NAME = "profiler";
-function enableDebugTools(ref) {
-  exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));
-  return ref;
-}
-function disableDebugTools() {
-  exportNgVar(PROFILER_GLOBAL_NAME, null);
-}
-var By = class {
-  /**
-   * Match all nodes.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
-   */
-  static all() {
-    return () => true;
-  }
-  /**
-   * Match elements by the given CSS selector.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
-   */
-  static css(selector) {
-    return (debugElement) => {
-      return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;
-    };
-  }
-  /**
-   * Match nodes that have the given directive present.
-   *
-   * @usageNotes
-   * ### Example
-   *
-   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
-   */
-  static directive(type) {
-    return (debugNode) => debugNode.providerTokens.indexOf(type) !== -1;
-  }
-};
-function elementMatches(n, selector) {
-  if (getDOM().isElementNode(n)) {
-    return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);
-  }
-  return false;
-}
-var EVENT_NAMES = {
-  // pan
-  "pan": true,
-  "panstart": true,
-  "panmove": true,
-  "panend": true,
-  "pancancel": true,
-  "panleft": true,
-  "panright": true,
-  "panup": true,
-  "pandown": true,
-  // pinch
-  "pinch": true,
-  "pinchstart": true,
-  "pinchmove": true,
-  "pinchend": true,
-  "pinchcancel": true,
-  "pinchin": true,
-  "pinchout": true,
-  // press
-  "press": true,
-  "pressup": true,
-  // rotate
-  "rotate": true,
-  "rotatestart": true,
-  "rotatemove": true,
-  "rotateend": true,
-  "rotatecancel": true,
-  // swipe
-  "swipe": true,
-  "swipeleft": true,
-  "swiperight": true,
-  "swipeup": true,
-  "swipedown": true,
-  // tap
-  "tap": true,
-  "doubletap": true
-};
-var HAMMER_GESTURE_CONFIG = new InjectionToken("HammerGestureConfig");
-var HAMMER_LOADER = new InjectionToken("HammerLoader");
-var HammerGestureConfig = class _HammerGestureConfig {
-  /**
-   * A set of supported event names for gestures to be used in Angular.
-   * Angular supports all built-in recognizers, as listed in
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   */
-  events = [];
-  /**
-   * Maps gesture event names to a set of configuration options
-   * that specify overrides to the default values for specific properties.
-   *
-   * The key is a supported event name to be configured,
-   * and the options object contains a set of properties, with override values
-   * to be applied to the named recognizer event.
-   * For example, to disable recognition of the rotate event, specify
-   *  `{"rotate": {"enable": false}}`.
-   *
-   * Properties that are not present take the HammerJS default values.
-   * For information about which properties are supported for which events,
-   * and their allowed and default values, see
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   *
-   */
-  overrides = {};
-  /**
-   * Properties whose default values can be overridden for a given event.
-   * Different sets of properties apply to different events.
-   * For information about which properties are supported for which events,
-   * and their allowed and default values, see
-   * [HammerJS documentation](https://hammerjs.github.io/).
-   */
-  options;
-  /**
-   * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
-   * and attaches it to a given HTML element.
-   * @param element The element that will recognize gestures.
-   * @returns A HammerJS event-manager object.
-   */
-  buildHammer(element) {
-    const mc = new Hammer(element, this.options);
-    mc.get("pinch").set({
-      enable: true
-    });
-    mc.get("rotate").set({
-      enable: true
-    });
-    for (const eventName in this.overrides) {
-      mc.get(eventName).set(this.overrides[eventName]);
-    }
-    return mc;
-  }
-  static ɵfac = function HammerGestureConfig_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerGestureConfig)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HammerGestureConfig,
-    factory: _HammerGestureConfig.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGestureConfig, [{
-    type: Injectable
-  }], null, null);
-})();
-var HammerGesturesPlugin = class _HammerGesturesPlugin extends EventManagerPlugin {
-  _config;
-  console;
-  loader;
-  _loaderPromise = null;
-  constructor(doc, _config, console2, loader) {
-    super(doc);
-    this._config = _config;
-    this.console = console2;
-    this.loader = loader;
-  }
-  supports(eventName) {
-    if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
-      return false;
-    }
-    if (!window.Hammer && !this.loader) {
-      if (typeof ngDevMode === "undefined" || ngDevMode) {
-        this.console.warn(`The "${eventName}" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.`);
-      }
-      return false;
-    }
-    return true;
-  }
-  addEventListener(element, eventName, handler) {
-    const zone = this.manager.getZone();
-    eventName = eventName.toLowerCase();
-    if (!window.Hammer && this.loader) {
-      this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());
-      let cancelRegistration = false;
-      let deregister = () => {
-        cancelRegistration = true;
-      };
-      zone.runOutsideAngular(() => this._loaderPromise.then(() => {
-        if (!window.Hammer) {
-          if (typeof ngDevMode === "undefined" || ngDevMode) {
-            this.console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);
-          }
-          deregister = () => {
-          };
-          return;
-        }
-        if (!cancelRegistration) {
-          deregister = this.addEventListener(element, eventName, handler);
-        }
-      }).catch(() => {
-        if (typeof ngDevMode === "undefined" || ngDevMode) {
-          this.console.warn(`The "${eventName}" event cannot be bound because the custom Hammer.JS loader failed.`);
-        }
-        deregister = () => {
-        };
-      }));
-      return () => {
-        deregister();
-      };
-    }
-    return zone.runOutsideAngular(() => {
-      const mc = this._config.buildHammer(element);
-      const callback = function(eventObj) {
-        zone.runGuarded(function() {
-          handler(eventObj);
-        });
-      };
-      mc.on(eventName, callback);
-      return () => {
-        mc.off(eventName, callback);
-        if (typeof mc.destroy === "function") {
-          mc.destroy();
-        }
-      };
-    });
-  }
-  isCustomEvent(eventName) {
-    return this._config.events.indexOf(eventName) > -1;
-  }
-  static ɵfac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerGesturesPlugin)(ɵɵinject(DOCUMENT), ɵɵinject(HAMMER_GESTURE_CONFIG), ɵɵinject(Console), ɵɵinject(HAMMER_LOADER, 8));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _HammerGesturesPlugin,
-    factory: _HammerGesturesPlugin.ɵfac
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGesturesPlugin, [{
-    type: Injectable
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }, {
-    type: HammerGestureConfig,
-    decorators: [{
-      type: Inject,
-      args: [HAMMER_GESTURE_CONFIG]
-    }]
-  }, {
-    type: Console
-  }, {
-    type: void 0,
-    decorators: [{
-      type: Optional
-    }, {
-      type: Inject,
-      args: [HAMMER_LOADER]
-    }]
-  }], null);
-})();
-var HammerModule = class _HammerModule {
-  static ɵfac = function HammerModule_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _HammerModule)();
-  };
-  static ɵmod = ɵɵdefineNgModule({
-    type: _HammerModule
-  });
-  static ɵinj = ɵɵdefineInjector({
-    providers: [{
-      provide: EVENT_MANAGER_PLUGINS,
-      useClass: HammerGesturesPlugin,
-      multi: true,
-      deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Console, [new Optional(), HAMMER_LOADER]]
-    }, {
-      provide: HAMMER_GESTURE_CONFIG,
-      useClass: HammerGestureConfig,
-      deps: []
-    }]
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerModule, [{
-    type: NgModule,
-    args: [{
-      providers: [{
-        provide: EVENT_MANAGER_PLUGINS,
-        useClass: HammerGesturesPlugin,
-        multi: true,
-        deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Console, [new Optional(), HAMMER_LOADER]]
-      }, {
-        provide: HAMMER_GESTURE_CONFIG,
-        useClass: HammerGestureConfig,
-        deps: []
-      }]
-    }]
-  }], null, null);
-})();
-var DomSanitizer = class _DomSanitizer {
-  static ɵfac = function DomSanitizer_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomSanitizer)();
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomSanitizer,
-    factory: function DomSanitizer_Factory(__ngFactoryType__) {
-      let __ngConditionalFactory__ = null;
-      if (__ngFactoryType__) {
-        __ngConditionalFactory__ = new (__ngFactoryType__ || _DomSanitizer)();
-      } else {
-        __ngConditionalFactory__ = ɵɵinject(DomSanitizerImpl);
-      }
-      return __ngConditionalFactory__;
-    },
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizer, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root",
-      useExisting: forwardRef(() => DomSanitizerImpl)
-    }]
-  }], null, null);
-})();
-var DomSanitizerImpl = class _DomSanitizerImpl extends DomSanitizer {
-  _doc;
-  constructor(_doc) {
-    super();
-    this._doc = _doc;
-  }
-  sanitize(ctx, value) {
-    if (value == null) return null;
-    switch (ctx) {
-      case SecurityContext.NONE:
-        return value;
-      case SecurityContext.HTML:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "HTML"
-          /* BypassType.Html */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return _sanitizeHtml(this._doc, String(value)).toString();
-      case SecurityContext.STYLE:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "Style"
-          /* BypassType.Style */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return value;
-      case SecurityContext.SCRIPT:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "Script"
-          /* BypassType.Script */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        throw new RuntimeError(5200, (typeof ngDevMode === "undefined" || ngDevMode) && "unsafe value used in a script context");
-      case SecurityContext.URL:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "URL"
-          /* BypassType.Url */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        return _sanitizeUrl(String(value));
-      case SecurityContext.RESOURCE_URL:
-        if (allowSanitizationBypassAndThrow(
-          value,
-          "ResourceURL"
-          /* BypassType.ResourceUrl */
-        )) {
-          return unwrapSafeValue(value);
-        }
-        throw new RuntimeError(5201, (typeof ngDevMode === "undefined" || ngDevMode) && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);
-      default:
-        throw new RuntimeError(5202, (typeof ngDevMode === "undefined" || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`);
-    }
-  }
-  bypassSecurityTrustHtml(value) {
-    return bypassSanitizationTrustHtml(value);
-  }
-  bypassSecurityTrustStyle(value) {
-    return bypassSanitizationTrustStyle(value);
-  }
-  bypassSecurityTrustScript(value) {
-    return bypassSanitizationTrustScript(value);
-  }
-  bypassSecurityTrustUrl(value) {
-    return bypassSanitizationTrustUrl(value);
-  }
-  bypassSecurityTrustResourceUrl(value) {
-    return bypassSanitizationTrustResourceUrl(value);
-  }
-  static ɵfac = function DomSanitizerImpl_Factory(__ngFactoryType__) {
-    return new (__ngFactoryType__ || _DomSanitizerImpl)(ɵɵinject(DOCUMENT));
-  };
-  static ɵprov = ɵɵdefineInjectable({
-    token: _DomSanitizerImpl,
-    factory: _DomSanitizerImpl.ɵfac,
-    providedIn: "root"
-  });
-};
-(() => {
-  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizerImpl, [{
-    type: Injectable,
-    args: [{
-      providedIn: "root"
-    }]
-  }], () => [{
-    type: void 0,
-    decorators: [{
-      type: Inject,
-      args: [DOCUMENT]
-    }]
-  }], null);
-})();
-var HydrationFeatureKind;
-(function(HydrationFeatureKind2) {
-  HydrationFeatureKind2[HydrationFeatureKind2["NoHttpTransferCache"] = 0] = "NoHttpTransferCache";
-  HydrationFeatureKind2[HydrationFeatureKind2["HttpTransferCacheOptions"] = 1] = "HttpTransferCacheOptions";
-  HydrationFeatureKind2[HydrationFeatureKind2["I18nSupport"] = 2] = "I18nSupport";
-  HydrationFeatureKind2[HydrationFeatureKind2["EventReplay"] = 3] = "EventReplay";
-  HydrationFeatureKind2[HydrationFeatureKind2["IncrementalHydration"] = 4] = "IncrementalHydration";
-})(HydrationFeatureKind || (HydrationFeatureKind = {}));
-function hydrationFeature(ɵkind, ɵproviders = [], ɵoptions = {}) {
-  return {
-    ɵkind,
-    ɵproviders
-  };
-}
-function withNoHttpTransferCache() {
-  return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);
-}
-function withHttpTransferCacheOptions(options) {
-  return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, withHttpTransferCache(options));
-}
-function withI18nSupport2() {
-  return hydrationFeature(HydrationFeatureKind.I18nSupport, withI18nSupport());
-}
-function withEventReplay2() {
-  return hydrationFeature(HydrationFeatureKind.EventReplay, withEventReplay());
-}
-function withIncrementalHydration2() {
-  return hydrationFeature(HydrationFeatureKind.IncrementalHydration, withIncrementalHydration());
-}
-function provideZoneJsCompatibilityDetector() {
-  return [{
-    provide: ENVIRONMENT_INITIALIZER,
-    useValue: () => {
-      const ngZone = inject(NgZone);
-      const isZoneless = inject(ZONELESS_ENABLED);
-      if (!isZoneless && ngZone.constructor !== NgZone) {
-        const console2 = inject(Console);
-        const message = formatRuntimeError(-5e3, "Angular detected that hydration was enabled for an application that uses a custom or a noop Zone.js implementation. This is not yet a fully supported configuration.");
-        console2.warn(message);
-      }
-    },
-    multi: true
-  }];
-}
-function provideClientHydration(...features) {
-  const providers = [];
-  const featuresKind = /* @__PURE__ */ new Set();
-  const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);
-  for (const {
-    ɵproviders,
-    ɵkind
-  } of features) {
-    featuresKind.add(ɵkind);
-    if (ɵproviders.length) {
-      providers.push(ɵproviders);
-    }
-  }
-  if (typeof ngDevMode !== "undefined" && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {
-    throw new Error("Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.");
-  }
-  return makeEnvironmentProviders([typeof ngDevMode !== "undefined" && ngDevMode ? provideZoneJsCompatibilityDetector() : [], withDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : withHttpTransferCache({}), providers]);
-}
-var VERSION2 = new Version("19.0.5");
-
-export {
-  getDOM,
-  setRootDomAdapter,
-  DOCUMENT,
-  PlatformLocation,
-  LOCATION_INITIALIZED,
-  LocationStrategy,
-  APP_BASE_HREF,
-  PathLocationStrategy,
-  HashLocationStrategy,
-  Location,
-  PLATFORM_SERVER_ID,
-  ViewportScroller,
-  NullViewportScroller,
-  XhrFactory,
-  HTTP_ROOT_INTERCEPTOR_FNS,
-  BrowserDomAdapter,
-  BrowserGetTestability,
-  EVENT_MANAGER_PLUGINS,
-  EventManager,
-  EventManagerPlugin,
-  SharedStylesHost,
-  REMOVE_STYLES_ON_COMPONENT_DESTROY,
-  DomRendererFactory2,
-  DomEventsPlugin,
-  KeyEventsPlugin,
-  bootstrapApplication,
-  createApplication,
-  provideProtractorTestingSupport,
-  initDomAdapter,
-  INTERNAL_BROWSER_PLATFORM_PROVIDERS,
-  platformBrowser,
-  BrowserModule,
-  Meta,
-  Title,
-  enableDebugTools,
-  disableDebugTools,
-  By,
-  HAMMER_GESTURE_CONFIG,
-  HAMMER_LOADER,
-  HammerGestureConfig,
-  HammerGesturesPlugin,
-  HammerModule,
-  DomSanitizer,
-  DomSanitizerImpl,
-  HydrationFeatureKind,
-  withNoHttpTransferCache,
-  withHttpTransferCacheOptions,
-  withI18nSupport2 as withI18nSupport,
-  withEventReplay2 as withEventReplay,
-  withIncrementalHydration2 as withIncrementalHydration,
-  provideClientHydration,
-  VERSION2 as VERSION
-};
-/*! Bundled license information:
-
-@angular/common/fesm2022/common.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/common/fesm2022/http.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-
-@angular/platform-browser/fesm2022/platform-browser.mjs:
-  (**
-   * @license Angular v19.0.5
-   * (c) 2010-2024 Google LLC. https://angular.io/
-   * License: MIT
-   *)
-*/
-//# sourceMappingURL=chunk-ZI5JGHU3.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-ZI5JGHU3.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/chunk-ZI5JGHU3.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/@angular/common/fesm2022/common.mjs", "../../../../../../node_modules/@angular/common/fesm2022/http.mjs", "../../../../../../node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs"],
-  "sourcesContent": ["/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, inject, Optional, Inject, ɵɵinject, ɵfindLocaleData, ɵLocaleDataIndex, ɵgetLocaleCurrencyCode, ɵgetLocalePluralCase, LOCALE_ID, ɵregisterLocaleData, ɵstringify, Directive, Input, createNgModule, NgModuleRef, ɵRuntimeError, Host, Attribute, RendererStyleFlags2, untracked, ɵisPromise, ɵisSubscribable, Pipe, DEFAULT_CURRENCY_CODE, NgModule, Version, ɵɵdefineInjectable, PLATFORM_ID, ɵformatRuntimeError, ɵIMAGE_CONFIG, Renderer2, ElementRef, Injector, ɵperformanceMarkFeature, NgZone, ApplicationRef, ChangeDetectorRef, numberAttribute, booleanAttribute, ɵIMAGE_CONFIG_DEFAULTS, ɵunwrapSafeValue } from '@angular/core';\nexport { ɵIMAGE_CONFIG as IMAGE_CONFIG } from '@angular/core';\nimport { Subject } from 'rxjs';\nlet _DOM = null;\nfunction getDOM() {\n  return _DOM;\n}\nfunction setRootDomAdapter(adapter) {\n  _DOM ??= adapter;\n}\n/* tslint:disable:requireParameterType */\n/**\n * Provides DOM operations in an environment-agnostic way.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nclass DomAdapter {}\n\n/**\n * This class wraps the platform Navigation API which allows server-specific and test\n * implementations.\n */\nclass PlatformNavigation {\n  static ɵfac = function PlatformNavigation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformNavigation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PlatformNavigation,\n    factory: () => (() => window.navigation)(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PlatformNavigation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => window.navigation\n    }]\n  }], null, null);\n})();\n\n/**\n * A DI Token representing the main rendering context.\n * In a browser and SSR this is the DOM Document.\n * When using SSR, that document is created by [Domino](https://github.com/angular/domino).\n *\n * @publicApi\n */\nconst DOCUMENT = new InjectionToken(ngDevMode ? 'DocumentToken' : '');\n\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be\n * platform-agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that Angular supports. For example, `@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `@angular/platform-server` provides\n * one suitable for use with server-side rendering.\n *\n * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}\n * when they need to interact with the DOM APIs like pushState, popState, etc.\n *\n * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly\n * by the {@link Router} in order to navigate between routes. Since all interactions between {@link\n * Router} /\n * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`\n * class, they are all platform-agnostic.\n *\n * @publicApi\n */\nclass PlatformLocation {\n  historyGo(relativePosition) {\n    throw new Error(ngDevMode ? 'Not implemented' : '');\n  }\n  static ɵfac = function PlatformLocation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PlatformLocation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PlatformLocation,\n    factory: () => (() => inject(BrowserPlatformLocation))(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PlatformLocation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => inject(BrowserPlatformLocation)\n    }]\n  }], null, null);\n})();\n/**\n * @description\n * Indicates when a location is initialized.\n *\n * @publicApi\n */\nconst LOCATION_INITIALIZED = new InjectionToken(ngDevMode ? 'Location Initialized' : '');\n/**\n * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * @publicApi\n */\nclass BrowserPlatformLocation extends PlatformLocation {\n  _location;\n  _history;\n  _doc = inject(DOCUMENT);\n  constructor() {\n    super();\n    this._location = window.location;\n    this._history = window.history;\n  }\n  getBaseHrefFromDOM() {\n    return getDOM().getBaseHref(this._doc);\n  }\n  onPopState(fn) {\n    const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n    window.addEventListener('popstate', fn, false);\n    return () => window.removeEventListener('popstate', fn);\n  }\n  onHashChange(fn) {\n    const window = getDOM().getGlobalEventTarget(this._doc, 'window');\n    window.addEventListener('hashchange', fn, false);\n    return () => window.removeEventListener('hashchange', fn);\n  }\n  get href() {\n    return this._location.href;\n  }\n  get protocol() {\n    return this._location.protocol;\n  }\n  get hostname() {\n    return this._location.hostname;\n  }\n  get port() {\n    return this._location.port;\n  }\n  get pathname() {\n    return this._location.pathname;\n  }\n  get search() {\n    return this._location.search;\n  }\n  get hash() {\n    return this._location.hash;\n  }\n  set pathname(newPath) {\n    this._location.pathname = newPath;\n  }\n  pushState(state, title, url) {\n    this._history.pushState(state, title, url);\n  }\n  replaceState(state, title, url) {\n    this._history.replaceState(state, title, url);\n  }\n  forward() {\n    this._history.forward();\n  }\n  back() {\n    this._history.back();\n  }\n  historyGo(relativePosition = 0) {\n    this._history.go(relativePosition);\n  }\n  getState() {\n    return this._history.state;\n  }\n  static ɵfac = function BrowserPlatformLocation_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserPlatformLocation)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: BrowserPlatformLocation,\n    factory: () => (() => new BrowserPlatformLocation())(),\n    providedIn: 'platform'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserPlatformLocation, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'platform',\n      useFactory: () => new BrowserPlatformLocation()\n    }]\n  }], () => [], null);\n})();\n\n/**\n * Joins two parts of a URL with a slash if needed.\n *\n * @param start  URL string\n * @param end    URL string\n *\n *\n * @returns The joined URL string.\n */\nfunction joinWithSlash(start, end) {\n  if (start.length == 0) {\n    return end;\n  }\n  if (end.length == 0) {\n    return start;\n  }\n  let slashes = 0;\n  if (start.endsWith('/')) {\n    slashes++;\n  }\n  if (end.startsWith('/')) {\n    slashes++;\n  }\n  if (slashes == 2) {\n    return start + end.substring(1);\n  }\n  if (slashes == 1) {\n    return start + end;\n  }\n  return start + '/' + end;\n}\n/**\n * Removes a trailing slash from a URL string if needed.\n * Looks for the first occurrence of either `#`, `?`, or the end of the\n * line as `/` characters and removes the trailing slash if one exists.\n *\n * @param url URL string.\n *\n * @returns The URL string, modified if needed.\n */\nfunction stripTrailingSlash(url) {\n  const match = url.match(/#|\\?|$/);\n  const pathEndIdx = match && match.index || url.length;\n  const droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);\n  return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);\n}\n/**\n * Normalizes URL parameters by prepending with `?` if needed.\n *\n * @param  params String of URL parameters.\n *\n * @returns The normalized URL parameters string.\n */\nfunction normalizeQueryParams(params) {\n  return params && params[0] !== '?' ? '?' + params : params;\n}\n\n/**\n * Enables the `Location` service to read route state from the browser's URL.\n * Angular provides two strategies:\n * `HashLocationStrategy` and `PathLocationStrategy`.\n *\n * Applications should use the `Router` or `Location` services to\n * interact with application route state.\n *\n * For instance, `HashLocationStrategy` produces URLs like\n * <code class=\"no-auto-link\">http://example.com/#/foo</code>,\n * and `PathLocationStrategy` produces\n * <code class=\"no-auto-link\">http://example.com/foo</code> as an equivalent URL.\n *\n * See these two classes for more.\n *\n * @publicApi\n */\nclass LocationStrategy {\n  historyGo(relativePosition) {\n    throw new Error(ngDevMode ? 'Not implemented' : '');\n  }\n  static ɵfac = function LocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LocationStrategy)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: LocationStrategy,\n    factory: () => (() => inject(PathLocationStrategy))(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LocationStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: () => inject(PathLocationStrategy)\n    }]\n  }], null, null);\n})();\n/**\n * A predefined DI token for the base href\n * to be used with the `PathLocationStrategy`.\n * The base href is the URL prefix that should be preserved when generating\n * and recognizing URLs.\n *\n * @usageNotes\n *\n * The following example shows how to use this token to configure the root app injector\n * with a base href value, so that the DI framework can supply the dependency anywhere in the app.\n *\n * ```ts\n * import {NgModule} from '@angular/core';\n * import {APP_BASE_HREF} from '@angular/common';\n *\n * @NgModule({\n *   providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n */\nconst APP_BASE_HREF = new InjectionToken(ngDevMode ? 'appBaseHref' : '');\n/**\n * @description\n * A {@link LocationStrategy} used to configure the {@link Location} service to\n * represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n *\n * If you're using `PathLocationStrategy`, you may provide a {@link APP_BASE_HREF}\n * or add a `<base href>` element to the document to override the default.\n *\n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`. To ensure all relative URIs resolve correctly,\n * the `<base href>` and/or `APP_BASE_HREF` should end with a `/`.\n *\n * Similarly, if you add `<base href='/my/app/'/>` to the document and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * Note that when using `PathLocationStrategy`, neither the query nor\n * the fragment in the `<base href>` will be preserved, as outlined\n * by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2).\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass PathLocationStrategy extends LocationStrategy {\n  _platformLocation;\n  _baseHref;\n  _removeListenerFns = [];\n  constructor(_platformLocation, href) {\n    super();\n    this._platformLocation = _platformLocation;\n    this._baseHref = href ?? this._platformLocation.getBaseHrefFromDOM() ?? inject(DOCUMENT).location?.origin ?? '';\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    while (this._removeListenerFns.length) {\n      this._removeListenerFns.pop()();\n    }\n  }\n  onPopState(fn) {\n    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n  }\n  getBaseHref() {\n    return this._baseHref;\n  }\n  prepareExternalUrl(internal) {\n    return joinWithSlash(this._baseHref, internal);\n  }\n  path(includeHash = false) {\n    const pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);\n    const hash = this._platformLocation.hash;\n    return hash && includeHash ? `${pathname}${hash}` : pathname;\n  }\n  pushState(state, title, url, queryParams) {\n    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.pushState(state, title, externalUrl);\n  }\n  replaceState(state, title, url, queryParams) {\n    const externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.replaceState(state, title, externalUrl);\n  }\n  forward() {\n    this._platformLocation.forward();\n  }\n  back() {\n    this._platformLocation.back();\n  }\n  getState() {\n    return this._platformLocation.getState();\n  }\n  historyGo(relativePosition = 0) {\n    this._platformLocation.historyGo?.(relativePosition);\n  }\n  static ɵfac = function PathLocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PathLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PathLocationStrategy,\n    factory: PathLocationStrategy.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PathLocationStrategy, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: PlatformLocation\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [APP_BASE_HREF]\n    }]\n  }], null);\n})();\n\n/**\n * @description\n * A {@link LocationStrategy} used to configure the {@link Location} service to\n * represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n *\n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass HashLocationStrategy extends LocationStrategy {\n  _platformLocation;\n  _baseHref = '';\n  _removeListenerFns = [];\n  constructor(_platformLocation, _baseHref) {\n    super();\n    this._platformLocation = _platformLocation;\n    if (_baseHref != null) {\n      this._baseHref = _baseHref;\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    while (this._removeListenerFns.length) {\n      this._removeListenerFns.pop()();\n    }\n  }\n  onPopState(fn) {\n    this._removeListenerFns.push(this._platformLocation.onPopState(fn), this._platformLocation.onHashChange(fn));\n  }\n  getBaseHref() {\n    return this._baseHref;\n  }\n  path(includeHash = false) {\n    // the hash value is always prefixed with a `#`\n    // and if it is empty then it will stay empty\n    const path = this._platformLocation.hash ?? '#';\n    return path.length > 0 ? path.substring(1) : path;\n  }\n  prepareExternalUrl(internal) {\n    const url = joinWithSlash(this._baseHref, internal);\n    return url.length > 0 ? '#' + url : url;\n  }\n  pushState(state, title, path, queryParams) {\n    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.pushState(state, title, url);\n  }\n  replaceState(state, title, path, queryParams) {\n    let url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.replaceState(state, title, url);\n  }\n  forward() {\n    this._platformLocation.forward();\n  }\n  back() {\n    this._platformLocation.back();\n  }\n  getState() {\n    return this._platformLocation.getState();\n  }\n  historyGo(relativePosition = 0) {\n    this._platformLocation.historyGo?.(relativePosition);\n  }\n  static ɵfac = function HashLocationStrategy_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HashLocationStrategy)(i0.ɵɵinject(PlatformLocation), i0.ɵɵinject(APP_BASE_HREF, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HashLocationStrategy,\n    factory: HashLocationStrategy.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HashLocationStrategy, [{\n    type: Injectable\n  }], () => [{\n    type: PlatformLocation\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [APP_BASE_HREF]\n    }]\n  }], null);\n})();\n\n/**\n * @description\n *\n * A service that applications can use to interact with a browser's URL.\n *\n * Depending on the `LocationStrategy` used, `Location` persists\n * to the URL's path or the URL's hash segment.\n *\n * @usageNotes\n *\n * It's better to use the `Router.navigate()` service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n *\n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n *\n * ### Example\n *\n * {@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * @publicApi\n */\nclass Location {\n  /** @internal */\n  _subject = new Subject();\n  /** @internal */\n  _basePath;\n  /** @internal */\n  _locationStrategy;\n  /** @internal */\n  _urlChangeListeners = [];\n  /** @internal */\n  _urlChangeSubscription = null;\n  constructor(locationStrategy) {\n    this._locationStrategy = locationStrategy;\n    const baseHref = this._locationStrategy.getBaseHref();\n    // Note: This class's interaction with base HREF does not fully follow the rules\n    // outlined in the spec https://www.freesoft.org/CIE/RFC/1808/18.htm.\n    // Instead of trying to fix individual bugs with more and more code, we should\n    // investigate using the URL constructor and providing the base as a second\n    // argument.\n    // https://developer.mozilla.org/en-US/docs/Web/API/URL/URL#parameters\n    this._basePath = _stripOrigin(stripTrailingSlash(_stripIndexHtml(baseHref)));\n    this._locationStrategy.onPopState(ev => {\n      this._subject.next({\n        'url': this.path(true),\n        'pop': true,\n        'state': ev.state,\n        'type': ev.type\n      });\n    });\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this._urlChangeSubscription?.unsubscribe();\n    this._urlChangeListeners = [];\n  }\n  /**\n   * Normalizes the URL path for this location.\n   *\n   * @param includeHash True to include an anchor fragment in the path.\n   *\n   * @returns The normalized URL path.\n   */\n  // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is\n  // removed.\n  path(includeHash = false) {\n    return this.normalize(this._locationStrategy.path(includeHash));\n  }\n  /**\n   * Reports the current state of the location history.\n   * @returns The current value of the `history.state` object.\n   */\n  getState() {\n    return this._locationStrategy.getState();\n  }\n  /**\n   * Normalizes the given path and compares to the current normalized path.\n   *\n   * @param path The given URL path.\n   * @param query Query parameters.\n   *\n   * @returns True if the given URL path is equal to the current normalized path, false\n   * otherwise.\n   */\n  isCurrentPathEqualTo(path, query = '') {\n    return this.path() == this.normalize(path + normalizeQueryParams(query));\n  }\n  /**\n   * Normalizes a URL path by stripping any trailing slashes.\n   *\n   * @param url String representing a URL.\n   *\n   * @returns The normalized URL string.\n   */\n  normalize(url) {\n    return Location.stripTrailingSlash(_stripBasePath(this._basePath, _stripIndexHtml(url)));\n  }\n  /**\n   * Normalizes an external URL path.\n   * If the given URL doesn't begin with a leading slash (`'/'`), adds one\n   * before normalizing. Adds a hash if `HashLocationStrategy` is\n   * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n   *\n   * @param url String representing a URL.\n   *\n   * @returns  A normalized platform-specific URL.\n   */\n  prepareExternalUrl(url) {\n    if (url && url[0] !== '/') {\n      url = '/' + url;\n    }\n    return this._locationStrategy.prepareExternalUrl(url);\n  }\n  // TODO: rename this method to pushState\n  /**\n   * Changes the browser's URL to a normalized version of a given URL, and pushes a\n   * new item onto the platform's history.\n   *\n   * @param path  URL path to normalize.\n   * @param query Query parameters.\n   * @param state Location history state.\n   *\n   */\n  go(path, query = '', state = null) {\n    this._locationStrategy.pushState(state, '', path, query);\n    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n  }\n  /**\n   * Changes the browser's URL to a normalized version of the given URL, and replaces\n   * the top item on the platform's history stack.\n   *\n   * @param path  URL path to normalize.\n   * @param query Query parameters.\n   * @param state Location history state.\n   */\n  replaceState(path, query = '', state = null) {\n    this._locationStrategy.replaceState(state, '', path, query);\n    this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);\n  }\n  /**\n   * Navigates forward in the platform's history.\n   */\n  forward() {\n    this._locationStrategy.forward();\n  }\n  /**\n   * Navigates back in the platform's history.\n   */\n  back() {\n    this._locationStrategy.back();\n  }\n  /**\n   * Navigate to a specific page from session history, identified by its relative position to the\n   * current page.\n   *\n   * @param relativePosition  Position of the target page in the history relative to the current\n   *     page.\n   * A negative value moves backwards, a positive value moves forwards, e.g. `location.historyGo(2)`\n   * moves forward two pages and `location.historyGo(-2)` moves back two pages. When we try to go\n   * beyond what's stored in the history session, we stay in the current page. Same behaviour occurs\n   * when `relativePosition` equals 0.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/History_API#Moving_to_a_specific_point_in_history\n   */\n  historyGo(relativePosition = 0) {\n    this._locationStrategy.historyGo?.(relativePosition);\n  }\n  /**\n   * Registers a URL change listener. Use to catch updates performed by the Angular\n   * framework that are not detectible through \"popstate\" or \"hashchange\" events.\n   *\n   * @param fn The change handler function, which take a URL and a location history state.\n   * @returns A function that, when executed, unregisters a URL change listener.\n   */\n  onUrlChange(fn) {\n    this._urlChangeListeners.push(fn);\n    this._urlChangeSubscription ??= this.subscribe(v => {\n      this._notifyUrlChangeListeners(v.url, v.state);\n    });\n    return () => {\n      const fnIndex = this._urlChangeListeners.indexOf(fn);\n      this._urlChangeListeners.splice(fnIndex, 1);\n      if (this._urlChangeListeners.length === 0) {\n        this._urlChangeSubscription?.unsubscribe();\n        this._urlChangeSubscription = null;\n      }\n    };\n  }\n  /** @internal */\n  _notifyUrlChangeListeners(url = '', state) {\n    this._urlChangeListeners.forEach(fn => fn(url, state));\n  }\n  /**\n   * Subscribes to the platform's `popState` events.\n   *\n   * Note: `Location.go()` does not trigger the `popState` event in the browser. Use\n   * `Location.onUrlChange()` to subscribe to URL changes instead.\n   *\n   * @param value Event that is triggered when the state history changes.\n   * @param exception The exception to throw.\n   *\n   * @see [onpopstate](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate)\n   *\n   * @returns Subscribed events.\n   */\n  subscribe(onNext, onThrow, onReturn) {\n    return this._subject.subscribe({\n      next: onNext,\n      error: onThrow ?? undefined,\n      complete: onReturn ?? undefined\n    });\n  }\n  /**\n   * Normalizes URL parameters by prepending with `?` if needed.\n   *\n   * @param  params String of URL parameters.\n   *\n   * @returns The normalized URL parameters string.\n   */\n  static normalizeQueryParams = normalizeQueryParams;\n  /**\n   * Joins two parts of a URL with a slash if needed.\n   *\n   * @param start  URL string\n   * @param end    URL string\n   *\n   *\n   * @returns The joined URL string.\n   */\n  static joinWithSlash = joinWithSlash;\n  /**\n   * Removes a trailing slash from a URL string if needed.\n   * Looks for the first occurrence of either `#`, `?`, or the end of the\n   * line as `/` characters and removes the trailing slash if one exists.\n   *\n   * @param url URL string.\n   *\n   * @returns The URL string, modified if needed.\n   */\n  static stripTrailingSlash = stripTrailingSlash;\n  static ɵfac = function Location_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Location)(i0.ɵɵinject(LocationStrategy));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Location,\n    factory: () => createLocation(),\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Location, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      // See #23917\n      useFactory: createLocation\n    }]\n  }], () => [{\n    type: LocationStrategy\n  }], null);\n})();\nfunction createLocation() {\n  return new Location(ɵɵinject(LocationStrategy));\n}\nfunction _stripBasePath(basePath, url) {\n  if (!basePath || !url.startsWith(basePath)) {\n    return url;\n  }\n  const strippedUrl = url.substring(basePath.length);\n  if (strippedUrl === '' || ['/', ';', '?', '#'].includes(strippedUrl[0])) {\n    return strippedUrl;\n  }\n  return url;\n}\nfunction _stripIndexHtml(url) {\n  return url.replace(/\\/index.html$/, '');\n}\nfunction _stripOrigin(baseHref) {\n  // DO NOT REFACTOR! Previously, this check looked like this:\n  // `/^(https?:)?\\/\\//.test(baseHref)`, but that resulted in\n  // syntactically incorrect code after Closure Compiler minification.\n  // This was likely caused by a bug in Closure Compiler, but\n  // for now, the check is rewritten to use `new RegExp` instead.\n  const isAbsoluteUrl = new RegExp('^(https?:)?//').test(baseHref);\n  if (isAbsoluteUrl) {\n    const [, pathname] = baseHref.split(/\\/\\/[^\\/]+/);\n    return pathname;\n  }\n  return baseHref;\n}\n\n/** @internal */\nconst CURRENCIES_EN = {\n  \"ADP\": [undefined, undefined, 0],\n  \"AFN\": [undefined, \"؋\", 0],\n  \"ALL\": [undefined, undefined, 0],\n  \"AMD\": [undefined, \"֏\", 2],\n  \"AOA\": [undefined, \"Kz\"],\n  \"ARS\": [undefined, \"$\"],\n  \"AUD\": [\"A$\", \"$\"],\n  \"AZN\": [undefined, \"₼\"],\n  \"BAM\": [undefined, \"KM\"],\n  \"BBD\": [undefined, \"$\"],\n  \"BDT\": [undefined, \"৳\"],\n  \"BHD\": [undefined, undefined, 3],\n  \"BIF\": [undefined, undefined, 0],\n  \"BMD\": [undefined, \"$\"],\n  \"BND\": [undefined, \"$\"],\n  \"BOB\": [undefined, \"Bs\"],\n  \"BRL\": [\"R$\"],\n  \"BSD\": [undefined, \"$\"],\n  \"BWP\": [undefined, \"P\"],\n  \"BYN\": [undefined, undefined, 2],\n  \"BYR\": [undefined, undefined, 0],\n  \"BZD\": [undefined, \"$\"],\n  \"CAD\": [\"CA$\", \"$\", 2],\n  \"CHF\": [undefined, undefined, 2],\n  \"CLF\": [undefined, undefined, 4],\n  \"CLP\": [undefined, \"$\", 0],\n  \"CNY\": [\"CN¥\", \"¥\"],\n  \"COP\": [undefined, \"$\", 2],\n  \"CRC\": [undefined, \"₡\", 2],\n  \"CUC\": [undefined, \"$\"],\n  \"CUP\": [undefined, \"$\"],\n  \"CZK\": [undefined, \"Kč\", 2],\n  \"DJF\": [undefined, undefined, 0],\n  \"DKK\": [undefined, \"kr\", 2],\n  \"DOP\": [undefined, \"$\"],\n  \"EGP\": [undefined, \"E£\"],\n  \"ESP\": [undefined, \"₧\", 0],\n  \"EUR\": [\"€\"],\n  \"FJD\": [undefined, \"$\"],\n  \"FKP\": [undefined, \"£\"],\n  \"GBP\": [\"£\"],\n  \"GEL\": [undefined, \"₾\"],\n  \"GHS\": [undefined, \"GH₵\"],\n  \"GIP\": [undefined, \"£\"],\n  \"GNF\": [undefined, \"FG\", 0],\n  \"GTQ\": [undefined, \"Q\"],\n  \"GYD\": [undefined, \"$\", 2],\n  \"HKD\": [\"HK$\", \"$\"],\n  \"HNL\": [undefined, \"L\"],\n  \"HRK\": [undefined, \"kn\"],\n  \"HUF\": [undefined, \"Ft\", 2],\n  \"IDR\": [undefined, \"Rp\", 2],\n  \"ILS\": [\"₪\"],\n  \"INR\": [\"₹\"],\n  \"IQD\": [undefined, undefined, 0],\n  \"IRR\": [undefined, undefined, 0],\n  \"ISK\": [undefined, \"kr\", 0],\n  \"ITL\": [undefined, undefined, 0],\n  \"JMD\": [undefined, \"$\"],\n  \"JOD\": [undefined, undefined, 3],\n  \"JPY\": [\"¥\", undefined, 0],\n  \"KHR\": [undefined, \"៛\"],\n  \"KMF\": [undefined, \"CF\", 0],\n  \"KPW\": [undefined, \"₩\", 0],\n  \"KRW\": [\"₩\", undefined, 0],\n  \"KWD\": [undefined, undefined, 3],\n  \"KYD\": [undefined, \"$\"],\n  \"KZT\": [undefined, \"₸\"],\n  \"LAK\": [undefined, \"₭\", 0],\n  \"LBP\": [undefined, \"L£\", 0],\n  \"LKR\": [undefined, \"Rs\"],\n  \"LRD\": [undefined, \"$\"],\n  \"LTL\": [undefined, \"Lt\"],\n  \"LUF\": [undefined, undefined, 0],\n  \"LVL\": [undefined, \"Ls\"],\n  \"LYD\": [undefined, undefined, 3],\n  \"MGA\": [undefined, \"Ar\", 0],\n  \"MGF\": [undefined, undefined, 0],\n  \"MMK\": [undefined, \"K\", 0],\n  \"MNT\": [undefined, \"₮\", 2],\n  \"MRO\": [undefined, undefined, 0],\n  \"MUR\": [undefined, \"Rs\", 2],\n  \"MXN\": [\"MX$\", \"$\"],\n  \"MYR\": [undefined, \"RM\"],\n  \"NAD\": [undefined, \"$\"],\n  \"NGN\": [undefined, \"₦\"],\n  \"NIO\": [undefined, \"C$\"],\n  \"NOK\": [undefined, \"kr\", 2],\n  \"NPR\": [undefined, \"Rs\"],\n  \"NZD\": [\"NZ$\", \"$\"],\n  \"OMR\": [undefined, undefined, 3],\n  \"PHP\": [\"₱\"],\n  \"PKR\": [undefined, \"Rs\", 2],\n  \"PLN\": [undefined, \"zł\"],\n  \"PYG\": [undefined, \"₲\", 0],\n  \"RON\": [undefined, \"lei\"],\n  \"RSD\": [undefined, undefined, 0],\n  \"RUB\": [undefined, \"₽\"],\n  \"RWF\": [undefined, \"RF\", 0],\n  \"SBD\": [undefined, \"$\"],\n  \"SEK\": [undefined, \"kr\", 2],\n  \"SGD\": [undefined, \"$\"],\n  \"SHP\": [undefined, \"£\"],\n  \"SLE\": [undefined, undefined, 2],\n  \"SLL\": [undefined, undefined, 0],\n  \"SOS\": [undefined, undefined, 0],\n  \"SRD\": [undefined, \"$\"],\n  \"SSP\": [undefined, \"£\"],\n  \"STD\": [undefined, undefined, 0],\n  \"STN\": [undefined, \"Db\"],\n  \"SYP\": [undefined, \"£\", 0],\n  \"THB\": [undefined, \"฿\"],\n  \"TMM\": [undefined, undefined, 0],\n  \"TND\": [undefined, undefined, 3],\n  \"TOP\": [undefined, \"T$\"],\n  \"TRL\": [undefined, undefined, 0],\n  \"TRY\": [undefined, \"₺\"],\n  \"TTD\": [undefined, \"$\"],\n  \"TWD\": [\"NT$\", \"$\", 2],\n  \"TZS\": [undefined, undefined, 2],\n  \"UAH\": [undefined, \"₴\"],\n  \"UGX\": [undefined, undefined, 0],\n  \"USD\": [\"$\"],\n  \"UYI\": [undefined, undefined, 0],\n  \"UYU\": [undefined, \"$\"],\n  \"UYW\": [undefined, undefined, 4],\n  \"UZS\": [undefined, undefined, 2],\n  \"VEF\": [undefined, \"Bs\", 2],\n  \"VND\": [\"₫\", undefined, 0],\n  \"VUV\": [undefined, undefined, 0],\n  \"XAF\": [\"FCFA\", undefined, 0],\n  \"XCD\": [\"EC$\", \"$\"],\n  \"XOF\": [\"F CFA\", undefined, 0],\n  \"XPF\": [\"CFPF\", undefined, 0],\n  \"XXX\": [\"¤\"],\n  \"YER\": [undefined, undefined, 0],\n  \"ZAR\": [undefined, \"R\"],\n  \"ZMK\": [undefined, undefined, 0],\n  \"ZMW\": [undefined, \"ZK\"],\n  \"ZWD\": [undefined, undefined, 0]\n};\n\n/**\n * Format styles that can be used to represent numbers.\n * @see {@link getLocaleNumberFormat}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocaleNumberFormat` is deprecated\n */\nvar NumberFormatStyle;\n(function (NumberFormatStyle) {\n  NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\n  NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\n  NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\n  NumberFormatStyle[NumberFormatStyle[\"Scientific\"] = 3] = \"Scientific\";\n})(NumberFormatStyle || (NumberFormatStyle = {}));\n/**\n * Plurality cases used for translating plurals to different languages.\n *\n * @see {@link NgPlural}\n * @see {@link NgPluralCase}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocalePluralCase` is deprecated\n */\nvar Plural;\n(function (Plural) {\n  Plural[Plural[\"Zero\"] = 0] = \"Zero\";\n  Plural[Plural[\"One\"] = 1] = \"One\";\n  Plural[Plural[\"Two\"] = 2] = \"Two\";\n  Plural[Plural[\"Few\"] = 3] = \"Few\";\n  Plural[Plural[\"Many\"] = 4] = \"Many\";\n  Plural[Plural[\"Other\"] = 5] = \"Other\";\n})(Plural || (Plural = {}));\n/**\n * Context-dependant translation forms for strings.\n * Typically the standalone version is for the nominative form of the word,\n * and the format version is used for the genitive case.\n * @see [CLDR website](http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles)\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated locale data getters are deprecated\n */\nvar FormStyle;\n(function (FormStyle) {\n  FormStyle[FormStyle[\"Format\"] = 0] = \"Format\";\n  FormStyle[FormStyle[\"Standalone\"] = 1] = \"Standalone\";\n})(FormStyle || (FormStyle = {}));\n/**\n * String widths available for translations.\n * The specific character widths are locale-specific.\n * Examples are given for the word \"Sunday\" in English.\n *\n * @publicApi\n *\n * @deprecated locale data getters are deprecated\n */\nvar TranslationWidth;\n(function (TranslationWidth) {\n  /** 1 character for `en-US`. For example: 'S' */\n  TranslationWidth[TranslationWidth[\"Narrow\"] = 0] = \"Narrow\";\n  /** 3 characters for `en-US`. For example: 'Sun' */\n  TranslationWidth[TranslationWidth[\"Abbreviated\"] = 1] = \"Abbreviated\";\n  /** Full length for `en-US`. For example: \"Sunday\" */\n  TranslationWidth[TranslationWidth[\"Wide\"] = 2] = \"Wide\";\n  /** 2 characters for `en-US`, For example: \"Su\" */\n  TranslationWidth[TranslationWidth[\"Short\"] = 3] = \"Short\";\n})(TranslationWidth || (TranslationWidth = {}));\n/**\n * String widths available for date-time formats.\n * The specific character widths are locale-specific.\n * Examples are given for `en-US`.\n *\n * @see {@link getLocaleDateFormat}\n * @see {@link getLocaleTimeFormat}\n * @see {@link getLocaleDateTimeFormat}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n * @publicApi\n *\n * @deprecated Date locale data getters are deprecated\n */\nvar FormatWidth;\n(function (FormatWidth) {\n  /**\n   * For `en-US`, `'M/d/yy, h:mm a'`\n   * (Example: `6/15/15, 9:03 AM`)\n   */\n  FormatWidth[FormatWidth[\"Short\"] = 0] = \"Short\";\n  /**\n   * For `en-US`, `'MMM d, y, h:mm:ss a'`\n   * (Example: `Jun 15, 2015, 9:03:01 AM`)\n   */\n  FormatWidth[FormatWidth[\"Medium\"] = 1] = \"Medium\";\n  /**\n   * For `en-US`, `'MMMM d, y, h:mm:ss a z'`\n   * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`)\n   */\n  FormatWidth[FormatWidth[\"Long\"] = 2] = \"Long\";\n  /**\n   * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'`\n   * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`)\n   */\n  FormatWidth[FormatWidth[\"Full\"] = 3] = \"Full\";\n})(FormatWidth || (FormatWidth = {}));\n// This needs to be an object literal, rather than an enum, because TypeScript 5.4+\n// doesn't allow numeric keys and we have `Infinity` and `NaN`.\n/**\n * Symbols that can be used to replace placeholders in number patterns.\n * Examples are based on `en-US` values.\n *\n * @see {@link getLocaleNumberSymbol}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated `getLocaleNumberSymbol` is deprecated\n *\n * @object-literal-as-enum\n */\nconst NumberSymbol = {\n  /**\n   * Decimal separator.\n   * For `en-US`, the dot character.\n   * Example: 2,345`.`67\n   */\n  Decimal: 0,\n  /**\n   * Grouping separator, typically for thousands.\n   * For `en-US`, the comma character.\n   * Example: 2`,`345.67\n   */\n  Group: 1,\n  /**\n   * List-item separator.\n   * Example: \"one, two, and three\"\n   */\n  List: 2,\n  /**\n   * Sign for percentage (out of 100).\n   * Example: 23.4%\n   */\n  PercentSign: 3,\n  /**\n   * Sign for positive numbers.\n   * Example: +23\n   */\n  PlusSign: 4,\n  /**\n   * Sign for negative numbers.\n   * Example: -23\n   */\n  MinusSign: 5,\n  /**\n   * Computer notation for exponential value (n times a power of 10).\n   * Example: 1.2E3\n   */\n  Exponential: 6,\n  /**\n   * Human-readable format of exponential.\n   * Example: 1.2x103\n   */\n  SuperscriptingExponent: 7,\n  /**\n   * Sign for permille (out of 1000).\n   * Example: 23.4‰\n   */\n  PerMille: 8,\n  /**\n   * Infinity, can be used with plus and minus.\n   * Example: ∞, +∞, -∞\n   */\n  Infinity: 9,\n  /**\n   * Not a number.\n   * Example: NaN\n   */\n  NaN: 10,\n  /**\n   * Symbol used between time units.\n   * Example: 10:52\n   */\n  TimeSeparator: 11,\n  /**\n   * Decimal separator for currency values (fallback to `Decimal`).\n   * Example: $2,345.67\n   */\n  CurrencyDecimal: 12,\n  /**\n   * Group separator for currency values (fallback to `Group`).\n   * Example: $2,345.67\n   */\n  CurrencyGroup: 13\n};\n/**\n * The value for each day of the week, based on the `en-US` locale\n *\n * @publicApi\n *\n * @deprecated Week locale getters are deprecated\n */\nvar WeekDay;\n(function (WeekDay) {\n  WeekDay[WeekDay[\"Sunday\"] = 0] = \"Sunday\";\n  WeekDay[WeekDay[\"Monday\"] = 1] = \"Monday\";\n  WeekDay[WeekDay[\"Tuesday\"] = 2] = \"Tuesday\";\n  WeekDay[WeekDay[\"Wednesday\"] = 3] = \"Wednesday\";\n  WeekDay[WeekDay[\"Thursday\"] = 4] = \"Thursday\";\n  WeekDay[WeekDay[\"Friday\"] = 5] = \"Friday\";\n  WeekDay[WeekDay[\"Saturday\"] = 6] = \"Saturday\";\n})(WeekDay || (WeekDay = {}));\n/**\n * Retrieves the locale ID from the currently loaded locale.\n * The loaded locale could be, for example, a global one rather than a regional one.\n * @param locale A locale code, such as `fr-FR`.\n * @returns The locale code. For example, `fr`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * This function serves no purpose when relying on the `Intl` API.\n */\nfunction getLocaleId(locale) {\n  return ɵfindLocaleData(locale)[ɵLocaleDataIndex.LocaleId];\n}\n/**\n * Retrieves day period strings for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized period strings. For example, `[AM, PM]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDayPeriods(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const amPmData = [data[ɵLocaleDataIndex.DayPeriodsFormat], data[ɵLocaleDataIndex.DayPeriodsStandalone]];\n  const amPm = getLastDefinedValue(amPmData, formStyle);\n  return getLastDefinedValue(amPm, width);\n}\n/**\n * Retrieves days of the week for the given locale, using the Gregorian calendar.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized name strings.\n * For example,`[Sunday, Monday, ... Saturday]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDayNames(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const daysData = [data[ɵLocaleDataIndex.DaysFormat], data[ɵLocaleDataIndex.DaysStandalone]];\n  const days = getLastDefinedValue(daysData, formStyle);\n  return getLastDefinedValue(days, width);\n}\n/**\n * Retrieves months of the year for the given locale, using the Gregorian calendar.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns An array of localized name strings.\n * For example,  `[January, February, ...]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleMonthNames(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  const monthsData = [data[ɵLocaleDataIndex.MonthsFormat], data[ɵLocaleDataIndex.MonthsStandalone]];\n  const months = getLastDefinedValue(monthsData, formStyle);\n  return getLastDefinedValue(months, width);\n}\n/**\n * Retrieves Gregorian-calendar eras for the given locale.\n * @param locale A locale code for the locale format rules to use.\n * @param width The required character width.\n\n * @returns An array of localized era strings.\n * For example, `[AD, BC]` for `en-US`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleEraNames(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  const erasData = data[ɵLocaleDataIndex.Eras];\n  return getLastDefinedValue(erasData, width);\n}\n/**\n * Retrieves the first day of the week for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns A day index number, using the 0-based week-day index for `en-US`\n * (Sunday = 0, Monday = 1, ...).\n * For example, for `fr-FR`, returns 1 to indicate that the first day is Monday.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Intl's [`getWeekInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getWeekInfo) has partial support (Chromium M99 & Safari 17).\n * You may want to rely on the following alternatives:\n * - Libraries like [`Luxon`](https://moment.github.io/luxon/#/) rely on `Intl` but fallback on the ISO 8601 definition (monday) if `getWeekInfo` is not supported.\n * - Other librairies like [`date-fns`](https://date-fns.org/), [`day.js`](https://day.js.org/en/) or [`weekstart`](https://www.npmjs.com/package/weekstart) library provide their own locale based data for the first day of the week.\n */\nfunction getLocaleFirstDayOfWeek(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.FirstDayOfWeek];\n}\n/**\n * Range of week days that are considered the week-end for the given locale.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The range of day values, `[startDay, endDay]`.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Intl's [`getWeekInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getWeekInfo) has partial support (Chromium M99 & Safari 17).\n * Libraries like [`Luxon`](https://moment.github.io/luxon/#/) rely on `Intl` but fallback on the ISO 8601 definition (Saturday+Sunday) if `getWeekInfo` is not supported .\n */\nfunction getLocaleWeekEndRange(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.WeekendRange];\n}\n/**\n * Retrieves a localized date-value formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDateFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.DateFormat], width);\n}\n/**\n * Retrieves a localized time-value formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n\n * @publicApi\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleTimeFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  return getLastDefinedValue(data[ɵLocaleDataIndex.TimeFormat], width);\n}\n/**\n * Retrieves a localized date-time formatting string.\n *\n * @param locale A locale code for the locale format rules to use.\n * @param width The format type.\n * @returns The localized formatting string.\n * @see {@link FormatWidth}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.DateTimeFormat` for date formating instead.\n */\nfunction getLocaleDateTimeFormat(locale, width) {\n  const data = ɵfindLocaleData(locale);\n  const dateTimeFormatData = data[ɵLocaleDataIndex.DateTimeFormat];\n  return getLastDefinedValue(dateTimeFormatData, width);\n}\n/**\n * Retrieves a localized number symbol that can be used to replace placeholders in number formats.\n * @param locale The locale code.\n * @param symbol The symbol to localize. Must be one of `NumberSymbol`.\n * @returns The character for the localized symbol.\n * @see {@link NumberSymbol}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.NumberFormat` to format numbers instead.\n */\nfunction getLocaleNumberSymbol(locale, symbol) {\n  const data = ɵfindLocaleData(locale);\n  const res = data[ɵLocaleDataIndex.NumberSymbols][symbol];\n  if (typeof res === 'undefined') {\n    if (symbol === NumberSymbol.CurrencyDecimal) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Decimal];\n    } else if (symbol === NumberSymbol.CurrencyGroup) {\n      return data[ɵLocaleDataIndex.NumberSymbols][NumberSymbol.Group];\n    }\n  }\n  return res;\n}\n/**\n * Retrieves a number format for a given locale.\n *\n * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00`\n * when used to format the number 12345.678 could result in \"12'345,678\". That would happen if the\n * grouping separator for your language is an apostrophe, and the decimal separator is a comma.\n *\n * <b>Important:</b> The characters `.` `,` `0` `#` (and others below) are special placeholders\n * that stand for the decimal separator, and so on, and are NOT real characters.\n * You must NOT \"translate\" the placeholders. For example, don't change `.` to `,` even though in\n * your language the decimal point is written with a comma. The symbols should be replaced by the\n * local equivalents, using the appropriate `NumberSymbol` for your language.\n *\n * Here are the special characters used in number patterns:\n *\n * | Symbol | Meaning |\n * |--------|---------|\n * | . | Replaced automatically by the character used for the decimal point. |\n * | , | Replaced by the \"grouping\" (thousands) separator. |\n * | 0 | Replaced by a digit (or zero if there aren't enough digits). |\n * | # | Replaced by a digit (or nothing if there aren't enough). |\n * | ¤ | Replaced by a currency symbol, such as $ or USD. |\n * | % | Marks a percent format. The % symbol may change position, but must be retained. |\n * | E | Marks a scientific format. The E symbol may change position, but must be retained. |\n * | ' | Special characters used as literal characters are quoted with ASCII single quotes. |\n *\n * @param locale A locale code for the locale format rules to use.\n * @param type The type of numeric value to be formatted (such as `Decimal` or `Currency`.)\n * @returns The localized format string.\n * @see {@link NumberFormatStyle}\n * @see [CLDR website](http://cldr.unicode.org/translation/number-patterns)\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Let `Intl.NumberFormat` determine the number format instead\n */\nfunction getLocaleNumberFormat(locale, type) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.NumberFormats][type];\n}\n/**\n * Retrieves the symbol used to represent the currency for the main country\n * corresponding to a given locale. For example, '$' for `en-US`.\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The localized symbol character,\n * or `null` if the main country cannot be determined.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Use the `Intl` API to format a currency with from currency code\n */\nfunction getLocaleCurrencySymbol(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.CurrencySymbol] || null;\n}\n/**\n * Retrieves the name of the currency for the main country corresponding\n * to a given locale. For example, 'US Dollar' for `en-US`.\n * @param locale A locale code for the locale format rules to use.\n * @returns The currency name,\n * or `null` if the main country cannot be determined.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Use the `Intl` API to format a currency with from currency code\n */\nfunction getLocaleCurrencyName(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.CurrencyName] || null;\n}\n/**\n * Retrieves the default currency code for the given locale.\n *\n * The default is defined as the first currency which is still in use.\n *\n * @param locale The code of the locale whose currency code we want.\n * @returns The code of the default currency for the given locale.\n *\n * @publicApi\n *\n * @deprecated We recommend you create a map of locale to ISO 4217 currency codes.\n * Time relative currency data is provided by the CLDR project. See https://www.unicode.org/cldr/charts/44/supplemental/detailed_territory_currency_information.html\n */\nfunction getLocaleCurrencyCode(locale) {\n  return ɵgetLocaleCurrencyCode(locale);\n}\n/**\n * Retrieves the currency values for a given locale.\n * @param locale A locale code for the locale format rules to use.\n * @returns The currency values.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n */\nfunction getLocaleCurrencies(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.Currencies];\n}\n/**\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Use `Intl.PluralRules` instead\n */\nconst getLocalePluralCase = ɵgetLocalePluralCase;\nfunction checkFullData(data) {\n  if (!data[ɵLocaleDataIndex.ExtraData]) {\n    throw new Error(`Missing extra locale data for the locale \"${data[ɵLocaleDataIndex.LocaleId]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n  }\n}\n/**\n * Retrieves locale-specific rules used to determine which day period to use\n * when more than one period is defined for a locale.\n *\n * There is a rule for each defined day period. The\n * first rule is applied to the first day period and so on.\n * Fall back to AM/PM when no rules are available.\n *\n * A rule can specify a period as time range, or as a single time value.\n *\n * This functionality is only available when you have loaded the full locale data.\n * See the [\"I18n guide\"](guide/i18n/format-data-locale).\n *\n * @param locale A locale code for the locale format rules to use.\n * @returns The rules for the locale, a single time value or array of *from-time, to-time*,\n * or null if no periods are available.\n *\n * @see {@link getLocaleExtraDayPeriods}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * Let `Intl.DateTimeFormat` determine the day period instead.\n */\nfunction getLocaleExtraDayPeriodRules(locale) {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const rules = data[ɵLocaleDataIndex.ExtraData][2 /* ɵExtraLocaleDataIndex.ExtraDayPeriodsRules */] || [];\n  return rules.map(rule => {\n    if (typeof rule === 'string') {\n      return extractTime(rule);\n    }\n    return [extractTime(rule[0]), extractTime(rule[1])];\n  });\n}\n/**\n * Retrieves locale-specific day periods, which indicate roughly how a day is broken up\n * in different languages.\n * For example, for `en-US`, periods are morning, noon, afternoon, evening, and midnight.\n *\n * This functionality is only available when you have loaded the full locale data.\n * See the [\"I18n guide\"](guide/i18n/format-data-locale).\n *\n * @param locale A locale code for the locale format rules to use.\n * @param formStyle The required grammatical form.\n * @param width The required character width.\n * @returns The translated day-period strings.\n * @see {@link getLocaleExtraDayPeriodRules}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * To extract a day period use `Intl.DateTimeFormat` with the `dayPeriod` option instead.\n */\nfunction getLocaleExtraDayPeriods(locale, formStyle, width) {\n  const data = ɵfindLocaleData(locale);\n  checkFullData(data);\n  const dayPeriodsData = [data[ɵLocaleDataIndex.ExtraData][0 /* ɵExtraLocaleDataIndex.ExtraDayPeriodFormats */], data[ɵLocaleDataIndex.ExtraData][1 /* ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone */]];\n  const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n  return getLastDefinedValue(dayPeriods, width) || [];\n}\n/**\n * Retrieves the writing direction of a specified locale\n * @param locale A locale code for the locale format rules to use.\n * @publicApi\n * @returns 'rtl' or 'ltr'\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * For dates and numbers, let `Intl.DateTimeFormat()` and `Intl.NumberFormat()` determine the writing direction.\n * The `Intl` alternative [`getTextInfo`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo).\n * has only partial support (Chromium M99 & Safari 17).\n * 3rd party alternatives like [`rtl-detect`](https://www.npmjs.com/package/rtl-detect) can work around this issue.\n */\nfunction getLocaleDirection(locale) {\n  const data = ɵfindLocaleData(locale);\n  return data[ɵLocaleDataIndex.Directionality];\n}\n/**\n * Retrieves the first value that is defined in an array, going backwards from an index position.\n *\n * To avoid repeating the same data (as when the \"format\" and \"standalone\" forms are the same)\n * add the first value to the locale data arrays, and add other values only if they are different.\n *\n * @param data The data array to retrieve from.\n * @param index A 0-based index into the array to start from.\n * @returns The value immediately before the given index position.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n */\nfunction getLastDefinedValue(data, index) {\n  for (let i = index; i > -1; i--) {\n    if (typeof data[i] !== 'undefined') {\n      return data[i];\n    }\n  }\n  throw new Error('Locale data API: locale data undefined');\n}\n/**\n * Extracts the hours and minutes from a string like \"15:45\"\n */\nfunction extractTime(time) {\n  const [h, m] = time.split(':');\n  return {\n    hours: +h,\n    minutes: +m\n  };\n}\n/**\n * Retrieves the currency symbol for a given currency code.\n *\n * For example, for the default `en-US` locale, the code `USD` can\n * be represented by the narrow symbol `$` or the wide symbol `US$`.\n *\n * @param code The currency code.\n * @param format The format, `wide` or `narrow`.\n * @param locale A locale code for the locale format rules to use.\n *\n * @returns The symbol, or the currency code if no symbol is available.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * You can use `Intl.NumberFormat().formatToParts()` to extract the currency symbol.\n * For example: `Intl.NumberFormat('en', {style:'currency', currency: 'USD'}).formatToParts().find(part => part.type === 'currency').value`\n * returns `$` for USD currency code in the `en` locale.\n * Note: `US$` is a currency symbol for the `en-ca` locale but not the `en-us` locale.\n */\nfunction getCurrencySymbol(code, format, locale = 'en') {\n  const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];\n  const symbolNarrow = currency[1 /* ɵCurrencyIndex.SymbolNarrow */];\n  if (format === 'narrow' && typeof symbolNarrow === 'string') {\n    return symbolNarrow;\n  }\n  return currency[0 /* ɵCurrencyIndex.Symbol */] || code;\n}\n// Most currencies have cents, that's why the default is 2\nconst DEFAULT_NB_OF_CURRENCY_DIGITS = 2;\n/**\n * Reports the number of decimal digits for a given currency.\n * The value depends upon the presence of cents in that particular currency.\n *\n * @param code The currency code.\n * @returns The number of decimal digits, typically 0 or 2.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n *\n * @deprecated Angular recommends relying on the `Intl` API for i18n.\n * This function should not be used anymore. Let `Intl.NumberFormat` determine the number of digits to display for the currency\n */\nfunction getNumberOfCurrencyDigits(code) {\n  let digits;\n  const currency = CURRENCIES_EN[code];\n  if (currency) {\n    digits = currency[2 /* ɵCurrencyIndex.NbOfDigits */];\n  }\n  return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;\n}\nconst ISO8601_DATE_REGEX = /^(\\d{4,})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n//    1        2       3         4          5          6          7          8  9     10      11\nconst NAMED_FORMATS = {};\nconst DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\\s\\S]*)/;\nvar ZoneWidth;\n(function (ZoneWidth) {\n  ZoneWidth[ZoneWidth[\"Short\"] = 0] = \"Short\";\n  ZoneWidth[ZoneWidth[\"ShortGMT\"] = 1] = \"ShortGMT\";\n  ZoneWidth[ZoneWidth[\"Long\"] = 2] = \"Long\";\n  ZoneWidth[ZoneWidth[\"Extended\"] = 3] = \"Extended\";\n})(ZoneWidth || (ZoneWidth = {}));\nvar DateType;\n(function (DateType) {\n  DateType[DateType[\"FullYear\"] = 0] = \"FullYear\";\n  DateType[DateType[\"Month\"] = 1] = \"Month\";\n  DateType[DateType[\"Date\"] = 2] = \"Date\";\n  DateType[DateType[\"Hours\"] = 3] = \"Hours\";\n  DateType[DateType[\"Minutes\"] = 4] = \"Minutes\";\n  DateType[DateType[\"Seconds\"] = 5] = \"Seconds\";\n  DateType[DateType[\"FractionalSeconds\"] = 6] = \"FractionalSeconds\";\n  DateType[DateType[\"Day\"] = 7] = \"Day\";\n})(DateType || (DateType = {}));\nvar TranslationType;\n(function (TranslationType) {\n  TranslationType[TranslationType[\"DayPeriods\"] = 0] = \"DayPeriods\";\n  TranslationType[TranslationType[\"Days\"] = 1] = \"Days\";\n  TranslationType[TranslationType[\"Months\"] = 2] = \"Months\";\n  TranslationType[TranslationType[\"Eras\"] = 3] = \"Eras\";\n})(TranslationType || (TranslationType = {}));\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a date according to locale rules.\n *\n * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch)\n * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime).\n * @param format The date-time components to include. See `DatePipe` for details.\n * @param locale A locale code for the locale format rules to use.\n * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`).\n * If not specified, uses host system settings.\n *\n * @returns The formatted date string.\n *\n * @see {@link DatePipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatDate(value, format, locale, timezone) {\n  let date = toDate(value);\n  const namedFormat = getNamedFormat(locale, format);\n  format = namedFormat || format;\n  let parts = [];\n  let match;\n  while (format) {\n    match = DATE_FORMATS_SPLIT.exec(format);\n    if (match) {\n      parts = parts.concat(match.slice(1));\n      const part = parts.pop();\n      if (!part) {\n        break;\n      }\n      format = part;\n    } else {\n      parts.push(format);\n      break;\n    }\n  }\n  let dateTimezoneOffset = date.getTimezoneOffset();\n  if (timezone) {\n    dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n    date = convertTimezoneToLocal(date, timezone, true);\n  }\n  let text = '';\n  parts.forEach(value => {\n    const dateFormatter = getDateFormatter(value);\n    text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === \"''\" ? \"'\" : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n  });\n  return text;\n}\n/**\n * Create a new Date object with the given date value, and the time set to midnight.\n *\n * We cannot use `new Date(year, month, date)` because it maps years between 0 and 99 to 1900-1999.\n * See: https://github.com/angular/angular/issues/40377\n *\n * Note that this function returns a Date object whose time is midnight in the current locale's\n * timezone. In the future we might want to change this to be midnight in UTC, but this would be a\n * considerable breaking change.\n */\nfunction createDate(year, month, date) {\n  // The `newDate` is set to midnight (UTC) on January 1st 1970.\n  // - In PST this will be December 31st 1969 at 4pm.\n  // - In GMT this will be January 1st 1970 at 1am.\n  // Note that they even have different years, dates and months!\n  const newDate = new Date(0);\n  // `setFullYear()` allows years like 0001 to be set correctly. This function does not\n  // change the internal time of the date.\n  // Consider calling `setFullYear(2019, 8, 20)` (September 20, 2019).\n  // - In PST this will now be September 20, 2019 at 4pm\n  // - In GMT this will now be September 20, 2019 at 1am\n  newDate.setFullYear(year, month, date);\n  // We want the final date to be at local midnight, so we reset the time.\n  // - In PST this will now be September 20, 2019 at 12am\n  // - In GMT this will now be September 20, 2019 at 12am\n  newDate.setHours(0, 0, 0);\n  return newDate;\n}\nfunction getNamedFormat(locale, format) {\n  const localeId = getLocaleId(locale);\n  NAMED_FORMATS[localeId] ??= {};\n  if (NAMED_FORMATS[localeId][format]) {\n    return NAMED_FORMATS[localeId][format];\n  }\n  let formatValue = '';\n  switch (format) {\n    case 'shortDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullDate':\n      formatValue = getLocaleDateFormat(locale, FormatWidth.Full);\n      break;\n    case 'shortTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);\n      break;\n    case 'mediumTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);\n      break;\n    case 'longTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);\n      break;\n    case 'fullTime':\n      formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);\n      break;\n    case 'short':\n      const shortTime = getNamedFormat(locale, 'shortTime');\n      const shortDate = getNamedFormat(locale, 'shortDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n      break;\n    case 'medium':\n      const mediumTime = getNamedFormat(locale, 'mediumTime');\n      const mediumDate = getNamedFormat(locale, 'mediumDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n      break;\n    case 'long':\n      const longTime = getNamedFormat(locale, 'longTime');\n      const longDate = getNamedFormat(locale, 'longDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n      break;\n    case 'full':\n      const fullTime = getNamedFormat(locale, 'fullTime');\n      const fullDate = getNamedFormat(locale, 'fullDate');\n      formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n      break;\n  }\n  if (formatValue) {\n    NAMED_FORMATS[localeId][format] = formatValue;\n  }\n  return formatValue;\n}\nfunction formatDateTime(str, opt_values) {\n  if (opt_values) {\n    str = str.replace(/\\{([^}]+)}/g, function (match, key) {\n      return opt_values != null && key in opt_values ? opt_values[key] : match;\n    });\n  }\n  return str;\n}\nfunction padNumber(num, digits, minusSign = '-', trim, negWrap) {\n  let neg = '';\n  if (num < 0 || negWrap && num <= 0) {\n    if (negWrap) {\n      num = -num + 1;\n    } else {\n      num = -num;\n      neg = minusSign;\n    }\n  }\n  let strNum = String(num);\n  while (strNum.length < digits) {\n    strNum = '0' + strNum;\n  }\n  if (trim) {\n    strNum = strNum.slice(strNum.length - digits);\n  }\n  return neg + strNum;\n}\nfunction formatFractionalSeconds(milliseconds, digits) {\n  const strMs = padNumber(milliseconds, 3);\n  return strMs.substring(0, digits);\n}\n/**\n * Returns a date formatter that transforms a date into its locale digit representation\n */\nfunction dateGetter(name, size, offset = 0, trim = false, negWrap = false) {\n  return function (date, locale) {\n    let part = getDatePart(name, date);\n    if (offset > 0 || part > -offset) {\n      part += offset;\n    }\n    if (name === DateType.Hours) {\n      if (part === 0 && offset === -12) {\n        part = 12;\n      }\n    } else if (name === DateType.FractionalSeconds) {\n      return formatFractionalSeconds(part, size);\n    }\n    const localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    return padNumber(part, size, localeMinus, trim, negWrap);\n  };\n}\nfunction getDatePart(part, date) {\n  switch (part) {\n    case DateType.FullYear:\n      return date.getFullYear();\n    case DateType.Month:\n      return date.getMonth();\n    case DateType.Date:\n      return date.getDate();\n    case DateType.Hours:\n      return date.getHours();\n    case DateType.Minutes:\n      return date.getMinutes();\n    case DateType.Seconds:\n      return date.getSeconds();\n    case DateType.FractionalSeconds:\n      return date.getMilliseconds();\n    case DateType.Day:\n      return date.getDay();\n    default:\n      throw new Error(`Unknown DateType value \"${part}\".`);\n  }\n}\n/**\n * Returns a date formatter that transforms a date into its locale string representation\n */\nfunction dateStrGetter(name, width, form = FormStyle.Format, extended = false) {\n  return function (date, locale) {\n    return getDateTranslation(date, locale, name, width, form, extended);\n  };\n}\n/**\n * Returns the locale translation of a date for a given form, type and width\n */\nfunction getDateTranslation(date, locale, name, width, form, extended) {\n  switch (name) {\n    case TranslationType.Months:\n      return getLocaleMonthNames(locale, form, width)[date.getMonth()];\n    case TranslationType.Days:\n      return getLocaleDayNames(locale, form, width)[date.getDay()];\n    case TranslationType.DayPeriods:\n      const currentHours = date.getHours();\n      const currentMinutes = date.getMinutes();\n      if (extended) {\n        const rules = getLocaleExtraDayPeriodRules(locale);\n        const dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n        const index = rules.findIndex(rule => {\n          if (Array.isArray(rule)) {\n            // morning, afternoon, evening, night\n            const [from, to] = rule;\n            const afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;\n            const beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes;\n            // We must account for normal rules that span a period during the day (e.g. 6am-9am)\n            // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g.\n            // 10pm - 5am) where `from` is greater (later!) than `to`.\n            //\n            // In the first case the current time must be BOTH after `from` AND before `to`\n            // (e.g. 8am is after 6am AND before 10am).\n            //\n            // In the second case the current time must be EITHER after `from` OR before `to`\n            // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is\n            // after 10pm).\n            if (from.hours < to.hours) {\n              if (afterFrom && beforeTo) {\n                return true;\n              }\n            } else if (afterFrom || beforeTo) {\n              return true;\n            }\n          } else {\n            // noon or midnight\n            if (rule.hours === currentHours && rule.minutes === currentMinutes) {\n              return true;\n            }\n          }\n          return false;\n        });\n        if (index !== -1) {\n          return dayPeriods[index];\n        }\n      }\n      // if no rules for the day periods, we use am/pm by default\n      return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];\n    case TranslationType.Eras:\n      return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];\n    default:\n      // This default case is not needed by TypeScript compiler, as the switch is exhaustive.\n      // However Closure Compiler does not understand that and reports an error in typed mode.\n      // The `throw new Error` below works around the problem, and the unexpected: never variable\n      // makes sure tsc still checks this code is unreachable.\n      const unexpected = name;\n      throw new Error(`unexpected translation type ${unexpected}`);\n  }\n}\n/**\n * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or\n * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30,\n * extended = +04:30)\n */\nfunction timeZoneGetter(width) {\n  return function (date, locale, offset) {\n    const zone = -1 * offset;\n    const minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n    const hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);\n    switch (width) {\n      case ZoneWidth.Short:\n        return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.ShortGMT:\n        return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);\n      case ZoneWidth.Long:\n        return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n      case ZoneWidth.Extended:\n        if (offset === 0) {\n          return 'Z';\n        } else {\n          return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);\n        }\n      default:\n        throw new Error(`Unknown zone width \"${width}\"`);\n    }\n  };\n}\nconst JANUARY = 0;\nconst THURSDAY = 4;\nfunction getFirstThursdayOfYear(year) {\n  const firstDayOfYear = createDate(year, JANUARY, 1).getDay();\n  return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\n/**\n *  ISO Week starts on day 1 (Monday) and ends with day 0 (Sunday)\n */\nfunction getThursdayThisIsoWeek(datetime) {\n  // getDay returns 0-6 range with sunday as 0.\n  const currentDay = datetime.getDay();\n  // On a Sunday, read the previous Thursday since ISO weeks start on Monday.\n  const deltaToThursday = currentDay === 0 ? -3 : THURSDAY - currentDay;\n  return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + deltaToThursday);\n}\nfunction weekGetter(size, monthBased = false) {\n  return function (date, locale) {\n    let result;\n    if (monthBased) {\n      const nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n      const today = date.getDate();\n      result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n    } else {\n      const thisThurs = getThursdayThisIsoWeek(date);\n      // Some days of a year are part of next year according to ISO 8601.\n      // Compute the firstThurs from the year of this week's Thursday\n      const firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());\n      const diff = thisThurs.getTime() - firstThurs.getTime();\n      result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week\n    }\n    return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  };\n}\n/**\n * Returns a date formatter that provides the week-numbering year for the input date.\n */\nfunction weekNumberingYearGetter(size, trim = false) {\n  return function (date, locale) {\n    const thisThurs = getThursdayThisIsoWeek(date);\n    const weekNumberingYear = thisThurs.getFullYear();\n    return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);\n  };\n}\nconst DATE_FORMATS = {};\n// Based on CLDR formats:\n// See complete list: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n// See also explanations: http://cldr.unicode.org/translation/date-time\n// TODO(ocombe): support all missing cldr formats: U, Q, D, F, e, j, J, C, A, v, V, X, x\nfunction getDateFormatter(format) {\n  if (DATE_FORMATS[format]) {\n    return DATE_FORMATS[format];\n  }\n  let formatter;\n  switch (format) {\n    // Era name (AD/BC)\n    case 'G':\n    case 'GG':\n    case 'GGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);\n      break;\n    case 'GGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);\n      break;\n    case 'GGGGG':\n      formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);\n      break;\n    // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'y':\n      formatter = dateGetter(DateType.FullYear, 1, 0, false, true);\n      break;\n    // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yy':\n      formatter = dateGetter(DateType.FullYear, 2, 0, true, true);\n      break;\n    // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)\n    case 'yyy':\n      formatter = dateGetter(DateType.FullYear, 3, 0, false, true);\n      break;\n    // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'yyyy':\n      formatter = dateGetter(DateType.FullYear, 4, 0, false, true);\n      break;\n    // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199)\n    case 'Y':\n      formatter = weekNumberingYearGetter(1);\n      break;\n    // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD\n    // 2010 => 10)\n    case 'YY':\n      formatter = weekNumberingYearGetter(2, true);\n      break;\n    // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD\n    // 2010 => 2010)\n    case 'YYY':\n      formatter = weekNumberingYearGetter(3);\n      break;\n    // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010)\n    case 'YYYY':\n      formatter = weekNumberingYearGetter(4);\n      break;\n    // Month of the year (1-12), numeric\n    case 'M':\n    case 'L':\n      formatter = dateGetter(DateType.Month, 1, 1);\n      break;\n    case 'MM':\n    case 'LL':\n      formatter = dateGetter(DateType.Month, 2, 1);\n      break;\n    // Month of the year (January, ...), string, format\n    case 'MMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);\n      break;\n    case 'MMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);\n      break;\n    case 'MMMMM':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);\n      break;\n    // Month of the year (January, ...), string, standalone\n    case 'LLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);\n      break;\n    case 'LLLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);\n      break;\n    case 'LLLLL':\n      formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);\n      break;\n    // Week of the year (1, ... 52)\n    case 'w':\n      formatter = weekGetter(1);\n      break;\n    case 'ww':\n      formatter = weekGetter(2);\n      break;\n    // Week of the month (1, ...)\n    case 'W':\n      formatter = weekGetter(1, true);\n      break;\n    // Day of the month (1-31)\n    case 'd':\n      formatter = dateGetter(DateType.Date, 1);\n      break;\n    case 'dd':\n      formatter = dateGetter(DateType.Date, 2);\n      break;\n    // Day of the Week StandAlone (1, 1, Mon, Monday, M, Mo)\n    case 'c':\n    case 'cc':\n      formatter = dateGetter(DateType.Day, 1);\n      break;\n    case 'ccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone);\n      break;\n    case 'cccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone);\n      break;\n    case 'ccccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone);\n      break;\n    case 'cccccc':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone);\n      break;\n    // Day of the Week\n    case 'E':\n    case 'EE':\n    case 'EEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);\n      break;\n    case 'EEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);\n      break;\n    case 'EEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);\n      break;\n    case 'EEEEEE':\n      formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);\n      break;\n    // Generic period of the day (am-pm)\n    case 'a':\n    case 'aa':\n    case 'aaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);\n      break;\n    case 'aaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);\n      break;\n    case 'aaaaa':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);\n      break;\n    // Extended period of the day (midnight, at night, ...), standalone\n    case 'b':\n    case 'bb':\n    case 'bbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);\n      break;\n    case 'bbbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);\n      break;\n    case 'bbbbb':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);\n      break;\n    // Extended period of the day (midnight, night, ...), standalone\n    case 'B':\n    case 'BB':\n    case 'BBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);\n      break;\n    case 'BBBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);\n      break;\n    case 'BBBBB':\n      formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);\n      break;\n    // Hour in AM/PM, (1-12)\n    case 'h':\n      formatter = dateGetter(DateType.Hours, 1, -12);\n      break;\n    case 'hh':\n      formatter = dateGetter(DateType.Hours, 2, -12);\n      break;\n    // Hour of the day (0-23)\n    case 'H':\n      formatter = dateGetter(DateType.Hours, 1);\n      break;\n    // Hour in day, padded (00-23)\n    case 'HH':\n      formatter = dateGetter(DateType.Hours, 2);\n      break;\n    // Minute of the hour (0-59)\n    case 'm':\n      formatter = dateGetter(DateType.Minutes, 1);\n      break;\n    case 'mm':\n      formatter = dateGetter(DateType.Minutes, 2);\n      break;\n    // Second of the minute (0-59)\n    case 's':\n      formatter = dateGetter(DateType.Seconds, 1);\n      break;\n    case 'ss':\n      formatter = dateGetter(DateType.Seconds, 2);\n      break;\n    // Fractional second\n    case 'S':\n      formatter = dateGetter(DateType.FractionalSeconds, 1);\n      break;\n    case 'SS':\n      formatter = dateGetter(DateType.FractionalSeconds, 2);\n      break;\n    case 'SSS':\n      formatter = dateGetter(DateType.FractionalSeconds, 3);\n      break;\n    // Timezone ISO8601 short format (-0430)\n    case 'Z':\n    case 'ZZ':\n    case 'ZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Short);\n      break;\n    // Timezone ISO8601 extended format (-04:30)\n    case 'ZZZZZ':\n      formatter = timeZoneGetter(ZoneWidth.Extended);\n      break;\n    // Timezone GMT short format (GMT+4)\n    case 'O':\n    case 'OO':\n    case 'OOO':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'z':\n    case 'zz':\n    case 'zzz':\n      formatter = timeZoneGetter(ZoneWidth.ShortGMT);\n      break;\n    // Timezone GMT long format (GMT+0430)\n    case 'OOOO':\n    case 'ZZZZ':\n    // Should be location, but fallback to format O instead because we don't have the data yet\n    case 'zzzz':\n      formatter = timeZoneGetter(ZoneWidth.Long);\n      break;\n    default:\n      return null;\n  }\n  DATE_FORMATS[format] = formatter;\n  return formatter;\n}\nfunction timezoneToOffset(timezone, fallback) {\n  // Support: IE 11 only, Edge 13-15+\n  // IE/Edge do not \"understand\" colon (`:`) in timezone\n  timezone = timezone.replace(/:/g, '');\n  const requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\nfunction addDateMinutes(date, minutes) {\n  date = new Date(date.getTime());\n  date.setMinutes(date.getMinutes() + minutes);\n  return date;\n}\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n  const reverseValue = reverse ? -1 : 1;\n  const dateTimezoneOffset = date.getTimezoneOffset();\n  const timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n  return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\n/**\n * Converts a value to date.\n *\n * Supported input formats:\n * - `Date`\n * - number: timestamp\n * - string: numeric (e.g. \"1234\"), ISO and date strings in a format supported by\n *   [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n *   Note: ISO strings without time return a date without timeoffset.\n *\n * Throws if unable to convert to a date.\n */\nfunction toDate(value) {\n  if (isDate(value)) {\n    return value;\n  }\n  if (typeof value === 'number' && !isNaN(value)) {\n    return new Date(value);\n  }\n  if (typeof value === 'string') {\n    value = value.trim();\n    if (/^(\\d{4}(-\\d{1,2}(-\\d{1,2})?)?)$/.test(value)) {\n      /* For ISO Strings without time the day, month and year must be extracted from the ISO String\n      before Date creation to avoid time offset and errors in the new Date.\n      If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n      date, some browsers (e.g. IE 9) will throw an invalid Date error.\n      If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n      is applied.\n      Note: ISO months are 0 for January, 1 for February, ... */\n      const [y, m = 1, d = 1] = value.split('-').map(val => +val);\n      return createDate(y, m - 1, d);\n    }\n    const parsedNb = parseFloat(value);\n    // any string that only contains numbers, like \"1234\" but not like \"1234hello\"\n    if (!isNaN(value - parsedNb)) {\n      return new Date(parsedNb);\n    }\n    let match;\n    if (match = value.match(ISO8601_DATE_REGEX)) {\n      return isoStringToDate(match);\n    }\n  }\n  const date = new Date(value);\n  if (!isDate(date)) {\n    throw new Error(`Unable to convert \"${value}\" into a date`);\n  }\n  return date;\n}\n/**\n * Converts a date in ISO8601 to a Date.\n * Used instead of `Date.parse` because of browser discrepancies.\n */\nfunction isoStringToDate(match) {\n  const date = new Date(0);\n  let tzHour = 0;\n  let tzMin = 0;\n  // match[8] means that the string contains \"Z\" (UTC) or a timezone like \"+01:00\" or \"+0100\"\n  const dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n  const timeSetter = match[8] ? date.setUTCHours : date.setHours;\n  // if there is a timezone defined like \"+01:00\" or \"+0100\"\n  if (match[9]) {\n    tzHour = Number(match[9] + match[10]);\n    tzMin = Number(match[9] + match[11]);\n  }\n  dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n  const h = Number(match[4] || 0) - tzHour;\n  const m = Number(match[5] || 0) - tzMin;\n  const s = Number(match[6] || 0);\n  // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11)\n  // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms`\n  // becomes `999ms`.\n  const ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);\n  timeSetter.call(date, h, m, s, ms);\n  return date;\n}\nfunction isDate(value) {\n  return value instanceof Date && !isNaN(value.valueOf());\n}\nconst NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\nconst MAX_DIGITS = 22;\nconst DECIMAL_SEP = '.';\nconst ZERO_CHAR = '0';\nconst PATTERN_SEP = ';';\nconst GROUP_SEP = ',';\nconst DIGIT_CHAR = '#';\nconst CURRENCY_CHAR = '¤';\nconst PERCENT_CHAR = '%';\n/**\n * Transforms a number to a locale string based on a style and a format.\n */\nfunction formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo, isPercent = false) {\n  let formattedText = '';\n  let isZero = false;\n  if (!isFinite(value)) {\n    formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);\n  } else {\n    let parsedNumber = parseNumber(value);\n    if (isPercent) {\n      parsedNumber = toPercent(parsedNumber);\n    }\n    let minInt = pattern.minInt;\n    let minFraction = pattern.minFrac;\n    let maxFraction = pattern.maxFrac;\n    if (digitsInfo) {\n      const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n      if (parts === null) {\n        throw new Error(`${digitsInfo} is not a valid digit info`);\n      }\n      const minIntPart = parts[1];\n      const minFractionPart = parts[3];\n      const maxFractionPart = parts[5];\n      if (minIntPart != null) {\n        minInt = parseIntAutoRadix(minIntPart);\n      }\n      if (minFractionPart != null) {\n        minFraction = parseIntAutoRadix(minFractionPart);\n      }\n      if (maxFractionPart != null) {\n        maxFraction = parseIntAutoRadix(maxFractionPart);\n      } else if (minFractionPart != null && minFraction > maxFraction) {\n        maxFraction = minFraction;\n      }\n    }\n    roundNumber(parsedNumber, minFraction, maxFraction);\n    let digits = parsedNumber.digits;\n    let integerLen = parsedNumber.integerLen;\n    const exponent = parsedNumber.exponent;\n    let decimals = [];\n    isZero = digits.every(d => !d);\n    // pad zeros for small numbers\n    for (; integerLen < minInt; integerLen++) {\n      digits.unshift(0);\n    }\n    // pad zeros for small numbers\n    for (; integerLen < 0; integerLen++) {\n      digits.unshift(0);\n    }\n    // extract decimals digits\n    if (integerLen > 0) {\n      decimals = digits.splice(integerLen, digits.length);\n    } else {\n      decimals = digits;\n      digits = [0];\n    }\n    // format the integer digits with grouping separators\n    const groups = [];\n    if (digits.length >= pattern.lgSize) {\n      groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));\n    }\n    while (digits.length > pattern.gSize) {\n      groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));\n    }\n    if (digits.length) {\n      groups.unshift(digits.join(''));\n    }\n    formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));\n    // append the decimal digits\n    if (decimals.length) {\n      formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');\n    }\n    if (exponent) {\n      formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;\n    }\n  }\n  if (value < 0 && !isZero) {\n    formattedText = pattern.negPre + formattedText + pattern.negSuf;\n  } else {\n    formattedText = pattern.posPre + formattedText + pattern.posSuf;\n  }\n  return formattedText;\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as currency using locale rules.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param currency A string containing the currency symbol or its name,\n * such as \"$\" or \"Canadian Dollar\". Used in output string, but does not affect the operation\n * of the function.\n * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)\n * currency code, such as `USD` for the US dollar and `EUR` for the euro.\n * Used to determine the number of digits in the decimal part.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted currency value.\n *\n * @see {@link formatNumber}\n * @see {@link DecimalPipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatCurrency(value, locale, currency, currencyCode, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);\n  pattern.maxFrac = pattern.minFrac;\n  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);\n  return res.replace(CURRENCY_CHAR, currency)\n  // if we have 2 time the currency character, the second one is ignored\n  .replace(CURRENCY_CHAR, '')\n  // If there is a spacing between currency character and the value and\n  // the currency character is suppressed by passing an empty string, the\n  // spacing character would remain as part of the string. Then we\n  // should remove it.\n  .trim();\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as a percentage according to locale rules.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted percentage value.\n *\n * @see {@link formatNumber}\n * @see {@link DecimalPipe}\n * @see [Internationalization (i18n) Guide](guide/i18n)\n * @publicApi\n *\n */\nfunction formatPercent(value, locale, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  const res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);\n  return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a number as text, with group sizing, separator, and other\n * parameters based on the locale.\n *\n * @param value The number to format.\n * @param locale A locale code for the locale format rules to use.\n * @param digitsInfo Decimal representation options, specified by a string in the following format:\n * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.\n *\n * @returns The formatted text string.\n * @see [Internationalization (i18n) Guide](guide/i18n)\n *\n * @publicApi\n */\nfunction formatNumber(value, locale, digitsInfo) {\n  const format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);\n  const pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n  return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);\n}\nfunction parseNumberFormat(format, minusSign = '-') {\n  const p = {\n    minInt: 1,\n    minFrac: 0,\n    maxFrac: 0,\n    posPre: '',\n    posSuf: '',\n    negPre: '',\n    negSuf: '',\n    gSize: 0,\n    lgSize: 0\n  };\n  const patternParts = format.split(PATTERN_SEP);\n  const positive = patternParts[0];\n  const negative = patternParts[1];\n  const positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],\n    integer = positiveParts[0],\n    fraction = positiveParts[1] || '';\n  p.posPre = integer.substring(0, integer.indexOf(DIGIT_CHAR));\n  for (let i = 0; i < fraction.length; i++) {\n    const ch = fraction.charAt(i);\n    if (ch === ZERO_CHAR) {\n      p.minFrac = p.maxFrac = i + 1;\n    } else if (ch === DIGIT_CHAR) {\n      p.maxFrac = i + 1;\n    } else {\n      p.posSuf += ch;\n    }\n  }\n  const groups = integer.split(GROUP_SEP);\n  p.gSize = groups[1] ? groups[1].length : 0;\n  p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;\n  if (negative) {\n    const trunkLen = positive.length - p.posPre.length - p.posSuf.length,\n      pos = negative.indexOf(DIGIT_CHAR);\n    p.negPre = negative.substring(0, pos).replace(/'/g, '');\n    p.negSuf = negative.slice(pos + trunkLen).replace(/'/g, '');\n  } else {\n    p.negPre = minusSign + p.posPre;\n    p.negSuf = p.posSuf;\n  }\n  return p;\n}\n// Transforms a parsed number into a percentage by multiplying it by 100\nfunction toPercent(parsedNumber) {\n  // if the number is 0, don't do anything\n  if (parsedNumber.digits[0] === 0) {\n    return parsedNumber;\n  }\n  // Getting the current number of decimals\n  const fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;\n  if (parsedNumber.exponent) {\n    parsedNumber.exponent += 2;\n  } else {\n    if (fractionLen === 0) {\n      parsedNumber.digits.push(0, 0);\n    } else if (fractionLen === 1) {\n      parsedNumber.digits.push(0);\n    }\n    parsedNumber.integerLen += 2;\n  }\n  return parsedNumber;\n}\n/**\n * Parses a number.\n * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/\n */\nfunction parseNumber(num) {\n  let numStr = Math.abs(num) + '';\n  let exponent = 0,\n    digits,\n    integerLen;\n  let i, j, zeros;\n  // Decimal point?\n  if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {\n    numStr = numStr.replace(DECIMAL_SEP, '');\n  }\n  // Exponential form?\n  if ((i = numStr.search(/e/i)) > 0) {\n    // Work out the exponent.\n    if (integerLen < 0) integerLen = i;\n    integerLen += +numStr.slice(i + 1);\n    numStr = numStr.substring(0, i);\n  } else if (integerLen < 0) {\n    // There was no decimal point or exponent so it is an integer.\n    integerLen = numStr.length;\n  }\n  // Count the number of leading zeros.\n  for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {\n    /* empty */\n  }\n  if (i === (zeros = numStr.length)) {\n    // The digits are all zero.\n    digits = [0];\n    integerLen = 1;\n  } else {\n    // Count the number of trailing zeros\n    zeros--;\n    while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;\n    // Trailing zeros are insignificant so ignore them\n    integerLen -= i;\n    digits = [];\n    // Convert string to array of digits without leading/trailing zeros.\n    for (j = 0; i <= zeros; i++, j++) {\n      digits[j] = Number(numStr.charAt(i));\n    }\n  }\n  // If the number overflows the maximum allowed digits then use an exponent.\n  if (integerLen > MAX_DIGITS) {\n    digits = digits.splice(0, MAX_DIGITS - 1);\n    exponent = integerLen - 1;\n    integerLen = 1;\n  }\n  return {\n    digits,\n    exponent,\n    integerLen\n  };\n}\n/**\n * Round the parsed number to the specified number of decimal places\n * This function changes the parsedNumber in-place\n */\nfunction roundNumber(parsedNumber, minFrac, maxFrac) {\n  if (minFrac > maxFrac) {\n    throw new Error(`The minimum number of digits after fraction (${minFrac}) is higher than the maximum (${maxFrac}).`);\n  }\n  let digits = parsedNumber.digits;\n  let fractionLen = digits.length - parsedNumber.integerLen;\n  const fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);\n  // The index of the digit to where rounding is to occur\n  let roundAt = fractionSize + parsedNumber.integerLen;\n  let digit = digits[roundAt];\n  if (roundAt > 0) {\n    // Drop fractional digits beyond `roundAt`\n    digits.splice(Math.max(parsedNumber.integerLen, roundAt));\n    // Set non-fractional digits beyond `roundAt` to 0\n    for (let j = roundAt; j < digits.length; j++) {\n      digits[j] = 0;\n    }\n  } else {\n    // We rounded to zero so reset the parsedNumber\n    fractionLen = Math.max(0, fractionLen);\n    parsedNumber.integerLen = 1;\n    digits.length = Math.max(1, roundAt = fractionSize + 1);\n    digits[0] = 0;\n    for (let i = 1; i < roundAt; i++) digits[i] = 0;\n  }\n  if (digit >= 5) {\n    if (roundAt - 1 < 0) {\n      for (let k = 0; k > roundAt; k--) {\n        digits.unshift(0);\n        parsedNumber.integerLen++;\n      }\n      digits.unshift(1);\n      parsedNumber.integerLen++;\n    } else {\n      digits[roundAt - 1]++;\n    }\n  }\n  // Pad out with zeros to get the required fraction length\n  for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);\n  let dropTrailingZeros = fractionSize !== 0;\n  // Minimal length = nb of decimals required + current nb of integers\n  // Any number besides that is optional and can be removed if it's a trailing 0\n  const minLen = minFrac + parsedNumber.integerLen;\n  // Do any carrying, e.g. a digit was rounded up to 10\n  const carry = digits.reduceRight(function (carry, d, i, digits) {\n    d = d + carry;\n    digits[i] = d < 10 ? d : d - 10; // d % 10\n    if (dropTrailingZeros) {\n      // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52)\n      if (digits[i] === 0 && i >= minLen) {\n        digits.pop();\n      } else {\n        dropTrailingZeros = false;\n      }\n    }\n    return d >= 10 ? 1 : 0; // Math.floor(d / 10);\n  }, 0);\n  if (carry) {\n    digits.unshift(carry);\n    parsedNumber.integerLen++;\n  }\n}\nfunction parseIntAutoRadix(text) {\n  const result = parseInt(text);\n  if (isNaN(result)) {\n    throw new Error('Invalid integer literal when parsing ' + text);\n  }\n  return result;\n}\n\n/**\n * @publicApi\n */\nclass NgLocalization {\n  static ɵfac = function NgLocalization_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgLocalization)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NgLocalization,\n    factory: function NgLocalization_Factory(__ngFactoryType__) {\n      let __ngConditionalFactory__ = null;\n      if (__ngFactoryType__) {\n        __ngConditionalFactory__ = new __ngFactoryType__();\n      } else {\n        __ngConditionalFactory__ = (locale => new NgLocaleLocalization(locale))(i0.ɵɵinject(LOCALE_ID));\n      }\n      return __ngConditionalFactory__;\n    },\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgLocalization, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useFactory: locale => new NgLocaleLocalization(locale),\n      deps: [LOCALE_ID]\n    }]\n  }], null, null);\n})();\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n */\nfunction getPluralCategory(value, cases, ngLocalization, locale) {\n  let key = `=${value}`;\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n  key = ngLocalization.getPluralCategory(value, locale);\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n  if (cases.indexOf('other') > -1) {\n    return 'other';\n  }\n  throw new Error(`No plural message found for value \"${value}\"`);\n}\n/**\n * Returns the plural case based on the locale\n *\n * @publicApi\n */\nclass NgLocaleLocalization extends NgLocalization {\n  locale;\n  constructor(locale) {\n    super();\n    this.locale = locale;\n  }\n  getPluralCategory(value, locale) {\n    const plural = getLocalePluralCase(locale || this.locale)(value);\n    switch (plural) {\n      case Plural.Zero:\n        return 'zero';\n      case Plural.One:\n        return 'one';\n      case Plural.Two:\n        return 'two';\n      case Plural.Few:\n        return 'few';\n      case Plural.Many:\n        return 'many';\n      default:\n        return 'other';\n    }\n  }\n  static ɵfac = function NgLocaleLocalization_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgLocaleLocalization)(i0.ɵɵinject(LOCALE_ID));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: NgLocaleLocalization,\n    factory: NgLocaleLocalization.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgLocaleLocalization, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n\n/**\n * Register global data to be used internally by Angular. See the\n * [\"I18n guide\"](guide/i18n/format-data-locale) to know how to import additional locale\n * data.\n *\n * The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1\n *\n * @publicApi\n */\nfunction registerLocaleData(data, localeId, extraData) {\n  return ɵregisterLocaleData(data, localeId, extraData);\n}\nfunction parseCookieValue(cookieStr, name) {\n  name = encodeURIComponent(name);\n  for (const cookie of cookieStr.split(';')) {\n    const eqIndex = cookie.indexOf('=');\n    const [cookieName, cookieValue] = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)];\n    if (cookieName.trim() === name) {\n      return decodeURIComponent(cookieValue);\n    }\n  }\n  return null;\n}\nconst WS_REGEXP = /\\s+/;\nconst EMPTY_ARRAY = [];\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n * ```html\n *     <some-element [ngClass]=\"'first second'\">...</some-element>\n *\n *     <some-element [ngClass]=\"['first', 'second']\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'first': true, 'second': true, 'third': false}\">...</some-element>\n *\n *     <some-element [ngClass]=\"stringExp|arrayExp|objExp\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'class1 class2 class3' : true}\">...</some-element>\n * ```\n *\n * @description\n *\n * Adds and removes CSS classes on an HTML element.\n *\n * The CSS classes are updated as follows, depending on the type of the expression evaluation:\n * - `string` - the CSS classes listed in the string (space delimited) are added,\n * - `Array` - the CSS classes declared as Array elements are added,\n * - `Object` - keys are CSS classes that get added when the expression given in the value\n *              evaluates to a truthy value, otherwise they are removed.\n *\n * @publicApi\n */\nclass NgClass {\n  _ngEl;\n  _renderer;\n  initialClasses = EMPTY_ARRAY;\n  rawClass;\n  stateMap = new Map();\n  constructor(_ngEl, _renderer) {\n    this._ngEl = _ngEl;\n    this._renderer = _renderer;\n  }\n  set klass(value) {\n    this.initialClasses = value != null ? value.trim().split(WS_REGEXP) : EMPTY_ARRAY;\n  }\n  set ngClass(value) {\n    this.rawClass = typeof value === 'string' ? value.trim().split(WS_REGEXP) : value;\n  }\n  /*\n  The NgClass directive uses the custom change detection algorithm for its inputs. The custom\n  algorithm is necessary since inputs are represented as complex object or arrays that need to be\n  deeply-compared.\n     This algorithm is perf-sensitive since NgClass is used very frequently and its poor performance\n  might negatively impact runtime performance of the entire change detection cycle. The design of\n  this algorithm is making sure that:\n  - there is no unnecessary DOM manipulation (CSS classes are added / removed from the DOM only when\n  needed), even if references to bound objects change;\n  - there is no memory allocation if nothing changes (even relatively modest memory allocation\n  during the change detection cycle can result in GC pauses for some of the CD cycles).\n     The algorithm works by iterating over the set of bound classes, staring with [class] binding and\n  then going over [ngClass] binding. For each CSS class name:\n  - check if it was seen before (this information is tracked in the state map) and if its value\n  changed;\n  - mark it as \"touched\" - names that are not marked are not present in the latest set of binding\n  and we can remove such class name from the internal data structures;\n     After iteration over all the CSS class names we've got data structure with all the information\n  necessary to synchronize changes to the DOM - it is enough to iterate over the state map, flush\n  changes to the DOM and reset internal data structures so those are ready for the next change\n  detection cycle.\n   */\n  ngDoCheck() {\n    // classes from the [class] binding\n    for (const klass of this.initialClasses) {\n      this._updateState(klass, true);\n    }\n    // classes from the [ngClass] binding\n    const rawClass = this.rawClass;\n    if (Array.isArray(rawClass) || rawClass instanceof Set) {\n      for (const klass of rawClass) {\n        this._updateState(klass, true);\n      }\n    } else if (rawClass != null) {\n      for (const klass of Object.keys(rawClass)) {\n        this._updateState(klass, Boolean(rawClass[klass]));\n      }\n    }\n    this._applyStateDiff();\n  }\n  _updateState(klass, nextEnabled) {\n    const state = this.stateMap.get(klass);\n    if (state !== undefined) {\n      if (state.enabled !== nextEnabled) {\n        state.changed = true;\n        state.enabled = nextEnabled;\n      }\n      state.touched = true;\n    } else {\n      this.stateMap.set(klass, {\n        enabled: nextEnabled,\n        changed: true,\n        touched: true\n      });\n    }\n  }\n  _applyStateDiff() {\n    for (const stateEntry of this.stateMap) {\n      const klass = stateEntry[0];\n      const state = stateEntry[1];\n      if (state.changed) {\n        this._toggleClass(klass, state.enabled);\n        state.changed = false;\n      } else if (!state.touched) {\n        // A class that was previously active got removed from the new collection of classes -\n        // remove from the DOM as well.\n        if (state.enabled) {\n          this._toggleClass(klass, false);\n        }\n        this.stateMap.delete(klass);\n      }\n      state.touched = false;\n    }\n  }\n  _toggleClass(klass, enabled) {\n    if (ngDevMode) {\n      if (typeof klass !== 'string') {\n        throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${ɵstringify(klass)}`);\n      }\n    }\n    klass = klass.trim();\n    if (klass.length > 0) {\n      klass.split(WS_REGEXP).forEach(klass => {\n        if (enabled) {\n          this._renderer.addClass(this._ngEl.nativeElement, klass);\n        } else {\n          this._renderer.removeClass(this._ngEl.nativeElement, klass);\n        }\n      });\n    }\n  }\n  static ɵfac = function NgClass_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgClass)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgClass,\n    selectors: [[\"\", \"ngClass\", \"\"]],\n    inputs: {\n      klass: [0, \"class\", \"klass\"],\n      ngClass: \"ngClass\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgClass, [{\n    type: Directive,\n    args: [{\n      selector: '[ngClass]'\n    }]\n  }], () => [{\n    type: i0.ElementRef\n  }, {\n    type: i0.Renderer2\n  }], {\n    klass: [{\n      type: Input,\n      args: ['class']\n    }],\n    ngClass: [{\n      type: Input,\n      args: ['ngClass']\n    }]\n  });\n})();\n\n/**\n * Instantiates a {@link Component} type and inserts its Host View into the current View.\n * `NgComponentOutlet` provides a declarative approach for dynamic component creation.\n *\n * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and\n * any existing component will be destroyed.\n *\n * @usageNotes\n *\n * ### Fine tune control\n *\n * You can control the component creation process by using the following optional attributes:\n *\n * * `ngComponentOutletInputs`: Optional component inputs object, which will be bind to the\n * component.\n *\n * * `ngComponentOutletInjector`: Optional custom {@link Injector} that will be used as parent for\n * the Component. Defaults to the injector of the current view container.\n *\n * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content\n * section of the component, if it exists.\n *\n * * `ngComponentOutletNgModule`: Optional NgModule class reference to allow loading another\n * module dynamically, then loading a component from that module.\n *\n * * `ngComponentOutletNgModuleFactory`: Deprecated config option that allows providing optional\n * NgModule factory to allow loading another module dynamically, then loading a component from that\n * module. Use `ngComponentOutletNgModule` instead.\n *\n * ### Syntax\n *\n * Simple\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression\"></ng-container>\n * ```\n *\n * With inputs\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   inputs: inputsExpression;\">\n * </ng-container>\n * ```\n *\n * Customized injector/content\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   injector: injectorExpression;\n *                                   content: contentNodesExpression;\">\n * </ng-container>\n * ```\n *\n * Customized NgModule reference\n * ```html\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   ngModule: ngModuleClass;\">\n * </ng-container>\n * ```\n *\n * ### A simple example\n *\n * {@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}\n *\n * A more complete example with additional options:\n *\n * {@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}\n *\n * @publicApi\n * @ngModule CommonModule\n */\nclass NgComponentOutlet {\n  _viewContainerRef;\n  ngComponentOutlet = null;\n  ngComponentOutletInputs;\n  ngComponentOutletInjector;\n  ngComponentOutletContent;\n  ngComponentOutletNgModule;\n  /**\n   * @deprecated This input is deprecated, use `ngComponentOutletNgModule` instead.\n   */\n  ngComponentOutletNgModuleFactory;\n  _componentRef;\n  _moduleRef;\n  /**\n   * A helper data structure that allows us to track inputs that were part of the\n   * ngComponentOutletInputs expression. Tracking inputs is necessary for proper removal of ones\n   * that are no longer referenced.\n   */\n  _inputsUsed = new Map();\n  constructor(_viewContainerRef) {\n    this._viewContainerRef = _viewContainerRef;\n  }\n  _needToReCreateNgModuleInstance(changes) {\n    // Note: square brackets property accessor is safe for Closure compiler optimizations (the\n    // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that\n    // were changed).\n    return changes['ngComponentOutletNgModule'] !== undefined || changes['ngComponentOutletNgModuleFactory'] !== undefined;\n  }\n  _needToReCreateComponentInstance(changes) {\n    // Note: square brackets property accessor is safe for Closure compiler optimizations (the\n    // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that\n    // were changed).\n    return changes['ngComponentOutlet'] !== undefined || changes['ngComponentOutletContent'] !== undefined || changes['ngComponentOutletInjector'] !== undefined || this._needToReCreateNgModuleInstance(changes);\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (this._needToReCreateComponentInstance(changes)) {\n      this._viewContainerRef.clear();\n      this._inputsUsed.clear();\n      this._componentRef = undefined;\n      if (this.ngComponentOutlet) {\n        const injector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n        if (this._needToReCreateNgModuleInstance(changes)) {\n          this._moduleRef?.destroy();\n          if (this.ngComponentOutletNgModule) {\n            this._moduleRef = createNgModule(this.ngComponentOutletNgModule, getParentInjector(injector));\n          } else if (this.ngComponentOutletNgModuleFactory) {\n            this._moduleRef = this.ngComponentOutletNgModuleFactory.create(getParentInjector(injector));\n          } else {\n            this._moduleRef = undefined;\n          }\n        }\n        this._componentRef = this._viewContainerRef.createComponent(this.ngComponentOutlet, {\n          injector,\n          ngModuleRef: this._moduleRef,\n          projectableNodes: this.ngComponentOutletContent\n        });\n      }\n    }\n  }\n  /** @nodoc */\n  ngDoCheck() {\n    if (this._componentRef) {\n      if (this.ngComponentOutletInputs) {\n        for (const inputName of Object.keys(this.ngComponentOutletInputs)) {\n          this._inputsUsed.set(inputName, true);\n        }\n      }\n      this._applyInputStateDiff(this._componentRef);\n    }\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    this._moduleRef?.destroy();\n  }\n  _applyInputStateDiff(componentRef) {\n    for (const [inputName, touched] of this._inputsUsed) {\n      if (!touched) {\n        // The input that was previously active no longer exists and needs to be set to undefined.\n        componentRef.setInput(inputName, undefined);\n        this._inputsUsed.delete(inputName);\n      } else {\n        // Since touched is true, it can be asserted that the inputs object is not empty.\n        componentRef.setInput(inputName, this.ngComponentOutletInputs[inputName]);\n        this._inputsUsed.set(inputName, false);\n      }\n    }\n  }\n  static ɵfac = function NgComponentOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgComponentOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgComponentOutlet,\n    selectors: [[\"\", \"ngComponentOutlet\", \"\"]],\n    inputs: {\n      ngComponentOutlet: \"ngComponentOutlet\",\n      ngComponentOutletInputs: \"ngComponentOutletInputs\",\n      ngComponentOutletInjector: \"ngComponentOutletInjector\",\n      ngComponentOutletContent: \"ngComponentOutletContent\",\n      ngComponentOutletNgModule: \"ngComponentOutletNgModule\",\n      ngComponentOutletNgModuleFactory: \"ngComponentOutletNgModuleFactory\"\n    },\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgComponentOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[ngComponentOutlet]',\n      standalone: true\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }], {\n    ngComponentOutlet: [{\n      type: Input\n    }],\n    ngComponentOutletInputs: [{\n      type: Input\n    }],\n    ngComponentOutletInjector: [{\n      type: Input\n    }],\n    ngComponentOutletContent: [{\n      type: Input\n    }],\n    ngComponentOutletNgModule: [{\n      type: Input\n    }],\n    ngComponentOutletNgModuleFactory: [{\n      type: Input\n    }]\n  });\n})();\n// Helper function that returns an Injector instance of a parent NgModule.\nfunction getParentInjector(injector) {\n  const parentNgModule = injector.get(NgModuleRef);\n  return parentNgModule.injector;\n}\n\n/**\n * @publicApi\n */\nclass NgForOfContext {\n  $implicit;\n  ngForOf;\n  index;\n  count;\n  constructor(/** Reference to the current item from the collection. */\n  $implicit,\n  /**\n   * The value of the iterable expression. Useful when the expression is\n   * more complex then a property access, for example when using the async pipe\n   * (`userStreams | async`).\n   */\n  ngForOf, /** Returns an index of the current item in the collection. */\n  index, /** Returns total amount of items in the collection. */\n  count) {\n    this.$implicit = $implicit;\n    this.ngForOf = ngForOf;\n    this.index = index;\n    this.count = count;\n  }\n  // Indicates whether this is the first item in the collection.\n  get first() {\n    return this.index === 0;\n  }\n  // Indicates whether this is the last item in the collection.\n  get last() {\n    return this.index === this.count - 1;\n  }\n  // Indicates whether an index of this item in the collection is even.\n  get even() {\n    return this.index % 2 === 0;\n  }\n  // Indicates whether an index of this item in the collection is odd.\n  get odd() {\n    return !this.even;\n  }\n}\n/**\n * A [structural directive](guide/directives/structural-directives) that renders\n * a template for each item in a collection.\n * The directive is placed on an element, which becomes the parent\n * of the cloned templates.\n *\n * The `ngForOf` directive is generally used in the\n * [shorthand form](guide/directives/structural-directives#asterisk) `*ngFor`.\n * In this form, the template to be rendered for each iteration is the content\n * of an anchor element containing the directive.\n *\n * The following example shows the shorthand syntax with some options,\n * contained in an `<li>` element.\n *\n * ```html\n * <li *ngFor=\"let item of items; index as i; trackBy: trackByFn\">...</li>\n * ```\n *\n * The shorthand form expands into a long form that uses the `ngForOf` selector\n * on an `<ng-template>` element.\n * The content of the `<ng-template>` element is the `<li>` element that held the\n * short-form directive.\n *\n * Here is the expanded version of the short-form example.\n *\n * ```html\n * <ng-template ngFor let-item [ngForOf]=\"items\" let-i=\"index\" [ngForTrackBy]=\"trackByFn\">\n *   <li>...</li>\n * </ng-template>\n * ```\n *\n * Angular automatically expands the shorthand syntax as it compiles the template.\n * The context for each embedded view is logically merged to the current component\n * context according to its lexical position.\n *\n * When using the shorthand syntax, Angular allows only [one structural directive\n * on an element](guide/directives/structural-directives#one-per-element).\n * If you want to iterate conditionally, for example,\n * put the `*ngIf` on a container element that wraps the `*ngFor` element.\n * For further discussion, see\n * [Structural Directives](guide/directives/structural-directives#one-per-element).\n *\n * @usageNotes\n *\n * ### Local variables\n *\n * `NgForOf` provides exported values that can be aliased to local variables.\n * For example:\n *\n *  ```html\n * <li *ngFor=\"let user of users; index as i; first as isFirst\">\n *    {{i}}/{{users.length}}. {{user}} <span *ngIf=\"isFirst\">default</span>\n * </li>\n * ```\n *\n * The following exported values can be aliased to local variables:\n *\n * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).\n * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is\n * more complex then a property access, for example when using the async pipe (`userStreams |\n * async`).\n * - `index: number`: The index of the current item in the iterable.\n * - `count: number`: The length of the iterable.\n * - `first: boolean`: True when the item is the first item in the iterable.\n * - `last: boolean`: True when the item is the last item in the iterable.\n * - `even: boolean`: True when the item has an even index in the iterable.\n * - `odd: boolean`: True when the item has an odd index in the iterable.\n *\n * ### Change propagation\n *\n * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n *\n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls that are present, such as `<input>` elements that accept user input. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n * For more on animations, see [Transitions and Triggers](guide/animations/transition-and-triggers).\n *\n * The identities of elements in the iterator can change while the data does not.\n * This can happen, for example, if the iterator is produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response produces objects with\n * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted).\n *\n * To avoid this expensive operation, you can customize the default tracking algorithm.\n * by supplying the `trackBy` option to `NgForOf`.\n * `trackBy` takes a function that has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * @see [Structural Directives](guide/directives/structural-directives)\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgForOf {\n  _viewContainer;\n  _template;\n  _differs;\n  /**\n   * The value of the iterable expression, which can be used as a\n   * [template input variable](guide/directives/structural-directives#shorthand).\n   */\n  set ngForOf(ngForOf) {\n    this._ngForOf = ngForOf;\n    this._ngForOfDirty = true;\n  }\n  /**\n   * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable.\n   *\n   * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object\n   * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)\n   * as the key.\n   *\n   * `NgForOf` uses the computed key to associate items in an iterable with DOM elements\n   * it produces for these items.\n   *\n   * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an\n   * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a\n   * primary key), and this iterable could be updated with new object instances that still\n   * represent the same underlying entity (for example, when data is re-fetched from the server,\n   * and the iterable is recreated and re-rendered, but most of the data is still the same).\n   *\n   * @see {@link TrackByFunction}\n   */\n  set ngForTrackBy(fn) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n      console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` + `See https://angular.io/api/common/NgForOf#change-propagation for more information.`);\n    }\n    this._trackByFn = fn;\n  }\n  get ngForTrackBy() {\n    return this._trackByFn;\n  }\n  _ngForOf = null;\n  _ngForOfDirty = true;\n  _differ = null;\n  // TODO(issue/24571): remove '!'\n  // waiting for microsoft/typescript#43662 to allow the return type `TrackByFunction|undefined` for\n  // the getter\n  _trackByFn;\n  constructor(_viewContainer, _template, _differs) {\n    this._viewContainer = _viewContainer;\n    this._template = _template;\n    this._differs = _differs;\n  }\n  /**\n   * A reference to the template that is stamped out for each item in the iterable.\n   * @see [template reference variable](guide/templates/variables#template-reference-variables)\n   */\n  set ngForTemplate(value) {\n    // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1\n    // The current type is too restrictive; a template that just uses index, for example,\n    // should be acceptable.\n    if (value) {\n      this._template = value;\n    }\n  }\n  /**\n   * Applies the changes when needed.\n   * @nodoc\n   */\n  ngDoCheck() {\n    if (this._ngForOfDirty) {\n      this._ngForOfDirty = false;\n      // React on ngForOf changes only once all inputs have been initialized\n      const value = this._ngForOf;\n      if (!this._differ && value) {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          try {\n            // CAUTION: this logic is duplicated for production mode below, as the try-catch\n            // is only present in development builds.\n            this._differ = this._differs.find(value).create(this.ngForTrackBy);\n          } catch {\n            let errorMessage = `Cannot find a differ supporting object '${value}' of type '` + `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;\n            if (typeof value === 'object') {\n              errorMessage += ' Did you mean to use the keyvalue pipe?';\n            }\n            throw new ɵRuntimeError(-2200 /* RuntimeErrorCode.NG_FOR_MISSING_DIFFER */, errorMessage);\n          }\n        } else {\n          // CAUTION: this logic is duplicated for development mode above, as the try-catch\n          // is only present in development builds.\n          this._differ = this._differs.find(value).create(this.ngForTrackBy);\n        }\n      }\n    }\n    if (this._differ) {\n      const changes = this._differ.diff(this._ngForOf);\n      if (changes) this._applyChanges(changes);\n    }\n  }\n  _applyChanges(changes) {\n    const viewContainer = this._viewContainer;\n    changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n      if (item.previousIndex == null) {\n        // NgForOf is never \"null\" or \"undefined\" here because the differ detected\n        // that a new item needs to be inserted from the iterable. This implies that\n        // there is an iterable value for \"_ngForOf\".\n        viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);\n      } else if (currentIndex == null) {\n        viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);\n      } else if (adjustedPreviousIndex !== null) {\n        const view = viewContainer.get(adjustedPreviousIndex);\n        viewContainer.move(view, currentIndex);\n        applyViewChange(view, item);\n      }\n    });\n    for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {\n      const viewRef = viewContainer.get(i);\n      const context = viewRef.context;\n      context.index = i;\n      context.count = ilen;\n      context.ngForOf = this._ngForOf;\n    }\n    changes.forEachIdentityChange(record => {\n      const viewRef = viewContainer.get(record.currentIndex);\n      applyViewChange(viewRef, record);\n    });\n  }\n  /**\n   * Asserts the correct type of the context for the template that `NgForOf` will render.\n   *\n   * The presence of this method is a signal to the Ivy template type-check compiler that the\n   * `NgForOf` structural directive renders its template with a specific context type.\n   */\n  static ngTemplateContextGuard(dir, ctx) {\n    return true;\n  }\n  static ɵfac = function NgForOf_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgForOf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgForOf,\n    selectors: [[\"\", \"ngFor\", \"\", \"ngForOf\", \"\"]],\n    inputs: {\n      ngForOf: \"ngForOf\",\n      ngForTrackBy: \"ngForTrackBy\",\n      ngForTemplate: \"ngForTemplate\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgForOf, [{\n    type: Directive,\n    args: [{\n      selector: '[ngFor][ngForOf]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: i0.IterableDiffers\n  }], {\n    ngForOf: [{\n      type: Input\n    }],\n    ngForTrackBy: [{\n      type: Input\n    }],\n    ngForTemplate: [{\n      type: Input\n    }]\n  });\n})();\nfunction applyViewChange(view, record) {\n  view.context.$implicit = record.item;\n}\nfunction getTypeName(type) {\n  return type['name'] || typeof type;\n}\n\n/**\n * A structural directive that conditionally includes a template based on the value of\n * an expression coerced to Boolean.\n * When the expression evaluates to true, Angular renders the template\n * provided in a `then` clause, and when  false or null,\n * Angular renders the template provided in an optional `else` clause. The default\n * template for the `else` clause is blank.\n *\n * A [shorthand form](guide/directives/structural-directives#asterisk) of the directive,\n * `*ngIf=\"condition\"`, is generally used, provided\n * as an attribute of the anchor element for the inserted template.\n * Angular expands this into a more explicit version, in which the anchor element\n * is contained in an `<ng-template>` element.\n *\n * Simple form with shorthand syntax:\n *\n * ```html\n * <div *ngIf=\"condition\">Content to render when condition is true.</div>\n * ```\n *\n * Simple form with expanded syntax:\n *\n * ```html\n * <ng-template [ngIf]=\"condition\"><div>Content to render when condition is\n * true.</div></ng-template>\n * ```\n *\n * Form with an \"else\" block:\n *\n * ```html\n * <div *ngIf=\"condition; else elseBlock\">Content to render when condition is true.</div>\n * <ng-template #elseBlock>Content to render when condition is false.</ng-template>\n * ```\n *\n * Shorthand form with \"then\" and \"else\" blocks:\n *\n * ```html\n * <div *ngIf=\"condition; then thenBlock else elseBlock\"></div>\n * <ng-template #thenBlock>Content to render when condition is true.</ng-template>\n * <ng-template #elseBlock>Content to render when condition is false.</ng-template>\n * ```\n *\n * Form with storing the value locally:\n *\n * ```html\n * <div *ngIf=\"condition as value; else elseBlock\">{{value}}</div>\n * <ng-template #elseBlock>Content to render when value is null.</ng-template>\n * ```\n *\n * @usageNotes\n *\n * The `*ngIf` directive is most commonly used to conditionally show an inline template,\n * as seen in the following  example.\n * The default `else` template is blank.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ### Showing an alternative template using `else`\n *\n * To display a template when `expression` evaluates to false, use an `else` template\n * binding as shown in the following example.\n * The `else` binding points to an `<ng-template>`  element labeled `#elseBlock`.\n * The template can be defined anywhere in the component view, but is typically placed right after\n * `ngIf` for readability.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfElse'}\n *\n * ### Using an external `then` template\n *\n * In the previous example, the then-clause template is specified inline, as the content of the\n * tag that contains the `ngIf` directive. You can also specify a template that is defined\n * externally, by referencing a labeled `<ng-template>` element. When you do this, you can\n * change which template to use at runtime, as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ### Storing a conditional result in a variable\n *\n * You might want to show a set of properties from the same object. If you are waiting\n * for asynchronous data, the object can be undefined.\n * In this case, you can use `ngIf` and store the result of the condition in a local\n * variable as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * This code uses only one `AsyncPipe`, so only one subscription is created.\n * The conditional statement stores the result of `userStream|async` in the local variable `user`.\n * You can then bind the local `user` repeatedly.\n *\n * The conditional displays the data only if `userStream` returns a value,\n * so you don't need to use the\n * safe-navigation-operator (`?.`)\n * to guard against null values when accessing properties.\n * You can display an alternative template while waiting for the data.\n *\n * ### Shorthand syntax\n *\n * The shorthand syntax `*ngIf` expands into two separate template specifications\n * for the \"then\" and \"else\" clauses. For example, consider the following shorthand statement,\n * that is meant to show a loading page while waiting for data to be loaded.\n *\n * ```html\n * <div class=\"hero-list\" *ngIf=\"heroes else loading\">\n *  ...\n * </div>\n *\n * <ng-template #loading>\n *  <div>Loading...</div>\n * </ng-template>\n * ```\n *\n * You can see that the \"else\" clause references the `<ng-template>`\n * with the `#loading` label, and the template for the \"then\" clause\n * is provided as the content of the anchor element.\n *\n * However, when Angular expands the shorthand syntax, it creates\n * another `<ng-template>` tag, with `ngIf` and `ngIfElse` directives.\n * The anchor element containing the template for the \"then\" clause becomes\n * the content of this unlabeled `<ng-template>` tag.\n *\n * ```html\n * <ng-template [ngIf]=\"heroes\" [ngIfElse]=\"loading\">\n *  <div class=\"hero-list\">\n *   ...\n *  </div>\n * </ng-template>\n *\n * <ng-template #loading>\n *  <div>Loading...</div>\n * </ng-template>\n * ```\n *\n * The presence of the implicit template object has implications for the nesting of\n * structural directives. For more on this subject, see\n * [Structural Directives](guide/directives/structural-directives#one-per-element).\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgIf {\n  _viewContainer;\n  _context = new NgIfContext();\n  _thenTemplateRef = null;\n  _elseTemplateRef = null;\n  _thenViewRef = null;\n  _elseViewRef = null;\n  constructor(_viewContainer, templateRef) {\n    this._viewContainer = _viewContainer;\n    this._thenTemplateRef = templateRef;\n  }\n  /**\n   * The Boolean expression to evaluate as the condition for showing a template.\n   */\n  set ngIf(condition) {\n    this._context.$implicit = this._context.ngIf = condition;\n    this._updateView();\n  }\n  /**\n   * A template to show if the condition expression evaluates to true.\n   */\n  set ngIfThen(templateRef) {\n    assertTemplate('ngIfThen', templateRef);\n    this._thenTemplateRef = templateRef;\n    this._thenViewRef = null; // clear previous view if any.\n    this._updateView();\n  }\n  /**\n   * A template to show if the condition expression evaluates to false.\n   */\n  set ngIfElse(templateRef) {\n    assertTemplate('ngIfElse', templateRef);\n    this._elseTemplateRef = templateRef;\n    this._elseViewRef = null; // clear previous view if any.\n    this._updateView();\n  }\n  _updateView() {\n    if (this._context.$implicit) {\n      if (!this._thenViewRef) {\n        this._viewContainer.clear();\n        this._elseViewRef = null;\n        if (this._thenTemplateRef) {\n          this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n        }\n      }\n    } else {\n      if (!this._elseViewRef) {\n        this._viewContainer.clear();\n        this._thenViewRef = null;\n        if (this._elseTemplateRef) {\n          this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n        }\n      }\n    }\n  }\n  /** @internal */\n  static ngIfUseIfTypeGuard;\n  /**\n   * Assert the correct type of the expression bound to the `ngIf` input within the template.\n   *\n   * The presence of this static field is a signal to the Ivy template type check compiler that\n   * when the `NgIf` structural directive renders its template, the type of the expression bound\n   * to `ngIf` should be narrowed in some way. For `NgIf`, the binding expression itself is used to\n   * narrow its type, which allows the strictNullChecks feature of TypeScript to work with `NgIf`.\n   */\n  static ngTemplateGuard_ngIf;\n  /**\n   * Asserts the correct type of the context for the template that `NgIf` will render.\n   *\n   * The presence of this method is a signal to the Ivy template type-check compiler that the\n   * `NgIf` structural directive renders its template with a specific context type.\n   */\n  static ngTemplateContextGuard(dir, ctx) {\n    return true;\n  }\n  static ɵfac = function NgIf_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgIf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgIf,\n    selectors: [[\"\", \"ngIf\", \"\"]],\n    inputs: {\n      ngIf: \"ngIf\",\n      ngIfThen: \"ngIfThen\",\n      ngIfElse: \"ngIfElse\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgIf, [{\n    type: Directive,\n    args: [{\n      selector: '[ngIf]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }], {\n    ngIf: [{\n      type: Input\n    }],\n    ngIfThen: [{\n      type: Input\n    }],\n    ngIfElse: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @publicApi\n */\nclass NgIfContext {\n  $implicit = null;\n  ngIf = null;\n}\nfunction assertTemplate(property, templateRef) {\n  const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n  if (!isTemplateRefOrNull) {\n    throw new Error(`${property} must be a TemplateRef, but received '${ɵstringify(templateRef)}'.`);\n  }\n}\nclass SwitchView {\n  _viewContainerRef;\n  _templateRef;\n  _created = false;\n  constructor(_viewContainerRef, _templateRef) {\n    this._viewContainerRef = _viewContainerRef;\n    this._templateRef = _templateRef;\n  }\n  create() {\n    this._created = true;\n    this._viewContainerRef.createEmbeddedView(this._templateRef);\n  }\n  destroy() {\n    this._created = false;\n    this._viewContainerRef.clear();\n  }\n  enforceState(created) {\n    if (created && !this._created) {\n      this.create();\n    } else if (!created && this._created) {\n      this.destroy();\n    }\n  }\n}\n/**\n * @ngModule CommonModule\n *\n * @description\n * The `[ngSwitch]` directive on a container specifies an expression to match against.\n * The expressions to match are provided by `ngSwitchCase` directives on views within the container.\n * - Every view that matches is rendered.\n * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered.\n * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase`\n * or `ngSwitchDefault` directive are preserved at the location.\n *\n * @usageNotes\n * Define a container element for the directive, and specify the switch expression\n * to match against as an attribute:\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n * ```\n *\n * Within the container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *    <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * ...\n *    <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * ### Usage Examples\n *\n * The following example shows how to use more than one case to display the same view:\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <!-- the same view can be shown in more than one case -->\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *   <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *   <!--default case when there are no matches -->\n *   <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * The following example shows how cases can be nested:\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *       <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *       <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *       <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *       <ng-container *ngSwitchCase=\"match_expression_3\">\n *         <!-- use a ng-container to group multiple root nodes -->\n *         <inner-element></inner-element>\n *         <inner-other-element></inner-other-element>\n *       </ng-container>\n *       <some-element *ngSwitchDefault>...</some-element>\n *     </container-element>\n * ```\n *\n * @publicApi\n * @see {@link NgSwitchCase}\n * @see {@link NgSwitchDefault}\n * @see [Structural Directives](guide/directives/structural-directives)\n *\n */\nclass NgSwitch {\n  _defaultViews = [];\n  _defaultUsed = false;\n  _caseCount = 0;\n  _lastCaseCheckIndex = 0;\n  _lastCasesMatched = false;\n  _ngSwitch;\n  set ngSwitch(newValue) {\n    this._ngSwitch = newValue;\n    if (this._caseCount === 0) {\n      this._updateDefaultCases(true);\n    }\n  }\n  /** @internal */\n  _addCase() {\n    return this._caseCount++;\n  }\n  /** @internal */\n  _addDefault(view) {\n    this._defaultViews.push(view);\n  }\n  /** @internal */\n  _matchCase(value) {\n    const matched = value === this._ngSwitch;\n    this._lastCasesMatched ||= matched;\n    this._lastCaseCheckIndex++;\n    if (this._lastCaseCheckIndex === this._caseCount) {\n      this._updateDefaultCases(!this._lastCasesMatched);\n      this._lastCaseCheckIndex = 0;\n      this._lastCasesMatched = false;\n    }\n    return matched;\n  }\n  _updateDefaultCases(useDefault) {\n    if (this._defaultViews.length > 0 && useDefault !== this._defaultUsed) {\n      this._defaultUsed = useDefault;\n      for (const defaultView of this._defaultViews) {\n        defaultView.enforceState(useDefault);\n      }\n    }\n  }\n  static ɵfac = function NgSwitch_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitch)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitch,\n    selectors: [[\"\", \"ngSwitch\", \"\"]],\n    inputs: {\n      ngSwitch: \"ngSwitch\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitch, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitch]'\n    }]\n  }], null, {\n    ngSwitch: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n * Provides a switch case expression to match against an enclosing `ngSwitch` expression.\n * When the expressions match, the given `NgSwitchCase` template is rendered.\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * @usageNotes\n *\n * Within a switch container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```html\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   ...\n *   <some-element *ngSwitchDefault>...</some-element>\n * </container-element>\n * ```\n *\n * Each switch-case statement contains an in-line HTML template or template reference\n * that defines the subtree to be selected if the value of the match expression\n * matches the value of the switch expression.\n *\n * As of Angular v17 the NgSwitch directive uses strict equality comparison (`===`) instead of\n * loose equality (`==`) to match different cases.\n *\n * @publicApi\n * @see {@link NgSwitch}\n * @see {@link NgSwitchDefault}\n *\n */\nclass NgSwitchCase {\n  ngSwitch;\n  _view;\n  /**\n   * Stores the HTML template to be selected on match.\n   */\n  ngSwitchCase;\n  constructor(viewContainer, templateRef, ngSwitch) {\n    this.ngSwitch = ngSwitch;\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n      throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');\n    }\n    ngSwitch._addCase();\n    this._view = new SwitchView(viewContainer, templateRef);\n  }\n  /**\n   * Performs case matching. For internal use only.\n   * @nodoc\n   */\n  ngDoCheck() {\n    this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));\n  }\n  static ɵfac = function NgSwitchCase_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitchCase)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitchCase,\n    selectors: [[\"\", \"ngSwitchCase\", \"\"]],\n    inputs: {\n      ngSwitchCase: \"ngSwitchCase\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitchCase, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitchCase]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: NgSwitch,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Host\n    }]\n  }], {\n    ngSwitchCase: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that is rendered when no `NgSwitchCase` expressions\n * match the `NgSwitch` expression.\n * This statement should be the final case in an `NgSwitch`.\n *\n * @publicApi\n * @see {@link NgSwitch}\n * @see {@link NgSwitchCase}\n *\n */\nclass NgSwitchDefault {\n  constructor(viewContainer, templateRef, ngSwitch) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n      throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');\n    }\n    ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n  }\n  static ɵfac = function NgSwitchDefault_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgSwitchDefault)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(NgSwitch, 9));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgSwitchDefault,\n    selectors: [[\"\", \"ngSwitchDefault\", \"\"]]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgSwitchDefault, [{\n    type: Directive,\n    args: [{\n      selector: '[ngSwitchDefault]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: NgSwitch,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Host\n    }]\n  }], null);\n})();\nfunction throwNgSwitchProviderNotFoundError(attrName, directiveName) {\n  throw new ɵRuntimeError(2000 /* RuntimeErrorCode.PARENT_NG_SWITCH_NOT_FOUND */, `An element with the \"${attrName}\" attribute ` + `(matching the \"${directiveName}\" directive) must be located inside an element with the \"ngSwitch\" attribute ` + `(matching \"NgSwitch\" directive)`);\n}\nfunction stringifyValue(value) {\n  return typeof value === 'string' ? `'${value}'` : String(value);\n}\n\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n * ```html\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">there is nothing</ng-template>\n *   <ng-template ngPluralCase=\"=1\">there is one</ng-template>\n *   <ng-template ngPluralCase=\"few\">there are a few</ng-template>\n * </some-element>\n * ```\n *\n * @description\n *\n * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n *\n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n *   matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n *   value matches aren't found and the value maps to its category for the defined locale.\n *\n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n *\n * @publicApi\n */\nclass NgPlural {\n  _localization;\n  _activeView;\n  _caseViews = {};\n  constructor(_localization) {\n    this._localization = _localization;\n  }\n  set ngPlural(value) {\n    this._updateView(value);\n  }\n  addCase(value, switchView) {\n    this._caseViews[value] = switchView;\n  }\n  _updateView(switchValue) {\n    this._clearViews();\n    const cases = Object.keys(this._caseViews);\n    const key = getPluralCategory(switchValue, cases, this._localization);\n    this._activateView(this._caseViews[key]);\n  }\n  _clearViews() {\n    if (this._activeView) this._activeView.destroy();\n  }\n  _activateView(view) {\n    if (view) {\n      this._activeView = view;\n      this._activeView.create();\n    }\n  }\n  static ɵfac = function NgPlural_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgPlural)(i0.ɵɵdirectiveInject(NgLocalization));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgPlural,\n    selectors: [[\"\", \"ngPlural\", \"\"]],\n    inputs: {\n      ngPlural: \"ngPlural\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgPlural, [{\n    type: Directive,\n    args: [{\n      selector: '[ngPlural]'\n    }]\n  }], () => [{\n    type: NgLocalization\n  }], {\n    ngPlural: [{\n      type: Input\n    }]\n  });\n})();\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that will be added/removed from the parent {@link NgPlural} when the\n * given expression matches the plural expression according to CLDR rules.\n *\n * @usageNotes\n * ```html\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">...</ng-template>\n *   <ng-template ngPluralCase=\"other\">...</ng-template>\n * </some-element>\n *```\n *\n * See {@link NgPlural} for more details and example.\n *\n * @publicApi\n */\nclass NgPluralCase {\n  value;\n  constructor(value, template, viewContainer, ngPlural) {\n    this.value = value;\n    const isANumber = !isNaN(Number(value));\n    ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n  }\n  static ɵfac = function NgPluralCase_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgPluralCase)(i0.ɵɵinjectAttribute('ngPluralCase'), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(NgPlural, 1));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgPluralCase,\n    selectors: [[\"\", \"ngPluralCase\", \"\"]]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgPluralCase, [{\n    type: Directive,\n    args: [{\n      selector: '[ngPluralCase]'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Attribute,\n      args: ['ngPluralCase']\n    }]\n  }, {\n    type: i0.TemplateRef\n  }, {\n    type: i0.ViewContainerRef\n  }, {\n    type: NgPlural,\n    decorators: [{\n      type: Host\n    }]\n  }], null);\n})();\n\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n *\n * Set the font of the containing element to the result of an expression.\n *\n * ```html\n * <some-element [ngStyle]=\"{'font-style': styleExp}\">...</some-element>\n * ```\n *\n * Set the width of the containing element to a pixel value returned by an expression.\n *\n * ```html\n * <some-element [ngStyle]=\"{'max-width.px': widthExp}\">...</some-element>\n * ```\n *\n * Set a collection of style values using an expression that returns key-value pairs.\n *\n * ```html\n * <some-element [ngStyle]=\"objExp\">...</some-element>\n * ```\n *\n * @description\n *\n * An attribute directive that updates styles for the containing HTML element.\n * Sets one or more style properties, specified as colon-separated key-value pairs.\n * The key is a style name, with an optional `.<unit>` suffix\n * (such as 'top.px', 'font-style.em').\n * The value is an expression to be evaluated.\n * The resulting non-null value, expressed in the given unit,\n * is assigned to the given style property.\n * If the result of evaluation is null, the corresponding style is removed.\n *\n * @publicApi\n */\nclass NgStyle {\n  _ngEl;\n  _differs;\n  _renderer;\n  _ngStyle = null;\n  _differ = null;\n  constructor(_ngEl, _differs, _renderer) {\n    this._ngEl = _ngEl;\n    this._differs = _differs;\n    this._renderer = _renderer;\n  }\n  set ngStyle(values) {\n    this._ngStyle = values;\n    if (!this._differ && values) {\n      this._differ = this._differs.find(values).create();\n    }\n  }\n  ngDoCheck() {\n    if (this._differ) {\n      const changes = this._differ.diff(this._ngStyle);\n      if (changes) {\n        this._applyChanges(changes);\n      }\n    }\n  }\n  _setStyle(nameAndUnit, value) {\n    const [name, unit] = nameAndUnit.split('.');\n    const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n    if (value != null) {\n      this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);\n    } else {\n      this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);\n    }\n  }\n  _applyChanges(changes) {\n    changes.forEachRemovedItem(record => this._setStyle(record.key, null));\n    changes.forEachAddedItem(record => this._setStyle(record.key, record.currentValue));\n    changes.forEachChangedItem(record => this._setStyle(record.key, record.currentValue));\n  }\n  static ɵfac = function NgStyle_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgStyle)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.KeyValueDiffers), i0.ɵɵdirectiveInject(i0.Renderer2));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgStyle,\n    selectors: [[\"\", \"ngStyle\", \"\"]],\n    inputs: {\n      ngStyle: \"ngStyle\"\n    }\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgStyle, [{\n    type: Directive,\n    args: [{\n      selector: '[ngStyle]'\n    }]\n  }], () => [{\n    type: i0.ElementRef\n  }, {\n    type: i0.KeyValueDiffers\n  }, {\n    type: i0.Renderer2\n  }], {\n    ngStyle: [{\n      type: Input,\n      args: ['ngStyle']\n    }]\n  });\n})();\n\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Inserts an embedded view from a prepared `TemplateRef`.\n *\n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n *\n * @usageNotes\n * ```html\n * <ng-container *ngTemplateOutlet=\"templateRefExp; context: contextExp\"></ng-container>\n * ```\n *\n * Using the key `$implicit` in the context object will set its value as default.\n *\n * ### Example\n *\n * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n *\n * @publicApi\n */\nclass NgTemplateOutlet {\n  _viewContainerRef;\n  _viewRef = null;\n  /**\n   * A context object to attach to the {@link EmbeddedViewRef}. This should be an\n   * object, the object's keys will be available for binding by the local template `let`\n   * declarations.\n   * Using the key `$implicit` in the context object will set its value as default.\n   */\n  ngTemplateOutletContext = null;\n  /**\n   * A string defining the template reference and optionally the context object for the template.\n   */\n  ngTemplateOutlet = null;\n  /** Injector to be used within the embedded view. */\n  ngTemplateOutletInjector = null;\n  constructor(_viewContainerRef) {\n    this._viewContainerRef = _viewContainerRef;\n  }\n  ngOnChanges(changes) {\n    if (this._shouldRecreateView(changes)) {\n      const viewContainerRef = this._viewContainerRef;\n      if (this._viewRef) {\n        viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n      }\n      // If there is no outlet, clear the destroyed view ref.\n      if (!this.ngTemplateOutlet) {\n        this._viewRef = null;\n        return;\n      }\n      // Create a context forward `Proxy` that will always bind to the user-specified context,\n      // without having to destroy and re-create views whenever the context changes.\n      const viewContext = this._createContextForwardProxy();\n      this._viewRef = viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, viewContext, {\n        injector: this.ngTemplateOutletInjector ?? undefined\n      });\n    }\n  }\n  /**\n   * We need to re-create existing embedded view if either is true:\n   * - the outlet changed.\n   * - the injector changed.\n   */\n  _shouldRecreateView(changes) {\n    return !!changes['ngTemplateOutlet'] || !!changes['ngTemplateOutletInjector'];\n  }\n  /**\n   * For a given outlet instance, we create a proxy object that delegates\n   * to the user-specified context. This allows changing, or swapping out\n   * the context object completely without having to destroy/re-create the view.\n   */\n  _createContextForwardProxy() {\n    return new Proxy({}, {\n      set: (_target, prop, newValue) => {\n        if (!this.ngTemplateOutletContext) {\n          return false;\n        }\n        return Reflect.set(this.ngTemplateOutletContext, prop, newValue);\n      },\n      get: (_target, prop, receiver) => {\n        if (!this.ngTemplateOutletContext) {\n          return undefined;\n        }\n        return Reflect.get(this.ngTemplateOutletContext, prop, receiver);\n      }\n    });\n  }\n  static ɵfac = function NgTemplateOutlet_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgTemplateOutlet)(i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgTemplateOutlet,\n    selectors: [[\"\", \"ngTemplateOutlet\", \"\"]],\n    inputs: {\n      ngTemplateOutletContext: \"ngTemplateOutletContext\",\n      ngTemplateOutlet: \"ngTemplateOutlet\",\n      ngTemplateOutletInjector: \"ngTemplateOutletInjector\"\n    },\n    features: [i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgTemplateOutlet, [{\n    type: Directive,\n    args: [{\n      selector: '[ngTemplateOutlet]'\n    }]\n  }], () => [{\n    type: i0.ViewContainerRef\n  }], {\n    ngTemplateOutletContext: [{\n      type: Input\n    }],\n    ngTemplateOutlet: [{\n      type: Input\n    }],\n    ngTemplateOutletInjector: [{\n      type: Input\n    }]\n  });\n})();\n\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nconst COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];\nfunction invalidPipeArgumentError(type, value) {\n  return new ɵRuntimeError(2100 /* RuntimeErrorCode.INVALID_PIPE_ARGUMENT */, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${ɵstringify(type)}'`);\n}\nclass SubscribableStrategy {\n  createSubscription(async, updateLatestValue) {\n    // Subscription can be side-effectful, and we don't want any signal reads which happen in the\n    // side effect of the subscription to be tracked by a component's template when that\n    // subscription is triggered via the async pipe. So we wrap the subscription in `untracked` to\n    // decouple from the current reactive context.\n    //\n    // `untracked` also prevents signal _writes_ which happen in the subscription side effect from\n    // being treated as signal writes during the template evaluation (which throws errors).\n    return untracked(() => async.subscribe({\n      next: updateLatestValue,\n      error: e => {\n        throw e;\n      }\n    }));\n  }\n  dispose(subscription) {\n    // See the comment in `createSubscription` above on the use of `untracked`.\n    untracked(() => subscription.unsubscribe());\n  }\n}\nclass PromiseStrategy {\n  createSubscription(async, updateLatestValue) {\n    return async.then(updateLatestValue, e => {\n      throw e;\n    });\n  }\n  dispose(subscription) {}\n}\nconst _promiseStrategy = new PromiseStrategy();\nconst _subscribableStrategy = new SubscribableStrategy();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Unwraps a value from an asynchronous primitive.\n *\n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks. When the reference of the expression changes, the `async` pipe\n * automatically unsubscribes from the old `Observable` or `Promise` and subscribes to the new one.\n *\n * @usageNotes\n *\n * ### Examples\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n *\n * @publicApi\n */\nclass AsyncPipe {\n  _ref;\n  _latestValue = null;\n  markForCheckOnValueUpdate = true;\n  _subscription = null;\n  _obj = null;\n  _strategy = null;\n  constructor(ref) {\n    // Assign `ref` into `this._ref` manually instead of declaring `_ref` in the constructor\n    // parameter list, as the type of `this._ref` includes `null` unlike the type of `ref`.\n    this._ref = ref;\n  }\n  ngOnDestroy() {\n    if (this._subscription) {\n      this._dispose();\n    }\n    // Clear the `ChangeDetectorRef` and its association with the view data, to mitigate\n    // potential memory leaks in Observables that could otherwise cause the view data to\n    // be retained.\n    // https://github.com/angular/angular/issues/17624\n    this._ref = null;\n  }\n  transform(obj) {\n    if (!this._obj) {\n      if (obj) {\n        try {\n          // Only call `markForCheck` if the value is updated asynchronously.\n          // Synchronous updates _during_ subscription should not wastefully mark for check -\n          // this value is already going to be returned from the transform function.\n          this.markForCheckOnValueUpdate = false;\n          this._subscribe(obj);\n        } finally {\n          this.markForCheckOnValueUpdate = true;\n        }\n      }\n      return this._latestValue;\n    }\n    if (obj !== this._obj) {\n      this._dispose();\n      return this.transform(obj);\n    }\n    return this._latestValue;\n  }\n  _subscribe(obj) {\n    this._obj = obj;\n    this._strategy = this._selectStrategy(obj);\n    this._subscription = this._strategy.createSubscription(obj, value => this._updateLatestValue(obj, value));\n  }\n  _selectStrategy(obj) {\n    if (ɵisPromise(obj)) {\n      return _promiseStrategy;\n    }\n    if (ɵisSubscribable(obj)) {\n      return _subscribableStrategy;\n    }\n    throw invalidPipeArgumentError(AsyncPipe, obj);\n  }\n  _dispose() {\n    // Note: `dispose` is only called if a subscription has been initialized before, indicating\n    // that `this._strategy` is also available.\n    this._strategy.dispose(this._subscription);\n    this._latestValue = null;\n    this._subscription = null;\n    this._obj = null;\n  }\n  _updateLatestValue(async, value) {\n    if (async === this._obj) {\n      this._latestValue = value;\n      if (this.markForCheckOnValueUpdate) {\n        this._ref?.markForCheck();\n      }\n    }\n  }\n  static ɵfac = function AsyncPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || AsyncPipe)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"async\",\n    type: AsyncPipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(AsyncPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'async',\n      pure: false\n    }]\n  }], () => [{\n    type: i0.ChangeDetectorRef\n  }], null);\n})();\n\n/**\n * Transforms text to all lower case.\n *\n * @see {@link UpperCasePipe}\n * @see {@link TitleCasePipe}\n * @usageNotes\n *\n * The following example defines a view that allows the user to enter\n * text, and then uses the pipe to convert the input text to all lower case.\n *\n * {@example common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe'}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass LowerCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(LowerCasePipe, value);\n    }\n    return value.toLowerCase();\n  }\n  static ɵfac = function LowerCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LowerCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"lowercase\",\n    type: LowerCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LowerCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'lowercase'\n    }]\n  }], null, null);\n})();\n//\n// Regex below matches any Unicode word and number compatible with ES5. In ES2018 the same result\n// can be achieved by using /[0-9\\p{L}]\\S*/gu and also known as Unicode Property Escapes\n// (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no\n// transpilation of this functionality down to ES5 without external tool, the only solution is\n// to use already transpiled form. Example can be found here -\n// https://mothereff.in/regexpu#input=var+regex+%3D+%2F%5B0-9%5Cp%7BL%7D%5D%5CS*%2Fgu%3B%0A%0A&unicodePropertyEscape=1\n//\nconst unicodeWordMatch = /(?:[0-9A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])\\S*/g;\n/**\n * Transforms text to title case.\n * Capitalizes the first letter of each word and transforms the\n * rest of the word to lower case.\n * Words are delimited by any whitespace character, such as a space, tab, or line-feed character.\n *\n * @see {@link LowerCasePipe}\n * @see {@link UpperCasePipe}\n *\n * @usageNotes\n * The following example shows the result of transforming various strings into title case.\n *\n * {@example common/pipes/ts/titlecase_pipe.ts region='TitleCasePipe'}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass TitleCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(TitleCasePipe, value);\n    }\n    return value.replace(unicodeWordMatch, txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase());\n  }\n  static ɵfac = function TitleCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || TitleCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"titlecase\",\n    type: TitleCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TitleCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'titlecase'\n    }]\n  }], null, null);\n})();\n/**\n * Transforms text to all upper case.\n * @see {@link LowerCasePipe}\n * @see {@link TitleCasePipe}\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass UpperCasePipe {\n  transform(value) {\n    if (value == null) return null;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(UpperCasePipe, value);\n    }\n    return value.toUpperCase();\n  }\n  static ɵfac = function UpperCasePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || UpperCasePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"uppercase\",\n    type: UpperCasePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(UpperCasePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'uppercase'\n    }]\n  }], null, null);\n})();\n\n/**\n * The default date format of Angular date pipe, which corresponds to the following format:\n * `'MMM d,y'` (e.g. `Jun 15, 2015`)\n */\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\n\n/**\n * Optionally-provided default timezone to use for all instances of `DatePipe` (such as `'+0430'`).\n * If the value isn't provided, the `DatePipe` will use the end-user's local system timezone.\n *\n * @deprecated use DATE_PIPE_DEFAULT_OPTIONS token to configure DatePipe\n */\nconst DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken(ngDevMode ? 'DATE_PIPE_DEFAULT_TIMEZONE' : '');\n/**\n * DI token that allows to provide default configuration for the `DatePipe` instances in an\n * application. The value is an object which can include the following fields:\n * - `dateFormat`: configures the default date format. If not provided, the `DatePipe`\n * will use the 'mediumDate' as a value.\n * - `timezone`: configures the default timezone. If not provided, the `DatePipe` will\n * use the end-user's local system timezone.\n *\n * @see {@link DatePipeConfig}\n *\n * @usageNotes\n *\n * Various date pipe default values can be overwritten by providing this token with\n * the value that has this interface.\n *\n * For example:\n *\n * Override the default date format by providing a value using the token:\n * ```ts\n * providers: [\n *   {provide: DATE_PIPE_DEFAULT_OPTIONS, useValue: {dateFormat: 'shortDate'}}\n * ]\n * ```\n *\n * Override the default timezone by providing a value using the token:\n * ```ts\n * providers: [\n *   {provide: DATE_PIPE_DEFAULT_OPTIONS, useValue: {timezone: '-1200'}}\n * ]\n * ```\n */\nconst DATE_PIPE_DEFAULT_OPTIONS = new InjectionToken(ngDevMode ? 'DATE_PIPE_DEFAULT_OPTIONS' : '');\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a date value according to locale rules.\n *\n * `DatePipe` is executed only when it detects a pure change to the input value.\n * A pure change is either a change to a primitive input value\n * (such as `String`, `Number`, `Boolean`, or `Symbol`),\n * or a changed object reference (such as `Date`, `Array`, `Function`, or `Object`).\n *\n * Note that mutating a `Date` object does not cause the pipe to be rendered again.\n * To ensure that the pipe is executed, you must create a new `Date` object.\n *\n * Only the `en-US` locale data comes with Angular. To localize dates\n * in another language, you must import the corresponding locale data.\n * See the [I18n guide](guide/i18n/format-data-locale) for more information.\n *\n * The time zone of the formatted value can be specified either by passing it in as the second\n * parameter of the pipe, or by setting the default through the `DATE_PIPE_DEFAULT_OPTIONS`\n * injection token. The value that is passed in as the second parameter takes precedence over\n * the one defined using the injection token.\n *\n * @see {@link formatDate}\n *\n *\n * @usageNotes\n *\n * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to\n * reformat the date on every change-detection cycle, treat the date as an immutable object\n * and change the reference when the pipe needs to run again.\n *\n * ### Pre-defined format options\n *\n * | Option        | Equivalent to                       | Examples (given in `en-US` locale)              |\n * |---------------|-------------------------------------|-------------------------------------------------|\n * | `'short'`     | `'M/d/yy, h:mm a'`                  | `6/15/15, 9:03 AM`                              |\n * | `'medium'`    | `'MMM d, y, h:mm:ss a'`             | `Jun 15, 2015, 9:03:01 AM`                      |\n * | `'long'`      | `'MMMM d, y, h:mm:ss a z'`          | `June 15, 2015 at 9:03:01 AM GMT+1`             |\n * | `'full'`      | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` |\n * | `'shortDate'` | `'M/d/yy'`                          | `6/15/15`                                       |\n * | `'mediumDate'`| `'MMM d, y'`                        | `Jun 15, 2015`                                  |\n * | `'longDate'`  | `'MMMM d, y'`                       | `June 15, 2015`                                 |\n * | `'fullDate'`  | `'EEEE, MMMM d, y'`                 | `Monday, June 15, 2015`                         |\n * | `'shortTime'` | `'h:mm a'`                          | `9:03 AM`                                       |\n * | `'mediumTime'`| `'h:mm:ss a'`                       | `9:03:01 AM`                                    |\n * | `'longTime'`  | `'h:mm:ss a z'`                     | `9:03:01 AM GMT+1`                              |\n * | `'fullTime'`  | `'h:mm:ss a zzzz'`                  | `9:03:01 AM GMT+01:00`                          |\n *\n * ### Custom format options\n *\n * You can construct a format string using symbols to specify the components\n * of a date-time value, as described in the following table.\n * Format details depend on the locale.\n * Fields marked with (*) are only available in the extra data set for the given locale.\n *\n *  | Field type              | Format      | Description                                                   | Example Value                                              |\n *  |-------------------------|-------------|---------------------------------------------------------------|------------------------------------------------------------|\n *  | Era                     | G, GG & GGG | Abbreviated                                                   | AD                                                         |\n *  |                         | GGGG        | Wide                                                          | Anno Domini                                                |\n *  |                         | GGGGG       | Narrow                                                        | A                                                          |\n *  | Year                    | y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |\n *  |                         | yy          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |\n *  |                         | yyy         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |\n *  |                         | yyyy        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |\n *  | ISO Week-numbering year | Y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |\n *  |                         | YY          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |\n *  |                         | YYY         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |\n *  |                         | YYYY        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |\n *  | Month                   | M           | Numeric: 1 digit                                              | 9, 12                                                      |\n *  |                         | MM          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |\n *  |                         | MMM         | Abbreviated                                                   | Sep                                                        |\n *  |                         | MMMM        | Wide                                                          | September                                                  |\n *  |                         | MMMMM       | Narrow                                                        | S                                                          |\n *  | Month standalone        | L           | Numeric: 1 digit                                              | 9, 12                                                      |\n *  |                         | LL          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |\n *  |                         | LLL         | Abbreviated                                                   | Sep                                                        |\n *  |                         | LLLL        | Wide                                                          | September                                                  |\n *  |                         | LLLLL       | Narrow                                                        | S                                                          |\n *  | ISO Week of year        | w           | Numeric: minimum digits                                       | 1... 53                                                    |\n *  |                         | ww          | Numeric: 2 digits + zero padded                               | 01... 53                                                   |\n *  | Week of month           | W           | Numeric: 1 digit                                              | 1... 5                                                     |\n *  | Day of month            | d           | Numeric: minimum digits                                       | 1                                                          |\n *  |                         | dd          | Numeric: 2 digits + zero padded                               | 01                                                         |\n *  | Week day                | E, EE & EEE | Abbreviated                                                   | Tue                                                        |\n *  |                         | EEEE        | Wide                                                          | Tuesday                                                    |\n *  |                         | EEEEE       | Narrow                                                        | T                                                          |\n *  |                         | EEEEEE      | Short                                                         | Tu                                                         |\n *  | Week day standalone     | c, cc       | Numeric: 1 digit                                              | 2                                                          |\n *  |                         | ccc         | Abbreviated                                                   | Tue                                                        |\n *  |                         | cccc        | Wide                                                          | Tuesday                                                    |\n *  |                         | ccccc       | Narrow                                                        | T                                                          |\n *  |                         | cccccc      | Short                                                         | Tu                                                         |\n *  | Period                  | a, aa & aaa | Abbreviated                                                   | am/pm or AM/PM                                             |\n *  |                         | aaaa        | Wide (fallback to `a` when missing)                           | ante meridiem/post meridiem                                |\n *  |                         | aaaaa       | Narrow                                                        | a/p                                                        |\n *  | Period*                 | B, BB & BBB | Abbreviated                                                   | mid.                                                       |\n *  |                         | BBBB        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |\n *  |                         | BBBBB       | Narrow                                                        | md                                                         |\n *  | Period standalone*      | b, bb & bbb | Abbreviated                                                   | mid.                                                       |\n *  |                         | bbbb        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |\n *  |                         | bbbbb       | Narrow                                                        | md                                                         |\n *  | Hour 1-12               | h           | Numeric: minimum digits                                       | 1, 12                                                      |\n *  |                         | hh          | Numeric: 2 digits + zero padded                               | 01, 12                                                     |\n *  | Hour 0-23               | H           | Numeric: minimum digits                                       | 0, 23                                                      |\n *  |                         | HH          | Numeric: 2 digits + zero padded                               | 00, 23                                                     |\n *  | Minute                  | m           | Numeric: minimum digits                                       | 8, 59                                                      |\n *  |                         | mm          | Numeric: 2 digits + zero padded                               | 08, 59                                                     |\n *  | Second                  | s           | Numeric: minimum digits                                       | 0... 59                                                    |\n *  |                         | ss          | Numeric: 2 digits + zero padded                               | 00... 59                                                   |\n *  | Fractional seconds      | S           | Numeric: 1 digit                                              | 0... 9                                                     |\n *  |                         | SS          | Numeric: 2 digits + zero padded                               | 00... 99                                                   |\n *  |                         | SSS         | Numeric: 3 digits + zero padded (= milliseconds)              | 000... 999                                                 |\n *  | Zone                    | z, zz & zzz | Short specific non location format (fallback to O)            | GMT-8                                                      |\n *  |                         | zzzz        | Long specific non location format (fallback to OOOO)          | GMT-08:00                                                  |\n *  |                         | Z, ZZ & ZZZ | ISO8601 basic format                                          | -0800                                                      |\n *  |                         | ZZZZ        | Long localized GMT format                                     | GMT-8:00                                                   |\n *  |                         | ZZZZZ       | ISO8601 extended format + Z indicator for offset 0 (= XXXXX)  | -08:00                                                     |\n *  |                         | O, OO & OOO | Short localized GMT format                                    | GMT-8                                                      |\n *  |                         | OOOO        | Long localized GMT format                                     | GMT-08:00                                                  |\n *\n *\n * ### Format examples\n *\n * These examples transform a date into various formats,\n * assuming that `dateObj` is a JavaScript `Date` object for\n * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11,\n * given in the local time for the `en-US` locale.\n *\n * ```\n * {{ dateObj | date }}               // output is 'Jun 15, 2015'\n * {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\n * {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\n * {{ dateObj | date:'mm:ss' }}       // output is '43:11'\n * {{ dateObj | date:\"MMM dd, yyyy 'at' hh:mm a\" }}  // output is 'Jun 15, 2015 at 09:43 PM'\n * ```\n *\n * ### Usage example\n *\n * The following component uses a date pipe to display the current date in different formats.\n *\n * ```angular-ts\n * @Component({\n *  selector: 'date-pipe',\n *  template: `<div>\n *    <p>Today is {{today | date}}</p>\n *    <p>Or if you prefer, {{today | date:'fullDate'}}</p>\n *    <p>The time is {{today | date:'h:mm a z'}}</p>\n *  </div>`\n * })\n * // Get the current date and time as a date-time value.\n * export class DatePipeComponent {\n *   today: number = Date.now();\n * }\n * ```\n *\n * @publicApi\n */\nclass DatePipe {\n  locale;\n  defaultTimezone;\n  defaultOptions;\n  constructor(locale, defaultTimezone, defaultOptions) {\n    this.locale = locale;\n    this.defaultTimezone = defaultTimezone;\n    this.defaultOptions = defaultOptions;\n  }\n  transform(value, format, timezone, locale) {\n    if (value == null || value === '' || value !== value) return null;\n    try {\n      const _format = format ?? this.defaultOptions?.dateFormat ?? DEFAULT_DATE_FORMAT;\n      const _timezone = timezone ?? this.defaultOptions?.timezone ?? this.defaultTimezone ?? undefined;\n      return formatDate(value, _format, locale || this.locale, _timezone);\n    } catch (error) {\n      throw invalidPipeArgumentError(DatePipe, error.message);\n    }\n  }\n  static ɵfac = function DatePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DatePipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_TIMEZONE, 24), i0.ɵɵdirectiveInject(DATE_PIPE_DEFAULT_OPTIONS, 24));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"date\",\n    type: DatePipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DatePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'date'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DATE_PIPE_DEFAULT_TIMEZONE]\n    }, {\n      type: Optional\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DATE_PIPE_DEFAULT_OPTIONS]\n    }, {\n      type: Optional\n    }]\n  }], null);\n})();\nconst _INTERPOLATION_REGEXP = /#/g;\n/**\n * @ngModule CommonModule\n * @description\n *\n * Maps a value to a string that pluralizes the value according to locale rules.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * @publicApi\n */\nclass I18nPluralPipe {\n  _localization;\n  constructor(_localization) {\n    this._localization = _localization;\n  }\n  /**\n   * @param value the number to be formatted\n   * @param pluralMap an object that mimics the ICU format, see\n   * https://unicode-org.github.io/icu/userguide/format_parse/messages/.\n   * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by\n   * default).\n   */\n  transform(value, pluralMap, locale) {\n    if (value == null) return '';\n    if (typeof pluralMap !== 'object' || pluralMap === null) {\n      throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n    }\n    const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n    return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n  }\n  static ɵfac = function I18nPluralPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || I18nPluralPipe)(i0.ɵɵdirectiveInject(NgLocalization, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"i18nPlural\",\n    type: I18nPluralPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(I18nPluralPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'i18nPlural'\n    }]\n  }], () => [{\n    type: NgLocalization\n  }], null);\n})();\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Generic selector that displays the string that matches the current value.\n *\n * If none of the keys of the `mapping` match the `value`, then the content\n * of the `other` key is returned when present, otherwise an empty string is returned.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n * @publicApi\n */\nclass I18nSelectPipe {\n  /**\n   * @param value a string to be internationalized.\n   * @param mapping an object that indicates the text that should be displayed\n   * for different values of the provided `value`.\n   */\n  transform(value, mapping) {\n    if (value == null) return '';\n    if (typeof mapping !== 'object' || typeof value !== 'string') {\n      throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n    }\n    if (mapping.hasOwnProperty(value)) {\n      return mapping[value];\n    }\n    if (mapping.hasOwnProperty('other')) {\n      return mapping['other'];\n    }\n    return '';\n  }\n  static ɵfac = function I18nSelectPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || I18nSelectPipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"i18nSelect\",\n    type: I18nSelectPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(I18nSelectPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'i18nSelect'\n    }]\n  }], null, null);\n})();\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Converts a value into its JSON-format representation.  Useful for debugging.\n *\n * @usageNotes\n *\n * The following component uses a JSON pipe to convert an object\n * to JSON format, and displays the string in both formats for comparison.\n *\n * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * @publicApi\n */\nclass JsonPipe {\n  /**\n   * @param value A value of any type to convert into a JSON-format string.\n   */\n  transform(value) {\n    return JSON.stringify(value, null, 2);\n  }\n  static ɵfac = function JsonPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonPipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"json\",\n    type: JsonPipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'json',\n      pure: false\n    }]\n  }], null, null);\n})();\nfunction makeKeyValuePair(key, value) {\n  return {\n    key: key,\n    value: value\n  };\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms Object or Map into an array of key value pairs.\n *\n * The output array will be ordered by keys.\n * By default the comparator will be by Unicode point value.\n * You can optionally pass a compareFn if your keys are complex types.\n * Passing `null` as the compareFn will use natural ordering of the input.\n *\n * @usageNotes\n * ### Examples\n *\n * This examples show how an Object or a Map can be iterated by ngFor with the use of this\n * keyvalue pipe.\n *\n * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}\n *\n * @publicApi\n */\nclass KeyValuePipe {\n  differs;\n  constructor(differs) {\n    this.differs = differs;\n  }\n  differ;\n  keyValues = [];\n  compareFn = defaultComparator;\n  transform(input, compareFn = defaultComparator) {\n    if (!input || !(input instanceof Map) && typeof input !== 'object') {\n      return null;\n    }\n    // make a differ for whatever type we've been passed in\n    this.differ ??= this.differs.find(input).create();\n    const differChanges = this.differ.diff(input);\n    const compareFnChanged = compareFn !== this.compareFn;\n    if (differChanges) {\n      this.keyValues = [];\n      differChanges.forEachItem(r => {\n        this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));\n      });\n    }\n    if (differChanges || compareFnChanged) {\n      if (compareFn) {\n        this.keyValues.sort(compareFn);\n      }\n      this.compareFn = compareFn;\n    }\n    return this.keyValues;\n  }\n  static ɵfac = function KeyValuePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || KeyValuePipe)(i0.ɵɵdirectiveInject(i0.KeyValueDiffers, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"keyvalue\",\n    type: KeyValuePipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(KeyValuePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'keyvalue',\n      pure: false\n    }]\n  }], () => [{\n    type: i0.KeyValueDiffers\n  }], null);\n})();\nfunction defaultComparator(keyValueA, keyValueB) {\n  const a = keyValueA.key;\n  const b = keyValueB.key;\n  // if same exit with 0;\n  if (a === b) return 0;\n  // make sure that undefined are at the end of the sort.\n  if (a === undefined) return 1;\n  if (b === undefined) return -1;\n  // make sure that nulls are at the end of the sort.\n  if (a === null) return 1;\n  if (b === null) return -1;\n  if (typeof a == 'string' && typeof b == 'string') {\n    return a < b ? -1 : 1;\n  }\n  if (typeof a == 'number' && typeof b == 'number') {\n    return a - b;\n  }\n  if (typeof a == 'boolean' && typeof b == 'boolean') {\n    return a < b ? -1 : 1;\n  }\n  // `a` and `b` are of different types. Compare their string values.\n  const aString = String(a);\n  const bString = String(b);\n  return aString == bString ? 0 : aString < bString ? -1 : 1;\n}\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a value according to digit options and locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * @see {@link formatNumber}\n *\n * @usageNotes\n *\n * ### digitsInfo\n *\n * The value's decimal representation is specified by the `digitsInfo`\n * parameter, written in the following format:<br>\n *\n * ```\n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n * ```\n *\n *  - `minIntegerDigits`:\n * The minimum number of integer digits before the decimal point.\n * Default is 1.\n *\n * - `minFractionDigits`:\n * The minimum number of digits after the decimal point.\n * Default is 0.\n *\n *  - `maxFractionDigits`:\n * The maximum number of digits after the decimal point.\n * Default is 3.\n *\n * If the formatted value is truncated it will be rounded using the \"to-nearest\" method:\n *\n * ```\n * {{3.6 | number: '1.0-0'}}\n * <!--will output '4'-->\n *\n * {{-3.6 | number:'1.0-0'}}\n * <!--will output '-4'-->\n * ```\n *\n * ### locale\n *\n * `locale` will format a value according to locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n *\n * See [Setting your app locale](guide/i18n/locale-id).\n *\n * ### Example\n *\n * The following code shows how the pipe transforms values\n * according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n *\n * @publicApi\n */\nclass DecimalPipe {\n  _locale;\n  constructor(_locale) {\n    this._locale = _locale;\n  }\n  transform(value, digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    try {\n      const num = strToNumber(value);\n      return formatNumber(num, locale, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(DecimalPipe, error.message);\n    }\n  }\n  static ɵfac = function DecimalPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DecimalPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"number\",\n    type: DecimalPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DecimalPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'number'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a percentage\n * string, formatted according to locale rules that determine group sizing and\n * separator, decimal-point character, and other locale-specific\n * configurations.\n *\n * @see {@link formatPercent}\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/percent_pipe.ts region='PercentPipe'}\n *\n * @publicApi\n */\nclass PercentPipe {\n  _locale;\n  constructor(_locale) {\n    this._locale = _locale;\n  }\n  /**\n   *\n   * @param value The number to be formatted as a percentage.\n   * @param digitsInfo Decimal representation options, specified by a string\n   * in the following format:<br>\n   * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.\n   *   - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n   * Default is `1`.\n   *   - `minFractionDigits`: The minimum number of digits after the decimal point.\n   * Default is `0`.\n   *   - `maxFractionDigits`: The maximum number of digits after the decimal point.\n   * Default is `0`.\n   * @param locale A locale code for the locale format rules to use.\n   * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n   * See [Setting your app locale](guide/i18n/locale-id).\n   */\n  transform(value, digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    try {\n      const num = strToNumber(value);\n      return formatPercent(num, locale, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(PercentPipe, error.message);\n    }\n  }\n  static ɵfac = function PercentPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PercentPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"percent\",\n    type: PercentPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PercentPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'percent'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }], null);\n})();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a currency string, formatted according to locale rules\n * that determine group sizing and separator, decimal-point character,\n * and other locale-specific configurations.\n *\n *\n * @see {@link getCurrencySymbol}\n * @see {@link formatCurrency}\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * {@example common/pipes/ts/currency_pipe.ts region='CurrencyPipe'}\n *\n * @publicApi\n */\nclass CurrencyPipe {\n  _locale;\n  _defaultCurrencyCode;\n  constructor(_locale, _defaultCurrencyCode = 'USD') {\n    this._locale = _locale;\n    this._defaultCurrencyCode = _defaultCurrencyCode;\n  }\n  transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {\n    if (!isValue(value)) return null;\n    locale ||= this._locale;\n    if (typeof display === 'boolean') {\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) {\n        console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".`);\n      }\n      display = display ? 'symbol' : 'code';\n    }\n    let currency = currencyCode || this._defaultCurrencyCode;\n    if (display !== 'code') {\n      if (display === 'symbol' || display === 'symbol-narrow') {\n        currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);\n      } else {\n        currency = display;\n      }\n    }\n    try {\n      const num = strToNumber(value);\n      return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n    } catch (error) {\n      throw invalidPipeArgumentError(CurrencyPipe, error.message);\n    }\n  }\n  static ɵfac = function CurrencyPipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || CurrencyPipe)(i0.ɵɵdirectiveInject(LOCALE_ID, 16), i0.ɵɵdirectiveInject(DEFAULT_CURRENCY_CODE, 16));\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"currency\",\n    type: CurrencyPipe,\n    pure: true\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CurrencyPipe, [{\n    type: Pipe,\n    args: [{\n      name: 'currency'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [LOCALE_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DEFAULT_CURRENCY_CODE]\n    }]\n  }], null);\n})();\nfunction isValue(value) {\n  return !(value == null || value === '' || value !== value);\n}\n/**\n * Transforms a string into a number (if needed).\n */\nfunction strToNumber(value) {\n  // Convert strings to numbers\n  if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n    return Number(value);\n  }\n  if (typeof value !== 'number') {\n    throw new Error(`${value} is not a number`);\n  }\n  return value;\n}\n\n/**\n * @ngModule CommonModule\n * @description\n *\n * Creates a new `Array` or `String` containing a subset (slice) of the elements.\n *\n * @usageNotes\n *\n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n *\n * When operating on an `Array`, the returned `Array` is always a copy even when all\n * the elements are being returned.\n *\n * When operating on a blank value, the pipe returns the blank value.\n *\n * ### List Example\n *\n * This `ngFor` example:\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n * ```html\n * <li>b</li>\n * <li>c</li>\n * ```\n *\n * ### String Examples\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * @publicApi\n */\nclass SlicePipe {\n  transform(value, start, end) {\n    if (value == null) return null;\n    if (!this.supports(value)) {\n      throw invalidPipeArgumentError(SlicePipe, value);\n    }\n    return value.slice(start, end);\n  }\n  supports(obj) {\n    return typeof obj === 'string' || Array.isArray(obj);\n  }\n  static ɵfac = function SlicePipe_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || SlicePipe)();\n  };\n  static ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n    name: \"slice\",\n    type: SlicePipe,\n    pure: false\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SlicePipe, [{\n    type: Pipe,\n    args: [{\n      name: 'slice',\n      pure: false\n    }]\n  }], null, null);\n})();\n\n/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nconst COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];\n\n// Note: This does not contain the location providers,\n// as they need some platform specific implementations to work.\n/**\n * Exports all the basic Angular directives and pipes,\n * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on.\n * Re-exported by `BrowserModule`, which is included automatically in the root\n * `AppModule` when you create a new app with the CLI `new` command.\n *\n * @publicApi\n */\nclass CommonModule {\n  static ɵfac = function CommonModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || CommonModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: CommonModule,\n    imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],\n    exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CommonModule, [{\n    type: NgModule,\n    args: [{\n      imports: [COMMON_DIRECTIVES, COMMON_PIPES],\n      exports: [COMMON_DIRECTIVES, COMMON_PIPES]\n    }]\n  }], null, null);\n})();\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\n/**\n * Returns whether a platform id represents a browser platform.\n * @publicApi\n */\nfunction isPlatformBrowser(platformId) {\n  return platformId === PLATFORM_BROWSER_ID;\n}\n/**\n * Returns whether a platform id represents a server platform.\n * @publicApi\n */\nfunction isPlatformServer(platformId) {\n  return platformId === PLATFORM_SERVER_ID;\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * Defines a scroll position manager. Implemented by `BrowserViewportScroller`.\n *\n * @publicApi\n */\nclass ViewportScroller {\n  // De-sugared tree-shakable injection\n  // See #23917\n  /** @nocollapse */\n  static ɵprov = /** @pureOrBreakMyCode */ /* @__PURE__ */ɵɵdefineInjectable({\n    token: ViewportScroller,\n    providedIn: 'root',\n    factory: () => isPlatformBrowser(inject(PLATFORM_ID)) ? new BrowserViewportScroller(inject(DOCUMENT), window) : new NullViewportScroller()\n  });\n}\n/**\n * Manages the scroll position for a browser window.\n */\nclass BrowserViewportScroller {\n  document;\n  window;\n  offset = () => [0, 0];\n  constructor(document, window) {\n    this.document = document;\n    this.window = window;\n  }\n  /**\n   * Configures the top offset used when scrolling to an anchor.\n   * @param offset A position in screen coordinates (a tuple with x and y values)\n   * or a function that returns the top offset position.\n   *\n   */\n  setOffset(offset) {\n    if (Array.isArray(offset)) {\n      this.offset = () => offset;\n    } else {\n      this.offset = offset;\n    }\n  }\n  /**\n   * Retrieves the current scroll position.\n   * @returns The position in screen coordinates.\n   */\n  getScrollPosition() {\n    return [this.window.scrollX, this.window.scrollY];\n  }\n  /**\n   * Sets the scroll position.\n   * @param position The new position in screen coordinates.\n   */\n  scrollToPosition(position) {\n    this.window.scrollTo(position[0], position[1]);\n  }\n  /**\n   * Scrolls to an element and attempts to focus the element.\n   *\n   * Note that the function name here is misleading in that the target string may be an ID for a\n   * non-anchor element.\n   *\n   * @param target The ID of an element or name of the anchor.\n   *\n   * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n   * @see https://html.spec.whatwg.org/#scroll-to-fragid\n   */\n  scrollToAnchor(target) {\n    const elSelected = findAnchorFromDocument(this.document, target);\n    if (elSelected) {\n      this.scrollToElement(elSelected);\n      // After scrolling to the element, the spec dictates that we follow the focus steps for the\n      // target. Rather than following the robust steps, simply attempt focus.\n      //\n      // @see https://html.spec.whatwg.org/#get-the-focusable-area\n      // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus\n      // @see https://html.spec.whatwg.org/#focusable-area\n      elSelected.focus();\n    }\n  }\n  /**\n   * Disables automatic scroll restoration provided by the browser.\n   */\n  setHistoryScrollRestoration(scrollRestoration) {\n    this.window.history.scrollRestoration = scrollRestoration;\n  }\n  /**\n   * Scrolls to an element using the native offset and the specified offset set on this scroller.\n   *\n   * The offset can be used when we know that there is a floating header and scrolling naively to an\n   * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.\n   */\n  scrollToElement(el) {\n    const rect = el.getBoundingClientRect();\n    const left = rect.left + this.window.pageXOffset;\n    const top = rect.top + this.window.pageYOffset;\n    const offset = this.offset();\n    this.window.scrollTo(left - offset[0], top - offset[1]);\n  }\n}\nfunction findAnchorFromDocument(document, target) {\n  const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];\n  if (documentResult) {\n    return documentResult;\n  }\n  // `getElementById` and `getElementsByName` won't pierce through the shadow DOM so we\n  // have to traverse the DOM manually and do the lookup through the shadow roots.\n  if (typeof document.createTreeWalker === 'function' && document.body && typeof document.body.attachShadow === 'function') {\n    const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n    let currentNode = treeWalker.currentNode;\n    while (currentNode) {\n      const shadowRoot = currentNode.shadowRoot;\n      if (shadowRoot) {\n        // Note that `ShadowRoot` doesn't support `getElementsByName`\n        // so we have to fall back to `querySelector`.\n        const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name=\"${target}\"]`);\n        if (result) {\n          return result;\n        }\n      }\n      currentNode = treeWalker.nextNode();\n    }\n  }\n  return null;\n}\n/**\n * Provides an empty implementation of the viewport scroller.\n */\nclass NullViewportScroller {\n  /**\n   * Empty implementation\n   */\n  setOffset(offset) {}\n  /**\n   * Empty implementation\n   */\n  getScrollPosition() {\n    return [0, 0];\n  }\n  /**\n   * Empty implementation\n   */\n  scrollToPosition(position) {}\n  /**\n   * Empty implementation\n   */\n  scrollToAnchor(anchor) {}\n  /**\n   * Empty implementation\n   */\n  setHistoryScrollRestoration(scrollRestoration) {}\n}\n\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nclass XhrFactory {}\n\n/**\n * Value (out of 100) of the requested quality for placeholder images.\n */\nconst PLACEHOLDER_QUALITY = '20';\n\n// Converts a string that represents a URL into a URL class instance.\nfunction getUrl(src, win) {\n  // Don't use a base URL is the URL is absolute.\n  return isAbsoluteUrl(src) ? new URL(src) : new URL(src, win.location.href);\n}\n// Checks whether a URL is absolute (i.e. starts with `http://` or `https://`).\nfunction isAbsoluteUrl(src) {\n  return /^https?:\\/\\//.test(src);\n}\n// Given a URL, extract the hostname part.\n// If a URL is a relative one - the URL is returned as is.\nfunction extractHostname(url) {\n  return isAbsoluteUrl(url) ? new URL(url).hostname : url;\n}\nfunction isValidPath(path) {\n  const isString = typeof path === 'string';\n  if (!isString || path.trim() === '') {\n    return false;\n  }\n  // Calling new URL() will throw if the path string is malformed\n  try {\n    const url = new URL(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\nfunction normalizePath(path) {\n  return path.endsWith('/') ? path.slice(0, -1) : path;\n}\nfunction normalizeSrc(src) {\n  return src.startsWith('/') ? src.slice(1) : src;\n}\n\n/**\n * Noop image loader that does no transformation to the original src and just returns it as is.\n * This loader is used as a default one if more specific logic is not provided in an app config.\n *\n * @see {@link ImageLoader}\n * @see {@link NgOptimizedImage}\n */\nconst noopImageLoader = config => config.src;\n/**\n * Injection token that configures the image loader function.\n *\n * @see {@link ImageLoader}\n * @see {@link NgOptimizedImage}\n * @publicApi\n */\nconst IMAGE_LOADER = new InjectionToken(ngDevMode ? 'ImageLoader' : '', {\n  providedIn: 'root',\n  factory: () => noopImageLoader\n});\n/**\n * Internal helper function that makes it easier to introduce custom image loaders for the\n * `NgOptimizedImage` directive. It is enough to specify a URL builder function to obtain full DI\n * configuration for a given loader: a DI token corresponding to the actual loader function, plus DI\n * tokens managing preconnect check functionality.\n * @param buildUrlFn a function returning a full URL based on loader's configuration\n * @param exampleUrls example of full URLs for a given loader (used in error messages)\n * @returns a set of DI providers corresponding to the configured image loader\n */\nfunction createImageLoader(buildUrlFn, exampleUrls) {\n  return function provideImageLoader(path) {\n    if (!isValidPath(path)) {\n      throwInvalidPathError(path, exampleUrls || []);\n    }\n    // The trailing / is stripped (if provided) to make URL construction (concatenation) easier in\n    // the individual loader functions.\n    path = normalizePath(path);\n    const loaderFn = config => {\n      if (isAbsoluteUrl(config.src)) {\n        // Image loader functions expect an image file name (e.g. `my-image.png`)\n        // or a relative path + a file name (e.g. `/a/b/c/my-image.png`) as an input,\n        // so the final absolute URL can be constructed.\n        // When an absolute URL is provided instead - the loader can not\n        // build a final URL, thus the error is thrown to indicate that.\n        throwUnexpectedAbsoluteUrlError(path, config.src);\n      }\n      return buildUrlFn(path, {\n        ...config,\n        src: normalizeSrc(config.src)\n      });\n    };\n    const providers = [{\n      provide: IMAGE_LOADER,\n      useValue: loaderFn\n    }];\n    return providers;\n  };\n}\nfunction throwInvalidPathError(path, exampleUrls) {\n  throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply a path using one of the following formats: ${exampleUrls.join(' or ')}`);\n}\nfunction throwUnexpectedAbsoluteUrlError(path, url) {\n  throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected a \\`<img>\\` tag with an invalid \\`ngSrc\\` attribute: ${url}. ` + `This image loader expects \\`ngSrc\\` to be a relative URL - ` + `however the provided value is an absolute URL. ` + `To fix this, provide \\`ngSrc\\` as a path relative to the base URL ` + `configured for this loader (\\`${path}\\`).`);\n}\n\n/**\n * Function that generates an ImageLoader for [Cloudflare Image\n * Resizing](https://developers.cloudflare.com/images/image-resizing/) and turns it into an Angular\n * provider. Note: Cloudflare has multiple image products - this provider is specifically for\n * Cloudflare Image Resizing; it will not work with Cloudflare Images or Cloudflare Polish.\n *\n * @param path Your domain name, e.g. https://mysite.com\n * @returns Provider that provides an ImageLoader function\n *\n * @publicApi\n */\nconst provideCloudflareLoader = createImageLoader(createCloudflareUrl, ngDevMode ? ['https://<ZONE>/cdn-cgi/image/<OPTIONS>/<SOURCE-IMAGE>'] : undefined);\nfunction createCloudflareUrl(path, config) {\n  let params = `format=auto`;\n  if (config.width) {\n    params += `,width=${config.width}`;\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    params += `,quality=${PLACEHOLDER_QUALITY}`;\n  }\n  // Cloudflare image URLs format:\n  // https://developers.cloudflare.com/images/image-resizing/url-format/\n  return `${path}/cdn-cgi/image/${params}/${config.src}`;\n}\n\n/**\n * Name and URL tester for Cloudinary.\n */\nconst cloudinaryLoaderInfo = {\n  name: 'Cloudinary',\n  testUrl: isCloudinaryUrl\n};\nconst CLOUDINARY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.cloudinary\\.com\\/.+/;\n/**\n * Tests whether a URL is from Cloudinary CDN.\n */\nfunction isCloudinaryUrl(url) {\n  return CLOUDINARY_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Cloudinary and turns it into an Angular provider.\n *\n * @param path Base URL of your Cloudinary images\n * This URL should match one of the following formats:\n * https://res.cloudinary.com/mysite\n * https://mysite.cloudinary.com\n * https://subdomain.mysite.com\n * @returns Set of providers to configure the Cloudinary loader.\n *\n * @publicApi\n */\nconst provideCloudinaryLoader = createImageLoader(createCloudinaryUrl, ngDevMode ? ['https://res.cloudinary.com/mysite', 'https://mysite.cloudinary.com', 'https://subdomain.mysite.com'] : undefined);\nfunction createCloudinaryUrl(path, config) {\n  // Cloudinary image URLformat:\n  // https://cloudinary.com/documentation/image_transformations#transformation_url_structure\n  // Example of a Cloudinary image URL:\n  // https://res.cloudinary.com/mysite/image/upload/c_scale,f_auto,q_auto,w_600/marketing/tile-topics-m.png\n  // For a placeholder image, we use the lowest image setting available to reduce the load time\n  // else we use the auto size\n  const quality = config.isPlaceholder ? 'q_auto:low' : 'q_auto';\n  let params = `f_auto,${quality}`;\n  if (config.width) {\n    params += `,w_${config.width}`;\n  }\n  if (config.loaderParams?.['rounded']) {\n    params += `,r_max`;\n  }\n  return `${path}/image/upload/${params}/${config.src}`;\n}\n\n/**\n * Name and URL tester for ImageKit.\n */\nconst imageKitLoaderInfo = {\n  name: 'ImageKit',\n  testUrl: isImageKitUrl\n};\nconst IMAGE_KIT_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imagekit\\.io\\/.+/;\n/**\n * Tests whether a URL is from ImageKit CDN.\n */\nfunction isImageKitUrl(url) {\n  return IMAGE_KIT_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for ImageKit and turns it into an Angular provider.\n *\n * @param path Base URL of your ImageKit images\n * This URL should match one of the following formats:\n * https://ik.imagekit.io/myaccount\n * https://subdomain.mysite.com\n * @returns Set of providers to configure the ImageKit loader.\n *\n * @publicApi\n */\nconst provideImageKitLoader = createImageLoader(createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined);\nfunction createImagekitUrl(path, config) {\n  // Example of an ImageKit image URL:\n  // https://ik.imagekit.io/demo/tr:w-300,h-300/medium_cafe_B1iTdD0C.jpg\n  const {\n    src,\n    width\n  } = config;\n  const params = [];\n  if (width) {\n    params.push(`w-${width}`);\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    params.push(`q-${PLACEHOLDER_QUALITY}`);\n  }\n  const urlSegments = params.length ? [path, `tr:${params.join(',')}`, src] : [path, src];\n  const url = new URL(urlSegments.join('/'));\n  return url.href;\n}\n\n/**\n * Name and URL tester for Imgix.\n */\nconst imgixLoaderInfo = {\n  name: 'Imgix',\n  testUrl: isImgixUrl\n};\nconst IMGIX_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.imgix\\.net\\/.+/;\n/**\n * Tests whether a URL is from Imgix CDN.\n */\nfunction isImgixUrl(url) {\n  return IMGIX_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Imgix and turns it into an Angular provider.\n *\n * @param path path to the desired Imgix origin,\n * e.g. https://somepath.imgix.net or https://images.mysite.com\n * @returns Set of providers to configure the Imgix loader.\n *\n * @publicApi\n */\nconst provideImgixLoader = createImageLoader(createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined);\nfunction createImgixUrl(path, config) {\n  const url = new URL(`${path}/${config.src}`);\n  // This setting ensures the smallest allowable format is set.\n  url.searchParams.set('auto', 'format');\n  if (config.width) {\n    url.searchParams.set('w', config.width.toString());\n  }\n  // When requesting a placeholder image we ask a low quality image to reduce the load time.\n  if (config.isPlaceholder) {\n    url.searchParams.set('q', PLACEHOLDER_QUALITY);\n  }\n  return url.href;\n}\n\n/**\n * Name and URL tester for Netlify.\n */\nconst netlifyLoaderInfo = {\n  name: 'Netlify',\n  testUrl: isNetlifyUrl\n};\nconst NETLIFY_LOADER_REGEX = /https?\\:\\/\\/[^\\/]+\\.netlify\\.app\\/.+/;\n/**\n * Tests whether a URL is from a Netlify site. This won't catch sites with a custom domain,\n * but it's a good start for sites in development. This is only used to warn users who haven't\n * configured an image loader.\n */\nfunction isNetlifyUrl(url) {\n  return NETLIFY_LOADER_REGEX.test(url);\n}\n/**\n * Function that generates an ImageLoader for Netlify and turns it into an Angular provider.\n *\n * @param path optional URL of the desired Netlify site. Defaults to the current site.\n * @returns Set of providers to configure the Netlify loader.\n *\n * @publicApi\n */\nfunction provideNetlifyLoader(path) {\n  if (path && !isValidPath(path)) {\n    throw new ɵRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, ngDevMode && `Image loader has detected an invalid path (\\`${path}\\`). ` + `To fix this, supply either the full URL to the Netlify site, or leave it empty to use the current site.`);\n  }\n  if (path) {\n    const url = new URL(path);\n    path = url.origin;\n  }\n  const loaderFn = config => {\n    return createNetlifyUrl(config, path);\n  };\n  const providers = [{\n    provide: IMAGE_LOADER,\n    useValue: loaderFn\n  }];\n  return providers;\n}\nconst validParams = new Map([['height', 'h'], ['fit', 'fit'], ['quality', 'q'], ['q', 'q'], ['position', 'position']]);\nfunction createNetlifyUrl(config, path) {\n  // Note: `path` can be undefined, in which case we use a fake one to construct a `URL` instance.\n  const url = new URL(path ?? 'https://a/');\n  url.pathname = '/.netlify/images';\n  if (!isAbsoluteUrl(config.src) && !config.src.startsWith('/')) {\n    config.src = '/' + config.src;\n  }\n  url.searchParams.set('url', config.src);\n  if (config.width) {\n    url.searchParams.set('w', config.width.toString());\n  }\n  // When requesting a placeholder image we ask for a low quality image to reduce the load time.\n  // If the quality is specified in the loader config - always use provided value.\n  const configQuality = config.loaderParams?.['quality'] ?? config.loaderParams?.['q'];\n  if (config.isPlaceholder && !configQuality) {\n    url.searchParams.set('q', PLACEHOLDER_QUALITY);\n  }\n  for (const [param, value] of Object.entries(config.loaderParams ?? {})) {\n    if (validParams.has(param)) {\n      url.searchParams.set(validParams.get(param), value.toString());\n    } else {\n      if (ngDevMode) {\n        console.warn(ɵformatRuntimeError(2959 /* RuntimeErrorCode.INVALID_LOADER_ARGUMENTS */, `The Netlify image loader has detected an \\`<img>\\` tag with the unsupported attribute \"\\`${param}\\`\".`));\n      }\n    }\n  }\n  // The \"a\" hostname is used for relative URLs, so we can remove it from the final URL.\n  return url.hostname === 'a' ? url.href.replace(url.origin, '') : url.href;\n}\n\n// Assembles directive details string, useful for error messages.\nfunction imgDirectiveDetails(ngSrc, includeNgSrc = true) {\n  const ngSrcInfo = includeNgSrc ? `(activated on an <img> element with the \\`ngSrc=\"${ngSrc}\"\\`) ` : '';\n  return `The NgOptimizedImage directive ${ngSrcInfo}has detected that`;\n}\n\n/**\n * Asserts that the application is in development mode. Throws an error if the application is in\n * production mode. This assert can be used to make sure that there is no dev-mode code invoked in\n * the prod mode accidentally.\n */\nfunction assertDevMode(checkName) {\n  if (!ngDevMode) {\n    throw new ɵRuntimeError(2958 /* RuntimeErrorCode.UNEXPECTED_DEV_MODE_CHECK_IN_PROD_MODE */, `Unexpected invocation of the ${checkName} in the prod mode. ` + `Please make sure that the prod mode is enabled for production builds.`);\n  }\n}\n\n/**\n * Observer that detects whether an image with `NgOptimizedImage`\n * is treated as a Largest Contentful Paint (LCP) element. If so,\n * asserts that the image has the `priority` attribute.\n *\n * Note: this is a dev-mode only class and it does not appear in prod bundles,\n * thus there is no `ngDevMode` use in the code.\n *\n * Based on https://web.dev/lcp/#measure-lcp-in-javascript.\n */\nclass LCPImageObserver {\n  // Map of full image URLs -> original `ngSrc` values.\n  images = new Map();\n  window = null;\n  observer = null;\n  constructor() {\n    const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n    assertDevMode('LCP checker');\n    const win = inject(DOCUMENT).defaultView;\n    if (isBrowser && typeof PerformanceObserver !== 'undefined') {\n      this.window = win;\n      this.observer = this.initPerformanceObserver();\n    }\n  }\n  /**\n   * Inits PerformanceObserver and subscribes to LCP events.\n   * Based on https://web.dev/lcp/#measure-lcp-in-javascript\n   */\n  initPerformanceObserver() {\n    const observer = new PerformanceObserver(entryList => {\n      const entries = entryList.getEntries();\n      if (entries.length === 0) return;\n      // We use the latest entry produced by the `PerformanceObserver` as the best\n      // signal on which element is actually an LCP one. As an example, the first image to load on\n      // a page, by virtue of being the only thing on the page so far, is often a LCP candidate\n      // and gets reported by PerformanceObserver, but isn't necessarily the LCP element.\n      const lcpElement = entries[entries.length - 1];\n      // Cast to `any` due to missing `element` on the `LargestContentfulPaint` type of entry.\n      // See https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint\n      const imgSrc = lcpElement.element?.src ?? '';\n      // Exclude `data:` and `blob:` URLs, since they are not supported by the directive.\n      if (imgSrc.startsWith('data:') || imgSrc.startsWith('blob:')) return;\n      const img = this.images.get(imgSrc);\n      if (!img) return;\n      if (!img.priority && !img.alreadyWarnedPriority) {\n        img.alreadyWarnedPriority = true;\n        logMissingPriorityError(imgSrc);\n      }\n      if (img.modified && !img.alreadyWarnedModified) {\n        img.alreadyWarnedModified = true;\n        logModifiedWarning(imgSrc);\n      }\n    });\n    observer.observe({\n      type: 'largest-contentful-paint',\n      buffered: true\n    });\n    return observer;\n  }\n  registerImage(rewrittenSrc, originalNgSrc, isPriority) {\n    if (!this.observer) return;\n    const newObservedImageState = {\n      priority: isPriority,\n      modified: false,\n      alreadyWarnedModified: false,\n      alreadyWarnedPriority: false\n    };\n    this.images.set(getUrl(rewrittenSrc, this.window).href, newObservedImageState);\n  }\n  unregisterImage(rewrittenSrc) {\n    if (!this.observer) return;\n    this.images.delete(getUrl(rewrittenSrc, this.window).href);\n  }\n  updateImage(originalSrc, newSrc) {\n    if (!this.observer) return;\n    const originalUrl = getUrl(originalSrc, this.window).href;\n    const img = this.images.get(originalUrl);\n    if (img) {\n      img.modified = true;\n      this.images.set(getUrl(newSrc, this.window).href, img);\n      this.images.delete(originalUrl);\n    }\n  }\n  ngOnDestroy() {\n    if (!this.observer) return;\n    this.observer.disconnect();\n    this.images.clear();\n  }\n  static ɵfac = function LCPImageObserver_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || LCPImageObserver)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: LCPImageObserver,\n    factory: LCPImageObserver.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(LCPImageObserver, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\nfunction logMissingPriorityError(ngSrc) {\n  const directiveDetails = imgDirectiveDetails(ngSrc);\n  console.error(ɵformatRuntimeError(2955 /* RuntimeErrorCode.LCP_IMG_MISSING_PRIORITY */, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element but was not marked \"priority\". This image should be marked ` + `\"priority\" in order to prioritize its loading. ` + `To fix this, add the \"priority\" attribute.`));\n}\nfunction logModifiedWarning(ngSrc) {\n  const directiveDetails = imgDirectiveDetails(ngSrc);\n  console.warn(ɵformatRuntimeError(2964 /* RuntimeErrorCode.LCP_IMG_NGSRC_MODIFIED */, `${directiveDetails} this image is the Largest Contentful Paint (LCP) ` + `element and has had its \"ngSrc\" attribute modified. This can cause ` + `slower loading performance. It is recommended not to modify the \"ngSrc\" ` + `property on any image which could be the LCP element.`));\n}\n\n// Set of origins that are always excluded from the preconnect checks.\nconst INTERNAL_PRECONNECT_CHECK_BLOCKLIST = new Set(['localhost', '127.0.0.1', '0.0.0.0']);\n/**\n * Injection token to configure which origins should be excluded\n * from the preconnect checks. It can either be a single string or an array of strings\n * to represent a group of origins, for example:\n *\n * ```ts\n *  {provide: PRECONNECT_CHECK_BLOCKLIST, useValue: 'https://your-domain.com'}\n * ```\n *\n * or:\n *\n * ```ts\n *  {provide: PRECONNECT_CHECK_BLOCKLIST,\n *   useValue: ['https://your-domain-1.com', 'https://your-domain-2.com']}\n * ```\n *\n * @publicApi\n */\nconst PRECONNECT_CHECK_BLOCKLIST = new InjectionToken(ngDevMode ? 'PRECONNECT_CHECK_BLOCKLIST' : '');\n/**\n * Contains the logic to detect whether an image, marked with the \"priority\" attribute\n * has a corresponding `<link rel=\"preconnect\">` tag in the `document.head`.\n *\n * Note: this is a dev-mode only class, which should not appear in prod bundles,\n * thus there is no `ngDevMode` use in the code.\n */\nclass PreconnectLinkChecker {\n  document = inject(DOCUMENT);\n  isServer = isPlatformServer(inject(PLATFORM_ID));\n  /**\n   * Set of <link rel=\"preconnect\"> tags found on this page.\n   * The `null` value indicates that there was no DOM query operation performed.\n   */\n  preconnectLinks = null;\n  /*\n   * Keep track of all already seen origin URLs to avoid repeating the same check.\n   */\n  alreadySeen = new Set();\n  window = null;\n  blocklist = new Set(INTERNAL_PRECONNECT_CHECK_BLOCKLIST);\n  constructor() {\n    assertDevMode('preconnect link checker');\n    const win = this.document.defaultView;\n    if (typeof win !== 'undefined') {\n      this.window = win;\n    }\n    const blocklist = inject(PRECONNECT_CHECK_BLOCKLIST, {\n      optional: true\n    });\n    if (blocklist) {\n      this.populateBlocklist(blocklist);\n    }\n  }\n  populateBlocklist(origins) {\n    if (Array.isArray(origins)) {\n      deepForEach(origins, origin => {\n        this.blocklist.add(extractHostname(origin));\n      });\n    } else {\n      this.blocklist.add(extractHostname(origins));\n    }\n  }\n  /**\n   * Checks that a preconnect resource hint exists in the head for the\n   * given src.\n   *\n   * @param rewrittenSrc src formatted with loader\n   * @param originalNgSrc ngSrc value\n   */\n  assertPreconnect(rewrittenSrc, originalNgSrc) {\n    if (this.isServer) return;\n    const imgUrl = getUrl(rewrittenSrc, this.window);\n    if (this.blocklist.has(imgUrl.hostname) || this.alreadySeen.has(imgUrl.origin)) return;\n    // Register this origin as seen, so we don't check it again later.\n    this.alreadySeen.add(imgUrl.origin);\n    // Note: we query for preconnect links only *once* and cache the results\n    // for the entire lifespan of an application, since it's unlikely that the\n    // list would change frequently. This allows to make sure there are no\n    // performance implications of making extra DOM lookups for each image.\n    this.preconnectLinks ??= this.queryPreconnectLinks();\n    if (!this.preconnectLinks.has(imgUrl.origin)) {\n      console.warn(ɵformatRuntimeError(2956 /* RuntimeErrorCode.PRIORITY_IMG_MISSING_PRECONNECT_TAG */, `${imgDirectiveDetails(originalNgSrc)} there is no preconnect tag present for this ` + `image. Preconnecting to the origin(s) that serve priority images ensures that these ` + `images are delivered as soon as possible. To fix this, please add the following ` + `element into the <head> of the document:\\n` + `  <link rel=\"preconnect\" href=\"${imgUrl.origin}\">`));\n    }\n  }\n  queryPreconnectLinks() {\n    const preconnectUrls = new Set();\n    const selector = 'link[rel=preconnect]';\n    const links = Array.from(this.document.querySelectorAll(selector));\n    for (let link of links) {\n      const url = getUrl(link.href, this.window);\n      preconnectUrls.add(url.origin);\n    }\n    return preconnectUrls;\n  }\n  ngOnDestroy() {\n    this.preconnectLinks?.clear();\n    this.alreadySeen.clear();\n  }\n  static ɵfac = function PreconnectLinkChecker_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreconnectLinkChecker)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreconnectLinkChecker,\n    factory: PreconnectLinkChecker.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreconnectLinkChecker, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [], null);\n})();\n/**\n * Invokes a callback for each element in the array. Also invokes a callback\n * recursively for each nested array.\n */\nfunction deepForEach(input, fn) {\n  for (let value of input) {\n    Array.isArray(value) ? deepForEach(value, fn) : fn(value);\n  }\n}\n\n/**\n * In SSR scenarios, a preload `<link>` element is generated for priority images.\n * Having a large number of preload tags may negatively affect the performance,\n * so we warn developers (by throwing an error) if the number of preloaded images\n * is above a certain threshold. This const specifies this threshold.\n */\nconst DEFAULT_PRELOADED_IMAGES_LIMIT = 5;\n/**\n * Helps to keep track of priority images that already have a corresponding\n * preload tag (to avoid generating multiple preload tags with the same URL).\n *\n * This Set tracks the original src passed into the `ngSrc` input not the src after it has been\n * run through the specified `IMAGE_LOADER`.\n */\nconst PRELOADED_IMAGES = new InjectionToken('NG_OPTIMIZED_PRELOADED_IMAGES', {\n  providedIn: 'root',\n  factory: () => new Set()\n});\n\n/**\n * @description Contains the logic needed to track and add preload link tags to the `<head>` tag. It\n * will also track what images have already had preload link tags added so as to not duplicate link\n * tags.\n *\n * In dev mode this service will validate that the number of preloaded images does not exceed the\n * configured default preloaded images limit: {@link DEFAULT_PRELOADED_IMAGES_LIMIT}.\n */\nclass PreloadLinkCreator {\n  preloadedImages = inject(PRELOADED_IMAGES);\n  document = inject(DOCUMENT);\n  /**\n   * @description Add a preload `<link>` to the `<head>` of the `index.html` that is served from the\n   * server while using Angular Universal and SSR to kick off image loads for high priority images.\n   *\n   * The `sizes` (passed in from the user) and `srcset` (parsed and formatted from `ngSrcset`)\n   * properties used to set the corresponding attributes, `imagesizes` and `imagesrcset`\n   * respectively, on the preload `<link>` tag so that the correctly sized image is preloaded from\n   * the CDN.\n   *\n   * {@link https://web.dev/preload-responsive-images/#imagesrcset-and-imagesizes}\n   *\n   * @param renderer The `Renderer2` passed in from the directive\n   * @param src The original src of the image that is set on the `ngSrc` input.\n   * @param srcset The parsed and formatted srcset created from the `ngSrcset` input\n   * @param sizes The value of the `sizes` attribute passed in to the `<img>` tag\n   */\n  createPreloadLinkTag(renderer, src, srcset, sizes) {\n    if (ngDevMode) {\n      if (this.preloadedImages.size >= DEFAULT_PRELOADED_IMAGES_LIMIT) {\n        throw new ɵRuntimeError(2961 /* RuntimeErrorCode.TOO_MANY_PRELOADED_IMAGES */, ngDevMode && `The \\`NgOptimizedImage\\` directive has detected that more than ` + `${DEFAULT_PRELOADED_IMAGES_LIMIT} images were marked as priority. ` + `This might negatively affect an overall performance of the page. ` + `To fix this, remove the \"priority\" attribute from images with less priority.`);\n      }\n    }\n    if (this.preloadedImages.has(src)) {\n      return;\n    }\n    this.preloadedImages.add(src);\n    const preload = renderer.createElement('link');\n    renderer.setAttribute(preload, 'as', 'image');\n    renderer.setAttribute(preload, 'href', src);\n    renderer.setAttribute(preload, 'rel', 'preload');\n    renderer.setAttribute(preload, 'fetchpriority', 'high');\n    if (sizes) {\n      renderer.setAttribute(preload, 'imageSizes', sizes);\n    }\n    if (srcset) {\n      renderer.setAttribute(preload, 'imageSrcset', srcset);\n    }\n    renderer.appendChild(this.document.head, preload);\n  }\n  static ɵfac = function PreloadLinkCreator_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || PreloadLinkCreator)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: PreloadLinkCreator,\n    factory: PreloadLinkCreator.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(PreloadLinkCreator, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], null, null);\n})();\n\n/**\n * When a Base64-encoded image is passed as an input to the `NgOptimizedImage` directive,\n * an error is thrown. The image content (as a string) might be very long, thus making\n * it hard to read an error message if the entire string is included. This const defines\n * the number of characters that should be included into the error message. The rest\n * of the content is truncated.\n */\nconst BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;\n/**\n * RegExpr to determine whether a src in a srcset is using width descriptors.\n * Should match something like: \"100w, 200w\".\n */\nconst VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\\s*\\d+w\\s*(,|$)){1,})$/;\n/**\n * RegExpr to determine whether a src in a srcset is using density descriptors.\n * Should match something like: \"1x, 2x, 50x\". Also supports decimals like \"1.5x, 1.50x\".\n */\nconst VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\\s*\\d+(\\.\\d+)?x\\s*(,|$)){1,})$/;\n/**\n * Srcset values with a density descriptor higher than this value will actively\n * throw an error. Such densities are not permitted as they cause image sizes\n * to be unreasonably large and slow down LCP.\n */\nconst ABSOLUTE_SRCSET_DENSITY_CAP = 3;\n/**\n * Used only in error message text to communicate best practices, as we will\n * only throw based on the slightly more conservative ABSOLUTE_SRCSET_DENSITY_CAP.\n */\nconst RECOMMENDED_SRCSET_DENSITY_CAP = 2;\n/**\n * Used in generating automatic density-based srcsets\n */\nconst DENSITY_SRCSET_MULTIPLIERS = [1, 2];\n/**\n * Used to determine which breakpoints to use on full-width images\n */\nconst VIEWPORT_BREAKPOINT_CUTOFF = 640;\n/**\n * Used to determine whether two aspect ratios are similar in value.\n */\nconst ASPECT_RATIO_TOLERANCE = 0.1;\n/**\n * Used to determine whether the image has been requested at an overly\n * large size compared to the actual rendered image size (after taking\n * into account a typical device pixel ratio). In pixels.\n */\nconst OVERSIZED_IMAGE_TOLERANCE = 1000;\n/**\n * Used to limit automatic srcset generation of very large sources for\n * fixed-size images. In pixels.\n */\nconst FIXED_SRCSET_WIDTH_LIMIT = 1920;\nconst FIXED_SRCSET_HEIGHT_LIMIT = 1080;\n/**\n * Default blur radius of the CSS filter used on placeholder images, in pixels\n */\nconst PLACEHOLDER_BLUR_AMOUNT = 15;\n/**\n * Placeholder dimension (height or width) limit in pixels. Angular produces a warning\n * when this limit is crossed.\n */\nconst PLACEHOLDER_DIMENSION_LIMIT = 1000;\n/**\n * Used to warn or error when the user provides an overly large dataURL for the placeholder\n * attribute.\n * Character count of Base64 images is 1 character per byte, and base64 encoding is approximately\n * 33% larger than base images, so 4000 characters is around 3KB on disk and 10000 characters is\n * around 7.7KB. Experimentally, 4000 characters is about 20x20px in PNG or medium-quality JPEG\n * format, and 10,000 is around 50x50px, but there's quite a bit of variation depending on how the\n * image is saved.\n */\nconst DATA_URL_WARN_LIMIT = 4000;\nconst DATA_URL_ERROR_LIMIT = 10000;\n/** Info about built-in loaders we can test for. */\nconst BUILT_IN_LOADERS = [imgixLoaderInfo, imageKitLoaderInfo, cloudinaryLoaderInfo, netlifyLoaderInfo];\n/**\n * Threshold for the PRIORITY_TRUE_COUNT\n */\nconst PRIORITY_COUNT_THRESHOLD = 10;\n/**\n * This count is used to log a devMode warning\n * when the count of directive instances with priority=true\n * exceeds the threshold PRIORITY_COUNT_THRESHOLD\n */\nlet IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\n/**\n * This function is for testing purpose.\n */\nfunction resetImagePriorityCount() {\n  IMGS_WITH_PRIORITY_ATTR_COUNT = 0;\n}\n/**\n * Directive that improves image loading performance by enforcing best practices.\n *\n * `NgOptimizedImage` ensures that the loading of the Largest Contentful Paint (LCP) image is\n * prioritized by:\n * - Automatically setting the `fetchpriority` attribute on the `<img>` tag\n * - Lazy loading non-priority images by default\n * - Automatically generating a preconnect link tag in the document head\n *\n * In addition, the directive:\n * - Generates appropriate asset URLs if a corresponding `ImageLoader` function is provided\n * - Automatically generates a srcset\n * - Requires that `width` and `height` are set\n * - Warns if `width` or `height` have been set incorrectly\n * - Warns if the image will be visually distorted when rendered\n *\n * @usageNotes\n * The `NgOptimizedImage` directive is marked as [standalone](guide/components/importing) and can\n * be imported directly.\n *\n * Follow the steps below to enable and use the directive:\n * 1. Import it into the necessary NgModule or a standalone Component.\n * 2. Optionally provide an `ImageLoader` if you use an image hosting service.\n * 3. Update the necessary `<img>` tags in templates and replace `src` attributes with `ngSrc`.\n * Using a `ngSrc` allows the directive to control when the `src` gets set, which triggers an image\n * download.\n *\n * Step 1: import the `NgOptimizedImage` directive.\n *\n * ```ts\n * import { NgOptimizedImage } from '@angular/common';\n *\n * // Include it into the necessary NgModule\n * @NgModule({\n *   imports: [NgOptimizedImage],\n * })\n * class AppModule {}\n *\n * // ... or a standalone Component\n * @Component({\n *   imports: [NgOptimizedImage],\n * })\n * class MyStandaloneComponent {}\n * ```\n *\n * Step 2: configure a loader.\n *\n * To use the **default loader**: no additional code changes are necessary. The URL returned by the\n * generic loader will always match the value of \"src\". In other words, this loader applies no\n * transformations to the resource URL and the value of the `ngSrc` attribute will be used as is.\n *\n * To use an existing loader for a **third-party image service**: add the provider factory for your\n * chosen service to the `providers` array. In the example below, the Imgix loader is used:\n *\n * ```ts\n * import {provideImgixLoader} from '@angular/common';\n *\n * // Call the function and add the result to the `providers` array:\n * providers: [\n *   provideImgixLoader(\"https://my.base.url/\"),\n * ],\n * ```\n *\n * The `NgOptimizedImage` directive provides the following functions:\n * - `provideCloudflareLoader`\n * - `provideCloudinaryLoader`\n * - `provideImageKitLoader`\n * - `provideImgixLoader`\n *\n * If you use a different image provider, you can create a custom loader function as described\n * below.\n *\n * To use a **custom loader**: provide your loader function as a value for the `IMAGE_LOADER` DI\n * token.\n *\n * ```ts\n * import {IMAGE_LOADER, ImageLoaderConfig} from '@angular/common';\n *\n * // Configure the loader using the `IMAGE_LOADER` token.\n * providers: [\n *   {\n *      provide: IMAGE_LOADER,\n *      useValue: (config: ImageLoaderConfig) => {\n *        return `https://example.com/${config.src}-${config.width}.jpg`;\n *      }\n *   },\n * ],\n * ```\n *\n * Step 3: update `<img>` tags in templates to use `ngSrc` instead of `src`.\n *\n * ```html\n * <img ngSrc=\"logo.png\" width=\"200\" height=\"100\">\n * ```\n *\n * @publicApi\n */\nclass NgOptimizedImage {\n  imageLoader = inject(IMAGE_LOADER);\n  config = processConfig(inject(ɵIMAGE_CONFIG));\n  renderer = inject(Renderer2);\n  imgElement = inject(ElementRef).nativeElement;\n  injector = inject(Injector);\n  isServer = isPlatformServer(inject(PLATFORM_ID));\n  preloadLinkCreator = inject(PreloadLinkCreator);\n  // a LCP image observer - should be injected only in the dev mode\n  lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;\n  /**\n   * Calculate the rewritten `src` once and store it.\n   * This is needed to avoid repetitive calculations and make sure the directive cleanup in the\n   * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other\n   * instance that might be already destroyed).\n   */\n  _renderedSrc = null;\n  /**\n   * Name of the source image.\n   * Image name will be processed by the image loader and the final URL will be applied as the `src`\n   * property of the image.\n   */\n  ngSrc;\n  /**\n   * A comma separated list of width or density descriptors.\n   * The image name will be taken from `ngSrc` and combined with the list of width or density\n   * descriptors to generate the final `srcset` property of the image.\n   *\n   * Example:\n   * ```\n   * <img ngSrc=\"hello.jpg\" ngSrcset=\"100w, 200w\" />  =>\n   * <img src=\"path/hello.jpg\" srcset=\"path/hello.jpg?w=100 100w, path/hello.jpg?w=200 200w\" />\n   * ```\n   */\n  ngSrcset;\n  /**\n   * The base `sizes` attribute passed through to the `<img>` element.\n   * Providing sizes causes the image to create an automatic responsive srcset.\n   */\n  sizes;\n  /**\n   * For responsive images: the intrinsic width of the image in pixels.\n   * For fixed size images: the desired rendered width of the image in pixels.\n   */\n  width;\n  /**\n   * For responsive images: the intrinsic height of the image in pixels.\n   * For fixed size images: the desired rendered height of the image in pixels.\n   */\n  height;\n  /**\n   * The desired loading behavior (lazy, eager, or auto). Defaults to `lazy`,\n   * which is recommended for most images.\n   *\n   * Warning: Setting images as loading=\"eager\" or loading=\"auto\" marks them\n   * as non-priority images and can hurt loading performance. For images which\n   * may be the LCP element, use the `priority` attribute instead of `loading`.\n   */\n  loading;\n  /**\n   * Indicates whether this image should have a high priority.\n   */\n  priority = false;\n  /**\n   * Data to pass through to custom loaders.\n   */\n  loaderParams;\n  /**\n   * Disables automatic srcset generation for this image.\n   */\n  disableOptimizedSrcset = false;\n  /**\n   * Sets the image to \"fill mode\", which eliminates the height/width requirement and adds\n   * styles such that the image fills its containing element.\n   */\n  fill = false;\n  /**\n   * A URL or data URL for an image to be used as a placeholder while this image loads.\n   */\n  placeholder;\n  /**\n   * Configuration object for placeholder settings. Options:\n   *   * blur: Setting this to false disables the automatic CSS blur.\n   */\n  placeholderConfig;\n  /**\n   * Value of the `src` attribute if set on the host `<img>` element.\n   * This input is exclusively read to assert that `src` is not set in conflict\n   * with `ngSrc` and that images don't start to load until a lazy loading strategy is set.\n   * @internal\n   */\n  src;\n  /**\n   * Value of the `srcset` attribute if set on the host `<img>` element.\n   * This input is exclusively read to assert that `srcset` is not set in conflict\n   * with `ngSrcset` and that images don't start to load until a lazy loading strategy is set.\n   * @internal\n   */\n  srcset;\n  /** @nodoc */\n  ngOnInit() {\n    ɵperformanceMarkFeature('NgOptimizedImage');\n    if (ngDevMode) {\n      const ngZone = this.injector.get(NgZone);\n      assertNonEmptyInput(this, 'ngSrc', this.ngSrc);\n      assertValidNgSrcset(this, this.ngSrcset);\n      assertNoConflictingSrc(this);\n      if (this.ngSrcset) {\n        assertNoConflictingSrcset(this);\n      }\n      assertNotBase64Image(this);\n      assertNotBlobUrl(this);\n      if (this.fill) {\n        assertEmptyWidthAndHeight(this);\n        // This leaves the Angular zone to avoid triggering unnecessary change detection cycles when\n        // `load` tasks are invoked on images.\n        ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));\n      } else {\n        assertNonEmptyWidthAndHeight(this);\n        if (this.height !== undefined) {\n          assertGreaterThanZero(this, this.height, 'height');\n        }\n        if (this.width !== undefined) {\n          assertGreaterThanZero(this, this.width, 'width');\n        }\n        // Only check for distorted images when not in fill mode, where\n        // images may be intentionally stretched, cropped or letterboxed.\n        ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));\n      }\n      assertValidLoadingInput(this);\n      if (!this.ngSrcset) {\n        assertNoComplexSizes(this);\n      }\n      assertValidPlaceholder(this, this.imageLoader);\n      assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);\n      assertNoNgSrcsetWithoutLoader(this, this.imageLoader);\n      assertNoLoaderParamsWithoutLoader(this, this.imageLoader);\n      if (this.lcpObserver !== null) {\n        const ngZone = this.injector.get(NgZone);\n        ngZone.runOutsideAngular(() => {\n          this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);\n        });\n      }\n      if (this.priority) {\n        const checker = this.injector.get(PreconnectLinkChecker);\n        checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);\n        if (!this.isServer) {\n          const applicationRef = this.injector.get(ApplicationRef);\n          assetPriorityCountBelowThreshold(applicationRef);\n        }\n      }\n    }\n    if (this.placeholder) {\n      this.removePlaceholderOnLoad(this.imgElement);\n    }\n    this.setHostAttributes();\n  }\n  setHostAttributes() {\n    // Must set width/height explicitly in case they are bound (in which case they will\n    // only be reflected and not found by the browser)\n    if (this.fill) {\n      this.sizes ||= '100vw';\n    } else {\n      this.setHostAttribute('width', this.width.toString());\n      this.setHostAttribute('height', this.height.toString());\n    }\n    this.setHostAttribute('loading', this.getLoadingBehavior());\n    this.setHostAttribute('fetchpriority', this.getFetchPriority());\n    // The `data-ng-img` attribute flags an image as using the directive, to allow\n    // for analysis of the directive's performance.\n    this.setHostAttribute('ng-img', 'true');\n    // The `src` and `srcset` attributes should be set last since other attributes\n    // could affect the image's loading behavior.\n    const rewrittenSrcset = this.updateSrcAndSrcset();\n    if (this.sizes) {\n      if (this.getLoadingBehavior() === 'lazy') {\n        this.setHostAttribute('sizes', 'auto, ' + this.sizes);\n      } else {\n        this.setHostAttribute('sizes', this.sizes);\n      }\n    } else {\n      if (this.ngSrcset && VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset) && this.getLoadingBehavior() === 'lazy') {\n        this.setHostAttribute('sizes', 'auto, 100vw');\n      }\n    }\n    if (this.isServer && this.priority) {\n      this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);\n    }\n  }\n  /** @nodoc */\n  ngOnChanges(changes) {\n    if (ngDevMode) {\n      assertNoPostInitInputChange(this, changes, ['ngSrcset', 'width', 'height', 'priority', 'fill', 'loading', 'sizes', 'loaderParams', 'disableOptimizedSrcset']);\n    }\n    if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {\n      const oldSrc = this._renderedSrc;\n      this.updateSrcAndSrcset(true);\n      const newSrc = this._renderedSrc;\n      if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {\n        const ngZone = this.injector.get(NgZone);\n        ngZone.runOutsideAngular(() => {\n          this.lcpObserver?.updateImage(oldSrc, newSrc);\n        });\n      }\n    }\n    if (ngDevMode && changes['placeholder']?.currentValue && !this.isServer) {\n      assertPlaceholderDimensions(this, this.imgElement);\n    }\n  }\n  callImageLoader(configWithoutCustomParams) {\n    let augmentedConfig = configWithoutCustomParams;\n    if (this.loaderParams) {\n      augmentedConfig.loaderParams = this.loaderParams;\n    }\n    return this.imageLoader(augmentedConfig);\n  }\n  getLoadingBehavior() {\n    if (!this.priority && this.loading !== undefined) {\n      return this.loading;\n    }\n    return this.priority ? 'eager' : 'lazy';\n  }\n  getFetchPriority() {\n    return this.priority ? 'high' : 'auto';\n  }\n  getRewrittenSrc() {\n    // ImageLoaderConfig supports setting a width property. However, we're not setting width here\n    // because if the developer uses rendered width instead of intrinsic width in the HTML width\n    // attribute, the image requested may be too small for 2x+ screens.\n    if (!this._renderedSrc) {\n      const imgConfig = {\n        src: this.ngSrc\n      };\n      // Cache calculated image src to reuse it later in the code.\n      this._renderedSrc = this.callImageLoader(imgConfig);\n    }\n    return this._renderedSrc;\n  }\n  getRewrittenSrcset() {\n    const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);\n    const finalSrcs = this.ngSrcset.split(',').filter(src => src !== '').map(srcStr => {\n      srcStr = srcStr.trim();\n      const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;\n      return `${this.callImageLoader({\n        src: this.ngSrc,\n        width\n      })} ${srcStr}`;\n    });\n    return finalSrcs.join(', ');\n  }\n  getAutomaticSrcset() {\n    if (this.sizes) {\n      return this.getResponsiveSrcset();\n    } else {\n      return this.getFixedSrcset();\n    }\n  }\n  getResponsiveSrcset() {\n    const {\n      breakpoints\n    } = this.config;\n    let filteredBreakpoints = breakpoints;\n    if (this.sizes?.trim() === '100vw') {\n      // Since this is a full-screen-width image, our srcset only needs to include\n      // breakpoints with full viewport widths.\n      filteredBreakpoints = breakpoints.filter(bp => bp >= VIEWPORT_BREAKPOINT_CUTOFF);\n    }\n    const finalSrcs = filteredBreakpoints.map(bp => `${this.callImageLoader({\n      src: this.ngSrc,\n      width: bp\n    })} ${bp}w`);\n    return finalSrcs.join(', ');\n  }\n  updateSrcAndSrcset(forceSrcRecalc = false) {\n    if (forceSrcRecalc) {\n      // Reset cached value, so that the followup `getRewrittenSrc()` call\n      // will recalculate it and update the cache.\n      this._renderedSrc = null;\n    }\n    const rewrittenSrc = this.getRewrittenSrc();\n    this.setHostAttribute('src', rewrittenSrc);\n    let rewrittenSrcset = undefined;\n    if (this.ngSrcset) {\n      rewrittenSrcset = this.getRewrittenSrcset();\n    } else if (this.shouldGenerateAutomaticSrcset()) {\n      rewrittenSrcset = this.getAutomaticSrcset();\n    }\n    if (rewrittenSrcset) {\n      this.setHostAttribute('srcset', rewrittenSrcset);\n    }\n    return rewrittenSrcset;\n  }\n  getFixedSrcset() {\n    const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map(multiplier => `${this.callImageLoader({\n      src: this.ngSrc,\n      width: this.width * multiplier\n    })} ${multiplier}x`);\n    return finalSrcs.join(', ');\n  }\n  shouldGenerateAutomaticSrcset() {\n    let oversizedImage = false;\n    if (!this.sizes) {\n      oversizedImage = this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;\n    }\n    return !this.disableOptimizedSrcset && !this.srcset && this.imageLoader !== noopImageLoader && !oversizedImage;\n  }\n  /**\n   * Returns an image url formatted for use with the CSS background-image property. Expects one of:\n   * * A base64 encoded image, which is wrapped and passed through.\n   * * A boolean. If true, calls the image loader to generate a small placeholder url.\n   */\n  generatePlaceholder(placeholderInput) {\n    const {\n      placeholderResolution\n    } = this.config;\n    if (placeholderInput === true) {\n      return `url(${this.callImageLoader({\n        src: this.ngSrc,\n        width: placeholderResolution,\n        isPlaceholder: true\n      })})`;\n    } else if (typeof placeholderInput === 'string') {\n      return `url(${placeholderInput})`;\n    }\n    return null;\n  }\n  /**\n   * Determines if blur should be applied, based on an optional boolean\n   * property `blur` within the optional configuration object `placeholderConfig`.\n   */\n  shouldBlurPlaceholder(placeholderConfig) {\n    if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {\n      return true;\n    }\n    return Boolean(placeholderConfig.blur);\n  }\n  removePlaceholderOnLoad(img) {\n    const callback = () => {\n      const changeDetectorRef = this.injector.get(ChangeDetectorRef);\n      removeLoadListenerFn();\n      removeErrorListenerFn();\n      this.placeholder = false;\n      changeDetectorRef.markForCheck();\n    };\n    const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);\n    const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);\n    callOnLoadIfImageIsLoaded(img, callback);\n  }\n  /** @nodoc */\n  ngOnDestroy() {\n    if (ngDevMode) {\n      if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {\n        this.lcpObserver.unregisterImage(this._renderedSrc);\n      }\n    }\n  }\n  setHostAttribute(name, value) {\n    this.renderer.setAttribute(this.imgElement, name, value);\n  }\n  static ɵfac = function NgOptimizedImage_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || NgOptimizedImage)();\n  };\n  static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n    type: NgOptimizedImage,\n    selectors: [[\"img\", \"ngSrc\", \"\"]],\n    hostVars: 18,\n    hostBindings: function NgOptimizedImage_HostBindings(rf, ctx) {\n      if (rf & 2) {\n        i0.ɵɵstyleProp(\"position\", ctx.fill ? \"absolute\" : null)(\"width\", ctx.fill ? \"100%\" : null)(\"height\", ctx.fill ? \"100%\" : null)(\"inset\", ctx.fill ? \"0\" : null)(\"background-size\", ctx.placeholder ? \"cover\" : null)(\"background-position\", ctx.placeholder ? \"50% 50%\" : null)(\"background-repeat\", ctx.placeholder ? \"no-repeat\" : null)(\"background-image\", ctx.placeholder ? ctx.generatePlaceholder(ctx.placeholder) : null)(\"filter\", ctx.placeholder && ctx.shouldBlurPlaceholder(ctx.placeholderConfig) ? \"blur(15px)\" : null);\n      }\n    },\n    inputs: {\n      ngSrc: [2, \"ngSrc\", \"ngSrc\", unwrapSafeUrl],\n      ngSrcset: \"ngSrcset\",\n      sizes: \"sizes\",\n      width: [2, \"width\", \"width\", numberAttribute],\n      height: [2, \"height\", \"height\", numberAttribute],\n      loading: \"loading\",\n      priority: [2, \"priority\", \"priority\", booleanAttribute],\n      loaderParams: \"loaderParams\",\n      disableOptimizedSrcset: [2, \"disableOptimizedSrcset\", \"disableOptimizedSrcset\", booleanAttribute],\n      fill: [2, \"fill\", \"fill\", booleanAttribute],\n      placeholder: [2, \"placeholder\", \"placeholder\", booleanOrUrlAttribute],\n      placeholderConfig: \"placeholderConfig\",\n      src: \"src\",\n      srcset: \"srcset\"\n    },\n    features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(NgOptimizedImage, [{\n    type: Directive,\n    args: [{\n      selector: 'img[ngSrc]',\n      host: {\n        '[style.position]': 'fill ? \"absolute\" : null',\n        '[style.width]': 'fill ? \"100%\" : null',\n        '[style.height]': 'fill ? \"100%\" : null',\n        '[style.inset]': 'fill ? \"0\" : null',\n        '[style.background-size]': 'placeholder ? \"cover\" : null',\n        '[style.background-position]': 'placeholder ? \"50% 50%\" : null',\n        '[style.background-repeat]': 'placeholder ? \"no-repeat\" : null',\n        '[style.background-image]': 'placeholder ? generatePlaceholder(placeholder) : null',\n        '[style.filter]': `placeholder && shouldBlurPlaceholder(placeholderConfig) ? \"blur(${PLACEHOLDER_BLUR_AMOUNT}px)\" : null`\n      }\n    }]\n  }], null, {\n    ngSrc: [{\n      type: Input,\n      args: [{\n        required: true,\n        transform: unwrapSafeUrl\n      }]\n    }],\n    ngSrcset: [{\n      type: Input\n    }],\n    sizes: [{\n      type: Input\n    }],\n    width: [{\n      type: Input,\n      args: [{\n        transform: numberAttribute\n      }]\n    }],\n    height: [{\n      type: Input,\n      args: [{\n        transform: numberAttribute\n      }]\n    }],\n    loading: [{\n      type: Input\n    }],\n    priority: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    loaderParams: [{\n      type: Input\n    }],\n    disableOptimizedSrcset: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    fill: [{\n      type: Input,\n      args: [{\n        transform: booleanAttribute\n      }]\n    }],\n    placeholder: [{\n      type: Input,\n      args: [{\n        transform: booleanOrUrlAttribute\n      }]\n    }],\n    placeholderConfig: [{\n      type: Input\n    }],\n    src: [{\n      type: Input\n    }],\n    srcset: [{\n      type: Input\n    }]\n  });\n})();\n/***** Helpers *****/\n/**\n * Sorts provided config breakpoints and uses defaults.\n */\nfunction processConfig(config) {\n  let sortedBreakpoints = {};\n  if (config.breakpoints) {\n    sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);\n  }\n  return Object.assign({}, ɵIMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);\n}\n/***** Assert functions *****/\n/**\n * Verifies that there is no `src` set on a host element.\n */\nfunction assertNoConflictingSrc(dir) {\n  if (dir.src) {\n    throw new ɵRuntimeError(2950 /* RuntimeErrorCode.UNEXPECTED_SRC_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \\`src\\` and \\`ngSrc\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`src\\` itself based on the value of \\`ngSrc\\`. ` + `To fix this, please remove the \\`src\\` attribute.`);\n  }\n}\n/**\n * Verifies that there is no `srcset` set on a host element.\n */\nfunction assertNoConflictingSrcset(dir) {\n  if (dir.srcset) {\n    throw new ɵRuntimeError(2951 /* RuntimeErrorCode.UNEXPECTED_SRCSET_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \\`srcset\\` and \\`ngSrcset\\` have been set. ` + `Supplying both of these attributes breaks lazy loading. ` + `The NgOptimizedImage directive sets \\`srcset\\` itself based on the value of ` + `\\`ngSrcset\\`. To fix this, please remove the \\`srcset\\` attribute.`);\n  }\n}\n/**\n * Verifies that the `ngSrc` is not a Base64-encoded image.\n */\nfunction assertNotBase64Image(dir) {\n  let ngSrc = dir.ngSrc.trim();\n  if (ngSrc.startsWith('data:')) {\n    if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {\n      ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';\n    }\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`ngSrc\\` is a Base64-encoded string ` + `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a standard \\`src\\` attribute instead.`);\n  }\n}\n/**\n * Verifies that the 'sizes' only includes responsive values.\n */\nfunction assertNoComplexSizes(dir) {\n  let sizes = dir.sizes;\n  if (sizes?.match(/((\\)|,)\\s|^)\\d+px/)) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`sizes\\` was set to a string including ` + `pixel values. For automatic \\`srcset\\` generation, \\`sizes\\` must only include responsive ` + `values, such as \\`sizes=\"50vw\"\\` or \\`sizes=\"(min-width: 768px) 50vw, 100vw\"\\`. ` + `To fix this, modify the \\`sizes\\` attribute, or provide your own \\`ngSrcset\\` value directly.`);\n  }\n}\nfunction assertValidPlaceholder(dir, imageLoader) {\n  assertNoPlaceholderConfigWithoutPlaceholder(dir);\n  assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);\n  assertNoOversizedDataUrl(dir);\n}\n/**\n * Verifies that placeholderConfig isn't being used without placeholder\n */\nfunction assertNoPlaceholderConfigWithoutPlaceholder(dir) {\n  if (dir.placeholderConfig && !dir.placeholder) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \\`placeholderConfig\\` options were provided for an ` + `image that does not use the \\`placeholder\\` attribute, and will have no effect.`);\n  }\n}\n/**\n * Warns if a relative URL placeholder is specified, but no loader is present to provide the small\n * image.\n */\nfunction assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {\n  if (dir.placeholder === true && imageLoader === noopImageLoader) {\n    throw new ɵRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to true but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for the primary image and its placeholder. ` + `To fix this, provide a loader or remove the \\`placeholder\\` attribute from the image.`);\n  }\n}\n/**\n * Warns or throws an error if an oversized dataURL placeholder is provided.\n */\nfunction assertNoOversizedDataUrl(dir) {\n  if (dir.placeholder && typeof dir.placeholder === 'string' && dir.placeholder.startsWith('data:')) {\n    if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {\n      throw new ɵRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` + `a smaller data URL placeholder.`);\n    }\n    if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {\n      console.warn(ɵformatRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`placeholder\\` attribute is set to a data URL which is longer ` + `than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` + `directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` + `generate a smaller data URL placeholder.`));\n    }\n  }\n}\n/**\n * Verifies that the `ngSrc` is not a Blob URL.\n */\nfunction assertNotBlobUrl(dir) {\n  const ngSrc = dir.ngSrc.trim();\n  if (ngSrc.startsWith('blob:')) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrc\\` was set to a blob URL (${ngSrc}). ` + `Blob URLs are not supported by the NgOptimizedImage directive. ` + `To fix this, disable the NgOptimizedImage directive for this element ` + `by removing \\`ngSrc\\` and using a regular \\`src\\` attribute instead.`);\n  }\n}\n/**\n * Verifies that the input is set to a non-empty string.\n */\nfunction assertNonEmptyInput(dir, name, value) {\n  const isString = typeof value === 'string';\n  const isEmptyString = isString && value.trim() === '';\n  if (!isString || isEmptyString) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`${name}\\` has an invalid value ` + `(\\`${value}\\`). To fix this, change the value to a non-empty string.`);\n  }\n}\n/**\n * Verifies that the `ngSrcset` is in a valid format, e.g. \"100w, 200w\" or \"1x, 2x\".\n */\nfunction assertValidNgSrcset(dir, value) {\n  if (value == null) return;\n  assertNonEmptyInput(dir, 'ngSrcset', value);\n  const stringVal = value;\n  const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);\n  const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);\n  if (isValidDensityDescriptor) {\n    assertUnderDensityCap(dir, stringVal);\n  }\n  const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;\n  if (!isValidSrcset) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`ngSrcset\\` has an invalid value (\\`${value}\\`). ` + `To fix this, supply \\`ngSrcset\\` using a comma-separated list of one or more width ` + `descriptors (e.g. \"100w, 200w\") or density descriptors (e.g. \"1x, 2x\").`);\n  }\n}\nfunction assertUnderDensityCap(dir, value) {\n  const underDensityCap = value.split(',').every(num => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);\n  if (!underDensityCap) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` contains an unsupported image density:` + `\\`${value}\\`. NgOptimizedImage generally recommends a max image density of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` + `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` + `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` + `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);\n  }\n}\n/**\n * Creates a `RuntimeError` instance to represent a situation when an input is set after\n * the directive has initialized.\n */\nfunction postInitInputChangeError(dir, inputName) {\n  let reason;\n  if (inputName === 'width' || inputName === 'height') {\n    reason = `Changing \\`${inputName}\\` may result in different attribute value ` + `applied to the underlying image element and cause layout shifts on a page.`;\n  } else {\n    reason = `Changing the \\`${inputName}\\` would have no effect on the underlying ` + `image element, because the resource loading has already occurred.`;\n  }\n  return new ɵRuntimeError(2953 /* RuntimeErrorCode.UNEXPECTED_INPUT_CHANGE */, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` was updated after initialization. ` + `The NgOptimizedImage directive will not react to this input change. ${reason} ` + `To fix this, either switch \\`${inputName}\\` to a static value ` + `or wrap the image element in an @if that is gated on the necessary value.`);\n}\n/**\n * Verify that none of the listed inputs has changed.\n */\nfunction assertNoPostInitInputChange(dir, changes, inputs) {\n  inputs.forEach(input => {\n    const isUpdated = changes.hasOwnProperty(input);\n    if (isUpdated && !changes[input].isFirstChange()) {\n      if (input === 'ngSrc') {\n        // When the `ngSrc` input changes, we detect that only in the\n        // `ngOnChanges` hook, thus the `ngSrc` is already set. We use\n        // `ngSrc` in the error message, so we use a previous value, but\n        // not the updated one in it.\n        dir = {\n          ngSrc: changes[input].previousValue\n        };\n      }\n      throw postInitInputChangeError(dir, input);\n    }\n  });\n}\n/**\n * Verifies that a specified input is a number greater than 0.\n */\nfunction assertGreaterThanZero(dir, inputValue, inputName) {\n  const validNumber = typeof inputValue === 'number' && inputValue > 0;\n  const validString = typeof inputValue === 'string' && /^\\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;\n  if (!validNumber && !validString) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \\`${inputName}\\` has an invalid value. ` + `To fix this, provide \\`${inputName}\\` as a number greater than 0.`);\n  }\n}\n/**\n * Verifies that the rendered image is not visually distorted. Effectively this is checking:\n * - Whether the \"width\" and \"height\" attributes reflect the actual dimensions of the image.\n * - Whether image styling is \"correct\" (see below for a longer explanation).\n */\nfunction assertNoImageDistortion(dir, img, renderer) {\n  const callback = () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n    const computedStyle = window.getComputedStyle(img);\n    let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n    let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n    const boxSizing = computedStyle.getPropertyValue('box-sizing');\n    if (boxSizing === 'border-box') {\n      const paddingTop = computedStyle.getPropertyValue('padding-top');\n      const paddingRight = computedStyle.getPropertyValue('padding-right');\n      const paddingBottom = computedStyle.getPropertyValue('padding-bottom');\n      const paddingLeft = computedStyle.getPropertyValue('padding-left');\n      renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);\n      renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);\n    }\n    const renderedAspectRatio = renderedWidth / renderedHeight;\n    const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;\n    const intrinsicWidth = img.naturalWidth;\n    const intrinsicHeight = img.naturalHeight;\n    const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;\n    const suppliedWidth = dir.width;\n    const suppliedHeight = dir.height;\n    const suppliedAspectRatio = suppliedWidth / suppliedHeight;\n    // Tolerance is used to account for the impact of subpixel rendering.\n    // Due to subpixel rendering, the rendered, intrinsic, and supplied\n    // aspect ratios of a correctly configured image may not exactly match.\n    // For example, a `width=4030 height=3020` image might have a rendered\n    // size of \"1062w, 796.48h\". (An aspect ratio of 1.334... vs. 1.333...)\n    const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;\n    const stylingDistortion = nonZeroRenderedDimensions && Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;\n    if (inaccurateDimensions) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` + `the aspect ratio indicated by the width and height attributes. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nSupplied width and height attributes: ` + `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` + `\\nTo fix this, update the width and height attributes.`));\n    } else if (stylingDistortion) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` + `does not match the image's intrinsic aspect ratio. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` + `(aspect-ratio: ${round(intrinsicAspectRatio)}). \\nRendered image size: ` + `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` + `${round(renderedAspectRatio)}). \\nThis issue can occur if \"width\" and \"height\" ` + `attributes are added to an image without updating the corresponding ` + `image styling. To fix this, adjust image styling. In most cases, ` + `adding \"height: auto\" or \"width: auto\" to the image styling will fix ` + `this issue.`));\n    } else if (!dir.ngSrcset && nonZeroRenderedDimensions) {\n      // If `ngSrcset` hasn't been set, sanity check the intrinsic size.\n      const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;\n      const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;\n      const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;\n      const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;\n      if (oversizedWidth || oversizedHeight) {\n        console.warn(ɵformatRuntimeError(2960 /* RuntimeErrorCode.OVERSIZED_IMAGE */, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` + `larger than necessary. ` + `\\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` + `\\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` + `\\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` + `\\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` + `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` + `or consider using the \"ngSrcset\" and \"sizes\" attributes.`));\n      }\n    }\n  };\n  const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n  // We only listen to the `error` event to remove the `load` event listener because it will not be\n  // fired if the image fails to load. This is done to prevent memory leaks in development mode\n  // because image elements aren't garbage-collected properly. It happens because zone.js stores the\n  // event listener directly on the element and closures capture `dir`.\n  const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n  });\n  callOnLoadIfImageIsLoaded(img, callback);\n}\n/**\n * Verifies that a specified input is set.\n */\nfunction assertNonEmptyWidthAndHeight(dir) {\n  let missingAttributes = [];\n  if (dir.width === undefined) missingAttributes.push('width');\n  if (dir.height === undefined) missingAttributes.push('height');\n  if (missingAttributes.length > 0) {\n    throw new ɵRuntimeError(2954 /* RuntimeErrorCode.REQUIRED_INPUT_MISSING */, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` + `are missing: ${missingAttributes.map(attr => `\"${attr}\"`).join(', ')}. ` + `Including \"width\" and \"height\" attributes will prevent image-related layout shifts. ` + `To fix this, include \"width\" and \"height\" attributes on the image tag or turn on ` + `\"fill\" mode with the \\`fill\\` attribute.`);\n  }\n}\n/**\n * Verifies that width and height are not set. Used in fill mode, where those attributes don't make\n * sense.\n */\nfunction assertEmptyWidthAndHeight(dir) {\n  if (dir.width || dir.height) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the attributes \\`height\\` and/or \\`width\\` are present ` + `along with the \\`fill\\` attribute. Because \\`fill\\` mode causes an image to fill its containing ` + `element, the size attributes have no effect and should be removed.`);\n  }\n}\n/**\n * Verifies that the rendered image has a nonzero height. If the image is in fill mode, provides\n * guidance that this can be caused by the containing element's CSS position property.\n */\nfunction assertNonZeroRenderedHeight(dir, img, renderer) {\n  const callback = () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n    const renderedHeight = img.clientHeight;\n    if (dir.fill && renderedHeight === 0) {\n      console.warn(ɵformatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` + `This is likely because the containing element does not have the CSS 'position' ` + `property set to one of the following: \"relative\", \"fixed\", or \"absolute\". ` + `To fix this problem, make sure the container element has the CSS 'position' ` + `property defined and the height of the element is not zero.`));\n    }\n  };\n  const removeLoadListenerFn = renderer.listen(img, 'load', callback);\n  // See comments in the `assertNoImageDistortion`.\n  const removeErrorListenerFn = renderer.listen(img, 'error', () => {\n    removeLoadListenerFn();\n    removeErrorListenerFn();\n  });\n  callOnLoadIfImageIsLoaded(img, callback);\n}\n/**\n * Verifies that the `loading` attribute is set to a valid input &\n * is not used on priority images.\n */\nfunction assertValidLoadingInput(dir) {\n  if (dir.loading && dir.priority) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `was used on an image that was marked \"priority\". ` + `Setting \\`loading\\` on priority images is not allowed ` + `because these images will always be eagerly loaded. ` + `To fix this, remove the “loading” attribute from the priority image.`);\n  }\n  const validInputs = ['auto', 'eager', 'lazy'];\n  if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {\n    throw new ɵRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loading\\` attribute ` + `has an invalid value (\\`${dir.loading}\\`). ` + `To fix this, provide a valid value (\"lazy\", \"eager\", or \"auto\").`);\n  }\n}\n/**\n * Warns if NOT using a loader (falling back to the generic loader) and\n * the image appears to be hosted on one of the image CDNs for which\n * we do have a built-in image loader. Suggests switching to the\n * built-in loader.\n *\n * @param ngSrc Value of the ngSrc attribute\n * @param imageLoader ImageLoader provided\n */\nfunction assertNotMissingBuiltInLoader(ngSrc, imageLoader) {\n  if (imageLoader === noopImageLoader) {\n    let builtInLoaderName = '';\n    for (const loader of BUILT_IN_LOADERS) {\n      if (loader.testUrl(ngSrc)) {\n        builtInLoaderName = loader.name;\n        break;\n      }\n    }\n    if (builtInLoaderName) {\n      console.warn(ɵformatRuntimeError(2962 /* RuntimeErrorCode.MISSING_BUILTIN_LOADER */, `NgOptimizedImage: It looks like your images may be hosted on the ` + `${builtInLoaderName} CDN, but your app is not using Angular's ` + `built-in loader for that CDN. We recommend switching to use ` + `the built-in by calling \\`provide${builtInLoaderName}Loader()\\` ` + `in your \\`providers\\` and passing it your instance's base URL. ` + `If you don't want to use the built-in loader, define a custom ` + `loader function using IMAGE_LOADER to silence this warning.`));\n    }\n  }\n}\n/**\n * Warns if ngSrcset is present and no loader is configured (i.e. the default one is being used).\n */\nfunction assertNoNgSrcsetWithoutLoader(dir, imageLoader) {\n  if (dir.ngSrcset && imageLoader === noopImageLoader) {\n    console.warn(ɵformatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`ngSrcset\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which would result in the same image being used for all configured sizes. ` + `To fix this, provide a loader or remove the \\`ngSrcset\\` attribute from the image.`));\n  }\n}\n/**\n * Warns if loaderParams is present and no loader is configured (i.e. the default one is being\n * used).\n */\nfunction assertNoLoaderParamsWithoutLoader(dir, imageLoader) {\n  if (dir.loaderParams && imageLoader === noopImageLoader) {\n    console.warn(ɵformatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \\`loaderParams\\` attribute is present but ` + `no image loader is configured (i.e. the default one is being used), ` + `which means that the loaderParams data will not be consumed and will not affect the URL. ` + `To fix this, provide a custom loader or remove the \\`loaderParams\\` attribute from the image.`));\n  }\n}\n/**\n * Warns if the priority attribute is used too often on page load\n */\nasync function assetPriorityCountBelowThreshold(appRef) {\n  if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {\n    IMGS_WITH_PRIORITY_ATTR_COUNT++;\n    await appRef.whenStable();\n    if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {\n      console.warn(ɵformatRuntimeError(2966 /* RuntimeErrorCode.TOO_MANY_PRIORITY_ATTRIBUTES */, `NgOptimizedImage: The \"priority\" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` + `Marking too many images as \"high\" priority can hurt your application's LCP (https://web.dev/lcp). ` + `\"Priority\" should only be set on the image expected to be the page's LCP element.`));\n    }\n  } else {\n    IMGS_WITH_PRIORITY_ATTR_COUNT++;\n  }\n}\n/**\n * Warns if placeholder's dimension are over a threshold.\n *\n * This assert function is meant to only run on the browser.\n */\nfunction assertPlaceholderDimensions(dir, imgElement) {\n  const computedStyle = window.getComputedStyle(imgElement);\n  let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));\n  let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));\n  if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {\n    console.warn(ɵformatRuntimeError(2967 /* RuntimeErrorCode.PLACEHOLDER_DIMENSION_LIMIT_EXCEEDED */, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` + `of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` + `To fix this, use a smaller image as a placeholder.`));\n  }\n}\nfunction callOnLoadIfImageIsLoaded(img, callback) {\n  // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-complete\n  // The spec defines that `complete` is truthy once its request state is fully available.\n  // The image may already be available if it’s loaded from the browser cache.\n  // In that case, the `load` event will not fire at all, meaning that all setup\n  // callbacks listening for the `load` event will not be invoked.\n  // In Safari, there is a known behavior where the `complete` property of an\n  // `HTMLImageElement` may sometimes return `true` even when the image is not fully loaded.\n  // Checking both `img.complete` and `img.naturalWidth` is the most reliable way to\n  // determine if an image has been fully loaded, especially in browsers where the\n  // `complete` property may return `true` prematurely.\n  if (img.complete && img.naturalWidth) {\n    callback();\n  }\n}\nfunction round(input) {\n  return Number.isInteger(input) ? input : input.toFixed(2);\n}\n// Transform function to handle SafeValue input for ngSrc. This doesn't do any sanitization,\n// as that is not needed for img.src and img.srcset. This transform is purely for compatibility.\nfunction unwrapSafeUrl(value) {\n  if (typeof value === 'string') {\n    return value;\n  }\n  return ɵunwrapSafeValue(value);\n}\n// Transform function to handle inputs which may be booleans, strings, or string representations\n// of boolean values. Used for the placeholder attribute.\nfunction booleanOrUrlAttribute(value) {\n  if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {\n    return value;\n  }\n  return booleanAttribute(value);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { APP_BASE_HREF, AsyncPipe, BrowserPlatformLocation, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE, DOCUMENT, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, IMAGE_LOADER, JsonPipe, KeyValuePipe, LOCATION_INITIALIZED, Location, LocationStrategy, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf as NgFor, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgOptimizedImage, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PRECONNECT_CHECK_BLOCKLIST, PathLocationStrategy, PercentPipe, PlatformLocation, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, VERSION, ViewportScroller, WeekDay, XhrFactory, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits, isPlatformBrowser, isPlatformServer, provideCloudflareLoader, provideCloudinaryLoader, provideImageKitLoader, provideImgixLoader, provideNetlifyLoader, registerLocaleData, DomAdapter as ɵDomAdapter, NullViewportScroller as ɵNullViewportScroller, PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, PlatformNavigation as ɵPlatformNavigation, getDOM as ɵgetDOM, normalizeQueryParams as ɵnormalizeQueryParams, parseCookieValue as ɵparseCookieValue, setRootDomAdapter as ɵsetRootDomAdapter };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, NgZone, runInInjectionContext, InjectionToken, ɵPendingTasksInternal, PLATFORM_ID, ɵConsole, ɵformatRuntimeError, Inject, ɵRuntimeError, makeEnvironmentProviders, NgModule, TransferState, makeStateKey, ɵperformanceMarkFeature, APP_BOOTSTRAP_LISTENER, ApplicationRef, ɵtruncateMiddle } from '@angular/core';\nimport { of, Observable, from } from 'rxjs';\nimport { concatMap, filter, map, finalize, switchMap, tap } from 'rxjs/operators';\nimport * as i1 from '@angular/common';\nimport { isPlatformServer, DOCUMENT, ɵparseCookieValue } from '@angular/common';\n\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * @publicApi\n */\nclass HttpHandler {}\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * @publicApi\n */\nclass HttpBackend {}\n\n/**\n * Represents the header configuration options for an HTTP request.\n * Instances are immutable. Modifying methods return a cloned\n * instance with the change. The original object is never changed.\n *\n * @publicApi\n */\nclass HttpHeaders {\n  /**\n   * Internal map of lowercase header names to values.\n   */\n  // TODO(issue/24571): remove '!'.\n  headers;\n  /**\n   * Internal map of lowercased header names to the normalized\n   * form of the name (the form seen first).\n   */\n  normalizedNames = new Map();\n  /**\n   * Complete the lazy initialization of this object (needed before reading).\n   */\n  lazyInit;\n  /**\n   * Queued updates to be materialized the next initialization.\n   */\n  lazyUpdate = null;\n  /**  Constructs a new HTTP header object with the given values.*/\n  constructor(headers) {\n    if (!headers) {\n      this.headers = new Map();\n    } else if (typeof headers === 'string') {\n      this.lazyInit = () => {\n        this.headers = new Map();\n        headers.split('\\n').forEach(line => {\n          const index = line.indexOf(':');\n          if (index > 0) {\n            const name = line.slice(0, index);\n            const value = line.slice(index + 1).trim();\n            this.addHeaderEntry(name, value);\n          }\n        });\n      };\n    } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n      this.headers = new Map();\n      headers.forEach((value, name) => {\n        this.addHeaderEntry(name, value);\n      });\n    } else {\n      this.lazyInit = () => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          assertValidHeaders(headers);\n        }\n        this.headers = new Map();\n        Object.entries(headers).forEach(([name, values]) => {\n          this.setHeaderEntries(name, values);\n        });\n      };\n    }\n  }\n  /**\n   * Checks for existence of a given header.\n   *\n   * @param name The header name to check for existence.\n   *\n   * @returns True if the header exists, false otherwise.\n   */\n  has(name) {\n    this.init();\n    return this.headers.has(name.toLowerCase());\n  }\n  /**\n   * Retrieves the first value of a given header.\n   *\n   * @param name The header name.\n   *\n   * @returns The value string if the header exists, null otherwise\n   */\n  get(name) {\n    this.init();\n    const values = this.headers.get(name.toLowerCase());\n    return values && values.length > 0 ? values[0] : null;\n  }\n  /**\n   * Retrieves the names of the headers.\n   *\n   * @returns A list of header names.\n   */\n  keys() {\n    this.init();\n    return Array.from(this.normalizedNames.values());\n  }\n  /**\n   * Retrieves a list of values for a given header.\n   *\n   * @param name The header name from which to retrieve values.\n   *\n   * @returns A string of values if the header exists, null otherwise.\n   */\n  getAll(name) {\n    this.init();\n    return this.headers.get(name.toLowerCase()) || null;\n  }\n  /**\n   * Appends a new value to the existing set of values for a header\n   * and returns them in a clone of the original instance.\n   *\n   * @param name The header name for which to append the values.\n   * @param value The value to append.\n   *\n   * @returns A clone of the HTTP headers object with the value appended to the given header.\n   */\n  append(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 'a'\n    });\n  }\n  /**\n   * Sets or modifies a value for a given header in a clone of the original instance.\n   * If the header already exists, its value is replaced with the given value\n   * in the returned object.\n   *\n   * @param name The header name.\n   * @param value The value or values to set or override for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the newly set header value.\n   */\n  set(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 's'\n    });\n  }\n  /**\n   * Deletes values for a given header in a clone of the original instance.\n   *\n   * @param name The header name.\n   * @param value The value or values to delete for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the given value deleted.\n   */\n  delete(name, value) {\n    return this.clone({\n      name,\n      value,\n      op: 'd'\n    });\n  }\n  maybeSetNormalizedName(name, lcName) {\n    if (!this.normalizedNames.has(lcName)) {\n      this.normalizedNames.set(lcName, name);\n    }\n  }\n  init() {\n    if (!!this.lazyInit) {\n      if (this.lazyInit instanceof HttpHeaders) {\n        this.copyFrom(this.lazyInit);\n      } else {\n        this.lazyInit();\n      }\n      this.lazyInit = null;\n      if (!!this.lazyUpdate) {\n        this.lazyUpdate.forEach(update => this.applyUpdate(update));\n        this.lazyUpdate = null;\n      }\n    }\n  }\n  copyFrom(other) {\n    other.init();\n    Array.from(other.headers.keys()).forEach(key => {\n      this.headers.set(key, other.headers.get(key));\n      this.normalizedNames.set(key, other.normalizedNames.get(key));\n    });\n  }\n  clone(update) {\n    const clone = new HttpHeaders();\n    clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n    return clone;\n  }\n  applyUpdate(update) {\n    const key = update.name.toLowerCase();\n    switch (update.op) {\n      case 'a':\n      case 's':\n        let value = update.value;\n        if (typeof value === 'string') {\n          value = [value];\n        }\n        if (value.length === 0) {\n          return;\n        }\n        this.maybeSetNormalizedName(update.name, key);\n        const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n        base.push(...value);\n        this.headers.set(key, base);\n        break;\n      case 'd':\n        const toDelete = update.value;\n        if (!toDelete) {\n          this.headers.delete(key);\n          this.normalizedNames.delete(key);\n        } else {\n          let existing = this.headers.get(key);\n          if (!existing) {\n            return;\n          }\n          existing = existing.filter(value => toDelete.indexOf(value) === -1);\n          if (existing.length === 0) {\n            this.headers.delete(key);\n            this.normalizedNames.delete(key);\n          } else {\n            this.headers.set(key, existing);\n          }\n        }\n        break;\n    }\n  }\n  addHeaderEntry(name, value) {\n    const key = name.toLowerCase();\n    this.maybeSetNormalizedName(name, key);\n    if (this.headers.has(key)) {\n      this.headers.get(key).push(value);\n    } else {\n      this.headers.set(key, [value]);\n    }\n  }\n  setHeaderEntries(name, values) {\n    const headerValues = (Array.isArray(values) ? values : [values]).map(value => value.toString());\n    const key = name.toLowerCase();\n    this.headers.set(key, headerValues);\n    this.maybeSetNormalizedName(name, key);\n  }\n  /**\n   * @internal\n   */\n  forEach(fn) {\n    this.init();\n    Array.from(this.normalizedNames.keys()).forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n  }\n}\n/**\n * Verifies that the headers object has the right shape: the values\n * must be either strings, numbers or arrays. Throws an error if an invalid\n * header value is present.\n */\nfunction assertValidHeaders(headers) {\n  for (const [key, value] of Object.entries(headers)) {\n    if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n      throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` + `Expecting either a string, a number or an array, but got: \\`${value}\\`.`);\n    }\n  }\n}\n\n/**\n * Provides encoding and decoding of URL parameter and query-string values.\n *\n * Serializes and parses URL parameter keys and values to encode and decode them.\n * If you pass URL query parameters without encoding,\n * the query parameters can be misinterpreted at the receiving end.\n *\n *\n * @publicApi\n */\nclass HttpUrlEncodingCodec {\n  /**\n   * Encodes a key name for a URL parameter or query-string.\n   * @param key The key name.\n   * @returns The encoded key name.\n   */\n  encodeKey(key) {\n    return standardEncoding(key);\n  }\n  /**\n   * Encodes the value of a URL parameter or query-string.\n   * @param value The value.\n   * @returns The encoded value.\n   */\n  encodeValue(value) {\n    return standardEncoding(value);\n  }\n  /**\n   * Decodes an encoded URL parameter or query-string key.\n   * @param key The encoded key name.\n   * @returns The decoded key name.\n   */\n  decodeKey(key) {\n    return decodeURIComponent(key);\n  }\n  /**\n   * Decodes an encoded URL parameter or query-string value.\n   * @param value The encoded value.\n   * @returns The decoded value.\n   */\n  decodeValue(value) {\n    return decodeURIComponent(value);\n  }\n}\nfunction paramParser(rawParams, codec) {\n  const map = new Map();\n  if (rawParams.length > 0) {\n    // The `window.location.search` can be used while creating an instance of the `HttpParams` class\n    // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search`\n    // may start with the `?` char, so we strip it if it's present.\n    const params = rawParams.replace(/^\\?/, '').split('&');\n    params.forEach(param => {\n      const eqIdx = param.indexOf('=');\n      const [key, val] = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n      const list = map.get(key) || [];\n      list.push(val);\n      map.set(key, list);\n    });\n  }\n  return map;\n}\n/**\n * Encode input string with standard encodeURIComponent and then un-encode specific characters.\n */\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n  '40': '@',\n  '3A': ':',\n  '24': '$',\n  '2C': ',',\n  '3B': ';',\n  '3D': '=',\n  '3F': '?',\n  '2F': '/'\n};\nfunction standardEncoding(v) {\n  return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n  return `${value}`;\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable; all mutation operations return a new instance.\n *\n * @publicApi\n */\nclass HttpParams {\n  map;\n  encoder;\n  updates = null;\n  cloneFrom = null;\n  constructor(options = {}) {\n    this.encoder = options.encoder || new HttpUrlEncodingCodec();\n    if (!!options.fromString) {\n      if (!!options.fromObject) {\n        throw new Error(`Cannot specify both fromString and fromObject.`);\n      }\n      this.map = paramParser(options.fromString, this.encoder);\n    } else if (!!options.fromObject) {\n      this.map = new Map();\n      Object.keys(options.fromObject).forEach(key => {\n        const value = options.fromObject[key];\n        // convert the values to strings\n        const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n        this.map.set(key, values);\n      });\n    } else {\n      this.map = null;\n    }\n  }\n  /**\n   * Reports whether the body includes one or more values for a given parameter.\n   * @param param The parameter name.\n   * @returns True if the parameter has one or more values,\n   * false if it has no value or is not present.\n   */\n  has(param) {\n    this.init();\n    return this.map.has(param);\n  }\n  /**\n   * Retrieves the first value for a parameter.\n   * @param param The parameter name.\n   * @returns The first value of the given parameter,\n   * or `null` if the parameter is not present.\n   */\n  get(param) {\n    this.init();\n    const res = this.map.get(param);\n    return !!res ? res[0] : null;\n  }\n  /**\n   * Retrieves all values for a  parameter.\n   * @param param The parameter name.\n   * @returns All values in a string array,\n   * or `null` if the parameter not present.\n   */\n  getAll(param) {\n    this.init();\n    return this.map.get(param) || null;\n  }\n  /**\n   * Retrieves all the parameters for this body.\n   * @returns The parameter names in a string array.\n   */\n  keys() {\n    this.init();\n    return Array.from(this.map.keys());\n  }\n  /**\n   * Appends a new value to existing values for a parameter.\n   * @param param The parameter name.\n   * @param value The new value to add.\n   * @return A new body with the appended value.\n   */\n  append(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 'a'\n    });\n  }\n  /**\n   * Constructs a new body with appended values for the given parameter name.\n   * @param params parameters and values\n   * @return A new body with the new value.\n   */\n  appendAll(params) {\n    const updates = [];\n    Object.keys(params).forEach(param => {\n      const value = params[param];\n      if (Array.isArray(value)) {\n        value.forEach(_value => {\n          updates.push({\n            param,\n            value: _value,\n            op: 'a'\n          });\n        });\n      } else {\n        updates.push({\n          param,\n          value: value,\n          op: 'a'\n        });\n      }\n    });\n    return this.clone(updates);\n  }\n  /**\n   * Replaces the value for a parameter.\n   * @param param The parameter name.\n   * @param value The new value.\n   * @return A new body with the new value.\n   */\n  set(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 's'\n    });\n  }\n  /**\n   * Removes a given value or all values from a parameter.\n   * @param param The parameter name.\n   * @param value The value to remove, if provided.\n   * @return A new body with the given value removed, or with all values\n   * removed if no value is specified.\n   */\n  delete(param, value) {\n    return this.clone({\n      param,\n      value,\n      op: 'd'\n    });\n  }\n  /**\n   * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are\n   * separated by `&`s.\n   */\n  toString() {\n    this.init();\n    return this.keys().map(key => {\n      const eKey = this.encoder.encodeKey(key);\n      // `a: ['1']` produces `'a=1'`\n      // `b: []` produces `''`\n      // `c: ['1', '2']` produces `'c=1&c=2'`\n      return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value)).join('&');\n    })\n    // filter out empty values because `b: []` produces `''`\n    // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't\n    .filter(param => param !== '').join('&');\n  }\n  clone(update) {\n    const clone = new HttpParams({\n      encoder: this.encoder\n    });\n    clone.cloneFrom = this.cloneFrom || this;\n    clone.updates = (this.updates || []).concat(update);\n    return clone;\n  }\n  init() {\n    if (this.map === null) {\n      this.map = new Map();\n    }\n    if (this.cloneFrom !== null) {\n      this.cloneFrom.init();\n      this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n      this.updates.forEach(update => {\n        switch (update.op) {\n          case 'a':\n          case 's':\n            const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n            base.push(valueToString(update.value));\n            this.map.set(update.param, base);\n            break;\n          case 'd':\n            if (update.value !== undefined) {\n              let base = this.map.get(update.param) || [];\n              const idx = base.indexOf(valueToString(update.value));\n              if (idx !== -1) {\n                base.splice(idx, 1);\n              }\n              if (base.length > 0) {\n                this.map.set(update.param, base);\n              } else {\n                this.map.delete(update.param);\n              }\n            } else {\n              this.map.delete(update.param);\n              break;\n            }\n        }\n      });\n      this.cloneFrom = this.updates = null;\n    }\n  }\n}\n\n/**\n * A token used to manipulate and access values stored in `HttpContext`.\n *\n * @publicApi\n */\nclass HttpContextToken {\n  defaultValue;\n  constructor(defaultValue) {\n    this.defaultValue = defaultValue;\n  }\n}\n/**\n * Http context stores arbitrary user defined values and ensures type safety without\n * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash.\n *\n * This context is mutable and is shared between cloned requests unless explicitly specified.\n *\n * @usageNotes\n *\n * ### Usage Example\n *\n * ```ts\n * // inside cache.interceptors.ts\n * export const IS_CACHE_ENABLED = new HttpContextToken<boolean>(() => false);\n *\n * export class CacheInterceptor implements HttpInterceptor {\n *\n *   intercept(req: HttpRequest<any>, delegate: HttpHandler): Observable<HttpEvent<any>> {\n *     if (req.context.get(IS_CACHE_ENABLED) === true) {\n *       return ...;\n *     }\n *     return delegate.handle(req);\n *   }\n * }\n *\n * // inside a service\n *\n * this.httpClient.get('/api/weather', {\n *   context: new HttpContext().set(IS_CACHE_ENABLED, true)\n * }).subscribe(...);\n * ```\n *\n * @publicApi\n */\nclass HttpContext {\n  map = new Map();\n  /**\n   * Store a value in the context. If a value is already present it will be overwritten.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   * @param value The value to store.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  set(token, value) {\n    this.map.set(token, value);\n    return this;\n  }\n  /**\n   * Retrieve the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns The stored value or default if one is defined.\n   */\n  get(token) {\n    if (!this.map.has(token)) {\n      this.map.set(token, token.defaultValue());\n    }\n    return this.map.get(token);\n  }\n  /**\n   * Delete the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  delete(token) {\n    this.map.delete(token);\n    return this;\n  }\n  /**\n   * Checks for existence of a given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns True if the token exists, false otherwise.\n   */\n  has(token) {\n    return this.map.has(token);\n  }\n  /**\n   * @returns a list of tokens currently stored in the context.\n   */\n  keys() {\n    return this.map.keys();\n  }\n}\n\n/**\n * Determine whether the given HTTP method may include a body.\n */\nfunction mightHaveBody(method) {\n  switch (method) {\n    case 'DELETE':\n    case 'GET':\n    case 'HEAD':\n    case 'OPTIONS':\n    case 'JSONP':\n      return false;\n    default:\n      return true;\n  }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n */\nfunction isArrayBuffer(value) {\n  return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n */\nfunction isBlob(value) {\n  return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n */\nfunction isFormData(value) {\n  return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * Safely assert whether the given value is a URLSearchParams instance.\n *\n * In some execution environments URLSearchParams is not defined.\n */\nfunction isUrlSearchParams(value) {\n  return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * @publicApi\n */\nclass HttpRequest {\n  url;\n  /**\n   * The request body, or `null` if one isn't set.\n   *\n   * Bodies are not enforced to be immutable, as they can include a reference to any\n   * user-defined data type. However, interceptors should take care to preserve\n   * idempotence by treating them as such.\n   */\n  body = null;\n  /**\n   * Outgoing headers for this request.\n   */\n  // TODO(issue/24571): remove '!'.\n  headers;\n  /**\n   * Shared and mutable context that can be used by interceptors\n   */\n  context;\n  /**\n   * Whether this request should be made in a way that exposes progress events.\n   *\n   * Progress events are expensive (change detection runs on each event) and so\n   * they should only be requested if the consumer intends to monitor them.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  reportProgress = false;\n  /**\n   * Whether this request should be sent with outgoing credentials (cookies).\n   */\n  withCredentials = false;\n  /**\n   * The expected response type of the server.\n   *\n   * This is used to parse the response appropriately before returning it to\n   * the requestee.\n   */\n  responseType = 'json';\n  /**\n   * The outgoing HTTP request method.\n   */\n  method;\n  /**\n   * Outgoing URL parameters.\n   *\n   * To pass a string representation of HTTP parameters in the URL-query-string format,\n   * the `HttpParamsOptions`' `fromString` may be used. For example:\n   *\n   * ```\n   * new HttpParams({fromString: 'angular=awesome'})\n   * ```\n   */\n  // TODO(issue/24571): remove '!'.\n  params;\n  /**\n   * The outgoing URL with all URL parameters set.\n   */\n  urlWithParams;\n  /**\n   * The HttpTransferCache option for the request\n   */\n  transferCache;\n  constructor(method, url, third, fourth) {\n    this.url = url;\n    this.method = method.toUpperCase();\n    // Next, need to figure out which argument holds the HttpRequestInit\n    // options, if any.\n    let options;\n    // Check whether a body argument is expected. The only valid way to omit\n    // the body argument is to use a known no-body method like GET.\n    if (mightHaveBody(this.method) || !!fourth) {\n      // Body is the third argument, options are the fourth.\n      this.body = third !== undefined ? third : null;\n      options = fourth;\n    } else {\n      // No body required, options are the third argument. The body stays null.\n      options = third;\n    }\n    // If options have been passed, interpret them.\n    if (options) {\n      // Normalize reportProgress and withCredentials.\n      this.reportProgress = !!options.reportProgress;\n      this.withCredentials = !!options.withCredentials;\n      // Override default response type of 'json' if one is provided.\n      if (!!options.responseType) {\n        this.responseType = options.responseType;\n      }\n      // Override headers if they're provided.\n      if (!!options.headers) {\n        this.headers = options.headers;\n      }\n      if (!!options.context) {\n        this.context = options.context;\n      }\n      if (!!options.params) {\n        this.params = options.params;\n      }\n      // We do want to assign transferCache even if it's falsy (false is valid value)\n      this.transferCache = options.transferCache;\n    }\n    // If no headers have been passed in, construct a new HttpHeaders instance.\n    this.headers ??= new HttpHeaders();\n    // If no context have been passed in, construct a new HttpContext instance.\n    this.context ??= new HttpContext();\n    // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n    if (!this.params) {\n      this.params = new HttpParams();\n      this.urlWithParams = url;\n    } else {\n      // Encode the parameters to a string in preparation for inclusion in the URL.\n      const params = this.params.toString();\n      if (params.length === 0) {\n        // No parameters, the visible URL is just the URL given at creation time.\n        this.urlWithParams = url;\n      } else {\n        // Does the URL already have query parameters? Look for '?'.\n        const qIdx = url.indexOf('?');\n        // There are 3 cases to handle:\n        // 1) No existing parameters -> append '?' followed by params.\n        // 2) '?' exists and is followed by existing query string ->\n        //    append '&' followed by params.\n        // 3) '?' exists at the end of the url -> append params directly.\n        // This basically amounts to determining the character, if any, with\n        // which to join the URL and parameters.\n        const sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n        this.urlWithParams = url + sep + params;\n      }\n    }\n  }\n  /**\n   * Transform the free-form body into a serialized format suitable for\n   * transmission to the server.\n   */\n  serializeBody() {\n    // If no body is present, no need to serialize it.\n    if (this.body === null) {\n      return null;\n    }\n    // Check whether the body is already in a serialized form. If so,\n    // it can just be returned directly.\n    if (typeof this.body === 'string' || isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || isUrlSearchParams(this.body)) {\n      return this.body;\n    }\n    // Check whether the body is an instance of HttpUrlEncodedParams.\n    if (this.body instanceof HttpParams) {\n      return this.body.toString();\n    }\n    // Check whether the body is an object or array, and serialize with JSON if so.\n    if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {\n      return JSON.stringify(this.body);\n    }\n    // Fall back on toString() for everything else.\n    return this.body.toString();\n  }\n  /**\n   * Examine the body and attempt to infer an appropriate MIME type\n   * for it.\n   *\n   * If no such type can be inferred, this method will return `null`.\n   */\n  detectContentTypeHeader() {\n    // An empty body has no content type.\n    if (this.body === null) {\n      return null;\n    }\n    // FormData bodies rely on the browser's content type assignment.\n    if (isFormData(this.body)) {\n      return null;\n    }\n    // Blobs usually have their own content type. If it doesn't, then\n    // no type can be inferred.\n    if (isBlob(this.body)) {\n      return this.body.type || null;\n    }\n    // Array buffers have unknown contents and thus no type can be inferred.\n    if (isArrayBuffer(this.body)) {\n      return null;\n    }\n    // Technically, strings could be a form of JSON data, but it's safe enough\n    // to assume they're plain strings.\n    if (typeof this.body === 'string') {\n      return 'text/plain';\n    }\n    // `HttpUrlEncodedParams` has its own content-type.\n    if (this.body instanceof HttpParams) {\n      return 'application/x-www-form-urlencoded;charset=UTF-8';\n    }\n    // Arrays, objects, boolean and numbers will be encoded as JSON.\n    if (typeof this.body === 'object' || typeof this.body === 'number' || typeof this.body === 'boolean') {\n      return 'application/json';\n    }\n    // No type could be inferred.\n    return null;\n  }\n  clone(update = {}) {\n    // For method, url, and responseType, take the current value unless\n    // it is overridden in the update hash.\n    const method = update.method || this.method;\n    const url = update.url || this.url;\n    const responseType = update.responseType || this.responseType;\n    // Carefully handle the transferCache to differentiate between\n    // `false` and `undefined` in the update args.\n    const transferCache = update.transferCache ?? this.transferCache;\n    // The body is somewhat special - a `null` value in update.body means\n    // whatever current body is present is being overridden with an empty\n    // body, whereas an `undefined` value in update.body implies no\n    // override.\n    const body = update.body !== undefined ? update.body : this.body;\n    // Carefully handle the boolean options to differentiate between\n    // `false` and `undefined` in the update args.\n    const withCredentials = update.withCredentials ?? this.withCredentials;\n    const reportProgress = update.reportProgress ?? this.reportProgress;\n    // Headers and params may be appended to if `setHeaders` or\n    // `setParams` are used.\n    let headers = update.headers || this.headers;\n    let params = update.params || this.params;\n    // Pass on context if needed\n    const context = update.context ?? this.context;\n    // Check whether the caller has asked to add headers.\n    if (update.setHeaders !== undefined) {\n      // Set every requested header.\n      headers = Object.keys(update.setHeaders).reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n    }\n    // Check whether the caller has asked to set params.\n    if (update.setParams) {\n      // Set every requested param.\n      params = Object.keys(update.setParams).reduce((params, param) => params.set(param, update.setParams[param]), params);\n    }\n    // Finally, construct the new HttpRequest using the pieces from above.\n    return new HttpRequest(method, url, body, {\n      params,\n      headers,\n      context,\n      reportProgress,\n      responseType,\n      withCredentials,\n      transferCache\n    });\n  }\n}\n\n/**\n * Type enumeration for the different kinds of `HttpEvent`.\n *\n * @publicApi\n */\nvar HttpEventType;\n(function (HttpEventType) {\n  /**\n   * The request was sent out over the wire.\n   */\n  HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n  /**\n   * An upload progress event was received.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n  /**\n   * The response status code and headers were received.\n   */\n  HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n  /**\n   * A download progress event was received.\n   */\n  HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n  /**\n   * The full response including the body was received.\n   */\n  HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n  /**\n   * A custom event from an interceptor or a backend.\n   */\n  HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n})(HttpEventType || (HttpEventType = {}));\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * @publicApi\n */\nclass HttpResponseBase {\n  /**\n   * All response headers.\n   */\n  headers;\n  /**\n   * Response status code.\n   */\n  status;\n  /**\n   * Textual description of response status code, defaults to OK.\n   *\n   * Do not depend on this.\n   */\n  statusText;\n  /**\n   * URL of the resource retrieved, or null if not available.\n   */\n  url;\n  /**\n   * Whether the status code falls in the 2xx range.\n   */\n  ok;\n  /**\n   * Type of the response, narrowed to either the full response or the header.\n   */\n  // TODO(issue/24571): remove '!'.\n  type;\n  /**\n   * Super-constructor for all responses.\n   *\n   * The single parameter accepted is an initialization hash. Any properties\n   * of the response passed there will override the default values.\n   */\n  constructor(init, defaultStatus = 200, defaultStatusText = 'OK') {\n    // If the hash has values passed, use them to initialize the response.\n    // Otherwise use the default values.\n    this.headers = init.headers || new HttpHeaders();\n    this.status = init.status !== undefined ? init.status : defaultStatus;\n    this.statusText = init.statusText || defaultStatusText;\n    this.url = init.url || null;\n    // Cache the ok value to avoid defining a getter.\n    this.ok = this.status >= 200 && this.status < 300;\n  }\n}\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * @publicApi\n */\nclass HttpHeaderResponse extends HttpResponseBase {\n  /**\n   * Create a new `HttpHeaderResponse` with the given parameters.\n   */\n  constructor(init = {}) {\n    super(init);\n  }\n  type = HttpEventType.ResponseHeader;\n  /**\n   * Copy this `HttpHeaderResponse`, overriding its contents with the\n   * given parameter hash.\n   */\n  clone(update = {}) {\n    // Perform a straightforward initialization of the new HttpHeaderResponse,\n    // overriding the current parameters with new ones if given.\n    return new HttpHeaderResponse({\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined\n    });\n  }\n}\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * @publicApi\n */\nclass HttpResponse extends HttpResponseBase {\n  /**\n   * The response body, or `null` if one was not returned.\n   */\n  body;\n  /**\n   * Construct a new `HttpResponse`.\n   */\n  constructor(init = {}) {\n    super(init);\n    this.body = init.body !== undefined ? init.body : null;\n  }\n  type = HttpEventType.Response;\n  clone(update = {}) {\n    return new HttpResponse({\n      body: update.body !== undefined ? update.body : this.body,\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined\n    });\n  }\n}\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * @publicApi\n */\nclass HttpErrorResponse extends HttpResponseBase {\n  name = 'HttpErrorResponse';\n  message;\n  error;\n  /**\n   * Errors are never okay, even when the status code is in the 2xx success range.\n   */\n  ok = false;\n  constructor(init) {\n    // Initialize with a default status of 0 / Unknown Error.\n    super(init, 0, 'Unknown Error');\n    // If the response was successful, then this was a parse error. Otherwise, it was\n    // a protocol-level failure of some sort. Either the request failed in transit\n    // or the server returned an unsuccessful status code.\n    if (this.status >= 200 && this.status < 300) {\n      this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n    } else {\n      this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n    }\n    this.error = init.error || null;\n  }\n}\n/**\n * We use these constant to prevent pulling the whole HttpStatusCode enum\n * Those are the only ones referenced directly by the framework\n */\nconst HTTP_STATUS_CODE_OK = 200;\nconst HTTP_STATUS_CODE_NO_CONTENT = 204;\n/**\n * Http status codes.\n * As per https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n * @publicApi\n */\nvar HttpStatusCode;\n(function (HttpStatusCode) {\n  HttpStatusCode[HttpStatusCode[\"Continue\"] = 100] = \"Continue\";\n  HttpStatusCode[HttpStatusCode[\"SwitchingProtocols\"] = 101] = \"SwitchingProtocols\";\n  HttpStatusCode[HttpStatusCode[\"Processing\"] = 102] = \"Processing\";\n  HttpStatusCode[HttpStatusCode[\"EarlyHints\"] = 103] = \"EarlyHints\";\n  HttpStatusCode[HttpStatusCode[\"Ok\"] = 200] = \"Ok\";\n  HttpStatusCode[HttpStatusCode[\"Created\"] = 201] = \"Created\";\n  HttpStatusCode[HttpStatusCode[\"Accepted\"] = 202] = \"Accepted\";\n  HttpStatusCode[HttpStatusCode[\"NonAuthoritativeInformation\"] = 203] = \"NonAuthoritativeInformation\";\n  HttpStatusCode[HttpStatusCode[\"NoContent\"] = 204] = \"NoContent\";\n  HttpStatusCode[HttpStatusCode[\"ResetContent\"] = 205] = \"ResetContent\";\n  HttpStatusCode[HttpStatusCode[\"PartialContent\"] = 206] = \"PartialContent\";\n  HttpStatusCode[HttpStatusCode[\"MultiStatus\"] = 207] = \"MultiStatus\";\n  HttpStatusCode[HttpStatusCode[\"AlreadyReported\"] = 208] = \"AlreadyReported\";\n  HttpStatusCode[HttpStatusCode[\"ImUsed\"] = 226] = \"ImUsed\";\n  HttpStatusCode[HttpStatusCode[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n  HttpStatusCode[HttpStatusCode[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n  HttpStatusCode[HttpStatusCode[\"Found\"] = 302] = \"Found\";\n  HttpStatusCode[HttpStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n  HttpStatusCode[HttpStatusCode[\"NotModified\"] = 304] = \"NotModified\";\n  HttpStatusCode[HttpStatusCode[\"UseProxy\"] = 305] = \"UseProxy\";\n  HttpStatusCode[HttpStatusCode[\"Unused\"] = 306] = \"Unused\";\n  HttpStatusCode[HttpStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n  HttpStatusCode[HttpStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n  HttpStatusCode[HttpStatusCode[\"BadRequest\"] = 400] = \"BadRequest\";\n  HttpStatusCode[HttpStatusCode[\"Unauthorized\"] = 401] = \"Unauthorized\";\n  HttpStatusCode[HttpStatusCode[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n  HttpStatusCode[HttpStatusCode[\"Forbidden\"] = 403] = \"Forbidden\";\n  HttpStatusCode[HttpStatusCode[\"NotFound\"] = 404] = \"NotFound\";\n  HttpStatusCode[HttpStatusCode[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n  HttpStatusCode[HttpStatusCode[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n  HttpStatusCode[HttpStatusCode[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n  HttpStatusCode[HttpStatusCode[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n  HttpStatusCode[HttpStatusCode[\"Conflict\"] = 409] = \"Conflict\";\n  HttpStatusCode[HttpStatusCode[\"Gone\"] = 410] = \"Gone\";\n  HttpStatusCode[HttpStatusCode[\"LengthRequired\"] = 411] = \"LengthRequired\";\n  HttpStatusCode[HttpStatusCode[\"PreconditionFailed\"] = 412] = \"PreconditionFailed\";\n  HttpStatusCode[HttpStatusCode[\"PayloadTooLarge\"] = 413] = \"PayloadTooLarge\";\n  HttpStatusCode[HttpStatusCode[\"UriTooLong\"] = 414] = \"UriTooLong\";\n  HttpStatusCode[HttpStatusCode[\"UnsupportedMediaType\"] = 415] = \"UnsupportedMediaType\";\n  HttpStatusCode[HttpStatusCode[\"RangeNotSatisfiable\"] = 416] = \"RangeNotSatisfiable\";\n  HttpStatusCode[HttpStatusCode[\"ExpectationFailed\"] = 417] = \"ExpectationFailed\";\n  HttpStatusCode[HttpStatusCode[\"ImATeapot\"] = 418] = \"ImATeapot\";\n  HttpStatusCode[HttpStatusCode[\"MisdirectedRequest\"] = 421] = \"MisdirectedRequest\";\n  HttpStatusCode[HttpStatusCode[\"UnprocessableEntity\"] = 422] = \"UnprocessableEntity\";\n  HttpStatusCode[HttpStatusCode[\"Locked\"] = 423] = \"Locked\";\n  HttpStatusCode[HttpStatusCode[\"FailedDependency\"] = 424] = \"FailedDependency\";\n  HttpStatusCode[HttpStatusCode[\"TooEarly\"] = 425] = \"TooEarly\";\n  HttpStatusCode[HttpStatusCode[\"UpgradeRequired\"] = 426] = \"UpgradeRequired\";\n  HttpStatusCode[HttpStatusCode[\"PreconditionRequired\"] = 428] = \"PreconditionRequired\";\n  HttpStatusCode[HttpStatusCode[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n  HttpStatusCode[HttpStatusCode[\"RequestHeaderFieldsTooLarge\"] = 431] = \"RequestHeaderFieldsTooLarge\";\n  HttpStatusCode[HttpStatusCode[\"UnavailableForLegalReasons\"] = 451] = \"UnavailableForLegalReasons\";\n  HttpStatusCode[HttpStatusCode[\"InternalServerError\"] = 500] = \"InternalServerError\";\n  HttpStatusCode[HttpStatusCode[\"NotImplemented\"] = 501] = \"NotImplemented\";\n  HttpStatusCode[HttpStatusCode[\"BadGateway\"] = 502] = \"BadGateway\";\n  HttpStatusCode[HttpStatusCode[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n  HttpStatusCode[HttpStatusCode[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n  HttpStatusCode[HttpStatusCode[\"HttpVersionNotSupported\"] = 505] = \"HttpVersionNotSupported\";\n  HttpStatusCode[HttpStatusCode[\"VariantAlsoNegotiates\"] = 506] = \"VariantAlsoNegotiates\";\n  HttpStatusCode[HttpStatusCode[\"InsufficientStorage\"] = 507] = \"InsufficientStorage\";\n  HttpStatusCode[HttpStatusCode[\"LoopDetected\"] = 508] = \"LoopDetected\";\n  HttpStatusCode[HttpStatusCode[\"NotExtended\"] = 510] = \"NotExtended\";\n  HttpStatusCode[HttpStatusCode[\"NetworkAuthenticationRequired\"] = 511] = \"NetworkAuthenticationRequired\";\n})(HttpStatusCode || (HttpStatusCode = {}));\n\n/**\n * Constructs an instance of `HttpRequestOptions<T>` from a source `HttpMethodOptions` and\n * the given `body`. This function clones the object and adds the body.\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n */\nfunction addBody(options, body) {\n  return {\n    body,\n    headers: options.headers,\n    context: options.context,\n    observe: options.observe,\n    params: options.params,\n    reportProgress: options.reportProgress,\n    responseType: options.responseType,\n    withCredentials: options.withCredentials,\n    transferCache: options.transferCache\n  };\n}\n/**\n * Performs HTTP requests.\n * This service is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies based on\n * the signature that is called (mainly the values of `observe` and `responseType`).\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n\n * TODO(adev): review\n * @usageNotes\n *\n * ### HTTP Request Example\n *\n * ```ts\n *  // GET heroes whose name contains search term\n * searchHeroes(term: string): observable<Hero[]>{\n *\n *  const params = new HttpParams({fromString: 'name=term'});\n *    return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});\n * }\n * ```\n *\n * Alternatively, the parameter string can be used without invoking HttpParams\n * by directly joining to the URL.\n * ```ts\n * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'});\n * ```\n *\n *\n * ### JSONP Example\n * ```ts\n * requestJsonp(url, callback = 'callback') {\n *  return this.httpClient.jsonp(this.heroesURL, callback);\n * }\n * ```\n *\n * ### PATCH Example\n * ```ts\n * // PATCH one of the heroes' name\n * patchHero (id: number, heroName: string): Observable<{}> {\n * const url = `${this.heroesUrl}/${id}`;   // PATCH api/heroes/42\n *  return this.httpClient.patch(url, {name: heroName}, httpOptions)\n *    .pipe(catchError(this.handleError('patchHero')));\n * }\n * ```\n *\n * @see [HTTP Guide](guide/http)\n * @see [HTTP Request](api/common/http/HttpRequest)\n *\n * @publicApi\n */\nclass HttpClient {\n  handler;\n  constructor(handler) {\n    this.handler = handler;\n  }\n  /**\n   * Constructs an observable for a generic HTTP request that, when subscribed,\n   * fires the request through the chain of registered interceptors and on to the\n   * server.\n   *\n   * You can pass an `HttpRequest` directly as the only parameter. In this case,\n   * the call returns an observable of the raw `HttpEvent` stream.\n   *\n   * Alternatively you can pass an HTTP method as the first parameter,\n   * a URL string as the second, and an options hash containing the request body as the third.\n   * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the\n   * type of returned observable.\n   *   * The `responseType` value determines how a successful response body is parsed.\n   *   * If `responseType` is the default `json`, you can pass a type interface for the resulting\n   * object as a type parameter to the call.\n   *\n   * The `observe` value determines the return type, according to what you are interested in\n   * observing.\n   *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including\n   * progress events by default.\n   *   * An `observe` value of response returns an observable of `HttpResponse<T>`,\n   * where the `T` parameter depends on the `responseType` and any optionally provided type\n   * parameter.\n   *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.\n   *\n   */\n  request(first, url, options = {}) {\n    let req;\n    // First, check whether the primary argument is an instance of `HttpRequest`.\n    if (first instanceof HttpRequest) {\n      // It is. The other arguments must be undefined (per the signatures) and can be\n      // ignored.\n      req = first;\n    } else {\n      // It's a string, so it represents a URL. Construct a request based on it,\n      // and incorporate the remaining arguments (assuming `GET` unless a method is\n      // provided.\n      // Figure out the headers.\n      let headers = undefined;\n      if (options.headers instanceof HttpHeaders) {\n        headers = options.headers;\n      } else {\n        headers = new HttpHeaders(options.headers);\n      }\n      // Sort out parameters.\n      let params = undefined;\n      if (!!options.params) {\n        if (options.params instanceof HttpParams) {\n          params = options.params;\n        } else {\n          params = new HttpParams({\n            fromObject: options.params\n          });\n        }\n      }\n      // Construct the request.\n      req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {\n        headers,\n        context: options.context,\n        params,\n        reportProgress: options.reportProgress,\n        // By default, JSON is assumed to be returned for all calls.\n        responseType: options.responseType || 'json',\n        withCredentials: options.withCredentials,\n        transferCache: options.transferCache\n      });\n    }\n    // Start with an Observable.of() the initial request, and run the handler (which\n    // includes all interceptors) inside a concatMap(). This way, the handler runs\n    // inside an Observable chain, which causes interceptors to be re-run on every\n    // subscription (this also makes retries re-run the handler, including interceptors).\n    const events$ = of(req).pipe(concatMap(req => this.handler.handle(req)));\n    // If coming via the API signature which accepts a previously constructed HttpRequest,\n    // the only option is to get the event stream. Otherwise, return the event stream if\n    // that is what was requested.\n    if (first instanceof HttpRequest || options.observe === 'events') {\n      return events$;\n    }\n    // The requested stream contains either the full response or the body. In either\n    // case, the first step is to filter the event stream to extract a stream of\n    // responses(s).\n    const res$ = events$.pipe(filter(event => event instanceof HttpResponse));\n    // Decide which stream to return.\n    switch (options.observe || 'body') {\n      case 'body':\n        // The requested stream is the body. Map the response stream to the response\n        // body. This could be done more simply, but a misbehaving interceptor might\n        // transform the response body into a different format and ignore the requested\n        // responseType. Guard against this by validating that the response is of the\n        // requested type.\n        switch (req.responseType) {\n          case 'arraybuffer':\n            return res$.pipe(map(res => {\n              // Validate that the body is an ArrayBuffer.\n              if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n                throw new Error('Response is not an ArrayBuffer.');\n              }\n              return res.body;\n            }));\n          case 'blob':\n            return res$.pipe(map(res => {\n              // Validate that the body is a Blob.\n              if (res.body !== null && !(res.body instanceof Blob)) {\n                throw new Error('Response is not a Blob.');\n              }\n              return res.body;\n            }));\n          case 'text':\n            return res$.pipe(map(res => {\n              // Validate that the body is a string.\n              if (res.body !== null && typeof res.body !== 'string') {\n                throw new Error('Response is not a string.');\n              }\n              return res.body;\n            }));\n          case 'json':\n          default:\n            // No validation needed for JSON responses, as they can be of any type.\n            return res$.pipe(map(res => res.body));\n        }\n      case 'response':\n        // The response stream was requested directly, so return it.\n        return res$;\n      default:\n        // Guard against new future observe types being added.\n        throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);\n    }\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `DELETE` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   */\n  delete(url, options = {}) {\n    return this.request('DELETE', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `GET` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  get(url, options = {}) {\n    return this.request('GET', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `HEAD` request to execute on the server. The `HEAD` method returns\n   * meta information about the resource without transferring the\n   * resource itself. See the individual overloads for\n   * details on the return type.\n   */\n  head(url, options = {}) {\n    return this.request('HEAD', url, options);\n  }\n  /**\n   * Constructs an `Observable` that, when subscribed, causes a request with the special method\n   * `JSONP` to be dispatched via the interceptor pipeline.\n   * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain\n   * API endpoints that don't support newer,\n   * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.\n   * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the\n   * requests even if the API endpoint is not located on the same domain (origin) as the client-side\n   * application making the request.\n   * The endpoint API must support JSONP callback for JSONP requests to work.\n   * The resource API returns the JSON response wrapped in a callback function.\n   * You can pass the callback function name as one of the query parameters.\n   * Note that JSONP requests can only be used with `GET` requests.\n   *\n   * @param url The resource URL.\n   * @param callbackParam The callback function name.\n   *\n   */\n  jsonp(url, callbackParam) {\n    return this.request('JSONP', url, {\n      params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n      observe: 'body',\n      responseType: 'json'\n    });\n  }\n  /**\n   * Constructs an `Observable` that, when subscribed, causes the configured\n   * `OPTIONS` request to execute on the server. This method allows the client\n   * to determine the supported HTTP methods and other capabilities of an endpoint,\n   * without implying a resource action. See the individual overloads for\n   * details on the return type.\n   */\n  options(url, options = {}) {\n    return this.request('OPTIONS', url, options);\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PATCH` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  patch(url, body, options = {}) {\n    return this.request('PATCH', url, addBody(options, body));\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `POST` request to execute on the server. The server responds with the location of\n   * the replaced resource. See the individual overloads for\n   * details on the return type.\n   */\n  post(url, body, options = {}) {\n    return this.request('POST', url, addBody(options, body));\n  }\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PUT` request to execute on the server. The `PUT` method replaces an existing resource\n   * with a new set of values.\n   * See the individual overloads for details on the return type.\n   */\n  put(url, body, options = {}) {\n    return this.request('PUT', url, addBody(options, body));\n  }\n  static ɵfac = function HttpClient_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClient)(i0.ɵɵinject(HttpHandler));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpClient,\n    factory: HttpClient.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClient, [{\n    type: Injectable\n  }], () => [{\n    type: HttpHandler\n  }], null);\n})();\nconst XSSI_PREFIX$1 = /^\\)\\]\\}',?\\n/;\nconst REQUEST_URL_HEADER = `X-Request-URL`;\n/**\n * Determine an appropriate URL for the response, by checking either\n * response url or the X-Request-URL header.\n */\nfunction getResponseUrl$1(response) {\n  if (response.url) {\n    return response.url;\n  }\n  // stored as lowercase in the map\n  const xRequestUrl = REQUEST_URL_HEADER.toLocaleLowerCase();\n  return response.headers.get(xRequestUrl);\n}\n/**\n * Uses `fetch` to send requests to a backend server.\n *\n * This `FetchBackend` requires the support of the\n * [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which is available on all\n * supported browsers and on Node.js v18 or later.\n *\n * @see {@link HttpHandler}\n *\n * @publicApi\n */\nclass FetchBackend {\n  // We use an arrow function to always reference the current global implementation of `fetch`.\n  // This is helpful for cases when the global `fetch` implementation is modified by external code,\n  // see https://github.com/angular/angular/issues/57527.\n  fetchImpl = inject(FetchFactory, {\n    optional: true\n  })?.fetch ?? ((...args) => globalThis.fetch(...args));\n  ngZone = inject(NgZone);\n  handle(request) {\n    return new Observable(observer => {\n      const aborter = new AbortController();\n      this.doRequest(request, aborter.signal, observer).then(noop, error => observer.error(new HttpErrorResponse({\n        error\n      })));\n      return () => aborter.abort();\n    });\n  }\n  async doRequest(request, signal, observer) {\n    const init = this.createRequestInit(request);\n    let response;\n    try {\n      // Run fetch outside of Angular zone.\n      // This is due to Node.js fetch implementation (Undici) which uses a number of setTimeouts to check if\n      // the response should eventually timeout which causes extra CD cycles every 500ms\n      const fetchPromise = this.ngZone.runOutsideAngular(() => this.fetchImpl(request.urlWithParams, {\n        signal,\n        ...init\n      }));\n      // Make sure Zone.js doesn't trigger false-positive unhandled promise\n      // error in case the Promise is rejected synchronously. See function\n      // description for additional information.\n      silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n      // Send the `Sent` event before awaiting the response.\n      observer.next({\n        type: HttpEventType.Sent\n      });\n      response = await fetchPromise;\n    } catch (error) {\n      observer.error(new HttpErrorResponse({\n        error,\n        status: error.status ?? 0,\n        statusText: error.statusText,\n        url: request.urlWithParams,\n        headers: error.headers\n      }));\n      return;\n    }\n    const headers = new HttpHeaders(response.headers);\n    const statusText = response.statusText;\n    const url = getResponseUrl$1(response) ?? request.urlWithParams;\n    let status = response.status;\n    let body = null;\n    if (request.reportProgress) {\n      observer.next(new HttpHeaderResponse({\n        headers,\n        status,\n        statusText,\n        url\n      }));\n    }\n    if (response.body) {\n      // Read Progress\n      const contentLength = response.headers.get('content-length');\n      const chunks = [];\n      const reader = response.body.getReader();\n      let receivedLength = 0;\n      let decoder;\n      let partialText;\n      // We have to check whether the Zone is defined in the global scope because this may be called\n      // when the zone is nooped.\n      const reqZone = typeof Zone !== 'undefined' && Zone.current;\n      // Perform response processing outside of Angular zone to\n      // ensure no excessive change detection runs are executed\n      // Here calling the async ReadableStreamDefaultReader.read() is responsible for triggering CD\n      await this.ngZone.runOutsideAngular(async () => {\n        while (true) {\n          const {\n            done,\n            value\n          } = await reader.read();\n          if (done) {\n            break;\n          }\n          chunks.push(value);\n          receivedLength += value.length;\n          if (request.reportProgress) {\n            partialText = request.responseType === 'text' ? (partialText ?? '') + (decoder ??= new TextDecoder()).decode(value, {\n              stream: true\n            }) : undefined;\n            const reportProgress = () => observer.next({\n              type: HttpEventType.DownloadProgress,\n              total: contentLength ? +contentLength : undefined,\n              loaded: receivedLength,\n              partialText\n            });\n            reqZone ? reqZone.run(reportProgress) : reportProgress();\n          }\n        }\n      });\n      // Combine all chunks.\n      const chunksAll = this.concatChunks(chunks, receivedLength);\n      try {\n        const contentType = response.headers.get('Content-Type') ?? '';\n        body = this.parseBody(request, chunksAll, contentType);\n      } catch (error) {\n        // Body loading or parsing failed\n        observer.error(new HttpErrorResponse({\n          error,\n          headers: new HttpHeaders(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          url: getResponseUrl$1(response) ?? request.urlWithParams\n        }));\n        return;\n      }\n    }\n    // Same behavior as the XhrBackend\n    if (status === 0) {\n      status = body ? HTTP_STATUS_CODE_OK : 0;\n    }\n    // ok determines whether the response will be transmitted on the event or\n    // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n    // but a successful status code can still result in an error if the user\n    // asked for JSON data and the body cannot be parsed as such.\n    const ok = status >= 200 && status < 300;\n    if (ok) {\n      observer.next(new HttpResponse({\n        body,\n        headers,\n        status,\n        statusText,\n        url\n      }));\n      // The full body has been received and delivered, no further events\n      // are possible. This request is complete.\n      observer.complete();\n    } else {\n      observer.error(new HttpErrorResponse({\n        error: body,\n        headers,\n        status,\n        statusText,\n        url\n      }));\n    }\n  }\n  parseBody(request, binContent, contentType) {\n    switch (request.responseType) {\n      case 'json':\n        // stripping the XSSI when present\n        const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX$1, '');\n        return text === '' ? null : JSON.parse(text);\n      case 'text':\n        return new TextDecoder().decode(binContent);\n      case 'blob':\n        return new Blob([binContent], {\n          type: contentType\n        });\n      case 'arraybuffer':\n        return binContent.buffer;\n    }\n  }\n  createRequestInit(req) {\n    // We could share some of this logic with the XhrBackend\n    const headers = {};\n    const credentials = req.withCredentials ? 'include' : undefined;\n    // Setting all the requested headers.\n    req.headers.forEach((name, values) => headers[name] = values.join(','));\n    // Add an Accept header if one isn't present already.\n    if (!req.headers.has('Accept')) {\n      headers['Accept'] = 'application/json, text/plain, */*';\n    }\n    // Auto-detect the Content-Type header if one isn't present already.\n    if (!req.headers.has('Content-Type')) {\n      const detectedType = req.detectContentTypeHeader();\n      // Sometimes Content-Type detection fails.\n      if (detectedType !== null) {\n        headers['Content-Type'] = detectedType;\n      }\n    }\n    return {\n      body: req.serializeBody(),\n      method: req.method,\n      headers,\n      credentials\n    };\n  }\n  concatChunks(chunks, totalLength) {\n    const chunksAll = new Uint8Array(totalLength);\n    let position = 0;\n    for (const chunk of chunks) {\n      chunksAll.set(chunk, position);\n      position += chunk.length;\n    }\n    return chunksAll;\n  }\n  static ɵfac = function FetchBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || FetchBackend)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: FetchBackend,\n    factory: FetchBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(FetchBackend, [{\n    type: Injectable\n  }], null, null);\n})();\n/**\n * Abstract class to provide a mocked implementation of `fetch()`\n */\nclass FetchFactory {}\nfunction noop() {}\n/**\n * Zone.js treats a rejected promise that has not yet been awaited\n * as an unhandled error. This function adds a noop `.then` to make\n * sure that Zone.js doesn't throw an error if the Promise is rejected\n * synchronously.\n */\nfunction silenceSuperfluousUnhandledPromiseRejection(promise) {\n  promise.then(noop, noop);\n}\nfunction interceptorChainEndFn(req, finalHandlerFn) {\n  return finalHandlerFn(req);\n}\n/**\n * Constructs a `ChainedInterceptorFn` which adapts a legacy `HttpInterceptor` to the\n * `ChainedInterceptorFn` interface.\n */\nfunction adaptLegacyInterceptorToChain(chainTailFn, interceptor) {\n  return (initialRequest, finalHandlerFn) => interceptor.intercept(initialRequest, {\n    handle: downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)\n  });\n}\n/**\n * Constructs a `ChainedInterceptorFn` which wraps and invokes a functional interceptor in the given\n * injector.\n */\nfunction chainedInterceptorFn(chainTailFn, interceptorFn, injector) {\n  return (initialRequest, finalHandlerFn) => runInInjectionContext(injector, () => interceptorFn(initialRequest, downstreamRequest => chainTailFn(downstreamRequest, finalHandlerFn)));\n}\n/**\n * A multi-provider token that represents the array of registered\n * `HttpInterceptor` objects.\n *\n * @publicApi\n */\nconst HTTP_INTERCEPTORS = new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTORS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s.\n */\nconst HTTP_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '');\n/**\n * A multi-provided token of `HttpInterceptorFn`s that are only set in root.\n */\nconst HTTP_ROOT_INTERCEPTOR_FNS = new InjectionToken(ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '');\n// TODO(atscott): We need a larger discussion about stability and what should contribute to stability.\n// Should the whole interceptor chain contribute to stability or just the backend request #55075?\n// Should HttpClient contribute to stability automatically at all?\nconst REQUESTS_CONTRIBUTE_TO_STABILITY = new InjectionToken(ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '', {\n  providedIn: 'root',\n  factory: () => true\n});\n/**\n * Creates an `HttpInterceptorFn` which lazily initializes an interceptor chain from the legacy\n * class-based interceptors and runs the request through it.\n */\nfunction legacyInterceptorFnFactory() {\n  let chain = null;\n  return (req, handler) => {\n    if (chain === null) {\n      const interceptors = inject(HTTP_INTERCEPTORS, {\n        optional: true\n      }) ?? [];\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `interceptors` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      chain = interceptors.reduceRight(adaptLegacyInterceptorToChain, interceptorChainEndFn);\n    }\n    const pendingTasks = inject(ɵPendingTasksInternal);\n    const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n    if (contributeToStability) {\n      const taskId = pendingTasks.add();\n      return chain(req, handler).pipe(finalize(() => pendingTasks.remove(taskId)));\n    } else {\n      return chain(req, handler);\n    }\n  };\n}\nlet fetchBackendWarningDisplayed = false;\n/** Internal function to reset the flag in tests */\nfunction resetFetchBackendWarningFlag() {\n  fetchBackendWarningDisplayed = false;\n}\nclass HttpInterceptorHandler extends HttpHandler {\n  backend;\n  injector;\n  chain = null;\n  pendingTasks = inject(ɵPendingTasksInternal);\n  contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n  constructor(backend, injector) {\n    super();\n    this.backend = backend;\n    this.injector = injector;\n    // We strongly recommend using fetch backend for HTTP calls when SSR is used\n    // for an application. The logic below checks if that's the case and produces\n    // a warning otherwise.\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n      const isServer = isPlatformServer(injector.get(PLATFORM_ID));\n      // This flag is necessary because provideHttpClientTesting() overrides the backend\n      // even if `withFetch()` is used within the test. When the testing HTTP backend is provided,\n      // no HTTP calls are actually performed during the test, so producing a warning would be\n      // misleading.\n      const isTestingBackend = this.backend.isTestingBackend;\n      if (isServer && !(this.backend instanceof FetchBackend) && !isTestingBackend) {\n        fetchBackendWarningDisplayed = true;\n        injector.get(ɵConsole).warn(ɵformatRuntimeError(2801 /* RuntimeErrorCode.NOT_USING_FETCH_BACKEND_IN_SSR */, 'Angular detected that `HttpClient` is not configured ' + \"to use `fetch` APIs. It's strongly recommended to \" + 'enable `fetch` for applications that use Server-Side Rendering ' + 'for better performance and compatibility. ' + 'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' + 'call at the root of the application.'));\n      }\n    }\n  }\n  handle(initialRequest) {\n    if (this.chain === null) {\n      const dedupedInterceptorFns = Array.from(new Set([...this.injector.get(HTTP_INTERCEPTOR_FNS), ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, [])]));\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `dedupedInterceptorFns` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      this.chain = dedupedInterceptorFns.reduceRight((nextSequencedFn, interceptorFn) => chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector), interceptorChainEndFn);\n    }\n    if (this.contributeToStability) {\n      const taskId = this.pendingTasks.add();\n      return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest)).pipe(finalize(() => this.pendingTasks.remove(taskId)));\n    } else {\n      return this.chain(initialRequest, downstreamRequest => this.backend.handle(downstreamRequest));\n    }\n  }\n  static ɵfac = function HttpInterceptorHandler_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpInterceptorHandler)(i0.ɵɵinject(HttpBackend), i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpInterceptorHandler,\n    factory: HttpInterceptorHandler.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpInterceptorHandler, [{\n    type: Injectable\n  }], () => [{\n    type: HttpBackend\n  }, {\n    type: i0.EnvironmentInjector\n  }], null);\n})();\n\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nlet nextRequestId = 0;\n/**\n * When a pending <script> is unsubscribed we'll move it to this document, so it won't be\n * executed.\n */\nlet foreignDocument;\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nconst JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n// Error text given when a request is passed to the JsonpClientBackend that has\n// headers set\nconst JSONP_ERR_HEADERS_NOT_SUPPORTED = 'JSONP requests do not support headers.';\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n *\n */\nclass JsonpCallbackContext {}\n/**\n * Factory function that determines where to store JSONP callbacks.\n *\n * Ordinarily JSONP callbacks are stored on the `window` object, but this may not exist\n * in test environments. In that case, callbacks are stored on an anonymous object instead.\n *\n *\n */\nfunction jsonpCallbackContext() {\n  if (typeof window === 'object') {\n    return window;\n  }\n  return {};\n}\n/**\n * Processes an `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n * @see {@link HttpHandler}\n * @see {@link HttpXhrBackend}\n *\n * @publicApi\n */\nclass JsonpClientBackend {\n  callbackMap;\n  document;\n  /**\n   * A resolved promise that can be used to schedule microtasks in the event handlers.\n   */\n  resolvedPromise = Promise.resolve();\n  constructor(callbackMap, document) {\n    this.callbackMap = callbackMap;\n    this.document = document;\n  }\n  /**\n   * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n   */\n  nextCallback() {\n    return `ng_jsonp_callback_${nextRequestId++}`;\n  }\n  /**\n   * Processes a JSONP request and returns an event stream of the results.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   *\n   */\n  handle(req) {\n    // Firstly, check both the method and response type. If either doesn't match\n    // then the request was improperly routed here and cannot be handled.\n    if (req.method !== 'JSONP') {\n      throw new Error(JSONP_ERR_WRONG_METHOD);\n    } else if (req.responseType !== 'json') {\n      throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);\n    }\n    // Check the request headers. JSONP doesn't support headers and\n    // cannot set any that were supplied.\n    if (req.headers.keys().length > 0) {\n      throw new Error(JSONP_ERR_HEADERS_NOT_SUPPORTED);\n    }\n    // Everything else happens inside the Observable boundary.\n    return new Observable(observer => {\n      // The first step to make a request is to generate the callback name, and replace the\n      // callback placeholder in the URL with the name. Care has to be taken here to ensure\n      // a trailing &, if matched, gets inserted back into the URL in the correct place.\n      const callback = this.nextCallback();\n      const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);\n      // Construct the <script> tag and point it at the URL.\n      const node = this.document.createElement('script');\n      node.src = url;\n      // A JSONP request requires waiting for multiple callbacks. These variables\n      // are closed over and track state across those callbacks.\n      // The response object, if one has been received, or null otherwise.\n      let body = null;\n      // Whether the response callback has been called.\n      let finished = false;\n      // Set the response callback in this.callbackMap (which will be the window\n      // object in the browser. The script being loaded via the <script> tag will\n      // eventually call this callback.\n      this.callbackMap[callback] = data => {\n        // Data has been received from the JSONP script. Firstly, delete this callback.\n        delete this.callbackMap[callback];\n        // Set state to indicate data was received.\n        body = data;\n        finished = true;\n      };\n      // cleanup() is a utility closure that removes the <script> from the page and\n      // the response callback from the window. This logic is used in both the\n      // success, error, and cancellation paths, so it's extracted out for convenience.\n      const cleanup = () => {\n        node.removeEventListener('load', onLoad);\n        node.removeEventListener('error', onError);\n        // Remove the <script> tag if it's still on the page.\n        node.remove();\n        // Remove the response callback from the callbackMap (window object in the\n        // browser).\n        delete this.callbackMap[callback];\n      };\n      // onLoad() is the success callback which runs after the response callback\n      // if the JSONP script loads successfully. The event itself is unimportant.\n      // If something went wrong, onLoad() may run without the response callback\n      // having been invoked.\n      const onLoad = event => {\n        // We wrap it in an extra Promise, to ensure the microtask\n        // is scheduled after the loaded endpoint has executed any potential microtask itself,\n        // which is not guaranteed in Internet Explorer and EdgeHTML. See issue #39496\n        this.resolvedPromise.then(() => {\n          // Cleanup the page.\n          cleanup();\n          // Check whether the response callback has run.\n          if (!finished) {\n            // It hasn't, something went wrong with the request. Return an error via\n            // the Observable error path. All JSONP errors have status 0.\n            observer.error(new HttpErrorResponse({\n              url,\n              status: 0,\n              statusText: 'JSONP Error',\n              error: new Error(JSONP_ERR_NO_CALLBACK)\n            }));\n            return;\n          }\n          // Success. body either contains the response body or null if none was\n          // returned.\n          observer.next(new HttpResponse({\n            body,\n            status: HTTP_STATUS_CODE_OK,\n            statusText: 'OK',\n            url\n          }));\n          // Complete the stream, the response is over.\n          observer.complete();\n        });\n      };\n      // onError() is the error callback, which runs if the script returned generates\n      // a Javascript error. It emits the error via the Observable error channel as\n      // a HttpErrorResponse.\n      const onError = error => {\n        cleanup();\n        // Wrap the error in a HttpErrorResponse.\n        observer.error(new HttpErrorResponse({\n          error,\n          status: 0,\n          statusText: 'JSONP Error',\n          url\n        }));\n      };\n      // Subscribe to both the success (load) and error events on the <script> tag,\n      // and add it to the page.\n      node.addEventListener('load', onLoad);\n      node.addEventListener('error', onError);\n      this.document.body.appendChild(node);\n      // The request has now been successfully sent.\n      observer.next({\n        type: HttpEventType.Sent\n      });\n      // Cancellation handler.\n      return () => {\n        if (!finished) {\n          this.removeListeners(node);\n        }\n        // And finally, clean up the page.\n        cleanup();\n      };\n    });\n  }\n  removeListeners(script) {\n    // Issue #34818\n    // Changing <script>'s ownerDocument will prevent it from execution.\n    // https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block\n    foreignDocument ??= this.document.implementation.createHTMLDocument();\n    foreignDocument.adoptNode(script);\n  }\n  static ɵfac = function JsonpClientBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonpClientBackend)(i0.ɵɵinject(JsonpCallbackContext), i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: JsonpClientBackend,\n    factory: JsonpClientBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonpClientBackend, [{\n    type: Injectable\n  }], () => [{\n    type: JsonpCallbackContext\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n/**\n * Identifies requests with the method JSONP and shifts them to the `JsonpClientBackend`.\n */\nfunction jsonpInterceptorFn(req, next) {\n  if (req.method === 'JSONP') {\n    return inject(JsonpClientBackend).handle(req);\n  }\n  // Fall through for normal HTTP requests.\n  return next(req);\n}\n/**\n * Identifies requests with the method JSONP and\n * shifts them to the `JsonpClientBackend`.\n *\n * @see {@link HttpInterceptor}\n *\n * @publicApi\n */\nclass JsonpInterceptor {\n  injector;\n  constructor(injector) {\n    this.injector = injector;\n  }\n  /**\n   * Identifies and handles a given JSONP request.\n   * @param initialRequest The outgoing request object to handle.\n   * @param next The next interceptor in the chain, or the backend\n   * if no interceptors remain in the chain.\n   * @returns An observable of the event stream.\n   */\n  intercept(initialRequest, next) {\n    return runInInjectionContext(this.injector, () => jsonpInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n  }\n  static ɵfac = function JsonpInterceptor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || JsonpInterceptor)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: JsonpInterceptor,\n    factory: JsonpInterceptor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(JsonpInterceptor, [{\n    type: Injectable\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n/**\n * Determine an appropriate URL for the response, by checking either\n * XMLHttpRequest.responseURL or the X-Request-URL header.\n */\nfunction getResponseUrl(xhr) {\n  if ('responseURL' in xhr && xhr.responseURL) {\n    return xhr.responseURL;\n  }\n  if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n    return xhr.getResponseHeader('X-Request-URL');\n  }\n  return null;\n}\n/**\n * Uses `XMLHttpRequest` to send requests to a backend server.\n * @see {@link HttpHandler}\n * @see {@link JsonpClientBackend}\n *\n * @publicApi\n */\nclass HttpXhrBackend {\n  xhrFactory;\n  constructor(xhrFactory) {\n    this.xhrFactory = xhrFactory;\n  }\n  /**\n   * Processes a request and returns a stream of response events.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   */\n  handle(req) {\n    // Quick check to give a better error message when a user attempts to use\n    // HttpClient.jsonp() without installing the HttpClientJsonpModule\n    if (req.method === 'JSONP') {\n      throw new ɵRuntimeError(-2800 /* RuntimeErrorCode.MISSING_JSONP_MODULE */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \\`withJsonpSupport()\\` call (if \\`provideHttpClient()\\` is used) or import the \\`HttpClientJsonpModule\\` in the root NgModule.`);\n    }\n    // Check whether this factory has a special function to load an XHR implementation\n    // for various non-browser environments. We currently limit it to only `ServerXhr`\n    // class, which needs to load an XHR implementation.\n    const xhrFactory = this.xhrFactory;\n    const source = xhrFactory.ɵloadImpl ? from(xhrFactory.ɵloadImpl()) : of(null);\n    return source.pipe(switchMap(() => {\n      // Everything happens on Observable subscription.\n      return new Observable(observer => {\n        // Start by setting up the XHR object with request method, URL, and withCredentials\n        // flag.\n        const xhr = xhrFactory.build();\n        xhr.open(req.method, req.urlWithParams);\n        if (req.withCredentials) {\n          xhr.withCredentials = true;\n        }\n        // Add all the requested headers.\n        req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));\n        // Add an Accept header if one isn't present already.\n        if (!req.headers.has('Accept')) {\n          xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n        }\n        // Auto-detect the Content-Type header if one isn't present already.\n        if (!req.headers.has('Content-Type')) {\n          const detectedType = req.detectContentTypeHeader();\n          // Sometimes Content-Type detection fails.\n          if (detectedType !== null) {\n            xhr.setRequestHeader('Content-Type', detectedType);\n          }\n        }\n        // Set the responseType if one was requested.\n        if (req.responseType) {\n          const responseType = req.responseType.toLowerCase();\n          // JSON responses need to be processed as text. This is because if the server\n          // returns an XSSI-prefixed JSON response, the browser will fail to parse it,\n          // xhr.response will be null, and xhr.responseText cannot be accessed to\n          // retrieve the prefixed JSON data in order to strip the prefix. Thus, all JSON\n          // is parsed by first requesting text and then applying JSON.parse.\n          xhr.responseType = responseType !== 'json' ? responseType : 'text';\n        }\n        // Serialize the request body if one is present. If not, this will be set to null.\n        const reqBody = req.serializeBody();\n        // If progress events are enabled, response headers will be delivered\n        // in two events - the HttpHeaderResponse event and the full HttpResponse\n        // event. However, since response headers don't change in between these\n        // two events, it doesn't make sense to parse them twice. So headerResponse\n        // caches the data extracted from the response whenever it's first parsed,\n        // to ensure parsing isn't duplicated.\n        let headerResponse = null;\n        // partialFromXhr extracts the HttpHeaderResponse from the current XMLHttpRequest\n        // state, and memoizes it into headerResponse.\n        const partialFromXhr = () => {\n          if (headerResponse !== null) {\n            return headerResponse;\n          }\n          const statusText = xhr.statusText || 'OK';\n          // Parse headers from XMLHttpRequest - this step is lazy.\n          const headers = new HttpHeaders(xhr.getAllResponseHeaders());\n          // Read the response URL from the XMLHttpResponse instance and fall back on the\n          // request URL.\n          const url = getResponseUrl(xhr) || req.url;\n          // Construct the HttpHeaderResponse and memoize it.\n          headerResponse = new HttpHeaderResponse({\n            headers,\n            status: xhr.status,\n            statusText,\n            url\n          });\n          return headerResponse;\n        };\n        // Next, a few closures are defined for the various events which XMLHttpRequest can\n        // emit. This allows them to be unregistered as event listeners later.\n        // First up is the load event, which represents a response being fully available.\n        const onLoad = () => {\n          // Read response state from the memoized partial data.\n          let {\n            headers,\n            status,\n            statusText,\n            url\n          } = partialFromXhr();\n          // The body will be read out if present.\n          let body = null;\n          if (status !== HTTP_STATUS_CODE_NO_CONTENT) {\n            // Use XMLHttpRequest.response if set, responseText otherwise.\n            body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n          }\n          // Normalize another potential bug (this one comes from CORS).\n          if (status === 0) {\n            status = !!body ? HTTP_STATUS_CODE_OK : 0;\n          }\n          // ok determines whether the response will be transmitted on the event or\n          // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n          // but a successful status code can still result in an error if the user\n          // asked for JSON data and the body cannot be parsed as such.\n          let ok = status >= 200 && status < 300;\n          // Check whether the body needs to be parsed as JSON (in many cases the browser\n          // will have done that already).\n          if (req.responseType === 'json' && typeof body === 'string') {\n            // Save the original body, before attempting XSSI prefix stripping.\n            const originalBody = body;\n            body = body.replace(XSSI_PREFIX, '');\n            try {\n              // Attempt the parse. If it fails, a parse error should be delivered to the\n              // user.\n              body = body !== '' ? JSON.parse(body) : null;\n            } catch (error) {\n              // Since the JSON.parse failed, it's reasonable to assume this might not have\n              // been a JSON response. Restore the original body (including any XSSI prefix)\n              // to deliver a better error response.\n              body = originalBody;\n              // If this was an error request to begin with, leave it as a string, it\n              // probably just isn't JSON. Otherwise, deliver the parsing error to the user.\n              if (ok) {\n                // Even though the response status was 2xx, this is still an error.\n                ok = false;\n                // The parse error contains the text of the body that failed to parse.\n                body = {\n                  error,\n                  text: body\n                };\n              }\n            }\n          }\n          if (ok) {\n            // A successful response is delivered on the event stream.\n            observer.next(new HttpResponse({\n              body,\n              headers,\n              status,\n              statusText,\n              url: url || undefined\n            }));\n            // The full body has been received and delivered, no further events\n            // are possible. This request is complete.\n            observer.complete();\n          } else {\n            // An unsuccessful request is delivered on the error channel.\n            observer.error(new HttpErrorResponse({\n              // The error in this case is the response body (error from the server).\n              error: body,\n              headers,\n              status,\n              statusText,\n              url: url || undefined\n            }));\n          }\n        };\n        // The onError callback is called when something goes wrong at the network level.\n        // Connection timeout, DNS error, offline, etc. These are actual errors, and are\n        // transmitted on the error channel.\n        const onError = error => {\n          const {\n            url\n          } = partialFromXhr();\n          const res = new HttpErrorResponse({\n            error,\n            status: xhr.status || 0,\n            statusText: xhr.statusText || 'Unknown Error',\n            url: url || undefined\n          });\n          observer.error(res);\n        };\n        // The sentHeaders flag tracks whether the HttpResponseHeaders event\n        // has been sent on the stream. This is necessary to track if progress\n        // is enabled since the event will be sent on only the first download\n        // progress event.\n        let sentHeaders = false;\n        // The download progress event handler, which is only registered if\n        // progress events are enabled.\n        const onDownProgress = event => {\n          // Send the HttpResponseHeaders event if it hasn't been sent already.\n          if (!sentHeaders) {\n            observer.next(partialFromXhr());\n            sentHeaders = true;\n          }\n          // Start building the download progress event to deliver on the response\n          // event stream.\n          let progressEvent = {\n            type: HttpEventType.DownloadProgress,\n            loaded: event.loaded\n          };\n          // Set the total number of bytes in the event if it's available.\n          if (event.lengthComputable) {\n            progressEvent.total = event.total;\n          }\n          // If the request was for text content and a partial response is\n          // available on XMLHttpRequest, include it in the progress event\n          // to allow for streaming reads.\n          if (req.responseType === 'text' && !!xhr.responseText) {\n            progressEvent.partialText = xhr.responseText;\n          }\n          // Finally, fire the event.\n          observer.next(progressEvent);\n        };\n        // The upload progress event handler, which is only registered if\n        // progress events are enabled.\n        const onUpProgress = event => {\n          // Upload progress events are simpler. Begin building the progress\n          // event.\n          let progress = {\n            type: HttpEventType.UploadProgress,\n            loaded: event.loaded\n          };\n          // If the total number of bytes being uploaded is available, include\n          // it.\n          if (event.lengthComputable) {\n            progress.total = event.total;\n          }\n          // Send the event.\n          observer.next(progress);\n        };\n        // By default, register for load and error events.\n        xhr.addEventListener('load', onLoad);\n        xhr.addEventListener('error', onError);\n        xhr.addEventListener('timeout', onError);\n        xhr.addEventListener('abort', onError);\n        // Progress events are only enabled if requested.\n        if (req.reportProgress) {\n          // Download progress is always enabled if requested.\n          xhr.addEventListener('progress', onDownProgress);\n          // Upload progress depends on whether there is a body to upload.\n          if (reqBody !== null && xhr.upload) {\n            xhr.upload.addEventListener('progress', onUpProgress);\n          }\n        }\n        // Fire the request, and notify the event stream that it was fired.\n        xhr.send(reqBody);\n        observer.next({\n          type: HttpEventType.Sent\n        });\n        // This is the return from the Observable function, which is the\n        // request cancellation handler.\n        return () => {\n          // On a cancellation, remove all registered event listeners.\n          xhr.removeEventListener('error', onError);\n          xhr.removeEventListener('abort', onError);\n          xhr.removeEventListener('load', onLoad);\n          xhr.removeEventListener('timeout', onError);\n          if (req.reportProgress) {\n            xhr.removeEventListener('progress', onDownProgress);\n            if (reqBody !== null && xhr.upload) {\n              xhr.upload.removeEventListener('progress', onUpProgress);\n            }\n          }\n          // Finally, abort the in-flight request.\n          if (xhr.readyState !== xhr.DONE) {\n            xhr.abort();\n          }\n        };\n      });\n    }));\n  }\n  static ɵfac = function HttpXhrBackend_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXhrBackend)(i0.ɵɵinject(i1.XhrFactory));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXhrBackend,\n    factory: HttpXhrBackend.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXhrBackend, [{\n    type: Injectable\n  }], () => [{\n    type: i1.XhrFactory\n  }], null);\n})();\nconst XSRF_ENABLED = new InjectionToken(ngDevMode ? 'XSRF_ENABLED' : '');\nconst XSRF_DEFAULT_COOKIE_NAME = 'XSRF-TOKEN';\nconst XSRF_COOKIE_NAME = new InjectionToken(ngDevMode ? 'XSRF_COOKIE_NAME' : '', {\n  providedIn: 'root',\n  factory: () => XSRF_DEFAULT_COOKIE_NAME\n});\nconst XSRF_DEFAULT_HEADER_NAME = 'X-XSRF-TOKEN';\nconst XSRF_HEADER_NAME = new InjectionToken(ngDevMode ? 'XSRF_HEADER_NAME' : '', {\n  providedIn: 'root',\n  factory: () => XSRF_DEFAULT_HEADER_NAME\n});\n/**\n * Retrieves the current XSRF token to use with the next outgoing request.\n *\n * @publicApi\n */\nclass HttpXsrfTokenExtractor {}\n/**\n * `HttpXsrfTokenExtractor` which retrieves the token from a cookie.\n */\nclass HttpXsrfCookieExtractor {\n  doc;\n  platform;\n  cookieName;\n  lastCookieString = '';\n  lastToken = null;\n  /**\n   * @internal for testing\n   */\n  parseCount = 0;\n  constructor(doc, platform, cookieName) {\n    this.doc = doc;\n    this.platform = platform;\n    this.cookieName = cookieName;\n  }\n  getToken() {\n    if (this.platform === 'server') {\n      return null;\n    }\n    const cookieString = this.doc.cookie || '';\n    if (cookieString !== this.lastCookieString) {\n      this.parseCount++;\n      this.lastToken = ɵparseCookieValue(cookieString, this.cookieName);\n      this.lastCookieString = cookieString;\n    }\n    return this.lastToken;\n  }\n  static ɵfac = function HttpXsrfCookieExtractor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXsrfCookieExtractor)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(XSRF_COOKIE_NAME));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXsrfCookieExtractor,\n    factory: HttpXsrfCookieExtractor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXsrfCookieExtractor, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [XSRF_COOKIE_NAME]\n    }]\n  }], null);\n})();\nfunction xsrfInterceptorFn(req, next) {\n  const lcUrl = req.url.toLowerCase();\n  // Skip both non-mutating requests and absolute URLs.\n  // Non-mutating requests don't require a token, and absolute URLs require special handling\n  // anyway as the cookie set\n  // on our origin is not the same as the token expected by another origin.\n  if (!inject(XSRF_ENABLED) || req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') || lcUrl.startsWith('https://')) {\n    return next(req);\n  }\n  const token = inject(HttpXsrfTokenExtractor).getToken();\n  const headerName = inject(XSRF_HEADER_NAME);\n  // Be careful not to overwrite an existing header of the same name.\n  if (token != null && !req.headers.has(headerName)) {\n    req = req.clone({\n      headers: req.headers.set(headerName, token)\n    });\n  }\n  return next(req);\n}\n/**\n * `HttpInterceptor` which adds an XSRF token to eligible outgoing requests.\n */\nclass HttpXsrfInterceptor {\n  injector;\n  constructor(injector) {\n    this.injector = injector;\n  }\n  intercept(initialRequest, next) {\n    return runInInjectionContext(this.injector, () => xsrfInterceptorFn(initialRequest, downstreamRequest => next.handle(downstreamRequest)));\n  }\n  static ɵfac = function HttpXsrfInterceptor_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpXsrfInterceptor)(i0.ɵɵinject(i0.EnvironmentInjector));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HttpXsrfInterceptor,\n    factory: HttpXsrfInterceptor.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpXsrfInterceptor, [{\n    type: Injectable\n  }], () => [{\n    type: i0.EnvironmentInjector\n  }], null);\n})();\n\n/**\n * Identifies a particular kind of `HttpFeature`.\n *\n * @publicApi\n */\nvar HttpFeatureKind;\n(function (HttpFeatureKind) {\n  HttpFeatureKind[HttpFeatureKind[\"Interceptors\"] = 0] = \"Interceptors\";\n  HttpFeatureKind[HttpFeatureKind[\"LegacyInterceptors\"] = 1] = \"LegacyInterceptors\";\n  HttpFeatureKind[HttpFeatureKind[\"CustomXsrfConfiguration\"] = 2] = \"CustomXsrfConfiguration\";\n  HttpFeatureKind[HttpFeatureKind[\"NoXsrfProtection\"] = 3] = \"NoXsrfProtection\";\n  HttpFeatureKind[HttpFeatureKind[\"JsonpSupport\"] = 4] = \"JsonpSupport\";\n  HttpFeatureKind[HttpFeatureKind[\"RequestsMadeViaParent\"] = 5] = \"RequestsMadeViaParent\";\n  HttpFeatureKind[HttpFeatureKind[\"Fetch\"] = 6] = \"Fetch\";\n})(HttpFeatureKind || (HttpFeatureKind = {}));\nfunction makeHttpFeature(kind, providers) {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers\n  };\n}\n/**\n * Configures Angular's `HttpClient` service to be available for injection.\n *\n * By default, `HttpClient` will be configured for injection with its default options for XSRF\n * protection of outgoing requests. Additional configuration options can be provided by passing\n * feature functions to `provideHttpClient`. For example, HTTP interceptors can be added using the\n * `withInterceptors(...)` feature.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * It's strongly recommended to enable\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) for applications that use\n * Server-Side Rendering for better performance and compatibility. To enable `fetch`, add\n * `withFetch()` feature to the `provideHttpClient()` call at the root of the application:\n *\n * ```ts\n * provideHttpClient(withFetch());\n * ```\n *\n * </div>\n *\n * @see {@link withInterceptors}\n * @see {@link withInterceptorsFromDi}\n * @see {@link withXsrfConfiguration}\n * @see {@link withNoXsrfProtection}\n * @see {@link withJsonpSupport}\n * @see {@link withRequestsMadeViaParent}\n * @see {@link withFetch}\n */\nfunction provideHttpClient(...features) {\n  if (ngDevMode) {\n    const featureKinds = new Set(features.map(f => f.ɵkind));\n    if (featureKinds.has(HttpFeatureKind.NoXsrfProtection) && featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)) {\n      throw new Error(ngDevMode ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.` : '');\n    }\n  }\n  const providers = [HttpClient, HttpXhrBackend, HttpInterceptorHandler, {\n    provide: HttpHandler,\n    useExisting: HttpInterceptorHandler\n  }, {\n    provide: HttpBackend,\n    useFactory: () => {\n      return inject(FetchBackend, {\n        optional: true\n      }) ?? inject(HttpXhrBackend);\n    }\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useValue: xsrfInterceptorFn,\n    multi: true\n  }, {\n    provide: XSRF_ENABLED,\n    useValue: true\n  }, {\n    provide: HttpXsrfTokenExtractor,\n    useClass: HttpXsrfCookieExtractor\n  }];\n  for (const feature of features) {\n    providers.push(...feature.ɵproviders);\n  }\n  return makeEnvironmentProviders(providers);\n}\n/**\n * Adds one or more functional-style HTTP interceptors to the configuration of the `HttpClient`\n * instance.\n *\n * @see {@link HttpInterceptorFn}\n * @see {@link provideHttpClient}\n * @publicApi\n */\nfunction withInterceptors(interceptorFns) {\n  return makeHttpFeature(HttpFeatureKind.Interceptors, interceptorFns.map(interceptorFn => {\n    return {\n      provide: HTTP_INTERCEPTOR_FNS,\n      useValue: interceptorFn,\n      multi: true\n    };\n  }));\n}\nconst LEGACY_INTERCEPTOR_FN = new InjectionToken(ngDevMode ? 'LEGACY_INTERCEPTOR_FN' : '');\n/**\n * Includes class-based interceptors configured using a multi-provider in the current injector into\n * the configured `HttpClient` instance.\n *\n * Prefer `withInterceptors` and functional interceptors instead, as support for DI-provided\n * interceptors may be phased out in a later release.\n *\n * @see {@link HttpInterceptor}\n * @see {@link HTTP_INTERCEPTORS}\n * @see {@link provideHttpClient}\n */\nfunction withInterceptorsFromDi() {\n  // Note: the legacy interceptor function is provided here via an intermediate token\n  // (`LEGACY_INTERCEPTOR_FN`), using a pattern which guarantees that if these providers are\n  // included multiple times, all of the multi-provider entries will have the same instance of the\n  // interceptor function. That way, the `HttpINterceptorHandler` will dedup them and legacy\n  // interceptors will not run multiple times.\n  return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [{\n    provide: LEGACY_INTERCEPTOR_FN,\n    useFactory: legacyInterceptorFnFactory\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useExisting: LEGACY_INTERCEPTOR_FN,\n    multi: true\n  }]);\n}\n/**\n * Customizes the XSRF protection for the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withNoXsrfProtection` feature.\n *\n * @see {@link provideHttpClient}\n */\nfunction withXsrfConfiguration({\n  cookieName,\n  headerName\n}) {\n  const providers = [];\n  if (cookieName !== undefined) {\n    providers.push({\n      provide: XSRF_COOKIE_NAME,\n      useValue: cookieName\n    });\n  }\n  if (headerName !== undefined) {\n    providers.push({\n      provide: XSRF_HEADER_NAME,\n      useValue: headerName\n    });\n  }\n  return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);\n}\n/**\n * Disables XSRF protection in the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withXsrfConfiguration` feature.\n *\n * @see {@link provideHttpClient}\n */\nfunction withNoXsrfProtection() {\n  return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [{\n    provide: XSRF_ENABLED,\n    useValue: false\n  }]);\n}\n/**\n * Add JSONP support to the configuration of the current `HttpClient` instance.\n *\n * @see {@link provideHttpClient}\n */\nfunction withJsonpSupport() {\n  return makeHttpFeature(HttpFeatureKind.JsonpSupport, [JsonpClientBackend, {\n    provide: JsonpCallbackContext,\n    useFactory: jsonpCallbackContext\n  }, {\n    provide: HTTP_INTERCEPTOR_FNS,\n    useValue: jsonpInterceptorFn,\n    multi: true\n  }]);\n}\n/**\n * Configures the current `HttpClient` instance to make requests via the parent injector's\n * `HttpClient` instead of directly.\n *\n * By default, `provideHttpClient` configures `HttpClient` in its injector to be an independent\n * instance. For example, even if `HttpClient` is configured in the parent injector with\n * one or more interceptors, they will not intercept requests made via this instance.\n *\n * With this option enabled, once the request has passed through the current injector's\n * interceptors, it will be delegated to the parent injector's `HttpClient` chain instead of\n * dispatched directly, and interceptors in the parent configuration will be applied to the request.\n *\n * If there are several `HttpClient` instances in the injector hierarchy, it's possible for\n * `withRequestsMadeViaParent` to be used at multiple levels, which will cause the request to\n * \"bubble up\" until either reaching the root level or an `HttpClient` which was not configured with\n * this option.\n *\n * @see {@link provideHttpClient}\n * @publicApi\n */\nfunction withRequestsMadeViaParent() {\n  return makeHttpFeature(HttpFeatureKind.RequestsMadeViaParent, [{\n    provide: HttpBackend,\n    useFactory: () => {\n      const handlerFromParent = inject(HttpHandler, {\n        skipSelf: true,\n        optional: true\n      });\n      if (ngDevMode && handlerFromParent === null) {\n        throw new Error('withRequestsMadeViaParent() can only be used when the parent injector also configures HttpClient');\n      }\n      return handlerFromParent;\n    }\n  }]);\n}\n/**\n * Configures the current `HttpClient` instance to make requests using the fetch API.\n *\n * Note: The Fetch API doesn't support progress report on uploads.\n *\n * @publicApi\n */\nfunction withFetch() {\n  return makeHttpFeature(HttpFeatureKind.Fetch, [FetchBackend, {\n    provide: HttpBackend,\n    useExisting: FetchBackend\n  }]);\n}\n\n/**\n * Configures XSRF protection support for outgoing requests.\n *\n * For a server that supports a cookie-based XSRF protection system,\n * use directly to configure XSRF protection with the correct\n * cookie and header names.\n *\n * If no names are supplied, the default cookie name is `XSRF-TOKEN`\n * and the default header name is `X-XSRF-TOKEN`.\n *\n * @publicApi\n * @deprecated Use withXsrfConfiguration({cookieName: 'XSRF-TOKEN', headerName: 'X-XSRF-TOKEN'}) as\n *     providers instead or `withNoXsrfProtection` if you want to disabled XSRF protection.\n */\nclass HttpClientXsrfModule {\n  /**\n   * Disable the default XSRF protection.\n   */\n  static disable() {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: [withNoXsrfProtection().ɵproviders]\n    };\n  }\n  /**\n   * Configure XSRF protection.\n   * @param options An object that can specify either or both\n   * cookie name or header name.\n   * - Cookie name default is `XSRF-TOKEN`.\n   * - Header name default is `X-XSRF-TOKEN`.\n   *\n   */\n  static withOptions(options = {}) {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: withXsrfConfiguration(options).ɵproviders\n    };\n  }\n  static ɵfac = function HttpClientXsrfModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientXsrfModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientXsrfModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [HttpXsrfInterceptor, {\n      provide: HTTP_INTERCEPTORS,\n      useExisting: HttpXsrfInterceptor,\n      multi: true\n    }, {\n      provide: HttpXsrfTokenExtractor,\n      useClass: HttpXsrfCookieExtractor\n    }, withXsrfConfiguration({\n      cookieName: XSRF_DEFAULT_COOKIE_NAME,\n      headerName: XSRF_DEFAULT_HEADER_NAME\n    }).ɵproviders, {\n      provide: XSRF_ENABLED,\n      useValue: true\n    }]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientXsrfModule, [{\n    type: NgModule,\n    args: [{\n      providers: [HttpXsrfInterceptor, {\n        provide: HTTP_INTERCEPTORS,\n        useExisting: HttpXsrfInterceptor,\n        multi: true\n      }, {\n        provide: HttpXsrfTokenExtractor,\n        useClass: HttpXsrfCookieExtractor\n      }, withXsrfConfiguration({\n        cookieName: XSRF_DEFAULT_COOKIE_NAME,\n        headerName: XSRF_DEFAULT_HEADER_NAME\n      }).ɵproviders, {\n        provide: XSRF_ENABLED,\n        useValue: true\n      }]\n    }]\n  }], null, null);\n})();\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for XSRF. Automatically imported by `HttpClientModule`.\n *\n * You can add interceptors to the chain behind `HttpClient` by binding them to the\n * multiprovider for built-in DI token `HTTP_INTERCEPTORS`.\n *\n * @publicApi\n * @deprecated use `provideHttpClient(withInterceptorsFromDi())` as providers instead\n */\nclass HttpClientModule {\n  static ɵfac = function HttpClientModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [provideHttpClient(withInterceptorsFromDi())]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientModule, [{\n    type: NgModule,\n    args: [{\n      /**\n       * Configures the dependency injector where it is imported\n       * with supporting services for HTTP communications.\n       */\n      providers: [provideHttpClient(withInterceptorsFromDi())]\n    }]\n  }], null, null);\n})();\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for JSONP.\n * Without this module, Jsonp requests reach the backend\n * with method JSONP, where they are rejected.\n *\n * @publicApi\n * @deprecated `withJsonpSupport()` as providers instead\n */\nclass HttpClientJsonpModule {\n  static ɵfac = function HttpClientJsonpModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HttpClientJsonpModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HttpClientJsonpModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [withJsonpSupport().ɵproviders]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HttpClientJsonpModule, [{\n    type: NgModule,\n    args: [{\n      providers: [withJsonpSupport().ɵproviders]\n    }]\n  }], null, null);\n})();\n\n/**\n * If your application uses different HTTP origins to make API calls (via `HttpClient`) on the server and\n * on the client, the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token allows you to establish a mapping\n * between those origins, so that `HttpTransferCache` feature can recognize those requests as the same\n * ones and reuse the data cached on the server during hydration on the client.\n *\n * **Important note**: the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token should *only* be provided in\n * the *server* code of your application (typically in the `app.server.config.ts` script). Angular throws an\n * error if it detects that the token is defined while running on the client.\n *\n * @usageNotes\n *\n * When the same API endpoint is accessed via `http://internal-domain.com:8080` on the server and\n * via `https://external-domain.com` on the client, you can use the following configuration:\n * ```ts\n * // in app.server.config.ts\n * {\n *     provide: HTTP_TRANSFER_CACHE_ORIGIN_MAP,\n *     useValue: {\n *         'http://internal-domain.com:8080': 'https://external-domain.com'\n *     }\n * }\n * ```\n *\n * @publicApi\n */\nconst HTTP_TRANSFER_CACHE_ORIGIN_MAP = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_CACHE_ORIGIN_MAP' : '');\n/**\n * Keys within cached response data structure.\n */\nconst BODY = 'b';\nconst HEADERS = 'h';\nconst STATUS = 's';\nconst STATUS_TEXT = 'st';\nconst REQ_URL = 'u';\nconst RESPONSE_TYPE = 'rt';\nconst CACHE_OPTIONS = new InjectionToken(ngDevMode ? 'HTTP_TRANSFER_STATE_CACHE_OPTIONS' : '');\n/**\n * A list of allowed HTTP methods to cache.\n */\nconst ALLOWED_METHODS = ['GET', 'HEAD'];\nfunction transferCacheInterceptorFn(req, next) {\n  const {\n    isCacheActive,\n    ...globalOptions\n  } = inject(CACHE_OPTIONS);\n  const {\n    transferCache: requestOptions,\n    method: requestMethod\n  } = req;\n  // In the following situations we do not want to cache the request\n  if (!isCacheActive || requestOptions === false ||\n  // POST requests are allowed either globally or at request level\n  requestMethod === 'POST' && !globalOptions.includePostRequests && !requestOptions || requestMethod !== 'POST' && !ALLOWED_METHODS.includes(requestMethod) ||\n  // Do not cache request that require authorization when includeRequestsWithAuthHeaders is falsey\n  !globalOptions.includeRequestsWithAuthHeaders && hasAuthHeaders(req) || globalOptions.filter?.(req) === false) {\n    return next(req);\n  }\n  const transferState = inject(TransferState);\n  const originMap = inject(HTTP_TRANSFER_CACHE_ORIGIN_MAP, {\n    optional: true\n  });\n  const isServer = isPlatformServer(inject(PLATFORM_ID));\n  if (originMap && !isServer) {\n    throw new ɵRuntimeError(2803 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_USED_IN_CLIENT */, ngDevMode && 'Angular detected that the `HTTP_TRANSFER_CACHE_ORIGIN_MAP` token is configured and ' + 'present in the client side code. Please ensure that this token is only provided in the ' + 'server code of the application.');\n  }\n  const requestUrl = isServer && originMap ? mapRequestOriginUrl(req.url, originMap) : req.url;\n  const storeKey = makeCacheKey(req, requestUrl);\n  const response = transferState.get(storeKey, null);\n  let headersToInclude = globalOptions.includeHeaders;\n  if (typeof requestOptions === 'object' && requestOptions.includeHeaders) {\n    // Request-specific config takes precedence over the global config.\n    headersToInclude = requestOptions.includeHeaders;\n  }\n  if (response) {\n    const {\n      [BODY]: undecodedBody,\n      [RESPONSE_TYPE]: responseType,\n      [HEADERS]: httpHeaders,\n      [STATUS]: status,\n      [STATUS_TEXT]: statusText,\n      [REQ_URL]: url\n    } = response;\n    // Request found in cache. Respond using it.\n    let body = undecodedBody;\n    switch (responseType) {\n      case 'arraybuffer':\n        body = new TextEncoder().encode(undecodedBody).buffer;\n        break;\n      case 'blob':\n        body = new Blob([undecodedBody]);\n        break;\n    }\n    // We want to warn users accessing a header provided from the cache\n    // That HttpTransferCache alters the headers\n    // The warning will be logged a single time by HttpHeaders instance\n    let headers = new HttpHeaders(httpHeaders);\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Append extra logic in dev mode to produce a warning when a header\n      // that was not transferred to the client is accessed in the code via `get`\n      // and `has` calls.\n      headers = appendMissingHeadersDetection(req.url, headers, headersToInclude ?? []);\n    }\n    return of(new HttpResponse({\n      body,\n      headers,\n      status,\n      statusText,\n      url\n    }));\n  }\n  // Request not found in cache. Make the request and cache it if on the server.\n  return next(req).pipe(tap(event => {\n    if (event instanceof HttpResponse && isServer) {\n      transferState.set(storeKey, {\n        [BODY]: event.body,\n        [HEADERS]: getFilteredHeaders(event.headers, headersToInclude),\n        [STATUS]: event.status,\n        [STATUS_TEXT]: event.statusText,\n        [REQ_URL]: requestUrl,\n        [RESPONSE_TYPE]: req.responseType\n      });\n    }\n  }));\n}\n/** @returns true when the requests contains autorization related headers. */\nfunction hasAuthHeaders(req) {\n  return req.headers.has('authorization') || req.headers.has('proxy-authorization');\n}\nfunction getFilteredHeaders(headers, includeHeaders) {\n  if (!includeHeaders) {\n    return {};\n  }\n  const headersMap = {};\n  for (const key of includeHeaders) {\n    const values = headers.getAll(key);\n    if (values !== null) {\n      headersMap[key] = values;\n    }\n  }\n  return headersMap;\n}\nfunction sortAndConcatParams(params) {\n  return [...params.keys()].sort().map(k => `${k}=${params.getAll(k)}`).join('&');\n}\nfunction makeCacheKey(request, mappedRequestUrl) {\n  // make the params encoded same as a url so it's easy to identify\n  const {\n    params,\n    method,\n    responseType\n  } = request;\n  const encodedParams = sortAndConcatParams(params);\n  let serializedBody = request.serializeBody();\n  if (serializedBody instanceof URLSearchParams) {\n    serializedBody = sortAndConcatParams(serializedBody);\n  } else if (typeof serializedBody !== 'string') {\n    serializedBody = '';\n  }\n  const key = [method, responseType, mappedRequestUrl, serializedBody, encodedParams].join('|');\n  const hash = generateHash(key);\n  return makeStateKey(hash);\n}\n/**\n * A method that returns a hash representation of a string using a variant of DJB2 hash\n * algorithm.\n *\n * This is the same hashing logic that is used to generate component ids.\n */\nfunction generateHash(value) {\n  let hash = 0;\n  for (const char of value) {\n    hash = Math.imul(31, hash) + char.charCodeAt(0) << 0;\n  }\n  // Force positive number hash.\n  // 2147483647 = equivalent of Integer.MAX_VALUE.\n  hash += 2147483647 + 1;\n  return hash.toString();\n}\n/**\n * Returns the DI providers needed to enable HTTP transfer cache.\n *\n * By default, when using server rendering, requests are performed twice: once on the server and\n * other one on the browser.\n *\n * When these providers are added, requests performed on the server are cached and reused during the\n * bootstrapping of the application in the browser thus avoiding duplicate requests and reducing\n * load time.\n *\n */\nfunction withHttpTransferCache(cacheOptions) {\n  return [{\n    provide: CACHE_OPTIONS,\n    useFactory: () => {\n      ɵperformanceMarkFeature('NgHttpTransferCache');\n      return {\n        isCacheActive: true,\n        ...cacheOptions\n      };\n    }\n  }, {\n    provide: HTTP_ROOT_INTERCEPTOR_FNS,\n    useValue: transferCacheInterceptorFn,\n    multi: true,\n    deps: [TransferState, CACHE_OPTIONS]\n  }, {\n    provide: APP_BOOTSTRAP_LISTENER,\n    multi: true,\n    useFactory: () => {\n      const appRef = inject(ApplicationRef);\n      const cacheState = inject(CACHE_OPTIONS);\n      return () => {\n        appRef.whenStable().then(() => {\n          cacheState.isCacheActive = false;\n        });\n      };\n    }\n  }];\n}\n/**\n * This function will add a proxy to an HttpHeader to intercept calls to get/has\n * and log a warning if the header entry requested has been removed\n */\nfunction appendMissingHeadersDetection(url, headers, headersToInclude) {\n  const warningProduced = new Set();\n  return new Proxy(headers, {\n    get(target, prop) {\n      const value = Reflect.get(target, prop);\n      const methods = new Set(['get', 'has', 'getAll']);\n      if (typeof value !== 'function' || !methods.has(prop)) {\n        return value;\n      }\n      return headerName => {\n        // We log when the key has been removed and a warning hasn't been produced for the header\n        const key = (prop + ':' + headerName).toLowerCase(); // e.g. `get:cache-control`\n        if (!headersToInclude.includes(headerName) && !warningProduced.has(key)) {\n          warningProduced.add(key);\n          const truncatedUrl = ɵtruncateMiddle(url);\n          // TODO: create Error guide for this warning\n          console.warn(ɵformatRuntimeError(2802 /* RuntimeErrorCode.HEADERS_ALTERED_BY_TRANSFER_CACHE */, `Angular detected that the \\`${headerName}\\` header is accessed, but the value of the header ` + `was not transferred from the server to the client by the HttpTransferCache. ` + `To include the value of the \\`${headerName}\\` header for the \\`${truncatedUrl}\\` request, ` + `use the \\`includeHeaders\\` list. The \\`includeHeaders\\` can be defined either ` + `on a request level by adding the \\`transferCache\\` parameter, or on an application ` + `level by adding the \\`httpCacheTransfer.includeHeaders\\` argument to the ` + `\\`provideClientHydration()\\` call. `));\n        }\n        // invoking the original method\n        return value.apply(target, [headerName]);\n      };\n    }\n  });\n}\nfunction mapRequestOriginUrl(url, originMap) {\n  const origin = new URL(url, 'resolve://').origin;\n  const mappedOrigin = originMap[origin];\n  if (!mappedOrigin) {\n    return url;\n  }\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    verifyMappedOrigin(mappedOrigin);\n  }\n  return url.replace(origin, mappedOrigin);\n}\nfunction verifyMappedOrigin(url) {\n  if (new URL(url, 'resolve://').pathname !== '/') {\n    throw new ɵRuntimeError(2804 /* RuntimeErrorCode.HTTP_ORIGIN_MAP_CONTAINS_PATH */, 'Angular detected a URL with a path segment in the value provided for the ' + `\\`HTTP_TRANSFER_CACHE_ORIGIN_MAP\\` token: ${url}. The map should only contain origins ` + 'without any other segments.');\n  }\n}\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { FetchBackend, HTTP_INTERCEPTORS, HTTP_TRANSFER_CACHE_ORIGIN_MAP, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpContext, HttpContextToken, HttpErrorResponse, HttpEventType, HttpFeatureKind, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpStatusCode, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, provideHttpClient, withFetch, withInterceptors, withInterceptorsFromDi, withJsonpSupport, withNoXsrfProtection, withRequestsMadeViaParent, withXsrfConfiguration, HTTP_ROOT_INTERCEPTOR_FNS as ɵHTTP_ROOT_INTERCEPTOR_FNS, HttpInterceptorHandler as ɵHttpInterceptingHandler, HttpInterceptorHandler as ɵHttpInterceptorHandler, REQUESTS_CONTRIBUTE_TO_STABILITY as ɵREQUESTS_CONTRIBUTE_TO_STABILITY, withHttpTransferCache as ɵwithHttpTransferCache };\n", "/**\n * @license Angular v19.0.5\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵDomAdapter, ɵsetRootDomAdapter, ɵparseCookieValue, ɵgetDOM, isPlatformServer, DOCUMENT, ɵPLATFORM_BROWSER_ID, XhrFactory, CommonModule } from '@angular/common';\nexport { ɵgetDOM } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { ɵglobal, ɵRuntimeError, Injectable, InjectionToken, Inject, APP_ID, CSP_NONCE, PLATFORM_ID, Optional, ViewEncapsulation, RendererStyleFlags2, ɵinternalCreateApplication, ErrorHandler, ɵsetDocument, PLATFORM_INITIALIZER, createPlatformFactory, platformCore, ɵTESTABILITY_GETTER, ɵTESTABILITY, Testability, NgZone, TestabilityRegistry, ɵINJECTOR_SCOPE, RendererFactory2, ApplicationModule, NgModule, SkipSelf, ApplicationRef, ɵConsole, forwardRef, ɵXSS_SECURITY_URL, SecurityContext, ɵallowSanitizationBypassAndThrow, ɵunwrapSafeValue, ɵ_sanitizeUrl, ɵ_sanitizeHtml, ɵbypassSanitizationTrustHtml, ɵbypassSanitizationTrustStyle, ɵbypassSanitizationTrustScript, ɵbypassSanitizationTrustUrl, ɵbypassSanitizationTrustResourceUrl, ɵwithI18nSupport, ɵwithEventReplay, ɵwithIncrementalHydration, ENVIRONMENT_INITIALIZER, inject, ɵZONELESS_ENABLED, ɵformatRuntimeError, makeEnvironmentProviders, ɵwithDomHydration, Version } from '@angular/core';\nimport { ɵwithHttpTransferCache } from '@angular/common/http';\n\n/**\n * Provides DOM operations in any browser environment.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\nclass GenericBrowserDomAdapter extends ɵDomAdapter {\n  supportsDOMEvents = true;\n}\n\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n *\n * @security Tread carefully! Interacting with the DOM directly is dangerous and\n * can introduce XSS risks.\n */\n/* tslint:disable:requireParameterType no-console */\nclass BrowserDomAdapter extends GenericBrowserDomAdapter {\n  static makeCurrent() {\n    ɵsetRootDomAdapter(new BrowserDomAdapter());\n  }\n  onAndCancel(el, evt, listener) {\n    el.addEventListener(evt, listener);\n    return () => {\n      el.removeEventListener(evt, listener);\n    };\n  }\n  dispatchEvent(el, evt) {\n    el.dispatchEvent(evt);\n  }\n  remove(node) {\n    node.remove();\n  }\n  createElement(tagName, doc) {\n    doc = doc || this.getDefaultDocument();\n    return doc.createElement(tagName);\n  }\n  createHtmlDocument() {\n    return document.implementation.createHTMLDocument('fakeTitle');\n  }\n  getDefaultDocument() {\n    return document;\n  }\n  isElementNode(node) {\n    return node.nodeType === Node.ELEMENT_NODE;\n  }\n  isShadowRoot(node) {\n    return node instanceof DocumentFragment;\n  }\n  /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n  getGlobalEventTarget(doc, target) {\n    if (target === 'window') {\n      return window;\n    }\n    if (target === 'document') {\n      return doc;\n    }\n    if (target === 'body') {\n      return doc.body;\n    }\n    return null;\n  }\n  getBaseHref(doc) {\n    const href = getBaseElementHref();\n    return href == null ? null : relativePath(href);\n  }\n  resetBaseElement() {\n    baseElement = null;\n  }\n  getUserAgent() {\n    return window.navigator.userAgent;\n  }\n  getCookie(name) {\n    return ɵparseCookieValue(document.cookie, name);\n  }\n}\nlet baseElement = null;\nfunction getBaseElementHref() {\n  baseElement = baseElement || document.querySelector('base');\n  return baseElement ? baseElement.getAttribute('href') : null;\n}\nfunction relativePath(url) {\n  // The base URL doesn't really matter, we just need it so relative paths have something\n  // to resolve against. In the browser `HTMLBaseElement.href` is always absolute.\n  return new URL(url, document.baseURI).pathname;\n}\nclass BrowserGetTestability {\n  addToWindow(registry) {\n    ɵglobal['getAngularTestability'] = (elem, findInAncestors = true) => {\n      const testability = registry.findTestabilityInTree(elem, findInAncestors);\n      if (testability == null) {\n        throw new ɵRuntimeError(5103 /* RuntimeErrorCode.TESTABILITY_NOT_FOUND */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Could not find testability for element.');\n      }\n      return testability;\n    };\n    ɵglobal['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n    ɵglobal['getAllAngularRootElements'] = () => registry.getAllRootElements();\n    const whenAllStable = callback => {\n      const testabilities = ɵglobal['getAllAngularTestabilities']();\n      let count = testabilities.length;\n      const decrement = function () {\n        count--;\n        if (count == 0) {\n          callback();\n        }\n      };\n      testabilities.forEach(testability => {\n        testability.whenStable(decrement);\n      });\n    };\n    if (!ɵglobal['frameworkStabilizers']) {\n      ɵglobal['frameworkStabilizers'] = [];\n    }\n    ɵglobal['frameworkStabilizers'].push(whenAllStable);\n  }\n  findTestabilityInTree(registry, elem, findInAncestors) {\n    if (elem == null) {\n      return null;\n    }\n    const t = registry.getTestability(elem);\n    if (t != null) {\n      return t;\n    } else if (!findInAncestors) {\n      return null;\n    }\n    if (ɵgetDOM().isShadowRoot(elem)) {\n      return this.findTestabilityInTree(registry, elem.host, true);\n    }\n    return this.findTestabilityInTree(registry, elem.parentElement, true);\n  }\n}\n\n/**\n * A factory for `HttpXhrBackend` that uses the `XMLHttpRequest` browser API.\n */\nclass BrowserXhr {\n  build() {\n    return new XMLHttpRequest();\n  }\n  static ɵfac = function BrowserXhr_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserXhr)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: BrowserXhr,\n    factory: BrowserXhr.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserXhr, [{\n    type: Injectable\n  }], null, null);\n})();\n\n/**\n * The injection token for plugins of the `EventManager` service.\n *\n * @publicApi\n */\nconst EVENT_MANAGER_PLUGINS = new InjectionToken(ngDevMode ? 'EventManagerPlugins' : '');\n/**\n * An injectable service that provides event management for Angular\n * through a browser plug-in.\n *\n * @publicApi\n */\nclass EventManager {\n  _zone;\n  _plugins;\n  _eventNameToPlugin = new Map();\n  /**\n   * Initializes an instance of the event-manager service.\n   */\n  constructor(plugins, _zone) {\n    this._zone = _zone;\n    plugins.forEach(plugin => {\n      plugin.manager = this;\n    });\n    this._plugins = plugins.slice().reverse();\n  }\n  /**\n   * Registers a handler for a specific element and event.\n   *\n   * @param element The HTML element to receive event notifications.\n   * @param eventName The name of the event to listen for.\n   * @param handler A function to call when the notification occurs. Receives the\n   * event object as an argument.\n   * @returns  A callback function that can be used to remove the handler.\n   */\n  addEventListener(element, eventName, handler) {\n    const plugin = this._findPluginFor(eventName);\n    return plugin.addEventListener(element, eventName, handler);\n  }\n  /**\n   * Retrieves the compilation zone in which event listeners are registered.\n   */\n  getZone() {\n    return this._zone;\n  }\n  /** @internal */\n  _findPluginFor(eventName) {\n    let plugin = this._eventNameToPlugin.get(eventName);\n    if (plugin) {\n      return plugin;\n    }\n    const plugins = this._plugins;\n    plugin = plugins.find(plugin => plugin.supports(eventName));\n    if (!plugin) {\n      throw new ɵRuntimeError(5101 /* RuntimeErrorCode.NO_PLUGIN_FOR_EVENT */, (typeof ngDevMode === 'undefined' || ngDevMode) && `No event manager plugin found for event ${eventName}`);\n    }\n    this._eventNameToPlugin.set(eventName, plugin);\n    return plugin;\n  }\n  static ɵfac = function EventManager_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || EventManager)(i0.ɵɵinject(EVENT_MANAGER_PLUGINS), i0.ɵɵinject(i0.NgZone));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: EventManager,\n    factory: EventManager.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(EventManager, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [EVENT_MANAGER_PLUGINS]\n    }]\n  }, {\n    type: i0.NgZone\n  }], null);\n})();\n/**\n * The plugin definition for the `EventManager` class\n *\n * It can be used as a base class to create custom manager plugins, i.e. you can create your own\n * class that extends the `EventManagerPlugin` one.\n *\n * @publicApi\n */\nclass EventManagerPlugin {\n  _doc;\n  // TODO: remove (has some usage in G3)\n  constructor(_doc) {\n    this._doc = _doc;\n  }\n  // Using non-null assertion because it's set by EventManager's constructor\n  manager;\n}\n\n/** The style elements attribute name used to set value of `APP_ID` token. */\nconst APP_ID_ATTRIBUTE_NAME = 'ng-app-id';\n/**\n * Removes all provided elements from the document.\n * @param elements An array of HTML Elements.\n */\nfunction removeElements(elements) {\n  for (const element of elements) {\n    element.remove();\n  }\n}\n/**\n * Creates a `style` element with the provided inline style content.\n * @param style A string of the inline style content.\n * @param doc A DOM Document to use to create the element.\n * @returns An HTMLStyleElement instance.\n */\nfunction createStyleElement(style, doc) {\n  const styleElement = doc.createElement('style');\n  styleElement.textContent = style;\n  return styleElement;\n}\n/**\n * Searches a DOM document's head element for style elements with a matching application\n * identifier attribute (`ng-app-id`) to the provide identifier and adds usage records for each.\n * @param doc An HTML DOM document instance.\n * @param appId A string containing an Angular application identifer.\n * @param inline A Map object for tracking inline (defined via `styles` in component decorator) style usage.\n * @param external A Map object for tracking external (defined via `styleUrls` in component decorator) style usage.\n */\nfunction addServerStyles(doc, appId, inline, external) {\n  const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"],link[${APP_ID_ATTRIBUTE_NAME}=\"${appId}\"]`);\n  if (elements) {\n    for (const styleElement of elements) {\n      styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);\n      if (styleElement instanceof HTMLLinkElement) {\n        // Only use filename from href\n        // The href is build time generated with a unique value to prevent duplicates.\n        external.set(styleElement.href.slice(styleElement.href.lastIndexOf('/') + 1), {\n          usage: 0,\n          elements: [styleElement]\n        });\n      } else if (styleElement.textContent) {\n        inline.set(styleElement.textContent, {\n          usage: 0,\n          elements: [styleElement]\n        });\n      }\n    }\n  }\n}\n/**\n * Creates a `link` element for the provided external style URL.\n * @param url A string of the URL for the stylesheet.\n * @param doc A DOM Document to use to create the element.\n * @returns An HTMLLinkElement instance.\n */\nfunction createLinkElement(url, doc) {\n  const linkElement = doc.createElement('link');\n  linkElement.setAttribute('rel', 'stylesheet');\n  linkElement.setAttribute('href', url);\n  return linkElement;\n}\nclass SharedStylesHost {\n  doc;\n  appId;\n  nonce;\n  /**\n   * Provides usage information for active inline style content and associated HTML <style> elements.\n   * Embedded styles typically originate from the `styles` metadata of a rendered component.\n   */\n  inline = new Map();\n  /**\n   * Provides usage information for active external style URLs and the associated HTML <link> elements.\n   * External styles typically originate from the `ɵɵExternalStylesFeature` of a rendered component.\n   */\n  external = new Map();\n  /**\n   * Set of host DOM nodes that will have styles attached.\n   */\n  hosts = new Set();\n  /**\n   * Whether the application code is currently executing on a server.\n   */\n  isServer;\n  constructor(doc, appId, nonce, platformId = {}) {\n    this.doc = doc;\n    this.appId = appId;\n    this.nonce = nonce;\n    this.isServer = isPlatformServer(platformId);\n    addServerStyles(doc, appId, this.inline, this.external);\n    this.hosts.add(doc.head);\n  }\n  /**\n   * Adds embedded styles to the DOM via HTML `style` elements.\n   * @param styles An array of style content strings.\n   */\n  addStyles(styles, urls) {\n    for (const value of styles) {\n      this.addUsage(value, this.inline, createStyleElement);\n    }\n    urls?.forEach(value => this.addUsage(value, this.external, createLinkElement));\n  }\n  /**\n   * Removes embedded styles from the DOM that were added as HTML `style` elements.\n   * @param styles An array of style content strings.\n   */\n  removeStyles(styles, urls) {\n    for (const value of styles) {\n      this.removeUsage(value, this.inline);\n    }\n    urls?.forEach(value => this.removeUsage(value, this.external));\n  }\n  addUsage(value, usages, creator) {\n    // Attempt to get any current usage of the value\n    const record = usages.get(value);\n    // If existing, just increment the usage count\n    if (record) {\n      if ((typeof ngDevMode === 'undefined' || ngDevMode) && record.usage === 0) {\n        // A usage count of zero indicates a preexisting server generated style.\n        // This attribute is solely used for debugging purposes of SSR style reuse.\n        record.elements.forEach(element => element.setAttribute('ng-style-reused', ''));\n      }\n      record.usage++;\n    } else {\n      // Otherwise, create an entry to track the elements and add element for each host\n      usages.set(value, {\n        usage: 1,\n        elements: [...this.hosts].map(host => this.addElement(host, creator(value, this.doc)))\n      });\n    }\n  }\n  removeUsage(value, usages) {\n    // Attempt to get any current usage of the value\n    const record = usages.get(value);\n    // If there is a record, reduce the usage count and if no longer used,\n    // remove from DOM and delete usage record.\n    if (record) {\n      record.usage--;\n      if (record.usage <= 0) {\n        removeElements(record.elements);\n        usages.delete(value);\n      }\n    }\n  }\n  ngOnDestroy() {\n    for (const [, {\n      elements\n    }] of [...this.inline, ...this.external]) {\n      removeElements(elements);\n    }\n    this.hosts.clear();\n  }\n  /**\n   * Adds a host node to the set of style hosts and adds all existing style usage to\n   * the newly added host node.\n   *\n   * This is currently only used for Shadow DOM encapsulation mode.\n   */\n  addHost(hostNode) {\n    this.hosts.add(hostNode);\n    // Add existing styles to new host\n    for (const [style, {\n      elements\n    }] of this.inline) {\n      elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));\n    }\n    for (const [url, {\n      elements\n    }] of this.external) {\n      elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));\n    }\n  }\n  removeHost(hostNode) {\n    this.hosts.delete(hostNode);\n  }\n  addElement(host, element) {\n    // Add a nonce if present\n    if (this.nonce) {\n      element.setAttribute('nonce', this.nonce);\n    }\n    // Add application identifier when on the server to support client-side reuse\n    if (this.isServer) {\n      element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);\n    }\n    // Insert the element into the DOM with the host node as parent\n    return host.appendChild(element);\n  }\n  static ɵfac = function SharedStylesHost_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || SharedStylesHost)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(APP_ID), i0.ɵɵinject(CSP_NONCE, 8), i0.ɵɵinject(PLATFORM_ID));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: SharedStylesHost,\n    factory: SharedStylesHost.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(SharedStylesHost, [{\n    type: Injectable\n  }], () => [{\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [APP_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [CSP_NONCE]\n    }, {\n      type: Optional\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }], null);\n})();\nconst NAMESPACE_URIS = {\n  'svg': 'http://www.w3.org/2000/svg',\n  'xhtml': 'http://www.w3.org/1999/xhtml',\n  'xlink': 'http://www.w3.org/1999/xlink',\n  'xml': 'http://www.w3.org/XML/1998/namespace',\n  'xmlns': 'http://www.w3.org/2000/xmlns/',\n  'math': 'http://www.w3.org/1998/Math/MathML'\n};\nconst COMPONENT_REGEX = /%COMP%/g;\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n/**\n * The default value for the `REMOVE_STYLES_ON_COMPONENT_DESTROY` DI token.\n */\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;\n/**\n * A DI token that indicates whether styles\n * of destroyed components should be removed from DOM.\n *\n * By default, the value is set to `true`.\n * @publicApi\n */\nconst REMOVE_STYLES_ON_COMPONENT_DESTROY = new InjectionToken(ngDevMode ? 'RemoveStylesOnCompDestroy' : '', {\n  providedIn: 'root',\n  factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT\n});\nfunction shimContentAttribute(componentShortId) {\n  return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimHostAttribute(componentShortId) {\n  return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\nfunction shimStylesContent(compId, styles) {\n  return styles.map(s => s.replace(COMPONENT_REGEX, compId));\n}\nclass DomRendererFactory2 {\n  eventManager;\n  sharedStylesHost;\n  appId;\n  removeStylesOnCompDestroy;\n  doc;\n  platformId;\n  ngZone;\n  nonce;\n  rendererByCompId = new Map();\n  defaultRenderer;\n  platformIsServer;\n  constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, platformId, ngZone, nonce = null) {\n    this.eventManager = eventManager;\n    this.sharedStylesHost = sharedStylesHost;\n    this.appId = appId;\n    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n    this.doc = doc;\n    this.platformId = platformId;\n    this.ngZone = ngZone;\n    this.nonce = nonce;\n    this.platformIsServer = isPlatformServer(platformId);\n    this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.platformIsServer);\n  }\n  createRenderer(element, type) {\n    if (!element || !type) {\n      return this.defaultRenderer;\n    }\n    if (this.platformIsServer && type.encapsulation === ViewEncapsulation.ShadowDom) {\n      // Domino does not support shadow DOM.\n      type = {\n        ...type,\n        encapsulation: ViewEncapsulation.Emulated\n      };\n    }\n    const renderer = this.getOrCreateRenderer(element, type);\n    // Renderers have different logic due to different encapsulation behaviours.\n    // Ex: for emulated, an attribute is added to the element.\n    if (renderer instanceof EmulatedEncapsulationDomRenderer2) {\n      renderer.applyToHost(element);\n    } else if (renderer instanceof NoneEncapsulationDomRenderer) {\n      renderer.applyStyles();\n    }\n    return renderer;\n  }\n  getOrCreateRenderer(element, type) {\n    const rendererByCompId = this.rendererByCompId;\n    let renderer = rendererByCompId.get(type.id);\n    if (!renderer) {\n      const doc = this.doc;\n      const ngZone = this.ngZone;\n      const eventManager = this.eventManager;\n      const sharedStylesHost = this.sharedStylesHost;\n      const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;\n      const platformIsServer = this.platformIsServer;\n      switch (type.encapsulation) {\n        case ViewEncapsulation.Emulated:\n          renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);\n          break;\n        case ViewEncapsulation.ShadowDom:\n          return new ShadowDomRenderer(eventManager, sharedStylesHost, element, type, doc, ngZone, this.nonce, platformIsServer);\n        default:\n          renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, platformIsServer);\n          break;\n      }\n      rendererByCompId.set(type.id, renderer);\n    }\n    return renderer;\n  }\n  ngOnDestroy() {\n    this.rendererByCompId.clear();\n  }\n  static ɵfac = function DomRendererFactory2_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomRendererFactory2)(i0.ɵɵinject(EventManager), i0.ɵɵinject(SharedStylesHost), i0.ɵɵinject(APP_ID), i0.ɵɵinject(REMOVE_STYLES_ON_COMPONENT_DESTROY), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(CSP_NONCE));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomRendererFactory2,\n    factory: DomRendererFactory2.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomRendererFactory2, [{\n    type: Injectable\n  }], () => [{\n    type: EventManager\n  }, {\n    type: SharedStylesHost\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [APP_ID]\n    }]\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [REMOVE_STYLES_ON_COMPONENT_DESTROY]\n    }]\n  }, {\n    type: Document,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: Object,\n    decorators: [{\n      type: Inject,\n      args: [PLATFORM_ID]\n    }]\n  }, {\n    type: i0.NgZone\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [CSP_NONCE]\n    }]\n  }], null);\n})();\nclass DefaultDomRenderer2 {\n  eventManager;\n  doc;\n  ngZone;\n  platformIsServer;\n  data = Object.create(null);\n  /**\n   * By default this renderer throws when encountering synthetic properties\n   * This can be disabled for example by the AsyncAnimationRendererFactory\n   */\n  throwOnSyntheticProps = true;\n  constructor(eventManager, doc, ngZone, platformIsServer) {\n    this.eventManager = eventManager;\n    this.doc = doc;\n    this.ngZone = ngZone;\n    this.platformIsServer = platformIsServer;\n  }\n  destroy() {}\n  destroyNode = null;\n  createElement(name, namespace) {\n    if (namespace) {\n      // TODO: `|| namespace` was added in\n      // https://github.com/angular/angular/commit/2b9cc8503d48173492c29f5a271b61126104fbdb to\n      // support how Ivy passed around the namespace URI rather than short name at the time. It did\n      // not, however extend the support to other parts of the system (setAttribute, setAttribute,\n      // and the ServerRenderer). We should decide what exactly the semantics for dealing with\n      // namespaces should be and make it consistent.\n      // Related issues:\n      // https://github.com/angular/angular/issues/44028\n      // https://github.com/angular/angular/issues/44883\n      return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);\n    }\n    return this.doc.createElement(name);\n  }\n  createComment(value) {\n    return this.doc.createComment(value);\n  }\n  createText(value) {\n    return this.doc.createTextNode(value);\n  }\n  appendChild(parent, newChild) {\n    const targetParent = isTemplateNode(parent) ? parent.content : parent;\n    targetParent.appendChild(newChild);\n  }\n  insertBefore(parent, newChild, refChild) {\n    if (parent) {\n      const targetParent = isTemplateNode(parent) ? parent.content : parent;\n      targetParent.insertBefore(newChild, refChild);\n    }\n  }\n  removeChild(_parent, oldChild) {\n    oldChild.remove();\n  }\n  selectRootElement(selectorOrNode, preserveContent) {\n    let el = typeof selectorOrNode === 'string' ? this.doc.querySelector(selectorOrNode) : selectorOrNode;\n    if (!el) {\n      throw new ɵRuntimeError(-5104 /* RuntimeErrorCode.ROOT_NODE_NOT_FOUND */, (typeof ngDevMode === 'undefined' || ngDevMode) && `The selector \"${selectorOrNode}\" did not match any elements`);\n    }\n    if (!preserveContent) {\n      el.textContent = '';\n    }\n    return el;\n  }\n  parentNode(node) {\n    return node.parentNode;\n  }\n  nextSibling(node) {\n    return node.nextSibling;\n  }\n  setAttribute(el, name, value, namespace) {\n    if (namespace) {\n      name = namespace + ':' + name;\n      const namespaceUri = NAMESPACE_URIS[namespace];\n      if (namespaceUri) {\n        el.setAttributeNS(namespaceUri, name, value);\n      } else {\n        el.setAttribute(name, value);\n      }\n    } else {\n      el.setAttribute(name, value);\n    }\n  }\n  removeAttribute(el, name, namespace) {\n    if (namespace) {\n      const namespaceUri = NAMESPACE_URIS[namespace];\n      if (namespaceUri) {\n        el.removeAttributeNS(namespaceUri, name);\n      } else {\n        el.removeAttribute(`${namespace}:${name}`);\n      }\n    } else {\n      el.removeAttribute(name);\n    }\n  }\n  addClass(el, name) {\n    el.classList.add(name);\n  }\n  removeClass(el, name) {\n    el.classList.remove(name);\n  }\n  setStyle(el, style, value, flags) {\n    if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {\n      el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? 'important' : '');\n    } else {\n      el.style[style] = value;\n    }\n  }\n  removeStyle(el, style, flags) {\n    if (flags & RendererStyleFlags2.DashCase) {\n      // removeProperty has no effect when used on camelCased properties.\n      el.style.removeProperty(style);\n    } else {\n      el.style[style] = '';\n    }\n  }\n  setProperty(el, name, value) {\n    if (el == null) {\n      return;\n    }\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, 'property');\n    el[name] = value;\n  }\n  setValue(node, value) {\n    node.nodeValue = value;\n  }\n  listen(target, event, callback) {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, 'listener');\n    if (typeof target === 'string') {\n      target = ɵgetDOM().getGlobalEventTarget(this.doc, target);\n      if (!target) {\n        throw new Error(`Unsupported event target ${target} for event ${event}`);\n      }\n    }\n    return this.eventManager.addEventListener(target, event, this.decoratePreventDefault(callback));\n  }\n  decoratePreventDefault(eventHandler) {\n    // `DebugNode.triggerEventHandler` needs to know if the listener was created with\n    // decoratePreventDefault or is a listener added outside the Angular context so it can handle\n    // the two differently. In the first case, the special '__ngUnwrap__' token is passed to the\n    // unwrap the listener (see below).\n    return event => {\n      // Ivy uses '__ngUnwrap__' as a special token that allows us to unwrap the function\n      // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`. The\n      // debug_node can inspect the listener toString contents for the existence of this special\n      // token. Because the token is a string literal, it is ensured to not be modified by compiled\n      // code.\n      if (event === '__ngUnwrap__') {\n        return eventHandler;\n      }\n      // Run the event handler inside the ngZone because event handlers are not patched\n      // by Zone on the server. This is required only for tests.\n      const allowDefaultBehavior = this.platformIsServer ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);\n      if (allowDefaultBehavior === false) {\n        event.preventDefault();\n      }\n      return undefined;\n    };\n  }\n}\nconst AT_CHARCODE = (() => '@'.charCodeAt(0))();\nfunction checkNoSyntheticProp(name, nameKind) {\n  if (name.charCodeAt(0) === AT_CHARCODE) {\n    throw new ɵRuntimeError(5105 /* RuntimeErrorCode.UNEXPECTED_SYNTHETIC_PROPERTY */, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:\n  - Either \\`BrowserAnimationsModule\\` or \\`NoopAnimationsModule\\` are imported in your application.\n  - There is corresponding configuration for the animation named \\`${name}\\` defined in the \\`animations\\` field of the \\`@Component\\` decorator (see https://angular.io/api/core/Component#animations).`);\n  }\n}\nfunction isTemplateNode(node) {\n  return node.tagName === 'TEMPLATE' && node.content !== undefined;\n}\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\n  sharedStylesHost;\n  hostEl;\n  shadowRoot;\n  constructor(eventManager, sharedStylesHost, hostEl, component, doc, ngZone, nonce, platformIsServer) {\n    super(eventManager, doc, ngZone, platformIsServer);\n    this.sharedStylesHost = sharedStylesHost;\n    this.hostEl = hostEl;\n    this.shadowRoot = hostEl.attachShadow({\n      mode: 'open'\n    });\n    this.sharedStylesHost.addHost(this.shadowRoot);\n    const styles = shimStylesContent(component.id, component.styles);\n    for (const style of styles) {\n      const styleEl = document.createElement('style');\n      if (nonce) {\n        styleEl.setAttribute('nonce', nonce);\n      }\n      styleEl.textContent = style;\n      this.shadowRoot.appendChild(styleEl);\n    }\n    // Apply any external component styles to the shadow root for the component's element.\n    // The ShadowDOM renderer uses an alternative execution path for component styles that\n    // does not use the SharedStylesHost that other encapsulation modes leverage. Much like\n    // the manual addition of embedded styles directly above, any external stylesheets\n    // must be manually added here to ensure ShadowDOM components are correctly styled.\n    // TODO: Consider reworking the DOM Renderers to consolidate style handling.\n    const styleUrls = component.getExternalStyles?.();\n    if (styleUrls) {\n      for (const styleUrl of styleUrls) {\n        const linkEl = createLinkElement(styleUrl, doc);\n        if (nonce) {\n          linkEl.setAttribute('nonce', nonce);\n        }\n        this.shadowRoot.appendChild(linkEl);\n      }\n    }\n  }\n  nodeOrShadowRoot(node) {\n    return node === this.hostEl ? this.shadowRoot : node;\n  }\n  appendChild(parent, newChild) {\n    return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n  }\n  insertBefore(parent, newChild, refChild) {\n    return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n  }\n  removeChild(_parent, oldChild) {\n    return super.removeChild(null, oldChild);\n  }\n  parentNode(node) {\n    return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n  }\n  destroy() {\n    this.sharedStylesHost.removeHost(this.shadowRoot);\n  }\n}\nclass NoneEncapsulationDomRenderer extends DefaultDomRenderer2 {\n  sharedStylesHost;\n  removeStylesOnCompDestroy;\n  styles;\n  styleUrls;\n  constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId) {\n    super(eventManager, doc, ngZone, platformIsServer);\n    this.sharedStylesHost = sharedStylesHost;\n    this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;\n    this.styles = compId ? shimStylesContent(compId, component.styles) : component.styles;\n    this.styleUrls = component.getExternalStyles?.(compId);\n  }\n  applyStyles() {\n    this.sharedStylesHost.addStyles(this.styles, this.styleUrls);\n  }\n  destroy() {\n    if (!this.removeStylesOnCompDestroy) {\n      return;\n    }\n    this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);\n  }\n}\nclass EmulatedEncapsulationDomRenderer2 extends NoneEncapsulationDomRenderer {\n  contentAttr;\n  hostAttr;\n  constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer) {\n    const compId = appId + '-' + component.id;\n    super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, compId);\n    this.contentAttr = shimContentAttribute(compId);\n    this.hostAttr = shimHostAttribute(compId);\n  }\n  applyToHost(element) {\n    this.applyStyles();\n    this.setAttribute(element, this.hostAttr, '');\n  }\n  createElement(parent, name) {\n    const el = super.createElement(parent, name);\n    super.setAttribute(el, this.contentAttr, '');\n    return el;\n  }\n}\nclass DomEventsPlugin extends EventManagerPlugin {\n  constructor(doc) {\n    super(doc);\n  }\n  // This plugin should come last in the list of plugins, because it accepts all\n  // events.\n  supports(eventName) {\n    return true;\n  }\n  addEventListener(element, eventName, handler) {\n    element.addEventListener(eventName, handler, false);\n    return () => this.removeEventListener(element, eventName, handler);\n  }\n  removeEventListener(target, eventName, callback) {\n    return target.removeEventListener(eventName, callback);\n  }\n  static ɵfac = function DomEventsPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomEventsPlugin,\n    factory: DomEventsPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomEventsPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Defines supported modifiers for key events.\n */\nconst MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\n// The following values are here for cross-browser compatibility and to match the W3C standard\n// cf https://www.w3.org/TR/DOM-Level-3-Events-key/\nconst _keyMap = {\n  '\\b': 'Backspace',\n  '\\t': 'Tab',\n  '\\x7F': 'Delete',\n  '\\x1B': 'Escape',\n  'Del': 'Delete',\n  'Esc': 'Escape',\n  'Left': 'ArrowLeft',\n  'Right': 'ArrowRight',\n  'Up': 'ArrowUp',\n  'Down': 'ArrowDown',\n  'Menu': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'Win': 'OS'\n};\n/**\n * Retrieves modifiers from key-event objects.\n */\nconst MODIFIER_KEY_GETTERS = {\n  'alt': event => event.altKey,\n  'control': event => event.ctrlKey,\n  'meta': event => event.metaKey,\n  'shift': event => event.shiftKey\n};\n/**\n * A browser plug-in that provides support for handling of key events in Angular.\n */\nclass KeyEventsPlugin extends EventManagerPlugin {\n  /**\n   * Initializes an instance of the browser plug-in.\n   * @param doc The document in which key events will be detected.\n   */\n  constructor(doc) {\n    super(doc);\n  }\n  /**\n   * Reports whether a named key event is supported.\n   * @param eventName The event name to query.\n   * @return True if the named key event is supported.\n   */\n  supports(eventName) {\n    return KeyEventsPlugin.parseEventName(eventName) != null;\n  }\n  /**\n   * Registers a handler for a specific element and key event.\n   * @param element The HTML element to receive event notifications.\n   * @param eventName The name of the key event to listen for.\n   * @param handler A function to call when the notification occurs. Receives the\n   * event object as an argument.\n   * @returns The key event that was registered.\n   */\n  addEventListener(element, eventName, handler) {\n    const parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n    const outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());\n    return this.manager.getZone().runOutsideAngular(() => {\n      return ɵgetDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);\n    });\n  }\n  /**\n   * Parses the user provided full keyboard event definition and normalizes it for\n   * later internal use. It ensures the string is all lowercase, converts special\n   * characters to a standard spelling, and orders all the values consistently.\n   *\n   * @param eventName The name of the key event to listen for.\n   * @returns an object with the full, normalized string, and the dom event name\n   * or null in the case when the event doesn't match a keyboard event.\n   */\n  static parseEventName(eventName) {\n    const parts = eventName.toLowerCase().split('.');\n    const domEventName = parts.shift();\n    if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n      return null;\n    }\n    const key = KeyEventsPlugin._normalizeKey(parts.pop());\n    let fullKey = '';\n    let codeIX = parts.indexOf('code');\n    if (codeIX > -1) {\n      parts.splice(codeIX, 1);\n      fullKey = 'code.';\n    }\n    MODIFIER_KEYS.forEach(modifierName => {\n      const index = parts.indexOf(modifierName);\n      if (index > -1) {\n        parts.splice(index, 1);\n        fullKey += modifierName + '.';\n      }\n    });\n    fullKey += key;\n    if (parts.length != 0 || key.length === 0) {\n      // returning null instead of throwing to let another plugin process the event\n      return null;\n    }\n    // NOTE: Please don't rewrite this as so, as it will break JSCompiler property renaming.\n    //       The code must remain in the `result['domEventName']` form.\n    // return {domEventName, fullKey};\n    const result = {};\n    result['domEventName'] = domEventName;\n    result['fullKey'] = fullKey;\n    return result;\n  }\n  /**\n   * Determines whether the actual keys pressed match the configured key code string.\n   * The `fullKeyCode` event is normalized in the `parseEventName` method when the\n   * event is attached to the DOM during the `addEventListener` call. This is unseen\n   * by the end user and is normalized for internal consistency and parsing.\n   *\n   * @param event The keyboard event.\n   * @param fullKeyCode The normalized user defined expected key event string\n   * @returns boolean.\n   */\n  static matchEventFullKeyCode(event, fullKeyCode) {\n    let keycode = _keyMap[event.key] || event.key;\n    let key = '';\n    if (fullKeyCode.indexOf('code.') > -1) {\n      keycode = event.code;\n      key = 'code.';\n    }\n    // the keycode could be unidentified so we have to check here\n    if (keycode == null || !keycode) return false;\n    keycode = keycode.toLowerCase();\n    if (keycode === ' ') {\n      keycode = 'space'; // for readability\n    } else if (keycode === '.') {\n      keycode = 'dot'; // because '.' is used as a separator in event names\n    }\n    MODIFIER_KEYS.forEach(modifierName => {\n      if (modifierName !== keycode) {\n        const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n        if (modifierGetter(event)) {\n          key += modifierName + '.';\n        }\n      }\n    });\n    key += keycode;\n    return key === fullKeyCode;\n  }\n  /**\n   * Configures a handler callback for a key event.\n   * @param fullKey The event name that combines all simultaneous keystrokes.\n   * @param handler The function that responds to the key event.\n   * @param zone The zone in which the event occurred.\n   * @returns A callback function.\n   */\n  static eventCallback(fullKey, handler, zone) {\n    return event => {\n      if (KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {\n        zone.runGuarded(() => handler(event));\n      }\n    };\n  }\n  /** @internal */\n  static _normalizeKey(keyName) {\n    return keyName === 'esc' ? 'escape' : keyName;\n  }\n  static ɵfac = function KeyEventsPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || KeyEventsPlugin)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: KeyEventsPlugin,\n    factory: KeyEventsPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(KeyEventsPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Bootstraps an instance of an Angular application and renders a standalone component as the\n * application's root component. More information about standalone components can be found in [this\n * guide](guide/components/importing).\n *\n * @usageNotes\n * The root component passed into this function *must* be a standalone one (should have the\n * `standalone: true` flag in the `@Component` decorator config).\n *\n * ```angular-ts\n * @Component({\n *   standalone: true,\n *   template: 'Hello world!'\n * })\n * class RootComponent {}\n *\n * const appRef: ApplicationRef = await bootstrapApplication(RootComponent);\n * ```\n *\n * You can add the list of providers that should be available in the application injector by\n * specifying the `providers` field in an object passed as the second argument:\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     {provide: BACKEND_URL, useValue: 'https://yourdomain.com/api'}\n *   ]\n * });\n * ```\n *\n * The `importProvidersFrom` helper method can be used to collect all providers from any\n * existing NgModule (and transitively from all NgModules that it imports):\n *\n * ```ts\n * await bootstrapApplication(RootComponent, {\n *   providers: [\n *     importProvidersFrom(SomeNgModule)\n *   ]\n * });\n * ```\n *\n * Note: the `bootstrapApplication` method doesn't include [Testability](api/core/Testability) by\n * default. You can add [Testability](api/core/Testability) by getting the list of necessary\n * providers using `provideProtractorTestingSupport()` function and adding them into the `providers`\n * array, for example:\n *\n * ```ts\n * import {provideProtractorTestingSupport} from '@angular/platform-browser';\n *\n * await bootstrapApplication(RootComponent, {providers: [provideProtractorTestingSupport()]});\n * ```\n *\n * @param rootComponent A reference to a standalone component that should be rendered.\n * @param options Extra configuration for the bootstrap operation, see `ApplicationConfig` for\n *     additional info.\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n *\n * @publicApi\n */\nfunction bootstrapApplication(rootComponent, options) {\n  return ɵinternalCreateApplication({\n    rootComponent,\n    ...createProvidersConfig(options)\n  });\n}\n/**\n * Create an instance of an Angular application without bootstrapping any components. This is useful\n * for the situation where one wants to decouple application environment creation (a platform and\n * associated injectors) from rendering components on a screen. Components can be subsequently\n * bootstrapped on the returned `ApplicationRef`.\n *\n * @param options Extra configuration for the application environment, see `ApplicationConfig` for\n *     additional info.\n * @returns A promise that returns an `ApplicationRef` instance once resolved.\n *\n * @publicApi\n */\nfunction createApplication(options) {\n  return ɵinternalCreateApplication(createProvidersConfig(options));\n}\nfunction createProvidersConfig(options) {\n  return {\n    appProviders: [...BROWSER_MODULE_PROVIDERS, ...(options?.providers ?? [])],\n    platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS\n  };\n}\n/**\n * Returns a set of providers required to setup [Testability](api/core/Testability) for an\n * application bootstrapped using the `bootstrapApplication` function. The set of providers is\n * needed to support testing an application with Protractor (which relies on the Testability APIs\n * to be present).\n *\n * @returns An array of providers required to setup Testability for an application and make it\n *     available for testing using Protractor.\n *\n * @publicApi\n */\nfunction provideProtractorTestingSupport() {\n  // Return a copy to prevent changes to the original array in case any in-place\n  // alterations are performed to the `provideProtractorTestingSupport` call results in app\n  // code.\n  return [...TESTABILITY_PROVIDERS];\n}\nfunction initDomAdapter() {\n  BrowserDomAdapter.makeCurrent();\n}\nfunction errorHandler() {\n  return new ErrorHandler();\n}\nfunction _document() {\n  // Tell ivy about the global document\n  ɵsetDocument(document);\n  return document;\n}\nconst INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{\n  provide: PLATFORM_ID,\n  useValue: ɵPLATFORM_BROWSER_ID\n}, {\n  provide: PLATFORM_INITIALIZER,\n  useValue: initDomAdapter,\n  multi: true\n}, {\n  provide: DOCUMENT,\n  useFactory: _document,\n  deps: []\n}];\n/**\n * A factory function that returns a `PlatformRef` instance associated with browser service\n * providers.\n *\n * @publicApi\n */\nconst platformBrowser = createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * Internal marker to signal whether providers from the `BrowserModule` are already present in DI.\n * This is needed to avoid loading `BrowserModule` providers twice. We can't rely on the\n * `BrowserModule` presence itself, since the standalone-based bootstrap just imports\n * `BrowserModule` providers without referencing the module itself.\n */\nconst BROWSER_MODULE_PROVIDERS_MARKER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'BrowserModule Providers Marker' : '');\nconst TESTABILITY_PROVIDERS = [{\n  provide: ɵTESTABILITY_GETTER,\n  useClass: BrowserGetTestability,\n  deps: []\n}, {\n  provide: ɵTESTABILITY,\n  useClass: Testability,\n  deps: [NgZone, TestabilityRegistry, ɵTESTABILITY_GETTER]\n}, {\n  provide: Testability,\n  // Also provide as `Testability` for backwards-compatibility.\n  useClass: Testability,\n  deps: [NgZone, TestabilityRegistry, ɵTESTABILITY_GETTER]\n}];\nconst BROWSER_MODULE_PROVIDERS = [{\n  provide: ɵINJECTOR_SCOPE,\n  useValue: 'root'\n}, {\n  provide: ErrorHandler,\n  useFactory: errorHandler,\n  deps: []\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: DomEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT, NgZone, PLATFORM_ID]\n}, {\n  provide: EVENT_MANAGER_PLUGINS,\n  useClass: KeyEventsPlugin,\n  multi: true,\n  deps: [DOCUMENT]\n}, DomRendererFactory2, SharedStylesHost, EventManager, {\n  provide: RendererFactory2,\n  useExisting: DomRendererFactory2\n}, {\n  provide: XhrFactory,\n  useClass: BrowserXhr,\n  deps: []\n}, typeof ngDevMode === 'undefined' || ngDevMode ? {\n  provide: BROWSER_MODULE_PROVIDERS_MARKER,\n  useValue: true\n} : []];\n/**\n * Exports required infrastructure for all Angular apps.\n * Included by default in all Angular apps created with the CLI\n * `new` command.\n * Re-exports `CommonModule` and `ApplicationModule`, making their\n * exports and providers available to all apps.\n *\n * @publicApi\n */\nclass BrowserModule {\n  constructor(providersAlreadyPresent) {\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && providersAlreadyPresent) {\n      throw new ɵRuntimeError(5100 /* RuntimeErrorCode.BROWSER_MODULE_ALREADY_LOADED */, `Providers from the \\`BrowserModule\\` have already been loaded. If you need access ` + `to common directives such as NgIf and NgFor, import the \\`CommonModule\\` instead.`);\n    }\n  }\n  static ɵfac = function BrowserModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || BrowserModule)(i0.ɵɵinject(BROWSER_MODULE_PROVIDERS_MARKER, 12));\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: BrowserModule,\n    exports: [CommonModule, ApplicationModule]\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n    imports: [CommonModule, ApplicationModule]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BrowserModule, [{\n    type: NgModule,\n    args: [{\n      providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],\n      exports: [CommonModule, ApplicationModule]\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: SkipSelf\n    }, {\n      type: Inject,\n      args: [BROWSER_MODULE_PROVIDERS_MARKER]\n    }]\n  }], null);\n})();\n\n/**\n * A service for managing HTML `<meta>` tags.\n *\n * Properties of the `MetaDefinition` object match the attributes of the\n * HTML `<meta>` tag. These tags define document metadata that is important for\n * things like configuring a Content Security Policy, defining browser compatibility\n * and security settings, setting HTTP Headers, defining rich content for social sharing,\n * and Search Engine Optimization (SEO).\n *\n * To identify specific `<meta>` tags in a document, use an attribute selection\n * string in the format `\"tag_attribute='value string'\"`.\n * For example, an `attrSelector` value of `\"name='description'\"` matches a tag\n * whose `name` attribute has the value `\"description\"`.\n * Selectors are used with the `querySelector()` Document method,\n * in the format `meta[{attrSelector}]`.\n *\n * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)\n * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)\n *\n *\n * @publicApi\n */\nclass Meta {\n  _doc;\n  _dom;\n  constructor(_doc) {\n    this._doc = _doc;\n    this._dom = ɵgetDOM();\n  }\n  /**\n   * Retrieves or creates a specific `<meta>` tag element in the current HTML document.\n   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n   * values in the provided tag definition, and verifies that all other attribute values are equal.\n   * If an existing element is found, it is returned and is not modified in any way.\n   * @param tag The definition of a `<meta>` element to match or create.\n   * @param forceCreation True to create a new element without checking whether one already exists.\n   * @returns The existing element with the same attributes and values if found,\n   * the new element if no match is found, or `null` if the tag parameter is not defined.\n   */\n  addTag(tag, forceCreation = false) {\n    if (!tag) return null;\n    return this._getOrCreateElement(tag, forceCreation);\n  }\n  /**\n   * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.\n   * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute\n   * values in the provided tag definition, and verifies that all other attribute values are equal.\n   * @param tags An array of tag definitions to match or create.\n   * @param forceCreation True to create new elements without checking whether they already exist.\n   * @returns The matching elements if found, or the new elements.\n   */\n  addTags(tags, forceCreation = false) {\n    if (!tags) return [];\n    return tags.reduce((result, tag) => {\n      if (tag) {\n        result.push(this._getOrCreateElement(tag, forceCreation));\n      }\n      return result;\n    }, []);\n  }\n  /**\n   * Retrieves a `<meta>` tag element in the current HTML document.\n   * @param attrSelector The tag attribute and value to match against, in the format\n   * `\"tag_attribute='value string'\"`.\n   * @returns The matching element, if any.\n   */\n  getTag(attrSelector) {\n    if (!attrSelector) return null;\n    return this._doc.querySelector(`meta[${attrSelector}]`) || null;\n  }\n  /**\n   * Retrieves a set of `<meta>` tag elements in the current HTML document.\n   * @param attrSelector The tag attribute and value to match against, in the format\n   * `\"tag_attribute='value string'\"`.\n   * @returns The matching elements, if any.\n   */\n  getTags(attrSelector) {\n    if (!attrSelector) return [];\n    const list /*NodeList*/ = this._doc.querySelectorAll(`meta[${attrSelector}]`);\n    return list ? [].slice.call(list) : [];\n  }\n  /**\n   * Modifies an existing `<meta>` tag element in the current HTML document.\n   * @param tag The tag description with which to replace the existing tag content.\n   * @param selector A tag attribute and value to match against, to identify\n   * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n   * If not supplied, matches a tag with the same `name` or `property` attribute value as the\n   * replacement tag.\n   * @return The modified element.\n   */\n  updateTag(tag, selector) {\n    if (!tag) return null;\n    selector = selector || this._parseSelector(tag);\n    const meta = this.getTag(selector);\n    if (meta) {\n      return this._setMetaElementAttributes(tag, meta);\n    }\n    return this._getOrCreateElement(tag, true);\n  }\n  /**\n   * Removes an existing `<meta>` tag element from the current HTML document.\n   * @param attrSelector A tag attribute and value to match against, to identify\n   * an existing tag. A string in the format `\"tag_attribute=`value string`\"`.\n   */\n  removeTag(attrSelector) {\n    this.removeTagElement(this.getTag(attrSelector));\n  }\n  /**\n   * Removes an existing `<meta>` tag element from the current HTML document.\n   * @param meta The tag definition to match against to identify an existing tag.\n   */\n  removeTagElement(meta) {\n    if (meta) {\n      this._dom.remove(meta);\n    }\n  }\n  _getOrCreateElement(meta, forceCreation = false) {\n    if (!forceCreation) {\n      const selector = this._parseSelector(meta);\n      // It's allowed to have multiple elements with the same name so it's not enough to\n      // just check that element with the same name already present on the page. We also need to\n      // check if element has tag attributes\n      const elem = this.getTags(selector).filter(elem => this._containsAttributes(meta, elem))[0];\n      if (elem !== undefined) return elem;\n    }\n    const element = this._dom.createElement('meta');\n    this._setMetaElementAttributes(meta, element);\n    const head = this._doc.getElementsByTagName('head')[0];\n    head.appendChild(element);\n    return element;\n  }\n  _setMetaElementAttributes(tag, el) {\n    Object.keys(tag).forEach(prop => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));\n    return el;\n  }\n  _parseSelector(tag) {\n    const attr = tag.name ? 'name' : 'property';\n    return `${attr}=\"${tag[attr]}\"`;\n  }\n  _containsAttributes(tag, elem) {\n    return Object.keys(tag).every(key => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);\n  }\n  _getMetaKeyMap(prop) {\n    return META_KEYS_MAP[prop] || prop;\n  }\n  static ɵfac = function Meta_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Meta)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Meta,\n    factory: Meta.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Meta, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n/**\n * Mapping for MetaDefinition properties with their correct meta attribute names\n */\nconst META_KEYS_MAP = {\n  httpEquiv: 'http-equiv'\n};\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * @publicApi\n */\nclass Title {\n  _doc;\n  constructor(_doc) {\n    this._doc = _doc;\n  }\n  /**\n   * Get the title of the current HTML document.\n   */\n  getTitle() {\n    return this._doc.title;\n  }\n  /**\n   * Set the title of the current HTML document.\n   * @param newTitle\n   */\n  setTitle(newTitle) {\n    this._doc.title = newTitle || '';\n  }\n  static ɵfac = function Title_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || Title)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: Title,\n    factory: Title.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(Title, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if\n * `name` is `'probe'`.\n * @param name Name under which it will be exported. Keep in mind this will be a property of the\n * global `ng` object.\n * @param value The value to export.\n */\nfunction exportNgVar(name, value) {\n  if (typeof COMPILED === 'undefined' || !COMPILED) {\n    // Note: we can't export `ng` when using closure enhanced optimization as:\n    // - closure declares globals itself for minified names, which sometimes clobber our `ng` global\n    // - we can't declare a closure extern as the namespace `ng` is already used within Google\n    //   for typings for angularJS (via `goog.provide('ng....')`).\n    const ng = ɵglobal['ng'] = ɵglobal['ng'] || {};\n    ng[name] = value;\n  }\n}\nclass ChangeDetectionPerfRecord {\n  msPerTick;\n  numTicks;\n  constructor(msPerTick, numTicks) {\n    this.msPerTick = msPerTick;\n    this.numTicks = numTicks;\n  }\n}\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nclass AngularProfiler {\n  appRef;\n  constructor(ref) {\n    this.appRef = ref.injector.get(ApplicationRef);\n  }\n  // tslint:disable:no-console\n  /**\n   * Exercises change detection in a loop and then prints the average amount of\n   * time in milliseconds how long a single round of change detection takes for\n   * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n   * of 500 milliseconds.\n   *\n   * Optionally, a user may pass a `config` parameter containing a map of\n   * options. Supported options are:\n   *\n   * `record` (boolean) - causes the profiler to record a CPU profile while\n   * it exercises the change detector. Example:\n   *\n   * ```\n   * ng.profiler.timeChangeDetection({record: true})\n   * ```\n   */\n  timeChangeDetection(config) {\n    const record = config && config['record'];\n    const profileName = 'Change Detection';\n    // Profiler is not available in Android browsers without dev tools opened\n    if (record && 'profile' in console && typeof console.profile === 'function') {\n      console.profile(profileName);\n    }\n    const start = performance.now();\n    let numTicks = 0;\n    while (numTicks < 5 || performance.now() - start < 500) {\n      this.appRef.tick();\n      numTicks++;\n    }\n    const end = performance.now();\n    if (record && 'profileEnd' in console && typeof console.profileEnd === 'function') {\n      console.profileEnd(profileName);\n    }\n    const msPerTick = (end - start) / numTicks;\n    console.log(`ran ${numTicks} change detection cycles`);\n    console.log(`${msPerTick.toFixed(2)} ms per check`);\n    return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n  }\n}\nconst PROFILER_GLOBAL_NAME = 'profiler';\n/**\n * Enabled Angular debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n *    then hit Enter.\n *\n * @publicApi\n */\nfunction enableDebugTools(ref) {\n  exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n  return ref;\n}\n/**\n * Disables Angular tools.\n *\n * @publicApi\n */\nfunction disableDebugTools() {\n  exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n *\n * @publicApi\n */\nclass By {\n  /**\n   * Match all nodes.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n   */\n  static all() {\n    return () => true;\n  }\n  /**\n   * Match elements by the given CSS selector.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n   */\n  static css(selector) {\n    return debugElement => {\n      return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;\n    };\n  }\n  /**\n   * Match nodes that have the given directive present.\n   *\n   * @usageNotes\n   * ### Example\n   *\n   * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n   */\n  static directive(type) {\n    return debugNode => debugNode.providerTokens.indexOf(type) !== -1;\n  }\n}\nfunction elementMatches(n, selector) {\n  if (ɵgetDOM().isElementNode(n)) {\n    return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n  }\n  return false;\n}\n\n/**\n * Supported HammerJS recognizer event names.\n */\nconst EVENT_NAMES = {\n  // pan\n  'pan': true,\n  'panstart': true,\n  'panmove': true,\n  'panend': true,\n  'pancancel': true,\n  'panleft': true,\n  'panright': true,\n  'panup': true,\n  'pandown': true,\n  // pinch\n  'pinch': true,\n  'pinchstart': true,\n  'pinchmove': true,\n  'pinchend': true,\n  'pinchcancel': true,\n  'pinchin': true,\n  'pinchout': true,\n  // press\n  'press': true,\n  'pressup': true,\n  // rotate\n  'rotate': true,\n  'rotatestart': true,\n  'rotatemove': true,\n  'rotateend': true,\n  'rotatecancel': true,\n  // swipe\n  'swipe': true,\n  'swipeleft': true,\n  'swiperight': true,\n  'swipeup': true,\n  'swipedown': true,\n  // tap\n  'tap': true,\n  'doubletap': true\n};\n/**\n * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.\n * @see {@link HammerGestureConfig}\n *\n * @ngModule HammerModule\n * @publicApi\n */\nconst HAMMER_GESTURE_CONFIG = new InjectionToken('HammerGestureConfig');\n/**\n * Injection token used to provide a HammerLoader to Angular.\n *\n * @see {@link HammerLoader}\n *\n * @publicApi\n */\nconst HAMMER_LOADER = new InjectionToken('HammerLoader');\n/**\n * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n * for gesture recognition. Configures specific event recognition.\n * @publicApi\n */\nclass HammerGestureConfig {\n  /**\n   * A set of supported event names for gestures to be used in Angular.\n   * Angular supports all built-in recognizers, as listed in\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   */\n  events = [];\n  /**\n   * Maps gesture event names to a set of configuration options\n   * that specify overrides to the default values for specific properties.\n   *\n   * The key is a supported event name to be configured,\n   * and the options object contains a set of properties, with override values\n   * to be applied to the named recognizer event.\n   * For example, to disable recognition of the rotate event, specify\n   *  `{\"rotate\": {\"enable\": false}}`.\n   *\n   * Properties that are not present take the HammerJS default values.\n   * For information about which properties are supported for which events,\n   * and their allowed and default values, see\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   *\n   */\n  overrides = {};\n  /**\n   * Properties whose default values can be overridden for a given event.\n   * Different sets of properties apply to different events.\n   * For information about which properties are supported for which events,\n   * and their allowed and default values, see\n   * [HammerJS documentation](https://hammerjs.github.io/).\n   */\n  options;\n  /**\n   * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)\n   * and attaches it to a given HTML element.\n   * @param element The element that will recognize gestures.\n   * @returns A HammerJS event-manager object.\n   */\n  buildHammer(element) {\n    const mc = new Hammer(element, this.options);\n    mc.get('pinch').set({\n      enable: true\n    });\n    mc.get('rotate').set({\n      enable: true\n    });\n    for (const eventName in this.overrides) {\n      mc.get(eventName).set(this.overrides[eventName]);\n    }\n    return mc;\n  }\n  static ɵfac = function HammerGestureConfig_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerGestureConfig)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HammerGestureConfig,\n    factory: HammerGestureConfig.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerGestureConfig, [{\n    type: Injectable\n  }], null, null);\n})();\n/**\n * Event plugin that adds Hammer support to an application.\n *\n * @ngModule HammerModule\n */\nclass HammerGesturesPlugin extends EventManagerPlugin {\n  _config;\n  console;\n  loader;\n  _loaderPromise = null;\n  constructor(doc, _config, console, loader) {\n    super(doc);\n    this._config = _config;\n    this.console = console;\n    this.loader = loader;\n  }\n  supports(eventName) {\n    if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n      return false;\n    }\n    if (!window.Hammer && !this.loader) {\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        this.console.warn(`The \"${eventName}\" event cannot be bound because Hammer.JS is not ` + `loaded and no custom loader has been specified.`);\n      }\n      return false;\n    }\n    return true;\n  }\n  addEventListener(element, eventName, handler) {\n    const zone = this.manager.getZone();\n    eventName = eventName.toLowerCase();\n    // If Hammer is not present but a loader is specified, we defer adding the event listener\n    // until Hammer is loaded.\n    if (!window.Hammer && this.loader) {\n      this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());\n      // This `addEventListener` method returns a function to remove the added listener.\n      // Until Hammer is loaded, the returned function needs to *cancel* the registration rather\n      // than remove anything.\n      let cancelRegistration = false;\n      let deregister = () => {\n        cancelRegistration = true;\n      };\n      zone.runOutsideAngular(() => this._loaderPromise.then(() => {\n        // If Hammer isn't actually loaded when the custom loader resolves, give up.\n        if (!window.Hammer) {\n          if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            this.console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);\n          }\n          deregister = () => {};\n          return;\n        }\n        if (!cancelRegistration) {\n          // Now that Hammer is loaded and the listener is being loaded for real,\n          // the deregistration function changes from canceling registration to\n          // removal.\n          deregister = this.addEventListener(element, eventName, handler);\n        }\n      }).catch(() => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          this.console.warn(`The \"${eventName}\" event cannot be bound because the custom ` + `Hammer.JS loader failed.`);\n        }\n        deregister = () => {};\n      }));\n      // Return a function that *executes* `deregister` (and not `deregister` itself) so that we\n      // can change the behavior of `deregister` once the listener is added. Using a closure in\n      // this way allows us to avoid any additional data structures to track listener removal.\n      return () => {\n        deregister();\n      };\n    }\n    return zone.runOutsideAngular(() => {\n      // Creating the manager bind events, must be done outside of angular\n      const mc = this._config.buildHammer(element);\n      const callback = function (eventObj) {\n        zone.runGuarded(function () {\n          handler(eventObj);\n        });\n      };\n      mc.on(eventName, callback);\n      return () => {\n        mc.off(eventName, callback);\n        // destroy mc to prevent memory leak\n        if (typeof mc.destroy === 'function') {\n          mc.destroy();\n        }\n      };\n    });\n  }\n  isCustomEvent(eventName) {\n    return this._config.events.indexOf(eventName) > -1;\n  }\n  static ɵfac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerGesturesPlugin)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(HAMMER_GESTURE_CONFIG), i0.ɵɵinject(i0.ɵConsole), i0.ɵɵinject(HAMMER_LOADER, 8));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: HammerGesturesPlugin,\n    factory: HammerGesturesPlugin.ɵfac\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerGesturesPlugin, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }, {\n    type: HammerGestureConfig,\n    decorators: [{\n      type: Inject,\n      args: [HAMMER_GESTURE_CONFIG]\n    }]\n  }, {\n    type: i0.ɵConsole\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Optional\n    }, {\n      type: Inject,\n      args: [HAMMER_LOADER]\n    }]\n  }], null);\n})();\n/**\n * Adds support for HammerJS.\n *\n * Import this module at the root of your application so that Angular can work with\n * HammerJS to detect gesture events.\n *\n * Note that applications still need to include the HammerJS script itself. This module\n * simply sets up the coordination layer between HammerJS and Angular's `EventManager`.\n *\n * @publicApi\n */\nclass HammerModule {\n  static ɵfac = function HammerModule_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || HammerModule)();\n  };\n  static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n    type: HammerModule\n  });\n  static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n    providers: [{\n      provide: EVENT_MANAGER_PLUGINS,\n      useClass: HammerGesturesPlugin,\n      multi: true,\n      deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, ɵConsole, [new Optional(), HAMMER_LOADER]]\n    }, {\n      provide: HAMMER_GESTURE_CONFIG,\n      useClass: HammerGestureConfig,\n      deps: []\n    }]\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(HammerModule, [{\n    type: NgModule,\n    args: [{\n      providers: [{\n        provide: EVENT_MANAGER_PLUGINS,\n        useClass: HammerGesturesPlugin,\n        multi: true,\n        deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, ɵConsole, [new Optional(), HAMMER_LOADER]]\n      }, {\n        provide: HAMMER_GESTURE_CONFIG,\n        useClass: HammerGestureConfig,\n        deps: []\n      }]\n    }]\n  }], null, null);\n})();\n\n/**\n * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing\n * values to be safe to use in the different DOM contexts.\n *\n * For example, when binding a URL in an `<a [href]=\"someValue\">` hyperlink, `someValue` will be\n * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on\n * the website.\n *\n * In specific situations, it might be necessary to disable sanitization, for example if the\n * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.\n * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`\n * methods, and then binding to that value from the template.\n *\n * These situations should be very rare, and extraordinary care must be taken to avoid creating a\n * Cross Site Scripting (XSS) security bug!\n *\n * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as\n * close as possible to the source of the value, to make it easy to verify no security bug is\n * created by its use.\n *\n * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that\n * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous\n * code. The sanitizer leaves safe values intact.\n *\n * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in\n * sanitization for the value passed in. Carefully check and audit all values and code paths going\n * into this call. Make sure any user data is appropriately escaped for this security context.\n * For more detail, see the [Security Guide](https://g.co/ng/security).\n *\n * @publicApi\n */\nclass DomSanitizer {\n  static ɵfac = function DomSanitizer_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomSanitizer)();\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomSanitizer,\n    factory: function DomSanitizer_Factory(__ngFactoryType__) {\n      let __ngConditionalFactory__ = null;\n      if (__ngFactoryType__) {\n        __ngConditionalFactory__ = new (__ngFactoryType__ || DomSanitizer)();\n      } else {\n        __ngConditionalFactory__ = i0.ɵɵinject(DomSanitizerImpl);\n      }\n      return __ngConditionalFactory__;\n    },\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomSanitizer, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root',\n      useExisting: forwardRef(() => DomSanitizerImpl)\n    }]\n  }], null, null);\n})();\nclass DomSanitizerImpl extends DomSanitizer {\n  _doc;\n  constructor(_doc) {\n    super();\n    this._doc = _doc;\n  }\n  sanitize(ctx, value) {\n    if (value == null) return null;\n    switch (ctx) {\n      case SecurityContext.NONE:\n        return value;\n      case SecurityContext.HTML:\n        if (ɵallowSanitizationBypassAndThrow(value, \"HTML\" /* BypassType.Html */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return ɵ_sanitizeHtml(this._doc, String(value)).toString();\n      case SecurityContext.STYLE:\n        if (ɵallowSanitizationBypassAndThrow(value, \"Style\" /* BypassType.Style */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return value;\n      case SecurityContext.SCRIPT:\n        if (ɵallowSanitizationBypassAndThrow(value, \"Script\" /* BypassType.Script */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        throw new ɵRuntimeError(5200 /* RuntimeErrorCode.SANITIZATION_UNSAFE_SCRIPT */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'unsafe value used in a script context');\n      case SecurityContext.URL:\n        if (ɵallowSanitizationBypassAndThrow(value, \"URL\" /* BypassType.Url */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        return ɵ_sanitizeUrl(String(value));\n      case SecurityContext.RESOURCE_URL:\n        if (ɵallowSanitizationBypassAndThrow(value, \"ResourceURL\" /* BypassType.ResourceUrl */)) {\n          return ɵunwrapSafeValue(value);\n        }\n        throw new ɵRuntimeError(5201 /* RuntimeErrorCode.SANITIZATION_UNSAFE_RESOURCE_URL */, (typeof ngDevMode === 'undefined' || ngDevMode) && `unsafe value used in a resource URL context (see ${ɵXSS_SECURITY_URL})`);\n      default:\n        throw new ɵRuntimeError(5202 /* RuntimeErrorCode.SANITIZATION_UNEXPECTED_CTX */, (typeof ngDevMode === 'undefined' || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${ɵXSS_SECURITY_URL})`);\n    }\n  }\n  bypassSecurityTrustHtml(value) {\n    return ɵbypassSanitizationTrustHtml(value);\n  }\n  bypassSecurityTrustStyle(value) {\n    return ɵbypassSanitizationTrustStyle(value);\n  }\n  bypassSecurityTrustScript(value) {\n    return ɵbypassSanitizationTrustScript(value);\n  }\n  bypassSecurityTrustUrl(value) {\n    return ɵbypassSanitizationTrustUrl(value);\n  }\n  bypassSecurityTrustResourceUrl(value) {\n    return ɵbypassSanitizationTrustResourceUrl(value);\n  }\n  static ɵfac = function DomSanitizerImpl_Factory(__ngFactoryType__) {\n    return new (__ngFactoryType__ || DomSanitizerImpl)(i0.ɵɵinject(DOCUMENT));\n  };\n  static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n    token: DomSanitizerImpl,\n    factory: DomSanitizerImpl.ɵfac,\n    providedIn: 'root'\n  });\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DomSanitizerImpl, [{\n    type: Injectable,\n    args: [{\n      providedIn: 'root'\n    }]\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [DOCUMENT]\n    }]\n  }], null);\n})();\n\n/**\n * The list of features as an enum to uniquely type each `HydrationFeature`.\n * @see {@link HydrationFeature}\n *\n * @publicApi\n */\nvar HydrationFeatureKind;\n(function (HydrationFeatureKind) {\n  HydrationFeatureKind[HydrationFeatureKind[\"NoHttpTransferCache\"] = 0] = \"NoHttpTransferCache\";\n  HydrationFeatureKind[HydrationFeatureKind[\"HttpTransferCacheOptions\"] = 1] = \"HttpTransferCacheOptions\";\n  HydrationFeatureKind[HydrationFeatureKind[\"I18nSupport\"] = 2] = \"I18nSupport\";\n  HydrationFeatureKind[HydrationFeatureKind[\"EventReplay\"] = 3] = \"EventReplay\";\n  HydrationFeatureKind[HydrationFeatureKind[\"IncrementalHydration\"] = 4] = \"IncrementalHydration\";\n})(HydrationFeatureKind || (HydrationFeatureKind = {}));\n/**\n * Helper function to create an object that represents a Hydration feature.\n */\nfunction hydrationFeature(ɵkind, ɵproviders = [], ɵoptions = {}) {\n  return {\n    ɵkind,\n    ɵproviders\n  };\n}\n/**\n * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the\n * server and other one on the browser.\n *\n * @publicApi\n */\nfunction withNoHttpTransferCache() {\n  // This feature has no providers and acts as a flag that turns off\n  // HTTP transfer cache (which otherwise is turned on by default).\n  return hydrationFeature(HydrationFeatureKind.NoHttpTransferCache);\n}\n/**\n * The function accepts an object, which allows to configure cache parameters,\n * such as which headers should be included (no headers are included by default),\n * whether POST requests should be cached or a callback function to determine if a\n * particular request should be cached.\n *\n * @publicApi\n */\nfunction withHttpTransferCacheOptions(options) {\n  // This feature has no providers and acts as a flag to pass options to the HTTP transfer cache.\n  return hydrationFeature(HydrationFeatureKind.HttpTransferCacheOptions, ɵwithHttpTransferCache(options));\n}\n/**\n * Enables support for hydrating i18n blocks.\n *\n * @developerPreview\n * @publicApi\n */\nfunction withI18nSupport() {\n  return hydrationFeature(HydrationFeatureKind.I18nSupport, ɵwithI18nSupport());\n}\n/**\n * Enables support for replaying user events (e.g. `click`s) that happened on a page\n * before hydration logic has completed. Once an application is hydrated, all captured\n * events are replayed and relevant event listeners are executed.\n *\n * @usageNotes\n *\n * Basic example of how you can enable event replay in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration(withEventReplay())]\n * });\n * ```\n * @publicApi\n * @see {@link provideClientHydration}\n */\nfunction withEventReplay() {\n  return hydrationFeature(HydrationFeatureKind.EventReplay, ɵwithEventReplay());\n}\n/**\n * Enables support for incremental hydration using the `hydrate` trigger syntax.\n *\n * @usageNotes\n *\n * Basic example of how you can enable incremental hydration in your application when\n * the `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration(withIncrementalHydration())]\n * });\n * ```\n * @experimental\n * @publicApi\n * @see {@link provideClientHydration}\n */\nfunction withIncrementalHydration() {\n  return hydrationFeature(HydrationFeatureKind.IncrementalHydration, ɵwithIncrementalHydration());\n}\n/**\n * Returns an `ENVIRONMENT_INITIALIZER` token setup with a function\n * that verifies whether compatible ZoneJS was used in an application\n * and logs a warning in a console if it's not the case.\n */\nfunction provideZoneJsCompatibilityDetector() {\n  return [{\n    provide: ENVIRONMENT_INITIALIZER,\n    useValue: () => {\n      const ngZone = inject(NgZone);\n      const isZoneless = inject(ɵZONELESS_ENABLED);\n      // Checking `ngZone instanceof NgZone` would be insufficient here,\n      // because custom implementations might use NgZone as a base class.\n      if (!isZoneless && ngZone.constructor !== NgZone) {\n        const console = inject(ɵConsole);\n        const message = ɵformatRuntimeError(-5000 /* RuntimeErrorCode.UNSUPPORTED_ZONEJS_INSTANCE */, 'Angular detected that hydration was enabled for an application ' + 'that uses a custom or a noop Zone.js implementation. ' + 'This is not yet a fully supported configuration.');\n        // tslint:disable-next-line:no-console\n        console.warn(message);\n      }\n    },\n    multi: true\n  }];\n}\n/**\n * Sets up providers necessary to enable hydration functionality for the application.\n *\n * By default, the function enables the recommended set of features for the optimal\n * performance for most of the applications. It includes the following features:\n *\n * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).\n * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and\n * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching\n * [here](guide/ssr#caching-data-when-using-httpclient).\n *\n * These functions allow you to disable some of the default features or enable new ones:\n *\n * * {@link withNoHttpTransferCache} to disable HTTP transfer cache\n * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options\n * * {@link withI18nSupport} to enable hydration support for i18n blocks\n * * {@link withEventReplay} to enable support for replaying user events\n *\n * @usageNotes\n *\n * Basic example of how you can enable hydration in your application when\n * `bootstrapApplication` function is used:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideClientHydration()]\n * });\n * ```\n *\n * Alternatively if you are using NgModules, you would add `provideClientHydration`\n * to your root app module's provider list.\n * ```ts\n * @NgModule({\n *   declarations: [RootCmp],\n *   bootstrap: [RootCmp],\n *   providers: [provideClientHydration()],\n * })\n * export class AppModule {}\n * ```\n *\n * @see {@link withNoHttpTransferCache}\n * @see {@link withHttpTransferCacheOptions}\n * @see {@link withI18nSupport}\n * @see {@link withEventReplay}\n *\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to enable hydration.\n *\n * @publicApi\n */\nfunction provideClientHydration(...features) {\n  const providers = [];\n  const featuresKind = new Set();\n  const hasHttpTransferCacheOptions = featuresKind.has(HydrationFeatureKind.HttpTransferCacheOptions);\n  for (const {\n    ɵproviders,\n    ɵkind\n  } of features) {\n    featuresKind.add(ɵkind);\n    if (ɵproviders.length) {\n      providers.push(ɵproviders);\n    }\n  }\n  if (typeof ngDevMode !== 'undefined' && ngDevMode && featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) && hasHttpTransferCacheOptions) {\n    // TODO: Make this a runtime error\n    throw new Error('Configuration error: found both withHttpTransferCacheOptions() and withNoHttpTransferCache() in the same call to provideClientHydration(), which is a contradiction.');\n  }\n  return makeEnvironmentProviders([typeof ngDevMode !== 'undefined' && ngDevMode ? provideZoneJsCompatibilityDetector() : [], ɵwithDomHydration(), featuresKind.has(HydrationFeatureKind.NoHttpTransferCache) || hasHttpTransferCacheOptions ? [] : ɵwithHttpTransferCache({}), providers]);\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-browser package.\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('19.0.5');\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserModule, By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManager, EventManagerPlugin, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, HydrationFeatureKind, Meta, REMOVE_STYLES_ON_COMPONENT_DESTROY, Title, VERSION, bootstrapApplication, createApplication, disableDebugTools, enableDebugTools, platformBrowser, provideClientHydration, provideProtractorTestingSupport, withEventReplay, withHttpTransferCacheOptions, withI18nSupport, withIncrementalHydration, withNoHttpTransferCache, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserGetTestability as ɵBrowserGetTestability, DomEventsPlugin as ɵDomEventsPlugin, DomRendererFactory2 as ɵDomRendererFactory2, DomSanitizerImpl as ɵDomSanitizerImpl, HammerGesturesPlugin as ɵHammerGesturesPlugin, INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, KeyEventsPlugin as ɵKeyEventsPlugin, SharedStylesHost as ɵSharedStylesHost, initDomAdapter as ɵinitDomAdapter };\n"],
-  "mappings": "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",
-  "names": ["window", "isAbsoluteUrl", "NumberFormatStyle", "Plural", "FormStyle", "TranslationWidth", "FormatWidth", "WeekDay", "getLocalePluralCase", "ZoneWidth", "DateType", "TranslationType", "value", "from", "carry", "digits", "getLocalePluralCase", "klass", "document", "window", "ngZone", "import_rxjs", "value", "map", "base", "headers", "params", "HttpEventType", "HttpStatusCode", "req", "document", "HttpFeatureKind", "plugin", "elem", "console", "HydrationFeatureKind", "withI18nSupport", "withEventReplay", "withIncrementalHydration", "VERSION"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/express.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/express.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,23916 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  __commonJS,
-  __require
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/depd/index.js
-var require_depd = __commonJS({
-  "node_modules/depd/index.js"(exports, module) {
-    var relative = __require("path").relative;
-    module.exports = depd;
-    var basePath = process.cwd();
-    function containsNamespace(str, namespace) {
-      var vals = str.split(/[ ,]+/);
-      var ns = String(namespace).toLowerCase();
-      for (var i = 0; i < vals.length; i++) {
-        var val = vals[i];
-        if (val && (val === "*" || val.toLowerCase() === ns)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function convertDataDescriptorToAccessor(obj, prop, message) {
-      var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-      var value = descriptor.value;
-      descriptor.get = function getter() {
-        return value;
-      };
-      if (descriptor.writable) {
-        descriptor.set = function setter(val) {
-          return value = val;
-        };
-      }
-      delete descriptor.value;
-      delete descriptor.writable;
-      Object.defineProperty(obj, prop, descriptor);
-      return descriptor;
-    }
-    function createArgumentsString(arity) {
-      var str = "";
-      for (var i = 0; i < arity; i++) {
-        str += ", arg" + i;
-      }
-      return str.substr(2);
-    }
-    function createStackString(stack) {
-      var str = this.name + ": " + this.namespace;
-      if (this.message) {
-        str += " deprecated " + this.message;
-      }
-      for (var i = 0; i < stack.length; i++) {
-        str += "\n    at " + stack[i].toString();
-      }
-      return str;
-    }
-    function depd(namespace) {
-      if (!namespace) {
-        throw new TypeError("argument namespace is required");
-      }
-      var stack = getStack();
-      var site = callSiteLocation(stack[1]);
-      var file = site[0];
-      function deprecate(message) {
-        log.call(deprecate, message);
-      }
-      deprecate._file = file;
-      deprecate._ignored = isignored(namespace);
-      deprecate._namespace = namespace;
-      deprecate._traced = istraced(namespace);
-      deprecate._warned = /* @__PURE__ */ Object.create(null);
-      deprecate.function = wrapfunction;
-      deprecate.property = wrapproperty;
-      return deprecate;
-    }
-    function eehaslisteners(emitter, type) {
-      var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type);
-      return count > 0;
-    }
-    function isignored(namespace) {
-      if (process.noDeprecation) {
-        return true;
-      }
-      var str = process.env.NO_DEPRECATION || "";
-      return containsNamespace(str, namespace);
-    }
-    function istraced(namespace) {
-      if (process.traceDeprecation) {
-        return true;
-      }
-      var str = process.env.TRACE_DEPRECATION || "";
-      return containsNamespace(str, namespace);
-    }
-    function log(message, site) {
-      var haslisteners = eehaslisteners(process, "deprecation");
-      if (!haslisteners && this._ignored) {
-        return;
-      }
-      var caller;
-      var callFile;
-      var callSite;
-      var depSite;
-      var i = 0;
-      var seen = false;
-      var stack = getStack();
-      var file = this._file;
-      if (site) {
-        depSite = site;
-        callSite = callSiteLocation(stack[1]);
-        callSite.name = depSite.name;
-        file = callSite[0];
-      } else {
-        i = 2;
-        depSite = callSiteLocation(stack[i]);
-        callSite = depSite;
-      }
-      for (; i < stack.length; i++) {
-        caller = callSiteLocation(stack[i]);
-        callFile = caller[0];
-        if (callFile === file) {
-          seen = true;
-        } else if (callFile === this._file) {
-          file = this._file;
-        } else if (seen) {
-          break;
-        }
-      }
-      var key = caller ? depSite.join(":") + "__" + caller.join(":") : void 0;
-      if (key !== void 0 && key in this._warned) {
-        return;
-      }
-      this._warned[key] = true;
-      var msg = message;
-      if (!msg) {
-        msg = callSite === depSite || !callSite.name ? defaultMessage(depSite) : defaultMessage(callSite);
-      }
-      if (haslisteners) {
-        var err = DeprecationError(this._namespace, msg, stack.slice(i));
-        process.emit("deprecation", err);
-        return;
-      }
-      var format = process.stderr.isTTY ? formatColor : formatPlain;
-      var output = format.call(this, msg, caller, stack.slice(i));
-      process.stderr.write(output + "\n", "utf8");
-    }
-    function callSiteLocation(callSite) {
-      var file = callSite.getFileName() || "<anonymous>";
-      var line = callSite.getLineNumber();
-      var colm = callSite.getColumnNumber();
-      if (callSite.isEval()) {
-        file = callSite.getEvalOrigin() + ", " + file;
-      }
-      var site = [file, line, colm];
-      site.callSite = callSite;
-      site.name = callSite.getFunctionName();
-      return site;
-    }
-    function defaultMessage(site) {
-      var callSite = site.callSite;
-      var funcName = site.name;
-      if (!funcName) {
-        funcName = "<anonymous@" + formatLocation(site) + ">";
-      }
-      var context = callSite.getThis();
-      var typeName = context && callSite.getTypeName();
-      if (typeName === "Object") {
-        typeName = void 0;
-      }
-      if (typeName === "Function") {
-        typeName = context.name || typeName;
-      }
-      return typeName && callSite.getMethodName() ? typeName + "." + funcName : funcName;
-    }
-    function formatPlain(msg, caller, stack) {
-      var timestamp = (/* @__PURE__ */ new Date()).toUTCString();
-      var formatted = timestamp + " " + this._namespace + " deprecated " + msg;
-      if (this._traced) {
-        for (var i = 0; i < stack.length; i++) {
-          formatted += "\n    at " + stack[i].toString();
-        }
-        return formatted;
-      }
-      if (caller) {
-        formatted += " at " + formatLocation(caller);
-      }
-      return formatted;
-    }
-    function formatColor(msg, caller, stack) {
-      var formatted = "\x1B[36;1m" + this._namespace + "\x1B[22;39m \x1B[33;1mdeprecated\x1B[22;39m \x1B[0m" + msg + "\x1B[39m";
-      if (this._traced) {
-        for (var i = 0; i < stack.length; i++) {
-          formatted += "\n    \x1B[36mat " + stack[i].toString() + "\x1B[39m";
-        }
-        return formatted;
-      }
-      if (caller) {
-        formatted += " \x1B[36m" + formatLocation(caller) + "\x1B[39m";
-      }
-      return formatted;
-    }
-    function formatLocation(callSite) {
-      return relative(basePath, callSite[0]) + ":" + callSite[1] + ":" + callSite[2];
-    }
-    function getStack() {
-      var limit = Error.stackTraceLimit;
-      var obj = {};
-      var prep = Error.prepareStackTrace;
-      Error.prepareStackTrace = prepareObjectStackTrace;
-      Error.stackTraceLimit = Math.max(10, limit);
-      Error.captureStackTrace(obj);
-      var stack = obj.stack.slice(1);
-      Error.prepareStackTrace = prep;
-      Error.stackTraceLimit = limit;
-      return stack;
-    }
-    function prepareObjectStackTrace(obj, stack) {
-      return stack;
-    }
-    function wrapfunction(fn, message) {
-      if (typeof fn !== "function") {
-        throw new TypeError("argument fn must be a function");
-      }
-      var args = createArgumentsString(fn.length);
-      var stack = getStack();
-      var site = callSiteLocation(stack[1]);
-      site.name = fn.name;
-      var deprecatedfn = new Function("fn", "log", "deprecate", "message", "site", '"use strict"\nreturn function (' + args + ") {log.call(deprecate, message, site)\nreturn fn.apply(this, arguments)\n}")(fn, log, this, message, site);
-      return deprecatedfn;
-    }
-    function wrapproperty(obj, prop, message) {
-      if (!obj || typeof obj !== "object" && typeof obj !== "function") {
-        throw new TypeError("argument obj must be object");
-      }
-      var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
-      if (!descriptor) {
-        throw new TypeError("must call property on owner object");
-      }
-      if (!descriptor.configurable) {
-        throw new TypeError("property must be configurable");
-      }
-      var deprecate = this;
-      var stack = getStack();
-      var site = callSiteLocation(stack[1]);
-      site.name = prop;
-      if ("value" in descriptor) {
-        descriptor = convertDataDescriptorToAccessor(obj, prop, message);
-      }
-      var get = descriptor.get;
-      var set = descriptor.set;
-      if (typeof get === "function") {
-        descriptor.get = function getter() {
-          log.call(deprecate, message, site);
-          return get.apply(this, arguments);
-        };
-      }
-      if (typeof set === "function") {
-        descriptor.set = function setter() {
-          log.call(deprecate, message, site);
-          return set.apply(this, arguments);
-        };
-      }
-      Object.defineProperty(obj, prop, descriptor);
-    }
-    function DeprecationError(namespace, message, stack) {
-      var error = new Error();
-      var stackString;
-      Object.defineProperty(error, "constructor", {
-        value: DeprecationError
-      });
-      Object.defineProperty(error, "message", {
-        configurable: true,
-        enumerable: false,
-        value: message,
-        writable: true
-      });
-      Object.defineProperty(error, "name", {
-        enumerable: false,
-        configurable: true,
-        value: "DeprecationError",
-        writable: true
-      });
-      Object.defineProperty(error, "namespace", {
-        configurable: true,
-        enumerable: false,
-        value: namespace,
-        writable: true
-      });
-      Object.defineProperty(error, "stack", {
-        configurable: true,
-        enumerable: false,
-        get: function() {
-          if (stackString !== void 0) {
-            return stackString;
-          }
-          return stackString = createStackString.call(this, stack);
-        },
-        set: function setter(val) {
-          stackString = val;
-        }
-      });
-      return error;
-    }
-  }
-});
-
-// node_modules/bytes/index.js
-var require_bytes = __commonJS({
-  "node_modules/bytes/index.js"(exports, module) {
-    "use strict";
-    module.exports = bytes;
-    module.exports.format = format;
-    module.exports.parse = parse;
-    var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
-    var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
-    var map = {
-      b: 1,
-      kb: 1 << 10,
-      mb: 1 << 20,
-      gb: 1 << 30,
-      tb: Math.pow(1024, 4),
-      pb: Math.pow(1024, 5)
-    };
-    var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
-    function bytes(value, options) {
-      if (typeof value === "string") {
-        return parse(value);
-      }
-      if (typeof value === "number") {
-        return format(value, options);
-      }
-      return null;
-    }
-    function format(value, options) {
-      if (!Number.isFinite(value)) {
-        return null;
-      }
-      var mag = Math.abs(value);
-      var thousandsSeparator = options && options.thousandsSeparator || "";
-      var unitSeparator = options && options.unitSeparator || "";
-      var decimalPlaces = options && options.decimalPlaces !== void 0 ? options.decimalPlaces : 2;
-      var fixedDecimals = Boolean(options && options.fixedDecimals);
-      var unit = options && options.unit || "";
-      if (!unit || !map[unit.toLowerCase()]) {
-        if (mag >= map.pb) {
-          unit = "PB";
-        } else if (mag >= map.tb) {
-          unit = "TB";
-        } else if (mag >= map.gb) {
-          unit = "GB";
-        } else if (mag >= map.mb) {
-          unit = "MB";
-        } else if (mag >= map.kb) {
-          unit = "KB";
-        } else {
-          unit = "B";
-        }
-      }
-      var val = value / map[unit.toLowerCase()];
-      var str = val.toFixed(decimalPlaces);
-      if (!fixedDecimals) {
-        str = str.replace(formatDecimalsRegExp, "$1");
-      }
-      if (thousandsSeparator) {
-        str = str.split(".").map(function(s, i) {
-          return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s;
-        }).join(".");
-      }
-      return str + unitSeparator + unit;
-    }
-    function parse(val) {
-      if (typeof val === "number" && !isNaN(val)) {
-        return val;
-      }
-      if (typeof val !== "string") {
-        return null;
-      }
-      var results = parseRegExp.exec(val);
-      var floatValue;
-      var unit = "b";
-      if (!results) {
-        floatValue = parseInt(val, 10);
-        unit = "b";
-      } else {
-        floatValue = parseFloat(results[1]);
-        unit = results[4].toLowerCase();
-      }
-      if (isNaN(floatValue)) {
-        return null;
-      }
-      return Math.floor(map[unit] * floatValue);
-    }
-  }
-});
-
-// node_modules/content-type/index.js
-var require_content_type = __commonJS({
-  "node_modules/content-type/index.js"(exports) {
-    "use strict";
-    var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;
-    var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/;
-    var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
-    var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g;
-    var QUOTE_REGEXP = /([\\"])/g;
-    var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
-    exports.format = format;
-    exports.parse = parse;
-    function format(obj) {
-      if (!obj || typeof obj !== "object") {
-        throw new TypeError("argument obj is required");
-      }
-      var parameters = obj.parameters;
-      var type = obj.type;
-      if (!type || !TYPE_REGEXP.test(type)) {
-        throw new TypeError("invalid type");
-      }
-      var string = type;
-      if (parameters && typeof parameters === "object") {
-        var param;
-        var params = Object.keys(parameters).sort();
-        for (var i = 0; i < params.length; i++) {
-          param = params[i];
-          if (!TOKEN_REGEXP.test(param)) {
-            throw new TypeError("invalid parameter name");
-          }
-          string += "; " + param + "=" + qstring(parameters[param]);
-        }
-      }
-      return string;
-    }
-    function parse(string) {
-      if (!string) {
-        throw new TypeError("argument string is required");
-      }
-      var header = typeof string === "object" ? getcontenttype(string) : string;
-      if (typeof header !== "string") {
-        throw new TypeError("argument string is required to be a string");
-      }
-      var index = header.indexOf(";");
-      var type = index !== -1 ? header.slice(0, index).trim() : header.trim();
-      if (!TYPE_REGEXP.test(type)) {
-        throw new TypeError("invalid media type");
-      }
-      var obj = new ContentType(type.toLowerCase());
-      if (index !== -1) {
-        var key;
-        var match;
-        var value;
-        PARAM_REGEXP.lastIndex = index;
-        while (match = PARAM_REGEXP.exec(header)) {
-          if (match.index !== index) {
-            throw new TypeError("invalid parameter format");
-          }
-          index += match[0].length;
-          key = match[1].toLowerCase();
-          value = match[2];
-          if (value.charCodeAt(0) === 34) {
-            value = value.slice(1, -1);
-            if (value.indexOf("\\") !== -1) {
-              value = value.replace(QESC_REGEXP, "$1");
-            }
-          }
-          obj.parameters[key] = value;
-        }
-        if (index !== header.length) {
-          throw new TypeError("invalid parameter format");
-        }
-      }
-      return obj;
-    }
-    function getcontenttype(obj) {
-      var header;
-      if (typeof obj.getHeader === "function") {
-        header = obj.getHeader("content-type");
-      } else if (typeof obj.headers === "object") {
-        header = obj.headers && obj.headers["content-type"];
-      }
-      if (typeof header !== "string") {
-        throw new TypeError("content-type header is missing from object");
-      }
-      return header;
-    }
-    function qstring(val) {
-      var str = String(val);
-      if (TOKEN_REGEXP.test(str)) {
-        return str;
-      }
-      if (str.length > 0 && !TEXT_REGEXP.test(str)) {
-        throw new TypeError("invalid parameter value");
-      }
-      return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"';
-    }
-    function ContentType(type) {
-      this.parameters = /* @__PURE__ */ Object.create(null);
-      this.type = type;
-    }
-  }
-});
-
-// node_modules/setprototypeof/index.js
-var require_setprototypeof = __commonJS({
-  "node_modules/setprototypeof/index.js"(exports, module) {
-    "use strict";
-    module.exports = Object.setPrototypeOf || ({
-      __proto__: []
-    } instanceof Array ? setProtoOf : mixinProperties);
-    function setProtoOf(obj, proto) {
-      obj.__proto__ = proto;
-      return obj;
-    }
-    function mixinProperties(obj, proto) {
-      for (var prop in proto) {
-        if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
-          obj[prop] = proto[prop];
-        }
-      }
-      return obj;
-    }
-  }
-});
-
-// node_modules/statuses/codes.json
-var require_codes = __commonJS({
-  "node_modules/statuses/codes.json"(exports, module) {
-    module.exports = {
-      "100": "Continue",
-      "101": "Switching Protocols",
-      "102": "Processing",
-      "103": "Early Hints",
-      "200": "OK",
-      "201": "Created",
-      "202": "Accepted",
-      "203": "Non-Authoritative Information",
-      "204": "No Content",
-      "205": "Reset Content",
-      "206": "Partial Content",
-      "207": "Multi-Status",
-      "208": "Already Reported",
-      "226": "IM Used",
-      "300": "Multiple Choices",
-      "301": "Moved Permanently",
-      "302": "Found",
-      "303": "See Other",
-      "304": "Not Modified",
-      "305": "Use Proxy",
-      "307": "Temporary Redirect",
-      "308": "Permanent Redirect",
-      "400": "Bad Request",
-      "401": "Unauthorized",
-      "402": "Payment Required",
-      "403": "Forbidden",
-      "404": "Not Found",
-      "405": "Method Not Allowed",
-      "406": "Not Acceptable",
-      "407": "Proxy Authentication Required",
-      "408": "Request Timeout",
-      "409": "Conflict",
-      "410": "Gone",
-      "411": "Length Required",
-      "412": "Precondition Failed",
-      "413": "Payload Too Large",
-      "414": "URI Too Long",
-      "415": "Unsupported Media Type",
-      "416": "Range Not Satisfiable",
-      "417": "Expectation Failed",
-      "418": "I'm a Teapot",
-      "421": "Misdirected Request",
-      "422": "Unprocessable Entity",
-      "423": "Locked",
-      "424": "Failed Dependency",
-      "425": "Too Early",
-      "426": "Upgrade Required",
-      "428": "Precondition Required",
-      "429": "Too Many Requests",
-      "431": "Request Header Fields Too Large",
-      "451": "Unavailable For Legal Reasons",
-      "500": "Internal Server Error",
-      "501": "Not Implemented",
-      "502": "Bad Gateway",
-      "503": "Service Unavailable",
-      "504": "Gateway Timeout",
-      "505": "HTTP Version Not Supported",
-      "506": "Variant Also Negotiates",
-      "507": "Insufficient Storage",
-      "508": "Loop Detected",
-      "509": "Bandwidth Limit Exceeded",
-      "510": "Not Extended",
-      "511": "Network Authentication Required"
-    };
-  }
-});
-
-// node_modules/statuses/index.js
-var require_statuses = __commonJS({
-  "node_modules/statuses/index.js"(exports, module) {
-    "use strict";
-    var codes = require_codes();
-    module.exports = status;
-    status.message = codes;
-    status.code = createMessageToStatusCodeMap(codes);
-    status.codes = createStatusCodeList(codes);
-    status.redirect = {
-      300: true,
-      301: true,
-      302: true,
-      303: true,
-      305: true,
-      307: true,
-      308: true
-    };
-    status.empty = {
-      204: true,
-      205: true,
-      304: true
-    };
-    status.retry = {
-      502: true,
-      503: true,
-      504: true
-    };
-    function createMessageToStatusCodeMap(codes2) {
-      var map = {};
-      Object.keys(codes2).forEach(function forEachCode(code) {
-        var message = codes2[code];
-        var status2 = Number(code);
-        map[message.toLowerCase()] = status2;
-      });
-      return map;
-    }
-    function createStatusCodeList(codes2) {
-      return Object.keys(codes2).map(function mapCode(code) {
-        return Number(code);
-      });
-    }
-    function getStatusCode(message) {
-      var msg = message.toLowerCase();
-      if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {
-        throw new Error('invalid status message: "' + message + '"');
-      }
-      return status.code[msg];
-    }
-    function getStatusMessage(code) {
-      if (!Object.prototype.hasOwnProperty.call(status.message, code)) {
-        throw new Error("invalid status code: " + code);
-      }
-      return status.message[code];
-    }
-    function status(code) {
-      if (typeof code === "number") {
-        return getStatusMessage(code);
-      }
-      if (typeof code !== "string") {
-        throw new TypeError("code must be a number or string");
-      }
-      var n = parseInt(code, 10);
-      if (!isNaN(n)) {
-        return getStatusMessage(n);
-      }
-      return getStatusCode(code);
-    }
-  }
-});
-
-// node_modules/inherits/inherits_browser.js
-var require_inherits_browser = __commonJS({
-  "node_modules/inherits/inherits_browser.js"(exports, module) {
-    if (typeof Object.create === "function") {
-      module.exports = function inherits(ctor, superCtor) {
-        if (superCtor) {
-          ctor.super_ = superCtor;
-          ctor.prototype = Object.create(superCtor.prototype, {
-            constructor: {
-              value: ctor,
-              enumerable: false,
-              writable: true,
-              configurable: true
-            }
-          });
-        }
-      };
-    } else {
-      module.exports = function inherits(ctor, superCtor) {
-        if (superCtor) {
-          ctor.super_ = superCtor;
-          var TempCtor = function() {
-          };
-          TempCtor.prototype = superCtor.prototype;
-          ctor.prototype = new TempCtor();
-          ctor.prototype.constructor = ctor;
-        }
-      };
-    }
-  }
-});
-
-// node_modules/inherits/inherits.js
-var require_inherits = __commonJS({
-  "node_modules/inherits/inherits.js"(exports, module) {
-    try {
-      util = __require("util");
-      if (typeof util.inherits !== "function") throw "";
-      module.exports = util.inherits;
-    } catch (e) {
-      module.exports = require_inherits_browser();
-    }
-    var util;
-  }
-});
-
-// node_modules/toidentifier/index.js
-var require_toidentifier = __commonJS({
-  "node_modules/toidentifier/index.js"(exports, module) {
-    "use strict";
-    module.exports = toIdentifier;
-    function toIdentifier(str) {
-      return str.split(" ").map(function(token) {
-        return token.slice(0, 1).toUpperCase() + token.slice(1);
-      }).join("").replace(/[^ _0-9a-z]/gi, "");
-    }
-  }
-});
-
-// node_modules/http-errors/index.js
-var require_http_errors = __commonJS({
-  "node_modules/http-errors/index.js"(exports, module) {
-    "use strict";
-    var deprecate = require_depd()("http-errors");
-    var setPrototypeOf = require_setprototypeof();
-    var statuses = require_statuses();
-    var inherits = require_inherits();
-    var toIdentifier = require_toidentifier();
-    module.exports = createError;
-    module.exports.HttpError = createHttpErrorConstructor();
-    module.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError);
-    populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError);
-    function codeClass(status) {
-      return Number(String(status).charAt(0) + "00");
-    }
-    function createError() {
-      var err;
-      var msg;
-      var status = 500;
-      var props = {};
-      for (var i = 0; i < arguments.length; i++) {
-        var arg = arguments[i];
-        var type = typeof arg;
-        if (type === "object" && arg instanceof Error) {
-          err = arg;
-          status = err.status || err.statusCode || status;
-        } else if (type === "number" && i === 0) {
-          status = arg;
-        } else if (type === "string") {
-          msg = arg;
-        } else if (type === "object") {
-          props = arg;
-        } else {
-          throw new TypeError("argument #" + (i + 1) + " unsupported type " + type);
-        }
-      }
-      if (typeof status === "number" && (status < 400 || status >= 600)) {
-        deprecate("non-error status code; use only 4xx or 5xx status codes");
-      }
-      if (typeof status !== "number" || !statuses.message[status] && (status < 400 || status >= 600)) {
-        status = 500;
-      }
-      var HttpError = createError[status] || createError[codeClass(status)];
-      if (!err) {
-        err = HttpError ? new HttpError(msg) : new Error(msg || statuses.message[status]);
-        Error.captureStackTrace(err, createError);
-      }
-      if (!HttpError || !(err instanceof HttpError) || err.status !== status) {
-        err.expose = status < 500;
-        err.status = err.statusCode = status;
-      }
-      for (var key in props) {
-        if (key !== "status" && key !== "statusCode") {
-          err[key] = props[key];
-        }
-      }
-      return err;
-    }
-    function createHttpErrorConstructor() {
-      function HttpError() {
-        throw new TypeError("cannot construct abstract class");
-      }
-      inherits(HttpError, Error);
-      return HttpError;
-    }
-    function createClientErrorConstructor(HttpError, name, code) {
-      var className = toClassName(name);
-      function ClientError(message) {
-        var msg = message != null ? message : statuses.message[code];
-        var err = new Error(msg);
-        Error.captureStackTrace(err, ClientError);
-        setPrototypeOf(err, ClientError.prototype);
-        Object.defineProperty(err, "message", {
-          enumerable: true,
-          configurable: true,
-          value: msg,
-          writable: true
-        });
-        Object.defineProperty(err, "name", {
-          enumerable: false,
-          configurable: true,
-          value: className,
-          writable: true
-        });
-        return err;
-      }
-      inherits(ClientError, HttpError);
-      nameFunc(ClientError, className);
-      ClientError.prototype.status = code;
-      ClientError.prototype.statusCode = code;
-      ClientError.prototype.expose = true;
-      return ClientError;
-    }
-    function createIsHttpErrorFunction(HttpError) {
-      return function isHttpError(val) {
-        if (!val || typeof val !== "object") {
-          return false;
-        }
-        if (val instanceof HttpError) {
-          return true;
-        }
-        return val instanceof Error && typeof val.expose === "boolean" && typeof val.statusCode === "number" && val.status === val.statusCode;
-      };
-    }
-    function createServerErrorConstructor(HttpError, name, code) {
-      var className = toClassName(name);
-      function ServerError(message) {
-        var msg = message != null ? message : statuses.message[code];
-        var err = new Error(msg);
-        Error.captureStackTrace(err, ServerError);
-        setPrototypeOf(err, ServerError.prototype);
-        Object.defineProperty(err, "message", {
-          enumerable: true,
-          configurable: true,
-          value: msg,
-          writable: true
-        });
-        Object.defineProperty(err, "name", {
-          enumerable: false,
-          configurable: true,
-          value: className,
-          writable: true
-        });
-        return err;
-      }
-      inherits(ServerError, HttpError);
-      nameFunc(ServerError, className);
-      ServerError.prototype.status = code;
-      ServerError.prototype.statusCode = code;
-      ServerError.prototype.expose = false;
-      return ServerError;
-    }
-    function nameFunc(func, name) {
-      var desc = Object.getOwnPropertyDescriptor(func, "name");
-      if (desc && desc.configurable) {
-        desc.value = name;
-        Object.defineProperty(func, "name", desc);
-      }
-    }
-    function populateConstructorExports(exports2, codes, HttpError) {
-      codes.forEach(function forEachCode(code) {
-        var CodeError;
-        var name = toIdentifier(statuses.message[code]);
-        switch (codeClass(code)) {
-          case 400:
-            CodeError = createClientErrorConstructor(HttpError, name, code);
-            break;
-          case 500:
-            CodeError = createServerErrorConstructor(HttpError, name, code);
-            break;
-        }
-        if (CodeError) {
-          exports2[code] = CodeError;
-          exports2[name] = CodeError;
-        }
-      });
-    }
-    function toClassName(name) {
-      return name.substr(-5) !== "Error" ? name + "Error" : name;
-    }
-  }
-});
-
-// node_modules/body-parser/node_modules/ms/index.js
-var require_ms = __commonJS({
-  "node_modules/body-parser/node_modules/ms/index.js"(exports, module) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var y = d * 365.25;
-    module.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isNaN(val) === false) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      if (ms >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (ms >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (ms >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (ms >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms";
-    }
-    function plural(ms, n, name) {
-      if (ms < n) {
-        return;
-      }
-      if (ms < n * 1.5) {
-        return Math.floor(ms / n) + " " + name;
-      }
-      return Math.ceil(ms / n) + " " + name + "s";
-    }
-  }
-});
-
-// node_modules/body-parser/node_modules/debug/src/debug.js
-var require_debug = __commonJS({
-  "node_modules/body-parser/node_modules/debug/src/debug.js"(exports, module) {
-    exports = module.exports = createDebug.debug = createDebug["default"] = createDebug;
-    exports.coerce = coerce;
-    exports.disable = disable;
-    exports.enable = enable;
-    exports.enabled = enabled;
-    exports.humanize = require_ms();
-    exports.names = [];
-    exports.skips = [];
-    exports.formatters = {};
-    var prevTime;
-    function selectColor(namespace) {
-      var hash = 0, i;
-      for (i in namespace) {
-        hash = (hash << 5) - hash + namespace.charCodeAt(i);
-        hash |= 0;
-      }
-      return exports.colors[Math.abs(hash) % exports.colors.length];
-    }
-    function createDebug(namespace) {
-      function debug() {
-        if (!debug.enabled) return;
-        var self = debug;
-        var curr = +/* @__PURE__ */ new Date();
-        var ms = curr - (prevTime || curr);
-        self.diff = ms;
-        self.prev = prevTime;
-        self.curr = curr;
-        prevTime = curr;
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        args[0] = exports.coerce(args[0]);
-        if ("string" !== typeof args[0]) {
-          args.unshift("%O");
-        }
-        var index = 0;
-        args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
-          if (match === "%%") return match;
-          index++;
-          var formatter = exports.formatters[format];
-          if ("function" === typeof formatter) {
-            var val = args[index];
-            match = formatter.call(self, val);
-            args.splice(index, 1);
-            index--;
-          }
-          return match;
-        });
-        exports.formatArgs.call(self, args);
-        var logFn = debug.log || exports.log || console.log.bind(console);
-        logFn.apply(self, args);
-      }
-      debug.namespace = namespace;
-      debug.enabled = exports.enabled(namespace);
-      debug.useColors = exports.useColors();
-      debug.color = selectColor(namespace);
-      if ("function" === typeof exports.init) {
-        exports.init(debug);
-      }
-      return debug;
-    }
-    function enable(namespaces) {
-      exports.save(namespaces);
-      exports.names = [];
-      exports.skips = [];
-      var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
-      var len = split.length;
-      for (var i = 0; i < len; i++) {
-        if (!split[i]) continue;
-        namespaces = split[i].replace(/\*/g, ".*?");
-        if (namespaces[0] === "-") {
-          exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$"));
-        } else {
-          exports.names.push(new RegExp("^" + namespaces + "$"));
-        }
-      }
-    }
-    function disable() {
-      exports.enable("");
-    }
-    function enabled(name) {
-      var i, len;
-      for (i = 0, len = exports.skips.length; i < len; i++) {
-        if (exports.skips[i].test(name)) {
-          return false;
-        }
-      }
-      for (i = 0, len = exports.names.length; i < len; i++) {
-        if (exports.names[i].test(name)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function coerce(val) {
-      if (val instanceof Error) return val.stack || val.message;
-      return val;
-    }
-  }
-});
-
-// node_modules/body-parser/node_modules/debug/src/browser.js
-var require_browser = __commonJS({
-  "node_modules/body-parser/node_modules/debug/src/browser.js"(exports, module) {
-    exports = module.exports = require_debug();
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local : localstorage();
-    exports.colors = ["lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson"];
-    function useColors() {
-      if (typeof window !== "undefined" && window.process && window.process.type === "renderer") {
-        return true;
-      }
-      return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773
-      typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31?
-      // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-    }
-    exports.formatters.j = function(v) {
-      try {
-        return JSON.stringify(v);
-      } catch (err) {
-        return "[UnexpectedJSONParseError]: " + err.message;
-      }
-    };
-    function formatArgs(args) {
-      var useColors2 = this.useColors;
-      args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff);
-      if (!useColors2) return;
-      var c = "color: " + this.color;
-      args.splice(1, 0, c, "color: inherit");
-      var index = 0;
-      var lastC = 0;
-      args[0].replace(/%[a-zA-Z%]/g, function(match) {
-        if ("%%" === match) return;
-        index++;
-        if ("%c" === match) {
-          lastC = index;
-        }
-      });
-      args.splice(lastC, 0, c);
-    }
-    function log() {
-      return "object" === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);
-    }
-    function save(namespaces) {
-      try {
-        if (null == namespaces) {
-          exports.storage.removeItem("debug");
-        } else {
-          exports.storage.debug = namespaces;
-        }
-      } catch (e) {
-      }
-    }
-    function load() {
-      var r;
-      try {
-        r = exports.storage.debug;
-      } catch (e) {
-      }
-      if (!r && typeof process !== "undefined" && "env" in process) {
-        r = process.env.DEBUG;
-      }
-      return r;
-    }
-    exports.enable(load());
-    function localstorage() {
-      try {
-        return window.localStorage;
-      } catch (e) {
-      }
-    }
-  }
-});
-
-// node_modules/body-parser/node_modules/debug/src/node.js
-var require_node = __commonJS({
-  "node_modules/body-parser/node_modules/debug/src/node.js"(exports, module) {
-    var tty = __require("tty");
-    var util = __require("util");
-    exports = module.exports = require_debug();
-    exports.init = init;
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.colors = [6, 2, 3, 4, 5, 1];
-    exports.inspectOpts = Object.keys(process.env).filter(function(key) {
-      return /^debug_/i.test(key);
-    }).reduce(function(obj, key) {
-      var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) {
-        return k.toUpperCase();
-      });
-      var val = process.env[key];
-      if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
-      else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
-      else if (val === "null") val = null;
-      else val = Number(val);
-      obj[prop] = val;
-      return obj;
-    }, {});
-    var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
-    if (1 !== fd && 2 !== fd) {
-      util.deprecate(function() {
-      }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
-    }
-    var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);
-    function useColors() {
-      return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);
-    }
-    exports.formatters.o = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts).split("\n").map(function(str) {
-        return str.trim();
-      }).join(" ");
-    };
-    exports.formatters.O = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts);
-    };
-    function formatArgs(args) {
-      var name = this.namespace;
-      var useColors2 = this.useColors;
-      if (useColors2) {
-        var c = this.color;
-        var prefix = "  \x1B[3" + c + ";1m" + name + " \x1B[0m";
-        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
-        args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m");
-      } else {
-        args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0];
-      }
-    }
-    function log() {
-      return stream.write(util.format.apply(util, arguments) + "\n");
-    }
-    function save(namespaces) {
-      if (null == namespaces) {
-        delete process.env.DEBUG;
-      } else {
-        process.env.DEBUG = namespaces;
-      }
-    }
-    function load() {
-      return process.env.DEBUG;
-    }
-    function createWritableStdioStream(fd2) {
-      var stream2;
-      var tty_wrap = process.binding("tty_wrap");
-      switch (tty_wrap.guessHandleType(fd2)) {
-        case "TTY":
-          stream2 = new tty.WriteStream(fd2);
-          stream2._type = "tty";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        case "FILE":
-          var fs = __require("fs");
-          stream2 = new fs.SyncWriteStream(fd2, {
-            autoClose: false
-          });
-          stream2._type = "fs";
-          break;
-        case "PIPE":
-        case "TCP":
-          var net = __require("net");
-          stream2 = new net.Socket({
-            fd: fd2,
-            readable: false,
-            writable: true
-          });
-          stream2.readable = false;
-          stream2.read = null;
-          stream2._type = "pipe";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        default:
-          throw new Error("Implement me. Unknown stream file type!");
-      }
-      stream2.fd = fd2;
-      stream2._isStdio = true;
-      return stream2;
-    }
-    function init(debug) {
-      debug.inspectOpts = {};
-      var keys = Object.keys(exports.inspectOpts);
-      for (var i = 0; i < keys.length; i++) {
-        debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
-      }
-    }
-    exports.enable(load());
-  }
-});
-
-// node_modules/body-parser/node_modules/debug/src/index.js
-var require_src = __commonJS({
-  "node_modules/body-parser/node_modules/debug/src/index.js"(exports, module) {
-    if (typeof process !== "undefined" && process.type === "renderer") {
-      module.exports = require_browser();
-    } else {
-      module.exports = require_node();
-    }
-  }
-});
-
-// node_modules/destroy/index.js
-var require_destroy = __commonJS({
-  "node_modules/destroy/index.js"(exports, module) {
-    "use strict";
-    var EventEmitter = __require("events").EventEmitter;
-    var ReadStream = __require("fs").ReadStream;
-    var Stream = __require("stream");
-    var Zlib = __require("zlib");
-    module.exports = destroy;
-    function destroy(stream, suppress) {
-      if (isFsReadStream(stream)) {
-        destroyReadStream(stream);
-      } else if (isZlibStream(stream)) {
-        destroyZlibStream(stream);
-      } else if (hasDestroy(stream)) {
-        stream.destroy();
-      }
-      if (isEventEmitter(stream) && suppress) {
-        stream.removeAllListeners("error");
-        stream.addListener("error", noop);
-      }
-      return stream;
-    }
-    function destroyReadStream(stream) {
-      stream.destroy();
-      if (typeof stream.close === "function") {
-        stream.on("open", onOpenClose);
-      }
-    }
-    function closeZlibStream(stream) {
-      if (stream._hadError === true) {
-        var prop = stream._binding === null ? "_binding" : "_handle";
-        stream[prop] = {
-          close: function() {
-            this[prop] = null;
-          }
-        };
-      }
-      stream.close();
-    }
-    function destroyZlibStream(stream) {
-      if (typeof stream.destroy === "function") {
-        if (stream._binding) {
-          stream.destroy();
-          if (stream._processing) {
-            stream._needDrain = true;
-            stream.once("drain", onDrainClearBinding);
-          } else {
-            stream._binding.clear();
-          }
-        } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {
-          stream.destroy();
-        } else if (stream._destroy && typeof stream.close === "function") {
-          stream.destroyed = true;
-          stream.close();
-        } else {
-          stream.destroy();
-        }
-      } else if (typeof stream.close === "function") {
-        closeZlibStream(stream);
-      }
-    }
-    function hasDestroy(stream) {
-      return stream instanceof Stream && typeof stream.destroy === "function";
-    }
-    function isEventEmitter(val) {
-      return val instanceof EventEmitter;
-    }
-    function isFsReadStream(stream) {
-      return stream instanceof ReadStream;
-    }
-    function isZlibStream(stream) {
-      return stream instanceof Zlib.Gzip || stream instanceof Zlib.Gunzip || stream instanceof Zlib.Deflate || stream instanceof Zlib.DeflateRaw || stream instanceof Zlib.Inflate || stream instanceof Zlib.InflateRaw || stream instanceof Zlib.Unzip;
-    }
-    function noop() {
-    }
-    function onDrainClearBinding() {
-      this._binding.clear();
-    }
-    function onOpenClose() {
-      if (typeof this.fd === "number") {
-        this.close();
-      }
-    }
-  }
-});
-
-// node_modules/safer-buffer/safer.js
-var require_safer = __commonJS({
-  "node_modules/safer-buffer/safer.js"(exports, module) {
-    "use strict";
-    var buffer = __require("buffer");
-    var Buffer2 = buffer.Buffer;
-    var safer = {};
-    var key;
-    for (key in buffer) {
-      if (!buffer.hasOwnProperty(key)) continue;
-      if (key === "SlowBuffer" || key === "Buffer") continue;
-      safer[key] = buffer[key];
-    }
-    var Safer = safer.Buffer = {};
-    for (key in Buffer2) {
-      if (!Buffer2.hasOwnProperty(key)) continue;
-      if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
-      Safer[key] = Buffer2[key];
-    }
-    safer.Buffer.prototype = Buffer2.prototype;
-    if (!Safer.from || Safer.from === Uint8Array.from) {
-      Safer.from = function(value, encodingOrOffset, length) {
-        if (typeof value === "number") {
-          throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value);
-        }
-        if (value && typeof value.length === "undefined") {
-          throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value);
-        }
-        return Buffer2(value, encodingOrOffset, length);
-      };
-    }
-    if (!Safer.alloc) {
-      Safer.alloc = function(size, fill, encoding) {
-        if (typeof size !== "number") {
-          throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size);
-        }
-        if (size < 0 || size >= 2 * (1 << 30)) {
-          throw new RangeError('The value "' + size + '" is invalid for option "size"');
-        }
-        var buf = Buffer2(size);
-        if (!fill || fill.length === 0) {
-          buf.fill(0);
-        } else if (typeof encoding === "string") {
-          buf.fill(fill, encoding);
-        } else {
-          buf.fill(fill);
-        }
-        return buf;
-      };
-    }
-    if (!safer.kStringMaxLength) {
-      try {
-        safer.kStringMaxLength = process.binding("buffer").kStringMaxLength;
-      } catch (e) {
-      }
-    }
-    if (!safer.constants) {
-      safer.constants = {
-        MAX_LENGTH: safer.kMaxLength
-      };
-      if (safer.kStringMaxLength) {
-        safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;
-      }
-    }
-    module.exports = safer;
-  }
-});
-
-// node_modules/iconv-lite/lib/bom-handling.js
-var require_bom_handling = __commonJS({
-  "node_modules/iconv-lite/lib/bom-handling.js"(exports) {
-    "use strict";
-    var BOMChar = "\uFEFF";
-    exports.PrependBOM = PrependBOMWrapper;
-    function PrependBOMWrapper(encoder, options) {
-      this.encoder = encoder;
-      this.addBOM = true;
-    }
-    PrependBOMWrapper.prototype.write = function(str) {
-      if (this.addBOM) {
-        str = BOMChar + str;
-        this.addBOM = false;
-      }
-      return this.encoder.write(str);
-    };
-    PrependBOMWrapper.prototype.end = function() {
-      return this.encoder.end();
-    };
-    exports.StripBOM = StripBOMWrapper;
-    function StripBOMWrapper(decoder, options) {
-      this.decoder = decoder;
-      this.pass = false;
-      this.options = options || {};
-    }
-    StripBOMWrapper.prototype.write = function(buf) {
-      var res = this.decoder.write(buf);
-      if (this.pass || !res) return res;
-      if (res[0] === BOMChar) {
-        res = res.slice(1);
-        if (typeof this.options.stripBOM === "function") this.options.stripBOM();
-      }
-      this.pass = true;
-      return res;
-    };
-    StripBOMWrapper.prototype.end = function() {
-      return this.decoder.end();
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/internal.js
-var require_internal = __commonJS({
-  "node_modules/iconv-lite/encodings/internal.js"(exports, module) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    module.exports = {
-      // Encodings
-      utf8: {
-        type: "_internal",
-        bomAware: true
-      },
-      cesu8: {
-        type: "_internal",
-        bomAware: true
-      },
-      unicode11utf8: "utf8",
-      ucs2: {
-        type: "_internal",
-        bomAware: true
-      },
-      utf16le: "ucs2",
-      binary: {
-        type: "_internal"
-      },
-      base64: {
-        type: "_internal"
-      },
-      hex: {
-        type: "_internal"
-      },
-      // Codec.
-      _internal: InternalCodec
-    };
-    function InternalCodec(codecOptions, iconv) {
-      this.enc = codecOptions.encodingName;
-      this.bomAware = codecOptions.bomAware;
-      if (this.enc === "base64") this.encoder = InternalEncoderBase64;
-      else if (this.enc === "cesu8") {
-        this.enc = "utf8";
-        this.encoder = InternalEncoderCesu8;
-        if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "💩") {
-          this.decoder = InternalDecoderCesu8;
-          this.defaultCharUnicode = iconv.defaultCharUnicode;
-        }
-      }
-    }
-    InternalCodec.prototype.encoder = InternalEncoder;
-    InternalCodec.prototype.decoder = InternalDecoder;
-    var StringDecoder = __require("string_decoder").StringDecoder;
-    if (!StringDecoder.prototype.end)
-      StringDecoder.prototype.end = function() {
-      };
-    function InternalDecoder(options, codec) {
-      StringDecoder.call(this, codec.enc);
-    }
-    InternalDecoder.prototype = StringDecoder.prototype;
-    function InternalEncoder(options, codec) {
-      this.enc = codec.enc;
-    }
-    InternalEncoder.prototype.write = function(str) {
-      return Buffer2.from(str, this.enc);
-    };
-    InternalEncoder.prototype.end = function() {
-    };
-    function InternalEncoderBase64(options, codec) {
-      this.prevStr = "";
-    }
-    InternalEncoderBase64.prototype.write = function(str) {
-      str = this.prevStr + str;
-      var completeQuads = str.length - str.length % 4;
-      this.prevStr = str.slice(completeQuads);
-      str = str.slice(0, completeQuads);
-      return Buffer2.from(str, "base64");
-    };
-    InternalEncoderBase64.prototype.end = function() {
-      return Buffer2.from(this.prevStr, "base64");
-    };
-    function InternalEncoderCesu8(options, codec) {
-    }
-    InternalEncoderCesu8.prototype.write = function(str) {
-      var buf = Buffer2.alloc(str.length * 3), bufIdx = 0;
-      for (var i = 0; i < str.length; i++) {
-        var charCode = str.charCodeAt(i);
-        if (charCode < 128) buf[bufIdx++] = charCode;
-        else if (charCode < 2048) {
-          buf[bufIdx++] = 192 + (charCode >>> 6);
-          buf[bufIdx++] = 128 + (charCode & 63);
-        } else {
-          buf[bufIdx++] = 224 + (charCode >>> 12);
-          buf[bufIdx++] = 128 + (charCode >>> 6 & 63);
-          buf[bufIdx++] = 128 + (charCode & 63);
-        }
-      }
-      return buf.slice(0, bufIdx);
-    };
-    InternalEncoderCesu8.prototype.end = function() {
-    };
-    function InternalDecoderCesu8(options, codec) {
-      this.acc = 0;
-      this.contBytes = 0;
-      this.accBytes = 0;
-      this.defaultCharUnicode = codec.defaultCharUnicode;
-    }
-    InternalDecoderCesu8.prototype.write = function(buf) {
-      var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = "";
-      for (var i = 0; i < buf.length; i++) {
-        var curByte = buf[i];
-        if ((curByte & 192) !== 128) {
-          if (contBytes > 0) {
-            res += this.defaultCharUnicode;
-            contBytes = 0;
-          }
-          if (curByte < 128) {
-            res += String.fromCharCode(curByte);
-          } else if (curByte < 224) {
-            acc = curByte & 31;
-            contBytes = 1;
-            accBytes = 1;
-          } else if (curByte < 240) {
-            acc = curByte & 15;
-            contBytes = 2;
-            accBytes = 1;
-          } else {
-            res += this.defaultCharUnicode;
-          }
-        } else {
-          if (contBytes > 0) {
-            acc = acc << 6 | curByte & 63;
-            contBytes--;
-            accBytes++;
-            if (contBytes === 0) {
-              if (accBytes === 2 && acc < 128 && acc > 0) res += this.defaultCharUnicode;
-              else if (accBytes === 3 && acc < 2048) res += this.defaultCharUnicode;
-              else
-                res += String.fromCharCode(acc);
-            }
-          } else {
-            res += this.defaultCharUnicode;
-          }
-        }
-      }
-      this.acc = acc;
-      this.contBytes = contBytes;
-      this.accBytes = accBytes;
-      return res;
-    };
-    InternalDecoderCesu8.prototype.end = function() {
-      var res = 0;
-      if (this.contBytes > 0) res += this.defaultCharUnicode;
-      return res;
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/utf16.js
-var require_utf16 = __commonJS({
-  "node_modules/iconv-lite/encodings/utf16.js"(exports) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    exports.utf16be = Utf16BECodec;
-    function Utf16BECodec() {
-    }
-    Utf16BECodec.prototype.encoder = Utf16BEEncoder;
-    Utf16BECodec.prototype.decoder = Utf16BEDecoder;
-    Utf16BECodec.prototype.bomAware = true;
-    function Utf16BEEncoder() {
-    }
-    Utf16BEEncoder.prototype.write = function(str) {
-      var buf = Buffer2.from(str, "ucs2");
-      for (var i = 0; i < buf.length; i += 2) {
-        var tmp = buf[i];
-        buf[i] = buf[i + 1];
-        buf[i + 1] = tmp;
-      }
-      return buf;
-    };
-    Utf16BEEncoder.prototype.end = function() {
-    };
-    function Utf16BEDecoder() {
-      this.overflowByte = -1;
-    }
-    Utf16BEDecoder.prototype.write = function(buf) {
-      if (buf.length == 0) return "";
-      var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0;
-      if (this.overflowByte !== -1) {
-        buf2[0] = buf[0];
-        buf2[1] = this.overflowByte;
-        i = 1;
-        j = 2;
-      }
-      for (; i < buf.length - 1; i += 2, j += 2) {
-        buf2[j] = buf[i + 1];
-        buf2[j + 1] = buf[i];
-      }
-      this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
-      return buf2.slice(0, j).toString("ucs2");
-    };
-    Utf16BEDecoder.prototype.end = function() {
-    };
-    exports.utf16 = Utf16Codec;
-    function Utf16Codec(codecOptions, iconv) {
-      this.iconv = iconv;
-    }
-    Utf16Codec.prototype.encoder = Utf16Encoder;
-    Utf16Codec.prototype.decoder = Utf16Decoder;
-    function Utf16Encoder(options, codec) {
-      options = options || {};
-      if (options.addBOM === void 0) options.addBOM = true;
-      this.encoder = codec.iconv.getEncoder("utf-16le", options);
-    }
-    Utf16Encoder.prototype.write = function(str) {
-      return this.encoder.write(str);
-    };
-    Utf16Encoder.prototype.end = function() {
-      return this.encoder.end();
-    };
-    function Utf16Decoder(options, codec) {
-      this.decoder = null;
-      this.initialBytes = [];
-      this.initialBytesLen = 0;
-      this.options = options || {};
-      this.iconv = codec.iconv;
-    }
-    Utf16Decoder.prototype.write = function(buf) {
-      if (!this.decoder) {
-        this.initialBytes.push(buf);
-        this.initialBytesLen += buf.length;
-        if (this.initialBytesLen < 16)
-          return "";
-        var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding);
-        this.decoder = this.iconv.getDecoder(encoding, this.options);
-        this.initialBytes.length = this.initialBytesLen = 0;
-      }
-      return this.decoder.write(buf);
-    };
-    Utf16Decoder.prototype.end = function() {
-      if (!this.decoder) {
-        var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding);
-        this.decoder = this.iconv.getDecoder(encoding, this.options);
-        var res = this.decoder.write(buf), trail = this.decoder.end();
-        return trail ? res + trail : res;
-      }
-      return this.decoder.end();
-    };
-    function detectEncoding(buf, defaultEncoding) {
-      var enc = defaultEncoding || "utf-16le";
-      if (buf.length >= 2) {
-        if (buf[0] == 254 && buf[1] == 255)
-          enc = "utf-16be";
-        else if (buf[0] == 255 && buf[1] == 254)
-          enc = "utf-16le";
-        else {
-          var asciiCharsLE = 0, asciiCharsBE = 0, _len = Math.min(buf.length - buf.length % 2, 64);
-          for (var i = 0; i < _len; i += 2) {
-            if (buf[i] === 0 && buf[i + 1] !== 0) asciiCharsBE++;
-            if (buf[i] !== 0 && buf[i + 1] === 0) asciiCharsLE++;
-          }
-          if (asciiCharsBE > asciiCharsLE) enc = "utf-16be";
-          else if (asciiCharsBE < asciiCharsLE) enc = "utf-16le";
-        }
-      }
-      return enc;
-    }
-  }
-});
-
-// node_modules/iconv-lite/encodings/utf7.js
-var require_utf7 = __commonJS({
-  "node_modules/iconv-lite/encodings/utf7.js"(exports) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    exports.utf7 = Utf7Codec;
-    exports.unicode11utf7 = "utf7";
-    function Utf7Codec(codecOptions, iconv) {
-      this.iconv = iconv;
-    }
-    Utf7Codec.prototype.encoder = Utf7Encoder;
-    Utf7Codec.prototype.decoder = Utf7Decoder;
-    Utf7Codec.prototype.bomAware = true;
-    var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
-    function Utf7Encoder(options, codec) {
-      this.iconv = codec.iconv;
-    }
-    Utf7Encoder.prototype.write = function(str) {
-      return Buffer2.from(str.replace(nonDirectChars, function(chunk) {
-        return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
-      }.bind(this)));
-    };
-    Utf7Encoder.prototype.end = function() {
-    };
-    function Utf7Decoder(options, codec) {
-      this.iconv = codec.iconv;
-      this.inBase64 = false;
-      this.base64Accum = "";
-    }
-    var base64Regex = /[A-Za-z0-9\/+]/;
-    var base64Chars = [];
-    for (i = 0; i < 256; i++) base64Chars[i] = base64Regex.test(String.fromCharCode(i));
-    var i;
-    var plusChar = "+".charCodeAt(0);
-    var minusChar = "-".charCodeAt(0);
-    var andChar = "&".charCodeAt(0);
-    Utf7Decoder.prototype.write = function(buf) {
-      var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
-      for (var i2 = 0; i2 < buf.length; i2++) {
-        if (!inBase64) {
-          if (buf[i2] == plusChar) {
-            res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
-            lastI = i2 + 1;
-            inBase64 = true;
-          }
-        } else {
-          if (!base64Chars[buf[i2]]) {
-            if (i2 == lastI && buf[i2] == minusChar) {
-              res += "+";
-            } else {
-              var b64str = base64Accum + buf.slice(lastI, i2).toString();
-              res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
-            }
-            if (buf[i2] != minusChar)
-              i2--;
-            lastI = i2 + 1;
-            inBase64 = false;
-            base64Accum = "";
-          }
-        }
-      }
-      if (!inBase64) {
-        res += this.iconv.decode(buf.slice(lastI), "ascii");
-      } else {
-        var b64str = base64Accum + buf.slice(lastI).toString();
-        var canBeDecoded = b64str.length - b64str.length % 8;
-        base64Accum = b64str.slice(canBeDecoded);
-        b64str = b64str.slice(0, canBeDecoded);
-        res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
-      }
-      this.inBase64 = inBase64;
-      this.base64Accum = base64Accum;
-      return res;
-    };
-    Utf7Decoder.prototype.end = function() {
-      var res = "";
-      if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
-      this.inBase64 = false;
-      this.base64Accum = "";
-      return res;
-    };
-    exports.utf7imap = Utf7IMAPCodec;
-    function Utf7IMAPCodec(codecOptions, iconv) {
-      this.iconv = iconv;
-    }
-    Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
-    Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
-    Utf7IMAPCodec.prototype.bomAware = true;
-    function Utf7IMAPEncoder(options, codec) {
-      this.iconv = codec.iconv;
-      this.inBase64 = false;
-      this.base64Accum = Buffer2.alloc(6);
-      this.base64AccumIdx = 0;
-    }
-    Utf7IMAPEncoder.prototype.write = function(str) {
-      var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0;
-      for (var i2 = 0; i2 < str.length; i2++) {
-        var uChar = str.charCodeAt(i2);
-        if (32 <= uChar && uChar <= 126) {
-          if (inBase64) {
-            if (base64AccumIdx > 0) {
-              bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
-              base64AccumIdx = 0;
-            }
-            buf[bufIdx++] = minusChar;
-            inBase64 = false;
-          }
-          if (!inBase64) {
-            buf[bufIdx++] = uChar;
-            if (uChar === andChar)
-              buf[bufIdx++] = minusChar;
-          }
-        } else {
-          if (!inBase64) {
-            buf[bufIdx++] = andChar;
-            inBase64 = true;
-          }
-          if (inBase64) {
-            base64Accum[base64AccumIdx++] = uChar >> 8;
-            base64Accum[base64AccumIdx++] = uChar & 255;
-            if (base64AccumIdx == base64Accum.length) {
-              bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx);
-              base64AccumIdx = 0;
-            }
-          }
-        }
-      }
-      this.inBase64 = inBase64;
-      this.base64AccumIdx = base64AccumIdx;
-      return buf.slice(0, bufIdx);
-    };
-    Utf7IMAPEncoder.prototype.end = function() {
-      var buf = Buffer2.alloc(10), bufIdx = 0;
-      if (this.inBase64) {
-        if (this.base64AccumIdx > 0) {
-          bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
-          this.base64AccumIdx = 0;
-        }
-        buf[bufIdx++] = minusChar;
-        this.inBase64 = false;
-      }
-      return buf.slice(0, bufIdx);
-    };
-    function Utf7IMAPDecoder(options, codec) {
-      this.iconv = codec.iconv;
-      this.inBase64 = false;
-      this.base64Accum = "";
-    }
-    var base64IMAPChars = base64Chars.slice();
-    base64IMAPChars[",".charCodeAt(0)] = true;
-    Utf7IMAPDecoder.prototype.write = function(buf) {
-      var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
-      for (var i2 = 0; i2 < buf.length; i2++) {
-        if (!inBase64) {
-          if (buf[i2] == andChar) {
-            res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
-            lastI = i2 + 1;
-            inBase64 = true;
-          }
-        } else {
-          if (!base64IMAPChars[buf[i2]]) {
-            if (i2 == lastI && buf[i2] == minusChar) {
-              res += "&";
-            } else {
-              var b64str = base64Accum + buf.slice(lastI, i2).toString().replace(/,/g, "/");
-              res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
-            }
-            if (buf[i2] != minusChar)
-              i2--;
-            lastI = i2 + 1;
-            inBase64 = false;
-            base64Accum = "";
-          }
-        }
-      }
-      if (!inBase64) {
-        res += this.iconv.decode(buf.slice(lastI), "ascii");
-      } else {
-        var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, "/");
-        var canBeDecoded = b64str.length - b64str.length % 8;
-        base64Accum = b64str.slice(canBeDecoded);
-        b64str = b64str.slice(0, canBeDecoded);
-        res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
-      }
-      this.inBase64 = inBase64;
-      this.base64Accum = base64Accum;
-      return res;
-    };
-    Utf7IMAPDecoder.prototype.end = function() {
-      var res = "";
-      if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
-      this.inBase64 = false;
-      this.base64Accum = "";
-      return res;
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/sbcs-codec.js
-var require_sbcs_codec = __commonJS({
-  "node_modules/iconv-lite/encodings/sbcs-codec.js"(exports) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    exports._sbcs = SBCSCodec;
-    function SBCSCodec(codecOptions, iconv) {
-      if (!codecOptions) throw new Error("SBCS codec is called without the data.");
-      if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256) throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)");
-      if (codecOptions.chars.length === 128) {
-        var asciiString = "";
-        for (var i = 0; i < 128; i++) asciiString += String.fromCharCode(i);
-        codecOptions.chars = asciiString + codecOptions.chars;
-      }
-      this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2");
-      var encodeBuf = Buffer2.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));
-      for (var i = 0; i < codecOptions.chars.length; i++) encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
-      this.encodeBuf = encodeBuf;
-    }
-    SBCSCodec.prototype.encoder = SBCSEncoder;
-    SBCSCodec.prototype.decoder = SBCSDecoder;
-    function SBCSEncoder(options, codec) {
-      this.encodeBuf = codec.encodeBuf;
-    }
-    SBCSEncoder.prototype.write = function(str) {
-      var buf = Buffer2.alloc(str.length);
-      for (var i = 0; i < str.length; i++) buf[i] = this.encodeBuf[str.charCodeAt(i)];
-      return buf;
-    };
-    SBCSEncoder.prototype.end = function() {
-    };
-    function SBCSDecoder(options, codec) {
-      this.decodeBuf = codec.decodeBuf;
-    }
-    SBCSDecoder.prototype.write = function(buf) {
-      var decodeBuf = this.decodeBuf;
-      var newBuf = Buffer2.alloc(buf.length * 2);
-      var idx1 = 0, idx2 = 0;
-      for (var i = 0; i < buf.length; i++) {
-        idx1 = buf[i] * 2;
-        idx2 = i * 2;
-        newBuf[idx2] = decodeBuf[idx1];
-        newBuf[idx2 + 1] = decodeBuf[idx1 + 1];
-      }
-      return newBuf.toString("ucs2");
-    };
-    SBCSDecoder.prototype.end = function() {
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/sbcs-data.js
-var require_sbcs_data = __commonJS({
-  "node_modules/iconv-lite/encodings/sbcs-data.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      // Not supported by iconv, not sure why.
-      "10029": "maccenteuro",
-      "maccenteuro": {
-        "type": "_sbcs",
-        "chars": "ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"
-      },
-      "808": "cp808",
-      "ibm808": "cp808",
-      "cp808": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ "
-      },
-      "mik": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      // Aliases of generated encodings.
-      "ascii8bit": "ascii",
-      "usascii": "ascii",
-      "ansix34": "ascii",
-      "ansix341968": "ascii",
-      "ansix341986": "ascii",
-      "csascii": "ascii",
-      "cp367": "ascii",
-      "ibm367": "ascii",
-      "isoir6": "ascii",
-      "iso646us": "ascii",
-      "iso646irv": "ascii",
-      "us": "ascii",
-      "latin1": "iso88591",
-      "latin2": "iso88592",
-      "latin3": "iso88593",
-      "latin4": "iso88594",
-      "latin5": "iso88599",
-      "latin6": "iso885910",
-      "latin7": "iso885913",
-      "latin8": "iso885914",
-      "latin9": "iso885915",
-      "latin10": "iso885916",
-      "csisolatin1": "iso88591",
-      "csisolatin2": "iso88592",
-      "csisolatin3": "iso88593",
-      "csisolatin4": "iso88594",
-      "csisolatincyrillic": "iso88595",
-      "csisolatinarabic": "iso88596",
-      "csisolatingreek": "iso88597",
-      "csisolatinhebrew": "iso88598",
-      "csisolatin5": "iso88599",
-      "csisolatin6": "iso885910",
-      "l1": "iso88591",
-      "l2": "iso88592",
-      "l3": "iso88593",
-      "l4": "iso88594",
-      "l5": "iso88599",
-      "l6": "iso885910",
-      "l7": "iso885913",
-      "l8": "iso885914",
-      "l9": "iso885915",
-      "l10": "iso885916",
-      "isoir14": "iso646jp",
-      "isoir57": "iso646cn",
-      "isoir100": "iso88591",
-      "isoir101": "iso88592",
-      "isoir109": "iso88593",
-      "isoir110": "iso88594",
-      "isoir144": "iso88595",
-      "isoir127": "iso88596",
-      "isoir126": "iso88597",
-      "isoir138": "iso88598",
-      "isoir148": "iso88599",
-      "isoir157": "iso885910",
-      "isoir166": "tis620",
-      "isoir179": "iso885913",
-      "isoir199": "iso885914",
-      "isoir203": "iso885915",
-      "isoir226": "iso885916",
-      "cp819": "iso88591",
-      "ibm819": "iso88591",
-      "cyrillic": "iso88595",
-      "arabic": "iso88596",
-      "arabic8": "iso88596",
-      "ecma114": "iso88596",
-      "asmo708": "iso88596",
-      "greek": "iso88597",
-      "greek8": "iso88597",
-      "ecma118": "iso88597",
-      "elot928": "iso88597",
-      "hebrew": "iso88598",
-      "hebrew8": "iso88598",
-      "turkish": "iso88599",
-      "turkish8": "iso88599",
-      "thai": "iso885911",
-      "thai8": "iso885911",
-      "celtic": "iso885914",
-      "celtic8": "iso885914",
-      "isoceltic": "iso885914",
-      "tis6200": "tis620",
-      "tis62025291": "tis620",
-      "tis62025330": "tis620",
-      "10000": "macroman",
-      "10006": "macgreek",
-      "10007": "maccyrillic",
-      "10079": "maciceland",
-      "10081": "macturkish",
-      "cspc8codepage437": "cp437",
-      "cspc775baltic": "cp775",
-      "cspc850multilingual": "cp850",
-      "cspcp852": "cp852",
-      "cspc862latinhebrew": "cp862",
-      "cpgr": "cp869",
-      "msee": "cp1250",
-      "mscyrl": "cp1251",
-      "msansi": "cp1252",
-      "msgreek": "cp1253",
-      "msturk": "cp1254",
-      "mshebr": "cp1255",
-      "msarab": "cp1256",
-      "winbaltrim": "cp1257",
-      "cp20866": "koi8r",
-      "20866": "koi8r",
-      "ibm878": "koi8r",
-      "cskoi8r": "koi8r",
-      "cp21866": "koi8u",
-      "21866": "koi8u",
-      "ibm1168": "koi8u",
-      "strk10482002": "rk1048",
-      "tcvn5712": "tcvn",
-      "tcvn57121": "tcvn",
-      "gb198880": "iso646cn",
-      "cn": "iso646cn",
-      "csiso14jisc6220ro": "iso646jp",
-      "jisc62201969ro": "iso646jp",
-      "jp": "iso646jp",
-      "cshproman8": "hproman8",
-      "r8": "hproman8",
-      "roman8": "hproman8",
-      "xroman8": "hproman8",
-      "ibm1051": "hproman8",
-      "mac": "macintosh",
-      "csmacintosh": "macintosh"
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/sbcs-data-generated.js
-var require_sbcs_data_generated = __commonJS({
-  "node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      "437": "cp437",
-      "737": "cp737",
-      "775": "cp775",
-      "850": "cp850",
-      "852": "cp852",
-      "855": "cp855",
-      "856": "cp856",
-      "857": "cp857",
-      "858": "cp858",
-      "860": "cp860",
-      "861": "cp861",
-      "862": "cp862",
-      "863": "cp863",
-      "864": "cp864",
-      "865": "cp865",
-      "866": "cp866",
-      "869": "cp869",
-      "874": "windows874",
-      "922": "cp922",
-      "1046": "cp1046",
-      "1124": "cp1124",
-      "1125": "cp1125",
-      "1129": "cp1129",
-      "1133": "cp1133",
-      "1161": "cp1161",
-      "1162": "cp1162",
-      "1163": "cp1163",
-      "1250": "windows1250",
-      "1251": "windows1251",
-      "1252": "windows1252",
-      "1253": "windows1253",
-      "1254": "windows1254",
-      "1255": "windows1255",
-      "1256": "windows1256",
-      "1257": "windows1257",
-      "1258": "windows1258",
-      "28591": "iso88591",
-      "28592": "iso88592",
-      "28593": "iso88593",
-      "28594": "iso88594",
-      "28595": "iso88595",
-      "28596": "iso88596",
-      "28597": "iso88597",
-      "28598": "iso88598",
-      "28599": "iso88599",
-      "28600": "iso885910",
-      "28601": "iso885911",
-      "28603": "iso885913",
-      "28604": "iso885914",
-      "28605": "iso885915",
-      "28606": "iso885916",
-      "windows874": {
-        "type": "_sbcs",
-        "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
-      },
-      "win874": "windows874",
-      "cp874": "windows874",
-      "windows1250": {
-        "type": "_sbcs",
-        "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
-      },
-      "win1250": "windows1250",
-      "cp1250": "windows1250",
-      "windows1251": {
-        "type": "_sbcs",
-        "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
-      },
-      "win1251": "windows1251",
-      "cp1251": "windows1251",
-      "windows1252": {
-        "type": "_sbcs",
-        "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
-      },
-      "win1252": "windows1252",
-      "cp1252": "windows1252",
-      "windows1253": {
-        "type": "_sbcs",
-        "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
-      },
-      "win1253": "windows1253",
-      "cp1253": "windows1253",
-      "windows1254": {
-        "type": "_sbcs",
-        "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
-      },
-      "win1254": "windows1254",
-      "cp1254": "windows1254",
-      "windows1255": {
-        "type": "_sbcs",
-        "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
-      },
-      "win1255": "windows1255",
-      "cp1255": "windows1255",
-      "windows1256": {
-        "type": "_sbcs",
-        "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"
-      },
-      "win1256": "windows1256",
-      "cp1256": "windows1256",
-      "windows1257": {
-        "type": "_sbcs",
-        "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"
-      },
-      "win1257": "windows1257",
-      "cp1257": "windows1257",
-      "windows1258": {
-        "type": "_sbcs",
-        "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
-      },
-      "win1258": "windows1258",
-      "cp1258": "windows1258",
-      "iso88591": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
-      },
-      "cp28591": "iso88591",
-      "iso88592": {
-        "type": "_sbcs",
-        "chars": "
- Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
-      },
-      "cp28592": "iso88592",
-      "iso88593": {
-        "type": "_sbcs",
-        "chars": "
- Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"
-      },
-      "cp28593": "iso88593",
-      "iso88594": {
-        "type": "_sbcs",
-        "chars": "
- ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"
-      },
-      "cp28594": "iso88594",
-      "iso88595": {
-        "type": "_sbcs",
-        "chars": "
- ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"
-      },
-      "cp28595": "iso88595",
-      "iso88596": {
-        "type": "_sbcs",
-        "chars": "
- ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"
-      },
-      "cp28596": "iso88596",
-      "iso88597": {
-        "type": "_sbcs",
-        "chars": "
- ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
-      },
-      "cp28597": "iso88597",
-      "iso88598": {
-        "type": "_sbcs",
-        "chars": "
- �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
-      },
-      "cp28598": "iso88598",
-      "iso88599": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
-      },
-      "cp28599": "iso88599",
-      "iso885910": {
-        "type": "_sbcs",
-        "chars": "
- ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"
-      },
-      "cp28600": "iso885910",
-      "iso885911": {
-        "type": "_sbcs",
-        "chars": "
- กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
-      },
-      "cp28601": "iso885911",
-      "iso885913": {
-        "type": "_sbcs",
-        "chars": "
- ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"
-      },
-      "cp28603": "iso885913",
-      "iso885914": {
-        "type": "_sbcs",
-        "chars": "
- Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ"
-      },
-      "cp28604": "iso885914",
-      "iso885915": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
-      },
-      "cp28605": "iso885915",
-      "iso885916": {
-        "type": "_sbcs",
-        "chars": "
- ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"
-      },
-      "cp28606": "iso885916",
-      "cp437": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm437": "cp437",
-      "csibm437": "cp437",
-      "cp737": {
-        "type": "_sbcs",
-        "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ "
-      },
-      "ibm737": "cp737",
-      "csibm737": "cp737",
-      "cp775": {
-        "type": "_sbcs",
-        "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ "
-      },
-      "ibm775": "cp775",
-      "csibm775": "cp775",
-      "cp850": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ "
-      },
-      "ibm850": "cp850",
-      "csibm850": "cp850",
-      "cp852": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ "
-      },
-      "ibm852": "cp852",
-      "csibm852": "cp852",
-      "cp855": {
-        "type": "_sbcs",
-        "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ "
-      },
-      "ibm855": "cp855",
-      "csibm855": "cp855",
-      "cp856": {
-        "type": "_sbcs",
-        "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ "
-      },
-      "ibm856": "cp856",
-      "csibm856": "cp856",
-      "cp857": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ "
-      },
-      "ibm857": "cp857",
-      "csibm857": "cp857",
-      "cp858": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ "
-      },
-      "ibm858": "cp858",
-      "csibm858": "cp858",
-      "cp860": {
-        "type": "_sbcs",
-        "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm860": "cp860",
-      "csibm860": "cp860",
-      "cp861": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm861": "cp861",
-      "csibm861": "cp861",
-      "cp862": {
-        "type": "_sbcs",
-        "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm862": "cp862",
-      "csibm862": "cp862",
-      "cp863": {
-        "type": "_sbcs",
-        "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm863": "cp863",
-      "csibm863": "cp863",
-      "cp864": {
-        "type": "_sbcs",
-        "chars": "\0\x07\b	\n\v\f\r\x1B
-
-
- !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"
-      },
-      "ibm864": "cp864",
-      "csibm864": "cp864",
-      "cp865": {
-        "type": "_sbcs",
-        "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
-      },
-      "ibm865": "cp865",
-      "csibm865": "cp865",
-      "cp866": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "
-      },
-      "ibm866": "cp866",
-      "csibm866": "cp866",
-      "cp869": {
-        "type": "_sbcs",
-        "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ "
-      },
-      "ibm869": "cp869",
-      "csibm869": "cp869",
-      "cp922": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ"
-      },
-      "ibm922": "cp922",
-      "csibm922": "cp922",
-      "cp1046": {
-        "type": "_sbcs",
-        "chars": "ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"
-      },
-      "ibm1046": "cp1046",
-      "csibm1046": "cp1046",
-      "cp1124": {
-        "type": "_sbcs",
-        "chars": "
- ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"
-      },
-      "ibm1124": "cp1124",
-      "csibm1124": "cp1124",
-      "cp1125": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ "
-      },
-      "ibm1125": "cp1125",
-      "csibm1125": "cp1125",
-      "cp1129": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
-      },
-      "ibm1129": "cp1129",
-      "csibm1129": "cp1129",
-      "cp1133": {
-        "type": "_sbcs",
-        "chars": "
- ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"
-      },
-      "ibm1133": "cp1133",
-      "csibm1133": "cp1133",
-      "cp1161": {
-        "type": "_sbcs",
-        "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ "
-      },
-      "ibm1161": "cp1161",
-      "csibm1161": "cp1161",
-      "cp1162": {
-        "type": "_sbcs",
-        "chars": "€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
-      },
-      "ibm1162": "cp1162",
-      "csibm1162": "cp1162",
-      "cp1163": {
-        "type": "_sbcs",
-        "chars": "
- ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
-      },
-      "ibm1163": "cp1163",
-      "csibm1163": "cp1163",
-      "maccroatian": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"
-      },
-      "maccyrillic": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
-      },
-      "macgreek": {
-        "type": "_sbcs",
-        "chars": "Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"
-      },
-      "maciceland": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
-      },
-      "macroman": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
-      },
-      "macromania": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
-      },
-      "macthai": {
-        "type": "_sbcs",
-        "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"
-      },
-      "macturkish": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"
-      },
-      "macukraine": {
-        "type": "_sbcs",
-        "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
-      },
-      "koi8r": {
-        "type": "_sbcs",
-        "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
-      },
-      "koi8u": {
-        "type": "_sbcs",
-        "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
-      },
-      "koi8ru": {
-        "type": "_sbcs",
-        "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
-      },
-      "koi8t": {
-        "type": "_sbcs",
-        "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
-      },
-      "armscii8": {
-        "type": "_sbcs",
-        "chars": "
- �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"
-      },
-      "rk1048": {
-        "type": "_sbcs",
-        "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
-      },
-      "tcvn": {
-        "type": "_sbcs",
-        "chars": "\0ÚỤỪỬỮ\x07\b	\n\v\f\rỨỰỲỶỸÝỴ\x1B
-
-
- !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"
-      },
-      "georgianacademy": {
-        "type": "_sbcs",
-        "chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
-      },
-      "georgianps": {
-        "type": "_sbcs",
-        "chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
-      },
-      "pt154": {
-        "type": "_sbcs",
-        "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
-      },
-      "viscii": {
-        "type": "_sbcs",
-        "chars": "\0ẲẴẪ\x07\b	\n\v\f\rỶỸ\x1B
-
-Ỵ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"
-      },
-      "iso646cn": {
-        "type": "_sbcs",
-        "chars": "\0\x07\b	\n\v\f\r\x1B
-
-
- !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"
-      },
-      "iso646jp": {
-        "type": "_sbcs",
-        "chars": "\0\x07\b	\n\v\f\r\x1B
-
-
- !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"
-      },
-      "hproman8": {
-        "type": "_sbcs",
-        "chars": "
- ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"
-      },
-      "macintosh": {
-        "type": "_sbcs",
-        "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
-      },
-      "ascii": {
-        "type": "_sbcs",
-        "chars": "��������������������������������������������������������������������������������������������������������������������������������"
-      },
-      "tis620": {
-        "type": "_sbcs",
-        "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
-      }
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/dbcs-codec.js
-var require_dbcs_codec = __commonJS({
-  "node_modules/iconv-lite/encodings/dbcs-codec.js"(exports) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    exports._dbcs = DBCSCodec;
-    var UNASSIGNED = -1;
-    var GB18030_CODE = -2;
-    var SEQ_START = -10;
-    var NODE_START = -1e3;
-    var UNASSIGNED_NODE = new Array(256);
-    var DEF_CHAR = -1;
-    for (i = 0; i < 256; i++) UNASSIGNED_NODE[i] = UNASSIGNED;
-    var i;
-    function DBCSCodec(codecOptions, iconv) {
-      this.encodingName = codecOptions.encodingName;
-      if (!codecOptions) throw new Error("DBCS codec is called without the data.");
-      if (!codecOptions.table) throw new Error("Encoding '" + this.encodingName + "' has no data.");
-      var mappingTable = codecOptions.table();
-      this.decodeTables = [];
-      this.decodeTables[0] = UNASSIGNED_NODE.slice(0);
-      this.decodeTableSeq = [];
-      for (var i2 = 0; i2 < mappingTable.length; i2++) this._addDecodeChunk(mappingTable[i2]);
-      this.defaultCharUnicode = iconv.defaultCharUnicode;
-      this.encodeTable = [];
-      this.encodeTableSeq = [];
-      var skipEncodeChars = {};
-      if (codecOptions.encodeSkipVals) for (var i2 = 0; i2 < codecOptions.encodeSkipVals.length; i2++) {
-        var val = codecOptions.encodeSkipVals[i2];
-        if (typeof val === "number") skipEncodeChars[val] = true;
-        else for (var j = val.from; j <= val.to; j++) skipEncodeChars[j] = true;
-      }
-      this._fillEncodeTable(0, 0, skipEncodeChars);
-      if (codecOptions.encodeAdd) {
-        for (var uChar in codecOptions.encodeAdd) if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
-      }
-      this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];
-      if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"];
-      if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
-      if (typeof codecOptions.gb18030 === "function") {
-        this.gb18030 = codecOptions.gb18030();
-        var thirdByteNodeIdx = this.decodeTables.length;
-        var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);
-        var fourthByteNodeIdx = this.decodeTables.length;
-        var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);
-        for (var i2 = 129; i2 <= 254; i2++) {
-          var secondByteNodeIdx = NODE_START - this.decodeTables[0][i2];
-          var secondByteNode = this.decodeTables[secondByteNodeIdx];
-          for (var j = 48; j <= 57; j++) secondByteNode[j] = NODE_START - thirdByteNodeIdx;
-        }
-        for (var i2 = 129; i2 <= 254; i2++) thirdByteNode[i2] = NODE_START - fourthByteNodeIdx;
-        for (var i2 = 48; i2 <= 57; i2++) fourthByteNode[i2] = GB18030_CODE;
-      }
-    }
-    DBCSCodec.prototype.encoder = DBCSEncoder;
-    DBCSCodec.prototype.decoder = DBCSDecoder;
-    DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
-      var bytes = [];
-      for (; addr > 0; addr >>= 8) bytes.push(addr & 255);
-      if (bytes.length == 0) bytes.push(0);
-      var node = this.decodeTables[0];
-      for (var i2 = bytes.length - 1; i2 > 0; i2--) {
-        var val = node[bytes[i2]];
-        if (val == UNASSIGNED) {
-          node[bytes[i2]] = NODE_START - this.decodeTables.length;
-          this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
-        } else if (val <= NODE_START) {
-          node = this.decodeTables[NODE_START - val];
-        } else throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
-      }
-      return node;
-    };
-    DBCSCodec.prototype._addDecodeChunk = function(chunk) {
-      var curAddr = parseInt(chunk[0], 16);
-      var writeTable = this._getDecodeTrieNode(curAddr);
-      curAddr = curAddr & 255;
-      for (var k = 1; k < chunk.length; k++) {
-        var part = chunk[k];
-        if (typeof part === "string") {
-          for (var l = 0; l < part.length; ) {
-            var code = part.charCodeAt(l++);
-            if (55296 <= code && code < 56320) {
-              var codeTrail = part.charCodeAt(l++);
-              if (56320 <= codeTrail && codeTrail < 57344) writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320);
-              else throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]);
-            } else if (4080 < code && code <= 4095) {
-              var len = 4095 - code + 2;
-              var seq = [];
-              for (var m = 0; m < len; m++) seq.push(part.charCodeAt(l++));
-              writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
-              this.decodeTableSeq.push(seq);
-            } else writeTable[curAddr++] = code;
-          }
-        } else if (typeof part === "number") {
-          var charCode = writeTable[curAddr - 1] + 1;
-          for (var l = 0; l < part; l++) writeTable[curAddr++] = charCode++;
-        } else throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]);
-      }
-      if (curAddr > 255) throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
-    };
-    DBCSCodec.prototype._getEncodeBucket = function(uCode) {
-      var high = uCode >> 8;
-      if (this.encodeTable[high] === void 0) this.encodeTable[high] = UNASSIGNED_NODE.slice(0);
-      return this.encodeTable[high];
-    };
-    DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
-      var bucket = this._getEncodeBucket(uCode);
-      var low = uCode & 255;
-      if (bucket[low] <= SEQ_START) this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode;
-      else if (bucket[low] == UNASSIGNED) bucket[low] = dbcsCode;
-    };
-    DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
-      var uCode = seq[0];
-      var bucket = this._getEncodeBucket(uCode);
-      var low = uCode & 255;
-      var node;
-      if (bucket[low] <= SEQ_START) {
-        node = this.encodeTableSeq[SEQ_START - bucket[low]];
-      } else {
-        node = {};
-        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low];
-        bucket[low] = SEQ_START - this.encodeTableSeq.length;
-        this.encodeTableSeq.push(node);
-      }
-      for (var j = 1; j < seq.length - 1; j++) {
-        var oldVal = node[uCode];
-        if (typeof oldVal === "object") node = oldVal;
-        else {
-          node = node[uCode] = {};
-          if (oldVal !== void 0) node[DEF_CHAR] = oldVal;
-        }
-      }
-      uCode = seq[seq.length - 1];
-      node[uCode] = dbcsCode;
-    };
-    DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
-      var node = this.decodeTables[nodeIdx];
-      for (var i2 = 0; i2 < 256; i2++) {
-        var uCode = node[i2];
-        var mbCode = prefix + i2;
-        if (skipEncodeChars[mbCode]) continue;
-        if (uCode >= 0) this._setEncodeChar(uCode, mbCode);
-        else if (uCode <= NODE_START) this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);
-        else if (uCode <= SEQ_START) this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
-      }
-    };
-    function DBCSEncoder(options, codec) {
-      this.leadSurrogate = -1;
-      this.seqObj = void 0;
-      this.encodeTable = codec.encodeTable;
-      this.encodeTableSeq = codec.encodeTableSeq;
-      this.defaultCharSingleByte = codec.defCharSB;
-      this.gb18030 = codec.gb18030;
-    }
-    DBCSEncoder.prototype.write = function(str) {
-      var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0;
-      while (true) {
-        if (nextChar === -1) {
-          if (i2 == str.length) break;
-          var uCode = str.charCodeAt(i2++);
-        } else {
-          var uCode = nextChar;
-          nextChar = -1;
-        }
-        if (55296 <= uCode && uCode < 57344) {
-          if (uCode < 56320) {
-            if (leadSurrogate === -1) {
-              leadSurrogate = uCode;
-              continue;
-            } else {
-              leadSurrogate = uCode;
-              uCode = UNASSIGNED;
-            }
-          } else {
-            if (leadSurrogate !== -1) {
-              uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320);
-              leadSurrogate = -1;
-            } else {
-              uCode = UNASSIGNED;
-            }
-          }
-        } else if (leadSurrogate !== -1) {
-          nextChar = uCode;
-          uCode = UNASSIGNED;
-          leadSurrogate = -1;
-        }
-        var dbcsCode = UNASSIGNED;
-        if (seqObj !== void 0 && uCode != UNASSIGNED) {
-          var resCode = seqObj[uCode];
-          if (typeof resCode === "object") {
-            seqObj = resCode;
-            continue;
-          } else if (typeof resCode == "number") {
-            dbcsCode = resCode;
-          } else if (resCode == void 0) {
-            resCode = seqObj[DEF_CHAR];
-            if (resCode !== void 0) {
-              dbcsCode = resCode;
-              nextChar = uCode;
-            } else {
-            }
-          }
-          seqObj = void 0;
-        } else if (uCode >= 0) {
-          var subtable = this.encodeTable[uCode >> 8];
-          if (subtable !== void 0) dbcsCode = subtable[uCode & 255];
-          if (dbcsCode <= SEQ_START) {
-            seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];
-            continue;
-          }
-          if (dbcsCode == UNASSIGNED && this.gb18030) {
-            var idx = findIdx(this.gb18030.uChars, uCode);
-            if (idx != -1) {
-              var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
-              newBuf[j++] = 129 + Math.floor(dbcsCode / 12600);
-              dbcsCode = dbcsCode % 12600;
-              newBuf[j++] = 48 + Math.floor(dbcsCode / 1260);
-              dbcsCode = dbcsCode % 1260;
-              newBuf[j++] = 129 + Math.floor(dbcsCode / 10);
-              dbcsCode = dbcsCode % 10;
-              newBuf[j++] = 48 + dbcsCode;
-              continue;
-            }
-          }
-        }
-        if (dbcsCode === UNASSIGNED) dbcsCode = this.defaultCharSingleByte;
-        if (dbcsCode < 256) {
-          newBuf[j++] = dbcsCode;
-        } else if (dbcsCode < 65536) {
-          newBuf[j++] = dbcsCode >> 8;
-          newBuf[j++] = dbcsCode & 255;
-        } else {
-          newBuf[j++] = dbcsCode >> 16;
-          newBuf[j++] = dbcsCode >> 8 & 255;
-          newBuf[j++] = dbcsCode & 255;
-        }
-      }
-      this.seqObj = seqObj;
-      this.leadSurrogate = leadSurrogate;
-      return newBuf.slice(0, j);
-    };
-    DBCSEncoder.prototype.end = function() {
-      if (this.leadSurrogate === -1 && this.seqObj === void 0) return;
-      var newBuf = Buffer2.alloc(10), j = 0;
-      if (this.seqObj) {
-        var dbcsCode = this.seqObj[DEF_CHAR];
-        if (dbcsCode !== void 0) {
-          if (dbcsCode < 256) {
-            newBuf[j++] = dbcsCode;
-          } else {
-            newBuf[j++] = dbcsCode >> 8;
-            newBuf[j++] = dbcsCode & 255;
-          }
-        } else {
-        }
-        this.seqObj = void 0;
-      }
-      if (this.leadSurrogate !== -1) {
-        newBuf[j++] = this.defaultCharSingleByte;
-        this.leadSurrogate = -1;
-      }
-      return newBuf.slice(0, j);
-    };
-    DBCSEncoder.prototype.findIdx = findIdx;
-    function DBCSDecoder(options, codec) {
-      this.nodeIdx = 0;
-      this.prevBuf = Buffer2.alloc(0);
-      this.decodeTables = codec.decodeTables;
-      this.decodeTableSeq = codec.decodeTableSeq;
-      this.defaultCharUnicode = codec.defaultCharUnicode;
-      this.gb18030 = codec.gb18030;
-    }
-    DBCSDecoder.prototype.write = function(buf) {
-      var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, seqStart = -this.prevBuf.length, uCode;
-      if (prevBufOffset > 0)
-        prevBuf = Buffer2.concat([prevBuf, buf.slice(0, 10)]);
-      for (var i2 = 0, j = 0; i2 < buf.length; i2++) {
-        var curByte = i2 >= 0 ? buf[i2] : prevBuf[i2 + prevBufOffset];
-        var uCode = this.decodeTables[nodeIdx][curByte];
-        if (uCode >= 0) {
-        } else if (uCode === UNASSIGNED) {
-          i2 = seqStart;
-          uCode = this.defaultCharUnicode.charCodeAt(0);
-        } else if (uCode === GB18030_CODE) {
-          var curSeq = seqStart >= 0 ? buf.slice(seqStart, i2 + 1) : prevBuf.slice(seqStart + prevBufOffset, i2 + 1 + prevBufOffset);
-          var ptr = (curSeq[0] - 129) * 12600 + (curSeq[1] - 48) * 1260 + (curSeq[2] - 129) * 10 + (curSeq[3] - 48);
-          var idx = findIdx(this.gb18030.gbChars, ptr);
-          uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
-        } else if (uCode <= NODE_START) {
-          nodeIdx = NODE_START - uCode;
-          continue;
-        } else if (uCode <= SEQ_START) {
-          var seq = this.decodeTableSeq[SEQ_START - uCode];
-          for (var k = 0; k < seq.length - 1; k++) {
-            uCode = seq[k];
-            newBuf[j++] = uCode & 255;
-            newBuf[j++] = uCode >> 8;
-          }
-          uCode = seq[seq.length - 1];
-        } else throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
-        if (uCode > 65535) {
-          uCode -= 65536;
-          var uCodeLead = 55296 + Math.floor(uCode / 1024);
-          newBuf[j++] = uCodeLead & 255;
-          newBuf[j++] = uCodeLead >> 8;
-          uCode = 56320 + uCode % 1024;
-        }
-        newBuf[j++] = uCode & 255;
-        newBuf[j++] = uCode >> 8;
-        nodeIdx = 0;
-        seqStart = i2 + 1;
-      }
-      this.nodeIdx = nodeIdx;
-      this.prevBuf = seqStart >= 0 ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);
-      return newBuf.slice(0, j).toString("ucs2");
-    };
-    DBCSDecoder.prototype.end = function() {
-      var ret = "";
-      while (this.prevBuf.length > 0) {
-        ret += this.defaultCharUnicode;
-        var buf = this.prevBuf.slice(1);
-        this.prevBuf = Buffer2.alloc(0);
-        this.nodeIdx = 0;
-        if (buf.length > 0) ret += this.write(buf);
-      }
-      this.nodeIdx = 0;
-      return ret;
-    };
-    function findIdx(table, val) {
-      if (table[0] > val) return -1;
-      var l = 0, r = table.length;
-      while (l < r - 1) {
-        var mid = l + Math.floor((r - l + 1) / 2);
-        if (table[mid] <= val) l = mid;
-        else r = mid;
-      }
-      return l;
-    }
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/shiftjis.json
-var require_shiftjis = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports, module) {
-    module.exports = [
-      ["0", "\0", 128],
-      ["a1", "｡", 62],
-      ["8140", "　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈", 9, "＋－±×"],
-      ["8180", "÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],
-      ["81b8", "∈∋⊆⊇⊂⊃∪∩"],
-      ["81c8", "∧∨￢⇒⇔∀∃"],
-      ["81da", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],
-      ["81f0", "Å‰♯♭♪†‡¶"],
-      ["81fc", "◯"],
-      ["824f", "０", 9],
-      ["8260", "Ａ", 25],
-      ["8281", "ａ", 25],
-      ["829f", "ぁ", 82],
-      ["8340", "ァ", 62],
-      ["8380", "ム", 22],
-      ["839f", "Α", 16, "Σ", 6],
-      ["83bf", "α", 16, "σ", 6],
-      ["8440", "А", 5, "ЁЖ", 25],
-      ["8470", "а", 5, "ёж", 7],
-      ["8480", "о", 17],
-      ["849f", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],
-      ["8740", "①", 19, "Ⅰ", 9],
-      ["875f", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],
-      ["877e", "㍻"],
-      ["8780", "〝〟№㏍℡㊤", 4, "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],
-      ["889f", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],
-      ["8940", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],
-      ["8980", "園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],
-      ["8a40", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],
-      ["8a80", "橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],
-      ["8b40", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],
-      ["8b80", "朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],
-      ["8c40", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],
-      ["8c80", "劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],
-      ["8d40", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],
-      ["8d80", "項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],
-      ["8e40", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],
-      ["8e80", "死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],
-      ["8f40", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],
-      ["8f80", "準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],
-      ["9040", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],
-      ["9080", "逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],
-      ["9140", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],
-      ["9180", "操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],
-      ["9240", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],
-      ["9280", "逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],
-      ["9340", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],
-      ["9380", "凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],
-      ["9440", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],
-      ["9480", "楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],
-      ["9540", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],
-      ["9580", "斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],
-      ["9640", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],
-      ["9680", "摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],
-      ["9740", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],
-      ["9780", "沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],
-      ["9840", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],
-      ["989f", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],
-      ["9940", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],
-      ["9980", "凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],
-      ["9a40", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],
-      ["9a80", "噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],
-      ["9b40", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],
-      ["9b80", "它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],
-      ["9c40", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],
-      ["9c80", "怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],
-      ["9d40", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],
-      ["9d80", "捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],
-      ["9e40", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],
-      ["9e80", "梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],
-      ["9f40", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],
-      ["9f80", "麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],
-      ["e040", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],
-      ["e080", "烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],
-      ["e140", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],
-      ["e180", "痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],
-      ["e240", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],
-      ["e280", "窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],
-      ["e340", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],
-      ["e380", "縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],
-      ["e440", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],
-      ["e480", "艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],
-      ["e540", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],
-      ["e580", "蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],
-      ["e640", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],
-      ["e680", "諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],
-      ["e740", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],
-      ["e780", "轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],
-      ["e840", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],
-      ["e880", "閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],
-      ["e940", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],
-      ["e980", "騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],
-      ["ea40", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],
-      ["ea80", "黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],
-      ["ed40", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],
-      ["ed80", "塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],
-      ["ee40", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],
-      ["ee80", "蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],
-      ["eeef", "ⅰ", 9, "￢￤＇＂"],
-      ["f040", "", 62],
-      ["f080", "", 124],
-      ["f140", "", 62],
-      ["f180", "", 124],
-      ["f240", "", 62],
-      ["f280", "", 124],
-      ["f340", "", 62],
-      ["f380", "", 124],
-      ["f440", "", 62],
-      ["f480", "", 124],
-      ["f540", "", 62],
-      ["f580", "", 124],
-      ["f640", "", 62],
-      ["f680", "", 124],
-      ["f740", "", 62],
-      ["f780", "", 124],
-      ["f840", "", 62],
-      ["f880", "", 124],
-      ["f940", ""],
-      ["fa40", "ⅰ", 9, "Ⅰ", 9, "￢￤＇＂㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],
-      ["fa80", "兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],
-      ["fb40", "涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],
-      ["fb80", "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],
-      ["fc40", "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/eucjp.json
-var require_eucjp = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/eucjp.json"(exports, module) {
-    module.exports = [
-      ["0", "\0", 127],
-      ["8ea1", "｡", 62],
-      ["a1a1", "　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈", 9, "＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇"],
-      ["a2a1", "◆□■△▲▽▼※〒→←↑↓〓"],
-      ["a2ba", "∈∋⊆⊇⊂⊃∪∩"],
-      ["a2ca", "∧∨￢⇒⇔∀∃"],
-      ["a2dc", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],
-      ["a2f2", "Å‰♯♭♪†‡¶"],
-      ["a2fe", "◯"],
-      ["a3b0", "０", 9],
-      ["a3c1", "Ａ", 25],
-      ["a3e1", "ａ", 25],
-      ["a4a1", "ぁ", 82],
-      ["a5a1", "ァ", 85],
-      ["a6a1", "Α", 16, "Σ", 6],
-      ["a6c1", "α", 16, "σ", 6],
-      ["a7a1", "А", 5, "ЁЖ", 25],
-      ["a7d1", "а", 5, "ёж", 25],
-      ["a8a1", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],
-      ["ada1", "①", 19, "Ⅰ", 9],
-      ["adc0", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],
-      ["addf", "㍻〝〟№㏍℡㊤", 4, "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],
-      ["b0a1", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],
-      ["b1a1", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],
-      ["b2a1", "押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],
-      ["b3a1", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],
-      ["b4a1", "粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],
-      ["b5a1", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],
-      ["b6a1", "供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],
-      ["b7a1", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],
-      ["b8a1", "検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],
-      ["b9a1", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],
-      ["baa1", "此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],
-      ["bba1", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],
-      ["bca1", "次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],
-      ["bda1", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],
-      ["bea1", "勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],
-      ["bfa1", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],
-      ["c0a1", "澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],
-      ["c1a1", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],
-      ["c2a1", "臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],
-      ["c3a1", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],
-      ["c4a1", "帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],
-      ["c5a1", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],
-      ["c6a1", "董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],
-      ["c7a1", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],
-      ["c8a1", "函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],
-      ["c9a1", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],
-      ["caa1", "福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],
-      ["cba1", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],
-      ["cca1", "漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],
-      ["cda1", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],
-      ["cea1", "痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],
-      ["cfa1", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],
-      ["d0a1", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],
-      ["d1a1", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],
-      ["d2a1", "辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],
-      ["d3a1", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],
-      ["d4a1", "圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],
-      ["d5a1", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],
-      ["d6a1", "屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],
-      ["d7a1", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],
-      ["d8a1", "悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],
-      ["d9a1", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],
-      ["daa1", "據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],
-      ["dba1", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],
-      ["dca1", "棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],
-      ["dda1", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],
-      ["dea1", "沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],
-      ["dfa1", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],
-      ["e0a1", "燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],
-      ["e1a1", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],
-      ["e2a1", "癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],
-      ["e3a1", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],
-      ["e4a1", "筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],
-      ["e5a1", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],
-      ["e6a1", "罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],
-      ["e7a1", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],
-      ["e8a1", "茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],
-      ["e9a1", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],
-      ["eaa1", "蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],
-      ["eba1", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],
-      ["eca1", "譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],
-      ["eda1", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],
-      ["eea1", "遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],
-      ["efa1", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],
-      ["f0a1", "陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],
-      ["f1a1", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],
-      ["f2a1", "髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],
-      ["f3a1", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],
-      ["f4a1", "堯槇遙瑤凜熙"],
-      ["f9a1", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],
-      ["faa1", "忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],
-      ["fba1", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],
-      ["fca1", "釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],
-      ["fcf1", "ⅰ", 9, "￢￤＇＂"],
-      ["8fa2af", "˘ˇ¸˙˝¯˛˚～΄΅"],
-      ["8fa2c2", "¡¦¿"],
-      ["8fa2eb", "ºª©®™¤№"],
-      ["8fa6e1", "ΆΈΉΊΪ"],
-      ["8fa6e7", "Ό"],
-      ["8fa6e9", "ΎΫ"],
-      ["8fa6ec", "Ώ"],
-      ["8fa6f1", "άέήίϊΐόςύϋΰώ"],
-      ["8fa7c2", "Ђ", 10, "ЎЏ"],
-      ["8fa7f2", "ђ", 10, "ўџ"],
-      ["8fa9a1", "ÆĐ"],
-      ["8fa9a4", "Ħ"],
-      ["8fa9a6", "Ĳ"],
-      ["8fa9a8", "ŁĿ"],
-      ["8fa9ab", "ŊØŒ"],
-      ["8fa9af", "ŦÞ"],
-      ["8fa9c1", "æđðħıĳĸłŀŉŋøœßŧþ"],
-      ["8faaa1", "ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],
-      ["8faaba", "ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],
-      ["8faba1", "áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],
-      ["8fabbd", "ġĥíìïîǐ"],
-      ["8fabc5", "īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],
-      ["8fb0a1", "丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],
-      ["8fb1a1", "侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],
-      ["8fb2a1", "傒傓傔傖傛傜傞", 4, "傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],
-      ["8fb3a1", "凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],
-      ["8fb4a1", "匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],
-      ["8fb5a1", "咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],
-      ["8fb6a1", "嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍", 5, "嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤", 4, "囱囫园"],
-      ["8fb7a1", "囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭", 4, "坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],
-      ["8fb8a1", "堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],
-      ["8fb9a1", "奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],
-      ["8fbaa1", "嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖", 4, "寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],
-      ["8fbba1", "屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],
-      ["8fbca1", "巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪", 4, "幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],
-      ["8fbda1", "彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐", 4, "忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],
-      ["8fbea1", "悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐", 4, "愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],
-      ["8fbfa1", "懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],
-      ["8fc0a1", "捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],
-      ["8fc1a1", "擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],
-      ["8fc2a1", "昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],
-      ["8fc3a1", "杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮", 4, "桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],
-      ["8fc4a1", "棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],
-      ["8fc5a1", "樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],
-      ["8fc6a1", "歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],
-      ["8fc7a1", "泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],
-      ["8fc8a1", "湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],
-      ["8fc9a1", "濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔", 4, "炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃", 4, "焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],
-      ["8fcaa1", "煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],
-      ["8fcba1", "狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],
-      ["8fcca1", "珿琀琁琄琇琊琑琚琛琤琦琨", 9, "琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],
-      ["8fcda1", "甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹", 5, "疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],
-      ["8fcea1", "瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢", 6, "皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],
-      ["8fcfa1", "睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],
-      ["8fd0a1", "碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],
-      ["8fd1a1", "秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],
-      ["8fd2a1", "笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙", 5],
-      ["8fd3a1", "籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],
-      ["8fd4a1", "綞綦綧綪綳綶綷綹緂", 4, "緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],
-      ["8fd5a1", "罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],
-      ["8fd6a1", "胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],
-      ["8fd7a1", "艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],
-      ["8fd8a1", "荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],
-      ["8fd9a1", "蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏", 4, "蕖蕙蕜", 6, "蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],
-      ["8fdaa1", "藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠", 4, "虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],
-      ["8fdba1", "蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃", 6, "螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],
-      ["8fdca1", "蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊", 4, "裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],
-      ["8fdda1", "襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔", 4, "觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],
-      ["8fdea1", "誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂", 4, "譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],
-      ["8fdfa1", "貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],
-      ["8fe0a1", "踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],
-      ["8fe1a1", "轃轇轏轑", 4, "轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],
-      ["8fe2a1", "郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],
-      ["8fe3a1", "釂釃釅釓釔釗釙釚釞釤釥釩釪釬", 5, "釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵", 4, "鉻鉼鉽鉿銈銉銊銍銎銒銗"],
-      ["8fe4a1", "銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿", 4, "鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],
-      ["8fe5a1", "鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉", 4, "鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],
-      ["8fe6a1", "镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],
-      ["8fe7a1", "霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],
-      ["8fe8a1", "頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱", 4, "餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],
-      ["8fe9a1", "馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿", 4],
-      ["8feaa1", "鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪", 4, "魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],
-      ["8feba1", "鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦", 4, "鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],
-      ["8feca1", "鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],
-      ["8feda1", "黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃", 4, "齓齕齖齗齘齚齝齞齨齩齭", 4, "齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/cp936.json
-var require_cp936 = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/cp936.json"(exports, module) {
-    module.exports = [
-      ["0", "\0", 127, "€"],
-      ["8140", "丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪", 5, "乲乴", 9, "乿", 6, "亇亊"],
-      ["8180", "亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂", 6, "伋伌伒", 4, "伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾", 4, "佄佅佇", 5, "佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],
-      ["8240", "侤侫侭侰", 4, "侶", 8, "俀俁係俆俇俈俉俋俌俍俒", 4, "俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿", 11],
-      ["8280", "個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯", 10, "倻倽倿偀偁偂偄偅偆偉偊偋偍偐", 4, "偖偗偘偙偛偝", 7, "偦", 5, "偭", 8, "偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎", 20, "傤傦傪傫傭", 4, "傳", 6, "傼"],
-      ["8340", "傽", 17, "僐", 5, "僗僘僙僛", 10, "僨僩僪僫僯僰僱僲僴僶", 4, "僼", 9, "儈"],
-      ["8380", "儉儊儌", 5, "儓", 13, "儢", 28, "兂兇兊兌兎兏児兒兓兗兘兙兛兝", 4, "兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦", 4, "冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒", 5],
-      ["8440", "凘凙凚凜凞凟凢凣凥", 5, "凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄", 5, "剋剎剏剒剓剕剗剘"],
-      ["8480", "剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳", 9, "剾劀劃", 4, "劉", 6, "劑劒劔", 6, "劜劤劥劦劧劮劯劰労", 9, "勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務", 5, "勠勡勢勣勥", 10, "勱", 7, "勻勼勽匁匂匃匄匇匉匊匋匌匎"],
-      ["8540", "匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯", 9, "匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],
-      ["8580", "厐", 4, "厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯", 6, "厷厸厹厺厼厽厾叀參", 4, "収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝", 4, "呣呥呧呩", 7, "呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],
-      ["8640", "咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠", 4, "哫哬哯哰哱哴", 5, "哻哾唀唂唃唄唅唈唊", 4, "唒唓唕", 5, "唜唝唞唟唡唥唦"],
-      ["8680", "唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋", 4, "啑啒啓啔啗", 4, "啝啞啟啠啢啣啨啩啫啯", 5, "啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠", 6, "喨", 8, "喲喴営喸喺喼喿", 4, "嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗", 4, "嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸", 4, "嗿嘂嘃嘄嘅"],
-      ["8740", "嘆嘇嘊嘋嘍嘐", 7, "嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀", 11, "噏", 4, "噕噖噚噛噝", 4],
-      ["8780", "噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽", 7, "嚇", 6, "嚐嚑嚒嚔", 14, "嚤", 10, "嚰", 6, "嚸嚹嚺嚻嚽", 12, "囋", 8, "囕囖囘囙囜団囥", 5, "囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國", 6],
-      ["8840", "園", 9, "圝圞圠圡圢圤圥圦圧圫圱圲圴", 4, "圼圽圿坁坃坄坅坆坈坉坋坒", 4, "坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],
-      ["8880", "垁垇垈垉垊垍", 4, "垔", 6, "垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹", 8, "埄", 6, "埌埍埐埑埓埖埗埛埜埞埡埢埣埥", 7, "埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥", 4, "堫", 4, "報堲堳場堶", 7],
-      ["8940", "堾", 5, "塅", 6, "塎塏塐塒塓塕塖塗塙", 4, "塟", 5, "塦", 4, "塭", 16, "塿墂墄墆墇墈墊墋墌"],
-      ["8980", "墍", 4, "墔", 4, "墛墜墝墠", 7, "墪", 17, "墽墾墿壀壂壃壄壆", 10, "壒壓壔壖", 13, "壥", 5, "壭壯壱売壴壵壷壸壺", 7, "夃夅夆夈", 4, "夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],
-      ["8a40", "夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛", 4, "奡奣奤奦", 12, "奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],
-      ["8a80", "妧妬妭妰妱妳", 5, "妺妼妽妿", 6, "姇姈姉姌姍姎姏姕姖姙姛姞", 4, "姤姦姧姩姪姫姭", 11, "姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪", 6, "娳娵娷", 4, "娽娾娿婁", 4, "婇婈婋", 9, "婖婗婘婙婛", 5],
-      ["8b40", "婡婣婤婥婦婨婩婫", 8, "婸婹婻婼婽婾媀", 17, "媓", 6, "媜", 13, "媫媬"],
-      ["8b80", "媭", 4, "媴媶媷媹", 4, "媿嫀嫃", 5, "嫊嫋嫍", 4, "嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬", 4, "嫲", 22, "嬊", 11, "嬘", 25, "嬳嬵嬶嬸", 7, "孁", 6],
-      ["8c40", "孈", 7, "孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],
-      ["8c80", "寑寔", 8, "寠寢寣實寧審", 4, "寯寱", 6, "寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧", 6, "屰屲", 6, "屻屼屽屾岀岃", 4, "岉岊岋岎岏岒岓岕岝", 4, "岤", 4],
-      ["8d40", "岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅", 5, "峌", 5, "峓", 5, "峚", 6, "峢峣峧峩峫峬峮峯峱", 9, "峼", 4],
-      ["8d80", "崁崄崅崈", 5, "崏", 4, "崕崗崘崙崚崜崝崟", 4, "崥崨崪崫崬崯", 4, "崵", 7, "崿", 7, "嵈嵉嵍", 10, "嵙嵚嵜嵞", 10, "嵪嵭嵮嵰嵱嵲嵳嵵", 12, "嶃", 21, "嶚嶛嶜嶞嶟嶠"],
-      ["8e40", "嶡", 21, "嶸", 12, "巆", 6, "巎", 12, "巜巟巠巣巤巪巬巭"],
-      ["8e80", "巰巵巶巸", 4, "巿帀帄帇帉帊帋帍帎帒帓帗帞", 7, "帨", 4, "帯帰帲", 4, "帹帺帾帿幀幁幃幆", 5, "幍", 6, "幖", 4, "幜幝幟幠幣", 14, "幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨", 4, "庮", 4, "庴庺庻庼庽庿", 6],
-      ["8f40", "廆廇廈廋", 5, "廔廕廗廘廙廚廜", 11, "廩廫", 8, "廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],
-      ["8f80", "弨弫弬弮弰弲", 6, "弻弽弾弿彁", 14, "彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢", 5, "復徫徬徯", 5, "徶徸徹徺徻徾", 4, "忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],
-      ["9040", "怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰", 4, "怶", 4, "怽怾恀恄", 6, "恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],
-      ["9080", "悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽", 7, "惇惈惉惌", 4, "惒惓惔惖惗惙惛惞惡", 4, "惪惱惲惵惷惸惻", 4, "愂愃愄愅愇愊愋愌愐", 4, "愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬", 18, "慀", 6],
-      ["9140", "慇慉態慍慏慐慒慓慔慖", 6, "慞慟慠慡慣慤慥慦慩", 6, "慱慲慳慴慶慸", 18, "憌憍憏", 4, "憕"],
-      ["9180", "憖", 6, "憞", 8, "憪憫憭", 9, "憸", 5, "憿懀懁懃", 4, "應懌", 4, "懓懕", 16, "懧", 13, "懶", 8, "戀", 5, "戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸", 4, "扂扄扅扆扊"],
-      ["9240", "扏扐払扖扗扙扚扜", 6, "扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋", 5, "抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],
-      ["9280", "拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳", 5, "挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖", 7, "捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙", 6, "採掤掦掫掯掱掲掵掶掹掻掽掿揀"],
-      ["9340", "揁揂揃揅揇揈揊揋揌揑揓揔揕揗", 6, "揟揢揤", 4, "揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆", 4, "損搎搑搒搕", 5, "搝搟搢搣搤"],
-      ["9380", "搥搧搨搩搫搮", 5, "搵", 4, "搻搼搾摀摂摃摉摋", 6, "摓摕摖摗摙", 4, "摟", 7, "摨摪摫摬摮", 9, "摻", 6, "撃撆撈", 8, "撓撔撗撘撚撛撜撝撟", 4, "撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆", 6, "擏擑擓擔擕擖擙據"],
-      ["9440", "擛擜擝擟擠擡擣擥擧", 24, "攁", 7, "攊", 7, "攓", 4, "攙", 8],
-      ["9480", "攢攣攤攦", 4, "攬攭攰攱攲攳攷攺攼攽敀", 4, "敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數", 14, "斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱", 7, "斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘", 7, "旡旣旤旪旫"],
-      ["9540", "旲旳旴旵旸旹旻", 4, "昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷", 4, "昽昿晀時晄", 6, "晍晎晐晑晘"],
-      ["9580", "晙晛晜晝晞晠晢晣晥晧晩", 4, "晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘", 4, "暞", 8, "暩", 4, "暯", 4, "暵暶暷暸暺暻暼暽暿", 25, "曚曞", 7, "曧曨曪", 5, "曱曵曶書曺曻曽朁朂會"],
-      ["9640", "朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠", 5, "朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗", 4, "杝杢杣杤杦杧杫杬杮東杴杶"],
-      ["9680", "杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹", 7, "柂柅", 9, "柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵", 7, "柾栁栂栃栄栆栍栐栒栔栕栘", 4, "栞栟栠栢", 6, "栫", 6, "栴栵栶栺栻栿桇桋桍桏桒桖", 5],
-      ["9740", "桜桝桞桟桪桬", 7, "桵桸", 8, "梂梄梇", 7, "梐梑梒梔梕梖梘", 9, "梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],
-      ["9780", "梹", 6, "棁棃", 5, "棊棌棎棏棐棑棓棔棖棗棙棛", 4, "棡棢棤", 9, "棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆", 4, "椌椏椑椓", 11, "椡椢椣椥", 7, "椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃", 16, "楕楖楘楙楛楜楟"],
-      ["9840", "楡楢楤楥楧楨楩楪楬業楯楰楲", 4, "楺楻楽楾楿榁榃榅榊榋榌榎", 5, "榖榗榙榚榝", 9, "榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],
-      ["9880", "榾榿槀槂", 7, "構槍槏槑槒槓槕", 5, "槜槝槞槡", 11, "槮槯槰槱槳", 9, "槾樀", 9, "樋", 11, "標", 5, "樠樢", 5, "権樫樬樭樮樰樲樳樴樶", 6, "樿", 4, "橅橆橈", 7, "橑", 6, "橚"],
-      ["9940", "橜", 4, "橢橣橤橦", 10, "橲", 6, "橺橻橽橾橿檁檂檃檅", 8, "檏檒", 4, "檘", 7, "檡", 5],
-      ["9980", "檧檨檪檭", 114, "欥欦欨", 6],
-      ["9a40", "欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍", 11, "歚", 7, "歨歩歫", 13, "歺歽歾歿殀殅殈"],
-      ["9a80", "殌殎殏殐殑殔殕殗殘殙殜", 4, "殢", 7, "殫", 7, "殶殸", 6, "毀毃毄毆", 4, "毌毎毐毑毘毚毜", 4, "毢", 7, "毬毭毮毰毱毲毴毶毷毸毺毻毼毾", 6, "氈", 4, "氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋", 4, "汑汒汓汖汘"],
-      ["9b40", "汙汚汢汣汥汦汧汫", 4, "汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],
-      ["9b80", "泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟", 5, "洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽", 4, "涃涄涆涇涊涋涍涏涐涒涖", 4, "涜涢涥涬涭涰涱涳涴涶涷涹", 5, "淁淂淃淈淉淊"],
-      ["9c40", "淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽", 7, "渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],
-      ["9c80", "渶渷渹渻", 7, "湅", 7, "湏湐湑湒湕湗湙湚湜湝湞湠", 10, "湬湭湯", 14, "満溁溂溄溇溈溊", 4, "溑", 6, "溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪", 5],
-      ["9d40", "滰滱滲滳滵滶滷滸滺", 7, "漃漄漅漇漈漊", 4, "漐漑漒漖", 9, "漡漢漣漥漦漧漨漬漮漰漲漴漵漷", 6, "漿潀潁潂"],
-      ["9d80", "潃潄潅潈潉潊潌潎", 9, "潙潚潛潝潟潠潡潣潤潥潧", 5, "潯潰潱潳潵潶潷潹潻潽", 6, "澅澆澇澊澋澏", 12, "澝澞澟澠澢", 4, "澨", 10, "澴澵澷澸澺", 5, "濁濃", 5, "濊", 6, "濓", 10, "濟濢濣濤濥"],
-      ["9e40", "濦", 7, "濰", 32, "瀒", 7, "瀜", 6, "瀤", 6],
-      ["9e80", "瀫", 9, "瀶瀷瀸瀺", 17, "灍灎灐", 13, "灟", 11, "灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞", 12, "炰炲炴炵炶為炾炿烄烅烆烇烉烋", 12, "烚"],
-      ["9f40", "烜烝烞烠烡烢烣烥烪烮烰", 6, "烸烺烻烼烾", 10, "焋", 4, "焑焒焔焗焛", 10, "焧", 7, "焲焳焴"],
-      ["9f80", "焵焷", 13, "煆煇煈煉煋煍煏", 12, "煝煟", 4, "煥煩", 4, "煯煰煱煴煵煶煷煹煻煼煾", 5, "熅", 4, "熋熌熍熎熐熑熒熓熕熖熗熚", 4, "熡", 6, "熩熪熫熭", 5, "熴熶熷熸熺", 8, "燄", 9, "燏", 4],
-      ["a040", "燖", 9, "燡燢燣燤燦燨", 5, "燯", 9, "燺", 11, "爇", 19],
-      ["a080", "爛爜爞", 9, "爩爫爭爮爯爲爳爴爺爼爾牀", 6, "牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅", 4, "犌犎犐犑犓", 11, "犠", 11, "犮犱犲犳犵犺", 6, "狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],
-      ["a1a1", "　、。·ˉˇ¨〃々—～‖…‘’“”〔〕〈", 7, "〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃＄¤￠￡‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],
-      ["a2a1", "ⅰ", 9],
-      ["a2b1", "⒈", 19, "⑴", 19, "①", 9],
-      ["a2e5", "㈠", 9],
-      ["a2f1", "Ⅰ", 11],
-      ["a3a1", "！＂＃￥％", 88, "￣"],
-      ["a4a1", "ぁ", 82],
-      ["a5a1", "ァ", 85],
-      ["a6a1", "Α", 16, "Σ", 6],
-      ["a6c1", "α", 16, "σ", 6],
-      ["a6e0", "︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],
-      ["a6ee", "︻︼︷︸︱"],
-      ["a6f4", "︳︴"],
-      ["a7a1", "А", 5, "ЁЖ", 25],
-      ["a7d1", "а", 5, "ёж", 25],
-      ["a840", "ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═", 35, "▁", 6],
-      ["a880", "█", 7, "▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],
-      ["a8a1", "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],
-      ["a8bd", "ńň"],
-      ["a8c0", "ɡ"],
-      ["a8c5", "ㄅ", 36],
-      ["a940", "〡", 8, "㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰￢￤"],
-      ["a959", "℡㈱"],
-      ["a95c", "‐"],
-      ["a960", "ー゛゜ヽヾ〆ゝゞ﹉", 9, "﹔﹕﹖﹗﹙", 8],
-      ["a980", "﹢", 4, "﹨﹩﹪﹫"],
-      ["a996", "〇"],
-      ["a9a4", "─", 75],
-      ["aa40", "狜狝狟狢", 5, "狪狫狵狶狹狽狾狿猀猂猄", 5, "猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀", 8],
-      ["aa80", "獉獊獋獌獎獏獑獓獔獕獖獘", 7, "獡", 10, "獮獰獱"],
-      ["ab40", "獲", 11, "獿", 4, "玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣", 5, "玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃", 4],
-      ["ab80", "珋珌珎珒", 6, "珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳", 4],
-      ["ac40", "珸", 10, "琄琇琈琋琌琍琎琑", 8, "琜", 5, "琣琤琧琩琫琭琯琱琲琷", 4, "琽琾琿瑀瑂", 11],
-      ["ac80", "瑎", 6, "瑖瑘瑝瑠", 12, "瑮瑯瑱", 4, "瑸瑹瑺"],
-      ["ad40", "瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑", 10, "璝璟", 7, "璪", 15, "璻", 12],
-      ["ad80", "瓈", 9, "瓓", 8, "瓝瓟瓡瓥瓧", 6, "瓰瓱瓲"],
-      ["ae40", "瓳瓵瓸", 6, "甀甁甂甃甅", 7, "甎甐甒甔甕甖甗甛甝甞甠", 4, "甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],
-      ["ae80", "畝", 7, "畧畨畩畫", 6, "畳畵當畷畺", 4, "疀疁疂疄疅疇"],
-      ["af40", "疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦", 4, "疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],
-      ["af80", "瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],
-      ["b040", "癅", 6, "癎", 5, "癕癗", 4, "癝癟癠癡癢癤", 6, "癬癭癮癰", 7, "癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],
-      ["b080", "皜", 7, "皥", 8, "皯皰皳皵", 9, "盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],
-      ["b140", "盄盇盉盋盌盓盕盙盚盜盝盞盠", 4, "盦", 7, "盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎", 10, "眛眜眝眞眡眣眤眥眧眪眫"],
-      ["b180", "眬眮眰", 4, "眹眻眽眾眿睂睄睅睆睈", 7, "睒", 7, "睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],
-      ["b240", "睝睞睟睠睤睧睩睪睭", 11, "睺睻睼瞁瞂瞃瞆", 5, "瞏瞐瞓", 11, "瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶", 4],
-      ["b280", "瞼瞾矀", 12, "矎", 8, "矘矙矚矝", 4, "矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],
-      ["b340", "矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃", 5, "砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],
-      ["b380", "硛硜硞", 11, "硯", 7, "硸硹硺硻硽", 6, "场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],
-      ["b440", "碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨", 7, "碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚", 9],
-      ["b480", "磤磥磦磧磩磪磫磭", 4, "磳磵磶磸磹磻", 5, "礂礃礄礆", 6, "础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],
-      ["b540", "礍", 5, "礔", 9, "礟", 4, "礥", 14, "礵", 4, "礽礿祂祃祄祅祇祊", 8, "祔祕祘祙祡祣"],
-      ["b580", "祤祦祩祪祫祬祮祰", 6, "祹祻", 4, "禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],
-      ["b640", "禓", 6, "禛", 11, "禨", 10, "禴", 4, "禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙", 5, "秠秡秢秥秨秪"],
-      ["b680", "秬秮秱", 6, "秹秺秼秾秿稁稄稅稇稈稉稊稌稏", 4, "稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],
-      ["b740", "稝稟稡稢稤", 14, "稴稵稶稸稺稾穀", 5, "穇", 9, "穒", 4, "穘", 16],
-      ["b780", "穩", 6, "穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],
-      ["b840", "窣窤窧窩窪窫窮", 4, "窴", 10, "竀", 10, "竌", 9, "竗竘竚竛竜竝竡竢竤竧", 5, "竮竰竱竲竳"],
-      ["b880", "竴", 4, "竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],
-      ["b940", "笯笰笲笴笵笶笷笹笻笽笿", 5, "筆筈筊筍筎筓筕筗筙筜筞筟筡筣", 10, "筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆", 6, "箎箏"],
-      ["b980", "箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹", 7, "篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],
-      ["ba40", "篅篈築篊篋篍篎篏篐篒篔", 4, "篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲", 4, "篸篹篺篻篽篿", 7, "簈簉簊簍簎簐", 5, "簗簘簙"],
-      ["ba80", "簚", 4, "簠", 5, "簨簩簫", 12, "簹", 5, "籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],
-      ["bb40", "籃", 9, "籎", 36, "籵", 5, "籾", 9],
-      ["bb80", "粈粊", 6, "粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴", 4, "粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],
-      ["bc40", "粿糀糂糃糄糆糉糋糎", 6, "糘糚糛糝糞糡", 6, "糩", 5, "糰", 7, "糹糺糼", 13, "紋", 5],
-      ["bc80", "紑", 14, "紡紣紤紥紦紨紩紪紬紭紮細", 6, "肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],
-      ["bd40", "紷", 54, "絯", 7],
-      ["bd80", "絸", 32, "健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],
-      ["be40", "継", 12, "綧", 6, "綯", 42],
-      ["be80", "線", 32, "尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],
-      ["bf40", "緻", 62],
-      ["bf80", "縺縼", 4, "繂", 4, "繈", 21, "俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],
-      ["c040", "繞", 35, "纃", 23, "纜纝纞"],
-      ["c080", "纮纴纻纼绖绤绬绹缊缐缞缷缹缻", 6, "罃罆", 9, "罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],
-      ["c140", "罖罙罛罜罝罞罠罣", 4, "罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂", 7, "羋羍羏", 4, "羕", 4, "羛羜羠羢羣羥羦羨", 6, "羱"],
-      ["c180", "羳", 4, "羺羻羾翀翂翃翄翆翇翈翉翋翍翏", 4, "翖翗翙", 5, "翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],
-      ["c240", "翤翧翨翪翫翬翭翯翲翴", 6, "翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫", 5, "耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],
-      ["c280", "聙聛", 13, "聫", 5, "聲", 11, "隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],
-      ["c340", "聾肁肂肅肈肊肍", 5, "肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇", 4, "胏", 6, "胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],
-      ["c380", "脌脕脗脙脛脜脝脟", 12, "脭脮脰脳脴脵脷脹", 4, "脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],
-      ["c440", "腀", 5, "腇腉腍腎腏腒腖腗腘腛", 4, "腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃", 4, "膉膋膌膍膎膐膒", 5, "膙膚膞", 4, "膤膥"],
-      ["c480", "膧膩膫", 7, "膴", 5, "膼膽膾膿臄臅臇臈臉臋臍", 6, "摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],
-      ["c540", "臔", 14, "臤臥臦臨臩臫臮", 4, "臵", 5, "臽臿舃與", 4, "舎舏舑舓舕", 5, "舝舠舤舥舦舧舩舮舲舺舼舽舿"],
-      ["c580", "艀艁艂艃艅艆艈艊艌艍艎艐", 7, "艙艛艜艝艞艠", 7, "艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],
-      ["c640", "艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],
-      ["c680", "苺苼", 4, "茊茋茍茐茒茓茖茘茙茝", 9, "茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],
-      ["c740", "茾茿荁荂荄荅荈荊", 4, "荓荕", 4, "荝荢荰", 6, "荹荺荾", 6, "莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡", 6, "莬莭莮"],
-      ["c780", "莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],
-      ["c840", "菮華菳", 4, "菺菻菼菾菿萀萂萅萇萈萉萊萐萒", 5, "萙萚萛萞", 5, "萩", 7, "萲", 5, "萹萺萻萾", 7, "葇葈葉"],
-      ["c880", "葊", 6, "葒", 4, "葘葝葞葟葠葢葤", 4, "葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],
-      ["c940", "葽", 4, "蒃蒄蒅蒆蒊蒍蒏", 7, "蒘蒚蒛蒝蒞蒟蒠蒢", 12, "蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],
-      ["c980", "蓘", 4, "蓞蓡蓢蓤蓧", 4, "蓭蓮蓯蓱", 10, "蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],
-      ["ca40", "蔃", 8, "蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢", 8, "蔭", 9, "蔾", 4, "蕄蕅蕆蕇蕋", 10],
-      ["ca80", "蕗蕘蕚蕛蕜蕝蕟", 4, "蕥蕦蕧蕩", 8, "蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],
-      ["cb40", "薂薃薆薈", 6, "薐", 10, "薝", 6, "薥薦薧薩薫薬薭薱", 5, "薸薺", 6, "藂", 6, "藊", 4, "藑藒"],
-      ["cb80", "藔藖", 5, "藝", 6, "藥藦藧藨藪", 14, "恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],
-      ["cc40", "藹藺藼藽藾蘀", 4, "蘆", 10, "蘒蘓蘔蘕蘗", 15, "蘨蘪", 13, "蘹蘺蘻蘽蘾蘿虀"],
-      ["cc80", "虁", 11, "虒虓處", 4, "虛虜虝號虠虡虣", 7, "獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],
-      ["cd40", "虭虯虰虲", 6, "蚃", 6, "蚎", 4, "蚔蚖", 5, "蚞", 4, "蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻", 4, "蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],
-      ["cd80", "蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],
-      ["ce40", "蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀", 6, "蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚", 5, "蝡蝢蝦", 7, "蝯蝱蝲蝳蝵"],
-      ["ce80", "蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎", 4, "螔螕螖螘", 6, "螠", 4, "巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],
-      ["cf40", "螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁", 4, "蟇蟈蟉蟌", 4, "蟔", 6, "蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯", 9],
-      ["cf80", "蟺蟻蟼蟽蟿蠀蠁蠂蠄", 5, "蠋", 7, "蠔蠗蠘蠙蠚蠜", 4, "蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],
-      ["d040", "蠤", 13, "蠳", 5, "蠺蠻蠽蠾蠿衁衂衃衆", 5, "衎", 5, "衕衖衘衚", 6, "衦衧衪衭衯衱衳衴衵衶衸衹衺"],
-      ["d080", "衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗", 4, "袝", 4, "袣袥", 5, "小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],
-      ["d140", "袬袮袯袰袲", 4, "袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚", 4, "裠裡裦裧裩", 6, "裲裵裶裷裺裻製裿褀褁褃", 5],
-      ["d180", "褉褋", 4, "褑褔", 4, "褜", 4, "褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],
-      ["d240", "褸", 8, "襂襃襅", 24, "襠", 5, "襧", 19, "襼"],
-      ["d280", "襽襾覀覂覄覅覇", 26, "摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],
-      ["d340", "覢", 30, "觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴", 6],
-      ["d380", "觻", 4, "訁", 5, "計", 21, "印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],
-      ["d440", "訞", 31, "訿", 8, "詉", 21],
-      ["d480", "詟", 25, "詺", 6, "浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],
-      ["d540", "誁", 7, "誋", 7, "誔", 46],
-      ["d580", "諃", 32, "铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],
-      ["d640", "諤", 34, "謈", 27],
-      ["d680", "謤謥謧", 30, "帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],
-      ["d740", "譆", 31, "譧", 4, "譭", 25],
-      ["d780", "讇", 24, "讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],
-      ["d840", "谸", 8, "豂豃豄豅豈豊豋豍", 7, "豖豗豘豙豛", 5, "豣", 6, "豬", 6, "豴豵豶豷豻", 6, "貃貄貆貇"],
-      ["d880", "貈貋貍", 6, "貕貖貗貙", 20, "亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],
-      ["d940", "貮", 62],
-      ["d980", "賭", 32, "佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],
-      ["da40", "贎", 14, "贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸", 8, "趂趃趆趇趈趉趌", 4, "趒趓趕", 9, "趠趡"],
-      ["da80", "趢趤", 12, "趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],
-      ["db40", "跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾", 6, "踆踇踈踋踍踎踐踑踒踓踕", 7, "踠踡踤", 4, "踫踭踰踲踳踴踶踷踸踻踼踾"],
-      ["db80", "踿蹃蹅蹆蹌", 4, "蹓", 5, "蹚", 11, "蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],
-      ["dc40", "蹳蹵蹷", 4, "蹽蹾躀躂躃躄躆躈", 6, "躑躒躓躕", 6, "躝躟", 11, "躭躮躰躱躳", 6, "躻", 7],
-      ["dc80", "軃", 10, "軏", 21, "堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],
-      ["dd40", "軥", 62],
-      ["dd80", "輤", 32, "荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],
-      ["de40", "轅", 32, "轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],
-      ["de80", "迉", 4, "迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],
-      ["df40", "這逜連逤逥逧", 5, "逰", 4, "逷逹逺逽逿遀遃遅遆遈", 4, "過達違遖遙遚遜", 5, "遤遦遧適遪遫遬遯", 4, "遶", 6, "遾邁"],
-      ["df80", "還邅邆邇邉邊邌", 4, "邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],
-      ["e040", "郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅", 19, "鄚鄛鄜"],
-      ["e080", "鄝鄟鄠鄡鄤", 10, "鄰鄲", 6, "鄺", 8, "酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],
-      ["e140", "酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀", 4, "醆醈醊醎醏醓", 6, "醜", 5, "醤", 5, "醫醬醰醱醲醳醶醷醸醹醻"],
-      ["e180", "醼", 10, "釈釋釐釒", 9, "針", 8, "帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],
-      ["e240", "釦", 62],
-      ["e280", "鈥", 32, "狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧", 5, "饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],
-      ["e340", "鉆", 45, "鉵", 16],
-      ["e380", "銆", 7, "銏", 24, "恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],
-      ["e440", "銨", 5, "銯", 24, "鋉", 31],
-      ["e480", "鋩", 32, "洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],
-      ["e540", "錊", 51, "錿", 10],
-      ["e580", "鍊", 31, "鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],
-      ["e640", "鍬", 34, "鎐", 27],
-      ["e680", "鎬", 29, "鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],
-      ["e740", "鏎", 7, "鏗", 54],
-      ["e780", "鐎", 32, "纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡", 6, "缪缫缬缭缯", 4, "缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],
-      ["e840", "鐯", 14, "鐿", 43, "鑬鑭鑮鑯"],
-      ["e880", "鑰", 20, "钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],
-      ["e940", "锧锳锽镃镈镋镕镚镠镮镴镵長", 7, "門", 42],
-      ["e980", "閫", 32, "椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],
-      ["ea40", "闌", 27, "闬闿阇阓阘阛阞阠阣", 6, "阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],
-      ["ea80", "陘陙陚陜陝陞陠陣陥陦陫陭", 4, "陳陸", 12, "隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],
-      ["eb40", "隌階隑隒隓隕隖隚際隝", 9, "隨", 7, "隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖", 9, "雡", 6, "雫"],
-      ["eb80", "雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗", 4, "霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],
-      ["ec40", "霡", 8, "霫霬霮霯霱霳", 4, "霺霻霼霽霿", 18, "靔靕靗靘靚靜靝靟靣靤靦靧靨靪", 7],
-      ["ec80", "靲靵靷", 4, "靽", 7, "鞆", 4, "鞌鞎鞏鞐鞓鞕鞖鞗鞙", 4, "臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],
-      ["ed40", "鞞鞟鞡鞢鞤", 6, "鞬鞮鞰鞱鞳鞵", 46],
-      ["ed80", "韤韥韨韮", 4, "韴韷", 23, "怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],
-      ["ee40", "頏", 62],
-      ["ee80", "顎", 32, "睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶", 4, "钼钽钿铄铈", 6, "铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],
-      ["ef40", "顯", 5, "颋颎颒颕颙颣風", 37, "飏飐飔飖飗飛飜飝飠", 4],
-      ["ef80", "飥飦飩", 30, "铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒", 4, "锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤", 8, "镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],
-      ["f040", "餈", 4, "餎餏餑", 28, "餯", 26],
-      ["f080", "饊", 9, "饖", 12, "饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨", 4, "鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦", 6, "鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],
-      ["f140", "馌馎馚", 10, "馦馧馩", 47],
-      ["f180", "駙", 32, "瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],
-      ["f240", "駺", 62],
-      ["f280", "騹", 32, "颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],
-      ["f340", "驚", 17, "驲骃骉骍骎骔骕骙骦骩", 6, "骲骳骴骵骹骻骽骾骿髃髄髆", 4, "髍髎髏髐髒體髕髖髗髙髚髛髜"],
-      ["f380", "髝髞髠髢髣髤髥髧髨髩髪髬髮髰", 8, "髺髼", 6, "鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],
-      ["f440", "鬇鬉", 5, "鬐鬑鬒鬔", 10, "鬠鬡鬢鬤", 10, "鬰鬱鬳", 7, "鬽鬾鬿魀魆魊魋魌魎魐魒魓魕", 5],
-      ["f480", "魛", 32, "簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],
-      ["f540", "魼", 62],
-      ["f580", "鮻", 32, "酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],
-      ["f640", "鯜", 62],
-      ["f680", "鰛", 32, "觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅", 5, "龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞", 5, "鲥", 4, "鲫鲭鲮鲰", 7, "鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],
-      ["f740", "鰼", 62],
-      ["f780", "鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾", 4, "鳈鳉鳑鳒鳚鳛鳠鳡鳌", 4, "鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],
-      ["f840", "鳣", 62],
-      ["f880", "鴢", 32],
-      ["f940", "鵃", 62],
-      ["f980", "鶂", 32],
-      ["fa40", "鶣", 62],
-      ["fa80", "鷢", 32],
-      ["fb40", "鸃", 27, "鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴", 9, "麀"],
-      ["fb80", "麁麃麄麅麆麉麊麌", 5, "麔", 8, "麞麠", 5, "麧麨麩麪"],
-      ["fc40", "麫", 8, "麵麶麷麹麺麼麿", 4, "黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰", 8, "黺黽黿", 6],
-      ["fc80", "鼆", 4, "鼌鼏鼑鼒鼔鼕鼖鼘鼚", 5, "鼡鼣", 8, "鼭鼮鼰鼱"],
-      ["fd40", "鼲", 4, "鼸鼺鼼鼿", 4, "齅", 10, "齒", 38],
-      ["fd80", "齹", 5, "龁龂龍", 11, "龜龝龞龡", 4, "郎凉秊裏隣"],
-      ["fe40", "兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/gbk-added.json
-var require_gbk_added = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports, module) {
-    module.exports = [
-      ["a140", "", 62],
-      ["a180", "", 32],
-      ["a240", "", 62],
-      ["a280", "", 32],
-      ["a2ab", "", 5],
-      ["a2e3", "€"],
-      ["a2ef", ""],
-      ["a2fd", ""],
-      ["a340", "", 62],
-      ["a380", "", 31, "　"],
-      ["a440", "", 62],
-      ["a480", "", 32],
-      ["a4f4", "", 10],
-      ["a540", "", 62],
-      ["a580", "", 32],
-      ["a5f7", "", 7],
-      ["a640", "", 62],
-      ["a680", "", 32],
-      ["a6b9", "", 7],
-      ["a6d9", "", 6],
-      ["a6ec", ""],
-      ["a6f3", ""],
-      ["a6f6", "", 8],
-      ["a740", "", 62],
-      ["a780", "", 32],
-      ["a7c2", "", 14],
-      ["a7f2", "", 12],
-      ["a896", "", 10],
-      ["a8bc", ""],
-      ["a8bf", "ǹ"],
-      ["a8c1", ""],
-      ["a8ea", "", 20],
-      ["a958", ""],
-      ["a95b", ""],
-      ["a95d", ""],
-      ["a989", "〾⿰", 11],
-      ["a997", "", 12],
-      ["a9f0", "", 14],
-      ["aaa1", "", 93],
-      ["aba1", "", 93],
-      ["aca1", "", 93],
-      ["ada1", "", 93],
-      ["aea1", "", 93],
-      ["afa1", "", 93],
-      ["d7fa", "", 4],
-      ["f8a1", "", 93],
-      ["f9a1", "", 93],
-      ["faa1", "", 93],
-      ["fba1", "", 93],
-      ["fca1", "", 93],
-      ["fda1", "", 93],
-      ["fe50", "⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],
-      ["fe80", "䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓", 6, "䶮", 93]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
-var require_gb18030_ranges = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports, module) {
-    module.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] };
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/cp949.json
-var require_cp949 = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/cp949.json"(exports, module) {
-    module.exports = [
-      ["0", "\0", 127],
-      ["8141", "갂갃갅갆갋", 4, "갘갞갟갡갢갣갥", 6, "갮갲갳갴"],
-      ["8161", "갵갶갷갺갻갽갾갿걁", 9, "걌걎", 5, "걕"],
-      ["8181", "걖걗걙걚걛걝", 18, "걲걳걵걶걹걻", 4, "겂겇겈겍겎겏겑겒겓겕", 6, "겞겢", 5, "겫겭겮겱", 6, "겺겾겿곀곂곃곅곆곇곉곊곋곍", 7, "곖곘", 7, "곢곣곥곦곩곫곭곮곲곴곷", 4, "곾곿괁괂괃괅괇", 4, "괎괐괒괓"],
-      ["8241", "괔괕괖괗괙괚괛괝괞괟괡", 7, "괪괫괮", 5],
-      ["8261", "괶괷괹괺괻괽", 6, "굆굈굊", 5, "굑굒굓굕굖굗"],
-      ["8281", "굙", 7, "굢굤", 7, "굮굯굱굲굷굸굹굺굾궀궃", 4, "궊궋궍궎궏궑", 10, "궞", 5, "궥", 17, "궸", 7, "귂귃귅귆귇귉", 6, "귒귔", 7, "귝귞귟귡귢귣귥", 18],
-      ["8341", "귺귻귽귾긂", 5, "긊긌긎", 5, "긕", 7],
-      ["8361", "긝", 18, "긲긳긵긶긹긻긼"],
-      ["8381", "긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗", 4, "깞깢깣깤깦깧깪깫깭깮깯깱", 6, "깺깾", 5, "꺆", 5, "꺍", 46, "꺿껁껂껃껅", 6, "껎껒", 5, "껚껛껝", 8],
-      ["8441", "껦껧껩껪껬껮", 5, "껵껶껷껹껺껻껽", 8],
-      ["8461", "꼆꼉꼊꼋꼌꼎꼏꼑", 18],
-      ["8481", "꼤", 7, "꼮꼯꼱꼳꼵", 6, "꼾꽀꽄꽅꽆꽇꽊", 5, "꽑", 10, "꽞", 5, "꽦", 18, "꽺", 5, "꾁꾂꾃꾅꾆꾇꾉", 6, "꾒꾓꾔꾖", 5, "꾝", 26, "꾺꾻꾽꾾"],
-      ["8541", "꾿꿁", 5, "꿊꿌꿏", 4, "꿕", 6, "꿝", 4],
-      ["8561", "꿢", 5, "꿪", 5, "꿲꿳꿵꿶꿷꿹", 6, "뀂뀃"],
-      ["8581", "뀅", 6, "뀍뀎뀏뀑뀒뀓뀕", 6, "뀞", 9, "뀩", 26, "끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞", 29, "끾끿낁낂낃낅", 6, "낎낐낒", 5, "낛낝낞낣낤"],
-      ["8641", "낥낦낧낪낰낲낶낷낹낺낻낽", 6, "냆냊", 5, "냒"],
-      ["8661", "냓냕냖냗냙", 6, "냡냢냣냤냦", 10],
-      ["8681", "냱", 22, "넊넍넎넏넑넔넕넖넗넚넞", 4, "넦넧넩넪넫넭", 6, "넶넺", 5, "녂녃녅녆녇녉", 6, "녒녓녖녗녙녚녛녝녞녟녡", 22, "녺녻녽녾녿놁놃", 4, "놊놌놎놏놐놑놕놖놗놙놚놛놝"],
-      ["8741", "놞", 9, "놩", 15],
-      ["8761", "놹", 18, "뇍뇎뇏뇑뇒뇓뇕"],
-      ["8781", "뇖", 5, "뇞뇠", 7, "뇪뇫뇭뇮뇯뇱", 7, "뇺뇼뇾", 5, "눆눇눉눊눍", 6, "눖눘눚", 5, "눡", 18, "눵", 6, "눽", 26, "뉙뉚뉛뉝뉞뉟뉡", 6, "뉪", 4],
-      ["8841", "뉯", 4, "뉶", 5, "뉽", 6, "늆늇늈늊", 4],
-      ["8861", "늏늒늓늕늖늗늛", 4, "늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],
-      ["8881", "늸", 15, "닊닋닍닎닏닑닓", 4, "닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉", 6, "댒댖", 5, "댝", 54, "덗덙덚덝덠덡덢덣"],
-      ["8941", "덦덨덪덬덭덯덲덳덵덶덷덹", 6, "뎂뎆", 5, "뎍"],
-      ["8961", "뎎뎏뎑뎒뎓뎕", 10, "뎢", 5, "뎩뎪뎫뎭"],
-      ["8981", "뎮", 21, "돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩", 18, "돽", 18, "됑", 6, "됙됚됛됝됞됟됡", 6, "됪됬", 7, "됵", 15],
-      ["8a41", "둅", 10, "둒둓둕둖둗둙", 6, "둢둤둦"],
-      ["8a61", "둧", 4, "둭", 18, "뒁뒂"],
-      ["8a81", "뒃", 4, "뒉", 19, "뒞", 5, "뒥뒦뒧뒩뒪뒫뒭", 7, "뒶뒸뒺", 5, "듁듂듃듅듆듇듉", 6, "듑듒듓듔듖", 5, "듞듟듡듢듥듧", 4, "듮듰듲", 5, "듹", 26, "딖딗딙딚딝"],
-      ["8b41", "딞", 5, "딦딫", 4, "딲딳딵딶딷딹", 6, "땂땆"],
-      ["8b61", "땇땈땉땊땎땏땑땒땓땕", 6, "땞땢", 8],
-      ["8b81", "땫", 52, "떢떣떥떦떧떩떬떭떮떯떲떶", 4, "떾떿뗁뗂뗃뗅", 6, "뗎뗒", 5, "뗙", 18, "뗭", 18],
-      ["8c41", "똀", 15, "똒똓똕똖똗똙", 4],
-      ["8c61", "똞", 6, "똦", 5, "똭", 6, "똵", 5],
-      ["8c81", "똻", 12, "뙉", 26, "뙥뙦뙧뙩", 50, "뚞뚟뚡뚢뚣뚥", 5, "뚭뚮뚯뚰뚲", 16],
-      ["8d41", "뛃", 16, "뛕", 8],
-      ["8d61", "뛞", 17, "뛱뛲뛳뛵뛶뛷뛹뛺"],
-      ["8d81", "뛻", 4, "뜂뜃뜄뜆", 33, "뜪뜫뜭뜮뜱", 6, "뜺뜼", 7, "띅띆띇띉띊띋띍", 6, "띖", 9, "띡띢띣띥띦띧띩", 6, "띲띴띶", 5, "띾띿랁랂랃랅", 6, "랎랓랔랕랚랛랝랞"],
-      ["8e41", "랟랡", 6, "랪랮", 5, "랶랷랹", 8],
-      ["8e61", "럂", 4, "럈럊", 19],
-      ["8e81", "럞", 13, "럮럯럱럲럳럵", 6, "럾렂", 4, "렊렋렍렎렏렑", 6, "렚렜렞", 5, "렦렧렩렪렫렭", 6, "렶렺", 5, "롁롂롃롅", 11, "롒롔", 7, "롞롟롡롢롣롥", 6, "롮롰롲", 5, "롹롺롻롽", 7],
-      ["8f41", "뢅", 7, "뢎", 17],
-      ["8f61", "뢠", 7, "뢩", 6, "뢱뢲뢳뢵뢶뢷뢹", 4],
-      ["8f81", "뢾뢿룂룄룆", 5, "룍룎룏룑룒룓룕", 7, "룞룠룢", 5, "룪룫룭룮룯룱", 6, "룺룼룾", 5, "뤅", 18, "뤙", 6, "뤡", 26, "뤾뤿륁륂륃륅", 6, "륍륎륐륒", 5],
-      ["9041", "륚륛륝륞륟륡", 6, "륪륬륮", 5, "륶륷륹륺륻륽"],
-      ["9061", "륾", 5, "릆릈릋릌릏", 15],
-      ["9081", "릟", 12, "릮릯릱릲릳릵", 6, "릾맀맂", 5, "맊맋맍맓", 4, "맚맜맟맠맢맦맧맩맪맫맭", 6, "맶맻", 4, "먂", 5, "먉", 11, "먖", 33, "먺먻먽먾먿멁멃멄멅멆"],
-      ["9141", "멇멊멌멏멐멑멒멖멗멙멚멛멝", 6, "멦멪", 5],
-      ["9161", "멲멳멵멶멷멹", 9, "몆몈몉몊몋몍", 5],
-      ["9181", "몓", 20, "몪몭몮몯몱몳", 4, "몺몼몾", 5, "뫅뫆뫇뫉", 14, "뫚", 33, "뫽뫾뫿묁묂묃묅", 7, "묎묐묒", 5, "묙묚묛묝묞묟묡", 6],
-      ["9241", "묨묪묬", 7, "묷묹묺묿", 4, "뭆뭈뭊뭋뭌뭎뭑뭒"],
-      ["9261", "뭓뭕뭖뭗뭙", 7, "뭢뭤", 7, "뭭", 4],
-      ["9281", "뭲", 21, "뮉뮊뮋뮍뮎뮏뮑", 18, "뮥뮦뮧뮩뮪뮫뮭", 6, "뮵뮶뮸", 7, "믁믂믃믅믆믇믉", 6, "믑믒믔", 35, "믺믻믽믾밁"],
-      ["9341", "밃", 4, "밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],
-      ["9361", "밶밷밹", 6, "뱂뱆뱇뱈뱊뱋뱎뱏뱑", 8],
-      ["9381", "뱚뱛뱜뱞", 37, "벆벇벉벊벍벏", 4, "벖벘벛", 4, "벢벣벥벦벩", 6, "벲벶", 5, "벾벿볁볂볃볅", 7, "볎볒볓볔볖볗볙볚볛볝", 22, "볷볹볺볻볽"],
-      ["9441", "볾", 5, "봆봈봊", 5, "봑봒봓봕", 8],
-      ["9461", "봞", 5, "봥", 6, "봭", 12],
-      ["9481", "봺", 5, "뵁", 6, "뵊뵋뵍뵎뵏뵑", 6, "뵚", 9, "뵥뵦뵧뵩", 22, "붂붃붅붆붋", 4, "붒붔붖붗붘붛붝", 6, "붥", 10, "붱", 6, "붹", 24],
-      ["9541", "뷒뷓뷖뷗뷙뷚뷛뷝", 11, "뷪", 5, "뷱"],
-      ["9561", "뷲뷳뷵뷶뷷뷹", 6, "븁븂븄븆", 5, "븎븏븑븒븓"],
-      ["9581", "븕", 6, "븞븠", 35, "빆빇빉빊빋빍빏", 4, "빖빘빜빝빞빟빢빣빥빦빧빩빫", 4, "빲빶", 4, "빾빿뺁뺂뺃뺅", 6, "뺎뺒", 5, "뺚", 13, "뺩", 14],
-      ["9641", "뺸", 23, "뻒뻓"],
-      ["9661", "뻕뻖뻙", 6, "뻡뻢뻦", 5, "뻭", 8],
-      ["9681", "뻶", 10, "뼂", 5, "뼊", 13, "뼚뼞", 33, "뽂뽃뽅뽆뽇뽉", 6, "뽒뽓뽔뽖", 44],
-      ["9741", "뾃", 16, "뾕", 8],
-      ["9761", "뾞", 17, "뾱", 7],
-      ["9781", "뾹", 11, "뿆", 5, "뿎뿏뿑뿒뿓뿕", 6, "뿝뿞뿠뿢", 89, "쀽쀾쀿"],
-      ["9841", "쁀", 16, "쁒", 5, "쁙쁚쁛"],
-      ["9861", "쁝쁞쁟쁡", 6, "쁪", 15],
-      ["9881", "쁺", 21, "삒삓삕삖삗삙", 6, "삢삤삦", 5, "삮삱삲삷", 4, "삾샂샃샄샆샇샊샋샍샎샏샑", 6, "샚샞", 5, "샦샧샩샪샫샭", 6, "샶샸샺", 5, "섁섂섃섅섆섇섉", 6, "섑섒섓섔섖", 5, "섡섢섥섨섩섪섫섮"],
-      ["9941", "섲섳섴섵섷섺섻섽섾섿셁", 6, "셊셎", 5, "셖셗"],
-      ["9961", "셙셚셛셝", 6, "셦셪", 5, "셱셲셳셵셶셷셹셺셻"],
-      ["9981", "셼", 8, "솆", 5, "솏솑솒솓솕솗", 4, "솞솠솢솣솤솦솧솪솫솭솮솯솱", 11, "솾", 5, "쇅쇆쇇쇉쇊쇋쇍", 6, "쇕쇖쇙", 6, "쇡쇢쇣쇥쇦쇧쇩", 6, "쇲쇴", 7, "쇾쇿숁숂숃숅", 6, "숎숐숒", 5, "숚숛숝숞숡숢숣"],
-      ["9a41", "숤숥숦숧숪숬숮숰숳숵", 16],
-      ["9a61", "쉆쉇쉉", 6, "쉒쉓쉕쉖쉗쉙", 6, "쉡쉢쉣쉤쉦"],
-      ["9a81", "쉧", 4, "쉮쉯쉱쉲쉳쉵", 6, "쉾슀슂", 5, "슊", 5, "슑", 6, "슙슚슜슞", 5, "슦슧슩슪슫슮", 5, "슶슸슺", 33, "싞싟싡싢싥", 5, "싮싰싲싳싴싵싷싺싽싾싿쌁", 6, "쌊쌋쌎쌏"],
-      ["9b41", "쌐쌑쌒쌖쌗쌙쌚쌛쌝", 6, "쌦쌧쌪", 8],
-      ["9b61", "쌳", 17, "썆", 7],
-      ["9b81", "썎", 25, "썪썫썭썮썯썱썳", 4, "썺썻썾", 5, "쎅쎆쎇쎉쎊쎋쎍", 50, "쏁", 22, "쏚"],
-      ["9c41", "쏛쏝쏞쏡쏣", 4, "쏪쏫쏬쏮", 5, "쏶쏷쏹", 5],
-      ["9c61", "쏿", 8, "쐉", 6, "쐑", 9],
-      ["9c81", "쐛", 8, "쐥", 6, "쐭쐮쐯쐱쐲쐳쐵", 6, "쐾", 9, "쑉", 26, "쑦쑧쑩쑪쑫쑭", 6, "쑶쑷쑸쑺", 5, "쒁", 18, "쒕", 6, "쒝", 12],
-      ["9d41", "쒪", 13, "쒹쒺쒻쒽", 8],
-      ["9d61", "쓆", 25],
-      ["9d81", "쓠", 8, "쓪", 5, "쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂", 9, "씍씎씏씑씒씓씕", 6, "씝", 10, "씪씫씭씮씯씱", 6, "씺씼씾", 5, "앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩", 6, "앲앶", 5, "앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],
-      ["9e41", "얖얙얚얛얝얞얟얡", 7, "얪", 9, "얶"],
-      ["9e61", "얷얺얿", 4, "엋엍엏엒엓엕엖엗엙", 6, "엢엤엦엧"],
-      ["9e81", "엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑", 6, "옚옝", 6, "옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉", 6, "왒왖", 5, "왞왟왡", 10, "왭왮왰왲", 5, "왺왻왽왾왿욁", 6, "욊욌욎", 5, "욖욗욙욚욛욝", 6, "욦"],
-      ["9f41", "욨욪", 5, "욲욳욵욶욷욻", 4, "웂웄웆", 5, "웎"],
-      ["9f61", "웏웑웒웓웕", 6, "웞웟웢", 5, "웪웫웭웮웯웱웲"],
-      ["9f81", "웳", 4, "웺웻웼웾", 5, "윆윇윉윊윋윍", 6, "윖윘윚", 5, "윢윣윥윦윧윩", 6, "윲윴윶윸윹윺윻윾윿읁읂읃읅", 4, "읋읎읐읙읚읛읝읞읟읡", 6, "읩읪읬", 7, "읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛", 4, "잢잧", 4, "잮잯잱잲잳잵잶잷"],
-      ["a041", "잸잹잺잻잾쟂", 5, "쟊쟋쟍쟏쟑", 6, "쟙쟚쟛쟜"],
-      ["a061", "쟞", 5, "쟥쟦쟧쟩쟪쟫쟭", 13],
-      ["a081", "쟻", 4, "젂젃젅젆젇젉젋", 4, "젒젔젗", 4, "젞젟젡젢젣젥", 6, "젮젰젲", 5, "젹젺젻젽젾젿졁", 6, "졊졋졎", 5, "졕", 26, "졲졳졵졶졷졹졻", 4, "좂좄좈좉좊좎", 5, "좕", 7, "좞좠좢좣좤"],
-      ["a141", "좥좦좧좩", 18, "좾좿죀죁"],
-      ["a161", "죂죃죅죆죇죉죊죋죍", 6, "죖죘죚", 5, "죢죣죥"],
-      ["a181", "죦", 14, "죶", 5, "죾죿줁줂줃줇", 4, "줎　、。·‥…¨〃­―∥＼∼‘’“”〔〕〈", 9, "±×÷≠≤≥∞∴°′″℃Å￠￡￥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨￢"],
-      ["a241", "줐줒", 5, "줙", 18],
-      ["a261", "줭", 6, "줵", 18],
-      ["a281", "쥈", 7, "쥒쥓쥕쥖쥗쥙", 6, "쥢쥤", 7, "쥭쥮쥯⇒⇔∀∃´～ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],
-      ["a341", "쥱쥲쥳쥵", 6, "쥽", 10, "즊즋즍즎즏"],
-      ["a361", "즑", 6, "즚즜즞", 16],
-      ["a381", "즯", 16, "짂짃짅짆짉짋", 4, "짒짔짗짘짛！", 58, "￦］", 32, "￣"],
-      ["a441", "짞짟짡짣짥짦짨짩짪짫짮짲", 5, "짺짻짽짾짿쨁쨂쨃쨄"],
-      ["a461", "쨅쨆쨇쨊쨎", 5, "쨕쨖쨗쨙", 12],
-      ["a481", "쨦쨧쨨쨪", 28, "ㄱ", 93],
-      ["a541", "쩇", 4, "쩎쩏쩑쩒쩓쩕", 6, "쩞쩢", 5, "쩩쩪"],
-      ["a561", "쩫", 17, "쩾", 5, "쪅쪆"],
-      ["a581", "쪇", 16, "쪙", 14, "ⅰ", 9],
-      ["a5b0", "Ⅰ", 9],
-      ["a5c1", "Α", 16, "Σ", 6],
-      ["a5e1", "α", 16, "σ", 6],
-      ["a641", "쪨", 19, "쪾쪿쫁쫂쫃쫅"],
-      ["a661", "쫆", 5, "쫎쫐쫒쫔쫕쫖쫗쫚", 5, "쫡", 6],
-      ["a681", "쫨쫩쫪쫫쫭", 6, "쫵", 18, "쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃", 7],
-      ["a741", "쬋", 4, "쬑쬒쬓쬕쬖쬗쬙", 6, "쬢", 7],
-      ["a761", "쬪", 22, "쭂쭃쭄"],
-      ["a781", "쭅쭆쭇쭊쭋쭍쭎쭏쭑", 6, "쭚쭛쭜쭞", 5, "쭥", 7, "㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙", 9, "㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰", 9, "㎀", 4, "㎺", 5, "㎐", 4, "Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],
-      ["a841", "쭭", 10, "쭺", 14],
-      ["a861", "쮉", 18, "쮝", 6],
-      ["a881", "쮤", 19, "쮹", 11, "ÆÐªĦ"],
-      ["a8a6", "Ĳ"],
-      ["a8a8", "ĿŁØŒºÞŦŊ"],
-      ["a8b1", "㉠", 27, "ⓐ", 25, "①", 14, "½⅓⅔¼¾⅛⅜⅝⅞"],
-      ["a941", "쯅", 14, "쯕", 10],
-      ["a961", "쯠쯡쯢쯣쯥쯦쯨쯪", 18],
-      ["a981", "쯽", 14, "찎찏찑찒찓찕", 6, "찞찟찠찣찤æđðħıĳĸŀłøœßþŧŋŉ㈀", 27, "⒜", 25, "⑴", 14, "¹²³⁴ⁿ₁₂₃₄"],
-      ["aa41", "찥찦찪찫찭찯찱", 6, "찺찿", 4, "챆챇챉챊챋챍챎"],
-      ["aa61", "챏", 4, "챖챚", 5, "챡챢챣챥챧챩", 6, "챱챲"],
-      ["aa81", "챳챴챶", 29, "ぁ", 82],
-      ["ab41", "첔첕첖첗첚첛첝첞첟첡", 6, "첪첮", 5, "첶첷첹"],
-      ["ab61", "첺첻첽", 6, "쳆쳈쳊", 5, "쳑쳒쳓쳕", 5],
-      ["ab81", "쳛", 8, "쳥", 6, "쳭쳮쳯쳱", 12, "ァ", 85],
-      ["ac41", "쳾쳿촀촂", 5, "촊촋촍촎촏촑", 6, "촚촜촞촟촠"],
-      ["ac61", "촡촢촣촥촦촧촩촪촫촭", 11, "촺", 4],
-      ["ac81", "촿", 28, "쵝쵞쵟А", 5, "ЁЖ", 25],
-      ["acd1", "а", 5, "ёж", 25],
-      ["ad41", "쵡쵢쵣쵥", 6, "쵮쵰쵲", 5, "쵹", 7],
-      ["ad61", "춁", 6, "춉", 10, "춖춗춙춚춛춝춞춟"],
-      ["ad81", "춠춡춢춣춦춨춪", 5, "춱", 18, "췅"],
-      ["ae41", "췆", 5, "췍췎췏췑", 16],
-      ["ae61", "췢", 5, "췩췪췫췭췮췯췱", 6, "췺췼췾", 4],
-      ["ae81", "츃츅츆츇츉츊츋츍", 6, "츕츖츗츘츚", 5, "츢츣츥츦츧츩츪츫"],
-      ["af41", "츬츭츮츯츲츴츶", 19],
-      ["af61", "칊", 13, "칚칛칝칞칢", 5, "칪칬"],
-      ["af81", "칮", 5, "칶칷칹칺칻칽", 6, "캆캈캊", 5, "캒캓캕캖캗캙"],
-      ["b041", "캚", 5, "캢캦", 5, "캮", 12],
-      ["b061", "캻", 5, "컂", 19],
-      ["b081", "컖", 13, "컦컧컩컪컭", 6, "컶컺", 5, "가각간갇갈갉갊감", 7, "같", 4, "갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],
-      ["b141", "켂켃켅켆켇켉", 6, "켒켔켖", 5, "켝켞켟켡켢켣"],
-      ["b161", "켥", 6, "켮켲", 5, "켹", 11],
-      ["b181", "콅", 14, "콖콗콙콚콛콝", 6, "콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],
-      ["b241", "콭콮콯콲콳콵콶콷콹", 6, "쾁쾂쾃쾄쾆", 5, "쾍"],
-      ["b261", "쾎", 18, "쾢", 5, "쾩"],
-      ["b281", "쾪", 5, "쾱", 18, "쿅", 6, "깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],
-      ["b341", "쿌", 19, "쿢쿣쿥쿦쿧쿩"],
-      ["b361", "쿪", 5, "쿲쿴쿶", 5, "쿽쿾쿿퀁퀂퀃퀅", 5],
-      ["b381", "퀋", 5, "퀒", 5, "퀙", 19, "끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫", 4, "낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],
-      ["b441", "퀮", 5, "퀶퀷퀹퀺퀻퀽", 6, "큆큈큊", 5],
-      ["b461", "큑큒큓큕큖큗큙", 6, "큡", 10, "큮큯"],
-      ["b481", "큱큲큳큵", 6, "큾큿킀킂", 18, "뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫", 4, "닳담답닷", 4, "닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],
-      ["b541", "킕", 14, "킦킧킩킪킫킭", 5],
-      ["b561", "킳킶킸킺", 5, "탂탃탅탆탇탊", 5, "탒탖", 4],
-      ["b581", "탛탞탟탡탢탣탥", 6, "탮탲", 5, "탹", 11, "덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],
-      ["b641", "턅", 7, "턎", 17],
-      ["b661", "턠", 15, "턲턳턵턶턷턹턻턼턽턾"],
-      ["b681", "턿텂텆", 5, "텎텏텑텒텓텕", 6, "텞텠텢", 5, "텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],
-      ["b741", "텮", 13, "텽", 6, "톅톆톇톉톊"],
-      ["b761", "톋", 20, "톢톣톥톦톧"],
-      ["b781", "톩", 6, "톲톴톶톷톸톹톻톽톾톿퇁", 14, "래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],
-      ["b841", "퇐", 7, "퇙", 17],
-      ["b861", "퇫", 8, "퇵퇶퇷퇹", 13],
-      ["b881", "툈툊", 5, "툑", 24, "륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많", 4, "맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],
-      ["b941", "툪툫툮툯툱툲툳툵", 6, "툾퉀퉂", 5, "퉉퉊퉋퉌"],
-      ["b961", "퉍", 14, "퉝", 6, "퉥퉦퉧퉨"],
-      ["b981", "퉩", 22, "튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바", 4, "받", 4, "밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],
-      ["ba41", "튍튎튏튒튓튔튖", 5, "튝튞튟튡튢튣튥", 6, "튭"],
-      ["ba61", "튮튯튰튲", 5, "튺튻튽튾틁틃", 4, "틊틌", 5],
-      ["ba81", "틒틓틕틖틗틙틚틛틝", 6, "틦", 9, "틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],
-      ["bb41", "틻", 4, "팂팄팆", 5, "팏팑팒팓팕팗", 4, "팞팢팣"],
-      ["bb61", "팤팦팧팪팫팭팮팯팱", 6, "팺팾", 5, "퍆퍇퍈퍉"],
-      ["bb81", "퍊", 31, "빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],
-      ["bc41", "퍪", 17, "퍾퍿펁펂펃펅펆펇"],
-      ["bc61", "펈펉펊펋펎펒", 5, "펚펛펝펞펟펡", 6, "펪펬펮"],
-      ["bc81", "펯", 4, "펵펶펷펹펺펻펽", 6, "폆폇폊", 5, "폑", 5, "샥샨샬샴샵샷샹섀섄섈섐섕서", 4, "섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],
-      ["bd41", "폗폙", 7, "폢폤", 7, "폮폯폱폲폳폵폶폷"],
-      ["bd61", "폸폹폺폻폾퐀퐂", 5, "퐉", 13],
-      ["bd81", "퐗", 5, "퐞", 25, "숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],
-      ["be41", "퐸", 7, "푁푂푃푅", 14],
-      ["be61", "푔", 7, "푝푞푟푡푢푣푥", 7, "푮푰푱푲"],
-      ["be81", "푳", 4, "푺푻푽푾풁풃", 4, "풊풌풎", 5, "풕", 8, "쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄", 6, "엌엎"],
-      ["bf41", "풞", 10, "풪", 14],
-      ["bf61", "풹", 18, "퓍퓎퓏퓑퓒퓓퓕"],
-      ["bf81", "퓖", 5, "퓝퓞퓠", 7, "퓩퓪퓫퓭퓮퓯퓱", 6, "퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염", 5, "옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],
-      ["c041", "퓾", 5, "픅픆픇픉픊픋픍", 6, "픖픘", 5],
-      ["c061", "픞", 25],
-      ["c081", "픸픹픺픻픾픿핁핂핃핅", 6, "핎핐핒", 5, "핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응", 7, "읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],
-      ["c141", "핤핦핧핪핬핮", 5, "핶핷핹핺핻핽", 6, "햆햊햋"],
-      ["c161", "햌햍햎햏햑", 19, "햦햧"],
-      ["c181", "햨", 31, "점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],
-      ["c241", "헊헋헍헎헏헑헓", 4, "헚헜헞", 5, "헦헧헩헪헫헭헮"],
-      ["c261", "헯", 4, "헶헸헺", 5, "혂혃혅혆혇혉", 6, "혒"],
-      ["c281", "혖", 5, "혝혞혟혡혢혣혥", 7, "혮", 9, "혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],
-      ["c341", "혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝", 4],
-      ["c361", "홢", 4, "홨홪", 5, "홲홳홵", 11],
-      ["c381", "횁횂횄횆", 5, "횎횏횑횒횓횕", 7, "횞횠횢", 5, "횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],
-      ["c441", "횫횭횮횯횱", 7, "횺횼", 7, "훆훇훉훊훋"],
-      ["c461", "훍훎훏훐훒훓훕훖훘훚", 5, "훡훢훣훥훦훧훩", 4],
-      ["c481", "훮훯훱훲훳훴훶", 5, "훾훿휁휂휃휅", 11, "휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],
-      ["c541", "휕휖휗휚휛휝휞휟휡", 6, "휪휬휮", 5, "휶휷휹"],
-      ["c561", "휺휻휽", 6, "흅흆흈흊", 5, "흒흓흕흚", 4],
-      ["c581", "흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵", 6, "흾흿힀힂", 5, "힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],
-      ["c641", "힍힎힏힑", 6, "힚힜힞", 5],
-      ["c6a1", "퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],
-      ["c7a1", "퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],
-      ["c8a1", "혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],
-      ["caa1", "伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],
-      ["cba1", "匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],
-      ["cca1", "瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],
-      ["cda1", "棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],
-      ["cea1", "科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],
-      ["cfa1", "區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],
-      ["d0a1", "鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],
-      ["d1a1", "朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩", 5, "那樂", 4, "諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],
-      ["d2a1", "納臘蠟衲囊娘廊", 4, "乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧", 5, "駑魯", 10, "濃籠聾膿農惱牢磊腦賂雷尿壘", 7, "嫩訥杻紐勒", 5, "能菱陵尼泥匿溺多茶"],
-      ["d3a1", "丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],
-      ["d4a1", "棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],
-      ["d5a1", "蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],
-      ["d6a1", "煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],
-      ["d7a1", "遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],
-      ["d8a1", "立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],
-      ["d9a1", "蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],
-      ["daa1", "汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],
-      ["dba1", "發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],
-      ["dca1", "碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],
-      ["dda1", "孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],
-      ["dea1", "脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],
-      ["dfa1", "傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],
-      ["e0a1", "胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],
-      ["e1a1", "聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],
-      ["e2a1", "戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],
-      ["e3a1", "嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],
-      ["e4a1", "沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],
-      ["e5a1", "櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],
-      ["e6a1", "旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],
-      ["e7a1", "簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],
-      ["e8a1", "烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],
-      ["e9a1", "窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],
-      ["eaa1", "運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],
-      ["eba1", "濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],
-      ["eca1", "議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],
-      ["eda1", "立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],
-      ["eea1", "障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],
-      ["efa1", "煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],
-      ["f0a1", "靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],
-      ["f1a1", "踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],
-      ["f2a1", "咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],
-      ["f3a1", "鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],
-      ["f4a1", "責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],
-      ["f5a1", "椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],
-      ["f6a1", "贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],
-      ["f7a1", "鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],
-      ["f8a1", "阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],
-      ["f9a1", "品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],
-      ["faa1", "行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],
-      ["fba1", "形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],
-      ["fca1", "禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],
-      ["fda1", "爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/cp950.json
-var require_cp950 = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/cp950.json"(exports, module) {
-    module.exports = [
-      ["0", "\0", 127],
-      ["a140", "　，、。．‧；：？！︰…‥﹐﹑﹒·﹔﹕﹖﹗｜–︱—︳╴︴﹏（）︵︶｛｝︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],
-      ["a1a1", "﹛﹜﹝﹞‘’“”〝〞‵′＃＆＊※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯￣＿ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡＋－×÷±√＜＞＝≦≧≠∞≒≡﹢", 4, "～∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣／"],
-      ["a240", "＼∕﹨＄￥〒￠￡％＠℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁", 7, "▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],
-      ["a2a1", "╮╰╯═╞╪╡◢◣◥◤╱╲╳０", 9, "Ⅰ", 9, "〡", 8, "十卄卅Ａ", 25, "ａ", 21],
-      ["a340", "ｗｘｙｚΑ", 16, "Σ", 6, "α", 16, "σ", 6, "ㄅ", 10],
-      ["a3a1", "ㄐ", 25, "˙ˉˊˇˋ"],
-      ["a3e1", "€"],
-      ["a440", "一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],
-      ["a4a1", "丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],
-      ["a540", "世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],
-      ["a5a1", "央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],
-      ["a640", "共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],
-      ["a6a1", "式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],
-      ["a740", "作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],
-      ["a7a1", "均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],
-      ["a840", "杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],
-      ["a8a1", "芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],
-      ["a940", "咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],
-      ["a9a1", "屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],
-      ["aa40", "昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],
-      ["aaa1", "炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],
-      ["ab40", "陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],
-      ["aba1", "哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],
-      ["ac40", "拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],
-      ["aca1", "活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],
-      ["ad40", "耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],
-      ["ada1", "迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],
-      ["ae40", "哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],
-      ["aea1", "恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],
-      ["af40", "浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],
-      ["afa1", "砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],
-      ["b040", "虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],
-      ["b0a1", "陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],
-      ["b140", "娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],
-      ["b1a1", "情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],
-      ["b240", "毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],
-      ["b2a1", "瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],
-      ["b340", "莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],
-      ["b3a1", "部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],
-      ["b440", "婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],
-      ["b4a1", "插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],
-      ["b540", "溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],
-      ["b5a1", "窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],
-      ["b640", "詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],
-      ["b6a1", "間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],
-      ["b740", "媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],
-      ["b7a1", "楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],
-      ["b840", "睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],
-      ["b8a1", "腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],
-      ["b940", "辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],
-      ["b9a1", "飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],
-      ["ba40", "愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],
-      ["baa1", "滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],
-      ["bb40", "罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],
-      ["bba1", "說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],
-      ["bc40", "劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],
-      ["bca1", "慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],
-      ["bd40", "瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],
-      ["bda1", "翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],
-      ["be40", "輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],
-      ["bea1", "鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],
-      ["bf40", "濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],
-      ["bfa1", "縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],
-      ["c040", "錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],
-      ["c0a1", "嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],
-      ["c140", "瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],
-      ["c1a1", "薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],
-      ["c240", "駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],
-      ["c2a1", "癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],
-      ["c340", "鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],
-      ["c3a1", "獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],
-      ["c440", "願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],
-      ["c4a1", "纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],
-      ["c540", "護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],
-      ["c5a1", "禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],
-      ["c640", "讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],
-      ["c940", "乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],
-      ["c9a1", "氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],
-      ["ca40", "汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],
-      ["caa1", "吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],
-      ["cb40", "杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],
-      ["cba1", "芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],
-      ["cc40", "坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],
-      ["cca1", "怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],
-      ["cd40", "泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],
-      ["cda1", "矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],
-      ["ce40", "哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],
-      ["cea1", "峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],
-      ["cf40", "柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],
-      ["cfa1", "洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],
-      ["d040", "穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],
-      ["d0a1", "苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],
-      ["d140", "唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],
-      ["d1a1", "恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],
-      ["d240", "毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],
-      ["d2a1", "牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],
-      ["d340", "笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],
-      ["d3a1", "荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],
-      ["d440", "酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],
-      ["d4a1", "唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],
-      ["d540", "崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],
-      ["d5a1", "捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],
-      ["d640", "淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],
-      ["d6a1", "痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],
-      ["d740", "耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],
-      ["d7a1", "蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],
-      ["d840", "釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],
-      ["d8a1", "堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],
-      ["d940", "惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],
-      ["d9a1", "晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],
-      ["da40", "湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],
-      ["daa1", "琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],
-      ["db40", "罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],
-      ["dba1", "菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],
-      ["dc40", "軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],
-      ["dca1", "隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],
-      ["dd40", "媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],
-      ["dda1", "搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],
-      ["de40", "毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],
-      ["dea1", "煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],
-      ["df40", "稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],
-      ["dfa1", "腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],
-      ["e040", "觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],
-      ["e0a1", "遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],
-      ["e140", "凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],
-      ["e1a1", "寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],
-      ["e240", "榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],
-      ["e2a1", "漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],
-      ["e340", "禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],
-      ["e3a1", "耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],
-      ["e440", "裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],
-      ["e4a1", "銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],
-      ["e540", "噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],
-      ["e5a1", "憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],
-      ["e640", "澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],
-      ["e6a1", "獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],
-      ["e740", "膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],
-      ["e7a1", "蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],
-      ["e840", "踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],
-      ["e8a1", "銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],
-      ["e940", "噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],
-      ["e9a1", "憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],
-      ["ea40", "澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],
-      ["eaa1", "瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],
-      ["eb40", "蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],
-      ["eba1", "諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],
-      ["ec40", "錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],
-      ["eca1", "魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],
-      ["ed40", "檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],
-      ["eda1", "瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],
-      ["ee40", "蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],
-      ["eea1", "謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],
-      ["ef40", "鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],
-      ["efa1", "鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],
-      ["f040", "璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],
-      ["f0a1", "臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],
-      ["f140", "蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],
-      ["f1a1", "鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],
-      ["f240", "徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],
-      ["f2a1", "礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],
-      ["f340", "譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],
-      ["f3a1", "鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],
-      ["f440", "嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],
-      ["f4a1", "禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],
-      ["f540", "鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],
-      ["f5a1", "鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],
-      ["f640", "蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],
-      ["f6a1", "騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],
-      ["f740", "糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],
-      ["f7a1", "驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],
-      ["f840", "讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],
-      ["f8a1", "齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],
-      ["f940", "纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],
-      ["f9a1", "龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/tables/big5-added.json
-var require_big5_added = __commonJS({
-  "node_modules/iconv-lite/encodings/tables/big5-added.json"(exports, module) {
-    module.exports = [
-      ["8740", "䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],
-      ["8767", "綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],
-      ["87a1", "𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],
-      ["8840", "㇀", 4, "𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],
-      ["88a1", "ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],
-      ["8940", "𪎩𡅅"],
-      ["8943", "攊"],
-      ["8946", "丽滝鵎釟"],
-      ["894c", "𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],
-      ["89a1", "琑糼緍楆竉刧"],
-      ["89ab", "醌碸酞肼"],
-      ["89b0", "贋胶𠧧"],
-      ["89b5", "肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],
-      ["89c1", "溚舾甙"],
-      ["89c5", "䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],
-      ["8a40", "𧶄唥"],
-      ["8a43", "𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],
-      ["8a64", "𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],
-      ["8a76", "䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],
-      ["8aa1", "𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],
-      ["8aac", "䠋𠆩㿺塳𢶍"],
-      ["8ab2", "𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],
-      ["8abb", "䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],
-      ["8ac9", "𪘁𠸉𢫏𢳉"],
-      ["8ace", "𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],
-      ["8adf", "𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],
-      ["8af6", "𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],
-      ["8b40", "𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],
-      ["8b55", "𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],
-      ["8ba1", "𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],
-      ["8bde", "𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],
-      ["8c40", "倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],
-      ["8ca1", "𣏹椙橃𣱣泿"],
-      ["8ca7", "爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],
-      ["8cc9", "顨杫䉶圽"],
-      ["8cce", "藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],
-      ["8ce6", "峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],
-      ["8d40", "𠮟"],
-      ["8d42", "𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],
-      ["8da1", "㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],
-      ["8e40", "𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],
-      ["8ea1", "繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],
-      ["8f40", "蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],
-      ["8fa1", "𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],
-      ["9040", "趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],
-      ["90a1", "𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],
-      ["9140", "𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],
-      ["91a1", "鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],
-      ["9240", "𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],
-      ["92a1", "働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],
-      ["9340", "媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],
-      ["93a1", "摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],
-      ["9440", "銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],
-      ["94a1", "㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],
-      ["9540", "𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],
-      ["95a1", "衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],
-      ["9640", "桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],
-      ["96a1", "𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],
-      ["9740", "愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],
-      ["97a1", "𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],
-      ["9840", "𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],
-      ["98a1", "咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],
-      ["9940", "䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],
-      ["99a1", "䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],
-      ["9a40", "鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],
-      ["9aa1", "黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],
-      ["9b40", "𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],
-      ["9b62", "𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],
-      ["9ba1", "椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],
-      ["9c40", "嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],
-      ["9ca1", "㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],
-      ["9d40", "𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],
-      ["9da1", "辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],
-      ["9e40", "𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],
-      ["9ea1", "鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],
-      ["9ead", "𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],
-      ["9ec5", "㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],
-      ["9ef5", "噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],
-      ["9f40", "籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],
-      ["9f4f", "凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],
-      ["9fa1", "椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],
-      ["9fae", "酙隁酜"],
-      ["9fb2", "酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],
-      ["9fc1", "𤤙盖鮝个𠳔莾衂"],
-      ["9fc9", "届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],
-      ["9fdb", "歒酼龥鮗頮颴骺麨麄煺笔"],
-      ["9fe7", "毺蠘罸"],
-      ["9feb", "嘠𪙊蹷齓"],
-      ["9ff0", "跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],
-      ["a040", "𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],
-      ["a055", "𡠻𦸅"],
-      ["a058", "詾𢔛"],
-      ["a05b", "惽癧髗鵄鍮鮏蟵"],
-      ["a063", "蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],
-      ["a073", "坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],
-      ["a0a1", "嵗𨯂迚𨸹"],
-      ["a0a6", "僙𡵆礆匲阸𠼻䁥"],
-      ["a0ae", "矾"],
-      ["a0b0", "糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],
-      ["a0d4", "覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],
-      ["a0e2", "罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],
-      ["a3c0", "␀", 31, "␡"],
-      ["c6a1", "①", 9, "⑴", 9, "ⅰ", 9, "丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー［］✽ぁ", 23],
-      ["c740", "す", 58, "ァアィイ"],
-      ["c7a1", "ゥ", 81, "А", 5, "ЁЖ", 4],
-      ["c840", "Л", 26, "ёж", 25, "⇧↸↹㇏𠃌乚𠂊刂䒑"],
-      ["c8a1", "龰冈龱𧘇"],
-      ["c8cd", "￢￤＇＂㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],
-      ["c8f5", "ʃɐɛɔɵœøŋʊɪ"],
-      ["f9fe", "￭"],
-      ["fa40", "𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],
-      ["faa1", "鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],
-      ["fb40", "𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],
-      ["fba1", "𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],
-      ["fc40", "廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],
-      ["fca1", "𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],
-      ["fd40", "𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],
-      ["fda1", "𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],
-      ["fe40", "鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],
-      ["fea1", "𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]
-    ];
-  }
-});
-
-// node_modules/iconv-lite/encodings/dbcs-data.js
-var require_dbcs_data = __commonJS({
-  "node_modules/iconv-lite/encodings/dbcs-data.js"(exports, module) {
-    "use strict";
-    module.exports = {
-      // == Japanese/ShiftJIS ====================================================
-      // All japanese encodings are based on JIS X set of standards:
-      // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
-      // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. 
-      //              Has several variations in 1978, 1983, 1990 and 1997.
-      // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
-      // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.
-      //              2 planes, first is superset of 0208, second - revised 0212.
-      //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)
-      // Byte encodings are:
-      //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte
-      //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.
-      //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.
-      //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.
-      //               0x00-0x7F       - lower part of 0201
-      //               0x8E, 0xA1-0xDF - upper part of 0201
-      //               (0xA1-0xFE)x2   - 0208 plane (94x94).
-      //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).
-      //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
-      //               Used as-is in ISO2022 family.
-      //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, 
-      //                0201-1976 Roman, 0208-1978, 0208-1983.
-      //  * ISO2022-JP-1: Adds esc seq for 0212-1990.
-      //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.
-      //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.
-      //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.
-      //
-      // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.
-      //
-      // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html
-      "shiftjis": {
-        type: "_dbcs",
-        table: function() {
-          return require_shiftjis();
-        },
-        encodeAdd: {
-          "¥": 92,
-          "‾": 126
-        },
-        encodeSkipVals: [{
-          from: 60736,
-          to: 63808
-        }]
-      },
-      "csshiftjis": "shiftjis",
-      "mskanji": "shiftjis",
-      "sjis": "shiftjis",
-      "windows31j": "shiftjis",
-      "ms31j": "shiftjis",
-      "xsjis": "shiftjis",
-      "windows932": "shiftjis",
-      "ms932": "shiftjis",
-      "932": "shiftjis",
-      "cp932": "shiftjis",
-      "eucjp": {
-        type: "_dbcs",
-        table: function() {
-          return require_eucjp();
-        },
-        encodeAdd: {
-          "¥": 92,
-          "‾": 126
-        }
-      },
-      // TODO: KDDI extension to Shift_JIS
-      // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.
-      // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.
-      // == Chinese/GBK ==========================================================
-      // http://en.wikipedia.org/wiki/GBK
-      // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder
-      // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936
-      "gb2312": "cp936",
-      "gb231280": "cp936",
-      "gb23121980": "cp936",
-      "csgb2312": "cp936",
-      "csiso58gb231280": "cp936",
-      "euccn": "cp936",
-      // Microsoft's CP936 is a subset and approximation of GBK.
-      "windows936": "cp936",
-      "ms936": "cp936",
-      "936": "cp936",
-      "cp936": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp936();
-        }
-      },
-      // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.
-      "gbk": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp936().concat(require_gbk_added());
-        }
-      },
-      "xgbk": "gbk",
-      "isoir58": "gbk",
-      // GB18030 is an algorithmic extension of GBK.
-      // Main source: https://www.w3.org/TR/encoding/#gbk-encoder
-      // http://icu-project.org/docs/papers/gb18030.html
-      // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml
-      // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0
-      "gb18030": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp936().concat(require_gbk_added());
-        },
-        gb18030: function() {
-          return require_gb18030_ranges();
-        },
-        encodeSkipVals: [128],
-        encodeAdd: {
-          "€": 41699
-        }
-      },
-      "chinese": "gb18030",
-      // == Korean ===============================================================
-      // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.
-      "windows949": "cp949",
-      "ms949": "cp949",
-      "949": "cp949",
-      "cp949": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp949();
-        }
-      },
-      "cseuckr": "cp949",
-      "csksc56011987": "cp949",
-      "euckr": "cp949",
-      "isoir149": "cp949",
-      "korean": "cp949",
-      "ksc56011987": "cp949",
-      "ksc56011989": "cp949",
-      "ksc5601": "cp949",
-      // == Big5/Taiwan/Hong Kong ================================================
-      // There are lots of tables for Big5 and cp950. Please see the following links for history:
-      // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html
-      // Variations, in roughly number of defined chars:
-      //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT
-      //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/
-      //  * Big5-2003 (Taiwan standard) almost superset of cp950.
-      //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
-      //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. 
-      //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
-      //    Plus, it has 4 combining sequences.
-      //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299
-      //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.
-      //    Implementations are not consistent within browsers; sometimes labeled as just big5.
-      //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.
-      //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
-      //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.
-      //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
-      //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
-      // 
-      // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
-      // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
-      "windows950": "cp950",
-      "ms950": "cp950",
-      "950": "cp950",
-      "cp950": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp950();
-        }
-      },
-      // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.
-      "big5": "big5hkscs",
-      "big5hkscs": {
-        type: "_dbcs",
-        table: function() {
-          return require_cp950().concat(require_big5_added());
-        },
-        encodeSkipVals: [41676]
-      },
-      "cnbig5": "big5hkscs",
-      "csbig5": "big5hkscs",
-      "xxbig5": "big5hkscs"
-    };
-  }
-});
-
-// node_modules/iconv-lite/encodings/index.js
-var require_encodings = __commonJS({
-  "node_modules/iconv-lite/encodings/index.js"(exports, module) {
-    "use strict";
-    var modules = [require_internal(), require_utf16(), require_utf7(), require_sbcs_codec(), require_sbcs_data(), require_sbcs_data_generated(), require_dbcs_codec(), require_dbcs_data()];
-    for (i = 0; i < modules.length; i++) {
-      module = modules[i];
-      for (enc in module) if (Object.prototype.hasOwnProperty.call(module, enc)) exports[enc] = module[enc];
-    }
-    var module;
-    var enc;
-    var i;
-  }
-});
-
-// node_modules/iconv-lite/lib/streams.js
-var require_streams = __commonJS({
-  "node_modules/iconv-lite/lib/streams.js"(exports, module) {
-    "use strict";
-    var Buffer2 = __require("buffer").Buffer;
-    var Transform = __require("stream").Transform;
-    module.exports = function(iconv) {
-      iconv.encodeStream = function encodeStream(encoding, options) {
-        return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);
-      };
-      iconv.decodeStream = function decodeStream(encoding, options) {
-        return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);
-      };
-      iconv.supportsStreams = true;
-      iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;
-      iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;
-      iconv._collect = IconvLiteDecoderStream.prototype.collect;
-    };
-    function IconvLiteEncoderStream(conv, options) {
-      this.conv = conv;
-      options = options || {};
-      options.decodeStrings = false;
-      Transform.call(this, options);
-    }
-    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {
-      constructor: {
-        value: IconvLiteEncoderStream
-      }
-    });
-    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
-      if (typeof chunk != "string") return done(new Error("Iconv encoding stream needs strings as its input."));
-      try {
-        var res = this.conv.write(chunk);
-        if (res && res.length) this.push(res);
-        done();
-      } catch (e) {
-        done(e);
-      }
-    };
-    IconvLiteEncoderStream.prototype._flush = function(done) {
-      try {
-        var res = this.conv.end();
-        if (res && res.length) this.push(res);
-        done();
-      } catch (e) {
-        done(e);
-      }
-    };
-    IconvLiteEncoderStream.prototype.collect = function(cb) {
-      var chunks = [];
-      this.on("error", cb);
-      this.on("data", function(chunk) {
-        chunks.push(chunk);
-      });
-      this.on("end", function() {
-        cb(null, Buffer2.concat(chunks));
-      });
-      return this;
-    };
-    function IconvLiteDecoderStream(conv, options) {
-      this.conv = conv;
-      options = options || {};
-      options.encoding = this.encoding = "utf8";
-      Transform.call(this, options);
-    }
-    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {
-      constructor: {
-        value: IconvLiteDecoderStream
-      }
-    });
-    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
-      if (!Buffer2.isBuffer(chunk)) return done(new Error("Iconv decoding stream needs buffers as its input."));
-      try {
-        var res = this.conv.write(chunk);
-        if (res && res.length) this.push(res, this.encoding);
-        done();
-      } catch (e) {
-        done(e);
-      }
-    };
-    IconvLiteDecoderStream.prototype._flush = function(done) {
-      try {
-        var res = this.conv.end();
-        if (res && res.length) this.push(res, this.encoding);
-        done();
-      } catch (e) {
-        done(e);
-      }
-    };
-    IconvLiteDecoderStream.prototype.collect = function(cb) {
-      var res = "";
-      this.on("error", cb);
-      this.on("data", function(chunk) {
-        res += chunk;
-      });
-      this.on("end", function() {
-        cb(null, res);
-      });
-      return this;
-    };
-  }
-});
-
-// node_modules/iconv-lite/lib/extend-node.js
-var require_extend_node = __commonJS({
-  "node_modules/iconv-lite/lib/extend-node.js"(exports, module) {
-    "use strict";
-    var Buffer2 = __require("buffer").Buffer;
-    module.exports = function(iconv) {
-      var original = void 0;
-      iconv.supportsNodeEncodingsExtension = !(Buffer2.from || new Buffer2(0) instanceof Uint8Array);
-      iconv.extendNodeEncodings = function extendNodeEncodings() {
-        if (original) return;
-        original = {};
-        if (!iconv.supportsNodeEncodingsExtension) {
-          console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node");
-          console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility");
-          return;
-        }
-        var nodeNativeEncodings = {
-          "hex": true,
-          "utf8": true,
-          "utf-8": true,
-          "ascii": true,
-          "binary": true,
-          "base64": true,
-          "ucs2": true,
-          "ucs-2": true,
-          "utf16le": true,
-          "utf-16le": true
-        };
-        Buffer2.isNativeEncoding = function(enc) {
-          return enc && nodeNativeEncodings[enc.toLowerCase()];
-        };
-        var SlowBuffer = __require("buffer").SlowBuffer;
-        original.SlowBufferToString = SlowBuffer.prototype.toString;
-        SlowBuffer.prototype.toString = function(encoding, start, end) {
-          encoding = String(encoding || "utf8").toLowerCase();
-          if (Buffer2.isNativeEncoding(encoding)) return original.SlowBufferToString.call(this, encoding, start, end);
-          if (typeof start == "undefined") start = 0;
-          if (typeof end == "undefined") end = this.length;
-          return iconv.decode(this.slice(start, end), encoding);
-        };
-        original.SlowBufferWrite = SlowBuffer.prototype.write;
-        SlowBuffer.prototype.write = function(string, offset, length, encoding) {
-          if (isFinite(offset)) {
-            if (!isFinite(length)) {
-              encoding = length;
-              length = void 0;
-            }
-          } else {
-            var swap = encoding;
-            encoding = offset;
-            offset = length;
-            length = swap;
-          }
-          offset = +offset || 0;
-          var remaining = this.length - offset;
-          if (!length) {
-            length = remaining;
-          } else {
-            length = +length;
-            if (length > remaining) {
-              length = remaining;
-            }
-          }
-          encoding = String(encoding || "utf8").toLowerCase();
-          if (Buffer2.isNativeEncoding(encoding)) return original.SlowBufferWrite.call(this, string, offset, length, encoding);
-          if (string.length > 0 && (length < 0 || offset < 0)) throw new RangeError("attempt to write beyond buffer bounds");
-          var buf = iconv.encode(string, encoding);
-          if (buf.length < length) length = buf.length;
-          buf.copy(this, offset, 0, length);
-          return length;
-        };
-        original.BufferIsEncoding = Buffer2.isEncoding;
-        Buffer2.isEncoding = function(encoding) {
-          return Buffer2.isNativeEncoding(encoding) || iconv.encodingExists(encoding);
-        };
-        original.BufferByteLength = Buffer2.byteLength;
-        Buffer2.byteLength = SlowBuffer.byteLength = function(str, encoding) {
-          encoding = String(encoding || "utf8").toLowerCase();
-          if (Buffer2.isNativeEncoding(encoding)) return original.BufferByteLength.call(this, str, encoding);
-          return iconv.encode(str, encoding).length;
-        };
-        original.BufferToString = Buffer2.prototype.toString;
-        Buffer2.prototype.toString = function(encoding, start, end) {
-          encoding = String(encoding || "utf8").toLowerCase();
-          if (Buffer2.isNativeEncoding(encoding)) return original.BufferToString.call(this, encoding, start, end);
-          if (typeof start == "undefined") start = 0;
-          if (typeof end == "undefined") end = this.length;
-          return iconv.decode(this.slice(start, end), encoding);
-        };
-        original.BufferWrite = Buffer2.prototype.write;
-        Buffer2.prototype.write = function(string, offset, length, encoding) {
-          var _offset = offset, _length = length, _encoding = encoding;
-          if (isFinite(offset)) {
-            if (!isFinite(length)) {
-              encoding = length;
-              length = void 0;
-            }
-          } else {
-            var swap = encoding;
-            encoding = offset;
-            offset = length;
-            length = swap;
-          }
-          encoding = String(encoding || "utf8").toLowerCase();
-          if (Buffer2.isNativeEncoding(encoding)) return original.BufferWrite.call(this, string, _offset, _length, _encoding);
-          offset = +offset || 0;
-          var remaining = this.length - offset;
-          if (!length) {
-            length = remaining;
-          } else {
-            length = +length;
-            if (length > remaining) {
-              length = remaining;
-            }
-          }
-          if (string.length > 0 && (length < 0 || offset < 0)) throw new RangeError("attempt to write beyond buffer bounds");
-          var buf = iconv.encode(string, encoding);
-          if (buf.length < length) length = buf.length;
-          buf.copy(this, offset, 0, length);
-          return length;
-        };
-        if (iconv.supportsStreams) {
-          var Readable = __require("stream").Readable;
-          original.ReadableSetEncoding = Readable.prototype.setEncoding;
-          Readable.prototype.setEncoding = function setEncoding(enc, options) {
-            this._readableState.decoder = iconv.getDecoder(enc, options);
-            this._readableState.encoding = enc;
-          };
-          Readable.prototype.collect = iconv._collect;
-        }
-      };
-      iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {
-        if (!iconv.supportsNodeEncodingsExtension) return;
-        if (!original) throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.");
-        delete Buffer2.isNativeEncoding;
-        var SlowBuffer = __require("buffer").SlowBuffer;
-        SlowBuffer.prototype.toString = original.SlowBufferToString;
-        SlowBuffer.prototype.write = original.SlowBufferWrite;
-        Buffer2.isEncoding = original.BufferIsEncoding;
-        Buffer2.byteLength = original.BufferByteLength;
-        Buffer2.prototype.toString = original.BufferToString;
-        Buffer2.prototype.write = original.BufferWrite;
-        if (iconv.supportsStreams) {
-          var Readable = __require("stream").Readable;
-          Readable.prototype.setEncoding = original.ReadableSetEncoding;
-          delete Readable.prototype.collect;
-        }
-        original = void 0;
-      };
-    };
-  }
-});
-
-// node_modules/iconv-lite/lib/index.js
-var require_lib = __commonJS({
-  "node_modules/iconv-lite/lib/index.js"(exports, module) {
-    "use strict";
-    var Buffer2 = require_safer().Buffer;
-    var bomHandling = require_bom_handling();
-    var iconv = module.exports;
-    iconv.encodings = null;
-    iconv.defaultCharUnicode = "�";
-    iconv.defaultCharSingleByte = "?";
-    iconv.encode = function encode(str, encoding, options) {
-      str = "" + (str || "");
-      var encoder = iconv.getEncoder(encoding, options);
-      var res = encoder.write(str);
-      var trail = encoder.end();
-      return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res;
-    };
-    iconv.decode = function decode(buf, encoding, options) {
-      if (typeof buf === "string") {
-        if (!iconv.skipDecodeWarning) {
-          console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
-          iconv.skipDecodeWarning = true;
-        }
-        buf = Buffer2.from("" + (buf || ""), "binary");
-      }
-      var decoder = iconv.getDecoder(encoding, options);
-      var res = decoder.write(buf);
-      var trail = decoder.end();
-      return trail ? res + trail : res;
-    };
-    iconv.encodingExists = function encodingExists(enc) {
-      try {
-        iconv.getCodec(enc);
-        return true;
-      } catch (e) {
-        return false;
-      }
-    };
-    iconv.toEncoding = iconv.encode;
-    iconv.fromEncoding = iconv.decode;
-    iconv._codecDataCache = {};
-    iconv.getCodec = function getCodec(encoding) {
-      if (!iconv.encodings) iconv.encodings = require_encodings();
-      var enc = iconv._canonicalizeEncoding(encoding);
-      var codecOptions = {};
-      while (true) {
-        var codec = iconv._codecDataCache[enc];
-        if (codec) return codec;
-        var codecDef = iconv.encodings[enc];
-        switch (typeof codecDef) {
-          case "string":
-            enc = codecDef;
-            break;
-          case "object":
-            for (var key in codecDef) codecOptions[key] = codecDef[key];
-            if (!codecOptions.encodingName) codecOptions.encodingName = enc;
-            enc = codecDef.type;
-            break;
-          case "function":
-            if (!codecOptions.encodingName) codecOptions.encodingName = enc;
-            codec = new codecDef(codecOptions, iconv);
-            iconv._codecDataCache[codecOptions.encodingName] = codec;
-            return codec;
-          default:
-            throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')");
-        }
-      }
-    };
-    iconv._canonicalizeEncoding = function(encoding) {
-      return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "");
-    };
-    iconv.getEncoder = function getEncoder(encoding, options) {
-      var codec = iconv.getCodec(encoding), encoder = new codec.encoder(options, codec);
-      if (codec.bomAware && options && options.addBOM) encoder = new bomHandling.PrependBOM(encoder, options);
-      return encoder;
-    };
-    iconv.getDecoder = function getDecoder(encoding, options) {
-      var codec = iconv.getCodec(encoding), decoder = new codec.decoder(options, codec);
-      if (codec.bomAware && !(options && options.stripBOM === false)) decoder = new bomHandling.StripBOM(decoder, options);
-      return decoder;
-    };
-    var nodeVer = typeof process !== "undefined" && process.versions && process.versions.node;
-    if (nodeVer) {
-      nodeVerArr = nodeVer.split(".").map(Number);
-      if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {
-        require_streams()(iconv);
-      }
-      require_extend_node()(iconv);
-    }
-    var nodeVerArr;
-    if (false) {
-      console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
-    }
-  }
-});
-
-// node_modules/unpipe/index.js
-var require_unpipe = __commonJS({
-  "node_modules/unpipe/index.js"(exports, module) {
-    "use strict";
-    module.exports = unpipe;
-    function hasPipeDataListeners(stream) {
-      var listeners = stream.listeners("data");
-      for (var i = 0; i < listeners.length; i++) {
-        if (listeners[i].name === "ondata") {
-          return true;
-        }
-      }
-      return false;
-    }
-    function unpipe(stream) {
-      if (!stream) {
-        throw new TypeError("argument stream is required");
-      }
-      if (typeof stream.unpipe === "function") {
-        stream.unpipe();
-        return;
-      }
-      if (!hasPipeDataListeners(stream)) {
-        return;
-      }
-      var listener;
-      var listeners = stream.listeners("close");
-      for (var i = 0; i < listeners.length; i++) {
-        listener = listeners[i];
-        if (listener.name !== "cleanup" && listener.name !== "onclose") {
-          continue;
-        }
-        listener.call(stream);
-      }
-    }
-  }
-});
-
-// node_modules/raw-body/index.js
-var require_raw_body = __commonJS({
-  "node_modules/raw-body/index.js"(exports, module) {
-    "use strict";
-    var asyncHooks = tryRequireAsyncHooks();
-    var bytes = require_bytes();
-    var createError = require_http_errors();
-    var iconv = require_lib();
-    var unpipe = require_unpipe();
-    module.exports = getRawBody;
-    var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /;
-    function getDecoder(encoding) {
-      if (!encoding) return null;
-      try {
-        return iconv.getDecoder(encoding);
-      } catch (e) {
-        if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e;
-        throw createError(415, "specified encoding unsupported", {
-          encoding,
-          type: "encoding.unsupported"
-        });
-      }
-    }
-    function getRawBody(stream, options, callback) {
-      var done = callback;
-      var opts = options || {};
-      if (stream === void 0) {
-        throw new TypeError("argument stream is required");
-      } else if (typeof stream !== "object" || stream === null || typeof stream.on !== "function") {
-        throw new TypeError("argument stream must be a stream");
-      }
-      if (options === true || typeof options === "string") {
-        opts = {
-          encoding: options
-        };
-      }
-      if (typeof options === "function") {
-        done = options;
-        opts = {};
-      }
-      if (done !== void 0 && typeof done !== "function") {
-        throw new TypeError("argument callback must be a function");
-      }
-      if (!done && !global.Promise) {
-        throw new TypeError("argument callback is required");
-      }
-      var encoding = opts.encoding !== true ? opts.encoding : "utf-8";
-      var limit = bytes.parse(opts.limit);
-      var length = opts.length != null && !isNaN(opts.length) ? parseInt(opts.length, 10) : null;
-      if (done) {
-        return readStream(stream, encoding, length, limit, wrap(done));
-      }
-      return new Promise(function executor(resolve, reject) {
-        readStream(stream, encoding, length, limit, function onRead(err, buf) {
-          if (err) return reject(err);
-          resolve(buf);
-        });
-      });
-    }
-    function halt(stream) {
-      unpipe(stream);
-      if (typeof stream.pause === "function") {
-        stream.pause();
-      }
-    }
-    function readStream(stream, encoding, length, limit, callback) {
-      var complete = false;
-      var sync = true;
-      if (limit !== null && length !== null && length > limit) {
-        return done(createError(413, "request entity too large", {
-          expected: length,
-          length,
-          limit,
-          type: "entity.too.large"
-        }));
-      }
-      var state = stream._readableState;
-      if (stream._decoder || state && (state.encoding || state.decoder)) {
-        return done(createError(500, "stream encoding should not be set", {
-          type: "stream.encoding.set"
-        }));
-      }
-      if (typeof stream.readable !== "undefined" && !stream.readable) {
-        return done(createError(500, "stream is not readable", {
-          type: "stream.not.readable"
-        }));
-      }
-      var received = 0;
-      var decoder;
-      try {
-        decoder = getDecoder(encoding);
-      } catch (err) {
-        return done(err);
-      }
-      var buffer = decoder ? "" : [];
-      stream.on("aborted", onAborted);
-      stream.on("close", cleanup);
-      stream.on("data", onData);
-      stream.on("end", onEnd);
-      stream.on("error", onEnd);
-      sync = false;
-      function done() {
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        complete = true;
-        if (sync) {
-          process.nextTick(invokeCallback);
-        } else {
-          invokeCallback();
-        }
-        function invokeCallback() {
-          cleanup();
-          if (args[0]) {
-            halt(stream);
-          }
-          callback.apply(null, args);
-        }
-      }
-      function onAborted() {
-        if (complete) return;
-        done(createError(400, "request aborted", {
-          code: "ECONNABORTED",
-          expected: length,
-          length,
-          received,
-          type: "request.aborted"
-        }));
-      }
-      function onData(chunk) {
-        if (complete) return;
-        received += chunk.length;
-        if (limit !== null && received > limit) {
-          done(createError(413, "request entity too large", {
-            limit,
-            received,
-            type: "entity.too.large"
-          }));
-        } else if (decoder) {
-          buffer += decoder.write(chunk);
-        } else {
-          buffer.push(chunk);
-        }
-      }
-      function onEnd(err) {
-        if (complete) return;
-        if (err) return done(err);
-        if (length !== null && received !== length) {
-          done(createError(400, "request size did not match content length", {
-            expected: length,
-            length,
-            received,
-            type: "request.size.invalid"
-          }));
-        } else {
-          var string = decoder ? buffer + (decoder.end() || "") : Buffer.concat(buffer);
-          done(null, string);
-        }
-      }
-      function cleanup() {
-        buffer = null;
-        stream.removeListener("aborted", onAborted);
-        stream.removeListener("data", onData);
-        stream.removeListener("end", onEnd);
-        stream.removeListener("error", onEnd);
-        stream.removeListener("close", cleanup);
-      }
-    }
-    function tryRequireAsyncHooks() {
-      try {
-        return __require("async_hooks");
-      } catch (e) {
-        return {};
-      }
-    }
-    function wrap(fn) {
-      var res;
-      if (asyncHooks.AsyncResource) {
-        res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn");
-      }
-      if (!res || !res.runInAsyncScope) {
-        return fn;
-      }
-      return res.runInAsyncScope.bind(res, fn, null);
-    }
-  }
-});
-
-// node_modules/ee-first/index.js
-var require_ee_first = __commonJS({
-  "node_modules/ee-first/index.js"(exports, module) {
-    "use strict";
-    module.exports = first;
-    function first(stuff, done) {
-      if (!Array.isArray(stuff)) throw new TypeError("arg must be an array of [ee, events...] arrays");
-      var cleanups = [];
-      for (var i = 0; i < stuff.length; i++) {
-        var arr = stuff[i];
-        if (!Array.isArray(arr) || arr.length < 2) throw new TypeError("each array member must be [ee, events...]");
-        var ee = arr[0];
-        for (var j = 1; j < arr.length; j++) {
-          var event = arr[j];
-          var fn = listener(event, callback);
-          ee.on(event, fn);
-          cleanups.push({
-            ee,
-            event,
-            fn
-          });
-        }
-      }
-      function callback() {
-        cleanup();
-        done.apply(null, arguments);
-      }
-      function cleanup() {
-        var x;
-        for (var i2 = 0; i2 < cleanups.length; i2++) {
-          x = cleanups[i2];
-          x.ee.removeListener(x.event, x.fn);
-        }
-      }
-      function thunk(fn2) {
-        done = fn2;
-      }
-      thunk.cancel = cleanup;
-      return thunk;
-    }
-    function listener(event, done) {
-      return function onevent(arg1) {
-        var args = new Array(arguments.length);
-        var ee = this;
-        var err = event === "error" ? arg1 : null;
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        done(err, ee, event, args);
-      };
-    }
-  }
-});
-
-// node_modules/on-finished/index.js
-var require_on_finished = __commonJS({
-  "node_modules/on-finished/index.js"(exports, module) {
-    "use strict";
-    module.exports = onFinished;
-    module.exports.isFinished = isFinished;
-    var asyncHooks = tryRequireAsyncHooks();
-    var first = require_ee_first();
-    var defer = typeof setImmediate === "function" ? setImmediate : function(fn) {
-      process.nextTick(fn.bind.apply(fn, arguments));
-    };
-    function onFinished(msg, listener) {
-      if (isFinished(msg) !== false) {
-        defer(listener, null, msg);
-        return msg;
-      }
-      attachListener(msg, wrap(listener));
-      return msg;
-    }
-    function isFinished(msg) {
-      var socket = msg.socket;
-      if (typeof msg.finished === "boolean") {
-        return Boolean(msg.finished || socket && !socket.writable);
-      }
-      if (typeof msg.complete === "boolean") {
-        return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable);
-      }
-      return void 0;
-    }
-    function attachFinishedListener(msg, callback) {
-      var eeMsg;
-      var eeSocket;
-      var finished = false;
-      function onFinish(error) {
-        eeMsg.cancel();
-        eeSocket.cancel();
-        finished = true;
-        callback(error);
-      }
-      eeMsg = eeSocket = first([[msg, "end", "finish"]], onFinish);
-      function onSocket(socket) {
-        msg.removeListener("socket", onSocket);
-        if (finished) return;
-        if (eeMsg !== eeSocket) return;
-        eeSocket = first([[socket, "error", "close"]], onFinish);
-      }
-      if (msg.socket) {
-        onSocket(msg.socket);
-        return;
-      }
-      msg.on("socket", onSocket);
-      if (msg.socket === void 0) {
-        patchAssignSocket(msg, onSocket);
-      }
-    }
-    function attachListener(msg, listener) {
-      var attached = msg.__onFinished;
-      if (!attached || !attached.queue) {
-        attached = msg.__onFinished = createListener(msg);
-        attachFinishedListener(msg, attached);
-      }
-      attached.queue.push(listener);
-    }
-    function createListener(msg) {
-      function listener(err) {
-        if (msg.__onFinished === listener) msg.__onFinished = null;
-        if (!listener.queue) return;
-        var queue = listener.queue;
-        listener.queue = null;
-        for (var i = 0; i < queue.length; i++) {
-          queue[i](err, msg);
-        }
-      }
-      listener.queue = [];
-      return listener;
-    }
-    function patchAssignSocket(res, callback) {
-      var assignSocket = res.assignSocket;
-      if (typeof assignSocket !== "function") return;
-      res.assignSocket = function _assignSocket(socket) {
-        assignSocket.call(this, socket);
-        callback(socket);
-      };
-    }
-    function tryRequireAsyncHooks() {
-      try {
-        return __require("async_hooks");
-      } catch (e) {
-        return {};
-      }
-    }
-    function wrap(fn) {
-      var res;
-      if (asyncHooks.AsyncResource) {
-        res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn");
-      }
-      if (!res || !res.runInAsyncScope) {
-        return fn;
-      }
-      return res.runInAsyncScope.bind(res, fn, null);
-    }
-  }
-});
-
-// node_modules/body-parser/lib/read.js
-var require_read = __commonJS({
-  "node_modules/body-parser/lib/read.js"(exports, module) {
-    "use strict";
-    var createError = require_http_errors();
-    var destroy = require_destroy();
-    var getBody = require_raw_body();
-    var iconv = require_lib();
-    var onFinished = require_on_finished();
-    var unpipe = require_unpipe();
-    var zlib = __require("zlib");
-    module.exports = read;
-    function read(req, res, next, parse, debug, options) {
-      var length;
-      var opts = options;
-      var stream;
-      req._body = true;
-      var encoding = opts.encoding !== null ? opts.encoding : null;
-      var verify = opts.verify;
-      try {
-        stream = contentstream(req, debug, opts.inflate);
-        length = stream.length;
-        stream.length = void 0;
-      } catch (err) {
-        return next(err);
-      }
-      opts.length = length;
-      opts.encoding = verify ? null : encoding;
-      if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
-        return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
-          charset: encoding.toLowerCase(),
-          type: "charset.unsupported"
-        }));
-      }
-      debug("read body");
-      getBody(stream, opts, function(error, body) {
-        if (error) {
-          var _error;
-          if (error.type === "encoding.unsupported") {
-            _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
-              charset: encoding.toLowerCase(),
-              type: "charset.unsupported"
-            });
-          } else {
-            _error = createError(400, error);
-          }
-          if (stream !== req) {
-            unpipe(req);
-            destroy(stream, true);
-          }
-          dump(req, function onfinished() {
-            next(createError(400, _error));
-          });
-          return;
-        }
-        if (verify) {
-          try {
-            debug("verify body");
-            verify(req, res, body, encoding);
-          } catch (err) {
-            next(createError(403, err, {
-              body,
-              type: err.type || "entity.verify.failed"
-            }));
-            return;
-          }
-        }
-        var str = body;
-        try {
-          debug("parse body");
-          str = typeof body !== "string" && encoding !== null ? iconv.decode(body, encoding) : body;
-          req.body = parse(str);
-        } catch (err) {
-          next(createError(400, err, {
-            body: str,
-            type: err.type || "entity.parse.failed"
-          }));
-          return;
-        }
-        next();
-      });
-    }
-    function contentstream(req, debug, inflate) {
-      var encoding = (req.headers["content-encoding"] || "identity").toLowerCase();
-      var length = req.headers["content-length"];
-      var stream;
-      debug('content-encoding "%s"', encoding);
-      if (inflate === false && encoding !== "identity") {
-        throw createError(415, "content encoding unsupported", {
-          encoding,
-          type: "encoding.unsupported"
-        });
-      }
-      switch (encoding) {
-        case "deflate":
-          stream = zlib.createInflate();
-          debug("inflate body");
-          req.pipe(stream);
-          break;
-        case "gzip":
-          stream = zlib.createGunzip();
-          debug("gunzip body");
-          req.pipe(stream);
-          break;
-        case "identity":
-          stream = req;
-          stream.length = length;
-          break;
-        default:
-          throw createError(415, 'unsupported content encoding "' + encoding + '"', {
-            encoding,
-            type: "encoding.unsupported"
-          });
-      }
-      return stream;
-    }
-    function dump(req, callback) {
-      if (onFinished.isFinished(req)) {
-        callback(null);
-      } else {
-        onFinished(req, callback);
-        req.resume();
-      }
-    }
-  }
-});
-
-// node_modules/media-typer/index.js
-var require_media_typer = __commonJS({
-  "node_modules/media-typer/index.js"(exports) {
-    var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g;
-    var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/;
-    var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/;
-    var qescRegExp = /\\([\u0000-\u007f])/g;
-    var quoteRegExp = /([\\"])/g;
-    var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/;
-    var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/;
-    var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;
-    exports.format = format;
-    exports.parse = parse;
-    function format(obj) {
-      if (!obj || typeof obj !== "object") {
-        throw new TypeError("argument obj is required");
-      }
-      var parameters = obj.parameters;
-      var subtype = obj.subtype;
-      var suffix = obj.suffix;
-      var type = obj.type;
-      if (!type || !typeNameRegExp.test(type)) {
-        throw new TypeError("invalid type");
-      }
-      if (!subtype || !subtypeNameRegExp.test(subtype)) {
-        throw new TypeError("invalid subtype");
-      }
-      var string = type + "/" + subtype;
-      if (suffix) {
-        if (!typeNameRegExp.test(suffix)) {
-          throw new TypeError("invalid suffix");
-        }
-        string += "+" + suffix;
-      }
-      if (parameters && typeof parameters === "object") {
-        var param;
-        var params = Object.keys(parameters).sort();
-        for (var i = 0; i < params.length; i++) {
-          param = params[i];
-          if (!tokenRegExp.test(param)) {
-            throw new TypeError("invalid parameter name");
-          }
-          string += "; " + param + "=" + qstring(parameters[param]);
-        }
-      }
-      return string;
-    }
-    function parse(string) {
-      if (!string) {
-        throw new TypeError("argument string is required");
-      }
-      if (typeof string === "object") {
-        string = getcontenttype(string);
-      }
-      if (typeof string !== "string") {
-        throw new TypeError("argument string is required to be a string");
-      }
-      var index = string.indexOf(";");
-      var type = index !== -1 ? string.substr(0, index) : string;
-      var key;
-      var match;
-      var obj = splitType(type);
-      var params = {};
-      var value;
-      paramRegExp.lastIndex = index;
-      while (match = paramRegExp.exec(string)) {
-        if (match.index !== index) {
-          throw new TypeError("invalid parameter format");
-        }
-        index += match[0].length;
-        key = match[1].toLowerCase();
-        value = match[2];
-        if (value[0] === '"') {
-          value = value.substr(1, value.length - 2).replace(qescRegExp, "$1");
-        }
-        params[key] = value;
-      }
-      if (index !== -1 && index !== string.length) {
-        throw new TypeError("invalid parameter format");
-      }
-      obj.parameters = params;
-      return obj;
-    }
-    function getcontenttype(obj) {
-      if (typeof obj.getHeader === "function") {
-        return obj.getHeader("content-type");
-      }
-      if (typeof obj.headers === "object") {
-        return obj.headers && obj.headers["content-type"];
-      }
-    }
-    function qstring(val) {
-      var str = String(val);
-      if (tokenRegExp.test(str)) {
-        return str;
-      }
-      if (str.length > 0 && !textRegExp.test(str)) {
-        throw new TypeError("invalid parameter value");
-      }
-      return '"' + str.replace(quoteRegExp, "\\$1") + '"';
-    }
-    function splitType(string) {
-      var match = typeRegExp.exec(string.toLowerCase());
-      if (!match) {
-        throw new TypeError("invalid media type");
-      }
-      var type = match[1];
-      var subtype = match[2];
-      var suffix;
-      var index = subtype.lastIndexOf("+");
-      if (index !== -1) {
-        suffix = subtype.substr(index + 1);
-        subtype = subtype.substr(0, index);
-      }
-      var obj = {
-        type,
-        subtype,
-        suffix
-      };
-      return obj;
-    }
-  }
-});
-
-// node_modules/mime-db/db.json
-var require_db = __commonJS({
-  "node_modules/mime-db/db.json"(exports, module) {
-    module.exports = {
-      "application/1d-interleaved-parityfec": {
-        source: "iana"
-      },
-      "application/3gpdash-qoe-report+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/3gpp-ims+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/3gpphal+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/3gpphalforms+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/a2l": {
-        source: "iana"
-      },
-      "application/ace+cbor": {
-        source: "iana"
-      },
-      "application/activemessage": {
-        source: "iana"
-      },
-      "application/activity+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-costmap+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-costmapfilter+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-directory+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-endpointcost+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-endpointcostparams+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-endpointprop+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-endpointpropparams+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-error+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-networkmap+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-networkmapfilter+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-updatestreamcontrol+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/alto-updatestreamparams+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/aml": {
-        source: "iana"
-      },
-      "application/andrew-inset": {
-        source: "iana",
-        extensions: ["ez"]
-      },
-      "application/applefile": {
-        source: "iana"
-      },
-      "application/applixware": {
-        source: "apache",
-        extensions: ["aw"]
-      },
-      "application/at+jwt": {
-        source: "iana"
-      },
-      "application/atf": {
-        source: "iana"
-      },
-      "application/atfx": {
-        source: "iana"
-      },
-      "application/atom+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["atom"]
-      },
-      "application/atomcat+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["atomcat"]
-      },
-      "application/atomdeleted+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["atomdeleted"]
-      },
-      "application/atomicmail": {
-        source: "iana"
-      },
-      "application/atomsvc+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["atomsvc"]
-      },
-      "application/atsc-dwd+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["dwd"]
-      },
-      "application/atsc-dynamic-event-message": {
-        source: "iana"
-      },
-      "application/atsc-held+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["held"]
-      },
-      "application/atsc-rdt+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/atsc-rsat+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rsat"]
-      },
-      "application/atxml": {
-        source: "iana"
-      },
-      "application/auth-policy+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/bacnet-xdd+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/batch-smtp": {
-        source: "iana"
-      },
-      "application/bdoc": {
-        compressible: false,
-        extensions: ["bdoc"]
-      },
-      "application/beep+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/calendar+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/calendar+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xcs"]
-      },
-      "application/call-completion": {
-        source: "iana"
-      },
-      "application/cals-1840": {
-        source: "iana"
-      },
-      "application/captive+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cbor": {
-        source: "iana"
-      },
-      "application/cbor-seq": {
-        source: "iana"
-      },
-      "application/cccex": {
-        source: "iana"
-      },
-      "application/ccmp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/ccxml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ccxml"]
-      },
-      "application/cdfx+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["cdfx"]
-      },
-      "application/cdmi-capability": {
-        source: "iana",
-        extensions: ["cdmia"]
-      },
-      "application/cdmi-container": {
-        source: "iana",
-        extensions: ["cdmic"]
-      },
-      "application/cdmi-domain": {
-        source: "iana",
-        extensions: ["cdmid"]
-      },
-      "application/cdmi-object": {
-        source: "iana",
-        extensions: ["cdmio"]
-      },
-      "application/cdmi-queue": {
-        source: "iana",
-        extensions: ["cdmiq"]
-      },
-      "application/cdni": {
-        source: "iana"
-      },
-      "application/cea": {
-        source: "iana"
-      },
-      "application/cea-2018+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cellml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cfw": {
-        source: "iana"
-      },
-      "application/city+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/clr": {
-        source: "iana"
-      },
-      "application/clue+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/clue_info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cms": {
-        source: "iana"
-      },
-      "application/cnrp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/coap-group+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/coap-payload": {
-        source: "iana"
-      },
-      "application/commonground": {
-        source: "iana"
-      },
-      "application/conference-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cose": {
-        source: "iana"
-      },
-      "application/cose-key": {
-        source: "iana"
-      },
-      "application/cose-key-set": {
-        source: "iana"
-      },
-      "application/cpl+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["cpl"]
-      },
-      "application/csrattrs": {
-        source: "iana"
-      },
-      "application/csta+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cstadata+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/csvm+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/cu-seeme": {
-        source: "apache",
-        extensions: ["cu"]
-      },
-      "application/cwt": {
-        source: "iana"
-      },
-      "application/cybercash": {
-        source: "iana"
-      },
-      "application/dart": {
-        compressible: true
-      },
-      "application/dash+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mpd"]
-      },
-      "application/dash-patch+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mpp"]
-      },
-      "application/dashdelta": {
-        source: "iana"
-      },
-      "application/davmount+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["davmount"]
-      },
-      "application/dca-rft": {
-        source: "iana"
-      },
-      "application/dcd": {
-        source: "iana"
-      },
-      "application/dec-dx": {
-        source: "iana"
-      },
-      "application/dialog-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/dicom": {
-        source: "iana"
-      },
-      "application/dicom+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/dicom+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/dii": {
-        source: "iana"
-      },
-      "application/dit": {
-        source: "iana"
-      },
-      "application/dns": {
-        source: "iana"
-      },
-      "application/dns+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/dns-message": {
-        source: "iana"
-      },
-      "application/docbook+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["dbk"]
-      },
-      "application/dots+cbor": {
-        source: "iana"
-      },
-      "application/dskpp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/dssc+der": {
-        source: "iana",
-        extensions: ["dssc"]
-      },
-      "application/dssc+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xdssc"]
-      },
-      "application/dvcs": {
-        source: "iana"
-      },
-      "application/ecmascript": {
-        source: "iana",
-        compressible: true,
-        extensions: ["es", "ecma"]
-      },
-      "application/edi-consent": {
-        source: "iana"
-      },
-      "application/edi-x12": {
-        source: "iana",
-        compressible: false
-      },
-      "application/edifact": {
-        source: "iana",
-        compressible: false
-      },
-      "application/efi": {
-        source: "iana"
-      },
-      "application/elm+json": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/elm+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.cap+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/emergencycalldata.comment+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.control+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.deviceinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.ecall.msd": {
-        source: "iana"
-      },
-      "application/emergencycalldata.providerinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.serviceinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.subscriberinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emergencycalldata.veds+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/emma+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["emma"]
-      },
-      "application/emotionml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["emotionml"]
-      },
-      "application/encaprtp": {
-        source: "iana"
-      },
-      "application/epp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/epub+zip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["epub"]
-      },
-      "application/eshop": {
-        source: "iana"
-      },
-      "application/exi": {
-        source: "iana",
-        extensions: ["exi"]
-      },
-      "application/expect-ct-report+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/express": {
-        source: "iana",
-        extensions: ["exp"]
-      },
-      "application/fastinfoset": {
-        source: "iana"
-      },
-      "application/fastsoap": {
-        source: "iana"
-      },
-      "application/fdt+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["fdt"]
-      },
-      "application/fhir+json": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/fhir+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/fido.trusted-apps+json": {
-        compressible: true
-      },
-      "application/fits": {
-        source: "iana"
-      },
-      "application/flexfec": {
-        source: "iana"
-      },
-      "application/font-sfnt": {
-        source: "iana"
-      },
-      "application/font-tdpfr": {
-        source: "iana",
-        extensions: ["pfr"]
-      },
-      "application/font-woff": {
-        source: "iana",
-        compressible: false
-      },
-      "application/framework-attributes+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/geo+json": {
-        source: "iana",
-        compressible: true,
-        extensions: ["geojson"]
-      },
-      "application/geo+json-seq": {
-        source: "iana"
-      },
-      "application/geopackage+sqlite3": {
-        source: "iana"
-      },
-      "application/geoxacml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/gltf-buffer": {
-        source: "iana"
-      },
-      "application/gml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["gml"]
-      },
-      "application/gpx+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["gpx"]
-      },
-      "application/gxf": {
-        source: "apache",
-        extensions: ["gxf"]
-      },
-      "application/gzip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["gz"]
-      },
-      "application/h224": {
-        source: "iana"
-      },
-      "application/held+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/hjson": {
-        extensions: ["hjson"]
-      },
-      "application/http": {
-        source: "iana"
-      },
-      "application/hyperstudio": {
-        source: "iana",
-        extensions: ["stk"]
-      },
-      "application/ibe-key-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/ibe-pkg-reply+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/ibe-pp-data": {
-        source: "iana"
-      },
-      "application/iges": {
-        source: "iana"
-      },
-      "application/im-iscomposing+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/index": {
-        source: "iana"
-      },
-      "application/index.cmd": {
-        source: "iana"
-      },
-      "application/index.obj": {
-        source: "iana"
-      },
-      "application/index.response": {
-        source: "iana"
-      },
-      "application/index.vnd": {
-        source: "iana"
-      },
-      "application/inkml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ink", "inkml"]
-      },
-      "application/iotp": {
-        source: "iana"
-      },
-      "application/ipfix": {
-        source: "iana",
-        extensions: ["ipfix"]
-      },
-      "application/ipp": {
-        source: "iana"
-      },
-      "application/isup": {
-        source: "iana"
-      },
-      "application/its+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["its"]
-      },
-      "application/java-archive": {
-        source: "apache",
-        compressible: false,
-        extensions: ["jar", "war", "ear"]
-      },
-      "application/java-serialized-object": {
-        source: "apache",
-        compressible: false,
-        extensions: ["ser"]
-      },
-      "application/java-vm": {
-        source: "apache",
-        compressible: false,
-        extensions: ["class"]
-      },
-      "application/javascript": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["js", "mjs"]
-      },
-      "application/jf2feed+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/jose": {
-        source: "iana"
-      },
-      "application/jose+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/jrd+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/jscalendar+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/json": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["json", "map"]
-      },
-      "application/json-patch+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/json-seq": {
-        source: "iana"
-      },
-      "application/json5": {
-        extensions: ["json5"]
-      },
-      "application/jsonml+json": {
-        source: "apache",
-        compressible: true,
-        extensions: ["jsonml"]
-      },
-      "application/jwk+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/jwk-set+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/jwt": {
-        source: "iana"
-      },
-      "application/kpml-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/kpml-response+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/ld+json": {
-        source: "iana",
-        compressible: true,
-        extensions: ["jsonld"]
-      },
-      "application/lgr+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["lgr"]
-      },
-      "application/link-format": {
-        source: "iana"
-      },
-      "application/load-control+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/lost+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["lostxml"]
-      },
-      "application/lostsync+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/lpf+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/lxf": {
-        source: "iana"
-      },
-      "application/mac-binhex40": {
-        source: "iana",
-        extensions: ["hqx"]
-      },
-      "application/mac-compactpro": {
-        source: "apache",
-        extensions: ["cpt"]
-      },
-      "application/macwriteii": {
-        source: "iana"
-      },
-      "application/mads+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mads"]
-      },
-      "application/manifest+json": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["webmanifest"]
-      },
-      "application/marc": {
-        source: "iana",
-        extensions: ["mrc"]
-      },
-      "application/marcxml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mrcx"]
-      },
-      "application/mathematica": {
-        source: "iana",
-        extensions: ["ma", "nb", "mb"]
-      },
-      "application/mathml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mathml"]
-      },
-      "application/mathml-content+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mathml-presentation+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-associated-procedure-description+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-deregister+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-envelope+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-msk+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-msk-response+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-protection-description+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-reception-report+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-register+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-register-response+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-schedule+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbms-user-service-description+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mbox": {
-        source: "iana",
-        extensions: ["mbox"]
-      },
-      "application/media-policy-dataset+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mpf"]
-      },
-      "application/media_control+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mediaservercontrol+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mscml"]
-      },
-      "application/merge-patch+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/metalink+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["metalink"]
-      },
-      "application/metalink4+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["meta4"]
-      },
-      "application/mets+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mets"]
-      },
-      "application/mf4": {
-        source: "iana"
-      },
-      "application/mikey": {
-        source: "iana"
-      },
-      "application/mipc": {
-        source: "iana"
-      },
-      "application/missing-blocks+cbor-seq": {
-        source: "iana"
-      },
-      "application/mmt-aei+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["maei"]
-      },
-      "application/mmt-usd+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["musd"]
-      },
-      "application/mods+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mods"]
-      },
-      "application/moss-keys": {
-        source: "iana"
-      },
-      "application/moss-signature": {
-        source: "iana"
-      },
-      "application/mosskey-data": {
-        source: "iana"
-      },
-      "application/mosskey-request": {
-        source: "iana"
-      },
-      "application/mp21": {
-        source: "iana",
-        extensions: ["m21", "mp21"]
-      },
-      "application/mp4": {
-        source: "iana",
-        extensions: ["mp4s", "m4p"]
-      },
-      "application/mpeg4-generic": {
-        source: "iana"
-      },
-      "application/mpeg4-iod": {
-        source: "iana"
-      },
-      "application/mpeg4-iod-xmt": {
-        source: "iana"
-      },
-      "application/mrb-consumer+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/mrb-publish+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/msc-ivr+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/msc-mixer+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/msword": {
-        source: "iana",
-        compressible: false,
-        extensions: ["doc", "dot"]
-      },
-      "application/mud+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/multipart-core": {
-        source: "iana"
-      },
-      "application/mxf": {
-        source: "iana",
-        extensions: ["mxf"]
-      },
-      "application/n-quads": {
-        source: "iana",
-        extensions: ["nq"]
-      },
-      "application/n-triples": {
-        source: "iana",
-        extensions: ["nt"]
-      },
-      "application/nasdata": {
-        source: "iana"
-      },
-      "application/news-checkgroups": {
-        source: "iana",
-        charset: "US-ASCII"
-      },
-      "application/news-groupinfo": {
-        source: "iana",
-        charset: "US-ASCII"
-      },
-      "application/news-transmission": {
-        source: "iana"
-      },
-      "application/nlsml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/node": {
-        source: "iana",
-        extensions: ["cjs"]
-      },
-      "application/nss": {
-        source: "iana"
-      },
-      "application/oauth-authz-req+jwt": {
-        source: "iana"
-      },
-      "application/oblivious-dns-message": {
-        source: "iana"
-      },
-      "application/ocsp-request": {
-        source: "iana"
-      },
-      "application/ocsp-response": {
-        source: "iana"
-      },
-      "application/octet-stream": {
-        source: "iana",
-        compressible: false,
-        extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
-      },
-      "application/oda": {
-        source: "iana",
-        extensions: ["oda"]
-      },
-      "application/odm+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/odx": {
-        source: "iana"
-      },
-      "application/oebps-package+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["opf"]
-      },
-      "application/ogg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["ogx"]
-      },
-      "application/omdoc+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["omdoc"]
-      },
-      "application/onenote": {
-        source: "apache",
-        extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"]
-      },
-      "application/opc-nodeset+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/oscore": {
-        source: "iana"
-      },
-      "application/oxps": {
-        source: "iana",
-        extensions: ["oxps"]
-      },
-      "application/p21": {
-        source: "iana"
-      },
-      "application/p21+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/p2p-overlay+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["relo"]
-      },
-      "application/parityfec": {
-        source: "iana"
-      },
-      "application/passport": {
-        source: "iana"
-      },
-      "application/patch-ops-error+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xer"]
-      },
-      "application/pdf": {
-        source: "iana",
-        compressible: false,
-        extensions: ["pdf"]
-      },
-      "application/pdx": {
-        source: "iana"
-      },
-      "application/pem-certificate-chain": {
-        source: "iana"
-      },
-      "application/pgp-encrypted": {
-        source: "iana",
-        compressible: false,
-        extensions: ["pgp"]
-      },
-      "application/pgp-keys": {
-        source: "iana",
-        extensions: ["asc"]
-      },
-      "application/pgp-signature": {
-        source: "iana",
-        extensions: ["asc", "sig"]
-      },
-      "application/pics-rules": {
-        source: "apache",
-        extensions: ["prf"]
-      },
-      "application/pidf+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/pidf-diff+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/pkcs10": {
-        source: "iana",
-        extensions: ["p10"]
-      },
-      "application/pkcs12": {
-        source: "iana"
-      },
-      "application/pkcs7-mime": {
-        source: "iana",
-        extensions: ["p7m", "p7c"]
-      },
-      "application/pkcs7-signature": {
-        source: "iana",
-        extensions: ["p7s"]
-      },
-      "application/pkcs8": {
-        source: "iana",
-        extensions: ["p8"]
-      },
-      "application/pkcs8-encrypted": {
-        source: "iana"
-      },
-      "application/pkix-attr-cert": {
-        source: "iana",
-        extensions: ["ac"]
-      },
-      "application/pkix-cert": {
-        source: "iana",
-        extensions: ["cer"]
-      },
-      "application/pkix-crl": {
-        source: "iana",
-        extensions: ["crl"]
-      },
-      "application/pkix-pkipath": {
-        source: "iana",
-        extensions: ["pkipath"]
-      },
-      "application/pkixcmp": {
-        source: "iana",
-        extensions: ["pki"]
-      },
-      "application/pls+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["pls"]
-      },
-      "application/poc-settings+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/postscript": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ai", "eps", "ps"]
-      },
-      "application/ppsp-tracker+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/problem+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/problem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/provenance+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["provx"]
-      },
-      "application/prs.alvestrand.titrax-sheet": {
-        source: "iana"
-      },
-      "application/prs.cww": {
-        source: "iana",
-        extensions: ["cww"]
-      },
-      "application/prs.cyn": {
-        source: "iana",
-        charset: "7-BIT"
-      },
-      "application/prs.hpub+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/prs.nprend": {
-        source: "iana"
-      },
-      "application/prs.plucker": {
-        source: "iana"
-      },
-      "application/prs.rdf-xml-crypt": {
-        source: "iana"
-      },
-      "application/prs.xsf+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/pskc+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["pskcxml"]
-      },
-      "application/pvd+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/qsig": {
-        source: "iana"
-      },
-      "application/raml+yaml": {
-        compressible: true,
-        extensions: ["raml"]
-      },
-      "application/raptorfec": {
-        source: "iana"
-      },
-      "application/rdap+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/rdf+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rdf", "owl"]
-      },
-      "application/reginfo+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rif"]
-      },
-      "application/relax-ng-compact-syntax": {
-        source: "iana",
-        extensions: ["rnc"]
-      },
-      "application/remote-printing": {
-        source: "iana"
-      },
-      "application/reputon+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/resource-lists+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rl"]
-      },
-      "application/resource-lists-diff+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rld"]
-      },
-      "application/rfc+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/riscos": {
-        source: "iana"
-      },
-      "application/rlmi+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/rls-services+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rs"]
-      },
-      "application/route-apd+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rapd"]
-      },
-      "application/route-s-tsid+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["sls"]
-      },
-      "application/route-usd+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rusd"]
-      },
-      "application/rpki-ghostbusters": {
-        source: "iana",
-        extensions: ["gbr"]
-      },
-      "application/rpki-manifest": {
-        source: "iana",
-        extensions: ["mft"]
-      },
-      "application/rpki-publication": {
-        source: "iana"
-      },
-      "application/rpki-roa": {
-        source: "iana",
-        extensions: ["roa"]
-      },
-      "application/rpki-updown": {
-        source: "iana"
-      },
-      "application/rsd+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["rsd"]
-      },
-      "application/rss+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["rss"]
-      },
-      "application/rtf": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rtf"]
-      },
-      "application/rtploopback": {
-        source: "iana"
-      },
-      "application/rtx": {
-        source: "iana"
-      },
-      "application/samlassertion+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/samlmetadata+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sarif+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sarif-external-properties+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sbe": {
-        source: "iana"
-      },
-      "application/sbml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["sbml"]
-      },
-      "application/scaip+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/scim+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/scvp-cv-request": {
-        source: "iana",
-        extensions: ["scq"]
-      },
-      "application/scvp-cv-response": {
-        source: "iana",
-        extensions: ["scs"]
-      },
-      "application/scvp-vp-request": {
-        source: "iana",
-        extensions: ["spq"]
-      },
-      "application/scvp-vp-response": {
-        source: "iana",
-        extensions: ["spp"]
-      },
-      "application/sdp": {
-        source: "iana",
-        extensions: ["sdp"]
-      },
-      "application/secevent+jwt": {
-        source: "iana"
-      },
-      "application/senml+cbor": {
-        source: "iana"
-      },
-      "application/senml+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/senml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["senmlx"]
-      },
-      "application/senml-etch+cbor": {
-        source: "iana"
-      },
-      "application/senml-etch+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/senml-exi": {
-        source: "iana"
-      },
-      "application/sensml+cbor": {
-        source: "iana"
-      },
-      "application/sensml+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sensml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["sensmlx"]
-      },
-      "application/sensml-exi": {
-        source: "iana"
-      },
-      "application/sep+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sep-exi": {
-        source: "iana"
-      },
-      "application/session-info": {
-        source: "iana"
-      },
-      "application/set-payment": {
-        source: "iana"
-      },
-      "application/set-payment-initiation": {
-        source: "iana",
-        extensions: ["setpay"]
-      },
-      "application/set-registration": {
-        source: "iana"
-      },
-      "application/set-registration-initiation": {
-        source: "iana",
-        extensions: ["setreg"]
-      },
-      "application/sgml": {
-        source: "iana"
-      },
-      "application/sgml-open-catalog": {
-        source: "iana"
-      },
-      "application/shf+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["shf"]
-      },
-      "application/sieve": {
-        source: "iana",
-        extensions: ["siv", "sieve"]
-      },
-      "application/simple-filter+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/simple-message-summary": {
-        source: "iana"
-      },
-      "application/simplesymbolcontainer": {
-        source: "iana"
-      },
-      "application/sipc": {
-        source: "iana"
-      },
-      "application/slate": {
-        source: "iana"
-      },
-      "application/smil": {
-        source: "iana"
-      },
-      "application/smil+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["smi", "smil"]
-      },
-      "application/smpte336m": {
-        source: "iana"
-      },
-      "application/soap+fastinfoset": {
-        source: "iana"
-      },
-      "application/soap+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sparql-query": {
-        source: "iana",
-        extensions: ["rq"]
-      },
-      "application/sparql-results+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["srx"]
-      },
-      "application/spdx+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/spirits-event+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/sql": {
-        source: "iana"
-      },
-      "application/srgs": {
-        source: "iana",
-        extensions: ["gram"]
-      },
-      "application/srgs+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["grxml"]
-      },
-      "application/sru+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["sru"]
-      },
-      "application/ssdl+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["ssdl"]
-      },
-      "application/ssml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ssml"]
-      },
-      "application/stix+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/swid+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["swidtag"]
-      },
-      "application/tamp-apex-update": {
-        source: "iana"
-      },
-      "application/tamp-apex-update-confirm": {
-        source: "iana"
-      },
-      "application/tamp-community-update": {
-        source: "iana"
-      },
-      "application/tamp-community-update-confirm": {
-        source: "iana"
-      },
-      "application/tamp-error": {
-        source: "iana"
-      },
-      "application/tamp-sequence-adjust": {
-        source: "iana"
-      },
-      "application/tamp-sequence-adjust-confirm": {
-        source: "iana"
-      },
-      "application/tamp-status-query": {
-        source: "iana"
-      },
-      "application/tamp-status-response": {
-        source: "iana"
-      },
-      "application/tamp-update": {
-        source: "iana"
-      },
-      "application/tamp-update-confirm": {
-        source: "iana"
-      },
-      "application/tar": {
-        compressible: true
-      },
-      "application/taxii+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/td+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/tei+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["tei", "teicorpus"]
-      },
-      "application/tetra_isi": {
-        source: "iana"
-      },
-      "application/thraud+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["tfi"]
-      },
-      "application/timestamp-query": {
-        source: "iana"
-      },
-      "application/timestamp-reply": {
-        source: "iana"
-      },
-      "application/timestamped-data": {
-        source: "iana",
-        extensions: ["tsd"]
-      },
-      "application/tlsrpt+gzip": {
-        source: "iana"
-      },
-      "application/tlsrpt+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/tnauthlist": {
-        source: "iana"
-      },
-      "application/token-introspection+jwt": {
-        source: "iana"
-      },
-      "application/toml": {
-        compressible: true,
-        extensions: ["toml"]
-      },
-      "application/trickle-ice-sdpfrag": {
-        source: "iana"
-      },
-      "application/trig": {
-        source: "iana",
-        extensions: ["trig"]
-      },
-      "application/ttml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ttml"]
-      },
-      "application/tve-trigger": {
-        source: "iana"
-      },
-      "application/tzif": {
-        source: "iana"
-      },
-      "application/tzif-leap": {
-        source: "iana"
-      },
-      "application/ubjson": {
-        compressible: false,
-        extensions: ["ubj"]
-      },
-      "application/ulpfec": {
-        source: "iana"
-      },
-      "application/urc-grpsheet+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/urc-ressheet+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rsheet"]
-      },
-      "application/urc-targetdesc+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["td"]
-      },
-      "application/urc-uisocketdesc+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vcard+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vcard+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vemmi": {
-        source: "iana"
-      },
-      "application/vividence.scriptfile": {
-        source: "apache"
-      },
-      "application/vnd.1000minds.decision-model+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["1km"]
-      },
-      "application/vnd.3gpp-prose+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp-prose-pc3ch+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp-v2x-local-service-information": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.5gnas": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.access-transfer-events+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.bsf+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.gmop+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.gtpc": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.interworking-data": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.lpp": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.mc-signalling-ear": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.mcdata-affiliation-command+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcdata-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcdata-payload": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.mcdata-service-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcdata-signalling": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.mcdata-ue-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcdata-user-profile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-affiliation-command+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-floor-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-location-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-service-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-signed+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-ue-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-ue-init-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcptt-user-profile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-location-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-service-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-transmission-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-ue-config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mcvideo-user-profile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.mid-call+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.ngap": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.pfcp": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.pic-bw-large": {
-        source: "iana",
-        extensions: ["plb"]
-      },
-      "application/vnd.3gpp.pic-bw-small": {
-        source: "iana",
-        extensions: ["psb"]
-      },
-      "application/vnd.3gpp.pic-bw-var": {
-        source: "iana",
-        extensions: ["pvb"]
-      },
-      "application/vnd.3gpp.s1ap": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.sms": {
-        source: "iana"
-      },
-      "application/vnd.3gpp.sms+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.srvcc-ext+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.srvcc-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.state-and-event-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp.ussd+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp2.bcmcsinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.3gpp2.sms": {
-        source: "iana"
-      },
-      "application/vnd.3gpp2.tcap": {
-        source: "iana",
-        extensions: ["tcap"]
-      },
-      "application/vnd.3lightssoftware.imagescal": {
-        source: "iana"
-      },
-      "application/vnd.3m.post-it-notes": {
-        source: "iana",
-        extensions: ["pwn"]
-      },
-      "application/vnd.accpac.simply.aso": {
-        source: "iana",
-        extensions: ["aso"]
-      },
-      "application/vnd.accpac.simply.imp": {
-        source: "iana",
-        extensions: ["imp"]
-      },
-      "application/vnd.acucobol": {
-        source: "iana",
-        extensions: ["acu"]
-      },
-      "application/vnd.acucorp": {
-        source: "iana",
-        extensions: ["atc", "acutc"]
-      },
-      "application/vnd.adobe.air-application-installer-package+zip": {
-        source: "apache",
-        compressible: false,
-        extensions: ["air"]
-      },
-      "application/vnd.adobe.flash.movie": {
-        source: "iana"
-      },
-      "application/vnd.adobe.formscentral.fcdt": {
-        source: "iana",
-        extensions: ["fcdt"]
-      },
-      "application/vnd.adobe.fxp": {
-        source: "iana",
-        extensions: ["fxp", "fxpl"]
-      },
-      "application/vnd.adobe.partial-upload": {
-        source: "iana"
-      },
-      "application/vnd.adobe.xdp+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xdp"]
-      },
-      "application/vnd.adobe.xfdf": {
-        source: "iana",
-        extensions: ["xfdf"]
-      },
-      "application/vnd.aether.imp": {
-        source: "iana"
-      },
-      "application/vnd.afpc.afplinedata": {
-        source: "iana"
-      },
-      "application/vnd.afpc.afplinedata-pagedef": {
-        source: "iana"
-      },
-      "application/vnd.afpc.cmoca-cmresource": {
-        source: "iana"
-      },
-      "application/vnd.afpc.foca-charset": {
-        source: "iana"
-      },
-      "application/vnd.afpc.foca-codedfont": {
-        source: "iana"
-      },
-      "application/vnd.afpc.foca-codepage": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-cmtable": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-formdef": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-mediummap": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-objectcontainer": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-overlay": {
-        source: "iana"
-      },
-      "application/vnd.afpc.modca-pagesegment": {
-        source: "iana"
-      },
-      "application/vnd.age": {
-        source: "iana",
-        extensions: ["age"]
-      },
-      "application/vnd.ah-barcode": {
-        source: "iana"
-      },
-      "application/vnd.ahead.space": {
-        source: "iana",
-        extensions: ["ahead"]
-      },
-      "application/vnd.airzip.filesecure.azf": {
-        source: "iana",
-        extensions: ["azf"]
-      },
-      "application/vnd.airzip.filesecure.azs": {
-        source: "iana",
-        extensions: ["azs"]
-      },
-      "application/vnd.amadeus+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.amazon.ebook": {
-        source: "apache",
-        extensions: ["azw"]
-      },
-      "application/vnd.amazon.mobi8-ebook": {
-        source: "iana"
-      },
-      "application/vnd.americandynamics.acc": {
-        source: "iana",
-        extensions: ["acc"]
-      },
-      "application/vnd.amiga.ami": {
-        source: "iana",
-        extensions: ["ami"]
-      },
-      "application/vnd.amundsen.maze+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.android.ota": {
-        source: "iana"
-      },
-      "application/vnd.android.package-archive": {
-        source: "apache",
-        compressible: false,
-        extensions: ["apk"]
-      },
-      "application/vnd.anki": {
-        source: "iana"
-      },
-      "application/vnd.anser-web-certificate-issue-initiation": {
-        source: "iana",
-        extensions: ["cii"]
-      },
-      "application/vnd.anser-web-funds-transfer-initiation": {
-        source: "apache",
-        extensions: ["fti"]
-      },
-      "application/vnd.antix.game-component": {
-        source: "iana",
-        extensions: ["atx"]
-      },
-      "application/vnd.apache.arrow.file": {
-        source: "iana"
-      },
-      "application/vnd.apache.arrow.stream": {
-        source: "iana"
-      },
-      "application/vnd.apache.thrift.binary": {
-        source: "iana"
-      },
-      "application/vnd.apache.thrift.compact": {
-        source: "iana"
-      },
-      "application/vnd.apache.thrift.json": {
-        source: "iana"
-      },
-      "application/vnd.api+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.aplextor.warrp+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.apothekende.reservation+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.apple.installer+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mpkg"]
-      },
-      "application/vnd.apple.keynote": {
-        source: "iana",
-        extensions: ["key"]
-      },
-      "application/vnd.apple.mpegurl": {
-        source: "iana",
-        extensions: ["m3u8"]
-      },
-      "application/vnd.apple.numbers": {
-        source: "iana",
-        extensions: ["numbers"]
-      },
-      "application/vnd.apple.pages": {
-        source: "iana",
-        extensions: ["pages"]
-      },
-      "application/vnd.apple.pkpass": {
-        compressible: false,
-        extensions: ["pkpass"]
-      },
-      "application/vnd.arastra.swi": {
-        source: "iana"
-      },
-      "application/vnd.aristanetworks.swi": {
-        source: "iana",
-        extensions: ["swi"]
-      },
-      "application/vnd.artisan+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.artsquare": {
-        source: "iana"
-      },
-      "application/vnd.astraea-software.iota": {
-        source: "iana",
-        extensions: ["iota"]
-      },
-      "application/vnd.audiograph": {
-        source: "iana",
-        extensions: ["aep"]
-      },
-      "application/vnd.autopackage": {
-        source: "iana"
-      },
-      "application/vnd.avalon+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.avistar+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.balsamiq.bmml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["bmml"]
-      },
-      "application/vnd.balsamiq.bmpr": {
-        source: "iana"
-      },
-      "application/vnd.banana-accounting": {
-        source: "iana"
-      },
-      "application/vnd.bbf.usp.error": {
-        source: "iana"
-      },
-      "application/vnd.bbf.usp.msg": {
-        source: "iana"
-      },
-      "application/vnd.bbf.usp.msg+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.bekitzur-stech+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.bint.med-content": {
-        source: "iana"
-      },
-      "application/vnd.biopax.rdf+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.blink-idb-value-wrapper": {
-        source: "iana"
-      },
-      "application/vnd.blueice.multipass": {
-        source: "iana",
-        extensions: ["mpm"]
-      },
-      "application/vnd.bluetooth.ep.oob": {
-        source: "iana"
-      },
-      "application/vnd.bluetooth.le.oob": {
-        source: "iana"
-      },
-      "application/vnd.bmi": {
-        source: "iana",
-        extensions: ["bmi"]
-      },
-      "application/vnd.bpf": {
-        source: "iana"
-      },
-      "application/vnd.bpf3": {
-        source: "iana"
-      },
-      "application/vnd.businessobjects": {
-        source: "iana",
-        extensions: ["rep"]
-      },
-      "application/vnd.byu.uapi+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cab-jscript": {
-        source: "iana"
-      },
-      "application/vnd.canon-cpdl": {
-        source: "iana"
-      },
-      "application/vnd.canon-lips": {
-        source: "iana"
-      },
-      "application/vnd.capasystems-pg+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cendio.thinlinc.clientconf": {
-        source: "iana"
-      },
-      "application/vnd.century-systems.tcp_stream": {
-        source: "iana"
-      },
-      "application/vnd.chemdraw+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["cdxml"]
-      },
-      "application/vnd.chess-pgn": {
-        source: "iana"
-      },
-      "application/vnd.chipnuts.karaoke-mmd": {
-        source: "iana",
-        extensions: ["mmd"]
-      },
-      "application/vnd.ciedi": {
-        source: "iana"
-      },
-      "application/vnd.cinderella": {
-        source: "iana",
-        extensions: ["cdy"]
-      },
-      "application/vnd.cirpack.isdn-ext": {
-        source: "iana"
-      },
-      "application/vnd.citationstyles.style+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["csl"]
-      },
-      "application/vnd.claymore": {
-        source: "iana",
-        extensions: ["cla"]
-      },
-      "application/vnd.cloanto.rp9": {
-        source: "iana",
-        extensions: ["rp9"]
-      },
-      "application/vnd.clonk.c4group": {
-        source: "iana",
-        extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
-      },
-      "application/vnd.cluetrust.cartomobile-config": {
-        source: "iana",
-        extensions: ["c11amc"]
-      },
-      "application/vnd.cluetrust.cartomobile-config-pkg": {
-        source: "iana",
-        extensions: ["c11amz"]
-      },
-      "application/vnd.coffeescript": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.document": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.document-template": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.presentation": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.presentation-template": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.spreadsheet": {
-        source: "iana"
-      },
-      "application/vnd.collabio.xodocuments.spreadsheet-template": {
-        source: "iana"
-      },
-      "application/vnd.collection+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.collection.doc+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.collection.next+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.comicbook+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.comicbook-rar": {
-        source: "iana"
-      },
-      "application/vnd.commerce-battelle": {
-        source: "iana"
-      },
-      "application/vnd.commonspace": {
-        source: "iana",
-        extensions: ["csp"]
-      },
-      "application/vnd.contact.cmsg": {
-        source: "iana",
-        extensions: ["cdbcmsg"]
-      },
-      "application/vnd.coreos.ignition+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cosmocaller": {
-        source: "iana",
-        extensions: ["cmc"]
-      },
-      "application/vnd.crick.clicker": {
-        source: "iana",
-        extensions: ["clkx"]
-      },
-      "application/vnd.crick.clicker.keyboard": {
-        source: "iana",
-        extensions: ["clkk"]
-      },
-      "application/vnd.crick.clicker.palette": {
-        source: "iana",
-        extensions: ["clkp"]
-      },
-      "application/vnd.crick.clicker.template": {
-        source: "iana",
-        extensions: ["clkt"]
-      },
-      "application/vnd.crick.clicker.wordbank": {
-        source: "iana",
-        extensions: ["clkw"]
-      },
-      "application/vnd.criticaltools.wbs+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wbs"]
-      },
-      "application/vnd.cryptii.pipe+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.crypto-shade-file": {
-        source: "iana"
-      },
-      "application/vnd.cryptomator.encrypted": {
-        source: "iana"
-      },
-      "application/vnd.cryptomator.vault": {
-        source: "iana"
-      },
-      "application/vnd.ctc-posml": {
-        source: "iana",
-        extensions: ["pml"]
-      },
-      "application/vnd.ctct.ws+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cups-pdf": {
-        source: "iana"
-      },
-      "application/vnd.cups-postscript": {
-        source: "iana"
-      },
-      "application/vnd.cups-ppd": {
-        source: "iana",
-        extensions: ["ppd"]
-      },
-      "application/vnd.cups-raster": {
-        source: "iana"
-      },
-      "application/vnd.cups-raw": {
-        source: "iana"
-      },
-      "application/vnd.curl": {
-        source: "iana"
-      },
-      "application/vnd.curl.car": {
-        source: "apache",
-        extensions: ["car"]
-      },
-      "application/vnd.curl.pcurl": {
-        source: "apache",
-        extensions: ["pcurl"]
-      },
-      "application/vnd.cyan.dean.root+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cybank": {
-        source: "iana"
-      },
-      "application/vnd.cyclonedx+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.cyclonedx+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.d2l.coursepackage1p0+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.d3m-dataset": {
-        source: "iana"
-      },
-      "application/vnd.d3m-problem": {
-        source: "iana"
-      },
-      "application/vnd.dart": {
-        source: "iana",
-        compressible: true,
-        extensions: ["dart"]
-      },
-      "application/vnd.data-vision.rdz": {
-        source: "iana",
-        extensions: ["rdz"]
-      },
-      "application/vnd.datapackage+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dataresource+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dbf": {
-        source: "iana",
-        extensions: ["dbf"]
-      },
-      "application/vnd.debian.binary-package": {
-        source: "iana"
-      },
-      "application/vnd.dece.data": {
-        source: "iana",
-        extensions: ["uvf", "uvvf", "uvd", "uvvd"]
-      },
-      "application/vnd.dece.ttml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["uvt", "uvvt"]
-      },
-      "application/vnd.dece.unspecified": {
-        source: "iana",
-        extensions: ["uvx", "uvvx"]
-      },
-      "application/vnd.dece.zip": {
-        source: "iana",
-        extensions: ["uvz", "uvvz"]
-      },
-      "application/vnd.denovo.fcselayout-link": {
-        source: "iana",
-        extensions: ["fe_launch"]
-      },
-      "application/vnd.desmume.movie": {
-        source: "iana"
-      },
-      "application/vnd.dir-bi.plate-dl-nosuffix": {
-        source: "iana"
-      },
-      "application/vnd.dm.delegation+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dna": {
-        source: "iana",
-        extensions: ["dna"]
-      },
-      "application/vnd.document+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dolby.mlp": {
-        source: "apache",
-        extensions: ["mlp"]
-      },
-      "application/vnd.dolby.mobile.1": {
-        source: "iana"
-      },
-      "application/vnd.dolby.mobile.2": {
-        source: "iana"
-      },
-      "application/vnd.doremir.scorecloud-binary-document": {
-        source: "iana"
-      },
-      "application/vnd.dpgraph": {
-        source: "iana",
-        extensions: ["dpg"]
-      },
-      "application/vnd.dreamfactory": {
-        source: "iana",
-        extensions: ["dfac"]
-      },
-      "application/vnd.drive+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ds-keypoint": {
-        source: "apache",
-        extensions: ["kpxx"]
-      },
-      "application/vnd.dtg.local": {
-        source: "iana"
-      },
-      "application/vnd.dtg.local.flash": {
-        source: "iana"
-      },
-      "application/vnd.dtg.local.html": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ait": {
-        source: "iana",
-        extensions: ["ait"]
-      },
-      "application/vnd.dvb.dvbisl+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.dvbj": {
-        source: "iana"
-      },
-      "application/vnd.dvb.esgcontainer": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ipdcdftnotifaccess": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ipdcesgaccess": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ipdcesgaccess2": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ipdcesgpdd": {
-        source: "iana"
-      },
-      "application/vnd.dvb.ipdcroaming": {
-        source: "iana"
-      },
-      "application/vnd.dvb.iptv.alfec-base": {
-        source: "iana"
-      },
-      "application/vnd.dvb.iptv.alfec-enhancement": {
-        source: "iana"
-      },
-      "application/vnd.dvb.notif-aggregate-root+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-container+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-generic+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-ia-msglist+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-ia-registration-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-ia-registration-response+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.notif-init+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.dvb.pfr": {
-        source: "iana"
-      },
-      "application/vnd.dvb.service": {
-        source: "iana",
-        extensions: ["svc"]
-      },
-      "application/vnd.dxr": {
-        source: "iana"
-      },
-      "application/vnd.dynageo": {
-        source: "iana",
-        extensions: ["geo"]
-      },
-      "application/vnd.dzr": {
-        source: "iana"
-      },
-      "application/vnd.easykaraoke.cdgdownload": {
-        source: "iana"
-      },
-      "application/vnd.ecdis-update": {
-        source: "iana"
-      },
-      "application/vnd.ecip.rlp": {
-        source: "iana"
-      },
-      "application/vnd.eclipse.ditto+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ecowin.chart": {
-        source: "iana",
-        extensions: ["mag"]
-      },
-      "application/vnd.ecowin.filerequest": {
-        source: "iana"
-      },
-      "application/vnd.ecowin.fileupdate": {
-        source: "iana"
-      },
-      "application/vnd.ecowin.series": {
-        source: "iana"
-      },
-      "application/vnd.ecowin.seriesrequest": {
-        source: "iana"
-      },
-      "application/vnd.ecowin.seriesupdate": {
-        source: "iana"
-      },
-      "application/vnd.efi.img": {
-        source: "iana"
-      },
-      "application/vnd.efi.iso": {
-        source: "iana"
-      },
-      "application/vnd.emclient.accessrequest+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.enliven": {
-        source: "iana",
-        extensions: ["nml"]
-      },
-      "application/vnd.enphase.envoy": {
-        source: "iana"
-      },
-      "application/vnd.eprints.data+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.epson.esf": {
-        source: "iana",
-        extensions: ["esf"]
-      },
-      "application/vnd.epson.msf": {
-        source: "iana",
-        extensions: ["msf"]
-      },
-      "application/vnd.epson.quickanime": {
-        source: "iana",
-        extensions: ["qam"]
-      },
-      "application/vnd.epson.salt": {
-        source: "iana",
-        extensions: ["slt"]
-      },
-      "application/vnd.epson.ssf": {
-        source: "iana",
-        extensions: ["ssf"]
-      },
-      "application/vnd.ericsson.quickcall": {
-        source: "iana"
-      },
-      "application/vnd.espass-espass+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.eszigno3+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["es3", "et3"]
-      },
-      "application/vnd.etsi.aoc+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.asic-e+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.etsi.asic-s+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.etsi.cug+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvcommand+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvdiscovery+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvprofile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvsad-bc+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvsad-cod+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvsad-npvr+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvservice+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvsync+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.iptvueprofile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.mcid+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.mheg5": {
-        source: "iana"
-      },
-      "application/vnd.etsi.overload-control-policy-dataset+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.pstn+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.sci+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.simservs+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.timestamp-token": {
-        source: "iana"
-      },
-      "application/vnd.etsi.tsl+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.etsi.tsl.der": {
-        source: "iana"
-      },
-      "application/vnd.eu.kasparian.car+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.eudora.data": {
-        source: "iana"
-      },
-      "application/vnd.evolv.ecig.profile": {
-        source: "iana"
-      },
-      "application/vnd.evolv.ecig.settings": {
-        source: "iana"
-      },
-      "application/vnd.evolv.ecig.theme": {
-        source: "iana"
-      },
-      "application/vnd.exstream-empower+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.exstream-package": {
-        source: "iana"
-      },
-      "application/vnd.ezpix-album": {
-        source: "iana",
-        extensions: ["ez2"]
-      },
-      "application/vnd.ezpix-package": {
-        source: "iana",
-        extensions: ["ez3"]
-      },
-      "application/vnd.f-secure.mobile": {
-        source: "iana"
-      },
-      "application/vnd.familysearch.gedcom+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.fastcopy-disk-image": {
-        source: "iana"
-      },
-      "application/vnd.fdf": {
-        source: "iana",
-        extensions: ["fdf"]
-      },
-      "application/vnd.fdsn.mseed": {
-        source: "iana",
-        extensions: ["mseed"]
-      },
-      "application/vnd.fdsn.seed": {
-        source: "iana",
-        extensions: ["seed", "dataless"]
-      },
-      "application/vnd.ffsns": {
-        source: "iana"
-      },
-      "application/vnd.ficlab.flb+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.filmit.zfc": {
-        source: "iana"
-      },
-      "application/vnd.fints": {
-        source: "iana"
-      },
-      "application/vnd.firemonkeys.cloudcell": {
-        source: "iana"
-      },
-      "application/vnd.flographit": {
-        source: "iana",
-        extensions: ["gph"]
-      },
-      "application/vnd.fluxtime.clip": {
-        source: "iana",
-        extensions: ["ftc"]
-      },
-      "application/vnd.font-fontforge-sfd": {
-        source: "iana"
-      },
-      "application/vnd.framemaker": {
-        source: "iana",
-        extensions: ["fm", "frame", "maker", "book"]
-      },
-      "application/vnd.frogans.fnc": {
-        source: "iana",
-        extensions: ["fnc"]
-      },
-      "application/vnd.frogans.ltf": {
-        source: "iana",
-        extensions: ["ltf"]
-      },
-      "application/vnd.fsc.weblaunch": {
-        source: "iana",
-        extensions: ["fsc"]
-      },
-      "application/vnd.fujifilm.fb.docuworks": {
-        source: "iana"
-      },
-      "application/vnd.fujifilm.fb.docuworks.binder": {
-        source: "iana"
-      },
-      "application/vnd.fujifilm.fb.docuworks.container": {
-        source: "iana"
-      },
-      "application/vnd.fujifilm.fb.jfi+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.fujitsu.oasys": {
-        source: "iana",
-        extensions: ["oas"]
-      },
-      "application/vnd.fujitsu.oasys2": {
-        source: "iana",
-        extensions: ["oa2"]
-      },
-      "application/vnd.fujitsu.oasys3": {
-        source: "iana",
-        extensions: ["oa3"]
-      },
-      "application/vnd.fujitsu.oasysgp": {
-        source: "iana",
-        extensions: ["fg5"]
-      },
-      "application/vnd.fujitsu.oasysprs": {
-        source: "iana",
-        extensions: ["bh2"]
-      },
-      "application/vnd.fujixerox.art-ex": {
-        source: "iana"
-      },
-      "application/vnd.fujixerox.art4": {
-        source: "iana"
-      },
-      "application/vnd.fujixerox.ddd": {
-        source: "iana",
-        extensions: ["ddd"]
-      },
-      "application/vnd.fujixerox.docuworks": {
-        source: "iana",
-        extensions: ["xdw"]
-      },
-      "application/vnd.fujixerox.docuworks.binder": {
-        source: "iana",
-        extensions: ["xbd"]
-      },
-      "application/vnd.fujixerox.docuworks.container": {
-        source: "iana"
-      },
-      "application/vnd.fujixerox.hbpl": {
-        source: "iana"
-      },
-      "application/vnd.fut-misnet": {
-        source: "iana"
-      },
-      "application/vnd.futoin+cbor": {
-        source: "iana"
-      },
-      "application/vnd.futoin+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.fuzzysheet": {
-        source: "iana",
-        extensions: ["fzs"]
-      },
-      "application/vnd.genomatix.tuxedo": {
-        source: "iana",
-        extensions: ["txd"]
-      },
-      "application/vnd.gentics.grd+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.geo+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.geocube+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.geogebra.file": {
-        source: "iana",
-        extensions: ["ggb"]
-      },
-      "application/vnd.geogebra.slides": {
-        source: "iana"
-      },
-      "application/vnd.geogebra.tool": {
-        source: "iana",
-        extensions: ["ggt"]
-      },
-      "application/vnd.geometry-explorer": {
-        source: "iana",
-        extensions: ["gex", "gre"]
-      },
-      "application/vnd.geonext": {
-        source: "iana",
-        extensions: ["gxt"]
-      },
-      "application/vnd.geoplan": {
-        source: "iana",
-        extensions: ["g2w"]
-      },
-      "application/vnd.geospace": {
-        source: "iana",
-        extensions: ["g3w"]
-      },
-      "application/vnd.gerber": {
-        source: "iana"
-      },
-      "application/vnd.globalplatform.card-content-mgt": {
-        source: "iana"
-      },
-      "application/vnd.globalplatform.card-content-mgt-response": {
-        source: "iana"
-      },
-      "application/vnd.gmx": {
-        source: "iana",
-        extensions: ["gmx"]
-      },
-      "application/vnd.google-apps.document": {
-        compressible: false,
-        extensions: ["gdoc"]
-      },
-      "application/vnd.google-apps.presentation": {
-        compressible: false,
-        extensions: ["gslides"]
-      },
-      "application/vnd.google-apps.spreadsheet": {
-        compressible: false,
-        extensions: ["gsheet"]
-      },
-      "application/vnd.google-earth.kml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["kml"]
-      },
-      "application/vnd.google-earth.kmz": {
-        source: "iana",
-        compressible: false,
-        extensions: ["kmz"]
-      },
-      "application/vnd.gov.sk.e-form+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.gov.sk.e-form+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.gov.sk.xmldatacontainer+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.grafeq": {
-        source: "iana",
-        extensions: ["gqf", "gqs"]
-      },
-      "application/vnd.gridmp": {
-        source: "iana"
-      },
-      "application/vnd.groove-account": {
-        source: "iana",
-        extensions: ["gac"]
-      },
-      "application/vnd.groove-help": {
-        source: "iana",
-        extensions: ["ghf"]
-      },
-      "application/vnd.groove-identity-message": {
-        source: "iana",
-        extensions: ["gim"]
-      },
-      "application/vnd.groove-injector": {
-        source: "iana",
-        extensions: ["grv"]
-      },
-      "application/vnd.groove-tool-message": {
-        source: "iana",
-        extensions: ["gtm"]
-      },
-      "application/vnd.groove-tool-template": {
-        source: "iana",
-        extensions: ["tpl"]
-      },
-      "application/vnd.groove-vcard": {
-        source: "iana",
-        extensions: ["vcg"]
-      },
-      "application/vnd.hal+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hal+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["hal"]
-      },
-      "application/vnd.handheld-entertainment+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["zmm"]
-      },
-      "application/vnd.hbci": {
-        source: "iana",
-        extensions: ["hbci"]
-      },
-      "application/vnd.hc+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hcl-bireports": {
-        source: "iana"
-      },
-      "application/vnd.hdt": {
-        source: "iana"
-      },
-      "application/vnd.heroku+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hhe.lesson-player": {
-        source: "iana",
-        extensions: ["les"]
-      },
-      "application/vnd.hl7cda+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.hl7v2+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.hp-hpgl": {
-        source: "iana",
-        extensions: ["hpgl"]
-      },
-      "application/vnd.hp-hpid": {
-        source: "iana",
-        extensions: ["hpid"]
-      },
-      "application/vnd.hp-hps": {
-        source: "iana",
-        extensions: ["hps"]
-      },
-      "application/vnd.hp-jlyt": {
-        source: "iana",
-        extensions: ["jlt"]
-      },
-      "application/vnd.hp-pcl": {
-        source: "iana",
-        extensions: ["pcl"]
-      },
-      "application/vnd.hp-pclxl": {
-        source: "iana",
-        extensions: ["pclxl"]
-      },
-      "application/vnd.httphone": {
-        source: "iana"
-      },
-      "application/vnd.hydrostatix.sof-data": {
-        source: "iana",
-        extensions: ["sfd-hdstx"]
-      },
-      "application/vnd.hyper+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hyper-item+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hyperdrive+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.hzn-3d-crossword": {
-        source: "iana"
-      },
-      "application/vnd.ibm.afplinedata": {
-        source: "iana"
-      },
-      "application/vnd.ibm.electronic-media": {
-        source: "iana"
-      },
-      "application/vnd.ibm.minipay": {
-        source: "iana",
-        extensions: ["mpy"]
-      },
-      "application/vnd.ibm.modcap": {
-        source: "iana",
-        extensions: ["afp", "listafp", "list3820"]
-      },
-      "application/vnd.ibm.rights-management": {
-        source: "iana",
-        extensions: ["irm"]
-      },
-      "application/vnd.ibm.secure-container": {
-        source: "iana",
-        extensions: ["sc"]
-      },
-      "application/vnd.iccprofile": {
-        source: "iana",
-        extensions: ["icc", "icm"]
-      },
-      "application/vnd.ieee.1905": {
-        source: "iana"
-      },
-      "application/vnd.igloader": {
-        source: "iana",
-        extensions: ["igl"]
-      },
-      "application/vnd.imagemeter.folder+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.imagemeter.image+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.immervision-ivp": {
-        source: "iana",
-        extensions: ["ivp"]
-      },
-      "application/vnd.immervision-ivu": {
-        source: "iana",
-        extensions: ["ivu"]
-      },
-      "application/vnd.ims.imsccv1p1": {
-        source: "iana"
-      },
-      "application/vnd.ims.imsccv1p2": {
-        source: "iana"
-      },
-      "application/vnd.ims.imsccv1p3": {
-        source: "iana"
-      },
-      "application/vnd.ims.lis.v2.result+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ims.lti.v2.toolproxy+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ims.lti.v2.toolproxy.id+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ims.lti.v2.toolsettings+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ims.lti.v2.toolsettings.simple+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.informedcontrol.rms+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.informix-visionary": {
-        source: "iana"
-      },
-      "application/vnd.infotech.project": {
-        source: "iana"
-      },
-      "application/vnd.infotech.project+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.innopath.wamp.notification": {
-        source: "iana"
-      },
-      "application/vnd.insors.igm": {
-        source: "iana",
-        extensions: ["igm"]
-      },
-      "application/vnd.intercon.formnet": {
-        source: "iana",
-        extensions: ["xpw", "xpx"]
-      },
-      "application/vnd.intergeo": {
-        source: "iana",
-        extensions: ["i2g"]
-      },
-      "application/vnd.intertrust.digibox": {
-        source: "iana"
-      },
-      "application/vnd.intertrust.nncp": {
-        source: "iana"
-      },
-      "application/vnd.intu.qbo": {
-        source: "iana",
-        extensions: ["qbo"]
-      },
-      "application/vnd.intu.qfx": {
-        source: "iana",
-        extensions: ["qfx"]
-      },
-      "application/vnd.iptc.g2.catalogitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.conceptitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.knowledgeitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.newsitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.newsmessage+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.packageitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.iptc.g2.planningitem+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ipunplugged.rcprofile": {
-        source: "iana",
-        extensions: ["rcprofile"]
-      },
-      "application/vnd.irepository.package+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["irp"]
-      },
-      "application/vnd.is-xpr": {
-        source: "iana",
-        extensions: ["xpr"]
-      },
-      "application/vnd.isac.fcs": {
-        source: "iana",
-        extensions: ["fcs"]
-      },
-      "application/vnd.iso11783-10+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.jam": {
-        source: "iana",
-        extensions: ["jam"]
-      },
-      "application/vnd.japannet-directory-service": {
-        source: "iana"
-      },
-      "application/vnd.japannet-jpnstore-wakeup": {
-        source: "iana"
-      },
-      "application/vnd.japannet-payment-wakeup": {
-        source: "iana"
-      },
-      "application/vnd.japannet-registration": {
-        source: "iana"
-      },
-      "application/vnd.japannet-registration-wakeup": {
-        source: "iana"
-      },
-      "application/vnd.japannet-setstore-wakeup": {
-        source: "iana"
-      },
-      "application/vnd.japannet-verification": {
-        source: "iana"
-      },
-      "application/vnd.japannet-verification-wakeup": {
-        source: "iana"
-      },
-      "application/vnd.jcp.javame.midlet-rms": {
-        source: "iana",
-        extensions: ["rms"]
-      },
-      "application/vnd.jisp": {
-        source: "iana",
-        extensions: ["jisp"]
-      },
-      "application/vnd.joost.joda-archive": {
-        source: "iana",
-        extensions: ["joda"]
-      },
-      "application/vnd.jsk.isdn-ngn": {
-        source: "iana"
-      },
-      "application/vnd.kahootz": {
-        source: "iana",
-        extensions: ["ktz", "ktr"]
-      },
-      "application/vnd.kde.karbon": {
-        source: "iana",
-        extensions: ["karbon"]
-      },
-      "application/vnd.kde.kchart": {
-        source: "iana",
-        extensions: ["chrt"]
-      },
-      "application/vnd.kde.kformula": {
-        source: "iana",
-        extensions: ["kfo"]
-      },
-      "application/vnd.kde.kivio": {
-        source: "iana",
-        extensions: ["flw"]
-      },
-      "application/vnd.kde.kontour": {
-        source: "iana",
-        extensions: ["kon"]
-      },
-      "application/vnd.kde.kpresenter": {
-        source: "iana",
-        extensions: ["kpr", "kpt"]
-      },
-      "application/vnd.kde.kspread": {
-        source: "iana",
-        extensions: ["ksp"]
-      },
-      "application/vnd.kde.kword": {
-        source: "iana",
-        extensions: ["kwd", "kwt"]
-      },
-      "application/vnd.kenameaapp": {
-        source: "iana",
-        extensions: ["htke"]
-      },
-      "application/vnd.kidspiration": {
-        source: "iana",
-        extensions: ["kia"]
-      },
-      "application/vnd.kinar": {
-        source: "iana",
-        extensions: ["kne", "knp"]
-      },
-      "application/vnd.koan": {
-        source: "iana",
-        extensions: ["skp", "skd", "skt", "skm"]
-      },
-      "application/vnd.kodak-descriptor": {
-        source: "iana",
-        extensions: ["sse"]
-      },
-      "application/vnd.las": {
-        source: "iana"
-      },
-      "application/vnd.las.las+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.las.las+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["lasxml"]
-      },
-      "application/vnd.laszip": {
-        source: "iana"
-      },
-      "application/vnd.leap+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.liberty-request+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.llamagraphics.life-balance.desktop": {
-        source: "iana",
-        extensions: ["lbd"]
-      },
-      "application/vnd.llamagraphics.life-balance.exchange+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["lbe"]
-      },
-      "application/vnd.logipipe.circuit+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.loom": {
-        source: "iana"
-      },
-      "application/vnd.lotus-1-2-3": {
-        source: "iana",
-        extensions: ["123"]
-      },
-      "application/vnd.lotus-approach": {
-        source: "iana",
-        extensions: ["apr"]
-      },
-      "application/vnd.lotus-freelance": {
-        source: "iana",
-        extensions: ["pre"]
-      },
-      "application/vnd.lotus-notes": {
-        source: "iana",
-        extensions: ["nsf"]
-      },
-      "application/vnd.lotus-organizer": {
-        source: "iana",
-        extensions: ["org"]
-      },
-      "application/vnd.lotus-screencam": {
-        source: "iana",
-        extensions: ["scm"]
-      },
-      "application/vnd.lotus-wordpro": {
-        source: "iana",
-        extensions: ["lwp"]
-      },
-      "application/vnd.macports.portpkg": {
-        source: "iana",
-        extensions: ["portpkg"]
-      },
-      "application/vnd.mapbox-vector-tile": {
-        source: "iana",
-        extensions: ["mvt"]
-      },
-      "application/vnd.marlin.drm.actiontoken+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.marlin.drm.conftoken+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.marlin.drm.license+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.marlin.drm.mdcf": {
-        source: "iana"
-      },
-      "application/vnd.mason+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.maxar.archive.3tz+zip": {
-        source: "iana",
-        compressible: false
-      },
-      "application/vnd.maxmind.maxmind-db": {
-        source: "iana"
-      },
-      "application/vnd.mcd": {
-        source: "iana",
-        extensions: ["mcd"]
-      },
-      "application/vnd.medcalcdata": {
-        source: "iana",
-        extensions: ["mc1"]
-      },
-      "application/vnd.mediastation.cdkey": {
-        source: "iana",
-        extensions: ["cdkey"]
-      },
-      "application/vnd.meridian-slingshot": {
-        source: "iana"
-      },
-      "application/vnd.mfer": {
-        source: "iana",
-        extensions: ["mwf"]
-      },
-      "application/vnd.mfmp": {
-        source: "iana",
-        extensions: ["mfm"]
-      },
-      "application/vnd.micro+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.micrografx.flo": {
-        source: "iana",
-        extensions: ["flo"]
-      },
-      "application/vnd.micrografx.igx": {
-        source: "iana",
-        extensions: ["igx"]
-      },
-      "application/vnd.microsoft.portable-executable": {
-        source: "iana"
-      },
-      "application/vnd.microsoft.windows.thumbnail-cache": {
-        source: "iana"
-      },
-      "application/vnd.miele+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.mif": {
-        source: "iana",
-        extensions: ["mif"]
-      },
-      "application/vnd.minisoft-hp3000-save": {
-        source: "iana"
-      },
-      "application/vnd.mitsubishi.misty-guard.trustweb": {
-        source: "iana"
-      },
-      "application/vnd.mobius.daf": {
-        source: "iana",
-        extensions: ["daf"]
-      },
-      "application/vnd.mobius.dis": {
-        source: "iana",
-        extensions: ["dis"]
-      },
-      "application/vnd.mobius.mbk": {
-        source: "iana",
-        extensions: ["mbk"]
-      },
-      "application/vnd.mobius.mqy": {
-        source: "iana",
-        extensions: ["mqy"]
-      },
-      "application/vnd.mobius.msl": {
-        source: "iana",
-        extensions: ["msl"]
-      },
-      "application/vnd.mobius.plc": {
-        source: "iana",
-        extensions: ["plc"]
-      },
-      "application/vnd.mobius.txf": {
-        source: "iana",
-        extensions: ["txf"]
-      },
-      "application/vnd.mophun.application": {
-        source: "iana",
-        extensions: ["mpn"]
-      },
-      "application/vnd.mophun.certificate": {
-        source: "iana",
-        extensions: ["mpc"]
-      },
-      "application/vnd.motorola.flexsuite": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.adsi": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.fis": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.gotap": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.kmr": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.ttc": {
-        source: "iana"
-      },
-      "application/vnd.motorola.flexsuite.wem": {
-        source: "iana"
-      },
-      "application/vnd.motorola.iprm": {
-        source: "iana"
-      },
-      "application/vnd.mozilla.xul+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xul"]
-      },
-      "application/vnd.ms-3mfdocument": {
-        source: "iana"
-      },
-      "application/vnd.ms-artgalry": {
-        source: "iana",
-        extensions: ["cil"]
-      },
-      "application/vnd.ms-asf": {
-        source: "iana"
-      },
-      "application/vnd.ms-cab-compressed": {
-        source: "iana",
-        extensions: ["cab"]
-      },
-      "application/vnd.ms-color.iccprofile": {
-        source: "apache"
-      },
-      "application/vnd.ms-excel": {
-        source: "iana",
-        compressible: false,
-        extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
-      },
-      "application/vnd.ms-excel.addin.macroenabled.12": {
-        source: "iana",
-        extensions: ["xlam"]
-      },
-      "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
-        source: "iana",
-        extensions: ["xlsb"]
-      },
-      "application/vnd.ms-excel.sheet.macroenabled.12": {
-        source: "iana",
-        extensions: ["xlsm"]
-      },
-      "application/vnd.ms-excel.template.macroenabled.12": {
-        source: "iana",
-        extensions: ["xltm"]
-      },
-      "application/vnd.ms-fontobject": {
-        source: "iana",
-        compressible: true,
-        extensions: ["eot"]
-      },
-      "application/vnd.ms-htmlhelp": {
-        source: "iana",
-        extensions: ["chm"]
-      },
-      "application/vnd.ms-ims": {
-        source: "iana",
-        extensions: ["ims"]
-      },
-      "application/vnd.ms-lrm": {
-        source: "iana",
-        extensions: ["lrm"]
-      },
-      "application/vnd.ms-office.activex+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ms-officetheme": {
-        source: "iana",
-        extensions: ["thmx"]
-      },
-      "application/vnd.ms-opentype": {
-        source: "apache",
-        compressible: true
-      },
-      "application/vnd.ms-outlook": {
-        compressible: false,
-        extensions: ["msg"]
-      },
-      "application/vnd.ms-package.obfuscated-opentype": {
-        source: "apache"
-      },
-      "application/vnd.ms-pki.seccat": {
-        source: "apache",
-        extensions: ["cat"]
-      },
-      "application/vnd.ms-pki.stl": {
-        source: "apache",
-        extensions: ["stl"]
-      },
-      "application/vnd.ms-playready.initiator+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ms-powerpoint": {
-        source: "iana",
-        compressible: false,
-        extensions: ["ppt", "pps", "pot"]
-      },
-      "application/vnd.ms-powerpoint.addin.macroenabled.12": {
-        source: "iana",
-        extensions: ["ppam"]
-      },
-      "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
-        source: "iana",
-        extensions: ["pptm"]
-      },
-      "application/vnd.ms-powerpoint.slide.macroenabled.12": {
-        source: "iana",
-        extensions: ["sldm"]
-      },
-      "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
-        source: "iana",
-        extensions: ["ppsm"]
-      },
-      "application/vnd.ms-powerpoint.template.macroenabled.12": {
-        source: "iana",
-        extensions: ["potm"]
-      },
-      "application/vnd.ms-printdevicecapabilities+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ms-printing.printticket+xml": {
-        source: "apache",
-        compressible: true
-      },
-      "application/vnd.ms-printschematicket+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ms-project": {
-        source: "iana",
-        extensions: ["mpp", "mpt"]
-      },
-      "application/vnd.ms-tnef": {
-        source: "iana"
-      },
-      "application/vnd.ms-windows.devicepairing": {
-        source: "iana"
-      },
-      "application/vnd.ms-windows.nwprinting.oob": {
-        source: "iana"
-      },
-      "application/vnd.ms-windows.printerpairing": {
-        source: "iana"
-      },
-      "application/vnd.ms-windows.wsd.oob": {
-        source: "iana"
-      },
-      "application/vnd.ms-wmdrm.lic-chlg-req": {
-        source: "iana"
-      },
-      "application/vnd.ms-wmdrm.lic-resp": {
-        source: "iana"
-      },
-      "application/vnd.ms-wmdrm.meter-chlg-req": {
-        source: "iana"
-      },
-      "application/vnd.ms-wmdrm.meter-resp": {
-        source: "iana"
-      },
-      "application/vnd.ms-word.document.macroenabled.12": {
-        source: "iana",
-        extensions: ["docm"]
-      },
-      "application/vnd.ms-word.template.macroenabled.12": {
-        source: "iana",
-        extensions: ["dotm"]
-      },
-      "application/vnd.ms-works": {
-        source: "iana",
-        extensions: ["wps", "wks", "wcm", "wdb"]
-      },
-      "application/vnd.ms-wpl": {
-        source: "iana",
-        extensions: ["wpl"]
-      },
-      "application/vnd.ms-xpsdocument": {
-        source: "iana",
-        compressible: false,
-        extensions: ["xps"]
-      },
-      "application/vnd.msa-disk-image": {
-        source: "iana"
-      },
-      "application/vnd.mseq": {
-        source: "iana",
-        extensions: ["mseq"]
-      },
-      "application/vnd.msign": {
-        source: "iana"
-      },
-      "application/vnd.multiad.creator": {
-        source: "iana"
-      },
-      "application/vnd.multiad.creator.cif": {
-        source: "iana"
-      },
-      "application/vnd.music-niff": {
-        source: "iana"
-      },
-      "application/vnd.musician": {
-        source: "iana",
-        extensions: ["mus"]
-      },
-      "application/vnd.muvee.style": {
-        source: "iana",
-        extensions: ["msty"]
-      },
-      "application/vnd.mynfc": {
-        source: "iana",
-        extensions: ["taglet"]
-      },
-      "application/vnd.nacamar.ybrid+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.ncd.control": {
-        source: "iana"
-      },
-      "application/vnd.ncd.reference": {
-        source: "iana"
-      },
-      "application/vnd.nearst.inv+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nebumind.line": {
-        source: "iana"
-      },
-      "application/vnd.nervana": {
-        source: "iana"
-      },
-      "application/vnd.netfpx": {
-        source: "iana"
-      },
-      "application/vnd.neurolanguage.nlu": {
-        source: "iana",
-        extensions: ["nlu"]
-      },
-      "application/vnd.nimn": {
-        source: "iana"
-      },
-      "application/vnd.nintendo.nitro.rom": {
-        source: "iana"
-      },
-      "application/vnd.nintendo.snes.rom": {
-        source: "iana"
-      },
-      "application/vnd.nitf": {
-        source: "iana",
-        extensions: ["ntf", "nitf"]
-      },
-      "application/vnd.noblenet-directory": {
-        source: "iana",
-        extensions: ["nnd"]
-      },
-      "application/vnd.noblenet-sealer": {
-        source: "iana",
-        extensions: ["nns"]
-      },
-      "application/vnd.noblenet-web": {
-        source: "iana",
-        extensions: ["nnw"]
-      },
-      "application/vnd.nokia.catalogs": {
-        source: "iana"
-      },
-      "application/vnd.nokia.conml+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.nokia.conml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nokia.iptv.config+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nokia.isds-radio-presets": {
-        source: "iana"
-      },
-      "application/vnd.nokia.landmark+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.nokia.landmark+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nokia.landmarkcollection+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nokia.n-gage.ac+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ac"]
-      },
-      "application/vnd.nokia.n-gage.data": {
-        source: "iana",
-        extensions: ["ngdat"]
-      },
-      "application/vnd.nokia.n-gage.symbian.install": {
-        source: "iana",
-        extensions: ["n-gage"]
-      },
-      "application/vnd.nokia.ncd": {
-        source: "iana"
-      },
-      "application/vnd.nokia.pcd+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.nokia.pcd+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.nokia.radio-preset": {
-        source: "iana",
-        extensions: ["rpst"]
-      },
-      "application/vnd.nokia.radio-presets": {
-        source: "iana",
-        extensions: ["rpss"]
-      },
-      "application/vnd.novadigm.edm": {
-        source: "iana",
-        extensions: ["edm"]
-      },
-      "application/vnd.novadigm.edx": {
-        source: "iana",
-        extensions: ["edx"]
-      },
-      "application/vnd.novadigm.ext": {
-        source: "iana",
-        extensions: ["ext"]
-      },
-      "application/vnd.ntt-local.content-share": {
-        source: "iana"
-      },
-      "application/vnd.ntt-local.file-transfer": {
-        source: "iana"
-      },
-      "application/vnd.ntt-local.ogw_remote-access": {
-        source: "iana"
-      },
-      "application/vnd.ntt-local.sip-ta_remote": {
-        source: "iana"
-      },
-      "application/vnd.ntt-local.sip-ta_tcp_stream": {
-        source: "iana"
-      },
-      "application/vnd.oasis.opendocument.chart": {
-        source: "iana",
-        extensions: ["odc"]
-      },
-      "application/vnd.oasis.opendocument.chart-template": {
-        source: "iana",
-        extensions: ["otc"]
-      },
-      "application/vnd.oasis.opendocument.database": {
-        source: "iana",
-        extensions: ["odb"]
-      },
-      "application/vnd.oasis.opendocument.formula": {
-        source: "iana",
-        extensions: ["odf"]
-      },
-      "application/vnd.oasis.opendocument.formula-template": {
-        source: "iana",
-        extensions: ["odft"]
-      },
-      "application/vnd.oasis.opendocument.graphics": {
-        source: "iana",
-        compressible: false,
-        extensions: ["odg"]
-      },
-      "application/vnd.oasis.opendocument.graphics-template": {
-        source: "iana",
-        extensions: ["otg"]
-      },
-      "application/vnd.oasis.opendocument.image": {
-        source: "iana",
-        extensions: ["odi"]
-      },
-      "application/vnd.oasis.opendocument.image-template": {
-        source: "iana",
-        extensions: ["oti"]
-      },
-      "application/vnd.oasis.opendocument.presentation": {
-        source: "iana",
-        compressible: false,
-        extensions: ["odp"]
-      },
-      "application/vnd.oasis.opendocument.presentation-template": {
-        source: "iana",
-        extensions: ["otp"]
-      },
-      "application/vnd.oasis.opendocument.spreadsheet": {
-        source: "iana",
-        compressible: false,
-        extensions: ["ods"]
-      },
-      "application/vnd.oasis.opendocument.spreadsheet-template": {
-        source: "iana",
-        extensions: ["ots"]
-      },
-      "application/vnd.oasis.opendocument.text": {
-        source: "iana",
-        compressible: false,
-        extensions: ["odt"]
-      },
-      "application/vnd.oasis.opendocument.text-master": {
-        source: "iana",
-        extensions: ["odm"]
-      },
-      "application/vnd.oasis.opendocument.text-template": {
-        source: "iana",
-        extensions: ["ott"]
-      },
-      "application/vnd.oasis.opendocument.text-web": {
-        source: "iana",
-        extensions: ["oth"]
-      },
-      "application/vnd.obn": {
-        source: "iana"
-      },
-      "application/vnd.ocf+cbor": {
-        source: "iana"
-      },
-      "application/vnd.oci.image.manifest.v1+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oftn.l10n+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.contentaccessdownload+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.contentaccessstreaming+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.cspg-hexbinary": {
-        source: "iana"
-      },
-      "application/vnd.oipf.dae.svg+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.dae.xhtml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.mippvcontrolmessage+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.pae.gem": {
-        source: "iana"
-      },
-      "application/vnd.oipf.spdiscovery+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.spdlist+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.ueprofile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oipf.userprofile+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.olpc-sugar": {
-        source: "iana",
-        extensions: ["xo"]
-      },
-      "application/vnd.oma-scws-config": {
-        source: "iana"
-      },
-      "application/vnd.oma-scws-http-request": {
-        source: "iana"
-      },
-      "application/vnd.oma-scws-http-response": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.drm-trigger+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.imd+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.ltkm": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.notification+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.provisioningtrigger": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.sgboot": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.sgdd+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.sgdu": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.simple-symbol-container": {
-        source: "iana"
-      },
-      "application/vnd.oma.bcast.smartcard-trigger+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.sprov+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.bcast.stkm": {
-        source: "iana"
-      },
-      "application/vnd.oma.cab-address-book+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.cab-feature-handler+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.cab-pcc+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.cab-subs-invite+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.cab-user-prefs+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.dcd": {
-        source: "iana"
-      },
-      "application/vnd.oma.dcdc": {
-        source: "iana"
-      },
-      "application/vnd.oma.dd2+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["dd2"]
-      },
-      "application/vnd.oma.drm.risd+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.group-usage-list+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.lwm2m+cbor": {
-        source: "iana"
-      },
-      "application/vnd.oma.lwm2m+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.lwm2m+tlv": {
-        source: "iana"
-      },
-      "application/vnd.oma.pal+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.poc.detailed-progress-report+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.poc.final-report+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.poc.groups+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.poc.invocation-descriptor+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.poc.optimized-progress-report+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.push": {
-        source: "iana"
-      },
-      "application/vnd.oma.scidm.messages+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oma.xcap-directory+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.omads-email+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.omads-file+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.omads-folder+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.omaloc-supl-init": {
-        source: "iana"
-      },
-      "application/vnd.onepager": {
-        source: "iana"
-      },
-      "application/vnd.onepagertamp": {
-        source: "iana"
-      },
-      "application/vnd.onepagertamx": {
-        source: "iana"
-      },
-      "application/vnd.onepagertat": {
-        source: "iana"
-      },
-      "application/vnd.onepagertatp": {
-        source: "iana"
-      },
-      "application/vnd.onepagertatx": {
-        source: "iana"
-      },
-      "application/vnd.openblox.game+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["obgx"]
-      },
-      "application/vnd.openblox.game-binary": {
-        source: "iana"
-      },
-      "application/vnd.openeye.oeb": {
-        source: "iana"
-      },
-      "application/vnd.openofficeorg.extension": {
-        source: "apache",
-        extensions: ["oxt"]
-      },
-      "application/vnd.openstreetmap.data+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["osm"]
-      },
-      "application/vnd.opentimestamps.ots": {
-        source: "iana"
-      },
-      "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawing+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
-        source: "iana",
-        compressible: false,
-        extensions: ["pptx"]
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slide": {
-        source: "iana",
-        extensions: ["sldx"]
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
-        source: "iana",
-        extensions: ["ppsx"]
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.template": {
-        source: "iana",
-        extensions: ["potx"]
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
-        source: "iana",
-        compressible: false,
-        extensions: ["xlsx"]
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
-        source: "iana",
-        extensions: ["xltx"]
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.theme+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.vmldrawing": {
-        source: "iana"
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
-        source: "iana",
-        compressible: false,
-        extensions: ["docx"]
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
-        source: "iana",
-        extensions: ["dotx"]
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-package.core-properties+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.openxmlformats-package.relationships+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oracle.resource+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.orange.indata": {
-        source: "iana"
-      },
-      "application/vnd.osa.netdeploy": {
-        source: "iana"
-      },
-      "application/vnd.osgeo.mapguide.package": {
-        source: "iana",
-        extensions: ["mgp"]
-      },
-      "application/vnd.osgi.bundle": {
-        source: "iana"
-      },
-      "application/vnd.osgi.dp": {
-        source: "iana",
-        extensions: ["dp"]
-      },
-      "application/vnd.osgi.subsystem": {
-        source: "iana",
-        extensions: ["esa"]
-      },
-      "application/vnd.otps.ct-kip+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.oxli.countgraph": {
-        source: "iana"
-      },
-      "application/vnd.pagerduty+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.palm": {
-        source: "iana",
-        extensions: ["pdb", "pqa", "oprc"]
-      },
-      "application/vnd.panoply": {
-        source: "iana"
-      },
-      "application/vnd.paos.xml": {
-        source: "iana"
-      },
-      "application/vnd.patentdive": {
-        source: "iana"
-      },
-      "application/vnd.patientecommsdoc": {
-        source: "iana"
-      },
-      "application/vnd.pawaafile": {
-        source: "iana",
-        extensions: ["paw"]
-      },
-      "application/vnd.pcos": {
-        source: "iana"
-      },
-      "application/vnd.pg.format": {
-        source: "iana",
-        extensions: ["str"]
-      },
-      "application/vnd.pg.osasli": {
-        source: "iana",
-        extensions: ["ei6"]
-      },
-      "application/vnd.piaccess.application-licence": {
-        source: "iana"
-      },
-      "application/vnd.picsel": {
-        source: "iana",
-        extensions: ["efif"]
-      },
-      "application/vnd.pmi.widget": {
-        source: "iana",
-        extensions: ["wg"]
-      },
-      "application/vnd.poc.group-advertisement+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.pocketlearn": {
-        source: "iana",
-        extensions: ["plf"]
-      },
-      "application/vnd.powerbuilder6": {
-        source: "iana",
-        extensions: ["pbd"]
-      },
-      "application/vnd.powerbuilder6-s": {
-        source: "iana"
-      },
-      "application/vnd.powerbuilder7": {
-        source: "iana"
-      },
-      "application/vnd.powerbuilder7-s": {
-        source: "iana"
-      },
-      "application/vnd.powerbuilder75": {
-        source: "iana"
-      },
-      "application/vnd.powerbuilder75-s": {
-        source: "iana"
-      },
-      "application/vnd.preminet": {
-        source: "iana"
-      },
-      "application/vnd.previewsystems.box": {
-        source: "iana",
-        extensions: ["box"]
-      },
-      "application/vnd.proteus.magazine": {
-        source: "iana",
-        extensions: ["mgz"]
-      },
-      "application/vnd.psfs": {
-        source: "iana"
-      },
-      "application/vnd.publishare-delta-tree": {
-        source: "iana",
-        extensions: ["qps"]
-      },
-      "application/vnd.pvi.ptid1": {
-        source: "iana",
-        extensions: ["ptid"]
-      },
-      "application/vnd.pwg-multiplexed": {
-        source: "iana"
-      },
-      "application/vnd.pwg-xhtml-print+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.qualcomm.brew-app-res": {
-        source: "iana"
-      },
-      "application/vnd.quarantainenet": {
-        source: "iana"
-      },
-      "application/vnd.quark.quarkxpress": {
-        source: "iana",
-        extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
-      },
-      "application/vnd.quobject-quoxdocument": {
-        source: "iana"
-      },
-      "application/vnd.radisys.moml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-audit+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-audit-conf+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-audit-conn+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-audit-dialog+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-audit-stream+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-conf+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-base+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-fax-detect+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-group+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-speech+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.radisys.msml-dialog-transform+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.rainstor.data": {
-        source: "iana"
-      },
-      "application/vnd.rapid": {
-        source: "iana"
-      },
-      "application/vnd.rar": {
-        source: "iana",
-        extensions: ["rar"]
-      },
-      "application/vnd.realvnc.bed": {
-        source: "iana",
-        extensions: ["bed"]
-      },
-      "application/vnd.recordare.musicxml": {
-        source: "iana",
-        extensions: ["mxl"]
-      },
-      "application/vnd.recordare.musicxml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["musicxml"]
-      },
-      "application/vnd.renlearn.rlprint": {
-        source: "iana"
-      },
-      "application/vnd.resilient.logic": {
-        source: "iana"
-      },
-      "application/vnd.restful+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.rig.cryptonote": {
-        source: "iana",
-        extensions: ["cryptonote"]
-      },
-      "application/vnd.rim.cod": {
-        source: "apache",
-        extensions: ["cod"]
-      },
-      "application/vnd.rn-realmedia": {
-        source: "apache",
-        extensions: ["rm"]
-      },
-      "application/vnd.rn-realmedia-vbr": {
-        source: "apache",
-        extensions: ["rmvb"]
-      },
-      "application/vnd.route66.link66+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["link66"]
-      },
-      "application/vnd.rs-274x": {
-        source: "iana"
-      },
-      "application/vnd.ruckus.download": {
-        source: "iana"
-      },
-      "application/vnd.s3sms": {
-        source: "iana"
-      },
-      "application/vnd.sailingtracker.track": {
-        source: "iana",
-        extensions: ["st"]
-      },
-      "application/vnd.sar": {
-        source: "iana"
-      },
-      "application/vnd.sbm.cid": {
-        source: "iana"
-      },
-      "application/vnd.sbm.mid2": {
-        source: "iana"
-      },
-      "application/vnd.scribus": {
-        source: "iana"
-      },
-      "application/vnd.sealed.3df": {
-        source: "iana"
-      },
-      "application/vnd.sealed.csf": {
-        source: "iana"
-      },
-      "application/vnd.sealed.doc": {
-        source: "iana"
-      },
-      "application/vnd.sealed.eml": {
-        source: "iana"
-      },
-      "application/vnd.sealed.mht": {
-        source: "iana"
-      },
-      "application/vnd.sealed.net": {
-        source: "iana"
-      },
-      "application/vnd.sealed.ppt": {
-        source: "iana"
-      },
-      "application/vnd.sealed.tiff": {
-        source: "iana"
-      },
-      "application/vnd.sealed.xls": {
-        source: "iana"
-      },
-      "application/vnd.sealedmedia.softseal.html": {
-        source: "iana"
-      },
-      "application/vnd.sealedmedia.softseal.pdf": {
-        source: "iana"
-      },
-      "application/vnd.seemail": {
-        source: "iana",
-        extensions: ["see"]
-      },
-      "application/vnd.seis+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.sema": {
-        source: "iana",
-        extensions: ["sema"]
-      },
-      "application/vnd.semd": {
-        source: "iana",
-        extensions: ["semd"]
-      },
-      "application/vnd.semf": {
-        source: "iana",
-        extensions: ["semf"]
-      },
-      "application/vnd.shade-save-file": {
-        source: "iana"
-      },
-      "application/vnd.shana.informed.formdata": {
-        source: "iana",
-        extensions: ["ifm"]
-      },
-      "application/vnd.shana.informed.formtemplate": {
-        source: "iana",
-        extensions: ["itp"]
-      },
-      "application/vnd.shana.informed.interchange": {
-        source: "iana",
-        extensions: ["iif"]
-      },
-      "application/vnd.shana.informed.package": {
-        source: "iana",
-        extensions: ["ipk"]
-      },
-      "application/vnd.shootproof+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.shopkick+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.shp": {
-        source: "iana"
-      },
-      "application/vnd.shx": {
-        source: "iana"
-      },
-      "application/vnd.sigrok.session": {
-        source: "iana"
-      },
-      "application/vnd.simtech-mindmapper": {
-        source: "iana",
-        extensions: ["twd", "twds"]
-      },
-      "application/vnd.siren+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.smaf": {
-        source: "iana",
-        extensions: ["mmf"]
-      },
-      "application/vnd.smart.notebook": {
-        source: "iana"
-      },
-      "application/vnd.smart.teacher": {
-        source: "iana",
-        extensions: ["teacher"]
-      },
-      "application/vnd.snesdev-page-table": {
-        source: "iana"
-      },
-      "application/vnd.software602.filler.form+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["fo"]
-      },
-      "application/vnd.software602.filler.form-xml-zip": {
-        source: "iana"
-      },
-      "application/vnd.solent.sdkm+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["sdkm", "sdkd"]
-      },
-      "application/vnd.spotfire.dxp": {
-        source: "iana",
-        extensions: ["dxp"]
-      },
-      "application/vnd.spotfire.sfs": {
-        source: "iana",
-        extensions: ["sfs"]
-      },
-      "application/vnd.sqlite3": {
-        source: "iana"
-      },
-      "application/vnd.sss-cod": {
-        source: "iana"
-      },
-      "application/vnd.sss-dtf": {
-        source: "iana"
-      },
-      "application/vnd.sss-ntf": {
-        source: "iana"
-      },
-      "application/vnd.stardivision.calc": {
-        source: "apache",
-        extensions: ["sdc"]
-      },
-      "application/vnd.stardivision.draw": {
-        source: "apache",
-        extensions: ["sda"]
-      },
-      "application/vnd.stardivision.impress": {
-        source: "apache",
-        extensions: ["sdd"]
-      },
-      "application/vnd.stardivision.math": {
-        source: "apache",
-        extensions: ["smf"]
-      },
-      "application/vnd.stardivision.writer": {
-        source: "apache",
-        extensions: ["sdw", "vor"]
-      },
-      "application/vnd.stardivision.writer-global": {
-        source: "apache",
-        extensions: ["sgl"]
-      },
-      "application/vnd.stepmania.package": {
-        source: "iana",
-        extensions: ["smzip"]
-      },
-      "application/vnd.stepmania.stepchart": {
-        source: "iana",
-        extensions: ["sm"]
-      },
-      "application/vnd.street-stream": {
-        source: "iana"
-      },
-      "application/vnd.sun.wadl+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wadl"]
-      },
-      "application/vnd.sun.xml.calc": {
-        source: "apache",
-        extensions: ["sxc"]
-      },
-      "application/vnd.sun.xml.calc.template": {
-        source: "apache",
-        extensions: ["stc"]
-      },
-      "application/vnd.sun.xml.draw": {
-        source: "apache",
-        extensions: ["sxd"]
-      },
-      "application/vnd.sun.xml.draw.template": {
-        source: "apache",
-        extensions: ["std"]
-      },
-      "application/vnd.sun.xml.impress": {
-        source: "apache",
-        extensions: ["sxi"]
-      },
-      "application/vnd.sun.xml.impress.template": {
-        source: "apache",
-        extensions: ["sti"]
-      },
-      "application/vnd.sun.xml.math": {
-        source: "apache",
-        extensions: ["sxm"]
-      },
-      "application/vnd.sun.xml.writer": {
-        source: "apache",
-        extensions: ["sxw"]
-      },
-      "application/vnd.sun.xml.writer.global": {
-        source: "apache",
-        extensions: ["sxg"]
-      },
-      "application/vnd.sun.xml.writer.template": {
-        source: "apache",
-        extensions: ["stw"]
-      },
-      "application/vnd.sus-calendar": {
-        source: "iana",
-        extensions: ["sus", "susp"]
-      },
-      "application/vnd.svd": {
-        source: "iana",
-        extensions: ["svd"]
-      },
-      "application/vnd.swiftview-ics": {
-        source: "iana"
-      },
-      "application/vnd.sycle+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.syft+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.symbian.install": {
-        source: "apache",
-        extensions: ["sis", "sisx"]
-      },
-      "application/vnd.syncml+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["xsm"]
-      },
-      "application/vnd.syncml.dm+wbxml": {
-        source: "iana",
-        charset: "UTF-8",
-        extensions: ["bdm"]
-      },
-      "application/vnd.syncml.dm+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["xdm"]
-      },
-      "application/vnd.syncml.dm.notification": {
-        source: "iana"
-      },
-      "application/vnd.syncml.dmddf+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.syncml.dmddf+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["ddf"]
-      },
-      "application/vnd.syncml.dmtnds+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.syncml.dmtnds+xml": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true
-      },
-      "application/vnd.syncml.ds.notification": {
-        source: "iana"
-      },
-      "application/vnd.tableschema+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.tao.intent-module-archive": {
-        source: "iana",
-        extensions: ["tao"]
-      },
-      "application/vnd.tcpdump.pcap": {
-        source: "iana",
-        extensions: ["pcap", "cap", "dmp"]
-      },
-      "application/vnd.think-cell.ppttc+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.tmd.mediaflex.api+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.tml": {
-        source: "iana"
-      },
-      "application/vnd.tmobile-livetv": {
-        source: "iana",
-        extensions: ["tmo"]
-      },
-      "application/vnd.tri.onesource": {
-        source: "iana"
-      },
-      "application/vnd.trid.tpt": {
-        source: "iana",
-        extensions: ["tpt"]
-      },
-      "application/vnd.triscape.mxs": {
-        source: "iana",
-        extensions: ["mxs"]
-      },
-      "application/vnd.trueapp": {
-        source: "iana",
-        extensions: ["tra"]
-      },
-      "application/vnd.truedoc": {
-        source: "iana"
-      },
-      "application/vnd.ubisoft.webplayer": {
-        source: "iana"
-      },
-      "application/vnd.ufdl": {
-        source: "iana",
-        extensions: ["ufd", "ufdl"]
-      },
-      "application/vnd.uiq.theme": {
-        source: "iana",
-        extensions: ["utz"]
-      },
-      "application/vnd.umajin": {
-        source: "iana",
-        extensions: ["umj"]
-      },
-      "application/vnd.unity": {
-        source: "iana",
-        extensions: ["unityweb"]
-      },
-      "application/vnd.uoml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["uoml"]
-      },
-      "application/vnd.uplanet.alert": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.alert-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.bearer-choice": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.bearer-choice-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.cacheop": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.cacheop-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.channel": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.channel-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.list": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.list-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.listcmd": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.listcmd-wbxml": {
-        source: "iana"
-      },
-      "application/vnd.uplanet.signal": {
-        source: "iana"
-      },
-      "application/vnd.uri-map": {
-        source: "iana"
-      },
-      "application/vnd.valve.source.material": {
-        source: "iana"
-      },
-      "application/vnd.vcx": {
-        source: "iana",
-        extensions: ["vcx"]
-      },
-      "application/vnd.vd-study": {
-        source: "iana"
-      },
-      "application/vnd.vectorworks": {
-        source: "iana"
-      },
-      "application/vnd.vel+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.verimatrix.vcas": {
-        source: "iana"
-      },
-      "application/vnd.veritone.aion+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.veryant.thin": {
-        source: "iana"
-      },
-      "application/vnd.ves.encrypted": {
-        source: "iana"
-      },
-      "application/vnd.vidsoft.vidconference": {
-        source: "iana"
-      },
-      "application/vnd.visio": {
-        source: "iana",
-        extensions: ["vsd", "vst", "vss", "vsw"]
-      },
-      "application/vnd.visionary": {
-        source: "iana",
-        extensions: ["vis"]
-      },
-      "application/vnd.vividence.scriptfile": {
-        source: "iana"
-      },
-      "application/vnd.vsf": {
-        source: "iana",
-        extensions: ["vsf"]
-      },
-      "application/vnd.wap.sic": {
-        source: "iana"
-      },
-      "application/vnd.wap.slc": {
-        source: "iana"
-      },
-      "application/vnd.wap.wbxml": {
-        source: "iana",
-        charset: "UTF-8",
-        extensions: ["wbxml"]
-      },
-      "application/vnd.wap.wmlc": {
-        source: "iana",
-        extensions: ["wmlc"]
-      },
-      "application/vnd.wap.wmlscriptc": {
-        source: "iana",
-        extensions: ["wmlsc"]
-      },
-      "application/vnd.webturbo": {
-        source: "iana",
-        extensions: ["wtb"]
-      },
-      "application/vnd.wfa.dpp": {
-        source: "iana"
-      },
-      "application/vnd.wfa.p2p": {
-        source: "iana"
-      },
-      "application/vnd.wfa.wsc": {
-        source: "iana"
-      },
-      "application/vnd.windows.devicepairing": {
-        source: "iana"
-      },
-      "application/vnd.wmc": {
-        source: "iana"
-      },
-      "application/vnd.wmf.bootstrap": {
-        source: "iana"
-      },
-      "application/vnd.wolfram.mathematica": {
-        source: "iana"
-      },
-      "application/vnd.wolfram.mathematica.package": {
-        source: "iana"
-      },
-      "application/vnd.wolfram.player": {
-        source: "iana",
-        extensions: ["nbp"]
-      },
-      "application/vnd.wordperfect": {
-        source: "iana",
-        extensions: ["wpd"]
-      },
-      "application/vnd.wqd": {
-        source: "iana",
-        extensions: ["wqd"]
-      },
-      "application/vnd.wrq-hp3000-labelled": {
-        source: "iana"
-      },
-      "application/vnd.wt.stf": {
-        source: "iana",
-        extensions: ["stf"]
-      },
-      "application/vnd.wv.csp+wbxml": {
-        source: "iana"
-      },
-      "application/vnd.wv.csp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.wv.ssp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.xacml+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.xara": {
-        source: "iana",
-        extensions: ["xar"]
-      },
-      "application/vnd.xfdl": {
-        source: "iana",
-        extensions: ["xfdl"]
-      },
-      "application/vnd.xfdl.webform": {
-        source: "iana"
-      },
-      "application/vnd.xmi+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vnd.xmpie.cpkg": {
-        source: "iana"
-      },
-      "application/vnd.xmpie.dpkg": {
-        source: "iana"
-      },
-      "application/vnd.xmpie.plan": {
-        source: "iana"
-      },
-      "application/vnd.xmpie.ppkg": {
-        source: "iana"
-      },
-      "application/vnd.xmpie.xlim": {
-        source: "iana"
-      },
-      "application/vnd.yamaha.hv-dic": {
-        source: "iana",
-        extensions: ["hvd"]
-      },
-      "application/vnd.yamaha.hv-script": {
-        source: "iana",
-        extensions: ["hvs"]
-      },
-      "application/vnd.yamaha.hv-voice": {
-        source: "iana",
-        extensions: ["hvp"]
-      },
-      "application/vnd.yamaha.openscoreformat": {
-        source: "iana",
-        extensions: ["osf"]
-      },
-      "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["osfpvg"]
-      },
-      "application/vnd.yamaha.remote-setup": {
-        source: "iana"
-      },
-      "application/vnd.yamaha.smaf-audio": {
-        source: "iana",
-        extensions: ["saf"]
-      },
-      "application/vnd.yamaha.smaf-phrase": {
-        source: "iana",
-        extensions: ["spf"]
-      },
-      "application/vnd.yamaha.through-ngn": {
-        source: "iana"
-      },
-      "application/vnd.yamaha.tunnel-udpencap": {
-        source: "iana"
-      },
-      "application/vnd.yaoweme": {
-        source: "iana"
-      },
-      "application/vnd.yellowriver-custom-menu": {
-        source: "iana",
-        extensions: ["cmp"]
-      },
-      "application/vnd.youtube.yt": {
-        source: "iana"
-      },
-      "application/vnd.zul": {
-        source: "iana",
-        extensions: ["zir", "zirz"]
-      },
-      "application/vnd.zzazz.deck+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["zaz"]
-      },
-      "application/voicexml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["vxml"]
-      },
-      "application/voucher-cms+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/vq-rtcpxr": {
-        source: "iana"
-      },
-      "application/wasm": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wasm"]
-      },
-      "application/watcherinfo+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wif"]
-      },
-      "application/webpush-options+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/whoispp-query": {
-        source: "iana"
-      },
-      "application/whoispp-response": {
-        source: "iana"
-      },
-      "application/widget": {
-        source: "iana",
-        extensions: ["wgt"]
-      },
-      "application/winhlp": {
-        source: "apache",
-        extensions: ["hlp"]
-      },
-      "application/wita": {
-        source: "iana"
-      },
-      "application/wordperfect5.1": {
-        source: "iana"
-      },
-      "application/wsdl+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wsdl"]
-      },
-      "application/wspolicy+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["wspolicy"]
-      },
-      "application/x-7z-compressed": {
-        source: "apache",
-        compressible: false,
-        extensions: ["7z"]
-      },
-      "application/x-abiword": {
-        source: "apache",
-        extensions: ["abw"]
-      },
-      "application/x-ace-compressed": {
-        source: "apache",
-        extensions: ["ace"]
-      },
-      "application/x-amf": {
-        source: "apache"
-      },
-      "application/x-apple-diskimage": {
-        source: "apache",
-        extensions: ["dmg"]
-      },
-      "application/x-arj": {
-        compressible: false,
-        extensions: ["arj"]
-      },
-      "application/x-authorware-bin": {
-        source: "apache",
-        extensions: ["aab", "x32", "u32", "vox"]
-      },
-      "application/x-authorware-map": {
-        source: "apache",
-        extensions: ["aam"]
-      },
-      "application/x-authorware-seg": {
-        source: "apache",
-        extensions: ["aas"]
-      },
-      "application/x-bcpio": {
-        source: "apache",
-        extensions: ["bcpio"]
-      },
-      "application/x-bdoc": {
-        compressible: false,
-        extensions: ["bdoc"]
-      },
-      "application/x-bittorrent": {
-        source: "apache",
-        extensions: ["torrent"]
-      },
-      "application/x-blorb": {
-        source: "apache",
-        extensions: ["blb", "blorb"]
-      },
-      "application/x-bzip": {
-        source: "apache",
-        compressible: false,
-        extensions: ["bz"]
-      },
-      "application/x-bzip2": {
-        source: "apache",
-        compressible: false,
-        extensions: ["bz2", "boz"]
-      },
-      "application/x-cbr": {
-        source: "apache",
-        extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
-      },
-      "application/x-cdlink": {
-        source: "apache",
-        extensions: ["vcd"]
-      },
-      "application/x-cfs-compressed": {
-        source: "apache",
-        extensions: ["cfs"]
-      },
-      "application/x-chat": {
-        source: "apache",
-        extensions: ["chat"]
-      },
-      "application/x-chess-pgn": {
-        source: "apache",
-        extensions: ["pgn"]
-      },
-      "application/x-chrome-extension": {
-        extensions: ["crx"]
-      },
-      "application/x-cocoa": {
-        source: "nginx",
-        extensions: ["cco"]
-      },
-      "application/x-compress": {
-        source: "apache"
-      },
-      "application/x-conference": {
-        source: "apache",
-        extensions: ["nsc"]
-      },
-      "application/x-cpio": {
-        source: "apache",
-        extensions: ["cpio"]
-      },
-      "application/x-csh": {
-        source: "apache",
-        extensions: ["csh"]
-      },
-      "application/x-deb": {
-        compressible: false
-      },
-      "application/x-debian-package": {
-        source: "apache",
-        extensions: ["deb", "udeb"]
-      },
-      "application/x-dgc-compressed": {
-        source: "apache",
-        extensions: ["dgc"]
-      },
-      "application/x-director": {
-        source: "apache",
-        extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
-      },
-      "application/x-doom": {
-        source: "apache",
-        extensions: ["wad"]
-      },
-      "application/x-dtbncx+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["ncx"]
-      },
-      "application/x-dtbook+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["dtb"]
-      },
-      "application/x-dtbresource+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["res"]
-      },
-      "application/x-dvi": {
-        source: "apache",
-        compressible: false,
-        extensions: ["dvi"]
-      },
-      "application/x-envoy": {
-        source: "apache",
-        extensions: ["evy"]
-      },
-      "application/x-eva": {
-        source: "apache",
-        extensions: ["eva"]
-      },
-      "application/x-font-bdf": {
-        source: "apache",
-        extensions: ["bdf"]
-      },
-      "application/x-font-dos": {
-        source: "apache"
-      },
-      "application/x-font-framemaker": {
-        source: "apache"
-      },
-      "application/x-font-ghostscript": {
-        source: "apache",
-        extensions: ["gsf"]
-      },
-      "application/x-font-libgrx": {
-        source: "apache"
-      },
-      "application/x-font-linux-psf": {
-        source: "apache",
-        extensions: ["psf"]
-      },
-      "application/x-font-pcf": {
-        source: "apache",
-        extensions: ["pcf"]
-      },
-      "application/x-font-snf": {
-        source: "apache",
-        extensions: ["snf"]
-      },
-      "application/x-font-speedo": {
-        source: "apache"
-      },
-      "application/x-font-sunos-news": {
-        source: "apache"
-      },
-      "application/x-font-type1": {
-        source: "apache",
-        extensions: ["pfa", "pfb", "pfm", "afm"]
-      },
-      "application/x-font-vfont": {
-        source: "apache"
-      },
-      "application/x-freearc": {
-        source: "apache",
-        extensions: ["arc"]
-      },
-      "application/x-futuresplash": {
-        source: "apache",
-        extensions: ["spl"]
-      },
-      "application/x-gca-compressed": {
-        source: "apache",
-        extensions: ["gca"]
-      },
-      "application/x-glulx": {
-        source: "apache",
-        extensions: ["ulx"]
-      },
-      "application/x-gnumeric": {
-        source: "apache",
-        extensions: ["gnumeric"]
-      },
-      "application/x-gramps-xml": {
-        source: "apache",
-        extensions: ["gramps"]
-      },
-      "application/x-gtar": {
-        source: "apache",
-        extensions: ["gtar"]
-      },
-      "application/x-gzip": {
-        source: "apache"
-      },
-      "application/x-hdf": {
-        source: "apache",
-        extensions: ["hdf"]
-      },
-      "application/x-httpd-php": {
-        compressible: true,
-        extensions: ["php"]
-      },
-      "application/x-install-instructions": {
-        source: "apache",
-        extensions: ["install"]
-      },
-      "application/x-iso9660-image": {
-        source: "apache",
-        extensions: ["iso"]
-      },
-      "application/x-iwork-keynote-sffkey": {
-        extensions: ["key"]
-      },
-      "application/x-iwork-numbers-sffnumbers": {
-        extensions: ["numbers"]
-      },
-      "application/x-iwork-pages-sffpages": {
-        extensions: ["pages"]
-      },
-      "application/x-java-archive-diff": {
-        source: "nginx",
-        extensions: ["jardiff"]
-      },
-      "application/x-java-jnlp-file": {
-        source: "apache",
-        compressible: false,
-        extensions: ["jnlp"]
-      },
-      "application/x-javascript": {
-        compressible: true
-      },
-      "application/x-keepass2": {
-        extensions: ["kdbx"]
-      },
-      "application/x-latex": {
-        source: "apache",
-        compressible: false,
-        extensions: ["latex"]
-      },
-      "application/x-lua-bytecode": {
-        extensions: ["luac"]
-      },
-      "application/x-lzh-compressed": {
-        source: "apache",
-        extensions: ["lzh", "lha"]
-      },
-      "application/x-makeself": {
-        source: "nginx",
-        extensions: ["run"]
-      },
-      "application/x-mie": {
-        source: "apache",
-        extensions: ["mie"]
-      },
-      "application/x-mobipocket-ebook": {
-        source: "apache",
-        extensions: ["prc", "mobi"]
-      },
-      "application/x-mpegurl": {
-        compressible: false
-      },
-      "application/x-ms-application": {
-        source: "apache",
-        extensions: ["application"]
-      },
-      "application/x-ms-shortcut": {
-        source: "apache",
-        extensions: ["lnk"]
-      },
-      "application/x-ms-wmd": {
-        source: "apache",
-        extensions: ["wmd"]
-      },
-      "application/x-ms-wmz": {
-        source: "apache",
-        extensions: ["wmz"]
-      },
-      "application/x-ms-xbap": {
-        source: "apache",
-        extensions: ["xbap"]
-      },
-      "application/x-msaccess": {
-        source: "apache",
-        extensions: ["mdb"]
-      },
-      "application/x-msbinder": {
-        source: "apache",
-        extensions: ["obd"]
-      },
-      "application/x-mscardfile": {
-        source: "apache",
-        extensions: ["crd"]
-      },
-      "application/x-msclip": {
-        source: "apache",
-        extensions: ["clp"]
-      },
-      "application/x-msdos-program": {
-        extensions: ["exe"]
-      },
-      "application/x-msdownload": {
-        source: "apache",
-        extensions: ["exe", "dll", "com", "bat", "msi"]
-      },
-      "application/x-msmediaview": {
-        source: "apache",
-        extensions: ["mvb", "m13", "m14"]
-      },
-      "application/x-msmetafile": {
-        source: "apache",
-        extensions: ["wmf", "wmz", "emf", "emz"]
-      },
-      "application/x-msmoney": {
-        source: "apache",
-        extensions: ["mny"]
-      },
-      "application/x-mspublisher": {
-        source: "apache",
-        extensions: ["pub"]
-      },
-      "application/x-msschedule": {
-        source: "apache",
-        extensions: ["scd"]
-      },
-      "application/x-msterminal": {
-        source: "apache",
-        extensions: ["trm"]
-      },
-      "application/x-mswrite": {
-        source: "apache",
-        extensions: ["wri"]
-      },
-      "application/x-netcdf": {
-        source: "apache",
-        extensions: ["nc", "cdf"]
-      },
-      "application/x-ns-proxy-autoconfig": {
-        compressible: true,
-        extensions: ["pac"]
-      },
-      "application/x-nzb": {
-        source: "apache",
-        extensions: ["nzb"]
-      },
-      "application/x-perl": {
-        source: "nginx",
-        extensions: ["pl", "pm"]
-      },
-      "application/x-pilot": {
-        source: "nginx",
-        extensions: ["prc", "pdb"]
-      },
-      "application/x-pkcs12": {
-        source: "apache",
-        compressible: false,
-        extensions: ["p12", "pfx"]
-      },
-      "application/x-pkcs7-certificates": {
-        source: "apache",
-        extensions: ["p7b", "spc"]
-      },
-      "application/x-pkcs7-certreqresp": {
-        source: "apache",
-        extensions: ["p7r"]
-      },
-      "application/x-pki-message": {
-        source: "iana"
-      },
-      "application/x-rar-compressed": {
-        source: "apache",
-        compressible: false,
-        extensions: ["rar"]
-      },
-      "application/x-redhat-package-manager": {
-        source: "nginx",
-        extensions: ["rpm"]
-      },
-      "application/x-research-info-systems": {
-        source: "apache",
-        extensions: ["ris"]
-      },
-      "application/x-sea": {
-        source: "nginx",
-        extensions: ["sea"]
-      },
-      "application/x-sh": {
-        source: "apache",
-        compressible: true,
-        extensions: ["sh"]
-      },
-      "application/x-shar": {
-        source: "apache",
-        extensions: ["shar"]
-      },
-      "application/x-shockwave-flash": {
-        source: "apache",
-        compressible: false,
-        extensions: ["swf"]
-      },
-      "application/x-silverlight-app": {
-        source: "apache",
-        extensions: ["xap"]
-      },
-      "application/x-sql": {
-        source: "apache",
-        extensions: ["sql"]
-      },
-      "application/x-stuffit": {
-        source: "apache",
-        compressible: false,
-        extensions: ["sit"]
-      },
-      "application/x-stuffitx": {
-        source: "apache",
-        extensions: ["sitx"]
-      },
-      "application/x-subrip": {
-        source: "apache",
-        extensions: ["srt"]
-      },
-      "application/x-sv4cpio": {
-        source: "apache",
-        extensions: ["sv4cpio"]
-      },
-      "application/x-sv4crc": {
-        source: "apache",
-        extensions: ["sv4crc"]
-      },
-      "application/x-t3vm-image": {
-        source: "apache",
-        extensions: ["t3"]
-      },
-      "application/x-tads": {
-        source: "apache",
-        extensions: ["gam"]
-      },
-      "application/x-tar": {
-        source: "apache",
-        compressible: true,
-        extensions: ["tar"]
-      },
-      "application/x-tcl": {
-        source: "apache",
-        extensions: ["tcl", "tk"]
-      },
-      "application/x-tex": {
-        source: "apache",
-        extensions: ["tex"]
-      },
-      "application/x-tex-tfm": {
-        source: "apache",
-        extensions: ["tfm"]
-      },
-      "application/x-texinfo": {
-        source: "apache",
-        extensions: ["texinfo", "texi"]
-      },
-      "application/x-tgif": {
-        source: "apache",
-        extensions: ["obj"]
-      },
-      "application/x-ustar": {
-        source: "apache",
-        extensions: ["ustar"]
-      },
-      "application/x-virtualbox-hdd": {
-        compressible: true,
-        extensions: ["hdd"]
-      },
-      "application/x-virtualbox-ova": {
-        compressible: true,
-        extensions: ["ova"]
-      },
-      "application/x-virtualbox-ovf": {
-        compressible: true,
-        extensions: ["ovf"]
-      },
-      "application/x-virtualbox-vbox": {
-        compressible: true,
-        extensions: ["vbox"]
-      },
-      "application/x-virtualbox-vbox-extpack": {
-        compressible: false,
-        extensions: ["vbox-extpack"]
-      },
-      "application/x-virtualbox-vdi": {
-        compressible: true,
-        extensions: ["vdi"]
-      },
-      "application/x-virtualbox-vhd": {
-        compressible: true,
-        extensions: ["vhd"]
-      },
-      "application/x-virtualbox-vmdk": {
-        compressible: true,
-        extensions: ["vmdk"]
-      },
-      "application/x-wais-source": {
-        source: "apache",
-        extensions: ["src"]
-      },
-      "application/x-web-app-manifest+json": {
-        compressible: true,
-        extensions: ["webapp"]
-      },
-      "application/x-www-form-urlencoded": {
-        source: "iana",
-        compressible: true
-      },
-      "application/x-x509-ca-cert": {
-        source: "iana",
-        extensions: ["der", "crt", "pem"]
-      },
-      "application/x-x509-ca-ra-cert": {
-        source: "iana"
-      },
-      "application/x-x509-next-ca-cert": {
-        source: "iana"
-      },
-      "application/x-xfig": {
-        source: "apache",
-        extensions: ["fig"]
-      },
-      "application/x-xliff+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["xlf"]
-      },
-      "application/x-xpinstall": {
-        source: "apache",
-        compressible: false,
-        extensions: ["xpi"]
-      },
-      "application/x-xz": {
-        source: "apache",
-        extensions: ["xz"]
-      },
-      "application/x-zmachine": {
-        source: "apache",
-        extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
-      },
-      "application/x400-bp": {
-        source: "iana"
-      },
-      "application/xacml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xaml+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["xaml"]
-      },
-      "application/xcap-att+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xav"]
-      },
-      "application/xcap-caps+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xca"]
-      },
-      "application/xcap-diff+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xdf"]
-      },
-      "application/xcap-el+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xel"]
-      },
-      "application/xcap-error+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xcap-ns+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xns"]
-      },
-      "application/xcon-conference-info+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xcon-conference-info-diff+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xenc+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xenc"]
-      },
-      "application/xhtml+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xhtml", "xht"]
-      },
-      "application/xhtml-voice+xml": {
-        source: "apache",
-        compressible: true
-      },
-      "application/xliff+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xlf"]
-      },
-      "application/xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xml", "xsl", "xsd", "rng"]
-      },
-      "application/xml-dtd": {
-        source: "iana",
-        compressible: true,
-        extensions: ["dtd"]
-      },
-      "application/xml-external-parsed-entity": {
-        source: "iana"
-      },
-      "application/xml-patch+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xmpp+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/xop+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xop"]
-      },
-      "application/xproc+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["xpl"]
-      },
-      "application/xslt+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xsl", "xslt"]
-      },
-      "application/xspf+xml": {
-        source: "apache",
-        compressible: true,
-        extensions: ["xspf"]
-      },
-      "application/xv+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["mxml", "xhvml", "xvml", "xvm"]
-      },
-      "application/yang": {
-        source: "iana",
-        extensions: ["yang"]
-      },
-      "application/yang-data+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/yang-data+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/yang-patch+json": {
-        source: "iana",
-        compressible: true
-      },
-      "application/yang-patch+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "application/yin+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["yin"]
-      },
-      "application/zip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["zip"]
-      },
-      "application/zlib": {
-        source: "iana"
-      },
-      "application/zstd": {
-        source: "iana"
-      },
-      "audio/1d-interleaved-parityfec": {
-        source: "iana"
-      },
-      "audio/32kadpcm": {
-        source: "iana"
-      },
-      "audio/3gpp": {
-        source: "iana",
-        compressible: false,
-        extensions: ["3gpp"]
-      },
-      "audio/3gpp2": {
-        source: "iana"
-      },
-      "audio/aac": {
-        source: "iana"
-      },
-      "audio/ac3": {
-        source: "iana"
-      },
-      "audio/adpcm": {
-        source: "apache",
-        extensions: ["adp"]
-      },
-      "audio/amr": {
-        source: "iana",
-        extensions: ["amr"]
-      },
-      "audio/amr-wb": {
-        source: "iana"
-      },
-      "audio/amr-wb+": {
-        source: "iana"
-      },
-      "audio/aptx": {
-        source: "iana"
-      },
-      "audio/asc": {
-        source: "iana"
-      },
-      "audio/atrac-advanced-lossless": {
-        source: "iana"
-      },
-      "audio/atrac-x": {
-        source: "iana"
-      },
-      "audio/atrac3": {
-        source: "iana"
-      },
-      "audio/basic": {
-        source: "iana",
-        compressible: false,
-        extensions: ["au", "snd"]
-      },
-      "audio/bv16": {
-        source: "iana"
-      },
-      "audio/bv32": {
-        source: "iana"
-      },
-      "audio/clearmode": {
-        source: "iana"
-      },
-      "audio/cn": {
-        source: "iana"
-      },
-      "audio/dat12": {
-        source: "iana"
-      },
-      "audio/dls": {
-        source: "iana"
-      },
-      "audio/dsr-es201108": {
-        source: "iana"
-      },
-      "audio/dsr-es202050": {
-        source: "iana"
-      },
-      "audio/dsr-es202211": {
-        source: "iana"
-      },
-      "audio/dsr-es202212": {
-        source: "iana"
-      },
-      "audio/dv": {
-        source: "iana"
-      },
-      "audio/dvi4": {
-        source: "iana"
-      },
-      "audio/eac3": {
-        source: "iana"
-      },
-      "audio/encaprtp": {
-        source: "iana"
-      },
-      "audio/evrc": {
-        source: "iana"
-      },
-      "audio/evrc-qcp": {
-        source: "iana"
-      },
-      "audio/evrc0": {
-        source: "iana"
-      },
-      "audio/evrc1": {
-        source: "iana"
-      },
-      "audio/evrcb": {
-        source: "iana"
-      },
-      "audio/evrcb0": {
-        source: "iana"
-      },
-      "audio/evrcb1": {
-        source: "iana"
-      },
-      "audio/evrcnw": {
-        source: "iana"
-      },
-      "audio/evrcnw0": {
-        source: "iana"
-      },
-      "audio/evrcnw1": {
-        source: "iana"
-      },
-      "audio/evrcwb": {
-        source: "iana"
-      },
-      "audio/evrcwb0": {
-        source: "iana"
-      },
-      "audio/evrcwb1": {
-        source: "iana"
-      },
-      "audio/evs": {
-        source: "iana"
-      },
-      "audio/flexfec": {
-        source: "iana"
-      },
-      "audio/fwdred": {
-        source: "iana"
-      },
-      "audio/g711-0": {
-        source: "iana"
-      },
-      "audio/g719": {
-        source: "iana"
-      },
-      "audio/g722": {
-        source: "iana"
-      },
-      "audio/g7221": {
-        source: "iana"
-      },
-      "audio/g723": {
-        source: "iana"
-      },
-      "audio/g726-16": {
-        source: "iana"
-      },
-      "audio/g726-24": {
-        source: "iana"
-      },
-      "audio/g726-32": {
-        source: "iana"
-      },
-      "audio/g726-40": {
-        source: "iana"
-      },
-      "audio/g728": {
-        source: "iana"
-      },
-      "audio/g729": {
-        source: "iana"
-      },
-      "audio/g7291": {
-        source: "iana"
-      },
-      "audio/g729d": {
-        source: "iana"
-      },
-      "audio/g729e": {
-        source: "iana"
-      },
-      "audio/gsm": {
-        source: "iana"
-      },
-      "audio/gsm-efr": {
-        source: "iana"
-      },
-      "audio/gsm-hr-08": {
-        source: "iana"
-      },
-      "audio/ilbc": {
-        source: "iana"
-      },
-      "audio/ip-mr_v2.5": {
-        source: "iana"
-      },
-      "audio/isac": {
-        source: "apache"
-      },
-      "audio/l16": {
-        source: "iana"
-      },
-      "audio/l20": {
-        source: "iana"
-      },
-      "audio/l24": {
-        source: "iana",
-        compressible: false
-      },
-      "audio/l8": {
-        source: "iana"
-      },
-      "audio/lpc": {
-        source: "iana"
-      },
-      "audio/melp": {
-        source: "iana"
-      },
-      "audio/melp1200": {
-        source: "iana"
-      },
-      "audio/melp2400": {
-        source: "iana"
-      },
-      "audio/melp600": {
-        source: "iana"
-      },
-      "audio/mhas": {
-        source: "iana"
-      },
-      "audio/midi": {
-        source: "apache",
-        extensions: ["mid", "midi", "kar", "rmi"]
-      },
-      "audio/mobile-xmf": {
-        source: "iana",
-        extensions: ["mxmf"]
-      },
-      "audio/mp3": {
-        compressible: false,
-        extensions: ["mp3"]
-      },
-      "audio/mp4": {
-        source: "iana",
-        compressible: false,
-        extensions: ["m4a", "mp4a"]
-      },
-      "audio/mp4a-latm": {
-        source: "iana"
-      },
-      "audio/mpa": {
-        source: "iana"
-      },
-      "audio/mpa-robust": {
-        source: "iana"
-      },
-      "audio/mpeg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
-      },
-      "audio/mpeg4-generic": {
-        source: "iana"
-      },
-      "audio/musepack": {
-        source: "apache"
-      },
-      "audio/ogg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["oga", "ogg", "spx", "opus"]
-      },
-      "audio/opus": {
-        source: "iana"
-      },
-      "audio/parityfec": {
-        source: "iana"
-      },
-      "audio/pcma": {
-        source: "iana"
-      },
-      "audio/pcma-wb": {
-        source: "iana"
-      },
-      "audio/pcmu": {
-        source: "iana"
-      },
-      "audio/pcmu-wb": {
-        source: "iana"
-      },
-      "audio/prs.sid": {
-        source: "iana"
-      },
-      "audio/qcelp": {
-        source: "iana"
-      },
-      "audio/raptorfec": {
-        source: "iana"
-      },
-      "audio/red": {
-        source: "iana"
-      },
-      "audio/rtp-enc-aescm128": {
-        source: "iana"
-      },
-      "audio/rtp-midi": {
-        source: "iana"
-      },
-      "audio/rtploopback": {
-        source: "iana"
-      },
-      "audio/rtx": {
-        source: "iana"
-      },
-      "audio/s3m": {
-        source: "apache",
-        extensions: ["s3m"]
-      },
-      "audio/scip": {
-        source: "iana"
-      },
-      "audio/silk": {
-        source: "apache",
-        extensions: ["sil"]
-      },
-      "audio/smv": {
-        source: "iana"
-      },
-      "audio/smv-qcp": {
-        source: "iana"
-      },
-      "audio/smv0": {
-        source: "iana"
-      },
-      "audio/sofa": {
-        source: "iana"
-      },
-      "audio/sp-midi": {
-        source: "iana"
-      },
-      "audio/speex": {
-        source: "iana"
-      },
-      "audio/t140c": {
-        source: "iana"
-      },
-      "audio/t38": {
-        source: "iana"
-      },
-      "audio/telephone-event": {
-        source: "iana"
-      },
-      "audio/tetra_acelp": {
-        source: "iana"
-      },
-      "audio/tetra_acelp_bb": {
-        source: "iana"
-      },
-      "audio/tone": {
-        source: "iana"
-      },
-      "audio/tsvcis": {
-        source: "iana"
-      },
-      "audio/uemclip": {
-        source: "iana"
-      },
-      "audio/ulpfec": {
-        source: "iana"
-      },
-      "audio/usac": {
-        source: "iana"
-      },
-      "audio/vdvi": {
-        source: "iana"
-      },
-      "audio/vmr-wb": {
-        source: "iana"
-      },
-      "audio/vnd.3gpp.iufp": {
-        source: "iana"
-      },
-      "audio/vnd.4sb": {
-        source: "iana"
-      },
-      "audio/vnd.audiokoz": {
-        source: "iana"
-      },
-      "audio/vnd.celp": {
-        source: "iana"
-      },
-      "audio/vnd.cisco.nse": {
-        source: "iana"
-      },
-      "audio/vnd.cmles.radio-events": {
-        source: "iana"
-      },
-      "audio/vnd.cns.anp1": {
-        source: "iana"
-      },
-      "audio/vnd.cns.inf1": {
-        source: "iana"
-      },
-      "audio/vnd.dece.audio": {
-        source: "iana",
-        extensions: ["uva", "uvva"]
-      },
-      "audio/vnd.digital-winds": {
-        source: "iana",
-        extensions: ["eol"]
-      },
-      "audio/vnd.dlna.adts": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.heaac.1": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.heaac.2": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.mlp": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.mps": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.pl2": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.pl2x": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.pl2z": {
-        source: "iana"
-      },
-      "audio/vnd.dolby.pulse.1": {
-        source: "iana"
-      },
-      "audio/vnd.dra": {
-        source: "iana",
-        extensions: ["dra"]
-      },
-      "audio/vnd.dts": {
-        source: "iana",
-        extensions: ["dts"]
-      },
-      "audio/vnd.dts.hd": {
-        source: "iana",
-        extensions: ["dtshd"]
-      },
-      "audio/vnd.dts.uhd": {
-        source: "iana"
-      },
-      "audio/vnd.dvb.file": {
-        source: "iana"
-      },
-      "audio/vnd.everad.plj": {
-        source: "iana"
-      },
-      "audio/vnd.hns.audio": {
-        source: "iana"
-      },
-      "audio/vnd.lucent.voice": {
-        source: "iana",
-        extensions: ["lvp"]
-      },
-      "audio/vnd.ms-playready.media.pya": {
-        source: "iana",
-        extensions: ["pya"]
-      },
-      "audio/vnd.nokia.mobile-xmf": {
-        source: "iana"
-      },
-      "audio/vnd.nortel.vbk": {
-        source: "iana"
-      },
-      "audio/vnd.nuera.ecelp4800": {
-        source: "iana",
-        extensions: ["ecelp4800"]
-      },
-      "audio/vnd.nuera.ecelp7470": {
-        source: "iana",
-        extensions: ["ecelp7470"]
-      },
-      "audio/vnd.nuera.ecelp9600": {
-        source: "iana",
-        extensions: ["ecelp9600"]
-      },
-      "audio/vnd.octel.sbc": {
-        source: "iana"
-      },
-      "audio/vnd.presonus.multitrack": {
-        source: "iana"
-      },
-      "audio/vnd.qcelp": {
-        source: "iana"
-      },
-      "audio/vnd.rhetorex.32kadpcm": {
-        source: "iana"
-      },
-      "audio/vnd.rip": {
-        source: "iana",
-        extensions: ["rip"]
-      },
-      "audio/vnd.rn-realaudio": {
-        compressible: false
-      },
-      "audio/vnd.sealedmedia.softseal.mpeg": {
-        source: "iana"
-      },
-      "audio/vnd.vmx.cvsd": {
-        source: "iana"
-      },
-      "audio/vnd.wave": {
-        compressible: false
-      },
-      "audio/vorbis": {
-        source: "iana",
-        compressible: false
-      },
-      "audio/vorbis-config": {
-        source: "iana"
-      },
-      "audio/wav": {
-        compressible: false,
-        extensions: ["wav"]
-      },
-      "audio/wave": {
-        compressible: false,
-        extensions: ["wav"]
-      },
-      "audio/webm": {
-        source: "apache",
-        compressible: false,
-        extensions: ["weba"]
-      },
-      "audio/x-aac": {
-        source: "apache",
-        compressible: false,
-        extensions: ["aac"]
-      },
-      "audio/x-aiff": {
-        source: "apache",
-        extensions: ["aif", "aiff", "aifc"]
-      },
-      "audio/x-caf": {
-        source: "apache",
-        compressible: false,
-        extensions: ["caf"]
-      },
-      "audio/x-flac": {
-        source: "apache",
-        extensions: ["flac"]
-      },
-      "audio/x-m4a": {
-        source: "nginx",
-        extensions: ["m4a"]
-      },
-      "audio/x-matroska": {
-        source: "apache",
-        extensions: ["mka"]
-      },
-      "audio/x-mpegurl": {
-        source: "apache",
-        extensions: ["m3u"]
-      },
-      "audio/x-ms-wax": {
-        source: "apache",
-        extensions: ["wax"]
-      },
-      "audio/x-ms-wma": {
-        source: "apache",
-        extensions: ["wma"]
-      },
-      "audio/x-pn-realaudio": {
-        source: "apache",
-        extensions: ["ram", "ra"]
-      },
-      "audio/x-pn-realaudio-plugin": {
-        source: "apache",
-        extensions: ["rmp"]
-      },
-      "audio/x-realaudio": {
-        source: "nginx",
-        extensions: ["ra"]
-      },
-      "audio/x-tta": {
-        source: "apache"
-      },
-      "audio/x-wav": {
-        source: "apache",
-        extensions: ["wav"]
-      },
-      "audio/xm": {
-        source: "apache",
-        extensions: ["xm"]
-      },
-      "chemical/x-cdx": {
-        source: "apache",
-        extensions: ["cdx"]
-      },
-      "chemical/x-cif": {
-        source: "apache",
-        extensions: ["cif"]
-      },
-      "chemical/x-cmdf": {
-        source: "apache",
-        extensions: ["cmdf"]
-      },
-      "chemical/x-cml": {
-        source: "apache",
-        extensions: ["cml"]
-      },
-      "chemical/x-csml": {
-        source: "apache",
-        extensions: ["csml"]
-      },
-      "chemical/x-pdb": {
-        source: "apache"
-      },
-      "chemical/x-xyz": {
-        source: "apache",
-        extensions: ["xyz"]
-      },
-      "font/collection": {
-        source: "iana",
-        extensions: ["ttc"]
-      },
-      "font/otf": {
-        source: "iana",
-        compressible: true,
-        extensions: ["otf"]
-      },
-      "font/sfnt": {
-        source: "iana"
-      },
-      "font/ttf": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ttf"]
-      },
-      "font/woff": {
-        source: "iana",
-        extensions: ["woff"]
-      },
-      "font/woff2": {
-        source: "iana",
-        extensions: ["woff2"]
-      },
-      "image/aces": {
-        source: "iana",
-        extensions: ["exr"]
-      },
-      "image/apng": {
-        compressible: false,
-        extensions: ["apng"]
-      },
-      "image/avci": {
-        source: "iana",
-        extensions: ["avci"]
-      },
-      "image/avcs": {
-        source: "iana",
-        extensions: ["avcs"]
-      },
-      "image/avif": {
-        source: "iana",
-        compressible: false,
-        extensions: ["avif"]
-      },
-      "image/bmp": {
-        source: "iana",
-        compressible: true,
-        extensions: ["bmp"]
-      },
-      "image/cgm": {
-        source: "iana",
-        extensions: ["cgm"]
-      },
-      "image/dicom-rle": {
-        source: "iana",
-        extensions: ["drle"]
-      },
-      "image/emf": {
-        source: "iana",
-        extensions: ["emf"]
-      },
-      "image/fits": {
-        source: "iana",
-        extensions: ["fits"]
-      },
-      "image/g3fax": {
-        source: "iana",
-        extensions: ["g3"]
-      },
-      "image/gif": {
-        source: "iana",
-        compressible: false,
-        extensions: ["gif"]
-      },
-      "image/heic": {
-        source: "iana",
-        extensions: ["heic"]
-      },
-      "image/heic-sequence": {
-        source: "iana",
-        extensions: ["heics"]
-      },
-      "image/heif": {
-        source: "iana",
-        extensions: ["heif"]
-      },
-      "image/heif-sequence": {
-        source: "iana",
-        extensions: ["heifs"]
-      },
-      "image/hej2k": {
-        source: "iana",
-        extensions: ["hej2"]
-      },
-      "image/hsj2": {
-        source: "iana",
-        extensions: ["hsj2"]
-      },
-      "image/ief": {
-        source: "iana",
-        extensions: ["ief"]
-      },
-      "image/jls": {
-        source: "iana",
-        extensions: ["jls"]
-      },
-      "image/jp2": {
-        source: "iana",
-        compressible: false,
-        extensions: ["jp2", "jpg2"]
-      },
-      "image/jpeg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["jpeg", "jpg", "jpe"]
-      },
-      "image/jph": {
-        source: "iana",
-        extensions: ["jph"]
-      },
-      "image/jphc": {
-        source: "iana",
-        extensions: ["jhc"]
-      },
-      "image/jpm": {
-        source: "iana",
-        compressible: false,
-        extensions: ["jpm"]
-      },
-      "image/jpx": {
-        source: "iana",
-        compressible: false,
-        extensions: ["jpx", "jpf"]
-      },
-      "image/jxr": {
-        source: "iana",
-        extensions: ["jxr"]
-      },
-      "image/jxra": {
-        source: "iana",
-        extensions: ["jxra"]
-      },
-      "image/jxrs": {
-        source: "iana",
-        extensions: ["jxrs"]
-      },
-      "image/jxs": {
-        source: "iana",
-        extensions: ["jxs"]
-      },
-      "image/jxsc": {
-        source: "iana",
-        extensions: ["jxsc"]
-      },
-      "image/jxsi": {
-        source: "iana",
-        extensions: ["jxsi"]
-      },
-      "image/jxss": {
-        source: "iana",
-        extensions: ["jxss"]
-      },
-      "image/ktx": {
-        source: "iana",
-        extensions: ["ktx"]
-      },
-      "image/ktx2": {
-        source: "iana",
-        extensions: ["ktx2"]
-      },
-      "image/naplps": {
-        source: "iana"
-      },
-      "image/pjpeg": {
-        compressible: false
-      },
-      "image/png": {
-        source: "iana",
-        compressible: false,
-        extensions: ["png"]
-      },
-      "image/prs.btif": {
-        source: "iana",
-        extensions: ["btif"]
-      },
-      "image/prs.pti": {
-        source: "iana",
-        extensions: ["pti"]
-      },
-      "image/pwg-raster": {
-        source: "iana"
-      },
-      "image/sgi": {
-        source: "apache",
-        extensions: ["sgi"]
-      },
-      "image/svg+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["svg", "svgz"]
-      },
-      "image/t38": {
-        source: "iana",
-        extensions: ["t38"]
-      },
-      "image/tiff": {
-        source: "iana",
-        compressible: false,
-        extensions: ["tif", "tiff"]
-      },
-      "image/tiff-fx": {
-        source: "iana",
-        extensions: ["tfx"]
-      },
-      "image/vnd.adobe.photoshop": {
-        source: "iana",
-        compressible: true,
-        extensions: ["psd"]
-      },
-      "image/vnd.airzip.accelerator.azv": {
-        source: "iana",
-        extensions: ["azv"]
-      },
-      "image/vnd.cns.inf2": {
-        source: "iana"
-      },
-      "image/vnd.dece.graphic": {
-        source: "iana",
-        extensions: ["uvi", "uvvi", "uvg", "uvvg"]
-      },
-      "image/vnd.djvu": {
-        source: "iana",
-        extensions: ["djvu", "djv"]
-      },
-      "image/vnd.dvb.subtitle": {
-        source: "iana",
-        extensions: ["sub"]
-      },
-      "image/vnd.dwg": {
-        source: "iana",
-        extensions: ["dwg"]
-      },
-      "image/vnd.dxf": {
-        source: "iana",
-        extensions: ["dxf"]
-      },
-      "image/vnd.fastbidsheet": {
-        source: "iana",
-        extensions: ["fbs"]
-      },
-      "image/vnd.fpx": {
-        source: "iana",
-        extensions: ["fpx"]
-      },
-      "image/vnd.fst": {
-        source: "iana",
-        extensions: ["fst"]
-      },
-      "image/vnd.fujixerox.edmics-mmr": {
-        source: "iana",
-        extensions: ["mmr"]
-      },
-      "image/vnd.fujixerox.edmics-rlc": {
-        source: "iana",
-        extensions: ["rlc"]
-      },
-      "image/vnd.globalgraphics.pgb": {
-        source: "iana"
-      },
-      "image/vnd.microsoft.icon": {
-        source: "iana",
-        compressible: true,
-        extensions: ["ico"]
-      },
-      "image/vnd.mix": {
-        source: "iana"
-      },
-      "image/vnd.mozilla.apng": {
-        source: "iana"
-      },
-      "image/vnd.ms-dds": {
-        compressible: true,
-        extensions: ["dds"]
-      },
-      "image/vnd.ms-modi": {
-        source: "iana",
-        extensions: ["mdi"]
-      },
-      "image/vnd.ms-photo": {
-        source: "apache",
-        extensions: ["wdp"]
-      },
-      "image/vnd.net-fpx": {
-        source: "iana",
-        extensions: ["npx"]
-      },
-      "image/vnd.pco.b16": {
-        source: "iana",
-        extensions: ["b16"]
-      },
-      "image/vnd.radiance": {
-        source: "iana"
-      },
-      "image/vnd.sealed.png": {
-        source: "iana"
-      },
-      "image/vnd.sealedmedia.softseal.gif": {
-        source: "iana"
-      },
-      "image/vnd.sealedmedia.softseal.jpg": {
-        source: "iana"
-      },
-      "image/vnd.svf": {
-        source: "iana"
-      },
-      "image/vnd.tencent.tap": {
-        source: "iana",
-        extensions: ["tap"]
-      },
-      "image/vnd.valve.source.texture": {
-        source: "iana",
-        extensions: ["vtf"]
-      },
-      "image/vnd.wap.wbmp": {
-        source: "iana",
-        extensions: ["wbmp"]
-      },
-      "image/vnd.xiff": {
-        source: "iana",
-        extensions: ["xif"]
-      },
-      "image/vnd.zbrush.pcx": {
-        source: "iana",
-        extensions: ["pcx"]
-      },
-      "image/webp": {
-        source: "apache",
-        extensions: ["webp"]
-      },
-      "image/wmf": {
-        source: "iana",
-        extensions: ["wmf"]
-      },
-      "image/x-3ds": {
-        source: "apache",
-        extensions: ["3ds"]
-      },
-      "image/x-cmu-raster": {
-        source: "apache",
-        extensions: ["ras"]
-      },
-      "image/x-cmx": {
-        source: "apache",
-        extensions: ["cmx"]
-      },
-      "image/x-freehand": {
-        source: "apache",
-        extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
-      },
-      "image/x-icon": {
-        source: "apache",
-        compressible: true,
-        extensions: ["ico"]
-      },
-      "image/x-jng": {
-        source: "nginx",
-        extensions: ["jng"]
-      },
-      "image/x-mrsid-image": {
-        source: "apache",
-        extensions: ["sid"]
-      },
-      "image/x-ms-bmp": {
-        source: "nginx",
-        compressible: true,
-        extensions: ["bmp"]
-      },
-      "image/x-pcx": {
-        source: "apache",
-        extensions: ["pcx"]
-      },
-      "image/x-pict": {
-        source: "apache",
-        extensions: ["pic", "pct"]
-      },
-      "image/x-portable-anymap": {
-        source: "apache",
-        extensions: ["pnm"]
-      },
-      "image/x-portable-bitmap": {
-        source: "apache",
-        extensions: ["pbm"]
-      },
-      "image/x-portable-graymap": {
-        source: "apache",
-        extensions: ["pgm"]
-      },
-      "image/x-portable-pixmap": {
-        source: "apache",
-        extensions: ["ppm"]
-      },
-      "image/x-rgb": {
-        source: "apache",
-        extensions: ["rgb"]
-      },
-      "image/x-tga": {
-        source: "apache",
-        extensions: ["tga"]
-      },
-      "image/x-xbitmap": {
-        source: "apache",
-        extensions: ["xbm"]
-      },
-      "image/x-xcf": {
-        compressible: false
-      },
-      "image/x-xpixmap": {
-        source: "apache",
-        extensions: ["xpm"]
-      },
-      "image/x-xwindowdump": {
-        source: "apache",
-        extensions: ["xwd"]
-      },
-      "message/cpim": {
-        source: "iana"
-      },
-      "message/delivery-status": {
-        source: "iana"
-      },
-      "message/disposition-notification": {
-        source: "iana",
-        extensions: [
-          "disposition-notification"
-        ]
-      },
-      "message/external-body": {
-        source: "iana"
-      },
-      "message/feedback-report": {
-        source: "iana"
-      },
-      "message/global": {
-        source: "iana",
-        extensions: ["u8msg"]
-      },
-      "message/global-delivery-status": {
-        source: "iana",
-        extensions: ["u8dsn"]
-      },
-      "message/global-disposition-notification": {
-        source: "iana",
-        extensions: ["u8mdn"]
-      },
-      "message/global-headers": {
-        source: "iana",
-        extensions: ["u8hdr"]
-      },
-      "message/http": {
-        source: "iana",
-        compressible: false
-      },
-      "message/imdn+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "message/news": {
-        source: "iana"
-      },
-      "message/partial": {
-        source: "iana",
-        compressible: false
-      },
-      "message/rfc822": {
-        source: "iana",
-        compressible: true,
-        extensions: ["eml", "mime"]
-      },
-      "message/s-http": {
-        source: "iana"
-      },
-      "message/sip": {
-        source: "iana"
-      },
-      "message/sipfrag": {
-        source: "iana"
-      },
-      "message/tracking-status": {
-        source: "iana"
-      },
-      "message/vnd.si.simp": {
-        source: "iana"
-      },
-      "message/vnd.wfa.wsc": {
-        source: "iana",
-        extensions: ["wsc"]
-      },
-      "model/3mf": {
-        source: "iana",
-        extensions: ["3mf"]
-      },
-      "model/e57": {
-        source: "iana"
-      },
-      "model/gltf+json": {
-        source: "iana",
-        compressible: true,
-        extensions: ["gltf"]
-      },
-      "model/gltf-binary": {
-        source: "iana",
-        compressible: true,
-        extensions: ["glb"]
-      },
-      "model/iges": {
-        source: "iana",
-        compressible: false,
-        extensions: ["igs", "iges"]
-      },
-      "model/mesh": {
-        source: "iana",
-        compressible: false,
-        extensions: ["msh", "mesh", "silo"]
-      },
-      "model/mtl": {
-        source: "iana",
-        extensions: ["mtl"]
-      },
-      "model/obj": {
-        source: "iana",
-        extensions: ["obj"]
-      },
-      "model/step": {
-        source: "iana"
-      },
-      "model/step+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["stpx"]
-      },
-      "model/step+zip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["stpz"]
-      },
-      "model/step-xml+zip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["stpxz"]
-      },
-      "model/stl": {
-        source: "iana",
-        extensions: ["stl"]
-      },
-      "model/vnd.collada+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["dae"]
-      },
-      "model/vnd.dwf": {
-        source: "iana",
-        extensions: ["dwf"]
-      },
-      "model/vnd.flatland.3dml": {
-        source: "iana"
-      },
-      "model/vnd.gdl": {
-        source: "iana",
-        extensions: ["gdl"]
-      },
-      "model/vnd.gs-gdl": {
-        source: "apache"
-      },
-      "model/vnd.gs.gdl": {
-        source: "iana"
-      },
-      "model/vnd.gtw": {
-        source: "iana",
-        extensions: ["gtw"]
-      },
-      "model/vnd.moml+xml": {
-        source: "iana",
-        compressible: true
-      },
-      "model/vnd.mts": {
-        source: "iana",
-        extensions: ["mts"]
-      },
-      "model/vnd.opengex": {
-        source: "iana",
-        extensions: ["ogex"]
-      },
-      "model/vnd.parasolid.transmit.binary": {
-        source: "iana",
-        extensions: ["x_b"]
-      },
-      "model/vnd.parasolid.transmit.text": {
-        source: "iana",
-        extensions: ["x_t"]
-      },
-      "model/vnd.pytha.pyox": {
-        source: "iana"
-      },
-      "model/vnd.rosette.annotated-data-model": {
-        source: "iana"
-      },
-      "model/vnd.sap.vds": {
-        source: "iana",
-        extensions: ["vds"]
-      },
-      "model/vnd.usdz+zip": {
-        source: "iana",
-        compressible: false,
-        extensions: ["usdz"]
-      },
-      "model/vnd.valve.source.compiled-map": {
-        source: "iana",
-        extensions: ["bsp"]
-      },
-      "model/vnd.vtu": {
-        source: "iana",
-        extensions: ["vtu"]
-      },
-      "model/vrml": {
-        source: "iana",
-        compressible: false,
-        extensions: ["wrl", "vrml"]
-      },
-      "model/x3d+binary": {
-        source: "apache",
-        compressible: false,
-        extensions: ["x3db", "x3dbz"]
-      },
-      "model/x3d+fastinfoset": {
-        source: "iana",
-        extensions: ["x3db"]
-      },
-      "model/x3d+vrml": {
-        source: "apache",
-        compressible: false,
-        extensions: ["x3dv", "x3dvz"]
-      },
-      "model/x3d+xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["x3d", "x3dz"]
-      },
-      "model/x3d-vrml": {
-        source: "iana",
-        extensions: ["x3dv"]
-      },
-      "multipart/alternative": {
-        source: "iana",
-        compressible: false
-      },
-      "multipart/appledouble": {
-        source: "iana"
-      },
-      "multipart/byteranges": {
-        source: "iana"
-      },
-      "multipart/digest": {
-        source: "iana"
-      },
-      "multipart/encrypted": {
-        source: "iana",
-        compressible: false
-      },
-      "multipart/form-data": {
-        source: "iana",
-        compressible: false
-      },
-      "multipart/header-set": {
-        source: "iana"
-      },
-      "multipart/mixed": {
-        source: "iana"
-      },
-      "multipart/multilingual": {
-        source: "iana"
-      },
-      "multipart/parallel": {
-        source: "iana"
-      },
-      "multipart/related": {
-        source: "iana",
-        compressible: false
-      },
-      "multipart/report": {
-        source: "iana"
-      },
-      "multipart/signed": {
-        source: "iana",
-        compressible: false
-      },
-      "multipart/vnd.bint.med-plus": {
-        source: "iana"
-      },
-      "multipart/voice-message": {
-        source: "iana"
-      },
-      "multipart/x-mixed-replace": {
-        source: "iana"
-      },
-      "text/1d-interleaved-parityfec": {
-        source: "iana"
-      },
-      "text/cache-manifest": {
-        source: "iana",
-        compressible: true,
-        extensions: ["appcache", "manifest"]
-      },
-      "text/calendar": {
-        source: "iana",
-        extensions: ["ics", "ifb"]
-      },
-      "text/calender": {
-        compressible: true
-      },
-      "text/cmd": {
-        compressible: true
-      },
-      "text/coffeescript": {
-        extensions: ["coffee", "litcoffee"]
-      },
-      "text/cql": {
-        source: "iana"
-      },
-      "text/cql-expression": {
-        source: "iana"
-      },
-      "text/cql-identifier": {
-        source: "iana"
-      },
-      "text/css": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["css"]
-      },
-      "text/csv": {
-        source: "iana",
-        compressible: true,
-        extensions: ["csv"]
-      },
-      "text/csv-schema": {
-        source: "iana"
-      },
-      "text/directory": {
-        source: "iana"
-      },
-      "text/dns": {
-        source: "iana"
-      },
-      "text/ecmascript": {
-        source: "iana"
-      },
-      "text/encaprtp": {
-        source: "iana"
-      },
-      "text/enriched": {
-        source: "iana"
-      },
-      "text/fhirpath": {
-        source: "iana"
-      },
-      "text/flexfec": {
-        source: "iana"
-      },
-      "text/fwdred": {
-        source: "iana"
-      },
-      "text/gff3": {
-        source: "iana"
-      },
-      "text/grammar-ref-list": {
-        source: "iana"
-      },
-      "text/html": {
-        source: "iana",
-        compressible: true,
-        extensions: ["html", "htm", "shtml"]
-      },
-      "text/jade": {
-        extensions: ["jade"]
-      },
-      "text/javascript": {
-        source: "iana",
-        compressible: true
-      },
-      "text/jcr-cnd": {
-        source: "iana"
-      },
-      "text/jsx": {
-        compressible: true,
-        extensions: ["jsx"]
-      },
-      "text/less": {
-        compressible: true,
-        extensions: ["less"]
-      },
-      "text/markdown": {
-        source: "iana",
-        compressible: true,
-        extensions: ["markdown", "md"]
-      },
-      "text/mathml": {
-        source: "nginx",
-        extensions: ["mml"]
-      },
-      "text/mdx": {
-        compressible: true,
-        extensions: ["mdx"]
-      },
-      "text/mizar": {
-        source: "iana"
-      },
-      "text/n3": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["n3"]
-      },
-      "text/parameters": {
-        source: "iana",
-        charset: "UTF-8"
-      },
-      "text/parityfec": {
-        source: "iana"
-      },
-      "text/plain": {
-        source: "iana",
-        compressible: true,
-        extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
-      },
-      "text/provenance-notation": {
-        source: "iana",
-        charset: "UTF-8"
-      },
-      "text/prs.fallenstein.rst": {
-        source: "iana"
-      },
-      "text/prs.lines.tag": {
-        source: "iana",
-        extensions: ["dsc"]
-      },
-      "text/prs.prop.logic": {
-        source: "iana"
-      },
-      "text/raptorfec": {
-        source: "iana"
-      },
-      "text/red": {
-        source: "iana"
-      },
-      "text/rfc822-headers": {
-        source: "iana"
-      },
-      "text/richtext": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rtx"]
-      },
-      "text/rtf": {
-        source: "iana",
-        compressible: true,
-        extensions: ["rtf"]
-      },
-      "text/rtp-enc-aescm128": {
-        source: "iana"
-      },
-      "text/rtploopback": {
-        source: "iana"
-      },
-      "text/rtx": {
-        source: "iana"
-      },
-      "text/sgml": {
-        source: "iana",
-        extensions: ["sgml", "sgm"]
-      },
-      "text/shaclc": {
-        source: "iana"
-      },
-      "text/shex": {
-        source: "iana",
-        extensions: ["shex"]
-      },
-      "text/slim": {
-        extensions: ["slim", "slm"]
-      },
-      "text/spdx": {
-        source: "iana",
-        extensions: ["spdx"]
-      },
-      "text/strings": {
-        source: "iana"
-      },
-      "text/stylus": {
-        extensions: ["stylus", "styl"]
-      },
-      "text/t140": {
-        source: "iana"
-      },
-      "text/tab-separated-values": {
-        source: "iana",
-        compressible: true,
-        extensions: ["tsv"]
-      },
-      "text/troff": {
-        source: "iana",
-        extensions: ["t", "tr", "roff", "man", "me", "ms"]
-      },
-      "text/turtle": {
-        source: "iana",
-        charset: "UTF-8",
-        extensions: ["ttl"]
-      },
-      "text/ulpfec": {
-        source: "iana"
-      },
-      "text/uri-list": {
-        source: "iana",
-        compressible: true,
-        extensions: ["uri", "uris", "urls"]
-      },
-      "text/vcard": {
-        source: "iana",
-        compressible: true,
-        extensions: ["vcard"]
-      },
-      "text/vnd.a": {
-        source: "iana"
-      },
-      "text/vnd.abc": {
-        source: "iana"
-      },
-      "text/vnd.ascii-art": {
-        source: "iana"
-      },
-      "text/vnd.curl": {
-        source: "iana",
-        extensions: ["curl"]
-      },
-      "text/vnd.curl.dcurl": {
-        source: "apache",
-        extensions: ["dcurl"]
-      },
-      "text/vnd.curl.mcurl": {
-        source: "apache",
-        extensions: ["mcurl"]
-      },
-      "text/vnd.curl.scurl": {
-        source: "apache",
-        extensions: ["scurl"]
-      },
-      "text/vnd.debian.copyright": {
-        source: "iana",
-        charset: "UTF-8"
-      },
-      "text/vnd.dmclientscript": {
-        source: "iana"
-      },
-      "text/vnd.dvb.subtitle": {
-        source: "iana",
-        extensions: ["sub"]
-      },
-      "text/vnd.esmertec.theme-descriptor": {
-        source: "iana",
-        charset: "UTF-8"
-      },
-      "text/vnd.familysearch.gedcom": {
-        source: "iana",
-        extensions: ["ged"]
-      },
-      "text/vnd.ficlab.flt": {
-        source: "iana"
-      },
-      "text/vnd.fly": {
-        source: "iana",
-        extensions: ["fly"]
-      },
-      "text/vnd.fmi.flexstor": {
-        source: "iana",
-        extensions: ["flx"]
-      },
-      "text/vnd.gml": {
-        source: "iana"
-      },
-      "text/vnd.graphviz": {
-        source: "iana",
-        extensions: ["gv"]
-      },
-      "text/vnd.hans": {
-        source: "iana"
-      },
-      "text/vnd.hgl": {
-        source: "iana"
-      },
-      "text/vnd.in3d.3dml": {
-        source: "iana",
-        extensions: ["3dml"]
-      },
-      "text/vnd.in3d.spot": {
-        source: "iana",
-        extensions: ["spot"]
-      },
-      "text/vnd.iptc.newsml": {
-        source: "iana"
-      },
-      "text/vnd.iptc.nitf": {
-        source: "iana"
-      },
-      "text/vnd.latex-z": {
-        source: "iana"
-      },
-      "text/vnd.motorola.reflex": {
-        source: "iana"
-      },
-      "text/vnd.ms-mediapackage": {
-        source: "iana"
-      },
-      "text/vnd.net2phone.commcenter.command": {
-        source: "iana"
-      },
-      "text/vnd.radisys.msml-basic-layout": {
-        source: "iana"
-      },
-      "text/vnd.senx.warpscript": {
-        source: "iana"
-      },
-      "text/vnd.si.uricatalogue": {
-        source: "iana"
-      },
-      "text/vnd.sosi": {
-        source: "iana"
-      },
-      "text/vnd.sun.j2me.app-descriptor": {
-        source: "iana",
-        charset: "UTF-8",
-        extensions: ["jad"]
-      },
-      "text/vnd.trolltech.linguist": {
-        source: "iana",
-        charset: "UTF-8"
-      },
-      "text/vnd.wap.si": {
-        source: "iana"
-      },
-      "text/vnd.wap.sl": {
-        source: "iana"
-      },
-      "text/vnd.wap.wml": {
-        source: "iana",
-        extensions: ["wml"]
-      },
-      "text/vnd.wap.wmlscript": {
-        source: "iana",
-        extensions: ["wmls"]
-      },
-      "text/vtt": {
-        source: "iana",
-        charset: "UTF-8",
-        compressible: true,
-        extensions: ["vtt"]
-      },
-      "text/x-asm": {
-        source: "apache",
-        extensions: ["s", "asm"]
-      },
-      "text/x-c": {
-        source: "apache",
-        extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
-      },
-      "text/x-component": {
-        source: "nginx",
-        extensions: ["htc"]
-      },
-      "text/x-fortran": {
-        source: "apache",
-        extensions: ["f", "for", "f77", "f90"]
-      },
-      "text/x-gwt-rpc": {
-        compressible: true
-      },
-      "text/x-handlebars-template": {
-        extensions: ["hbs"]
-      },
-      "text/x-java-source": {
-        source: "apache",
-        extensions: ["java"]
-      },
-      "text/x-jquery-tmpl": {
-        compressible: true
-      },
-      "text/x-lua": {
-        extensions: ["lua"]
-      },
-      "text/x-markdown": {
-        compressible: true,
-        extensions: ["mkd"]
-      },
-      "text/x-nfo": {
-        source: "apache",
-        extensions: ["nfo"]
-      },
-      "text/x-opml": {
-        source: "apache",
-        extensions: ["opml"]
-      },
-      "text/x-org": {
-        compressible: true,
-        extensions: ["org"]
-      },
-      "text/x-pascal": {
-        source: "apache",
-        extensions: ["p", "pas"]
-      },
-      "text/x-processing": {
-        compressible: true,
-        extensions: ["pde"]
-      },
-      "text/x-sass": {
-        extensions: ["sass"]
-      },
-      "text/x-scss": {
-        extensions: ["scss"]
-      },
-      "text/x-setext": {
-        source: "apache",
-        extensions: ["etx"]
-      },
-      "text/x-sfv": {
-        source: "apache",
-        extensions: ["sfv"]
-      },
-      "text/x-suse-ymp": {
-        compressible: true,
-        extensions: ["ymp"]
-      },
-      "text/x-uuencode": {
-        source: "apache",
-        extensions: ["uu"]
-      },
-      "text/x-vcalendar": {
-        source: "apache",
-        extensions: ["vcs"]
-      },
-      "text/x-vcard": {
-        source: "apache",
-        extensions: ["vcf"]
-      },
-      "text/xml": {
-        source: "iana",
-        compressible: true,
-        extensions: ["xml"]
-      },
-      "text/xml-external-parsed-entity": {
-        source: "iana"
-      },
-      "text/yaml": {
-        compressible: true,
-        extensions: ["yaml", "yml"]
-      },
-      "video/1d-interleaved-parityfec": {
-        source: "iana"
-      },
-      "video/3gpp": {
-        source: "iana",
-        extensions: ["3gp", "3gpp"]
-      },
-      "video/3gpp-tt": {
-        source: "iana"
-      },
-      "video/3gpp2": {
-        source: "iana",
-        extensions: ["3g2"]
-      },
-      "video/av1": {
-        source: "iana"
-      },
-      "video/bmpeg": {
-        source: "iana"
-      },
-      "video/bt656": {
-        source: "iana"
-      },
-      "video/celb": {
-        source: "iana"
-      },
-      "video/dv": {
-        source: "iana"
-      },
-      "video/encaprtp": {
-        source: "iana"
-      },
-      "video/ffv1": {
-        source: "iana"
-      },
-      "video/flexfec": {
-        source: "iana"
-      },
-      "video/h261": {
-        source: "iana",
-        extensions: ["h261"]
-      },
-      "video/h263": {
-        source: "iana",
-        extensions: ["h263"]
-      },
-      "video/h263-1998": {
-        source: "iana"
-      },
-      "video/h263-2000": {
-        source: "iana"
-      },
-      "video/h264": {
-        source: "iana",
-        extensions: ["h264"]
-      },
-      "video/h264-rcdo": {
-        source: "iana"
-      },
-      "video/h264-svc": {
-        source: "iana"
-      },
-      "video/h265": {
-        source: "iana"
-      },
-      "video/iso.segment": {
-        source: "iana",
-        extensions: ["m4s"]
-      },
-      "video/jpeg": {
-        source: "iana",
-        extensions: ["jpgv"]
-      },
-      "video/jpeg2000": {
-        source: "iana"
-      },
-      "video/jpm": {
-        source: "apache",
-        extensions: ["jpm", "jpgm"]
-      },
-      "video/jxsv": {
-        source: "iana"
-      },
-      "video/mj2": {
-        source: "iana",
-        extensions: ["mj2", "mjp2"]
-      },
-      "video/mp1s": {
-        source: "iana"
-      },
-      "video/mp2p": {
-        source: "iana"
-      },
-      "video/mp2t": {
-        source: "iana",
-        extensions: ["ts"]
-      },
-      "video/mp4": {
-        source: "iana",
-        compressible: false,
-        extensions: ["mp4", "mp4v", "mpg4"]
-      },
-      "video/mp4v-es": {
-        source: "iana"
-      },
-      "video/mpeg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
-      },
-      "video/mpeg4-generic": {
-        source: "iana"
-      },
-      "video/mpv": {
-        source: "iana"
-      },
-      "video/nv": {
-        source: "iana"
-      },
-      "video/ogg": {
-        source: "iana",
-        compressible: false,
-        extensions: ["ogv"]
-      },
-      "video/parityfec": {
-        source: "iana"
-      },
-      "video/pointer": {
-        source: "iana"
-      },
-      "video/quicktime": {
-        source: "iana",
-        compressible: false,
-        extensions: ["qt", "mov"]
-      },
-      "video/raptorfec": {
-        source: "iana"
-      },
-      "video/raw": {
-        source: "iana"
-      },
-      "video/rtp-enc-aescm128": {
-        source: "iana"
-      },
-      "video/rtploopback": {
-        source: "iana"
-      },
-      "video/rtx": {
-        source: "iana"
-      },
-      "video/scip": {
-        source: "iana"
-      },
-      "video/smpte291": {
-        source: "iana"
-      },
-      "video/smpte292m": {
-        source: "iana"
-      },
-      "video/ulpfec": {
-        source: "iana"
-      },
-      "video/vc1": {
-        source: "iana"
-      },
-      "video/vc2": {
-        source: "iana"
-      },
-      "video/vnd.cctv": {
-        source: "iana"
-      },
-      "video/vnd.dece.hd": {
-        source: "iana",
-        extensions: ["uvh", "uvvh"]
-      },
-      "video/vnd.dece.mobile": {
-        source: "iana",
-        extensions: ["uvm", "uvvm"]
-      },
-      "video/vnd.dece.mp4": {
-        source: "iana"
-      },
-      "video/vnd.dece.pd": {
-        source: "iana",
-        extensions: ["uvp", "uvvp"]
-      },
-      "video/vnd.dece.sd": {
-        source: "iana",
-        extensions: ["uvs", "uvvs"]
-      },
-      "video/vnd.dece.video": {
-        source: "iana",
-        extensions: ["uvv", "uvvv"]
-      },
-      "video/vnd.directv.mpeg": {
-        source: "iana"
-      },
-      "video/vnd.directv.mpeg-tts": {
-        source: "iana"
-      },
-      "video/vnd.dlna.mpeg-tts": {
-        source: "iana"
-      },
-      "video/vnd.dvb.file": {
-        source: "iana",
-        extensions: ["dvb"]
-      },
-      "video/vnd.fvt": {
-        source: "iana",
-        extensions: ["fvt"]
-      },
-      "video/vnd.hns.video": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.1dparityfec-1010": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.1dparityfec-2005": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.2dparityfec-1010": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.2dparityfec-2005": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.ttsavc": {
-        source: "iana"
-      },
-      "video/vnd.iptvforum.ttsmpeg2": {
-        source: "iana"
-      },
-      "video/vnd.motorola.video": {
-        source: "iana"
-      },
-      "video/vnd.motorola.videop": {
-        source: "iana"
-      },
-      "video/vnd.mpegurl": {
-        source: "iana",
-        extensions: ["mxu", "m4u"]
-      },
-      "video/vnd.ms-playready.media.pyv": {
-        source: "iana",
-        extensions: ["pyv"]
-      },
-      "video/vnd.nokia.interleaved-multimedia": {
-        source: "iana"
-      },
-      "video/vnd.nokia.mp4vr": {
-        source: "iana"
-      },
-      "video/vnd.nokia.videovoip": {
-        source: "iana"
-      },
-      "video/vnd.objectvideo": {
-        source: "iana"
-      },
-      "video/vnd.radgamettools.bink": {
-        source: "iana"
-      },
-      "video/vnd.radgamettools.smacker": {
-        source: "iana"
-      },
-      "video/vnd.sealed.mpeg1": {
-        source: "iana"
-      },
-      "video/vnd.sealed.mpeg4": {
-        source: "iana"
-      },
-      "video/vnd.sealed.swf": {
-        source: "iana"
-      },
-      "video/vnd.sealedmedia.softseal.mov": {
-        source: "iana"
-      },
-      "video/vnd.uvvu.mp4": {
-        source: "iana",
-        extensions: ["uvu", "uvvu"]
-      },
-      "video/vnd.vivo": {
-        source: "iana",
-        extensions: ["viv"]
-      },
-      "video/vnd.youtube.yt": {
-        source: "iana"
-      },
-      "video/vp8": {
-        source: "iana"
-      },
-      "video/vp9": {
-        source: "iana"
-      },
-      "video/webm": {
-        source: "apache",
-        compressible: false,
-        extensions: ["webm"]
-      },
-      "video/x-f4v": {
-        source: "apache",
-        extensions: ["f4v"]
-      },
-      "video/x-fli": {
-        source: "apache",
-        extensions: ["fli"]
-      },
-      "video/x-flv": {
-        source: "apache",
-        compressible: false,
-        extensions: ["flv"]
-      },
-      "video/x-m4v": {
-        source: "apache",
-        extensions: ["m4v"]
-      },
-      "video/x-matroska": {
-        source: "apache",
-        compressible: false,
-        extensions: ["mkv", "mk3d", "mks"]
-      },
-      "video/x-mng": {
-        source: "apache",
-        extensions: ["mng"]
-      },
-      "video/x-ms-asf": {
-        source: "apache",
-        extensions: ["asf", "asx"]
-      },
-      "video/x-ms-vob": {
-        source: "apache",
-        extensions: ["vob"]
-      },
-      "video/x-ms-wm": {
-        source: "apache",
-        extensions: ["wm"]
-      },
-      "video/x-ms-wmv": {
-        source: "apache",
-        compressible: false,
-        extensions: ["wmv"]
-      },
-      "video/x-ms-wmx": {
-        source: "apache",
-        extensions: ["wmx"]
-      },
-      "video/x-ms-wvx": {
-        source: "apache",
-        extensions: ["wvx"]
-      },
-      "video/x-msvideo": {
-        source: "apache",
-        extensions: ["avi"]
-      },
-      "video/x-sgi-movie": {
-        source: "apache",
-        extensions: ["movie"]
-      },
-      "video/x-smv": {
-        source: "apache",
-        extensions: ["smv"]
-      },
-      "x-conference/x-cooltalk": {
-        source: "apache",
-        extensions: ["ice"]
-      },
-      "x-shader/x-fragment": {
-        compressible: true
-      },
-      "x-shader/x-vertex": {
-        compressible: true
-      }
-    };
-  }
-});
-
-// node_modules/mime-db/index.js
-var require_mime_db = __commonJS({
-  "node_modules/mime-db/index.js"(exports, module) {
-    module.exports = require_db();
-  }
-});
-
-// node_modules/mime-types/index.js
-var require_mime_types = __commonJS({
-  "node_modules/mime-types/index.js"(exports) {
-    "use strict";
-    var db = require_mime_db();
-    var extname = __require("path").extname;
-    var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
-    var TEXT_TYPE_REGEXP = /^text\//i;
-    exports.charset = charset;
-    exports.charsets = {
-      lookup: charset
-    };
-    exports.contentType = contentType;
-    exports.extension = extension;
-    exports.extensions = /* @__PURE__ */ Object.create(null);
-    exports.lookup = lookup;
-    exports.types = /* @__PURE__ */ Object.create(null);
-    populateMaps(exports.extensions, exports.types);
-    function charset(type) {
-      if (!type || typeof type !== "string") {
-        return false;
-      }
-      var match = EXTRACT_TYPE_REGEXP.exec(type);
-      var mime = match && db[match[1].toLowerCase()];
-      if (mime && mime.charset) {
-        return mime.charset;
-      }
-      if (match && TEXT_TYPE_REGEXP.test(match[1])) {
-        return "UTF-8";
-      }
-      return false;
-    }
-    function contentType(str) {
-      if (!str || typeof str !== "string") {
-        return false;
-      }
-      var mime = str.indexOf("/") === -1 ? exports.lookup(str) : str;
-      if (!mime) {
-        return false;
-      }
-      if (mime.indexOf("charset") === -1) {
-        var charset2 = exports.charset(mime);
-        if (charset2) mime += "; charset=" + charset2.toLowerCase();
-      }
-      return mime;
-    }
-    function extension(type) {
-      if (!type || typeof type !== "string") {
-        return false;
-      }
-      var match = EXTRACT_TYPE_REGEXP.exec(type);
-      var exts = match && exports.extensions[match[1].toLowerCase()];
-      if (!exts || !exts.length) {
-        return false;
-      }
-      return exts[0];
-    }
-    function lookup(path) {
-      if (!path || typeof path !== "string") {
-        return false;
-      }
-      var extension2 = extname("x." + path).toLowerCase().substr(1);
-      if (!extension2) {
-        return false;
-      }
-      return exports.types[extension2] || false;
-    }
-    function populateMaps(extensions, types) {
-      var preference = ["nginx", "apache", void 0, "iana"];
-      Object.keys(db).forEach(function forEachMimeType(type) {
-        var mime = db[type];
-        var exts = mime.extensions;
-        if (!exts || !exts.length) {
-          return;
-        }
-        extensions[type] = exts;
-        for (var i = 0; i < exts.length; i++) {
-          var extension2 = exts[i];
-          if (types[extension2]) {
-            var from = preference.indexOf(db[types[extension2]].source);
-            var to = preference.indexOf(mime.source);
-            if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) {
-              continue;
-            }
-          }
-          types[extension2] = type;
-        }
-      });
-    }
-  }
-});
-
-// node_modules/type-is/index.js
-var require_type_is = __commonJS({
-  "node_modules/type-is/index.js"(exports, module) {
-    "use strict";
-    var typer = require_media_typer();
-    var mime = require_mime_types();
-    module.exports = typeofrequest;
-    module.exports.is = typeis;
-    module.exports.hasBody = hasbody;
-    module.exports.normalize = normalize;
-    module.exports.match = mimeMatch;
-    function typeis(value, types_) {
-      var i;
-      var types = types_;
-      var val = tryNormalizeType(value);
-      if (!val) {
-        return false;
-      }
-      if (types && !Array.isArray(types)) {
-        types = new Array(arguments.length - 1);
-        for (i = 0; i < types.length; i++) {
-          types[i] = arguments[i + 1];
-        }
-      }
-      if (!types || !types.length) {
-        return val;
-      }
-      var type;
-      for (i = 0; i < types.length; i++) {
-        if (mimeMatch(normalize(type = types[i]), val)) {
-          return type[0] === "+" || type.indexOf("*") !== -1 ? val : type;
-        }
-      }
-      return false;
-    }
-    function hasbody(req) {
-      return req.headers["transfer-encoding"] !== void 0 || !isNaN(req.headers["content-length"]);
-    }
-    function typeofrequest(req, types_) {
-      var types = types_;
-      if (!hasbody(req)) {
-        return null;
-      }
-      if (arguments.length > 2) {
-        types = new Array(arguments.length - 1);
-        for (var i = 0; i < types.length; i++) {
-          types[i] = arguments[i + 1];
-        }
-      }
-      var value = req.headers["content-type"];
-      return typeis(value, types);
-    }
-    function normalize(type) {
-      if (typeof type !== "string") {
-        return false;
-      }
-      switch (type) {
-        case "urlencoded":
-          return "application/x-www-form-urlencoded";
-        case "multipart":
-          return "multipart/*";
-      }
-      if (type[0] === "+") {
-        return "*/*" + type;
-      }
-      return type.indexOf("/") === -1 ? mime.lookup(type) : type;
-    }
-    function mimeMatch(expected, actual) {
-      if (expected === false) {
-        return false;
-      }
-      var actualParts = actual.split("/");
-      var expectedParts = expected.split("/");
-      if (actualParts.length !== 2 || expectedParts.length !== 2) {
-        return false;
-      }
-      if (expectedParts[0] !== "*" && expectedParts[0] !== actualParts[0]) {
-        return false;
-      }
-      if (expectedParts[1].substr(0, 2) === "*+") {
-        return expectedParts[1].length <= actualParts[1].length + 1 && expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length);
-      }
-      if (expectedParts[1] !== "*" && expectedParts[1] !== actualParts[1]) {
-        return false;
-      }
-      return true;
-    }
-    function normalizeType(value) {
-      var type = typer.parse(value);
-      type.parameters = void 0;
-      return typer.format(type);
-    }
-    function tryNormalizeType(value) {
-      if (!value) {
-        return null;
-      }
-      try {
-        return normalizeType(value);
-      } catch (err) {
-        return null;
-      }
-    }
-  }
-});
-
-// node_modules/body-parser/lib/types/json.js
-var require_json = __commonJS({
-  "node_modules/body-parser/lib/types/json.js"(exports, module) {
-    "use strict";
-    var bytes = require_bytes();
-    var contentType = require_content_type();
-    var createError = require_http_errors();
-    var debug = require_src()("body-parser:json");
-    var read = require_read();
-    var typeis = require_type_is();
-    module.exports = json;
-    var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/;
-    var JSON_SYNTAX_CHAR = "#";
-    var JSON_SYNTAX_REGEXP = /#+/g;
-    function json(options) {
-      var opts = options || {};
-      var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit;
-      var inflate = opts.inflate !== false;
-      var reviver = opts.reviver;
-      var strict = opts.strict !== false;
-      var type = opts.type || "application/json";
-      var verify = opts.verify || false;
-      if (verify !== false && typeof verify !== "function") {
-        throw new TypeError("option verify must be function");
-      }
-      var shouldParse = typeof type !== "function" ? typeChecker(type) : type;
-      function parse(body) {
-        if (body.length === 0) {
-          return {};
-        }
-        if (strict) {
-          var first = firstchar(body);
-          if (first !== "{" && first !== "[") {
-            debug("strict violation");
-            throw createStrictSyntaxError(body, first);
-          }
-        }
-        try {
-          debug("parse json");
-          return JSON.parse(body, reviver);
-        } catch (e) {
-          throw normalizeJsonSyntaxError(e, {
-            message: e.message,
-            stack: e.stack
-          });
-        }
-      }
-      return function jsonParser(req, res, next) {
-        if (req._body) {
-          debug("body already parsed");
-          next();
-          return;
-        }
-        req.body = req.body || {};
-        if (!typeis.hasBody(req)) {
-          debug("skip empty body");
-          next();
-          return;
-        }
-        debug("content-type %j", req.headers["content-type"]);
-        if (!shouldParse(req)) {
-          debug("skip parsing");
-          next();
-          return;
-        }
-        var charset = getCharset(req) || "utf-8";
-        if (charset.slice(0, 4) !== "utf-") {
-          debug("invalid charset");
-          next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
-            charset,
-            type: "charset.unsupported"
-          }));
-          return;
-        }
-        read(req, res, next, parse, debug, {
-          encoding: charset,
-          inflate,
-          limit,
-          verify
-        });
-      };
-    }
-    function createStrictSyntaxError(str, char) {
-      var index = str.indexOf(char);
-      var partial = "";
-      if (index !== -1) {
-        partial = str.substring(0, index) + JSON_SYNTAX_CHAR;
-        for (var i = index + 1; i < str.length; i++) {
-          partial += JSON_SYNTAX_CHAR;
-        }
-      }
-      try {
-        JSON.parse(partial);
-        throw new SyntaxError("strict violation");
-      } catch (e) {
-        return normalizeJsonSyntaxError(e, {
-          message: e.message.replace(JSON_SYNTAX_REGEXP, function(placeholder) {
-            return str.substring(index, index + placeholder.length);
-          }),
-          stack: e.stack
-        });
-      }
-    }
-    function firstchar(str) {
-      var match = FIRST_CHAR_REGEXP.exec(str);
-      return match ? match[1] : void 0;
-    }
-    function getCharset(req) {
-      try {
-        return (contentType.parse(req).parameters.charset || "").toLowerCase();
-      } catch (e) {
-        return void 0;
-      }
-    }
-    function normalizeJsonSyntaxError(error, obj) {
-      var keys = Object.getOwnPropertyNames(error);
-      for (var i = 0; i < keys.length; i++) {
-        var key = keys[i];
-        if (key !== "stack" && key !== "message") {
-          delete error[key];
-        }
-      }
-      error.stack = obj.stack.replace(error.message, obj.message);
-      error.message = obj.message;
-      return error;
-    }
-    function typeChecker(type) {
-      return function checkType(req) {
-        return Boolean(typeis(req, type));
-      };
-    }
-  }
-});
-
-// node_modules/body-parser/lib/types/raw.js
-var require_raw = __commonJS({
-  "node_modules/body-parser/lib/types/raw.js"(exports, module) {
-    "use strict";
-    var bytes = require_bytes();
-    var debug = require_src()("body-parser:raw");
-    var read = require_read();
-    var typeis = require_type_is();
-    module.exports = raw;
-    function raw(options) {
-      var opts = options || {};
-      var inflate = opts.inflate !== false;
-      var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit;
-      var type = opts.type || "application/octet-stream";
-      var verify = opts.verify || false;
-      if (verify !== false && typeof verify !== "function") {
-        throw new TypeError("option verify must be function");
-      }
-      var shouldParse = typeof type !== "function" ? typeChecker(type) : type;
-      function parse(buf) {
-        return buf;
-      }
-      return function rawParser(req, res, next) {
-        if (req._body) {
-          debug("body already parsed");
-          next();
-          return;
-        }
-        req.body = req.body || {};
-        if (!typeis.hasBody(req)) {
-          debug("skip empty body");
-          next();
-          return;
-        }
-        debug("content-type %j", req.headers["content-type"]);
-        if (!shouldParse(req)) {
-          debug("skip parsing");
-          next();
-          return;
-        }
-        read(req, res, next, parse, debug, {
-          encoding: null,
-          inflate,
-          limit,
-          verify
-        });
-      };
-    }
-    function typeChecker(type) {
-      return function checkType(req) {
-        return Boolean(typeis(req, type));
-      };
-    }
-  }
-});
-
-// node_modules/body-parser/lib/types/text.js
-var require_text = __commonJS({
-  "node_modules/body-parser/lib/types/text.js"(exports, module) {
-    "use strict";
-    var bytes = require_bytes();
-    var contentType = require_content_type();
-    var debug = require_src()("body-parser:text");
-    var read = require_read();
-    var typeis = require_type_is();
-    module.exports = text;
-    function text(options) {
-      var opts = options || {};
-      var defaultCharset = opts.defaultCharset || "utf-8";
-      var inflate = opts.inflate !== false;
-      var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit;
-      var type = opts.type || "text/plain";
-      var verify = opts.verify || false;
-      if (verify !== false && typeof verify !== "function") {
-        throw new TypeError("option verify must be function");
-      }
-      var shouldParse = typeof type !== "function" ? typeChecker(type) : type;
-      function parse(buf) {
-        return buf;
-      }
-      return function textParser(req, res, next) {
-        if (req._body) {
-          debug("body already parsed");
-          next();
-          return;
-        }
-        req.body = req.body || {};
-        if (!typeis.hasBody(req)) {
-          debug("skip empty body");
-          next();
-          return;
-        }
-        debug("content-type %j", req.headers["content-type"]);
-        if (!shouldParse(req)) {
-          debug("skip parsing");
-          next();
-          return;
-        }
-        var charset = getCharset(req) || defaultCharset;
-        read(req, res, next, parse, debug, {
-          encoding: charset,
-          inflate,
-          limit,
-          verify
-        });
-      };
-    }
-    function getCharset(req) {
-      try {
-        return (contentType.parse(req).parameters.charset || "").toLowerCase();
-      } catch (e) {
-        return void 0;
-      }
-    }
-    function typeChecker(type) {
-      return function checkType(req) {
-        return Boolean(typeis(req, type));
-      };
-    }
-  }
-});
-
-// node_modules/es-errors/type.js
-var require_type = __commonJS({
-  "node_modules/es-errors/type.js"(exports, module) {
-    "use strict";
-    module.exports = TypeError;
-  }
-});
-
-// node_modules/object-inspect/util.inspect.js
-var require_util_inspect = __commonJS({
-  "node_modules/object-inspect/util.inspect.js"(exports, module) {
-    module.exports = __require("util").inspect;
-  }
-});
-
-// node_modules/object-inspect/index.js
-var require_object_inspect = __commonJS({
-  "node_modules/object-inspect/index.js"(exports, module) {
-    var hasMap = typeof Map === "function" && Map.prototype;
-    var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, "size") : null;
-    var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === "function" ? mapSizeDescriptor.get : null;
-    var mapForEach = hasMap && Map.prototype.forEach;
-    var hasSet = typeof Set === "function" && Set.prototype;
-    var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, "size") : null;
-    var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === "function" ? setSizeDescriptor.get : null;
-    var setForEach = hasSet && Set.prototype.forEach;
-    var hasWeakMap = typeof WeakMap === "function" && WeakMap.prototype;
-    var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
-    var hasWeakSet = typeof WeakSet === "function" && WeakSet.prototype;
-    var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
-    var hasWeakRef = typeof WeakRef === "function" && WeakRef.prototype;
-    var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
-    var booleanValueOf = Boolean.prototype.valueOf;
-    var objectToString = Object.prototype.toString;
-    var functionToString = Function.prototype.toString;
-    var $match = String.prototype.match;
-    var $slice = String.prototype.slice;
-    var $replace = String.prototype.replace;
-    var $toUpperCase = String.prototype.toUpperCase;
-    var $toLowerCase = String.prototype.toLowerCase;
-    var $test = RegExp.prototype.test;
-    var $concat = Array.prototype.concat;
-    var $join = Array.prototype.join;
-    var $arrSlice = Array.prototype.slice;
-    var $floor = Math.floor;
-    var bigIntValueOf = typeof BigInt === "function" ? BigInt.prototype.valueOf : null;
-    var gOPS = Object.getOwnPropertySymbols;
-    var symToString = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? Symbol.prototype.toString : null;
-    var hasShammedSymbols = typeof Symbol === "function" && typeof Symbol.iterator === "object";
-    var toStringTag = typeof Symbol === "function" && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? "object" : "symbol") ? Symbol.toStringTag : null;
-    var isEnumerable = Object.prototype.propertyIsEnumerable;
-    var gPO = (typeof Reflect === "function" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(O) {
-      return O.__proto__;
-    } : null);
-    function addNumericSeparator(num, str) {
-      if (num === Infinity || num === -Infinity || num !== num || num && num > -1e3 && num < 1e3 || $test.call(/e/, str)) {
-        return str;
-      }
-      var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
-      if (typeof num === "number") {
-        var int = num < 0 ? -$floor(-num) : $floor(num);
-        if (int !== num) {
-          var intStr = String(int);
-          var dec = $slice.call(str, intStr.length + 1);
-          return $replace.call(intStr, sepRegex, "$&_") + "." + $replace.call($replace.call(dec, /([0-9]{3})/g, "$&_"), /_$/, "");
-        }
-      }
-      return $replace.call(str, sepRegex, "$&_");
-    }
-    var utilInspect = require_util_inspect();
-    var inspectCustom = utilInspect.custom;
-    var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;
-    var quotes = {
-      __proto__: null,
-      "double": '"',
-      single: "'"
-    };
-    var quoteREs = {
-      __proto__: null,
-      "double": /(["\\])/g,
-      single: /(['\\])/g
-    };
-    module.exports = function inspect_(obj, options, depth, seen) {
-      var opts = options || {};
-      if (has(opts, "quoteStyle") && !has(quotes, opts.quoteStyle)) {
-        throw new TypeError('option "quoteStyle" must be "single" or "double"');
-      }
-      if (has(opts, "maxStringLength") && (typeof opts.maxStringLength === "number" ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) {
-        throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
-      }
-      var customInspect = has(opts, "customInspect") ? opts.customInspect : true;
-      if (typeof customInspect !== "boolean" && customInspect !== "symbol") {
-        throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");
-      }
-      if (has(opts, "indent") && opts.indent !== null && opts.indent !== "	" && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) {
-        throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
-      }
-      if (has(opts, "numericSeparator") && typeof opts.numericSeparator !== "boolean") {
-        throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
-      }
-      var numericSeparator = opts.numericSeparator;
-      if (typeof obj === "undefined") {
-        return "undefined";
-      }
-      if (obj === null) {
-        return "null";
-      }
-      if (typeof obj === "boolean") {
-        return obj ? "true" : "false";
-      }
-      if (typeof obj === "string") {
-        return inspectString(obj, opts);
-      }
-      if (typeof obj === "number") {
-        if (obj === 0) {
-          return Infinity / obj > 0 ? "0" : "-0";
-        }
-        var str = String(obj);
-        return numericSeparator ? addNumericSeparator(obj, str) : str;
-      }
-      if (typeof obj === "bigint") {
-        var bigIntStr = String(obj) + "n";
-        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
-      }
-      var maxDepth = typeof opts.depth === "undefined" ? 5 : opts.depth;
-      if (typeof depth === "undefined") {
-        depth = 0;
-      }
-      if (depth >= maxDepth && maxDepth > 0 && typeof obj === "object") {
-        return isArray(obj) ? "[Array]" : "[Object]";
-      }
-      var indent = getIndent(opts, depth);
-      if (typeof seen === "undefined") {
-        seen = [];
-      } else if (indexOf(seen, obj) >= 0) {
-        return "[Circular]";
-      }
-      function inspect(value, from, noIndent) {
-        if (from) {
-          seen = $arrSlice.call(seen);
-          seen.push(from);
-        }
-        if (noIndent) {
-          var newOpts = {
-            depth: opts.depth
-          };
-          if (has(opts, "quoteStyle")) {
-            newOpts.quoteStyle = opts.quoteStyle;
-          }
-          return inspect_(value, newOpts, depth + 1, seen);
-        }
-        return inspect_(value, opts, depth + 1, seen);
-      }
-      if (typeof obj === "function" && !isRegExp(obj)) {
-        var name = nameOf(obj);
-        var keys = arrObjKeys(obj, inspect);
-        return "[Function" + (name ? ": " + name : " (anonymous)") + "]" + (keys.length > 0 ? " { " + $join.call(keys, ", ") + " }" : "");
-      }
-      if (isSymbol(obj)) {
-        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, "$1") : symToString.call(obj);
-        return typeof obj === "object" && !hasShammedSymbols ? markBoxed(symString) : symString;
-      }
-      if (isElement(obj)) {
-        var s = "<" + $toLowerCase.call(String(obj.nodeName));
-        var attrs = obj.attributes || [];
-        for (var i = 0; i < attrs.length; i++) {
-          s += " " + attrs[i].name + "=" + wrapQuotes(quote(attrs[i].value), "double", opts);
-        }
-        s += ">";
-        if (obj.childNodes && obj.childNodes.length) {
-          s += "...";
-        }
-        s += "</" + $toLowerCase.call(String(obj.nodeName)) + ">";
-        return s;
-      }
-      if (isArray(obj)) {
-        if (obj.length === 0) {
-          return "[]";
-        }
-        var xs = arrObjKeys(obj, inspect);
-        if (indent && !singleLineValues(xs)) {
-          return "[" + indentedJoin(xs, indent) + "]";
-        }
-        return "[ " + $join.call(xs, ", ") + " ]";
-      }
-      if (isError(obj)) {
-        var parts = arrObjKeys(obj, inspect);
-        if (!("cause" in Error.prototype) && "cause" in obj && !isEnumerable.call(obj, "cause")) {
-          return "{ [" + String(obj) + "] " + $join.call($concat.call("[cause]: " + inspect(obj.cause), parts), ", ") + " }";
-        }
-        if (parts.length === 0) {
-          return "[" + String(obj) + "]";
-        }
-        return "{ [" + String(obj) + "] " + $join.call(parts, ", ") + " }";
-      }
-      if (typeof obj === "object" && customInspect) {
-        if (inspectSymbol && typeof obj[inspectSymbol] === "function" && utilInspect) {
-          return utilInspect(obj, {
-            depth: maxDepth - depth
-          });
-        } else if (customInspect !== "symbol" && typeof obj.inspect === "function") {
-          return obj.inspect();
-        }
-      }
-      if (isMap(obj)) {
-        var mapParts = [];
-        if (mapForEach) {
-          mapForEach.call(obj, function(value, key) {
-            mapParts.push(inspect(key, obj, true) + " => " + inspect(value, obj));
-          });
-        }
-        return collectionOf("Map", mapSize.call(obj), mapParts, indent);
-      }
-      if (isSet(obj)) {
-        var setParts = [];
-        if (setForEach) {
-          setForEach.call(obj, function(value) {
-            setParts.push(inspect(value, obj));
-          });
-        }
-        return collectionOf("Set", setSize.call(obj), setParts, indent);
-      }
-      if (isWeakMap(obj)) {
-        return weakCollectionOf("WeakMap");
-      }
-      if (isWeakSet(obj)) {
-        return weakCollectionOf("WeakSet");
-      }
-      if (isWeakRef(obj)) {
-        return weakCollectionOf("WeakRef");
-      }
-      if (isNumber(obj)) {
-        return markBoxed(inspect(Number(obj)));
-      }
-      if (isBigInt(obj)) {
-        return markBoxed(inspect(bigIntValueOf.call(obj)));
-      }
-      if (isBoolean(obj)) {
-        return markBoxed(booleanValueOf.call(obj));
-      }
-      if (isString(obj)) {
-        return markBoxed(inspect(String(obj)));
-      }
-      if (typeof window !== "undefined" && obj === window) {
-        return "{ [object Window] }";
-      }
-      if (typeof globalThis !== "undefined" && obj === globalThis || typeof global !== "undefined" && obj === global) {
-        return "{ [object globalThis] }";
-      }
-      if (!isDate(obj) && !isRegExp(obj)) {
-        var ys = arrObjKeys(obj, inspect);
-        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
-        var protoTag = obj instanceof Object ? "" : "null prototype";
-        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? "Object" : "";
-        var constructorTag = isPlainObject || typeof obj.constructor !== "function" ? "" : obj.constructor.name ? obj.constructor.name + " " : "";
-        var tag = constructorTag + (stringTag || protoTag ? "[" + $join.call($concat.call([], stringTag || [], protoTag || []), ": ") + "] " : "");
-        if (ys.length === 0) {
-          return tag + "{}";
-        }
-        if (indent) {
-          return tag + "{" + indentedJoin(ys, indent) + "}";
-        }
-        return tag + "{ " + $join.call(ys, ", ") + " }";
-      }
-      return String(obj);
-    };
-    function wrapQuotes(s, defaultStyle, opts) {
-      var style = opts.quoteStyle || defaultStyle;
-      var quoteChar = quotes[style];
-      return quoteChar + s + quoteChar;
-    }
-    function quote(s) {
-      return $replace.call(String(s), /"/g, "&quot;");
-    }
-    function isArray(obj) {
-      return toStr(obj) === "[object Array]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isDate(obj) {
-      return toStr(obj) === "[object Date]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isRegExp(obj) {
-      return toStr(obj) === "[object RegExp]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isError(obj) {
-      return toStr(obj) === "[object Error]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isString(obj) {
-      return toStr(obj) === "[object String]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isNumber(obj) {
-      return toStr(obj) === "[object Number]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isBoolean(obj) {
-      return toStr(obj) === "[object Boolean]" && (!toStringTag || !(typeof obj === "object" && toStringTag in obj));
-    }
-    function isSymbol(obj) {
-      if (hasShammedSymbols) {
-        return obj && typeof obj === "object" && obj instanceof Symbol;
-      }
-      if (typeof obj === "symbol") {
-        return true;
-      }
-      if (!obj || typeof obj !== "object" || !symToString) {
-        return false;
-      }
-      try {
-        symToString.call(obj);
-        return true;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isBigInt(obj) {
-      if (!obj || typeof obj !== "object" || !bigIntValueOf) {
-        return false;
-      }
-      try {
-        bigIntValueOf.call(obj);
-        return true;
-      } catch (e) {
-      }
-      return false;
-    }
-    var hasOwn = Object.prototype.hasOwnProperty || function(key) {
-      return key in this;
-    };
-    function has(obj, key) {
-      return hasOwn.call(obj, key);
-    }
-    function toStr(obj) {
-      return objectToString.call(obj);
-    }
-    function nameOf(f) {
-      if (f.name) {
-        return f.name;
-      }
-      var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
-      if (m) {
-        return m[1];
-      }
-      return null;
-    }
-    function indexOf(xs, x) {
-      if (xs.indexOf) {
-        return xs.indexOf(x);
-      }
-      for (var i = 0, l = xs.length; i < l; i++) {
-        if (xs[i] === x) {
-          return i;
-        }
-      }
-      return -1;
-    }
-    function isMap(x) {
-      if (!mapSize || !x || typeof x !== "object") {
-        return false;
-      }
-      try {
-        mapSize.call(x);
-        try {
-          setSize.call(x);
-        } catch (s) {
-          return true;
-        }
-        return x instanceof Map;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isWeakMap(x) {
-      if (!weakMapHas || !x || typeof x !== "object") {
-        return false;
-      }
-      try {
-        weakMapHas.call(x, weakMapHas);
-        try {
-          weakSetHas.call(x, weakSetHas);
-        } catch (s) {
-          return true;
-        }
-        return x instanceof WeakMap;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isWeakRef(x) {
-      if (!weakRefDeref || !x || typeof x !== "object") {
-        return false;
-      }
-      try {
-        weakRefDeref.call(x);
-        return true;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isSet(x) {
-      if (!setSize || !x || typeof x !== "object") {
-        return false;
-      }
-      try {
-        setSize.call(x);
-        try {
-          mapSize.call(x);
-        } catch (m) {
-          return true;
-        }
-        return x instanceof Set;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isWeakSet(x) {
-      if (!weakSetHas || !x || typeof x !== "object") {
-        return false;
-      }
-      try {
-        weakSetHas.call(x, weakSetHas);
-        try {
-          weakMapHas.call(x, weakMapHas);
-        } catch (s) {
-          return true;
-        }
-        return x instanceof WeakSet;
-      } catch (e) {
-      }
-      return false;
-    }
-    function isElement(x) {
-      if (!x || typeof x !== "object") {
-        return false;
-      }
-      if (typeof HTMLElement !== "undefined" && x instanceof HTMLElement) {
-        return true;
-      }
-      return typeof x.nodeName === "string" && typeof x.getAttribute === "function";
-    }
-    function inspectString(str, opts) {
-      if (str.length > opts.maxStringLength) {
-        var remaining = str.length - opts.maxStringLength;
-        var trailer = "... " + remaining + " more character" + (remaining > 1 ? "s" : "");
-        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
-      }
-      var quoteRE = quoteREs[opts.quoteStyle || "single"];
-      quoteRE.lastIndex = 0;
-      var s = $replace.call($replace.call(str, quoteRE, "\\$1"), /[\x00-\x1f]/g, lowbyte);
-      return wrapQuotes(s, "single", opts);
-    }
-    function lowbyte(c) {
-      var n = c.charCodeAt(0);
-      var x = {
-        8: "b",
-        9: "t",
-        10: "n",
-        12: "f",
-        13: "r"
-      }[n];
-      if (x) {
-        return "\\" + x;
-      }
-      return "\\x" + (n < 16 ? "0" : "") + $toUpperCase.call(n.toString(16));
-    }
-    function markBoxed(str) {
-      return "Object(" + str + ")";
-    }
-    function weakCollectionOf(type) {
-      return type + " { ? }";
-    }
-    function collectionOf(type, size, entries, indent) {
-      var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ", ");
-      return type + " (" + size + ") {" + joinedEntries + "}";
-    }
-    function singleLineValues(xs) {
-      for (var i = 0; i < xs.length; i++) {
-        if (indexOf(xs[i], "\n") >= 0) {
-          return false;
-        }
-      }
-      return true;
-    }
-    function getIndent(opts, depth) {
-      var baseIndent;
-      if (opts.indent === "	") {
-        baseIndent = "	";
-      } else if (typeof opts.indent === "number" && opts.indent > 0) {
-        baseIndent = $join.call(Array(opts.indent + 1), " ");
-      } else {
-        return null;
-      }
-      return {
-        base: baseIndent,
-        prev: $join.call(Array(depth + 1), baseIndent)
-      };
-    }
-    function indentedJoin(xs, indent) {
-      if (xs.length === 0) {
-        return "";
-      }
-      var lineJoiner = "\n" + indent.prev + indent.base;
-      return lineJoiner + $join.call(xs, "," + lineJoiner) + "\n" + indent.prev;
-    }
-    function arrObjKeys(obj, inspect) {
-      var isArr = isArray(obj);
-      var xs = [];
-      if (isArr) {
-        xs.length = obj.length;
-        for (var i = 0; i < obj.length; i++) {
-          xs[i] = has(obj, i) ? inspect(obj[i], obj) : "";
-        }
-      }
-      var syms = typeof gOPS === "function" ? gOPS(obj) : [];
-      var symMap;
-      if (hasShammedSymbols) {
-        symMap = {};
-        for (var k = 0; k < syms.length; k++) {
-          symMap["$" + syms[k]] = syms[k];
-        }
-      }
-      for (var key in obj) {
-        if (!has(obj, key)) {
-          continue;
-        }
-        if (isArr && String(Number(key)) === key && key < obj.length) {
-          continue;
-        }
-        if (hasShammedSymbols && symMap["$" + key] instanceof Symbol) {
-          continue;
-        } else if ($test.call(/[^\w$]/, key)) {
-          xs.push(inspect(key, obj) + ": " + inspect(obj[key], obj));
-        } else {
-          xs.push(key + ": " + inspect(obj[key], obj));
-        }
-      }
-      if (typeof gOPS === "function") {
-        for (var j = 0; j < syms.length; j++) {
-          if (isEnumerable.call(obj, syms[j])) {
-            xs.push("[" + inspect(syms[j]) + "]: " + inspect(obj[syms[j]], obj));
-          }
-        }
-      }
-      return xs;
-    }
-  }
-});
-
-// node_modules/side-channel-list/index.js
-var require_side_channel_list = __commonJS({
-  "node_modules/side-channel-list/index.js"(exports, module) {
-    "use strict";
-    var inspect = require_object_inspect();
-    var $TypeError = require_type();
-    var listGetNode = function(list, key, isDelete) {
-      var prev = list;
-      var curr;
-      for (; (curr = prev.next) != null; prev = curr) {
-        if (curr.key === key) {
-          prev.next = curr.next;
-          if (!isDelete) {
-            curr.next = /** @type {NonNullable<typeof list.next>} */
-            list.next;
-            list.next = curr;
-          }
-          return curr;
-        }
-      }
-    };
-    var listGet = function(objects, key) {
-      if (!objects) {
-        return void 0;
-      }
-      var node = listGetNode(objects, key);
-      return node && node.value;
-    };
-    var listSet = function(objects, key, value) {
-      var node = listGetNode(objects, key);
-      if (node) {
-        node.value = value;
-      } else {
-        objects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */
-        {
-          // eslint-disable-line no-param-reassign, no-extra-parens
-          key,
-          next: objects.next,
-          value
-        };
-      }
-    };
-    var listHas = function(objects, key) {
-      if (!objects) {
-        return false;
-      }
-      return !!listGetNode(objects, key);
-    };
-    var listDelete = function(objects, key) {
-      if (objects) {
-        return listGetNode(objects, key, true);
-      }
-    };
-    module.exports = function getSideChannelList() {
-      var $o;
-      var channel = {
-        assert: function(key) {
-          if (!channel.has(key)) {
-            throw new $TypeError("Side channel does not contain " + inspect(key));
-          }
-        },
-        "delete": function(key) {
-          var root = $o && $o.next;
-          var deletedNode = listDelete($o, key);
-          if (deletedNode && root && root === deletedNode) {
-            $o = void 0;
-          }
-          return !!deletedNode;
-        },
-        get: function(key) {
-          return listGet($o, key);
-        },
-        has: function(key) {
-          return listHas($o, key);
-        },
-        set: function(key, value) {
-          if (!$o) {
-            $o = {
-              next: void 0
-            };
-          }
-          listSet(
-            /** @type {NonNullable<typeof $o>} */
-            $o,
-            key,
-            value
-          );
-        }
-      };
-      return channel;
-    };
-  }
-});
-
-// node_modules/es-object-atoms/index.js
-var require_es_object_atoms = __commonJS({
-  "node_modules/es-object-atoms/index.js"(exports, module) {
-    "use strict";
-    module.exports = Object;
-  }
-});
-
-// node_modules/es-errors/index.js
-var require_es_errors = __commonJS({
-  "node_modules/es-errors/index.js"(exports, module) {
-    "use strict";
-    module.exports = Error;
-  }
-});
-
-// node_modules/es-errors/eval.js
-var require_eval = __commonJS({
-  "node_modules/es-errors/eval.js"(exports, module) {
-    "use strict";
-    module.exports = EvalError;
-  }
-});
-
-// node_modules/es-errors/range.js
-var require_range = __commonJS({
-  "node_modules/es-errors/range.js"(exports, module) {
-    "use strict";
-    module.exports = RangeError;
-  }
-});
-
-// node_modules/es-errors/ref.js
-var require_ref = __commonJS({
-  "node_modules/es-errors/ref.js"(exports, module) {
-    "use strict";
-    module.exports = ReferenceError;
-  }
-});
-
-// node_modules/es-errors/syntax.js
-var require_syntax = __commonJS({
-  "node_modules/es-errors/syntax.js"(exports, module) {
-    "use strict";
-    module.exports = SyntaxError;
-  }
-});
-
-// node_modules/es-errors/uri.js
-var require_uri = __commonJS({
-  "node_modules/es-errors/uri.js"(exports, module) {
-    "use strict";
-    module.exports = URIError;
-  }
-});
-
-// node_modules/math-intrinsics/abs.js
-var require_abs = __commonJS({
-  "node_modules/math-intrinsics/abs.js"(exports, module) {
-    "use strict";
-    module.exports = Math.abs;
-  }
-});
-
-// node_modules/math-intrinsics/floor.js
-var require_floor = __commonJS({
-  "node_modules/math-intrinsics/floor.js"(exports, module) {
-    "use strict";
-    module.exports = Math.floor;
-  }
-});
-
-// node_modules/math-intrinsics/max.js
-var require_max = __commonJS({
-  "node_modules/math-intrinsics/max.js"(exports, module) {
-    "use strict";
-    module.exports = Math.max;
-  }
-});
-
-// node_modules/math-intrinsics/min.js
-var require_min = __commonJS({
-  "node_modules/math-intrinsics/min.js"(exports, module) {
-    "use strict";
-    module.exports = Math.min;
-  }
-});
-
-// node_modules/math-intrinsics/pow.js
-var require_pow = __commonJS({
-  "node_modules/math-intrinsics/pow.js"(exports, module) {
-    "use strict";
-    module.exports = Math.pow;
-  }
-});
-
-// node_modules/gopd/gOPD.js
-var require_gOPD = __commonJS({
-  "node_modules/gopd/gOPD.js"(exports, module) {
-    "use strict";
-    module.exports = Object.getOwnPropertyDescriptor;
-  }
-});
-
-// node_modules/gopd/index.js
-var require_gopd = __commonJS({
-  "node_modules/gopd/index.js"(exports, module) {
-    "use strict";
-    var $gOPD = require_gOPD();
-    if ($gOPD) {
-      try {
-        $gOPD([], "length");
-      } catch (e) {
-        $gOPD = null;
-      }
-    }
-    module.exports = $gOPD;
-  }
-});
-
-// node_modules/es-define-property/index.js
-var require_es_define_property = __commonJS({
-  "node_modules/es-define-property/index.js"(exports, module) {
-    "use strict";
-    var $defineProperty = Object.defineProperty || false;
-    if ($defineProperty) {
-      try {
-        $defineProperty({}, "a", {
-          value: 1
-        });
-      } catch (e) {
-        $defineProperty = false;
-      }
-    }
-    module.exports = $defineProperty;
-  }
-});
-
-// node_modules/has-symbols/shams.js
-var require_shams = __commonJS({
-  "node_modules/has-symbols/shams.js"(exports, module) {
-    "use strict";
-    module.exports = function hasSymbols() {
-      if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") {
-        return false;
-      }
-      if (typeof Symbol.iterator === "symbol") {
-        return true;
-      }
-      var obj = {};
-      var sym = Symbol("test");
-      var symObj = Object(sym);
-      if (typeof sym === "string") {
-        return false;
-      }
-      if (Object.prototype.toString.call(sym) !== "[object Symbol]") {
-        return false;
-      }
-      if (Object.prototype.toString.call(symObj) !== "[object Symbol]") {
-        return false;
-      }
-      var symVal = 42;
-      obj[sym] = symVal;
-      for (var _ in obj) {
-        return false;
-      }
-      if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) {
-        return false;
-      }
-      if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) {
-        return false;
-      }
-      var syms = Object.getOwnPropertySymbols(obj);
-      if (syms.length !== 1 || syms[0] !== sym) {
-        return false;
-      }
-      if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
-        return false;
-      }
-      if (typeof Object.getOwnPropertyDescriptor === "function") {
-        var descriptor = (
-          /** @type {PropertyDescriptor} */
-          Object.getOwnPropertyDescriptor(obj, sym)
-        );
-        if (descriptor.value !== symVal || descriptor.enumerable !== true) {
-          return false;
-        }
-      }
-      return true;
-    };
-  }
-});
-
-// node_modules/has-symbols/index.js
-var require_has_symbols = __commonJS({
-  "node_modules/has-symbols/index.js"(exports, module) {
-    "use strict";
-    var origSymbol = typeof Symbol !== "undefined" && Symbol;
-    var hasSymbolSham = require_shams();
-    module.exports = function hasNativeSymbols() {
-      if (typeof origSymbol !== "function") {
-        return false;
-      }
-      if (typeof Symbol !== "function") {
-        return false;
-      }
-      if (typeof origSymbol("foo") !== "symbol") {
-        return false;
-      }
-      if (typeof Symbol("bar") !== "symbol") {
-        return false;
-      }
-      return hasSymbolSham();
-    };
-  }
-});
-
-// node_modules/function-bind/implementation.js
-var require_implementation = __commonJS({
-  "node_modules/function-bind/implementation.js"(exports, module) {
-    "use strict";
-    var ERROR_MESSAGE = "Function.prototype.bind called on incompatible ";
-    var toStr = Object.prototype.toString;
-    var max = Math.max;
-    var funcType = "[object Function]";
-    var concatty = function concatty2(a, b) {
-      var arr = [];
-      for (var i = 0; i < a.length; i += 1) {
-        arr[i] = a[i];
-      }
-      for (var j = 0; j < b.length; j += 1) {
-        arr[j + a.length] = b[j];
-      }
-      return arr;
-    };
-    var slicy = function slicy2(arrLike, offset) {
-      var arr = [];
-      for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
-        arr[j] = arrLike[i];
-      }
-      return arr;
-    };
-    var joiny = function(arr, joiner) {
-      var str = "";
-      for (var i = 0; i < arr.length; i += 1) {
-        str += arr[i];
-        if (i + 1 < arr.length) {
-          str += joiner;
-        }
-      }
-      return str;
-    };
-    module.exports = function bind(that) {
-      var target = this;
-      if (typeof target !== "function" || toStr.apply(target) !== funcType) {
-        throw new TypeError(ERROR_MESSAGE + target);
-      }
-      var args = slicy(arguments, 1);
-      var bound;
-      var binder = function() {
-        if (this instanceof bound) {
-          var result = target.apply(this, concatty(args, arguments));
-          if (Object(result) === result) {
-            return result;
-          }
-          return this;
-        }
-        return target.apply(that, concatty(args, arguments));
-      };
-      var boundLength = max(0, target.length - args.length);
-      var boundArgs = [];
-      for (var i = 0; i < boundLength; i++) {
-        boundArgs[i] = "$" + i;
-      }
-      bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder);
-      if (target.prototype) {
-        var Empty = function Empty2() {
-        };
-        Empty.prototype = target.prototype;
-        bound.prototype = new Empty();
-        Empty.prototype = null;
-      }
-      return bound;
-    };
-  }
-});
-
-// node_modules/function-bind/index.js
-var require_function_bind = __commonJS({
-  "node_modules/function-bind/index.js"(exports, module) {
-    "use strict";
-    var implementation = require_implementation();
-    module.exports = Function.prototype.bind || implementation;
-  }
-});
-
-// node_modules/call-bind-apply-helpers/functionCall.js
-var require_functionCall = __commonJS({
-  "node_modules/call-bind-apply-helpers/functionCall.js"(exports, module) {
-    "use strict";
-    module.exports = Function.prototype.call;
-  }
-});
-
-// node_modules/call-bind-apply-helpers/functionApply.js
-var require_functionApply = __commonJS({
-  "node_modules/call-bind-apply-helpers/functionApply.js"(exports, module) {
-    "use strict";
-    module.exports = Function.prototype.apply;
-  }
-});
-
-// node_modules/call-bind-apply-helpers/reflectApply.js
-var require_reflectApply = __commonJS({
-  "node_modules/call-bind-apply-helpers/reflectApply.js"(exports, module) {
-    "use strict";
-    module.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply;
-  }
-});
-
-// node_modules/call-bind-apply-helpers/actualApply.js
-var require_actualApply = __commonJS({
-  "node_modules/call-bind-apply-helpers/actualApply.js"(exports, module) {
-    "use strict";
-    var bind = require_function_bind();
-    var $apply = require_functionApply();
-    var $call = require_functionCall();
-    var $reflectApply = require_reflectApply();
-    module.exports = $reflectApply || bind.call($call, $apply);
-  }
-});
-
-// node_modules/call-bind-apply-helpers/index.js
-var require_call_bind_apply_helpers = __commonJS({
-  "node_modules/call-bind-apply-helpers/index.js"(exports, module) {
-    "use strict";
-    var bind = require_function_bind();
-    var $TypeError = require_type();
-    var $call = require_functionCall();
-    var $actualApply = require_actualApply();
-    module.exports = function callBindBasic(args) {
-      if (args.length < 1 || typeof args[0] !== "function") {
-        throw new $TypeError("a function is required");
-      }
-      return $actualApply(bind, $call, args);
-    };
-  }
-});
-
-// node_modules/dunder-proto/get.js
-var require_get = __commonJS({
-  "node_modules/dunder-proto/get.js"(exports, module) {
-    "use strict";
-    var callBind = require_call_bind_apply_helpers();
-    var gOPD = require_gopd();
-    var hasProtoAccessor;
-    try {
-      hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */
-      [].__proto__ === Array.prototype;
-    } catch (e) {
-      if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") {
-        throw e;
-      }
-    }
-    var desc = !!hasProtoAccessor && gOPD && gOPD(
-      Object.prototype,
-      /** @type {keyof typeof Object.prototype} */
-      "__proto__"
-    );
-    var $Object = Object;
-    var $getPrototypeOf = $Object.getPrototypeOf;
-    module.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? (
-      /** @type {import('./get')} */
-      function getDunder(value) {
-        return $getPrototypeOf(value == null ? value : $Object(value));
-      }
-    ) : false;
-  }
-});
-
-// node_modules/hasown/index.js
-var require_hasown = __commonJS({
-  "node_modules/hasown/index.js"(exports, module) {
-    "use strict";
-    var call = Function.prototype.call;
-    var $hasOwn = Object.prototype.hasOwnProperty;
-    var bind = require_function_bind();
-    module.exports = bind.call(call, $hasOwn);
-  }
-});
-
-// node_modules/get-intrinsic/index.js
-var require_get_intrinsic = __commonJS({
-  "node_modules/get-intrinsic/index.js"(exports, module) {
-    "use strict";
-    var undefined2;
-    var $Object = require_es_object_atoms();
-    var $Error = require_es_errors();
-    var $EvalError = require_eval();
-    var $RangeError = require_range();
-    var $ReferenceError = require_ref();
-    var $SyntaxError = require_syntax();
-    var $TypeError = require_type();
-    var $URIError = require_uri();
-    var abs = require_abs();
-    var floor = require_floor();
-    var max = require_max();
-    var min = require_min();
-    var pow = require_pow();
-    var $Function = Function;
-    var getEvalledConstructor = function(expressionSyntax) {
-      try {
-        return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")();
-      } catch (e) {
-      }
-    };
-    var $gOPD = require_gopd();
-    var $defineProperty = require_es_define_property();
-    var throwTypeError = function() {
-      throw new $TypeError();
-    };
-    var ThrowTypeError = $gOPD ? function() {
-      try {
-        arguments.callee;
-        return throwTypeError;
-      } catch (calleeThrows) {
-        try {
-          return $gOPD(arguments, "callee").get;
-        } catch (gOPDthrows) {
-          return throwTypeError;
-        }
-      }
-    }() : throwTypeError;
-    var hasSymbols = require_has_symbols()();
-    var getDunderProto = require_get();
-    var getProto = typeof Reflect === "function" && Reflect.getPrototypeOf || $Object.getPrototypeOf || getDunderProto;
-    var $apply = require_functionApply();
-    var $call = require_functionCall();
-    var needsEval = {};
-    var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array);
-    var INTRINSICS = {
-      __proto__: null,
-      "%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError,
-      "%Array%": Array,
-      "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer,
-      "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2,
-      "%AsyncFromSyncIteratorPrototype%": undefined2,
-      "%AsyncFunction%": needsEval,
-      "%AsyncGenerator%": needsEval,
-      "%AsyncGeneratorFunction%": needsEval,
-      "%AsyncIteratorPrototype%": needsEval,
-      "%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics,
-      "%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt,
-      "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array,
-      "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array,
-      "%Boolean%": Boolean,
-      "%DataView%": typeof DataView === "undefined" ? undefined2 : DataView,
-      "%Date%": Date,
-      "%decodeURI%": decodeURI,
-      "%decodeURIComponent%": decodeURIComponent,
-      "%encodeURI%": encodeURI,
-      "%encodeURIComponent%": encodeURIComponent,
-      "%Error%": $Error,
-      "%eval%": eval,
-      // eslint-disable-line no-eval
-      "%EvalError%": $EvalError,
-      "%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array,
-      "%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array,
-      "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry,
-      "%Function%": $Function,
-      "%GeneratorFunction%": needsEval,
-      "%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array,
-      "%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array,
-      "%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array,
-      "%isFinite%": isFinite,
-      "%isNaN%": isNaN,
-      "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2,
-      "%JSON%": typeof JSON === "object" ? JSON : undefined2,
-      "%Map%": typeof Map === "undefined" ? undefined2 : Map,
-      "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()),
-      "%Math%": Math,
-      "%Number%": Number,
-      "%Object%": $Object,
-      "%Object.getOwnPropertyDescriptor%": $gOPD,
-      "%parseFloat%": parseFloat,
-      "%parseInt%": parseInt,
-      "%Promise%": typeof Promise === "undefined" ? undefined2 : Promise,
-      "%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy,
-      "%RangeError%": $RangeError,
-      "%ReferenceError%": $ReferenceError,
-      "%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect,
-      "%RegExp%": RegExp,
-      "%Set%": typeof Set === "undefined" ? undefined2 : Set,
-      "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()),
-      "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer,
-      "%String%": String,
-      "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2,
-      "%Symbol%": hasSymbols ? Symbol : undefined2,
-      "%SyntaxError%": $SyntaxError,
-      "%ThrowTypeError%": ThrowTypeError,
-      "%TypedArray%": TypedArray,
-      "%TypeError%": $TypeError,
-      "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array,
-      "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray,
-      "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array,
-      "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array,
-      "%URIError%": $URIError,
-      "%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap,
-      "%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef,
-      "%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet,
-      "%Function.prototype.call%": $call,
-      "%Function.prototype.apply%": $apply,
-      "%Object.defineProperty%": $defineProperty,
-      "%Math.abs%": abs,
-      "%Math.floor%": floor,
-      "%Math.max%": max,
-      "%Math.min%": min,
-      "%Math.pow%": pow
-    };
-    if (getProto) {
-      try {
-        null.error;
-      } catch (e) {
-        errorProto = getProto(getProto(e));
-        INTRINSICS["%Error.prototype%"] = errorProto;
-      }
-    }
-    var errorProto;
-    var doEval = function doEval2(name) {
-      var value;
-      if (name === "%AsyncFunction%") {
-        value = getEvalledConstructor("async function () {}");
-      } else if (name === "%GeneratorFunction%") {
-        value = getEvalledConstructor("function* () {}");
-      } else if (name === "%AsyncGeneratorFunction%") {
-        value = getEvalledConstructor("async function* () {}");
-      } else if (name === "%AsyncGenerator%") {
-        var fn = doEval2("%AsyncGeneratorFunction%");
-        if (fn) {
-          value = fn.prototype;
-        }
-      } else if (name === "%AsyncIteratorPrototype%") {
-        var gen = doEval2("%AsyncGenerator%");
-        if (gen && getProto) {
-          value = getProto(gen.prototype);
-        }
-      }
-      INTRINSICS[name] = value;
-      return value;
-    };
-    var LEGACY_ALIASES = {
-      __proto__: null,
-      "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"],
-      "%ArrayPrototype%": ["Array", "prototype"],
-      "%ArrayProto_entries%": ["Array", "prototype", "entries"],
-      "%ArrayProto_forEach%": ["Array", "prototype", "forEach"],
-      "%ArrayProto_keys%": ["Array", "prototype", "keys"],
-      "%ArrayProto_values%": ["Array", "prototype", "values"],
-      "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"],
-      "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"],
-      "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"],
-      "%BooleanPrototype%": ["Boolean", "prototype"],
-      "%DataViewPrototype%": ["DataView", "prototype"],
-      "%DatePrototype%": ["Date", "prototype"],
-      "%ErrorPrototype%": ["Error", "prototype"],
-      "%EvalErrorPrototype%": ["EvalError", "prototype"],
-      "%Float32ArrayPrototype%": ["Float32Array", "prototype"],
-      "%Float64ArrayPrototype%": ["Float64Array", "prototype"],
-      "%FunctionPrototype%": ["Function", "prototype"],
-      "%Generator%": ["GeneratorFunction", "prototype"],
-      "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"],
-      "%Int8ArrayPrototype%": ["Int8Array", "prototype"],
-      "%Int16ArrayPrototype%": ["Int16Array", "prototype"],
-      "%Int32ArrayPrototype%": ["Int32Array", "prototype"],
-      "%JSONParse%": ["JSON", "parse"],
-      "%JSONStringify%": ["JSON", "stringify"],
-      "%MapPrototype%": ["Map", "prototype"],
-      "%NumberPrototype%": ["Number", "prototype"],
-      "%ObjectPrototype%": ["Object", "prototype"],
-      "%ObjProto_toString%": ["Object", "prototype", "toString"],
-      "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"],
-      "%PromisePrototype%": ["Promise", "prototype"],
-      "%PromiseProto_then%": ["Promise", "prototype", "then"],
-      "%Promise_all%": ["Promise", "all"],
-      "%Promise_reject%": ["Promise", "reject"],
-      "%Promise_resolve%": ["Promise", "resolve"],
-      "%RangeErrorPrototype%": ["RangeError", "prototype"],
-      "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"],
-      "%RegExpPrototype%": ["RegExp", "prototype"],
-      "%SetPrototype%": ["Set", "prototype"],
-      "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"],
-      "%StringPrototype%": ["String", "prototype"],
-      "%SymbolPrototype%": ["Symbol", "prototype"],
-      "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"],
-      "%TypedArrayPrototype%": ["TypedArray", "prototype"],
-      "%TypeErrorPrototype%": ["TypeError", "prototype"],
-      "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"],
-      "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"],
-      "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"],
-      "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"],
-      "%URIErrorPrototype%": ["URIError", "prototype"],
-      "%WeakMapPrototype%": ["WeakMap", "prototype"],
-      "%WeakSetPrototype%": ["WeakSet", "prototype"]
-    };
-    var bind = require_function_bind();
-    var hasOwn = require_hasown();
-    var $concat = bind.call($call, Array.prototype.concat);
-    var $spliceApply = bind.call($apply, Array.prototype.splice);
-    var $replace = bind.call($call, String.prototype.replace);
-    var $strSlice = bind.call($call, String.prototype.slice);
-    var $exec = bind.call($call, RegExp.prototype.exec);
-    var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
-    var reEscapeChar = /\\(\\)?/g;
-    var stringToPath = function stringToPath2(string) {
-      var first = $strSlice(string, 0, 1);
-      var last = $strSlice(string, -1);
-      if (first === "%" && last !== "%") {
-        throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`");
-      } else if (last === "%" && first !== "%") {
-        throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`");
-      }
-      var result = [];
-      $replace(string, rePropName, function(match, number, quote, subString) {
-        result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match;
-      });
-      return result;
-    };
-    var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {
-      var intrinsicName = name;
-      var alias;
-      if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
-        alias = LEGACY_ALIASES[intrinsicName];
-        intrinsicName = "%" + alias[0] + "%";
-      }
-      if (hasOwn(INTRINSICS, intrinsicName)) {
-        var value = INTRINSICS[intrinsicName];
-        if (value === needsEval) {
-          value = doEval(intrinsicName);
-        }
-        if (typeof value === "undefined" && !allowMissing) {
-          throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!");
-        }
-        return {
-          alias,
-          name: intrinsicName,
-          value
-        };
-      }
-      throw new $SyntaxError("intrinsic " + name + " does not exist!");
-    };
-    module.exports = function GetIntrinsic(name, allowMissing) {
-      if (typeof name !== "string" || name.length === 0) {
-        throw new $TypeError("intrinsic name must be a non-empty string");
-      }
-      if (arguments.length > 1 && typeof allowMissing !== "boolean") {
-        throw new $TypeError('"allowMissing" argument must be a boolean');
-      }
-      if ($exec(/^%?[^%]*%?$/, name) === null) {
-        throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
-      }
-      var parts = stringToPath(name);
-      var intrinsicBaseName = parts.length > 0 ? parts[0] : "";
-      var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing);
-      var intrinsicRealName = intrinsic.name;
-      var value = intrinsic.value;
-      var skipFurtherCaching = false;
-      var alias = intrinsic.alias;
-      if (alias) {
-        intrinsicBaseName = alias[0];
-        $spliceApply(parts, $concat([0, 1], alias));
-      }
-      for (var i = 1, isOwn = true; i < parts.length; i += 1) {
-        var part = parts[i];
-        var first = $strSlice(part, 0, 1);
-        var last = $strSlice(part, -1);
-        if ((first === '"' || first === "'" || first === "`" || last === '"' || last === "'" || last === "`") && first !== last) {
-          throw new $SyntaxError("property names with quotes must have matching quotes");
-        }
-        if (part === "constructor" || !isOwn) {
-          skipFurtherCaching = true;
-        }
-        intrinsicBaseName += "." + part;
-        intrinsicRealName = "%" + intrinsicBaseName + "%";
-        if (hasOwn(INTRINSICS, intrinsicRealName)) {
-          value = INTRINSICS[intrinsicRealName];
-        } else if (value != null) {
-          if (!(part in value)) {
-            if (!allowMissing) {
-              throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available.");
-            }
-            return void 0;
-          }
-          if ($gOPD && i + 1 >= parts.length) {
-            var desc = $gOPD(value, part);
-            isOwn = !!desc;
-            if (isOwn && "get" in desc && !("originalValue" in desc.get)) {
-              value = desc.get;
-            } else {
-              value = value[part];
-            }
-          } else {
-            isOwn = hasOwn(value, part);
-            value = value[part];
-          }
-          if (isOwn && !skipFurtherCaching) {
-            INTRINSICS[intrinsicRealName] = value;
-          }
-        }
-      }
-      return value;
-    };
-  }
-});
-
-// node_modules/call-bound/index.js
-var require_call_bound = __commonJS({
-  "node_modules/call-bound/index.js"(exports, module) {
-    "use strict";
-    var GetIntrinsic = require_get_intrinsic();
-    var callBindBasic = require_call_bind_apply_helpers();
-    var $indexOf = callBindBasic([GetIntrinsic("%String.prototype.indexOf%")]);
-    module.exports = function callBoundIntrinsic(name, allowMissing) {
-      var intrinsic = (
-        /** @type {Parameters<typeof callBindBasic>[0][0]} */
-        GetIntrinsic(name, !!allowMissing)
-      );
-      if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) {
-        return callBindBasic([intrinsic]);
-      }
-      return intrinsic;
-    };
-  }
-});
-
-// node_modules/side-channel-map/index.js
-var require_side_channel_map = __commonJS({
-  "node_modules/side-channel-map/index.js"(exports, module) {
-    "use strict";
-    var GetIntrinsic = require_get_intrinsic();
-    var callBound = require_call_bound();
-    var inspect = require_object_inspect();
-    var $TypeError = require_type();
-    var $Map = GetIntrinsic("%Map%", true);
-    var $mapGet = callBound("Map.prototype.get", true);
-    var $mapSet = callBound("Map.prototype.set", true);
-    var $mapHas = callBound("Map.prototype.has", true);
-    var $mapDelete = callBound("Map.prototype.delete", true);
-    var $mapSize = callBound("Map.prototype.size", true);
-    module.exports = !!$Map && /** @type {Exclude<import('.'), false>} */
-    function getSideChannelMap() {
-      var $m;
-      var channel = {
-        assert: function(key) {
-          if (!channel.has(key)) {
-            throw new $TypeError("Side channel does not contain " + inspect(key));
-          }
-        },
-        "delete": function(key) {
-          if ($m) {
-            var result = $mapDelete($m, key);
-            if ($mapSize($m) === 0) {
-              $m = void 0;
-            }
-            return result;
-          }
-          return false;
-        },
-        get: function(key) {
-          if ($m) {
-            return $mapGet($m, key);
-          }
-        },
-        has: function(key) {
-          if ($m) {
-            return $mapHas($m, key);
-          }
-          return false;
-        },
-        set: function(key, value) {
-          if (!$m) {
-            $m = new $Map();
-          }
-          $mapSet($m, key, value);
-        }
-      };
-      return channel;
-    };
-  }
-});
-
-// node_modules/side-channel-weakmap/index.js
-var require_side_channel_weakmap = __commonJS({
-  "node_modules/side-channel-weakmap/index.js"(exports, module) {
-    "use strict";
-    var GetIntrinsic = require_get_intrinsic();
-    var callBound = require_call_bound();
-    var inspect = require_object_inspect();
-    var getSideChannelMap = require_side_channel_map();
-    var $TypeError = require_type();
-    var $WeakMap = GetIntrinsic("%WeakMap%", true);
-    var $weakMapGet = callBound("WeakMap.prototype.get", true);
-    var $weakMapSet = callBound("WeakMap.prototype.set", true);
-    var $weakMapHas = callBound("WeakMap.prototype.has", true);
-    var $weakMapDelete = callBound("WeakMap.prototype.delete", true);
-    module.exports = $WeakMap ? (
-      /** @type {Exclude<import('.'), false>} */
-      function getSideChannelWeakMap() {
-        var $wm;
-        var $m;
-        var channel = {
-          assert: function(key) {
-            if (!channel.has(key)) {
-              throw new $TypeError("Side channel does not contain " + inspect(key));
-            }
-          },
-          "delete": function(key) {
-            if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
-              if ($wm) {
-                return $weakMapDelete($wm, key);
-              }
-            } else if (getSideChannelMap) {
-              if ($m) {
-                return $m["delete"](key);
-              }
-            }
-            return false;
-          },
-          get: function(key) {
-            if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
-              if ($wm) {
-                return $weakMapGet($wm, key);
-              }
-            }
-            return $m && $m.get(key);
-          },
-          has: function(key) {
-            if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
-              if ($wm) {
-                return $weakMapHas($wm, key);
-              }
-            }
-            return !!$m && $m.has(key);
-          },
-          set: function(key, value) {
-            if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
-              if (!$wm) {
-                $wm = new $WeakMap();
-              }
-              $weakMapSet($wm, key, value);
-            } else if (getSideChannelMap) {
-              if (!$m) {
-                $m = getSideChannelMap();
-              }
-              $m.set(key, value);
-            }
-          }
-        };
-        return channel;
-      }
-    ) : getSideChannelMap;
-  }
-});
-
-// node_modules/side-channel/index.js
-var require_side_channel = __commonJS({
-  "node_modules/side-channel/index.js"(exports, module) {
-    "use strict";
-    var $TypeError = require_type();
-    var inspect = require_object_inspect();
-    var getSideChannelList = require_side_channel_list();
-    var getSideChannelMap = require_side_channel_map();
-    var getSideChannelWeakMap = require_side_channel_weakmap();
-    var makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;
-    module.exports = function getSideChannel() {
-      var $channelData;
-      var channel = {
-        assert: function(key) {
-          if (!channel.has(key)) {
-            throw new $TypeError("Side channel does not contain " + inspect(key));
-          }
-        },
-        "delete": function(key) {
-          return !!$channelData && $channelData["delete"](key);
-        },
-        get: function(key) {
-          return $channelData && $channelData.get(key);
-        },
-        has: function(key) {
-          return !!$channelData && $channelData.has(key);
-        },
-        set: function(key, value) {
-          if (!$channelData) {
-            $channelData = makeChannel();
-          }
-          $channelData.set(key, value);
-        }
-      };
-      return channel;
-    };
-  }
-});
-
-// node_modules/qs/lib/formats.js
-var require_formats = __commonJS({
-  "node_modules/qs/lib/formats.js"(exports, module) {
-    "use strict";
-    var replace = String.prototype.replace;
-    var percentTwenties = /%20/g;
-    var Format = {
-      RFC1738: "RFC1738",
-      RFC3986: "RFC3986"
-    };
-    module.exports = {
-      "default": Format.RFC3986,
-      formatters: {
-        RFC1738: function(value) {
-          return replace.call(value, percentTwenties, "+");
-        },
-        RFC3986: function(value) {
-          return String(value);
-        }
-      },
-      RFC1738: Format.RFC1738,
-      RFC3986: Format.RFC3986
-    };
-  }
-});
-
-// node_modules/qs/lib/utils.js
-var require_utils = __commonJS({
-  "node_modules/qs/lib/utils.js"(exports, module) {
-    "use strict";
-    var formats = require_formats();
-    var has = Object.prototype.hasOwnProperty;
-    var isArray = Array.isArray;
-    var hexTable = function() {
-      var array = [];
-      for (var i = 0; i < 256; ++i) {
-        array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase());
-      }
-      return array;
-    }();
-    var compactQueue = function compactQueue2(queue) {
-      while (queue.length > 1) {
-        var item = queue.pop();
-        var obj = item.obj[item.prop];
-        if (isArray(obj)) {
-          var compacted = [];
-          for (var j = 0; j < obj.length; ++j) {
-            if (typeof obj[j] !== "undefined") {
-              compacted.push(obj[j]);
-            }
-          }
-          item.obj[item.prop] = compacted;
-        }
-      }
-    };
-    var arrayToObject = function arrayToObject2(source, options) {
-      var obj = options && options.plainObjects ? /* @__PURE__ */ Object.create(null) : {};
-      for (var i = 0; i < source.length; ++i) {
-        if (typeof source[i] !== "undefined") {
-          obj[i] = source[i];
-        }
-      }
-      return obj;
-    };
-    var merge = function merge2(target, source, options) {
-      if (!source) {
-        return target;
-      }
-      if (typeof source !== "object") {
-        if (isArray(target)) {
-          target.push(source);
-        } else if (target && typeof target === "object") {
-          if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) {
-            target[source] = true;
-          }
-        } else {
-          return [target, source];
-        }
-        return target;
-      }
-      if (!target || typeof target !== "object") {
-        return [target].concat(source);
-      }
-      var mergeTarget = target;
-      if (isArray(target) && !isArray(source)) {
-        mergeTarget = arrayToObject(target, options);
-      }
-      if (isArray(target) && isArray(source)) {
-        source.forEach(function(item, i) {
-          if (has.call(target, i)) {
-            var targetItem = target[i];
-            if (targetItem && typeof targetItem === "object" && item && typeof item === "object") {
-              target[i] = merge2(targetItem, item, options);
-            } else {
-              target.push(item);
-            }
-          } else {
-            target[i] = item;
-          }
-        });
-        return target;
-      }
-      return Object.keys(source).reduce(function(acc, key) {
-        var value = source[key];
-        if (has.call(acc, key)) {
-          acc[key] = merge2(acc[key], value, options);
-        } else {
-          acc[key] = value;
-        }
-        return acc;
-      }, mergeTarget);
-    };
-    var assign = function assignSingleSource(target, source) {
-      return Object.keys(source).reduce(function(acc, key) {
-        acc[key] = source[key];
-        return acc;
-      }, target);
-    };
-    var decode = function(str, decoder, charset) {
-      var strWithoutPlus = str.replace(/\+/g, " ");
-      if (charset === "iso-8859-1") {
-        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
-      }
-      try {
-        return decodeURIComponent(strWithoutPlus);
-      } catch (e) {
-        return strWithoutPlus;
-      }
-    };
-    var limit = 1024;
-    var encode = function encode2(str, defaultEncoder, charset, kind, format) {
-      if (str.length === 0) {
-        return str;
-      }
-      var string = str;
-      if (typeof str === "symbol") {
-        string = Symbol.prototype.toString.call(str);
-      } else if (typeof str !== "string") {
-        string = String(str);
-      }
-      if (charset === "iso-8859-1") {
-        return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) {
-          return "%26%23" + parseInt($0.slice(2), 16) + "%3B";
-        });
-      }
-      var out = "";
-      for (var j = 0; j < string.length; j += limit) {
-        var segment = string.length >= limit ? string.slice(j, j + limit) : string;
-        var arr = [];
-        for (var i = 0; i < segment.length; ++i) {
-          var c = segment.charCodeAt(i);
-          if (c === 45 || c === 46 || c === 95 || c === 126 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || format === formats.RFC1738 && (c === 40 || c === 41)) {
-            arr[arr.length] = segment.charAt(i);
-            continue;
-          }
-          if (c < 128) {
-            arr[arr.length] = hexTable[c];
-            continue;
-          }
-          if (c < 2048) {
-            arr[arr.length] = hexTable[192 | c >> 6] + hexTable[128 | c & 63];
-            continue;
-          }
-          if (c < 55296 || c >= 57344) {
-            arr[arr.length] = hexTable[224 | c >> 12] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63];
-            continue;
-          }
-          i += 1;
-          c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023);
-          arr[arr.length] = hexTable[240 | c >> 18] + hexTable[128 | c >> 12 & 63] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63];
-        }
-        out += arr.join("");
-      }
-      return out;
-    };
-    var compact = function compact2(value) {
-      var queue = [{
-        obj: {
-          o: value
-        },
-        prop: "o"
-      }];
-      var refs = [];
-      for (var i = 0; i < queue.length; ++i) {
-        var item = queue[i];
-        var obj = item.obj[item.prop];
-        var keys = Object.keys(obj);
-        for (var j = 0; j < keys.length; ++j) {
-          var key = keys[j];
-          var val = obj[key];
-          if (typeof val === "object" && val !== null && refs.indexOf(val) === -1) {
-            queue.push({
-              obj,
-              prop: key
-            });
-            refs.push(val);
-          }
-        }
-      }
-      compactQueue(queue);
-      return value;
-    };
-    var isRegExp = function isRegExp2(obj) {
-      return Object.prototype.toString.call(obj) === "[object RegExp]";
-    };
-    var isBuffer = function isBuffer2(obj) {
-      if (!obj || typeof obj !== "object") {
-        return false;
-      }
-      return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
-    };
-    var combine = function combine2(a, b) {
-      return [].concat(a, b);
-    };
-    var maybeMap = function maybeMap2(val, fn) {
-      if (isArray(val)) {
-        var mapped = [];
-        for (var i = 0; i < val.length; i += 1) {
-          mapped.push(fn(val[i]));
-        }
-        return mapped;
-      }
-      return fn(val);
-    };
-    module.exports = {
-      arrayToObject,
-      assign,
-      combine,
-      compact,
-      decode,
-      encode,
-      isBuffer,
-      isRegExp,
-      maybeMap,
-      merge
-    };
-  }
-});
-
-// node_modules/qs/lib/stringify.js
-var require_stringify = __commonJS({
-  "node_modules/qs/lib/stringify.js"(exports, module) {
-    "use strict";
-    var getSideChannel = require_side_channel();
-    var utils = require_utils();
-    var formats = require_formats();
-    var has = Object.prototype.hasOwnProperty;
-    var arrayPrefixGenerators = {
-      brackets: function brackets(prefix) {
-        return prefix + "[]";
-      },
-      comma: "comma",
-      indices: function indices(prefix, key) {
-        return prefix + "[" + key + "]";
-      },
-      repeat: function repeat(prefix) {
-        return prefix;
-      }
-    };
-    var isArray = Array.isArray;
-    var push = Array.prototype.push;
-    var pushToArray = function(arr, valueOrArray) {
-      push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);
-    };
-    var toISO = Date.prototype.toISOString;
-    var defaultFormat = formats["default"];
-    var defaults = {
-      addQueryPrefix: false,
-      allowDots: false,
-      allowEmptyArrays: false,
-      arrayFormat: "indices",
-      charset: "utf-8",
-      charsetSentinel: false,
-      delimiter: "&",
-      encode: true,
-      encodeDotInKeys: false,
-      encoder: utils.encode,
-      encodeValuesOnly: false,
-      format: defaultFormat,
-      formatter: formats.formatters[defaultFormat],
-      // deprecated
-      indices: false,
-      serializeDate: function serializeDate(date) {
-        return toISO.call(date);
-      },
-      skipNulls: false,
-      strictNullHandling: false
-    };
-    var isNonNullishPrimitive = function isNonNullishPrimitive2(v) {
-      return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint";
-    };
-    var sentinel = {};
-    var stringify = function stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {
-      var obj = object;
-      var tmpSc = sideChannel;
-      var step = 0;
-      var findFlag = false;
-      while ((tmpSc = tmpSc.get(sentinel)) !== void 0 && !findFlag) {
-        var pos = tmpSc.get(object);
-        step += 1;
-        if (typeof pos !== "undefined") {
-          if (pos === step) {
-            throw new RangeError("Cyclic object value");
-          } else {
-            findFlag = true;
-          }
-        }
-        if (typeof tmpSc.get(sentinel) === "undefined") {
-          step = 0;
-        }
-      }
-      if (typeof filter === "function") {
-        obj = filter(prefix, obj);
-      } else if (obj instanceof Date) {
-        obj = serializeDate(obj);
-      } else if (generateArrayPrefix === "comma" && isArray(obj)) {
-        obj = utils.maybeMap(obj, function(value2) {
-          if (value2 instanceof Date) {
-            return serializeDate(value2);
-          }
-          return value2;
-        });
-      }
-      if (obj === null) {
-        if (strictNullHandling) {
-          return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, "key", format) : prefix;
-        }
-        obj = "";
-      }
-      if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {
-        if (encoder) {
-          var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, "key", format);
-          return [formatter(keyValue) + "=" + formatter(encoder(obj, defaults.encoder, charset, "value", format))];
-        }
-        return [formatter(prefix) + "=" + formatter(String(obj))];
-      }
-      var values = [];
-      if (typeof obj === "undefined") {
-        return values;
-      }
-      var objKeys;
-      if (generateArrayPrefix === "comma" && isArray(obj)) {
-        if (encodeValuesOnly && encoder) {
-          obj = utils.maybeMap(obj, encoder);
-        }
-        objKeys = [{
-          value: obj.length > 0 ? obj.join(",") || null : void 0
-        }];
-      } else if (isArray(filter)) {
-        objKeys = filter;
-      } else {
-        var keys = Object.keys(obj);
-        objKeys = sort ? keys.sort(sort) : keys;
-      }
-      var encodedPrefix = encodeDotInKeys ? prefix.replace(/\./g, "%2E") : prefix;
-      var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + "[]" : encodedPrefix;
-      if (allowEmptyArrays && isArray(obj) && obj.length === 0) {
-        return adjustedPrefix + "[]";
-      }
-      for (var j = 0; j < objKeys.length; ++j) {
-        var key = objKeys[j];
-        var value = typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj[key];
-        if (skipNulls && value === null) {
-          continue;
-        }
-        var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key;
-        var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix : adjustedPrefix + (allowDots ? "." + encodedKey : "[" + encodedKey + "]");
-        sideChannel.set(object, step);
-        var valueSideChannel = getSideChannel();
-        valueSideChannel.set(sentinel, sideChannel);
-        pushToArray(values, stringify2(value, keyPrefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));
-      }
-      return values;
-    };
-    var normalizeStringifyOptions = function normalizeStringifyOptions2(opts) {
-      if (!opts) {
-        return defaults;
-      }
-      if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") {
-        throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");
-      }
-      if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") {
-        throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");
-      }
-      if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") {
-        throw new TypeError("Encoder has to be a function.");
-      }
-      var charset = opts.charset || defaults.charset;
-      if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") {
-        throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");
-      }
-      var format = formats["default"];
-      if (typeof opts.format !== "undefined") {
-        if (!has.call(formats.formatters, opts.format)) {
-          throw new TypeError("Unknown format option provided.");
-        }
-        format = opts.format;
-      }
-      var formatter = formats.formatters[format];
-      var filter = defaults.filter;
-      if (typeof opts.filter === "function" || isArray(opts.filter)) {
-        filter = opts.filter;
-      }
-      var arrayFormat;
-      if (opts.arrayFormat in arrayPrefixGenerators) {
-        arrayFormat = opts.arrayFormat;
-      } else if ("indices" in opts) {
-        arrayFormat = opts.indices ? "indices" : "repeat";
-      } else {
-        arrayFormat = defaults.arrayFormat;
-      }
-      if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") {
-        throw new TypeError("`commaRoundTrip` must be a boolean, or absent");
-      }
-      var allowDots = typeof opts.allowDots === "undefined" ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;
-      return {
-        addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix,
-        allowDots,
-        allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,
-        arrayFormat,
-        charset,
-        charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel,
-        commaRoundTrip: opts.commaRoundTrip,
-        delimiter: typeof opts.delimiter === "undefined" ? defaults.delimiter : opts.delimiter,
-        encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode,
-        encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys,
-        encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder,
-        encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly,
-        filter,
-        format,
-        formatter,
-        serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate,
-        skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls,
-        sort: typeof opts.sort === "function" ? opts.sort : null,
-        strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling
-      };
-    };
-    module.exports = function(object, opts) {
-      var obj = object;
-      var options = normalizeStringifyOptions(opts);
-      var objKeys;
-      var filter;
-      if (typeof options.filter === "function") {
-        filter = options.filter;
-        obj = filter("", obj);
-      } else if (isArray(options.filter)) {
-        filter = options.filter;
-        objKeys = filter;
-      }
-      var keys = [];
-      if (typeof obj !== "object" || obj === null) {
-        return "";
-      }
-      var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];
-      var commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip;
-      if (!objKeys) {
-        objKeys = Object.keys(obj);
-      }
-      if (options.sort) {
-        objKeys.sort(options.sort);
-      }
-      var sideChannel = getSideChannel();
-      for (var i = 0; i < objKeys.length; ++i) {
-        var key = objKeys[i];
-        if (options.skipNulls && obj[key] === null) {
-          continue;
-        }
-        pushToArray(keys, stringify(obj[key], key, generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));
-      }
-      var joined = keys.join(options.delimiter);
-      var prefix = options.addQueryPrefix === true ? "?" : "";
-      if (options.charsetSentinel) {
-        if (options.charset === "iso-8859-1") {
-          prefix += "utf8=%26%2310003%3B&";
-        } else {
-          prefix += "utf8=%E2%9C%93&";
-        }
-      }
-      return joined.length > 0 ? prefix + joined : "";
-    };
-  }
-});
-
-// node_modules/qs/lib/parse.js
-var require_parse = __commonJS({
-  "node_modules/qs/lib/parse.js"(exports, module) {
-    "use strict";
-    var utils = require_utils();
-    var has = Object.prototype.hasOwnProperty;
-    var isArray = Array.isArray;
-    var defaults = {
-      allowDots: false,
-      allowEmptyArrays: false,
-      allowPrototypes: false,
-      allowSparse: false,
-      arrayLimit: 20,
-      charset: "utf-8",
-      charsetSentinel: false,
-      comma: false,
-      decodeDotInKeys: false,
-      decoder: utils.decode,
-      delimiter: "&",
-      depth: 5,
-      duplicates: "combine",
-      ignoreQueryPrefix: false,
-      interpretNumericEntities: false,
-      parameterLimit: 1e3,
-      parseArrays: true,
-      plainObjects: false,
-      strictDepth: false,
-      strictNullHandling: false
-    };
-    var interpretNumericEntities = function(str) {
-      return str.replace(/&#(\d+);/g, function($0, numberStr) {
-        return String.fromCharCode(parseInt(numberStr, 10));
-      });
-    };
-    var parseArrayValue = function(val, options) {
-      if (val && typeof val === "string" && options.comma && val.indexOf(",") > -1) {
-        return val.split(",");
-      }
-      return val;
-    };
-    var isoSentinel = "utf8=%26%2310003%3B";
-    var charsetSentinel = "utf8=%E2%9C%93";
-    var parseValues = function parseQueryStringValues(str, options) {
-      var obj = {
-        __proto__: null
-      };
-      var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, "") : str;
-      cleanStr = cleanStr.replace(/%5B/gi, "[").replace(/%5D/gi, "]");
-      var limit = options.parameterLimit === Infinity ? void 0 : options.parameterLimit;
-      var parts = cleanStr.split(options.delimiter, limit);
-      var skipIndex = -1;
-      var i;
-      var charset = options.charset;
-      if (options.charsetSentinel) {
-        for (i = 0; i < parts.length; ++i) {
-          if (parts[i].indexOf("utf8=") === 0) {
-            if (parts[i] === charsetSentinel) {
-              charset = "utf-8";
-            } else if (parts[i] === isoSentinel) {
-              charset = "iso-8859-1";
-            }
-            skipIndex = i;
-            i = parts.length;
-          }
-        }
-      }
-      for (i = 0; i < parts.length; ++i) {
-        if (i === skipIndex) {
-          continue;
-        }
-        var part = parts[i];
-        var bracketEqualsPos = part.indexOf("]=");
-        var pos = bracketEqualsPos === -1 ? part.indexOf("=") : bracketEqualsPos + 1;
-        var key, val;
-        if (pos === -1) {
-          key = options.decoder(part, defaults.decoder, charset, "key");
-          val = options.strictNullHandling ? null : "";
-        } else {
-          key = options.decoder(part.slice(0, pos), defaults.decoder, charset, "key");
-          val = utils.maybeMap(parseArrayValue(part.slice(pos + 1), options), function(encodedVal) {
-            return options.decoder(encodedVal, defaults.decoder, charset, "value");
-          });
-        }
-        if (val && options.interpretNumericEntities && charset === "iso-8859-1") {
-          val = interpretNumericEntities(val);
-        }
-        if (part.indexOf("[]=") > -1) {
-          val = isArray(val) ? [val] : val;
-        }
-        var existing = has.call(obj, key);
-        if (existing && options.duplicates === "combine") {
-          obj[key] = utils.combine(obj[key], val);
-        } else if (!existing || options.duplicates === "last") {
-          obj[key] = val;
-        }
-      }
-      return obj;
-    };
-    var parseObject = function(chain, val, options, valuesParsed) {
-      var leaf = valuesParsed ? val : parseArrayValue(val, options);
-      for (var i = chain.length - 1; i >= 0; --i) {
-        var obj;
-        var root = chain[i];
-        if (root === "[]" && options.parseArrays) {
-          obj = options.allowEmptyArrays && (leaf === "" || options.strictNullHandling && leaf === null) ? [] : [].concat(leaf);
-        } else {
-          obj = options.plainObjects ? /* @__PURE__ */ Object.create(null) : {};
-          var cleanRoot = root.charAt(0) === "[" && root.charAt(root.length - 1) === "]" ? root.slice(1, -1) : root;
-          var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, ".") : cleanRoot;
-          var index = parseInt(decodedRoot, 10);
-          if (!options.parseArrays && decodedRoot === "") {
-            obj = {
-              0: leaf
-            };
-          } else if (!isNaN(index) && root !== decodedRoot && String(index) === decodedRoot && index >= 0 && options.parseArrays && index <= options.arrayLimit) {
-            obj = [];
-            obj[index] = leaf;
-          } else if (decodedRoot !== "__proto__") {
-            obj[decodedRoot] = leaf;
-          }
-        }
-        leaf = obj;
-      }
-      return leaf;
-    };
-    var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {
-      if (!givenKey) {
-        return;
-      }
-      var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, "[$1]") : givenKey;
-      var brackets = /(\[[^[\]]*])/;
-      var child = /(\[[^[\]]*])/g;
-      var segment = options.depth > 0 && brackets.exec(key);
-      var parent = segment ? key.slice(0, segment.index) : key;
-      var keys = [];
-      if (parent) {
-        if (!options.plainObjects && has.call(Object.prototype, parent)) {
-          if (!options.allowPrototypes) {
-            return;
-          }
-        }
-        keys.push(parent);
-      }
-      var i = 0;
-      while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {
-        i += 1;
-        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {
-          if (!options.allowPrototypes) {
-            return;
-          }
-        }
-        keys.push(segment[1]);
-      }
-      if (segment) {
-        if (options.strictDepth === true) {
-          throw new RangeError("Input depth exceeded depth option of " + options.depth + " and strictDepth is true");
-        }
-        keys.push("[" + key.slice(segment.index) + "]");
-      }
-      return parseObject(keys, val, options, valuesParsed);
-    };
-    var normalizeParseOptions = function normalizeParseOptions2(opts) {
-      if (!opts) {
-        return defaults;
-      }
-      if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") {
-        throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");
-      }
-      if (typeof opts.decodeDotInKeys !== "undefined" && typeof opts.decodeDotInKeys !== "boolean") {
-        throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");
-      }
-      if (opts.decoder !== null && typeof opts.decoder !== "undefined" && typeof opts.decoder !== "function") {
-        throw new TypeError("Decoder has to be a function.");
-      }
-      if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") {
-        throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");
-      }
-      var charset = typeof opts.charset === "undefined" ? defaults.charset : opts.charset;
-      var duplicates = typeof opts.duplicates === "undefined" ? defaults.duplicates : opts.duplicates;
-      if (duplicates !== "combine" && duplicates !== "first" && duplicates !== "last") {
-        throw new TypeError("The duplicates option must be either combine, first, or last");
-      }
-      var allowDots = typeof opts.allowDots === "undefined" ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;
-      return {
-        allowDots,
-        allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,
-        allowPrototypes: typeof opts.allowPrototypes === "boolean" ? opts.allowPrototypes : defaults.allowPrototypes,
-        allowSparse: typeof opts.allowSparse === "boolean" ? opts.allowSparse : defaults.allowSparse,
-        arrayLimit: typeof opts.arrayLimit === "number" ? opts.arrayLimit : defaults.arrayLimit,
-        charset,
-        charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel,
-        comma: typeof opts.comma === "boolean" ? opts.comma : defaults.comma,
-        decodeDotInKeys: typeof opts.decodeDotInKeys === "boolean" ? opts.decodeDotInKeys : defaults.decodeDotInKeys,
-        decoder: typeof opts.decoder === "function" ? opts.decoder : defaults.decoder,
-        delimiter: typeof opts.delimiter === "string" || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,
-        // eslint-disable-next-line no-implicit-coercion, no-extra-parens
-        depth: typeof opts.depth === "number" || opts.depth === false ? +opts.depth : defaults.depth,
-        duplicates,
-        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,
-        interpretNumericEntities: typeof opts.interpretNumericEntities === "boolean" ? opts.interpretNumericEntities : defaults.interpretNumericEntities,
-        parameterLimit: typeof opts.parameterLimit === "number" ? opts.parameterLimit : defaults.parameterLimit,
-        parseArrays: opts.parseArrays !== false,
-        plainObjects: typeof opts.plainObjects === "boolean" ? opts.plainObjects : defaults.plainObjects,
-        strictDepth: typeof opts.strictDepth === "boolean" ? !!opts.strictDepth : defaults.strictDepth,
-        strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling
-      };
-    };
-    module.exports = function(str, opts) {
-      var options = normalizeParseOptions(opts);
-      if (str === "" || str === null || typeof str === "undefined") {
-        return options.plainObjects ? /* @__PURE__ */ Object.create(null) : {};
-      }
-      var tempObj = typeof str === "string" ? parseValues(str, options) : str;
-      var obj = options.plainObjects ? /* @__PURE__ */ Object.create(null) : {};
-      var keys = Object.keys(tempObj);
-      for (var i = 0; i < keys.length; ++i) {
-        var key = keys[i];
-        var newObj = parseKeys(key, tempObj[key], options, typeof str === "string");
-        obj = utils.merge(obj, newObj, options);
-      }
-      if (options.allowSparse === true) {
-        return obj;
-      }
-      return utils.compact(obj);
-    };
-  }
-});
-
-// node_modules/qs/lib/index.js
-var require_lib2 = __commonJS({
-  "node_modules/qs/lib/index.js"(exports, module) {
-    "use strict";
-    var stringify = require_stringify();
-    var parse = require_parse();
-    var formats = require_formats();
-    module.exports = {
-      formats,
-      parse,
-      stringify
-    };
-  }
-});
-
-// node_modules/body-parser/lib/types/urlencoded.js
-var require_urlencoded = __commonJS({
-  "node_modules/body-parser/lib/types/urlencoded.js"(exports, module) {
-    "use strict";
-    var bytes = require_bytes();
-    var contentType = require_content_type();
-    var createError = require_http_errors();
-    var debug = require_src()("body-parser:urlencoded");
-    var deprecate = require_depd()("body-parser");
-    var read = require_read();
-    var typeis = require_type_is();
-    module.exports = urlencoded;
-    var parsers = /* @__PURE__ */ Object.create(null);
-    function urlencoded(options) {
-      var opts = options || {};
-      if (opts.extended === void 0) {
-        deprecate("undefined extended: provide extended option");
-      }
-      var extended = opts.extended !== false;
-      var inflate = opts.inflate !== false;
-      var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit;
-      var type = opts.type || "application/x-www-form-urlencoded";
-      var verify = opts.verify || false;
-      var depth = typeof opts.depth !== "number" ? Number(opts.depth || 32) : opts.depth;
-      if (verify !== false && typeof verify !== "function") {
-        throw new TypeError("option verify must be function");
-      }
-      var queryparse = extended ? extendedparser(opts) : simpleparser(opts);
-      var shouldParse = typeof type !== "function" ? typeChecker(type) : type;
-      function parse(body) {
-        return body.length ? queryparse(body) : {};
-      }
-      return function urlencodedParser(req, res, next) {
-        if (req._body) {
-          debug("body already parsed");
-          next();
-          return;
-        }
-        req.body = req.body || {};
-        if (!typeis.hasBody(req)) {
-          debug("skip empty body");
-          next();
-          return;
-        }
-        debug("content-type %j", req.headers["content-type"]);
-        if (!shouldParse(req)) {
-          debug("skip parsing");
-          next();
-          return;
-        }
-        var charset = getCharset(req) || "utf-8";
-        if (charset !== "utf-8") {
-          debug("invalid charset");
-          next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
-            charset,
-            type: "charset.unsupported"
-          }));
-          return;
-        }
-        read(req, res, next, parse, debug, {
-          debug,
-          encoding: charset,
-          inflate,
-          limit,
-          verify,
-          depth
-        });
-      };
-    }
-    function extendedparser(options) {
-      var parameterLimit = options.parameterLimit !== void 0 ? options.parameterLimit : 1e3;
-      var depth = typeof options.depth !== "number" ? Number(options.depth || 32) : options.depth;
-      var parse = parser("qs");
-      if (isNaN(parameterLimit) || parameterLimit < 1) {
-        throw new TypeError("option parameterLimit must be a positive number");
-      }
-      if (isNaN(depth) || depth < 0) {
-        throw new TypeError("option depth must be a zero or a positive number");
-      }
-      if (isFinite(parameterLimit)) {
-        parameterLimit = parameterLimit | 0;
-      }
-      return function queryparse(body) {
-        var paramCount = parameterCount(body, parameterLimit);
-        if (paramCount === void 0) {
-          debug("too many parameters");
-          throw createError(413, "too many parameters", {
-            type: "parameters.too.many"
-          });
-        }
-        var arrayLimit = Math.max(100, paramCount);
-        debug("parse extended urlencoding");
-        try {
-          return parse(body, {
-            allowPrototypes: true,
-            arrayLimit,
-            depth,
-            strictDepth: true,
-            parameterLimit
-          });
-        } catch (err) {
-          if (err instanceof RangeError) {
-            throw createError(400, "The input exceeded the depth", {
-              type: "querystring.parse.rangeError"
-            });
-          } else {
-            throw err;
-          }
-        }
-      };
-    }
-    function getCharset(req) {
-      try {
-        return (contentType.parse(req).parameters.charset || "").toLowerCase();
-      } catch (e) {
-        return void 0;
-      }
-    }
-    function parameterCount(body, limit) {
-      var count = 0;
-      var index = 0;
-      while ((index = body.indexOf("&", index)) !== -1) {
-        count++;
-        index++;
-        if (count === limit) {
-          return void 0;
-        }
-      }
-      return count;
-    }
-    function parser(name) {
-      var mod = parsers[name];
-      if (mod !== void 0) {
-        return mod.parse;
-      }
-      switch (name) {
-        case "qs":
-          mod = require_lib2();
-          break;
-        case "querystring":
-          mod = __require("querystring");
-          break;
-      }
-      parsers[name] = mod;
-      return mod.parse;
-    }
-    function simpleparser(options) {
-      var parameterLimit = options.parameterLimit !== void 0 ? options.parameterLimit : 1e3;
-      var parse = parser("querystring");
-      if (isNaN(parameterLimit) || parameterLimit < 1) {
-        throw new TypeError("option parameterLimit must be a positive number");
-      }
-      if (isFinite(parameterLimit)) {
-        parameterLimit = parameterLimit | 0;
-      }
-      return function queryparse(body) {
-        var paramCount = parameterCount(body, parameterLimit);
-        if (paramCount === void 0) {
-          debug("too many parameters");
-          throw createError(413, "too many parameters", {
-            type: "parameters.too.many"
-          });
-        }
-        debug("parse urlencoding");
-        return parse(body, void 0, void 0, {
-          maxKeys: parameterLimit
-        });
-      };
-    }
-    function typeChecker(type) {
-      return function checkType(req) {
-        return Boolean(typeis(req, type));
-      };
-    }
-  }
-});
-
-// node_modules/body-parser/index.js
-var require_body_parser = __commonJS({
-  "node_modules/body-parser/index.js"(exports, module) {
-    "use strict";
-    var deprecate = require_depd()("body-parser");
-    var parsers = /* @__PURE__ */ Object.create(null);
-    exports = module.exports = deprecate.function(bodyParser, "bodyParser: use individual json/urlencoded middlewares");
-    Object.defineProperty(exports, "json", {
-      configurable: true,
-      enumerable: true,
-      get: createParserGetter("json")
-    });
-    Object.defineProperty(exports, "raw", {
-      configurable: true,
-      enumerable: true,
-      get: createParserGetter("raw")
-    });
-    Object.defineProperty(exports, "text", {
-      configurable: true,
-      enumerable: true,
-      get: createParserGetter("text")
-    });
-    Object.defineProperty(exports, "urlencoded", {
-      configurable: true,
-      enumerable: true,
-      get: createParserGetter("urlencoded")
-    });
-    function bodyParser(options) {
-      var opts = Object.create(options || null, {
-        type: {
-          configurable: true,
-          enumerable: true,
-          value: void 0,
-          writable: true
-        }
-      });
-      var _urlencoded = exports.urlencoded(opts);
-      var _json = exports.json(opts);
-      return function bodyParser2(req, res, next) {
-        _json(req, res, function(err) {
-          if (err) return next(err);
-          _urlencoded(req, res, next);
-        });
-      };
-    }
-    function createParserGetter(name) {
-      return function get() {
-        return loadParser(name);
-      };
-    }
-    function loadParser(parserName) {
-      var parser = parsers[parserName];
-      if (parser !== void 0) {
-        return parser;
-      }
-      switch (parserName) {
-        case "json":
-          parser = require_json();
-          break;
-        case "raw":
-          parser = require_raw();
-          break;
-        case "text":
-          parser = require_text();
-          break;
-        case "urlencoded":
-          parser = require_urlencoded();
-          break;
-      }
-      return parsers[parserName] = parser;
-    }
-  }
-});
-
-// node_modules/merge-descriptors/index.js
-var require_merge_descriptors = __commonJS({
-  "node_modules/merge-descriptors/index.js"(exports, module) {
-    "use strict";
-    module.exports = merge;
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-    function merge(dest, src, redefine) {
-      if (!dest) {
-        throw new TypeError("argument dest is required");
-      }
-      if (!src) {
-        throw new TypeError("argument src is required");
-      }
-      if (redefine === void 0) {
-        redefine = true;
-      }
-      Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {
-        if (!redefine && hasOwnProperty.call(dest, name)) {
-          return;
-        }
-        var descriptor = Object.getOwnPropertyDescriptor(src, name);
-        Object.defineProperty(dest, name, descriptor);
-      });
-      return dest;
-    }
-  }
-});
-
-// node_modules/finalhandler/node_modules/ms/index.js
-var require_ms2 = __commonJS({
-  "node_modules/finalhandler/node_modules/ms/index.js"(exports, module) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var y = d * 365.25;
-    module.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isNaN(val) === false) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      if (ms >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (ms >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (ms >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (ms >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms";
-    }
-    function plural(ms, n, name) {
-      if (ms < n) {
-        return;
-      }
-      if (ms < n * 1.5) {
-        return Math.floor(ms / n) + " " + name;
-      }
-      return Math.ceil(ms / n) + " " + name + "s";
-    }
-  }
-});
-
-// node_modules/finalhandler/node_modules/debug/src/debug.js
-var require_debug2 = __commonJS({
-  "node_modules/finalhandler/node_modules/debug/src/debug.js"(exports, module) {
-    exports = module.exports = createDebug.debug = createDebug["default"] = createDebug;
-    exports.coerce = coerce;
-    exports.disable = disable;
-    exports.enable = enable;
-    exports.enabled = enabled;
-    exports.humanize = require_ms2();
-    exports.names = [];
-    exports.skips = [];
-    exports.formatters = {};
-    var prevTime;
-    function selectColor(namespace) {
-      var hash = 0, i;
-      for (i in namespace) {
-        hash = (hash << 5) - hash + namespace.charCodeAt(i);
-        hash |= 0;
-      }
-      return exports.colors[Math.abs(hash) % exports.colors.length];
-    }
-    function createDebug(namespace) {
-      function debug() {
-        if (!debug.enabled) return;
-        var self = debug;
-        var curr = +/* @__PURE__ */ new Date();
-        var ms = curr - (prevTime || curr);
-        self.diff = ms;
-        self.prev = prevTime;
-        self.curr = curr;
-        prevTime = curr;
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        args[0] = exports.coerce(args[0]);
-        if ("string" !== typeof args[0]) {
-          args.unshift("%O");
-        }
-        var index = 0;
-        args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
-          if (match === "%%") return match;
-          index++;
-          var formatter = exports.formatters[format];
-          if ("function" === typeof formatter) {
-            var val = args[index];
-            match = formatter.call(self, val);
-            args.splice(index, 1);
-            index--;
-          }
-          return match;
-        });
-        exports.formatArgs.call(self, args);
-        var logFn = debug.log || exports.log || console.log.bind(console);
-        logFn.apply(self, args);
-      }
-      debug.namespace = namespace;
-      debug.enabled = exports.enabled(namespace);
-      debug.useColors = exports.useColors();
-      debug.color = selectColor(namespace);
-      if ("function" === typeof exports.init) {
-        exports.init(debug);
-      }
-      return debug;
-    }
-    function enable(namespaces) {
-      exports.save(namespaces);
-      exports.names = [];
-      exports.skips = [];
-      var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
-      var len = split.length;
-      for (var i = 0; i < len; i++) {
-        if (!split[i]) continue;
-        namespaces = split[i].replace(/\*/g, ".*?");
-        if (namespaces[0] === "-") {
-          exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$"));
-        } else {
-          exports.names.push(new RegExp("^" + namespaces + "$"));
-        }
-      }
-    }
-    function disable() {
-      exports.enable("");
-    }
-    function enabled(name) {
-      var i, len;
-      for (i = 0, len = exports.skips.length; i < len; i++) {
-        if (exports.skips[i].test(name)) {
-          return false;
-        }
-      }
-      for (i = 0, len = exports.names.length; i < len; i++) {
-        if (exports.names[i].test(name)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function coerce(val) {
-      if (val instanceof Error) return val.stack || val.message;
-      return val;
-    }
-  }
-});
-
-// node_modules/finalhandler/node_modules/debug/src/browser.js
-var require_browser2 = __commonJS({
-  "node_modules/finalhandler/node_modules/debug/src/browser.js"(exports, module) {
-    exports = module.exports = require_debug2();
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local : localstorage();
-    exports.colors = ["lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson"];
-    function useColors() {
-      if (typeof window !== "undefined" && window.process && window.process.type === "renderer") {
-        return true;
-      }
-      return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773
-      typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31?
-      // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-    }
-    exports.formatters.j = function(v) {
-      try {
-        return JSON.stringify(v);
-      } catch (err) {
-        return "[UnexpectedJSONParseError]: " + err.message;
-      }
-    };
-    function formatArgs(args) {
-      var useColors2 = this.useColors;
-      args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff);
-      if (!useColors2) return;
-      var c = "color: " + this.color;
-      args.splice(1, 0, c, "color: inherit");
-      var index = 0;
-      var lastC = 0;
-      args[0].replace(/%[a-zA-Z%]/g, function(match) {
-        if ("%%" === match) return;
-        index++;
-        if ("%c" === match) {
-          lastC = index;
-        }
-      });
-      args.splice(lastC, 0, c);
-    }
-    function log() {
-      return "object" === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);
-    }
-    function save(namespaces) {
-      try {
-        if (null == namespaces) {
-          exports.storage.removeItem("debug");
-        } else {
-          exports.storage.debug = namespaces;
-        }
-      } catch (e) {
-      }
-    }
-    function load() {
-      var r;
-      try {
-        r = exports.storage.debug;
-      } catch (e) {
-      }
-      if (!r && typeof process !== "undefined" && "env" in process) {
-        r = process.env.DEBUG;
-      }
-      return r;
-    }
-    exports.enable(load());
-    function localstorage() {
-      try {
-        return window.localStorage;
-      } catch (e) {
-      }
-    }
-  }
-});
-
-// node_modules/finalhandler/node_modules/debug/src/node.js
-var require_node2 = __commonJS({
-  "node_modules/finalhandler/node_modules/debug/src/node.js"(exports, module) {
-    var tty = __require("tty");
-    var util = __require("util");
-    exports = module.exports = require_debug2();
-    exports.init = init;
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.colors = [6, 2, 3, 4, 5, 1];
-    exports.inspectOpts = Object.keys(process.env).filter(function(key) {
-      return /^debug_/i.test(key);
-    }).reduce(function(obj, key) {
-      var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) {
-        return k.toUpperCase();
-      });
-      var val = process.env[key];
-      if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
-      else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
-      else if (val === "null") val = null;
-      else val = Number(val);
-      obj[prop] = val;
-      return obj;
-    }, {});
-    var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
-    if (1 !== fd && 2 !== fd) {
-      util.deprecate(function() {
-      }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
-    }
-    var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);
-    function useColors() {
-      return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);
-    }
-    exports.formatters.o = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts).split("\n").map(function(str) {
-        return str.trim();
-      }).join(" ");
-    };
-    exports.formatters.O = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts);
-    };
-    function formatArgs(args) {
-      var name = this.namespace;
-      var useColors2 = this.useColors;
-      if (useColors2) {
-        var c = this.color;
-        var prefix = "  \x1B[3" + c + ";1m" + name + " \x1B[0m";
-        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
-        args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m");
-      } else {
-        args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0];
-      }
-    }
-    function log() {
-      return stream.write(util.format.apply(util, arguments) + "\n");
-    }
-    function save(namespaces) {
-      if (null == namespaces) {
-        delete process.env.DEBUG;
-      } else {
-        process.env.DEBUG = namespaces;
-      }
-    }
-    function load() {
-      return process.env.DEBUG;
-    }
-    function createWritableStdioStream(fd2) {
-      var stream2;
-      var tty_wrap = process.binding("tty_wrap");
-      switch (tty_wrap.guessHandleType(fd2)) {
-        case "TTY":
-          stream2 = new tty.WriteStream(fd2);
-          stream2._type = "tty";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        case "FILE":
-          var fs = __require("fs");
-          stream2 = new fs.SyncWriteStream(fd2, {
-            autoClose: false
-          });
-          stream2._type = "fs";
-          break;
-        case "PIPE":
-        case "TCP":
-          var net = __require("net");
-          stream2 = new net.Socket({
-            fd: fd2,
-            readable: false,
-            writable: true
-          });
-          stream2.readable = false;
-          stream2.read = null;
-          stream2._type = "pipe";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        default:
-          throw new Error("Implement me. Unknown stream file type!");
-      }
-      stream2.fd = fd2;
-      stream2._isStdio = true;
-      return stream2;
-    }
-    function init(debug) {
-      debug.inspectOpts = {};
-      var keys = Object.keys(exports.inspectOpts);
-      for (var i = 0; i < keys.length; i++) {
-        debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
-      }
-    }
-    exports.enable(load());
-  }
-});
-
-// node_modules/finalhandler/node_modules/debug/src/index.js
-var require_src2 = __commonJS({
-  "node_modules/finalhandler/node_modules/debug/src/index.js"(exports, module) {
-    if (typeof process !== "undefined" && process.type === "renderer") {
-      module.exports = require_browser2();
-    } else {
-      module.exports = require_node2();
-    }
-  }
-});
-
-// node_modules/encodeurl/index.js
-var require_encodeurl = __commonJS({
-  "node_modules/encodeurl/index.js"(exports, module) {
-    "use strict";
-    module.exports = encodeUrl;
-    var ENCODE_CHARS_REGEXP = /(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;
-    var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;
-    var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1�$2";
-    function encodeUrl(url) {
-      return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI);
-    }
-  }
-});
-
-// node_modules/escape-html/index.js
-var require_escape_html = __commonJS({
-  "node_modules/escape-html/index.js"(exports, module) {
-    "use strict";
-    var matchHtmlRegExp = /["'&<>]/;
-    module.exports = escapeHtml;
-    function escapeHtml(string) {
-      var str = "" + string;
-      var match = matchHtmlRegExp.exec(str);
-      if (!match) {
-        return str;
-      }
-      var escape2;
-      var html = "";
-      var index = 0;
-      var lastIndex = 0;
-      for (index = match.index; index < str.length; index++) {
-        switch (str.charCodeAt(index)) {
-          case 34:
-            escape2 = "&quot;";
-            break;
-          case 38:
-            escape2 = "&amp;";
-            break;
-          case 39:
-            escape2 = "&#39;";
-            break;
-          case 60:
-            escape2 = "&lt;";
-            break;
-          case 62:
-            escape2 = "&gt;";
-            break;
-          default:
-            continue;
-        }
-        if (lastIndex !== index) {
-          html += str.substring(lastIndex, index);
-        }
-        lastIndex = index + 1;
-        html += escape2;
-      }
-      return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
-    }
-  }
-});
-
-// node_modules/parseurl/index.js
-var require_parseurl = __commonJS({
-  "node_modules/parseurl/index.js"(exports, module) {
-    "use strict";
-    var url = __require("url");
-    var parse = url.parse;
-    var Url = url.Url;
-    module.exports = parseurl;
-    module.exports.original = originalurl;
-    function parseurl(req) {
-      var url2 = req.url;
-      if (url2 === void 0) {
-        return void 0;
-      }
-      var parsed = req._parsedUrl;
-      if (fresh(url2, parsed)) {
-        return parsed;
-      }
-      parsed = fastparse(url2);
-      parsed._raw = url2;
-      return req._parsedUrl = parsed;
-    }
-    function originalurl(req) {
-      var url2 = req.originalUrl;
-      if (typeof url2 !== "string") {
-        return parseurl(req);
-      }
-      var parsed = req._parsedOriginalUrl;
-      if (fresh(url2, parsed)) {
-        return parsed;
-      }
-      parsed = fastparse(url2);
-      parsed._raw = url2;
-      return req._parsedOriginalUrl = parsed;
-    }
-    function fastparse(str) {
-      if (typeof str !== "string" || str.charCodeAt(0) !== 47) {
-        return parse(str);
-      }
-      var pathname = str;
-      var query = null;
-      var search = null;
-      for (var i = 1; i < str.length; i++) {
-        switch (str.charCodeAt(i)) {
-          case 63:
-            if (search === null) {
-              pathname = str.substring(0, i);
-              query = str.substring(i + 1);
-              search = str.substring(i);
-            }
-            break;
-          case 9:
-          case 10:
-          case 12:
-          case 13:
-          case 32:
-          case 35:
-          case 160:
-          case 65279:
-            return parse(str);
-        }
-      }
-      var url2 = Url !== void 0 ? new Url() : {};
-      url2.path = str;
-      url2.href = str;
-      url2.pathname = pathname;
-      if (search !== null) {
-        url2.query = query;
-        url2.search = search;
-      }
-      return url2;
-    }
-    function fresh(url2, parsedUrl) {
-      return typeof parsedUrl === "object" && parsedUrl !== null && (Url === void 0 || parsedUrl instanceof Url) && parsedUrl._raw === url2;
-    }
-  }
-});
-
-// node_modules/finalhandler/index.js
-var require_finalhandler = __commonJS({
-  "node_modules/finalhandler/index.js"(exports, module) {
-    "use strict";
-    var debug = require_src2()("finalhandler");
-    var encodeUrl = require_encodeurl();
-    var escapeHtml = require_escape_html();
-    var onFinished = require_on_finished();
-    var parseUrl = require_parseurl();
-    var statuses = require_statuses();
-    var unpipe = require_unpipe();
-    var DOUBLE_SPACE_REGEXP = /\x20{2}/g;
-    var NEWLINE_REGEXP = /\n/g;
-    var defer = typeof setImmediate === "function" ? setImmediate : function(fn) {
-      process.nextTick(fn.bind.apply(fn, arguments));
-    };
-    var isFinished = onFinished.isFinished;
-    function createHtmlDocument(message) {
-      var body = escapeHtml(message).replace(NEWLINE_REGEXP, "<br>").replace(DOUBLE_SPACE_REGEXP, " &nbsp;");
-      return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>Error</title>\n</head>\n<body>\n<pre>' + body + "</pre>\n</body>\n</html>\n";
-    }
-    module.exports = finalhandler;
-    function finalhandler(req, res, options) {
-      var opts = options || {};
-      var env = opts.env || process.env.NODE_ENV || "development";
-      var onerror = opts.onerror;
-      return function(err) {
-        var headers;
-        var msg;
-        var status;
-        if (!err && headersSent(res)) {
-          debug("cannot 404 after headers sent");
-          return;
-        }
-        if (err) {
-          status = getErrorStatusCode(err);
-          if (status === void 0) {
-            status = getResponseStatusCode(res);
-          } else {
-            headers = getErrorHeaders(err);
-          }
-          msg = getErrorMessage(err, status, env);
-        } else {
-          status = 404;
-          msg = "Cannot " + req.method + " " + encodeUrl(getResourceName(req));
-        }
-        debug("default %s", status);
-        if (err && onerror) {
-          defer(onerror, err, req, res);
-        }
-        if (headersSent(res)) {
-          debug("cannot %d after headers sent", status);
-          if (req.socket) {
-            req.socket.destroy();
-          }
-          return;
-        }
-        send(req, res, status, headers, msg);
-      };
-    }
-    function getErrorHeaders(err) {
-      if (!err.headers || typeof err.headers !== "object") {
-        return void 0;
-      }
-      var headers = /* @__PURE__ */ Object.create(null);
-      var keys = Object.keys(err.headers);
-      for (var i = 0; i < keys.length; i++) {
-        var key = keys[i];
-        headers[key] = err.headers[key];
-      }
-      return headers;
-    }
-    function getErrorMessage(err, status, env) {
-      var msg;
-      if (env !== "production") {
-        msg = err.stack;
-        if (!msg && typeof err.toString === "function") {
-          msg = err.toString();
-        }
-      }
-      return msg || statuses.message[status];
-    }
-    function getErrorStatusCode(err) {
-      if (typeof err.status === "number" && err.status >= 400 && err.status < 600) {
-        return err.status;
-      }
-      if (typeof err.statusCode === "number" && err.statusCode >= 400 && err.statusCode < 600) {
-        return err.statusCode;
-      }
-      return void 0;
-    }
-    function getResourceName(req) {
-      try {
-        return parseUrl.original(req).pathname;
-      } catch (e) {
-        return "resource";
-      }
-    }
-    function getResponseStatusCode(res) {
-      var status = res.statusCode;
-      if (typeof status !== "number" || status < 400 || status > 599) {
-        status = 500;
-      }
-      return status;
-    }
-    function headersSent(res) {
-      return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent;
-    }
-    function send(req, res, status, headers, message) {
-      function write() {
-        var body = createHtmlDocument(message);
-        res.statusCode = status;
-        if (req.httpVersionMajor < 2) {
-          res.statusMessage = statuses.message[status];
-        }
-        res.removeHeader("Content-Encoding");
-        res.removeHeader("Content-Language");
-        res.removeHeader("Content-Range");
-        setHeaders(res, headers);
-        res.setHeader("Content-Security-Policy", "default-src 'none'");
-        res.setHeader("X-Content-Type-Options", "nosniff");
-        res.setHeader("Content-Type", "text/html; charset=utf-8");
-        res.setHeader("Content-Length", Buffer.byteLength(body, "utf8"));
-        if (req.method === "HEAD") {
-          res.end();
-          return;
-        }
-        res.end(body, "utf8");
-      }
-      if (isFinished(req)) {
-        write();
-        return;
-      }
-      unpipe(req);
-      onFinished(req, write);
-      req.resume();
-    }
-    function setHeaders(res, headers) {
-      if (!headers) {
-        return;
-      }
-      var keys = Object.keys(headers);
-      for (var i = 0; i < keys.length; i++) {
-        var key = keys[i];
-        res.setHeader(key, headers[key]);
-      }
-    }
-  }
-});
-
-// node_modules/express/node_modules/ms/index.js
-var require_ms3 = __commonJS({
-  "node_modules/express/node_modules/ms/index.js"(exports, module) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var y = d * 365.25;
-    module.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isNaN(val) === false) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      if (ms >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (ms >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (ms >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (ms >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms";
-    }
-    function plural(ms, n, name) {
-      if (ms < n) {
-        return;
-      }
-      if (ms < n * 1.5) {
-        return Math.floor(ms / n) + " " + name;
-      }
-      return Math.ceil(ms / n) + " " + name + "s";
-    }
-  }
-});
-
-// node_modules/express/node_modules/debug/src/debug.js
-var require_debug3 = __commonJS({
-  "node_modules/express/node_modules/debug/src/debug.js"(exports, module) {
-    exports = module.exports = createDebug.debug = createDebug["default"] = createDebug;
-    exports.coerce = coerce;
-    exports.disable = disable;
-    exports.enable = enable;
-    exports.enabled = enabled;
-    exports.humanize = require_ms3();
-    exports.names = [];
-    exports.skips = [];
-    exports.formatters = {};
-    var prevTime;
-    function selectColor(namespace) {
-      var hash = 0, i;
-      for (i in namespace) {
-        hash = (hash << 5) - hash + namespace.charCodeAt(i);
-        hash |= 0;
-      }
-      return exports.colors[Math.abs(hash) % exports.colors.length];
-    }
-    function createDebug(namespace) {
-      function debug() {
-        if (!debug.enabled) return;
-        var self = debug;
-        var curr = +/* @__PURE__ */ new Date();
-        var ms = curr - (prevTime || curr);
-        self.diff = ms;
-        self.prev = prevTime;
-        self.curr = curr;
-        prevTime = curr;
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        args[0] = exports.coerce(args[0]);
-        if ("string" !== typeof args[0]) {
-          args.unshift("%O");
-        }
-        var index = 0;
-        args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
-          if (match === "%%") return match;
-          index++;
-          var formatter = exports.formatters[format];
-          if ("function" === typeof formatter) {
-            var val = args[index];
-            match = formatter.call(self, val);
-            args.splice(index, 1);
-            index--;
-          }
-          return match;
-        });
-        exports.formatArgs.call(self, args);
-        var logFn = debug.log || exports.log || console.log.bind(console);
-        logFn.apply(self, args);
-      }
-      debug.namespace = namespace;
-      debug.enabled = exports.enabled(namespace);
-      debug.useColors = exports.useColors();
-      debug.color = selectColor(namespace);
-      if ("function" === typeof exports.init) {
-        exports.init(debug);
-      }
-      return debug;
-    }
-    function enable(namespaces) {
-      exports.save(namespaces);
-      exports.names = [];
-      exports.skips = [];
-      var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
-      var len = split.length;
-      for (var i = 0; i < len; i++) {
-        if (!split[i]) continue;
-        namespaces = split[i].replace(/\*/g, ".*?");
-        if (namespaces[0] === "-") {
-          exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$"));
-        } else {
-          exports.names.push(new RegExp("^" + namespaces + "$"));
-        }
-      }
-    }
-    function disable() {
-      exports.enable("");
-    }
-    function enabled(name) {
-      var i, len;
-      for (i = 0, len = exports.skips.length; i < len; i++) {
-        if (exports.skips[i].test(name)) {
-          return false;
-        }
-      }
-      for (i = 0, len = exports.names.length; i < len; i++) {
-        if (exports.names[i].test(name)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function coerce(val) {
-      if (val instanceof Error) return val.stack || val.message;
-      return val;
-    }
-  }
-});
-
-// node_modules/express/node_modules/debug/src/browser.js
-var require_browser3 = __commonJS({
-  "node_modules/express/node_modules/debug/src/browser.js"(exports, module) {
-    exports = module.exports = require_debug3();
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local : localstorage();
-    exports.colors = ["lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson"];
-    function useColors() {
-      if (typeof window !== "undefined" && window.process && window.process.type === "renderer") {
-        return true;
-      }
-      return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773
-      typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31?
-      // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-    }
-    exports.formatters.j = function(v) {
-      try {
-        return JSON.stringify(v);
-      } catch (err) {
-        return "[UnexpectedJSONParseError]: " + err.message;
-      }
-    };
-    function formatArgs(args) {
-      var useColors2 = this.useColors;
-      args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff);
-      if (!useColors2) return;
-      var c = "color: " + this.color;
-      args.splice(1, 0, c, "color: inherit");
-      var index = 0;
-      var lastC = 0;
-      args[0].replace(/%[a-zA-Z%]/g, function(match) {
-        if ("%%" === match) return;
-        index++;
-        if ("%c" === match) {
-          lastC = index;
-        }
-      });
-      args.splice(lastC, 0, c);
-    }
-    function log() {
-      return "object" === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);
-    }
-    function save(namespaces) {
-      try {
-        if (null == namespaces) {
-          exports.storage.removeItem("debug");
-        } else {
-          exports.storage.debug = namespaces;
-        }
-      } catch (e) {
-      }
-    }
-    function load() {
-      var r;
-      try {
-        r = exports.storage.debug;
-      } catch (e) {
-      }
-      if (!r && typeof process !== "undefined" && "env" in process) {
-        r = process.env.DEBUG;
-      }
-      return r;
-    }
-    exports.enable(load());
-    function localstorage() {
-      try {
-        return window.localStorage;
-      } catch (e) {
-      }
-    }
-  }
-});
-
-// node_modules/express/node_modules/debug/src/node.js
-var require_node3 = __commonJS({
-  "node_modules/express/node_modules/debug/src/node.js"(exports, module) {
-    var tty = __require("tty");
-    var util = __require("util");
-    exports = module.exports = require_debug3();
-    exports.init = init;
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.colors = [6, 2, 3, 4, 5, 1];
-    exports.inspectOpts = Object.keys(process.env).filter(function(key) {
-      return /^debug_/i.test(key);
-    }).reduce(function(obj, key) {
-      var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) {
-        return k.toUpperCase();
-      });
-      var val = process.env[key];
-      if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
-      else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
-      else if (val === "null") val = null;
-      else val = Number(val);
-      obj[prop] = val;
-      return obj;
-    }, {});
-    var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
-    if (1 !== fd && 2 !== fd) {
-      util.deprecate(function() {
-      }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
-    }
-    var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);
-    function useColors() {
-      return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);
-    }
-    exports.formatters.o = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts).split("\n").map(function(str) {
-        return str.trim();
-      }).join(" ");
-    };
-    exports.formatters.O = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts);
-    };
-    function formatArgs(args) {
-      var name = this.namespace;
-      var useColors2 = this.useColors;
-      if (useColors2) {
-        var c = this.color;
-        var prefix = "  \x1B[3" + c + ";1m" + name + " \x1B[0m";
-        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
-        args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m");
-      } else {
-        args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0];
-      }
-    }
-    function log() {
-      return stream.write(util.format.apply(util, arguments) + "\n");
-    }
-    function save(namespaces) {
-      if (null == namespaces) {
-        delete process.env.DEBUG;
-      } else {
-        process.env.DEBUG = namespaces;
-      }
-    }
-    function load() {
-      return process.env.DEBUG;
-    }
-    function createWritableStdioStream(fd2) {
-      var stream2;
-      var tty_wrap = process.binding("tty_wrap");
-      switch (tty_wrap.guessHandleType(fd2)) {
-        case "TTY":
-          stream2 = new tty.WriteStream(fd2);
-          stream2._type = "tty";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        case "FILE":
-          var fs = __require("fs");
-          stream2 = new fs.SyncWriteStream(fd2, {
-            autoClose: false
-          });
-          stream2._type = "fs";
-          break;
-        case "PIPE":
-        case "TCP":
-          var net = __require("net");
-          stream2 = new net.Socket({
-            fd: fd2,
-            readable: false,
-            writable: true
-          });
-          stream2.readable = false;
-          stream2.read = null;
-          stream2._type = "pipe";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        default:
-          throw new Error("Implement me. Unknown stream file type!");
-      }
-      stream2.fd = fd2;
-      stream2._isStdio = true;
-      return stream2;
-    }
-    function init(debug) {
-      debug.inspectOpts = {};
-      var keys = Object.keys(exports.inspectOpts);
-      for (var i = 0; i < keys.length; i++) {
-        debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
-      }
-    }
-    exports.enable(load());
-  }
-});
-
-// node_modules/express/node_modules/debug/src/index.js
-var require_src3 = __commonJS({
-  "node_modules/express/node_modules/debug/src/index.js"(exports, module) {
-    if (typeof process !== "undefined" && process.type === "renderer") {
-      module.exports = require_browser3();
-    } else {
-      module.exports = require_node3();
-    }
-  }
-});
-
-// node_modules/array-flatten/array-flatten.js
-var require_array_flatten = __commonJS({
-  "node_modules/array-flatten/array-flatten.js"(exports, module) {
-    "use strict";
-    module.exports = arrayFlatten;
-    function flattenWithDepth(array, result, depth) {
-      for (var i = 0; i < array.length; i++) {
-        var value = array[i];
-        if (depth > 0 && Array.isArray(value)) {
-          flattenWithDepth(value, result, depth - 1);
-        } else {
-          result.push(value);
-        }
-      }
-      return result;
-    }
-    function flattenForever(array, result) {
-      for (var i = 0; i < array.length; i++) {
-        var value = array[i];
-        if (Array.isArray(value)) {
-          flattenForever(value, result);
-        } else {
-          result.push(value);
-        }
-      }
-      return result;
-    }
-    function arrayFlatten(array, depth) {
-      if (depth == null) {
-        return flattenForever(array, []);
-      }
-      return flattenWithDepth(array, [], depth);
-    }
-  }
-});
-
-// node_modules/path-to-regexp/index.js
-var require_path_to_regexp = __commonJS({
-  "node_modules/path-to-regexp/index.js"(exports, module) {
-    module.exports = pathToRegexp;
-    var MATCHING_GROUP_REGEXP = /\\.|\((?:\?<(.*?)>)?(?!\?)/g;
-    function pathToRegexp(path, keys, options) {
-      options = options || {};
-      keys = keys || [];
-      var strict = options.strict;
-      var end = options.end !== false;
-      var flags = options.sensitive ? "" : "i";
-      var lookahead = options.lookahead !== false;
-      var extraOffset = 0;
-      var keysOffset = keys.length;
-      var i = 0;
-      var name = 0;
-      var pos = 0;
-      var backtrack = "";
-      var m;
-      if (path instanceof RegExp) {
-        while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {
-          if (m[0][0] === "\\") continue;
-          keys.push({
-            name: m[1] || name++,
-            optional: false,
-            offset: m.index
-          });
-        }
-        return path;
-      }
-      if (Array.isArray(path)) {
-        path = path.map(function(value) {
-          return pathToRegexp(value, keys, options).source;
-        });
-        return new RegExp(path.join("|"), flags);
-      }
-      if (typeof path !== "string") {
-        throw new TypeError("path must be a string, array of strings, or regular expression");
-      }
-      path = path.replace(/\\.|(\/)?(\.)?:(\w+)(\(.*?\))?(\*)?(\?)?|[.*]|\/\(/g, function(match, slash, format, key, capture, star, optional, offset) {
-        if (match[0] === "\\") {
-          backtrack += match;
-          pos += 2;
-          return match;
-        }
-        if (match === ".") {
-          backtrack += "\\.";
-          extraOffset += 1;
-          pos += 1;
-          return "\\.";
-        }
-        if (slash || format) {
-          backtrack = "";
-        } else {
-          backtrack += path.slice(pos, offset);
-        }
-        pos = offset + match.length;
-        if (match === "*") {
-          extraOffset += 3;
-          return "(.*)";
-        }
-        if (match === "/(") {
-          backtrack += "/";
-          extraOffset += 2;
-          return "/(?:";
-        }
-        slash = slash || "";
-        format = format ? "\\." : "";
-        optional = optional || "";
-        capture = capture ? capture.replace(/\\.|\*/, function(m2) {
-          return m2 === "*" ? "(.*)" : m2;
-        }) : backtrack ? "((?:(?!/|" + backtrack + ").)+?)" : "([^/" + format + "]+?)";
-        keys.push({
-          name: key,
-          optional: !!optional,
-          offset: offset + extraOffset
-        });
-        var result = "(?:" + format + slash + capture + (star ? "((?:[/" + format + "].+?)?)" : "") + ")" + optional;
-        extraOffset += result.length - match.length;
-        return result;
-      });
-      while (m = MATCHING_GROUP_REGEXP.exec(path)) {
-        if (m[0][0] === "\\") continue;
-        if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {
-          keys.splice(keysOffset + i, 0, {
-            name: name++,
-            // Unnamed matching groups must be consistently linear.
-            optional: false,
-            offset: m.index
-          });
-        }
-        i++;
-      }
-      path += strict ? "" : path[path.length - 1] === "/" ? "?" : "/?";
-      if (end) {
-        path += "$";
-      } else if (path[path.length - 1] !== "/") {
-        path += lookahead ? "(?=/|$)" : "(?:/|$)";
-      }
-      return new RegExp("^" + path, flags);
-    }
-  }
-});
-
-// node_modules/express/lib/router/layer.js
-var require_layer = __commonJS({
-  "node_modules/express/lib/router/layer.js"(exports, module) {
-    "use strict";
-    var pathRegexp = require_path_to_regexp();
-    var debug = require_src3()("express:router:layer");
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-    module.exports = Layer;
-    function Layer(path, options, fn) {
-      if (!(this instanceof Layer)) {
-        return new Layer(path, options, fn);
-      }
-      debug("new %o", path);
-      var opts = options || {};
-      this.handle = fn;
-      this.name = fn.name || "<anonymous>";
-      this.params = void 0;
-      this.path = void 0;
-      this.regexp = pathRegexp(path, this.keys = [], opts);
-      this.regexp.fast_star = path === "*";
-      this.regexp.fast_slash = path === "/" && opts.end === false;
-    }
-    Layer.prototype.handle_error = function handle_error(error, req, res, next) {
-      var fn = this.handle;
-      if (fn.length !== 4) {
-        return next(error);
-      }
-      try {
-        fn(error, req, res, next);
-      } catch (err) {
-        next(err);
-      }
-    };
-    Layer.prototype.handle_request = function handle(req, res, next) {
-      var fn = this.handle;
-      if (fn.length > 3) {
-        return next();
-      }
-      try {
-        fn(req, res, next);
-      } catch (err) {
-        next(err);
-      }
-    };
-    Layer.prototype.match = function match(path) {
-      var match2;
-      if (path != null) {
-        if (this.regexp.fast_slash) {
-          this.params = {};
-          this.path = "";
-          return true;
-        }
-        if (this.regexp.fast_star) {
-          this.params = {
-            "0": decode_param(path)
-          };
-          this.path = path;
-          return true;
-        }
-        match2 = this.regexp.exec(path);
-      }
-      if (!match2) {
-        this.params = void 0;
-        this.path = void 0;
-        return false;
-      }
-      this.params = {};
-      this.path = match2[0];
-      var keys = this.keys;
-      var params = this.params;
-      for (var i = 1; i < match2.length; i++) {
-        var key = keys[i - 1];
-        var prop = key.name;
-        var val = decode_param(match2[i]);
-        if (val !== void 0 || !hasOwnProperty.call(params, prop)) {
-          params[prop] = val;
-        }
-      }
-      return true;
-    };
-    function decode_param(val) {
-      if (typeof val !== "string" || val.length === 0) {
-        return val;
-      }
-      try {
-        return decodeURIComponent(val);
-      } catch (err) {
-        if (err instanceof URIError) {
-          err.message = "Failed to decode param '" + val + "'";
-          err.status = err.statusCode = 400;
-        }
-        throw err;
-      }
-    }
-  }
-});
-
-// node_modules/methods/index.js
-var require_methods = __commonJS({
-  "node_modules/methods/index.js"(exports, module) {
-    "use strict";
-    var http = __require("http");
-    module.exports = getCurrentNodeMethods() || getBasicNodeMethods();
-    function getCurrentNodeMethods() {
-      return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {
-        return method.toLowerCase();
-      });
-    }
-    function getBasicNodeMethods() {
-      return ["get", "post", "put", "head", "delete", "options", "trace", "copy", "lock", "mkcol", "move", "purge", "propfind", "proppatch", "unlock", "report", "mkactivity", "checkout", "merge", "m-search", "notify", "subscribe", "unsubscribe", "patch", "search", "connect"];
-    }
-  }
-});
-
-// node_modules/express/lib/router/route.js
-var require_route = __commonJS({
-  "node_modules/express/lib/router/route.js"(exports, module) {
-    "use strict";
-    var debug = require_src3()("express:router:route");
-    var flatten = require_array_flatten();
-    var Layer = require_layer();
-    var methods = require_methods();
-    var slice = Array.prototype.slice;
-    var toString = Object.prototype.toString;
-    module.exports = Route;
-    function Route(path) {
-      this.path = path;
-      this.stack = [];
-      debug("new %o", path);
-      this.methods = {};
-    }
-    Route.prototype._handles_method = function _handles_method(method) {
-      if (this.methods._all) {
-        return true;
-      }
-      var name = typeof method === "string" ? method.toLowerCase() : method;
-      if (name === "head" && !this.methods["head"]) {
-        name = "get";
-      }
-      return Boolean(this.methods[name]);
-    };
-    Route.prototype._options = function _options() {
-      var methods2 = Object.keys(this.methods);
-      if (this.methods.get && !this.methods.head) {
-        methods2.push("head");
-      }
-      for (var i = 0; i < methods2.length; i++) {
-        methods2[i] = methods2[i].toUpperCase();
-      }
-      return methods2;
-    };
-    Route.prototype.dispatch = function dispatch(req, res, done) {
-      var idx = 0;
-      var stack = this.stack;
-      var sync = 0;
-      if (stack.length === 0) {
-        return done();
-      }
-      var method = typeof req.method === "string" ? req.method.toLowerCase() : req.method;
-      if (method === "head" && !this.methods["head"]) {
-        method = "get";
-      }
-      req.route = this;
-      next();
-      function next(err) {
-        if (err && err === "route") {
-          return done();
-        }
-        if (err && err === "router") {
-          return done(err);
-        }
-        if (++sync > 100) {
-          return setImmediate(next, err);
-        }
-        var layer = stack[idx++];
-        if (!layer) {
-          return done(err);
-        }
-        if (layer.method && layer.method !== method) {
-          next(err);
-        } else if (err) {
-          layer.handle_error(err, req, res, next);
-        } else {
-          layer.handle_request(req, res, next);
-        }
-        sync = 0;
-      }
-    };
-    Route.prototype.all = function all() {
-      var handles = flatten(slice.call(arguments));
-      for (var i = 0; i < handles.length; i++) {
-        var handle = handles[i];
-        if (typeof handle !== "function") {
-          var type = toString.call(handle);
-          var msg = "Route.all() requires a callback function but got a " + type;
-          throw new TypeError(msg);
-        }
-        var layer = Layer("/", {}, handle);
-        layer.method = void 0;
-        this.methods._all = true;
-        this.stack.push(layer);
-      }
-      return this;
-    };
-    methods.forEach(function(method) {
-      Route.prototype[method] = function() {
-        var handles = flatten(slice.call(arguments));
-        for (var i = 0; i < handles.length; i++) {
-          var handle = handles[i];
-          if (typeof handle !== "function") {
-            var type = toString.call(handle);
-            var msg = "Route." + method + "() requires a callback function but got a " + type;
-            throw new Error(msg);
-          }
-          debug("%s %o", method, this.path);
-          var layer = Layer("/", {}, handle);
-          layer.method = method;
-          this.methods[method] = true;
-          this.stack.push(layer);
-        }
-        return this;
-      };
-    });
-  }
-});
-
-// node_modules/utils-merge/index.js
-var require_utils_merge = __commonJS({
-  "node_modules/utils-merge/index.js"(exports, module) {
-    exports = module.exports = function(a, b) {
-      if (a && b) {
-        for (var key in b) {
-          a[key] = b[key];
-        }
-      }
-      return a;
-    };
-  }
-});
-
-// node_modules/express/lib/router/index.js
-var require_router = __commonJS({
-  "node_modules/express/lib/router/index.js"(exports, module) {
-    "use strict";
-    var Route = require_route();
-    var Layer = require_layer();
-    var methods = require_methods();
-    var mixin = require_utils_merge();
-    var debug = require_src3()("express:router");
-    var deprecate = require_depd()("express");
-    var flatten = require_array_flatten();
-    var parseUrl = require_parseurl();
-    var setPrototypeOf = require_setprototypeof();
-    var objectRegExp = /^\[object (\S+)\]$/;
-    var slice = Array.prototype.slice;
-    var toString = Object.prototype.toString;
-    var proto = module.exports = function(options) {
-      var opts = options || {};
-      function router(req, res, next) {
-        router.handle(req, res, next);
-      }
-      setPrototypeOf(router, proto);
-      router.params = {};
-      router._params = [];
-      router.caseSensitive = opts.caseSensitive;
-      router.mergeParams = opts.mergeParams;
-      router.strict = opts.strict;
-      router.stack = [];
-      return router;
-    };
-    proto.param = function param(name, fn) {
-      if (typeof name === "function") {
-        deprecate("router.param(fn): Refactor to use path params");
-        this._params.push(name);
-        return;
-      }
-      var params = this._params;
-      var len = params.length;
-      var ret;
-      if (name[0] === ":") {
-        deprecate("router.param(" + JSON.stringify(name) + ", fn): Use router.param(" + JSON.stringify(name.slice(1)) + ", fn) instead");
-        name = name.slice(1);
-      }
-      for (var i = 0; i < len; ++i) {
-        if (ret = params[i](name, fn)) {
-          fn = ret;
-        }
-      }
-      if ("function" !== typeof fn) {
-        throw new Error("invalid param() call for " + name + ", got " + fn);
-      }
-      (this.params[name] = this.params[name] || []).push(fn);
-      return this;
-    };
-    proto.handle = function handle(req, res, out) {
-      var self = this;
-      debug("dispatching %s %s", req.method, req.url);
-      var idx = 0;
-      var protohost = getProtohost(req.url) || "";
-      var removed = "";
-      var slashAdded = false;
-      var sync = 0;
-      var paramcalled = {};
-      var options = [];
-      var stack = self.stack;
-      var parentParams = req.params;
-      var parentUrl = req.baseUrl || "";
-      var done = restore(out, req, "baseUrl", "next", "params");
-      req.next = next;
-      if (req.method === "OPTIONS") {
-        done = wrap(done, function(old, err) {
-          if (err || options.length === 0) return old(err);
-          sendOptionsResponse(res, options, old);
-        });
-      }
-      req.baseUrl = parentUrl;
-      req.originalUrl = req.originalUrl || req.url;
-      next();
-      function next(err) {
-        var layerError = err === "route" ? null : err;
-        if (slashAdded) {
-          req.url = req.url.slice(1);
-          slashAdded = false;
-        }
-        if (removed.length !== 0) {
-          req.baseUrl = parentUrl;
-          req.url = protohost + removed + req.url.slice(protohost.length);
-          removed = "";
-        }
-        if (layerError === "router") {
-          setImmediate(done, null);
-          return;
-        }
-        if (idx >= stack.length) {
-          setImmediate(done, layerError);
-          return;
-        }
-        if (++sync > 100) {
-          return setImmediate(next, err);
-        }
-        var path = getPathname(req);
-        if (path == null) {
-          return done(layerError);
-        }
-        var layer;
-        var match;
-        var route;
-        while (match !== true && idx < stack.length) {
-          layer = stack[idx++];
-          match = matchLayer(layer, path);
-          route = layer.route;
-          if (typeof match !== "boolean") {
-            layerError = layerError || match;
-          }
-          if (match !== true) {
-            continue;
-          }
-          if (!route) {
-            continue;
-          }
-          if (layerError) {
-            match = false;
-            continue;
-          }
-          var method = req.method;
-          var has_method = route._handles_method(method);
-          if (!has_method && method === "OPTIONS") {
-            appendMethods(options, route._options());
-          }
-          if (!has_method && method !== "HEAD") {
-            match = false;
-          }
-        }
-        if (match !== true) {
-          return done(layerError);
-        }
-        if (route) {
-          req.route = route;
-        }
-        req.params = self.mergeParams ? mergeParams(layer.params, parentParams) : layer.params;
-        var layerPath = layer.path;
-        self.process_params(layer, paramcalled, req, res, function(err2) {
-          if (err2) {
-            next(layerError || err2);
-          } else if (route) {
-            layer.handle_request(req, res, next);
-          } else {
-            trim_prefix(layer, layerError, layerPath, path);
-          }
-          sync = 0;
-        });
-      }
-      function trim_prefix(layer, layerError, layerPath, path) {
-        if (layerPath.length !== 0) {
-          if (layerPath !== path.slice(0, layerPath.length)) {
-            next(layerError);
-            return;
-          }
-          var c = path[layerPath.length];
-          if (c && c !== "/" && c !== ".") return next(layerError);
-          debug("trim prefix (%s) from url %s", layerPath, req.url);
-          removed = layerPath;
-          req.url = protohost + req.url.slice(protohost.length + removed.length);
-          if (!protohost && req.url[0] !== "/") {
-            req.url = "/" + req.url;
-            slashAdded = true;
-          }
-          req.baseUrl = parentUrl + (removed[removed.length - 1] === "/" ? removed.substring(0, removed.length - 1) : removed);
-        }
-        debug("%s %s : %s", layer.name, layerPath, req.originalUrl);
-        if (layerError) {
-          layer.handle_error(layerError, req, res, next);
-        } else {
-          layer.handle_request(req, res, next);
-        }
-      }
-    };
-    proto.process_params = function process_params(layer, called, req, res, done) {
-      var params = this.params;
-      var keys = layer.keys;
-      if (!keys || keys.length === 0) {
-        return done();
-      }
-      var i = 0;
-      var name;
-      var paramIndex = 0;
-      var key;
-      var paramVal;
-      var paramCallbacks;
-      var paramCalled;
-      function param(err) {
-        if (err) {
-          return done(err);
-        }
-        if (i >= keys.length) {
-          return done();
-        }
-        paramIndex = 0;
-        key = keys[i++];
-        name = key.name;
-        paramVal = req.params[name];
-        paramCallbacks = params[name];
-        paramCalled = called[name];
-        if (paramVal === void 0 || !paramCallbacks) {
-          return param();
-        }
-        if (paramCalled && (paramCalled.match === paramVal || paramCalled.error && paramCalled.error !== "route")) {
-          req.params[name] = paramCalled.value;
-          return param(paramCalled.error);
-        }
-        called[name] = paramCalled = {
-          error: null,
-          match: paramVal,
-          value: paramVal
-        };
-        paramCallback();
-      }
-      function paramCallback(err) {
-        var fn = paramCallbacks[paramIndex++];
-        paramCalled.value = req.params[key.name];
-        if (err) {
-          paramCalled.error = err;
-          param(err);
-          return;
-        }
-        if (!fn) return param();
-        try {
-          fn(req, res, paramCallback, paramVal, key.name);
-        } catch (e) {
-          paramCallback(e);
-        }
-      }
-      param();
-    };
-    proto.use = function use(fn) {
-      var offset = 0;
-      var path = "/";
-      if (typeof fn !== "function") {
-        var arg = fn;
-        while (Array.isArray(arg) && arg.length !== 0) {
-          arg = arg[0];
-        }
-        if (typeof arg !== "function") {
-          offset = 1;
-          path = fn;
-        }
-      }
-      var callbacks = flatten(slice.call(arguments, offset));
-      if (callbacks.length === 0) {
-        throw new TypeError("Router.use() requires a middleware function");
-      }
-      for (var i = 0; i < callbacks.length; i++) {
-        var fn = callbacks[i];
-        if (typeof fn !== "function") {
-          throw new TypeError("Router.use() requires a middleware function but got a " + gettype(fn));
-        }
-        debug("use %o %s", path, fn.name || "<anonymous>");
-        var layer = new Layer(path, {
-          sensitive: this.caseSensitive,
-          strict: false,
-          end: false
-        }, fn);
-        layer.route = void 0;
-        this.stack.push(layer);
-      }
-      return this;
-    };
-    proto.route = function route(path) {
-      var route2 = new Route(path);
-      var layer = new Layer(path, {
-        sensitive: this.caseSensitive,
-        strict: this.strict,
-        end: true
-      }, route2.dispatch.bind(route2));
-      layer.route = route2;
-      this.stack.push(layer);
-      return route2;
-    };
-    methods.concat("all").forEach(function(method) {
-      proto[method] = function(path) {
-        var route = this.route(path);
-        route[method].apply(route, slice.call(arguments, 1));
-        return this;
-      };
-    });
-    function appendMethods(list, addition) {
-      for (var i = 0; i < addition.length; i++) {
-        var method = addition[i];
-        if (list.indexOf(method) === -1) {
-          list.push(method);
-        }
-      }
-    }
-    function getPathname(req) {
-      try {
-        return parseUrl(req).pathname;
-      } catch (err) {
-        return void 0;
-      }
-    }
-    function getProtohost(url) {
-      if (typeof url !== "string" || url.length === 0 || url[0] === "/") {
-        return void 0;
-      }
-      var searchIndex = url.indexOf("?");
-      var pathLength = searchIndex !== -1 ? searchIndex : url.length;
-      var fqdnIndex = url.slice(0, pathLength).indexOf("://");
-      return fqdnIndex !== -1 ? url.substring(0, url.indexOf("/", 3 + fqdnIndex)) : void 0;
-    }
-    function gettype(obj) {
-      var type = typeof obj;
-      if (type !== "object") {
-        return type;
-      }
-      return toString.call(obj).replace(objectRegExp, "$1");
-    }
-    function matchLayer(layer, path) {
-      try {
-        return layer.match(path);
-      } catch (err) {
-        return err;
-      }
-    }
-    function mergeParams(params, parent) {
-      if (typeof parent !== "object" || !parent) {
-        return params;
-      }
-      var obj = mixin({}, parent);
-      if (!(0 in params) || !(0 in parent)) {
-        return mixin(obj, params);
-      }
-      var i = 0;
-      var o = 0;
-      while (i in params) {
-        i++;
-      }
-      while (o in parent) {
-        o++;
-      }
-      for (i--; i >= 0; i--) {
-        params[i + o] = params[i];
-        if (i < o) {
-          delete params[i];
-        }
-      }
-      return mixin(obj, params);
-    }
-    function restore(fn, obj) {
-      var props = new Array(arguments.length - 2);
-      var vals = new Array(arguments.length - 2);
-      for (var i = 0; i < props.length; i++) {
-        props[i] = arguments[i + 2];
-        vals[i] = obj[props[i]];
-      }
-      return function() {
-        for (var i2 = 0; i2 < props.length; i2++) {
-          obj[props[i2]] = vals[i2];
-        }
-        return fn.apply(this, arguments);
-      };
-    }
-    function sendOptionsResponse(res, options, next) {
-      try {
-        var body = options.join(",");
-        res.set("Allow", body);
-        res.send(body);
-      } catch (err) {
-        next(err);
-      }
-    }
-    function wrap(old, fn) {
-      return function proxy() {
-        var args = new Array(arguments.length + 1);
-        args[0] = old;
-        for (var i = 0, len = arguments.length; i < len; i++) {
-          args[i + 1] = arguments[i];
-        }
-        fn.apply(this, args);
-      };
-    }
-  }
-});
-
-// node_modules/express/lib/middleware/init.js
-var require_init = __commonJS({
-  "node_modules/express/lib/middleware/init.js"(exports) {
-    "use strict";
-    var setPrototypeOf = require_setprototypeof();
-    exports.init = function(app) {
-      return function expressInit(req, res, next) {
-        if (app.enabled("x-powered-by")) res.setHeader("X-Powered-By", "Express");
-        req.res = res;
-        res.req = req;
-        req.next = next;
-        setPrototypeOf(req, app.request);
-        setPrototypeOf(res, app.response);
-        res.locals = res.locals || /* @__PURE__ */ Object.create(null);
-        next();
-      };
-    };
-  }
-});
-
-// node_modules/express/lib/middleware/query.js
-var require_query = __commonJS({
-  "node_modules/express/lib/middleware/query.js"(exports, module) {
-    "use strict";
-    var merge = require_utils_merge();
-    var parseUrl = require_parseurl();
-    var qs = require_lib2();
-    module.exports = function query(options) {
-      var opts = merge({}, options);
-      var queryparse = qs.parse;
-      if (typeof options === "function") {
-        queryparse = options;
-        opts = void 0;
-      }
-      if (opts !== void 0 && opts.allowPrototypes === void 0) {
-        opts.allowPrototypes = true;
-      }
-      return function query2(req, res, next) {
-        if (!req.query) {
-          var val = parseUrl(req).query;
-          req.query = queryparse(val, opts);
-        }
-        next();
-      };
-    };
-  }
-});
-
-// node_modules/express/lib/view.js
-var require_view = __commonJS({
-  "node_modules/express/lib/view.js"(exports, module) {
-    "use strict";
-    var debug = require_src3()("express:view");
-    var path = __require("path");
-    var fs = __require("fs");
-    var dirname = path.dirname;
-    var basename = path.basename;
-    var extname = path.extname;
-    var join = path.join;
-    var resolve = path.resolve;
-    module.exports = View;
-    function View(name, options) {
-      var opts = options || {};
-      this.defaultEngine = opts.defaultEngine;
-      this.ext = extname(name);
-      this.name = name;
-      this.root = opts.root;
-      if (!this.ext && !this.defaultEngine) {
-        throw new Error("No default engine was specified and no extension was provided.");
-      }
-      var fileName = name;
-      if (!this.ext) {
-        this.ext = this.defaultEngine[0] !== "." ? "." + this.defaultEngine : this.defaultEngine;
-        fileName += this.ext;
-      }
-      if (!opts.engines[this.ext]) {
-        var mod = this.ext.slice(1);
-        debug('require "%s"', mod);
-        var fn = __require(mod).__express;
-        if (typeof fn !== "function") {
-          throw new Error('Module "' + mod + '" does not provide a view engine.');
-        }
-        opts.engines[this.ext] = fn;
-      }
-      this.engine = opts.engines[this.ext];
-      this.path = this.lookup(fileName);
-    }
-    View.prototype.lookup = function lookup(name) {
-      var path2;
-      var roots = [].concat(this.root);
-      debug('lookup "%s"', name);
-      for (var i = 0; i < roots.length && !path2; i++) {
-        var root = roots[i];
-        var loc = resolve(root, name);
-        var dir = dirname(loc);
-        var file = basename(loc);
-        path2 = this.resolve(dir, file);
-      }
-      return path2;
-    };
-    View.prototype.render = function render(options, callback) {
-      debug('render "%s"', this.path);
-      this.engine(this.path, options, callback);
-    };
-    View.prototype.resolve = function resolve2(dir, file) {
-      var ext = this.ext;
-      var path2 = join(dir, file);
-      var stat = tryStat(path2);
-      if (stat && stat.isFile()) {
-        return path2;
-      }
-      path2 = join(dir, basename(file, ext), "index" + ext);
-      stat = tryStat(path2);
-      if (stat && stat.isFile()) {
-        return path2;
-      }
-    };
-    function tryStat(path2) {
-      debug('stat "%s"', path2);
-      try {
-        return fs.statSync(path2);
-      } catch (e) {
-        return void 0;
-      }
-    }
-  }
-});
-
-// node_modules/safe-buffer/index.js
-var require_safe_buffer = __commonJS({
-  "node_modules/safe-buffer/index.js"(exports, module) {
-    var buffer = __require("buffer");
-    var Buffer2 = buffer.Buffer;
-    function copyProps(src, dst) {
-      for (var key in src) {
-        dst[key] = src[key];
-      }
-    }
-    if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
-      module.exports = buffer;
-    } else {
-      copyProps(buffer, exports);
-      exports.Buffer = SafeBuffer;
-    }
-    function SafeBuffer(arg, encodingOrOffset, length) {
-      return Buffer2(arg, encodingOrOffset, length);
-    }
-    SafeBuffer.prototype = Object.create(Buffer2.prototype);
-    copyProps(Buffer2, SafeBuffer);
-    SafeBuffer.from = function(arg, encodingOrOffset, length) {
-      if (typeof arg === "number") {
-        throw new TypeError("Argument must not be a number");
-      }
-      return Buffer2(arg, encodingOrOffset, length);
-    };
-    SafeBuffer.alloc = function(size, fill, encoding) {
-      if (typeof size !== "number") {
-        throw new TypeError("Argument must be a number");
-      }
-      var buf = Buffer2(size);
-      if (fill !== void 0) {
-        if (typeof encoding === "string") {
-          buf.fill(fill, encoding);
-        } else {
-          buf.fill(fill);
-        }
-      } else {
-        buf.fill(0);
-      }
-      return buf;
-    };
-    SafeBuffer.allocUnsafe = function(size) {
-      if (typeof size !== "number") {
-        throw new TypeError("Argument must be a number");
-      }
-      return Buffer2(size);
-    };
-    SafeBuffer.allocUnsafeSlow = function(size) {
-      if (typeof size !== "number") {
-        throw new TypeError("Argument must be a number");
-      }
-      return buffer.SlowBuffer(size);
-    };
-  }
-});
-
-// node_modules/content-disposition/index.js
-var require_content_disposition = __commonJS({
-  "node_modules/content-disposition/index.js"(exports, module) {
-    "use strict";
-    module.exports = contentDisposition;
-    module.exports.parse = parse;
-    var basename = __require("path").basename;
-    var Buffer2 = require_safe_buffer().Buffer;
-    var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g;
-    var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/;
-    var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g;
-    var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g;
-    var QESC_REGEXP = /\\([\u0000-\u007f])/g;
-    var QUOTE_REGEXP = /([\\"])/g;
-    var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g;
-    var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/;
-    var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/;
-    var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;
-    var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;
-    function contentDisposition(filename, options) {
-      var opts = options || {};
-      var type = opts.type || "attachment";
-      var params = createparams(filename, opts.fallback);
-      return format(new ContentDisposition(type, params));
-    }
-    function createparams(filename, fallback) {
-      if (filename === void 0) {
-        return;
-      }
-      var params = {};
-      if (typeof filename !== "string") {
-        throw new TypeError("filename must be a string");
-      }
-      if (fallback === void 0) {
-        fallback = true;
-      }
-      if (typeof fallback !== "string" && typeof fallback !== "boolean") {
-        throw new TypeError("fallback must be a string or boolean");
-      }
-      if (typeof fallback === "string" && NON_LATIN1_REGEXP.test(fallback)) {
-        throw new TypeError("fallback must be ISO-8859-1 string");
-      }
-      var name = basename(filename);
-      var isQuotedString = TEXT_REGEXP.test(name);
-      var fallbackName = typeof fallback !== "string" ? fallback && getlatin1(name) : basename(fallback);
-      var hasFallback = typeof fallbackName === "string" && fallbackName !== name;
-      if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {
-        params["filename*"] = name;
-      }
-      if (isQuotedString || hasFallback) {
-        params.filename = hasFallback ? fallbackName : name;
-      }
-      return params;
-    }
-    function format(obj) {
-      var parameters = obj.parameters;
-      var type = obj.type;
-      if (!type || typeof type !== "string" || !TOKEN_REGEXP.test(type)) {
-        throw new TypeError("invalid type");
-      }
-      var string = String(type).toLowerCase();
-      if (parameters && typeof parameters === "object") {
-        var param;
-        var params = Object.keys(parameters).sort();
-        for (var i = 0; i < params.length; i++) {
-          param = params[i];
-          var val = param.substr(-1) === "*" ? ustring(parameters[param]) : qstring(parameters[param]);
-          string += "; " + param + "=" + val;
-        }
-      }
-      return string;
-    }
-    function decodefield(str) {
-      var match = EXT_VALUE_REGEXP.exec(str);
-      if (!match) {
-        throw new TypeError("invalid extended field value");
-      }
-      var charset = match[1].toLowerCase();
-      var encoded = match[2];
-      var value;
-      var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode);
-      switch (charset) {
-        case "iso-8859-1":
-          value = getlatin1(binary);
-          break;
-        case "utf-8":
-          value = Buffer2.from(binary, "binary").toString("utf8");
-          break;
-        default:
-          throw new TypeError("unsupported charset in extended field");
-      }
-      return value;
-    }
-    function getlatin1(val) {
-      return String(val).replace(NON_LATIN1_REGEXP, "?");
-    }
-    function parse(string) {
-      if (!string || typeof string !== "string") {
-        throw new TypeError("argument string is required");
-      }
-      var match = DISPOSITION_TYPE_REGEXP.exec(string);
-      if (!match) {
-        throw new TypeError("invalid type format");
-      }
-      var index = match[0].length;
-      var type = match[1].toLowerCase();
-      var key;
-      var names = [];
-      var params = {};
-      var value;
-      index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ";" ? index - 1 : index;
-      while (match = PARAM_REGEXP.exec(string)) {
-        if (match.index !== index) {
-          throw new TypeError("invalid parameter format");
-        }
-        index += match[0].length;
-        key = match[1].toLowerCase();
-        value = match[2];
-        if (names.indexOf(key) !== -1) {
-          throw new TypeError("invalid duplicate parameter");
-        }
-        names.push(key);
-        if (key.indexOf("*") + 1 === key.length) {
-          key = key.slice(0, -1);
-          value = decodefield(value);
-          params[key] = value;
-          continue;
-        }
-        if (typeof params[key] === "string") {
-          continue;
-        }
-        if (value[0] === '"') {
-          value = value.substr(1, value.length - 2).replace(QESC_REGEXP, "$1");
-        }
-        params[key] = value;
-      }
-      if (index !== -1 && index !== string.length) {
-        throw new TypeError("invalid parameter format");
-      }
-      return new ContentDisposition(type, params);
-    }
-    function pdecode(str, hex) {
-      return String.fromCharCode(parseInt(hex, 16));
-    }
-    function pencode(char) {
-      return "%" + String(char).charCodeAt(0).toString(16).toUpperCase();
-    }
-    function qstring(val) {
-      var str = String(val);
-      return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"';
-    }
-    function ustring(val) {
-      var str = String(val);
-      var encoded = encodeURIComponent(str).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode);
-      return "UTF-8''" + encoded;
-    }
-    function ContentDisposition(type, parameters) {
-      this.type = type;
-      this.parameters = parameters;
-    }
-  }
-});
-
-// node_modules/send/node_modules/debug/node_modules/ms/index.js
-var require_ms4 = __commonJS({
-  "node_modules/send/node_modules/debug/node_modules/ms/index.js"(exports, module) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var y = d * 365.25;
-    module.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isNaN(val) === false) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      if (ms >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (ms >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (ms >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (ms >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms";
-    }
-    function plural(ms, n, name) {
-      if (ms < n) {
-        return;
-      }
-      if (ms < n * 1.5) {
-        return Math.floor(ms / n) + " " + name;
-      }
-      return Math.ceil(ms / n) + " " + name + "s";
-    }
-  }
-});
-
-// node_modules/send/node_modules/debug/src/debug.js
-var require_debug4 = __commonJS({
-  "node_modules/send/node_modules/debug/src/debug.js"(exports, module) {
-    exports = module.exports = createDebug.debug = createDebug["default"] = createDebug;
-    exports.coerce = coerce;
-    exports.disable = disable;
-    exports.enable = enable;
-    exports.enabled = enabled;
-    exports.humanize = require_ms4();
-    exports.names = [];
-    exports.skips = [];
-    exports.formatters = {};
-    var prevTime;
-    function selectColor(namespace) {
-      var hash = 0, i;
-      for (i in namespace) {
-        hash = (hash << 5) - hash + namespace.charCodeAt(i);
-        hash |= 0;
-      }
-      return exports.colors[Math.abs(hash) % exports.colors.length];
-    }
-    function createDebug(namespace) {
-      function debug() {
-        if (!debug.enabled) return;
-        var self = debug;
-        var curr = +/* @__PURE__ */ new Date();
-        var ms = curr - (prevTime || curr);
-        self.diff = ms;
-        self.prev = prevTime;
-        self.curr = curr;
-        prevTime = curr;
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        args[0] = exports.coerce(args[0]);
-        if ("string" !== typeof args[0]) {
-          args.unshift("%O");
-        }
-        var index = 0;
-        args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
-          if (match === "%%") return match;
-          index++;
-          var formatter = exports.formatters[format];
-          if ("function" === typeof formatter) {
-            var val = args[index];
-            match = formatter.call(self, val);
-            args.splice(index, 1);
-            index--;
-          }
-          return match;
-        });
-        exports.formatArgs.call(self, args);
-        var logFn = debug.log || exports.log || console.log.bind(console);
-        logFn.apply(self, args);
-      }
-      debug.namespace = namespace;
-      debug.enabled = exports.enabled(namespace);
-      debug.useColors = exports.useColors();
-      debug.color = selectColor(namespace);
-      if ("function" === typeof exports.init) {
-        exports.init(debug);
-      }
-      return debug;
-    }
-    function enable(namespaces) {
-      exports.save(namespaces);
-      exports.names = [];
-      exports.skips = [];
-      var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
-      var len = split.length;
-      for (var i = 0; i < len; i++) {
-        if (!split[i]) continue;
-        namespaces = split[i].replace(/\*/g, ".*?");
-        if (namespaces[0] === "-") {
-          exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$"));
-        } else {
-          exports.names.push(new RegExp("^" + namespaces + "$"));
-        }
-      }
-    }
-    function disable() {
-      exports.enable("");
-    }
-    function enabled(name) {
-      var i, len;
-      for (i = 0, len = exports.skips.length; i < len; i++) {
-        if (exports.skips[i].test(name)) {
-          return false;
-        }
-      }
-      for (i = 0, len = exports.names.length; i < len; i++) {
-        if (exports.names[i].test(name)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    function coerce(val) {
-      if (val instanceof Error) return val.stack || val.message;
-      return val;
-    }
-  }
-});
-
-// node_modules/send/node_modules/debug/src/browser.js
-var require_browser4 = __commonJS({
-  "node_modules/send/node_modules/debug/src/browser.js"(exports, module) {
-    exports = module.exports = require_debug4();
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local : localstorage();
-    exports.colors = ["lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson"];
-    function useColors() {
-      if (typeof window !== "undefined" && window.process && window.process.type === "renderer") {
-        return true;
-      }
-      return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // is firebug? http://stackoverflow.com/a/398120/376773
-      typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // is firefox >= v31?
-      // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // double check webkit in userAgent just in case we are in a worker
-      typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-    }
-    exports.formatters.j = function(v) {
-      try {
-        return JSON.stringify(v);
-      } catch (err) {
-        return "[UnexpectedJSONParseError]: " + err.message;
-      }
-    };
-    function formatArgs(args) {
-      var useColors2 = this.useColors;
-      args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff);
-      if (!useColors2) return;
-      var c = "color: " + this.color;
-      args.splice(1, 0, c, "color: inherit");
-      var index = 0;
-      var lastC = 0;
-      args[0].replace(/%[a-zA-Z%]/g, function(match) {
-        if ("%%" === match) return;
-        index++;
-        if ("%c" === match) {
-          lastC = index;
-        }
-      });
-      args.splice(lastC, 0, c);
-    }
-    function log() {
-      return "object" === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);
-    }
-    function save(namespaces) {
-      try {
-        if (null == namespaces) {
-          exports.storage.removeItem("debug");
-        } else {
-          exports.storage.debug = namespaces;
-        }
-      } catch (e) {
-      }
-    }
-    function load() {
-      var r;
-      try {
-        r = exports.storage.debug;
-      } catch (e) {
-      }
-      if (!r && typeof process !== "undefined" && "env" in process) {
-        r = process.env.DEBUG;
-      }
-      return r;
-    }
-    exports.enable(load());
-    function localstorage() {
-      try {
-        return window.localStorage;
-      } catch (e) {
-      }
-    }
-  }
-});
-
-// node_modules/send/node_modules/debug/src/node.js
-var require_node4 = __commonJS({
-  "node_modules/send/node_modules/debug/src/node.js"(exports, module) {
-    var tty = __require("tty");
-    var util = __require("util");
-    exports = module.exports = require_debug4();
-    exports.init = init;
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.colors = [6, 2, 3, 4, 5, 1];
-    exports.inspectOpts = Object.keys(process.env).filter(function(key) {
-      return /^debug_/i.test(key);
-    }).reduce(function(obj, key) {
-      var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) {
-        return k.toUpperCase();
-      });
-      var val = process.env[key];
-      if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
-      else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
-      else if (val === "null") val = null;
-      else val = Number(val);
-      obj[prop] = val;
-      return obj;
-    }, {});
-    var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
-    if (1 !== fd && 2 !== fd) {
-      util.deprecate(function() {
-      }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
-    }
-    var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);
-    function useColors() {
-      return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);
-    }
-    exports.formatters.o = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts).split("\n").map(function(str) {
-        return str.trim();
-      }).join(" ");
-    };
-    exports.formatters.O = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts);
-    };
-    function formatArgs(args) {
-      var name = this.namespace;
-      var useColors2 = this.useColors;
-      if (useColors2) {
-        var c = this.color;
-        var prefix = "  \x1B[3" + c + ";1m" + name + " \x1B[0m";
-        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
-        args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m");
-      } else {
-        args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0];
-      }
-    }
-    function log() {
-      return stream.write(util.format.apply(util, arguments) + "\n");
-    }
-    function save(namespaces) {
-      if (null == namespaces) {
-        delete process.env.DEBUG;
-      } else {
-        process.env.DEBUG = namespaces;
-      }
-    }
-    function load() {
-      return process.env.DEBUG;
-    }
-    function createWritableStdioStream(fd2) {
-      var stream2;
-      var tty_wrap = process.binding("tty_wrap");
-      switch (tty_wrap.guessHandleType(fd2)) {
-        case "TTY":
-          stream2 = new tty.WriteStream(fd2);
-          stream2._type = "tty";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        case "FILE":
-          var fs = __require("fs");
-          stream2 = new fs.SyncWriteStream(fd2, {
-            autoClose: false
-          });
-          stream2._type = "fs";
-          break;
-        case "PIPE":
-        case "TCP":
-          var net = __require("net");
-          stream2 = new net.Socket({
-            fd: fd2,
-            readable: false,
-            writable: true
-          });
-          stream2.readable = false;
-          stream2.read = null;
-          stream2._type = "pipe";
-          if (stream2._handle && stream2._handle.unref) {
-            stream2._handle.unref();
-          }
-          break;
-        default:
-          throw new Error("Implement me. Unknown stream file type!");
-      }
-      stream2.fd = fd2;
-      stream2._isStdio = true;
-      return stream2;
-    }
-    function init(debug) {
-      debug.inspectOpts = {};
-      var keys = Object.keys(exports.inspectOpts);
-      for (var i = 0; i < keys.length; i++) {
-        debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
-      }
-    }
-    exports.enable(load());
-  }
-});
-
-// node_modules/send/node_modules/debug/src/index.js
-var require_src4 = __commonJS({
-  "node_modules/send/node_modules/debug/src/index.js"(exports, module) {
-    if (typeof process !== "undefined" && process.type === "renderer") {
-      module.exports = require_browser4();
-    } else {
-      module.exports = require_node4();
-    }
-  }
-});
-
-// node_modules/send/node_modules/encodeurl/index.js
-var require_encodeurl2 = __commonJS({
-  "node_modules/send/node_modules/encodeurl/index.js"(exports, module) {
-    "use strict";
-    module.exports = encodeUrl;
-    var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;
-    var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;
-    var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1�$2";
-    function encodeUrl(url) {
-      return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI);
-    }
-  }
-});
-
-// node_modules/etag/index.js
-var require_etag = __commonJS({
-  "node_modules/etag/index.js"(exports, module) {
-    "use strict";
-    module.exports = etag;
-    var crypto = __require("crypto");
-    var Stats = __require("fs").Stats;
-    var toString = Object.prototype.toString;
-    function entitytag(entity) {
-      if (entity.length === 0) {
-        return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"';
-      }
-      var hash = crypto.createHash("sha1").update(entity, "utf8").digest("base64").substring(0, 27);
-      var len = typeof entity === "string" ? Buffer.byteLength(entity, "utf8") : entity.length;
-      return '"' + len.toString(16) + "-" + hash + '"';
-    }
-    function etag(entity, options) {
-      if (entity == null) {
-        throw new TypeError("argument entity is required");
-      }
-      var isStats = isstats(entity);
-      var weak = options && typeof options.weak === "boolean" ? options.weak : isStats;
-      if (!isStats && typeof entity !== "string" && !Buffer.isBuffer(entity)) {
-        throw new TypeError("argument entity must be string, Buffer, or fs.Stats");
-      }
-      var tag = isStats ? stattag(entity) : entitytag(entity);
-      return weak ? "W/" + tag : tag;
-    }
-    function isstats(obj) {
-      if (typeof Stats === "function" && obj instanceof Stats) {
-        return true;
-      }
-      return obj && typeof obj === "object" && "ctime" in obj && toString.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number";
-    }
-    function stattag(stat) {
-      var mtime = stat.mtime.getTime().toString(16);
-      var size = stat.size.toString(16);
-      return '"' + size + "-" + mtime + '"';
-    }
-  }
-});
-
-// node_modules/fresh/index.js
-var require_fresh = __commonJS({
-  "node_modules/fresh/index.js"(exports, module) {
-    "use strict";
-    var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
-    module.exports = fresh;
-    function fresh(reqHeaders, resHeaders) {
-      var modifiedSince = reqHeaders["if-modified-since"];
-      var noneMatch = reqHeaders["if-none-match"];
-      if (!modifiedSince && !noneMatch) {
-        return false;
-      }
-      var cacheControl = reqHeaders["cache-control"];
-      if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
-        return false;
-      }
-      if (noneMatch && noneMatch !== "*") {
-        var etag = resHeaders["etag"];
-        if (!etag) {
-          return false;
-        }
-        var etagStale = true;
-        var matches = parseTokenList(noneMatch);
-        for (var i = 0; i < matches.length; i++) {
-          var match = matches[i];
-          if (match === etag || match === "W/" + etag || "W/" + match === etag) {
-            etagStale = false;
-            break;
-          }
-        }
-        if (etagStale) {
-          return false;
-        }
-      }
-      if (modifiedSince) {
-        var lastModified = resHeaders["last-modified"];
-        var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince));
-        if (modifiedStale) {
-          return false;
-        }
-      }
-      return true;
-    }
-    function parseHttpDate(date) {
-      var timestamp = date && Date.parse(date);
-      return typeof timestamp === "number" ? timestamp : NaN;
-    }
-    function parseTokenList(str) {
-      var end = 0;
-      var list = [];
-      var start = 0;
-      for (var i = 0, len = str.length; i < len; i++) {
-        switch (str.charCodeAt(i)) {
-          case 32:
-            if (start === end) {
-              start = end = i + 1;
-            }
-            break;
-          case 44:
-            list.push(str.substring(start, end));
-            start = end = i + 1;
-            break;
-          default:
-            end = i + 1;
-            break;
-        }
-      }
-      list.push(str.substring(start, end));
-      return list;
-    }
-  }
-});
-
-// node_modules/send/node_modules/mime/types.json
-var require_types = __commonJS({
-  "node_modules/send/node_modules/mime/types.json"(exports, module) {
-    module.exports = { "application/andrew-inset": ["ez"], "application/applixware": ["aw"], "application/atom+xml": ["atom"], "application/atomcat+xml": ["atomcat"], "application/atomsvc+xml": ["atomsvc"], "application/bdoc": ["bdoc"], "application/ccxml+xml": ["ccxml"], "application/cdmi-capability": ["cdmia"], "application/cdmi-container": ["cdmic"], "application/cdmi-domain": ["cdmid"], "application/cdmi-object": ["cdmio"], "application/cdmi-queue": ["cdmiq"], "application/cu-seeme": ["cu"], "application/dash+xml": ["mpd"], "application/davmount+xml": ["davmount"], "application/docbook+xml": ["dbk"], "application/dssc+der": ["dssc"], "application/dssc+xml": ["xdssc"], "application/ecmascript": ["ecma"], "application/emma+xml": ["emma"], "application/epub+zip": ["epub"], "application/exi": ["exi"], "application/font-tdpfr": ["pfr"], "application/font-woff": [], "application/font-woff2": [], "application/geo+json": ["geojson"], "application/gml+xml": ["gml"], "application/gpx+xml": ["gpx"], "application/gxf": ["gxf"], "application/gzip": ["gz"], "application/hyperstudio": ["stk"], "application/inkml+xml": ["ink", "inkml"], "application/ipfix": ["ipfix"], "application/java-archive": ["jar", "war", "ear"], "application/java-serialized-object": ["ser"], "application/java-vm": ["class"], "application/javascript": ["js", "mjs"], "application/json": ["json", "map"], "application/json5": ["json5"], "application/jsonml+json": ["jsonml"], "application/ld+json": ["jsonld"], "application/lost+xml": ["lostxml"], "application/mac-binhex40": ["hqx"], "application/mac-compactpro": ["cpt"], "application/mads+xml": ["mads"], "application/manifest+json": ["webmanifest"], "application/marc": ["mrc"], "application/marcxml+xml": ["mrcx"], "application/mathematica": ["ma", "nb", "mb"], "application/mathml+xml": ["mathml"], "application/mbox": ["mbox"], "application/mediaservercontrol+xml": ["mscml"], "application/metalink+xml": ["metalink"], "application/metalink4+xml": ["meta4"], "application/mets+xml": ["mets"], "application/mods+xml": ["mods"], "application/mp21": ["m21", "mp21"], "application/mp4": ["mp4s", "m4p"], "application/msword": ["doc", "dot"], "application/mxf": ["mxf"], "application/octet-stream": ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"], "application/oda": ["oda"], "application/oebps-package+xml": ["opf"], "application/ogg": ["ogx"], "application/omdoc+xml": ["omdoc"], "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"], "application/oxps": ["oxps"], "application/patch-ops-error+xml": ["xer"], "application/pdf": ["pdf"], "application/pgp-encrypted": ["pgp"], "application/pgp-signature": ["asc", "sig"], "application/pics-rules": ["prf"], "application/pkcs10": ["p10"], "application/pkcs7-mime": ["p7m", "p7c"], "application/pkcs7-signature": ["p7s"], "application/pkcs8": ["p8"], "application/pkix-attr-cert": ["ac"], "application/pkix-cert": ["cer"], "application/pkix-crl": ["crl"], "application/pkix-pkipath": ["pkipath"], "application/pkixcmp": ["pki"], "application/pls+xml": ["pls"], "application/postscript": ["ai", "eps", "ps"], "application/prs.cww": ["cww"], "application/pskc+xml": ["pskcxml"], "application/raml+yaml": ["raml"], "application/rdf+xml": ["rdf"], "application/reginfo+xml": ["rif"], "application/relax-ng-compact-syntax": ["rnc"], "application/resource-lists+xml": ["rl"], "application/resource-lists-diff+xml": ["rld"], "application/rls-services+xml": ["rs"], "application/rpki-ghostbusters": ["gbr"], "application/rpki-manifest": ["mft"], "application/rpki-roa": ["roa"], "application/rsd+xml": ["rsd"], "application/rss+xml": ["rss"], "application/rtf": ["rtf"], "application/sbml+xml": ["sbml"], "application/scvp-cv-request": ["scq"], "application/scvp-cv-response": ["scs"], "application/scvp-vp-request": ["spq"], "application/scvp-vp-response": ["spp"], "application/sdp": ["sdp"], "application/set-payment-initiation": ["setpay"], "application/set-registration-initiation": ["setreg"], "application/shf+xml": ["shf"], "application/smil+xml": ["smi", "smil"], "application/sparql-query": ["rq"], "application/sparql-results+xml": ["srx"], "application/srgs": ["gram"], "application/srgs+xml": ["grxml"], "application/sru+xml": ["sru"], "application/ssdl+xml": ["ssdl"], "application/ssml+xml": ["ssml"], "application/tei+xml": ["tei", "teicorpus"], "application/thraud+xml": ["tfi"], "application/timestamped-data": ["tsd"], "application/vnd.3gpp.pic-bw-large": ["plb"], "application/vnd.3gpp.pic-bw-small": ["psb"], "application/vnd.3gpp.pic-bw-var": ["pvb"], "application/vnd.3gpp2.tcap": ["tcap"], "application/vnd.3m.post-it-notes": ["pwn"], "application/vnd.accpac.simply.aso": ["aso"], "application/vnd.accpac.simply.imp": ["imp"], "application/vnd.acucobol": ["acu"], "application/vnd.acucorp": ["atc", "acutc"], "application/vnd.adobe.air-application-installer-package+zip": ["air"], "application/vnd.adobe.formscentral.fcdt": ["fcdt"], "application/vnd.adobe.fxp": ["fxp", "fxpl"], "application/vnd.adobe.xdp+xml": ["xdp"], "application/vnd.adobe.xfdf": ["xfdf"], "application/vnd.ahead.space": ["ahead"], "application/vnd.airzip.filesecure.azf": ["azf"], "application/vnd.airzip.filesecure.azs": ["azs"], "application/vnd.amazon.ebook": ["azw"], "application/vnd.americandynamics.acc": ["acc"], "application/vnd.amiga.ami": ["ami"], "application/vnd.android.package-archive": ["apk"], "application/vnd.anser-web-certificate-issue-initiation": ["cii"], "application/vnd.anser-web-funds-transfer-initiation": ["fti"], "application/vnd.antix.game-component": ["atx"], "application/vnd.apple.installer+xml": ["mpkg"], "application/vnd.apple.mpegurl": ["m3u8"], "application/vnd.apple.pkpass": ["pkpass"], "application/vnd.aristanetworks.swi": ["swi"], "application/vnd.astraea-software.iota": ["iota"], "application/vnd.audiograph": ["aep"], "application/vnd.blueice.multipass": ["mpm"], "application/vnd.bmi": ["bmi"], "application/vnd.businessobjects": ["rep"], "application/vnd.chemdraw+xml": ["cdxml"], "application/vnd.chipnuts.karaoke-mmd": ["mmd"], "application/vnd.cinderella": ["cdy"], "application/vnd.claymore": ["cla"], "application/vnd.cloanto.rp9": ["rp9"], "application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"], "application/vnd.cluetrust.cartomobile-config": ["c11amc"], "application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"], "application/vnd.commonspace": ["csp"], "application/vnd.contact.cmsg": ["cdbcmsg"], "application/vnd.cosmocaller": ["cmc"], "application/vnd.crick.clicker": ["clkx"], "application/vnd.crick.clicker.keyboard": ["clkk"], "application/vnd.crick.clicker.palette": ["clkp"], "application/vnd.crick.clicker.template": ["clkt"], "application/vnd.crick.clicker.wordbank": ["clkw"], "application/vnd.criticaltools.wbs+xml": ["wbs"], "application/vnd.ctc-posml": ["pml"], "application/vnd.cups-ppd": ["ppd"], "application/vnd.curl.car": ["car"], "application/vnd.curl.pcurl": ["pcurl"], "application/vnd.dart": ["dart"], "application/vnd.data-vision.rdz": ["rdz"], "application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"], "application/vnd.dece.ttml+xml": ["uvt", "uvvt"], "application/vnd.dece.unspecified": ["uvx", "uvvx"], "application/vnd.dece.zip": ["uvz", "uvvz"], "application/vnd.denovo.fcselayout-link": ["fe_launch"], "application/vnd.dna": ["dna"], "application/vnd.dolby.mlp": ["mlp"], "application/vnd.dpgraph": ["dpg"], "application/vnd.dreamfactory": ["dfac"], "application/vnd.ds-keypoint": ["kpxx"], "application/vnd.dvb.ait": ["ait"], "application/vnd.dvb.service": ["svc"], "application/vnd.dynageo": ["geo"], "application/vnd.ecowin.chart": ["mag"], "application/vnd.enliven": ["nml"], "application/vnd.epson.esf": ["esf"], "application/vnd.epson.msf": ["msf"], "application/vnd.epson.quickanime": ["qam"], "application/vnd.epson.salt": ["slt"], "application/vnd.epson.ssf": ["ssf"], "application/vnd.eszigno3+xml": ["es3", "et3"], "application/vnd.ezpix-album": ["ez2"], "application/vnd.ezpix-package": ["ez3"], "application/vnd.fdf": ["fdf"], "application/vnd.fdsn.mseed": ["mseed"], "application/vnd.fdsn.seed": ["seed", "dataless"], "application/vnd.flographit": ["gph"], "application/vnd.fluxtime.clip": ["ftc"], "application/vnd.framemaker": ["fm", "frame", "maker", "book"], "application/vnd.frogans.fnc": ["fnc"], "application/vnd.frogans.ltf": ["ltf"], "application/vnd.fsc.weblaunch": ["fsc"], "application/vnd.fujitsu.oasys": ["oas"], "application/vnd.fujitsu.oasys2": ["oa2"], "application/vnd.fujitsu.oasys3": ["oa3"], "application/vnd.fujitsu.oasysgp": ["fg5"], "application/vnd.fujitsu.oasysprs": ["bh2"], "application/vnd.fujixerox.ddd": ["ddd"], "application/vnd.fujixerox.docuworks": ["xdw"], "application/vnd.fujixerox.docuworks.binder": ["xbd"], "application/vnd.fuzzysheet": ["fzs"], "application/vnd.genomatix.tuxedo": ["txd"], "application/vnd.geogebra.file": ["ggb"], "application/vnd.geogebra.tool": ["ggt"], "application/vnd.geometry-explorer": ["gex", "gre"], "application/vnd.geonext": ["gxt"], "application/vnd.geoplan": ["g2w"], "application/vnd.geospace": ["g3w"], "application/vnd.gmx": ["gmx"], "application/vnd.google-apps.document": ["gdoc"], "application/vnd.google-apps.presentation": ["gslides"], "application/vnd.google-apps.spreadsheet": ["gsheet"], "application/vnd.google-earth.kml+xml": ["kml"], "application/vnd.google-earth.kmz": ["kmz"], "application/vnd.grafeq": ["gqf", "gqs"], "application/vnd.groove-account": ["gac"], "application/vnd.groove-help": ["ghf"], "application/vnd.groove-identity-message": ["gim"], "application/vnd.groove-injector": ["grv"], "application/vnd.groove-tool-message": ["gtm"], "application/vnd.groove-tool-template": ["tpl"], "application/vnd.groove-vcard": ["vcg"], "application/vnd.hal+xml": ["hal"], "application/vnd.handheld-entertainment+xml": ["zmm"], "application/vnd.hbci": ["hbci"], "application/vnd.hhe.lesson-player": ["les"], "application/vnd.hp-hpgl": ["hpgl"], "application/vnd.hp-hpid": ["hpid"], "application/vnd.hp-hps": ["hps"], "application/vnd.hp-jlyt": ["jlt"], "application/vnd.hp-pcl": ["pcl"], "application/vnd.hp-pclxl": ["pclxl"], "application/vnd.hydrostatix.sof-data": ["sfd-hdstx"], "application/vnd.ibm.minipay": ["mpy"], "application/vnd.ibm.modcap": ["afp", "listafp", "list3820"], "application/vnd.ibm.rights-management": ["irm"], "application/vnd.ibm.secure-container": ["sc"], "application/vnd.iccprofile": ["icc", "icm"], "application/vnd.igloader": ["igl"], "application/vnd.immervision-ivp": ["ivp"], "application/vnd.immervision-ivu": ["ivu"], "application/vnd.insors.igm": ["igm"], "application/vnd.intercon.formnet": ["xpw", "xpx"], "application/vnd.intergeo": ["i2g"], "application/vnd.intu.qbo": ["qbo"], "application/vnd.intu.qfx": ["qfx"], "application/vnd.ipunplugged.rcprofile": ["rcprofile"], "application/vnd.irepository.package+xml": ["irp"], "application/vnd.is-xpr": ["xpr"], "application/vnd.isac.fcs": ["fcs"], "application/vnd.jam": ["jam"], "application/vnd.jcp.javame.midlet-rms": ["rms"], "application/vnd.jisp": ["jisp"], "application/vnd.joost.joda-archive": ["joda"], "application/vnd.kahootz": ["ktz", "ktr"], "application/vnd.kde.karbon": ["karbon"], "application/vnd.kde.kchart": ["chrt"], "application/vnd.kde.kformula": ["kfo"], "application/vnd.kde.kivio": ["flw"], "application/vnd.kde.kontour": ["kon"], "application/vnd.kde.kpresenter": ["kpr", "kpt"], "application/vnd.kde.kspread": ["ksp"], "application/vnd.kde.kword": ["kwd", "kwt"], "application/vnd.kenameaapp": ["htke"], "application/vnd.kidspiration": ["kia"], "application/vnd.kinar": ["kne", "knp"], "application/vnd.koan": ["skp", "skd", "skt", "skm"], "application/vnd.kodak-descriptor": ["sse"], "application/vnd.las.las+xml": ["lasxml"], "application/vnd.llamagraphics.life-balance.desktop": ["lbd"], "application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"], "application/vnd.lotus-1-2-3": ["123"], "application/vnd.lotus-approach": ["apr"], "application/vnd.lotus-freelance": ["pre"], "application/vnd.lotus-notes": ["nsf"], "application/vnd.lotus-organizer": ["org"], "application/vnd.lotus-screencam": ["scm"], "application/vnd.lotus-wordpro": ["lwp"], "application/vnd.macports.portpkg": ["portpkg"], "application/vnd.mcd": ["mcd"], "application/vnd.medcalcdata": ["mc1"], "application/vnd.mediastation.cdkey": ["cdkey"], "application/vnd.mfer": ["mwf"], "application/vnd.mfmp": ["mfm"], "application/vnd.micrografx.flo": ["flo"], "application/vnd.micrografx.igx": ["igx"], "application/vnd.mif": ["mif"], "application/vnd.mobius.daf": ["daf"], "application/vnd.mobius.dis": ["dis"], "application/vnd.mobius.mbk": ["mbk"], "application/vnd.mobius.mqy": ["mqy"], "application/vnd.mobius.msl": ["msl"], "application/vnd.mobius.plc": ["plc"], "application/vnd.mobius.txf": ["txf"], "application/vnd.mophun.application": ["mpn"], "application/vnd.mophun.certificate": ["mpc"], "application/vnd.mozilla.xul+xml": ["xul"], "application/vnd.ms-artgalry": ["cil"], "application/vnd.ms-cab-compressed": ["cab"], "application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], "application/vnd.ms-excel.addin.macroenabled.12": ["xlam"], "application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"], "application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"], "application/vnd.ms-excel.template.macroenabled.12": ["xltm"], "application/vnd.ms-fontobject": ["eot"], "application/vnd.ms-htmlhelp": ["chm"], "application/vnd.ms-ims": ["ims"], "application/vnd.ms-lrm": ["lrm"], "application/vnd.ms-officetheme": ["thmx"], "application/vnd.ms-outlook": ["msg"], "application/vnd.ms-pki.seccat": ["cat"], "application/vnd.ms-pki.stl": ["stl"], "application/vnd.ms-powerpoint": ["ppt", "pps", "pot"], "application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"], "application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"], "application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"], "application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"], "application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"], "application/vnd.ms-project": ["mpp", "mpt"], "application/vnd.ms-word.document.macroenabled.12": ["docm"], "application/vnd.ms-word.template.macroenabled.12": ["dotm"], "application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"], "application/vnd.ms-wpl": ["wpl"], "application/vnd.ms-xpsdocument": ["xps"], "application/vnd.mseq": ["mseq"], "application/vnd.musician": ["mus"], "application/vnd.muvee.style": ["msty"], "application/vnd.mynfc": ["taglet"], "application/vnd.neurolanguage.nlu": ["nlu"], "application/vnd.nitf": ["ntf", "nitf"], "application/vnd.noblenet-directory": ["nnd"], "application/vnd.noblenet-sealer": ["nns"], "application/vnd.noblenet-web": ["nnw"], "application/vnd.nokia.n-gage.data": ["ngdat"], "application/vnd.nokia.n-gage.symbian.install": ["n-gage"], "application/vnd.nokia.radio-preset": ["rpst"], "application/vnd.nokia.radio-presets": ["rpss"], "application/vnd.novadigm.edm": ["edm"], "application/vnd.novadigm.edx": ["edx"], "application/vnd.novadigm.ext": ["ext"], "application/vnd.oasis.opendocument.chart": ["odc"], "application/vnd.oasis.opendocument.chart-template": ["otc"], "application/vnd.oasis.opendocument.database": ["odb"], "application/vnd.oasis.opendocument.formula": ["odf"], "application/vnd.oasis.opendocument.formula-template": ["odft"], "application/vnd.oasis.opendocument.graphics": ["odg"], "application/vnd.oasis.opendocument.graphics-template": ["otg"], "application/vnd.oasis.opendocument.image": ["odi"], "application/vnd.oasis.opendocument.image-template": ["oti"], "application/vnd.oasis.opendocument.presentation": ["odp"], "application/vnd.oasis.opendocument.presentation-template": ["otp"], "application/vnd.oasis.opendocument.spreadsheet": ["ods"], "application/vnd.oasis.opendocument.spreadsheet-template": ["ots"], "application/vnd.oasis.opendocument.text": ["odt"], "application/vnd.oasis.opendocument.text-master": ["odm"], "application/vnd.oasis.opendocument.text-template": ["ott"], "application/vnd.oasis.opendocument.text-web": ["oth"], "application/vnd.olpc-sugar": ["xo"], "application/vnd.oma.dd2+xml": ["dd2"], "application/vnd.openofficeorg.extension": ["oxt"], "application/vnd.openxmlformats-officedocument.presentationml.presentation": ["pptx"], "application/vnd.openxmlformats-officedocument.presentationml.slide": ["sldx"], "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ["ppsx"], "application/vnd.openxmlformats-officedocument.presentationml.template": ["potx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.template": ["xltx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ["docx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.template": ["dotx"], "application/vnd.osgeo.mapguide.package": ["mgp"], "application/vnd.osgi.dp": ["dp"], "application/vnd.osgi.subsystem": ["esa"], "application/vnd.palm": ["pdb", "pqa", "oprc"], "application/vnd.pawaafile": ["paw"], "application/vnd.pg.format": ["str"], "application/vnd.pg.osasli": ["ei6"], "application/vnd.picsel": ["efif"], "application/vnd.pmi.widget": ["wg"], "application/vnd.pocketlearn": ["plf"], "application/vnd.powerbuilder6": ["pbd"], "application/vnd.previewsystems.box": ["box"], "application/vnd.proteus.magazine": ["mgz"], "application/vnd.publishare-delta-tree": ["qps"], "application/vnd.pvi.ptid1": ["ptid"], "application/vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], "application/vnd.realvnc.bed": ["bed"], "application/vnd.recordare.musicxml": ["mxl"], "application/vnd.recordare.musicxml+xml": ["musicxml"], "application/vnd.rig.cryptonote": ["cryptonote"], "application/vnd.rim.cod": ["cod"], "application/vnd.rn-realmedia": ["rm"], "application/vnd.rn-realmedia-vbr": ["rmvb"], "application/vnd.route66.link66+xml": ["link66"], "application/vnd.sailingtracker.track": ["st"], "application/vnd.seemail": ["see"], "application/vnd.sema": ["sema"], "application/vnd.semd": ["semd"], "application/vnd.semf": ["semf"], "application/vnd.shana.informed.formdata": ["ifm"], "application/vnd.shana.informed.formtemplate": ["itp"], "application/vnd.shana.informed.interchange": ["iif"], "application/vnd.shana.informed.package": ["ipk"], "application/vnd.simtech-mindmapper": ["twd", "twds"], "application/vnd.smaf": ["mmf"], "application/vnd.smart.teacher": ["teacher"], "application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"], "application/vnd.spotfire.dxp": ["dxp"], "application/vnd.spotfire.sfs": ["sfs"], "application/vnd.stardivision.calc": ["sdc"], "application/vnd.stardivision.draw": ["sda"], "application/vnd.stardivision.impress": ["sdd"], "application/vnd.stardivision.math": ["smf"], "application/vnd.stardivision.writer": ["sdw", "vor"], "application/vnd.stardivision.writer-global": ["sgl"], "application/vnd.stepmania.package": ["smzip"], "application/vnd.stepmania.stepchart": ["sm"], "application/vnd.sun.wadl+xml": ["wadl"], "application/vnd.sun.xml.calc": ["sxc"], "application/vnd.sun.xml.calc.template": ["stc"], "application/vnd.sun.xml.draw": ["sxd"], "application/vnd.sun.xml.draw.template": ["std"], "application/vnd.sun.xml.impress": ["sxi"], "application/vnd.sun.xml.impress.template": ["sti"], "application/vnd.sun.xml.math": ["sxm"], "application/vnd.sun.xml.writer": ["sxw"], "application/vnd.sun.xml.writer.global": ["sxg"], "application/vnd.sun.xml.writer.template": ["stw"], "application/vnd.sus-calendar": ["sus", "susp"], "application/vnd.svd": ["svd"], "application/vnd.symbian.install": ["sis", "sisx"], "application/vnd.syncml+xml": ["xsm"], "application/vnd.syncml.dm+wbxml": ["bdm"], "application/vnd.syncml.dm+xml": ["xdm"], "application/vnd.tao.intent-module-archive": ["tao"], "application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"], "application/vnd.tmobile-livetv": ["tmo"], "application/vnd.trid.tpt": ["tpt"], "application/vnd.triscape.mxs": ["mxs"], "application/vnd.trueapp": ["tra"], "application/vnd.ufdl": ["ufd", "ufdl"], "application/vnd.uiq.theme": ["utz"], "application/vnd.umajin": ["umj"], "application/vnd.unity": ["unityweb"], "application/vnd.uoml+xml": ["uoml"], "application/vnd.vcx": ["vcx"], "application/vnd.visio": ["vsd", "vst", "vss", "vsw"], "application/vnd.visionary": ["vis"], "application/vnd.vsf": ["vsf"], "application/vnd.wap.wbxml": ["wbxml"], "application/vnd.wap.wmlc": ["wmlc"], "application/vnd.wap.wmlscriptc": ["wmlsc"], "application/vnd.webturbo": ["wtb"], "application/vnd.wolfram.player": ["nbp"], "application/vnd.wordperfect": ["wpd"], "application/vnd.wqd": ["wqd"], "application/vnd.wt.stf": ["stf"], "application/vnd.xara": ["xar"], "application/vnd.xfdl": ["xfdl"], "application/vnd.yamaha.hv-dic": ["hvd"], "application/vnd.yamaha.hv-script": ["hvs"], "application/vnd.yamaha.hv-voice": ["hvp"], "application/vnd.yamaha.openscoreformat": ["osf"], "application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"], "application/vnd.yamaha.smaf-audio": ["saf"], "application/vnd.yamaha.smaf-phrase": ["spf"], "application/vnd.yellowriver-custom-menu": ["cmp"], "application/vnd.zul": ["zir", "zirz"], "application/vnd.zzazz.deck+xml": ["zaz"], "application/voicexml+xml": ["vxml"], "application/wasm": ["wasm"], "application/widget": ["wgt"], "application/winhlp": ["hlp"], "application/wsdl+xml": ["wsdl"], "application/wspolicy+xml": ["wspolicy"], "application/x-7z-compressed": ["7z"], "application/x-abiword": ["abw"], "application/x-ace-compressed": ["ace"], "application/x-apple-diskimage": [], "application/x-arj": ["arj"], "application/x-authorware-bin": ["aab", "x32", "u32", "vox"], "application/x-authorware-map": ["aam"], "application/x-authorware-seg": ["aas"], "application/x-bcpio": ["bcpio"], "application/x-bdoc": [], "application/x-bittorrent": ["torrent"], "application/x-blorb": ["blb", "blorb"], "application/x-bzip": ["bz"], "application/x-bzip2": ["bz2", "boz"], "application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"], "application/x-cdlink": ["vcd"], "application/x-cfs-compressed": ["cfs"], "application/x-chat": ["chat"], "application/x-chess-pgn": ["pgn"], "application/x-chrome-extension": ["crx"], "application/x-cocoa": ["cco"], "application/x-conference": ["nsc"], "application/x-cpio": ["cpio"], "application/x-csh": ["csh"], "application/x-debian-package": ["udeb"], "application/x-dgc-compressed": ["dgc"], "application/x-director": ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"], "application/x-doom": ["wad"], "application/x-dtbncx+xml": ["ncx"], "application/x-dtbook+xml": ["dtb"], "application/x-dtbresource+xml": ["res"], "application/x-dvi": ["dvi"], "application/x-envoy": ["evy"], "application/x-eva": ["eva"], "application/x-font-bdf": ["bdf"], "application/x-font-ghostscript": ["gsf"], "application/x-font-linux-psf": ["psf"], "application/x-font-pcf": ["pcf"], "application/x-font-snf": ["snf"], "application/x-font-type1": ["pfa", "pfb", "pfm", "afm"], "application/x-freearc": ["arc"], "application/x-futuresplash": ["spl"], "application/x-gca-compressed": ["gca"], "application/x-glulx": ["ulx"], "application/x-gnumeric": ["gnumeric"], "application/x-gramps-xml": ["gramps"], "application/x-gtar": ["gtar"], "application/x-hdf": ["hdf"], "application/x-httpd-php": ["php"], "application/x-install-instructions": ["install"], "application/x-iso9660-image": [], "application/x-java-archive-diff": ["jardiff"], "application/x-java-jnlp-file": ["jnlp"], "application/x-latex": ["latex"], "application/x-lua-bytecode": ["luac"], "application/x-lzh-compressed": ["lzh", "lha"], "application/x-makeself": ["run"], "application/x-mie": ["mie"], "application/x-mobipocket-ebook": ["prc", "mobi"], "application/x-ms-application": ["application"], "application/x-ms-shortcut": ["lnk"], "application/x-ms-wmd": ["wmd"], "application/x-ms-wmz": ["wmz"], "application/x-ms-xbap": ["xbap"], "application/x-msaccess": ["mdb"], "application/x-msbinder": ["obd"], "application/x-mscardfile": ["crd"], "application/x-msclip": ["clp"], "application/x-msdos-program": [], "application/x-msdownload": ["com", "bat"], "application/x-msmediaview": ["mvb", "m13", "m14"], "application/x-msmetafile": ["wmf", "emf", "emz"], "application/x-msmoney": ["mny"], "application/x-mspublisher": ["pub"], "application/x-msschedule": ["scd"], "application/x-msterminal": ["trm"], "application/x-mswrite": ["wri"], "application/x-netcdf": ["nc", "cdf"], "application/x-ns-proxy-autoconfig": ["pac"], "application/x-nzb": ["nzb"], "application/x-perl": ["pl", "pm"], "application/x-pilot": [], "application/x-pkcs12": ["p12", "pfx"], "application/x-pkcs7-certificates": ["p7b", "spc"], "application/x-pkcs7-certreqresp": ["p7r"], "application/x-rar-compressed": ["rar"], "application/x-redhat-package-manager": ["rpm"], "application/x-research-info-systems": ["ris"], "application/x-sea": ["sea"], "application/x-sh": ["sh"], "application/x-shar": ["shar"], "application/x-shockwave-flash": ["swf"], "application/x-silverlight-app": ["xap"], "application/x-sql": ["sql"], "application/x-stuffit": ["sit"], "application/x-stuffitx": ["sitx"], "application/x-subrip": ["srt"], "application/x-sv4cpio": ["sv4cpio"], "application/x-sv4crc": ["sv4crc"], "application/x-t3vm-image": ["t3"], "application/x-tads": ["gam"], "application/x-tar": ["tar"], "application/x-tcl": ["tcl", "tk"], "application/x-tex": ["tex"], "application/x-tex-tfm": ["tfm"], "application/x-texinfo": ["texinfo", "texi"], "application/x-tgif": ["obj"], "application/x-ustar": ["ustar"], "application/x-virtualbox-hdd": ["hdd"], "application/x-virtualbox-ova": ["ova"], "application/x-virtualbox-ovf": ["ovf"], "application/x-virtualbox-vbox": ["vbox"], "application/x-virtualbox-vbox-extpack": ["vbox-extpack"], "application/x-virtualbox-vdi": ["vdi"], "application/x-virtualbox-vhd": ["vhd"], "application/x-virtualbox-vmdk": ["vmdk"], "application/x-wais-source": ["src"], "application/x-web-app-manifest+json": ["webapp"], "application/x-x509-ca-cert": ["der", "crt", "pem"], "application/x-xfig": ["fig"], "application/x-xliff+xml": ["xlf"], "application/x-xpinstall": ["xpi"], "application/x-xz": ["xz"], "application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], "application/xaml+xml": ["xaml"], "application/xcap-diff+xml": ["xdf"], "application/xenc+xml": ["xenc"], "application/xhtml+xml": ["xhtml", "xht"], "application/xml": ["xml", "xsl", "xsd", "rng"], "application/xml-dtd": ["dtd"], "application/xop+xml": ["xop"], "application/xproc+xml": ["xpl"], "application/xslt+xml": ["xslt"], "application/xspf+xml": ["xspf"], "application/xv+xml": ["mxml", "xhvml", "xvml", "xvm"], "application/yang": ["yang"], "application/yin+xml": ["yin"], "application/zip": ["zip"], "audio/3gpp": [], "audio/adpcm": ["adp"], "audio/basic": ["au", "snd"], "audio/midi": ["mid", "midi", "kar", "rmi"], "audio/mp3": [], "audio/mp4": ["m4a", "mp4a"], "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"], "audio/ogg": ["oga", "ogg", "spx"], "audio/s3m": ["s3m"], "audio/silk": ["sil"], "audio/vnd.dece.audio": ["uva", "uvva"], "audio/vnd.digital-winds": ["eol"], "audio/vnd.dra": ["dra"], "audio/vnd.dts": ["dts"], "audio/vnd.dts.hd": ["dtshd"], "audio/vnd.lucent.voice": ["lvp"], "audio/vnd.ms-playready.media.pya": ["pya"], "audio/vnd.nuera.ecelp4800": ["ecelp4800"], "audio/vnd.nuera.ecelp7470": ["ecelp7470"], "audio/vnd.nuera.ecelp9600": ["ecelp9600"], "audio/vnd.rip": ["rip"], "audio/wav": ["wav"], "audio/wave": [], "audio/webm": ["weba"], "audio/x-aac": ["aac"], "audio/x-aiff": ["aif", "aiff", "aifc"], "audio/x-caf": ["caf"], "audio/x-flac": ["flac"], "audio/x-m4a": [], "audio/x-matroska": ["mka"], "audio/x-mpegurl": ["m3u"], "audio/x-ms-wax": ["wax"], "audio/x-ms-wma": ["wma"], "audio/x-pn-realaudio": ["ram", "ra"], "audio/x-pn-realaudio-plugin": ["rmp"], "audio/x-realaudio": [], "audio/x-wav": [], "audio/xm": ["xm"], "chemical/x-cdx": ["cdx"], "chemical/x-cif": ["cif"], "chemical/x-cmdf": ["cmdf"], "chemical/x-cml": ["cml"], "chemical/x-csml": ["csml"], "chemical/x-xyz": ["xyz"], "font/collection": ["ttc"], "font/otf": ["otf"], "font/ttf": ["ttf"], "font/woff": ["woff"], "font/woff2": ["woff2"], "image/apng": ["apng"], "image/bmp": ["bmp"], "image/cgm": ["cgm"], "image/g3fax": ["g3"], "image/gif": ["gif"], "image/ief": ["ief"], "image/jp2": ["jp2", "jpg2"], "image/jpeg": ["jpeg", "jpg", "jpe"], "image/jpm": ["jpm"], "image/jpx": ["jpx", "jpf"], "image/ktx": ["ktx"], "image/png": ["png"], "image/prs.btif": ["btif"], "image/sgi": ["sgi"], "image/svg+xml": ["svg", "svgz"], "image/tiff": ["tiff", "tif"], "image/vnd.adobe.photoshop": ["psd"], "image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"], "image/vnd.djvu": ["djvu", "djv"], "image/vnd.dvb.subtitle": [], "image/vnd.dwg": ["dwg"], "image/vnd.dxf": ["dxf"], "image/vnd.fastbidsheet": ["fbs"], "image/vnd.fpx": ["fpx"], "image/vnd.fst": ["fst"], "image/vnd.fujixerox.edmics-mmr": ["mmr"], "image/vnd.fujixerox.edmics-rlc": ["rlc"], "image/vnd.ms-modi": ["mdi"], "image/vnd.ms-photo": ["wdp"], "image/vnd.net-fpx": ["npx"], "image/vnd.wap.wbmp": ["wbmp"], "image/vnd.xiff": ["xif"], "image/webp": ["webp"], "image/x-3ds": ["3ds"], "image/x-cmu-raster": ["ras"], "image/x-cmx": ["cmx"], "image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"], "image/x-icon": ["ico"], "image/x-jng": ["jng"], "image/x-mrsid-image": ["sid"], "image/x-ms-bmp": [], "image/x-pcx": ["pcx"], "image/x-pict": ["pic", "pct"], "image/x-portable-anymap": ["pnm"], "image/x-portable-bitmap": ["pbm"], "image/x-portable-graymap": ["pgm"], "image/x-portable-pixmap": ["ppm"], "image/x-rgb": ["rgb"], "image/x-tga": ["tga"], "image/x-xbitmap": ["xbm"], "image/x-xpixmap": ["xpm"], "image/x-xwindowdump": ["xwd"], "message/rfc822": ["eml", "mime"], "model/gltf+json": ["gltf"], "model/gltf-binary": ["glb"], "model/iges": ["igs", "iges"], "model/mesh": ["msh", "mesh", "silo"], "model/vnd.collada+xml": ["dae"], "model/vnd.dwf": ["dwf"], "model/vnd.gdl": ["gdl"], "model/vnd.gtw": ["gtw"], "model/vnd.mts": ["mts"], "model/vnd.vtu": ["vtu"], "model/vrml": ["wrl", "vrml"], "model/x3d+binary": ["x3db", "x3dbz"], "model/x3d+vrml": ["x3dv", "x3dvz"], "model/x3d+xml": ["x3d", "x3dz"], "text/cache-manifest": ["appcache", "manifest"], "text/calendar": ["ics", "ifb"], "text/coffeescript": ["coffee", "litcoffee"], "text/css": ["css"], "text/csv": ["csv"], "text/hjson": ["hjson"], "text/html": ["html", "htm", "shtml"], "text/jade": ["jade"], "text/jsx": ["jsx"], "text/less": ["less"], "text/markdown": ["markdown", "md"], "text/mathml": ["mml"], "text/n3": ["n3"], "text/plain": ["txt", "text", "conf", "def", "list", "log", "in", "ini"], "text/prs.lines.tag": ["dsc"], "text/richtext": ["rtx"], "text/rtf": [], "text/sgml": ["sgml", "sgm"], "text/slim": ["slim", "slm"], "text/stylus": ["stylus", "styl"], "text/tab-separated-values": ["tsv"], "text/troff": ["t", "tr", "roff", "man", "me", "ms"], "text/turtle": ["ttl"], "text/uri-list": ["uri", "uris", "urls"], "text/vcard": ["vcard"], "text/vnd.curl": ["curl"], "text/vnd.curl.dcurl": ["dcurl"], "text/vnd.curl.mcurl": ["mcurl"], "text/vnd.curl.scurl": ["scurl"], "text/vnd.dvb.subtitle": ["sub"], "text/vnd.fly": ["fly"], "text/vnd.fmi.flexstor": ["flx"], "text/vnd.graphviz": ["gv"], "text/vnd.in3d.3dml": ["3dml"], "text/vnd.in3d.spot": ["spot"], "text/vnd.sun.j2me.app-descriptor": ["jad"], "text/vnd.wap.wml": ["wml"], "text/vnd.wap.wmlscript": ["wmls"], "text/vtt": ["vtt"], "text/x-asm": ["s", "asm"], "text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], "text/x-component": ["htc"], "text/x-fortran": ["f", "for", "f77", "f90"], "text/x-handlebars-template": ["hbs"], "text/x-java-source": ["java"], "text/x-lua": ["lua"], "text/x-markdown": ["mkd"], "text/x-nfo": ["nfo"], "text/x-opml": ["opml"], "text/x-org": [], "text/x-pascal": ["p", "pas"], "text/x-processing": ["pde"], "text/x-sass": ["sass"], "text/x-scss": ["scss"], "text/x-setext": ["etx"], "text/x-sfv": ["sfv"], "text/x-suse-ymp": ["ymp"], "text/x-uuencode": ["uu"], "text/x-vcalendar": ["vcs"], "text/x-vcard": ["vcf"], "text/xml": [], "text/yaml": ["yaml", "yml"], "video/3gpp": ["3gp", "3gpp"], "video/3gpp2": ["3g2"], "video/h261": ["h261"], "video/h263": ["h263"], "video/h264": ["h264"], "video/jpeg": ["jpgv"], "video/jpm": ["jpgm"], "video/mj2": ["mj2", "mjp2"], "video/mp2t": ["ts"], "video/mp4": ["mp4", "mp4v", "mpg4"], "video/mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v"], "video/ogg": ["ogv"], "video/quicktime": ["qt", "mov"], "video/vnd.dece.hd": ["uvh", "uvvh"], "video/vnd.dece.mobile": ["uvm", "uvvm"], "video/vnd.dece.pd": ["uvp", "uvvp"], "video/vnd.dece.sd": ["uvs", "uvvs"], "video/vnd.dece.video": ["uvv", "uvvv"], "video/vnd.dvb.file": ["dvb"], "video/vnd.fvt": ["fvt"], "video/vnd.mpegurl": ["mxu", "m4u"], "video/vnd.ms-playready.media.pyv": ["pyv"], "video/vnd.uvvu.mp4": ["uvu", "uvvu"], "video/vnd.vivo": ["viv"], "video/webm": ["webm"], "video/x-f4v": ["f4v"], "video/x-fli": ["fli"], "video/x-flv": ["flv"], "video/x-m4v": ["m4v"], "video/x-matroska": ["mkv", "mk3d", "mks"], "video/x-mng": ["mng"], "video/x-ms-asf": ["asf", "asx"], "video/x-ms-vob": ["vob"], "video/x-ms-wm": ["wm"], "video/x-ms-wmv": ["wmv"], "video/x-ms-wmx": ["wmx"], "video/x-ms-wvx": ["wvx"], "video/x-msvideo": ["avi"], "video/x-sgi-movie": ["movie"], "video/x-smv": ["smv"], "x-conference/x-cooltalk": ["ice"] };
-  }
-});
-
-// node_modules/send/node_modules/mime/mime.js
-var require_mime = __commonJS({
-  "node_modules/send/node_modules/mime/mime.js"(exports, module) {
-    var path = __require("path");
-    var fs = __require("fs");
-    function Mime() {
-      this.types = /* @__PURE__ */ Object.create(null);
-      this.extensions = /* @__PURE__ */ Object.create(null);
-    }
-    Mime.prototype.define = function(map) {
-      for (var type in map) {
-        var exts = map[type];
-        for (var i = 0; i < exts.length; i++) {
-          if (process.env.DEBUG_MIME && this.types[exts[i]]) {
-            console.warn((this._loading || "define()").replace(/.*\//, ""), 'changes "' + exts[i] + '" extension type from ' + this.types[exts[i]] + " to " + type);
-          }
-          this.types[exts[i]] = type;
-        }
-        if (!this.extensions[type]) {
-          this.extensions[type] = exts[0];
-        }
-      }
-    };
-    Mime.prototype.load = function(file) {
-      this._loading = file;
-      var map = {}, content = fs.readFileSync(file, "ascii"), lines = content.split(/[\r\n]+/);
-      lines.forEach(function(line) {
-        var fields = line.replace(/\s*#.*|^\s*|\s*$/g, "").split(/\s+/);
-        map[fields.shift()] = fields;
-      });
-      this.define(map);
-      this._loading = null;
-    };
-    Mime.prototype.lookup = function(path2, fallback) {
-      var ext = path2.replace(/^.*[\.\/\\]/, "").toLowerCase();
-      return this.types[ext] || fallback || this.default_type;
-    };
-    Mime.prototype.extension = function(mimeType) {
-      var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
-      return this.extensions[type];
-    };
-    var mime = new Mime();
-    mime.define(require_types());
-    mime.default_type = mime.lookup("bin");
-    mime.Mime = Mime;
-    mime.charsets = {
-      lookup: function(mimeType, fallback) {
-        return /^text\/|^application\/(javascript|json)/.test(mimeType) ? "UTF-8" : fallback;
-      }
-    };
-    module.exports = mime;
-  }
-});
-
-// node_modules/ms/index.js
-var require_ms5 = __commonJS({
-  "node_modules/ms/index.js"(exports, module) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var w = d * 7;
-    var y = d * 365.25;
-    module.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isFinite(val)) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "weeks":
-        case "week":
-        case "w":
-          return n * w;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      var msAbs = Math.abs(ms);
-      if (msAbs >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (msAbs >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (msAbs >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (msAbs >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      var msAbs = Math.abs(ms);
-      if (msAbs >= d) {
-        return plural(ms, msAbs, d, "day");
-      }
-      if (msAbs >= h) {
-        return plural(ms, msAbs, h, "hour");
-      }
-      if (msAbs >= m) {
-        return plural(ms, msAbs, m, "minute");
-      }
-      if (msAbs >= s) {
-        return plural(ms, msAbs, s, "second");
-      }
-      return ms + " ms";
-    }
-    function plural(ms, msAbs, n, name) {
-      var isPlural = msAbs >= n * 1.5;
-      return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
-    }
-  }
-});
-
-// node_modules/range-parser/index.js
-var require_range_parser = __commonJS({
-  "node_modules/range-parser/index.js"(exports, module) {
-    "use strict";
-    module.exports = rangeParser;
-    function rangeParser(size, str, options) {
-      if (typeof str !== "string") {
-        throw new TypeError("argument str must be a string");
-      }
-      var index = str.indexOf("=");
-      if (index === -1) {
-        return -2;
-      }
-      var arr = str.slice(index + 1).split(",");
-      var ranges = [];
-      ranges.type = str.slice(0, index);
-      for (var i = 0; i < arr.length; i++) {
-        var range = arr[i].split("-");
-        var start = parseInt(range[0], 10);
-        var end = parseInt(range[1], 10);
-        if (isNaN(start)) {
-          start = size - end;
-          end = size - 1;
-        } else if (isNaN(end)) {
-          end = size - 1;
-        }
-        if (end > size - 1) {
-          end = size - 1;
-        }
-        if (isNaN(start) || isNaN(end) || start > end || start < 0) {
-          continue;
-        }
-        ranges.push({
-          start,
-          end
-        });
-      }
-      if (ranges.length < 1) {
-        return -1;
-      }
-      return options && options.combine ? combineRanges(ranges) : ranges;
-    }
-    function combineRanges(ranges) {
-      var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart);
-      for (var j = 0, i = 1; i < ordered.length; i++) {
-        var range = ordered[i];
-        var current = ordered[j];
-        if (range.start > current.end + 1) {
-          ordered[++j] = range;
-        } else if (range.end > current.end) {
-          current.end = range.end;
-          current.index = Math.min(current.index, range.index);
-        }
-      }
-      ordered.length = j + 1;
-      var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex);
-      combined.type = ranges.type;
-      return combined;
-    }
-    function mapWithIndex(range, index) {
-      return {
-        start: range.start,
-        end: range.end,
-        index
-      };
-    }
-    function mapWithoutIndex(range) {
-      return {
-        start: range.start,
-        end: range.end
-      };
-    }
-    function sortByRangeIndex(a, b) {
-      return a.index - b.index;
-    }
-    function sortByRangeStart(a, b) {
-      return a.start - b.start;
-    }
-  }
-});
-
-// node_modules/send/index.js
-var require_send = __commonJS({
-  "node_modules/send/index.js"(exports, module) {
-    "use strict";
-    var createError = require_http_errors();
-    var debug = require_src4()("send");
-    var deprecate = require_depd()("send");
-    var destroy = require_destroy();
-    var encodeUrl = require_encodeurl2();
-    var escapeHtml = require_escape_html();
-    var etag = require_etag();
-    var fresh = require_fresh();
-    var fs = __require("fs");
-    var mime = require_mime();
-    var ms = require_ms5();
-    var onFinished = require_on_finished();
-    var parseRange = require_range_parser();
-    var path = __require("path");
-    var statuses = require_statuses();
-    var Stream = __require("stream");
-    var util = __require("util");
-    var extname = path.extname;
-    var join = path.join;
-    var normalize = path.normalize;
-    var resolve = path.resolve;
-    var sep = path.sep;
-    var BYTES_RANGE_REGEXP = /^ *bytes=/;
-    var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1e3;
-    var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
-    module.exports = send;
-    module.exports.mime = mime;
-    function send(req, path2, options) {
-      return new SendStream(req, path2, options);
-    }
-    function SendStream(req, path2, options) {
-      Stream.call(this);
-      var opts = options || {};
-      this.options = opts;
-      this.path = path2;
-      this.req = req;
-      this._acceptRanges = opts.acceptRanges !== void 0 ? Boolean(opts.acceptRanges) : true;
-      this._cacheControl = opts.cacheControl !== void 0 ? Boolean(opts.cacheControl) : true;
-      this._etag = opts.etag !== void 0 ? Boolean(opts.etag) : true;
-      this._dotfiles = opts.dotfiles !== void 0 ? opts.dotfiles : "ignore";
-      if (this._dotfiles !== "ignore" && this._dotfiles !== "allow" && this._dotfiles !== "deny") {
-        throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"');
-      }
-      this._hidden = Boolean(opts.hidden);
-      if (opts.hidden !== void 0) {
-        deprecate("hidden: use dotfiles: '" + (this._hidden ? "allow" : "ignore") + "' instead");
-      }
-      if (opts.dotfiles === void 0) {
-        this._dotfiles = void 0;
-      }
-      this._extensions = opts.extensions !== void 0 ? normalizeList(opts.extensions, "extensions option") : [];
-      this._immutable = opts.immutable !== void 0 ? Boolean(opts.immutable) : false;
-      this._index = opts.index !== void 0 ? normalizeList(opts.index, "index option") : ["index.html"];
-      this._lastModified = opts.lastModified !== void 0 ? Boolean(opts.lastModified) : true;
-      this._maxage = opts.maxAge || opts.maxage;
-      this._maxage = typeof this._maxage === "string" ? ms(this._maxage) : Number(this._maxage);
-      this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0;
-      this._root = opts.root ? resolve(opts.root) : null;
-      if (!this._root && opts.from) {
-        this.from(opts.from);
-      }
-    }
-    util.inherits(SendStream, Stream);
-    SendStream.prototype.etag = deprecate.function(function etag2(val) {
-      this._etag = Boolean(val);
-      debug("etag %s", this._etag);
-      return this;
-    }, "send.etag: pass etag as option");
-    SendStream.prototype.hidden = deprecate.function(function hidden(val) {
-      this._hidden = Boolean(val);
-      this._dotfiles = void 0;
-      debug("hidden %s", this._hidden);
-      return this;
-    }, "send.hidden: use dotfiles option");
-    SendStream.prototype.index = deprecate.function(function index(paths) {
-      var index2 = !paths ? [] : normalizeList(paths, "paths argument");
-      debug("index %o", paths);
-      this._index = index2;
-      return this;
-    }, "send.index: pass index as option");
-    SendStream.prototype.root = function root(path2) {
-      this._root = resolve(String(path2));
-      debug("root %s", this._root);
-      return this;
-    };
-    SendStream.prototype.from = deprecate.function(SendStream.prototype.root, "send.from: pass root as option");
-    SendStream.prototype.root = deprecate.function(SendStream.prototype.root, "send.root: pass root as option");
-    SendStream.prototype.maxage = deprecate.function(function maxage(maxAge) {
-      this._maxage = typeof maxAge === "string" ? ms(maxAge) : Number(maxAge);
-      this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0;
-      debug("max-age %d", this._maxage);
-      return this;
-    }, "send.maxage: pass maxAge as option");
-    SendStream.prototype.error = function error(status, err) {
-      if (hasListeners(this, "error")) {
-        return this.emit("error", createHttpError(status, err));
-      }
-      var res = this.res;
-      var msg = statuses.message[status] || String(status);
-      var doc = createHtmlDocument("Error", escapeHtml(msg));
-      clearHeaders(res);
-      if (err && err.headers) {
-        setHeaders(res, err.headers);
-      }
-      res.statusCode = status;
-      res.setHeader("Content-Type", "text/html; charset=UTF-8");
-      res.setHeader("Content-Length", Buffer.byteLength(doc));
-      res.setHeader("Content-Security-Policy", "default-src 'none'");
-      res.setHeader("X-Content-Type-Options", "nosniff");
-      res.end(doc);
-    };
-    SendStream.prototype.hasTrailingSlash = function hasTrailingSlash() {
-      return this.path[this.path.length - 1] === "/";
-    };
-    SendStream.prototype.isConditionalGET = function isConditionalGET() {
-      return this.req.headers["if-match"] || this.req.headers["if-unmodified-since"] || this.req.headers["if-none-match"] || this.req.headers["if-modified-since"];
-    };
-    SendStream.prototype.isPreconditionFailure = function isPreconditionFailure() {
-      var req = this.req;
-      var res = this.res;
-      var match = req.headers["if-match"];
-      if (match) {
-        var etag2 = res.getHeader("ETag");
-        return !etag2 || match !== "*" && parseTokenList(match).every(function(match2) {
-          return match2 !== etag2 && match2 !== "W/" + etag2 && "W/" + match2 !== etag2;
-        });
-      }
-      var unmodifiedSince = parseHttpDate(req.headers["if-unmodified-since"]);
-      if (!isNaN(unmodifiedSince)) {
-        var lastModified = parseHttpDate(res.getHeader("Last-Modified"));
-        return isNaN(lastModified) || lastModified > unmodifiedSince;
-      }
-      return false;
-    };
-    SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields() {
-      var res = this.res;
-      res.removeHeader("Content-Encoding");
-      res.removeHeader("Content-Language");
-      res.removeHeader("Content-Length");
-      res.removeHeader("Content-Range");
-      res.removeHeader("Content-Type");
-    };
-    SendStream.prototype.notModified = function notModified() {
-      var res = this.res;
-      debug("not modified");
-      this.removeContentHeaderFields();
-      res.statusCode = 304;
-      res.end();
-    };
-    SendStream.prototype.headersAlreadySent = function headersAlreadySent() {
-      var err = new Error("Can't set headers after they are sent.");
-      debug("headers already sent");
-      this.error(500, err);
-    };
-    SendStream.prototype.isCachable = function isCachable() {
-      var statusCode = this.res.statusCode;
-      return statusCode >= 200 && statusCode < 300 || statusCode === 304;
-    };
-    SendStream.prototype.onStatError = function onStatError(error) {
-      switch (error.code) {
-        case "ENAMETOOLONG":
-        case "ENOENT":
-        case "ENOTDIR":
-          this.error(404, error);
-          break;
-        default:
-          this.error(500, error);
-          break;
-      }
-    };
-    SendStream.prototype.isFresh = function isFresh() {
-      return fresh(this.req.headers, {
-        etag: this.res.getHeader("ETag"),
-        "last-modified": this.res.getHeader("Last-Modified")
-      });
-    };
-    SendStream.prototype.isRangeFresh = function isRangeFresh() {
-      var ifRange = this.req.headers["if-range"];
-      if (!ifRange) {
-        return true;
-      }
-      if (ifRange.indexOf('"') !== -1) {
-        var etag2 = this.res.getHeader("ETag");
-        return Boolean(etag2 && ifRange.indexOf(etag2) !== -1);
-      }
-      var lastModified = this.res.getHeader("Last-Modified");
-      return parseHttpDate(lastModified) <= parseHttpDate(ifRange);
-    };
-    SendStream.prototype.redirect = function redirect(path2) {
-      var res = this.res;
-      if (hasListeners(this, "directory")) {
-        this.emit("directory", res, path2);
-        return;
-      }
-      if (this.hasTrailingSlash()) {
-        this.error(403);
-        return;
-      }
-      var loc = encodeUrl(collapseLeadingSlashes(this.path + "/"));
-      var doc = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc));
-      res.statusCode = 301;
-      res.setHeader("Content-Type", "text/html; charset=UTF-8");
-      res.setHeader("Content-Length", Buffer.byteLength(doc));
-      res.setHeader("Content-Security-Policy", "default-src 'none'");
-      res.setHeader("X-Content-Type-Options", "nosniff");
-      res.setHeader("Location", loc);
-      res.end(doc);
-    };
-    SendStream.prototype.pipe = function pipe(res) {
-      var root = this._root;
-      this.res = res;
-      var path2 = decode(this.path);
-      if (path2 === -1) {
-        this.error(400);
-        return res;
-      }
-      if (~path2.indexOf("\0")) {
-        this.error(400);
-        return res;
-      }
-      var parts;
-      if (root !== null) {
-        if (path2) {
-          path2 = normalize("." + sep + path2);
-        }
-        if (UP_PATH_REGEXP.test(path2)) {
-          debug('malicious path "%s"', path2);
-          this.error(403);
-          return res;
-        }
-        parts = path2.split(sep);
-        path2 = normalize(join(root, path2));
-      } else {
-        if (UP_PATH_REGEXP.test(path2)) {
-          debug('malicious path "%s"', path2);
-          this.error(403);
-          return res;
-        }
-        parts = normalize(path2).split(sep);
-        path2 = resolve(path2);
-      }
-      if (containsDotFile(parts)) {
-        var access = this._dotfiles;
-        if (access === void 0) {
-          access = parts[parts.length - 1][0] === "." ? this._hidden ? "allow" : "ignore" : "allow";
-        }
-        debug('%s dotfile "%s"', access, path2);
-        switch (access) {
-          case "allow":
-            break;
-          case "deny":
-            this.error(403);
-            return res;
-          case "ignore":
-          default:
-            this.error(404);
-            return res;
-        }
-      }
-      if (this._index.length && this.hasTrailingSlash()) {
-        this.sendIndex(path2);
-        return res;
-      }
-      this.sendFile(path2);
-      return res;
-    };
-    SendStream.prototype.send = function send2(path2, stat) {
-      var len = stat.size;
-      var options = this.options;
-      var opts = {};
-      var res = this.res;
-      var req = this.req;
-      var ranges = req.headers.range;
-      var offset = options.start || 0;
-      if (headersSent(res)) {
-        this.headersAlreadySent();
-        return;
-      }
-      debug('pipe "%s"', path2);
-      this.setHeader(path2, stat);
-      this.type(path2);
-      if (this.isConditionalGET()) {
-        if (this.isPreconditionFailure()) {
-          this.error(412);
-          return;
-        }
-        if (this.isCachable() && this.isFresh()) {
-          this.notModified();
-          return;
-        }
-      }
-      len = Math.max(0, len - offset);
-      if (options.end !== void 0) {
-        var bytes = options.end - offset + 1;
-        if (len > bytes) len = bytes;
-      }
-      if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {
-        ranges = parseRange(len, ranges, {
-          combine: true
-        });
-        if (!this.isRangeFresh()) {
-          debug("range stale");
-          ranges = -2;
-        }
-        if (ranges === -1) {
-          debug("range unsatisfiable");
-          res.setHeader("Content-Range", contentRange("bytes", len));
-          return this.error(416, {
-            headers: {
-              "Content-Range": res.getHeader("Content-Range")
-            }
-          });
-        }
-        if (ranges !== -2 && ranges.length === 1) {
-          debug("range %j", ranges);
-          res.statusCode = 206;
-          res.setHeader("Content-Range", contentRange("bytes", len, ranges[0]));
-          offset += ranges[0].start;
-          len = ranges[0].end - ranges[0].start + 1;
-        }
-      }
-      for (var prop in options) {
-        opts[prop] = options[prop];
-      }
-      opts.start = offset;
-      opts.end = Math.max(offset, offset + len - 1);
-      res.setHeader("Content-Length", len);
-      if (req.method === "HEAD") {
-        res.end();
-        return;
-      }
-      this.stream(path2, opts);
-    };
-    SendStream.prototype.sendFile = function sendFile(path2) {
-      var i = 0;
-      var self = this;
-      debug('stat "%s"', path2);
-      fs.stat(path2, function onstat(err, stat) {
-        if (err && err.code === "ENOENT" && !extname(path2) && path2[path2.length - 1] !== sep) {
-          return next(err);
-        }
-        if (err) return self.onStatError(err);
-        if (stat.isDirectory()) return self.redirect(path2);
-        self.emit("file", path2, stat);
-        self.send(path2, stat);
-      });
-      function next(err) {
-        if (self._extensions.length <= i) {
-          return err ? self.onStatError(err) : self.error(404);
-        }
-        var p = path2 + "." + self._extensions[i++];
-        debug('stat "%s"', p);
-        fs.stat(p, function(err2, stat) {
-          if (err2) return next(err2);
-          if (stat.isDirectory()) return next();
-          self.emit("file", p, stat);
-          self.send(p, stat);
-        });
-      }
-    };
-    SendStream.prototype.sendIndex = function sendIndex(path2) {
-      var i = -1;
-      var self = this;
-      function next(err) {
-        if (++i >= self._index.length) {
-          if (err) return self.onStatError(err);
-          return self.error(404);
-        }
-        var p = join(path2, self._index[i]);
-        debug('stat "%s"', p);
-        fs.stat(p, function(err2, stat) {
-          if (err2) return next(err2);
-          if (stat.isDirectory()) return next();
-          self.emit("file", p, stat);
-          self.send(p, stat);
-        });
-      }
-      next();
-    };
-    SendStream.prototype.stream = function stream(path2, options) {
-      var self = this;
-      var res = this.res;
-      var stream2 = fs.createReadStream(path2, options);
-      this.emit("stream", stream2);
-      stream2.pipe(res);
-      function cleanup() {
-        destroy(stream2, true);
-      }
-      onFinished(res, cleanup);
-      stream2.on("error", function onerror(err) {
-        cleanup();
-        self.onStatError(err);
-      });
-      stream2.on("end", function onend() {
-        self.emit("end");
-      });
-    };
-    SendStream.prototype.type = function type(path2) {
-      var res = this.res;
-      if (res.getHeader("Content-Type")) return;
-      var type2 = mime.lookup(path2);
-      if (!type2) {
-        debug("no content-type");
-        return;
-      }
-      var charset = mime.charsets.lookup(type2);
-      debug("content-type %s", type2);
-      res.setHeader("Content-Type", type2 + (charset ? "; charset=" + charset : ""));
-    };
-    SendStream.prototype.setHeader = function setHeader(path2, stat) {
-      var res = this.res;
-      this.emit("headers", res, path2, stat);
-      if (this._acceptRanges && !res.getHeader("Accept-Ranges")) {
-        debug("accept ranges");
-        res.setHeader("Accept-Ranges", "bytes");
-      }
-      if (this._cacheControl && !res.getHeader("Cache-Control")) {
-        var cacheControl = "public, max-age=" + Math.floor(this._maxage / 1e3);
-        if (this._immutable) {
-          cacheControl += ", immutable";
-        }
-        debug("cache-control %s", cacheControl);
-        res.setHeader("Cache-Control", cacheControl);
-      }
-      if (this._lastModified && !res.getHeader("Last-Modified")) {
-        var modified = stat.mtime.toUTCString();
-        debug("modified %s", modified);
-        res.setHeader("Last-Modified", modified);
-      }
-      if (this._etag && !res.getHeader("ETag")) {
-        var val = etag(stat);
-        debug("etag %s", val);
-        res.setHeader("ETag", val);
-      }
-    };
-    function clearHeaders(res) {
-      var headers = getHeaderNames(res);
-      for (var i = 0; i < headers.length; i++) {
-        res.removeHeader(headers[i]);
-      }
-    }
-    function collapseLeadingSlashes(str) {
-      for (var i = 0; i < str.length; i++) {
-        if (str[i] !== "/") {
-          break;
-        }
-      }
-      return i > 1 ? "/" + str.substr(i) : str;
-    }
-    function containsDotFile(parts) {
-      for (var i = 0; i < parts.length; i++) {
-        var part = parts[i];
-        if (part.length > 1 && part[0] === ".") {
-          return true;
-        }
-      }
-      return false;
-    }
-    function contentRange(type, size, range) {
-      return type + " " + (range ? range.start + "-" + range.end : "*") + "/" + size;
-    }
-    function createHtmlDocument(title, body) {
-      return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>' + title + "</title>\n</head>\n<body>\n<pre>" + body + "</pre>\n</body>\n</html>\n";
-    }
-    function createHttpError(status, err) {
-      if (!err) {
-        return createError(status);
-      }
-      return err instanceof Error ? createError(status, err, {
-        expose: false
-      }) : createError(status, err);
-    }
-    function decode(path2) {
-      try {
-        return decodeURIComponent(path2);
-      } catch (err) {
-        return -1;
-      }
-    }
-    function getHeaderNames(res) {
-      return typeof res.getHeaderNames !== "function" ? Object.keys(res._headers || {}) : res.getHeaderNames();
-    }
-    function hasListeners(emitter, type) {
-      var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type);
-      return count > 0;
-    }
-    function headersSent(res) {
-      return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent;
-    }
-    function normalizeList(val, name) {
-      var list = [].concat(val || []);
-      for (var i = 0; i < list.length; i++) {
-        if (typeof list[i] !== "string") {
-          throw new TypeError(name + " must be array of strings or false");
-        }
-      }
-      return list;
-    }
-    function parseHttpDate(date) {
-      var timestamp = date && Date.parse(date);
-      return typeof timestamp === "number" ? timestamp : NaN;
-    }
-    function parseTokenList(str) {
-      var end = 0;
-      var list = [];
-      var start = 0;
-      for (var i = 0, len = str.length; i < len; i++) {
-        switch (str.charCodeAt(i)) {
-          case 32:
-            if (start === end) {
-              start = end = i + 1;
-            }
-            break;
-          case 44:
-            if (start !== end) {
-              list.push(str.substring(start, end));
-            }
-            start = end = i + 1;
-            break;
-          default:
-            end = i + 1;
-            break;
-        }
-      }
-      if (start !== end) {
-        list.push(str.substring(start, end));
-      }
-      return list;
-    }
-    function setHeaders(res, headers) {
-      var keys = Object.keys(headers);
-      for (var i = 0; i < keys.length; i++) {
-        var key = keys[i];
-        res.setHeader(key, headers[key]);
-      }
-    }
-  }
-});
-
-// node_modules/forwarded/index.js
-var require_forwarded = __commonJS({
-  "node_modules/forwarded/index.js"(exports, module) {
-    "use strict";
-    module.exports = forwarded;
-    function forwarded(req) {
-      if (!req) {
-        throw new TypeError("argument req is required");
-      }
-      var proxyAddrs = parse(req.headers["x-forwarded-for"] || "");
-      var socketAddr = getSocketAddr(req);
-      var addrs = [socketAddr].concat(proxyAddrs);
-      return addrs;
-    }
-    function getSocketAddr(req) {
-      return req.socket ? req.socket.remoteAddress : req.connection.remoteAddress;
-    }
-    function parse(header) {
-      var end = header.length;
-      var list = [];
-      var start = header.length;
-      for (var i = header.length - 1; i >= 0; i--) {
-        switch (header.charCodeAt(i)) {
-          case 32:
-            if (start === end) {
-              start = end = i;
-            }
-            break;
-          case 44:
-            if (start !== end) {
-              list.push(header.substring(start, end));
-            }
-            start = end = i;
-            break;
-          default:
-            start = i;
-            break;
-        }
-      }
-      if (start !== end) {
-        list.push(header.substring(start, end));
-      }
-      return list;
-    }
-  }
-});
-
-// node_modules/ipaddr.js/lib/ipaddr.js
-var require_ipaddr = __commonJS({
-  "node_modules/ipaddr.js/lib/ipaddr.js"(exports, module) {
-    (function() {
-      var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;
-      ipaddr = {};
-      root = this;
-      if (typeof module !== "undefined" && module !== null && module.exports) {
-        module.exports = ipaddr;
-      } else {
-        root["ipaddr"] = ipaddr;
-      }
-      matchCIDR = function(first, second, partSize, cidrBits) {
-        var part, shift;
-        if (first.length !== second.length) {
-          throw new Error("ipaddr: cannot match CIDR for objects with different lengths");
-        }
-        part = 0;
-        while (cidrBits > 0) {
-          shift = partSize - cidrBits;
-          if (shift < 0) {
-            shift = 0;
-          }
-          if (first[part] >> shift !== second[part] >> shift) {
-            return false;
-          }
-          cidrBits -= partSize;
-          part += 1;
-        }
-        return true;
-      };
-      ipaddr.subnetMatch = function(address, rangeList, defaultName) {
-        var k, len, rangeName, rangeSubnets, subnet;
-        if (defaultName == null) {
-          defaultName = "unicast";
-        }
-        for (rangeName in rangeList) {
-          rangeSubnets = rangeList[rangeName];
-          if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {
-            rangeSubnets = [rangeSubnets];
-          }
-          for (k = 0, len = rangeSubnets.length; k < len; k++) {
-            subnet = rangeSubnets[k];
-            if (address.kind() === subnet[0].kind()) {
-              if (address.match.apply(address, subnet)) {
-                return rangeName;
-              }
-            }
-          }
-        }
-        return defaultName;
-      };
-      ipaddr.IPv4 = function() {
-        function IPv4(octets) {
-          var k, len, octet;
-          if (octets.length !== 4) {
-            throw new Error("ipaddr: ipv4 octet count should be 4");
-          }
-          for (k = 0, len = octets.length; k < len; k++) {
-            octet = octets[k];
-            if (!(0 <= octet && octet <= 255)) {
-              throw new Error("ipaddr: ipv4 octet should fit in 8 bits");
-            }
-          }
-          this.octets = octets;
-        }
-        IPv4.prototype.kind = function() {
-          return "ipv4";
-        };
-        IPv4.prototype.toString = function() {
-          return this.octets.join(".");
-        };
-        IPv4.prototype.toNormalizedString = function() {
-          return this.toString();
-        };
-        IPv4.prototype.toByteArray = function() {
-          return this.octets.slice(0);
-        };
-        IPv4.prototype.match = function(other, cidrRange) {
-          var ref;
-          if (cidrRange === void 0) {
-            ref = other, other = ref[0], cidrRange = ref[1];
-          }
-          if (other.kind() !== "ipv4") {
-            throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");
-          }
-          return matchCIDR(this.octets, other.octets, 8, cidrRange);
-        };
-        IPv4.prototype.SpecialRanges = {
-          unspecified: [[new IPv4([0, 0, 0, 0]), 8]],
-          broadcast: [[new IPv4([255, 255, 255, 255]), 32]],
-          multicast: [[new IPv4([224, 0, 0, 0]), 4]],
-          linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],
-          loopback: [[new IPv4([127, 0, 0, 0]), 8]],
-          carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],
-          "private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],
-          reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]
-        };
-        IPv4.prototype.range = function() {
-          return ipaddr.subnetMatch(this, this.SpecialRanges);
-        };
-        IPv4.prototype.toIPv4MappedAddress = function() {
-          return ipaddr.IPv6.parse("::ffff:" + this.toString());
-        };
-        IPv4.prototype.prefixLengthFromSubnetMask = function() {
-          var cidr, i, k, octet, stop, zeros, zerotable;
-          zerotable = {
-            0: 8,
-            128: 7,
-            192: 6,
-            224: 5,
-            240: 4,
-            248: 3,
-            252: 2,
-            254: 1,
-            255: 0
-          };
-          cidr = 0;
-          stop = false;
-          for (i = k = 3; k >= 0; i = k += -1) {
-            octet = this.octets[i];
-            if (octet in zerotable) {
-              zeros = zerotable[octet];
-              if (stop && zeros !== 0) {
-                return null;
-              }
-              if (zeros !== 8) {
-                stop = true;
-              }
-              cidr += zeros;
-            } else {
-              return null;
-            }
-          }
-          return 32 - cidr;
-        };
-        return IPv4;
-      }();
-      ipv4Part = "(0?\\d+|0x[a-f0-9]+)";
-      ipv4Regexes = {
-        fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", "i"),
-        longValue: new RegExp("^" + ipv4Part + "$", "i")
-      };
-      ipaddr.IPv4.parser = function(string) {
-        var match, parseIntAuto, part, shift, value;
-        parseIntAuto = function(string2) {
-          if (string2[0] === "0" && string2[1] !== "x") {
-            return parseInt(string2, 8);
-          } else {
-            return parseInt(string2);
-          }
-        };
-        if (match = string.match(ipv4Regexes.fourOctet)) {
-          return function() {
-            var k, len, ref, results;
-            ref = match.slice(1, 6);
-            results = [];
-            for (k = 0, len = ref.length; k < len; k++) {
-              part = ref[k];
-              results.push(parseIntAuto(part));
-            }
-            return results;
-          }();
-        } else if (match = string.match(ipv4Regexes.longValue)) {
-          value = parseIntAuto(match[1]);
-          if (value > 4294967295 || value < 0) {
-            throw new Error("ipaddr: address outside defined range");
-          }
-          return function() {
-            var k, results;
-            results = [];
-            for (shift = k = 0; k <= 24; shift = k += 8) {
-              results.push(value >> shift & 255);
-            }
-            return results;
-          }().reverse();
-        } else {
-          return null;
-        }
-      };
-      ipaddr.IPv6 = function() {
-        function IPv6(parts, zoneId) {
-          var i, k, l, len, part, ref;
-          if (parts.length === 16) {
-            this.parts = [];
-            for (i = k = 0; k <= 14; i = k += 2) {
-              this.parts.push(parts[i] << 8 | parts[i + 1]);
-            }
-          } else if (parts.length === 8) {
-            this.parts = parts;
-          } else {
-            throw new Error("ipaddr: ipv6 part count should be 8 or 16");
-          }
-          ref = this.parts;
-          for (l = 0, len = ref.length; l < len; l++) {
-            part = ref[l];
-            if (!(0 <= part && part <= 65535)) {
-              throw new Error("ipaddr: ipv6 part should fit in 16 bits");
-            }
-          }
-          if (zoneId) {
-            this.zoneId = zoneId;
-          }
-        }
-        IPv6.prototype.kind = function() {
-          return "ipv6";
-        };
-        IPv6.prototype.toString = function() {
-          return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, "::");
-        };
-        IPv6.prototype.toRFC5952String = function() {
-          var bestMatchIndex, bestMatchLength, match, regex, string;
-          regex = /((^|:)(0(:|$)){2,})/g;
-          string = this.toNormalizedString();
-          bestMatchIndex = 0;
-          bestMatchLength = -1;
-          while (match = regex.exec(string)) {
-            if (match[0].length > bestMatchLength) {
-              bestMatchIndex = match.index;
-              bestMatchLength = match[0].length;
-            }
-          }
-          if (bestMatchLength < 0) {
-            return string;
-          }
-          return string.substring(0, bestMatchIndex) + "::" + string.substring(bestMatchIndex + bestMatchLength);
-        };
-        IPv6.prototype.toByteArray = function() {
-          var bytes, k, len, part, ref;
-          bytes = [];
-          ref = this.parts;
-          for (k = 0, len = ref.length; k < len; k++) {
-            part = ref[k];
-            bytes.push(part >> 8);
-            bytes.push(part & 255);
-          }
-          return bytes;
-        };
-        IPv6.prototype.toNormalizedString = function() {
-          var addr, part, suffix;
-          addr = function() {
-            var k, len, ref, results;
-            ref = this.parts;
-            results = [];
-            for (k = 0, len = ref.length; k < len; k++) {
-              part = ref[k];
-              results.push(part.toString(16));
-            }
-            return results;
-          }.call(this).join(":");
-          suffix = "";
-          if (this.zoneId) {
-            suffix = "%" + this.zoneId;
-          }
-          return addr + suffix;
-        };
-        IPv6.prototype.toFixedLengthString = function() {
-          var addr, part, suffix;
-          addr = function() {
-            var k, len, ref, results;
-            ref = this.parts;
-            results = [];
-            for (k = 0, len = ref.length; k < len; k++) {
-              part = ref[k];
-              results.push(part.toString(16).padStart(4, "0"));
-            }
-            return results;
-          }.call(this).join(":");
-          suffix = "";
-          if (this.zoneId) {
-            suffix = "%" + this.zoneId;
-          }
-          return addr + suffix;
-        };
-        IPv6.prototype.match = function(other, cidrRange) {
-          var ref;
-          if (cidrRange === void 0) {
-            ref = other, other = ref[0], cidrRange = ref[1];
-          }
-          if (other.kind() !== "ipv6") {
-            throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");
-          }
-          return matchCIDR(this.parts, other.parts, 16, cidrRange);
-        };
-        IPv6.prototype.SpecialRanges = {
-          unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],
-          linkLocal: [new IPv6([65152, 0, 0, 0, 0, 0, 0, 0]), 10],
-          multicast: [new IPv6([65280, 0, 0, 0, 0, 0, 0, 0]), 8],
-          loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],
-          uniqueLocal: [new IPv6([64512, 0, 0, 0, 0, 0, 0, 0]), 7],
-          ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 65535, 0, 0]), 96],
-          rfc6145: [new IPv6([0, 0, 0, 0, 65535, 0, 0, 0]), 96],
-          rfc6052: [new IPv6([100, 65435, 0, 0, 0, 0, 0, 0]), 96],
-          "6to4": [new IPv6([8194, 0, 0, 0, 0, 0, 0, 0]), 16],
-          teredo: [new IPv6([8193, 0, 0, 0, 0, 0, 0, 0]), 32],
-          reserved: [[new IPv6([8193, 3512, 0, 0, 0, 0, 0, 0]), 32]]
-        };
-        IPv6.prototype.range = function() {
-          return ipaddr.subnetMatch(this, this.SpecialRanges);
-        };
-        IPv6.prototype.isIPv4MappedAddress = function() {
-          return this.range() === "ipv4Mapped";
-        };
-        IPv6.prototype.toIPv4Address = function() {
-          var high, low, ref;
-          if (!this.isIPv4MappedAddress()) {
-            throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");
-          }
-          ref = this.parts.slice(-2), high = ref[0], low = ref[1];
-          return new ipaddr.IPv4([high >> 8, high & 255, low >> 8, low & 255]);
-        };
-        IPv6.prototype.prefixLengthFromSubnetMask = function() {
-          var cidr, i, k, part, stop, zeros, zerotable;
-          zerotable = {
-            0: 16,
-            32768: 15,
-            49152: 14,
-            57344: 13,
-            61440: 12,
-            63488: 11,
-            64512: 10,
-            65024: 9,
-            65280: 8,
-            65408: 7,
-            65472: 6,
-            65504: 5,
-            65520: 4,
-            65528: 3,
-            65532: 2,
-            65534: 1,
-            65535: 0
-          };
-          cidr = 0;
-          stop = false;
-          for (i = k = 7; k >= 0; i = k += -1) {
-            part = this.parts[i];
-            if (part in zerotable) {
-              zeros = zerotable[part];
-              if (stop && zeros !== 0) {
-                return null;
-              }
-              if (zeros !== 16) {
-                stop = true;
-              }
-              cidr += zeros;
-            } else {
-              return null;
-            }
-          }
-          return 128 - cidr;
-        };
-        return IPv6;
-      }();
-      ipv6Part = "(?:[0-9a-f]+::?)+";
-      zoneIndex = "%[0-9a-z]{1,}";
-      ipv6Regexes = {
-        zoneIndex: new RegExp(zoneIndex, "i"),
-        "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", "i"),
-        transitional: new RegExp("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)" + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), "i")
-      };
-      expandIPv6 = function(string, parts) {
-        var colonCount, lastColon, part, replacement, replacementCount, zoneId;
-        if (string.indexOf("::") !== string.lastIndexOf("::")) {
-          return null;
-        }
-        zoneId = (string.match(ipv6Regexes["zoneIndex"]) || [])[0];
-        if (zoneId) {
-          zoneId = zoneId.substring(1);
-          string = string.replace(/%.+$/, "");
-        }
-        colonCount = 0;
-        lastColon = -1;
-        while ((lastColon = string.indexOf(":", lastColon + 1)) >= 0) {
-          colonCount++;
-        }
-        if (string.substr(0, 2) === "::") {
-          colonCount--;
-        }
-        if (string.substr(-2, 2) === "::") {
-          colonCount--;
-        }
-        if (colonCount > parts) {
-          return null;
-        }
-        replacementCount = parts - colonCount;
-        replacement = ":";
-        while (replacementCount--) {
-          replacement += "0:";
-        }
-        string = string.replace("::", replacement);
-        if (string[0] === ":") {
-          string = string.slice(1);
-        }
-        if (string[string.length - 1] === ":") {
-          string = string.slice(0, -1);
-        }
-        parts = function() {
-          var k, len, ref, results;
-          ref = string.split(":");
-          results = [];
-          for (k = 0, len = ref.length; k < len; k++) {
-            part = ref[k];
-            results.push(parseInt(part, 16));
-          }
-          return results;
-        }();
-        return {
-          parts,
-          zoneId
-        };
-      };
-      ipaddr.IPv6.parser = function(string) {
-        var addr, k, len, match, octet, octets, zoneId;
-        if (ipv6Regexes["native"].test(string)) {
-          return expandIPv6(string, 8);
-        } else if (match = string.match(ipv6Regexes["transitional"])) {
-          zoneId = match[6] || "";
-          addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);
-          if (addr.parts) {
-            octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];
-            for (k = 0, len = octets.length; k < len; k++) {
-              octet = octets[k];
-              if (!(0 <= octet && octet <= 255)) {
-                return null;
-              }
-            }
-            addr.parts.push(octets[0] << 8 | octets[1]);
-            addr.parts.push(octets[2] << 8 | octets[3]);
-            return {
-              parts: addr.parts,
-              zoneId: addr.zoneId
-            };
-          }
-        }
-        return null;
-      };
-      ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {
-        return this.parser(string) !== null;
-      };
-      ipaddr.IPv4.isValid = function(string) {
-        var e;
-        try {
-          new this(this.parser(string));
-          return true;
-        } catch (error1) {
-          e = error1;
-          return false;
-        }
-      };
-      ipaddr.IPv4.isValidFourPartDecimal = function(string) {
-        if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) {
-          return true;
-        } else {
-          return false;
-        }
-      };
-      ipaddr.IPv6.isValid = function(string) {
-        var addr, e;
-        if (typeof string === "string" && string.indexOf(":") === -1) {
-          return false;
-        }
-        try {
-          addr = this.parser(string);
-          new this(addr.parts, addr.zoneId);
-          return true;
-        } catch (error1) {
-          e = error1;
-          return false;
-        }
-      };
-      ipaddr.IPv4.parse = function(string) {
-        var parts;
-        parts = this.parser(string);
-        if (parts === null) {
-          throw new Error("ipaddr: string is not formatted like ip address");
-        }
-        return new this(parts);
-      };
-      ipaddr.IPv6.parse = function(string) {
-        var addr;
-        addr = this.parser(string);
-        if (addr.parts === null) {
-          throw new Error("ipaddr: string is not formatted like ip address");
-        }
-        return new this(addr.parts, addr.zoneId);
-      };
-      ipaddr.IPv4.parseCIDR = function(string) {
-        var maskLength, match, parsed;
-        if (match = string.match(/^(.+)\/(\d+)$/)) {
-          maskLength = parseInt(match[2]);
-          if (maskLength >= 0 && maskLength <= 32) {
-            parsed = [this.parse(match[1]), maskLength];
-            Object.defineProperty(parsed, "toString", {
-              value: function() {
-                return this.join("/");
-              }
-            });
-            return parsed;
-          }
-        }
-        throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range");
-      };
-      ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {
-        var filledOctetCount, j, octets;
-        prefix = parseInt(prefix);
-        if (prefix < 0 || prefix > 32) {
-          throw new Error("ipaddr: invalid IPv4 prefix length");
-        }
-        octets = [0, 0, 0, 0];
-        j = 0;
-        filledOctetCount = Math.floor(prefix / 8);
-        while (j < filledOctetCount) {
-          octets[j] = 255;
-          j++;
-        }
-        if (filledOctetCount < 4) {
-          octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - prefix % 8;
-        }
-        return new this(octets);
-      };
-      ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {
-        var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
-        try {
-          cidr = this.parseCIDR(string);
-          ipInterfaceOctets = cidr[0].toByteArray();
-          subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
-          octets = [];
-          i = 0;
-          while (i < 4) {
-            octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);
-            i++;
-          }
-          return new this(octets);
-        } catch (error1) {
-          error = error1;
-          throw new Error("ipaddr: the address does not have IPv4 CIDR format");
-        }
-      };
-      ipaddr.IPv4.networkAddressFromCIDR = function(string) {
-        var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
-        try {
-          cidr = this.parseCIDR(string);
-          ipInterfaceOctets = cidr[0].toByteArray();
-          subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
-          octets = [];
-          i = 0;
-          while (i < 4) {
-            octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));
-            i++;
-          }
-          return new this(octets);
-        } catch (error1) {
-          error = error1;
-          throw new Error("ipaddr: the address does not have IPv4 CIDR format");
-        }
-      };
-      ipaddr.IPv6.parseCIDR = function(string) {
-        var maskLength, match, parsed;
-        if (match = string.match(/^(.+)\/(\d+)$/)) {
-          maskLength = parseInt(match[2]);
-          if (maskLength >= 0 && maskLength <= 128) {
-            parsed = [this.parse(match[1]), maskLength];
-            Object.defineProperty(parsed, "toString", {
-              value: function() {
-                return this.join("/");
-              }
-            });
-            return parsed;
-          }
-        }
-        throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range");
-      };
-      ipaddr.isValid = function(string) {
-        return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);
-      };
-      ipaddr.parse = function(string) {
-        if (ipaddr.IPv6.isValid(string)) {
-          return ipaddr.IPv6.parse(string);
-        } else if (ipaddr.IPv4.isValid(string)) {
-          return ipaddr.IPv4.parse(string);
-        } else {
-          throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format");
-        }
-      };
-      ipaddr.parseCIDR = function(string) {
-        var e;
-        try {
-          return ipaddr.IPv6.parseCIDR(string);
-        } catch (error1) {
-          e = error1;
-          try {
-            return ipaddr.IPv4.parseCIDR(string);
-          } catch (error12) {
-            e = error12;
-            throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format");
-          }
-        }
-      };
-      ipaddr.fromByteArray = function(bytes) {
-        var length;
-        length = bytes.length;
-        if (length === 4) {
-          return new ipaddr.IPv4(bytes);
-        } else if (length === 16) {
-          return new ipaddr.IPv6(bytes);
-        } else {
-          throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address");
-        }
-      };
-      ipaddr.process = function(string) {
-        var addr;
-        addr = this.parse(string);
-        if (addr.kind() === "ipv6" && addr.isIPv4MappedAddress()) {
-          return addr.toIPv4Address();
-        } else {
-          return addr;
-        }
-      };
-    }).call(exports);
-  }
-});
-
-// node_modules/proxy-addr/index.js
-var require_proxy_addr = __commonJS({
-  "node_modules/proxy-addr/index.js"(exports, module) {
-    "use strict";
-    module.exports = proxyaddr;
-    module.exports.all = alladdrs;
-    module.exports.compile = compile;
-    var forwarded = require_forwarded();
-    var ipaddr = require_ipaddr();
-    var DIGIT_REGEXP = /^[0-9]+$/;
-    var isip = ipaddr.isValid;
-    var parseip = ipaddr.parse;
-    var IP_RANGES = {
-      linklocal: ["169.254.0.0/16", "fe80::/10"],
-      loopback: ["127.0.0.1/8", "::1/128"],
-      uniquelocal: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fc00::/7"]
-    };
-    function alladdrs(req, trust) {
-      var addrs = forwarded(req);
-      if (!trust) {
-        return addrs;
-      }
-      if (typeof trust !== "function") {
-        trust = compile(trust);
-      }
-      for (var i = 0; i < addrs.length - 1; i++) {
-        if (trust(addrs[i], i)) continue;
-        addrs.length = i + 1;
-      }
-      return addrs;
-    }
-    function compile(val) {
-      if (!val) {
-        throw new TypeError("argument is required");
-      }
-      var trust;
-      if (typeof val === "string") {
-        trust = [val];
-      } else if (Array.isArray(val)) {
-        trust = val.slice();
-      } else {
-        throw new TypeError("unsupported trust argument");
-      }
-      for (var i = 0; i < trust.length; i++) {
-        val = trust[i];
-        if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {
-          continue;
-        }
-        val = IP_RANGES[val];
-        trust.splice.apply(trust, [i, 1].concat(val));
-        i += val.length - 1;
-      }
-      return compileTrust(compileRangeSubnets(trust));
-    }
-    function compileRangeSubnets(arr) {
-      var rangeSubnets = new Array(arr.length);
-      for (var i = 0; i < arr.length; i++) {
-        rangeSubnets[i] = parseipNotation(arr[i]);
-      }
-      return rangeSubnets;
-    }
-    function compileTrust(rangeSubnets) {
-      var len = rangeSubnets.length;
-      return len === 0 ? trustNone : len === 1 ? trustSingle(rangeSubnets[0]) : trustMulti(rangeSubnets);
-    }
-    function parseipNotation(note) {
-      var pos = note.lastIndexOf("/");
-      var str = pos !== -1 ? note.substring(0, pos) : note;
-      if (!isip(str)) {
-        throw new TypeError("invalid IP address: " + str);
-      }
-      var ip = parseip(str);
-      if (pos === -1 && ip.kind() === "ipv6" && ip.isIPv4MappedAddress()) {
-        ip = ip.toIPv4Address();
-      }
-      var max = ip.kind() === "ipv6" ? 128 : 32;
-      var range = pos !== -1 ? note.substring(pos + 1, note.length) : null;
-      if (range === null) {
-        range = max;
-      } else if (DIGIT_REGEXP.test(range)) {
-        range = parseInt(range, 10);
-      } else if (ip.kind() === "ipv4" && isip(range)) {
-        range = parseNetmask(range);
-      } else {
-        range = null;
-      }
-      if (range <= 0 || range > max) {
-        throw new TypeError("invalid range on address: " + note);
-      }
-      return [ip, range];
-    }
-    function parseNetmask(netmask) {
-      var ip = parseip(netmask);
-      var kind = ip.kind();
-      return kind === "ipv4" ? ip.prefixLengthFromSubnetMask() : null;
-    }
-    function proxyaddr(req, trust) {
-      if (!req) {
-        throw new TypeError("req argument is required");
-      }
-      if (!trust) {
-        throw new TypeError("trust argument is required");
-      }
-      var addrs = alladdrs(req, trust);
-      var addr = addrs[addrs.length - 1];
-      return addr;
-    }
-    function trustNone() {
-      return false;
-    }
-    function trustMulti(subnets) {
-      return function trust(addr) {
-        if (!isip(addr)) return false;
-        var ip = parseip(addr);
-        var ipconv;
-        var kind = ip.kind();
-        for (var i = 0; i < subnets.length; i++) {
-          var subnet = subnets[i];
-          var subnetip = subnet[0];
-          var subnetkind = subnetip.kind();
-          var subnetrange = subnet[1];
-          var trusted = ip;
-          if (kind !== subnetkind) {
-            if (subnetkind === "ipv4" && !ip.isIPv4MappedAddress()) {
-              continue;
-            }
-            if (!ipconv) {
-              ipconv = subnetkind === "ipv4" ? ip.toIPv4Address() : ip.toIPv4MappedAddress();
-            }
-            trusted = ipconv;
-          }
-          if (trusted.match(subnetip, subnetrange)) {
-            return true;
-          }
-        }
-        return false;
-      };
-    }
-    function trustSingle(subnet) {
-      var subnetip = subnet[0];
-      var subnetkind = subnetip.kind();
-      var subnetisipv4 = subnetkind === "ipv4";
-      var subnetrange = subnet[1];
-      return function trust(addr) {
-        if (!isip(addr)) return false;
-        var ip = parseip(addr);
-        var kind = ip.kind();
-        if (kind !== subnetkind) {
-          if (subnetisipv4 && !ip.isIPv4MappedAddress()) {
-            return false;
-          }
-          ip = subnetisipv4 ? ip.toIPv4Address() : ip.toIPv4MappedAddress();
-        }
-        return ip.match(subnetip, subnetrange);
-      };
-    }
-  }
-});
-
-// node_modules/express/lib/utils.js
-var require_utils2 = __commonJS({
-  "node_modules/express/lib/utils.js"(exports) {
-    "use strict";
-    var Buffer2 = require_safe_buffer().Buffer;
-    var contentDisposition = require_content_disposition();
-    var contentType = require_content_type();
-    var deprecate = require_depd()("express");
-    var flatten = require_array_flatten();
-    var mime = require_send().mime;
-    var etag = require_etag();
-    var proxyaddr = require_proxy_addr();
-    var qs = require_lib2();
-    var querystring = __require("querystring");
-    exports.etag = createETagGenerator({
-      weak: false
-    });
-    exports.wetag = createETagGenerator({
-      weak: true
-    });
-    exports.isAbsolute = function(path) {
-      if ("/" === path[0]) return true;
-      if (":" === path[1] && ("\\" === path[2] || "/" === path[2])) return true;
-      if ("\\\\" === path.substring(0, 2)) return true;
-    };
-    exports.flatten = deprecate.function(flatten, "utils.flatten: use array-flatten npm module instead");
-    exports.normalizeType = function(type) {
-      return ~type.indexOf("/") ? acceptParams(type) : {
-        value: mime.lookup(type),
-        params: {}
-      };
-    };
-    exports.normalizeTypes = function(types) {
-      var ret = [];
-      for (var i = 0; i < types.length; ++i) {
-        ret.push(exports.normalizeType(types[i]));
-      }
-      return ret;
-    };
-    exports.contentDisposition = deprecate.function(contentDisposition, "utils.contentDisposition: use content-disposition npm module instead");
-    function acceptParams(str) {
-      var parts = str.split(/ *; */);
-      var ret = {
-        value: parts[0],
-        quality: 1,
-        params: {}
-      };
-      for (var i = 1; i < parts.length; ++i) {
-        var pms = parts[i].split(/ *= */);
-        if ("q" === pms[0]) {
-          ret.quality = parseFloat(pms[1]);
-        } else {
-          ret.params[pms[0]] = pms[1];
-        }
-      }
-      return ret;
-    }
-    exports.compileETag = function(val) {
-      var fn;
-      if (typeof val === "function") {
-        return val;
-      }
-      switch (val) {
-        case true:
-        case "weak":
-          fn = exports.wetag;
-          break;
-        case false:
-          break;
-        case "strong":
-          fn = exports.etag;
-          break;
-        default:
-          throw new TypeError("unknown value for etag function: " + val);
-      }
-      return fn;
-    };
-    exports.compileQueryParser = function compileQueryParser(val) {
-      var fn;
-      if (typeof val === "function") {
-        return val;
-      }
-      switch (val) {
-        case true:
-        case "simple":
-          fn = querystring.parse;
-          break;
-        case false:
-          fn = newObject;
-          break;
-        case "extended":
-          fn = parseExtendedQueryString;
-          break;
-        default:
-          throw new TypeError("unknown value for query parser function: " + val);
-      }
-      return fn;
-    };
-    exports.compileTrust = function(val) {
-      if (typeof val === "function") return val;
-      if (val === true) {
-        return function() {
-          return true;
-        };
-      }
-      if (typeof val === "number") {
-        return function(a, i) {
-          return i < val;
-        };
-      }
-      if (typeof val === "string") {
-        val = val.split(",").map(function(v) {
-          return v.trim();
-        });
-      }
-      return proxyaddr.compile(val || []);
-    };
-    exports.setCharset = function setCharset(type, charset) {
-      if (!type || !charset) {
-        return type;
-      }
-      var parsed = contentType.parse(type);
-      parsed.parameters.charset = charset;
-      return contentType.format(parsed);
-    };
-    function createETagGenerator(options) {
-      return function generateETag(body, encoding) {
-        var buf = !Buffer2.isBuffer(body) ? Buffer2.from(body, encoding) : body;
-        return etag(buf, options);
-      };
-    }
-    function parseExtendedQueryString(str) {
-      return qs.parse(str, {
-        allowPrototypes: true
-      });
-    }
-    function newObject() {
-      return {};
-    }
-  }
-});
-
-// node_modules/express/lib/application.js
-var require_application = __commonJS({
-  "node_modules/express/lib/application.js"(exports, module) {
-    "use strict";
-    var finalhandler = require_finalhandler();
-    var Router = require_router();
-    var methods = require_methods();
-    var middleware = require_init();
-    var query = require_query();
-    var debug = require_src3()("express:application");
-    var View = require_view();
-    var http = __require("http");
-    var compileETag = require_utils2().compileETag;
-    var compileQueryParser = require_utils2().compileQueryParser;
-    var compileTrust = require_utils2().compileTrust;
-    var deprecate = require_depd()("express");
-    var flatten = require_array_flatten();
-    var merge = require_utils_merge();
-    var resolve = __require("path").resolve;
-    var setPrototypeOf = require_setprototypeof();
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-    var slice = Array.prototype.slice;
-    var app = exports = module.exports = {};
-    var trustProxyDefaultSymbol = "@@symbol:trust_proxy_default";
-    app.init = function init() {
-      this.cache = {};
-      this.engines = {};
-      this.settings = {};
-      this.defaultConfiguration();
-    };
-    app.defaultConfiguration = function defaultConfiguration() {
-      var env = process.env.NODE_ENV || "development";
-      this.enable("x-powered-by");
-      this.set("etag", "weak");
-      this.set("env", env);
-      this.set("query parser", "extended");
-      this.set("subdomain offset", 2);
-      this.set("trust proxy", false);
-      Object.defineProperty(this.settings, trustProxyDefaultSymbol, {
-        configurable: true,
-        value: true
-      });
-      debug("booting in %s mode", env);
-      this.on("mount", function onmount(parent) {
-        if (this.settings[trustProxyDefaultSymbol] === true && typeof parent.settings["trust proxy fn"] === "function") {
-          delete this.settings["trust proxy"];
-          delete this.settings["trust proxy fn"];
-        }
-        setPrototypeOf(this.request, parent.request);
-        setPrototypeOf(this.response, parent.response);
-        setPrototypeOf(this.engines, parent.engines);
-        setPrototypeOf(this.settings, parent.settings);
-      });
-      this.locals = /* @__PURE__ */ Object.create(null);
-      this.mountpath = "/";
-      this.locals.settings = this.settings;
-      this.set("view", View);
-      this.set("views", resolve("views"));
-      this.set("jsonp callback name", "callback");
-      if (env === "production") {
-        this.enable("view cache");
-      }
-      Object.defineProperty(this, "router", {
-        get: function() {
-          throw new Error("'app.router' is deprecated!\nPlease see the 3.x to 4.x migration guide for details on how to update your app.");
-        }
-      });
-    };
-    app.lazyrouter = function lazyrouter() {
-      if (!this._router) {
-        this._router = new Router({
-          caseSensitive: this.enabled("case sensitive routing"),
-          strict: this.enabled("strict routing")
-        });
-        this._router.use(query(this.get("query parser fn")));
-        this._router.use(middleware.init(this));
-      }
-    };
-    app.handle = function handle(req, res, callback) {
-      var router = this._router;
-      var done = callback || finalhandler(req, res, {
-        env: this.get("env"),
-        onerror: logerror.bind(this)
-      });
-      if (!router) {
-        debug("no routes defined on app");
-        done();
-        return;
-      }
-      router.handle(req, res, done);
-    };
-    app.use = function use(fn) {
-      var offset = 0;
-      var path = "/";
-      if (typeof fn !== "function") {
-        var arg = fn;
-        while (Array.isArray(arg) && arg.length !== 0) {
-          arg = arg[0];
-        }
-        if (typeof arg !== "function") {
-          offset = 1;
-          path = fn;
-        }
-      }
-      var fns = flatten(slice.call(arguments, offset));
-      if (fns.length === 0) {
-        throw new TypeError("app.use() requires a middleware function");
-      }
-      this.lazyrouter();
-      var router = this._router;
-      fns.forEach(function(fn2) {
-        if (!fn2 || !fn2.handle || !fn2.set) {
-          return router.use(path, fn2);
-        }
-        debug(".use app under %s", path);
-        fn2.mountpath = path;
-        fn2.parent = this;
-        router.use(path, function mounted_app(req, res, next) {
-          var orig = req.app;
-          fn2.handle(req, res, function(err) {
-            setPrototypeOf(req, orig.request);
-            setPrototypeOf(res, orig.response);
-            next(err);
-          });
-        });
-        fn2.emit("mount", this);
-      }, this);
-      return this;
-    };
-    app.route = function route(path) {
-      this.lazyrouter();
-      return this._router.route(path);
-    };
-    app.engine = function engine(ext, fn) {
-      if (typeof fn !== "function") {
-        throw new Error("callback function required");
-      }
-      var extension = ext[0] !== "." ? "." + ext : ext;
-      this.engines[extension] = fn;
-      return this;
-    };
-    app.param = function param(name, fn) {
-      this.lazyrouter();
-      if (Array.isArray(name)) {
-        for (var i = 0; i < name.length; i++) {
-          this.param(name[i], fn);
-        }
-        return this;
-      }
-      this._router.param(name, fn);
-      return this;
-    };
-    app.set = function set(setting, val) {
-      if (arguments.length === 1) {
-        var settings = this.settings;
-        while (settings && settings !== Object.prototype) {
-          if (hasOwnProperty.call(settings, setting)) {
-            return settings[setting];
-          }
-          settings = Object.getPrototypeOf(settings);
-        }
-        return void 0;
-      }
-      debug('set "%s" to %o', setting, val);
-      this.settings[setting] = val;
-      switch (setting) {
-        case "etag":
-          this.set("etag fn", compileETag(val));
-          break;
-        case "query parser":
-          this.set("query parser fn", compileQueryParser(val));
-          break;
-        case "trust proxy":
-          this.set("trust proxy fn", compileTrust(val));
-          Object.defineProperty(this.settings, trustProxyDefaultSymbol, {
-            configurable: true,
-            value: false
-          });
-          break;
-      }
-      return this;
-    };
-    app.path = function path() {
-      return this.parent ? this.parent.path() + this.mountpath : "";
-    };
-    app.enabled = function enabled(setting) {
-      return Boolean(this.set(setting));
-    };
-    app.disabled = function disabled(setting) {
-      return !this.set(setting);
-    };
-    app.enable = function enable(setting) {
-      return this.set(setting, true);
-    };
-    app.disable = function disable(setting) {
-      return this.set(setting, false);
-    };
-    methods.forEach(function(method) {
-      app[method] = function(path) {
-        if (method === "get" && arguments.length === 1) {
-          return this.set(path);
-        }
-        this.lazyrouter();
-        var route = this._router.route(path);
-        route[method].apply(route, slice.call(arguments, 1));
-        return this;
-      };
-    });
-    app.all = function all(path) {
-      this.lazyrouter();
-      var route = this._router.route(path);
-      var args = slice.call(arguments, 1);
-      for (var i = 0; i < methods.length; i++) {
-        route[methods[i]].apply(route, args);
-      }
-      return this;
-    };
-    app.del = deprecate.function(app.delete, "app.del: Use app.delete instead");
-    app.render = function render(name, options, callback) {
-      var cache = this.cache;
-      var done = callback;
-      var engines = this.engines;
-      var opts = options;
-      var renderOptions = {};
-      var view;
-      if (typeof options === "function") {
-        done = options;
-        opts = {};
-      }
-      merge(renderOptions, this.locals);
-      if (opts._locals) {
-        merge(renderOptions, opts._locals);
-      }
-      merge(renderOptions, opts);
-      if (renderOptions.cache == null) {
-        renderOptions.cache = this.enabled("view cache");
-      }
-      if (renderOptions.cache) {
-        view = cache[name];
-      }
-      if (!view) {
-        var View2 = this.get("view");
-        view = new View2(name, {
-          defaultEngine: this.get("view engine"),
-          root: this.get("views"),
-          engines
-        });
-        if (!view.path) {
-          var dirs = Array.isArray(view.root) && view.root.length > 1 ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' : 'directory "' + view.root + '"';
-          var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs);
-          err.view = view;
-          return done(err);
-        }
-        if (renderOptions.cache) {
-          cache[name] = view;
-        }
-      }
-      tryRender(view, renderOptions, done);
-    };
-    app.listen = function listen() {
-      var server = http.createServer(this);
-      return server.listen.apply(server, arguments);
-    };
-    function logerror(err) {
-      if (this.get("env") !== "test") console.error(err.stack || err.toString());
-    }
-    function tryRender(view, options, callback) {
-      try {
-        view.render(options, callback);
-      } catch (err) {
-        callback(err);
-      }
-    }
-  }
-});
-
-// node_modules/negotiator/lib/charset.js
-var require_charset = __commonJS({
-  "node_modules/negotiator/lib/charset.js"(exports, module) {
-    "use strict";
-    module.exports = preferredCharsets;
-    module.exports.preferredCharsets = preferredCharsets;
-    var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-    function parseAcceptCharset(accept) {
-      var accepts = accept.split(",");
-      for (var i = 0, j = 0; i < accepts.length; i++) {
-        var charset = parseCharset(accepts[i].trim(), i);
-        if (charset) {
-          accepts[j++] = charset;
-        }
-      }
-      accepts.length = j;
-      return accepts;
-    }
-    function parseCharset(str, i) {
-      var match = simpleCharsetRegExp.exec(str);
-      if (!match) return null;
-      var charset = match[1];
-      var q = 1;
-      if (match[2]) {
-        var params = match[2].split(";");
-        for (var j = 0; j < params.length; j++) {
-          var p = params[j].trim().split("=");
-          if (p[0] === "q") {
-            q = parseFloat(p[1]);
-            break;
-          }
-        }
-      }
-      return {
-        charset,
-        q,
-        i
-      };
-    }
-    function getCharsetPriority(charset, accepted, index) {
-      var priority = {
-        o: -1,
-        q: 0,
-        s: 0
-      };
-      for (var i = 0; i < accepted.length; i++) {
-        var spec = specify(charset, accepted[i], index);
-        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-          priority = spec;
-        }
-      }
-      return priority;
-    }
-    function specify(charset, spec, index) {
-      var s = 0;
-      if (spec.charset.toLowerCase() === charset.toLowerCase()) {
-        s |= 1;
-      } else if (spec.charset !== "*") {
-        return null;
-      }
-      return {
-        i: index,
-        o: spec.i,
-        q: spec.q,
-        s
-      };
-    }
-    function preferredCharsets(accept, provided) {
-      var accepts = parseAcceptCharset(accept === void 0 ? "*" : accept || "");
-      if (!provided) {
-        return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset);
-      }
-      var priorities = provided.map(function getPriority(type, index) {
-        return getCharsetPriority(type, accepts, index);
-      });
-      return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {
-        return provided[priorities.indexOf(priority)];
-      });
-    }
-    function compareSpecs(a, b) {
-      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
-    }
-    function getFullCharset(spec) {
-      return spec.charset;
-    }
-    function isQuality(spec) {
-      return spec.q > 0;
-    }
-  }
-});
-
-// node_modules/negotiator/lib/encoding.js
-var require_encoding = __commonJS({
-  "node_modules/negotiator/lib/encoding.js"(exports, module) {
-    "use strict";
-    module.exports = preferredEncodings;
-    module.exports.preferredEncodings = preferredEncodings;
-    var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-    function parseAcceptEncoding(accept) {
-      var accepts = accept.split(",");
-      var hasIdentity = false;
-      var minQuality = 1;
-      for (var i = 0, j = 0; i < accepts.length; i++) {
-        var encoding = parseEncoding(accepts[i].trim(), i);
-        if (encoding) {
-          accepts[j++] = encoding;
-          hasIdentity = hasIdentity || specify("identity", encoding);
-          minQuality = Math.min(minQuality, encoding.q || 1);
-        }
-      }
-      if (!hasIdentity) {
-        accepts[j++] = {
-          encoding: "identity",
-          q: minQuality,
-          i
-        };
-      }
-      accepts.length = j;
-      return accepts;
-    }
-    function parseEncoding(str, i) {
-      var match = simpleEncodingRegExp.exec(str);
-      if (!match) return null;
-      var encoding = match[1];
-      var q = 1;
-      if (match[2]) {
-        var params = match[2].split(";");
-        for (var j = 0; j < params.length; j++) {
-          var p = params[j].trim().split("=");
-          if (p[0] === "q") {
-            q = parseFloat(p[1]);
-            break;
-          }
-        }
-      }
-      return {
-        encoding,
-        q,
-        i
-      };
-    }
-    function getEncodingPriority(encoding, accepted, index) {
-      var priority = {
-        o: -1,
-        q: 0,
-        s: 0
-      };
-      for (var i = 0; i < accepted.length; i++) {
-        var spec = specify(encoding, accepted[i], index);
-        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-          priority = spec;
-        }
-      }
-      return priority;
-    }
-    function specify(encoding, spec, index) {
-      var s = 0;
-      if (spec.encoding.toLowerCase() === encoding.toLowerCase()) {
-        s |= 1;
-      } else if (spec.encoding !== "*") {
-        return null;
-      }
-      return {
-        i: index,
-        o: spec.i,
-        q: spec.q,
-        s
-      };
-    }
-    function preferredEncodings(accept, provided) {
-      var accepts = parseAcceptEncoding(accept || "");
-      if (!provided) {
-        return accepts.filter(isQuality).sort(compareSpecs).map(getFullEncoding);
-      }
-      var priorities = provided.map(function getPriority(type, index) {
-        return getEncodingPriority(type, accepts, index);
-      });
-      return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {
-        return provided[priorities.indexOf(priority)];
-      });
-    }
-    function compareSpecs(a, b) {
-      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
-    }
-    function getFullEncoding(spec) {
-      return spec.encoding;
-    }
-    function isQuality(spec) {
-      return spec.q > 0;
-    }
-  }
-});
-
-// node_modules/negotiator/lib/language.js
-var require_language = __commonJS({
-  "node_modules/negotiator/lib/language.js"(exports, module) {
-    "use strict";
-    module.exports = preferredLanguages;
-    module.exports.preferredLanguages = preferredLanguages;
-    var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
-    function parseAcceptLanguage(accept) {
-      var accepts = accept.split(",");
-      for (var i = 0, j = 0; i < accepts.length; i++) {
-        var language = parseLanguage(accepts[i].trim(), i);
-        if (language) {
-          accepts[j++] = language;
-        }
-      }
-      accepts.length = j;
-      return accepts;
-    }
-    function parseLanguage(str, i) {
-      var match = simpleLanguageRegExp.exec(str);
-      if (!match) return null;
-      var prefix = match[1];
-      var suffix = match[2];
-      var full = prefix;
-      if (suffix) full += "-" + suffix;
-      var q = 1;
-      if (match[3]) {
-        var params = match[3].split(";");
-        for (var j = 0; j < params.length; j++) {
-          var p = params[j].split("=");
-          if (p[0] === "q") q = parseFloat(p[1]);
-        }
-      }
-      return {
-        prefix,
-        suffix,
-        q,
-        i,
-        full
-      };
-    }
-    function getLanguagePriority(language, accepted, index) {
-      var priority = {
-        o: -1,
-        q: 0,
-        s: 0
-      };
-      for (var i = 0; i < accepted.length; i++) {
-        var spec = specify(language, accepted[i], index);
-        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-          priority = spec;
-        }
-      }
-      return priority;
-    }
-    function specify(language, spec, index) {
-      var p = parseLanguage(language);
-      if (!p) return null;
-      var s = 0;
-      if (spec.full.toLowerCase() === p.full.toLowerCase()) {
-        s |= 4;
-      } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
-        s |= 2;
-      } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
-        s |= 1;
-      } else if (spec.full !== "*") {
-        return null;
-      }
-      return {
-        i: index,
-        o: spec.i,
-        q: spec.q,
-        s
-      };
-    }
-    function preferredLanguages(accept, provided) {
-      var accepts = parseAcceptLanguage(accept === void 0 ? "*" : accept || "");
-      if (!provided) {
-        return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage);
-      }
-      var priorities = provided.map(function getPriority(type, index) {
-        return getLanguagePriority(type, accepts, index);
-      });
-      return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {
-        return provided[priorities.indexOf(priority)];
-      });
-    }
-    function compareSpecs(a, b) {
-      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
-    }
-    function getFullLanguage(spec) {
-      return spec.full;
-    }
-    function isQuality(spec) {
-      return spec.q > 0;
-    }
-  }
-});
-
-// node_modules/negotiator/lib/mediaType.js
-var require_mediaType = __commonJS({
-  "node_modules/negotiator/lib/mediaType.js"(exports, module) {
-    "use strict";
-    module.exports = preferredMediaTypes;
-    module.exports.preferredMediaTypes = preferredMediaTypes;
-    var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
-    function parseAccept(accept) {
-      var accepts = splitMediaTypes(accept);
-      for (var i = 0, j = 0; i < accepts.length; i++) {
-        var mediaType = parseMediaType(accepts[i].trim(), i);
-        if (mediaType) {
-          accepts[j++] = mediaType;
-        }
-      }
-      accepts.length = j;
-      return accepts;
-    }
-    function parseMediaType(str, i) {
-      var match = simpleMediaTypeRegExp.exec(str);
-      if (!match) return null;
-      var params = /* @__PURE__ */ Object.create(null);
-      var q = 1;
-      var subtype = match[2];
-      var type = match[1];
-      if (match[3]) {
-        var kvps = splitParameters(match[3]).map(splitKeyValuePair);
-        for (var j = 0; j < kvps.length; j++) {
-          var pair = kvps[j];
-          var key = pair[0].toLowerCase();
-          var val = pair[1];
-          var value = val && val[0] === '"' && val[val.length - 1] === '"' ? val.substr(1, val.length - 2) : val;
-          if (key === "q") {
-            q = parseFloat(value);
-            break;
-          }
-          params[key] = value;
-        }
-      }
-      return {
-        type,
-        subtype,
-        params,
-        q,
-        i
-      };
-    }
-    function getMediaTypePriority(type, accepted, index) {
-      var priority = {
-        o: -1,
-        q: 0,
-        s: 0
-      };
-      for (var i = 0; i < accepted.length; i++) {
-        var spec = specify(type, accepted[i], index);
-        if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-          priority = spec;
-        }
-      }
-      return priority;
-    }
-    function specify(type, spec, index) {
-      var p = parseMediaType(type);
-      var s = 0;
-      if (!p) {
-        return null;
-      }
-      if (spec.type.toLowerCase() == p.type.toLowerCase()) {
-        s |= 4;
-      } else if (spec.type != "*") {
-        return null;
-      }
-      if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
-        s |= 2;
-      } else if (spec.subtype != "*") {
-        return null;
-      }
-      var keys = Object.keys(spec.params);
-      if (keys.length > 0) {
-        if (keys.every(function(k) {
-          return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase();
-        })) {
-          s |= 1;
-        } else {
-          return null;
-        }
-      }
-      return {
-        i: index,
-        o: spec.i,
-        q: spec.q,
-        s
-      };
-    }
-    function preferredMediaTypes(accept, provided) {
-      var accepts = parseAccept(accept === void 0 ? "*/*" : accept || "");
-      if (!provided) {
-        return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
-      }
-      var priorities = provided.map(function getPriority(type, index) {
-        return getMediaTypePriority(type, accepts, index);
-      });
-      return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {
-        return provided[priorities.indexOf(priority)];
-      });
-    }
-    function compareSpecs(a, b) {
-      return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
-    }
-    function getFullType(spec) {
-      return spec.type + "/" + spec.subtype;
-    }
-    function isQuality(spec) {
-      return spec.q > 0;
-    }
-    function quoteCount(string) {
-      var count = 0;
-      var index = 0;
-      while ((index = string.indexOf('"', index)) !== -1) {
-        count++;
-        index++;
-      }
-      return count;
-    }
-    function splitKeyValuePair(str) {
-      var index = str.indexOf("=");
-      var key;
-      var val;
-      if (index === -1) {
-        key = str;
-      } else {
-        key = str.substr(0, index);
-        val = str.substr(index + 1);
-      }
-      return [key, val];
-    }
-    function splitMediaTypes(accept) {
-      var accepts = accept.split(",");
-      for (var i = 1, j = 0; i < accepts.length; i++) {
-        if (quoteCount(accepts[j]) % 2 == 0) {
-          accepts[++j] = accepts[i];
-        } else {
-          accepts[j] += "," + accepts[i];
-        }
-      }
-      accepts.length = j + 1;
-      return accepts;
-    }
-    function splitParameters(str) {
-      var parameters = str.split(";");
-      for (var i = 1, j = 0; i < parameters.length; i++) {
-        if (quoteCount(parameters[j]) % 2 == 0) {
-          parameters[++j] = parameters[i];
-        } else {
-          parameters[j] += ";" + parameters[i];
-        }
-      }
-      parameters.length = j + 1;
-      for (var i = 0; i < parameters.length; i++) {
-        parameters[i] = parameters[i].trim();
-      }
-      return parameters;
-    }
-  }
-});
-
-// node_modules/negotiator/index.js
-var require_negotiator = __commonJS({
-  "node_modules/negotiator/index.js"(exports, module) {
-    "use strict";
-    var preferredCharsets = require_charset();
-    var preferredEncodings = require_encoding();
-    var preferredLanguages = require_language();
-    var preferredMediaTypes = require_mediaType();
-    module.exports = Negotiator;
-    module.exports.Negotiator = Negotiator;
-    function Negotiator(request) {
-      if (!(this instanceof Negotiator)) {
-        return new Negotiator(request);
-      }
-      this.request = request;
-    }
-    Negotiator.prototype.charset = function charset(available) {
-      var set = this.charsets(available);
-      return set && set[0];
-    };
-    Negotiator.prototype.charsets = function charsets(available) {
-      return preferredCharsets(this.request.headers["accept-charset"], available);
-    };
-    Negotiator.prototype.encoding = function encoding(available) {
-      var set = this.encodings(available);
-      return set && set[0];
-    };
-    Negotiator.prototype.encodings = function encodings(available) {
-      return preferredEncodings(this.request.headers["accept-encoding"], available);
-    };
-    Negotiator.prototype.language = function language(available) {
-      var set = this.languages(available);
-      return set && set[0];
-    };
-    Negotiator.prototype.languages = function languages(available) {
-      return preferredLanguages(this.request.headers["accept-language"], available);
-    };
-    Negotiator.prototype.mediaType = function mediaType(available) {
-      var set = this.mediaTypes(available);
-      return set && set[0];
-    };
-    Negotiator.prototype.mediaTypes = function mediaTypes(available) {
-      return preferredMediaTypes(this.request.headers.accept, available);
-    };
-    Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
-    Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
-    Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
-    Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
-    Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
-    Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
-    Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
-    Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
-  }
-});
-
-// node_modules/accepts/index.js
-var require_accepts = __commonJS({
-  "node_modules/accepts/index.js"(exports, module) {
-    "use strict";
-    var Negotiator = require_negotiator();
-    var mime = require_mime_types();
-    module.exports = Accepts;
-    function Accepts(req) {
-      if (!(this instanceof Accepts)) {
-        return new Accepts(req);
-      }
-      this.headers = req.headers;
-      this.negotiator = new Negotiator(req);
-    }
-    Accepts.prototype.type = Accepts.prototype.types = function(types_) {
-      var types = types_;
-      if (types && !Array.isArray(types)) {
-        types = new Array(arguments.length);
-        for (var i = 0; i < types.length; i++) {
-          types[i] = arguments[i];
-        }
-      }
-      if (!types || types.length === 0) {
-        return this.negotiator.mediaTypes();
-      }
-      if (!this.headers.accept) {
-        return types[0];
-      }
-      var mimes = types.map(extToMime);
-      var accepts = this.negotiator.mediaTypes(mimes.filter(validMime));
-      var first = accepts[0];
-      return first ? types[mimes.indexOf(first)] : false;
-    };
-    Accepts.prototype.encoding = Accepts.prototype.encodings = function(encodings_) {
-      var encodings = encodings_;
-      if (encodings && !Array.isArray(encodings)) {
-        encodings = new Array(arguments.length);
-        for (var i = 0; i < encodings.length; i++) {
-          encodings[i] = arguments[i];
-        }
-      }
-      if (!encodings || encodings.length === 0) {
-        return this.negotiator.encodings();
-      }
-      return this.negotiator.encodings(encodings)[0] || false;
-    };
-    Accepts.prototype.charset = Accepts.prototype.charsets = function(charsets_) {
-      var charsets = charsets_;
-      if (charsets && !Array.isArray(charsets)) {
-        charsets = new Array(arguments.length);
-        for (var i = 0; i < charsets.length; i++) {
-          charsets[i] = arguments[i];
-        }
-      }
-      if (!charsets || charsets.length === 0) {
-        return this.negotiator.charsets();
-      }
-      return this.negotiator.charsets(charsets)[0] || false;
-    };
-    Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function(languages_) {
-      var languages = languages_;
-      if (languages && !Array.isArray(languages)) {
-        languages = new Array(arguments.length);
-        for (var i = 0; i < languages.length; i++) {
-          languages[i] = arguments[i];
-        }
-      }
-      if (!languages || languages.length === 0) {
-        return this.negotiator.languages();
-      }
-      return this.negotiator.languages(languages)[0] || false;
-    };
-    function extToMime(type) {
-      return type.indexOf("/") === -1 ? mime.lookup(type) : type;
-    }
-    function validMime(type) {
-      return typeof type === "string";
-    }
-  }
-});
-
-// node_modules/express/lib/request.js
-var require_request = __commonJS({
-  "node_modules/express/lib/request.js"(exports, module) {
-    "use strict";
-    var accepts = require_accepts();
-    var deprecate = require_depd()("express");
-    var isIP = __require("net").isIP;
-    var typeis = require_type_is();
-    var http = __require("http");
-    var fresh = require_fresh();
-    var parseRange = require_range_parser();
-    var parse = require_parseurl();
-    var proxyaddr = require_proxy_addr();
-    var req = Object.create(http.IncomingMessage.prototype);
-    module.exports = req;
-    req.get = req.header = function header(name) {
-      if (!name) {
-        throw new TypeError("name argument is required to req.get");
-      }
-      if (typeof name !== "string") {
-        throw new TypeError("name must be a string to req.get");
-      }
-      var lc = name.toLowerCase();
-      switch (lc) {
-        case "referer":
-        case "referrer":
-          return this.headers.referrer || this.headers.referer;
-        default:
-          return this.headers[lc];
-      }
-    };
-    req.accepts = function() {
-      var accept = accepts(this);
-      return accept.types.apply(accept, arguments);
-    };
-    req.acceptsEncodings = function() {
-      var accept = accepts(this);
-      return accept.encodings.apply(accept, arguments);
-    };
-    req.acceptsEncoding = deprecate.function(req.acceptsEncodings, "req.acceptsEncoding: Use acceptsEncodings instead");
-    req.acceptsCharsets = function() {
-      var accept = accepts(this);
-      return accept.charsets.apply(accept, arguments);
-    };
-    req.acceptsCharset = deprecate.function(req.acceptsCharsets, "req.acceptsCharset: Use acceptsCharsets instead");
-    req.acceptsLanguages = function() {
-      var accept = accepts(this);
-      return accept.languages.apply(accept, arguments);
-    };
-    req.acceptsLanguage = deprecate.function(req.acceptsLanguages, "req.acceptsLanguage: Use acceptsLanguages instead");
-    req.range = function range(size, options) {
-      var range2 = this.get("Range");
-      if (!range2) return;
-      return parseRange(size, range2, options);
-    };
-    req.param = function param(name, defaultValue) {
-      var params = this.params || {};
-      var body = this.body || {};
-      var query = this.query || {};
-      var args = arguments.length === 1 ? "name" : "name, default";
-      deprecate("req.param(" + args + "): Use req.params, req.body, or req.query instead");
-      if (null != params[name] && params.hasOwnProperty(name)) return params[name];
-      if (null != body[name]) return body[name];
-      if (null != query[name]) return query[name];
-      return defaultValue;
-    };
-    req.is = function is(types) {
-      var arr = types;
-      if (!Array.isArray(types)) {
-        arr = new Array(arguments.length);
-        for (var i = 0; i < arr.length; i++) {
-          arr[i] = arguments[i];
-        }
-      }
-      return typeis(this, arr);
-    };
-    defineGetter(req, "protocol", function protocol() {
-      var proto = this.connection.encrypted ? "https" : "http";
-      var trust = this.app.get("trust proxy fn");
-      if (!trust(this.connection.remoteAddress, 0)) {
-        return proto;
-      }
-      var header = this.get("X-Forwarded-Proto") || proto;
-      var index = header.indexOf(",");
-      return index !== -1 ? header.substring(0, index).trim() : header.trim();
-    });
-    defineGetter(req, "secure", function secure() {
-      return this.protocol === "https";
-    });
-    defineGetter(req, "ip", function ip() {
-      var trust = this.app.get("trust proxy fn");
-      return proxyaddr(this, trust);
-    });
-    defineGetter(req, "ips", function ips() {
-      var trust = this.app.get("trust proxy fn");
-      var addrs = proxyaddr.all(this, trust);
-      addrs.reverse().pop();
-      return addrs;
-    });
-    defineGetter(req, "subdomains", function subdomains() {
-      var hostname = this.hostname;
-      if (!hostname) return [];
-      var offset = this.app.get("subdomain offset");
-      var subdomains2 = !isIP(hostname) ? hostname.split(".").reverse() : [hostname];
-      return subdomains2.slice(offset);
-    });
-    defineGetter(req, "path", function path() {
-      return parse(this).pathname;
-    });
-    defineGetter(req, "hostname", function hostname() {
-      var trust = this.app.get("trust proxy fn");
-      var host = this.get("X-Forwarded-Host");
-      if (!host || !trust(this.connection.remoteAddress, 0)) {
-        host = this.get("Host");
-      } else if (host.indexOf(",") !== -1) {
-        host = host.substring(0, host.indexOf(",")).trimRight();
-      }
-      if (!host) return;
-      var offset = host[0] === "[" ? host.indexOf("]") + 1 : 0;
-      var index = host.indexOf(":", offset);
-      return index !== -1 ? host.substring(0, index) : host;
-    });
-    defineGetter(req, "host", deprecate.function(function host() {
-      return this.hostname;
-    }, "req.host: Use req.hostname instead"));
-    defineGetter(req, "fresh", function() {
-      var method = this.method;
-      var res = this.res;
-      var status = res.statusCode;
-      if ("GET" !== method && "HEAD" !== method) return false;
-      if (status >= 200 && status < 300 || 304 === status) {
-        return fresh(this.headers, {
-          "etag": res.get("ETag"),
-          "last-modified": res.get("Last-Modified")
-        });
-      }
-      return false;
-    });
-    defineGetter(req, "stale", function stale() {
-      return !this.fresh;
-    });
-    defineGetter(req, "xhr", function xhr() {
-      var val = this.get("X-Requested-With") || "";
-      return val.toLowerCase() === "xmlhttprequest";
-    });
-    function defineGetter(obj, name, getter) {
-      Object.defineProperty(obj, name, {
-        configurable: true,
-        enumerable: true,
-        get: getter
-      });
-    }
-  }
-});
-
-// node_modules/cookie-signature/index.js
-var require_cookie_signature = __commonJS({
-  "node_modules/cookie-signature/index.js"(exports) {
-    var crypto = __require("crypto");
-    exports.sign = function(val, secret) {
-      if ("string" != typeof val) throw new TypeError("Cookie value must be provided as a string.");
-      if ("string" != typeof secret) throw new TypeError("Secret string must be provided.");
-      return val + "." + crypto.createHmac("sha256", secret).update(val).digest("base64").replace(/\=+$/, "");
-    };
-    exports.unsign = function(val, secret) {
-      if ("string" != typeof val) throw new TypeError("Signed cookie string must be provided.");
-      if ("string" != typeof secret) throw new TypeError("Secret string must be provided.");
-      var str = val.slice(0, val.lastIndexOf(".")), mac = exports.sign(str, secret);
-      return sha1(mac) == sha1(val) ? str : false;
-    };
-    function sha1(str) {
-      return crypto.createHash("sha1").update(str).digest("hex");
-    }
-  }
-});
-
-// node_modules/cookie/index.js
-var require_cookie = __commonJS({
-  "node_modules/cookie/index.js"(exports) {
-    "use strict";
-    exports.parse = parse;
-    exports.serialize = serialize;
-    var __toString = Object.prototype.toString;
-    var cookieNameRegExp = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
-    var cookieValueRegExp = /^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/;
-    var domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;
-    var pathValueRegExp = /^[\u0020-\u003A\u003D-\u007E]*$/;
-    function parse(str, opt) {
-      if (typeof str !== "string") {
-        throw new TypeError("argument str must be a string");
-      }
-      var obj = {};
-      var len = str.length;
-      if (len < 2) return obj;
-      var dec = opt && opt.decode || decode;
-      var index = 0;
-      var eqIdx = 0;
-      var endIdx = 0;
-      do {
-        eqIdx = str.indexOf("=", index);
-        if (eqIdx === -1) break;
-        endIdx = str.indexOf(";", index);
-        if (endIdx === -1) {
-          endIdx = len;
-        } else if (eqIdx > endIdx) {
-          index = str.lastIndexOf(";", eqIdx - 1) + 1;
-          continue;
-        }
-        var keyStartIdx = startIndex(str, index, eqIdx);
-        var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);
-        var key = str.slice(keyStartIdx, keyEndIdx);
-        if (!obj.hasOwnProperty(key)) {
-          var valStartIdx = startIndex(str, eqIdx + 1, endIdx);
-          var valEndIdx = endIndex(str, endIdx, valStartIdx);
-          if (str.charCodeAt(valStartIdx) === 34 && str.charCodeAt(valEndIdx - 1) === 34) {
-            valStartIdx++;
-            valEndIdx--;
-          }
-          var val = str.slice(valStartIdx, valEndIdx);
-          obj[key] = tryDecode(val, dec);
-        }
-        index = endIdx + 1;
-      } while (index < len);
-      return obj;
-    }
-    function startIndex(str, index, max) {
-      do {
-        var code = str.charCodeAt(index);
-        if (code !== 32 && code !== 9) return index;
-      } while (++index < max);
-      return max;
-    }
-    function endIndex(str, index, min) {
-      while (index > min) {
-        var code = str.charCodeAt(--index);
-        if (code !== 32 && code !== 9) return index + 1;
-      }
-      return min;
-    }
-    function serialize(name, val, opt) {
-      var enc = opt && opt.encode || encodeURIComponent;
-      if (typeof enc !== "function") {
-        throw new TypeError("option encode is invalid");
-      }
-      if (!cookieNameRegExp.test(name)) {
-        throw new TypeError("argument name is invalid");
-      }
-      var value = enc(val);
-      if (!cookieValueRegExp.test(value)) {
-        throw new TypeError("argument val is invalid");
-      }
-      var str = name + "=" + value;
-      if (!opt) return str;
-      if (null != opt.maxAge) {
-        var maxAge = Math.floor(opt.maxAge);
-        if (!isFinite(maxAge)) {
-          throw new TypeError("option maxAge is invalid");
-        }
-        str += "; Max-Age=" + maxAge;
-      }
-      if (opt.domain) {
-        if (!domainValueRegExp.test(opt.domain)) {
-          throw new TypeError("option domain is invalid");
-        }
-        str += "; Domain=" + opt.domain;
-      }
-      if (opt.path) {
-        if (!pathValueRegExp.test(opt.path)) {
-          throw new TypeError("option path is invalid");
-        }
-        str += "; Path=" + opt.path;
-      }
-      if (opt.expires) {
-        var expires = opt.expires;
-        if (!isDate(expires) || isNaN(expires.valueOf())) {
-          throw new TypeError("option expires is invalid");
-        }
-        str += "; Expires=" + expires.toUTCString();
-      }
-      if (opt.httpOnly) {
-        str += "; HttpOnly";
-      }
-      if (opt.secure) {
-        str += "; Secure";
-      }
-      if (opt.partitioned) {
-        str += "; Partitioned";
-      }
-      if (opt.priority) {
-        var priority = typeof opt.priority === "string" ? opt.priority.toLowerCase() : opt.priority;
-        switch (priority) {
-          case "low":
-            str += "; Priority=Low";
-            break;
-          case "medium":
-            str += "; Priority=Medium";
-            break;
-          case "high":
-            str += "; Priority=High";
-            break;
-          default:
-            throw new TypeError("option priority is invalid");
-        }
-      }
-      if (opt.sameSite) {
-        var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite;
-        switch (sameSite) {
-          case true:
-            str += "; SameSite=Strict";
-            break;
-          case "lax":
-            str += "; SameSite=Lax";
-            break;
-          case "strict":
-            str += "; SameSite=Strict";
-            break;
-          case "none":
-            str += "; SameSite=None";
-            break;
-          default:
-            throw new TypeError("option sameSite is invalid");
-        }
-      }
-      return str;
-    }
-    function decode(str) {
-      return str.indexOf("%") !== -1 ? decodeURIComponent(str) : str;
-    }
-    function isDate(val) {
-      return __toString.call(val) === "[object Date]";
-    }
-    function tryDecode(str, decode2) {
-      try {
-        return decode2(str);
-      } catch (e) {
-        return str;
-      }
-    }
-  }
-});
-
-// node_modules/vary/index.js
-var require_vary = __commonJS({
-  "node_modules/vary/index.js"(exports, module) {
-    "use strict";
-    module.exports = vary;
-    module.exports.append = append;
-    var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
-    function append(header, field) {
-      if (typeof header !== "string") {
-        throw new TypeError("header argument is required");
-      }
-      if (!field) {
-        throw new TypeError("field argument is required");
-      }
-      var fields = !Array.isArray(field) ? parse(String(field)) : field;
-      for (var j = 0; j < fields.length; j++) {
-        if (!FIELD_NAME_REGEXP.test(fields[j])) {
-          throw new TypeError("field argument contains an invalid header name");
-        }
-      }
-      if (header === "*") {
-        return header;
-      }
-      var val = header;
-      var vals = parse(header.toLowerCase());
-      if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) {
-        return "*";
-      }
-      for (var i = 0; i < fields.length; i++) {
-        var fld = fields[i].toLowerCase();
-        if (vals.indexOf(fld) === -1) {
-          vals.push(fld);
-          val = val ? val + ", " + fields[i] : fields[i];
-        }
-      }
-      return val;
-    }
-    function parse(header) {
-      var end = 0;
-      var list = [];
-      var start = 0;
-      for (var i = 0, len = header.length; i < len; i++) {
-        switch (header.charCodeAt(i)) {
-          case 32:
-            if (start === end) {
-              start = end = i + 1;
-            }
-            break;
-          case 44:
-            list.push(header.substring(start, end));
-            start = end = i + 1;
-            break;
-          default:
-            end = i + 1;
-            break;
-        }
-      }
-      list.push(header.substring(start, end));
-      return list;
-    }
-    function vary(res, field) {
-      if (!res || !res.getHeader || !res.setHeader) {
-        throw new TypeError("res argument is required");
-      }
-      var val = res.getHeader("Vary") || "";
-      var header = Array.isArray(val) ? val.join(", ") : String(val);
-      if (val = append(header, field)) {
-        res.setHeader("Vary", val);
-      }
-    }
-  }
-});
-
-// node_modules/express/lib/response.js
-var require_response = __commonJS({
-  "node_modules/express/lib/response.js"(exports, module) {
-    "use strict";
-    var Buffer2 = require_safe_buffer().Buffer;
-    var contentDisposition = require_content_disposition();
-    var createError = require_http_errors();
-    var deprecate = require_depd()("express");
-    var encodeUrl = require_encodeurl();
-    var escapeHtml = require_escape_html();
-    var http = __require("http");
-    var isAbsolute = require_utils2().isAbsolute;
-    var onFinished = require_on_finished();
-    var path = __require("path");
-    var statuses = require_statuses();
-    var merge = require_utils_merge();
-    var sign = require_cookie_signature().sign;
-    var normalizeType = require_utils2().normalizeType;
-    var normalizeTypes = require_utils2().normalizeTypes;
-    var setCharset = require_utils2().setCharset;
-    var cookie = require_cookie();
-    var send = require_send();
-    var extname = path.extname;
-    var mime = send.mime;
-    var resolve = path.resolve;
-    var vary = require_vary();
-    var res = Object.create(http.ServerResponse.prototype);
-    module.exports = res;
-    var charsetRegExp = /;\s*charset\s*=/;
-    res.status = function status(code) {
-      if ((typeof code === "string" || Math.floor(code) !== code) && code > 99 && code < 1e3) {
-        deprecate("res.status(" + JSON.stringify(code) + "): use res.status(" + Math.floor(code) + ") instead");
-      }
-      this.statusCode = code;
-      return this;
-    };
-    res.links = function(links) {
-      var link = this.get("Link") || "";
-      if (link) link += ", ";
-      return this.set("Link", link + Object.keys(links).map(function(rel) {
-        return "<" + links[rel] + '>; rel="' + rel + '"';
-      }).join(", "));
-    };
-    res.send = function send2(body) {
-      var chunk = body;
-      var encoding;
-      var req = this.req;
-      var type;
-      var app = this.app;
-      if (arguments.length === 2) {
-        if (typeof arguments[0] !== "number" && typeof arguments[1] === "number") {
-          deprecate("res.send(body, status): Use res.status(status).send(body) instead");
-          this.statusCode = arguments[1];
-        } else {
-          deprecate("res.send(status, body): Use res.status(status).send(body) instead");
-          this.statusCode = arguments[0];
-          chunk = arguments[1];
-        }
-      }
-      if (typeof chunk === "number" && arguments.length === 1) {
-        if (!this.get("Content-Type")) {
-          this.type("txt");
-        }
-        deprecate("res.send(status): Use res.sendStatus(status) instead");
-        this.statusCode = chunk;
-        chunk = statuses.message[chunk];
-      }
-      switch (typeof chunk) {
-        case "string":
-          if (!this.get("Content-Type")) {
-            this.type("html");
-          }
-          break;
-        case "boolean":
-        case "number":
-        case "object":
-          if (chunk === null) {
-            chunk = "";
-          } else if (Buffer2.isBuffer(chunk)) {
-            if (!this.get("Content-Type")) {
-              this.type("bin");
-            }
-          } else {
-            return this.json(chunk);
-          }
-          break;
-      }
-      if (typeof chunk === "string") {
-        encoding = "utf8";
-        type = this.get("Content-Type");
-        if (typeof type === "string") {
-          this.set("Content-Type", setCharset(type, "utf-8"));
-        }
-      }
-      var etagFn = app.get("etag fn");
-      var generateETag = !this.get("ETag") && typeof etagFn === "function";
-      var len;
-      if (chunk !== void 0) {
-        if (Buffer2.isBuffer(chunk)) {
-          len = chunk.length;
-        } else if (!generateETag && chunk.length < 1e3) {
-          len = Buffer2.byteLength(chunk, encoding);
-        } else {
-          chunk = Buffer2.from(chunk, encoding);
-          encoding = void 0;
-          len = chunk.length;
-        }
-        this.set("Content-Length", len);
-      }
-      var etag;
-      if (generateETag && len !== void 0) {
-        if (etag = etagFn(chunk, encoding)) {
-          this.set("ETag", etag);
-        }
-      }
-      if (req.fresh) this.statusCode = 304;
-      if (204 === this.statusCode || 304 === this.statusCode) {
-        this.removeHeader("Content-Type");
-        this.removeHeader("Content-Length");
-        this.removeHeader("Transfer-Encoding");
-        chunk = "";
-      }
-      if (this.statusCode === 205) {
-        this.set("Content-Length", "0");
-        this.removeHeader("Transfer-Encoding");
-        chunk = "";
-      }
-      if (req.method === "HEAD") {
-        this.end();
-      } else {
-        this.end(chunk, encoding);
-      }
-      return this;
-    };
-    res.json = function json(obj) {
-      var val = obj;
-      if (arguments.length === 2) {
-        if (typeof arguments[1] === "number") {
-          deprecate("res.json(obj, status): Use res.status(status).json(obj) instead");
-          this.statusCode = arguments[1];
-        } else {
-          deprecate("res.json(status, obj): Use res.status(status).json(obj) instead");
-          this.statusCode = arguments[0];
-          val = arguments[1];
-        }
-      }
-      var app = this.app;
-      var escape2 = app.get("json escape");
-      var replacer = app.get("json replacer");
-      var spaces = app.get("json spaces");
-      var body = stringify(val, replacer, spaces, escape2);
-      if (!this.get("Content-Type")) {
-        this.set("Content-Type", "application/json");
-      }
-      return this.send(body);
-    };
-    res.jsonp = function jsonp(obj) {
-      var val = obj;
-      if (arguments.length === 2) {
-        if (typeof arguments[1] === "number") {
-          deprecate("res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead");
-          this.statusCode = arguments[1];
-        } else {
-          deprecate("res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead");
-          this.statusCode = arguments[0];
-          val = arguments[1];
-        }
-      }
-      var app = this.app;
-      var escape2 = app.get("json escape");
-      var replacer = app.get("json replacer");
-      var spaces = app.get("json spaces");
-      var body = stringify(val, replacer, spaces, escape2);
-      var callback = this.req.query[app.get("jsonp callback name")];
-      if (!this.get("Content-Type")) {
-        this.set("X-Content-Type-Options", "nosniff");
-        this.set("Content-Type", "application/json");
-      }
-      if (Array.isArray(callback)) {
-        callback = callback[0];
-      }
-      if (typeof callback === "string" && callback.length !== 0) {
-        this.set("X-Content-Type-Options", "nosniff");
-        this.set("Content-Type", "text/javascript");
-        callback = callback.replace(/[^\[\]\w$.]/g, "");
-        if (body === void 0) {
-          body = "";
-        } else if (typeof body === "string") {
-          body = body.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
-        }
-        body = "/**/ typeof " + callback + " === 'function' && " + callback + "(" + body + ");";
-      }
-      return this.send(body);
-    };
-    res.sendStatus = function sendStatus(statusCode) {
-      var body = statuses.message[statusCode] || String(statusCode);
-      this.statusCode = statusCode;
-      this.type("txt");
-      return this.send(body);
-    };
-    res.sendFile = function sendFile(path2, options, callback) {
-      var done = callback;
-      var req = this.req;
-      var res2 = this;
-      var next = req.next;
-      var opts = options || {};
-      if (!path2) {
-        throw new TypeError("path argument is required to res.sendFile");
-      }
-      if (typeof path2 !== "string") {
-        throw new TypeError("path must be a string to res.sendFile");
-      }
-      if (typeof options === "function") {
-        done = options;
-        opts = {};
-      }
-      if (!opts.root && !isAbsolute(path2)) {
-        throw new TypeError("path must be absolute or specify root to res.sendFile");
-      }
-      var pathname = encodeURI(path2);
-      var file = send(req, pathname, opts);
-      sendfile(res2, file, opts, function(err) {
-        if (done) return done(err);
-        if (err && err.code === "EISDIR") return next();
-        if (err && err.code !== "ECONNABORTED" && err.syscall !== "write") {
-          next(err);
-        }
-      });
-    };
-    res.sendfile = function(path2, options, callback) {
-      var done = callback;
-      var req = this.req;
-      var res2 = this;
-      var next = req.next;
-      var opts = options || {};
-      if (typeof options === "function") {
-        done = options;
-        opts = {};
-      }
-      var file = send(req, path2, opts);
-      sendfile(res2, file, opts, function(err) {
-        if (done) return done(err);
-        if (err && err.code === "EISDIR") return next();
-        if (err && err.code !== "ECONNABORTED" && err.syscall !== "write") {
-          next(err);
-        }
-      });
-    };
-    res.sendfile = deprecate.function(res.sendfile, "res.sendfile: Use res.sendFile instead");
-    res.download = function download(path2, filename, options, callback) {
-      var done = callback;
-      var name = filename;
-      var opts = options || null;
-      if (typeof filename === "function") {
-        done = filename;
-        name = null;
-        opts = null;
-      } else if (typeof options === "function") {
-        done = options;
-        opts = null;
-      }
-      if (typeof filename === "object" && (typeof options === "function" || options === void 0)) {
-        name = null;
-        opts = filename;
-      }
-      var headers = {
-        "Content-Disposition": contentDisposition(name || path2)
-      };
-      if (opts && opts.headers) {
-        var keys = Object.keys(opts.headers);
-        for (var i = 0; i < keys.length; i++) {
-          var key = keys[i];
-          if (key.toLowerCase() !== "content-disposition") {
-            headers[key] = opts.headers[key];
-          }
-        }
-      }
-      opts = Object.create(opts);
-      opts.headers = headers;
-      var fullPath = !opts.root ? resolve(path2) : path2;
-      return this.sendFile(fullPath, opts, done);
-    };
-    res.contentType = res.type = function contentType(type) {
-      var ct = type.indexOf("/") === -1 ? mime.lookup(type) : type;
-      return this.set("Content-Type", ct);
-    };
-    res.format = function(obj) {
-      var req = this.req;
-      var next = req.next;
-      var keys = Object.keys(obj).filter(function(v) {
-        return v !== "default";
-      });
-      var key = keys.length > 0 ? req.accepts(keys) : false;
-      this.vary("Accept");
-      if (key) {
-        this.set("Content-Type", normalizeType(key).value);
-        obj[key](req, this, next);
-      } else if (obj.default) {
-        obj.default(req, this, next);
-      } else {
-        next(createError(406, {
-          types: normalizeTypes(keys).map(function(o) {
-            return o.value;
-          })
-        }));
-      }
-      return this;
-    };
-    res.attachment = function attachment(filename) {
-      if (filename) {
-        this.type(extname(filename));
-      }
-      this.set("Content-Disposition", contentDisposition(filename));
-      return this;
-    };
-    res.append = function append(field, val) {
-      var prev = this.get(field);
-      var value = val;
-      if (prev) {
-        value = Array.isArray(prev) ? prev.concat(val) : Array.isArray(val) ? [prev].concat(val) : [prev, val];
-      }
-      return this.set(field, value);
-    };
-    res.set = res.header = function header(field, val) {
-      if (arguments.length === 2) {
-        var value = Array.isArray(val) ? val.map(String) : String(val);
-        if (field.toLowerCase() === "content-type") {
-          if (Array.isArray(value)) {
-            throw new TypeError("Content-Type cannot be set to an Array");
-          }
-          if (!charsetRegExp.test(value)) {
-            var charset = mime.charsets.lookup(value.split(";")[0]);
-            if (charset) value += "; charset=" + charset.toLowerCase();
-          }
-        }
-        this.setHeader(field, value);
-      } else {
-        for (var key in field) {
-          this.set(key, field[key]);
-        }
-      }
-      return this;
-    };
-    res.get = function(field) {
-      return this.getHeader(field);
-    };
-    res.clearCookie = function clearCookie(name, options) {
-      if (options) {
-        if (options.maxAge) {
-          deprecate('res.clearCookie: Passing "options.maxAge" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');
-        }
-        if (options.expires) {
-          deprecate('res.clearCookie: Passing "options.expires" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');
-        }
-      }
-      var opts = merge({
-        expires: /* @__PURE__ */ new Date(1),
-        path: "/"
-      }, options);
-      return this.cookie(name, "", opts);
-    };
-    res.cookie = function(name, value, options) {
-      var opts = merge({}, options);
-      var secret = this.req.secret;
-      var signed = opts.signed;
-      if (signed && !secret) {
-        throw new Error('cookieParser("secret") required for signed cookies');
-      }
-      var val = typeof value === "object" ? "j:" + JSON.stringify(value) : String(value);
-      if (signed) {
-        val = "s:" + sign(val, secret);
-      }
-      if (opts.maxAge != null) {
-        var maxAge = opts.maxAge - 0;
-        if (!isNaN(maxAge)) {
-          opts.expires = new Date(Date.now() + maxAge);
-          opts.maxAge = Math.floor(maxAge / 1e3);
-        }
-      }
-      if (opts.path == null) {
-        opts.path = "/";
-      }
-      this.append("Set-Cookie", cookie.serialize(name, String(val), opts));
-      return this;
-    };
-    res.location = function location(url) {
-      var loc;
-      if (url === "back") {
-        deprecate('res.location("back"): use res.location(req.get("Referrer") || "/") and refer to https://dub.sh/security-redirect for best practices');
-        loc = this.req.get("Referrer") || "/";
-      } else {
-        loc = String(url);
-      }
-      return this.set("Location", encodeUrl(loc));
-    };
-    res.redirect = function redirect(url) {
-      var address = url;
-      var body;
-      var status = 302;
-      if (arguments.length === 2) {
-        if (typeof arguments[0] === "number") {
-          status = arguments[0];
-          address = arguments[1];
-        } else {
-          deprecate("res.redirect(url, status): Use res.redirect(status, url) instead");
-          status = arguments[1];
-        }
-      }
-      address = this.location(address).get("Location");
-      this.format({
-        text: function() {
-          body = statuses.message[status] + ". Redirecting to " + address;
-        },
-        html: function() {
-          var u = escapeHtml(address);
-          body = "<p>" + statuses.message[status] + ". Redirecting to " + u + "</p>";
-        },
-        default: function() {
-          body = "";
-        }
-      });
-      this.statusCode = status;
-      this.set("Content-Length", Buffer2.byteLength(body));
-      if (this.req.method === "HEAD") {
-        this.end();
-      } else {
-        this.end(body);
-      }
-    };
-    res.vary = function(field) {
-      if (!field || Array.isArray(field) && !field.length) {
-        deprecate("res.vary(): Provide a field name");
-        return this;
-      }
-      vary(this, field);
-      return this;
-    };
-    res.render = function render(view, options, callback) {
-      var app = this.req.app;
-      var done = callback;
-      var opts = options || {};
-      var req = this.req;
-      var self = this;
-      if (typeof options === "function") {
-        done = options;
-        opts = {};
-      }
-      opts._locals = self.locals;
-      done = done || function(err, str) {
-        if (err) return req.next(err);
-        self.send(str);
-      };
-      app.render(view, opts, done);
-    };
-    function sendfile(res2, file, options, callback) {
-      var done = false;
-      var streaming;
-      function onaborted() {
-        if (done) return;
-        done = true;
-        var err = new Error("Request aborted");
-        err.code = "ECONNABORTED";
-        callback(err);
-      }
-      function ondirectory() {
-        if (done) return;
-        done = true;
-        var err = new Error("EISDIR, read");
-        err.code = "EISDIR";
-        callback(err);
-      }
-      function onerror(err) {
-        if (done) return;
-        done = true;
-        callback(err);
-      }
-      function onend() {
-        if (done) return;
-        done = true;
-        callback();
-      }
-      function onfile() {
-        streaming = false;
-      }
-      function onfinish(err) {
-        if (err && err.code === "ECONNRESET") return onaborted();
-        if (err) return onerror(err);
-        if (done) return;
-        setImmediate(function() {
-          if (streaming !== false && !done) {
-            onaborted();
-            return;
-          }
-          if (done) return;
-          done = true;
-          callback();
-        });
-      }
-      function onstream() {
-        streaming = true;
-      }
-      file.on("directory", ondirectory);
-      file.on("end", onend);
-      file.on("error", onerror);
-      file.on("file", onfile);
-      file.on("stream", onstream);
-      onFinished(res2, onfinish);
-      if (options.headers) {
-        file.on("headers", function headers(res3) {
-          var obj = options.headers;
-          var keys = Object.keys(obj);
-          for (var i = 0; i < keys.length; i++) {
-            var k = keys[i];
-            res3.setHeader(k, obj[k]);
-          }
-        });
-      }
-      file.pipe(res2);
-    }
-    function stringify(value, replacer, spaces, escape2) {
-      var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value);
-      if (escape2 && typeof json === "string") {
-        json = json.replace(/[<>&]/g, function(c) {
-          switch (c.charCodeAt(0)) {
-            case 60:
-              return "\\u003c";
-            case 62:
-              return "\\u003e";
-            case 38:
-              return "\\u0026";
-            default:
-              return c;
-          }
-        });
-      }
-      return json;
-    }
-  }
-});
-
-// node_modules/serve-static/index.js
-var require_serve_static = __commonJS({
-  "node_modules/serve-static/index.js"(exports, module) {
-    "use strict";
-    var encodeUrl = require_encodeurl();
-    var escapeHtml = require_escape_html();
-    var parseUrl = require_parseurl();
-    var resolve = __require("path").resolve;
-    var send = require_send();
-    var url = __require("url");
-    module.exports = serveStatic;
-    module.exports.mime = send.mime;
-    function serveStatic(root, options) {
-      if (!root) {
-        throw new TypeError("root path required");
-      }
-      if (typeof root !== "string") {
-        throw new TypeError("root path must be a string");
-      }
-      var opts = Object.create(options || null);
-      var fallthrough = opts.fallthrough !== false;
-      var redirect = opts.redirect !== false;
-      var setHeaders = opts.setHeaders;
-      if (setHeaders && typeof setHeaders !== "function") {
-        throw new TypeError("option setHeaders must be function");
-      }
-      opts.maxage = opts.maxage || opts.maxAge || 0;
-      opts.root = resolve(root);
-      var onDirectory = redirect ? createRedirectDirectoryListener() : createNotFoundDirectoryListener();
-      return function serveStatic2(req, res, next) {
-        if (req.method !== "GET" && req.method !== "HEAD") {
-          if (fallthrough) {
-            return next();
-          }
-          res.statusCode = 405;
-          res.setHeader("Allow", "GET, HEAD");
-          res.setHeader("Content-Length", "0");
-          res.end();
-          return;
-        }
-        var forwardError = !fallthrough;
-        var originalUrl = parseUrl.original(req);
-        var path = parseUrl(req).pathname;
-        if (path === "/" && originalUrl.pathname.substr(-1) !== "/") {
-          path = "";
-        }
-        var stream = send(req, path, opts);
-        stream.on("directory", onDirectory);
-        if (setHeaders) {
-          stream.on("headers", setHeaders);
-        }
-        if (fallthrough) {
-          stream.on("file", function onFile() {
-            forwardError = true;
-          });
-        }
-        stream.on("error", function error(err) {
-          if (forwardError || !(err.statusCode < 500)) {
-            next(err);
-            return;
-          }
-          next();
-        });
-        stream.pipe(res);
-      };
-    }
-    function collapseLeadingSlashes(str) {
-      for (var i = 0; i < str.length; i++) {
-        if (str.charCodeAt(i) !== 47) {
-          break;
-        }
-      }
-      return i > 1 ? "/" + str.substr(i) : str;
-    }
-    function createHtmlDocument(title, body) {
-      return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>' + title + "</title>\n</head>\n<body>\n<pre>" + body + "</pre>\n</body>\n</html>\n";
-    }
-    function createNotFoundDirectoryListener() {
-      return function notFound() {
-        this.error(404);
-      };
-    }
-    function createRedirectDirectoryListener() {
-      return function redirect(res) {
-        if (this.hasTrailingSlash()) {
-          this.error(404);
-          return;
-        }
-        var originalUrl = parseUrl.original(this.req);
-        originalUrl.path = null;
-        originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + "/");
-        var loc = encodeUrl(url.format(originalUrl));
-        var doc = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc));
-        res.statusCode = 301;
-        res.setHeader("Content-Type", "text/html; charset=UTF-8");
-        res.setHeader("Content-Length", Buffer.byteLength(doc));
-        res.setHeader("Content-Security-Policy", "default-src 'none'");
-        res.setHeader("X-Content-Type-Options", "nosniff");
-        res.setHeader("Location", loc);
-        res.end(doc);
-      };
-    }
-  }
-});
-
-// node_modules/express/lib/express.js
-var require_express = __commonJS({
-  "node_modules/express/lib/express.js"(exports, module) {
-    "use strict";
-    var bodyParser = require_body_parser();
-    var EventEmitter = __require("events").EventEmitter;
-    var mixin = require_merge_descriptors();
-    var proto = require_application();
-    var Route = require_route();
-    var Router = require_router();
-    var req = require_request();
-    var res = require_response();
-    exports = module.exports = createApplication;
-    function createApplication() {
-      var app = function(req2, res2, next) {
-        app.handle(req2, res2, next);
-      };
-      mixin(app, EventEmitter.prototype, false);
-      mixin(app, proto, false);
-      app.request = Object.create(req, {
-        app: {
-          configurable: true,
-          enumerable: true,
-          writable: true,
-          value: app
-        }
-      });
-      app.response = Object.create(res, {
-        app: {
-          configurable: true,
-          enumerable: true,
-          writable: true,
-          value: app
-        }
-      });
-      app.init();
-      return app;
-    }
-    exports.application = proto;
-    exports.request = req;
-    exports.response = res;
-    exports.Route = Route;
-    exports.Router = Router;
-    exports.json = bodyParser.json;
-    exports.query = require_query();
-    exports.raw = bodyParser.raw;
-    exports.static = require_serve_static();
-    exports.text = bodyParser.text;
-    exports.urlencoded = bodyParser.urlencoded;
-    var removedMiddlewares = ["bodyParser", "compress", "cookieSession", "session", "logger", "cookieParser", "favicon", "responseTime", "errorHandler", "timeout", "methodOverride", "vhost", "csrf", "directory", "limit", "multipart", "staticCache"];
-    removedMiddlewares.forEach(function(name) {
-      Object.defineProperty(exports, name, {
-        get: function() {
-          throw new Error("Most middleware (like " + name + ") is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.");
-        },
-        configurable: true
-      });
-    });
-  }
-});
-
-// node_modules/express/index.js
-var require_express2 = __commonJS({
-  "node_modules/express/index.js"(exports, module) {
-    module.exports = require_express();
-  }
-});
-export default require_express2();
-/*! Bundled license information:
-
-depd/index.js:
-  (*!
-   * depd
-   * Copyright(c) 2014-2018 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-bytes/index.js:
-  (*!
-   * bytes
-   * Copyright(c) 2012-2014 TJ Holowaychuk
-   * Copyright(c) 2015 Jed Watson
-   * MIT Licensed
-   *)
-
-content-type/index.js:
-  (*!
-   * content-type
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-statuses/index.js:
-  (*!
-   * statuses
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-toidentifier/index.js:
-  (*!
-   * toidentifier
-   * Copyright(c) 2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-http-errors/index.js:
-  (*!
-   * http-errors
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-destroy/index.js:
-  (*!
-   * destroy
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2015-2022 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-unpipe/index.js:
-  (*!
-   * unpipe
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-raw-body/index.js:
-  (*!
-   * raw-body
-   * Copyright(c) 2013-2014 Jonathan Ong
-   * Copyright(c) 2014-2022 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-ee-first/index.js:
-  (*!
-   * ee-first
-   * Copyright(c) 2014 Jonathan Ong
-   * MIT Licensed
-   *)
-
-on-finished/index.js:
-  (*!
-   * on-finished
-   * Copyright(c) 2013 Jonathan Ong
-   * Copyright(c) 2014 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/lib/read.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-media-typer/index.js:
-  (*!
-   * media-typer
-   * Copyright(c) 2014 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-mime-db/index.js:
-  (*!
-   * mime-db
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2015-2022 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-mime-types/index.js:
-  (*!
-   * mime-types
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-type-is/index.js:
-  (*!
-   * type-is
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/lib/types/json.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/lib/types/raw.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/lib/types/text.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/lib/types/urlencoded.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-body-parser/index.js:
-  (*!
-   * body-parser
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-merge-descriptors/index.js:
-  (*!
-   * merge-descriptors
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-encodeurl/index.js:
-  (*!
-   * encodeurl
-   * Copyright(c) 2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-escape-html/index.js:
-  (*!
-   * escape-html
-   * Copyright(c) 2012-2013 TJ Holowaychuk
-   * Copyright(c) 2015 Andreas Lubbe
-   * Copyright(c) 2015 Tiancheng "Timothy" Gu
-   * MIT Licensed
-   *)
-
-parseurl/index.js:
-  (*!
-   * parseurl
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2014-2017 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-finalhandler/index.js:
-  (*!
-   * finalhandler
-   * Copyright(c) 2014-2022 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/router/layer.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-methods/index.js:
-  (*!
-   * methods
-   * Copyright(c) 2013-2014 TJ Holowaychuk
-   * Copyright(c) 2015-2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/router/route.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/router/index.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/middleware/init.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/middleware/query.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/view.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-safe-buffer/index.js:
-  (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
-
-content-disposition/index.js:
-  (*!
-   * content-disposition
-   * Copyright(c) 2014-2017 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-encodeurl/index.js:
-  (*!
-   * encodeurl
-   * Copyright(c) 2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-etag/index.js:
-  (*!
-   * etag
-   * Copyright(c) 2014-2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-fresh/index.js:
-  (*!
-   * fresh
-   * Copyright(c) 2012 TJ Holowaychuk
-   * Copyright(c) 2016-2017 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-range-parser/index.js:
-  (*!
-   * range-parser
-   * Copyright(c) 2012-2014 TJ Holowaychuk
-   * Copyright(c) 2015-2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-send/index.js:
-  (*!
-   * send
-   * Copyright(c) 2012 TJ Holowaychuk
-   * Copyright(c) 2014-2022 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-forwarded/index.js:
-  (*!
-   * forwarded
-   * Copyright(c) 2014-2017 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-proxy-addr/index.js:
-  (*!
-   * proxy-addr
-   * Copyright(c) 2014-2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/utils.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/application.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-negotiator/index.js:
-  (*!
-   * negotiator
-   * Copyright(c) 2012 Federico Romero
-   * Copyright(c) 2012-2014 Isaac Z. Schlueter
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-accepts/index.js:
-  (*!
-   * accepts
-   * Copyright(c) 2014 Jonathan Ong
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/request.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-cookie/index.js:
-  (*!
-   * cookie
-   * Copyright(c) 2012-2014 Roman Shtylman
-   * Copyright(c) 2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-vary/index.js:
-  (*!
-   * vary
-   * Copyright(c) 2014-2017 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/response.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-serve-static/index.js:
-  (*!
-   * serve-static
-   * Copyright(c) 2010 Sencha Inc.
-   * Copyright(c) 2011 TJ Holowaychuk
-   * Copyright(c) 2014-2016 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/lib/express.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-
-express/index.js:
-  (*!
-   * express
-   * Copyright(c) 2009-2013 TJ Holowaychuk
-   * Copyright(c) 2013 Roman Shtylman
-   * Copyright(c) 2014-2015 Douglas Christopher Wilson
-   * MIT Licensed
-   *)
-*/
-//# sourceMappingURL=express.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/express.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/express.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,29 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/depd/index.js", "../../../../../../node_modules/bytes/index.js", "../../../../../../node_modules/content-type/index.js", "../../../../../../node_modules/setprototypeof/index.js", "../../../../../../node_modules/statuses/codes.json", "../../../../../../node_modules/statuses/index.js", "../../../../../../node_modules/inherits/inherits_browser.js", "../../../../../../node_modules/inherits/inherits.js", "../../../../../../node_modules/toidentifier/index.js", "../../../../../../node_modules/http-errors/index.js", "../../../../../../node_modules/body-parser/node_modules/ms/index.js", "../../../../../../node_modules/body-parser/node_modules/debug/src/debug.js", "../../../../../../node_modules/body-parser/node_modules/debug/src/browser.js", "../../../../../../node_modules/body-parser/node_modules/debug/src/node.js", "../../../../../../node_modules/body-parser/node_modules/debug/src/index.js", "../../../../../../node_modules/destroy/index.js", "../../../../../../node_modules/safer-buffer/safer.js", "../../../../../../node_modules/iconv-lite/lib/bom-handling.js", "../../../../../../node_modules/iconv-lite/encodings/internal.js", "../../../../../../node_modules/iconv-lite/encodings/utf16.js", "../../../../../../node_modules/iconv-lite/encodings/utf7.js", "../../../../../../node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../../../../node_modules/iconv-lite/encodings/sbcs-data.js", "../../../../../../node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../../../../node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../../../../node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../../../../node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../../../../node_modules/iconv-lite/encodings/tables/cp936.json", "../../../../../../node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../../../../node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../../../../node_modules/iconv-lite/encodings/tables/cp949.json", "../../../../../../node_modules/iconv-lite/encodings/tables/cp950.json", "../../../../../../node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../../../../node_modules/iconv-lite/encodings/dbcs-data.js", "../../../../../../node_modules/iconv-lite/encodings/index.js", "../../../../../../node_modules/iconv-lite/lib/streams.js", "../../../../../../node_modules/iconv-lite/lib/extend-node.js", "../../../../../../node_modules/iconv-lite/lib/index.js", "../../../../../../node_modules/unpipe/index.js", "../../../../../../node_modules/raw-body/index.js", "../../../../../../node_modules/ee-first/index.js", "../../../../../../node_modules/on-finished/index.js", "../../../../../../node_modules/body-parser/lib/read.js", "../../../../../../node_modules/media-typer/index.js", "../../../../../../node_modules/mime-db/db.json", "../../../../../../node_modules/mime-db/index.js", "../../../../../../node_modules/mime-types/index.js", "../../../../../../node_modules/type-is/index.js", "../../../../../../node_modules/body-parser/lib/types/json.js", "../../../../../../node_modules/body-parser/lib/types/raw.js", "../../../../../../node_modules/body-parser/lib/types/text.js", "../../../../../../node_modules/es-errors/type.js", "../../../../../../node_modules/object-inspect/util.inspect.js", "../../../../../../node_modules/object-inspect/index.js", "../../../../../../node_modules/side-channel-list/index.js", "../../../../../../node_modules/es-object-atoms/index.js", "../../../../../../node_modules/es-errors/index.js", "../../../../../../node_modules/es-errors/eval.js", "../../../../../../node_modules/es-errors/range.js", "../../../../../../node_modules/es-errors/ref.js", "../../../../../../node_modules/es-errors/syntax.js", "../../../../../../node_modules/es-errors/uri.js", "../../../../../../node_modules/math-intrinsics/abs.js", "../../../../../../node_modules/math-intrinsics/floor.js", "../../../../../../node_modules/math-intrinsics/max.js", "../../../../../../node_modules/math-intrinsics/min.js", "../../../../../../node_modules/math-intrinsics/pow.js", "../../../../../../node_modules/gopd/gOPD.js", "../../../../../../node_modules/gopd/index.js", "../../../../../../node_modules/es-define-property/index.js", "../../../../../../node_modules/has-symbols/shams.js", "../../../../../../node_modules/has-symbols/index.js", "../../../../../../node_modules/function-bind/implementation.js", "../../../../../../node_modules/function-bind/index.js", "../../../../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../../../../node_modules/call-bind-apply-helpers/index.js", "../../../../../../node_modules/dunder-proto/get.js", "../../../../../../node_modules/hasown/index.js", "../../../../../../node_modules/get-intrinsic/index.js", "../../../../../../node_modules/call-bound/index.js", "../../../../../../node_modules/side-channel-map/index.js", "../../../../../../node_modules/side-channel-weakmap/index.js", "../../../../../../node_modules/side-channel/index.js", "../../../../../../node_modules/qs/lib/formats.js", "../../../../../../node_modules/qs/lib/utils.js", "../../../../../../node_modules/qs/lib/stringify.js", "../../../../../../node_modules/qs/lib/parse.js", "../../../../../../node_modules/qs/lib/index.js", "../../../../../../node_modules/body-parser/lib/types/urlencoded.js", "../../../../../../node_modules/body-parser/index.js", "../../../../../../node_modules/merge-descriptors/index.js", "../../../../../../node_modules/finalhandler/node_modules/ms/index.js", "../../../../../../node_modules/finalhandler/node_modules/debug/src/debug.js", "../../../../../../node_modules/finalhandler/node_modules/debug/src/browser.js", "../../../../../../node_modules/finalhandler/node_modules/debug/src/node.js", "../../../../../../node_modules/finalhandler/node_modules/debug/src/index.js", "../../../../../../node_modules/encodeurl/index.js", "../../../../../../node_modules/escape-html/index.js", "../../../../../../node_modules/parseurl/index.js", "../../../../../../node_modules/finalhandler/index.js", "../../../../../../node_modules/express/node_modules/ms/index.js", "../../../../../../node_modules/express/node_modules/debug/src/debug.js", "../../../../../../node_modules/express/node_modules/debug/src/browser.js", "../../../../../../node_modules/express/node_modules/debug/src/node.js", "../../../../../../node_modules/express/node_modules/debug/src/index.js", "../../../../../../node_modules/array-flatten/array-flatten.js", "../../../../../../node_modules/path-to-regexp/index.js", "../../../../../../node_modules/express/lib/router/layer.js", "../../../../../../node_modules/methods/index.js", "../../../../../../node_modules/express/lib/router/route.js", "../../../../../../node_modules/utils-merge/index.js", "../../../../../../node_modules/express/lib/router/index.js", "../../../../../../node_modules/express/lib/middleware/init.js", "../../../../../../node_modules/express/lib/middleware/query.js", "../../../../../../node_modules/express/lib/view.js", "../../../../../../node_modules/safe-buffer/index.js", "../../../../../../node_modules/content-disposition/index.js", "../../../../../../node_modules/send/node_modules/debug/node_modules/ms/index.js", "../../../../../../node_modules/send/node_modules/debug/src/debug.js", "../../../../../../node_modules/send/node_modules/debug/src/browser.js", "../../../../../../node_modules/send/node_modules/debug/src/node.js", "../../../../../../node_modules/send/node_modules/debug/src/index.js", "../../../../../../node_modules/send/node_modules/encodeurl/index.js", "../../../../../../node_modules/etag/index.js", "../../../../../../node_modules/fresh/index.js", "../../../../../../node_modules/send/node_modules/mime/types.json", "../../../../../../node_modules/send/node_modules/mime/mime.js", "../../../../../../node_modules/ms/index.js", "../../../../../../node_modules/range-parser/index.js", "../../../../../../node_modules/send/index.js", "../../../../../../node_modules/forwarded/index.js", "../../../../../../node_modules/ipaddr.js/lib/ipaddr.js", "../../../../../../node_modules/proxy-addr/index.js", "../../../../../../node_modules/express/lib/utils.js", "../../../../../../node_modules/express/lib/application.js", "../../../../../../node_modules/negotiator/lib/charset.js", "../../../../../../node_modules/negotiator/lib/encoding.js", "../../../../../../node_modules/negotiator/lib/language.js", "../../../../../../node_modules/negotiator/lib/mediaType.js", "../../../../../../node_modules/negotiator/index.js", "../../../../../../node_modules/accepts/index.js", "../../../../../../node_modules/express/lib/request.js", "../../../../../../node_modules/cookie-signature/index.js", "../../../../../../node_modules/cookie/index.js", "../../../../../../node_modules/vary/index.js", "../../../../../../node_modules/express/lib/response.js", "../../../../../../node_modules/serve-static/index.js", "../../../../../../node_modules/express/lib/express.js", "../../../../../../node_modules/express/index.js"],
-  "sourcesContent": ["/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative;\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd;\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd();\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace(str, namespace) {\n  var vals = str.split(/[ ,]+/);\n  var ns = String(namespace).toLowerCase();\n  for (var i = 0; i < vals.length; i++) {\n    var val = vals[i];\n\n    // namespace contained\n    if (val && (val === '*' || val.toLowerCase() === ns)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor(obj, prop, message) {\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n  var value = descriptor.value;\n  descriptor.get = function getter() {\n    return value;\n  };\n  if (descriptor.writable) {\n    descriptor.set = function setter(val) {\n      return value = val;\n    };\n  }\n  delete descriptor.value;\n  delete descriptor.writable;\n  Object.defineProperty(obj, prop, descriptor);\n  return descriptor;\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString(arity) {\n  var str = '';\n  for (var i = 0; i < arity; i++) {\n    str += ', arg' + i;\n  }\n  return str.substr(2);\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString(stack) {\n  var str = this.name + ': ' + this.namespace;\n  if (this.message) {\n    str += ' deprecated ' + this.message;\n  }\n  for (var i = 0; i < stack.length; i++) {\n    str += '\\n    at ' + stack[i].toString();\n  }\n  return str;\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd(namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required');\n  }\n  var stack = getStack();\n  var site = callSiteLocation(stack[1]);\n  var file = site[0];\n  function deprecate(message) {\n    // call to self as log\n    log.call(deprecate, message);\n  }\n  deprecate._file = file;\n  deprecate._ignored = isignored(namespace);\n  deprecate._namespace = namespace;\n  deprecate._traced = istraced(namespace);\n  deprecate._warned = Object.create(null);\n  deprecate.function = wrapfunction;\n  deprecate.property = wrapproperty;\n  return deprecate;\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners(emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function' ? emitter.listeners(type).length : emitter.listenerCount(type);\n  return count > 0;\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored(namespace) {\n  if (process.noDeprecation) {\n    // --no-deprecation support\n    return true;\n  }\n  var str = process.env.NO_DEPRECATION || '';\n\n  // namespace ignored\n  return containsNamespace(str, namespace);\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced(namespace) {\n  if (process.traceDeprecation) {\n    // --trace-deprecation support\n    return true;\n  }\n  var str = process.env.TRACE_DEPRECATION || '';\n\n  // namespace traced\n  return containsNamespace(str, namespace);\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log(message, site) {\n  var haslisteners = eehaslisteners(process, 'deprecation');\n\n  // abort early if no destination\n  if (!haslisteners && this._ignored) {\n    return;\n  }\n  var caller;\n  var callFile;\n  var callSite;\n  var depSite;\n  var i = 0;\n  var seen = false;\n  var stack = getStack();\n  var file = this._file;\n  if (site) {\n    // provided site\n    depSite = site;\n    callSite = callSiteLocation(stack[1]);\n    callSite.name = depSite.name;\n    file = callSite[0];\n  } else {\n    // get call site\n    i = 2;\n    depSite = callSiteLocation(stack[i]);\n    callSite = depSite;\n  }\n\n  // get caller of deprecated thing in relation to file\n  for (; i < stack.length; i++) {\n    caller = callSiteLocation(stack[i]);\n    callFile = caller[0];\n    if (callFile === file) {\n      seen = true;\n    } else if (callFile === this._file) {\n      file = this._file;\n    } else if (seen) {\n      break;\n    }\n  }\n  var key = caller ? depSite.join(':') + '__' + caller.join(':') : undefined;\n  if (key !== undefined && key in this._warned) {\n    // already warned\n    return;\n  }\n  this._warned[key] = true;\n\n  // generate automatic message from call site\n  var msg = message;\n  if (!msg) {\n    msg = callSite === depSite || !callSite.name ? defaultMessage(depSite) : defaultMessage(callSite);\n  }\n\n  // emit deprecation if listeners exist\n  if (haslisteners) {\n    var err = DeprecationError(this._namespace, msg, stack.slice(i));\n    process.emit('deprecation', err);\n    return;\n  }\n\n  // format and write message\n  var format = process.stderr.isTTY ? formatColor : formatPlain;\n  var output = format.call(this, msg, caller, stack.slice(i));\n  process.stderr.write(output + '\\n', 'utf8');\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation(callSite) {\n  var file = callSite.getFileName() || '<anonymous>';\n  var line = callSite.getLineNumber();\n  var colm = callSite.getColumnNumber();\n  if (callSite.isEval()) {\n    file = callSite.getEvalOrigin() + ', ' + file;\n  }\n  var site = [file, line, colm];\n  site.callSite = callSite;\n  site.name = callSite.getFunctionName();\n  return site;\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage(site) {\n  var callSite = site.callSite;\n  var funcName = site.name;\n\n  // make useful anonymous name\n  if (!funcName) {\n    funcName = '<anonymous@' + formatLocation(site) + '>';\n  }\n  var context = callSite.getThis();\n  var typeName = context && callSite.getTypeName();\n\n  // ignore useless type name\n  if (typeName === 'Object') {\n    typeName = undefined;\n  }\n\n  // make useful type name\n  if (typeName === 'Function') {\n    typeName = context.name || typeName;\n  }\n  return typeName && callSite.getMethodName() ? typeName + '.' + funcName : funcName;\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain(msg, caller, stack) {\n  var timestamp = new Date().toUTCString();\n  var formatted = timestamp + ' ' + this._namespace + ' deprecated ' + msg;\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    at ' + stack[i].toString();\n    }\n    return formatted;\n  }\n  if (caller) {\n    formatted += ' at ' + formatLocation(caller);\n  }\n  return formatted;\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor(msg, caller, stack) {\n  var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' +\n  // bold cyan\n  ' \\x1b[33;1mdeprecated\\x1b[22;39m' +\n  // bold yellow\n  ' \\x1b[0m' + msg + '\\x1b[39m'; // reset\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m'; // cyan\n    }\n    return formatted;\n  }\n  if (caller) {\n    formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m'; // cyan\n  }\n  return formatted;\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation(callSite) {\n  return relative(basePath, callSite[0]) + ':' + callSite[1] + ':' + callSite[2];\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack() {\n  var limit = Error.stackTraceLimit;\n  var obj = {};\n  var prep = Error.prepareStackTrace;\n  Error.prepareStackTrace = prepareObjectStackTrace;\n  Error.stackTraceLimit = Math.max(10, limit);\n\n  // capture the stack\n  Error.captureStackTrace(obj);\n\n  // slice this function off the top\n  var stack = obj.stack.slice(1);\n  Error.prepareStackTrace = prep;\n  Error.stackTraceLimit = limit;\n  return stack;\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace(obj, stack) {\n  return stack;\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction(fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function');\n  }\n  var args = createArgumentsString(fn.length);\n  var stack = getStack();\n  var site = callSiteLocation(stack[1]);\n  site.name = fn.name;\n\n  // eslint-disable-next-line no-new-func\n  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site', '\"use strict\"\\n' + 'return function (' + args + ') {' + 'log.call(deprecate, message, site)\\n' + 'return fn.apply(this, arguments)\\n' + '}')(fn, log, this, message, site);\n  return deprecatedfn;\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty(obj, prop, message) {\n  if (!obj || typeof obj !== 'object' && typeof obj !== 'function') {\n    throw new TypeError('argument obj must be object');\n  }\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object');\n  }\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable');\n  }\n  var deprecate = this;\n  var stack = getStack();\n  var site = callSiteLocation(stack[1]);\n\n  // set site name\n  site.name = prop;\n\n  // convert data descriptor\n  if ('value' in descriptor) {\n    descriptor = convertDataDescriptorToAccessor(obj, prop, message);\n  }\n  var get = descriptor.get;\n  var set = descriptor.set;\n\n  // wrap getter\n  if (typeof get === 'function') {\n    descriptor.get = function getter() {\n      log.call(deprecate, message, site);\n      return get.apply(this, arguments);\n    };\n  }\n\n  // wrap setter\n  if (typeof set === 'function') {\n    descriptor.set = function setter() {\n      log.call(deprecate, message, site);\n      return set.apply(this, arguments);\n    };\n  }\n  Object.defineProperty(obj, prop, descriptor);\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError(namespace, message, stack) {\n  var error = new Error();\n  var stackString;\n  Object.defineProperty(error, 'constructor', {\n    value: DeprecationError\n  });\n  Object.defineProperty(error, 'message', {\n    configurable: true,\n    enumerable: false,\n    value: message,\n    writable: true\n  });\n  Object.defineProperty(error, 'name', {\n    enumerable: false,\n    configurable: true,\n    value: 'DeprecationError',\n    writable: true\n  });\n  Object.defineProperty(error, 'namespace', {\n    configurable: true,\n    enumerable: false,\n    value: namespace,\n    writable: true\n  });\n  Object.defineProperty(error, 'stack', {\n    configurable: true,\n    enumerable: false,\n    get: function () {\n      if (stackString !== undefined) {\n        return stackString;\n      }\n\n      // prepare stack trace\n      return stackString = createStackString.call(this, stack);\n    },\n    set: function setter(val) {\n      stackString = val;\n    }\n  });\n  return error;\n}", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\nvar map = {\n  b: 1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5)\n};\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n  var mag = Math.abs(value);\n  var thousandsSeparator = options && options.thousandsSeparator || '';\n  var unitSeparator = options && options.unitSeparator || '';\n  var decimalPlaces = options && options.decimalPlaces !== undefined ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = options && options.unit || '';\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.pb) {\n      unit = 'PB';\n    } else if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n  if (thousandsSeparator) {\n    str = str.split('.').map(function (s, i) {\n      return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s;\n    }).join('.');\n  }\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b';\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n  if (isNaN(floatValue)) {\n    return null;\n  }\n  return Math.floor(map[unit] * floatValue);\n}", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g; // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/; // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g; // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format;\nexports.parse = parse;\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required');\n  }\n  var parameters = obj.parameters;\n  var type = obj.type;\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type');\n  }\n  var string = type;\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param;\n    var params = Object.keys(parameters).sort();\n    for (var i = 0; i < params.length; i++) {\n      param = params[i];\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name');\n      }\n      string += '; ' + param + '=' + qstring(parameters[param]);\n    }\n  }\n  return string;\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required');\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object' ? getcontenttype(string) : string;\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string');\n  }\n  var index = header.indexOf(';');\n  var type = index !== -1 ? header.slice(0, index).trim() : header.trim();\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type');\n  }\n  var obj = new ContentType(type.toLowerCase());\n\n  // parse parameters\n  if (index !== -1) {\n    var key;\n    var match;\n    var value;\n    PARAM_REGEXP.lastIndex = index;\n    while (match = PARAM_REGEXP.exec(header)) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format');\n      }\n      index += match[0].length;\n      key = match[1].toLowerCase();\n      value = match[2];\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1);\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1');\n        }\n      }\n      obj.parameters[key] = value;\n    }\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format');\n    }\n  }\n  return obj;\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype(obj) {\n  var header;\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type');\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type'];\n  }\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object');\n  }\n  return header;\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring(val) {\n  var str = String(val);\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str;\n  }\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value');\n  }\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"';\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType(type) {\n  this.parameters = Object.create(null);\n  this.type = type;\n}", "'use strict';\n\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({\n  __proto__: []\n} instanceof Array ? setProtoOf : mixinProperties);\nfunction setProtoOf(obj, proto) {\n  obj.__proto__ = proto;\n  return obj;\n}\nfunction mixinProperties(obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop];\n    }\n  }\n  return obj;\n}", "{\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"103\": \"Early Hints\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a Teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Too Early\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar codes = require('./codes.json');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status;\n\n// status code to message map\nstatus.message = codes;\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes);\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes);\n\n// status codes for redirects\nstatus.redirect = {\n  300: true,\n  301: true,\n  302: true,\n  303: true,\n  305: true,\n  307: true,\n  308: true\n};\n\n// status codes for empty bodies\nstatus.empty = {\n  204: true,\n  205: true,\n  304: true\n};\n\n// status codes for when you should retry the request\nstatus.retry = {\n  502: true,\n  503: true,\n  504: true\n};\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap(codes) {\n  var map = {};\n  Object.keys(codes).forEach(function forEachCode(code) {\n    var message = codes[code];\n    var status = Number(code);\n\n    // populate map\n    map[message.toLowerCase()] = status;\n  });\n  return map;\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList(codes) {\n  return Object.keys(codes).map(function mapCode(code) {\n    return Number(code);\n  });\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode(message) {\n  var msg = message.toLowerCase();\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"');\n  }\n  return status.code[msg];\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage(code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code);\n  }\n  return status.message[code];\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status(code) {\n  if (typeof code === 'number') {\n    return getStatusMessage(code);\n  }\n  if (typeof code !== 'string') {\n    throw new TypeError('code must be a number or string');\n  }\n\n  // '403'\n  var n = parseInt(code, 10);\n  if (!isNaN(n)) {\n    return getStatusMessage(n);\n  }\n  return getStatusCode(code);\n}", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n      var TempCtor = function () {};\n      TempCtor.prototype = superCtor.prototype;\n      ctor.prototype = new TempCtor();\n      ctor.prototype.constructor = ctor;\n    }\n  };\n}", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = toIdentifier;\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier(str) {\n  return str.split(' ').map(function (token) {\n    return token.slice(0, 1).toUpperCase() + token.slice(1);\n  }).join('').replace(/[^ _0-9a-z]/gi, '');\n}", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar deprecate = require('depd')('http-errors');\nvar setPrototypeOf = require('setprototypeof');\nvar statuses = require('statuses');\nvar inherits = require('inherits');\nvar toIdentifier = require('toidentifier');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError;\nmodule.exports.HttpError = createHttpErrorConstructor();\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError);\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError);\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass(status) {\n  return Number(String(status).charAt(0) + '00');\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError() {\n  // so much arity going on ~_~\n  var err;\n  var msg;\n  var status = 500;\n  var props = {};\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i];\n    var type = typeof arg;\n    if (type === 'object' && arg instanceof Error) {\n      err = arg;\n      status = err.status || err.statusCode || status;\n    } else if (type === 'number' && i === 0) {\n      status = arg;\n    } else if (type === 'string') {\n      msg = arg;\n    } else if (type === 'object') {\n      props = arg;\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type);\n    }\n  }\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes');\n  }\n  if (typeof status !== 'number' || !statuses.message[status] && (status < 400 || status >= 600)) {\n    status = 500;\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)];\n  if (!err) {\n    // create error\n    err = HttpError ? new HttpError(msg) : new Error(msg || statuses.message[status]);\n    Error.captureStackTrace(err, createError);\n  }\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500;\n    err.status = err.statusCode = status;\n  }\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key];\n    }\n  }\n  return err;\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor() {\n  function HttpError() {\n    throw new TypeError('cannot construct abstract class');\n  }\n  inherits(HttpError, Error);\n  return HttpError;\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor(HttpError, name, code) {\n  var className = toClassName(name);\n  function ClientError(message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code];\n    var err = new Error(msg);\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError);\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype);\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    });\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    });\n    return err;\n  }\n  inherits(ClientError, HttpError);\n  nameFunc(ClientError, className);\n  ClientError.prototype.status = code;\n  ClientError.prototype.statusCode = code;\n  ClientError.prototype.expose = true;\n  return ClientError;\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction(HttpError) {\n  return function isHttpError(val) {\n    if (!val || typeof val !== 'object') {\n      return false;\n    }\n    if (val instanceof HttpError) {\n      return true;\n    }\n    return val instanceof Error && typeof val.expose === 'boolean' && typeof val.statusCode === 'number' && val.status === val.statusCode;\n  };\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor(HttpError, name, code) {\n  var className = toClassName(name);\n  function ServerError(message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code];\n    var err = new Error(msg);\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError);\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype);\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    });\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    });\n    return err;\n  }\n  inherits(ServerError, HttpError);\n  nameFunc(ServerError, className);\n  ServerError.prototype.status = code;\n  ServerError.prototype.statusCode = code;\n  ServerError.prototype.expose = false;\n  return ServerError;\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc(func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name');\n  if (desc && desc.configurable) {\n    desc.value = name;\n    Object.defineProperty(func, 'name', desc);\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports(exports, codes, HttpError) {\n  codes.forEach(function forEachCode(code) {\n    var CodeError;\n    var name = toIdentifier(statuses.message[code]);\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code);\n        break;\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code);\n        break;\n    }\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError;\n      exports[name] = CodeError;\n    }\n  });\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName(name) {\n  return name.substr(-5) !== 'Error' ? name + 'Error' : name;\n}", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}", "/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0,\n    i;\n  for (i in namespace) {\n    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    args[0] = exports.coerce(args[0]);\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n  exports.names = [];\n  exports.skips = [];\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson'];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n  // is firebug? http://stackoverflow.com/a/398120/376773\n  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n  // is firefox >= v31?\n  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n  // double check webkit in userAgent just in case we are in a worker\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function (v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n  if (!useColors) return;\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit');\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch (e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch (e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function (_, k) {\n    return k.toUpperCase();\n  });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;else if (/^(no|off|false|disabled)$/i.test(val)) val = false;else if (val === 'null') val = null;else val = Number(val);\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function () {}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')();\n}\nvar stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts).split('\\n').map(function (str) {\n    return str.trim();\n  }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString() + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream(fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, {\n        autoClose: false\n      });\n      stream._type = 'fs';\n      break;\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n  stream._isStdio = true;\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n  debug.inspectOpts = {};\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}", "/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar EventEmitter = require('events').EventEmitter;\nvar ReadStream = require('fs').ReadStream;\nvar Stream = require('stream');\nvar Zlib = require('zlib');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy;\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy(stream, suppress) {\n  if (isFsReadStream(stream)) {\n    destroyReadStream(stream);\n  } else if (isZlibStream(stream)) {\n    destroyZlibStream(stream);\n  } else if (hasDestroy(stream)) {\n    stream.destroy();\n  }\n  if (isEventEmitter(stream) && suppress) {\n    stream.removeAllListeners('error');\n    stream.addListener('error', noop);\n  }\n  return stream;\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream(stream) {\n  stream.destroy();\n  if (typeof stream.close === 'function') {\n    // node.js core bug work-around\n    stream.on('open', onOpenClose);\n  }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream(stream) {\n  if (stream._hadError === true) {\n    var prop = stream._binding === null ? '_binding' : '_handle';\n    stream[prop] = {\n      close: function () {\n        this[prop] = null;\n      }\n    };\n  }\n  stream.close();\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream(stream) {\n  if (typeof stream.destroy === 'function') {\n    // node.js core bug work-around\n    // istanbul ignore if: node.js 0.8\n    if (stream._binding) {\n      // node.js < 0.10.0\n      stream.destroy();\n      if (stream._processing) {\n        stream._needDrain = true;\n        stream.once('drain', onDrainClearBinding);\n      } else {\n        stream._binding.clear();\n      }\n    } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n      // node.js >= 12, ^11.1.0, ^10.15.1\n      stream.destroy();\n    } else if (stream._destroy && typeof stream.close === 'function') {\n      // node.js 7, 8\n      stream.destroyed = true;\n      stream.close();\n    } else {\n      // fallback\n      // istanbul ignore next\n      stream.destroy();\n    }\n  } else if (typeof stream.close === 'function') {\n    // node.js < 8 fallback\n    closeZlibStream(stream);\n  }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy(stream) {\n  return stream instanceof Stream && typeof stream.destroy === 'function';\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter(val) {\n  return val instanceof EventEmitter;\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream(stream) {\n  return stream instanceof ReadStream;\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream(stream) {\n  return stream instanceof Zlib.Gzip || stream instanceof Zlib.Gunzip || stream instanceof Zlib.Deflate || stream instanceof Zlib.DeflateRaw || stream instanceof Zlib.Inflate || stream instanceof Zlib.InflateRaw || stream instanceof Zlib.Unzip;\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop() {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding() {\n  this._binding.clear();\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose() {\n  if (typeof this.fd === 'number') {\n    // actually close down the fd\n    this.close();\n  }\n}", "/* eslint-disable node/no-deprecated-api */\n\n'use strict';\n\nvar buffer = require('buffer');\nvar Buffer = buffer.Buffer;\nvar safer = {};\nvar key;\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue;\n  if (key === 'SlowBuffer' || key === 'Buffer') continue;\n  safer[key] = buffer[key];\n}\nvar Safer = safer.Buffer = {};\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue;\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue;\n  Safer[key] = Buffer[key];\n}\nsafer.Buffer.prototype = Buffer.prototype;\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value);\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value);\n    }\n    return Buffer(value, encodingOrOffset, length);\n  };\n}\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size);\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n    }\n    var buf = Buffer(size);\n    if (!fill || fill.length === 0) {\n      buf.fill(0);\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n    return buf;\n  };\n}\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength;\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  };\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;\n  }\n}\nmodule.exports = safer;", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\nexports.PrependBOM = PrependBOMWrapper;\nfunction PrependBOMWrapper(encoder, options) {\n  this.encoder = encoder;\n  this.addBOM = true;\n}\nPrependBOMWrapper.prototype.write = function (str) {\n  if (this.addBOM) {\n    str = BOMChar + str;\n    this.addBOM = false;\n  }\n  return this.encoder.write(str);\n};\nPrependBOMWrapper.prototype.end = function () {\n  return this.encoder.end();\n};\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n  this.decoder = decoder;\n  this.pass = false;\n  this.options = options || {};\n}\nStripBOMWrapper.prototype.write = function (buf) {\n  var res = this.decoder.write(buf);\n  if (this.pass || !res) return res;\n  if (res[0] === BOMChar) {\n    res = res.slice(1);\n    if (typeof this.options.stripBOM === 'function') this.options.stripBOM();\n  }\n  this.pass = true;\n  return res;\n};\nStripBOMWrapper.prototype.end = function () {\n  return this.decoder.end();\n};", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n  // Encodings\n  utf8: {\n    type: \"_internal\",\n    bomAware: true\n  },\n  cesu8: {\n    type: \"_internal\",\n    bomAware: true\n  },\n  unicode11utf8: \"utf8\",\n  ucs2: {\n    type: \"_internal\",\n    bomAware: true\n  },\n  utf16le: \"ucs2\",\n  binary: {\n    type: \"_internal\"\n  },\n  base64: {\n    type: \"_internal\"\n  },\n  hex: {\n    type: \"_internal\"\n  },\n  // Codec.\n  _internal: InternalCodec\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n  this.enc = codecOptions.encodingName;\n  this.bomAware = codecOptions.bomAware;\n  if (this.enc === \"base64\") this.encoder = InternalEncoderBase64;else if (this.enc === \"cesu8\") {\n    this.enc = \"utf8\"; // Use utf8 for decoding.\n    this.encoder = InternalEncoderCesu8;\n\n    // Add decoder for versions of Node not supporting CESU-8\n    if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n      this.decoder = InternalDecoderCesu8;\n      this.defaultCharUnicode = iconv.defaultCharUnicode;\n    }\n  }\n}\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\nif (!StringDecoder.prototype.end)\n  // Node v0.8 doesn't have this method.\n  StringDecoder.prototype.end = function () {};\nfunction InternalDecoder(options, codec) {\n  StringDecoder.call(this, codec.enc);\n}\nInternalDecoder.prototype = StringDecoder.prototype;\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n  this.enc = codec.enc;\n}\nInternalEncoder.prototype.write = function (str) {\n  return Buffer.from(str, this.enc);\n};\nInternalEncoder.prototype.end = function () {};\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n  this.prevStr = '';\n}\nInternalEncoderBase64.prototype.write = function (str) {\n  str = this.prevStr + str;\n  var completeQuads = str.length - str.length % 4;\n  this.prevStr = str.slice(completeQuads);\n  str = str.slice(0, completeQuads);\n  return Buffer.from(str, \"base64\");\n};\nInternalEncoderBase64.prototype.end = function () {\n  return Buffer.from(this.prevStr, \"base64\");\n};\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {}\nInternalEncoderCesu8.prototype.write = function (str) {\n  var buf = Buffer.alloc(str.length * 3),\n    bufIdx = 0;\n  for (var i = 0; i < str.length; i++) {\n    var charCode = str.charCodeAt(i);\n    // Naive implementation, but it works because CESU-8 is especially easy\n    // to convert from UTF-16 (which all JS strings are encoded in).\n    if (charCode < 0x80) buf[bufIdx++] = charCode;else if (charCode < 0x800) {\n      buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n      buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n    } else {\n      // charCode will always be < 0x10000 in javascript.\n      buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n      buf[bufIdx++] = 0x80 + (charCode >>> 6 & 0x3f);\n      buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n    }\n  }\n  return buf.slice(0, bufIdx);\n};\nInternalEncoderCesu8.prototype.end = function () {};\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n  this.acc = 0;\n  this.contBytes = 0;\n  this.accBytes = 0;\n  this.defaultCharUnicode = codec.defaultCharUnicode;\n}\nInternalDecoderCesu8.prototype.write = function (buf) {\n  var acc = this.acc,\n    contBytes = this.contBytes,\n    accBytes = this.accBytes,\n    res = '';\n  for (var i = 0; i < buf.length; i++) {\n    var curByte = buf[i];\n    if ((curByte & 0xC0) !== 0x80) {\n      // Leading byte\n      if (contBytes > 0) {\n        // Previous code is invalid\n        res += this.defaultCharUnicode;\n        contBytes = 0;\n      }\n      if (curByte < 0x80) {\n        // Single-byte code\n        res += String.fromCharCode(curByte);\n      } else if (curByte < 0xE0) {\n        // Two-byte code\n        acc = curByte & 0x1F;\n        contBytes = 1;\n        accBytes = 1;\n      } else if (curByte < 0xF0) {\n        // Three-byte code\n        acc = curByte & 0x0F;\n        contBytes = 2;\n        accBytes = 1;\n      } else {\n        // Four or more are not supported for CESU-8.\n        res += this.defaultCharUnicode;\n      }\n    } else {\n      // Continuation byte\n      if (contBytes > 0) {\n        // We're waiting for it.\n        acc = acc << 6 | curByte & 0x3f;\n        contBytes--;\n        accBytes++;\n        if (contBytes === 0) {\n          // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n          if (accBytes === 2 && acc < 0x80 && acc > 0) res += this.defaultCharUnicode;else if (accBytes === 3 && acc < 0x800) res += this.defaultCharUnicode;else\n            // Actually add character.\n            res += String.fromCharCode(acc);\n        }\n      } else {\n        // Unexpected continuation byte\n        res += this.defaultCharUnicode;\n      }\n    }\n  }\n  this.acc = acc;\n  this.contBytes = contBytes;\n  this.accBytes = accBytes;\n  return res;\n};\nInternalDecoderCesu8.prototype.end = function () {\n  var res = 0;\n  if (this.contBytes > 0) res += this.defaultCharUnicode;\n  return res;\n};", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {}\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {}\nUtf16BEEncoder.prototype.write = function (str) {\n  var buf = Buffer.from(str, 'ucs2');\n  for (var i = 0; i < buf.length; i += 2) {\n    var tmp = buf[i];\n    buf[i] = buf[i + 1];\n    buf[i + 1] = tmp;\n  }\n  return buf;\n};\nUtf16BEEncoder.prototype.end = function () {};\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n  this.overflowByte = -1;\n}\nUtf16BEDecoder.prototype.write = function (buf) {\n  if (buf.length == 0) return '';\n  var buf2 = Buffer.alloc(buf.length + 1),\n    i = 0,\n    j = 0;\n  if (this.overflowByte !== -1) {\n    buf2[0] = buf[0];\n    buf2[1] = this.overflowByte;\n    i = 1;\n    j = 2;\n  }\n  for (; i < buf.length - 1; i += 2, j += 2) {\n    buf2[j] = buf[i + 1];\n    buf2[j + 1] = buf[i];\n  }\n  this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;\n  return buf2.slice(0, j).toString('ucs2');\n};\nUtf16BEDecoder.prototype.end = function () {};\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n  this.iconv = iconv;\n}\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n  options = options || {};\n  if (options.addBOM === undefined) options.addBOM = true;\n  this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\nUtf16Encoder.prototype.write = function (str) {\n  return this.encoder.write(str);\n};\nUtf16Encoder.prototype.end = function () {\n  return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n  this.decoder = null;\n  this.initialBytes = [];\n  this.initialBytesLen = 0;\n  this.options = options || {};\n  this.iconv = codec.iconv;\n}\nUtf16Decoder.prototype.write = function (buf) {\n  if (!this.decoder) {\n    // Codec is not chosen yet. Accumulate initial bytes.\n    this.initialBytes.push(buf);\n    this.initialBytesLen += buf.length;\n    if (this.initialBytesLen < 16)\n      // We need more bytes to use space heuristic (see below)\n      return '';\n\n    // We have enough bytes -> detect endianness.\n    var buf = Buffer.concat(this.initialBytes),\n      encoding = detectEncoding(buf, this.options.defaultEncoding);\n    this.decoder = this.iconv.getDecoder(encoding, this.options);\n    this.initialBytes.length = this.initialBytesLen = 0;\n  }\n  return this.decoder.write(buf);\n};\nUtf16Decoder.prototype.end = function () {\n  if (!this.decoder) {\n    var buf = Buffer.concat(this.initialBytes),\n      encoding = detectEncoding(buf, this.options.defaultEncoding);\n    this.decoder = this.iconv.getDecoder(encoding, this.options);\n    var res = this.decoder.write(buf),\n      trail = this.decoder.end();\n    return trail ? res + trail : res;\n  }\n  return this.decoder.end();\n};\nfunction detectEncoding(buf, defaultEncoding) {\n  var enc = defaultEncoding || 'utf-16le';\n  if (buf.length >= 2) {\n    // Check BOM.\n    if (buf[0] == 0xFE && buf[1] == 0xFF)\n      // UTF-16BE BOM\n      enc = 'utf-16be';else if (buf[0] == 0xFF && buf[1] == 0xFE)\n      // UTF-16LE BOM\n      enc = 'utf-16le';else {\n      // No BOM found. Try to deduce encoding from initial content.\n      // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n      // So, we count ASCII as if it was LE or BE, and decide from that.\n      var asciiCharsLE = 0,\n        asciiCharsBE = 0,\n        // Counts of chars in both positions\n        _len = Math.min(buf.length - buf.length % 2, 64); // Len is always even.\n\n      for (var i = 0; i < _len; i += 2) {\n        if (buf[i] === 0 && buf[i + 1] !== 0) asciiCharsBE++;\n        if (buf[i] !== 0 && buf[i + 1] === 0) asciiCharsLE++;\n      }\n      if (asciiCharsBE > asciiCharsLE) enc = 'utf-16be';else if (asciiCharsBE < asciiCharsLE) enc = 'utf-16le';\n    }\n  }\n  return enc;\n}", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n  this.iconv = iconv;\n}\n;\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\nfunction Utf7Encoder(options, codec) {\n  this.iconv = codec.iconv;\n}\nUtf7Encoder.prototype.write = function (str) {\n  // Naive implementation.\n  // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n  return Buffer.from(str.replace(nonDirectChars, function (chunk) {\n    return \"+\" + (chunk === '+' ? '' : this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) + \"-\";\n  }.bind(this)));\n};\nUtf7Encoder.prototype.end = function () {};\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n  this.iconv = codec.iconv;\n  this.inBase64 = false;\n  this.base64Accum = '';\n}\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++) base64Chars[i] = base64Regex.test(String.fromCharCode(i));\nvar plusChar = '+'.charCodeAt(0),\n  minusChar = '-'.charCodeAt(0),\n  andChar = '&'.charCodeAt(0);\nUtf7Decoder.prototype.write = function (buf) {\n  var res = \"\",\n    lastI = 0,\n    inBase64 = this.inBase64,\n    base64Accum = this.base64Accum;\n\n  // The decoder is more involved as we must handle chunks in stream.\n\n  for (var i = 0; i < buf.length; i++) {\n    if (!inBase64) {\n      // We're in direct mode.\n      // Write direct chars until '+'\n      if (buf[i] == plusChar) {\n        res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n        lastI = i + 1;\n        inBase64 = true;\n      }\n    } else {\n      // We decode base64.\n      if (!base64Chars[buf[i]]) {\n        // Base64 ended.\n        if (i == lastI && buf[i] == minusChar) {\n          // \"+-\" -> \"+\"\n          res += \"+\";\n        } else {\n          var b64str = base64Accum + buf.slice(lastI, i).toString();\n          res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n        }\n        if (buf[i] != minusChar)\n          // Minus is absorbed after base64.\n          i--;\n        lastI = i + 1;\n        inBase64 = false;\n        base64Accum = '';\n      }\n    }\n  }\n  if (!inBase64) {\n    res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n  } else {\n    var b64str = base64Accum + buf.slice(lastI).toString();\n    var canBeDecoded = b64str.length - b64str.length % 8; // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n    base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n    b64str = b64str.slice(0, canBeDecoded);\n    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n  }\n  this.inBase64 = inBase64;\n  this.base64Accum = base64Accum;\n  return res;\n};\nUtf7Decoder.prototype.end = function () {\n  var res = \"\";\n  if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n  this.inBase64 = false;\n  this.base64Accum = '';\n  return res;\n};\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n  this.iconv = iconv;\n}\n;\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n  this.iconv = codec.iconv;\n  this.inBase64 = false;\n  this.base64Accum = Buffer.alloc(6);\n  this.base64AccumIdx = 0;\n}\nUtf7IMAPEncoder.prototype.write = function (str) {\n  var inBase64 = this.inBase64,\n    base64Accum = this.base64Accum,\n    base64AccumIdx = this.base64AccumIdx,\n    buf = Buffer.alloc(str.length * 5 + 10),\n    bufIdx = 0;\n  for (var i = 0; i < str.length; i++) {\n    var uChar = str.charCodeAt(i);\n    if (0x20 <= uChar && uChar <= 0x7E) {\n      // Direct character or '&'.\n      if (inBase64) {\n        if (base64AccumIdx > 0) {\n          bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n          base64AccumIdx = 0;\n        }\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        inBase64 = false;\n      }\n      if (!inBase64) {\n        buf[bufIdx++] = uChar; // Write direct character\n\n        if (uChar === andChar)\n          // Ampersand -> '&-'\n          buf[bufIdx++] = minusChar;\n      }\n    } else {\n      // Non-direct character\n      if (!inBase64) {\n        buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n        inBase64 = true;\n      }\n      if (inBase64) {\n        base64Accum[base64AccumIdx++] = uChar >> 8;\n        base64Accum[base64AccumIdx++] = uChar & 0xFF;\n        if (base64AccumIdx == base64Accum.length) {\n          bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n          base64AccumIdx = 0;\n        }\n      }\n    }\n  }\n  this.inBase64 = inBase64;\n  this.base64AccumIdx = base64AccumIdx;\n  return buf.slice(0, bufIdx);\n};\nUtf7IMAPEncoder.prototype.end = function () {\n  var buf = Buffer.alloc(10),\n    bufIdx = 0;\n  if (this.inBase64) {\n    if (this.base64AccumIdx > 0) {\n      bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n      this.base64AccumIdx = 0;\n    }\n    buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n    this.inBase64 = false;\n  }\n  return buf.slice(0, bufIdx);\n};\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n  this.iconv = codec.iconv;\n  this.inBase64 = false;\n  this.base64Accum = '';\n}\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\nUtf7IMAPDecoder.prototype.write = function (buf) {\n  var res = \"\",\n    lastI = 0,\n    inBase64 = this.inBase64,\n    base64Accum = this.base64Accum;\n\n  // The decoder is more involved as we must handle chunks in stream.\n  // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n  for (var i = 0; i < buf.length; i++) {\n    if (!inBase64) {\n      // We're in direct mode.\n      // Write direct chars until '&'\n      if (buf[i] == andChar) {\n        res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n        lastI = i + 1;\n        inBase64 = true;\n      }\n    } else {\n      // We decode base64.\n      if (!base64IMAPChars[buf[i]]) {\n        // Base64 ended.\n        if (i == lastI && buf[i] == minusChar) {\n          // \"&-\" -> \"&\"\n          res += \"&\";\n        } else {\n          var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n          res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n        }\n        if (buf[i] != minusChar)\n          // Minus may be absorbed after base64.\n          i--;\n        lastI = i + 1;\n        inBase64 = false;\n        base64Accum = '';\n      }\n    }\n  }\n  if (!inBase64) {\n    res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n  } else {\n    var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n    var canBeDecoded = b64str.length - b64str.length % 8; // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n    base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n    b64str = b64str.slice(0, canBeDecoded);\n    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n  }\n  this.inBase64 = inBase64;\n  this.base64Accum = base64Accum;\n  return res;\n};\nUtf7IMAPDecoder.prototype.end = function () {\n  var res = \"\";\n  if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n  this.inBase64 = false;\n  this.base64Accum = '';\n  return res;\n};", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n  if (!codecOptions) throw new Error(\"SBCS codec is called without the data.\");\n\n  // Prepare char buffer for decoding.\n  if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256) throw new Error(\"Encoding '\" + codecOptions.type + \"' has incorrect 'chars' (must be of len 128 or 256)\");\n  if (codecOptions.chars.length === 128) {\n    var asciiString = \"\";\n    for (var i = 0; i < 128; i++) asciiString += String.fromCharCode(i);\n    codecOptions.chars = asciiString + codecOptions.chars;\n  }\n  this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n\n  // Encoding buffer.\n  var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n  for (var i = 0; i < codecOptions.chars.length; i++) encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n  this.encodeBuf = encodeBuf;\n}\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\nfunction SBCSEncoder(options, codec) {\n  this.encodeBuf = codec.encodeBuf;\n}\nSBCSEncoder.prototype.write = function (str) {\n  var buf = Buffer.alloc(str.length);\n  for (var i = 0; i < str.length; i++) buf[i] = this.encodeBuf[str.charCodeAt(i)];\n  return buf;\n};\nSBCSEncoder.prototype.end = function () {};\nfunction SBCSDecoder(options, codec) {\n  this.decodeBuf = codec.decodeBuf;\n}\nSBCSDecoder.prototype.write = function (buf) {\n  // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n  var decodeBuf = this.decodeBuf;\n  var newBuf = Buffer.alloc(buf.length * 2);\n  var idx1 = 0,\n    idx2 = 0;\n  for (var i = 0; i < buf.length; i++) {\n    idx1 = buf[i] * 2;\n    idx2 = i * 2;\n    newBuf[idx2] = decodeBuf[idx1];\n    newBuf[idx2 + 1] = decodeBuf[idx1 + 1];\n  }\n  return newBuf.toString('ucs2');\n};\nSBCSDecoder.prototype.end = function () {};", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\nmodule.exports = {\n  // Not supported by iconv, not sure why.\n  \"10029\": \"maccenteuro\",\n  \"maccenteuro\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n  },\n  \"808\": \"cp808\",\n  \"ibm808\": \"cp808\",\n  \"cp808\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n  },\n  \"mik\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  // Aliases of generated encodings.\n  \"ascii8bit\": \"ascii\",\n  \"usascii\": \"ascii\",\n  \"ansix34\": \"ascii\",\n  \"ansix341968\": \"ascii\",\n  \"ansix341986\": \"ascii\",\n  \"csascii\": \"ascii\",\n  \"cp367\": \"ascii\",\n  \"ibm367\": \"ascii\",\n  \"isoir6\": \"ascii\",\n  \"iso646us\": \"ascii\",\n  \"iso646irv\": \"ascii\",\n  \"us\": \"ascii\",\n  \"latin1\": \"iso88591\",\n  \"latin2\": \"iso88592\",\n  \"latin3\": \"iso88593\",\n  \"latin4\": \"iso88594\",\n  \"latin5\": \"iso88599\",\n  \"latin6\": \"iso885910\",\n  \"latin7\": \"iso885913\",\n  \"latin8\": \"iso885914\",\n  \"latin9\": \"iso885915\",\n  \"latin10\": \"iso885916\",\n  \"csisolatin1\": \"iso88591\",\n  \"csisolatin2\": \"iso88592\",\n  \"csisolatin3\": \"iso88593\",\n  \"csisolatin4\": \"iso88594\",\n  \"csisolatincyrillic\": \"iso88595\",\n  \"csisolatinarabic\": \"iso88596\",\n  \"csisolatingreek\": \"iso88597\",\n  \"csisolatinhebrew\": \"iso88598\",\n  \"csisolatin5\": \"iso88599\",\n  \"csisolatin6\": \"iso885910\",\n  \"l1\": \"iso88591\",\n  \"l2\": \"iso88592\",\n  \"l3\": \"iso88593\",\n  \"l4\": \"iso88594\",\n  \"l5\": \"iso88599\",\n  \"l6\": \"iso885910\",\n  \"l7\": \"iso885913\",\n  \"l8\": \"iso885914\",\n  \"l9\": \"iso885915\",\n  \"l10\": \"iso885916\",\n  \"isoir14\": \"iso646jp\",\n  \"isoir57\": \"iso646cn\",\n  \"isoir100\": \"iso88591\",\n  \"isoir101\": \"iso88592\",\n  \"isoir109\": \"iso88593\",\n  \"isoir110\": \"iso88594\",\n  \"isoir144\": \"iso88595\",\n  \"isoir127\": \"iso88596\",\n  \"isoir126\": \"iso88597\",\n  \"isoir138\": \"iso88598\",\n  \"isoir148\": \"iso88599\",\n  \"isoir157\": \"iso885910\",\n  \"isoir166\": \"tis620\",\n  \"isoir179\": \"iso885913\",\n  \"isoir199\": \"iso885914\",\n  \"isoir203\": \"iso885915\",\n  \"isoir226\": \"iso885916\",\n  \"cp819\": \"iso88591\",\n  \"ibm819\": \"iso88591\",\n  \"cyrillic\": \"iso88595\",\n  \"arabic\": \"iso88596\",\n  \"arabic8\": \"iso88596\",\n  \"ecma114\": \"iso88596\",\n  \"asmo708\": \"iso88596\",\n  \"greek\": \"iso88597\",\n  \"greek8\": \"iso88597\",\n  \"ecma118\": \"iso88597\",\n  \"elot928\": \"iso88597\",\n  \"hebrew\": \"iso88598\",\n  \"hebrew8\": \"iso88598\",\n  \"turkish\": \"iso88599\",\n  \"turkish8\": \"iso88599\",\n  \"thai\": \"iso885911\",\n  \"thai8\": \"iso885911\",\n  \"celtic\": \"iso885914\",\n  \"celtic8\": \"iso885914\",\n  \"isoceltic\": \"iso885914\",\n  \"tis6200\": \"tis620\",\n  \"tis62025291\": \"tis620\",\n  \"tis62025330\": \"tis620\",\n  \"10000\": \"macroman\",\n  \"10006\": \"macgreek\",\n  \"10007\": \"maccyrillic\",\n  \"10079\": \"maciceland\",\n  \"10081\": \"macturkish\",\n  \"cspc8codepage437\": \"cp437\",\n  \"cspc775baltic\": \"cp775\",\n  \"cspc850multilingual\": \"cp850\",\n  \"cspcp852\": \"cp852\",\n  \"cspc862latinhebrew\": \"cp862\",\n  \"cpgr\": \"cp869\",\n  \"msee\": \"cp1250\",\n  \"mscyrl\": \"cp1251\",\n  \"msansi\": \"cp1252\",\n  \"msgreek\": \"cp1253\",\n  \"msturk\": \"cp1254\",\n  \"mshebr\": \"cp1255\",\n  \"msarab\": \"cp1256\",\n  \"winbaltrim\": \"cp1257\",\n  \"cp20866\": \"koi8r\",\n  \"20866\": \"koi8r\",\n  \"ibm878\": \"koi8r\",\n  \"cskoi8r\": \"koi8r\",\n  \"cp21866\": \"koi8u\",\n  \"21866\": \"koi8u\",\n  \"ibm1168\": \"koi8u\",\n  \"strk10482002\": \"rk1048\",\n  \"tcvn5712\": \"tcvn\",\n  \"tcvn57121\": \"tcvn\",\n  \"gb198880\": \"iso646cn\",\n  \"cn\": \"iso646cn\",\n  \"csiso14jisc6220ro\": \"iso646jp\",\n  \"jisc62201969ro\": \"iso646jp\",\n  \"jp\": \"iso646jp\",\n  \"cshproman8\": \"hproman8\",\n  \"r8\": \"hproman8\",\n  \"roman8\": \"hproman8\",\n  \"xroman8\": \"hproman8\",\n  \"ibm1051\": \"hproman8\",\n  \"mac\": \"macintosh\",\n  \"csmacintosh\": \"macintosh\"\n};", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"
- ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  }\n};", "\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\nvar UNASSIGNED = -1,\n  GB18030_CODE = -2,\n  SEQ_START = -10,\n  NODE_START = -1000,\n  UNASSIGNED_NODE = new Array(0x100),\n  DEF_CHAR = -1;\nfor (var i = 0; i < 0x100; i++) UNASSIGNED_NODE[i] = UNASSIGNED;\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n  this.encodingName = codecOptions.encodingName;\n  if (!codecOptions) throw new Error(\"DBCS codec is called without the data.\");\n  if (!codecOptions.table) throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n  // Load tables.\n  var mappingTable = codecOptions.table();\n\n  // Decode tables: MBCS -> Unicode.\n\n  // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n  // Trie root is decodeTables[0].\n  // Values: >=  0 -> unicode character code. can be > 0xFFFF\n  //         == UNASSIGNED -> unknown/unassigned sequence.\n  //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n  //         <= NODE_START -> index of the next node in our trie to process next byte.\n  //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n  this.decodeTables = [];\n  this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n  // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n  this.decodeTableSeq = [];\n\n  // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n  for (var i = 0; i < mappingTable.length; i++) this._addDecodeChunk(mappingTable[i]);\n  this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n  // Encode tables: Unicode -> DBCS.\n\n  // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n  // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n  // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n  //         == UNASSIGNED -> no conversion found. Output a default char.\n  //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n  this.encodeTable = [];\n\n  // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n  // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n  // means end of sequence (needed when one sequence is a strict subsequence of another).\n  // Objects are kept separately from encodeTable to increase performance.\n  this.encodeTableSeq = [];\n\n  // Some chars can be decoded, but need not be encoded.\n  var skipEncodeChars = {};\n  if (codecOptions.encodeSkipVals) for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n    var val = codecOptions.encodeSkipVals[i];\n    if (typeof val === 'number') skipEncodeChars[val] = true;else for (var j = val.from; j <= val.to; j++) skipEncodeChars[j] = true;\n  }\n\n  // Use decode trie to recursively fill out encode tables.\n  this._fillEncodeTable(0, 0, skipEncodeChars);\n\n  // Add more encoding pairs when needed.\n  if (codecOptions.encodeAdd) {\n    for (var uChar in codecOptions.encodeAdd) if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n  }\n  this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n  if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n  if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n  // Load & create GB18030 tables when needed.\n  if (typeof codecOptions.gb18030 === 'function') {\n    this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n    // Add GB18030 decode tables.\n    var thirdByteNodeIdx = this.decodeTables.length;\n    var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n    var fourthByteNodeIdx = this.decodeTables.length;\n    var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n    for (var i = 0x81; i <= 0xFE; i++) {\n      var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n      var secondByteNode = this.decodeTables[secondByteNodeIdx];\n      for (var j = 0x30; j <= 0x39; j++) secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n    }\n    for (var i = 0x81; i <= 0xFE; i++) thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n    for (var i = 0x30; i <= 0x39; i++) fourthByteNode[i] = GB18030_CODE;\n  }\n}\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function (addr) {\n  var bytes = [];\n  for (; addr > 0; addr >>= 8) bytes.push(addr & 0xFF);\n  if (bytes.length == 0) bytes.push(0);\n  var node = this.decodeTables[0];\n  for (var i = bytes.length - 1; i > 0; i--) {\n    // Traverse nodes deeper into the trie.\n    var val = node[bytes[i]];\n    if (val == UNASSIGNED) {\n      // Create new node.\n      node[bytes[i]] = NODE_START - this.decodeTables.length;\n      this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n    } else if (val <= NODE_START) {\n      // Existing node.\n      node = this.decodeTables[NODE_START - val];\n    } else throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n  }\n  return node;\n};\nDBCSCodec.prototype._addDecodeChunk = function (chunk) {\n  // First element of chunk is the hex mbcs code where we start.\n  var curAddr = parseInt(chunk[0], 16);\n\n  // Choose the decoding node where we'll write our chars.\n  var writeTable = this._getDecodeTrieNode(curAddr);\n  curAddr = curAddr & 0xFF;\n\n  // Write all other elements of the chunk to the table.\n  for (var k = 1; k < chunk.length; k++) {\n    var part = chunk[k];\n    if (typeof part === \"string\") {\n      // String, write as-is.\n      for (var l = 0; l < part.length;) {\n        var code = part.charCodeAt(l++);\n        if (0xD800 <= code && code < 0xDC00) {\n          // Decode surrogate\n          var codeTrail = part.charCodeAt(l++);\n          if (0xDC00 <= codeTrail && codeTrail < 0xE000) writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);else throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n        } else if (0x0FF0 < code && code <= 0x0FFF) {\n          // Character sequence (our own encoding used)\n          var len = 0xFFF - code + 2;\n          var seq = [];\n          for (var m = 0; m < len; m++) seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n          writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n          this.decodeTableSeq.push(seq);\n        } else writeTable[curAddr++] = code; // Basic char\n      }\n    } else if (typeof part === \"number\") {\n      // Integer, meaning increasing sequence starting with prev character.\n      var charCode = writeTable[curAddr - 1] + 1;\n      for (var l = 0; l < part; l++) writeTable[curAddr++] = charCode++;\n    } else throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n  }\n  if (curAddr > 0xFF) throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n};\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function (uCode) {\n  var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n  if (this.encodeTable[high] === undefined) this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n  return this.encodeTable[high];\n};\nDBCSCodec.prototype._setEncodeChar = function (uCode, dbcsCode) {\n  var bucket = this._getEncodeBucket(uCode);\n  var low = uCode & 0xFF;\n  if (bucket[low] <= SEQ_START) this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n  else if (bucket[low] == UNASSIGNED) bucket[low] = dbcsCode;\n};\nDBCSCodec.prototype._setEncodeSequence = function (seq, dbcsCode) {\n  // Get the root of character tree according to first character of the sequence.\n  var uCode = seq[0];\n  var bucket = this._getEncodeBucket(uCode);\n  var low = uCode & 0xFF;\n  var node;\n  if (bucket[low] <= SEQ_START) {\n    // There's already a sequence with  - use it.\n    node = this.encodeTableSeq[SEQ_START - bucket[low]];\n  } else {\n    // There was no sequence object - allocate a new one.\n    node = {};\n    if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n    bucket[low] = SEQ_START - this.encodeTableSeq.length;\n    this.encodeTableSeq.push(node);\n  }\n\n  // Traverse the character tree, allocating new nodes as needed.\n  for (var j = 1; j < seq.length - 1; j++) {\n    var oldVal = node[uCode];\n    if (typeof oldVal === 'object') node = oldVal;else {\n      node = node[uCode] = {};\n      if (oldVal !== undefined) node[DEF_CHAR] = oldVal;\n    }\n  }\n\n  // Set the leaf to given dbcsCode.\n  uCode = seq[seq.length - 1];\n  node[uCode] = dbcsCode;\n};\nDBCSCodec.prototype._fillEncodeTable = function (nodeIdx, prefix, skipEncodeChars) {\n  var node = this.decodeTables[nodeIdx];\n  for (var i = 0; i < 0x100; i++) {\n    var uCode = node[i];\n    var mbCode = prefix + i;\n    if (skipEncodeChars[mbCode]) continue;\n    if (uCode >= 0) this._setEncodeChar(uCode, mbCode);else if (uCode <= NODE_START) this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);else if (uCode <= SEQ_START) this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n  }\n};\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n  // Encoder state\n  this.leadSurrogate = -1;\n  this.seqObj = undefined;\n\n  // Static data\n  this.encodeTable = codec.encodeTable;\n  this.encodeTableSeq = codec.encodeTableSeq;\n  this.defaultCharSingleByte = codec.defCharSB;\n  this.gb18030 = codec.gb18030;\n}\nDBCSEncoder.prototype.write = function (str) {\n  var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n    leadSurrogate = this.leadSurrogate,\n    seqObj = this.seqObj,\n    nextChar = -1,\n    i = 0,\n    j = 0;\n  while (true) {\n    // 0. Get next character.\n    if (nextChar === -1) {\n      if (i == str.length) break;\n      var uCode = str.charCodeAt(i++);\n    } else {\n      var uCode = nextChar;\n      nextChar = -1;\n    }\n\n    // 1. Handle surrogates.\n    if (0xD800 <= uCode && uCode < 0xE000) {\n      // Char is one of surrogates.\n      if (uCode < 0xDC00) {\n        // We've got lead surrogate.\n        if (leadSurrogate === -1) {\n          leadSurrogate = uCode;\n          continue;\n        } else {\n          leadSurrogate = uCode;\n          // Double lead surrogate found.\n          uCode = UNASSIGNED;\n        }\n      } else {\n        // We've got trail surrogate.\n        if (leadSurrogate !== -1) {\n          uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n          leadSurrogate = -1;\n        } else {\n          // Incomplete surrogate pair - only trail surrogate found.\n          uCode = UNASSIGNED;\n        }\n      }\n    } else if (leadSurrogate !== -1) {\n      // Incomplete surrogate pair - only lead surrogate found.\n      nextChar = uCode;\n      uCode = UNASSIGNED; // Write an error, then current char.\n      leadSurrogate = -1;\n    }\n\n    // 2. Convert uCode character.\n    var dbcsCode = UNASSIGNED;\n    if (seqObj !== undefined && uCode != UNASSIGNED) {\n      // We are in the middle of the sequence\n      var resCode = seqObj[uCode];\n      if (typeof resCode === 'object') {\n        // Sequence continues.\n        seqObj = resCode;\n        continue;\n      } else if (typeof resCode == 'number') {\n        // Sequence finished. Write it.\n        dbcsCode = resCode;\n      } else if (resCode == undefined) {\n        // Current character is not part of the sequence.\n\n        // Try default character for this sequence\n        resCode = seqObj[DEF_CHAR];\n        if (resCode !== undefined) {\n          dbcsCode = resCode; // Found. Write it.\n          nextChar = uCode; // Current character will be written too in the next iteration.\n        } else {\n          // TODO: What if we have no default? (resCode == undefined)\n          // Then, we should write first char of the sequence as-is and try the rest recursively.\n          // Didn't do it for now because no encoding has this situation yet.\n          // Currently, just skip the sequence and write current char.\n        }\n      }\n      seqObj = undefined;\n    } else if (uCode >= 0) {\n      // Regular character\n      var subtable = this.encodeTable[uCode >> 8];\n      if (subtable !== undefined) dbcsCode = subtable[uCode & 0xFF];\n      if (dbcsCode <= SEQ_START) {\n        // Sequence start\n        seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];\n        continue;\n      }\n      if (dbcsCode == UNASSIGNED && this.gb18030) {\n        // Use GB18030 algorithm to find character(s) to write.\n        var idx = findIdx(this.gb18030.uChars, uCode);\n        if (idx != -1) {\n          var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n          newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600);\n          dbcsCode = dbcsCode % 12600;\n          newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260);\n          dbcsCode = dbcsCode % 1260;\n          newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10);\n          dbcsCode = dbcsCode % 10;\n          newBuf[j++] = 0x30 + dbcsCode;\n          continue;\n        }\n      }\n    }\n\n    // 3. Write dbcsCode character.\n    if (dbcsCode === UNASSIGNED) dbcsCode = this.defaultCharSingleByte;\n    if (dbcsCode < 0x100) {\n      newBuf[j++] = dbcsCode;\n    } else if (dbcsCode < 0x10000) {\n      newBuf[j++] = dbcsCode >> 8; // high byte\n      newBuf[j++] = dbcsCode & 0xFF; // low byte\n    } else {\n      newBuf[j++] = dbcsCode >> 16;\n      newBuf[j++] = dbcsCode >> 8 & 0xFF;\n      newBuf[j++] = dbcsCode & 0xFF;\n    }\n  }\n  this.seqObj = seqObj;\n  this.leadSurrogate = leadSurrogate;\n  return newBuf.slice(0, j);\n};\nDBCSEncoder.prototype.end = function () {\n  if (this.leadSurrogate === -1 && this.seqObj === undefined) return; // All clean. Most often case.\n\n  var newBuf = Buffer.alloc(10),\n    j = 0;\n  if (this.seqObj) {\n    // We're in the sequence.\n    var dbcsCode = this.seqObj[DEF_CHAR];\n    if (dbcsCode !== undefined) {\n      // Write beginning of the sequence.\n      if (dbcsCode < 0x100) {\n        newBuf[j++] = dbcsCode;\n      } else {\n        newBuf[j++] = dbcsCode >> 8; // high byte\n        newBuf[j++] = dbcsCode & 0xFF; // low byte\n      }\n    } else {\n      // See todo above.\n    }\n    this.seqObj = undefined;\n  }\n  if (this.leadSurrogate !== -1) {\n    // Incomplete surrogate pair - only lead surrogate found.\n    newBuf[j++] = this.defaultCharSingleByte;\n    this.leadSurrogate = -1;\n  }\n  return newBuf.slice(0, j);\n};\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n  // Decoder state\n  this.nodeIdx = 0;\n  this.prevBuf = Buffer.alloc(0);\n\n  // Static data\n  this.decodeTables = codec.decodeTables;\n  this.decodeTableSeq = codec.decodeTableSeq;\n  this.defaultCharUnicode = codec.defaultCharUnicode;\n  this.gb18030 = codec.gb18030;\n}\nDBCSDecoder.prototype.write = function (buf) {\n  var newBuf = Buffer.alloc(buf.length * 2),\n    nodeIdx = this.nodeIdx,\n    prevBuf = this.prevBuf,\n    prevBufOffset = this.prevBuf.length,\n    seqStart = -this.prevBuf.length,\n    // idx of the start of current parsed sequence.\n    uCode;\n  if (prevBufOffset > 0)\n    // Make prev buf overlap a little to make it easier to slice later.\n    prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n  for (var i = 0, j = 0; i < buf.length; i++) {\n    var curByte = i >= 0 ? buf[i] : prevBuf[i + prevBufOffset];\n\n    // Lookup in current trie node.\n    var uCode = this.decodeTables[nodeIdx][curByte];\n    if (uCode >= 0) {\n      // Normal character, just use it.\n    } else if (uCode === UNASSIGNED) {\n      // Unknown char.\n      // TODO: Callback with seq.\n      //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n      i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n      uCode = this.defaultCharUnicode.charCodeAt(0);\n    } else if (uCode === GB18030_CODE) {\n      var curSeq = seqStart >= 0 ? buf.slice(seqStart, i + 1) : prevBuf.slice(seqStart + prevBufOffset, i + 1 + prevBufOffset);\n      var ptr = (curSeq[0] - 0x81) * 12600 + (curSeq[1] - 0x30) * 1260 + (curSeq[2] - 0x81) * 10 + (curSeq[3] - 0x30);\n      var idx = findIdx(this.gb18030.gbChars, ptr);\n      uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n    } else if (uCode <= NODE_START) {\n      // Go to next trie node.\n      nodeIdx = NODE_START - uCode;\n      continue;\n    } else if (uCode <= SEQ_START) {\n      // Output a sequence of chars.\n      var seq = this.decodeTableSeq[SEQ_START - uCode];\n      for (var k = 0; k < seq.length - 1; k++) {\n        uCode = seq[k];\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n      }\n      uCode = seq[seq.length - 1];\n    } else throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n    // Write the character to buffer, handling higher planes using surrogate pair.\n    if (uCode > 0xFFFF) {\n      uCode -= 0x10000;\n      var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n      newBuf[j++] = uCodeLead & 0xFF;\n      newBuf[j++] = uCodeLead >> 8;\n      uCode = 0xDC00 + uCode % 0x400;\n    }\n    newBuf[j++] = uCode & 0xFF;\n    newBuf[j++] = uCode >> 8;\n\n    // Reset trie node.\n    nodeIdx = 0;\n    seqStart = i + 1;\n  }\n  this.nodeIdx = nodeIdx;\n  this.prevBuf = seqStart >= 0 ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n  return newBuf.slice(0, j).toString('ucs2');\n};\nDBCSDecoder.prototype.end = function () {\n  var ret = '';\n\n  // Try to parse all remaining chars.\n  while (this.prevBuf.length > 0) {\n    // Skip 1 character in the buffer.\n    ret += this.defaultCharUnicode;\n    var buf = this.prevBuf.slice(1);\n\n    // Parse remaining as usual.\n    this.prevBuf = Buffer.alloc(0);\n    this.nodeIdx = 0;\n    if (buf.length > 0) ret += this.write(buf);\n  }\n  this.nodeIdx = 0;\n  return ret;\n};\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n  if (table[0] > val) return -1;\n  var l = 0,\n    r = table.length;\n  while (l < r - 1) {\n    // always table[l] <= val < table[r]\n    var mid = l + Math.floor((r - l + 1) / 2);\n    if (table[mid] <= val) l = mid;else r = mid;\n  }\n  return l;\n}", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"｡\",62],\n[\"8140\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×\"],\n[\"8180\",\"÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓\"],\n[\"81b8\",\"∈∋⊆⊇⊂⊃∪∩\"],\n[\"81c8\",\"∧∨￢⇒⇔∀∃\"],\n[\"81da\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],\n[\"81f0\",\"Å‰♯♭♪†‡¶\"],\n[\"81fc\",\"◯\"],\n[\"824f\",\"０\",9],\n[\"8260\",\"Ａ\",25],\n[\"8281\",\"ａ\",25],\n[\"829f\",\"ぁ\",82],\n[\"8340\",\"ァ\",62],\n[\"8380\",\"ム\",22],\n[\"839f\",\"Α\",16,\"Σ\",6],\n[\"83bf\",\"α\",16,\"σ\",6],\n[\"8440\",\"А\",5,\"ЁЖ\",25],\n[\"8470\",\"а\",5,\"ёж\",7],\n[\"8480\",\"о\",17],\n[\"849f\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],\n[\"8740\",\"①\",19,\"Ⅰ\",9],\n[\"875f\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],\n[\"877e\",\"㍻\"],\n[\"8780\",\"〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],\n[\"889f\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],\n[\"8940\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円\"],\n[\"8980\",\"園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],\n[\"8a40\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫\"],\n[\"8a80\",\"橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],\n[\"8b40\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救\"],\n[\"8b80\",\"朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],\n[\"8c40\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨\"],\n[\"8c80\",\"劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],\n[\"8d40\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降\"],\n[\"8d80\",\"項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],\n[\"8e40\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止\"],\n[\"8e80\",\"死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],\n[\"8f40\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳\"],\n[\"8f80\",\"準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],\n[\"9040\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨\"],\n[\"9080\",\"逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],\n[\"9140\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻\"],\n[\"9180\",\"操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],\n[\"9240\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄\"],\n[\"9280\",\"逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],\n[\"9340\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬\"],\n[\"9380\",\"凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],\n[\"9440\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅\"],\n[\"9480\",\"楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],\n[\"9540\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷\"],\n[\"9580\",\"斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],\n[\"9640\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆\"],\n[\"9680\",\"摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],\n[\"9740\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲\"],\n[\"9780\",\"沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],\n[\"9840\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],\n[\"989f\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],\n[\"9940\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭\"],\n[\"9980\",\"凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],\n[\"9a40\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸\"],\n[\"9a80\",\"噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],\n[\"9b40\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀\"],\n[\"9b80\",\"它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],\n[\"9c40\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠\"],\n[\"9c80\",\"怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],\n[\"9d40\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫\"],\n[\"9d80\",\"捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],\n[\"9e40\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎\"],\n[\"9e80\",\"梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],\n[\"9f40\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯\"],\n[\"9f80\",\"麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],\n[\"e040\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝\"],\n[\"e080\",\"烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],\n[\"e140\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿\"],\n[\"e180\",\"痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],\n[\"e240\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰\"],\n[\"e280\",\"窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],\n[\"e340\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷\"],\n[\"e380\",\"縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],\n[\"e440\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤\"],\n[\"e480\",\"艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],\n[\"e540\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬\"],\n[\"e580\",\"蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],\n[\"e640\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧\"],\n[\"e680\",\"諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],\n[\"e740\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜\"],\n[\"e780\",\"轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],\n[\"e840\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙\"],\n[\"e880\",\"閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],\n[\"e940\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃\"],\n[\"e980\",\"騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],\n[\"ea40\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯\"],\n[\"ea80\",\"黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙\"],\n[\"ed40\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏\"],\n[\"ed80\",\"塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],\n[\"ee40\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙\"],\n[\"ee80\",\"蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],\n[\"eeef\",\"ⅰ\",9,\"￢￤＇＂\"],\n[\"f040\",\"\",62],\n[\"f080\",\"\",124],\n[\"f140\",\"\",62],\n[\"f180\",\"\",124],\n[\"f240\",\"\",62],\n[\"f280\",\"\",124],\n[\"f340\",\"\",62],\n[\"f380\",\"\",124],\n[\"f440\",\"\",62],\n[\"f480\",\"\",124],\n[\"f540\",\"\",62],\n[\"f580\",\"\",124],\n[\"f640\",\"\",62],\n[\"f680\",\"\",124],\n[\"f740\",\"\",62],\n[\"f780\",\"\",124],\n[\"f840\",\"\",62],\n[\"f880\",\"\",124],\n[\"f940\",\"\"],\n[\"fa40\",\"ⅰ\",9,\"Ⅰ\",9,\"￢￤＇＂㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊\"],\n[\"fa80\",\"兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯\"],\n[\"fb40\",\"涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神\"],\n[\"fb80\",\"祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙\"],\n[\"fc40\",\"髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"｡\",62],\n[\"a1a1\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇\"],\n[\"a2a1\",\"◆□■△▲▽▼※〒→←↑↓〓\"],\n[\"a2ba\",\"∈∋⊆⊇⊂⊃∪∩\"],\n[\"a2ca\",\"∧∨￢⇒⇔∀∃\"],\n[\"a2dc\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],\n[\"a2f2\",\"Å‰♯♭♪†‡¶\"],\n[\"a2fe\",\"◯\"],\n[\"a3b0\",\"０\",9],\n[\"a3c1\",\"Ａ\",25],\n[\"a3e1\",\"ａ\",25],\n[\"a4a1\",\"ぁ\",82],\n[\"a5a1\",\"ァ\",85],\n[\"a6a1\",\"Α\",16,\"Σ\",6],\n[\"a6c1\",\"α\",16,\"σ\",6],\n[\"a7a1\",\"А\",5,\"ЁЖ\",25],\n[\"a7d1\",\"а\",5,\"ёж\",25],\n[\"a8a1\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],\n[\"ada1\",\"①\",19,\"Ⅰ\",9],\n[\"adc0\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],\n[\"addf\",\"㍻〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],\n[\"b0a1\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],\n[\"b1a1\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応\"],\n[\"b2a1\",\"押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],\n[\"b3a1\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱\"],\n[\"b4a1\",\"粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],\n[\"b5a1\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京\"],\n[\"b6a1\",\"供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],\n[\"b7a1\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲\"],\n[\"b8a1\",\"検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],\n[\"b9a1\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込\"],\n[\"baa1\",\"此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],\n[\"bba1\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時\"],\n[\"bca1\",\"次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],\n[\"bda1\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償\"],\n[\"bea1\",\"勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],\n[\"bfa1\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾\"],\n[\"c0a1\",\"澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],\n[\"c1a1\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎\"],\n[\"c2a1\",\"臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],\n[\"c3a1\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵\"],\n[\"c4a1\",\"帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],\n[\"c5a1\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到\"],\n[\"c6a1\",\"董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],\n[\"c7a1\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦\"],\n[\"c8a1\",\"函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],\n[\"c9a1\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服\"],\n[\"caa1\",\"福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],\n[\"cba1\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満\"],\n[\"cca1\",\"漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],\n[\"cda1\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃\"],\n[\"cea1\",\"痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],\n[\"cfa1\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],\n[\"d0a1\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],\n[\"d1a1\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨\"],\n[\"d2a1\",\"辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],\n[\"d3a1\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉\"],\n[\"d4a1\",\"圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],\n[\"d5a1\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓\"],\n[\"d6a1\",\"屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],\n[\"d7a1\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚\"],\n[\"d8a1\",\"悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],\n[\"d9a1\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼\"],\n[\"daa1\",\"據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],\n[\"dba1\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍\"],\n[\"dca1\",\"棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],\n[\"dda1\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾\"],\n[\"dea1\",\"沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],\n[\"dfa1\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼\"],\n[\"e0a1\",\"燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],\n[\"e1a1\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰\"],\n[\"e2a1\",\"癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],\n[\"e3a1\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐\"],\n[\"e4a1\",\"筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],\n[\"e5a1\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺\"],\n[\"e6a1\",\"罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],\n[\"e7a1\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙\"],\n[\"e8a1\",\"茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],\n[\"e9a1\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙\"],\n[\"eaa1\",\"蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],\n[\"eba1\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫\"],\n[\"eca1\",\"譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],\n[\"eda1\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸\"],\n[\"eea1\",\"遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],\n[\"efa1\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞\"],\n[\"f0a1\",\"陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],\n[\"f1a1\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷\"],\n[\"f2a1\",\"髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],\n[\"f3a1\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠\"],\n[\"f4a1\",\"堯槇遙瑤凜熙\"],\n[\"f9a1\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德\"],\n[\"faa1\",\"忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],\n[\"fba1\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚\"],\n[\"fca1\",\"釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],\n[\"fcf1\",\"ⅰ\",9,\"￢￤＇＂\"],\n[\"8fa2af\",\"˘ˇ¸˙˝¯˛˚～΄΅\"],\n[\"8fa2c2\",\"¡¦¿\"],\n[\"8fa2eb\",\"ºª©®™¤№\"],\n[\"8fa6e1\",\"ΆΈΉΊΪ\"],\n[\"8fa6e7\",\"Ό\"],\n[\"8fa6e9\",\"ΎΫ\"],\n[\"8fa6ec\",\"Ώ\"],\n[\"8fa6f1\",\"άέήίϊΐόςύϋΰώ\"],\n[\"8fa7c2\",\"Ђ\",10,\"ЎЏ\"],\n[\"8fa7f2\",\"ђ\",10,\"ўџ\"],\n[\"8fa9a1\",\"ÆĐ\"],\n[\"8fa9a4\",\"Ħ\"],\n[\"8fa9a6\",\"Ĳ\"],\n[\"8fa9a8\",\"ŁĿ\"],\n[\"8fa9ab\",\"ŊØŒ\"],\n[\"8fa9af\",\"ŦÞ\"],\n[\"8fa9c1\",\"æđðħıĳĸłŀŉŋøœßŧþ\"],\n[\"8faaa1\",\"ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ\"],\n[\"8faaba\",\"ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ\"],\n[\"8faba1\",\"áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ\"],\n[\"8fabbd\",\"ġĥíìïîǐ\"],\n[\"8fabc5\",\"īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż\"],\n[\"8fb0a1\",\"丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄\"],\n[\"8fb1a1\",\"侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐\"],\n[\"8fb2a1\",\"傒傓傔傖傛傜傞\",4,\"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂\"],\n[\"8fb3a1\",\"凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋\"],\n[\"8fb4a1\",\"匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿\"],\n[\"8fb5a1\",\"咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒\"],\n[\"8fb6a1\",\"嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍\",5,\"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤\",4,\"囱囫园\"],\n[\"8fb7a1\",\"囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭\",4,\"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡\"],\n[\"8fb8a1\",\"堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭\"],\n[\"8fb9a1\",\"奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿\"],\n[\"8fbaa1\",\"嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖\",4,\"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩\"],\n[\"8fbba1\",\"屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤\"],\n[\"8fbca1\",\"巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪\",4,\"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧\"],\n[\"8fbda1\",\"彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐\",4,\"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷\"],\n[\"8fbea1\",\"悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐\",4,\"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥\"],\n[\"8fbfa1\",\"懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵\"],\n[\"8fc0a1\",\"捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿\"],\n[\"8fc1a1\",\"擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝\"],\n[\"8fc2a1\",\"昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝\"],\n[\"8fc3a1\",\"杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮\",4,\"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏\"],\n[\"8fc4a1\",\"棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲\"],\n[\"8fc5a1\",\"樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽\"],\n[\"8fc6a1\",\"歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖\"],\n[\"8fc7a1\",\"泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞\"],\n[\"8fc8a1\",\"湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊\"],\n[\"8fc9a1\",\"濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔\",4,\"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃\",4,\"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠\"],\n[\"8fcaa1\",\"煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻\"],\n[\"8fcba1\",\"狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽\"],\n[\"8fcca1\",\"珿琀琁琄琇琊琑琚琛琤琦琨\",9,\"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆\"],\n[\"8fcda1\",\"甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹\",5,\"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹\"],\n[\"8fcea1\",\"瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢\",6,\"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢\"],\n[\"8fcfa1\",\"睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳\"],\n[\"8fd0a1\",\"碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞\"],\n[\"8fd1a1\",\"秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰\"],\n[\"8fd2a1\",\"笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙\",5],\n[\"8fd3a1\",\"籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝\"],\n[\"8fd4a1\",\"綞綦綧綪綳綶綷綹緂\",4,\"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭\"],\n[\"8fd5a1\",\"罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮\"],\n[\"8fd6a1\",\"胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆\"],\n[\"8fd7a1\",\"艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸\"],\n[\"8fd8a1\",\"荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓\"],\n[\"8fd9a1\",\"蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏\",4,\"蕖蕙蕜\",6,\"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼\"],\n[\"8fdaa1\",\"藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠\",4,\"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣\"],\n[\"8fdba1\",\"蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃\",6,\"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵\"],\n[\"8fdca1\",\"蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊\",4,\"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺\"],\n[\"8fdda1\",\"襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔\",4,\"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳\"],\n[\"8fdea1\",\"誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂\",4,\"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆\"],\n[\"8fdfa1\",\"貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢\"],\n[\"8fe0a1\",\"踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁\"],\n[\"8fe1a1\",\"轃轇轏轑\",4,\"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃\"],\n[\"8fe2a1\",\"郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿\"],\n[\"8fe3a1\",\"釂釃釅釓釔釗釙釚釞釤釥釩釪釬\",5,\"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵\",4,\"鉻鉼鉽鉿銈銉銊銍銎銒銗\"],\n[\"8fe4a1\",\"銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿\",4,\"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶\"],\n[\"8fe5a1\",\"鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉\",4,\"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹\"],\n[\"8fe6a1\",\"镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂\"],\n[\"8fe7a1\",\"霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦\"],\n[\"8fe8a1\",\"頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱\",4,\"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵\"],\n[\"8fe9a1\",\"馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿\",4],\n[\"8feaa1\",\"鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪\",4,\"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸\"],\n[\"8feba1\",\"鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦\",4,\"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻\"],\n[\"8feca1\",\"鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵\"],\n[\"8feda1\",\"黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃\",4,\"齓齕齖齗齘齚齝齞齨齩齭\",4,\"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"€\"],\n[\"8140\",\"丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪\",5,\"乲乴\",9,\"乿\",6,\"亇亊\"],\n[\"8180\",\"亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂\",6,\"伋伌伒\",4,\"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾\",4,\"佄佅佇\",5,\"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢\"],\n[\"8240\",\"侤侫侭侰\",4,\"侶\",8,\"俀俁係俆俇俈俉俋俌俍俒\",4,\"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿\",11],\n[\"8280\",\"個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯\",10,\"倻倽倿偀偁偂偄偅偆偉偊偋偍偐\",4,\"偖偗偘偙偛偝\",7,\"偦\",5,\"偭\",8,\"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎\",20,\"傤傦傪傫傭\",4,\"傳\",6,\"傼\"],\n[\"8340\",\"傽\",17,\"僐\",5,\"僗僘僙僛\",10,\"僨僩僪僫僯僰僱僲僴僶\",4,\"僼\",9,\"儈\"],\n[\"8380\",\"儉儊儌\",5,\"儓\",13,\"儢\",28,\"兂兇兊兌兎兏児兒兓兗兘兙兛兝\",4,\"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦\",4,\"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒\",5],\n[\"8440\",\"凘凙凚凜凞凟凢凣凥\",5,\"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄\",5,\"剋剎剏剒剓剕剗剘\"],\n[\"8480\",\"剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳\",9,\"剾劀劃\",4,\"劉\",6,\"劑劒劔\",6,\"劜劤劥劦劧劮劯劰労\",9,\"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務\",5,\"勠勡勢勣勥\",10,\"勱\",7,\"勻勼勽匁匂匃匄匇匉匊匋匌匎\"],\n[\"8540\",\"匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯\",9,\"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏\"],\n[\"8580\",\"厐\",4,\"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯\",6,\"厷厸厹厺厼厽厾叀參\",4,\"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝\",4,\"呣呥呧呩\",7,\"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡\"],\n[\"8640\",\"咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠\",4,\"哫哬哯哰哱哴\",5,\"哻哾唀唂唃唄唅唈唊\",4,\"唒唓唕\",5,\"唜唝唞唟唡唥唦\"],\n[\"8680\",\"唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋\",4,\"啑啒啓啔啗\",4,\"啝啞啟啠啢啣啨啩啫啯\",5,\"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠\",6,\"喨\",8,\"喲喴営喸喺喼喿\",4,\"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗\",4,\"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸\",4,\"嗿嘂嘃嘄嘅\"],\n[\"8740\",\"嘆嘇嘊嘋嘍嘐\",7,\"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀\",11,\"噏\",4,\"噕噖噚噛噝\",4],\n[\"8780\",\"噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽\",7,\"嚇\",6,\"嚐嚑嚒嚔\",14,\"嚤\",10,\"嚰\",6,\"嚸嚹嚺嚻嚽\",12,\"囋\",8,\"囕囖囘囙囜団囥\",5,\"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國\",6],\n[\"8840\",\"園\",9,\"圝圞圠圡圢圤圥圦圧圫圱圲圴\",4,\"圼圽圿坁坃坄坅坆坈坉坋坒\",4,\"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀\"],\n[\"8880\",\"垁垇垈垉垊垍\",4,\"垔\",6,\"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹\",8,\"埄\",6,\"埌埍埐埑埓埖埗埛埜埞埡埢埣埥\",7,\"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥\",4,\"堫\",4,\"報堲堳場堶\",7],\n[\"8940\",\"堾\",5,\"塅\",6,\"塎塏塐塒塓塕塖塗塙\",4,\"塟\",5,\"塦\",4,\"塭\",16,\"塿墂墄墆墇墈墊墋墌\"],\n[\"8980\",\"墍\",4,\"墔\",4,\"墛墜墝墠\",7,\"墪\",17,\"墽墾墿壀壂壃壄壆\",10,\"壒壓壔壖\",13,\"壥\",5,\"壭壯壱売壴壵壷壸壺\",7,\"夃夅夆夈\",4,\"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻\"],\n[\"8a40\",\"夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛\",4,\"奡奣奤奦\",12,\"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦\"],\n[\"8a80\",\"妧妬妭妰妱妳\",5,\"妺妼妽妿\",6,\"姇姈姉姌姍姎姏姕姖姙姛姞\",4,\"姤姦姧姩姪姫姭\",11,\"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪\",6,\"娳娵娷\",4,\"娽娾娿婁\",4,\"婇婈婋\",9,\"婖婗婘婙婛\",5],\n[\"8b40\",\"婡婣婤婥婦婨婩婫\",8,\"婸婹婻婼婽婾媀\",17,\"媓\",6,\"媜\",13,\"媫媬\"],\n[\"8b80\",\"媭\",4,\"媴媶媷媹\",4,\"媿嫀嫃\",5,\"嫊嫋嫍\",4,\"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬\",4,\"嫲\",22,\"嬊\",11,\"嬘\",25,\"嬳嬵嬶嬸\",7,\"孁\",6],\n[\"8c40\",\"孈\",7,\"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏\"],\n[\"8c80\",\"寑寔\",8,\"寠寢寣實寧審\",4,\"寯寱\",6,\"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧\",6,\"屰屲\",6,\"屻屼屽屾岀岃\",4,\"岉岊岋岎岏岒岓岕岝\",4,\"岤\",4],\n[\"8d40\",\"岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅\",5,\"峌\",5,\"峓\",5,\"峚\",6,\"峢峣峧峩峫峬峮峯峱\",9,\"峼\",4],\n[\"8d80\",\"崁崄崅崈\",5,\"崏\",4,\"崕崗崘崙崚崜崝崟\",4,\"崥崨崪崫崬崯\",4,\"崵\",7,\"崿\",7,\"嵈嵉嵍\",10,\"嵙嵚嵜嵞\",10,\"嵪嵭嵮嵰嵱嵲嵳嵵\",12,\"嶃\",21,\"嶚嶛嶜嶞嶟嶠\"],\n[\"8e40\",\"嶡\",21,\"嶸\",12,\"巆\",6,\"巎\",12,\"巜巟巠巣巤巪巬巭\"],\n[\"8e80\",\"巰巵巶巸\",4,\"巿帀帄帇帉帊帋帍帎帒帓帗帞\",7,\"帨\",4,\"帯帰帲\",4,\"帹帺帾帿幀幁幃幆\",5,\"幍\",6,\"幖\",4,\"幜幝幟幠幣\",14,\"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨\",4,\"庮\",4,\"庴庺庻庼庽庿\",6],\n[\"8f40\",\"廆廇廈廋\",5,\"廔廕廗廘廙廚廜\",11,\"廩廫\",8,\"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤\"],\n[\"8f80\",\"弨弫弬弮弰弲\",6,\"弻弽弾弿彁\",14,\"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢\",5,\"復徫徬徯\",5,\"徶徸徹徺徻徾\",4,\"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇\"],\n[\"9040\",\"怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰\",4,\"怶\",4,\"怽怾恀恄\",6,\"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀\"],\n[\"9080\",\"悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽\",7,\"惇惈惉惌\",4,\"惒惓惔惖惗惙惛惞惡\",4,\"惪惱惲惵惷惸惻\",4,\"愂愃愄愅愇愊愋愌愐\",4,\"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬\",18,\"慀\",6],\n[\"9140\",\"慇慉態慍慏慐慒慓慔慖\",6,\"慞慟慠慡慣慤慥慦慩\",6,\"慱慲慳慴慶慸\",18,\"憌憍憏\",4,\"憕\"],\n[\"9180\",\"憖\",6,\"憞\",8,\"憪憫憭\",9,\"憸\",5,\"憿懀懁懃\",4,\"應懌\",4,\"懓懕\",16,\"懧\",13,\"懶\",8,\"戀\",5,\"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸\",4,\"扂扄扅扆扊\"],\n[\"9240\",\"扏扐払扖扗扙扚扜\",6,\"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋\",5,\"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁\"],\n[\"9280\",\"拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳\",5,\"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖\",7,\"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙\",6,\"採掤掦掫掯掱掲掵掶掹掻掽掿揀\"],\n[\"9340\",\"揁揂揃揅揇揈揊揋揌揑揓揔揕揗\",6,\"揟揢揤\",4,\"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆\",4,\"損搎搑搒搕\",5,\"搝搟搢搣搤\"],\n[\"9380\",\"搥搧搨搩搫搮\",5,\"搵\",4,\"搻搼搾摀摂摃摉摋\",6,\"摓摕摖摗摙\",4,\"摟\",7,\"摨摪摫摬摮\",9,\"摻\",6,\"撃撆撈\",8,\"撓撔撗撘撚撛撜撝撟\",4,\"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆\",6,\"擏擑擓擔擕擖擙據\"],\n[\"9440\",\"擛擜擝擟擠擡擣擥擧\",24,\"攁\",7,\"攊\",7,\"攓\",4,\"攙\",8],\n[\"9480\",\"攢攣攤攦\",4,\"攬攭攰攱攲攳攷攺攼攽敀\",4,\"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數\",14,\"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱\",7,\"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘\",7,\"旡旣旤旪旫\"],\n[\"9540\",\"旲旳旴旵旸旹旻\",4,\"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷\",4,\"昽昿晀時晄\",6,\"晍晎晐晑晘\"],\n[\"9580\",\"晙晛晜晝晞晠晢晣晥晧晩\",4,\"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘\",4,\"暞\",8,\"暩\",4,\"暯\",4,\"暵暶暷暸暺暻暼暽暿\",25,\"曚曞\",7,\"曧曨曪\",5,\"曱曵曶書曺曻曽朁朂會\"],\n[\"9640\",\"朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠\",5,\"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗\",4,\"杝杢杣杤杦杧杫杬杮東杴杶\"],\n[\"9680\",\"杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹\",7,\"柂柅\",9,\"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵\",7,\"柾栁栂栃栄栆栍栐栒栔栕栘\",4,\"栞栟栠栢\",6,\"栫\",6,\"栴栵栶栺栻栿桇桋桍桏桒桖\",5],\n[\"9740\",\"桜桝桞桟桪桬\",7,\"桵桸\",8,\"梂梄梇\",7,\"梐梑梒梔梕梖梘\",9,\"梣梤梥梩梪梫梬梮梱梲梴梶梷梸\"],\n[\"9780\",\"梹\",6,\"棁棃\",5,\"棊棌棎棏棐棑棓棔棖棗棙棛\",4,\"棡棢棤\",9,\"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆\",4,\"椌椏椑椓\",11,\"椡椢椣椥\",7,\"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃\",16,\"楕楖楘楙楛楜楟\"],\n[\"9840\",\"楡楢楤楥楧楨楩楪楬業楯楰楲\",4,\"楺楻楽楾楿榁榃榅榊榋榌榎\",5,\"榖榗榙榚榝\",9,\"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽\"],\n[\"9880\",\"榾榿槀槂\",7,\"構槍槏槑槒槓槕\",5,\"槜槝槞槡\",11,\"槮槯槰槱槳\",9,\"槾樀\",9,\"樋\",11,\"標\",5,\"樠樢\",5,\"権樫樬樭樮樰樲樳樴樶\",6,\"樿\",4,\"橅橆橈\",7,\"橑\",6,\"橚\"],\n[\"9940\",\"橜\",4,\"橢橣橤橦\",10,\"橲\",6,\"橺橻橽橾橿檁檂檃檅\",8,\"檏檒\",4,\"檘\",7,\"檡\",5],\n[\"9980\",\"檧檨檪檭\",114,\"欥欦欨\",6],\n[\"9a40\",\"欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍\",11,\"歚\",7,\"歨歩歫\",13,\"歺歽歾歿殀殅殈\"],\n[\"9a80\",\"殌殎殏殐殑殔殕殗殘殙殜\",4,\"殢\",7,\"殫\",7,\"殶殸\",6,\"毀毃毄毆\",4,\"毌毎毐毑毘毚毜\",4,\"毢\",7,\"毬毭毮毰毱毲毴毶毷毸毺毻毼毾\",6,\"氈\",4,\"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋\",4,\"汑汒汓汖汘\"],\n[\"9b40\",\"汙汚汢汣汥汦汧汫\",4,\"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘\"],\n[\"9b80\",\"泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟\",5,\"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽\",4,\"涃涄涆涇涊涋涍涏涐涒涖\",4,\"涜涢涥涬涭涰涱涳涴涶涷涹\",5,\"淁淂淃淈淉淊\"],\n[\"9c40\",\"淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽\",7,\"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵\"],\n[\"9c80\",\"渶渷渹渻\",7,\"湅\",7,\"湏湐湑湒湕湗湙湚湜湝湞湠\",10,\"湬湭湯\",14,\"満溁溂溄溇溈溊\",4,\"溑\",6,\"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪\",5],\n[\"9d40\",\"滰滱滲滳滵滶滷滸滺\",7,\"漃漄漅漇漈漊\",4,\"漐漑漒漖\",9,\"漡漢漣漥漦漧漨漬漮漰漲漴漵漷\",6,\"漿潀潁潂\"],\n[\"9d80\",\"潃潄潅潈潉潊潌潎\",9,\"潙潚潛潝潟潠潡潣潤潥潧\",5,\"潯潰潱潳潵潶潷潹潻潽\",6,\"澅澆澇澊澋澏\",12,\"澝澞澟澠澢\",4,\"澨\",10,\"澴澵澷澸澺\",5,\"濁濃\",5,\"濊\",6,\"濓\",10,\"濟濢濣濤濥\"],\n[\"9e40\",\"濦\",7,\"濰\",32,\"瀒\",7,\"瀜\",6,\"瀤\",6],\n[\"9e80\",\"瀫\",9,\"瀶瀷瀸瀺\",17,\"灍灎灐\",13,\"灟\",11,\"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞\",12,\"炰炲炴炵炶為炾炿烄烅烆烇烉烋\",12,\"烚\"],\n[\"9f40\",\"烜烝烞烠烡烢烣烥烪烮烰\",6,\"烸烺烻烼烾\",10,\"焋\",4,\"焑焒焔焗焛\",10,\"焧\",7,\"焲焳焴\"],\n[\"9f80\",\"焵焷\",13,\"煆煇煈煉煋煍煏\",12,\"煝煟\",4,\"煥煩\",4,\"煯煰煱煴煵煶煷煹煻煼煾\",5,\"熅\",4,\"熋熌熍熎熐熑熒熓熕熖熗熚\",4,\"熡\",6,\"熩熪熫熭\",5,\"熴熶熷熸熺\",8,\"燄\",9,\"燏\",4],\n[\"a040\",\"燖\",9,\"燡燢燣燤燦燨\",5,\"燯\",9,\"燺\",11,\"爇\",19],\n[\"a080\",\"爛爜爞\",9,\"爩爫爭爮爯爲爳爴爺爼爾牀\",6,\"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅\",4,\"犌犎犐犑犓\",11,\"犠\",11,\"犮犱犲犳犵犺\",6,\"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛\"],\n[\"a1a1\",\"　、。·ˉˇ¨〃々—～‖…‘’“”〔〕〈\",7,\"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃＄¤￠￡‰§№☆★○●◎◇◆□■△▲※→←↑↓〓\"],\n[\"a2a1\",\"ⅰ\",9],\n[\"a2b1\",\"⒈\",19,\"⑴\",19,\"①\",9],\n[\"a2e5\",\"㈠\",9],\n[\"a2f1\",\"Ⅰ\",11],\n[\"a3a1\",\"！＂＃￥％\",88,\"￣\"],\n[\"a4a1\",\"ぁ\",82],\n[\"a5a1\",\"ァ\",85],\n[\"a6a1\",\"Α\",16,\"Σ\",6],\n[\"a6c1\",\"α\",16,\"σ\",6],\n[\"a6e0\",\"︵︶︹︺︿﹀︽︾﹁﹂﹃﹄\"],\n[\"a6ee\",\"︻︼︷︸︱\"],\n[\"a6f4\",\"︳︴\"],\n[\"a7a1\",\"А\",5,\"ЁЖ\",25],\n[\"a7d1\",\"а\",5,\"ёж\",25],\n[\"a840\",\"ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═\",35,\"▁\",6],\n[\"a880\",\"█\",7,\"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞\"],\n[\"a8a1\",\"āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ\"],\n[\"a8bd\",\"ńň\"],\n[\"a8c0\",\"ɡ\"],\n[\"a8c5\",\"ㄅ\",36],\n[\"a940\",\"〡\",8,\"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰￢￤\"],\n[\"a959\",\"℡㈱\"],\n[\"a95c\",\"‐\"],\n[\"a960\",\"ー゛゜ヽヾ〆ゝゞ﹉\",9,\"﹔﹕﹖﹗﹙\",8],\n[\"a980\",\"﹢\",4,\"﹨﹩﹪﹫\"],\n[\"a996\",\"〇\"],\n[\"a9a4\",\"─\",75],\n[\"aa40\",\"狜狝狟狢\",5,\"狪狫狵狶狹狽狾狿猀猂猄\",5,\"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀\",8],\n[\"aa80\",\"獉獊獋獌獎獏獑獓獔獕獖獘\",7,\"獡\",10,\"獮獰獱\"],\n[\"ab40\",\"獲\",11,\"獿\",4,\"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣\",5,\"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃\",4],\n[\"ab80\",\"珋珌珎珒\",6,\"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳\",4],\n[\"ac40\",\"珸\",10,\"琄琇琈琋琌琍琎琑\",8,\"琜\",5,\"琣琤琧琩琫琭琯琱琲琷\",4,\"琽琾琿瑀瑂\",11],\n[\"ac80\",\"瑎\",6,\"瑖瑘瑝瑠\",12,\"瑮瑯瑱\",4,\"瑸瑹瑺\"],\n[\"ad40\",\"瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑\",10,\"璝璟\",7,\"璪\",15,\"璻\",12],\n[\"ad80\",\"瓈\",9,\"瓓\",8,\"瓝瓟瓡瓥瓧\",6,\"瓰瓱瓲\"],\n[\"ae40\",\"瓳瓵瓸\",6,\"甀甁甂甃甅\",7,\"甎甐甒甔甕甖甗甛甝甞甠\",4,\"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘\"],\n[\"ae80\",\"畝\",7,\"畧畨畩畫\",6,\"畳畵當畷畺\",4,\"疀疁疂疄疅疇\"],\n[\"af40\",\"疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦\",4,\"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇\"],\n[\"af80\",\"瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄\"],\n[\"b040\",\"癅\",6,\"癎\",5,\"癕癗\",4,\"癝癟癠癡癢癤\",6,\"癬癭癮癰\",7,\"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛\"],\n[\"b080\",\"皜\",7,\"皥\",8,\"皯皰皳皵\",9,\"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥\"],\n[\"b140\",\"盄盇盉盋盌盓盕盙盚盜盝盞盠\",4,\"盦\",7,\"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎\",10,\"眛眜眝眞眡眣眤眥眧眪眫\"],\n[\"b180\",\"眬眮眰\",4,\"眹眻眽眾眿睂睄睅睆睈\",7,\"睒\",7,\"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳\"],\n[\"b240\",\"睝睞睟睠睤睧睩睪睭\",11,\"睺睻睼瞁瞂瞃瞆\",5,\"瞏瞐瞓\",11,\"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶\",4],\n[\"b280\",\"瞼瞾矀\",12,\"矎\",8,\"矘矙矚矝\",4,\"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖\"],\n[\"b340\",\"矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃\",5,\"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚\"],\n[\"b380\",\"硛硜硞\",11,\"硯\",7,\"硸硹硺硻硽\",6,\"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚\"],\n[\"b440\",\"碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨\",7,\"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚\",9],\n[\"b480\",\"磤磥磦磧磩磪磫磭\",4,\"磳磵磶磸磹磻\",5,\"礂礃礄礆\",6,\"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮\"],\n[\"b540\",\"礍\",5,\"礔\",9,\"礟\",4,\"礥\",14,\"礵\",4,\"礽礿祂祃祄祅祇祊\",8,\"祔祕祘祙祡祣\"],\n[\"b580\",\"祤祦祩祪祫祬祮祰\",6,\"祹祻\",4,\"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠\"],\n[\"b640\",\"禓\",6,\"禛\",11,\"禨\",10,\"禴\",4,\"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙\",5,\"秠秡秢秥秨秪\"],\n[\"b680\",\"秬秮秱\",6,\"秹秺秼秾秿稁稄稅稇稈稉稊稌稏\",4,\"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二\"],\n[\"b740\",\"稝稟稡稢稤\",14,\"稴稵稶稸稺稾穀\",5,\"穇\",9,\"穒\",4,\"穘\",16],\n[\"b780\",\"穩\",6,\"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服\"],\n[\"b840\",\"窣窤窧窩窪窫窮\",4,\"窴\",10,\"竀\",10,\"竌\",9,\"竗竘竚竛竜竝竡竢竤竧\",5,\"竮竰竱竲竳\"],\n[\"b880\",\"竴\",4,\"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹\"],\n[\"b940\",\"笯笰笲笴笵笶笷笹笻笽笿\",5,\"筆筈筊筍筎筓筕筗筙筜筞筟筡筣\",10,\"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆\",6,\"箎箏\"],\n[\"b980\",\"箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹\",7,\"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈\"],\n[\"ba40\",\"篅篈築篊篋篍篎篏篐篒篔\",4,\"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲\",4,\"篸篹篺篻篽篿\",7,\"簈簉簊簍簎簐\",5,\"簗簘簙\"],\n[\"ba80\",\"簚\",4,\"簠\",5,\"簨簩簫\",12,\"簹\",5,\"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖\"],\n[\"bb40\",\"籃\",9,\"籎\",36,\"籵\",5,\"籾\",9],\n[\"bb80\",\"粈粊\",6,\"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴\",4,\"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕\"],\n[\"bc40\",\"粿糀糂糃糄糆糉糋糎\",6,\"糘糚糛糝糞糡\",6,\"糩\",5,\"糰\",7,\"糹糺糼\",13,\"紋\",5],\n[\"bc80\",\"紑\",14,\"紡紣紤紥紦紨紩紪紬紭紮細\",6,\"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件\"],\n[\"bd40\",\"紷\",54,\"絯\",7],\n[\"bd80\",\"絸\",32,\"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸\"],\n[\"be40\",\"継\",12,\"綧\",6,\"綯\",42],\n[\"be80\",\"線\",32,\"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻\"],\n[\"bf40\",\"緻\",62],\n[\"bf80\",\"縺縼\",4,\"繂\",4,\"繈\",21,\"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀\"],\n[\"c040\",\"繞\",35,\"纃\",23,\"纜纝纞\"],\n[\"c080\",\"纮纴纻纼绖绤绬绹缊缐缞缷缹缻\",6,\"罃罆\",9,\"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐\"],\n[\"c140\",\"罖罙罛罜罝罞罠罣\",4,\"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂\",7,\"羋羍羏\",4,\"羕\",4,\"羛羜羠羢羣羥羦羨\",6,\"羱\"],\n[\"c180\",\"羳\",4,\"羺羻羾翀翂翃翄翆翇翈翉翋翍翏\",4,\"翖翗翙\",5,\"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿\"],\n[\"c240\",\"翤翧翨翪翫翬翭翯翲翴\",6,\"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫\",5,\"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗\"],\n[\"c280\",\"聙聛\",13,\"聫\",5,\"聲\",11,\"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫\"],\n[\"c340\",\"聾肁肂肅肈肊肍\",5,\"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇\",4,\"胏\",6,\"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋\"],\n[\"c380\",\"脌脕脗脙脛脜脝脟\",12,\"脭脮脰脳脴脵脷脹\",4,\"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸\"],\n[\"c440\",\"腀\",5,\"腇腉腍腎腏腒腖腗腘腛\",4,\"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃\",4,\"膉膋膌膍膎膐膒\",5,\"膙膚膞\",4,\"膤膥\"],\n[\"c480\",\"膧膩膫\",7,\"膴\",5,\"膼膽膾膿臄臅臇臈臉臋臍\",6,\"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁\"],\n[\"c540\",\"臔\",14,\"臤臥臦臨臩臫臮\",4,\"臵\",5,\"臽臿舃與\",4,\"舎舏舑舓舕\",5,\"舝舠舤舥舦舧舩舮舲舺舼舽舿\"],\n[\"c580\",\"艀艁艂艃艅艆艈艊艌艍艎艐\",7,\"艙艛艜艝艞艠\",7,\"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗\"],\n[\"c640\",\"艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸\"],\n[\"c680\",\"苺苼\",4,\"茊茋茍茐茒茓茖茘茙茝\",9,\"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐\"],\n[\"c740\",\"茾茿荁荂荄荅荈荊\",4,\"荓荕\",4,\"荝荢荰\",6,\"荹荺荾\",6,\"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡\",6,\"莬莭莮\"],\n[\"c780\",\"莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠\"],\n[\"c840\",\"菮華菳\",4,\"菺菻菼菾菿萀萂萅萇萈萉萊萐萒\",5,\"萙萚萛萞\",5,\"萩\",7,\"萲\",5,\"萹萺萻萾\",7,\"葇葈葉\"],\n[\"c880\",\"葊\",6,\"葒\",4,\"葘葝葞葟葠葢葤\",4,\"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁\"],\n[\"c940\",\"葽\",4,\"蒃蒄蒅蒆蒊蒍蒏\",7,\"蒘蒚蒛蒝蒞蒟蒠蒢\",12,\"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗\"],\n[\"c980\",\"蓘\",4,\"蓞蓡蓢蓤蓧\",4,\"蓭蓮蓯蓱\",10,\"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳\"],\n[\"ca40\",\"蔃\",8,\"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢\",8,\"蔭\",9,\"蔾\",4,\"蕄蕅蕆蕇蕋\",10],\n[\"ca80\",\"蕗蕘蕚蕛蕜蕝蕟\",4,\"蕥蕦蕧蕩\",8,\"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱\"],\n[\"cb40\",\"薂薃薆薈\",6,\"薐\",10,\"薝\",6,\"薥薦薧薩薫薬薭薱\",5,\"薸薺\",6,\"藂\",6,\"藊\",4,\"藑藒\"],\n[\"cb80\",\"藔藖\",5,\"藝\",6,\"藥藦藧藨藪\",14,\"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔\"],\n[\"cc40\",\"藹藺藼藽藾蘀\",4,\"蘆\",10,\"蘒蘓蘔蘕蘗\",15,\"蘨蘪\",13,\"蘹蘺蘻蘽蘾蘿虀\"],\n[\"cc80\",\"虁\",11,\"虒虓處\",4,\"虛虜虝號虠虡虣\",7,\"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃\"],\n[\"cd40\",\"虭虯虰虲\",6,\"蚃\",6,\"蚎\",4,\"蚔蚖\",5,\"蚞\",4,\"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻\",4,\"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜\"],\n[\"cd80\",\"蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威\"],\n[\"ce40\",\"蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀\",6,\"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚\",5,\"蝡蝢蝦\",7,\"蝯蝱蝲蝳蝵\"],\n[\"ce80\",\"蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎\",4,\"螔螕螖螘\",6,\"螠\",4,\"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺\"],\n[\"cf40\",\"螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁\",4,\"蟇蟈蟉蟌\",4,\"蟔\",6,\"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯\",9],\n[\"cf80\",\"蟺蟻蟼蟽蟿蠀蠁蠂蠄\",5,\"蠋\",7,\"蠔蠗蠘蠙蠚蠜\",4,\"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓\"],\n[\"d040\",\"蠤\",13,\"蠳\",5,\"蠺蠻蠽蠾蠿衁衂衃衆\",5,\"衎\",5,\"衕衖衘衚\",6,\"衦衧衪衭衯衱衳衴衵衶衸衹衺\"],\n[\"d080\",\"衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗\",4,\"袝\",4,\"袣袥\",5,\"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄\"],\n[\"d140\",\"袬袮袯袰袲\",4,\"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚\",4,\"裠裡裦裧裩\",6,\"裲裵裶裷裺裻製裿褀褁褃\",5],\n[\"d180\",\"褉褋\",4,\"褑褔\",4,\"褜\",4,\"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶\"],\n[\"d240\",\"褸\",8,\"襂襃襅\",24,\"襠\",5,\"襧\",19,\"襼\"],\n[\"d280\",\"襽襾覀覂覄覅覇\",26,\"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐\"],\n[\"d340\",\"覢\",30,\"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴\",6],\n[\"d380\",\"觻\",4,\"訁\",5,\"計\",21,\"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉\"],\n[\"d440\",\"訞\",31,\"訿\",8,\"詉\",21],\n[\"d480\",\"詟\",25,\"詺\",6,\"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧\"],\n[\"d540\",\"誁\",7,\"誋\",7,\"誔\",46],\n[\"d580\",\"諃\",32,\"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政\"],\n[\"d640\",\"諤\",34,\"謈\",27],\n[\"d680\",\"謤謥謧\",30,\"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑\"],\n[\"d740\",\"譆\",31,\"譧\",4,\"譭\",25],\n[\"d780\",\"讇\",24,\"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座\"],\n[\"d840\",\"谸\",8,\"豂豃豄豅豈豊豋豍\",7,\"豖豗豘豙豛\",5,\"豣\",6,\"豬\",6,\"豴豵豶豷豻\",6,\"貃貄貆貇\"],\n[\"d880\",\"貈貋貍\",6,\"貕貖貗貙\",20,\"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝\"],\n[\"d940\",\"貮\",62],\n[\"d980\",\"賭\",32,\"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼\"],\n[\"da40\",\"贎\",14,\"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸\",8,\"趂趃趆趇趈趉趌\",4,\"趒趓趕\",9,\"趠趡\"],\n[\"da80\",\"趢趤\",12,\"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺\"],\n[\"db40\",\"跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾\",6,\"踆踇踈踋踍踎踐踑踒踓踕\",7,\"踠踡踤\",4,\"踫踭踰踲踳踴踶踷踸踻踼踾\"],\n[\"db80\",\"踿蹃蹅蹆蹌\",4,\"蹓\",5,\"蹚\",11,\"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝\"],\n[\"dc40\",\"蹳蹵蹷\",4,\"蹽蹾躀躂躃躄躆躈\",6,\"躑躒躓躕\",6,\"躝躟\",11,\"躭躮躰躱躳\",6,\"躻\",7],\n[\"dc80\",\"軃\",10,\"軏\",21,\"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥\"],\n[\"dd40\",\"軥\",62],\n[\"dd80\",\"輤\",32,\"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺\"],\n[\"de40\",\"轅\",32,\"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆\"],\n[\"de80\",\"迉\",4,\"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖\"],\n[\"df40\",\"這逜連逤逥逧\",5,\"逰\",4,\"逷逹逺逽逿遀遃遅遆遈\",4,\"過達違遖遙遚遜\",5,\"遤遦遧適遪遫遬遯\",4,\"遶\",6,\"遾邁\"],\n[\"df80\",\"還邅邆邇邉邊邌\",4,\"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼\"],\n[\"e040\",\"郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅\",19,\"鄚鄛鄜\"],\n[\"e080\",\"鄝鄟鄠鄡鄤\",10,\"鄰鄲\",6,\"鄺\",8,\"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼\"],\n[\"e140\",\"酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀\",4,\"醆醈醊醎醏醓\",6,\"醜\",5,\"醤\",5,\"醫醬醰醱醲醳醶醷醸醹醻\"],\n[\"e180\",\"醼\",10,\"釈釋釐釒\",9,\"針\",8,\"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺\"],\n[\"e240\",\"釦\",62],\n[\"e280\",\"鈥\",32,\"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧\",5,\"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂\"],\n[\"e340\",\"鉆\",45,\"鉵\",16],\n[\"e380\",\"銆\",7,\"銏\",24,\"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾\"],\n[\"e440\",\"銨\",5,\"銯\",24,\"鋉\",31],\n[\"e480\",\"鋩\",32,\"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑\"],\n[\"e540\",\"錊\",51,\"錿\",10],\n[\"e580\",\"鍊\",31,\"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣\"],\n[\"e640\",\"鍬\",34,\"鎐\",27],\n[\"e680\",\"鎬\",29,\"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩\"],\n[\"e740\",\"鏎\",7,\"鏗\",54],\n[\"e780\",\"鐎\",32,\"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡\",6,\"缪缫缬缭缯\",4,\"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬\"],\n[\"e840\",\"鐯\",14,\"鐿\",43,\"鑬鑭鑮鑯\"],\n[\"e880\",\"鑰\",20,\"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹\"],\n[\"e940\",\"锧锳锽镃镈镋镕镚镠镮镴镵長\",7,\"門\",42],\n[\"e980\",\"閫\",32,\"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋\"],\n[\"ea40\",\"闌\",27,\"闬闿阇阓阘阛阞阠阣\",6,\"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗\"],\n[\"ea80\",\"陘陙陚陜陝陞陠陣陥陦陫陭\",4,\"陳陸\",12,\"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰\"],\n[\"eb40\",\"隌階隑隒隓隕隖隚際隝\",9,\"隨\",7,\"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖\",9,\"雡\",6,\"雫\"],\n[\"eb80\",\"雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗\",4,\"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻\"],\n[\"ec40\",\"霡\",8,\"霫霬霮霯霱霳\",4,\"霺霻霼霽霿\",18,\"靔靕靗靘靚靜靝靟靣靤靦靧靨靪\",7],\n[\"ec80\",\"靲靵靷\",4,\"靽\",7,\"鞆\",4,\"鞌鞎鞏鞐鞓鞕鞖鞗鞙\",4,\"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐\"],\n[\"ed40\",\"鞞鞟鞡鞢鞤\",6,\"鞬鞮鞰鞱鞳鞵\",46],\n[\"ed80\",\"韤韥韨韮\",4,\"韴韷\",23,\"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨\"],\n[\"ee40\",\"頏\",62],\n[\"ee80\",\"顎\",32,\"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶\",4,\"钼钽钿铄铈\",6,\"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪\"],\n[\"ef40\",\"顯\",5,\"颋颎颒颕颙颣風\",37,\"飏飐飔飖飗飛飜飝飠\",4],\n[\"ef80\",\"飥飦飩\",30,\"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒\",4,\"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤\",8,\"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔\"],\n[\"f040\",\"餈\",4,\"餎餏餑\",28,\"餯\",26],\n[\"f080\",\"饊\",9,\"饖\",12,\"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨\",4,\"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦\",6,\"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙\"],\n[\"f140\",\"馌馎馚\",10,\"馦馧馩\",47],\n[\"f180\",\"駙\",32,\"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃\"],\n[\"f240\",\"駺\",62],\n[\"f280\",\"騹\",32,\"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒\"],\n[\"f340\",\"驚\",17,\"驲骃骉骍骎骔骕骙骦骩\",6,\"骲骳骴骵骹骻骽骾骿髃髄髆\",4,\"髍髎髏髐髒體髕髖髗髙髚髛髜\"],\n[\"f380\",\"髝髞髠髢髣髤髥髧髨髩髪髬髮髰\",8,\"髺髼\",6,\"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋\"],\n[\"f440\",\"鬇鬉\",5,\"鬐鬑鬒鬔\",10,\"鬠鬡鬢鬤\",10,\"鬰鬱鬳\",7,\"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕\",5],\n[\"f480\",\"魛\",32,\"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤\"],\n[\"f540\",\"魼\",62],\n[\"f580\",\"鮻\",32,\"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜\"],\n[\"f640\",\"鯜\",62],\n[\"f680\",\"鰛\",32,\"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅\",5,\"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞\",5,\"鲥\",4,\"鲫鲭鲮鲰\",7,\"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋\"],\n[\"f740\",\"鰼\",62],\n[\"f780\",\"鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾\",4,\"鳈鳉鳑鳒鳚鳛鳠鳡鳌\",4,\"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄\"],\n[\"f840\",\"鳣\",62],\n[\"f880\",\"鴢\",32],\n[\"f940\",\"鵃\",62],\n[\"f980\",\"鶂\",32],\n[\"fa40\",\"鶣\",62],\n[\"fa80\",\"鷢\",32],\n[\"fb40\",\"鸃\",27,\"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴\",9,\"麀\"],\n[\"fb80\",\"麁麃麄麅麆麉麊麌\",5,\"麔\",8,\"麞麠\",5,\"麧麨麩麪\"],\n[\"fc40\",\"麫\",8,\"麵麶麷麹麺麼麿\",4,\"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰\",8,\"黺黽黿\",6],\n[\"fc80\",\"鼆\",4,\"鼌鼏鼑鼒鼔鼕鼖鼘鼚\",5,\"鼡鼣\",8,\"鼭鼮鼰鼱\"],\n[\"fd40\",\"鼲\",4,\"鼸鼺鼼鼿\",4,\"齅\",10,\"齒\",38],\n[\"fd80\",\"齹\",5,\"龁龂龍\",11,\"龜龝龞龡\",4,\"郎凉秊裏隣\"],\n[\"fe40\",\"兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩\"]\n]\n", "[\n[\"a140\",\"\",62],\n[\"a180\",\"\",32],\n[\"a240\",\"\",62],\n[\"a280\",\"\",32],\n[\"a2ab\",\"\",5],\n[\"a2e3\",\"€\"],\n[\"a2ef\",\"\"],\n[\"a2fd\",\"\"],\n[\"a340\",\"\",62],\n[\"a380\",\"\",31,\"　\"],\n[\"a440\",\"\",62],\n[\"a480\",\"\",32],\n[\"a4f4\",\"\",10],\n[\"a540\",\"\",62],\n[\"a580\",\"\",32],\n[\"a5f7\",\"\",7],\n[\"a640\",\"\",62],\n[\"a680\",\"\",32],\n[\"a6b9\",\"\",7],\n[\"a6d9\",\"\",6],\n[\"a6ec\",\"\"],\n[\"a6f3\",\"\"],\n[\"a6f6\",\"\",8],\n[\"a740\",\"\",62],\n[\"a780\",\"\",32],\n[\"a7c2\",\"\",14],\n[\"a7f2\",\"\",12],\n[\"a896\",\"\",10],\n[\"a8bc\",\"\"],\n[\"a8bf\",\"ǹ\"],\n[\"a8c1\",\"\"],\n[\"a8ea\",\"\",20],\n[\"a958\",\"\"],\n[\"a95b\",\"\"],\n[\"a95d\",\"\"],\n[\"a989\",\"〾⿰\",11],\n[\"a997\",\"\",12],\n[\"a9f0\",\"\",14],\n[\"aaa1\",\"\",93],\n[\"aba1\",\"\",93],\n[\"aca1\",\"\",93],\n[\"ada1\",\"\",93],\n[\"aea1\",\"\",93],\n[\"afa1\",\"\",93],\n[\"d7fa\",\"\",4],\n[\"f8a1\",\"\",93],\n[\"f9a1\",\"\",93],\n[\"faa1\",\"\",93],\n[\"fba1\",\"\",93],\n[\"fca1\",\"\",93],\n[\"fda1\",\"\",93],\n[\"fe50\",\"⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌\"],\n[\"fe80\",\"䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓\",6,\"䶮\",93]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"갂갃갅갆갋\",4,\"갘갞갟갡갢갣갥\",6,\"갮갲갳갴\"],\n[\"8161\",\"갵갶갷갺갻갽갾갿걁\",9,\"걌걎\",5,\"걕\"],\n[\"8181\",\"걖걗걙걚걛걝\",18,\"걲걳걵걶걹걻\",4,\"겂겇겈겍겎겏겑겒겓겕\",6,\"겞겢\",5,\"겫겭겮겱\",6,\"겺겾겿곀곂곃곅곆곇곉곊곋곍\",7,\"곖곘\",7,\"곢곣곥곦곩곫곭곮곲곴곷\",4,\"곾곿괁괂괃괅괇\",4,\"괎괐괒괓\"],\n[\"8241\",\"괔괕괖괗괙괚괛괝괞괟괡\",7,\"괪괫괮\",5],\n[\"8261\",\"괶괷괹괺괻괽\",6,\"굆굈굊\",5,\"굑굒굓굕굖굗\"],\n[\"8281\",\"굙\",7,\"굢굤\",7,\"굮굯굱굲굷굸굹굺굾궀궃\",4,\"궊궋궍궎궏궑\",10,\"궞\",5,\"궥\",17,\"궸\",7,\"귂귃귅귆귇귉\",6,\"귒귔\",7,\"귝귞귟귡귢귣귥\",18],\n[\"8341\",\"귺귻귽귾긂\",5,\"긊긌긎\",5,\"긕\",7],\n[\"8361\",\"긝\",18,\"긲긳긵긶긹긻긼\"],\n[\"8381\",\"긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗\",4,\"깞깢깣깤깦깧깪깫깭깮깯깱\",6,\"깺깾\",5,\"꺆\",5,\"꺍\",46,\"꺿껁껂껃껅\",6,\"껎껒\",5,\"껚껛껝\",8],\n[\"8441\",\"껦껧껩껪껬껮\",5,\"껵껶껷껹껺껻껽\",8],\n[\"8461\",\"꼆꼉꼊꼋꼌꼎꼏꼑\",18],\n[\"8481\",\"꼤\",7,\"꼮꼯꼱꼳꼵\",6,\"꼾꽀꽄꽅꽆꽇꽊\",5,\"꽑\",10,\"꽞\",5,\"꽦\",18,\"꽺\",5,\"꾁꾂꾃꾅꾆꾇꾉\",6,\"꾒꾓꾔꾖\",5,\"꾝\",26,\"꾺꾻꾽꾾\"],\n[\"8541\",\"꾿꿁\",5,\"꿊꿌꿏\",4,\"꿕\",6,\"꿝\",4],\n[\"8561\",\"꿢\",5,\"꿪\",5,\"꿲꿳꿵꿶꿷꿹\",6,\"뀂뀃\"],\n[\"8581\",\"뀅\",6,\"뀍뀎뀏뀑뀒뀓뀕\",6,\"뀞\",9,\"뀩\",26,\"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞\",29,\"끾끿낁낂낃낅\",6,\"낎낐낒\",5,\"낛낝낞낣낤\"],\n[\"8641\",\"낥낦낧낪낰낲낶낷낹낺낻낽\",6,\"냆냊\",5,\"냒\"],\n[\"8661\",\"냓냕냖냗냙\",6,\"냡냢냣냤냦\",10],\n[\"8681\",\"냱\",22,\"넊넍넎넏넑넔넕넖넗넚넞\",4,\"넦넧넩넪넫넭\",6,\"넶넺\",5,\"녂녃녅녆녇녉\",6,\"녒녓녖녗녙녚녛녝녞녟녡\",22,\"녺녻녽녾녿놁놃\",4,\"놊놌놎놏놐놑놕놖놗놙놚놛놝\"],\n[\"8741\",\"놞\",9,\"놩\",15],\n[\"8761\",\"놹\",18,\"뇍뇎뇏뇑뇒뇓뇕\"],\n[\"8781\",\"뇖\",5,\"뇞뇠\",7,\"뇪뇫뇭뇮뇯뇱\",7,\"뇺뇼뇾\",5,\"눆눇눉눊눍\",6,\"눖눘눚\",5,\"눡\",18,\"눵\",6,\"눽\",26,\"뉙뉚뉛뉝뉞뉟뉡\",6,\"뉪\",4],\n[\"8841\",\"뉯\",4,\"뉶\",5,\"뉽\",6,\"늆늇늈늊\",4],\n[\"8861\",\"늏늒늓늕늖늗늛\",4,\"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷\"],\n[\"8881\",\"늸\",15,\"닊닋닍닎닏닑닓\",4,\"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉\",6,\"댒댖\",5,\"댝\",54,\"덗덙덚덝덠덡덢덣\"],\n[\"8941\",\"덦덨덪덬덭덯덲덳덵덶덷덹\",6,\"뎂뎆\",5,\"뎍\"],\n[\"8961\",\"뎎뎏뎑뎒뎓뎕\",10,\"뎢\",5,\"뎩뎪뎫뎭\"],\n[\"8981\",\"뎮\",21,\"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩\",18,\"돽\",18,\"됑\",6,\"됙됚됛됝됞됟됡\",6,\"됪됬\",7,\"됵\",15],\n[\"8a41\",\"둅\",10,\"둒둓둕둖둗둙\",6,\"둢둤둦\"],\n[\"8a61\",\"둧\",4,\"둭\",18,\"뒁뒂\"],\n[\"8a81\",\"뒃\",4,\"뒉\",19,\"뒞\",5,\"뒥뒦뒧뒩뒪뒫뒭\",7,\"뒶뒸뒺\",5,\"듁듂듃듅듆듇듉\",6,\"듑듒듓듔듖\",5,\"듞듟듡듢듥듧\",4,\"듮듰듲\",5,\"듹\",26,\"딖딗딙딚딝\"],\n[\"8b41\",\"딞\",5,\"딦딫\",4,\"딲딳딵딶딷딹\",6,\"땂땆\"],\n[\"8b61\",\"땇땈땉땊땎땏땑땒땓땕\",6,\"땞땢\",8],\n[\"8b81\",\"땫\",52,\"떢떣떥떦떧떩떬떭떮떯떲떶\",4,\"떾떿뗁뗂뗃뗅\",6,\"뗎뗒\",5,\"뗙\",18,\"뗭\",18],\n[\"8c41\",\"똀\",15,\"똒똓똕똖똗똙\",4],\n[\"8c61\",\"똞\",6,\"똦\",5,\"똭\",6,\"똵\",5],\n[\"8c81\",\"똻\",12,\"뙉\",26,\"뙥뙦뙧뙩\",50,\"뚞뚟뚡뚢뚣뚥\",5,\"뚭뚮뚯뚰뚲\",16],\n[\"8d41\",\"뛃\",16,\"뛕\",8],\n[\"8d61\",\"뛞\",17,\"뛱뛲뛳뛵뛶뛷뛹뛺\"],\n[\"8d81\",\"뛻\",4,\"뜂뜃뜄뜆\",33,\"뜪뜫뜭뜮뜱\",6,\"뜺뜼\",7,\"띅띆띇띉띊띋띍\",6,\"띖\",9,\"띡띢띣띥띦띧띩\",6,\"띲띴띶\",5,\"띾띿랁랂랃랅\",6,\"랎랓랔랕랚랛랝랞\"],\n[\"8e41\",\"랟랡\",6,\"랪랮\",5,\"랶랷랹\",8],\n[\"8e61\",\"럂\",4,\"럈럊\",19],\n[\"8e81\",\"럞\",13,\"럮럯럱럲럳럵\",6,\"럾렂\",4,\"렊렋렍렎렏렑\",6,\"렚렜렞\",5,\"렦렧렩렪렫렭\",6,\"렶렺\",5,\"롁롂롃롅\",11,\"롒롔\",7,\"롞롟롡롢롣롥\",6,\"롮롰롲\",5,\"롹롺롻롽\",7],\n[\"8f41\",\"뢅\",7,\"뢎\",17],\n[\"8f61\",\"뢠\",7,\"뢩\",6,\"뢱뢲뢳뢵뢶뢷뢹\",4],\n[\"8f81\",\"뢾뢿룂룄룆\",5,\"룍룎룏룑룒룓룕\",7,\"룞룠룢\",5,\"룪룫룭룮룯룱\",6,\"룺룼룾\",5,\"뤅\",18,\"뤙\",6,\"뤡\",26,\"뤾뤿륁륂륃륅\",6,\"륍륎륐륒\",5],\n[\"9041\",\"륚륛륝륞륟륡\",6,\"륪륬륮\",5,\"륶륷륹륺륻륽\"],\n[\"9061\",\"륾\",5,\"릆릈릋릌릏\",15],\n[\"9081\",\"릟\",12,\"릮릯릱릲릳릵\",6,\"릾맀맂\",5,\"맊맋맍맓\",4,\"맚맜맟맠맢맦맧맩맪맫맭\",6,\"맶맻\",4,\"먂\",5,\"먉\",11,\"먖\",33,\"먺먻먽먾먿멁멃멄멅멆\"],\n[\"9141\",\"멇멊멌멏멐멑멒멖멗멙멚멛멝\",6,\"멦멪\",5],\n[\"9161\",\"멲멳멵멶멷멹\",9,\"몆몈몉몊몋몍\",5],\n[\"9181\",\"몓\",20,\"몪몭몮몯몱몳\",4,\"몺몼몾\",5,\"뫅뫆뫇뫉\",14,\"뫚\",33,\"뫽뫾뫿묁묂묃묅\",7,\"묎묐묒\",5,\"묙묚묛묝묞묟묡\",6],\n[\"9241\",\"묨묪묬\",7,\"묷묹묺묿\",4,\"뭆뭈뭊뭋뭌뭎뭑뭒\"],\n[\"9261\",\"뭓뭕뭖뭗뭙\",7,\"뭢뭤\",7,\"뭭\",4],\n[\"9281\",\"뭲\",21,\"뮉뮊뮋뮍뮎뮏뮑\",18,\"뮥뮦뮧뮩뮪뮫뮭\",6,\"뮵뮶뮸\",7,\"믁믂믃믅믆믇믉\",6,\"믑믒믔\",35,\"믺믻믽믾밁\"],\n[\"9341\",\"밃\",4,\"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵\"],\n[\"9361\",\"밶밷밹\",6,\"뱂뱆뱇뱈뱊뱋뱎뱏뱑\",8],\n[\"9381\",\"뱚뱛뱜뱞\",37,\"벆벇벉벊벍벏\",4,\"벖벘벛\",4,\"벢벣벥벦벩\",6,\"벲벶\",5,\"벾벿볁볂볃볅\",7,\"볎볒볓볔볖볗볙볚볛볝\",22,\"볷볹볺볻볽\"],\n[\"9441\",\"볾\",5,\"봆봈봊\",5,\"봑봒봓봕\",8],\n[\"9461\",\"봞\",5,\"봥\",6,\"봭\",12],\n[\"9481\",\"봺\",5,\"뵁\",6,\"뵊뵋뵍뵎뵏뵑\",6,\"뵚\",9,\"뵥뵦뵧뵩\",22,\"붂붃붅붆붋\",4,\"붒붔붖붗붘붛붝\",6,\"붥\",10,\"붱\",6,\"붹\",24],\n[\"9541\",\"뷒뷓뷖뷗뷙뷚뷛뷝\",11,\"뷪\",5,\"뷱\"],\n[\"9561\",\"뷲뷳뷵뷶뷷뷹\",6,\"븁븂븄븆\",5,\"븎븏븑븒븓\"],\n[\"9581\",\"븕\",6,\"븞븠\",35,\"빆빇빉빊빋빍빏\",4,\"빖빘빜빝빞빟빢빣빥빦빧빩빫\",4,\"빲빶\",4,\"빾빿뺁뺂뺃뺅\",6,\"뺎뺒\",5,\"뺚\",13,\"뺩\",14],\n[\"9641\",\"뺸\",23,\"뻒뻓\"],\n[\"9661\",\"뻕뻖뻙\",6,\"뻡뻢뻦\",5,\"뻭\",8],\n[\"9681\",\"뻶\",10,\"뼂\",5,\"뼊\",13,\"뼚뼞\",33,\"뽂뽃뽅뽆뽇뽉\",6,\"뽒뽓뽔뽖\",44],\n[\"9741\",\"뾃\",16,\"뾕\",8],\n[\"9761\",\"뾞\",17,\"뾱\",7],\n[\"9781\",\"뾹\",11,\"뿆\",5,\"뿎뿏뿑뿒뿓뿕\",6,\"뿝뿞뿠뿢\",89,\"쀽쀾쀿\"],\n[\"9841\",\"쁀\",16,\"쁒\",5,\"쁙쁚쁛\"],\n[\"9861\",\"쁝쁞쁟쁡\",6,\"쁪\",15],\n[\"9881\",\"쁺\",21,\"삒삓삕삖삗삙\",6,\"삢삤삦\",5,\"삮삱삲삷\",4,\"삾샂샃샄샆샇샊샋샍샎샏샑\",6,\"샚샞\",5,\"샦샧샩샪샫샭\",6,\"샶샸샺\",5,\"섁섂섃섅섆섇섉\",6,\"섑섒섓섔섖\",5,\"섡섢섥섨섩섪섫섮\"],\n[\"9941\",\"섲섳섴섵섷섺섻섽섾섿셁\",6,\"셊셎\",5,\"셖셗\"],\n[\"9961\",\"셙셚셛셝\",6,\"셦셪\",5,\"셱셲셳셵셶셷셹셺셻\"],\n[\"9981\",\"셼\",8,\"솆\",5,\"솏솑솒솓솕솗\",4,\"솞솠솢솣솤솦솧솪솫솭솮솯솱\",11,\"솾\",5,\"쇅쇆쇇쇉쇊쇋쇍\",6,\"쇕쇖쇙\",6,\"쇡쇢쇣쇥쇦쇧쇩\",6,\"쇲쇴\",7,\"쇾쇿숁숂숃숅\",6,\"숎숐숒\",5,\"숚숛숝숞숡숢숣\"],\n[\"9a41\",\"숤숥숦숧숪숬숮숰숳숵\",16],\n[\"9a61\",\"쉆쉇쉉\",6,\"쉒쉓쉕쉖쉗쉙\",6,\"쉡쉢쉣쉤쉦\"],\n[\"9a81\",\"쉧\",4,\"쉮쉯쉱쉲쉳쉵\",6,\"쉾슀슂\",5,\"슊\",5,\"슑\",6,\"슙슚슜슞\",5,\"슦슧슩슪슫슮\",5,\"슶슸슺\",33,\"싞싟싡싢싥\",5,\"싮싰싲싳싴싵싷싺싽싾싿쌁\",6,\"쌊쌋쌎쌏\"],\n[\"9b41\",\"쌐쌑쌒쌖쌗쌙쌚쌛쌝\",6,\"쌦쌧쌪\",8],\n[\"9b61\",\"쌳\",17,\"썆\",7],\n[\"9b81\",\"썎\",25,\"썪썫썭썮썯썱썳\",4,\"썺썻썾\",5,\"쎅쎆쎇쎉쎊쎋쎍\",50,\"쏁\",22,\"쏚\"],\n[\"9c41\",\"쏛쏝쏞쏡쏣\",4,\"쏪쏫쏬쏮\",5,\"쏶쏷쏹\",5],\n[\"9c61\",\"쏿\",8,\"쐉\",6,\"쐑\",9],\n[\"9c81\",\"쐛\",8,\"쐥\",6,\"쐭쐮쐯쐱쐲쐳쐵\",6,\"쐾\",9,\"쑉\",26,\"쑦쑧쑩쑪쑫쑭\",6,\"쑶쑷쑸쑺\",5,\"쒁\",18,\"쒕\",6,\"쒝\",12],\n[\"9d41\",\"쒪\",13,\"쒹쒺쒻쒽\",8],\n[\"9d61\",\"쓆\",25],\n[\"9d81\",\"쓠\",8,\"쓪\",5,\"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂\",9,\"씍씎씏씑씒씓씕\",6,\"씝\",10,\"씪씫씭씮씯씱\",6,\"씺씼씾\",5,\"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩\",6,\"앲앶\",5,\"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔\"],\n[\"9e41\",\"얖얙얚얛얝얞얟얡\",7,\"얪\",9,\"얶\"],\n[\"9e61\",\"얷얺얿\",4,\"엋엍엏엒엓엕엖엗엙\",6,\"엢엤엦엧\"],\n[\"9e81\",\"엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑\",6,\"옚옝\",6,\"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉\",6,\"왒왖\",5,\"왞왟왡\",10,\"왭왮왰왲\",5,\"왺왻왽왾왿욁\",6,\"욊욌욎\",5,\"욖욗욙욚욛욝\",6,\"욦\"],\n[\"9f41\",\"욨욪\",5,\"욲욳욵욶욷욻\",4,\"웂웄웆\",5,\"웎\"],\n[\"9f61\",\"웏웑웒웓웕\",6,\"웞웟웢\",5,\"웪웫웭웮웯웱웲\"],\n[\"9f81\",\"웳\",4,\"웺웻웼웾\",5,\"윆윇윉윊윋윍\",6,\"윖윘윚\",5,\"윢윣윥윦윧윩\",6,\"윲윴윶윸윹윺윻윾윿읁읂읃읅\",4,\"읋읎읐읙읚읛읝읞읟읡\",6,\"읩읪읬\",7,\"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛\",4,\"잢잧\",4,\"잮잯잱잲잳잵잶잷\"],\n[\"a041\",\"잸잹잺잻잾쟂\",5,\"쟊쟋쟍쟏쟑\",6,\"쟙쟚쟛쟜\"],\n[\"a061\",\"쟞\",5,\"쟥쟦쟧쟩쟪쟫쟭\",13],\n[\"a081\",\"쟻\",4,\"젂젃젅젆젇젉젋\",4,\"젒젔젗\",4,\"젞젟젡젢젣젥\",6,\"젮젰젲\",5,\"젹젺젻젽젾젿졁\",6,\"졊졋졎\",5,\"졕\",26,\"졲졳졵졶졷졹졻\",4,\"좂좄좈좉좊좎\",5,\"좕\",7,\"좞좠좢좣좤\"],\n[\"a141\",\"좥좦좧좩\",18,\"좾좿죀죁\"],\n[\"a161\",\"죂죃죅죆죇죉죊죋죍\",6,\"죖죘죚\",5,\"죢죣죥\"],\n[\"a181\",\"죦\",14,\"죶\",5,\"죾죿줁줂줃줇\",4,\"줎　、。·‥…¨〃­―∥＼∼‘’“”〔〕〈\",9,\"±×÷≠≤≥∞∴°′″℃Å￠￡￥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨￢\"],\n[\"a241\",\"줐줒\",5,\"줙\",18],\n[\"a261\",\"줭\",6,\"줵\",18],\n[\"a281\",\"쥈\",7,\"쥒쥓쥕쥖쥗쥙\",6,\"쥢쥤\",7,\"쥭쥮쥯⇒⇔∀∃´～ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®\"],\n[\"a341\",\"쥱쥲쥳쥵\",6,\"쥽\",10,\"즊즋즍즎즏\"],\n[\"a361\",\"즑\",6,\"즚즜즞\",16],\n[\"a381\",\"즯\",16,\"짂짃짅짆짉짋\",4,\"짒짔짗짘짛！\",58,\"￦］\",32,\"￣\"],\n[\"a441\",\"짞짟짡짣짥짦짨짩짪짫짮짲\",5,\"짺짻짽짾짿쨁쨂쨃쨄\"],\n[\"a461\",\"쨅쨆쨇쨊쨎\",5,\"쨕쨖쨗쨙\",12],\n[\"a481\",\"쨦쨧쨨쨪\",28,\"ㄱ\",93],\n[\"a541\",\"쩇\",4,\"쩎쩏쩑쩒쩓쩕\",6,\"쩞쩢\",5,\"쩩쩪\"],\n[\"a561\",\"쩫\",17,\"쩾\",5,\"쪅쪆\"],\n[\"a581\",\"쪇\",16,\"쪙\",14,\"ⅰ\",9],\n[\"a5b0\",\"Ⅰ\",9],\n[\"a5c1\",\"Α\",16,\"Σ\",6],\n[\"a5e1\",\"α\",16,\"σ\",6],\n[\"a641\",\"쪨\",19,\"쪾쪿쫁쫂쫃쫅\"],\n[\"a661\",\"쫆\",5,\"쫎쫐쫒쫔쫕쫖쫗쫚\",5,\"쫡\",6],\n[\"a681\",\"쫨쫩쫪쫫쫭\",6,\"쫵\",18,\"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃\",7],\n[\"a741\",\"쬋\",4,\"쬑쬒쬓쬕쬖쬗쬙\",6,\"쬢\",7],\n[\"a761\",\"쬪\",22,\"쭂쭃쭄\"],\n[\"a781\",\"쭅쭆쭇쭊쭋쭍쭎쭏쭑\",6,\"쭚쭛쭜쭞\",5,\"쭥\",7,\"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙\",9,\"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰\",9,\"㎀\",4,\"㎺\",5,\"㎐\",4,\"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆\"],\n[\"a841\",\"쭭\",10,\"쭺\",14],\n[\"a861\",\"쮉\",18,\"쮝\",6],\n[\"a881\",\"쮤\",19,\"쮹\",11,\"ÆÐªĦ\"],\n[\"a8a6\",\"Ĳ\"],\n[\"a8a8\",\"ĿŁØŒºÞŦŊ\"],\n[\"a8b1\",\"㉠\",27,\"ⓐ\",25,\"①\",14,\"½⅓⅔¼¾⅛⅜⅝⅞\"],\n[\"a941\",\"쯅\",14,\"쯕\",10],\n[\"a961\",\"쯠쯡쯢쯣쯥쯦쯨쯪\",18],\n[\"a981\",\"쯽\",14,\"찎찏찑찒찓찕\",6,\"찞찟찠찣찤æđðħıĳĸŀłøœßþŧŋŉ㈀\",27,\"⒜\",25,\"⑴\",14,\"¹²³⁴ⁿ₁₂₃₄\"],\n[\"aa41\",\"찥찦찪찫찭찯찱\",6,\"찺찿\",4,\"챆챇챉챊챋챍챎\"],\n[\"aa61\",\"챏\",4,\"챖챚\",5,\"챡챢챣챥챧챩\",6,\"챱챲\"],\n[\"aa81\",\"챳챴챶\",29,\"ぁ\",82],\n[\"ab41\",\"첔첕첖첗첚첛첝첞첟첡\",6,\"첪첮\",5,\"첶첷첹\"],\n[\"ab61\",\"첺첻첽\",6,\"쳆쳈쳊\",5,\"쳑쳒쳓쳕\",5],\n[\"ab81\",\"쳛\",8,\"쳥\",6,\"쳭쳮쳯쳱\",12,\"ァ\",85],\n[\"ac41\",\"쳾쳿촀촂\",5,\"촊촋촍촎촏촑\",6,\"촚촜촞촟촠\"],\n[\"ac61\",\"촡촢촣촥촦촧촩촪촫촭\",11,\"촺\",4],\n[\"ac81\",\"촿\",28,\"쵝쵞쵟А\",5,\"ЁЖ\",25],\n[\"acd1\",\"а\",5,\"ёж\",25],\n[\"ad41\",\"쵡쵢쵣쵥\",6,\"쵮쵰쵲\",5,\"쵹\",7],\n[\"ad61\",\"춁\",6,\"춉\",10,\"춖춗춙춚춛춝춞춟\"],\n[\"ad81\",\"춠춡춢춣춦춨춪\",5,\"춱\",18,\"췅\"],\n[\"ae41\",\"췆\",5,\"췍췎췏췑\",16],\n[\"ae61\",\"췢\",5,\"췩췪췫췭췮췯췱\",6,\"췺췼췾\",4],\n[\"ae81\",\"츃츅츆츇츉츊츋츍\",6,\"츕츖츗츘츚\",5,\"츢츣츥츦츧츩츪츫\"],\n[\"af41\",\"츬츭츮츯츲츴츶\",19],\n[\"af61\",\"칊\",13,\"칚칛칝칞칢\",5,\"칪칬\"],\n[\"af81\",\"칮\",5,\"칶칷칹칺칻칽\",6,\"캆캈캊\",5,\"캒캓캕캖캗캙\"],\n[\"b041\",\"캚\",5,\"캢캦\",5,\"캮\",12],\n[\"b061\",\"캻\",5,\"컂\",19],\n[\"b081\",\"컖\",13,\"컦컧컩컪컭\",6,\"컶컺\",5,\"가각간갇갈갉갊감\",7,\"같\",4,\"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆\"],\n[\"b141\",\"켂켃켅켆켇켉\",6,\"켒켔켖\",5,\"켝켞켟켡켢켣\"],\n[\"b161\",\"켥\",6,\"켮켲\",5,\"켹\",11],\n[\"b181\",\"콅\",14,\"콖콗콙콚콛콝\",6,\"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸\"],\n[\"b241\",\"콭콮콯콲콳콵콶콷콹\",6,\"쾁쾂쾃쾄쾆\",5,\"쾍\"],\n[\"b261\",\"쾎\",18,\"쾢\",5,\"쾩\"],\n[\"b281\",\"쾪\",5,\"쾱\",18,\"쿅\",6,\"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙\"],\n[\"b341\",\"쿌\",19,\"쿢쿣쿥쿦쿧쿩\"],\n[\"b361\",\"쿪\",5,\"쿲쿴쿶\",5,\"쿽쿾쿿퀁퀂퀃퀅\",5],\n[\"b381\",\"퀋\",5,\"퀒\",5,\"퀙\",19,\"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫\",4,\"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝\"],\n[\"b441\",\"퀮\",5,\"퀶퀷퀹퀺퀻퀽\",6,\"큆큈큊\",5],\n[\"b461\",\"큑큒큓큕큖큗큙\",6,\"큡\",10,\"큮큯\"],\n[\"b481\",\"큱큲큳큵\",6,\"큾큿킀킂\",18,\"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫\",4,\"닳담답닷\",4,\"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥\"],\n[\"b541\",\"킕\",14,\"킦킧킩킪킫킭\",5],\n[\"b561\",\"킳킶킸킺\",5,\"탂탃탅탆탇탊\",5,\"탒탖\",4],\n[\"b581\",\"탛탞탟탡탢탣탥\",6,\"탮탲\",5,\"탹\",11,\"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸\"],\n[\"b641\",\"턅\",7,\"턎\",17],\n[\"b661\",\"턠\",15,\"턲턳턵턶턷턹턻턼턽턾\"],\n[\"b681\",\"턿텂텆\",5,\"텎텏텑텒텓텕\",6,\"텞텠텢\",5,\"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗\"],\n[\"b741\",\"텮\",13,\"텽\",6,\"톅톆톇톉톊\"],\n[\"b761\",\"톋\",20,\"톢톣톥톦톧\"],\n[\"b781\",\"톩\",6,\"톲톴톶톷톸톹톻톽톾톿퇁\",14,\"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩\"],\n[\"b841\",\"퇐\",7,\"퇙\",17],\n[\"b861\",\"퇫\",8,\"퇵퇶퇷퇹\",13],\n[\"b881\",\"툈툊\",5,\"툑\",24,\"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많\",4,\"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼\"],\n[\"b941\",\"툪툫툮툯툱툲툳툵\",6,\"툾퉀퉂\",5,\"퉉퉊퉋퉌\"],\n[\"b961\",\"퉍\",14,\"퉝\",6,\"퉥퉦퉧퉨\"],\n[\"b981\",\"퉩\",22,\"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바\",4,\"받\",4,\"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗\"],\n[\"ba41\",\"튍튎튏튒튓튔튖\",5,\"튝튞튟튡튢튣튥\",6,\"튭\"],\n[\"ba61\",\"튮튯튰튲\",5,\"튺튻튽튾틁틃\",4,\"틊틌\",5],\n[\"ba81\",\"틒틓틕틖틗틙틚틛틝\",6,\"틦\",9,\"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤\"],\n[\"bb41\",\"틻\",4,\"팂팄팆\",5,\"팏팑팒팓팕팗\",4,\"팞팢팣\"],\n[\"bb61\",\"팤팦팧팪팫팭팮팯팱\",6,\"팺팾\",5,\"퍆퍇퍈퍉\"],\n[\"bb81\",\"퍊\",31,\"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤\"],\n[\"bc41\",\"퍪\",17,\"퍾퍿펁펂펃펅펆펇\"],\n[\"bc61\",\"펈펉펊펋펎펒\",5,\"펚펛펝펞펟펡\",6,\"펪펬펮\"],\n[\"bc81\",\"펯\",4,\"펵펶펷펹펺펻펽\",6,\"폆폇폊\",5,\"폑\",5,\"샥샨샬샴샵샷샹섀섄섈섐섕서\",4,\"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭\"],\n[\"bd41\",\"폗폙\",7,\"폢폤\",7,\"폮폯폱폲폳폵폶폷\"],\n[\"bd61\",\"폸폹폺폻폾퐀퐂\",5,\"퐉\",13],\n[\"bd81\",\"퐗\",5,\"퐞\",25,\"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰\"],\n[\"be41\",\"퐸\",7,\"푁푂푃푅\",14],\n[\"be61\",\"푔\",7,\"푝푞푟푡푢푣푥\",7,\"푮푰푱푲\"],\n[\"be81\",\"푳\",4,\"푺푻푽푾풁풃\",4,\"풊풌풎\",5,\"풕\",8,\"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄\",6,\"엌엎\"],\n[\"bf41\",\"풞\",10,\"풪\",14],\n[\"bf61\",\"풹\",18,\"퓍퓎퓏퓑퓒퓓퓕\"],\n[\"bf81\",\"퓖\",5,\"퓝퓞퓠\",7,\"퓩퓪퓫퓭퓮퓯퓱\",6,\"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염\",5,\"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨\"],\n[\"c041\",\"퓾\",5,\"픅픆픇픉픊픋픍\",6,\"픖픘\",5],\n[\"c061\",\"픞\",25],\n[\"c081\",\"픸픹픺픻픾픿핁핂핃핅\",6,\"핎핐핒\",5,\"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응\",7,\"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊\"],\n[\"c141\",\"핤핦핧핪핬핮\",5,\"핶핷핹핺핻핽\",6,\"햆햊햋\"],\n[\"c161\",\"햌햍햎햏햑\",19,\"햦햧\"],\n[\"c181\",\"햨\",31,\"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓\"],\n[\"c241\",\"헊헋헍헎헏헑헓\",4,\"헚헜헞\",5,\"헦헧헩헪헫헭헮\"],\n[\"c261\",\"헯\",4,\"헶헸헺\",5,\"혂혃혅혆혇혉\",6,\"혒\"],\n[\"c281\",\"혖\",5,\"혝혞혟혡혢혣혥\",7,\"혮\",9,\"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻\"],\n[\"c341\",\"혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝\",4],\n[\"c361\",\"홢\",4,\"홨홪\",5,\"홲홳홵\",11],\n[\"c381\",\"횁횂횄횆\",5,\"횎횏횑횒횓횕\",7,\"횞횠횢\",5,\"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층\"],\n[\"c441\",\"횫횭횮횯횱\",7,\"횺횼\",7,\"훆훇훉훊훋\"],\n[\"c461\",\"훍훎훏훐훒훓훕훖훘훚\",5,\"훡훢훣훥훦훧훩\",4],\n[\"c481\",\"훮훯훱훲훳훴훶\",5,\"훾훿휁휂휃휅\",11,\"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼\"],\n[\"c541\",\"휕휖휗휚휛휝휞휟휡\",6,\"휪휬휮\",5,\"휶휷휹\"],\n[\"c561\",\"휺휻휽\",6,\"흅흆흈흊\",5,\"흒흓흕흚\",4],\n[\"c581\",\"흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵\",6,\"흾흿힀힂\",5,\"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜\"],\n[\"c641\",\"힍힎힏힑\",6,\"힚힜힞\",5],\n[\"c6a1\",\"퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁\"],\n[\"c7a1\",\"퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠\"],\n[\"c8a1\",\"혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝\"],\n[\"caa1\",\"伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕\"],\n[\"cba1\",\"匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢\"],\n[\"cca1\",\"瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械\"],\n[\"cda1\",\"棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜\"],\n[\"cea1\",\"科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾\"],\n[\"cfa1\",\"區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴\"],\n[\"d0a1\",\"鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣\"],\n[\"d1a1\",\"朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩\",5,\"那樂\",4,\"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉\"],\n[\"d2a1\",\"納臘蠟衲囊娘廊\",4,\"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧\",5,\"駑魯\",10,\"濃籠聾膿農惱牢磊腦賂雷尿壘\",7,\"嫩訥杻紐勒\",5,\"能菱陵尼泥匿溺多茶\"],\n[\"d3a1\",\"丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃\"],\n[\"d4a1\",\"棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅\"],\n[\"d5a1\",\"蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣\"],\n[\"d6a1\",\"煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼\"],\n[\"d7a1\",\"遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬\"],\n[\"d8a1\",\"立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅\"],\n[\"d9a1\",\"蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文\"],\n[\"daa1\",\"汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑\"],\n[\"dba1\",\"發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖\"],\n[\"dca1\",\"碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦\"],\n[\"dda1\",\"孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥\"],\n[\"dea1\",\"脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索\"],\n[\"dfa1\",\"傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署\"],\n[\"e0a1\",\"胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬\"],\n[\"e1a1\",\"聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁\"],\n[\"e2a1\",\"戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧\"],\n[\"e3a1\",\"嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁\"],\n[\"e4a1\",\"沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額\"],\n[\"e5a1\",\"櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬\"],\n[\"e6a1\",\"旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒\"],\n[\"e7a1\",\"簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳\"],\n[\"e8a1\",\"烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療\"],\n[\"e9a1\",\"窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓\"],\n[\"eaa1\",\"運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜\"],\n[\"eba1\",\"濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼\"],\n[\"eca1\",\"議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄\"],\n[\"eda1\",\"立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長\"],\n[\"eea1\",\"障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱\"],\n[\"efa1\",\"煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖\"],\n[\"f0a1\",\"靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫\"],\n[\"f1a1\",\"踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只\"],\n[\"f2a1\",\"咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯\"],\n[\"f3a1\",\"鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策\"],\n[\"f4a1\",\"責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢\"],\n[\"f5a1\",\"椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃\"],\n[\"f6a1\",\"贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託\"],\n[\"f7a1\",\"鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑\"],\n[\"f8a1\",\"阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃\"],\n[\"f9a1\",\"品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航\"],\n[\"faa1\",\"行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型\"],\n[\"fba1\",\"形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵\"],\n[\"fca1\",\"禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆\"],\n[\"fda1\",\"爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"　，、。．‧；：？！︰…‥﹐﹑﹒·﹔﹕﹖﹗｜–︱—︳╴︴﹏（）︵︶｛｝︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚\"],\n[\"a1a1\",\"﹛﹜﹝﹞‘’“”〝〞‵′＃＆＊※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯￣＿ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡＋－×÷±√＜＞＝≦≧≠∞≒≡﹢\",4,\"～∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣／\"],\n[\"a240\",\"＼∕﹨＄￥〒￠￡％＠℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁\",7,\"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭\"],\n[\"a2a1\",\"╮╰╯═╞╪╡◢◣◥◤╱╲╳０\",9,\"Ⅰ\",9,\"〡\",8,\"十卄卅Ａ\",25,\"ａ\",21],\n[\"a340\",\"ｗｘｙｚΑ\",16,\"Σ\",6,\"α\",16,\"σ\",6,\"ㄅ\",10],\n[\"a3a1\",\"ㄐ\",25,\"˙ˉˊˇˋ\"],\n[\"a3e1\",\"€\"],\n[\"a440\",\"一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才\"],\n[\"a4a1\",\"丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙\"],\n[\"a540\",\"世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外\"],\n[\"a5a1\",\"央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全\"],\n[\"a640\",\"共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年\"],\n[\"a6a1\",\"式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣\"],\n[\"a740\",\"作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍\"],\n[\"a7a1\",\"均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠\"],\n[\"a840\",\"杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒\"],\n[\"a8a1\",\"芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵\"],\n[\"a940\",\"咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居\"],\n[\"a9a1\",\"屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊\"],\n[\"aa40\",\"昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠\"],\n[\"aaa1\",\"炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附\"],\n[\"ab40\",\"陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品\"],\n[\"aba1\",\"哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷\"],\n[\"ac40\",\"拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗\"],\n[\"aca1\",\"活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄\"],\n[\"ad40\",\"耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥\"],\n[\"ada1\",\"迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪\"],\n[\"ae40\",\"哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙\"],\n[\"aea1\",\"恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓\"],\n[\"af40\",\"浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷\"],\n[\"afa1\",\"砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃\"],\n[\"b040\",\"虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡\"],\n[\"b0a1\",\"陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀\"],\n[\"b140\",\"娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽\"],\n[\"b1a1\",\"情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺\"],\n[\"b240\",\"毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶\"],\n[\"b2a1\",\"瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼\"],\n[\"b340\",\"莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途\"],\n[\"b3a1\",\"部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠\"],\n[\"b440\",\"婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍\"],\n[\"b4a1\",\"插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋\"],\n[\"b540\",\"溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘\"],\n[\"b5a1\",\"窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁\"],\n[\"b640\",\"詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑\"],\n[\"b6a1\",\"間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼\"],\n[\"b740\",\"媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業\"],\n[\"b7a1\",\"楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督\"],\n[\"b840\",\"睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫\"],\n[\"b8a1\",\"腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊\"],\n[\"b940\",\"辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴\"],\n[\"b9a1\",\"飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇\"],\n[\"ba40\",\"愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢\"],\n[\"baa1\",\"滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬\"],\n[\"bb40\",\"罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤\"],\n[\"bba1\",\"說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜\"],\n[\"bc40\",\"劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂\"],\n[\"bca1\",\"慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃\"],\n[\"bd40\",\"瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯\"],\n[\"bda1\",\"翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞\"],\n[\"be40\",\"輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉\"],\n[\"bea1\",\"鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡\"],\n[\"bf40\",\"濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊\"],\n[\"bfa1\",\"縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚\"],\n[\"c040\",\"錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇\"],\n[\"c0a1\",\"嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬\"],\n[\"c140\",\"瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪\"],\n[\"c1a1\",\"薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁\"],\n[\"c240\",\"駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘\"],\n[\"c2a1\",\"癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦\"],\n[\"c340\",\"鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸\"],\n[\"c3a1\",\"獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類\"],\n[\"c440\",\"願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼\"],\n[\"c4a1\",\"纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴\"],\n[\"c540\",\"護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬\"],\n[\"c5a1\",\"禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒\"],\n[\"c640\",\"讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲\"],\n[\"c940\",\"乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕\"],\n[\"c9a1\",\"氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋\"],\n[\"ca40\",\"汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘\"],\n[\"caa1\",\"吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇\"],\n[\"cb40\",\"杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓\"],\n[\"cba1\",\"芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢\"],\n[\"cc40\",\"坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋\"],\n[\"cca1\",\"怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲\"],\n[\"cd40\",\"泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺\"],\n[\"cda1\",\"矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏\"],\n[\"ce40\",\"哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛\"],\n[\"cea1\",\"峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺\"],\n[\"cf40\",\"柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂\"],\n[\"cfa1\",\"洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀\"],\n[\"d040\",\"穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪\"],\n[\"d0a1\",\"苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱\"],\n[\"d140\",\"唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧\"],\n[\"d1a1\",\"恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤\"],\n[\"d240\",\"毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸\"],\n[\"d2a1\",\"牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐\"],\n[\"d340\",\"笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢\"],\n[\"d3a1\",\"荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐\"],\n[\"d440\",\"酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅\"],\n[\"d4a1\",\"唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏\"],\n[\"d540\",\"崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟\"],\n[\"d5a1\",\"捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉\"],\n[\"d640\",\"淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏\"],\n[\"d6a1\",\"痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟\"],\n[\"d740\",\"耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷\"],\n[\"d7a1\",\"蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪\"],\n[\"d840\",\"釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷\"],\n[\"d8a1\",\"堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔\"],\n[\"d940\",\"惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒\"],\n[\"d9a1\",\"晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞\"],\n[\"da40\",\"湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖\"],\n[\"daa1\",\"琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥\"],\n[\"db40\",\"罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳\"],\n[\"dba1\",\"菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺\"],\n[\"dc40\",\"軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈\"],\n[\"dca1\",\"隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆\"],\n[\"dd40\",\"媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤\"],\n[\"dda1\",\"搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼\"],\n[\"de40\",\"毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓\"],\n[\"dea1\",\"煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓\"],\n[\"df40\",\"稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯\"],\n[\"dfa1\",\"腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤\"],\n[\"e040\",\"觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿\"],\n[\"e0a1\",\"遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠\"],\n[\"e140\",\"凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠\"],\n[\"e1a1\",\"寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉\"],\n[\"e240\",\"榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊\"],\n[\"e2a1\",\"漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓\"],\n[\"e340\",\"禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞\"],\n[\"e3a1\",\"耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻\"],\n[\"e440\",\"裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍\"],\n[\"e4a1\",\"銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘\"],\n[\"e540\",\"噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉\"],\n[\"e5a1\",\"憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒\"],\n[\"e640\",\"澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙\"],\n[\"e6a1\",\"獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟\"],\n[\"e740\",\"膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢\"],\n[\"e7a1\",\"蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧\"],\n[\"e840\",\"踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓\"],\n[\"e8a1\",\"銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮\"],\n[\"e940\",\"噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺\"],\n[\"e9a1\",\"憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸\"],\n[\"ea40\",\"澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙\"],\n[\"eaa1\",\"瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘\"],\n[\"eb40\",\"蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠\"],\n[\"eba1\",\"諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌\"],\n[\"ec40\",\"錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕\"],\n[\"eca1\",\"魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎\"],\n[\"ed40\",\"檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶\"],\n[\"eda1\",\"瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞\"],\n[\"ee40\",\"蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞\"],\n[\"eea1\",\"謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜\"],\n[\"ef40\",\"鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰\"],\n[\"efa1\",\"鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶\"],\n[\"f040\",\"璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒\"],\n[\"f0a1\",\"臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧\"],\n[\"f140\",\"蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪\"],\n[\"f1a1\",\"鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰\"],\n[\"f240\",\"徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛\"],\n[\"f2a1\",\"礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕\"],\n[\"f340\",\"譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦\"],\n[\"f3a1\",\"鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲\"],\n[\"f440\",\"嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩\"],\n[\"f4a1\",\"禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿\"],\n[\"f540\",\"鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛\"],\n[\"f5a1\",\"鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥\"],\n[\"f640\",\"蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺\"],\n[\"f6a1\",\"騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚\"],\n[\"f740\",\"糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊\"],\n[\"f7a1\",\"驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾\"],\n[\"f840\",\"讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏\"],\n[\"f8a1\",\"齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚\"],\n[\"f940\",\"纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊\"],\n[\"f9a1\",\"龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓\"]\n]\n", "[\n[\"8740\",\"䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻\"],\n[\"8767\",\"綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬\"],\n[\"87a1\",\"𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋\"],\n[\"8840\",\"㇀\",4,\"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ\"],\n[\"88a1\",\"ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛\"],\n[\"8940\",\"𪎩𡅅\"],\n[\"8943\",\"攊\"],\n[\"8946\",\"丽滝鵎釟\"],\n[\"894c\",\"𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮\"],\n[\"89a1\",\"琑糼緍楆竉刧\"],\n[\"89ab\",\"醌碸酞肼\"],\n[\"89b0\",\"贋胶𠧧\"],\n[\"89b5\",\"肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁\"],\n[\"89c1\",\"溚舾甙\"],\n[\"89c5\",\"䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅\"],\n[\"8a40\",\"𧶄唥\"],\n[\"8a43\",\"𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓\"],\n[\"8a64\",\"𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕\"],\n[\"8a76\",\"䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯\"],\n[\"8aa1\",\"𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱\"],\n[\"8aac\",\"䠋𠆩㿺塳𢶍\"],\n[\"8ab2\",\"𤗈𠓼𦂗𠽌𠶖啹䂻䎺\"],\n[\"8abb\",\"䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃\"],\n[\"8ac9\",\"𪘁𠸉𢫏𢳉\"],\n[\"8ace\",\"𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻\"],\n[\"8adf\",\"𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌\"],\n[\"8af6\",\"𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭\"],\n[\"8b40\",\"𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹\"],\n[\"8b55\",\"𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑\"],\n[\"8ba1\",\"𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁\"],\n[\"8bde\",\"𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢\"],\n[\"8c40\",\"倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋\"],\n[\"8ca1\",\"𣏹椙橃𣱣泿\"],\n[\"8ca7\",\"爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚\"],\n[\"8cc9\",\"顨杫䉶圽\"],\n[\"8cce\",\"藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶\"],\n[\"8ce6\",\"峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻\"],\n[\"8d40\",\"𠮟\"],\n[\"8d42\",\"𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱\"],\n[\"8da1\",\"㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘\"],\n[\"8e40\",\"𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎\"],\n[\"8ea1\",\"繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛\"],\n[\"8f40\",\"蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖\"],\n[\"8fa1\",\"𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起\"],\n[\"9040\",\"趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛\"],\n[\"90a1\",\"𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜\"],\n[\"9140\",\"𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈\"],\n[\"91a1\",\"鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨\"],\n[\"9240\",\"𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘\"],\n[\"92a1\",\"働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃\"],\n[\"9340\",\"媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍\"],\n[\"93a1\",\"摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋\"],\n[\"9440\",\"銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻\"],\n[\"94a1\",\"㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡\"],\n[\"9540\",\"𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂\"],\n[\"95a1\",\"衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰\"],\n[\"9640\",\"桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸\"],\n[\"96a1\",\"𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉\"],\n[\"9740\",\"愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫\"],\n[\"97a1\",\"𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎\"],\n[\"9840\",\"𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦\"],\n[\"98a1\",\"咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃\"],\n[\"9940\",\"䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚\"],\n[\"99a1\",\"䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿\"],\n[\"9a40\",\"鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺\"],\n[\"9aa1\",\"黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪\"],\n[\"9b40\",\"𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌\"],\n[\"9b62\",\"𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎\"],\n[\"9ba1\",\"椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊\"],\n[\"9c40\",\"嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶\"],\n[\"9ca1\",\"㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏\"],\n[\"9d40\",\"𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁\"],\n[\"9da1\",\"辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢\"],\n[\"9e40\",\"𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺\"],\n[\"9ea1\",\"鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭\"],\n[\"9ead\",\"𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹\"],\n[\"9ec5\",\"㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲\"],\n[\"9ef5\",\"噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼\"],\n[\"9f40\",\"籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱\"],\n[\"9f4f\",\"凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰\"],\n[\"9fa1\",\"椬叚鰊鴂䰻陁榀傦畆𡝭駚剳\"],\n[\"9fae\",\"酙隁酜\"],\n[\"9fb2\",\"酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽\"],\n[\"9fc1\",\"𤤙盖鮝个𠳔莾衂\"],\n[\"9fc9\",\"届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳\"],\n[\"9fdb\",\"歒酼龥鮗頮颴骺麨麄煺笔\"],\n[\"9fe7\",\"毺蠘罸\"],\n[\"9feb\",\"嘠𪙊蹷齓\"],\n[\"9ff0\",\"跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇\"],\n[\"a040\",\"𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷\"],\n[\"a055\",\"𡠻𦸅\"],\n[\"a058\",\"詾𢔛\"],\n[\"a05b\",\"惽癧髗鵄鍮鮏蟵\"],\n[\"a063\",\"蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽\"],\n[\"a073\",\"坟慯抦戹拎㩜懢厪𣏵捤栂㗒\"],\n[\"a0a1\",\"嵗𨯂迚𨸹\"],\n[\"a0a6\",\"僙𡵆礆匲阸𠼻䁥\"],\n[\"a0ae\",\"矾\"],\n[\"a0b0\",\"糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦\"],\n[\"a0d4\",\"覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷\"],\n[\"a0e2\",\"罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫\"],\n[\"a3c0\",\"␀\",31,\"␡\"],\n[\"c6a1\",\"①\",9,\"⑴\",9,\"ⅰ\",9,\"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー［］✽ぁ\",23],\n[\"c740\",\"す\",58,\"ァアィイ\"],\n[\"c7a1\",\"ゥ\",81,\"А\",5,\"ЁЖ\",4],\n[\"c840\",\"Л\",26,\"ёж\",25,\"⇧↸↹㇏𠃌乚𠂊刂䒑\"],\n[\"c8a1\",\"龰冈龱𧘇\"],\n[\"c8cd\",\"￢￤＇＂㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣\"],\n[\"c8f5\",\"ʃɐɛɔɵœøŋʊɪ\"],\n[\"f9fe\",\"￭\"],\n[\"fa40\",\"𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸\"],\n[\"faa1\",\"鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍\"],\n[\"fb40\",\"𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙\"],\n[\"fba1\",\"𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂\"],\n[\"fc40\",\"廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷\"],\n[\"fca1\",\"𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝\"],\n[\"fd40\",\"𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀\"],\n[\"fda1\",\"𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎\"],\n[\"fe40\",\"鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌\"],\n[\"fea1\",\"𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\nmodule.exports = {\n  // == Japanese/ShiftJIS ====================================================\n  // All japanese encodings are based on JIS X set of standards:\n  // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n  // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n  //              Has several variations in 1978, 1983, 1990 and 1997.\n  // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n  // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n  //              2 planes, first is superset of 0208, second - revised 0212.\n  //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n  // Byte encodings are:\n  //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n  //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n  //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n  //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n  //               0x00-0x7F       - lower part of 0201\n  //               0x8E, 0xA1-0xDF - upper part of 0201\n  //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n  //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n  //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n  //               Used as-is in ISO2022 family.\n  //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n  //                0201-1976 Roman, 0208-1978, 0208-1983.\n  //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n  //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n  //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n  //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n  //\n  // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n  //\n  // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n  'shiftjis': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/shiftjis.json');\n    },\n    encodeAdd: {\n      '\\u00a5': 0x5C,\n      '\\u203E': 0x7E\n    },\n    encodeSkipVals: [{\n      from: 0xED40,\n      to: 0xF940\n    }]\n  },\n  'csshiftjis': 'shiftjis',\n  'mskanji': 'shiftjis',\n  'sjis': 'shiftjis',\n  'windows31j': 'shiftjis',\n  'ms31j': 'shiftjis',\n  'xsjis': 'shiftjis',\n  'windows932': 'shiftjis',\n  'ms932': 'shiftjis',\n  '932': 'shiftjis',\n  'cp932': 'shiftjis',\n  'eucjp': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/eucjp.json');\n    },\n    encodeAdd: {\n      '\\u00a5': 0x5C,\n      '\\u203E': 0x7E\n    }\n  },\n  // TODO: KDDI extension to Shift_JIS\n  // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n  // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n  // == Chinese/GBK ==========================================================\n  // http://en.wikipedia.org/wiki/GBK\n  // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n  // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n  'gb2312': 'cp936',\n  'gb231280': 'cp936',\n  'gb23121980': 'cp936',\n  'csgb2312': 'cp936',\n  'csiso58gb231280': 'cp936',\n  'euccn': 'cp936',\n  // Microsoft's CP936 is a subset and approximation of GBK.\n  'windows936': 'cp936',\n  'ms936': 'cp936',\n  '936': 'cp936',\n  'cp936': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp936.json');\n    }\n  },\n  // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n  'gbk': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp936.json').concat(require('./tables/gbk-added.json'));\n    }\n  },\n  'xgbk': 'gbk',\n  'isoir58': 'gbk',\n  // GB18030 is an algorithmic extension of GBK.\n  // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n  // http://icu-project.org/docs/papers/gb18030.html\n  // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n  // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n  'gb18030': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp936.json').concat(require('./tables/gbk-added.json'));\n    },\n    gb18030: function () {\n      return require('./tables/gb18030-ranges.json');\n    },\n    encodeSkipVals: [0x80],\n    encodeAdd: {\n      '€': 0xA2E3\n    }\n  },\n  'chinese': 'gb18030',\n  // == Korean ===============================================================\n  // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n  'windows949': 'cp949',\n  'ms949': 'cp949',\n  '949': 'cp949',\n  'cp949': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp949.json');\n    }\n  },\n  'cseuckr': 'cp949',\n  'csksc56011987': 'cp949',\n  'euckr': 'cp949',\n  'isoir149': 'cp949',\n  'korean': 'cp949',\n  'ksc56011987': 'cp949',\n  'ksc56011989': 'cp949',\n  'ksc5601': 'cp949',\n  // == Big5/Taiwan/Hong Kong ================================================\n  // There are lots of tables for Big5 and cp950. Please see the following links for history:\n  // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n  // Variations, in roughly number of defined chars:\n  //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n  //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n  //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n  //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n  //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n  //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n  //    Plus, it has 4 combining sequences.\n  //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n  //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n  //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n  //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n  //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n  //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n  //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n  //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n  // \n  // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n  // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n  'windows950': 'cp950',\n  'ms950': 'cp950',\n  '950': 'cp950',\n  'cp950': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp950.json');\n    }\n  },\n  // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n  'big5': 'big5hkscs',\n  'big5hkscs': {\n    type: '_dbcs',\n    table: function () {\n      return require('./tables/cp950.json').concat(require('./tables/big5-added.json'));\n    },\n    encodeSkipVals: [0xa2cc]\n  },\n  'cnbig5': 'big5hkscs',\n  'csbig5': 'big5hkscs',\n  'xxbig5': 'big5hkscs'\n};", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [require(\"./internal\"), require(\"./utf16\"), require(\"./utf7\"), require(\"./sbcs-codec\"), require(\"./sbcs-data\"), require(\"./sbcs-data-generated\"), require(\"./dbcs-codec\"), require(\"./dbcs-data\")];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n  var module = modules[i];\n  for (var enc in module) if (Object.prototype.hasOwnProperty.call(module, enc)) exports[enc] = module[enc];\n}", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n  Transform = require(\"stream\").Transform;\n\n// == Exports ==================================================================\nmodule.exports = function (iconv) {\n  // Additional Public API.\n  iconv.encodeStream = function encodeStream(encoding, options) {\n    return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n  };\n  iconv.decodeStream = function decodeStream(encoding, options) {\n    return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n  };\n  iconv.supportsStreams = true;\n\n  // Not published yet.\n  iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n  iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n  iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n  this.conv = conv;\n  options = options || {};\n  options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n  Transform.call(this, options);\n}\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n  constructor: {\n    value: IconvLiteEncoderStream\n  }\n});\nIconvLiteEncoderStream.prototype._transform = function (chunk, encoding, done) {\n  if (typeof chunk != 'string') return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n  try {\n    var res = this.conv.write(chunk);\n    if (res && res.length) this.push(res);\n    done();\n  } catch (e) {\n    done(e);\n  }\n};\nIconvLiteEncoderStream.prototype._flush = function (done) {\n  try {\n    var res = this.conv.end();\n    if (res && res.length) this.push(res);\n    done();\n  } catch (e) {\n    done(e);\n  }\n};\nIconvLiteEncoderStream.prototype.collect = function (cb) {\n  var chunks = [];\n  this.on('error', cb);\n  this.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n  this.on('end', function () {\n    cb(null, Buffer.concat(chunks));\n  });\n  return this;\n};\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n  this.conv = conv;\n  options = options || {};\n  options.encoding = this.encoding = 'utf8'; // We output strings.\n  Transform.call(this, options);\n}\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n  constructor: {\n    value: IconvLiteDecoderStream\n  }\n});\nIconvLiteDecoderStream.prototype._transform = function (chunk, encoding, done) {\n  if (!Buffer.isBuffer(chunk)) return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n  try {\n    var res = this.conv.write(chunk);\n    if (res && res.length) this.push(res, this.encoding);\n    done();\n  } catch (e) {\n    done(e);\n  }\n};\nIconvLiteDecoderStream.prototype._flush = function (done) {\n  try {\n    var res = this.conv.end();\n    if (res && res.length) this.push(res, this.encoding);\n    done();\n  } catch (e) {\n    done(e);\n  }\n};\nIconvLiteDecoderStream.prototype.collect = function (cb) {\n  var res = '';\n  this.on('error', cb);\n  this.on('data', function (chunk) {\n    res += chunk;\n  });\n  this.on('end', function () {\n    cb(null, res);\n  });\n  return this;\n};", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n  var original = undefined; // Place to keep original methods.\n\n  // Node authors rewrote Buffer internals to make it compatible with\n  // Uint8Array and we cannot patch key functions since then.\n  // Note: this does use older Buffer API on a purpose\n  iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n  iconv.extendNodeEncodings = function extendNodeEncodings() {\n    if (original) return;\n    original = {};\n    if (!iconv.supportsNodeEncodingsExtension) {\n      console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n      console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n      return;\n    }\n    var nodeNativeEncodings = {\n      'hex': true,\n      'utf8': true,\n      'utf-8': true,\n      'ascii': true,\n      'binary': true,\n      'base64': true,\n      'ucs2': true,\n      'ucs-2': true,\n      'utf16le': true,\n      'utf-16le': true\n    };\n    Buffer.isNativeEncoding = function (enc) {\n      return enc && nodeNativeEncodings[enc.toLowerCase()];\n    };\n\n    // -- SlowBuffer -----------------------------------------------------------\n    var SlowBuffer = require('buffer').SlowBuffer;\n    original.SlowBufferToString = SlowBuffer.prototype.toString;\n    SlowBuffer.prototype.toString = function (encoding, start, end) {\n      encoding = String(encoding || 'utf8').toLowerCase();\n\n      // Use native conversion when possible\n      if (Buffer.isNativeEncoding(encoding)) return original.SlowBufferToString.call(this, encoding, start, end);\n\n      // Otherwise, use our decoding method.\n      if (typeof start == 'undefined') start = 0;\n      if (typeof end == 'undefined') end = this.length;\n      return iconv.decode(this.slice(start, end), encoding);\n    };\n    original.SlowBufferWrite = SlowBuffer.prototype.write;\n    SlowBuffer.prototype.write = function (string, offset, length, encoding) {\n      // Support both (string, offset, length, encoding)\n      // and the legacy (string, encoding, offset, length)\n      if (isFinite(offset)) {\n        if (!isFinite(length)) {\n          encoding = length;\n          length = undefined;\n        }\n      } else {\n        // legacy\n        var swap = encoding;\n        encoding = offset;\n        offset = length;\n        length = swap;\n      }\n      offset = +offset || 0;\n      var remaining = this.length - offset;\n      if (!length) {\n        length = remaining;\n      } else {\n        length = +length;\n        if (length > remaining) {\n          length = remaining;\n        }\n      }\n      encoding = String(encoding || 'utf8').toLowerCase();\n\n      // Use native conversion when possible\n      if (Buffer.isNativeEncoding(encoding)) return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n      if (string.length > 0 && (length < 0 || offset < 0)) throw new RangeError('attempt to write beyond buffer bounds');\n\n      // Otherwise, use our encoding method.\n      var buf = iconv.encode(string, encoding);\n      if (buf.length < length) length = buf.length;\n      buf.copy(this, offset, 0, length);\n      return length;\n    };\n\n    // -- Buffer ---------------------------------------------------------------\n\n    original.BufferIsEncoding = Buffer.isEncoding;\n    Buffer.isEncoding = function (encoding) {\n      return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n    };\n    original.BufferByteLength = Buffer.byteLength;\n    Buffer.byteLength = SlowBuffer.byteLength = function (str, encoding) {\n      encoding = String(encoding || 'utf8').toLowerCase();\n\n      // Use native conversion when possible\n      if (Buffer.isNativeEncoding(encoding)) return original.BufferByteLength.call(this, str, encoding);\n\n      // Slow, I know, but we don't have a better way yet.\n      return iconv.encode(str, encoding).length;\n    };\n    original.BufferToString = Buffer.prototype.toString;\n    Buffer.prototype.toString = function (encoding, start, end) {\n      encoding = String(encoding || 'utf8').toLowerCase();\n\n      // Use native conversion when possible\n      if (Buffer.isNativeEncoding(encoding)) return original.BufferToString.call(this, encoding, start, end);\n\n      // Otherwise, use our decoding method.\n      if (typeof start == 'undefined') start = 0;\n      if (typeof end == 'undefined') end = this.length;\n      return iconv.decode(this.slice(start, end), encoding);\n    };\n    original.BufferWrite = Buffer.prototype.write;\n    Buffer.prototype.write = function (string, offset, length, encoding) {\n      var _offset = offset,\n        _length = length,\n        _encoding = encoding;\n      // Support both (string, offset, length, encoding)\n      // and the legacy (string, encoding, offset, length)\n      if (isFinite(offset)) {\n        if (!isFinite(length)) {\n          encoding = length;\n          length = undefined;\n        }\n      } else {\n        // legacy\n        var swap = encoding;\n        encoding = offset;\n        offset = length;\n        length = swap;\n      }\n      encoding = String(encoding || 'utf8').toLowerCase();\n\n      // Use native conversion when possible\n      if (Buffer.isNativeEncoding(encoding)) return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n      offset = +offset || 0;\n      var remaining = this.length - offset;\n      if (!length) {\n        length = remaining;\n      } else {\n        length = +length;\n        if (length > remaining) {\n          length = remaining;\n        }\n      }\n      if (string.length > 0 && (length < 0 || offset < 0)) throw new RangeError('attempt to write beyond buffer bounds');\n\n      // Otherwise, use our encoding method.\n      var buf = iconv.encode(string, encoding);\n      if (buf.length < length) length = buf.length;\n      buf.copy(this, offset, 0, length);\n      return length;\n\n      // TODO: Set _charsWritten.\n    };\n\n    // -- Readable -------------------------------------------------------------\n    if (iconv.supportsStreams) {\n      var Readable = require('stream').Readable;\n      original.ReadableSetEncoding = Readable.prototype.setEncoding;\n      Readable.prototype.setEncoding = function setEncoding(enc, options) {\n        // Use our own decoder, it has the same interface.\n        // We cannot use original function as it doesn't handle BOM-s.\n        this._readableState.decoder = iconv.getDecoder(enc, options);\n        this._readableState.encoding = enc;\n      };\n      Readable.prototype.collect = iconv._collect;\n    }\n  };\n\n  // Remove iconv-lite Node primitive extensions.\n  iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n    if (!iconv.supportsNodeEncodingsExtension) return;\n    if (!original) throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\");\n    delete Buffer.isNativeEncoding;\n    var SlowBuffer = require('buffer').SlowBuffer;\n    SlowBuffer.prototype.toString = original.SlowBufferToString;\n    SlowBuffer.prototype.write = original.SlowBufferWrite;\n    Buffer.isEncoding = original.BufferIsEncoding;\n    Buffer.byteLength = original.BufferByteLength;\n    Buffer.prototype.toString = original.BufferToString;\n    Buffer.prototype.write = original.BufferWrite;\n    if (iconv.supportsStreams) {\n      var Readable = require('stream').Readable;\n      Readable.prototype.setEncoding = original.ReadableSetEncoding;\n      delete Readable.prototype.collect;\n    }\n    original = undefined;\n  };\n};", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\nvar bomHandling = require(\"./bom-handling\"),\n  iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n  str = \"\" + (str || \"\"); // Ensure string.\n\n  var encoder = iconv.getEncoder(encoding, options);\n  var res = encoder.write(str);\n  var trail = encoder.end();\n  return trail && trail.length > 0 ? Buffer.concat([res, trail]) : res;\n};\niconv.decode = function decode(buf, encoding, options) {\n  if (typeof buf === 'string') {\n    if (!iconv.skipDecodeWarning) {\n      console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n      iconv.skipDecodeWarning = true;\n    }\n    buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n  }\n  var decoder = iconv.getDecoder(encoding, options);\n  var res = decoder.write(buf);\n  var trail = decoder.end();\n  return trail ? res + trail : res;\n};\niconv.encodingExists = function encodingExists(enc) {\n  try {\n    iconv.getCodec(enc);\n    return true;\n  } catch (e) {\n    return false;\n  }\n};\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n  if (!iconv.encodings) iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n\n  // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n  var enc = iconv._canonicalizeEncoding(encoding);\n\n  // Traverse iconv.encodings to find actual codec.\n  var codecOptions = {};\n  while (true) {\n    var codec = iconv._codecDataCache[enc];\n    if (codec) return codec;\n    var codecDef = iconv.encodings[enc];\n    switch (typeof codecDef) {\n      case \"string\":\n        // Direct alias to other encoding.\n        enc = codecDef;\n        break;\n      case \"object\":\n        // Alias with options. Can be layered.\n        for (var key in codecDef) codecOptions[key] = codecDef[key];\n        if (!codecOptions.encodingName) codecOptions.encodingName = enc;\n        enc = codecDef.type;\n        break;\n      case \"function\":\n        // Codec itself.\n        if (!codecOptions.encodingName) codecOptions.encodingName = enc;\n\n        // The codec function must load all tables and return object with .encoder and .decoder methods.\n        // It'll be called only once (for each different options object).\n        codec = new codecDef(codecOptions, iconv);\n        iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n        return codec;\n      default:\n        throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\" + enc + \"')\");\n    }\n  }\n};\niconv._canonicalizeEncoding = function (encoding) {\n  // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n  return ('' + encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n};\niconv.getEncoder = function getEncoder(encoding, options) {\n  var codec = iconv.getCodec(encoding),\n    encoder = new codec.encoder(options, codec);\n  if (codec.bomAware && options && options.addBOM) encoder = new bomHandling.PrependBOM(encoder, options);\n  return encoder;\n};\niconv.getDecoder = function getDecoder(encoding, options) {\n  var codec = iconv.getCodec(encoding),\n    decoder = new codec.decoder(options, codec);\n  if (codec.bomAware && !(options && options.stripBOM === false)) decoder = new bomHandling.StripBOM(decoder, options);\n  return decoder;\n};\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n  // Load streaming support in Node v0.10+\n  var nodeVerArr = nodeVer.split(\".\").map(Number);\n  if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n    require(\"./streams\")(iconv);\n  }\n\n  // Load Node primitive extensions.\n  require(\"./extend-node\")(iconv);\n}\nif (\"Ā\" != \"\\u0100\") {\n  console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = unpipe;\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n  var listeners = stream.listeners('data');\n  for (var i = 0; i < listeners.length; i++) {\n    if (listeners[i].name === 'ondata') {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n  if (!stream) {\n    throw new TypeError('argument stream is required');\n  }\n  if (typeof stream.unpipe === 'function') {\n    // new-style\n    stream.unpipe();\n    return;\n  }\n\n  // Node.js 0.8 hack\n  if (!hasPipeDataListeners(stream)) {\n    return;\n  }\n  var listener;\n  var listeners = stream.listeners('close');\n  for (var i = 0; i < listeners.length; i++) {\n    listener = listeners[i];\n    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n      continue;\n    }\n\n    // invoke the listener\n    listener.call(stream);\n  }\n}", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar asyncHooks = tryRequireAsyncHooks();\nvar bytes = require('bytes');\nvar createError = require('http-errors');\nvar iconv = require('iconv-lite');\nvar unpipe = require('unpipe');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody;\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /;\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder(encoding) {\n  if (!encoding) return null;\n  try {\n    return iconv.getDecoder(encoding);\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e;\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    });\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody(stream, options, callback) {\n  var done = callback;\n  var opts = options || {};\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required');\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream');\n  }\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    };\n  }\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function');\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required');\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true ? opts.encoding : 'utf-8';\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit);\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length) ? parseInt(opts.length, 10) : null;\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done));\n  }\n  return new Promise(function executor(resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead(err, buf) {\n      if (err) return reject(err);\n      resolve(buf);\n    });\n  });\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt(stream) {\n  // unpipe everything from the stream\n  unpipe(stream);\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause();\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream(stream, encoding, length, limit, callback) {\n  var complete = false;\n  var sync = true;\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }));\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState;\n  if (stream._decoder || state && (state.encoding || state.decoder)) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }));\n  }\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }));\n  }\n  var received = 0;\n  var decoder;\n  try {\n    decoder = getDecoder(encoding);\n  } catch (err) {\n    return done(err);\n  }\n  var buffer = decoder ? '' : [];\n\n  // attach listeners\n  stream.on('aborted', onAborted);\n  stream.on('close', cleanup);\n  stream.on('data', onData);\n  stream.on('end', onEnd);\n  stream.on('error', onEnd);\n\n  // mark sync section complete\n  sync = false;\n  function done() {\n    var args = new Array(arguments.length);\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    // mark complete\n    complete = true;\n    if (sync) {\n      process.nextTick(invokeCallback);\n    } else {\n      invokeCallback();\n    }\n    function invokeCallback() {\n      cleanup();\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream);\n      }\n      callback.apply(null, args);\n    }\n  }\n  function onAborted() {\n    if (complete) return;\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }));\n  }\n  function onData(chunk) {\n    if (complete) return;\n    received += chunk.length;\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }));\n    } else if (decoder) {\n      buffer += decoder.write(chunk);\n    } else {\n      buffer.push(chunk);\n    }\n  }\n  function onEnd(err) {\n    if (complete) return;\n    if (err) return done(err);\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }));\n    } else {\n      var string = decoder ? buffer + (decoder.end() || '') : Buffer.concat(buffer);\n      done(null, string);\n    }\n  }\n  function cleanup() {\n    buffer = null;\n    stream.removeListener('aborted', onAborted);\n    stream.removeListener('data', onData);\n    stream.removeListener('end', onEnd);\n    stream.removeListener('error', onEnd);\n    stream.removeListener('close', cleanup);\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks() {\n  try {\n    return require('async_hooks');\n  } catch (e) {\n    return {};\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap(fn) {\n  var res;\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn');\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn;\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null);\n}", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = first;\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n  if (!Array.isArray(stuff)) throw new TypeError('arg must be an array of [ee, events...] arrays');\n  var cleanups = [];\n  for (var i = 0; i < stuff.length; i++) {\n    var arr = stuff[i];\n    if (!Array.isArray(arr) || arr.length < 2) throw new TypeError('each array member must be [ee, events...]');\n    var ee = arr[0];\n    for (var j = 1; j < arr.length; j++) {\n      var event = arr[j];\n      var fn = listener(event, callback);\n\n      // listen to the event\n      ee.on(event, fn);\n      // push this listener to the list of cleanups\n      cleanups.push({\n        ee: ee,\n        event: event,\n        fn: fn\n      });\n    }\n  }\n  function callback() {\n    cleanup();\n    done.apply(null, arguments);\n  }\n  function cleanup() {\n    var x;\n    for (var i = 0; i < cleanups.length; i++) {\n      x = cleanups[i];\n      x.ee.removeListener(x.event, x.fn);\n    }\n  }\n  function thunk(fn) {\n    done = fn;\n  }\n  thunk.cancel = cleanup;\n  return thunk;\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n  return function onevent(arg1) {\n    var args = new Array(arguments.length);\n    var ee = this;\n    var err = event === 'error' ? arg1 : null;\n\n    // copy args to prevent arguments escaping scope\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    done(err, ee, event, args);\n  };\n}", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = onFinished;\nmodule.exports.isFinished = isFinished;\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks();\nvar first = require('ee-first');\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n  process.nextTick(fn.bind.apply(fn, arguments));\n};\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished(msg, listener) {\n  if (isFinished(msg) !== false) {\n    defer(listener, null, msg);\n    return msg;\n  }\n\n  // attach the listener to the message\n  attachListener(msg, wrap(listener));\n  return msg;\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished(msg) {\n  var socket = msg.socket;\n  if (typeof msg.finished === 'boolean') {\n    // OutgoingMessage\n    return Boolean(msg.finished || socket && !socket.writable);\n  }\n  if (typeof msg.complete === 'boolean') {\n    // IncomingMessage\n    return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable);\n  }\n\n  // don't know\n  return undefined;\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener(msg, callback) {\n  var eeMsg;\n  var eeSocket;\n  var finished = false;\n  function onFinish(error) {\n    eeMsg.cancel();\n    eeSocket.cancel();\n    finished = true;\n    callback(error);\n  }\n\n  // finished on first message event\n  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish);\n  function onSocket(socket) {\n    // remove listener\n    msg.removeListener('socket', onSocket);\n    if (finished) return;\n    if (eeMsg !== eeSocket) return;\n\n    // finished on first socket event\n    eeSocket = first([[socket, 'error', 'close']], onFinish);\n  }\n  if (msg.socket) {\n    // socket already assigned\n    onSocket(msg.socket);\n    return;\n  }\n\n  // wait for socket to be assigned\n  msg.on('socket', onSocket);\n  if (msg.socket === undefined) {\n    // istanbul ignore next: node.js 0.8 patch\n    patchAssignSocket(msg, onSocket);\n  }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener(msg, listener) {\n  var attached = msg.__onFinished;\n\n  // create a private single listener with queue\n  if (!attached || !attached.queue) {\n    attached = msg.__onFinished = createListener(msg);\n    attachFinishedListener(msg, attached);\n  }\n  attached.queue.push(listener);\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener(msg) {\n  function listener(err) {\n    if (msg.__onFinished === listener) msg.__onFinished = null;\n    if (!listener.queue) return;\n    var queue = listener.queue;\n    listener.queue = null;\n    for (var i = 0; i < queue.length; i++) {\n      queue[i](err, msg);\n    }\n  }\n  listener.queue = [];\n  return listener;\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket(res, callback) {\n  var assignSocket = res.assignSocket;\n  if (typeof assignSocket !== 'function') return;\n\n  // res.on('socket', callback) is broken in 0.8\n  res.assignSocket = function _assignSocket(socket) {\n    assignSocket.call(this, socket);\n    callback(socket);\n  };\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks() {\n  try {\n    return require('async_hooks');\n  } catch (e) {\n    return {};\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap(fn) {\n  var res;\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn');\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn;\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null);\n}", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar createError = require('http-errors');\nvar destroy = require('destroy');\nvar getBody = require('raw-body');\nvar iconv = require('iconv-lite');\nvar onFinished = require('on-finished');\nvar unpipe = require('unpipe');\nvar zlib = require('zlib');\n\n/**\n * Module exports.\n */\n\nmodule.exports = read;\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read(req, res, next, parse, debug, options) {\n  var length;\n  var opts = options;\n  var stream;\n\n  // flag as parsed\n  req._body = true;\n\n  // read options\n  var encoding = opts.encoding !== null ? opts.encoding : null;\n  var verify = opts.verify;\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate);\n    length = stream.length;\n    stream.length = undefined;\n  } catch (err) {\n    return next(err);\n  }\n\n  // set raw-body options\n  opts.length = length;\n  opts.encoding = verify ? null : encoding;\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }));\n  }\n\n  // read body\n  debug('read body');\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error;\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        });\n      } else {\n        // set status code on error\n        _error = createError(400, error);\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        unpipe(req);\n        destroy(stream, true);\n      }\n\n      // read off entire request\n      dump(req, function onfinished() {\n        next(createError(400, _error));\n      });\n      return;\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body');\n        verify(req, res, body, encoding);\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }));\n        return;\n      }\n    }\n\n    // parse\n    var str = body;\n    try {\n      debug('parse body');\n      str = typeof body !== 'string' && encoding !== null ? iconv.decode(body, encoding) : body;\n      req.body = parse(str);\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }));\n      return;\n    }\n    next();\n  });\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream(req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase();\n  var length = req.headers['content-length'];\n  var stream;\n  debug('content-encoding \"%s\"', encoding);\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    });\n  }\n  switch (encoding) {\n    case 'deflate':\n      stream = zlib.createInflate();\n      debug('inflate body');\n      req.pipe(stream);\n      break;\n    case 'gzip':\n      stream = zlib.createGunzip();\n      debug('gunzip body');\n      req.pipe(stream);\n      break;\n    case 'identity':\n      stream = req;\n      stream.length = length;\n      break;\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      });\n  }\n  return stream;\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump(req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null);\n  } else {\n    onFinished(req, callback);\n    req.resume();\n  }\n}", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/;\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/;\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/;\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/;\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format;\nexports.parse = parse;\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required');\n  }\n  var parameters = obj.parameters;\n  var subtype = obj.subtype;\n  var suffix = obj.suffix;\n  var type = obj.type;\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type');\n  }\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype');\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype;\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix');\n    }\n    string += '+' + suffix;\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param;\n    var params = Object.keys(parameters).sort();\n    for (var i = 0; i < params.length; i++) {\n      param = params[i];\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name');\n      }\n      string += '; ' + param + '=' + qstring(parameters[param]);\n    }\n  }\n  return string;\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required');\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string);\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string');\n  }\n  var index = string.indexOf(';');\n  var type = index !== -1 ? string.substr(0, index) : string;\n  var key;\n  var match;\n  var obj = splitType(type);\n  var params = {};\n  var value;\n  paramRegExp.lastIndex = index;\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format');\n    }\n    index += match[0].length;\n    key = match[1].toLowerCase();\n    value = match[2];\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value.substr(1, value.length - 2).replace(qescRegExp, '$1');\n    }\n    params[key] = value;\n  }\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format');\n  }\n  obj.parameters = params;\n  return obj;\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type');\n  }\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type'];\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val);\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str;\n  }\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value');\n  }\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"';\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase());\n  if (!match) {\n    throw new TypeError('invalid media type');\n  }\n  var type = match[1];\n  var subtype = match[2];\n  var suffix;\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+');\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1);\n    subtype = subtype.substr(0, index);\n  }\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  };\n  return obj;\n}", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json');", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar db = require('mime-db');\nvar extname = require('path').extname;\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/;\nvar TEXT_TYPE_REGEXP = /^text\\//i;\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset;\nexports.charsets = {\n  lookup: charset\n};\nexports.contentType = contentType;\nexports.extension = extension;\nexports.extensions = Object.create(null);\nexports.lookup = lookup;\nexports.types = Object.create(null);\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types);\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset(type) {\n  if (!type || typeof type !== 'string') {\n    return false;\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type);\n  var mime = match && db[match[1].toLowerCase()];\n  if (mime && mime.charset) {\n    return mime.charset;\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8';\n  }\n  return false;\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType(str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false;\n  }\n  var mime = str.indexOf('/') === -1 ? exports.lookup(str) : str;\n  if (!mime) {\n    return false;\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime);\n    if (charset) mime += '; charset=' + charset.toLowerCase();\n  }\n  return mime;\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension(type) {\n  if (!type || typeof type !== 'string') {\n    return false;\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type);\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()];\n  if (!exts || !exts.length) {\n    return false;\n  }\n  return exts[0];\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup(path) {\n  if (!path || typeof path !== 'string') {\n    return false;\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path).toLowerCase().substr(1);\n  if (!extension) {\n    return false;\n  }\n  return exports.types[extension] || false;\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps(extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana'];\n  Object.keys(db).forEach(function forEachMimeType(type) {\n    var mime = db[type];\n    var exts = mime.extensions;\n    if (!exts || !exts.length) {\n      return;\n    }\n\n    // mime -> extensions\n    extensions[type] = exts;\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i];\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source);\n        var to = preference.indexOf(mime.source);\n        if (types[extension] !== 'application/octet-stream' && (from > to || from === to && types[extension].substr(0, 12) === 'application/')) {\n          // skip the remapping\n          continue;\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type;\n    }\n  });\n}", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar typer = require('media-typer');\nvar mime = require('mime-types');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest;\nmodule.exports.is = typeis;\nmodule.exports.hasBody = hasbody;\nmodule.exports.normalize = normalize;\nmodule.exports.match = mimeMatch;\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis(value, types_) {\n  var i;\n  var types = types_;\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value);\n\n  // no type or invalid\n  if (!val) {\n    return false;\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1);\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1];\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val;\n  }\n  var type;\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1 ? val : type;\n    }\n  }\n\n  // no matches\n  return false;\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody(req) {\n  return req.headers['transfer-encoding'] !== undefined || !isNaN(req.headers['content-length']);\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest(req, types_) {\n  var types = types_;\n\n  // no body\n  if (!hasbody(req)) {\n    return null;\n  }\n\n  // support flattened arguments\n  if (arguments.length > 2) {\n    types = new Array(arguments.length - 1);\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1];\n    }\n  }\n\n  // request content type\n  var value = req.headers['content-type'];\n  return typeis(value, types);\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize(type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false;\n  }\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded';\n    case 'multipart':\n      return 'multipart/*';\n  }\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type;\n  }\n  return type.indexOf('/') === -1 ? mime.lookup(type) : type;\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch(expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false;\n  }\n\n  // split types\n  var actualParts = actual.split('/');\n  var expectedParts = expected.split('/');\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false;\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false;\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].substr(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 && expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length);\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType(value) {\n  // parse the type\n  var type = typer.parse(value);\n\n  // remove the parameters\n  type.parameters = undefined;\n\n  // reformat it\n  return typer.format(type);\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType(value) {\n  if (!value) {\n    return null;\n  }\n  try {\n    return normalizeType(value);\n  } catch (err) {\n    return null;\n  }\n}", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar bytes = require('bytes');\nvar contentType = require('content-type');\nvar createError = require('http-errors');\nvar debug = require('debug')('body-parser:json');\nvar read = require('../read');\nvar typeis = require('type-is');\n\n/**\n * Module exports.\n */\n\nmodule.exports = json;\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/; // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#';\nvar JSON_SYNTAX_REGEXP = /#+/g;\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json(options) {\n  var opts = options || {};\n  var limit = typeof opts.limit !== 'number' ? bytes.parse(opts.limit || '100kb') : opts.limit;\n  var inflate = opts.inflate !== false;\n  var reviver = opts.reviver;\n  var strict = opts.strict !== false;\n  var type = opts.type || 'application/json';\n  var verify = opts.verify || false;\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function');\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function' ? typeChecker(type) : type;\n  function parse(body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {};\n    }\n    if (strict) {\n      var first = firstchar(body);\n      if (first !== '{' && first !== '[') {\n        debug('strict violation');\n        throw createStrictSyntaxError(body, first);\n      }\n    }\n    try {\n      debug('parse json');\n      return JSON.parse(body, reviver);\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      });\n    }\n  }\n  return function jsonParser(req, res, next) {\n    if (req._body) {\n      debug('body already parsed');\n      next();\n      return;\n    }\n    req.body = req.body || {};\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body');\n      next();\n      return;\n    }\n    debug('content-type %j', req.headers['content-type']);\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing');\n      next();\n      return;\n    }\n\n    // assert charset per RFC 7159 sec 8.1\n    var charset = getCharset(req) || 'utf-8';\n    if (charset.slice(0, 4) !== 'utf-') {\n      debug('invalid charset');\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }));\n      return;\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    });\n  };\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError(str, char) {\n  var index = str.indexOf(char);\n  var partial = '';\n  if (index !== -1) {\n    partial = str.substring(0, index) + JSON_SYNTAX_CHAR;\n    for (var i = index + 1; i < str.length; i++) {\n      partial += JSON_SYNTAX_CHAR;\n    }\n  }\n  try {\n    JSON.parse(partial); /* istanbul ignore next */\n    throw new SyntaxError('strict violation');\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n        return str.substring(index, index + placeholder.length);\n      }),\n      stack: e.stack\n    });\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar(str) {\n  var match = FIRST_CHAR_REGEXP.exec(str);\n  return match ? match[1] : undefined;\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset(req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase();\n  } catch (e) {\n    return undefined;\n  }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError(error, obj) {\n  var keys = Object.getOwnPropertyNames(error);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key];\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message);\n  error.message = obj.message;\n  return error;\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker(type) {\n  return function checkType(req) {\n    return Boolean(typeis(req, type));\n  };\n}", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\nvar bytes = require('bytes');\nvar debug = require('debug')('body-parser:raw');\nvar read = require('../read');\nvar typeis = require('type-is');\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw;\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw(options) {\n  var opts = options || {};\n  var inflate = opts.inflate !== false;\n  var limit = typeof opts.limit !== 'number' ? bytes.parse(opts.limit || '100kb') : opts.limit;\n  var type = opts.type || 'application/octet-stream';\n  var verify = opts.verify || false;\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function');\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function' ? typeChecker(type) : type;\n  function parse(buf) {\n    return buf;\n  }\n  return function rawParser(req, res, next) {\n    if (req._body) {\n      debug('body already parsed');\n      next();\n      return;\n    }\n    req.body = req.body || {};\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body');\n      next();\n      return;\n    }\n    debug('content-type %j', req.headers['content-type']);\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing');\n      next();\n      return;\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: null,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    });\n  };\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker(type) {\n  return function checkType(req) {\n    return Boolean(typeis(req, type));\n  };\n}", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\nvar bytes = require('bytes');\nvar contentType = require('content-type');\nvar debug = require('debug')('body-parser:text');\nvar read = require('../read');\nvar typeis = require('type-is');\n\n/**\n * Module exports.\n */\n\nmodule.exports = text;\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text(options) {\n  var opts = options || {};\n  var defaultCharset = opts.defaultCharset || 'utf-8';\n  var inflate = opts.inflate !== false;\n  var limit = typeof opts.limit !== 'number' ? bytes.parse(opts.limit || '100kb') : opts.limit;\n  var type = opts.type || 'text/plain';\n  var verify = opts.verify || false;\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function');\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function' ? typeChecker(type) : type;\n  function parse(buf) {\n    return buf;\n  }\n  return function textParser(req, res, next) {\n    if (req._body) {\n      debug('body already parsed');\n      next();\n      return;\n    }\n    req.body = req.body || {};\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body');\n      next();\n      return;\n    }\n    debug('content-type %j', req.headers['content-type']);\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing');\n      next();\n      return;\n    }\n\n    // get charset\n    var charset = getCharset(req) || defaultCharset;\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    });\n  };\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset(req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase();\n  } catch (e) {\n    return undefined;\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker(type) {\n  return function checkType(req) {\n    return Boolean(typeis(req, type));\n  };\n}", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;", "module.exports = require('util').inspect;", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') ? Symbol.toStringTag : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype // eslint-disable-line no-proto\n? function (O) {\n  return O.__proto__; // eslint-disable-line no-proto\n} : null);\nfunction addNumericSeparator(num, str) {\n  if (num === Infinity || num === -Infinity || num !== num || num && num > -1000 && num < 1000 || $test.call(/e/, str)) {\n    return str;\n  }\n  var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n  if (typeof num === 'number') {\n    var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n    if (int !== num) {\n      var intStr = String(int);\n      var dec = $slice.call(str, intStr.length + 1);\n      return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n    }\n  }\n  return $replace.call(str, sepRegex, '$&_');\n}\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\nvar quotes = {\n  __proto__: null,\n  'double': '\"',\n  single: \"'\"\n};\nvar quoteREs = {\n  __proto__: null,\n  'double': /([\"\\\\])/g,\n  single: /(['\\\\])/g\n};\nmodule.exports = function inspect_(obj, options, depth, seen) {\n  var opts = options || {};\n  if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n    throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n  }\n  if (has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) {\n    throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n  }\n  var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n  if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n    throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n  }\n  if (has(opts, 'indent') && opts.indent !== null && opts.indent !== '\\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) {\n    throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n  }\n  if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n    throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n  }\n  var numericSeparator = opts.numericSeparator;\n  if (typeof obj === 'undefined') {\n    return 'undefined';\n  }\n  if (obj === null) {\n    return 'null';\n  }\n  if (typeof obj === 'boolean') {\n    return obj ? 'true' : 'false';\n  }\n  if (typeof obj === 'string') {\n    return inspectString(obj, opts);\n  }\n  if (typeof obj === 'number') {\n    if (obj === 0) {\n      return Infinity / obj > 0 ? '0' : '-0';\n    }\n    var str = String(obj);\n    return numericSeparator ? addNumericSeparator(obj, str) : str;\n  }\n  if (typeof obj === 'bigint') {\n    var bigIntStr = String(obj) + 'n';\n    return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n  }\n  var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n  if (typeof depth === 'undefined') {\n    depth = 0;\n  }\n  if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n    return isArray(obj) ? '[Array]' : '[Object]';\n  }\n  var indent = getIndent(opts, depth);\n  if (typeof seen === 'undefined') {\n    seen = [];\n  } else if (indexOf(seen, obj) >= 0) {\n    return '[Circular]';\n  }\n  function inspect(value, from, noIndent) {\n    if (from) {\n      seen = $arrSlice.call(seen);\n      seen.push(from);\n    }\n    if (noIndent) {\n      var newOpts = {\n        depth: opts.depth\n      };\n      if (has(opts, 'quoteStyle')) {\n        newOpts.quoteStyle = opts.quoteStyle;\n      }\n      return inspect_(value, newOpts, depth + 1, seen);\n    }\n    return inspect_(value, opts, depth + 1, seen);\n  }\n  if (typeof obj === 'function' && !isRegExp(obj)) {\n    // in older engines, regexes are callable\n    var name = nameOf(obj);\n    var keys = arrObjKeys(obj, inspect);\n    return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n  }\n  if (isSymbol(obj)) {\n    var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n    return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n  }\n  if (isElement(obj)) {\n    var s = '<' + $toLowerCase.call(String(obj.nodeName));\n    var attrs = obj.attributes || [];\n    for (var i = 0; i < attrs.length; i++) {\n      s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n    }\n    s += '>';\n    if (obj.childNodes && obj.childNodes.length) {\n      s += '...';\n    }\n    s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n    return s;\n  }\n  if (isArray(obj)) {\n    if (obj.length === 0) {\n      return '[]';\n    }\n    var xs = arrObjKeys(obj, inspect);\n    if (indent && !singleLineValues(xs)) {\n      return '[' + indentedJoin(xs, indent) + ']';\n    }\n    return '[ ' + $join.call(xs, ', ') + ' ]';\n  }\n  if (isError(obj)) {\n    var parts = arrObjKeys(obj, inspect);\n    if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n      return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n    }\n    if (parts.length === 0) {\n      return '[' + String(obj) + ']';\n    }\n    return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n  }\n  if (typeof obj === 'object' && customInspect) {\n    if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n      return utilInspect(obj, {\n        depth: maxDepth - depth\n      });\n    } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n      return obj.inspect();\n    }\n  }\n  if (isMap(obj)) {\n    var mapParts = [];\n    if (mapForEach) {\n      mapForEach.call(obj, function (value, key) {\n        mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n      });\n    }\n    return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n  }\n  if (isSet(obj)) {\n    var setParts = [];\n    if (setForEach) {\n      setForEach.call(obj, function (value) {\n        setParts.push(inspect(value, obj));\n      });\n    }\n    return collectionOf('Set', setSize.call(obj), setParts, indent);\n  }\n  if (isWeakMap(obj)) {\n    return weakCollectionOf('WeakMap');\n  }\n  if (isWeakSet(obj)) {\n    return weakCollectionOf('WeakSet');\n  }\n  if (isWeakRef(obj)) {\n    return weakCollectionOf('WeakRef');\n  }\n  if (isNumber(obj)) {\n    return markBoxed(inspect(Number(obj)));\n  }\n  if (isBigInt(obj)) {\n    return markBoxed(inspect(bigIntValueOf.call(obj)));\n  }\n  if (isBoolean(obj)) {\n    return markBoxed(booleanValueOf.call(obj));\n  }\n  if (isString(obj)) {\n    return markBoxed(inspect(String(obj)));\n  }\n  // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n  /* eslint-env browser */\n  if (typeof window !== 'undefined' && obj === window) {\n    return '{ [object Window] }';\n  }\n  if (typeof globalThis !== 'undefined' && obj === globalThis || typeof global !== 'undefined' && obj === global) {\n    return '{ [object globalThis] }';\n  }\n  if (!isDate(obj) && !isRegExp(obj)) {\n    var ys = arrObjKeys(obj, inspect);\n    var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n    var protoTag = obj instanceof Object ? '' : 'null prototype';\n    var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n    var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n    var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n    if (ys.length === 0) {\n      return tag + '{}';\n    }\n    if (indent) {\n      return tag + '{' + indentedJoin(ys, indent) + '}';\n    }\n    return tag + '{ ' + $join.call(ys, ', ') + ' }';\n  }\n  return String(obj);\n};\nfunction wrapQuotes(s, defaultStyle, opts) {\n  var style = opts.quoteStyle || defaultStyle;\n  var quoteChar = quotes[style];\n  return quoteChar + s + quoteChar;\n}\nfunction quote(s) {\n  return $replace.call(String(s), /\"/g, '&quot;');\n}\nfunction isArray(obj) {\n  return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isDate(obj) {\n  return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isRegExp(obj) {\n  return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isError(obj) {\n  return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isString(obj) {\n  return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isNumber(obj) {\n  return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\nfunction isBoolean(obj) {\n  return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));\n}\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n  if (hasShammedSymbols) {\n    return obj && typeof obj === 'object' && obj instanceof Symbol;\n  }\n  if (typeof obj === 'symbol') {\n    return true;\n  }\n  if (!obj || typeof obj !== 'object' || !symToString) {\n    return false;\n  }\n  try {\n    symToString.call(obj);\n    return true;\n  } catch (e) {}\n  return false;\n}\nfunction isBigInt(obj) {\n  if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n    return false;\n  }\n  try {\n    bigIntValueOf.call(obj);\n    return true;\n  } catch (e) {}\n  return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) {\n  return key in this;\n};\nfunction has(obj, key) {\n  return hasOwn.call(obj, key);\n}\nfunction toStr(obj) {\n  return objectToString.call(obj);\n}\nfunction nameOf(f) {\n  if (f.name) {\n    return f.name;\n  }\n  var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n  if (m) {\n    return m[1];\n  }\n  return null;\n}\nfunction indexOf(xs, x) {\n  if (xs.indexOf) {\n    return xs.indexOf(x);\n  }\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction isMap(x) {\n  if (!mapSize || !x || typeof x !== 'object') {\n    return false;\n  }\n  try {\n    mapSize.call(x);\n    try {\n      setSize.call(x);\n    } catch (s) {\n      return true;\n    }\n    return x instanceof Map; // core-js workaround, pre-v2.5.0\n  } catch (e) {}\n  return false;\n}\nfunction isWeakMap(x) {\n  if (!weakMapHas || !x || typeof x !== 'object') {\n    return false;\n  }\n  try {\n    weakMapHas.call(x, weakMapHas);\n    try {\n      weakSetHas.call(x, weakSetHas);\n    } catch (s) {\n      return true;\n    }\n    return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n  } catch (e) {}\n  return false;\n}\nfunction isWeakRef(x) {\n  if (!weakRefDeref || !x || typeof x !== 'object') {\n    return false;\n  }\n  try {\n    weakRefDeref.call(x);\n    return true;\n  } catch (e) {}\n  return false;\n}\nfunction isSet(x) {\n  if (!setSize || !x || typeof x !== 'object') {\n    return false;\n  }\n  try {\n    setSize.call(x);\n    try {\n      mapSize.call(x);\n    } catch (m) {\n      return true;\n    }\n    return x instanceof Set; // core-js workaround, pre-v2.5.0\n  } catch (e) {}\n  return false;\n}\nfunction isWeakSet(x) {\n  if (!weakSetHas || !x || typeof x !== 'object') {\n    return false;\n  }\n  try {\n    weakSetHas.call(x, weakSetHas);\n    try {\n      weakMapHas.call(x, weakMapHas);\n    } catch (s) {\n      return true;\n    }\n    return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n  } catch (e) {}\n  return false;\n}\nfunction isElement(x) {\n  if (!x || typeof x !== 'object') {\n    return false;\n  }\n  if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n    return true;\n  }\n  return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\nfunction inspectString(str, opts) {\n  if (str.length > opts.maxStringLength) {\n    var remaining = str.length - opts.maxStringLength;\n    var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n    return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n  }\n  var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n  quoteRE.lastIndex = 0;\n  // eslint-disable-next-line no-control-regex\n  var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n  return wrapQuotes(s, 'single', opts);\n}\nfunction lowbyte(c) {\n  var n = c.charCodeAt(0);\n  var x = {\n    8: 'b',\n    9: 't',\n    10: 'n',\n    12: 'f',\n    13: 'r'\n  }[n];\n  if (x) {\n    return '\\\\' + x;\n  }\n  return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\nfunction markBoxed(str) {\n  return 'Object(' + str + ')';\n}\nfunction weakCollectionOf(type) {\n  return type + ' { ? }';\n}\nfunction collectionOf(type, size, entries, indent) {\n  var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n  return type + ' (' + size + ') {' + joinedEntries + '}';\n}\nfunction singleLineValues(xs) {\n  for (var i = 0; i < xs.length; i++) {\n    if (indexOf(xs[i], '\\n') >= 0) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getIndent(opts, depth) {\n  var baseIndent;\n  if (opts.indent === '\\t') {\n    baseIndent = '\\t';\n  } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n    baseIndent = $join.call(Array(opts.indent + 1), ' ');\n  } else {\n    return null;\n  }\n  return {\n    base: baseIndent,\n    prev: $join.call(Array(depth + 1), baseIndent)\n  };\n}\nfunction indentedJoin(xs, indent) {\n  if (xs.length === 0) {\n    return '';\n  }\n  var lineJoiner = '\\n' + indent.prev + indent.base;\n  return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\nfunction arrObjKeys(obj, inspect) {\n  var isArr = isArray(obj);\n  var xs = [];\n  if (isArr) {\n    xs.length = obj.length;\n    for (var i = 0; i < obj.length; i++) {\n      xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n    }\n  }\n  var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n  var symMap;\n  if (hasShammedSymbols) {\n    symMap = {};\n    for (var k = 0; k < syms.length; k++) {\n      symMap['$' + syms[k]] = syms[k];\n    }\n  }\n  for (var key in obj) {\n    // eslint-disable-line no-restricted-syntax\n    if (!has(obj, key)) {\n      continue;\n    } // eslint-disable-line no-restricted-syntax, no-continue\n    if (isArr && String(Number(key)) === key && key < obj.length) {\n      continue;\n    } // eslint-disable-line no-restricted-syntax, no-continue\n    if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n      // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n      continue; // eslint-disable-line no-restricted-syntax, no-continue\n    } else if ($test.call(/[^\\w$]/, key)) {\n      xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n    } else {\n      xs.push(key + ': ' + inspect(obj[key], obj));\n    }\n  }\n  if (typeof gOPS === 'function') {\n    for (var j = 0; j < syms.length; j++) {\n      if (isEnumerable.call(obj, syms[j])) {\n        xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n      }\n    }\n  }\n  return xs;\n}", "'use strict';\n\nvar inspect = require('object-inspect');\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n  /** @type {typeof list | NonNullable<(typeof list)['next']>} */\n  var prev = list;\n  /** @type {(typeof list)['next']} */\n  var curr;\n  // eslint-disable-next-line eqeqeq\n  for (; (curr = prev.next) != null; prev = curr) {\n    if (curr.key === key) {\n      prev.next = curr.next;\n      if (!isDelete) {\n        // eslint-disable-next-line no-extra-parens\n        curr.next = /** @type {NonNullable<typeof list.next>} */list.next;\n        list.next = curr; // eslint-disable-line no-param-reassign\n      }\n      return curr;\n    }\n  }\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n  if (!objects) {\n    return void undefined;\n  }\n  var node = listGetNode(objects, key);\n  return node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n  var node = listGetNode(objects, key);\n  if (node) {\n    node.value = value;\n  } else {\n    // Prepend the new node to the beginning of the list\n    objects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */{\n      // eslint-disable-line no-param-reassign, no-extra-parens\n      key: key,\n      next: objects.next,\n      value: value\n    };\n  }\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n  if (!objects) {\n    return false;\n  }\n  return !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n  if (objects) {\n    return listGetNode(objects, key, true);\n  }\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n  /** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n  /** @typedef {Parameters<Channel['get']>[0]} K */\n  /** @typedef {Parameters<Channel['set']>[1]} V */\n\n  /** @type {import('./list.d.ts').RootNode<V, K> | undefined} */var $o;\n\n  /** @type {Channel} */\n  var channel = {\n    assert: function (key) {\n      if (!channel.has(key)) {\n        throw new $TypeError('Side channel does not contain ' + inspect(key));\n      }\n    },\n    'delete': function (key) {\n      var root = $o && $o.next;\n      var deletedNode = listDelete($o, key);\n      if (deletedNode && root && root === deletedNode) {\n        $o = void undefined;\n      }\n      return !!deletedNode;\n    },\n    get: function (key) {\n      return listGet($o, key);\n    },\n    has: function (key) {\n      return listHas($o, key);\n    },\n    set: function (key, value) {\n      if (!$o) {\n        // Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n        $o = {\n          next: void undefined\n        };\n      }\n      // eslint-disable-next-line no-extra-parens\n      listSet(/** @type {NonNullable<typeof $o>} */$o, key, value);\n    }\n  };\n  // @ts-expect-error TODO: figure out why this is erroring\n  return channel;\n};", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\nif ($gOPD) {\n  try {\n    $gOPD([], 'length');\n  } catch (e) {\n    // IE 8 has a broken gOPD\n    $gOPD = null;\n  }\n}\nmodule.exports = $gOPD;", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n  try {\n    $defineProperty({}, 'a', {\n      value: 1\n    });\n  } catch (e) {\n    // IE 8 has a broken defineProperty\n    $defineProperty = false;\n  }\n}\nmodule.exports = $defineProperty;", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n  if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') {\n    return false;\n  }\n  if (typeof Symbol.iterator === 'symbol') {\n    return true;\n  }\n\n  /** @type {{ [k in symbol]?: unknown }} */\n  var obj = {};\n  var sym = Symbol('test');\n  var symObj = Object(sym);\n  if (typeof sym === 'string') {\n    return false;\n  }\n  if (Object.prototype.toString.call(sym) !== '[object Symbol]') {\n    return false;\n  }\n  if (Object.prototype.toString.call(symObj) !== '[object Symbol]') {\n    return false;\n  }\n\n  // temp disabled per https://github.com/ljharb/object.assign/issues/17\n  // if (sym instanceof Symbol) { return false; }\n  // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n  // if (!(symObj instanceof Symbol)) { return false; }\n\n  // if (typeof Symbol.prototype.toString !== 'function') { return false; }\n  // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n  var symVal = 42;\n  obj[sym] = symVal;\n  for (var _ in obj) {\n    return false;\n  } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n  if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) {\n    return false;\n  }\n  if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) {\n    return false;\n  }\n  var syms = Object.getOwnPropertySymbols(obj);\n  if (syms.length !== 1 || syms[0] !== sym) {\n    return false;\n  }\n  if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {\n    return false;\n  }\n  if (typeof Object.getOwnPropertyDescriptor === 'function') {\n    // eslint-disable-next-line no-extra-parens\n    var descriptor = /** @type {PropertyDescriptor} */Object.getOwnPropertyDescriptor(obj, sym);\n    if (descriptor.value !== symVal || descriptor.enumerable !== true) {\n      return false;\n    }\n  }\n  return true;\n};", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n  if (typeof origSymbol !== 'function') {\n    return false;\n  }\n  if (typeof Symbol !== 'function') {\n    return false;\n  }\n  if (typeof origSymbol('foo') !== 'symbol') {\n    return false;\n  }\n  if (typeof Symbol('bar') !== 'symbol') {\n    return false;\n  }\n  return hasSymbolSham();\n};", "'use strict';\n\n/* eslint no-invalid-this: 1 */\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\nvar concatty = function concatty(a, b) {\n  var arr = [];\n  for (var i = 0; i < a.length; i += 1) {\n    arr[i] = a[i];\n  }\n  for (var j = 0; j < b.length; j += 1) {\n    arr[j + a.length] = b[j];\n  }\n  return arr;\n};\nvar slicy = function slicy(arrLike, offset) {\n  var arr = [];\n  for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n    arr[j] = arrLike[i];\n  }\n  return arr;\n};\nvar joiny = function (arr, joiner) {\n  var str = '';\n  for (var i = 0; i < arr.length; i += 1) {\n    str += arr[i];\n    if (i + 1 < arr.length) {\n      str += joiner;\n    }\n  }\n  return str;\n};\nmodule.exports = function bind(that) {\n  var target = this;\n  if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n    throw new TypeError(ERROR_MESSAGE + target);\n  }\n  var args = slicy(arguments, 1);\n  var bound;\n  var binder = function () {\n    if (this instanceof bound) {\n      var result = target.apply(this, concatty(args, arguments));\n      if (Object(result) === result) {\n        return result;\n      }\n      return this;\n    }\n    return target.apply(that, concatty(args, arguments));\n  };\n  var boundLength = max(0, target.length - args.length);\n  var boundArgs = [];\n  for (var i = 0; i < boundLength; i++) {\n    boundArgs[i] = '$' + i;\n  }\n  bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n  if (target.prototype) {\n    var Empty = function Empty() {};\n    Empty.prototype = target.prototype;\n    bound.prototype = new Empty();\n    Empty.prototype = null;\n  }\n  return bound;\n};", "'use strict';\n\nvar implementation = require('./implementation');\nmodule.exports = Function.prototype.bind || implementation;", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;", "'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {import('.')} */\nmodule.exports = function callBindBasic(args) {\n  if (args.length < 1 || typeof args[0] !== 'function') {\n    throw new $TypeError('a function is required');\n  }\n  return $actualApply(bind, $call, args);\n};", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\nvar hasProtoAccessor;\ntry {\n  // eslint-disable-next-line no-extra-parens, no-proto\n  hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */[].__proto__ === Array.prototype;\n} catch (e) {\n  if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n    throw e;\n  }\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */'__proto__');\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function' ? callBind([desc.get]) : typeof $getPrototypeOf === 'function' ? /** @type {import('./get')} */function getDunder(value) {\n  // eslint-disable-next-line eqeqeq\n  return $getPrototypeOf(value == null ? value : $Object(value));\n} : false;", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);", "'use strict';\n\nvar undefined;\nvar $Object = require('es-object-atoms');\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n  try {\n    return $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n  } catch (e) {}\n};\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\nvar throwTypeError = function () {\n  throw new $TypeError();\n};\nvar ThrowTypeError = $gOPD ? function () {\n  try {\n    // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n    arguments.callee; // IE 8 does not throw here\n    return throwTypeError;\n  } catch (calleeThrows) {\n    try {\n      // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n      return $gOPD(arguments, 'callee').get;\n    } catch (gOPDthrows) {\n      return throwTypeError;\n    }\n  }\n}() : throwTypeError;\nvar hasSymbols = require('has-symbols')();\nvar getDunderProto = require('dunder-proto/get');\nvar getProto = typeof Reflect === 'function' && Reflect.getPrototypeOf || $Object.getPrototypeOf || getDunderProto;\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\nvar needsEval = {};\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\nvar INTRINSICS = {\n  __proto__: null,\n  '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n  '%Array%': Array,\n  '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n  '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n  '%AsyncFromSyncIteratorPrototype%': undefined,\n  '%AsyncFunction%': needsEval,\n  '%AsyncGenerator%': needsEval,\n  '%AsyncGeneratorFunction%': needsEval,\n  '%AsyncIteratorPrototype%': needsEval,\n  '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n  '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n  '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n  '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n  '%Boolean%': Boolean,\n  '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n  '%Date%': Date,\n  '%decodeURI%': decodeURI,\n  '%decodeURIComponent%': decodeURIComponent,\n  '%encodeURI%': encodeURI,\n  '%encodeURIComponent%': encodeURIComponent,\n  '%Error%': $Error,\n  '%eval%': eval,\n  // eslint-disable-line no-eval\n  '%EvalError%': $EvalError,\n  '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n  '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n  '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n  '%Function%': $Function,\n  '%GeneratorFunction%': needsEval,\n  '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n  '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n  '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n  '%isFinite%': isFinite,\n  '%isNaN%': isNaN,\n  '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n  '%JSON%': typeof JSON === 'object' ? JSON : undefined,\n  '%Map%': typeof Map === 'undefined' ? undefined : Map,\n  '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n  '%Math%': Math,\n  '%Number%': Number,\n  '%Object%': $Object,\n  '%Object.getOwnPropertyDescriptor%': $gOPD,\n  '%parseFloat%': parseFloat,\n  '%parseInt%': parseInt,\n  '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n  '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n  '%RangeError%': $RangeError,\n  '%ReferenceError%': $ReferenceError,\n  '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n  '%RegExp%': RegExp,\n  '%Set%': typeof Set === 'undefined' ? undefined : Set,\n  '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n  '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n  '%String%': String,\n  '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n  '%Symbol%': hasSymbols ? Symbol : undefined,\n  '%SyntaxError%': $SyntaxError,\n  '%ThrowTypeError%': ThrowTypeError,\n  '%TypedArray%': TypedArray,\n  '%TypeError%': $TypeError,\n  '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n  '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n  '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n  '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n  '%URIError%': $URIError,\n  '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n  '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n  '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n  '%Function.prototype.call%': $call,\n  '%Function.prototype.apply%': $apply,\n  '%Object.defineProperty%': $defineProperty,\n  '%Math.abs%': abs,\n  '%Math.floor%': floor,\n  '%Math.max%': max,\n  '%Math.min%': min,\n  '%Math.pow%': pow\n};\nif (getProto) {\n  try {\n    null.error; // eslint-disable-line no-unused-expressions\n  } catch (e) {\n    // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n    var errorProto = getProto(getProto(e));\n    INTRINSICS['%Error.prototype%'] = errorProto;\n  }\n}\nvar doEval = function doEval(name) {\n  var value;\n  if (name === '%AsyncFunction%') {\n    value = getEvalledConstructor('async function () {}');\n  } else if (name === '%GeneratorFunction%') {\n    value = getEvalledConstructor('function* () {}');\n  } else if (name === '%AsyncGeneratorFunction%') {\n    value = getEvalledConstructor('async function* () {}');\n  } else if (name === '%AsyncGenerator%') {\n    var fn = doEval('%AsyncGeneratorFunction%');\n    if (fn) {\n      value = fn.prototype;\n    }\n  } else if (name === '%AsyncIteratorPrototype%') {\n    var gen = doEval('%AsyncGenerator%');\n    if (gen && getProto) {\n      value = getProto(gen.prototype);\n    }\n  }\n  INTRINSICS[name] = value;\n  return value;\n};\nvar LEGACY_ALIASES = {\n  __proto__: null,\n  '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n  '%ArrayPrototype%': ['Array', 'prototype'],\n  '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n  '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n  '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n  '%ArrayProto_values%': ['Array', 'prototype', 'values'],\n  '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n  '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n  '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n  '%BooleanPrototype%': ['Boolean', 'prototype'],\n  '%DataViewPrototype%': ['DataView', 'prototype'],\n  '%DatePrototype%': ['Date', 'prototype'],\n  '%ErrorPrototype%': ['Error', 'prototype'],\n  '%EvalErrorPrototype%': ['EvalError', 'prototype'],\n  '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n  '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n  '%FunctionPrototype%': ['Function', 'prototype'],\n  '%Generator%': ['GeneratorFunction', 'prototype'],\n  '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n  '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n  '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n  '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n  '%JSONParse%': ['JSON', 'parse'],\n  '%JSONStringify%': ['JSON', 'stringify'],\n  '%MapPrototype%': ['Map', 'prototype'],\n  '%NumberPrototype%': ['Number', 'prototype'],\n  '%ObjectPrototype%': ['Object', 'prototype'],\n  '%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n  '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n  '%PromisePrototype%': ['Promise', 'prototype'],\n  '%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n  '%Promise_all%': ['Promise', 'all'],\n  '%Promise_reject%': ['Promise', 'reject'],\n  '%Promise_resolve%': ['Promise', 'resolve'],\n  '%RangeErrorPrototype%': ['RangeError', 'prototype'],\n  '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n  '%RegExpPrototype%': ['RegExp', 'prototype'],\n  '%SetPrototype%': ['Set', 'prototype'],\n  '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n  '%StringPrototype%': ['String', 'prototype'],\n  '%SymbolPrototype%': ['Symbol', 'prototype'],\n  '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n  '%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n  '%TypeErrorPrototype%': ['TypeError', 'prototype'],\n  '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n  '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n  '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n  '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n  '%URIErrorPrototype%': ['URIError', 'prototype'],\n  '%WeakMapPrototype%': ['WeakMap', 'prototype'],\n  '%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n  var first = $strSlice(string, 0, 1);\n  var last = $strSlice(string, -1);\n  if (first === '%' && last !== '%') {\n    throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n  } else if (last === '%' && first !== '%') {\n    throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n  }\n  var result = [];\n  $replace(string, rePropName, function (match, number, quote, subString) {\n    result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n  });\n  return result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n  var intrinsicName = name;\n  var alias;\n  if (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n    alias = LEGACY_ALIASES[intrinsicName];\n    intrinsicName = '%' + alias[0] + '%';\n  }\n  if (hasOwn(INTRINSICS, intrinsicName)) {\n    var value = INTRINSICS[intrinsicName];\n    if (value === needsEval) {\n      value = doEval(intrinsicName);\n    }\n    if (typeof value === 'undefined' && !allowMissing) {\n      throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n    }\n    return {\n      alias: alias,\n      name: intrinsicName,\n      value: value\n    };\n  }\n  throw new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n  if (typeof name !== 'string' || name.length === 0) {\n    throw new $TypeError('intrinsic name must be a non-empty string');\n  }\n  if (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n    throw new $TypeError('\"allowMissing\" argument must be a boolean');\n  }\n  if ($exec(/^%?[^%]*%?$/, name) === null) {\n    throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n  }\n  var parts = stringToPath(name);\n  var intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n  var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n  var intrinsicRealName = intrinsic.name;\n  var value = intrinsic.value;\n  var skipFurtherCaching = false;\n  var alias = intrinsic.alias;\n  if (alias) {\n    intrinsicBaseName = alias[0];\n    $spliceApply(parts, $concat([0, 1], alias));\n  }\n  for (var i = 1, isOwn = true; i < parts.length; i += 1) {\n    var part = parts[i];\n    var first = $strSlice(part, 0, 1);\n    var last = $strSlice(part, -1);\n    if ((first === '\"' || first === \"'\" || first === '`' || last === '\"' || last === \"'\" || last === '`') && first !== last) {\n      throw new $SyntaxError('property names with quotes must have matching quotes');\n    }\n    if (part === 'constructor' || !isOwn) {\n      skipFurtherCaching = true;\n    }\n    intrinsicBaseName += '.' + part;\n    intrinsicRealName = '%' + intrinsicBaseName + '%';\n    if (hasOwn(INTRINSICS, intrinsicRealName)) {\n      value = INTRINSICS[intrinsicRealName];\n    } else if (value != null) {\n      if (!(part in value)) {\n        if (!allowMissing) {\n          throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n        }\n        return void undefined;\n      }\n      if ($gOPD && i + 1 >= parts.length) {\n        var desc = $gOPD(value, part);\n        isOwn = !!desc;\n\n        // By convention, when a data property is converted to an accessor\n        // property to emulate a data property that does not suffer from\n        // the override mistake, that accessor's getter is marked with\n        // an `originalValue` property. Here, when we detect this, we\n        // uphold the illusion by pretending to see that original data\n        // property, i.e., returning the value rather than the getter\n        // itself.\n        if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n          value = desc.get;\n        } else {\n          value = value[part];\n        }\n      } else {\n        isOwn = hasOwn(value, part);\n        value = value[part];\n      }\n      if (isOwn && !skipFurtherCaching) {\n        INTRINSICS[intrinsicRealName] = value;\n      }\n    }\n  }\n  return value;\n};", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n  // eslint-disable-next-line no-extra-parens\n  var intrinsic = /** @type {Parameters<typeof callBindBasic>[0][0]} */GetIntrinsic(name, !!allowMissing);\n  if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n    return callBindBasic([intrinsic]);\n  }\n  return intrinsic;\n};", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */function getSideChannelMap() {\n  /** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n  /** @typedef {Parameters<Channel['get']>[0]} K */\n  /** @typedef {Parameters<Channel['set']>[1]} V */\n\n  /** @type {Map<K, V> | undefined} */var $m;\n\n  /** @type {Channel} */\n  var channel = {\n    assert: function (key) {\n      if (!channel.has(key)) {\n        throw new $TypeError('Side channel does not contain ' + inspect(key));\n      }\n    },\n    'delete': function (key) {\n      if ($m) {\n        var result = $mapDelete($m, key);\n        if ($mapSize($m) === 0) {\n          $m = void undefined;\n        }\n        return result;\n      }\n      return false;\n    },\n    get: function (key) {\n      // eslint-disable-line consistent-return\n      if ($m) {\n        return $mapGet($m, key);\n      }\n    },\n    has: function (key) {\n      if ($m) {\n        return $mapHas($m, key);\n      }\n      return false;\n    },\n    set: function (key, value) {\n      if (!$m) {\n        // @ts-expect-error TS can't handle narrowing a variable inside a closure\n        $m = new $Map();\n      }\n      $mapSet($m, key, value);\n    }\n  };\n\n  // @ts-expect-error TODO: figure out why TS is erroring here\n  return channel;\n};", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap ? /** @type {Exclude<import('.'), false>} */function getSideChannelWeakMap() {\n  /** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n  /** @typedef {Parameters<Channel['get']>[0]} K */\n  /** @typedef {Parameters<Channel['set']>[1]} V */\n\n  /** @type {WeakMap<K & object, V> | undefined} */var $wm;\n  /** @type {Channel | undefined} */\n  var $m;\n\n  /** @type {Channel} */\n  var channel = {\n    assert: function (key) {\n      if (!channel.has(key)) {\n        throw new $TypeError('Side channel does not contain ' + inspect(key));\n      }\n    },\n    'delete': function (key) {\n      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n        if ($wm) {\n          return $weakMapDelete($wm, key);\n        }\n      } else if (getSideChannelMap) {\n        if ($m) {\n          return $m['delete'](key);\n        }\n      }\n      return false;\n    },\n    get: function (key) {\n      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n        if ($wm) {\n          return $weakMapGet($wm, key);\n        }\n      }\n      return $m && $m.get(key);\n    },\n    has: function (key) {\n      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n        if ($wm) {\n          return $weakMapHas($wm, key);\n        }\n      }\n      return !!$m && $m.has(key);\n    },\n    set: function (key, value) {\n      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n        if (!$wm) {\n          $wm = new $WeakMap();\n        }\n        $weakMapSet($wm, key, value);\n      } else if (getSideChannelMap) {\n        if (!$m) {\n          $m = getSideChannelMap();\n        }\n        // eslint-disable-next-line no-extra-parens\n        /** @type {NonNullable<typeof $m>} */\n        $m.set(key, value);\n      }\n    }\n  };\n\n  // @ts-expect-error TODO: figure out why this is erroring\n  return channel;\n} : getSideChannelMap;", "'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n  /** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n  /** @type {Channel | undefined} */var $channelData;\n\n  /** @type {Channel} */\n  var channel = {\n    assert: function (key) {\n      if (!channel.has(key)) {\n        throw new $TypeError('Side channel does not contain ' + inspect(key));\n      }\n    },\n    'delete': function (key) {\n      return !!$channelData && $channelData['delete'](key);\n    },\n    get: function (key) {\n      return $channelData && $channelData.get(key);\n    },\n    has: function (key) {\n      return !!$channelData && $channelData.has(key);\n    },\n    set: function (key, value) {\n      if (!$channelData) {\n        $channelData = makeChannel();\n      }\n      $channelData.set(key, value);\n    }\n  };\n  // @ts-expect-error TODO: figure out why this is erroring\n  return channel;\n};", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\nvar Format = {\n  RFC1738: 'RFC1738',\n  RFC3986: 'RFC3986'\n};\nmodule.exports = {\n  'default': Format.RFC3986,\n  formatters: {\n    RFC1738: function (value) {\n      return replace.call(value, percentTwenties, '+');\n    },\n    RFC3986: function (value) {\n      return String(value);\n    }\n  },\n  RFC1738: Format.RFC1738,\n  RFC3986: Format.RFC3986\n};", "'use strict';\n\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar hexTable = function () {\n  var array = [];\n  for (var i = 0; i < 256; ++i) {\n    array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n  }\n  return array;\n}();\nvar compactQueue = function compactQueue(queue) {\n  while (queue.length > 1) {\n    var item = queue.pop();\n    var obj = item.obj[item.prop];\n    if (isArray(obj)) {\n      var compacted = [];\n      for (var j = 0; j < obj.length; ++j) {\n        if (typeof obj[j] !== 'undefined') {\n          compacted.push(obj[j]);\n        }\n      }\n      item.obj[item.prop] = compacted;\n    }\n  }\n};\nvar arrayToObject = function arrayToObject(source, options) {\n  var obj = options && options.plainObjects ? Object.create(null) : {};\n  for (var i = 0; i < source.length; ++i) {\n    if (typeof source[i] !== 'undefined') {\n      obj[i] = source[i];\n    }\n  }\n  return obj;\n};\nvar merge = function merge(target, source, options) {\n  /* eslint no-param-reassign: 0 */\n  if (!source) {\n    return target;\n  }\n  if (typeof source !== 'object') {\n    if (isArray(target)) {\n      target.push(source);\n    } else if (target && typeof target === 'object') {\n      if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) {\n        target[source] = true;\n      }\n    } else {\n      return [target, source];\n    }\n    return target;\n  }\n  if (!target || typeof target !== 'object') {\n    return [target].concat(source);\n  }\n  var mergeTarget = target;\n  if (isArray(target) && !isArray(source)) {\n    mergeTarget = arrayToObject(target, options);\n  }\n  if (isArray(target) && isArray(source)) {\n    source.forEach(function (item, i) {\n      if (has.call(target, i)) {\n        var targetItem = target[i];\n        if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n          target[i] = merge(targetItem, item, options);\n        } else {\n          target.push(item);\n        }\n      } else {\n        target[i] = item;\n      }\n    });\n    return target;\n  }\n  return Object.keys(source).reduce(function (acc, key) {\n    var value = source[key];\n    if (has.call(acc, key)) {\n      acc[key] = merge(acc[key], value, options);\n    } else {\n      acc[key] = value;\n    }\n    return acc;\n  }, mergeTarget);\n};\nvar assign = function assignSingleSource(target, source) {\n  return Object.keys(source).reduce(function (acc, key) {\n    acc[key] = source[key];\n    return acc;\n  }, target);\n};\nvar decode = function (str, decoder, charset) {\n  var strWithoutPlus = str.replace(/\\+/g, ' ');\n  if (charset === 'iso-8859-1') {\n    // unescape never throws, no try...catch needed:\n    return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n  }\n  // utf-8\n  try {\n    return decodeURIComponent(strWithoutPlus);\n  } catch (e) {\n    return strWithoutPlus;\n  }\n};\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n  // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n  // It has been adapted here for stricter adherence to RFC 3986\n  if (str.length === 0) {\n    return str;\n  }\n  var string = str;\n  if (typeof str === 'symbol') {\n    string = Symbol.prototype.toString.call(str);\n  } else if (typeof str !== 'string') {\n    string = String(str);\n  }\n  if (charset === 'iso-8859-1') {\n    return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n      return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n    });\n  }\n  var out = '';\n  for (var j = 0; j < string.length; j += limit) {\n    var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n    var arr = [];\n    for (var i = 0; i < segment.length; ++i) {\n      var c = segment.charCodeAt(i);\n      if (c === 0x2D // -\n      || c === 0x2E // .\n      || c === 0x5F // _\n      || c === 0x7E // ~\n      || c >= 0x30 && c <= 0x39 // 0-9\n      || c >= 0x41 && c <= 0x5A // a-z\n      || c >= 0x61 && c <= 0x7A // A-Z\n      || format === formats.RFC1738 && (c === 0x28 || c === 0x29) // ( )\n      ) {\n        arr[arr.length] = segment.charAt(i);\n        continue;\n      }\n      if (c < 0x80) {\n        arr[arr.length] = hexTable[c];\n        continue;\n      }\n      if (c < 0x800) {\n        arr[arr.length] = hexTable[0xC0 | c >> 6] + hexTable[0x80 | c & 0x3F];\n        continue;\n      }\n      if (c < 0xD800 || c >= 0xE000) {\n        arr[arr.length] = hexTable[0xE0 | c >> 12] + hexTable[0x80 | c >> 6 & 0x3F] + hexTable[0x80 | c & 0x3F];\n        continue;\n      }\n      i += 1;\n      c = 0x10000 + ((c & 0x3FF) << 10 | segment.charCodeAt(i) & 0x3FF);\n      arr[arr.length] = hexTable[0xF0 | c >> 18] + hexTable[0x80 | c >> 12 & 0x3F] + hexTable[0x80 | c >> 6 & 0x3F] + hexTable[0x80 | c & 0x3F];\n    }\n    out += arr.join('');\n  }\n  return out;\n};\nvar compact = function compact(value) {\n  var queue = [{\n    obj: {\n      o: value\n    },\n    prop: 'o'\n  }];\n  var refs = [];\n  for (var i = 0; i < queue.length; ++i) {\n    var item = queue[i];\n    var obj = item.obj[item.prop];\n    var keys = Object.keys(obj);\n    for (var j = 0; j < keys.length; ++j) {\n      var key = keys[j];\n      var val = obj[key];\n      if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n        queue.push({\n          obj: obj,\n          prop: key\n        });\n        refs.push(val);\n      }\n    }\n  }\n  compactQueue(queue);\n  return value;\n};\nvar isRegExp = function isRegExp(obj) {\n  return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\nvar isBuffer = function isBuffer(obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n  return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\nvar combine = function combine(a, b) {\n  return [].concat(a, b);\n};\nvar maybeMap = function maybeMap(val, fn) {\n  if (isArray(val)) {\n    var mapped = [];\n    for (var i = 0; i < val.length; i += 1) {\n      mapped.push(fn(val[i]));\n    }\n    return mapped;\n  }\n  return fn(val);\n};\nmodule.exports = {\n  arrayToObject: arrayToObject,\n  assign: assign,\n  combine: combine,\n  compact: compact,\n  decode: decode,\n  encode: encode,\n  isBuffer: isBuffer,\n  isRegExp: isRegExp,\n  maybeMap: maybeMap,\n  merge: merge\n};", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\nvar arrayPrefixGenerators = {\n  brackets: function brackets(prefix) {\n    return prefix + '[]';\n  },\n  comma: 'comma',\n  indices: function indices(prefix, key) {\n    return prefix + '[' + key + ']';\n  },\n  repeat: function repeat(prefix) {\n    return prefix;\n  }\n};\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n  push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\nvar toISO = Date.prototype.toISOString;\nvar defaultFormat = formats['default'];\nvar defaults = {\n  addQueryPrefix: false,\n  allowDots: false,\n  allowEmptyArrays: false,\n  arrayFormat: 'indices',\n  charset: 'utf-8',\n  charsetSentinel: false,\n  delimiter: '&',\n  encode: true,\n  encodeDotInKeys: false,\n  encoder: utils.encode,\n  encodeValuesOnly: false,\n  format: defaultFormat,\n  formatter: formats.formatters[defaultFormat],\n  // deprecated\n  indices: false,\n  serializeDate: function serializeDate(date) {\n    return toISO.call(date);\n  },\n  skipNulls: false,\n  strictNullHandling: false\n};\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n  return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || typeof v === 'symbol' || typeof v === 'bigint';\n};\nvar sentinel = {};\nvar stringify = function stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n  var obj = object;\n  var tmpSc = sideChannel;\n  var step = 0;\n  var findFlag = false;\n  while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n    // Where object last appeared in the ref tree\n    var pos = tmpSc.get(object);\n    step += 1;\n    if (typeof pos !== 'undefined') {\n      if (pos === step) {\n        throw new RangeError('Cyclic object value');\n      } else {\n        findFlag = true; // Break while\n      }\n    }\n    if (typeof tmpSc.get(sentinel) === 'undefined') {\n      step = 0;\n    }\n  }\n  if (typeof filter === 'function') {\n    obj = filter(prefix, obj);\n  } else if (obj instanceof Date) {\n    obj = serializeDate(obj);\n  } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n    obj = utils.maybeMap(obj, function (value) {\n      if (value instanceof Date) {\n        return serializeDate(value);\n      }\n      return value;\n    });\n  }\n  if (obj === null) {\n    if (strictNullHandling) {\n      return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n    }\n    obj = '';\n  }\n  if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n    if (encoder) {\n      var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n      return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n    }\n    return [formatter(prefix) + '=' + formatter(String(obj))];\n  }\n  var values = [];\n  if (typeof obj === 'undefined') {\n    return values;\n  }\n  var objKeys;\n  if (generateArrayPrefix === 'comma' && isArray(obj)) {\n    // we need to join elements in\n    if (encodeValuesOnly && encoder) {\n      obj = utils.maybeMap(obj, encoder);\n    }\n    objKeys = [{\n      value: obj.length > 0 ? obj.join(',') || null : void undefined\n    }];\n  } else if (isArray(filter)) {\n    objKeys = filter;\n  } else {\n    var keys = Object.keys(obj);\n    objKeys = sort ? keys.sort(sort) : keys;\n  }\n  var encodedPrefix = encodeDotInKeys ? prefix.replace(/\\./g, '%2E') : prefix;\n  var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n  if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n    return adjustedPrefix + '[]';\n  }\n  for (var j = 0; j < objKeys.length; ++j) {\n    var key = objKeys[j];\n    var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n    if (skipNulls && value === null) {\n      continue;\n    }\n    var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n    var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n    sideChannel.set(object, step);\n    var valueSideChannel = getSideChannel();\n    valueSideChannel.set(sentinel, sideChannel);\n    pushToArray(values, stringify(value, keyPrefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n  }\n  return values;\n};\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n  if (!opts) {\n    return defaults;\n  }\n  if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n    throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n  }\n  if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n    throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n  }\n  if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n    throw new TypeError('Encoder has to be a function.');\n  }\n  var charset = opts.charset || defaults.charset;\n  if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n    throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n  }\n  var format = formats['default'];\n  if (typeof opts.format !== 'undefined') {\n    if (!has.call(formats.formatters, opts.format)) {\n      throw new TypeError('Unknown format option provided.');\n    }\n    format = opts.format;\n  }\n  var formatter = formats.formatters[format];\n  var filter = defaults.filter;\n  if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n    filter = opts.filter;\n  }\n  var arrayFormat;\n  if (opts.arrayFormat in arrayPrefixGenerators) {\n    arrayFormat = opts.arrayFormat;\n  } else if ('indices' in opts) {\n    arrayFormat = opts.indices ? 'indices' : 'repeat';\n  } else {\n    arrayFormat = defaults.arrayFormat;\n  }\n  if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n    throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n  }\n  var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n  return {\n    addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n    allowDots: allowDots,\n    allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n    arrayFormat: arrayFormat,\n    charset: charset,\n    charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n    commaRoundTrip: opts.commaRoundTrip,\n    delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n    encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n    encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n    encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n    encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n    filter: filter,\n    format: format,\n    formatter: formatter,\n    serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n    skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n    sort: typeof opts.sort === 'function' ? opts.sort : null,\n    strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n  };\n};\nmodule.exports = function (object, opts) {\n  var obj = object;\n  var options = normalizeStringifyOptions(opts);\n  var objKeys;\n  var filter;\n  if (typeof options.filter === 'function') {\n    filter = options.filter;\n    obj = filter('', obj);\n  } else if (isArray(options.filter)) {\n    filter = options.filter;\n    objKeys = filter;\n  }\n  var keys = [];\n  if (typeof obj !== 'object' || obj === null) {\n    return '';\n  }\n  var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n  var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n  if (!objKeys) {\n    objKeys = Object.keys(obj);\n  }\n  if (options.sort) {\n    objKeys.sort(options.sort);\n  }\n  var sideChannel = getSideChannel();\n  for (var i = 0; i < objKeys.length; ++i) {\n    var key = objKeys[i];\n    if (options.skipNulls && obj[key] === null) {\n      continue;\n    }\n    pushToArray(keys, stringify(obj[key], key, generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n  }\n  var joined = keys.join(options.delimiter);\n  var prefix = options.addQueryPrefix === true ? '?' : '';\n  if (options.charsetSentinel) {\n    if (options.charset === 'iso-8859-1') {\n      // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n      prefix += 'utf8=%26%2310003%3B&';\n    } else {\n      // encodeURIComponent('✓')\n      prefix += 'utf8=%E2%9C%93&';\n    }\n  }\n  return joined.length > 0 ? prefix + joined : '';\n};", "'use strict';\n\nvar utils = require('./utils');\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar defaults = {\n  allowDots: false,\n  allowEmptyArrays: false,\n  allowPrototypes: false,\n  allowSparse: false,\n  arrayLimit: 20,\n  charset: 'utf-8',\n  charsetSentinel: false,\n  comma: false,\n  decodeDotInKeys: false,\n  decoder: utils.decode,\n  delimiter: '&',\n  depth: 5,\n  duplicates: 'combine',\n  ignoreQueryPrefix: false,\n  interpretNumericEntities: false,\n  parameterLimit: 1000,\n  parseArrays: true,\n  plainObjects: false,\n  strictDepth: false,\n  strictNullHandling: false\n};\nvar interpretNumericEntities = function (str) {\n  return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n    return String.fromCharCode(parseInt(numberStr, 10));\n  });\n};\nvar parseArrayValue = function (val, options) {\n  if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n    return val.split(',');\n  }\n  return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n  var obj = {\n    __proto__: null\n  };\n  var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n  cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n  var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n  var parts = cleanStr.split(options.delimiter, limit);\n  var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n  var i;\n  var charset = options.charset;\n  if (options.charsetSentinel) {\n    for (i = 0; i < parts.length; ++i) {\n      if (parts[i].indexOf('utf8=') === 0) {\n        if (parts[i] === charsetSentinel) {\n          charset = 'utf-8';\n        } else if (parts[i] === isoSentinel) {\n          charset = 'iso-8859-1';\n        }\n        skipIndex = i;\n        i = parts.length; // The eslint settings do not allow break;\n      }\n    }\n  }\n  for (i = 0; i < parts.length; ++i) {\n    if (i === skipIndex) {\n      continue;\n    }\n    var part = parts[i];\n    var bracketEqualsPos = part.indexOf(']=');\n    var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n    var key, val;\n    if (pos === -1) {\n      key = options.decoder(part, defaults.decoder, charset, 'key');\n      val = options.strictNullHandling ? null : '';\n    } else {\n      key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n      val = utils.maybeMap(parseArrayValue(part.slice(pos + 1), options), function (encodedVal) {\n        return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n      });\n    }\n    if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n      val = interpretNumericEntities(val);\n    }\n    if (part.indexOf('[]=') > -1) {\n      val = isArray(val) ? [val] : val;\n    }\n    var existing = has.call(obj, key);\n    if (existing && options.duplicates === 'combine') {\n      obj[key] = utils.combine(obj[key], val);\n    } else if (!existing || options.duplicates === 'last') {\n      obj[key] = val;\n    }\n  }\n  return obj;\n};\nvar parseObject = function (chain, val, options, valuesParsed) {\n  var leaf = valuesParsed ? val : parseArrayValue(val, options);\n  for (var i = chain.length - 1; i >= 0; --i) {\n    var obj;\n    var root = chain[i];\n    if (root === '[]' && options.parseArrays) {\n      obj = options.allowEmptyArrays && (leaf === '' || options.strictNullHandling && leaf === null) ? [] : [].concat(leaf);\n    } else {\n      obj = options.plainObjects ? Object.create(null) : {};\n      var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n      var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n      var index = parseInt(decodedRoot, 10);\n      if (!options.parseArrays && decodedRoot === '') {\n        obj = {\n          0: leaf\n        };\n      } else if (!isNaN(index) && root !== decodedRoot && String(index) === decodedRoot && index >= 0 && options.parseArrays && index <= options.arrayLimit) {\n        obj = [];\n        obj[index] = leaf;\n      } else if (decodedRoot !== '__proto__') {\n        obj[decodedRoot] = leaf;\n      }\n    }\n    leaf = obj;\n  }\n  return leaf;\n};\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n  if (!givenKey) {\n    return;\n  }\n\n  // Transform dot notation to bracket notation\n  var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n  // The regex chunks\n\n  var brackets = /(\\[[^[\\]]*])/;\n  var child = /(\\[[^[\\]]*])/g;\n\n  // Get the parent\n\n  var segment = options.depth > 0 && brackets.exec(key);\n  var parent = segment ? key.slice(0, segment.index) : key;\n\n  // Stash the parent if it exists\n\n  var keys = [];\n  if (parent) {\n    // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n    if (!options.plainObjects && has.call(Object.prototype, parent)) {\n      if (!options.allowPrototypes) {\n        return;\n      }\n    }\n    keys.push(parent);\n  }\n\n  // Loop through children appending to the array until we hit depth\n\n  var i = 0;\n  while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n    i += 1;\n    if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n      if (!options.allowPrototypes) {\n        return;\n      }\n    }\n    keys.push(segment[1]);\n  }\n\n  // If there's a remainder, check strictDepth option for throw, else just add whatever is left\n\n  if (segment) {\n    if (options.strictDepth === true) {\n      throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n    }\n    keys.push('[' + key.slice(segment.index) + ']');\n  }\n  return parseObject(keys, val, options, valuesParsed);\n};\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n  if (!opts) {\n    return defaults;\n  }\n  if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n    throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n  }\n  if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n    throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n  }\n  if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n    throw new TypeError('Decoder has to be a function.');\n  }\n  if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n    throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n  }\n  var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n  var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n  if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n    throw new TypeError('The duplicates option must be either combine, first, or last');\n  }\n  var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n  return {\n    allowDots: allowDots,\n    allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n    allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n    allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n    arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n    charset: charset,\n    charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n    comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n    decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n    decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n    delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n    // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n    depth: typeof opts.depth === 'number' || opts.depth === false ? +opts.depth : defaults.depth,\n    duplicates: duplicates,\n    ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n    interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n    parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n    parseArrays: opts.parseArrays !== false,\n    plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n    strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n    strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n  };\n};\nmodule.exports = function (str, opts) {\n  var options = normalizeParseOptions(opts);\n  if (str === '' || str === null || typeof str === 'undefined') {\n    return options.plainObjects ? Object.create(null) : {};\n  }\n  var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n  var obj = options.plainObjects ? Object.create(null) : {};\n\n  // Iterate over the keys and setup the new object\n\n  var keys = Object.keys(tempObj);\n  for (var i = 0; i < keys.length; ++i) {\n    var key = keys[i];\n    var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n    obj = utils.merge(obj, newObj, options);\n  }\n  if (options.allowSparse === true) {\n    return obj;\n  }\n  return utils.compact(obj);\n};", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\nmodule.exports = {\n  formats: formats,\n  parse: parse,\n  stringify: stringify\n};", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar bytes = require('bytes');\nvar contentType = require('content-type');\nvar createError = require('http-errors');\nvar debug = require('debug')('body-parser:urlencoded');\nvar deprecate = require('depd')('body-parser');\nvar read = require('../read');\nvar typeis = require('type-is');\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded;\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null);\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded(options) {\n  var opts = options || {};\n\n  // notice because option default will flip in next major\n  if (opts.extended === undefined) {\n    deprecate('undefined extended: provide extended option');\n  }\n  var extended = opts.extended !== false;\n  var inflate = opts.inflate !== false;\n  var limit = typeof opts.limit !== 'number' ? bytes.parse(opts.limit || '100kb') : opts.limit;\n  var type = opts.type || 'application/x-www-form-urlencoded';\n  var verify = opts.verify || false;\n  var depth = typeof opts.depth !== 'number' ? Number(opts.depth || 32) : opts.depth;\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function');\n  }\n\n  // create the appropriate query parser\n  var queryparse = extended ? extendedparser(opts) : simpleparser(opts);\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function' ? typeChecker(type) : type;\n  function parse(body) {\n    return body.length ? queryparse(body) : {};\n  }\n  return function urlencodedParser(req, res, next) {\n    if (req._body) {\n      debug('body already parsed');\n      next();\n      return;\n    }\n    req.body = req.body || {};\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body');\n      next();\n      return;\n    }\n    debug('content-type %j', req.headers['content-type']);\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing');\n      next();\n      return;\n    }\n\n    // assert charset\n    var charset = getCharset(req) || 'utf-8';\n    if (charset !== 'utf-8') {\n      debug('invalid charset');\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }));\n      return;\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      debug: debug,\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify,\n      depth: depth\n    });\n  };\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser(options) {\n  var parameterLimit = options.parameterLimit !== undefined ? options.parameterLimit : 1000;\n  var depth = typeof options.depth !== 'number' ? Number(options.depth || 32) : options.depth;\n  var parse = parser('qs');\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number');\n  }\n  if (isNaN(depth) || depth < 0) {\n    throw new TypeError('option depth must be a zero or a positive number');\n  }\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0;\n  }\n  return function queryparse(body) {\n    var paramCount = parameterCount(body, parameterLimit);\n    if (paramCount === undefined) {\n      debug('too many parameters');\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      });\n    }\n    var arrayLimit = Math.max(100, paramCount);\n    debug('parse extended urlencoding');\n    try {\n      return parse(body, {\n        allowPrototypes: true,\n        arrayLimit: arrayLimit,\n        depth: depth,\n        strictDepth: true,\n        parameterLimit: parameterLimit\n      });\n    } catch (err) {\n      if (err instanceof RangeError) {\n        throw createError(400, 'The input exceeded the depth', {\n          type: 'querystring.parse.rangeError'\n        });\n      } else {\n        throw err;\n      }\n    }\n  };\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset(req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase();\n  } catch (e) {\n    return undefined;\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount(body, limit) {\n  var count = 0;\n  var index = 0;\n  while ((index = body.indexOf('&', index)) !== -1) {\n    count++;\n    index++;\n    if (count === limit) {\n      return undefined;\n    }\n  }\n  return count;\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser(name) {\n  var mod = parsers[name];\n  if (mod !== undefined) {\n    return mod.parse;\n  }\n\n  // this uses a switch for static require analysis\n  switch (name) {\n    case 'qs':\n      mod = require('qs');\n      break;\n    case 'querystring':\n      mod = require('querystring');\n      break;\n  }\n\n  // store to prevent invoking require()\n  parsers[name] = mod;\n  return mod.parse;\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser(options) {\n  var parameterLimit = options.parameterLimit !== undefined ? options.parameterLimit : 1000;\n  var parse = parser('querystring');\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number');\n  }\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0;\n  }\n  return function queryparse(body) {\n    var paramCount = parameterCount(body, parameterLimit);\n    if (paramCount === undefined) {\n      debug('too many parameters');\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      });\n    }\n    debug('parse urlencoding');\n    return parse(body, undefined, undefined, {\n      maxKeys: parameterLimit\n    });\n  };\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker(type) {\n  return function checkType(req) {\n    return Boolean(typeis(req, type));\n  };\n}", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar deprecate = require('depd')('body-parser');\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null);\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser, 'bodyParser: use individual json/urlencoded middlewares');\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('json')\n});\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('raw')\n});\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('text')\n});\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('urlencoded')\n});\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser(options) {\n  // use default type for parsers\n  var opts = Object.create(options || null, {\n    type: {\n      configurable: true,\n      enumerable: true,\n      value: undefined,\n      writable: true\n    }\n  });\n  var _urlencoded = exports.urlencoded(opts);\n  var _json = exports.json(opts);\n  return function bodyParser(req, res, next) {\n    _json(req, res, function (err) {\n      if (err) return next(err);\n      _urlencoded(req, res, next);\n    });\n  };\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter(name) {\n  return function get() {\n    return loadParser(name);\n  };\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser(parserName) {\n  var parser = parsers[parserName];\n  if (parser !== undefined) {\n    return parser;\n  }\n\n  // this uses a switch for static require analysis\n  switch (parserName) {\n    case 'json':\n      parser = require('./lib/types/json');\n      break;\n    case 'raw':\n      parser = require('./lib/types/raw');\n      break;\n    case 'text':\n      parser = require('./lib/types/text');\n      break;\n    case 'urlencoded':\n      parser = require('./lib/types/urlencoded');\n      break;\n  }\n\n  // store to prevent invoking require()\n  return parsers[parserName] = parser;\n}", "/*!\n * merge-descriptors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = merge;\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge(dest, src, redefine) {\n  if (!dest) {\n    throw new TypeError('argument dest is required');\n  }\n  if (!src) {\n    throw new TypeError('argument src is required');\n  }\n  if (redefine === undefined) {\n    // Default to true\n    redefine = true;\n  }\n  Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {\n    if (!redefine && hasOwnProperty.call(dest, name)) {\n      // Skip descriptor\n      return;\n    }\n\n    // Copy descriptor\n    var descriptor = Object.getOwnPropertyDescriptor(src, name);\n    Object.defineProperty(dest, name, descriptor);\n  });\n  return dest;\n}", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}", "/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0,\n    i;\n  for (i in namespace) {\n    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    args[0] = exports.coerce(args[0]);\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n  exports.names = [];\n  exports.skips = [];\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson'];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n  // is firebug? http://stackoverflow.com/a/398120/376773\n  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n  // is firefox >= v31?\n  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n  // double check webkit in userAgent just in case we are in a worker\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function (v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n  if (!useColors) return;\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit');\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch (e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch (e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function (_, k) {\n    return k.toUpperCase();\n  });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;else if (/^(no|off|false|disabled)$/i.test(val)) val = false;else if (val === 'null') val = null;else val = Number(val);\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function () {}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')();\n}\nvar stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts).split('\\n').map(function (str) {\n    return str.trim();\n  }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString() + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream(fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, {\n        autoClose: false\n      });\n      stream._type = 'fs';\n      break;\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n  stream._isStdio = true;\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n  debug.inspectOpts = {};\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = encodeUrl;\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g;\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2';\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl(url) {\n  return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI);\n}", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n  if (!match) {\n    return str;\n  }\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        // \"\n        escape = '&quot;';\n        break;\n      case 38:\n        // &\n        escape = '&amp;';\n        break;\n      case 39:\n        // '\n        escape = '&#39;';\n        break;\n      case 60:\n        // <\n        escape = '&lt;';\n        break;\n      case 62:\n        // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escape;\n  }\n  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n}", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar url = require('url');\nvar parse = url.parse;\nvar Url = url.Url;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl;\nmodule.exports.original = originalurl;\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl(req) {\n  var url = req.url;\n  if (url === undefined) {\n    // URL is undefined\n    return undefined;\n  }\n  var parsed = req._parsedUrl;\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed;\n  }\n\n  // Parse the URL\n  parsed = fastparse(url);\n  parsed._raw = url;\n  return req._parsedUrl = parsed;\n}\n;\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl(req) {\n  var url = req.originalUrl;\n  if (typeof url !== 'string') {\n    // Fallback\n    return parseurl(req);\n  }\n  var parsed = req._parsedOriginalUrl;\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed;\n  }\n\n  // Parse the URL\n  parsed = fastparse(url);\n  parsed._raw = url;\n  return req._parsedOriginalUrl = parsed;\n}\n;\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse(str) {\n  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n    return parse(str);\n  }\n  var pathname = str;\n  var query = null;\n  var search = null;\n\n  // This takes the regexp from https://github.com/joyent/node/pull/7878\n  // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n  // And unrolls it into a for loop\n  for (var i = 1; i < str.length; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x3f:\n        /* ?  */\n        if (search === null) {\n          pathname = str.substring(0, i);\n          query = str.substring(i + 1);\n          search = str.substring(i);\n        }\n        break;\n      case 0x09: /* \\t */\n      case 0x0a: /* \\n */\n      case 0x0c: /* \\f */\n      case 0x0d: /* \\r */\n      case 0x20: /*    */\n      case 0x23: /* #  */\n      case 0xa0:\n      case 0xfeff:\n        return parse(str);\n    }\n  }\n  var url = Url !== undefined ? new Url() : {};\n  url.path = str;\n  url.href = str;\n  url.pathname = pathname;\n  if (search !== null) {\n    url.query = query;\n    url.search = search;\n  }\n  return url;\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh(url, parsedUrl) {\n  return typeof parsedUrl === 'object' && parsedUrl !== null && (Url === undefined || parsedUrl instanceof Url) && parsedUrl._raw === url;\n}", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar debug = require('debug')('finalhandler');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar onFinished = require('on-finished');\nvar parseUrl = require('parseurl');\nvar statuses = require('statuses');\nvar unpipe = require('unpipe');\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g;\nvar NEWLINE_REGEXP = /\\n/g;\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n  process.nextTick(fn.bind.apply(fn, arguments));\n};\nvar isFinished = onFinished.isFinished;\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument(message) {\n  var body = escapeHtml(message).replace(NEWLINE_REGEXP, '<br>').replace(DOUBLE_SPACE_REGEXP, ' &nbsp;');\n  return '<!DOCTYPE html>\\n' + '<html lang=\"en\">\\n' + '<head>\\n' + '<meta charset=\"utf-8\">\\n' + '<title>Error</title>\\n' + '</head>\\n' + '<body>\\n' + '<pre>' + body + '</pre>\\n' + '</body>\\n' + '</html>\\n';\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler;\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler(req, res, options) {\n  var opts = options || {};\n\n  // get environment\n  var env = opts.env || process.env.NODE_ENV || 'development';\n\n  // get error callback\n  var onerror = opts.onerror;\n  return function (err) {\n    var headers;\n    var msg;\n    var status;\n\n    // ignore 404 on in-flight response\n    if (!err && headersSent(res)) {\n      debug('cannot 404 after headers sent');\n      return;\n    }\n\n    // unhandled error\n    if (err) {\n      // respect status code from error\n      status = getErrorStatusCode(err);\n      if (status === undefined) {\n        // fallback to status code on response\n        status = getResponseStatusCode(res);\n      } else {\n        // respect headers from error\n        headers = getErrorHeaders(err);\n      }\n\n      // get error message\n      msg = getErrorMessage(err, status, env);\n    } else {\n      // not found\n      status = 404;\n      msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req));\n    }\n    debug('default %s', status);\n\n    // schedule onerror callback\n    if (err && onerror) {\n      defer(onerror, err, req, res);\n    }\n\n    // cannot actually respond\n    if (headersSent(res)) {\n      debug('cannot %d after headers sent', status);\n      if (req.socket) {\n        req.socket.destroy();\n      }\n      return;\n    }\n\n    // send response\n    send(req, res, status, headers, msg);\n  };\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders(err) {\n  if (!err.headers || typeof err.headers !== 'object') {\n    return undefined;\n  }\n  var headers = Object.create(null);\n  var keys = Object.keys(err.headers);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    headers[key] = err.headers[key];\n  }\n  return headers;\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage(err, status, env) {\n  var msg;\n  if (env !== 'production') {\n    // use err.stack, which typically includes err.message\n    msg = err.stack;\n\n    // fallback to err.toString() when possible\n    if (!msg && typeof err.toString === 'function') {\n      msg = err.toString();\n    }\n  }\n  return msg || statuses.message[status];\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode(err) {\n  // check err.status\n  if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n    return err.status;\n  }\n\n  // check err.statusCode\n  if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n    return err.statusCode;\n  }\n  return undefined;\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName(req) {\n  try {\n    return parseUrl.original(req).pathname;\n  } catch (e) {\n    return 'resource';\n  }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode(res) {\n  var status = res.statusCode;\n\n  // default status code to 500 if outside valid range\n  if (typeof status !== 'number' || status < 400 || status > 599) {\n    status = 500;\n  }\n  return status;\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent(res) {\n  return typeof res.headersSent !== 'boolean' ? Boolean(res._header) : res.headersSent;\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send(req, res, status, headers, message) {\n  function write() {\n    // response body\n    var body = createHtmlDocument(message);\n\n    // response status\n    res.statusCode = status;\n    if (req.httpVersionMajor < 2) {\n      res.statusMessage = statuses.message[status];\n    }\n\n    // remove any content headers\n    res.removeHeader('Content-Encoding');\n    res.removeHeader('Content-Language');\n    res.removeHeader('Content-Range');\n\n    // response headers\n    setHeaders(res, headers);\n\n    // security headers\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\");\n    res.setHeader('X-Content-Type-Options', 'nosniff');\n\n    // standard headers\n    res.setHeader('Content-Type', 'text/html; charset=utf-8');\n    res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'));\n    if (req.method === 'HEAD') {\n      res.end();\n      return;\n    }\n    res.end(body, 'utf8');\n  }\n  if (isFinished(req)) {\n    write();\n    return;\n  }\n\n  // unpipe everything from the request\n  unpipe(req);\n\n  // flush the request\n  onFinished(req, write);\n  req.resume();\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders(res, headers) {\n  if (!headers) {\n    return;\n  }\n  var keys = Object.keys(headers);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    res.setHeader(key, headers[key]);\n  }\n}", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}", "/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0,\n    i;\n  for (i in namespace) {\n    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    args[0] = exports.coerce(args[0]);\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n  exports.names = [];\n  exports.skips = [];\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson'];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n  // is firebug? http://stackoverflow.com/a/398120/376773\n  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n  // is firefox >= v31?\n  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n  // double check webkit in userAgent just in case we are in a worker\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function (v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n  if (!useColors) return;\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit');\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch (e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch (e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function (_, k) {\n    return k.toUpperCase();\n  });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;else if (/^(no|off|false|disabled)$/i.test(val)) val = false;else if (val === 'null') val = null;else val = Number(val);\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function () {}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')();\n}\nvar stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts).split('\\n').map(function (str) {\n    return str.trim();\n  }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString() + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream(fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, {\n        autoClose: false\n      });\n      stream._type = 'fs';\n      break;\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n  stream._isStdio = true;\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n  debug.inspectOpts = {};\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}", "'use strict';\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten;\n\n/**\n * Recursive flatten function with depth.\n *\n * @param  {Array}  array\n * @param  {Array}  result\n * @param  {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth(array, result, depth) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i];\n    if (depth > 0 && Array.isArray(value)) {\n      flattenWithDepth(value, result, depth - 1);\n    } else {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param  {Array} array\n * @param  {Array} result\n * @return {Array}\n */\nfunction flattenForever(array, result) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i];\n    if (Array.isArray(value)) {\n      flattenForever(value, result);\n    } else {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param  {Array}  array\n * @param  {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten(array, depth) {\n  if (depth == null) {\n    return flattenForever(array, []);\n  }\n  return flattenWithDepth(array, [], depth);\n}", "/**\n * Expose `pathToRegexp`.\n */\n\nmodule.exports = pathToRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\\\.|\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param  {String|RegExp|Array} path\n * @param  {Array} keys\n * @param  {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathToRegexp(path, keys, options) {\n  options = options || {};\n  keys = keys || [];\n  var strict = options.strict;\n  var end = options.end !== false;\n  var flags = options.sensitive ? '' : 'i';\n  var lookahead = options.lookahead !== false;\n  var extraOffset = 0;\n  var keysOffset = keys.length;\n  var i = 0;\n  var name = 0;\n  var pos = 0;\n  var backtrack = '';\n  var m;\n  if (path instanceof RegExp) {\n    while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n      if (m[0][0] === '\\\\') continue;\n      keys.push({\n        name: m[1] || name++,\n        optional: false,\n        offset: m.index\n      });\n    }\n    return path;\n  }\n  if (Array.isArray(path)) {\n    // Map array parts into regexps and return their source. We also pass\n    // the same keys and options instance into every generation to get\n    // consistent matching groups before we join the sources together.\n    path = path.map(function (value) {\n      return pathToRegexp(value, keys, options).source;\n    });\n    return new RegExp(path.join('|'), flags);\n  }\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string, array of strings, or regular expression');\n  }\n  path = path.replace(/\\\\.|(\\/)?(\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?|[.*]|\\/\\(/g, function (match, slash, format, key, capture, star, optional, offset) {\n    if (match[0] === '\\\\') {\n      backtrack += match;\n      pos += 2;\n      return match;\n    }\n    if (match === '.') {\n      backtrack += '\\\\.';\n      extraOffset += 1;\n      pos += 1;\n      return '\\\\.';\n    }\n    if (slash || format) {\n      backtrack = '';\n    } else {\n      backtrack += path.slice(pos, offset);\n    }\n    pos = offset + match.length;\n    if (match === '*') {\n      extraOffset += 3;\n      return '(.*)';\n    }\n    if (match === '/(') {\n      backtrack += '/';\n      extraOffset += 2;\n      return '/(?:';\n    }\n    slash = slash || '';\n    format = format ? '\\\\.' : '';\n    optional = optional || '';\n    capture = capture ? capture.replace(/\\\\.|\\*/, function (m) {\n      return m === '*' ? '(.*)' : m;\n    }) : backtrack ? '((?:(?!/|' + backtrack + ').)+?)' : '([^/' + format + ']+?)';\n    keys.push({\n      name: key,\n      optional: !!optional,\n      offset: offset + extraOffset\n    });\n    var result = '(?:' + format + slash + capture + (star ? '((?:[/' + format + '].+?)?)' : '') + ')' + optional;\n    extraOffset += result.length - match.length;\n    return result;\n  });\n\n  // This is a workaround for handling unnamed matching groups.\n  while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n    if (m[0][0] === '\\\\') continue;\n    if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n      keys.splice(keysOffset + i, 0, {\n        name: name++,\n        // Unnamed matching groups must be consistently linear.\n        optional: false,\n        offset: m.index\n      });\n    }\n    i++;\n  }\n  path += strict ? '' : path[path.length - 1] === '/' ? '?' : '/?';\n\n  // If the path is non-ending, match until the end or a slash.\n  if (end) {\n    path += '$';\n  } else if (path[path.length - 1] !== '/') {\n    path += lookahead ? '(?=/|$)' : '(?:/|$)';\n  }\n  return new RegExp('^' + path, flags);\n}\n;", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\nfunction Layer(path, options, fn) {\n  if (!(this instanceof Layer)) {\n    return new Layer(path, options, fn);\n  }\n  debug('new %o', path);\n  var opts = options || {};\n  this.handle = fn;\n  this.name = fn.name || '<anonymous>';\n  this.params = undefined;\n  this.path = undefined;\n  this.regexp = pathRegexp(path, this.keys = [], opts);\n\n  // set fast path flags\n  this.regexp.fast_star = path === '*';\n  this.regexp.fast_slash = path === '/' && opts.end === false;\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n  var fn = this.handle;\n  if (fn.length !== 4) {\n    // not a standard error handler\n    return next(error);\n  }\n  try {\n    fn(error, req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n  var fn = this.handle;\n  if (fn.length > 3) {\n    // not a standard request handler\n    return next();\n  }\n  try {\n    fn(req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n  var match;\n  if (path != null) {\n    // fast path non-ending match for / (any path matches)\n    if (this.regexp.fast_slash) {\n      this.params = {};\n      this.path = '';\n      return true;\n    }\n\n    // fast path for * (everything matched in a param)\n    if (this.regexp.fast_star) {\n      this.params = {\n        '0': decode_param(path)\n      };\n      this.path = path;\n      return true;\n    }\n\n    // match the path\n    match = this.regexp.exec(path);\n  }\n  if (!match) {\n    this.params = undefined;\n    this.path = undefined;\n    return false;\n  }\n\n  // store values\n  this.params = {};\n  this.path = match[0];\n  var keys = this.keys;\n  var params = this.params;\n  for (var i = 1; i < match.length; i++) {\n    var key = keys[i - 1];\n    var prop = key.name;\n    var val = decode_param(match[i]);\n    if (val !== undefined || !hasOwnProperty.call(params, prop)) {\n      params[prop] = val;\n    }\n  }\n  return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return val;\n  }\n  try {\n    return decodeURIComponent(val);\n  } catch (err) {\n    if (err instanceof URIError) {\n      err.message = 'Failed to decode param \\'' + val + '\\'';\n      err.status = err.statusCode = 400;\n    }\n    throw err;\n  }\n}", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n  return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n    return method.toLowerCase();\n  });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n  return ['get', 'post', 'put', 'head', 'delete', 'options', 'trace', 'copy', 'lock', 'mkcol', 'move', 'purge', 'propfind', 'proppatch', 'unlock', 'report', 'mkactivity', 'checkout', 'merge', 'm-search', 'notify', 'subscribe', 'unsubscribe', 'patch', 'search', 'connect'];\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n  this.path = path;\n  this.stack = [];\n  debug('new %o', path);\n\n  // route handlers for various http methods\n  this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n  if (this.methods._all) {\n    return true;\n  }\n\n  // normalize name\n  var name = typeof method === 'string' ? method.toLowerCase() : method;\n  if (name === 'head' && !this.methods['head']) {\n    name = 'get';\n  }\n  return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n  var methods = Object.keys(this.methods);\n\n  // append automatic head\n  if (this.methods.get && !this.methods.head) {\n    methods.push('head');\n  }\n  for (var i = 0; i < methods.length; i++) {\n    // make upper case\n    methods[i] = methods[i].toUpperCase();\n  }\n  return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n  var idx = 0;\n  var stack = this.stack;\n  var sync = 0;\n  if (stack.length === 0) {\n    return done();\n  }\n  var method = typeof req.method === 'string' ? req.method.toLowerCase() : req.method;\n  if (method === 'head' && !this.methods['head']) {\n    method = 'get';\n  }\n  req.route = this;\n  next();\n  function next(err) {\n    // signal to exit route\n    if (err && err === 'route') {\n      return done();\n    }\n\n    // signal to exit router\n    if (err && err === 'router') {\n      return done(err);\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err);\n    }\n    var layer = stack[idx++];\n\n    // end of layers\n    if (!layer) {\n      return done(err);\n    }\n    if (layer.method && layer.method !== method) {\n      next(err);\n    } else if (err) {\n      layer.handle_error(err, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n    sync = 0;\n  }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n *   function check_something(req, res, next){\n *     next();\n *   };\n *\n *   function validate_user(req, res, next){\n *     next();\n *   };\n *\n *   route\n *   .all(validate_user)\n *   .all(check_something)\n *   .get(function(req, res, next){\n *     res.send('hello world');\n *   });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n  var handles = flatten(slice.call(arguments));\n  for (var i = 0; i < handles.length; i++) {\n    var handle = handles[i];\n    if (typeof handle !== 'function') {\n      var type = toString.call(handle);\n      var msg = 'Route.all() requires a callback function but got a ' + type;\n      throw new TypeError(msg);\n    }\n    var layer = Layer('/', {}, handle);\n    layer.method = undefined;\n    this.methods._all = true;\n    this.stack.push(layer);\n  }\n  return this;\n};\nmethods.forEach(function (method) {\n  Route.prototype[method] = function () {\n    var handles = flatten(slice.call(arguments));\n    for (var i = 0; i < handles.length; i++) {\n      var handle = handles[i];\n      if (typeof handle !== 'function') {\n        var type = toString.call(handle);\n        var msg = 'Route.' + method + '() requires a callback function but got a ' + type;\n        throw new Error(msg);\n      }\n      debug('%s %o', method, this.path);\n      var layer = Layer('/', {}, handle);\n      layer.method = method;\n      this.methods[method] = true;\n      this.stack.push(layer);\n    }\n    return this;\n  };\n});", "/**\n * Merge object b with object a.\n *\n *     var a = { foo: 'bar' }\n *       , b = { bar: 'baz' };\n *\n *     merge(a, b);\n *     // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function (a, b) {\n  if (a && b) {\n    for (var key in b) {\n      a[key] = b[key];\n    }\n  }\n  return a;\n};", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof');\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is a callable function\n * @public\n */\n\nvar proto = module.exports = function (options) {\n  var opts = options || {};\n  function router(req, res, next) {\n    router.handle(req, res, next);\n  }\n\n  // mixin Router class functions\n  setPrototypeOf(router, proto);\n  router.params = {};\n  router._params = [];\n  router.caseSensitive = opts.caseSensitive;\n  router.mergeParams = opts.mergeParams;\n  router.strict = opts.strict;\n  router.stack = [];\n  return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n *  app.param('user_id', function(req, res, next, id){\n *    User.find(id, function(err, user){\n *      if (err) {\n *        return next(err);\n *      } else if (!user) {\n *        return next(new Error('failed to load user'));\n *      }\n *      req.user = user;\n *      next();\n *    });\n *  });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n  // param logic\n  if (typeof name === 'function') {\n    deprecate('router.param(fn): Refactor to use path params');\n    this._params.push(name);\n    return;\n  }\n\n  // apply param functions\n  var params = this._params;\n  var len = params.length;\n  var ret;\n  if (name[0] === ':') {\n    deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead');\n    name = name.slice(1);\n  }\n  for (var i = 0; i < len; ++i) {\n    if (ret = params[i](name, fn)) {\n      fn = ret;\n    }\n  }\n\n  // ensure we end up with a\n  // middleware function\n  if ('function' !== typeof fn) {\n    throw new Error('invalid param() call for ' + name + ', got ' + fn);\n  }\n  (this.params[name] = this.params[name] || []).push(fn);\n  return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n  var self = this;\n  debug('dispatching %s %s', req.method, req.url);\n  var idx = 0;\n  var protohost = getProtohost(req.url) || '';\n  var removed = '';\n  var slashAdded = false;\n  var sync = 0;\n  var paramcalled = {};\n\n  // store options for OPTIONS request\n  // only used if OPTIONS request\n  var options = [];\n\n  // middleware and routes\n  var stack = self.stack;\n\n  // manage inter-router variables\n  var parentParams = req.params;\n  var parentUrl = req.baseUrl || '';\n  var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n  // setup next layer\n  req.next = next;\n\n  // for options requests, respond with a default if nothing else responds\n  if (req.method === 'OPTIONS') {\n    done = wrap(done, function (old, err) {\n      if (err || options.length === 0) return old(err);\n      sendOptionsResponse(res, options, old);\n    });\n  }\n\n  // setup basic req values\n  req.baseUrl = parentUrl;\n  req.originalUrl = req.originalUrl || req.url;\n  next();\n  function next(err) {\n    var layerError = err === 'route' ? null : err;\n\n    // remove added slash\n    if (slashAdded) {\n      req.url = req.url.slice(1);\n      slashAdded = false;\n    }\n\n    // restore altered req.url\n    if (removed.length !== 0) {\n      req.baseUrl = parentUrl;\n      req.url = protohost + removed + req.url.slice(protohost.length);\n      removed = '';\n    }\n\n    // signal to exit router\n    if (layerError === 'router') {\n      setImmediate(done, null);\n      return;\n    }\n\n    // no more matching layers\n    if (idx >= stack.length) {\n      setImmediate(done, layerError);\n      return;\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err);\n    }\n\n    // get pathname of request\n    var path = getPathname(req);\n    if (path == null) {\n      return done(layerError);\n    }\n\n    // find next matching layer\n    var layer;\n    var match;\n    var route;\n    while (match !== true && idx < stack.length) {\n      layer = stack[idx++];\n      match = matchLayer(layer, path);\n      route = layer.route;\n      if (typeof match !== 'boolean') {\n        // hold on to layerError\n        layerError = layerError || match;\n      }\n      if (match !== true) {\n        continue;\n      }\n      if (!route) {\n        // process non-route handlers normally\n        continue;\n      }\n      if (layerError) {\n        // routes do not match with a pending error\n        match = false;\n        continue;\n      }\n      var method = req.method;\n      var has_method = route._handles_method(method);\n\n      // build up automatic options response\n      if (!has_method && method === 'OPTIONS') {\n        appendMethods(options, route._options());\n      }\n\n      // don't even bother matching route\n      if (!has_method && method !== 'HEAD') {\n        match = false;\n      }\n    }\n\n    // no match\n    if (match !== true) {\n      return done(layerError);\n    }\n\n    // store route for dispatch on change\n    if (route) {\n      req.route = route;\n    }\n\n    // Capture one-time layer values\n    req.params = self.mergeParams ? mergeParams(layer.params, parentParams) : layer.params;\n    var layerPath = layer.path;\n\n    // this should be done for the layer\n    self.process_params(layer, paramcalled, req, res, function (err) {\n      if (err) {\n        next(layerError || err);\n      } else if (route) {\n        layer.handle_request(req, res, next);\n      } else {\n        trim_prefix(layer, layerError, layerPath, path);\n      }\n      sync = 0;\n    });\n  }\n  function trim_prefix(layer, layerError, layerPath, path) {\n    if (layerPath.length !== 0) {\n      // Validate path is a prefix match\n      if (layerPath !== path.slice(0, layerPath.length)) {\n        next(layerError);\n        return;\n      }\n\n      // Validate path breaks on a path separator\n      var c = path[layerPath.length];\n      if (c && c !== '/' && c !== '.') return next(layerError);\n\n      // Trim off the part of the url that matches the route\n      // middleware (.use stuff) needs to have the path stripped\n      debug('trim prefix (%s) from url %s', layerPath, req.url);\n      removed = layerPath;\n      req.url = protohost + req.url.slice(protohost.length + removed.length);\n\n      // Ensure leading slash\n      if (!protohost && req.url[0] !== '/') {\n        req.url = '/' + req.url;\n        slashAdded = true;\n      }\n\n      // Setup base URL (no trailing slash)\n      req.baseUrl = parentUrl + (removed[removed.length - 1] === '/' ? removed.substring(0, removed.length - 1) : removed);\n    }\n    debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n    if (layerError) {\n      layer.handle_error(layerError, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n  }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n  var params = this.params;\n\n  // captured parameters from the layer, keys and values\n  var keys = layer.keys;\n\n  // fast track\n  if (!keys || keys.length === 0) {\n    return done();\n  }\n  var i = 0;\n  var name;\n  var paramIndex = 0;\n  var key;\n  var paramVal;\n  var paramCallbacks;\n  var paramCalled;\n\n  // process params in order\n  // param callbacks can be async\n  function param(err) {\n    if (err) {\n      return done(err);\n    }\n    if (i >= keys.length) {\n      return done();\n    }\n    paramIndex = 0;\n    key = keys[i++];\n    name = key.name;\n    paramVal = req.params[name];\n    paramCallbacks = params[name];\n    paramCalled = called[name];\n    if (paramVal === undefined || !paramCallbacks) {\n      return param();\n    }\n\n    // param previously called with same value or error occurred\n    if (paramCalled && (paramCalled.match === paramVal || paramCalled.error && paramCalled.error !== 'route')) {\n      // restore value\n      req.params[name] = paramCalled.value;\n\n      // next param\n      return param(paramCalled.error);\n    }\n    called[name] = paramCalled = {\n      error: null,\n      match: paramVal,\n      value: paramVal\n    };\n    paramCallback();\n  }\n\n  // single param callbacks\n  function paramCallback(err) {\n    var fn = paramCallbacks[paramIndex++];\n\n    // store updated value\n    paramCalled.value = req.params[key.name];\n    if (err) {\n      // store error\n      paramCalled.error = err;\n      param(err);\n      return;\n    }\n    if (!fn) return param();\n    try {\n      fn(req, res, paramCallback, paramVal, key.name);\n    } catch (e) {\n      paramCallback(e);\n    }\n  }\n  param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate router.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n  var callbacks = flatten(slice.call(arguments, offset));\n  if (callbacks.length === 0) {\n    throw new TypeError('Router.use() requires a middleware function');\n  }\n  for (var i = 0; i < callbacks.length; i++) {\n    var fn = callbacks[i];\n    if (typeof fn !== 'function') {\n      throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn));\n    }\n\n    // add the middleware\n    debug('use %o %s', path, fn.name || '<anonymous>');\n    var layer = new Layer(path, {\n      sensitive: this.caseSensitive,\n      strict: false,\n      end: false\n    }, fn);\n    layer.route = undefined;\n    this.stack.push(layer);\n  }\n  return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n  var route = new Route(path);\n  var layer = new Layer(path, {\n    sensitive: this.caseSensitive,\n    strict: this.strict,\n    end: true\n  }, route.dispatch.bind(route));\n  layer.route = route;\n  this.stack.push(layer);\n  return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function (method) {\n  proto[method] = function (path) {\n    var route = this.route(path);\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n  for (var i = 0; i < addition.length; i++) {\n    var method = addition[i];\n    if (list.indexOf(method) === -1) {\n      list.push(method);\n    }\n  }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n  try {\n    return parseUrl(req).pathname;\n  } catch (err) {\n    return undefined;\n  }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n  if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n    return undefined;\n  }\n  var searchIndex = url.indexOf('?');\n  var pathLength = searchIndex !== -1 ? searchIndex : url.length;\n  var fqdnIndex = url.slice(0, pathLength).indexOf('://');\n  return fqdnIndex !== -1 ? url.substring(0, url.indexOf('/', 3 + fqdnIndex)) : undefined;\n}\n\n// get type for error message\nfunction gettype(obj) {\n  var type = typeof obj;\n  if (type !== 'object') {\n    return type;\n  }\n\n  // inspect [[Class]] for objects\n  return toString.call(obj).replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n  try {\n    return layer.match(path);\n  } catch (err) {\n    return err;\n  }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n  if (typeof parent !== 'object' || !parent) {\n    return params;\n  }\n\n  // make copy of parent for base\n  var obj = mixin({}, parent);\n\n  // simple non-numeric merging\n  if (!(0 in params) || !(0 in parent)) {\n    return mixin(obj, params);\n  }\n  var i = 0;\n  var o = 0;\n\n  // determine numeric gaps\n  while (i in params) {\n    i++;\n  }\n  while (o in parent) {\n    o++;\n  }\n\n  // offset numeric indices in params before merge\n  for (i--; i >= 0; i--) {\n    params[i + o] = params[i];\n\n    // create holes for the merge when necessary\n    if (i < o) {\n      delete params[i];\n    }\n  }\n  return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n  var props = new Array(arguments.length - 2);\n  var vals = new Array(arguments.length - 2);\n  for (var i = 0; i < props.length; i++) {\n    props[i] = arguments[i + 2];\n    vals[i] = obj[props[i]];\n  }\n  return function () {\n    // restore vals\n    for (var i = 0; i < props.length; i++) {\n      obj[props[i]] = vals[i];\n    }\n    return fn.apply(this, arguments);\n  };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n  try {\n    var body = options.join(',');\n    res.set('Allow', body);\n    res.send(body);\n  } catch (err) {\n    next(err);\n  }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n  return function proxy() {\n    var args = new Array(arguments.length + 1);\n    args[0] = old;\n    for (var i = 0, len = arguments.length; i < len; i++) {\n      args[i + 1] = arguments[i];\n    }\n    fn.apply(this, args);\n  };\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar setPrototypeOf = require('setprototypeof');\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function (app) {\n  return function expressInit(req, res, next) {\n    if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n    req.res = res;\n    res.req = req;\n    req.next = next;\n    setPrototypeOf(req, app.request);\n    setPrototypeOf(res, app.response);\n    res.locals = res.locals || Object.create(null);\n    next();\n  };\n};", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\nvar merge = require('utils-merge');\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n  var opts = merge({}, options);\n  var queryparse = qs.parse;\n  if (typeof options === 'function') {\n    queryparse = options;\n    opts = undefined;\n  }\n  if (opts !== undefined && opts.allowPrototypes === undefined) {\n    // back-compat for qs module\n    opts.allowPrototypes = true;\n  }\n  return function query(req, res, next) {\n    if (!req.query) {\n      var val = parseUrl(req).query;\n      req.query = queryparse(val, opts);\n    }\n    next();\n  };\n};", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n *   - `defaultEngine` the default template engine name\n *   - `engines` template engine require() cache\n *   - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n  var opts = options || {};\n  this.defaultEngine = opts.defaultEngine;\n  this.ext = extname(name);\n  this.name = name;\n  this.root = opts.root;\n  if (!this.ext && !this.defaultEngine) {\n    throw new Error('No default engine was specified and no extension was provided.');\n  }\n  var fileName = name;\n  if (!this.ext) {\n    // get extension from default engine name\n    this.ext = this.defaultEngine[0] !== '.' ? '.' + this.defaultEngine : this.defaultEngine;\n    fileName += this.ext;\n  }\n  if (!opts.engines[this.ext]) {\n    // load engine\n    var mod = this.ext.slice(1);\n    debug('require \"%s\"', mod);\n\n    // default engine export\n    var fn = require(mod).__express;\n    if (typeof fn !== 'function') {\n      throw new Error('Module \"' + mod + '\" does not provide a view engine.');\n    }\n    opts.engines[this.ext] = fn;\n  }\n\n  // store loaded engine\n  this.engine = opts.engines[this.ext];\n\n  // lookup path\n  this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n  var path;\n  var roots = [].concat(this.root);\n  debug('lookup \"%s\"', name);\n  for (var i = 0; i < roots.length && !path; i++) {\n    var root = roots[i];\n\n    // resolve the path\n    var loc = resolve(root, name);\n    var dir = dirname(loc);\n    var file = basename(loc);\n\n    // resolve the file\n    path = this.resolve(dir, file);\n  }\n  return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n  debug('render \"%s\"', this.path);\n  this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n  var ext = this.ext;\n\n  // <path>.<ext>\n  var path = join(dir, file);\n  var stat = tryStat(path);\n  if (stat && stat.isFile()) {\n    return path;\n  }\n\n  // <path>/index.<ext>\n  path = join(dir, basename(file, ext), 'index' + ext);\n  stat = tryStat(path);\n  if (stat && stat.isFile()) {\n    return path;\n  }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n  debug('stat \"%s\"', path);\n  try {\n    return fs.statSync(path);\n  } catch (e) {\n    return undefined;\n  }\n}", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer');\nvar Buffer = buffer.Buffer;\n\n// alternative to using Object.keys for old browsers\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n}\nSafeBuffer.prototype = Object.create(Buffer.prototype);\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer);\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n  return Buffer(arg, encodingOrOffset, length);\n};\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  var buf = Buffer(size);\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n  return buf;\n};\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return Buffer(size);\n};\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return buffer.SlowBuffer(size);\n};", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = contentDisposition;\nmodule.exports.parse = parse;\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename;\nvar Buffer = require('safe-buffer').Buffer;\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g; // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/;\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g;\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g;\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g; // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g;\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g; // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/;\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/;\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/; // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition(filename, options) {\n  var opts = options || {};\n\n  // get type\n  var type = opts.type || 'attachment';\n\n  // get parameters\n  var params = createparams(filename, opts.fallback);\n\n  // format into string\n  return format(new ContentDisposition(type, params));\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams(filename, fallback) {\n  if (filename === undefined) {\n    return;\n  }\n  var params = {};\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string');\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true;\n  }\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean');\n  }\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string');\n  }\n\n  // restrict to file base name\n  var name = basename(filename);\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name);\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string' ? fallback && getlatin1(name) : basename(fallback);\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name;\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name;\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback ? fallbackName : name;\n  }\n  return params;\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format(obj) {\n  var parameters = obj.parameters;\n  var type = obj.type;\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type');\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase();\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param;\n    var params = Object.keys(parameters).sort();\n    for (var i = 0; i < params.length; i++) {\n      param = params[i];\n      var val = param.substr(-1) === '*' ? ustring(parameters[param]) : qstring(parameters[param]);\n      string += '; ' + param + '=' + val;\n    }\n  }\n  return string;\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield(str) {\n  var match = EXT_VALUE_REGEXP.exec(str);\n  if (!match) {\n    throw new TypeError('invalid extended field value');\n  }\n  var charset = match[1].toLowerCase();\n  var encoded = match[2];\n  var value;\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode);\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary);\n      break;\n    case 'utf-8':\n      value = Buffer.from(binary, 'binary').toString('utf8');\n      break;\n    default:\n      throw new TypeError('unsupported charset in extended field');\n  }\n  return value;\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1(val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?');\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse(string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required');\n  }\n  var match = DISPOSITION_TYPE_REGEXP.exec(string);\n  if (!match) {\n    throw new TypeError('invalid type format');\n  }\n\n  // normalize type\n  var index = match[0].length;\n  var type = match[1].toLowerCase();\n  var key;\n  var names = [];\n  var params = {};\n  var value;\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';' ? index - 1 : index;\n\n  // match parameters\n  while (match = PARAM_REGEXP.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format');\n    }\n    index += match[0].length;\n    key = match[1].toLowerCase();\n    value = match[2];\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter');\n    }\n    names.push(key);\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1);\n      value = decodefield(value);\n\n      // overwrite existing value\n      params[key] = value;\n      continue;\n    }\n    if (typeof params[key] === 'string') {\n      continue;\n    }\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value.substr(1, value.length - 2).replace(QESC_REGEXP, '$1');\n    }\n    params[key] = value;\n  }\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format');\n  }\n  return new ContentDisposition(type, params);\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode(str, hex) {\n  return String.fromCharCode(parseInt(hex, 16));\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode(char) {\n  return '%' + String(char).charCodeAt(0).toString(16).toUpperCase();\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring(val) {\n  var str = String(val);\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"';\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring(val) {\n  var str = String(val);\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode);\n  return 'UTF-8\\'\\'' + encoded;\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition(type, parameters) {\n  this.type = type;\n  this.parameters = parameters;\n}", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') || plural(ms, h, 'hour') || plural(ms, m, 'minute') || plural(ms, s, 'second') || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}", "/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0,\n    i;\n  for (i in namespace) {\n    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    args[0] = exports.coerce(args[0]);\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n  exports.names = [];\n  exports.skips = [];\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = ['lightseagreen', 'forestgreen', 'goldenrod', 'dodgerblue', 'darkorchid', 'crimson'];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n  // is firebug? http://stackoverflow.com/a/398120/376773\n  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n  // is firefox >= v31?\n  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n  // double check webkit in userAgent just in case we are in a worker\n  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function (v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n  if (!useColors) return;\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit');\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch (e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch (e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function (_, k) {\n    return k.toUpperCase();\n  });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;else if (/^(no|off|false|disabled)$/i.test(val)) val = false;else if (val === 'null') val = null;else val = Number(val);\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function () {}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')();\n}\nvar stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts).split('\\n').map(function (str) {\n    return str.trim();\n  }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function (v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString() + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream(fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, {\n        autoClose: false\n      });\n      stream._type = 'fs';\n      break;\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n  stream._isStdio = true;\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n  debug.inspectOpts = {};\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = encodeUrl;\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g;\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2';\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl(url) {\n  return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI);\n}", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = etag;\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto');\nvar Stats = require('fs').Stats;\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag(entity) {\n  if (entity.length === 0) {\n    // fast-path empty\n    return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"';\n  }\n\n  // compute hash of entity\n  var hash = crypto.createHash('sha1').update(entity, 'utf8').digest('base64').substring(0, 27);\n\n  // compute length of entity\n  var len = typeof entity === 'string' ? Buffer.byteLength(entity, 'utf8') : entity.length;\n  return '\"' + len.toString(16) + '-' + hash + '\"';\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag(entity, options) {\n  if (entity == null) {\n    throw new TypeError('argument entity is required');\n  }\n\n  // support fs.Stats object\n  var isStats = isstats(entity);\n  var weak = options && typeof options.weak === 'boolean' ? options.weak : isStats;\n\n  // validate argument\n  if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n    throw new TypeError('argument entity must be string, Buffer, or fs.Stats');\n  }\n\n  // generate entity tag\n  var tag = isStats ? stattag(entity) : entitytag(entity);\n  return weak ? 'W/' + tag : tag;\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats(obj) {\n  // genuine fs.Stats\n  if (typeof Stats === 'function' && obj instanceof Stats) {\n    return true;\n  }\n\n  // quack quack\n  return obj && typeof obj === 'object' && 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' && 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' && 'ino' in obj && typeof obj.ino === 'number' && 'size' in obj && typeof obj.size === 'number';\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag(stat) {\n  var mtime = stat.mtime.getTime().toString(16);\n  var size = stat.size.toString(16);\n  return '\"' + size + '-' + mtime + '\"';\n}", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh;\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh(reqHeaders, resHeaders) {\n  // fields\n  var modifiedSince = reqHeaders['if-modified-since'];\n  var noneMatch = reqHeaders['if-none-match'];\n\n  // unconditional request\n  if (!modifiedSince && !noneMatch) {\n    return false;\n  }\n\n  // Always return stale when Cache-Control: no-cache\n  // to support end-to-end reload requests\n  // https://tools.ietf.org/html/rfc2616#section-14.9.4\n  var cacheControl = reqHeaders['cache-control'];\n  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n    return false;\n  }\n\n  // if-none-match\n  if (noneMatch && noneMatch !== '*') {\n    var etag = resHeaders['etag'];\n    if (!etag) {\n      return false;\n    }\n    var etagStale = true;\n    var matches = parseTokenList(noneMatch);\n    for (var i = 0; i < matches.length; i++) {\n      var match = matches[i];\n      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n        etagStale = false;\n        break;\n      }\n    }\n    if (etagStale) {\n      return false;\n    }\n  }\n\n  // if-modified-since\n  if (modifiedSince) {\n    var lastModified = resHeaders['last-modified'];\n    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince));\n    if (modifiedStale) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate(date) {\n  var timestamp = date && Date.parse(date);\n\n  // istanbul ignore next: guard against date.js Date.parse patching\n  return typeof timestamp === 'number' ? timestamp : NaN;\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList(str) {\n  var end = 0;\n  var list = [];\n  var start = 0;\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20:\n        /*   */\n        if (start === end) {\n          start = end = i + 1;\n        }\n        break;\n      case 0x2c:\n        /* , */\n        list.push(str.substring(start, end));\n        start = end = i + 1;\n        break;\n      default:\n        end = i + 1;\n        break;\n    }\n  }\n\n  // final token\n  list.push(str.substring(start, end));\n  return list;\n}", "{\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/bdoc\":[\"bdoc\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/font-tdpfr\":[\"pfr\"],\"application/font-woff\":[],\"application/font-woff2\":[],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/prs.cww\":[\"cww\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[],\"application/x-msdownload\":[\"com\",\"bat\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"wmf\",\"emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[],\"audio/adpcm\":[\"adp\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mp3\":[],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[],\"audio/webm\":[\"weba\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[],\"audio/x-wav\":[],\"audio/xm\":[\"xm\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/apng\":[\"apng\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/ief\":[\"ief\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/ktx\":[\"ktx\"],\"image/png\":[\"png\"],\"image/prs.btif\":[\"btif\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/tiff\":[\"tiff\",\"tif\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/webp\":[\"webp\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[],\"image/x-pcx\":[\"pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.vtu\":[\"vtu\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"x3db\",\"x3dbz\"],\"model/x3d+vrml\":[\"x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/hjson\":[\"hjson\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/slim\":[\"slim\",\"slm\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/vtt\":[\"vtt\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"text/xml\":[],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/webm\":[\"webm\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]}", "var path = require('path');\nvar fs = require('fs');\nfunction Mime() {\n  // Map of extension -> mime type\n  this.types = Object.create(null);\n\n  // Map of mime type -> extension\n  this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n  for (var type in map) {\n    var exts = map[type];\n    for (var i = 0; i < exts.length; i++) {\n      if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n        console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' + this.types[exts[i]] + ' to ' + type);\n      }\n      this.types[exts[i]] = type;\n    }\n\n    // Default extension is the first one we encounter\n    if (!this.extensions[type]) {\n      this.extensions[type] = exts[0];\n    }\n  }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected).  Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function (file) {\n  this._loading = file;\n  // Read file and split into lines\n  var map = {},\n    content = fs.readFileSync(file, 'ascii'),\n    lines = content.split(/[\\r\\n]+/);\n  lines.forEach(function (line) {\n    // Clean up whitespace/comments, and split into fields\n    var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n    map[fields.shift()] = fields;\n  });\n  this.define(map);\n  this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function (path, fallback) {\n  var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n  return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function (mimeType) {\n  var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n  return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n  lookup: function (mimeType, fallback) {\n    // Assume text types are utf8\n    return /^text\\/|^application\\/(javascript|json)/.test(mimeType) ? 'UTF-8' : fallback;\n  }\n};\nmodule.exports = mime;", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = rangeParser;\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser(size, str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n  var index = str.indexOf('=');\n  if (index === -1) {\n    return -2;\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',');\n  var ranges = [];\n\n  // add ranges type\n  ranges.type = str.slice(0, index);\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-');\n    var start = parseInt(range[0], 10);\n    var end = parseInt(range[1], 10);\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end;\n      end = size - 1;\n      // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1;\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1;\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue;\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    });\n  }\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1;\n  }\n  return options && options.combine ? combineRanges(ranges) : ranges;\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges(ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart);\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i];\n    var current = ordered[j];\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range;\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end;\n      current.index = Math.min(current.index, range.index);\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1;\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex);\n\n  // copy ranges type\n  combined.type = ranges.type;\n  return combined;\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex(range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  };\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex(range) {\n  return {\n    start: range.start,\n    end: range.end\n  };\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex(a, b) {\n  return a.index - b.index;\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart(a, b) {\n  return a.start - b.start;\n}", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar createError = require('http-errors');\nvar debug = require('debug')('send');\nvar deprecate = require('depd')('send');\nvar destroy = require('destroy');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar etag = require('etag');\nvar fresh = require('fresh');\nvar fs = require('fs');\nvar mime = require('mime');\nvar ms = require('ms');\nvar onFinished = require('on-finished');\nvar parseRange = require('range-parser');\nvar path = require('path');\nvar statuses = require('statuses');\nvar Stream = require('stream');\nvar util = require('util');\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname;\nvar join = path.join;\nvar normalize = path.normalize;\nvar resolve = path.resolve;\nvar sep = path.sep;\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/;\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000; // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send;\nmodule.exports.mime = mime;\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send(req, path, options) {\n  return new SendStream(req, path, options);\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream(req, path, options) {\n  Stream.call(this);\n  var opts = options || {};\n  this.options = opts;\n  this.path = path;\n  this.req = req;\n  this._acceptRanges = opts.acceptRanges !== undefined ? Boolean(opts.acceptRanges) : true;\n  this._cacheControl = opts.cacheControl !== undefined ? Boolean(opts.cacheControl) : true;\n  this._etag = opts.etag !== undefined ? Boolean(opts.etag) : true;\n  this._dotfiles = opts.dotfiles !== undefined ? opts.dotfiles : 'ignore';\n  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n    throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"');\n  }\n  this._hidden = Boolean(opts.hidden);\n  if (opts.hidden !== undefined) {\n    deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead');\n  }\n\n  // legacy support\n  if (opts.dotfiles === undefined) {\n    this._dotfiles = undefined;\n  }\n  this._extensions = opts.extensions !== undefined ? normalizeList(opts.extensions, 'extensions option') : [];\n  this._immutable = opts.immutable !== undefined ? Boolean(opts.immutable) : false;\n  this._index = opts.index !== undefined ? normalizeList(opts.index, 'index option') : ['index.html'];\n  this._lastModified = opts.lastModified !== undefined ? Boolean(opts.lastModified) : true;\n  this._maxage = opts.maxAge || opts.maxage;\n  this._maxage = typeof this._maxage === 'string' ? ms(this._maxage) : Number(this._maxage);\n  this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0;\n  this._root = opts.root ? resolve(opts.root) : null;\n  if (!this._root && opts.from) {\n    this.from(opts.from);\n  }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream);\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag(val) {\n  this._etag = Boolean(val);\n  debug('etag %s', this._etag);\n  return this;\n}, 'send.etag: pass etag as option');\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden(val) {\n  this._hidden = Boolean(val);\n  this._dotfiles = undefined;\n  debug('hidden %s', this._hidden);\n  return this;\n}, 'send.hidden: use dotfiles option');\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index(paths) {\n  var index = !paths ? [] : normalizeList(paths, 'paths argument');\n  debug('index %o', paths);\n  this._index = index;\n  return this;\n}, 'send.index: pass index as option');\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root(path) {\n  this._root = resolve(String(path));\n  debug('root %s', this._root);\n  return this;\n};\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root, 'send.from: pass root as option');\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root, 'send.root: pass root as option');\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage(maxAge) {\n  this._maxage = typeof maxAge === 'string' ? ms(maxAge) : Number(maxAge);\n  this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0;\n  debug('max-age %d', this._maxage);\n  return this;\n}, 'send.maxage: pass maxAge as option');\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error(status, err) {\n  // emit if listeners instead of responding\n  if (hasListeners(this, 'error')) {\n    return this.emit('error', createHttpError(status, err));\n  }\n  var res = this.res;\n  var msg = statuses.message[status] || String(status);\n  var doc = createHtmlDocument('Error', escapeHtml(msg));\n\n  // clear existing headers\n  clearHeaders(res);\n\n  // add error headers\n  if (err && err.headers) {\n    setHeaders(res, err.headers);\n  }\n\n  // send basic response\n  res.statusCode = status;\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8');\n  res.setHeader('Content-Length', Buffer.byteLength(doc));\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\");\n  res.setHeader('X-Content-Type-Options', 'nosniff');\n  res.end(doc);\n};\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash() {\n  return this.path[this.path.length - 1] === '/';\n};\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET() {\n  return this.req.headers['if-match'] || this.req.headers['if-unmodified-since'] || this.req.headers['if-none-match'] || this.req.headers['if-modified-since'];\n};\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure() {\n  var req = this.req;\n  var res = this.res;\n\n  // if-match\n  var match = req.headers['if-match'];\n  if (match) {\n    var etag = res.getHeader('ETag');\n    return !etag || match !== '*' && parseTokenList(match).every(function (match) {\n      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag;\n    });\n  }\n\n  // if-unmodified-since\n  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since']);\n  if (!isNaN(unmodifiedSince)) {\n    var lastModified = parseHttpDate(res.getHeader('Last-Modified'));\n    return isNaN(lastModified) || lastModified > unmodifiedSince;\n  }\n  return false;\n};\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields() {\n  var res = this.res;\n  res.removeHeader('Content-Encoding');\n  res.removeHeader('Content-Language');\n  res.removeHeader('Content-Length');\n  res.removeHeader('Content-Range');\n  res.removeHeader('Content-Type');\n};\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified() {\n  var res = this.res;\n  debug('not modified');\n  this.removeContentHeaderFields();\n  res.statusCode = 304;\n  res.end();\n};\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent() {\n  var err = new Error('Can\\'t set headers after they are sent.');\n  debug('headers already sent');\n  this.error(500, err);\n};\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable() {\n  var statusCode = this.res.statusCode;\n  return statusCode >= 200 && statusCode < 300 || statusCode === 304;\n};\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError(error) {\n  switch (error.code) {\n    case 'ENAMETOOLONG':\n    case 'ENOENT':\n    case 'ENOTDIR':\n      this.error(404, error);\n      break;\n    default:\n      this.error(500, error);\n      break;\n  }\n};\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh() {\n  return fresh(this.req.headers, {\n    etag: this.res.getHeader('ETag'),\n    'last-modified': this.res.getHeader('Last-Modified')\n  });\n};\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh() {\n  var ifRange = this.req.headers['if-range'];\n  if (!ifRange) {\n    return true;\n  }\n\n  // if-range as etag\n  if (ifRange.indexOf('\"') !== -1) {\n    var etag = this.res.getHeader('ETag');\n    return Boolean(etag && ifRange.indexOf(etag) !== -1);\n  }\n\n  // if-range as modified date\n  var lastModified = this.res.getHeader('Last-Modified');\n  return parseHttpDate(lastModified) <= parseHttpDate(ifRange);\n};\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect(path) {\n  var res = this.res;\n  if (hasListeners(this, 'directory')) {\n    this.emit('directory', res, path);\n    return;\n  }\n  if (this.hasTrailingSlash()) {\n    this.error(403);\n    return;\n  }\n  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'));\n  var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc));\n\n  // redirect\n  res.statusCode = 301;\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8');\n  res.setHeader('Content-Length', Buffer.byteLength(doc));\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\");\n  res.setHeader('X-Content-Type-Options', 'nosniff');\n  res.setHeader('Location', loc);\n  res.end(doc);\n};\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe(res) {\n  // root path\n  var root = this._root;\n\n  // references\n  this.res = res;\n\n  // decode the path\n  var path = decode(this.path);\n  if (path === -1) {\n    this.error(400);\n    return res;\n  }\n\n  // null byte(s)\n  if (~path.indexOf('\\0')) {\n    this.error(400);\n    return res;\n  }\n  var parts;\n  if (root !== null) {\n    // normalize\n    if (path) {\n      path = normalize('.' + sep + path);\n    }\n\n    // malicious path\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path);\n      this.error(403);\n      return res;\n    }\n\n    // explode path parts\n    parts = path.split(sep);\n\n    // join / normalize from optional root dir\n    path = normalize(join(root, path));\n  } else {\n    // \"..\" is malicious without \"root\"\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path);\n      this.error(403);\n      return res;\n    }\n\n    // explode path parts\n    parts = normalize(path).split(sep);\n\n    // resolve the path\n    path = resolve(path);\n  }\n\n  // dotfile handling\n  if (containsDotFile(parts)) {\n    var access = this._dotfiles;\n\n    // legacy support\n    if (access === undefined) {\n      access = parts[parts.length - 1][0] === '.' ? this._hidden ? 'allow' : 'ignore' : 'allow';\n    }\n    debug('%s dotfile \"%s\"', access, path);\n    switch (access) {\n      case 'allow':\n        break;\n      case 'deny':\n        this.error(403);\n        return res;\n      case 'ignore':\n      default:\n        this.error(404);\n        return res;\n    }\n  }\n\n  // index file support\n  if (this._index.length && this.hasTrailingSlash()) {\n    this.sendIndex(path);\n    return res;\n  }\n  this.sendFile(path);\n  return res;\n};\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send(path, stat) {\n  var len = stat.size;\n  var options = this.options;\n  var opts = {};\n  var res = this.res;\n  var req = this.req;\n  var ranges = req.headers.range;\n  var offset = options.start || 0;\n  if (headersSent(res)) {\n    // impossible to send now\n    this.headersAlreadySent();\n    return;\n  }\n  debug('pipe \"%s\"', path);\n\n  // set header fields\n  this.setHeader(path, stat);\n\n  // set content-type\n  this.type(path);\n\n  // conditional GET support\n  if (this.isConditionalGET()) {\n    if (this.isPreconditionFailure()) {\n      this.error(412);\n      return;\n    }\n    if (this.isCachable() && this.isFresh()) {\n      this.notModified();\n      return;\n    }\n  }\n\n  // adjust len to start/end options\n  len = Math.max(0, len - offset);\n  if (options.end !== undefined) {\n    var bytes = options.end - offset + 1;\n    if (len > bytes) len = bytes;\n  }\n\n  // Range support\n  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n    // parse\n    ranges = parseRange(len, ranges, {\n      combine: true\n    });\n\n    // If-Range support\n    if (!this.isRangeFresh()) {\n      debug('range stale');\n      ranges = -2;\n    }\n\n    // unsatisfiable\n    if (ranges === -1) {\n      debug('range unsatisfiable');\n\n      // Content-Range\n      res.setHeader('Content-Range', contentRange('bytes', len));\n\n      // 416 Requested Range Not Satisfiable\n      return this.error(416, {\n        headers: {\n          'Content-Range': res.getHeader('Content-Range')\n        }\n      });\n    }\n\n    // valid (syntactically invalid/multiple ranges are treated as a regular response)\n    if (ranges !== -2 && ranges.length === 1) {\n      debug('range %j', ranges);\n\n      // Content-Range\n      res.statusCode = 206;\n      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]));\n\n      // adjust for requested range\n      offset += ranges[0].start;\n      len = ranges[0].end - ranges[0].start + 1;\n    }\n  }\n\n  // clone options\n  for (var prop in options) {\n    opts[prop] = options[prop];\n  }\n\n  // set read options\n  opts.start = offset;\n  opts.end = Math.max(offset, offset + len - 1);\n\n  // content-length\n  res.setHeader('Content-Length', len);\n\n  // HEAD support\n  if (req.method === 'HEAD') {\n    res.end();\n    return;\n  }\n  this.stream(path, opts);\n};\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile(path) {\n  var i = 0;\n  var self = this;\n  debug('stat \"%s\"', path);\n  fs.stat(path, function onstat(err, stat) {\n    if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n      // not found, check extensions\n      return next(err);\n    }\n    if (err) return self.onStatError(err);\n    if (stat.isDirectory()) return self.redirect(path);\n    self.emit('file', path, stat);\n    self.send(path, stat);\n  });\n  function next(err) {\n    if (self._extensions.length <= i) {\n      return err ? self.onStatError(err) : self.error(404);\n    }\n    var p = path + '.' + self._extensions[i++];\n    debug('stat \"%s\"', p);\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err);\n      if (stat.isDirectory()) return next();\n      self.emit('file', p, stat);\n      self.send(p, stat);\n    });\n  }\n};\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex(path) {\n  var i = -1;\n  var self = this;\n  function next(err) {\n    if (++i >= self._index.length) {\n      if (err) return self.onStatError(err);\n      return self.error(404);\n    }\n    var p = join(path, self._index[i]);\n    debug('stat \"%s\"', p);\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err);\n      if (stat.isDirectory()) return next();\n      self.emit('file', p, stat);\n      self.send(p, stat);\n    });\n  }\n  next();\n};\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream(path, options) {\n  var self = this;\n  var res = this.res;\n\n  // pipe\n  var stream = fs.createReadStream(path, options);\n  this.emit('stream', stream);\n  stream.pipe(res);\n\n  // cleanup\n  function cleanup() {\n    destroy(stream, true);\n  }\n\n  // response finished, cleanup\n  onFinished(res, cleanup);\n\n  // error handling\n  stream.on('error', function onerror(err) {\n    // clean up stream early\n    cleanup();\n\n    // error\n    self.onStatError(err);\n  });\n\n  // end\n  stream.on('end', function onend() {\n    self.emit('end');\n  });\n};\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type(path) {\n  var res = this.res;\n  if (res.getHeader('Content-Type')) return;\n  var type = mime.lookup(path);\n  if (!type) {\n    debug('no content-type');\n    return;\n  }\n  var charset = mime.charsets.lookup(type);\n  debug('content-type %s', type);\n  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));\n};\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader(path, stat) {\n  var res = this.res;\n  this.emit('headers', res, path, stat);\n  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n    debug('accept ranges');\n    res.setHeader('Accept-Ranges', 'bytes');\n  }\n  if (this._cacheControl && !res.getHeader('Cache-Control')) {\n    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000);\n    if (this._immutable) {\n      cacheControl += ', immutable';\n    }\n    debug('cache-control %s', cacheControl);\n    res.setHeader('Cache-Control', cacheControl);\n  }\n  if (this._lastModified && !res.getHeader('Last-Modified')) {\n    var modified = stat.mtime.toUTCString();\n    debug('modified %s', modified);\n    res.setHeader('Last-Modified', modified);\n  }\n  if (this._etag && !res.getHeader('ETag')) {\n    var val = etag(stat);\n    debug('etag %s', val);\n    res.setHeader('ETag', val);\n  }\n};\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders(res) {\n  var headers = getHeaderNames(res);\n  for (var i = 0; i < headers.length; i++) {\n    res.removeHeader(headers[i]);\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes(str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] !== '/') {\n      break;\n    }\n  }\n  return i > 1 ? '/' + str.substr(i) : str;\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile(parts) {\n  for (var i = 0; i < parts.length; i++) {\n    var part = parts[i];\n    if (part.length > 1 && part[0] === '.') {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange(type, size, range) {\n  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size;\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument(title, body) {\n  return '<!DOCTYPE html>\\n' + '<html lang=\"en\">\\n' + '<head>\\n' + '<meta charset=\"utf-8\">\\n' + '<title>' + title + '</title>\\n' + '</head>\\n' + '<body>\\n' + '<pre>' + body + '</pre>\\n' + '</body>\\n' + '</html>\\n';\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError(status, err) {\n  if (!err) {\n    return createError(status);\n  }\n  return err instanceof Error ? createError(status, err, {\n    expose: false\n  }) : createError(status, err);\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode(path) {\n  try {\n    return decodeURIComponent(path);\n  } catch (err) {\n    return -1;\n  }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames(res) {\n  return typeof res.getHeaderNames !== 'function' ? Object.keys(res._headers || {}) : res.getHeaderNames();\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners(emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function' ? emitter.listeners(type).length : emitter.listenerCount(type);\n  return count > 0;\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent(res) {\n  return typeof res.headersSent !== 'boolean' ? Boolean(res._header) : res.headersSent;\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList(val, name) {\n  var list = [].concat(val || []);\n  for (var i = 0; i < list.length; i++) {\n    if (typeof list[i] !== 'string') {\n      throw new TypeError(name + ' must be array of strings or false');\n    }\n  }\n  return list;\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate(date) {\n  var timestamp = date && Date.parse(date);\n  return typeof timestamp === 'number' ? timestamp : NaN;\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList(str) {\n  var end = 0;\n  var list = [];\n  var start = 0;\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20:\n        /*   */\n        if (start === end) {\n          start = end = i + 1;\n        }\n        break;\n      case 0x2c:\n        /* , */\n        if (start !== end) {\n          list.push(str.substring(start, end));\n        }\n        start = end = i + 1;\n        break;\n      default:\n        end = i + 1;\n        break;\n    }\n  }\n\n  // final token\n  if (start !== end) {\n    list.push(str.substring(start, end));\n  }\n  return list;\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders(res, headers) {\n  var keys = Object.keys(headers);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    res.setHeader(key, headers[key]);\n  }\n}", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = forwarded;\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded(req) {\n  if (!req) {\n    throw new TypeError('argument req is required');\n  }\n\n  // simple header parsing\n  var proxyAddrs = parse(req.headers['x-forwarded-for'] || '');\n  var socketAddr = getSocketAddr(req);\n  var addrs = [socketAddr].concat(proxyAddrs);\n\n  // return all addresses\n  return addrs;\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr(req) {\n  return req.socket ? req.socket.remoteAddress : req.connection.remoteAddress;\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse(header) {\n  var end = header.length;\n  var list = [];\n  var start = header.length;\n\n  // gather addresses, backwards\n  for (var i = header.length - 1; i >= 0; i--) {\n    switch (header.charCodeAt(i)) {\n      case 0x20:\n        /*   */\n        if (start === end) {\n          start = end = i;\n        }\n        break;\n      case 0x2c:\n        /* , */\n        if (start !== end) {\n          list.push(header.substring(start, end));\n        }\n        start = end = i;\n        break;\n      default:\n        start = i;\n        break;\n    }\n  }\n\n  // final address\n  if (start !== end) {\n    list.push(header.substring(start, end));\n  }\n  return list;\n}", "(function () {\n  var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n  ipaddr = {};\n  root = this;\n  if (typeof module !== \"undefined\" && module !== null && module.exports) {\n    module.exports = ipaddr;\n  } else {\n    root['ipaddr'] = ipaddr;\n  }\n  matchCIDR = function (first, second, partSize, cidrBits) {\n    var part, shift;\n    if (first.length !== second.length) {\n      throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n    }\n    part = 0;\n    while (cidrBits > 0) {\n      shift = partSize - cidrBits;\n      if (shift < 0) {\n        shift = 0;\n      }\n      if (first[part] >> shift !== second[part] >> shift) {\n        return false;\n      }\n      cidrBits -= partSize;\n      part += 1;\n    }\n    return true;\n  };\n  ipaddr.subnetMatch = function (address, rangeList, defaultName) {\n    var k, len, rangeName, rangeSubnets, subnet;\n    if (defaultName == null) {\n      defaultName = 'unicast';\n    }\n    for (rangeName in rangeList) {\n      rangeSubnets = rangeList[rangeName];\n      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n        rangeSubnets = [rangeSubnets];\n      }\n      for (k = 0, len = rangeSubnets.length; k < len; k++) {\n        subnet = rangeSubnets[k];\n        if (address.kind() === subnet[0].kind()) {\n          if (address.match.apply(address, subnet)) {\n            return rangeName;\n          }\n        }\n      }\n    }\n    return defaultName;\n  };\n  ipaddr.IPv4 = function () {\n    function IPv4(octets) {\n      var k, len, octet;\n      if (octets.length !== 4) {\n        throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n      }\n      for (k = 0, len = octets.length; k < len; k++) {\n        octet = octets[k];\n        if (!(0 <= octet && octet <= 255)) {\n          throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n        }\n      }\n      this.octets = octets;\n    }\n    IPv4.prototype.kind = function () {\n      return 'ipv4';\n    };\n    IPv4.prototype.toString = function () {\n      return this.octets.join(\".\");\n    };\n    IPv4.prototype.toNormalizedString = function () {\n      return this.toString();\n    };\n    IPv4.prototype.toByteArray = function () {\n      return this.octets.slice(0);\n    };\n    IPv4.prototype.match = function (other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv4') {\n        throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n      }\n      return matchCIDR(this.octets, other.octets, 8, cidrRange);\n    };\n    IPv4.prototype.SpecialRanges = {\n      unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n      broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n      multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n      linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n      loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n      carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n      \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n      reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n    };\n    IPv4.prototype.range = function () {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n    IPv4.prototype.toIPv4MappedAddress = function () {\n      return ipaddr.IPv6.parse(\"::ffff:\" + this.toString());\n    };\n    IPv4.prototype.prefixLengthFromSubnetMask = function () {\n      var cidr, i, k, octet, stop, zeros, zerotable;\n      zerotable = {\n        0: 8,\n        128: 7,\n        192: 6,\n        224: 5,\n        240: 4,\n        248: 3,\n        252: 2,\n        254: 1,\n        255: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 3; k >= 0; i = k += -1) {\n        octet = this.octets[i];\n        if (octet in zerotable) {\n          zeros = zerotable[octet];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 8) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 32 - cidr;\n    };\n    return IPv4;\n  }();\n  ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n  ipv4Regexes = {\n    fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n    longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n  };\n  ipaddr.IPv4.parser = function (string) {\n    var match, parseIntAuto, part, shift, value;\n    parseIntAuto = function (string) {\n      if (string[0] === \"0\" && string[1] !== \"x\") {\n        return parseInt(string, 8);\n      } else {\n        return parseInt(string);\n      }\n    };\n    if (match = string.match(ipv4Regexes.fourOctet)) {\n      return function () {\n        var k, len, ref, results;\n        ref = match.slice(1, 6);\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(parseIntAuto(part));\n        }\n        return results;\n      }();\n    } else if (match = string.match(ipv4Regexes.longValue)) {\n      value = parseIntAuto(match[1]);\n      if (value > 0xffffffff || value < 0) {\n        throw new Error(\"ipaddr: address outside defined range\");\n      }\n      return function () {\n        var k, results;\n        results = [];\n        for (shift = k = 0; k <= 24; shift = k += 8) {\n          results.push(value >> shift & 0xff);\n        }\n        return results;\n      }().reverse();\n    } else {\n      return null;\n    }\n  };\n  ipaddr.IPv6 = function () {\n    function IPv6(parts, zoneId) {\n      var i, k, l, len, part, ref;\n      if (parts.length === 16) {\n        this.parts = [];\n        for (i = k = 0; k <= 14; i = k += 2) {\n          this.parts.push(parts[i] << 8 | parts[i + 1]);\n        }\n      } else if (parts.length === 8) {\n        this.parts = parts;\n      } else {\n        throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n      }\n      ref = this.parts;\n      for (l = 0, len = ref.length; l < len; l++) {\n        part = ref[l];\n        if (!(0 <= part && part <= 0xffff)) {\n          throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n        }\n      }\n      if (zoneId) {\n        this.zoneId = zoneId;\n      }\n    }\n    IPv6.prototype.kind = function () {\n      return 'ipv6';\n    };\n    IPv6.prototype.toString = function () {\n      return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n    };\n    IPv6.prototype.toRFC5952String = function () {\n      var bestMatchIndex, bestMatchLength, match, regex, string;\n      regex = /((^|:)(0(:|$)){2,})/g;\n      string = this.toNormalizedString();\n      bestMatchIndex = 0;\n      bestMatchLength = -1;\n      while (match = regex.exec(string)) {\n        if (match[0].length > bestMatchLength) {\n          bestMatchIndex = match.index;\n          bestMatchLength = match[0].length;\n        }\n      }\n      if (bestMatchLength < 0) {\n        return string;\n      }\n      return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n    };\n    IPv6.prototype.toByteArray = function () {\n      var bytes, k, len, part, ref;\n      bytes = [];\n      ref = this.parts;\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        bytes.push(part >> 8);\n        bytes.push(part & 0xff);\n      }\n      return bytes;\n    };\n    IPv6.prototype.toNormalizedString = function () {\n      var addr, part, suffix;\n      addr = function () {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16));\n        }\n        return results;\n      }.call(this).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n    IPv6.prototype.toFixedLengthString = function () {\n      var addr, part, suffix;\n      addr = function () {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16).padStart(4, '0'));\n        }\n        return results;\n      }.call(this).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n    IPv6.prototype.match = function (other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv6') {\n        throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n      }\n      return matchCIDR(this.parts, other.parts, 16, cidrRange);\n    };\n    IPv6.prototype.SpecialRanges = {\n      unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n      linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n      multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n      loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n      uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n      ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n      rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n      rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n      '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n      teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n      reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n    };\n    IPv6.prototype.range = function () {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n    IPv6.prototype.isIPv4MappedAddress = function () {\n      return this.range() === 'ipv4Mapped';\n    };\n    IPv6.prototype.toIPv4Address = function () {\n      var high, low, ref;\n      if (!this.isIPv4MappedAddress()) {\n        throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n      }\n      ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n      return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n    };\n    IPv6.prototype.prefixLengthFromSubnetMask = function () {\n      var cidr, i, k, part, stop, zeros, zerotable;\n      zerotable = {\n        0: 16,\n        32768: 15,\n        49152: 14,\n        57344: 13,\n        61440: 12,\n        63488: 11,\n        64512: 10,\n        65024: 9,\n        65280: 8,\n        65408: 7,\n        65472: 6,\n        65504: 5,\n        65520: 4,\n        65528: 3,\n        65532: 2,\n        65534: 1,\n        65535: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 7; k >= 0; i = k += -1) {\n        part = this.parts[i];\n        if (part in zerotable) {\n          zeros = zerotable[part];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 16) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 128 - cidr;\n    };\n    return IPv6;\n  }();\n  ipv6Part = \"(?:[0-9a-f]+::?)+\";\n  zoneIndex = \"%[0-9a-z]{1,}\";\n  ipv6Regexes = {\n    zoneIndex: new RegExp(zoneIndex, 'i'),\n    \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n    transitional: new RegExp(\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\" + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n  };\n  expandIPv6 = function (string, parts) {\n    var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n    if (string.indexOf('::') !== string.lastIndexOf('::')) {\n      return null;\n    }\n    zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n    if (zoneId) {\n      zoneId = zoneId.substring(1);\n      string = string.replace(/%.+$/, '');\n    }\n    colonCount = 0;\n    lastColon = -1;\n    while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n      colonCount++;\n    }\n    if (string.substr(0, 2) === '::') {\n      colonCount--;\n    }\n    if (string.substr(-2, 2) === '::') {\n      colonCount--;\n    }\n    if (colonCount > parts) {\n      return null;\n    }\n    replacementCount = parts - colonCount;\n    replacement = ':';\n    while (replacementCount--) {\n      replacement += '0:';\n    }\n    string = string.replace('::', replacement);\n    if (string[0] === ':') {\n      string = string.slice(1);\n    }\n    if (string[string.length - 1] === ':') {\n      string = string.slice(0, -1);\n    }\n    parts = function () {\n      var k, len, ref, results;\n      ref = string.split(\":\");\n      results = [];\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        results.push(parseInt(part, 16));\n      }\n      return results;\n    }();\n    return {\n      parts: parts,\n      zoneId: zoneId\n    };\n  };\n  ipaddr.IPv6.parser = function (string) {\n    var addr, k, len, match, octet, octets, zoneId;\n    if (ipv6Regexes['native'].test(string)) {\n      return expandIPv6(string, 8);\n    } else if (match = string.match(ipv6Regexes['transitional'])) {\n      zoneId = match[6] || '';\n      addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n      if (addr.parts) {\n        octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n        for (k = 0, len = octets.length; k < len; k++) {\n          octet = octets[k];\n          if (!(0 <= octet && octet <= 255)) {\n            return null;\n          }\n        }\n        addr.parts.push(octets[0] << 8 | octets[1]);\n        addr.parts.push(octets[2] << 8 | octets[3]);\n        return {\n          parts: addr.parts,\n          zoneId: addr.zoneId\n        };\n      }\n    }\n    return null;\n  };\n  ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function (string) {\n    return this.parser(string) !== null;\n  };\n  ipaddr.IPv4.isValid = function (string) {\n    var e;\n    try {\n      new this(this.parser(string));\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n  ipaddr.IPv4.isValidFourPartDecimal = function (string) {\n    if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n  ipaddr.IPv6.isValid = function (string) {\n    var addr, e;\n    if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n      return false;\n    }\n    try {\n      addr = this.parser(string);\n      new this(addr.parts, addr.zoneId);\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n  ipaddr.IPv4.parse = function (string) {\n    var parts;\n    parts = this.parser(string);\n    if (parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(parts);\n  };\n  ipaddr.IPv6.parse = function (string) {\n    var addr;\n    addr = this.parser(string);\n    if (addr.parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(addr.parts, addr.zoneId);\n  };\n  ipaddr.IPv4.parseCIDR = function (string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 32) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function () {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n  };\n  ipaddr.IPv4.subnetMaskFromPrefixLength = function (prefix) {\n    var filledOctetCount, j, octets;\n    prefix = parseInt(prefix);\n    if (prefix < 0 || prefix > 32) {\n      throw new Error('ipaddr: invalid IPv4 prefix length');\n    }\n    octets = [0, 0, 0, 0];\n    j = 0;\n    filledOctetCount = Math.floor(prefix / 8);\n    while (j < filledOctetCount) {\n      octets[j] = 255;\n      j++;\n    }\n    if (filledOctetCount < 4) {\n      octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - prefix % 8;\n    }\n    return new this(octets);\n  };\n  ipaddr.IPv4.broadcastAddressFromCIDR = function (string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n  ipaddr.IPv4.networkAddressFromCIDR = function (string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n  ipaddr.IPv6.parseCIDR = function (string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 128) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function () {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n  };\n  ipaddr.isValid = function (string) {\n    return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n  };\n  ipaddr.parse = function (string) {\n    if (ipaddr.IPv6.isValid(string)) {\n      return ipaddr.IPv6.parse(string);\n    } else if (ipaddr.IPv4.isValid(string)) {\n      return ipaddr.IPv4.parse(string);\n    } else {\n      throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n    }\n  };\n  ipaddr.parseCIDR = function (string) {\n    var e;\n    try {\n      return ipaddr.IPv6.parseCIDR(string);\n    } catch (error1) {\n      e = error1;\n      try {\n        return ipaddr.IPv4.parseCIDR(string);\n      } catch (error1) {\n        e = error1;\n        throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n      }\n    }\n  };\n  ipaddr.fromByteArray = function (bytes) {\n    var length;\n    length = bytes.length;\n    if (length === 4) {\n      return new ipaddr.IPv4(bytes);\n    } else if (length === 16) {\n      return new ipaddr.IPv6(bytes);\n    } else {\n      throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n    }\n  };\n  ipaddr.process = function (string) {\n    var addr;\n    addr = this.parse(string);\n    if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n      return addr.toIPv4Address();\n    } else {\n      return addr;\n    }\n  };\n}).call(this);", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = proxyaddr;\nmodule.exports.all = alladdrs;\nmodule.exports.compile = compile;\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded');\nvar ipaddr = require('ipaddr.js');\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/;\nvar isip = ipaddr.isValid;\nvar parseip = ipaddr.parse;\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n  linklocal: ['169.254.0.0/16', 'fe80::/10'],\n  loopback: ['127.0.0.1/8', '::1/128'],\n  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n};\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs(req, trust) {\n  // get addresses\n  var addrs = forwarded(req);\n  if (!trust) {\n    // Return all addresses\n    return addrs;\n  }\n  if (typeof trust !== 'function') {\n    trust = compile(trust);\n  }\n  for (var i = 0; i < addrs.length - 1; i++) {\n    if (trust(addrs[i], i)) continue;\n    addrs.length = i + 1;\n  }\n  return addrs;\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile(val) {\n  if (!val) {\n    throw new TypeError('argument is required');\n  }\n  var trust;\n  if (typeof val === 'string') {\n    trust = [val];\n  } else if (Array.isArray(val)) {\n    trust = val.slice();\n  } else {\n    throw new TypeError('unsupported trust argument');\n  }\n  for (var i = 0; i < trust.length; i++) {\n    val = trust[i];\n    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n      continue;\n    }\n\n    // Splice in pre-defined range\n    val = IP_RANGES[val];\n    trust.splice.apply(trust, [i, 1].concat(val));\n    i += val.length - 1;\n  }\n  return compileTrust(compileRangeSubnets(trust));\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets(arr) {\n  var rangeSubnets = new Array(arr.length);\n  for (var i = 0; i < arr.length; i++) {\n    rangeSubnets[i] = parseipNotation(arr[i]);\n  }\n  return rangeSubnets;\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust(rangeSubnets) {\n  // Return optimized function based on length\n  var len = rangeSubnets.length;\n  return len === 0 ? trustNone : len === 1 ? trustSingle(rangeSubnets[0]) : trustMulti(rangeSubnets);\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation(note) {\n  var pos = note.lastIndexOf('/');\n  var str = pos !== -1 ? note.substring(0, pos) : note;\n  if (!isip(str)) {\n    throw new TypeError('invalid IP address: ' + str);\n  }\n  var ip = parseip(str);\n  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n    // Store as IPv4\n    ip = ip.toIPv4Address();\n  }\n  var max = ip.kind() === 'ipv6' ? 128 : 32;\n  var range = pos !== -1 ? note.substring(pos + 1, note.length) : null;\n  if (range === null) {\n    range = max;\n  } else if (DIGIT_REGEXP.test(range)) {\n    range = parseInt(range, 10);\n  } else if (ip.kind() === 'ipv4' && isip(range)) {\n    range = parseNetmask(range);\n  } else {\n    range = null;\n  }\n  if (range <= 0 || range > max) {\n    throw new TypeError('invalid range on address: ' + note);\n  }\n  return [ip, range];\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask(netmask) {\n  var ip = parseip(netmask);\n  var kind = ip.kind();\n  return kind === 'ipv4' ? ip.prefixLengthFromSubnetMask() : null;\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr(req, trust) {\n  if (!req) {\n    throw new TypeError('req argument is required');\n  }\n  if (!trust) {\n    throw new TypeError('trust argument is required');\n  }\n  var addrs = alladdrs(req, trust);\n  var addr = addrs[addrs.length - 1];\n  return addr;\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone() {\n  return false;\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti(subnets) {\n  return function trust(addr) {\n    if (!isip(addr)) return false;\n    var ip = parseip(addr);\n    var ipconv;\n    var kind = ip.kind();\n    for (var i = 0; i < subnets.length; i++) {\n      var subnet = subnets[i];\n      var subnetip = subnet[0];\n      var subnetkind = subnetip.kind();\n      var subnetrange = subnet[1];\n      var trusted = ip;\n      if (kind !== subnetkind) {\n        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n          // Incompatible IP addresses\n          continue;\n        }\n        if (!ipconv) {\n          // Convert IP to match subnet IP kind\n          ipconv = subnetkind === 'ipv4' ? ip.toIPv4Address() : ip.toIPv4MappedAddress();\n        }\n        trusted = ipconv;\n      }\n      if (trusted.match(subnetip, subnetrange)) {\n        return true;\n      }\n    }\n    return false;\n  };\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle(subnet) {\n  var subnetip = subnet[0];\n  var subnetkind = subnetip.kind();\n  var subnetisipv4 = subnetkind === 'ipv4';\n  var subnetrange = subnet[1];\n  return function trust(addr) {\n    if (!isip(addr)) return false;\n    var ip = parseip(addr);\n    var kind = ip.kind();\n    if (kind !== subnetkind) {\n      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n        // Incompatible IP addresses\n        return false;\n      }\n\n      // Convert IP to match subnet IP kind\n      ip = subnetisipv4 ? ip.toIPv4Address() : ip.toIPv4MappedAddress();\n    }\n    return ip.match(subnetip, subnetrange);\n  };\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\nvar Buffer = require('safe-buffer').Buffer;\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({\n  weak: false\n});\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({\n  weak: true\n});\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function (path) {\n  if ('/' === path[0]) return true;\n  if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n  if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten, 'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function (type) {\n  return ~type.indexOf('/') ? acceptParams(type) : {\n    value: mime.lookup(type),\n    params: {}\n  };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function (types) {\n  var ret = [];\n  for (var i = 0; i < types.length; ++i) {\n    ret.push(exports.normalizeType(types[i]));\n  }\n  return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition, 'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams(str) {\n  var parts = str.split(/ *; */);\n  var ret = {\n    value: parts[0],\n    quality: 1,\n    params: {}\n  };\n  for (var i = 1; i < parts.length; ++i) {\n    var pms = parts[i].split(/ *= */);\n    if ('q' === pms[0]) {\n      ret.quality = parseFloat(pms[1]);\n    } else {\n      ret.params[pms[0]] = pms[1];\n    }\n  }\n  return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param  {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function (val) {\n  var fn;\n  if (typeof val === 'function') {\n    return val;\n  }\n  switch (val) {\n    case true:\n    case 'weak':\n      fn = exports.wetag;\n      break;\n    case false:\n      break;\n    case 'strong':\n      fn = exports.etag;\n      break;\n    default:\n      throw new TypeError('unknown value for etag function: ' + val);\n  }\n  return fn;\n};\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param  {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n  var fn;\n  if (typeof val === 'function') {\n    return val;\n  }\n  switch (val) {\n    case true:\n    case 'simple':\n      fn = querystring.parse;\n      break;\n    case false:\n      fn = newObject;\n      break;\n    case 'extended':\n      fn = parseExtendedQueryString;\n      break;\n    default:\n      throw new TypeError('unknown value for query parser function: ' + val);\n  }\n  return fn;\n};\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param  {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function (val) {\n  if (typeof val === 'function') return val;\n  if (val === true) {\n    // Support plain true/false\n    return function () {\n      return true;\n    };\n  }\n  if (typeof val === 'number') {\n    // Support trusting hop count\n    return function (a, i) {\n      return i < val;\n    };\n  }\n  if (typeof val === 'string') {\n    // Support comma-separated values\n    val = val.split(',').map(function (v) {\n      return v.trim();\n    });\n  }\n  return proxyaddr.compile(val || []);\n};\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n  if (!type || !charset) {\n    return type;\n  }\n\n  // parse type\n  var parsed = contentType.parse(type);\n\n  // set charset\n  parsed.parameters.charset = charset;\n\n  // format type\n  return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator(options) {\n  return function generateETag(body, encoding) {\n    var buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body;\n    return etag(buf, options);\n  };\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @param {String} str\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n  return qs.parse(str, {\n    allowPrototypes: true\n  });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n  return {};\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n *   - setup default configuration\n *   - setup default middleware\n *   - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n  this.cache = {};\n  this.engines = {};\n  this.settings = {};\n  this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n  var env = process.env.NODE_ENV || 'development';\n\n  // default settings\n  this.enable('x-powered-by');\n  this.set('etag', 'weak');\n  this.set('env', env);\n  this.set('query parser', 'extended');\n  this.set('subdomain offset', 2);\n  this.set('trust proxy', false);\n\n  // trust proxy inherit back-compat\n  Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n    configurable: true,\n    value: true\n  });\n  debug('booting in %s mode', env);\n  this.on('mount', function onmount(parent) {\n    // inherit trust proxy\n    if (this.settings[trustProxyDefaultSymbol] === true && typeof parent.settings['trust proxy fn'] === 'function') {\n      delete this.settings['trust proxy'];\n      delete this.settings['trust proxy fn'];\n    }\n\n    // inherit protos\n    setPrototypeOf(this.request, parent.request);\n    setPrototypeOf(this.response, parent.response);\n    setPrototypeOf(this.engines, parent.engines);\n    setPrototypeOf(this.settings, parent.settings);\n  });\n\n  // setup locals\n  this.locals = Object.create(null);\n\n  // top-most app is mounted at /\n  this.mountpath = '/';\n\n  // default locals\n  this.locals.settings = this.settings;\n\n  // default configuration\n  this.set('view', View);\n  this.set('views', resolve('views'));\n  this.set('jsonp callback name', 'callback');\n  if (env === 'production') {\n    this.enable('view cache');\n  }\n  Object.defineProperty(this, 'router', {\n    get: function () {\n      throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n    }\n  });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n  if (!this._router) {\n    this._router = new Router({\n      caseSensitive: this.enabled('case sensitive routing'),\n      strict: this.enabled('strict routing')\n    });\n    this._router.use(query(this.get('query parser fn')));\n    this._router.use(middleware.init(this));\n  }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n  var router = this._router;\n\n  // final handler\n  var done = callback || finalhandler(req, res, {\n    env: this.get('env'),\n    onerror: logerror.bind(this)\n  });\n\n  // no routes\n  if (!router) {\n    debug('no routes defined on app');\n    done();\n    return;\n  }\n  router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate app.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n  var fns = flatten(slice.call(arguments, offset));\n  if (fns.length === 0) {\n    throw new TypeError('app.use() requires a middleware function');\n  }\n\n  // setup router\n  this.lazyrouter();\n  var router = this._router;\n  fns.forEach(function (fn) {\n    // non-express app\n    if (!fn || !fn.handle || !fn.set) {\n      return router.use(path, fn);\n    }\n    debug('.use app under %s', path);\n    fn.mountpath = path;\n    fn.parent = this;\n\n    // restore .app property on req and res\n    router.use(path, function mounted_app(req, res, next) {\n      var orig = req.app;\n      fn.handle(req, res, function (err) {\n        setPrototypeOf(req, orig.request);\n        setPrototypeOf(res, orig.response);\n        next(err);\n      });\n    });\n\n    // mounted an app\n    fn.emit('mount', this);\n  }, this);\n  return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n  this.lazyrouter();\n  return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n *     app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n *     app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n  if (typeof fn !== 'function') {\n    throw new Error('callback function required');\n  }\n\n  // get file extension\n  var extension = ext[0] !== '.' ? '.' + ext : ext;\n\n  // store engine\n  this.engines[extension] = fn;\n  return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n  this.lazyrouter();\n  if (Array.isArray(name)) {\n    for (var i = 0; i < name.length; i++) {\n      this.param(name[i], fn);\n    }\n    return this;\n  }\n  this._router.param(name, fn);\n  return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n *    app.set('foo', 'bar');\n *    app.set('foo');\n *    // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n  if (arguments.length === 1) {\n    // app.get(setting)\n    var settings = this.settings;\n    while (settings && settings !== Object.prototype) {\n      if (hasOwnProperty.call(settings, setting)) {\n        return settings[setting];\n      }\n      settings = Object.getPrototypeOf(settings);\n    }\n    return undefined;\n  }\n  debug('set \"%s\" to %o', setting, val);\n\n  // set value\n  this.settings[setting] = val;\n\n  // trigger matched settings\n  switch (setting) {\n    case 'etag':\n      this.set('etag fn', compileETag(val));\n      break;\n    case 'query parser':\n      this.set('query parser fn', compileQueryParser(val));\n      break;\n    case 'trust proxy':\n      this.set('trust proxy fn', compileTrust(val));\n\n      // trust proxy inherit back-compat\n      Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n        configurable: true,\n        value: false\n      });\n      break;\n  }\n  return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n  return this.parent ? this.parent.path() + this.mountpath : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n *    app.enabled('foo')\n *    // => false\n *\n *    app.enable('foo')\n *    app.enabled('foo')\n *    // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n  return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n *    app.disabled('foo')\n *    // => true\n *\n *    app.enable('foo')\n *    app.disabled('foo')\n *    // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n  return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n  return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n  return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function (method) {\n  app[method] = function (path) {\n    if (method === 'get' && arguments.length === 1) {\n      // app.get(setting)\n      return this.set(path);\n    }\n    this.lazyrouter();\n    var route = this._router.route(path);\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n  this.lazyrouter();\n  var route = this._router.route(path);\n  var args = slice.call(arguments, 1);\n  for (var i = 0; i < methods.length; i++) {\n    route[methods[i]].apply(route, args);\n  }\n  return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n *    app.render('email', { name: 'Tobi' }, function(err, html){\n *      // ...\n *    })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n  var cache = this.cache;\n  var done = callback;\n  var engines = this.engines;\n  var opts = options;\n  var renderOptions = {};\n  var view;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge app.locals\n  merge(renderOptions, this.locals);\n\n  // merge options._locals\n  if (opts._locals) {\n    merge(renderOptions, opts._locals);\n  }\n\n  // merge options\n  merge(renderOptions, opts);\n\n  // set .cache unless explicitly provided\n  if (renderOptions.cache == null) {\n    renderOptions.cache = this.enabled('view cache');\n  }\n\n  // primed cache\n  if (renderOptions.cache) {\n    view = cache[name];\n  }\n\n  // view\n  if (!view) {\n    var View = this.get('view');\n    view = new View(name, {\n      defaultEngine: this.get('view engine'),\n      root: this.get('views'),\n      engines: engines\n    });\n    if (!view.path) {\n      var dirs = Array.isArray(view.root) && view.root.length > 1 ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"' : 'directory \"' + view.root + '\"';\n      var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n      err.view = view;\n      return done(err);\n    }\n\n    // prime the cache\n    if (renderOptions.cache) {\n      cache[name] = view;\n    }\n  }\n\n  // render\n  tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n *    var http = require('http')\n *      , https = require('https')\n *      , express = require('express')\n *      , app = express();\n *\n *    http.createServer(app).listen(80);\n *    https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n  var server = http.createServer(this);\n  return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n  /* istanbul ignore next */\n  if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n  try {\n    view.render(options, callback);\n  } catch (err) {\n    callback(err);\n  }\n}", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n  var accepts = accept.split(',');\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var charset = parseCharset(accepts[i].trim(), i);\n    if (charset) {\n      accepts[j++] = charset;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n  return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n  var match = simpleCharsetRegExp.exec(str);\n  if (!match) return null;\n  var charset = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n  return {\n    charset: charset,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n  var priority = {\n    o: -1,\n    q: 0,\n    s: 0\n  };\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(charset, accepted[i], index);\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n  return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n  var s = 0;\n  if (spec.charset.toLowerCase() === charset.toLowerCase()) {\n    s |= 1;\n  } else if (spec.charset !== '*') {\n    return null;\n  }\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  };\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n  // RFC 2616 sec 14.2: no header = *\n  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n  if (!provided) {\n    // sorted list of all charsets\n    return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset);\n  }\n  var priorities = provided.map(function getPriority(type, index) {\n    return getCharsetPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted charsets\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n  return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n  var accepts = accept.split(',');\n  var hasIdentity = false;\n  var minQuality = 1;\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var encoding = parseEncoding(accepts[i].trim(), i);\n    if (encoding) {\n      accepts[j++] = encoding;\n      hasIdentity = hasIdentity || specify('identity', encoding);\n      minQuality = Math.min(minQuality, encoding.q || 1);\n    }\n  }\n  if (!hasIdentity) {\n    /*\n     * If identity doesn't explicitly appear in the accept-encoding header,\n     * it's added to the list of acceptable encoding with the lowest q\n     */\n    accepts[j++] = {\n      encoding: 'identity',\n      q: minQuality,\n      i: i\n    };\n  }\n\n  // trim accepts\n  accepts.length = j;\n  return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n  var match = simpleEncodingRegExp.exec(str);\n  if (!match) return null;\n  var encoding = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n  return {\n    encoding: encoding,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n  var priority = {\n    o: -1,\n    q: 0,\n    s: 0\n  };\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(encoding, accepted[i], index);\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n  return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n  var s = 0;\n  if (spec.encoding.toLowerCase() === encoding.toLowerCase()) {\n    s |= 1;\n  } else if (spec.encoding !== '*') {\n    return null;\n  }\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  };\n}\n;\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n  var accepts = parseAcceptEncoding(accept || '');\n  if (!provided) {\n    // sorted list of all encodings\n    return accepts.filter(isQuality).sort(compareSpecs).map(getFullEncoding);\n  }\n  var priorities = provided.map(function getPriority(type, index) {\n    return getEncodingPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted encodings\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n  return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n  var accepts = accept.split(',');\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var language = parseLanguage(accepts[i].trim(), i);\n    if (language) {\n      accepts[j++] = language;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n  return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n  var match = simpleLanguageRegExp.exec(str);\n  if (!match) return null;\n  var prefix = match[1];\n  var suffix = match[2];\n  var full = prefix;\n  if (suffix) full += \"-\" + suffix;\n  var q = 1;\n  if (match[3]) {\n    var params = match[3].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].split('=');\n      if (p[0] === 'q') q = parseFloat(p[1]);\n    }\n  }\n  return {\n    prefix: prefix,\n    suffix: suffix,\n    q: q,\n    i: i,\n    full: full\n  };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n  var priority = {\n    o: -1,\n    q: 0,\n    s: 0\n  };\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(language, accepted[i], index);\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n  return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n  var p = parseLanguage(language);\n  if (!p) return null;\n  var s = 0;\n  if (spec.full.toLowerCase() === p.full.toLowerCase()) {\n    s |= 4;\n  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n    s |= 2;\n  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n    s |= 1;\n  } else if (spec.full !== '*') {\n    return null;\n  }\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  };\n}\n;\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n  // RFC 2616 sec 14.4: no header = *\n  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n  if (!provided) {\n    // sorted list of all languages\n    return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage);\n  }\n  var priorities = provided.map(function getPriority(type, index) {\n    return getLanguagePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted languages\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n  return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n  var accepts = splitMediaTypes(accept);\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var mediaType = parseMediaType(accepts[i].trim(), i);\n    if (mediaType) {\n      accepts[j++] = mediaType;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n  return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n  var match = simpleMediaTypeRegExp.exec(str);\n  if (!match) return null;\n  var params = Object.create(null);\n  var q = 1;\n  var subtype = match[2];\n  var type = match[1];\n  if (match[3]) {\n    var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n    for (var j = 0; j < kvps.length; j++) {\n      var pair = kvps[j];\n      var key = pair[0].toLowerCase();\n      var val = pair[1];\n\n      // get the value, unwrapping quotes\n      var value = val && val[0] === '\"' && val[val.length - 1] === '\"' ? val.substr(1, val.length - 2) : val;\n      if (key === 'q') {\n        q = parseFloat(value);\n        break;\n      }\n\n      // store parameter\n      params[key] = value;\n    }\n  }\n  return {\n    type: type,\n    subtype: subtype,\n    params: params,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n  var priority = {\n    o: -1,\n    q: 0,\n    s: 0\n  };\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(type, accepted[i], index);\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n  return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n  var p = parseMediaType(type);\n  var s = 0;\n  if (!p) {\n    return null;\n  }\n  if (spec.type.toLowerCase() == p.type.toLowerCase()) {\n    s |= 4;\n  } else if (spec.type != '*') {\n    return null;\n  }\n  if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n    s |= 2;\n  } else if (spec.subtype != '*') {\n    return null;\n  }\n  var keys = Object.keys(spec.params);\n  if (keys.length > 0) {\n    if (keys.every(function (k) {\n      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n    })) {\n      s |= 1;\n    } else {\n      return null;\n    }\n  }\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  };\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n  // RFC 2616 sec 14.2: no header = */*\n  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n  if (!provided) {\n    // sorted list of all types\n    return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);\n  }\n  var priorities = provided.map(function getPriority(type, index) {\n    return getMediaTypePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted types\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n  return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n  var count = 0;\n  var index = 0;\n  while ((index = string.indexOf('\"', index)) !== -1) {\n    count++;\n    index++;\n  }\n  return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n  var index = str.indexOf('=');\n  var key;\n  var val;\n  if (index === -1) {\n    key = str;\n  } else {\n    key = str.substr(0, index);\n    val = str.substr(index + 1);\n  }\n  return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n  var accepts = accept.split(',');\n  for (var i = 1, j = 0; i < accepts.length; i++) {\n    if (quoteCount(accepts[j]) % 2 == 0) {\n      accepts[++j] = accepts[i];\n    } else {\n      accepts[j] += ',' + accepts[i];\n    }\n  }\n\n  // trim accepts\n  accepts.length = j + 1;\n  return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n  var parameters = str.split(';');\n  for (var i = 1, j = 0; i < parameters.length; i++) {\n    if (quoteCount(parameters[j]) % 2 == 0) {\n      parameters[++j] = parameters[i];\n    } else {\n      parameters[j] += ';' + parameters[i];\n    }\n  }\n\n  // trim parameters\n  parameters.length = j + 1;\n  for (var i = 0; i < parameters.length; i++) {\n    parameters[i] = parameters[i].trim();\n  }\n  return parameters;\n}", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset');\nvar preferredEncodings = require('./lib/encoding');\nvar preferredLanguages = require('./lib/language');\nvar preferredMediaTypes = require('./lib/mediaType');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n  if (!(this instanceof Negotiator)) {\n    return new Negotiator(request);\n  }\n  this.request = request;\n}\nNegotiator.prototype.charset = function charset(available) {\n  var set = this.charsets(available);\n  return set && set[0];\n};\nNegotiator.prototype.charsets = function charsets(available) {\n  return preferredCharsets(this.request.headers['accept-charset'], available);\n};\nNegotiator.prototype.encoding = function encoding(available) {\n  var set = this.encodings(available);\n  return set && set[0];\n};\nNegotiator.prototype.encodings = function encodings(available) {\n  return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\nNegotiator.prototype.language = function language(available) {\n  var set = this.languages(available);\n  return set && set[0];\n};\nNegotiator.prototype.languages = function languages(available) {\n  return preferredLanguages(this.request.headers['accept-language'], available);\n};\nNegotiator.prototype.mediaType = function mediaType(available) {\n  var set = this.mediaTypes(available);\n  return set && set[0];\n};\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n  return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;", "/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar Negotiator = require('negotiator');\nvar mime = require('mime-types');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts;\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts(req) {\n  if (!(this instanceof Accepts)) {\n    return new Accepts(req);\n  }\n  this.headers = req.headers;\n  this.negotiator = new Negotiator(req);\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     this.types('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     this.types('html');\n *     // => \"html\"\n *     this.types('text/html');\n *     // => \"text/html\"\n *     this.types('json', 'text');\n *     // => \"json\"\n *     this.types('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     this.types('image/png');\n *     this.types('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     this.types(['html', 'json']);\n *     this.types('html', 'json');\n *     // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type = Accepts.prototype.types = function (types_) {\n  var types = types_;\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length);\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i];\n    }\n  }\n\n  // no types, return all requested types\n  if (!types || types.length === 0) {\n    return this.negotiator.mediaTypes();\n  }\n\n  // no accept header, return first given type\n  if (!this.headers.accept) {\n    return types[0];\n  }\n  var mimes = types.map(extToMime);\n  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime));\n  var first = accepts[0];\n  return first ? types[mimes.indexOf(first)] : false;\n};\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n *     ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding = Accepts.prototype.encodings = function (encodings_) {\n  var encodings = encodings_;\n\n  // support flattened arguments\n  if (encodings && !Array.isArray(encodings)) {\n    encodings = new Array(arguments.length);\n    for (var i = 0; i < encodings.length; i++) {\n      encodings[i] = arguments[i];\n    }\n  }\n\n  // no encodings, return all requested encodings\n  if (!encodings || encodings.length === 0) {\n    return this.negotiator.encodings();\n  }\n  return this.negotiator.encodings(encodings)[0] || false;\n};\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n *     ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset = Accepts.prototype.charsets = function (charsets_) {\n  var charsets = charsets_;\n\n  // support flattened arguments\n  if (charsets && !Array.isArray(charsets)) {\n    charsets = new Array(arguments.length);\n    for (var i = 0; i < charsets.length; i++) {\n      charsets[i] = arguments[i];\n    }\n  }\n\n  // no charsets, return all requested charsets\n  if (!charsets || charsets.length === 0) {\n    return this.negotiator.charsets();\n  }\n  return this.negotiator.charsets(charsets)[0] || false;\n};\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n *     ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function (languages_) {\n  var languages = languages_;\n\n  // support flattened arguments\n  if (languages && !Array.isArray(languages)) {\n    languages = new Array(arguments.length);\n    for (var i = 0; i < languages.length; i++) {\n      languages[i] = arguments[i];\n    }\n  }\n\n  // no languages, return all requested languages\n  if (!languages || languages.length === 0) {\n    return this.negotiator.languages();\n  }\n  return this.negotiator.languages(languages)[0] || false;\n};\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime(type) {\n  return type.indexOf('/') === -1 ? mime.lookup(type) : type;\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime(type) {\n  return typeof type === 'string';\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar accepts = require('accepts');\nvar deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype);\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req;\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n *     req.get('Content-Type');\n *     // => \"text/plain\"\n *\n *     req.get('content-type');\n *     // => \"text/plain\"\n *\n *     req.get('Something');\n *     // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get = req.header = function header(name) {\n  if (!name) {\n    throw new TypeError('name argument is required to req.get');\n  }\n  if (typeof name !== 'string') {\n    throw new TypeError('name must be a string to req.get');\n  }\n  var lc = name.toLowerCase();\n  switch (lc) {\n    case 'referer':\n    case 'referrer':\n      return this.headers.referrer || this.headers.referer;\n    default:\n      return this.headers[lc];\n  }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     req.accepts('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('html');\n *     // => \"html\"\n *     req.accepts('text/html');\n *     // => \"text/html\"\n *     req.accepts('json, text');\n *     // => \"json\"\n *     req.accepts('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('image/png');\n *     req.accepts('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     req.accepts(['html', 'json']);\n *     req.accepts('html', 'json');\n *     req.accepts('html, json');\n *     // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function () {\n  var accept = accepts(this);\n  return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function () {\n  var accept = accepts(this);\n  return accept.encodings.apply(accept, arguments);\n};\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings, 'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function () {\n  var accept = accepts(this);\n  return accept.charsets.apply(accept, arguments);\n};\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets, 'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function () {\n  var accept = accepts(this);\n  return accept.languages.apply(accept, arguments);\n};\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages, 'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n  var range = this.get('Range');\n  if (!range) return;\n  return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n *  - Checks route placeholders, ex: _/user/:id_\n *  - Checks body params, ex: id=12, {\"id\":12}\n *  - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n  var params = this.params || {};\n  var body = this.body || {};\n  var query = this.query || {};\n  var args = arguments.length === 1 ? 'name' : 'name, default';\n  deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n  if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n  if (null != body[name]) return body[name];\n  if (null != query[name]) return query[name];\n  return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n *      // With Content-Type: text/html; charset=utf-8\n *      req.is('html');\n *      req.is('text/html');\n *      req.is('text/*');\n *      // => true\n *\n *      // When Content-Type is application/json\n *      req.is('json');\n *      req.is('application/json');\n *      req.is('application/*');\n *      // => true\n *\n *      req.is('html');\n *      // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n  var arr = types;\n\n  // support flattened arguments\n  if (!Array.isArray(types)) {\n    arr = new Array(arguments.length);\n    for (var i = 0; i < arr.length; i++) {\n      arr[i] = arguments[i];\n    }\n  }\n  return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol() {\n  var proto = this.connection.encrypted ? 'https' : 'http';\n  var trust = this.app.get('trust proxy fn');\n  if (!trust(this.connection.remoteAddress, 0)) {\n    return proto;\n  }\n\n  // Note: X-Forwarded-Proto is normally only ever a\n  //       single value, but this is to be safe.\n  var header = this.get('X-Forwarded-Proto') || proto;\n  var index = header.indexOf(',');\n  return index !== -1 ? header.substring(0, index).trim() : header.trim();\n});\n\n/**\n * Short-hand for:\n *\n *    req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure() {\n  return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip() {\n  var trust = this.app.get('trust proxy fn');\n  return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n  var trust = this.app.get('trust proxy fn');\n  var addrs = proxyaddr.all(this, trust);\n\n  // reverse the order (to farthest -> closest)\n  // and remove socket address\n  addrs.reverse().pop();\n  return addrs;\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n  var hostname = this.hostname;\n  if (!hostname) return [];\n  var offset = this.app.get('subdomain offset');\n  var subdomains = !isIP(hostname) ? hostname.split('.').reverse() : [hostname];\n  return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n  return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname() {\n  var trust = this.app.get('trust proxy fn');\n  var host = this.get('X-Forwarded-Host');\n  if (!host || !trust(this.connection.remoteAddress, 0)) {\n    host = this.get('Host');\n  } else if (host.indexOf(',') !== -1) {\n    // Note: X-Forwarded-Host is normally only ever a\n    //       single value, but this is to be safe.\n    host = host.substring(0, host.indexOf(',')).trimRight();\n  }\n  if (!host) return;\n\n  // IPv6 literal support\n  var offset = host[0] === '[' ? host.indexOf(']') + 1 : 0;\n  var index = host.indexOf(':', offset);\n  return index !== -1 ? host.substring(0, index) : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host() {\n  return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function () {\n  var method = this.method;\n  var res = this.res;\n  var status = res.statusCode;\n\n  // GET or HEAD for weak freshness validation only\n  if ('GET' !== method && 'HEAD' !== method) return false;\n\n  // 2xx or 304 as per rfc2616 14.26\n  if (status >= 200 && status < 300 || 304 === status) {\n    return fresh(this.headers, {\n      'etag': res.get('ETag'),\n      'last-modified': res.get('Last-Modified')\n    });\n  }\n  return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale() {\n  return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr() {\n  var val = this.get('X-Requested-With') || '';\n  return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n  Object.defineProperty(obj, name, {\n    configurable: true,\n    enumerable: true,\n    get: getter\n  });\n}", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function (val, secret) {\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  return val + '.' + crypto.createHmac('sha256', secret).update(val).digest('base64').replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function (val, secret) {\n  if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  var str = val.slice(0, val.lastIndexOf('.')),\n    mac = exports.sign(str, secret);\n  return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str) {\n  return crypto.createHash('sha1').update(str).digest('hex');\n}", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString;\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n  var dec = opt && opt.decode || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!obj.hasOwnProperty(key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n    index = endIdx + 1;\n  } while (index < len);\n  return obj;\n}\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = opt && opt.encode || encodeURIComponent;\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n  var value = enc(val);\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n  var str = name + '=' + value;\n  if (!opt) return str;\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid');\n    }\n    str += '; Max-Age=' + maxAge;\n  }\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n    str += '; Domain=' + opt.domain;\n  }\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n    str += '; Path=' + opt.path;\n  }\n  if (opt.expires) {\n    var expires = opt.expires;\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n    str += '; Expires=' + expires.toUTCString();\n  }\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n  if (opt.secure) {\n    str += '; Secure';\n  }\n  if (opt.partitioned) {\n    str += '; Partitioned';\n  }\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string' ? opt.priority.toLowerCase() : opt.priority;\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low';\n        break;\n      case 'medium':\n        str += '; Priority=Medium';\n        break;\n      case 'high':\n        str += '; Priority=High';\n        break;\n      default:\n        throw new TypeError('option priority is invalid');\n    }\n  }\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode(str) {\n  return str.indexOf('%') !== -1 ? decodeURIComponent(str) : str;\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate(val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}", "/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n */\nmodule.exports = vary;\nmodule.exports.append = append;\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name    = token\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append(header, field) {\n  if (typeof header !== 'string') {\n    throw new TypeError('header argument is required');\n  }\n  if (!field) {\n    throw new TypeError('field argument is required');\n  }\n\n  // get fields array\n  var fields = !Array.isArray(field) ? parse(String(field)) : field;\n\n  // assert on invalid field names\n  for (var j = 0; j < fields.length; j++) {\n    if (!FIELD_NAME_REGEXP.test(fields[j])) {\n      throw new TypeError('field argument contains an invalid header name');\n    }\n  }\n\n  // existing, unspecified vary\n  if (header === '*') {\n    return header;\n  }\n\n  // enumerate current values\n  var val = header;\n  var vals = parse(header.toLowerCase());\n\n  // unspecified vary\n  if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n    return '*';\n  }\n  for (var i = 0; i < fields.length; i++) {\n    var fld = fields[i].toLowerCase();\n\n    // append value (case-preserving)\n    if (vals.indexOf(fld) === -1) {\n      vals.push(fld);\n      val = val ? val + ', ' + fields[i] : fields[i];\n    }\n  }\n  return val;\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse(header) {\n  var end = 0;\n  var list = [];\n  var start = 0;\n\n  // gather tokens\n  for (var i = 0, len = header.length; i < len; i++) {\n    switch (header.charCodeAt(i)) {\n      case 0x20:\n        /*   */\n        if (start === end) {\n          start = end = i + 1;\n        }\n        break;\n      case 0x2c:\n        /* , */\n        list.push(header.substring(start, end));\n        start = end = i + 1;\n        break;\n      default:\n        end = i + 1;\n        break;\n    }\n  }\n\n  // final token\n  list.push(header.substring(start, end));\n  return list;\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary(res, field) {\n  if (!res || !res.getHeader || !res.setHeader) {\n    // quack quack\n    throw new TypeError('res argument is required');\n  }\n\n  // get existing header\n  var val = res.getHeader('Vary') || '';\n  var header = Array.isArray(val) ? val.join(', ') : String(val);\n\n  // set new header\n  if (val = append(header, field)) {\n    res.setHeader('Vary', val);\n  }\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar Buffer = require('safe-buffer').Buffer;\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors');\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses');\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype);\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res;\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n  if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {\n    deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead');\n  }\n  this.statusCode = code;\n  return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n *    res.links({\n *      next: 'http://api.example.com/users?page=2',\n *      last: 'http://api.example.com/users?page=5'\n *    });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function (links) {\n  var link = this.get('Link') || '';\n  if (link) link += ', ';\n  return this.set('Link', link + Object.keys(links).map(function (rel) {\n    return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n  }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n *     res.send(Buffer.from('wahoo'));\n *     res.send({ some: 'json' });\n *     res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n  var chunk = body;\n  var encoding;\n  var req = this.req;\n  var type;\n\n  // settings\n  var app = this.app;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.send(body, status) backwards compat\n    if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n      deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[0];\n      chunk = arguments[1];\n    }\n  }\n\n  // disambiguate res.send(status) and res.send(status, num)\n  if (typeof chunk === 'number' && arguments.length === 1) {\n    // res.send(status) will set status message as text string\n    if (!this.get('Content-Type')) {\n      this.type('txt');\n    }\n    deprecate('res.send(status): Use res.sendStatus(status) instead');\n    this.statusCode = chunk;\n    chunk = statuses.message[chunk];\n  }\n  switch (typeof chunk) {\n    // string defaulting to html\n    case 'string':\n      if (!this.get('Content-Type')) {\n        this.type('html');\n      }\n      break;\n    case 'boolean':\n    case 'number':\n    case 'object':\n      if (chunk === null) {\n        chunk = '';\n      } else if (Buffer.isBuffer(chunk)) {\n        if (!this.get('Content-Type')) {\n          this.type('bin');\n        }\n      } else {\n        return this.json(chunk);\n      }\n      break;\n  }\n\n  // write strings in utf-8\n  if (typeof chunk === 'string') {\n    encoding = 'utf8';\n    type = this.get('Content-Type');\n\n    // reflect this in content-type\n    if (typeof type === 'string') {\n      this.set('Content-Type', setCharset(type, 'utf-8'));\n    }\n  }\n\n  // determine if ETag should be generated\n  var etagFn = app.get('etag fn');\n  var generateETag = !this.get('ETag') && typeof etagFn === 'function';\n\n  // populate Content-Length\n  var len;\n  if (chunk !== undefined) {\n    if (Buffer.isBuffer(chunk)) {\n      // get length of Buffer\n      len = chunk.length;\n    } else if (!generateETag && chunk.length < 1000) {\n      // just calculate length when no ETag + small chunk\n      len = Buffer.byteLength(chunk, encoding);\n    } else {\n      // convert chunk to Buffer and calculate\n      chunk = Buffer.from(chunk, encoding);\n      encoding = undefined;\n      len = chunk.length;\n    }\n    this.set('Content-Length', len);\n  }\n\n  // populate ETag\n  var etag;\n  if (generateETag && len !== undefined) {\n    if (etag = etagFn(chunk, encoding)) {\n      this.set('ETag', etag);\n    }\n  }\n\n  // freshness\n  if (req.fresh) this.statusCode = 304;\n\n  // strip irrelevant headers\n  if (204 === this.statusCode || 304 === this.statusCode) {\n    this.removeHeader('Content-Type');\n    this.removeHeader('Content-Length');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n\n  // alter headers for 205\n  if (this.statusCode === 205) {\n    this.set('Content-Length', '0');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n  if (req.method === 'HEAD') {\n    // skip body for HEAD\n    this.end();\n  } else {\n    // respond\n    this.end(chunk, encoding);\n  }\n  return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n *     res.json(null);\n *     res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.json(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape');\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape);\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('Content-Type', 'application/json');\n  }\n  return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n *     res.jsonp(null);\n *     res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.jsonp(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape');\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape);\n  var callback = this.req.query[app.get('jsonp callback name')];\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'application/json');\n  }\n\n  // fixup callback\n  if (Array.isArray(callback)) {\n    callback = callback[0];\n  }\n\n  // jsonp\n  if (typeof callback === 'string' && callback.length !== 0) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'text/javascript');\n\n    // restrict callback charset\n    callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n    if (body === undefined) {\n      // empty argument\n      body = '';\n    } else if (typeof body === 'string') {\n      // replace chars not allowed in JavaScript that are in JSON\n      body = body.replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n    }\n\n    // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n    // the typeof check is just to reduce client error noise\n    body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n  }\n  return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n *     res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n  var body = statuses.message[statusCode] || String(statusCode);\n  this.statusCode = statusCode;\n  this.type('txt');\n  return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendFile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendFile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendFile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n  if (!path) {\n    throw new TypeError('path argument is required to res.sendFile');\n  }\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string to res.sendFile');\n  }\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n  if (!opts.root && !isAbsolute(path)) {\n    throw new TypeError('path must be absolute or specify root to res.sendFile');\n  }\n\n  // create file stream\n  var pathname = encodeURI(path);\n  var file = send(req, pathname, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendfile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendfile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendfile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // create file stream\n  var file = send(req, path, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\nres.sendfile = deprecate.function(res.sendfile, 'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download(path, filename, options, callback) {\n  var done = callback;\n  var name = filename;\n  var opts = options || null;\n\n  // support function as second or third arg\n  if (typeof filename === 'function') {\n    done = filename;\n    name = null;\n    opts = null;\n  } else if (typeof options === 'function') {\n    done = options;\n    opts = null;\n  }\n\n  // support optional filename, where options may be in it's place\n  if (typeof filename === 'object' && (typeof options === 'function' || options === undefined)) {\n    name = null;\n    opts = filename;\n  }\n\n  // set Content-Disposition when file is sent\n  var headers = {\n    'Content-Disposition': contentDisposition(name || path)\n  };\n\n  // merge user-provided headers\n  if (opts && opts.headers) {\n    var keys = Object.keys(opts.headers);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      if (key.toLowerCase() !== 'content-disposition') {\n        headers[key] = opts.headers[key];\n      }\n    }\n  }\n\n  // merge user-provided options\n  opts = Object.create(opts);\n  opts.headers = headers;\n\n  // Resolve the full path for sendFile\n  var fullPath = !opts.root ? resolve(path) : path;\n\n  // send file\n  return this.sendFile(fullPath, opts, done);\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n *     res.type('.html');\n *     res.type('html');\n *     res.type('json');\n *     res.type('application/json');\n *     res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType = res.type = function contentType(type) {\n  var ct = type.indexOf('/') === -1 ? mime.lookup(type) : type;\n  return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n *    res.format({\n *      'text/plain': function(){\n *        res.send('hey');\n *      },\n *\n *      'text/html': function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      'application/json': function () {\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n *    res.format({\n *      text: function(){\n *        res.send('hey');\n *      },\n *\n *      html: function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      json: function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function (obj) {\n  var req = this.req;\n  var next = req.next;\n  var keys = Object.keys(obj).filter(function (v) {\n    return v !== 'default';\n  });\n  var key = keys.length > 0 ? req.accepts(keys) : false;\n  this.vary(\"Accept\");\n  if (key) {\n    this.set('Content-Type', normalizeType(key).value);\n    obj[key](req, this, next);\n  } else if (obj.default) {\n    obj.default(req, this, next);\n  } else {\n    next(createError(406, {\n      types: normalizeTypes(keys).map(function (o) {\n        return o.value;\n      })\n    }));\n  }\n  return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n  if (filename) {\n    this.type(extname(filename));\n  }\n  this.set('Content-Disposition', contentDisposition(filename));\n  return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n *    res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n *    res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n *    res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n  var prev = this.get(field);\n  var value = val;\n  if (prev) {\n    // concat the new and prev vals\n    value = Array.isArray(prev) ? prev.concat(val) : Array.isArray(val) ? [prev].concat(val) : [prev, val];\n  }\n  return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n *    res.set('Foo', ['bar', 'baz']);\n *    res.set('Accept', 'application/json');\n *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set = res.header = function header(field, val) {\n  if (arguments.length === 2) {\n    var value = Array.isArray(val) ? val.map(String) : String(val);\n\n    // add charset to content-type\n    if (field.toLowerCase() === 'content-type') {\n      if (Array.isArray(value)) {\n        throw new TypeError('Content-Type cannot be set to an Array');\n      }\n      if (!charsetRegExp.test(value)) {\n        var charset = mime.charsets.lookup(value.split(';')[0]);\n        if (charset) value += '; charset=' + charset.toLowerCase();\n      }\n    }\n    this.setHeader(field, value);\n  } else {\n    for (var key in field) {\n      this.set(key, field[key]);\n    }\n  }\n  return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function (field) {\n  return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n  if (options) {\n    if (options.maxAge) {\n      deprecate('res.clearCookie: Passing \"options.maxAge\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n    if (options.expires) {\n      deprecate('res.clearCookie: Passing \"options.expires\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n  }\n  var opts = merge({\n    expires: new Date(1),\n    path: '/'\n  }, options);\n  return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n *    - `maxAge`   max-age in milliseconds, converted to `expires`\n *    - `signed`   sign the cookie\n *    - `path`     defaults to \"/\"\n *\n * Examples:\n *\n *    // \"Remember Me\" for 15 minutes\n *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n *    // same as above\n *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n  var opts = merge({}, options);\n  var secret = this.req.secret;\n  var signed = opts.signed;\n  if (signed && !secret) {\n    throw new Error('cookieParser(\"secret\") required for signed cookies');\n  }\n  var val = typeof value === 'object' ? 'j:' + JSON.stringify(value) : String(value);\n  if (signed) {\n    val = 's:' + sign(val, secret);\n  }\n  if (opts.maxAge != null) {\n    var maxAge = opts.maxAge - 0;\n    if (!isNaN(maxAge)) {\n      opts.expires = new Date(Date.now() + maxAge);\n      opts.maxAge = Math.floor(maxAge / 1000);\n    }\n  }\n  if (opts.path == null) {\n    opts.path = '/';\n  }\n  this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n  return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n *    res.location('/foo/bar').;\n *    res.location('http://example.com');\n *    res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n  var loc;\n\n  // \"back\" is an alias for the referrer\n  if (url === 'back') {\n    deprecate('res.location(\"back\"): use res.location(req.get(\"Referrer\") || \"/\") and refer to https://dub.sh/security-redirect for best practices');\n    loc = this.req.get('Referrer') || '/';\n  } else {\n    loc = String(url);\n  }\n  return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n *    res.redirect('/foo/bar');\n *    res.redirect('http://example.com');\n *    res.redirect(301, 'http://example.com');\n *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n  var address = url;\n  var body;\n  var status = 302;\n\n  // allow status / url\n  if (arguments.length === 2) {\n    if (typeof arguments[0] === 'number') {\n      status = arguments[0];\n      address = arguments[1];\n    } else {\n      deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n      status = arguments[1];\n    }\n  }\n\n  // Set location header\n  address = this.location(address).get('Location');\n\n  // Support text/{plain,html} by default\n  this.format({\n    text: function () {\n      body = statuses.message[status] + '. Redirecting to ' + address;\n    },\n    html: function () {\n      var u = escapeHtml(address);\n      body = '<p>' + statuses.message[status] + '. Redirecting to ' + u + '</p>';\n    },\n    default: function () {\n      body = '';\n    }\n  });\n\n  // Respond\n  this.statusCode = status;\n  this.set('Content-Length', Buffer.byteLength(body));\n  if (this.req.method === 'HEAD') {\n    this.end();\n  } else {\n    this.end(body);\n  }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function (field) {\n  // checks for back-compat\n  if (!field || Array.isArray(field) && !field.length) {\n    deprecate('res.vary(): Provide a field name');\n    return this;\n  }\n  vary(this, field);\n  return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n *  - `cache`     boolean hinting to the engine it should cache\n *  - `filename`  filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n  var app = this.req.app;\n  var done = callback;\n  var opts = options || {};\n  var req = this.req;\n  var self = this;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge res.locals\n  opts._locals = self.locals;\n\n  // default callback to respond\n  done = done || function (err, str) {\n    if (err) return req.next(err);\n    self.send(str);\n  };\n\n  // render\n  app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n  var done = false;\n  var streaming;\n\n  // request aborted\n  function onaborted() {\n    if (done) return;\n    done = true;\n    var err = new Error('Request aborted');\n    err.code = 'ECONNABORTED';\n    callback(err);\n  }\n\n  // directory\n  function ondirectory() {\n    if (done) return;\n    done = true;\n    var err = new Error('EISDIR, read');\n    err.code = 'EISDIR';\n    callback(err);\n  }\n\n  // errors\n  function onerror(err) {\n    if (done) return;\n    done = true;\n    callback(err);\n  }\n\n  // ended\n  function onend() {\n    if (done) return;\n    done = true;\n    callback();\n  }\n\n  // file\n  function onfile() {\n    streaming = false;\n  }\n\n  // finished\n  function onfinish(err) {\n    if (err && err.code === 'ECONNRESET') return onaborted();\n    if (err) return onerror(err);\n    if (done) return;\n    setImmediate(function () {\n      if (streaming !== false && !done) {\n        onaborted();\n        return;\n      }\n      if (done) return;\n      done = true;\n      callback();\n    });\n  }\n\n  // streaming\n  function onstream() {\n    streaming = true;\n  }\n  file.on('directory', ondirectory);\n  file.on('end', onend);\n  file.on('error', onerror);\n  file.on('file', onfile);\n  file.on('stream', onstream);\n  onFinished(res, onfinish);\n  if (options.headers) {\n    // set headers on successful transfer\n    file.on('headers', function headers(res) {\n      var obj = options.headers;\n      var keys = Object.keys(obj);\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        res.setHeader(k, obj[k]);\n      }\n    });\n  }\n\n  // pipe\n  file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify(value, replacer, spaces, escape) {\n  // v8 checks arguments.length for optimizing simple call\n  // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n  var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value);\n  if (escape && typeof json === 'string') {\n    json = json.replace(/[<>&]/g, function (c) {\n      switch (c.charCodeAt(0)) {\n        case 0x3c:\n          return '\\\\u003c';\n        case 0x3e:\n          return '\\\\u003e';\n        case 0x26:\n          return '\\\\u0026';\n        /* istanbul ignore next: unreachable default */\n        default:\n          return c;\n      }\n    });\n  }\n  return json;\n}", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar parseUrl = require('parseurl');\nvar resolve = require('path').resolve;\nvar send = require('send');\nvar url = require('url');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic;\nmodule.exports.mime = send.mime;\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic(root, options) {\n  if (!root) {\n    throw new TypeError('root path required');\n  }\n  if (typeof root !== 'string') {\n    throw new TypeError('root path must be a string');\n  }\n\n  // copy options object\n  var opts = Object.create(options || null);\n\n  // fall-though\n  var fallthrough = opts.fallthrough !== false;\n\n  // default redirect\n  var redirect = opts.redirect !== false;\n\n  // headers listener\n  var setHeaders = opts.setHeaders;\n  if (setHeaders && typeof setHeaders !== 'function') {\n    throw new TypeError('option setHeaders must be function');\n  }\n\n  // setup options for send\n  opts.maxage = opts.maxage || opts.maxAge || 0;\n  opts.root = resolve(root);\n\n  // construct directory listener\n  var onDirectory = redirect ? createRedirectDirectoryListener() : createNotFoundDirectoryListener();\n  return function serveStatic(req, res, next) {\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      if (fallthrough) {\n        return next();\n      }\n\n      // method not allowed\n      res.statusCode = 405;\n      res.setHeader('Allow', 'GET, HEAD');\n      res.setHeader('Content-Length', '0');\n      res.end();\n      return;\n    }\n    var forwardError = !fallthrough;\n    var originalUrl = parseUrl.original(req);\n    var path = parseUrl(req).pathname;\n\n    // make sure redirect occurs at mount\n    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n      path = '';\n    }\n\n    // create send stream\n    var stream = send(req, path, opts);\n\n    // add directory handler\n    stream.on('directory', onDirectory);\n\n    // add headers listener\n    if (setHeaders) {\n      stream.on('headers', setHeaders);\n    }\n\n    // add file listener for fallthrough\n    if (fallthrough) {\n      stream.on('file', function onFile() {\n        // once file is determined, always forward error\n        forwardError = true;\n      });\n    }\n\n    // forward errors\n    stream.on('error', function error(err) {\n      if (forwardError || !(err.statusCode < 500)) {\n        next(err);\n        return;\n      }\n      next();\n    });\n\n    // pipe\n    stream.pipe(res);\n  };\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes(str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) !== 0x2f /* / */) {\n      break;\n    }\n  }\n  return i > 1 ? '/' + str.substr(i) : str;\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument(title, body) {\n  return '<!DOCTYPE html>\\n' + '<html lang=\"en\">\\n' + '<head>\\n' + '<meta charset=\"utf-8\">\\n' + '<title>' + title + '</title>\\n' + '</head>\\n' + '<body>\\n' + '<pre>' + body + '</pre>\\n' + '</body>\\n' + '</html>\\n';\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener() {\n  return function notFound() {\n    this.error(404);\n  };\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener() {\n  return function redirect(res) {\n    if (this.hasTrailingSlash()) {\n      this.error(404);\n      return;\n    }\n\n    // get original URL\n    var originalUrl = parseUrl.original(this.req);\n\n    // append trailing slash\n    originalUrl.path = null;\n    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/');\n\n    // reformat the URL\n    var loc = encodeUrl(url.format(originalUrl));\n    var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc));\n\n    // send redirect response\n    res.statusCode = 301;\n    res.setHeader('Content-Type', 'text/html; charset=UTF-8');\n    res.setHeader('Content-Length', Buffer.byteLength(doc));\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\");\n    res.setHeader('X-Content-Type-Options', 'nosniff');\n    res.setHeader('Location', loc);\n    res.end(doc);\n  };\n}", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\nvar bodyParser = require('body-parser');\nvar EventEmitter = require('events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Route = require('./router/route');\nvar Router = require('./router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n  var app = function (req, res, next) {\n    app.handle(req, res, next);\n  };\n  mixin(app, EventEmitter.prototype, false);\n  mixin(app, proto, false);\n\n  // expose the prototype that will get set on requests\n  app.request = Object.create(req, {\n    app: {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: app\n    }\n  });\n\n  // expose the prototype that will get set on responses\n  app.response = Object.create(res, {\n    app: {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: app\n    }\n  });\n  app.init();\n  return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json;\nexports.query = require('./middleware/query');\nexports.raw = bodyParser.raw;\nexports.static = require('serve-static');\nexports.text = bodyParser.text;\nexports.urlencoded = bodyParser.urlencoded;\n\n/**\n * Replace removed middleware with an appropriate error message.\n */\n\nvar removedMiddlewares = ['bodyParser', 'compress', 'cookieSession', 'session', 'logger', 'cookieParser', 'favicon', 'responseTime', 'errorHandler', 'timeout', 'methodOverride', 'vhost', 'csrf', 'directory', 'limit', 'multipart', 'staticCache'];\nremovedMiddlewares.forEach(function (name) {\n  Object.defineProperty(exports, name, {\n    get: function () {\n      throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');\n    },\n    configurable: true\n  });\n});", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');"],
-  "mappings": "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G,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,qDAAqD;AAAA,MAC7D,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,gGAAgG;AAAA,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KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAK,GAAE,SAAU,CAAC,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,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,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAAA,MACxG,CAAC,QAAO,iEAAiE;AAAA,MACzE,CAAC,QAAO,gGAAgG;AAA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",
-  "names": ["codes", "status", "exports", "useColors", "useColors", "fd", "stream", "Buffer", "Buffer", "Buffer", "Buffer", "i", "Buffer", "Buffer", "i", "Buffer", "Buffer", "Buffer", "i", "fn", "charset", "extension", "concatty", "slicy", "Empty", "undefined", "doEval", "stringToPath", "getBaseIntrinsic", "compactQueue", "arrayToObject", "merge", "encode", "compact", "isRegExp", "isBuffer", "combine", "maybeMap", "isNonNullishPrimitive", "stringify", "value", "normalizeStringifyOptions", "normalizeParseOptions", "require_lib", "bodyParser", "require_ms", "require_debug", "require_browser", "useColors", "require_node", "useColors", "fd", "stream", "require_src", "escape", "url", "require_ms", "require_debug", "require_browser", "useColors", "require_node", "useColors", "fd", "stream", "require_src", "m", "match", "methods", "err", "route", "i", "query", "path", "resolve", "Buffer", "Buffer", "require_ms", "require_debug", "require_browser", "useColors", "require_node", "useColors", "fd", "stream", "require_src", "require_encodeurl", "path", "require_ms", "path", "etag", "index", "match", "send", "err", "stream", "type", "string", "error1", "require_utils", "Buffer", "fn", "View", "range", "subdomains", "decode", "Buffer", "send", "escape", "path", "res", "serveStatic", "req", "res", "require_express"]
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/package.json
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/package.json	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,3 +1,0 @@
-{
-  "type": "module"
-}
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/xhr2-TXIMV6CV.js
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/xhr2-TXIMV6CV.js	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,959 +1,0 @@
-import { createRequire } from 'module';const require = createRequire(import.meta.url);
-import {
-  __commonJS,
-  __require
-} from "./chunk-YHCV7DAQ.js";
-
-// node_modules/xhr2/lib/xhr2.js
-var require_xhr2 = __commonJS({
-  "node_modules/xhr2/lib/xhr2.js"(exports, module) {
-    (function() {
-      var InvalidStateError, NetworkError, ProgressEvent, SecurityError, SyntaxError, XMLHttpRequest, XMLHttpRequestEventTarget, XMLHttpRequestUpload, http, https, os, url;
-      XMLHttpRequestEventTarget = function() {
-        class XMLHttpRequestEventTarget2 {
-          // @private
-          // This is an abstract class and should not be instantiated directly.
-          constructor() {
-            this.onloadstart = null;
-            this.onprogress = null;
-            this.onabort = null;
-            this.onerror = null;
-            this.onload = null;
-            this.ontimeout = null;
-            this.onloadend = null;
-            this._listeners = {};
-          }
-          // Adds a new-style listener for one of the XHR events.
-          // @see http://www.w3.org/TR/XMLHttpRequest/#events
-          // @param {String} eventType an XHR event type, such as 'readystatechange'
-          // @param {function(ProgressEvent)} listener function that will be called when
-          //   the event fires
-          // @return {undefined} undefined
-          addEventListener(eventType, listener) {
-            var base;
-            eventType = eventType.toLowerCase();
-            (base = this._listeners)[eventType] || (base[eventType] = []);
-            this._listeners[eventType].push(listener);
-            return void 0;
-          }
-          // Removes an event listener added by calling addEventListener.
-          // @param {String} eventType an XHR event type, such as 'readystatechange'
-          // @param {function(ProgressEvent)} listener the value passed in a previous
-          //   call to addEventListener.
-          // @return {undefined} undefined
-          removeEventListener(eventType, listener) {
-            var index;
-            eventType = eventType.toLowerCase();
-            if (this._listeners[eventType]) {
-              index = this._listeners[eventType].indexOf(listener);
-              if (index !== -1) {
-                this._listeners[eventType].splice(index, 1);
-              }
-            }
-            return void 0;
-          }
-          // Calls all the listeners for an event.
-          // @param {ProgressEvent} event the event to be dispatched
-          // @return {undefined} undefined
-          dispatchEvent(event) {
-            var eventType, j, len, listener, listeners;
-            event.currentTarget = event.target = this;
-            eventType = event.type;
-            if (listeners = this._listeners[eventType]) {
-              for (j = 0, len = listeners.length; j < len; j++) {
-                listener = listeners[j];
-                listener.call(this, event);
-              }
-            }
-            if (listener = this[`on${eventType}`]) {
-              listener.call(this, event);
-            }
-            return void 0;
-          }
-        }
-        ;
-        XMLHttpRequestEventTarget2.prototype.onloadstart = null;
-        XMLHttpRequestEventTarget2.prototype.onprogress = null;
-        XMLHttpRequestEventTarget2.prototype.onabort = null;
-        XMLHttpRequestEventTarget2.prototype.onerror = null;
-        XMLHttpRequestEventTarget2.prototype.onload = null;
-        XMLHttpRequestEventTarget2.prototype.ontimeout = null;
-        XMLHttpRequestEventTarget2.prototype.onloadend = null;
-        return XMLHttpRequestEventTarget2;
-      }.call(this);
-      http = __require("http");
-      https = __require("https");
-      os = __require("os");
-      url = __require("url");
-      XMLHttpRequest = function() {
-        class XMLHttpRequest2 extends XMLHttpRequestEventTarget {
-          // Creates a new request.
-          // @param {Object} options one or more of the options below
-          // @option options {Boolean} anon if true, the request's anonymous flag
-          //   will be set
-          // @see http://www.w3.org/TR/XMLHttpRequest/#constructors
-          // @see http://www.w3.org/TR/XMLHttpRequest/#anonymous-flag
-          constructor(options) {
-            super();
-            this.onreadystatechange = null;
-            this._anonymous = options && options.anon;
-            this.readyState = XMLHttpRequest2.UNSENT;
-            this.response = null;
-            this.responseText = "";
-            this.responseType = "";
-            this.responseURL = "";
-            this.status = 0;
-            this.statusText = "";
-            this.timeout = 0;
-            this.upload = new XMLHttpRequestUpload(this);
-            this._method = null;
-            this._url = null;
-            this._sync = false;
-            this._headers = null;
-            this._loweredHeaders = null;
-            this._mimeOverride = null;
-            this._request = null;
-            this._response = null;
-            this._responseParts = null;
-            this._responseHeaders = null;
-            this._aborting = null;
-            this._error = null;
-            this._loadedBytes = 0;
-            this._totalBytes = 0;
-            this._lengthComputable = false;
-          }
-          // Sets the XHR's method, URL, synchronous flag, and authentication params.
-          // @param {String} method the HTTP method to be used
-          // @param {String} url the URL that the request will be made to
-          // @param {?Boolean} async if false, the XHR should be processed
-          //   synchronously; true by default
-          // @param {?String} user the user credential to be used in HTTP basic
-          //   authentication
-          // @param {?String} password the password credential to be used in HTTP basic
-          //   authentication
-          // @return {undefined} undefined
-          // @throw {SecurityError} method is not one of the allowed methods
-          // @throw {SyntaxError} urlString is not a valid URL
-          // @throw {Error} the URL contains an unsupported protocol; the supported
-          //   protocols are file, http and https
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-open()-method
-          open(method, url2, async, user, password) {
-            var xhrUrl;
-            method = method.toUpperCase();
-            if (method in this._restrictedMethods) {
-              throw new SecurityError(`HTTP method ${method} is not allowed in XHR`);
-            }
-            xhrUrl = this._parseUrl(url2);
-            if (async === void 0) {
-              async = true;
-            }
-            switch (this.readyState) {
-              case XMLHttpRequest2.UNSENT:
-              case XMLHttpRequest2.OPENED:
-              case XMLHttpRequest2.DONE:
-                null;
-                break;
-              case XMLHttpRequest2.HEADERS_RECEIVED:
-              case XMLHttpRequest2.LOADING:
-                null;
-            }
-            this._method = method;
-            this._url = xhrUrl;
-            this._sync = !async;
-            this._headers = {};
-            this._loweredHeaders = {};
-            this._mimeOverride = null;
-            this._setReadyState(XMLHttpRequest2.OPENED);
-            this._request = null;
-            this._response = null;
-            this.status = 0;
-            this.statusText = "";
-            this._responseParts = [];
-            this._responseHeaders = null;
-            this._loadedBytes = 0;
-            this._totalBytes = 0;
-            this._lengthComputable = false;
-            return void 0;
-          }
-          // Appends a header to the list of author request headers.
-          // @param {String} name the HTTP header name
-          // @param {String} value the HTTP header value
-          // @return {undefined} undefined
-          // @throw {InvalidStateError} readyState is not OPENED
-          // @throw {SyntaxError} name is not a valid HTTP header name or value is not
-          //   a valid HTTP header value
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method
-          setRequestHeader(name, value) {
-            var loweredName;
-            if (this.readyState !== XMLHttpRequest2.OPENED) {
-              throw new InvalidStateError("XHR readyState must be OPENED");
-            }
-            loweredName = name.toLowerCase();
-            if (this._restrictedHeaders[loweredName] || /^sec\-/.test(loweredName) || /^proxy-/.test(loweredName)) {
-              console.warn(`Refused to set unsafe header "${name}"`);
-              return void 0;
-            }
-            value = value.toString();
-            if (loweredName in this._loweredHeaders) {
-              name = this._loweredHeaders[loweredName];
-              this._headers[name] = this._headers[name] + ", " + value;
-            } else {
-              this._loweredHeaders[loweredName] = name;
-              this._headers[name] = value;
-            }
-            return void 0;
-          }
-          // Initiates the request.
-          // @param {?String, ?ArrayBufferView} data the data to be sent; ignored for
-          //   GET and HEAD requests
-          // @return {undefined} undefined
-          // @throw {InvalidStateError} readyState is not OPENED
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-send()-method
-          send(data) {
-            if (this.readyState !== XMLHttpRequest2.OPENED) {
-              throw new InvalidStateError("XHR readyState must be OPENED");
-            }
-            if (this._request) {
-              throw new InvalidStateError("send() already called");
-            }
-            switch (this._url.protocol) {
-              case "file:":
-                this._sendFile(data);
-                break;
-              case "http:":
-              case "https:":
-                this._sendHttp(data);
-                break;
-              default:
-                throw new NetworkError(`Unsupported protocol ${this._url.protocol}`);
-            }
-            return void 0;
-          }
-          // Cancels the network activity performed by this request.
-          // @return {undefined} undefined
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-abort()-method
-          abort() {
-            if (!this._request) {
-              return;
-            }
-            this._request.abort();
-            this._setError();
-            this._dispatchProgress("abort");
-            this._dispatchProgress("loadend");
-            return void 0;
-          }
-          // Returns a header value in the HTTP response for this XHR.
-          // @param {String} name case-insensitive HTTP header name
-          // @return {?String} value the value of the header whose name matches the
-          //   given name, or null if there is no such header
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method
-          getResponseHeader(name) {
-            var loweredName;
-            if (!this._responseHeaders) {
-              return null;
-            }
-            loweredName = name.toLowerCase();
-            if (loweredName in this._responseHeaders) {
-              return this._responseHeaders[loweredName];
-            } else {
-              return null;
-            }
-          }
-          // Returns all the HTTP headers in this XHR's response.
-          // @return {String} header lines separated by CR LF, where each header line
-          //   has the name and value separated by a ": " (colon, space); the empty
-          //   string is returned if the headers are not available
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method
-          getAllResponseHeaders() {
-            var lines, name, value;
-            if (!this._responseHeaders) {
-              return "";
-            }
-            lines = function() {
-              var ref, results;
-              ref = this._responseHeaders;
-              results = [];
-              for (name in ref) {
-                value = ref[name];
-                results.push(`${name}: ${value}`);
-              }
-              return results;
-            }.call(this);
-            return lines.join("\r\n");
-          }
-          // Overrides the Content-Type
-          // @return {undefined} undefined
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-overridemimetype()-method
-          overrideMimeType(newMimeType) {
-            if (this.readyState === XMLHttpRequest2.LOADING || this.readyState === XMLHttpRequest2.DONE) {
-              throw new InvalidStateError("overrideMimeType() not allowed in LOADING or DONE");
-            }
-            this._mimeOverride = newMimeType.toLowerCase();
-            return void 0;
-          }
-          // Network configuration not exposed in the XHR API.
-          // Although the XMLHttpRequest specification calls itself "ECMAScript HTTP",
-          // it assumes that requests are always performed in the context of a browser
-          // application, where some network parameters are set by the browser user and
-          // should not be modified by Web applications. This API provides access to
-          // these network parameters.
-          // NOTE: this is not in the XMLHttpRequest API, and will not work in
-          // browsers.  It is a stable node-xhr2 API.
-          // @param {Object} options one or more of the options below
-          // @option options {?http.Agent} httpAgent the value for the nodejsHttpAgent
-          //   property (the agent used for HTTP requests)
-          // @option options {?https.Agent} httpsAgent the value for the
-          //   nodejsHttpsAgent property (the agent used for HTTPS requests)
-          // @return {undefined} undefined
-          nodejsSet(options) {
-            var baseUrl, parsedUrl;
-            if ("httpAgent" in options) {
-              this.nodejsHttpAgent = options.httpAgent;
-            }
-            if ("httpsAgent" in options) {
-              this.nodejsHttpsAgent = options.httpsAgent;
-            }
-            if ("baseUrl" in options) {
-              baseUrl = options.baseUrl;
-              if (baseUrl !== null) {
-                parsedUrl = url.parse(baseUrl, false, true);
-                if (!parsedUrl.protocol) {
-                  throw new SyntaxError("baseUrl must be an absolute URL");
-                }
-              }
-              this.nodejsBaseUrl = baseUrl;
-            }
-            return void 0;
-          }
-          // Default settings for the network configuration not exposed in the XHR API.
-          // NOTE: this is not in the XMLHttpRequest API, and will not work in
-          // browsers.  It is a stable node-xhr2 API.
-          // @param {Object} options one or more of the options below
-          // @option options {?http.Agent} httpAgent the default value for the
-          //   nodejsHttpAgent property (the agent used for HTTP requests)
-          // @option options {https.Agent} httpsAgent the default value for the
-          //   nodejsHttpsAgent property (the agent used for HTTPS requests)
-          // @return {undefined} undefined
-          // @see XMLHttpRequest.nodejsSet
-          static nodejsSet(options) {
-            XMLHttpRequest2.prototype.nodejsSet(options);
-            return void 0;
-          }
-          // Sets the readyState property and fires the readystatechange event.
-          // @private
-          // @param {Number} newReadyState the new value of readyState
-          // @return {undefined} undefined
-          _setReadyState(newReadyState) {
-            var event;
-            this.readyState = newReadyState;
-            event = new ProgressEvent("readystatechange");
-            this.dispatchEvent(event);
-            return void 0;
-          }
-          // XMLHttpRequest#send() implementation for the file: protocol.
-          // @private
-          _sendFile() {
-            if (this._url.method !== "GET") {
-              throw new NetworkError("The file protocol only supports GET");
-            }
-            throw new Error("Protocol file: not implemented");
-          }
-          // XMLHttpRequest#send() implementation for the http: and https: protocols.
-          // @private
-          // This method sets the instance variables and calls _sendHxxpRequest(), which
-          // is responsible for building a node.js request and firing it off. The code
-          // in _sendHxxpRequest() is separated off so it can be reused when handling
-          // redirects.
-          // @see http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send()-method
-          _sendHttp(data) {
-            if (this._sync) {
-              throw new Error("Synchronous XHR processing not implemented");
-            }
-            if (data != null && (this._method === "GET" || this._method === "HEAD")) {
-              console.warn(`Discarding entity body for ${this._method} requests`);
-              data = null;
-            } else {
-              data || (data = "");
-            }
-            this.upload._setData(data);
-            this._finalizeHeaders();
-            this._sendHxxpRequest();
-            return void 0;
-          }
-          // Sets up and fires off a HTTP/HTTPS request using the node.js API.
-          // @private
-          // This method contains the bulk of the XMLHttpRequest#send() implementation,
-          // and is also used to issue new HTTP requests when handling HTTP redirects.
-          // @see http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send()-method
-          _sendHxxpRequest() {
-            var agent, hxxp, request;
-            if (this._url.protocol === "http:") {
-              hxxp = http;
-              agent = this.nodejsHttpAgent;
-            } else {
-              hxxp = https;
-              agent = this.nodejsHttpsAgent;
-            }
-            request = hxxp.request({
-              hostname: this._url.hostname,
-              port: this._url.port,
-              path: this._url.path,
-              auth: this._url.auth,
-              method: this._method,
-              headers: this._headers,
-              agent
-            });
-            this._request = request;
-            if (this.timeout) {
-              request.setTimeout(this.timeout, () => {
-                return this._onHttpTimeout(request);
-              });
-            }
-            request.on("response", (response) => {
-              return this._onHttpResponse(request, response);
-            });
-            request.on("error", (error) => {
-              return this._onHttpRequestError(request, error);
-            });
-            this.upload._startUpload(request);
-            if (this._request === request) {
-              this._dispatchProgress("loadstart");
-            }
-            return void 0;
-          }
-          // Fills in the restricted HTTP headers with default values.
-          // This is called right before the HTTP request is sent off.
-          // @private
-          // @return {undefined} undefined
-          _finalizeHeaders() {
-            var base;
-            this._headers["Connection"] = "keep-alive";
-            this._headers["Host"] = this._url.host;
-            if (this._anonymous) {
-              this._headers["Referer"] = "about:blank";
-            }
-            (base = this._headers)["User-Agent"] || (base["User-Agent"] = this._userAgent);
-            this.upload._finalizeHeaders(this._headers, this._loweredHeaders);
-            return void 0;
-          }
-          // Called when the headers of an HTTP response have been received.
-          // @private
-          // @param {http.ClientRequest} request the node.js ClientRequest instance that
-          //   produced this response
-          // @param {http.ClientResponse} response the node.js ClientResponse instance
-          //   passed to
-          _onHttpResponse(request, response) {
-            var lengthString;
-            if (this._request !== request) {
-              return;
-            }
-            switch (response.statusCode) {
-              case 301:
-              case 302:
-              case 303:
-              case 307:
-              case 308:
-                this._url = this._parseUrl(response.headers["location"]);
-                this._method = "GET";
-                if ("content-type" in this._loweredHeaders) {
-                  delete this._headers[this._loweredHeaders["content-type"]];
-                  delete this._loweredHeaders["content-type"];
-                }
-                if ("Content-Type" in this._headers) {
-                  delete this._headers["Content-Type"];
-                }
-                delete this._headers["Content-Length"];
-                this.upload._reset();
-                this._finalizeHeaders();
-                this._sendHxxpRequest();
-                return;
-            }
-            this._response = response;
-            this._response.on("data", (data) => {
-              return this._onHttpResponseData(response, data);
-            });
-            this._response.on("end", () => {
-              return this._onHttpResponseEnd(response);
-            });
-            this._response.on("close", () => {
-              return this._onHttpResponseClose(response);
-            });
-            this.responseURL = this._url.href.split("#")[0];
-            this.status = this._response.statusCode;
-            this.statusText = http.STATUS_CODES[this.status];
-            this._parseResponseHeaders(response);
-            if (lengthString = this._responseHeaders["content-length"]) {
-              this._totalBytes = parseInt(lengthString);
-              this._lengthComputable = true;
-            } else {
-              this._lengthComputable = false;
-            }
-            return this._setReadyState(XMLHttpRequest2.HEADERS_RECEIVED);
-          }
-          // Called when some data has been received on a HTTP connection.
-          // @private
-          // @param {http.ClientResponse} response the node.js ClientResponse instance
-          //   that fired this event
-          // @param {String, Buffer} data the data that has been received
-          _onHttpResponseData(response, data) {
-            if (this._response !== response) {
-              return;
-            }
-            this._responseParts.push(data);
-            this._loadedBytes += data.length;
-            if (this.readyState !== XMLHttpRequest2.LOADING) {
-              this._setReadyState(XMLHttpRequest2.LOADING);
-            }
-            return this._dispatchProgress("progress");
-          }
-          // Called when the HTTP request finished processing.
-          // @private
-          // @param {http.ClientResponse} response the node.js ClientResponse instance
-          //   that fired this event
-          _onHttpResponseEnd(response) {
-            if (this._response !== response) {
-              return;
-            }
-            this._parseResponse();
-            this._request = null;
-            this._response = null;
-            this._setReadyState(XMLHttpRequest2.DONE);
-            this._dispatchProgress("load");
-            return this._dispatchProgress("loadend");
-          }
-          // Called when the underlying HTTP connection was closed prematurely.
-          // If this method is called, it will be called after or instead of
-          // onHttpResponseEnd.
-          // @private
-          // @param {http.ClientResponse} response the node.js ClientResponse instance
-          //   that fired this event
-          _onHttpResponseClose(response) {
-            var request;
-            if (this._response !== response) {
-              return;
-            }
-            request = this._request;
-            this._setError();
-            request.abort();
-            this._setReadyState(XMLHttpRequest2.DONE);
-            this._dispatchProgress("error");
-            return this._dispatchProgress("loadend");
-          }
-          // Called when the timeout set on the HTTP socket expires.
-          // @private
-          // @param {http.ClientRequest} request the node.js ClientRequest instance that
-          //   fired this event
-          _onHttpTimeout(request) {
-            if (this._request !== request) {
-              return;
-            }
-            this._setError();
-            request.abort();
-            this._setReadyState(XMLHttpRequest2.DONE);
-            this._dispatchProgress("timeout");
-            return this._dispatchProgress("loadend");
-          }
-          // Called when something wrong happens on the HTTP socket
-          // @private
-          // @param {http.ClientRequest} request the node.js ClientRequest instance that
-          //   fired this event
-          // @param {Error} error emitted exception
-          _onHttpRequestError(request, error) {
-            if (this._request !== request) {
-              return;
-            }
-            this._setError();
-            request.abort();
-            this._setReadyState(XMLHttpRequest2.DONE);
-            this._dispatchProgress("error");
-            return this._dispatchProgress("loadend");
-          }
-          // Fires an XHR progress event.
-          // @private
-          // @param {String} eventType one of the XHR progress event types, such as
-          //   'load' and 'progress'
-          _dispatchProgress(eventType) {
-            var event;
-            event = new ProgressEvent(eventType);
-            event.lengthComputable = this._lengthComputable;
-            event.loaded = this._loadedBytes;
-            event.total = this._totalBytes;
-            this.dispatchEvent(event);
-            return void 0;
-          }
-          // Sets up the XHR to reflect the fact that an error has occurred.
-          // The possible errors are a network error, a timeout, or an abort.
-          // @private
-          _setError() {
-            this._request = null;
-            this._response = null;
-            this._responseHeaders = null;
-            this._responseParts = null;
-            return void 0;
-          }
-          // Parses a request URL string.
-          // @private
-          // This method is a thin wrapper around url.parse() that normalizes HTTP
-          // user/password credentials. It is used to parse the URL string passed to
-          // XMLHttpRequest#open() and the URLs in the Location headers of HTTP redirect
-          // responses.
-          // @param {String} urlString the URL to be parsed
-          // @return {Object} parsed URL
-          _parseUrl(urlString) {
-            var absoluteUrlString, index, password, user, xhrUrl;
-            if (this.nodejsBaseUrl === null) {
-              absoluteUrlString = urlString;
-            } else {
-              absoluteUrlString = url.resolve(this.nodejsBaseUrl, urlString);
-            }
-            xhrUrl = url.parse(absoluteUrlString, false, true);
-            xhrUrl.hash = null;
-            if (xhrUrl.auth && (typeof user !== "undefined" && user !== null || typeof password !== "undefined" && password !== null)) {
-              index = xhrUrl.auth.indexOf(":");
-              if (index === -1) {
-                if (!user) {
-                  user = xhrUrl.auth;
-                }
-              } else {
-                if (!user) {
-                  user = xhrUrl.substring(0, index);
-                }
-                if (!password) {
-                  password = xhrUrl.substring(index + 1);
-                }
-              }
-            }
-            if (user || password) {
-              xhrUrl.auth = `${user}:${password}`;
-            }
-            return xhrUrl;
-          }
-          // Reads the headers from a node.js ClientResponse instance.
-          // @private
-          // @param {http.ClientResponse} response the response whose headers will be
-          //   imported into this XMLHttpRequest's state
-          // @return {undefined} undefined
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method
-          // @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method
-          _parseResponseHeaders(response) {
-            var loweredName, name, ref, value;
-            this._responseHeaders = {};
-            ref = response.headers;
-            for (name in ref) {
-              value = ref[name];
-              loweredName = name.toLowerCase();
-              if (this._privateHeaders[loweredName]) {
-                continue;
-              }
-              if (this._mimeOverride !== null && loweredName === "content-type") {
-                value = this._mimeOverride;
-              }
-              this._responseHeaders[loweredName] = value;
-            }
-            if (this._mimeOverride !== null && !("content-type" in this._responseHeaders)) {
-              this._responseHeaders["content-type"] = this._mimeOverride;
-            }
-            return void 0;
-          }
-          // Sets the response and responseText properties when an XHR completes.
-          // @private
-          // @return {undefined} undefined
-          _parseResponse() {
-            var arrayBuffer, buffer, i, j, jsonError, ref, view;
-            if (Buffer.concat) {
-              buffer = Buffer.concat(this._responseParts);
-            } else {
-              buffer = this._concatBuffers(this._responseParts);
-            }
-            this._responseParts = null;
-            switch (this.responseType) {
-              case "text":
-                this._parseTextResponse(buffer);
-                break;
-              case "json":
-                this.responseText = null;
-                try {
-                  this.response = JSON.parse(buffer.toString("utf-8"));
-                } catch (error1) {
-                  jsonError = error1;
-                  this.response = null;
-                }
-                break;
-              case "buffer":
-                this.responseText = null;
-                this.response = buffer;
-                break;
-              case "arraybuffer":
-                this.responseText = null;
-                arrayBuffer = new ArrayBuffer(buffer.length);
-                view = new Uint8Array(arrayBuffer);
-                for (i = j = 0, ref = buffer.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
-                  view[i] = buffer[i];
-                }
-                this.response = arrayBuffer;
-                break;
-              default:
-                this._parseTextResponse(buffer);
-            }
-            return void 0;
-          }
-          // Sets response and responseText for a 'text' response type.
-          // @private
-          // @param {Buffer} buffer the node.js Buffer containing the binary response
-          // @return {undefined} undefined
-          _parseTextResponse(buffer) {
-            var e;
-            try {
-              this.responseText = buffer.toString(this._parseResponseEncoding());
-            } catch (error1) {
-              e = error1;
-              this.responseText = buffer.toString("binary");
-            }
-            this.response = this.responseText;
-            return void 0;
-          }
-          // Figures out the string encoding of the XHR's response.
-          // This is called to determine the encoding when responseText is set.
-          // @private
-          // @return {String} a string encoding, e.g. 'utf-8'
-          _parseResponseEncoding() {
-            var contentType, encoding, match;
-            encoding = null;
-            if (contentType = this._responseHeaders["content-type"]) {
-              if (match = /\;\s*charset\=(.*)$/.exec(contentType)) {
-                return match[1];
-              }
-            }
-            return "utf-8";
-          }
-          // Buffer.concat implementation for node 0.6.
-          // @private
-          // @param {Array<Buffer>} buffers the buffers whose contents will be merged
-          // @return {Buffer} same as Buffer.concat(buffers) in node 0.8 and above
-          _concatBuffers(buffers) {
-            var buffer, j, k, len, len1, length, target;
-            if (buffers.length === 0) {
-              return Buffer.alloc(0);
-            }
-            if (buffers.length === 1) {
-              return buffers[0];
-            }
-            length = 0;
-            for (j = 0, len = buffers.length; j < len; j++) {
-              buffer = buffers[j];
-              length += buffer.length;
-            }
-            target = Buffer.alloc(length);
-            length = 0;
-            for (k = 0, len1 = buffers.length; k < len1; k++) {
-              buffer = buffers[k];
-              buffer.copy(target, length);
-              length += buffer.length;
-            }
-            return target;
-          }
-        }
-        ;
-        XMLHttpRequest2.prototype.onreadystatechange = null;
-        XMLHttpRequest2.prototype.readyState = null;
-        XMLHttpRequest2.prototype.response = null;
-        XMLHttpRequest2.prototype.responseText = null;
-        XMLHttpRequest2.prototype.responseType = null;
-        XMLHttpRequest2.prototype.status = null;
-        XMLHttpRequest2.prototype.timeout = null;
-        XMLHttpRequest2.prototype.upload = null;
-        XMLHttpRequest2.prototype.UNSENT = 0;
-        XMLHttpRequest2.UNSENT = 0;
-        XMLHttpRequest2.prototype.OPENED = 1;
-        XMLHttpRequest2.OPENED = 1;
-        XMLHttpRequest2.prototype.HEADERS_RECEIVED = 2;
-        XMLHttpRequest2.HEADERS_RECEIVED = 2;
-        XMLHttpRequest2.prototype.LOADING = 3;
-        XMLHttpRequest2.LOADING = 3;
-        XMLHttpRequest2.prototype.DONE = 4;
-        XMLHttpRequest2.DONE = 4;
-        XMLHttpRequest2.prototype.nodejsHttpAgent = http.globalAgent;
-        XMLHttpRequest2.prototype.nodejsHttpsAgent = https.globalAgent;
-        XMLHttpRequest2.prototype.nodejsBaseUrl = null;
-        XMLHttpRequest2.prototype._restrictedMethods = {
-          CONNECT: true,
-          TRACE: true,
-          TRACK: true
-        };
-        XMLHttpRequest2.prototype._restrictedHeaders = {
-          "accept-charset": true,
-          "accept-encoding": true,
-          "access-control-request-headers": true,
-          "access-control-request-method": true,
-          connection: true,
-          "content-length": true,
-          cookie: true,
-          cookie2: true,
-          date: true,
-          dnt: true,
-          expect: true,
-          host: true,
-          "keep-alive": true,
-          origin: true,
-          referer: true,
-          te: true,
-          trailer: true,
-          "transfer-encoding": true,
-          upgrade: true,
-          via: true
-        };
-        XMLHttpRequest2.prototype._privateHeaders = {
-          "set-cookie": true,
-          "set-cookie2": true
-        };
-        XMLHttpRequest2.prototype._userAgent = `Mozilla/5.0 (${os.type()} ${os.arch()}) node.js/${process.versions.node} v8/${process.versions.v8}`;
-        return XMLHttpRequest2;
-      }.call(this);
-      module.exports = XMLHttpRequest;
-      XMLHttpRequest.XMLHttpRequest = XMLHttpRequest;
-      SecurityError = class SecurityError extends Error {
-        // @private
-        constructor() {
-          super();
-        }
-      };
-      XMLHttpRequest.SecurityError = SecurityError;
-      InvalidStateError = class InvalidStateError extends Error {
-        // @private
-        constructor() {
-          super();
-        }
-      };
-      InvalidStateError = class InvalidStateError extends Error {
-      };
-      XMLHttpRequest.InvalidStateError = InvalidStateError;
-      NetworkError = class NetworkError extends Error {
-        // @private
-        constructor() {
-          super();
-        }
-      };
-      XMLHttpRequest.SyntaxError = SyntaxError;
-      SyntaxError = class SyntaxError extends Error {
-        // @private:
-        constructor() {
-          super();
-        }
-      };
-      ProgressEvent = function() {
-        class ProgressEvent2 {
-          // Creates a new event.
-          // @param {String} type the event type, e.g. 'readystatechange'; must be
-          //   lowercased
-          constructor(type) {
-            this.type = type;
-            this.target = null;
-            this.currentTarget = null;
-            this.lengthComputable = false;
-            this.loaded = 0;
-            this.total = 0;
-          }
-        }
-        ;
-        ProgressEvent2.prototype.bubbles = false;
-        ProgressEvent2.prototype.cancelable = false;
-        ProgressEvent2.prototype.target = null;
-        ProgressEvent2.prototype.loaded = null;
-        ProgressEvent2.prototype.lengthComputable = null;
-        ProgressEvent2.prototype.total = null;
-        return ProgressEvent2;
-      }.call(this);
-      XMLHttpRequest.ProgressEvent = ProgressEvent;
-      XMLHttpRequestUpload = class XMLHttpRequestUpload extends XMLHttpRequestEventTarget {
-        // @private
-        // @param {XMLHttpRequest} the XMLHttpRequest that this upload object is
-        //   associated with
-        constructor(request) {
-          super();
-          this._request = request;
-          this._reset();
-        }
-        // Sets up this Upload to handle a new request.
-        // @private
-        // @return {undefined} undefined
-        _reset() {
-          this._contentType = null;
-          this._body = null;
-          return void 0;
-        }
-        // Implements the upload-related part of the send() XHR specification.
-        // @private
-        // @param {?String, ?Buffer, ?ArrayBufferView} data the argument passed to
-        //   XMLHttpRequest#send()
-        // @return {undefined} undefined
-        // @see step 4 of http://www.w3.org/TR/XMLHttpRequest/#the-send()-method
-        _setData(data) {
-          var body, i, j, k, offset, ref, ref1, view;
-          if (typeof data === "undefined" || data === null) {
-            return;
-          }
-          if (typeof data === "string") {
-            if (data.length !== 0) {
-              this._contentType = "text/plain;charset=UTF-8";
-            }
-            this._body = Buffer.from(data, "utf8");
-          } else if (Buffer.isBuffer(data)) {
-            this._body = data;
-          } else if (data instanceof ArrayBuffer) {
-            body = Buffer.alloc(data.byteLength);
-            view = new Uint8Array(data);
-            for (i = j = 0, ref = data.byteLength; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
-              body[i] = view[i];
-            }
-            this._body = body;
-          } else if (data.buffer && data.buffer instanceof ArrayBuffer) {
-            body = Buffer.alloc(data.byteLength);
-            offset = data.byteOffset;
-            view = new Uint8Array(data.buffer);
-            for (i = k = 0, ref1 = data.byteLength; 0 <= ref1 ? k < ref1 : k > ref1; i = 0 <= ref1 ? ++k : --k) {
-              body[i] = view[i + offset];
-            }
-            this._body = body;
-          } else {
-            throw new Error(`Unsupported send() data ${data}`);
-          }
-          return void 0;
-        }
-        // Updates the HTTP headers right before the request is sent.
-        // This is used to set data-dependent headers such as Content-Length and
-        // Content-Type.
-        // @private
-        // @param {Object<String, String>} headers the HTTP headers to be sent
-        // @param {Object<String, String>} loweredHeaders maps lowercased HTTP header
-        //   names (e.g., 'content-type') to the actual names used in the headers
-        //   parameter (e.g., 'Content-Type')
-        // @return {undefined} undefined
-        _finalizeHeaders(headers, loweredHeaders) {
-          if (this._contentType) {
-            if (!("content-type" in loweredHeaders)) {
-              headers["Content-Type"] = this._contentType;
-            }
-          }
-          if (this._body) {
-            headers["Content-Length"] = this._body.length.toString();
-          }
-          return void 0;
-        }
-        // Starts sending the HTTP request data.
-        // @private
-        // @param {http.ClientRequest} request the HTTP request
-        // @return {undefined} undefined
-        _startUpload(request) {
-          if (this._body) {
-            request.write(this._body);
-          }
-          request.end();
-          return void 0;
-        }
-      };
-      XMLHttpRequest.XMLHttpRequestUpload = XMLHttpRequestUpload;
-    }).call(exports);
-  }
-});
-export default require_xhr2();
-//# sourceMappingURL=xhr2-TXIMV6CV.js.map
Index: ontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/xhr2-TXIMV6CV.js.map
===================================================================
--- frontend/.angular/cache/19.0.6/DistributorApp/vite/deps_ssr/xhr2-TXIMV6CV.js.map	(revision cc535e144513a6ef9d289c4864d1946216dea34f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "version": 3,
-  "sources": ["../../../../../../node_modules/xhr2/lib/xhr2.js"],
-  "sourcesContent": ["// Generated by CoffeeScript 2.5.1\n(function () {\n  // This file's name is set up in such a way that it will always show up first in\n  // the list of files given to coffee --join, so that the other files can assume\n  // that XMLHttpRequestEventTarget was already defined.\n\n  // The DOM EventTarget subclass used by XMLHttpRequest.\n\n  // @see http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n  var InvalidStateError, NetworkError, ProgressEvent, SecurityError, SyntaxError, XMLHttpRequest, XMLHttpRequestEventTarget, XMLHttpRequestUpload, http, https, os, url;\n  XMLHttpRequestEventTarget = function () {\n    class XMLHttpRequestEventTarget {\n      // @private\n      // This is an abstract class and should not be instantiated directly.\n      constructor() {\n        this.onloadstart = null;\n        this.onprogress = null;\n        this.onabort = null;\n        this.onerror = null;\n        this.onload = null;\n        this.ontimeout = null;\n        this.onloadend = null;\n        this._listeners = {};\n      }\n\n      // Adds a new-style listener for one of the XHR events.\n\n      // @see http://www.w3.org/TR/XMLHttpRequest/#events\n\n      // @param {String} eventType an XHR event type, such as 'readystatechange'\n      // @param {function(ProgressEvent)} listener function that will be called when\n      //   the event fires\n      // @return {undefined} undefined\n      addEventListener(eventType, listener) {\n        var base;\n        eventType = eventType.toLowerCase();\n        (base = this._listeners)[eventType] || (base[eventType] = []);\n        this._listeners[eventType].push(listener);\n        return void 0;\n      }\n\n      // Removes an event listener added by calling addEventListener.\n\n      // @param {String} eventType an XHR event type, such as 'readystatechange'\n      // @param {function(ProgressEvent)} listener the value passed in a previous\n      //   call to addEventListener.\n      // @return {undefined} undefined\n      removeEventListener(eventType, listener) {\n        var index;\n        eventType = eventType.toLowerCase();\n        if (this._listeners[eventType]) {\n          index = this._listeners[eventType].indexOf(listener);\n          if (index !== -1) {\n            this._listeners[eventType].splice(index, 1);\n          }\n        }\n        return void 0;\n      }\n\n      // Calls all the listeners for an event.\n\n      // @param {ProgressEvent} event the event to be dispatched\n      // @return {undefined} undefined\n      dispatchEvent(event) {\n        var eventType, j, len, listener, listeners;\n        event.currentTarget = event.target = this;\n        eventType = event.type;\n        if (listeners = this._listeners[eventType]) {\n          for (j = 0, len = listeners.length; j < len; j++) {\n            listener = listeners[j];\n            listener.call(this, event);\n          }\n        }\n        if (listener = this[`on${eventType}`]) {\n          listener.call(this, event);\n        }\n        return void 0;\n      }\n    }\n    ;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'loadstart' event\n    XMLHttpRequestEventTarget.prototype.onloadstart = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'progress' event\n    XMLHttpRequestEventTarget.prototype.onprogress = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'abort' event\n    XMLHttpRequestEventTarget.prototype.onabort = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'error' event\n    XMLHttpRequestEventTarget.prototype.onerror = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'load' event\n    XMLHttpRequestEventTarget.prototype.onload = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'timeout' event\n    XMLHttpRequestEventTarget.prototype.ontimeout = null;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler\n    //   for the 'loadend' event\n    XMLHttpRequestEventTarget.prototype.onloadend = null;\n    return XMLHttpRequestEventTarget;\n  }.call(this);\n\n  // This file's name is set up in such a way that it will always show up second\n  // in the list of files given to coffee --join, so it can use the\n  // XMLHttpRequestEventTarget definition and so that the other files can assume\n  // that XMLHttpRequest was already defined.\n  http = require('http');\n  https = require('https');\n  os = require('os');\n  url = require('url');\n  XMLHttpRequest = function () {\n    // The ECMAScript HTTP API.\n\n    // @see http://www.w3.org/TR/XMLHttpRequest/#introduction\n    class XMLHttpRequest extends XMLHttpRequestEventTarget {\n      // Creates a new request.\n\n      // @param {Object} options one or more of the options below\n      // @option options {Boolean} anon if true, the request's anonymous flag\n      //   will be set\n      // @see http://www.w3.org/TR/XMLHttpRequest/#constructors\n      // @see http://www.w3.org/TR/XMLHttpRequest/#anonymous-flag\n      constructor(options) {\n        super();\n        this.onreadystatechange = null;\n        this._anonymous = options && options.anon;\n        this.readyState = XMLHttpRequest.UNSENT;\n        this.response = null;\n        this.responseText = '';\n        this.responseType = '';\n        this.responseURL = '';\n        this.status = 0;\n        this.statusText = '';\n        this.timeout = 0;\n        this.upload = new XMLHttpRequestUpload(this);\n        this._method = null; // String\n        this._url = null; // Return value of url.parse()\n        this._sync = false;\n        this._headers = null; // Object<String, String>\n        this._loweredHeaders = null; // Object<lowercase String, String>\n        this._mimeOverride = null;\n        this._request = null; // http.ClientRequest\n        this._response = null; // http.ClientResponse\n        this._responseParts = null; // Array<Buffer, String>\n        this._responseHeaders = null; // Object<lowercase String, String>\n        this._aborting = null;\n        this._error = null;\n        this._loadedBytes = 0;\n        this._totalBytes = 0;\n        this._lengthComputable = false;\n      }\n\n      // Sets the XHR's method, URL, synchronous flag, and authentication params.\n\n      // @param {String} method the HTTP method to be used\n      // @param {String} url the URL that the request will be made to\n      // @param {?Boolean} async if false, the XHR should be processed\n      //   synchronously; true by default\n      // @param {?String} user the user credential to be used in HTTP basic\n      //   authentication\n      // @param {?String} password the password credential to be used in HTTP basic\n      //   authentication\n      // @return {undefined} undefined\n      // @throw {SecurityError} method is not one of the allowed methods\n      // @throw {SyntaxError} urlString is not a valid URL\n      // @throw {Error} the URL contains an unsupported protocol; the supported\n      //   protocols are file, http and https\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-open()-method\n      open(method, url, async, user, password) {\n        var xhrUrl;\n        method = method.toUpperCase();\n        if (method in this._restrictedMethods) {\n          throw new SecurityError(`HTTP method ${method} is not allowed in XHR`);\n        }\n        xhrUrl = this._parseUrl(url);\n        if (async === void 0) {\n          async = true;\n        }\n        switch (this.readyState) {\n          case XMLHttpRequest.UNSENT:\n          case XMLHttpRequest.OPENED:\n          case XMLHttpRequest.DONE:\n            // Nothing to do here.\n            null;\n            break;\n          case XMLHttpRequest.HEADERS_RECEIVED:\n          case XMLHttpRequest.LOADING:\n            // TODO(pwnall): terminate abort(), terminate send()\n            null;\n        }\n        this._method = method;\n        this._url = xhrUrl;\n        this._sync = !async;\n        this._headers = {};\n        this._loweredHeaders = {};\n        this._mimeOverride = null;\n        this._setReadyState(XMLHttpRequest.OPENED);\n        this._request = null;\n        this._response = null;\n        this.status = 0;\n        this.statusText = '';\n        this._responseParts = [];\n        this._responseHeaders = null;\n        this._loadedBytes = 0;\n        this._totalBytes = 0;\n        this._lengthComputable = false;\n        return void 0;\n      }\n\n      // Appends a header to the list of author request headers.\n\n      // @param {String} name the HTTP header name\n      // @param {String} value the HTTP header value\n      // @return {undefined} undefined\n      // @throw {InvalidStateError} readyState is not OPENED\n      // @throw {SyntaxError} name is not a valid HTTP header name or value is not\n      //   a valid HTTP header value\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method\n      setRequestHeader(name, value) {\n        var loweredName;\n        if (this.readyState !== XMLHttpRequest.OPENED) {\n          throw new InvalidStateError(\"XHR readyState must be OPENED\");\n        }\n        loweredName = name.toLowerCase();\n        if (this._restrictedHeaders[loweredName] || /^sec\\-/.test(loweredName) || /^proxy-/.test(loweredName)) {\n          console.warn(`Refused to set unsafe header \\\"${name}\\\"`);\n          return void 0;\n        }\n        value = value.toString();\n        if (loweredName in this._loweredHeaders) {\n          // Combine value with the existing header value.\n          name = this._loweredHeaders[loweredName];\n          this._headers[name] = this._headers[name] + ', ' + value;\n        } else {\n          // New header.\n          this._loweredHeaders[loweredName] = name;\n          this._headers[name] = value;\n        }\n        return void 0;\n      }\n\n      // Initiates the request.\n\n      // @param {?String, ?ArrayBufferView} data the data to be sent; ignored for\n      //   GET and HEAD requests\n      // @return {undefined} undefined\n      // @throw {InvalidStateError} readyState is not OPENED\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-send()-method\n      send(data) {\n        if (this.readyState !== XMLHttpRequest.OPENED) {\n          throw new InvalidStateError(\"XHR readyState must be OPENED\");\n        }\n        if (this._request) {\n          throw new InvalidStateError(\"send() already called\");\n        }\n        switch (this._url.protocol) {\n          case 'file:':\n            this._sendFile(data);\n            break;\n          case 'http:':\n          case 'https:':\n            this._sendHttp(data);\n            break;\n          default:\n            throw new NetworkError(`Unsupported protocol ${this._url.protocol}`);\n        }\n        return void 0;\n      }\n\n      // Cancels the network activity performed by this request.\n\n      // @return {undefined} undefined\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-abort()-method\n      abort() {\n        if (!this._request) {\n          return;\n        }\n        this._request.abort();\n        this._setError();\n        this._dispatchProgress('abort');\n        this._dispatchProgress('loadend');\n        return void 0;\n      }\n\n      // Returns a header value in the HTTP response for this XHR.\n\n      // @param {String} name case-insensitive HTTP header name\n      // @return {?String} value the value of the header whose name matches the\n      //   given name, or null if there is no such header\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method\n      getResponseHeader(name) {\n        var loweredName;\n        if (!this._responseHeaders) {\n          return null;\n        }\n        loweredName = name.toLowerCase();\n        if (loweredName in this._responseHeaders) {\n          return this._responseHeaders[loweredName];\n        } else {\n          return null;\n        }\n      }\n\n      // Returns all the HTTP headers in this XHR's response.\n\n      // @return {String} header lines separated by CR LF, where each header line\n      //   has the name and value separated by a \": \" (colon, space); the empty\n      //   string is returned if the headers are not available\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\n      getAllResponseHeaders() {\n        var lines, name, value;\n        if (!this._responseHeaders) {\n          return '';\n        }\n        lines = function () {\n          var ref, results;\n          ref = this._responseHeaders;\n          results = [];\n          for (name in ref) {\n            value = ref[name];\n            results.push(`${name}: ${value}`);\n          }\n          return results;\n        }.call(this);\n        return lines.join(\"\\r\\n\");\n      }\n\n      // Overrides the Content-Type\n\n      // @return {undefined} undefined\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-overridemimetype()-method\n      overrideMimeType(newMimeType) {\n        if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) {\n          throw new InvalidStateError(\"overrideMimeType() not allowed in LOADING or DONE\");\n        }\n        this._mimeOverride = newMimeType.toLowerCase();\n        return void 0;\n      }\n\n      // Network configuration not exposed in the XHR API.\n\n      // Although the XMLHttpRequest specification calls itself \"ECMAScript HTTP\",\n      // it assumes that requests are always performed in the context of a browser\n      // application, where some network parameters are set by the browser user and\n      // should not be modified by Web applications. This API provides access to\n      // these network parameters.\n\n      // NOTE: this is not in the XMLHttpRequest API, and will not work in\n      // browsers.  It is a stable node-xhr2 API.\n\n      // @param {Object} options one or more of the options below\n      // @option options {?http.Agent} httpAgent the value for the nodejsHttpAgent\n      //   property (the agent used for HTTP requests)\n      // @option options {?https.Agent} httpsAgent the value for the\n      //   nodejsHttpsAgent property (the agent used for HTTPS requests)\n      // @return {undefined} undefined\n      nodejsSet(options) {\n        var baseUrl, parsedUrl;\n        if ('httpAgent' in options) {\n          this.nodejsHttpAgent = options.httpAgent;\n        }\n        if ('httpsAgent' in options) {\n          this.nodejsHttpsAgent = options.httpsAgent;\n        }\n        if ('baseUrl' in options) {\n          baseUrl = options.baseUrl;\n          if (baseUrl !== null) {\n            parsedUrl = url.parse(baseUrl, false, true);\n            if (!parsedUrl.protocol) {\n              throw new SyntaxError(\"baseUrl must be an absolute URL\");\n            }\n          }\n          this.nodejsBaseUrl = baseUrl;\n        }\n        return void 0;\n      }\n\n      // Default settings for the network configuration not exposed in the XHR API.\n\n      // NOTE: this is not in the XMLHttpRequest API, and will not work in\n      // browsers.  It is a stable node-xhr2 API.\n\n      // @param {Object} options one or more of the options below\n      // @option options {?http.Agent} httpAgent the default value for the\n      //   nodejsHttpAgent property (the agent used for HTTP requests)\n      // @option options {https.Agent} httpsAgent the default value for the\n      //   nodejsHttpsAgent property (the agent used for HTTPS requests)\n      // @return {undefined} undefined\n      // @see XMLHttpRequest.nodejsSet\n      static nodejsSet(options) {\n        // \"this\" will be set to XMLHttpRequest.prototype, so the instance nodejsSet\n        // operates on default property values.\n        XMLHttpRequest.prototype.nodejsSet(options);\n        return void 0;\n      }\n\n      // Sets the readyState property and fires the readystatechange event.\n\n      // @private\n      // @param {Number} newReadyState the new value of readyState\n      // @return {undefined} undefined\n      _setReadyState(newReadyState) {\n        var event;\n        this.readyState = newReadyState;\n        event = new ProgressEvent('readystatechange');\n        this.dispatchEvent(event);\n        return void 0;\n      }\n\n      // XMLHttpRequest#send() implementation for the file: protocol.\n\n      // @private\n      _sendFile() {\n        if (this._url.method !== 'GET') {\n          throw new NetworkError('The file protocol only supports GET');\n        }\n        throw new Error(\"Protocol file: not implemented\");\n      }\n\n      // XMLHttpRequest#send() implementation for the http: and https: protocols.\n\n      // @private\n      // This method sets the instance variables and calls _sendHxxpRequest(), which\n      // is responsible for building a node.js request and firing it off. The code\n      // in _sendHxxpRequest() is separated off so it can be reused when handling\n      // redirects.\n\n      // @see http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send()-method\n      _sendHttp(data) {\n        if (this._sync) {\n          throw new Error(\"Synchronous XHR processing not implemented\");\n        }\n        if (data != null && (this._method === 'GET' || this._method === 'HEAD')) {\n          console.warn(`Discarding entity body for ${this._method} requests`);\n          data = null;\n        } else {\n          // Send Content-Length: 0\n          data || (data = '');\n        }\n        // NOTE: this is called before finalizeHeaders so that the uploader can\n        //       figure out Content-Length and Content-Type.\n        this.upload._setData(data);\n        this._finalizeHeaders();\n        this._sendHxxpRequest();\n        return void 0;\n      }\n\n      // Sets up and fires off a HTTP/HTTPS request using the node.js API.\n\n      // @private\n      // This method contains the bulk of the XMLHttpRequest#send() implementation,\n      // and is also used to issue new HTTP requests when handling HTTP redirects.\n\n      // @see http://www.w3.org/TR/XMLHttpRequest/#infrastructure-for-the-send()-method\n      _sendHxxpRequest() {\n        var agent, hxxp, request;\n        if (this._url.protocol === 'http:') {\n          hxxp = http;\n          agent = this.nodejsHttpAgent;\n        } else {\n          hxxp = https;\n          agent = this.nodejsHttpsAgent;\n        }\n        request = hxxp.request({\n          hostname: this._url.hostname,\n          port: this._url.port,\n          path: this._url.path,\n          auth: this._url.auth,\n          method: this._method,\n          headers: this._headers,\n          agent: agent\n        });\n        this._request = request;\n        if (this.timeout) {\n          request.setTimeout(this.timeout, () => {\n            return this._onHttpTimeout(request);\n          });\n        }\n        request.on('response', response => {\n          return this._onHttpResponse(request, response);\n        });\n        request.on('error', error => {\n          return this._onHttpRequestError(request, error);\n        });\n        this.upload._startUpload(request);\n        if (this._request === request) {\n          // An http error might have already fired.\n          this._dispatchProgress('loadstart');\n        }\n        return void 0;\n      }\n\n      // Fills in the restricted HTTP headers with default values.\n\n      // This is called right before the HTTP request is sent off.\n\n      // @private\n      // @return {undefined} undefined\n      _finalizeHeaders() {\n        var base;\n        this._headers['Connection'] = 'keep-alive';\n        this._headers['Host'] = this._url.host;\n        if (this._anonymous) {\n          this._headers['Referer'] = 'about:blank';\n        }\n        (base = this._headers)['User-Agent'] || (base['User-Agent'] = this._userAgent);\n        this.upload._finalizeHeaders(this._headers, this._loweredHeaders);\n        return void 0;\n      }\n\n      // Called when the headers of an HTTP response have been received.\n\n      // @private\n      // @param {http.ClientRequest} request the node.js ClientRequest instance that\n      //   produced this response\n      // @param {http.ClientResponse} response the node.js ClientResponse instance\n      //   passed to\n      _onHttpResponse(request, response) {\n        var lengthString;\n        if (this._request !== request) {\n          return;\n        }\n        // Transparent redirection handling.\n        switch (response.statusCode) {\n          case 301:\n          case 302:\n          case 303:\n          case 307:\n          case 308:\n            this._url = this._parseUrl(response.headers['location']);\n            this._method = 'GET';\n            if ('content-type' in this._loweredHeaders) {\n              delete this._headers[this._loweredHeaders['content-type']];\n              delete this._loweredHeaders['content-type'];\n            }\n            // XMLHttpRequestUpload#_finalizeHeaders() sets Content-Type directly.\n            if ('Content-Type' in this._headers) {\n              delete this._headers['Content-Type'];\n            }\n            // Restricted headers can't be set by the user, no need to check\n            // loweredHeaders.\n            delete this._headers['Content-Length'];\n            this.upload._reset();\n            this._finalizeHeaders();\n            this._sendHxxpRequest();\n            return;\n        }\n        this._response = response;\n        this._response.on('data', data => {\n          return this._onHttpResponseData(response, data);\n        });\n        this._response.on('end', () => {\n          return this._onHttpResponseEnd(response);\n        });\n        this._response.on('close', () => {\n          return this._onHttpResponseClose(response);\n        });\n        this.responseURL = this._url.href.split('#')[0];\n        this.status = this._response.statusCode;\n        this.statusText = http.STATUS_CODES[this.status];\n        this._parseResponseHeaders(response);\n        if (lengthString = this._responseHeaders['content-length']) {\n          this._totalBytes = parseInt(lengthString);\n          this._lengthComputable = true;\n        } else {\n          this._lengthComputable = false;\n        }\n        return this._setReadyState(XMLHttpRequest.HEADERS_RECEIVED);\n      }\n\n      // Called when some data has been received on a HTTP connection.\n\n      // @private\n      // @param {http.ClientResponse} response the node.js ClientResponse instance\n      //   that fired this event\n      // @param {String, Buffer} data the data that has been received\n      _onHttpResponseData(response, data) {\n        if (this._response !== response) {\n          return;\n        }\n        this._responseParts.push(data);\n        this._loadedBytes += data.length;\n        if (this.readyState !== XMLHttpRequest.LOADING) {\n          this._setReadyState(XMLHttpRequest.LOADING);\n        }\n        return this._dispatchProgress('progress');\n      }\n\n      // Called when the HTTP request finished processing.\n\n      // @private\n      // @param {http.ClientResponse} response the node.js ClientResponse instance\n      //   that fired this event\n      _onHttpResponseEnd(response) {\n        if (this._response !== response) {\n          return;\n        }\n        this._parseResponse();\n        this._request = null;\n        this._response = null;\n        this._setReadyState(XMLHttpRequest.DONE);\n        this._dispatchProgress('load');\n        return this._dispatchProgress('loadend');\n      }\n\n      // Called when the underlying HTTP connection was closed prematurely.\n\n      // If this method is called, it will be called after or instead of\n      // onHttpResponseEnd.\n\n      // @private\n      // @param {http.ClientResponse} response the node.js ClientResponse instance\n      //   that fired this event\n      _onHttpResponseClose(response) {\n        var request;\n        if (this._response !== response) {\n          return;\n        }\n        request = this._request;\n        this._setError();\n        request.abort();\n        this._setReadyState(XMLHttpRequest.DONE);\n        this._dispatchProgress('error');\n        return this._dispatchProgress('loadend');\n      }\n\n      // Called when the timeout set on the HTTP socket expires.\n\n      // @private\n      // @param {http.ClientRequest} request the node.js ClientRequest instance that\n      //   fired this event\n      _onHttpTimeout(request) {\n        if (this._request !== request) {\n          return;\n        }\n        this._setError();\n        request.abort();\n        this._setReadyState(XMLHttpRequest.DONE);\n        this._dispatchProgress('timeout');\n        return this._dispatchProgress('loadend');\n      }\n\n      // Called when something wrong happens on the HTTP socket\n\n      // @private\n      // @param {http.ClientRequest} request the node.js ClientRequest instance that\n      //   fired this event\n      // @param {Error} error emitted exception\n      _onHttpRequestError(request, error) {\n        if (this._request !== request) {\n          return;\n        }\n        this._setError();\n        request.abort();\n        this._setReadyState(XMLHttpRequest.DONE);\n        this._dispatchProgress('error');\n        return this._dispatchProgress('loadend');\n      }\n\n      // Fires an XHR progress event.\n\n      // @private\n      // @param {String} eventType one of the XHR progress event types, such as\n      //   'load' and 'progress'\n      _dispatchProgress(eventType) {\n        var event;\n        event = new ProgressEvent(eventType);\n        event.lengthComputable = this._lengthComputable;\n        event.loaded = this._loadedBytes;\n        event.total = this._totalBytes;\n        this.dispatchEvent(event);\n        return void 0;\n      }\n\n      // Sets up the XHR to reflect the fact that an error has occurred.\n\n      // The possible errors are a network error, a timeout, or an abort.\n\n      // @private\n      _setError() {\n        this._request = null;\n        this._response = null;\n        this._responseHeaders = null;\n        this._responseParts = null;\n        return void 0;\n      }\n\n      // Parses a request URL string.\n\n      // @private\n      // This method is a thin wrapper around url.parse() that normalizes HTTP\n      // user/password credentials. It is used to parse the URL string passed to\n      // XMLHttpRequest#open() and the URLs in the Location headers of HTTP redirect\n      // responses.\n\n      // @param {String} urlString the URL to be parsed\n      // @return {Object} parsed URL\n      _parseUrl(urlString) {\n        var absoluteUrlString, index, password, user, xhrUrl;\n        if (this.nodejsBaseUrl === null) {\n          absoluteUrlString = urlString;\n        } else {\n          absoluteUrlString = url.resolve(this.nodejsBaseUrl, urlString);\n        }\n        xhrUrl = url.parse(absoluteUrlString, false, true);\n        xhrUrl.hash = null;\n        if (xhrUrl.auth && (typeof user !== \"undefined\" && user !== null || typeof password !== \"undefined\" && password !== null)) {\n          index = xhrUrl.auth.indexOf(':');\n          if (index === -1) {\n            if (!user) {\n              user = xhrUrl.auth;\n            }\n          } else {\n            if (!user) {\n              user = xhrUrl.substring(0, index);\n            }\n            if (!password) {\n              password = xhrUrl.substring(index + 1);\n            }\n          }\n        }\n        if (user || password) {\n          xhrUrl.auth = `${user}:${password}`;\n        }\n        return xhrUrl;\n      }\n\n      // Reads the headers from a node.js ClientResponse instance.\n\n      // @private\n      // @param {http.ClientResponse} response the response whose headers will be\n      //   imported into this XMLHttpRequest's state\n      // @return {undefined} undefined\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method\n      // @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\n      _parseResponseHeaders(response) {\n        var loweredName, name, ref, value;\n        this._responseHeaders = {};\n        ref = response.headers;\n        for (name in ref) {\n          value = ref[name];\n          loweredName = name.toLowerCase();\n          if (this._privateHeaders[loweredName]) {\n            continue;\n          }\n          if (this._mimeOverride !== null && loweredName === 'content-type') {\n            value = this._mimeOverride;\n          }\n          this._responseHeaders[loweredName] = value;\n        }\n        if (this._mimeOverride !== null && !('content-type' in this._responseHeaders)) {\n          this._responseHeaders['content-type'] = this._mimeOverride;\n        }\n        return void 0;\n      }\n\n      // Sets the response and responseText properties when an XHR completes.\n\n      // @private\n      // @return {undefined} undefined\n      _parseResponse() {\n        var arrayBuffer, buffer, i, j, jsonError, ref, view;\n        if (Buffer.concat) {\n          buffer = Buffer.concat(this._responseParts);\n        } else {\n          // node 0.6\n          buffer = this._concatBuffers(this._responseParts);\n        }\n        this._responseParts = null;\n        switch (this.responseType) {\n          case 'text':\n            this._parseTextResponse(buffer);\n            break;\n          case 'json':\n            this.responseText = null;\n            try {\n              this.response = JSON.parse(buffer.toString('utf-8'));\n            } catch (error1) {\n              jsonError = error1;\n              this.response = null;\n            }\n            break;\n          case 'buffer':\n            this.responseText = null;\n            this.response = buffer;\n            break;\n          case 'arraybuffer':\n            this.responseText = null;\n            arrayBuffer = new ArrayBuffer(buffer.length);\n            view = new Uint8Array(arrayBuffer);\n            for (i = j = 0, ref = buffer.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {\n              view[i] = buffer[i];\n            }\n            this.response = arrayBuffer;\n            break;\n          default:\n            // TODO(pwnall): content-base detection\n            this._parseTextResponse(buffer);\n        }\n        return void 0;\n      }\n\n      // Sets response and responseText for a 'text' response type.\n\n      // @private\n      // @param {Buffer} buffer the node.js Buffer containing the binary response\n      // @return {undefined} undefined\n      _parseTextResponse(buffer) {\n        var e;\n        try {\n          this.responseText = buffer.toString(this._parseResponseEncoding());\n        } catch (error1) {\n          e = error1;\n          // Unknown encoding.\n          this.responseText = buffer.toString('binary');\n        }\n        this.response = this.responseText;\n        return void 0;\n      }\n\n      // Figures out the string encoding of the XHR's response.\n\n      // This is called to determine the encoding when responseText is set.\n\n      // @private\n      // @return {String} a string encoding, e.g. 'utf-8'\n      _parseResponseEncoding() {\n        var contentType, encoding, match;\n        encoding = null;\n        if (contentType = this._responseHeaders['content-type']) {\n          if (match = /\\;\\s*charset\\=(.*)$/.exec(contentType)) {\n            return match[1];\n          }\n        }\n        return 'utf-8';\n      }\n\n      // Buffer.concat implementation for node 0.6.\n\n      // @private\n      // @param {Array<Buffer>} buffers the buffers whose contents will be merged\n      // @return {Buffer} same as Buffer.concat(buffers) in node 0.8 and above\n      _concatBuffers(buffers) {\n        var buffer, j, k, len, len1, length, target;\n        if (buffers.length === 0) {\n          return Buffer.alloc(0);\n        }\n        if (buffers.length === 1) {\n          return buffers[0];\n        }\n        length = 0;\n        for (j = 0, len = buffers.length; j < len; j++) {\n          buffer = buffers[j];\n          length += buffer.length;\n        }\n        target = Buffer.alloc(length);\n        length = 0;\n        for (k = 0, len1 = buffers.length; k < len1; k++) {\n          buffer = buffers[k];\n          buffer.copy(target, length);\n          length += buffer.length;\n        }\n        return target;\n      }\n    }\n    ;\n\n    // @property {function(ProgressEvent)} DOM level 0-style handler for the\n    //   'readystatechange' event\n    XMLHttpRequest.prototype.onreadystatechange = null;\n\n    // @property {Number} the current state of the XHR object\n    // @see http://www.w3.org/TR/XMLHttpRequest/#states\n    XMLHttpRequest.prototype.readyState = null;\n\n    // @property {String, ArrayBuffer, Buffer, Object} processed XHR response\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-response-attribute\n    XMLHttpRequest.prototype.response = null;\n\n    // @property {String} response string, if responseType is '' or 'text'\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-responsetext-attribute\n    XMLHttpRequest.prototype.responseText = null;\n\n    // @property {String} sets the parsing method for the XHR response\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute\n    XMLHttpRequest.prototype.responseType = null;\n\n    // @property {Number} the HTTP\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute\n    XMLHttpRequest.prototype.status = null;\n\n    // @property {Number} milliseconds to wait for the request to complete\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute\n    XMLHttpRequest.prototype.timeout = null;\n\n    // @property {XMLHttpRequestUpload} the associated upload information\n    // @see http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute\n    XMLHttpRequest.prototype.upload = null;\n\n    // readyState value before XMLHttpRequest#open() is called\n    XMLHttpRequest.prototype.UNSENT = 0;\n\n    // readyState value before XMLHttpRequest#open() is called\n    XMLHttpRequest.UNSENT = 0;\n\n    // readyState value after XMLHttpRequest#open() is called, and before\n    //   XMLHttpRequest#send() is called; XMLHttpRequest#setRequestHeader() can be\n    //   called in this state\n    XMLHttpRequest.prototype.OPENED = 1;\n\n    // readyState value after XMLHttpRequest#open() is called, and before\n    //   XMLHttpRequest#send() is called; XMLHttpRequest#setRequestHeader() can be\n    //   called in this state\n    XMLHttpRequest.OPENED = 1;\n\n    // readyState value after redirects have been followed and the HTTP headers of\n    //   the final response have been received\n    XMLHttpRequest.prototype.HEADERS_RECEIVED = 2;\n\n    // readyState value after redirects have been followed and the HTTP headers of\n    //   the final response have been received\n    XMLHttpRequest.HEADERS_RECEIVED = 2;\n\n    // readyState value when the response entity body is being received\n    XMLHttpRequest.prototype.LOADING = 3;\n\n    // readyState value when the response entity body is being received\n    XMLHttpRequest.LOADING = 3;\n\n    // readyState value after the request has been completely processed\n    XMLHttpRequest.prototype.DONE = 4;\n\n    // readyState value after the request has been completely processed\n    XMLHttpRequest.DONE = 4;\n\n    // @property {http.Agent} the agent option passed to HTTP requests\n\n    // NOTE: this is not in the XMLHttpRequest API, and will not work in browsers.\n    // It is a stable node-xhr2 API that is useful for testing & going through\n    // web-proxies.\n    XMLHttpRequest.prototype.nodejsHttpAgent = http.globalAgent;\n\n    // @property {https.Agent} the agent option passed to HTTPS requests\n\n    // NOTE: this is not in the XMLHttpRequest API, and will not work in browsers.\n    // It is a stable node-xhr2 API that is useful for testing & going through\n    // web-proxies.\n    XMLHttpRequest.prototype.nodejsHttpsAgent = https.globalAgent;\n\n    // @property {String} the base URL that relative URLs get resolved to\n\n    // NOTE: this is not in the XMLHttpRequest API, and will not work in browsers.\n    // Its browser equivalent is the base URL of the document associated with the\n    // Window object. It is a stable node-xhr2 API provided for libraries such as\n    // Angular Universal.\n    XMLHttpRequest.prototype.nodejsBaseUrl = null;\n\n    // HTTP methods that are disallowed in the XHR spec.\n\n    // @private\n    // @see Step 6 in http://www.w3.org/TR/XMLHttpRequest/#the-open()-method\n    XMLHttpRequest.prototype._restrictedMethods = {\n      CONNECT: true,\n      TRACE: true,\n      TRACK: true\n    };\n\n    // HTTP request headers that are disallowed in the XHR spec.\n\n    // @private\n    // @see Step 5 in\n    //   http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method\n    XMLHttpRequest.prototype._restrictedHeaders = {\n      'accept-charset': true,\n      'accept-encoding': true,\n      'access-control-request-headers': true,\n      'access-control-request-method': true,\n      connection: true,\n      'content-length': true,\n      cookie: true,\n      cookie2: true,\n      date: true,\n      dnt: true,\n      expect: true,\n      host: true,\n      'keep-alive': true,\n      origin: true,\n      referer: true,\n      te: true,\n      trailer: true,\n      'transfer-encoding': true,\n      upgrade: true,\n      via: true\n    };\n\n    // HTTP response headers that should not be exposed according to the XHR spec.\n\n    // @private\n    // @see Step 3 in\n    //     http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method\n    XMLHttpRequest.prototype._privateHeaders = {\n      'set-cookie': true,\n      'set-cookie2': true\n    };\n\n    // The default value of the User-Agent header.\n    XMLHttpRequest.prototype._userAgent = `Mozilla/5.0 (${os.type()} ${os.arch()}) ` + `node.js/${process.versions.node} v8/${process.versions.v8}`;\n    return XMLHttpRequest;\n  }.call(this);\n\n  // XMLHttpRequest is the result of require('node-xhr2').\n  module.exports = XMLHttpRequest;\n\n  // Make node-xhr2 work as a drop-in replacement for libraries that promote the\n  // following usage pattern:\n  //     var XMLHttpRequest = require('xhr-library-name').XMLHttpRequest\n  XMLHttpRequest.XMLHttpRequest = XMLHttpRequest;\n\n  // This file defines the custom errors used in the XMLHttpRequest specification.\n\n  // Thrown if the XHR security policy is violated.\n  SecurityError = class SecurityError extends Error {\n    // @private\n    constructor() {\n      super();\n    }\n  };\n\n  // Thrown if the XHR security policy is violated.\n  XMLHttpRequest.SecurityError = SecurityError;\n\n  // Usually thrown if the XHR is in the wrong readyState for an operation.\n  InvalidStateError = class InvalidStateError extends Error {\n    // @private\n    constructor() {\n      super();\n    }\n  };\n\n  // Usually thrown if the XHR is in the wrong readyState for an operation.\n  InvalidStateError = class InvalidStateError extends Error {};\n  XMLHttpRequest.InvalidStateError = InvalidStateError;\n\n  // Thrown if there is a problem with the URL passed to the XHR.\n  NetworkError = class NetworkError extends Error {\n    // @private\n    constructor() {\n      super();\n    }\n  };\n\n  // Thrown if parsing URLs errors out.\n  XMLHttpRequest.SyntaxError = SyntaxError;\n  SyntaxError = class SyntaxError extends Error {\n    // @private:\n    constructor() {\n      super();\n    }\n  };\n  ProgressEvent = function () {\n    // http://xhr.spec.whatwg.org/#interface-progressevent\n    class ProgressEvent {\n      // Creates a new event.\n\n      // @param {String} type the event type, e.g. 'readystatechange'; must be\n      //   lowercased\n      constructor(type) {\n        this.type = type;\n        this.target = null;\n        this.currentTarget = null;\n        this.lengthComputable = false;\n        this.loaded = 0;\n        this.total = 0;\n      }\n    }\n    ;\n\n    // Getting the time from the OS is expensive, skip on that for now.\n    // @timeStamp = Date.now()\n\n    // @property {Boolean} for compatibility with DOM events\n    ProgressEvent.prototype.bubbles = false;\n\n    // @property {Boolean} for fompatibility with DOM events\n    ProgressEvent.prototype.cancelable = false;\n\n    // @property {XMLHttpRequest} the request that caused this event\n    ProgressEvent.prototype.target = null;\n\n    // @property {Number} number of bytes that have already been downloaded or\n    //   uploaded\n    ProgressEvent.prototype.loaded = null;\n\n    // @property {Boolean} true if the Content-Length response header is available\n    //   and the value of the event's total property is meaningful\n    ProgressEvent.prototype.lengthComputable = null;\n\n    // @property {Number} number of bytes that will be downloaded or uploaded by\n    //   the request that fired the event\n    ProgressEvent.prototype.total = null;\n    return ProgressEvent;\n  }.call(this);\n\n  // The XHR spec exports the ProgressEvent constructor.\n  XMLHttpRequest.ProgressEvent = ProgressEvent;\n\n  // @see http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n  XMLHttpRequestUpload = class XMLHttpRequestUpload extends XMLHttpRequestEventTarget {\n    // @private\n    // @param {XMLHttpRequest} the XMLHttpRequest that this upload object is\n    //   associated with\n    constructor(request) {\n      super();\n      this._request = request;\n      this._reset();\n    }\n\n    // Sets up this Upload to handle a new request.\n\n    // @private\n    // @return {undefined} undefined\n    _reset() {\n      this._contentType = null;\n      this._body = null;\n      return void 0;\n    }\n\n    // Implements the upload-related part of the send() XHR specification.\n\n    // @private\n    // @param {?String, ?Buffer, ?ArrayBufferView} data the argument passed to\n    //   XMLHttpRequest#send()\n    // @return {undefined} undefined\n    // @see step 4 of http://www.w3.org/TR/XMLHttpRequest/#the-send()-method\n    _setData(data) {\n      var body, i, j, k, offset, ref, ref1, view;\n      if (typeof data === 'undefined' || data === null) {\n        return;\n      }\n      if (typeof data === 'string') {\n        // DOMString\n        if (data.length !== 0) {\n          this._contentType = 'text/plain;charset=UTF-8';\n        }\n        this._body = Buffer.from(data, 'utf8');\n      } else if (Buffer.isBuffer(data)) {\n        // node.js Buffer\n        this._body = data;\n      } else if (data instanceof ArrayBuffer) {\n        // ArrayBuffer arguments were supported in an old revision of the spec.\n        body = Buffer.alloc(data.byteLength);\n        view = new Uint8Array(data);\n        for (i = j = 0, ref = data.byteLength; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {\n          body[i] = view[i];\n        }\n        this._body = body;\n      } else if (data.buffer && data.buffer instanceof ArrayBuffer) {\n        // ArrayBufferView\n        body = Buffer.alloc(data.byteLength);\n        offset = data.byteOffset;\n        view = new Uint8Array(data.buffer);\n        for (i = k = 0, ref1 = data.byteLength; 0 <= ref1 ? k < ref1 : k > ref1; i = 0 <= ref1 ? ++k : --k) {\n          body[i] = view[i + offset];\n        }\n        this._body = body;\n      } else {\n        // NOTE: diverging from the XHR specification of coercing everything else\n        //       to Strings via toString() because that behavior masks bugs and is\n        //       rarely useful\n        throw new Error(`Unsupported send() data ${data}`);\n      }\n      return void 0;\n    }\n\n    // Updates the HTTP headers right before the request is sent.\n\n    // This is used to set data-dependent headers such as Content-Length and\n    // Content-Type.\n\n    // @private\n    // @param {Object<String, String>} headers the HTTP headers to be sent\n    // @param {Object<String, String>} loweredHeaders maps lowercased HTTP header\n    //   names (e.g., 'content-type') to the actual names used in the headers\n    //   parameter (e.g., 'Content-Type')\n    // @return {undefined} undefined\n    _finalizeHeaders(headers, loweredHeaders) {\n      if (this._contentType) {\n        if (!('content-type' in loweredHeaders)) {\n          headers['Content-Type'] = this._contentType;\n        }\n      }\n      if (this._body) {\n        // Restricted headers can't be set by the user, no need to check\n        // loweredHeaders.\n        headers['Content-Length'] = this._body.length.toString();\n      }\n      return void 0;\n    }\n\n    // Starts sending the HTTP request data.\n\n    // @private\n    // @param {http.ClientRequest} request the HTTP request\n    // @return {undefined} undefined\n    _startUpload(request) {\n      if (this._body) {\n        request.write(this._body);\n      }\n      request.end();\n      return void 0;\n    }\n  };\n\n  // Export the XMLHttpRequestUpload constructor.\n  XMLHttpRequest.XMLHttpRequestUpload = XMLHttpRequestUpload;\n}).call(this);"],
-  "mappings": "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",
-  "names": ["XMLHttpRequestEventTarget", "XMLHttpRequest", "url", "ProgressEvent"]
-}
